From cc870f301fc68c1fe8638c71e2649a17269f4b3b Mon Sep 17 00:00:00 2001 From: Tony Volpe Date: Wed, 25 Sep 2024 09:25:31 -0400 Subject: [PATCH] plugin installs --- .../gravityformshubspot/change_log.txt | 72 + .../gravityformshubspot/class-gf-hubspot.php | 2424 + .../gravityformshubspot/css/form_settings.css | 96 + .../css/form_settings.min.css | 1 + .../css/plugin_settings.css | 31 + .../css/plugin_settings.min.css | 1 + .../plugins/gravityformshubspot/hubspot.php | 75 + .../gravityformshubspot/images/menu-icon.svg | 3 + .../includes/class-gf-hubspot-api.php | 362 + .../js/contact_owner_setting.js | 310 + .../js/contact_owner_setting.min.js | 1 + .../gravityformshubspot/js/plugin_settings.js | 105 + .../js/plugin_settings.min.js | 1 + .../languages/gravityformshubspot.pot | 266 + .../gravityformsrecaptcha/change_log.txt | 31 + .../class-gf-recaptcha.php | 993 + .../includes/class-gf-field-recaptcha.php | 158 + .../includes/class-recaptcha-api.php | 44 + .../includes/class-token-verifier.php | 364 + .../settings/class-plugin-settings.php | 630 + .../js/frontend-legacy.js | 146 + .../js/frontend-legacy.js.map | 1 + .../js/frontend-legacy.min.js | 1 + .../gravityformsrecaptcha/js/frontend.js | 106 + .../gravityformsrecaptcha/js/frontend.js.map | 1 + .../gravityformsrecaptcha/js/frontend.min.js | 2 + .../js/frontend.min.js.LICENSE.txt | 1 + .../js/plugin_settings.js | 412 + .../js/plugin_settings.js.map | 1 + .../js/plugin_settings.min.js | 1 + .../languages/gravityformsrecaptcha.pot | 186 + .../gravityformsrecaptcha/recaptcha.php | 78 + wp/wp-content/plugins/imagify/SECURITY.md | 6 + .../plugins/imagify/_dev/bud.config.js | 20 + .../plugins/imagify/_dev/package.json | 15 + .../plugins/imagify/_dev/src/bulk.js | 1143 + .../plugins/imagify/_dev/src/chart.js | 6 + .../imagify/assets/admin/entrypoints.json | 14 + .../plugins/imagify/assets/admin/js/bulk.js | 1 + .../plugins/imagify/assets/admin/js/chart.js | 1 + .../imagify/assets/admin/js/runtime.js | 1 + .../imagify/assets/admin/manifest.json | 6 + .../plugins/imagify/assets/css/admin-bar.css | 199 + .../imagify/assets/css/admin-bar.min.css | 1 + .../plugins/imagify/assets/css/admin.css | 1597 + .../plugins/imagify/assets/css/admin.min.css | 1 + .../plugins/imagify/assets/css/bulk.css | 1306 + .../plugins/imagify/assets/css/bulk.min.css | 1 + .../plugins/imagify/assets/css/files-list.css | 171 + .../imagify/assets/css/files-list.min.css | 1 + .../plugins/imagify/assets/css/notices.css | 376 + .../imagify/assets/css/notices.min.css | 1 + .../plugins/imagify/assets/css/options.css | 968 + .../imagify/assets/css/options.min.css | 1 + .../imagify/assets/css/pricing-modal.css | 1340 + .../imagify/assets/css/pricing-modal.min.css | 1 + .../imagify/assets/css/sweetalert-custom.css | 172 + .../assets/css/sweetalert-custom.min.css | 1 + .../imagify/assets/css/sweetalert2.css | 716 + .../imagify/assets/css/sweetalert2.min.css | 1 + .../imagify/assets/css/twentytwenty.css | 315 + .../imagify/assets/css/twentytwenty.min.css | 1 + .../imagify/assets/images/big-blue-check.png | Bin 0 -> 2923 bytes .../plugins/imagify/assets/images/bulk.svg | 1 + .../plugins/imagify/assets/images/check-1.svg | 1 + .../imagify/assets/images/check-mini-1.svg | 9 + .../imagify/assets/images/check-mini.svg | 14 + .../plugins/imagify/assets/images/check.svg | 14 + .../imagify/assets/images/cloudy-sun.svg | 22 + .../imagify/assets/images/facebook_c.svg | 1 + .../plugins/imagify/assets/images/gear.svg | 1 + .../imagify/assets/images/icon-alert.svg | 1 + .../assets/images/icon-arrow-choice.png | Bin 0 -> 401 bytes .../assets/images/icon-arrow-choice.svg | 12 + .../imagify/assets/images/icon-doc-image.svg | 1 + .../imagify/assets/images/icon-external.svg | 1 + .../imagify/assets/images/icon-level.svg | 7 + .../imagify/assets/images/icon-load.svg | 1 + .../imagify/assets/images/icon-lock.png | Bin 0 -> 262 bytes .../imagify/assets/images/icon-lock.svg | 2 + .../imagify/assets/images/icon-pack.png | Bin 0 -> 438 bytes .../imagify/assets/images/icon-pack.svg | 16 + .../imagify/assets/images/icon-time.svg | 1 + .../imagify/assets/images/imagify-logo.png | Bin 0 -> 3161 bytes .../assets/images/imagify-menu-bar-de.jpg | Bin 0 -> 25171 bytes .../assets/images/imagify-menu-bar-en.jpg | Bin 0 -> 23662 bytes .../assets/images/imagify-menu-bar-es.jpg | Bin 0 -> 25132 bytes .../assets/images/imagify-menu-bar-fr.jpg | Bin 0 -> 24126 bytes .../assets/images/imagify-menu-bar-it.jpg | Bin 0 -> 25587 bytes .../plugins/imagify/assets/images/imagify.svg | 32 + .../plugins/imagify/assets/images/key.svg | 1 + .../imagify/assets/images/lazyload.png | Bin 0 -> 734 bytes .../imagify/assets/images/loader-balls.svg | 144 + .../imagify/assets/images/logo-wprocket.png | Bin 0 -> 3634 bytes .../imagify/assets/images/logo-wprocket.svg | 47 + .../assets/images/logo-wprocket@2x.png | Bin 0 -> 7784 bytes .../plugins/imagify/assets/images/mail.svg | 1 + .../assets/images/mushrooms-aggressive.jpg | Bin 0 -> 105170 bytes .../assets/images/mushrooms-normal.jpg | Bin 0 -> 294234 bytes .../assets/images/mushrooms-original.jpg | Bin 0 -> 334847 bytes .../imagify/assets/images/mushrooms-ultra.jpg | Bin 0 -> 45208 bytes .../plugins/imagify/assets/images/phone.svg | 1 + .../imagify/assets/images/pic-ericwaltr.jpg | Bin 0 -> 4665 bytes .../imagify/assets/images/pic-srhdesign.jpg | Bin 0 -> 9601 bytes .../imagify/assets/images/popin-loader.svg | 29 + .../plugins/imagify/assets/images/spinner.gif | Bin 0 -> 3595 bytes .../plugins/imagify/assets/images/stormy.svg | 1 + .../plugins/imagify/assets/images/sun.svg | 1 + .../imagify/assets/images/twitter_c.svg | 1 + .../imagify/assets/images/upload-image.png | Bin 0 -> 557 bytes .../plugins/imagify/assets/images/user.svg | 1 + .../plugins/imagify/assets/js/admin-bar.js | 37 + .../imagify/assets/js/admin-bar.min.js | 1 + .../plugins/imagify/assets/js/admin.js | 103 + .../plugins/imagify/assets/js/admin.min.js | 1 + .../plugins/imagify/assets/js/beat.js | 872 + .../plugins/imagify/assets/js/beat.min.js | 1 + .../imagify/assets/js/es6-promise.auto.js | 1158 + .../imagify/assets/js/es6-promise.auto.min.js | 1 + .../plugins/imagify/assets/js/files-list.js | 457 + .../imagify/assets/js/files-list.min.js | 1 + .../plugins/imagify/assets/js/imagify-gulp.js | 400 + .../imagify/assets/js/imagify-gulp.min.js | 396 + .../imagify/assets/js/jquery.event.move.js | 584 + .../assets/js/jquery.event.move.min.js | 1 + .../imagify/assets/js/jquery.twentytwenty.js | 708 + .../assets/js/jquery.twentytwenty.min.js | 1 + .../plugins/imagify/assets/js/library.js | 51 + .../plugins/imagify/assets/js/library.min.js | 1 + .../plugins/imagify/assets/js/media-modal.js | 334 + .../imagify/assets/js/media-modal.min.js | 1 + .../plugins/imagify/assets/js/notices.js | 127 + .../plugins/imagify/assets/js/notices.min.js | 1 + .../plugins/imagify/assets/js/options.js | 993 + .../plugins/imagify/assets/js/options.min.js | 1 + .../imagify/assets/js/pricing-modal.js | 1325 + .../imagify/assets/js/pricing-modal.min.js | 1 + .../plugins/imagify/assets/js/sweetalert2.js | 1641 + .../imagify/assets/js/sweetalert2.min.js | 1 + .../imagify/classes/Admin/AdminBar.php | 81 + .../plugins/imagify/classes/Auth/Basic.php | 100 + .../plugins/imagify/classes/Avif/Apache.php | 31 + .../plugins/imagify/classes/Avif/Display.php | 171 + .../plugins/imagify/classes/Avif/IIS.php | 32 + .../classes/Avif/RewriteRules/Apache.php | 59 + .../classes/Avif/RewriteRules/Display.php | 224 + .../imagify/classes/Avif/RewriteRules/IIS.php | 58 + .../classes/Avif/RewriteRules/Nginx.php | 30 + .../imagify/classes/Avif/ServiceProvider.php | 51 + .../imagify/classes/Bulk/AbstractBulk.php | 123 + .../plugins/imagify/classes/Bulk/Bulk.php | 660 + .../imagify/classes/Bulk/BulkInterface.php | 63 + .../imagify/classes/Bulk/CustomFolders.php | 192 + .../plugins/imagify/classes/Bulk/Noop.php | 72 + .../plugins/imagify/classes/Bulk/WP.php | 320 + .../plugins/imagify/classes/CDN/CDN.php | 123 + .../imagify/classes/CDN/PushCDNInterface.php | 96 + .../imagify/classes/CDN/ServiceProvider.php | 47 + .../imagify/classes/CLI/AbstractCommand.php | 30 + .../classes/CLI/BulkOptimizeCommand.php | 66 + .../imagify/classes/CLI/CommandInterface.php | 35 + .../CLI/GenerateMissingNextgenCommand.php | 52 + .../classes/Context/AbstractContext.php | 262 + .../classes/Context/ContextInterface.php | 141 + .../imagify/classes/Context/CustomFolders.php | 102 + .../plugins/imagify/classes/Context/Noop.php | 153 + .../plugins/imagify/classes/Context/WP.php | 146 + .../imagify/classes/DB/DBInterface.php | 84 + .../Argument/ArgumentResolverInterface.php | 28 + .../Argument/ArgumentResolverTrait.php | 120 + .../League/Container/Argument/ClassName.php | 29 + .../Container/Argument/ClassNameInterface.php | 13 + .../Argument/ClassNameWithOptionalValue.php | 39 + .../League/Container/Argument/RawArgument.php | 29 + .../Argument/RawArgumentInterface.php | 13 + .../League/Container/Container.php | 248 + .../Container/ContainerAwareInterface.php | 40 + .../League/Container/ContainerAwareTrait.php | 76 + .../Container/Definition/Definition.php | 278 + .../Definition/DefinitionAggregate.php | 124 + .../DefinitionAggregateInterface.php | 67 + .../Definition/DefinitionInterface.php | 120 + .../Exception/ContainerException.php | 10 + .../Container/Exception/NotFoundException.php | 10 + .../League/Container/Inflector/Inflector.php | 123 + .../Inflector/InflectorAggregate.php | 58 + .../Inflector/InflectorAggregateInterface.php | 27 + .../Inflector/InflectorInterface.php | 60 + .../League/Container/ReflectionContainer.php | 131 + .../AbstractServiceProvider.php | 46 + .../BootableServiceProviderInterface.php | 14 + .../ServiceProviderAggregate.php | 106 + .../ServiceProviderAggregateInterface.php | 36 + .../ServiceProviderInterface.php | 46 + .../Container/ContainerExceptionInterface.php | 12 + .../Psr/Container/ContainerInterface.php | 36 + .../Container/NotFoundExceptionInterface.php | 10 + .../imagify/classes/Imagifybeat/Actions.php | 377 + .../imagify/classes/Imagifybeat/Core.php | 172 + .../imagify/classes/Job/MediaOptimization.php | 373 + .../imagify/classes/Media/AbstractMedia.php | 552 + .../imagify/classes/Media/CustomFolders.php | 358 + .../imagify/classes/Media/MediaInterface.php | 337 + .../plugins/imagify/classes/Media/Noop.php | 390 + .../plugins/imagify/classes/Media/WP.php | 430 + .../imagify/classes/Notices/Notices.php | 909 + .../Optimization/Data/AbstractData.php | 468 + .../Optimization/Data/CustomFolders.php | 320 + .../Optimization/Data/DataInterface.php | 275 + .../classes/Optimization/Data/Noop.php | 285 + .../imagify/classes/Optimization/Data/WP.php | 207 + .../imagify/classes/Optimization/File.php | 913 + .../Optimization/Process/AbstractProcess.php | 2044 + .../Optimization/Process/CustomFolders.php | 103 + .../classes/Optimization/Process/Noop.php | 351 + .../Optimization/Process/ProcessInterface.php | 293 + .../classes/Optimization/Process/WP.php | 255 + .../imagify/classes/Picture/Display.php | 762 + .../classes/Picture/ServiceProvider.php | 48 + .../plugins/imagify/classes/Plugin.php | 261 + .../Stats/OptimizedMediaWithoutNextGen.php | 211 + .../imagify/classes/Stats/ServiceProvider.php | 47 + .../imagify/classes/Stats/StatInterface.php | 44 + .../classes/Traits/InstanceGetterTrait.php | 43 + .../imagify/classes/Traits/MediaRowTrait.php | 139 + .../plugins/imagify/classes/User/User.php | 292 + .../plugins/imagify/classes/Webp/Apache.php | 36 + .../plugins/imagify/classes/Webp/Display.php | 213 + .../plugins/imagify/classes/Webp/IIS.php | 37 + .../classes/Webp/RewriteRules/Apache.php | 61 + .../classes/Webp/RewriteRules/Display.php | 239 + .../imagify/classes/Webp/RewriteRules/IIS.php | 62 + .../classes/Webp/RewriteRules/Nginx.php | 70 + .../imagify/classes/Webp/ServiceProvider.php | 51 + .../WriteFile/AbstractApacheDirConfFile.php | 77 + .../WriteFile/AbstractIISDirConfFile.php | 283 + .../WriteFile/AbstractNginxDirConfFile.php | 77 + .../WriteFile/AbstractWriteDirConfFile.php | 395 + .../classes/WriteFile/WriteFileInterface.php | 68 + .../plugins/imagify/config/providers.php | 8 + .../plugins/imagify/contributors.txt | 20 + wp/wp-content/plugins/imagify/imagify.php | 163 + .../imagify/inc/3rd-party/3rd-party.php | 27 + .../WooCommerce/class-woocommerce.php | 95 + .../amazon-s3-and-cloudfront.php | 64 + .../classes/CDN/WP/AS3.php | 513 + .../amazon-s3-and-cloudfront/classes/Main.php | 631 + .../plugins/imagify/inc/3rd-party/amp/amp.php | 22 + .../enable-media-replace/classes/Main.php | 152 + .../enable-media-replace.php | 10 + .../3rd-party/formidable-pro/classes/Main.php | 69 + .../formidable-pro/formidable-pro.php | 12 + .../inc/3rd-party/hosting/flywheel.php | 34 + .../inc/3rd-party/hosting/pressable.php | 24 + .../inc/3rd-party/hosting/siteground.php | 71 + .../inc/3rd-party/hosting/wordpress-com.php | 30 + .../inc/3rd-party/hosting/wpengine.php | 21 + .../nextgen-gallery/classes/Bulk/NGG.php | 240 + .../nextgen-gallery/classes/Context/NGG.php | 113 + .../3rd-party/nextgen-gallery/classes/DB.php | 142 + .../classes/DynamicThumbnails.php | 133 + .../nextgen-gallery/classes/Main.php | 137 + .../nextgen-gallery/classes/Media/NGG.php | 543 + .../nextgen-gallery/classes/NGGStorage.php | 106 + .../classes/Optimization/Data/NGG.php | 284 + .../classes/Optimization/Process/NGG.php | 88 + .../nextgen-gallery/inc/admin/bulk.php | 107 + .../nextgen-gallery/inc/admin/enqueue.php | 45 + .../nextgen-gallery/inc/admin/gallery.php | 64 + .../nextgen-gallery/inc/admin/menu.php | 19 + .../inc/common/attachments.php | 347 + .../inc/functions/admin-stats.php | 198 + .../inc/functions/attachments.php | 21 + .../nextgen-gallery/inc/functions/common.php | 32 + .../nextgen-gallery/nextgen-gallery.php | 27 + .../regenerate-thumbnails/classes/Main.php | 401 + .../regenerate-thumbnails.php | 10 + .../imagify/inc/3rd-party/screets-lc.php | 31 + .../wp-cloudflare-super-page-cache.php | 25 + .../inc/3rd-party/wp-real-media-library.php | 72 + .../inc/3rd-party/wp-rocket/classes/Main.php | 87 + .../inc/3rd-party/wp-rocket/wp-rocket.php | 8 + .../imagify/inc/3rd-party/yoast-seo.php | 24 + .../Dependencies/ActionScheduler/README.md | 35 + .../ActionScheduler/action-scheduler.php | 70 + .../ActionScheduler/changelog.txt | 141 + .../classes/ActionScheduler_ActionClaim.php | 23 + .../classes/ActionScheduler_ActionFactory.php | 357 + .../classes/ActionScheduler_AdminView.php | 252 + ...tionScheduler_AsyncRequest_QueueRunner.php | 97 + .../classes/ActionScheduler_Compatibility.php | 105 + .../ActionScheduler_DataController.php | 187 + .../classes/ActionScheduler_DateTime.php | 79 + .../classes/ActionScheduler_Exception.php | 11 + .../ActionScheduler_FatalErrorMonitor.php | 55 + ...ActionScheduler_InvalidActionException.php | 47 + .../classes/ActionScheduler_ListTable.php | 670 + .../classes/ActionScheduler_LogEntry.php | 67 + .../classes/ActionScheduler_NullLogEntry.php | 11 + .../classes/ActionScheduler_OptionLock.php | 135 + .../classes/ActionScheduler_QueueCleaner.php | 233 + .../classes/ActionScheduler_QueueRunner.php | 229 + .../classes/ActionScheduler_Versions.php | 62 + .../ActionScheduler_WPCommentCleaner.php | 115 + .../ActionScheduler_wcSystemStatus.php | 166 + .../ActionScheduler_WPCLI_Clean_Command.php | 125 + .../ActionScheduler_WPCLI_QueueRunner.php | 197 + ...ctionScheduler_WPCLI_Scheduler_command.php | 210 + .../classes/WP_CLI/Migration_Command.php | 148 + .../classes/WP_CLI/ProgressBar.php | 119 + .../classes/abstracts/ActionScheduler.php | 337 + .../ActionScheduler_Abstract_ListTable.php | 776 + .../ActionScheduler_Abstract_QueueRunner.php | 372 + ...onScheduler_Abstract_RecurringSchedule.php | 102 + .../ActionScheduler_Abstract_Schedule.php | 83 + .../ActionScheduler_Abstract_Schema.php | 177 + .../abstracts/ActionScheduler_Lock.php | 64 + .../abstracts/ActionScheduler_Logger.php | 176 + .../abstracts/ActionScheduler_Store.php | 450 + .../ActionScheduler_TimezoneHelper.php | 152 + .../actions/ActionScheduler_Action.php | 135 + .../ActionScheduler_CanceledAction.php | 23 + .../ActionScheduler_FinishedAction.php | 16 + .../actions/ActionScheduler_NullAction.php | 16 + .../data-stores/ActionScheduler_DBLogger.php | 154 + .../data-stores/ActionScheduler_DBStore.php | 1180 + .../ActionScheduler_HybridStore.php | 426 + .../ActionScheduler_wpCommentLogger.php | 240 + .../ActionScheduler_wpPostStore.php | 1088 + ...eduler_wpPostStore_PostStatusRegistrar.php | 58 + ...cheduler_wpPostStore_PostTypeRegistrar.php | 50 + ...cheduler_wpPostStore_TaxonomyRegistrar.php | 26 + .../classes/migration/ActionMigrator.php | 109 + .../ActionScheduler_DBStoreMigrator.php | 47 + .../classes/migration/BatchFetcher.php | 86 + .../classes/migration/Config.php | 168 + .../classes/migration/Controller.php | 226 + .../migration/DryRun_ActionMigrator.php | 28 + .../classes/migration/DryRun_LogMigrator.php | 23 + .../classes/migration/LogMigrator.php | 49 + .../classes/migration/Runner.php | 136 + .../classes/migration/Scheduler.php | 128 + .../ActionScheduler_CanceledSchedule.php | 57 + .../ActionScheduler_CronSchedule.php | 102 + .../ActionScheduler_IntervalSchedule.php | 81 + .../ActionScheduler_NullSchedule.php | 31 + .../schedules/ActionScheduler_Schedule.php | 18 + .../ActionScheduler_SimpleSchedule.php | 71 + .../schema/ActionScheduler_LoggerSchema.php | 90 + .../schema/ActionScheduler_StoreSchema.php | 131 + ...eduler_Abstract_QueueRunner_Deprecated.php | 27 + .../ActionScheduler_AdminView_Deprecated.php | 147 + .../ActionScheduler_Schedule_Deprecated.php | 29 + .../ActionScheduler_Store_Deprecated.php | 49 + .../ActionScheduler/deprecated/functions.php | 126 + .../ActionScheduler/functions.php | 493 + .../ActionScheduler/lib/WP_Async_Request.php | 191 + .../lib/cron-expression/CronExpression.php | 318 + .../CronExpression_AbstractField.php | 100 + .../CronExpression_DayOfMonthField.php | 110 + .../CronExpression_DayOfWeekField.php | 124 + .../CronExpression_FieldFactory.php | 55 + .../CronExpression_FieldInterface.php | 39 + .../CronExpression_HoursField.php | 47 + .../CronExpression_MinutesField.php | 39 + .../CronExpression_MonthField.php | 55 + .../CronExpression_YearField.php | 43 + .../lib/cron-expression/LICENSE | 19 + .../lib/cron-expression/README.md | 92 + .../Dependencies/ActionScheduler/license.txt | 674 + .../Dependencies/ActionScheduler/readme.txt | 185 + .../imagify/inc/admin/custom-folders.php | 85 + .../plugins/imagify/inc/admin/media.php | 98 + .../plugins/imagify/inc/admin/meta-boxes.php | 90 + .../plugins/imagify/inc/admin/upgrader.php | 344 + .../plugins/imagify/inc/admin/upload.php | 131 + .../imagify/inc/classes/Dependencies/.gitkeep | 0 .../classes/wp-async-request.php | 208 + .../classes/wp-background-process.php | 739 + .../wp-media/event-manager/EventManager.php | 135 + .../EventManagerAwareSubscriberInterface.php | 14 + .../event-manager/SubscriberInterface.php | 32 + ...ss-imagify-abstract-background-process.php | 165 + .../classes/class-imagify-abstract-cron.php | 299 + .../inc/classes/class-imagify-abstract-db.php | 883 + .../class-imagify-abstract-options.php | 623 + .../classes/class-imagify-admin-ajax-post.php | 1310 + .../inc/classes/class-imagify-assets.php | 797 + .../class-imagify-auto-optimization.php | 652 + .../class-imagify-cron-library-size.php | 91 + .../inc/classes/class-imagify-cron-rating.php | 110 + .../classes/class-imagify-cron-sync-files.php | 100 + .../classes/class-imagify-custom-folders.php | 1316 + .../inc/classes/class-imagify-data.php | 103 + .../imagify/inc/classes/class-imagify-db.php | 580 + .../inc/classes/class-imagify-files-db.php | 177 + .../classes/class-imagify-files-iterator.php | 117 + .../class-imagify-files-list-table.php | 1043 + ...class-imagify-files-recursive-iterator.php | 104 + .../inc/classes/class-imagify-files-scan.php | 717 + .../inc/classes/class-imagify-files-stats.php | 474 + .../inc/classes/class-imagify-filesystem.php | 1127 + .../inc/classes/class-imagify-folders-db.php | 238 + .../inc/classes/class-imagify-options.php | 215 + .../class-imagify-requirements-check.php | 343 + .../classes/class-imagify-requirements.php | 342 + .../inc/classes/class-imagify-settings.php | 994 + .../inc/classes/class-imagify-views.php | 684 + .../imagify/inc/classes/class-imagify.php | 657 + .../plugins/imagify/inc/common/admin-bar.php | 79 + .../imagify/inc/common/attachments.php | 101 + .../plugins/imagify/inc/common/partners.php | 33 + .../imagify/inc/deprecated/3rd-party.php | 334 + .../Media/CustomFoldersDeprecatedTrait.php | 44 + .../Traits/Media/NGGDeprecatedTrait.php | 38 + .../Traits/Media/NoopDeprecatedTrait.php | 30 + .../Traits/Media/WPDeprecatedTrait.php | 40 + .../AbstractProcessDeprecatedTrait.php | 44 + .../class-imagify-abstract-attachment.php | 1237 + .../class-imagify-abstract-db-deprecated.php | 48 + ...ass-imagify-admin-ajax-post-deprecated.php | 509 + .../class-imagify-as3cf-attachment.php | 990 + .../class-imagify-as3cf-deprecated.php | 313 + .../class-imagify-assets-deprecated.php | 104 + .../classes/class-imagify-attachment.php | 850 + ...s-imagify-auto-optimization-deprecated.php | 55 + ...magify-enable-media-replace-deprecated.php | 181 + .../classes/class-imagify-file-attachment.php | 760 + .../classes/class-imagify-ngg-attachment.php | 1011 + ...-dynamic-thumbnails-background-process.php | 167 + .../class-imagify-notices-deprecated.php | 29 + ...agify-regenerate-thumbnails-deprecated.php | 160 + .../deprecated/classes/class-imagify-user.php | 265 + .../imagify/inc/deprecated/deprecated.php | 1754 + .../imagify/inc/functions/admin-stats.php | 795 + .../imagify/inc/functions/admin-ui.php | 541 + .../plugins/imagify/inc/functions/admin.php | 437 + .../plugins/imagify/inc/functions/api.php | 315 + .../imagify/inc/functions/attachments.php | 379 + .../plugins/imagify/inc/functions/common.php | 646 + .../imagify/inc/functions/formatting.php | 57 + .../plugins/imagify/inc/functions/i18n.php | 333 + .../plugins/imagify/inc/functions/media.php | 22 + .../plugins/imagify/inc/functions/options.php | 99 + .../imagify/inc/functions/partners.php | 38 + .../plugins/imagify/inc/functions/process.php | 66 + wp/wp-content/plugins/imagify/inc/main.php | 35 + wp/wp-content/plugins/imagify/readme.txt | 816 + wp/wp-content/plugins/imagify/uninstall.php | 50 + .../plugins/imagify/vendor/autoload.php | 25 + .../imagify/vendor/composer/ClassLoader.php | 579 + .../vendor/composer/InstalledVersions.php | 359 + .../plugins/imagify/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 56 + .../vendor/composer/autoload_namespaces.php | 9 + .../imagify/vendor/composer/autoload_psr4.php | 19 + .../imagify/vendor/composer/autoload_real.php | 38 + .../vendor/composer/autoload_static.php | 136 + .../imagify/vendor/composer/installed.json | 193 + .../imagify/vendor/composer/installed.php | 41 + .../workflows/continuous-integration.yml | 62 + .../installers/.github/workflows/lint.yml | 30 + .../installers/.github/workflows/phpstan.yml | 49 + .../vendor/composer/installers/LICENSE | 19 + .../vendor/composer/installers/composer.json | 116 + .../composer/installers/phpstan.neon.dist | 12 + .../src/Composer/Installers/AglInstaller.php | 29 + .../Installers/AkauntingInstaller.php | 23 + .../Installers/AnnotateCmsInstaller.php | 13 + .../Composer/Installers/AsgardInstaller.php | 58 + .../Composer/Installers/AttogramInstaller.php | 11 + .../src/Composer/Installers/BaseInstaller.php | 137 + .../Composer/Installers/BitrixInstaller.php | 123 + .../Composer/Installers/BonefishInstaller.php | 11 + .../Composer/Installers/CakePHPInstaller.php | 67 + .../src/Composer/Installers/ChefInstaller.php | 12 + .../Composer/Installers/CiviCrmInstaller.php | 11 + .../Installers/ClanCatsFrameworkInstaller.php | 12 + .../Composer/Installers/CockpitInstaller.php | 36 + .../Installers/CodeIgniterInstaller.php | 13 + .../Installers/Concrete5Installer.php | 15 + .../Composer/Installers/CroogoInstaller.php | 23 + .../Composer/Installers/DecibelInstaller.php | 12 + .../Composer/Installers/DframeInstaller.php | 11 + .../Composer/Installers/DokuWikiInstaller.php | 57 + .../Composer/Installers/DolibarrInstaller.php | 18 + .../Composer/Installers/DrupalInstaller.php | 24 + .../src/Composer/Installers/ElggInstaller.php | 11 + .../Composer/Installers/EliasisInstaller.php | 14 + .../Installers/ExpressionEngineInstaller.php | 31 + .../Installers/EzPlatformInstaller.php | 12 + .../src/Composer/Installers/FuelInstaller.php | 13 + .../Composer/Installers/FuelphpInstaller.php | 11 + .../src/Composer/Installers/GravInstaller.php | 29 + .../Composer/Installers/HuradInstaller.php | 27 + .../Composer/Installers/ImageCMSInstaller.php | 13 + .../src/Composer/Installers/Installer.php | 280 + .../src/Composer/Installers/ItopInstaller.php | 11 + .../Composer/Installers/KanboardInstaller.php | 20 + .../Composer/Installers/KnownInstaller.php | 13 + .../Composer/Installers/KodiCMSInstaller.php | 12 + .../Composer/Installers/KohanaInstaller.php | 11 + .../LanManagementSystemInstaller.php | 27 + .../Composer/Installers/LaravelInstaller.php | 11 + .../Composer/Installers/LavaLiteInstaller.php | 12 + .../Composer/Installers/LithiumInstaller.php | 12 + .../Installers/MODULEWorkInstaller.php | 11 + .../Composer/Installers/MODXEvoInstaller.php | 18 + .../Composer/Installers/MagentoInstaller.php | 13 + .../Composer/Installers/MajimaInstaller.php | 46 + .../src/Composer/Installers/MakoInstaller.php | 11 + .../Composer/Installers/MantisBTInstaller.php | 25 + .../Composer/Installers/MatomoInstaller.php | 28 + .../Composer/Installers/MauticInstaller.php | 43 + .../src/Composer/Installers/MayaInstaller.php | 38 + .../Installers/MediaWikiInstaller.php | 58 + .../Composer/Installers/MiaoxingInstaller.php | 11 + .../Installers/MicroweberInstaller.php | 145 + .../src/Composer/Installers/ModxInstaller.php | 14 + .../Composer/Installers/MoodleInstaller.php | 67 + .../Composer/Installers/OctoberInstaller.php | 57 + .../Composer/Installers/OntoWikiInstaller.php | 26 + .../Composer/Installers/OsclassInstaller.php | 14 + .../src/Composer/Installers/OxidInstaller.php | 49 + .../src/Composer/Installers/PPIInstaller.php | 11 + .../Composer/Installers/PantheonInstaller.php | 12 + .../Composer/Installers/PhiftyInstaller.php | 13 + .../Composer/Installers/PhpBBInstaller.php | 13 + .../Composer/Installers/PiwikInstaller.php | 28 + .../Installers/PlentymarketsInstaller.php | 28 + .../src/Composer/Installers/Plugin.php | 28 + .../Composer/Installers/PortoInstaller.php | 11 + .../Installers/PrestashopInstaller.php | 12 + .../Installers/ProcessWireInstaller.php | 23 + .../Composer/Installers/PuppetInstaller.php | 12 + .../Composer/Installers/PxcmsInstaller.php | 62 + .../Composer/Installers/RadPHPInstaller.php | 26 + .../Composer/Installers/ReIndexInstaller.php | 12 + .../Composer/Installers/Redaxo5Installer.php | 12 + .../Composer/Installers/RedaxoInstaller.php | 12 + .../Installers/RoundcubeInstaller.php | 21 + .../src/Composer/Installers/SMFInstaller.php | 12 + .../Composer/Installers/ShopwareInstaller.php | 66 + .../Installers/SilverStripeInstaller.php | 33 + .../Installers/SiteDirectInstaller.php | 34 + .../Composer/Installers/StarbugInstaller.php | 14 + .../Composer/Installers/SyDESInstaller.php | 55 + .../Composer/Installers/SyliusInstaller.php | 11 + .../src/Composer/Installers/TaoInstaller.php | 32 + .../Installers/TastyIgniterInstaller.php | 85 + .../Composer/Installers/TheliaInstaller.php | 14 + .../src/Composer/Installers/TuskInstaller.php | 17 + .../Installers/UserFrostingInstaller.php | 11 + .../Composer/Installers/VanillaInstaller.php | 12 + .../Composer/Installers/VgmcpInstaller.php | 59 + .../Composer/Installers/WHMCSInstaller.php | 22 + .../Composer/Installers/WinterInstaller.php | 71 + .../Composer/Installers/WolfCMSInstaller.php | 11 + .../Installers/WordPressInstaller.php | 14 + .../Composer/Installers/YawikInstaller.php | 23 + .../src/Composer/Installers/ZendInstaller.php | 13 + .../Composer/Installers/ZikulaInstaller.php | 12 + .../composer/installers/src/bootstrap.php | 18 + .../vendor/composer/platform_check.php | 26 + .../ComposerForWordpress.php | 75 + .../imagify/views/admin/admin-bar-status.php | 41 + .../imagify/views/button/compare-images.php | 13 + .../imagify/views/button/delete-webp.php | 31 + .../imagify/views/button/generate-webp.php | 33 + .../views/button/optimize-missing-sizes.php | 39 + .../plugins/imagify/views/button/optimize.php | 30 + .../imagify/views/button/processing.php | 16 + .../imagify/views/button/re-optimize.php | 46 + .../imagify/views/button/refresh-status.php | 31 + .../plugins/imagify/views/button/restore.php | 31 + .../imagify/views/button/retry-optimize.php | 48 + .../imagify/views/container/data-actions.php | 9 + .../plugins/imagify/views/input/selector.php | 47 + .../plugins/imagify/views/modal-payment.php | 433 + .../imagify/views/modal-settings-infos.php | 57 + .../views/modal-settings-partners-infos.php | 18 + .../modal-settings-visual-comparison.php | 140 + .../notice-backup-folder-not-writable.php | 20 + .../notice-bulk-optimization-complete.php | 29 + .../notice-bulk-optimization-running.php | 19 + .../plugins/imagify/views/notice-footer.php | 8 + .../imagify/views/notice-grid-view.php | 13 + .../plugins/imagify/views/notice-header.php | 12 + .../views/notice-http-block-external.php | 22 + .../views/notice-plugins-to-deactivate.php | 22 + .../plugins/imagify/views/notice-rating.php | 36 + .../imagify/views/notice-temporary.php | 22 + .../imagify/views/notice-welcome-steps.php | 55 + .../imagify/views/notice-wp-rocket.php | 21 + .../imagify/views/notice-wrong-api-key.php | 24 + .../plugins/imagify/views/page-bulk.php | 190 + .../plugins/imagify/views/page-files-list.php | 15 + .../plugins/imagify/views/page-settings.php | 184 + .../views/part-bulk-optimization-header.php | 19 + .../views/part-bulk-optimization-infos.php | 47 + .../views/part-bulk-optimization-newbie.php | 20 + ...part-bulk-optimization-overquota-alert.php | 21 + .../views/part-bulk-optimization-success.php | 51 + ...ulk-optimization-table-row-folder-type.php | 50 + .../views/part-bulk-optimization-table.php | 113 + .../imagify/views/part-discount-banner.php | 26 + .../imagify/views/part-documentation-link.php | 14 + .../imagify/views/part-files-list-header.php | 6 + .../plugins/imagify/views/part-rocket-ad.php | 58 + .../imagify/views/part-settings-account.php | 91 + .../views/part-settings-custom-folders.php | 191 + .../views/part-settings-files-tree-row.php | 55 + .../imagify/views/part-settings-footer.php | 28 + .../imagify/views/part-settings-header.php | 41 + .../imagify/views/part-settings-library.php | 100 + .../views/part-settings-row-custom-folder.php | 8 + .../part-settings-webp-missing-message.php | 17 + .../imagify/views/part-settings-webp.php | 220 + .../plugins/imagify/views/part-upsell.php | 95 + .../plugins/leadin/build/elementor.asset.php | 1 + .../plugins/leadin/build/elementor.css | 72 + .../plugins/leadin/build/elementor.css.map | 1 + .../plugins/leadin/build/elementor.js | 8991 ++++ .../plugins/leadin/build/elementor.js.map | 1 + .../plugins/leadin/build/feedback.asset.php | 1 + .../plugins/leadin/build/feedback.js | 3839 ++ .../plugins/leadin/build/feedback.js.map | 1 + .../plugins/leadin/build/gutenberg.asset.php | 1 + .../plugins/leadin/build/gutenberg.css | 67 + .../plugins/leadin/build/gutenberg.css.map | 1 + .../plugins/leadin/build/gutenberg.js | 13124 +++++ .../plugins/leadin/build/gutenberg.js.map | 1 + .../plugins/leadin/build/leadin.asset.php | 1 + wp/wp-content/plugins/leadin/build/leadin.css | 8 + .../plugins/leadin/build/leadin.css.map | 1 + wp/wp-content/plugins/leadin/build/leadin.js | 5903 +++ .../plugins/leadin/build/leadin.js.map | 1 + .../leadin/build/reviewBanner.asset.php | 1 + .../plugins/leadin/build/reviewBanner.js | 3729 ++ .../plugins/leadin/build/reviewBanner.js.map | 1 + wp/wp-content/plugins/leadin/changelog.txt | 307 + .../plugins/leadin/languages/leadin-da_DK.mo | Bin 0 -> 3542 bytes .../plugins/leadin/languages/leadin-da_DK.po | 202 + .../plugins/leadin/languages/leadin-de_AT.mo | Bin 0 -> 3721 bytes .../plugins/leadin/languages/leadin-de_AT.po | 202 + .../leadin/languages/leadin-de_CH_informal.mo | Bin 0 -> 3721 bytes .../leadin/languages/leadin-de_CH_informal.po | 202 + .../plugins/leadin/languages/leadin-de_DE.mo | Bin 0 -> 3721 bytes .../plugins/leadin/languages/leadin-de_DE.po | 202 + .../leadin/languages/leadin-de_DE_formal.mo | Bin 0 -> 3721 bytes .../leadin/languages/leadin-de_DE_formal.po | 202 + .../plugins/leadin/languages/leadin-en.mo | Bin 0 -> 3416 bytes .../plugins/leadin/languages/leadin-en.po | 202 + .../plugins/leadin/languages/leadin-en_AU.mo | Bin 0 -> 3416 bytes .../plugins/leadin/languages/leadin-en_AU.po | 202 + .../plugins/leadin/languages/leadin-en_CA.mo | Bin 0 -> 3416 bytes .../plugins/leadin/languages/leadin-en_CA.po | 202 + .../plugins/leadin/languages/leadin-en_GB.mo | Bin 0 -> 3416 bytes .../plugins/leadin/languages/leadin-en_GB.po | 202 + .../plugins/leadin/languages/leadin-en_NZ.mo | Bin 0 -> 3416 bytes .../plugins/leadin/languages/leadin-en_NZ.po | 202 + .../plugins/leadin/languages/leadin-en_US.mo | Bin 0 -> 3416 bytes .../plugins/leadin/languages/leadin-en_US.po | 202 + .../plugins/leadin/languages/leadin-en_ZA.mo | Bin 0 -> 3416 bytes .../plugins/leadin/languages/leadin-en_ZA.po | 202 + .../plugins/leadin/languages/leadin-es_AR.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_AR.po | 202 + .../plugins/leadin/languages/leadin-es_CL.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_CL.po | 202 + .../plugins/leadin/languages/leadin-es_CO.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_CO.po | 202 + .../plugins/leadin/languages/leadin-es_CR.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_CR.po | 202 + .../plugins/leadin/languages/leadin-es_ES.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_ES.po | 202 + .../plugins/leadin/languages/leadin-es_GT.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_GT.po | 202 + .../plugins/leadin/languages/leadin-es_MX.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_MX.po | 202 + .../plugins/leadin/languages/leadin-es_PE.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_PE.po | 202 + .../plugins/leadin/languages/leadin-es_VE.mo | Bin 0 -> 3610 bytes .../plugins/leadin/languages/leadin-es_VE.po | 202 + .../plugins/leadin/languages/leadin-fi.mo | Bin 0 -> 3634 bytes .../plugins/leadin/languages/leadin-fi.po | 202 + .../plugins/leadin/languages/leadin-fr_BE.mo | Bin 0 -> 3685 bytes .../plugins/leadin/languages/leadin-fr_BE.po | 202 + .../plugins/leadin/languages/leadin-fr_CA.mo | Bin 0 -> 3685 bytes .../plugins/leadin/languages/leadin-fr_CA.po | 202 + .../plugins/leadin/languages/leadin-fr_FR.mo | Bin 0 -> 3685 bytes .../plugins/leadin/languages/leadin-fr_FR.po | 202 + .../plugins/leadin/languages/leadin-it_IT.mo | Bin 0 -> 3676 bytes .../plugins/leadin/languages/leadin-it_IT.po | 202 + .../plugins/leadin/languages/leadin-ja.mo | Bin 0 -> 4135 bytes .../plugins/leadin/languages/leadin-ja.po | 202 + .../plugins/leadin/languages/leadin-nb_NO.mo | Bin 0 -> 3497 bytes .../plugins/leadin/languages/leadin-nb_NO.po | 202 + .../plugins/leadin/languages/leadin-nl_NL.mo | Bin 0 -> 3567 bytes .../plugins/leadin/languages/leadin-nl_NL.po | 202 + .../plugins/leadin/languages/leadin-nn_NO.mo | Bin 0 -> 3497 bytes .../plugins/leadin/languages/leadin-nn_NO.po | 202 + .../plugins/leadin/languages/leadin-pl_PL.mo | Bin 0 -> 3614 bytes .../plugins/leadin/languages/leadin-pl_PL.po | 202 + .../plugins/leadin/languages/leadin-pt_AO.mo | Bin 0 -> 3582 bytes .../plugins/leadin/languages/leadin-pt_AO.po | 202 + .../plugins/leadin/languages/leadin-pt_BR.mo | Bin 0 -> 3582 bytes .../plugins/leadin/languages/leadin-pt_BR.po | 202 + .../plugins/leadin/languages/leadin-pt_PT.mo | Bin 0 -> 3582 bytes .../plugins/leadin/languages/leadin-pt_PT.po | 202 + .../leadin/languages/leadin-pt_PT_ao90.mo | Bin 0 -> 3582 bytes .../leadin/languages/leadin-pt_PT_ao90.po | 202 + .../plugins/leadin/languages/leadin-sv_SE.mo | Bin 0 -> 3564 bytes .../plugins/leadin/languages/leadin-sv_SE.po | 202 + .../plugins/leadin/languages/leadin-zh_TW.mo | Bin 0 -> 3444 bytes .../plugins/leadin/languages/leadin-zh_TW.po | 202 + .../plugins/leadin/languages/leadin.pot | 203 + wp/wp-content/plugins/leadin/leadin.php | 79 + wp/wp-content/plugins/leadin/license.txt | 642 + wp/wp-content/plugins/leadin/package.json | 70 + wp/wp-content/plugins/leadin/phpunit.xml.dist | 15 + .../public/admin/class-adminconstants.php | 206 + .../leadin/public/admin/class-connection.php | 168 + .../admin/class-contentembedinstaller.php | 154 + .../public/admin/class-deactivationform.php | 100 + .../leadin/public/admin/class-gutenberg.php | 53 + .../leadin/public/admin/class-impact.php | 46 + .../leadin/public/admin/class-leadinadmin.php | 286 + .../leadin/public/admin/class-links.php | 192 + .../public/admin/class-menuconstants.php | 19 + .../public/admin/class-noticemanager.php | 78 + .../admin/class-pluginactionsmanager.php | 55 + .../public/admin/class-reviewbanner.php | 89 + .../public/admin/class-reviewcontroller.php | 78 + .../leadin/public/admin/class-routing.php | 101 + .../api/class-hublet-api-controller.php | 40 + ...class-internal-tracking-api-controller.php | 50 + .../api/class-portal-api-controller.php | 53 + .../api/class-user-meta-api-controller.php | 54 + .../admin/widgets/class-elementorform.php | 129 + .../widgets/class-elementorformselect.php | 47 + .../admin/widgets/class-elementormeeting.php | 127 + .../widgets/class-elementormeetingselect.php | 47 + .../public/assets/images/external_link.svg | 2 + .../public/assets/images/hubspot-form.png | Bin 0 -> 27921 bytes .../public/assets/images/hubspot-meetings.png | Bin 0 -> 32192 bytes .../assets/images/hubspot-team-profile.png | Bin 0 -> 40042 bytes .../public/assets/images/hubspot-wordmark.svg | 20 + .../leadin/public/assets/images/hubspot.svg | 1 + .../public/assets/images/loading-dots.svg | 45 + .../leadin/public/assets/images/sprocket.svg | 18 + .../assets/style/fonts/LexendDeca-Bold.woff2 | Bin 0 -> 29428 bytes .../assets/style/fonts/LexendDeca-Light.woff2 | Bin 0 -> 29088 bytes .../style/fonts/LexendDeca-Medium.woff2 | Bin 0 -> 29452 bytes .../style/fonts/LexendDeca-SemiBold.woff2 | Bin 0 -> 29604 bytes .../public/assets/style/fonts/hs-font.svg | 11 + .../public/assets/style/fonts/hs-font.woff | Bin 0 -> 1116 bytes .../public/assets/style/leadin-bridge.css | 33 + .../public/assets/style/leadin-feedback.css | 201 + .../leadin/public/assets/style/leadin.css | 312 + .../leadin/public/auth/class-oauth.php | 86 + .../leadin/public/auth/class-oauthcrypto.php | 90 + .../leadin/public/class-assetsmanager.php | 167 + .../plugins/leadin/public/class-leadin.php | 68 + .../plugins/leadin/public/class-pagehooks.php | 149 + .../leadin/public/data/class-filters.php | 173 + .../public/data/class-portal-options.php | 278 + .../public/data/class-user-metadata.php | 98 + .../plugins/leadin/public/data/class-user.php | 59 + .../leadin/public/includes/api-loader.php | 27 + .../modules/api/class-base-api-controller.php | 71 + .../api/class-healthcheck-api-controller.php | 33 + .../public/utils/class-queryparameters.php | 71 + .../public/utils/class-requestutils.php | 56 + .../utils/class-shortcoderenderutils.php | 179 + .../leadin/public/utils/class-versions.php | 62 + .../plugins/leadin/public/wp/class-page.php | 33 + wp/wp-content/plugins/leadin/readme.md | 7 + wp/wp-content/plugins/leadin/readme.txt | 429 + .../leadin/scripts/api/wordpressApiClient.ts | 82 + .../scripts/constants/defaultFormOptions.ts | 35 + .../leadin/scripts/constants/leadinConfig.ts | 138 + .../leadin/scripts/constants/selectors.ts | 19 + .../elementor/Common/ConnectPluginBanner.tsx | 22 + .../elementor/Common/ElementorBanner.tsx | 20 + .../elementor/Common/ElementorButton.tsx | 25 + .../elementor/Common/ElementorWrapper.ts | 25 + .../FormWidget/ElementorFormSelect.tsx | 86 + .../FormWidget/FormControlController.tsx | 31 + .../FormWidget/FormWidgetController.tsx | 30 + .../elementor/FormWidget/hooks/useForms.ts | 45 + .../FormWidget/registerFormWidget.ts | 44 + .../MeetingWidget/ElementorMeetingSelect.tsx | 122 + .../MeetingWidget/ElementorMeetingWarning.tsx | 53 + .../MeetingControlController.tsx | 31 + .../MeetingWidget/MeetingWidgetController.tsx | 34 + .../MeetingWidget/registerMeetingWidget.ts | 42 + .../scripts/elementor/elementorWidget.ts | 46 + .../plugins/leadin/scripts/entries/app.ts | 4 + .../leadin/scripts/entries/elementor.ts | 79 + .../leadin/scripts/entries/feedback.ts | 68 + .../leadin/scripts/entries/gutenberg.ts | 10 + .../leadin/scripts/entries/reviewBanner.ts | 64 + .../leadin/scripts/feedback/ThickBoxModal.ts | 50 + .../scripts/feedback/feedbackFormApi.ts | 23 + .../scripts/gutenberg/Common/CalendarIcon.tsx | 27 + .../gutenberg/Common/SidebarSprocketIcon.tsx | 20 + .../scripts/gutenberg/Common/SprocketIcon.tsx | 42 + .../gutenberg/FormBlock/FormBlockSave.tsx | 16 + .../FormBlock/FormGutenbergPreview.tsx | 14 + .../gutenberg/FormBlock/registerFormBlock.tsx | 73 + .../MeetingsBlock/MeetingGutenbergPreview.tsx | 15 + .../MeetingsBlock/MeetingSaveBlock.tsx | 16 + .../MeetingsBlock/registerMeetingBlock.tsx | 71 + .../scripts/gutenberg/Sidebar/contentType.tsx | 83 + .../scripts/gutenberg/UIComponents/UIImage.ts | 6 + .../UIComponents/UISidebarSelectControl.tsx | 51 + .../leadin/scripts/iframe/IframeErrorPage.tsx | 54 + .../leadin/scripts/iframe/constants.ts | 15 + .../integratedMessages/core/CoreMessages.ts | 10 + .../integratedMessages/forms/FormsMessages.ts | 5 + .../iframe/integratedMessages/index.ts | 18 + .../livechat/LiveChatMessages.ts | 5 + .../plugin/PluginMessages.ts | 27 + .../integratedMessages/proxy/ProxyMessages.ts | 21 + .../scripts/iframe/messageMiddleware.ts | 161 + .../leadin/scripts/iframe/renderIframeApp.tsx | 64 + .../leadin/scripts/iframe/useAppEmbedder.ts | 223 + .../leadin/scripts/iframe/useBackgroundApp.ts | 29 + .../plugins/leadin/scripts/lib/Raven.ts | 40 + .../scripts/shared/Common/AsyncSelect.tsx | 311 + .../scripts/shared/Common/ErrorHandler.tsx | 55 + .../scripts/shared/Common/HubspotWrapper.ts | 26 + .../scripts/shared/Common/LoadingBlock.tsx | 12 + .../leadin/scripts/shared/Form/FormEdit.tsx | 81 + .../leadin/scripts/shared/Form/FormSelect.tsx | 80 + .../scripts/shared/Form/FormSelector.tsx | 36 + .../scripts/shared/Form/PreviewForm.tsx | 29 + .../Form/hooks/useCreateFormFromTemplate.ts | 53 + .../scripts/shared/Form/hooks/useForms.ts | 42 + .../shared/Form/hooks/useFormsScript.ts | 30 + .../shared/Meeting/MeetingController.tsx | 95 + .../scripts/shared/Meeting/MeetingEdit.tsx | 65 + .../shared/Meeting/MeetingSelector.tsx | 38 + .../scripts/shared/Meeting/MeetingWarning.tsx | 42 + .../shared/Meeting/MeetingsContext.tsx | 106 + .../scripts/shared/Meeting/PreviewMeeting.tsx | 31 + .../scripts/shared/Meeting/constants.ts | 2 + .../Meeting/hooks/useCurrentUserFetch.ts | 45 + .../shared/Meeting/hooks/useMeetings.ts | 121 + .../shared/Meeting/hooks/useMeetingsFetch.ts | 58 + .../shared/Meeting/hooks/useMeetingsScript.ts | 30 + .../scripts/shared/UIComponents/UIAlert.tsx | 69 + .../scripts/shared/UIComponents/UIButton.ts | 19 + .../shared/UIComponents/UIContainer.ts | 9 + .../scripts/shared/UIComponents/UIOverlay.ts | 14 + .../scripts/shared/UIComponents/UISpacer.ts | 5 + .../scripts/shared/UIComponents/UISpinner.tsx | 78 + .../scripts/shared/UIComponents/colors.ts | 9 + .../scripts/shared/enums/connectionStatus.ts | 6 + .../leadin/scripts/shared/enums/loadState.ts | 11 + .../plugins/leadin/scripts/shared/types.ts | 4 + .../plugins/leadin/scripts/utils/appUtils.ts | 14 + .../scripts/utils/backgroundAppUtils.ts | 44 + .../scripts/utils/contentEmbedInstaller.ts | 27 + .../plugins/leadin/scripts/utils/iframe.ts | 36 + .../leadin/scripts/utils/queryParams.ts | 14 + .../leadin/scripts/utils/withMetaData.ts | 30 + wp/wp-content/plugins/leadin/uninstall.php | 26 + .../plugins/leadin/vendor/autoload.php | 25 + .../leadin/vendor/composer/ClassLoader.php | 579 + .../vendor/composer/InstalledVersions.php | 359 + .../plugins/leadin/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 48 + .../vendor/composer/autoload_namespaces.php | 9 + .../leadin/vendor/composer/autoload_psr4.php | 9 + .../leadin/vendor/composer/autoload_real.php | 36 + .../vendor/composer/autoload_static.php | 58 + .../leadin/vendor/composer/installed.json | 5 + .../leadin/vendor/composer/installed.php | 23 + .../maintenance-mode/maintenance-mode.php | 87 + .../plugins/maintenance-mode/maintenance.php | 15 + .../LICENSE.txt | 674 + .../admin/class-hubwoo-admin.php | 3285 ++ .../admin/css/hubwoo-admin-global.css | 59 + .../admin/css/hubwoo-admin.css | 3803 ++ .../admin/css/index.php | 2 + .../admin/css/jquery-ui.css | 457 + .../admin/css/jquery-ui.min.css | 5 + .../admin/images/Demo.svg | 5 + .../admin/images/Documentation.svg | 4 + .../admin/images/Support.svg | 3 + .../admin/images/checked.png | Bin 0 -> 2247 bytes .../admin/images/congo.jpg | Bin 0 -> 284545 bytes .../admin/images/contact.png | Bin 0 -> 834 bytes .../admin/images/deal.png | Bin 0 -> 894 bytes .../admin/images/hubspot-pricing.png | Bin 0 -> 75992 bytes .../admin/index.php | 2 + .../admin/js/datatable.js | 205 + .../admin/js/hubwoo-admin-global.js | 68 + .../admin/js/hubwoo-admin.js | 2192 + .../admin/js/index.php | 2 + .../admin/templates/deactivation-screen.php | 30 + .../admin/templates/hubwoo-abncart.php | 27 + .../admin/templates/hubwoo-add-ons.php | 169 + .../admin/templates/hubwoo-automation.php | 134 + .../admin/templates/hubwoo-deals.php | 285 + .../templates/hubwoo-general-settings.php | 401 + .../admin/templates/hubwoo-logs.php | 61 + .../admin/templates/hubwoo-main-template.php | 207 + .../admin/templates/hubwoo-overview.php | 232 + .../admin/templates/hubwoo-support.php | 137 + .../admin/templates/hubwoo-sync-contacts.php | 47 + .../admin/templates/index.php | 2 + .../setup/hubwoo-connection-setup.php | 109 + .../templates/setup/hubwoo-grp-pr-setup.php | 264 + .../templates/setup/hubwoo-list-setup.php | 175 + .../templates/setup/hubwoo-pipeline-setup.php | 116 + .../admin/templates/setup/hubwoo-sync.php | 209 + .../changelog.txt | 123 + .../includes/class-hubwoo-activator.php | 74 + .../includes/class-hubwoo-ajax-handler.php | 2395 + .../includes/class-hubwoo-csv-handler.php | 185 + .../includes/class-hubwoo-deactivator.php | 54 + .../includes/class-hubwoo-i18n.php | 40 + .../includes/class-hubwoo-loader.php | 120 + .../class-hubwoo-rfm-configuration.php | 251 + .../includes/class-hubwoo.php | 3053 ++ .../class-hubwooconnectionmananager.php | 2893 ++ .../includes/class-hubwooconst.php | 23 + .../class-hubwoocontactproperties.php | 3273 ++ .../includes/class-hubwoocustomer.php | 311 + .../includes/class-hubwoodatasync.php | 378 + .../includes/class-hubwooecommobject.php | 169 + .../includes/class-hubwooecommproperties.php | 376 + .../class-hubwooecommpropertycallbacks.php | 459 + .../includes/class-hubwooerrorhandling.php | 157 + .../class-hubwooguestordersmanager.php | 837 + .../includes/class-hubwooobjectproperties.php | 569 + .../class-hubwoopropertycallbacks.php | 1029 + .../includes/classes/class-hubwooenum.php | 43 + .../includes/index.php | 2 + .../index.php | 2 + .../languages/index.php | 2 + ...webbetter-hubspot-for-woocommerce-en_US.mo | Bin 0 -> 337 bytes ...webbetter-hubspot-for-woocommerce-en_US.po | 2493 + .../makewebbetter-hubspot-for-woocommerce.mo | Bin 0 -> 554 bytes .../makewebbetter-hubspot-for-woocommerce.pot | 2499 + .../makewebbetter-hubspot-for-woocommerce.php | 323 + .../public/class-hubwoo-public.php | 1014 + .../public/index.php | 2 + .../readme.txt | 231 + .../plugins/relevanssi/changelog.txt | 1457 + wp/wp-content/plugins/relevanssi/delete.png | Bin 0 -> 715 bytes .../relevanssi/languages/relevanssi-fr_CA.mo | Bin 0 -> 42546 bytes .../relevanssi/languages/relevanssi-fr_CA.po | 1589 + .../plugins/relevanssi/lib/admin-ajax.php | 476 + .../plugins/relevanssi/lib/admin_scripts.js | 540 + .../relevanssi/lib/admin_scripts_free.js | 53 + .../plugins/relevanssi/lib/admin_styles.css | 118 + .../lib/class-relevanssi-taxonomy-walker.php | 74 + .../plugins/relevanssi/lib/common.php | 1970 + .../relevanssi/lib/compatibility/acf.php | 284 + .../relevanssi/lib/compatibility/aioseo.php | 108 + .../relevanssi/lib/compatibility/avada.php | 19 + .../relevanssi/lib/compatibility/bricks.php | 97 + .../lib/compatibility/elementor.php | 28 + .../lib/compatibility/fibosearch.php | 27 + .../relevanssi/lib/compatibility/groups.php | 36 + .../lib/compatibility/gutenberg.php | 173 + .../lib/compatibility/jetsmartfilters.php | 47 + .../lib/compatibility/memberpress.php | 31 + .../relevanssi/lib/compatibility/members.php | 37 + .../lib/compatibility/ninjatables.php | 101 + .../relevanssi/lib/compatibility/oxygen.php | 259 + .../lib/compatibility/paidmembershippro.php | 38 + .../relevanssi/lib/compatibility/polylang.php | 205 + .../lib/compatibility/pretty-links.php | 30 + ...duct-gtin-ean-upc-isbn-for-woocommerce.php | 62 + .../relevanssi/lib/compatibility/rankmath.php | 100 + .../lib/compatibility/restrictcontentpro.php | 32 + .../lib/compatibility/seoframework.php | 96 + .../relevanssi/lib/compatibility/seopress.php | 102 + .../lib/compatibility/simplemembership.php | 30 + .../lib/compatibility/tablepress.php | 29 + .../lib/compatibility/useraccessmanager.php | 38 + .../lib/compatibility/woocommerce.php | 300 + .../lib/compatibility/wp-file-download.php | 58 + .../lib/compatibility/wp-members.php | 46 + .../lib/compatibility/wp-search-suggest.php | 25 + .../compatibility/wpjvpostreadinggroups.php | 28 + .../relevanssi/lib/compatibility/wpml.php | 172 + .../lib/compatibility/yoast-seo.php | 102 + .../relevanssi/lib/contextual-help.php | 224 + .../plugins/relevanssi/lib/debug.php | 172 + .../plugins/relevanssi/lib/didyoumean.php | 219 + .../relevanssi/lib/excerpts-highlights.php | 1694 + .../plugins/relevanssi/lib/indexing.php | 1763 + wp/wp-content/plugins/relevanssi/lib/init.php | 548 + .../plugins/relevanssi/lib/install.php | 149 + .../plugins/relevanssi/lib/interface.php | 565 + wp/wp-content/plugins/relevanssi/lib/log.php | 431 + .../plugins/relevanssi/lib/options.php | 391 + .../plugins/relevanssi/lib/phrases.php | 311 + .../plugins/relevanssi/lib/privacy.php | 146 + .../lib/search-query-restrictions.php | 649 + .../relevanssi/lib/search-tax-query.php | 418 + .../plugins/relevanssi/lib/search.php | 2009 + .../plugins/relevanssi/lib/shortcodes.php | 217 + .../plugins/relevanssi/lib/sorting.php | 449 + .../plugins/relevanssi/lib/stopwords.php | 424 + .../relevanssi/lib/tabs/attachments-tab.php | 24 + .../relevanssi/lib/tabs/debugging-tab.php | 174 + .../relevanssi/lib/tabs/excerpts-tab.php | 461 + .../relevanssi/lib/tabs/indexing-tab.php | 553 + .../relevanssi/lib/tabs/logging-tab.php | 130 + .../relevanssi/lib/tabs/overview-tab.php | 131 + .../relevanssi/lib/tabs/redirects-tab.php | 24 + .../relevanssi/lib/tabs/search-page.php | 97 + .../relevanssi/lib/tabs/searching-tab.php | 412 + .../relevanssi/lib/tabs/stopwords-tab.php | 154 + .../relevanssi/lib/tabs/synonyms-tab.php | 102 + .../plugins/relevanssi/lib/uninstall.php | 155 + .../plugins/relevanssi/lib/user-searches.php | 385 + .../plugins/relevanssi/lib/utils.php | 1677 + wp/wp-content/plugins/relevanssi/readme.txt | 157 + .../plugins/relevanssi/relevanssi.php | 92 + .../plugins/relevanssi/relevanssi.po | 2413 + .../relevanssi/stopwords/stopword.zh_CN | 865 + .../relevanssi/stopwords/stopword.zh_TW | 769 + .../relevanssi/stopwords/stopwords.cs_CZ | 327 + .../relevanssi/stopwords/stopwords.de_DE | 1037 + .../relevanssi/stopwords/stopwords.en_GB | 323 + .../relevanssi/stopwords/stopwords.en_US | 323 + .../relevanssi/stopwords/stopwords.es_ES | 386 + .../plugins/relevanssi/stopwords/stopwords.fi | 365 + .../relevanssi/stopwords/stopwords.fr_FR | 72 + .../relevanssi/stopwords/stopwords.it_IT | 666 + .../relevanssi/stopwords/stopwords.pl_PL | 210 + .../relevanssi/stopwords/stopwords.pt_BR | 173 + .../relevanssi/stopwords/stopwords.pt_PT | 173 + .../relevanssi/stopwords/stopwords.ru_RU | 427 + .../plugins/relevanssi/uninstall.php | 31 + .../assets/banner-1544x500.jpg | Bin 0 -> 25738 bytes .../assets/banner-772x250.jpg | Bin 0 -> 11469 bytes .../assets/consent-management-platform.svg | 73 + .../assets/finished-step.png | Bin 0 -> 2709 bytes .../assets/icon-128x128.jpg | Bin 0 -> 4060 bytes .../assets/icon-256x256.jpg | Bin 0 -> 7901 bytes .../assets/inline-setup-logo.png | Bin 0 -> 60074 bytes .../assets/inline-share-buttons.svg | 22 + .../assets/screenshot-1.png | Bin 0 -> 174507 bytes .../assets/screenshot-2.png | Bin 0 -> 168750 bytes .../assets/screenshot-3.png | Bin 0 -> 166946 bytes .../assets/sharethis-setup-logo.png | Bin 0 -> 50080 bytes .../assets/st-loading.gif | Bin 0 -> 10152 bytes .../assets/sticky-setup-logo.png | Bin 0 -> 57404 bytes .../assets/sticky-share-buttons.svg | 23 + .../sharethis-share-buttons/css/admin.css | 1905 + .../sharethis-share-buttons/css/meta-box.css | 44 + .../sharethis-share-buttons/css/mu-style.css | 1 + .../sharethis-share-buttons/instance.php | 34 + .../sharethis-share-buttons/js/admin.js | 1298 + .../sharethis-share-buttons/js/blocks.js | 43 + .../sharethis-share-buttons/js/meta-box.js | 86 + .../js/set-credentials.js | 312 + .../php/class-button-widget.php | 87 + .../php/class-minute-control.php | 514 + .../php/class-plugin-base.php | 288 + .../php/class-plugin.php | 151 + .../php/class-share-buttons.php | 1671 + .../sharethis-share-buttons/readme.txt | 220 + .../sharethis-share-buttons.php | 86 + .../templates/general/gdpr/exclusions.php | 59 + .../templates/general/gdpr/gdpr-config.php | 117 + .../templates/general/gdpr/purposes.php | 207 + .../templates/minute-control/meta-box.php | 58 + .../templates/share-buttons/button-config.php | 321 + .../share-buttons/enable-buttons.php | 21 + .../templates/share-buttons/list.php | 28 + .../templates/share-buttons/onoff-buttons.php | 35 + .../share-buttons/share-button-settings.php | 25 + .../share-buttons/shortcode-templatecode.php | 16 + .../templates/share-buttons/ssb.php | 44 + .../templates/share-buttons/tabs.php | 23 + .../plugins/visual-web-optimizer/readme.txt | 147 + .../visual-website-optimizer.php | 378 + .../blocks/dynamic-blocks/siblings/block.json | 22 + .../blocks/dynamic-blocks/subpages/block.json | 23 + .../dist/premium-ai-generator-2290-rtl.css | 1 + .../css/dist/premium-ai-generator-2290.css | 1 + .../premium-draft-js-plugins-2290-rtl.css | 1 + .../dist/premium-draft-js-plugins-2290.css | 1 + .../css/dist/premium-elementor-2290-rtl.css | 1 + .../css/dist/premium-elementor-2290.css | 1 + .../css/dist/premium-metabox-2290-rtl.css | 1 + .../assets/css/dist/premium-metabox-2290.css | 1 + .../dist/premium-post-overview-2290-rtl.css | 1 + .../css/dist/premium-post-overview-2290.css | 1 + .../css/dist/premium-redirects-2290-rtl.css | 1 + .../css/dist/premium-redirects-2290.css | 1 + .../dist/premium-schema-blocks-2290-rtl.css | 1 + .../css/dist/premium-schema-blocks-2290.css | 1 + .../css/dist/premium-settings-2290-rtl.css | 1 + .../assets/css/dist/premium-settings-2290.css | 1 + .../css/dist/premium-tailwind-2290-rtl.css | 1 + .../assets/css/dist/premium-tailwind-2290.css | 1 + .../css/dist/premium-thank-you-2290-rtl.css | 1 + .../css/dist/premium-thank-you-2290.css | 1 + .../css/dist/premium-workouts-2290-rtl.css | 1 + .../assets/css/dist/premium-workouts-2290.css | 1 + .../assets/images/cornerstone-icon.svg | 1 + .../assets/images/inclusive-language-icon.svg | 1 + .../assets/js/dist/ai-generator-2290.min.js | 70 + .../assets/js/dist/blocks-2290.min.js | 64 + .../assets/js/dist/dynamic-blocks-2290.min.js | 1 + .../js/dist/frontend-inspector-2290.min.js | 1 + .../assets/js/dist/introductions-2290.min.js | 6 + .../dist/manage-ai-consent-button-2290.min.js | 6 + .../register-premium-assessments-2290.min.js | 1 + .../dist/register-text-formality-2290.min.js | 1 + .../assets/js/dist/workouts-2290.min.js | 22 + ...wp-seo-premium-admin-redirects-2290.min.js | 1 + ...o-premium-custom-fields-plugin-2290.min.js | 1 + ...p-seo-premium-draft-js-plugins-2290.min.js | 1 + .../dist/wp-seo-premium-elementor-2290.min.js | 90 + .../dist/wp-seo-premium-metabox-2290.min.js | 87 + ...premium-quickedit-notification-2290.min.js | 1 + ...premium-redirect-notifications-2290.min.js | 1 + ...direct-notifications-gutenberg-2290.min.js | 4 + ...ium-prominent-words-indexation-2290.min.js | 1 + ...emium-social-metadata-previews-2290.min.js | 1 + .../social-metadata-previews-2290.min.js | 211 + .../wordpress-seo-premium/changelog.txt | 9 + .../classes/blocks/siblings-block.php | 86 + .../classes/blocks/subpages-block.php | 79 + .../classes/custom-fields-plugin.php | 115 + .../classes/export/export-keywords-csv.php | 228 + .../export/export-keywords-post-presenter.php | 230 + .../export/export-keywords-post-query.php | 183 + .../export-keywords-presenter-interface.php | 33 + .../export-keywords-query-interface.php | 40 + .../export/export-keywords-term-presenter.php | 183 + .../export/export-keywords-term-query.php | 132 + .../classes/metabox-link-suggestions.php | 115 + .../classes/multi-keyword.php | 118 + .../classes/post-watcher.php | 600 + .../classes/premium-asset-js-l10n.php | 47 + .../classes/premium-assets.php | 479 + .../classes/premium-expose-shortlinks.php | 36 + .../classes/premium-import-manager.php | 374 + .../classes/premium-javascript-strings.php | 80 + .../premium-keyword-export-manager.php | 209 + .../classes/premium-metabox.php | 388 + .../classes/premium-option.php | 102 + .../premium-orphaned-content-support.php | 47 + .../premium-orphaned-content-utils.php | 44 + .../classes/premium-orphaned-post-filter.php | 204 + .../classes/premium-orphaned-post-query.php | 122 + .../premium-prominent-words-support.php | 113 + ...m-prominent-words-unindexed-post-query.php | 190 + .../premium-prominent-words-versioning.php | 67 + .../classes/premium-redirect-endpoint.php | 120 + .../premium-redirect-export-manager.php | 116 + .../classes/premium-redirect-option.php | 80 + .../classes/premium-redirect-service.php | 94 + .../classes/premium-register-capabilities.php | 32 + ...emium-stale-cornerstone-content-filter.php | 130 + .../classes/product-premium.php | 60 + .../classes/redirect-undo-endpoint.php | 176 + .../classes/redirect/executable-redirect.php | 104 + .../exporters/redirect-apache-exporter.php | 138 + .../exporters/redirect-csv-exporter.php | 93 + .../exporters/redirect-exporter-interface.php | 28 + .../exporters/redirect-file-exporter.php | 92 + .../exporters/redirect-htaccess-exporter.php | 101 + .../exporters/redirect-nginx-exporter.php | 72 + .../exporters/redirect-option-exporter.php | 66 + .../loaders/redirect-abstract-loader.php | 45 + .../redirect/loaders/redirect-csv-loader.php | 78 + .../loaders/redirect-htaccess-loader.php | 145 + .../loaders/redirect-loader-interface.php | 19 + .../loaders/redirect-redirection-loader.php | 66 + .../loaders/redirect-safe-redirect-loader.php | 83 + .../redirect-simple-301-redirect-loader.php | 44 + .../presenters/redirect-form-presenter.php | 57 + .../presenters/redirect-page-presenter.php | 89 + .../redirect-presenter-interface.php | 21 + .../redirect-quick-edit-presenter.php | 23 + .../redirect-settings-presenter.php | 68 + .../presenters/redirect-tab-presenter.php | 51 + .../presenters/redirect-table-presenter.php | 73 + .../classes/redirect/redirect-ajax.php | 218 + .../classes/redirect/redirect-file-util.php | 122 + .../classes/redirect/redirect-formats.php | 40 + .../classes/redirect/redirect-formatter.php | 28 + .../redirect/redirect-htaccess-util.php | 46 + .../redirect/redirect-import-exception.php | 13 + .../classes/redirect/redirect-importer.php | 91 + .../classes/redirect/redirect-manager.php | 197 + .../classes/redirect/redirect-option.php | 278 + .../classes/redirect/redirect-page.php | 354 + .../redirect/redirect-sitemap-filter.php | 85 + .../classes/redirect/redirect-table.php | 496 + .../classes/redirect/redirect-types.php | 57 + .../classes/redirect/redirect-upgrade.php | 147 + .../redirect/redirect-url-formatter.php | 76 + .../classes/redirect/redirect-util.php | 131 + .../classes/redirect/redirect-validator.php | 166 + .../classes/redirect/redirect.php | 349 + .../redirect-abstract-validation.php | 39 + .../redirect-accessible-validation.php | 138 + .../redirect-endpoint-validation.php | 99 + .../redirect-presence-validation.php | 52 + .../redirect-relative-origin-validation.php | 31 + .../redirect-self-redirect-validation.php | 33 + .../redirect-subdirectory-validation.php | 82 + .../redirect-uniqueness-validation.php | 42 + .../redirect-validation-interface.php | 30 + .../classes/redirect/views/redirects-form.php | 63 + .../redirect/views/redirects-quick-edit.php | 47 + .../redirect/views/redirects-tab-plain.php | 65 + .../redirect/views/redirects-tab-regex.php | 76 + .../redirect/views/redirects-tab-settings.php | 125 + .../classes/redirect/views/redirects.php | 36 + .../classes/social-previews.php | 34 + .../classes/term-watcher.php | 362 + .../classes/upgrade-manager.php | 387 + .../classes/validation-error.php | 21 + .../classes/validation-result.php | 81 + .../classes/validation-warning.php | 21 + .../classes/views/export-keywords.php | 54 + .../classes/views/export-redirects.php | 17 + .../classes/views/import-redirects.php | 82 + .../classes/views/thank-you.php | 107 + .../wordpress-seo-premium/classes/watcher.php | 314 + .../cli/cli-premium-requirement.php | 29 + .../cli/cli-redirect-base-command.php | 152 + .../cli/cli-redirect-command-namespace.php | 16 + .../cli/cli-redirect-create-command.php | 89 + .../cli/cli-redirect-delete-command.php | 41 + .../cli/cli-redirect-follow-command.php | 118 + .../cli/cli-redirect-has-command.php | 31 + .../cli/cli-redirect-list-command.php | 185 + .../cli/cli-redirect-update-command.php | 86 + .../plugins/wordpress-seo-premium/index.php | 4 + .../languages/wordpress-seo-premiumjs-ar.json | 1 + .../wordpress-seo-premiumjs-bn_BD.json | 1 + .../languages/wordpress-seo-premiumjs-ca.json | 1 + .../wordpress-seo-premiumjs-cs_CZ.json | 1 + .../wordpress-seo-premiumjs-da_DK.json | 1 + .../wordpress-seo-premiumjs-de_DE.json | 1 + .../languages/wordpress-seo-premiumjs-el.json | 1 + .../wordpress-seo-premiumjs-en_AU.json | 1 + .../wordpress-seo-premiumjs-en_CA.json | 1 + .../wordpress-seo-premiumjs-en_GB.json | 1 + .../wordpress-seo-premiumjs-en_NZ.json | 1 + .../wordpress-seo-premiumjs-es_ES.json | 1 + .../wordpress-seo-premiumjs-es_MX.json | 1 + .../wordpress-seo-premiumjs-fa_IR.json | 1 + .../languages/wordpress-seo-premiumjs-fi.json | 1 + .../wordpress-seo-premiumjs-fr_FR.json | 1 + .../wordpress-seo-premiumjs-he_IL.json | 1 + .../wordpress-seo-premiumjs-hi_IN.json | 1 + .../wordpress-seo-premiumjs-hu_HU.json | 1 + .../wordpress-seo-premiumjs-id_ID.json | 1 + .../wordpress-seo-premiumjs-it_IT.json | 1 + .../languages/wordpress-seo-premiumjs-ja.json | 1 + .../wordpress-seo-premiumjs-nb_NO.json | 1 + .../wordpress-seo-premiumjs-nl_BE.json | 1 + .../wordpress-seo-premiumjs-nl_NL.json | 1 + .../wordpress-seo-premiumjs-pl_PL.json | 1 + .../wordpress-seo-premiumjs-pt_BR.json | 1 + .../wordpress-seo-premiumjs-pt_PT.json | 1 + .../wordpress-seo-premiumjs-ro_RO.json | 1 + .../wordpress-seo-premiumjs-ru_RU.json | 1 + .../wordpress-seo-premiumjs-sk_SK.json | 1 + .../wordpress-seo-premiumjs-sr_RS.json | 1 + .../wordpress-seo-premiumjs-sv_SE.json | 1 + .../wordpress-seo-premiumjs-tr_TR.json | 1 + .../languages/wordpress-seo-premiumjs-uk.json | 1 + .../languages/wordpress-seo-premiumjs-vi.json | 1 + .../wordpress-seo-premiumjs-zh_CN.json | 1 + .../languages/wordpress-seo-premiumjs.json | 1 + .../plugins/wordpress-seo-premium/license.txt | 642 + .../plugins/wordpress-seo-premium/premium.php | 425 + .../plugins/wordpress-seo-premium/readme.txt | 2 + .../src/actions/ai-generator-action.php | 404 + .../src/actions/link-suggestions-action.php | 607 + .../prominent-words/complete-action.php | 36 + .../prominent-words/content-action.php | 331 + .../actions/prominent-words/save-action.php | 212 + .../src/addon-installer.php | 451 + .../conditionals/ai-editor-conditional.php | 77 + .../algolia-enabled-conditional.php | 37 + .../cornerstone-enabled-conditional.php | 39 + .../src/conditionals/edd-conditional.php | 20 + ...inclusive-language-enabled-conditional.php | 24 + .../term-overview-or-ajax-conditional.php | 23 + ...min-or-introductions-route-conditional.php | 75 + .../src/config/badge-group-names.php | 37 + ..._WpYoastPremiumImprovedInternalLinking.php | 97 + ...827093024_AddIndexOnIndexableIdAndStem.php | 85 + .../src/database/migration-runner-premium.php | 37 + .../forbidden-property-mutation-exception.php | 34 + .../remote-request/bad-request-exception.php | 10 + .../remote-request/forbidden-exception.php | 10 + .../internal-server-error-exception.php | 12 + .../remote-request/not-found-exception.php | 10 + .../payment-required-exception.php | 41 + .../remote-request-exception.php | 40 + .../request-timeout-exception.php | 10 + .../service-unavailable-exception.php | 10 + .../too-many-requests-exception.php | 12 + .../remote-request/unauthorized-exception.php | 10 + .../remote-request/wp-request-exception.php | 21 + .../wordpress-seo-premium/src/functions.php | 36 + .../assets/draft-js-emoji-picker.php | 1 + .../src/generated/assets/externals.php | 1 + .../src/generated/assets/plugin.php | 1 + .../src/generated/container.php | 1762 + .../src/helpers/ai-generator-helper.php | 404 + .../src/helpers/current-page-helper.php | 107 + .../src/helpers/prominent-words-helper.php | 96 + .../src/helpers/version-helper.php | 30 + .../src/initializers/index-now-key.php | 123 + .../introductions-initializer.php | 101 + .../src/initializers/plugin.php | 70 + .../src/initializers/redirect-handler.php | 675 + .../src/initializers/woocommerce.php | 35 + .../src/initializers/wp-cli-initializer.php | 75 + .../abstract-opengraph-integration.php | 206 + .../admin/ai-consent-integration.php | 134 + .../admin/ai-generator-integration.php | 202 + .../admin/cornerstone-column-integration.php | 230 + ...ornerstone-taxonomy-column-integration.php | 141 + .../inclusive-language-column-integration.php | 233 + .../inclusive-language-filter-integration.php | 165 + ...e-language-taxonomy-column-integration.php | 144 + .../admin/keyword-integration.php | 89 + .../admin/metabox-formatter-integration.php | 61 + .../admin/plugin-links-integration.php | 76 + .../prominent-words/indexing-integration.php | 243 + .../prominent-words/metabox-integration.php | 119 + .../related-keyphrase-filter-integration.php | 66 + .../replacement-variables-integration.php | 129 + .../admin/settings-integration.php | 71 + .../admin/thank-you-page-integration.php | 114 + .../admin/update-premium-notification.php | 177 + .../admin/user-profile-integration.php | 238 + .../admin/workouts-integration.php | 182 + .../alerts/ai-generator-tip-notification.php | 20 + .../blocks/estimated-reading-time-block.php | 108 + .../blocks/related-links-block.php | 25 + .../src/integrations/cleanup-integration.php | 255 + .../front-end/robots-txt-integration.php | 95 + .../src/integrations/frontend-inspector.php | 153 + .../src/integrations/index-now-ping.php | 191 + .../missing-indexables-count-integration.php | 54 + .../integrations/opengraph-author-archive.php | 51 + .../integrations/opengraph-date-archive.php | 51 + .../src/integrations/opengraph-post-type.php | 51 + .../opengraph-posttype-archive.php | 51 + .../integrations/opengraph-term-archive.php | 51 + .../organization-schema-integration.php | 122 + ...blishing-principles-schema-integration.php | 199 + .../routes/ai-generator-route.php | 316 + .../routes/workouts-routes-integration.php | 311 + .../src/integrations/third-party/algolia.php | 191 + .../src/integrations/third-party/edd.php | 147 + .../third-party/elementor-premium.php | 328 + .../third-party/elementor-preview.php | 61 + .../src/integrations/third-party/mastodon.php | 179 + .../third-party/translationspress.php | 208 + .../third-party/wincher-keyphrases.php | 91 + .../src/integrations/upgrade-integration.php | 36 + .../integrations/user-profile-integration.php | 50 + .../watchers/prominent-words-watcher.php | 57 + .../stale-cornerstone-content-watcher.php | 65 + ...e-titles-and-descriptions-introduction.php | 106 + .../wordpress-seo-premium/src/main.php | 63 + .../src/models/prominent-words.php | 25 + .../icons/checkmark-icon-presenter.php | 18 + .../presenters/icons/cross-icon-presenter.php | 18 + .../src/presenters/icons/icon-presenter.php | 77 + .../presenters/mastodon-link-presenter.php | 84 + .../prominent-words-repository.php | 206 + .../src/routes/link-suggestions-route.php | 113 + .../src/routes/prominent-words-route.php | 245 + .../src/routes/workouts-route.php | 465 + .../src/surfaces/helpers-surface.php | 96 + .../additional-contactmethods/mastodon.php | 30 + .../additional-contactmethods-integration.php | 54 + .../src/wordpress/wrapper.php | 76 + .../wordpress-seo-premium/vendor/autoload.php | 7 + .../vendor/composer/ClassLoader.php | 572 + .../vendor/composer/InstalledVersions.php | 357 + .../vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 240 + .../vendor/composer/autoload_files.php | 10 + .../vendor/composer/autoload_namespaces.php | 9 + .../vendor/composer/autoload_psr4.php | 11 + .../vendor/composer/autoload_real.php | 71 + .../vendor/composer/autoload_static.php | 278 + .../vendor/composer/installed.php | 605 + .../vendor/composer/platform_check.php | 26 + .../vendor/yoast/whip/LICENSE | 21 + .../vendor/yoast/whip/src/Configs/default.php | 10 + .../vendor/yoast/whip/src/Configs/version.php | 8 + .../vendor/yoast/whip/src/Configuration.php | 61 + .../whip/src/Exceptions/EmptyProperty.php | 20 + .../src/Exceptions/InvalidOperatorType.php | 27 + .../yoast/whip/src/Exceptions/InvalidType.php | 22 + .../InvalidVersionComparisonString.php | 27 + .../yoast/whip/src/Facades/wordpress.php | 60 + .../vendor/yoast/whip/src/Host.php | 107 + .../whip/src/Interfaces/DismissStorage.php | 25 + .../yoast/whip/src/Interfaces/Listener.php | 16 + .../yoast/whip/src/Interfaces/Message.php | 16 + .../whip/src/Interfaces/MessagePresenter.php | 16 + .../yoast/whip/src/Interfaces/Requirement.php | 30 + .../whip/src/Interfaces/VersionDetector.php | 23 + .../yoast/whip/src/MessageDismisser.php | 75 + .../yoast/whip/src/MessageFormatter.php | 42 + .../yoast/whip/src/Messages/BasicMessage.php | 60 + .../yoast/whip/src/Messages/HostMessage.php | 62 + .../InvalidVersionRequirementMessage.php | 53 + .../yoast/whip/src/Messages/NullMessage.php | 20 + .../whip/src/Messages/UpgradePhpMessage.php | 87 + .../vendor/yoast/whip/src/MessagesManager.php | 91 + .../src/Presenters/WPMessagePresenter.php | 112 + .../yoast/whip/src/RequirementsChecker.php | 181 + .../yoast/whip/src/VersionRequirement.php | 153 + .../vendor/yoast/whip/src/WPDismissOption.php | 45 + .../whip/src/WPMessageDismissListener.php | 66 + .../wordpress-seo-premium/wp-seo-premium.php | 80 + .../admin/admin-settings-changed-listener.php | 89 + .../plugins/wordpress-seo/admin/ajax.php | 419 + .../admin/ajax/class-shortcode-filter.php | 54 + .../ajax/class-yoast-dismissable-notice.php | 95 + .../ajax/class-yoast-plugin-conflict-ajax.php | 130 + .../class-abstract-capability-manager.php | 91 + .../class-capability-manager-factory.php | 35 + .../class-capability-manager-integration.php | 121 + .../class-capability-manager-vip.php | 73 + .../class-capability-manager-wp.php | 51 + .../capabilities/class-capability-manager.php | 38 + .../capabilities/class-capability-utils.php | 100 + .../class-register-capabilities.php | 111 + ...s-admin-asset-analysis-worker-location.php | 75 + .../class-admin-asset-dev-server-location.php | 71 + .../admin/class-admin-asset-location.php | 22 + .../admin/class-admin-asset-manager.php | 703 + .../admin/class-admin-asset-seo-location.php | 86 + ...ass-admin-editor-specific-replace-vars.php | 227 + ...n-gutenberg-compatibility-notification.php | 105 + .../admin/class-admin-help-panel.php | 104 + .../wordpress-seo/admin/class-admin-init.php | 379 + .../class-admin-recommended-replace-vars.php | 205 + .../admin/class-admin-user-profile.php | 88 + .../wordpress-seo/admin/class-admin-utils.php | 82 + .../wordpress-seo/admin/class-admin.php | 403 + .../wordpress-seo/admin/class-asset.php | 255 + ...ass-bulk-description-editor-list-table.php | 80 + .../admin/class-bulk-editor-list-table.php | 1049 + .../class-bulk-title-editor-list-table.php | 89 + .../wordpress-seo/admin/class-collector.php | 54 + .../wordpress-seo/admin/class-config.php | 160 + .../admin/class-database-proxy.php | 309 + .../wordpress-seo/admin/class-export.php | 164 + .../admin/class-expose-shortlinks.php | 143 + .../admin/class-gutenberg-compatibility.php | 107 + .../admin/class-meta-columns.php | 839 + .../admin/class-my-yoast-proxy.php | 219 + .../wordpress-seo/admin/class-option-tab.php | 112 + .../admin/class-option-tabs-formatter.php | 93 + .../wordpress-seo/admin/class-option-tabs.php | 124 + .../admin/class-paper-presenter.php | 141 + .../admin/class-plugin-availability.php | 355 + .../admin/class-plugin-conflict.php | 94 + .../admin/class-premium-popup.php | 105 + .../class-premium-upsell-admin-block.php | 165 + .../admin/class-primary-term-admin.php | 274 + .../admin/class-product-upsell-notice.php | 231 + .../admin/class-remote-request.php | 158 + ...ass-schema-person-upgrade-notification.php | 83 + .../admin/class-suggested-plugins.php | 140 + .../admin/class-wincher-dashboard-widget.php | 136 + .../admin/class-yoast-columns.php | 117 + .../admin/class-yoast-dashboard-widget.php | 160 + .../wordpress-seo/admin/class-yoast-form.php | 1116 + .../admin/class-yoast-input-validation.php | 256 + .../admin/class-yoast-network-admin.php | 334 + .../class-yoast-network-settings-api.php | 164 + .../admin/class-yoast-notification-center.php | 954 + .../admin/class-yoast-notification.php | 429 + .../admin/class-yoast-notifications.php | 319 + .../admin/class-yoast-plugin-conflict.php | 342 + .../endpoints/class-endpoint-file-size.php | 85 + .../endpoints/class-endpoint-statistics.php | 73 + .../admin/endpoints/class-endpoint.php | 26 + .../exceptions/class-file-size-exception.php | 46 + .../filters/class-abstract-post-filter.php | 197 + .../filters/class-cornerstone-filter.php | 150 + .../formatter/class-metabox-formatter.php | 206 + .../class-post-metabox-formatter.php | 93 + .../class-term-metabox-formatter.php | 98 + .../formatter/interface-metabox-formatter.php | 19 + .../admin/google_search_console/class-gsc.php | 28 + .../views/gsc-display.php | 54 + .../views/gsc-redirect-nopremium.php | 27 + .../admin/import/class-import-detector.php | 36 + .../admin/import/class-import-plugin.php | 63 + .../admin/import/class-import-settings.php | 127 + .../admin/import/class-import-status.php | 131 + .../class-abstract-plugin-importer.php | 329 + .../import/plugins/class-import-aioseo-v4.php | 241 + .../import/plugins/class-import-aioseo.php | 110 + ...class-import-greg-high-performance-seo.php | 42 + .../import/plugins/class-import-headspace.php | 54 + .../import/plugins/class-import-jetpack.php | 40 + .../class-import-platinum-seo-pack.php | 138 + .../plugins/class-import-premium-seo-pack.php | 39 + .../import/plugins/class-import-rankmath.php | 179 + .../plugins/class-import-seo-framework.php | 94 + .../plugins/class-import-seopressor.php | 175 + .../plugins/class-import-smartcrawl.php | 151 + .../import/plugins/class-import-squirrly.php | 224 + .../plugins/class-import-ultimate-seo.php | 64 + .../plugins/class-import-woothemes-seo.php | 138 + .../plugins/class-import-wp-meta-seo.php | 82 + .../import/plugins/class-import-wpseo.php | 310 + .../admin/import/plugins/class-importers.php | 47 + .../plugins/wordpress-seo/admin/index.php | 4 + .../admin/interface-collection.php | 19 + .../admin/interface-installable.php | 19 + .../admin/listeners/class-listener.php | 19 + .../admin/menu/class-admin-menu.php | 133 + .../admin/menu/class-base-menu.php | 287 + .../wordpress-seo/admin/menu/class-menu.php | 96 + .../admin/menu/class-network-admin-menu.php | 97 + .../admin/menu/class-replacevar-editor.php | 159 + .../admin/menu/class-replacevar-field.php | 88 + .../class-submenu-capability-normalize.php | 41 + .../class-abstract-sectioned-metabox-tab.php | 97 + ...ss-metabox-analysis-inclusive-language.php | 58 + .../class-metabox-analysis-readability.php | 39 + .../metabox/class-metabox-analysis-seo.php | 39 + .../metabox/class-metabox-collapsible.php | 84 + .../class-metabox-collapsibles-section.php | 65 + .../admin/metabox/class-metabox-editor.php | 85 + .../admin/metabox/class-metabox-form-tab.php | 135 + .../admin/metabox/class-metabox-null-tab.php | 30 + .../class-metabox-section-additional.php | 109 + ...ass-metabox-section-inclusive-language.php | 46 + .../metabox/class-metabox-section-react.php | 118 + .../class-metabox-section-readability.php | 46 + .../admin/metabox/class-metabox.php | 1214 + .../metabox/interface-metabox-analysis.php | 33 + .../metabox/interface-metabox-section.php | 26 + .../admin/metabox/interface-metabox-tab.php | 26 + .../notifiers/dismissible-notification.php | 126 + .../interface-notification-handler.php | 21 + .../wordpress-seo/admin/pages/dashboard.php | 48 + .../wordpress-seo/admin/pages/licenses.php | 15 + .../wordpress-seo/admin/pages/network.php | 34 + .../wordpress-seo/admin/pages/redirects.php | 15 + .../wordpress-seo/admin/pages/tools.php | 90 + .../roles/class-abstract-role-manager.php | 149 + .../admin/roles/class-register-roles.php | 33 + .../roles/class-role-manager-factory.php | 27 + .../admin/roles/class-role-manager-wp.php | 61 + .../admin/roles/class-role-manager.php | 44 + .../admin/services/class-file-size.php | 106 + .../class-statistics-integration.php | 36 + .../statistics/class-statistics-service.php | 258 + .../admin/taxonomy/class-taxonomy-columns.php | 231 + .../class-taxonomy-fields-presenter.php | 221 + .../admin/taxonomy/class-taxonomy-fields.php | 235 + .../admin/taxonomy/class-taxonomy-metabox.php | 229 + .../admin/taxonomy/class-taxonomy.php | 492 + .../tracking/class-tracking-addon-data.php | 126 + .../tracking/class-tracking-default-data.php | 60 + .../tracking/class-tracking-plugin-data.php | 90 + .../tracking/class-tracking-server-data.php | 85 + .../tracking/class-tracking-settings-data.php | 274 + .../tracking/class-tracking-theme-data.php | 51 + .../admin/tracking/class-tracking.php | 240 + .../views/class-yoast-feature-toggle.php | 206 + .../views/class-yoast-feature-toggles.php | 284 + .../admin/views/class-yoast-input-select.php | 146 + .../views/class-yoast-integration-toggles.php | 139 + .../wordpress-seo/admin/views/form/select.php | 26 + .../views/interface-yoast-form-element.php | 19 + .../admin/views/js-templates-primary-term.php | 45 + .../wordpress-seo/admin/views/licenses.php | 395 + .../admin/views/paper-collapsible.php | 79 + .../views/partial-notifications-errors.php | 29 + .../views/partial-notifications-template.php | 116 + .../views/partial-notifications-warnings.php | 29 + .../wordpress-seo/admin/views/redirects.php | 237 + .../admin/views/tabs/dashboard/dashboard.php | 44 + .../dashboard/first-time-configuration.php | 14 + .../views/tabs/dashboard/site-analysis.php | 20 + .../views/tabs/network/crawl-settings.php | 50 + .../admin/views/tabs/network/features.php | 115 + .../admin/views/tabs/network/general.php | 56 + .../admin/views/tabs/network/integrations.php | 103 + .../admin/views/tabs/network/restore-site.php | 32 + .../admin/views/tabs/tool/import-seo.php | 127 + .../admin/views/tabs/tool/wpseo-export.php | 39 + .../admin/views/tabs/tool/wpseo-import.php | 46 + .../admin/views/tool-bulk-editor.php | 120 + .../admin/views/tool-file-editor.php | 244 + .../admin/views/tool-import-export.php | 123 + .../admin/views/user-profile.php | 79 + .../watchers/class-slug-change-watcher.php | 256 + .../dynamic-blocks/breadcrumbs/block.json | 25 + .../structured-data-blocks/faq/block.json | 44 + .../structured-data-blocks/how-to/block.json | 76 + .../css/dist/academy-2340-rtl.css | 1 + .../wordpress-seo/css/dist/academy-2340.css | 1 + .../css/dist/admin-global-2340-rtl.css | 1 + .../css/dist/admin-global-2340.css | 1 + .../css/dist/adminbar-2340-rtl.css | 1 + .../wordpress-seo/css/dist/adminbar-2340.css | 1 + .../css/dist/ai-fix-assessments-2340-rtl.css | 1 + .../css/dist/ai-fix-assessments-2340.css | 1 + .../css/dist/ai-generator-2340-rtl.css | 1 + .../css/dist/ai-generator-2340.css | 1 + .../css/dist/alerts-2340-rtl.css | 1 + .../wordpress-seo/css/dist/alerts-2340.css | 1 + .../css/dist/black-friday-banner-2340-rtl.css | 1 + .../css/dist/black-friday-banner-2340.css | 1 + .../css/dist/dashboard-2340-rtl.css | 1 + .../wordpress-seo/css/dist/dashboard-2340.css | 1 + .../css/dist/edit-page-2340-rtl.css | 1 + .../wordpress-seo/css/dist/edit-page-2340.css | 1 + .../css/dist/elementor-2340-rtl.css | 1 + .../wordpress-seo/css/dist/elementor-2340.css | 1 + .../css/dist/featured-image-2340-rtl.css | 1 + .../css/dist/featured-image-2340.css | 1 + .../css/dist/filter-explanation-2340-rtl.css | 1 + .../css/dist/filter-explanation-2340.css | 1 + .../first-time-configuration-2340-rtl.css | 1 + .../dist/first-time-configuration-2340.css | 1 + .../wordpress-seo/css/dist/icons-2340-rtl.css | 1 + .../wordpress-seo/css/dist/icons-2340.css | 1 + .../css/dist/inside-editor-2340-rtl.css | 1 + .../css/dist/inside-editor-2340.css | 1 + .../css/dist/introductions-2340-rtl.css | 1 + .../css/dist/introductions-2340.css | 1 + .../css/dist/metabox-2340-rtl.css | 1 + .../wordpress-seo/css/dist/metabox-2340.css | 3 + .../metabox-primary-category-2340-rtl.css | 1 + .../dist/metabox-primary-category-2340.css | 1 + .../wordpress-seo/css/dist/modal-2340-rtl.css | 1 + .../wordpress-seo/css/dist/modal-2340.css | 1 + .../css/dist/monorepo-2340-rtl.css | 1 + .../wordpress-seo/css/dist/monorepo-2340.css | 1 + .../css/dist/new-settings-2340-rtl.css | 1 + .../css/dist/new-settings-2340.css | 1 + .../css/dist/notifications-2340-rtl.css | 1 + .../css/dist/notifications-2340.css | 1 + .../css/dist/score_icon-2340-rtl.css | 1 + .../css/dist/score_icon-2340.css | 1 + .../dist/structured-data-blocks-2340-rtl.css | 1 + .../css/dist/structured-data-blocks-2340.css | 1 + .../css/dist/support-2340-rtl.css | 1 + .../wordpress-seo/css/dist/support-2340.css | 1 + .../css/dist/tailwind-2340-rtl.css | 1 + .../wordpress-seo/css/dist/tailwind-2340.css | 1 + .../css/dist/toggle-switch-2340-rtl.css | 1 + .../css/dist/toggle-switch-2340.css | 1 + .../css/dist/tooltips-2340-rtl.css | 1 + .../wordpress-seo/css/dist/tooltips-2340.css | 1 + .../css/dist/workouts-2340-rtl.css | 1 + .../wordpress-seo/css/dist/workouts-2340.css | 1 + .../css/dist/wpseo-dismissible-2340-rtl.css | 1 + .../css/dist/wpseo-dismissible-2340.css | 1 + .../css/dist/yoast-extensions-2340-rtl.css | 1 + .../css/dist/yoast-extensions-2340.css | 1 + .../css/dist/yst_plugin_tools-2340-rtl.css | 1 + .../css/dist/yst_plugin_tools-2340.css | 1 + .../css/dist/yst_seo_score-2340-rtl.css | 1 + .../css/dist/yst_seo_score-2340.css | 1 + .../wordpress-seo/css/main-sitemap.xsl | 145 + .../images/Yoast_SEO_negative_icon.svg | 1 + .../academy/ai_for_seo_icon_my_yoast.png | Bin 0 -> 16291 bytes .../images/academy/all_around_seo.png | Bin 0 -> 8249 bytes .../images/academy/block_editor.png | Bin 0 -> 1441 bytes .../images/academy/copywriting.png | Bin 0 -> 5630 bytes .../images/academy/crawlability.png | Bin 0 -> 9760 bytes .../images/academy/ecommerce.png | Bin 0 -> 6167 bytes .../images/academy/hosting_and_server.png | Bin 0 -> 9015 bytes .../images/academy/keyword_research.png | Bin 0 -> 4934 bytes .../wordpress-seo/images/academy/local.png | Bin 0 -> 8257 bytes .../images/academy/multilingual.png | Bin 0 -> 13240 bytes .../images/academy/seo_for_beginners.png | Bin 0 -> 4337 bytes .../images/academy/seo_for_wp.png | Bin 0 -> 7855 bytes .../images/academy/site_structure.png | Bin 0 -> 9948 bytes .../academy/structured_data_for_beginners.png | Bin 0 -> 4309 bytes .../academy/understanding_structured_data.png | Bin 0 -> 4227 bytes .../images/academy/wp_for_beginners.png | Bin 0 -> 10623 bytes .../plugins/wordpress-seo/images/acf-logo.png | Bin 0 -> 3774 bytes .../wordpress-seo/images/admin_bar.png | Bin 0 -> 21035 bytes .../images/ai-fix-assessments-thumbnail.png | Bin 0 -> 46609 bytes .../images/ai-generator-preview.png | Bin 0 -> 17429 bytes .../wordpress-seo/images/ai-generator.png | Bin 0 -> 16253 bytes .../wordpress-seo/images/alert-error-icon.svg | 1 + .../wordpress-seo/images/alert-info-icon.svg | 1 + .../images/alert-success-icon.svg | 1 + .../images/alert-warning-icon.svg | 1 + .../images/cornerstone_content.png | Bin 0 -> 16450 bytes .../wordpress-seo/images/error-icon.svg | 1 + .../images/inclusive_language_analysis.png | Bin 0 -> 20788 bytes .../plugins/wordpress-seo/images/index.php | 4 + .../images/indexables_3_left_bubble_optm.svg | 1 + .../plugins/wordpress-seo/images/indexnow.png | Bin 0 -> 13613 bytes .../plugins/wordpress-seo/images/insights.png | Bin 0 -> 30697 bytes .../wordpress-seo/images/link-in-icon.svg | 1 + .../wordpress-seo/images/link-out-icon.svg | 1 + .../wordpress-seo/images/link_suggestions.png | Bin 0 -> 16987 bytes .../images/local_plugin_assistant.svg | 1 + .../mirrored_fit_bubble_man_1_optim.svg | 1 + .../mirrored_fit_bubble_woman_1_optim.svg | 1 + .../mirrored_fit_bubble_woman_2_optim.svg | 1 + .../images/new-to-configuration-notice.svg | 1 + .../images/news_plugin_assistant.svg | 1 + .../wordpress-seo/images/open_graph.png | Bin 0 -> 22912 bytes .../images/plugin_subscription.svg | 1 + .../wordpress-seo/images/question-mark.png | Bin 0 -> 250 bytes .../wordpress-seo/images/readability-icon.svg | 1 + .../images/readability_analysis.png | Bin 0 -> 18551 bytes .../plugins/wordpress-seo/images/rest_api.png | Bin 0 -> 18100 bytes .../wordpress-seo/images/seo_analysis.png | Bin 0 -> 14291 bytes .../wordpress-seo/images/slack_sharing.png | Bin 0 -> 14496 bytes ...stale-cornerstone-content-in-yoast-seo.png | Bin 0 -> 24197 bytes .../images/succes_marieke_bubble_optm.svg | 1 + .../wordpress-seo/images/support-team.svg | 1 + .../wordpress-seo/images/support/github.png | Bin 0 -> 9480 bytes .../images/support/help_center.png | Bin 0 -> 18458 bytes .../images/support/support_forums.png | Bin 0 -> 16607 bytes .../images/text_link_counter.png | Bin 0 -> 13500 bytes .../wordpress-seo/images/twitter_card.png | Bin 0 -> 16134 bytes .../images/video_plugin_assistant.svg | 1 + .../images/woo_plugin_assistant.svg | 1 + .../wordpress-seo/images/xml_sitemaps.png | Bin 0 -> 24982 bytes .../wordpress-seo/inc/class-addon-manager.php | 878 + .../inc/class-my-yoast-api-request.php | 207 + .../wordpress-seo/inc/class-post-type.php | 131 + .../wordpress-seo/inc/class-rewrite.php | 231 + .../inc/class-upgrade-history.php | 136 + .../wordpress-seo/inc/class-upgrade.php | 1831 + .../inc/class-wpseo-admin-bar-menu.php | 926 + .../inc/class-wpseo-content-images.php | 112 + .../inc/class-wpseo-custom-fields.php | 75 + .../inc/class-wpseo-custom-taxonomies.php | 72 + .../inc/class-wpseo-image-utils.php | 537 + .../inc/class-wpseo-installation.php | 48 + .../wordpress-seo/inc/class-wpseo-meta.php | 1086 + .../inc/class-wpseo-primary-term.php | 86 + .../wordpress-seo/inc/class-wpseo-rank.php | 338 + .../inc/class-wpseo-replace-vars.php | 1646 + .../inc/class-wpseo-replacement-variable.php | 76 + .../inc/class-wpseo-shortlinker.php | 54 + .../inc/class-wpseo-statistics.php | 62 + .../wordpress-seo/inc/class-wpseo-utils.php | 1103 + .../inc/class-yoast-dynamic-rewrites.php | 178 + .../plugins/wordpress-seo/inc/date-helper.php | 61 + .../class-myyoast-bad-request-exception.php | 13 + .../class-myyoast-invalid-json-exception.php | 13 + .../plugins/wordpress-seo/inc/index.php | 4 + ...rface-wpseo-wordpress-ajax-integration.php | 19 + .../interface-wpseo-wordpress-integration.php | 21 + .../wordpress-seo/inc/language-utils.php | 52 + .../inc/options/class-wpseo-option-ms.php | 259 + .../inc/options/class-wpseo-option-social.php | 322 + .../inc/options/class-wpseo-option-titles.php | 1006 + .../inc/options/class-wpseo-option-wpseo.php | 648 + .../inc/options/class-wpseo-option.php | 854 + .../inc/options/class-wpseo-options.php | 596 + .../inc/options/class-wpseo-taxonomy-meta.php | 566 + .../class-author-sitemap-provider.php | 244 + .../class-post-type-sitemap-provider.php | 766 + .../inc/sitemaps/class-sitemap-cache-data.php | 200 + .../sitemaps/class-sitemap-image-parser.php | 509 + .../inc/sitemaps/class-sitemaps-admin.php | 125 + .../class-sitemaps-cache-validator.php | 326 + .../inc/sitemaps/class-sitemaps-cache.php | 359 + .../inc/sitemaps/class-sitemaps-renderer.php | 355 + .../inc/sitemaps/class-sitemaps-router.php | 161 + .../inc/sitemaps/class-sitemaps.php | 674 + .../class-taxonomy-sitemap-provider.php | 351 + .../sitemaps/interface-sitemap-cache-data.php | 72 + .../sitemaps/interface-sitemap-provider.php | 41 + .../inc/wpseo-functions-deprecated.php | 6 + .../wordpress-seo/inc/wpseo-functions.php | 239 + .../inc/wpseo-non-ajax-functions.php | 57 + wp/wp-content/plugins/wordpress-seo/index.php | 4 + .../plugins/wordpress-seo/js/dist/academy.js | 10 + .../js/dist/addon-installation.js | 7 + .../wordpress-seo/js/dist/admin-global.js | 1 + .../wordpress-seo/js/dist/admin-modules.js | 4 + .../wordpress-seo/js/dist/analysis-worker.js | 1 + .../wordpress-seo/js/dist/api-client.js | 1 + .../wordpress-seo/js/dist/block-editor.js | 601 + .../wordpress-seo/js/dist/bulk-editor.js | 1 + .../wordpress-seo/js/dist/classic-editor.js | 548 + .../wordpress-seo/js/dist/crawl-settings.js | 1 + .../wordpress-seo/js/dist/dashboard-widget.js | 1 + .../wordpress-seo/js/dist/dynamic-blocks.js | 1 + .../wordpress-seo/js/dist/edit-page.js | 1 + .../wordpress-seo/js/dist/editor-modules.js | 324 + .../wordpress-seo/js/dist/elementor.js | 576 + .../js/dist/externals-components.js | 279 + .../js/dist/externals-contexts.js | 1 + .../wordpress-seo/js/dist/externals-redux.js | 1 + .../js/dist/externals/analysis.js | 368 + .../js/dist/externals/analysisReport.js | 44 + .../js/dist/externals/chart.js.js | 1 + .../js/dist/externals/componentsNew.js | 1125 + .../js/dist/externals/draftJs.js | 1 + .../js/dist/externals/featureFlag.js | 1 + .../js/dist/externals/helpers.js | 26 + .../wordpress-seo/js/dist/externals/jed.js | 1 + .../js/dist/externals/propTypes.js | 1 + .../js/dist/externals/reactHelmet.js | 1 + .../wordpress-seo/js/dist/externals/redux.js | 1 + .../js/dist/externals/reduxJsToolkit.js | 1 + .../externals/replacementVariableEditor.js | 85 + .../dist/externals/searchMetadataPreviews.js | 317 + .../js/dist/externals/socialMetadataForms.js | 23 + .../js/dist/externals/styleGuide.js | 13 + .../js/dist/externals/styledComponents.js | 1 + .../js/dist/externals/uiLibrary.js | 1 + .../wordpress-seo/js/dist/faq-block.js | 1 + .../js/dist/filter-explanation.js | 1 + .../js/dist/first-time-configuration.js | 18 + .../js/dist/frontend-inspector-resources.js | 1 + .../js/dist/help-scout-beacon.js | 69 + .../wordpress-seo/js/dist/how-to-block.js | 10 + .../plugins/wordpress-seo/js/dist/import.js | 1 + .../wordpress-seo/js/dist/indexation.js | 8 + .../js/dist/installation-success.js | 6 + .../js/dist/integrations-page.js | 43 + .../wordpress-seo/js/dist/introductions.js | 13 + .../wordpress-seo/js/dist/languages/ar.js | 1 + .../wordpress-seo/js/dist/languages/ca.js | 1 + .../wordpress-seo/js/dist/languages/cs.js | 1 + .../wordpress-seo/js/dist/languages/de.js | 1 + .../js/dist/languages/default.js | 1 + .../wordpress-seo/js/dist/languages/el.js | 1 + .../wordpress-seo/js/dist/languages/en.js | 1 + .../wordpress-seo/js/dist/languages/es.js | 1 + .../wordpress-seo/js/dist/languages/fa.js | 1 + .../wordpress-seo/js/dist/languages/fr.js | 1 + .../wordpress-seo/js/dist/languages/he.js | 1 + .../wordpress-seo/js/dist/languages/hu.js | 1 + .../wordpress-seo/js/dist/languages/id.js | 1 + .../wordpress-seo/js/dist/languages/it.js | 1 + .../wordpress-seo/js/dist/languages/ja.js | 1 + .../wordpress-seo/js/dist/languages/nb.js | 1 + .../wordpress-seo/js/dist/languages/nl.js | 1 + .../wordpress-seo/js/dist/languages/pl.js | 1 + .../wordpress-seo/js/dist/languages/pt.js | 1 + .../wordpress-seo/js/dist/languages/ru.js | 1 + .../wordpress-seo/js/dist/languages/sk.js | 1 + .../wordpress-seo/js/dist/languages/sv.js | 1 + .../wordpress-seo/js/dist/languages/tr.js | 1 + .../wordpress-seo/js/dist/network-admin.js | 1 + .../wordpress-seo/js/dist/new-settings.js | 349 + .../wordpress-seo/js/dist/post-edit.js | 23 + .../js/dist/quick-edit-handler.js | 1 + .../wordpress-seo/js/dist/react-select.js | 1 + .../js/dist/redirect-old-features-tab.js | 1 + .../wordpress-seo/js/dist/reindex-links.js | 1 + .../plugins/wordpress-seo/js/dist/settings.js | 3 + .../plugins/wordpress-seo/js/dist/support.js | 25 + .../wordpress-seo/js/dist/term-edit.js | 17 + .../js/dist/used-keywords-assessment.js | 1 + .../js/dist/wincher-dashboard-widget.js | 119 + .../plugins/wordpress-seo/js/dist/workouts.js | 6 + .../wordpress-seo/lib/abstract-main.php | 174 + .../container-registry.php | 72 + .../wordpress-seo/lib/migrations/adapter.php | 1078 + .../wordpress-seo/lib/migrations/column.php | 101 + .../lib/migrations/constants.php | 22 + .../lib/migrations/migration.php | 277 + .../wordpress-seo/lib/migrations/table.php | 260 + .../plugins/wordpress-seo/lib/model.php | 730 + .../plugins/wordpress-seo/lib/orm.php | 2553 + .../plugins/wordpress-seo/license.txt | 642 + .../packages/js/images/Yoast_SEO_Icon.svg | 1 + .../packages/js/images/Yoast_icon_kader.svg | 1 + .../packages/js/images/algolia-logo.svg | 10 + .../js/images/connection-assistant.svg | 26 + .../packages/js/images/edd-logo.svg | 1 + .../packages/js/images/elementor-logo.svg | 1 + .../packages/js/images/g2_logo_white_optm.svg | 1 + .../packages/js/images/icon-arrow-down.svg | 1 + .../packages/js/images/icon-facebook.svg | 1 + .../packages/js/images/icon-twitter.svg | 1 + .../images/indexables_1_left_bubble_optm.svg | 1 + .../images/indexables_2_left_bubble_optm.svg | 1 + .../images/jetpack-boost-integration-logo.svg | 27 + .../packages/js/images/jetpack-boost-logo.svg | 1 + .../packages/js/images/jetpack-logo.svg | 53 + .../packages/js/images/logo-g2-white.svg | 1 + .../packages/js/images/mastodon-logo.svg | 4 + .../images/motivated_bubble_woman_1_optim.svg | 43 + .../packages/js/images/semrush-logo.svg | 10 + .../packages/js/images/ssp-logo.svg | 12 + .../packages/js/images/star-rating-half.svg | 1 + .../packages/js/images/star-rating-star.svg | 1 + .../js/images/succes_marieke_bubble_optm.svg | 1 + .../packages/js/images/tec-logo.svg | 20 + .../packages/js/images/wincher-logo.svg | 1 + .../js/images/woocommerce-seo-logo.svg | 1 + .../packages/js/images/wordproof-logo.svg | 1 + .../js/images/wp-recipe-maker-logo.svg | 1 + .../packages/js/images/x-logo.svg | 3 + .../js/images/yoast-seo-simple-logo.svg | 1 + .../js/images/yoast_loading_spinner.svg | 1 + .../plugins/wordpress-seo/readme.txt | 317 + .../addon-activate-action.php | 86 + .../addon-install-action.php | 131 + .../src/actions/alert-dismissal-action.php | 215 + .../first-time-configuration-action.php | 344 + .../abstract-aioseo-importing-action.php | 266 + ...tract-aioseo-settings-importing-action.php | 342 + .../aioseo/aioseo-cleanup-action.php | 176 + ...stom-archive-settings-importing-action.php | 111 + ...ault-archive-settings-importing-action.php | 103 + ...oseo-general-settings-importing-action.php | 213 + .../aioseo/aioseo-posts-importing-action.php | 624 + ...ype-defaults-settings-importing-action.php | 99 + ...seo-taxonomy-settings-importing-action.php | 108 + .../aioseo/aioseo-validate-data-action.php | 255 + .../deactivate-conflicting-plugins-action.php | 145 + .../importing/importing-action-interface.php | 32 + .../importing-indexation-action-interface.php | 34 + .../indexables/indexable-head-action.php | 174 + .../indexing/abstract-indexing-action.php | 103 + .../abstract-link-indexing-action.php | 123 + .../indexable-general-indexation-action.php | 138 + .../indexable-indexing-complete-action.php | 36 + .../indexable-post-indexation-action.php | 207 + ...le-post-type-archive-indexation-action.php | 212 + .../indexable-term-indexation-action.php | 188 + .../indexing/indexation-action-interface.php | 34 + .../indexing/indexing-complete-action.php | 36 + .../indexing/indexing-prepare-action.php | 40 + .../limited-indexing-action-interface.php | 18 + .../indexing/post-link-indexing-action.php | 142 + .../indexing/term-link-indexing-action.php | 129 + .../src/actions/integrations-action.php | 57 + .../actions/semrush/semrush-login-action.php | 62 + .../semrush/semrush-options-action.php | 51 + .../semrush/semrush-phrases-action.php | 96 + .../wincher/wincher-account-action.php | 105 + .../wincher/wincher-keyphrases-action.php | 363 + .../actions/wincher/wincher-login-action.php | 73 + .../missing-indexables-collector.php | 72 + .../to-be-cleaned-indexables-collector.php | 84 + .../domain/missing-indexable-bucket.php | 48 + .../domain/missing-indexable-count.php | 64 + .../domain/to-be-cleaned-indexable-bucket.php | 48 + .../domain/to-be-cleaned-indexable-count.php | 64 + .../last-completed-indexation-integration.php | 64 + .../src/builders/indexable-author-builder.php | 248 + .../src/builders/indexable-builder.php | 417 + .../indexable-date-archive-builder.php | 63 + .../builders/indexable-hierarchy-builder.php | 416 + .../builders/indexable-home-page-builder.php | 148 + .../src/builders/indexable-link-builder.php | 732 + .../src/builders/indexable-post-builder.php | 433 + .../indexable-post-type-archive-builder.php | 168 + .../builders/indexable-social-image-trait.php | 168 + .../indexable-system-page-builder.php | 80 + .../src/builders/indexable-term-builder.php | 291 + .../src/builders/primary-term-builder.php | 107 + .../src/commands/cleanup-command.php | 196 + .../src/commands/command-interface.php | 18 + .../src/commands/index-command.php | 296 + .../addon-installation-conditional.php | 19 + .../src/conditionals/admin-conditional.php | 18 + ...doing-post-quick-edit-save-conditional.php | 37 + .../estimated-reading-time-conditional.php | 60 + .../admin/licenses-page-conditional.php | 31 + .../admin/non-network-admin-conditional.php | 20 + .../conditionals/admin/post-conditional.php | 32 + .../posts-overview-or-ajax-conditional.php | 21 + .../admin/yoast-admin-conditional.php | 41 + ...hment-redirections-enabled-conditional.php | 36 + .../conditionals/conditional-interface.php | 16 + .../deactivating-yoast-seo-conditional.php | 23 + .../conditionals/development-conditional.php | 20 + .../conditionals/feature-flag-conditional.php | 37 + .../conditionals/front-end-conditional.php | 18 + .../conditionals/get-request-conditional.php | 22 + ...ess-rest-endpoints-enabled-conditional.php | 36 + .../import-tool-selected-conditional.php | 19 + .../src/conditionals/jetpack-conditional.php | 19 + .../conditionals/migrations-conditional.php | 36 + .../new-settings-ui-conditional.php | 18 + .../src/conditionals/news-conditional.php | 18 + .../conditionals/no-conditionals-trait.php | 18 + .../no-tool-selected-conditional.php | 19 + .../non-multisite-conditional.php | 18 + .../not-admin-ajax-conditional.php | 18 + .../conditionals/open-graph-conditional.php | 36 + .../premium-active-conditional.php | 18 + .../premium-inactive-conditional.php | 18 + .../primary-category-conditional.php | 56 + .../conditionals/robots-txt-conditional.php | 68 + .../semrush-enabled-conditional.php | 36 + .../src/conditionals/settings-conditional.php | 40 + .../should-index-links-conditional.php | 43 + .../text-formality-conditional.php | 19 + .../elementor-activated-conditional.php | 20 + .../elementor-edit-conditional.php | 69 + .../jetpack-boost-active-conditional.php | 20 + .../jetpack-boost-not-premium-conditional.php | 36 + .../third-party/polylang-conditional.php | 20 + .../translatepress-conditional.php | 20 + .../w3-total-cache-conditional.php | 24 + .../third-party/wpml-conditional.php | 20 + .../third-party/wpml-wpseo-conditional.php | 28 + .../traits/admin-conditional-trait.php | 20 + ...updated-importer-framework-conditional.php | 18 + .../user-can-edit-users-conditional.php | 20 + ...r-can-manage-wpseo-options-conditional.php | 20 + ...an-publish-posts-and-pages-conditional.php | 20 + .../conditionals/user-edit-conditional.php | 24 + .../conditionals/user-profile-conditional.php | 24 + .../conditionals/web-stories-conditional.php | 18 + ...incher-automatically-track-conditional.php | 36 + .../src/conditionals/wincher-conditional.php | 8 + .../wincher-enabled-conditional.php | 36 + .../wincher-token-conditional.php | 36 + .../conditionals/woocommerce-conditional.php | 18 + .../wp-cron-enabled-conditional.php | 18 + .../conditionals/wp-robots-conditional.php | 18 + .../src/conditionals/xmlrpc-conditional.php | 18 + .../yoast-admin-and-dashboard-conditional.php | 55 + .../yoast-tools-page-conditional.php | 28 + .../src/config/badge-group-names.php | 62 + .../src/config/conflicting-plugins.php | 111 + .../src/config/indexing-reasons.php | 49 + .../src/config/migration-status.php | 176 + .../20171228151840_WpYoastIndexable.php | 364 + .../20171228151841_WpYoastPrimaryTerm.php | 102 + ..._WpYoastDropIndexableMetaTableIfExists.php | 49 + ...191011111109_WpYoastIndexableHierarchy.php | 83 + .../20200408101900_AddCollationToTables.php | 53 + .../20200420073606_AddColumnsToIndexables.php | 96 + ...23747_BreadcrumbTitleAndHierarchyReset.php | 64 + ...428194858_ExpandIndexableColumnLengths.php | 84 + ...20200429105310_TruncateIndexableTables.php | 56 + ...75614_AddIndexableObjectIdAndTypeIndex.php | 64 + .../20200430150130_ClearIndexableTables.php | 56 + ...200507054848_DeleteDuplicateIndexables.php | 52 + ...513133401_ResetIndexableHierarchyTable.php | 46 + .../20200609154515_AddHasAncestorsColumn.php | 53 + ...200616130143_ReplacePermalinkHashIndex.php | 126 + .../20200617122511_CreateSEOLinksTable.php | 96 + ...702141921_CreateIndexableSubpagesIndex.php | 72 + ...ddIndexesForProminentWordsOnIndexables.php | 68 + ...20201202144329_AddEstimatedReadingTime.php | 58 + ...6124002_ExpandIndexableIDColumnLengths.php | 63 + ...41134_ExpandPrimaryTermIDColumnLengths.php | 62 + ...817092415_AddVersionColumnToIndexables.php | 56 + .../20211020091404_AddObjectTimestamps.php | 88 + ...230417083836_AddInclusiveLanguageScore.php | 58 + .../wordpress-seo/src/config/oauth-client.php | 308 + .../src/config/researcher-languages.php | 11 + .../wordpress-seo/src/config/schema-ids.php | 59 + .../wordpress-seo/src/config/schema-types.php | 169 + .../src/config/semrush-client.php | 86 + .../src/config/wincher-client.php | 132 + .../src/config/wincher-pkce-provider.php | 257 + ...-type-visibility-dismiss-notifications.php | 128 + ...ontent-type-visibility-watcher-actions.php | 174 + ...tent-type-visibility-dismiss-new-route.php | 155 + .../src/context/meta-tags-context.php | 774 + .../src/deprecated/admin/class-customizer.php | 72 + .../src/deprecated/frontend/breadcrumbs.php | 144 + .../src/deprecated/frontend/frontend.php | 282 + .../wordpress-seo/src/deprecated/index.php | 4 + ...rdproof-integration-active-conditional.php | 50 + .../wordproof-plugin-inactive-conditional.php | 28 + .../src/config/wordproof-app-config.php | 42 + .../src/config/wordproof-translations.php | 131 + .../src/helpers/wordproof-helper.php | 110 + ...isable-concatenate-scripts-integration.php | 49 + .../admin/old-premium-integration.php | 124 + .../duplicate-post-integration.php | 46 + .../src/integrations/third-party/wincher.php | 104 + .../wordproof-integration-toggle.php | 138 + .../integrations/third-party/wordproof.php | 215 + ...s-and-descriptions-introduction-upsell.php | 118 + .../enabled-analysis-features-repository.php | 55 + .../integration-information-repository.php | 43 + .../seo/post-seo-information-repository.php | 62 + .../seo/term-seo-information-repository.php | 63 + .../site/website-information-repository.php | 61 + .../analysis-feature-interface.php | 30 + .../analysis-features/analysis-feature.php | 79 + .../analysis-features-list.php | 40 + .../integration-data-provider-interface.php | 31 + .../src/editors/domain/seo/description.php | 58 + .../src/editors/domain/seo/keyphrase.php | 58 + .../domain/seo/seo-plugin-data-interface.php | 23 + .../src/editors/domain/seo/social.php | 85 + .../src/editors/domain/seo/title.php | 58 + .../editors/framework/cornerstone-content.php | 55 + .../framework/inclusive-language-analysis.php | 116 + .../integrations/jetpack-markdown.php | 70 + .../framework/integrations/multilingual.php | 89 + .../framework/integrations/semrush.php | 90 + .../framework/integrations/wincher.php | 75 + .../editors/framework/keyphrase-analysis.php | 73 + .../framework/previously-used-keyphrase.php | 43 + .../framework/readability-analysis.php | 73 + .../description-data-provider-interface.php | 20 + .../framework/seo/keyphrase-interface.php | 13 + .../posts/abstract-post-seo-data-provider.php | 37 + .../seo/posts/description-data-provider.php | 85 + .../seo/posts/keyphrase-data-provider.php | 88 + .../seo/posts/social-data-provider.php | 133 + .../seo/posts/title-data-provider.php | 74 + .../seo/social-data-provider-interface.php | 34 + .../terms/abstract-term-seo-data-provider.php | 50 + .../seo/terms/description-data-provider.php | 40 + .../seo/terms/keyphrase-data-provider.php | 36 + .../seo/terms/social-data-provider.php | 133 + .../seo/terms/title-data-provider.php | 41 + .../seo/title-data-provider-interface.php | 15 + .../framework/site/base-site-information.php | 108 + .../framework/site/post-site-information.php | 164 + .../framework/site/term-site-information.php | 137 + .../framework/word-form-recognition.php | 55 + .../elementor/infrastructure/request-post.php | 136 + .../addon-activation-error-exception.php | 10 + .../addon-already-installed-exception.php | 10 + .../addon-installation-error-exception.php | 10 + ...user-cannot-activate-plugins-exception.php | 10 + .../user-cannot-install-plugins-exception.php | 10 + .../forbidden-property-mutation-exception.php | 34 + .../importing/aioseo-validation-exception.php | 19 + .../indexable/author-not-built-exception.php | 51 + .../indexable/indexable-exception.php | 12 + .../indexable/invalid-term-exception.php | 26 + .../indexable/not-built-exception.php | 23 + .../indexable/post-not-built-exception.php | 34 + .../indexable/post-not-found-exception.php | 18 + .../post-type-not-built-exception.php | 22 + .../exceptions/indexable/source-exception.php | 10 + .../indexable/term-not-built-exception.php | 22 + .../indexable/term-not-found-exception.php | 18 + .../src/exceptions/missing-method.php | 30 + .../oauth/authentication-failed-exception.php | 33 + .../oauth/tokens/empty-property-exception.php | 20 + .../oauth/tokens/empty-token-exception.php | 18 + .../oauth/tokens/failed-storage-exception.php | 24 + .../plugins/wordpress-seo/src/functions.php | 38 + .../src/generated/assets/externals.php | 1 + .../src/generated/assets/languages.php | 1 + .../src/generated/assets/plugin.php | 1 + .../wordpress-seo/src/generated/container.php | 5866 +++ .../src/generators/breadcrumbs-generator.php | 431 + .../src/generators/generator-interface.php | 17 + .../generators/open-graph-image-generator.php | 232 + .../open-graph-locale-generator.php | 221 + .../src/generators/schema-generator.php | 419 + .../schema/abstract-schema-piece.php | 49 + .../src/generators/schema/article.php | 234 + .../src/generators/schema/author.php | 113 + .../src/generators/schema/breadcrumb.php | 186 + .../src/generators/schema/faq.php | 113 + .../src/generators/schema/howto.php | 199 + .../src/generators/schema/main-image.php | 46 + .../src/generators/schema/organization.php | 88 + .../src/generators/schema/person.php | 316 + .../src/generators/schema/webpage.php | 163 + .../src/generators/schema/website.php | 102 + .../generators/twitter-image-generator.php | 102 + .../src/helpers/aioseo-helper.php | 66 + .../src/helpers/asset-helper.php | 98 + .../src/helpers/attachment-cleanup-helper.php | 73 + .../src/helpers/author-archive-helper.php | 182 + .../src/helpers/blocks-helper.php | 100 + .../src/helpers/capability-helper.php | 86 + .../src/helpers/crawl-cleanup-helper.php | 314 + .../wordpress-seo/src/helpers/curl-helper.php | 33 + .../src/helpers/current-page-helper.php | 489 + .../wordpress-seo/src/helpers/date-helper.php | 120 + .../src/helpers/environment-helper.php | 33 + ...first-time-configuration-notice-helper.php | 182 + .../src/helpers/home-url-helper.php | 49 + .../src/helpers/image-helper.php | 417 + .../src/helpers/import-cursor-helper.php | 58 + .../src/helpers/import-helper.php | 31 + .../src/helpers/indexable-helper.php | 319 + .../helpers/indexable-to-postmeta-helper.php | 232 + .../src/helpers/indexing-helper.php | 397 + .../src/helpers/language-helper.php | 83 + .../wordpress-seo/src/helpers/meta-helper.php | 79 + .../src/helpers/notification-helper.php | 25 + .../src/helpers/open-graph/image-helper.php | 111 + .../src/helpers/open-graph/values-helper.php | 85 + .../src/helpers/options-helper.php | 141 + .../src/helpers/pagination-helper.php | 207 + .../src/helpers/permalink-helper.php | 46 + .../wordpress-seo/src/helpers/post-helper.php | 228 + .../src/helpers/post-type-helper.php | 251 + .../src/helpers/primary-term-helper.php | 47 + .../src/helpers/product-helper.php | 62 + .../src/helpers/redirect-helper.php | 70 + .../src/helpers/request-helper.php | 18 + .../src/helpers/require-file-helper.php | 18 + .../src/helpers/robots-helper.php | 78 + .../src/helpers/robots-txt-helper.php | 108 + .../src/helpers/sanitization-helper.php | 39 + .../src/helpers/schema/article-helper.php | 35 + .../src/helpers/schema/html-helper.php | 76 + .../src/helpers/schema/id-helper.php | 29 + .../src/helpers/schema/image-helper.php | 205 + .../src/helpers/schema/language-helper.php | 32 + .../helpers/schema/replace-vars-helper.php | 135 + .../src/helpers/score-icon-helper.php | 98 + .../src/helpers/short-link-helper.php | 152 + .../wordpress-seo/src/helpers/site-helper.php | 28 + .../src/helpers/social-profiles-helper.php | 330 + .../src/helpers/string-helper.php | 45 + .../src/helpers/taxonomy-helper.php | 182 + .../src/helpers/twitter/image-helper.php | 58 + .../wordpress-seo/src/helpers/url-helper.php | 295 + .../wordpress-seo/src/helpers/user-helper.php | 109 + .../src/helpers/wincher-helper.php | 93 + .../src/helpers/woocommerce-helper.php | 71 + .../src/helpers/wordpress-helper.php | 22 + .../wordpress-seo/src/helpers/wpdb-helper.php | 44 + .../initializers/crawl-cleanup-permalinks.php | 207 + .../initializers/disable-core-sitemaps.php | 121 + .../initializers/initializer-interface.php | 20 + .../src/initializers/migration-runner.php | 171 + .../src/initializers/woocommerce.php | 34 + .../abstract-exclude-post-type.php | 46 + .../src/integrations/academy-integration.php | 183 + .../admin/activation-cleanup-integration.php | 72 + .../addon-installation/dialog-integration.php | 145 + .../installation-integration.php | 198 + .../admin/admin-columns-cache-integration.php | 279 + .../admin/background-indexing-integration.php | 339 + .../admin/crawl-settings-integration.php | 326 + .../integrations/admin/cron-integration.php | 51 + .../admin/deactivated-premium-integration.php | 151 + .../first-time-configuration-integration.php | 522 + ...-time-configuration-notice-integration.php | 152 + .../fix-news-dependencies-integration.php | 62 + .../admin/health-check-integration.php | 101 + .../integrations/admin/helpscout-beacon.php | 470 + .../integrations/admin/import-integration.php | 248 + ...ndexables-exclude-taxonomy-integration.php | 55 + .../indexing-notification-integration.php | 252 + .../admin/indexing-tool-integration.php | 249 + .../installation-success-integration.php | 158 + .../integrations/admin/integrations-page.php | 234 + .../admin/link-count-columns-integration.php | 258 + .../admin/menu-badge-integration.php | 38 + .../admin/migration-error-integration.php | 58 + .../admin/old-configuration-integration.php | 70 + .../admin/redirect-integration.php | 71 + .../admin/redirects-page-integration.php | 65 + .../admin/unsupported-php-version-notice.php | 167 + .../admin/workouts-integration.php | 337 + .../alerts/abstract-dismissable-alert.php | 45 + ...-product-editor-checklist-notification.php | 17 + .../black-friday-promotion-notification.php | 16 + ...-friday-sidebar-checklist-notification.php | 16 + .../alerts/jetpack-boost-pre-publish.php | 26 + .../alerts/trustpilot-review-notification.php | 16 + .../alerts/webinar-promo-notification.php | 16 + .../blocks/abstract-dynamic-block-v3.php | 78 + .../blocks/abstract-dynamic-block.php | 70 + .../integrations/blocks/block-categories.php | 52 + .../integrations/blocks/breadcrumbs-block.php | 138 + .../blocks/structured-data-blocks.php | 425 + .../integrations/breadcrumbs-integration.php | 82 + .../src/integrations/cleanup-integration.php | 341 + .../integrations/estimated-reading-time.php | 49 + .../exclude-attachment-post-type.php | 32 + .../exclude-oembed-cache-post-type.php | 32 + .../integrations/feature-flag-integration.php | 106 + .../integrations/front-end-integration.php | 573 + .../front-end/backwards-compatibility.php | 72 + .../front-end/category-term-description.php | 51 + .../front-end/comment-link-fixer.php | 140 + .../front-end/crawl-cleanup-basic.php | 138 + .../front-end/crawl-cleanup-rss.php | 212 + .../front-end/crawl-cleanup-searches.php | 206 + .../front-end/feed-improvements.php | 185 + .../front-end/force-rewrite-title.php | 181 + .../src/integrations/front-end/handle-404.php | 126 + .../front-end/indexing-controls.php | 109 + .../front-end/open-graph-oembed.php | 155 + .../src/integrations/front-end/redirects.php | 277 + .../front-end/robots-txt-integration.php | 292 + .../front-end/rss-footer-embed.php | 196 + .../schema-accessibility-feature.php | 80 + .../front-end/wp-robots-integration.php | 203 + .../integrations/integration-interface.php | 22 + .../src/integrations/primary-category.php | 73 + .../src/integrations/settings-integration.php | 995 + .../src/integrations/support-integration.php | 174 + .../src/integrations/third-party/amp.php | 61 + .../src/integrations/third-party/bbpress.php | 62 + .../integrations/third-party/elementor.php | 799 + .../exclude-elementor-post-types.php | 34 + .../exclude-woocommerce-post-types.php | 34 + .../src/integrations/third-party/jetpack.php | 34 + .../third-party/w3-total-cache.php | 33 + .../third-party/web-stories-post-edit.php | 47 + .../integrations/third-party/web-stories.php | 136 + .../third-party/wincher-publish.php | 162 + .../third-party/woocommerce-permalinks.php | 112 + .../third-party/woocommerce-post-edit.php | 49 + .../integrations/third-party/woocommerce.php | 350 + .../third-party/wpml-wpseo-notification.php | 120 + .../src/integrations/third-party/wpml.php | 70 + .../integrations/uninstall-integration.php | 48 + .../watchers/addon-update-watcher.php | 229 + .../watchers/auto-update-watcher.php | 58 + .../watchers/indexable-ancestor-watcher.php | 242 + .../watchers/indexable-attachment-watcher.php | 144 + .../indexable-author-archive-watcher.php | 78 + .../watchers/indexable-author-watcher.php | 141 + .../indexable-category-permalink-watcher.php | 56 + .../indexable-date-archive-watcher.php | 96 + .../watchers/indexable-home-page-watcher.php | 137 + .../watchers/indexable-homeurl-watcher.php | 114 + .../watchers/indexable-permalink-watcher.php | 279 + .../watchers/indexable-post-meta-watcher.php | 111 + .../indexable-post-type-archive-watcher.php | 147 + .../indexable-post-type-change-watcher.php | 159 + .../watchers/indexable-post-watcher.php | 338 + .../indexable-static-home-page-watcher.php | 97 + .../indexable-system-page-watcher.php | 102 + .../indexable-taxonomy-change-watcher.php | 161 + .../watchers/indexable-term-watcher.php | 152 + .../watchers/option-titles-watcher.php | 130 + .../watchers/option-wpseo-watcher.php | 127 + .../primary-category-quick-edit-watcher.php | 195 + .../watchers/primary-term-watcher.php | 161 + .../search-engines-discouraged-watcher.php | 233 + .../woocommerce-beta-editor-watcher.php | 146 + .../wordpress-seo/src/integrations/xmlrpc.php | 50 + .../application/ai-fix-assessments-upsell.php | 96 + .../application/current-page-trait.php | 43 + .../application/introductions-collector.php | 131 + .../application/user-allowed-trait.php | 23 + .../application/version-trait.php | 21 + .../domain/introduction-interface.php | 40 + .../domain/introduction-item.php | 64 + .../domain/introductions-bucket.php | 49 + .../domain/invalid-user-id-exception.php | 29 + .../introductions-seen-repository.php | 115 + .../wistia-embed-permission-repository.php | 80 + .../wordpress-seo/src/introductions/readme.md | 27 + .../introductions-integration.php | 164 + .../introductions-seen-route.php | 146 + .../wistia-embed-permission-route.php | 154 + .../wordpress-seo/src/loadable-interface.php | 16 + .../plugins/wordpress-seo/src/loader.php | 302 + .../wordpress-seo/src/loggers/logger.php | 51 + .../plugins/wordpress-seo/src/main.php | 82 + .../memoizers/meta-tags-context-memoizer.php | 178 + .../src/memoizers/presentation-memoizer.php | 89 + .../src/models/indexable-extension.php | 31 + .../src/models/indexable-hierarchy.php | 28 + .../wordpress-seo/src/models/indexable.php | 220 + .../wordpress-seo/src/models/primary-term.php | 39 + .../wordpress-seo/src/models/seo-links.php | 75 + .../wordpress-seo/src/models/seo-meta.php | 33 + .../presentations/abstract-presentation.php | 95 + .../presentations/archive-adjacent-trait.php | 79 + .../indexable-author-archive-presentation.php | 173 + .../indexable-date-archive-presentation.php | 123 + .../indexable-error-page-presentation.php | 37 + .../indexable-home-page-presentation.php | 61 + ...dexable-post-type-archive-presentation.php | 72 + .../indexable-post-type-presentation.php | 419 + .../presentations/indexable-presentation.php | 767 + ...exable-search-result-page-presentation.php | 71 + ...ndexable-static-home-page-presentation.php | 32 + ...dexable-static-posts-page-presentation.php | 50 + .../indexable-term-archive-presentation.php | 228 + .../abstract-indexable-presenter.php | 80 + .../abstract-indexable-tag-presenter.php | 73 + .../src/presenters/abstract-presenter.php | 25 + .../src/presenters/admin/alert-presenter.php | 72 + .../src/presenters/admin/badge-presenter.php | 104 + .../presenters/admin/beta-badge-presenter.php | 59 + .../presenters/admin/help-link-presenter.php | 86 + .../admin/indexing-error-presenter.php | 127 + ...indexing-failed-notification-presenter.php | 98 + .../admin/indexing-list-item-presenter.php | 50 + .../admin/indexing-notification-presenter.php | 147 + .../admin/light-switch-presenter.php | 159 + .../admin/meta-fields-presenter.php | 64 + .../admin/migration-error-presenter.php | 71 + .../src/presenters/admin/notice-presenter.php | 126 + .../admin/premium-badge-presenter.php | 59 + .../search-engines-discouraged-presenter.php | 44 + .../presenters/admin/sidebar-presenter.php | 148 + .../woocommerce-beta-editor-presenter.php | 60 + .../src/presenters/breadcrumbs-presenter.php | 259 + .../src/presenters/canonical-presenter.php | 51 + .../debug/marker-close-presenter.php | 41 + .../debug/marker-open-presenter.php | 65 + .../src/presenters/meta-author-presenter.php | 59 + .../presenters/meta-description-presenter.php | 63 + .../open-graph/article-author-presenter.php | 41 + .../article-modified-time-presenter.php | 34 + .../article-published-time-presenter.php | 34 + .../article-publisher-presenter.php | 41 + .../open-graph/description-presenter.php | 45 + .../presenters/open-graph/image-presenter.php | 145 + .../open-graph/locale-presenter.php | 41 + .../open-graph/site-name-presenter.php | 41 + .../presenters/open-graph/title-presenter.php | 44 + .../presenters/open-graph/type-presenter.php | 41 + .../presenters/open-graph/url-presenter.php | 48 + .../src/presenters/rel-next-presenter.php | 72 + .../src/presenters/rel-prev-presenter.php | 72 + .../src/presenters/robots-presenter.php | 40 + .../src/presenters/robots-txt-presenter.php | 150 + .../src/presenters/schema-presenter.php | 63 + .../src/presenters/score-icon-presenter.php | 48 + .../slack/enhanced-data-presenter.php | 66 + .../src/presenters/title-presenter.php | 79 + .../src/presenters/twitter/card-presenter.php | 34 + .../presenters/twitter/creator-presenter.php | 27 + .../twitter/description-presenter.php | 34 + .../presenters/twitter/image-presenter.php | 41 + .../src/presenters/twitter/site-presenter.php | 59 + .../presenters/twitter/title-presenter.php | 34 + .../src/presenters/url-list-presenter.php | 48 + .../presenters/webmaster/baidu-presenter.php | 27 + .../presenters/webmaster/bing-presenter.php | 27 + .../presenters/webmaster/google-presenter.php | 27 + .../webmaster/pinterest-presenter.php | 27 + .../presenters/webmaster/yandex-presenter.php | 27 + .../promotion-manager-interface.php | 25 + .../application/promotion-manager.php | 74 + .../promotions/domain/abstract-promotion.php | 52 + .../black-friday-checklist-promotion.php | 22 + .../domain/black-friday-promotion.php | 19 + .../promotions/domain/promotion-interface.php | 8 + .../src/promotions/domain/time-interval.php | 71 + .../indexable-cleanup-repository.php | 750 + .../indexable-hierarchy-repository.php | 171 + .../src/repositories/indexable-repository.php | 547 + .../repositories/primary-term-repository.php | 49 + .../src/repositories/seo-links-repository.php | 214 + .../src/routes/abstract-action-route.php | 30 + .../src/routes/abstract-indexation-route.php | 33 + .../src/routes/alert-dismissal-route.php | 104 + .../routes/first-time-configuration-route.php | 314 + .../src/routes/importing-route.php | 170 + .../src/routes/indexables-head-route.php | 104 + .../src/routes/indexing-route.php | 431 + .../src/routes/integrations-route.php | 103 + .../src/routes/meta-search-route.php | 98 + .../src/routes/route-interface.php | 18 + .../src/routes/semrush-route.php | 248 + .../src/routes/supported-features-route.php | 59 + .../src/routes/wincher-route.php | 331 + .../src/routes/workouts-route.php | 129 + .../src/routes/yoast-head-rest-field.php | 223 + .../health-check/default-tagline-check.php | 62 + .../health-check/default-tagline-reports.php | 68 + .../health-check/default-tagline-runner.php | 44 + .../services/health-check/health-check.php | 76 + .../health-check/links-table-check.php | 66 + .../health-check/links-table-reports.php | 105 + .../health-check/links-table-runner.php | 84 + .../myyoast-api-request-factory.php | 22 + .../health-check/page-comments-check.php | 62 + .../health-check/page-comments-reports.php | 63 + .../health-check/page-comments-runner.php | 41 + .../health-check/postname-permalink-check.php | 62 + .../postname-permalink-reports.php | 76 + .../postname-permalink-runner.php | 41 + .../health-check/report-builder-factory.php | 20 + .../services/health-check/report-builder.php | 207 + .../services/health-check/reports-trait.php | 42 + .../health-check/runner-interface.php | 16 + .../aioseo/aioseo-replacevar-service.php | 98 + .../aioseo/aioseo-robots-provider-service.php | 64 + .../aioseo-robots-transformer-service.php | 54 + .../aioseo-social-images-provider-service.php | 175 + .../importing/conflicting-plugins-service.php | 103 + .../importing/importable-detector-service.php | 86 + .../indexables/indexable-version-manager.php | 77 + .../src/surfaces/classes-surface.php | 40 + .../src/surfaces/helpers-surface.php | 164 + .../src/surfaces/meta-surface.php | 388 + .../surfaces/open-graph-helpers-surface.php | 96 + .../src/surfaces/schema-helpers-surface.php | 110 + .../src/surfaces/twitter-helpers-surface.php | 96 + .../src/surfaces/values/meta.php | 331 + .../additional-contactmethods-collector.php | 77 + .../user-meta/application/cleanup-service.php | 74 + .../application/custom-meta-collector.php | 72 + .../additional-contactmethod-interface.php | 23 + .../domain/custom-meta-interface.php | 62 + .../additional-contactmethods/facebook.php | 30 + .../additional-contactmethods/instagram.php | 30 + .../additional-contactmethods/linkedin.php | 30 + .../additional-contactmethods/myspace.php | 30 + .../additional-contactmethods/pinterest.php | 30 + .../additional-contactmethods/soundcloud.php | 30 + .../additional-contactmethods/tumblr.php | 30 + .../additional-contactmethods/wikipedia.php | 30 + .../framework/additional-contactmethods/x.php | 30 + .../additional-contactmethods/youtube.php | 30 + .../framework/custom-meta/author-metadesc.php | 111 + .../framework/custom-meta/author-title.php | 109 + .../custom-meta/content-analysis-disable.php | 118 + .../inclusive-language-analysis-disable.php | 118 + .../custom-meta/keyword-analysis-disable.php | 118 + .../framework/custom-meta/noindex-author.php | 111 + .../infrastructure/cleanup-repository.php | 38 + .../additional-contactmethods-integration.php | 77 + .../user-interface/cleanup-integration.php | 58 + .../custom-meta-integration.php | 119 + .../user-profiles-additions-ui.php | 97 + .../wordpress-seo/src/values/images.php | 151 + .../indexables/indexable-builder-versions.php | 44 + .../src/values/oauth/oauth-token.php | 139 + .../src/values/open-graph/images.php | 58 + .../src/values/robots/directive.php | 45 + .../src/values/robots/user-agent-list.php | 88 + .../src/values/robots/user-agent.php | 90 + .../src/values/twitter/images.php | 49 + .../wordpress-seo/src/wordpress/wrapper.php | 74 + .../src/wrappers/wp-query-wrapper.php | 50 + .../src/wrappers/wp-remote-handler.php | 65 + .../src/wrappers/wp-rewrite-wrapper.php | 20 + .../plugins/wordpress-seo/vendor/autoload.php | 7 + .../vendor/composer/ClassLoader.php | 572 + .../vendor/composer/InstalledVersions.php | 357 + .../wordpress-seo/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 1113 + .../vendor/composer/autoload_files.php | 10 + .../vendor/composer/autoload_namespaces.php | 9 + .../vendor/composer/autoload_psr4.php | 11 + .../vendor/composer/autoload_real.php | 80 + .../vendor/composer/autoload_static.php | 1151 + .../vendor/composer/installed.php | 41 + .../vendor/composer/platform_check.php | 26 + .../vendor/yoast/whip/CHANGELOG.md | 102 + .../wordpress-seo/vendor/yoast/whip/LICENSE | 21 + .../vendor/yoast/whip/src/Configs/default.php | 10 + .../vendor/yoast/whip/src/Configs/version.php | 8 + .../vendor/yoast/whip/src/Configuration.php | 61 + .../whip/src/Exceptions/EmptyProperty.php | 20 + .../src/Exceptions/InvalidOperatorType.php | 27 + .../yoast/whip/src/Exceptions/InvalidType.php | 22 + .../InvalidVersionComparisonString.php | 27 + .../yoast/whip/src/Facades/wordpress.php | 60 + .../vendor/yoast/whip/src/Host.php | 107 + .../whip/src/Interfaces/DismissStorage.php | 25 + .../yoast/whip/src/Interfaces/Listener.php | 16 + .../yoast/whip/src/Interfaces/Message.php | 16 + .../whip/src/Interfaces/MessagePresenter.php | 16 + .../yoast/whip/src/Interfaces/Requirement.php | 30 + .../whip/src/Interfaces/VersionDetector.php | 23 + .../yoast/whip/src/MessageDismisser.php | 75 + .../yoast/whip/src/MessageFormatter.php | 42 + .../yoast/whip/src/Messages/BasicMessage.php | 60 + .../yoast/whip/src/Messages/HostMessage.php | 62 + .../InvalidVersionRequirementMessage.php | 53 + .../yoast/whip/src/Messages/NullMessage.php | 20 + .../whip/src/Messages/UpgradePhpMessage.php | 87 + .../vendor/yoast/whip/src/MessagesManager.php | 91 + .../src/Presenters/WPMessagePresenter.php | 112 + .../yoast/whip/src/RequirementsChecker.php | 181 + .../yoast/whip/src/VersionRequirement.php | 153 + .../vendor/yoast/whip/src/WPDismissOption.php | 45 + .../whip/src/WPMessageDismissListener.php | 66 + .../guzzlehttp/guzzle/src/BodySummarizer.php | 23 + .../guzzle/src/BodySummarizerInterface.php | 12 + .../guzzlehttp/guzzle/src/Client.php | 402 + .../guzzlehttp/guzzle/src/ClientInterface.php | 78 + .../guzzlehttp/guzzle/src/ClientTrait.php | 227 + .../guzzle/src/Cookie/CookieJar.php | 240 + .../guzzle/src/Cookie/CookieJarInterface.php | 74 + .../guzzle/src/Cookie/FileCookieJar.php | 92 + .../guzzle/src/Cookie/SessionCookieJar.php | 71 + .../guzzle/src/Cookie/SetCookie.php | 407 + .../src/Exception/BadResponseException.php | 31 + .../guzzle/src/Exception/ClientException.php | 10 + .../guzzle/src/Exception/ConnectException.php | 47 + .../guzzle/src/Exception/GuzzleException.php | 8 + .../Exception/InvalidArgumentException.php | 7 + .../guzzle/src/Exception/RequestException.php | 124 + .../guzzle/src/Exception/ServerException.php | 10 + .../Exception/TooManyRedirectsException.php | 7 + .../src/Exception/TransferException.php | 7 + .../guzzle/src/Handler/CurlFactory.php | 496 + .../src/Handler/CurlFactoryInterface.php | 23 + .../guzzle/src/Handler/CurlHandler.php | 43 + .../guzzle/src/Handler/CurlMultiHandler.php | 220 + .../guzzle/src/Handler/EasyHandle.php | 91 + .../guzzle/src/Handler/HeaderProcessor.php | 36 + .../guzzle/src/Handler/MockHandler.php | 174 + .../guzzlehttp/guzzle/src/Handler/Proxy.php | 49 + .../guzzle/src/Handler/StreamHandler.php | 455 + .../guzzlehttp/guzzle/src/HandlerStack.php | 238 + .../guzzle/src/MessageFormatter.php | 168 + .../guzzle/src/MessageFormatterInterface.php | 17 + .../guzzlehttp/guzzle/src/Middleware.php | 227 + .../guzzlehttp/guzzle/src/Pool.php | 116 + .../guzzle/src/PrepareBodyMiddleware.php | 86 + .../guzzle/src/RedirectMiddleware.php | 162 + .../guzzlehttp/guzzle/src/RequestOptions.php | 244 + .../guzzlehttp/guzzle/src/RetryMiddleware.php | 91 + .../guzzlehttp/guzzle/src/TransferStats.php | 114 + .../guzzlehttp/guzzle/src/Utils.php | 339 + .../guzzlehttp/guzzle/src/functions.php | 158 + .../guzzle/src/functions_include.php | 8 + .../promises/src/AggregateException.php | 15 + .../promises/src/CancellationException.php | 11 + .../guzzlehttp/promises/src/Coroutine.php | 143 + .../guzzlehttp/promises/src/Create.php | 68 + .../guzzlehttp/promises/src/Each.php | 56 + .../guzzlehttp/promises/src/EachPromise.php | 196 + .../promises/src/FulfilledPromise.php | 73 + .../guzzlehttp/promises/src/Is.php | 36 + .../guzzlehttp/promises/src/Promise.php | 236 + .../promises/src/PromiseInterface.php | 80 + .../promises/src/PromisorInterface.php | 15 + .../promises/src/RejectedPromise.php | 78 + .../promises/src/RejectionException.php | 41 + .../guzzlehttp/promises/src/TaskQueue.php | 65 + .../promises/src/TaskQueueInterface.php | 21 + .../guzzlehttp/promises/src/Utils.php | 217 + .../guzzlehttp/psr7/src/AppendStream.php | 203 + .../guzzlehttp/psr7/src/BufferStream.php | 121 + .../guzzlehttp/psr7/src/CachingStream.php | 125 + .../guzzlehttp/psr7/src/DroppingStream.php | 40 + .../src/Exception/MalformedUriException.php | 12 + .../guzzlehttp/psr7/src/FnStream.php | 149 + .../guzzlehttp/psr7/src/Header.php | 117 + .../guzzlehttp/psr7/src/HttpFactory.php | 76 + .../guzzlehttp/psr7/src/InflateStream.php | 33 + .../guzzlehttp/psr7/src/LazyOpenStream.php | 41 + .../guzzlehttp/psr7/src/LimitStream.php | 128 + .../guzzlehttp/psr7/src/Message.php | 189 + .../guzzlehttp/psr7/src/MessageTrait.php | 212 + .../guzzlehttp/psr7/src/MimeType.php | 27 + .../guzzlehttp/psr7/src/MultipartStream.php | 130 + .../guzzlehttp/psr7/src/NoSeekStream.php | 23 + .../guzzlehttp/psr7/src/PumpStream.php | 149 + .../guzzlehttp/psr7/src/Query.php | 104 + .../guzzlehttp/psr7/src/Request.php | 124 + .../guzzlehttp/psr7/src/Response.php | 78 + .../guzzlehttp/psr7/src/Rfc7230.php | 22 + .../guzzlehttp/psr7/src/ServerRequest.php | 266 + .../guzzlehttp/psr7/src/Stream.php | 235 + .../psr7/src/StreamDecoratorTrait.php | 131 + .../guzzlehttp/psr7/src/StreamWrapper.php | 142 + .../guzzlehttp/psr7/src/UploadedFile.php | 152 + .../guzzlehttp/psr7/src/Uri.php | 572 + .../guzzlehttp/psr7/src/UriComparator.php | 43 + .../guzzlehttp/psr7/src/UriNormalizer.php | 175 + .../guzzlehttp/psr7/src/UriResolver.php | 180 + .../guzzlehttp/psr7/src/Utils.php | 375 + .../oauth2-client/src/Grant/AbstractGrant.php | 72 + .../src/Grant/AuthorizationCode.php | 38 + .../src/Grant/ClientCredentials.php | 38 + .../Grant/Exception/InvalidGrantException.php | 25 + .../oauth2-client/src/Grant/GrantFactory.php | 91 + .../oauth2-client/src/Grant/Password.php | 38 + .../oauth2-client/src/Grant/RefreshToken.php | 38 + .../HttpBasicAuthOptionProvider.php | 38 + .../OptionProviderInterface.php | 30 + .../OptionProvider/PostAuthOptionProvider.php | 46 + .../src/Provider/AbstractProvider.php | 783 + .../Exception/IdentityProviderException.php | 45 + .../src/Provider/GenericProvider.php | 201 + .../src/Provider/GenericResourceOwner.php | 57 + .../src/Provider/ResourceOwnerInterface.php | 35 + .../oauth2-client/src/Token/AccessToken.php | 204 + .../src/Token/AccessTokenInterface.php | 67 + .../ResourceOwnerAccessTokenInterface.php | 25 + .../src/Tool/ArrayAccessorTrait.php | 47 + .../src/Tool/BearerAuthorizationTrait.php | 35 + .../src/Tool/GuardedPropertyTrait.php | 66 + .../src/Tool/MacAuthorizationTrait.php | 76 + .../src/Tool/ProviderRedirectTrait.php | 105 + .../src/Tool/QueryBuilderTrait.php | 33 + .../oauth2-client/src/Tool/RequestFactory.php | 67 + .../src/Tool/RequiredParameterTrait.php | 51 + .../src/ContainerExceptionInterface.php | 13 + .../psr/container/src/ContainerInterface.php | 36 + .../src/NotFoundExceptionInterface.php | 13 + .../src/ClientExceptionInterface.php | 10 + .../psr/http-client/src/ClientInterface.php | 19 + .../src/NetworkExceptionInterface.php | 23 + .../src/RequestExceptionInterface.php | 23 + .../src/RequestFactoryInterface.php | 18 + .../src/ResponseFactoryInterface.php | 18 + .../src/ServerRequestFactoryInterface.php | 24 + .../src/StreamFactoryInterface.php | 43 + .../src/UploadedFileFactoryInterface.php | 28 + .../http-factory/src/UriFactoryInterface.php | 17 + .../psr/http-message/src/MessageInterface.php | 177 + .../psr/http-message/src/RequestInterface.php | 124 + .../http-message/src/ResponseInterface.php | 66 + .../src/ServerRequestInterface.php | 249 + .../psr/http-message/src/StreamInterface.php | 144 + .../src/UploadedFileInterface.php | 118 + .../psr/http-message/src/UriInterface.php | 309 + .../psr/log/Psr/Log/AbstractLogger.php | 121 + .../log/Psr/Log/InvalidArgumentException.php | 7 + .../psr/log/Psr/Log/LogLevel.php | 18 + .../psr/log/Psr/Log/LoggerAwareInterface.php | 18 + .../psr/log/Psr/Log/LoggerAwareTrait.php | 25 + .../psr/log/Psr/Log/LoggerInterface.php | 117 + .../psr/log/Psr/Log/LoggerTrait.php | 134 + .../psr/log/Psr/Log/NullLogger.php | 30 + .../Argument/RewindableGenerator.php | 40 + .../dependency-injection/Container.php | 465 + .../ContainerInterface.php | 91 + .../Exception/EnvNotFoundException.php | 24 + .../Exception/ExceptionInterface.php | 22 + .../Exception/InvalidArgumentException.php | 20 + .../Exception/LogicException.php | 18 + .../ParameterCircularReferenceException.php | 30 + .../Exception/RuntimeException.php | 20 + .../ServiceCircularReferenceException.php | 36 + .../Exception/ServiceNotFoundException.php | 58 + .../EnvPlaceholderParameterBag.php | 108 + .../ParameterBag/FrozenParameterBag.php | 62 + .../ParameterBag/ParameterBag.php | 263 + .../ParameterBag/ParameterBagInterface.php | 103 + .../ResettableContainerInterface.php | 30 + .../deprecation-contracts/function.php | 27 + .../plugins/wordpress-seo/wp-seo-main.php | 592 + .../plugins/wordpress-seo/wp-seo.php | 50 + .../plugins/wordpress-seo/wpml-config.xml | 44 + wp/wp-content/plugins/wp-schema-pro/LICENSE | 674 + .../admin/assets/css/fields-style.css | 619 + .../admin/assets/css/frontend.css | 21 + .../admin/assets/css/license-form-popup.css | 98 + .../admin/assets/css/settings-style.css | 460 + .../admin/assets/css/setup-wizard.css | 589 + .../wp-schema-pro/admin/assets/css/style.css | 388 + .../admin/assets/images/breadcrumbs.jpg | Bin 0 -> 33442 bytes .../admin/assets/images/schema-pro.png | Bin 0 -> 10477 bytes .../admin/assets/images/schema-pro60x60.png | Bin 0 -> 1349 bytes .../admin/assets/images/sitelink-search.jpg | Bin 0 -> 65965 bytes .../admin/assets/images/sitelinks.jpg | Bin 0 -> 65191 bytes .../admin/assets/js/fields-script.js | 704 + .../wp-schema-pro/admin/assets/js/frontend.js | 145 + .../admin/assets/js/license-form-popup.js | 26 + .../wp-schema-pro/admin/assets/js/script.js | 783 + .../admin/assets/js/settings-script.js | 415 + .../admin/assets/js/setup-wizard.js | 32 + .../admin/assets/js/timpepicker.min.js | 4 + .../admin/assets/min-css/fields-style.min.css | 1 + .../admin/assets/min-css/frontend.min.css | 1 + .../assets/min-css/license-form-popup.min.css | 1 + .../assets/min-css/settings-style.min.css | 1 + .../admin/assets/min-css/setup-wizard.min.css | 1 + .../admin/assets/min-css/style.min.css | 1 + .../admin/assets/min-js/fields-script.min.js | 1 + .../admin/assets/min-js/frontend.min.js | 1 + .../assets/min-js/license-form-popup.min.js | 1 + .../admin/assets/min-js/script.min.js | 1 + .../assets/min-js/settings-script.min.js | 1 + .../admin/assets/min-js/setup-wizard.min.js | 1 + .../assets/css/minified/style-rtl.min.css | 1 + .../assets/css/minified/style.min.css | 1 + .../assets/css/unminified/style-rtl.css | 21 + .../assets/css/unminified/style.css | 21 + .../class-bsf-analytics-loader.php | 118 + .../class-bsf-analytics-stats.php | 258 + .../bsf-analytics/class-bsf-analytics.php | 514 + .../admin/bsf-analytics/version.json | 4 + .../admin/bsf-core/assets/css/frosty.css | 172 + .../assets/css/license-form-popup.css | 138 + .../bsf-core/assets/css/rollback-version.css | 84 + .../admin/bsf-core/assets/css/style.css | 1310 + .../admin/bsf-core/assets/css/switch.css | 146 + .../bsf-core/assets/fonts/brainstorm.eot | Bin 0 -> 1776 bytes .../bsf-core/assets/fonts/brainstorm.svg | 11 + .../bsf-core/assets/fonts/brainstorm.ttf | Bin 0 -> 1612 bytes .../bsf-core/assets/fonts/brainstorm.woff | Bin 0 -> 1688 bytes .../bsf-core/assets/images/egg-shell.png | Bin 0 -> 25559 bytes .../admin/bsf-core/assets/js/bsf-core.js | 32 + .../bsf-core/assets/js/extension-installer.js | 105 + .../admin/bsf-core/assets/js/frosty.js | 263 + .../bsf-core/assets/js/jquery-history.js | 1 + .../bsf-core/assets/js/license-form-popup.js | 151 + .../admin/bsf-core/assets/js/switch.js | 16 + .../bsf-core/assets/js/version-rollback.js | 61 + .../bsf-core/auto-update/admin-functions.php | 413 + .../admin/bsf-core/auto-update/updater.php | 239 + .../wp-schema-pro/admin/bsf-core/bsf.yml | 2 + .../admin/bsf-core/changelog.txt | 18 + .../bsf-core/class-bsf-envato-activate.php | 449 + .../bsf-core/class-bsf-license-manager.php | 896 + .../class-bsf-rollback-version-manager.php | 180 + .../bsf-core/class-bsf-update-manager.php | 720 + .../bsf-core/class-bsf-wp-cli-command.php | 113 + .../bsf-core/classes/class-bsf-core-rest.php | 117 + .../classes/class-bsf-core-update.php | 98 + .../classes/class-bsf-extension-installer.php | 89 + .../classes/class-bsf-rollback-version.php | 242 + .../admin/bsf-core/composer.json | 26 + .../admin/bsf-core/includes/helpers.php | 403 + .../admin/bsf-core/includes/system-info.php | 292 + .../includes/views/list-bundled-products.php | 84 + .../wp-schema-pro/admin/bsf-core/index.php | 931 + .../plugin-installer/admin-functions.php | 300 + .../admin/bsf-core/plugin-installer/index.php | 15 + .../wp-schema-pro/admin/bsf-core/version.yml | 1 + .../plugins/wp-schema-pro/admin/bsf.yml | 2 + .../plugins/wp-schema-pro/changelog.txt | 490 + .../class-brainstorm-update-aiosrs-pro.php | 198 + .../classes/class-bsf-aiosrs-pro-admin.php | 1133 + .../classes/class-bsf-aiosrs-pro-amp.php | 87 + .../classes/class-bsf-aiosrs-pro-branding.php | 80 + ...ss-bsf-aiosrs-pro-custom-fields-markup.php | 1258 + .../classes/class-bsf-aiosrs-pro-helper.php | 191 + .../classes/class-bsf-aiosrs-pro-markup.php | 521 + ...bsf-aiosrs-pro-schema-global-uninstall.php | 92 + .../class-bsf-aiosrs-pro-schema-template.php | 1023 + .../class-bsf-aiosrs-pro-schema-wizard.php | 484 + .../classes/class-bsf-aiosrs-pro-schema.php | 5042 ++ .../class-bsf-aiosrs-pro-setup-wizard.php | 702 + .../classes/class-bsf-aiosrs-pro.php | 145 + ...lass-wp-schema-pro-yoast-compatibility.php | 91 + .../lib/class-bsf-custom-post-list-table.php | 612 + .../class-bsf-target-rule-fields.php | 1526 + .../classes/lib/target-rule/select2.css | 484 + .../classes/lib/target-rule/select2.js | 5747 +++ .../classes/lib/target-rule/target-rule.css | 103 + .../classes/lib/target-rule/target-rule.js | 279 + .../classes/lib/target-rule/user-role.js | 97 + .../class-bsf-aiosrs-pro-schema-article.php | 89 + .../class-bsf-aiosrs-pro-schema-book.php | 91 + .../class-bsf-aiosrs-pro-schema-course.php | 168 + ...ss-bsf-aiosrs-pro-schema-custom-markup.php | 35 + .../class-bsf-aiosrs-pro-schema-event.php | 210 + .../class-bsf-aiosrs-pro-schema-faq.php | 47 + .../class-bsf-aiosrs-pro-schema-how-to.php | 87 + ...ss-bsf-aiosrs-pro-schema-image-license.php | 62 + ...lass-bsf-aiosrs-pro-schema-job-posting.php | 127 + ...s-bsf-aiosrs-pro-schema-local-business.php | 117 + .../class-bsf-aiosrs-pro-schema-person.php | 115 + .../class-bsf-aiosrs-pro-schema-product.php | 283 + .../class-bsf-aiosrs-pro-schema-recipe.php | 148 + .../class-bsf-aiosrs-pro-schema-review.php | 363 + .../class-bsf-aiosrs-pro-schema-service.php | 81 + ...aiosrs-pro-schema-software-application.php | 61 + ...ass-bsf-aiosrs-pro-schema-video-object.php | 106 + ...sf-aiosrs-pro-schema-global-about-page.php | 81 + ...sf-aiosrs-pro-schema-global-breadcrumb.php | 42 + ...-aiosrs-pro-schema-global-contact-page.php | 81 + ...-aiosrs-pro-schema-global-organization.php | 111 + ...ss-bsf-aiosrs-pro-schema-global-person.php | 74 + ...-schema-global-site-navigation-element.php | 70 + ...-pro-schema-global-sitelink-search-box.php | 50 + .../wp-schema-pro/dist/blocks.asset.php | 1 + .../plugins/wp-schema-pro/dist/blocks.js | 1 + .../dist/chunks/faq-child/render.js | 1 + .../dist/chunks/faq-child/settings.js | 1 + .../wp-schema-pro/dist/chunks/faq/render.js | 1 + .../wp-schema-pro/dist/chunks/faq/settings.js | 1 + .../dist/chunks/how-to-child/render.js | 1 + .../dist/chunks/how-to-child/settings.js | 1 + .../dist/chunks/how-to/render.js | 1 + .../dist/chunks/how-to/settings.js | 1 + .../wp-schema-pro/dist/style-blocks.css | 4 + .../dist/vendors~chunks/faq/settings.js | 1 + .../settings~chunks/how-to/settings.js | 1 + .../wp-schema-pro/languages/wp-schema-pro-.mo | Bin 0 -> 269 bytes .../languages/wp-schema-pro-ar.mo | Bin 0 -> 399 bytes .../languages/wp-schema-pro-bg_BG.mo | Bin 0 -> 274 bytes .../languages/wp-schema-pro-cs_CZ.mo | Bin 0 -> 314 bytes .../languages/wp-schema-pro-da_DK.mo | Bin 0 -> 277 bytes .../languages/wp-schema-pro-de_DE.mo | Bin 0 -> 274 bytes .../languages/wp-schema-pro-es_ES.mo | Bin 0 -> 401 bytes .../languages/wp-schema-pro-es_MX.mo | Bin 0 -> 277 bytes .../languages/wp-schema-pro-fa_IR.mo | Bin 0 -> 96975 bytes .../languages/wp-schema-pro-fr_FR.mo | Bin 0 -> 273 bytes .../languages/wp-schema-pro-he_IL.mo | Bin 0 -> 277 bytes .../languages/wp-schema-pro-id_ID.mo | Bin 0 -> 273 bytes .../languages/wp-schema-pro-it_IT.mo | Bin 0 -> 39910 bytes .../languages/wp-schema-pro-ja.mo | Bin 0 -> 272 bytes .../languages/wp-schema-pro-nb_NO.mo | Bin 0 -> 35771 bytes .../languages/wp-schema-pro-nl_NL.mo | Bin 0 -> 274 bytes .../languages/wp-schema-pro-pl_PL.mo | Bin 0 -> 355 bytes .../languages/wp-schema-pro-pt_BR.mo | Bin 0 -> 40582 bytes .../languages/wp-schema-pro-pt_PT.mo | Bin 0 -> 274 bytes .../languages/wp-schema-pro-ru_RU.mo | Bin 0 -> 111808 bytes .../languages/wp-schema-pro-sk_SK.mo | Bin 0 -> 311 bytes .../languages/wp-schema-pro-sv_SE.mo | Bin 0 -> 277 bytes .../languages/wp-schema-pro-tr_TR.mo | Bin 0 -> 273 bytes .../languages/wp-schema-pro-uk.mo | Bin 0 -> 109656 bytes .../languages/wp-schema-pro-vi.mo | Bin 0 -> 272 bytes .../wp-schema-pro/languages/wp-schema-pro.pot | 5596 +++ .../lib/astra-notices/class-astra-notices.php | 389 + .../lib/astra-notices/composer.json | 29 + .../lib/astra-notices/notices.js | 95 + .../template/branding-settings.php | 190 + .../template/breadcrumb-settings.php | 240 + .../wp-schema-pro/template/license-form.php | 40 + .../wp-schema-pro/template/settings.php | 644 + .../template/wpsp-advanced-settings.php | 318 + .../plugins/wp-schema-pro/uninstall.php | 29 + .../plugins/wp-schema-pro/webpack.config.js | 49 + .../plugins/wp-schema-pro/wp-schema-pro.php | 151 + .../plugins/wp-schema-pro/wpml-config.xml | 24 + .../css/blocks.commoneditorstyle.build.css | 3361 ++ .../assets/css/blocks/faq-child.css | 62 + .../wpsp-blocks/assets/css/blocks/faq.css | 9 + .../assets/css/blocks/how-to-child.css | 454 + .../wpsp-blocks/assets/css/blocks/how-to.css | 28 + .../wpsp-blocks/assets/js/faq.js | 225 + .../wpsp-blocks/assets/min-js/faq.min.js | 1 + .../classes/class-bsf-sp-admin-helper.php | 168 + .../classes/class-bsf-sp-admin.php | 169 + .../classes/class-bsf-sp-block-helper.php | 548 + .../classes/class-bsf-sp-block-js.php | 98 + .../classes/class-bsf-sp-config.php | 338 + .../classes/class-bsf-sp-helper.php | 731 + .../classes/class-bsf-sp-init-blocks.php | 233 + .../classes/class-bsf-sp-loader.php | 79 + .../wpsp-config/controls/WPSPIcon.json | 41761 ++++++++++++++++ .../wpsp-config/controls/block-icons.js | 109 + .../wpsp-config/controls/generate-css-unit.js | 12 + .../wpsp-config/controls/generate-css.js | 62 + .../wpsp-config/controls/hex-to-rgba.js | 39 + .../wpsp-config/controls/lazy-loader.js | 5 + .../wpsp-config/controls/parse-icon.js | 12 + .../wpsp-config/controls/render-icon.js | 28 + 2953 files changed, 514886 insertions(+) create mode 100644 wp/wp-content/plugins/gravityformshubspot/change_log.txt create mode 100644 wp/wp-content/plugins/gravityformshubspot/class-gf-hubspot.php create mode 100644 wp/wp-content/plugins/gravityformshubspot/css/form_settings.css create mode 100644 wp/wp-content/plugins/gravityformshubspot/css/form_settings.min.css create mode 100644 wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.css create mode 100644 wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.min.css create mode 100644 wp/wp-content/plugins/gravityformshubspot/hubspot.php create mode 100644 wp/wp-content/plugins/gravityformshubspot/images/menu-icon.svg create mode 100644 wp/wp-content/plugins/gravityformshubspot/includes/class-gf-hubspot-api.php create mode 100644 wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.js create mode 100644 wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.min.js create mode 100644 wp/wp-content/plugins/gravityformshubspot/js/plugin_settings.js create mode 100644 wp/wp-content/plugins/gravityformshubspot/js/plugin_settings.min.js create mode 100644 wp/wp-content/plugins/gravityformshubspot/languages/gravityformshubspot.pot create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/change_log.txt create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/class-gf-recaptcha.php create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/includes/class-gf-field-recaptcha.php create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/includes/class-recaptcha-api.php create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/includes/class-token-verifier.php create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/includes/settings/class-plugin-settings.php create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js.map create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.min.js create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js.map create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js.map create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.min.js create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/languages/gravityformsrecaptcha.pot create mode 100644 wp/wp-content/plugins/gravityformsrecaptcha/recaptcha.php create mode 100644 wp/wp-content/plugins/imagify/SECURITY.md create mode 100644 wp/wp-content/plugins/imagify/_dev/bud.config.js create mode 100644 wp/wp-content/plugins/imagify/_dev/package.json create mode 100644 wp/wp-content/plugins/imagify/_dev/src/bulk.js create mode 100644 wp/wp-content/plugins/imagify/_dev/src/chart.js create mode 100644 wp/wp-content/plugins/imagify/assets/admin/entrypoints.json create mode 100644 wp/wp-content/plugins/imagify/assets/admin/js/bulk.js create mode 100644 wp/wp-content/plugins/imagify/assets/admin/js/chart.js create mode 100644 wp/wp-content/plugins/imagify/assets/admin/js/runtime.js create mode 100644 wp/wp-content/plugins/imagify/assets/admin/manifest.json create mode 100644 wp/wp-content/plugins/imagify/assets/css/admin-bar.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/admin-bar.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/admin.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/admin.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/bulk.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/bulk.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/files-list.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/files-list.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/notices.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/notices.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/options.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/options.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/pricing-modal.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/pricing-modal.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/sweetalert2.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/sweetalert2.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/twentytwenty.css create mode 100644 wp/wp-content/plugins/imagify/assets/css/twentytwenty.min.css create mode 100644 wp/wp-content/plugins/imagify/assets/images/big-blue-check.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/bulk.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/check-1.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/check-mini-1.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/check-mini.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/check.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/cloudy-sun.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/facebook_c.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/gear.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-alert.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-arrow-choice.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-arrow-choice.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-doc-image.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-external.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-level.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-load.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-lock.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-lock.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-pack.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-pack.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/icon-time.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/imagify-logo.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-de.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-en.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-es.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-fr.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-it.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/imagify.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/key.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/lazyload.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/loader-balls.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/logo-wprocket.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/logo-wprocket.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/logo-wprocket@2x.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/mail.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/mushrooms-aggressive.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/mushrooms-normal.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/mushrooms-original.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/mushrooms-ultra.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/phone.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/pic-ericwaltr.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/pic-srhdesign.jpg create mode 100644 wp/wp-content/plugins/imagify/assets/images/popin-loader.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/spinner.gif create mode 100644 wp/wp-content/plugins/imagify/assets/images/stormy.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/sun.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/twitter_c.svg create mode 100644 wp/wp-content/plugins/imagify/assets/images/upload-image.png create mode 100644 wp/wp-content/plugins/imagify/assets/images/user.svg create mode 100644 wp/wp-content/plugins/imagify/assets/js/admin-bar.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/admin-bar.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/admin.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/admin.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/beat.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/beat.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/es6-promise.auto.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/es6-promise.auto.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/files-list.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/files-list.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/imagify-gulp.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/imagify-gulp.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/jquery.event.move.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/jquery.event.move.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/jquery.twentytwenty.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/jquery.twentytwenty.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/library.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/library.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/media-modal.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/media-modal.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/notices.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/notices.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/options.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/options.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/pricing-modal.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/pricing-modal.min.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/sweetalert2.js create mode 100644 wp/wp-content/plugins/imagify/assets/js/sweetalert2.min.js create mode 100644 wp/wp-content/plugins/imagify/classes/Admin/AdminBar.php create mode 100644 wp/wp-content/plugins/imagify/classes/Auth/Basic.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/Apache.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/Display.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/IIS.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/RewriteRules/Apache.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/RewriteRules/Display.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/RewriteRules/IIS.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/RewriteRules/Nginx.php create mode 100644 wp/wp-content/plugins/imagify/classes/Avif/ServiceProvider.php create mode 100644 wp/wp-content/plugins/imagify/classes/Bulk/AbstractBulk.php create mode 100644 wp/wp-content/plugins/imagify/classes/Bulk/Bulk.php create mode 100644 wp/wp-content/plugins/imagify/classes/Bulk/BulkInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Bulk/CustomFolders.php create mode 100644 wp/wp-content/plugins/imagify/classes/Bulk/Noop.php create mode 100644 wp/wp-content/plugins/imagify/classes/Bulk/WP.php create mode 100644 wp/wp-content/plugins/imagify/classes/CDN/CDN.php create mode 100644 wp/wp-content/plugins/imagify/classes/CDN/PushCDNInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/CDN/ServiceProvider.php create mode 100644 wp/wp-content/plugins/imagify/classes/CLI/AbstractCommand.php create mode 100644 wp/wp-content/plugins/imagify/classes/CLI/BulkOptimizeCommand.php create mode 100644 wp/wp-content/plugins/imagify/classes/CLI/CommandInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/CLI/GenerateMissingNextgenCommand.php create mode 100644 wp/wp-content/plugins/imagify/classes/Context/AbstractContext.php create mode 100644 wp/wp-content/plugins/imagify/classes/Context/ContextInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Context/CustomFolders.php create mode 100644 wp/wp-content/plugins/imagify/classes/Context/Noop.php create mode 100644 wp/wp-content/plugins/imagify/classes/Context/WP.php create mode 100644 wp/wp-content/plugins/imagify/classes/DB/DBInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Argument/ArgumentResolverInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Argument/ArgumentResolverTrait.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Argument/ClassName.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Argument/ClassNameInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Argument/ClassNameWithOptionalValue.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Argument/RawArgument.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Argument/RawArgumentInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Container.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ContainerAwareInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ContainerAwareTrait.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/Definition.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/DefinitionAggregate.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/DefinitionAggregateInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/DefinitionInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Exception/ContainerException.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Exception/NotFoundException.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Inflector/Inflector.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Inflector/InflectorAggregate.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Inflector/InflectorAggregateInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/Inflector/InflectorInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ReflectionContainer.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ServiceProvider/AbstractServiceProvider.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ServiceProvider/BootableServiceProviderInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ServiceProvider/ServiceProviderAggregate.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ServiceProvider/ServiceProviderAggregateInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/League/Container/ServiceProvider/ServiceProviderInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/Psr/Container/ContainerExceptionInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/Psr/Container/ContainerInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Dependencies/Psr/Container/NotFoundExceptionInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Imagifybeat/Actions.php create mode 100644 wp/wp-content/plugins/imagify/classes/Imagifybeat/Core.php create mode 100644 wp/wp-content/plugins/imagify/classes/Job/MediaOptimization.php create mode 100644 wp/wp-content/plugins/imagify/classes/Media/AbstractMedia.php create mode 100644 wp/wp-content/plugins/imagify/classes/Media/CustomFolders.php create mode 100644 wp/wp-content/plugins/imagify/classes/Media/MediaInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Media/Noop.php create mode 100644 wp/wp-content/plugins/imagify/classes/Media/WP.php create mode 100644 wp/wp-content/plugins/imagify/classes/Notices/Notices.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Data/AbstractData.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Data/CustomFolders.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Data/DataInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Data/Noop.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Data/WP.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/File.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Process/AbstractProcess.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Process/CustomFolders.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Process/Noop.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Process/ProcessInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Optimization/Process/WP.php create mode 100644 wp/wp-content/plugins/imagify/classes/Picture/Display.php create mode 100644 wp/wp-content/plugins/imagify/classes/Picture/ServiceProvider.php create mode 100644 wp/wp-content/plugins/imagify/classes/Plugin.php create mode 100644 wp/wp-content/plugins/imagify/classes/Stats/OptimizedMediaWithoutNextGen.php create mode 100644 wp/wp-content/plugins/imagify/classes/Stats/ServiceProvider.php create mode 100644 wp/wp-content/plugins/imagify/classes/Stats/StatInterface.php create mode 100644 wp/wp-content/plugins/imagify/classes/Traits/InstanceGetterTrait.php create mode 100644 wp/wp-content/plugins/imagify/classes/Traits/MediaRowTrait.php create mode 100644 wp/wp-content/plugins/imagify/classes/User/User.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/Apache.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/Display.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/IIS.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/RewriteRules/Apache.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/RewriteRules/Display.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/RewriteRules/IIS.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/RewriteRules/Nginx.php create mode 100644 wp/wp-content/plugins/imagify/classes/Webp/ServiceProvider.php create mode 100644 wp/wp-content/plugins/imagify/classes/WriteFile/AbstractApacheDirConfFile.php create mode 100644 wp/wp-content/plugins/imagify/classes/WriteFile/AbstractIISDirConfFile.php create mode 100644 wp/wp-content/plugins/imagify/classes/WriteFile/AbstractNginxDirConfFile.php create mode 100644 wp/wp-content/plugins/imagify/classes/WriteFile/AbstractWriteDirConfFile.php create mode 100644 wp/wp-content/plugins/imagify/classes/WriteFile/WriteFileInterface.php create mode 100644 wp/wp-content/plugins/imagify/config/providers.php create mode 100644 wp/wp-content/plugins/imagify/contributors.txt create mode 100644 wp/wp-content/plugins/imagify/imagify.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/3rd-party.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/WooCommerce/class-woocommerce.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/amazon-s3-and-cloudfront/amazon-s3-and-cloudfront.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/amazon-s3-and-cloudfront/classes/CDN/WP/AS3.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/amazon-s3-and-cloudfront/classes/Main.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/amp/amp.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/enable-media-replace/classes/Main.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/enable-media-replace/enable-media-replace.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/formidable-pro/classes/Main.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/formidable-pro/formidable-pro.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/hosting/flywheel.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/hosting/pressable.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/hosting/siteground.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/hosting/wordpress-com.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/hosting/wpengine.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/Bulk/NGG.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/Context/NGG.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/DB.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/DynamicThumbnails.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/Main.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/Media/NGG.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/NGGStorage.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/Optimization/Data/NGG.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/classes/Optimization/Process/NGG.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/admin/bulk.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/admin/enqueue.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/admin/gallery.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/admin/menu.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/common/attachments.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/functions/admin-stats.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/functions/attachments.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/inc/functions/common.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/nextgen-gallery/nextgen-gallery.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/regenerate-thumbnails/classes/Main.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/regenerate-thumbnails/regenerate-thumbnails.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/screets-lc.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/wp-cloudflare-super-page-cache.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/wp-real-media-library.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/wp-rocket/classes/Main.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/wp-rocket/wp-rocket.php create mode 100644 wp/wp-content/plugins/imagify/inc/3rd-party/yoast-seo.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/README.md create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/action-scheduler.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/changelog.txt create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_ActionClaim.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_ActionFactory.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_AdminView.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_Compatibility.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_DataController.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_DateTime.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_Exception.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_FatalErrorMonitor.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_InvalidActionException.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_ListTable.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_LogEntry.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_NullLogEntry.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_OptionLock.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_QueueCleaner.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_QueueRunner.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_Versions.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_WPCommentCleaner.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/ActionScheduler_wcSystemStatus.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/WP_CLI/Migration_Command.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/WP_CLI/ProgressBar.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Lock.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Logger.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_Store.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/actions/ActionScheduler_Action.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/actions/ActionScheduler_CanceledAction.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/actions/ActionScheduler_FinishedAction.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/actions/ActionScheduler_NullAction.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_DBLogger.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_DBStore.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_HybridStore.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_wpPostStore.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/ActionMigrator.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/ActionScheduler_DBStoreMigrator.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/BatchFetcher.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/Config.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/Controller.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/DryRun_ActionMigrator.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/DryRun_LogMigrator.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/LogMigrator.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/Runner.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/migration/Scheduler.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schedules/ActionScheduler_CanceledSchedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schedules/ActionScheduler_CronSchedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schedules/ActionScheduler_IntervalSchedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schedules/ActionScheduler_NullSchedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schedules/ActionScheduler_Schedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schedules/ActionScheduler_SimpleSchedule.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schema/ActionScheduler_LoggerSchema.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/classes/schema/ActionScheduler_StoreSchema.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/deprecated/ActionScheduler_AdminView_Deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/deprecated/ActionScheduler_Schedule_Deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/deprecated/ActionScheduler_Store_Deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/deprecated/functions.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/functions.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/WP_Async_Request.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_AbstractField.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_DayOfMonthField.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_DayOfWeekField.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_FieldFactory.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_FieldInterface.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_HoursField.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_MinutesField.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_MonthField.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/CronExpression_YearField.php create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/LICENSE create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/lib/cron-expression/README.md create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/license.txt create mode 100644 wp/wp-content/plugins/imagify/inc/Dependencies/ActionScheduler/readme.txt create mode 100644 wp/wp-content/plugins/imagify/inc/admin/custom-folders.php create mode 100644 wp/wp-content/plugins/imagify/inc/admin/media.php create mode 100644 wp/wp-content/plugins/imagify/inc/admin/meta-boxes.php create mode 100644 wp/wp-content/plugins/imagify/inc/admin/upgrader.php create mode 100644 wp/wp-content/plugins/imagify/inc/admin/upload.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/Dependencies/.gitkeep create mode 100644 wp/wp-content/plugins/imagify/inc/classes/Dependencies/deliciousbrains/wp-background-processing/classes/wp-async-request.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/Dependencies/deliciousbrains/wp-background-processing/classes/wp-background-process.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/Dependencies/wp-media/event-manager/EventManager.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/Dependencies/wp-media/event-manager/EventManagerAwareSubscriberInterface.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/Dependencies/wp-media/event-manager/SubscriberInterface.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-abstract-background-process.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-abstract-cron.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-abstract-db.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-abstract-options.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-admin-ajax-post.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-assets.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-auto-optimization.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-cron-library-size.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-cron-rating.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-cron-sync-files.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-custom-folders.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-data.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-db.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-files-db.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-files-iterator.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-files-list-table.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-files-recursive-iterator.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-files-scan.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-files-stats.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-filesystem.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-folders-db.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-options.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-requirements-check.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-requirements.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-settings.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify-views.php create mode 100644 wp/wp-content/plugins/imagify/inc/classes/class-imagify.php create mode 100644 wp/wp-content/plugins/imagify/inc/common/admin-bar.php create mode 100644 wp/wp-content/plugins/imagify/inc/common/attachments.php create mode 100644 wp/wp-content/plugins/imagify/inc/common/partners.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/3rd-party.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/Traits/Media/CustomFoldersDeprecatedTrait.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/Traits/Media/NGGDeprecatedTrait.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/Traits/Media/NoopDeprecatedTrait.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/Traits/Media/WPDeprecatedTrait.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/Traits/Optimization/Process/AbstractProcessDeprecatedTrait.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-abstract-attachment.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-abstract-db-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-admin-ajax-post-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-as3cf-attachment.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-as3cf-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-assets-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-attachment.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-auto-optimization-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-enable-media-replace-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-file-attachment.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-ngg-attachment.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-ngg-dynamic-thumbnails-background-process.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-notices-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-regenerate-thumbnails-deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/classes/class-imagify-user.php create mode 100644 wp/wp-content/plugins/imagify/inc/deprecated/deprecated.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/admin-stats.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/admin-ui.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/admin.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/api.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/attachments.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/common.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/formatting.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/i18n.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/media.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/options.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/partners.php create mode 100644 wp/wp-content/plugins/imagify/inc/functions/process.php create mode 100644 wp/wp-content/plugins/imagify/inc/main.php create mode 100644 wp/wp-content/plugins/imagify/readme.txt create mode 100644 wp/wp-content/plugins/imagify/uninstall.php create mode 100644 wp/wp-content/plugins/imagify/vendor/autoload.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/ClassLoader.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/InstalledVersions.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/LICENSE create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/autoload_classmap.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/autoload_namespaces.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/autoload_psr4.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/autoload_real.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/autoload_static.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installed.json create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installed.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/.github/workflows/continuous-integration.yml create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/.github/workflows/lint.yml create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/.github/workflows/phpstan.yml create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/LICENSE create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/composer.json create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/phpstan.neon.dist create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/AglInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/AkauntingInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/GravInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/Installer.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MantisBTInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MatomoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/Plugin.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ProcessWireInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/StarbugInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/SyliusInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/WinterInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/installers/src/bootstrap.php create mode 100644 wp/wp-content/plugins/imagify/vendor/composer/platform_check.php create mode 100644 wp/wp-content/plugins/imagify/vendor/dangoodman/composer-for-wordpress/ComposerForWordpress.php create mode 100644 wp/wp-content/plugins/imagify/views/admin/admin-bar-status.php create mode 100644 wp/wp-content/plugins/imagify/views/button/compare-images.php create mode 100644 wp/wp-content/plugins/imagify/views/button/delete-webp.php create mode 100644 wp/wp-content/plugins/imagify/views/button/generate-webp.php create mode 100644 wp/wp-content/plugins/imagify/views/button/optimize-missing-sizes.php create mode 100644 wp/wp-content/plugins/imagify/views/button/optimize.php create mode 100644 wp/wp-content/plugins/imagify/views/button/processing.php create mode 100644 wp/wp-content/plugins/imagify/views/button/re-optimize.php create mode 100644 wp/wp-content/plugins/imagify/views/button/refresh-status.php create mode 100644 wp/wp-content/plugins/imagify/views/button/restore.php create mode 100644 wp/wp-content/plugins/imagify/views/button/retry-optimize.php create mode 100644 wp/wp-content/plugins/imagify/views/container/data-actions.php create mode 100644 wp/wp-content/plugins/imagify/views/input/selector.php create mode 100644 wp/wp-content/plugins/imagify/views/modal-payment.php create mode 100644 wp/wp-content/plugins/imagify/views/modal-settings-infos.php create mode 100644 wp/wp-content/plugins/imagify/views/modal-settings-partners-infos.php create mode 100644 wp/wp-content/plugins/imagify/views/modal-settings-visual-comparison.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-backup-folder-not-writable.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-bulk-optimization-complete.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-bulk-optimization-running.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-footer.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-grid-view.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-header.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-http-block-external.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-plugins-to-deactivate.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-rating.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-temporary.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-welcome-steps.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-wp-rocket.php create mode 100644 wp/wp-content/plugins/imagify/views/notice-wrong-api-key.php create mode 100644 wp/wp-content/plugins/imagify/views/page-bulk.php create mode 100644 wp/wp-content/plugins/imagify/views/page-files-list.php create mode 100644 wp/wp-content/plugins/imagify/views/page-settings.php create mode 100644 wp/wp-content/plugins/imagify/views/part-bulk-optimization-header.php create mode 100644 wp/wp-content/plugins/imagify/views/part-bulk-optimization-infos.php create mode 100644 wp/wp-content/plugins/imagify/views/part-bulk-optimization-newbie.php create mode 100644 wp/wp-content/plugins/imagify/views/part-bulk-optimization-overquota-alert.php create mode 100644 wp/wp-content/plugins/imagify/views/part-bulk-optimization-success.php create mode 100644 wp/wp-content/plugins/imagify/views/part-bulk-optimization-table-row-folder-type.php create mode 100644 wp/wp-content/plugins/imagify/views/part-bulk-optimization-table.php create mode 100644 wp/wp-content/plugins/imagify/views/part-discount-banner.php create mode 100644 wp/wp-content/plugins/imagify/views/part-documentation-link.php create mode 100644 wp/wp-content/plugins/imagify/views/part-files-list-header.php create mode 100644 wp/wp-content/plugins/imagify/views/part-rocket-ad.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-account.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-custom-folders.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-files-tree-row.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-footer.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-header.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-library.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-row-custom-folder.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-webp-missing-message.php create mode 100644 wp/wp-content/plugins/imagify/views/part-settings-webp.php create mode 100644 wp/wp-content/plugins/imagify/views/part-upsell.php create mode 100644 wp/wp-content/plugins/leadin/build/elementor.asset.php create mode 100644 wp/wp-content/plugins/leadin/build/elementor.css create mode 100644 wp/wp-content/plugins/leadin/build/elementor.css.map create mode 100644 wp/wp-content/plugins/leadin/build/elementor.js create mode 100644 wp/wp-content/plugins/leadin/build/elementor.js.map create mode 100644 wp/wp-content/plugins/leadin/build/feedback.asset.php create mode 100644 wp/wp-content/plugins/leadin/build/feedback.js create mode 100644 wp/wp-content/plugins/leadin/build/feedback.js.map create mode 100644 wp/wp-content/plugins/leadin/build/gutenberg.asset.php create mode 100644 wp/wp-content/plugins/leadin/build/gutenberg.css create mode 100644 wp/wp-content/plugins/leadin/build/gutenberg.css.map create mode 100644 wp/wp-content/plugins/leadin/build/gutenberg.js create mode 100644 wp/wp-content/plugins/leadin/build/gutenberg.js.map create mode 100644 wp/wp-content/plugins/leadin/build/leadin.asset.php create mode 100644 wp/wp-content/plugins/leadin/build/leadin.css create mode 100644 wp/wp-content/plugins/leadin/build/leadin.css.map create mode 100644 wp/wp-content/plugins/leadin/build/leadin.js create mode 100644 wp/wp-content/plugins/leadin/build/leadin.js.map create mode 100644 wp/wp-content/plugins/leadin/build/reviewBanner.asset.php create mode 100644 wp/wp-content/plugins/leadin/build/reviewBanner.js create mode 100644 wp/wp-content/plugins/leadin/build/reviewBanner.js.map create mode 100644 wp/wp-content/plugins/leadin/changelog.txt create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-da_DK.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-da_DK.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_AT.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_AT.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_CH_informal.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_CH_informal.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_DE.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_DE.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_DE_formal.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-de_DE_formal.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_AU.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_AU.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_CA.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_CA.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_GB.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_GB.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_NZ.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_NZ.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_US.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_US.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_ZA.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-en_ZA.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_AR.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_AR.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_CL.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_CL.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_CO.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_CO.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_CR.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_CR.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_ES.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_ES.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_GT.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_GT.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_MX.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_MX.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_PE.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_PE.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_VE.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-es_VE.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fi.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fi.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fr_BE.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fr_BE.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fr_CA.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fr_CA.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fr_FR.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-fr_FR.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-it_IT.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-it_IT.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-ja.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-ja.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-nb_NO.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-nb_NO.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-nl_NL.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-nl_NL.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-nn_NO.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-nn_NO.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pl_PL.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pl_PL.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_AO.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_AO.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_BR.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_BR.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_PT.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_PT.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_PT_ao90.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-pt_PT_ao90.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-sv_SE.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-sv_SE.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-zh_TW.mo create mode 100644 wp/wp-content/plugins/leadin/languages/leadin-zh_TW.po create mode 100644 wp/wp-content/plugins/leadin/languages/leadin.pot create mode 100644 wp/wp-content/plugins/leadin/leadin.php create mode 100644 wp/wp-content/plugins/leadin/license.txt create mode 100644 wp/wp-content/plugins/leadin/package.json create mode 100644 wp/wp-content/plugins/leadin/phpunit.xml.dist create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-adminconstants.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-connection.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-contentembedinstaller.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-deactivationform.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-gutenberg.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-impact.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-leadinadmin.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-links.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-menuconstants.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-noticemanager.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-pluginactionsmanager.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-reviewbanner.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-reviewcontroller.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/class-routing.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/modules/api/class-hublet-api-controller.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/modules/api/class-internal-tracking-api-controller.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/modules/api/class-portal-api-controller.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/modules/api/class-user-meta-api-controller.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/widgets/class-elementorform.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/widgets/class-elementorformselect.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/widgets/class-elementormeeting.php create mode 100644 wp/wp-content/plugins/leadin/public/admin/widgets/class-elementormeetingselect.php create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/external_link.svg create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/hubspot-form.png create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/hubspot-meetings.png create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/hubspot-team-profile.png create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/hubspot-wordmark.svg create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/hubspot.svg create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/loading-dots.svg create mode 100644 wp/wp-content/plugins/leadin/public/assets/images/sprocket.svg create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Bold.woff2 create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Light.woff2 create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Medium.woff2 create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-SemiBold.woff2 create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/fonts/hs-font.svg create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/fonts/hs-font.woff create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/leadin-bridge.css create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/leadin-feedback.css create mode 100644 wp/wp-content/plugins/leadin/public/assets/style/leadin.css create mode 100644 wp/wp-content/plugins/leadin/public/auth/class-oauth.php create mode 100644 wp/wp-content/plugins/leadin/public/auth/class-oauthcrypto.php create mode 100644 wp/wp-content/plugins/leadin/public/class-assetsmanager.php create mode 100644 wp/wp-content/plugins/leadin/public/class-leadin.php create mode 100644 wp/wp-content/plugins/leadin/public/class-pagehooks.php create mode 100644 wp/wp-content/plugins/leadin/public/data/class-filters.php create mode 100644 wp/wp-content/plugins/leadin/public/data/class-portal-options.php create mode 100644 wp/wp-content/plugins/leadin/public/data/class-user-metadata.php create mode 100644 wp/wp-content/plugins/leadin/public/data/class-user.php create mode 100644 wp/wp-content/plugins/leadin/public/includes/api-loader.php create mode 100644 wp/wp-content/plugins/leadin/public/modules/api/class-base-api-controller.php create mode 100644 wp/wp-content/plugins/leadin/public/modules/api/class-healthcheck-api-controller.php create mode 100644 wp/wp-content/plugins/leadin/public/utils/class-queryparameters.php create mode 100644 wp/wp-content/plugins/leadin/public/utils/class-requestutils.php create mode 100644 wp/wp-content/plugins/leadin/public/utils/class-shortcoderenderutils.php create mode 100644 wp/wp-content/plugins/leadin/public/utils/class-versions.php create mode 100644 wp/wp-content/plugins/leadin/public/wp/class-page.php create mode 100644 wp/wp-content/plugins/leadin/readme.md create mode 100644 wp/wp-content/plugins/leadin/readme.txt create mode 100644 wp/wp-content/plugins/leadin/scripts/api/wordpressApiClient.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/constants/defaultFormOptions.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/constants/leadinConfig.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/constants/selectors.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/Common/ConnectPluginBanner.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorBanner.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorButton.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorWrapper.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/ElementorFormSelect.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormControlController.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormWidgetController.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/hooks/useForms.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/registerFormWidget.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingControlController.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingWidgetController.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/registerMeetingWidget.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/elementor/elementorWidget.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/entries/app.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/entries/elementor.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/entries/feedback.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/entries/gutenberg.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/entries/reviewBanner.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/feedback/ThickBoxModal.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/feedback/feedbackFormApi.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/Common/CalendarIcon.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SidebarSprocketIcon.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SprocketIcon.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormBlockSave.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/registerFormBlock.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/Sidebar/contentType.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UIImage.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/IframeErrorPage.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/constants.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/core/CoreMessages.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/forms/FormsMessages.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/index.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/plugin/PluginMessages.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/proxy/ProxyMessages.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/messageMiddleware.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/renderIframeApp.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/useAppEmbedder.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/iframe/useBackgroundApp.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/lib/Raven.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Common/AsyncSelect.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Common/ErrorHandler.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Common/HubspotWrapper.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Common/LoadingBlock.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Form/FormEdit.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelect.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelector.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Form/PreviewForm.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useCreateFormFromTemplate.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useForms.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useFormsScript.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingController.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingEdit.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingSelector.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingWarning.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingsContext.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/PreviewMeeting.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/constants.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useCurrentUserFetch.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetings.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsFetch.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsScript.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIAlert.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIButton.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIContainer.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIOverlay.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpacer.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpinner.tsx create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/UIComponents/colors.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/enums/connectionStatus.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/enums/loadState.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/shared/types.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/utils/appUtils.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/utils/backgroundAppUtils.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/utils/contentEmbedInstaller.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/utils/iframe.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/utils/queryParams.ts create mode 100644 wp/wp-content/plugins/leadin/scripts/utils/withMetaData.ts create mode 100644 wp/wp-content/plugins/leadin/uninstall.php create mode 100644 wp/wp-content/plugins/leadin/vendor/autoload.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/ClassLoader.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/InstalledVersions.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/LICENSE create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/autoload_classmap.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/autoload_namespaces.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/autoload_psr4.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/autoload_real.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/autoload_static.php create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/installed.json create mode 100644 wp/wp-content/plugins/leadin/vendor/composer/installed.php create mode 100644 wp/wp-content/plugins/maintenance-mode/maintenance-mode.php create mode 100644 wp/wp-content/plugins/maintenance-mode/maintenance.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/LICENSE.txt create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/class-hubwoo-admin.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin-global.css create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin.css create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/jquery-ui.css create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/jquery-ui.min.css create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Demo.svg create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Documentation.svg create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Support.svg create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/checked.png create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/congo.jpg create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/contact.png create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/deal.png create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/hubspot-pricing.png create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/datatable.js create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin-global.js create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin.js create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/deactivation-screen.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-abncart.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-add-ons.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-automation.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-deals.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-general-settings.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-logs.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-main-template.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-overview.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-support.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-sync-contacts.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-connection-setup.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-grp-pr-setup.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-list-setup.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-pipeline-setup.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-sync.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/changelog.txt create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-activator.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-ajax-handler.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-csv-handler.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-deactivator.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-i18n.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-loader.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-rfm-configuration.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconnectionmananager.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconst.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoocontactproperties.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoocustomer.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoodatasync.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommobject.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommproperties.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommpropertycallbacks.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooerrorhandling.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooguestordersmanager.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooobjectproperties.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoopropertycallbacks.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/classes/class-hubwooenum.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce-en_US.mo create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce-en_US.po create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce.mo create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce.pot create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/makewebbetter-hubspot-for-woocommerce.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/public/class-hubwoo-public.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/public/index.php create mode 100644 wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/readme.txt create mode 100644 wp/wp-content/plugins/relevanssi/changelog.txt create mode 100644 wp/wp-content/plugins/relevanssi/delete.png create mode 100644 wp/wp-content/plugins/relevanssi/languages/relevanssi-fr_CA.mo create mode 100644 wp/wp-content/plugins/relevanssi/languages/relevanssi-fr_CA.po create mode 100644 wp/wp-content/plugins/relevanssi/lib/admin-ajax.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/admin_scripts.js create mode 100644 wp/wp-content/plugins/relevanssi/lib/admin_scripts_free.js create mode 100644 wp/wp-content/plugins/relevanssi/lib/admin_styles.css create mode 100644 wp/wp-content/plugins/relevanssi/lib/class-relevanssi-taxonomy-walker.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/common.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/acf.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/aioseo.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/avada.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/bricks.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/elementor.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/fibosearch.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/groups.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/gutenberg.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/jetsmartfilters.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/memberpress.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/members.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/ninjatables.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/oxygen.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/paidmembershippro.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/polylang.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/pretty-links.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/product-gtin-ean-upc-isbn-for-woocommerce.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/rankmath.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/restrictcontentpro.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/seoframework.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/seopress.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/simplemembership.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/tablepress.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/useraccessmanager.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/woocommerce.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/wp-file-download.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/wp-members.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/wp-search-suggest.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/wpjvpostreadinggroups.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/wpml.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/compatibility/yoast-seo.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/contextual-help.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/debug.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/didyoumean.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/excerpts-highlights.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/indexing.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/init.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/install.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/interface.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/log.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/options.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/phrases.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/privacy.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/search-query-restrictions.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/search-tax-query.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/search.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/shortcodes.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/sorting.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/stopwords.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/attachments-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/debugging-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/excerpts-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/indexing-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/logging-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/overview-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/redirects-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/search-page.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/searching-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/stopwords-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/tabs/synonyms-tab.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/uninstall.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/user-searches.php create mode 100644 wp/wp-content/plugins/relevanssi/lib/utils.php create mode 100644 wp/wp-content/plugins/relevanssi/readme.txt create mode 100644 wp/wp-content/plugins/relevanssi/relevanssi.php create mode 100644 wp/wp-content/plugins/relevanssi/relevanssi.po create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_CN create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_TW create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.cs_CZ create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.de_DE create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_GB create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_US create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.es_ES create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.fi create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.fr_FR create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.it_IT create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.pl_PL create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.pt_BR create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.pt_PT create mode 100644 wp/wp-content/plugins/relevanssi/stopwords/stopwords.ru_RU create mode 100644 wp/wp-content/plugins/relevanssi/uninstall.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/banner-1544x500.jpg create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/banner-772x250.jpg create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/consent-management-platform.svg create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/finished-step.png create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/icon-128x128.jpg create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/icon-256x256.jpg create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/inline-setup-logo.png create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/inline-share-buttons.svg create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/screenshot-1.png create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/screenshot-2.png create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/screenshot-3.png create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/sharethis-setup-logo.png create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/st-loading.gif create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/sticky-setup-logo.png create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/assets/sticky-share-buttons.svg create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/css/admin.css create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/css/meta-box.css create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/css/mu-style.css create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/instance.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/js/admin.js create mode 100755 wp/wp-content/plugins/sharethis-share-buttons/js/blocks.js create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/js/meta-box.js create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/js/set-credentials.js create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/php/class-button-widget.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/php/class-minute-control.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin-base.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/php/class-share-buttons.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/readme.txt create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/sharethis-share-buttons.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/exclusions.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/gdpr-config.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/purposes.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/minute-control/meta-box.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/button-config.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/enable-buttons.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/list.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/onoff-buttons.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/share-button-settings.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/shortcode-templatecode.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/ssb.php create mode 100644 wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/tabs.php create mode 100644 wp/wp-content/plugins/visual-web-optimizer/readme.txt create mode 100644 wp/wp-content/plugins/visual-web-optimizer/visual-website-optimizer.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/siblings/block.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/subpages/block.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290.css create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/images/cornerstone-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/images/inclusive-language-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/ai-generator-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/blocks-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/dynamic-blocks-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/frontend-inspector-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/introductions-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/manage-ai-consent-button-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-premium-assessments-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-text-formality-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/workouts-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-admin-redirects-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-custom-fields-plugin-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-draft-js-plugins-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-elementor-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-metabox-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-quickedit-notification-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-gutenberg-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-prominent-words-indexation-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-social-metadata-previews-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast/social-metadata-previews-2290.min.js create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/changelog.txt create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/siblings-block.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/subpages-block.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/custom-fields-plugin.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-csv.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-query.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-presenter-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-query-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-term-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-term-query.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/metabox-link-suggestions.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/multi-keyword.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/post-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-asset-js-l10n.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-assets.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-expose-shortlinks.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-import-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-javascript-strings.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-keyword-export-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-metabox.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-option.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-support.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-filter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-query.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-support.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-unindexed-post-query.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-versioning.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-endpoint.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-export-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-option.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-register-capabilities.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/premium-stale-cornerstone-content-filter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/product-premium.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect-undo-endpoint.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/executable-redirect.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-apache-exporter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-csv-exporter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-exporter-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-file-exporter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-htaccess-exporter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-nginx-exporter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-option-exporter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-abstract-loader.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-csv-loader.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-htaccess-loader.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-loader-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-redirection-loader.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-safe-redirect-loader.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-simple-301-redirect-loader.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-form-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-page-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-presenter-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-quick-edit-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-settings-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-tab-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-table-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-ajax.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-file-util.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formats.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-htaccess-util.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-import-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-importer.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-option.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-page.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-sitemap-filter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-table.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-types.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-upgrade.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-url-formatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-util.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-validator.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-abstract-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-accessible-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-endpoint-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-presence-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-relative-origin-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-self-redirect-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-subdirectory-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-uniqueness-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-validation-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-form.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-quick-edit.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-plain.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-regex.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-settings.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/social-previews.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/term-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/upgrade-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/validation-error.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/validation-result.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/validation-warning.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/views/export-keywords.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/views/export-redirects.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/views/import-redirects.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/views/thank-you.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/classes/watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-premium-requirement.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-base-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-command-namespace.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-create-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-delete-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-follow-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-has-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-list-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-update-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/index.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ar.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-bn_BD.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ca.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-cs_CZ.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-da_DK.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-de_DE.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-el.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_AU.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_CA.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_GB.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_NZ.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_ES.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_MX.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fa_IR.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fi.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fr_FR.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-he_IL.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hi_IN.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hu_HU.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-id_ID.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-it_IT.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ja.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nb_NO.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_BE.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_NL.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pl_PL.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_BR.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_PT.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ro_RO.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ru_RU.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sk_SK.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sr_RS.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sv_SE.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-tr_TR.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-uk.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-vi.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-zh_CN.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs.json create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/license.txt create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/premium.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/readme.txt create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/actions/ai-generator-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/actions/link-suggestions-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/complete-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/content-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/save-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/addon-installer.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/ai-editor-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/algolia-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/cornerstone-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/edd-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/inclusive-language-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/term-overview-or-ajax-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/yoast-admin-or-introductions-route-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/config/badge-group-names.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20190715101200_WpYoastPremiumImprovedInternalLinking.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20210827093024_AddIndexOnIndexableIdAndStem.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/database/migration-runner-premium.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/forbidden-property-mutation-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/bad-request-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/forbidden-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/internal-server-error-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/not-found-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/payment-required-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/remote-request-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/request-timeout-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/service-unavailable-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/too-many-requests-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/unauthorized-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/wp-request-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/functions.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/draft-js-emoji-picker.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/externals.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/plugin.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/generated/container.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/helpers/ai-generator-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/helpers/current-page-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/helpers/prominent-words-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/helpers/version-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/initializers/index-now-key.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/initializers/introductions-initializer.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/initializers/plugin.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/initializers/redirect-handler.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/initializers/woocommerce.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/initializers/wp-cli-initializer.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/abstract-opengraph-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-consent-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-generator-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-column-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-taxonomy-column-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-column-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-filter-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-taxonomy-column-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/keyword-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/metabox-formatter-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/plugin-links-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/indexing-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/metabox-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/related-keyphrase-filter-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/replacement-variables-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/settings-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/thank-you-page-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/update-premium-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/user-profile-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/workouts-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/alerts/ai-generator-tip-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/blocks/estimated-reading-time-block.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/blocks/related-links-block.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/cleanup-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/front-end/robots-txt-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/frontend-inspector.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/index-now-ping.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/missing-indexables-count-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-author-archive.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-date-archive.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-post-type.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-posttype-archive.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-term-archive.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/organization-schema-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/publishing-principles-schema-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/ai-generator-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/workouts-routes-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/algolia.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/edd.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-premium.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-preview.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/mastodon.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/translationspress.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/wincher-keyphrases.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/upgrade-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/user-profile-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/watchers/prominent-words-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/integrations/watchers/stale-cornerstone-content-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/introductions/application/ai-generate-titles-and-descriptions-introduction.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/main.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/models/prominent-words.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/checkmark-icon-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/cross-icon-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/icon-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/presenters/mastodon-link-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/repositories/prominent-words-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/routes/link-suggestions-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/routes/prominent-words-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/routes/workouts-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/surfaces/helpers-surface.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/user-meta/framework/additional-contactmethods/mastodon.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/user-meta/user-interface/additional-contactmethods-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/src/wordpress/wrapper.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/autoload.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/ClassLoader.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/InstalledVersions.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/LICENSE create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_classmap.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_files.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_namespaces.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_psr4.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_real.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_static.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/installed.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/platform_check.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/LICENSE create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/default.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/version.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configuration.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/EmptyProperty.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/InvalidOperatorType.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/InvalidType.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/InvalidVersionComparisonString.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Facades/wordpress.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Host.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Interfaces/DismissStorage.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Interfaces/Listener.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Interfaces/Message.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Interfaces/MessagePresenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Interfaces/Requirement.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Interfaces/VersionDetector.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessageDismisser.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessageFormatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/BasicMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/HostMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/NullMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/UpgradePhpMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessagesManager.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/RequirementsChecker.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/VersionRequirement.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPDismissOption.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPMessageDismissListener.php create mode 100644 wp/wp-content/plugins/wordpress-seo-premium/wp-seo-premium.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/admin-settings-changed-listener.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/ajax.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-abstract-capability-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-factory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-vip.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-wp.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-register-capabilities.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-analysis-worker-location.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-dev-server-location.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-location.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-seo-location.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-editor-specific-replace-vars.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-gutenberg-compatibility-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-init.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-recommended-replace-vars.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin-utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-admin.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-asset.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-collector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-config.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-database-proxy.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-export.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-expose-shortlinks.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-gutenberg-compatibility.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-meta-columns.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-my-yoast-proxy.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-option-tab.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-paper-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-premium-popup.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-premium-upsell-admin-block.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-remote-request.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-schema-person-upgrade-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-suggested-plugins.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-wincher-dashboard-widget.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-columns.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-form.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-input-validation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-admin.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-settings-api.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notifications.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-file-size.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-statistics.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/exceptions/class-file-size-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/filters/class-abstract-post-filter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/filters/class-cornerstone-filter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/google_search_console/class-gsc.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-display.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/google_search_console/views/gsc-redirect-nopremium.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/class-import-detector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/class-import-plugin.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/class-import-settings.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/class-import-status.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-abstract-plugin-importer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo-v4.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-greg-high-performance-seo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-headspace.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-jetpack.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-platinum-seo-pack.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-premium-seo-pack.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-rankmath.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seo-framework.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seopressor.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-smartcrawl.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-squirrly.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-ultimate-seo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-woothemes-seo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wp-meta-seo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wpseo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-importers.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/index.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/interface-collection.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/interface-installable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/listeners/class-listener.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/menu/class-admin-menu.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/menu/class-base-menu.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/menu/class-menu.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/menu/class-network-admin-menu.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-editor.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-field.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/menu/class-submenu-capability-normalize.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-abstract-sectioned-metabox-tab.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-inclusive-language.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-readability.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsible.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsibles-section.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-null-tab.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-additional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-inclusive-language.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-react.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-readability.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-section.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-tab.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/notifiers/dismissible-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/notifiers/interface-notification-handler.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/pages/dashboard.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/pages/licenses.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/pages/network.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/pages/redirects.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/pages/tools.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/roles/class-abstract-role-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/roles/class-register-roles.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager-factory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager-wp.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/services/class-file-size.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/statistics/class-statistics-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/statistics/class-statistics-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-addon-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-default-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-plugin-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-server-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-settings-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-theme-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggle.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggles.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-integration-toggles.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/form/select.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/js-templates-primary-term.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/licenses.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/paper-collapsible.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-errors.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-template.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-warnings.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/redirects.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/first-time-configuration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/crawl-settings.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/features.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/general.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/integrations.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/restore-site.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/views/user-profile.php create mode 100644 wp/wp-content/plugins/wordpress-seo/admin/watchers/class-slug-change-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/blocks/dynamic-blocks/breadcrumbs/block.json create mode 100644 wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/faq/block.json create mode 100644 wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/how-to/block.json create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/support-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/support-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl create mode 100644 wp/wp-content/plugins/wordpress-seo/images/Yoast_SEO_negative_icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/ai_for_seo_icon_my_yoast.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/all_around_seo.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/block_editor.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/copywriting.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/crawlability.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/ecommerce.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/hosting_and_server.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/keyword_research.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/local.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/multilingual.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/seo_for_beginners.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/seo_for_wp.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/site_structure.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/structured_data_for_beginners.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/understanding_structured_data.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/academy/wp_for_beginners.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/acf-logo.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/admin_bar.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/ai-fix-assessments-thumbnail.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/ai-generator-preview.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/ai-generator.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/alert-error-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/alert-info-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/alert-success-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/alert-warning-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/cornerstone_content.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/error-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/inclusive_language_analysis.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/index.php create mode 100644 wp/wp-content/plugins/wordpress-seo/images/indexables_3_left_bubble_optm.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/indexnow.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/insights.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/link-in-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/link-out-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/link_suggestions.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/local_plugin_assistant.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_man_1_optim.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_1_optim.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_2_optim.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/new-to-configuration-notice.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/news_plugin_assistant.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/open_graph.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/plugin_subscription.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/question-mark.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/readability-icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/readability_analysis.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/rest_api.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/seo_analysis.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/slack_sharing.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/stale-cornerstone-content-in-yoast-seo.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/succes_marieke_bubble_optm.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/support-team.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/support/github.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/support/help_center.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/support/support_forums.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/text_link_counter.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/twitter_card.png create mode 100644 wp/wp-content/plugins/wordpress-seo/images/video_plugin_assistant.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/woo_plugin_assistant.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/images/xml_sitemaps.png create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-addon-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-my-yoast-api-request.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-post-type.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-rewrite.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-upgrade-history.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-upgrade.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-admin-bar-menu.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-content-images.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-fields.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-taxonomies.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-image-utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replacement-variable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-shortlinker.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/class-yoast-dynamic-rewrites.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/date-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/exceptions/class-myyoast-bad-request-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/exceptions/class-myyoast-invalid-json-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/index.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/interface-wpseo-wordpress-ajax-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/interface-wpseo-wordpress-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/language-utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-ms.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/wpseo-functions-deprecated.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/wpseo-functions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/index.php create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/academy.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/addon-installation.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/admin-global.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/admin-modules.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/analysis-worker.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/api-client.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/block-editor.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/bulk-editor.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/classic-editor.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/crawl-settings.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/dashboard-widget.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/dynamic-blocks.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/edit-page.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/editor-modules.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/elementor.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals-components.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals-contexts.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals-redux.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysis.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysisReport.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/chart.js.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/componentsNew.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/draftJs.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/featureFlag.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/helpers.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/jed.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/propTypes.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/reactHelmet.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/redux.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/reduxJsToolkit.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/replacementVariableEditor.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/searchMetadataPreviews.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/socialMetadataForms.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/styleGuide.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/styledComponents.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/externals/uiLibrary.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/faq-block.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/filter-explanation.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/first-time-configuration.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/frontend-inspector-resources.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/help-scout-beacon.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/how-to-block.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/import.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/indexation.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/installation-success.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/integrations-page.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/introductions.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/ar.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/ca.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/cs.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/de.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/default.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/el.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/en.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/es.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/fa.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/fr.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/he.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/hu.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/id.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/it.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/ja.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/nb.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/nl.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/pl.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/pt.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/ru.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/sk.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/sv.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/languages/tr.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/network-admin.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/new-settings.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/post-edit.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/quick-edit-handler.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/react-select.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/redirect-old-features-tab.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/reindex-links.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/settings.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/support.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/term-edit.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/used-keywords-assessment.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/wincher-dashboard-widget.js create mode 100644 wp/wp-content/plugins/wordpress-seo/js/dist/workouts.js create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/abstract-main.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/dependency-injection/container-registry.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/migrations/adapter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/migrations/column.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/migrations/constants.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/migrations/migration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/migrations/table.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/model.php create mode 100644 wp/wp-content/plugins/wordpress-seo/lib/orm.php create mode 100644 wp/wp-content/plugins/wordpress-seo/license.txt create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_SEO_Icon.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_icon_kader.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/algolia-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/connection-assistant.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/edd-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/elementor-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/g2_logo_white_optm.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-arrow-down.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-facebook.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-twitter.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_1_left_bubble_optm.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_2_left_bubble_optm.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-integration-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/logo-g2-white.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/mastodon-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/motivated_bubble_woman_1_optim.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/semrush-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/ssp-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-half.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-star.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/succes_marieke_bubble_optm.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/tec-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/wincher-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/woocommerce-seo-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/wordproof-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/wp-recipe-maker-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/x-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast-seo-simple-logo.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast_loading_spinner.svg create mode 100644 wp/wp-content/plugins/wordpress-seo/readme.txt create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-activate-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-install-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/alert-dismissal-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/configuration/first-time-configuration-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/abstract-aioseo-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/abstract-aioseo-settings-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-cleanup-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-custom-archive-settings-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-default-archive-settings-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-general-settings-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posts-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posttype-defaults-settings-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-taxonomy-settings-importing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-validate-data-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/deactivate-conflicting-plugins-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/importing-action-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/importing/importing-indexation-action-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexables/indexable-head-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-indexing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-link-indexing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-general-indexation-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-indexing-complete-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-indexation-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-type-archive-indexation-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-term-indexation-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexation-action-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexing-complete-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexing-prepare-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/limited-indexing-action-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/post-link-indexing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/indexing/term-link-indexing-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/integrations-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-login-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-options-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-phrases-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-account-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-keyphrases-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-login-action.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/analytics/application/missing-indexables-collector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/analytics/application/to-be-cleaned-indexables-collector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-bucket.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-count.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-bucket.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-count.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/analytics/user-interface/last-completed-indexation-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-author-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-date-archive-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-hierarchy-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-home-page-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-link-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-type-archive-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-social-image-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-system-page-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/indexable-term-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/builders/primary-term-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/commands/cleanup-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/commands/command-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/commands/index-command.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/addon-installation-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/doing-post-quick-edit-save-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/estimated-reading-time-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/licenses-page-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/non-network-admin-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/post-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/posts-overview-or-ajax-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/yoast-admin-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/attachment-redirections-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/conditional-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/deactivating-yoast-seo-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/development-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/feature-flag-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/front-end-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/get-request-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/headless-rest-endpoints-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/import-tool-selected-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/jetpack-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/migrations-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/new-settings-ui-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/news-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/no-conditionals-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/no-tool-selected-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/non-multisite-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/not-admin-ajax-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/open-graph-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-active-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-inactive-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/primary-category-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/robots-txt-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/semrush-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/settings-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/should-index-links-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/text-formality-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/elementor-activated-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/elementor-edit-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/jetpack-boost-active-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/jetpack-boost-not-premium-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/polylang-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/translatepress-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/w3-total-cache-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/wpml-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/wpml-wpseo-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/traits/admin-conditional-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/updated-importer-framework-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/user-can-edit-users-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/user-can-manage-wpseo-options-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/user-can-publish-posts-and-pages-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/user-edit-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/user-profile-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/web-stories-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-automatically-track-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-token-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/woocommerce-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/wp-cron-enabled-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/wp-robots-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/xmlrpc-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/yoast-admin-and-dashboard-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/conditionals/yoast-tools-page-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/badge-group-names.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/conflicting-plugins.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/indexing-reasons.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migration-status.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151840_WpYoastIndexable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151841_WpYoastPrimaryTerm.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20190529075038_WpYoastDropIndexableMetaTableIfExists.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20191011111109_WpYoastIndexableHierarchy.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200408101900_AddCollationToTables.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200420073606_AddColumnsToIndexables.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428123747_BreadcrumbTitleAndHierarchyReset.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428194858_ExpandIndexableColumnLengths.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200429105310_TruncateIndexableTables.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430075614_AddIndexableObjectIdAndTypeIndex.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430150130_ClearIndexableTables.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200507054848_DeleteDuplicateIndexables.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200513133401_ResetIndexableHierarchyTable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200609154515_AddHasAncestorsColumn.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200616130143_ReplacePermalinkHashIndex.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200617122511_CreateSEOLinksTable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200702141921_CreateIndexableSubpagesIndex.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200728095334_AddIndexesForProminentWordsOnIndexables.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201202144329_AddEstimatedReadingTime.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216124002_ExpandIndexableIDColumnLengths.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216141134_ExpandPrimaryTermIDColumnLengths.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20210817092415_AddVersionColumnToIndexables.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20211020091404_AddObjectTimestamps.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/migrations/20230417083836_AddInclusiveLanguageScore.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/oauth-client.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/researcher-languages.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/schema-ids.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/schema-types.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/semrush-client.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/wincher-client.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/config/wincher-pkce-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-dismiss-notifications.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-watcher-actions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/user-interface/content-type-visibility-dismiss-new-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/context/meta-tags-context.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/admin/class-customizer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/frontend/breadcrumbs.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/frontend/frontend.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/index.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/conditionals/third-party/wordproof-integration-active-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/conditionals/third-party/wordproof-plugin-inactive-conditional.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/config/wordproof-app-config.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/config/wordproof-translations.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/helpers/wordproof-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/admin/disable-concatenate-scripts-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/admin/old-premium-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/duplicate-post-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wincher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof-integration-toggle.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/deprecated/src/introductions/application/ai-generate-titles-and-descriptions-introduction-upsell.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/application/analysis-features/enabled-analysis-features-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/application/integrations/integration-information-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/post-seo-information-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/term-seo-information-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/application/site/website-information-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-feature-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-feature.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-features-list.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/integrations/integration-data-provider-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/description.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/keyphrase.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/seo-plugin-data-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/social.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/title.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/cornerstone-content.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/inclusive-language-analysis.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/jetpack-markdown.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/multilingual.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/semrush.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/wincher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/keyphrase-analysis.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/previously-used-keyphrase.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/readability-analysis.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/description-data-provider-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/keyphrase-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/abstract-post-seo-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/description-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/keyphrase-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/social-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/title-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/social-data-provider-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/abstract-term-seo-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/description-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/keyphrase-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/social-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/title-data-provider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/title-data-provider-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/base-site-information.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/post-site-information.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/term-site-information.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/editors/framework/word-form-recognition.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/elementor/infrastructure/request-post.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/addon-activation-error-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/addon-already-installed-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/addon-installation-error-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/user-cannot-activate-plugins-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/user-cannot-install-plugins-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/forbidden-property-mutation-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/importing/aioseo-validation-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/author-not-built-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/indexable-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/invalid-term-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/not-built-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/post-not-built-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/post-not-found-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/post-type-not-built-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/source-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/term-not-built-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/indexable/term-not-found-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/missing-method.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/oauth/authentication-failed-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/oauth/tokens/empty-property-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/oauth/tokens/empty-token-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/exceptions/oauth/tokens/failed-storage-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/functions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generated/assets/externals.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generated/assets/languages.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generated/assets/plugin.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generated/container.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/breadcrumbs-generator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/generator-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/open-graph-image-generator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/open-graph-locale-generator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema-generator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/abstract-schema-piece.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/article.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/author.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/breadcrumb.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/faq.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/howto.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/main-image.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/organization.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/person.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/webpage.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/schema/website.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/generators/twitter-image-generator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/aioseo-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/asset-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/attachment-cleanup-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/author-archive-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/blocks-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/capability-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/crawl-cleanup-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/curl-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/current-page-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/date-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/environment-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/first-time-configuration-notice-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/home-url-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/image-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/import-cursor-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/import-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-to-postmeta-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/indexing-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/language-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/meta-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/notification-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/open-graph/image-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/open-graph/values-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/options-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/pagination-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/permalink-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/post-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/post-type-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/primary-term-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/product-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/redirect-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/request-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/require-file-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/robots-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/robots-txt-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/sanitization-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/schema/article-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/schema/html-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/schema/id-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/schema/image-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/schema/language-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/schema/replace-vars-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/score-icon-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/short-link-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/site-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/social-profiles-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/string-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/taxonomy-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/twitter/image-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/url-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/user-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/wincher-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/woocommerce-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/wordpress-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/helpers/wpdb-helper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/initializers/crawl-cleanup-permalinks.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/initializers/disable-core-sitemaps.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/initializers/initializer-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/initializers/migration-runner.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/initializers/woocommerce.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/abstract-exclude-post-type.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/academy-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/activation-cleanup-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/dialog-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/installation-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/admin-columns-cache-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/background-indexing-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/crawl-settings-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/cron-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/deactivated-premium-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-notice-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/fix-news-dependencies-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/health-check-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/helpscout-beacon.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/import-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexables-exclude-taxonomy-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-notification-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-tool-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/installation-success-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/integrations-page.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/link-count-columns-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/menu-badge-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/migration-error-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/old-configuration-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/redirect-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/redirects-page-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/unsupported-php-version-notice.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/admin/workouts-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/abstract-dismissable-alert.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/black-friday-product-editor-checklist-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/black-friday-promotion-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/black-friday-sidebar-checklist-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/jetpack-boost-pre-publish.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/trustpilot-review-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/webinar-promo-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/abstract-dynamic-block-v3.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/abstract-dynamic-block.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/block-categories.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/breadcrumbs-block.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/structured-data-blocks.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/breadcrumbs-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/cleanup-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/estimated-reading-time.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/exclude-attachment-post-type.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/exclude-oembed-cache-post-type.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/feature-flag-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/backwards-compatibility.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/category-term-description.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/comment-link-fixer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-basic.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-rss.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-searches.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/feed-improvements.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/force-rewrite-title.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/handle-404.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/indexing-controls.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/open-graph-oembed.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/redirects.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/robots-txt-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/rss-footer-embed.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/schema-accessibility-feature.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/wp-robots-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/integration-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/primary-category.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/settings-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/support-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/amp.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/bbpress.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/elementor.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/exclude-elementor-post-types.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/exclude-woocommerce-post-types.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/jetpack.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/w3-total-cache.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/web-stories-post-edit.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/web-stories.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wincher-publish.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-permalinks.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-post-edit.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml-wpseo-notification.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/uninstall-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/addon-update-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/auto-update-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-ancestor-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-attachment-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-archive-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-category-permalink-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-date-archive-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-home-page-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-homeurl-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-permalink-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-meta-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-archive-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-change-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-static-home-page-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-system-page-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-taxonomy-change-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-term-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-titles-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-wpseo-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-category-quick-edit-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-term-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/search-engines-discouraged-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/woocommerce-beta-editor-watcher.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/integrations/xmlrpc.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/application/ai-fix-assessments-upsell.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/application/current-page-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/application/introductions-collector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/application/user-allowed-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/application/version-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introduction-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introduction-item.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introductions-bucket.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/domain/invalid-user-id-exception.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/infrastructure/introductions-seen-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/infrastructure/wistia-embed-permission-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/readme.md create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-seen-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/wistia-embed-permission-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/loadable-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/loader.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/loggers/logger.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/main.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/memoizers/meta-tags-context-memoizer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/memoizers/presentation-memoizer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/models/indexable-extension.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/models/indexable-hierarchy.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/models/indexable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/models/primary-term.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/models/seo-links.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/models/seo-meta.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/abstract-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/archive-adjacent-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-author-archive-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-date-archive-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-error-page-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-home-page-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-archive-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-search-result-page-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-home-page-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-posts-page-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-term-archive-presentation.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-tag-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/alert-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/badge-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/beta-badge-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/help-link-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-error-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-failed-notification-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-list-item-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-notification-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/light-switch-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/meta-fields-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/migration-error-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/notice-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/premium-badge-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/search-engines-discouraged-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/sidebar-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/admin/woocommerce-beta-editor-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/breadcrumbs-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/canonical-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-close-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-open-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/meta-author-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/meta-description-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-author-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-modified-time-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-published-time-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-publisher-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/description-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/image-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/locale-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/site-name-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/title-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/type-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/url-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/rel-next-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/rel-prev-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/robots-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/robots-txt-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/schema-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/score-icon-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/slack/enhanced-data-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/title-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/card-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/creator-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/description-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/image-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/site-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/title-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/url-list-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/baidu-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/bing-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/google-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/pinterest-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/yandex-presenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/promotions/application/promotion-manager-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/promotions/application/promotion-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/promotions/domain/abstract-promotion.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/promotions/domain/black-friday-checklist-promotion.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/promotions/domain/black-friday-promotion.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/promotions/domain/promotion-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/promotions/domain/time-interval.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-cleanup-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-hierarchy-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/repositories/primary-term-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/repositories/seo-links-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/abstract-action-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/abstract-indexation-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/alert-dismissal-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/first-time-configuration-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/importing-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/indexables-head-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/indexing-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/integrations-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/meta-search-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/route-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/semrush-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/supported-features-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/wincher-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/workouts-route.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/routes/yoast-head-rest-field.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-check.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-reports.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-runner.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/health-check.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-check.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-reports.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-runner.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/myyoast-api-request-factory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-check.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-reports.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-runner.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-check.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-reports.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-runner.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder-factory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/reports-trait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/health-check/runner-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-replacevar-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-provider-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-transformer-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-social-images-provider-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/importing/conflicting-plugins-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/importing/importable-detector-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/services/indexables/indexable-version-manager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/surfaces/classes-surface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/surfaces/helpers-surface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/surfaces/meta-surface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/surfaces/open-graph-helpers-surface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/surfaces/schema-helpers-surface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/surfaces/twitter-helpers-surface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/surfaces/values/meta.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/application/additional-contactmethods-collector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/application/cleanup-service.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/application/custom-meta-collector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/domain/additional-contactmethod-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/domain/custom-meta-interface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/facebook.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/instagram.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/linkedin.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/myspace.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/pinterest.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/soundcloud.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/tumblr.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/wikipedia.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/x.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/youtube.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/author-metadesc.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/author-title.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/content-analysis-disable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/inclusive-language-analysis-disable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/keyword-analysis-disable.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/noindex-author.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/infrastructure/cleanup-repository.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/additional-contactmethods-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/cleanup-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/custom-meta-integration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/user-profiles-additions/user-interface/user-profiles-additions-ui.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/images.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/indexables/indexable-builder-versions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/oauth/oauth-token.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/open-graph/images.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/robots/directive.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent-list.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/values/twitter/images.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/wordpress/wrapper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/wrappers/wp-query-wrapper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/wrappers/wp-remote-handler.php create mode 100644 wp/wp-content/plugins/wordpress-seo/src/wrappers/wp-rewrite-wrapper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/autoload.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/ClassLoader.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/InstalledVersions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/LICENSE create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_classmap.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_files.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_namespaces.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_psr4.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_real.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_static.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/installed.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/composer/platform_check.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/CHANGELOG.md create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/LICENSE create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/default.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/version.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configuration.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/EmptyProperty.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/InvalidOperatorType.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/InvalidType.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/InvalidVersionComparisonString.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Facades/wordpress.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Host.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Interfaces/DismissStorage.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Interfaces/Listener.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Interfaces/Message.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Interfaces/MessagePresenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Interfaces/Requirement.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Interfaces/VersionDetector.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessageDismisser.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessageFormatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/BasicMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/HostMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/NullMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/UpgradePhpMessage.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessagesManager.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/RequirementsChecker.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/VersionRequirement.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPDismissOption.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPMessageDismissListener.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizerInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Client.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/ClientTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJar.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SetCookie.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/BadResponseException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ClientException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ConnectException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/GuzzleException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/RequestException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ServerException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/TransferException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlHandler.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/EasyHandle.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/MockHandler.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/Proxy.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/StreamHandler.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/HandlerStack.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatter.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatterInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Middleware.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Pool.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RedirectMiddleware.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RequestOptions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RetryMiddleware.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/TransferStats.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/functions.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/functions_include.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/AggregateException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/CancellationException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Coroutine.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Create.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Each.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/EachPromise.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/FulfilledPromise.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Is.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Promise.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/PromiseInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/PromisorInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/RejectedPromise.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/RejectionException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueue.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueueInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/AppendStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/BufferStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/CachingStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/DroppingStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Exception/MalformedUriException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/FnStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Header.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/HttpFactory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/InflateStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LazyOpenStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LimitStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Message.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MessageTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MimeType.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MultipartStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/NoSeekStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/PumpStream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Query.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Request.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Response.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Rfc7230.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/ServerRequest.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Stream.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamDecoratorTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamWrapper.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UploadedFile.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Uri.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriComparator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriNormalizer.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriResolver.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Utils.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AbstractGrant.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AuthorizationCode.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/ClientCredentials.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/GrantFactory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Password.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/RefreshToken.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericProvider.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericResourceOwner.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/ResourceOwnerInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessToken.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessTokenInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ArrayAccessorTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/GuardedPropertyTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/MacAuthorizationTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ProviderRedirectTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/QueryBuilderTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequestFactory.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequiredParameterTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/container/src/ContainerExceptionInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/container/src/ContainerInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/container/src/NotFoundExceptionInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-client/src/ClientExceptionInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-client/src/ClientInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-client/src/NetworkExceptionInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-client/src/RequestExceptionInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-factory/src/RequestFactoryInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-factory/src/ResponseFactoryInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-factory/src/ServerRequestFactoryInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-factory/src/StreamFactoryInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-factory/src/UploadedFileFactoryInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-factory/src/UriFactoryInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/MessageInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/RequestInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/ResponseInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/ServerRequestInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/StreamInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/UploadedFileInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/UriInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/AbstractLogger.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/InvalidArgumentException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LogLevel.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LoggerAwareInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LoggerAwareTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LoggerInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LoggerTrait.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/NullLogger.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Container.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ContainerInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/LogicException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/RuntimeException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ResettableContainerInterface.php create mode 100644 wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/deprecation-contracts/function.php create mode 100644 wp/wp-content/plugins/wordpress-seo/wp-seo-main.php create mode 100644 wp/wp-content/plugins/wordpress-seo/wp-seo.php create mode 100644 wp/wp-content/plugins/wordpress-seo/wpml-config.xml create mode 100644 wp/wp-content/plugins/wp-schema-pro/LICENSE create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/css/fields-style.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/css/frontend.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/css/license-form-popup.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/css/settings-style.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/css/setup-wizard.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/css/style.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/images/breadcrumbs.jpg create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/images/schema-pro.png create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/images/schema-pro60x60.png create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/images/sitelink-search.jpg create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/images/sitelinks.jpg create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/js/fields-script.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/js/frontend.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/js/license-form-popup.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/js/script.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/js/settings-script.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/js/setup-wizard.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/js/timpepicker.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-css/fields-style.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-css/frontend.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-css/license-form-popup.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-css/settings-style.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-css/setup-wizard.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-css/style.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-js/fields-script.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-js/frontend.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-js/license-form-popup.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-js/script.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-js/settings-script.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/assets/min-js/setup-wizard.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/assets/css/minified/style-rtl.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/assets/css/minified/style.min.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/assets/css/unminified/style-rtl.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/assets/css/unminified/style.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/class-bsf-analytics-loader.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/class-bsf-analytics-stats.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/class-bsf-analytics.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-analytics/version.json create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/css/frosty.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/css/license-form-popup.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/css/rollback-version.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/css/style.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/css/switch.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/fonts/brainstorm.eot create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/fonts/brainstorm.svg create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/fonts/brainstorm.ttf create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/fonts/brainstorm.woff create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/images/egg-shell.png create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/js/bsf-core.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/js/extension-installer.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/js/frosty.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/js/jquery-history.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/js/license-form-popup.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/js/switch.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/assets/js/version-rollback.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/auto-update/admin-functions.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/auto-update/updater.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/bsf.yml create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/changelog.txt create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/class-bsf-envato-activate.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/class-bsf-license-manager.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/class-bsf-rollback-version-manager.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/class-bsf-update-manager.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/class-bsf-wp-cli-command.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/classes/class-bsf-core-rest.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/classes/class-bsf-core-update.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/classes/class-bsf-extension-installer.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/classes/class-bsf-rollback-version.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/composer.json create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/includes/helpers.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/includes/system-info.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/includes/views/list-bundled-products.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/index.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/plugin-installer/admin-functions.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/plugin-installer/index.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf-core/version.yml create mode 100644 wp/wp-content/plugins/wp-schema-pro/admin/bsf.yml create mode 100644 wp/wp-content/plugins/wp-schema-pro/changelog.txt create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-brainstorm-update-aiosrs-pro.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-admin.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-amp.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-branding.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-custom-fields-markup.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-helper.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-markup.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-schema-global-uninstall.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-schema-template.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-schema-wizard.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-schema.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-setup-wizard.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/class-wp-schema-pro-yoast-compatibility.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/lib/class-bsf-custom-post-list-table.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/class-bsf-target-rule-fields.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/user-role.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-article.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-book.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-course.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-custom-markup.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-event.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-faq.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-how-to.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-image-license.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-job-posting.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-local-business.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-person.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-product.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-recipe.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-review.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-service.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-software-application.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-video-object.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-about-page.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-breadcrumb.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-contact-page.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-organization.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-person.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-site-navigation-element.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-sitelink-search-box.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/blocks.asset.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/blocks.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/render.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/settings.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/render.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/settings.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/render.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/settings.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to/render.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to/settings.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/style-blocks.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/vendors~chunks/faq/settings.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/dist/vendors~chunks/faq/settings~chunks/how-to-child/settings~chunks/how-to/settings.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ar.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-bg_BG.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-cs_CZ.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-da_DK.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-de_DE.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-es_ES.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-es_MX.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-fa_IR.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-fr_FR.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-he_IL.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-id_ID.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-it_IT.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ja.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-nb_NO.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-nl_NL.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-pl_PL.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-pt_BR.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-pt_PT.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ru_RU.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-sk_SK.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-sv_SE.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-tr_TR.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-uk.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-vi.mo create mode 100644 wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro.pot create mode 100644 wp/wp-content/plugins/wp-schema-pro/lib/astra-notices/class-astra-notices.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/lib/astra-notices/composer.json create mode 100644 wp/wp-content/plugins/wp-schema-pro/lib/astra-notices/notices.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/template/branding-settings.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/template/breadcrumb-settings.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/template/license-form.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/template/settings.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/template/wpsp-advanced-settings.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/uninstall.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/webpack.config.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wp-schema-pro.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpml-config.xml create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks.commoneditorstyle.build.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq-child.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to-child.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to.css create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/js/faq.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/min-js/faq.min.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-admin-helper.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-admin.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-helper.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-js.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-config.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-helper.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-init-blocks.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-loader.php create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/WPSPIcon.json create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/block-icons.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css-unit.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/hex-to-rgba.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/lazy-loader.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/parse-icon.js create mode 100644 wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/render-icon.js diff --git a/wp/wp-content/plugins/gravityformshubspot/change_log.txt b/wp/wp-content/plugins/gravityformshubspot/change_log.txt new file mode 100644 index 00000000..a707f169 --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/change_log.txt @@ -0,0 +1,72 @@ +### 2.1.0 | 2024-03-14 +- Updated the additional contact field settings to use the generic field map instead of the deprecated dynamic field map field type. +- Updated to use the v3 Owners API before v2 is sunset in August 2024. +- Updated the minimum Gravity Forms version to 2.7.1. +- Fixed a JavaScript error on the feed configuration page with Gravity Forms 2.8+. + +### 2.0.0 | 2023-11-01 +- Fixed a bug where feeds can't be created or edited due to an invalid_lifecycle_stage error. + + +### 1.9 | 2023-04-06 +- Added support for async (background) feed processing to improve form submission performance. +- Fixed an issue where auth token refresh requests continue to occur after the app is uninstalled from within the connected HubSpot account. +- Fixed an issue where unnecessary auth token refresh requests can occur during feed processing. +- Fixed an issue where the connect button is displayed on the settings page when API requests are being rate limited. +- Fixed an issue that causes the API to initialize on all front-end pages containing forms and all admin pages. +- Fixed an issue where multiple auth token refresh requests can occur around the same time. +- Fixed an issue where HubSpot forms are recreated when reconnecting to the same HubSpot account. +- Fixed a fatal error that can occur when attempting to reconnect the add-on during an API outage. + + +### 1.8 | 2022-11-3 +- Fixed an issue with lifecycle stages which causes feeds to error when being saved or updated. +- Fixed a typo in the "clear cache" setting description. + + +### 1.7 | 2021-11-10 +- Updated the styling for the disconnect alert messaging. +- Fixed an issue where the disconnect from HubSpot button doesn't show when used with Gravity Forms 2.4. +- Fixed an issue where the lead status and lifecycle stage fields are missing from the feed configuration page. +- Fixed an issue where the add-on is disconnected after HubSpot reduced auth token lifespan from 6 hours to 30 minutes. + + +### 1.6 | 2021-10-12 +- Added a button in the add-on settings page to manually clear the contact custom properties cache. +- Added support for mapping single checkbox, multiple checkboxes, dropdown select, and radio select type HubSpot properties. +- Added security enhancements. +- Fixed an issue where a notice appears on the feed settings edit page. +- Fixed fatal errors that can occur when the Hubspot API returns an error while updating feed settings. +- Fixed an issue where authentication may not complete after attempting a connection with HubSpot. +- Fixed issue where conditional Contact Owner feed settings are not getting saved. + + +### 1.5 | 2020-09-23 +- Added support for Gravity Forms 2.5. +- Fixed PHP warnings and notices which occur when the request to the HubSpot API to get the contact properties fails. + + +### 1.4 | 2020-07-14 +- Added security enhancements. + + +### 1.3 | 2020-05-18 +- Added translations for Hebrew, Hindi, Japanese, and Turkish. +- Added support for feed duplication. +- Fixed a PHP 7.4 notice which can occur when generating the HubSpot form for a feed outside the Form Settings area. +- Fixed an issue with the position in the Form Settings menu when multiple add-ons are installed. + + +### 1.2 | 2019-10-23 +- Updated the text in the add-on settings. +- Updated the submission process to always send the IP address to Hubspot unless saving of the submitter IP is disabled in a form's personal data settings. +- Fixed an issue where references to the add-on would appear as "Gravity Forms HubSpot Add-On Add-On." +- Fixed an issue where HubSpot users without names display as empty labels when assigning contact owner(s) for a feed. + + +### 1.1 | 2019-08-07 +- Added security enhancements. + + +### 1.0 | 2019-07-18 +- All new! diff --git a/wp/wp-content/plugins/gravityformshubspot/class-gf-hubspot.php b/wp/wp-content/plugins/gravityformshubspot/class-gf-hubspot.php new file mode 100644 index 00000000..ec1b4a72 --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/class-gf-hubspot.php @@ -0,0 +1,2424 @@ +test_api_connection(); + + } + + /** + * Displays an appropriate message when feeds can't be configured. + * + * @since 1.9 + * + * @return string + */ + public function configure_addon_message() { + if ( is_null( $this->initialize_api() ) ) { + return parent::configure_addon_message(); + } + + return $this->comms_error_message(); + } + + /** + * Indicates if the feed can be duplicated. + * + * @since 1.0 + * @since 1.3 Enabled feed duplication. + * + * @param int $id Feed ID requesting duplication. + * + * @return bool + */ + public function can_duplicate_feed( $id ) { + + return true; + } + + /** + * Duplicates the feed and triggers creation of a corresponding form in HubSpot. + * + * @since 1.3 + * + * @param array|int $id The ID of the feed to be duplicated or the feed object when duplicating a form. + * @param bool|int $new_form_id False when using feed actions or the ID of the new form when duplicating a form. + * + * @return int + */ + public function duplicate_feed( $id, $new_form_id = false ) { + $new_feed_id = parent::duplicate_feed( $id, $new_form_id ); + + if ( $new_feed_id && $feed = $this->get_feed( $new_feed_id ) ) { + $delimiter = '. FID: '; + $items = explode( $delimiter, $feed['meta']['_hs_form'] ); + $feed['meta']['_hs_form'] = $items[0] . $delimiter . $feed['id']; + $this->recreate_hubspot_form( $feed, false ); + } + + return $new_feed_id; + } + + /** + * Setup columns for feed list table. + * + * @since 1.0 + * + * @return array + */ + public function feed_list_columns() { + + return array( + 'feed_name' => esc_html__( 'Name', 'gravityformshubspot' ), + ); + + } + + /** + * Performs any early initialization tasks. + * + * @since 1.9 + */ + public function pre_init() { + parent::pre_init(); + + if ( $this->is_gravityforms_supported( '2.7.0.2' ) ) { + // Only enabling for GF versions that call `delay_feed()` when adding the feed to the queue. + $this->_async_feed_processing = true; + } + } + + /** + * Plugin starting point. Adds PayPal delayed payment support. + * + * @since 1.0 + */ + public function init() { + + parent::init(); + + $this->add_delayed_payment_support( + array( + 'option_label' => esc_html__( 'Create record in HubSpot only when payment is received.', 'gravityformshubspot' ), + ) + ); + + add_filter( 'gform_settings_header_buttons', array( $this, 'filter_gform_settings_header_buttons' ), 99 ); + + add_action( 'wp_footer', array( $this, 'action_wp_footer' ) ); + + } + + /** + * Add AJAX callbacks. + * + * @since 1.0 + */ + public function init_ajax() { + parent::init_ajax(); + + // Add AJAX callback for de-authorizing with HubSpot. + add_action( 'wp_ajax_gfhubspot_deauthorize', array( $this, 'ajax_deauthorize' ) ); + add_action( 'wp_ajax_gf_hubspot_clear_cache', array( $this, 'clear_custom_contact_properties_cache' ) ); + } + + /** + * Enqueue admin scripts. + * + * @since 1.0 + * + * @return array + */ + public function scripts() { + + $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || isset( $_GET['gform_debug'] ) ? '' : '.min'; + $form_id = absint( rgget( 'id' ) ); + $form = GFAPI::get_form( $form_id ); + + $routing_fields = ! empty( $form ) ? GFCommon::get_field_filter_settings( $form ) : array(); + $hubspot_owners = $this->get_hubspot_owners(); + + $scripts = array( + array( + 'handle' => 'gform_hubspot_pluginsettings', + 'deps' => array( 'jquery' ), + 'src' => $this->get_base_url() . "/js/plugin_settings{$min}.js", + 'version' => $this->_version, + 'enqueue' => array( + array( + 'admin_page' => array( 'plugin_settings' ), + 'tab' => $this->_slug, + ), + ), + 'strings' => array( + 'disconnect' => array( + 'site' => wp_strip_all_tags( __( 'Are you sure you want to disconnect from HubSpot for this website?', 'gravityformshubspot' ) ), + 'account' => wp_strip_all_tags( __( 'Are you sure you want to disconnect all Gravity Forms sites connected to this HubSpot account?', 'gravityformshubspot' ) ), + ), + 'settings_url' => admin_url( 'admin.php?page=gf_settings&subview=' . $this->get_slug() ), + 'deauth_nonce' => wp_create_nonce( 'gf_hubspot_deauth' ), + 'clear_cache_nonce' => wp_create_nonce( 'gf_hubspot_clear_cache' ), + ), + ), + array( + 'handle' => 'gform_hubspot_owner_settings', + 'deps' => array( 'jquery' ), + 'src' => $this->get_base_url() . "/js/contact_owner_setting{$min}.js", + 'version' => $this->_version, + 'enqueue' => array( + array( 'query' => "page=gf_edit_forms&view=settings&subview={$this->_slug}&fid=_notempty_" ), + array( 'query' => "page=gf_edit_forms&view=settings&subview={$this->_slug}&fid=0" ), + ), + 'strings' => array( + 'legacy_ui' => version_compare( GFForms::$version, '2.5-dev-1', '<' ) ? true : false, + 'fields' => $routing_fields, + 'owners' => $hubspot_owners, + 'assign_to' => wp_strip_all_tags( __( 'Assign To', 'gravityfromshubspot' ) ), + 'condition' => wp_strip_all_tags( __( 'Condition', 'gravityfromshubspot' ) ), + ), + ), + ); + + return array_merge( parent::scripts(), $scripts ); + + } + + /** + * Register needed styles. + * + * @since 1.0 + * + * @return array $styles + */ + public function styles() { + + $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || isset( $_GET['gform_debug'] ) ? '' : '.min'; + + $styles = array( + array( + 'handle' => 'gform_hubspot_pluginsettings', + 'src' => $this->get_base_url() . "/css/plugin_settings{$min}.css", + 'version' => $this->_version, + 'enqueue' => array( + array( + 'admin_page' => array( 'plugin_settings' ), + 'tab' => $this->_slug, + ), + ), + ), + array( + 'handle' => 'gform_hubspot_formsettings', + 'src' => $this->get_base_url() . "/css/form_settings{$min}.css", + 'version' => $this->_version, + 'enqueue' => array( + array( + 'admin_page' => array( 'form_settings' ), + 'tab' => $this->_slug, + ), + ), + ), + ); + + return array_merge( parent::styles(), $styles ); + + } + + /** + * Return the plugin's icon for the plugin/form settings menu. + * + * @since 1.3 + * + * @return string + */ + public function get_menu_icon() { + + return file_get_contents( $this->get_base_path() . '/images/menu-icon.svg' ); + + } + + /** + * Updates the auth token before initializing the settings. + * + * @since 1.9 + */ + public function plugin_settings_init() { + + $this->maybe_update_auth_tokens(); + + parent::plugin_settings_init(); + + } + + /** + * Get the authorization payload data. + * + * Returns the auth POST request if it's present, otherwise attempts to return a recent transient cache. + * + * @since 1.6 + * + * @return array + */ + private function get_oauth_payload() { + $payload = array_filter( + array( + 'auth_payload' => rgpost( 'auth_payload' ), + 'auth_error' => rgpost( 'auth_error' ), + 'state' => rgpost( 'state' ), + ) + ); + + if ( count( $payload ) === 2 || isset( $payload['auth_error'] ) ) { + return $payload; + } + + $payload = get_transient( "gravityapi_response_{$this->_slug}" ); + + if ( rgar( $payload, 'state' ) !== get_transient( "gravityapi_request_{$this->_slug}" ) ) { + return array(); + } + + delete_transient( "gravityapi_response_{$this->_slug}" ); + + return is_array( $payload ) ? $payload : array(); + } + + /** + * Store auth tokens when we get auth payload from HubSpot. + * + * @since 1.0 + */ + public function maybe_update_auth_tokens() { + $payload = $this->get_oauth_payload(); + + if ( ! $payload ) { + return; + } + + $auth_payload = json_decode( base64_decode( rgar( $payload, 'auth_payload' ) ), true ); + + // Verify state. + if ( rgpost( 'state' ) && ! wp_verify_nonce( rgar( $payload, 'state' ), $this->get_authentication_state_action() ) ) { + GFCommon::add_error_message( esc_html__( 'Unable to connect your HubSpot account due to mismatched state.', 'gravityformshubspot' ) ); + return; + } + + // Get the authentication token. + $auth_token = $this->get_plugin_setting( 'auth_token' ); + $settings = array(); + + if ( empty( $auth_token ) || $auth_token['access_token'] !== $auth_payload['access_token'] ) { + // Add token info to plugin settings. + $settings['auth_token'] = array( + 'access_token' => $auth_payload['access_token'], + 'refresh_token' => $auth_payload['refresh_token'], + 'date_created' => time(), + 'expires_in' => $auth_payload['expires_in'], + ); + + // Save plugin settings. + $this->update_plugin_settings( $settings ); + + GFCommon::add_message( esc_html__( 'HubSpot settings have been updated.', 'gravityformshubspot' ) ); + + // Force the API to re-init using the new token. + $this->api = null; + + // Maybe recreate HubSpot Forms after having updated auth token. + $this->maybe_recreate_hubspot_forms(); + } + + // If error is provided, display message. + if ( rgpost( 'auth_error' ) || isset( $payload['auth_error'] ) ) { + // Add error message. + GFCommon::add_error_message( esc_html__( 'Unable to connect your HubSpot account.', 'gravityformshubspot' ) ); + } + } + + /** + * Recreate HubSpot forms for any existing HubSpot feed. It will go through all the feeds and + * recreates the associated HubSpot Form for each. + * + * @since 1.0 + * @since 1.3 Updated to use recreate_hubspot_form(). + */ + public function maybe_recreate_hubspot_forms() { + $feeds = $this->get_feeds_by_slug( $this->_slug ); + if ( empty( $feeds ) || ! $this->initialize_api() ) { + return; + } + + $this->log_debug( __METHOD__ . '(): Starting.' ); + + foreach ( $feeds as $feed ) { + if ( $this->hubspot_form_exists( rgars( $feed, 'meta/_hs_form_guid' ) ) ) { + $this->log_debug( __METHOD__ . sprintf( '(): Skipping feed (#%d); HubSpot form still exists. Name: %s; GUID: %s.', $feed['id'], $feed['meta']['_hs_form'], $feed['meta']['_hs_form_guid'] ) ); + + continue; + } + + $this->recreate_hubspot_form( $feed ); + } + + $this->log_debug( __METHOD__ . '(): Completed.' ); + } + + /** + * Determines if a form exists in the connected HubSpot account with the given GUID. + * + * @since 1.9 + * + * @param string $guid The HubSpot form GUID. + * + * @return bool + */ + public function hubspot_form_exists( $guid ) { + if ( empty( $guid ) ) { + return false; + } + + static $guids; + + if ( ! is_array( $guids ) ) { + $forms = $this->api->get_forms(); + $guids = is_wp_error( $forms ) || empty( $forms ) ? array() : wp_list_pluck( $forms, 'guid' ); + } + + if ( empty( $guids ) ) { + return false; + } + + return in_array( $guid, $guids ); + } + + /** + * Recreates the HubSpot form for the given feed. + * + * @since 1.3 + * + * @param array $feed The feed the HubSpot form is to be created for. + * @param bool $reset_owner Indicates if the contact owner should be set to none. + */ + public function recreate_hubspot_form( $feed, $reset_owner = true ) { + $result = $this->create_hubspot_form( $feed['meta'], $feed['form_id'] ); + if ( ! $result ) { + // If form could not be created, try again with a unique name. + $feed['meta']['_hs_form'] .= '.' . uniqid(); + + $result = $this->create_hubspot_form( $feed['meta'], $feed['form_id'] ); + } + + if ( $result ) { + $feed['meta']['_hs_form'] = $this->get_hubspot_formname_without_warning( $result['name'] ); + $feed['meta']['_hs_form_guid'] = $result['guid']; + $feed['meta']['_hs_portal_id'] = $result['portal_id']; + $this->log_debug( __METHOD__ . sprintf( '(): HubSpot form created for feed (#%d). Name: %s; GUID: %s.', $feed['id'], $feed['meta']['_hs_form'], $feed['meta']['_hs_form_guid'] ) ); + + if ( $reset_owner ) { + $feed['meta']['contact_owner'] = 'none'; + } + + $this->update_feed_meta( $feed['id'], $feed['meta'] ); + } + } + + /** + * Setup plugin settings fields. + * + * @since 1.0 + * + * @return array + */ + public function plugin_settings_fields() { + // Prepare plugin description. + $description = '

'; + $description .= esc_html__( 'HubSpot is an all-in-one CRM, Sales, Marketing, and Customer Service platform.', 'gravityformshubspot' ); + $description .= '

'; + $description .= '

'; + $description .= esc_html__( 'The Gravity Forms HubSpot Add-On connects the power of the world’s leading growth platform - HubSpot - with Gravity Forms so your business can grow better.', 'gravityformshubspot' ); + $description .= '

'; + $description .= '

'; + $description .= sprintf( + /* translators: 1: Open link tag 2: Close link tag */ + esc_html__( 'If you don\'t have a HubSpot account, you can %1$ssign up for your free HubSpot account here%2$s.', 'gravityformshubspot' ), + '', '' + ); + $description .= '

'; + + $settings = array( + array( + 'title' => '', + 'description' => $description, + 'fields' => array( + array( + 'name' => 'auth_token', + 'type' => 'auth_token_button', + 'feedback_callback' => array( $this, 'initialize_api' ), + ), + ), + ), + ); + + if ( $this->initialize_api() ) { + $settings[] = array( + 'title' => esc_html__( 'Clear Custom Contact Properties Cache', 'gravityformshubspot' ), + 'fields' => array( + array( + 'name' => 'clear_cache', + 'label' => '', + 'type' => 'clear_cache', + ), + ), + ); + } + + return $settings; + + } + + /** + * Hide submit button on plugin settings page. + * + * @since 1.3 + * + * @param string $html + * + * @return string + */ + public function filter_gform_settings_header_buttons( $html = '' ) { + + // If this is not the plugin settings page, return. + if ( ! $this->is_plugin_settings( $this->get_slug() ) ) { + return $html; + } + + // Hide button. + $html = str_replace( 'initialize_api() ) { + return false; + } + + $this->log_debug( __METHOD__ . '(): Validating API credentials.' ); + $contacts = $this->api->get_contacts(); + + if ( is_wp_error( $contacts ) ) { + // Display the connect button for an auth error or the comms message for rate limit & timeout errors. + $this->api = rgar( $contacts->get_error_data(), 'status' ) === 401 ? null : false; + } + + return (bool) $this->api; + } + + /** + * Returns the message to display when API requests are being rate limited or timing out. + * + * @since 1.9 + * + * @return string + */ + public function comms_error_message() { + if ( method_exists( 'GFCommon', 'get_support_url' ) ) { + $support_url = GFCommon::get_support_url(); + } else { + $support_url = 'https://www.gravityforms.com/open-support-ticket/'; + } + + /* translators: 1: Open link tag 2: Close link tag */ + return sprintf( esc_html__( 'There is a problem communicating with HubSpot right now, please check back later. If this issue persists for more than a day, please %1$sopen a support ticket%2$s.', 'gravityformshubspot' ), "", '' ); + } + + /** + * Create Generate Auth Token settings field. + * + * @since 1.0 + * + * @param array $field Field properties. + * @param bool $echo Display field contents. Defaults to true. + * + * @return string + */ + public function settings_auth_token_button( $field, $echo = true ) { + $html = ''; + + $this->test_api_connection(); + + if ( $this->api === null || rgget( 'gf_display_connect_button' ) ) { + // If SSL is available, display custom app settings. + if ( is_ssl() ) { + $license_key = GFCommon::get_key(); + $settings_url = urlencode( admin_url( 'admin.php?page=gf_settings&subview=' . $this->_slug ) ); + $nonce = wp_create_nonce( $this->get_authentication_state_action() ); + $auth_url = add_query_arg( + array( + 'redirect_to' => $settings_url, + 'license' => $license_key, + 'state' => $nonce, + ), + $this->get_gravity_api_url( '/auth/hubspot' ) + ); + + if ( get_transient( "gravityapi_request_{$this->_slug}" ) ) { + delete_transient( "gravityapi_request_{$this->_slug}" ); + } + + set_transient( "gravityapi_request_{$this->_slug}", $nonce, 10 * MINUTE_IN_SECONDS ); + + $html = sprintf( + '%s', + esc_html__( 'Click here to connect your HubSpot account', 'gravityformshubspot' ), + $auth_url + ); + } else { + $html = '
'; + $html .= '

' . esc_html__( 'SSL Certificate Required', 'gravityformshubspot' ) . '

'; + /* translators: 1: Open link tag 2: Close link tag */ + $html .= sprintf( esc_html__( 'Make sure you have an SSL certificate installed and enabled, then %1$sclick here to continue%2$s.', 'gravityformshubspot' ), '', '' ); + $html .= '
'; + } + } elseif ( $this->api === false ) { + $html = '
+
+ +
+

' . $this->comms_error_message() . '

+
+
+
'; + } else { + $html = '

' . esc_html__( 'Signed into HubSpot.', 'gravityformshubspot' ); + $html .= '

'; + $html .= sprintf( + ' %1$s', + esc_html__( 'Disconnect your HubSpot account', 'gravityformshubspot' ) + ); + + $html .= '
'; + $html .= '

'; + $html .= '

'; + $html .= '

' . sprintf( ' %1$s', esc_html__( 'Disconnect your HubSpot account', 'gravityformshubspot' ) ) . '

'; + $html .= '
'; + } + + if ( $echo ) { + echo $html; + } + + return $html; + + } + + /** + * Generates clear custom fields cache button field markup. + * + * @param array $field Field properties. + * @param bool $echo Display field contents. Defaults to true. + * + * @since 1.6 + * + * @return string + */ + public function settings_clear_cache( $field, $echo = true ) { + + $html =' + + '; + + $html .= '

' . esc_html__( 'Due to HubSpot\'s daily API usage limits, Gravity Forms stores HubSpot custom contact properties data for one hour. If you added new custom properties or made a change to them, you might not see it reflected immediately due to this data caching. To manually clear the custom contact properties cache, click the button below.', 'gravityformshubspot' ) . '

'; + + $html .= '

' . esc_html__( 'Clear Custom Fields Cache', 'gravityformshubspot' ) . '

'; + + $settings = $this->get_plugin_settings(); + $last_cache_clearance = rgar( $settings, 'last_cache_clearance' ); + + $readable_time = $last_cache_clearance ? date( "Y-m-d H:i:s", $last_cache_clearance ) : esc_html__( 'never cleared manually before', 'gravityformshubspot' ); + $html .= '

' . esc_html__( 'Last time the cache was cleared manually: ', 'gravityformshubspot' ) . '' . $readable_time . '

'; + + if ( $echo ) { + echo html_entity_decode( $html ); + } + + return $html; + } + + /** + * Handles the ajax request to clear the custom properties cache. + * + * @since 1.6 + */ + public function clear_custom_contact_properties_cache() { + + if ( ! check_ajax_referer( 'gf_hubspot_clear_cache', 'nonce' ) ) { + wp_send_json_error(); + } + + if ( ! GFCache::delete( self::CUSTOM_PROPERTIES_CACHE_KEY ) ) { + $this->log_debug( __METHOD__ . '() : failed to clear cache' ); + } + + $this->log_debug( __METHOD__ . '() : cache cleared successfully' ); + + $settings = $this->get_plugin_settings(); + $settings['last_cache_clearance'] = time(); + + $this->update_plugin_settings( $settings ); + + wp_send_json_success( + array( + 'last_clearance' => date( 'Y-m-d H:i:s', $settings['last_cache_clearance'] ), + ) + ); + } + + /** + * Get Gravity API URL. + * + * @since 1.0 + * + * @param string $path Path. + * + * @return string + */ + public function get_gravity_api_url( $path = '' ) { + return ( defined( 'GRAVITY_API_URL' ) ? GRAVITY_API_URL : 'https://gravityapi.com/wp-json/gravityapi/v1' ) . $path; + } + + /** + * Initializes the HubSpot API if credentials are valid. + * + * @since 1.0 + * @since 1.9 Added the optional $refresh_token param. + * + * @param bool $refresh_token Indicates if the auth token should be refreshed. + * + * @return bool|null API initialization state. Returns null if no authentication token is provided. + */ + public function initialize_api( $refresh_token = true ) { + + // If API initialization has already been attempted return result. + if ( ! is_null( $this->api ) ) { + return is_object( $this->api ); + } + + // Initialize HubSpot API library. + if ( ! class_exists( 'GF_HubSpot_API' ) ) { + require_once 'includes/class-gf-hubspot-api.php'; + } + + // Get the authentication token. + $auth_token = $this->get_plugin_setting( 'auth_token' ); + + // If the authentication token is not set, return null. + if ( rgblank( $auth_token ) ) { + return null; + } + + // Initialize a new HubSpot API instance. + $this->api = new GF_HubSpot_API( $auth_token ); + + if ( ! $refresh_token ) { + return true; + } + + // From 2021-11-08 HubSpot reduced the token lifespan from 6 hours to 30 minutes. + if ( time() > ( $auth_token['date_created'] + rgar( $auth_token, 'expires_in', 1800 ) ) ) { + // Log that authentication test failed. + $this->log_debug( __METHOD__ . '(): API tokens expired, start refreshing.' ); + + $lock_cache_key = $this->get_slug() . '_refresh_lock'; + + $locked = GFCache::get( $lock_cache_key, $found ); + if ( $found && $locked ) { + $this->api = false; + $this->log_debug( __METHOD__ . '(): Aborting; refresh already in progress.' ); + + return false; + } + + GFCache::set( $lock_cache_key, true, true, MINUTE_IN_SECONDS ); + + // refresh token. + $auth_token = $this->api->refresh_token(); + if ( ! is_wp_error( $auth_token ) ) { + $settings['auth_token'] = array( + 'access_token' => $auth_token['access_token'], + 'refresh_token' => $auth_token['refresh_token'], + 'date_created' => time(), + 'expires_in' => $auth_token['expires_in'], + ); + + // Save plugin settings. + $this->update_plugin_settings( $settings ); + $this->log_debug( __METHOD__ . '(): API access token has been refreshed.' ); + GFCache::delete( $lock_cache_key ); + + } else { + $message = $auth_token->get_error_message(); + $this->api = false; + $this->log_debug( __METHOD__ . '(): API access token failed to be refreshed; ' . $message ); + GFCache::delete( $lock_cache_key ); + + if ( $message === 'BAD_REFRESH_TOKEN' ) { + delete_option( 'gravityformsaddon_' . $this->_slug . '_settings' ); + $this->log_debug( __METHOD__ . '(): This website has been disconnected from HubSpot.' ); + $this->api = null; + } + + return $this->api; + } + } + + return true; + + } + + /** + * Revoke token and remove them from Settings. + * + * Note we cannot revoke refresh token ($this->api->revoke_token()) because the refresh token is shared across + * all sites authenticated under the same accounts. + * + * @since 1.0 + */ + public function ajax_deauthorize() { + check_ajax_referer( 'gf_hubspot_deauth', 'nonce' ); + $scope = sanitize_text_field( $_POST['scope'] ); + + // If user is not authorized, exit. + if ( ! GFCommon::current_user_can_any( $this->_capabilities_settings_page ) ) { + wp_send_json_error( array( 'message' => esc_html__( 'Access denied.', 'gravityformshubspot' ) ) ); + } + + // If API instance is not initialized, return error. + if ( ! $this->initialize_api() ) { + $this->log_error( __METHOD__ . '(): Unable to de-authorize because API is not initialized.' ); + + wp_send_json_error(); + } + + // Delete all HubSpot forms associated with existing HubSpot feeds. + $this->delete_hubspot_forms(); + + if ( $scope === 'account' ) { + $result = $this->api->revoke_token(); + + if ( is_wp_error( $result ) ) { + $this->log_error( __METHOD__ . '(): Unable to revoke token; ' . $result->get_error_message() ); + + wp_send_json_error( array( 'message' => $result->get_error_message() ) ); + } + + $this->log_error( __METHOD__ . '(): All Gravity Forms sites connected to this HubSpot account have been disconnected.' ); + } + + // Remove access token from settings. + delete_option( 'gravityformsaddon_' . $this->_slug . '_settings' ); + + // Log that we revoked the access token. + $this->log_debug( __METHOD__ . '(): This website has been disconnected from HubSpot.' ); + + // Return success response. + wp_send_json_success(); + } + + /** + * Deletes all HubSpot forms associated with feeds. This function is called during the process of de-authorizing a HubSpot account + * and serves as a clean up routine so that Gravity Forms created forms aren't lingering around on a disconnected HubSpot account. + * + * @since 1.0 + */ + public function delete_hubspot_forms() { + + //Getting all HubSpot feeds across all forms + $feeds = $this->get_feeds_by_slug( $this->_slug ); + + //Deleting all associated HubSpot forms + foreach ( $feeds as $feed ) { + $this->delete_hubspot_form( $feed ); + } + } + + + /** + * Deletes the HubSpot form associated with the specified feed + * @since 1.0 + * + * @param array $feed Feed object that is associated with HubSpot Form + */ + public function delete_hubspot_form( $feed ) { + + if ( $this->initialize_api() ) { + + $guid = $feed['meta']['_hs_form_guid']; + $this->api->delete_form( $guid ); + } + } + + /** + * Setup fields for feed settings. + * + * @since 1.0 + * + * @return array + */ + public function feed_settings_fields() { + + if ( ! $this->initialize_api() ) { + return array(); + } + + $form = $this->get_current_form(); + + // Prepare base feed settings section. + $basic_section = array( + 'title' => '', + 'fields' => array( + array( + 'name' => 'feed_name', + 'label' => esc_html__( 'Name', 'gravityformshubspot' ), + 'type' => 'text', + 'class' => 'medium', + 'required' => true, + 'default_value' => $this->get_default_feed_name(), + 'tooltip' => '
' . esc_html__( 'Name', 'gravityformshubspot' ) . '
' . esc_html__( 'Enter a feed name to uniquely identify this feed.', 'gravityformshubspot' ), + ), + array( + 'name' => 'feed_type', + 'label' => esc_html__( 'Feed Type', 'gravityformshubspot' ), + 'type' => 'select', + 'choices' => array( + array( + 'label' => __( 'Create Contact', 'gravityformshubspot' ), + 'value' => 'create_contact', + ), + ), + 'default_value' => 'create_contact', + 'hidden' => true, + ), + array( + 'name' => '_hs_form', + 'label' => esc_html__( 'HubSpot Form Name', 'gravityformshubspot' ), + 'type' => 'hubspotform', + 'class' => 'medium', + 'required' => true, + 'tooltip' => sprintf( + '
%s
%s', + esc_html__( 'HubSpot Form Name', 'gravityformshubspot' ), + esc_html__( 'Enter the name for the form that will be automatically created in your HubSpot account to work in conjunction with this feed. This HubSpot form will be configured to match your mapped fields below and is required. Once created, please don\'t remove or edit it.', 'gravityformshubspot' ) + ), + 'default_value' => 'Gravity Forms - ' . $form['title'], + 'validation_callback' => array( $this, 'validate_hubspot_form' ), + ), + ), + ); + + $contact_properties = $this->get_hubspot_contact_properties(); + + if ( ! empty( $contact_properties['selection'] ) ) { + foreach ( $contact_properties['selection'] as $property ) { + $basic_section['fields'][] = array( + 'name' => $property['name'], + 'label' => $property['label'], + 'type' => 'select', + 'default_value' => rgar( $property, 'default_value' ), + 'tooltip' => rgar( $property, 'tooltip' ), + 'choices' => $property['choices'], + ); + } + } + + $basic_section['fields'][] = array( + 'name' => 'contact_owner', + 'label' => esc_html__( 'Contact Owner', 'gravityformshubspot' ), + 'type' => 'radio', + 'horizontal' => true, + 'default_value' => 'none', + 'choices' => array( + array( + 'label' => __( 'None  ', 'gravityformshubspot' ), + 'value' => 'none', + ), + array( + 'label' => __( 'Select Owner  ', 'gravityformshubspot' ), + 'value' => 'select', + ), + array( + 'label' => __( 'Assign Conditionally', 'gravityformshubspot' ), + 'value' => 'conditional', + ), + ), + 'tooltip' => '
' . esc_html__( 'Contact Owner', 'gravityforms' ) . '
' . esc_html__( 'Select a HubSpot user that will be assigned as the owner of the newly created Contact.', 'gravityformshubspot' ), + ); + + $contact_owner_section = array( + 'id' => 'contact_owner_section', + 'title' => esc_html__( 'Contact Owner', 'gravityformshubspot' ), + 'class' => 'contact_owner_section', + 'dependency' => version_compare( GFForms::$version, '2.5-dev-1', '<' ) ? null : array( + 'live' => true, + 'fields' => array( + array( + 'field' => 'contact_owner', + 'values' => array( 'select', 'conditional' ), + ), + ), + ), + 'fields' => array( + array( + 'name' => 'contact_owner_select', + 'label' => esc_html__( 'Select Owner', 'gravityformshubspot' ), + 'type' => 'select', + 'choices' => $this->get_hubspot_owners(), + 'dependency' => version_compare( GFForms::$version, '2.5-dev-1', '<' ) ? null : array( + 'live' => true, + 'fields' => array( + array( + 'field' => 'contact_owner', + 'values' => array( 'select' ), + ), + ), + ), + ), + array( + 'name' => 'contact_owner_conditional', + 'label' => '', + 'class' => 'large', + 'type' => 'conditions', + 'dependency' => version_compare( GFForms::$version, '2.5-dev-1', '<' ) ? null : array( + 'live' => true, + 'fields' => array( + array( + 'field' => 'contact_owner', + 'values' => array( 'conditional' ), + ), + ), + ), + ), + ), + ); + + $field_map_section = array( + 'title' => 'Map Contact Fields', + 'fields' => rgar( $contact_properties, 'basic', array() ), + ); + + $additional_fields_section = array( + 'title' => esc_html__( 'Add Additional Contact Fields', 'gravityformshubspot' ), + 'fields' => array( + array( + 'name' => 'additional_fields', + 'label' => '', + 'type' => 'generic_map', + 'key_field' => array( + 'title' => 'HubSpot', + 'allow_custom' => false, + 'choices' => rgar( $contact_properties, 'grouped', array() ), + ), + 'value_field' => array( + 'title' => 'Gravity Forms', + 'allow_custom' => false, + ), + ), + ), + ); + + $other_fields_section = array( + 'title' => esc_html__( 'Additional Options', 'gravityformshubspot' ), + 'fields' => array( + array( + 'name' => 'conditionalLogic', + 'label' => esc_html__( 'Conditional Logic', 'gravityforms' ), + 'type' => 'feed_condition', + 'tooltip' => '
' . esc_html__( 'Conditional Logic', 'gravityforms' ) . '
' . esc_html__( 'When conditions are enabled, HubSpot contacts will only be created when the conditions are met. When disabled, a HubSpot contact will be created for every form submission.', 'gravityforms' ), + ), + ), + ); + + $settings_fields = array( $basic_section, $contact_owner_section, $field_map_section, $additional_fields_section, $other_fields_section ); + + return $settings_fields; + } + + /*** + * Overrides the parent field to remove the Street Address (Line 2) field from the field map options + * + * @since 1.0 + * + * @param int $form_id Current Form Id + * @param array|string|null $field_type Current field type + * @param array|string|null $exclude_field_types Field types to be excluded from drop down + * + * @return array + */ + public static function get_field_map_choices( $form_id, $field_type = null, $exclude_field_types = null ) { + + $choices = parent::get_field_map_choices( $form_id, $field_type, $exclude_field_types ); + $form = GFAPI::get_form( $form_id ); + $address_fields = GFAPI::get_fields_by_type( $form, array( 'address' ) ); + if ( ! is_array( $address_fields ) ) { + return $choices; + } + + $address_line2_ids = array(); + foreach ( $address_fields as $address_field ) { + $address_line2_ids[] = $address_field->id . '.2'; + } + + $new_choices = array(); + foreach ( $choices as $choice ) { + if ( ! in_array( $choice['value'], $address_line2_ids ) ) { + $new_choices[] = $choice; + } + } + + return $new_choices; + } + + /** + * Displays the currently configured HubSpot Form. + * + * @since 1.0 + * + * @param array $field Field object. + * @param bool $echo True if HTML should be printed on screen. + * + * @return string + */ + public function settings_hubspotform( $field, $echo = true ) { + + $field['type'] = 'text'; + $html = $this->settings_text( $field, false ); + + $guid = $this->get_setting( $field['name'] . '_guid' ); + $html .= ''; + + if ( $echo ) { + echo $html; + } + + return $html; + } + + /** + * Validates that the HubSpot form name is unique and the form can be created or edited. + * + * @since unknown + * @since 1.6 Moved the HubSpot form update/creation to the validate callback. + * + * @param array $field Field array containing the configuration options of this field. + * @param string $field_value Submitted value. + */ + public function validate_hubspot_form( $field, $field_value = '' ) { + + global $_gaddon_posted_settings; + + // Get settings. + $settings = $this->get_current_settings(); + + if ( ! $this->initialize_api() ) { + $this->set_field_error( $field, esc_html__( 'There was an error connecting to Hubspot.', 'gravityformshubspot' ) ); + return; + } + + $forms = $this->api->get_forms(); + + if ( is_wp_error( $forms ) ) { + $this->set_field_error( $field, esc_html__( 'There was an error validating the form name. Please try saving again', 'gravityformshubspot' ) ); + } + + // Validate the form name is unique. + if ( ! $this->is_form_name_unique( $field_value, $forms, $settings ) ) { + $this->set_field_error( $field, esc_html__( 'This form name is already in use in HubSpot. Please enter a unique form name.', 'gravityformshubspot' ) ); + return; + } + + // Validate if the form can be updated or created on HubSpot. + $feed_id = $this->get_current_feed_id(); + $result = $this->is_form_editable( $settings, $feed_id ); + + if ( ! $result ) { + $action = $feed_id ? esc_html__( 'edit', 'gravityformshubspot' ) : esc_html__( 'add', 'gravityformshubspot' ); + /* translators: Action to perform on the form. */ + $this->set_field_error( $field, sprintf( esc_html__( 'Could not %s HubSpot form. Please try again later.', 'gravityformshubspot' ), $action ) ); + + return; + } + + // Update the HubSpot form data. + $_gaddon_posted_settings['_hs_form_guid'] = $result['guid']; + $_gaddon_posted_settings['_hs_portal_id'] = $result['portal_id']; + + } + + /** + * Validates that the HubSpot form name is unique. + * + * @since 1.6 + * + * @param string $field_value Submitted value. + * @param array $forms The array of forms retrieved from Hubspot. + * @param array $settings The array of plugin settings. + * + * @return bool Whether or not the form name is unique. + */ + private function is_form_name_unique( $field_value, $forms, $settings ) { + $form_name = $field_value . $this->get_hubspot_formname_warning(); + $unique = true; + foreach ( $forms as $form ) { + if ( $form['name'] === $form_name && $settings['_hs_form_guid'] !== $form['guid'] ) { + $unique = false; + } + } + return $unique; + } + + /** + * Validates that the HubSpot form is able to be created. + * + * @since 1.6 + * + * @param array $settings The plugin settings. + * @param string $feed_id The feed id. + * + * @return array|bool Returns an array with the newly updated form name and form GUID if updated successfully. Otherwise return false. + */ + private function is_form_editable( $settings, $feed_id ) { + $form_id = rgget( 'id' ); + if ( $feed_id ) { + return $this->update_hubspot_form( rgar( $settings, '_hs_form_guid' ), $settings, $form_id ); + } + + return $this->create_hubspot_form( $settings, $form_id ); + } + + /*** + * Renders the HTML for the Contact Owner conditions setting. + * + * @since 1.0 + * + * @param array|\Rocketgenius\Gravity_Forms\Settings\Fields\Base $field Field object. + * @param bool $echo True if HTML should be printed on screen. + * + * @return string + */ + public function settings_conditions( $field, $echo = true ) { + $html = '
'; + + // Setup hidden field. + $hidden_field = is_object( $field ) ? clone $field : $field; + $hidden_field['name'] = 'conditions'; + $hidden_field['type'] = 'hidden'; + unset( $hidden_field['callback'] ); + + $html .= $this->settings_hidden( $hidden_field, false ); + + if ( $echo ) { + echo $html; + } + + return $html; + } + + /** + * Overrides parent class to create/update HubSpot form when feed is saved. + * + * @since 1.0 + * @since 1.6 Updated to get HubSpot form data from $_gaddon_posted_settings. + * + * @param int $feed_id Feed ID. + * @param int $form_id Form ID. + * @param array $settings Feed settings. + * + * @return array|bool + */ + public function save_feed_settings( $feed_id, $form_id, $settings ) { + global $_gaddon_posted_settings; + + $settings['_hs_form_guid'] = $_gaddon_posted_settings['_hs_form_guid']; + $settings['_hs_portal_id'] = $_gaddon_posted_settings['_hs_portal_id']; + + // Saving feed. + return parent::save_feed_settings( $feed_id, $form_id, $settings ); + } + + /** + * Delete associated HubSpot form and then deletes feed. + * + * @since 1.0 + * + * @param int $id Id of feed to be deleted. + */ + public function delete_feed( $id ) { + + $feed = $this->get_feed( $id ); + $this->delete_hubspot_form( $feed ); + + parent::delete_feed( $id ); + } + + + /** + * Creates a HubSpot form based on the provided feed settings + * + * @since 1.0 + * + * @param array $feed_meta Current feed meta. + * @param int $form_id The ID of the form the feed belongs to. + * + * @return array|bool Returns the auto-generated form data from HubSpot if successful. Otherwise returns false. + */ + public function create_hubspot_form( $feed_meta, $form_id ) { + + $this->initialize_api(); + + $hs_form = $this->generate_hubspot_form_object( $feed_meta, $form_id ); + + $api_result = $this->api->create_form( $hs_form ); + + if ( is_wp_error( $api_result ) ) { + return false; + } + + return array( + 'name' => $api_result['name'], + 'guid' => $api_result['guid'], + 'portal_id' => $api_result['portalId'], + ); + } + + /** + * Updates an existing HubSpot form to match the provided feed $settings, or creates a new one if GUID doesn't match any form in HubSpot. + * + * @since 1.0 + * + * @param string $guid GUID of HubSpot form to be updated. + * @param array $settings Current feed settings. + * @param int $form_id The ID of the form the feed belongs to. + * + * @return array|bool Returns an array with the newly updated form name and form GUID if updated successfully. Otherwise return false. + */ + public function update_hubspot_form( $guid, $settings, $form_id ) { + + // 1- Get HubSpot form. + $existing_form = $this->api->get_form( $guid ); + if ( is_wp_error( $existing_form ) ) { + + $error_data = $existing_form->get_error_data(); + if ( $error_data['status'] == 404 ) { + + // Form doesn't exist. Create a new one. + return $this->create_hubspot_form( $settings, $form_id ); + } else { + // Error when getting existing form. Abort to throw validation error. + return false; + } + } else { + + // Form exists. Update it. + $form = $this->generate_hubspot_form_object( $settings, $form_id ); + $api_result = $this->api->update_form( $guid, $form ); + + if ( is_wp_error( $api_result ) ) { + return false; + } + + return array( + 'name' => $api_result['name'], + 'guid' => $api_result['guid'], + 'portal_id' => $api_result['portalId'], + ); + } + } + + /** + * Based on the fields mapped in the feed settings ( i.e. $settings variable ), creates a HubSpot form object to create or update a HubSpot form. + * + * @since 1.0 + * + * @param array $feed_meta Current feed settings. + * @param int $form_id The ID of the form the feed belongs to. + * + * @return array Returns a HubSpot form object based on specified settings. + */ + public function generate_hubspot_form_object( $feed_meta, $form_id ) { + + $fields = array(); + $properties = $this->get_hubspot_contact_properties(); + $settings_fields = array_merge( + rgar( $properties, 'basic', array() ), + rgar( $properties, 'additional', array() ), + rgar( $properties, 'selection', array() ) + ); + $external_options = array(); + + // Build basic fields. + foreach ( $feed_meta as $setting_name => $setting_value ) { + + $field_name = $this->get_hubspot_contact_property_name( $setting_name ); + if ( empty( $setting_value ) || ! $field_name ) { + continue; + } + + $setting_field = $this->find_setting_field( $setting_name, $settings_fields ); + if ( ! $setting_field ) { + continue; + } + + // Lifecycle stages don't work as fields; add them as external_options instead. + // Lifecycle stage has to be set for both contacts and companies. + if ( $field_name === 'lifecyclestage' ) { + // Set the lifescycle state for contact. + $opt = array( + 'referenceType' => 'PIPELINE_STAGE', + 'objectTypeId' => '0-1', + 'propertyName' => 'lifecyclestage', + 'id' => $setting_value, + ); + + $external_options[] = $opt; + + // Set the lifescycle state for company. + $opt['objectTypeId'] = '0-2'; + $external_options[] = $opt; + continue; + } + + $field_arr = array( + 'name' => $field_name, + 'label' => $setting_field['label'], + 'type' => $setting_field['_hs_type'], + 'fieldType' => $setting_field['_hs_field_type'], + ); + + // Choice-based fields should use the options available in Hubspot + if ( ! empty( $setting_field['choices'] ) ) { + $field_arr['options'] = $setting_field['choices']; + $field_arr['selectedOptions'] = array( $setting_value ); + } + + $fields[] = $field_arr; + } + + + // Adding Contact Owner field. + $fields[] = array( + 'name' => 'hubspot_owner_id', + 'label' => 'Contact Owner', + 'type' => 'enumeration', + 'fieldType' => 'hidden', + ); + + // Build additional fields. + if ( is_array( $feed_meta['additional_fields'] ) ) { + foreach ( $feed_meta['additional_fields'] as $setting ) { + if ( rgar( $setting, 'custom_key' ) !== '' ) { + $setting['key'] = $setting['custom_key']; + } + + $setting_field = $this->find_setting_field( $setting['key'], $settings_fields ); + if ( ! $setting_field ) { + continue; + } + + $field_name = $this->get_hubspot_contact_property_name( $setting_field['name'] ); + if ( ! $field_name ) { + continue; + } + + // Ensures File upload fields aren't named the same as the contact property. + // Gets around strange HubSpot behavior that causes file URL to be wiped out when form field and contact property have the same label. + $field_label = $setting_field['_hs_field_type'] == 'file' ? $setting_field['label'] . ' - ' . uniqid() : $setting_field['label']; + + $fields[] = array( + 'name' => $field_name, + 'label' => $field_label, + 'type' => $setting_field['_hs_type'], + 'fieldType' => $setting_field['_hs_field_type'], + ); + } + } + + $form_name = $feed_meta['_hs_form'] . $this->get_hubspot_formname_warning(); + $hs_form = array( + 'name' => $form_name, + 'formFieldGroups' => array( + array( + 'fields' => $fields, + ), + ), + ); + + // Field has externalOptions (lifecyclestage, probably). Add to form. + if ( ! empty( $external_options ) ) { + $hs_form['selectedExternalOptions'] = $external_options; + } + + // Only available when run from the form settings area. + $form = $this->get_current_form(); + + if ( empty( $form ) ) { + $form = GFAPI::get_form( $form_id ); + } + + /** + * Allows the HubSpot form object to be filtered before saving the feed. + * + * @since 1.0 + * + * @param array $hs_form The HubSpot form object to be filtered. + * @param array $feed_meta The current feed settings object. + * @param array $form The current Gravity Form Object. + */ + return gf_apply_filters( array( 'gform_hubspot_form_object_pre_save_feed', $form_id ), $hs_form, $feed_meta, $form ); + + } + + /** + * Generates the form submission object to be sent to HubSpot when the form is submitted. + * + * @since 1.0 + * + * @param array $feed Current Feed Object. + * @param array $entry Current Entry Object. + * @param array $form Current Form Object. + * + * @return array Returns a submission object in the format accepted by HubSpot's Submit Form endpoint. + */ + public function generate_form_submission_object( $feed, $entry, $form ) { + + $fields = array(); + $properties = $this->get_hubspot_contact_properties(); + + if ( empty( $properties ) ) { + $this->log_debug( __METHOD__ . '(): Aborting; no contact properties.' ); + + return array(); + } + + $settings_fields = array_merge( + rgar( $properties, 'basic', array() ), + rgar( $properties, 'additional', array() ) + ); + + $enum_properties = $this->get_enumeration_properties( $form ); + + // Build basic fields. + foreach ( $feed['meta'] as $key => $field_id ) { + + $property_name = $this->get_hubspot_contact_property_name( $key ); + $is_field_mapped = ! empty( $field_id ) && $property_name; + + if ( ! $is_field_mapped ) { + continue; + } + + $fields[] = array( + 'name' => $property_name, + 'value' => isset( $enum_properties[ $property_name ] ) ? trim( $field_id ) : $this->get_field_value( $form, $entry, $field_id ), + ); + } + + $owner_id = $this->get_contact_owner( $feed, $entry, $form ); + if ( $owner_id ) { + $fields[] = array( + 'name' => 'hubspot_owner_id', + 'value' => $owner_id, + ); + } + + // Build additional fields. + if ( is_array( $feed['meta']['additional_fields'] ) ) { + foreach ( $feed['meta']['additional_fields'] as $setting ) { + if ( rgar( $setting, 'custom_key' ) !== '' ) { + $setting['key'] = $setting['custom_key']; + } + + $setting_field = $this->find_setting_field( $setting['key'], $settings_fields ); + if ( ! $setting_field ) { + continue; + } + + $property_name = $this->get_hubspot_contact_property_name( $setting_field['name'] ); + $field_id = $setting['value']; + $is_field_mapped = ! empty( $field_id ) && $property_name; + if ( ! $is_field_mapped ) { + continue; + } + + $fields[] = array( + 'name' => $property_name, + 'value' => $this->get_prepared_field_value( $field_id, rgar( $setting_field, '_hs_field_type' ), $form, $entry ), + ); + } + } + + $context = array( + 'pageUri' => $this->get_page_uri( rgar( $entry, 'source_url' ) ), + 'pageName' => $form['title'], + ); + + $hutk = $this->get_hutk_cookie_value( rgar( $entry, 'id' ) ); + if ( ! empty( $hutk ) ) { + $context['hutk'] = $hutk; + } + + // Pass entry IP to HubSpot unless personal data settings for a form are set to not save the submitter's IP address. + if ( rgars( $form, 'personalData/preventIP' ) !== true ) { + $context['ipAddress'] = $entry['ip']; + } + + $submission_data = array( + 'fields' => $fields, + 'context' => $context, + ); + + /** + * Allows the HubSpot submission data to be filtered before being sent to HubSpot + * + * @since 1.0 + * + * @param array $submission_data The HubSpot submission data to be filtered. + * @param array $feed The current feed settings object. + * @param array $entry The current Entry Object. + * @param array $form The current Form Object. + */ + return gf_apply_filters( array( 'gform_hubspot_submission_data', $form['id'] ), $submission_data, $feed, $entry, $form ); + + } + + /** + * Returns the value to be used for the pageUri context property. + * + * @since 1.9 + * + * @param string $entry_source_url The value of the entry source_url property. + * + * @return string + */ + public function get_page_uri( $entry_source_url ) { + if ( + ! empty( $entry_source_url ) && ( + ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || + ( defined( 'DOING_CRON' ) && DOING_CRON ) || + ( defined( 'REST_REQUEST' ) && REST_REQUEST ) + ) + ) { + // Using the entry value instead of the Ajax/cron/REST request endpoint. + + return $entry_source_url; + } + + return GFFormsModel::get_current_page_url(); + } + + /** + * Gets the mapped field value in the format required for the specified HubSpot field type. + * + * @since 1.6 + * + * @param string $field_id The ID of the mapped form/entry field. + * @param string $hs_field_type The HubSpot field type. + * @param array $form The form currently being processed. + * @param array $entry The entry currently being processed. + * + * @return mixed + */ + public function get_prepared_field_value( $field_id, $hs_field_type, $form, $entry ) { + switch ( $hs_field_type ) { + case 'booleancheckbox': + return $this->prepare_boolean_field_value( $form, $entry, $field_id ); + + case 'checkbox': + return $this->prepare_checkbox_field_value( $form, $entry, $field_id ); + + case 'radio': + case 'select': + return $this->prepare_radio_select_field_value( $form, $entry, $field_id ); + } + + return $this->get_field_value( $form, $entry, $field_id ); + } + + /** + * Returns the value for a booleancheckbox HubSpot field. + * + * @since 1.6 + * + * @param array $form The form currently being processed. + * @param array $entry The entry currently being processed. + * @param string $field_id The ID of the mapped form/entry field. + * + * @return bool + */ + public function prepare_boolean_field_value( $form, $entry, $field_id ) { + $value = $this->get_field_value( $form, $entry, $field_id ); + $field = GFAPI::get_field( $form, $field_id ); + + if ( $field instanceof GF_Field_Consent && esc_html__( 'Not Checked', 'gravityforms' ) === $value ) { + return false; + } + + return ! ( empty( $value ) || ( is_string( $value ) && strtolower( $value ) === 'false' ) ); + } + + /** + * Returns the value for a checkbox HubSpot field. + * + * @since 1.6 + * + * @param array $form The form currently being processed. + * @param array $entry The entry currently being processed. + * @param string $field_id The ID of the mapped form/entry field. + * + * @return string + */ + public function prepare_checkbox_field_value( $form, $entry, $field_id ) { + $field = GFAPI::get_field( $form, $field_id ); + + if ( $field instanceof GF_Field_Checkbox ) { + $values = array(); + foreach ( $field->inputs as $input ) { + $value = rgar( $entry, (string) $input['id'] ); + if ( ! rgblank( $value ) ) { + if ( $field->enablePrice ) { + $items = explode( '|', $value ); + $value = $items[0]; + } + $values[] = $value; + } + } + + return $this->maybe_override_field_value( implode( ';', $values ), $form, $entry, $field_id ); + } elseif ( $field instanceof GF_Field_MultiSelect ) { + return $this->maybe_override_field_value( implode( ';', $field->to_array( rgar( $entry, $field_id ) ) ), $form, $entry, $field_id ); + } + + return $this->get_field_value( $form, $entry, $field_id ); + } + + /** + * Returns the value for radio and select HubSpot fields. + * + * @since 1.6 + * + * @param array $form The form currently being processed. + * @param array $entry The entry currently being processed. + * @param string $field_id The ID of the mapped form/entry field. + * + * @return string + */ + public function prepare_radio_select_field_value( $form, $entry, $field_id ) { + $field = GFAPI::get_field( $form, $field_id ); + + if ( $field instanceof GF_Field_Radio || $field instanceof GF_Field_Select ) { + $value = rgar( $entry, $field_id ); + if ( ! rgblank( $value ) && $field->enablePrice ) { + $items = explode( '|', $value ); + $value = $items[0]; + } + + return $this->maybe_override_field_value( $value, $form, $entry, $field_id ); + } + + return $this->get_field_value( $form, $entry, $field_id ); + } + + /** + * Returns the value of the selected field. Overrides the parent function to include Address Line 2 with Street Address + * + * @param array $form Current Form Object + * @param array $entry Current Entry Object + * @param string $field_id Current Field ID + * + * @return string The value of the current field specified in $field_id + */ + public function get_field_value( $form, $entry, $field_id ) { + + $field_value = parent::get_field_value( $form, $entry, $field_id ); + $field = GFFormsModel::get_field( $form, $field_id ); + + //Appending Line 2 to Street Address + if ( rgobj( $field, 'type' ) == 'address' && (string) $field_id == (string) $field->id . '.1' ) { + $field_value .= ' ' . parent::get_field_value( $form, $entry, $field['id'] . '.2' ); + } + return $field_value; + } + + /*** + * Searches for a field named or labeled $name in the list of settings fields specified by the $settings_fields array. Returns the field if it finds it, or false if not. + * + * @since 1.0 + * + * @param string $name Name of the field to look for. + * @param array $settings_fields Array of all settings fields. + * + * @return array|bool Returns the field whose name matches the specified $name variable + */ + public function find_setting_field( $name, $settings_fields ) { + + foreach ( $settings_fields as $field ) { + if ( $field['name'] === $name || $field['label'] === $name ) { + return $field; + } + } + return false; + } + + /** + * Gets a list of HubSpot owners + * + * @since 1.0 + * + * @return array|null Return a list of available Contact Owners configured in HubSpot + */ + public function get_hubspot_owners() { + if ( rgget( 'subview' ) !== $this->_slug || rgget( 'fid' ) === '' || ! $this->initialize_api() ) { + return null; + } + + global $_owner_choices; + + if ( ! $_owner_choices ) { + + $owners = $this->api->get_owners(); + + if ( is_wp_error( $owners ) ) { + return array( + array( + 'label' => esc_html__( 'Error retrieving HubSpot owners', 'gravityformshubspot' ), + 'value' => '', + ), + ); + } + + $_owner_choices = array(); + foreach ( $owners as $owner ) { + + if ( empty( $owner['id'] ) ) { + continue; + } + + if ( ! empty( $owner['firstName'] ) && ! empty( $owner['lastName'] ) ) { + $owner_label = "{$owner['firstName']} {$owner['lastName']}"; + } else { + $owner_label = rgar( $owner, 'email', esc_html__( 'No Name', 'gravityformshubspot' ) ); + } + + $_owner_choices[] = array( + 'label' => $owner_label, + 'value' => $owner['id'], + ); + } + + $_owner_choices = wp_list_sort( $_owner_choices, 'label' ); + } + + return $_owner_choices; + } + + /** + * Gets a list of contact properties, split into two arrays. "basic" contains basic contact properties and "additional" contains all others. + * + * @since 1.0 + * + * @return array Returns an associative array with two keys. The "basic" key contains an array with basic contact properties. The "additional" key contains an array with all other contact properties. + */ + public function get_hubspot_contact_properties() { + + $contact_properties = GFCache::get( self::CUSTOM_PROPERTIES_CACHE_KEY ); + + if ( ! empty( $contact_properties ) ) { + return $contact_properties; + } + + if ( ! $this->initialize_api() ) { + $this->log_debug( __METHOD__ . '(): Aborting; API not initialized.' ); + + return array(); + } + + $basic_field_names = array( 'firstname', 'lastname', 'email' ); + + // Only the following supported property types will be supported for mapping. + $supported_property_types = array( 'string', 'number', 'date', 'enumeration' ); + + $enum_properties = $this->get_enumeration_properties(); + + // Property names that are not supported for mapping to be ignored. + $ignore_property_names = array( 'hubspot_owner_id' ); + + $basic_fields = array(); + $additional_fields = array(); + $selection_fields = array(); + + $empty_choice = array( + 'label' => esc_html__( 'Select a Contact Property', 'gravityformshubspot' ), + 'value' => '', + ); + $groups = array( $empty_choice ); + + $labels = array(); + + $property_groups = $this->api->get_contact_properties(); + $is_props_wp_error = is_wp_error( $property_groups ); + + if ( $is_props_wp_error ) { + $this->log_debug( __METHOD__ . '(): Unable to get contact properties; ' . $property_groups->get_error_message() ); + } else { + foreach ( $property_groups as $property_group ) { + $group = array( 'label' => $property_group['displayName'], 'choices' => array() ); + + foreach ( $property_group['properties'] as $property ) { + + $field = array( + 'type' => 'field_select', + 'class' => 'medium', + 'label' => $property['label'], + 'name' => '_hs_customer_' . $property['name'], + 'value' => '_hs_customer_' . $property['name'], + '_hs_type' => $property['type'], + '_hs_field_type' => $property['fieldType'], + 'required' => $property['name'] == 'email', + ); + + $labels[ $property['label'] ][] = $property; + + $supported_in_additional_fields = ! in_array( $property['name'], $ignore_property_names ) && in_array( $property['type'], $supported_property_types ); + + if ( in_array( $property['name'], $basic_field_names, true ) ) { + + $basic_fields[] = $field; + + } elseif ( isset( $enum_properties[ $property['name'] ] ) ) { + $prop = $enum_properties[ $property['name'] ]; + $field['default_value'] = rgar( $prop, 'default_value' ); + $field['tooltip'] = rgar( $prop, 'tooltip' ); + $field['choices'] = $prop['allows_blank'] ? array( + array( + 'value' => '', + 'label' => esc_html__( 'Select an Option', 'gravityformshubspot' ), + ), + array( 'value' => ' ', 'label' => '' ), + ) : array(); + $field['choices'] = array_merge( $field['choices'], $property['options'] ); + + $selection_fields[] = $field; + } elseif ( $supported_in_additional_fields && $property['readOnlyValue'] === false ) { + + $additional_fields[] = $field; + $group['choices'][] = $field; + + } + } + + if ( ! empty( $group['choices'] ) ) { + usort( $group['choices'], array( $this, 'sort_properties' ) ); + $groups[] = $group; + } + } + + ksort( $labels ); + usort( $basic_fields, array( $this, 'sort_properties' ) ); + usort( $additional_fields, array( $this, 'sort_properties' ) ); + } + + $contact_properties = array( + 'basic' => $basic_fields, + 'additional' => $additional_fields, + 'selection' => $selection_fields, + 'grouped' => $groups + ); + + if ( ! $is_props_wp_error ) { + GFCache::set( self::CUSTOM_PROPERTIES_CACHE_KEY , $contact_properties, true, HOUR_IN_SECONDS ); + } + + return $contact_properties; + } + + /** + * Returns an array of enumeration field names to be displayed for mapping + * + * @since 1.0 + * + * @param array $form The current Form Object + * + * @return array Returns an array of enumeration fields to be mapped + */ + public function get_enumeration_properties( $form = null ) { + + if ( ! $form ) { + $form = $this->get_current_form(); + } + + /** + * Allows the list of selection properties settings to be changed dynamically. Useful when drop down or radio button custom fields are added in HubSpot and there is a need specify one + * of the options when creating the contact + */ + return apply_filters( 'gform_hubspot_custom_settings', + array( + 'hs_lead_status' => array( 'allows_blank' => true, 'tooltip' => esc_html__( '
Lead Status
Select the lead status value the newly added contact should be set to.', 'gravityformshubspot' ) ), + 'lifecyclestage' => array( 'allows_blank' => false, 'default_value' => 'lead', 'tooltip' => esc_html__( '
Lifecycle Stage
Select the lifecycle stage value the newly added contact should be set to.', 'gravityformshubspot' ) ), + ), + $form + ); + } + + /** + * Saves the hubspotutk cookie to the entry meta so it is available when the feed is processed in another request. + * + * @since 1.9 + * + * @param array $feed The feed being delayed. + * @param array $entry The entry currently being processed. + * @param array $form The form currently being processed. + */ + public function delay_feed( $feed, $entry, $form ) { + $value = $this->get_hutk_cookie_value(); + if ( empty( $value ) ) { + return; + } + + $entry_id = absint( rgar( $entry, 'id' ) ); + $form_id = absint( rgar( $form, 'id' ) ); + if ( empty( $entry_id ) || empty( $form_id ) ) { + return; + } + + gform_update_meta( $entry_id, self::HUTK_COOKIE_META_KEY, $value, $form_id ); + } + + /** + * Returns the hubspotutk value from $_COOKIE or the entry meta. + * + * @since 1.9 + * + * @param null|int $entry_id Null or the ID of the entry currently being processed. + * + * @return string|false + */ + public function get_hutk_cookie_value( $entry_id = null ) { + $value = rgar( $_COOKIE, 'hubspotutk', false ); + + if ( ! empty( $value ) ) { + return $value; + } + + $entry_id = absint( $entry_id ); + if ( empty( $entry_id ) ) { + return $value; + } + + return gform_get_meta( $entry_id, self::HUTK_COOKIE_META_KEY ); + } + + /** + * Process the HubSpot feed. + * + * @since 1.0 + * + * @param array $feed Feed object. + * @param array $entry Entry object. + * @param array $form Form object. + */ + public function process_feed( $feed, $entry, $form ) { + + // Create HubSpot submission object. + $submission_data = $this->generate_form_submission_object( $feed, $entry, $form ); + if ( empty( $submission_data ) ) { + $this->add_feed_error( esc_html__( 'Feed was not processed because the submission object was empty.', 'gravityformshubspot' ), $feed, $entry, $form ); + + return new WP_Error( 'empty_submission_object', 'The submission object was empty.' ); + } + + // If API instance is not initialized, exit. + if ( ! $this->initialize_api( false ) ) { + + // Log that we cannot process the feed. + $this->add_feed_error( esc_html__( 'Feed was not processed because API was not initialized.', 'gravityformshubspot' ), $feed, $entry, $form ); + + return new WP_Error( 'api_not_initialized', 'API not initialized.' ); + } + + $response = $this->api->submit_form( $feed['meta']['_hs_portal_id'], $feed['meta']['_hs_form_guid'], $submission_data ); + + if ( is_wp_error( $response ) ) { + $this->add_feed_error( sprintf( esc_html__( 'There was an error when creating the contact in HubSpot. %s', 'gravityformshubspot' ), $response->get_error_message() ), $feed, $entry, $form ); + $this->log_error( __METHOD__ . '(): Unable to create the contact; error data: ' . print_r( $response->get_error_data(), true ) ); + } + } + + /** + * Given a settings key, converts it into a Contact Property Name (if applicable). If specified settings key is not a Contact Property, returns false + * + * @since 1.0 + * + * @param string $settings_key Settings key to be transformed into a Contact Property Name. + * + * @return bool|mixed Returns the proper HubSpot Contact Property name based on the specified settings key. If the specified settings key is not a Contact Property, return false. + */ + public function get_hubspot_contact_property_name( $settings_key ) { + if ( strpos( $settings_key, '_hs_customer_' ) === 0 ) { + return str_replace( '_hs_customer_', '', $settings_key ); + } + return false; + } + + /** + * Used for usort() function to sort customer properties. + * + * @since 1.0 + * + * @param array $a Array. + * @param array $b Array. + * + * @return int + */ + public function sort_properties( $a, $b ) { + return strcmp( $a['label'], $b['label'] ); + } + + /** + * Evaluates who the Contact Owner is supposed to be (based on feed settings), and return the owner id. + * + * @since 1.0 + * + * @param array $feed Current Feed Object + * @param array $entry Current Entry Object + * @param array $form Current Form Object + * + * @return false|int Returns the Contact Owner's ID if one is supposed to be assigned to the contact. Otherwise returns false. + */ + public function get_contact_owner( $feed, $entry, $form ) { + + $owner_id = false; + + // Set contact owner. + if ( rgar( $feed['meta'], 'contact_owner' ) === 'select' && rgar( $feed['meta'], 'contact_owner_select' ) !== '' ) { + + $owner_id = rgar( $feed['meta'], 'contact_owner_select' ); + + } elseif ( rgar( $feed['meta'], 'contact_owner' ) === 'conditional' && ! rgar( $feed['meta'], 'conditions' ) !== '' ) { + + $conditions = rgar( $feed['meta'], 'conditions' ); + $entry_meta_keys = array_keys( GFFormsModel::get_entry_meta( $form['id'] ) ); + foreach ( $conditions as $rule ) { + if ( in_array( $rule['fieldId'], $entry_meta_keys ) ) { + + $is_value_match = GFFormsModel::is_value_match( rgar( $entry, $rule['fieldId'] ), $rule['value'], $rule['operator'], null, $rule, $form ); + + } else { + + $source_field = GFFormsModel::get_field( $form, $rule['fieldId'] ); + $field_value = empty( $entry ) ? GFFormsModel::get_field_value( $source_field, array() ) : GFFormsModel::get_lead_field_value( $entry, $source_field ); + $is_value_match = GFFormsModel::is_value_match( $field_value, $rule['value'], $rule['operator'], $source_field, $rule, $form ); + } + + if ( isset( $is_value_match ) && $is_value_match ) { + $owner_id = rgar( $rule, 'owner' ); + + break; + } + } + } + return $owner_id; + } + + /** + * Returns the warning string to be added to the HubSpot form names. + * + * @since 1.0 + * + * @return string + */ + public function get_hubspot_formname_warning() { + return ' ( ' . esc_html__( 'Do not delete or edit', 'gravityformshubspot' ) . ' )'; + } + + /** + * Returns the HubSpot Form name without the warning appended to it. + * + * @since 1.0 + * + * @param string $form_name The form name to be cleaned + * + * @return string + */ + public function get_hubspot_formname_without_warning( $form_name ) { + + return str_replace( $this->get_hubspot_formname_warning(), '', $form_name ); + + } + + /** + * Get action name for authentication state. + * + * @since 1.4 + * + * @return string + */ + public function get_authentication_state_action() { + + return 'gform_hubspot_authentication_state'; + + } + + /** + * Add tracking JS snippet to footer if there are any Hubspot feeds. + * + * @since 1.0 + */ + public function action_wp_footer() { + + $add_tracking = true; + + /** + * Allows the tracking script to be removed. + * + * @since 1.0 + * + * @param true $add_tracking Whether to output the tracking script. + */ + $add_tracking = apply_filters( 'gform_hubspot_output_tracking_script', $add_tracking ); + + if ( ! $add_tracking ) { + return; + } + + $feeds = $this->get_feeds(); + if ( empty( $feeds ) ) { + return; + } + + $portal_id = rgars( $feeds, '0/meta/_hs_portal_id' ); + + if ( $portal_id && strlen( $portal_id ) > 0 ) { + if ( ! is_admin() ) { + ?> + + + + th, #gaddon-setting-row-contact_owner_conditional > th { + display:none !important; +} + +.contact_owner_section { + display:none; +} + +.add-item { + margin-left: 6px; +} +.add-item, .remove-item { + position: relative; + color: #444; + top: 3px; +} + +#feed_condition_conditional_logic_container { + margin-top:10px; +} + +.gform-routings-field__buttons { + position: relative; + vertical-align: middle; + width: 40px; +} + +.gform-routings-field__buttons .repeater-buttons { + align-items: center; + display: flex; + flex: 1 0; + position: absolute; + top: 0; + bottom: 0; + height: 100%; + width: 100%; +} diff --git a/wp/wp-content/plugins/gravityformshubspot/css/form_settings.min.css b/wp/wp-content/plugins/gravityformshubspot/css/form_settings.min.css new file mode 100644 index 00000000..9535339d --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/css/form_settings.min.css @@ -0,0 +1 @@ +.gform-routing-row{vertical-align:top}#assignees,#editable_fields{left:-9999px;position:absolute}.rtl #assignees,.rtl #editable_fields{left:auto;right:-9999px}table.gforms_form_settings th{border-left:0;padding-left:0!important}table.gform-routings thead th{padding:0}table.gform-routings tr.gform-routing-row td{vertical-align:top}table.gform-routings tr.gform-routing-row td .repeater-buttons{white-space:nowrap}.repeater-buttons{display:inline-block}.gform-routing-field,.gform-routing-owners{min-width:150px;width:100%}.gform-routing-operator{width:120px}.gform-routing-value{width:190px}html:not([dir=rtl]) .gform-routings__heading{text-align:left}html[dir=rtl] .gform-routings__heading{text-align:right}#gaddon-setting-row-additional_fields>th,#gaddon-setting-row-contact_owner_conditional>th{display:none!important}.contact_owner_section{display:none}.add-item{margin-left:6px}.add-item,.remove-item{color:#444;position:relative;top:3px}#feed_condition_conditional_logic_container{margin-top:10px}.gform-routings-field__buttons{position:relative;vertical-align:middle;width:40px}.gform-routings-field__buttons .repeater-buttons{align-items:center;bottom:0;display:flex;flex:1 0;height:100%;position:absolute;top:0;width:100%} \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.css b/wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.css new file mode 100644 index 00000000..76cf874f --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.css @@ -0,0 +1,31 @@ +#deauth_scope { + display: none; + margin-top: 18px; +} + +.deauth_button { + margin-top: 0.5em !important; +} + +#gform_hubspot_deauth_button { + border: 1px solid #9E0B0F; + background: #9E0B0F; + color: #FFF; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 173, 12, 17, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 173, 12, 17, 0.5 ); + text-shadow: none; +} + +#tab_gravityformshubspot table.gforms_form_settings > tbody > tr > th { + padding: 0; + width: 0; +} + +#tab_gravityformshubspot table.gforms_form_settings #gform-settings-save, +#tab_gravityformshubspot .gform-settings-save-container { + display: none; +} + +#last_cache_clearance { + font-size: 0.75rem; +} diff --git a/wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.min.css b/wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.min.css new file mode 100644 index 00000000..d0f24999 --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/css/plugin_settings.min.css @@ -0,0 +1 @@ +#deauth_scope{display:none;margin-top:18px}.deauth_button{margin-top:.5em!important}#gform_hubspot_deauth_button{background:#9e0b0f;border:1px solid #9e0b0f;box-shadow:inset 0 2px 5px -3px rgba(173,12,17,.5);color:#fff;text-shadow:none}#tab_gravityformshubspot table.gforms_form_settings>tbody>tr>th{padding:0;width:0}#tab_gravityformshubspot .gform-settings-save-container,#tab_gravityformshubspot table.gforms_form_settings #gform-settings-save{display:none}#last_cache_clearance{font-size:.75rem} \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformshubspot/hubspot.php b/wp/wp-content/plugins/gravityformshubspot/hubspot.php new file mode 100644 index 00000000..545f5744 --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/hubspot.php @@ -0,0 +1,75 @@ + + + diff --git a/wp/wp-content/plugins/gravityformshubspot/includes/class-gf-hubspot-api.php b/wp/wp-content/plugins/gravityformshubspot/includes/class-gf-hubspot-api.php new file mode 100644 index 00000000..bd7cd82d --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/includes/class-gf-hubspot-api.php @@ -0,0 +1,362 @@ +auth_data = $auth_data; + } + + /** + * Make API request. + * + * @since 1.0 + * + * @param string $path Request path. + * @param array $options Request options. + * @param string $method Request method. Defaults to GET. + * @param string $return_key Array key from response to return. Defaults to null (return full response). + * @param int|array $response_code Expected HTTP response code. + * + * @return array|WP_Error + */ + public function make_request( $path = '', $options = array(), $method = 'GET', $return_key = null, $response_code = 200 ) { + + // Log API call succeed. + gf_hspot()->log_debug( __METHOD__ . '(): Making request to: ' . $path ); + + // Get authentication data. + $auth_data = $this->auth_data; + + // Build request URL. + if ( $path === 'token/revoke' ) { + $request_url = 'https://api.hubapi.com/oauth/v1/refresh-tokens/' . $options['token']; + + // Execute request. + $response = wp_remote_request( $request_url, array( 'method' => $method ) ); + } else { + $request_url = strpos( $path, 'https://' ) === 0 ? $path : $this->api_url . $path; + + // Add options if this is a GET request. + if ( 'GET' === $method ) { + $request_url = add_query_arg( $options, $request_url ); + } + + // Prepare request arguments. + $args = array( + 'method' => $method, + 'headers' => array( + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $auth_data['access_token'], + 'Content-Type' => 'application/json', + ), + ); + + // Add request arguments to body. + if ( in_array( $method, array( 'POST', 'PUT' ) ) ) { + $args['body'] = json_encode( $options ); + } + + // Execute API request. + $response = wp_remote_request( $request_url, $args ); + } + + if ( is_wp_error( $response ) ) { + gf_hspot()->log_error( __METHOD__ . '(): HTTP request failed; ' . $response->get_error_message() ); + + return $response; + } + + // If an incorrect response code was returned, return WP_Error. + $retrieved_response_code = wp_remote_retrieve_response_code( $response ); + if ( is_int( $response_code ) ) { + $response_code = array( $response_code ); + } + if ( ! in_array( $retrieved_response_code, $response_code, true ) ) { + $response_code = implode( ', ', $response_code ); + $error_message = "Expected response code: {$response_code}. Returned response code: {$retrieved_response_code}."; + $json_body = gf_hspot()->maybe_decode_json( $response['body'] ); + + $error_data = array( 'status' => $retrieved_response_code ); + if ( ! rgempty( 'message', $json_body ) ) { + $error_message = $json_body['message']; + } + if ( ! rgempty( rgars( $json_body, 'errors' ) ) ) { + $error_data['data'] = rgars( $json_body, 'errors' ); + } + + // 401 Unauthorized - Returned when the authentication provided is invalid. + if ( $retrieved_response_code === 401 ) { + $log = 'API credentials are invalid;'; + } else { + $log = 'API errors returned;'; + } + + gf_hspot()->log_error( __METHOD__ . "(): $log " . $error_message . '; error data: ' . print_r( $error_data, true ) ); + + return new WP_Error( 'hubspot_api_error', $error_message, $error_data ); + } + + // Convert JSON response to array. + $response = gf_hspot()->maybe_decode_json( $response['body'] ); + + // If a return key is defined and array item exists, return it. + if ( ! empty( $return_key ) && rgar( $response, $return_key ) ) { + return rgar( $response, $return_key ); + } + + return $response; + + } + + /** + * Refresh access tokens. + * + * @since 1.0 + * + * @return array|WP_Error + */ + public function refresh_token() { + // Get authentication data. + $auth_data = $this->auth_data; + + // If refresh token is not provided, throw exception. + if ( ! rgar( $auth_data, 'refresh_token' ) ) { + return new WP_Error( 'hubspot_refresh_token_error', esc_html__( 'Refresh token must be provided.', 'gravityformshubspot' ) ); + } + + $args = array( + 'body' => array( + 'refresh_token' => $auth_data['refresh_token'], + 'state' => wp_create_nonce( gf_hspot()->get_authentication_state_action() ), + ), + ); + + $response = wp_remote_post( gf_hspot()->get_gravity_api_url( '/auth/hubspot/refresh' ), $args ); + $response_code = wp_remote_retrieve_response_code( $response ); + $message = wp_remote_retrieve_response_message( $response ); + + if ( $response_code === 200 ) { + $auth_payload = json_decode( wp_remote_retrieve_body( $response ), true ); + $auth_payload = json_decode( $auth_payload['auth_payload'], true ); + + if ( isset( $auth_payload['access_token'] ) && wp_verify_nonce( $auth_payload['state'], gf_hspot()->get_authentication_state_action() ) ) { + $auth_data['access_token'] = $auth_payload['access_token']; + $auth_data['refresh_token'] = $auth_payload['refresh_token']; + $auth_data['expires_in'] = $auth_payload['expires_in']; + + $this->auth_data = $auth_data; + + return $auth_data; + } + + if ( isset( $auth_payload['error'] ) ) { + $message = $auth_payload['error']; + } elseif ( isset( $auth_payload['status'] ) ) { + $message = $auth_payload['status']; + } + + } + + return new WP_Error( 'hubspot_refresh_token_error', $message, array( 'status' => $response_code ) ); + } + + /** + * Revoke authentication token. + * + * @since 1.0 + * + * @return array|WP_Error + */ + public function revoke_token() { + + // Get authentication data. + $auth_data = $this->auth_data; + + // If refresh token is not provided, throw exception. + if ( ! rgar( $auth_data, 'refresh_token' ) ) { + return new WP_Error( 'hubspot_revoke_token_error', esc_html__( 'Refresh token must be provided.', 'gravityformshubspot' ) ); + } + + return $this->make_request( 'token/revoke', array( 'token' => $auth_data['refresh_token'] ), 'DELETE', null, 204 ); + + } + + /** + * Get available users. + * + * @since 1.0 + * + * @return array|WP_Error + */ + public function get_contacts() { + static $contacts; + + if ( ! isset( $contacts ) ) { + $contacts = $this->make_request( 'contacts/v1/lists/all/contacts/all', array(), 'GET', 'users' ); + } + + return $contacts; + } + + /** + * Get contact properties. + * + * @since 1.0 + * + * @return array|WP_Error + */ + public function get_contact_properties() { + + $properties = $this->make_request( 'properties/v1/contacts/groups/?includeProperties=true', array(), 'GET' ); + + return $properties; + } + + /** + * Update contact properties by email. + * + * @since 1.0 + * + * @param string $email Email. + * @param array $data Contact data. + * + * @return array|WP_Error + */ + public function update_contact_by_email( $email, $data ) { + return $this->make_request( "contacts/v1/contact/createOrUpdate/email/{$email}/", $data, 'POST' ); + } + + /** + * Create a new form. + * + * @since 1.0 + * + * @param array $form The form options array. + * + * @return array|WP_Error + */ + public function create_form( $form ) { + return $this->make_request( 'forms/v2/forms', $form, 'POST' ); + } + + /** + * Get form by guid. + * + * @since 1.0 + * + * @param string $guid GUID of the form. + * + * @return array|WP_Error + */ + public function get_form( $guid ) { + return $this->make_request( "forms/v2/forms/{$guid}" ); + } + + /** + * Get all forms. + * + * @since 1.0 + * + * @return array|WP_Error Returns an array of forms + */ + public function get_forms() { + return $this->make_request( 'forms/v2/forms' ); + } + + /** + * Update the form. + * + * @since 1.0 + * + * @param string $guid GUID of the form. + * @param array $form The form options array. + * + * @return array|WP_Error + */ + public function update_form( $guid, $form ) { + + gf_hspot()->log_debug( 'Updating Form. GUID: ' . $guid ); + gf_hspot()->log_debug( 'Payload: ' . print_r( $form, true ) ); + + return $this->make_request( "forms/v2/forms/{$guid}", $form, 'POST' ); + } + + /** + * Delete form. + * + * @since 1.0 + * + * @param string $guid GUID of the form. + * + * @return array|WP_Error + */ + public function delete_form( $guid ) { + return $this->make_request( "forms/v2/forms/{$guid}", array(), 'DELETE', null, 204 ); + } + + /** + * Get contact owners from HubSpot. + * + * @since 1.0 + * @since 2.1 Updated to use the v3 endpoint. + * + * @return array|WP_Error + */ + public function get_owners() { + return $this->make_request( 'crm/v3/owners', array( 'limit' => 500 ), 'GET', 'results' ); + } + + /** + * Submit form data to HubSpot. + * + * @since 1.0 + * + * @param string $portal_id HubSpot portal ID. + * @param string $form_guid HubSpot form GUID. + * @param array $submission Form submission data. + * + * @return array|WP_Error + */ + public function submit_form( $portal_id, $form_guid, $submission ) { + + // Submit HubSpot form. + $url = "https://api.hsforms.com/submissions/v3/integration/submit/{$portal_id}/{$form_guid}"; + + gf_hspot()->log_debug( 'Submitting Form. URL:' . $url ); + gf_hspot()->log_debug( 'Payload: ' . print_r( $submission, true ) ); + + return $this->make_request( $url, $submission, 'POST' ); + } + +} diff --git a/wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.js b/wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.js new file mode 100644 index 00000000..71769cda --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.js @@ -0,0 +1,310 @@ +/* global jQuery, gform_hubspot_owner_settings_strings, gf_vars */ +/* eslint-disable no-var */ + +jQuery(document).ready( function() { + + new GFOwnerSetting(); + +} ); + +var legacyUI = gform_hubspot_owner_settings_strings.legacy_ui; +var prefix = { + input: legacyUI ? '_gaddon_setting_' : '_gform_setting_', + field: legacyUI ? 'gaddon-setting-row-' : 'gform_setting_', +}; + +function GFOwnerSetting() { + var $ = jQuery; + + /** + * Initializes the Contact Owner module in the HubSpot feed settings. + */ + this.init = function() { + this.initOwner(); + new GFConditionsSetting(); + }; + + /** + * Binds event listeners to the contact owner inputs and initializes the state. + */ + this.initOwner = function() { + var t = this; + + $( '#contact_owner0, #contact_owner1, #contact_owner2' ).on( 'change', function() { + t.toggleOwner( true ); + } ); + + this.toggleOwner( false ); + }; + + /** + * Toggles the active owner inputs. + * + * @param {boolean} doSlide + */ + this.toggleOwner = function( doSlide ) { + var ownerRadioIds = [ + '#' + prefix.field + 'contact_owner_select', + '#' + prefix.field + 'contact_owner_conditional', + ]; + var $section = $( '.contact_owner_section' ); + var $selectedOption = $( 'input[name="' + prefix.input + 'contact_owner"]:checked' ); + var selection = $selectedOption.val(); + + $( ownerRadioIds.join( ', ' ) ).hide(); + + // No contact owner selected. Hide and exit. + if ( selection === 'none' ) { + if ( doSlide && legacyUI ) { + $section.slideUp(); + } else { + $section.hide(); + } + return; + } + + // Show the contact owner section and the selected option. + if ( $section.is( ':hidden' ) ) { + if ( doSlide && legacyUI ) { + $section.slideDown(); + } else { + $section.show(); + } + } + + $( '#' + prefix.field + 'contact_owner_' + selection ).show(); + }; + + //Initializes this class + this.init(); +} + +function GFConditionsSetting() { + var $ = jQuery; + + //Instantiating conditions repeater + this.$element = jQuery('#gform_conditions_setting'); + this.fieldId = 'conditions'; + this.fieldName = prefix.input + 'conditions'; + this.options = null; + + this.init = function() { + + var t = this; + + this.options = { + fieldName: this.fieldName, + fieldId: this.fieldId, + fields: gform_hubspot_owner_settings_strings['fields'],// [{'id': '1', 'label':'Name'}, {'id':'2', 'label': 'Email'} ],// gf_routing_setting_strings['fields'], + owners: gform_hubspot_owner_settings_strings['owners'], + imagesURL: gf_vars.baseUrl + "/images", + items: this.getItems(), + operatorStrings: {"is":"is","isnot":"isNot", ">":"greaterThan", "<":"lessThan", "contains":"contains", "starts_with":"startsWith", "ends_with":"endsWith"}, + }; + + var routingsMarkup, headerMarkup; + headerMarkup = '{0}'; + headerMarkup += '{1}'; + headerMarkup += ''; + + headerMarkup = headerMarkup.gformFormat( gform_hubspot_owner_settings_strings.assign_to, gform_hubspot_owner_settings_strings.condition ); + routingsMarkup = '{0}{1}
'.gformFormat(headerMarkup, this.getNewRow()); + + var $routings = $(routingsMarkup); + + $routings.find('.repeater').repeater({ + + limit : 0, + items : this.options.items, + addButtonMarkup : '', + removeButtonMarkup: '', + callbacks : { + save : function (obj, data) { + $('#' + t.options.fieldId).val($.toJSON(data)); + }, + beforeAdd: function (obj, $elem, item) { + if ( item.owner ) { + $elem.find('.gform-routing-owners').val(item.owner); + } + + var $field = $elem.find('.gform-routing-field').first(); + $field.value = item.fieldId; + t.changeField($field); + + var $operator = $elem.find('.gform-routing-operator').first(); + $operator.value = item.operator; + + t.changeOperator($operator); + + var $value = $elem.find('.gform-routing-value'); + $value.val(item.value); + + }, + } + }) + .on('change', '.gform-routing-field', function (e) { + t.changeField(this); + }) + .on('change', '.gform-routing-operator', function () { + t.changeOperator(this); + }) + + this.$element.append($routings); + } + + this.getNewRow = function () { + var r = []; + + r.push( '{0}'.gformFormat( this.getOwners() ) ); + r.push( '{0}'.gformFormat( this.getFields() ) ); + r.push( '{0}'.gformFormat( this.getOperators( this.options.fields[0] ) ) ); + r.push( '{0}'.gformFormat( this.getValues() ) ); + r.push( '{buttons}' ); + + return '{0}'.gformFormat( r.join('') ); + }, + + this.getOwners = function () { + + var i, n, account, + owners = this.options.owners, + str = '"; + return str; + }, + + this.getFields = function () { + var i, j, key, val, label, groupLabel, options, numRows, + select = [], + settings = this.options.fields; + select.push('"); + return select.join(''); + }, + + this.changeOperator = function (operatorSelect) { + var $select = $(operatorSelect), + $buttons = $select.closest('tr').find('.repeater-buttons'); + var index = $buttons.find('.add-item ').data('index'); + var $fieldSelect = $select.closest('tr').find('.gform-routing-field'); + var filter = this.getFilter($fieldSelect.value); + if (filter) { + $select.closest('tr').find(".gform-routing-value").replaceWith(this.getValues(filter, operatorSelect.value, index)); + } + }, + + this.changeField = function (fieldSelect) { + var filter = this.getFilter(fieldSelect.value); + if (filter) { + var $select = $(fieldSelect), + $buttons = $select.closest('tr').find('.repeater-buttons'); + var index = $buttons.find('.add-item ').data('index'); + $select.closest('tr').find(".gform-routing-value").replaceWith(this.getValues(filter, null, index)); + $select.closest('tr').find(".gform-filter-type").val(filter.type).change(); + var $newOperators = $(this.getOperators(filter, index)); + $select.closest('tr').find(".gform-routing-operator").replaceWith($newOperators); + $select.closest('tr').find(".gform-routing-operator").change(); + } + }, + + this.getOperators = function (filter, index) { + if ( typeof index == 'undefined' || index === null ){ + index = '{i}'; + } + var i, operator, + operatorStrings = this.options.operatorStrings, + str = '"; + return str; + }, + + this.getValues = function (filter, selectedOperator, index) { + var i, val, text, str, options = ""; + + if ( typeof index == 'undefined' || index === null ){ + index = '{i}'; + } + + if ( filter && filter.values && selectedOperator != 'contains' ) { + for (i = 0; i < filter.values.length; i++) { + val = filter.values[i].value; + text = filter.values[i].text; + options += ''.gformFormat(val, text); + } + str = ''.gformFormat(index, options); + } else { + str = ''.gformFormat(index); + } + + return str; + }, + + this.getFilter = function (key) { + var fields = this.options.fields; + if (!key) + return; + for (var i = 0; i < fields.length; i++) { + if (key == fields[i].key) + return fields[i]; + if (fields[i].group) { + for (var j = 0; j < fields[i].filters.length; j++) { + if (key == fields[i].filters[j].key) + return fields[i].filters[j]; + } + } + + } + }, + + this.selected = function (selected, current){ + return selected == current ? 'selected="selected"' : ""; + } + + this.getItems = function () { + var json = $('#' + this.fieldId ).val(); + var default_items = [ {owner: '', fieldId: '0', operator: 'is', value: ''} ]; + var items = json ? $.parseJSON(json) : default_items; + return items; + } + + this.init(); + + String.prototype.format = function () { + var args = arguments; + return this.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' ? args[number] : match; + }); + }; + +} + diff --git a/wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.min.js b/wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.min.js new file mode 100644 index 00000000..bdd56622 --- /dev/null +++ b/wp/wp-content/plugins/gravityformshubspot/js/contact_owner_setting.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function(){new GFOwnerSetting});var legacyUI=gform_hubspot_owner_settings_strings.legacy_ui,prefix={input:legacyUI?"_gaddon_setting_":"_gform_setting_",field:legacyUI?"gaddon-setting-row-":"gform_setting_"};function GFOwnerSetting(){var r=jQuery;this.init=function(){this.initOwner(),new GFConditionsSetting},this.initOwner=function(){var t=this;r("#contact_owner0, #contact_owner1, #contact_owner2").on("change",function(){t.toggleOwner(!0)}),this.toggleOwner(!1)},this.toggleOwner=function(t){var e=["#"+prefix.field+"contact_owner_select","#"+prefix.field+"contact_owner_conditional"],o=r(".contact_owner_section"),i=r('input[name="'+prefix.input+'contact_owner"]:checked').val();r(e.join(", ")).hide(),"none"===i?t&&legacyUI?o.slideUp():o.hide():(o.is(":hidden")&&(t&&legacyUI?o.slideDown():o.show()),r("#"+prefix.field+"contact_owner_"+i).show())},this.init()}function GFConditionsSetting(){var n=jQuery;this.$element=jQuery("#gform_conditions_setting"),this.fieldId="conditions",this.fieldName=prefix.input+"conditions",this.options=null,this.init=function(){var r=this,t=(this.options={fieldName:this.fieldName,fieldId:this.fieldId,fields:gform_hubspot_owner_settings_strings.fields,owners:gform_hubspot_owner_settings_strings.owners,imagesURL:gf_vars.baseUrl+"/images",items:this.getItems(),operatorStrings:{is:"is",isnot:"isNot",">":"greaterThan","<":"lessThan",contains:"contains",starts_with:"startsWith",ends_with:"endsWith"}},t=(t=(t='{0}')+'{1}'+"").gformFormat(gform_hubspot_owner_settings_strings.assign_to,gform_hubspot_owner_settings_strings.condition),t='{0}{1}
'.gformFormat(t,this.getNewRow()),n(t));t.find(".repeater").repeater({limit:0,items:this.options.items,addButtonMarkup:'',removeButtonMarkup:'',callbacks:{save:function(t,e){n("#"+r.options.fieldId).val(n.toJSON(e))},beforeAdd:function(t,e,o){o.owner&&e.find(".gform-routing-owners").val(o.owner);var i=e.find(".gform-routing-field").first(),i=(i.value=o.fieldId,r.changeField(i),e.find(".gform-routing-operator").first());i.value=o.operator,r.changeOperator(i),e.find(".gform-routing-value").val(o.value)}}}).on("change",".gform-routing-field",function(t){r.changeField(this)}).on("change",".gform-routing-operator",function(){r.changeOperator(this)}),this.$element.append(t)},this.getNewRow=function(){var t=[];return t.push("{0}".gformFormat(this.getOwners())),t.push("{0}".gformFormat(this.getFields())),t.push("{0}".gformFormat(this.getOperators(this.options.fields[0]))),t.push("{0}".gformFormat(this.getValues())),t.push('{buttons}'),'{0}'.gformFormat(t.join(""))},this.getOwners=function(){for(var t=this.options.owners,e='"},this.getFields=function(){var t,e,o,i,r,n,s,a,g=[],l=this.options.fields;for(g.push('"),g.join("")},this.changeOperator=function(t){var e=n(t),o=e.closest("tr").find(".repeater-buttons").find(".add-item ").data("index"),i=e.closest("tr").find(".gform-routing-field"),i=this.getFilter(i.value);i&&e.closest("tr").find(".gform-routing-value").replaceWith(this.getValues(i,t.value,o))},this.changeField=function(t){var e,o=this.getFilter(t.value);o&&(e=(t=n(t)).closest("tr").find(".repeater-buttons").find(".add-item ").data("index"),t.closest("tr").find(".gform-routing-value").replaceWith(this.getValues(o,null,e)),t.closest("tr").find(".gform-filter-type").val(o.type).change(),o=n(this.getOperators(o,e)),t.closest("tr").find(".gform-routing-operator").replaceWith(o),t.closest("tr").find(".gform-routing-operator").change())},this.getOperators=function(t,e){var o,i,r=this.options.operatorStrings,n='"},this.getValues=function(t,e,o){var i,r,n,s,a="";if(null==o&&(o="{i}"),t&&t.values&&"contains"!=e){for(i=0;i{1}'.gformFormat(r,n);s=''.gformFormat(o,a)}else s=''.gformFormat(o);return s},this.getFilter=function(t){var e=this.options.fields;if(t)for(var o=0;o\n" +"Language-Team: Gravity Forms \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-03-14T17:07:42+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.8.1\n" +"X-Domain: gravityformshubspot\n" + +#. Plugin Name of the plugin +msgid "Gravity Forms HubSpot Add-On" +msgstr "" + +#. Plugin URI of the plugin +#. Author URI of the plugin +msgid "https://gravityforms.com" +msgstr "" + +#. Description of the plugin +msgid "Integrates Gravity Forms with HubSpot, allowing form submissions to be automatically sent to your HubSpot account." +msgstr "" + +#. Author of the plugin +msgid "Gravity Forms" +msgstr "" + +#: class-gf-hubspot.php:255 +#: class-gf-hubspot.php:1086 +#: class-gf-hubspot.php:1091 +msgid "Name" +msgstr "" + +#: class-gf-hubspot.php:285 +msgid "Create record in HubSpot only when payment is received." +msgstr "" + +#: class-gf-hubspot.php:338 +msgid "Are you sure you want to disconnect from HubSpot for this website?" +msgstr "" + +#: class-gf-hubspot.php:339 +msgid "Are you sure you want to disconnect all Gravity Forms sites connected to this HubSpot account?" +msgstr "" + +#: class-gf-hubspot.php:484 +msgid "Unable to connect your HubSpot account due to mismatched state." +msgstr "" + +#: class-gf-hubspot.php:504 +msgid "HubSpot settings have been updated." +msgstr "" + +#: class-gf-hubspot.php:516 +msgid "Unable to connect your HubSpot account." +msgstr "" + +#: class-gf-hubspot.php:617 +msgid "HubSpot is an all-in-one CRM, Sales, Marketing, and Customer Service platform." +msgstr "" + +#: class-gf-hubspot.php:620 +msgid "The Gravity Forms HubSpot Add-On connects the power of the world’s leading growth platform - HubSpot - with Gravity Forms so your business can grow better." +msgstr "" + +#. translators: 1: Open link tag 2: Close link tag +#: class-gf-hubspot.php:625 +msgid "If you don't have a HubSpot account, you can %1$ssign up for your free HubSpot account here%2$s." +msgstr "" + +#: class-gf-hubspot.php:646 +msgid "Clear Custom Contact Properties Cache" +msgstr "" + +#. translators: 1: Open link tag 2: Close link tag +#: class-gf-hubspot.php:722 +msgid "There is a problem communicating with HubSpot right now, please check back later. If this issue persists for more than a day, please %1$sopen a support ticket%2$s." +msgstr "" + +#: class-gf-hubspot.php:763 +msgid "Click here to connect your HubSpot account" +msgstr "" + +#: class-gf-hubspot.php:768 +msgid "SSL Certificate Required" +msgstr "" + +#. translators: 1: Open link tag 2: Close link tag +#: class-gf-hubspot.php:770 +msgid "Make sure you have an SSL certificate installed and enabled, then %1$sclick here to continue%2$s." +msgstr "" + +#: class-gf-hubspot.php:783 +msgid "Signed into HubSpot." +msgstr "" + +#: class-gf-hubspot.php:787 +#: class-gf-hubspot.php:793 +msgid "Disconnect your HubSpot account" +msgstr "" + +#: class-gf-hubspot.php:791 +msgid "De-authorize this site only" +msgstr "" + +#: class-gf-hubspot.php:792 +msgid "Disconnect all Gravity Forms sites connected to this HubSpot account" +msgstr "" + +#: class-gf-hubspot.php:822 +msgid "Cache was cleared successfully." +msgstr "" + +#: class-gf-hubspot.php:830 +msgid "The cache could not be cleared at the moment." +msgstr "" + +#: class-gf-hubspot.php:835 +msgid "Due to HubSpot's daily API usage limits, Gravity Forms stores HubSpot custom contact properties data for one hour. If you added new custom properties or made a change to them, you might not see it reflected immediately due to this data caching. To manually clear the custom contact properties cache, click the button below." +msgstr "" + +#: class-gf-hubspot.php:837 +msgid "Clear Custom Fields Cache" +msgstr "" + +#: class-gf-hubspot.php:842 +msgid "never cleared manually before" +msgstr "" + +#: class-gf-hubspot.php:843 +msgid "Last time the cache was cleared manually: " +msgstr "" + +#: class-gf-hubspot.php:997 +msgid "Access denied." +msgstr "" + +#: class-gf-hubspot.php:1091 +msgid "Enter a feed name to uniquely identify this feed." +msgstr "" + +#: class-gf-hubspot.php:1095 +msgid "Feed Type" +msgstr "" + +#: class-gf-hubspot.php:1099 +msgid "Create Contact" +msgstr "" + +#: class-gf-hubspot.php:1108 +#: class-gf-hubspot.php:1114 +msgid "HubSpot Form Name" +msgstr "" + +#: class-gf-hubspot.php:1115 +msgid "Enter the name for the form that will be automatically created in your HubSpot account to work in conjunction with this feed. This HubSpot form will be configured to match your mapped fields below and is required. Once created, please don't remove or edit it." +msgstr "" + +#: class-gf-hubspot.php:1140 +#: class-gf-hubspot.php:1163 +msgid "Contact Owner" +msgstr "" + +#: class-gf-hubspot.php:1146 +msgid "None  " +msgstr "" + +#: class-gf-hubspot.php:1150 +msgid "Select Owner  " +msgstr "" + +#: class-gf-hubspot.php:1154 +msgid "Assign Conditionally" +msgstr "" + +#: class-gf-hubspot.php:1158 +msgid "Select a HubSpot user that will be assigned as the owner of the newly created Contact." +msgstr "" + +#: class-gf-hubspot.php:1177 +msgid "Select Owner" +msgstr "" + +#: class-gf-hubspot.php:1214 +msgid "Add Additional Contact Fields" +msgstr "" + +#: class-gf-hubspot.php:1234 +msgid "Additional Options" +msgstr "" + +#: class-gf-hubspot.php:1331 +msgid "There was an error connecting to Hubspot." +msgstr "" + +#: class-gf-hubspot.php:1338 +msgid "There was an error validating the form name. Please try saving again" +msgstr "" + +#: class-gf-hubspot.php:1343 +msgid "This form name is already in use in HubSpot. Please enter a unique form name." +msgstr "" + +#: class-gf-hubspot.php:1352 +msgid "edit" +msgstr "" + +#: class-gf-hubspot.php:1352 +msgid "add" +msgstr "" + +#. translators: Action to perform on the form. +#: class-gf-hubspot.php:1354 +msgid "Could not %s HubSpot form. Please try again later." +msgstr "" + +#: class-gf-hubspot.php:2000 +msgid "Error retrieving HubSpot owners" +msgstr "" + +#: class-gf-hubspot.php:2016 +msgid "No Name" +msgstr "" + +#: class-gf-hubspot.php:2067 +msgid "Select a Contact Property" +msgstr "" + +#: class-gf-hubspot.php:2111 +msgid "Select an Option" +msgstr "" + +#: class-gf-hubspot.php:2172 +msgid "
Lead Status
Select the lead status value the newly added contact should be set to." +msgstr "" + +#: class-gf-hubspot.php:2173 +msgid "
Lifecycle Stage
Select the lifecycle stage value the newly added contact should be set to." +msgstr "" + +#: class-gf-hubspot.php:2241 +msgid "Feed was not processed because the submission object was empty." +msgstr "" + +#: class-gf-hubspot.php:2250 +msgid "Feed was not processed because API was not initialized." +msgstr "" + +#: class-gf-hubspot.php:2258 +msgid "There was an error when creating the contact in HubSpot. %s" +msgstr "" + +#: class-gf-hubspot.php:2347 +msgid "Do not delete or edit" +msgstr "" + +#: includes/class-gf-hubspot-api.php:155 +#: includes/class-gf-hubspot-api.php:208 +msgid "Refresh token must be provided." +msgstr "" diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/change_log.txt b/wp/wp-content/plugins/gravityformsrecaptcha/change_log.txt new file mode 100644 index 00000000..04d1841f --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/change_log.txt @@ -0,0 +1,31 @@ +## 1.6.0 | 2024-07-30 +- Added support for the upcoming gform/submission/pre_submission filter that will be released with Gravity Forms 2.9. + +## 1.5.0 | 2024-04-30 +- Fixed an issue where duplicate entries are created when using Conversational Forms with reCAPTCHA v3. +- Fixed an issue where form submission hangs after Stripe 3DS validation. +- Fixed an issue where all REST API submissions are marked as spam. +- Note: If used alongside the Stripe Add-On, this version of the reCAPTCHA Add-On requires version 5.5.0 or later of the Stripe Add-On. + +## 1.4.0 | 2024-01-17 +- Fixed an issue where reCaptcha v3 validation is not triggered when using the Stripe Payment Element. +- Fixed the PHP 8.2 creation of dynamic property deprecation notice that occurs on form submission. + +## 1.3.0 | 2023-11-09 +- Fixed an issue where a JavaScript error can occur on the front-end if the page also includes custom or third-party forms. +- Fixed an issue where the v3 settings aren't populated by the GF_RECAPTCHA_V3_SITE_KEY and GF_RECAPTCHA_V3_SECRET_KEY constants. + +## 1.2.0 | 2023-08-31 +- Updated the reCAPTCHA settings link for the Captcha field "To use the reCAPTCHA field" message in the form editor. +- Fixed an issue where reCAPTCHA fails validation when using the Stripe Payment Element. +- Fixed an issue that causes the scripts for the frontend to not be available in production mode when compiled by Webpack. +- Fixed an issue where scripts are sometimes missing dependencies, and sometimes getting loaded unnecessarily. + +## 1.1 | 2021-07-21 +- Fixed an issue where an undefined variable notice appears on the add-on settings page. +- Fixed an issue where forms can fail validation if they include dynamically added fields such as the honeypot. +- Fixed an issue where the reCAPTCHA response is saved and output by merge tags. +- Fixed an issue where submissions from the User Registration Add-On login form are blocked. + +## 1.0 | 2021-06-23 +- It's all new! diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/class-gf-recaptcha.php b/wp/wp-content/plugins/gravityformsrecaptcha/class-gf-recaptcha.php new file mode 100644 index 00000000..7e0412e2 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/class-gf-recaptcha.php @@ -0,0 +1,993 @@ +api = new RECAPTCHA_API(); + $this->token_verifier = new Token_Verifier( $this, $this->api ); + $this->plugin_settings = new Settings\Plugin_Settings( $this, $this->token_verifier ); + $this->field = new GF_Field_RECAPTCHA(); + + GF_Fields::register( $this->field ); + + add_filter( 'gform_settings_menu', array( $this, 'replace_core_recaptcha_menu_item' ) ); + + parent::pre_init(); + } + + /** + * Replaces the core recaptcha settings menu item with the addon settings menu item. + * + * @param array $settings_tabs Registered settings tabs. + * + * @since 1.0 + * + * @return array + */ + public function replace_core_recaptcha_menu_item( $settings_tabs ) { + // Get tab names with the same index as is in the settings tabs. + $tabs = array_combine( array_keys( $settings_tabs ), array_column( $settings_tabs, 'name' ) ); + + // Bail if for some reason this add-on is not registered as a settings tab. + if ( ! in_array( $this->_slug, $tabs ) ) { + return $settings_tabs; + } + + $prepared_tabs = array_flip( $tabs ); + + $settings_tabs[ rgar( $prepared_tabs, 'recaptcha' ) ]['name'] = $this->_slug; + unset( $settings_tabs[ rgar( $prepared_tabs, $this->_slug ) ] ); + + return $settings_tabs; + } + + /** + * Register initialization hooks. + * + * @since 1.0 + */ + public function init() { + parent::init(); + + if ( ! $this->is_gravityforms_supported( $this->_min_gravityforms_version ) ) { + return; + } + + // Enqueue shared scripts that need to run everywhere, instead of just on forms pages. + add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_recaptcha_script' ) ); + + // Add Recaptcha field to the form output. + add_filter( 'gform_form_tag', array( $this, 'add_recaptcha_input' ), 50, 2 ); + + // Register a custom metabox for the entry details page. + add_filter( 'gform_entry_detail_meta_boxes', array( $this, 'register_meta_box' ), 10, 3 ); + + add_filter( 'gform_entry_is_spam', array( $this, 'check_for_spam_entry' ), 10, 3 ); + add_filter( 'gform_validation', array( $this, 'validate_submission' ) ); + + add_filter( 'gform_field_content', array( $this, 'update_captcha_field_settings_link' ), 10, 2 ); + add_filter( 'gform_incomplete_submission_pre_save', array( $this, 'add_recaptcha_v3_input_to_draft' ), 10, 3 ); + + } + + /** + * Register admin initialization hooks. + * + * @since 1.0 + */ + public function init_admin() { + parent::init_admin(); + + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_recaptcha_script' ) ); + } + + /** + * Validate the secret key on the plugin settings screen. + * + * @since 1.0 + */ + public function init_ajax() { + parent::init_ajax(); + + add_action( 'wp_ajax_verify_secret_key', array( $this->plugin_settings, 'verify_v3_keys' ) ); + } + + /** + * Register scripts. + * + * @since 1.0 + * + * @return array + */ + public function scripts() { + $frontend_script_name = version_compare( GFForms::$version, '2.9.0-dev-1', '<' ) ? 'frontend-legacy' : 'frontend'; + $scripts = array( + array( + 'handle' => $this->asset_prefix . $frontend_script_name, + 'src' => $this->get_script_url( $frontend_script_name ), + 'version' => $this->_version, + 'deps' => array( 'jquery', "{$this->asset_prefix}recaptcha" ), + 'in_footer' => true, + 'enqueue' => array( + array( $this, 'frontend_script_callback' ), + ), + ), + ); + + // Prevent plugin settings from loading on the frontend. Remove this condition to see it in action. + if ( is_admin() ) { + if ( $this->requires_recaptcha_script() ) { + $admin_deps = array( 'jquery', "{$this->asset_prefix}recaptcha" ); + } else { + $admin_deps = array( 'jquery' ); + } + + $scripts[] = array( + 'handle' => "{$this->asset_prefix}plugin_settings", + 'src' => $this->get_script_url( 'plugin_settings' ), + 'version' => $this->_version, + 'deps' => $admin_deps, + 'enqueue' => array( + array( + 'admin_page' => array( 'plugin_settings' ), + 'tab' => $this->_slug, + ), + ), + ); + } + + return array_merge( parent::scripts(), $scripts ); + } + + /** + * Get the URL for a JavaScript file. + * + * @since 1.0 + * + * @param string $filename The name of the script to return. + * + * @return string + */ + private function get_script_url( $filename ) { + $base_path = $this->get_base_path() . '/js'; + $base_url = $this->get_base_url() . '/js'; + + // Production scripts. + if ( is_readable( "{$base_path}/{$filename}.min.js" ) && ! ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ) { + return "{$base_url}/{$filename}.min.js"; + } + + // Uncompiled scripts. + if ( is_readable( "{$base_path}/src/{$filename}.js" ) ) { + return "{$base_url}/src/{$filename}.js"; + } + + // Compiled dev scripts. + return "{$base_url}/{$filename}.js"; + } + + // # PLUGIN SETTINGS ----------------------------------------------------------------------------------------------- + + /** + * Define plugin settings fields. + * + * @since 1.0 + * + * @return array + */ + public function plugin_settings_fields() { + return $this->plugin_settings->get_fields(); + } + + /** + * Initialize the plugin settings. + * + * This method overrides the add-on framework because we need to retrieve the values for reCAPTCHA v2 from core + * and populate them if they exist. Since the Plugin_Settings class houses all of the logic related to the plugin + * settings screen, we need to pass the return value of this method's parent to delegate that responsibility. + * + * In a future release, once reCAPTCHA logic is migrated into this add-on, we + * should be able to safely remove this override. + * + * @since 1.0 + * + * @return array + */ + public function get_plugin_settings() { + return $this->plugin_settings->get_settings( parent::get_plugin_settings() ); + } + + /** + * Callback to update plugin settings on save. + * + * We override this method in order to save values for reCAPTCHA v2 with their original keys in the options table. + * In a future release, we'll eventually migrate all previous reCAPTCHA logic into this add-on, at which time we + * should be able to remove this method altogether. + * + * @since 1.0 + * + * @param array $settings The settings to update. + */ + public function update_plugin_settings( $settings ) { + $this->plugin_settings->update_settings( $settings ); + parent::update_plugin_settings( $settings ); + } + + /** + * The settings page icon. + * + * @since 1.0 + * @return string + */ + public function get_menu_icon() { + return 'gform-icon--recaptcha'; + } + + /** + * Add the recaptcha field to the end of the form. + * + * @since 1.0 + * + * @depecated 1.1 + * + * @param array $form The form array. + * + * @return array + */ + public function add_recaptcha_field( $form ) { + return $form; + } + + /** + * Add the recaptcha input to the form. + * + * @since 1.1 + * + * @param string $form_tag The form tag. + * @param array $form The form array. + * + * @return string + */ + public function add_recaptcha_input( $form_tag, $form ) { + if ( empty( $form_tag ) || $this->is_disabled_by_form_setting( $form ) || ! $this->initialize_api() ) { + return $form_tag; + } + + return $form_tag . $this->field->get_field_input( $form ); + } + + // # FORM SETTINGS + + /** + * Register a form settings tab for reCAPTCHA v3. + * + * @since 1.0 + * + * @param array $form The form data. + * + * @return array + */ + public function form_settings_fields( $form ) { + return array( + array( + 'title' => 'reCAPTCHA Settings', + 'fields' => array( + array( + 'type' => 'checkbox', + 'name' => 'disable-recaptchav3', + 'choices' => array( + array( + 'name' => 'disable-recaptchav3', + 'label' => __( 'Disable reCAPTCHA v3 for this form.', 'gravityformsrecaptcha' ), + 'default_value' => 0, + ), + ), + ), + ), + ), + ); + } + + /** + * Updates the query string for the settings link displayed in the form editor preview of the Captcha field. + * + * @since 1.2 + * + * @param string $field_content The field markup. + * @param \GF_Field $field The field being processed. + * + * @return string + */ + public function update_captcha_field_settings_link( $field_content, $field ) { + if ( $field->type !== 'captcha' || ! $field->is_form_editor() ) { + return $field_content; + } + + return str_replace( + array( '&subview=recaptcha', '?page=gf_settings' ), + array( '', '?page=gf_settings&subview=gravityformsrecaptcha' ), + $field_content + ); + } + + // # HELPER METHODS ------------------------------------------------------------------------------------------------ + + /** + * Get the instance of the Token_Verifier class. + * + * @since 1.0 + * + * @return Token_Verifier + */ + public function get_token_verifier() { + return $this->token_verifier; + } + + /** + * Get the instance of the Plugin_Settings class. + * + * @return Settings\Plugin_Settings + */ + public function get_plugin_settings_instance() { + return $this->plugin_settings; + } + + /** + * Initialize the connection to the reCAPTCHA API. + * + * @since 1.0 + * + * @return bool + */ + private function initialize_api() { + static $result; + + if ( is_bool( $result ) ) { + return $result; + } + + $result = false; + $site_key = $this->plugin_settings->get_recaptcha_key( 'site_key_v3' ); + $secret_key = $this->plugin_settings->get_recaptcha_key( 'secret_key_v3' ); + + if ( ! ( $site_key && $secret_key ) ) { + $this->log_debug( __METHOD__ . '(): Missing v3 key configuration. Please check the add-on settings.' ); + + return false; + } + + if ( '1' !== $this->get_plugin_setting( 'recaptcha_keys_status_v3' ) ) { + $this->log_debug( __METHOD__ . '(): Could not initialize reCAPTCHA v3 because site and/or secret key is invalid.' ); + + return false; + } + + $result = true; + $this->log_debug( __METHOD__ . '(): API Initialized.' ); + + return true; + } + + /** + * Check to determine whether the reCAPTCHA script is needed on a page. + * + * The script is needed on every page of the front-end if we're able to initialize the API because we've already + * verified that the v3 site and secret keys are valid. + * + * On the back-end, we only want to load this on the settings page, and it should be available regardless of the + * status of the keys. + * + * @since 1.0 + * + * @return bool + */ + private function requires_recaptcha_script() { + return is_admin() ? $this->is_plugin_settings( $this->_slug ) : $this->initialize_api(); + } + + /** + * Custom enqueuing of the external reCAPTCHA script. + * + * This script is enqueued via the normal WordPress process because, on the front-end, it's needed on every + * single page of the site in order for reCAPTCHA to properly score the interactions leading up to the form + * submission. + * + * @since 1.0 + * @see GF_RECAPTCHA::init() + */ + public function enqueue_recaptcha_script() { + if ( ! $this->requires_recaptcha_script() ) { + return; + } + + $script_url = add_query_arg( + 'render', + $this->plugin_settings->get_recaptcha_key( 'site_key_v3' ), + 'https://www.google.com/recaptcha/api.js' + ); + + wp_enqueue_script( + "{$this->asset_prefix}recaptcha", + $script_url, + array( 'jquery' ), + $this->_version, + true + ); + + wp_localize_script( + "{$this->asset_prefix}recaptcha", + "{$this->asset_prefix}recaptcha_strings", + array( + 'site_key' => $this->plugin_settings->get_recaptcha_key( 'site_key_v3' ), + 'ajaxurl' => admin_url( 'admin-ajax.php' ), + 'nonce' => wp_create_nonce( "{$this->_slug}_verify_token_nonce" ), + ) + ); + + if ( $this->get_plugin_setting( 'disable_badge_v3' ) !== '1' ) { + return; + } + + // Add inline JS to disable the badge. + wp_add_inline_script( + "{$this->asset_prefix}recaptcha", + '(function($){grecaptcha.ready(function(){$(\'.grecaptcha-badge\').css(\'visibility\',\'hidden\');});})(jQuery);' + ); + } + + /** + * Callback to determine whether to render the frontend script. + * + * @since 1.0 + * + * @param array $form The form array. + * + * @return bool + */ + public function frontend_script_callback( $form ) { + return $form && ! is_admin(); + } + + /** + * Sets up additional data points for sorting on the entry. + * + * @since 1.0 + * + * @param array $entry_meta The entry metadata. + * @param int $form_id The ID of the form. + * + * @return array + */ + public function get_entry_meta( $entry_meta, $form_id ) { + $entry_meta[ "{$this->_slug}_score" ] = array( + 'label' => __( 'reCAPTCHA Score', 'gravityformsrecaptcha' ), + 'is_numeric' => true, + 'update_entry_meta_callback' => array( $this, 'update_entry_meta' ), + 'is_default_column' => true, + 'filter' => array( + 'operators' => array( 'is', '>', '<' ), + ), + ); + + return $entry_meta; + } + + /** + * Save the Recaptcha metadata values to the entry. + * + * @since 1.0 + * + * @see GF_RECAPTCHA::get_entry_meta() + * + * @param string $key The entry meta key. + * @param array $entry The entry data. + * @param array $form The form data. + * + * @return float|void + */ + public function update_entry_meta( $key, $entry, $form ) { + if ( $key !== "{$this->_slug}_score" ) { + return; + } + + if ( $this->is_disabled_by_form_setting( $form ) ) { + $this->log_debug( __METHOD__ . '(): reCAPTCHA v3 disabled on form ' . rgar( $form, 'id' ) ); + return 'disabled'; + } + + if ( ! $this->initialize_api() ) { + return 'disconnected'; + } + + return $this->token_verifier->get_score(); + } + + /** + * Registers a metabox on the entry details screen. + * + * @since 1.0 + * + * @param array $metaboxes Gravity Forms registered metaboxes. + * @param array $entry The entry array. + * @param array $form The form array. + * + * @return array + */ + public function register_meta_box( $metaboxes, $entry, $form ) { + $score = $this->get_score_from_entry( $entry ); + + if ( ! $score ) { + return $metaboxes; + } + + $metaboxes[ $this->_slug ] = array( + 'title' => esc_html__( 'reCAPTCHA', 'gravityformsrecaptcha' ), + 'callback' => array( $this, 'add_recaptcha_meta_box' ), + 'context' => 'side', + ); + + return $metaboxes; + } + + /** + * Callback to output the entry details metabox. + * + * @since 1.0 + * @see GF_RECAPTCHA::register_meta_box() + * + * @param array $data An array containing the form and entry data. + */ + public function add_recaptcha_meta_box( $data ) { + $score = $this->get_score_from_entry( rgar( $data, 'entry' ) ); + + printf( + '

%s: %s

%s

', + esc_html__( 'Score', 'gravityformsrecaptcha' ), + esc_html( $score ), + esc_html( 'https://docs.gravityforms.com/captcha/' ), + esc_html__( 'Click here to learn more about reCAPTCHA.', 'gravityformsrecaptcha' ) + ); + } + + /** + * Callback to gform_entry_is_spam that determines whether to categorize this entry as such. + * + * @since 1.0 + * + * @see GF_RECAPTCHA::init(); + * + * @param bool $is_spam Whether the entry is spam. + * @param array $form The form data. + * @param array $entry The entry data. + * + * @return bool + */ + public function check_for_spam_entry( $is_spam, $form, $entry ) { + + if ( $is_spam ) { + $this->log_debug( __METHOD__ . '(): Skipping, entry has already been identified as spam by another anti-spam solution.' ); + return $is_spam; + } + + $is_spam = $this->is_spam_submission( $form, $entry ); + $this->log_debug( __METHOD__ . '(): Is submission considered spam? ' . ( $is_spam ? 'Yes.' : 'No.' ) ); + + return $is_spam; + } + + /** + * Determines if the submission is spam by comparing its score with the threshold. + * + * @since 1.4 + * @since 1.5 Added the optional $entry param. + * + * @param array $form The form being processed. + * @param array $entry The entry being processed. + * + * @return bool + */ + public function is_spam_submission( $form, $entry = array() ) { + if ( $this->should_skip_validation( $form ) ) { + $this->log_debug( __METHOD__ . '(): Score check skipped.' ); + + return false; + } + + $score = empty( $entry ) ? $this->token_verifier->get_score() : $this->get_score_from_entry( $entry ); + $threshold = $this->get_spam_score_threshold(); + + return (float) $score <= (float) $threshold; + } + /** + * Get the Recaptcha score from the entry details. + * + * @since 1.0 + * + * @param array $entry The entry array. + * + * @return float|string + */ + private function get_score_from_entry( $entry ) { + $score = rgar( $entry, "{$this->_slug}_score" ); + + if ( in_array( $score, $this->v3_disabled_states, true ) ) { + return $score; + } + + return $score ? (float) $score : $this->token_verifier->get_score(); + } + + /** + * The score that determines whether the entry is spam. + * + * Hard-coded for now, but this will eventually be an option within the add-on. + * + * @since 1.0 + * + * @return float + */ + private function get_spam_score_threshold() { + static $value; + + if ( ! empty( $value ) ) { + return $value; + } + + $value = (float) $this->get_plugin_setting( 'score_threshold_v3' ); + if ( empty( $value ) ) { + $value = 0.5; + } + $this->log_debug( __METHOD__ . '(): ' . $value ); + + return $value; + } + + /** + * Determine whether a given form has disabled reCAPTCHA within its settings. + * + * @since 1.0 + * + * @param array $form The form data. + * + * @return bool + */ + private function is_disabled_by_form_setting( $form ) { + return empty( $form['id'] ) || '1' === rgar( $this->get_form_settings( $form ), 'disable-recaptchav3' ); + } + + /** + * Validate the form submission. + * + * @since 1.0 + * + * @param array $submission_data The submitted form data. + * + * @return array + */ + public function validate_submission( $submission_data ) { + $this->log_debug( __METHOD__ . '(): Validating form (#' . rgars( $submission_data, 'form/id' ) . ') submission.' ); + + if ( $this->should_skip_validation( rgar( $submission_data, 'form' ) ) ) { + $this->log_debug( __METHOD__ . '(): Validation skipped.' ); + + return $submission_data; + } + + $this->log_debug( __METHOD__ . '(): Validating reCAPTCHA v3.' ); + + return $this->field->validation_check( $submission_data ); + } + + /** + * Check If reCaptcha validation should be skipped. + * + * In some situations where the form validation could be triggered twice, for example while making a stripe payment element transaction + * we want to skip the reCaptcha validation so it isn't triggered twice, as this will make it always fail. + * + * @since 1.4 + * @since 1.5 Changed param to $form array. + * + * @param array $form The form being processed. + * + * @return bool + */ + public function should_skip_validation( $form ) { + static $result = array(); + + $form_id = rgar( $form, 'id' ); + if ( isset( $result[ $form_id ] ) ) { + return $result[ $form_id ]; + } + + $result[ $form_id ] = true; + + if ( $this->is_preview() ) { + $this->log_debug( __METHOD__ . '(): Yes! Form preview page.' ); + + return true; + } + + if ( ! $this->initialize_api() ) { + $this->log_debug( __METHOD__ . '(): Yes! API not initialized.' ); + + return true; + } + + if ( $this->is_disabled_by_form_setting( $form ) ) { + $this->log_debug( __METHOD__ . '(): Yes! Disabled by form setting.' ); + + return true; + } + + if ( defined( 'REST_REQUEST' ) && REST_REQUEST && ! isset( $_POST[ $this->field->get_input_name( $form_id ) ] ) ) { + $this->log_debug( __METHOD__ . '(): Yes! REST request without input.' ); + + return true; + } + + // For older versions of Stripe, skip the first validation attempt and only validate on the second attempt. Newer versions of Stripe will validate twice without a problem. + if ( $this->is_stripe_validation() && version_compare( gf_stripe()->get_version(), '5.4.3', '<' ) ) { + $this->log_debug( __METHOD__ . '(): Yes! Older Stripe validation.' ); + + return true; + } + + $result[ $form_id ] = false; + + return false; + } + + /** + * Check if this is a stripe validation request. + * + * @since 1.4 + * + * @return bool Returns true if this is a stripe validation request. Returns false otherwise. + */ + public function is_stripe_validation() { + return function_exists( 'gf_stripe' ) && rgpost( 'action' ) === 'gfstripe_validate_form'; + } + + /** + * Check if this is a preview request, taking into account Stripe's validation request. + * + * @since 1.4 + * + * @return bool Returns true if this is a preview request. Returns false otherwise. + */ + public function is_preview() { + + return parent::is_preview() || ( $this->is_stripe_validation() && rgget( 'preview' ) === '1' ); + } + + /** + * Add the recaptcha v3 input and value to the draft. + * + * @since 1.2 + * + * @param array $submission_json The json containing the submitted values and the partial entry created from the values. + * @param string $resume_token The resume token. + * @param array $form The form data. + * + * @return string The json string for the submission with the recaptcha v3 input and value added. + */ + public function add_recaptcha_v3_input_to_draft( $submission_json, $resume_token, $form ) { + $submission = json_decode( $submission_json, true ); + $input_name = $this->field->get_input_name( rgar( $form , 'id' ) ); + $submission[ 'partial_entry' ][ $input_name ] = rgpost( $input_name ); + + return wp_json_encode( $submission ); + } + +} diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-gf-field-recaptcha.php b/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-gf-field-recaptcha.php new file mode 100644 index 00000000..62f8dc2a --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-gf-field-recaptcha.php @@ -0,0 +1,158 @@ +get_plugin_settings_instance(); + $site_key = $plugin_settings->get_recaptcha_key( 'site_key_v3' ); + $secret_key = $plugin_settings->get_recaptcha_key( 'secret_key_v3' ); + + if ( empty( $site_key ) || empty( $secret_key ) ) { + GFCommon::log_error( __METHOD__ . sprintf( '(): reCAPTCHA secret keys not saved in the reCAPTCHA Settings (%s). The reCAPTCHA field will always fail validation during form submission.', admin_url( 'admin.php' ) . '?page=gf_settings&subview=recaptcha' ) ); + } + + $this->formId = absint( rgar( $form, 'id' ) ); + $name = $this->get_input_name(); + $tabindex = GFCommon::$tab_index > 0 ? GFCommon::$tab_index ++ : 0; + + return "
" + . '' + . '
'; + } + + /** + * Modify the validation result if the Recaptcha response has been altered. + * + * This is a callback to the gform_validation filter to allow us to validate the values in the hidden field. + * + * @since 1.0 + * + * @see GF_RECAPTCHA::init() + * + * @param array $validation_data The validation data. + * + * @return array + */ + public function validation_check( $validation_data ) { + $this->formId = absint( rgars( $validation_data, 'form/id' ) ); + + if ( $this->is_valid_field_data() ) { + + // Set is_spam value. + $validation_data['is_spam'] = gf_recaptcha()->is_spam_submission( rgar( $validation_data, 'form' ) ); + + return $validation_data; + } + + // Set is_valid to false and return the validation data. + return $this->invalidate( $validation_data ); + } + + /** + * Validates that the data in the hidden input is a valid Recaptcha entry. + * + * @since 1.0 + * + * @return bool + */ + private function is_valid_field_data() { + $data = rgpost( $this->get_input_name() ); + + if ( empty( $data ) ) { + gf_recaptcha()->log_debug( __METHOD__ . "(): Input {$this->get_input_name()} empty." ); + + return false; + } + + return gf_recaptcha()->get_token_verifier()->verify_submission( $data ); + } + + /** + * Set is_valid to false on the validation data. + * + * @since 1.0 + * + * @param array $validation_data The validation data. + * + * @return mixed + */ + private function invalidate( $validation_data ) { + $validation_data['is_valid'] = false; + + return $validation_data; + } + + /** + * Returns the value of the input name attribute. + * + * @since 1.1 + * @since 1.2 Added optional form_id parameter. + * + * @return string + */ + public function get_input_name( $form_id = null ) { + if ( $form_id ) { + $this->formId = absint( $form_id ); + } + + return 'input_' . md5( 'recaptchav3' . gf_recaptcha()->get_version() . $this->formId ); + } + +} diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-recaptcha-api.php b/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-recaptcha-api.php new file mode 100644 index 00000000..421bdfd9 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-recaptcha-api.php @@ -0,0 +1,44 @@ +verification_url, + array( + 'body' => array( + 'secret' => $secret, + 'response' => $token, + ), + ) + ); + } +} diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-token-verifier.php b/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-token-verifier.php new file mode 100644 index 00000000..d16d32c1 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/includes/class-token-verifier.php @@ -0,0 +1,364 @@ +addon = $addon; + $this->api = $api; + } + + /** + * Initializes this object for use. + * + * @param string $token The reCAPTCHA token. + * @param string $action The reCAPTCHA action. + * + * @since 1.0 + */ + public function init( $token = '', $action = '' ) { + $this->token = $token; + $this->action = $action; + $this->secret = $this->addon->get_plugin_settings_instance()->get_recaptcha_key( 'secret_key_v3' ); + $this->score_threshold = $this->addon->get_plugin_setting( 'score_threshold_v3', 0.5 ); + } + + /** + * Get the reCAPTCHA result. + * + * Returns a stdClass if it's already been processed. + * + * @since 1.0 + * + * @return stdClass|null + */ + public function get_recaptcha_result() { + return $this->recaptcha_result; + } + + /** + * Validate that the reCAPTCHA response data has the required properties and meets expectations. + * + * @since 1.0 + * + * @param array $response_data The response data to validate. + * + * @return bool + */ + private function validate_response_data( $response_data ) { + if ( + ! empty( $response_data->{'error-codes'} ) + || ( property_exists( $response_data, 'success' ) && $response_data->success !== true ) + ) { + return false; + } + + $validation_properties = array( 'hostname', 'action', 'success', 'score', 'challenge_ts' ); + $response_properties = array_filter( + $validation_properties, + function( $property ) use ( $response_data ) { + return property_exists( $response_data, $property ); + } + ); + + if ( count( $validation_properties ) !== count( $response_properties ) ) { + return false; + } + + return ( + $response_data->success + && $this->verify_hostname( $response_data->hostname ) + && $this->verify_action( $response_data->action ) + && $this->verify_score( $response_data->score ) + && $this->verify_timestamp( $response_data->challenge_ts ) + ); + } + + /** + * Verify the submission data. + * + * @since 1.0 + * + * @param string $token The Recapatcha token. + * + * @return bool + */ + public function verify_submission( $token ) { + + $data = \GFCache::get( 'recaptcha_' . $token, $found ); + if ( $found ) { + $this->addon->log_debug( __METHOD__ . '(): Using cached reCAPTCHA result: ' . print_r( $data, true ) ); + $this->recaptcha_result = $data; + + return true; + } + + $this->addon->log_debug( __METHOD__ . '(): Verifying reCAPTCHA submission.' ); + + if ( empty( $token ) ) { + $this->addon->log_debug( __METHOD__ . '(): Could not verify the submission because no token was found.' . PHP_EOL ); + return false; + } + + $this->init( $token, 'submit' ); + + $data = $this->get_response_data( $this->api->verify_token( $token, $this->addon->get_plugin_settings_instance()->get_recaptcha_key( 'secret_key_v3' ) ) ); + + if ( is_wp_error( $data ) ) { + $this->addon->log_debug( __METHOD__ . '(): Validating the reCAPTCHA response has failed due to the following: ' . $data->get_error_message() ); + wp_send_json_error( + array( + 'error' => $data->get_error_message(), + 'code' => self::ERROR_CODE_CANNOT_VERIFY_TOKEN, + ) + ); + } + + if ( ! $this->validate_response_data( $data ) ) { + $this->addon->log_debug( + __METHOD__ . '(): Could not validate the token request from the reCAPTCHA service. ' . PHP_EOL + . "token: {$token}" . PHP_EOL + . "response: " . print_r( $data, true ) . PHP_EOL // @codingStandardsIgnoreLine + ); + return false; + } + + // @codingStandardsIgnoreLine + $this->addon->log_debug( __METHOD__ . '(): Validated reCAPTCHA: ' . print_r( $data, true ) ); + $this->recaptcha_result = $data; + + // Caching result for 1 hour. + \GFCache::set( 'recaptcha_' . $token, $data, true, 60 * 60 ); + + return true; + } + + /** + * Get the data from the response. + * + * @since 1.0 + * + * @param WP_Error|string $response The response from the API request. + * + * @return mixed + */ + private function get_response_data( $response ) { + if ( is_wp_error( $response ) ) { + return $response; + } + + return json_decode( wp_remote_retrieve_body( $response ) ); + } + + /** + * Verify the reCAPTCHA hostname. + * + * @since 1.0 + * + * @param string $hostname Verify that the host name returned matches the site. + * + * @return bool + */ + private function verify_hostname( $hostname ) { + if ( ! has_filter( 'gform_recaptcha_valid_hostnames' ) ) { + $this->addon->log_debug( __METHOD__ . '(): gform_recaptcha_valid_hostnames filter not implemented. Skipping.' ); + return true; + } + + $this->addon->log_debug( __METHOD__ . '(): gform_recaptcha_valid_hostnames filter detected. Verifying hostname.' ); + + /** + * Filter for the set of hostnames considered valid by this site. + * + * Google returns a 'hostname' value in reCAPTCHA verification results. We validate against this value to ensure + * that the data is good. By default, we use only the WordPress installation's home URL, but have extended + * this via a filter so developers can define an array of hostnames to allow. + * + * @since 1.0 + * + * @param array $valid_hostnames { + * An indexed array of valid hostname strings. Example: + * array( 'example.com', 'another-example.com' ) + * } + */ + $valid_hostnames = apply_filters( + 'gform_recaptcha_valid_hostnames', + array( + wp_parse_url( get_home_url(), PHP_URL_HOST ), + ) + ); + + return is_array( $valid_hostnames ) ? in_array( $hostname, $valid_hostnames, true ) : false; + } + + /** + * Verify the reCAPTCHA action. + * + * @since 1.0 + * + * @param string $action The reCAPTCHA result action. + * + * @return bool + */ + private function verify_action( $action ) { + $this->addon->log_debug( __METHOD__ . '(): Verifying action from reCAPTCHA response.' ); + + return $this->action === $action; + } + + /** + * Verify that the score is valid. + * + * @since 1.0 + * + * @param float $score The reCAPTCHA v3 score. + * + * @return bool + */ + private function verify_score( $score ) { + $this->addon->log_debug( __METHOD__ . '(): Verifying score from reCAPTCHA response.' ); + + return is_float( $score ) && $score >= 0.0 && $score <= 1.0; + } + + /** + * Verify that the timestamp of the submission is valid. + * + * Google allows a reCAPTCHA token to be valid for two minutes. On multi-page forms, we generate a new token with + * the advancement of each page, but the timestamp that's returned is always the same. Thus, we'll allow a longer + * time frame for form submissions before considering them to be invalid. + * + * @since 1.0 + * + * @param string $challenge_ts The challenge timestamp from the reCAPTCHA service. + * + * @return bool + */ + private function verify_timestamp( $challenge_ts ) { + $this->addon->log_debug( __METHOD__ . '(): Verifying timestamp from reCAPTCHA response.' ); + + return ( gmdate( time() ) - strtotime( $challenge_ts ) ) <= 24 * HOUR_IN_SECONDS; + } + + /** + * Get the score from the Recaptcha result. + * + * @since 1.0 + * + * @return float + */ + public function get_score() { + if ( empty( $this->recaptcha_result ) || ! property_exists( $this->recaptcha_result, 'score' ) ) { + return $this->addon->is_preview() ? 0.9 : 0.0; + } + + return (float) $this->recaptcha_result->score; + } + + /** + * Get the decoded response data from the API. + * + * @param string $token The validation token. + * @param string $secret The stored secret key from the settings page. + * + * @since 1.0 + * + * @return WP_Error|mixed|string + */ + public function verify( $token, $secret ) { + return $this->get_response_data( $this->api->verify_token( $token, $secret ) ); + } +} diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/includes/settings/class-plugin-settings.php b/wp/wp-content/plugins/gravityformsrecaptcha/includes/settings/class-plugin-settings.php new file mode 100644 index 00000000..f63d976a --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/includes/settings/class-plugin-settings.php @@ -0,0 +1,630 @@ +addon = $addon; + $this->token_verifier = $token_verifier; + } + + /** + * Get the plugin settings fields. + * + * @since 1.0 + * @see GF_RECAPTCHA::plugin_settings_fields() + * + * @return array + */ + public function get_fields() { + return array( + $this->get_description_fields(), + $this->get_v3_fields(), + $this->get_v2_fields(), + ); + } + + /** + * Gets any custom plugin settings, ensuring they contain the latest values from the constants. + * + * @since 1.0 + * + * @param array $settings Add-on's parent plugin settings. + * + * @return array + */ + public function get_settings( $settings ) { + if ( ! is_array( $settings ) ) { + $settings = array(); + } + + $site_key = $this->get_recaptcha_key( 'site_key_v3', true ); + if ( $site_key ) { + $settings['site_key_v3'] = $site_key; + } + + $secret_key = $this->get_recaptcha_key( 'secret_key_v3', true ); + if ( $secret_key ) { + $settings['secret_key_v3'] = $secret_key; + } + + return array_merge( + $settings, + array( + 'site_key_v2' => get_option( 'rg_gforms_captcha_public_key' ), + 'secret_key_v2' => get_option( 'rg_gforms_captcha_private_key' ), + 'type_v2' => get_option( 'rg_gforms_captcha_type' ), + ) + ); + } + + /** + * Handles updating of custom plugin settings. + * + * @since 1.0 + * + * @param array $settings Update the v2 settings. + */ + public function update_settings( $settings ) { + update_option( 'rg_gforms_captcha_public_key', rgar( $settings, 'site_key_v2' ) ); + update_option( 'rg_gforms_captcha_private_key', rgar( $settings, 'secret_key_v2' ) ); + update_option( 'rg_gforms_captcha_type', rgar( $settings, 'type_v2' ) ); + } + + /** + * Get the description section for the plugin settings. + * + * @since 1.0 + * @return array + */ + private function get_description_fields() { + return array( + 'id' => 'gravityformsrecaptcha_description', + 'title' => esc_html__( 'reCAPTCHA Settings', 'gravityformsrecaptcha' ), + 'description' => $this->get_settings_intro_description(), + 'fields' => array( + array( + 'type' => 'html', + ), + ), + ); + } + + /** + * Get the plugin settings fields for reCAPTCHA v3. + * + * @since 1.0 + * @return array + */ + private function get_v3_fields() { + $site_key = $this->get_recaptcha_key( 'site_key_v3', true ); + $secret_key = $this->get_recaptcha_key( 'secret_key_v3', true ); + + return array( + 'id' => 'gravityformsrecaptcha_v3', + 'title' => esc_html__( 'reCAPTCHA v3', 'gravityformsrecaptcha' ), + 'fields' => array( + array( + 'name' => 'site_key_v3', + 'label' => esc_html__( 'Site Key', 'gravityformsrecaptcha' ), + 'type' => 'text', + 'feedback_callback' => array( $this, 'v3_keys_status_feedback_callback' ), + 'readonly' => empty( $site_key ) ? '' : 'readonly', + 'after_input' => $this->get_constant_message( $site_key, 'GF_RECAPTCHA_V3_SITE_KEY' ), + ), + array( + 'name' => 'secret_key_v3', + 'label' => esc_html__( 'Secret Key', 'gravityformsrecaptcha' ), + 'type' => 'text', + 'feedback_callback' => array( $this, 'v3_keys_status_feedback_callback' ), + 'readonly' => empty( $secret_key ) ? '' : 'readonly', + 'after_input' => $this->get_constant_message( $secret_key, 'GF_RECAPTCHA_V3_SECRET_KEY' ), + ), + array( + 'name' => 'score_threshold_v3', + 'label' => esc_html__( 'Score Threshold', 'gravityformsrecaptcha' ), + 'description' => $this->get_score_threshold_description(), + 'default_value' => 0.5, + 'type' => 'text', + 'input_type' => 'number', + 'step' => '0.01', + 'min' => '0.0', + 'max' => '1.0', + 'validation_callback' => array( $this, 'validate_score_threshold_v3' ), + ), + array( + 'name' => 'disable_badge_v3', + 'label' => esc_html__( 'Disable Google reCAPTCHA Badge', 'gravityformsrecaptcha' ), + 'description' => esc_html__( 'By default reCAPTCHA v3 displays a badge on every page of your site with links to the Google terms of service and privacy policy. You are allowed to hide the badge as long as you include the reCAPTCHA branding and links visibly in the user flow.', 'gravityformsrecaptcha' ), + 'type' => 'checkbox', + 'choices' => array( + array( + 'name' => 'disable_badge_v3', + 'label' => esc_html__( 'I have added the reCAPTCHA branding, terms of service and privacy policy to my site. ', 'gravityformsrecaptcha' ), + ), + ), + ), + array( + 'name' => 'recaptcha_keys_status_v3', + 'type' => 'checkbox', + 'default_value' => $this->get_recaptcha_key( 'recaptcha_keys_status_v3' ), + 'hidden' => true, + 'choices' => array( + array( + 'type' => 'checkbox', + 'name' => 'recaptcha_keys_status_v3', + ), + ), + ), + ), + ); + } + + /** + * Returns the setting info message to be displayed when the value is defined using a constant. + * + * @since 1.3 + * + * @param string $value The value. + * @param string $constant The constant name. + * + * @return string + */ + private function get_constant_message( $value, $constant ) { + if ( empty( $value ) ) { + return ''; + } + + return '
' . sprintf( esc_html__( 'Value defined using the %s constant.', 'gravityformsrecaptcha' ), $constant ) . '
'; + } + + /** + * Get the plugin settings fields for reCAPTCHA v2. + * + * @since 1.0 + * @return array + */ + private function get_v2_fields() { + return array( + 'id' => 'gravityformsrecaptcha_v2', + 'title' => esc_html__( 'reCAPTCHA v2', 'gravityformsrecaptcha' ), + 'fields' => array( + array( + 'name' => 'site_key_v2', + 'label' => esc_html__( 'Site Key', 'gravityformsrecaptcha' ), + 'tooltip' => gform_tooltip( 'settings_recaptcha_public', null, true ), + 'type' => 'text', + 'feedback_callback' => array( $this, 'validate_key_v2' ), + ), + array( + 'name' => 'secret_key_v2', + 'label' => esc_html__( 'Secret Key', 'gravityformsrecaptcha' ), + 'tooltip' => gform_tooltip( 'settings_recaptcha_private', null, true ), + 'type' => 'text', + 'feedback_callback' => array( $this, 'validate_key_v2' ), + ), + array( + 'name' => 'type_v2', + 'label' => esc_html__( 'Type', 'gravityformsrecaptcha' ), + 'tooltip' => gform_tooltip( 'settings_recaptcha_type', null, true ), + 'type' => 'radio', + 'horizontal' => true, + 'default_value' => 'checkbox', + 'choices' => array( + array( + 'label' => esc_html__( 'Checkbox', 'gravityformsrecaptcha' ), + 'value' => 'checkbox', + ), + array( + 'label' => esc_html__( 'Invisible', 'gravityformsrecaptcha' ), + 'value' => 'invisible', + ), + ), + ), + array( + 'name' => 'reset_v2', + 'label' => esc_html__( 'Validate Keys', 'gravityformsrecaptcha' ), + 'type' => 'recaptcha_reset', + 'callback' => array( $this, 'handle_recaptcha_v2_reset' ), + 'hidden' => true, + 'validation_callback' => function( $field, $value ) { + + // If reCAPTCHA key is empty, exit. + if ( rgblank( $value ) ) { + return; + } + + $values = $this->addon->get_settings_renderer()->get_posted_values(); + + // Get public, private keys, API response. + $public_key = rgar( $values, 'site_key_v2' ); + $private_key = rgar( $values, 'secret_key_v2' ); + $response = rgpost( 'g-recaptcha-response' ); + + // If keys and response are provided, verify and save. + if ( $public_key && $private_key && $response ) { + // Log public, private keys, API response. + // @codingStandardsIgnoreStart - print_r okay for logging. + GFCommon::log_debug( __METHOD__ . '(): reCAPTCHA Site Key:' . print_r( $public_key, true ) ); + GFCommon::log_debug( __METHOD__ . '(): reCAPTCHA Secret Key:' . print_r( $private_key, true ) ); + GFCommon::log_debug( __METHOD__ . '(): reCAPTCHA Response:' . print_r( $response, true ) ); + + // Verify response. + $recaptcha = new GF_Field_CAPTCHA(); + $recaptcha_response = $recaptcha->verify_recaptcha_response( $response, $private_key ); + + // Log verification response. + GFCommon::log_debug( __METHOD__ . '(): reCAPTCHA verification response:' . print_r( $recaptcha_response, true ) ); + // @codingStandardsIgnoreEnd + + // If response is false, return validation error. + if ( $recaptcha_response === false ) { + $field->set_error( __( 'reCAPTCHA keys are invalid.', 'gravityformsrecaptcha' ) ); + } + + // Save status. + update_option( 'gform_recaptcha_keys_status', $recaptcha_response ); + } else { + // Delete existing status. + delete_option( 'gform_recaptcha_keys_status' ); + } + }, + ), + ), + ); + } + + /** + * Convert an array containing arrays of translated strings into HTML paragraphs. + * + * @param array $paragraphs An array of arrays containing translated text. + * + * @since 1.0 + * @return string + */ + private function get_description( array $paragraphs ) { + $description_text = array(); + + foreach ( $paragraphs as $paragraph ) { + $description_text[] = '

' . implode( ' ', $paragraph ) . '

'; + } + + return implode( '', $description_text ); + } + + /** + * Get the contents of the description field. + * + * @since 1.0 + * @return array + */ + private function get_settings_intro_description() { + $description = array(); + + $description[] = array( + esc_html__( 'Google reCAPTCHA is a free anti-spam service that protects your website from fraud and abuse.', 'gravityformsrecaptcha' ), + esc_html__( 'By adding reCAPTCHA to your forms, you can deter automated software from submitting form entries, while still ensuring a user-friendly experience for real people.', 'gravityformsrecaptcha' ), + ); + + $description[] = array( + esc_html__( 'Gravity Forms integrates with three types of Google reCAPTCHA.', 'gravityformsrecaptcha' ), + '
  • ', + esc_html__( 'reCAPTCHA v3 - Adds a script to every page of your site and uploads form content for processing by Google.', 'gravityformsrecaptcha' ), + esc_html__( 'All submissions are accepted and suspicious submissions are marked as spam.', 'gravityformsrecaptcha' ), + esc_html__( 'When reCAPTCHA v3 is configured, it is enabled automatically on all forms by default. It can be disabled for specific forms in the form settings.', 'gravityformsrecaptcha' ), + '
  • ', + esc_html__( 'reCAPTCHA v2 (Invisible) - Displays a badge on your form and will present a challenge to the user if the activity is suspicious e.g. select the traffic lights.', 'gravityformsrecaptcha' ), + esc_html__( 'Please note, only v2 keys are supported and checkbox keys are not compatible with invisible reCAPTCHA.', 'gravityformsrecaptcha' ), + esc_html__( 'To activate reCAPTCHA v2 on your form, simply add the CAPTCHA field in the form editor.', 'gravityformsrecaptcha' ), + sprintf( + '%s', + esc_url( 'https://docs.gravityforms.com/captcha/' ), + __( 'Read more about reCAPTCHA.', 'gravityformsrecaptcha' ) + ), + '
  • ', + esc_html__( 'reCAPTCHA v2 (Checkbox) - Requires a user to click a checkbox to indicate that they are not a robot and displays a challenge if the activity is suspicious', 'gravityformsrecaptcha' ), + '
', + ); + + $description[] = array( + esc_html__( 'For more information on reCAPTCHA, which version is right for you, and how to add it to your forms,', 'gravityformsrecaptcha' ), + sprintf( + '%s', + esc_url( 'https://docs.gravityforms.com/captcha/' ), + esc_html__( 'check out our documentation.', 'gravityformsrecaptcha' ) + ), + ); + + return $this->get_description( $description ); + } + + /** + * Get the description for the score threshold. + * + * @since 1.0 + * @return string + */ + private function get_score_threshold_description() { + $description = array( + array( + esc_html__( 'reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot).', 'gravityformsrecaptcha' ), + esc_html__( 'If the score is less than or equal to this threshold, the form submission will be sent to spam.', 'gravityformsrecaptcha' ), + esc_html__( 'The default threshold is 0.5.', 'gravityformsrecaptcha' ), + sprintf( + 'Learn about about reCAPTCHA.', + esc_url( 'https://docs.gravityforms.com/captcha/' ) + ), + ), + ); + + return $this->get_description( $description ); + } + + /** + * Renders a reCAPTCHA verification field. + * + * @since 1.0 + * + * @param array $props Field properties. + * @param bool $echo Output the field markup directly. + * + * @return string + */ + public function handle_recaptcha_v2_reset( $props = array(), $echo = true ) { + // Add setup message. + $html = sprintf( + '

%s

', + esc_html__( 'Please complete the reCAPTCHA widget to validate your reCAPTCHA keys:', 'gravityforms' ) + ); + + // Add reCAPTCHA container, reset input. + $html .= '
'; + $html .= sprintf( '', esc_attr( $this->addon->get_settings_renderer()->get_input_name_prefix() ), esc_attr( $props['name'] ) ); + + return $html; + } + + /** + * Validate that the score is a number between 0.0 and 1.0 + * + * @since 1.0 + * + * @param Base $field Settings field object. + * @param string $score The submitted score threshold. + * + * @return bool + */ + public function validate_score_threshold_v3( $field, $score ) { + if ( ! $field instanceof Text ) { + $field->set_error( esc_html__( 'Unexpected field type.', 'gravityformsrecaptcha' ) ); + return false; + } + + $field_value = (float) $score; + + if ( ! is_numeric( $score ) || $field_value < $field->min || $field_value > $field->max ) { + $field->set_error( esc_html__( 'Score threshold must be between 0.0 and 1.0', 'gravityformsrecaptcha' ) ); + return false; + } + + return true; + } + + /** + * Returns true, false, or null, depending on the state of validation. + * + * The add-on framework will use this value to determine which field icon to display. + * + * @since 1.0 + * + * @param null|string $key_status The status of the key (a string of 1 or 0). + * @param string $value The posted value of the field to validate. + * + * @return bool|null + */ + public function check_validated_status( $key_status, $value ) { + if ( ! is_null( $key_status ) ) { + return (bool) $key_status; + } + + return rgblank( $value ) ? null : false; + } + + /** + * Return strue, false, or null, depending on the state of validation. + * + * The add-on framework will use this value to determine which field icon to display. + * + * @since 1.0 + * + * @param string $value The posted value of the field. + * + * @return bool|null + */ + public function validate_key_v2( $value ) { + return $this->check_validated_status( get_option( 'gform_recaptcha_keys_status', null ), $value ); + } + + /** + * Feedback callback for v3 key validation. + * + * @param string $value The posted value. + * + * @return bool|null + */ + public function v3_keys_status_feedback_callback( $value ) { + return $this->check_validated_status( $this->addon->get_setting( 'recaptcha_keys_status_v3' ), $value ); + } + + /** + * Ajax callback to verify the secret key on the plugin settings screen. + * + * @since 1.0 + */ + public function verify_v3_keys() { + $result = $this->token_verifier->verify( + sanitize_text_field( rgpost( 'token' ) ), + sanitize_text_field( rgpost( 'secret_key_v3' ) ) + ); + + $this->apply_status_changes( $result ); + + if ( is_wp_error( $result ) ) { + $this->addon->log_debug( __METHOD__ . '(): Failed to verify reCAPTCHA token. ' . $result->get_error_message() ); + + wp_send_json_error(); + } + + $this->addon->log_debug( __METHOD__ . '(): reCAPTCHA token successfully verified.' ); + + $result->keys_status = $this->addon->get_plugin_setting( 'recaptcha_keys_status_v3' ); + + wp_send_json_success( $result ); + } + + /** + * Applies updates to the verified key status when the site and secret v3 keys are saved. + * + * @since 1.0 + * + * @param object $response The response of the secret key verification process. + */ + private function apply_status_changes( $response ) { + $posted_keys = $this->get_posted_keys(); + + // Set the updated status of the keys. + $posted_keys['recaptcha_keys_status_v3'] = ( ! is_wp_error( $response ) && $response->success === true ) ? '1' : '0'; + + $this->addon->update_plugin_settings( + array_merge( + $this->addon->get_plugin_settings(), + $posted_keys + ) + ); + } + + /** + * Get the posted of the v3 keys from the settings page. + * + * @since 1.0 + * + * @return array + */ + private function get_posted_keys() { + $settings = $this->addon->get_plugin_settings(); + $posted_site_key = $this->get_posted_key( 'site_key_v3' ); + $posted_secret_key = $this->get_posted_key( 'secret_key_v3' ); + + if ( + $posted_site_key === rgar( $settings, 'site_key_v3' ) + && $posted_secret_key === rgar( $settings, 'secret_key_v3' ) + ) { + return array(); + } + + return array( + 'site_key_v3' => $posted_site_key, + 'secret_key_v3' => $posted_secret_key, + ); + } + + /** + * Gets the value of the specified input from the $_POST. + * + * @since 1.3 + * + * @param string $key_name The name of the key to retrieve. + * + * @return string + */ + private function get_posted_key( $key_name ) { + if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) { + $key_name = "_gform_setting_{$key_name}"; + } + + return sanitize_text_field( rgpost( $key_name ) ); + } + + /** + * Get the value of one of the reCAPTCHA keys from the plugin settings. + * + * Checks first for a value defined as a constant, and secondarily, the add-on options. + * + * @since 1.0 + * @since 1.3 Added the $only_from_constant param. + * + * @param string $key_name The name of the key to retrieve. + * @param bool $only_from_constant Indicates if value should only be retrieved from the constant. + * + * @return string + */ + public function get_recaptcha_key( $key_name, $only_from_constant = false ) { + if ( ! $only_from_constant && is_admin() ) { + $posted_key = $this->get_posted_key( $key_name ); + + if ( $posted_key ) { + return $posted_key; + } + } + + $keys = array( + 'site_key_v3' => defined( 'GF_RECAPTCHA_V3_SITE_KEY' ) ? GF_RECAPTCHA_V3_SITE_KEY : '', + 'secret_key_v3' => defined( 'GF_RECAPTCHA_V3_SECRET_KEY' ) ? GF_RECAPTCHA_V3_SECRET_KEY : '', + 'site_key_v2' => '', + 'secret_key_v2' => '', + ); + + if ( ! in_array( $key_name, array_keys( $keys ), true ) ) { + return ''; + } + + $key = rgar( $keys, $key_name, '' ); + + if ( ! empty( $key ) || $only_from_constant ) { + return $key; + } + + $key = $this->addon->get_plugin_setting( $key_name ); + + return ! empty( $key ) ? $key : ''; + } +} diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js new file mode 100644 index 00000000..7e842c12 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js @@ -0,0 +1,146 @@ +/******/ (function() { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./js/src/frontend-legacy.js": +/*!***********************************!*\ + !*** ./js/src/frontend-legacy.js ***! + \***********************************/ +/***/ (function() { + +var _this = this; +/* global jQuery, gform, gforms_recaptcha_recaptcha_strings, grecaptcha */ +(function ($, gform, grecaptcha, strings) { + /** + * Make the API request to Google to get the reCAPTCHA token right before submission. + * + * @since 1.0 + * + * @param {Object} e The event object. + * @return {void} + */ + var getToken = function getToken(e) { + var form = $(e.data.form); + var recaptchaField = form.find('.ginput_recaptchav3'); + var dataInput = recaptchaField.find('.gfield_recaptcha_response'); + if (!dataInput.length || dataInput.val().length) { + return; + } + e.preventDefault(); + grecaptcha.ready(function () { + grecaptcha.execute(strings.site_key, { + action: 'submit' + }).then(function (token) { + if (token.length && typeof token === 'string') { + dataInput.val(token); + } + + // Sometimes the submit button is disabled to prevent the user from clicking it again, + // for example when 3DS is being processed for stripe elements. + // We need to enable it before submitting the form, otherwise it won't be submitted. + var $submitButton = $('#gform_submit_button_' + form[0].dataset.formid); + if ($submitButton.prop('disabled') === true) { + $submitButton.prop('disabled', false); + } + form.submit(); + }); + }); + }; + + /** + * Add event listeners to the form. + * + * @since 1.0 + * + * @param {string|number} formId The numeric ID of the form. + * @return {void} + */ + var addFormEventListeners = function addFormEventListeners(formId) { + var $form = $("#gform_".concat(formId, ":not(.recaptcha-v3-initialized)")); + $form.on('submit', { + form: $form + }, getToken); + $form.addClass('recaptcha-v3-initialized'); + }; + + /** + * The reCAPTCHA handler. + * + * @since 1.0 + * + * @return {void} + */ + var gfRecaptcha = function gfRecaptcha() { + var self = _this; + + /** + * Initialize the Recaptcha handler. + * + * @since 1.0 + * + * @return {void} + */ + self.init = function () { + self.elements = { + formIds: self.getFormIds() + }; + self.addEventListeners(); + }; + + /** + * Get an array of form IDs. + * + * @since 1.0 + * + * @return {Array} Array of form IDs. + */ + self.getFormIds = function () { + var ids = []; + var forms = document.querySelectorAll('.gform_wrapper form'); + forms.forEach(function (form) { + if ('formid' in form.dataset) { + ids.push(form.dataset.formid); + } else { + ids.push(form.getAttribute('id').split('gform_')[1]); + } + }); + return ids; + }; + + /** + * Add event listeners to the page. + * + * @since 1.0 + * + * @return {void} + */ + self.addEventListeners = function () { + self.elements.formIds.forEach(function (formId) { + addFormEventListeners(formId); + }); + $(document).on('gform_post_render', function (event, formId) { + addFormEventListeners(formId); + }); + }; + self.init(); + }; + + // Initialize and run the whole shebang. + $(document).ready(function () { + gfRecaptcha(); + }); +})(jQuery, gform, grecaptcha, gforms_recaptcha_recaptcha_strings); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = {}; +/******/ __webpack_modules__["./js/src/frontend-legacy.js"](); +/******/ +/******/ })() +; +//# sourceMappingURL=frontend-legacy.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js.map b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js.map new file mode 100644 index 00000000..1c4e85bb --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"./js/frontend-legacy.js","mappings":"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","sources":["webpack://gravityformsrecaptcha/./js/src/frontend-legacy.js","webpack://gravityformsrecaptcha/webpack/before-startup","webpack://gravityformsrecaptcha/webpack/startup","webpack://gravityformsrecaptcha/webpack/after-startup"],"sourcesContent":["/* global jQuery, gform, gforms_recaptcha_recaptcha_strings, grecaptcha */\n( ( $, gform, grecaptcha, strings ) => {\n\t/**\n\t * Make the API request to Google to get the reCAPTCHA token right before submission.\n\t *\n\t * @since 1.0\n\t *\n\t * @param {Object} e The event object.\n\t * @return {void}\n\t */\n\tconst getToken = ( e ) => {\n\t\tconst form = $( e.data.form );\n\t\tconst recaptchaField = form.find( '.ginput_recaptchav3' );\n\t\tconst dataInput = recaptchaField.find( '.gfield_recaptcha_response' );\n\n\t\tif ( ! dataInput.length || dataInput.val().length ) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tgrecaptcha.ready( () => {\n\t\t\tgrecaptcha.execute( strings.site_key, { action: 'submit' } )\n\t\t\t\t.then( ( token ) => {\n\t\t\t\t\tif ( token.length && typeof token === 'string' ) {\n\t\t\t\t\t\tdataInput.val( token );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Sometimes the submit button is disabled to prevent the user from clicking it again,\n\t\t\t\t\t// for example when 3DS is being processed for stripe elements.\n\t\t\t\t\t// We need to enable it before submitting the form, otherwise it won't be submitted.\n\t\t\t\t\tconst $submitButton = $( '#gform_submit_button_' + form[0].dataset.formid );\n\t\t\t\t\tif ( $submitButton.prop( 'disabled' ) === true ) {\n\t\t\t\t\t\t$submitButton.prop( 'disabled', false );\n\t\t\t\t\t}\n\n\t\t\t\t\tform.submit();\n\t\t\t\t} );\n\t\t} );\n\t};\n\n\t/**\n\t * Add event listeners to the form.\n\t *\n\t * @since 1.0\n\t *\n\t * @param {string|number} formId The numeric ID of the form.\n\t * @return {void}\n\t */\n\tconst addFormEventListeners = ( formId ) => {\n\t\tconst $form = $( `#gform_${ formId }:not(.recaptcha-v3-initialized)` );\n\n\t\t$form.on( 'submit', { form: $form }, getToken );\n\n\t\t$form.addClass( 'recaptcha-v3-initialized' );\n\t};\n\n\t/**\n\t * The reCAPTCHA handler.\n\t *\n\t * @since 1.0\n\t *\n\t * @return {void}\n\t */\n\tconst gfRecaptcha = () => {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Initialize the Recaptcha handler.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tself.init = () => {\n\t\t\tself.elements = {\n\t\t\t\tformIds: self.getFormIds(),\n\t\t\t};\n\t\t\tself.addEventListeners();\n\t\t};\n\n\t\t/**\n\t\t * Get an array of form IDs.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {Array} Array of form IDs.\n\t\t */\n\t\tself.getFormIds = () => {\n\t\t\tconst ids = [];\n\t\t\tconst forms = document.querySelectorAll( '.gform_wrapper form' );\n\n\t\t\tforms.forEach( ( form ) => {\n\t\t\t\tif ( 'formid' in form.dataset ) {\n\t\t\t\t\tids.push( form.dataset.formid );\n\t\t\t\t} else {\n\t\t\t\t\tids.push( form.getAttribute( 'id' ).split( 'gform_' )[ 1 ] );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn ids;\n\t\t};\n\n\t\t/**\n\t\t * Add event listeners to the page.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tself.addEventListeners = () => {\n\t\t\tself.elements.formIds.forEach( ( formId ) => {\n\t\t\t\taddFormEventListeners( formId );\n\t\t\t} );\n\n\t\t\t$( document ).on( 'gform_post_render', ( event, formId ) => {\n\t\t\t\taddFormEventListeners( formId );\n\t\t\t} );\n\t\t};\n\n\t\tself.init();\n\t};\n\n\t// Initialize and run the whole shebang.\n\t$( document ).ready( () => {\n\t\tgfRecaptcha();\n\t} );\n} )( jQuery, gform, grecaptcha, gforms_recaptcha_recaptcha_strings );\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = {};\n__webpack_modules__[\"./js/src/frontend-legacy.js\"]();\n",""],"names":["$","gform","grecaptcha","strings","getToken","e","form","data","recaptchaField","find","dataInput","length","val","preventDefault","ready","execute","site_key","action","then","token","$submitButton","dataset","formid","prop","submit","addFormEventListeners","formId","$form","concat","on","addClass","gfRecaptcha","self","_this","init","elements","formIds","getFormIds","addEventListeners","ids","forms","document","querySelectorAll","forEach","push","getAttribute","split","event","jQuery","gforms_recaptcha_recaptcha_strings"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.min.js b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.min.js new file mode 100644 index 00000000..43471acb --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend-legacy.min.js @@ -0,0 +1 @@ +({966:function(){var t=this;!function(e,n,r,i){var a=function(t){var n=e(t.data.form),a=n.find(".ginput_recaptchav3").find(".gfield_recaptcha_response");a.length&&!a.val().length&&(t.preventDefault(),r.ready((function(){r.execute(i.site_key,{action:"submit"}).then((function(t){t.length&&"string"==typeof t&&a.val(t);var r=e("#gform_submit_button_"+n[0].dataset.formid);!0===r.prop("disabled")&&r.prop("disabled",!1),n.submit()}))})))},o=function(t){var n=e("#gform_".concat(t,":not(.recaptcha-v3-initialized)"));n.on("submit",{form:n},a),n.addClass("recaptcha-v3-initialized")};e(document).ready((function(){var n;(n=t).init=function(){n.elements={formIds:n.getFormIds()},n.addEventListeners()},n.getFormIds=function(){var t=[];return document.querySelectorAll(".gform_wrapper form").forEach((function(e){"formid"in e.dataset?t.push(e.dataset.formid):t.push(e.getAttribute("id").split("gform_")[1])})),t},n.addEventListeners=function(){n.elements.formIds.forEach((function(t){o(t)})),e(document).on("gform_post_render",(function(t,e){o(e)}))},n.init()}))}(jQuery,gform,grecaptcha,gforms_recaptcha_recaptcha_strings)}})[966](); \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js new file mode 100644 index 00000000..0381db13 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js @@ -0,0 +1,106 @@ +/******/ (function() { // webpackBootstrap +var __webpack_exports__ = {}; +/*!****************************!*\ + !*** ./js/src/frontend.js ***! + \****************************/ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +/* global gform, gforms_recaptcha_recaptcha_strings, grecaptcha */ +(function (gform, grecaptcha, strings) { + var init = function init() { + var isInitialized = false; + document.addEventListener('gform/postRender', function (event) { + // Abort if already initialized. + if (isInitialized) { + return; + } + isInitialized = true; + + // Executing on AJAX validation. + gform.utils.addAsyncFilter('gform/ajax/pre_ajax_validation', /*#__PURE__*/function () { + var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data) { + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return executeRecaptcha(data.form); + case 2: + return _context.abrupt("return", data); + case 3: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function (_x) { + return _ref.apply(this, arguments); + }; + }()); + + // Executing recaptcha on form submission or Next button click. + gform.utils.addAsyncFilter('gform/submission/pre_submission', /*#__PURE__*/function () { + var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(data) { + var recaptchaRequired; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + recaptchaRequired = data.submissionType === gform.submission.SUBMISSION_TYPE_SUBMIT || data.submissionType === gform.submission.SUBMISSION_TYPE_NEXT; + if (!(recaptchaRequired && !data.abort)) { + _context2.next = 4; + break; + } + _context2.next = 4; + return executeRecaptcha(data.form); + case 4: + return _context2.abrupt("return", data); + case 5: + case "end": + return _context2.stop(); + } + }, _callee2); + })); + return function (_x2) { + return _ref2.apply(this, arguments); + }; + }()); + }); + }; + var executeRecaptcha = /*#__PURE__*/function () { + var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(form) { + var dataInput, token; + return _regeneratorRuntime().wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + dataInput = form.querySelector('.ginput_recaptchav3 .gfield_recaptcha_response'); // If reCAPTCHA fields can't be found, or recaptcha response is already set, don't execute reCAPTCHA. + if (!(!dataInput || dataInput.value.length)) { + _context3.next = 3; + break; + } + return _context3.abrupt("return"); + case 3: + _context3.next = 5; + return grecaptcha.execute(strings.site_key, { + action: 'submit' + }); + case 5: + token = _context3.sent; + if (token.length && typeof token === 'string') { + dataInput.value = token; + } + case 7: + case "end": + return _context3.stop(); + } + }, _callee3); + })); + return function executeRecaptcha(_x3) { + return _ref3.apply(this, arguments); + }; + }(); + init(); +})(gform, grecaptcha, gforms_recaptcha_recaptcha_strings); +/******/ })() +; +//# sourceMappingURL=frontend.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js.map b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js.map new file mode 100644 index 00000000..5c357136 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.js.map @@ -0,0 +1 @@ +{"version":3,"file":"./js/frontend.js","mappings":"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","sources":["webpack://gravityformsrecaptcha/./js/src/frontend.js"],"sourcesContent":["/* global gform, gforms_recaptcha_recaptcha_strings, grecaptcha */\n( ( gform, grecaptcha, strings ) => {\n\n const init = () => {\n let isInitialized = false;\n document.addEventListener( 'gform/postRender', ( event ) => {\n // Abort if already initialized.\n if ( isInitialized ) {\n return;\n }\n isInitialized = true;\n\n // Executing on AJAX validation.\n gform.utils.addAsyncFilter( 'gform/ajax/pre_ajax_validation', async ( data ) => {\n await executeRecaptcha( data.form );\n return data;\n });\n\n // Executing recaptcha on form submission or Next button click.\n gform.utils.addAsyncFilter( 'gform/submission/pre_submission', async ( data ) => {\n const recaptchaRequired = data.submissionType === gform.submission.SUBMISSION_TYPE_SUBMIT || data.submissionType === gform.submission.SUBMISSION_TYPE_NEXT;\n if ( recaptchaRequired && ! data.abort ) {\n await executeRecaptcha( data.form );\n }\n return data;\n });\n });\n };\n\n const executeRecaptcha = async ( form ) => {\n const dataInput = form.querySelector( '.ginput_recaptchav3 .gfield_recaptcha_response' );\n\n // If reCAPTCHA fields can't be found, or recaptcha response is already set, don't execute reCAPTCHA.\n if ( ! dataInput || dataInput.value.length ) {\n return;\n }\n\n // Execute reCAPTCHA and set the token to the hidden input field.\n const token = await grecaptcha.execute( strings.site_key, { action: 'submit' } );\n if ( token.length && typeof token === 'string' ) {\n dataInput.value = token;\n }\n };\n\n init();\n\n} )( gform, grecaptcha, gforms_recaptcha_recaptcha_strings );\n"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","gform","grecaptcha","strings","init","isInitialized","document","addEventListener","event","utils","addAsyncFilter","_ref","_callee","data","_callee$","_context","executeRecaptcha","form","_x","_ref2","_callee2","recaptchaRequired","_callee2$","_context2","submissionType","submission","SUBMISSION_TYPE_SUBMIT","SUBMISSION_TYPE_NEXT","abort","_x2","_ref3","_callee3","dataInput","token","_callee3$","_context3","querySelector","execute","site_key","action","_x3","gforms_recaptcha_recaptcha_strings"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js new file mode 100644 index 00000000..19cf1558 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js @@ -0,0 +1,2 @@ +/*! For license information please see frontend.min.js.LICENSE.txt */ +!function(){function t(r){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(r)}function r(){"use strict";r=function(){return n};var e,n={},o=Object.prototype,i=o.hasOwnProperty,a=Object.defineProperty||function(t,r,e){t[r]=e.value},c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",s=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function l(t,r,e){return Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[r]}try{l({},"")}catch(e){l=function(t,r,e){return t[r]=e}}function h(t,r,e,n){var o=r&&r.prototype instanceof w?r:w,i=Object.create(o.prototype),c=new G(n||[]);return a(i,"_invoke",{value:k(t,e,c)}),i}function p(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(t){return{type:"throw",arg:t}}}n.wrap=h;var y="suspendedStart",v="suspendedYield",d="executing",m="completed",g={};function w(){}function b(){}function x(){}var L={};l(L,u,(function(){return this}));var _=Object.getPrototypeOf,E=_&&_(_(I([])));E&&E!==o&&i.call(E,u)&&(L=E);var S=x.prototype=w.prototype=Object.create(L);function O(t){["next","throw","return"].forEach((function(r){l(t,r,(function(t){return this._invoke(r,t)}))}))}function j(r,e){function n(o,a,c,u){var s=p(r[o],r,a);if("throw"!==s.type){var f=s.arg,l=f.value;return l&&"object"==t(l)&&i.call(l,"__await")?e.resolve(l.__await).then((function(t){n("next",t,c,u)}),(function(t){n("throw",t,c,u)})):e.resolve(l).then((function(t){f.value=t,c(f)}),(function(t){return n("throw",t,c,u)}))}u(s.arg)}var o;a(this,"_invoke",{value:function(t,r){function i(){return new e((function(e,o){n(t,r,e,o)}))}return o=o?o.then(i,i):i()}})}function k(t,r,n){var o=y;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===m){if("throw"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=T(c,n);if(u){if(u===g)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===y)throw o=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var s=p(t,r,n);if("normal"===s.type){if(o=n.done?m:v,s.arg===g)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(o=m,n.method="throw",n.arg=s.arg)}}}function T(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,T(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var i=p(o,t.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,g;var a=i.arg;return a?a.done?(r[t.resultName]=a.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,g):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function N(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function P(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function G(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(N,this),this.reset(!0)}function I(r){if(r||""===r){var n=r[u];if(n)return n.call(r);if("function"==typeof r.next)return r;if(!isNaN(r.length)){var o=-1,a=function t(){for(;++o=0;--o){var a=this.tryEntries[o],c=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var u=i.call(a,"catchLoc"),s=i.call(a,"finallyLoc");if(u&&s){if(this.prev=0;--e){var n=this.tryEntries[e];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),P(e),g}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;P(e)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:I(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},n}function e(t,r,e,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void e(t)}c.done?r(u):Promise.resolve(u).then(n,o)}function n(t){return function(){var r=this,n=arguments;return new Promise((function(o,i){var a=t.apply(r,n);function c(t){e(a,o,i,c,u,"next",t)}function u(t){e(a,o,i,c,u,"throw",t)}c(void 0)}))}}!function(t,e,o){var i,a=function(){var t=n(r().mark((function t(n){var i,a;return r().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if((i=n.querySelector(".ginput_recaptchav3 .gfield_recaptcha_response"))&&!i.value.length){t.next=3;break}return t.abrupt("return");case 3:return t.next=5,e.execute(o.site_key,{action:"submit"});case 5:(a=t.sent).length&&"string"==typeof a&&(i.value=a);case 7:case"end":return t.stop()}}),t)})));return function(r){return t.apply(this,arguments)}}();i=!1,document.addEventListener("gform/postRender",(function(e){i||(i=!0,t.utils.addAsyncFilter("gform/ajax/pre_ajax_validation",function(){var t=n(r().mark((function t(e){return r().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,a(e.form);case 2:return t.abrupt("return",e);case 3:case"end":return t.stop()}}),t)})));return function(r){return t.apply(this,arguments)}}()),t.utils.addAsyncFilter("gform/submission/pre_submission",function(){var e=n(r().mark((function e(n){return r().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(n.submissionType!==t.submission.SUBMISSION_TYPE_SUBMIT&&n.submissionType!==t.submission.SUBMISSION_TYPE_NEXT||n.abort){r.next=4;break}return r.next=4,a(n.form);case 4:return r.abrupt("return",n);case 5:case"end":return r.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}))}(gform,grecaptcha,gforms_recaptcha_recaptcha_strings)}(); \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js.LICENSE.txt b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js.LICENSE.txt new file mode 100644 index 00000000..ae386fb7 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/frontend.min.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js b/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js new file mode 100644 index 00000000..f4d3b6ab --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js @@ -0,0 +1,412 @@ +/******/ (function() { // webpackBootstrap +var __webpack_exports__ = {}; +/*!***********************************!*\ + !*** ./js/src/plugin_settings.js ***! + \***********************************/ +/* global jQuery, gform, grecaptcha, gforms_recaptcha_recaptcha_strings */ + +(function ($) { + /** + * Handles reCAPTCHA v2 plugin settings validation. + * + * @since 1.0 + * + * @return {void} + */ + var recaptchaV2Settings = function recaptchaV2Settings() { + var v2Settings = {}; + + /** + * Initialize reCAPTCHA v2 settings. + * + * @since 1.0 + * + * @return {void} + */ + v2Settings.init = function () { + v2Settings.cacheElements(); + v2Settings.addEventListeners(); + }; + + /** + * Cache the fields used by this handler. + * + * @since 1.0 + * + * @return {void} + */ + v2Settings.cacheElements = function () { + v2Settings.container = $('div[id="gform_setting_reset_v2"]'); + v2Settings.fields = { + siteKey: $('input[name="_gform_setting_site_key_v2"]'), + secretKey: $('input[name="_gform_setting_secret_key_v2"]'), + reset: $('input[name="_gform_setting_reset_v2"]'), + type: $('input[name="_gform_setting_type_v2"]') + }; + }; + + /** + * Add event listeners for this handler. + * + * @since 1.0 + * + * @return {void} + */ + v2Settings.addEventListeners = function () { + v2Settings.fields.siteKey.on('change', window.loadRecaptcha); + v2Settings.fields.secretKey.on('change', window.loadRecaptcha); + v2Settings.fields.type.on('change', function () { + return window.loadRecaptcha(); + }); + }; + + /** + * Handles showing and hiding the reCAPTCHA itself. + * + * @since 1.0 + * + * @return {void} + */ + window.loadRecaptcha = function () { + var self = {}; + + /** + * Initialize the reCAPTCHA rendering process. + * + * @since 1.0 + * + * @return {void} + */ + self.init = function () { + v2Settings.recaptcha = $('#recaptcha'); + v2Settings.save = $('#gform-settings-save'); + self.flushExistingState(); + + // Reset key status. + // Note: recaptcha is misspelled here for legacy reasons. + $('#recpatcha .gform-settings-field__feedback').remove(); + + // If no public or private key is provided, exit. + if (!self.canBeDisplayed()) { + self.hideRecaptcha(); + return; + } + v2Settings.save.prop('disabled', true); + self.showSelectedRecaptcha(); + }; + + /** + * Renders the v2 reCAPTCHA. + * + * @since 1.0 + * + * @param {string} typeValue The selected type to render. + * + * @return {void} + */ + self.render = function (typeValue) { + // Render reCAPTCHA. + grecaptcha.render('recaptcha', { + sitekey: v2Settings.fields.siteKey.val().trim(), + size: typeValue === 'invisible' ? typeValue : '', + badge: 'inline', + 'error-callback': function errorCallback() {}, + callback: function callback() { + return v2Settings.save.prop('disabled', false); + } + }); + }; + + /** + * Flush the existing state of the reCAPTCHA handler. + * + * @since 1.0 + * + * @return {void} + */ + self.flushExistingState = function () { + window.___grecaptcha_cfg.clients = {}; + window.___grecaptcha_cfg.count = 0; + v2Settings.recaptcha.html(''); + v2Settings.fields.reset.val('1'); + }; + + /** + * Determines whether the reCAPTCHA can be shown. + * + * @since 1.0 + * + * @return {boolean} Whether the reCAPTCHA can be shown. + */ + self.canBeDisplayed = function () { + return v2Settings.fields.siteKey.val() && v2Settings.fields.secretKey.val(); + }; + + /** + * Hides the reCAPTCHA element. + * + * @since 1.0 + * + * @return {void} + */ + self.hideRecaptcha = function () { + v2Settings.save.prop('disabled', false); + v2Settings.container.hide(); + }; + + /** + * Show the selected reCAPTCHA type. + * + * @since 1.0 + * + * @return {void} + */ + self.showSelectedRecaptcha = function () { + var typeValue = $('input[name="_gform_setting_type_v2"]:checked').val(); + self.render(typeValue); + switch (typeValue) { + case 'checkbox': + $('#gforms_checkbox_recaptcha_message, label[for="reset"]').show(); + break; + case 'invisible': + $('#gforms_checkbox_recaptcha_message, label[for="reset"]').hide(); + break; + default: + throw new Error('Unexpected type selected.'); + } + v2Settings.container.show(); + if (typeValue === 'invisible') { + grecaptcha.execute(); + } + }; + self.init(); + }; + v2Settings.init(); + }; + + /** + * Handles reCAPTCHA v3 plugin settings validation. + * + * @since 1.0 + * + * @return {void} + */ + var recaptchaV3Settings = function recaptchaV3Settings() { + var v3Settings = {}; + + /** + * Initializes the reCAPTCHA v3 settings handler. + * + * @since 1.0 + * + * @return {void} + */ + v3Settings.init = function () { + v3Settings.token = ''; + v3Settings.strings = gforms_recaptcha_recaptcha_strings; + v3Settings.cacheElements(); + v3Settings.validateKeysV3(); + v3Settings.addEventListeners(); + }; + + /** + * Cache HTML elements for the v3 reCAPTCHA settings. + * + * @since 1.0 + * + * @return {void} + */ + v3Settings.cacheElements = function () { + v3Settings.fields = { + siteKey: '#site_key_v3', + secretKey: '#secret_key_v3', + threshold: '#score_threshold_v3', + disableBadge: '#disable_badge_v3', + keysStatus: '#gform_setting_recaptcha_keys_status_v3' + }; + v3Settings.cache = { + siteKey: $(v3Settings.fields.siteKey), + secretKey: $(v3Settings.fields.secretKey), + keysStatus: $(v3Settings.fields.keysStatus), + save: $('#gform-settings-save') + }; + }; + + /** + * Setup event listeners for field validation. + * + * @since 1.0 + * + * @return {void} + */ + v3Settings.addEventListeners = function () { + if (!v3Settings.strings.site_key.length) { + return; + } + $(v3Settings.fields.siteKey).on('keyup', function () { + return v3Settings.clearValidationFeedback(); + }); + $(v3Settings.fields.secretKey).on('keyup', function () { + return v3Settings.clearValidationFeedback(); + }); + }; + + /** + * Empty out the validation feedback if the fields are modified, as we can't yet know the status. + * + * @since 1.0 + * + * @return {void} + */ + v3Settings.clearValidationFeedback = function () { + v3Settings.unsetValid(v3Settings.cache.siteKey.closest('.gform-settings-input__container')); + v3Settings.unsetValid(v3Settings.cache.secretKey.closest('.gform-settings-input__container')); + }; + + /** + * Handles validation of the v3 site key. + * + * @since 1.0 + * + * @return {Promise} Returns a promise so this can be verified synchronously if checking the secret key. + */ + v3Settings.getRecaptchaToken = function () { + return new Promise(function (resolve, reject) { + var siteKeyContainer = v3Settings.cache.siteKey.closest('.gform-settings-input__container'); + try { + var siteKey = v3Settings.cache.siteKey; + var siteKeyValue = siteKey.val().trim(); + if (0 === siteKeyValue.length) { + v3Settings.unsetValid(siteKeyContainer); + v3Settings.unsetValid(v3Settings.cache.keysStatus.closest('.gform-settings-input__container')); + $(v3Settings.fields.keysStatus).find('input').val('0'); + return; + } + grecaptcha.ready(function () { + try { + grecaptcha.execute(siteKeyValue, { + action: 'submit' + }).then(function (token) { + resolve(token); + }); + } catch (error) { + reject(error); + } + }); + } catch (error) { + reject(error); + } + }); + }; + + /** + * Handles validation of the v3 site and secret keys. + * + * On page load, attempt to generate a reCAPTCHA token and immediately validate it on the server. If it's good, + * we'll update the presentation of the keys to indicate success or failure. + * + * @since 1.0 + * + * @return {void} + */ + v3Settings.validateKeysV3 = function () { + var siteKeyContainer = v3Settings.cache.siteKey.closest('.gform-settings-input__container'); + var secretKeyContainer = v3Settings.cache.secretKey.closest('.gform-settings-input__container'); + var keysStatusInput = $(v3Settings.fields.keysStatus).find('input'); + if (!$(v3Settings.fields.siteKey).val().trim().length) { + v3Settings.unsetValid(siteKeyContainer); + v3Settings.unsetValid(secretKeyContainer); + keysStatusInput.val('0'); + return; + } + v3Settings.getRecaptchaToken().then(function (token) { + v3Settings.token = token; + }).catch(function () { + v3Settings.setInvalid(siteKeyContainer); + v3Settings.setInvalid(secretKeyContainer); + keysStatusInput.val('0'); + }).finally(function () { + $.ajax({ + method: 'POST', + dataType: 'JSON', + url: v3Settings.strings.ajaxurl, + data: { + action: 'verify_secret_key', + nonce: v3Settings.strings.nonce, + token: v3Settings.token, + site_key_v3: $(v3Settings.fields.siteKey).val(), + secret_key_v3: $(v3Settings.fields.secretKey).val() + } + }).then(function (response) { + switch (response.data.keys_status) { + case '1': + v3Settings.setValid(siteKeyContainer); + v3Settings.setValid(secretKeyContainer); + keysStatusInput.val('1'); + break; + case '0': + v3Settings.setInvalid(siteKeyContainer); + v3Settings.setInvalid(secretKeyContainer); + keysStatusInput.val('0'); + break; + default: + v3Settings.unsetValid(siteKeyContainer); + v3Settings.unsetValid(secretKeyContainer); + keysStatusInput.val('0'); + } + }); + }); + }; + + /** + * Updates the text field to display no feedback. + * + * @since 1.0 + * + * @param {Object} el The jQuery element. + * + * @return {void} + */ + v3Settings.unsetValid = function (el) { + el.removeClass('gform-settings-input__container--feedback-success'); + el.removeClass('gform-settings-input__container--feedback-error'); + }; + + /** + * Updates the text field to display the successful feedback. + * + * @since 1.0 + * + * @param {Object} el The jQuery element. + * + * @return {void} + */ + v3Settings.setValid = function (el) { + el.addClass('gform-settings-input__container--feedback-success'); + el.removeClass('gform-settings-input__container--feedback-error'); + }; + + /** + * Updates the text field to display the error feedback. + * + * @since 1.0 + * + * @param {Object} el The jQuery element. + * + * @return {void} + */ + v3Settings.setInvalid = function (el) { + el.removeClass('gform-settings-input__container--feedback-success'); + el.addClass('gform-settings-input__container--feedback-error'); + }; + v3Settings.init(); + }; + $(document).ready(function () { + recaptchaV3Settings(); + recaptchaV2Settings(); + gform.adminUtils.handleUnsavedChanges('#gform-settings'); + }); +})(jQuery); +/******/ })() +; +//# sourceMappingURL=plugin_settings.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js.map b/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js.map new file mode 100644 index 00000000..4f02f112 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"./js/plugin_settings.js","mappings":"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","sources":["webpack://gravityformsrecaptcha/./js/src/plugin_settings.js"],"sourcesContent":["/* global jQuery, gform, grecaptcha, gforms_recaptcha_recaptcha_strings */\n\n( ( $ ) => {\n\t/**\n\t * Handles reCAPTCHA v2 plugin settings validation.\n\t *\n\t * @since 1.0\n\t *\n\t * @return {void}\n\t */\n\tconst recaptchaV2Settings = () => {\n\t\tconst v2Settings = {};\n\n\t\t/**\n\t\t * Initialize reCAPTCHA v2 settings.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv2Settings.init = () => {\n\t\t\tv2Settings.cacheElements();\n\t\t\tv2Settings.addEventListeners();\n\t\t};\n\n\t\t/**\n\t\t * Cache the fields used by this handler.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv2Settings.cacheElements = () => {\n\t\t\tv2Settings.container = $( 'div[id=\"gform_setting_reset_v2\"]' );\n\t\t\tv2Settings.fields = {\n\t\t\t\tsiteKey: $( 'input[name=\"_gform_setting_site_key_v2\"]' ),\n\t\t\t\tsecretKey: $( 'input[name=\"_gform_setting_secret_key_v2\"]' ),\n\t\t\t\treset: $( 'input[name=\"_gform_setting_reset_v2\"]' ),\n\t\t\t\ttype: $( 'input[name=\"_gform_setting_type_v2\"]' ),\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t\t * Add event listeners for this handler.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv2Settings.addEventListeners = () => {\n\t\t\tv2Settings.fields.siteKey.on( 'change', window.loadRecaptcha );\n\t\t\tv2Settings.fields.secretKey.on( 'change', window.loadRecaptcha );\n\t\t\tv2Settings.fields.type.on( 'change', () => window.loadRecaptcha() );\n\t\t};\n\n\t\t/**\n\t\t * Handles showing and hiding the reCAPTCHA itself.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\twindow.loadRecaptcha = () => {\n\t\t\tconst self = {};\n\n\t\t\t/**\n\t\t\t * Initialize the reCAPTCHA rendering process.\n\t\t\t *\n\t\t\t * @since 1.0\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tself.init = () => {\n\t\t\t\tv2Settings.recaptcha = $( '#recaptcha' );\n\t\t\t\tv2Settings.save = $( '#gform-settings-save' );\n\t\t\t\tself.flushExistingState();\n\n\t\t\t\t// Reset key status.\n\t\t\t\t// Note: recaptcha is misspelled here for legacy reasons.\n\t\t\t\t$( '#recpatcha .gform-settings-field__feedback' ).remove();\n\n\t\t\t\t// If no public or private key is provided, exit.\n\t\t\t\tif ( ! self.canBeDisplayed() ) {\n\t\t\t\t\tself.hideRecaptcha();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tv2Settings.save.prop( 'disabled', true );\n\n\t\t\t\tself.showSelectedRecaptcha();\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Renders the v2 reCAPTCHA.\n\t\t\t *\n\t\t\t * @since 1.0\n\t\t\t *\n\t\t\t * @param {string} typeValue The selected type to render.\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tself.render = ( typeValue ) => {\n\t\t\t\t// Render reCAPTCHA.\n\t\t\t\tgrecaptcha.render(\n\t\t\t\t\t'recaptcha',\n\t\t\t\t\t{\n\t\t\t\t\t\tsitekey: v2Settings.fields.siteKey.val().trim(),\n\t\t\t\t\t\tsize: typeValue === 'invisible' ? typeValue : '',\n\t\t\t\t\t\tbadge: 'inline',\n\t\t\t\t\t\t'error-callback': () => {},\n\t\t\t\t\t\tcallback: () => v2Settings.save.prop( 'disabled', false ),\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Flush the existing state of the reCAPTCHA handler.\n\t\t\t *\n\t\t\t * @since 1.0\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tself.flushExistingState = () => {\n\t\t\t\twindow.___grecaptcha_cfg.clients = {};\n\t\t\t\twindow.___grecaptcha_cfg.count = 0;\n\t\t\t\tv2Settings.recaptcha.html( '' );\n\t\t\t\tv2Settings.fields.reset.val( '1' );\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Determines whether the reCAPTCHA can be shown.\n\t\t\t *\n\t\t\t * @since 1.0\n\t\t\t *\n\t\t\t * @return {boolean} Whether the reCAPTCHA can be shown.\n\t\t\t */\n\t\t\tself.canBeDisplayed = () => {\n\t\t\t\treturn v2Settings.fields.siteKey.val() && v2Settings.fields.secretKey.val();\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Hides the reCAPTCHA element.\n\t\t\t *\n\t\t\t * @since 1.0\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tself.hideRecaptcha = () => {\n\t\t\t\tv2Settings.save.prop( 'disabled', false );\n\t\t\t\tv2Settings.container.hide();\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Show the selected reCAPTCHA type.\n\t\t\t *\n\t\t\t * @since 1.0\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tself.showSelectedRecaptcha = () => {\n\t\t\t\tconst typeValue = $( 'input[name=\"_gform_setting_type_v2\"]:checked' ).val();\n\n\t\t\t\tself.render( typeValue );\n\n\t\t\t\tswitch ( typeValue ) {\n\t\t\t\t\tcase 'checkbox':\n\t\t\t\t\t\t$( '#gforms_checkbox_recaptcha_message, label[for=\"reset\"]' ).show();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'invisible':\n\t\t\t\t\t\t$( '#gforms_checkbox_recaptcha_message, label[for=\"reset\"]' ).hide();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'Unexpected type selected.' );\n\t\t\t\t}\n\n\t\t\t\tv2Settings.container.show();\n\n\t\t\t\tif ( typeValue === 'invisible' ) {\n\t\t\t\t\tgrecaptcha.execute();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tself.init();\n\t\t};\n\n\t\tv2Settings.init();\n\t};\n\n\t/**\n\t * Handles reCAPTCHA v3 plugin settings validation.\n\t *\n\t * @since 1.0\n\t *\n\t * @return {void}\n\t */\n\tconst recaptchaV3Settings = () => {\n\t\tconst v3Settings = {};\n\n\t\t/**\n\t\t * Initializes the reCAPTCHA v3 settings handler.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.init = () => {\n\t\t\tv3Settings.token = '';\n\t\t\tv3Settings.strings = gforms_recaptcha_recaptcha_strings;\n\n\t\t\tv3Settings.cacheElements();\n\t\t\tv3Settings.validateKeysV3();\n\t\t\tv3Settings.addEventListeners();\n\t\t};\n\n\t\t/**\n\t\t * Cache HTML elements for the v3 reCAPTCHA settings.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.cacheElements = () => {\n\t\t\tv3Settings.fields = {\n\t\t\t\tsiteKey: '#site_key_v3',\n\t\t\t\tsecretKey: '#secret_key_v3',\n\t\t\t\tthreshold: '#score_threshold_v3',\n\t\t\t\tdisableBadge: '#disable_badge_v3',\n\t\t\t\tkeysStatus: '#gform_setting_recaptcha_keys_status_v3',\n\t\t\t};\n\n\t\t\tv3Settings.cache = {\n\t\t\t\tsiteKey: $( v3Settings.fields.siteKey ),\n\t\t\t\tsecretKey: $( v3Settings.fields.secretKey ),\n\t\t\t\tkeysStatus: $( v3Settings.fields.keysStatus ),\n\t\t\t\tsave: $( '#gform-settings-save' ),\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t\t * Setup event listeners for field validation.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.addEventListeners = () => {\n\t\t\tif ( ! v3Settings.strings.site_key.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$( v3Settings.fields.siteKey ).on( 'keyup', () => v3Settings.clearValidationFeedback() );\n\t\t\t$( v3Settings.fields.secretKey ).on( 'keyup', () => v3Settings.clearValidationFeedback() );\n\t\t};\n\n\t\t/**\n\t\t * Empty out the validation feedback if the fields are modified, as we can't yet know the status.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.clearValidationFeedback = () => {\n\t\t\tv3Settings.unsetValid( v3Settings.cache.siteKey.closest( '.gform-settings-input__container' ) );\n\t\t\tv3Settings.unsetValid( v3Settings.cache.secretKey.closest( '.gform-settings-input__container' ) );\n\t\t};\n\n\t\t/**\n\t\t * Handles validation of the v3 site key.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {Promise} Returns a promise so this can be verified synchronously if checking the secret key.\n\t\t */\n\t\tv3Settings.getRecaptchaToken = () => {\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tconst siteKeyContainer = v3Settings.cache.siteKey.closest( '.gform-settings-input__container' );\n\n\t\t\t\ttry {\n\t\t\t\t\tconst { siteKey } = v3Settings.cache;\n\t\t\t\t\tconst siteKeyValue = siteKey.val().trim();\n\n\t\t\t\t\tif ( 0 === siteKeyValue.length ) {\n\t\t\t\t\t\tv3Settings.unsetValid( siteKeyContainer );\n\t\t\t\t\t\tv3Settings.unsetValid( v3Settings.cache.keysStatus.closest( '.gform-settings-input__container' ) );\n\t\t\t\t\t\t$( v3Settings.fields.keysStatus ).find( 'input' ).val( '0' );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tgrecaptcha.ready( () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tgrecaptcha.execute( siteKeyValue, { action: 'submit' } ).then( ( token ) => {\n\t\t\t\t\t\t\t\tresolve( token );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\t\treject( error );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} catch ( error ) {\n\t\t\t\t\treject( error );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Handles validation of the v3 site and secret keys.\n\t\t *\n\t\t * On page load, attempt to generate a reCAPTCHA token and immediately validate it on the server. If it's good,\n\t\t * we'll update the presentation of the keys to indicate success or failure.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.validateKeysV3 = () => {\n\t\t\tconst siteKeyContainer = v3Settings.cache.siteKey.closest( '.gform-settings-input__container' );\n\t\t\tconst secretKeyContainer = v3Settings.cache.secretKey.closest( '.gform-settings-input__container' );\n\t\t\tconst keysStatusInput = $( v3Settings.fields.keysStatus ).find( 'input' );\n\n\t\t\tif ( ! $( v3Settings.fields.siteKey ).val().trim().length ) {\n\t\t\t\tv3Settings.unsetValid( siteKeyContainer );\n\t\t\t\tv3Settings.unsetValid( secretKeyContainer );\n\t\t\t\tkeysStatusInput.val( '0' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tv3Settings.getRecaptchaToken()\n\t\t\t\t.then( ( token ) => {\n\t\t\t\t\tv3Settings.token = token;\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\tv3Settings.setInvalid( siteKeyContainer );\n\t\t\t\t\tv3Settings.setInvalid( secretKeyContainer );\n\t\t\t\t\tkeysStatusInput.val( '0' );\n\t\t\t\t} )\n\t\t\t\t.finally( () => {\n\t\t\t\t\t$.ajax(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\t\tdataType: 'JSON',\n\t\t\t\t\t\t\turl: v3Settings.strings.ajaxurl,\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\taction: 'verify_secret_key',\n\t\t\t\t\t\t\t\tnonce: v3Settings.strings.nonce,\n\t\t\t\t\t\t\t\ttoken: v3Settings.token,\n\t\t\t\t\t\t\t\tsite_key_v3: $( v3Settings.fields.siteKey ).val(),\n\t\t\t\t\t\t\t\tsecret_key_v3: $( v3Settings.fields.secretKey ).val(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t).then( ( response ) => {\n\t\t\t\t\t\tswitch ( response.data.keys_status ) {\n\t\t\t\t\t\t\tcase '1':\n\t\t\t\t\t\t\t\tv3Settings.setValid( siteKeyContainer );\n\t\t\t\t\t\t\t\tv3Settings.setValid( secretKeyContainer );\n\t\t\t\t\t\t\t\tkeysStatusInput.val( '1' );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '0':\n\t\t\t\t\t\t\t\tv3Settings.setInvalid( siteKeyContainer );\n\t\t\t\t\t\t\t\tv3Settings.setInvalid( secretKeyContainer );\n\t\t\t\t\t\t\t\tkeysStatusInput.val( '0' );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tv3Settings.unsetValid( siteKeyContainer );\n\t\t\t\t\t\t\t\tv3Settings.unsetValid( secretKeyContainer );\n\t\t\t\t\t\t\t\tkeysStatusInput.val( '0' );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Updates the text field to display no feedback.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @param {Object} el The jQuery element.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.unsetValid = ( el ) => {\n\t\t\tel.removeClass( 'gform-settings-input__container--feedback-success' );\n\t\t\tel.removeClass( 'gform-settings-input__container--feedback-error' );\n\t\t};\n\n\t\t/**\n\t\t * Updates the text field to display the successful feedback.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @param {Object} el The jQuery element.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.setValid = ( el ) => {\n\t\t\tel.addClass( 'gform-settings-input__container--feedback-success' );\n\t\t\tel.removeClass( 'gform-settings-input__container--feedback-error' );\n\t\t};\n\n\t\t/**\n\t\t * Updates the text field to display the error feedback.\n\t\t *\n\t\t * @since 1.0\n\t\t *\n\t\t * @param {Object} el The jQuery element.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tv3Settings.setInvalid = ( el ) => {\n\t\t\tel.removeClass( 'gform-settings-input__container--feedback-success' );\n\t\t\tel.addClass( 'gform-settings-input__container--feedback-error' );\n\t\t};\n\n\t\tv3Settings.init();\n\t};\n\n\t$( document ).ready( () => {\n\t\trecaptchaV3Settings();\n\t\trecaptchaV2Settings();\n\t\tgform.adminUtils.handleUnsavedChanges( '#gform-settings' );\n\t} );\n} )( jQuery );\n"],"names":["$","recaptchaV2Settings","v2Settings","init","cacheElements","addEventListeners","container","fields","siteKey","secretKey","reset","type","on","window","loadRecaptcha","self","recaptcha","save","flushExistingState","remove","canBeDisplayed","hideRecaptcha","prop","showSelectedRecaptcha","render","typeValue","grecaptcha","sitekey","val","trim","size","badge","errorCallback","callback","___grecaptcha_cfg","clients","count","html","hide","show","Error","execute","recaptchaV3Settings","v3Settings","token","strings","gforms_recaptcha_recaptcha_strings","validateKeysV3","threshold","disableBadge","keysStatus","cache","site_key","length","clearValidationFeedback","unsetValid","closest","getRecaptchaToken","Promise","resolve","reject","siteKeyContainer","siteKeyValue","find","ready","action","then","error","secretKeyContainer","keysStatusInput","catch","setInvalid","finally","ajax","method","dataType","url","ajaxurl","data","nonce","site_key_v3","secret_key_v3","response","keys_status","setValid","el","removeClass","addClass","document","gform","adminUtils","handleUnsavedChanges","jQuery"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.min.js b/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.min.js new file mode 100644 index 00000000..81a87900 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/js/plugin_settings.min.js @@ -0,0 +1 @@ +!function(){var e;(e=jQuery)(document).ready((function(){var t,n;(t={init:function(){t.token="",t.strings=gforms_recaptcha_recaptcha_strings,t.cacheElements(),t.validateKeysV3(),t.addEventListeners()},cacheElements:function(){t.fields={siteKey:"#site_key_v3",secretKey:"#secret_key_v3",threshold:"#score_threshold_v3",disableBadge:"#disable_badge_v3",keysStatus:"#gform_setting_recaptcha_keys_status_v3"},t.cache={siteKey:e(t.fields.siteKey),secretKey:e(t.fields.secretKey),keysStatus:e(t.fields.keysStatus),save:e("#gform-settings-save")}},addEventListeners:function(){t.strings.site_key.length&&(e(t.fields.siteKey).on("keyup",(function(){return t.clearValidationFeedback()})),e(t.fields.secretKey).on("keyup",(function(){return t.clearValidationFeedback()})))},clearValidationFeedback:function(){t.unsetValid(t.cache.siteKey.closest(".gform-settings-input__container")),t.unsetValid(t.cache.secretKey.closest(".gform-settings-input__container"))},getRecaptchaToken:function(){return new Promise((function(n,s){var a=t.cache.siteKey.closest(".gform-settings-input__container");try{var i=t.cache.siteKey.val().trim();if(0===i.length)return t.unsetValid(a),t.unsetValid(t.cache.keysStatus.closest(".gform-settings-input__container")),void e(t.fields.keysStatus).find("input").val("0");grecaptcha.ready((function(){try{grecaptcha.execute(i,{action:"submit"}).then((function(e){n(e)}))}catch(e){s(e)}}))}catch(e){s(e)}}))},validateKeysV3:function(){var n=t.cache.siteKey.closest(".gform-settings-input__container"),s=t.cache.secretKey.closest(".gform-settings-input__container"),a=e(t.fields.keysStatus).find("input");if(!e(t.fields.siteKey).val().trim().length)return t.unsetValid(n),t.unsetValid(s),void a.val("0");t.getRecaptchaToken().then((function(e){t.token=e})).catch((function(){t.setInvalid(n),t.setInvalid(s),a.val("0")})).finally((function(){e.ajax({method:"POST",dataType:"JSON",url:t.strings.ajaxurl,data:{action:"verify_secret_key",nonce:t.strings.nonce,token:t.token,site_key_v3:e(t.fields.siteKey).val(),secret_key_v3:e(t.fields.secretKey).val()}}).then((function(e){switch(e.data.keys_status){case"1":t.setValid(n),t.setValid(s),a.val("1");break;case"0":t.setInvalid(n),t.setInvalid(s),a.val("0");break;default:t.unsetValid(n),t.unsetValid(s),a.val("0")}}))}))},unsetValid:function(e){e.removeClass("gform-settings-input__container--feedback-success"),e.removeClass("gform-settings-input__container--feedback-error")},setValid:function(e){e.addClass("gform-settings-input__container--feedback-success"),e.removeClass("gform-settings-input__container--feedback-error")},setInvalid:function(e){e.removeClass("gform-settings-input__container--feedback-success"),e.addClass("gform-settings-input__container--feedback-error")}}).init(),n={init:function(){n.cacheElements(),n.addEventListeners()},cacheElements:function(){n.container=e('div[id="gform_setting_reset_v2"]'),n.fields={siteKey:e('input[name="_gform_setting_site_key_v2"]'),secretKey:e('input[name="_gform_setting_secret_key_v2"]'),reset:e('input[name="_gform_setting_reset_v2"]'),type:e('input[name="_gform_setting_type_v2"]')}},addEventListeners:function(){n.fields.siteKey.on("change",window.loadRecaptcha),n.fields.secretKey.on("change",window.loadRecaptcha),n.fields.type.on("change",(function(){return window.loadRecaptcha()}))}},window.loadRecaptcha=function(){var t={init:function(){n.recaptcha=e("#recaptcha"),n.save=e("#gform-settings-save"),t.flushExistingState(),e("#recpatcha .gform-settings-field__feedback").remove(),t.canBeDisplayed()?(n.save.prop("disabled",!0),t.showSelectedRecaptcha()):t.hideRecaptcha()},render:function(e){grecaptcha.render("recaptcha",{sitekey:n.fields.siteKey.val().trim(),size:"invisible"===e?e:"",badge:"inline","error-callback":function(){},callback:function(){return n.save.prop("disabled",!1)}})},flushExistingState:function(){window.___grecaptcha_cfg.clients={},window.___grecaptcha_cfg.count=0,n.recaptcha.html(""),n.fields.reset.val("1")},canBeDisplayed:function(){return n.fields.siteKey.val()&&n.fields.secretKey.val()},hideRecaptcha:function(){n.save.prop("disabled",!1),n.container.hide()},showSelectedRecaptcha:function(){var s=e('input[name="_gform_setting_type_v2"]:checked').val();switch(t.render(s),s){case"checkbox":e('#gforms_checkbox_recaptcha_message, label[for="reset"]').show();break;case"invisible":e('#gforms_checkbox_recaptcha_message, label[for="reset"]').hide();break;default:throw new Error("Unexpected type selected.")}n.container.show(),"invisible"===s&&grecaptcha.execute()}};t.init()},n.init(),gform.adminUtils.handleUnsavedChanges("#gform-settings")}))}(); \ No newline at end of file diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/languages/gravityformsrecaptcha.pot b/wp/wp-content/plugins/gravityformsrecaptcha/languages/gravityformsrecaptcha.pot new file mode 100644 index 00000000..1cc74124 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/languages/gravityformsrecaptcha.pot @@ -0,0 +1,186 @@ +# Copyright (C) 2024 Gravity Forms +# This file is distributed under the GPL-3.0+. +msgid "" +msgstr "" +"Project-Id-Version: Gravity Forms reCAPTCHA Add-On 1.6.0\n" +"Report-Msgid-Bugs-To: https://gravityforms.com/support\n" +"Last-Translator: Gravity Forms \n" +"Language-Team: Gravity Forms \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-07-30T13:59:39+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: gravityformsrecaptcha\n" + +#. Plugin Name of the plugin +msgid "Gravity Forms reCAPTCHA Add-On" +msgstr "" + +#. Plugin URI of the plugin +#. Author URI of the plugin +msgid "https://gravityforms.com" +msgstr "" + +#. Description of the plugin +msgid "Enhance Gravity Forms with support for Google reCAPTCHA." +msgstr "" + +#. Author of the plugin +msgid "Gravity Forms" +msgstr "" + +#: class-gf-recaptcha.php:492 +msgid "Disable reCAPTCHA v3 for this form." +msgstr "" + +#: class-gf-recaptcha.php:674 +msgid "reCAPTCHA Score" +msgstr "" + +#: class-gf-recaptcha.php:735 +msgid "reCAPTCHA" +msgstr "" + +#: class-gf-recaptcha.php:756 +msgid "Score" +msgstr "" + +#: class-gf-recaptcha.php:759 +msgid "Click here to learn more about reCAPTCHA." +msgstr "" + +#: includes/settings/class-plugin-settings.php:122 +msgid "reCAPTCHA Settings" +msgstr "" + +#: includes/settings/class-plugin-settings.php:144 +msgid "reCAPTCHA v3" +msgstr "" + +#: includes/settings/class-plugin-settings.php:148 +#: includes/settings/class-plugin-settings.php:233 +msgid "Site Key" +msgstr "" + +#: includes/settings/class-plugin-settings.php:156 +#: includes/settings/class-plugin-settings.php:240 +msgid "Secret Key" +msgstr "" + +#: includes/settings/class-plugin-settings.php:164 +msgid "Score Threshold" +msgstr "" + +#: includes/settings/class-plugin-settings.php:176 +msgid "Disable Google reCAPTCHA Badge" +msgstr "" + +#: includes/settings/class-plugin-settings.php:177 +msgid "By default reCAPTCHA v3 displays a badge on every page of your site with links to the Google terms of service and privacy policy. You are allowed to hide the badge as long as you include the reCAPTCHA branding and links visibly in the user flow." +msgstr "" + +#: includes/settings/class-plugin-settings.php:182 +msgid "I have added the reCAPTCHA branding, terms of service and privacy policy to my site. " +msgstr "" + +#: includes/settings/class-plugin-settings.php:217 +msgid "Value defined using the %s constant." +msgstr "" + +#: includes/settings/class-plugin-settings.php:229 +msgid "reCAPTCHA v2" +msgstr "" + +#: includes/settings/class-plugin-settings.php:247 +msgid "Type" +msgstr "" + +#: includes/settings/class-plugin-settings.php:254 +msgid "Checkbox" +msgstr "" + +#: includes/settings/class-plugin-settings.php:258 +msgid "Invisible" +msgstr "" + +#: includes/settings/class-plugin-settings.php:265 +msgid "Validate Keys" +msgstr "" + +#: includes/settings/class-plugin-settings.php:301 +msgid "reCAPTCHA keys are invalid." +msgstr "" + +#: includes/settings/class-plugin-settings.php:344 +msgid "Google reCAPTCHA is a free anti-spam service that protects your website from fraud and abuse." +msgstr "" + +#: includes/settings/class-plugin-settings.php:345 +msgid "By adding reCAPTCHA to your forms, you can deter automated software from submitting form entries, while still ensuring a user-friendly experience for real people." +msgstr "" + +#: includes/settings/class-plugin-settings.php:349 +msgid "Gravity Forms integrates with three types of Google reCAPTCHA." +msgstr "" + +#: includes/settings/class-plugin-settings.php:351 +msgid "reCAPTCHA v3 - Adds a script to every page of your site and uploads form content for processing by Google." +msgstr "" + +#: includes/settings/class-plugin-settings.php:352 +msgid "All submissions are accepted and suspicious submissions are marked as spam." +msgstr "" + +#: includes/settings/class-plugin-settings.php:353 +msgid "When reCAPTCHA v3 is configured, it is enabled automatically on all forms by default. It can be disabled for specific forms in the form settings." +msgstr "" + +#: includes/settings/class-plugin-settings.php:355 +msgid "reCAPTCHA v2 (Invisible) - Displays a badge on your form and will present a challenge to the user if the activity is suspicious e.g. select the traffic lights." +msgstr "" + +#: includes/settings/class-plugin-settings.php:356 +msgid "Please note, only v2 keys are supported and checkbox keys are not compatible with invisible reCAPTCHA." +msgstr "" + +#: includes/settings/class-plugin-settings.php:357 +msgid "To activate reCAPTCHA v2 on your form, simply add the CAPTCHA field in the form editor." +msgstr "" + +#: includes/settings/class-plugin-settings.php:361 +msgid "Read more about reCAPTCHA." +msgstr "" + +#: includes/settings/class-plugin-settings.php:364 +msgid "reCAPTCHA v2 (Checkbox) - Requires a user to click a checkbox to indicate that they are not a robot and displays a challenge if the activity is suspicious" +msgstr "" + +#: includes/settings/class-plugin-settings.php:369 +msgid "For more information on reCAPTCHA, which version is right for you, and how to add it to your forms," +msgstr "" + +#: includes/settings/class-plugin-settings.php:373 +msgid "check out our documentation." +msgstr "" + +#: includes/settings/class-plugin-settings.php:389 +msgid "reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot)." +msgstr "" + +#: includes/settings/class-plugin-settings.php:390 +msgid "If the score is less than or equal to this threshold, the form submission will be sent to spam." +msgstr "" + +#: includes/settings/class-plugin-settings.php:391 +msgid "The default threshold is 0.5." +msgstr "" + +#: includes/settings/class-plugin-settings.php:438 +msgid "Unexpected field type." +msgstr "" + +#: includes/settings/class-plugin-settings.php:445 +msgid "Score threshold must be between 0.0 and 1.0" +msgstr "" diff --git a/wp/wp-content/plugins/gravityformsrecaptcha/recaptcha.php b/wp/wp-content/plugins/gravityformsrecaptcha/recaptcha.php new file mode 100644 index 00000000..07f9ae73 --- /dev/null +++ b/wp/wp-content/plugins/gravityformsrecaptcha/recaptcha.php @@ -0,0 +1,78 @@ + { + bud.externals({ + jQuery: 'window.jquery', + wp: 'window.wp', + }) + bud.runtime('single') + + await bud + .setPath('@dist', '../assets/admin') + .entry({ + chart: 'chart.js', + bulk: 'bulk.js', + }) + //.when( bud.isProduction, () => bud.splitChunks().minimize() ) +} diff --git a/wp/wp-content/plugins/imagify/_dev/package.json b/wp/wp-content/plugins/imagify/_dev/package.json new file mode 100644 index 00000000..ce77be15 --- /dev/null +++ b/wp/wp-content/plugins/imagify/_dev/package.json @@ -0,0 +1,15 @@ +{ + "name": "imagify_dev", + "version": "1.0.0", + "dependencies": { + }, + "devDependencies": { + "@roots/bud": "^6.11.0", + "chart.js": "^4.4.0" + }, + "scripts": { + "dev": "bud dev", + "build": "bud build", + "bud": "bud" + } +} diff --git a/wp/wp-content/plugins/imagify/_dev/src/bulk.js b/wp/wp-content/plugins/imagify/_dev/src/bulk.js new file mode 100644 index 00000000..e8a7f57b --- /dev/null +++ b/wp/wp-content/plugins/imagify/_dev/src/bulk.js @@ -0,0 +1,1143 @@ +window.imagify = window.imagify || {}; + +(function( $, undefined ) { // eslint-disable-line no-shadow, no-shadow-restricted-names + + var jqPropHookChecked = $.propHooks.checked; + + // Force `.prop()` to trigger a `change` event. + $.propHooks.checked = { + set: function( elem, value, name ) { + var ret; + + if ( undefined === jqPropHookChecked ) { + ret = ( elem[ name ] = value ); + } else { + ret = jqPropHookChecked( elem, value, name ); + } + + $( elem ).trigger( 'change.imagify' ); + + return ret; + } + }; + + // Custom jQuery functions ===================================================================== + /** + * Hide element(s). + * + * @param {int} duration A duration in ms. + * @param {function} callback A callback to execute once the element is hidden. + * @return {element} The jQuery element(s). + */ + $.fn.imagifyHide = function( duration, callback ) { + if ( duration && duration > 0 ) { + this.hide( duration, function() { + $( this ).addClass( 'hidden' ).css( 'display', '' ); + + if ( undefined !== callback ) { + callback(); + } + } ); + } else { + this.addClass( 'hidden' ); + + if ( undefined !== callback ) { + callback(); + } + } + + return this.attr( 'aria-hidden', 'true' ); + }; + + /** + * Show element(s). + * + * @param {int} duration A duration in ms. + * @param {function} callback A callback to execute before starting to display the element. + * @return {element} The jQuery element(s). + */ + $.fn.imagifyShow = function( duration, callback ) { + if ( undefined !== callback ) { + callback(); + } + + if ( duration && duration > 0 ) { + this.show( duration, function() { + $( this ).removeClass( 'hidden' ).css( 'display', '' ); + } ); + } else { + this.removeClass( 'hidden' ); + } + + return this.attr( 'aria-hidden', 'false' ); + }; + +}( jQuery )); + +(function($, d, w, undefined) { // eslint-disable-line no-unused-vars, no-shadow, no-shadow-restricted-names + + w.imagify.bulk = { + + // Properties ============================================================================== + charts: { + overview: { + canvas: false, + donut: false, + data: { + // Order: unoptimized, optimized, error. + labels: [ + imagifyBulk.labels.overviewChartLabels.unoptimized, + imagifyBulk.labels.overviewChartLabels.optimized, + imagifyBulk.labels.overviewChartLabels.error + ], + datasets: [ { + data: [], + backgroundColor: [ '#10121A', '#46B1CE', '#C51162' ], + borderWidth: 0 + } ] + } + }, + files: { + donuts: {} + }, + share: { + canvas: false, + donut: false + } + }, + /** + * Folder types in queue. + * An array of objects: { + * @type {string} groupID The group ID, like 'library'. + * @type {string} context The context, like 'wp'. + * @type {int} level The optimization level: 0, 1, or 2. + * } + */ + folderTypesQueue: [], + /** + * Status of each folder type. Type IDs are used as keys. + * Each object contains: { + * @type {bool} isError Tell if the status is considered as an error. + * @type {string} id ID of the status, like 'waiting', 'fetching', or 'optimizing'. + * } + */ + status: {}, + // Tell if the message displayed when retrieving the image IDs has been shown once. + displayedWaitMessage: false, + // Tell how many rows are available. + hasMultipleRows: true, + // Set to true to stop the whole thing. + processIsStopped: false, + // Global stats. + globalOptimizedCount: 0, + globalGain: 0, + globalOriginalSize: 0, + globalOptimizedSize: 0, + /** + * Folder types used in the page. + * + * @var {object} { + * An object of objects. The keys are like: {groupID|context}. + * + * @type {string} groupID The group ID. + * @type {string} context The context. + * } + */ + folderTypesData: {}, + + // Methods ================================================================================= + + /* + * Init. + */ + init: function () { + var $document = $( d ); + + // Overview chart. + this.drawOverviewChart(); + + this.hasMultipleRows = $( '.imagify-bulk-table [name="group[]"]' ).length > 1; + + // Selectors (like the level selectors). + $( '.imagify-selector-button' ) + .on( 'click.imagify', this.openSelectorFromButton ); + + $( '.imagify-selector-list input' ) + .on( 'change.imagify init.imagify', this.syncSelectorFromRadio ) + .filter( ':checked' ) + .trigger( 'init.imagify' ); + + $document + .on( 'keypress.imagify click.imagify', this.closeSelectors ); + + // Other buttons/UI. + $( '.imagify-bulk-table [name="group[]"]' ) + .on( 'change.imagify init.imagify', this.toggleOptimizationButton ) + .trigger( 'init.imagify' ); + + $( '#imagify-bulk-action' ) + .on( 'click.imagify', this.maybeLaunchAllProcesses ); + + // Optimization events. + $( w ) + .on( 'processQueue.imagify', this.processQueue ) + .on( 'queueEmpty.imagify', this.queueEmpty ); + + if ( imagifyBulk.ajaxActions.getStats && $( '.imagify-bulk-table [data-group-id="library"][data-context="wp"]' ).length ) { + // On large WP library, don't request stats periodically, only when everything is done. + imagifyBulk.imagifybeatIDs.stats = false; + } + + if ( imagifyBulk.imagifybeatIDs.stats ) { + // Imagifybeat for stats. + $document + .on( 'imagifybeat-send', this.addStatsImagifybeat ) + .on( 'imagifybeat-tick', this.processStatsImagifybeat ); + } + + // Imagifybeat for optimization queue. + $document + .on( 'imagifybeat-send', this.addQueueImagifybeat ) + .on( 'imagifybeat-tick', this.processQueueImagifybeat ); + + // Imagifybeat for requirements. + $document + .on( 'imagifybeat-send', this.addRequirementsImagifybeat ) + .on( 'imagifybeat-tick', this.processRequirementsImagifybeat ); + + if ( imagifyBulk.optimizing ) { + // Fasten Imagifybeat: 1 tick every 15 seconds, and disable suspend. + w.imagify.beat.interval( 15 ); + w.imagify.beat.disableSuspend(); + } + }, + + /* + * Get the URL used for ajax requests. + * + * @param {string} action An ajax action, or part of it. + * @param {object} item The current item. + * @return {string} + */ + getAjaxUrl: function ( action, item ) { + var url = ajaxurl + w.imagify.concat + '_wpnonce=' + imagifyBulk.ajaxNonce + '&action=' + imagifyBulk.ajaxActions[ action ]; + + if ( item && item.context ) { + url += '&context=' + item.context; + } + + if ( item && Number.isInteger( item.level ) ) { + url += '&optimization_level=' + item.level; + } + + return url; + }, + + /** + * Get folder types used in the page. + * + * @see this.folderTypesData + * @return {object} + */ + getFolderTypes: function () { + if ( ! $.isEmptyObject( w.imagify.bulk.folderTypesData ) ) { + return w.imagify.bulk.folderTypesData; + } + + $( '.imagify-row-folder-type' ).each( function() { + var $this = $( this ), + data = { + groupID: $this.data( 'group-id' ), + context: $this.data( 'context' ), + level: $this.find( '.imagify-cell-level [name="level[' + $this.data( 'group-id' ) + ']"]:checked' ).val() + }, + key = data.groupID + '|' + data.context; + + w.imagify.bulk.folderTypesData[ key ] = data; + } ); + + return w.imagify.bulk.folderTypesData; + }, + + /* + * Get the message displayed to the user when (s)he leaves the page. + * + * @return {string} + */ + getConfirmMessage: function () { + return imagifyBulk.labels.processing; + }, + + /* + * Close the given optimization level selector. + * + * @param {object} $lists A jQuery object. + * @param {int} timer Timer in ms to close the selector. + */ + closeLevelSelector: function ( $lists, timer ) { + if ( ! $lists || ! $lists.length ) { + return; + } + + if ( undefined !== timer && timer > 0 ) { + w.setTimeout( function() { + w.imagify.bulk.closeLevelSelector( $lists ); + }, timer ); + return; + } + + $lists.attr( 'aria-hidden', 'true' ); + }, + + /* + * Stop everything and update the current item status as an error. + * + * @param {string} errorId An error ID. + * @param {object} item The current item. + */ + stopProcess: function ( errorId, item ) { + w.imagify.bulk.processIsStopped = true; + + w.imagify.bulk.status[ item.groupID ] = { + isError: true, + id: errorId + }; + + $( w ).trigger( 'queueEmpty.imagify' ); + }, + + /* + * Tell if we have a blocking error. Can also display an error message in a swal. + * + * @param {bool} displayErrorMessage False to not display any error message. + * @return {bool} + */ + hasBlockingError: function ( displayErrorMessage ) { + displayErrorMessage = undefined !== displayErrorMessage && displayErrorMessage; + + if ( imagifyBulk.curlMissing ) { + if ( displayErrorMessage ) { + w.imagify.bulk.displayError( { + html: imagifyBulk.labels.curlMissing + } ); + } + + w.imagify.bulk.processIsStopped = true; + + return true; + } + + if ( imagifyBulk.editorMissing ) { + if ( displayErrorMessage ) { + w.imagify.bulk.displayError( { + html: imagifyBulk.labels.editorMissing + } ); + } + + w.imagify.bulk.processIsStopped = true; + + return true; + } + + if ( imagifyBulk.extHttpBlocked ) { + if ( displayErrorMessage ) { + w.imagify.bulk.displayError( { + html: imagifyBulk.labels.extHttpBlocked + } ); + } + + w.imagify.bulk.processIsStopped = true; + + return true; + } + + if ( imagifyBulk.apiDown ) { + if ( displayErrorMessage ) { + w.imagify.bulk.displayError( { + html: imagifyBulk.labels.apiDown + } ); + } + + w.imagify.bulk.processIsStopped = true; + + return true; + } + + if ( ! imagifyBulk.keyIsValid ) { + if ( displayErrorMessage ) { + w.imagify.bulk.displayError( { + title: imagifyBulk.labels.invalidAPIKeyTitle, + type: 'info' + } ); + } + + w.imagify.bulk.processIsStopped = true; + + return true; + } + + if ( imagifyBulk.isOverQuota ) { + if ( displayErrorMessage ) { + w.imagify.bulk.displayError( { + title: imagifyBulk.labels.overQuotaTitle, + html: $( '#tmpl-imagify-overquota-alert' ).html(), + type: 'info', + customClass: 'imagify-swal-has-subtitle imagify-swal-error-header', + showConfirmButton: false + } ); + } + + w.imagify.bulk.processIsStopped = true; + + return true; + } + + return false; + }, + + /* + * Display an error message in a modal. + * + * @param {string} title The modal title. + * @param {string} text The modal text. + * @param {object} args Other less common args. + */ + displayError: function ( title, text, args ) { + var def = { + title: '', + html: '', + type: 'error', + customClass: '', + width: 620, + padding: 0, + showCloseButton: true, + showConfirmButton: true + }; + + if ( $.isPlainObject( title ) ) { + args = $.extend( {}, def, title ); + } else { + args = args || {}; + args = $.extend( {}, def, { + title: title || '', + html: text || '' + }, args ); + } + + args.title = args.title || imagifyBulk.labels.error; + args.customClass += ' imagify-sweet-alert'; + + swal( args ).catch( swal.noop ); + }, + + /* + * Display the share box. + */ + displayShareBox: function () { + var $complete, globalSaved; + + if ( ! this.globalGain || this.folderTypesQueue.length ) { + this.globalOptimizedCount = 0; + this.globalGain = 0; + this.globalOriginalSize = 0; + this.globalOptimizedSize = 0; + return; + } + + globalSaved = this.globalOriginalSize - this.globalOptimizedSize; + + $complete = $( '.imagify-row-complete' ); + $complete.find( '.imagify-ac-rt-total-images' ).html( this.globalOptimizedCount ); + $complete.find( '.imagify-ac-rt-total-gain' ).html( w.imagify.humanSize( globalSaved, 1 ) ); + $complete.find( '.imagify-ac-rt-total-original' ).html( w.imagify.humanSize( this.globalOriginalSize, 1 ) ); + $complete.find( '.imagify-ac-chart' ).attr( 'data-percent', Math.round( this.globalGain ) ); + + // Chart. + this.drawShareChart(); + + $complete.addClass( 'done' ).imagifyShow(); + + $( 'html, body' ).animate( { + scrollTop: $complete.offset().top + }, 200 ); + + // Reset the stats. + this.globalOptimizedCount = 0; + this.globalGain = 0; + this.globalOriginalSize = 0; + this.globalOptimizedSize = 0; + }, + + /** + * Print optimization stats. + * + * @param {object} data Object containing all Imagifybeat IDs. + */ + updateStats: function ( data ) { + var donutData; + + if ( ! data || ! $.isPlainObject( data ) ) { + return; + } + + if ( w.imagify.bulk.charts.overview.donut.data ) { + donutData = w.imagify.bulk.charts.overview.donut.data.datasets[0].data; + + if ( data.unoptimized_attachments === donutData[0] && data.optimized_attachments === donutData[1] && data.errors_attachments === donutData[2] ) { + return; + } + } + + /** + * User account. + */ + data.unconsumed_quota = data.unconsumed_quota.toFixed( 1 ); // A mystery where a float rounded on php side is not rounded here anymore. JavaScript is fun, it always surprises you in a manner you didn't expect. + $( '.imagify-meteo-icon' ).html( data.quota_icon ); + $( '.imagify-unconsumed-percent' ).html( data.unconsumed_quota + '%' ); + $( '.imagify-unconsumed-bar' ).css( 'width', data.unconsumed_quota + '%' ).parent().attr( 'class', data.quota_class ); + + /** + * Global chart. + */ + $( '#imagify-overview-chart-percent' ).html( data.optimized_attachments_percent + '%' ); + $( '.imagify-total-percent' ).html( data.optimized_attachments_percent + '%' ); + + w.imagify.bulk.drawOverviewChart( [ + data.unoptimized_attachments, + data.optimized_attachments, + data.errors_attachments + ] ); + + /** + * Stats block. + */ + // The total optimized images. + $( '#imagify-total-optimized-attachments' ).html( data.already_optimized_attachments ); + + // The original bar. + $( '#imagify-original-bar' ).find( '.imagify-barnb' ).html( data.original_human ); + + // The optimized bar. + $( '#imagify-optimized-bar' ).css( 'width', ( 100 - data.optimized_percent ) + '%' ).find( '.imagify-barnb' ).html( data.optimized_human ); + + // The Percent data. + $( '#imagify-total-optimized-attachments-pct' ).html( data.optimized_percent + '%' ); + }, + + // Event callbacks ========================================================================= + + /* + * Selector (like optimization level selector): on button click, open the dropdown and focus the current radio input. + * The dropdown must be open or the focus event won't be triggered. + * + * @param {object} e jQuery's Event object. + */ + openSelectorFromButton: function ( e ) { + var $list = $( '#' + $( this ).attr( 'aria-controls' ) ); + // Stop click event from bubbling: this will allow to close the selector list if anything else id clicked. + e.stopPropagation(); + // Close other lists. + $( '.imagify-selector-list' ).not( $list ).attr( 'aria-hidden', 'true' ); + // Open the corresponding list and focus the radio. + $list.attr( 'aria-hidden', 'false' ).find( ':checked' ).trigger( 'focus.imagify' ); + }, + + /* + * Selector: on radio change, make the row "current" and update the button text. + */ + syncSelectorFromRadio: function () { + var $row = $( this ).closest( '.imagify-selector-choice' ); + // Update rows attributes. + $row.addClass( 'imagify-selector-current-value' ).attr( 'aria-current', 'true' ).siblings( '.imagify-selector-choice' ).removeClass( 'imagify-selector-current-value' ).attr( 'aria-current', 'false' ); + // Change the button text. + $row.closest( '.imagify-selector-list' ).siblings( '.imagify-selector-button' ).find( '.imagify-selector-current-value-info' ).html( $row.find( 'label' ).html() ); + }, + + /* + * Selector: on Escape or Enter kaystroke, close the dropdown. + * + * @param {object} e jQuery's Event object. + */ + closeSelectors: function ( e ) { + if ( 'keypress' === e.type && 27 !== e.keyCode && 13 !== e.keyCode ) { + return; + } + w.imagify.bulk.closeLevelSelector( $( '.imagify-selector-list[aria-hidden="false"]' ) ); + }, + + /* + * Enable or disable the Optimization button depending on the checked checkboxes. + * Also, if there is only 1 checkbox in the page, don't allow it to be unchecked. + */ + toggleOptimizationButton: function () { + // Prevent uncheck if there is only one checkbox. + if ( ! w.imagify.bulk.hasMultipleRows && ! this.checked ) { + $( this ).prop( 'checked', true ); + return; + } + + if ( imagifyBulk.optimizing ) { + $( '#imagify-bulk-action' ).prop( 'disabled', true ); + + return; + } + + // Enable or disable the Optimization button. + if ( $( '.imagify-bulk-table [name="group[]"]:checked' ).length ) { + $( '#imagify-bulk-action' ).prop( 'disabled', false ); + } else { + $( '#imagify-bulk-action' ).prop( 'disabled', true ); + } + }, + + /* + * Maybe display a modal, then launch all processes. + */ + maybeLaunchAllProcesses: function () { + var $infosModal; + + if ( $( this ).prop('disabled') ) { + return; + } + + if ( ! $( '.imagify-bulk-table [name="group[]"]:checked' ).length ) { + return; + } + + if ( w.imagify.bulk.hasBlockingError( true ) ) { + return; + } + + $infosModal = $( '#tmpl-imagify-bulk-infos' ); + + if ( ! $infosModal.length ) { + w.imagify.bulk.launchAllProcesses(); + return; + } + + // Swal Information before loading the optimize process. + swal( { + title: imagifyBulk.labels.bulkInfoTitle, + html: $infosModal.html(), + type: '', + customClass: 'imagify-sweet-alert imagify-swal-has-subtitle imagify-before-bulk-infos', + showCancelButton: true, + padding: 0, + width: 554, + confirmButtonText: imagifyBulk.labels.confirmBulk, + cancelButtonText: imagifySwal.labels.cancelButtonText, + reverseButtons: true + } ).then( function() { + var $row = $( '.imagify-bulk-table [name="group[]"]:checked' ).first().closest( '.imagify-row-folder-type' ); + + $.get( w.imagify.bulk.getAjaxUrl( 'bulkInfoSeen', { + context: $row.data( 'context' ) + } ) ); + + $infosModal.remove(); + + w.imagify.bulk.launchAllProcesses(); + } ).catch( swal.noop ); + }, + + /* + * Build the queue and launch all processes. + */ + launchAllProcesses: function () { + var $w = $( w ), + $button = $( '#imagify-bulk-action' ); + + // Disable the button. + $button.prop( 'disabled', true ).find( '.dashicons' ).addClass( 'rotate' ); + + // Hide the "Complete" message. + $( '.imagify-row-complete' ).imagifyHide( 200, function() { + $( this ).removeClass( 'done' ); + } ); + + // Make sure to reset properties. + this.folderTypesQueue = []; + this.status = {}; + this.displayedWaitMessage = false; + this.processIsStopped = false; + this.globalOptimizedCount = 0; + this.globalGain = 0; + this.globalOriginalSize = 0; + this.globalOptimizedSize = 0; + + $( '.imagify-bulk-table [name="group[]"]:checked' ).each( function() { + var $checkbox = $( this ), + $row = $checkbox.closest( '.imagify-row-folder-type' ), + groupID = $row.data( 'group-id' ), + context = $row.data( 'context' ), + level = $row.find( '.imagify-cell-level [name="level[' + groupID + ']"]:checked' ).val(); + + // Build the queue. + w.imagify.bulk.folderTypesQueue.push( { + groupID: groupID, + context: context, + level: undefined === level ? -1 : parseInt( level, 10 ) + } ); + + // Set the status. + w.imagify.bulk.status[ groupID ] = { + isError: false, + id: 'waiting' + }; + } ); + + // Fasten Imagifybeat: 1 tick every 15 seconds, and disable suspend. + w.imagify.beat.interval( 15 ); + w.imagify.beat.disableSuspend(); + + // Process the queue. + $w.trigger( 'processQueue.imagify' ); + }, + + /* + * Process the first item in the queue. + */ + processQueue: function () { + var $row, $table, $progressBar, $progress; + + if ( w.imagify.bulk.processIsStopped ) { + return; + } + + if ( ! w.imagify.bulk.displayedWaitMessage ) { + // Display an alert to wait. + swal( { + title: imagifyBulk.labels.waitTitle, + html: imagifyBulk.labels.waitText, + showConfirmButton: false, + padding: 0, + imageUrl: imagifyBulk.waitImageUrl, + customClass: 'imagify-sweet-alert' + } ).catch( swal.noop ); + w.imagify.bulk.displayedWaitMessage = true; + } + + w.imagify.bulk.folderTypesQueue.forEach( function( item ) { + // Start async process for current context + $.get( w.imagify.bulk.getAjaxUrl( 'bulkProcess', item ) ) + .done( function( response ) { + var errorMessage; + + swal.close(); + + if ( response.data && response.data.message ) { + errorMessage = response.data.message; + } else { + errorMessage = imagifyBulk.ajaxErrorText; + } + + if ( ! response.success ) { + // Error. + w.imagify.bulk.stopProcess( errorMessage, item ); + return; + } + + if ( ! response.data || ! ( $.isPlainObject( response.data ) || $.isArray( response.data ) ) ) { + // Error: should be an array if empty, or an object otherwize. + w.imagify.bulk.stopProcess( errorMessage, item ); + return; + } + + // Success. + if ( response.success ) { + $row = $( '#cb-select-' + item.groupID ).closest( '.imagify-row-folder-type' ); + $table = $row.closest( '.imagify-bulk-table' ); + $progressBar = $table.find( '.imagify-row-progress' ); + $progress = $progressBar.find( '.bar' ); + + $row.find( '.imagify-cell-checkbox-loader' ).removeClass( 'hidden' ).attr( 'aria-hidden', 'false' ); + $row.find( '.imagify-cell-checkbox-box' ).addClass( 'hidden' ).attr( 'aria-hidden', 'true' ); + + // Reset and display the progress bar. + $progress.css( 'width', '0%' ).find( '.percent' ).text( '0%' ); + $progressBar.slideDown().attr( 'aria-hidden', 'false' ); + } + } ) + .fail( function() { + // Error. + w.imagify.bulk.stopProcess( 'get-unoptimized-images', item ); + } ); + } ); + }, + + /* + * End. + */ + queueEmpty: function () { + var $tables = $( '.imagify-bulk-table' ), + errorArgs = {}, + hasError = false, + noImages = true, + errorMsg = ''; + + // Reset Imagifybeat interval and enable suspend. + w.imagify.beat.resetInterval(); + w.imagify.beat.enableSuspend(); + + // Reset the queue. + w.imagify.bulk.folderTypesQueue = []; + + // Display the share box. + w.imagify.bulk.displayShareBox(); + + // Fetch and display generic stats if stats via Imagifybeat are disabled. + if ( ! imagifyBulk.imagifybeatIDs.stats ) { + $.get( w.imagify.bulk.getAjaxUrl( 'getStats' ), { + types: w.imagify.bulk.getFolderTypes() + } ) + .done( function( response ) { + if ( response.success ) { + w.imagify.bulk.updateStats( response.data ); + } + } ); + } + + // Maybe display error. + if ( ! $.isEmptyObject( w.imagify.bulk.status ) ) { + $.each( w.imagify.bulk.status, function( groupID, typeStatus ) { + if ( ! typeStatus.isError ) { + noImages = false; + } else if ( 'no-images' !== typeStatus.id && typeStatus.isError ) { + hasError = typeStatus.id; + noImages = false; + return false; + } + } ); + + if ( hasError ) { + if ( 'invalid-api-key' === hasError ) { + errorArgs = { + title: imagifyBulk.labels.invalidAPIKeyTitle, + type: 'info' + }; + } + else if ( 'over-quota' === hasError ) { + errorArgs = { + title: imagifyBulk.labels.overQuotaTitle, + html: $( '#tmpl-imagify-overquota-alert' ).html(), + type: 'info', + customClass: 'imagify-swal-has-subtitle imagify-swal-error-header', + showConfirmButton: false + }; + } + else if ( 'get-unoptimized-images' === hasError || 'consumed-all-data' === hasError ) { + errorArgs = { + title: imagifyBulk.labels.getUnoptimizedImagesErrorTitle, + html: imagifyBulk.labels.getUnoptimizedImagesErrorText, + type: 'info' + }; + } + w.imagify.bulk.displayError( errorArgs ); + } + else if ( noImages ) { + if ( Object.prototype.hasOwnProperty.call( imagifyBulk.labels.nothingToDoText, w.imagify.bulk.imagifyAction ) ) { + errorMsg = imagifyBulk.labels.nothingToDoText[ w.imagify.bulk.imagifyAction ]; + } else { + errorMsg = imagifyBulk.labels.nothingToDoText.optimize; + } + w.imagify.bulk.displayError( { + title: imagifyBulk.labels.nothingToDoTitle, + html: errorMsg, + type: 'info' + } ); + } + } + + // Reset status. + w.imagify.bulk.status = {}; + + // Reset the progress bars. + $tables.find( '.imagify-row-progress' ).slideUp().attr( 'aria-hidden', 'true' ).find( '.bar' ).removeAttr( 'style' ).find( '.percent' ).text( '0%' ); + + $tables.find( '.imagify-cell-checkbox-loader' ).each( function() { + $(this).addClass( 'hidden' ).attr( 'aria-hidden', 'true' ); + } ); + + $tables.find( '.imagify-cell-checkbox-box' ).each( function() { + $(this).removeClass( 'hidden' ).attr( 'aria-hidden', 'false' ); + } ); + + // Enable (or not) the main button. + if ( $( '.imagify-bulk-table [name="group[]"]:checked' ).length ) { + $( '#imagify-bulk-action' ).prop( 'disabled', false ).find( '.dashicons' ).removeClass( 'rotate' ); + } else { + $( '#imagify-bulk-action' ).find( '.dashicons' ).removeClass( 'rotate' ); + } + }, + + // Imagifybeat ============================================================================= + + /** + * Add a Imagifybeat ID for global stats on "imagifybeat-send" event. + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + addStatsImagifybeat: function ( e, data ) { + data[ imagifyBulk.imagifybeatIDs.stats ] = Object.keys( w.imagify.bulk.getFolderTypes() ); + }, + + /** + * Listen for the custom event "imagifybeat-tick" on $(document). + * It allows to update various data periodically. + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + processStatsImagifybeat: function ( e, data ) { + if ( typeof data[ imagifyBulk.imagifybeatIDs.stats ] !== 'undefined' ) { + w.imagify.bulk.updateStats( data[ imagifyBulk.imagifybeatIDs.stats ] ); + } + }, + + /** + * Add a Imagifybeat ID on "imagifybeat-send" event to sync the optimization queue. + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + addQueueImagifybeat: function ( e, data ) { + data[ imagifyBulk.imagifybeatIDs.queue ] = Object.values( w.imagify.bulk.getFolderTypes() ); + }, + + /** + * Listen for the custom event "imagifybeat-tick" on $(document). + * It allows to update various data periodically. + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + processQueueImagifybeat: function ( e, data ) { + var queue, $row, $progress, $bar; + + if ( typeof data[ imagifyBulk.imagifybeatIDs.queue ] !== 'undefined' ) { + queue = data[ imagifyBulk.imagifybeatIDs.queue ]; + + if ( false !== queue.result ) { + w.imagify.bulk.globalOriginalSize = queue.result.original_size; + w.imagify.bulk.globalOptimizedSize = queue.result.optimized_size; + w.imagify.bulk.globalOptimizedCount = queue.result.total; + w.imagify.bulk.globalGain = w.imagify.bulk.globalOptimizedSize * 100 / w.imagify.bulk.globalOriginalSize; + } + + if ( ! w.imagify.bulk.processIsStopped && w.imagify.bulk.hasBlockingError( true ) ) { + $( w ).trigger( 'queueEmpty.imagify' ); + return; + } + + if ( Object.prototype.hasOwnProperty.call( queue, 'groups_data' ) ) { + Object.entries( queue.groups_data ).forEach( function( item ) { + $row = $( '[data-context=' + item[0] + ']' ); + + $row.children( '.imagify-cell-count-optimized' ).first().html( item[1]['count-optimized'] ); + $row.children( '.imagify-cell-count-errors' ).first().html( item[1]['count-errors'] ); + $row.children( '.imagify-cell-optimized-size-size' ).first().html( item[1]['optimized-size'] ); + $row.children( '.imagify-cell-original-size-size' ).first().html( item[1]['original-size'] ); + } ); + } + + if ( 0 === queue.remaining ) { + $( w ).trigger( 'queueEmpty.imagify' ); + return; + } + + $progress = $( '.imagify-row-progress' ); + $bar = $progress.find( '.bar' ); + + $bar.css( 'width', queue.percentage + '%' ).find( '.percent' ).html( queue.percentage + '%' ); + $progress.slideDown().attr( 'aria-hidden', 'false' ); + } + }, + + /** + * Add a Imagifybeat ID for requirements on "imagifybeat-send" event. + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + addRequirementsImagifybeat: function ( e, data ) { + data[ imagifyBulk.imagifybeatIDs.requirements ] = 1; + }, + + /** + * Listen for the custom event "imagifybeat-tick" on $(document). + * It allows to update requirements status periodically. + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + processRequirementsImagifybeat: function ( e, data ) { + if ( typeof data[ imagifyBulk.imagifybeatIDs.requirements ] === 'undefined' ) { + return; + } + + data = data[ imagifyBulk.imagifybeatIDs.requirements ]; + + imagifyBulk.curlMissing = data.curl_missing; + imagifyBulk.editorMissing = data.editor_missing; + imagifyBulk.extHttpBlocked = data.external_http_blocked; + imagifyBulk.apiDown = data.api_down; + imagifyBulk.keyIsValid = data.key_is_valid; + imagifyBulk.isOverQuota = data.is_over_quota; + }, + + // Charts ================================================================================== + + /** + * Overview chart. + * Used for the big overview chart. + */ + drawOverviewChart: function ( data ) { + var initData, legend; + + if ( ! this.charts.overview.canvas ) { + this.charts.overview.canvas = d.getElementById( 'imagify-overview-chart' ); + + if ( ! this.charts.overview.canvas ) { + return; + } + } + + data = data && $.isArray( data ) ? data : []; + + if ( this.charts.overview.donut ) { + // Update existing donut. + if ( data.length ) { + if ( data.reduce( function( a, b ) { return a + b; }, 0 ) === 0 ) { + data[0] = 1; + } + + this.charts.overview.donut.data.datasets[0].data = data; + this.charts.overview.donut.update(); + } + return; + } + + // Create new donut. + this.charts.overview.data.datasets[0].data = [ + parseInt( this.charts.overview.canvas.getAttribute( 'data-unoptimized' ), 10 ), + parseInt( this.charts.overview.canvas.getAttribute( 'data-optimized' ), 10 ), + parseInt( this.charts.overview.canvas.getAttribute( 'data-errors' ), 10 ) + ]; + initData = $.extend( {}, this.charts.overview.data ); + + if ( data.length ) { + initData.datasets[0].data = data; + } + + if ( initData.datasets[0].data.reduce( function( a, b ) { return a + b; }, 0 ) === 0 ) { + initData.datasets[0].data[0] = 1; + } + + this.charts.overview.donut = new w.imagify.Chart( this.charts.overview.canvas, { + type: 'doughnut', + data: initData, + options: { + plugins: { + legend: { + display: false + } + }, + events: [], + animation: { + easing: 'easeOutBounce' + }, + tooltips: { + displayColors: false, + callbacks: { + label: function( tooltipItem, localData ) { + return localData.datasets[ tooltipItem.datasetIndex ].data[ tooltipItem.index ]; + } + } + }, + responsive: false, + cutout: 75 + } + } ); + + // Then generate the legend and insert it to your page somewhere. + legend = '
    '; + + $.each( initData.labels, function( i, label ) { + legend += '
  • ' + label + '
  • '; + } ); + + legend += '
'; + + d.getElementById( 'imagify-overview-chart-legend' ).innerHTML = legend; + }, + + /* + * Share Chart. + * Used for the chart in the share box. + */ + drawShareChart: function () { + var value; + + if ( ! this.charts.share.canvas ) { + this.charts.share.canvas = d.getElementById( 'imagify-ac-chart' ); + + if ( ! this.charts.share.canvas ) { + return; + } + } + + value = parseInt( $( this.charts.share.canvas ).closest( '.imagify-ac-chart' ).attr( 'data-percent' ), 10 ); + + if ( this.charts.share.donut ) { + // Update existing donut. + this.charts.share.donut.data.datasets[0].data[0] = value; + this.charts.share.donut.data.datasets[0].data[1] = 100 - value; + this.charts.share.donut.update(); + return; + } + + // Create new donut. + this.charts.share.donut = new w.imagify.Chart( this.charts.share.canvas, { + type: 'doughnut', + data: { + datasets: [{ + data: [ value, 100 - value ], + backgroundColor: [ '#40B1D0', '#FFFFFF' ], + borderWidth: 0 + }] + }, + options: { + plugins: { + legend: { + display: false + } + }, + events: [], + animation: { + easing: 'easeOutBounce' + }, + tooltips: { + enabled: false + }, + responsive: false, + cutoutPercentage: 70 + } + } ); + } + }; + + w.imagify.bulk.init(); + + if (imagifyBulk.isOverQuota) { + w.imagify.bulk.displayError( { + title: imagifyBulk.labels.overQuotaTitle, + html: $( '#tmpl-imagify-overquota-alert' ).html(), + type: 'info', + customClass: 'imagify-swal-has-subtitle imagify-swal-error-header', + showConfirmButton: false + } ); + } + + +} )(jQuery, document, window); diff --git a/wp/wp-content/plugins/imagify/_dev/src/chart.js b/wp/wp-content/plugins/imagify/_dev/src/chart.js new file mode 100644 index 00000000..c27b1bd0 --- /dev/null +++ b/wp/wp-content/plugins/imagify/_dev/src/chart.js @@ -0,0 +1,6 @@ +import * as chart from 'chart.js/auto' + +window.imagify = window.imagify || {}; + +window.imagify.Color = chart.Colors; +window.imagify.Chart = chart.Chart; diff --git a/wp/wp-content/plugins/imagify/assets/admin/entrypoints.json b/wp/wp-content/plugins/imagify/assets/admin/entrypoints.json new file mode 100644 index 00000000..c959d9f2 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/admin/entrypoints.json @@ -0,0 +1,14 @@ +{ + "chart": { + "js": [ + "js/runtime.js", + "js/chart.js" + ] + }, + "bulk": { + "js": [ + "js/runtime.js", + "js/bulk.js" + ] + } +} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/admin/js/bulk.js b/wp/wp-content/plugins/imagify/assets/admin/js/bulk.js new file mode 100644 index 00000000..67f217ab --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/admin/js/bulk.js @@ -0,0 +1 @@ +(self.webpackChunk_roots_bud=self.webpackChunk_roots_bud||[]).push([[350],{"./bulk.js":()=>{window.imagify=window.imagify||{},function(i,a){var e=i.propHooks.checked;i.propHooks.checked={set:function(t,s,l){var o;return o=a===e?t[l]=s:e(t,s,l),i(t).trigger("change.imagify"),o}},i.fn.imagifyHide=function(e,t){return e&&e>0?this.hide(e,(function(){i(this).addClass("hidden").css("display",""),a!==t&&t()})):(this.addClass("hidden"),a!==t&&t()),this.attr("aria-hidden","true")},i.fn.imagifyShow=function(e,t){return a!==t&&t(),e&&e>0?this.show(e,(function(){i(this).removeClass("hidden").css("display","")})):this.removeClass("hidden"),this.attr("aria-hidden","false")}}(jQuery),function(i,a,e,t){e.imagify.bulk={charts:{overview:{canvas:!1,donut:!1,data:{labels:[imagifyBulk.labels.overviewChartLabels.unoptimized,imagifyBulk.labels.overviewChartLabels.optimized,imagifyBulk.labels.overviewChartLabels.error],datasets:[{data:[],backgroundColor:["#10121A","#46B1CE","#C51162"],borderWidth:0}]}},files:{donuts:{}},share:{canvas:!1,donut:!1}},folderTypesQueue:[],status:{},displayedWaitMessage:!1,hasMultipleRows:!0,processIsStopped:!1,globalOptimizedCount:0,globalGain:0,globalOriginalSize:0,globalOptimizedSize:0,folderTypesData:{},init:function(){var t=i(a);this.drawOverviewChart(),this.hasMultipleRows=i('.imagify-bulk-table [name="group[]"]').length>1,i(".imagify-selector-button").on("click.imagify",this.openSelectorFromButton),i(".imagify-selector-list input").on("change.imagify init.imagify",this.syncSelectorFromRadio).filter(":checked").trigger("init.imagify"),t.on("keypress.imagify click.imagify",this.closeSelectors),i('.imagify-bulk-table [name="group[]"]').on("change.imagify init.imagify",this.toggleOptimizationButton).trigger("init.imagify"),i("#imagify-bulk-action").on("click.imagify",this.maybeLaunchAllProcesses),i(e).on("processQueue.imagify",this.processQueue).on("queueEmpty.imagify",this.queueEmpty),imagifyBulk.ajaxActions.getStats&&i('.imagify-bulk-table [data-group-id="library"][data-context="wp"]').length&&(imagifyBulk.imagifybeatIDs.stats=!1),imagifyBulk.imagifybeatIDs.stats&&t.on("imagifybeat-send",this.addStatsImagifybeat).on("imagifybeat-tick",this.processStatsImagifybeat),t.on("imagifybeat-send",this.addQueueImagifybeat).on("imagifybeat-tick",this.processQueueImagifybeat),t.on("imagifybeat-send",this.addRequirementsImagifybeat).on("imagifybeat-tick",this.processRequirementsImagifybeat),imagifyBulk.optimizing&&(e.imagify.beat.interval(15),e.imagify.beat.disableSuspend())},getAjaxUrl:function(i,a){var t=ajaxurl+e.imagify.concat+"_wpnonce="+imagifyBulk.ajaxNonce+"&action="+imagifyBulk.ajaxActions[i];return a&&a.context&&(t+="&context="+a.context),a&&Number.isInteger(a.level)&&(t+="&optimization_level="+a.level),t},getFolderTypes:function(){return i.isEmptyObject(e.imagify.bulk.folderTypesData)?(i(".imagify-row-folder-type").each((function(){var a=i(this),t={groupID:a.data("group-id"),context:a.data("context"),level:a.find('.imagify-cell-level [name="level['+a.data("group-id")+']"]:checked').val()},s=t.groupID+"|"+t.context;e.imagify.bulk.folderTypesData[s]=t})),e.imagify.bulk.folderTypesData):e.imagify.bulk.folderTypesData},getConfirmMessage:function(){return imagifyBulk.labels.processing},closeLevelSelector:function(i,a){i&&i.length&&(t!==a&&a>0?e.setTimeout((function(){e.imagify.bulk.closeLevelSelector(i)}),a):i.attr("aria-hidden","true"))},stopProcess:function(a,t){e.imagify.bulk.processIsStopped=!0,e.imagify.bulk.status[t.groupID]={isError:!0,id:a},i(e).trigger("queueEmpty.imagify")},hasBlockingError:function(a){return a=t!==a&&a,imagifyBulk.curlMissing?(a&&e.imagify.bulk.displayError({html:imagifyBulk.labels.curlMissing}),e.imagify.bulk.processIsStopped=!0,!0):imagifyBulk.editorMissing?(a&&e.imagify.bulk.displayError({html:imagifyBulk.labels.editorMissing}),e.imagify.bulk.processIsStopped=!0,!0):imagifyBulk.extHttpBlocked?(a&&e.imagify.bulk.displayError({html:imagifyBulk.labels.extHttpBlocked}),e.imagify.bulk.processIsStopped=!0,!0):imagifyBulk.apiDown?(a&&e.imagify.bulk.displayError({html:imagifyBulk.labels.apiDown}),e.imagify.bulk.processIsStopped=!0,!0):imagifyBulk.keyIsValid?!!imagifyBulk.isOverQuota&&(a&&e.imagify.bulk.displayError({title:imagifyBulk.labels.overQuotaTitle,html:i("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}),e.imagify.bulk.processIsStopped=!0,!0):(a&&e.imagify.bulk.displayError({title:imagifyBulk.labels.invalidAPIKeyTitle,type:"info"}),e.imagify.bulk.processIsStopped=!0,!0)},displayError:function(a,e,t){var s={title:"",html:"",type:"error",customClass:"",width:620,padding:0,showCloseButton:!0,showConfirmButton:!0};i.isPlainObject(a)?t=i.extend({},s,a):(t=t||{},t=i.extend({},s,{title:a||"",html:e||""},t)),t.title=t.title||imagifyBulk.labels.error,t.customClass+=" imagify-sweet-alert",swal(t).catch(swal.noop)},displayShareBox:function(){var a,t;if(!this.globalGain||this.folderTypesQueue.length)return this.globalOptimizedCount=0,this.globalGain=0,this.globalOriginalSize=0,void(this.globalOptimizedSize=0);t=this.globalOriginalSize-this.globalOptimizedSize,(a=i(".imagify-row-complete")).find(".imagify-ac-rt-total-images").html(this.globalOptimizedCount),a.find(".imagify-ac-rt-total-gain").html(e.imagify.humanSize(t,1)),a.find(".imagify-ac-rt-total-original").html(e.imagify.humanSize(this.globalOriginalSize,1)),a.find(".imagify-ac-chart").attr("data-percent",Math.round(this.globalGain)),this.drawShareChart(),a.addClass("done").imagifyShow(),i("html, body").animate({scrollTop:a.offset().top},200),this.globalOptimizedCount=0,this.globalGain=0,this.globalOriginalSize=0,this.globalOptimizedSize=0},updateStats:function(a){var t;a&&i.isPlainObject(a)&&(e.imagify.bulk.charts.overview.donut.data&&(t=e.imagify.bulk.charts.overview.donut.data.datasets[0].data,a.unoptimized_attachments===t[0]&&a.optimized_attachments===t[1]&&a.errors_attachments===t[2])||(a.unconsumed_quota=a.unconsumed_quota.toFixed(1),i(".imagify-meteo-icon").html(a.quota_icon),i(".imagify-unconsumed-percent").html(a.unconsumed_quota+"%"),i(".imagify-unconsumed-bar").css("width",a.unconsumed_quota+"%").parent().attr("class",a.quota_class),i("#imagify-overview-chart-percent").html(a.optimized_attachments_percent+"%"),i(".imagify-total-percent").html(a.optimized_attachments_percent+"%"),e.imagify.bulk.drawOverviewChart([a.unoptimized_attachments,a.optimized_attachments,a.errors_attachments]),i("#imagify-total-optimized-attachments").html(a.already_optimized_attachments),i("#imagify-original-bar").find(".imagify-barnb").html(a.original_human),i("#imagify-optimized-bar").css("width",100-a.optimized_percent+"%").find(".imagify-barnb").html(a.optimized_human),i("#imagify-total-optimized-attachments-pct").html(a.optimized_percent+"%")))},openSelectorFromButton:function(a){var e=i("#"+i(this).attr("aria-controls"));a.stopPropagation(),i(".imagify-selector-list").not(e).attr("aria-hidden","true"),e.attr("aria-hidden","false").find(":checked").trigger("focus.imagify")},syncSelectorFromRadio:function(){var a=i(this).closest(".imagify-selector-choice");a.addClass("imagify-selector-current-value").attr("aria-current","true").siblings(".imagify-selector-choice").removeClass("imagify-selector-current-value").attr("aria-current","false"),a.closest(".imagify-selector-list").siblings(".imagify-selector-button").find(".imagify-selector-current-value-info").html(a.find("label").html())},closeSelectors:function(a){"keypress"===a.type&&27!==a.keyCode&&13!==a.keyCode||e.imagify.bulk.closeLevelSelector(i('.imagify-selector-list[aria-hidden="false"]'))},toggleOptimizationButton:function(){e.imagify.bulk.hasMultipleRows||this.checked?imagifyBulk.optimizing?i("#imagify-bulk-action").prop("disabled",!0):i('.imagify-bulk-table [name="group[]"]:checked').length?i("#imagify-bulk-action").prop("disabled",!1):i("#imagify-bulk-action").prop("disabled",!0):i(this).prop("checked",!0)},maybeLaunchAllProcesses:function(){var a;i(this).prop("disabled")||i('.imagify-bulk-table [name="group[]"]:checked').length&&(e.imagify.bulk.hasBlockingError(!0)||((a=i("#tmpl-imagify-bulk-infos")).length?swal({title:imagifyBulk.labels.bulkInfoTitle,html:a.html(),type:"",customClass:"imagify-sweet-alert imagify-swal-has-subtitle imagify-before-bulk-infos",showCancelButton:!0,padding:0,width:554,confirmButtonText:imagifyBulk.labels.confirmBulk,cancelButtonText:imagifySwal.labels.cancelButtonText,reverseButtons:!0}).then((function(){var t=i('.imagify-bulk-table [name="group[]"]:checked').first().closest(".imagify-row-folder-type");i.get(e.imagify.bulk.getAjaxUrl("bulkInfoSeen",{context:t.data("context")})),a.remove(),e.imagify.bulk.launchAllProcesses()})).catch(swal.noop):e.imagify.bulk.launchAllProcesses()))},launchAllProcesses:function(){var a=i(e);i("#imagify-bulk-action").prop("disabled",!0).find(".dashicons").addClass("rotate"),i(".imagify-row-complete").imagifyHide(200,(function(){i(this).removeClass("done")})),this.folderTypesQueue=[],this.status={},this.displayedWaitMessage=!1,this.processIsStopped=!1,this.globalOptimizedCount=0,this.globalGain=0,this.globalOriginalSize=0,this.globalOptimizedSize=0,i('.imagify-bulk-table [name="group[]"]:checked').each((function(){var a=i(this).closest(".imagify-row-folder-type"),s=a.data("group-id"),l=a.data("context"),o=a.find('.imagify-cell-level [name="level['+s+']"]:checked').val();e.imagify.bulk.folderTypesQueue.push({groupID:s,context:l,level:t===o?-1:parseInt(o,10)}),e.imagify.bulk.status[s]={isError:!1,id:"waiting"}})),e.imagify.beat.interval(15),e.imagify.beat.disableSuspend(),a.trigger("processQueue.imagify")},processQueue:function(){var a,t,s,l;e.imagify.bulk.processIsStopped||(e.imagify.bulk.displayedWaitMessage||(swal({title:imagifyBulk.labels.waitTitle,html:imagifyBulk.labels.waitText,showConfirmButton:!1,padding:0,imageUrl:imagifyBulk.waitImageUrl,customClass:"imagify-sweet-alert"}).catch(swal.noop),e.imagify.bulk.displayedWaitMessage=!0),e.imagify.bulk.folderTypesQueue.forEach((function(o){i.get(e.imagify.bulk.getAjaxUrl("bulkProcess",o)).done((function(r){var n;swal.close(),n=r.data&&r.data.message?r.data.message:imagifyBulk.ajaxErrorText,r.success&&r.data&&(i.isPlainObject(r.data)||i.isArray(r.data))?r.success&&(a=i("#cb-select-"+o.groupID).closest(".imagify-row-folder-type"),t=a.closest(".imagify-bulk-table"),s=t.find(".imagify-row-progress"),l=s.find(".bar"),a.find(".imagify-cell-checkbox-loader").removeClass("hidden").attr("aria-hidden","false"),a.find(".imagify-cell-checkbox-box").addClass("hidden").attr("aria-hidden","true"),l.css("width","0%").find(".percent").text("0%"),s.slideDown().attr("aria-hidden","false")):e.imagify.bulk.stopProcess(n,o)})).fail((function(){e.imagify.bulk.stopProcess("get-unoptimized-images",o)}))})))},queueEmpty:function(){var a=i(".imagify-bulk-table"),t={},s=!1,l=!0,o="";e.imagify.beat.resetInterval(),e.imagify.beat.enableSuspend(),e.imagify.bulk.folderTypesQueue=[],e.imagify.bulk.displayShareBox(),imagifyBulk.imagifybeatIDs.stats||i.get(e.imagify.bulk.getAjaxUrl("getStats"),{types:e.imagify.bulk.getFolderTypes()}).done((function(i){i.success&&e.imagify.bulk.updateStats(i.data)})),i.isEmptyObject(e.imagify.bulk.status)||(i.each(e.imagify.bulk.status,(function(i,a){if(a.isError){if("no-images"!==a.id&&a.isError)return s=a.id,l=!1,!1}else l=!1})),s?("invalid-api-key"===s?t={title:imagifyBulk.labels.invalidAPIKeyTitle,type:"info"}:"over-quota"===s?t={title:imagifyBulk.labels.overQuotaTitle,html:i("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}:"get-unoptimized-images"!==s&&"consumed-all-data"!==s||(t={title:imagifyBulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyBulk.labels.getUnoptimizedImagesErrorText,type:"info"}),e.imagify.bulk.displayError(t)):l&&(o=Object.prototype.hasOwnProperty.call(imagifyBulk.labels.nothingToDoText,e.imagify.bulk.imagifyAction)?imagifyBulk.labels.nothingToDoText[e.imagify.bulk.imagifyAction]:imagifyBulk.labels.nothingToDoText.optimize,e.imagify.bulk.displayError({title:imagifyBulk.labels.nothingToDoTitle,html:o,type:"info"}))),e.imagify.bulk.status={},a.find(".imagify-row-progress").slideUp().attr("aria-hidden","true").find(".bar").removeAttr("style").find(".percent").text("0%"),a.find(".imagify-cell-checkbox-loader").each((function(){i(this).addClass("hidden").attr("aria-hidden","true")})),a.find(".imagify-cell-checkbox-box").each((function(){i(this).removeClass("hidden").attr("aria-hidden","false")})),i('.imagify-bulk-table [name="group[]"]:checked').length?i("#imagify-bulk-action").prop("disabled",!1).find(".dashicons").removeClass("rotate"):i("#imagify-bulk-action").find(".dashicons").removeClass("rotate")},addStatsImagifybeat:function(i,a){a[imagifyBulk.imagifybeatIDs.stats]=Object.keys(e.imagify.bulk.getFolderTypes())},processStatsImagifybeat:function(i,a){void 0!==a[imagifyBulk.imagifybeatIDs.stats]&&e.imagify.bulk.updateStats(a[imagifyBulk.imagifybeatIDs.stats])},addQueueImagifybeat:function(i,a){a[imagifyBulk.imagifybeatIDs.queue]=Object.values(e.imagify.bulk.getFolderTypes())},processQueueImagifybeat:function(a,t){var s,l,o;if(void 0!==t[imagifyBulk.imagifybeatIDs.queue]){if(!1!==(s=t[imagifyBulk.imagifybeatIDs.queue]).result&&(e.imagify.bulk.globalOriginalSize=s.result.original_size,e.imagify.bulk.globalOptimizedSize=s.result.optimized_size,e.imagify.bulk.globalOptimizedCount=s.result.total,e.imagify.bulk.globalGain=100*e.imagify.bulk.globalOptimizedSize/e.imagify.bulk.globalOriginalSize),!e.imagify.bulk.processIsStopped&&e.imagify.bulk.hasBlockingError(!0))return void i(e).trigger("queueEmpty.imagify");if(Object.prototype.hasOwnProperty.call(s,"groups_data")&&Object.entries(s.groups_data).forEach((function(a){(l=i("[data-context="+a[0]+"]")).children(".imagify-cell-count-optimized").first().html(a[1]["count-optimized"]),l.children(".imagify-cell-count-errors").first().html(a[1]["count-errors"]),l.children(".imagify-cell-optimized-size-size").first().html(a[1]["optimized-size"]),l.children(".imagify-cell-original-size-size").first().html(a[1]["original-size"])})),0===s.remaining)return void i(e).trigger("queueEmpty.imagify");(o=i(".imagify-row-progress")).find(".bar").css("width",s.percentage+"%").find(".percent").html(s.percentage+"%"),o.slideDown().attr("aria-hidden","false")}},addRequirementsImagifybeat:function(i,a){a[imagifyBulk.imagifybeatIDs.requirements]=1},processRequirementsImagifybeat:function(i,a){void 0!==a[imagifyBulk.imagifybeatIDs.requirements]&&(a=a[imagifyBulk.imagifybeatIDs.requirements],imagifyBulk.curlMissing=a.curl_missing,imagifyBulk.editorMissing=a.editor_missing,imagifyBulk.extHttpBlocked=a.external_http_blocked,imagifyBulk.apiDown=a.api_down,imagifyBulk.keyIsValid=a.key_is_valid,imagifyBulk.isOverQuota=a.is_over_quota)},drawOverviewChart:function(t){var s,l;(this.charts.overview.canvas||(this.charts.overview.canvas=a.getElementById("imagify-overview-chart"),this.charts.overview.canvas))&&(t=t&&i.isArray(t)?t:[],this.charts.overview.donut?t.length&&(0===t.reduce((function(i,a){return i+a}),0)&&(t[0]=1),this.charts.overview.donut.data.datasets[0].data=t,this.charts.overview.donut.update()):(this.charts.overview.data.datasets[0].data=[parseInt(this.charts.overview.canvas.getAttribute("data-unoptimized"),10),parseInt(this.charts.overview.canvas.getAttribute("data-optimized"),10),parseInt(this.charts.overview.canvas.getAttribute("data-errors"),10)],s=i.extend({},this.charts.overview.data),t.length&&(s.datasets[0].data=t),0===s.datasets[0].data.reduce((function(i,a){return i+a}),0)&&(s.datasets[0].data[0]=1),this.charts.overview.donut=new e.imagify.Chart(this.charts.overview.canvas,{type:"doughnut",data:s,options:{plugins:{legend:{display:!1}},events:[],animation:{easing:"easeOutBounce"},tooltips:{displayColors:!1,callbacks:{label:function(i,a){return a.datasets[i.datasetIndex].data[i.index]}}},responsive:!1,cutout:75}}),l='
    ',i.each(s.labels,(function(i,a){l+='
  • '+a+"
  • "})),l+="
",a.getElementById("imagify-overview-chart-legend").innerHTML=l))},drawShareChart:function(){var t;if(this.charts.share.canvas||(this.charts.share.canvas=a.getElementById("imagify-ac-chart"),this.charts.share.canvas)){if(t=parseInt(i(this.charts.share.canvas).closest(".imagify-ac-chart").attr("data-percent"),10),this.charts.share.donut)return this.charts.share.donut.data.datasets[0].data[0]=t,this.charts.share.donut.data.datasets[0].data[1]=100-t,void this.charts.share.donut.update();this.charts.share.donut=new e.imagify.Chart(this.charts.share.canvas,{type:"doughnut",data:{datasets:[{data:[t,100-t],backgroundColor:["#40B1D0","#FFFFFF"],borderWidth:0}]},options:{plugins:{legend:{display:!1}},events:[],animation:{easing:"easeOutBounce"},tooltips:{enabled:!1},responsive:!1,cutoutPercentage:70}})}}},e.imagify.bulk.init(),imagifyBulk.isOverQuota&&e.imagify.bulk.displayError({title:imagifyBulk.labels.overQuotaTitle,html:i("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1})}(jQuery,document,window)}},i=>{var a;a="./bulk.js",i(i.s=a)}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/admin/js/chart.js b/wp/wp-content/plugins/imagify/assets/admin/js/chart.js new file mode 100644 index 00000000..48753180 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/admin/js/chart.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_roots_bud=self.webpackChunk_roots_bud||[]).push([[164],{"./chart.js":()=>{function t(t){return t+.5|0}const e=(t,e,i)=>Math.max(Math.min(t,i),e);function i(i){return e(t(2.55*i),0,255)}function s(i){return e(t(255*i),0,255)}function n(i){return e(t(i/2.55)/100,0,1)}function o(i){return e(t(100*i),0,100)}const a={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},r=[..."0123456789ABCDEF"],h=t=>r[15&t],l=t=>r[(240&t)>>4]+r[15&t],c=t=>(240&t)>>4==(15&t);function d(t){var e=(t=>c(t.r)&&c(t.g)&&c(t.b)&&c(t.a))(t)?h:l;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const u=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function f(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function g(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function p(t,e,i){const s=f(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function m(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,h,l;return n!==o&&(l=n-o,h=a>.5?l/(2-n-o):l/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),w.transparent=[0,0,0,0]);const e=w[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const S=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const P=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,D=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function C(t,e,i){if(t){let s=m(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=x(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function O(t,e){return t?Object.assign(e||{},t):t}function A(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=s(t[3]))):(e=O(t,{r:0,g:0,b:0,a:1})).a=s(e.a),e}function T(t){return"r"===t.charAt(0)?function(t){const s=S.exec(t);let n,o,a,r=255;if(s){if(s[7]!==n){const t=+s[7];r=s[8]?i(t):e(255*t,0,255)}return n=+s[1],o=+s[3],a=+s[5],n=255&(s[2]?i(n):e(n,0,255)),o=255&(s[4]?i(o):e(o,0,255)),a=255&(s[6]?i(a):e(a,0,255)),{r:n,g:o,b:a,a:r}}}(t):y(t)}class L{constructor(t){if(t instanceof L)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=A(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*a[s[1]],g:255&17*a[s[2]],b:255&17*a[s[3]],a:5===o?17*a[s[4]]:255}:7!==o&&9!==o||(n={r:a[s[1]]<<4|a[s[2]],g:a[s[3]]<<4|a[s[4]],b:a[s[5]]<<4|a[s[6]],a:9===o?a[s[7]]<<4|a[s[8]]:255})),i=n||k(t)||T(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=O(this._rgb);return t&&(t.a=n(t.a)),t}set rgb(t){this._rgb=A(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${n(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?d(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=m(t),i=e[0],s=o(e[1]),a=o(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${a}%, ${n(t.a)})`:`hsl(${i}, ${s}%, ${a}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,h=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-h,i.r=255&h*i.r+n*s.r+.5,i.g=255&h*i.g+n*s.g+.5,i.b=255&h*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const o=D(n(t.r)),a=D(n(t.g)),r=D(n(t.b));return{r:s(P(o+i*(D(n(e.r))-o))),g:s(P(a+i*(D(n(e.g))-a))),b:s(P(r+i*(D(n(e.b))-r))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new L(this.rgb)}alpha(t){return this._rgb.a=s(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const e=this._rgb,i=t(.3*e.r+.59*e.g+.11*e.b);return e.r=e.g=e.b=i,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return C(this._rgb,2,t),this}darken(t){return C(this._rgb,2,-t),this}saturate(t){return C(this._rgb,1,t),this}desaturate(t){return C(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=m(t);i[0]=_(i[0]+e),i=x(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function E(){}const R=(()=>{let t=0;return()=>t++})();function I(t){return null==t}function z(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function F(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function V(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function B(t,e){return V(t)?t:e}function W(t,e){return void 0===t?e:t}const N=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function H(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function j(t,e,i,s){let n,o,a;if(z(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;nt,x:t=>t.x,y:t=>t.y};function J(t,e){const i=Z[e]||(Z[e]=function(t){const e=function(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function Q(t){return t.charAt(0).toUpperCase()+t.slice(1)}const tt=t=>void 0!==t,et=t=>"function"==typeof t,it=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};const st=Math.PI,nt=2*st,ot=nt+st,at=Number.POSITIVE_INFINITY,rt=st/180,ht=st/2,lt=st/4,ct=2*st/3,dt=Math.log10,ut=Math.sign;function ft(t,e,i){return Math.abs(t-e)h&&l=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Dt(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const Ct=(t,e,i,s)=>Dt(t,i,s?s=>{const n=t[s][e];return nt[s][e]Dt(t,i,(s=>t[s][e]>=i));const At=["push","pop","shift","splice","unshift"];function Tt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(At.forEach((e=>{delete t[e]})),delete t._chartjs)}function Lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const Et="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function Rt(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,Et.call(window,(()=>{s=!1,t.apply(e,i)})))}}const It=t=>"start"===t?"left":"end"===t?"right":"center",zt=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2;function Ft(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,h=a.axis,{min:l,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=St(Math.min(Ct(r,h,l).lo,i?s:Ct(e,h,a.getPixelForValue(l)).lo),0,s-1)),o=u?St(Math.max(Ct(r,a.axis,c,!0).hi+1,i?0:Ct(e,h,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function Vt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}const Bt=t=>0===t||1===t,Wt=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*nt/i),Nt=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*nt/i)+1,Ht={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*ht),easeOutSine:t=>Math.sin(t*ht),easeInOutSine:t=>-.5*(Math.cos(st*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Bt(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Bt(t)?t:Wt(t,.075,.3),easeOutElastic:t=>Bt(t)?t:Nt(t,.075,.3),easeInOutElastic(t){const e=.1125;return Bt(t)?t:t<.5?.5*Wt(2*t,e,.45):.5+.5*Nt(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Ht.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*Ht.easeInBounce(2*t):.5*Ht.easeOutBounce(2*t-1)+.5};function jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function $t(t){return jt(t)?t:new L(t)}function Yt(t){return jt(t)?t:new L(t).saturate(.5).darken(.1).hexString()}const Ut=["x","y","borderWidth","radius","tension"],Xt=["color","borderColor","backgroundColor"];const qt=new Map;function Kt(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=qt.get(i);return s||(s=new Intl.NumberFormat(t,e),qt.set(i,s)),s}(e,i).format(t)}const Gt={values:t=>z(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=dt(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),h={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(h,this.options.ticks.format),Kt(t,s,h)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(dt(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?Gt.numeric.call(this,t,e,i):""}};var Zt={formatters:Gt};const Jt=Object.create(null),Qt=Object.create(null);function te(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>Yt(e.backgroundColor),this.hoverBorderColor=(t,e)=>Yt(e.borderColor),this.hoverColor=(t,e)=>Yt(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ee(this,t,e)}get(t){return te(this,t)}describe(t,e){return ee(Qt,t,e)}override(t,e){return ee(Jt,t,e)}route(t,e,i,s){const n=te(this,t),o=te(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return F(t)?Object.assign({},e,t):W(t,e)},set(t){this[a]=t}}})}apply(t){t.forEach((t=>t(this)))}}var se=new ie({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:Xt},numbers:{type:"number",properties:Ut}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Zt.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function ne(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function oe(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let h,l,c,d,u;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function ce(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==o.strokeColor;let h,l;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),I(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),h=0;h+t||0;function we(t,e){const i={},s=F(e),n=s?Object.keys(e):e,o=F(t)?s?i=>W(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=Me(o(t));return i}function ke(t){return we(t,{top:"y",right:"x",bottom:"y",left:"x"})}function Se(t){return we(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Pe(t){const e=ke(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function De(t,e){t=t||{},e=e||se.font;let i=W(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=W(t.style,e.style);s&&!(""+s).match(ye)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:W(t.family,e.family),lineHeight:ve(W(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:W(t.weight,e.weight),string:""};return n.string=function(t){return!t||I(t.size)||I(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n}function Ce(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;nt[0])){const o=i||t;void 0===s&&(s=Ne("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>Ae([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Ie(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=Ne(Ee(o,t),i),void 0!==n)return Re(t,n)?Be(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>He(t).includes(e),ownKeys:t=>He(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function Te(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Le(t,s),setContext:e=>Te(t,e,i,s),override:n=>Te(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Ie(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];et(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let h=e(o,a||s);r.delete(t),Re(t,h)&&(h=Be(n._scopes,n,t,h));return h}(e,r,t,i));z(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(void 0!==o.index&&s(t))return e[o.index%e.length];if(F(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const h of i){const i=Be(s,n,t,h);e.push(Te(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Re(e,r)&&(r=Te(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Le(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:et(i)?i:()=>i,isIndexable:et(s)?s:()=>s}}const Ee=(t,e)=>t?t+Q(e):e,Re=(t,e)=>F(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Ie(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function ze(t,e,i){return et(t)?t(e,i):t}const Fe=(t,e)=>!0===t?e:"string"==typeof t?J(e,t):void 0;function Ve(t,e,i,s,n){for(const o of e){const e=Fe(i,o);if(e){t.add(e);const o=ze(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function Be(t,e,i,s){const n=e._rootScopes,o=ze(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let h=We(r,a,i,o||i,s);return null!==h&&((void 0===o||o===i||(h=We(r,a,o,h,s),null!==h))&&Ae(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(z(n)&&F(i))return i;return n||{}}(e,i,s))))}function We(t,e,i,s,n){for(;i;)i=Ve(t,e,i,s,n);return i}function Ne(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function He(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function je(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,h,l,c;for(r=0,h=s;re"x"===t?"y":"x";function Xe(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=vt(o,n),h=vt(a,o);let l=r/(r+h),c=h/(r+h);l=isNaN(l)?0:l,c=isNaN(c)?0:c;const d=s*l,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function qe(t,e="x"){const i=Ue(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,h,l=Ye(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)qe(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;ot.ownerDocument.defaultView.getComputedStyle(t,null);const ei=["top","right","bottom","left"];function ii(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=ei[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const si=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ni(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=ti(i),o="border-box"===n.boxSizing,a=ii(n,"padding"),r=ii(n,"border","width"),{x:h,y:l,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,h=!1;if(si(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,h=!0}return{x:a,y:r,box:h}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((h-d)/f*i.width/s),y:Math.round((l-u)/g*i.height/s)}}const oi=t=>Math.round(10*t)/10;function ai(t,e,i,s){const n=ti(t),o=ii(n,"margin"),a=Qe(n.maxWidth,t,"clientWidth")||at,r=Qe(n.maxHeight,t,"clientHeight")||at,h=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=Je(t);if(o){const t=o.getBoundingClientRect(),a=ti(o),r=ii(a,"border","width"),h=ii(a,"padding");e=t.width-h.width-r.width,i=t.height-h.height-r.height,s=Qe(a.maxWidth,o,"clientWidth"),n=Qe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||at,maxHeight:n||at}}(t,e,i);let{width:l,height:c}=h;if("content-box"===n.boxSizing){const t=ii(n,"border","width"),e=ii(n,"padding");l-=e.width+t.width,c-=e.height+t.height}l=Math.max(0,l-o.width),c=Math.max(0,s?l/s:c-o.height),l=oi(Math.min(l,a,h.maxWidth)),c=oi(Math.min(c,r,h.maxHeight)),l&&!c&&(c=oi(l/2));return(void 0!==e||void 0!==i)&&s&&h.height&&c>h.height&&(c=h.height,l=oi(Math.floor(c*s))),{width:l,height:c}}function ri(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const hi=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function li(t,e){const i=function(t,e){return ti(t).getPropertyValue(e)}(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function ci(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function di(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function ui(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=ci(t,n,i),r=ci(n,o,i),h=ci(o,e,i),l=ci(a,r,i),c=ci(r,h,i);return ci(l,c,i)}function fi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function gi(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function pi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function mi(t){return"angle"===t?{between:kt,compare:Mt,normalize:wt}:{between:Pt,compare:(t,e)=>t-e,normalize:t=>t}}function bi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function xi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:h,normalize:l}=mi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=mi(s),h=e.length;let l,c,{start:d,end:u,loop:f}=t;if(f){for(d+=h,u+=h,l=0,c=h;lx||h(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||h(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=l(m[s]),p!==b&&(x=h(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(bi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(bi({start:_,end:d,loop:u,count:a,style:f})),g}function _i(t,e){const i=[],s=t.segments;for(let n=0;ns({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=Et.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var ki=new wi;const Si="transparent",Pi={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=$t(t||Si),n=s.valid&&$t(e||Si);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Di{constructor(t,e,i,s){const n=e[i];s=Ce([t.to,s,n,t.from]);const o=Ce([t.from,n,s]);this._active=!0,this._fn=t.fn||Pi[t.type||typeof o],this._easing=Ht[t.easing]||Ht.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Ce([t.to,e,s,t.from]),this._from=Ce([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const n=t[s];if(!F(n))return;const o={};for(const t of e)o[t]=n[t];(z(n.properties)&&n.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,o)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const h=o[r];if("$"===h.charAt(0))continue;if("options"===h){s.push(...this._animateOptions(t,e));continue}const l=e[h];let c=n[h];const d=i.get(h);if(c){if(d&&c.active()){c.update(d,l,a);continue}c.cancel()}d&&d.duration?(n[h]=c=new Di(d,t,h,l),s.push(c)):t[h]=l}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(ki.add(this._chart,i),!0):void 0}}function Oi(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Ai(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Ii(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,h=o.axis,l=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Fi(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Vi=t=>"reset"===t||"none"===t,Bi=(t,e)=>e?t:Object.assign({},t);class Wi{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Li(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Fi(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=W(i.xAxisID,zi(t,"x")),o=e.yAxisID=W(i.yAxisID,zi(t,"y")),a=e.rAxisID=W(i.rAxisID,zi(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),l=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Tt(this._data,this),t._stacked&&Fi(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(F(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s{const e="_onData"+Q(t),i=s[t];Object.defineProperty(s,t,{configurable:!0,enumerable:!1,value(...t){const n=i.apply(this,t);return s._chartjs.listeners.forEach((i=>{"function"==typeof i[e]&&i[e](...t)})),n}})})))),this._syncList=[],this._data=e}var s,n}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=Li(e.vScale,e),e.stack!==i.stack&&(s=!0,Fi(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&Ii(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,a=n.axis;let r,h,l,c=0===t&&e===s.length||i._sorted,d=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,l=s;else{l=z(s[t])?this.parseArrayData(i,s,t,e):F(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===h[a]||d&&h[a]t&&!e.hidden&&e._stacked&&{keys:Ai(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:l,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!V(u[t.axis])||l>e||c=0;--d)if(!f()){this.updateRangeFromParsed(h,t,u,r);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Bi(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const h=new Ci(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(h)),h}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Vi(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Vi(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Vi(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;at-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const h=()=>{32767!==o&&-32768!==o&&(tt(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(h=r,l=a),e[i.axis]=l,e._custom={barStart:h,barEnd:l,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function ji(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,h=[];let l,c,d,u;for(l=i,c=i+s;lt.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(F(i[t])){const{key:t="value"}=this._parsing;a=e=>+J(i[e],t)}for(n=t,o=t+e;nkt(t,r,h,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>kt(t,r,h,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,l,d),m=f(ht,c,u),b=g(st,l,d),x=g(st+ht,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=N(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*c,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/nt)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,h=(a.left+a.right)/2,l=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?nt*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Kt(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Kt(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return je.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,h=r.xCenter,l=r.yCenter,c=r.getIndexAngle(0)-.5*st;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?bt(this.resolveDataElementOptions(t,e).angle||i):0}}var Zi=Object.freeze({__proto__:null,BarController:class extends Wi{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return ji(t,e,i,s)}parseArrayData(t,e,i,s){return ji(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,h="x"===n.axis?a:r,l="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),n=i.options.stacked,o=[],a=t=>{const i=t.controller.getParsed(e),s=i&&i[t.vScale.axis];if(I(s)||isNaN(s))return!0};for(const i of s)if((void 0===e||!a(i))&&((!1===n||-1===o.indexOf(i.stack)||void 0===n&&void 0===i.stack)&&o.push(i.stack),i.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(d,e,a)*o,u===a&&(m-=d/2);const t=e.getPixelForDecimal(0),n=e.getPixelForDecimal(1),h=Math.min(t,n),f=Math.max(t,n);m=Math.max(Math.min(m,f),h),c=m+d,i&&!l&&(r._stacks[e.axis]._visualValues[s]=e.getValueForPixel(c)-e.getValueForPixel(m))}if(m===e.getPixelForValue(a)){const t=ut(d)*e.getLineWidthForValue(a)/2;m+=t,d-=t}return{size:d,base:m,head:c,center:c+d/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=W(s.maxBarThickness,1/0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,h="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),h=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(h?", "+h:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:h}=this._getSharedOptions(e,s),l=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i=b){x.skip=!0;continue}const y=this.getParsed(i),v=I(y[u]),M=x[d]=o.getPixelForValue(y[d],i),w=x[u]=n||v?a.getBasePixel():a.getPixelForValue(r?this.applyStack(a,y,r):y[u],i);x.skip=isNaN(M)||isNaN(w)||v,x.stop=i>0&&Math.abs(y[d]-_[d])>p,g&&(x.parsed=y,x.raw=h.data[i]),c&&(x.options=l||this.resolveDataElementOptions(i,f.active?"active":s)),m||this.updateElement(f,i,x,s),_=y}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends Ki{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:Gi,RadarController:class extends Wi{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return je.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let l=e;l0&&Math.abs(i[u]-x[u])>m,p&&(g.parsed=i,g.raw=h.data[l]),d&&(g.options=c||this.resolveDataElementOptions(l,e.active?"active":s)),b||this.updateElement(e,l,g,s),x=i}this.updateSharedOptions(c,s,l)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Ji(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Qi{static override(t){Object.assign(Qi.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return Ji()}parse(){return Ji()}format(){return Ji()}add(){return Ji()}diff(){return Ji()}startOf(){return Ji()}endOf(){return Ji()}}var ts=Qi;function es(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?Ot:Ct;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function is(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:h}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var rs={evaluateInteractionItems:is,modes:{index(t,e,i,s){const n=ni(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?ss(t,n,o,s,a):os(t,n,o,!1,s,a),h=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&h.push({element:i,datasetIndex:t.index,index:e})})),h):[]},dataset(t,e,i,s){const n=ni(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?ss(t,n,o,s,a):os(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tss(t,ni(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ni(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return os(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>as(t,ni(e,t),"x",i.intersect,s),y:(t,e,i,s)=>as(t,ni(e,t),"y",i.intersect,s)}};const hs=["left","top","right","bottom"];function ls(t,e){return t.filter((t=>t.pos===e))}function cs(t,e){return t.filter((t=>-1===hs.indexOf(t.pos)&&t.box.axis===e))}function ds(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function us(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!hs.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function bs(t,e,i,s){const n=[];let o,a,r,h,l,c;for(o=0,a=t.length,l=0;ot.box.fullSize)),!0),s=ds(ls(e,"left"),!0),n=ds(ls(e,"right")),o=ds(ls(e,"top"),!0),a=ds(ls(e,"bottom")),r=cs(e,"x"),h=cs(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(h).concat(a).concat(r),chartArea:ls(e,"chartArea"),vertical:s.concat(n).concat(h),horizontal:o.concat(a).concat(r)}}(t.boxes),h=r.vertical,l=r.horizontal;j(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=h.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);gs(u,Pe(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=us(h.concat(l),d);bs(r.fullSize,f,d,g),bs(h,f,d,g),bs(l,f,d,g)&&bs(h,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(f),_s(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,_s(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},j(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};class vs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class Ms extends vs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ws="$chartjs",ks={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ss=t=>null===t||""===t;const Ps=!!hi&&{passive:!0};function Ds(t,e,i){t.canvas.removeEventListener(e,i,Ps)}function Cs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Os(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Cs(i.addedNodes,s),e=e&&!Cs(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function As(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Cs(i.removedNodes,s),e=e&&!Cs(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const Ts=new Map;let Ls=0;function Es(){const t=window.devicePixelRatio;t!==Ls&&(Ls=t,Ts.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Rs(t,e,i){const s=t.canvas,n=s&&Je(s);if(!n)return;const o=Rt(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){Ts.size||window.addEventListener("resize",Es),Ts.set(t,e)}(t,o),a}function Is(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){Ts.delete(t),Ts.size||window.removeEventListener("resize",Es)}(t)}function zs(t,e,i){const s=t.canvas,n=Rt((e=>{null!==t.ctx&&i(function(t,e){const i=ks[t.type]||t.type,{x:s,y:n}=ni(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,Ps)}(s,e,n),n}class Fs extends vs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[ws]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ss(n)){const e=li(t,"width");void 0!==e&&(t.width=e)}if(Ss(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=li(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[ws])return!1;const i=e[ws].initial;["height","width"].forEach((t=>{const s=i[t];I(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e[ws],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Os,detach:As,resize:Rs}[e]||zs;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:Is,detach:Is,resize:Is}[e]||Ds)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return ai(t,e,i,s)}isAttached(t){const e=Je(t);return!(!e||!e.isConnected)}}class Vs{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return pt(this.x)&&pt(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Bs(t,e){const i=t.options.ticks,s=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),n=Math.min(i.maxTicksLimit||s,s),o=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;in)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nt-e)).pop(),e}(s);for(let t=0,e=o.length-1;tn)return e}return Math.max(n,1)}(o,e,n);if(a>0){let t,i;const s=a>1?Math.round((h-r)/(a-1)):null;for(Ws(e,l,c,I(s)?0:r-s,r),t=0,i=a-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,Hs=(t,e)=>Math.min(e||t,t);function js(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return l}function Ys(t){return t.drawTicks?t.tickLength:0}function Us(t,e){if(!t.display)return 0;const i=De(t.font,e),s=Pe(t.padding);return(z(t.text)?t.text.length:1)*i.lineHeight+s.height}function Xs(t,e,i){let s=It(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class qs extends Vs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=B(t,Number.POSITIVE_INFINITY),e=B(e,Number.NEGATIVE_INFINITY),i=B(i,Number.POSITIVE_INFINITY),s=B(s,Number.NEGATIVE_INFINITY),{min:B(t,i),max:B(e,s),minDefined:V(t),maxDefined:V(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,h=a.length;rs?s:i,s=n&&i>s?i:s,{min:B(i,B(s,i)),max:B(s,B(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){H(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=function(t,e,i){const{min:s,max:n}=t,o=N(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const l=this._getLabelSizes(),c=l.widest.width,d=l.highest.height,u=St(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ys(t.grid)-e.padding-Us(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),h=xt(Math.min(Math.asin(St((l.highest.height+6)/o,-1,1)),Math.asin(St(a/r,-1,1))-Math.asin(St(d/r,-1,1)))),h=Math.max(s,Math.min(n,h))),this.labelRotation=h}afterCalculateLabelRotation(){H(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){H(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Us(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ys(n)+o):(t.height=this.maxHeight,t.width=Ys(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,h=bt(this.labelRotation),l=Math.cos(h),c=Math.sin(h);if(a){const e=i.mirror?0:c*n.width+l*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:l*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,l)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,h="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,l=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?h?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-l+o)*this.width/(this.width-l),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){H(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:o[t]||0,height:a[t]||0});return{first:w(0),last:w(e-1),widest:w(v),highest:w(M),widths:o,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return St(this._alignToPixels?ae(this.chart,e,0):e,-32768,32767)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o,border:a}=s,r=n.offset,h=this.isHorizontal(),l=this.ticks.length+(r?1:0),c=Ys(n),d=[],u=a.setContext(this.getContext()),f=u.display?u.width:0,g=f/2,p=function(t){return ae(i,t,f)};let m,b,x,_,y,v,M,w,k,S,P,D;if("top"===o)m=p(this.bottom),v=this.bottom-c,w=m-g,S=p(t.top)+g,D=t.bottom;else if("bottom"===o)m=p(this.top),S=t.top,D=p(t.bottom)-g,v=m+g,w=this.top+c;else if("left"===o)m=p(this.right),y=this.right-c,M=m-g,k=p(t.left)+g,P=t.right;else if("right"===o)m=p(this.left),k=t.left,P=p(t.right)-g,y=m+g,M=this.left+c;else if("x"===e){if("center"===o)m=p((t.top+t.bottom)/2+.5);else if(F(o)){const t=Object.keys(o)[0],e=o[t];m=p(this.chart.scales[t].getPixelForValue(e))}S=t.top,D=t.bottom,v=m+g,w=v+c}else if("y"===e){if("center"===o)m=p((t.left+t.right)/2);else if(F(o)){const t=Object.keys(o)[0],e=o[t];m=p(this.chart.scales[t].getPixelForValue(e))}y=m-g,M=y-c,k=t.left,P=t.right}const C=W(s.ticks.maxTicksLimit,l),O=Math.max(1,Math.ceil(l/C));for(b=0;be.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),h=a.join(".");se.route(o,n,h,r)}))}(e,t.defaultRoutes);t.descriptors&&se.describe(e,t.descriptors)}(t,o,i),this.override&&se.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in se[s]&&(delete se[s][i],this.override&&delete Jt[i])}}class Gs{constructor(){this.controllers=new Ks(Wi,"datasets",!0),this.elements=new Ks(Vs,"elements"),this.plugins=new Ks(Object,"plugins"),this.scales=new Ks(qs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):j(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=Q(t);H(i["before"+s],[],i),e[t](i),H(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Qs(t,e){return e||!1!==t?!0===t?{}:t:null}function tn(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function en(t,e){const i=se.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function sn(t){if("x"===t||"y"===t||"r"===t)return t}function nn(t,...e){if(sn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&sn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function on(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function an(t,e){const i=Jt[t.type]||{scales:{}},s=e.scales||{},n=en(t.type,e),o=Object.create(null);return Object.keys(s).forEach((e=>{const a=s[e];if(!F(a))return console.error(`Invalid scale configuration for scale: ${e}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const r=nn(e,a,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return on(t,"x",i[0])||on(t,"y",i[0])}return{}}(e,t),se.scales[a.type]),h=function(t,e){return t===e?"_index_":"_value_"}(r,n),l=i.scales||{};o[e]=K(Object.create(null),[{axis:r},a,l[r],l[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,a=i.indexAxis||en(n,e),r=(Jt[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,a),n=i[e+"AxisID"]||e;o[n]=o[n]||Object.create(null),K(o[n],[{axis:e},s[n],r[t]])}))})),Object.keys(o).forEach((t=>{const e=o[t];K(e,[se.scales[e.type],se.scale])})),o}function rn(t){const e=t.options||(t.options={});e.plugins=W(e.plugins,{}),e.scales=an(t,e)}function hn(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const ln=new Map,cn=new Set;function dn(t,e){let i=ln.get(t);return i||(i=e(),ln.set(t,i),cn.add(i)),i}const un=(t,e,i)=>{const s=J(e,i);void 0!==s&&t.add(s)};class fn{constructor(t){this._config=function(t){return(t=t||{}).data=hn(t.data),rn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=hn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),rn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return dn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return dn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return dn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return dn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>un(r,t,e)))),e.forEach((t=>un(r,s,t))),e.forEach((t=>un(r,Jt[n]||{},t))),e.forEach((t=>un(r,se,t))),e.forEach((t=>un(r,Qt,t)))}));const h=Array.from(r);return 0===h.length&&h.push(Object.create(null)),cn.has(e)&&o.set(e,h),h}chartOptionScopes(){const{options:t,type:e}=this;return[t,Jt[e]||{},se.datasets[e]||{},{type:e},se,Qt]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:a}=gn(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=Le(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(et(a)||pn(a))||o&&z(a))return!0}return!1}(o,e)){n.$shared=!1;r=Te(o,i=et(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=gn(this._resolverCache,t,i);return F(e)?Te(n,e,void 0,s):n}}function gn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:Ae(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const pn=t=>F(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||et(t[i])),!1);const mn=["top","bottom","left","right","chartArea"];function bn(t,e){return"top"===t||"bottom"===t||-1===mn.indexOf(t)&&"x"===e}function xn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function _n(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),H(i&&i.onComplete,[t],e)}function yn(t){const e=t.chart,i=e.options.animation;H(i&&i.onProgress,[t],e)}function vn(t){return Ze()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Mn={},wn=t=>{const e=vn(t);return Object.values(Mn).filter((t=>t.canvas===e)).pop()};function kn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}function Sn(t,e,i){return t.options.clip?t[i]:e[i]}class Pn{static defaults=se;static instances=Mn;static overrides=Jt;static registry=Zs;static version="4.4.0";static getChart=wn;static register(...t){Zs.add(...t),Dn()}static unregister(...t){Zs.remove(...t),Dn()}constructor(t,e){const i=this.config=new fn(e),s=vn(t),n=wn(s);if(n)throw new Error("Canvas is already in use. Chart with ID '"+n.id+"' must be destroyed before the canvas with ID '"+n.canvas.id+"' can be reused.");const o=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||function(t){return!Ze()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Ms:Fs}(s)),this.platform.updateConfig(i);const a=this.platform.acquireContext(s,o.aspectRatio),r=a&&a.canvas,h=r&&r.height,l=r&&r.width;this.id=R(),this.ctx=a,this.canvas=r,this.width=l,this.height=h,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Js,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=function(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}((t=>this.update(t)),o.resizeDelay||0),this._dataChanges=[],Mn[this.id]=this,a&&r?(ki.listen(this,"complete",_n),ki.listen(this,"progress",yn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return I(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Zs}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ri(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return re(this.canvas,this.ctx),this}stop(){return ki.stop(this),this}resize(t,e){ki.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ri(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),H(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){j(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=nn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),j(n,(e=>{const n=e.options,o=n.id,a=nn(o,n),r=W(n.type,e.dtype);void 0!==n.position&&bn(n.position,a)===bn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(Zs.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),j(s,((t,e)=>{t||delete i[e]})),j(i,(t=>{ys.configure(this,t,t.options),ys.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(xn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){j(this.scales,(t=>{ys.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);it(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){kn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ys.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],j(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t,e){const{xScale:i,yScale:s}=t;return i&&s?{left:Sn(i,e,"left"),right:Sn(i,e,"right"),top:Sn(s,e,"top"),bottom:Sn(s,e,"bottom")}:e}(t,this.chartArea),o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&de(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&ue(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return ce(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=rs.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Oe(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);tt(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),ki.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};j(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){j(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},j(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!$(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=function(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}(t),h=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,H(n.onHover,[t,a,this],this),r&&H(n.onClick,[t,a,this],this));const l=!$(a,s);return(l||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=h,l}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function Dn(){return j(Pn.instances,(t=>t._plugins.invalidate()))}function Cn(t,e,i,s){const n=we(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return St(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:St(n.innerStart,0,a),innerEnd:St(n.innerEnd,0,a)}}function On(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function An(t,e,i,s,n,o){const{x:a,y:r,startAngle:h,pixelMargin:l,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-l,0),u=c>0?c+s+i+l:0;let f=0;const g=n-h;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/st)/d)/2,m=h+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Cn(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,C=m+y/P,O=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=On(w,S,a,r);t.arc(e.x,e.y,_,S,b+ht)}const i=On(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=On(D,O,a,r);t.arc(e.x,e.y,v,b+ht,O+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=On(P,C,a,r);t.arc(e.x,e.y,y,C+Math.PI,m-ht)}const n=On(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=On(M,k,a,r);t.arc(e.x,e.y,x,m-ht,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Tn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:h}=e,{borderWidth:l,borderJoinStyle:c,borderDash:d,borderDashOffset:u}=h,f="inner"===h.borderAlign;if(!l)return;t.setLineDash(d||[]),t.lineDashOffset=u,f?(t.lineWidth=2*l,t.lineJoin=c||"round"):(t.lineWidth=l,t.lineJoin=c||"bevel");let g=e.endAngle;if(o){An(t,e,i,s,g,n);for(let e=0;en?(l=n/h,t.arc(o,a,h,i+l,s-l,!0)):t.arc(o,a,n,i+ht,s-ht),t.closePath(),t.clip()}(t,e,g),o||(An(t,e,i,s,g,n),t.stroke())}function Ln(t,e,i=e){t.lineCap=W(i.borderCapStyle,e.borderCapStyle),t.setLineDash(W(i.borderDash,e.borderDash)),t.lineDashOffset=W(i.borderDashOffset,e.borderDashOffset),t.lineJoin=W(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=W(i.borderWidth,e.borderWidth),t.strokeStyle=W(i.borderColor,e.borderColor)}function En(t,e,i){t.lineTo(i.x,i.y)}function Rn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,h=Math.max(n,a),l=Math.min(o,r),c=nr&&o>r;return{count:s,start:h,loop:e.loop,ilen:l(a+(l?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(h&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function Fn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?zn:In}const Vn="function"==typeof Path2D;function Bn(t,e,i,s){Vn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Ln(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Fn(e);for(const r of n)Ln(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Wn extends Vs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;Ge(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=function(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);return yi(t,!0===s?[{start:a,end:r,loop:o}]:function(t,e,i,s){const n=t.length,o=[];let a,r=e,h=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?h.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,h.skip&&(e=a)),h=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=yt(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:l,circumference:c}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),d=(this.options.spacing+this.options.borderWidth)/2,u=W(c,r-a)>=nt||kt(n,a,r),f=Pt(o,h+d,l+d);return u&&f}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:h}=this.options,l=(s+n)/2,c=(o+a+h+r)/2;return{x:e+Math.cos(l)*c,y:i+Math.sin(l)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>nt?Math.floor(i/nt):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(st,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let h=e.endAngle;if(o){An(t,e,i,s,h,n);for(let e=0;et.replace("rgb(","rgba(").replace(")",", 0.5)")));function Zn(t){return Kn[t%Kn.length]}function Jn(t){return Gn[t%Gn.length]}function Qn(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof Ki?e=function(t,e){return t.backgroundColor=t.data.map((()=>Zn(e++))),e}(i,e):n instanceof Gi?e=function(t,e){return t.backgroundColor=t.data.map((()=>Jn(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Zn(e),t.backgroundColor=Jn(e),++e}(i,e))}}function to(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var eo={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n;if(!i.forceOverride&&(to(s)||(a=n)&&(a.borderColor||a.backgroundColor)||o&&to(o)))return;var a;const r=Qn(t);s.forEach(r)}};function io(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function so(t){t.data.datasets.forEach((t=>{io(t)}))}var no={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void so(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:o,indexAxis:a}=e,r=t.getDatasetMeta(n),h=o||e.data;if("y"===Ce([a,t.options.indexAxis]))return;if(!r.controller.supportsDecimation)return;const l=t.scales[r.xAxisID];if("linear"!==l.type&&"time"!==l.type)return;if(t.options.parsing)return;let{start:c,count:d}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:h,maxDefined:l}=o.getUserBounds();return h&&(n=St(Ct(e,o.axis,a).lo,0,i-1)),s=l?St(Ct(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(r,h);if(d<=(i.threshold||4*s))return void io(e);let u;switch(I(o)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":u=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let h=0;const l=e+i-1;let c,d,u,f,g,p=e;for(a[h++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[h++]=d,p=g}return a[h++]=t[l],a}(h,c,d,s,i);break;case"min-max":u=function(t,e,i,s){let n,o,a,r,h,l,c,d,u,f,g=0,p=0;const m=[],b=e+i-1,x=t[e].x,_=t[b].x-x;for(n=e;nf&&(f=r,c=n),g=(p*g+o.x)/++p;else{const i=n-1;if(!I(l)&&!I(c)){const e=Math.min(l,c),s=Math.max(l,c);e!==d&&e!==i&&m.push({...t[e],x:g}),s!==d&&s!==i&&m.push({...t[s],x:g})}n>0&&i!==d&&m.push(t[i]),m.push(o),h=e,p=0,u=f=r,l=c=d=n}}return m}(h,c,d,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=u}))},destroy(t){so(t)}};function oo(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=wt(n),o=wt(o)),{property:t,start:n,end:o}}function ao(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function ro(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function ho(t,e){let i=[],s=!1;return z(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=ao(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new Wn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function lo(t){return t&&!1!==t.fill}function co(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!V(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function uo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=W(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(F(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return V(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function fo(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&bo(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;lo(i)&&bo(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;lo(s)&&"beforeDatasetDraw"===i.drawTime&&bo(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const wo=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class ko extends Vs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=H(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=De(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=wo(i,n);let h,l;e.font=s.string,this.isHorizontal()?(h=this.maxWidth,l=this._fitRows(o,n,a,r)+10):(l=this.maxHeight,h=this._fitCols(o,s,a,r)+10),this.width=Math.min(h,t.maxWidth||this.maxWidth),this.height=Math.min(l,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],h=this.lineWidths=[0],l=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-l;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||h[h.length-1]+g+2*a>o)&&(c+=l,h[h.length-(f>0?0:1)]=0,u+=l,d++),r[f]={left:0,top:u,row:d,width:g,height:s},h[h.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],h=this.columnSizes=[],l=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=So(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>l&&(c+=d+a,h.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,h.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=fi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=zt(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=zt(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=zt(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=zt(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;de(t,this),this._draw(),ue(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=se.color,r=fi(t.rtl,this.left,this.width),h=De(o.font),{padding:l}=o,c=h.size,d=c/2;let u;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:f,boxHeight:g,itemHeight:p}=wo(o,c),m=this.isHorizontal(),b=this._computeTitleHeight();u=m?{x:zt(n,this.left+l,this.right-i[0]),y:this.top+l+b,line:0}:{x:this.left+l,y:zt(n,this.top+b+l,this.bottom-e[0].height),line:0},gi(this.ctx,t.textDirection);const x=p+l;this.legendItems.forEach(((_,y)=>{s.strokeStyle=_.fontColor,s.fillStyle=_.fontColor;const v=s.measureText(_.text).width,M=r.textAlign(_.textAlign||(_.textAlign=o.textAlign)),w=f+d+v;let k=u.x,S=u.y;r.setWidth(this.width),m?y>0&&k+w+l>this.right&&(S=u.y+=x,u.line++,k=u.x=zt(n,this.left+l,this.right-i[u.line])):y>0&&S+x>this.bottom&&(k=u.x=k+e[u.line].width+l,u.line++,S=u.y=zt(n,this.top+b+l,this.bottom-e[u.line].height));if(function(t,e,i){if(isNaN(f)||f<=0||isNaN(g)||g<0)return;s.save();const n=W(i.lineWidth,1);if(s.fillStyle=W(i.fillStyle,a),s.lineCap=W(i.lineCap,"butt"),s.lineDashOffset=W(i.lineDashOffset,0),s.lineJoin=W(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=W(i.strokeStyle,a),s.setLineDash(W(i.lineDash,[])),o.usePointStyle){const a={radius:g*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},h=r.xPlus(t,f/2);le(s,a,h,e+d,o.pointStyleWidth&&f)}else{const o=e+Math.max((c-g)/2,0),a=r.leftForLtr(t,f),h=Se(i.borderRadius);s.beginPath(),Object.values(h).some((t=>0!==t))?xe(s,{x:a,y:o,w:f,h:g,radius:h}):s.rect(a,o,f,g),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(k),S,_),k=((t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e)(M,k+f+d,m?k+w:this.right,t.rtl),function(t,e,i){be(s,i.text,t,e+p/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(k),S,_),m)u.x+=w+l;else if("string"!=typeof _.text){const t=h.lineHeight;u.y+=So(_,t)+l}else u.y+=x})),pi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=De(e.font),s=Pe(e.padding);if(!e.display)return;const n=fi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,h=s.top+r;let l,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),l=this.top+h,c=zt(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);l=h+zt(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=zt(a,c,c+d);o.textAlign=n.textAlign(It(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,be(o,e.text,u,l,i)}_computeTitleHeight(){const t=this.options.title,e=De(t.font),i=Pe(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(Pt(t,this.left,this.right)&&Pt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const h=t.controller.getStyle(i?0:void 0),l=Pe(h.borderWidth);return{text:e[t.index].label,fillStyle:h.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:h.borderCapStyle,lineDash:h.borderDash,lineDashOffset:h.borderDashOffset,lineJoin:h.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:h.borderColor,pointStyle:s||h.pointStyle,rotation:h.rotation,textAlign:n||h.textAlign,borderRadius:a&&(r||h.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class Do extends Vs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=z(i.text)?i.text.length:1;this._padding=Pe(i.padding);const n=s*De(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,h,l,c=0;return this.isHorizontal()?(h=zt(a,i,n),l=e+t,r=n-i):("left"===o.position?(h=i+t,l=zt(a,s,e),c=-.5*st):(h=n-t,l=zt(a,e,s),c=.5*st),r=s-e),{titleX:h,titleY:l,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=De(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);be(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:It(e.align),textBaseline:"middle",translation:[n,o]})}}var Co={id:"title",_element:Do,start(t,e,i){!function(t,e){const i=new Do({ctx:t.ctx,options:e,chart:t});ys.configure(t,i,e),ys.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ys.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ys.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Oo=new WeakMap;var Ao={id:"subtitle",start(t,e,i){const s=new Do({ctx:t.ctx,options:i,chart:t});ys.configure(t,s,i),ys.addBox(t,s),Oo.set(t,s)},stop(t){ys.removeBox(t,Oo.get(t)),Oo.delete(t)},beforeUpdate(t,e,i){const s=Oo.get(t);ys.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const To={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function Ro(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Io(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,h=De(e.bodyFont),l=De(e.titleFont),c=De(e.footerFont),d=o.length,u=n.length,f=s.length,g=Pe(e.padding);let p=g.height,m=0,b=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(b+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*l.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b){p+=f*(e.displayColors?Math.max(r,h.lineHeight):h.lineHeight)+(b-f)*h.lineHeight+(b-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let x=0;const _=function(t){m=Math.max(m,i.measureText(t).width+x)};return i.save(),i.font=l.string,j(t.title,_),i.font=h.string,j(t.beforeBody.concat(t.afterBody),_),x=e.displayColors?a+2+e.boxPadding:0,j(s,(t=>{j(t.before,_),j(t.lines,_),j(t.after,_)})),x=0,i.font=c.string,j(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function zo(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:h}}=t;let l="center";return"center"===s?l=n<=(r+h)/2?"left":"right":n<=o/2?l="left":n>=a-o/2&&(l="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(l,t,e,i)&&(l="center"),l}function Fo(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||zo(t,e,i,s),yAlign:s}}function Vo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:h}=i,l=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=Se(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,h,l);return"center"===h?"left"===r?g+=l:"right"===r&&(g-=l):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:St(g,0,s.width-e.width),y:St(p,0,s.height-e.height)}}function Bo(t,e,i){const s=Pe(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Wo(t){return Lo([],Eo(t))}function No(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Ho={beforeTitle:E,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=No(i,t);Lo(e.before,Eo(jo(n,"beforeLabel",this,t))),Lo(e.lines,jo(n,"label",this,t)),Lo(e.after,Eo(jo(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Wo(jo(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=jo(i,"beforeFooter",this,t),n=jo(i,"footer",this,t),o=jo(i,"afterFooter",this,t);let a=[];return a=Lo(a,Eo(s)),a=Lo(a,Eo(n)),a=Lo(a,Eo(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,h=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(h=h.sort(((e,s)=>t.itemSort(e,s,i)))),j(h,(e=>{const i=No(t.callbacks,e);s.push(jo(i,"labelColor",this,e)),n.push(jo(i,"labelPointStyle",this,e)),o.push(jo(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=h,h}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=To[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Io(this,i),a=Object.assign({},t,e),r=Fo(this.chart,i,a),h=Vo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:h.x,y:h.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:h,bottomLeft:l,bottomRight:c}=Se(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,l)+o:"right"===s?d+f-Math.max(h,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const h=fi(i.rtl,this.x,this.width);for(t.x=Bo(this,i.titleAlign,i),e.textAlign=h.textAlign(i.titleAlign),e.textBaseline="middle",o=De(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,xe(t,{x:e,y:f,w:h,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),xe(t,{x:i,y:f+1,w:h-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,f,h,r),t.strokeRect(e,f,h,r),t.fillStyle=o.backgroundColor,t.fillRect(i,f+1,h-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:h,boxPadding:l}=i,c=De(i.bodyFont);let d=c.lineHeight,u=0;const f=fi(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d/2),t.y+=d+n},p=f.textAlign(o);let m,b,x,_,y,v,M;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Bo(this,p,i),e.fillStyle=i.bodyColor,j(this.beforeBody,g),u=a&&"right"!==p?"center"===o?h/2+l:h+2+l:0,_=0,v=s.length;_0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=To[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Io(this,t),a=Object.assign({},i,this._size),r=Fo(e,t,a),h=Vo(t,a,r,e);s._to===h.x&&n._to===h.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Pe(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),gi(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),pi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!$(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!$(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=To[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Yo={id:"tooltip",_element:$o,positioners:To,afterInit(t,e,i){i&&(t.tooltip=new $o({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Ho},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Uo=Object.freeze({__proto__:null,Colors:eo,Decimation:no,Filler:Mo,Legend:Po,SubTitle:Ao,Title:Co,Tooltip:Yo});function Xo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function qo(t){const e=this.getLabels();return t>=0&&tf&&(k=gt(w*k/f/u)*u),I(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)/y),"ticks"===s?(v=Math.floor(g/k)*k,M=Math.ceil(p/k)*k):(v=g,M=p),m&&b&&n&&function(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}((a-o)/n,k/1e3)?(w=Math.round(Math.min((a-o)/k,l)),k=(a-o)/w,v=o,M=a):x?(v=m?o:v,M=b?a:M,w=h-1,k=(M-v)/w):(w=(M-v)/k,w=ft(w,Math.round(w),k/1e3)?Math.round(w):Math.ceil(w));const S=Math.max(_t(k),_t(v));y=Math.pow(10,I(r)?S:r),v=Math.round(v*y)/y,M=Math.round(M*y)/y;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),va)break;i.push({value:t})}return b&&d&&M!==a?i.length&&ft(i[i.length-1].value,a,Go(a,_,t))?i[i.length-1].value=a:i.push({value:a}):b&&M!==a||i.push({value:M}),i}function Go(t,e,{horizontal:i,minRotation:s}){const n=bt(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}class Zo extends qs{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return I(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=ut(s),e=ut(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=Ko({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&mt(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Kt(t,this.chart.options.locale,this.options.ticks.format)}}class Jo extends Zo{static id="linear";static defaults={ticks:{callback:Zt.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=V(t)?t:0,this.max=V(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=bt(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const Qo=t=>Math.floor(dt(t)),ta=(t,e)=>Math.pow(10,Qo(t)+e);function ea(t){return 1===t/Math.pow(10,Qo(t))}function ia(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function sa(t,{min:e,max:i}){e=B(t.min,e);const s=[],n=Qo(e);let o=function(t,e){let i=Qo(e-t);for(;ia(t,e,i)>10;)i++;for(;ia(t,e,i)<10;)i--;return Math.min(i,Qo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const r=Math.pow(10,o),h=n>o?Math.pow(10,n):0,l=Math.round((e-h)*a)/a,c=Math.floor((e-h)/r/10)*r*10;let d=Math.floor((l-c)/Math.pow(10,o)),u=B(t.min,Math.round((h+c+d*Math.pow(10,o))*a)/a);for(;u=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((h+c+d*Math.pow(10,o))*a)/a;const f=B(t.max,u);return s.push({value:f,major:ea(f),significand:d}),s}class na extends qs{static id="logarithmic";static defaults={ticks:{callback:Zt.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=Zo.prototype.parse.apply(this,[t,e]);if(0!==i)return V(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=V(t)?Math.max(0,t):null,this.max=V(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!V(this._userMin)&&(this.min=t===ta(this.min,0)?ta(this.min,-1):ta(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(ta(i,-1)),o(ta(s,1)))),i<=0&&n(ta(s,-1)),s<=0&&o(ta(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=sa({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&mt(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":Kt(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=dt(t),this._valueRange=dt(this.max)-dt(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(dt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function oa(t){const e=t.ticks;if(e.display&&t.display){const t=Pe(e.backdropPadding);return W(e.font&&e.font.size,se.font.size)+t.height}return 0}function aa(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function ra(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,a=t.options.pointLabels,r=a.centerPointLabels?st/o:0;for(let d=0;de.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(h=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+h))}function la(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=i,h=t.getPointPosition(e,s+n+a,o),l=Math.round(xt(wt(h.angle+ht))),c=function(t,e,i){90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e);return t}(h.y,r.h,l),d=function(t){if(0===t||180===t)return"center";if(t<180)return"left";return"right"}(l),u=function(t,e,i){"right"===i?t-=e:"center"===i&&(t-=e/2);return t}(h.x,r.w,d);return{visible:!0,x:h.x,y:c,textAlign:d,left:u,top:c,right:u+r.w,bottom:c+r.h}}function ca(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;return!(ce({x:i,y:s},e)||ce({x:i,y:o},e)||ce({x:n,y:s},e)||ce({x:n,y:o},e))}function da(t,e,i){const{left:s,top:n,right:o,bottom:a}=i,{backdropColor:r}=e;if(!I(r)){const i=Se(e.borderRadius),h=Pe(e.backdropPadding);t.fillStyle=r;const l=s-h.left,c=n-h.top,d=o-s+h.width,u=a-n+h.height;Object.values(i).some((t=>0!==t))?(t.beginPath(),xe(t,{x:l,y:c,w:d,h:u,radius:i}),t.fill()):t.fillRect(l,c,d,u)}}function ua(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,nt);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=Pe(oa(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=V(t)&&!isNaN(t)?t:0,this.max=V(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/oa(this.options))}generateTickLabels(t){Zo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=H(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?ra(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return wt(t*(nt/(this._pointLabels.length||1))+bt(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(I(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(I(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const o=s.setContext(t.getPointLabelContext(n));da(i,o,e);const a=De(o.font),{x:r,y:h,textAlign:l}=e;be(i,t._pointLabels[n],r,h+a.lineHeight/2,a,{color:o.color,textAlign:l,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),h=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:h}=e;!a&&!s||!r||!h||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=h,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),ua(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,h)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),h=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(h.x,h.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),h=De(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=h.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Pe(r.backdropPadding);t.fillRect(-o/2-e.left,-n-h.size/2-e.top,o+e.width,h.size+e.height)}be(t,s.label,0,-n,h,{color:r.color,strokeColor:r.textStrokeColor,strokeWidth:r.textStrokeWidth})})),t.restore()}drawTitle(){}}const ga={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},pa=Object.keys(ga);function ma(t,e){return t-e}function ba(t,e){if(I(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:o}=t._parseOpts;let a=e;return"function"==typeof s&&(a=s(a)),V(a)||(a="string"==typeof s?i.parse(a,s):i.parse(a)),null===a?null:(n&&(a="week"!==n||!pt(o)&&!0!==o?i.startOf(a,n):i.startOf(a,"isoWeek",o)),+a)}function xa(t,e,i,s){const n=pa.length;for(let o=pa.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function ya(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[h].major=!0);return e}(t,s,n,i):s}class va extends qs{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new ts(t.adapters.date);s.init(e),K(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:ba(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||r(this.getMinMax(!1))),s=V(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=V(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=function(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n=pa.indexOf(i);o--){const i=pa[o];if(ga[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return pa[i?pa.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=pa.indexOf(t)+1,i=pa.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=St(s,0,o),n=St(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||xa(n.minUnit,e,i,this._getLabelCapacity(e)),a=W(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=pt(r)||!0===r,l={};let c,d,u=e;if(h&&(u=+t.startOf(u,"isoWeek",r)),u=+t.startOf(u,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const f="data"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;c+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return H(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,h=this._majorUnit,l=r&&a[r],c=h&&a[h],d=i[e],u=h&&c&&d&&d.major;return this._adapter.format(t,s||(u?c:l))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[h].pos&&({lo:r,hi:h}=Ct(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[h])):(e>=t[r].time&&e<=t[h].time&&({lo:r,hi:h}=Ct(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[h]));const l=n-s;return l?o+(a-o)*(e-s)/l:o}var wa=Object.freeze({__proto__:null,CategoryScale:class extends qs{static id="category";static defaults={ticks:{callback:qo}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(I(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:St(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:Xo(i,t,W(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return qo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:Jo,LogarithmicScale:na,RadialLinearScale:fa,TimeScale:va,TimeSeriesScale:class extends va{static id="timeseries";static defaults=va.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Ma(e,this.min),this._tableRange=Ma(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,h,l;for(o=0,a=t.length;o=e&&h<=i&&s.push(h);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot-e))}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(Ma(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return Ma(this._table,i*this._tableRange+this._minPos,!0)}}});const ka=[Zi,qn,Uo,wa];Pn.register(...ka);window.imagify=window.imagify||{},window.imagify.Color=eo,window.imagify.Chart=Pn}},t=>{var e;e="./chart.js",t(t.s=e)}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/admin/js/runtime.js b/wp/wp-content/plugins/imagify/assets/admin/js/runtime.js new file mode 100644 index 00000000..587e2c8c --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/admin/js/runtime.js @@ -0,0 +1 @@ +(()=>{"use strict";var r,e={},o={};function t(r){var n=o[r];if(void 0!==n)return n.exports;var s=o[r]={exports:{}};return e[r](s,s.exports,t),s.exports}t.m=e,r=[],t.O=(e,o,n,s)=>{if(!o){var a=1/0;for(u=0;u=s)&&Object.keys(t.O).every((r=>t.O[r](o[f])))?o.splice(f--,1):(i=!1,s0&&r[u-1][2]>s;u--)r[u]=r[u-1];r[u]=[o,n,s]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={666:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var n,s,[a,i,f]=o,l=0;if(a.some((e=>0!==r[e]))){for(n in i)t.o(i,n)&&(t.m[n]=i[n]);if(f)var u=f(t)}for(e&&e(o);l p { + color: #FFF; +} +#wp-admin-bar-imagify-profile [class^="imagify-bar-"] { + position: relative; + height: 1.5em; + width: 100%; + background: #60758D; + color: #FFF; + font-size: 10px; +} +#wp-admin-bar-imagify-profile .imagify-progress { + height: 1.5em; + font-size: 1em; +} +.imagify-progress { + transition: width .3s; +} +.imagify-bar-positive .imagify-progress { + background: #8CC152; +} +.imagify-bar-positive .imagify-barnb { + color: #8CC152; +} +.imagify-bar-negative .imagify-progress { + background: #73818C; +} +.imagify-bar-negative .imagify-barnb { + color: #73818C; +} +.imagify-bar-neutral .imagify-progress { + background: #F5A623; +} +.imagify-space-left .imagify-bar-negative .imagify-progress { + background: #D0021B; +} + +#wpadminbar #wp-admin-bar-imagify-profile * { + line-height: 1.5; + white-space: initial; +} +#wpadminbar #wp-admin-bar-imagify .ab-submenu { + padding-bottom: 0; +} +#wpadminbar #wp-admin-bar-imagify-profile .ab-item { + height: auto; + padding: 0 13px; +} +#wpadminbar #wp-admin-bar-imagify-profile { + min-width: 200px; + padding: 15px 0 10px; + margin-top: 0.7em; + background: #222; +} +#wp-admin-bar-imagify .dashicons { + font-family: "dashicons"; + font-size: 18px; + vertical-align: middle; + margin: 0 5px 0 0; +} +#wp-admin-bar-imagify .button-text { + display: inline-block; + vertical-align: middle; +} +#wp-admin-bar-imagify .imagify-abq-row { + display: table; + width: 100%; +} +#wp-admin-bar-imagify .imagify-abq-row + .imagify-abq-row { + margin-top: .75em; +} +#wp-admin-bar-imagify .imagify-abq-row > * { + display: table-cell; +} +#wp-admin-bar-imagify-profile .imagify-meteo-icon { + padding-right: 7px; +} +#wp-admin-bar-imagify-profile .imagify-meteo-icon img { + width: 37px; +} +#wp-admin-bar-imagify-profile .imagify-meteo-title { + font-size: 17px; +} +#wp-admin-bar-imagify-profile .imagify-meteo-subs { + color: #72889F; +} +#wpadminbar #wp-admin-bar-imagify-profile strong { + font-weight: bold; +} +#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan, +#wpadminbar #wp-admin-bar-imagify-profile a { + padding: 0; + color: #40B1D0; +} +#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link { + display: table; +} +#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link > * { + display: table-cell; +} +#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left { + max-width: 210px; + min-width: 210px; + width: 210px; +} +#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p { + font-size: 12px; +} +#wp-admin-bar-imagify-profile .imagify-error, +#wp-admin-bar-imagify-profile .imagify-warning { + padding: 10px; + margin: 0 -13px -13px; +} +#wp-admin-bar-imagify-profile .imagify-error p + p, +#wp-admin-bar-imagify-profile .imagify-warning p + p { + margin-top: .5em; +} +#wp-admin-bar-imagify-profile .imagify-error p + p + p, +#wp-admin-bar-imagify-profile .imagify-warning p + p + p { + margin-top: 1em; +} + +#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost { + display: inline-block; + height: auto; + padding: 7px 10px; + border: 1px solid #FFF; + text-align: center; + background: transparent; + color: #FFF; + border-radius: 3px; + transition: all .275s; +} + +#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:hover, +#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:focus { + background: #FFF; + color: #888; +} + +#wpadminbar .imagify-warning * { + background: #f5a623; + color: #FFF; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); +} + + +#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar { + position:relative ; + background: #c51161; + margin: 10px -13px -10px -13px; + padding: 20px; +} + +#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar p { + color: #fff; +} + +#wp-admin-bar-imagify-profile a.imagify-upsell-admin-bar-button { + display: block; + height: auto !important; + border: 1px solid #fff; + border-radius: 5px; + color: #fff !important; + padding: 5px 10px !important; + text-align: center; + text-decoration: none; + margin-top: 10px; +} + +#wpadminbar #wp-admin-bar-imagify-profile a.imagify-upsell-dismiss { + display: inline !important; + height: auto !important; +} + +#wpadminbar #wp-admin-bar-imagify-profile .imagify-upsell-dismiss::before { + position: absolute; + top: 5px; + right: 10px; + content: "\2715"; + color: #fff; +} diff --git a/wp/wp-content/plugins/imagify/assets/css/admin-bar.min.css b/wp/wp-content/plugins/imagify/assets/css/admin-bar.min.css new file mode 100644 index 00000000..90142c9a --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/admin-bar.min.css @@ -0,0 +1 @@ +.imagify-account,.imagify-account-link{padding-right:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}.imagify-meteo-title.imagify-meteo-title{color:#fff;font-size:17px}.imagify-space-left>p{color:#fff}#wp-admin-bar-imagify-profile [class^=imagify-bar-]{position:relative;height:1.5em;width:100%;background:#60758d;color:#fff;font-size:10px}#wp-admin-bar-imagify-profile .imagify-progress{height:1.5em;font-size:1em}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8cc152}.imagify-bar-positive .imagify-barnb{color:#8cc152}.imagify-bar-negative .imagify-progress{background:#73818c}.imagify-bar-negative .imagify-barnb{color:#73818c}.imagify-bar-neutral .imagify-progress{background:#f5a623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#d0021b}#wpadminbar #wp-admin-bar-imagify-profile *{line-height:1.5;white-space:initial}#wpadminbar #wp-admin-bar-imagify .ab-submenu{padding-bottom:0}#wpadminbar #wp-admin-bar-imagify-profile .ab-item{height:auto;padding:0 13px}#wpadminbar #wp-admin-bar-imagify-profile{min-width:200px;padding:15px 0 10px;margin-top:.7em;background:#222}#wp-admin-bar-imagify .dashicons{font-family:dashicons;font-size:18px;vertical-align:middle;margin:0 5px 0 0}#wp-admin-bar-imagify .button-text{display:inline-block;vertical-align:middle}#wp-admin-bar-imagify .imagify-abq-row{display:table;width:100%}#wp-admin-bar-imagify .imagify-abq-row+.imagify-abq-row{margin-top:.75em}#wp-admin-bar-imagify .imagify-abq-row>*{display:table-cell}#wp-admin-bar-imagify-profile .imagify-meteo-icon{padding-right:7px}#wp-admin-bar-imagify-profile .imagify-meteo-icon img{width:37px}#wp-admin-bar-imagify-profile .imagify-meteo-title{font-size:17px}#wp-admin-bar-imagify-profile .imagify-meteo-subs{color:#72889f}#wpadminbar #wp-admin-bar-imagify-profile strong{font-weight:700}#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan,#wpadminbar #wp-admin-bar-imagify-profile a{padding:0;color:#40b1d0}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link{display:table}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link>*{display:table-cell}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left{max-width:210px;min-width:210px;width:210px}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p{font-size:12px}#wp-admin-bar-imagify-profile .imagify-error,#wp-admin-bar-imagify-profile .imagify-warning{padding:10px;margin:0 -13px -13px}#wp-admin-bar-imagify-profile .imagify-error p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p{margin-top:.5em}#wp-admin-bar-imagify-profile .imagify-error p+p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p+p{margin-top:1em}#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #fff;text-align:center;background:0 0;color:#fff;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:focus,#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:hover{background:#fff;color:#888}#wpadminbar .imagify-warning *{background:#f5a623;color:#fff;text-shadow:0 0 2px rgba(0,0,0,.2)}#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar{position:relative;background:#c51161;margin:10px -13px -10px -13px;padding:20px}#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar p{color:#fff}#wp-admin-bar-imagify-profile a.imagify-upsell-admin-bar-button{display:block;height:auto!important;border:1px solid #fff;border-radius:5px;color:#fff!important;padding:5px 10px!important;text-align:center;text-decoration:none;margin-top:10px}#wpadminbar #wp-admin-bar-imagify-profile a.imagify-upsell-dismiss{display:inline!important;height:auto!important}#wpadminbar #wp-admin-bar-imagify-profile .imagify-upsell-dismiss::before{position:absolute;top:5px;right:10px;content:"\2715";color:#fff} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/admin.css b/wp/wp-content/plugins/imagify/assets/css/admin.css new file mode 100644 index 00000000..21825743 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/admin.css @@ -0,0 +1,1597 @@ +/** + * == Utilities Classes + */ + +/* Util: Flexbox */ +.imagify-flex { + display: flex; +} +.imagify-vcenter { + align-items: center; +} +.imagify-noshrink { + flex-shrink: 0; +} +.imagify-nogrow { + flex-grow: 0; +} + +/* Util: dimension */ +.imagify-wauto { + width: auto; +} +.imagify-hauto { + height: auto; +} +.imagify-full-width { + width: 100%; +} + +/* Util: float */ +.imagify-start { + float: left; +} +.imagify-end { + float: right; +} + +/* Util: text-align */ +.imagify-txt-start.imagify-txt-start.imagify-txt-start { + text-align: left; +} +.imagify-txt-center.imagify-txt-center.imagify-txt-center { + text-align: center; +} +.imagify-txt-end.imagify-txt-end.imagify-txt-end { + text-align: right; +} + +/* Util: margin/padding */ +.imagify-mt0.imagify-mt0 { + margin-top: 0; +} +.imagify-mt1.imagify-mt1 { + margin-top: 1em; +} +.imagify-mt2.imagify-mt2 { + margin-top: 2em; +} +.imagify-mt3.imagify-mt3 { + margin-top: 3em; +} +.imagify-mb0.imagify-mb0 { + margin-bottom: 0; +} +.imagify-mb1.imagify-mb1 { + margin-bottom: 1em; +} +.imagify-mr1.imagify-mr1 { + margin-right: 1em; +} +.imagify-ml2.imagify-ml2 { + margin-left: 2em; +} +.imagify-mr2.imagify-mr2 { + margin-right: 2em; +} + +.imagify-pl0.imagify-pl0.imagify-pl0 { + padding-left: 0; +} +.imagify-pb0.imagify-pb0 { + padding-bottom: 0; +} +.imagify-pr1.imagify-pr1 { + padding-right: 1em; +} +.imagify-pr2.imagify-pr2 { + padding-right: 2em; +} + +/* Util: Overflow */ +.imagify-oh { + overflow: hidden; +} +.imagify-clear { + clear: both; +} +.imagify-clearfix:after, +.imagify-inline-options:after, +.imagify-settings-main-content:after, +.imagify-settings-section:after { + content: ""; + display: table; + width: 100%; + clear: both; +} +.imagify-setting-optim-level .imagify-inline-options:after { + display: none; +} + +/* Util: Dividers */ +.imagify-divider { + height: 1px; + margin: 20px 0; + background: #D2D3D6; +} +.imagify-pipe { + display: inline-block; + margin: 0 .75em; + vertical-align: middle; + height: 15px; + width: 1px; + background: #979797; +} + +/* Titles */ +.imagify-h3-like.imagify-h3-like.imagify-h3-like { + margin-bottom: 0; + font-size: 19px; + font-weight: 500; + color: #1F2332; +} +.imagify-h4-like.imagify-h4-like.imagify-h4-like { + font-size: 14px; + font-weight: bold; + color: #2E3243; +} + +/* Default counter */ +.imagify-count.imagify-count { + counter-reset: num; +} +.imagify-count .imagify-count-title { + font-weight: bold; +} +.imagify-default-settings { + color: #73818c; + font-weight: normal; +} +.imagify-count .imagify-count-title:before { + counter-increment: num 1; + content: counter(num) ". "; +} + +/* List counter */ +.imagify-count-list { + counter-reset: listcount; +} +.imagify-count-list li { + display: flex; + align-items: center; +} +.imagify-count-list li + li { + margin-top: .5em; +} +.imagify-count-list li:before { + display: flex; + flex-basis: 24px; + flex-shrink: 0; + flex-grow: 0; + align-items: center; + justify-content: center; + margin-right: 16px; + border: 2px solid #40b1d0; + width: 24px; + height: 24px; + counter-increment: listcount 1; + content: counter(listcount); + color: #40b1d0; + border-radius: 50%; +} + +/* Table layout */ +.imagify-table { + display: table; + width: 100%; +} +.imagify-cell { + display: table-cell; + padding: 10px; + vertical-align: top; +} +.imagify-cell.va-top, +.va-top .imagify-cell { + vertical-align: top; +} + +.imagify-bulk-submit .imagify-cell { + padding-top: 0; +} + +/* When an "Imagify" modal is open in a page */ +body.imagify-modal-is-open { + overflow: hidden; +} + +/* Loader/Spinner */ +.imagify-spinner { + display: inline-block; + width: 20px; + height: 20px; + margin-right: 5px; + vertical-align: middle; + background: rgba(0, 0, 0, 0) url("../images/spinner.gif") no-repeat scroll 0 0 / 20px 20px; + opacity: 0.7; +} +.spinner.imagify-hidden { + width: 0; + margin: 4px 0 0 0; +} + +/* Some basic colors */ +.imagify-primary.imagify-primary.imagify-primary { + color: #40b1d0; +} +.imagify-secondary.imagify-secondary.imagify-secondary, +.imagify-valid { + color: #8BC34A; +} + +/* Informations in column (media popin, media details) */ +.misc-pub-section.misc-pub-imagify h4 { + font-size: 14px; + margin-top: 5px; + margin-bottom: 0; +} + +/* Doughnut */ +.imagify-chart { + position: relative; + top: 1px; + display: inline-block; + vertical-align: middle; +} +.imagify-chart-container { + position: relative; + display: inline-block; + margin-right: 5px; +} +.imagify-chart-container canvas { + display: block; +} + +/** + * + * == Settings page + * + */ + + +/* Basic HTML elements for Options and Bulk pages */ +.imagify-settings a, +.imagify-settings .button, +.imagify-settings input, +.imagify-welcome a, +.imagify-welcome .button, +.imagify-weolcome input { + -webkit-transition: all .275s; + transition: all .275s; +} +.imagify-settings a { + color: #40b1d0; +} + +.imagify-settings, +.imagify-settings p, +.imagify-settings th { + color: #5F758E; +} + +/* Buttons */ +.imagify-main-content .button, +.imagify-settings-section .button, +.imagify-welcome .button, +.imagify-notice .button, +.imagify-button.imagify-button, +.imagify-button-primary.imagify-button-primary, +.imagify-button-secondary.imagify-button-secondary { + height: auto; + padding: 11px 22px; + border: 0 none; + font-size: 14px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.01em; + word-spacing: 0.01em; + box-shadow: 0 3px 0 rgba(0, 0, 0, .15); + border-radius: 3px; + cursor: pointer; + transition: all .275s; +} + +.button-primary.button-mini { + padding: 2px 10px; +} +.imagify-settings .button.button-mini-flat { + padding: 3px 6px 5px; + font-size: 12px; + box-shadow: none!important; + line-height: 1.2; +} +.imagify-settings .button.button-mini-flat:hover, +.imagify-settings .button.button-mini-flat:focus { + box-shadow: none!important; +} + +.imagify-title .button-ghost.button-ghost, +.imagify-button-ghost.imagify-button-ghost { + padding: 2px 9px; + border: 1px solid #40B1D0; + font-size: 12px; + font-weight: normal; + color: #40B1D0; + background: transparent; + box-shadow: none; +} +.imagify-title .button-ghost.button-ghost:hover, +.imagify-title .button-ghost.button-ghost:focus, +.imagify-button-ghost.imagify-button-ghost:hover, +.imagify-button-ghost.imagify-button-ghost:focus { + border-color: transparent; + color: #000; + background: #40B1D0; +} +.imagify-button-ghost.imagify-button-ghost:hover, +.imagify-button-ghost.imagify-button-ghost:focus { + color: #FFF; +} +.imagify-button-medium.imagify-button-medium { + text-transform: uppercase; + letter-spacing: 0.1em; + padding: 3px 10px; + font-weight: bold; +} +.imagify-button-medium.imagify-button-ghost { + border-width: 2px; +} +[class*="imagify-"] .button .dashicons { + margin-right: 5px; + vertical-align: middle; +} + +.imagify-settings .button-primary.button-primary, +.imagify-welcome .button-primary.button-primary, +.imagify-button-primary.imagify-button-primary { + background: #40B1D0; + color: #FFF; + box-shadow: 0 3px 0 rgba(51, 142, 166, 1); + text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799!important; +} +.imagify-button-secondary.imagify-button-secondary { + background: #8BC34A; + color: #FFF; + box-shadow: 0 3px 0 #6F9C3B; + text-shadow: 0 -1px 1px #6F9C3B, 1px 0 1px #6F9C3B, 0 1px 1px #6F9C3B!important; +} +.imagify-settings .button-primary:hover, +.imagify-settings .button-primary:focus, +.imagify-welcome .button-primary:hover, +.imagify-welcome .button-primary:focus, +.imagify-button-primary.imagify-button-primary:hover, +.imagify-button-primary.imagify-button-primary:focus { + background: rgb(51, 142, 166); + box-shadow: 0 3px 0 rgb(31, 122, 146); +} +.imagify-button-secondary.imagify-button-secondary:hover, +.imagify-button-secondary.imagify-button-secondary:focus { + background: #6F9C3B; + color: #FFF; +} + +.imagify-button-light.imagify-button-light { + background: #FFF; + color: #4a4a4a; + box-shadow: 0 2px 0 rgba(0, 0, 0, .2); +} +.imagify-block-secondary .imagify-button-light.imagify-button-light { + color: #6F9C3B; +} +.imagify-button-light.imagify-button-light:hover, +.imagify-button-light.imagify-button-light:focus { + color: #FFF; + background: rgba(0, 0, 0, .2); +} + +/* Buttons clean */ +.button.imagify-button-clean, +.imagify-button-clean { + padding: 0; + background: transparent; + box-shadow: none; +} +.imagify-button-clean .dashicons-plus { + width: 32px; + height: 25px; +} +.imagify-button-clean .dashicons-plus:before { + display: flex; + align-items: center; + justify-content: center; + width: 25px; + height: 22px; + margin-left: 2px; + padding-top: 3px; + font-size: 17px; + background: #40B1D0; + color: #FFF; + transition: all .275s; +} +.button.imagify-button-clean:hover, +.button.imagify-button-clean:focus, +.button.imagify-button-clean:active, +.button.imagify-button-clean[disabled] { + background: transparent!important; + color: #343A49; + box-shadow: none; +} +.button.imagify-button-clean:hover .dashicons-plus:before, +.button.imagify-button-clean:focus .dashicons-plus:before { + background: #343A49; +} + +/* Buttons link-like */ +button.imagify-link-like { + border: 0; + padding: 0; + color: inherit; + text-decoration: underline; + font-size: 13px; + box-shadow: none; + background: transparent; + cursor: pointer; +} + +/* Modifier */ +.imagify-section-positive .imagify-button-light { + color: #709A41; +} +.imagify-button.imagify-button-big { + font-size: 15px; + padding: 11px 30px; +} +.imagify-button-big .dashicons { + font-size: 1.45em; + margin-right: 6px; + margin-left: -4px; +} + +.imagify-settings .button .dashicons, +.imagify-welcome .button .dashicons, +.imagify-notice .button .dashicons, +.imagify-button.imagify-button .dashicons, +.imagify-button-primary.imagify-button-primary .dashicons, +.imagify-button-secondary.imagify-button-secondary .dashicons { + vertical-align: middle; +} + +[class*="imagify-"] .button-text { + display: inline-block; + vertical-align: middle; +} + +/* Exception in Media edition page and post Edition pages (insert media popin) */ +.wp_attachment_image .imagify-button-primary, +.media-frame-content .imagify-button-primary { + padding: 0 10px 1px; + margin: 0 5px 2px 0; + font-size: 13px; + line-height: 26px; + box-shadow: 0 3px 0 rgba(51, 142, 166, 1); +} +.wp_attachment_image .imagify-button-primary { + float: left; +} + +/** + * == Header & Subheader & Sections + * + * (options, Welcome Notice, Bulk) + */ +.imagify-title.imagify-title { + position: relative; + padding: 10px 30px; + font-size: 23px; + background: #1F2332; + color: #FFF; +} +.imagify-welcome .imagify-logo { + opacity: 1; +} +.imagify-welcome .imagify-title { + display: flex; + padding: 20px 30px; +} +.imagify-settings .imagify-title { /* (options and bulk) */ + display: flex; + justify-content: space-between; + align-items: center; +} +.imagify-settings .imagify-logo-block { + display: flex; + align-items: center; + flex-shrink: 0; + flex-grow: 0; + padding: 0; + margin-right: 35px; + color: inherit; +} +.imagify-logo-block sup { + color: #1F2332; +} +.imagify-settings .imagify-title + .imagify-notice { + margin: 0; + border-right: 1px solid #D9D9D9; + padding-top: 15px; + padding-bottom: 15px; +} +.imagify-title .title-text { + font-size: 28px; + font-weight: bold; + color: #FFF; +} +.imagify-lb-icon { + padding-right: 18px; +} +.imagify-lb-text img { + margin-bottom: .15em; +} +.imagify-lb-text { + font-size: 23px; + font-weight: bold; + color: #FFF; +} +.imagify-logo { + display: block; + vertical-align: top; + opacity: .4; +} +.imagify-sub-header, +.imagify-sub-title.imagify-sub-title, /* heavier is better */ +.imagify-settings div.submit, +.imagify-section { + margin: 0; + padding: 20px; + background: #F2F5F7; +} +.imagify-sub-title.imagify-sub-title, +.imagify-section-positive { + padding-left: 40px; +} +.imagify-section-positive { + background: #8cc152; + color: #FFF; +} +.imagify-section-positive p { + color: #FFF +} +.imagify-section-gray { + background: #D9E4EB; +} +.imagify-section-gray .imagify-count-title { + color: #4a4a4a; +} +.imagify-section p:first-child { + margin-top: 0; +} +.imagify-section p:last-child { + margin-bottom: 0; +} + +/* Documentation link */ +.imagify-settings .imagify-documentation-link-box { + display: flex; + padding: 12px 13px 14px; + border: 1px solid #40b1d0; + color: #E5EBEF; + border-radius: 3px; +} +.imagify-documentation-link-icon { + width: 23px; + height: 31px; + font-size: 2.6em; + margin-right: 15px; + line-height: 1.3; +} +.imagify-documentation-link-box span { + font-size: 12px; +} +.imagify-documentation-link-box a { + font-weight: bold; +} + +@media (max-width: 1120px) { + .imagify-settings .imagify-title { + flex-wrap: wrap; + } +} + +.imagify-settings-section { + padding: 10px 20px; +} +.imagify-account-info-col .imagify-settings-section { + padding-right: 0; +} +.imagify-settings-main-content, +.imagify-welcome .imagify-settings-section { + border: 1px solid #D9D9D9; + border-top-width: 0; + background: #FFF; +} + +.imagify-settings-main-content { + padding-bottom: 20px; +} +.imagify-settings-main-content p, +.imagify-settings-main-content .imagify-setting-line { + font-size: 14px; + line-height: 1.5; +} + +.imagify-settings-main-content .code { + max-height: 10em; + padding: 3px 5px 2px 5px; + overflow: auto; + background: #EAEAEA; + background: rgba(0,0,0,.07); +} + +.imagify-settings-main-content + .imagify-settings-main-content { + margin-top: 20px; + border-top-width: 1px; +} + +.imagify-br { + line-height: 2; +} + +/* New to imagify, title */ +p.imagify-section-title.imagify-section-title { + font-size: 20px; + margin-top: -.3em; + margin-bottom: -.6em; +} + +/** + * == Rating (Notice + Settings) + */ +.imagify-rate-us.imagify-rate-us { + text-align: right; + margin: -1em -2.4em -1em 0; + color: #FFF; +} +.imagify-rate-us a { + color: #40B1D0; +} +.imagify-rate-us .stars { + display: inline-block; + margin: 2px 0 0 10px; + text-decoration: none; + letter-spacing: .2em; + vertical-align: -1px; +} +.imagify-rate-us .stars .dashicons:before { + font-size: 18px; +} +.imagify-rate-us a:hover, +.imagify-rate-us a:focus { + color: #FEE102; +} +@media (max-width: 1220px) { + .imagify-rate-us.imagify-rate-us { + position: static; + margin-bottom: 0; + text-align: left; + } + .imagify-rate-us.imagify-rate-us br { + display: none; + } + .imagify-rate-us .stars { + display: block; + margin-left: 0; + } +} + +/** + * == Messages & infos + */ +.imagify-important { + color: #F5A623; +} +.imagify-success, +.imagify-settings .imagify-success { + color: #8BC34A; +} +.imagify-info, +.imagify-info a { + color: #7A8996; + font-size: 12px; +} +.imagify-info { + position: relative; + display: inline-block; + padding-left: 25px; +} +.imagify-info .dashicons { + position: absolute; + left: 0; top: 0; + color: #40B1D0; +} + +/* Custom checkboxes in CSS */ +.imagify-settings.imagify-settings [type="checkbox"]:not(:checked), +.imagify-settings.imagify-settings [type="checkbox"]:checked, +.imagify-checkbox.imagify-checkbox:not(:checked), +.imagify-checkbox.imagify-checkbox:checked { + position: absolute; + opacity: 0.01; +} +.imagify-settings.imagify-settings [type="checkbox"]:not(:checked):focus, +.imagify-settings.imagify-settings [type="checkbox"]:checked:focus, +.imagify-checkbox.imagify-checkbox:not(:checked):focus, +.imagify-checkbox.imagify-checkbox:checked:focus { + box-shadow: none!important; /* system value to override */ + outline: none!important; + border: 0 none!important; +} + +.imagify-settings [type="checkbox"]:not(:checked) + label, +.imagify-settings [type="checkbox"]:checked + label, +.imagify-checkbox.imagify-checkbox:not(:checked) + label, +.imagify-checkbox.imagify-checkbox:checked + label { + position: relative; + display: flex; + align-items: center; + min-height: 24px; + padding-left: 40px; + cursor: pointer; + font-size: 14px; + font-weight: bold; + color: #2E3243; +} + +/* checkbox aspect */ +.imagify-settings [type="checkbox"]:not(:checked) + label:before, +.imagify-settings [type="checkbox"]:checked + label:before, +.imagify-checkbox.imagify-checkbox:not(:checked) + label:before, +.imagify-checkbox.imagify-checkbox:checked + label:before { + content: ''; + position: absolute; + left: 0; top: 0; + width: 22px; height: 22px; + border: 2px solid #8BA6B4; + background: #FFFFFF; + border-radius: 3px; +} +/* checked mark aspect */ +.imagify-settings [type="checkbox"]:not(:checked) + label:after, +.imagify-settings [type="checkbox"]:checked + label:after, +.imagify-checkbox.imagify-checkbox:not(:checked) + label:after, +.imagify-checkbox.imagify-checkbox:checked + label:after { + content: "✓"; + position: absolute; + font-size: 1.4em; + top: -2px; left: 4.5px; + color: #8BA6B4; + font-weight: normal; + -webkit-transition: all .2s; + -moz-transition: all .2s; + -ms-transition: all .2s; + transition: all .2s; +} +/* disabled aspect */ +.imagify-settings [type="checkbox"][disabled]:not(:checked) + label:before, +.imagify-settings [type="checkbox"][disabled]:checked + label:before, +.imagify-checkbox.imagify-checkbox[disabled]:not(:checked) + label:before, +.imagify-checkbox.imagify-checkbox[disabled]:checked + label:before { + border-color: #ccc; + background: #ddd; +} +/* checked mark aspect changes */ +.imagify-settings [type="checkbox"]:not(:checked) + label:after, +.imagify-checkbox.imagify-checkbox:not(:checked) + label:after { + opacity: 0; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); +} +.imagify-settings [type="checkbox"]:checked + label:after, +.imagify-checkbox.imagify-checkbox:checked + label:after { + opacity: 1; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + +/* medium version */ +.medium.imagify-checkbox:not(:checked) + label:before, +.medium.imagify-checkbox:checked + label:before { + width: 22px; + height: 22px; + border-width: 1.5px; + border-radius: 2px; + margin-top: 0; +} +.medium.imagify-checkbox:not(:checked) + label:after, +.medium.imagify-checkbox:checked + label:after { + font-size: 1.1em; + left: -17px; + top: 3px; +} + +/* mini version */ +.imagify-settings .mini[type="checkbox"]:not(:checked) + label:before, +.imagify-settings .mini[type="checkbox"]:checked + label:before, +.mini.imagify-checkbox:not(:checked) + label:before, +.mini.imagify-checkbox:checked + label:before { + width: 15px; + height: 15px; + border-width: 1px; + border-radius: 2px; + margin-top: 0; +} +.imagify-settings .mini[type="checkbox"]:not(:checked) + label:after, +.imagify-settings .mini[type="checkbox"]:checked + label:after, +.mini.imagify-checkbox:not(:checked) + label:after, +.mini.imagify-checkbox:checked + label:after { + font-size: .9em; + left: -21px; + top: -0.5px; +} +/* focus aspect */ +.imagify-settings [type="checkbox"]:not(:checked):focus + label:before, +.imagify-settings [type="checkbox"]:checked:focus + label:before, +.imagify-checkbox.imagify-checkbox:not(:checked):focus + label:before, +.imagify-checkbox.imagify-checkbox:checked:focus + label:before { + border-style: dotted; + border-color: #40b1d0; +} + +/* Checkbox groups */ +.imagify-check-group { + padding-left: 2px; + margin-bottom: 0; +} +.imagify-check-group.imagify-is-scrollable { + height: 15em; + overflow-y: auto; + padding: 8px; + margin: 1.5em 0 0 -8px; + background: #F4F7F9; + border: 1px solid #D2D3D6; + border-radius: 3px; +} +.imagify-is-scrollable legend + p { + margin-top: 0; +} +.imagify-is-scrollable [type="checkbox"]:not(:checked) + label:before, +.imagify-is-scrollable [type="checkbox"]:checked + label:before { + background: #F4F7F9; +} +.imagify-settings .imagify-check-group.imagify-check-group label { + color: #338EA6; + font-weight: 500; +} + +/* Custom radio in CSS */ +.imagify-inline-options { + position: relative; + display: table; + width: 100%; + max-width: 600px; + border-collapse: collapse; +} + +.imagify-inline-options input[type="radio"]:not(:checked), +.imagify-inline-options input[type="radio"]:checked { + position: absolute; + left: 5px; top: 5px; + display: none; +} + +.imagify-inline-options input[type="radio"]:not(:checked) + label, +.imagify-inline-options input[type="radio"]:checked + label { + position: relative; + display: table-cell; + padding: 13px 10px; + text-align: center; + + font-weight: 600; + font-size: 16px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #FFF; + background: #2E3243; + box-shadow: 0 -3px 0 rgba(0, 0, 0, 0.1) inset; + z-index: 2; + -webkit-transition: all .275s; + transition: all .275s; + cursor: pointer; +} + +.imagify-inline-options input[type="radio"]:not(:checked) + label:first-of-type, +.imagify-inline-options input[type="radio"]:checked + label:first-of-type { + border-radius: 3px 0 0 3px; +} + +.imagify-inline-options input[type="radio"]:not(:checked) + label:last-of-type, +.imagify-inline-options input[type="radio"]:checked + label:last-of-type { + border-radius: 0 3px 3px 0; +} + +.imagify-inline-options input[type="radio"]:checked + label { + background: #8BC34A +} + +.imagify-inline-options input[type="radio"]:disabled + label { + background: #ccc; + color: #999; + cursor:not-allowed; +} + +.imagify-inline-options .imagify-info { + margin-top: 15px; +} + +/** + * Account information columns (Settings & Bulk) + */ +.imagify-col.imagify-col.imagify-account-info-col, +.imagify-account-info-col { + width: 380px; + max-width: 100%; + padding: 0 20px 0 0; +} +.imagify-col.imagify-col.imagify-shared-with-account-col, +.imagify-shared-with-account-col { + width: calc(100% - 380px); + padding: 0; +} + +.imagify-account-info-col .imagify-options-title { + padding: 24px 26px; + color: #FFF; + background: #1F2332; +} +.imagify-block-secondary { + padding: 26px 26px 35px; + border: 1px solid #75A345; + background: #8BC34A; + border-radius: 3px; + color: #FFF; +} +.imagify-block-secondary.imagify-block-secondary p, +.imagify-account-info-col .imagify-block-secondary.imagify-block-secondary h3 { + color: inherit; +} +.imagify-account-info-col .imagify-col-content h3:first-child { + margin-top: 0; +} +.imagify-account-info-col .imagify-col-content h3 { + font-size: 19px; +} +.imagify-account-info-col .imagify-col-content p { + margin: 1.5em 0; +} +.imagify-account-info-col .imagify-col-content p:first-child { + margin-top: 0; +} + +.imagify-user-plan-label { + float: right; + margin-top: -4px; + padding: 2px 10px; + border: 2px solid #40B1D0; + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.02em; + color: #40B1D0; + border-radius: 3px; +} + +/* Content given after remote answer, avoid "flash" effect on content */ +.imagify-user-plan-label:empty { + display: none; +} + +/** + * == Columns + */ +.imagify-columns { + overflow: hidden; + padding: 15px 0; + counter-reset: cols; +} +.imagify-columns [class^="col-"] { + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.imagify-columns .col-1-3 { + width: 33.333%; + padding-left: 28px; +} +.imagify-columns .col-2-3 { + width: 66.666%; + padding-left: 28px +} +.imagify-columns .col-1-2 { + width: 50%; + padding: 0 20px; +} + +@media (max-width: 830px) { + .imagify-columns [class^="col-"] { + float: none; + margin-bottom: 1.5em; + } + .imagify-columns .col-1-3, + .imagify-columns .col-1-2 { + width: auto; + padding: 0 28px; + clear: both; + padding-top: 1em; + } +} + +/** + * == Custom column & Metabox + */ +.column-imagify_optimized_file.column-imagify_optimized_file { + width: 300px; + text-align: center; + vertical-align: middle; +} +.column-imagify_optimized_file > * { + max-width: 21em; + margin: 0 auto; +} +@media (min-width: 1151px) and (max-width: 1800px) { + .column-imagify_optimized_file.column-imagify_optimized_file { + width: 21em; + } +} +@media (min-width: 783px) and (max-width: 1150px) { + .column-imagify_optimized_file.column-imagify_optimized_file { + width: 13em; + } + table.media .column-title .has-media-icon ~ .row-actions.row-actions { + margin-left: 0; + } +} +@media (max-width: 782px) { + table.media .column-imagify_optimized_file.column-imagify_optimized_file { + text-align: left; + } + table.media .imagify-datas-more-action, + table.media .imagify-datas-actions-links { + text-align: center; + } + table.media .column-imagify_optimized_file > *, + table.media .column-imagify_optimized_file .imagify-datas-actions-links a { + max-width: 100%; + margin-left: 0; + } +} +@media (min-width: 783px) and (max-width: 1150px), (max-width: 360px) { + table.media .imagify-hide-if-small { + position: absolute; + margin: -1px; + padding: 0; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; + word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */ + } +} +.compat-field-imagify .label { + vertical-align: top; +} +.compat-field-imagify ul.imagify-datas-list { + margin-top: 7px; + font-size: 11px; +} +ul.imagify-datas-list.imagify-datas-list { + margin: 0 auto; + color: #555; +} +ul.imagify-datas-list .big { + font-size: 12px; + color: #40B1D0; +} +.imagify-data-item { + overflow: hidden; +} +li.imagify-data-item { + clear: both; + margin-bottom: 2px; +} +ul.imagify-datas-list .imagify-data-item span.data, +ul.imagify-datas-list .imagify-data-item strong { + float: left; + width: 38%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +ul.imagify-datas-list .imagify-data-item span.data { + width: 62%; + padding-right: 5px; + text-align: left; +} +.compat-field-imagify .imagify-datas-list .imagify-data-item .data { + width: 130px; + text-align: left; + font-weight: bold; +} +ul.imagify-datas-list .imagify-data-item strong { + text-align: left; + padding-left: 5px; +} +.media-sidebar .imagify-datas-list .imagify-data-item .data { + width: auto; + float: none; +} +.media-sidebar .imagify-datas-list .imagify-data-item strong { + display: inline-block; + width: auto; + float: none; +} +.media-sidebar .imagify-datas-list .imagify-data-item .imagify-chart { + float: left; +} +.imagify-datas-more-action.imagify-datas-more-action { + margin: .4em auto; + background: linear-gradient(to bottom, transparent, transparent 49%, rgba(0,0,0,.075) 50%, rgba(0,0,0,.075) 58%, transparent 58%, transparent); +} +.imagify-datas-more-action a { + display: inline-block; + padding: 0 5px; + background: #40B1D0; + color: #FFF; + text-transform: uppercase; + font-size: 9px; + font-weight: bold; + line-height: 1.9; + text-decoration: none; +} +.imagify-datas-more-action a.is-open { + background: #555; +} +.imagify-datas-more-action a.is-open .dashicons { + transform: rotate(180deg); +} +.imagify-datas-more-action a .dashicons { + font-size: 14px; + vertical-align: middle; + line-height: .8; +} +.imagify-datas-more-action a .dashicons:before { + vertical-align: middle; + line-height: 20px; +} +.imagify-datas-more-action .the-text { + display: inline-block; + vertical-align: middle; + height: auto; + line-height: inherit; +} + +ul.imagify-datas-details.imagify-datas-details { + margin: .7em auto; +} +.imagify-datas-details strong { + color: #40B1D0; +} +.imagify-datas-details .original { + color: #555; +} + +.imagify-datas-actions-links { + overflow: hidden; + border-top: 2px solid transparent; + padding-top: 5px; + font-size: 11px; +} +.nggform .imagify-datas-actions-links { + position: relative; + z-index: 2; +} +.nggform .row-actions { + z-index: 1; +} +.imagify-datas-actions-links a { + position: relative; + display: inline-block; + padding-left: 17px; + text-decoration: none; + font-weight: 600; +} +.compat-field-imagify .imagify-datas-actions-links { + max-width: 300px; +} +.misc-pub-imagify .imagify-datas-actions-links { + border-top: 2px solid #f2f2f2; + padding-bottom: 5px; +} +/* Library */ +.column-imagify_optimized_file .imagify-datas-actions-links a { + margin: 0 .7em; + padding-left: 15px; +} + +/* Media edition */ +.compat-field-imagify .imagify-datas-actions-links a, +.misc-pub-imagify .imagify-datas-actions-links a { + float: left; + width: 50%; +} +.media-sidebar .compat-field-imagify .imagify-datas-actions-links a, +.submitbox .misc-pub-imagify .imagify-datas-actions-links a { + display: block; + width: auto; + float: none; +} +.media-sidebar .compat-field-imagify .imagify-datas-actions-links br, +.submitbox .misc-pub-imagify .imagify-datas-actions-links br { + display: none; +} +.imagify-datas-actions-links a:only-child { + float: none; + width: auto; +} +.imagify-datas-details.is-open + .imagify-datas-actions-links { + border-top-color: rgba(0,0,0,.075); +} +.imagify-datas-actions-links .dashicons { + position: absolute; + left: 0; top: 4px; + width: 12px; + margin-right: 2px; + font-size: 11px; +} + +/** + * == Bulk page + */ + +.imagify-account, +.imagify-account-link { + padding-right: 15px; +} +.imagify-meteo-icon { + display: inline-block; + height: 38px; + vertical-align: middle; + margin-right: 10px; +} +.imagify-user-plan { + color: #40b1d0; +} + +.imagify-meteo-title.imagify-meteo-title { + color: #FFF; + font-size: 17px; +} +.imagify-space-left > p { + color: #FFF; +} +[class^="imagify-bar-"] { + position: relative; + height: 8px; + width: 100%; + background: #60758D; + color: #FFF; + font-size: 10px; +} + +.imagify-progress { + height: 8px; +} +.imagify-progress { + transition: width .3s; +} +.imagify-bar-positive .imagify-progress { + background: #8CC152; +} +.imagify-bar-positive .imagify-barnb { + color: #8CC152; +} +.imagify-bar-primary .imagify-progress { + background: #40B1D0; +} +.imagify-bar-primary .imagify-barnb { + color: #40B1D0; +} +.imagify-bar-negative .imagify-progress { + background: #D2D3D6; +} +.imagify-bar-negative .imagify-barnb { + color: #7A8996; +} +.imagify-bar-neutral .imagify-progress { + background: #F5A623; +} +.imagify-space-left .imagify-bar-negative .imagify-progress { + background: #C51162; +} + +.imagify-btn-ghost { + display: inline-block; + height: auto; + padding: 7px 10px; + border: 1px solid #FFF; + text-align: center; + background: transparent; + color: #FFF; + border-radius: 3px; + transition: all .275s; +} + +.imagify-btn-ghost:hover, +.imagify-btn-ghost:focus { + background: #FFF; + color: #888; +} + +/* Some Errors */ +.imagify-error { + background: #D0021B; + color: #FFF; +} +.imagify-settings-section .imagify-error { + display: inline-block; + padding: 7px 10px; + margin: 10px 0 0 45px; + border-radius: 3px; +} +.imagify-settings-section .imagify-error code { + font-weight: normal; +} +.imagify-settings-section .imagify-error.hidden { + display: none; +} +.imagify-warning { + background: #f5a623; + color: #FFF; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.2); +} + +/* Imagify Modal (is everywhere) */ +.imagify-modal { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.js .imagify-modal { + display: none; + position: fixed; + top: 0; right: 0; bottom: 0; left: 0; + background-color: #1F2332; + background-color: rgba(31,35,50,.95); + z-index: 99999; +} +.imagify-modal-content { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: relative; + width: 800px; + max-width: 95%; + max-height: 90vw; + overflow: auto; + padding: 20px 25px; + margin: 1em auto; + background: #FFF; + box-shadow: 1px 1px 4px rgba(0,0,0,.7); + border-radius: 3px; +} +.imagify-modal-loading .imagify-modal-content{ + overflow: hidden; +} +#imagify-visual-comparison .imagify-modal-content, +.imagify-visual-comparison .imagify-modal-content { + max-width: 1400px; + background: transparent; + padding: 5px; + box-shadow: none; + border-radius: 0; +} +.imagify-modal .h2 { + margin: .5em 0; + color: #8ba6b4; + font-weight: normal; + font-size: 24px; + letter-spacing: 0.075em; + text-align: center; +} +.imagify-modal .h3 { + color: #40b1d0; + font-weight: normal; + font-size: 18px; + letter-spacing: 0.075em; + text-align: center; +} +.imagify-modal .close-btn { + display: none; + visibility: hidden; + position: absolute; + right: 20px; top: 20px; + font-size: 1.2em; + border: 0; + background: transparent none; + border-radius: 0; + cursor: pointer; +} +.imagify-modal .close-btn i { + margin-left: -2px; +} +.imagify-modal .close-btn:hover, +.imagify-modal .close-btn:focus { + color: #40b1d0; +} +.js .imagify-modal .close-btn { + display: block; + visibility: visible; + z-index: 12; +} + +/* Attachments specifics */ +.wp_attachment_image #imagify-visual-comparison .imagify-modal-content, +.imagify-visual-comparison .imagify-modal-content { + padding-top: 40px; +} + +/* Col, behavior depending on parent */ +.imagify-col { + float: left; + width: 50%; + box-sizing: border-box; + -webkit-flex-basis: 50%; + -ms-flex-preferred-size: 50%; + flex-basis: 50%; +} +.imagify-col { + padding-right: 20px; +} +.imagify-col + .imagify-col { + padding-right: 0; + padding-left: 20px; +} + +.imagify-col:target { + animation: hello 1s 3 linear backwards; +} + +@keyframes hello { + 0%, 100% { + background: #FFF; + } + 50% { + background: #F4F7F9; + } +} +@media (max-width: 730px) { + .imagify-settings .imagify-documentation-link-box{ + margin-top: 2em; + } +} + +@media (max-width: 782px) { + input[type="radio"], input[type="checkbox"] { + height: 1.5625rem; + width: 1.5625rem; + margin: 1px; + } + [class*="imagify-"] .button-text{ + font-size: 13px; + } + .imagify-account-info-col .imagify-settings-section{ + padding: 0 10px; + } + .imagify-settings-section{ + padding: 10px; + } + .imagify-check-group.imagify-is-scrollable{ + margin: auto; + } + .imagify-settings-section .imagify-col, + .imagify-col.imagify-col.imagify-shared-with-account-col, + .imagify-media-lib-section .imagify-col, + .imagify-custom-folders-section .imagify-col, + .imagify-shared-with-account-col { + width:100%; + float: none; + padding-right: 0; + } + .imagify-col.imagify-col.imagify-account-info-col, + .imagify-media-lib-section .imagify-account-info-col, + .imagify-custom-folders-section .imagify-account-info-col, + .imagify-account-info-col{ + width: 100%; + float: none; + padding-left: 0; + padding-right: 0; + } + .imagify-lb-text{ + font-size: 20px; + } + .imagify-vcenter{ + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-direction: normal; + -moz-box-orient: vertical; + align-items: center; + } + .imagify-pr2.imagify-pr2{ + padding-right: 0em; + } +} + +.imagify-upsell { + position:relative; + background: #c51161; + padding: 20px 40px; +} + +.imagify-upsell p { + color: #fff !important; +} + +.imagify-upsell-button { + display: block; + background: #fff; + border-radius: 5px; + color: #c51161 !important; + font-weight: bold; + padding: 10px; + text-align: center; + text-decoration: none; + text-transform: uppercase; +} + +.imagify-upsell-arrow::after { + content: '\2192'; + font-size: large; + margin-left: 5px; + vertical-align: top; +} + +.imagify-upsell-dismiss::before { + position: absolute; + top: 5px; + right: 5px; + content: "\2715"; + color: #2e3243; + font-size: 2em; +} + +.imagify-upsell .imagify-meteo-icon { + filter: invert(100%) sepia(100%) saturate(0%) hue-rotate(104deg) brightness(103%) contrast(103%); +} + +.imagify-original-fize-size { + display: block !important; +} + +.imagify-original-fize-size .value { + padding-left: 15px !important; +} diff --git a/wp/wp-content/plugins/imagify/assets/css/admin.min.css b/wp/wp-content/plugins/imagify/assets/css/admin.min.css new file mode 100644 index 00000000..2de152d1 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/admin.min.css @@ -0,0 +1 @@ +.imagify-flex{display:-webkit-box;display:-ms-flexbox;display:flex}.imagify-vcenter{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-noshrink{-ms-flex-negative:0;flex-shrink:0}.imagify-nogrow{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.imagify-wauto{width:auto}.imagify-hauto{height:auto}.imagify-full-width{width:100%}.imagify-start{float:left}.imagify-end{float:right}.imagify-txt-start.imagify-txt-start.imagify-txt-start{text-align:left}.imagify-txt-center.imagify-txt-center.imagify-txt-center{text-align:center}.imagify-txt-end.imagify-txt-end.imagify-txt-end{text-align:right}.imagify-mt0.imagify-mt0{margin-top:0}.imagify-mt1.imagify-mt1{margin-top:1em}.imagify-mt2.imagify-mt2{margin-top:2em}.imagify-mt3.imagify-mt3{margin-top:3em}.imagify-mb0.imagify-mb0{margin-bottom:0}.imagify-mb1.imagify-mb1{margin-bottom:1em}.imagify-mr1.imagify-mr1{margin-right:1em}.imagify-ml2.imagify-ml2{margin-left:2em}.imagify-mr2.imagify-mr2{margin-right:2em}.imagify-pl0.imagify-pl0.imagify-pl0{padding-left:0}.imagify-pb0.imagify-pb0{padding-bottom:0}.imagify-pr1.imagify-pr1{padding-right:1em}.imagify-pr2.imagify-pr2{padding-right:2em}.imagify-oh{overflow:hidden}.imagify-clear{clear:both}.imagify-clearfix:after,.imagify-inline-options:after,.imagify-settings-main-content:after,.imagify-settings-section:after{content:"";display:table;width:100%;clear:both}.imagify-setting-optim-level .imagify-inline-options:after{display:none}.imagify-divider{height:1px;margin:20px 0;background:#d2d3d6}.imagify-pipe{display:inline-block;margin:0 .75em;vertical-align:middle;height:15px;width:1px;background:#979797}.imagify-h3-like.imagify-h3-like.imagify-h3-like{margin-bottom:0;font-size:19px;font-weight:500;color:#1f2332}.imagify-h4-like.imagify-h4-like.imagify-h4-like{font-size:14px;font-weight:700;color:#2e3243}.imagify-count.imagify-count{counter-reset:num}.imagify-count .imagify-count-title{font-weight:700}.imagify-default-settings{color:#73818c;font-weight:400}.imagify-count .imagify-count-title:before{counter-increment:num 1;content:counter(num) ". "}.imagify-count-list{counter-reset:listcount}.imagify-count-list li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-count-list li+li{margin-top:.5em}.imagify-count-list li:before{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:24px;flex-basis:24px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:16px;border:2px solid #40b1d0;width:24px;height:24px;counter-increment:listcount 1;content:counter(listcount);color:#40b1d0;border-radius:50%}.imagify-table{display:table;width:100%}.imagify-cell{display:table-cell;padding:10px;vertical-align:top}.imagify-cell.va-top,.va-top .imagify-cell{vertical-align:top}.imagify-bulk-submit .imagify-cell{padding-top:0}body.imagify-modal-is-open{overflow:hidden}.imagify-spinner{display:inline-block;width:20px;height:20px;margin-right:5px;vertical-align:middle;background:rgba(0,0,0,0) url("../images/spinner.gif") no-repeat scroll 0 0/20px 20px;opacity:.7}.spinner.imagify-hidden{width:0;margin:4px 0 0 0}.imagify-primary.imagify-primary.imagify-primary{color:#40b1d0}.imagify-secondary.imagify-secondary.imagify-secondary,.imagify-valid{color:#8bc34a}.misc-pub-section.misc-pub-imagify h4{font-size:14px;margin-top:5px;margin-bottom:0}.imagify-chart{position:relative;top:1px;display:inline-block;vertical-align:middle}.imagify-chart-container{position:relative;display:inline-block;margin-right:5px}.imagify-chart-container canvas{display:block}.imagify-settings .button,.imagify-settings a,.imagify-settings input,.imagify-welcome .button,.imagify-welcome a,.imagify-weolcome input{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-settings a{color:#40b1d0}.imagify-settings,.imagify-settings p,.imagify-settings th{color:#5f758e}.imagify-button-primary.imagify-button-primary,.imagify-button-secondary.imagify-button-secondary,.imagify-button.imagify-button,.imagify-main-content .button,.imagify-notice .button,.imagify-settings-section .button,.imagify-welcome .button{height:auto;padding:11px 22px;border:0 none;font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.01em;word-spacing:0.01em;-webkit-box-shadow:0 3px 0 rgba(0,0,0,.15);box-shadow:0 3px 0 rgba(0,0,0,.15);border-radius:3px;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.button-primary.button-mini{padding:2px 10px}.imagify-settings .button.button-mini-flat{padding:3px 6px 5px;font-size:12px;-webkit-box-shadow:none!important;box-shadow:none!important;line-height:1.2}.imagify-settings .button.button-mini-flat:focus,.imagify-settings .button.button-mini-flat:hover{-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-button-ghost.imagify-button-ghost,.imagify-title .button-ghost.button-ghost{padding:2px 9px;border:1px solid #40b1d0;font-size:12px;font-weight:400;color:#40b1d0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover,.imagify-title .button-ghost.button-ghost:focus,.imagify-title .button-ghost.button-ghost:hover{border-color:transparent;color:#000;background:#40b1d0}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover{color:#fff}.imagify-button-medium.imagify-button-medium{text-transform:uppercase;letter-spacing:.1em;padding:3px 10px;font-weight:700}.imagify-button-medium.imagify-button-ghost{border-width:2px}[class*=imagify-] .button .dashicons{margin-right:5px;vertical-align:middle}.imagify-button-primary.imagify-button-primary,.imagify-settings .button-primary.button-primary,.imagify-welcome .button-primary.button-primary{background:#40b1d0;color:#fff;-webkit-box-shadow:0 3px 0 #338ea6;box-shadow:0 3px 0 #338ea6;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799!important}.imagify-button-secondary.imagify-button-secondary{background:#8bc34a;color:#fff;-webkit-box-shadow:0 3px 0 #6f9c3b;box-shadow:0 3px 0 #6f9c3b;text-shadow:0 -1px 1px #6f9c3b,1px 0 1px #6f9c3b,0 1px 1px #6f9c3b!important}.imagify-button-primary.imagify-button-primary:focus,.imagify-button-primary.imagify-button-primary:hover,.imagify-settings .button-primary:focus,.imagify-settings .button-primary:hover,.imagify-welcome .button-primary:focus,.imagify-welcome .button-primary:hover{background:#338ea6;-webkit-box-shadow:0 3px 0 #1f7a92;box-shadow:0 3px 0 #1f7a92}.imagify-button-secondary.imagify-button-secondary:focus,.imagify-button-secondary.imagify-button-secondary:hover{background:#6f9c3b;color:#fff}.imagify-button-light.imagify-button-light{background:#fff;color:#4a4a4a;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.2);box-shadow:0 2px 0 rgba(0,0,0,.2)}.imagify-block-secondary .imagify-button-light.imagify-button-light{color:#6f9c3b}.imagify-button-light.imagify-button-light:focus,.imagify-button-light.imagify-button-light:hover{color:#fff;background:rgba(0,0,0,.2)}.button.imagify-button-clean,.imagify-button-clean{padding:0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-clean .dashicons-plus{width:32px;height:25px}.imagify-button-clean .dashicons-plus:before{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:25px;height:22px;margin-left:2px;padding-top:3px;font-size:17px;background:#40b1d0;color:#fff;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.button.imagify-button-clean:active,.button.imagify-button-clean:focus,.button.imagify-button-clean:hover,.button.imagify-button-clean[disabled]{background:0 0!important;color:#343a49;-webkit-box-shadow:none;box-shadow:none}.button.imagify-button-clean:focus .dashicons-plus:before,.button.imagify-button-clean:hover .dashicons-plus:before{background:#343a49}button.imagify-link-like{border:0;padding:0;color:inherit;text-decoration:underline;font-size:13px;-webkit-box-shadow:none;box-shadow:none;background:0 0;cursor:pointer}.imagify-section-positive .imagify-button-light{color:#709a41}.imagify-button.imagify-button-big{font-size:15px;padding:11px 30px}.imagify-button-big .dashicons{font-size:1.45em;margin-right:6px;margin-left:-4px}.imagify-button-primary.imagify-button-primary .dashicons,.imagify-button-secondary.imagify-button-secondary .dashicons,.imagify-button.imagify-button .dashicons,.imagify-notice .button .dashicons,.imagify-settings .button .dashicons,.imagify-welcome .button .dashicons{vertical-align:middle}[class*=imagify-] .button-text{display:inline-block;vertical-align:middle}.media-frame-content .imagify-button-primary,.wp_attachment_image .imagify-button-primary{padding:0 10px 1px;margin:0 5px 2px 0;font-size:13px;line-height:26px;-webkit-box-shadow:0 3px 0 #338ea6;box-shadow:0 3px 0 #338ea6}.wp_attachment_image .imagify-button-primary{float:left}.imagify-title.imagify-title{position:relative;padding:10px 30px;font-size:23px;background:#1f2332;color:#fff}.imagify-welcome .imagify-logo{opacity:1}.imagify-welcome .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;padding:20px 30px}.imagify-settings .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-settings .imagify-logo-block{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;margin-right:35px;color:inherit}.imagify-logo-block sup{color:#1f2332}.imagify-settings .imagify-title+.imagify-notice{margin:0;border-right:1px solid #d9d9d9;padding-top:15px;padding-bottom:15px}.imagify-title .title-text{font-size:28px;font-weight:700;color:#fff}.imagify-lb-icon{padding-right:18px}.imagify-lb-text img{margin-bottom:.15em}.imagify-lb-text{font-size:23px;font-weight:700;color:#fff}.imagify-logo{display:block;vertical-align:top;opacity:.4}.imagify-section,.imagify-settings div.submit,.imagify-sub-header,.imagify-sub-title.imagify-sub-title{margin:0;padding:20px;background:#f2f5f7}.imagify-section-positive,.imagify-sub-title.imagify-sub-title{padding-left:40px}.imagify-section-positive{background:#8cc152;color:#fff}.imagify-section-positive p{color:#fff}.imagify-section-gray{background:#d9e4eb}.imagify-section-gray .imagify-count-title{color:#4a4a4a}.imagify-section p:first-child{margin-top:0}.imagify-section p:last-child{margin-bottom:0}.imagify-settings .imagify-documentation-link-box{display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 13px 14px;border:1px solid #40b1d0;color:#e5ebef;border-radius:3px}.imagify-documentation-link-icon{width:23px;height:31px;font-size:2.6em;margin-right:15px;line-height:1.3}.imagify-documentation-link-box span{font-size:12px}.imagify-documentation-link-box a{font-weight:700}@media (max-width:1120px){.imagify-settings .imagify-title{-ms-flex-wrap:wrap;flex-wrap:wrap}}.imagify-settings-section{padding:10px 20px}.imagify-account-info-col .imagify-settings-section{padding-right:0}.imagify-settings-main-content,.imagify-welcome .imagify-settings-section{border:1px solid #d9d9d9;border-top-width:0;background:#fff}.imagify-settings-main-content{padding-bottom:20px}.imagify-settings-main-content .imagify-setting-line,.imagify-settings-main-content p{font-size:14px;line-height:1.5}.imagify-settings-main-content .code{max-height:10em;padding:3px 5px 2px 5px;overflow:auto;background:#eaeaea;background:rgba(0,0,0,.07)}.imagify-settings-main-content+.imagify-settings-main-content{margin-top:20px;border-top-width:1px}.imagify-br{line-height:2}p.imagify-section-title.imagify-section-title{font-size:20px;margin-top:-.3em;margin-bottom:-.6em}.imagify-rate-us.imagify-rate-us{text-align:right;margin:-1em -2.4em -1em 0;color:#fff}.imagify-rate-us a{color:#40b1d0}.imagify-rate-us .stars{display:inline-block;margin:2px 0 0 10px;text-decoration:none;letter-spacing:.2em;vertical-align:-1px}.imagify-rate-us .stars .dashicons:before{font-size:18px}.imagify-rate-us a:focus,.imagify-rate-us a:hover{color:#fee102}@media (max-width:1220px){.imagify-rate-us.imagify-rate-us{position:static;margin-bottom:0;text-align:left}.imagify-rate-us.imagify-rate-us br{display:none}.imagify-rate-us .stars{display:block;margin-left:0}}.imagify-important{color:#f5a623}.imagify-settings .imagify-success,.imagify-success{color:#8bc34a}.imagify-info,.imagify-info a{color:#7a8996;font-size:12px}.imagify-info{position:relative;display:inline-block;padding-left:25px}.imagify-info .dashicons{position:absolute;left:0;top:0;color:#40b1d0}.imagify-checkbox.imagify-checkbox:checked,.imagify-checkbox.imagify-checkbox:not(:checked),.imagify-settings.imagify-settings [type=checkbox]:checked,.imagify-settings.imagify-settings [type=checkbox]:not(:checked){position:absolute;opacity:.01}.imagify-checkbox.imagify-checkbox:checked:focus,.imagify-checkbox.imagify-checkbox:not(:checked):focus,.imagify-settings.imagify-settings [type=checkbox]:checked:focus,.imagify-settings.imagify-settings [type=checkbox]:not(:checked):focus{-webkit-box-shadow:none!important;box-shadow:none!important;outline:0!important;border:0 none!important}.imagify-checkbox.imagify-checkbox:checked+label,.imagify-checkbox.imagify-checkbox:not(:checked)+label,.imagify-settings [type=checkbox]:checked+label,.imagify-settings [type=checkbox]:not(:checked)+label{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:24px;padding-left:40px;cursor:pointer;font-size:14px;font-weight:700;color:#2e3243}.imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-checkbox.imagify-checkbox:not(:checked)+label:before,.imagify-settings [type=checkbox]:checked+label:before,.imagify-settings [type=checkbox]:not(:checked)+label:before{content:'';position:absolute;left:0;top:0;width:22px;height:22px;border:2px solid #8ba6b4;background:#fff;border-radius:3px}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:checked+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{content:"✓";position:absolute;font-size:1.4em;top:-2px;left:4.5px;color:#8ba6b4;font-weight:400;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.imagify-checkbox.imagify-checkbox[disabled]:checked+label:before,.imagify-checkbox.imagify-checkbox[disabled]:not(:checked)+label:before,.imagify-settings [type=checkbox][disabled]:checked+label:before,.imagify-settings [type=checkbox][disabled]:not(:checked)+label:before{border-color:#ccc;background:#ddd}.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-settings [type=checkbox]:checked+label:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.medium.imagify-checkbox:checked+label:before,.medium.imagify-checkbox:not(:checked)+label:before{width:22px;height:22px;border-width:1.5px;border-radius:2px;margin-top:0}.medium.imagify-checkbox:checked+label:after,.medium.imagify-checkbox:not(:checked)+label:after{font-size:1.1em;left:-17px;top:3px}.imagify-settings .mini[type=checkbox]:checked+label:before,.imagify-settings .mini[type=checkbox]:not(:checked)+label:before,.mini.imagify-checkbox:checked+label:before,.mini.imagify-checkbox:not(:checked)+label:before{width:15px;height:15px;border-width:1px;border-radius:2px;margin-top:0}.imagify-settings .mini[type=checkbox]:checked+label:after,.imagify-settings .mini[type=checkbox]:not(:checked)+label:after,.mini.imagify-checkbox:checked+label:after,.mini.imagify-checkbox:not(:checked)+label:after{font-size:.9em;left:-21px;top:-.5px}.imagify-checkbox.imagify-checkbox:checked:focus+label:before,.imagify-checkbox.imagify-checkbox:not(:checked):focus+label:before,.imagify-settings [type=checkbox]:checked:focus+label:before,.imagify-settings [type=checkbox]:not(:checked):focus+label:before{border-style:dotted;border-color:#40b1d0}.imagify-check-group{padding-left:2px;margin-bottom:0}.imagify-check-group.imagify-is-scrollable{height:15em;overflow-y:auto;padding:8px;margin:1.5em 0 0 -8px;background:#f4f7f9;border:1px solid #d2d3d6;border-radius:3px}.imagify-is-scrollable legend+p{margin-top:0}.imagify-is-scrollable [type=checkbox]:checked+label:before,.imagify-is-scrollable [type=checkbox]:not(:checked)+label:before{background:#f4f7f9}.imagify-settings .imagify-check-group.imagify-check-group label{color:#338ea6;font-weight:500}.imagify-inline-options{position:relative;display:table;width:100%;max-width:600px;border-collapse:collapse}.imagify-inline-options input[type=radio]:checked,.imagify-inline-options input[type=radio]:not(:checked){position:absolute;left:5px;top:5px;display:none}.imagify-inline-options input[type=radio]:checked+label,.imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;display:table-cell;padding:13px 10px;text-align:center;font-weight:600;font-size:16px;text-transform:uppercase;letter-spacing:.1em;color:#fff;background:#2e3243;-webkit-box-shadow:0 -3px 0 rgba(0,0,0,.1) inset;box-shadow:0 -3px 0 rgba(0,0,0,.1) inset;z-index:2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s;cursor:pointer}.imagify-inline-options input[type=radio]:checked+label:first-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:first-of-type{border-radius:3px 0 0 3px}.imagify-inline-options input[type=radio]:checked+label:last-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:last-of-type{border-radius:0 3px 3px 0}.imagify-inline-options input[type=radio]:checked+label{background:#8bc34a}.imagify-inline-options input[type=radio]:disabled+label{background:rgba(46,50,67,.5);cursor:default}.imagify-inline-options .imagify-info{margin-top:15px}.imagify-account-info-col,.imagify-col.imagify-col.imagify-account-info-col{width:380px;max-width:100%;padding:0 20px 0 0}.imagify-col.imagify-col.imagify-shared-with-account-col,.imagify-shared-with-account-col{width:calc(100% - 380px);padding:0}.imagify-account-info-col .imagify-options-title{padding:24px 26px;color:#fff;background:#1f2332}.imagify-block-secondary{padding:26px 26px 35px;border:1px solid #75a345;background:#8bc34a;border-radius:3px;color:#fff}.imagify-account-info-col .imagify-block-secondary.imagify-block-secondary h3,.imagify-block-secondary.imagify-block-secondary p{color:inherit}.imagify-account-info-col .imagify-col-content h3:first-child{margin-top:0}.imagify-account-info-col .imagify-col-content h3{font-size:19px}.imagify-account-info-col .imagify-col-content p{margin:1.5em 0}.imagify-account-info-col .imagify-col-content p:first-child{margin-top:0}.imagify-user-plan-label{float:right;margin-top:-4px;padding:2px 10px;border:2px solid #40b1d0;font-size:14px;text-transform:uppercase;letter-spacing:.02em;color:#40b1d0;border-radius:3px}.imagify-user-plan-label:empty{display:none}.imagify-columns{overflow:hidden;padding:15px 0;counter-reset:cols}.imagify-columns [class^=col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-columns .col-1-3{width:33.333%;padding-left:28px}.imagify-columns .col-2-3{width:66.666%;padding-left:28px}.imagify-columns .col-1-2{width:50%;padding:0 20px}@media (max-width:830px){.imagify-columns [class^=col-]{float:none;margin-bottom:1.5em}.imagify-columns .col-1-2,.imagify-columns .col-1-3{width:auto;padding:0 28px;clear:both;padding-top:1em}}.column-imagify_optimized_file.column-imagify_optimized_file{width:300px;text-align:center;vertical-align:middle}.column-imagify_optimized_file>*{max-width:21em;margin:0 auto}@media (min-width:1151px) and (max-width:1800px){.column-imagify_optimized_file.column-imagify_optimized_file{width:21em}}@media (min-width:783px) and (max-width:1150px){.column-imagify_optimized_file.column-imagify_optimized_file{width:13em}table.media .column-title .has-media-icon~.row-actions.row-actions{margin-left:0}}@media (max-width:782px){table.media .column-imagify_optimized_file.column-imagify_optimized_file{text-align:left}table.media .imagify-datas-actions-links,table.media .imagify-datas-more-action{text-align:center}table.media .column-imagify_optimized_file .imagify-datas-actions-links a,table.media .column-imagify_optimized_file>*{max-width:100%;margin-left:0}}@media (min-width:783px) and (max-width:1150px),(max-width:360px){table.media .imagify-hide-if-small{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important}}.compat-field-imagify .label{vertical-align:top}.compat-field-imagify ul.imagify-datas-list{margin-top:7px;font-size:11px}ul.imagify-datas-list.imagify-datas-list{margin:0 auto;color:#555}ul.imagify-datas-list .big{font-size:12px;color:#40b1d0}.imagify-data-item{overflow:hidden}li.imagify-data-item{clear:both;margin-bottom:2px}ul.imagify-datas-list .imagify-data-item span.data,ul.imagify-datas-list .imagify-data-item strong{float:left;width:38%;-webkit-box-sizing:border-box;box-sizing:border-box}ul.imagify-datas-list .imagify-data-item span.data{width:62%;padding-right:5px;text-align:left}.compat-field-imagify .imagify-datas-list .imagify-data-item .data{width:130px;text-align:left;font-weight:700}ul.imagify-datas-list .imagify-data-item strong{text-align:left;padding-left:5px}.media-sidebar .imagify-datas-list .imagify-data-item .data{width:auto;float:none}.media-sidebar .imagify-datas-list .imagify-data-item strong{display:inline-block;width:auto;float:none}.media-sidebar .imagify-datas-list .imagify-data-item .imagify-chart{float:left}.imagify-datas-more-action.imagify-datas-more-action{margin:.4em auto;background:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(49%,transparent),color-stop(50%,rgba(0,0,0,.075)),color-stop(58%,rgba(0,0,0,.075)),color-stop(58%,transparent),to(transparent));background:-o-linear-gradient(top,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent);background:linear-gradient(to bottom,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent)}.imagify-datas-more-action a{display:inline-block;padding:0 5px;background:#40b1d0;color:#fff;text-transform:uppercase;font-size:9px;font-weight:700;line-height:1.9;text-decoration:none}.imagify-datas-more-action a.is-open{background:#555}.imagify-datas-more-action a.is-open .dashicons{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.imagify-datas-more-action a .dashicons{font-size:14px;vertical-align:middle;line-height:.8}.imagify-datas-more-action a .dashicons:before{vertical-align:middle;line-height:20px}.imagify-datas-more-action .the-text{display:inline-block;vertical-align:middle;height:auto;line-height:inherit}ul.imagify-datas-details.imagify-datas-details{margin:.7em auto}.imagify-datas-details strong{color:#40b1d0}.imagify-datas-details .original{color:#555}.imagify-datas-actions-links{overflow:hidden;border-top:2px solid transparent;padding-top:5px;font-size:11px}.nggform .imagify-datas-actions-links{position:relative;z-index:2}.nggform .row-actions{z-index:1}.imagify-datas-actions-links a{position:relative;display:inline-block;padding-left:17px;text-decoration:none;font-weight:600}.compat-field-imagify .imagify-datas-actions-links{max-width:300px}.misc-pub-imagify .imagify-datas-actions-links{border-top:2px solid #f2f2f2;padding-bottom:5px}.column-imagify_optimized_file .imagify-datas-actions-links a{margin:0 .7em;padding-left:15px}.compat-field-imagify .imagify-datas-actions-links a,.misc-pub-imagify .imagify-datas-actions-links a{float:left;width:50%}.media-sidebar .compat-field-imagify .imagify-datas-actions-links a,.submitbox .misc-pub-imagify .imagify-datas-actions-links a{display:block;width:auto;float:none}.media-sidebar .compat-field-imagify .imagify-datas-actions-links br,.submitbox .misc-pub-imagify .imagify-datas-actions-links br{display:none}.imagify-datas-actions-links a:only-child{float:none;width:auto}.imagify-datas-details.is-open+.imagify-datas-actions-links{border-top-color:rgba(0,0,0,.075)}.imagify-datas-actions-links .dashicons{position:absolute;left:0;top:4px;width:12px;margin-right:2px;font-size:11px}.imagify-account,.imagify-account-link{padding-right:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}.imagify-meteo-title.imagify-meteo-title{color:#fff;font-size:17px}.imagify-space-left>p{color:#fff}[class^=imagify-bar-]{position:relative;height:8px;width:100%;background:#60758d;color:#fff;font-size:10px}.imagify-progress{height:8px}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8cc152}.imagify-bar-positive .imagify-barnb{color:#8cc152}.imagify-bar-primary .imagify-progress{background:#40b1d0}.imagify-bar-primary .imagify-barnb{color:#40b1d0}.imagify-bar-negative .imagify-progress{background:#d2d3d6}.imagify-bar-negative .imagify-barnb{color:#7a8996}.imagify-bar-neutral .imagify-progress{background:#f5a623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#c51162}.imagify-btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #fff;text-align:center;background:0 0;color:#fff;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-btn-ghost:focus,.imagify-btn-ghost:hover{background:#fff;color:#888}.imagify-error{background:#d0021b;color:#fff}.imagify-settings-section .imagify-error{display:inline-block;padding:7px 10px;margin:10px 0 0 45px;border-radius:3px}.imagify-settings-section .imagify-error code{font-weight:400}.imagify-settings-section .imagify-error.hidden{display:none}.imagify-warning{background:#f5a623;color:#fff;text-shadow:0 0 2px rgba(0,0,0,.2)}.imagify-modal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.js .imagify-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#1f2332;background-color:rgba(31,35,50,.95);z-index:99999}.imagify-modal-content{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:800px;max-width:95%;max-height:90vw;overflow:auto;padding:20px 25px;margin:1em auto;background:#fff;-webkit-box-shadow:1px 1px 4px rgba(0,0,0,.7);box-shadow:1px 1px 4px rgba(0,0,0,.7);border-radius:3px}.imagify-modal-loading .imagify-modal-content{overflow:hidden}#imagify-visual-comparison .imagify-modal-content,.imagify-visual-comparison .imagify-modal-content{max-width:1400px;background:0 0;padding:5px;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.imagify-modal .h2{margin:.5em 0;color:#8ba6b4;font-weight:400;font-size:24px;letter-spacing:.075em;text-align:center}.imagify-modal .h3{color:#40b1d0;font-weight:400;font-size:18px;letter-spacing:.075em;text-align:center}.imagify-modal .close-btn{display:none;visibility:hidden;position:absolute;right:20px;top:20px;font-size:1.2em;border:0;background:transparent none;border-radius:0;cursor:pointer}.imagify-modal .close-btn i{margin-left:-2px}.imagify-modal .close-btn:focus,.imagify-modal .close-btn:hover{color:#40b1d0}.js .imagify-modal .close-btn{display:block;visibility:visible;z-index:12}.imagify-visual-comparison .imagify-modal-content,.wp_attachment_image #imagify-visual-comparison .imagify-modal-content{padding-top:40px}.imagify-col{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-preferred-size:50%;flex-basis:50%}.imagify-col{padding-right:20px}.imagify-col+.imagify-col{padding-right:0;padding-left:20px}.imagify-col:target{-webkit-animation:hello 1s 3 linear backwards;animation:hello 1s 3 linear backwards}@-webkit-keyframes hello{0%,100%{background:#fff}50%{background:#f4f7f9}}@keyframes hello{0%,100%{background:#fff}50%{background:#f4f7f9}}@media (max-width:730px){.imagify-settings .imagify-documentation-link-box{margin-top:2em}}@media (max-width:782px){input[type=checkbox],input[type=radio]{height:1.5625rem;width:1.5625rem;margin:1px}[class*=imagify-] .button-text{font-size:13px}.imagify-account-info-col .imagify-settings-section{padding:0 10px}.imagify-settings-section{padding:10px}.imagify-check-group.imagify-is-scrollable{margin:auto}.imagify-col.imagify-col.imagify-shared-with-account-col,.imagify-custom-folders-section .imagify-col,.imagify-media-lib-section .imagify-col,.imagify-settings-section .imagify-col,.imagify-shared-with-account-col{width:100%;float:none;padding-right:0}.imagify-account-info-col,.imagify-col.imagify-col.imagify-account-info-col,.imagify-custom-folders-section .imagify-account-info-col,.imagify-media-lib-section .imagify-account-info-col{width:100%;float:none;padding-left:0;padding-right:0}.imagify-lb-text{font-size:20px}.imagify-vcenter{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-pr2.imagify-pr2{padding-right:0}}.imagify-upsell{position:relative;background:#c51161;padding:20px 40px}.imagify-upsell p{color:#fff!important}.imagify-upsell-button{display:block;background:#fff;border-radius:5px;color:#c51161!important;font-weight:700;padding:10px;text-align:center;text-decoration:none;text-transform:uppercase}.imagify-upsell-arrow::after{content:'\2192';font-size:large;margin-left:5px;vertical-align:top}.imagify-upsell-dismiss::before{position:absolute;top:5px;right:5px;content:"\2715";color:#2e3243;font-size:2em}.imagify-upsell .imagify-meteo-icon{-webkit-filter:invert(100%) sepia(100%) saturate(0%) hue-rotate(104deg) brightness(103%) contrast(103%);filter:invert(100%) sepia(100%) saturate(0%) hue-rotate(104deg) brightness(103%) contrast(103%)}.imagify-original-fize-size{display:block!important}.imagify-original-fize-size .value{padding-left:15px!important} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/bulk.css b/wp/wp-content/plugins/imagify/assets/css/bulk.css new file mode 100644 index 00000000..cf368518 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/bulk.css @@ -0,0 +1,1306 @@ +/* Doughnut legend */ +#imagify-overview-chart-legend { + overflow: hidden; +} + +.imagify-doughnut-legend { + margin-top: 38px; + list-style: none; +} + +.imagify-doughnut-legend li { + display: block; + padding-left: 30px; + position: relative; + margin-bottom: 15px; + border-radius: 5px; + padding: 3px 8px 2px 31px; + font-size: 13px; + cursor: default; + -webkit-transition: background-color 200ms ease-in-out; + -moz-transition: background-color 200ms ease-in-out; + -o-transition: background-color 200ms ease-in-out; + transition: background-color 200ms ease-in-out; +} + +.imagify-doughnut-legend li span { + display: block; + position: absolute; + left: 0; + top: 0; + width: 25px; + height: 25px; + border-radius: 50%; +} + +.imagify-global-optim-phrase { + width: 180px; + padding-top: 20px; + font-size: 14px; + text-align: center; +} + +.imagify-total-percent { + color: #46b1ce; +} + +.imagify-overview-chart-container { + float: left; + margin-right: 20px; +} + +.imagify-chart-percent { + position: absolute; + left: 0; + right: 0; + top: 50%; + margin-top: -.5em; + line-height: 1; + text-align: center; + font-size: 55px; + font-weight: bold; + color: #46B1CE; +} + +.imagify-chart-percent span { + font-size: 20px; + vertical-align: super; +} + +.media_page_imagify-bulk-optimization .media-item, +body[class*="_imagify-ngg-bulk-optimization"] .media-item { + margin: 0; +} + +.media_page_imagify-bulk-optimization .media-item .progress, +body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress { + float: none; + width: 100%; + height: 8px; + margin: 0; + overflow: visible; + background: #1F2331; + box-shadow: 0; + border-radius: 0; +} + +.media_page_imagify-bulk-optimization .media-item .percent, +body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent { + position: absolute; + top: 6px; + right: -28px; + text-shadow: none; + width: auto; + padding: 0 5px; + line-height: 1.85; + font-size: 14px; + font-weight: bold; + color: #40B1D0; +} + +.media_page_imagify-bulk-optimization .media-item .progress, +.media_page_imagify-bulk-optimization .media-item .percent, +body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress, +body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent { + text-align: right; +} + +.media_page_imagify-bulk-optimization .media-item .progress .bar, +body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar { + position: relative; + width: 1px; + height: 8px; + margin-top: 0; + background: #46B1CE; + border-radius: 0; + -webkit-transition: width .5s; + transition: width .5s; +} + +#imagify-bulk-action { + padding: 11px 20px; +} + +/* Bulk overview columns */ +.imagify-columns .col-overview.col-overview { + width: calc(100% - 465px); + padding-left: 20px; +} + +.imagify-columns .col-statistics.col-statistics { + width: 60%; +} + +.imagify-columns .col-chart.col-chart { + width: 40%; +} + +@media (max-width: 1520px) and (min-width: 1381px), (max-width: 1086px) { + .imagify-columns .col-statistics.col-statistics, + .imagify-columns .col-chart.col-chart { + width: 50%; + } +} + +@media (max-width: 1380px) and (min-width: 1246px), (max-width: 380px) { + .imagify-overview-chart-container { + float: none; + margin-right: 0; + } + + .imagify-doughnut-legend { + margin-top: 18px; + } + + .imagify-global-optim-phrase { + padding-top: 0; + width: auto; + } +} + +@media (max-width: 808px) { + .imagify-columns .col-statistics.col-statistics, + .imagify-columns .col-chart.col-chart { + width: auto; + float: none; + padding: 0; + } + + .imagify-columns .col-chart.col-chart { + margin-top: 3em; + } +} + +/* Header */ +.imagify-sep-v { + width: 1px; + background: rgba(255, 255, 255, .2); +} + +.base-transparent { + background: transparent; +} + +[class^="imagify-bar-"].right-outside-number { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-right: 4.5em; +} + +.right-outside-number .imagify-barnb { + display: block; + margin-right: -5.25em; + text-align: right; + font-weight: bold; + line-height: .8; +} + +.imagify-h2-like { + margin: 0 0 .5em 0; + padding-bottom: .5em; + border-bottom: 1px solid #E9EFF2; + font-size: 24px; + color: #000; + font-weight: bold; +} + +.imagify-h2-like .dashicons, +.imagify-h2-like .dashicons:before { + font-size: 38px; + height: 38px; + width: 38px; + margin-right: 12px; + vertical-align: -5px; + color: #40B1D0; +} + +.imagify-info-block { + position: relative; + padding: 10px; + padding-left: 42px; + background: #D9E4EB; + border-radius: 4px; + line-height: 1.6; +} + +.imagify-list-infos { + margin: 0; + padding: 0; +} + +.imagify-list-infos li { + display: flex; + align-items: center; + padding: 15px 5px; + text-align: left; + font-size: 14px; + line-height: 1.5; + color: #626E7B; +} + +.imagify-list-infos li:first-child { + padding-top: 5px; +} + +.imagify-list-infos li:last-child { + padding-bottom: 5px; +} + +.imagify-list-infos li + li { + border-top: 1px solid #E9EFF2; +} + +.imagify-info-icon { + flex-grow: 0; + flex-basis: 50px; +} + +.imagify-info-icon + span { + padding-left: 20px; +} + +.imagify-list-infos a:before { + content: ''; + display: block; +} + +/* Some main sections/content */ +.imagify-bulk .imagify-settings-section { + border: 1px solid #D9D9D9; + border-top: 0; + background: #FFF; + color: #4A4A4A; +} + +.imagify-bulk p, +.imagify-bulk li, +.imagify-bulk h3 { + color: #4A4A4A; +} + +.imagify-bulk .imagify-settings-section h3 { + margin-bottom: 2em; +} + +/* Account information col */ +.imagify-account-info-col .imagify-options-title { + display: flex; + align-items: center; +} + +.imagify-account-info-col p.imagify-meteo-title { + margin: 0; + font-size: 24px; + font-weight: bold; + color: #FFF; +} + +.imagify-account-info-col .imagify-options-title > a { + flex-basis: 100px; + margin-left: auto; + margin-right: 10px; + text-decoration: underline; + font-size: 12px; +} + +.imagify-account-info-col .imagify-meteo-title .dashicons, +.imagify-account-info-col .imagify-meteo-title .dashicons:before { + font-size: 38px; + width: 38px; + height: 38px; + margin-right: 4px; + color: #40B1D0; +} + +.imagify-col-content .imagify-block-secondary { + margin-left: -1px; + margin-right: -1px; +} + +.imagify-col-content .imagify-space-left { + margin: 15px 30px 15px 0; +} + +.imagify-col-content .imagify-space-left p { + margin: 0 0 10px 0; + font-size: 19px; + font-weight: 500; + color: #343A49; +} + +.imagify-col-content .imagify-meteo-icon { + height: 64px; + margin: 15px 15px 15px 0; +} + +.imagify-col-content .imagify-section-title + p { + margin-top: 10px; +} + +.imagify-account-info-col .imagify-h3-like.imagify-h3-like { + color: inherit; +} + +/* Tooltips */ +.imagify-title .imagify-tooltips { + position: absolute; + top: 100%; + left: 0; +} + +.imagify-tooltips .icon-round { + float: left; + display: inline-block; + width: 28px; + height: 28px; + border: 1px solid #FFF; + margin-right: 8px; + margin-bottom: 8px; + font-size: 17px; + font-style: italic; + line-height: 29px; + font-weight: bold; + text-align: center; + border-radius: 50%; +} + +.imagify-tooltips .tooltip-content { + display: block; + position: relative; + max-width: 250px; + padding: 7px 15px 8px; + background: #2e3242; + color: #FFF; + font-size: 10px; + border-radius: 3px; +} + +.imagify-tooltips.right .tooltip-content { + margin-left: 12px; +} + +.imagify-tooltips.bottom .tooltip-content { + margin-top: 4px; +} + +.imagify-inline-options label .tooltip-content { + position: absolute; + left: 0; + right: 0; + top: 100%; + text-transform: none; + font-size: 10px; + letter-spacing: 0; + text-align: center; +} + +.imagify-tooltips .tooltip-content:after { + content: ""; + position: absolute; +} + +.imagify-tooltips.right .tooltip-content:after { + top: 16px; + left: -6px; + border-right: 8px solid #2e3242; + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; +} + +.imagify-tooltips.bottom .tooltip-content:after { + top: -5px; + left: 50%; + margin-left: -3px; + border-bottom: 6px solid #2e3242; + border-left: 6px solid transparent; + border-right: 6px solid transparent; +} + +.imagify-space-tooltips .tooltip-content { + max-width: 280px; + margin-top: 20px; + margin-left: 0; + padding: 5px 15px 5px; + font-size: 13px; + background: #40B1D0; + box-shadow: 0 3px 0 #338EA6; +} + +.imagify-space-tooltips .tooltip-content:after { + top: -14px; + left: 50%; + margin-left: -7px; + border: 0 none; + border-bottom: 15px solid #40B1D0; + border-left: 15px solid transparent; + border-right: 15px solid transparent; +} + +.tooltip-content.tooltip-table { + display: table; + width: 100%; +} + +.tooltip-content.tooltip-table > * { + display: table-cell; + vertical-align: middle; +} + +.tooltip-content .cell-icon { + width: 28px; +} + +.tooltip-content .cell-icon .icon { + margin-bottom: 0; +} + +.tooltip-content .cell-text { + padding: 5px 10px 5px 0; + line-height: 1.3; +} + +.tooltip-content .cell-sep { + width: 1px; + background: rgba(255, 255, 255, .4); +} + +.tooltip-content .cell-cta { + padding-left: 10px; +} + +.tooltip-content .cell-cta a { + display: block; + color: #FFF; + width: 100%; + height: 100%; + white-space: nowrap; +} + +/* Number display */ +.imagify-number-you-optimized { + margin-bottom: 1.35em; + overflow: hidden; +} + +.imagify-number-you-optimized .number { + display: table-cell; + padding-right: 15px; + font-size: 48px; + font-weight: bold; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + color: #000; +} + +.imagify-number-you-optimized [id="imagify-total-optimized-attachments-pct"] { + color: #40B1D0; +} + +.imagify-number-you-optimized .text { + display: table-cell; + vertical-align: middle; + overflow: hidden; + font-size: 12px; + color: #626E7B; +} + +.imagify-number-you-optimized > p { + display: table; +} + +/* Number and bars */ +.imagify-bars { + padding-right: 15px; +} + +.imagify-bars p { + font-size: 12px; + margin-bottom: 5px; +} + +.imagify-bars + .imagify-number-you-optimized { + border-bottom: 0; + padding-top: 0.85em; +} + +.imagify-bars + .imagify-number-you-optimized p { + color: #46b1ce; +} + +/* Table */ +.imagify-bulk-table { + margin-top: 2em; +} + +.imagify-table-header { + justify-content: space-between; + padding: 15px 25px; + background: #343A49; + color: #FFF; +} + +.imagify-newbie { + margin-top: 4em; + position: relative; + overflow: visible; +} + +.imagify-newbie .imagify-new-feature.imagify-new-feature { + position: absolute; + top: 0; + left: 25px; + transform: translateY(-50%); + margin: 0; + padding: 8px 20px; + font-size: 14px; + letter-spacing: .02em; + text-transform: uppercase; + font-weight: bold; + color: #FFF; + background: #8BC34A; +} + +.imagify-newbie .imagify-table-header { + padding: 30px 25px; + border: 2px solid #8BC34A; + background: #F3F9EC; +} + +.imagify-th-titles .dashicons, +.imagify-th-titles .dashicons:before { + width: 38px; + height: 38px; + margin-right: 20px; + font-size: 38px; + color: #40B1D0; +} + +.imagify-newbie .imagify-th-titles .dashicons:before { + color: #8BC34A; +} + +.imagify-th-title.imagify-th-title.imagify-th-title { + margin: 0; + font-size: 24px; + font-weight: 500; + color: #FFF; +} + +.imagify-newbie .imagify-th-title.imagify-th-title { + color: #343A49; +} + +.imagify-th-subtitle.imagify-th-subtitle.imagify-th-subtitle { + margin: 0 0 5px; + font-size: 14px; + color: #7A8996; + font-weight: 500; +} + +.imagify-th-action .imagify-button-clean { + font-size: 12px; + color: #7A8996; +} + +.imagify-th-action .imagify-is-active { + color: #FFF; +} + +.imagify-th-action .button:hover, +.imagify-th-action .button:focus { + color: #FFF; +} + +.imagify-bulk-table table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} + +.imagify-bulk-table td { + padding: 20px; +} + +.imagify-bulk-table-details { + border-bottom: 2px solid #E5EBEF; +} + +.imagify-bulk-table-details thead tr, +.imagify-bulk-table-details thead th { + background: #4A5362; +} + +.imagify-bulk-table-details thead th { + padding: 12px 20px; + text-align: left; + font-weight: bold; + color: #E5EBEF; + font-size: 12px; +} + +.imagify-bulk-table-details tbody tr:nth-child(odd) td { + background: #F2F5F7; +} + +.imagify-bulk-table-content { + border: 1px solid #D3D3D3; + border-top: 0; +} + +.imagify-bulk-table-footer { + padding: 20px; + color: #626E7B; + background: #F2F5F7; +} + +.imagify-bulk-table tbody tr + tr { + border-top: 3px solid #F2F5F7; +} + +.imagify-bulk-table tbody tr, +.imagify-bulk-table tbody td { + background: #FFF; +} + +@media (max-width: 782px) { + .imagify-row-folder-type, + tr.imagify-row-working, + tr.imagify-row-waiting { + padding-top: 20px; + } +} + +.imagify-bulk-table .imagify-row-progress { + display: none; + height: 8px; + padding: 0; +} + +.imagify-bulk-table .imagify-no-uploaded-yet td { + height: 200px; + font-size: 17px; + letter-spacing: .1em; + word-spacing: .12em; + vertical-align: middle; + text-transform: uppercase; + font-weight: bold; + text-align: center; + color: #999; + background-color: #FFF; +} + +/* Custom Level Optimization Select */ +.imagify-selector { + position: relative; +} + +.imagify-selector-list { + background: #FFF; + border: 1px solid #F4F7F9; + box-shadow: 0 6px 12px rgba(0, 0, 0, .1); + border-radius: 3px; + font-weight: bold; + text-transform: uppercase; + letter-spacing: .02em; +} + +.imagify-selector-list li:first-child label { + border-radius: 3px 3px 0 0; +} + +.imagify-selector-list li:last-child label { + border-radius: 0 0 3px 3px; +} + +.imagify-selector-list li { + margin: 0; +} + +.imagify-selector-list li + li { + border-top: 1px solid #F4F7F9; +} + +.imagify-selector-list svg { + margin-right: 5px; +} + +.imagify-selector-list input:checked + label, +.imagify-selector-list .imagify-selector-current-value label { + background: #343A49; + color: #FFF; +} + +.imagify-selector-list input:checked + label:hover, +.imagify-selector-list .imagify-selector-current-value label:hover, +.imagify-selector-list label:hover, +.imagify-selector-list input:focus + label, +.imagify-selector-list .imagify-selector-current-value input:focus + label { + background: #40B1D0; + color: #F4F7F9; +} + +.imagify-selector-list input:checked + label:hover polygon, +.imagify-selector-list .imagify-selector-current-value label:hover polygon, +.imagify-selector-list label:hover polygon, +.imagify-selector-list input:focus + label polygon, +.imagify-selector-list .imagify-selector-current-value input:focus + label polygon { + fill: #FFF; +} + +.imagify-selector-list input:checked + label:hover polygon[fill="#CCD1D6"], +.imagify-selector-list .imagify-selector-current-value label:hover polygon[fill="#CCD1D6"], +.imagify-selector-list label:hover polygon[fill="#CCD1D6"], +.imagify-selector-list input:focus + label polygon[fill="#CCD1D6"], +.imagify-selector-list .imagify-selector-current-value input:focus + label polygon[fill="#CCD1D6"] { + fill: #3694AE; +} + +.imagify-selector-list li label { + display: block; + padding: 10px; + transition: all .275s; +} + +.imagify-selector-list polygon { + transition: all .275s; +} + +.imagify-selector-list { + position: absolute; + top: 0; + left: 0; + right: 0; + transition: all .275s; + transform: translateY(-50%); +} + +.imagify-selector-list[aria-hidden="true"] { + opacity: 0; + visibility: hidden; + transform: translateY(-50%) scale(0); +} + +.imagify-selector-list[aria-hidden="false"] { + opacity: 1; + visibility: visible; + transform: translateY(-50%) scale(1); +} + +.button .imagify-selector-current-value-info { + position: relative; + padding-right: 20px; +} + +.button .imagify-selector-current-value-info:after { + content: ''; + position: absolute; + right: 0; + top: 50%; + margin-top: -3px; + border-top: 6px solid #7A8996; + border-left: 6px solid transparent; + border-right: 6px solid transparent; +} + +/* Complete row / success */ +.imagify-row-complete { + margin-top: 2em; + color: #FFF; + text-shadow: 0 0 2px rgba(0, 0, 0, .1); +} + +.imagify-row-complete .imagify-ac-chart { + margin-top: 3px; +} + +.imagify-row-complete.imagify-row-complete p { + color: #FFF; + margin: 0; +} + +@-webkit-keyframes congrate { + 0% { + opacity: 0; + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(1.05); + opacity: 1; + } + 100% { + -webkit-transform: scale(1); + opacity: 1; + } +} + +@keyframes congrate { + 0% { + opacity: 0; + transform: scale(1); + } + 50% { + transform: scale(1.05); + opacity: 1; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +.imagify-row-complete.done { + -webkit-animation: congrate 500ms ease-in-out; + animation: congrate 500ms ease-in-out; +} + +.imagify-all-complete { + display: flex; + justify-content: space-between; + margin: 1.5em 0; +} + +.imagify-ac-report { + display: flex; + justify-content: center; + align-items: center; + flex: auto; + padding: 35px 20px; + background: #8BC34A; + min-width: 310px; +} + +.imagify-ac-chart { + width: 46px; + height: 46px; + float: left; + margin: 0 20px 0 10px; +} + +.imagify-ac-report-text { + overflow: hidden; +} + +.imagify-ac-report-text p { + line-height: 1.3; +} + +.imagify-ac-rt-big { + font-weight: bold; + font-size: 24px; + letter-spacing: 0.15em; + word-spacing: 0.15em; + text-transform: uppercase; +} + +.imagify-ac-spread-word, .imagify-ac-leave-review { + flex: auto; + padding: 35px 20px; + background: #343A49; +} + +.imagify-ac-spread-word h3 { + color: #fff; + text-transform: uppercase; +} + +.imagify-ac-spread-word .stars { + text-decoration: none; +} + +.imagify-ac-leave-review { + display: flex; + justify-content: center; + align-items: center; +} + +/* TD's width */ +.imagify-cell-checkbox { + width: 35px; +} + +.imagify-cell-checkbox p { + margin: 0; +} + +.imagify-cell-checkbox-loader { + display: block; + width: 27px; + height: 28px; + line-height: 0; + animation: loading 4s infinite linear; +} + +@keyframes loading { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} + +.imagify-cell-checkbox-loader.hidden { + display: none; + animation: none; +} + +.imagify-cell-title label, +.imagify-cell-label { + font-size: 14px; + text-transform: uppercase; + letter-spacing: .02em; + font-weight: bold; +} + +.imagify-cell-label { + margin-right: 10px; +} + +.imagify-cell-value { + font-size: 12px; + font-weight: 500; + color: #7A8996; +} + +td.imagify-cell-title { + padding-left: 0; +} + +.imagify-cell-title label, +.imagify-cell-original-size .imagify-cell-label { + color: #1F2332; +} + +.imagify-cell-optimized-size, +.imagify-cell-original-size { + font-weight: 500; + color: #7A8996; + font-size: 12px; +} + +.imagify-cell-optimized-size .imagify-cell-label { + color: #338EA6; +} + +.imagify-cell-count-optimized { + font-size: 14px; + font-weight: bold; + color: #338EA6; +} + +.imagify-cell-count-errors { + color: #C51162; + font-weight: bold; + font-size: 14px; +} + +.imagify-cell-count-errors a { + margin-left: 5px; + color: #7A8996; + font-weight: normal; + font-size: 12px; +} + +.imagify-cell-filename { + max-width: 200px; +} + +.imagify-cell-status { + max-width: 145px; +} + +.imagify-cell-status .dashicons-warning { + margin-right: 2px; +} + +.imagify-cell-thumbnails { + max-width: 120px; +} + +td.imagify-cell-filename { + text-overflow: clip; /* ellipsis replace all the text by ... :`/ */ + white-space: nowrap; + overflow: hidden; +} + +.imagify-bulk-table .imagify-cell-thumbnails { + text-align: center; +} + +.imagify-cell-percentage, +.imagify-cell-savings { + color: #46B1CE; + font-weight: bold; +} + +.imagify-bulk-table td.imagify-cell-totaloriginal { + padding-right: 78px; +} + +.imagify-cell-totaloriginal { + text-align: right; +} + +.imagify-cell-level { + width: 145px; +} + +.imagify-selector-button.imagify-selector-button { + border: 1px solid #FFF; + padding: 2px 10px; +} + +.imagify-selector-button.imagify-selector-button:hover, +.imagify-selector-button.imagify-selector-button:focus { + border-color: #EEE; + box-shadow: 0 4px 8px rgba(0, 0, 0, .1); +} + +.imagiuploaded, +.imagifilename { + display: inline-block; + vertical-align: middle; + margin-left: 5px; + color: #626E7B; + font-weight: 500; +} + +.imagifilename { + font-size: 12px; +} + +.imagiuploaded { + width: 33px; + height: 33px; + margin-right: 5px; + margin-left: -8px; + overflow: hidden; + background: url(../images/upload-image.png) 0 0 no-repeat; + background-size: cover; +} + +.imagiuploaded img { + max-width: 100%; + height: auto; +} + +.imagistatus { + color: #8CA6B3; + text-transform: uppercase; + font-weight: bold; +} + +.imagistatus .dashicons { + margin-right: 5px; +} + +.status-compressing { + color: #46B1CE; +} + +.status-error { + color: #CE0B24; +} + +.status-warning { + color: #f5a623; +} + +.status-complete { + color: #8CC152; +} + +/* Submit Bulk */ +.imagify-bulk-submit { + padding: 15px 0 8px 0; +} + +.imagify-settings .button-primary.button-primary[disabled] { + color: #4A4A4A !important; + background: #D9E4EB !important; + text-shadow: none !important; + cursor: not-allowed; +} + +/* Icon rotation */ +.dashicons.rotate { + -webkit-animation: icon-rotate 2.6s infinite linear; + animation: icon-rotate 2.6s infinite linear; +} + +.imagify-cell-status .dashicons-admin-generic { + transform-origin: 48.75% 51.75%; +} + +@-webkit-keyframes icon-rotate { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes icon-rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.imagify-col.imagify-col.imagify-account-info-col { + width: 465px; +} + +@media (max-width: 1245px) { + .imagify-col.imagify-col.imagify-account-info-col { + width: auto; + max-width: none; + float: none; + } + + .imagify-columns .col-overview.col-overview { + float: none; + width: auto; + padding-left: 0; + padding-right: 0; + } +} + +@media (max-width: 1200px) { + .imagify-settings .imagify-title .imagify-logo { + display: none; + } +} + +@media (max-width: 940px) { + .imagify-bulk-table-container tbody, + .imagify-bulk-table-container tr { + text-align: left; + } + + .imagify-bulk-table-container tbody, + .imagify-bulk-table-container tbody tr, + .imagify-bulk-table-container tbody td { + display: block; + } + + .imagify-bulk-table-container tbody td { + padding: 20px; + } + + .imagify-cell-checkbox, + .imagify-cell-title { + float: left; + } + + .imagify-cell-checkbox { + width: 26px; + } + + .imagify-bulk-table-container .imagify-cell-title { + padding-left: 10px; + width: calc(100% - 96px); + } + + .imagify-cell-title:after, + .imagify-cell-count-optimized:before { + content: ''; + display: table; + clear: both; + width: 100%; + } + + .imagify-cell-count-optimized { + clear: both; + } + + .imagify-bulk-table-container .imagify-cell-title ~ td { + display: inline-block; + } + + .imagify-bulk-table-container td.imagify-cell-level { + display: block + } +} + +@media (max-width: 918px) { + .imagify-settings .imagify-title { + display: block; + } + + .imagify-settings .imagify-documentation-link-box { + display: inline-flex; + } +} + +.hidden { + display: none; +} + +@media (max-width: 782px) { + .imagify-table-header, + .imagify-newbie .imagify-table-header, + .imagify-account-info-col .imagify-options-title{ + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-direction: normal; + -moz-box-orient: vertical; + align-items: center; + } + .imagify-newbie .imagify-th-titles{ + width: 100%; + } + .imagify-newbie .imagify-th-title.imagify-th-title { + color: #343A49; + font-size: 16px; + padding-bottom: 20px; + } + .imagify-newbie .imagify-th-titles .dashicons, + .imagify-newbie .imagify-th-titles .dashicons:before{ + margin: 0px; + } + .imagify-newbie .imagify-th-action{ + display: flex; + max-width: 100%; + } + .imagify-newbie .imagify-th-action a{ + max-width: 100%; + font-size: 11px; + padding: 11px 12px; + } + .imagify-columns .col-chart.col-chart{ + text-align: center; + } + .imagify-doughnut-legend{ + margin-top: 18px; + width: 60%; + margin: 10px auto; + } + .imagify-account-info-col .imagify-options-title > a{ + flex-basis: unset; + margin: auto; + } + .imagify-th-title.imagify-th-title.imagify-th-title{ + font-size: 20px; + } + .imagify-account-info-col p.imagify-meteo-title{ + font-size: 20px; + } + .imagify-bulk-table-container tbody td{ + padding: 10px; + } + .imagify-col-content .imagify-space-left{ + width: auto; + margin: 0 0 15px 0; + } +} + diff --git a/wp/wp-content/plugins/imagify/assets/css/bulk.min.css b/wp/wp-content/plugins/imagify/assets/css/bulk.min.css new file mode 100644 index 00000000..21fe5382 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/bulk.min.css @@ -0,0 +1 @@ +#imagify-overview-chart-legend{overflow:hidden}.imagify-doughnut-legend{margin-top:38px;list-style:none}.imagify-doughnut-legend li{display:block;padding-left:30px;position:relative;margin-bottom:15px;border-radius:5px;padding:3px 8px 2px 31px;font-size:13px;cursor:default;-webkit-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.imagify-doughnut-legend li span{display:block;position:absolute;left:0;top:0;width:25px;height:25px;border-radius:50%}.imagify-global-optim-phrase{width:180px;padding-top:20px;font-size:14px;text-align:center}.imagify-total-percent{color:#46b1ce}.imagify-overview-chart-container{float:left;margin-right:20px}.imagify-chart-percent{position:absolute;left:0;right:0;top:50%;margin-top:-.5em;line-height:1;text-align:center;font-size:55px;font-weight:700;color:#46b1ce}.imagify-chart-percent span{font-size:20px;vertical-align:super}.media_page_imagify-bulk-optimization .media-item,body[class*="_imagify-ngg-bulk-optimization"] .media-item{margin:0}.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{float:none;width:100%;height:8px;margin:0;overflow:visible;background:#1f2331;-webkit-box-shadow:0;box-shadow:0;border-radius:0}.media_page_imagify-bulk-optimization .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent{position:absolute;top:6px;right:-28px;text-shadow:none;width:auto;padding:0 5px;line-height:1.85;font-size:14px;font-weight:700;color:#40b1d0}.media_page_imagify-bulk-optimization .media-item .percent,.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{text-align:right}.media_page_imagify-bulk-optimization .media-item .progress .bar,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar{position:relative;width:1px;height:8px;margin-top:0;background:#46b1ce;border-radius:0;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}#imagify-bulk-action{padding:11px 20px}.imagify-columns .col-overview.col-overview{width:calc(100% - 465px);padding-left:20px}.imagify-columns .col-statistics.col-statistics{width:60%}.imagify-columns .col-chart.col-chart{width:40%}@media (max-width:1520px) and (min-width:1381px),(max-width:1086px){.imagify-columns .col-chart.col-chart,.imagify-columns .col-statistics.col-statistics{width:50%}}@media (max-width:1380px) and (min-width:1246px),(max-width:380px){.imagify-overview-chart-container{float:none;margin-right:0}.imagify-doughnut-legend{margin-top:18px}.imagify-global-optim-phrase{padding-top:0;width:auto}}@media (max-width:808px){.imagify-columns .col-chart.col-chart,.imagify-columns .col-statistics.col-statistics{width:auto;float:none;padding:0}.imagify-columns .col-chart.col-chart{margin-top:3em}}.imagify-sep-v{width:1px;background:rgba(255,255,255,.2)}.base-transparent{background:0 0}[class^=imagify-bar-].right-outside-number{-webkit-box-sizing:border-box;box-sizing:border-box;padding-right:4.5em}.right-outside-number .imagify-barnb{display:block;margin-right:-5.25em;text-align:right;font-weight:700;line-height:.8}.imagify-h2-like{margin:0 0 .5em 0;padding-bottom:.5em;border-bottom:1px solid #e9eff2;font-size:24px;color:#000;font-weight:700}.imagify-h2-like .dashicons,.imagify-h2-like .dashicons:before{font-size:38px;height:38px;width:38px;margin-right:12px;vertical-align:-5px;color:#40b1d0}.imagify-info-block{position:relative;padding:10px;padding-left:42px;background:#d9e4eb;border-radius:4px;line-height:1.6}.imagify-list-infos{margin:0;padding:0}.imagify-list-infos li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 5px;text-align:left;font-size:14px;line-height:1.5;color:#626e7b}.imagify-list-infos li:first-child{padding-top:5px}.imagify-list-infos li:last-child{padding-bottom:5px}.imagify-list-infos li+li{border-top:1px solid #e9eff2}.imagify-info-icon{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-preferred-size:50px;flex-basis:50px}.imagify-info-icon+span{padding-left:20px}.imagify-list-infos a:before{content:'';display:block}.imagify-bulk .imagify-settings-section{border:1px solid #d9d9d9;border-top:0;background:#fff;color:#4a4a4a}.imagify-bulk h3,.imagify-bulk li,.imagify-bulk p{color:#4a4a4a}.imagify-bulk .imagify-settings-section h3{margin-bottom:2em}.imagify-account-info-col .imagify-options-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-account-info-col p.imagify-meteo-title{margin:0;font-size:24px;font-weight:700;color:#fff}.imagify-account-info-col .imagify-options-title>a{-ms-flex-preferred-size:100px;flex-basis:100px;margin-left:auto;margin-right:10px;text-decoration:underline;font-size:12px}.imagify-account-info-col .imagify-meteo-title .dashicons,.imagify-account-info-col .imagify-meteo-title .dashicons:before{font-size:38px;width:38px;height:38px;margin-right:4px;color:#40b1d0}.imagify-col-content .imagify-block-secondary{margin-left:-1px;margin-right:-1px}.imagify-col-content .imagify-space-left{margin:15px 30px 15px 0}.imagify-col-content .imagify-space-left p{margin:0 0 10px 0;font-size:19px;font-weight:500;color:#343a49}.imagify-col-content .imagify-meteo-icon{height:64px;margin:15px 15px 15px 0}.imagify-col-content .imagify-section-title+p{margin-top:10px}.imagify-account-info-col .imagify-h3-like.imagify-h3-like{color:inherit}.imagify-title .imagify-tooltips{position:absolute;top:100%;left:0}.imagify-tooltips .icon-round{float:left;display:inline-block;width:28px;height:28px;border:1px solid #fff;margin-right:8px;margin-bottom:8px;font-size:17px;font-style:italic;line-height:29px;font-weight:700;text-align:center;border-radius:50%}.imagify-tooltips .tooltip-content{display:block;position:relative;max-width:250px;padding:7px 15px 8px;background:#2e3242;color:#fff;font-size:10px;border-radius:3px}.imagify-tooltips.right .tooltip-content{margin-left:12px}.imagify-tooltips.bottom .tooltip-content{margin-top:4px}.imagify-inline-options label .tooltip-content{position:absolute;left:0;right:0;top:100%;text-transform:none;font-size:10px;letter-spacing:0;text-align:center}.imagify-tooltips .tooltip-content:after{content:"";position:absolute}.imagify-tooltips.right .tooltip-content:after{top:16px;left:-6px;border-right:8px solid #2e3242;border-top:6px solid transparent;border-bottom:6px solid transparent}.imagify-tooltips.bottom .tooltip-content:after{top:-5px;left:50%;margin-left:-3px;border-bottom:6px solid #2e3242;border-left:6px solid transparent;border-right:6px solid transparent}.imagify-space-tooltips .tooltip-content{max-width:280px;margin-top:20px;margin-left:0;padding:5px 15px 5px;font-size:13px;background:#40b1d0;-webkit-box-shadow:0 3px 0 #338ea6;box-shadow:0 3px 0 #338ea6}.imagify-space-tooltips .tooltip-content:after{top:-14px;left:50%;margin-left:-7px;border:0 none;border-bottom:15px solid #40b1d0;border-left:15px solid transparent;border-right:15px solid transparent}.tooltip-content.tooltip-table{display:table;width:100%}.tooltip-content.tooltip-table>*{display:table-cell;vertical-align:middle}.tooltip-content .cell-icon{width:28px}.tooltip-content .cell-icon .icon{margin-bottom:0}.tooltip-content .cell-text{padding:5px 10px 5px 0;line-height:1.3}.tooltip-content .cell-sep{width:1px;background:rgba(255,255,255,.4)}.tooltip-content .cell-cta{padding-left:10px}.tooltip-content .cell-cta a{display:block;color:#fff;width:100%;height:100%;white-space:nowrap}.imagify-number-you-optimized{margin-bottom:1.35em;overflow:hidden}.imagify-number-you-optimized .number{display:table-cell;padding-right:15px;font-size:48px;font-weight:700;line-height:1;vertical-align:middle;white-space:nowrap;color:#000}.imagify-number-you-optimized [id=imagify-total-optimized-attachments-pct]{color:#40b1d0}.imagify-number-you-optimized .text{display:table-cell;vertical-align:middle;overflow:hidden;font-size:12px;color:#626e7b}.imagify-number-you-optimized>p{display:table}.imagify-bars{padding-right:15px}.imagify-bars p{font-size:12px;margin-bottom:5px}.imagify-bars+.imagify-number-you-optimized{border-bottom:0;padding-top:.85em}.imagify-bars+.imagify-number-you-optimized p{color:#46b1ce}.imagify-bulk-table{margin-top:2em}.imagify-table-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:15px 25px;background:#343a49;color:#fff}.imagify-newbie{margin-top:4em;position:relative;overflow:visible}.imagify-newbie .imagify-new-feature.imagify-new-feature{position:absolute;top:0;left:25px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);margin:0;padding:8px 20px;font-size:14px;letter-spacing:.02em;text-transform:uppercase;font-weight:700;color:#fff;background:#8bc34a}.imagify-newbie .imagify-table-header{padding:30px 25px;border:2px solid #8bc34a;background:#f3f9ec}.imagify-th-titles .dashicons,.imagify-th-titles .dashicons:before{width:38px;height:38px;margin-right:20px;font-size:38px;color:#40b1d0}.imagify-newbie .imagify-th-titles .dashicons:before{color:#8bc34a}.imagify-th-title.imagify-th-title.imagify-th-title{margin:0;font-size:24px;font-weight:500;color:#fff}.imagify-newbie .imagify-th-title.imagify-th-title{color:#343a49}.imagify-th-subtitle.imagify-th-subtitle.imagify-th-subtitle{margin:0 0 5px;font-size:14px;color:#7a8996;font-weight:500}.imagify-th-action .imagify-button-clean{font-size:12px;color:#7a8996}.imagify-th-action .imagify-is-active{color:#fff}.imagify-th-action .button:focus,.imagify-th-action .button:hover{color:#fff}.imagify-bulk-table table{width:100%;border-spacing:0;border-collapse:collapse}.imagify-bulk-table td{padding:20px}.imagify-bulk-table-details{border-bottom:2px solid #e5ebef}.imagify-bulk-table-details thead th,.imagify-bulk-table-details thead tr{background:#4a5362}.imagify-bulk-table-details thead th{padding:12px 20px;text-align:left;font-weight:700;color:#e5ebef;font-size:12px}.imagify-bulk-table-details tbody tr:nth-child(odd) td{background:#f2f5f7}.imagify-bulk-table-content{border:1px solid #d3d3d3;border-top:0}.imagify-bulk-table-footer{padding:20px;color:#626e7b;background:#f2f5f7}.imagify-bulk-table tbody tr+tr{border-top:3px solid #f2f5f7}.imagify-bulk-table tbody td,.imagify-bulk-table tbody tr{background:#fff}@media (max-width:782px){.imagify-row-folder-type,tr.imagify-row-waiting,tr.imagify-row-working{padding-top:20px}}.imagify-bulk-table .imagify-row-progress{display:none;height:8px;padding:0}.imagify-bulk-table .imagify-no-uploaded-yet td{height:200px;font-size:17px;letter-spacing:.1em;word-spacing:.12em;vertical-align:middle;text-transform:uppercase;font-weight:700;text-align:center;color:#999;background-color:#fff}.imagify-selector{position:relative}.imagify-selector-list{background:#fff;border:1px solid #f4f7f9;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.1);box-shadow:0 6px 12px rgba(0,0,0,.1);border-radius:3px;font-weight:700;text-transform:uppercase;letter-spacing:.02em}.imagify-selector-list li:first-child label{border-radius:3px 3px 0 0}.imagify-selector-list li:last-child label{border-radius:0 0 3px 3px}.imagify-selector-list li{margin:0}.imagify-selector-list li+li{border-top:1px solid #f4f7f9}.imagify-selector-list svg{margin-right:5px}.imagify-selector-list .imagify-selector-current-value label,.imagify-selector-list input:checked+label{background:#343a49;color:#fff}.imagify-selector-list .imagify-selector-current-value input:focus+label,.imagify-selector-list .imagify-selector-current-value label:hover,.imagify-selector-list input:checked+label:hover,.imagify-selector-list input:focus+label,.imagify-selector-list label:hover{background:#40b1d0;color:#f4f7f9}.imagify-selector-list .imagify-selector-current-value input:focus+label polygon,.imagify-selector-list .imagify-selector-current-value label:hover polygon,.imagify-selector-list input:checked+label:hover polygon,.imagify-selector-list input:focus+label polygon,.imagify-selector-list label:hover polygon{fill:#FFF}.imagify-selector-list .imagify-selector-current-value input:focus+label polygon[fill="#CCD1D6"],.imagify-selector-list .imagify-selector-current-value label:hover polygon[fill="#CCD1D6"],.imagify-selector-list input:checked+label:hover polygon[fill="#CCD1D6"],.imagify-selector-list input:focus+label polygon[fill="#CCD1D6"],.imagify-selector-list label:hover polygon[fill="#CCD1D6"]{fill:#3694AE}.imagify-selector-list li label{display:block;padding:10px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-selector-list polygon{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-selector-list{position:absolute;top:0;left:0;right:0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.imagify-selector-list[aria-hidden=true]{opacity:0;visibility:hidden;-webkit-transform:translateY(-50%) scale(0);-ms-transform:translateY(-50%) scale(0);transform:translateY(-50%) scale(0)}.imagify-selector-list[aria-hidden=false]{opacity:1;visibility:visible;-webkit-transform:translateY(-50%) scale(1);-ms-transform:translateY(-50%) scale(1);transform:translateY(-50%) scale(1)}.button .imagify-selector-current-value-info{position:relative;padding-right:20px}.button .imagify-selector-current-value-info:after{content:'';position:absolute;right:0;top:50%;margin-top:-3px;border-top:6px solid #7a8996;border-left:6px solid transparent;border-right:6px solid transparent}.imagify-row-complete{margin-top:2em;color:#fff;text-shadow:0 0 2px rgba(0,0,0,.1)}.imagify-row-complete .imagify-ac-chart{margin-top:3px}.imagify-row-complete.imagify-row-complete p{color:#fff;margin:0}@-webkit-keyframes congrate{0%{opacity:0;-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);opacity:1}}@keyframes congrate{0%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.imagify-row-complete.done{-webkit-animation:congrate .5s ease-in-out;animation:congrate .5s ease-in-out}.imagify-all-complete{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:1.5em 0}.imagify-ac-report{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex:auto;flex:auto;padding:35px 20px;background:#8bc34a;min-width:310px}.imagify-ac-chart{width:46px;height:46px;float:left;margin:0 20px 0 10px}.imagify-ac-report-text{overflow:hidden}.imagify-ac-report-text p{line-height:1.3}.imagify-ac-rt-big{font-weight:700;font-size:24px;letter-spacing:.15em;word-spacing:0.15em;text-transform:uppercase}.imagify-ac-leave-review,.imagify-ac-spread-word{-webkit-box-flex:1;-ms-flex:auto;flex:auto;padding:35px 20px;background:#343a49}.imagify-ac-spread-word h3{color:#fff;text-transform:uppercase}.imagify-ac-spread-word .stars{text-decoration:none}.imagify-ac-leave-review{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-cell-checkbox{width:35px}.imagify-cell-checkbox p{margin:0}.imagify-cell-checkbox-loader{display:block;width:27px;height:28px;line-height:0;-webkit-animation:loading 4s infinite linear;animation:loading 4s infinite linear}@-webkit-keyframes loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-cell-checkbox-loader.hidden{display:none;-webkit-animation:none;animation:none}.imagify-cell-label,.imagify-cell-title label{font-size:14px;text-transform:uppercase;letter-spacing:.02em;font-weight:700}.imagify-cell-label{margin-right:10px}.imagify-cell-value{font-size:12px;font-weight:500;color:#7a8996}td.imagify-cell-title{padding-left:0}.imagify-cell-original-size .imagify-cell-label,.imagify-cell-title label{color:#1f2332}.imagify-cell-optimized-size,.imagify-cell-original-size{font-weight:500;color:#7a8996;font-size:12px}.imagify-cell-optimized-size .imagify-cell-label{color:#338ea6}.imagify-cell-count-optimized{font-size:14px;font-weight:700;color:#338ea6}.imagify-cell-count-errors{color:#c51162;font-weight:700;font-size:14px}.imagify-cell-count-errors a{margin-left:5px;color:#7a8996;font-weight:400;font-size:12px}.imagify-cell-filename{max-width:200px}.imagify-cell-status{max-width:145px}.imagify-cell-status .dashicons-warning{margin-right:2px}.imagify-cell-thumbnails{max-width:120px}td.imagify-cell-filename{-o-text-overflow:clip;text-overflow:clip;white-space:nowrap;overflow:hidden}.imagify-bulk-table .imagify-cell-thumbnails{text-align:center}.imagify-cell-percentage,.imagify-cell-savings{color:#46b1ce;font-weight:700}.imagify-bulk-table td.imagify-cell-totaloriginal{padding-right:78px}.imagify-cell-totaloriginal{text-align:right}.imagify-cell-level{width:145px}.imagify-selector-button.imagify-selector-button{border:1px solid #fff;padding:2px 10px}.imagify-selector-button.imagify-selector-button:focus,.imagify-selector-button.imagify-selector-button:hover{border-color:#eee;-webkit-box-shadow:0 4px 8px rgba(0,0,0,.1);box-shadow:0 4px 8px rgba(0,0,0,.1)}.imagifilename,.imagiuploaded{display:inline-block;vertical-align:middle;margin-left:5px;color:#626e7b;font-weight:500}.imagifilename{font-size:12px}.imagiuploaded{width:33px;height:33px;margin-right:5px;margin-left:-8px;overflow:hidden;background:url(../images/upload-image.png) 0 0 no-repeat;background-size:cover}.imagiuploaded img{max-width:100%;height:auto}.imagistatus{color:#8ca6b3;text-transform:uppercase;font-weight:700}.imagistatus .dashicons{margin-right:5px}.status-compressing{color:#46b1ce}.status-error{color:#ce0b24}.status-warning{color:#f5a623}.status-complete{color:#8cc152}.imagify-bulk-submit{padding:15px 0 8px 0}.imagify-settings .button-primary.button-primary[disabled]{color:#4a4a4a!important;background:#d9e4eb!important;text-shadow:none!important;cursor:not-allowed}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}.imagify-cell-status .dashicons-admin-generic{-webkit-transform-origin:48.75% 51.75%;-ms-transform-origin:48.75% 51.75%;transform-origin:48.75% 51.75%}@-webkit-keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-col.imagify-col.imagify-account-info-col{width:465px}@media (max-width:1245px){.imagify-col.imagify-col.imagify-account-info-col{width:auto;max-width:none;float:none}.imagify-columns .col-overview.col-overview{float:none;width:auto;padding-left:0;padding-right:0}}@media (max-width:1200px){.imagify-settings .imagify-title .imagify-logo{display:none}}@media (max-width:940px){.imagify-bulk-table-container tbody,.imagify-bulk-table-container tr{text-align:left}.imagify-bulk-table-container tbody,.imagify-bulk-table-container tbody td,.imagify-bulk-table-container tbody tr{display:block}.imagify-bulk-table-container tbody td{padding:20px}.imagify-cell-checkbox,.imagify-cell-title{float:left}.imagify-cell-checkbox{width:26px}.imagify-bulk-table-container .imagify-cell-title{padding-left:10px;width:calc(100% - 96px)}.imagify-cell-count-optimized:before,.imagify-cell-title:after{content:'';display:table;clear:both;width:100%}.imagify-cell-count-optimized{clear:both}.imagify-bulk-table-container .imagify-cell-title~td{display:inline-block}.imagify-bulk-table-container td.imagify-cell-level{display:block}}@media (max-width:918px){.imagify-settings .imagify-title{display:block}.imagify-settings .imagify-documentation-link-box{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}.hidden{display:none}@media (max-width:782px){.imagify-account-info-col .imagify-options-title,.imagify-newbie .imagify-table-header,.imagify-table-header{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-newbie .imagify-th-titles{width:100%}.imagify-newbie .imagify-th-title.imagify-th-title{color:#343a49;font-size:16px;padding-bottom:20px}.imagify-newbie .imagify-th-titles .dashicons,.imagify-newbie .imagify-th-titles .dashicons:before{margin:0}.imagify-newbie .imagify-th-action{display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%}.imagify-newbie .imagify-th-action a{max-width:100%;font-size:11px;padding:11px 12px}.imagify-columns .col-chart.col-chart{text-align:center}.imagify-doughnut-legend{margin-top:18px;width:60%;margin:10px auto}.imagify-account-info-col .imagify-options-title>a{-ms-flex-preferred-size:unset;flex-basis:unset;margin:auto}.imagify-th-title.imagify-th-title.imagify-th-title{font-size:20px}.imagify-account-info-col p.imagify-meteo-title{font-size:20px}.imagify-bulk-table-container tbody td{padding:10px}.imagify-col-content .imagify-space-left{width:auto;margin:0 0 15px 0}} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/files-list.css b/wp/wp-content/plugins/imagify/assets/css/files-list.css new file mode 100644 index 00000000..d566e496 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/files-list.css @@ -0,0 +1,171 @@ +/* Filter block */ +.imagify-files-list .wp-filter { + padding: 0 20px 15px; +} +.imagify-files-list .filter-items select { + height: auto; + padding: 2px 20px 3px 6px; + margin: 15px 12px 0 0; + max-width: 100%; +} +.imagify-files-list .filter-items .button { + height: auto; + padding: 2px 12px 3px; + margin-top: 15px; +} +@media screen and (max-width: 782px) { + .imagify-files-list .filter-items .button { + margin-bottom: 0; + line-height: 2.15384615; + padding: 0 12px; + } +} + +/* Empty table */ +.imagify-files-list .no-items td { + padding: 35px; + text-align: center; + font-size: 18px; +} +.imagify-files-list .no-items td a { + text-decoration: underline; +} + +/* Th sortable */ +.imagify-files-list .sortable a { + color: #000; +} + +/* Global links */ +.imagify-files-list a { + color: #3694AE; +} + +/* Global TDs */ +.imagify-files-list tbody td, +.imagify-files-list tbody th, +.imagify-files-list.imagify-files-list tbody .check-column { + vertical-align: middle; + padding-top: 20px; + padding-bottom: 20px; + color: #626E7B; +} + +/* Col Title */ +.imagify-files-list .column-title strong { + font-weight: normal; + font-size: 14px; +} +.imagify-files-list .column-title strong a { + display: inline-flex; + align-items: center; + word-break: break-all; + word-wrap: break-word; + font-weight: normal; +} +.imagify-files-list .filename { + font-size: 12px; + font-weight: bold; +} +.imagify-files-list .media-icon { + position: relative; + width: 60px; + overflow: hidden; + flex-shrink: 0; +} +.media-icon .centered { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + transform: translate( 50%, 50% ); +} +.media-icon .centered img { + position: absolute; + left: 0; + top: 0; + transform: translate( -50%, -50% ); +} +table.media .column-title .media-icon.landscape img { + max-width: none; + width: auto; + height: 60px; +} +table.media .column-title .media-icon.portrait img { + width: 60px; +} + +/* Optimization datas Col */ +.imagify-files-list ul.imagify-datas-list { + font-size: 11px; +} +.imagify-files-list ul.imagify-datas-list .big { + font-size: 13px; +} +.imagify-files-list ul.imagify-datas-list span.imagify-chart-value { + font-size: 12px; +} +.imagify-files-list ul.imagify-datas-list .imagify-chart-container { + margin-right: 2px; +} +.imagify-files-list ul.imagify-datas-list canvas { + width: 18px!important; + height: 18px!important; +} + +/* Optimization Level Col */ +.imagify-files-list .optimization_level { + text-align: center; + font-weight: bold; + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.02em; +} +.imagify-files-list .column-optimization_level, +.imagify-files-list .column-optimization_level a { + text-align: center; +} +.imagify-files-list .column-optimization_level a span { + float: none; + display: inline-block; + vertical-align: middle; +} +.imagify-files-list .column-optimization_level .sorting-indicator { + vertical-align: -10px; +} + +/* Actions col */ +.imagify-files-list .column-actions .button, +.imagify-files-list .column-actions .button-primary { + padding: 5px 20px; + font-size: 14px; + height: auto; +} +.imagify-files-list .column-actions .button-primary { + background: #3694AE; + color: #FFF; + border: 0; + box-shadow: none; + text-shadow: none; +} +.imagify-files-list .column-actions a, +.status a.button-imagify-refresh-status { + display: inline-block; + margin: .3em 0; + font-size: 12px; + font-weight: bold; +} +.imagify-files-list .imagify-status-already_optimized { + font-weight: bold; + color: #8BC34A; +} +.imagify-files-list .column-actions a .dashicons, +.imagify-files-list .column-actions a .dashicons:before, +.status a.button-imagify-refresh-status .dashicons, +.status a.button-imagify-refresh-status .dashicons:before { + margin-right: 2px; + font-size: 17px; + height: 17px; + width: 17px; +} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/files-list.min.css b/wp/wp-content/plugins/imagify/assets/css/files-list.min.css new file mode 100644 index 00000000..2c73fd0a --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/files-list.min.css @@ -0,0 +1 @@ +.imagify-files-list .wp-filter{padding:0 20px 15px}.imagify-files-list .filter-items select{height:auto;padding:2px 20px 3px 6px;margin:15px 12px 0 0;max-width:100%}.imagify-files-list .filter-items .button{height:auto;padding:2px 12px 3px;margin-top:15px}@media screen and (max-width:782px){.imagify-files-list .filter-items .button{margin-bottom:0;line-height:2.15384615;padding:0 12px}}.imagify-files-list .no-items td{padding:35px;text-align:center;font-size:18px}.imagify-files-list .no-items td a{text-decoration:underline}.imagify-files-list .sortable a{color:#000}.imagify-files-list a{color:#3694ae}.imagify-files-list tbody td,.imagify-files-list tbody th,.imagify-files-list.imagify-files-list tbody .check-column{vertical-align:middle;padding-top:20px;padding-bottom:20px;color:#626e7b}.imagify-files-list .column-title strong{font-weight:400;font-size:14px}.imagify-files-list .column-title strong a{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;word-break:break-all;word-wrap:break-word;font-weight:400}.imagify-files-list .filename{font-size:12px;font-weight:700}.imagify-files-list .media-icon{position:relative;width:60px;overflow:hidden;-ms-flex-negative:0;flex-shrink:0}.media-icon .centered{position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:translate(50%,50%);-ms-transform:translate(50%,50%);transform:translate(50%,50%)}.media-icon .centered img{position:absolute;left:0;top:0;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}table.media .column-title .media-icon.landscape img{max-width:none;width:auto;height:60px}table.media .column-title .media-icon.portrait img{width:60px}.imagify-files-list ul.imagify-datas-list{font-size:11px}.imagify-files-list ul.imagify-datas-list .big{font-size:13px}.imagify-files-list ul.imagify-datas-list span.imagify-chart-value{font-size:12px}.imagify-files-list ul.imagify-datas-list .imagify-chart-container{margin-right:2px}.imagify-files-list ul.imagify-datas-list canvas{width:18px!important;height:18px!important}.imagify-files-list .optimization_level{text-align:center;font-weight:700;font-size:14px;text-transform:uppercase;letter-spacing:.02em}.imagify-files-list .column-optimization_level,.imagify-files-list .column-optimization_level a{text-align:center}.imagify-files-list .column-optimization_level a span{float:none;display:inline-block;vertical-align:middle}.imagify-files-list .column-optimization_level .sorting-indicator{vertical-align:-10px}.imagify-files-list .column-actions .button,.imagify-files-list .column-actions .button-primary{padding:5px 20px;font-size:14px;height:auto}.imagify-files-list .column-actions .button-primary{background:#3694ae;color:#fff;border:0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none}.imagify-files-list .column-actions a,.status a.button-imagify-refresh-status{display:inline-block;margin:.3em 0;font-size:12px;font-weight:700}.imagify-files-list .imagify-status-already_optimized{font-weight:700;color:#8bc34a}.imagify-files-list .column-actions a .dashicons,.imagify-files-list .column-actions a .dashicons:before,.status a.button-imagify-refresh-status .dashicons,.status a.button-imagify-refresh-status .dashicons:before{margin-right:2px;font-size:17px;height:17px;width:17px} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/notices.css b/wp/wp-content/plugins/imagify/assets/css/notices.css new file mode 100644 index 00000000..0856aa9a --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/notices.css @@ -0,0 +1,376 @@ +/* Error Notice */ +.imagify-plugins-error { + overflow: hidden; + padding-left: 20px; + list-style-type: disc +} + +.imagify-plugins-error li { + width: 300px; + line-height: 30px +} + +@media (max-width: 570px) { + .imagify-plugins-error li { + width: auto; + } +} + +/* Notice close link */ +.imagify-notice-dismiss.notice-dismiss { + text-decoration: none; +} + +/* Notices in Imagify related pages */ +.media_page_imagify-bulk-optimization .notice, +body[class*="_imagify-ngg-bulk-optimization"] .notice, +.settings_page_imagify .notice { + margin-right: 20px; + margin-left: 2px; +} + +.imagify-notice .button-mini { + padding: 2px 10px; + font-size: 13px; +} + +.imagify-notice.imagify-notice { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding: 0; + margin: 10px 20px 10px 2px; + border: 0 none; + background: #4A5362; + box-shadow: none; + color: #FFF; +} + +@media (max-width: 782px) { + .imagify-notice.imagify-notice, + .imagify-welcome { + margin-right: 12px; + } +} + +@media (max-width: 450px) { + .imagify-notice.imagify-notice { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} + +.wrap .imagify-notice { + margin: 5px 15px 2px; + position: relative; +} + +.imagify-notice-logo { + padding: 18px 23px; + background: #40B1D0; +} + +.imagify-notice-logo .imagify-logo { + opacity: 1; +} + +.imagify-flex-notice-content .imagify-notice-logo { + display: flex; + align-items: center; +} + +.updated .imagify-notice-logo { + background: #8BC34A; +} + +.error .imagify-notice-logo { + background: #C51162; +} + +.imagify-notice-title { + font-size: 15px; +} + +.imagify-notice-content { + padding: 5px 23px; +} + +.imagify-notice-content.imagify-notice-content p { + margin: 0.65em 0; +} + +.imagify-flex-notice-content .imagify-notice-content { + display: flex; + flex-wrap: wrap; + padding: 0; +} + +.imagify-flex-notice-content .imagify-notice-content > * { + padding: 10px 20px; +} + +.imagify-flex-notice-content .imagify-meteo-icon img { + height: 100%; + margin-top: 6px; +} + +.imagify-notice-quota [class^="imagify-bar-"] { + background: #1F2332; +} + +.imagify-notice-quota .imagify-space-left p { + margin: 0; +} + +.imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota { + padding-right: 24px; + padding-left: 8px; + background: #343A49; +} + +.imagify-notice a { + color: #40B1D0; +} + +.imagify-notice a:hover, +.imagify-notice a:focus { + color: #FEE102; +} + +.imagify-notice code { + background: rgba(0, 0, 0, 0.4) none repeat scroll 0 0; +} + +.imagify-notice .imagify-rate-us.imagify-rate-us { + text-align: left; +} + +.imagify-notice .imagify-rate-us .stars { + margin: 0; +} + +/** + * == Welcome section + */ +.imagify-welcome { + margin: 30px 20px 0 0; +} + +.imagify-welcome .baseline { + display: inline-block; + margin: .2em 0 0 2em; + font-size: 17px; +} + +.imagify-welcome .imagify-logo { + vertical-align: middle; +} + +.imagify-welcome-remove { + position: absolute; + top: 50%; + right: 15px; + margin-top: -8px; + color: #FFF; + text-decoration: none; +} + +/* Welcome columns */ +.imagify-columns [class^="col-"] img { + float: left; + margin-right: 18px; +} + +.imagify-col-content { + overflow: hidden; +} + +.imagify-col-title { + margin: 0 0 15px 0; + font-size: 23px; +} + +.counter .imagify-col-title:before { + counter-increment: cols; + content: counter(cols) ". "; + color: #40B1D0; +} + +.imagify-col-desc { + color: #5F758E; + margin-bottom: 2em; +} + +/* WP Rocket notice */ +.imagify-rkt-notice.imagify-rkt-notice { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + -ms-grid-row-align: center; + align-items: center; + padding: 10px 45px 10px 0; + border: 0 none; + box-shadow: none; + color: #FFF; + background: #1F2332; +} + +.media_page_imagify-bulk-optimization .imagify-rkt-notice { + margin-left: 2px; + margin-right: 20px; +} + +@media (max-width: 782px) { + .media_page_imagify-bulk-optimization .imagify-rkt-notice { + margin-left: 0; + margin-right: 12px; + } +} + +.imagify-rkt-notice .imagify-cross { + position: absolute; + right: 8px; + top: 50%; + width: 22px; + height: 22px; + padding: 0; + margin-top: -11px; + background: transparent; + color: rgba(255, 255, 255, .5); + text-decoration: none; + border-radius: 50%; + transition: all .275s; +} + +.imagify-rkt-notice .imagify-cross .dashicons { + position: relative; + top: 2px; + left: 1px; + transition: all .275s; +} + +.imagify-rkt-notice .imagify-cross:hover { + background: #FFF; +} + +.imagify-rkt-notice .imagify-cross:hover .dashicons { + color: #412355; +} + +.imagify-rkt-notice .imagify-rkt-cta, +.imagify-rkt-notice .imagify-rkt-logo, +.imagify-rkt-notice .imagify-rkt-coupon { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.imagify-rkt-notice .imagify-rkt-logo { + width: 150px !important; /* !important because of a dirtugly WP Engine code */ + text-align: center; + padding: 0 25px 0 30px; + line-height: 0.8; +} + +.imagify-rkt-notice .imagify-rkt-msg { + width: 100% !important; /* !important because of a dirtugly WP Engine code */ + color: #FFF; + padding: 0 15px; + font-size: 14px; + line-height: 1.6; +} + +.imagify-rkt-notice .imagify-rkt-coupon { + width: 150px !important; /* !important because of a dirtugly WP Engine code */ + padding: 0 15px; +} + +.imagify-rkt-notice .imagify-rkt-coupon-code { + padding: 5px 10px; + font-size: 23px; + font-weight: bold; + border: 1px dashed #F56640; + color: #F56640; +} + +.imagify-rkt-notice .imagify-rkt-cta { + width: 250px !important; /* !important because of a dirtugly WP Engine code */ + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-flex-basis: 200px; + -ms-flex-preferred-size: 200px; + flex-basis: 200px; +} + +.imagify-rkt-notice .button.button { + position: relative; + top: -1px; + height: auto; + font-weight: 600; + font-size: 14px; + border: 0 none; + padding: 9px 18px 9px; + background: #F56640; + box-shadow: none; + text-shadow: none !important; +} + +@media (max-width: 880px) { + .imagify-rkt-notice { + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + } + + .imagify-rkt-notice .imagify-rkt-msg, + .imagify-rkt-notice .imagify-rkt-cta, + .imagify-rkt-notice .imagify-rkt-logo { + text-align: left; + padding: 5px 15px; + } + + .imagify-cross.imagify-cross { + top: 8px; + margin-top: 0; + } + + .imagify-rkt-notice .imagify-cross .dashicons { + top: 1px; + } +} + +@media (max-width: 782px) { + .imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota { + width: 100%; + } + + .imagify-notice-quota-btn-container{ + text-align: center; + width: 100%; + } + .imagify-notice-quota-btn-container .imagify-button{ + display: inline-block; + } +} + +.imagify-notice-bulk-complete { + display: flex; + align-items: center; + padding: 12px 0; +} + +.imagify-notice-bulk-complete-logo { + padding-right: 12px; +} diff --git a/wp/wp-content/plugins/imagify/assets/css/notices.min.css b/wp/wp-content/plugins/imagify/assets/css/notices.min.css new file mode 100644 index 00000000..796acf60 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/notices.min.css @@ -0,0 +1 @@ +.imagify-plugins-error{overflow:hidden;padding-left:20px;list-style-type:disc}.imagify-plugins-error li{width:300px;line-height:30px}@media (max-width:570px){.imagify-plugins-error li{width:auto}}.imagify-notice-dismiss.notice-dismiss{text-decoration:none}.media_page_imagify-bulk-optimization .notice,.settings_page_imagify .notice,body[class*="_imagify-ngg-bulk-optimization"] .notice{margin-right:20px;margin-left:2px}.imagify-notice .button-mini{padding:2px 10px;font-size:13px}.imagify-notice.imagify-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0;margin:10px 20px 10px 2px;border:0 none;background:#4a5362;-webkit-box-shadow:none;box-shadow:none;color:#fff}@media (max-width:782px){.imagify-notice.imagify-notice,.imagify-welcome{margin-right:12px}}@media (max-width:450px){.imagify-notice.imagify-notice{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wrap .imagify-notice{margin:5px 15px 2px;position:relative}.imagify-notice-logo{padding:18px 23px;background:#40b1d0}.imagify-notice-logo .imagify-logo{opacity:1}.imagify-flex-notice-content .imagify-notice-logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.updated .imagify-notice-logo{background:#8bc34a}.error .imagify-notice-logo{background:#c51162}.imagify-notice-title{font-size:15px}.imagify-notice-content{padding:5px 23px}.imagify-notice-content.imagify-notice-content p{margin:.65em 0}.imagify-flex-notice-content .imagify-notice-content{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0}.imagify-flex-notice-content .imagify-notice-content>*{padding:10px 20px}.imagify-flex-notice-content .imagify-meteo-icon img{height:100%;margin-top:6px}.imagify-notice-quota [class^=imagify-bar-]{background:#1f2332}.imagify-notice-quota .imagify-space-left p{margin:0}.imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota{padding-right:24px;padding-left:8px;background:#343a49}.imagify-notice a{color:#40b1d0}.imagify-notice a:focus,.imagify-notice a:hover{color:#fee102}.imagify-notice code{background:rgba(0,0,0,.4) none repeat scroll 0 0}.imagify-notice .imagify-rate-us.imagify-rate-us{text-align:left}.imagify-notice .imagify-rate-us .stars{margin:0}.imagify-welcome{margin:30px 20px 0 0}.imagify-welcome .baseline{display:inline-block;margin:.2em 0 0 2em;font-size:17px}.imagify-welcome .imagify-logo{vertical-align:middle}.imagify-welcome-remove{position:absolute;top:50%;right:15px;margin-top:-8px;color:#fff;text-decoration:none}.imagify-columns [class^=col-] img{float:left;margin-right:18px}.imagify-col-content{overflow:hidden}.imagify-col-title{margin:0 0 15px 0;font-size:23px}.counter .imagify-col-title:before{counter-increment:cols;content:counter(cols) ". ";color:#40b1d0}.imagify-col-desc{color:#5f758e;margin-bottom:2em}.imagify-rkt-notice.imagify-rkt-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:10px 45px 10px 0;border:0 none;-webkit-box-shadow:none;box-shadow:none;color:#fff;background:#1f2332}.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:2px;margin-right:20px}@media (max-width:782px){.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:0;margin-right:12px}}.imagify-rkt-notice .imagify-cross{position:absolute;right:8px;top:50%;width:22px;height:22px;padding:0;margin-top:-11px;background:0 0;color:rgba(255,255,255,.5);text-decoration:none;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross .dashicons{position:relative;top:2px;left:1px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross:hover{background:#fff}.imagify-rkt-notice .imagify-cross:hover .dashicons{color:#412355}.imagify-rkt-notice .imagify-rkt-coupon,.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo{-ms-flex-negative:0;flex-shrink:0}.imagify-rkt-notice .imagify-rkt-logo{width:150px!important;text-align:center;padding:0 25px 0 30px;line-height:.8}.imagify-rkt-notice .imagify-rkt-msg{width:100%!important;color:#fff;padding:0 15px;font-size:14px;line-height:1.6}.imagify-rkt-notice .imagify-rkt-coupon{width:150px!important;padding:0 15px}.imagify-rkt-notice .imagify-rkt-coupon-code{padding:5px 10px;font-size:23px;font-weight:700;border:1px dashed #f56640;color:#f56640}.imagify-rkt-notice .imagify-rkt-cta{width:250px!important;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:200px;flex-basis:200px}.imagify-rkt-notice .button.button{position:relative;top:-1px;height:auto;font-weight:600;font-size:14px;border:0 none;padding:9px 18px 9px;background:#f56640;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}@media (max-width:880px){.imagify-rkt-notice{-ms-flex-wrap:wrap;flex-wrap:wrap}.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo,.imagify-rkt-notice .imagify-rkt-msg{text-align:left;padding:5px 15px}.imagify-cross.imagify-cross{top:8px;margin-top:0}.imagify-rkt-notice .imagify-cross .dashicons{top:1px}}@media (max-width:782px){.imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota{width:100%}.imagify-notice-quota-btn-container{text-align:center;width:100%}.imagify-notice-quota-btn-container .imagify-button{display:inline-block}}.imagify-notice-bulk-complete{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0}.imagify-notice-bulk-complete-logo{padding-right:12px} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/options.css b/wp/wp-content/plugins/imagify/assets/css/options.css new file mode 100644 index 00000000..ba91becf --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/options.css @@ -0,0 +1,968 @@ +.wrap.imagify-settings { + margin-right: 0; +} +.imagify-settings.imagify-have-rocket { + margin-right: 20px; +} + +/* The field that checks the API Key */ +#imagify-check-api-container { + display: block; + margin-top: 6px; + font-weight: bold; +} + +#imagify-check-api-container .dashicons { + font-size: 25px; +} + +#imagify-check-api-container .dashicons-no:before { + color: #f06e57; + vertical-align: -1px; +} + +#imagify-check-api-container .imagify-icon { + font-size: 1.8em; + margin-right: 3px; + margin-left: 1px; + color: #8BC34A; + vertical-align: -2px; +} + +.imagify-account-info-col .imagify-api-line { + padding: 22px 26px; + background: #343A49 +} + +.imagify-api-line label, +p.imagify-api-key-invite-title { + display: block; + margin-bottom: 6px; + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.02em; + font-weight: bold; + color: #343A49; +} +.imagify-account-info-col .imagify-api-line label { + color: #E5EBEF; + display: inline-block; +} +.imagify-api-line.imagify-api-line input[type="text"] { + width: 100%; + padding: 6px 10px; + border: 1px solid #40B1D0; + font-family: "PT Mono", "Consolas", monospace; + font-size: 14px; + letter-spacing: 0.01em; + font-weight: bold; + color: #40B1D0; + background: transparent; + box-shadow: none; +} + +.imagify-no-api-key .imagify-api-line { + margin: 3em 0 0 0; + padding: 2em 0 0; +} +.imagify-no-api-key .imagify-api-line input[type="text"] { + margin-top: 5px; + width: 400px; + max-width: 100%; +} +.imagify-settings .imagify-no-api-key div.submit.submit { + border: 0; + padding: 0 16px; + margin-top: 0; + background: #FFF; +} +.imagify-settings .imagify-no-api-key div.submit.submit p { + padding-bottom: 0; +} + +.imagify-options-title { + margin: .75em 0 0 0; + font-size: 24px; + letter-spacing: 0.02em; + font-weight: bold; + color: #343A49; +} + +.imagify-options-subtitle { + padding-bottom: .3em; + margin-bottom: 20px; + border-bottom: 1px solid #D2D3D6; + font-size: 14px; + letter-spacing: 0.01em; + font-weight: bold; + text-transform: uppercase; + color: #626E7B; +} + +.imagify-options-subtitle a { + font-size: 12px; + color: #338EA6; + text-transform: none; + letter-spacing: 0; +} + +.imagify-options-subtitle .imagify-info { + margin-left: 15px; +} + +.imagify-setting-line { + border-top: 1px solid #D2D3D6; + padding: 25px 0 13px; + margin: 1em 0; +} +.imagify-options-subtitle + .imagify-setting-line { + border-top: 0; + padding-top: 8px; +} + +/* 3 inlined buttons + Visual comparison */ +.imagify-setting-optim-level { + display: flex; + flex-wrap: wrap; + align-items: center; +} + +.imagify-setting-optim-level > p { + margin: 0; +} + +.imagify-setting-optim-level .imagify-info { + margin-top: 10px; +} + +.imagify-setting-optim-level .imagify-error { + margin: 10px 0 0 0; +} + +.imagify-setting-optim-level .imagify-error a { + color: #fff; +} + +.imagify-setting-optim-level .imagify-inline-options { + flex-basis: 60%; + flex-grow: 1; + width: auto; + display: flex; + background: #2E3243; + border-radius: 3px; +} +.imagify-setting-optim-level .imagify-inline-options-error { + background: #ccc; +} + +.imagify-setting-optim-level .imagify-inline-options label { + display: block !important; + width: 100%; + font-size: 14px !important; + border-radius: 3px!important; +} +.imagify-setting-optim-level .imagify-visual-comparison-text { + flex-basis: 40%; + flex-shrink: 1; + padding-left: 20px; + margin-top: 20px; + color: #626E7B; + box-sizing: border-box; +} +.imagify-setting-optim-level.imagify-setting-optim-level .imagify-visual-comparison-btn { + padding-top: 5px; + margin-top: 2px; + border-radius: 2px; + text-transform: none; + letter-spacing: 0; + text-shadow: none!important; +} + +/* TODO: maybe remove table lines, we don't use theme anymore… */ +@media (max-width: 782px) { + .imagify-settings .form-table th { + padding-top: 2em; + padding-bottom: .5em; + } +} +.imagify-settings .form-table td { + vertical-align: top; +} +.imagify-settings .form-table th span { + cursor: pointer; +} +.imagify-middle th { + padding-top: 35px; +} + +.imagify-settings div.submit.submit { + border-top: 1px solid #D9D9D9; + margin-top: 2em; + padding: 18px 0 7px 30px; +} +.imagify-settings .hidden + div.submit.submit { + margin-top: -1px; +} +.imagify-settings p.submit { + float: left; + margin-top: 0; +} +.imagify-settings p.submit .button { + margin: 0 5px; +} + +.imagify-sub-header th { + text-align: right; +} +.imagify-sub-header .form-table { + margin: 0; +} +.imagify-sub-header th, +.imagify-sub-header td { + padding-top: 0; + padding-bottom: 0; +} + +.imagify-sub-header [for="api_key"] { + padding-top: 5px; +} + +@media (max-width: 1120px) { + .imagify-settings .imagify-logo-block { + margin-right: 0; + } + .imagify-settings .imagify-rate-us.imagify-rate-us { + margin: 1em 0 -1em; + } +} + +.imagify-settings .imagify-rate-us { + margin-right: 25px; + margin-left: auto; +} + +/* Label & fake labels */ +label + .imagify-info, +.imagify-visual-label { + display: inline-block; + width: 550px; + max-width: calc(100% - 38px); + margin-left: 38px; + padding-right: 25px; +} +.imagify-options-line { + -webkit-transition: opacity .3s; + transition: opacity .3s; +} +label ~ .imagify-options-line { + display: block; + margin: 8px 0 20px 40px; + font-size: 14px; +} +.imagify-options-line + .imagify-info { + margin-left: 38px; +} +label + .imagify-info { + margin-top: 10px; +} +.imagify-options-line + .imagify-info + .imagify-options-line { + margin-top: 20px; +} +.imagify-visual-label { + vertical-align: -5px; +} +label[for="imagify_sizes_full"] + .imagify-info { + vertical-align: middle; +} + +.imagify-settings.imagify-settings [type="checkbox"]:not(:checked) + label ~ .imagify-options-line, +.imagify-settings.imagify-settings [type="checkbox"]:not(:checked) + label .imagify-visual-label, +:checked + label ~ .imagify-options-line :checked + label ~ .imagify-options-line .imagify-faded { + opacity: .5; +} +.imagify-settings.imagify-settings [type="checkbox"]:checked + label ~ .imagify-options-line, +.imagify-settings.imagify-settings [type="checkbox"]:checked + label .imagify-visual-label, +.imagify-settings.imagify-settings :not(:checked) + label ~ .imagify-options-line :not(:checked) + label ~ .imagify-options-line { + opacity: 1; +} + +.imagify-radio-group + .imagify-options-line { + display: block; + margin: 0 0 0 1.7em; + font-size: 14px; +} + +.imagify-checkbox-marged { + max-width: 500px; + margin-left: 45px; +} + +.imagify-settings [type="text"], +.imagify-settings [type="number"] { + width: 20em; + max-width: 100%; + height: auto; + padding: 6px; + margin: 0 6px; + border: 1px solid #8BA6B4; + box-shadow: none; + border-radius: 2px; + color: #338EA6; + font-weight: bold; +} +.imagify-settings [type="number"] { + width: 5em; +} +.imagify-settings ::-webkit-input-placeholder { + color: #B1B1B1; + font-weight: 400; +} +.imagify-settings ::-moz-placeholder { + color: #B1B1B1; + font-weight: 400; + opacity: 1; +} +.imagify-settings :-ms-input-placeholder { + color: #B1B1B1; + font-weight: 400; +} +.imagify-settings :-moz-placeholder { + color: #B1B1B1; + font-weight: 400; + opacity: 1; +} +.imagify-settings ::placeholder { + color: #B1B1B1; + font-weight: 400; +} + +.imagify-menu-bar-img { + box-sizing: border-box; + max-width: 100%; + width: 350px; + height: auto; + margin-top: 0; + border: 1px solid #8BA6B4; +} + +/* Layout */ +.imagify-col.imagify-main { + float: left; + width: calc(100% - 320px); + padding-left: 0; + padding-right: 0; +} +.imagify-have-rocket .imagify-main { + float: none; + width: 1265px; + max-width: 100%; +} +.imagify-sidebar { + float: left; + width: 300px; + max-width: 100%; +} + +/* Sidebar with Ads */ +.imagify-sidebar-section { + border: 1px solid #BBB; + background: #1F2332; +} +.imagify-sidebar-section + .imagify-sidebar-section { + margin-top: 2em; +} + +@media (max-width: 820px) { + .imagify-settings { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } + .imagify-main { + width: auto; + float: none; + } + .imagify-sidebar { + order: 2; + float: none; + width: auto; + max-width: none; + margin-left: 0; + margin-top: 25px; + } + .wp-media-products { + text-align: center; + } + .wp-media-products li { + display: inline-block; + width: 100%; + max-width: 276px; + } +} +@media (min-width: 1400px) { + .imagify-main { + width: 74%; + } +} +.imagify-sidebar-section { + position: relative; + padding: 10px 20px; + text-align: center; + color: #F2F2F2; +} +.imagify-sidebar-close { + position: absolute; + top: 8px; + right: 12px; + text-decoration: none; +} +.imagify-sidebar-close i { + font-size: 2em; + color: rgba(255,255,255,.5); +} +p.imagify-sidebar-title { + margin: 1.2em 0 1.5em; + text-align: left; + color: #F56640; + text-transform: uppercase; + letter-spacing: 0.015em; + word-spacing: 0.015em; + font-weight: bold; +} +p.imagify-sidebar-description { + margin: 1.5em 0; + text-align: left; + font-weight: 500; + color: #F2F2F2; +} +.imagify-sidebar-description strong { + color: #39CE9A; +} +.imagify-rocket-cta-promo { + display: block; + padding: 8px 10px; + margin: 1.3em 0 .5em 0; + border: 2px dashed #F56640; + border-radius: 3px; + font-size: 18px; + font-weight: bold; + color: #F56640; +} +.imagify-rocket-cta-promo strong { + color: #F2F2F2; +} +a.btn-rocket { + display: block; + font-size: 15px; + padding: 10px 12px; + margin: 0 0 1.5em; + background: #F56640; + border-radius: 3px; + color: #F2F2F2; + text-transform: uppercase; + font-weight: bold; + text-decoration: none; +} +a.btn-rocket:hover, +a.btn-rocket:focus { + background: #AC2B15; +} + +.imagify-sidebar-section ul { + margin-top: 20px; +} + +.imagify-sidebar-section li { + position: relative; + margin: 1.2em 0; + padding-left: 25px; + text-align: left; +} +.imagify-sidebar-section li:before { + content: "✓"; + position: absolute; + left: 0; top: 0; + color: #39CE9A; + font-size: 18px; +} + +/* Menu in admin bar label exception */ +label[for="imagify_admin_bar_menu"], +label[for="imagify_partner_links"] { + font-weight: normal !important; + color: #626E7B !important; +} + +/* Select / Unselect all buttons */ +.imagify-select-all-buttons { + margin-top: 8px; +} +.imagify-link-like.imagify-select-all { + font-weight: bold; + font-size: 12px; + color: #3694AE; +} +.imagify-select-all.imagify-is-inactive { + color: inherit; + text-decoration: none; + cursor: default; +} + +/* Add Themes box */ +.imagify-fts-header { + padding: 10px 16px; + background: #343A49; + color: #FFF; +} +.imagify-fts-header i { + font-size: 1.8em; + margin-right: 12px; +} +.imagify-fts-header p { + margin: 0; + color: #FFF; +} +.imagify-fts-header strong, +#imagify-add-themes-to-custom-folder strong { + color: #40B1D0; + font-weight: bold; +} + +.imagify-fts-content { + padding: 16px; + background: #F4F7F9; + border: 1px solid #CDD0D4; + border-top: 0; +} + +.imagify-fts-content p { + margin-top: 0; +} + +.imagify-kindof-title { + margin-top: 2em; + padding: 0 0 10px 0; + border-bottom: 1px solid #D2D3D6; + justify-content: space-between; + font-weight: bold; +} +.imagify-settings .imagify-button-mini { + padding: 4px 13px 4px 10px; +} +.imagify-settings .imagify-button-mini .dashicons-plus { + vertical-align: -7.5px; +} +.imagify-settings .imagify-button-mini.imagify-button-primary:hover, +.imagify-settings .imagify-button-mini.imagify-button-primary:focus { + color: #FFF; +} + +p.imagify-custom-folder-line { + position: relative; + margin: 0; + padding: 12px 15px; + color: #4A5362; + font-weight: 500; + transition: all .75s; +} +.imagify-custom-folder-line.imagify-will-remove { + background: #C51162; + color: #FFF; + transform: translateX(-120px); + opacity: 0; +} +.imagify-custom-folder-line:first-child { + margin-top: -.5em; +} +.imagify-custom-folder-line + .imagify-custom-folder-line { + border-top: 1px solid #E9EFF2; +} + +.imagify-custom-folders-remove { + position: absolute; + right: 0; + top: 6px; + border: 0; + padding: 5px 10px 4px; + box-shadow: none; + color: #7A8996; + border-radius: 16px; + font-size: 13px; + line-height: 18px; + background: #FFF; + transition: all .275s; + cursor: pointer; +} +.imagify-custom-folders-remove-text { + max-width: 0; + overflow: hidden; + white-space: nowrap; + display: inline-block; + transform: scale(0); + opacity: 0; + transition: all .275s; +} +.imagify-custom-folders-remove:hover, +.imagify-custom-folders-remove:focus { + background: #D9EFF6; + color: #225E6E; +} +.imagify-custom-folders-remove:hover .imagify-custom-folders-remove-text, +.imagify-custom-folders-remove:focus .imagify-custom-folders-remove-text { + max-width: 6em; + transform: scale(1); + opacity: 1; +} + +/* Progress bar */ +.imagify-settings .progress { + height: 8px; + margin-top: 1em; + background: #343A49; +} +.imagify-settings .bar { + position: relative; + width: 1px; + height: 8px; + background: #46B1CE; + -webkit-transition: width .5s; + transition: width .5s; +} +.imagify-settings .percent { + position: absolute; + top: 6px; + right: 0; + padding: 0 5px; + line-height: 1.85; + font-size: 14px; + font-weight: bold; + color: #40B1D0; +} + +/* Icon rotation */ +.dashicons.rotate { + -webkit-animation: icon-rotate 2.6s infinite linear; + animation: icon-rotate 2.6s infinite linear; +} + +@-webkit-keyframes icon-rotate { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes icon-rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* Files tree Part */ +.imagify-add-custom-folder + .imagify-loader { + display: none; + vertical-align: middle; +} +.imagify-add-custom-folder[disabled] + .imagify-loader { + display: inline-block; +} + +.imagify-folders-information { + position: relative; + margin: -5px 0 20px 0; + padding: 10px 10px 10px 40px; + text-align: left; + background: #F2F2F2; +} +.imagify-folders-information i { + position: absolute; + left: 10px; + top: 50%; + margin-top: -10px; +} + +/* Tree */ +.imagify-folders-tree { + margin: 0; + text-align: left; +} +.imagify-folders-tree li { + clear: left; +} +.imagify-folders-tree .imagify-folder { + box-sizing: border-box; + position: relative; + width: 48px; + z-index: 2; + float: left; + margin-top: -3px; + padding: 0 8px 0 0; + border: 0; + background: transparent!important; + box-shadow: none; + cursor: pointer; + transition: all .275s; +} +.imagify-folders-tree span.imagify-folder { + padding-left: 1.5px; +} +.imagify-folders-tree .imagify-folder:before { + content: "+"; + display: inline-block; + width: 13px; + height: 21px; + font-size: 1.5em; + vertical-align: .15em; +} +.imagify-folders-tree span.imagify-folder:before { + content: ''; +} +.imagify-folders-tree .imagify-folder-icon path { + transition: all .275s; +} +.imagify-folders-tree .imagify-is-open .imagify-folder-icon path { + stroke: #7A8996; +} +.imagify-folders-tree .imagify-is-open.imagify-folder:before { + content: "-"; + color: #7A8996; +} +.imagify-folders-tree .imagify-is-open ~ label { + color: #7A8996; +} +.imagify-folders-tree .imagify-folder.imagify-loading:before, +.imagify-folders-tree .imagify-folder .imagify-loader { + display: none; +} +.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader { + display: inline-block; + width: 13px; + height: 21px; + font-size: 1.5em; + vertical-align: .15em; +} +.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader img { + display: inline-block; + width: 100%; + height: auto; + vertical-align: middle; +} + +.imagify-folders-tree button.imagify-folder:hover, +.imagify-folders-tree button.imagify-folder:focus, +.imagify-folders-tree button.imagify-folder:hover path, +.imagify-folders-tree button.imagify-folder:focus path { + color: #3694AE; + stroke: #3694AE; +} + +.imagify-folders-tree .imagify-folder:disabled, +.imagify-folders-tree .imagify-folder.disabled { + color: rgb(127, 127, 127); +} +.imagify-swal-content .imagify-folders-tree label { + position: relative; + display: block; + width: 100%; + padding: 3px 0; + font-size: 15px; + font-weight: 500; + vertical-align: top; + transition: all .475s; +} +.imagify-swal-content .imagify-folders-tree label:hover, +.imagify-folders-tree input:focus + label { + background: #F4F7F9; +} + +.imagify-folders-tree .imagify-folder-already-selected label, +.imagify-folders-tree .imagify-folder-already-selected label:hover, +.imagify-folders-tree .imagify-folder-already-selected input:focus + label { + background: #40B1D0; + color: #FFF; + border-radius: 3px; + cursor: default; +} +.imagify-folders-tree .imagify-folder-already-selected button, +.imagify-folders-tree .imagify-folder-already-selected button path { + color: #FFF; + stroke: #FFF; + cursor: default; +} +.imagify-folders-tree .imagify-folder-already-selected button:hover path, +.imagify-folders-tree .imagify-folder-already-selected button:focus path { + stroke: #FFF; +} +.imagify-folders-tree .imagify-folder-already-selected button:before { + content: ''; +} + +/* Add Folder fake checkbox */ +.imagify-add-ed-folder { + position: absolute; + top: 0; + bottom: 0; + right: 0; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.02em; + word-spacing: 0.02em; + color: #3694AE; + background: #F4F7F9; + opacity: 0; + transform: translateX(15px); + transition: all .275s; +} +label:hover .imagify-add-ed-folder, +input:focus + label .imagify-add-ed-folder, +input:checked + label .imagify-add-ed-folder, +.imagify-folder-already-selected .imagify-add-ed-folder { + opacity: 1; + transform: translateX(0); +} +input:checked + label .imagify-add-ed-folder { + background: #FFF; +} +input:checked:focus + label .imagify-add-ed-folder, +input:checked + label:hover .imagify-add-ed-folder { + background: #F4F7F9; +} +.imagify-folder-already-selected .imagify-add-ed-folder { + background: #40B1D0; + color: #FFF; +} +.imagify-fake-checkbox { + position: relative; + display: inline-block; + width: 14px; + height: 14px; + margin: 3.5px 15px 0 5px; + border: 1.5px solid #3694AE; + border-radius: 3px; + vertical-align: -4px; +} +.imagify-fake-checkbox:after { + position: absolute; + left: 1px; + top: 0; + content: "✓"; + color: #3694AE; + font-size: 14px; + line-height: .9; + font-style: normal; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + opacity: 0; + transform: scale(0); + transition: all .475s; +} +input:checked + label .imagify-fake-checkbox:after, +.imagify-folder-already-selected .imagify-fake-checkbox:after { + opacity: 1; + transform: scale(1); +} +.imagify-folder-already-selected .imagify-fake-checkbox { + border-color: #40B1D0; +} +.imagify-folder-already-selected .imagify-fake-checkbox:after { + color: #FFF; +} + +/* Sub Trees */ +.imagify-folders-sub-tree { + position: relative; + margin-left: .75em; + padding-top: .6em; + padding-left: 1em; + border-left: 1px dotted rgba(98, 110, 123, .3); +} +.imagify-folders-sub-tree li { + position: relative; + margin-bottom: 4px; +} +.imagify-folders-sub-tree li:before { + content: ""; + position: absolute; + top: 12px; + left: -1em; + height: 1px; + width: 0.9em; + border-top: 1px dotted rgba(98, 110, 123, .3); +} +.imagify-folders-sub-tree li:last-child:after { + content: ""; + position: absolute; + left: -1.1em; + bottom: 0; + height: 11px; + width: 3px; + background: #FFF; +} + +.imagify-empty-folder { + margin-top: -.5em; +} +.imagify-empty-folder em { + font-size: 12px; + font-weight: 500; + color: #A2AFBC; +} +@media (max-width: 782px) { + .imagify-settings.imagify-have-rocket { + margin-right: 10px; + } + + label + .imagify-info, .imagify-visual-label { + max-width: calc(100% - 65px); + padding-right: 0; + } + + .imagify-options-title { + font-size: 22px; + } + + .imagify-user-plan-label { + margin-right: -5px; + } + + .imagify-col.imagify-main { + width:100%; + padding-right: 10px; + } + .imagify-col + .imagify-col{ + padding:0px 10px 0px 0px; + } + .imagify-no-api-key .imagify-api-line input[type="text"]{ + margin-left: 0; + } +} +@media (max-width: 513px) { + .imagify-setting-optim-level .imagify-visual-comparison-text{ + margin-top: 20px; + } +} + +.imagify-col-content .imagify-space-left { + margin: 15px 30px 15px 0; +} + +.imagify-col-content .imagify-space-left p { + margin: 0 0 10px 0; + font-size: 19px; + font-weight: 500; + color: #343A49; +} + +.imagify-col-content .imagify-meteo-icon { + height: 64px; + margin: 15px 15px 15px 0; +} diff --git a/wp/wp-content/plugins/imagify/assets/css/options.min.css b/wp/wp-content/plugins/imagify/assets/css/options.min.css new file mode 100644 index 00000000..cdc5304f --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/options.min.css @@ -0,0 +1 @@ +.wrap.imagify-settings{margin-right:0}.imagify-settings.imagify-have-rocket{margin-right:20px}#imagify-check-api-container{display:block;margin-top:6px;font-weight:700}#imagify-check-api-container .dashicons{font-size:25px}#imagify-check-api-container .dashicons-no:before{color:#f06e57;vertical-align:-1px}#imagify-check-api-container .imagify-icon{font-size:1.8em;margin-right:3px;margin-left:1px;color:#8bc34a;vertical-align:-2px}.imagify-account-info-col .imagify-api-line{padding:22px 26px;background:#343a49}.imagify-api-line label,p.imagify-api-key-invite-title{display:block;margin-bottom:6px;font-size:14px;text-transform:uppercase;letter-spacing:.02em;font-weight:700;color:#343a49}.imagify-account-info-col .imagify-api-line label{color:#e5ebef;display:inline-block}.imagify-api-line.imagify-api-line input[type=text]{width:100%;padding:6px 10px;border:1px solid #40b1d0;font-family:"PT Mono",Consolas,monospace;font-size:14px;letter-spacing:.01em;font-weight:700;color:#40b1d0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-no-api-key .imagify-api-line{margin:3em 0 0 0;padding:2em 0 0}.imagify-no-api-key .imagify-api-line input[type=text]{margin-top:5px;width:400px;max-width:100%}.imagify-settings .imagify-no-api-key div.submit.submit{border:0;padding:0 16px;margin-top:0;background:#fff}.imagify-settings .imagify-no-api-key div.submit.submit p{padding-bottom:0}.imagify-options-title{margin:.75em 0 0 0;font-size:24px;letter-spacing:.02em;font-weight:700;color:#343a49}.imagify-options-subtitle{padding-bottom:.3em;margin-bottom:20px;border-bottom:1px solid #d2d3d6;font-size:14px;letter-spacing:.01em;font-weight:700;text-transform:uppercase;color:#626e7b}.imagify-options-subtitle a{font-size:12px;color:#338ea6;text-transform:none;letter-spacing:0}.imagify-options-subtitle .imagify-info{margin-left:15px}.imagify-setting-line{border-top:1px solid #d2d3d6;padding:25px 0 13px;margin:1em 0}.imagify-options-subtitle+.imagify-setting-line{border-top:0;padding-top:8px}.imagify-setting-optim-level{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-setting-optim-level>p{margin:0}.imagify-setting-optim-level .imagify-info{margin-top:10px}.imagify-setting-optim-level .imagify-error{margin:10px 0 0 0}.imagify-setting-optim-level .imagify-error a{color:#fff}.imagify-setting-optim-level .imagify-inline-options{-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;background:#2e3243;border-radius:3px}.imagify-setting-optim-level .imagify-inline-options-error{background:rgba(46,50,67,.5)}.imagify-setting-optim-level .imagify-inline-options label{display:block!important;width:100%;font-size:14px!important;border-radius:3px!important}.imagify-setting-optim-level .imagify-visual-comparison-text{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:1;flex-shrink:1;padding-left:20px;margin-top:20px;color:#626e7b;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-setting-optim-level.imagify-setting-optim-level .imagify-visual-comparison-btn{padding-top:5px;margin-top:2px;border-radius:2px;text-transform:none;letter-spacing:0;text-shadow:none!important}@media (max-width:782px){.imagify-settings .form-table th{padding-top:2em;padding-bottom:.5em}}.imagify-settings .form-table td{vertical-align:top}.imagify-settings .form-table th span{cursor:pointer}.imagify-middle th{padding-top:35px}.imagify-settings div.submit.submit{border-top:1px solid #d9d9d9;margin-top:2em;padding:18px 0 7px 30px}.imagify-settings .hidden+div.submit.submit{margin-top:-1px}.imagify-settings p.submit{float:left;margin-top:0}.imagify-settings p.submit .button{margin:0 5px}.imagify-sub-header th{text-align:right}.imagify-sub-header .form-table{margin:0}.imagify-sub-header td,.imagify-sub-header th{padding-top:0;padding-bottom:0}.imagify-sub-header [for=api_key]{padding-top:5px}@media (max-width:1120px){.imagify-settings .imagify-logo-block{margin-right:0}.imagify-settings .imagify-rate-us.imagify-rate-us{margin:1em 0 -1em}}.imagify-settings .imagify-rate-us{margin-right:25px;margin-left:auto}.imagify-visual-label,label+.imagify-info{display:inline-block;width:550px;max-width:calc(100% - 38px);margin-left:38px;padding-right:25px}.imagify-options-line{-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}label~.imagify-options-line{display:block;margin:8px 0 20px 40px;font-size:14px}.imagify-options-line+.imagify-info{margin-left:38px}label+.imagify-info{margin-top:10px}.imagify-options-line+.imagify-info+.imagify-options-line{margin-top:20px}.imagify-visual-label{vertical-align:-5px}label[for=imagify_sizes_full]+.imagify-info{vertical-align:middle}.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label~.imagify-options-line,:checked+label~.imagify-options-line :checked+label~.imagify-options-line .imagify-faded{opacity:.5}.imagify-settings.imagify-settings :not(:checked)+label~.imagify-options-line :not(:checked)+label~.imagify-options-line,.imagify-settings.imagify-settings [type=checkbox]:checked+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:checked+label~.imagify-options-line{opacity:1}.imagify-radio-group+.imagify-options-line{display:block;margin:0 0 0 1.7em;font-size:14px}.imagify-checkbox-marged{max-width:500px;margin-left:45px}.imagify-settings [type=number],.imagify-settings [type=text]{width:20em;max-width:100%;height:auto;padding:6px;margin:0 6px;border:1px solid #8ba6b4;-webkit-box-shadow:none;box-shadow:none;border-radius:2px;color:#338ea6;font-weight:700}.imagify-settings [type=number]{width:5em}.imagify-settings ::-webkit-input-placeholder{color:#b1b1b1;font-weight:400}.imagify-settings ::-moz-placeholder{color:#b1b1b1;font-weight:400;opacity:1}.imagify-settings :-ms-input-placeholder{color:#b1b1b1;font-weight:400}.imagify-settings :-moz-placeholder{color:#b1b1b1;font-weight:400;opacity:1}.imagify-settings ::-ms-input-placeholder{color:#b1b1b1;font-weight:400}.imagify-settings ::placeholder{color:#b1b1b1;font-weight:400}.imagify-menu-bar-img{-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;width:350px;height:auto;margin-top:0;border:1px solid #8ba6b4}.imagify-col.imagify-main{float:left;width:calc(100% - 320px);padding-left:0;padding-right:0}.imagify-have-rocket .imagify-main{float:none;width:1265px;max-width:100%}.imagify-sidebar{float:left;width:300px;max-width:100%}.imagify-sidebar-section{border:1px solid #bbb;background:#1f2332}.imagify-sidebar-section+.imagify-sidebar-section{margin-top:2em}@media (max-width:820px){.imagify-settings{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-main{width:auto;float:none}.imagify-sidebar{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;float:none;width:auto;max-width:none;margin-left:0;margin-top:25px}.wp-media-products{text-align:center}.wp-media-products li{display:inline-block;width:100%;max-width:276px}}@media (min-width:1400px){.imagify-main{width:74%}}.imagify-sidebar-section{position:relative;padding:10px 20px;text-align:center;color:#f2f2f2}.imagify-sidebar-close{position:absolute;top:8px;right:12px;text-decoration:none}.imagify-sidebar-close i{font-size:2em;color:rgba(255,255,255,.5)}p.imagify-sidebar-title{margin:1.2em 0 1.5em;text-align:left;color:#f56640;text-transform:uppercase;letter-spacing:.015em;word-spacing:0.015em;font-weight:700}p.imagify-sidebar-description{margin:1.5em 0;text-align:left;font-weight:500;color:#f2f2f2}.imagify-sidebar-description strong{color:#39ce9a}.imagify-rocket-cta-promo{display:block;padding:8px 10px;margin:1.3em 0 .5em 0;border:2px dashed #f56640;border-radius:3px;font-size:18px;font-weight:700;color:#f56640}.imagify-rocket-cta-promo strong{color:#f2f2f2}a.btn-rocket{display:block;font-size:15px;padding:10px 12px;margin:0 0 1.5em;background:#f56640;border-radius:3px;color:#f2f2f2;text-transform:uppercase;font-weight:700;text-decoration:none}a.btn-rocket:focus,a.btn-rocket:hover{background:#ac2b15}.imagify-sidebar-section ul{margin-top:20px}.imagify-sidebar-section li{position:relative;margin:1.2em 0;padding-left:25px;text-align:left}.imagify-sidebar-section li:before{content:"✓";position:absolute;left:0;top:0;color:#39ce9a;font-size:18px}label[for=imagify_admin_bar_menu],label[for=imagify_partner_links]{font-weight:400!important;color:#626e7b!important}.imagify-select-all-buttons{margin-top:8px}.imagify-link-like.imagify-select-all{font-weight:700;font-size:12px;color:#3694ae}.imagify-select-all.imagify-is-inactive{color:inherit;text-decoration:none;cursor:default}.imagify-fts-header{padding:10px 16px;background:#343a49;color:#fff}.imagify-fts-header i{font-size:1.8em;margin-right:12px}.imagify-fts-header p{margin:0;color:#fff}#imagify-add-themes-to-custom-folder strong,.imagify-fts-header strong{color:#40b1d0;font-weight:700}.imagify-fts-content{padding:16px;background:#f4f7f9;border:1px solid #cdd0d4;border-top:0}.imagify-fts-content p{margin-top:0}.imagify-kindof-title{margin-top:2em;padding:0 0 10px 0;border-bottom:1px solid #d2d3d6;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-weight:700}.imagify-settings .imagify-button-mini{padding:4px 13px 4px 10px}.imagify-settings .imagify-button-mini .dashicons-plus{vertical-align:-7.5px}.imagify-settings .imagify-button-mini.imagify-button-primary:focus,.imagify-settings .imagify-button-mini.imagify-button-primary:hover{color:#fff}p.imagify-custom-folder-line{position:relative;margin:0;padding:12px 15px;color:#4a5362;font-weight:500;-webkit-transition:all .75s;-o-transition:all .75s;transition:all .75s}.imagify-custom-folder-line.imagify-will-remove{background:#c51162;color:#fff;-webkit-transform:translateX(-120px);-ms-transform:translateX(-120px);transform:translateX(-120px);opacity:0}.imagify-custom-folder-line:first-child{margin-top:-.5em}.imagify-custom-folder-line+.imagify-custom-folder-line{border-top:1px solid #e9eff2}.imagify-custom-folders-remove{position:absolute;right:0;top:6px;border:0;padding:5px 10px 4px;-webkit-box-shadow:none;box-shadow:none;color:#7a8996;border-radius:16px;font-size:13px;line-height:18px;background:#fff;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s;cursor:pointer}.imagify-custom-folders-remove-text{max-width:0;overflow:hidden;white-space:nowrap;display:inline-block;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);opacity:0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-custom-folders-remove:focus,.imagify-custom-folders-remove:hover{background:#d9eff6;color:#225e6e}.imagify-custom-folders-remove:focus .imagify-custom-folders-remove-text,.imagify-custom-folders-remove:hover .imagify-custom-folders-remove-text{max-width:6em;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.imagify-settings .progress{height:8px;margin-top:1em;background:#343a49}.imagify-settings .bar{position:relative;width:1px;height:8px;background:#46b1ce;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.imagify-settings .percent{position:absolute;top:6px;right:0;padding:0 5px;line-height:1.85;font-size:14px;font-weight:700;color:#40b1d0}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}@-webkit-keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-add-custom-folder+.imagify-loader{display:none;vertical-align:middle}.imagify-add-custom-folder[disabled]+.imagify-loader{display:inline-block}.imagify-folders-information{position:relative;margin:-5px 0 20px 0;padding:10px 10px 10px 40px;text-align:left;background:#f2f2f2}.imagify-folders-information i{position:absolute;left:10px;top:50%;margin-top:-10px}.imagify-folders-tree{margin:0;text-align:left}.imagify-folders-tree li{clear:left}.imagify-folders-tree .imagify-folder{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:48px;z-index:2;float:left;margin-top:-3px;padding:0 8px 0 0;border:0;background:0 0!important;-webkit-box-shadow:none;box-shadow:none;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folders-tree span.imagify-folder{padding-left:1.5px}.imagify-folders-tree .imagify-folder:before{content:"+";display:inline-block;width:13px;height:21px;font-size:1.5em;vertical-align:.15em}.imagify-folders-tree span.imagify-folder:before{content:''}.imagify-folders-tree .imagify-folder-icon path{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folders-tree .imagify-is-open .imagify-folder-icon path{stroke:#7A8996}.imagify-folders-tree .imagify-is-open.imagify-folder:before{content:"-";color:#7a8996}.imagify-folders-tree .imagify-is-open~label{color:#7a8996}.imagify-folders-tree .imagify-folder .imagify-loader,.imagify-folders-tree .imagify-folder.imagify-loading:before{display:none}.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader{display:inline-block;width:13px;height:21px;font-size:1.5em;vertical-align:.15em}.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader img{display:inline-block;width:100%;height:auto;vertical-align:middle}.imagify-folders-tree button.imagify-folder:focus,.imagify-folders-tree button.imagify-folder:focus path,.imagify-folders-tree button.imagify-folder:hover,.imagify-folders-tree button.imagify-folder:hover path{color:#3694ae;stroke:#3694AE}.imagify-folders-tree .imagify-folder.disabled,.imagify-folders-tree .imagify-folder:disabled{color:#7f7f7f}.imagify-swal-content .imagify-folders-tree label{position:relative;display:block;width:100%;padding:3px 0;font-size:15px;font-weight:500;vertical-align:top;-webkit-transition:all .475s;-o-transition:all .475s;transition:all .475s}.imagify-folders-tree input:focus+label,.imagify-swal-content .imagify-folders-tree label:hover{background:#f4f7f9}.imagify-folders-tree .imagify-folder-already-selected input:focus+label,.imagify-folders-tree .imagify-folder-already-selected label,.imagify-folders-tree .imagify-folder-already-selected label:hover{background:#40b1d0;color:#fff;border-radius:3px;cursor:default}.imagify-folders-tree .imagify-folder-already-selected button,.imagify-folders-tree .imagify-folder-already-selected button path{color:#fff;stroke:#FFF;cursor:default}.imagify-folders-tree .imagify-folder-already-selected button:focus path,.imagify-folders-tree .imagify-folder-already-selected button:hover path{stroke:#FFF}.imagify-folders-tree .imagify-folder-already-selected button:before{content:''}.imagify-add-ed-folder{position:absolute;top:0;bottom:0;right:0;font-size:11px;text-transform:uppercase;letter-spacing:.02em;word-spacing:0.02em;color:#3694ae;background:#f4f7f9;opacity:0;-webkit-transform:translateX(15px);-ms-transform:translateX(15px);transform:translateX(15px);-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folder-already-selected .imagify-add-ed-folder,input:checked+label .imagify-add-ed-folder,input:focus+label .imagify-add-ed-folder,label:hover .imagify-add-ed-folder{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}input:checked+label .imagify-add-ed-folder{background:#fff}input:checked+label:hover .imagify-add-ed-folder,input:checked:focus+label .imagify-add-ed-folder{background:#f4f7f9}.imagify-folder-already-selected .imagify-add-ed-folder{background:#40b1d0;color:#fff}.imagify-fake-checkbox{position:relative;display:inline-block;width:14px;height:14px;margin:3.5px 15px 0 5px;border:1.5px solid #3694ae;border-radius:3px;vertical-align:-4px}.imagify-fake-checkbox:after{position:absolute;left:1px;top:0;content:"✓";color:#3694ae;font-size:14px;line-height:.9;font-style:normal;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:all .475s;-o-transition:all .475s;transition:all .475s}.imagify-folder-already-selected .imagify-fake-checkbox:after,input:checked+label .imagify-fake-checkbox:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.imagify-folder-already-selected .imagify-fake-checkbox{border-color:#40b1d0}.imagify-folder-already-selected .imagify-fake-checkbox:after{color:#fff}.imagify-folders-sub-tree{position:relative;margin-left:.75em;padding-top:.6em;padding-left:1em;border-left:1px dotted rgba(98,110,123,.3)}.imagify-folders-sub-tree li{position:relative;margin-bottom:4px}.imagify-folders-sub-tree li:before{content:"";position:absolute;top:12px;left:-1em;height:1px;width:.9em;border-top:1px dotted rgba(98,110,123,.3)}.imagify-folders-sub-tree li:last-child:after{content:"";position:absolute;left:-1.1em;bottom:0;height:11px;width:3px;background:#fff}.imagify-empty-folder{margin-top:-.5em}.imagify-empty-folder em{font-size:12px;font-weight:500;color:#a2afbc}@media (max-width:782px){.imagify-settings.imagify-have-rocket{margin-right:10px}.imagify-visual-label,label+.imagify-info{max-width:calc(100% - 65px);padding-right:0}.imagify-options-title{font-size:22px}.imagify-user-plan-label{margin-right:-5px}.imagify-col.imagify-main{width:100%;padding-right:10px}.imagify-col+.imagify-col{padding:0 10px 0 0}.imagify-no-api-key .imagify-api-line input[type=text]{margin-left:0}}@media (max-width:513px){.imagify-setting-optim-level .imagify-visual-comparison-text{margin-top:20px}}.imagify-col-content .imagify-space-left{margin:15px 30px 15px 0}.imagify-col-content .imagify-space-left p{margin:0 0 10px 0;font-size:19px;font-weight:500;color:#343a49}.imagify-col-content .imagify-meteo-icon{height:64px;margin:15px 15px 15px 0} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/pricing-modal.css b/wp/wp-content/plugins/imagify/assets/css/pricing-modal.css new file mode 100644 index 00000000..02b0fe88 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/pricing-modal.css @@ -0,0 +1,1340 @@ +/* Flexbox re-groups */ +.imagify-modal-cols, +.imagify-border-styled, +.imagify-offer-header, +.imagify-payment-modal .imagify-modal-content, +.imagify-flex-table, +.imagify-tabs { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} +.imagify-modal-cols, +.imagify-border-styled { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.imagify-payment-modal { + text-align: center; + color: #7A8996; +} +.imagify-payment-modal * { + box-sizing: border-box; +} +.imagify-modal-loader { + position: absolute; + top: 0; left: 0; right: 0; bottom: 0; + background: #fff url('../images/loader-balls.svg') center no-repeat; + z-index: 10; +} +.imagify-payment-modal .imagify-modal-content { + width: 980px; + max-width: 100%; + min-width: 925px; + padding: 0; +} +.imagify-modal-content.imagify-iframe-viewing { + width: 980px; + height: 672px; + overflow: hidden; +} +.imagify-iframe-viewing #imagify-payment-process-view { + width: 980px; + height: 668px; +} +.imagify-payment-modal .imagify-modal-main { + width: 70%; +} +.imagify-iframe-viewing .imagify-modal-main { + width: auto; +} +.imagify-payment-modal .imagify-modal-content.imagify-success-viewing { + min-width: auto; + width: 450px; + min-height: 300px; +} +.imagify-success-viewing .imagify-modal-main { + width: 100%; +} +.imagify-payment-modal .imagify-modal-sidebar { + width: 30%; + padding: 15px 20px; + background: #1F2332; + color: #FFF; +} +.imagify-modal-content.imagify-iframe-viewing .imagify-modal-sidebar, +.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar { + display: none; +} +.imagify-modal-section { + padding: 0 25px; +} +.imagify-modal-section.section-gray { + margin: 0 0 1em; + padding: 10px 25px 15px; + background: #F6F7FB; +} +.imagify-tabs-contents .section-gray { + padding: 8px 25px 10px; +} +.imagify-modal-section .imagify-modal-title:first-child { + margin-top: 1em; + margin-bottom: 1.5em; +} +.imagify-modal-section.section-gray .imagify-modal-title { + margin-top: .5em; + margin-bottom: .5em; +} +.imagify-modal-title { + font-size: 1.8em; +} +.imagify-modal-title .imagify-inner-sub-title { + display: block; + font-size: .56em; +} +.imagify-analyzing .imagify-numbers-calc, +.imagify-numbers-notcalc, +.imagify-modal-section.imagify-analyzing .imagify-modal-cols, +.imagify-modal-section .imagify-loader { + display: none; +} +.imagify-analyzing .imagify-numbers-notcalc, +.imagify-modal-section.imagify-analyzing .imagify-loader { + display: block; +} +.imagify-modal-section .imagify-loader { + margin: 2em auto; +} + +.imagify-border-styled { + width: 200px; + margin: 0 auto; + color: #8BC34A; + font-weight: bold; + font-size: 0.925em; +} +.imagify-border-styled:before, +.imagify-border-styled:after { + content: ""; + height: 1px; + background: rgba(0,0,0,.1); + -webkit-flex-basis: 40px; + -ms-flex-preferred-size: 40px; + flex-basis: 40px; +} +.imagify-border-styled:before { + margin-right: 5px; +} +.imagify-border-styled:after { + margin-left: 5px; +} +.imagify-big-number { + font-size: 3.7em; + font-weight: bold; + margin: -3px 0; + color: #4A4A4A; + line-height: 1; +} +.imagify-payment-modal strong { + font-weight: bold; + color: #4A4A4A; +} + +.imagify-popin-message { + padding: 5px 15px; + text-align: left; +} +.imagify-popin-message.imagify-error p { + color: #FFF; +} + +.imagify-small-options { + width: 300px; + margin: 1em auto .5em; + background: #338EA6; + border-radius: 4px; +} + +.imagify-small-options input[type="radio"]:not(:checked) + label, +.imagify-small-options input[type="radio"]:checked + label { + padding: 8px 10px; + font-size: 13px; + color: #FFF; + box-shadow: none; + border-left: 0; +} + +.imagify-small-options input[type="radio"]:not(:checked) + label { + background: #338EA6; + color: rgba(255, 255, 255, .4); +} +.imagify-small-options input[type="radio"]:checked + label { + background: #40B1D0; +} + +.imagify-cols:after { + content: ""; + display: table; + clear: both; +} + +.js .imagify-iframe-viewing .close-btn { + display: none; +} + +.imagify-modal .imagify-cols { + padding: 0 20px; +} +.imagify-payment-modal .imagify-iconed { + margin: 1.5em 5em 1.5em 0; +} + + +.imagify-iconed { + position: relative; + text-align: left; + padding-left: 42px; + margin-right: 15px; + font-weight: 500; +} +.imagify-iconed .dashicons, +.imagify-iconed .icon { + position: absolute; + font-size: 2em; + left: 0; top: 2px; + color: #40B1D0; +} +.imagify-payment-modal .close-btn { + top: 10px; + right: 10px; + width: 24px; + height: 24px; + padding: 2px 0 0 4.5px; /* Safari iOS bug fix */ + color: #FFF; + background: #40B1D0; + border-radius: 50%; + -webkit-transition: all .275s; + transition: all .275s; +} +.imagify-payment-modal .close-btn i { + margin-left: -3.5px; + margin-top: -0.5px; +} +.imagify-payment-modal .close-btn:hover { + background: #F6F7FB; +} + +/* OFFERS */ +.imagify-offer-line { + margin-top: 1.5em; +} +.imagify-offer-line + .imagify-offer-line { + margin-top: 0.75em; +} +.imagify-offer-header { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 0 0 0 15px; + border-radius: 4px 4px 0 0; + -webkit-transition: all .275s; + transition: all .275s; +} +.imagify-offer-header.imagify-offer-header.imagify-offer-header .imagify-inline-options label:last-child { + border-radius: 0 4px 0 0; +} +.imagify-offer-header .imagify-inline-options { + width: auto; +} +.imagify-offer-title { + font-weight: bold; + margin: 0; +} +.imagify-offer-header, +.imagify-offer-header .imagify-inline-options input[type="radio"]:not(:checked) + label { + background: #E5EBEF; +} +.imagify-offer-onetime .imagify-offer-header { + padding-top:8px; + padding-bottom: 8px; +} +.imagify-offer-onetimes > div { + padding-top: 15px; + padding-bottom: 15px; +} +.imagify-offer-header .imagify-inline-options input[type="radio"]:not(:checked) + label, +.imagify-offer-header .imagify-inline-options input[type="radio"]:checked + label { + position: relative; + padding: 7px 30px; + font-size: 1em; + letter-spacing: 0.05em; + color: inherit; + box-shadow: 0 0 0; + border-radius: 0; +} +.imagify-offer-header .imagify-inline-options input[type="radio"]:checked + label { + background: #F6F7FB; +} + +.imagify-2-free { + position: absolute; + bottom: 100%; left: 0; right: 0; + padding: 2px 10px; + margin-bottom: 8px; + font-size: 0.8em; + letter-spacing: 0; + text-transform: none; + text-align: center; + color: #FFF; + background: #10121A; + border-radius: 2px; +} +.imagify-2-free:after { + content: ""; + position: absolute; + left: 50%; bottom: -3px; + margin-left: -3px; + border-top: 3px solid #10121A; + border-left: 3px solid transparent; + border-right: 3px solid transparent; +} +/* right position */ +.imagify-2-free.imagify-b-right { + bottom: auto; + left: 100%; right: -100%; + margin-bottom: 0; + margin-left: 8px; +} +.imagify-2-free.imagify-b-right:after { + left: -3px; bottom: auto; top: 50%; + margin-top: -3px; margin-left: 0; + border-right: 3px solid #10121A; + border-top: 3px solid transparent; + border-bottom: 3px solid transparent; + border-left: 0; +} + +/* bottom position */ +.imagify-2-free.imagify-b-bottom { + bottom: -100%; + left: 0; right: 0; + margin-top: 8px; +} + +.imagify-2-free.imagify-b-bottom:after { + top: -3px; bottom: auto; + border-bottom: 3px solid #10121A; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 0; +} + +.imagify-offer-content { + text-align: left; + background: #F6F7FB; + border-radius: 0 0 4px 4px; + -webkit-transition: all .275s; + transition: all .275s; +} +.imagify-offer-onetime .imagify-offer-content { + padding: 10px 0; +} + +/* Checkboxes adjustment */ +div.imagify-col-checkbox { + position: relative; + width: 25.5%; + padding-top: 10px; + padding-bottom: 7px; +} +.imagify-col-checkbox label { + display: block; +} +.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked), +.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked { + position: absolute; + top: 50%; left: 6px; + margin: -8px 0 0 0; +} +.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked) + label:before, +.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked + label:before { + margin: 0; + top: -2px; + left: 6px; + -webkit-transition: all .275s; + transition: all .275s; +} +.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked) + label:after, +.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked + label:after { + top: 1px; + left: 13px; +} +.imagify-col-checkbox label { + padding-left: 55px!important; +} + +/* Offer col */ +.imagify-offer-size { + font-size: 30px; + color: #2E3243; + font-weight: bold; + -webkit-transition: all .275s; + transition: all .275s; +} +.imagify-offer-by { + font-size: 10px; + -webkit-transition: all .275s; + transition: all .275s; +} +.imagify-approx { + display: none; + font-size: 11px; + line-height: 1.2; + -webkit-transition: all .275s; + transition: all .275s; +} + +div.imagify-col-price { + width: 35%; +} +.imagify-flex-table .imagify-price-block { + padding-left: 0; + padding-right: 0; +} +.imagify-offer-monthly .imagify-flex-table .imagify-price-block, +.imagify-offer-monthlies .imagify-price-block { + padding-top: 0; +} +.imagify-flex-table .imagify-price-complement { + padding-right: 0; + font-size: 10px; + font-weight: bold; +} +.imagify-price-block, +.imagify-price-discount { + white-space: nowrap; +} +.imagify-price-block span, +.imagify-price-discount span { + display: inline-block; + vertical-align: middle; +} +.imagify-price-discount.imagify-price-discount { + position: relative; + flex-grow: 0; + padding-top: 15px; + font-weight: bold; + width: 70px; +} +.imagify-price-discount:before { + content: ""; + position: absolute; + top: 25px; + width: 62%; + height: 2px; + background: #2E3243; + transform: rotate(-15deg); +} +.imagify-offer-onetimes .imagify-price-discount:before { + width: 100%; +} +.imagify-price-discount-dollar { + color: #2E3243; +} +.imagify-price-discount-number { + color: #8BA6B4; +} +.imagify-offer-selected .imagify-price-discount-number { + color: #FFF; +} +span.imagify-dollars { + color: #1F2332; + font-size: 18px; + font-weight: bold; + vertical-align: -2px; +} +.imagify-offer-onetime .imagify-col-price { + padding-top: 0; +} +.imagify-offer-onetime .imagify-dollars { + vertical-align: -1px; +} +.imagify-price-big, +.imagify-price-mini { + color: #40B1D0; + font-weight: bold; +} +.imagify-price-big { + font-size: 36px; +} +span.imagify-price-mini { + font-size: 18px; + vertical-align: 2px; +} +span.imagify-price-by { + font-size: 10px; + color: #1F2332; + vertical-align: -13px; + text-indent: -27px; +} + +.imagify-col-other-actions { + width: 18.5%; + text-align: right; +} +.imagify-col-other-actions a { + font-size: 11px; +} + +/* Offer selected */ +.imagify-offer-selected, +.imagify-offer-selected .imagify-offer-title, +.imagify-offer-selected .imagify-offer-size, +.imagify-offer-selected .imagify-price-big, +.imagify-offer-selected .imagify-price-mini, +.imagify-offer-selected .imagify-price-complement, +.imagify-offer-selected .imagify-col-other-actions a { + color: #FFF; +} +.imagify-offer-selected .imagify-offer-header, +.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type="radio"]:not(:checked) + label { + background: #338EA6; +} +.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type="radio"]:checked + label { + background: #40B1D0; +} +.imagify-offer-selected .imagify-offer-content { + background: #40B1D0; +} +.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked) + label:before, +.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked + label:before { + border-color: #FFF; + background: #40B1D0; +} +.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked) + label:after, +.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked + label:after { + color: #FFF; +} +.imagify-offer-selected .imagify-offer-by { + color: #2E3243; +} + +.imagify-enough-title { + display: none; +} +.imagify-enough-free .imagify-not-enough-title { + display: none; +} +.imagify-enough-free .imagify-enough-title { + display: block; +} + +.imagify-submit-line { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin: 2em 0; + text-align: left; +} +.imagify-coupon-section { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.imagify-coupon-section p { + margin: 0; + line-height: 1.3; +} +.imagify-coupon-text { + width: 200px; + max-width: 100%; + padding-right: 15px; +} +.imagify-coupon-loader { + display: none; +} +.imagify-coupon-text.checking { + text-align: right; +} +.imagify-coupon-text.checking .imagify-coupon-loader { + display: inline; +} +.imagify-coupon-text.checking label { + display: none; +} +.imagify-coupon-input { + position: relative; +} +.imagify-coupon-input input { + position: relative; + z-index: 1; +} +[id="imagify-coupon-validate"].button-secondary { + position: absolute; + top: 1px; + right: 3px; + bottom: 2px; + box-shadow: none; + padding: 4px 10px; + z-index: 0; + transition: transform .275s; +} +.imagify-canbe-validate [id="imagify-coupon-validate"] { + transform: translateX(45px); +} + +/* Promotion/Discount section */ +.imagify-modal-section + .imagify-modal-promotion { + margin-top: -1em; +} +.imagify-modal-promotion { + position: relative; + overflow: hidden; + display: none; + align-items: center; + padding: 15px 25px; + background: #604D90; + text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); +} +.imagify-modal-promotion.active { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +[id="imagify-pricing-tab-onetime"] .imagify-modal-promotion { + margin-bottom: 4em; +} +.imagify-modal-promotion:before { + content: "\f488"; + position: absolute; + top: 28px; + left: 8%; + font-family: "dashicons"; + font-size: 90px; + color: #8476A9; + text-shadow: none; +} +.imagify-modal-promotion p { + position: relative; + margin: .2em 0; + color: #FFF; +} +.imagify-promo-title { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + text-transform: uppercase; + font-size: 20px; + font-weight: bold; + letter-spacing: 0.125em; +} +.imagify-until-date { + -ms-flex-preferred-size: 200px; + flex-basis: 200px; + text-align: right; +} +.imagify-until-date strong { + color: #FFF; +} + + +.imagify-submit-line button { + font-size: 16px; +} +input.imagify-coupon-code { + padding: 10px; + border: 2px solid #7A8996; + font-size: 0.875em; + font-weight: bold; + border-radius: 3px; +} +.validated.imagify-coupon-section .imagify-coupon-text, +.validated.imagify-coupon-section strong { + color: #8BC34A; +} +.validated.imagify-coupon-section .imagify-coupon-code { + color: #8BC34A; + border-color: #8BC34A; +} +.invalid.imagify-coupon-section .imagify-coupon-text, +.invalid.imagify-coupon-section strong { + color: #d0021b; +} +.invalid.imagify-coupon-section .imagify-coupon-code { + color: #d0021b; + border-color: #d0021b; +} +.imagify-footer-lines { + width: 500px; + max-width: 100%; + margin: 2em auto 2.5em; + font-size: 0.85em; + line-height: 1.5; +} + +/* Year selected */ +.imagify-year-selected .imagify-switch-my .imagify-yearly { + display: block; +} +.imagify-year-selected .imagify-switch-my .imagify-monthly { + display: none; +} +/* Month selected */ +.imagify-month-selected .imagify-switch-my .imagify-yearly { + display: none; +} +.imagify-month-selected .imagify-switch-my .imagify-monthly { + display: block; +} + +/* Flexbox table */ +.imagify-flex-table { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} +.imagify-flex-table > * { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 7px 15px; +} + +/* Pricing table */ +div.imagify-col-details { + width: 22%; + padding-left: 25px; +} +.imagify-col-details p { + margin: 0; +} +.imagify-pricing-table { + margin: 0 20px; +} +.imagify-pricing-table .imagify-offer-line { + padding: .6em 0; + border: 2px solid #E8EEF0; + text-align: left; + border-radius: 3px; +} +.imagify-pricing-table .imagify-offer-line:first-child { + margin-top: .75em; +} +.imagify-pricing-table .imagify-offer-line.imagify-offer-selected:first-child { + margin-top: 1.75em; +} +.imagify-pricing-table .imagify-offer-line + .imagify-offer-line { + margin-top: -2px; +} +.imagify-pricing-table .imagify-col-other-actions { + width: 20.5%; +} +.imagify-pricing-table .imagify-approx { + margin-left: 0; + line-height: 0.5; + margin-bottom: 1em; +} +.imagify-pricing-table .imagify-offer-selected { + -webkit-transform: scale(1.03); + transform: scale(1.03); + background: #40B1D0; + border-width: 0; +} +.imagify-pricing-table .imagify-offer-selected .imagify-approx { + color: #FFF; +} +.imagify-pricing-table .imagify-button-secondary { + padding: 3px 20px; + box-shadow: none; + text-transform: uppercase; + font-size: 12px; + letter-spacing: 0.025em; +} +.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary { + border: 2px solid #FFF; + background: #40B1D0; + box-shadow: none; + text-shadow: none!important; +} +.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:hover, +.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:focus { + background: #FFF; + color: #40B1D0; +} + +.imagify-col .imagify-special-needs { + margin-left: 25px; +} +.imagify-special-needs strong { + font-size: 25px; + font-weight: bold; + color: #40B1D0; +} +.imagify-special-needs span { + display: block; + font-size: 12px; + margin-top: -.5em; +} +div.imagify-col-price { + position: relative; +} + +/* we recommend line */ +.imagify-recommend { + display: none; + position: absolute; + left: -20px; bottom: 100%; + padding: 0; + margin-bottom: 8px; + color: #1F2332; + font-weight: bold; + font-style: italic; +} +.imagify-offer-selected .imagify-recommend { + display: block; +} +[class*="imagify-onetime-"] .imagify-recommend { + left: 65px; + margin-bottom: 20px; +} +.imagify-recommend:before { + content: ""; + position: absolute; + top: 7px; left: -35px; + width: 29px; height: 30px; + background: url("../images/icon-arrow-choice.png") scroll 0 no-repeat; + background-size: contain; +} +@media only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { + .imagify-recommend:before { + background-image: url("../images/icon-arrow-choice.svg"); + } +} + +/* One Time Adjustments */ +.imagify-offer-line[class*="imagify-onetime-"] { + padding: 0; + margin: .3em 0 0; +} +.imagify-offer-line.imagify-offer-line[class*="imagify-onetime-"]:first-child { + margin-top: 2em; +} +.imagify-offer-line[class*="imagify-onetime-"] + .imagify-offer-line { + margin-top: .5em; +} +.imagify-offer-selected.imagify-offer-line[class*="imagify-onetime-"] { + -webkit-transform: scale(1); + transform: scale(1); + border-width: 2px; +} + +/* cols */ +.imagify-offer-line[class*="imagify-onetime-"] .imagify-col-details { + position: relative; + overflow: hidden; + width: 21%; + background: #1F2332; + color: #FFF; +} +.imagify-offer-selected.imagify-offer-line[class*="imagify-onetime-"] .imagify-col-details { + background: #338EA6; +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-col-details:before { + content: ""; + position: absolute; + bottom: 0; right: 25px; + width: 75px; height: 54px; + background: url("../images/icon-pack.png"); +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-col-other-actions { + width: 30%; +} + +.imagify-offer-line[class*="imagify-onetime-"] .imagify-offer-size, +.imagify-offer-line[class*="imagify-onetime-"] .imagify-approx { + color: #FFF; +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-offer-size { + font-size: 24px; +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-approx { + font-size: 12px; +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-price-block { + padding-left: 10px; +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-dollars { + vertical-align: middle; +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-price-big { + vertical-align: -5px; +} +.imagify-offer-line[class*="imagify-onetime-"] .imagify-price-mini { + vertical-align: 7px; +} + +/* Simple Tabs */ +.imagify-tabs { + margin-bottom: 0; + list-style: none; + background: #E5EBEF; +} +.imagify-modal-content .imagify-tabs { + margin: 1em 0 0; +} +.imagify-tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + width: 50%; + margin: 0; + font-size: 23px; +} +.imagify-tab a { + display: block; + padding: 15px 10px; + color: inherit; + text-decoration: none; +} +.imagify-tab a:focus { + box-shadow: none; + outline: none; + color: #40B1D8; +} +.imagify-tab.imagify-current a { + background: #F6F7FB; +} +.imagify-tab-content.imagify-current { + display: block; +} +.imagify-tab-content { + display: none; +} +.imagify-tab-content .imagify-modal-section:first-child { + margin-top: 0; +} + +/* Modal sidebar */ +.imagify-modal-sidebar-content, +.imagify-payment-modal .imagify-modal-sidebar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +.imagify-modal-sidebar-content { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} +p.imagify-modal-sidebar-title.imagify-modal-sidebar-title { + margin-top: 5px; + padding-right: 40px; + font-size: 18px; + color: #FFF; +} +.imagify-modal-testimony { + margin-top: 1em; +} +.imagify-modal-testimony + .imagify-modal-testimony { + margin-top: 2em; +} +@media (max-height:620px) { + .imagify-modal-testimony + .imagify-modal-testimony { + display: none; + } +} +.imagify-modal-testimony-person { + display: table; + width: 100%; +} +.imagify-modal-testimony-person > * { + display: table-cell; + vertical-align: middle; +} +.imagify-modal-avatar { + width: 114px; + line-height: 0; +} +.imagify-modal-avatar img { + border: 2px solid #FFF; + border-radius: 50%; + width: 96px; height: 96px; +} +.imagify-modal-identity a { + text-decoration: none; + font-weight: bold; +} +.imagify-modal-identity a:first-child { + font-size: 13px; +} +.imagify-modal-identity a:first-child + a { + display: block; + font-size: 10px; + color: #7A8996; +} +.imagify-modal-testimony-content.imagify-modal-testimony-content p { + font-size: 13px; + font-style: italic; + line-height: 1.7; + color: #7A8996; +} +.imagify-modal-sidebar-trust { + margin-top: auto; + padding-top: 1.5em; +} +.imagify-modal-sidebar-trust p { + margin: 0; + font-weight: bold; + font-size: 12px; + line-height: 1.7; +} +.imagify-modal-sidebar-trust p img { + margin-right: 3px; + vertical-align: -2px; +} +.imagify-modal-sidebar-trust p + p { + font-size: 11px; +} + +/* Cart */ +.imagify-cart { + text-align: left; +} +.imagify-cart .imagify-cart-list { + border-top: 1px solid rgba(122, 137, 150, .2); + border-bottom: 1px solid rgba(122, 137, 150, .2); +} +.imagify-cart .imagify-cart-label { + margin-bottom: 0.5em; + font-size: 10px; + color: #2E3243; +} +.imagify-cart-list p { + margin: 0; + font-weight: bold; +} +.imagify-cart-item { + margin: .4em 0; +} +.imagify-cart .imagify-cart-suggestion { + margin-top: -.3em; +} +.imagify-cart-suggestion a, +.imagify-cl-description p { + font-size: 10px; +} +.imagify-remove-from-cart { + border: 0; + padding: 0; + width: 14px; + height: 14px; + line-height: 13px; + border-radius: 50%; + background: #40B1D0; + cursor: pointer; + transition: background .3s; +} +.imagify-remove-from-cart i:before { + position: relative; + top: -6px; left: -3px; + font-size: 13px; + color: #FFF; +} +.imagify-remove-from-cart:hover, +.imagify-remove-from-cart:focus { + background: #D0021B; +} + +/* col sizes */ +.imagify-cart .imagify-cl-remove { + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + width: 45px; +} +.imagify-cart .imagify-cl-name { + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + width: 200px; +} +.imagify-cart .imagify-cl-description { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; + padding-top: 10px; +} +.imagify-cart .imagify-cl-price { + text-align: right; +} + +#imagify-payment-iframe { + width: 980px; + height: 672px; + background: #f6f7fb url(../images/loader-balls.svg) 50% 50% no-repeat; +} + +.imagify-success-view { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; +} +.imagify-success-view p { + font-weight: bold; + font-size: 16px; +} + +/* Imagify cart item removing */ +.imagify-cart-emptied-item { + margin: .3em auto; + padding: 6px 20px; + background: #E6EBEF; + border-radius: 20px; +} +.imagify-cart-emptied-item.imagify-cart-emptied-item p { + font-weight: bold; +} +.imagify-cart-emptied-item a { + color: #40b1d0; + float: right; + font-weight: bold; +} +@media (max-width: 782px) { + .imagify-payment-modal .imagify-modal-content{ + width: 90%; + min-width: auto; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-direction: normal; + -moz-box-orient: vertical; + align-items: center; + } + .imagify-payment-modal .imagify-modal-main{ + width: 100%; + } + .imagify-payment-modal .imagify-modal-sidebar{ + width: 100%; + + } + .imagify-modal-section.section-gray{ + padding: 10px 10px 15px; + } + .imagify-modal-section{ + padding: 0 10px; + } + .imagify-submit-line{ + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-direction: normal; + -moz-box-orient: vertical; + align-items: center; + } + .imagify-coupon-section{ + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-direction: normal; + -moz-box-orient: vertical; + align-items: center; + margin-bottom: 20px; + } + .imagify-coupon-section .imagify-coupon-text{ + text-align: center; + width: 100%; + padding: 0; + margin-bottom: 20px; + } + + .imagify-modal-cols{ + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-direction: normal; + -moz-box-orient: vertical; + align-items: center; + } + .imagify-col{ + padding: 0; + float: none; + width: 100%; + } + .imagify-payment-modal .imagify-iconed{ + margin: 1.5em auto; + max-width: 260px; + } + .imagify-offer-header{ + padding: 0; + } + .imagify-offer-header .imagify-inline-options input[type="radio"]:not(:checked) + label, + .imagify-offer-header .imagify-inline-options input[type="radio"]:checked + label{ + padding: 7px 15px; + } + .imagify-offer-header .imagify-inline-options input[type="radio"]:checked + label{ + padding: 7px 15px; + } + .imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-monthly, + .imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-yearly{ + padding: 10px 5px; + font-size: 12px; + } + .imagify-offer-size{ + font-size: 18px; + } + .imagify-col-other-actions{ + padding: 10px; + text-align: center; + } + .imagify-2-free{ + padding: 2px 5px; + } + .imagify-2-free.imagify-b-right { + position: absolute; + bottom: 100%; + left: 0; + right: 0; + padding: 2px 5px; + margin-bottom: 0px; + margin-left: 0px; + font-size: 0.8em; + letter-spacing: 0; + text-transform: none; + text-align: center; + color: #FFF; + background: #10121A; + border-radius: 2px; + } + .imagify-2-free.imagify-b-right:after{ + content: ""; + position: absolute; + left: 50%; + top: unset; + bottom: -6px; + margin-left: -3px; + border-top: 3px solid #10121A; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + } + div.imagify-col-price{ + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-direction: normal; + -webkit-box-orient: vertical; + -moz-box-direction: normal; + -moz-box-orient: vertical; + align-items: center; + } + .imagify-flex-table .imagify-price-complement{ + padding: 5px 0 0 0; + margin: 0; + text-align: center; + } + div.imagify-col-details{ + padding: 10px 0px 10px 10px; + } + .imagify-pricing-table .imagify-col-other-actions{ + padding: 0 10px 0 0; + } + .imagify-pricing-table .imagify-button-secondary{ + font-size: 12px; + white-space: normal; + line-height: 14px; + padding: 10px; + } + .imagify-price-big{ + font-size: 24px; + } + span.imagify-price-mini{ + font-size: 12px; + } + .imagify-col-checkbox label{ + padding-left: 30px !important; + } + .medium.imagify-checkbox:not(:checked) + label:before, + .medium.imagify-checkbox:checked + label:before{ + width: 15px; + height: 15px; + } + div.imagify-col-checkbox{ + padding: 0; + } + .imagify-offer-monthly .imagify-flex-table .imagify-price-block, + .imagify-offer-monthlies .imagify-price-block{ + padding: 0; + } + .imagify-pricing-table{ + margin: 0 .5em; + } + .imagify-payment-modal .close-btn{ + top: 5px; + right: 5px; + } + .imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked) + label:after, + .imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked + label:after{ + top: -1px; + left: 10px; + } +} diff --git a/wp/wp-content/plugins/imagify/assets/css/pricing-modal.min.css b/wp/wp-content/plugins/imagify/assets/css/pricing-modal.min.css new file mode 100644 index 00000000..ea68826c --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/pricing-modal.min.css @@ -0,0 +1 @@ +.imagify-border-styled,.imagify-flex-table,.imagify-modal-cols,.imagify-offer-header,.imagify-payment-modal .imagify-modal-content,.imagify-tabs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.imagify-border-styled,.imagify-modal-cols{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-payment-modal{text-align:center;color:#7a8996}.imagify-payment-modal *{-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-modal-loader{position:absolute;top:0;left:0;right:0;bottom:0;background:#fff url('../images/loader-balls.svg') center no-repeat;z-index:10}.imagify-payment-modal .imagify-modal-content{width:980px;max-width:100%;min-width:925px;padding:0}.imagify-modal-content.imagify-iframe-viewing{width:980px;height:672px;overflow:hidden}.imagify-iframe-viewing #imagify-payment-process-view{width:980px;height:668px}.imagify-payment-modal .imagify-modal-main{width:70%}.imagify-iframe-viewing .imagify-modal-main{width:auto}.imagify-payment-modal .imagify-modal-content.imagify-success-viewing{min-width:auto;width:450px;min-height:300px}.imagify-success-viewing .imagify-modal-main{width:100%}.imagify-payment-modal .imagify-modal-sidebar{width:30%;padding:15px 20px;background:#1f2332;color:#fff}.imagify-modal-content.imagify-iframe-viewing .imagify-modal-sidebar,.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar{display:none}.imagify-modal-section{padding:0 25px}.imagify-modal-section.section-gray{margin:0 0 1em;padding:10px 25px 15px;background:#f6f7fb}.imagify-tabs-contents .section-gray{padding:8px 25px 10px}.imagify-modal-section .imagify-modal-title:first-child{margin-top:1em;margin-bottom:1.5em}.imagify-modal-section.section-gray .imagify-modal-title{margin-top:.5em;margin-bottom:.5em}.imagify-modal-title{font-size:1.8em}.imagify-modal-title .imagify-inner-sub-title{display:block;font-size:.56em}.imagify-analyzing .imagify-numbers-calc,.imagify-modal-section .imagify-loader,.imagify-modal-section.imagify-analyzing .imagify-modal-cols,.imagify-numbers-notcalc{display:none}.imagify-analyzing .imagify-numbers-notcalc,.imagify-modal-section.imagify-analyzing .imagify-loader{display:block}.imagify-modal-section .imagify-loader{margin:2em auto}.imagify-border-styled{width:200px;margin:0 auto;color:#8bc34a;font-weight:700;font-size:.925em}.imagify-border-styled:after,.imagify-border-styled:before{content:"";height:1px;background:rgba(0,0,0,.1);-ms-flex-preferred-size:40px;flex-basis:40px}.imagify-border-styled:before{margin-right:5px}.imagify-border-styled:after{margin-left:5px}.imagify-big-number{font-size:3.7em;font-weight:700;margin:-3px 0;color:#4a4a4a;line-height:1}.imagify-payment-modal strong{font-weight:700;color:#4a4a4a}.imagify-popin-message{padding:5px 15px;text-align:left}.imagify-popin-message.imagify-error p{color:#fff}.imagify-small-options{width:300px;margin:1em auto .5em;background:#338ea6;border-radius:4px}.imagify-small-options input[type=radio]:checked+label,.imagify-small-options input[type=radio]:not(:checked)+label{padding:8px 10px;font-size:13px;color:#fff;-webkit-box-shadow:none;box-shadow:none;border-left:0}.imagify-small-options input[type=radio]:not(:checked)+label{background:#338ea6;color:rgba(255,255,255,.4)}.imagify-small-options input[type=radio]:checked+label{background:#40b1d0}.imagify-cols:after{content:"";display:table;clear:both}.js .imagify-iframe-viewing .close-btn{display:none}.imagify-modal .imagify-cols{padding:0 20px}.imagify-payment-modal .imagify-iconed{margin:1.5em 5em 1.5em 0}.imagify-iconed{position:relative;text-align:left;padding-left:42px;margin-right:15px;font-weight:500}.imagify-iconed .dashicons,.imagify-iconed .icon{position:absolute;font-size:2em;left:0;top:2px;color:#40b1d0}.imagify-payment-modal .close-btn{top:10px;right:10px;width:24px;height:24px;padding:2px 0 0 4.5px;color:#fff;background:#40b1d0;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-payment-modal .close-btn i{margin-left:-3.5px;margin-top:-.5px}.imagify-payment-modal .close-btn:hover{background:#f6f7fb}.imagify-offer-line{margin-top:1.5em}.imagify-offer-line+.imagify-offer-line{margin-top:.75em}.imagify-offer-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 0 0 15px;border-radius:4px 4px 0 0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-header.imagify-offer-header.imagify-offer-header .imagify-inline-options label:last-child{border-radius:0 4px 0 0}.imagify-offer-header .imagify-inline-options{width:auto}.imagify-offer-title{font-weight:700;margin:0}.imagify-offer-header,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#e5ebef}.imagify-offer-onetime .imagify-offer-header{padding-top:8px;padding-bottom:8px}.imagify-offer-onetimes>div{padding-top:15px;padding-bottom:15px}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;padding:7px 30px;font-size:1em;letter-spacing:.05em;color:inherit;-webkit-box-shadow:0 0 0;box-shadow:0 0 0;border-radius:0}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#f6f7fb}.imagify-2-free{position:absolute;bottom:100%;left:0;right:0;padding:2px 10px;margin-bottom:8px;font-size:.8em;letter-spacing:0;text-transform:none;text-align:center;color:#fff;background:#10121a;border-radius:2px}.imagify-2-free:after{content:"";position:absolute;left:50%;bottom:-3px;margin-left:-3px;border-top:3px solid #10121a;border-left:3px solid transparent;border-right:3px solid transparent}.imagify-2-free.imagify-b-right{bottom:auto;left:100%;right:-100%;margin-bottom:0;margin-left:8px}.imagify-2-free.imagify-b-right:after{left:-3px;bottom:auto;top:50%;margin-top:-3px;margin-left:0;border-right:3px solid #10121a;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:0}.imagify-2-free.imagify-b-bottom{bottom:-100%;left:0;right:0;margin-top:8px}.imagify-2-free.imagify-b-bottom:after{top:-3px;bottom:auto;border-bottom:3px solid #10121a;border-left:3px solid transparent;border-right:3px solid transparent;border-top:0}.imagify-offer-content{text-align:left;background:#f6f7fb;border-radius:0 0 4px 4px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-onetime .imagify-offer-content{padding:10px 0}div.imagify-col-checkbox{position:relative;width:25.5%;padding-top:10px;padding-bottom:7px}.imagify-col-checkbox label{display:block}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked){position:absolute;top:50%;left:6px;margin:-8px 0 0 0}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{margin:0;top:-2px;left:6px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{top:1px;left:13px}.imagify-col-checkbox label{padding-left:55px!important}.imagify-offer-size{font-size:30px;color:#2e3243;font-weight:700;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-by{font-size:10px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-approx{display:none;font-size:11px;line-height:1.2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}div.imagify-col-price{width:35%}.imagify-flex-table .imagify-price-block{padding-left:0;padding-right:0}.imagify-offer-monthlies .imagify-price-block,.imagify-offer-monthly .imagify-flex-table .imagify-price-block{padding-top:0}.imagify-flex-table .imagify-price-complement{padding-right:0;font-size:10px;font-weight:700}.imagify-price-block,.imagify-price-discount{white-space:nowrap}.imagify-price-block span,.imagify-price-discount span{display:inline-block;vertical-align:middle}.imagify-price-discount.imagify-price-discount{position:relative;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding-top:15px;font-weight:700;width:70px}.imagify-price-discount:before{content:"";position:absolute;top:25px;width:62%;height:2px;background:#2e3243;-webkit-transform:rotate(-15deg);-ms-transform:rotate(-15deg);transform:rotate(-15deg)}.imagify-offer-onetimes .imagify-price-discount:before{width:100%}.imagify-price-discount-dollar{color:#2e3243}.imagify-price-discount-number{color:#8ba6b4}.imagify-offer-selected .imagify-price-discount-number{color:#fff}span.imagify-dollars{color:#1f2332;font-size:18px;font-weight:700;vertical-align:-2px}.imagify-offer-onetime .imagify-col-price{padding-top:0}.imagify-offer-onetime .imagify-dollars{vertical-align:-1px}.imagify-price-big,.imagify-price-mini{color:#40b1d0;font-weight:700}.imagify-price-big{font-size:36px}span.imagify-price-mini{font-size:18px;vertical-align:2px}span.imagify-price-by{font-size:10px;color:#1f2332;vertical-align:-13px;text-indent:-27px}.imagify-col-other-actions{width:18.5%;text-align:right}.imagify-col-other-actions a{font-size:11px}.imagify-offer-selected,.imagify-offer-selected .imagify-col-other-actions a,.imagify-offer-selected .imagify-offer-size,.imagify-offer-selected .imagify-offer-title,.imagify-offer-selected .imagify-price-big,.imagify-offer-selected .imagify-price-complement,.imagify-offer-selected .imagify-price-mini{color:#fff}.imagify-offer-selected .imagify-offer-header,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#338ea6}.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#40b1d0}.imagify-offer-selected .imagify-offer-content{background:#40b1d0}.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{border-color:#fff;background:#40b1d0}.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{color:#fff}.imagify-offer-selected .imagify-offer-by{color:#2e3243}.imagify-enough-title{display:none}.imagify-enough-free .imagify-not-enough-title{display:none}.imagify-enough-free .imagify-enough-title{display:block}.imagify-submit-line{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:2em 0;text-align:left}.imagify-coupon-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-coupon-section p{margin:0;line-height:1.3}.imagify-coupon-text{width:200px;max-width:100%;padding-right:15px}.imagify-coupon-loader{display:none}.imagify-coupon-text.checking{text-align:right}.imagify-coupon-text.checking .imagify-coupon-loader{display:inline}.imagify-coupon-text.checking label{display:none}.imagify-coupon-input{position:relative}.imagify-coupon-input input{position:relative;z-index:1}[id=imagify-coupon-validate].button-secondary{position:absolute;top:1px;right:3px;bottom:2px;-webkit-box-shadow:none;box-shadow:none;padding:4px 10px;z-index:0;-webkit-transition:-webkit-transform .275s;transition:-webkit-transform .275s;-o-transition:transform .275s;transition:transform .275s;transition:transform .275s,-webkit-transform .275s}.imagify-canbe-validate [id=imagify-coupon-validate]{-webkit-transform:translateX(45px);-ms-transform:translateX(45px);transform:translateX(45px)}.imagify-modal-section+.imagify-modal-promotion{margin-top:-1em}.imagify-modal-promotion{position:relative;overflow:hidden;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 25px;background:#604d90;text-shadow:0 0 3px rgba(0,0,0,.3)}.imagify-modal-promotion.active{display:-webkit-box;display:-ms-flexbox;display:flex}[id=imagify-pricing-tab-onetime] .imagify-modal-promotion{margin-bottom:4em}.imagify-modal-promotion:before{content:"\f488";position:absolute;top:28px;left:8%;font-family:dashicons;font-size:90px;color:#8476a9;text-shadow:none}.imagify-modal-promotion p{position:relative;margin:.2em 0;color:#fff}.imagify-promo-title{-ms-flex-preferred-size:100%;flex-basis:100%;text-transform:uppercase;font-size:20px;font-weight:700;letter-spacing:.125em}.imagify-until-date{-ms-flex-preferred-size:200px;flex-basis:200px;text-align:right}.imagify-until-date strong{color:#fff}.imagify-submit-line button{font-size:16px}input.imagify-coupon-code{padding:10px;border:2px solid #7a8996;font-size:.875em;font-weight:700;border-radius:3px}.validated.imagify-coupon-section .imagify-coupon-text,.validated.imagify-coupon-section strong{color:#8bc34a}.validated.imagify-coupon-section .imagify-coupon-code{color:#8bc34a;border-color:#8bc34a}.invalid.imagify-coupon-section .imagify-coupon-text,.invalid.imagify-coupon-section strong{color:#d0021b}.invalid.imagify-coupon-section .imagify-coupon-code{color:#d0021b;border-color:#d0021b}.imagify-footer-lines{width:500px;max-width:100%;margin:2em auto 2.5em;font-size:.85em;line-height:1.5}.imagify-year-selected .imagify-switch-my .imagify-yearly{display:block}.imagify-year-selected .imagify-switch-my .imagify-monthly{display:none}.imagify-month-selected .imagify-switch-my .imagify-yearly{display:none}.imagify-month-selected .imagify-switch-my .imagify-monthly{display:block}.imagify-flex-table{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-flex-table>*{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:7px 15px}div.imagify-col-details{width:22%;padding-left:25px}.imagify-col-details p{margin:0}.imagify-pricing-table{margin:0 20px}.imagify-pricing-table .imagify-offer-line{padding:.6em 0;border:2px solid #e8eef0;text-align:left;border-radius:3px}.imagify-pricing-table .imagify-offer-line:first-child{margin-top:.75em}.imagify-pricing-table .imagify-offer-line.imagify-offer-selected:first-child{margin-top:1.75em}.imagify-pricing-table .imagify-offer-line+.imagify-offer-line{margin-top:-2px}.imagify-pricing-table .imagify-col-other-actions{width:20.5%}.imagify-pricing-table .imagify-approx{margin-left:0;line-height:.5;margin-bottom:1em}.imagify-pricing-table .imagify-offer-selected{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03);background:#40b1d0;border-width:0}.imagify-pricing-table .imagify-offer-selected .imagify-approx{color:#fff}.imagify-pricing-table .imagify-button-secondary{padding:3px 20px;-webkit-box-shadow:none;box-shadow:none;text-transform:uppercase;font-size:12px;letter-spacing:.025em}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary{border:2px solid #fff;background:#40b1d0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:focus,.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:hover{background:#fff;color:#40b1d0}.imagify-col .imagify-special-needs{margin-left:25px}.imagify-special-needs strong{font-size:25px;font-weight:700;color:#40b1d0}.imagify-special-needs span{display:block;font-size:12px;margin-top:-.5em}div.imagify-col-price{position:relative}.imagify-recommend{display:none;position:absolute;left:-20px;bottom:100%;padding:0;margin-bottom:8px;color:#1f2332;font-weight:700;font-style:italic}.imagify-offer-selected .imagify-recommend{display:block}[class*=imagify-onetime-] .imagify-recommend{left:65px;margin-bottom:20px}.imagify-recommend:before{content:"";position:absolute;top:7px;left:-35px;width:29px;height:30px;background:url("../images/icon-arrow-choice.png") scroll 0 no-repeat;background-size:contain}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.imagify-recommend:before{background-image:url("../images/icon-arrow-choice.svg")}}.imagify-offer-line[class*=imagify-onetime-]{padding:0;margin:.3em 0 0}.imagify-offer-line.imagify-offer-line[class*=imagify-onetime-]:first-child{margin-top:2em}.imagify-offer-line[class*=imagify-onetime-]+.imagify-offer-line{margin-top:.5em}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-]{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);border-width:2px}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{position:relative;overflow:hidden;width:21%;background:#1f2332;color:#fff}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{background:#338ea6}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details:before{content:"";position:absolute;bottom:0;right:25px;width:75px;height:54px;background:url("../images/icon-pack.png")}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-other-actions{width:30%}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx,.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{color:#fff}.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{font-size:24px}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx{font-size:12px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-block{padding-left:10px}.imagify-offer-line[class*=imagify-onetime-] .imagify-dollars{vertical-align:middle}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-big{vertical-align:-5px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-mini{vertical-align:7px}.imagify-tabs{margin-bottom:0;list-style:none;background:#e5ebef}.imagify-modal-content .imagify-tabs{margin:1em 0 0}.imagify-tab{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:50%;margin:0;font-size:23px}.imagify-tab a{display:block;padding:15px 10px;color:inherit;text-decoration:none}.imagify-tab a:focus{-webkit-box-shadow:none;box-shadow:none;outline:0;color:#40b1d8}.imagify-tab.imagify-current a{background:#f6f7fb}.imagify-tab-content.imagify-current{display:block}.imagify-tab-content{display:none}.imagify-tab-content .imagify-modal-section:first-child{margin-top:0}.imagify-modal-sidebar-content,.imagify-payment-modal .imagify-modal-sidebar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-modal-sidebar-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}p.imagify-modal-sidebar-title.imagify-modal-sidebar-title{margin-top:5px;padding-right:40px;font-size:18px;color:#fff}.imagify-modal-testimony{margin-top:1em}.imagify-modal-testimony+.imagify-modal-testimony{margin-top:2em}@media (max-height:620px){.imagify-modal-testimony+.imagify-modal-testimony{display:none}}.imagify-modal-testimony-person{display:table;width:100%}.imagify-modal-testimony-person>*{display:table-cell;vertical-align:middle}.imagify-modal-avatar{width:114px;line-height:0}.imagify-modal-avatar img{border:2px solid #fff;border-radius:50%;width:96px;height:96px}.imagify-modal-identity a{text-decoration:none;font-weight:700}.imagify-modal-identity a:first-child{font-size:13px}.imagify-modal-identity a:first-child+a{display:block;font-size:10px;color:#7a8996}.imagify-modal-testimony-content.imagify-modal-testimony-content p{font-size:13px;font-style:italic;line-height:1.7;color:#7a8996}.imagify-modal-sidebar-trust{margin-top:auto;padding-top:1.5em}.imagify-modal-sidebar-trust p{margin:0;font-weight:700;font-size:12px;line-height:1.7}.imagify-modal-sidebar-trust p img{margin-right:3px;vertical-align:-2px}.imagify-modal-sidebar-trust p+p{font-size:11px}.imagify-cart{text-align:left}.imagify-cart .imagify-cart-list{border-top:1px solid rgba(122,137,150,.2);border-bottom:1px solid rgba(122,137,150,.2)}.imagify-cart .imagify-cart-label{margin-bottom:.5em;font-size:10px;color:#2e3243}.imagify-cart-list p{margin:0;font-weight:700}.imagify-cart-item{margin:.4em 0}.imagify-cart .imagify-cart-suggestion{margin-top:-.3em}.imagify-cart-suggestion a,.imagify-cl-description p{font-size:10px}.imagify-remove-from-cart{border:0;padding:0;width:14px;height:14px;line-height:13px;border-radius:50%;background:#40b1d0;cursor:pointer;-webkit-transition:background .3s;-o-transition:background .3s;transition:background .3s}.imagify-remove-from-cart i:before{position:relative;top:-6px;left:-3px;font-size:13px;color:#fff}.imagify-remove-from-cart:focus,.imagify-remove-from-cart:hover{background:#d0021b}.imagify-cart .imagify-cl-remove{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:45px}.imagify-cart .imagify-cl-name{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:200px}.imagify-cart .imagify-cl-description{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding-top:10px}.imagify-cart .imagify-cl-price{text-align:right}#imagify-payment-iframe{width:980px;height:672px;background:#f6f7fb url(../images/loader-balls.svg) 50% 50% no-repeat}.imagify-success-view{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.imagify-success-view p{font-weight:700;font-size:16px}.imagify-cart-emptied-item{margin:.3em auto;padding:6px 20px;background:#e6ebef;border-radius:20px}.imagify-cart-emptied-item.imagify-cart-emptied-item p{font-weight:700}.imagify-cart-emptied-item a{color:#40b1d0;float:right;font-weight:700}@media (max-width:782px){.imagify-payment-modal .imagify-modal-content{width:90%;min-width:auto;-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-payment-modal .imagify-modal-main{width:100%}.imagify-payment-modal .imagify-modal-sidebar{width:100%}.imagify-modal-section.section-gray{padding:10px 10px 15px}.imagify-modal-section{padding:0 10px}.imagify-submit-line{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-coupon-section{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.imagify-coupon-section .imagify-coupon-text{text-align:center;width:100%;padding:0;margin-bottom:20px}.imagify-modal-cols{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-col{padding:0;float:none;width:100%}.imagify-payment-modal .imagify-iconed{margin:1.5em auto;max-width:260px}.imagify-offer-header{padding:0}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{padding:7px 15px}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{padding:7px 15px}.imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-monthly,.imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-yearly{padding:10px 5px;font-size:12px}.imagify-offer-size{font-size:18px}.imagify-col-other-actions{padding:10px;text-align:center}.imagify-2-free{padding:2px 5px}.imagify-2-free.imagify-b-right{position:absolute;bottom:100%;left:0;right:0;padding:2px 5px;margin-bottom:0;margin-left:0;font-size:.8em;letter-spacing:0;text-transform:none;text-align:center;color:#fff;background:#10121a;border-radius:2px}.imagify-2-free.imagify-b-right:after{content:"";position:absolute;left:50%;top:unset;bottom:-6px;margin-left:-3px;border-top:3px solid #10121a;border-left:3px solid transparent;border-right:3px solid transparent}div.imagify-col-price{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-flex-table .imagify-price-complement{padding:5px 0 0 0;margin:0;text-align:center}div.imagify-col-details{padding:10px 0 10px 10px}.imagify-pricing-table .imagify-col-other-actions{padding:0 10px 0 0}.imagify-pricing-table .imagify-button-secondary{font-size:12px;white-space:normal;line-height:14px;padding:10px}.imagify-price-big{font-size:24px}span.imagify-price-mini{font-size:12px}.imagify-col-checkbox label{padding-left:30px!important}.medium.imagify-checkbox:checked+label:before,.medium.imagify-checkbox:not(:checked)+label:before{width:15px;height:15px}div.imagify-col-checkbox{padding:0}.imagify-offer-monthlies .imagify-price-block,.imagify-offer-monthly .imagify-flex-table .imagify-price-block{padding:0}.imagify-pricing-table{margin:0 .5em}.imagify-payment-modal .close-btn{top:5px;right:5px}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{top:-1px;left:10px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.css b/wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.css new file mode 100644 index 00000000..6e0bd469 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.css @@ -0,0 +1,172 @@ +/* Sub Layer */ +body[class*="_imagify"] .swal2-container.swal2-shown { + background: rgb(31, 35 ,50); + background: rgba(31, 35 ,50, .9); + z-index: 100000; +} + +/* White Container */ +.imagify-sweet-alert .swal2-modal { + border-radius: 2px; +} + +/* To get icon background dark */ +.imagify-sweet-alert { + background: #1F2332!important; +} +.imagify-sweet-alert .swal2-icon { + margin-bottom: 5px; +} + +/* header error color */ +.imagify-swal-error-header { + background: #C51162!important; +} +.imagify-swal-error-header .swal2-icon { + border-color: #FFF; + color: #FFF; +} + +/* Title and Subtitle */ +.imagify-sweet-alert .swal2-title { + margin: 0; + padding: 28px 32px; + font-size: 24px; + text-align: center; + color: #FFF; + background: #1F2332; +} +.imagify-swal-has-subtitle .swal2-title { + text-align: left; +} +.imagify-swal-error-header .swal2-title { + background: #C51162; + text-align: center; + line-height: 1.15; +} +.imagify-sweet-alert .imagify-swal-subtitle { + padding: 0 32px 28px; + margin-top: -16px; + font-weight: 500; + font-size: 14px; + text-align: left; + color: #7A8996; + background: #1F2332; +} +.imagify-swal-error-header .imagify-swal-subtitle { + color: #FFF; + background: #C51162; + text-align: center; +} + +/* Buttons */ +.imagify-sweet-alert .swal2-buttonswrapper, +.imagify-swal-buttonswrapper { + margin-top: 0; + padding: 22px; + background: #F4F7F9; +} +.imagify-sweet-alert button.swal2-styled, +.imagify-swal-buttonswrapper a.button.imagify-button-primary { + height: auto; + padding: 12px 32px; + margin: 10px; + font-size: 14px; + letter-spacing: 1px; + text-transform: uppercase; + border-radius: 3px; + background-color: #40b1d0 !important; + text-shadow: none!important; + box-shadow: 0 3px 0 #338ea6; + white-space: normal; + line-height: 1.5; +} +.imagify-swal-buttonswrapper a.button.imagify-button-primary:focus, +.imagify-swal-buttonswrapper a.button.imagify-button-primary:hover { + text-shadow: none; + color: #FFF; +} +.imagify-swal-buttonswrapper a.button svg { + margin-right: 12px; + vertical-align: -2px; +} +.imagify-sweet-alert button.loading { + border-radius: 100% !important; + height: 40px !important; + padding:0!important; + box-shadow: none!important; +} +.imagify-sweet-alert button.swal2-cancel { + color: #7A8996; + background: #E9EFF2 !important; + box-shadow: 0 3px 0 rgba(31, 35, 50, .2); +} +.imagify-sweet-alert-signup.imagify-sweet-alert { + background: #FFF!important; +} +.imagify-sweet-alert-signup .swal2-buttonswrapper { + padding: 12px 22px; +} +.swal2-success-circular-line-left, +.swal2-success-fix, +.swal2-success-circular-line-right { + background: #1F2332 !important +} +.imagify-sweet-alert-signup .sa-confirm-button-container { + width: 40%; +} +.imagify-sweet-alert-signup .swal2-input { + margin-top: 0; + margin-left: 40px; + margin-right: 40px; + width: calc( 100% - 80px); +} +.imagify-sweet-alert .sa-input-error:before, +.imagify-sweet-alert .sa-input-error:after, +.imagify-sweet-alert .la-ball-fall { + top: 25% !important; +} + +.imagify-sweet-alert .swal2-buttonswrapper.swal2-loading .swal2-confirm.swal2-confirm { + height: 40px !important; + border-radius: 100% !important; + border-left-width: 0 !important; + border-right-width: 0 !important; +} + +/* Imagify swal contents */ +.imagify-sweet-alert .swal2-content { + padding: 28px 32px; + background: #FFF; +} +.imagify-swal-has-subtitle .swal2-content { + padding: 0; +} +.imagify-swal-content { + font-size: 14px; + padding: 28px 32px; +} + +/* Quota */ +.imagify-swal-quota .imagify-space-left { + display: flex; + align-items: center; + justify-content: space-between; + padding: 4px 32px; + text-align: left; + font-weight: bold; + color: #FFF; + background: #343A49; +} +.imagify-swal-quota .imagify-space-left p { + font-size: 14px; +} +.imagify-swal-quota .imagify-space-left [class^="imagify-bar-"] { + width: auto; + flex-basis: 269px; +} + +/* Close button */ +.imagify-sweet-alert .swal2-close { + color: rgba(255,255,255,.5); +} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.min.css b/wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.min.css new file mode 100644 index 00000000..660f01e9 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/sweetalert-custom.min.css @@ -0,0 +1 @@ +body[class*="_imagify"] .swal2-container.swal2-shown{background:rgb(31,35 ,50);background:rgba(31,35 ,50,.9);z-index:100000}.imagify-sweet-alert .swal2-modal{border-radius:2px}.imagify-sweet-alert{background:#1f2332!important}.imagify-sweet-alert .swal2-icon{margin-bottom:5px}.imagify-swal-error-header{background:#c51162!important}.imagify-swal-error-header .swal2-icon{border-color:#fff;color:#fff}.imagify-sweet-alert .swal2-title{margin:0;padding:28px 32px;font-size:24px;text-align:center;color:#fff;background:#1f2332}.imagify-swal-has-subtitle .swal2-title{text-align:left}.imagify-swal-error-header .swal2-title{background:#c51162;text-align:center;line-height:1.15}.imagify-sweet-alert .imagify-swal-subtitle{padding:0 32px 28px;margin-top:-16px;font-weight:500;font-size:14px;text-align:left;color:#7a8996;background:#1f2332}.imagify-swal-error-header .imagify-swal-subtitle{color:#fff;background:#c51162;text-align:center}.imagify-swal-buttonswrapper,.imagify-sweet-alert .swal2-buttonswrapper{margin-top:0;padding:22px;background:#f4f7f9}.imagify-swal-buttonswrapper a.button.imagify-button-primary,.imagify-sweet-alert button.swal2-styled{height:auto;padding:12px 32px;margin:10px;font-size:14px;letter-spacing:1px;text-transform:uppercase;border-radius:3px;background-color:#40b1d0!important;text-shadow:none!important;-webkit-box-shadow:0 3px 0 #338ea6;box-shadow:0 3px 0 #338ea6;white-space:normal;line-height:1.5}.imagify-swal-buttonswrapper a.button.imagify-button-primary:focus,.imagify-swal-buttonswrapper a.button.imagify-button-primary:hover{text-shadow:none;color:#fff}.imagify-swal-buttonswrapper a.button svg{margin-right:12px;vertical-align:-2px}.imagify-sweet-alert button.loading{border-radius:100%!important;height:40px!important;padding:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-sweet-alert button.swal2-cancel{color:#7a8996;background:#e9eff2!important;-webkit-box-shadow:0 3px 0 rgba(31,35,50,.2);box-shadow:0 3px 0 rgba(31,35,50,.2)}.imagify-sweet-alert-signup.imagify-sweet-alert{background:#fff!important}.imagify-sweet-alert-signup .swal2-buttonswrapper{padding:12px 22px}.swal2-success-circular-line-left,.swal2-success-circular-line-right,.swal2-success-fix{background:#1f2332!important}.imagify-sweet-alert-signup .sa-confirm-button-container{width:40%}.imagify-sweet-alert-signup .swal2-input{margin-top:0;margin-left:40px;margin-right:40px;width:calc(100% - 80px)}.imagify-sweet-alert .la-ball-fall,.imagify-sweet-alert .sa-input-error:after,.imagify-sweet-alert .sa-input-error:before{top:25%!important}.imagify-sweet-alert .swal2-buttonswrapper.swal2-loading .swal2-confirm.swal2-confirm{height:40px!important;border-radius:100%!important;border-left-width:0!important;border-right-width:0!important}.imagify-sweet-alert .swal2-content{padding:28px 32px;background:#fff}.imagify-swal-has-subtitle .swal2-content{padding:0}.imagify-swal-content{font-size:14px;padding:28px 32px}.imagify-swal-quota .imagify-space-left{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:4px 32px;text-align:left;font-weight:700;color:#fff;background:#343a49}.imagify-swal-quota .imagify-space-left p{font-size:14px}.imagify-swal-quota .imagify-space-left [class^=imagify-bar-]{width:auto;-ms-flex-preferred-size:269px;flex-basis:269px}.imagify-sweet-alert .swal2-close{color:rgba(255,255,255,.5)} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/sweetalert2.css b/wp/wp-content/plugins/imagify/assets/css/sweetalert2.css new file mode 100644 index 00000000..10a2ca1e --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/sweetalert2.css @@ -0,0 +1,716 @@ +body.swal2-shown { + overflow-y: hidden; } + +body.swal2-iosfix { + position: fixed; + left: 0; + right: 0; } + +.swal2-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 10px; + background-color: transparent; + z-index: 1060; } + .swal2-container.swal2-fade { + -webkit-transition: background-color .1s; + transition: background-color .1s; } + .swal2-container.swal2-shown { + background-color: rgba(0, 0, 0, 0.4); } + +.swal2-modal { + background-color: #fff; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + border-radius: 5px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-align: center; + margin: auto; + overflow-x: hidden; + overflow-y: auto; + display: none; + position: relative; + max-width: 100%; } + .swal2-modal:focus { + outline: none; } + .swal2-modal.swal2-loading { + overflow-y: hidden; } + .swal2-modal .swal2-title { + color: #595959; + font-size: 30px; + text-align: center; + font-weight: 600; + text-transform: none; + position: relative; + margin: 0 0 .4em; + padding: 0; + display: block; + word-wrap: break-word; } + .swal2-modal .swal2-buttonswrapper { + margin-top: 15px; } + .swal2-modal .swal2-buttonswrapper:not(.swal2-loading) .swal2-styled[disabled] { + opacity: .4; + cursor: no-drop; } + .swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-confirm { + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 4px solid transparent; + border-color: transparent; + width: 40px; + height: 40px; + padding: 0; + margin: 7.5px; + vertical-align: top; + background-color: transparent !important; + color: transparent; + cursor: default; + border-radius: 100%; + -webkit-animation: rotate-loading 1.5s linear 0s infinite normal; + animation: rotate-loading 1.5s linear 0s infinite normal; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-cancel { + margin-left: 30px; + margin-right: 30px; } + .swal2-modal .swal2-buttonswrapper.swal2-loading :not(.swal2-styled).swal2-confirm::after { + display: inline-block; + content: ''; + margin-left: 5px 0 15px; + vertical-align: -1px; + height: 15px; + width: 15px; + border: 3px solid #999999; + -webkit-box-shadow: 1px 1px 1px #fff; + box-shadow: 1px 1px 1px #fff; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: rotate-loading 1.5s linear 0s infinite normal; + animation: rotate-loading 1.5s linear 0s infinite normal; } + .swal2-modal .swal2-styled { + border: 0; + border-radius: 3px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + cursor: pointer; + font-size: 17px; + font-weight: 500; + margin: 15px 5px 0; + padding: 10px 32px; } + .swal2-modal .swal2-image { + margin: 20px auto; + max-width: 100%; } + .swal2-modal .swal2-close { + background: transparent; + border: 0; + margin: 0; + padding: 0; + width: 38px; + height: 40px; + font-size: 36px; + line-height: 40px; + font-family: serif; + position: absolute; + top: 5px; + right: 8px; + cursor: pointer; + color: #cccccc; + -webkit-transition: color .1s ease; + transition: color .1s ease; } + .swal2-modal .swal2-close:hover { + color: #d55; } + .swal2-modal > .swal2-input, + .swal2-modal > .swal2-file, + .swal2-modal > .swal2-textarea, + .swal2-modal > .swal2-select, + .swal2-modal > .swal2-radio, + .swal2-modal > .swal2-checkbox { + display: none; } + .swal2-modal .swal2-content { + font-size: 18px; + text-align: center; + font-weight: 300; + position: relative; + float: none; + margin: 0; + padding: 0; + line-height: normal; + color: #545454; + word-wrap: break-word; } + .swal2-modal .swal2-input, + .swal2-modal .swal2-file, + .swal2-modal .swal2-textarea, + .swal2-modal .swal2-select, + .swal2-modal .swal2-radio, + .swal2-modal .swal2-checkbox { + margin: 20px auto; } + .swal2-modal .swal2-input, + .swal2-modal .swal2-file, + .swal2-modal .swal2-textarea { + width: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-size: 18px; + border-radius: 3px; + border: 1px solid #d9d9d9; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06); + -webkit-transition: border-color box-shadow .3s; + transition: border-color box-shadow .3s; } + .swal2-modal .swal2-input.swal2-inputerror, + .swal2-modal .swal2-file.swal2-inputerror, + .swal2-modal .swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + -webkit-box-shadow: 0 0 2px #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; } + .swal2-modal .swal2-input:focus, + .swal2-modal .swal2-file:focus, + .swal2-modal .swal2-textarea:focus { + outline: none; + border: 1px solid #b4dbed; + -webkit-box-shadow: 0 0 3px #c4e6f5; + box-shadow: 0 0 3px #c4e6f5; } + .swal2-modal .swal2-input:focus::-webkit-input-placeholder, + .swal2-modal .swal2-file:focus::-webkit-input-placeholder, + .swal2-modal .swal2-textarea:focus::-webkit-input-placeholder { + -webkit-transition: opacity .3s .03s ease; + transition: opacity .3s .03s ease; + opacity: .8; } + .swal2-modal .swal2-input:focus:-ms-input-placeholder, + .swal2-modal .swal2-file:focus:-ms-input-placeholder, + .swal2-modal .swal2-textarea:focus:-ms-input-placeholder { + -webkit-transition: opacity .3s .03s ease; + transition: opacity .3s .03s ease; + opacity: .8; } + .swal2-modal .swal2-input:focus::placeholder, + .swal2-modal .swal2-file:focus::placeholder, + .swal2-modal .swal2-textarea:focus::placeholder { + -webkit-transition: opacity .3s .03s ease; + transition: opacity .3s .03s ease; + opacity: .8; } + .swal2-modal .swal2-input::-webkit-input-placeholder, + .swal2-modal .swal2-file::-webkit-input-placeholder, + .swal2-modal .swal2-textarea::-webkit-input-placeholder { + color: #e6e6e6; } + .swal2-modal .swal2-input:-ms-input-placeholder, + .swal2-modal .swal2-file:-ms-input-placeholder, + .swal2-modal .swal2-textarea:-ms-input-placeholder { + color: #e6e6e6; } + .swal2-modal .swal2-input::placeholder, + .swal2-modal .swal2-file::placeholder, + .swal2-modal .swal2-textarea::placeholder { + color: #e6e6e6; } + .swal2-modal .swal2-range input { + float: left; + width: 80%; } + .swal2-modal .swal2-range output { + float: right; + width: 20%; + font-size: 20px; + font-weight: 600; + text-align: center; } + .swal2-modal .swal2-range input, + .swal2-modal .swal2-range output { + height: 43px; + line-height: 43px; + vertical-align: middle; + margin: 20px auto; + padding: 0; } + .swal2-modal .swal2-input { + height: 43px; + padding: 0 12px; } + .swal2-modal .swal2-input[type='number'] { + max-width: 150px; } + .swal2-modal .swal2-file { + font-size: 20px; } + .swal2-modal .swal2-textarea { + height: 108px; + padding: 12px; } + .swal2-modal .swal2-select { + color: #545454; + font-size: inherit; + padding: 5px 10px; + min-width: 40%; + max-width: 100%; } + .swal2-modal .swal2-radio { + border: 0; } + .swal2-modal .swal2-radio label:not(:first-child) { + margin-left: 20px; } + .swal2-modal .swal2-radio input, + .swal2-modal .swal2-radio span { + vertical-align: middle; } + .swal2-modal .swal2-radio input { + margin: 0 3px 0 0; } + .swal2-modal .swal2-checkbox { + color: #545454; } + .swal2-modal .swal2-checkbox input, + .swal2-modal .swal2-checkbox span { + vertical-align: middle; } + .swal2-modal .swal2-validationerror { + background-color: #f0f0f0; + margin: 0 -20px; + overflow: hidden; + padding: 10px; + color: gray; + font-size: 16px; + font-weight: 300; + display: none; } + .swal2-modal .swal2-validationerror::before { + content: '!'; + display: inline-block; + width: 24px; + height: 24px; + border-radius: 50%; + background-color: #ea7d7d; + color: #fff; + line-height: 24px; + text-align: center; + margin-right: 10px; } + +@supports (-ms-accelerator: true) { + .swal2-range input { + width: 100% !important; } + .swal2-range output { + display: none; } } + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .swal2-range input { + width: 100% !important; } + .swal2-range output { + display: none; } } + +.swal2-icon { + width: 80px; + height: 80px; + border: 4px solid transparent; + border-radius: 50%; + margin: 20px auto 30px; + padding: 0; + position: relative; + -webkit-box-sizing: content-box; + box-sizing: content-box; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .swal2-icon.swal2-error { + border-color: #f27474; } + .swal2-icon.swal2-error .swal2-x-mark { + position: relative; + display: block; } + .swal2-icon.swal2-error [class^='swal2-x-mark-line'] { + position: absolute; + height: 5px; + width: 47px; + background-color: #f27474; + display: block; + top: 37px; + border-radius: 2px; } + .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='left'] { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + left: 17px; } + .swal2-icon.swal2-error [class^='swal2-x-mark-line'][class$='right'] { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + right: 16px; } + .swal2-icon.swal2-warning { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + color: #f8bb86; + border-color: #facea8; + font-size: 60px; + line-height: 80px; + text-align: center; } + .swal2-icon.swal2-info { + font-family: 'Open Sans', sans-serif; + color: #3fc3ee; + border-color: #9de0f6; + font-size: 60px; + line-height: 80px; + text-align: center; } + .swal2-icon.swal2-question { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + color: #87adbd; + border-color: #c9dae1; + font-size: 60px; + line-height: 80px; + text-align: center; } + .swal2-icon.swal2-success { + border-color: #a5dc86; } + .swal2-icon.swal2-success [class^='swal2-success-circular-line'] { + border-radius: 50%; + position: absolute; + width: 60px; + height: 120px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='left'] { + border-radius: 120px 0 0 120px; + top: -7px; + left: -33px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 60px 60px; + transform-origin: 60px 60px; } + .swal2-icon.swal2-success [class^='swal2-success-circular-line'][class$='right'] { + border-radius: 0 120px 120px 0; + top: -11px; + left: 30px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 0 60px; + transform-origin: 0 60px; } + .swal2-icon.swal2-success .swal2-success-ring { + width: 80px; + height: 80px; + border: 4px solid rgba(165, 220, 134, 0.2); + border-radius: 50%; + -webkit-box-sizing: content-box; + box-sizing: content-box; + position: absolute; + left: -4px; + top: -4px; + z-index: 2; } + .swal2-icon.swal2-success .swal2-success-fix { + width: 7px; + height: 90px; + position: absolute; + left: 28px; + top: 8px; + z-index: 1; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .swal2-icon.swal2-success [class^='swal2-success-line'] { + height: 5px; + background-color: #a5dc86; + display: block; + border-radius: 2px; + position: absolute; + z-index: 2; } + .swal2-icon.swal2-success [class^='swal2-success-line'][class$='tip'] { + width: 25px; + left: 14px; + top: 46px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .swal2-icon.swal2-success [class^='swal2-success-line'][class$='long'] { + width: 47px; + right: 8px; + top: 38px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + +.swal2-progresssteps { + font-weight: 600; + margin: 0 0 20px; + padding: 0; } + .swal2-progresssteps li { + display: inline-block; + position: relative; } + .swal2-progresssteps .swal2-progresscircle { + background: #3085d6; + border-radius: 2em; + color: #fff; + height: 2em; + line-height: 2em; + text-align: center; + width: 2em; + z-index: 20; } + .swal2-progresssteps .swal2-progresscircle:first-child { + margin-left: 0; } + .swal2-progresssteps .swal2-progresscircle:last-child { + margin-right: 0; } + .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep { + background: #3085d6; } + .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progresscircle { + background: #add8e6; } + .swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep ~ .swal2-progressline { + background: #add8e6; } + .swal2-progresssteps .swal2-progressline { + background: #3085d6; + height: .4em; + margin: 0 -1px; + z-index: 10; } + +[class^='swal2'] { + -webkit-tap-highlight-color: transparent; } + +@-webkit-keyframes showSweetAlert { + 0% { + -webkit-transform: scale(0.7); + transform: scale(0.7); } + 45% { + -webkit-transform: scale(1.05); + transform: scale(1.05); } + 80% { + -webkit-transform: scale(0.95); + transform: scale(0.95); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); } } + +@keyframes showSweetAlert { + 0% { + -webkit-transform: scale(0.7); + transform: scale(0.7); } + 45% { + -webkit-transform: scale(1.05); + transform: scale(1.05); } + 80% { + -webkit-transform: scale(0.95); + transform: scale(0.95); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); } } + +@-webkit-keyframes hideSweetAlert { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + 100% { + -webkit-transform: scale(0.5); + transform: scale(0.5); + opacity: 0; } } + +@keyframes hideSweetAlert { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + 100% { + -webkit-transform: scale(0.5); + transform: scale(0.5); + opacity: 0; } } + +.swal2-show { + -webkit-animation: showSweetAlert 0.3s; + animation: showSweetAlert 0.3s; } + .swal2-show.swal2-noanimation { + -webkit-animation: none; + animation: none; } + +.swal2-hide { + -webkit-animation: hideSweetAlert 0.15s forwards; + animation: hideSweetAlert 0.15s forwards; } + .swal2-hide.swal2-noanimation { + -webkit-animation: none; + animation: none; } + +@-webkit-keyframes animate-success-tip { + 0% { + width: 0; + left: 1px; + top: 19px; } + 54% { + width: 0; + left: 1px; + top: 19px; } + 70% { + width: 50px; + left: -8px; + top: 37px; } + 84% { + width: 17px; + left: 21px; + top: 48px; } + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@keyframes animate-success-tip { + 0% { + width: 0; + left: 1px; + top: 19px; } + 54% { + width: 0; + left: 1px; + top: 19px; } + 70% { + width: 50px; + left: -8px; + top: 37px; } + 84% { + width: 17px; + left: 21px; + top: 48px; } + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@-webkit-keyframes animate-success-long { + 0% { + width: 0; + right: 46px; + top: 54px; } + 65% { + width: 0; + right: 46px; + top: 54px; } + 84% { + width: 55px; + right: 0; + top: 35px; } + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@keyframes animate-success-long { + 0% { + width: 0; + right: 46px; + top: 54px; } + 65% { + width: 0; + right: 46px; + top: 54px; } + 84% { + width: 55px; + right: 0; + top: 35px; } + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@-webkit-keyframes rotatePlaceholder { + 0% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 5% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 12% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } + 100% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } } + +@keyframes rotatePlaceholder { + 0% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 5% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 12% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } + 100% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } } + +.swal2-animate-success-line-tip { + -webkit-animation: animate-success-tip 0.75s; + animation: animate-success-tip 0.75s; } + +.swal2-animate-success-line-long { + -webkit-animation: animate-success-long 0.75s; + animation: animate-success-long 0.75s; } + +.swal2-success.swal2-animate-success-icon .swal2-success-circular-line-right { + -webkit-animation: rotatePlaceholder 4.25s ease-in; + animation: rotatePlaceholder 4.25s ease-in; } + +@-webkit-keyframes animate-error-icon { + 0% { + -webkit-transform: rotateX(100deg); + transform: rotateX(100deg); + opacity: 0; } + 100% { + -webkit-transform: rotateX(0deg); + transform: rotateX(0deg); + opacity: 1; } } + +@keyframes animate-error-icon { + 0% { + -webkit-transform: rotateX(100deg); + transform: rotateX(100deg); + opacity: 0; } + 100% { + -webkit-transform: rotateX(0deg); + transform: rotateX(0deg); + opacity: 1; } } + +.swal2-animate-error-icon { + -webkit-animation: animate-error-icon 0.5s; + animation: animate-error-icon 0.5s; } + +@-webkit-keyframes animate-x-mark { + 0% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 50% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 80% { + -webkit-transform: scale(1.15); + transform: scale(1.15); + margin-top: -6px; } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + margin-top: 0; + opacity: 1; } } + +@keyframes animate-x-mark { + 0% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 50% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 80% { + -webkit-transform: scale(1.15); + transform: scale(1.15); + margin-top: -6px; } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + margin-top: 0; + opacity: 1; } } + +.swal2-animate-x-mark { + -webkit-animation: animate-x-mark 0.5s; + animation: animate-x-mark 0.5s; } + +@-webkit-keyframes rotate-loading { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes rotate-loading { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } diff --git a/wp/wp-content/plugins/imagify/assets/css/sweetalert2.min.css b/wp/wp-content/plugins/imagify/assets/css/sweetalert2.min.css new file mode 100644 index 00000000..3b03a7b2 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/sweetalert2.min.css @@ -0,0 +1 @@ +body.swal2-shown{overflow-y:hidden}body.swal2-iosfix{position:fixed;left:0;right:0}.swal2-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;top:0;left:0;bottom:0;right:0;padding:10px;background-color:transparent;z-index:1060}.swal2-container.swal2-fade{-webkit-transition:background-color .1s;-o-transition:background-color .1s;transition:background-color .1s}.swal2-container.swal2-shown{background-color:rgba(0,0,0,.4)}.swal2-modal{background-color:#fff;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;border-radius:5px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:auto;overflow-x:hidden;overflow-y:auto;display:none;position:relative;max-width:100%}.swal2-modal:focus{outline:0}.swal2-modal.swal2-loading{overflow-y:hidden}.swal2-modal .swal2-title{color:#595959;font-size:30px;text-align:center;font-weight:600;text-transform:none;position:relative;margin:0 0 .4em;padding:0;display:block;word-wrap:break-word}.swal2-modal .swal2-buttonswrapper{margin-top:15px}.swal2-modal .swal2-buttonswrapper:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4;cursor:no-drop}.swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-confirm{-webkit-box-sizing:border-box;box-sizing:border-box;border:4px solid transparent;border-color:transparent;width:40px;height:40px;padding:0;margin:7.5px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-modal .swal2-buttonswrapper.swal2-loading .swal2-styled.swal2-cancel{margin-left:30px;margin-right:30px}.swal2-modal .swal2-buttonswrapper.swal2-loading :not(.swal2-styled).swal2-confirm::after{display:inline-block;content:'';margin-left:5px 0 15px;vertical-align:-1px;height:15px;width:15px;border:3px solid #999;-webkit-box-shadow:1px 1px 1px #fff;box-shadow:1px 1px 1px #fff;border-right-color:transparent;border-radius:50%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-modal .swal2-styled{border:0;border-radius:3px;-webkit-box-shadow:none;box-shadow:none;color:#fff;cursor:pointer;font-size:17px;font-weight:500;margin:15px 5px 0;padding:10px 32px}.swal2-modal .swal2-image{margin:20px auto;max-width:100%}.swal2-modal .swal2-close{background:0 0;border:0;margin:0;padding:0;width:38px;height:40px;font-size:36px;line-height:40px;font-family:serif;position:absolute;top:5px;right:8px;cursor:pointer;color:#ccc;-webkit-transition:color .1s ease;-o-transition:color .1s ease;transition:color .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-modal>.swal2-checkbox,.swal2-modal>.swal2-file,.swal2-modal>.swal2-input,.swal2-modal>.swal2-radio,.swal2-modal>.swal2-select,.swal2-modal>.swal2-textarea{display:none}.swal2-modal .swal2-content{font-size:18px;text-align:center;font-weight:300;position:relative;float:none;margin:0;padding:0;line-height:normal;color:#545454;word-wrap:break-word}.swal2-modal .swal2-checkbox,.swal2-modal .swal2-file,.swal2-modal .swal2-input,.swal2-modal .swal2-radio,.swal2-modal .swal2-select,.swal2-modal .swal2-textarea{margin:20px auto}.swal2-modal .swal2-file,.swal2-modal .swal2-input,.swal2-modal .swal2-textarea{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:18px;border-radius:3px;border:1px solid #d9d9d9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.06);box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:border-color box-shadow .3s;-o-transition:border-color box-shadow .3s;transition:border-color box-shadow .3s}.swal2-modal .swal2-file.swal2-inputerror,.swal2-modal .swal2-input.swal2-inputerror,.swal2-modal .swal2-textarea.swal2-inputerror{border-color:#f27474!important;-webkit-box-shadow:0 0 2px #f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-modal .swal2-file:focus,.swal2-modal .swal2-input:focus,.swal2-modal .swal2-textarea:focus{outline:0;border:1px solid #b4dbed;-webkit-box-shadow:0 0 3px #c4e6f5;box-shadow:0 0 3px #c4e6f5}.swal2-modal .swal2-file:focus::-webkit-input-placeholder,.swal2-modal .swal2-input:focus::-webkit-input-placeholder,.swal2-modal .swal2-textarea:focus::-webkit-input-placeholder{-webkit-transition:opacity .3s .03s ease;-o-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file:focus:-ms-input-placeholder,.swal2-modal .swal2-input:focus:-ms-input-placeholder,.swal2-modal .swal2-textarea:focus:-ms-input-placeholder{-webkit-transition:opacity .3s .03s ease;-o-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file:focus::-moz-placeholder,.swal2-modal .swal2-input:focus::-moz-placeholder,.swal2-modal .swal2-textarea:focus::-moz-placeholder{-webkit-transition:opacity .3s .03s ease;-o-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file:focus::-ms-input-placeholder,.swal2-modal .swal2-input:focus::-ms-input-placeholder,.swal2-modal .swal2-textarea:focus::-ms-input-placeholder{-webkit-transition:opacity .3s .03s ease;-o-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file:focus::placeholder,.swal2-modal .swal2-input:focus::placeholder,.swal2-modal .swal2-textarea:focus::placeholder{-webkit-transition:opacity .3s .03s ease;-o-transition:opacity .3s .03s ease;transition:opacity .3s .03s ease;opacity:.8}.swal2-modal .swal2-file::-webkit-input-placeholder,.swal2-modal .swal2-input::-webkit-input-placeholder,.swal2-modal .swal2-textarea::-webkit-input-placeholder{color:#e6e6e6}.swal2-modal .swal2-file:-ms-input-placeholder,.swal2-modal .swal2-input:-ms-input-placeholder,.swal2-modal .swal2-textarea:-ms-input-placeholder{color:#e6e6e6}.swal2-modal .swal2-file::-moz-placeholder,.swal2-modal .swal2-input::-moz-placeholder,.swal2-modal .swal2-textarea::-moz-placeholder{color:#e6e6e6}.swal2-modal .swal2-file::-ms-input-placeholder,.swal2-modal .swal2-input::-ms-input-placeholder,.swal2-modal .swal2-textarea::-ms-input-placeholder{color:#e6e6e6}.swal2-modal .swal2-file::placeholder,.swal2-modal .swal2-input::placeholder,.swal2-modal .swal2-textarea::placeholder{color:#e6e6e6}.swal2-modal .swal2-range input{float:left;width:80%}.swal2-modal .swal2-range output{float:right;width:20%;font-size:20px;font-weight:600;text-align:center}.swal2-modal .swal2-range input,.swal2-modal .swal2-range output{height:43px;line-height:43px;vertical-align:middle;margin:20px auto;padding:0}.swal2-modal .swal2-input{height:43px;padding:0 12px}.swal2-modal .swal2-input[type=number]{max-width:150px}.swal2-modal .swal2-file{font-size:20px}.swal2-modal .swal2-textarea{height:108px;padding:12px}.swal2-modal .swal2-select{color:#545454;font-size:inherit;padding:5px 10px;min-width:40%;max-width:100%}.swal2-modal .swal2-radio{border:0}.swal2-modal .swal2-radio label:not(:first-child){margin-left:20px}.swal2-modal .swal2-radio input,.swal2-modal .swal2-radio span{vertical-align:middle}.swal2-modal .swal2-radio input{margin:0 3px 0 0}.swal2-modal .swal2-checkbox{color:#545454}.swal2-modal .swal2-checkbox input,.swal2-modal .swal2-checkbox span{vertical-align:middle}.swal2-modal .swal2-validationerror{background-color:#f0f0f0;margin:0 -20px;overflow:hidden;padding:10px;color:gray;font-size:16px;font-weight:300;display:none}.swal2-modal .swal2-validationerror::before{content:'!';display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}.swal2-icon{width:80px;height:80px;border:4px solid transparent;border-radius:50%;margin:20px auto 30px;padding:0;position:relative;-webkit-box-sizing:content-box;box-sizing:content-box;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;display:block}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#facea8;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-info{font-family:'Open Sans',sans-serif;color:#3fc3ee;border-color:#9de0f6;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-question{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#87adbd;border-color:#c9dae1;font-size:60px;line-height:80px;text-align:center}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{border-radius:50%;position:absolute;width:60px;height:120px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;-ms-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;-ms-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .swal2-success-ring{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;-webkit-box-sizing:content-box;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .swal2-success-fix{width:7px;height:90px;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-progresssteps{font-weight:600;margin:0 0 20px;padding:0}.swal2-progresssteps li{display:inline-block;position:relative}.swal2-progresssteps .swal2-progresscircle{background:#3085d6;border-radius:2em;color:#fff;height:2em;line-height:2em;text-align:center;width:2em;z-index:20}.swal2-progresssteps .swal2-progresscircle:first-child{margin-left:0}.swal2-progresssteps .swal2-progresscircle:last-child{margin-right:0}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep{background:#3085d6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progresscircle{background:#add8e6}.swal2-progresssteps .swal2-progresscircle.swal2-activeprogressstep~.swal2-progressline{background:#add8e6}.swal2-progresssteps .swal2-progressline{background:#3085d6;height:.4em;margin:0 -1px;z-index:10}[class^=swal2]{-webkit-tap-highlight-color:transparent}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.swal2-show{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.swal2-show.swal2-noanimation{-webkit-animation:none;animation:none}.swal2-hide{-webkit-animation:hideSweetAlert .15s forwards;animation:hideSweetAlert .15s forwards}.swal2-hide.swal2-noanimation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}100%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.swal2-animate-success-line-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.swal2-animate-success-line-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-success.swal2-animate-success-icon .swal2-success-circular-line-right{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.swal2-animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.swal2-animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/css/twentytwenty.css b/wp/wp-content/plugins/imagify/assets/css/twentytwenty.css new file mode 100644 index 00000000..08357373 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/twentytwenty.css @@ -0,0 +1,315 @@ +/** + * Twentwenty image comparison + */ +.twentytwenty-handle { + z-index: 40; + position: absolute; + left: 50%; + top: 50%; + height: 64px; + width: 64px; + margin-left: -32px; + margin-top: -32px; + border-radius: 50%; + box-shadow: 0 3px 0 #338EA6; + background: #40B1D0; + cursor: pointer; +} +.twentytwenty-horizontal .twentytwenty-handle:before, +.twentytwenty-horizontal .twentytwenty-handle:after { + left: 50%; + width: 2px; + height: 9999px; + margin-left: -1px; +} + +.twentytwenty-horizontal .twentytwenty-handle:before { + bottom: 50%; + margin-bottom: 32px; + box-shadow: 0 3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); +} + +.twentytwenty-horizontal .twentytwenty-handle:after { + top: 50%; + margin-top: 34px; + box-shadow: 0 -3px 0 white, 0px 0px 12px rgba(51, 51, 51, 0.5); +} + +.twentytwenty-horizontal .twentytwenty-handle:before, +.twentytwenty-horizontal .twentytwenty-handle:after { + content: ""; + position: absolute; + z-index: 30; + display: block; + background: #F2F5F7; + box-shadow: 0px 0px 12px rgba(51, 51, 51, 0.5); +} + +.twentytwenty-labels, +.twentytwenty-overlay { + position: absolute; + top: 0; + width: 100%; + height: 100%; + -webkit-transition-duration: 0.5s; + transition-duration: 0.5s; +} + +.twentytwenty-labels { + opacity: 1; + -webkit-transition-property: opacity; + transition-property: opacity; +} + +.twentytwenty-labels .twentytwenty-label-content { + position: absolute; + padding: 0 12px; + font-size: 13px; + letter-spacing: 0.1em; + line-height: 38px; + color: white; + background: #1F2332; + border-radius: 2px; +} + +.twentytwenty-horizontal .twentytwenty-labels .twentytwenty-label-content { + bottom: 15px; +} + +.twentytwenty-after-label .twentytwenty-label-content { + background: #40B1D0; +} + +.twentytwenty-left-arrow, +.twentytwenty-right-arrow { + position: absolute; + width: 0; + height: 0; + border: 8px inset transparent; +} + +.twentytwenty-left-arrow, +.twentytwenty-right-arrow { + top: 50%; + margin-top: -8px; +} + +.twentytwenty-container { + box-sizing: content-box; + position: relative; + z-index: 0; + overflow: hidden; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15); + opacity: 0; + -webkit-transition: opacity 0.4s; + transition: opacity 0.4s; + -webkit-user-select: none; + -moz-user-select: none; +} + +.twentytwenty-container * { + box-sizing: content-box; +} + +.twentytwenty-container img { + position: absolute; + top: 0; + display: block; + width: 100%; + height: auto; +} + +.loaded .twentytwenty-container { + opacity: 1; +} + +.twentytwenty-container.active .twentytwenty-overlay .twentytwenty-labels, +.twentytwenty-container.active .twentytwenty-overlay:hover .twentytwenty-labels { + opacity: 0; +} + +.twentytwenty-horizontal .twentytwenty-before-label .twentytwenty-label-content { + left: 15px; +} + +.twentytwenty-horizontal .twentytwenty-after-label .twentytwenty-label-content { + right: 15px; +} + +.twentytwenty-overlay { + z-index: 25; +} +.twentytwenty-before { + z-index: 20; +} +.twentytwenty-after { + z-index: 10; +} + +/* Buttons for image choices */ +.twentytwenty-duo-buttons { + position: absolute; + top: 10px; + z-index: 30; + overflow: hidden; +} + +.twentytwenty-duo-buttons button { + float: left; + padding: 2px 6px; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.125em; + font-weight: bold; + border: 0; + background: #1f2332; + color: #FFF; + transition: all .3s; + cursor: pointer; +} + +.twentytwenty-duo-buttons button:hover, +.twentytwenty-duo-buttons button:focus { + background: #444; +} + +.twentytwenty-duo-buttons button:first-child { + border-radius: 3px 0 0 3px; +} + +.twentytwenty-duo-buttons button:last-child { + border-radius: 0 3px 3px 0; +} + +.twentytwenty-duo-buttons button.selected { + background: #8bc34a; + text-shadow: 0 0 1px rgba(0,0,0,.2); + cursor: default; +} + +.twentytwenty-duo-left { + left: 10px; +} + +.twentytwenty-duo-right { + right: 10px; +} + +.twentytwenty-left-arrow { + left: 50%; + margin-left: -22px; + border-right: 8px solid white; +} + +.twentytwenty-right-arrow { + right: 50%; + margin-right: -22px; + border-left: 8px solid white; +} + +#imagify-visual-comparison .close-btn, +.imagify-visual-comparison .close-btn { + top: 50px; + right: 5px; + width: 33px; + height: 33px; + padding: 1px 0 0 2px; + border: 1px solid #F2F2F2; + color: #F2F2F2; + line-height: 19px; + text-align: center; + border-radius: 50%; +} + +.imagify-modal .imagify-comparison-title { + font-size: 28px; + margin-bottom: 1em; + color: #F2F2F2; + text-align: left; +} +.imagify-modal .imagify-comparison-title .twentytwenty-duo-buttons { + position: static; + margin: 0 10px 0 15px; +} +.imagify-comparison-title .twentytwenty-duo-buttons button { + float: none; + padding: 6px 12px; + font-size: 16px; + text-transform: none; + border: 1px solid #40B1D0; + color: #888899; + letter-spacing: 0; +} +.imagify-comparison-title .twentytwenty-duo-buttons button:focus { + outline: none; + box-shadow: none; +} +.imagify-comparison-title .twentytwenty-duo-buttons .selected { + border: 1px solid #40B1D0; + color: #FFF; + background: #40B1D0; +} + +.imagify-comparison-levels { + margin: 15px 0; + overflow: hidden; +} +.imagify-comparison-levels .imagify-c-level { + display: none; + min-width: 175px; + font-size: 11px; +} +.imagify-c-level.go-left { + float: left; +} +.imagify-c-level.go-right { + float: right; +} +.imagify-c-level.go-right, +.imagify-c-level.go-left { + display: table; +} +.imagify-c-level .imagify-c-level-row { + display: table-row; + margin: 0; + color: #FFF; +} +.imagify-c-level-row > span { + display: table-cell; + padding: 2px 0; +} +.imagify-c-level-row .value { + text-align: right; + padding-left: 5px; +} +.imagify-c-level-row .value.level { + color: #40b1d0; +} +.imagify-c-level-row .value.size { + color: #8bc34a; + font-weight: bold; +} + +/* TT Loader */ +.imagify-modal .loader { + position: absolute; + top: 50%; + left: 50%; + margin: -32px 0 0 -32px; + opacity: 0; + visibility: hidden; + transition: opacity .4s; +} +.imagify-modal .loading .loader { + visibility: visible; + opacity: 1; +} + +/* Specifics for too high modals */ +.modal-is-too-high .imagify-comparison-levels { + position: absolute; + padding: 15px 20px; + background: rgba(31, 35, 50, 0.95); + bottom: 0; left: 0; right: 0; + margin-bottom: 0; +} diff --git a/wp/wp-content/plugins/imagify/assets/css/twentytwenty.min.css b/wp/wp-content/plugins/imagify/assets/css/twentytwenty.min.css new file mode 100644 index 00000000..6250cc54 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/css/twentytwenty.min.css @@ -0,0 +1 @@ +.twentytwenty-handle{z-index:40;position:absolute;left:50%;top:50%;height:64px;width:64px;margin-left:-32px;margin-top:-32px;border-radius:50%;-webkit-box-shadow:0 3px 0 #338ea6;box-shadow:0 3px 0 #338ea6;background:#40b1d0;cursor:pointer}.twentytwenty-horizontal .twentytwenty-handle:after,.twentytwenty-horizontal .twentytwenty-handle:before{left:50%;width:2px;height:9999px;margin-left:-1px}.twentytwenty-horizontal .twentytwenty-handle:before{bottom:50%;margin-bottom:32px;-webkit-box-shadow:0 3px 0 #fff,0 0 12px rgba(51,51,51,.5);box-shadow:0 3px 0 #fff,0 0 12px rgba(51,51,51,.5)}.twentytwenty-horizontal .twentytwenty-handle:after{top:50%;margin-top:34px;-webkit-box-shadow:0 -3px 0 #fff,0 0 12px rgba(51,51,51,.5);box-shadow:0 -3px 0 #fff,0 0 12px rgba(51,51,51,.5)}.twentytwenty-horizontal .twentytwenty-handle:after,.twentytwenty-horizontal .twentytwenty-handle:before{content:"";position:absolute;z-index:30;display:block;background:#f2f5f7;-webkit-box-shadow:0 0 12px rgba(51,51,51,.5);box-shadow:0 0 12px rgba(51,51,51,.5)}.twentytwenty-labels,.twentytwenty-overlay{position:absolute;top:0;width:100%;height:100%;-webkit-transition-duration:.5s;-o-transition-duration:.5s;transition-duration:.5s}.twentytwenty-labels{opacity:1;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.twentytwenty-labels .twentytwenty-label-content{position:absolute;padding:0 12px;font-size:13px;letter-spacing:.1em;line-height:38px;color:#fff;background:#1f2332;border-radius:2px}.twentytwenty-horizontal .twentytwenty-labels .twentytwenty-label-content{bottom:15px}.twentytwenty-after-label .twentytwenty-label-content{background:#40b1d0}.twentytwenty-left-arrow,.twentytwenty-right-arrow{position:absolute;width:0;height:0;border:8px inset transparent}.twentytwenty-left-arrow,.twentytwenty-right-arrow{top:50%;margin-top:-8px}.twentytwenty-container{-webkit-box-sizing:content-box;box-sizing:content-box;position:relative;z-index:0;overflow:hidden;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15);opacity:0;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s;-webkit-user-select:none;-moz-user-select:none}.twentytwenty-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.twentytwenty-container img{position:absolute;top:0;display:block;width:100%;height:auto}.loaded .twentytwenty-container{opacity:1}.twentytwenty-container.active .twentytwenty-overlay .twentytwenty-labels,.twentytwenty-container.active .twentytwenty-overlay:hover .twentytwenty-labels{opacity:0}.twentytwenty-horizontal .twentytwenty-before-label .twentytwenty-label-content{left:15px}.twentytwenty-horizontal .twentytwenty-after-label .twentytwenty-label-content{right:15px}.twentytwenty-overlay{z-index:25}.twentytwenty-before{z-index:20}.twentytwenty-after{z-index:10}.twentytwenty-duo-buttons{position:absolute;top:10px;z-index:30;overflow:hidden}.twentytwenty-duo-buttons button{float:left;padding:2px 6px;font-size:11px;text-transform:uppercase;letter-spacing:.125em;font-weight:700;border:0;background:#1f2332;color:#fff;-webkit-transition:all .3s;-o-transition:all .3s;transition:all .3s;cursor:pointer}.twentytwenty-duo-buttons button:focus,.twentytwenty-duo-buttons button:hover{background:#444}.twentytwenty-duo-buttons button:first-child{border-radius:3px 0 0 3px}.twentytwenty-duo-buttons button:last-child{border-radius:0 3px 3px 0}.twentytwenty-duo-buttons button.selected{background:#8bc34a;text-shadow:0 0 1px rgba(0,0,0,.2);cursor:default}.twentytwenty-duo-left{left:10px}.twentytwenty-duo-right{right:10px}.twentytwenty-left-arrow{left:50%;margin-left:-22px;border-right:8px solid #fff}.twentytwenty-right-arrow{right:50%;margin-right:-22px;border-left:8px solid #fff}#imagify-visual-comparison .close-btn,.imagify-visual-comparison .close-btn{top:50px;right:5px;width:33px;height:33px;padding:1px 0 0 2px;border:1px solid #f2f2f2;color:#f2f2f2;line-height:19px;text-align:center;border-radius:50%}.imagify-modal .imagify-comparison-title{font-size:28px;margin-bottom:1em;color:#f2f2f2;text-align:left}.imagify-modal .imagify-comparison-title .twentytwenty-duo-buttons{position:static;margin:0 10px 0 15px}.imagify-comparison-title .twentytwenty-duo-buttons button{float:none;padding:6px 12px;font-size:16px;text-transform:none;border:1px solid #40b1d0;color:#889;letter-spacing:0}.imagify-comparison-title .twentytwenty-duo-buttons button:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.imagify-comparison-title .twentytwenty-duo-buttons .selected{border:1px solid #40b1d0;color:#fff;background:#40b1d0}.imagify-comparison-levels{margin:15px 0;overflow:hidden}.imagify-comparison-levels .imagify-c-level{display:none;min-width:175px;font-size:11px}.imagify-c-level.go-left{float:left}.imagify-c-level.go-right{float:right}.imagify-c-level.go-left,.imagify-c-level.go-right{display:table}.imagify-c-level .imagify-c-level-row{display:table-row;margin:0;color:#fff}.imagify-c-level-row>span{display:table-cell;padding:2px 0}.imagify-c-level-row .value{text-align:right;padding-left:5px}.imagify-c-level-row .value.level{color:#40b1d0}.imagify-c-level-row .value.size{color:#8bc34a;font-weight:700}.imagify-modal .loader{position:absolute;top:50%;left:50%;margin:-32px 0 0 -32px;opacity:0;visibility:hidden;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.imagify-modal .loading .loader{visibility:visible;opacity:1}.modal-is-too-high .imagify-comparison-levels{position:absolute;padding:15px 20px;background:rgba(31,35,50,.95);bottom:0;left:0;right:0;margin-bottom:0} \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/big-blue-check.png b/wp/wp-content/plugins/imagify/assets/images/big-blue-check.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bf18a30faadcc83cdbb13f96bb60ea300ec081 GIT binary patch literal 2923 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 V!AGFWkK+IU002ovPDHLkV1k2&xxxSd literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/bulk.svg b/wp/wp-content/plugins/imagify/assets/images/bulk.svg new file mode 100644 index 00000000..ce0f684b --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/bulk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/check-1.svg b/wp/wp-content/plugins/imagify/assets/images/check-1.svg new file mode 100644 index 00000000..0212af9d --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/check-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/check-mini-1.svg b/wp/wp-content/plugins/imagify/assets/images/check-mini-1.svg new file mode 100644 index 00000000..8bcb9508 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/check-mini-1.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/wp/wp-content/plugins/imagify/assets/images/check-mini.svg b/wp/wp-content/plugins/imagify/assets/images/check-mini.svg new file mode 100644 index 00000000..042c07dd --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/check-mini.svg @@ -0,0 +1,14 @@ + + + + Path + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/check.svg b/wp/wp-content/plugins/imagify/assets/images/check.svg new file mode 100644 index 00000000..a7772216 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/check.svg @@ -0,0 +1,14 @@ + + + + Path + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/cloudy-sun.svg b/wp/wp-content/plugins/imagify/assets/images/cloudy-sun.svg new file mode 100644 index 00000000..fb059222 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/cloudy-sun.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/imagify/assets/images/facebook_c.svg b/wp/wp-content/plugins/imagify/assets/images/facebook_c.svg new file mode 100644 index 00000000..81c578b7 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/facebook_c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/gear.svg b/wp/wp-content/plugins/imagify/assets/images/gear.svg new file mode 100644 index 00000000..2746e8a9 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-alert.svg b/wp/wp-content/plugins/imagify/assets/images/icon-alert.svg new file mode 100644 index 00000000..47c1605c --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-arrow-choice.png b/wp/wp-content/plugins/imagify/assets/images/icon-arrow-choice.png new file mode 100644 index 0000000000000000000000000000000000000000..2d46185d19f74798454b53a174afeb9f628af9a8 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}y!3-py-+Ve5NQDIWgt)pF_$VkFDXN($shY?u z8>wlUYa7~HTU#rr7|SUe0Y&7Mje(?svWbEckTjBqkU$X~a|IP6prDefv631{jT}%) z6-2rke0BnwFI^Jk7tBzoWBOB&gW2QNnZAPw>FalXnkKgTmWpia<aq*3;xdxV!akn)V$X4~HFTQuPJPaA(^6I)knBpR z+96SL{!-cM0}eO77#DI*ow*}OHr8oIlG^b?wukFj_?7pzU*+gcG0Ct=^YWYjiLJVY znLV2Sn7Pc<8LuoN++Q7u4)@i$Jm+@*64gTodrqbL{1w>3%yH=2p_wzciVGVDTQmP) zi@h6=X?aK2KH%4kEXH>GW!0ZQ?s7f;^K1Dko + + + Shape + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-doc-image.svg b/wp/wp-content/plugins/imagify/assets/images/icon-doc-image.svg new file mode 100644 index 00000000..4b9889ea --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-doc-image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-external.svg b/wp/wp-content/plugins/imagify/assets/images/icon-external.svg new file mode 100644 index 00000000..92fe1fb4 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-external.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-level.svg b/wp/wp-content/plugins/imagify/assets/images/icon-level.svg new file mode 100644 index 00000000..c0ffd77b --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-level.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-load.svg b/wp/wp-content/plugins/imagify/assets/images/icon-load.svg new file mode 100644 index 00000000..a4f60169 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-load.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-lock.png b/wp/wp-content/plugins/imagify/assets/images/icon-lock.png new file mode 100644 index 0000000000000000000000000000000000000000..07d3877215fc67bb52fe55a81dad43f65ec0c874 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRx!3-qV?X3L^q-+9wLR{Soe5PLtoOsN4;z{4` zqh7rrEak7ad~f_Bi~^K0cPID4Izw^&iwy>i|M3d==r(b zPa`9vR&L&RDNy|G4;S?{;pNsxrr2lAUgS_X$@NhT>!lOC$4)q3F4eT<$>}=t(R&Bi vRW|FB-k;lNCp_}}E%rR#CAjv>o;{3lpZPuGJB=0tZDjCt^>bP0l+XkKK*nzN literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-lock.svg b/wp/wp-content/plugins/imagify/assets/images/icon-lock.svg new file mode 100644 index 00000000..e935c470 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-lock.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-pack.png b/wp/wp-content/plugins/imagify/assets/images/icon-pack.png new file mode 100644 index 0000000000000000000000000000000000000000..34ca691c7c941cd18770ae3ab4c27693b5b8c97c GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^-au@|!VDy9?^GTGQbGYfA+G;1z^zZPjJ}>Ojv*e$-(K-9YBu0uOZa%}xau3vW%sPPzg-ZXVzBdnXx9_= zZ7J>RtiLMFydi(+Um%0(v29%|xjR;>UwLg=&E&9m&PK_C4^?w&8>LTMyKPldjyaXK z-L81LfpD4syNT%~>rHPxRz800Nz0VezMHI1Gs@nv*j%Wq_1>m9Q+3_(nObQU7iVlz zHk%OC+%Yxgxy0X$#}$WnSZ&{2(Akq+u6*|elk~a_`@d)JcAL3eUU0o8#-dHID0cEO zd8>dUTbF)yVt4bObNp0@qF%X*^{%2dTZ|&ZI`y_}G&>dher8X0hrjrY-t0+*f$VZV z$F9o%zuxh2$GX7t$ItB23fq<|(VbkXo>BBB!)EsJ8S9@-i~gU=b+tzF&yOSS7epgo ztea-#F?~i=@50%=VXkgpOMYECz47n+gZCHIPrv%V`ZsU3-?wYd=RRhIC2qfWe*?eE aGxq1Vi?7byr}7RM)C``kelF{r5}E+fJku@! literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-pack.svg b/wp/wp-content/plugins/imagify/assets/images/icon-pack.svg new file mode 100644 index 00000000..2e6f244b --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-pack.svg @@ -0,0 +1,16 @@ + + + + Shape + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/icon-time.svg b/wp/wp-content/plugins/imagify/assets/images/icon-time.svg new file mode 100644 index 00000000..7487abca --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/icon-time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/imagify-logo.png b/wp/wp-content/plugins/imagify/assets/images/imagify-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..94342a850613cf34667aa7a8bbd3cf4288e14b9e GIT binary patch literal 3161 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 IAlx4R4~dN$(*OVf literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-de.jpg b/wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-de.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1611912edf7fbc5073bedb9c7c224f09b97b63cf GIT binary patch literal 25171 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-es.jpg b/wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-es.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de9240a23438265e739795ddfb71722dde189164 GIT binary patch literal 25132 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-it.jpg b/wp/wp-content/plugins/imagify/assets/images/imagify-menu-bar-it.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a694eaba632e9cac2383d70e8eada166b6c0d0fe GIT binary patch literal 25587 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 + + + WordPress Plugin + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/key.svg b/wp/wp-content/plugins/imagify/assets/images/key.svg new file mode 100644 index 00000000..cf996b31 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/lazyload.png b/wp/wp-content/plugins/imagify/assets/images/lazyload.png new file mode 100644 index 0000000000000000000000000000000000000000..b077c391d5443c01bd01c491a3e9ed44a2faa700 GIT binary patch literal 734 zcmV<40wMj0P)}M{rEb%gf8l%gf8l%gf8l z%gf8l%gf8l%gf7=0et%a000VfQchF;0M0lXcH>c@yn!Y5z5oCMKuJVFR9M69**j0e zFc1LXQ=w@)nkGuw!b1o)%1ex`kSJp-!N68T5sa-U%w<7h3j_a`G?c`4?DNH*K)KP? zS0`tm6Fb1zU;!4YL6RG#UG2taj6g|$2uz& zJpr$k!-o|Xe?0v-_?lbdqh*tKZH2E^D_qwC`%$*SmB;z2HY<&@j*&6Y;vjGJ6wbfE zFhA)>1slG580Mc`6WIn4)G!<&6R#ZuiiO8dUBYL89D@NXT(TgGvy%h!;AxyslTa7@9StepFb zd>L@o^{!%y7;*SBS`R|UY?Fpru$MILcNJBk#V6eTz1%#@i^vqkk#wC*QBryg4;YRO z7I^pB@Dm@wRHabU)tHfJ3(7K?CjlaCk$^J~ZXGDlBysZtTlmGJqhJg&t@ z7>2hB8S+NLQx(JYVp%u)-0Va#^u;2A)d14)n>ZVP6EP&=`$EU*&kGW678c-i+R|`3 z$wGPaM#Slh$cBVlc@A)VSGelsKN4{xUuL<{BI2f;>ogN%8cs5Hi0#->oMbGv$DinK z-hd~Y4tTBSfW6288_q{6T;U2=_}}4}hFeNJq~W>}_lPIFN*vPgOua#QrPxQ!A&Y;z zZH%vebq45+osMgr4vMSz1K~7ePM@5dK6W{MX8S#lDILj14U+x29Zojo-%nrY;4K~r QsQ>@~07*qoM6N<$f~_}GY5)KL literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/loader-balls.svg b/wp/wp-content/plugins/imagify/assets/images/loader-balls.svg new file mode 100644 index 00000000..49d74496 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/loader-balls.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/logo-wprocket.png b/wp/wp-content/plugins/imagify/assets/images/logo-wprocket.png new file mode 100644 index 0000000000000000000000000000000000000000..0a4d3379907fffb36109eed9ec28f49cc5cfdfff GIT binary patch literal 3634 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/logo-wprocket.svg b/wp/wp-content/plugins/imagify/assets/images/logo-wprocket.svg new file mode 100644 index 00000000..ee3e676f --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/logo-wprocket.svg @@ -0,0 +1,47 @@ + + + + Icon / WP Rocket / Light + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/logo-wprocket@2x.png b/wp/wp-content/plugins/imagify/assets/images/logo-wprocket@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..72faeb3b4e907812a3265dfbe5dd3aa544c15a2d GIT binary patch literal 7784 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 \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/mushrooms-aggressive.jpg b/wp/wp-content/plugins/imagify/assets/images/mushrooms-aggressive.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9cfcdd381b7758896e958cc41903f05e41f79866 GIT binary patch literal 105170 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𝔪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

bNY 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 Qx%{;M0NC;W0H%Nc+1ar!asU7T literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/mushrooms-original.jpg b/wp/wp-content/plugins/imagify/assets/images/mushrooms-original.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1451bf08d10beb438cf6f474857f2e3475dd377f GIT binary patch literal 334847 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

GZfi>AQ)Qb$@+Vy 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%0AW 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 z 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 z zHr0xbxyh?Y;{O0kbHVkXqHGAY z?erYm>;68=-w#${v+EoT|X8&Po;GHc>MbR E*)1|=O#lD@ literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/mushrooms-ultra.jpg b/wp/wp-content/plugins/imagify/assets/images/mushrooms-ultra.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8271af3f5d2b9a834002e45b0d5e1089822f2a4 GIT binary patch literal 45208 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 BrvCr{ literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/phone.svg b/wp/wp-content/plugins/imagify/assets/images/phone.svg new file mode 100644 index 00000000..35bf820d --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/pic-ericwaltr.jpg b/wp/wp-content/plugins/imagify/assets/images/pic-ericwaltr.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ca16831c3d70b2340c568c7811481da0fcfb47d GIT binary patch literal 4665 zcmbtXcTiJZ-@GA&W&{GE_k>WTML-Y)q&JZ+0!k5(lF(7A0zxqKP(-DO^xi>=ph#5& z=@^>yCRIT|+KZ3RGxPob{mz{^Gw06i%-OxOclYe;*$hCdt*)gGfIt8MI$yxqDZs7b zhIRL}_wus0;bZvg@Q8Q{NxkdaeRl7dM5p#h<3i) zM+@7_=ga_*(xErs)%p9Je*nOpAozOGjd46B0MILZl=&*PS!8k!p5gNXulGI75&*3( zBQQ@GGl!FE`hk6))5$630{CcsWB;LiFt1kmhmIBHpa)%7#;sH&Bsrvmp4Hk(vCZ=p zsHB5a@!Wh)EU(3S{67+p7p08H3)vM`!(Y279^KzC+iUy1JV|u=Em}S4)oAg_wPOF; zSmG|SFl%DNr)%wJswid{?)Gs!!@(t>HJn(m{H?$2-PQ(=)a>S?;cm8bF4)fXJm=y+ z9{%iL(sMRQK>rXyLVJDyYPNl(L_#l~FbW9NvY8x!pk5l4!KmksU#P=VuXrure>9fS z^0R(Xzwk!OhSfiy|DgU~PzZc^Ji)|d0Pkg}E$j)%{6wCj3JAM}7$G=^(<4~ATl6TiJ2`Ho$yVtvq3 zdF3t*TZ)1RqzX4;Ax-CgkRD#{>P2`z`bkQwEy|q#F2;}L$*-mPobL6jV8Uchnr>LB zAMRA)^34~ZCdWP+guroilwNlF;e^TN^wZ#jM13O;33_g-faCfG{zM zpM^*e#0L>!Utg7_@#m=jsxqFhDrr~IMFaWs=-yItxy8eZ%M15qu*G1H>x}}injRFs zZozyGBB}I?_pVk06wlLNxs`0h(NoO0r&4`%TTAU8OJ9J^O1^fHg=Pj4dsl08+|X=;;M;c7(N@qZ-EwXs!D6k{0-DZvi3&ztUl+HewkiE2ztRL3 z<0NaeDTL}uF;Cxi)n7_eiNvfZ)1CqE#62vGid?n~LQZa2ld{J?JE3PB>GOMUc*!`B z{c>&5=SuLlZ-XpH_Cvn{|CP!($r70G3-C#j+qHs0U5s=Yh0-apoI#0y3~kICKNm#K zrK6+rbYa@+)3T}7YZ``fDY_azTJN=HUuNtidmbsBb-}BCbURackBH@EYjB;plc^aO_oy{<`KyCRFvgxbQ)@w>Tc3uWnjd5n0 zo#cZV3Bg3pD5;F%5I%)V27`r+ZSq{A2$jXEef>3wEetHzdx(Wf;+aIZ^Y3DdvHLUw zLVI|NbQyyx1B`0c_RPvFiBZ~3RtAp#PcIq9{NL~+PSe2~`W&Gp+gJs2O9nU8a}BLz zm+r8S(lrMXh2HO(1X4C13LV#)qVN%W;SRm@SJ&>bm6oK_^o zBd0wWrGFHxHL$Rl>2z-@PniaYIpqp`m2SURKsNrs;R^MqULfS9v$l}dv+PB2zSMFJ zbF7c%6Re3NG>*NP!P8exGbaKr2xHLNnJ-!)cN)dTFyD0!iMnI>M##9v9l_WKl25s9 z1AXH_*?+#Mw0W;@DUOvtFp;-Q+_x^CNC~qnp9`~cvyb(5lsW^1^92r4tE|&QYRYt0CvTp7 zemInq>$mXLDu4Ye!RBqc)$T#SfhS2s7uC85_T-OQX`Y)47z`r)^KSxQ{9`ZYPD6Tb zED(Ag1ey#fp=@Id7r$;`=s`})ec6-15c;~Zs`Ud!LKZK|$k-<&JSn+tU~v0i=b=;t zjy!soV=&w#IXX8xW7B89INJP#m72ioE7hzC7vS%(tEqL_3AEFrXMjI{Np!j1^G!f- zU2hPz4WF)swIyW5eNMZFM@Y*Z`Kh0b%gSkl8HZolp7`c6%$F@+yg_8kdwVje|24l& z-X5!Iq+EpkbVS2LH&zWeUYw4u143Ty!%S~jli!lOh1sYx8jyO(X7w@*dI}Hb6EhNcxHvmtDBXM_$7@ zni3=9BxA8CH~vj%fM0LWd?5yePQKLTNgMH7vQX${dL&DQO-P5zI(A?)fq^#BZlHVi zbgM)@2yNiBc^GOf>?{>e3!|(FoU^XeH!f(DeUcu9P$^wk3b+D{XYP9YE6pD++Ly&RNqfjrJzDi?W z6?#}JJKZ!6zqEI;XreX%rr@F*jL5_*$ZxrR^W49<@f6dfpE;%E=M6lOkS#gir zi$}r3lfK7yq*Yyv&0=}SZZl3pm8N5xJ>M*#3bemdnG#VYKeDVm#Dx5c?csYnyA=Iq z>oK5&x1l^gnINJIvkW`tf#WiX)}I|ymzs(U(ob+nCEbjl*;{{wHTbr$4nRgvM-_riL(H_OSH>eA5&=XSYz>+PIr+V%+aU z`a5tUpR;oJBd{N1*D_jHt8JuUW)sv?5!qCc89g&XP|vyCo}ro-(UCL`#JXRzM;2w4 zXs)rcJIjhS3(3K9ipe7^asWJ2Vly{WaHlTibVAGK!i8IR|34V<*D6Mi*1O}Ggh-TDq; zVzst(H%fK3)VRqOy6{#*Ov*hTr?!Mx%3Shxi~FFa_e-yTSGPG2Ek%DaYte0CDX;aA z>XEl|(S)*)PP1n7t^lx^NzV$`aqq$0F)1?-VBV(F#q~cPMNOcO!^z5Yd(;<0_M>?v zQO$w5{&R*NzJYWpr98FGZPz2RRwaffYLhG#&_}m$=CB(}d_%)lb{kzGlR)=}XJ)RNGjz9fWl3TXs%!BS2q&-CGVjE;& z3bcz{G=;<1*S@;=pr`CspJEbB=BVF32v!_1N<#Y*T$R)K4bqeIul`P3x-ER3J?Oj# zPuo#CbVJd&BxItw$}RgWM-{ROc?LKe_S%yP^Dq&lGR|%Y+wP(;J>pc+4r7{=%Ga&E zf57oTH%k(Rt{XLvxPavm5=AHqjd*Xyx7)Pcrg3J9D$vA~6_8;0I-n*G>GF1TOwCEt zsdeMe069t9$<`!_f*u-;@etNTpW@iOuB0(mDsv%QJCjz)}|1mP1R3>aA98vE5t! zJgf(uLuuvf$5y+|f{)8uaQv%-?tFCw@APZcv|@}?WuYz!`cLR4oGR1LgSqpq}RAg8xT2E zuGmFKVXL639YRUC_u^DE$OE}}#ef0iT`jT+2|~s{ZlC6wqgs98Jf4IvBV9U?LxTci`Au!VRAh+Gk1aAvjO%wIlwHLynSF-+g8WoGK8K7zz=Y>if0bLi+TUJ*QQM z@ax`T+osh~8|`rl;&3vRCh1YoL0P<(i)REb26yaXj*9i(Op?~K(j3<4@Mb2K^1R5# zbh6Ovw|;vCe`01ok{{QicH`b-h8xJg{sA;xxgUXP}Ed}vj|O+Trv*kNg@ z!%KI`<7&4$S?`;^_e&|cI!h2}NE|dS`jzQ~|7yjgd2VaMv}d1sj6hF#7u#HR<1-$l zRCA}EI@BS~~0uye992*Mbx0jk8 z(sD@}6&N1XP-)ROXMz8b$DIL&lTmIG9dCK@dUmfuvCG_rv(Ltj;FVS4NTD_|{Kq`h zS2{na5BBD8X5|d$(99#}N##VS$O&Fus=5@X%x-RYzbrOZWyy);gjo!y+#Qy<+}+*X-3cK$%;4_s1PiXgU4j!lxCRIi2pYaT&%O8k z1HS6>Q>}G+udc4@-DmIDmDg{%;^4A^a0asEA02e-|nWDl#%MDhd`lDk?e_ z4kiXB4ju@EM@&RaMa2yKzx{uA|Nq?JbpQZD0R#hr;elWP90&*x0=^CbC;$LBc;G() z_-`PiAR?h6z{3H6uWJC5|Kwf$ZNI#EVvDJjl=8fb2GeVz#wH*jQ++o|wL935fBaUp z!t_P_s^05a3_l~8^COieMs%zt!693)v5nUT&mKSomg8f$3=Uhe%rVEpg-_}hu z2aModD0(hOcp2Y&#R-}Se2Vb~m(ijm%EM6%vSesSO!|@70 zp3zAA@Uwb05I$R=pewMz{>gq?%!NT{fIuv8BEd0bX@Wt=XFWM;XvaK8zq+;afFN{U z^=$)J9X1Ibh**szxCyh1Fe}s=M-Il}wFaYJ(U%X)(Se#=%@Xe`SDdl!*{O{txHh z_xFD=e{tXukl}!Ue{tad!SPM0a^^g$$U|j=J8$D=F%&1QpPIc2Y!x~?QJkM$Fd~W^ zbd4i><7iSsLWZiamMH#kg*25g^2SYIjw9&rvoPTRfQWw^0SJ!(MEn;B5$70V(h!}c9d;Z$h*#0khIH6(c4*FpxW`OdLZ$w>mB3 zWZ6Vgi*4lB^QnZX=Is~dZRe87_^W5uMo3e3_}^V2yCfT6esheE4c+#61>mj-p!@#5 z9A@#2KGM9UXxshJHG07EC%s`{0wEL0y10_HP+gzcU|CVIELJmN^Gw5lhC#{c1=nW(Vu-4U(Yo(fNvjMs_xA8< zmlUV=AOuBb)#ux-Kbs2L-!twWy1$d}iq!k+I8i8s`j{vNK)tzX%am`q z3kSIGIeKO*r*0K&%?icmnCB&{N#C|v2rCp6ij(rq+{f(jNhHcz{SiZF@ZOA`UgsqZ z7&|b21?aI(GDXUDZ{a-F4WC$+U}dp`CYEHn*#_#aBQW4I4~{3p||cx2Ht9gx+Hy1+(!Q)=AJ9V36C zyEV2`S7bm|)kbwD2fn(`;H6_WVqkK2h6S1~?;?gmoqQop&BZ8&9qPGql#-3b56PRJ zjhwW=N*((Jb@Fuoq8Uj+9yrMDFoO)?M~njHkGfB0BertXvwih*F#hoe?4q4gi1Wo{ zk$iOe?bzk&OIRJ*fgdaBi<=urKOKz%YTbjSbeu}&Q#{OPs z8mcH+!XQjHvB&OWCTkn~*Vm2mQB4aE}_Vw{VHOnd|Lt!iW+XvljVOR0*j+LoJ9 zc!6EH5|3b}(93dtu?RvG{sa}Qh0>NX--b}M6f{C(2(gn329mhO^PX*u3#H)*+ zbcGEvIM_RFD)vU(kPGhQYB5gA&Wc&$Pz#<%ej|NlQ1)mmGiFr-HbUj;BT~5-r3#t%bA{t7by=`p~1I_bi7^cLvT2gUDjzPNxU@7a{`3X z8%&~d4nu@W_U@Hm)27_p{uw+Nt-fX1D7)CoZDZCK6QW&>Fh-^li0Fi}A(}KHN?U zrMVYQg~T3f$p3g;5m;j^wkFZ~x$Q$P?yi+-*{M;F0*N#zi<^0VVd+ zetzOdBb~@Op$OL4F+|=#og+N9$r@gnE4%oZ?|b2yADuLO(HvVh6DE`mhU9zIKM!_> z84x?2rbI;Hl}J0>D0P&G&=Ox6VnXK7lGv+NMP#0A4`w$LvU_su+Wg%-k0^2&zgxL4 znA_%C(MRMm3mvlXj77+6i|ij|JM#GS@wkYm!0*lskG`NgV0!e-H?<~SMO1o*w?Q|6kv*Y1vq2t6BR6> zuN>`Zs+g2!tUwO~T4JRg6&qBWTxeCsP@bc^0qHe0?>Nw!#7Yr!?cO_!jY)-Y9nS)# zr<~T3O#c!!KMnxyACms(2N4@+O3{9pH zH-D?{p3?YV-bNJ#s08W#N`L7l!&(ie56%y>H%PumGe$^9f{|s^^VUUAsKNS+pY&a@;8&=c5LqeDP zwo?5(NCD$E#%AmH8+<(?0SAH{Lh@ob=Ao>i>u-dKduoU5gA^Pv*G~JYGF>}6(VnJa zDw3pnO>$(lI-ZyZ)y193=teMB#I_h6?Nf9Ega9cU=j4v#=fa*uNt+|{+Nd1w9o|y0 zM2)+UoIR4lpHp$$@;50)Y!VTh+~gl5vd2az9Xsqe%i*9(vrH~@$l0*=SvJLuch=Xt z0*4Cf7WqbNm{jXJd?JQ?hb!sr4790(9Ruw2?kJHY#9D>Qw@#TJmXXR{W|0HPodR<9 zK1aA0!f?$n|Hqztb5iRsPDU(T;%<&8wQk5)os2SaFm_cwnl$I?$kWFb|9EKIW*6p; zOI!UdIZB#SD%~OD4laVpG6-Gl)7O_#pWcqh^A1}m(mFmY)R$Yk*#yEBLEQ**<2G31 z0R`N4l_@tnE7E!0h_6>v#-PnP%>VHFlii>A`PS}_3IBow_MH#(+|o6#4YXUO8K=#&VRQMMck0$KdmJdNE17AV@<=W)8*aCzgS@U@QX29%J+OE1(wz z`Z?SkTt0+ond=cx8*)dBi#<{d28aYp>xwzuVujUy31|9P3f6~)5IG3zoW<>eDQ%EH zNqK_J(kY}GtH!>H4C!EVGmL_zKo_DyCs%{sC#}v2Nx+GqgLu=7sIg%MO}PfNSoKZ+ z_3^e6rm%E*wf&7)En_UXM36?mFN<=4%l9>%aW*!KvGDt~>o8Tgqw!ykwk0`~UgbRD z!5K&=-}$$4(-O>B6Z#;e-!3nh!IQ55NRt)Q;VTq2 zEzHTAfrI=CNG64HaX3&iW^$j1bN2%Z1eS8VWN>9U^G$b>pWMQrZ7NWSN#^>|DspjT3XeoExTq|XEf`54yi|-2f{XR1^V*l;vUAyNK z1``^g(}CgzYs^mdeGLvEZ25v-34)>$XOk2c#KF`UG2AqW^wNKdk~AND z5$E!Y4_ITfW%jPrlJ@n27efe8_Tpspi8GXX>nJE9KMA37=yACm0*eF_ zE(4KZuP>-M9HlaQj=Fh@h6@ji@nHX5_I>P#|tur9Ek#&rfF~ewlu#RO? zz5_06ueY-PCdaHVWikW{V+;lnB7pj%E`=movdaG0e@Ur}6ulen1aT@UPTA3qWj4Q^ z58=d;K{<=QWfk1l?jUe%WAvK4u^rcvTXU@cbNIbAOxN_X^|D`UL&Craz+PQb0XVFaK;m{qa)w*u zH~L;1W0=}1)n<5ZzU^i)Xcvqh%D$(A;&Y~ja^bb!^NDEOk442&LV1Q{1iY!n ziD0nLETEaxKFH^MPJ*1@eoSxE;@4C2Xe$qJN93}NE*pzEO0EHTWDX8o-y_a{=ybci`9I3ak>t;^w( zEfKc*Ma+_Y5u>@eZ>lRE;6JzmrtZfgJcQ)UIi=FMS(~aX( z8^x+|;C>*G`{`r^eDL##)_7xB8dyq_+@5p#9!5-zMeGAlnpR^I*FYF1p{1xk6b)vc zfq?Cirz*AFYj|y@?d3o;GddYW&t0?B6SiLAMhZbP9Kw+z(DJcL2#D|#iBLKL_=ryU0 zaw=JGy2dkxb0n*Q`A3Yj&t1-z%lp`30?HU#uX^m)je)~YN&I0VpZ1(f5Uf`t2c2p> z77?!0#&eR#HbfXN$X4*^ml5!XJuyiwMPHH2PPUo948850U?I=uKR7>EqAW>JbyhK3 z*Y}QTv63a+$J*9coJ!lf?{NPbgVWN#))Xu1HO>Lg!M-UbldYI%vB4EbGrro099-Z0gfN4&jaSWw@GF;0P#pu!S+3Ng`sJMiw`D! zqQT4C8O+1B(UlX?egHJFV4h>0C*QU`aL23#nZs_q z20s8vz4kupX(vgCjj_lk--fvQI=qanB0)8Y;2oLu+J<{-py8|>dEJ0<%*|5gVEWw# zZ-95}Aq}?v8PK%~(=ye4A6SYK;&25I_hk9ZQvK}t}zGu!$xy9 z>-SXf3#Jaw#h!P4xyS@MH1>A+82TY{RDa|Y4jAc25y<)Fw8RBr(lAg0<7I>#yf7uy z6`{|^KVdX7uA~+%wgYkT15Ofu2{QLzj^up^oWKavCs(@xL4czfZHZ}|dUSIF01y@ZjCcaSCAoy2dfs-=I%hRp+P+kKjncQI`Z)0tJhjwVeFrf_1cZ?azkjuiwosXZPbdrmJ zvCq_#2QZzo_+b9TgFjm(IxgqTVu~S?# zzz6Mi8BGMS(zklbquWAXqH5pWw?pkSWhoyLf6a)rbZ9%}vAEK@UDyhveoQhGen!I~ ztZHu+$d^ePq!t-9HCzdZJQDpjk%Bf`l~neAB&QK6eDC}QzP_5J`(iS0jWWu%Q~ZT) zr(A=Kds(1x^!{f6i-)Su_x712doTWP0@!k-{H38*QIS|XxHvB@!0X@AyY%yXieV$< zBq)SMdQ37jSL~}=Rjuc9&Ko*8N;~j;;n23oU}pWwnUWyr5LY$J0cSmzUbPYRi_Q9ZB&M`E@F6ehPQ;Sjf4f0-pYgfNU$Y#OX`=YzlUe@&(-l!YHq0ZRyrn=*496%Z)v zy7j*|pnnS#{h73!Eh$X354?IGJlQuTguSErOLIW|h@kI1)zi%k8W(cKbwUyeCBI+P zbGRM8I#8LL%m1&7;X4(W2l-lzv%0aJM^0z)hORdoi^G+ukFmM;q^#F>b>ARa)Rzuy zK;^2=Bw!7Ghbg8XArC{t#jIoD*+#^0D$+Z{aQAgzycJUA>|?&MN59QNeNjLl%Vui= zv7r%>Vl z_h4kwEg9jTnSuAgg6YV#Q4&=9Wq=cr2yg1ENB|rR!u=*L=5*#x)xCtwg2Kn zl!M$E<~1!N6&-%->3b9hClkM<+p)(8*J|=wE15QOXtGT?+#;@jG1(fo9vj?2tUi|L z+;Y7+rBfT9>&JrXQ01cbLuV#tw-yb2D=BHsG}{f{+)Ss!eTd&@y_EUe z7=aA531YKKLoj6w_`cxL!6~?OqyD6jd#X77#IfhF@JqiZH_l>Qu2a9I{vo%Gm|tUa zF+WqrOR(td&nJs9lq(7{chu>{UpQ{pkL6P^Gx#NscRFn%v&L}yNpYW}bGf}ze2qK# zDsnqeSwm`1GTi=X8?HoDYqX9pe#@_)C53%@?s*o=ktL@wY}w@2(lCtINODTOH9yEw zQ;70v6V{kxhu7MjTm8ro`r-Lm&<0sYYNUOGZB3$M`h_~oFt@ASlh;sVx4#KjIuU2v z%Bv%Tt&d1`Y2efWi#t92F_BiJ>R5amU-l7kHLTMzoa$=3tJFo}!w4||siyiO#fv1V ztWD1&LllpxFMksLrdoSM3nop{;1wG|hVnLX*8YZMhnRD4>}kQ-=iO5ADy_%pT@OD@#E6q2m= z5cS5vW?@9f#s$mu94#AY%5%1)Zy76Cl0R_6D&96tVRNW208b1flw8ZS!Z7>WmS~3L zbl?E%zC@bbwOvl>Tzllk9gsd}Fn!~Ns`qW`P! z{gwFOfpC8{J`gU=Uy+YX-5j45!YwW#so@?{gdEyHK$q0N^B>0%2>h$>(KO|hF+`NU z-(#+7{2esmS2Lf1D3g-XS+G&&j!NHQwlp zE|FXU+Z8#Hb(|6(>$w4pv84IuV`3l^Q&6}9gf87q)8wQ&>V>K3dpkLC+V7yp?)ULwj)A4v+EVq>j*V#iOI@;)_O;7?~ch78)_yX3IXP8LB=(?h1p1|pL4Obz;2H&n@vUJ*i^!@aI^TrU<=Tq?uIGF!z7 zPeTc*a5yad($U04a+s_>T2QOlF5_3;KQa@&Q@`r27LRV-XgI<{hLD}naq)FUsyJ<& zdSbak;H#{_%EYHn>>BL`EXjIC;>^VC#`>4jM*DE|9m)E$#-C8<)iQT$RU8OTLvOQ8 zcXP+6E(=0trBl@rkpB=HYh&iX9ninX+%Dbz+>J8dmtP@^7CZMY3$4 zeq0qSxU!d2@NB<{0JYO@>ayc?7@J&=LqgZ297k$Sm*UqF2GwcDLlJVKVs^$X8ccgi zeF%%tsdLopL_&}2#AUW7q=-~-j&3@H~bpxM*IjzAK;O5 z$52}TkJ|pfQAC4B{nr)$SA73x6v0S%G_-$5k$?*#p<&@3lEf`OfK2F-T-4CmKlmSC z{-0?i)0*4dUrW=JL8j2`8a$F~LxR9hQCirq=VoIY`B_AN7+R{;MPnxG`g?MJ!>b{X z7g~Gr6@*7AB7Ex-elP2#TIDGH$c|gvAW+a9oCC9fzH}~_)e6}}MfMH#ys$)3;rEbh zc=eCoMos_-jKH%fOyJClY38F8hz$#MWlWV;RC!sMRkl_C1G5WhalMBhy%as1G?6x8 zO$0@i=0Z+s=@8dLzA(?>FWIB!t2z)u>a$&;w8OarA$Iyndr@uoNBQiIEf-2pG1;ZE zv7%rw^swgn-3Kyr6PIrdaqu!d--uZsab)K|HP;fi+E#z7*s_X|$Zx5<7{R+eRjSAa zxrdztc@~rCNJgaBSTKVOY~D>z#ITrF(HXr0ym2W;Vf^LXx&&IjI@*HP2=7j^n1*!+ zECOcO8sDk-(^;_ra=THSRUSLRoa~?N<4>CgvS0evgmOg7>#p*ncY~2c$5m%?4u7ES;4gnVS~nfzv*&rmr1KO z`^AyGbZe;+>p|Nd4?gfnv&x}>UKhBlw*@NIDkU}=Ajjesp(>{j$@NbiQu1o8)HS)K z$5+Vg;Zb2rPaBm0%e8q)A&S4W>JVX+$_X*3@wtbX=`WN=3h7D%N;x?WTiYEL_MV?_ z>o*+)CG9Ifchf^WcSHojcT!^DkkAi-4x7VjKcdK29J4qn&V|Fzj;lTxJ-7eX{VLXi-Yy<_7fMr1y7V2)Z5e(A?Bu9_Z;nHF#Rdq&_8(4-$OC3FYEzRx{G2i zIXxjKxU_Ps^Ro#ti-efyu)(|ErA!A$FZHT~6n zL)qJ?_AW`+{>>$#n7uA6#_kzb;$`yTyW4W!Mc5RBclKUdxV_Lv(w(!qOx4c|?5v60 z3TngJ$%x?Ro0xlE%k%8@IknzM$WZ)?AQy?zP+ygKcAFyS^xk5 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/popin-loader.svg b/wp/wp-content/plugins/imagify/assets/images/popin-loader.svg new file mode 100644 index 00000000..2fa58146 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/popin-loader.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/imagify/assets/images/spinner.gif b/wp/wp-content/plugins/imagify/assets/images/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..974ce638d379b0c5492d1ef6f906085871b09b13 GIT binary patch literal 3595 zcmcInX-ty|8vc4wT8g$%juuc_jxA829AYUrwm^X*N97Wbbty*`IU>h6XpAYffZR~- zLq?%u9hRn?1MG|e1`rXH0d|)qfE-d;8N&>N#+^UzM|xlOHEBpMMXs&9UbrAzu(&05(oqzK71g3&{3&ue`SfQ1=^tuLchvEc)FBf>tUUKt$9B}@4}P{i#}G#lE4xOE!a|;RjMp)m7|8BT++~u{ zT-GipoW5;Gt=4>6-r|Fa!^smEcb@~Qz4}xvH9~Hn=;Vaqy8~#{MMX-pRhQ0SiOtS;E1ZNzRY%l+QlfbdP z4JDS2$DehLS5!VS*yTq;e@}0dcJ~2pRii;>56x9-l#4iI~uixFV1_ zP)26wyq_#c=iZd9r$A{f=?~LrDb5PX{mMvT&z~`FJ9X0Lz=V#Z>qk+CkzFaw9y~(> zxtSgi{v3Lb{w#SA^J2{N63Ue_=P-MoXdYVmT|e+`;$=!@)N}VySJpk5*8pQDoR@KOG6_4kBj}Fs%-9kDC8F>iboJ3-I$7X zzI;$G$Z9wn8#T&(dU?a6`{vE^88So_^notCswCZBJhDN8Ygd?EBsmRIDcY=`&W|=f zi)!8TiJroKIP4RGYoFdXN`4j_Wlzue7Z9Owu&%p~6Z3qFB@9{+tJJ%Y=<_MTr2^a_ zdwRjYfFKl_3M0818`=Glqg<2bj&!h?>cJ1uKZ+aM>!<51nWn(Wittvic|wdnezw0L z2PzmY5B=}Ge;AKjO{_QkC18vc5v|M1f9sf|ffm|#6`X>2OwCkkho2rCe^;i`e1TO|3nxjAyWrZ>Cr&1l8SB4Z# zX@h@fMnJvG{L#Jwi^QtJwvfm&G7bF9fdJuaD!q*v}`{M#zwLAT22e2$V7j?^b0+H_ zzedhsG~pK<`tX#!jjP#am`Yi(uD%~;CksqCyY6fK$&=p@(w^izb{Bi;^KBKMyT9YoMJ9D^5%ytG(b0D%pax>q(^Ku7cqv(gphY{w#W<>I@?y_-Qx6E3 z{BiT0z8|c#E5g$+vT)}d_jaN|hTbw)O>U|5;%eAfYdu)>PG=Ra$ zlJS=qDc;&i{7P=o9$9N$ZJX~z@VPS~R7YKvW0(M)znqPNcM*r~p$i9G7QDW(d7SJ^ zC6+pof`ya*g3)@5(B!{KyJprLw?fk=)Q#qSvS51?D}tFLEcccblQlU#<%(dD+&g9Y zy)BHkhwb~4n}3FA`KOktVaB7>Ffh(ZSFH=1ybmW!DT&uWvtrXJUVYb)iH&KAaPS5Y zC0x{Q@ZbD}0PdlVe~;js2gao2|7^?aUn|Werh?m6*~i>MC@-0P=f!UedMOUb=>pFS zBBcXVCh?8Uu@!x+sK4XUmo!~ta6y+iM#d|usRZY;PC^`g>u67(;ofeHM6 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/stormy.svg b/wp/wp-content/plugins/imagify/assets/images/stormy.svg new file mode 100644 index 00000000..7a3f3dfe --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/stormy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/sun.svg b/wp/wp-content/plugins/imagify/assets/images/sun.svg new file mode 100644 index 00000000..20e3af48 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/twitter_c.svg b/wp/wp-content/plugins/imagify/assets/images/twitter_c.svg new file mode 100644 index 00000000..4274a296 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/twitter_c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/images/upload-image.png b/wp/wp-content/plugins/imagify/assets/images/upload-image.png new file mode 100644 index 0000000000000000000000000000000000000000..a68ac9fa7aff2abc5b3efbcc428d8b25f77fc8ce GIT binary patch literal 557 zcmV+|0@D47P)htsUDJ?%$S!Ws`GCDp^A|^Qh|Nk>KN4mVil9ZgUvA4y>%MlePou8&iN?K%Q za&>otK0;D{fQ!%2)GRPUiHntNZhE7ot=(e%bN~PWmq|oHR5;7El-rV{FbqU}laPGF z7-Iqd|Do$JnN4O>o76sRzq$I9x(x!gOz*WQuine6=>swSKSJC)LI`L4E8*O5J**{q zc_nDb4Ko;{wQclDwByWLo1Qk9CUd+H&fm-(l&869pUad|pmWJY8?$Z@7OZ-4N}gt5WmwFDi3g(DfHx}+U`)9PAyv&r`asP$ zS(``I`3k=XafeP(OO9>0ChW%+VY_DBQ%JgT%|b~n?uV+u8pC-b693%;tA#m~!|r=p z;)sc(F$YCTynHpCbDviYy63Ifo+`i^0*7(ods9z~U1@Z!u&`|-h7*zI6(6^y(_k^l z?1cl^k+94ot&={7YUeev-Dy7b&K6L9KlORz20d4EE{4yelCh(6eIguXYm#p! zgXU1-WK)x^`1JM>LPeZ9$1-XJ=5ym~jUF2$f+7w!XzRM~>)K$iPJR%#<5)%K=#mp6 v`G@aC{0G8|yd%6)5C6xouY*?~{~x~q_%s?l4!NUK00000NkvXXu0mjf@<0Ig literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/imagify/assets/images/user.svg b/wp/wp-content/plugins/imagify/assets/images/user.svg new file mode 100644 index 00000000..f3b8d057 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/images/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/imagify/assets/js/admin-bar.js b/wp/wp-content/plugins/imagify/assets/js/admin-bar.js new file mode 100644 index 00000000..6b5777c6 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/admin-bar.js @@ -0,0 +1,37 @@ +// Admin bar ======================================================================================= +(function($, d, w, undefined) { // eslint-disable-line no-unused-vars, no-shadow, no-shadow-restricted-names + + var busy = false; + + $( d ).on( 'mouseenter', '#wp-admin-bar-imagify', function() { + var $adminBarProfile, url; + + if ( true === busy ) { + return; + } + + busy = true; + + $adminBarProfile = $( '#wp-admin-bar-imagify-profile-content' ); + + if ( ! $adminBarProfile.is( ':empty' ) ) { + return; + } + + if ( w.ajaxurl ) { + url = w.ajaxurl; + } else { + url = w.imagifyAdminBar.ajaxurl; + } + + url += url.indexOf( '?' ) > 0 ? '&' : '?'; + + $.get( url + 'action=imagify_get_admin_bar_profile&imagifygetadminbarprofilenonce=' + $( '#imagifygetadminbarprofilenonce' ).val() ) + .done( function( response ) { + $adminBarProfile.html( response.data ); + $( '#wp-admin-bar-imagify-profile-loading' ).remove(); + busy = false; + } ); + } ); + +} )(jQuery, document, window); diff --git a/wp/wp-content/plugins/imagify/assets/js/admin-bar.min.js b/wp/wp-content/plugins/imagify/assets/js/admin-bar.min.js new file mode 100644 index 00000000..fc555389 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/admin-bar.min.js @@ -0,0 +1 @@ +!function(n,i,e){var m=!1;n(i).on("mouseenter","#wp-admin-bar-imagify",function(){var a,i;!0!==m&&(m=!0,(a=n("#wp-admin-bar-imagify-profile-content")).is(":empty"))&&(i=e.ajaxurl||e.imagifyAdminBar.ajaxurl,i+=0 0 ? '&' : '?', + log: function( content ) { + if ( undefined !== console ) { + console.log( content ); // eslint-disable-line no-console + } + }, + info: function( content ) { + if ( undefined !== console ) { + console.info( content ); // eslint-disable-line no-console + } + }, + openModal: function( $link ) { + var target = $link.data( 'target' ) || $link.attr( 'href' ); + + jQuery( target ).css( 'display', 'flex' ).hide().fadeIn( 400 ).attr( { + 'aria-hidden': 'false', + 'tabindex': '0' + } ).trigger('focus').removeAttr( 'tabindex' ).addClass( 'modal-is-open' ); + + jQuery( 'body' ).addClass( 'imagify-modal-is-open' ); + }, + template: function( id ) { + if ( undefined === _ ) { + // No need to load underscore everywhere if we don't use it. + return ''; + } + + return _.memoize( function( data ) { + var compiled, + options = { + evaluate: /<#([\s\S]+?)#>/g, + interpolate: /\{\{\{([\s\S]+?)\}\}\}/g, + escape: /\{\{([^}]+?)\}\}(?!\})/g, + variable: 'data' + }; + + return function() { + compiled = compiled || _.template( jQuery( '#tmpl-' + id ).html(), null, options ); + data = data || {}; + return compiled( data ); + }; + } ); + }, + humanSize: function( bytes ) { + var sizes = ['B', 'kB', 'MB'], + i; + + if ( 0 === bytes ) { + return '0\xA0kB'; + } + + i = parseInt( Math.floor( Math.log( bytes ) / Math.log( 1024 ) ), 10 ); + + return ( bytes / Math.pow( 1024, i ) ).toFixed( 2 ) + '\xA0' + sizes[ i ]; + } +} ); + + +// Imagify light modal ============================================================================= +(function($, d, w, undefined) { // eslint-disable-line no-unused-vars, no-shadow, no-shadow-restricted-names + + // Accessibility. + $( '.imagify-modal' ).attr( 'aria-hidden', 'true' ); + + $( d ) + // On click on modal trigger, open modal. + .on( 'click.imagify', '.imagify-modal-trigger', function( e ) { + e.preventDefault(); + w.imagify.openModal( $( this ) ); + } ) + // On click on close button, close modal. + .on( 'click.imagify', '.imagify-modal .close-btn', function() { + var $modal = $( this ).closest( '.imagify-modal' ); + + $modal.fadeOut( 400 ).attr( 'aria-hidden', 'true' ).removeClass( 'modal-is-open' ).trigger( 'modalClosed.imagify' ); + + $( 'body' ).removeClass( 'imagify-modal-is-open' ); + } ) + // On close button blur, improve accessibility. + .on( 'blur.imagify', '.imagify-modal .close-btn', function() { + var $modal = $( this ).closest( '.imagify-modal' ); + + if ( $modal.attr( 'aria-hidden' ) === 'false' ) { + $modal.attr( 'tabindex', '0' ).trigger('focus').removeAttr( 'tabindex' ); + } + } ) + // On click on dropped layer of modal, close modal. + .on( 'click.imagify', '.imagify-modal', function( e ) { + $( e.target ).filter( '.modal-is-open' ).find( '.close-btn' ).trigger( 'click.imagify' ); + } ) + // `Esc` key binding, close modal. + .on( 'keydown.imagify', function( e ) { + if ( 27 === e.keyCode && $( '.imagify-modal.modal-is-open' ).length > 0 ) { + e.preventDefault(); + // Trigger the event. + $( '.imagify-modal.modal-is-open' ).find( '.close-btn' ).trigger( 'click.imagify' ); + } + } ); + +} )(jQuery, document, window); diff --git a/wp/wp-content/plugins/imagify/assets/js/admin.min.js b/wp/wp-content/plugins/imagify/assets/js/admin.min.js new file mode 100644 index 00000000..9c08f3fb --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/admin.min.js @@ -0,0 +1 @@ +window.imagify=window.imagify||{},jQuery.extend(window.imagify,{concat:0/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^}]+?)\}\}(?!\})/g,variable:"data"};return function(){return(a=a||_.template(jQuery("#tmpl-"+o).html(),null,e))(i=i||{})}})},humanSize:function(i){var a;return 0===i?"0 kB":(a=parseInt(Math.floor(Math.log(i)/Math.log(1024)),10),(i/Math.pow(1024,a)).toFixed(2)+" "+["B","kB","MB"][a])}}),function(a,i,e){a(".imagify-modal").attr("aria-hidden","true"),a(i).on("click.imagify",".imagify-modal-trigger",function(i){i.preventDefault(),e.imagify.openModal(a(this))}).on("click.imagify",".imagify-modal .close-btn",function(){a(this).closest(".imagify-modal").fadeOut(400).attr("aria-hidden","true").removeClass("modal-is-open").trigger("modalClosed.imagify"),a("body").removeClass("imagify-modal-is-open")}).on("blur.imagify",".imagify-modal .close-btn",function(){var i=a(this).closest(".imagify-modal");"false"===i.attr("aria-hidden")&&i.attr("tabindex","0").trigger("focus").removeAttr("tabindex")}).on("click.imagify",".imagify-modal",function(i){a(i.target).filter(".modal-is-open").find(".close-btn").trigger("click.imagify")}).on("keydown.imagify",function(i){27===i.keyCode&&0 120 ) { + settings.mainInterval = 120; + } + } + + /* + * Used to limit the number of AJAX requests. Overrides all other intervals if + * they are shorter. Needed for some hosts that cannot handle frequent requests + * and the user may exceed the allocated server CPU time, etc. The minimal + * interval can be up to 600 sec. however setting it to longer than 120 sec. + * will limit or disable some of the functionality (like post locks). Once set + * at initialization, minimalInterval cannot be changed/overridden. + */ + if ( options.minimalInterval ) { + options.minimalInterval = parseInt( options.minimalInterval, 10 ); + settings.minimalInterval = options.minimalInterval > 0 && options.minimalInterval <= 600 ? options.minimalInterval * 1000 : 0; + } + + if ( settings.minimalInterval && settings.mainInterval < settings.minimalInterval ) { + settings.mainInterval = settings.minimalInterval; + } + + // 'screenId' can be added from settings on the front end where the JS global + // 'pagenow' is not set. + if ( ! settings.screenId ) { + settings.screenId = options.screenId || 'front'; + } + + if ( 'disable' === options.suspension ) { + disableSuspend(); + } + } + + // Convert to milliseconds. + settings.mainInterval = settings.mainInterval * 1000; + settings.originalInterval = settings.mainInterval; + + /* + * Switch the interval to 120 seconds by using the Page Visibility API. + * If the browser doesn't support it (Safari < 7, Android < 4.4, IE < 10), the + * interval will be increased to 120 seconds after 5 minutes of mouse and keyboard + * inactivity. + */ + if ( typeof document.hidden !== 'undefined' ) { + hidden = 'hidden'; + visibilitychange = 'visibilitychange'; + visibilityState = 'visibilityState'; + } else if ( typeof document.msHidden !== 'undefined' ) { // IE10 + hidden = 'msHidden'; + visibilitychange = 'msvisibilitychange'; + visibilityState = 'msVisibilityState'; + } else if ( typeof document.webkitHidden !== 'undefined' ) { // Android + hidden = 'webkitHidden'; + visibilitychange = 'webkitvisibilitychange'; + visibilityState = 'webkitVisibilityState'; + } + + if ( hidden ) { + if ( document[ hidden ] ) { + settings.hasFocus = false; + } + + $document.on( visibilitychange + '.imagifybeat', function() { + if ( 'hidden' === document[ visibilityState ] ) { + blurred(); + w.clearInterval( settings.checkFocusTimer ); + } else { + focused(); + if ( document.hasFocus ) { + settings.checkFocusTimer = w.setInterval( checkFocus, 10000 ); + } + } + }); + } + + // Use document.hasFocus() if available. + if ( document.hasFocus ) { + settings.checkFocusTimer = w.setInterval( checkFocus, 10000 ); + } + + $( w ).on( 'unload.imagifybeat', function() { + // Don't connect anymore. + settings.suspend = true; + + // Abort the last request if not completed. + if ( settings.xhr && 4 !== settings.xhr.readyState ) { + settings.xhr.abort(); + } + } ); + + // Check for user activity every 30 seconds. + w.setInterval( checkUserActivity, 30000 ); + + // Start one tick after DOM ready. + $document.ready( function() { + settings.lastTick = time(); + scheduleNextTick(); + } ); + } + + /** + * Returns the current time according to the browser. + * + * @since 1.9.3 + * @access private + * + * @return {int} Returns the current time. + */ + function time() { + return (new Date()).getTime(); + } + + /** + * Checks if the iframe is from the same origin. + * + * @since 1.9.3 + * @access private + * + * @return {bool} Returns whether or not the iframe is from the same origin. + */ + function isLocalFrame( frame ) { + var origin, src = frame.src; // eslint-disable-line no-shadow + + /* + * Need to compare strings as WebKit doesn't throw JS errors when iframes have different origin. It throws uncatchable exceptions. + */ + if ( src && /^https?:\/\//.test( src ) ) { + origin = w.location.origin ? w.location.origin : w.location.protocol + '//' + w.location.host; + + if ( src.indexOf( origin ) !== 0 ) { + return false; + } + } + + try { + if ( frame.contentWindow.document ) { + return true; + } + } catch ( e ) {} // eslint-disable-line no-empty + + return false; + } + + /** + * Checks if the document's focus has changed. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function checkFocus() { + if ( settings.hasFocus && ! document.hasFocus() ) { + blurred(); + } else if ( ! settings.hasFocus && document.hasFocus() ) { + focused(); + } + } + + /** + * Sets error state and fires an event on XHR errors or timeout. + * + * @since 1.9.3 + * @access private + * + * @param {string} error The error type passed from the XHR. + * @param {int} httpStatus The HTTP status code passed from jqXHR (200, 404, 500, etc.). + * @return {void} + */ + function setErrorState( error, httpStatus ) { + var trigger; + + if ( error ) { + switch ( error ) { + case 'abort': + // Do nothing. + break; + case 'timeout': + // No response for 30 sec. + trigger = true; + break; + case 'error': + if ( 503 === httpStatus && settings.hasConnected ) { + trigger = true; + break; + } + /* falls through */ + case 'parsererror': + case 'empty': + case 'unknown': + settings.errorcount++; + + if ( settings.errorcount > 2 && settings.hasConnected ) { + trigger = true; + } + + break; + } + + if ( trigger && ! hasConnectionError() ) { + settings.connectionError = true; + $document.trigger( 'imagifybeat-connection-lost', [ error, httpStatus ] ); + + if ( w.wp.hooks ) { + w.wp.hooks.doAction( 'imagifybeat.connection-lost', error, httpStatus ); + } + } + } + } + + /** + * Clears the error state and fires an event if there is a connection error. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function clearErrorState() { + // Has connected successfully. + settings.hasConnected = true; + + if ( hasConnectionError() ) { + settings.errorcount = 0; + settings.connectionError = false; + $document.trigger( 'imagifybeat-connection-restored' ); + + if ( w.wp.hooks ) { + w.wp.hooks.doAction( 'imagifybeat.connection-restored' ); + } + } + } + + /** + * Gathers the data and connects to the server. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function connect() { + var ajaxData, imagifybeatData; + + // If the connection to the server is slower than the interval, + // imagifybeat connects as soon as the previous connection's response is received. + if ( settings.connecting || settings.suspend ) { + return; + } + + settings.lastTick = time(); + + imagifybeatData = $.extend( {}, settings.queue ); + // Clear the data queue. Anything added after this point will be sent on the next tick. + settings.queue = {}; + + $document.trigger( 'imagifybeat-send', [ imagifybeatData ] ); + + if ( w.wp.hooks ) { + w.wp.hooks.doAction( 'imagifybeat.send', imagifybeatData ); + } + + ajaxData = { + data: imagifybeatData, + interval: settings.tempInterval ? settings.tempInterval / 1000 : settings.mainInterval / 1000, + _nonce: typeof w.imagifybeatSettings === 'object' ? w.imagifybeatSettings.nonce : '', + action: 'imagifybeat', + screen_id: settings.screenId, + has_focus: settings.hasFocus + }; + + if ( 'customize' === settings.screenId ) { + ajaxData.wp_customize = 'on'; + } + + settings.connecting = true; + settings.xhr = $.ajax( { + url: settings.url, + type: 'post', + timeout: 60000, // Throw an error if not completed after 60 sec. + data: ajaxData, + dataType: 'json' + } ).always( function() { + settings.connecting = false; + scheduleNextTick(); + } ).done( function( response, textStatus, jqXHR ) { + var newInterval; + + if ( ! response ) { + setErrorState( 'empty' ); + return; + } + + clearErrorState(); + + if ( response.nonces_expired ) { + $document.trigger( 'imagifybeat-nonces-expired' ); + + if ( w.wp.hooks ) { + w.wp.hooks.doAction( 'imagifybeat.nonces-expired' ); + } + } + + // Change the interval from PHP + if ( response.imagifybeat_interval ) { + newInterval = response.imagifybeat_interval; + delete response.imagifybeat_interval; + } + + // Update the imagifybeat nonce if set. + if ( response.imagifybeat_nonce && typeof w.imagifybeatSettings === 'object' ) { + w.imagifybeatSettings.nonce = response.imagifybeat_nonce; + delete response.imagifybeat_nonce; + } + + $document.trigger( 'imagifybeat-tick', [ response, textStatus, jqXHR ] ); + + if ( w.wp.hooks ) { + w.wp.hooks.doAction( 'imagifybeat.tick', response, textStatus, jqXHR ); + } + + // Do this last. Can trigger the next XHR if connection time > 5 sec. and newInterval == 'fast'. + if ( newInterval ) { + interval( newInterval ); + } + } ).fail( function( jqXHR, textStatus, error ) { + setErrorState( textStatus || 'unknown', jqXHR.status ); + $document.trigger( 'imagifybeat-error', [ jqXHR, textStatus, error ] ); + + if ( w.wp.hooks ) { + w.wp.hooks.doAction( 'imagifybeat.error', jqXHR, textStatus, error ); + } + } ); + } + + /** + * Schedules the next connection. + * + * Fires immediately if the connection time is longer than the interval. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function scheduleNextTick() { + var delta = time() - settings.lastTick, + interv = settings.mainInterval; + + if ( settings.suspend ) { + return; + } + + if ( ! settings.hasFocus && settings.suspendEnabled ) { + // When no user activity or the window lost focus, increase polling interval to 120 seconds, but only if suspend is enabled. + interv = 120000; // 120 sec. + } else if ( settings.countdown > 0 && settings.tempInterval ) { + interv = settings.tempInterval; + settings.countdown--; + + if ( settings.countdown < 1 ) { + settings.tempInterval = 0; + } + } + + if ( settings.minimalInterval && interv < settings.minimalInterval ) { + interv = settings.minimalInterval; + } + + w.clearTimeout( settings.beatTimer ); + + if ( delta < interv ) { + settings.beatTimer = w.setTimeout( + function() { + connect(); + }, + interv - delta + ); + } else { + connect(); + } + } + + /** + * Sets the internal state when the browser w becomes hidden or loses focus. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function blurred() { + settings.hasFocus = false; + } + + /** + * Sets the internal state when the browser w becomes visible or is in focus. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function focused() { + settings.userActivity = time(); + + // Resume if suspended + settings.suspend = false; + + if ( ! settings.hasFocus ) { + settings.hasFocus = true; + scheduleNextTick(); + } + } + + /** + * Runs when the user becomes active after a period of inactivity. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function userIsActive() { + settings.userActivityEvents = false; + $document.off( '.imagifybeat-active' ); + + $( 'iframe' ).each( function( i, frame ) { + if ( isLocalFrame( frame ) ) { + $( frame.contentWindow ).off( '.imagifybeat-active' ); + } + } ); + + focused(); + } + + /** + * Checks for user activity. + * + * Runs every 30 sec. Sets 'hasFocus = true' if user is active and the w is + * in the background. Sets 'hasFocus = false' if the user has been inactive + * (no mouse or keyboard activity) for 5 min. even when the w has focus. + * + * @since 1.9.3 + * @access private + * + * @return {void} + */ + function checkUserActivity() { + var lastActive = settings.userActivity ? time() - settings.userActivity : 0; + + // Set hasFocus to false when no mouse or keyboard activity for 5 min. + if ( lastActive > 300000 && settings.hasFocus ) { + blurred(); + } + + // Suspend after 10 min. of inactivity. + if ( settings.suspendEnabled && lastActive > 600000 ) { + settings.suspend = true; + } + + if ( ! settings.userActivityEvents ) { + $document.on( 'mouseover.imagifybeat-active keyup.imagifybeat-active touchend.imagifybeat-active', function() { + userIsActive(); + } ); + + $( 'iframe' ).each( function( i, frame ) { + if ( isLocalFrame( frame ) ) { + $( frame.contentWindow ).on( 'mouseover.imagifybeat-active keyup.imagifybeat-active touchend.imagifybeat-active', function() { + userIsActive(); + } ); + } + } ); + + settings.userActivityEvents = true; + } + } + + // Public methods. + + /** + * Checks whether the w (or any local iframe in it) has focus, or the user + * is active. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @return {bool} True if the w or the user is active. + */ + function hasFocus() { + return settings.hasFocus; + } + + /** + * Checks whether there is a connection error. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @return {bool} True if a connection error was found. + */ + function hasConnectionError() { + return settings.connectionError; + } + + /** + * Connects as soon as possible regardless of 'hasFocus' state. + * + * Will not open two concurrent connections. If a connection is in progress, + * will connect again immediately after the current connection completes. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @return {void} + */ + function connectNow() { + settings.lastTick = 0; + scheduleNextTick(); + } + + /** + * Disables suspending. + * + * Should be used only when Imagifybeat is performing critical tasks like + * autosave, post-locking, etc. Using this on many screens may overload the + * user's hosting account if several browser ws/tabs are left open for a + * long time. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @return {void} + */ + function disableSuspend() { + settings.suspendEnabled = false; + } + + /** + * Enables suspending. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @return {void} + */ + function enableSuspend() { + settings.suspendEnabled = true; + } + + /** + * Gets/Sets the interval. + * + * When setting to 'fast' or 5, the interval is 5 seconds for the next 30 ticks + * (for 2 minutes and 30 seconds) by default. In this case the number of 'ticks' + * can be passed as second argument. If the window doesn't have focus, the + * interval slows down to 2 min. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @param {string|int} speed Interval: 'fast' or 5, 15, 30, 60, 120. Fast equals 5. + * @param {string} ticks Tells how many ticks before the interval reverts back. Used with speed = 'fast' or 5. + * @return {int} Current interval in seconds. + */ + function interval( speed, ticks ) { + var newInterval, + oldInterval = settings.tempInterval ? settings.tempInterval : settings.mainInterval; + + if ( speed ) { + switch ( speed ) { + case 'fast': + case 5: + newInterval = 5000; + break; + case 15: + newInterval = 15000; + break; + case 30: + newInterval = 30000; + break; + case 60: + newInterval = 60000; + break; + case 120: + newInterval = 120000; + break; + case 'long-polling': + // Allow long polling, (experimental) + settings.mainInterval = 0; + return 0; + default: + newInterval = settings.originalInterval; + } + + if ( settings.minimalInterval && newInterval < settings.minimalInterval ) { + newInterval = settings.minimalInterval; + } + + if ( 5000 === newInterval ) { + ticks = parseInt( ticks, 10 ) || 30; + ticks = ticks < 1 || ticks > 30 ? 30 : ticks; + + settings.countdown = ticks; + settings.tempInterval = newInterval; + } else { + settings.countdown = 0; + settings.tempInterval = 0; + settings.mainInterval = newInterval; + } + + // Change the next connection time if new interval has been set. + // Will connect immediately if the time since the last connection + // is greater than the new interval. + if ( newInterval !== oldInterval ) { + scheduleNextTick(); + } + } + + return settings.tempInterval ? settings.tempInterval / 1000 : settings.mainInterval / 1000; + } + + /** + * Resets the interval. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @return {int} Current interval in seconds. + */ + function resetInterval() { + return interval( settings.originalInterval ); + } + + /** + * Enqueues data to send with the next XHR. + * + * As the data is send asynchronously, this function doesn't return the XHR + * response. To see the response, use the custom jQuery event 'imagifybeat-tick' + * on the document, example: + * $(document).on( 'imagifybeat-tick.myname', function( event, data, textStatus, jqXHR ) { + * // code + * }); + * If the same 'handle' is used more than once, the data is not overwritten when + * the third argument is 'true'. Use `imagify.beat.isQueued('handle')` to see if + * any data is already queued for that handle. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @param {string} handle Unique handle for the data, used in PHP to receive the data. + * @param {mixed} data The data to send. + * @param {bool} noOverwrite Whether to overwrite existing data in the queue. + * @return {bool} True if the data was queued. + */ + function enqueue( handle, data, noOverwrite ) { + if ( handle ) { + if ( noOverwrite && this.isQueued( handle ) ) { + return false; + } + + settings.queue[handle] = data; + return true; + } + return false; + } + + /** + * Checks if data with a particular handle is queued. + * + * @since 1.9.3 + * + * @param {string} handle The handle for the data. + * @return {bool} True if the data is queued with this handle. + */ + function isQueued( handle ) { + if ( handle ) { + return Object.prototype.hasOwnProperty.call( settings.queue, handle ); + } + } + + /** + * Removes data with a particular handle from the queue. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @param {string} handle The handle for the data. + */ + function dequeue( handle ) { + if ( handle ) { + delete settings.queue[handle]; + } + } + + /** + * Gets data that was enqueued with a particular handle. + * + * @since 1.9.3 + * @memberOf imagify.beat.prototype + * + * @param {string} handle The handle for the data. + * @return {mixed} The data or undefined. + */ + function getQueuedItem( handle ) { + if ( handle ) { + return this.isQueued( handle ) ? settings.queue[ handle ] : undefined; + } + } + + initialize(); + + // Expose public methods. + return { + hasFocus: hasFocus, + connectNow: connectNow, + disableSuspend: disableSuspend, + enableSuspend: enableSuspend, + interval: interval, + resetInterval: resetInterval, + hasConnectionError: hasConnectionError, + enqueue: enqueue, + dequeue: dequeue, + isQueued: isQueued, + getQueuedItem: getQueuedItem + }; + }; + + /** + * Contains the Imagifybeat API. + * + * @namespace imagify.beat + * @type {Imagifybeat} + */ + w.imagify.beat = new Imagifybeat(); + +} )( jQuery, document, window ); diff --git a/wp/wp-content/plugins/imagify/assets/js/beat.min.js b/wp/wp-content/plugins/imagify/assets/js/beat.min.js new file mode 100644 index 00000000..26c67fbe --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/beat.min.js @@ -0,0 +1 @@ +window.imagify=window.imagify||{},function(I,h,w){w.imagify.beat=new function(){var e,n,t,i,a=I(h),o={suspend:!1,suspendEnabled:!0,screenId:"",url:"",lastTick:0,queue:{},mainInterval:60,tempInterval:0,originalInterval:0,minimalInterval:0,countdown:0,connecting:!1,connectionError:!1,errorcount:0,hasConnected:!1,hasFocus:!0,userActivity:0,userActivityEvents:!1,checkFocusTimer:0,beatTimer:0};function r(){return(new Date).getTime()}function c(e){var n,t=e.src;if(!t||!/^https?:\/\//.test(t)||(n=w.location.origin||w.location.protocol+"//"+w.location.host,0===t.indexOf(n)))try{if(e.contentWindow.document)return 1}catch(e){}}function s(){o.hasFocus&&!document.hasFocus()?d():!o.hasFocus&&document.hasFocus()&&v()}function u(e,n){var t;if(e){switch(e){case"abort":break;case"timeout":t=!0;break;case"error":if(503===n&&o.hasConnected){t=!0;break}case"parsererror":case"empty":case"unknown":o.errorcount++,2 postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {function} resolver + Useful for tooling. + @constructor +*/ +function Promise$3(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = undefined; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise$3 ? initializePromise(this, resolver) : needsNew(); + } +} + +Promise$3.all = all$1; +Promise$3.race = race$1; +Promise$3.resolve = resolve$1; +Promise$3.reject = reject$1; +Promise$3._setScheduler = setScheduler; +Promise$3._setAsap = setAsap; +Promise$3._asap = asap; + +Promise$3.prototype = { + constructor: Promise$3, + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + + Chaining + -------- + + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + + Assimilation + ------------ + + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + + If the assimliated promise rejects, then the downstream promise will also reject. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + + Simple Example + -------------- + + Synchronous Example + + ```javascript + let result; + + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + + Promise Example; + + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + + Advanced Example + -------------- + + Synchronous Example + + ```javascript + let author, books; + + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + + function foundBooks(books) { + + } + + function failure(reason) { + + } + + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + + Promise Example; + + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + then: then, + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + 'catch': function _catch(onRejection) { + return this.then(null, onRejection); + } +}; + +/*global self*/ +function polyfill$1() { + var local = undefined; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise$3; +} + +// Strange compat.. +Promise$3.polyfill = polyfill$1; +Promise$3.Promise = Promise$3; + +Promise$3.polyfill(); + +return Promise$3; + +}))); + diff --git a/wp/wp-content/plugins/imagify/assets/js/es6-promise.auto.min.js b/wp/wp-content/plugins/imagify/assets/js/es6-promise.auto.min.js new file mode 100644 index 00000000..ba34fa7c --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/es6-promise.auto.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}function n(t){I=t}function r(t){J=t}function o(){return function(){return process.nextTick(a)}}function i(){return"undefined"!=typeof H?function(){H(a)}:c()}function s(){var t=0,e=new V(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t tag. + */ + insertBulkActionTags: function() { + var bulkActions = ''; + + if ( w.imagifyFiles.backupOption || $( '.file-has-backup' ).length ) { + // If the backup option is enabled, or if we have items that can be restored. + bulkActions += ''; + } + + $( '.bulkactions select[name="action"] option:first-child, .bulkactions select[name="action2"] option:first-child' ).after( bulkActions ); + }, + + /** + * Process one of these actions: bulk restore, bulk optimize, or bulk refresh-status. + * + * @param {object} e Event. + */ + processBulkAction: function( e ) { + var value = $( this ).prev( 'select' ).val(), + action; + + if ( 'imagify-bulk-optimize' !== value && 'imagify-bulk-restore' !== value && 'imagify-bulk-refresh-status' !== value ) { + return; + } + + e.preventDefault(); + + action = value.replace( 'imagify-bulk-', '' ); + + $( 'input[name="bulk_select[]"]:checked' ).closest( 'tr' ).find( '.button-imagify-' + action ).each( function ( index, el ) { + setTimeout( function() { + $( el ).trigger( 'click.imagify' ); + }, index * 500 ); + } ); + }, + + // Optimization ============================================================================ + + /** + * Process one of these actions: optimize, re-optimize, restore, or refresh-status. + * + * @param {object} e Event. + */ + processOptimization: function( e ) { + var $button = $( this ), + $row = $button.closest( 'tr' ), + $checkbox = $row.find( '.check-column [type="checkbox"]' ), + id = imagify.filesList.sanitizeId( $checkbox.val() ), + context = w.imagifyFiles.context, + $parent, href, processingTemplate; + + e.preventDefault(); + + if ( imagify.filesList.isItemLocked( context, id ) ) { + return; + } + + imagify.filesList.lockItem( context, id ); + + href = $button.attr( 'href' ); + processingTemplate = w.imagify.template( 'imagify-button-processing' ); + $parent = $button.closest( '.column-actions, .column-status' ); + + $parent.html( processingTemplate( { + label: $button.data( 'processing-label' ) + } ) ); + + $.get( href.replace( 'admin-post.php', 'admin-ajax.php' ) ) + .done( function( r ) { + if ( ! r.success ) { + if ( r.data && r.data.row ) { + $row.html( '' + r.data.row + '' ); + } else { + $parent.html( r.data ); + } + + $row.find( '.check-column [type="checkbox"]' ).prop( 'checked', false ); + + imagify.filesList.unlockItem( context, id ); + return; + } + + if ( r.data && r.data.columns ) { + // The work is done. + w.imagify.filesList.displayProcessResult( context, id, r.data.columns ); + } else { + // Still processing in background: we're waiting for the result by poking Imagifybeat. + // Set the Imagifybeat interval to 15 seconds. + w.imagify.beat.interval( 15 ); + } + } ); + }, + + // Imagifybeat ============================================================================= + + /** + * Send the media IDs and their status to Imagifybeat. + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + addToImagifybeat: function ( e, data ) { + var $boxes = $( '.wp-list-table.imagify-files .check-column [name="bulk_select[]"]' ); + + if ( ! $boxes.length ) { + return; + } + + data[ w.imagifyFiles.imagifybeatID ] = {}; + + $boxes.each( function() { + var id = w.imagify.filesList.sanitizeId( this.value ), + context = w.imagifyFiles.context, + locked = w.imagify.filesList.isItemLocked( context, id ) ? 1 : 0; + + data[ w.imagifyFiles.imagifybeatID ][ context ] = data[ w.imagifyFiles.imagifybeatID ][ context ] || {}; + data[ w.imagifyFiles.imagifybeatID ][ context ][ '_' + id ] = locked; + } ); + }, + + /** + * Listen for the custom event "imagifybeat-tick" on $(document). + * + * @param {object} e Event object. + * @param {object} data Object containing all Imagifybeat IDs. + */ + processImagifybeat: function ( e, data ) { + if ( typeof data[ w.imagifyFiles.imagifybeatID ] === 'undefined' ) { + return; + } + + $.each( data[ w.imagifyFiles.imagifybeatID ], function( contextId, columns ) { + var context, id; + + context = $.trim( contextId ).match( /^(.+)_(\d+)$/ ); + + if ( ! context ) { + return; + } + + id = w.imagify.filesList.sanitizeId( context[2] ); + context = w.imagify.filesList.sanitizeContext( context[1] ); + + if ( context !== w.imagifyFiles.context ) { + return; + } + + w.imagify.filesList.displayProcessResult( context, id, columns ); + } ); + }, + + // DOM manipulation tools ================================================================== + + /** + * Display a successful process result. + * + * @param {string} context The media context. + * @param {int} id The media ID. + * @param {string} columns A list of HTML, keyed by column name. + */ + displayProcessResult: function( context, id, columns ) { + var $row = w.imagify.filesList.getContainers( id ); + + $.each( columns, function( k, v ) { + $row.children( '.column-' + k ).html( v ); + } ); + + $row.find( '.check-column [type="checkbox"]' ).prop( 'checked', false ); + + w.imagify.filesList.unlockItem( context, id ); + + if ( ! w.imagify.filesList.working.length ) { + // Work is done. + // Reset Imagifybeat interval. + w.imagify.beat.resetInterval(); + } + }, + + /** + * Get all containers matching the given id. + * + * @param {int} id The media ID. + * @return {object} A jQuery collection. + */ + getContainers: function( id ) { + return $( '.wp-list-table.imagify-files .check-column [name="bulk_select[]"][value="' + id + '"]' ).closest( 'tr' ); + }, + + // Sanitization ============================================================================ + + /** + * Sanitize a media ID. + * + * @param {int|string} id A media ID. + * @return {int} + */ + sanitizeId: function( id ) { + return parseInt( id, 10 ); + }, + + /** + * Sanitize a media context. + * + * @param {string} context A media context. + * @return {string} + */ + sanitizeContext: function( context ) { + context = context.replace( '/[^a-z0-9_-]/gi', '' ).toLowerCase(); + return context ? context : 'wp'; + }, + + // Locks =================================================================================== + + /** + * Lock an item. + * + * @param {string} context The media context. + * @param {int} id The media ID. + */ + lockItem: function( context, id ) { + if ( ! this.isItemLocked( context, id ) ) { + this.working.push( context + '_' + id ); + } + }, + + /** + * Unlock an item. + * + * @param {string} context The media context. + * @param {int} id The media ID. + */ + unlockItem: function( context, id ) { + var name = context + '_' + id, + i = _.indexOf( this.working, name ); + + if ( i > -1 ) { + this.working.splice( i, 1 ); + } + }, + + /** + * Tell if an item is locked. + * + * @param {string} context The media context. + * @param {int} id The media ID. + * @return {bool} + */ + isItemLocked: function( context, id ) { + return _.indexOf( this.working, context + '_' + id ) > -1; + } + }; + + w.imagify.filesList.init(); + +} )(jQuery, document, window); + + +(function(w) { // eslint-disable-line no-shadow, no-shadow-restricted-names + + /** + * requestAnimationFrame polyfill by Erik Möller. + * Fixes from Paul Irish and Tino Zijdel. + * MIT license - http://paulirish.com/2011/requestanimationframe-for-smart-animating/ - http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating. + */ + var lastTime = 0, + vendors = ['ms', 'moz', 'webkit', 'o']; + + for ( var x = 0; x < vendors.length && ! w.requestAnimationFrame; ++x ) { + w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame']; + w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] || w[vendors[x] + 'CancelRequestAnimationFrame']; + } + + if ( ! w.requestAnimationFrame ) { + w.requestAnimationFrame = function( callback ) { + var currTime = new Date().getTime(), + timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) ), + id = setTimeout( function() { + callback( currTime + timeToCall ); + }, timeToCall ); + + lastTime = currTime + timeToCall; + return id; + }; + } + + if ( ! w.cancelAnimationFrame ) { + w.cancelAnimationFrame = function( id ) { + clearTimeout( id ); + }; + } + +})(window); + + +(function($, d, w, undefined) { // eslint-disable-line no-unused-vars, no-shadow, no-shadow-restricted-names + + /** + * LazyLoad images in the list. + */ + var lazyImages = $( '#imagify-files-list-form' ).find( '[data-lazy-src]' ), + lazyTimer; + + function lazyLoadThumbnails() { + w.cancelAnimationFrame( lazyTimer ); + lazyTimer = w.requestAnimationFrame( lazyLoadThumbnailsCallback ); // eslint-disable-line no-use-before-define + } + + function lazyLoadThumbnailsCallback() { + var $w = $( w ), + winScroll = $w.scrollTop(), + winHeight = $w.outerHeight(); + + $.each( lazyImages, function() { + var $image = $( this ), + imgTop = $image.offset().top, + imgBottom = imgTop + $image.outerHeight(), + screenTopThresholded = winScroll - 150, + screenBottomThresholded = winScroll + winHeight + 150, + src; + + lazyImages = lazyImages.not( $image ); + + if ( ! lazyImages.length ) { + $w.off( 'scroll resize orientationchange', lazyLoadThumbnails ); + } + + /** + * Hidden images that are above the fold and below the top, are reported as: + * - offset: window scroll, + * - height: 0, + * (at least in Firefox). + * That's why I use <= and >=. + * + * 150 is the threshold. + */ + if ( imgBottom >= screenTopThresholded && imgTop <= screenBottomThresholded ) { + src = $image.attr( 'data-lazy-src' ); + + if ( undefined !== src && src ) { + $image.attr( 'src', src ).removeAttr( 'data-lazy-src' ); + } + + $image.next( 'noscript' ).remove(); + } + } ); + } + + if ( lazyImages.length ) { + $( w ).on( 'scroll resize orientationchange', lazyLoadThumbnails ); + lazyLoadThumbnailsCallback(); + } + +} )(jQuery, document, window); diff --git a/wp/wp-content/plugins/imagify/assets/js/files-list.min.js b/wp/wp-content/plugins/imagify/assets/js/files-list.min.js new file mode 100644 index 00000000..b0a834aa --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/files-list.min.js @@ -0,0 +1 @@ +window.imagify.drawMeAChart=function(i){i.each(function(){var i=parseInt(jQuery(this).closest(".imagify-chart").next(".imagify-chart-value").text(),10);new window.imagify.Chart(this,{type:"doughnut",data:{datasets:[{data:[i,100-i],backgroundColor:["#00B3D3","#D8D8D8"],borderColor:"#fff",borderWidth:1}]},options:{legend:{display:!1},events:[],animation:{easing:"easeOutBounce"},tooltips:{enabled:!1},responsive:!1}})})},function(c,t,l){l.imagify.filesList={working:[],init:function(){var i=c(t);c(l).on("canvasprinted.imagify",this.updateChart).trigger("canvasprinted.imagify"),this.insertBulkActionTags(),c("#doaction, #doaction2").on("click.imagify",this.processBulkAction),i.on("click.imagify",".button-imagify-optimize, .button-imagify-manual-reoptimize, .button-imagify-generate-webp, .button-imagify-delete-webp, .button-imagify-restore, .button-imagify-refresh-status",this.processOptimization),i.on("imagifybeat-send",this.addToImagifybeat),i.on("imagifybeat-tick",this.processImagifybeat),(i=c(".wp-list-table.imagify-files .button-imagify-processing")).length&&(i.closest("tr").find('.check-column [name="bulk_select[]"]').each(function(){var i=l.imagify.filesList.sanitizeId(this.value);l.imagify.filesList.lockItem(l.imagifyFiles.context,i)}),l.imagify.beat.interval(15))},updateChart:function(i,t){t=c(t=t||".imagify-consumption-chart");l.imagify.drawMeAChart(t),t.closest(".imagify-datas-list").siblings(".imagify-datas-details").hide()},insertBulkActionTags:function(){var i='";(l.imagifyFiles.backupOption||c(".file-has-backup").length)&&(i+='"),c('.bulkactions select[name="action"] option:first-child, .bulkactions select[name="action2"] option:first-child').after(i)},processBulkAction:function(i){var t=c(this).prev("select").val();"imagify-bulk-optimize"!==t&&"imagify-bulk-restore"!==t&&"imagify-bulk-refresh-status"!==t||(i.preventDefault(),i=t.replace("imagify-bulk-",""),c('input[name="bulk_select[]"]:checked').closest("tr").find(".button-imagify-"+i).each(function(i,t){setTimeout(function(){c(t).trigger("click.imagify")},500*i)}))},processOptimization:function(i){var t,e=c(this),a=e.closest("tr"),n=a.find('.check-column [type="checkbox"]'),s=imagify.filesList.sanitizeId(n.val()),o=l.imagifyFiles.context;i.preventDefault(),imagify.filesList.isItemLocked(o,s)||(imagify.filesList.lockItem(o,s),n=e.attr("href"),i=l.imagify.template("imagify-button-processing"),(t=e.closest(".column-actions, .column-status")).html(i({label:e.data("processing-label")})),c.get(n.replace("admin-post.php","admin-ajax.php")).done(function(i){i.success?i.data&&i.data.columns?l.imagify.filesList.displayProcessResult(o,s,i.data.columns):l.imagify.beat.interval(15):(i.data&&i.data.row?a.html(''+i.data.row+""):t.html(i.data),a.find('.check-column [type="checkbox"]').prop("checked",!1),imagify.filesList.unlockItem(o,s))}))},addToImagifybeat:function(i,a){var t=c('.wp-list-table.imagify-files .check-column [name="bulk_select[]"]');t.length&&(a[l.imagifyFiles.imagifybeatID]={},t.each(function(){var i=l.imagify.filesList.sanitizeId(this.value),t=l.imagifyFiles.context,e=l.imagify.filesList.isItemLocked(t,i)?1:0;a[l.imagifyFiles.imagifybeatID][t]=a[l.imagifyFiles.imagifybeatID][t]||{},a[l.imagifyFiles.imagifybeatID][t]["_"+i]=e}))},processImagifybeat:function(i,t){void 0!==t[l.imagifyFiles.imagifybeatID]&&c.each(t[l.imagifyFiles.imagifybeatID],function(i,t){var e,i=c.trim(i).match(/^(.+)_(\d+)$/);i&&(e=l.imagify.filesList.sanitizeId(i[2]),(i=l.imagify.filesList.sanitizeContext(i[1]))===l.imagifyFiles.context)&&l.imagify.filesList.displayProcessResult(i,e,t)})},displayProcessResult:function(i,t,e){var a=l.imagify.filesList.getContainers(t);c.each(e,function(i,t){a.children(".column-"+i).html(t)}),a.find('.check-column [type="checkbox"]').prop("checked",!1),l.imagify.filesList.unlockItem(i,t),l.imagify.filesList.working.length||l.imagify.beat.resetInterval()},getContainers:function(i){return c('.wp-list-table.imagify-files .check-column [name="bulk_select[]"][value="'+i+'"]').closest("tr")},sanitizeId:function(i){return parseInt(i,10)},sanitizeContext:function(i){return(i=i.replace("/[^a-z0-9_-]/gi","").toLowerCase())||"wp"},lockItem:function(i,t){this.isItemLocked(i,t)||this.working.push(i+"_"+t)},unlockItem:function(i,t){i=_.indexOf(this.working,i+"_"+t);-1 this.bufferSize ? this.bufferSize : this.prefixedMediaIDs.length, + i; + + for ( i = 0; i < chunkLength; i++ ) { + this.processNext(); + } + + return this; + }; + + /** + * Launch next optimization. + * + * @return this + */ + w.imagify.Optimizer.prototype.processNext = function() { + if ( this.prefixedMediaIDs.length ) { + this.process( this.prefixedMediaIDs.shift() ); + } + + return this; + }; + + /** + * Launch an optimization. + * + * @param {string} prefixedId A media ID, prefixed with an underscore. + * @return this + */ + w.imagify.Optimizer.prototype.process = function( prefixedId ) { + var _this = this, + fileURL = this.files[ prefixedId ], + data = { + mediaID: parseInt( prefixedId.toString().substr( 1 ), 10 ), + filename: this.files[ prefixedId ].split( '/' ).pop(), + thumbnail: this.defaultThumb + }, + extension = data.filename.split( '.' ).pop().toLowerCase(), + regexp = new RegExp( '^' + this.imageExtensions.join( '|' ).toLowerCase() + '$' ), + image; + + if ( ! extension.match( regexp ) ) { + // Not an image. + this.currentItems.push( data ); + this._before( data ); + this.send( data ); + return this; + } + + // Create a thumbnail and send the ajax request. + image = new Image(); + + image.onerror = function () { + _this.currentItems.push( data ); + _this._before( data ); + _this.send( data ); + }; + + image.onload = function () { + var maxWidth = 33, + maxHeight = 33, + imageWidth = image.width, + imageHeight = image.height, + newHeight = 0, + newWidth = 0, + topOffset = 0, + leftOffset = 0, + canvas = null, + ctx = null; + + if ( imageWidth < imageHeight ) { + // Portrait. + newWidth = maxWidth; + newHeight = newWidth * imageHeight / imageWidth; + topOffset = ( maxHeight - newHeight ) / 2; + } else { + // Landscape. + newHeight = maxHeight; + newWidth = newHeight * imageWidth / imageHeight; + leftOffset = ( maxWidth - newWidth ) / 2; + } + + canvas = d.createElement( 'canvas' ); + + canvas.width = maxWidth; + canvas.height = maxHeight; + + ctx = canvas.getContext( '2d' ); + ctx.drawImage( this, leftOffset, topOffset, newWidth, newHeight ); + + try { + data.thumbnail = canvas.toDataURL( 'image/jpeg' ); + } catch ( e ) { + data.thumbnail = _this.defaultThumb; + } + + canvas = null; + ctx = null; + image = null; + + _this.currentItems.push( data ); + _this._before( data ); + _this.send( data ); + }; + + image.src = fileURL; + + return this; + }; + + /** + * Do the ajax request. + * + * @param {object} data { + * The data: + * + * @type {int} mediaID The media ID. + * @type {string} filename The file name. + * @type {string} thumbnail The file thumbnail URL. + * } + * @return this + */ + w.imagify.Optimizer.prototype.send = function( data ) { + var _this = this, + defaultResponse = { + success: false, + mediaID: data.mediaID, + groupID: this.groupID, + context: this.context, + filename: data.filename, + thumbnail: data.thumbnail, + status: 'error', + error: '' + }; + + $.post( { + url: this.ajaxUrl, + data: { + media_id: data.mediaID, + context: this.context, + optimization_level: this.level + }, + dataType: 'json' + } ) + .done( function( response ) { + if ( response.success ) { + return; + } + + defaultResponse.error = response.data.error; + + _this.processed( defaultResponse ); + } ) + .fail( function( jqXHR ) { + if ( 200 === jqXHR.status ) { + defaultResponse.error = jqXHR.responseText.replace( /

.*<\/h1>\n*/, '' ); + } else { + defaultResponse.error = jqXHR.statusText; + } + + _this.processed( defaultResponse ); + } ); + + return this; + }; + + /** + * Callback triggered when an optimization is complete. + * + * @param {object} e jQuery's Event object. + * @param {object} item { + * The response: + * + * @type {int} mediaID The media ID. + * @type {string} context The context. + * } + */ + w.imagify.Optimizer.prototype.processedCallback = function( e, item ) { + var _this = e.data._this; + + if ( item.context !== _this.context ) { + return; + } + + if ( ! item.mediaID || typeof _this.files[ '_' + item.mediaID ] === 'undefined' ) { + return; + } + + item.groupID = _this.groupID; + + if ( ! _this.currentItems.length ) { + // Trouble. + _this.processed( item ); + return; + } + + $.each( _this.currentItems, function( i, mediaData ) { + if ( item.mediaID === mediaData.mediaID ) { + item.filename = mediaData.filename; + item.thumbnail = mediaData.thumbnail; + return false; + } + } ); + + _this.processed( item ); + }; + + /** + * After a media has been processed. + * + * @param {object} response { + * The response: + * + * @type {bool} success Whether the optimization succeeded or not ("already optimized" is a success). + * @type {int} mediaID The media ID. + * @type {string} groupID The group ID. + * @type {string} context The context. + * @type {string} filename The file name. + * @type {string} thumbnail The file thumbnail URL. + * @type {string} status The status, like 'optimized', 'already-optimized', 'over-quota', 'error'. + * @type {string} error The error message. + * } + * @return this + */ + w.imagify.Optimizer.prototype.processed = function( response ) { + var currentItems = this.currentItems; + + if ( currentItems.length ) { + // Remove this media from the "current" list. + $.each( currentItems, function( i, mediaData ) { + if ( response.mediaID === mediaData.mediaID ) { + currentItems.splice( i, 1 ); + return false; + } + } ); + + this.currentItems = currentItems; + } + + // Update stats. + if ( response.success && 'already-optimized' !== response.status ) { + this.globalOriginalSize += response.originalOverallSize; + this.globalOptimizedSize += response.newOverallSize; + this.globalGain += response.overallSaving; + this.globalPercent = ( 100 - this.globalOptimizedSize / this.globalOptimizedSize * 100 ).toFixed( 2 ); + } + + ++this.processedMedia; + response.progress = Math.floor( this.processedMedia / this.totalMedia * 100 ); + + this._each( response ); + + if ( this.prefixedMediaIDs.length ) { + this.processNext(); + } else if ( this.totalMedia === this.processedMedia ) { + this._done( { + globalOriginalSize: this.globalOriginalSize, + globalOptimizedSize: this.globalOptimizedSize, + globalGain: this.globalGain + } ); + } + + return this; + }; + + /** + * Stop the process. + * + * @return this + */ + w.imagify.Optimizer.prototype.stopProcess = function() { + this.files = {}; + this.prefixedMediaIDs = []; + this.currentItems = []; + + if ( this.doneEvent ) { + $( w ).off( this.doneEvent, this.processedCallback ); + } + + return this; + }; + +} )(jQuery, document, window); diff --git a/wp/wp-content/plugins/imagify/assets/js/imagify-gulp.min.js b/wp/wp-content/plugins/imagify/assets/js/imagify-gulp.min.js new file mode 100644 index 00000000..25d40d79 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/imagify-gulp.min.js @@ -0,0 +1,396 @@ +/** + * Library that handles the bulk optimization processes. + * + * @requires jQuery + */ +window.imagify = window.imagify || {}; + +/* eslint-disable no-underscore-dangle, consistent-this */ +(function($, d, w) { + + /** + * Construct the optimizer. + * + * @param {object} settings { + * Optimizer settings: + * + * @type {string} groupID Group ID, like 'library' or 'custom-folders'. + * @type {string} context Context within this group, like 'wp' or 'custom-folders' (yes, again). + * @type {int} level Optimization level: 0 to 2. + * @type {int} bufferSize Number of parallel optimizations: usually 4. + * @type {string} ajaxUrl URL to request to optimize. + * @type {object} files Files to optimize: media ID as key (prefixed with an underscore), file URL as value. + * @type {string} defaultThumb A default thumbnail URL. + * @type {string} doneEvent Name of the event to listen to know when optimizations end. + * @type {array} imageExtensions A list of supported image extensions (only images). + * } + */ + w.imagify.Optimizer = function ( settings ) { + // Settings. + this.groupID = settings.groupID; + this.context = settings.context; + this.level = settings.level; + this.bufferSize = settings.bufferSize || 1; + this.ajaxUrl = settings.ajaxUrl; + this.files = settings.files; + this.defaultThumb = settings.defaultThumb; + this.doneEvent = settings.doneEvent; + + if ( settings.imageExtensions ) { + this.imageExtensions = settings.imageExtensions; + } else { + this.imageExtensions = [ 'jpg', 'jpeg', 'jpe', 'png', 'gif' ]; + } + + /** + * An array of media IDs (prefixed with an underscore). + */ + this.prefixedMediaIDs = Object.keys( this.files ); + /** + * An array of medias currently being optimized: { + * @type {int} mediaID The media ID. + * @type {string} filename The file name. + * @type {string} thumbnail The file thumbnail URL. + * } + */ + this.currentItems = []; + + // Internal counters. + this.totalMedia = this.prefixedMediaIDs.length; + this.processedMedia = 0; + + // Global stats. + this.globalOriginalSize = 0; + this.globalOptimizedSize = 0; + this.globalGain = 0; + this.globalPercent = 0; + + // Callbacks. + this._before = function () {}; + this._each = function () {}; + this._done = function () {}; + + // Listen to the "optimization done" event. + if ( this.totalMedia && this.doneEvent ) { + $( w ).on( this.doneEvent, { _this: this }, this.processedCallback ); + } + }; + + /** + * Callback to trigger before each media optimization. + * + * @param {callable} fnc A callback. + * @return this + */ + w.imagify.Optimizer.prototype.before = function( fnc ) { + this._before = fnc; + return this; + }; + + /** + * Callback to trigger after each media optimization. + * + * @param {callable} fnc A callback. + * @return this + */ + w.imagify.Optimizer.prototype.each = function( fnc ) { + this._each = fnc; + return this; + }; + + /** + * Callback to trigger all media optimizations have been done. + * + * @param {callable} fnc A callback. + * @return this + */ + w.imagify.Optimizer.prototype.done = function( fnc ) { + this._done = fnc; + return this; + }; + + /** + * Launch optimizations. + * + * @return this + */ + w.imagify.Optimizer.prototype.run = function() { + var chunkLength = this.prefixedMediaIDs.length > this.bufferSize ? this.bufferSize : this.prefixedMediaIDs.length, + i; + + for ( i = 0; i < chunkLength; i++ ) { + this.processNext(); + } + + return this; + }; + + /** + * Launch next optimization. + * + * @return this + */ + w.imagify.Optimizer.prototype.processNext = function() { + if ( this.prefixedMediaIDs.length ) { + this.process( this.prefixedMediaIDs.shift() ); + } + + return this; + }; + + /** + * Launch an optimization. + * + * @param {string} prefixedId A media ID, prefixed with an underscore. + * @return this + */ + w.imagify.Optimizer.prototype.process = function( prefixedId ) { + var _this = this, + fileURL = this.files[ prefixedId ], + data = { + mediaID: parseInt( prefixedId.toString().substr( 1 ), 10 ), + filename: this.files[ prefixedId ].split( '/' ).pop(), + thumbnail: this.defaultThumb + }, + extension = data.filename.split( '.' ).pop().toLowerCase(), + regexp = new RegExp( '^' + this.imageExtensions.join( '|' ).toLowerCase() + '$' ), + image; + + if ( ! extension.match( regexp ) ) { + // Not an image. + this.currentItems.push( data ); + this._before( data ); + this.send( data ); + return this; + } + + // Create a thumbnail and send the ajax request. + image = new Image(); + + image.onerror = function () { + _this.currentItems.push( data ); + _this._before( data ); + _this.send( data ); + }; + + image.onload = function () { + var maxWidth = 33, + maxHeight = 33, + imageWidth = image.width, + imageHeight = image.height, + newHeight = 0, + newWidth = 0, + topOffset = 0, + leftOffset = 0, + canvas = null, + ctx = null; + + if ( imageWidth < imageHeight ) { + // Portrait. + newWidth = maxWidth; + newHeight = newWidth * imageHeight / imageWidth; + topOffset = ( maxHeight - newHeight ) / 2; + } else { + // Landscape. + newHeight = maxHeight; + newWidth = newHeight * imageWidth / imageHeight; + leftOffset = ( maxWidth - newWidth ) / 2; + } + + canvas = d.createElement( 'canvas' ); + + canvas.width = maxWidth; + canvas.height = maxHeight; + + ctx = canvas.getContext( '2d' ); + ctx.drawImage( this, leftOffset, topOffset, newWidth, newHeight ); + + try { + data.thumbnail = canvas.toDataURL( 'image/jpeg' ); + } catch ( e ) { + data.thumbnail = _this.defaultThumb; + } + + canvas = null; + ctx = null; + image = null; + + _this.currentItems.push( data ); + _this._before( data ); + _this.send( data ); + }; + + image.src = fileURL; + + return this; + }; + + /** + * Do the ajax request. + * + * @param {object} data { + * The data: + * + * @type {int} mediaID The media ID. + * @type {string} filename The file name. + * @type {string} thumbnail The file thumbnail URL. + * } + * @return this + */ + w.imagify.Optimizer.prototype.send = function( data ) { + var _this = this, + defaultResponse = { + success: false, + mediaID: data.mediaID, + groupID: this.groupID, + context: this.context, + filename: data.filename, + thumbnail: data.thumbnail, + status: 'error', + error: '' + }; + + $.post( { + url: this.ajaxUrl, + data: { + media_id: data.mediaID, + context: this.context, + optimization_level: this.level + }, + dataType: 'json' + } ) + .done( function( response ) { + if ( response.success ) { + return; + } + + defaultResponse.error = response.data.error; + + _this.processed( defaultResponse ); + } ) + .fail( function( jqXHR ) { + defaultResponse.error = jqXHR.statusText; + + _this.processed( defaultResponse ); + } ); + + return this; + }; + + /** + * Callback triggered when an optimization is complete. + * + * @param {object} e jQuery's Event object. + * @param {object} item { + * The response: + * + * @type {int} mediaID The media ID. + * @type {string} context The context. + * } + */ + w.imagify.Optimizer.prototype.processedCallback = function( e, item ) { + var _this = e.data._this; + + if ( item.context !== _this.context ) { + return; + } + + if ( ! item.mediaID || typeof _this.files[ '_' + item.mediaID ] === 'undefined' ) { + return; + } + + item.groupID = _this.groupID; + + if ( ! _this.currentItems.length ) { + // Trouble. + _this.processed( item ); + return; + } + + $.each( _this.currentItems, function( i, mediaData ) { + if ( item.mediaID === mediaData.mediaID ) { + item.filename = mediaData.filename; + item.thumbnail = mediaData.thumbnail; + return false; + } + } ); + + _this.processed( item ); + }; + + /** + * After a media has been processed. + * + * @param {object} response { + * The response: + * + * @type {bool} success Whether the optimization succeeded or not ("already optimized" is a success). + * @type {int} mediaID The media ID. + * @type {string} groupID The group ID. + * @type {string} context The context. + * @type {string} filename The file name. + * @type {string} thumbnail The file thumbnail URL. + * @type {string} status The status, like 'optimized', 'already-optimized', 'over-quota', 'error'. + * @type {string} error The error message. + * } + * @return this + */ + w.imagify.Optimizer.prototype.processed = function( response ) { + var currentItems = this.currentItems; + + if ( currentItems.length ) { + // Remove this media from the "current" list. + $.each( currentItems, function( i, mediaData ) { + if ( response.mediaID === mediaData.mediaID ) { + currentItems.splice( i, 1 ); + return false; + } + } ); + + this.currentItems = currentItems; + } + + // Update stats. + if ( response.success && 'already-optimized' !== response.status ) { + this.globalOriginalSize += response.originalOverallSize; + this.globalOptimizedSize += response.newOverallSize; + this.globalGain += response.overallSaving; + this.globalPercent = ( 100 - this.globalOptimizedSize / this.globalOptimizedSize * 100 ).toFixed( 2 ); + } + + ++this.processedMedia; + response.progress = Math.floor( this.processedMedia / this.totalMedia * 100 ); + + this._each( response ); + + if ( this.prefixedMediaIDs.length ) { + this.processNext(); + } else if ( this.totalMedia === this.processedMedia ) { + this._done( { + globalOriginalSize: this.globalOriginalSize, + globalOptimizedSize: this.globalOptimizedSize, + globalGain: this.globalGain + } ); + } + + return this; + }; + + /** + * Stop the process. + * + * @return this + */ + w.imagify.Optimizer.prototype.stopProcess = function() { + this.files = {}; + this.prefixedMediaIDs = []; + this.currentItems = []; + + if ( this.doneEvent ) { + $( w ).off( this.doneEvent, this.processedCallback ); + } + + return this; + }; + +} )(jQuery, document, window); diff --git a/wp/wp-content/plugins/imagify/assets/js/jquery.event.move.js b/wp/wp-content/plugins/imagify/assets/js/jquery.event.move.js new file mode 100644 index 00000000..0ef0748e --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/jquery.event.move.js @@ -0,0 +1,584 @@ +// DOM.event.move +// +// 2.0.1 +// +// Stephen Band +// +// Triggers 'movestart', 'move' and 'moveend' events after +// mousemoves following a mousedown cross a distance threshold, +// similar to the native 'dragstart', 'drag' and 'dragend' events. +// Move events are throttled to animation frames. Move event objects +// have the properties: +// +// pageX: +// pageY: Page coordinates of pointer. +// startX: +// startY: Page coordinates of pointer at movestart. +// distX: +// distY: Distance the pointer has moved since movestart. +// deltaX: +// deltaY: Distance the finger has moved since last event. +// velocityX: +// velocityY: Average velocity over last few events. + + +(function(fn) { + if (typeof define === 'function' && define.amd) { + define([], fn); + } else if ((typeof module !== "undefined" && module !== null) && module.exports) { + module.exports = fn; + } else { + fn(); + } +})(function(){ + var assign = Object.assign || window.jQuery && jQuery.extend; + + // Number of pixels a pressed pointer travels before movestart + // event is fired. + var threshold = 8; + + // Shim for requestAnimationFrame, falling back to timer. See: + // see http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + var requestFrame = (function(){ + return ( + window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(fn, element){ + return window.setTimeout(function(){ + fn(); + }, 25); + } + ); + })(); + + var ignoreTags = { + textarea: true, + input: true, + select: true, + button: true + }; + + var mouseevents = { + move: 'mousemove', + cancel: 'mouseup dragstart', + end: 'mouseup' + }; + + var touchevents = { + move: 'touchmove', + cancel: 'touchend', + end: 'touchend' + }; + + var rspaces = /\s+/; + + + // DOM Events + + var eventOptions = { bubbles: true, cancelable: true }; + + var eventsSymbol = Symbol('events'); + + function createEvent(type) { + return new CustomEvent(type, eventOptions); + } + + function getEvents(node) { + return node[eventsSymbol] || (node[eventsSymbol] = {}); + } + + function on(node, types, fn, data, selector) { + types = types.split(rspaces); + + var events = getEvents(node); + var i = types.length; + var handlers, type; + + function handler(e) { fn(e, data); } + + while (i--) { + type = types[i]; + handlers = events[type] || (events[type] = []); + handlers.push([fn, handler]); + node.addEventListener(type, handler); + } + } + + function off(node, types, fn, selector) { + types = types.split(rspaces); + + var events = getEvents(node); + var i = types.length; + var type, handlers, k; + + if (!events) { return; } + + while (i--) { + type = types[i]; + handlers = events[type]; + if (!handlers) { continue; } + k = handlers.length; + while (k--) { + if (handlers[k][0] === fn) { + node.removeEventListener(type, handlers[k][1]); + handlers.splice(k, 1); + } + } + } + } + + function trigger(node, type, properties) { + // Don't cache events. It prevents you from triggering an event of a + // given type from inside the handler of another event of that type. + var event = createEvent(type); + if (properties) { assign(event, properties); } + node.dispatchEvent(event); + } + + + // Constructors + + function Timer(fn){ + var callback = fn, + active = false, + running = false; + + function trigger(time) { + if (active){ + callback(); + requestFrame(trigger); + running = true; + active = false; + } + else { + running = false; + } + } + + this.kick = function(fn) { + active = true; + if (!running) { trigger(); } + }; + + this.end = function(fn) { + var cb = callback; + + if (!fn) { return; } + + // If the timer is not running, simply call the end callback. + if (!running) { + fn(); + } + // If the timer is running, and has been kicked lately, then + // queue up the current callback and the end callback, otherwise + // just the end callback. + else { + callback = active ? + function(){ cb(); fn(); } : + fn ; + + active = true; + } + }; + } + + + // Functions + + function noop() {} + + function preventDefault(e) { + e.preventDefault(); + } + + function isIgnoreTag(e) { + return !!ignoreTags[e.target.tagName.toLowerCase()]; + } + + function isPrimaryButton(e) { + // Ignore mousedowns on any button other than the left (or primary) + // mouse button, or when a modifier key is pressed. + return (e.which === 1 && !e.ctrlKey && !e.altKey); + } + + function identifiedTouch(touchList, id) { + var i, l; + + if (touchList.identifiedTouch) { + return touchList.identifiedTouch(id); + } + + // touchList.identifiedTouch() does not exist in + // webkit yet… we must do the search ourselves... + + i = -1; + l = touchList.length; + + while (++i < l) { + if (touchList[i].identifier === id) { + return touchList[i]; + } + } + } + + function changedTouch(e, data) { + var touch = identifiedTouch(e.changedTouches, data.identifier); + + // This isn't the touch you're looking for. + if (!touch) { return; } + + // Chrome Android (at least) includes touches that have not + // changed in e.changedTouches. That's a bit annoying. Check + // that this touch has changed. + if (touch.pageX === data.pageX && touch.pageY === data.pageY) { return; } + + return touch; + } + + + // Handlers that decide when the first movestart is triggered + + function mousedown(e){ + // Ignore non-primary buttons + if (!isPrimaryButton(e)) { return; } + + // Ignore form and interactive elements + if (isIgnoreTag(e)) { return; } + + on(document, mouseevents.move, mousemove, e); + on(document, mouseevents.cancel, mouseend, e); + } + + function mousemove(e, data){ + checkThreshold(e, data, e, removeMouse); + } + + function mouseend(e, data) { + removeMouse(); + } + + function removeMouse() { + off(document, mouseevents.move, mousemove); + off(document, mouseevents.cancel, mouseend); + } + + function touchstart(e) { + // Don't get in the way of interaction with form elements + if (ignoreTags[e.target.tagName.toLowerCase()]) { return; } + + var touch = e.changedTouches[0]; + + // iOS live updates the touch objects whereas Android gives us copies. + // That means we can't trust the touchstart object to stay the same, + // so we must copy the data. This object acts as a template for + // movestart, move and moveend event objects. + var data = { + target: touch.target, + pageX: touch.pageX, + pageY: touch.pageY, + identifier: touch.identifier, + + // The only way to make handlers individually unbindable is by + // making them unique. + touchmove: function(e, data) { touchmove(e, data); }, + touchend: function(e, data) { touchend(e, data); } + }; + + on(document, touchevents.move, data.touchmove, data); + on(document, touchevents.cancel, data.touchend, data); + } + + function touchmove(e, data) { + var touch = changedTouch(e, data); + if (!touch) { return; } + checkThreshold(e, data, touch, removeTouch); + } + + function touchend(e, data) { + var touch = identifiedTouch(e.changedTouches, data.identifier); + if (!touch) { return; } + removeTouch(data); + } + + function removeTouch(data) { + off(document, touchevents.move, data.touchmove); + off(document, touchevents.cancel, data.touchend); + } + + function checkThreshold(e, data, touch, fn) { + var distX = touch.pageX - data.pageX; + var distY = touch.pageY - data.pageY; + + // Do nothing if the threshold has not been crossed. + if ((distX * distX) + (distY * distY) < (threshold * threshold)) { return; } + + triggerStart(e, data, touch, distX, distY, fn); + } + + function triggerStart(e, data, touch, distX, distY, fn) { + var touches = e.targetTouches; + var time = e.timeStamp - data.timeStamp; + + // Create a movestart object with some special properties that + // are passed only to the movestart handlers. + var template = { + altKey: e.altKey, + ctrlKey: e.ctrlKey, + shiftKey: e.shiftKey, + startX: data.pageX, + startY: data.pageY, + distX: distX, + distY: distY, + deltaX: distX, + deltaY: distY, + pageX: touch.pageX, + pageY: touch.pageY, + velocityX: distX / time, + velocityY: distY / time, + identifier: data.identifier, + targetTouches: touches, + finger: touches ? touches.length : 1, + enableMove: function() { + this.moveEnabled = true; + this.enableMove = noop; + e.preventDefault(); + } + }; + + // Trigger the movestart event. + trigger(data.target, 'movestart', template); + + // Unbind handlers that tracked the touch or mouse up till now. + fn(data); + } + + + // Handlers that control what happens following a movestart + + function activeMousemove(e, data) { + var timer = data.timer; + + data.touch = e; + data.timeStamp = e.timeStamp; + timer.kick(); + } + + function activeMouseend(e, data) { + var target = data.target; + var event = data.event; + var timer = data.timer; + + removeActiveMouse(); + + endEvent(target, event, timer, function() { + // Unbind the click suppressor, waiting until after mouseup + // has been handled. + setTimeout(function(){ + off(target, 'click', preventDefault); + }, 0); + }); + } + + function removeActiveMouse() { + off(document, mouseevents.move, activeMousemove); + off(document, mouseevents.end, activeMouseend); + } + + function activeTouchmove(e, data) { + var event = data.event; + var timer = data.timer; + var touch = changedTouch(e, event); + + if (!touch) { return; } + + // Stop the interface from gesturing + e.preventDefault(); + + event.targetTouches = e.targetTouches; + data.touch = touch; + data.timeStamp = e.timeStamp; + + timer.kick(); + } + + function activeTouchend(e, data) { + var target = data.target; + var event = data.event; + var timer = data.timer; + var touch = identifiedTouch(e.changedTouches, event.identifier); + + // This isn't the touch you're looking for. + if (!touch) { return; } + + removeActiveTouch(data); + endEvent(target, event, timer); + } + + function removeActiveTouch(data) { + off(document, touchevents.move, data.activeTouchmove); + off(document, touchevents.end, data.activeTouchend); + } + + + // Logic for triggering move and moveend events + + function updateEvent(event, touch, timeStamp) { + var time = timeStamp - event.timeStamp; + + event.distX = touch.pageX - event.startX; + event.distY = touch.pageY - event.startY; + event.deltaX = touch.pageX - event.pageX; + event.deltaY = touch.pageY - event.pageY; + + // Average the velocity of the last few events using a decay + // curve to even out spurious jumps in values. + event.velocityX = 0.3 * event.velocityX + 0.7 * event.deltaX / time; + event.velocityY = 0.3 * event.velocityY + 0.7 * event.deltaY / time; + event.pageX = touch.pageX; + event.pageY = touch.pageY; + } + + function endEvent(target, event, timer, fn) { + timer.end(function(){ + trigger(target, 'moveend', event); + return fn && fn(); + }); + } + + + // Set up the DOM + + function movestart(e) { + if (e.defaultPrevented) { return; } + if (!e.moveEnabled) { return; } + + var event = { + startX: e.startX, + startY: e.startY, + pageX: e.pageX, + pageY: e.pageY, + distX: e.distX, + distY: e.distY, + deltaX: e.deltaX, + deltaY: e.deltaY, + velocityX: e.velocityX, + velocityY: e.velocityY, + identifier: e.identifier, + targetTouches: e.targetTouches, + finger: e.finger + }; + + var data = { + target: e.target, + event: event, + timer: new Timer(update), + touch: undefined, + timeStamp: e.timeStamp + }; + + function update(time) { + updateEvent(event, data.touch, data.timeStamp); + trigger(data.target, 'move', event); + } + + if (e.identifier === undefined) { + // We're dealing with a mouse event. + // Stop clicks from propagating during a move + on(e.target, 'click', preventDefault); + on(document, mouseevents.move, activeMousemove, data); + on(document, mouseevents.end, activeMouseend, data); + } + else { + // In order to unbind correct handlers they have to be unique + data.activeTouchmove = function(e, data) { activeTouchmove(e, data); }; + data.activeTouchend = function(e, data) { activeTouchend(e, data); }; + + // We're dealing with a touch. + on(document, touchevents.move, data.activeTouchmove, data); + on(document, touchevents.end, data.activeTouchend, data); + } + } + + on(document, 'mousedown', mousedown); + on(document, 'touchstart', touchstart); + on(document, 'movestart', movestart); + + + // jQuery special events + // + // jQuery event objects are copies of DOM event objects. They need + // a little help copying the move properties across. + + if (!window.jQuery) { return; } + + var properties = ("startX startY pageX pageY distX distY deltaX deltaY velocityX velocityY").split(' '); + + function enableMove1(e) { e.enableMove(); } + function enableMove2(e) { e.enableMove(); } + function enableMove3(e) { e.enableMove(); } + + function add(handleObj) { + var handler = handleObj.handler; + + handleObj.handler = function(e) { + // Copy move properties across from originalEvent + var i = properties.length; + var property; + + while(i--) { + property = properties[i]; + e[property] = e.originalEvent[property]; + } + + handler.apply(this, arguments); + }; + } + + jQuery.event.special.movestart = { + setup: function() { + // Movestart must be enabled to allow other move events + on(this, 'movestart', enableMove1); + + // Do listen to DOM events + return false; + }, + + teardown: function() { + off(this, 'movestart', enableMove1); + return false; + }, + + add: add + }; + + jQuery.event.special.move = { + setup: function() { + on(this, 'movestart', enableMove2); + return false; + }, + + teardown: function() { + off(this, 'movestart', enableMove2); + return false; + }, + + add: add + }; + + jQuery.event.special.moveend = { + setup: function() { + on(this, 'movestart', enableMove3); + return false; + }, + + teardown: function() { + off(this, 'movestart', enableMove3); + return false; + }, + + add: add + }; +}); diff --git a/wp/wp-content/plugins/imagify/assets/js/jquery.event.move.min.js b/wp/wp-content/plugins/imagify/assets/js/jquery.event.move.min.js new file mode 100644 index 00000000..ed1888f4 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/jquery.event.move.min.js @@ -0,0 +1 @@ +!function(e){"function"==typeof define&&define.amd?define([],e):"undefined"!=typeof module&&null!==module&&module.exports?module.exports=e:e()}(function(){var o,i=Object.assign||window.jQuery&&jQuery.extend,d=8,a=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e,t){return window.setTimeout(function(){e()},25)},n={textarea:!0,input:!0,select:!0,button:!0},c={move:"mousemove",cancel:"mouseup dragstart",end:"mouseup"},u={move:"touchmove",cancel:"touchend",end:"touchend"},r=/\s+/,m={bubbles:!0,cancelable:!0},t=Symbol("events");function v(e){return e[t]||(e[t]={})}function s(e,t,n,i){t=t.split(r);var o,a=v(e),c=t.length;function u(e){n(e,i)}for(;c--;)(a[o=t[c]]||(a[o]=[])).push([n,u]),e.addEventListener(o,u)}function f(e,t,n){t=t.split(r);var i,o,a,c=v(e),u=t.length;if(c)for(;u--;)if(o=c[i=t[u]])for(a=o.length;a--;)o[a][0]===n&&(e.removeEventListener(i,o[a][1]),o.splice(a,1))}function l(e,t,n){t=new CustomEvent(t,m);n&&i(t,n),e.dispatchEvent(t)}function g(e){var n=e,i=!1,o=!1;function t(e){i?(n(),a(t),i=!(o=!0)):o=!1}this.kick=function(e){i=!0,o||t()},this.end=function(e){var t=n;e&&(o?(n=i?function(){t(),e()}:e,i=!0):e())}}function p(){}function h(e){e.preventDefault()}function X(e,t){var n,i;if(e.identifiedTouch)return e.identifiedTouch(t);for(n=-1,i=e.length;++n' ); + + $container.children( '.twentytwenty-overlay, .twentytwenty-handle' ).remove(); + $container.append( '
' ); + $container.append( '
' ); + + $slider = $container.find( '.twentytwenty-handle' ); + + $slider.append( '' ); + $slider.append( '' ); + $container.addClass( 'twentytwenty-container' ); + $beforeImg.addClass( 'twentytwenty-before' ); + $afterImg.addClass( 'twentytwenty-after' ); + + $overlay = $container.find( '.twentytwenty-overlay' ); + + $overlay.append( '
' + options.labelBefore + '
' ); + $overlay.append( '
' + options.labelAfter + '
' ); + + $( w ).on( 'resize.twentytwenty', function() { + adjustSlider( sliderPct ); + } ); + + $slider.on( 'movestart', function( e ) { + if ( 'vertical' !== sliderOrientation && ( ( e.distX > e.distY && e.distX < -e.distY ) || ( e.distX < e.distY && e.distX > -e.distY ) ) ) { + e.preventDefault(); + } else if ( 'vertical' === sliderOrientation && ( ( e.distX < e.distY && e.distX < -e.distY ) || ( e.distX > e.distY && e.distX > -e.distY ) ) ) { + e.preventDefault(); + } + + $container.addClass( 'active' ); + + offsetX = $container.offset().left; + offsetY = $container.offset().top; + imgWidth = $beforeImg.width(); + imgHeight = $beforeImg.height(); + } ); + + $slider.on( 'moveend', function() { + $container.removeClass( 'active' ); + } ); + + $slider.on( 'move', function( e ) { + if ( $container.hasClass('active') ) { + sliderPct = 'vertical' === sliderOrientation ? ( e.pageY - offsetY ) / imgHeight : ( e.pageX - offsetX ) / imgWidth; + + if ( sliderPct < 0 ) { + sliderPct = 0; + } else if ( sliderPct > 1 ) { + sliderPct = 1; + } + + adjustSlider( sliderPct ); + } + } ); + + $container.find( 'img' ).on( 'mousedown', function( e ) { + e.preventDefault(); + } ); + + $( w ).trigger( 'resize.twentytwenty' ); + } ); + }; + +} )(jQuery, document, window); + +/** + * Twentytwenty Imagify Init + */ +(function($, d, w, undefined) { // eslint-disable-line no-unused-vars, no-shadow, no-shadow-restricted-names + + /* + * Mini chart + * + * @param {element} canvas + */ + var drawMeAChart = function ( canvas ) { + canvas.each( function() { + var value = parseInt( $( this ).closest( '.imagify-chart' ).next( '.imagify-chart-value' ).text(), 10 ); + + new w.imagify.Chart( this, { // eslint-disable-line no-new + type: 'doughnut', + data: { + datasets: [{ + data: [ value, 100 - value ], + backgroundColor: [ '#00B3D3', '#D8D8D8' ], + borderColor: '#2A2E3C', + borderWidth: 1 + }] + }, + options: { + legend: { + display: false + }, + events: [], + animation: { + easing: 'easeOutBounce' + }, + tooltips: { + enabled: false + }, + responsive: false, + cutoutPercentage: 60 + } + } ); + } ); + }, + /** + * Dynamic modal + * + * @param {object} Parameters to build modal with datas + */ + imagifyTwentyModal = function( options ) { + var defaults = { + width: 0, //px + height: 0, //px + originalUrl: '', //url + optimizedUrl: '', //url + originalSize: 0, //mb + optimizedSize: 0, // mb + saving: 0, //percent + modalAppendTo: $( 'body' ), // jQuery element + trigger: $( '[data-target="imagify-visual-comparison"]' ), // jQuery element (button, link) with data-target="modalId" + modalId: 'imagify-visual-comparison', // should be dynamic if multiple modals + openModal: false + }, + settings = $.extend( {}, defaults, options ), + modalHtml; + + if ( 0 === settings.width || 0 === settings.height || '' === settings.originalUrl || '' === settings.optimizedUrl || 0 === settings.originalSize || 0 === settings.optimizedSize || 0 === settings.saving ) { + return 'error'; + } + + // create modal box + modalHtml = ''; + + settings.modalAppendTo.append( modalHtml ); + + settings.trigger.on( 'click.imagify', function( e ) { + var $modal = $( $( this ).data( 'target' ) ), + imgsLoaded = 0, + $tt, checkLoad; + + e.preventDefault(); + + if ( settings.openModal ) { + w.imagify.openModal( $( this ) ); + } + + $modal.find( '.imagify-modal-content' ).css( { + 'width': ( $( w ).outerWidth() * 0.85 ) + 'px', + 'max-width': settings.width + } ); + + // Load before img. + $modal.find( '.imagify-img-before' ).on( 'load', function() { + imgsLoaded++; + } ).attr( 'src', settings.originalUrl ); + + // Load after img. + $modal.find( '.imagify-img-after' ).on( 'load', function() { + imgsLoaded++; + } ).attr( 'src', settings.optimizedUrl + ( settings.optimizedUrl.indexOf( '?' ) > 0 ? '&' : '?' ) + 'v=' + Date.now() ); + + $tt = $modal.find( '.twentytwenty-container' ); + checkLoad = setInterval( function() { + if ( 2 !== imgsLoaded ) { + return; + } + + $tt.twentytwenty( { + handlePosition: 0.3, + orientation: 'horizontal', + labelBefore: imagifyTTT.labels.originalL, + labelAfter: imagifyTTT.labels.optimizedL + }, function() { + var windowH = $( w ).height(), + ttH = $modal.find( '.twentytwenty-container' ).height(), + ttTop = $modal.find( '.twentytwenty-wrapper' ).position().top, + $handle, $labels, $datas, datasH, handlePos, labelsPos; + + if ( ! $tt.closest( '.imagify-modal-content' ).hasClass( 'loaded' ) ) { + $tt.closest( '.imagify-modal-content' ).removeClass( 'loading' ).addClass( 'loaded' ); + drawMeAChart( $modal.find( '.imagify-level-optimized .imagify-chart canvas' ) ); + } + + // Check if image height is to big. + if ( windowH < ttH && ! $modal.hasClass( 'modal-is-too-high' ) ) { + $modal.addClass( 'modal-is-too-high' ); + + $handle = $modal.find( '.twentytwenty-handle' ); + $labels = $modal.find( '.twentytwenty-label-content' ); + $datas = $modal.find( '.imagify-comparison-levels' ); + datasH = $datas.outerHeight(); + handlePos = ( windowH - ttTop - $handle.height() ) / 2; + labelsPos = ( windowH - ttTop * 3 - datasH ); + + $handle.css( { + top: handlePos + } ); + $labels.css( { + top: labelsPos, + bottom: 'auto' + } ); + $modal.find( '.twentytwenty-wrapper' ).css( { + paddingBottom: datasH + } ); + $modal.find( '.imagify-modal-content' ).on( 'scroll.imagify', function() { + var scrollTop = $( this ).scrollTop(); + + $handle.css( { + top: handlePos + scrollTop + } ); + $labels.css( { + top: labelsPos + scrollTop + } ); + $datas.css( { + bottom: -scrollTop + } ); + } ); + } + } ); + + clearInterval( checkLoad ); + checkLoad = null; + return 'done'; + }, 75 ); + } ); + }; // imagifyTwentyModal( options ); + + + /** + * The complexe visual comparison + */ + $( '.imagify-visual-comparison-btn' ).on( 'click', function() { + var $tt, imgsLoaded, loader, + labelOriginal, labelNormal, labelAggressive, labelUltra, + originalLabel, originalAlt, originalSrc, originalDim, + normalAlt, normalSrc, normalDim, + aggressiveAlt, aggressiveSrc, aggressiveDim, + ultraLabel, ultraAlt, ultraSrc, ultraDim, + ttBeforeButtons, ttAfterButtons, image50, twentyMe; + + if ( $( '.twentytwenty-wrapper' ).length === 1 ) { + return; + } + + $( $( this ).data( 'target' ) ).find( '.imagify-modal-content' ).css( 'width', ( $( w ).outerWidth() * 0.95 ) + 'px' ); + + if ( $( '.twentytwenty-container' ).length > 0 && $( w ).outerWidth() <= 800 ) { + return; + } + + $tt = $( '.twentytwenty-container' ); + imgsLoaded = 0; + loader = $tt.data( 'loader' ); + labelOriginal = $tt.data( 'label-original' ); + labelNormal = $tt.data( 'label-normal' ); + labelAggressive = $tt.data( 'label-aggressive' ); + labelUltra = $tt.data( 'label-ultra' ); + + originalLabel = $tt.data( 'original-label' ).replace( /\*\*/, '' ).replace( /\*\*/, '' ); + originalAlt = $tt.data( 'original-alt' ); + originalSrc = $tt.data( 'original-img' ); + originalDim = $tt.data( 'original-dim' ).split( 'x' ); + + normalAlt = $tt.data( 'normal-alt' ); + normalSrc = $tt.data( 'normal-img' ); + normalDim = $tt.data( 'normal-dim' ).split( 'x' ); + + aggressiveAlt = $tt.data( 'aggressive-alt' ); + aggressiveSrc = $tt.data( 'aggressive-img' ); + aggressiveDim = $tt.data( 'aggressive-dim' ).split( 'x' ); + + ultraLabel = $tt.data( 'ultra-label' ).replace( /\*\*/, '' ).replace( /\*\*/, '' ); + ultraAlt = $tt.data( 'ultra-alt' ); + ultraSrc = $tt.data( 'ultra-img' ); + ultraDim = $tt.data( 'ultra-dim' ).split( 'x' ); + + ttBeforeButtons = ''; + /* eslint-disable indent */ + ttBeforeButtons += ''; + ttBeforeButtons += ''; + ttBeforeButtons += ''; + /* eslint-enable indent */ + ttBeforeButtons += ''; + ttAfterButtons = ''; + /* eslint-disable indent */ + ttAfterButtons += ''; + ttAfterButtons += ''; + ttAfterButtons += ''; + /* eslint-enable indent */ + ttAfterButtons += ''; + + // Loader. + $tt.before( 'Loading…' ); + + // Should be more locally integrated... + $( '.twentytwenty-left-buttons' ).append( ttBeforeButtons ); + $( '.twentytwenty-right-buttons' ).append( ttAfterButtons ); + + image50 = '' + originalAlt + ''; + image50 += '' + normalAlt + ''; + image50 += '' + aggressiveAlt + ''; + image50 += '' + ultraAlt + ''; + // Add switchers button only if needed. + // Should be more locally integrated... + image50 += $( '.twentytwenty-left-buttons' ).lenght ? ttBeforeButtons + ttAfterButtons : ''; + + // Add images to 50/50 area. + $tt.closest( '.imagify-modal-content' ).addClass( 'loading' ).find( '.twentytwenty-container' ).append( image50 ); + + // Load image original. + $( '.img-original' ).on( 'load', function() { + imgsLoaded++; + } ).attr( 'src', originalSrc ); + + // Load image normal. + $( '.img-normal' ).on( 'load', function() { + imgsLoaded++; + } ).attr( 'src', normalSrc ); + + // Load image aggressive. + $( '.img-aggressive' ).on( 'load', function() { + imgsLoaded++; + } ).attr( 'src', aggressiveSrc ); + + // Load image ultra. + $( '.img-ultra' ).on( 'load', function() { + imgsLoaded++; + } ).attr( 'src', ultraSrc ); + + twentyMe = setInterval( function() { + if ( 4 !== imgsLoaded ) { + return; + } + + $tt.twentytwenty({ + handlePosition: 0.6, + orientation: 'horizontal', + labelBefore: originalLabel, + labelAfter: ultraLabel + }, function() { + // Fires on initialisation & each time the handle is moving. + if ( ! $tt.closest( '.imagify-modal-content' ).hasClass( 'loaded' ) ) { + $tt.closest( '.imagify-modal-content' ).removeClass( 'loading' ).addClass( 'loaded' ); + drawMeAChart( $( '.imagify-level-ultra .imagify-chart canvas' ) ); + } + } ); + + clearInterval( twentyMe ); + twentyMe = null; + }, 75); + + // On click on button choices. + $( '.imagify-comparison-title' ).on( 'click', '.twentytwenty-duo-buttons button:not(.selected)', function( e ) { + var $this = $( this ), + $container = $this.closest( '.imagify-comparison-title' ).nextAll( '.twentytwenty-wrapper' ).find( '.twentytwenty-container' ), + side = $this.closest( '.twentytwenty-duo-buttons' ).hasClass( 'twentytwenty-duo-left' ) ? 'left' : 'right', + $otherSide = 'left' === side ? $this.closest( '.imagify-comparison-title' ).find( '.twentytwenty-duo-right' ) : $this.closest( '.imagify-comparison-title' ).find( '.twentytwenty-duo-left' ), + $duo = $this.closest( '.twentytwenty-duo-buttons' ).find( 'button' ), + $imgBefore = $container.find( '.twentytwenty-before' ), + $imgAfter = $container.find( '.twentytwenty-after' ), + image = $this.data( 'img' ), + clipStyles; + + e.stopPropagation(); + e.preventDefault(); + + // Button coloration. + $duo.removeClass( 'selected' ); + $this.addClass( 'selected' ); + + // Other side action (to not compare same images). + if ( $otherSide.find( '.selected' ).data( 'img' ) === image ) { + $otherSide.find( 'button:not(.selected)' ).eq( 0 ).trigger( 'click' ); + } + + // Left buttons. + if ( 'left' === side ) { + clipStyles = $imgBefore.css( 'clip' ); + $imgBefore.attr( 'style', '' ); + $imgBefore.removeClass( 'twentytwenty-before' ); + $container.find( '.img-' + image ).addClass( 'twentytwenty-before' ).css( 'clip', clipStyles ); + $( '.twentytwenty-before-label .twentytwenty-label-content' ).text( $container.data( image + '-label' ) ); + $( '.imagify-c-level.go-left' ).attr( 'aria-hidden', 'true' ).removeClass( 'go-left go-right' ); + $( '.imagify-level-' + image ).attr( 'aria-hidden', 'false' ).addClass( 'go-left' ); + } + + // Right buttons. + if ( 'right' === side ) { + $imgAfter.removeClass( 'twentytwenty-after' ); + $container.find( '.img-' + image ).addClass( 'twentytwenty-after' ); + $( '.twentytwenty-after-label .twentytwenty-label-content' ).text( $container.data( image + '-label' ) ); + $( '.imagify-c-level.go-right' ).attr( 'aria-hidden', 'true' ).removeClass( 'go-left go-right' ); + $( '.imagify-level-' + image ).attr( 'aria-hidden', 'false' ).addClass( 'go-right' ); + } + + drawMeAChart( $( '.imagify-level-' + image + ' .imagify-chart canvas' ) ); + } ); + } ); + + + /** + * Imagify comparison inside Media post edition. + */ + if ( imagifyTTT.imageWidth && $( '.post-php .wp_attachment_image .thumbnail' ).length > 0 ) { + + var $oriParent = $( '.post-php .wp_attachment_image' ), + oriSource = { src: $( '#imagify-full-original' ).val(), size: $( '#imagify-full-original-size' ).val() }, + $optimizeBtn = $( '#misc-publishing-actions' ).find( '.misc-pub-imagify .button-primary' ), + filesize, saving; + + imagifyTTT.widthLimit = parseInt( imagifyTTT.widthLimit, 10 ); + + // If shown image > 360, use twentytwenty. + if ( imagifyTTT.imageWidth > imagifyTTT.widthLimit && oriSource.src ) { + + filesize = $( '#imagify-full-optimized-size' ).val(); + saving = $( '.imagify-data-item .imagify-chart-value' ).text(); + + // Create button to trigger. + $( '[id^="imgedit-open-btn-"]' ).before( '' ); + + // Modal and trigger event creation. + imagifyTwentyModal( { + width: parseInt( imagifyTTT.imageWidth, 10 ), + height: parseInt( imagifyTTT.imageHeight, 10 ), + originalUrl: oriSource.src, + optimizedUrl: imagifyTTT.imageSrc, + originalSize: oriSource.size, + optimizedSize: filesize, + saving: saving, + modalAppendTo: $oriParent, + trigger: $( '#imagify-start-comparison' ), + modalId: 'imagify-visual-comparison' + } ); + } + // Else put images next to next. + else if ( imagifyTTT.imageWidth < imagifyTTT.widthLimit && oriSource.src ) { + // TODO + } + // If image has no backup. + else if ( $( '#imagify-full-original' ).length > 0 && '' === oriSource.src ) { + // do nothing ? + } + // In case image is not optimized. + else { + // If is not in optimizing process, propose the Optimize button trigger. + if ( $( '#misc-publishing-actions' ).find( '.misc-pub-imagify .button-primary' ).length === 1 ) { + $( '[id^="imgedit-open-btn-"]' ).before( '
' + imagifyTTT.labels.optimize + '' ); + + $( '#imagify-optimize-trigger' ).on( 'click', function() { + $( this ).prev( '.spinner' ).removeClass( 'imagify-hidden' ).addClass( 'is-active' ); + } ); + } + } + + } + + /** + * Images comparison in attachments list page (upload.php). + */ + if ( $( '.upload-php .imagify-compare-images' ).length > 0 ) { + + $( '.imagify-compare-images' ).each( function() { + var $this = $( this ), + id = $this.data( 'id' ), + $datas = $this.closest( '#post-' + id ).find( '.column-imagify_optimized_file' ); + + // Modal and trigger event creation. + imagifyTwentyModal( { + width: parseInt( $this.data( 'full-width' ), 10 ), + height: parseInt( $this.data( 'full-height' ), 10 ), + originalUrl: $this.data( 'backup-src' ), + optimizedUrl: $this.data( 'full-src' ), + originalSize: $datas.find( '.original' ).text(), + optimizedSize: $datas.find( '#imagify_data_sum .big' ).text(), + saving: $datas.find( '.imagify-chart-value' ).text(), + modalAppendTo: $this.closest( '.column-primary' ), + trigger: $this, + modalId: 'imagify-comparison-' + id + } ); + } ); + } + + /** + * Images Comparison in Grid View modal. + */ + if ( $( '.upload-php' ).length > 0 ) { + + var getVar = function( param ) { + var vars = {}; + + w.location.href.replace( + /[?&]+([^=&]+)=?([^&]*)?/gi, + function( m, key, value ) { + vars[ key ] = undefined !== value ? value : ''; + } + ); + + if ( param ) { + return vars[ param ] ? vars[ param ] : null; + } + return vars; + }, + imagifyContentInModal = function() { + var tempTimer = setInterval( function() { + var $datas, originalSrc, $actions; + + if ( ! $( '.media-modal .imagify-datas-details' ).length ) { + return; + } + + originalSrc = $( '#imagify-original-src' ).val(); + + if ( originalSrc ) { + // Trigger creation. + $actions = $( '.media-frame-content .attachment-actions' ); + + $actions.find( '#imagify-media-frame-comparison-btn' ).remove(); + $actions.prepend( '' ); + + // Get datas. + $datas = $( '.media-frame-content .compat-field-imagify' ); + + // Modal and trigger event creation. + imagifyTwentyModal( { + width: parseInt( $( '#imagify-full-width' ).val(), 10 ), + height: parseInt( $( '#imagify-full-height' ).val(), 10 ), + originalUrl: originalSrc, + optimizedUrl: $( '#imagify-full-src' ).val(), + originalSize: $( '#imagify-original-size' ).val(), + optimizedSize: $datas.find( '#imagify_data_sum .big' ).text(), + saving: $datas.find( '.imagify-chart-value' ).text(), + modalAppendTo: $( '.media-frame-content .thumbnail-image' ), + trigger: $( '#imagify-media-frame-comparison-btn' ), + modalId: 'imagify-comparison-modal', + openModal: true + } ); + } + + clearInterval( tempTimer ); + tempTimer = null; + }, 20 ); + }; + + // If attachment is clicked, or the "Previous" and "Next" buttons, build the modal inside the modal. + $( '.upload-php' ).on( 'click', '.media-frame.mode-grid .attachment, .edit-media-header .left, .edit-media-header .right', function() { + imagifyContentInModal(); + } ); + + // If attachment is mentionned in URL, build the modal inside the modal. + if ( getVar( 'item' ) ) { + imagifyContentInModal(); + } + } + + /** + * Images comparison in custom folders list page. + */ + if ( $( '#imagify-files-list-form' ).length > 0 ) { + + var buildComparisonModal = function( $buttons ) { + $buttons.each( function() { + var $this = $( this ), + id = $this.data( 'id' ), + $datas = $this.closest( 'tr' ).find( '.column-optimization .imagify-data-item' ); + + $( '#imagify-comparison-' + id ).remove(); + + // Modal and trigger event creation. + imagifyTwentyModal( { + width: parseInt( $this.data( 'full-width' ), 10 ), + height: parseInt( $this.data( 'full-height' ), 10 ), + originalUrl: $this.data( 'backup-src' ), + optimizedUrl: $this.data( 'full-src' ), + originalSize: $datas.find( '.original' ).text(), + optimizedSize: $datas.find( '.optimized' ).text(), + saving: $datas.find( '.imagify-chart-value' ).text(), + modalAppendTo: $this.closest( '.column-primary' ), + trigger: $this, + modalId: 'imagify-comparison-' + id + } ); + } ); + }; + + /** + * Update the comparison tool window when a file row is updated via ajax, and the ones already printed. + */ + $( w ).on( 'comparisonprinted.imagify', function( e, id ) { + var $buttons; + + id = id || 0; + + if ( id ) { + $buttons = $( '#imagify-files-list-form' ).find( '.imagify-compare-images[data-id="' + id + '"]' ); + } else { + $buttons = $( '#imagify-files-list-form' ).find( '.imagify-compare-images' ); + } + + if ( $buttons.length ) { + buildComparisonModal( $buttons ); + } + } ) + .trigger( 'comparisonprinted.imagify' ); + } + +} )(jQuery, document, window); diff --git a/wp/wp-content/plugins/imagify/assets/js/jquery.twentytwenty.min.js b/wp/wp-content/plugins/imagify/assets/js/jquery.twentytwenty.min.js new file mode 100644 index 00000000..e8982a11 --- /dev/null +++ b/wp/wp-content/plugins/imagify/assets/js/jquery.twentytwenty.min.js @@ -0,0 +1 @@ +!function(u,w){u.fn.twentytwenty=function(p,h){return p=u.extend({handlePosition:.5,orientation:"horizontal",labelBefore:"Before",labelAfter:"After"},p),this.each(function(){function i(t){t=f(t),"vertical"===l?a.css("top",t.ch):a.css("left",t.cw),y(t)}var a,e=p.handlePosition,n=u(this),l=p.orientation,t="vertical"===l?"down":"left",o="vertical"===l?"up":"right",s=n.find("img:first"),r=n.find("img:last"),d=0,m=0,g=0,c=0,f=function(t){var i=parseInt(s.width(),10),a=parseInt(s.height(),10);return i&&a||(i=parseInt(s.attr("width"),10),a=parseInt(s.attr("height"),10)),{w:i+"px",h:a+"px",cw:t*i+"px",ch:t*a+"px"}},y=function(t){var i=n.find(".twentytwenty-before");"vertical"===l?i.css("clip","rect(0,"+t.w+","+t.ch+",0)"):i.css("clip","rect(0,"+t.cw+","+t.h+",0)"),n.css("height",t.h),"function"==typeof h&&h()};n.parent(".twentytwenty-wrapper").length&&n.unwrap(),n.wrap('
'),n.children(".twentytwenty-overlay, .twentytwenty-handle").remove(),n.append('
'),n.append('
'),(a=n.find(".twentytwenty-handle")).append(''),a.append(''),n.addClass("twentytwenty-container"),s.addClass("twentytwenty-before"),r.addClass("twentytwenty-after"),(t=n.find(".twentytwenty-overlay")).append('
'+p.labelBefore+"
"),t.append('
'+p.labelAfter+"
"),u(w).on("resize.twentytwenty",function(){i(e)}),a.on("movestart",function(t){("vertical"!==l&&(t.distX>t.distY&&t.distX<-t.distY||t.distX-t.distY)||"vertical"===l&&(t.distXt.distY&&t.distX>-t.distY))&&t.preventDefault(),n.addClass("active"),d=n.offset().left,m=n.offset().top,g=s.width(),c=s.height()}),a.on("moveend",function(){n.removeClass("active")}),a.on("move",function(t){n.hasClass("active")&&((e="vertical"===l?(t.pageY-m)/c:(t.pageX-d)/g)<0?e=0:1
+
+ +
+

+

+

', + '' + ); + ?> +

+
+print_template( 'notice-footer', [ 'dismissible' => 'bulk-optimization-complete' ] ); ?> diff --git a/wp/wp-content/plugins/imagify/views/notice-bulk-optimization-running.php b/wp/wp-content/plugins/imagify/views/notice-bulk-optimization-running.php new file mode 100644 index 00000000..a7736550 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-bulk-optimization-running.php @@ -0,0 +1,19 @@ + + +
+
+

+ ', + '', + '', + '' + ); + ?> +

+print_template( 'notice-footer', [ 'dismissible' => 'bulk-optimization-complete' ] ); ?> diff --git a/wp/wp-content/plugins/imagify/views/notice-footer.php b/wp/wp-content/plugins/imagify/views/notice-footer.php new file mode 100644 index 00000000..6b079aba --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-footer.php @@ -0,0 +1,8 @@ + +
+ + + +
diff --git a/wp/wp-content/plugins/imagify/views/notice-grid-view.php b/wp/wp-content/plugins/imagify/views/notice-grid-view.php new file mode 100644 index 00000000..9c5dc938 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-grid-view.php @@ -0,0 +1,13 @@ +print_template( 'notice-header', array( + 'title' => __( 'You\'re missing out!', 'imagify' ), +) ); +?> +

+

+print_template( 'notice-footer', array( + 'dismissible' => 'grid-view', +) ); diff --git a/wp/wp-content/plugins/imagify/views/notice-header.php b/wp/wp-content/plugins/imagify/views/notice-header.php new file mode 100644 index 00000000..f9f170d5 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-header.php @@ -0,0 +1,12 @@ + +
+
+ +
+ +

+ diff --git a/wp/wp-content/plugins/imagify/views/notice-http-block-external.php b/wp/wp-content/plugins/imagify/views/notice-http-block-external.php new file mode 100644 index 00000000..82774987 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-http-block-external.php @@ -0,0 +1,22 @@ +print_template( 'notice-header', array( + 'title' => __( 'The external HTTP requests are blocked!', 'imagify' ), + 'classes' => array( 'error' ), +) ); +?> +

+ WP_HTTP_BLOCK_EXTERNAL constant in the wp-config.php to block all external HTTP requests.', 'imagify' ); ?> +

+

+ wp-config.php file so that it works correctly.', 'imagify' ); ?>
+ +

+

+ +

+print_template( 'notice-footer', array( + 'dismissible' => 'http-block-external', +) ); diff --git a/wp/wp-content/plugins/imagify/views/notice-plugins-to-deactivate.php b/wp/wp-content/plugins/imagify/views/notice-plugins-to-deactivate.php new file mode 100644 index 00000000..67ab8e06 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-plugins-to-deactivate.php @@ -0,0 +1,22 @@ +print_template( 'notice-header', array( + 'classes' => array( 'error' ), +) ); +?> +

+ + +print_template( 'notice-footer' ); diff --git a/wp/wp-content/plugins/imagify/views/notice-rating.php b/wp/wp-content/plugins/imagify/views/notice-rating.php new file mode 100644 index 00000000..9f13d707 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-rating.php @@ -0,0 +1,36 @@ +print_template( 'notice-header', array( + 'classes' => array( 'updated' ), +) ); +?> +

+ ', + '', + number_format_i18n( $data ) + ); + ?> +

+

+ ', + '
', + '', + '' + ); + ?> +
+ ☆☆☆☆☆ +

+print_template( 'notice-footer', array( + 'dismissible' => 'rating', +) ); diff --git a/wp/wp-content/plugins/imagify/views/notice-temporary.php b/wp/wp-content/plugins/imagify/views/notice-temporary.php new file mode 100644 index 00000000..ff128a98 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-temporary.php @@ -0,0 +1,22 @@ + $type_notices ) { + ?> +
+ +

[] ] ); ?>

+ +
+ +
+
+ + + + + +
+
+
+
+ +
+

+

+

+ + +

+
+
+
+ +
+

+

+ ', + '' + ); + ?> +

+

+ + +

+
+
+
+ +
+

+

+

+
+
+
+
+
diff --git a/wp/wp-content/plugins/imagify/views/notice-wp-rocket.php b/wp/wp-content/plugins/imagify/views/notice-wp-rocket.php new file mode 100644 index 00000000..661c1165 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-wp-rocket.php @@ -0,0 +1,21 @@ + +
+ + + +

+ +

+

+ +

+
diff --git a/wp/wp-content/plugins/imagify/views/notice-wrong-api-key.php b/wp/wp-content/plugins/imagify/views/notice-wrong-api-key.php new file mode 100644 index 00000000..c65ab5d1 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/notice-wrong-api-key.php @@ -0,0 +1,24 @@ +print_template( 'notice-header', array( + 'title' => __( 'Your API key isn\'t valid!', 'imagify' ), + 'classes' => array( 'error' ), +) ); +?> +

+ + ', + '', + '' + ); + ?> +

+print_template( 'notice-footer', array( + 'dismissible' => 'wrong-api-key', +) ); diff --git a/wp/wp-content/plugins/imagify/views/page-bulk.php b/wp/wp-content/plugins/imagify/views/page-bulk.php new file mode 100644 index 00000000..a6657ace --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/page-bulk.php @@ -0,0 +1,190 @@ + +
+ + print_template( 'part-bulk-optimization-header' ); ?> + +
+ +
+
+

+ + +

+ +
+
+

+ +
+

+ + + ' + ); + ?> + +

+
+ +
+

+
+
+
+ +

+
+
+
+ +
+ +
+

+ % + + ' + ); + ?> + +

+
+
+ +
+
+ +
%
+
+
+ +

+ ' . esc_html( min( $data['optimized_attachments_percent'], 100 ) ) . '%' + ); + ?> +

+
+
+
+ + + +
+ + print_template( 'part-bulk-optimization-success' ); + + $this->print_template( 'part-bulk-optimization-table', $data ); + + // New Feature! + if ( ! empty( $data['no-custom-folders'] ) ) { + $this->print_template( 'part-bulk-optimization-newbie' ); + } + ?> + +
+
+

+ + + +

+
+ +

+ +

+ +
+
+ + print_template( 'modal-payment' ); + + if ( Imagify_Requirements::is_api_key_valid() ) { + $display_infos = get_transient( 'imagify_bulk_optimization_infos' ); + + ?> + + + + +
+ +
+ + print_template( 'part-files-list-header' ); ?> + +
+ + list_table->views(); ?> + list_table->display(); ?> +
+ +
+get_option_name(); +$hidden_class = Imagify_Requirements::is_api_key_valid() ? '' : ' hidden'; +$lang = imagify_get_current_lang_in( array( 'de', 'es', 'fr', 'it' ) ); + +/* Ads notice */ +$plugins = get_plugins(); +$notice = 'wp-rocket'; +$user_id = get_current_user_id(); +$notices = get_user_meta( $user_id, '_imagify_ignore_ads', true ); +$notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array(); +$wrapper_class = isset( $notices[ $notice ] ) || isset( $plugins['wp-rocket/wp-rocket.php'] ) ? 'imagify-have-rocket' : 'imagify-dont-have-rocket'; +?> +
+ +
+ + print_template( 'part-settings-header' ); ?> +
+
+ +
+ + get_settings_group() ); ?> + + + + print_template( 'part-settings-account' ); + $this->print_template( 'part-settings-footer' ); + } + ?> + + + + + + +
+ +
+ +
+

+ print_template( 'part-settings-webp' ); + $this->print_template( 'part-settings-library' ); + $this->print_template( 'part-settings-custom-folders' ); + ?> +
+
+ +
+
+
+

+ +

+ +
+

+ field_checkbox( array( + 'option_name' => 'admin_bar_menu', + 'label' => __( 'I want this awesome quick access menu on my Toolbar.', 'imagify' ), + ) ); + ?> +

+
+
+

+ +

+
+ + +

+ + + + + + +

+ +

+ field_checkbox( array( + 'option_name' => 'partner_links', + 'label' => __( 'Display Partner Links', 'imagify' ), + ) ); + ?> +

+ +
+
+ + print_template( 'part-settings-footer' ); + } + ?> +
+
+
+
+ + print_template( 'part-rocket-ad' ); + $this->print_template( 'modal-settings-infos' ); + $this->print_template( 'modal-settings-partners-infos' ); + $this->print_template( 'modal-settings-visual-comparison' ); + $this->print_template( 'modal-payment' ); + ?> + +
+ + +

– Imagify

+ +
+ +

+ + + + + + + +

+ + print_template( 'part-documentation-link' ); ?> +
+ +
+
+
+

+ ' . esc_html( $data['quota'] ) . '%' + ); + ?> +

+ +
+
+
+
+
+
+
    +
  • + + +
  • +
  • + + + + + +
  • +
+
+ + +
+

+
+
+ +
+

+
+
+
+ + + +
+
+
diff --git a/wp/wp-content/plugins/imagify/views/part-bulk-optimization-overquota-alert.php b/wp/wp-content/plugins/imagify/views/part-bulk-optimization-overquota-alert.php new file mode 100644 index 00000000..49093c5e --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/part-bulk-optimization-overquota-alert.php @@ -0,0 +1,21 @@ + 'plugin', + 'utm_medium' => 'imagify-wp', + 'utm_content' => 'over-quota', +) ); +?> +
+
+ + + +
+ diff --git a/wp/wp-content/plugins/imagify/views/part-bulk-optimization-success.php b/wp/wp-content/plugins/imagify/views/part-bulk-optimization-success.php new file mode 100644 index 00000000..044fd566 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/part-bulk-optimization-success.php @@ -0,0 +1,51 @@ + + + + + + +

+ > + + + > + + + +

+ + + + + + + + + + + + + + + + + + print_template( 'input/selector', [ + 'current_label' => __( 'Current level:', 'imagify' ), + 'name' => 'level[' . $data['group_id'] . ']', + 'value' => $data['level'], + 'values' => [ + 0 => imagify_get_optimization_level_label( 0, '%ICON% %s' ), + 2 => imagify_get_optimization_level_label( 2, '%ICON% %s' ), + ], + ] ); + ?> + + + + + + + + diff --git a/wp/wp-content/plugins/imagify/views/part-bulk-optimization-table.php b/wp/wp-content/plugins/imagify/views/part-bulk-optimization-table.php new file mode 100644 index 00000000..75aa41d6 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/part-bulk-optimization-table.php @@ -0,0 +1,113 @@ + + +
+
+
+ +
+

+
+
+
+ + + +
+
+
class="imagify-row-progress " > +
+
+
>
%
+
+
+
+ + + + + + + + + + + + + + + get_bulk_instance( $group['context'] )->get_context_data(); + $group = array_merge( $group, $context_data ); + $default_level = Imagify_Options::get_instance()->get( 'optimization_level' ); + + if ( Imagify_Options::get_instance()->get( 'lossless' ) ) { + $default_level = 0; + } + + $group['level'] = $default_level; + + $running = get_transient( "imagify_{$group['context']}_optimize_running" ); + + $group['spinner_class'] = 'hidden'; + $group['spinner_aria'] = 'aria-hidden="true"'; + $group['checkbox_class'] = ''; + $group['checkbox_aria'] = 'aria-hidden="false"'; + + if ( false !== $running ) { + $group['spinner_class'] = ''; + $group['spinner_aria'] = 'aria-hidden="false"'; + $group['checkbox_class'] = 'hidden'; + $group['checkbox_aria'] = 'aria-hidden="true"'; + } + + $this->print_template( 'part-bulk-optimization-table-row-folder-type', $group ); + } + ?> + +
+
+
+
diff --git a/wp/wp-content/plugins/imagify/views/part-discount-banner.php b/wp/wp-content/plugins/imagify/views/part-discount-banner.php new file mode 100644 index 00000000..762a77a2 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/part-discount-banner.php @@ -0,0 +1,26 @@ + + + + + +

+ + +
+
+

+ +

+ + WP Rocket + +

+ ', '' ); + ?> +

+ +

+ + + +

+ +
    +
  • +
  • +
  • +
  • +
+ + +
+
+ + + + localize_script( 'options', 'imagifyUser', array( + 'action' => 'imagify_get_user_data', + '_wpnonce' => wp_create_nonce( 'imagify_get_user_data' ), + ) ); + } +} +?> +
+print_template( 'part-upsell' ); ?> + + +

+ +

+ +

+

+ + + get( 'api_key' ) ) { + ?> +

+ +

+ + +
+ + + + + + ✓ + + + get( 'api_key' ) ) { + ?> + + + + + + + +
+ +
+get_active_folders_column( 'path' ); +$themes = array(); + +if ( $custom_folders ) { + $custom_folders = array_combine( $custom_folders, $custom_folders ); + $custom_folders = array_map( array( 'Imagify_Files_Scan', 'remove_placeholder' ), $custom_folders ); + $custom_folders = array_map( 'trailingslashit', $custom_folders ); + $custom_folders = array_filter( $custom_folders, array( 'Imagify_Files_Scan', 'is_path_autorized' ) ); +} + +if ( $custom_folders ) { + $custom_folders = array_map( array( $this->filesystem, 'make_path_relative' ), $custom_folders ); + $custom_folders = array_map( 'untrailingslashit', $custom_folders ); + natcasesort( $custom_folders ); + $custom_folders = array_map( 'trailingslashit', $custom_folders ); + + if ( isset( $custom_folders['{{ROOT}}/'] ) ) { + $custom_folders['{{ROOT}}/'] = __( 'Site\'s root', 'imagify' ); + } +} + +// Current used theme(s). +if ( ! is_network_admin() ) { + $current_theme = wp_get_theme(); + $themes_not_added = array(); + + foreach ( array( $current_theme, $current_theme->parent() ) as $theme ) { + if ( ! $theme || ! $theme->exists() ) { + continue; + } + + $theme_path = trailingslashit( $theme->get_stylesheet_directory() ); + + if ( ! Imagify_Files_Scan::is_path_forbidden( $theme_path ) ) { + $theme = array( + 'name' => $theme->display( 'Name' ), + 'path' => Imagify_Files_Scan::add_placeholder( $theme_path ), + 'label' => $this->filesystem->make_path_relative( $theme_path ), + ); + + $themes[ $theme['path'] ] = $theme; + $added = false; + $rel_path = strtolower( $theme['label'] ); + + foreach ( $custom_folders as $path => $label ) { + if ( strpos( $rel_path, strtolower( $label ) ) === 0 ) { + $added = true; + break; + } + } + + if ( ! $added ) { + $themes_not_added[] = $theme['path']; + } + } + } + + $themes_count = count( $themes ); +} +?> +
+
+

+ +
+ + +
+
+ +

+ ' . $theme['name'] . '' ); + + if ( $themes_count > 1 ) { + $theme = end( $themes ); + echo '
'; + /* translators: %s is a theme name. */ + printf( __( 'child theme of %s', 'imagify' ), '' . $theme['name'] . '' ); + } + ?> +

+
+ +
+ +

+ +

+ + + $theme ) { + $themes[ $path ] = esc_attr( $theme['path'] ) . '#///#' . esc_attr( $theme['label'] ); + } + ?> +

+ + + +
+
+ + +

+ + + + + +

+ +
+ $label ) { + $this->print_template( 'part-settings-row-custom-folder', array( + 'value' => $placeholder, + 'label' => $label, + ) ); + } + } + ?> +
+ +

+ opening and closing tags. */ + __( '%1$sSelecting a folder will also optimize images in sub-folders.%2$s The only exception is "Site’s root": when selected, only images that are directly at the site’s root will be optimized (sub-folders can be selected separately).', 'imagify' ), + '', + '' + ); + ?> +
+ +

+ + + + +
+
+
+'; +?> + +> + + + + + + + + + /> + + + diff --git a/wp/wp-content/plugins/imagify/views/part-settings-footer.php b/wp/wp-content/plugins/imagify/views/part-settings-footer.php new file mode 100644 index 00000000..ae1e45cb --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/part-settings-footer.php @@ -0,0 +1,28 @@ + + +
+ current_user_can( 'bulk-optimize' ) || imagify_get_context( 'custom-folders' )->current_user_can( 'bulk-optimize' ); + + if ( $user_can ) { + // Submit and go to bulk page. + submit_button( + esc_html__( 'Save & Go to Bulk Optimizer', 'imagify' ), + 'secondary imagify-button-secondary', // Type/classes. + 'submit-goto-bulk', // Name (id). + true, // Wrap. + array() // Other attributes. + ); + } + } + ?> +
+ + +

— Imagify

+ +
+

+ + + + + + + +

+ + get( 'api_key' ) ) { + ?> +

+ ', + '
', + '', + '' + ); + ?> +
+ +

+ + + print_template( 'part-documentation-link' ); ?> +
+get_option_name(); +?> +
+
+

+ +

+ field_checkbox( + [ + 'option_name' => 'resize_larger', + 'label' => __( 'Resize larger images', 'imagify' ), + 'attributes' => [ + 'aria-describedby' => 'describe-resize_larger', + ], + ] + ); + ?> + + + + + + + + ' . esc_html__( 'Resizing is done on upload or during optimization.', 'imagify' ) . ''; + } else { + esc_html_e( 'Resizing is done only during optimization.', 'imagify' ); + } + ?> + +

+ + + +
+ +

+ +

+ +

+ +

+ ', '' + ); + ?> +
+ + + +

+ + field_checkbox_list( + [ + 'option_name' => 'disallowed-sizes', + 'legend' => __( 'Choose the sizes to optimize', 'imagify' ), + 'values' => Imagify_Settings::get_thumbnail_sizes(), + 'reverse_check' => true, + ] + ); + ?> + + +
+
+ +

+ + + +

diff --git a/wp/wp-content/plugins/imagify/views/part-settings-webp-missing-message.php b/wp/wp-content/plugins/imagify/views/part-settings-webp-missing-message.php new file mode 100644 index 00000000..182122a3 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/part-settings-webp-missing-message.php @@ -0,0 +1,17 @@ + +

+ +

diff --git a/wp/wp-content/plugins/imagify/views/part-settings-webp.php b/wp/wp-content/plugins/imagify/views/part-settings-webp.php new file mode 100644 index 00000000..d8c6ac40 --- /dev/null +++ b/wp/wp-content/plugins/imagify/views/part-settings-webp.php @@ -0,0 +1,220 @@ + +
+

+ +
+ tag opening and closing, %3$s and %4$s are tag opening and closing. + __( 'Next-Gen Images format is currently defined by the %1$simagify_nextgen_images_format%2$s filter. %3$sRead more%4$s', 'imagify' ), + '', + '', + '', + '' + ); + + $message_class = 'error'; + $disabled = true; + } + + $attributes = [ + 'aria-describedby' => 'describe-optimization_format', + ]; + + if ( $disabled ) { + $attributes['disabled'] = true; + } + + $settings->field_inline_radio_list( + [ + 'option_name' => 'optimization_format', + 'legend' => __( 'Next-gen image format', 'imagify' ), + 'info' => $message, + 'info_class' => $message_class, + 'values' => [ + 'off' => __( 'Off', 'imagify' ), + 'avif' => __( 'AVIF', 'imagify' ), + 'webp' => __( 'WebP', 'imagify' ), + ], + 'attributes' => $attributes, + ] + ); + ?> +
+ +
+ +
+ field_checkbox( [ + 'option_name' => 'display_nextgen', + 'label' => __( 'Display images in Next-Gen format on the site', 'imagify' ), + ] ); + ?> + +
+ field_radio_list( [ + 'option_name' => 'display_nextgen_method', + 'values' => [ + 'rewrite' => __( 'Use rewrite rules', 'imagify' ), + /* translators: 1 and 2 are tag opening and closing. */ + 'picture' => sprintf( __( 'Use <picture> tags %1$s(preferred)%2$s', 'imagify' ), '', '' ), + ], + 'attributes' => [ + 'aria-describedby' => 'describe-convert_to_webp', + ], + ] ); + ?> + +
+ ' . esc_url( $cdn_source['url'] ) . '', + '' . esc_html( $cdn_source['name'] ) . '' + ); + } elseif ( ! empty( $cdn_source['name'] ) ) { + printf( + /* translators: 1 is an URL, 2 is a plugin name. */ + esc_html__( 'Your CDN URL is set to %1$s by %2$s.', 'imagify' ), + '' . esc_url( $cdn_source['url'] ) . '', + '' . esc_html( $cdn_source['name'] ) . '' + ); + } else { + printf( + /* translators: %s is an URL. */ + esc_html__( 'Your CDN URL is set to %1$s by filter.', 'imagify' ), + '' . esc_url( $cdn_source['url'] ) . '' + ); + } + + $settings->field_hidden( [ + 'option_name' => 'cdn_url', + 'current_value' => $cdn_source['url'], + ] ); + } else { + $settings->field_text_box( [ + 'option_name' => 'cdn_url', + 'label' => __( 'If you use a CDN, specify the URL:', 'imagify' ), + 'attributes' => [ + 'size' => 30, + 'placeholder' => __( 'https://cdn.example.com', 'imagify' ), + ], + ] ); + } + ?> +
+
+ +
+ + get_file_path( true ); + + if ( $conf_file_path ) { + printf( + /* translators: 1 is a file name, 2 is a tag opening, 3 is the tag closing. */ + esc_html__( 'The first option adds rewrite rules to your site’s configuration file (%1$s) and does not alter your pages code. %2$sThis does not work with CDN though.%3$s', 'imagify' ), + '' . esc_html( $conf_file_path ) . '', + '', + '' + ); + + echo '
'; + } + + printf( + /* translators: 1 and 2 are HTML tag names, 3 is a tag opening, 4 is the tag closing. */ + esc_html__( 'The second option replaces the %1$s tags with %2$s tags. %3$sThis is the preferred solution but some themes may break%4$s, so make sure to verify that everything seems fine.', 'imagify' ), + '<img>', + '<picture>', + '', + '' + ); + + echo '
'; + + /** + * Add more information about WebP. + * + * @since 1.9 + * @author Grégory Viguier + */ + do_action( 'imagify_settings_webp_info' ); + ?> +
+
+ + get_cached_stat(); + + if ( $count ) { + ?> +
+ print_template( 'part-settings-webp-missing-message', [ 'count' => $count ] ); ?> + + + + get_stat(); + $total = get_transient( 'imagify_missing_next_gen_total' ); + $progress = 0; + $aria = ' aria-hidden="true"'; + $class = 'hidden'; + $style = ''; + + if ( + false !== $total + && + $total > 0 + ) { + $aria = ''; + $class = ''; + $processed = $total - $remaining; + $progress = $processed . '/' . $total; + $percent = $processed / $total * 100; + $style = 'style="width:' . $percent . '%;"'; + } + ?> + +
class="imagify-progress "> +
+
>
+
+
+
+ + + +
+
+get_percent_unconsumed_quota() : 0; +$infinite = $imagify_user->is_infinite(); +$upgrade = ''; +$price = ''; +$upgrade_link = ''; +$user_id = get_current_user_id(); +$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true ); +$notices = $notices && is_array( $notices ) ? array_flip( $notices ) : []; +$api_key_valid = Imagify_Requirements::is_api_key_valid(); + +if ( + $imagify_user->is_free() + && + $api_key_valid + && + $unconsumed_quota > 20 +) { + ?> +
+
+

+ +

+

+ +
+
+ +
+
+ get_quota_icon(); ?> +
+

+ ' . $this->get_quota_percent() . '%' + ); + ?> +

+ +
+
+
+
+
+ is_free() ) { + $upgrade = esc_html__( 'Upgrade your plan now for more!', 'imagify' ); + $price = esc_html__( 'From $5.99/month only, keep going with image optimization!', 'imagify' ); + $upgrade_link = IMAGIFY_APP_DOMAIN . '/subscription/?utm_source=plugin&utm_medium=upsell_banner'; + } elseif ( $imagify_user->is_growth() ) { + $upgrade = esc_html__( 'Upgrade your plan now to keep optimizing your images.', 'imagify' ); + + if ( $imagify_user->is_monthly ) { + $price = esc_html__( 'For $9.99/month only, choose unlimited image optimization!', 'imagify' ); + $upgrade_link = IMAGIFY_APP_DOMAIN . '/subscription/plan_switch/?label=infinite&payment_plan=1&utm_source=plugin&utm_medium=upsell_banner'; + } else { + $price = esc_html__( 'For $99.9/year only, choose unlimited image optimization!', 'imagify' ); + $upgrade_link = IMAGIFY_APP_DOMAIN . '/subscription/plan_switch/?label=infinite&payment_plan=2&utm_source=plugin&utm_medium=upsell_banner'; + } + } + ?> +

+

+ + + +
+ diff --git a/wp/wp-content/plugins/leadin/build/elementor.asset.php b/wp/wp-content/plugins/leadin/build/elementor.asset.php new file mode 100644 index 00000000..accc85f3 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/elementor.asset.php @@ -0,0 +1 @@ + array('jquery', 'react', 'react-dom', 'wp-i18n'), 'version' => '6c8968024c67158cce44'); diff --git a/wp/wp-content/plugins/leadin/build/elementor.css b/wp/wp-content/plugins/leadin/build/elementor.css new file mode 100644 index 00000000..aaf2028e --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/elementor.css @@ -0,0 +1,72 @@ +/*!***************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx ***! + \***************************************************************************************************************************************************************************/ +.sxa9zrc{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#00a4bd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;margin:'2px';} +.s14430wa{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;} +.ct87ghk{fill:none;stroke:var(--ct87ghk-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;} +.avili0h{fill:none;stroke:var(--avili0h-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;}@-webkit-keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@-webkit-keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGlubmVyLnRzeCJdLCJuYW1lcyI6WyIuc3hhOXpyYyIsIi5zMTQ0MzB3YSIsIi5jdDg3Z2hrIiwiLmF2aWxpMGgiXSwibWFwcGluZ3MiOiJBQUdxQkE7QUFVQUM7QUFPTkM7QUFPUUMiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSVNwaW5uZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmltcG9ydCB7IENBTFlQU09fTUVESVVNLCBDQUxZUFNPIH0gZnJvbSAnLi9jb2xvcnMnO1xuY29uc3QgU3Bpbm5lck91dGVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMDBhNGJkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAnMnB4JztcbmA7XG5jb25zdCBTcGlubmVySW5uZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuY29uc3QgQ2lyY2xlID0gc3R5bGVkLmNpcmNsZSBgXG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy5jb2xvcn07XG4gIHN0cm9rZS13aWR0aDogNTtcbiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG5gO1xuY29uc3QgQW5pbWF0ZWRDaXJjbGUgPSBzdHlsZWQuY2lyY2xlIGBcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlOiAke3Byb3BzID0+IHByb3BzLmNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiA1O1xuICBzdHJva2UtbGluZWNhcDogcm91bmQ7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgYW5pbWF0aW9uOiBkYXNoQW5pbWF0aW9uIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLFxuICAgIHNwaW5BbmltYXRpb24gMnMgbGluZWFyIGluZmluaXRlO1xuXG4gIEBrZXlmcmFtZXMgZGFzaEFuaW1hdGlvbiB7XG4gICAgMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTUwO1xuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gICAgfVxuXG4gICAgNTAlIHtcbiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDkwLCAxNTA7XG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogLTUwO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogOTAsIDE1MDtcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTQwO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc3BpbkFuaW1hdGlvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVJU3Bpbm5lcih7IHNpemUgPSAyMCB9KSB7XG4gICAgcmV0dXJuIChfanN4KFNwaW5uZXJPdXRlciwgeyBjaGlsZHJlbjogX2pzeChTcGlubmVySW5uZXIsIHsgY2hpbGRyZW46IF9qc3hzKFwic3ZnXCIsIHsgaGVpZ2h0OiBzaXplLCB3aWR0aDogc2l6ZSwgdmlld0JveDogXCIwIDAgNTAgNTBcIiwgY2hpbGRyZW46IFtfanN4KENpcmNsZSwgeyBjb2xvcjogQ0FMWVBTT19NRURJVU0sIGN4OiBcIjI1XCIsIGN5OiBcIjI1XCIsIHI6IFwiMjIuNVwiIH0pLCBfanN4KEFuaW1hdGVkQ2lyY2xlLCB7IGNvbG9yOiBDQUxZUFNPLCBjeDogXCIyNVwiLCBjeTogXCIyNVwiLCByOiBcIjIyLjVcIiB9KV0gfSkgfSkgfSkpO1xufVxuIl19*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts ***! + \*************************************************************************************************************************************************************************/ +.ug152ch{background-color:var(--ug152ch-0);border:3px solid var(--ug152ch-0);color:#ffffff;border-radius:3px;font-size:14px;line-height:14px;padding:12px 24px;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-weight:500;white-space:nowrap;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlCdXR0b24udHMiXSwibmFtZXMiOlsiLnVnMTUyY2giXSwibWFwcGluZ3MiOiJBQUVlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQnV0dG9uLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuaW1wb3J0IHsgSEVGRkFMVU1QLCBMT1JBWCwgT0xBRiB9IGZyb20gJy4vY29sb3JzJztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5idXR0b24gYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGJvcmRlcjogM3B4IHNvbGlkICR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGNvbG9yOiAke09MQUZ9XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTRweDtcbiAgcGFkZGluZzogMTJweCAyNHB4O1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmA7XG4iXX0=*/ +/*!****************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts ***! + \****************************************************************************************************************************************************************************/ +.ua13n1c{text-align:var(--ua13n1c-0);} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlDb250YWluZXIudHMiXSwibmFtZXMiOlsiLnVhMTNuMWMiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQ29udGFpbmVyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHRleHQtYWxpZ246ICR7cHJvcHMgPT4gKHByb3BzLnRleHRBbGlnbiA/IHByb3BzLnRleHRBbGlnbiA6ICdpbmhlcml0Jyl9O1xuYDtcbiJdfQ==*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts ***! + \*************************************************************************************************************************************************************************/ +.h1q5v5ee{background-image:var(--h1q5v5ee-0);background-color:#f5f8fa;background-repeat:no-repeat;background-position:center 25px;background-size:120px;color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;padding:var(--h1q5v5ee-1);}.h1q5v5ee p{font-size:inherit !important;line-height:24px;margin:4px 0;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vSHVic3BvdFdyYXBwZXIudHMiXSwibmFtZXMiOlsiLmgxcTV2NWVlIl0sIm1hcHBpbmdzIjoiQUFDZUEiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL0NvbW1vbi9IdWJzcG90V3JhcHBlci50cyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5kaXYgYFxuICBiYWNrZ3JvdW5kLWltYWdlOiAke3Byb3BzID0+IGB1cmwoJHtwcm9wcy5wbHVnaW5QYXRofS9wdWJsaWMvYXNzZXRzL2ltYWdlcy9odWJzcG90LnN2ZylgfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjhmYTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDI1cHg7XG4gIGJhY2tncm91bmQtc2l6ZTogMTIwcHg7XG4gIGNvbG9yOiAjMzM0NzViO1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuXG4gIHBhZGRpbmc6ICR7KHByb3BzKSA9PiBwcm9wcy5wYWRkaW5nIHx8ICc5MHB4IDIwJSAyNXB4J307XG5cbiAgcCB7XG4gICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgfVxuYDtcbiJdfQ==*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts ***! + \*************************************************************************************************************************************************************************/ +.u3qxofx{height:30px;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGFjZXIudHMiXSwibmFtZXMiOlsiLnUzcXhvZngiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJU3BhY2VyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIGhlaWdodDogMzBweDtcbmA7XG4iXX0=*/ +/*!**************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts ***! + \**************************************************************************************************************************************************************************/ +.u1q7a48k{position:relative;}.u1q7a48k:after{content:'';position:absolute;top:0;bottom:0;right:0;left:0;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIl0sIm5hbWVzIjpbIi51MXE3YTQ4ayJdLCJtYXBwaW5ncyI6IkFBQ2VBIiwiZmlsZSI6Ii91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5gO1xuIl19*/ +/*!***********************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx ***! + \***********************************************************************************************************************************************************************/ +.c1wxx7eu{color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;position:relative;} +.c1rgwbep{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:hsl(0,0%,100%);border-color:hsl(0,0%,80%);border-radius:4px;border-style:solid;border-width:var(--c1rgwbep-0);cursor:default;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:38px;outline:0 !important;position:relative;-webkit-transition:all 100ms;transition:all 100ms;box-sizing:border-box;box-shadow:var(--c1rgwbep-1);}.c1rgwbep:hover{border-color:hsl(0,0%,70%);} +.v1mdmbaj{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:2px 8px;position:relative;overflow:hidden;box-sizing:border-box;} +.p1gwkvxy{color:hsl(0,0%,50%);margin-left:2px;margin-right:2px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;font-size:16px;} +.s1bwlafs{color:hsl(0,0%,20%);margin-left:2px;margin-right:2px;max-width:calc(100% - 8px);overflow:hidden;position:absolute;text-overflow:ellipsis;white-space:nowrap;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;} +.i196z9y5{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;} +.d1dfo5ow{border-top:8px solid #00a4bd;border-left:6px solid transparent;border-right:6px solid transparent;width:0px;height:0px;margin:10px;} +.if3lze{margin:2px;padding-bottom:2px;padding-top:2px;visibility:visible;color:hsl(0,0%,20%);box-sizing:border-box;} +.i9kxf50{box-sizing:content-box;background:rgba(0,0,0,0) none repeat scroll 0px center;border:0px none;font-size:inherit;opacity:1;outline:currentcolor none 0px;padding:0px;color:inherit;font-family:inherit;} +.igjr3uc{position:absolute;opacity:0;font-size:inherit;} +.mhb9if7{position:absolute;top:100%;background-color:#fff;border-radius:4px;margin-bottom:8px;margin-top:8px;z-index:9999;box-shadow:0 0 0 1px hsla(0,0%,0%,0.1),0 4px 11px hsla(0,0%,0%,0.1);width:100%;} +.mxaof7s{max-height:300px;overflow-y:auto;padding-bottom:4px;padding-top:4px;position:relative;} +.mw50s5v{padding-bottom:8px;padding-top:8px;} +.m11rzvjw{color:#999;cursor:default;font-size:75%;font-weight:500;margin-bottom:0.25em;text-transform:uppercase;padding-left:12px;padding-left:12px;} +.m1jcdsjv{display:block;background-color:var(--m1jcdsjv-0);color:var(--m1jcdsjv-1);cursor:default;font-size:inherit;width:100%;padding:8px 12px;}.m1jcdsjv:hover{background-color:var(--m1jcdsjv-2);} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vQXN5bmNTZWxlY3QudHN4Il0sIm5hbWVzIjpbIi5jMXd4eDdldSIsIi5jMXJnd2JlcCIsIi52MW1kbWJhaiIsIi5wMWd3a3Z4eSIsIi5zMWJ3bGFmcyIsIi5pMTk2ejl5NSIsIi5kMWRmbzVvdyIsIi5pZjNsemUiLCIuaTlreGY1MCIsIi5pZ2pyM3VjIiwiLm1oYjlpZjciLCIubXhhb2Y3cyIsIi5tdzUwczV2IiwiLm0xMXJ6dmp3IiwiLm0xamNkc2p2Il0sIm1hcHBpbmdzIjoiQUFNa0JBO0FBTU9DO0FBcUJGQztBQVVIQztBQVVBQztBQWFPQztBQU9EQztBQVFIQztBQVFUQztBQVdNQztBQUtFQztBQVdMQztBQU9DQztBQUlNQztBQVVQQyIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvQ29tbW9uL0FzeW5jU2VsZWN0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBDQUxZUFNPLCBDQUxZUFNPX0xJR0hULCBDQUxZUFNPX01FRElVTSwgT0JTSURJQU4sIH0gZnJvbSAnLi4vVUlDb21wb25lbnRzL2NvbG9ycyc7XG5pbXBvcnQgVUlTcGlubmVyIGZyb20gJy4uL1VJQ29tcG9uZW50cy9VSVNwaW5uZXInO1xuaW1wb3J0IExvYWRTdGF0ZSBmcm9tICcuLi9lbnVtcy9sb2FkU3RhdGUnO1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiAke09CU0lESUFOfTtcbiAgZm9udC1mYW1pbHk6ICdMZXhlbmQgRGVjYScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcbmNvbnN0IENvbnRyb2xDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDAsIDAlLCAxMDAlKTtcbiAgYm9yZGVyLWNvbG9yOiBoc2woMCwgMCUsIDgwJSk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAke3Byb3BzID0+IChwcm9wcy5mb2N1c2VkID8gJzAnIDogJzFweCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWluLWhlaWdodDogMzhweDtcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IGFsbCAxMDBtcztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogJHtwcm9wcyA9PiBwcm9wcy5mb2N1c2VkID8gYDAgMCAwIDJweCAke0NBTFlQU09fTUVESVVNfWAgOiAnbm9uZSd9O1xuICAmOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IGhzbCgwLCAwJSwgNzAlKTtcbiAgfVxuYDtcbmNvbnN0IFZhbHVlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZzogMnB4IDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IFBsYWNlaG9sZGVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiBoc2woMCwgMCUsIDUwJSk7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZvbnQtc2l6ZTogMTZweDtcbmA7XG5jb25zdCBTaW5nbGVWYWx1ZSA9IHN0eWxlZC5kaXYgYFxuICBjb2xvcjogaHNsKDAsIDAlLCAyMCUpO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA4cHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IEluZGljYXRvckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXNocmluazogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbmA7XG5jb25zdCBEcm9wZG93bkluZGljYXRvciA9IHN0eWxlZC5kaXYgYFxuICBib3JkZXItdG9wOiA4cHggc29saWQgJHtDQUxZUFNPfTtcbiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdpZHRoOiAwcHg7XG4gIGhlaWdodDogMHB4O1xuICBtYXJnaW46IDEwcHg7XG5gO1xuY29uc3QgSW5wdXRDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luOiAycHg7XG4gIHBhZGRpbmctYm90dG9tOiAycHg7XG4gIHBhZGRpbmctdG9wOiAycHg7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGNvbG9yOiBoc2woMCwgMCUsIDIwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5gO1xuY29uc3QgSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKSBub25lIHJlcGVhdCBzY3JvbGwgMHB4IGNlbnRlcjtcbiAgYm9yZGVyOiAwcHggbm9uZTtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBvcGFjaXR5OiAxO1xuICBvdXRsaW5lOiBjdXJyZW50Y29sb3Igbm9uZSAwcHg7XG4gIHBhZGRpbmc6IDBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuYDtcbmNvbnN0IElucHV0U2hhZG93ID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3BhY2l0eTogMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuYDtcbmNvbnN0IE1lbnVDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIHotaW5kZXg6IDk5OTk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuY29uc3QgTWVudUxpc3QgPSBzdHlsZWQuZGl2IGBcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gIHBhZGRpbmctdG9wOiA0cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG5jb25zdCBNZW51R3JvdXAgPSBzdHlsZWQuZGl2IGBcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgcGFkZGluZy10b3A6IDhweDtcbmA7XG5jb25zdCBNZW51R3JvdXBIZWFkZXIgPSBzdHlsZWQuZGl2IGBcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIG1hcmdpbi1ib3R0b206IDAuMjVlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG5gO1xuY29uc3QgTWVudUl0ZW0gPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuc2VsZWN0ZWQgPyBDQUxZUFNPX01FRElVTSA6ICd0cmFuc3BhcmVudCd9O1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2ZmZicgOiAnaW5oZXJpdCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiA4cHggMTJweDtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCA/IENBTFlQU09fTUVESVVNIDogQ0FMWVBTT19MSUdIVH07XG4gIH1cbmA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBc3luY1NlbGVjdCh7IHBsYWNlaG9sZGVyLCB2YWx1ZSwgbG9hZE9wdGlvbnMsIG9uQ2hhbmdlLCBkZWZhdWx0T3B0aW9ucywgfSkge1xuICAgIGNvbnN0IGlucHV0RWwgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaW5wdXRTaGFkb3dFbCA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbaXNGb2N1c2VkLCBzZXRGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2xvYWRTdGF0ZSwgc2V0TG9hZFN0YXRlXSA9IHVzZVN0YXRlKExvYWRTdGF0ZS5Ob3RMb2FkZWQpO1xuICAgIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgY29uc3QgaW5wdXRTaXplID0gYCR7aW5wdXRTaGFkb3dFbC5jdXJyZW50ID8gaW5wdXRTaGFkb3dFbC5jdXJyZW50LmNsaWVudFdpZHRoICsgMTAgOiAyfXB4YDtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobG9hZE9wdGlvbnMgJiYgbG9hZFN0YXRlID09PSBMb2FkU3RhdGUuTm90TG9hZGVkKSB7XG4gICAgICAgICAgICBsb2FkT3B0aW9ucygnJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldE9wdGlvbnMocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLklkbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbbG9hZE9wdGlvbnMsIGxvYWRTdGF0ZV0pO1xuICAgIGNvbnN0IHJlbmRlckl0ZW1zID0gKGl0ZW1zID0gW10sIHBhcmVudEtleSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeHMoTWVudUdyb3VwLCB7IGNoaWxkcmVuOiBbX2pzeChNZW51R3JvdXBIZWFkZXIsIHsgaWQ6IGAke2luZGV4fS1oZWFkaW5nYCwgY2hpbGRyZW46IGl0ZW0ubGFiZWwgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogcmVuZGVySXRlbXMoaXRlbS5vcHRpb25zLCBpbmRleCkgfSldIH0sIGBhc3luYy1zZWxlY3QtaXRlbS0ke2luZGV4fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGBhc3luYy1zZWxlY3QtaXRlbS0ke3BhcmVudEtleSAhPT0gdW5kZWZpbmVkID8gYCR7cGFyZW50S2V5fS0ke2luZGV4fWAgOiBpbmRleH1gO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChNZW51SXRlbSwgeyBpZDoga2V5LCBzZWxlY3RlZDogdmFsdWUgJiYgaXRlbS52YWx1ZSA9PT0gdmFsdWUudmFsdWUsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogaXRlbS5sYWJlbCB9LCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3hzKENvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKENvbnRyb2xDb250YWluZXIsIHsgaWQ6IFwibGVhZGluLWFzeW5jLXNlbGVjdG9yXCIsIGZvY3VzZWQ6IGlzRm9jdXNlZCwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbC5jdXJyZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWwuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWwuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW19qc3hzKFZhbHVlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbbG9jYWxWYWx1ZSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF2YWx1ZSA/IChfanN4KFBsYWNlaG9sZGVyLCB7IGNoaWxkcmVuOiBwbGFjZWhvbGRlciB9KSkgOiAoX2pzeChTaW5nbGVWYWx1ZSwgeyBjaGlsZHJlbjogdmFsdWUubGFiZWwgfSkpKSwgX2pzeHMoSW5wdXRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KElucHV0LCB7IHJlZjogaW5wdXRFbCwgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb2N1cyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkNoYW5nZTogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLkxvYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnMoZS50YXJnZXQudmFsdWUsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRPcHRpb25zKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZFN0YXRlKExvYWRTdGF0ZS5JZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbHVlOiBsb2NhbFZhbHVlLCB3aWR0aDogaW5wdXRTaXplLCBpZDogXCJhc3ljbi1zZWxlY3QtaW5wdXRcIiB9KSwgX2pzeChJbnB1dFNoYWRvdywgeyByZWY6IGlucHV0U2hhZG93RWwsIGNoaWxkcmVuOiBsb2NhbFZhbHVlIH0pXSB9KV0gfSksIF9qc3hzKEluZGljYXRvckNvbnRhaW5lciwgeyBjaGlsZHJlbjogW2xvYWRTdGF0ZSA9PT0gTG9hZFN0YXRlLkxvYWRpbmcgJiYgX2pzeChVSVNwaW5uZXIsIHt9KSwgX2pzeChEcm9wZG93bkluZGljYXRvciwge30pXSB9KV0gfSksIGlzRm9jdXNlZCAmJiAoX2pzeChNZW51Q29udGFpbmVyLCB7IGNoaWxkcmVuOiBfanN4KE1lbnVMaXN0LCB7IGNoaWxkcmVuOiByZW5kZXJJdGVtcyhvcHRpb25zKSB9KSB9KSldIH0pKTtcbn1cbiJdfQ==*/ +/*!******************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/Common/ElementorButton.tsx ***! + \******************************************************************************************************************************************************************************/ +.czoccom{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:8px;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2VsZW1lbnRvci9Db21tb24vRWxlbWVudG9yQnV0dG9uLnRzeCJdLCJuYW1lcyI6WyIuY3pvY2NvbSJdLCJtYXBwaW5ncyI6IkFBRWtCQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9lbGVtZW50b3IvQ29tbW9uL0VsZW1lbnRvckJ1dHRvbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuYDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVsZW1lbnRvckJ1dHRvbih7IGNoaWxkcmVuLCAuLi5wYXJhbXMgfSkge1xuICAgIHJldHVybiAoX2pzeChDb250YWluZXIsIHsgY2xhc3NOYW1lOiBcImVsZW1lbnRvci1idXR0b24td3JhcHBlclwiLCBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJlbGVtZW50b3ItYnV0dG9uIGVsZW1lbnRvci1idXR0b24tZGVmYXVsdFwiLCB0eXBlOiBcImJ1dHRvblwiLCAuLi5wYXJhbXMsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KSB9KSk7XG59XG4iXX0=*/ +/*!*********************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx ***! + \*********************************************************************************************************************************************************************************************/ +.c1p032ba{padding-bottom:8px;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2VsZW1lbnRvci9NZWV0aW5nV2lkZ2V0L0VsZW1lbnRvck1lZXRpbmdXYXJuaW5nLnRzeCJdLCJuYW1lcyI6WyIuYzFwMDMyYmEiXSwibWFwcGluZ3MiOiJBQU9rQkEiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvZWxlbWVudG9yL01lZXRpbmdXaWRnZXQvRWxlbWVudG9yTWVldGluZ1dhcm5pbmcudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ1VSUkVOVF9VU0VSX0NBTEVOREFSX01JU1NJTkcgfSBmcm9tICcuLi8uLi9zaGFyZWQvTWVldGluZy9jb25zdGFudHMnO1xuaW1wb3J0IEVsZW1lbnRvckJ1dHRvbiBmcm9tICcuLi9Db21tb24vRWxlbWVudG9yQnV0dG9uJztcbmltcG9ydCBFbGVtZW50b3JCYW5uZXIgZnJvbSAnLi4vQ29tbW9uL0VsZW1lbnRvckJhbm5lcic7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbmA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZWV0aW5nV2FybmluZyh7IG9uQ29ubmVjdENhbGVuZGFyLCBzdGF0dXMsIH0pIHtcbiAgICBjb25zdCBpc01lZXRpbmdPd25lciA9IHN0YXR1cyA9PT0gQ1VSUkVOVF9VU0VSX0NBTEVOREFSX01JU1NJTkc7XG4gICAgY29uc3QgdGl0bGVUZXh0ID0gaXNNZWV0aW5nT3duZXJcbiAgICAgICAgPyBfXygnWW91ciBjYWxlbmRhciBpcyBub3QgY29ubmVjdGVkJywgJ2xlYWRpbicpXG4gICAgICAgIDogX18oJ0NhbGVuZGFyIGlzIG5vdCBjb25uZWN0ZWQnLCAnbGVhZGluJyk7XG4gICAgY29uc3QgdGl0bGVNZXNzYWdlID0gaXNNZWV0aW5nT3duZXJcbiAgICAgICAgPyBfXygnUGxlYXNlIGNvbm5lY3QgeW91ciBjYWxlbmRhciB0byBhY3RpdmF0ZSB5b3VyIHNjaGVkdWxpbmcgcGFnZXMnLCAnbGVhZGluJylcbiAgICAgICAgOiBfXygnTWFrZSBzdXJlIHRoYXQgZXZlcnlib2R5IGluIHRoaXMgbWVldGluZyBoYXMgY29ubmVjdGVkIHRoZWlyIGNhbGVuZGFyIGZyb20gdGhlIE1lZXRpbmdzIHBhZ2UgaW4gSHViU3BvdCcsICdsZWFkaW4nKTtcbiAgICByZXR1cm4gKF9qc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChDb250YWluZXIsIHsgY2hpbGRyZW46IF9qc3hzKEVsZW1lbnRvckJhbm5lciwgeyB0eXBlOiBcIndhcm5pbmdcIiwgY2hpbGRyZW46IFtfanN4KFwiYlwiLCB7IGNoaWxkcmVuOiB0aXRsZVRleHQgfSksIF9qc3goXCJiclwiLCB7fSksIHRpdGxlTWVzc2FnZV0gfSkgfSksIGlzTWVldGluZ093bmVyICYmIChfanN4KEVsZW1lbnRvckJ1dHRvbiwgeyBpZDogXCJtZWV0aW5ncy1jb25uZWN0LWNhbGVuZGFyXCIsIG9uQ2xpY2s6IG9uQ29ubmVjdENhbGVuZGFyLCBjaGlsZHJlbjogX18oJ0Nvbm5lY3QgY2FsZW5kYXInLCAnbGVhZGluJykgfSkpXSB9KSk7XG59XG4iXX0=*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx ***! + \*************************************************************************************************************************************************************************/ +.a1h8m4fo{background-color:#fef8f0;border-color:#fae0b5;color:#33475b;font-size:14px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-style:solid;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-width:1px;min-height:60px;padding:8px 20px;position:relative;text-align:left;} +.tyndzxk{font-family:'Lexend Deca';font-style:normal;font-weight:700;font-size:16px;line-height:19px;color:#33475b;margin:0;padding:0;} +.m1m9sbk4{font-family:'Lexend Deca';font-style:normal;font-weight:400;font-size:14px;margin:0;padding:0;} +.mg5o421{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlBbGVydC50c3giXSwibmFtZXMiOlsiLmExaDhtNGZvIiwiLnR5bmR6eGsiLCIubTFtOXNiazQiLCIubWc1bzQyMSJdLCJtYXBwaW5ncyI6IkFBR3VCQTtBQW1CVEM7QUFVRUM7QUFRU0MiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSUFsZXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBNQVJJR09MRF9MSUdIVCwgTUFSSUdPTERfTUVESVVNLCBPQlNJRElBTiB9IGZyb20gJy4vY29sb3JzJztcbmNvbnN0IEFsZXJ0Q29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7TUFSSUdPTERfTElHSFR9O1xuICBib3JkZXItY29sb3I6ICR7TUFSSUdPTERfTUVESVVNfTtcbiAgY29sb3I6ICR7T0JTSURJQU59O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBtaW4taGVpZ2h0OiA2MHB4O1xuICBwYWRkaW5nOiA4cHggMjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuYDtcbmNvbnN0IFRpdGxlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICBjb2xvcjogJHtPQlNJRElBTn07XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVUlBbGVydCh7IHRpdGxlVGV4dCwgdGl0bGVNZXNzYWdlLCBjaGlsZHJlbiwgfSkge1xuICAgIHJldHVybiAoX2pzeHMoQWxlcnRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhNZXNzYWdlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChUaXRsZSwgeyBjaGlsZHJlbjogdGl0bGVUZXh0IH0pLCBfanN4KE1lc3NhZ2UsIHsgY2hpbGRyZW46IHRpdGxlTWVzc2FnZSB9KV0gfSksIGNoaWxkcmVuXSB9KSk7XG59XG4iXX0=*/ + +/*# sourceMappingURL=elementor.css.map*/ \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/elementor.css.map b/wp/wp-content/plugins/leadin/build/elementor.css.map new file mode 100644 index 00000000..43be833e --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/elementor.css.map @@ -0,0 +1 @@ +{"version":3,"file":"elementor.css","mappings":"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","sources":["webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx","webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx","webpack://leadin/./scripts/elementor/Common/ElementorButton.tsx","webpack://leadin/./scripts/elementor/Common/ElementorButton.tsx","webpack://leadin/./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx","webpack://leadin/./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { CALYPSO_MEDIUM, CALYPSO } from './colors';\nconst SpinnerOuter = styled.div `\n align-items: center;\n color: #00a4bd;\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 100%;\n height: 100%;\n margin: '2px';\n`;\nconst SpinnerInner = styled.div `\n align-items: center;\n display: flex;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\nconst Circle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n`;\nconst AnimatedCircle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n animation: dashAnimation 2s ease-in-out infinite,\n spinAnimation 2s linear infinite;\n\n @keyframes dashAnimation {\n 0% {\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -50;\n }\n\n 100% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -140;\n }\n }\n\n @keyframes spinAnimation {\n transform: rotate(360deg);\n }\n`;\nexport default function UISpinner({ size = 20 }) {\n return (_jsx(SpinnerOuter, { children: _jsx(SpinnerInner, { children: _jsxs(\"svg\", { height: size, width: size, viewBox: \"0 0 50 50\", children: [_jsx(Circle, { color: CALYPSO_MEDIUM, cx: \"25\", cy: \"25\", r: \"22.5\" }), _jsx(AnimatedCircle, { color: CALYPSO, cx: \"25\", cy: \"25\", r: \"22.5\" })] }) }) }));\n}\n",".sxa9zrc{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#00a4bd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;margin:'2px';}\n.s14430wa{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;}\n.ct87ghk{fill:none;stroke:var(--ct87ghk-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;}\n.avili0h{fill:none;stroke:var(--avili0h-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;}@-webkit-keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@-webkit-keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGlubmVyLnRzeCJdLCJuYW1lcyI6WyIuc3hhOXpyYyIsIi5zMTQ0MzB3YSIsIi5jdDg3Z2hrIiwiLmF2aWxpMGgiXSwibWFwcGluZ3MiOiJBQUdxQkE7QUFVQUM7QUFPTkM7QUFPUUMiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSVNwaW5uZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmltcG9ydCB7IENBTFlQU09fTUVESVVNLCBDQUxZUFNPIH0gZnJvbSAnLi9jb2xvcnMnO1xuY29uc3QgU3Bpbm5lck91dGVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMDBhNGJkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAnMnB4JztcbmA7XG5jb25zdCBTcGlubmVySW5uZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuY29uc3QgQ2lyY2xlID0gc3R5bGVkLmNpcmNsZSBgXG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy5jb2xvcn07XG4gIHN0cm9rZS13aWR0aDogNTtcbiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG5gO1xuY29uc3QgQW5pbWF0ZWRDaXJjbGUgPSBzdHlsZWQuY2lyY2xlIGBcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlOiAke3Byb3BzID0+IHByb3BzLmNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiA1O1xuICBzdHJva2UtbGluZWNhcDogcm91bmQ7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgYW5pbWF0aW9uOiBkYXNoQW5pbWF0aW9uIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLFxuICAgIHNwaW5BbmltYXRpb24gMnMgbGluZWFyIGluZmluaXRlO1xuXG4gIEBrZXlmcmFtZXMgZGFzaEFuaW1hdGlvbiB7XG4gICAgMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTUwO1xuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gICAgfVxuXG4gICAgNTAlIHtcbiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDkwLCAxNTA7XG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogLTUwO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogOTAsIDE1MDtcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTQwO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc3BpbkFuaW1hdGlvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVJU3Bpbm5lcih7IHNpemUgPSAyMCB9KSB7XG4gICAgcmV0dXJuIChfanN4KFNwaW5uZXJPdXRlciwgeyBjaGlsZHJlbjogX2pzeChTcGlubmVySW5uZXIsIHsgY2hpbGRyZW46IF9qc3hzKFwic3ZnXCIsIHsgaGVpZ2h0OiBzaXplLCB3aWR0aDogc2l6ZSwgdmlld0JveDogXCIwIDAgNTAgNTBcIiwgY2hpbGRyZW46IFtfanN4KENpcmNsZSwgeyBjb2xvcjogQ0FMWVBTT19NRURJVU0sIGN4OiBcIjI1XCIsIGN5OiBcIjI1XCIsIHI6IFwiMjIuNVwiIH0pLCBfanN4KEFuaW1hdGVkQ2lyY2xlLCB7IGNvbG9yOiBDQUxZUFNPLCBjeDogXCIyNVwiLCBjeTogXCIyNVwiLCByOiBcIjIyLjVcIiB9KV0gfSkgfSkgfSkpO1xufVxuIl19*/","import { styled } from '@linaria/react';\nimport { HEFFALUMP, LORAX, OLAF } from './colors';\nexport default styled.button `\n background-color:${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n border: 3px solid ${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n color: ${OLAF}\n border-radius: 3px;\n font-size: 14px;\n line-height: 14px;\n padding: 12px 24px;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-weight: 500;\n white-space: nowrap;\n`;\n",".ug152ch{background-color:var(--ug152ch-0);border:3px solid var(--ug152ch-0);color:#ffffff;border-radius:3px;font-size:14px;line-height:14px;padding:12px 24px;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-weight:500;white-space:nowrap;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlCdXR0b24udHMiXSwibmFtZXMiOlsiLnVnMTUyY2giXSwibWFwcGluZ3MiOiJBQUVlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQnV0dG9uLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuaW1wb3J0IHsgSEVGRkFMVU1QLCBMT1JBWCwgT0xBRiB9IGZyb20gJy4vY29sb3JzJztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5idXR0b24gYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGJvcmRlcjogM3B4IHNvbGlkICR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGNvbG9yOiAke09MQUZ9XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTRweDtcbiAgcGFkZGluZzogMTJweCAyNHB4O1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmA7XG4iXX0=*/","import { styled } from '@linaria/react';\nexport default styled.div `\n text-align: ${props => (props.textAlign ? props.textAlign : 'inherit')};\n`;\n",".ua13n1c{text-align:var(--ua13n1c-0);}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlDb250YWluZXIudHMiXSwibmFtZXMiOlsiLnVhMTNuMWMiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQ29udGFpbmVyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHRleHQtYWxpZ246ICR7cHJvcHMgPT4gKHByb3BzLnRleHRBbGlnbiA/IHByb3BzLnRleHRBbGlnbiA6ICdpbmhlcml0Jyl9O1xuYDtcbiJdfQ==*/","import { styled } from '@linaria/react';\nexport default styled.div `\n background-image: ${props => `url(${props.pluginPath}/public/assets/images/hubspot.svg)`};\n background-color: #f5f8fa;\n background-repeat: no-repeat;\n background-position: center 25px;\n background-size: 120px;\n color: #33475b;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n\n padding: ${(props) => props.padding || '90px 20% 25px'};\n\n p {\n font-size: inherit !important;\n line-height: 24px;\n margin: 4px 0;\n }\n`;\n",".h1q5v5ee{background-image:var(--h1q5v5ee-0);background-color:#f5f8fa;background-repeat:no-repeat;background-position:center 25px;background-size:120px;color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;padding:var(--h1q5v5ee-1);}.h1q5v5ee p{font-size:inherit !important;line-height:24px;margin:4px 0;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vSHVic3BvdFdyYXBwZXIudHMiXSwibmFtZXMiOlsiLmgxcTV2NWVlIl0sIm1hcHBpbmdzIjoiQUFDZUEiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL0NvbW1vbi9IdWJzcG90V3JhcHBlci50cyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5kaXYgYFxuICBiYWNrZ3JvdW5kLWltYWdlOiAke3Byb3BzID0+IGB1cmwoJHtwcm9wcy5wbHVnaW5QYXRofS9wdWJsaWMvYXNzZXRzL2ltYWdlcy9odWJzcG90LnN2ZylgfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjhmYTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDI1cHg7XG4gIGJhY2tncm91bmQtc2l6ZTogMTIwcHg7XG4gIGNvbG9yOiAjMzM0NzViO1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuXG4gIHBhZGRpbmc6ICR7KHByb3BzKSA9PiBwcm9wcy5wYWRkaW5nIHx8ICc5MHB4IDIwJSAyNXB4J307XG5cbiAgcCB7XG4gICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgfVxuYDtcbiJdfQ==*/","import { styled } from '@linaria/react';\nexport default styled.div `\n height: 30px;\n`;\n",".u3qxofx{height:30px;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGFjZXIudHMiXSwibmFtZXMiOlsiLnUzcXhvZngiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJU3BhY2VyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIGhlaWdodDogMzBweDtcbmA7XG4iXX0=*/","import { styled } from '@linaria/react';\nexport default styled.div `\n position: relative;\n\n &:after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n }\n`;\n",".u1q7a48k{position:relative;}.u1q7a48k:after{content:'';position:absolute;top:0;bottom:0;right:0;left:0;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIl0sIm5hbWVzIjpbIi51MXE3YTQ4ayJdLCJtYXBwaW5ncyI6IkFBQ2VBIiwiZmlsZSI6Ii91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5gO1xuIl19*/","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef, useState, useEffect } from 'react';\nimport { styled } from '@linaria/react';\nimport { CALYPSO, CALYPSO_LIGHT, CALYPSO_MEDIUM, OBSIDIAN, } from '../UIComponents/colors';\nimport UISpinner from '../UIComponents/UISpinner';\nimport LoadState from '../enums/loadState';\nconst Container = styled.div `\n color: ${OBSIDIAN};\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n position: relative;\n`;\nconst ControlContainer = styled.div `\n align-items: center;\n background-color: hsl(0, 0%, 100%);\n border-color: hsl(0, 0%, 80%);\n border-radius: 4px;\n border-style: solid;\n border-width: ${props => (props.focused ? '0' : '1px')};\n cursor: default;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n min-height: 38px;\n outline: 0 !important;\n position: relative;\n transition: all 100ms;\n box-sizing: border-box;\n box-shadow: ${props => props.focused ? `0 0 0 2px ${CALYPSO_MEDIUM}` : 'none'};\n &:hover {\n border-color: hsl(0, 0%, 70%);\n }\n`;\nconst ValueContainer = styled.div `\n align-items: center;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n padding: 2px 8px;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n`;\nconst Placeholder = styled.div `\n color: hsl(0, 0%, 50%);\n margin-left: 2px;\n margin-right: 2px;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n font-size: 16px;\n`;\nconst SingleValue = styled.div `\n color: hsl(0, 0%, 20%);\n margin-left: 2px;\n margin-right: 2px;\n max-width: calc(100% - 8px);\n overflow: hidden;\n position: absolute;\n text-overflow: ellipsis;\n white-space: nowrap;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n`;\nconst IndicatorContainer = styled.div `\n align-items: center;\n align-self: stretch;\n display: flex;\n flex-shrink: 0;\n box-sizing: border-box;\n`;\nconst DropdownIndicator = styled.div `\n border-top: 8px solid ${CALYPSO};\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n width: 0px;\n height: 0px;\n margin: 10px;\n`;\nconst InputContainer = styled.div `\n margin: 2px;\n padding-bottom: 2px;\n padding-top: 2px;\n visibility: visible;\n color: hsl(0, 0%, 20%);\n box-sizing: border-box;\n`;\nconst Input = styled.input `\n box-sizing: content-box;\n background: rgba(0, 0, 0, 0) none repeat scroll 0px center;\n border: 0px none;\n font-size: inherit;\n opacity: 1;\n outline: currentcolor none 0px;\n padding: 0px;\n color: inherit;\n font-family: inherit;\n`;\nconst InputShadow = styled.div `\n position: absolute;\n opacity: 0;\n font-size: inherit;\n`;\nconst MenuContainer = styled.div `\n position: absolute;\n top: 100%;\n background-color: #fff;\n border-radius: 4px;\n margin-bottom: 8px;\n margin-top: 8px;\n z-index: 9999;\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1);\n width: 100%;\n`;\nconst MenuList = styled.div `\n max-height: 300px;\n overflow-y: auto;\n padding-bottom: 4px;\n padding-top: 4px;\n position: relative;\n`;\nconst MenuGroup = styled.div `\n padding-bottom: 8px;\n padding-top: 8px;\n`;\nconst MenuGroupHeader = styled.div `\n color: #999;\n cursor: default;\n font-size: 75%;\n font-weight: 500;\n margin-bottom: 0.25em;\n text-transform: uppercase;\n padding-left: 12px;\n padding-left: 12px;\n`;\nconst MenuItem = styled.div `\n display: block;\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : 'transparent'};\n color: ${props => (props.selected ? '#fff' : 'inherit')};\n cursor: default;\n font-size: inherit;\n width: 100%;\n padding: 8px 12px;\n &:hover {\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : CALYPSO_LIGHT};\n }\n`;\nexport default function AsyncSelect({ placeholder, value, loadOptions, onChange, defaultOptions, }) {\n const inputEl = useRef(null);\n const inputShadowEl = useRef(null);\n const [isFocused, setFocus] = useState(false);\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [localValue, setLocalValue] = useState('');\n const [options, setOptions] = useState(defaultOptions);\n const inputSize = `${inputShadowEl.current ? inputShadowEl.current.clientWidth + 10 : 2}px`;\n useEffect(() => {\n if (loadOptions && loadState === LoadState.NotLoaded) {\n loadOptions('', (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }\n }, [loadOptions, loadState]);\n const renderItems = (items = [], parentKey) => {\n return items.map((item, index) => {\n if (item.options) {\n return (_jsxs(MenuGroup, { children: [_jsx(MenuGroupHeader, { id: `${index}-heading`, children: item.label }), _jsx(\"div\", { children: renderItems(item.options, index) })] }, `async-select-item-${index}`));\n }\n else {\n const key = `async-select-item-${parentKey !== undefined ? `${parentKey}-${index}` : index}`;\n return (_jsx(MenuItem, { id: key, selected: value && item.value === value.value, onClick: () => {\n onChange(item);\n setFocus(false);\n }, children: item.label }, key));\n }\n });\n };\n return (_jsxs(Container, { children: [_jsxs(ControlContainer, { id: \"leadin-async-selector\", focused: isFocused, onClick: () => {\n if (isFocused) {\n if (inputEl.current) {\n inputEl.current.blur();\n }\n setFocus(false);\n setLocalValue('');\n }\n else {\n if (inputEl.current) {\n inputEl.current.focus();\n }\n setFocus(true);\n }\n }, children: [_jsxs(ValueContainer, { children: [localValue === '' &&\n (!value ? (_jsx(Placeholder, { children: placeholder })) : (_jsx(SingleValue, { children: value.label }))), _jsxs(InputContainer, { children: [_jsx(Input, { ref: inputEl, onFocus: () => {\n setFocus(true);\n }, onChange: e => {\n setLocalValue(e.target.value);\n setLoadState(LoadState.Loading);\n loadOptions &&\n loadOptions(e.target.value, (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }, value: localValue, width: inputSize, id: \"asycn-select-input\" }), _jsx(InputShadow, { ref: inputShadowEl, children: localValue })] })] }), _jsxs(IndicatorContainer, { children: [loadState === LoadState.Loading && _jsx(UISpinner, {}), _jsx(DropdownIndicator, {})] })] }), isFocused && (_jsx(MenuContainer, { children: _jsx(MenuList, { children: renderItems(options) }) }))] }));\n}\n",".c1wxx7eu{color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;position:relative;}\n.c1rgwbep{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:hsl(0,0%,100%);border-color:hsl(0,0%,80%);border-radius:4px;border-style:solid;border-width:var(--c1rgwbep-0);cursor:default;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:38px;outline:0 !important;position:relative;-webkit-transition:all 100ms;transition:all 100ms;box-sizing:border-box;box-shadow:var(--c1rgwbep-1);}.c1rgwbep:hover{border-color:hsl(0,0%,70%);}\n.v1mdmbaj{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:2px 8px;position:relative;overflow:hidden;box-sizing:border-box;}\n.p1gwkvxy{color:hsl(0,0%,50%);margin-left:2px;margin-right:2px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;font-size:16px;}\n.s1bwlafs{color:hsl(0,0%,20%);margin-left:2px;margin-right:2px;max-width:calc(100% - 8px);overflow:hidden;position:absolute;text-overflow:ellipsis;white-space:nowrap;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;}\n.i196z9y5{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;}\n.d1dfo5ow{border-top:8px solid #00a4bd;border-left:6px solid transparent;border-right:6px solid transparent;width:0px;height:0px;margin:10px;}\n.if3lze{margin:2px;padding-bottom:2px;padding-top:2px;visibility:visible;color:hsl(0,0%,20%);box-sizing:border-box;}\n.i9kxf50{box-sizing:content-box;background:rgba(0,0,0,0) none repeat scroll 0px center;border:0px none;font-size:inherit;opacity:1;outline:currentcolor none 0px;padding:0px;color:inherit;font-family:inherit;}\n.igjr3uc{position:absolute;opacity:0;font-size:inherit;}\n.mhb9if7{position:absolute;top:100%;background-color:#fff;border-radius:4px;margin-bottom:8px;margin-top:8px;z-index:9999;box-shadow:0 0 0 1px hsla(0,0%,0%,0.1),0 4px 11px hsla(0,0%,0%,0.1);width:100%;}\n.mxaof7s{max-height:300px;overflow-y:auto;padding-bottom:4px;padding-top:4px;position:relative;}\n.mw50s5v{padding-bottom:8px;padding-top:8px;}\n.m11rzvjw{color:#999;cursor:default;font-size:75%;font-weight:500;margin-bottom:0.25em;text-transform:uppercase;padding-left:12px;padding-left:12px;}\n.m1jcdsjv{display:block;background-color:var(--m1jcdsjv-0);color:var(--m1jcdsjv-1);cursor:default;font-size:inherit;width:100%;padding:8px 12px;}.m1jcdsjv:hover{background-color:var(--m1jcdsjv-2);}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vQXN5bmNTZWxlY3QudHN4Il0sIm5hbWVzIjpbIi5jMXd4eDdldSIsIi5jMXJnd2JlcCIsIi52MW1kbWJhaiIsIi5wMWd3a3Z4eSIsIi5zMWJ3bGFmcyIsIi5pMTk2ejl5NSIsIi5kMWRmbzVvdyIsIi5pZjNsemUiLCIuaTlreGY1MCIsIi5pZ2pyM3VjIiwiLm1oYjlpZjciLCIubXhhb2Y3cyIsIi5tdzUwczV2IiwiLm0xMXJ6dmp3IiwiLm0xamNkc2p2Il0sIm1hcHBpbmdzIjoiQUFNa0JBO0FBTU9DO0FBcUJGQztBQVVIQztBQVVBQztBQWFPQztBQU9EQztBQVFIQztBQVFUQztBQVdNQztBQUtFQztBQVdMQztBQU9DQztBQUlNQztBQVVQQyIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvQ29tbW9uL0FzeW5jU2VsZWN0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBDQUxZUFNPLCBDQUxZUFNPX0xJR0hULCBDQUxZUFNPX01FRElVTSwgT0JTSURJQU4sIH0gZnJvbSAnLi4vVUlDb21wb25lbnRzL2NvbG9ycyc7XG5pbXBvcnQgVUlTcGlubmVyIGZyb20gJy4uL1VJQ29tcG9uZW50cy9VSVNwaW5uZXInO1xuaW1wb3J0IExvYWRTdGF0ZSBmcm9tICcuLi9lbnVtcy9sb2FkU3RhdGUnO1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiAke09CU0lESUFOfTtcbiAgZm9udC1mYW1pbHk6ICdMZXhlbmQgRGVjYScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcbmNvbnN0IENvbnRyb2xDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDAsIDAlLCAxMDAlKTtcbiAgYm9yZGVyLWNvbG9yOiBoc2woMCwgMCUsIDgwJSk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAke3Byb3BzID0+IChwcm9wcy5mb2N1c2VkID8gJzAnIDogJzFweCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWluLWhlaWdodDogMzhweDtcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IGFsbCAxMDBtcztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogJHtwcm9wcyA9PiBwcm9wcy5mb2N1c2VkID8gYDAgMCAwIDJweCAke0NBTFlQU09fTUVESVVNfWAgOiAnbm9uZSd9O1xuICAmOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IGhzbCgwLCAwJSwgNzAlKTtcbiAgfVxuYDtcbmNvbnN0IFZhbHVlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZzogMnB4IDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IFBsYWNlaG9sZGVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiBoc2woMCwgMCUsIDUwJSk7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZvbnQtc2l6ZTogMTZweDtcbmA7XG5jb25zdCBTaW5nbGVWYWx1ZSA9IHN0eWxlZC5kaXYgYFxuICBjb2xvcjogaHNsKDAsIDAlLCAyMCUpO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA4cHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IEluZGljYXRvckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXNocmluazogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbmA7XG5jb25zdCBEcm9wZG93bkluZGljYXRvciA9IHN0eWxlZC5kaXYgYFxuICBib3JkZXItdG9wOiA4cHggc29saWQgJHtDQUxZUFNPfTtcbiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdpZHRoOiAwcHg7XG4gIGhlaWdodDogMHB4O1xuICBtYXJnaW46IDEwcHg7XG5gO1xuY29uc3QgSW5wdXRDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luOiAycHg7XG4gIHBhZGRpbmctYm90dG9tOiAycHg7XG4gIHBhZGRpbmctdG9wOiAycHg7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGNvbG9yOiBoc2woMCwgMCUsIDIwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5gO1xuY29uc3QgSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKSBub25lIHJlcGVhdCBzY3JvbGwgMHB4IGNlbnRlcjtcbiAgYm9yZGVyOiAwcHggbm9uZTtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBvcGFjaXR5OiAxO1xuICBvdXRsaW5lOiBjdXJyZW50Y29sb3Igbm9uZSAwcHg7XG4gIHBhZGRpbmc6IDBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuYDtcbmNvbnN0IElucHV0U2hhZG93ID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3BhY2l0eTogMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuYDtcbmNvbnN0IE1lbnVDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIHotaW5kZXg6IDk5OTk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuY29uc3QgTWVudUxpc3QgPSBzdHlsZWQuZGl2IGBcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gIHBhZGRpbmctdG9wOiA0cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG5jb25zdCBNZW51R3JvdXAgPSBzdHlsZWQuZGl2IGBcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgcGFkZGluZy10b3A6IDhweDtcbmA7XG5jb25zdCBNZW51R3JvdXBIZWFkZXIgPSBzdHlsZWQuZGl2IGBcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIG1hcmdpbi1ib3R0b206IDAuMjVlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG5gO1xuY29uc3QgTWVudUl0ZW0gPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuc2VsZWN0ZWQgPyBDQUxZUFNPX01FRElVTSA6ICd0cmFuc3BhcmVudCd9O1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2ZmZicgOiAnaW5oZXJpdCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiA4cHggMTJweDtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCA/IENBTFlQU09fTUVESVVNIDogQ0FMWVBTT19MSUdIVH07XG4gIH1cbmA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBc3luY1NlbGVjdCh7IHBsYWNlaG9sZGVyLCB2YWx1ZSwgbG9hZE9wdGlvbnMsIG9uQ2hhbmdlLCBkZWZhdWx0T3B0aW9ucywgfSkge1xuICAgIGNvbnN0IGlucHV0RWwgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaW5wdXRTaGFkb3dFbCA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbaXNGb2N1c2VkLCBzZXRGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2xvYWRTdGF0ZSwgc2V0TG9hZFN0YXRlXSA9IHVzZVN0YXRlKExvYWRTdGF0ZS5Ob3RMb2FkZWQpO1xuICAgIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgY29uc3QgaW5wdXRTaXplID0gYCR7aW5wdXRTaGFkb3dFbC5jdXJyZW50ID8gaW5wdXRTaGFkb3dFbC5jdXJyZW50LmNsaWVudFdpZHRoICsgMTAgOiAyfXB4YDtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobG9hZE9wdGlvbnMgJiYgbG9hZFN0YXRlID09PSBMb2FkU3RhdGUuTm90TG9hZGVkKSB7XG4gICAgICAgICAgICBsb2FkT3B0aW9ucygnJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldE9wdGlvbnMocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLklkbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbbG9hZE9wdGlvbnMsIGxvYWRTdGF0ZV0pO1xuICAgIGNvbnN0IHJlbmRlckl0ZW1zID0gKGl0ZW1zID0gW10sIHBhcmVudEtleSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeHMoTWVudUdyb3VwLCB7IGNoaWxkcmVuOiBbX2pzeChNZW51R3JvdXBIZWFkZXIsIHsgaWQ6IGAke2luZGV4fS1oZWFkaW5nYCwgY2hpbGRyZW46IGl0ZW0ubGFiZWwgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogcmVuZGVySXRlbXMoaXRlbS5vcHRpb25zLCBpbmRleCkgfSldIH0sIGBhc3luYy1zZWxlY3QtaXRlbS0ke2luZGV4fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGBhc3luYy1zZWxlY3QtaXRlbS0ke3BhcmVudEtleSAhPT0gdW5kZWZpbmVkID8gYCR7cGFyZW50S2V5fS0ke2luZGV4fWAgOiBpbmRleH1gO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChNZW51SXRlbSwgeyBpZDoga2V5LCBzZWxlY3RlZDogdmFsdWUgJiYgaXRlbS52YWx1ZSA9PT0gdmFsdWUudmFsdWUsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogaXRlbS5sYWJlbCB9LCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3hzKENvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKENvbnRyb2xDb250YWluZXIsIHsgaWQ6IFwibGVhZGluLWFzeW5jLXNlbGVjdG9yXCIsIGZvY3VzZWQ6IGlzRm9jdXNlZCwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbC5jdXJyZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWwuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWwuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW19qc3hzKFZhbHVlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbbG9jYWxWYWx1ZSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF2YWx1ZSA/IChfanN4KFBsYWNlaG9sZGVyLCB7IGNoaWxkcmVuOiBwbGFjZWhvbGRlciB9KSkgOiAoX2pzeChTaW5nbGVWYWx1ZSwgeyBjaGlsZHJlbjogdmFsdWUubGFiZWwgfSkpKSwgX2pzeHMoSW5wdXRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KElucHV0LCB7IHJlZjogaW5wdXRFbCwgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb2N1cyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkNoYW5nZTogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLkxvYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnMoZS50YXJnZXQudmFsdWUsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRPcHRpb25zKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZFN0YXRlKExvYWRTdGF0ZS5JZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbHVlOiBsb2NhbFZhbHVlLCB3aWR0aDogaW5wdXRTaXplLCBpZDogXCJhc3ljbi1zZWxlY3QtaW5wdXRcIiB9KSwgX2pzeChJbnB1dFNoYWRvdywgeyByZWY6IGlucHV0U2hhZG93RWwsIGNoaWxkcmVuOiBsb2NhbFZhbHVlIH0pXSB9KV0gfSksIF9qc3hzKEluZGljYXRvckNvbnRhaW5lciwgeyBjaGlsZHJlbjogW2xvYWRTdGF0ZSA9PT0gTG9hZFN0YXRlLkxvYWRpbmcgJiYgX2pzeChVSVNwaW5uZXIsIHt9KSwgX2pzeChEcm9wZG93bkluZGljYXRvciwge30pXSB9KV0gfSksIGlzRm9jdXNlZCAmJiAoX2pzeChNZW51Q29udGFpbmVyLCB7IGNoaWxkcmVuOiBfanN4KE1lbnVMaXN0LCB7IGNoaWxkcmVuOiByZW5kZXJJdGVtcyhvcHRpb25zKSB9KSB9KSldIH0pKTtcbn1cbiJdfQ==*/","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nconst Container = styled.div `\n display: flex;\n justify-content: center;\n padding-bottom: 8px;\n`;\nexport default function ElementorButton({ children, ...params }) {\n return (_jsx(Container, { className: \"elementor-button-wrapper\", children: _jsx(\"button\", { className: \"elementor-button elementor-button-default\", type: \"button\", ...params, children: children }) }));\n}\n",".czoccom{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:8px;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2VsZW1lbnRvci9Db21tb24vRWxlbWVudG9yQnV0dG9uLnRzeCJdLCJuYW1lcyI6WyIuY3pvY2NvbSJdLCJtYXBwaW5ncyI6IkFBRWtCQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9lbGVtZW50b3IvQ29tbW9uL0VsZW1lbnRvckJ1dHRvbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuYDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVsZW1lbnRvckJ1dHRvbih7IGNoaWxkcmVuLCAuLi5wYXJhbXMgfSkge1xuICAgIHJldHVybiAoX2pzeChDb250YWluZXIsIHsgY2xhc3NOYW1lOiBcImVsZW1lbnRvci1idXR0b24td3JhcHBlclwiLCBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJlbGVtZW50b3ItYnV0dG9uIGVsZW1lbnRvci1idXR0b24tZGVmYXVsdFwiLCB0eXBlOiBcImJ1dHRvblwiLCAuLi5wYXJhbXMsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KSB9KSk7XG59XG4iXX0=*/","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { CURRENT_USER_CALENDAR_MISSING } from '../../shared/Meeting/constants';\nimport ElementorButton from '../Common/ElementorButton';\nimport ElementorBanner from '../Common/ElementorBanner';\nimport { styled } from '@linaria/react';\nimport { __ } from '@wordpress/i18n';\nconst Container = styled.div `\n padding-bottom: 8px;\n`;\nexport default function MeetingWarning({ onConnectCalendar, status, }) {\n const isMeetingOwner = status === CURRENT_USER_CALENDAR_MISSING;\n const titleText = isMeetingOwner\n ? __('Your calendar is not connected', 'leadin')\n : __('Calendar is not connected', 'leadin');\n const titleMessage = isMeetingOwner\n ? __('Please connect your calendar to activate your scheduling pages', 'leadin')\n : __('Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', 'leadin');\n return (_jsxs(Fragment, { children: [_jsx(Container, { children: _jsxs(ElementorBanner, { type: \"warning\", children: [_jsx(\"b\", { children: titleText }), _jsx(\"br\", {}), titleMessage] }) }), isMeetingOwner && (_jsx(ElementorButton, { id: \"meetings-connect-calendar\", onClick: onConnectCalendar, children: __('Connect calendar', 'leadin') }))] }));\n}\n",".c1p032ba{padding-bottom:8px;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2VsZW1lbnRvci9NZWV0aW5nV2lkZ2V0L0VsZW1lbnRvck1lZXRpbmdXYXJuaW5nLnRzeCJdLCJuYW1lcyI6WyIuYzFwMDMyYmEiXSwibWFwcGluZ3MiOiJBQU9rQkEiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvZWxlbWVudG9yL01lZXRpbmdXaWRnZXQvRWxlbWVudG9yTWVldGluZ1dhcm5pbmcudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ1VSUkVOVF9VU0VSX0NBTEVOREFSX01JU1NJTkcgfSBmcm9tICcuLi8uLi9zaGFyZWQvTWVldGluZy9jb25zdGFudHMnO1xuaW1wb3J0IEVsZW1lbnRvckJ1dHRvbiBmcm9tICcuLi9Db21tb24vRWxlbWVudG9yQnV0dG9uJztcbmltcG9ydCBFbGVtZW50b3JCYW5uZXIgZnJvbSAnLi4vQ29tbW9uL0VsZW1lbnRvckJhbm5lcic7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbmA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZWV0aW5nV2FybmluZyh7IG9uQ29ubmVjdENhbGVuZGFyLCBzdGF0dXMsIH0pIHtcbiAgICBjb25zdCBpc01lZXRpbmdPd25lciA9IHN0YXR1cyA9PT0gQ1VSUkVOVF9VU0VSX0NBTEVOREFSX01JU1NJTkc7XG4gICAgY29uc3QgdGl0bGVUZXh0ID0gaXNNZWV0aW5nT3duZXJcbiAgICAgICAgPyBfXygnWW91ciBjYWxlbmRhciBpcyBub3QgY29ubmVjdGVkJywgJ2xlYWRpbicpXG4gICAgICAgIDogX18oJ0NhbGVuZGFyIGlzIG5vdCBjb25uZWN0ZWQnLCAnbGVhZGluJyk7XG4gICAgY29uc3QgdGl0bGVNZXNzYWdlID0gaXNNZWV0aW5nT3duZXJcbiAgICAgICAgPyBfXygnUGxlYXNlIGNvbm5lY3QgeW91ciBjYWxlbmRhciB0byBhY3RpdmF0ZSB5b3VyIHNjaGVkdWxpbmcgcGFnZXMnLCAnbGVhZGluJylcbiAgICAgICAgOiBfXygnTWFrZSBzdXJlIHRoYXQgZXZlcnlib2R5IGluIHRoaXMgbWVldGluZyBoYXMgY29ubmVjdGVkIHRoZWlyIGNhbGVuZGFyIGZyb20gdGhlIE1lZXRpbmdzIHBhZ2UgaW4gSHViU3BvdCcsICdsZWFkaW4nKTtcbiAgICByZXR1cm4gKF9qc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChDb250YWluZXIsIHsgY2hpbGRyZW46IF9qc3hzKEVsZW1lbnRvckJhbm5lciwgeyB0eXBlOiBcIndhcm5pbmdcIiwgY2hpbGRyZW46IFtfanN4KFwiYlwiLCB7IGNoaWxkcmVuOiB0aXRsZVRleHQgfSksIF9qc3goXCJiclwiLCB7fSksIHRpdGxlTWVzc2FnZV0gfSkgfSksIGlzTWVldGluZ093bmVyICYmIChfanN4KEVsZW1lbnRvckJ1dHRvbiwgeyBpZDogXCJtZWV0aW5ncy1jb25uZWN0LWNhbGVuZGFyXCIsIG9uQ2xpY2s6IG9uQ29ubmVjdENhbGVuZGFyLCBjaGlsZHJlbjogX18oJ0Nvbm5lY3QgY2FsZW5kYXInLCAnbGVhZGluJykgfSkpXSB9KSk7XG59XG4iXX0=*/","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { MARIGOLD_LIGHT, MARIGOLD_MEDIUM, OBSIDIAN } from './colors';\nconst AlertContainer = styled.div `\n background-color: ${MARIGOLD_LIGHT};\n border-color: ${MARIGOLD_MEDIUM};\n color: ${OBSIDIAN};\n font-size: 14px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n border-style: solid;\n border-top-style: solid;\n border-right-style: solid;\n border-bottom-style: solid;\n border-left-style: solid;\n border-width: 1px;\n min-height: 60px;\n padding: 8px 20px;\n position: relative;\n text-align: left;\n`;\nconst Title = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 700;\n font-size: 16px;\n line-height: 19px;\n color: ${OBSIDIAN};\n margin: 0;\n padding: 0;\n`;\nconst Message = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n margin: 0;\n padding: 0;\n`;\nconst MessageContainer = styled.div `\n display: flex;\n flex-direction: column;\n`;\nexport default function UIAlert({ titleText, titleMessage, children, }) {\n return (_jsxs(AlertContainer, { children: [_jsxs(MessageContainer, { children: [_jsx(Title, { children: titleText }), _jsx(Message, { children: titleMessage })] }), children] }));\n}\n",".a1h8m4fo{background-color:#fef8f0;border-color:#fae0b5;color:#33475b;font-size:14px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-style:solid;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-width:1px;min-height:60px;padding:8px 20px;position:relative;text-align:left;}\n.tyndzxk{font-family:'Lexend Deca';font-style:normal;font-weight:700;font-size:16px;line-height:19px;color:#33475b;margin:0;padding:0;}\n.m1m9sbk4{font-family:'Lexend Deca';font-style:normal;font-weight:400;font-size:14px;margin:0;padding:0;}\n.mg5o421{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlBbGVydC50c3giXSwibmFtZXMiOlsiLmExaDhtNGZvIiwiLnR5bmR6eGsiLCIubTFtOXNiazQiLCIubWc1bzQyMSJdLCJtYXBwaW5ncyI6IkFBR3VCQTtBQW1CVEM7QUFVRUM7QUFRU0MiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSUFsZXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBNQVJJR09MRF9MSUdIVCwgTUFSSUdPTERfTUVESVVNLCBPQlNJRElBTiB9IGZyb20gJy4vY29sb3JzJztcbmNvbnN0IEFsZXJ0Q29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7TUFSSUdPTERfTElHSFR9O1xuICBib3JkZXItY29sb3I6ICR7TUFSSUdPTERfTUVESVVNfTtcbiAgY29sb3I6ICR7T0JTSURJQU59O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBtaW4taGVpZ2h0OiA2MHB4O1xuICBwYWRkaW5nOiA4cHggMjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuYDtcbmNvbnN0IFRpdGxlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICBjb2xvcjogJHtPQlNJRElBTn07XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVUlBbGVydCh7IHRpdGxlVGV4dCwgdGl0bGVNZXNzYWdlLCBjaGlsZHJlbiwgfSkge1xuICAgIHJldHVybiAoX2pzeHMoQWxlcnRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhNZXNzYWdlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChUaXRsZSwgeyBjaGlsZHJlbjogdGl0bGVUZXh0IH0pLCBfanN4KE1lc3NhZ2UsIHsgY2hpbGRyZW46IHRpdGxlTWVzc2FnZSB9KV0gfSksIGNoaWxkcmVuXSB9KSk7XG59XG4iXX0=*/"],"names":[".sxa9zrc",".s14430wa",".ct87ghk",".avili0h",".ug152ch",".ua13n1c",".h1q5v5ee",".u3qxofx",".u1q7a48k",".c1wxx7eu",".c1rgwbep",".v1mdmbaj",".p1gwkvxy",".s1bwlafs",".i196z9y5",".d1dfo5ow",".if3lze",".i9kxf50",".igjr3uc",".mhb9if7",".mxaof7s",".mw50s5v",".m11rzvjw",".m1jcdsjv",".czoccom",".c1p032ba",".a1h8m4fo",".tyndzxk",".m1m9sbk4",".mg5o421"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/elementor.js b/wp/wp-content/plugins/leadin/build/elementor.js new file mode 100644 index 00000000..085ff5c5 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/elementor.js @@ -0,0 +1,8991 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +function memoize(fn) { + var cache = Object.create(null); + return function (arg) { + if (cache[arg] === undefined) cache[arg] = fn(arg); + return cache[arg]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize); + + +/***/ }), + +/***/ "./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js ***! + \***********************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ "./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js"); + + +var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 + +var isPropValid = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__["default"])(function (prop) { + return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 + /* o */ + && prop.charCodeAt(1) === 110 + /* n */ + && prop.charCodeAt(2) < 91; +} +/* Z+1 */ +); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPropValid); + + +/***/ }), + +/***/ "./scripts/constants/defaultFormOptions.ts": +/*!*************************************************!*\ + !*** ./scripts/constants/defaultFormOptions.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DEFAULT_OPTIONS": () => (/* binding */ DEFAULT_OPTIONS), +/* harmony export */ "isDefaultForm": () => (/* binding */ isDefaultForm) +/* harmony export */ }); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); + +var REGISTRATION_FORM = 'REGISTRATION_FORM'; +var CONTACT_US_FORM = 'CONTACT_US_FORM'; +var NEWSLETTER_FORM = 'NEWSLETTER_FORM'; +var SUPPORT_FORM = 'SUPPORT_FORM'; +var EVENT_FORM = 'EVENT_FORM'; +var DEFAULT_OPTIONS = { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Templates', 'leadin'), + options: [{ + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Registration Form', 'leadin'), + value: REGISTRATION_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Contact us Form', 'leadin'), + value: CONTACT_US_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Newsletter sign-up Form', 'leadin'), + value: NEWSLETTER_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Support Form', 'leadin'), + value: SUPPORT_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Event Registration Form', 'leadin'), + value: EVENT_FORM + }] +}; +function isDefaultForm(value) { + return value === REGISTRATION_FORM || value === CONTACT_US_FORM || value === NEWSLETTER_FORM || value === SUPPORT_FORM || value === EVENT_FORM; +} + +/***/ }), + +/***/ "./scripts/constants/leadinConfig.ts": +/*!*******************************************!*\ + !*** ./scripts/constants/leadinConfig.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "accountName": () => (/* binding */ accountName), +/* harmony export */ "activationTime": () => (/* binding */ activationTime), +/* harmony export */ "adminUrl": () => (/* binding */ adminUrl), +/* harmony export */ "connectionStatus": () => (/* binding */ connectionStatus), +/* harmony export */ "contentEmbed": () => (/* binding */ contentEmbed), +/* harmony export */ "deviceId": () => (/* binding */ deviceId), +/* harmony export */ "didDisconnect": () => (/* binding */ didDisconnect), +/* harmony export */ "env": () => (/* binding */ env), +/* harmony export */ "formsScript": () => (/* binding */ formsScript), +/* harmony export */ "formsScriptPayload": () => (/* binding */ formsScriptPayload), +/* harmony export */ "hublet": () => (/* binding */ hublet), +/* harmony export */ "hubspotBaseUrl": () => (/* binding */ hubspotBaseUrl), +/* harmony export */ "hubspotNonce": () => (/* binding */ hubspotNonce), +/* harmony export */ "iframeUrl": () => (/* binding */ iframeUrl), +/* harmony export */ "impactLink": () => (/* binding */ impactLink), +/* harmony export */ "lastAuthorizeTime": () => (/* binding */ lastAuthorizeTime), +/* harmony export */ "lastDeauthorizeTime": () => (/* binding */ lastDeauthorizeTime), +/* harmony export */ "lastDisconnectTime": () => (/* binding */ lastDisconnectTime), +/* harmony export */ "leadinPluginVersion": () => (/* binding */ leadinPluginVersion), +/* harmony export */ "leadinQueryParams": () => (/* binding */ leadinQueryParams), +/* harmony export */ "locale": () => (/* binding */ locale), +/* harmony export */ "loginUrl": () => (/* binding */ loginUrl), +/* harmony export */ "meetingsScript": () => (/* binding */ meetingsScript), +/* harmony export */ "phpVersion": () => (/* binding */ phpVersion), +/* harmony export */ "pluginPath": () => (/* binding */ pluginPath), +/* harmony export */ "plugins": () => (/* binding */ plugins), +/* harmony export */ "portalDomain": () => (/* binding */ portalDomain), +/* harmony export */ "portalEmail": () => (/* binding */ portalEmail), +/* harmony export */ "portalId": () => (/* binding */ portalId), +/* harmony export */ "redirectNonce": () => (/* binding */ redirectNonce), +/* harmony export */ "refreshToken": () => (/* binding */ refreshToken), +/* harmony export */ "refreshTokenError": () => (/* binding */ refreshTokenError), +/* harmony export */ "requiresContentEmbedScope": () => (/* binding */ requiresContentEmbedScope), +/* harmony export */ "restNonce": () => (/* binding */ restNonce), +/* harmony export */ "restUrl": () => (/* binding */ restUrl), +/* harmony export */ "reviewSkippedDate": () => (/* binding */ reviewSkippedDate), +/* harmony export */ "theme": () => (/* binding */ theme), +/* harmony export */ "trackConsent": () => (/* binding */ trackConsent), +/* harmony export */ "wpVersion": () => (/* binding */ wpVersion) +/* harmony export */ }); +var _window$leadinConfig = window.leadinConfig, + accountName = _window$leadinConfig.accountName, + adminUrl = _window$leadinConfig.adminUrl, + activationTime = _window$leadinConfig.activationTime, + connectionStatus = _window$leadinConfig.connectionStatus, + deviceId = _window$leadinConfig.deviceId, + didDisconnect = _window$leadinConfig.didDisconnect, + env = _window$leadinConfig.env, + formsScript = _window$leadinConfig.formsScript, + meetingsScript = _window$leadinConfig.meetingsScript, + formsScriptPayload = _window$leadinConfig.formsScriptPayload, + hublet = _window$leadinConfig.hublet, + hubspotBaseUrl = _window$leadinConfig.hubspotBaseUrl, + hubspotNonce = _window$leadinConfig.hubspotNonce, + iframeUrl = _window$leadinConfig.iframeUrl, + impactLink = _window$leadinConfig.impactLink, + lastAuthorizeTime = _window$leadinConfig.lastAuthorizeTime, + lastDeauthorizeTime = _window$leadinConfig.lastDeauthorizeTime, + lastDisconnectTime = _window$leadinConfig.lastDisconnectTime, + leadinPluginVersion = _window$leadinConfig.leadinPluginVersion, + leadinQueryParams = _window$leadinConfig.leadinQueryParams, + locale = _window$leadinConfig.locale, + loginUrl = _window$leadinConfig.loginUrl, + phpVersion = _window$leadinConfig.phpVersion, + pluginPath = _window$leadinConfig.pluginPath, + plugins = _window$leadinConfig.plugins, + portalDomain = _window$leadinConfig.portalDomain, + portalEmail = _window$leadinConfig.portalEmail, + portalId = _window$leadinConfig.portalId, + redirectNonce = _window$leadinConfig.redirectNonce, + restNonce = _window$leadinConfig.restNonce, + restUrl = _window$leadinConfig.restUrl, + refreshToken = _window$leadinConfig.refreshToken, + reviewSkippedDate = _window$leadinConfig.reviewSkippedDate, + theme = _window$leadinConfig.theme, + trackConsent = _window$leadinConfig.trackConsent, + wpVersion = _window$leadinConfig.wpVersion, + contentEmbed = _window$leadinConfig.contentEmbed, + requiresContentEmbedScope = _window$leadinConfig.requiresContentEmbedScope, + refreshTokenError = _window$leadinConfig.refreshTokenError; + + +/***/ }), + +/***/ "./scripts/elementor/Common/ConnectPluginBanner.tsx": +/*!**********************************************************!*\ + !*** ./scripts/elementor/Common/ConnectPluginBanner.tsx ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ConnectPluginBanner) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _ElementorBanner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ElementorBanner */ "./scripts/elementor/Common/ElementorBanner.tsx"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); + + + +function ConnectPluginBanner() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ElementorBanner__WEBPACK_IMPORTED_MODULE_1__["default"], { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + dangerouslySetInnerHTML: { + __html: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s').replace('%1$s', '').replace('%2$s', '') + } + }) + }); +} + +/***/ }), + +/***/ "./scripts/elementor/Common/ElementorBanner.tsx": +/*!******************************************************!*\ + !*** ./scripts/elementor/Common/ElementorBanner.tsx ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ElementorBanner) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + +function ElementorBanner(_ref) { + var _ref$type = _ref.type, + type = _ref$type === void 0 ? 'warning' : _ref$type, + children = _ref.children; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + className: "elementor-control-content", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + className: "elementor-control-raw-html elementor-panel-alert elementor-panel-alert-".concat(type), + children: children + }) + }); +} + +/***/ }), + +/***/ "./scripts/elementor/Common/ElementorButton.tsx": +/*!******************************************************!*\ + !*** ./scripts/elementor/Common/ElementorButton.tsx ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ElementorButton) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +var _excluded = ["children"]; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + + + +var Container = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('div')({ + name: "Container", + "class": "czoccom", + propsAsIs: false +}); +function ElementorButton(_ref) { + var children = _ref.children, + params = _objectWithoutProperties(_ref, _excluded); + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Container, { + className: "elementor-button-wrapper", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", _objectSpread(_objectSpread({ + className: "elementor-button elementor-button-default", + type: "button" + }, params), {}, { + children: children + })) + }); +} + +__webpack_require__(/*! ./ElementorButton.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./ElementorButton.tsx */ "./scripts/elementor/Common/ElementorButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/Common/ElementorButton.tsx"); + +/***/ }), + +/***/ "./scripts/elementor/FormWidget/ElementorFormSelect.tsx": +/*!**************************************************************!*\ + !*** ./scripts/elementor/FormWidget/ElementorFormSelect.tsx ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ElementorFormSelectContainer) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _Common_ElementorBanner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Common/ElementorBanner */ "./scripts/elementor/Common/ElementorBanner.tsx"); +/* harmony import */ var _shared_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/UIComponents/UISpinner */ "./scripts/shared/UIComponents/UISpinner.tsx"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _hooks_useForms__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks/useForms */ "./scripts/elementor/FormWidget/hooks/useForms.ts"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + +function ElementorFormSelect(_ref) { + var formId = _ref.formId, + setAttributes = _ref.setAttributes; + + var _useForms = (0,_hooks_useForms__WEBPACK_IMPORTED_MODULE_7__["default"])(), + hasError = _useForms.hasError, + forms = _useForms.forms, + loading = _useForms.loading; + + return loading ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_4__["default"], {}) + }) : hasError ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ElementorBanner__WEBPACK_IMPORTED_MODULE_3__["default"], { + type: "danger", + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Please refresh your forms or try again in a few minutes', 'leadin') + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("select", { + value: formId, + onChange: function onChange(event) { + var selectedForm = forms.find(function (form) { + return form.value === event.target.value; + }); + + if (selectedForm) { + setAttributes({ + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + formId: selectedForm.value, + formName: selectedForm.label + }); + } + }, + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("option", { + value: "", + disabled: true, + selected: true, + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Search for a form', 'leadin') + }), forms.map(function (form) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("option", { + value: form.value, + children: form.label + }, form.value); + })] + }); +} + +function ElementorFormSelectWrapper(props) { + var isBackgroundAppReady = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.useBackgroundAppContext)(); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: !isBackgroundAppReady ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_4__["default"], {}) + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ElementorFormSelect, _objectSpread({}, props)) + }); +} + +function ElementorFormSelectContainer(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.BackgroudAppContext.Provider, { + value: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken && (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_8__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ElementorFormSelectWrapper, _objectSpread({}, props)) + }); +} + +/***/ }), + +/***/ "./scripts/elementor/FormWidget/FormControlController.tsx": +/*!****************************************************************!*\ + !*** ./scripts/elementor/FormWidget/FormControlController.tsx ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormControlController) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _Common_ConnectPluginBanner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Common/ConnectPluginBanner */ "./scripts/elementor/Common/ConnectPluginBanner.tsx"); +/* harmony import */ var _ElementorFormSelect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ElementorFormSelect */ "./scripts/elementor/FormWidget/ElementorFormSelect.tsx"); + + + + + +var ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected' +}; +function FormControlController(attributes, setValue) { + return function () { + var render = function render() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.connectionStatus === ConnectionStatus.Connected) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ElementorFormSelect__WEBPACK_IMPORTED_MODULE_4__["default"], { + formId: attributes.formId, + setAttributes: setValue + }); + } else { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ConnectPluginBanner__WEBPACK_IMPORTED_MODULE_3__["default"], {}); + } + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: render() + }); + }; +} + +/***/ }), + +/***/ "./scripts/elementor/FormWidget/FormWidgetController.tsx": +/*!***************************************************************!*\ + !*** ./scripts/elementor/FormWidget/FormWidgetController.tsx ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormWidgetController) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); +/* harmony import */ var _shared_Form_FormEdit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/Form/FormEdit */ "./scripts/shared/Form/FormEdit.tsx"); +/* harmony import */ var _shared_enums_connectionStatus__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../shared/enums/connectionStatus */ "./scripts/shared/enums/connectionStatus.ts"); + + + + + + +function FormWidgetController(attributes, setValue) { + return function () { + var render = function render() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.connectionStatus === _shared_enums_connectionStatus__WEBPACK_IMPORTED_MODULE_5__["default"].Connected) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Form_FormEdit__WEBPACK_IMPORTED_MODULE_4__["default"], { + attributes: attributes, + isSelected: true, + setAttributes: setValue, + preview: false, + origin: "elementor" + }); + } else { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_3__["default"], { + status: 401 + }); + } + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: render() + }); + }; +} + +/***/ }), + +/***/ "./scripts/elementor/FormWidget/hooks/useForms.ts": +/*!********************************************************!*\ + !*** ./scripts/elementor/FormWidget/hooks/useForms.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useForms) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _shared_enums_loadState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../shared/enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +function useForms() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_3__.usePostAsyncBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_shared_enums_loadState__WEBPACK_IMPORTED_MODULE_1__["default"].NotLoaded), + _useState2 = _slicedToArray(_useState, 2), + loadState = _useState2[0], + setLoadState = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState4 = _slicedToArray(_useState3, 2), + hasError = _useState4[0], + setError = _useState4[1]; + + var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), + _useState6 = _slicedToArray(_useState5, 2), + forms = _useState6[0], + setForms = _useState6[1]; + + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (loadState === _shared_enums_loadState__WEBPACK_IMPORTED_MODULE_1__["default"].NotLoaded) { + proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_2__.ProxyMessages.FetchForms, + payload: { + search: '' + } + }).then(function (data) { + setForms(data.map(function (form) { + return { + label: form.name, + value: form.guid + }; + })); + setLoadState(_shared_enums_loadState__WEBPACK_IMPORTED_MODULE_1__["default"].Loaded); + })["catch"](function (error) { + setError(error); + setLoadState(_shared_enums_loadState__WEBPACK_IMPORTED_MODULE_1__["default"].Failed); + }); + } + }, [loadState]); + return { + forms: forms, + loading: loadState === _shared_enums_loadState__WEBPACK_IMPORTED_MODULE_1__["default"].Loading, + hasError: hasError + }; +} + +/***/ }), + +/***/ "./scripts/elementor/FormWidget/registerFormWidget.ts": +/*!************************************************************!*\ + !*** ./scripts/elementor/FormWidget/registerFormWidget.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ registerFormWidget) +/* harmony export */ }); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ "react-dom"); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _FormControlController__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormControlController */ "./scripts/elementor/FormWidget/FormControlController.tsx"); +/* harmony import */ var _FormWidgetController__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FormWidgetController */ "./scripts/elementor/FormWidget/FormWidgetController.tsx"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + +var registerFormWidget = /*#__PURE__*/function () { + function registerFormWidget(controlContainer, widgetContainer, setValue) { + _classCallCheck(this, registerFormWidget); + + _defineProperty(this, "widgetContainer", void 0); + + _defineProperty(this, "attributes", void 0); + + _defineProperty(this, "controlContainer", void 0); + + _defineProperty(this, "setValue", void 0); + + var attributes = widgetContainer.dataset.attributes ? JSON.parse(widgetContainer.dataset.attributes) : {}; + this.widgetContainer = widgetContainer; + this.controlContainer = controlContainer; + this.setValue = setValue; + this.attributes = attributes; + } + + _createClass(registerFormWidget, [{ + key: "render", + value: function render() { + react_dom__WEBPACK_IMPORTED_MODULE_0___default().render((0,_FormWidgetController__WEBPACK_IMPORTED_MODULE_2__["default"])(this.attributes, this.setValue)(), this.widgetContainer); + react_dom__WEBPACK_IMPORTED_MODULE_0___default().render((0,_FormControlController__WEBPACK_IMPORTED_MODULE_1__["default"])(this.attributes, this.setValue)(), this.controlContainer); + } + }, { + key: "done", + value: function done() { + react_dom__WEBPACK_IMPORTED_MODULE_0___default().unmountComponentAtNode(this.widgetContainer); + react_dom__WEBPACK_IMPORTED_MODULE_0___default().unmountComponentAtNode(this.controlContainer); + } + }]); + + return registerFormWidget; +}(); + + + +/***/ }), + +/***/ "./scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx": +/*!********************************************************************!*\ + !*** ./scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ElementorMeetingsSelectContainer) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Common_ElementorBanner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/ElementorBanner */ "./scripts/elementor/Common/ElementorBanner.tsx"); +/* harmony import */ var _shared_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/UIComponents/UISpinner */ "./scripts/shared/UIComponents/UISpinner.tsx"); +/* harmony import */ var _ElementorMeetingWarning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ElementorMeetingWarning */ "./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx"); +/* harmony import */ var _shared_Meeting_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../shared/Meeting/hooks/useMeetings */ "./scripts/shared/Meeting/hooks/useMeetings.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + + + + + + +function ElementorMeetingSelect(_ref) { + var url = _ref.url, + setAttributes = _ref.setAttributes; + + var _useMeetings = (0,_shared_Meeting_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__["default"])(), + meetings = _useMeetings.mappedMeetings, + loading = _useMeetings.loading, + error = _useMeetings.error, + reload = _useMeetings.reload, + connectCalendar = _useMeetings.connectCalendar; + + var selectedMeetingCalendar = (0,_shared_Meeting_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__.useSelectedMeetingCalendar)(url); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(url), + _useState2 = _slicedToArray(_useState, 2), + localUrl = _useState2[0], + setLocalUrl = _useState2[1]; + + var handleConnectCalendar = function handleConnectCalendar() { + return connectCalendar().then(function () { + reload(); + })["catch"](function (error) { + raven_js__WEBPACK_IMPORTED_MODULE_7___default().captureMessage('Unable to connect calendar', { + extra: { + error: error + } + }); + }); + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: loading ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_3__["default"], {}) + }) : error ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ElementorBanner__WEBPACK_IMPORTED_MODULE_2__["default"], { + type: "danger", + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Please refresh your meetings or try again in a few minutes', 'leadin') + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [selectedMeetingCalendar && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ElementorMeetingWarning__WEBPACK_IMPORTED_MODULE_4__["default"], { + status: selectedMeetingCalendar, + onConnectCalendar: connectCalendar + }), meetings.length > 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("select", { + value: localUrl, + onChange: function onChange(event) { + var newUrl = event.target.value; + setLocalUrl(newUrl); + setAttributes({ + url: newUrl + }); + }, + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("option", { + value: "", + disabled: true, + selected: true, + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Select a meeting', 'leadin') + }), meetings.map(function (item) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("option", { + value: item.value, + children: item.label + }, item.value); + })] + })] + }) + }); +} + +function ElementorMeetingSelectWrapper(props) { + var isBackgroundAppReady = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_8__.useBackgroundAppContext)(); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: !isBackgroundAppReady ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_3__["default"], {}) + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ElementorMeetingSelect, _objectSpread({}, props)) + }); +} + +function ElementorMeetingsSelectContainer(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_8__.BackgroudAppContext.Provider, { + value: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_9__.refreshToken && (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_10__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_9__.refreshToken), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ElementorMeetingSelectWrapper, _objectSpread({}, props)) + }); +} + +/***/ }), + +/***/ "./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx": +/*!*********************************************************************!*\ + !*** ./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingWarning) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _shared_Meeting_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/Meeting/constants */ "./scripts/shared/Meeting/constants.ts"); +/* harmony import */ var _Common_ElementorButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Common/ElementorButton */ "./scripts/elementor/Common/ElementorButton.tsx"); +/* harmony import */ var _Common_ElementorBanner__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Common/ElementorBanner */ "./scripts/elementor/Common/ElementorBanner.tsx"); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); + + + + + + + +var Container = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_6__.styled)('div')({ + name: "Container", + "class": "c1p032ba", + propsAsIs: false +}); +function MeetingWarning(_ref) { + var onConnectCalendar = _ref.onConnectCalendar, + status = _ref.status; + var isMeetingOwner = status === _shared_Meeting_constants__WEBPACK_IMPORTED_MODULE_2__.CURRENT_USER_CALENDAR_MISSING; + var titleText = isMeetingOwner ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Your calendar is not connected', 'leadin') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Calendar is not connected', 'leadin'); + var titleMessage = isMeetingOwner ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Please connect your calendar to activate your scheduling pages', 'leadin') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', 'leadin'); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Container, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Common_ElementorBanner__WEBPACK_IMPORTED_MODULE_4__["default"], { + type: "warning", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + children: titleText + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("br", {}), titleMessage] + }) + }), isMeetingOwner && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ElementorButton__WEBPACK_IMPORTED_MODULE_3__["default"], { + id: "meetings-connect-calendar", + onClick: onConnectCalendar, + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Connect calendar', 'leadin') + })] + }); +} + +__webpack_require__(/*! ./ElementorMeetingWarning.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./ElementorMeetingWarning.tsx */ "./scripts/elementor/MeetingWidget/ElementorMeetingWarning.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx"); + +/***/ }), + +/***/ "./scripts/elementor/MeetingWidget/MeetingControlController.tsx": +/*!**********************************************************************!*\ + !*** ./scripts/elementor/MeetingWidget/MeetingControlController.tsx ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingControlController) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _Common_ConnectPluginBanner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Common/ConnectPluginBanner */ "./scripts/elementor/Common/ConnectPluginBanner.tsx"); +/* harmony import */ var _ElementorMeetingSelect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ElementorMeetingSelect */ "./scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx"); + + + + + +var ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected' +}; +function MeetingControlController(attributes, setValue) { + return function () { + var render = function render() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.connectionStatus === ConnectionStatus.Connected) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ElementorMeetingSelect__WEBPACK_IMPORTED_MODULE_4__["default"], { + url: attributes.url, + setAttributes: setValue + }); + } else { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ConnectPluginBanner__WEBPACK_IMPORTED_MODULE_3__["default"], {}); + } + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: render() + }); + }; +} + +/***/ }), + +/***/ "./scripts/elementor/MeetingWidget/MeetingWidgetController.tsx": +/*!*********************************************************************!*\ + !*** ./scripts/elementor/MeetingWidget/MeetingWidgetController.tsx ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingWidgetController) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); +/* harmony import */ var _shared_Meeting_MeetingEdit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/Meeting/MeetingEdit */ "./scripts/shared/Meeting/MeetingEdit.tsx"); + + + + + +var ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected' +}; +function MeetingWidgetController(attributes, setValue) { + return function () { + var render = function render() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.connectionStatus === ConnectionStatus.Connected) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Meeting_MeetingEdit__WEBPACK_IMPORTED_MODULE_4__["default"], { + attributes: attributes, + isSelected: true, + setAttributes: setValue, + preview: false, + origin: "elementor" + }); + } else { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_3__["default"], { + status: 401 + }); + } + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: render() + }); + }; +} + +/***/ }), + +/***/ "./scripts/elementor/MeetingWidget/registerMeetingWidget.ts": +/*!******************************************************************!*\ + !*** ./scripts/elementor/MeetingWidget/registerMeetingWidget.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ registerMeetingsWidget) +/* harmony export */ }); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ "react-dom"); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _MeetingControlController__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MeetingControlController */ "./scripts/elementor/MeetingWidget/MeetingControlController.tsx"); +/* harmony import */ var _MeetingWidgetController__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MeetingWidgetController */ "./scripts/elementor/MeetingWidget/MeetingWidgetController.tsx"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + +var registerMeetingsWidget = /*#__PURE__*/function () { + function registerMeetingsWidget(controlContainer, widgetContainer, setValue) { + _classCallCheck(this, registerMeetingsWidget); + + _defineProperty(this, "widgetContainer", void 0); + + _defineProperty(this, "controlContainer", void 0); + + _defineProperty(this, "setValue", void 0); + + _defineProperty(this, "attributes", void 0); + + var attributes = widgetContainer.dataset.attributes ? JSON.parse(widgetContainer.dataset.attributes) : {}; + this.widgetContainer = widgetContainer; + this.controlContainer = controlContainer; + this.setValue = setValue; + this.attributes = attributes; + } + + _createClass(registerMeetingsWidget, [{ + key: "render", + value: function render() { + react_dom__WEBPACK_IMPORTED_MODULE_0___default().render((0,_MeetingWidgetController__WEBPACK_IMPORTED_MODULE_2__["default"])(this.attributes, this.setValue)(), this.widgetContainer); + react_dom__WEBPACK_IMPORTED_MODULE_0___default().render((0,_MeetingControlController__WEBPACK_IMPORTED_MODULE_1__["default"])(this.attributes, this.setValue)(), this.controlContainer); + } + }, { + key: "done", + value: function done() { + react_dom__WEBPACK_IMPORTED_MODULE_0___default().unmountComponentAtNode(this.widgetContainer); + react_dom__WEBPACK_IMPORTED_MODULE_0___default().unmountComponentAtNode(this.controlContainer); + } + }]); + + return registerMeetingsWidget; +}(); + + + +/***/ }), + +/***/ "./scripts/elementor/elementorWidget.ts": +/*!**********************************************!*\ + !*** ./scripts/elementor/elementorWidget.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ elementorWidget) +/* harmony export */ }); +function elementorWidget(elementor, options, callback) { + var done = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {}; + return elementor.modules.controls.BaseData.extend({ + onReady: function onReady() { + var self = this; + var controlContainer = this.ui.contentEditable.prevObject[0].querySelector(options.controlSelector); + var widgetContainer = this.options.element.$el[0].querySelector(options.containerSelector); + + if (widgetContainer) { + callback(controlContainer, widgetContainer, function (args) { + return self.setValue(args); + }); + } else { + //@ts-expect-error global + window.elementorFrontend.hooks.addAction("frontend/element_ready/".concat(options.widgetName, ".default"), function (element) { + widgetContainer = element[0].querySelector(options.containerSelector); + callback(controlContainer, widgetContainer, function (args) { + return self.setValue(args); + }); + }); + } + }, + saveValue: function saveValue(props) { + this.setValue(props); + }, + onBeforeDestroy: function onBeforeDestroy() { + //@ts-expect-error global + window.elementorFrontend.hooks.removeAction("frontend/element_ready/".concat(options.widgetName, ".default")); + done(); + } + }); +} + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/core/CoreMessages.ts": +/*!****************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/core/CoreMessages.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* binding */ CoreMessages) +/* harmony export */ }); +var CoreMessages = { + HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED', + SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN', + ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME', + RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME', + SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE', + SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/forms/FormsMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FormMessages": () => (/* binding */ FormMessages) +/* harmony export */ }); +var FormMessages = { + CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/index.ts": +/*!****************************************************!*\ + !*** ./scripts/iframe/integratedMessages/index.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* reexport safe */ _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__.CoreMessages), +/* harmony export */ "FormMessages": () => (/* reexport safe */ _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__.FormMessages), +/* harmony export */ "LiveChatMessages": () => (/* reexport safe */ _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__.LiveChatMessages), +/* harmony export */ "PluginMessages": () => (/* reexport safe */ _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__.PluginMessages), +/* harmony export */ "ProxyMessages": () => (/* reexport safe */ _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages) +/* harmony export */ }); +/* harmony import */ var _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/CoreMessages */ "./scripts/iframe/integratedMessages/core/CoreMessages.ts"); +/* harmony import */ var _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./forms/FormsMessages */ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts"); +/* harmony import */ var _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./livechat/LiveChatMessages */ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts"); +/* harmony import */ var _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./plugin/PluginMessages */ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts"); +/* harmony import */ var _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./proxy/ProxyMessages */ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts"); + + + + + + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts": +/*!************************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LiveChatMessages": () => (/* binding */ LiveChatMessages) +/* harmony export */ }); +var LiveChatMessages = { + CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts": +/*!********************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/plugin/PluginMessages.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PluginMessages": () => (/* binding */ PluginMessages) +/* harmony export */ }); +var PluginMessages = { + PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION', + PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG', + TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT', + InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST', + InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE', + InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR', + InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST', + InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR', + BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST', + BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE', + BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR', + BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST', + BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR', + SkipReviewRequest: 'SKIP_REVIEW_REQUEST', + SkipReviewResponse: 'SKIP_REVIEW_RESPONSE', + SkipReviewError: 'SKIP_REVIEW_ERROR', + RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM', + ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST', + ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE', + ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR', + ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST', + ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE', + ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ProxyMessages": () => (/* binding */ ProxyMessages) +/* harmony export */ }); +var ProxyMessages = { + FetchForms: 'FETCH_FORMS', + FetchForm: 'FETCH_FORM', + CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE', + FetchAuth: 'FETCH_AUTH', + FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS', + FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION', + FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER', + ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR', + TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER', + TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE', + TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED', + TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER', + TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE', + TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER', + TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION', + TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED', + TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/useBackgroundApp.ts": +/*!********************************************!*\ + !*** ./scripts/iframe/useBackgroundApp.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BackgroudAppContext": () => (/* binding */ BackgroudAppContext), +/* harmony export */ "useBackgroundAppContext": () => (/* binding */ useBackgroundAppContext), +/* harmony export */ "usePostAsyncBackgroundMessage": () => (/* binding */ usePostAsyncBackgroundMessage), +/* harmony export */ "usePostBackgroundMessage": () => (/* binding */ usePostBackgroundMessage) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); + +var BackgroudAppContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null); +function useBackgroundAppContext() { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(BackgroudAppContext); +} +function usePostBackgroundMessage() { + var app = useBackgroundAppContext(); + return function (message) { + app.postMessage(message); + }; +} +function usePostAsyncBackgroundMessage() { + var app = useBackgroundAppContext(); + return function (message) { + return app.postAsyncMessage(message); + }; +} + +/***/ }), + +/***/ "./scripts/lib/Raven.ts": +/*!******************************!*\ + !*** ./scripts/lib/Raven.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "configureRaven": () => (/* binding */ configureRaven), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); + + +function configureRaven() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.hubspotBaseUrl.indexOf('app.hubspot.com') === -1) { + return; + } + + raven_js__WEBPACK_IMPORTED_MODULE_0___default().config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', { + instrument: { + tryCatch: false + }, + release: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion + }).install(); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setTagsContext({ + v: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion, + php: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.phpVersion, + wordpress: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.wpVersion + }); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setExtraContext({ + hub: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.portalId, + plugins: Object.keys(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins).map(function (name) { + return "".concat(name, "#").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins[name]); + }).join(',') + }); +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((raven_js__WEBPACK_IMPORTED_MODULE_0___default())); + +/***/ }), + +/***/ "./scripts/shared/Common/AsyncSelect.tsx": +/*!***********************************************!*\ + !*** ./scripts/shared/Common/AsyncSelect.tsx ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ AsyncSelect) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +/* harmony import */ var _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/colors */ "./scripts/shared/UIComponents/colors.ts"); +/* harmony import */ var _UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UISpinner */ "./scripts/shared/UIComponents/UISpinner.tsx"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + +var Container = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "Container", + "class": "c1wxx7eu", + propsAsIs: false +}); + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.focused ? '0' : '1px'; + }; +}; + +var _exp3 = /*#__PURE__*/function _exp3() { + return function (props) { + return props.focused ? "0 0 0 2px ".concat(_UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_MEDIUM) : 'none'; + }; +}; + +var ControlContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "ControlContainer", + "class": "c1rgwbep", + propsAsIs: false, + vars: { + "c1rgwbep-0": [_exp2()], + "c1rgwbep-1": [_exp3()] + } +}); +var ValueContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "ValueContainer", + "class": "v1mdmbaj", + propsAsIs: false +}); +var Placeholder = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "Placeholder", + "class": "p1gwkvxy", + propsAsIs: false +}); +var SingleValue = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "SingleValue", + "class": "s1bwlafs", + propsAsIs: false +}); +var IndicatorContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "IndicatorContainer", + "class": "i196z9y5", + propsAsIs: false +}); +var DropdownIndicator = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "DropdownIndicator", + "class": "d1dfo5ow", + propsAsIs: false +}); +var InputContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "InputContainer", + "class": "if3lze", + propsAsIs: false +}); +var Input = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('input')({ + name: "Input", + "class": "i9kxf50", + propsAsIs: false +}); +var InputShadow = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "InputShadow", + "class": "igjr3uc", + propsAsIs: false +}); +var MenuContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuContainer", + "class": "mhb9if7", + propsAsIs: false +}); +var MenuList = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuList", + "class": "mxaof7s", + propsAsIs: false +}); +var MenuGroup = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuGroup", + "class": "mw50s5v", + propsAsIs: false +}); +var MenuGroupHeader = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuGroupHeader", + "class": "m11rzvjw", + propsAsIs: false +}); + +var _exp5 = /*#__PURE__*/function _exp5() { + return function (props) { + return props.selected ? _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_MEDIUM : 'transparent'; + }; +}; + +var _exp6 = /*#__PURE__*/function _exp6() { + return function (props) { + return props.selected ? '#fff' : 'inherit'; + }; +}; + +var _exp7 = /*#__PURE__*/function _exp7() { + return function (props) { + return props.selected ? _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_MEDIUM : _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_LIGHT; + }; +}; + +var MenuItem = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuItem", + "class": "m1jcdsjv", + propsAsIs: false, + vars: { + "m1jcdsjv-0": [_exp5()], + "m1jcdsjv-1": [_exp6()], + "m1jcdsjv-2": [_exp7()] + } +}); +function AsyncSelect(_ref) { + var placeholder = _ref.placeholder, + value = _ref.value, + loadOptions = _ref.loadOptions, + onChange = _ref.onChange, + defaultOptions = _ref.defaultOptions; + var inputEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + var inputShadowEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + isFocused = _useState2[0], + setFocus = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].NotLoaded), + _useState4 = _slicedToArray(_useState3, 2), + loadState = _useState4[0], + setLoadState = _useState4[1]; + + var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''), + _useState6 = _slicedToArray(_useState5, 2), + localValue = _useState6[0], + setLocalValue = _useState6[1]; + + var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(defaultOptions), + _useState8 = _slicedToArray(_useState7, 2), + options = _useState8[0], + setOptions = _useState8[1]; + + var inputSize = "".concat(inputShadowEl.current ? inputShadowEl.current.clientWidth + 10 : 2, "px"); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (loadOptions && loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].NotLoaded) { + loadOptions('', function (result) { + setOptions(result); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Idle); + }); + } + }, [loadOptions, loadState]); + + var renderItems = function renderItems() { + var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var parentKey = arguments.length > 1 ? arguments[1] : undefined; + return items.map(function (item, index) { + if (item.options) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(MenuGroup, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuGroupHeader, { + id: "".concat(index, "-heading"), + children: item.label + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + children: renderItems(item.options, index) + })] + }, "async-select-item-".concat(index)); + } else { + var key = "async-select-item-".concat(parentKey !== undefined ? "".concat(parentKey, "-").concat(index) : index); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuItem, { + id: key, + selected: value && item.value === value.value, + onClick: function onClick() { + onChange(item); + setFocus(false); + }, + children: item.label + }, key); + } + }); + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(Container, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(ControlContainer, { + id: "leadin-async-selector", + focused: isFocused, + onClick: function onClick() { + if (isFocused) { + if (inputEl.current) { + inputEl.current.blur(); + } + + setFocus(false); + setLocalValue(''); + } else { + if (inputEl.current) { + inputEl.current.focus(); + } + + setFocus(true); + } + }, + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(ValueContainer, { + children: [localValue === '' && (!value ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Placeholder, { + children: placeholder + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SingleValue, { + children: value.label + })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(InputContainer, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Input, { + ref: inputEl, + onFocus: function onFocus() { + setFocus(true); + }, + onChange: function onChange(e) { + setLocalValue(e.target.value); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Loading); + loadOptions && loadOptions(e.target.value, function (result) { + setOptions(result); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Idle); + }); + }, + value: localValue, + width: inputSize, + id: "asycn-select-input" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(InputShadow, { + ref: inputShadowEl, + children: localValue + })] + })] + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(IndicatorContainer, { + children: [loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Loading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_3__["default"], {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(DropdownIndicator, {})] + })] + }), isFocused && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuContainer, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuList, { + children: renderItems(options) + }) + })] + }); +} + +__webpack_require__(/*! ./AsyncSelect.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./AsyncSelect.tsx */ "./scripts/shared/Common/AsyncSelect.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx"); + +/***/ }), + +/***/ "./scripts/shared/Common/ErrorHandler.tsx": +/*!************************************************!*\ + !*** ./scripts/shared/Common/ErrorHandler.tsx ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ErrorHandler) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../UIComponents/UIButton */ "./scripts/shared/UIComponents/UIButton.ts"); +/* harmony import */ var _UIComponents_UIContainer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIContainer */ "./scripts/shared/UIComponents/UIContainer.ts"); +/* harmony import */ var _HubspotWrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); + + + + + + + + +function redirectToPlugin() { + window.location.href = "".concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__.adminUrl, "admin.php?page=leadin&leadin_expired=").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__.redirectNonce); +} + +function ErrorHandler(_ref) { + var status = _ref.status, + resetErrorState = _ref.resetErrorState, + _ref$errorInfo = _ref.errorInfo, + errorInfo = _ref$errorInfo === void 0 ? { + header: '', + message: '', + action: '' + } : _ref$errorInfo; + var isUnauthorized = status === 401 || status === 403; + var errorHeader = isUnauthorized ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)("Your plugin isn't authorized", 'leadin') : errorInfo.header; + var errorMessage = isUnauthorized ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Reauthorize your plugin to access your free HubSpot tools', 'leadin') : errorInfo.message; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HubspotWrapper__WEBPACK_IMPORTED_MODULE_3__["default"], { + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__.pluginPath, + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_UIComponents_UIContainer__WEBPACK_IMPORTED_MODULE_2__["default"], { + textAlign: "center", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h4", { + children: errorHeader + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + children: errorMessage + }) + }), isUnauthorized ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_1__["default"], { + "data-test-id": "authorize-button", + onClick: redirectToPlugin, + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Go to plugin', 'leadin') + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_1__["default"], { + "data-test-id": "retry-button", + onClick: resetErrorState, + children: errorInfo.action + })] + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Common/HubspotWrapper.ts": +/*!*************************************************!*\ + !*** ./scripts/shared/Common/HubspotWrapper.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + +var _exp = /*#__PURE__*/function _exp() { + return function (props) { + return "url(".concat(props.pluginPath, "/public/assets/images/hubspot.svg)"); + }; +}; + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.padding || '90px 20% 25px'; + }; +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "HubspotWrapper0", + "class": "h1q5v5ee", + propsAsIs: false, + vars: { + "h1q5v5ee-0": [_exp()], + "h1q5v5ee-1": [_exp2()] + } +})); + +__webpack_require__(/*! ./HubspotWrapper.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./HubspotWrapper.ts */ "./scripts/shared/Common/HubspotWrapper.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts"); + +/***/ }), + +/***/ "./scripts/shared/Common/LoadingBlock.tsx": +/*!************************************************!*\ + !*** ./scripts/shared/Common/LoadingBlock.tsx ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ LoadingBlock) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UISpinner */ "./scripts/shared/UIComponents/UISpinner.tsx"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); + + + + +function LoadingBlock() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__["default"], { + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.pluginPath, + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_2__["default"], { + size: 50 + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/FormEdit.tsx": +/*!******************************************!*\ + !*** ./scripts/shared/Form/FormEdit.tsx ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormEditContainer) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UISpacer */ "./scripts/shared/UIComponents/UISpacer.ts"); +/* harmony import */ var _PreviewForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./PreviewForm */ "./scripts/shared/Form/PreviewForm.tsx"); +/* harmony import */ var _FormSelect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FormSelect */ "./scripts/shared/Form/FormSelect.tsx"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + + +function FormEdit(_ref) { + var attributes = _ref.attributes, + isSelected = _ref.isSelected, + setAttributes = _ref.setAttributes, + _ref$preview = _ref.preview, + preview = _ref$preview === void 0 ? true : _ref$preview, + _ref$origin = _ref.origin, + origin = _ref$origin === void 0 ? 'gutenberg' : _ref$origin; + var formId = attributes.formId, + formName = attributes.formName; + var formSelected = _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId && formId; + var isBackgroundAppReady = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.useBackgroundAppContext)(); + var monitorFormPreviewRender = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.usePostBackgroundMessage)(); + + var handleChange = function handleChange(selectedForm) { + setAttributes({ + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + formId: selectedForm.value, + formName: selectedForm.label + }); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + monitorFormPreviewRender({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__.ProxyMessages.TrackFormPreviewRender, + payload: { + origin: origin + } + }); + }, [origin]); + return !isBackgroundAppReady ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_8__["default"], {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [(isSelected || !formSelected) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FormSelect__WEBPACK_IMPORTED_MODULE_5__["default"], { + formId: formId, + formName: formName, + handleChange: handleChange, + origin: origin + }), formSelected && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [isSelected && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__["default"], {}), preview && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PreviewForm__WEBPACK_IMPORTED_MODULE_4__["default"], { + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + formId: formId + })] + })] + }); +} + +function FormEditContainer(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.BackgroudAppContext.Provider, { + value: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken && (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_9__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(FormEdit, _objectSpread({}, props)) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/FormSelect.tsx": +/*!********************************************!*\ + !*** ./scripts/shared/Form/FormSelect.tsx ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormSelect) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _FormSelector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormSelector */ "./scripts/shared/Form/FormSelector.tsx"); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _hooks_useForms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks/useForms */ "./scripts/shared/Form/hooks/useForms.ts"); +/* harmony import */ var _hooks_useCreateFormFromTemplate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks/useCreateFormFromTemplate */ "./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts"); +/* harmony import */ var _constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../constants/defaultFormOptions */ "./scripts/constants/defaultFormOptions.ts"); +/* harmony import */ var _Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); + + + + + + + + +function FormSelect(_ref) { + var formId = _ref.formId, + formName = _ref.formName, + handleChange = _ref.handleChange, + _ref$origin = _ref.origin, + origin = _ref$origin === void 0 ? 'gutenberg' : _ref$origin; + + var _useForms = (0,_hooks_useForms__WEBPACK_IMPORTED_MODULE_4__["default"])(), + search = _useForms.search, + formApiError = _useForms.formApiError, + reset = _useForms.reset; + + var _useCreateFormFromTem = (0,_hooks_useCreateFormFromTemplate__WEBPACK_IMPORTED_MODULE_5__["default"])(origin), + createFormByTemplate = _useCreateFormFromTem.createFormByTemplate, + createReset = _useCreateFormFromTem.reset, + isCreating = _useCreateFormFromTem.isCreating, + hasError = _useCreateFormFromTem.hasError, + createApiError = _useCreateFormFromTem.formApiError; + + var value = formId && formName ? { + label: formName, + value: formId + } : null; + + var handleLocalChange = function handleLocalChange(option) { + if ((0,_constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_6__.isDefaultForm)(option.value)) { + createFormByTemplate(option.value).then(function (_ref2) { + var guid = _ref2.guid, + name = _ref2.name; + handleChange({ + value: guid, + label: name + }); + }); + } else { + handleChange(option); + } + }; + + return isCreating ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__["default"], {}) : formApiError || createApiError ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__["default"], { + status: formApiError ? formApiError.status : createApiError.status, + resetErrorState: function resetErrorState() { + if (hasError) { + createReset(); + } else { + reset(); + } + }, + errorInfo: { + header: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('There was a problem retrieving your forms', 'leadin'), + message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Please refresh your forms or try again in a few minutes', 'leadin'), + action: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Refresh forms', 'leadin') + } + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FormSelector__WEBPACK_IMPORTED_MODULE_1__["default"], { + loadOptions: search, + onChange: function onChange(option) { + return handleLocalChange(option); + }, + value: value + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/FormSelector.tsx": +/*!**********************************************!*\ + !*** ./scripts/shared/Form/FormSelector.tsx ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormSelector) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Common/HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Common/AsyncSelect */ "./scripts/shared/Common/AsyncSelect.tsx"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); + + + + + +function FormSelector(_ref) { + var loadOptions = _ref.loadOptions, + onChange = _ref.onChange, + value = _ref.value; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__["default"], { + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.pluginPath, + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + "data-test-id": "leadin-form-select", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Select an existing form or create a new one from a template', 'leadin') + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_3__["default"], { + placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Search for a form', 'leadin'), + value: value, + loadOptions: loadOptions, + onChange: onChange + })] + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/PreviewForm.tsx": +/*!*********************************************!*\ + !*** ./scripts/shared/Form/PreviewForm.tsx ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ PreviewForm) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIOverlay */ "./scripts/shared/UIComponents/UIOverlay.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _hooks_useFormsScript__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks/useFormsScript */ "./scripts/shared/Form/hooks/useFormsScript.ts"); + + + + + +function PreviewForm(_ref) { + var portalId = _ref.portalId, + formId = _ref.formId; + var inputEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + var ready = (0,_hooks_useFormsScript__WEBPACK_IMPORTED_MODULE_4__["default"])(); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (!ready) { + return; + } + + if (inputEl.current) { + inputEl.current.innerHTML = ''; + var embedScript = document.createElement('script'); + embedScript.innerHTML = "hbspt.forms.create({ portalId: '".concat(portalId, "', formId: '").concat(formId, "', region: '").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.hublet, "', ").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.formsScriptPayload, " });"); + inputEl.current.appendChild(embedScript); + } + }, [formId, portalId, ready, inputEl]); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__["default"], { + ref: inputEl + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts": +/*!****************************************************************!*\ + !*** ./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useCreateFormFromTemplate) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +function useCreateFormFromTemplate() { + var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'gutenberg'; + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostAsyncBackgroundMessage)(); + var track = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle), + _useState2 = _slicedToArray(_useState, 2), + loadState = _useState2[0], + setLoadState = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState4 = _slicedToArray(_useState3, 2), + formApiError = _useState4[0], + setFormApiError = _useState4[1]; + + var createFormByTemplate = function createFormByTemplate(type) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading); + track({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.TrackFormCreatedFromTemplate, + payload: { + type: type, + origin: origin + } + }); + return proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.CreateFormFromTemplate, + payload: type + }).then(function (form) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle); + return form; + })["catch"](function (err) { + setFormApiError(err); + track({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.TrackFormCreationFailed, + payload: { + origin: origin + } + }); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed); + }); + }; + + return { + isCreating: loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading, + hasError: loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed, + formApiError: formApiError, + createFormByTemplate: createFormByTemplate, + reset: function reset() { + return setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle); + } + }; +} + +/***/ }), + +/***/ "./scripts/shared/Form/hooks/useForms.ts": +/*!***********************************************!*\ + !*** ./scripts/shared/Form/hooks/useForms.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useForms) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/debounce */ "./node_modules/lodash/debounce.js"); +/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../constants/defaultFormOptions */ "./scripts/constants/defaultFormOptions.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + +function useForms() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_2__.usePostAsyncBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState2 = _slicedToArray(_useState, 2), + formApiError = _useState2[0], + setFormApiError = _useState2[1]; + + var search = lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default()(function (search, callback) { + return proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages.FetchForms, + payload: { + search: search + } + }).then(function (forms) { + callback([].concat(_toConsumableArray(forms.map(function (form) { + return { + label: form.name, + value: form.guid + }; + })), [_constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPTIONS])); + })["catch"](function (error) { + setFormApiError(error); + }); + }, 300, { + trailing: true + }); + return { + search: search, + formApiError: formApiError, + reset: function reset() { + return setFormApiError(null); + } + }; +} + +/***/ }), + +/***/ "./scripts/shared/Form/hooks/useFormsScript.ts": +/*!*****************************************************!*\ + !*** ./scripts/shared/Form/hooks/useFormsScript.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useFormScript) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lib/Raven */ "./scripts/lib/Raven.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var promise; + +function loadFormsScript() { + if (!promise) { + promise = new Promise(function (resolve, reject) { + return jquery__WEBPACK_IMPORTED_MODULE_0___default().getScript(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.formsScript).done(resolve).fail(reject); + }); + } + + return promise; +} + +function useFormScript() { + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + ready = _useState2[0], + setReady = _useState2[1]; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + loadFormsScript().then(function () { + return setReady(true); + })["catch"](function (error) { + return _lib_Raven__WEBPACK_IMPORTED_MODULE_3__["default"].captureException(error); + }); + }, []); + return ready; +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingController.tsx": +/*!******************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingController.tsx ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingController) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _MeetingSelector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MeetingSelector */ "./scripts/shared/Meeting/MeetingSelector.tsx"); +/* harmony import */ var _MeetingWarning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./MeetingWarning */ "./scripts/shared/Meeting/MeetingWarning.tsx"); +/* harmony import */ var _hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks/useMeetings */ "./scripts/shared/Meeting/hooks/useMeetings.ts"); +/* harmony import */ var _Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Common/HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_10__); + + + + + + + + + + + +function MeetingController(_ref) { + var handleChange = _ref.handleChange, + url = _ref.url; + + var _useMeetings = (0,_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__["default"])(), + meetings = _useMeetings.mappedMeetings, + loading = _useMeetings.loading, + error = _useMeetings.error, + reload = _useMeetings.reload, + connectCalendar = _useMeetings.connectCalendar; + + var selectedMeetingOption = (0,_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__.useSelectedMeeting)(url); + var selectedMeetingCalendar = (0,_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__.useSelectedMeetingCalendar)(url); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (!url && meetings.length > 0) { + handleChange(meetings[0].value); + } + }, [meetings, url, handleChange]); + + var handleLocalChange = function handleLocalChange(option) { + handleChange(option.value); + }; + + var handleConnectCalendar = function handleConnectCalendar() { + return connectCalendar().then(function () { + reload(); + })["catch"](function (error) { + raven_js__WEBPACK_IMPORTED_MODULE_10___default().captureMessage('Unable to connect calendar', { + extra: { + error: error + } + }); + }); + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: loading ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__["default"], {}) : error ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__["default"], { + status: error && error.status || error, + resetErrorState: function resetErrorState() { + return reload(); + }, + errorInfo: { + header: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('There was a problem retrieving your meetings', 'leadin'), + message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Please refresh your meetings or try again in a few minutes', 'leadin'), + action: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Refresh meetings', 'leadin') + } + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_6__["default"], { + padding: "90px 32px 24px", + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_8__.pluginPath, + children: [selectedMeetingCalendar && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingWarning__WEBPACK_IMPORTED_MODULE_4__["default"], { + status: selectedMeetingCalendar, + onConnectCalendar: handleConnectCalendar + }), meetings.length > 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingSelector__WEBPACK_IMPORTED_MODULE_3__["default"], { + onChange: handleLocalChange, + options: meetings, + value: selectedMeetingOption + })] + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingEdit.tsx": +/*!************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingEdit.tsx ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingsEditContainer) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _MeetingController__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MeetingController */ "./scripts/shared/Meeting/MeetingController.tsx"); +/* harmony import */ var _PreviewMeeting__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PreviewMeeting */ "./scripts/shared/Meeting/PreviewMeeting.tsx"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + +function MeetingEdit(_ref) { + var url = _ref.attributes.url, + isSelected = _ref.isSelected, + setAttributes = _ref.setAttributes, + _ref$preview = _ref.preview, + preview = _ref$preview === void 0 ? true : _ref$preview, + _ref$origin = _ref.origin, + origin = _ref$origin === void 0 ? 'gutenberg' : _ref$origin; + var isBackgroundAppReady = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__.useBackgroundAppContext)(); + var monitorFormPreviewRender = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__.usePostBackgroundMessage)(); + + var handleChange = function handleChange(newUrl) { + setAttributes({ + url: newUrl + }); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + monitorFormPreviewRender({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_6__.ProxyMessages.TrackMeetingPreviewRender, + payload: { + origin: origin + } + }); + }, [origin]); + return !isBackgroundAppReady ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_7__["default"], {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [(isSelected || !url) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingController__WEBPACK_IMPORTED_MODULE_2__["default"], { + url: url, + handleChange: handleChange + }), preview && url && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PreviewMeeting__WEBPACK_IMPORTED_MODULE_3__["default"], { + url: url + })] + }); +} + +function MeetingsEditContainer(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__.BackgroudAppContext.Provider, { + value: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_5__.refreshToken && (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_8__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_5__.refreshToken), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MeetingEdit, _objectSpread({}, props)) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingSelector.tsx": +/*!****************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingSelector.tsx ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingSelector) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/AsyncSelect */ "./scripts/shared/Common/AsyncSelect.tsx"); +/* harmony import */ var _UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UISpacer */ "./scripts/shared/UIComponents/UISpacer.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); + + + + + +function MeetingSelector(_ref) { + var options = _ref.options, + onChange = _ref.onChange, + value = _ref.value; + var optionsWrapper = [{ + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Meeting name', 'leadin'), + options: options + }]; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__["default"], {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + "data-test-id": "leadin-meeting-select", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Select a meeting scheduling page', 'leadin') + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_2__["default"], { + defaultOptions: optionsWrapper, + onChange: onChange, + placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Select a meeting', 'leadin'), + value: value + })] + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingWarning.tsx": +/*!***************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingWarning.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingWarning) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _UIComponents_UIAlert__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../UIComponents/UIAlert */ "./scripts/shared/UIComponents/UIAlert.tsx"); +/* harmony import */ var _UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIButton */ "./scripts/shared/UIComponents/UIButton.ts"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./scripts/shared/Meeting/constants.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); + + + + + +function MeetingWarning(_ref) { + var status = _ref.status, + onConnectCalendar = _ref.onConnectCalendar; + var isMeetingOwner = status === _constants__WEBPACK_IMPORTED_MODULE_3__.CURRENT_USER_CALENDAR_MISSING; + var titleText = isMeetingOwner ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Your calendar is not connected', 'leadin') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Calendar is not connected', 'leadin'); + var titleMessage = isMeetingOwner ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Please connect your calendar to activate your scheduling pages', 'leadin') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', 'leadin'); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIAlert__WEBPACK_IMPORTED_MODULE_1__["default"], { + titleText: titleText, + titleMessage: titleMessage, + children: isMeetingOwner && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_2__["default"], { + use: "tertiary", + id: "meetings-connect-calendar", + onClick: onConnectCalendar, + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Connect calendar', 'leadin') + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/PreviewMeeting.tsx": +/*!***************************************************!*\ + !*** ./scripts/shared/Meeting/PreviewMeeting.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ PreviewForm) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIOverlay */ "./scripts/shared/UIComponents/UIOverlay.ts"); +/* harmony import */ var _hooks_useMeetingsScript__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks/useMeetingsScript */ "./scripts/shared/Meeting/hooks/useMeetingsScript.ts"); + + + + +function PreviewForm(_ref) { + var url = _ref.url; + var ready = (0,_hooks_useMeetingsScript__WEBPACK_IMPORTED_MODULE_3__["default"])(); + var inputEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (!ready) { + return; + } + + if (inputEl.current) { + inputEl.current.innerHTML = ''; + var container = document.createElement('div'); + container.dataset.src = "".concat(url, "?embed=true"); + container.classList.add('meetings-iframe-container'); + inputEl.current.appendChild(container); + var embedScript = document.createElement('script'); + embedScript.innerHTML = 'hbspt.meetings.create(".meetings-iframe-container");'; + inputEl.current.appendChild(embedScript); + } + }, [url, ready, inputEl]); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: url && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__["default"], { + ref: inputEl + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/constants.ts": +/*!*********************************************!*\ + !*** ./scripts/shared/Meeting/constants.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CURRENT_USER_CALENDAR_MISSING": () => (/* binding */ CURRENT_USER_CALENDAR_MISSING), +/* harmony export */ "OTHER_USER_CALENDAR_MISSING": () => (/* binding */ OTHER_USER_CALENDAR_MISSING) +/* harmony export */ }); +var OTHER_USER_CALENDAR_MISSING = 'OTHER_USER_CALENDAR_MISSING'; +var CURRENT_USER_CALENDAR_MISSING = 'CURRENT_USER_CALENDAR_MISSING'; + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts": +/*!*************************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useCurrentUserFetch) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var user = null; +function useCurrentUserFetch() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostAsyncBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded), + _useState2 = _slicedToArray(_useState, 2), + loadState = _useState2[0], + setLoadState = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState4 = _slicedToArray(_useState3, 2), + error = _useState4[0], + setError = _useState4[1]; + + var createUser = function createUser() { + if (!user) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded); + } + }; + + var reload = function reload() { + user = null; + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded); + setError(null); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded && !user) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading); + proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.FetchOrCreateMeetingUser + }).then(function (data) { + user = data; + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle); + })["catch"](function (err) { + setError(err); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed); + }); + } + }, [loadState]); + return { + user: user, + loadUserState: loadState, + error: error, + createUser: createUser, + reload: reload + }; +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useMeetings.ts": +/*!*****************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useMeetings.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useMeetings), +/* harmony export */ "useSelectedMeeting": () => (/* binding */ useSelectedMeeting), +/* harmony export */ "useSelectedMeetingCalendar": () => (/* binding */ useSelectedMeetingCalendar) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants */ "./scripts/shared/Meeting/constants.ts"); +/* harmony import */ var _useMeetingsFetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useMeetingsFetch */ "./scripts/shared/Meeting/hooks/useMeetingsFetch.ts"); +/* harmony import */ var _useCurrentUserFetch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useCurrentUserFetch */ "./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + + + +function getDefaultMeetingName(meeting, currentUser, meetingUsers) { + var _meeting$meetingsUser = _slicedToArray(meeting.meetingsUserIds, 1), + meetingOwnerId = _meeting$meetingsUser[0]; + + var result = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Default', 'leadin'); + + if (currentUser && meetingOwnerId !== currentUser.id && meetingUsers[meetingOwnerId]) { + var user = meetingUsers[meetingOwnerId]; + result += " (".concat(user.userProfile.fullName, ")"); + } + + return result; +} + +function hasCalendarObject(user) { + return user && user.meetingsUserBlob && user.meetingsUserBlob.calendarSettings && user.meetingsUserBlob.calendarSettings.email; +} + +function useMeetings() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.usePostAsyncBackgroundMessage)(); + + var _useMeetingsFetch = (0,_useMeetingsFetch__WEBPACK_IMPORTED_MODULE_3__["default"])(), + meetings = _useMeetingsFetch.meetings, + meetingUsers = _useMeetingsFetch.meetingUsers, + meetingsError = _useMeetingsFetch.error, + loadMeetingsState = _useMeetingsFetch.loadMeetingsState, + reloadMeetings = _useMeetingsFetch.reload; + + var _useCurrentUserFetch = (0,_useCurrentUserFetch__WEBPACK_IMPORTED_MODULE_4__["default"])(), + currentUser = _useCurrentUserFetch.user, + userError = _useCurrentUserFetch.error, + loadUserState = _useCurrentUserFetch.loadUserState, + reloadUser = _useCurrentUserFetch.reload; + + var reload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function () { + reloadUser(); + reloadMeetings(); + }, [reloadUser, reloadMeetings]); + + var connectCalendar = function connectCalendar() { + return proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__.ProxyMessages.ConnectMeetingsCalendar + }); + }; + + return { + mappedMeetings: meetings.map(function (meet) { + return { + label: meet.name || getDefaultMeetingName(meet, currentUser, meetingUsers), + value: meet.link + }; + }), + meetings: meetings, + meetingUsers: meetingUsers, + currentUser: currentUser, + error: meetingsError || userError, + loading: loadMeetingsState == _enums_loadState__WEBPACK_IMPORTED_MODULE_5__["default"].Loading || loadUserState === _enums_loadState__WEBPACK_IMPORTED_MODULE_5__["default"].Loading, + reload: reload, + connectCalendar: connectCalendar + }; +} +function useSelectedMeeting(url) { + var _useMeetings = useMeetings(), + meetings = _useMeetings.mappedMeetings; + + var option = meetings.find(function (_ref) { + var value = _ref.value; + return value === url; + }); + return option; +} +function useSelectedMeetingCalendar(url) { + var _useMeetings2 = useMeetings(), + meetings = _useMeetings2.meetings, + meetingUsers = _useMeetings2.meetingUsers, + currentUser = _useMeetings2.currentUser; + + var meeting = meetings.find(function (meet) { + return meet.link === url; + }); + var mappedMeetingUsersId = meetingUsers.reduce(function (p, c) { + return _objectSpread(_objectSpread({}, p), {}, _defineProperty({}, c.id, c)); + }, {}); + + if (!meeting) { + return null; + } else { + var meetingsUserIds = meeting.meetingsUserIds; + + if (currentUser && meetingsUserIds.includes(currentUser.id) && !hasCalendarObject(currentUser)) { + return _constants__WEBPACK_IMPORTED_MODULE_2__.CURRENT_USER_CALENDAR_MISSING; + } else if (meetingsUserIds.map(function (id) { + return mappedMeetingUsersId[id]; + }).some(function (user) { + return !hasCalendarObject(user); + })) { + return _constants__WEBPACK_IMPORTED_MODULE_2__.OTHER_USER_CALENDAR_MISSING; + } else { + return null; + } + } +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useMeetingsFetch.ts": +/*!**********************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useMeetingsFetch.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useMeetingsFetch) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var meetings = []; +var meetingUsers = []; +function useMeetingsFetch() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostAsyncBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded), + _useState2 = _slicedToArray(_useState, 2), + loadState = _useState2[0], + setLoadState = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState4 = _slicedToArray(_useState3, 2), + error = _useState4[0], + setError = _useState4[1]; + + var reload = function reload() { + meetings = []; + setError(null); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded && meetings.length === 0) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading); + proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.FetchMeetingsAndUsers + }).then(function (data) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loaded); + meetings = data && data.meetingLinks; + meetingUsers = data && data.meetingUsers; + })["catch"](function (e) { + setError(e); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed); + }); + } + }, [loadState]); + return { + meetings: meetings, + meetingUsers: meetingUsers, + loadMeetingsState: loadState, + error: error, + reload: reload + }; +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useMeetingsScript.ts": +/*!***********************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useMeetingsScript.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useMeetingsScript) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lib/Raven */ "./scripts/lib/Raven.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var promise; + +function loadMeetingsScript() { + if (!promise) { + promise = new Promise(function (resolve, reject) { + return jquery__WEBPACK_IMPORTED_MODULE_0___default().getScript(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.meetingsScript).done(resolve).fail(reject); + }); + } + + return promise; +} + +function useMeetingsScript() { + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + ready = _useState2[0], + setReady = _useState2[1]; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + loadMeetingsScript().then(function () { + return setReady(true); + })["catch"](function (error) { + return _lib_Raven__WEBPACK_IMPORTED_MODULE_3__["default"].captureException(error); + }); + }, []); + return ready; +} + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIAlert.tsx": +/*!*************************************************!*\ + !*** ./scripts/shared/UIComponents/UIAlert.tsx ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UIAlert) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + +var AlertContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('div')({ + name: "AlertContainer", + "class": "a1h8m4fo", + propsAsIs: false +}); +var Title = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('p')({ + name: "Title", + "class": "tyndzxk", + propsAsIs: false +}); +var Message = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('p')({ + name: "Message", + "class": "m1m9sbk4", + propsAsIs: false +}); +var MessageContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('div')({ + name: "MessageContainer", + "class": "mg5o421", + propsAsIs: false +}); +function UIAlert(_ref) { + var titleText = _ref.titleText, + titleMessage = _ref.titleMessage, + children = _ref.children; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(AlertContainer, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(MessageContainer, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Title, { + children: titleText + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Message, { + children: titleMessage + })] + }), children] + }); +} + +__webpack_require__(/*! ./UIAlert.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIAlert.tsx */ "./scripts/shared/UIComponents/UIAlert.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIButton.ts": +/*!*************************************************!*\ + !*** ./scripts/shared/UIComponents/UIButton.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colors */ "./scripts/shared/UIComponents/colors.ts"); + + + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.use === 'tertiary' ? _colors__WEBPACK_IMPORTED_MODULE_0__.HEFFALUMP : _colors__WEBPACK_IMPORTED_MODULE_0__.LORAX; + }; +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('button')({ + name: "UIButton0", + "class": "ug152ch", + propsAsIs: false, + vars: { + "ug152ch-0": [_exp2()] + } +})); + +__webpack_require__(/*! ./UIButton.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIButton.ts */ "./scripts/shared/UIComponents/UIButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIContainer.ts": +/*!****************************************************!*\ + !*** ./scripts/shared/UIComponents/UIContainer.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + +var _exp = /*#__PURE__*/function _exp() { + return function (props) { + return props.textAlign ? props.textAlign : 'inherit'; + }; +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "UIContainer0", + "class": "ua13n1c", + propsAsIs: false, + vars: { + "ua13n1c-0": [_exp()] + } +})); + +__webpack_require__(/*! ./UIContainer.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIContainer.ts */ "./scripts/shared/UIComponents/UIContainer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIOverlay.ts": +/*!**************************************************!*\ + !*** ./scripts/shared/UIComponents/UIOverlay.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "UIOverlay0", + "class": "u1q7a48k", + propsAsIs: false +})); + +__webpack_require__(/*! ./UIOverlay.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIOverlay.ts */ "./scripts/shared/UIComponents/UIOverlay.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpacer.ts": +/*!*************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpacer.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "UISpacer0", + "class": "u3qxofx", + propsAsIs: false +})); + +__webpack_require__(/*! ./UISpacer.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UISpacer.ts */ "./scripts/shared/UIComponents/UISpacer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpinner.tsx": +/*!***************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpinner.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UISpinner) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ "./scripts/shared/UIComponents/colors.ts"); + + + +var SpinnerOuter = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('div')({ + name: "SpinnerOuter", + "class": "sxa9zrc", + propsAsIs: false +}); +var SpinnerInner = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('div')({ + name: "SpinnerInner", + "class": "s14430wa", + propsAsIs: false +}); + +var _exp = /*#__PURE__*/function _exp() { + return function (props) { + return props.color; + }; +}; + +var Circle = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('circle')({ + name: "Circle", + "class": "ct87ghk", + propsAsIs: true, + vars: { + "ct87ghk-0": [_exp()] + } +}); + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.color; + }; +}; + +var AnimatedCircle = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('circle')({ + name: "AnimatedCircle", + "class": "avili0h", + propsAsIs: true, + vars: { + "avili0h-0": [_exp2()] + } +}); +function UISpinner(_ref) { + var _ref$size = _ref.size, + size = _ref$size === void 0 ? 20 : _ref$size; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SpinnerOuter, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SpinnerInner, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", { + height: size, + width: size, + viewBox: "0 0 50 50", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Circle, { + color: _colors__WEBPACK_IMPORTED_MODULE_1__.CALYPSO_MEDIUM, + cx: "25", + cy: "25", + r: "22.5" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(AnimatedCircle, { + color: _colors__WEBPACK_IMPORTED_MODULE_1__.CALYPSO, + cx: "25", + cy: "25", + r: "22.5" + })] + }) + }) + }); +} + +__webpack_require__(/*! ./UISpinner.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UISpinner.tsx */ "./scripts/shared/UIComponents/UISpinner.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/colors.ts": +/*!***********************************************!*\ + !*** ./scripts/shared/UIComponents/colors.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CALYPSO": () => (/* binding */ CALYPSO), +/* harmony export */ "CALYPSO_LIGHT": () => (/* binding */ CALYPSO_LIGHT), +/* harmony export */ "CALYPSO_MEDIUM": () => (/* binding */ CALYPSO_MEDIUM), +/* harmony export */ "HEFFALUMP": () => (/* binding */ HEFFALUMP), +/* harmony export */ "LORAX": () => (/* binding */ LORAX), +/* harmony export */ "MARIGOLD_LIGHT": () => (/* binding */ MARIGOLD_LIGHT), +/* harmony export */ "MARIGOLD_MEDIUM": () => (/* binding */ MARIGOLD_MEDIUM), +/* harmony export */ "OBSIDIAN": () => (/* binding */ OBSIDIAN), +/* harmony export */ "OLAF": () => (/* binding */ OLAF) +/* harmony export */ }); +var CALYPSO = '#00a4bd'; +var CALYPSO_MEDIUM = '#7fd1de'; +var CALYPSO_LIGHT = '#e5f5f8'; +var LORAX = '#ff7a59'; +var OLAF = '#ffffff'; +var HEFFALUMP = '#425b76'; +var MARIGOLD_LIGHT = '#fef8f0'; +var MARIGOLD_MEDIUM = '#fae0b5'; +var OBSIDIAN = '#33475b'; + +/***/ }), + +/***/ "./scripts/shared/enums/connectionStatus.ts": +/*!**************************************************!*\ + !*** ./scripts/shared/enums/connectionStatus.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +var ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected' +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConnectionStatus); + +/***/ }), + +/***/ "./scripts/shared/enums/loadState.ts": +/*!*******************************************!*\ + !*** ./scripts/shared/enums/loadState.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +var LoadState = { + NotLoaded: 'NotLoaded', + Loading: 'Loading', + Loaded: 'Loaded', + Idle: 'Idle', + Failed: 'Failed' +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LoadState); + +/***/ }), + +/***/ "./scripts/utils/appUtils.ts": +/*!***********************************!*\ + !*** ./scripts/utils/appUtils.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "initApp": () => (/* binding */ initApp), +/* harmony export */ "initAppOnReady": () => (/* binding */ initAppOnReady) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); + + +function initApp(initFn) { + (0,_lib_Raven__WEBPACK_IMPORTED_MODULE_1__.configureRaven)(); + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].context(initFn); +} +function initAppOnReady(initFn) { + function main() { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(initFn); + } + + initApp(main); +} + +/***/ }), + +/***/ "./scripts/utils/backgroundAppUtils.ts": +/*!*********************************************!*\ + !*** ./scripts/utils/backgroundAppUtils.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "getOrCreateBackgroundApp": () => (/* binding */ getOrCreateBackgroundApp), +/* harmony export */ "initBackgroundApp": () => (/* binding */ initBackgroundApp) +/* harmony export */ }); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _appUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./appUtils */ "./scripts/utils/appUtils.ts"); + + +function initBackgroundApp(initFn) { + function main() { + if (Array.isArray(initFn)) { + initFn.forEach(function (callback) { + return callback(); + }); + } else { + initFn(); + } + } + + (0,_appUtils__WEBPACK_IMPORTED_MODULE_1__.initApp)(main); +} +var getOrCreateBackgroundApp = function getOrCreateBackgroundApp(refreshToken) { + if (window.LeadinBackgroundApp) { + return window.LeadinBackgroundApp; + } + + var _window = window, + IntegratedAppEmbedder = _window.IntegratedAppEmbedder, + IntegratedAppOptions = _window.IntegratedAppOptions; + var options = new IntegratedAppOptions().setLocale(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.locale).setDeviceId(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.deviceId).setRefreshToken(refreshToken); + var embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.portalId, _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.hubspotBaseUrl, function () {}).setOptions(options); + embedder.attachTo(document.body, false); + embedder.postStartAppMessage(); // lets the app know all all data has been passed to it + + window.LeadinBackgroundApp = embedder; + return window.LeadinBackgroundApp; +}; + +/***/ }), + +/***/ "./node_modules/lodash/_Symbol.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/_Symbol.js ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGetTag.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseGetTag.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"), + objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js"); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseTrim.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_baseTrim.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var trimmedEndIndex = __webpack_require__(/*! ./_trimmedEndIndex */ "./node_modules/lodash/_trimmedEndIndex.js"); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +module.exports = baseTrim; + + +/***/ }), + +/***/ "./node_modules/lodash/_freeGlobal.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_freeGlobal.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; + +module.exports = freeGlobal; + + +/***/ }), + +/***/ "./node_modules/lodash/_getRawTag.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getRawTag.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_objectToString.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_objectToString.js ***! + \************************************************/ +/***/ ((module) => { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_root.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_root.js ***! + \**************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), + +/***/ "./node_modules/lodash/_trimmedEndIndex.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_trimmedEndIndex.js ***! + \*************************************************/ +/***/ ((module) => { + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +module.exports = trimmedEndIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/debounce.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/debounce.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + now = __webpack_require__(/*! ./now */ "./node_modules/lodash/now.js"), + toNumber = __webpack_require__(/*! ./toNumber */ "./node_modules/lodash/toNumber.js"); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; + + +/***/ }), + +/***/ "./node_modules/lodash/isObject.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isObject.js ***! + \*****************************************/ +/***/ ((module) => { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), + +/***/ "./node_modules/lodash/isObjectLike.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/isObjectLike.js ***! + \*********************************************/ +/***/ ((module) => { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), + +/***/ "./node_modules/lodash/isSymbol.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isSymbol.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), + +/***/ "./node_modules/lodash/now.js": +/*!************************************!*\ + !*** ./node_modules/lodash/now.js ***! + \************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return root.Date.now(); +}; + +module.exports = now; + + +/***/ }), + +/***/ "./node_modules/lodash/toNumber.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/toNumber.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseTrim = __webpack_require__(/*! ./_baseTrim */ "./node_modules/lodash/_baseTrim.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = toNumber; + + +/***/ }), + +/***/ "./scripts/elementor/Common/ElementorButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/Common/ElementorButton.tsx": +/*!*********************************************************************************************************************************************************************************************!*\ + !*** ./scripts/elementor/Common/ElementorButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/Common/ElementorButton.tsx ***! + \*********************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/elementor/MeetingWidget/ElementorMeetingWarning.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx": +/*!***************************************************************************************************************************************************************************************************************************!*\ + !*** ./scripts/elementor/MeetingWidget/ElementorMeetingWarning.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx ***! + \***************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/Common/AsyncSelect.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx": +/*!*******************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/Common/AsyncSelect.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx ***! + \*******************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/Common/HubspotWrapper.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts": +/*!************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/Common/HubspotWrapper.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts ***! + \************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIAlert.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx": +/*!***********************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIAlert.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx ***! + \***********************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts": +/*!************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts ***! + \************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIContainer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts": +/*!******************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIContainer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts ***! + \******************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIOverlay.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts": +/*!**************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIOverlay.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts ***! + \**************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpacer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts": +/*!************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpacer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts ***! + \************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpinner.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx": +/*!***************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpinner.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx ***! + \***************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./node_modules/object-assign/index.js": +/*!*********************************************!*\ + !*** ./node_modules/object-assign/index.js ***! + \*********************************************/ +/***/ ((module) => { + +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/configError.js": +/*!**************************************************!*\ + !*** ./node_modules/raven-js/src/configError.js ***! + \**************************************************/ +/***/ ((module) => { + +function RavenConfigError(message) { + this.name = 'RavenConfigError'; + this.message = message; +} +RavenConfigError.prototype = new Error(); +RavenConfigError.prototype.constructor = RavenConfigError; + +module.exports = RavenConfigError; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/console.js": +/*!**********************************************!*\ + !*** ./node_modules/raven-js/src/console.js ***! + \**********************************************/ +/***/ ((module) => { + +var wrapMethod = function(console, level, callback) { + var originalConsoleLevel = console[level]; + var originalConsole = console; + + if (!(level in console)) { + return; + } + + var sentryLevel = level === 'warn' ? 'warning' : level; + + console[level] = function() { + var args = [].slice.call(arguments); + + var msg = '' + args.join(' '); + var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}}; + + if (level === 'assert') { + if (args[0] === false) { + // Default browsers message + msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert'); + data.extra.arguments = args.slice(1); + callback && callback(msg, data); + } + } else { + callback && callback(msg, data); + } + + // this fails for some browsers. :( + if (originalConsoleLevel) { + // IE9 doesn't allow calling apply on console functions directly + // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193 + Function.prototype.apply.call(originalConsoleLevel, originalConsole, args); + } + }; +}; + +module.exports = { + wrapMethod: wrapMethod +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/raven.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/raven.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/*global XDomainRequest:false */ + +var TraceKit = __webpack_require__(/*! ../vendor/TraceKit/tracekit */ "./node_modules/raven-js/vendor/TraceKit/tracekit.js"); +var stringify = __webpack_require__(/*! ../vendor/json-stringify-safe/stringify */ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js"); +var RavenConfigError = __webpack_require__(/*! ./configError */ "./node_modules/raven-js/src/configError.js"); + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/raven-js/src/utils.js"); +var isError = utils.isError; +var isObject = utils.isObject; +var isObject = utils.isObject; +var isErrorEvent = utils.isErrorEvent; +var isUndefined = utils.isUndefined; +var isFunction = utils.isFunction; +var isString = utils.isString; +var isEmptyObject = utils.isEmptyObject; +var each = utils.each; +var objectMerge = utils.objectMerge; +var truncate = utils.truncate; +var objectFrozen = utils.objectFrozen; +var hasKey = utils.hasKey; +var joinRegExp = utils.joinRegExp; +var urlencode = utils.urlencode; +var uuid4 = utils.uuid4; +var htmlTreeAsString = utils.htmlTreeAsString; +var isSameException = utils.isSameException; +var isSameStacktrace = utils.isSameStacktrace; +var parseUrl = utils.parseUrl; +var fill = utils.fill; + +var wrapConsoleMethod = (__webpack_require__(/*! ./console */ "./node_modules/raven-js/src/console.js").wrapMethod); + +var dsnKeys = 'source protocol user pass host port path'.split(' '), + dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/; + +function now() { + return +new Date(); +} + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _document = _window.document; +var _navigator = _window.navigator; + +function keepOriginalCallback(original, callback) { + return isFunction(callback) + ? function(data) { + return callback(data, original); + } + : callback; +} + +// First, check for JSON support +// If there is no JSON, we no-op the core features of Raven +// since JSON is required to encode the payload +function Raven() { + this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify); + // Raven can run in contexts where there's no document (react-native) + this._hasDocument = !isUndefined(_document); + this._hasNavigator = !isUndefined(_navigator); + this._lastCapturedException = null; + this._lastData = null; + this._lastEventId = null; + this._globalServer = null; + this._globalKey = null; + this._globalProject = null; + this._globalContext = {}; + this._globalOptions = { + logger: 'javascript', + ignoreErrors: [], + ignoreUrls: [], + whitelistUrls: [], + includePaths: [], + collectWindowErrors: true, + maxMessageLength: 0, + + // By default, truncates URL values to 250 chars + maxUrlLength: 250, + stackTraceLimit: 50, + autoBreadcrumbs: true, + instrument: true, + sampleRate: 1 + }; + this._ignoreOnError = 0; + this._isRavenInstalled = false; + this._originalErrorStackTraceLimit = Error.stackTraceLimit; + // capture references to window.console *and* all its methods first + // before the console plugin has a chance to monkey patch + this._originalConsole = _window.console || {}; + this._originalConsoleMethods = {}; + this._plugins = []; + this._startTime = now(); + this._wrappedBuiltIns = []; + this._breadcrumbs = []; + this._lastCapturedEvent = null; + this._keypressTimeout; + this._location = _window.location; + this._lastHref = this._location && this._location.href; + this._resetBackoff(); + + // eslint-disable-next-line guard-for-in + for (var method in this._originalConsole) { + this._originalConsoleMethods[method] = this._originalConsole[method]; + } +} + +/* + * The core Raven singleton + * + * @this {Raven} + */ + +Raven.prototype = { + // Hardcode version string so that raven source can be loaded directly via + // webpack (using a build step causes webpack #1617). Grunt verifies that + // this value matches package.json during build. + // See: https://github.com/getsentry/raven-js/issues/465 + VERSION: '3.19.1', + + debug: false, + + TraceKit: TraceKit, // alias to TraceKit + + /* + * Configure Raven with a DSN and extra options + * + * @param {string} dsn The public Sentry DSN + * @param {object} options Set of global options [optional] + * @return {Raven} + */ + config: function(dsn, options) { + var self = this; + + if (self._globalServer) { + this._logDebug('error', 'Error: Raven has already been configured'); + return self; + } + if (!dsn) return self; + + var globalOptions = self._globalOptions; + + // merge in options + if (options) { + each(options, function(key, value) { + // tags and extra are special and need to be put into context + if (key === 'tags' || key === 'extra' || key === 'user') { + self._globalContext[key] = value; + } else { + globalOptions[key] = value; + } + }); + } + + self.setDSN(dsn); + + // "Script error." is hard coded into browsers for errors that it can't read. + // this is the result of a script being pulled in from an external domain and CORS. + globalOptions.ignoreErrors.push(/^Script error\.?$/); + globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/); + + // join regexp rules into one big rule + globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors); + globalOptions.ignoreUrls = globalOptions.ignoreUrls.length + ? joinRegExp(globalOptions.ignoreUrls) + : false; + globalOptions.whitelistUrls = globalOptions.whitelistUrls.length + ? joinRegExp(globalOptions.whitelistUrls) + : false; + globalOptions.includePaths = joinRegExp(globalOptions.includePaths); + globalOptions.maxBreadcrumbs = Math.max( + 0, + Math.min(globalOptions.maxBreadcrumbs || 100, 100) + ); // default and hard limit is 100 + + var autoBreadcrumbDefaults = { + xhr: true, + console: true, + dom: true, + location: true + }; + + var autoBreadcrumbs = globalOptions.autoBreadcrumbs; + if ({}.toString.call(autoBreadcrumbs) === '[object Object]') { + autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs); + } else if (autoBreadcrumbs !== false) { + autoBreadcrumbs = autoBreadcrumbDefaults; + } + globalOptions.autoBreadcrumbs = autoBreadcrumbs; + + var instrumentDefaults = { + tryCatch: true + }; + + var instrument = globalOptions.instrument; + if ({}.toString.call(instrument) === '[object Object]') { + instrument = objectMerge(instrumentDefaults, instrument); + } else if (instrument !== false) { + instrument = instrumentDefaults; + } + globalOptions.instrument = instrument; + + TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors; + + // return for chaining + return self; + }, + + /* + * Installs a global window.onerror error handler + * to capture and report uncaught exceptions. + * At this point, install() is required to be called due + * to the way TraceKit is set up. + * + * @return {Raven} + */ + install: function() { + var self = this; + if (self.isSetup() && !self._isRavenInstalled) { + TraceKit.report.subscribe(function() { + self._handleOnErrorStackInfo.apply(self, arguments); + }); + if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) { + self._instrumentTryCatch(); + } + + if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs(); + + // Install all of the plugins + self._drainPlugins(); + + self._isRavenInstalled = true; + } + + Error.stackTraceLimit = self._globalOptions.stackTraceLimit; + return this; + }, + + /* + * Set the DSN (can be called multiple time unlike config) + * + * @param {string} dsn The public Sentry DSN + */ + setDSN: function(dsn) { + var self = this, + uri = self._parseDSN(dsn), + lastSlash = uri.path.lastIndexOf('/'), + path = uri.path.substr(1, lastSlash); + + self._dsn = dsn; + self._globalKey = uri.user; + self._globalSecret = uri.pass && uri.pass.substr(1); + self._globalProject = uri.path.substr(lastSlash + 1); + + self._globalServer = self._getGlobalServer(uri); + + self._globalEndpoint = + self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/'; + + // Reset backoff state since we may be pointing at a + // new project/server + this._resetBackoff(); + }, + + /* + * Wrap code within a context so Raven can capture errors + * reliably across domains that is executed immediately. + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The callback to be immediately executed within the context + * @param {array} args An array of arguments to be called with the callback [optional] + */ + context: function(options, func, args) { + if (isFunction(options)) { + args = func || []; + func = options; + options = undefined; + } + + return this.wrap(options, func).apply(this, args); + }, + + /* + * Wrap code within a context and returns back a new function to be executed + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The function to be wrapped in a new context + * @param {function} func A function to call before the try/catch wrapper [optional, private] + * @return {function} The newly wrapped functions with a context + */ + wrap: function(options, func, _before) { + var self = this; + // 1 argument has been passed, and it's not a function + // so just return it + if (isUndefined(func) && !isFunction(options)) { + return options; + } + + // options is optional + if (isFunction(options)) { + func = options; + options = undefined; + } + + // At this point, we've passed along 2 arguments, and the second one + // is not a function either, so we'll just return the second argument. + if (!isFunction(func)) { + return func; + } + + // We don't wanna wrap it twice! + try { + if (func.__raven__) { + return func; + } + + // If this has already been wrapped in the past, return that + if (func.__raven_wrapper__) { + return func.__raven_wrapper__; + } + } catch (e) { + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + // Bail on wrapping and return the function as-is (defers to window.onerror). + return func; + } + + function wrapped() { + var args = [], + i = arguments.length, + deep = !options || (options && options.deep !== false); + + if (_before && isFunction(_before)) { + _before.apply(this, arguments); + } + + // Recursively wrap all of a function's arguments that are + // functions themselves. + while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i]; + + try { + // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means Raven caught an error invoking your application code. This is + // expected behavior and NOT indicative of a bug with Raven.js. + return func.apply(this, args); + } catch (e) { + self._ignoreNextOnError(); + self.captureException(e, options); + throw e; + } + } + + // copy over properties of the old function + for (var property in func) { + if (hasKey(func, property)) { + wrapped[property] = func[property]; + } + } + wrapped.prototype = func.prototype; + + func.__raven_wrapper__ = wrapped; + // Signal that this function has been wrapped already + // for both debugging and to prevent it to being wrapped twice + wrapped.__raven__ = true; + wrapped.__inner__ = func; + + return wrapped; + }, + + /* + * Uninstalls the global error handler. + * + * @return {Raven} + */ + uninstall: function() { + TraceKit.report.uninstall(); + + this._restoreBuiltIns(); + + Error.stackTraceLimit = this._originalErrorStackTraceLimit; + this._isRavenInstalled = false; + + return this; + }, + + /* + * Manually capture an exception and send it over to Sentry + * + * @param {error} ex An exception to be logged + * @param {object} options A specific set of options for this error [optional] + * @return {Raven} + */ + captureException: function(ex, options) { + // Cases for sending ex as a message, rather than an exception + var isNotError = !isError(ex); + var isNotErrorEvent = !isErrorEvent(ex); + var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error; + + if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) { + return this.captureMessage( + ex, + objectMerge( + { + trimHeadFrames: 1, + stacktrace: true // if we fall back to captureMessage, default to attempting a new trace + }, + options + ) + ); + } + + // Get actual Error from ErrorEvent + if (isErrorEvent(ex)) ex = ex.error; + + // Store the raw exception object for potential debugging and introspection + this._lastCapturedException = ex; + + // TraceKit.report will re-raise any exception passed to it, + // which means you have to wrap it in try/catch. Instead, we + // can wrap it here and only re-raise if TraceKit.report + // raises an exception different from the one we asked to + // report on. + try { + var stack = TraceKit.computeStackTrace(ex); + this._handleStackInfo(stack, options); + } catch (ex1) { + if (ex !== ex1) { + throw ex1; + } + } + + return this; + }, + + /* + * Manually send a message to Sentry + * + * @param {string} msg A plain message to be captured in Sentry + * @param {object} options A specific set of options for this message [optional] + * @return {Raven} + */ + captureMessage: function(msg, options) { + // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an + // early call; we'll error on the side of logging anything called before configuration since it's + // probably something you should see: + if ( + !!this._globalOptions.ignoreErrors.test && + this._globalOptions.ignoreErrors.test(msg) + ) { + return; + } + + options = options || {}; + + var data = objectMerge( + { + message: msg + '' // Make sure it's actually a string + }, + options + ); + + var ex; + // Generate a "synthetic" stack trace from this point. + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative + // of a bug with Raven.js. Sentry generates synthetic traces either by configuration, + // or if it catches a thrown object without a "stack" property. + try { + throw new Error(msg); + } catch (ex1) { + ex = ex1; + } + + // null exception name so `Error` isn't prefixed to msg + ex.name = null; + var stack = TraceKit.computeStackTrace(ex); + + // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1] + var initialCall = stack.stack[1]; + + var fileurl = (initialCall && initialCall.url) || ''; + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + if (this._globalOptions.stacktrace || (options && options.stacktrace)) { + options = objectMerge( + { + // fingerprint on msg, not stack trace (legacy behavior, could be + // revisited) + fingerprint: msg, + // since we know this is a synthetic trace, the top N-most frames + // MUST be from Raven.js, so mark them as in_app later by setting + // trimHeadFrames + trimHeadFrames: (options.trimHeadFrames || 0) + 1 + }, + options + ); + + var frames = this._prepareFrames(stack, options); + data.stacktrace = { + // Sentry expects frames oldest to newest + frames: frames.reverse() + }; + } + + // Fire away! + this._send(data); + + return this; + }, + + captureBreadcrumb: function(obj) { + var crumb = objectMerge( + { + timestamp: now() / 1000 + }, + obj + ); + + if (isFunction(this._globalOptions.breadcrumbCallback)) { + var result = this._globalOptions.breadcrumbCallback(crumb); + + if (isObject(result) && !isEmptyObject(result)) { + crumb = result; + } else if (result === false) { + return this; + } + } + + this._breadcrumbs.push(crumb); + if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) { + this._breadcrumbs.shift(); + } + return this; + }, + + addPlugin: function(plugin /*arg1, arg2, ... argN*/) { + var pluginArgs = [].slice.call(arguments, 1); + + this._plugins.push([plugin, pluginArgs]); + if (this._isRavenInstalled) { + this._drainPlugins(); + } + + return this; + }, + + /* + * Set/clear a user to be sent along with the payload. + * + * @param {object} user An object representing user data [optional] + * @return {Raven} + */ + setUserContext: function(user) { + // Intentionally do not merge here since that's an unexpected behavior. + this._globalContext.user = user; + + return this; + }, + + /* + * Merge extra attributes to be sent along with the payload. + * + * @param {object} extra An object representing extra data [optional] + * @return {Raven} + */ + setExtraContext: function(extra) { + this._mergeContext('extra', extra); + + return this; + }, + + /* + * Merge tags to be sent along with the payload. + * + * @param {object} tags An object representing tags [optional] + * @return {Raven} + */ + setTagsContext: function(tags) { + this._mergeContext('tags', tags); + + return this; + }, + + /* + * Clear all of the context. + * + * @return {Raven} + */ + clearContext: function() { + this._globalContext = {}; + + return this; + }, + + /* + * Get a copy of the current context. This cannot be mutated. + * + * @return {object} copy of context + */ + getContext: function() { + // lol javascript + return JSON.parse(stringify(this._globalContext)); + }, + + /* + * Set environment of application + * + * @param {string} environment Typically something like 'production'. + * @return {Raven} + */ + setEnvironment: function(environment) { + this._globalOptions.environment = environment; + + return this; + }, + + /* + * Set release version of application + * + * @param {string} release Typically something like a git SHA to identify version + * @return {Raven} + */ + setRelease: function(release) { + this._globalOptions.release = release; + + return this; + }, + + /* + * Set the dataCallback option + * + * @param {function} callback The callback to run which allows the + * data blob to be mutated before sending + * @return {Raven} + */ + setDataCallback: function(callback) { + var original = this._globalOptions.dataCallback; + this._globalOptions.dataCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the breadcrumbCallback option + * + * @param {function} callback The callback to run which allows filtering + * or mutating breadcrumbs + * @return {Raven} + */ + setBreadcrumbCallback: function(callback) { + var original = this._globalOptions.breadcrumbCallback; + this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the shouldSendCallback option + * + * @param {function} callback The callback to run which allows + * introspecting the blob before sending + * @return {Raven} + */ + setShouldSendCallback: function(callback) { + var original = this._globalOptions.shouldSendCallback; + this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback); + return this; + }, + + /** + * Override the default HTTP transport mechanism that transmits data + * to the Sentry server. + * + * @param {function} transport Function invoked instead of the default + * `makeRequest` handler. + * + * @return {Raven} + */ + setTransport: function(transport) { + this._globalOptions.transport = transport; + + return this; + }, + + /* + * Get the latest raw exception that was captured by Raven. + * + * @return {error} + */ + lastException: function() { + return this._lastCapturedException; + }, + + /* + * Get the last event id + * + * @return {string} + */ + lastEventId: function() { + return this._lastEventId; + }, + + /* + * Determine if Raven is setup and ready to go. + * + * @return {boolean} + */ + isSetup: function() { + if (!this._hasJSON) return false; // needs JSON support + if (!this._globalServer) { + if (!this.ravenNotConfiguredError) { + this.ravenNotConfiguredError = true; + this._logDebug('error', 'Error: Raven has not been configured.'); + } + return false; + } + return true; + }, + + afterLoad: function() { + // TODO: remove window dependence? + + // Attempt to initialize Raven on load + var RavenConfig = _window.RavenConfig; + if (RavenConfig) { + this.config(RavenConfig.dsn, RavenConfig.config).install(); + } + }, + + showReportDialog: function(options) { + if ( + !_document // doesn't work without a document (React native) + ) + return; + + options = options || {}; + + var lastEventId = options.eventId || this.lastEventId(); + if (!lastEventId) { + throw new RavenConfigError('Missing eventId'); + } + + var dsn = options.dsn || this._dsn; + if (!dsn) { + throw new RavenConfigError('Missing DSN'); + } + + var encode = encodeURIComponent; + var qs = ''; + qs += '?eventId=' + encode(lastEventId); + qs += '&dsn=' + encode(dsn); + + var user = options.user || this._globalContext.user; + if (user) { + if (user.name) qs += '&name=' + encode(user.name); + if (user.email) qs += '&email=' + encode(user.email); + } + + var globalServer = this._getGlobalServer(this._parseDSN(dsn)); + + var script = _document.createElement('script'); + script.async = true; + script.src = globalServer + '/api/embed/error-page/' + qs; + (_document.head || _document.body).appendChild(script); + }, + + /**** Private functions ****/ + _ignoreNextOnError: function() { + var self = this; + this._ignoreOnError += 1; + setTimeout(function() { + // onerror should trigger before setTimeout + self._ignoreOnError -= 1; + }); + }, + + _triggerEvent: function(eventType, options) { + // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it + var evt, key; + + if (!this._hasDocument) return; + + options = options || {}; + + eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1); + + if (_document.createEvent) { + evt = _document.createEvent('HTMLEvents'); + evt.initEvent(eventType, true, true); + } else { + evt = _document.createEventObject(); + evt.eventType = eventType; + } + + for (key in options) + if (hasKey(options, key)) { + evt[key] = options[key]; + } + + if (_document.createEvent) { + // IE9 if standards + _document.dispatchEvent(evt); + } else { + // IE8 regardless of Quirks or Standards + // IE9 if quirks + try { + _document.fireEvent('on' + evt.eventType.toLowerCase(), evt); + } catch (e) { + // Do nothing + } + } + }, + + /** + * Wraps addEventListener to capture UI breadcrumbs + * @param evtName the event name (e.g. "click") + * @returns {Function} + * @private + */ + _breadcrumbEventHandler: function(evtName) { + var self = this; + return function(evt) { + // reset keypress timeout; e.g. triggering a 'click' after + // a 'keypress' will reset the keypress debounce so that a new + // set of keypresses can be recorded + self._keypressTimeout = null; + + // It's possible this handler might trigger multiple times for the same + // event (e.g. event propagation through node ancestors). Ignore if we've + // already captured the event. + if (self._lastCapturedEvent === evt) return; + + self._lastCapturedEvent = evt; + + // try/catch both: + // - accessing evt.target (see getsentry/raven-js#838, #768) + // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly + // can throw an exception in some circumstances. + var target; + try { + target = htmlTreeAsString(evt.target); + } catch (e) { + target = ''; + } + + self.captureBreadcrumb({ + category: 'ui.' + evtName, // e.g. ui.click, ui.input + message: target + }); + }; + }, + + /** + * Wraps addEventListener to capture keypress UI events + * @returns {Function} + * @private + */ + _keypressEventHandler: function() { + var self = this, + debounceDuration = 1000; // milliseconds + + // TODO: if somehow user switches keypress target before + // debounce timeout is triggered, we will only capture + // a single breadcrumb from the FIRST target (acceptable?) + return function(evt) { + var target; + try { + target = evt.target; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + var tagName = target && target.tagName; + + // only consider keypress events on actual input elements + // this will disregard keypresses targeting body (e.g. tabbing + // through elements, hotkeys, etc) + if ( + !tagName || + (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) + ) + return; + + // record first keypress in a series, but ignore subsequent + // keypresses until debounce clears + var timeout = self._keypressTimeout; + if (!timeout) { + self._breadcrumbEventHandler('input')(evt); + } + clearTimeout(timeout); + self._keypressTimeout = setTimeout(function() { + self._keypressTimeout = null; + }, debounceDuration); + }; + }, + + /** + * Captures a breadcrumb of type "navigation", normalizing input URLs + * @param to the originating URL + * @param from the target URL + * @private + */ + _captureUrlChange: function(from, to) { + var parsedLoc = parseUrl(this._location.href); + var parsedTo = parseUrl(to); + var parsedFrom = parseUrl(from); + + // because onpopstate only tells you the "new" (to) value of location.href, and + // not the previous (from) value, we need to track the value of the current URL + // state ourselves + this._lastHref = to; + + // Use only the path component of the URL if the URL matches the current + // document (almost all the time when using pushState) + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) + to = parsedTo.relative; + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) + from = parsedFrom.relative; + + this.captureBreadcrumb({ + category: 'navigation', + data: { + to: to, + from: from + } + }); + }, + + /** + * Wrap timer functions and event targets to catch errors and provide + * better metadata. + */ + _instrumentTryCatch: function() { + var self = this; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapTimeFn(orig) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + var originalCallback = args[0]; + if (isFunction(originalCallback)) { + args[0] = self.wrap(originalCallback); + } + + // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it + // also supports only two arguments and doesn't care what this is, so we + // can just call the original function directly. + if (orig.apply) { + return orig.apply(this, args); + } else { + return orig(args[0], args[1]); + } + }; + } + + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + function wrapEventTarget(global) { + var proto = _window[global] && _window[global].prototype; + if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) { + fill( + proto, + 'addEventListener', + function(orig) { + return function(evtName, fn, capture, secure) { + // preserve arity + try { + if (fn && fn.handleEvent) { + fn.handleEvent = self.wrap(fn.handleEvent); + } + } catch (err) { + // can sometimes get 'Permission denied to access property "handle Event' + } + + // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs` + // so that we don't have more than one wrapper function + var before, clickHandler, keypressHandler; + + if ( + autoBreadcrumbs && + autoBreadcrumbs.dom && + (global === 'EventTarget' || global === 'Node') + ) { + // NOTE: generating multiple handlers per addEventListener invocation, should + // revisit and verify we can just use one (almost certainly) + clickHandler = self._breadcrumbEventHandler('click'); + keypressHandler = self._keypressEventHandler(); + before = function(evt) { + // need to intercept every DOM event in `before` argument, in case that + // same wrapped method is re-used for different events (e.g. mousemove THEN click) + // see #724 + if (!evt) return; + + var eventType; + try { + eventType = evt.type; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + if (eventType === 'click') return clickHandler(evt); + else if (eventType === 'keypress') return keypressHandler(evt); + }; + } + return orig.call( + this, + evtName, + self.wrap(fn, undefined, before), + capture, + secure + ); + }; + }, + wrappedBuiltIns + ); + fill( + proto, + 'removeEventListener', + function(orig) { + return function(evt, fn, capture, secure) { + try { + fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn); + } catch (e) { + // ignore, accessing __raven_wrapper__ will throw in some Selenium environments + } + return orig.call(this, evt, fn, capture, secure); + }; + }, + wrappedBuiltIns + ); + } + } + + fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns); + fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns); + if (_window.requestAnimationFrame) { + fill( + _window, + 'requestAnimationFrame', + function(orig) { + return function(cb) { + return orig(self.wrap(cb)); + }; + }, + wrappedBuiltIns + ); + } + + // event targets borrowed from bugsnag-js: + // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666 + var eventTargets = [ + 'EventTarget', + 'Window', + 'Node', + 'ApplicationCache', + 'AudioTrackList', + 'ChannelMergerNode', + 'CryptoOperation', + 'EventSource', + 'FileReader', + 'HTMLUnknownElement', + 'IDBDatabase', + 'IDBRequest', + 'IDBTransaction', + 'KeyOperation', + 'MediaController', + 'MessagePort', + 'ModalWindow', + 'Notification', + 'SVGElementInstance', + 'Screen', + 'TextTrack', + 'TextTrackCue', + 'TextTrackList', + 'WebSocket', + 'WebSocketWorker', + 'Worker', + 'XMLHttpRequest', + 'XMLHttpRequestEventTarget', + 'XMLHttpRequestUpload' + ]; + for (var i = 0; i < eventTargets.length; i++) { + wrapEventTarget(eventTargets[i]); + } + }, + + /** + * Instrument browser built-ins w/ breadcrumb capturing + * - XMLHttpRequests + * - DOM interactions (click/typing) + * - window.location changes + * - console + * + * Can be disabled or individually configured via the `autoBreadcrumbs` config option + */ + _instrumentBreadcrumbs: function() { + var self = this; + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapProp(prop, xhr) { + if (prop in xhr && isFunction(xhr[prop])) { + fill(xhr, prop, function(orig) { + return self.wrap(orig); + }); // intentionally don't track filled methods on XHR instances + } + } + + if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) { + var xhrproto = XMLHttpRequest.prototype; + fill( + xhrproto, + 'open', + function(origOpen) { + return function(method, url) { + // preserve arity + + // if Sentry key appears in URL, don't capture + if (isString(url) && url.indexOf(self._globalKey) === -1) { + this.__raven_xhr = { + method: method, + url: url, + status_code: null + }; + } + + return origOpen.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + + fill( + xhrproto, + 'send', + function(origSend) { + return function(data) { + // preserve arity + var xhr = this; + + function onreadystatechangeHandler() { + if (xhr.__raven_xhr && xhr.readyState === 4) { + try { + // touching statusCode in some platforms throws + // an exception + xhr.__raven_xhr.status_code = xhr.status; + } catch (e) { + /* do nothing */ + } + + self.captureBreadcrumb({ + type: 'http', + category: 'xhr', + data: xhr.__raven_xhr + }); + } + } + + var props = ['onload', 'onerror', 'onprogress']; + for (var j = 0; j < props.length; j++) { + wrapProp(props[j], xhr); + } + + if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) { + fill( + xhr, + 'onreadystatechange', + function(orig) { + return self.wrap(orig, undefined, onreadystatechangeHandler); + } /* intentionally don't track this instrumentation */ + ); + } else { + // if onreadystatechange wasn't actually set by the page on this xhr, we + // are free to set our own and capture the breadcrumb + xhr.onreadystatechange = onreadystatechangeHandler; + } + + return origSend.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + } + + if (autoBreadcrumbs.xhr && 'fetch' in _window) { + fill( + _window, + 'fetch', + function(origFetch) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + var fetchInput = args[0]; + var method = 'GET'; + var url; + + if (typeof fetchInput === 'string') { + url = fetchInput; + } else if ('Request' in _window && fetchInput instanceof _window.Request) { + url = fetchInput.url; + if (fetchInput.method) { + method = fetchInput.method; + } + } else { + url = '' + fetchInput; + } + + if (args[1] && args[1].method) { + method = args[1].method; + } + + var fetchData = { + method: method, + url: url, + status_code: null + }; + + self.captureBreadcrumb({ + type: 'http', + category: 'fetch', + data: fetchData + }); + + return origFetch.apply(this, args).then(function(response) { + fetchData.status_code = response.status; + + return response; + }); + }; + }, + wrappedBuiltIns + ); + } + + // Capture breadcrumbs from any click that is unhandled / bubbled up all the way + // to the document. Do this before we instrument addEventListener. + if (autoBreadcrumbs.dom && this._hasDocument) { + if (_document.addEventListener) { + _document.addEventListener('click', self._breadcrumbEventHandler('click'), false); + _document.addEventListener('keypress', self._keypressEventHandler(), false); + } else { + // IE8 Compatibility + _document.attachEvent('onclick', self._breadcrumbEventHandler('click')); + _document.attachEvent('onkeypress', self._keypressEventHandler()); + } + } + + // record navigation (URL) changes + // NOTE: in Chrome App environment, touching history.pushState, *even inside + // a try/catch block*, will cause Chrome to output an error to console.error + // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var chrome = _window.chrome; + var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + var hasPushAndReplaceState = + !isChromePackagedApp && + _window.history && + history.pushState && + history.replaceState; + if (autoBreadcrumbs.location && hasPushAndReplaceState) { + // TODO: remove onpopstate handler on uninstall() + var oldOnPopState = _window.onpopstate; + _window.onpopstate = function() { + var currentHref = self._location.href; + self._captureUrlChange(self._lastHref, currentHref); + + if (oldOnPopState) { + return oldOnPopState.apply(this, arguments); + } + }; + + var historyReplacementFunction = function(origHistFunction) { + // note history.pushState.length is 0; intentionally not declaring + // params to preserve 0 arity + return function(/* state, title, url */) { + var url = arguments.length > 2 ? arguments[2] : undefined; + + // url argument is optional + if (url) { + // coerce to string (this is what pushState does) + self._captureUrlChange(self._lastHref, url + ''); + } + + return origHistFunction.apply(this, arguments); + }; + }; + + fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns); + fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns); + } + + if (autoBreadcrumbs.console && 'console' in _window && console.log) { + // console + var consoleMethodCallback = function(msg, data) { + self.captureBreadcrumb({ + message: msg, + level: data.level, + category: 'console' + }); + }; + + each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) { + wrapConsoleMethod(console, level, consoleMethodCallback); + }); + } + }, + + _restoreBuiltIns: function() { + // restore any wrapped builtins + var builtin; + while (this._wrappedBuiltIns.length) { + builtin = this._wrappedBuiltIns.shift(); + + var obj = builtin[0], + name = builtin[1], + orig = builtin[2]; + + obj[name] = orig; + } + }, + + _drainPlugins: function() { + var self = this; + + // FIX ME TODO + each(this._plugins, function(_, plugin) { + var installer = plugin[0]; + var args = plugin[1]; + installer.apply(self, [self].concat(args)); + }); + }, + + _parseDSN: function(str) { + var m = dsnPattern.exec(str), + dsn = {}, + i = 7; + + try { + while (i--) dsn[dsnKeys[i]] = m[i] || ''; + } catch (e) { + throw new RavenConfigError('Invalid DSN: ' + str); + } + + if (dsn.pass && !this._globalOptions.allowSecretKey) { + throw new RavenConfigError( + 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key' + ); + } + + return dsn; + }, + + _getGlobalServer: function(uri) { + // assemble the endpoint from the uri pieces + var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : ''); + + if (uri.protocol) { + globalServer = uri.protocol + ':' + globalServer; + } + return globalServer; + }, + + _handleOnErrorStackInfo: function() { + // if we are intentionally ignoring errors via onerror, bail out + if (!this._ignoreOnError) { + this._handleStackInfo.apply(this, arguments); + } + }, + + _handleStackInfo: function(stackInfo, options) { + var frames = this._prepareFrames(stackInfo, options); + + this._triggerEvent('handle', { + stackInfo: stackInfo, + options: options + }); + + this._processException( + stackInfo.name, + stackInfo.message, + stackInfo.url, + stackInfo.lineno, + frames, + options + ); + }, + + _prepareFrames: function(stackInfo, options) { + var self = this; + var frames = []; + if (stackInfo.stack && stackInfo.stack.length) { + each(stackInfo.stack, function(i, stack) { + var frame = self._normalizeFrame(stack, stackInfo.url); + if (frame) { + frames.push(frame); + } + }); + + // e.g. frames captured via captureMessage throw + if (options && options.trimHeadFrames) { + for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) { + frames[j].in_app = false; + } + } + } + frames = frames.slice(0, this._globalOptions.stackTraceLimit); + return frames; + }, + + _normalizeFrame: function(frame, stackInfoUrl) { + // normalize the frames data + var normalized = { + filename: frame.url, + lineno: frame.line, + colno: frame.column, + function: frame.func || '?' + }; + + // Case when we don't have any information about the error + // E.g. throwing a string or raw object, instead of an `Error` in Firefox + // Generating synthetic error doesn't add any value here + // + // We should probably somehow let a user know that they should fix their code + if (!frame.url) { + normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler + } + + normalized.in_app = !// determine if an exception came from outside of our app + // first we check the global includePaths list. + ( + (!!this._globalOptions.includePaths.test && + !this._globalOptions.includePaths.test(normalized.filename)) || + // Now we check for fun, if the function name is Raven or TraceKit + /(Raven|TraceKit)\./.test(normalized['function']) || + // finally, we do a last ditch effort and check for raven.min.js + /raven\.(min\.)?js$/.test(normalized.filename) + ); + + return normalized; + }, + + _processException: function(type, message, fileurl, lineno, frames, options) { + var prefixedMessage = (type ? type + ': ' : '') + (message || ''); + if ( + !!this._globalOptions.ignoreErrors.test && + (this._globalOptions.ignoreErrors.test(message) || + this._globalOptions.ignoreErrors.test(prefixedMessage)) + ) { + return; + } + + var stacktrace; + + if (frames && frames.length) { + fileurl = frames[0].filename || fileurl; + // Sentry expects frames oldest to newest + // and JS sends them as newest to oldest + frames.reverse(); + stacktrace = {frames: frames}; + } else if (fileurl) { + stacktrace = { + frames: [ + { + filename: fileurl, + lineno: lineno, + in_app: true + } + ] + }; + } + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + var data = objectMerge( + { + // sentry.interfaces.Exception + exception: { + values: [ + { + type: type, + value: message, + stacktrace: stacktrace + } + ] + }, + culprit: fileurl + }, + options + ); + + // Fire away! + this._send(data); + }, + + _trimPacket: function(data) { + // For now, we only want to truncate the two different messages + // but this could/should be expanded to just trim everything + var max = this._globalOptions.maxMessageLength; + if (data.message) { + data.message = truncate(data.message, max); + } + if (data.exception) { + var exception = data.exception.values[0]; + exception.value = truncate(exception.value, max); + } + + var request = data.request; + if (request) { + if (request.url) { + request.url = truncate(request.url, this._globalOptions.maxUrlLength); + } + if (request.Referer) { + request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength); + } + } + + if (data.breadcrumbs && data.breadcrumbs.values) + this._trimBreadcrumbs(data.breadcrumbs); + + return data; + }, + + /** + * Truncate breadcrumb values (right now just URLs) + */ + _trimBreadcrumbs: function(breadcrumbs) { + // known breadcrumb properties with urls + // TODO: also consider arbitrary prop values that start with (https?)?:// + var urlProps = ['to', 'from', 'url'], + urlProp, + crumb, + data; + + for (var i = 0; i < breadcrumbs.values.length; ++i) { + crumb = breadcrumbs.values[i]; + if ( + !crumb.hasOwnProperty('data') || + !isObject(crumb.data) || + objectFrozen(crumb.data) + ) + continue; + + data = objectMerge({}, crumb.data); + for (var j = 0; j < urlProps.length; ++j) { + urlProp = urlProps[j]; + if (data.hasOwnProperty(urlProp) && data[urlProp]) { + data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength); + } + } + breadcrumbs.values[i].data = data; + } + }, + + _getHttpData: function() { + if (!this._hasNavigator && !this._hasDocument) return; + var httpData = {}; + + if (this._hasNavigator && _navigator.userAgent) { + httpData.headers = { + 'User-Agent': navigator.userAgent + }; + } + + if (this._hasDocument) { + if (_document.location && _document.location.href) { + httpData.url = _document.location.href; + } + if (_document.referrer) { + if (!httpData.headers) httpData.headers = {}; + httpData.headers.Referer = _document.referrer; + } + } + + return httpData; + }, + + _resetBackoff: function() { + this._backoffDuration = 0; + this._backoffStart = null; + }, + + _shouldBackoff: function() { + return this._backoffDuration && now() - this._backoffStart < this._backoffDuration; + }, + + /** + * Returns true if the in-process data payload matches the signature + * of the previously-sent data + * + * NOTE: This has to be done at this level because TraceKit can generate + * data from window.onerror WITHOUT an exception object (IE8, IE9, + * other old browsers). This can take the form of an "exception" + * data object with a single frame (derived from the onerror args). + */ + _isRepeatData: function(current) { + var last = this._lastData; + + if ( + !last || + current.message !== last.message || // defined for captureMessage + current.culprit !== last.culprit // defined for captureException/onerror + ) + return false; + + // Stacktrace interface (i.e. from captureMessage) + if (current.stacktrace || last.stacktrace) { + return isSameStacktrace(current.stacktrace, last.stacktrace); + } else if (current.exception || last.exception) { + // Exception interface (i.e. from captureException/onerror) + return isSameException(current.exception, last.exception); + } + + return true; + }, + + _setBackoffState: function(request) { + // If we are already in a backoff state, don't change anything + if (this._shouldBackoff()) { + return; + } + + var status = request.status; + + // 400 - project_id doesn't exist or some other fatal + // 401 - invalid/revoked dsn + // 429 - too many requests + if (!(status === 400 || status === 401 || status === 429)) return; + + var retry; + try { + // If Retry-After is not in Access-Control-Expose-Headers, most + // browsers will throw an exception trying to access it + retry = request.getResponseHeader('Retry-After'); + retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds + } catch (e) { + /* eslint no-empty:0 */ + } + + this._backoffDuration = retry + ? // If Sentry server returned a Retry-After value, use it + retry + : // Otherwise, double the last backoff duration (starts at 1 sec) + this._backoffDuration * 2 || 1000; + + this._backoffStart = now(); + }, + + _send: function(data) { + var globalOptions = this._globalOptions; + + var baseData = { + project: this._globalProject, + logger: globalOptions.logger, + platform: 'javascript' + }, + httpData = this._getHttpData(); + + if (httpData) { + baseData.request = httpData; + } + + // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload + if (data.trimHeadFrames) delete data.trimHeadFrames; + + data = objectMerge(baseData, data); + + // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge + data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags); + data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra); + + // Send along our own collected metadata with extra + data.extra['session:duration'] = now() - this._startTime; + + if (this._breadcrumbs && this._breadcrumbs.length > 0) { + // intentionally make shallow copy so that additions + // to breadcrumbs aren't accidentally sent in this request + data.breadcrumbs = { + values: [].slice.call(this._breadcrumbs, 0) + }; + } + + // If there are no tags/extra, strip the key from the payload alltogther. + if (isEmptyObject(data.tags)) delete data.tags; + + if (this._globalContext.user) { + // sentry.interfaces.User + data.user = this._globalContext.user; + } + + // Include the environment if it's defined in globalOptions + if (globalOptions.environment) data.environment = globalOptions.environment; + + // Include the release if it's defined in globalOptions + if (globalOptions.release) data.release = globalOptions.release; + + // Include server_name if it's defined in globalOptions + if (globalOptions.serverName) data.server_name = globalOptions.serverName; + + if (isFunction(globalOptions.dataCallback)) { + data = globalOptions.dataCallback(data) || data; + } + + // Why?????????? + if (!data || isEmptyObject(data)) { + return; + } + + // Check if the request should be filtered or not + if ( + isFunction(globalOptions.shouldSendCallback) && + !globalOptions.shouldSendCallback(data) + ) { + return; + } + + // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests), + // so drop requests until "cool-off" period has elapsed. + if (this._shouldBackoff()) { + this._logDebug('warn', 'Raven dropped error due to backoff: ', data); + return; + } + + if (typeof globalOptions.sampleRate === 'number') { + if (Math.random() < globalOptions.sampleRate) { + this._sendProcessedPayload(data); + } + } else { + this._sendProcessedPayload(data); + } + }, + + _getUuid: function() { + return uuid4(); + }, + + _sendProcessedPayload: function(data, callback) { + var self = this; + var globalOptions = this._globalOptions; + + if (!this.isSetup()) return; + + // Try and clean up the packet before sending by truncating long values + data = this._trimPacket(data); + + // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback, + // but this would require copying an un-truncated copy of the data packet, which can be + // arbitrarily deep (extra_data) -- could be worthwhile? will revisit + if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) { + this._logDebug('warn', 'Raven dropped repeat event: ', data); + return; + } + + // Send along an event_id if not explicitly passed. + // This event_id can be used to reference the error within Sentry itself. + // Set lastEventId after we know the error should actually be sent + this._lastEventId = data.event_id || (data.event_id = this._getUuid()); + + // Store outbound payload after trim + this._lastData = data; + + this._logDebug('debug', 'Raven about to send:', data); + + var auth = { + sentry_version: '7', + sentry_client: 'raven-js/' + this.VERSION, + sentry_key: this._globalKey + }; + + if (this._globalSecret) { + auth.sentry_secret = this._globalSecret; + } + + var exception = data.exception && data.exception.values[0]; + this.captureBreadcrumb({ + category: 'sentry', + message: exception + ? (exception.type ? exception.type + ': ' : '') + exception.value + : data.message, + event_id: data.event_id, + level: data.level || 'error' // presume error unless specified + }); + + var url = this._globalEndpoint; + (globalOptions.transport || this._makeRequest).call(this, { + url: url, + auth: auth, + data: data, + options: globalOptions, + onSuccess: function success() { + self._resetBackoff(); + + self._triggerEvent('success', { + data: data, + src: url + }); + callback && callback(); + }, + onError: function failure(error) { + self._logDebug('error', 'Raven transport failed to send: ', error); + + if (error.request) { + self._setBackoffState(error.request); + } + + self._triggerEvent('failure', { + data: data, + src: url + }); + error = error || new Error('Raven send failed (no additional details provided)'); + callback && callback(error); + } + }); + }, + + _makeRequest: function(opts) { + var request = _window.XMLHttpRequest && new _window.XMLHttpRequest(); + if (!request) return; + + // if browser doesn't support CORS (e.g. IE7), we are out of luck + var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined'; + + if (!hasCORS) return; + + var url = opts.url; + + if ('withCredentials' in request) { + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } else if (request.status === 200) { + opts.onSuccess && opts.onSuccess(); + } else if (opts.onError) { + var err = new Error('Sentry error code: ' + request.status); + err.request = request; + opts.onError(err); + } + }; + } else { + request = new XDomainRequest(); + // xdomainrequest cannot go http -> https (or vice versa), + // so always use protocol relative + url = url.replace(/^https?:/, ''); + + // onreadystatechange not supported by XDomainRequest + if (opts.onSuccess) { + request.onload = opts.onSuccess; + } + if (opts.onError) { + request.onerror = function() { + var err = new Error('Sentry error code: XDomainRequest'); + err.request = request; + opts.onError(err); + }; + } + } + + // NOTE: auth is intentionally sent as part of query string (NOT as custom + // HTTP header) so as to avoid preflight CORS requests + request.open('POST', url + '?' + urlencode(opts.auth)); + request.send(stringify(opts.data)); + }, + + _logDebug: function(level) { + if (this._originalConsoleMethods[level] && this.debug) { + // In IE<10 console methods do not have their own 'apply' method + Function.prototype.apply.call( + this._originalConsoleMethods[level], + this._originalConsole, + [].slice.call(arguments, 1) + ); + } + }, + + _mergeContext: function(key, context) { + if (isUndefined(context)) { + delete this._globalContext[key]; + } else { + this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context); + } + } +}; + +// Deprecations +Raven.prototype.setUser = Raven.prototype.setUserContext; +Raven.prototype.setReleaseContext = Raven.prototype.setRelease; + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/singleton.js": +/*!************************************************!*\ + !*** ./node_modules/raven-js/src/singleton.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * Enforces a single instance of the Raven client, and the + * main entry point for Raven. If you are a consumer of the + * Raven library, you SHOULD load this file (vs raven.js). + **/ + +var RavenConstructor = __webpack_require__(/*! ./raven */ "./node_modules/raven-js/src/raven.js"); + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _Raven = _window.Raven; + +var Raven = new RavenConstructor(); + +/* + * Allow multiple versions of Raven to be installed. + * Strip Raven from the global context and returns the instance. + * + * @return {Raven} + */ +Raven.noConflict = function() { + _window.Raven = _Raven; + return Raven; +}; + +Raven.afterLoad(); + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/utils.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/utils.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +function isObject(what) { + return typeof what === 'object' && what !== null; +} + +// Yanked from https://git.io/vS8DV re-used under CC0 +// with some tiny modifications +function isError(value) { + switch ({}.toString.call(value)) { + case '[object Error]': + return true; + case '[object Exception]': + return true; + case '[object DOMException]': + return true; + default: + return value instanceof Error; + } +} + +function isErrorEvent(value) { + return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]'; +} + +function isUndefined(what) { + return what === void 0; +} + +function isFunction(what) { + return typeof what === 'function'; +} + +function isString(what) { + return Object.prototype.toString.call(what) === '[object String]'; +} + +function isEmptyObject(what) { + for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars + return true; +} + +function supportsErrorEvent() { + try { + new ErrorEvent(''); // eslint-disable-line no-new + return true; + } catch (e) { + return false; + } +} + +function wrappedCallback(callback) { + function dataCallback(data, original) { + var normalizedData = callback(data) || data; + if (original) { + return original(normalizedData) || normalizedData; + } + return normalizedData; + } + + return dataCallback; +} + +function each(obj, callback) { + var i, j; + + if (isUndefined(obj.length)) { + for (i in obj) { + if (hasKey(obj, i)) { + callback.call(null, i, obj[i]); + } + } + } else { + j = obj.length; + if (j) { + for (i = 0; i < j; i++) { + callback.call(null, i, obj[i]); + } + } + } +} + +function objectMerge(obj1, obj2) { + if (!obj2) { + return obj1; + } + each(obj2, function(key, value) { + obj1[key] = value; + }); + return obj1; +} + +/** + * This function is only used for react-native. + * react-native freezes object that have already been sent over the + * js bridge. We need this function in order to check if the object is frozen. + * So it's ok that objectFrozen returns false if Object.isFrozen is not + * supported because it's not relevant for other "platforms". See related issue: + * https://github.com/getsentry/react-native-sentry/issues/57 + */ +function objectFrozen(obj) { + if (!Object.isFrozen) { + return false; + } + return Object.isFrozen(obj); +} + +function truncate(str, max) { + return !max || str.length <= max ? str : str.substr(0, max) + '\u2026'; +} + +/** + * hasKey, a better form of hasOwnProperty + * Example: hasKey(MainHostObject, property) === true/false + * + * @param {Object} host object to check property + * @param {string} key to check + */ +function hasKey(object, key) { + return Object.prototype.hasOwnProperty.call(object, key); +} + +function joinRegExp(patterns) { + // Combine an array of regular expressions and strings into one large regexp + // Be mad. + var sources = [], + i = 0, + len = patterns.length, + pattern; + + for (; i < len; i++) { + pattern = patterns[i]; + if (isString(pattern)) { + // If it's a string, we need to escape it + // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1')); + } else if (pattern && pattern.source) { + // If it's a regexp already, we want to extract the source + sources.push(pattern.source); + } + // Intentionally skip other cases + } + return new RegExp(sources.join('|'), 'i'); +} + +function urlencode(o) { + var pairs = []; + each(o, function(key, value) { + pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + return pairs.join('&'); +} + +// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B +// intentionally using regex and not href parsing trick because React Native and other +// environments where DOM might not be available +function parseUrl(url) { + var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); + if (!match) return {}; + + // coerce to undefined values to empty string so we don't get 'undefined' + var query = match[6] || ''; + var fragment = match[8] || ''; + return { + protocol: match[2], + host: match[4], + path: match[5], + relative: match[5] + query + fragment // everything minus origin + }; +} +function uuid4() { + var crypto = _window.crypto || _window.msCrypto; + + if (!isUndefined(crypto) && crypto.getRandomValues) { + // Use window.crypto API if available + // eslint-disable-next-line no-undef + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); + + // set 4 in byte 7 + arr[3] = (arr[3] & 0xfff) | 0x4000; + // set 2 most significant bits of byte 9 to '10' + arr[4] = (arr[4] & 0x3fff) | 0x8000; + + var pad = function(num) { + var v = num.toString(16); + while (v.length < 4) { + v = '0' + v; + } + return v; + }; + + return ( + pad(arr[0]) + + pad(arr[1]) + + pad(arr[2]) + + pad(arr[3]) + + pad(arr[4]) + + pad(arr[5]) + + pad(arr[6]) + + pad(arr[7]) + ); + } else { + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + } +} + +/** + * Given a child DOM element, returns a query-selector statement describing that + * and its ancestors + * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] + * @param elem + * @returns {string} + */ +function htmlTreeAsString(elem) { + /* eslint no-extra-parens:0*/ + var MAX_TRAVERSE_HEIGHT = 5, + MAX_OUTPUT_LEN = 80, + out = [], + height = 0, + len = 0, + separator = ' > ', + sepLength = separator.length, + nextStr; + + while (elem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = htmlElementAsString(elem); + // bail out if + // - nextStr is the 'html' element + // - the length of the string that would be created exceeds MAX_OUTPUT_LEN + // (ignore this limit if we are on the first iteration) + if ( + nextStr === 'html' || + (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) + ) { + break; + } + + out.push(nextStr); + + len += nextStr.length; + elem = elem.parentNode; + } + + return out.reverse().join(separator); +} + +/** + * Returns a simple, query-selector representation of a DOM element + * e.g. [HTMLElement] => input#foo.btn[name=baz] + * @param HTMLElement + * @returns {string} + */ +function htmlElementAsString(elem) { + var out = [], + className, + classes, + key, + attr, + i; + + if (!elem || !elem.tagName) { + return ''; + } + + out.push(elem.tagName.toLowerCase()); + if (elem.id) { + out.push('#' + elem.id); + } + + className = elem.className; + if (className && isString(className)) { + classes = className.split(/\s+/); + for (i = 0; i < classes.length; i++) { + out.push('.' + classes[i]); + } + } + var attrWhitelist = ['type', 'name', 'title', 'alt']; + for (i = 0; i < attrWhitelist.length; i++) { + key = attrWhitelist[i]; + attr = elem.getAttribute(key); + if (attr) { + out.push('[' + key + '="' + attr + '"]'); + } + } + return out.join(''); +} + +/** + * Returns true if either a OR b is truthy, but not both + */ +function isOnlyOneTruthy(a, b) { + return !!(!!a ^ !!b); +} + +/** + * Returns true if the two input exception interfaces have the same content + */ +function isSameException(ex1, ex2) { + if (isOnlyOneTruthy(ex1, ex2)) return false; + + ex1 = ex1.values[0]; + ex2 = ex2.values[0]; + + if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false; + + return isSameStacktrace(ex1.stacktrace, ex2.stacktrace); +} + +/** + * Returns true if the two input stack trace interfaces have the same content + */ +function isSameStacktrace(stack1, stack2) { + if (isOnlyOneTruthy(stack1, stack2)) return false; + + var frames1 = stack1.frames; + var frames2 = stack2.frames; + + // Exit early if frame count differs + if (frames1.length !== frames2.length) return false; + + // Iterate through every frame; bail out if anything differs + var a, b; + for (var i = 0; i < frames1.length; i++) { + a = frames1[i]; + b = frames2[i]; + if ( + a.filename !== b.filename || + a.lineno !== b.lineno || + a.colno !== b.colno || + a['function'] !== b['function'] + ) + return false; + } + return true; +} + +/** + * Polyfill a method + * @param obj object e.g. `document` + * @param name method name present on object e.g. `addEventListener` + * @param replacement replacement function + * @param track {optional} record instrumentation to an array + */ +function fill(obj, name, replacement, track) { + var orig = obj[name]; + obj[name] = replacement(orig); + if (track) { + track.push([obj, name, orig]); + } +} + +module.exports = { + isObject: isObject, + isError: isError, + isErrorEvent: isErrorEvent, + isUndefined: isUndefined, + isFunction: isFunction, + isString: isString, + isEmptyObject: isEmptyObject, + supportsErrorEvent: supportsErrorEvent, + wrappedCallback: wrappedCallback, + each: each, + objectMerge: objectMerge, + truncate: truncate, + objectFrozen: objectFrozen, + hasKey: hasKey, + joinRegExp: joinRegExp, + urlencode: urlencode, + uuid4: uuid4, + htmlTreeAsString: htmlTreeAsString, + htmlElementAsString: htmlElementAsString, + isSameException: isSameException, + isSameStacktrace: isSameStacktrace, + parseUrl: parseUrl, + fill: fill +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/TraceKit/tracekit.js": +/*!***********************************************************!*\ + !*** ./node_modules/raven-js/vendor/TraceKit/tracekit.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var utils = __webpack_require__(/*! ../../src/utils */ "./node_modules/raven-js/src/utils.js"); + +/* + TraceKit - Cross brower stack traces + + This was originally forked from github.com/occ/TraceKit, but has since been + largely re-written and is now maintained as part of raven-js. Tests for + this are in test/vendor. + + MIT license +*/ + +var TraceKit = { + collectWindowErrors: true, + debug: false +}; + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +// global reference to slice +var _slice = [].slice; +var UNKNOWN_FUNCTION = '?'; + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types +var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/; + +function getLocationHref() { + if (typeof document === 'undefined' || document.location == null) return ''; + + return document.location.href; +} + +/** + * TraceKit.report: cross-browser processing of unhandled exceptions + * + * Syntax: + * TraceKit.report.subscribe(function(stackInfo) { ... }) + * TraceKit.report.unsubscribe(function(stackInfo) { ... }) + * TraceKit.report(exception) + * try { ...code... } catch(ex) { TraceKit.report(ex); } + * + * Supports: + * - Firefox: full stack trace with line numbers, plus column number + * on top frame; column number is not guaranteed + * - Opera: full stack trace with line and column numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * - IE: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * + * In theory, TraceKit should work on all of the following versions: + * - IE5.5+ (only 8.0 tested) + * - Firefox 0.9+ (only 3.5+ tested) + * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require + * Exceptions Have Stacktrace to be enabled in opera:config) + * - Safari 3+ (only 4+ tested) + * - Chrome 1+ (only 5+ tested) + * - Konqueror 3.5+ (untested) + * + * Requires TraceKit.computeStackTrace. + * + * Tries to catch all unhandled exceptions and report them to the + * subscribed handlers. Please note that TraceKit.report will rethrow the + * exception. This is REQUIRED in order to get a useful stack trace in IE. + * If the exception does not reach the top of the browser, you will only + * get a stack trace from the point where TraceKit.report was called. + * + * Handlers receive a stackInfo object as described in the + * TraceKit.computeStackTrace docs. + */ +TraceKit.report = (function reportModuleWrapper() { + var handlers = [], + lastArgs = null, + lastException = null, + lastExceptionStack = null; + + /** + * Add a crash handler. + * @param {Function} handler + */ + function subscribe(handler) { + installGlobalHandler(); + handlers.push(handler); + } + + /** + * Remove a crash handler. + * @param {Function} handler + */ + function unsubscribe(handler) { + for (var i = handlers.length - 1; i >= 0; --i) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } + + /** + * Remove all crash handlers. + */ + function unsubscribeAll() { + uninstallGlobalHandler(); + handlers = []; + } + + /** + * Dispatch stack information to all handlers. + * @param {Object.} stack + */ + function notifyHandlers(stack, isWindowError) { + var exception = null; + if (isWindowError && !TraceKit.collectWindowErrors) { + return; + } + for (var i in handlers) { + if (handlers.hasOwnProperty(i)) { + try { + handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); + } catch (inner) { + exception = inner; + } + } + } + + if (exception) { + throw exception; + } + } + + var _oldOnerrorHandler, _onErrorHandlerInstalled; + + /** + * Ensures all global unhandled exceptions are recorded. + * Supported by Gecko and IE. + * @param {string} message Error message. + * @param {string} url URL of script that generated the exception. + * @param {(number|string)} lineNo The line number at which the error + * occurred. + * @param {?(number|string)} colNo The column number at which the error + * occurred. + * @param {?Error} ex The actual Error object. + */ + function traceKitWindowOnError(message, url, lineNo, colNo, ex) { + var stack = null; + + if (lastExceptionStack) { + TraceKit.computeStackTrace.augmentStackTraceWithInitialElement( + lastExceptionStack, + url, + lineNo, + message + ); + processLastException(); + } else if (ex && utils.isError(ex)) { + // non-string `ex` arg; attempt to extract stack trace + + // New chrome and blink send along a real error object + // Let's just report that like a normal error. + // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror + stack = TraceKit.computeStackTrace(ex); + notifyHandlers(stack, true); + } else { + var location = { + url: url, + line: lineNo, + column: colNo + }; + + var name = undefined; + var msg = message; // must be new var or will modify original `arguments` + var groups; + if ({}.toString.call(message) === '[object String]') { + var groups = message.match(ERROR_TYPES_RE); + if (groups) { + name = groups[1]; + msg = groups[2]; + } + } + + location.func = UNKNOWN_FUNCTION; + + stack = { + name: name, + message: msg, + url: getLocationHref(), + stack: [location] + }; + notifyHandlers(stack, true); + } + + if (_oldOnerrorHandler) { + return _oldOnerrorHandler.apply(this, arguments); + } + + return false; + } + + function installGlobalHandler() { + if (_onErrorHandlerInstalled) { + return; + } + _oldOnerrorHandler = _window.onerror; + _window.onerror = traceKitWindowOnError; + _onErrorHandlerInstalled = true; + } + + function uninstallGlobalHandler() { + if (!_onErrorHandlerInstalled) { + return; + } + _window.onerror = _oldOnerrorHandler; + _onErrorHandlerInstalled = false; + _oldOnerrorHandler = undefined; + } + + function processLastException() { + var _lastExceptionStack = lastExceptionStack, + _lastArgs = lastArgs; + lastArgs = null; + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs)); + } + + /** + * Reports an unhandled Error to TraceKit. + * @param {Error} ex + * @param {?boolean} rethrow If false, do not re-throw the exception. + * Only used for window.onerror to not cause an infinite loop of + * rethrowing. + */ + function report(ex, rethrow) { + var args = _slice.call(arguments, 1); + if (lastExceptionStack) { + if (lastException === ex) { + return; // already caught by an inner catch block, ignore + } else { + processLastException(); + } + } + + var stack = TraceKit.computeStackTrace(ex); + lastExceptionStack = stack; + lastException = ex; + lastArgs = args; + + // If the stack trace is incomplete, wait for 2 seconds for + // slow slow IE to see if onerror occurs or not before reporting + // this exception; otherwise, we will end up with an incomplete + // stack trace + setTimeout(function() { + if (lastException === ex) { + processLastException(); + } + }, stack.incomplete ? 2000 : 0); + + if (rethrow !== false) { + throw ex; // re-throw to propagate to the top level (and cause window.onerror) + } + } + + report.subscribe = subscribe; + report.unsubscribe = unsubscribe; + report.uninstall = unsubscribeAll; + return report; +})(); + +/** + * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript + * + * Syntax: + * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) + * Returns: + * s.name - exception name + * s.message - exception message + * s.stack[i].url - JavaScript or HTML file URL + * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) + * s.stack[i].args - arguments passed to the function, if known + * s.stack[i].line - line number, if known + * s.stack[i].column - column number, if known + * + * Supports: + * - Firefox: full stack trace with line numbers and unreliable column + * number on top frame + * - Opera 10: full stack trace with line and column numbers + * - Opera 9-: full stack trace with line numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the topmost stacktrace element + * only + * - IE: no line numbers whatsoever + * + * Tries to guess names of anonymous functions by looking for assignments + * in the source code. In IE and Safari, we have to guess source file names + * by searching for function bodies inside all page scripts. This will not + * work for scripts that are loaded cross-domain. + * Here be dragons: some function names may be guessed incorrectly, and + * duplicate functions may be mismatched. + * + * TraceKit.computeStackTrace should only be used for tracing purposes. + * Logging of unhandled exceptions should be done with TraceKit.report, + * which builds on top of TraceKit.computeStackTrace and provides better + * IE support by utilizing the window.onerror event to retrieve information + * about the top of the stack. + * + * Note: In IE and Safari, no stack trace is recorded on the Error object, + * so computeStackTrace instead walks its *own* chain of callers. + * This means that: + * * in Safari, some methods may be missing from the stack trace; + * * in IE, the topmost function in the stack trace will always be the + * caller of computeStackTrace. + * + * This is okay for tracing (because you are likely to be calling + * computeStackTrace from the function you want to be the topmost element + * of the stack trace anyway), but not okay for logging unhandled + * exceptions (because your catch block will likely be far away from the + * inner function that actually caused the exception). + * + */ +TraceKit.computeStackTrace = (function computeStackTraceWrapper() { + // Contents of Exception in various browsers. + // + // SAFARI: + // ex.message = Can't find variable: qq + // ex.line = 59 + // ex.sourceId = 580238192 + // ex.sourceURL = http://... + // ex.expressionBeginOffset = 96 + // ex.expressionCaretOffset = 98 + // ex.expressionEndOffset = 98 + // ex.name = ReferenceError + // + // FIREFOX: + // ex.message = qq is not defined + // ex.fileName = http://... + // ex.lineNumber = 59 + // ex.columnNumber = 69 + // ex.stack = ...stack trace... (see the example below) + // ex.name = ReferenceError + // + // CHROME: + // ex.message = qq is not defined + // ex.name = ReferenceError + // ex.type = not_defined + // ex.arguments = ['aa'] + // ex.stack = ...stack trace... + // + // INTERNET EXPLORER: + // ex.message = ... + // ex.name = ReferenceError + // + // OPERA: + // ex.message = ...message... (see the example below) + // ex.name = ReferenceError + // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) + // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + + /** + * Computes stack trace information from the stack property. + * Chrome and Gecko use this property. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceFromStackProp(ex) { + if (typeof ex.stack === 'undefined' || !ex.stack) return; + + var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, + gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i, + winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i, + // Used to additionally parse URL/line/column from eval frames + geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, + chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/, + lines = ex.stack.split('\n'), + stack = [], + submatch, + parts, + element, + reference = /^(.*) is undefined$/.exec(ex.message); + + for (var i = 0, j = lines.length; i < j; ++i) { + if ((parts = chrome.exec(lines[i]))) { + var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + if (isEval && (submatch = chromeEval.exec(parts[2]))) { + // throw out eval line/column and use top-most line/column number + parts[2] = submatch[1]; // url + parts[3] = submatch[2]; // line + parts[4] = submatch[3]; // column + } + element = { + url: !isNative ? parts[2] : null, + func: parts[1] || UNKNOWN_FUNCTION, + args: isNative ? [parts[2]] : [], + line: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = winjs.exec(lines[i]))) { + element = { + url: parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: [], + line: +parts[3], + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = gecko.exec(lines[i]))) { + var isEval = parts[3] && parts[3].indexOf(' > eval') > -1; + if (isEval && (submatch = geckoEval.exec(parts[3]))) { + // throw out eval line/column and use top-most line number + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = null; // no column when eval + } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') { + // FireFox uses this awesome columnNumber property for its top frame + // Also note, Firefox's column number is 0-based and everything else expects 1-based, + // so adding 1 + // NOTE: this hack doesn't work if top-most frame is eval + stack[0].column = ex.columnNumber + 1; + } + element = { + url: parts[3], + func: parts[1] || UNKNOWN_FUNCTION, + args: parts[2] ? parts[2].split(',') : [], + line: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null + }; + } else { + continue; + } + + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; + } + + stack.push(element); + } + + if (!stack.length) { + return null; + } + + return { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + } + + /** + * Adds information about the first frame to incomplete stack traces. + * Safari and IE require this to get complete data on the first frame. + * @param {Object.} stackInfo Stack trace information from + * one of the compute* methods. + * @param {string} url The URL of the script that caused an error. + * @param {(number|string)} lineNo The line number of the script that + * caused an error. + * @param {string=} message The error generated by the browser, which + * hopefully contains the name of the object that caused the error. + * @return {boolean} Whether or not the stack information was + * augmented. + */ + function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { + var initial = { + url: url, + line: lineNo + }; + + if (initial.url && initial.line) { + stackInfo.incomplete = false; + + if (!initial.func) { + initial.func = UNKNOWN_FUNCTION; + } + + if (stackInfo.stack.length > 0) { + if (stackInfo.stack[0].url === initial.url) { + if (stackInfo.stack[0].line === initial.line) { + return false; // already in stack trace + } else if ( + !stackInfo.stack[0].line && + stackInfo.stack[0].func === initial.func + ) { + stackInfo.stack[0].line = initial.line; + return false; + } + } + } + + stackInfo.stack.unshift(initial); + stackInfo.partial = true; + return true; + } else { + stackInfo.incomplete = true; + } + + return false; + } + + /** + * Computes stack trace information by walking the arguments.caller + * chain at the time the exception occurred. This will cause earlier + * frames to be missed but is the only way to get any stack trace in + * Safari and IE. The top frame is restored by + * {@link augmentStackTraceWithInitialElement}. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceByWalkingCallerChain(ex, depth) { + var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, + stack = [], + funcs = {}, + recursion = false, + parts, + item, + source; + + for ( + var curr = computeStackTraceByWalkingCallerChain.caller; + curr && !recursion; + curr = curr.caller + ) { + if (curr === computeStackTrace || curr === TraceKit.report) { + // console.log('skipping internal function'); + continue; + } + + item = { + url: null, + func: UNKNOWN_FUNCTION, + line: null, + column: null + }; + + if (curr.name) { + item.func = curr.name; + } else if ((parts = functionName.exec(curr.toString()))) { + item.func = parts[1]; + } + + if (typeof item.func === 'undefined') { + try { + item.func = parts.input.substring(0, parts.input.indexOf('{')); + } catch (e) {} + } + + if (funcs['' + curr]) { + recursion = true; + } else { + funcs['' + curr] = true; + } + + stack.push(item); + } + + if (depth) { + // console.log('depth is ' + depth); + // console.log('stack is ' + stack.length); + stack.splice(0, depth); + } + + var result = { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + augmentStackTraceWithInitialElement( + result, + ex.sourceURL || ex.fileName, + ex.line || ex.lineNumber, + ex.message || ex.description + ); + return result; + } + + /** + * Computes a stack trace for an exception. + * @param {Error} ex + * @param {(string|number)=} depth + */ + function computeStackTrace(ex, depth) { + var stack = null; + depth = depth == null ? 0 : +depth; + + try { + stack = computeStackTraceFromStackProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + + try { + stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + return { + name: ex.name, + message: ex.message, + url: getLocationHref() + }; + } + + computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; + computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp; + + return computeStackTrace; +})(); + +module.exports = TraceKit; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js": +/*!***********************************************************************!*\ + !*** ./node_modules/raven-js/vendor/json-stringify-safe/stringify.js ***! + \***********************************************************************/ +/***/ ((module, exports) => { + +/* + json-stringify-safe + Like JSON.stringify, but doesn't throw on circular references. + + Originally forked from https://github.com/isaacs/json-stringify-safe + version 5.0.1 on 3/8/2017 and modified to handle Errors serialization + and IE8 compatibility. Tests for this are in test/vendor. + + ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE +*/ + +exports = module.exports = stringify; +exports.getSerialize = serializer; + +function indexOf(haystack, needle) { + for (var i = 0; i < haystack.length; ++i) { + if (haystack[i] === needle) return i; + } + return -1; +} + +function stringify(obj, replacer, spaces, cycleReplacer) { + return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); +} + +// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106 +function stringifyError(value) { + var err = { + // These properties are implemented as magical getters and don't show up in for in + stack: value.stack, + message: value.message, + name: value.name + }; + + for (var i in value) { + if (Object.prototype.hasOwnProperty.call(value, i)) { + err[i] = value[i]; + } + } + + return err; +} + +function serializer(replacer, cycleReplacer) { + var stack = []; + var keys = []; + + if (cycleReplacer == null) { + cycleReplacer = function(key, value) { + if (stack[0] === value) { + return '[Circular ~]'; + } + return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'; + }; + } + + return function(key, value) { + if (stack.length > 0) { + var thisPos = indexOf(stack, this); + ~thisPos ? stack.splice(thisPos + 1) : stack.push(this); + ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key); + + if (~indexOf(stack, value)) { + value = cycleReplacer.call(this, key, value); + } + } else { + stack.push(value); + } + + return replacer == null + ? value instanceof Error ? stringifyError(value) : value + : replacer.call(this, key, value); + }; +} + + +/***/ }), + +/***/ "./node_modules/react/cjs/react-jsx-runtime.development.js": +/*!*****************************************************************!*\ + !*** ./node_modules/react/cjs/react-jsx-runtime.development.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +/** @license React v17.0.2 + * react-jsx-runtime.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +if (true) { + (function() { +'use strict'; + +var React = __webpack_require__(/*! react */ "react"); +var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); + +// ATTENTION +// When adding new symbols to this file, +// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' +// The Symbol used to tag the ReactElement-like types. If there is no native Symbol +// nor polyfill, then a plain number is used for performance. +var REACT_ELEMENT_TYPE = 0xeac7; +var REACT_PORTAL_TYPE = 0xeaca; +exports.Fragment = 0xeacb; +var REACT_STRICT_MODE_TYPE = 0xeacc; +var REACT_PROFILER_TYPE = 0xead2; +var REACT_PROVIDER_TYPE = 0xeacd; +var REACT_CONTEXT_TYPE = 0xeace; +var REACT_FORWARD_REF_TYPE = 0xead0; +var REACT_SUSPENSE_TYPE = 0xead1; +var REACT_SUSPENSE_LIST_TYPE = 0xead8; +var REACT_MEMO_TYPE = 0xead3; +var REACT_LAZY_TYPE = 0xead4; +var REACT_BLOCK_TYPE = 0xead9; +var REACT_SERVER_BLOCK_TYPE = 0xeada; +var REACT_FUNDAMENTAL_TYPE = 0xead5; +var REACT_SCOPE_TYPE = 0xead7; +var REACT_OPAQUE_ID_TYPE = 0xeae0; +var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1; +var REACT_OFFSCREEN_TYPE = 0xeae2; +var REACT_LEGACY_HIDDEN_TYPE = 0xeae3; + +if (typeof Symbol === 'function' && Symbol.for) { + var symbolFor = Symbol.for; + REACT_ELEMENT_TYPE = symbolFor('react.element'); + REACT_PORTAL_TYPE = symbolFor('react.portal'); + exports.Fragment = symbolFor('react.fragment'); + REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode'); + REACT_PROFILER_TYPE = symbolFor('react.profiler'); + REACT_PROVIDER_TYPE = symbolFor('react.provider'); + REACT_CONTEXT_TYPE = symbolFor('react.context'); + REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref'); + REACT_SUSPENSE_TYPE = symbolFor('react.suspense'); + REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list'); + REACT_MEMO_TYPE = symbolFor('react.memo'); + REACT_LAZY_TYPE = symbolFor('react.lazy'); + REACT_BLOCK_TYPE = symbolFor('react.block'); + REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block'); + REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental'); + REACT_SCOPE_TYPE = symbolFor('react.scope'); + REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id'); + REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode'); + REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen'); + REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden'); +} + +var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; +var FAUX_ITERATOR_SYMBOL = '@@iterator'; +function getIteratorFn(maybeIterable) { + if (maybeIterable === null || typeof maybeIterable !== 'object') { + return null; + } + + var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; + + if (typeof maybeIterator === 'function') { + return maybeIterator; + } + + return null; +} + +var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + +function error(format) { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } +} + +function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } + + var argsWithFormat = args.map(function (item) { + return '' + item; + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } +} + +// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. + +var enableScopeAPI = false; // Experimental Create Event Handle API. + +function isValidElementType(type) { + if (typeof type === 'string' || typeof type === 'function') { + return true; + } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). + + + if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) { + return true; + } + + if (typeof type === 'object' && type !== null) { + if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) { + return true; + } + } + + return false; +} + +function getWrappedName(outerType, innerType, wrapperName) { + var functionName = innerType.displayName || innerType.name || ''; + return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); +} + +function getContextName(type) { + return type.displayName || 'Context'; +} + +function getComponentName(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case exports.Fragment: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + return getComponentName(type.type); + + case REACT_BLOCK_TYPE: + return getComponentName(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentName(init(payload)); + } catch (x) { + return null; + } + } + } + } + + return null; +} + +// Helpers to patch console.logs to avoid logging during side-effect free +// replaying on render function. This currently only patches the object +// lazily which won't cover if the log function was extracted eagerly. +// We could also eagerly patch the method. +var disabledDepth = 0; +var prevLog; +var prevInfo; +var prevWarn; +var prevError; +var prevGroup; +var prevGroupCollapsed; +var prevGroupEnd; + +function disabledLog() {} + +disabledLog.__reactDisabledLog = true; +function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } +} +function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: _assign({}, props, { + value: prevLog + }), + info: _assign({}, props, { + value: prevInfo + }), + warn: _assign({}, props, { + value: prevWarn + }), + error: _assign({}, props, { + value: prevError + }), + group: _assign({}, props, { + value: prevGroup + }), + groupCollapsed: _assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: _assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } +} + +var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; +var prefix; +function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } +} +var reentry = false; +var componentFrameCache; + +{ + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); +} + +function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if (!fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; +} +function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } +} + +function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); +} + +function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_BLOCK_TYPE: + return describeFunctionComponentFrame(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; +} + +var loggedTypeFailures = {}; +var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame.setExtraStackFrame(null); + } + } +} + +function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(Object.prototype.hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } +} + +var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true +}; +var specialPropKeyWarningShown; +var specialPropRefWarningShown; +var didWarnAboutStringRefs; + +{ + didWarnAboutStringRefs = {}; +} + +function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.ref !== undefined; +} + +function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.key !== undefined; +} + +function warnIfStringRefCannotBeAutoConverted(config, self) { + { + if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) { + var componentName = getComponentName(ReactCurrentOwner.current.type); + + if (!didWarnAboutStringRefs[componentName]) { + error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref); + + didWarnAboutStringRefs[componentName] = true; + } + } + } +} + +function defineKeyPropWarningGetter(props, displayName) { + { + var warnAboutAccessingKey = function () { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + + error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); + } +} + +function defineRefPropWarningGetter(props, displayName) { + { + var warnAboutAccessingRef = function () { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + + error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); + } +} +/** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, instanceof check + * will not work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} props + * @param {*} key + * @param {string|object} ref + * @param {*} owner + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @internal + */ + + +var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); // self and source are DEV only properties. + + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; +}; +/** + * https://github.com/reactjs/rfcs/pull/107 + * @param {*} type + * @param {object} props + * @param {string} key + */ + +function jsxDEV(type, config, maybeKey, source, self) { + { + var propName; // Reserved names are extracted + + var props = {}; + var key = null; + var ref = null; // Currently, key can be spread in as a prop. This causes a potential + // issue if key is also explicitly declared (ie.
+ // or
). We want to deprecate key spread, + // but as an intermediary step, we will use jsxDEV for everything except + //
, because we aren't currently able to tell if + // key is explicitly declared to be undefined or not. + + if (maybeKey !== undefined) { + key = '' + maybeKey; + } + + if (hasValidKey(config)) { + key = '' + config.key; + } + + if (hasValidRef(config)) { + ref = config.ref; + warnIfStringRefCannotBeAutoConverted(config, self); + } // Remaining properties are added to a new props object + + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } // Resolve default props + + + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + + if (key || ref) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); + } +} + +var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; +var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement$1(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame$1.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame$1.setExtraStackFrame(null); + } + } +} + +var propTypesMisspellWarningShown; + +{ + propTypesMisspellWarningShown = false; +} +/** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a ReactElement. + * @final + */ + +function isValidElement(object) { + { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + } +} + +function getDeclarationErrorAddendum() { + { + if (ReactCurrentOwner$1.current) { + var name = getComponentName(ReactCurrentOwner$1.current.type); + + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + + return ''; + } +} + +function getSourceInfoErrorAddendum(source) { + { + if (source !== undefined) { + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + + return ''; + } +} +/** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + + +var ownerHasKeyUseWarning = {}; + +function getCurrentComponentErrorInfo(parentType) { + { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + + if (parentName) { + info = "\n\nCheck the top-level render call using <" + parentName + ">."; + } + } + + return info; + } +} +/** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + + +function validateExplicitKey(element, parentType) { + { + if (!element._store || element._store.validated || element.key != null) { + return; + } + + element._store.validated = true; + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + + var childOwner = ''; + + if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) { + // Give the component that originally created this child. + childOwner = " It was passed a child from " + getComponentName(element._owner.type) + "."; + } + + setCurrentlyValidatingElement$1(element); + + error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); + + setCurrentlyValidatingElement$1(null); + } +} +/** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + + +function validateChildKeys(node, parentType) { + { + if (typeof node !== 'object') { + return; + } + + if (Array.isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } + } +} +/** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + + +function validatePropTypes(element) { + { + var type = element.type; + + if (type === null || type === undefined || typeof type === 'string') { + return; + } + + var propTypes; + + if (typeof type === 'function') { + propTypes = type.propTypes; + } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + type.$$typeof === REACT_MEMO_TYPE)) { + propTypes = type.propTypes; + } else { + return; + } + + if (propTypes) { + // Intentionally inside to avoid triggering lazy initializers: + var name = getComponentName(type); + checkPropTypes(propTypes, element.props, 'prop', name, element); + } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: + + var _name = getComponentName(type); + + error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); + } + + if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { + error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } + } +} +/** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ + + +function validateFragmentProps(fragment) { + { + var keys = Object.keys(fragment.props); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (key !== 'children' && key !== 'key') { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); + + setCurrentlyValidatingElement$1(null); + break; + } + } + + if (fragment.ref !== null) { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid attribute `ref` supplied to `React.Fragment`.'); + + setCurrentlyValidatingElement$1(null); + } + } +} + +function jsxWithValidation(type, props, key, isStaticChildren, source, self) { + { + var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + + if (!validType) { + var info = ''; + + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendum(source); + + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + var typeString; + + if (type === null) { + typeString = 'null'; + } else if (Array.isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />"; + info = ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); + } + + var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + + if (element == null) { + return element; + } // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + + + if (validType) { + var children = props.children; + + if (children !== undefined) { + if (isStaticChildren) { + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) { + validateChildKeys(children[i], type); + } + + if (Object.freeze) { + Object.freeze(children); + } + } else { + error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); + } + } else { + validateChildKeys(children, type); + } + } + } + + if (type === exports.Fragment) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; + } +} // These two functions exist to still get child warnings in dev +// even with the prod transform. This means that jsxDEV is purely +// opt-in behavior for better messages but that we won't stop +// giving you warnings if you use production apis. + +function jsxWithValidationStatic(type, props, key) { + { + return jsxWithValidation(type, props, key, true); + } +} +function jsxWithValidationDynamic(type, props, key) { + { + return jsxWithValidation(type, props, key, false); + } +} + +var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children. +// for now we can ship identical prod functions + +var jsxs = jsxWithValidationStatic ; + +exports.jsx = jsx; +exports.jsxs = jsxs; + })(); +} + + +/***/ }), + +/***/ "./node_modules/react/jsx-runtime.js": +/*!*******************************************!*\ + !*** ./node_modules/react/jsx-runtime.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +if (false) {} else { + module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ "./node_modules/react/cjs/react-jsx-runtime.development.js"); +} + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["React"]; + +/***/ }), + +/***/ "react-dom": +/*!***************************!*\ + !*** external "ReactDOM" ***! + \***************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["ReactDOM"]; + +/***/ }), + +/***/ "jquery": +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["jQuery"]; + +/***/ }), + +/***/ "@wordpress/i18n": +/*!******************************!*\ + !*** external ["wp","i18n"] ***! + \******************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["i18n"]; + +/***/ }), + +/***/ "./node_modules/@linaria/react/dist/index.mjs": +/*!****************************************************!*\ + !*** ./node_modules/@linaria/react/dist/index.mjs ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "styled": () => (/* binding */ styled_default) +/* harmony export */ }); +/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/is-prop-valid */ "./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var _linaria_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @linaria/core */ "./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs"); +// src/styled.ts + + + +var isCapital = (ch) => ch.toUpperCase() === ch; +var filterKey = (keys) => (key) => keys.indexOf(key) === -1; +var omit = (obj, keys) => { + const res = {}; + Object.keys(obj).filter(filterKey(keys)).forEach((key) => { + res[key] = obj[key]; + }); + return res; +}; +function filterProps(asIs, props, omitKeys) { + const filteredProps = omit(props, omitKeys); + if (!asIs) { + const interopValidAttr = typeof _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"] === "function" ? { default: _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"] } : _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"]; + Object.keys(filteredProps).forEach((key) => { + if (!interopValidAttr.default(key)) { + delete filteredProps[key]; + } + }); + } + return filteredProps; +} +var warnIfInvalid = (value, componentName) => { + if (true) { + if (typeof value === "string" || typeof value === "number" && isFinite(value)) { + return; + } + const stringified = typeof value === "object" ? JSON.stringify(value) : String(value); + console.warn( + `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.` + ); + } +}; +function styled(tag) { + return (options) => { + if (true) { + if (Array.isArray(options)) { + throw new Error( + 'Using the "styled" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup' + ); + } + } + const render = (props, ref) => { + const { as: component = tag, class: className } = props; + const shouldKeepProps = options.propsAsIs === void 0 ? !(typeof component === "string" && component.indexOf("-") === -1 && !isCapital(component[0])) : options.propsAsIs; + const filteredProps = filterProps(shouldKeepProps, props, [ + "as", + "class" + ]); + filteredProps.ref = ref; + filteredProps.className = options.atomic ? (0,_linaria_core__WEBPACK_IMPORTED_MODULE_2__.cx)(options.class, filteredProps.className || className) : (0,_linaria_core__WEBPACK_IMPORTED_MODULE_2__.cx)(filteredProps.className || className, options.class); + const { vars } = options; + if (vars) { + const style = {}; + for (const name in vars) { + const variable = vars[name]; + const result = variable[0]; + const unit = variable[1] || ""; + const value = typeof result === "function" ? result(props) : result; + warnIfInvalid(value, options.name); + style[`--${name}`] = `${value}${unit}`; + } + const ownStyle = filteredProps.style || {}; + const keys = Object.keys(ownStyle); + if (keys.length > 0) { + keys.forEach((key) => { + style[key] = ownStyle[key]; + }); + } + filteredProps.style = style; + } + if (tag.__linaria && tag !== component) { + filteredProps.as = component; + return react__WEBPACK_IMPORTED_MODULE_1__.createElement(tag, filteredProps); + } + return react__WEBPACK_IMPORTED_MODULE_1__.createElement(component, filteredProps); + }; + const Result = react__WEBPACK_IMPORTED_MODULE_1__.forwardRef ? react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(render) : (props) => { + const rest = omit(props, ["innerRef"]); + return render(rest, props.innerRef); + }; + Result.displayName = options.name; + Result.__linaria = { + className: options.class, + extends: tag + }; + return Result; + }; +} +var styled_default = true ? new Proxy(styled, { + get(o, prop) { + return o(prop); + } +}) : 0; + +//# sourceMappingURL=index.mjs.map + +/***/ }), + +/***/ "./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs": +/*!*******************************************************************************!*\ + !*** ./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs ***! + \*******************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "css": () => (/* binding */ css_default), +/* harmony export */ "cx": () => (/* binding */ cx_default) +/* harmony export */ }); +// src/css.ts +var css = () => { + throw new Error( + 'Using the "css" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.' + ); +}; +var css_default = css; + +// src/cx.ts +var cx = function cx2() { + const presentClassNames = Array.prototype.slice.call(arguments).filter(Boolean); + const atomicClasses = {}; + const nonAtomicClasses = []; + presentClassNames.forEach((arg) => { + const individualClassNames = arg ? arg.split(" ") : []; + individualClassNames.forEach((className) => { + if (className.startsWith("atm_")) { + const [, keyHash] = className.split("_"); + atomicClasses[keyHash] = className; + } else { + nonAtomicClasses.push(className); + } + }); + }); + const result = []; + for (const keyHash in atomicClasses) { + if (Object.prototype.hasOwnProperty.call(atomicClasses, keyHash)) { + result.push(atomicClasses[keyHash]); + } + } + result.push(...nonAtomicClasses); + return result.join(" "); +}; +var cx_default = cx; + +//# sourceMappingURL=index.mjs.map + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!**************************************!*\ + !*** ./scripts/entries/elementor.ts ***! + \**************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _elementor_elementorWidget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../elementor/elementorWidget */ "./scripts/elementor/elementorWidget.ts"); +/* harmony import */ var _elementor_FormWidget_registerFormWidget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../elementor/FormWidget/registerFormWidget */ "./scripts/elementor/FormWidget/registerFormWidget.ts"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +/* harmony import */ var _elementor_MeetingWidget_registerMeetingWidget__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../elementor/MeetingWidget/registerMeetingWidget */ "./scripts/elementor/MeetingWidget/registerMeetingWidget.ts"); + + + + +var ELEMENTOR_READY_INTERVAL = 500; +var MAX_POLL_TIMEOUT = 30000; + +var registerElementorWidgets = function registerElementorWidgets() { + (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_2__.initBackgroundApp)(function () { + var FormWidget; + var MeetingsWidget; + var leadinSelectFormItemView = (0,_elementor_elementorWidget__WEBPACK_IMPORTED_MODULE_0__["default"])( //@ts-expect-error global + window.elementor, { + widgetName: 'hubspot-form', + controlSelector: '.elementor-hbspt-form-selector', + containerSelector: '.hubspot-form-edit-mode' + }, function (controlContainer, widgetContainer, setValue) { + FormWidget = new _elementor_FormWidget_registerFormWidget__WEBPACK_IMPORTED_MODULE_1__["default"](controlContainer, widgetContainer, setValue); + FormWidget.render(); + }, function () { + FormWidget.done(); + }); + var leadinSelectMeetingItemView = (0,_elementor_elementorWidget__WEBPACK_IMPORTED_MODULE_0__["default"])( //@ts-expect-error global + window.elementor, { + widgetName: 'hubspot-meeting', + controlSelector: '.elementor-hbspt-meeting-selector', + containerSelector: '.hubspot-meeting-edit-mode' + }, function (controlContainer, widgetContainer, setValue) { + MeetingsWidget = new _elementor_MeetingWidget_registerMeetingWidget__WEBPACK_IMPORTED_MODULE_3__["default"](controlContainer, widgetContainer, setValue); + MeetingsWidget.render(); + }, function () { + MeetingsWidget.done(); + }); //@ts-expect-error global + + window.elementor.addControlView('leadinformselect', leadinSelectFormItemView); //@ts-expect-error global + + window.elementor.addControlView('leadinmeetingselect', leadinSelectMeetingItemView); + }); +}; + +var pollForElementorReady = setInterval(function () { + var elementorFrontend = window.elementorFrontend; + + if (elementorFrontend) { + registerElementorWidgets(); + clearInterval(pollForElementorReady); + } +}, ELEMENTOR_READY_INTERVAL); +setTimeout(function () { + clearInterval(pollForElementorReady); +}, MAX_POLL_TIMEOUT); +})(); + +/******/ })() +; +//# sourceMappingURL=elementor.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/elementor.js.map b/wp/wp-content/plugins/leadin/build/elementor.js.map new file mode 100644 index 00000000..8644d63d --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/elementor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"elementor.js","mappings":"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AAO,CAAC,mEAAmB;;AAEhD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC3BA,sBAAsB,mBAAO,CAAC,qEAAoB;;AAElD;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AClBA;AACA,wBAAwB,qBAAM,gBAAgB,qBAAM,IAAI,qBAAM,sBAAsB,qBAAM;;AAE1F;;;;;;;;;;;ACHA,aAAa,mBAAO,CAAC,mDAAW;;AAEhC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC7CA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACRA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClBA,eAAe,mBAAO,CAAC,qDAAY;AACnC,UAAU,mBAAO,CAAC,2CAAO;AACzB,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ,WAAW;AAC9B,WAAW,SAAS;AACpB;AACA,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,+CAA+C,iBAAiB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC5BA,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACtBA,eAAe,mBAAO,CAAC,uDAAa;AACpC,eAAe,mBAAO,CAAC,qDAAY;AACnC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC/DA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACPA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,gBAAgB,+CAA+C;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACtCA;;AAEA,eAAe,mBAAO,CAAC,wFAA6B;AACpD,gBAAgB,mBAAO,CAAC,gHAAyC;AACjE,uBAAuB,mBAAO,CAAC,iEAAe;;AAE9C,YAAY,mBAAO,CAAC,qDAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,2FAA+B;;AAEvD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,UAAU;AACzB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,0CAA0C;AAC1C,2CAA2C;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,MAAM;AACN,2EAA2E;AAC3E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACr4DA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAO,CAAC,qDAAS;;AAExC;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;AC9BA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA,iDAAiD;AACjD,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kCAAkC;AAClC;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChYA,YAAY,mBAAO,CAAC,6DAAiB;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD,KAAK;AAC1D,uDAAuD,KAAK;AAC5D;AACA,WAAW,aAAa,YAAY;AACpC;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,+DAA+D;AAC/D;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,kBAAkB;AACjC;AACA,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA,qEAAqE;AACrE,iEAAiE;AACjE;AACA;AACA,kCAAkC;AAClC,kCAAkC;AAClC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,SAAS;AACxB;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAA0C;AAClD,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,qEAAqE;AACrE,UAAU;AACV;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;AC9mBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB;;AAEpB;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb,IAAI,IAAqC;AACzC;AACA;;AAEA,YAAY,mBAAO,CAAC,oBAAO;AAC3B,cAAc,mBAAO,CAAC,4DAAe;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE,gBAAgB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,+FAA+F,eAAe;AAC9G;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK,GAAG;;AAER,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,4BAA4B;;AAE5B;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,uBAAuB;AACvB;AACA,SAAS;AACT,wBAAwB;AACxB;AACA,SAAS;AACT,wBAAwB;AACxB;AACA,SAAS;AACT,yBAAyB;AACzB;AACA,SAAS;AACT,yBAAyB;AACzB;AACA,SAAS;AACT,kCAAkC;AAClC;AACA,SAAS;AACT,4BAA4B;AAC5B;AACA,SAAS;AACT,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2DAA2D;;AAE3D;AACA;;AAEA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;;;AAGlB;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,2HAA2H;AAC3H;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA,oEAAoE;;AAEpE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,eAAe;AAC1B,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;;AAER;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA,oBAAoB;AACpB,2DAA2D,UAAU;AACrE,yBAAyB,UAAU;AACnC;AACA,aAAa,UAAU;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,YAAY,SAAS;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,GAAG;AACd;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,GAAG;AACd;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,iBAAiB;AACvC;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,4CAA4C;;AAE5C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;;;AAGA;AACA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA,0DAA0D;AAC1D;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC;AACtC;;AAEA;;AAEA,WAAW;AACX,YAAY;AACZ,GAAG;AACH;;;;;;;;;;;;ACpsCa;;AAEb,IAAI,KAAqC,EAAE,EAE1C,CAAC;AACF,EAAE,+IAAkE;AACpE;;;;;;;;;;;;ACNA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;ACAA;AAC+C;AACrB;AACS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,oCAAoC,8DAAS,oBAAoB,SAAS,8DAAS,GAAG,EAAE,8DAAS;AACjG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA,wCAAwC,YAAY,sBAAsB,cAAc;AACxF;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wCAAwC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,iDAAE,wDAAwD,iDAAE;AAC7G,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAK,QAAQ,MAAM,EAAE,KAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAmB;AAClC;AACA,aAAa,gDAAmB;AAChC;AACA,mBAAmB,6CAAgB,GAAG,6CAAgB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAqC;AAC1D;AACA;AACA;AACA,CAAC,IAAI,CAAM;AAGT;AACF;;;;;;;;;;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIE;AACF;;;;;;UCtCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA,IAAMU,wBAAwB,GAAG,GAAjC;AACA,IAAMC,gBAAgB,GAAG,KAAzB;;AACA,IAAMC,wBAAwB,GAAG,SAA3BA,wBAA2B,GAAM;EACnChB,4EAAiB,CAAC,YAAM;IACpB,IAAIiB,UAAJ;IACA,IAAIC,cAAJ;IACA,IAAMC,wBAAwB,GAAG/S,sEAAe,EAChD;IACAnK,MAAM,CAACoK,SAFyC,EAE9B;MACdqB,UAAU,EAAE,cADE;MAEdR,eAAe,EAAE,gCAFH;MAGdG,iBAAiB,EAAE;IAHL,CAF8B,EAM7C,UAACxD,gBAAD,EAAmBC,eAAnB,EAAoClC,QAApC,EAAiD;MAChDqX,UAAU,GAAG,IAAIrV,gFAAJ,CAAuBC,gBAAvB,EAAyCC,eAAzC,EAA0DlC,QAA1D,CAAb;MACAqX,UAAU,CAACpX,MAAX;IACH,CAT+C,EAS7C,YAAM;MACLoX,UAAU,CAAC1S,IAAX;IACH,CAX+C,CAAhD;IAYA,IAAM6S,2BAA2B,GAAGhT,sEAAe,EACnD;IACAnK,MAAM,CAACoK,SAF4C,EAEjC;MACdqB,UAAU,EAAE,iBADE;MAEdR,eAAe,EAAE,mCAFH;MAGdG,iBAAiB,EAAE;IAHL,CAFiC,EAMhD,UAACxD,gBAAD,EAAmBC,eAAnB,EAAoClC,QAApC,EAAiD;MAChDsX,cAAc,GAAG,IAAI/S,sFAAJ,CAA2BtC,gBAA3B,EAA6CC,eAA7C,EAA8DlC,QAA9D,CAAjB;MACAsX,cAAc,CAACrX,MAAf;IACH,CATkD,EAShD,YAAM;MACLqX,cAAc,CAAC3S,IAAf;IACH,CAXkD,CAAnD,CAfoB,CA2BpB;;IACAtK,MAAM,CAACoK,SAAP,CAAiBgT,cAAjB,CAAgC,kBAAhC,EAAoDF,wBAApD,EA5BoB,CA6BpB;;IACAld,MAAM,CAACoK,SAAP,CAAiBgT,cAAjB,CAAgC,qBAAhC,EAAuDD,2BAAvD;EACH,CA/BgB,CAAjB;AAgCH,CAjCD;;AAkCA,IAAME,qBAAqB,GAAGC,WAAW,CAAC,YAAM;EAC5C,IAAMhS,iBAAiB,GAAGtL,MAAM,CAACsL,iBAAjC;;EACA,IAAIA,iBAAJ,EAAuB;IACnByR,wBAAwB;IACxBQ,aAAa,CAACF,qBAAD,CAAb;EACH;AACJ,CANwC,EAMtCR,wBANsC,CAAzC;AAOAW,UAAU,CAAC,YAAM;EACbD,aAAa,CAACF,qBAAD,CAAb;AACH,CAFS,EAEPP,gBAFO,CAAV,C","sources":["webpack://leadin/./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://leadin/./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://leadin/./scripts/constants/defaultFormOptions.ts","webpack://leadin/./scripts/constants/leadinConfig.ts","webpack://leadin/./scripts/elementor/Common/ConnectPluginBanner.tsx","webpack://leadin/./scripts/elementor/Common/ElementorBanner.tsx","webpack://leadin/./scripts/elementor/Common/ElementorButton.tsx","webpack://leadin/./scripts/elementor/FormWidget/ElementorFormSelect.tsx","webpack://leadin/./scripts/elementor/FormWidget/FormControlController.tsx","webpack://leadin/./scripts/elementor/FormWidget/FormWidgetController.tsx","webpack://leadin/./scripts/elementor/FormWidget/hooks/useForms.ts","webpack://leadin/./scripts/elementor/FormWidget/registerFormWidget.ts","webpack://leadin/./scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx","webpack://leadin/./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx","webpack://leadin/./scripts/elementor/MeetingWidget/MeetingControlController.tsx","webpack://leadin/./scripts/elementor/MeetingWidget/MeetingWidgetController.tsx","webpack://leadin/./scripts/elementor/MeetingWidget/registerMeetingWidget.ts","webpack://leadin/./scripts/elementor/elementorWidget.ts","webpack://leadin/./scripts/iframe/integratedMessages/core/CoreMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/forms/FormsMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/index.ts","webpack://leadin/./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/plugin/PluginMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts","webpack://leadin/./scripts/iframe/useBackgroundApp.ts","webpack://leadin/./scripts/lib/Raven.ts","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx","webpack://leadin/./scripts/shared/Common/ErrorHandler.tsx","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts","webpack://leadin/./scripts/shared/Common/LoadingBlock.tsx","webpack://leadin/./scripts/shared/Form/FormEdit.tsx","webpack://leadin/./scripts/shared/Form/FormSelect.tsx","webpack://leadin/./scripts/shared/Form/FormSelector.tsx","webpack://leadin/./scripts/shared/Form/PreviewForm.tsx","webpack://leadin/./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts","webpack://leadin/./scripts/shared/Form/hooks/useForms.ts","webpack://leadin/./scripts/shared/Form/hooks/useFormsScript.ts","webpack://leadin/./scripts/shared/Meeting/MeetingController.tsx","webpack://leadin/./scripts/shared/Meeting/MeetingEdit.tsx","webpack://leadin/./scripts/shared/Meeting/MeetingSelector.tsx","webpack://leadin/./scripts/shared/Meeting/MeetingWarning.tsx","webpack://leadin/./scripts/shared/Meeting/PreviewMeeting.tsx","webpack://leadin/./scripts/shared/Meeting/constants.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useMeetings.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useMeetingsFetch.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useMeetingsScript.ts","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts","webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx","webpack://leadin/./scripts/shared/UIComponents/colors.ts","webpack://leadin/./scripts/shared/enums/connectionStatus.ts","webpack://leadin/./scripts/shared/enums/loadState.ts","webpack://leadin/./scripts/utils/appUtils.ts","webpack://leadin/./scripts/utils/backgroundAppUtils.ts","webpack://leadin/./node_modules/lodash/_Symbol.js","webpack://leadin/./node_modules/lodash/_baseGetTag.js","webpack://leadin/./node_modules/lodash/_baseTrim.js","webpack://leadin/./node_modules/lodash/_freeGlobal.js","webpack://leadin/./node_modules/lodash/_getRawTag.js","webpack://leadin/./node_modules/lodash/_objectToString.js","webpack://leadin/./node_modules/lodash/_root.js","webpack://leadin/./node_modules/lodash/_trimmedEndIndex.js","webpack://leadin/./node_modules/lodash/debounce.js","webpack://leadin/./node_modules/lodash/isObject.js","webpack://leadin/./node_modules/lodash/isObjectLike.js","webpack://leadin/./node_modules/lodash/isSymbol.js","webpack://leadin/./node_modules/lodash/now.js","webpack://leadin/./node_modules/lodash/toNumber.js","webpack://leadin/./scripts/elementor/Common/ElementorButton.tsx?a429","webpack://leadin/./scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx?284e","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx?df11","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts?a346","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx?0f15","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts?d089","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts?e576","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts?c9f9","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts?8e1e","webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx?4a02","webpack://leadin/./node_modules/object-assign/index.js","webpack://leadin/./node_modules/raven-js/src/configError.js","webpack://leadin/./node_modules/raven-js/src/console.js","webpack://leadin/./node_modules/raven-js/src/raven.js","webpack://leadin/./node_modules/raven-js/src/singleton.js","webpack://leadin/./node_modules/raven-js/src/utils.js","webpack://leadin/./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack://leadin/./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack://leadin/./node_modules/react/cjs/react-jsx-runtime.development.js","webpack://leadin/./node_modules/react/jsx-runtime.js","webpack://leadin/external window \"React\"","webpack://leadin/external window \"ReactDOM\"","webpack://leadin/external window \"jQuery\"","webpack://leadin/external window [\"wp\",\"i18n\"]","webpack://leadin/./node_modules/@linaria/react/dist/index.mjs","webpack://leadin/./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs","webpack://leadin/webpack/bootstrap","webpack://leadin/webpack/runtime/compat get default export","webpack://leadin/webpack/runtime/define property getters","webpack://leadin/webpack/runtime/global","webpack://leadin/webpack/runtime/hasOwnProperty shorthand","webpack://leadin/webpack/runtime/make namespace object","webpack://leadin/./scripts/entries/elementor.ts"],"sourcesContent":["function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","import { __ } from '@wordpress/i18n';\nconst REGISTRATION_FORM = 'REGISTRATION_FORM';\nconst CONTACT_US_FORM = 'CONTACT_US_FORM';\nconst NEWSLETTER_FORM = 'NEWSLETTER_FORM';\nconst SUPPORT_FORM = 'SUPPORT_FORM';\nconst EVENT_FORM = 'EVENT_FORM';\nexport const DEFAULT_OPTIONS = {\n label: __('Templates', 'leadin'),\n options: [\n { label: __('Registration Form', 'leadin'), value: REGISTRATION_FORM },\n { label: __('Contact us Form', 'leadin'), value: CONTACT_US_FORM },\n { label: __('Newsletter sign-up Form', 'leadin'), value: NEWSLETTER_FORM },\n { label: __('Support Form', 'leadin'), value: SUPPORT_FORM },\n { label: __('Event Registration Form', 'leadin'), value: EVENT_FORM },\n ],\n};\nexport function isDefaultForm(value) {\n return (value === REGISTRATION_FORM ||\n value === CONTACT_US_FORM ||\n value === NEWSLETTER_FORM ||\n value === SUPPORT_FORM ||\n value === EVENT_FORM);\n}\n","const { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, locale, loginUrl, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, } = window.leadinConfig;\nexport { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, loginUrl, locale, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, };\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport ElementorBanner from './ElementorBanner';\nimport { __ } from '@wordpress/i18n';\nexport default function ConnectPluginBanner() {\n return (_jsx(ElementorBanner, { children: _jsx(\"b\", { dangerouslySetInnerHTML: {\n __html: __('The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s')\n .replace('%1$s', '')\n .replace('%2$s', ''),\n } }) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function ElementorBanner({ type = 'warning', children, }) {\n return (_jsx(\"div\", { className: \"elementor-control-content\", children: _jsx(\"div\", { className: `elementor-control-raw-html elementor-panel-alert elementor-panel-alert-${type}`, children: children }) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nconst Container = styled.div `\n display: flex;\n justify-content: center;\n padding-bottom: 8px;\n`;\nexport default function ElementorButton({ children, ...params }) {\n return (_jsx(Container, { className: \"elementor-button-wrapper\", children: _jsx(\"button\", { className: \"elementor-button elementor-button-default\", type: \"button\", ...params, children: children }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { portalId, refreshToken } from '../../constants/leadinConfig';\nimport ElementorBanner from '../Common/ElementorBanner';\nimport UISpinner from '../../shared/UIComponents/UISpinner';\nimport { __ } from '@wordpress/i18n';\nimport { BackgroudAppContext, useBackgroundAppContext, } from '../../iframe/useBackgroundApp';\nimport useForms from './hooks/useForms';\nimport { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils';\nfunction ElementorFormSelect({ formId, setAttributes, }) {\n const { hasError, forms, loading } = useForms();\n return loading ? (_jsx(\"div\", { children: _jsx(UISpinner, {}) })) : hasError ? (_jsx(ElementorBanner, { type: \"danger\", children: __('Please refresh your forms or try again in a few minutes', 'leadin') })) : (_jsxs(\"select\", { value: formId, onChange: event => {\n const selectedForm = forms.find(form => form.value === event.target.value);\n if (selectedForm) {\n setAttributes({\n portalId,\n formId: selectedForm.value,\n formName: selectedForm.label,\n });\n }\n }, children: [_jsx(\"option\", { value: \"\", disabled: true, selected: true, children: __('Search for a form', 'leadin') }), forms.map(form => (_jsx(\"option\", { value: form.value, children: form.label }, form.value)))] }));\n}\nfunction ElementorFormSelectWrapper(props) {\n const isBackgroundAppReady = useBackgroundAppContext();\n return (_jsx(Fragment, { children: !isBackgroundAppReady ? (_jsx(\"div\", { children: _jsx(UISpinner, {}) })) : (_jsx(ElementorFormSelect, { ...props })) }));\n}\nexport default function ElementorFormSelectContainer(props) {\n return (_jsx(BackgroudAppContext.Provider, { value: refreshToken && getOrCreateBackgroundApp(refreshToken), children: _jsx(ElementorFormSelectWrapper, { ...props }) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { connectionStatus } from '../../constants/leadinConfig';\nimport ConnectPluginBanner from '../Common/ConnectPluginBanner';\nimport ElementorFormSelect from './ElementorFormSelect';\nconst ConnectionStatus = {\n Connected: 'Connected',\n NotConnected: 'NotConnected',\n};\nexport default function FormControlController(attributes, setValue) {\n return () => {\n const render = () => {\n if (connectionStatus === ConnectionStatus.Connected) {\n return (_jsx(ElementorFormSelect, { formId: attributes.formId, setAttributes: setValue }));\n }\n else {\n return _jsx(ConnectPluginBanner, {});\n }\n };\n return _jsx(Fragment, { children: render() });\n };\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { connectionStatus } from '../../constants/leadinConfig';\nimport ErrorHandler from '../../shared/Common/ErrorHandler';\nimport FormEdit from '../../shared/Form/FormEdit';\nimport ConnectionStatus from '../../shared/enums/connectionStatus';\nexport default function FormWidgetController(attributes, setValue) {\n return () => {\n const render = () => {\n if (connectionStatus === ConnectionStatus.Connected) {\n return (_jsx(FormEdit, { attributes: attributes, isSelected: true, setAttributes: setValue, preview: false, origin: \"elementor\" }));\n }\n else {\n return _jsx(ErrorHandler, { status: 401 });\n }\n };\n return _jsx(Fragment, { children: render() });\n };\n}\n","import { useState, useEffect } from 'react';\nimport LoadState from '../../../shared/enums/loadState';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nexport default function useForms() {\n const proxy = usePostAsyncBackgroundMessage();\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [hasError, setError] = useState(null);\n const [forms, setForms] = useState([]);\n useEffect(() => {\n if (loadState === LoadState.NotLoaded) {\n proxy({\n key: ProxyMessages.FetchForms,\n payload: {\n search: '',\n },\n })\n .then(data => {\n setForms(data.map((form) => ({\n label: form.name,\n value: form.guid,\n })));\n setLoadState(LoadState.Loaded);\n })\n .catch(error => {\n setError(error);\n setLoadState(LoadState.Failed);\n });\n }\n }, [loadState]);\n return { forms, loading: loadState === LoadState.Loading, hasError };\n}\n","import ReactDOM from 'react-dom';\nimport FormControlController from './FormControlController';\nimport FormWidgetController from './FormWidgetController';\nexport default class registerFormWidget {\n widgetContainer;\n attributes;\n controlContainer;\n setValue;\n constructor(controlContainer, widgetContainer, setValue) {\n const attributes = widgetContainer.dataset.attributes\n ? JSON.parse(widgetContainer.dataset.attributes)\n : {};\n this.widgetContainer = widgetContainer;\n this.controlContainer = controlContainer;\n this.setValue = setValue;\n this.attributes = attributes;\n }\n render() {\n ReactDOM.render(FormWidgetController(this.attributes, this.setValue)(), this.widgetContainer);\n ReactDOM.render(FormControlController(this.attributes, this.setValue)(), this.controlContainer);\n }\n done() {\n ReactDOM.unmountComponentAtNode(this.widgetContainer);\n ReactDOM.unmountComponentAtNode(this.controlContainer);\n }\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment, useState } from 'react';\nimport ElementorBanner from '../Common/ElementorBanner';\nimport UISpinner from '../../shared/UIComponents/UISpinner';\nimport ElementorMeetingWarning from './ElementorMeetingWarning';\nimport useMeetings, { useSelectedMeetingCalendar, } from '../../shared/Meeting/hooks/useMeetings';\nimport { __ } from '@wordpress/i18n';\nimport Raven from 'raven-js';\nimport { BackgroudAppContext, useBackgroundAppContext, } from '../../iframe/useBackgroundApp';\nimport { refreshToken } from '../../constants/leadinConfig';\nimport { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils';\nfunction ElementorMeetingSelect({ url, setAttributes, }) {\n const { mappedMeetings: meetings, loading, error, reload, connectCalendar, } = useMeetings();\n const selectedMeetingCalendar = useSelectedMeetingCalendar(url);\n const [localUrl, setLocalUrl] = useState(url);\n const handleConnectCalendar = () => {\n return connectCalendar()\n .then(() => {\n reload();\n })\n .catch(error => {\n Raven.captureMessage('Unable to connect calendar', {\n extra: { error },\n });\n });\n };\n return (_jsx(Fragment, { children: loading ? (_jsx(\"div\", { children: _jsx(UISpinner, {}) })) : error ? (_jsx(ElementorBanner, { type: \"danger\", children: __('Please refresh your meetings or try again in a few minutes', 'leadin') })) : (_jsxs(Fragment, { children: [selectedMeetingCalendar && (_jsx(ElementorMeetingWarning, { status: selectedMeetingCalendar, onConnectCalendar: connectCalendar })), meetings.length > 1 && (_jsxs(\"select\", { value: localUrl, onChange: event => {\n const newUrl = event.target.value;\n setLocalUrl(newUrl);\n setAttributes({\n url: newUrl,\n });\n }, children: [_jsx(\"option\", { value: \"\", disabled: true, selected: true, children: __('Select a meeting', 'leadin') }), meetings.map(item => (_jsx(\"option\", { value: item.value, children: item.label }, item.value)))] }))] })) }));\n}\nfunction ElementorMeetingSelectWrapper(props) {\n const isBackgroundAppReady = useBackgroundAppContext();\n return (_jsx(Fragment, { children: !isBackgroundAppReady ? (_jsx(\"div\", { children: _jsx(UISpinner, {}) })) : (_jsx(ElementorMeetingSelect, { ...props })) }));\n}\nexport default function ElementorMeetingsSelectContainer(props) {\n return (_jsx(BackgroudAppContext.Provider, { value: refreshToken && getOrCreateBackgroundApp(refreshToken), children: _jsx(ElementorMeetingSelectWrapper, { ...props }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { CURRENT_USER_CALENDAR_MISSING } from '../../shared/Meeting/constants';\nimport ElementorButton from '../Common/ElementorButton';\nimport ElementorBanner from '../Common/ElementorBanner';\nimport { styled } from '@linaria/react';\nimport { __ } from '@wordpress/i18n';\nconst Container = styled.div `\n padding-bottom: 8px;\n`;\nexport default function MeetingWarning({ onConnectCalendar, status, }) {\n const isMeetingOwner = status === CURRENT_USER_CALENDAR_MISSING;\n const titleText = isMeetingOwner\n ? __('Your calendar is not connected', 'leadin')\n : __('Calendar is not connected', 'leadin');\n const titleMessage = isMeetingOwner\n ? __('Please connect your calendar to activate your scheduling pages', 'leadin')\n : __('Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', 'leadin');\n return (_jsxs(Fragment, { children: [_jsx(Container, { children: _jsxs(ElementorBanner, { type: \"warning\", children: [_jsx(\"b\", { children: titleText }), _jsx(\"br\", {}), titleMessage] }) }), isMeetingOwner && (_jsx(ElementorButton, { id: \"meetings-connect-calendar\", onClick: onConnectCalendar, children: __('Connect calendar', 'leadin') }))] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { connectionStatus } from '../../constants/leadinConfig';\nimport ConnectPluginBanner from '../Common/ConnectPluginBanner';\nimport ElementorMeetingSelect from './ElementorMeetingSelect';\nconst ConnectionStatus = {\n Connected: 'Connected',\n NotConnected: 'NotConnected',\n};\nexport default function MeetingControlController(attributes, setValue) {\n return () => {\n const render = () => {\n if (connectionStatus === ConnectionStatus.Connected) {\n return (_jsx(ElementorMeetingSelect, { url: attributes.url, setAttributes: setValue }));\n }\n else {\n return _jsx(ConnectPluginBanner, {});\n }\n };\n return _jsx(Fragment, { children: render() });\n };\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { connectionStatus } from '../../constants/leadinConfig';\nimport ErrorHandler from '../../shared/Common/ErrorHandler';\nimport MeetingsEdit from '../../shared/Meeting/MeetingEdit';\nconst ConnectionStatus = {\n Connected: 'Connected',\n NotConnected: 'NotConnected',\n};\nexport default function MeetingWidgetController(attributes, setValue) {\n return () => {\n const render = () => {\n if (connectionStatus === ConnectionStatus.Connected) {\n return (_jsx(MeetingsEdit, { attributes: attributes, isSelected: true, setAttributes: setValue, preview: false, origin: \"elementor\" }));\n }\n else {\n return _jsx(ErrorHandler, { status: 401 });\n }\n };\n return _jsx(Fragment, { children: render() });\n };\n}\n","import ReactDOM from 'react-dom';\nimport MeetingControlController from './MeetingControlController';\nimport MeetingWidgetController from './MeetingWidgetController';\nexport default class registerMeetingsWidget {\n widgetContainer;\n controlContainer;\n setValue;\n attributes;\n constructor(controlContainer, widgetContainer, setValue) {\n const attributes = widgetContainer.dataset.attributes\n ? JSON.parse(widgetContainer.dataset.attributes)\n : {};\n this.widgetContainer = widgetContainer;\n this.controlContainer = controlContainer;\n this.setValue = setValue;\n this.attributes = attributes;\n }\n render() {\n ReactDOM.render(MeetingWidgetController(this.attributes, this.setValue)(), this.widgetContainer);\n ReactDOM.render(MeetingControlController(this.attributes, this.setValue)(), this.controlContainer);\n }\n done() {\n ReactDOM.unmountComponentAtNode(this.widgetContainer);\n ReactDOM.unmountComponentAtNode(this.controlContainer);\n }\n}\n","export default function elementorWidget(elementor, options, callback, done = () => { }) {\n return elementor.modules.controls.BaseData.extend({\n onReady() {\n const self = this;\n const controlContainer = this.ui.contentEditable.prevObject[0].querySelector(options.controlSelector);\n let widgetContainer = this.options.element.$el[0].querySelector(options.containerSelector);\n if (widgetContainer) {\n callback(controlContainer, widgetContainer, (args) => self.setValue(args));\n }\n else {\n //@ts-expect-error global\n window.elementorFrontend.hooks.addAction(`frontend/element_ready/${options.widgetName}.default`, (element) => {\n widgetContainer = element[0].querySelector(options.containerSelector);\n callback(controlContainer, widgetContainer, (args) => self.setValue(args));\n });\n }\n },\n saveValue(props) {\n this.setValue(props);\n },\n onBeforeDestroy() {\n //@ts-expect-error global\n window.elementorFrontend.hooks.removeAction(`frontend/element_ready/${options.widgetName}.default`);\n done();\n },\n });\n}\n","export const CoreMessages = {\n HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED',\n SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN',\n ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME',\n RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME',\n SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE',\n SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID',\n};\n","export const FormMessages = {\n CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION',\n};\n","export * from './core/CoreMessages';\nexport * from './forms/FormsMessages';\nexport * from './livechat/LiveChatMessages';\nexport * from './plugin/PluginMessages';\nexport * from './proxy/ProxyMessages';\n","export const LiveChatMessages = {\n CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION',\n};\n","export const PluginMessages = {\n PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION',\n PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG',\n TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT',\n InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST',\n InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE',\n InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR',\n InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST',\n InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR',\n BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST',\n BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE',\n BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR',\n BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST',\n BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR',\n SkipReviewRequest: 'SKIP_REVIEW_REQUEST',\n SkipReviewResponse: 'SKIP_REVIEW_RESPONSE',\n SkipReviewError: 'SKIP_REVIEW_ERROR',\n RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM',\n ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST',\n ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE',\n ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR',\n ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST',\n ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE',\n ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR',\n};\n","export const ProxyMessages = {\n FetchForms: 'FETCH_FORMS',\n FetchForm: 'FETCH_FORM',\n CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE',\n FetchAuth: 'FETCH_AUTH',\n FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS',\n FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION',\n FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER',\n ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR',\n TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER',\n TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE',\n TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED',\n TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER',\n TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE',\n TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER',\n TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION',\n TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED',\n TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION',\n};\n","import { createContext, useContext } from 'react';\nexport const BackgroudAppContext = createContext(null);\nexport function useBackgroundAppContext() {\n return useContext(BackgroudAppContext);\n}\nexport function usePostBackgroundMessage() {\n const app = useBackgroundAppContext();\n return (message) => {\n app.postMessage(message);\n };\n}\nexport function usePostAsyncBackgroundMessage() {\n const app = useBackgroundAppContext();\n return (message) => app.postAsyncMessage(message);\n}\n","import Raven from 'raven-js';\nimport { hubspotBaseUrl, phpVersion, wpVersion, leadinPluginVersion, portalId, plugins, } from '../constants/leadinConfig';\nexport function configureRaven() {\n if (hubspotBaseUrl.indexOf('app.hubspot.com') === -1) {\n return;\n }\n Raven.config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', {\n instrument: {\n tryCatch: false,\n },\n release: leadinPluginVersion,\n }).install();\n Raven.setTagsContext({\n v: leadinPluginVersion,\n php: phpVersion,\n wordpress: wpVersion,\n });\n Raven.setExtraContext({\n hub: portalId,\n plugins: Object.keys(plugins)\n .map(name => `${name}#${plugins[name]}`)\n .join(','),\n });\n}\nexport default Raven;\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef, useState, useEffect } from 'react';\nimport { styled } from '@linaria/react';\nimport { CALYPSO, CALYPSO_LIGHT, CALYPSO_MEDIUM, OBSIDIAN, } from '../UIComponents/colors';\nimport UISpinner from '../UIComponents/UISpinner';\nimport LoadState from '../enums/loadState';\nconst Container = styled.div `\n color: ${OBSIDIAN};\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n position: relative;\n`;\nconst ControlContainer = styled.div `\n align-items: center;\n background-color: hsl(0, 0%, 100%);\n border-color: hsl(0, 0%, 80%);\n border-radius: 4px;\n border-style: solid;\n border-width: ${props => (props.focused ? '0' : '1px')};\n cursor: default;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n min-height: 38px;\n outline: 0 !important;\n position: relative;\n transition: all 100ms;\n box-sizing: border-box;\n box-shadow: ${props => props.focused ? `0 0 0 2px ${CALYPSO_MEDIUM}` : 'none'};\n &:hover {\n border-color: hsl(0, 0%, 70%);\n }\n`;\nconst ValueContainer = styled.div `\n align-items: center;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n padding: 2px 8px;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n`;\nconst Placeholder = styled.div `\n color: hsl(0, 0%, 50%);\n margin-left: 2px;\n margin-right: 2px;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n font-size: 16px;\n`;\nconst SingleValue = styled.div `\n color: hsl(0, 0%, 20%);\n margin-left: 2px;\n margin-right: 2px;\n max-width: calc(100% - 8px);\n overflow: hidden;\n position: absolute;\n text-overflow: ellipsis;\n white-space: nowrap;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n`;\nconst IndicatorContainer = styled.div `\n align-items: center;\n align-self: stretch;\n display: flex;\n flex-shrink: 0;\n box-sizing: border-box;\n`;\nconst DropdownIndicator = styled.div `\n border-top: 8px solid ${CALYPSO};\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n width: 0px;\n height: 0px;\n margin: 10px;\n`;\nconst InputContainer = styled.div `\n margin: 2px;\n padding-bottom: 2px;\n padding-top: 2px;\n visibility: visible;\n color: hsl(0, 0%, 20%);\n box-sizing: border-box;\n`;\nconst Input = styled.input `\n box-sizing: content-box;\n background: rgba(0, 0, 0, 0) none repeat scroll 0px center;\n border: 0px none;\n font-size: inherit;\n opacity: 1;\n outline: currentcolor none 0px;\n padding: 0px;\n color: inherit;\n font-family: inherit;\n`;\nconst InputShadow = styled.div `\n position: absolute;\n opacity: 0;\n font-size: inherit;\n`;\nconst MenuContainer = styled.div `\n position: absolute;\n top: 100%;\n background-color: #fff;\n border-radius: 4px;\n margin-bottom: 8px;\n margin-top: 8px;\n z-index: 9999;\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1);\n width: 100%;\n`;\nconst MenuList = styled.div `\n max-height: 300px;\n overflow-y: auto;\n padding-bottom: 4px;\n padding-top: 4px;\n position: relative;\n`;\nconst MenuGroup = styled.div `\n padding-bottom: 8px;\n padding-top: 8px;\n`;\nconst MenuGroupHeader = styled.div `\n color: #999;\n cursor: default;\n font-size: 75%;\n font-weight: 500;\n margin-bottom: 0.25em;\n text-transform: uppercase;\n padding-left: 12px;\n padding-left: 12px;\n`;\nconst MenuItem = styled.div `\n display: block;\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : 'transparent'};\n color: ${props => (props.selected ? '#fff' : 'inherit')};\n cursor: default;\n font-size: inherit;\n width: 100%;\n padding: 8px 12px;\n &:hover {\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : CALYPSO_LIGHT};\n }\n`;\nexport default function AsyncSelect({ placeholder, value, loadOptions, onChange, defaultOptions, }) {\n const inputEl = useRef(null);\n const inputShadowEl = useRef(null);\n const [isFocused, setFocus] = useState(false);\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [localValue, setLocalValue] = useState('');\n const [options, setOptions] = useState(defaultOptions);\n const inputSize = `${inputShadowEl.current ? inputShadowEl.current.clientWidth + 10 : 2}px`;\n useEffect(() => {\n if (loadOptions && loadState === LoadState.NotLoaded) {\n loadOptions('', (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }\n }, [loadOptions, loadState]);\n const renderItems = (items = [], parentKey) => {\n return items.map((item, index) => {\n if (item.options) {\n return (_jsxs(MenuGroup, { children: [_jsx(MenuGroupHeader, { id: `${index}-heading`, children: item.label }), _jsx(\"div\", { children: renderItems(item.options, index) })] }, `async-select-item-${index}`));\n }\n else {\n const key = `async-select-item-${parentKey !== undefined ? `${parentKey}-${index}` : index}`;\n return (_jsx(MenuItem, { id: key, selected: value && item.value === value.value, onClick: () => {\n onChange(item);\n setFocus(false);\n }, children: item.label }, key));\n }\n });\n };\n return (_jsxs(Container, { children: [_jsxs(ControlContainer, { id: \"leadin-async-selector\", focused: isFocused, onClick: () => {\n if (isFocused) {\n if (inputEl.current) {\n inputEl.current.blur();\n }\n setFocus(false);\n setLocalValue('');\n }\n else {\n if (inputEl.current) {\n inputEl.current.focus();\n }\n setFocus(true);\n }\n }, children: [_jsxs(ValueContainer, { children: [localValue === '' &&\n (!value ? (_jsx(Placeholder, { children: placeholder })) : (_jsx(SingleValue, { children: value.label }))), _jsxs(InputContainer, { children: [_jsx(Input, { ref: inputEl, onFocus: () => {\n setFocus(true);\n }, onChange: e => {\n setLocalValue(e.target.value);\n setLoadState(LoadState.Loading);\n loadOptions &&\n loadOptions(e.target.value, (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }, value: localValue, width: inputSize, id: \"asycn-select-input\" }), _jsx(InputShadow, { ref: inputShadowEl, children: localValue })] })] }), _jsxs(IndicatorContainer, { children: [loadState === LoadState.Loading && _jsx(UISpinner, {}), _jsx(DropdownIndicator, {})] })] }), isFocused && (_jsx(MenuContainer, { children: _jsx(MenuList, { children: renderItems(options) }) }))] }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport UIButton from '../UIComponents/UIButton';\nimport UIContainer from '../UIComponents/UIContainer';\nimport HubspotWrapper from './HubspotWrapper';\nimport { adminUrl, redirectNonce } from '../../constants/leadinConfig';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport { __ } from '@wordpress/i18n';\nfunction redirectToPlugin() {\n window.location.href = `${adminUrl}admin.php?page=leadin&leadin_expired=${redirectNonce}`;\n}\nexport default function ErrorHandler({ status, resetErrorState, errorInfo = { header: '', message: '', action: '' }, }) {\n const isUnauthorized = status === 401 || status === 403;\n const errorHeader = isUnauthorized\n ? __(\"Your plugin isn't authorized\", 'leadin')\n : errorInfo.header;\n const errorMessage = isUnauthorized\n ? __('Reauthorize your plugin to access your free HubSpot tools', 'leadin')\n : errorInfo.message;\n return (_jsx(HubspotWrapper, { pluginPath: pluginPath, children: _jsxs(UIContainer, { textAlign: \"center\", children: [_jsx(\"h4\", { children: errorHeader }), _jsx(\"p\", { children: _jsx(\"b\", { children: errorMessage }) }), isUnauthorized ? (_jsx(UIButton, { \"data-test-id\": \"authorize-button\", onClick: redirectToPlugin, children: __('Go to plugin', 'leadin') })) : (_jsx(UIButton, { \"data-test-id\": \"retry-button\", onClick: resetErrorState, children: errorInfo.action }))] }) }));\n}\n","import { styled } from '@linaria/react';\nexport default styled.div `\n background-image: ${props => `url(${props.pluginPath}/public/assets/images/hubspot.svg)`};\n background-color: #f5f8fa;\n background-repeat: no-repeat;\n background-position: center 25px;\n background-size: 120px;\n color: #33475b;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n\n padding: ${(props) => props.padding || '90px 20% 25px'};\n\n p {\n font-size: inherit !important;\n line-height: 24px;\n margin: 4px 0;\n }\n`;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport HubspotWrapper from './HubspotWrapper';\nimport UISpinner from '../UIComponents/UISpinner';\nimport { pluginPath } from '../../constants/leadinConfig';\nexport default function LoadingBlock() {\n return (_jsx(HubspotWrapper, { pluginPath: pluginPath, children: _jsx(UISpinner, { size: 50 }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment, useEffect } from 'react';\nimport { portalId, refreshToken } from '../../constants/leadinConfig';\nimport UISpacer from '../UIComponents/UISpacer';\nimport PreviewForm from './PreviewForm';\nimport FormSelect from './FormSelect';\nimport { usePostBackgroundMessage, BackgroudAppContext, useBackgroundAppContext, } from '../../iframe/useBackgroundApp';\nimport { ProxyMessages } from '../../iframe/integratedMessages';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils';\nfunction FormEdit({ attributes, isSelected, setAttributes, preview = true, origin = 'gutenberg', }) {\n const { formId, formName } = attributes;\n const formSelected = portalId && formId;\n const isBackgroundAppReady = useBackgroundAppContext();\n const monitorFormPreviewRender = usePostBackgroundMessage();\n const handleChange = (selectedForm) => {\n setAttributes({\n portalId,\n formId: selectedForm.value,\n formName: selectedForm.label,\n });\n };\n useEffect(() => {\n monitorFormPreviewRender({\n key: ProxyMessages.TrackFormPreviewRender,\n payload: {\n origin,\n },\n });\n }, [origin]);\n return !isBackgroundAppReady ? (_jsx(LoadingBlock, {})) : (_jsxs(Fragment, { children: [(isSelected || !formSelected) && (_jsx(FormSelect, { formId: formId, formName: formName, handleChange: handleChange, origin: origin })), formSelected && (_jsxs(Fragment, { children: [isSelected && _jsx(UISpacer, {}), preview && _jsx(PreviewForm, { portalId: portalId, formId: formId })] }))] }));\n}\nexport default function FormEditContainer(props) {\n return (_jsx(BackgroudAppContext.Provider, { value: refreshToken && getOrCreateBackgroundApp(refreshToken), children: _jsx(FormEdit, { ...props }) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport FormSelector from './FormSelector';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport { __ } from '@wordpress/i18n';\nimport useForms from './hooks/useForms';\nimport useCreateFormFromTemplate from './hooks/useCreateFormFromTemplate';\nimport { isDefaultForm } from '../../constants/defaultFormOptions';\nimport ErrorHandler from '../Common/ErrorHandler';\nexport default function FormSelect({ formId, formName, handleChange, origin = 'gutenberg', }) {\n const { search, formApiError, reset } = useForms();\n const { createFormByTemplate, reset: createReset, isCreating, hasError, formApiError: createApiError, } = useCreateFormFromTemplate(origin);\n const value = formId && formName\n ? {\n label: formName,\n value: formId,\n }\n : null;\n const handleLocalChange = (option) => {\n if (isDefaultForm(option.value)) {\n createFormByTemplate(option.value).then(({ guid, name }) => {\n handleChange({\n value: guid,\n label: name,\n });\n });\n }\n else {\n handleChange(option);\n }\n };\n return isCreating ? (_jsx(LoadingBlock, {})) : formApiError || createApiError ? (_jsx(ErrorHandler, { status: formApiError ? formApiError.status : createApiError.status, resetErrorState: () => {\n if (hasError) {\n createReset();\n }\n else {\n reset();\n }\n }, errorInfo: {\n header: __('There was a problem retrieving your forms', 'leadin'),\n message: __('Please refresh your forms or try again in a few minutes', 'leadin'),\n action: __('Refresh forms', 'leadin'),\n } })) : (_jsx(FormSelector, { loadOptions: search, onChange: (option) => handleLocalChange(option), value: value }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport HubspotWrapper from '../Common/HubspotWrapper';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport AsyncSelect from '../Common/AsyncSelect';\nimport { __ } from '@wordpress/i18n';\nexport default function FormSelector({ loadOptions, onChange, value, }) {\n return (_jsxs(HubspotWrapper, { pluginPath: pluginPath, children: [_jsx(\"p\", { \"data-test-id\": \"leadin-form-select\", children: _jsx(\"b\", { children: __('Select an existing form or create a new one from a template', 'leadin') }) }), _jsx(AsyncSelect, { placeholder: __('Search for a form', 'leadin'), value: value, loadOptions: loadOptions, onChange: onChange })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useRef } from 'react';\nimport UIOverlay from '../UIComponents/UIOverlay';\nimport { formsScriptPayload, hublet } from '../../constants/leadinConfig';\nimport useFormScript from './hooks/useFormsScript';\nexport default function PreviewForm({ portalId, formId, }) {\n const inputEl = useRef(null);\n const ready = useFormScript();\n useEffect(() => {\n if (!ready) {\n return;\n }\n if (inputEl.current) {\n inputEl.current.innerHTML = '';\n const embedScript = document.createElement('script');\n embedScript.innerHTML = `hbspt.forms.create({ portalId: '${portalId}', formId: '${formId}', region: '${hublet}', ${formsScriptPayload} });`;\n inputEl.current.appendChild(embedScript);\n }\n }, [formId, portalId, ready, inputEl]);\n return _jsx(UIOverlay, { ref: inputEl });\n}\n","import { useState } from 'react';\nimport { usePostAsyncBackgroundMessage, usePostBackgroundMessage, } from '../../../iframe/useBackgroundApp';\nimport LoadState from '../../enums/loadState';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nexport default function useCreateFormFromTemplate(origin = 'gutenberg') {\n const proxy = usePostAsyncBackgroundMessage();\n const track = usePostBackgroundMessage();\n const [loadState, setLoadState] = useState(LoadState.Idle);\n const [formApiError, setFormApiError] = useState(null);\n const createFormByTemplate = (type) => {\n setLoadState(LoadState.Loading);\n track({\n key: ProxyMessages.TrackFormCreatedFromTemplate,\n payload: {\n type,\n origin,\n },\n });\n return proxy({\n key: ProxyMessages.CreateFormFromTemplate,\n payload: type,\n })\n .then(form => {\n setLoadState(LoadState.Idle);\n return form;\n })\n .catch(err => {\n setFormApiError(err);\n track({\n key: ProxyMessages.TrackFormCreationFailed,\n payload: {\n origin,\n },\n });\n setLoadState(LoadState.Failed);\n });\n };\n return {\n isCreating: loadState === LoadState.Loading,\n hasError: loadState === LoadState.Failed,\n formApiError,\n createFormByTemplate,\n reset: () => setLoadState(LoadState.Idle),\n };\n}\n","import { useState } from 'react';\nimport debounce from 'lodash/debounce';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport { DEFAULT_OPTIONS } from '../../../constants/defaultFormOptions';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nexport default function useForms() {\n const proxy = usePostAsyncBackgroundMessage();\n const [formApiError, setFormApiError] = useState(null);\n const search = debounce((search, callback) => {\n return proxy({\n key: ProxyMessages.FetchForms,\n payload: {\n search,\n },\n })\n .then(forms => {\n callback([\n ...forms.map((form) => ({\n label: form.name,\n value: form.guid,\n })),\n DEFAULT_OPTIONS,\n ]);\n })\n .catch(error => {\n setFormApiError(error);\n });\n }, 300, { trailing: true });\n return {\n search,\n formApiError,\n reset: () => setFormApiError(null),\n };\n}\n","import $ from 'jquery';\nimport { useEffect, useState } from 'react';\nimport { formsScript } from '../../../constants/leadinConfig';\nimport Raven from '../../../lib/Raven';\nlet promise;\nfunction loadFormsScript() {\n if (!promise) {\n promise = new Promise((resolve, reject) => $.getScript(formsScript)\n .done(resolve)\n .fail(reject));\n }\n return promise;\n}\nexport default function useFormScript() {\n const [ready, setReady] = useState(false);\n useEffect(() => {\n loadFormsScript()\n .then(() => setReady(true))\n .catch(error => Raven.captureException(error));\n }, []);\n return ready;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment, useEffect } from 'react';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport MeetingSelector from './MeetingSelector';\nimport MeetingWarning from './MeetingWarning';\nimport useMeetings, { useSelectedMeeting, useSelectedMeetingCalendar, } from './hooks/useMeetings';\nimport HubspotWrapper from '../Common/HubspotWrapper';\nimport ErrorHandler from '../Common/ErrorHandler';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport { __ } from '@wordpress/i18n';\nimport Raven from 'raven-js';\nexport default function MeetingController({ handleChange, url, }) {\n const { mappedMeetings: meetings, loading, error, reload, connectCalendar, } = useMeetings();\n const selectedMeetingOption = useSelectedMeeting(url);\n const selectedMeetingCalendar = useSelectedMeetingCalendar(url);\n useEffect(() => {\n if (!url && meetings.length > 0) {\n handleChange(meetings[0].value);\n }\n }, [meetings, url, handleChange]);\n const handleLocalChange = (option) => {\n handleChange(option.value);\n };\n const handleConnectCalendar = () => {\n return connectCalendar()\n .then(() => {\n reload();\n })\n .catch(error => {\n Raven.captureMessage('Unable to connect calendar', {\n extra: { error },\n });\n });\n };\n return (_jsx(Fragment, { children: loading ? (_jsx(LoadingBlock, {})) : error ? (_jsx(ErrorHandler, { status: (error && error.status) || error, resetErrorState: () => reload(), errorInfo: {\n header: __('There was a problem retrieving your meetings', 'leadin'),\n message: __('Please refresh your meetings or try again in a few minutes', 'leadin'),\n action: __('Refresh meetings', 'leadin'),\n } })) : (_jsxs(HubspotWrapper, { padding: \"90px 32px 24px\", pluginPath: pluginPath, children: [selectedMeetingCalendar && (_jsx(MeetingWarning, { status: selectedMeetingCalendar, onConnectCalendar: handleConnectCalendar })), meetings.length > 1 && (_jsx(MeetingSelector, { onChange: handleLocalChange, options: meetings, value: selectedMeetingOption }))] })) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment, useEffect } from 'react';\nimport MeetingController from './MeetingController';\nimport PreviewMeeting from './PreviewMeeting';\nimport { BackgroudAppContext, useBackgroundAppContext, usePostBackgroundMessage, } from '../../iframe/useBackgroundApp';\nimport { refreshToken } from '../../constants/leadinConfig';\nimport { ProxyMessages } from '../../iframe/integratedMessages';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils';\nfunction MeetingEdit({ attributes: { url }, isSelected, setAttributes, preview = true, origin = 'gutenberg', }) {\n const isBackgroundAppReady = useBackgroundAppContext();\n const monitorFormPreviewRender = usePostBackgroundMessage();\n const handleChange = (newUrl) => {\n setAttributes({\n url: newUrl,\n });\n };\n useEffect(() => {\n monitorFormPreviewRender({\n key: ProxyMessages.TrackMeetingPreviewRender,\n payload: {\n origin,\n },\n });\n }, [origin]);\n return !isBackgroundAppReady ? (_jsx(LoadingBlock, {})) : (_jsxs(Fragment, { children: [(isSelected || !url) && (_jsx(MeetingController, { url: url, handleChange: handleChange })), preview && url && _jsx(PreviewMeeting, { url: url })] }));\n}\nexport default function MeetingsEditContainer(props) {\n return (_jsx(BackgroudAppContext.Provider, { value: refreshToken && getOrCreateBackgroundApp(refreshToken), children: _jsx(MeetingEdit, { ...props }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport AsyncSelect from '../Common/AsyncSelect';\nimport UISpacer from '../UIComponents/UISpacer';\nimport { __ } from '@wordpress/i18n';\nexport default function MeetingSelector({ options, onChange, value, }) {\n const optionsWrapper = [\n {\n label: __('Meeting name', 'leadin'),\n options,\n },\n ];\n return (_jsxs(Fragment, { children: [_jsx(UISpacer, {}), _jsx(\"p\", { \"data-test-id\": \"leadin-meeting-select\", children: _jsx(\"b\", { children: __('Select a meeting scheduling page', 'leadin') }) }), _jsx(AsyncSelect, { defaultOptions: optionsWrapper, onChange: onChange, placeholder: __('Select a meeting', 'leadin'), value: value })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport UIAlert from '../UIComponents/UIAlert';\nimport UIButton from '../UIComponents/UIButton';\nimport { CURRENT_USER_CALENDAR_MISSING } from './constants';\nimport { __ } from '@wordpress/i18n';\nexport default function MeetingWarning({ status, onConnectCalendar, }) {\n const isMeetingOwner = status === CURRENT_USER_CALENDAR_MISSING;\n const titleText = isMeetingOwner\n ? __('Your calendar is not connected', 'leadin')\n : __('Calendar is not connected', 'leadin');\n const titleMessage = isMeetingOwner\n ? __('Please connect your calendar to activate your scheduling pages', 'leadin')\n : __('Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', 'leadin');\n return (_jsx(UIAlert, { titleText: titleText, titleMessage: titleMessage, children: isMeetingOwner && (_jsx(UIButton, { use: \"tertiary\", id: \"meetings-connect-calendar\", onClick: onConnectCalendar, children: __('Connect calendar', 'leadin') })) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment, useEffect, useRef } from 'react';\nimport UIOverlay from '../UIComponents/UIOverlay';\nimport useMeetingsScript from './hooks/useMeetingsScript';\nexport default function PreviewForm({ url }) {\n const ready = useMeetingsScript();\n const inputEl = useRef(null);\n useEffect(() => {\n if (!ready) {\n return;\n }\n if (inputEl.current) {\n inputEl.current.innerHTML = '';\n const container = document.createElement('div');\n container.dataset.src = `${url}?embed=true`;\n container.classList.add('meetings-iframe-container');\n inputEl.current.appendChild(container);\n const embedScript = document.createElement('script');\n embedScript.innerHTML =\n 'hbspt.meetings.create(\".meetings-iframe-container\");';\n inputEl.current.appendChild(embedScript);\n }\n }, [url, ready, inputEl]);\n return _jsx(Fragment, { children: url && _jsx(UIOverlay, { ref: inputEl }) });\n}\n","export const OTHER_USER_CALENDAR_MISSING = 'OTHER_USER_CALENDAR_MISSING';\nexport const CURRENT_USER_CALENDAR_MISSING = 'CURRENT_USER_CALENDAR_MISSING';\n","import { useEffect, useState } from 'react';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport LoadState from '../../enums/loadState';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nlet user = null;\nexport default function useCurrentUserFetch() {\n const proxy = usePostAsyncBackgroundMessage();\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [error, setError] = useState(null);\n const createUser = () => {\n if (!user) {\n setLoadState(LoadState.NotLoaded);\n }\n };\n const reload = () => {\n user = null;\n setLoadState(LoadState.NotLoaded);\n setError(null);\n };\n useEffect(() => {\n if (loadState === LoadState.NotLoaded && !user) {\n setLoadState(LoadState.Loading);\n proxy({\n key: ProxyMessages.FetchOrCreateMeetingUser,\n })\n .then(data => {\n user = data;\n setLoadState(LoadState.Idle);\n })\n .catch(err => {\n setError(err);\n setLoadState(LoadState.Failed);\n });\n }\n }, [loadState]);\n return { user, loadUserState: loadState, error, createUser, reload };\n}\n","import { useCallback } from 'react';\nimport { __ } from '@wordpress/i18n';\nimport { CURRENT_USER_CALENDAR_MISSING, OTHER_USER_CALENDAR_MISSING, } from '../constants';\nimport useMeetingsFetch from './useMeetingsFetch';\nimport useCurrentUserFetch from './useCurrentUserFetch';\nimport LoadState from '../../enums/loadState';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nfunction getDefaultMeetingName(meeting, currentUser, meetingUsers) {\n const [meetingOwnerId] = meeting.meetingsUserIds;\n let result = __('Default', 'leadin');\n if (currentUser &&\n meetingOwnerId !== currentUser.id &&\n meetingUsers[meetingOwnerId]) {\n const user = meetingUsers[meetingOwnerId];\n result += ` (${user.userProfile.fullName})`;\n }\n return result;\n}\nfunction hasCalendarObject(user) {\n return (user &&\n user.meetingsUserBlob &&\n user.meetingsUserBlob.calendarSettings &&\n user.meetingsUserBlob.calendarSettings.email);\n}\nexport default function useMeetings() {\n const proxy = usePostAsyncBackgroundMessage();\n const { meetings, meetingUsers, error: meetingsError, loadMeetingsState, reload: reloadMeetings, } = useMeetingsFetch();\n const { user: currentUser, error: userError, loadUserState, reload: reloadUser, } = useCurrentUserFetch();\n const reload = useCallback(() => {\n reloadUser();\n reloadMeetings();\n }, [reloadUser, reloadMeetings]);\n const connectCalendar = () => {\n return proxy({\n key: ProxyMessages.ConnectMeetingsCalendar,\n });\n };\n return {\n mappedMeetings: meetings.map(meet => ({\n label: meet.name || getDefaultMeetingName(meet, currentUser, meetingUsers),\n value: meet.link,\n })),\n meetings,\n meetingUsers,\n currentUser,\n error: meetingsError || userError,\n loading: loadMeetingsState == LoadState.Loading ||\n loadUserState === LoadState.Loading,\n reload,\n connectCalendar,\n };\n}\nexport function useSelectedMeeting(url) {\n const { mappedMeetings: meetings } = useMeetings();\n const option = meetings.find(({ value }) => value === url);\n return option;\n}\nexport function useSelectedMeetingCalendar(url) {\n const { meetings, meetingUsers, currentUser } = useMeetings();\n const meeting = meetings.find(meet => meet.link === url);\n const mappedMeetingUsersId = meetingUsers.reduce((p, c) => ({ ...p, [c.id]: c }), {});\n if (!meeting) {\n return null;\n }\n else {\n const { meetingsUserIds } = meeting;\n if (currentUser &&\n meetingsUserIds.includes(currentUser.id) &&\n !hasCalendarObject(currentUser)) {\n return CURRENT_USER_CALENDAR_MISSING;\n }\n else if (meetingsUserIds\n .map(id => mappedMeetingUsersId[id])\n .some((user) => !hasCalendarObject(user))) {\n return OTHER_USER_CALENDAR_MISSING;\n }\n else {\n return null;\n }\n }\n}\n","import { useEffect, useState } from 'react';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport LoadState from '../../enums/loadState';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nlet meetings = [];\nlet meetingUsers = [];\nexport default function useMeetingsFetch() {\n const proxy = usePostAsyncBackgroundMessage();\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [error, setError] = useState(null);\n const reload = () => {\n meetings = [];\n setError(null);\n setLoadState(LoadState.NotLoaded);\n };\n useEffect(() => {\n if (loadState === LoadState.NotLoaded && meetings.length === 0) {\n setLoadState(LoadState.Loading);\n proxy({\n key: ProxyMessages.FetchMeetingsAndUsers,\n })\n .then(data => {\n setLoadState(LoadState.Loaded);\n meetings = data && data.meetingLinks;\n meetingUsers = data && data.meetingUsers;\n })\n .catch(e => {\n setError(e);\n setLoadState(LoadState.Failed);\n });\n }\n }, [loadState]);\n return {\n meetings,\n meetingUsers,\n loadMeetingsState: loadState,\n error,\n reload,\n };\n}\n","import $ from 'jquery';\nimport { useState, useEffect } from 'react';\nimport { meetingsScript } from '../../../constants/leadinConfig';\nimport Raven from '../../../lib/Raven';\nlet promise;\nfunction loadMeetingsScript() {\n if (!promise) {\n promise = new Promise((resolve, reject) => $.getScript(meetingsScript)\n .done(resolve)\n .fail(reject));\n }\n return promise;\n}\nexport default function useMeetingsScript() {\n const [ready, setReady] = useState(false);\n useEffect(() => {\n loadMeetingsScript()\n .then(() => setReady(true))\n .catch(error => Raven.captureException(error));\n }, []);\n return ready;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { MARIGOLD_LIGHT, MARIGOLD_MEDIUM, OBSIDIAN } from './colors';\nconst AlertContainer = styled.div `\n background-color: ${MARIGOLD_LIGHT};\n border-color: ${MARIGOLD_MEDIUM};\n color: ${OBSIDIAN};\n font-size: 14px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n border-style: solid;\n border-top-style: solid;\n border-right-style: solid;\n border-bottom-style: solid;\n border-left-style: solid;\n border-width: 1px;\n min-height: 60px;\n padding: 8px 20px;\n position: relative;\n text-align: left;\n`;\nconst Title = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 700;\n font-size: 16px;\n line-height: 19px;\n color: ${OBSIDIAN};\n margin: 0;\n padding: 0;\n`;\nconst Message = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n margin: 0;\n padding: 0;\n`;\nconst MessageContainer = styled.div `\n display: flex;\n flex-direction: column;\n`;\nexport default function UIAlert({ titleText, titleMessage, children, }) {\n return (_jsxs(AlertContainer, { children: [_jsxs(MessageContainer, { children: [_jsx(Title, { children: titleText }), _jsx(Message, { children: titleMessage })] }), children] }));\n}\n","import { styled } from '@linaria/react';\nimport { HEFFALUMP, LORAX, OLAF } from './colors';\nexport default styled.button `\n background-color:${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n border: 3px solid ${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n color: ${OLAF}\n border-radius: 3px;\n font-size: 14px;\n line-height: 14px;\n padding: 12px 24px;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-weight: 500;\n white-space: nowrap;\n`;\n","import { styled } from '@linaria/react';\nexport default styled.div `\n text-align: ${props => (props.textAlign ? props.textAlign : 'inherit')};\n`;\n","import { styled } from '@linaria/react';\nexport default styled.div `\n position: relative;\n\n &:after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n }\n`;\n","import { styled } from '@linaria/react';\nexport default styled.div `\n height: 30px;\n`;\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { CALYPSO_MEDIUM, CALYPSO } from './colors';\nconst SpinnerOuter = styled.div `\n align-items: center;\n color: #00a4bd;\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 100%;\n height: 100%;\n margin: '2px';\n`;\nconst SpinnerInner = styled.div `\n align-items: center;\n display: flex;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\nconst Circle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n`;\nconst AnimatedCircle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n animation: dashAnimation 2s ease-in-out infinite,\n spinAnimation 2s linear infinite;\n\n @keyframes dashAnimation {\n 0% {\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -50;\n }\n\n 100% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -140;\n }\n }\n\n @keyframes spinAnimation {\n transform: rotate(360deg);\n }\n`;\nexport default function UISpinner({ size = 20 }) {\n return (_jsx(SpinnerOuter, { children: _jsx(SpinnerInner, { children: _jsxs(\"svg\", { height: size, width: size, viewBox: \"0 0 50 50\", children: [_jsx(Circle, { color: CALYPSO_MEDIUM, cx: \"25\", cy: \"25\", r: \"22.5\" }), _jsx(AnimatedCircle, { color: CALYPSO, cx: \"25\", cy: \"25\", r: \"22.5\" })] }) }) }));\n}\n","export const CALYPSO = '#00a4bd';\nexport const CALYPSO_MEDIUM = '#7fd1de';\nexport const CALYPSO_LIGHT = '#e5f5f8';\nexport const LORAX = '#ff7a59';\nexport const OLAF = '#ffffff';\nexport const HEFFALUMP = '#425b76';\nexport const MARIGOLD_LIGHT = '#fef8f0';\nexport const MARIGOLD_MEDIUM = '#fae0b5';\nexport const OBSIDIAN = '#33475b';\n","const ConnectionStatus = {\n Connected: 'Connected',\n NotConnected: 'NotConnected',\n};\nexport default ConnectionStatus;\n","const LoadState = {\n NotLoaded: 'NotLoaded',\n Loading: 'Loading',\n Loaded: 'Loaded',\n Idle: 'Idle',\n Failed: 'Failed',\n};\nexport default LoadState;\n","import $ from 'jquery';\nimport Raven, { configureRaven } from '../lib/Raven';\nexport function initApp(initFn) {\n configureRaven();\n Raven.context(initFn);\n}\nexport function initAppOnReady(initFn) {\n function main() {\n $(initFn);\n }\n initApp(main);\n}\n","import { deviceId, hubspotBaseUrl, locale, portalId, } from '../constants/leadinConfig';\nimport { initApp } from './appUtils';\nexport function initBackgroundApp(initFn) {\n function main() {\n if (Array.isArray(initFn)) {\n initFn.forEach(callback => callback());\n }\n else {\n initFn();\n }\n }\n initApp(main);\n}\nexport const getOrCreateBackgroundApp = (refreshToken) => {\n if (window.LeadinBackgroundApp) {\n return window.LeadinBackgroundApp;\n }\n const { IntegratedAppEmbedder, IntegratedAppOptions } = window;\n const options = new IntegratedAppOptions()\n .setLocale(locale)\n .setDeviceId(deviceId)\n .setRefreshToken(refreshToken);\n const embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', portalId, hubspotBaseUrl, () => { }).setOptions(options);\n embedder.attachTo(document.body, false);\n embedder.postStartAppMessage(); // lets the app know all all data has been passed to it\n window.LeadinBackgroundApp = embedder;\n return window.LeadinBackgroundApp;\n};\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = '' + args.join(' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n collectWindowErrors: true,\n maxMessageLength: 0,\n\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.19.1',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped already\n // for both debugging and to prevent it to being wrapped twice\n wrapped.__raven__ = true;\n wrapped.__inner__ = func;\n\n return wrapped;\n },\n\n /*\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._restoreBuiltIns();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /*\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n // Cases for sending ex as a message, rather than an exception\n var isNotError = !isError(ex);\n var isNotErrorEvent = !isErrorEvent(ex);\n var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n return this.captureMessage(\n ex,\n objectMerge(\n {\n trimHeadFrames: 1,\n stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n },\n options\n )\n );\n }\n\n // Get actual Error from ErrorEvent\n if (isErrorEvent(ex)) ex = ex.error;\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n\n var data = objectMerge(\n {\n message: msg + '' // Make sure it's actually a string\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = stack.stack[1];\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n options = objectMerge(\n {\n // fingerprint on msg, not stack trace (legacy behavior, could be\n // revisited)\n fingerprint: msg,\n // since we know this is a synthetic trace, the top N-most frames\n // MUST be from Raven.js, so mark them as in_app later by setting\n // trimHeadFrames\n trimHeadFrames: (options.trimHeadFrames || 0) + 1\n },\n options\n );\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function(data) {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && 'fetch' in _window) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n return response;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n if (this._hasDocument) {\n if (_document.location && _document.location.href) {\n httpData.url = _document.location.href;\n }\n if (_document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n retry = request.getResponseHeader('Retry-After');\n retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n // If there are no tags/extra, strip the key from the payload alltogther.\n if (isEmptyObject(data.tags)) delete data.tags;\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n var url = opts.url;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n // NOTE: auth is intentionally sent as part of query string (NOT as custom\n // HTTP header) so as to avoid preflight CORS requests\n request.open('POST', url + '?' + urlencode(opts.auth));\n request.send(stringify(opts.data));\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","var _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) return {};\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isString: isString,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} message Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (ex && utils.isError(ex)) {\n // non-string `ex` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(ex);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var msg = message; // must be new var or will modify original `arguments`\n var groups;\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n msg = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: msg,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n // Used to additionally parse URL/line/column from eval frames\n geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n lines = ex.stack.split('\\n'),\n stack = [],\n submatch,\n parts,\n element,\n reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","/** @license React v17.0.2\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\nvar _assign = require('object-assign');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = 0xeac7;\nvar REACT_PORTAL_TYPE = 0xeaca;\nexports.Fragment = 0xeacb;\nvar REACT_STRICT_MODE_TYPE = 0xeacc;\nvar REACT_PROFILER_TYPE = 0xead2;\nvar REACT_PROVIDER_TYPE = 0xeacd;\nvar REACT_CONTEXT_TYPE = 0xeace;\nvar REACT_FORWARD_REF_TYPE = 0xead0;\nvar REACT_SUSPENSE_TYPE = 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = 0xead8;\nvar REACT_MEMO_TYPE = 0xead3;\nvar REACT_LAZY_TYPE = 0xead4;\nvar REACT_BLOCK_TYPE = 0xead9;\nvar REACT_SERVER_BLOCK_TYPE = 0xeada;\nvar REACT_FUNDAMENTAL_TYPE = 0xead5;\nvar REACT_SCOPE_TYPE = 0xead7;\nvar REACT_OPAQUE_ID_TYPE = 0xeae0;\nvar REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\nvar REACT_OFFSCREEN_TYPE = 0xeae2;\nvar REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\n\nif (typeof Symbol === 'function' && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor('react.element');\n REACT_PORTAL_TYPE = symbolFor('react.portal');\n exports.Fragment = symbolFor('react.fragment');\n REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');\n REACT_PROFILER_TYPE = symbolFor('react.profiler');\n REACT_PROVIDER_TYPE = symbolFor('react.provider');\n REACT_CONTEXT_TYPE = symbolFor('react.context');\n REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');\n REACT_SUSPENSE_TYPE = symbolFor('react.suspense');\n REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');\n REACT_MEMO_TYPE = symbolFor('react.memo');\n REACT_LAZY_TYPE = symbolFor('react.lazy');\n REACT_BLOCK_TYPE = symbolFor('react.block');\n REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');\n REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');\n REACT_SCOPE_TYPE = symbolFor('react.scope');\n REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');\n REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');\n REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');\n}\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case exports.Fragment:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentName(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: _assign({}, props, {\n value: prevLog\n }),\n info: _assign({}, props, {\n value: prevInfo\n }),\n warn: _assign({}, props, {\n value: prevWarn\n }),\n error: _assign({}, props, {\n value: prevError\n }),\n group: _assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: _assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: _assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at ');\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_BLOCK_TYPE:\n return describeFunctionComponentFrame(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie.
\n // or
). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n //
, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentName(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentName(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentName(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === exports.Fragment) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","module.exports = window[\"React\"];","module.exports = window[\"ReactDOM\"];","module.exports = window[\"jQuery\"];","module.exports = window[\"wp\"][\"i18n\"];","// src/styled.ts\nimport validAttr from \"@emotion/is-prop-valid\";\nimport React from \"react\";\nimport { cx } from \"@linaria/core\";\nvar isCapital = (ch) => ch.toUpperCase() === ch;\nvar filterKey = (keys) => (key) => keys.indexOf(key) === -1;\nvar omit = (obj, keys) => {\n const res = {};\n Object.keys(obj).filter(filterKey(keys)).forEach((key) => {\n res[key] = obj[key];\n });\n return res;\n};\nfunction filterProps(asIs, props, omitKeys) {\n const filteredProps = omit(props, omitKeys);\n if (!asIs) {\n const interopValidAttr = typeof validAttr === \"function\" ? { default: validAttr } : validAttr;\n Object.keys(filteredProps).forEach((key) => {\n if (!interopValidAttr.default(key)) {\n delete filteredProps[key];\n }\n });\n }\n return filteredProps;\n}\nvar warnIfInvalid = (value, componentName) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof value === \"string\" || typeof value === \"number\" && isFinite(value)) {\n return;\n }\n const stringified = typeof value === \"object\" ? JSON.stringify(value) : String(value);\n console.warn(\n `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.`\n );\n }\n};\nfunction styled(tag) {\n return (options) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (Array.isArray(options)) {\n throw new Error(\n 'Using the \"styled\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup'\n );\n }\n }\n const render = (props, ref) => {\n const { as: component = tag, class: className } = props;\n const shouldKeepProps = options.propsAsIs === void 0 ? !(typeof component === \"string\" && component.indexOf(\"-\") === -1 && !isCapital(component[0])) : options.propsAsIs;\n const filteredProps = filterProps(shouldKeepProps, props, [\n \"as\",\n \"class\"\n ]);\n filteredProps.ref = ref;\n filteredProps.className = options.atomic ? cx(options.class, filteredProps.className || className) : cx(filteredProps.className || className, options.class);\n const { vars } = options;\n if (vars) {\n const style = {};\n for (const name in vars) {\n const variable = vars[name];\n const result = variable[0];\n const unit = variable[1] || \"\";\n const value = typeof result === \"function\" ? result(props) : result;\n warnIfInvalid(value, options.name);\n style[`--${name}`] = `${value}${unit}`;\n }\n const ownStyle = filteredProps.style || {};\n const keys = Object.keys(ownStyle);\n if (keys.length > 0) {\n keys.forEach((key) => {\n style[key] = ownStyle[key];\n });\n }\n filteredProps.style = style;\n }\n if (tag.__linaria && tag !== component) {\n filteredProps.as = component;\n return React.createElement(tag, filteredProps);\n }\n return React.createElement(component, filteredProps);\n };\n const Result = React.forwardRef ? React.forwardRef(render) : (props) => {\n const rest = omit(props, [\"innerRef\"]);\n return render(rest, props.innerRef);\n };\n Result.displayName = options.name;\n Result.__linaria = {\n className: options.class,\n extends: tag\n };\n return Result;\n };\n}\nvar styled_default = process.env.NODE_ENV !== \"production\" ? new Proxy(styled, {\n get(o, prop) {\n return o(prop);\n }\n}) : styled;\nexport {\n styled_default as styled\n};\n//# sourceMappingURL=index.mjs.map","// src/css.ts\nvar css = () => {\n throw new Error(\n 'Using the \"css\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.'\n );\n};\nvar css_default = css;\n\n// src/cx.ts\nvar cx = function cx2() {\n const presentClassNames = Array.prototype.slice.call(arguments).filter(Boolean);\n const atomicClasses = {};\n const nonAtomicClasses = [];\n presentClassNames.forEach((arg) => {\n const individualClassNames = arg ? arg.split(\" \") : [];\n individualClassNames.forEach((className) => {\n if (className.startsWith(\"atm_\")) {\n const [, keyHash] = className.split(\"_\");\n atomicClasses[keyHash] = className;\n } else {\n nonAtomicClasses.push(className);\n }\n });\n });\n const result = [];\n for (const keyHash in atomicClasses) {\n if (Object.prototype.hasOwnProperty.call(atomicClasses, keyHash)) {\n result.push(atomicClasses[keyHash]);\n }\n }\n result.push(...nonAtomicClasses);\n return result.join(\" \");\n};\nvar cx_default = cx;\nexport {\n css_default as css,\n cx_default as cx\n};\n//# sourceMappingURL=index.mjs.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import elementorWidget from '../elementor/elementorWidget';\nimport registerFormWidget from '../elementor/FormWidget/registerFormWidget';\nimport { initBackgroundApp } from '../utils/backgroundAppUtils';\nimport registerMeetingsWidget from '../elementor/MeetingWidget/registerMeetingWidget';\nconst ELEMENTOR_READY_INTERVAL = 500;\nconst MAX_POLL_TIMEOUT = 30000;\nconst registerElementorWidgets = () => {\n initBackgroundApp(() => {\n let FormWidget;\n let MeetingsWidget;\n const leadinSelectFormItemView = elementorWidget(\n //@ts-expect-error global\n window.elementor, {\n widgetName: 'hubspot-form',\n controlSelector: '.elementor-hbspt-form-selector',\n containerSelector: '.hubspot-form-edit-mode',\n }, (controlContainer, widgetContainer, setValue) => {\n FormWidget = new registerFormWidget(controlContainer, widgetContainer, setValue);\n FormWidget.render();\n }, () => {\n FormWidget.done();\n });\n const leadinSelectMeetingItemView = elementorWidget(\n //@ts-expect-error global\n window.elementor, {\n widgetName: 'hubspot-meeting',\n controlSelector: '.elementor-hbspt-meeting-selector',\n containerSelector: '.hubspot-meeting-edit-mode',\n }, (controlContainer, widgetContainer, setValue) => {\n MeetingsWidget = new registerMeetingsWidget(controlContainer, widgetContainer, setValue);\n MeetingsWidget.render();\n }, () => {\n MeetingsWidget.done();\n });\n //@ts-expect-error global\n window.elementor.addControlView('leadinformselect', leadinSelectFormItemView);\n //@ts-expect-error global\n window.elementor.addControlView('leadinmeetingselect', leadinSelectMeetingItemView);\n });\n};\nconst pollForElementorReady = setInterval(() => {\n const elementorFrontend = window.elementorFrontend;\n if (elementorFrontend) {\n registerElementorWidgets();\n clearInterval(pollForElementorReady);\n }\n}, ELEMENTOR_READY_INTERVAL);\nsetTimeout(() => {\n clearInterval(pollForElementorReady);\n}, MAX_POLL_TIMEOUT);\n"],"names":["__","REGISTRATION_FORM","CONTACT_US_FORM","NEWSLETTER_FORM","SUPPORT_FORM","EVENT_FORM","DEFAULT_OPTIONS","label","options","value","isDefaultForm","window","leadinConfig","accountName","adminUrl","activationTime","connectionStatus","deviceId","didDisconnect","env","formsScript","meetingsScript","formsScriptPayload","hublet","hubspotBaseUrl","hubspotNonce","iframeUrl","impactLink","lastAuthorizeTime","lastDeauthorizeTime","lastDisconnectTime","leadinPluginVersion","leadinQueryParams","locale","loginUrl","phpVersion","pluginPath","plugins","portalDomain","portalEmail","portalId","redirectNonce","restNonce","restUrl","refreshToken","reviewSkippedDate","theme","trackConsent","wpVersion","contentEmbed","requiresContentEmbedScope","refreshTokenError","jsx","_jsx","ElementorBanner","ConnectPluginBanner","children","dangerouslySetInnerHTML","__html","replace","type","className","styled","Container","name","propsAsIs","ElementorButton","params","jsxs","_jsxs","Fragment","UISpinner","BackgroudAppContext","useBackgroundAppContext","useForms","getOrCreateBackgroundApp","ElementorFormSelect","formId","setAttributes","hasError","forms","loading","onChange","event","selectedForm","find","form","target","formName","disabled","selected","map","ElementorFormSelectWrapper","props","isBackgroundAppReady","ElementorFormSelectContainer","Provider","ConnectionStatus","Connected","NotConnected","FormControlController","attributes","setValue","render","ErrorHandler","FormEdit","FormWidgetController","isSelected","preview","origin","status","useState","useEffect","LoadState","ProxyMessages","usePostAsyncBackgroundMessage","proxy","NotLoaded","loadState","setLoadState","setError","setForms","key","FetchForms","payload","search","then","data","guid","Loaded","error","Failed","Loading","ReactDOM","registerFormWidget","controlContainer","widgetContainer","dataset","JSON","parse","unmountComponentAtNode","ElementorMeetingWarning","useMeetings","useSelectedMeetingCalendar","Raven","ElementorMeetingSelect","url","meetings","mappedMeetings","reload","connectCalendar","selectedMeetingCalendar","localUrl","setLocalUrl","handleConnectCalendar","captureMessage","extra","onConnectCalendar","length","newUrl","item","ElementorMeetingSelectWrapper","ElementorMeetingsSelectContainer","CURRENT_USER_CALENDAR_MISSING","MeetingWarning","isMeetingOwner","titleText","titleMessage","id","onClick","MeetingControlController","MeetingsEdit","MeetingWidgetController","registerMeetingsWidget","elementorWidget","elementor","callback","done","modules","controls","BaseData","extend","onReady","self","ui","contentEditable","prevObject","querySelector","controlSelector","element","$el","containerSelector","args","elementorFrontend","hooks","addAction","widgetName","saveValue","onBeforeDestroy","removeAction","CoreMessages","HandshakeReceive","SendRefreshToken","ReloadParentFrame","RedirectParentFrame","SendLocale","SendDeviceId","FormMessages","CreateFormAppNavigation","LiveChatMessages","CreateLiveChatAppNavigation","PluginMessages","PluginSettingsNavigation","PluginLeadinConfig","TrackConsent","InternalTrackingFetchRequest","InternalTrackingFetchResponse","InternalTrackingFetchError","InternalTrackingChangeRequest","InternalTrackingChangeError","BusinessUnitFetchRequest","BusinessUnitFetchResponse","BusinessUnitFetchError","BusinessUnitChangeRequest","BusinessUnitChangeError","SkipReviewRequest","SkipReviewResponse","SkipReviewError","RemoveParentQueryParam","ContentEmbedInstallRequest","ContentEmbedInstallResponse","ContentEmbedInstallError","ContentEmbedActivationRequest","ContentEmbedActivationResponse","ContentEmbedActivationError","FetchForm","CreateFormFromTemplate","FetchAuth","FetchMeetingsAndUsers","FetchContactsCreateSinceActivation","FetchOrCreateMeetingUser","ConnectMeetingsCalendar","TrackFormPreviewRender","TrackFormCreatedFromTemplate","TrackFormCreationFailed","TrackMeetingPreviewRender","TrackSidebarMetaChange","TrackReviewBannerRender","TrackReviewBannerInteraction","TrackReviewBannerDismissed","TrackPluginDeactivation","createContext","useContext","usePostBackgroundMessage","app","message","postMessage","postAsyncMessage","configureRaven","indexOf","config","instrument","tryCatch","release","install","setTagsContext","v","php","wordpress","setExtraContext","hub","Object","keys","join","useRef","CALYPSO_LIGHT","CALYPSO_MEDIUM","_exp2","focused","_exp3","ControlContainer","vars","ValueContainer","Placeholder","SingleValue","IndicatorContainer","DropdownIndicator","InputContainer","Input","InputShadow","MenuContainer","MenuList","MenuGroup","MenuGroupHeader","_exp5","_exp6","_exp7","MenuItem","AsyncSelect","placeholder","loadOptions","defaultOptions","inputEl","inputShadowEl","isFocused","setFocus","localValue","setLocalValue","setOptions","inputSize","current","clientWidth","result","Idle","renderItems","items","parentKey","index","undefined","blur","focus","ref","onFocus","e","width","UIButton","UIContainer","HubspotWrapper","redirectToPlugin","location","href","resetErrorState","errorInfo","header","action","isUnauthorized","errorHeader","errorMessage","textAlign","_exp","padding","LoadingBlock","size","UISpacer","PreviewForm","FormSelect","formSelected","monitorFormPreviewRender","handleChange","FormEditContainer","FormSelector","useCreateFormFromTemplate","formApiError","reset","createFormByTemplate","createReset","isCreating","createApiError","handleLocalChange","option","UIOverlay","useFormScript","ready","innerHTML","embedScript","document","createElement","appendChild","track","setFormApiError","err","debounce","trailing","$","promise","loadFormsScript","Promise","resolve","reject","getScript","fail","setReady","captureException","MeetingSelector","useSelectedMeeting","MeetingController","selectedMeetingOption","PreviewMeeting","MeetingEdit","MeetingsEditContainer","optionsWrapper","UIAlert","use","useMeetingsScript","container","src","classList","add","OTHER_USER_CALENDAR_MISSING","user","useCurrentUserFetch","createUser","loadUserState","useCallback","useMeetingsFetch","getDefaultMeetingName","meeting","currentUser","meetingUsers","meetingsUserIds","meetingOwnerId","userProfile","fullName","hasCalendarObject","meetingsUserBlob","calendarSettings","email","meetingsError","loadMeetingsState","reloadMeetings","userError","reloadUser","meet","link","mappedMeetingUsersId","reduce","p","c","includes","some","meetingLinks","loadMeetingsScript","AlertContainer","Title","Message","MessageContainer","HEFFALUMP","LORAX","CALYPSO","SpinnerOuter","SpinnerInner","color","Circle","AnimatedCircle","height","viewBox","cx","cy","r","OLAF","MARIGOLD_LIGHT","MARIGOLD_MEDIUM","OBSIDIAN","initApp","initFn","context","initAppOnReady","main","initBackgroundApp","Array","isArray","forEach","LeadinBackgroundApp","IntegratedAppEmbedder","IntegratedAppOptions","setLocale","setDeviceId","setRefreshToken","embedder","attachTo","body","postStartAppMessage","ELEMENTOR_READY_INTERVAL","MAX_POLL_TIMEOUT","registerElementorWidgets","FormWidget","MeetingsWidget","leadinSelectFormItemView","leadinSelectMeetingItemView","addControlView","pollForElementorReady","setInterval","clearInterval","setTimeout"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/feedback.asset.php b/wp/wp-content/plugins/leadin/build/feedback.asset.php new file mode 100644 index 00000000..b2b4b65f --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/feedback.asset.php @@ -0,0 +1 @@ + array('jquery'), 'version' => '9ee21da01ecaa4dcb32f'); diff --git a/wp/wp-content/plugins/leadin/build/feedback.js b/wp/wp-content/plugins/leadin/build/feedback.js new file mode 100644 index 00000000..14b5af10 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/feedback.js @@ -0,0 +1,3839 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./scripts/constants/leadinConfig.ts": +/*!*******************************************!*\ + !*** ./scripts/constants/leadinConfig.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "accountName": () => (/* binding */ accountName), +/* harmony export */ "activationTime": () => (/* binding */ activationTime), +/* harmony export */ "adminUrl": () => (/* binding */ adminUrl), +/* harmony export */ "connectionStatus": () => (/* binding */ connectionStatus), +/* harmony export */ "contentEmbed": () => (/* binding */ contentEmbed), +/* harmony export */ "deviceId": () => (/* binding */ deviceId), +/* harmony export */ "didDisconnect": () => (/* binding */ didDisconnect), +/* harmony export */ "env": () => (/* binding */ env), +/* harmony export */ "formsScript": () => (/* binding */ formsScript), +/* harmony export */ "formsScriptPayload": () => (/* binding */ formsScriptPayload), +/* harmony export */ "hublet": () => (/* binding */ hublet), +/* harmony export */ "hubspotBaseUrl": () => (/* binding */ hubspotBaseUrl), +/* harmony export */ "hubspotNonce": () => (/* binding */ hubspotNonce), +/* harmony export */ "iframeUrl": () => (/* binding */ iframeUrl), +/* harmony export */ "impactLink": () => (/* binding */ impactLink), +/* harmony export */ "lastAuthorizeTime": () => (/* binding */ lastAuthorizeTime), +/* harmony export */ "lastDeauthorizeTime": () => (/* binding */ lastDeauthorizeTime), +/* harmony export */ "lastDisconnectTime": () => (/* binding */ lastDisconnectTime), +/* harmony export */ "leadinPluginVersion": () => (/* binding */ leadinPluginVersion), +/* harmony export */ "leadinQueryParams": () => (/* binding */ leadinQueryParams), +/* harmony export */ "locale": () => (/* binding */ locale), +/* harmony export */ "loginUrl": () => (/* binding */ loginUrl), +/* harmony export */ "meetingsScript": () => (/* binding */ meetingsScript), +/* harmony export */ "phpVersion": () => (/* binding */ phpVersion), +/* harmony export */ "pluginPath": () => (/* binding */ pluginPath), +/* harmony export */ "plugins": () => (/* binding */ plugins), +/* harmony export */ "portalDomain": () => (/* binding */ portalDomain), +/* harmony export */ "portalEmail": () => (/* binding */ portalEmail), +/* harmony export */ "portalId": () => (/* binding */ portalId), +/* harmony export */ "redirectNonce": () => (/* binding */ redirectNonce), +/* harmony export */ "refreshToken": () => (/* binding */ refreshToken), +/* harmony export */ "refreshTokenError": () => (/* binding */ refreshTokenError), +/* harmony export */ "requiresContentEmbedScope": () => (/* binding */ requiresContentEmbedScope), +/* harmony export */ "restNonce": () => (/* binding */ restNonce), +/* harmony export */ "restUrl": () => (/* binding */ restUrl), +/* harmony export */ "reviewSkippedDate": () => (/* binding */ reviewSkippedDate), +/* harmony export */ "theme": () => (/* binding */ theme), +/* harmony export */ "trackConsent": () => (/* binding */ trackConsent), +/* harmony export */ "wpVersion": () => (/* binding */ wpVersion) +/* harmony export */ }); +var _window$leadinConfig = window.leadinConfig, + accountName = _window$leadinConfig.accountName, + adminUrl = _window$leadinConfig.adminUrl, + activationTime = _window$leadinConfig.activationTime, + connectionStatus = _window$leadinConfig.connectionStatus, + deviceId = _window$leadinConfig.deviceId, + didDisconnect = _window$leadinConfig.didDisconnect, + env = _window$leadinConfig.env, + formsScript = _window$leadinConfig.formsScript, + meetingsScript = _window$leadinConfig.meetingsScript, + formsScriptPayload = _window$leadinConfig.formsScriptPayload, + hublet = _window$leadinConfig.hublet, + hubspotBaseUrl = _window$leadinConfig.hubspotBaseUrl, + hubspotNonce = _window$leadinConfig.hubspotNonce, + iframeUrl = _window$leadinConfig.iframeUrl, + impactLink = _window$leadinConfig.impactLink, + lastAuthorizeTime = _window$leadinConfig.lastAuthorizeTime, + lastDeauthorizeTime = _window$leadinConfig.lastDeauthorizeTime, + lastDisconnectTime = _window$leadinConfig.lastDisconnectTime, + leadinPluginVersion = _window$leadinConfig.leadinPluginVersion, + leadinQueryParams = _window$leadinConfig.leadinQueryParams, + locale = _window$leadinConfig.locale, + loginUrl = _window$leadinConfig.loginUrl, + phpVersion = _window$leadinConfig.phpVersion, + pluginPath = _window$leadinConfig.pluginPath, + plugins = _window$leadinConfig.plugins, + portalDomain = _window$leadinConfig.portalDomain, + portalEmail = _window$leadinConfig.portalEmail, + portalId = _window$leadinConfig.portalId, + redirectNonce = _window$leadinConfig.redirectNonce, + restNonce = _window$leadinConfig.restNonce, + restUrl = _window$leadinConfig.restUrl, + refreshToken = _window$leadinConfig.refreshToken, + reviewSkippedDate = _window$leadinConfig.reviewSkippedDate, + theme = _window$leadinConfig.theme, + trackConsent = _window$leadinConfig.trackConsent, + wpVersion = _window$leadinConfig.wpVersion, + contentEmbed = _window$leadinConfig.contentEmbed, + requiresContentEmbedScope = _window$leadinConfig.requiresContentEmbedScope, + refreshTokenError = _window$leadinConfig.refreshTokenError; + + +/***/ }), + +/***/ "./scripts/constants/selectors.ts": +/*!****************************************!*\ + !*** ./scripts/constants/selectors.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "domElements": () => (/* binding */ domElements) +/* harmony export */ }); +var domElements = { + iframe: '#leadin-iframe', + subMenu: '.toplevel_page_leadin > ul', + subMenuLinks: '.toplevel_page_leadin > ul a', + subMenuButtons: '.toplevel_page_leadin > ul > li', + deactivatePluginButton: '[data-slug="leadin"] .deactivate a', + deactivateFeedbackForm: 'form.leadin-deactivate-form', + deactivateFeedbackSubmit: 'button#leadin-feedback-submit', + deactivateFeedbackSkip: 'button#leadin-feedback-skip', + thickboxModalClose: '.leadin-modal-close', + thickboxModalWindow: 'div#TB_window.thickbox-loading', + thickboxModalContent: 'div#TB_ajaxContent.TB_modal', + reviewBannerContainer: '#leadin-review-banner', + reviewBannerLeaveReviewLink: 'a#leave-review-button', + reviewBannerDismissButton: 'a#dismiss-review-banner-button', + leadinIframeContainer: 'leadin-iframe-container', + leadinIframe: 'leadin-iframe', + leadinIframeFallbackContainer: 'leadin-iframe-fallback-container' +}; + +/***/ }), + +/***/ "./scripts/feedback/ThickBoxModal.ts": +/*!*******************************************!*\ + !*** ./scripts/feedback/ThickBoxModal.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ThickBoxModal) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _constants_selectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/selectors */ "./scripts/constants/selectors.ts"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + +var ThickBoxModal = /*#__PURE__*/function () { + function ThickBoxModal(openTriggerSelector, inlineContentId, windowCssClass, contentCssClass) { + _classCallCheck(this, ThickBoxModal); + + _defineProperty(this, "openTriggerSelector", void 0); + + _defineProperty(this, "inlineContentId", void 0); + + _defineProperty(this, "windowCssClass", void 0); + + _defineProperty(this, "contentCssClass", void 0); + + this.openTriggerSelector = openTriggerSelector; + this.inlineContentId = inlineContentId; + this.windowCssClass = windowCssClass; + this.contentCssClass = contentCssClass; + jquery__WEBPACK_IMPORTED_MODULE_0___default()(openTriggerSelector).on('click', this.init.bind(this)); + } + + _createClass(ThickBoxModal, [{ + key: "close", + value: function close() { + //@ts-expect-error global + window.tb_remove(); + } + }, { + key: "init", + value: function init(e) { + //@ts-expect-error global + window.tb_show('', "#TB_inline?inlineId=".concat(this.inlineContentId, "&modal=true")); // thickbox doesn't respect the width and height url parameters https://core.trac.wordpress.org/ticket/17249 + // We override thickboxes css with !important in the css + + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_1__.domElements.thickboxModalWindow).addClass(this.windowCssClass); // have to modify the css of the thickbox content container as well + + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_1__.domElements.thickboxModalContent).addClass(this.contentCssClass); // we unbind previous handlers because a thickbox modal is a single global object. + // Everytime it is re-opened, it still has old handlers bound + + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_1__.domElements.thickboxModalClose).off('click').on('click', this.close); + e.preventDefault(); + } + }]); + + return ThickBoxModal; +}(); + + + +/***/ }), + +/***/ "./scripts/feedback/feedbackFormApi.ts": +/*!*********************************************!*\ + !*** ./scripts/feedback/feedbackFormApi.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "submitFeedbackForm": () => (/* binding */ submitFeedbackForm) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); + +var portalId = '6275621'; +var formId = '0e8807f8-2ac3-4664-b742-44552bfa09e2'; +var formSubmissionUrl = "https://api.hsforms.com/submissions/v3/integration/submit/".concat(portalId, "/").concat(formId); +function submitFeedbackForm(formSelector) { + var formSubmissionPayload = { + fields: jquery__WEBPACK_IMPORTED_MODULE_0___default()(formSelector).serializeArray(), + skipValidation: true + }; + return new Promise(function (resolve, reject) { + jquery__WEBPACK_IMPORTED_MODULE_0___default().ajax({ + type: 'POST', + url: formSubmissionUrl, + contentType: 'application/json', + data: JSON.stringify(formSubmissionPayload), + success: resolve, + error: reject + }); + }); +} + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/core/CoreMessages.ts": +/*!****************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/core/CoreMessages.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* binding */ CoreMessages) +/* harmony export */ }); +var CoreMessages = { + HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED', + SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN', + ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME', + RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME', + SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE', + SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/forms/FormsMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FormMessages": () => (/* binding */ FormMessages) +/* harmony export */ }); +var FormMessages = { + CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/index.ts": +/*!****************************************************!*\ + !*** ./scripts/iframe/integratedMessages/index.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* reexport safe */ _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__.CoreMessages), +/* harmony export */ "FormMessages": () => (/* reexport safe */ _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__.FormMessages), +/* harmony export */ "LiveChatMessages": () => (/* reexport safe */ _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__.LiveChatMessages), +/* harmony export */ "PluginMessages": () => (/* reexport safe */ _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__.PluginMessages), +/* harmony export */ "ProxyMessages": () => (/* reexport safe */ _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages) +/* harmony export */ }); +/* harmony import */ var _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/CoreMessages */ "./scripts/iframe/integratedMessages/core/CoreMessages.ts"); +/* harmony import */ var _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./forms/FormsMessages */ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts"); +/* harmony import */ var _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./livechat/LiveChatMessages */ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts"); +/* harmony import */ var _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./plugin/PluginMessages */ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts"); +/* harmony import */ var _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./proxy/ProxyMessages */ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts"); + + + + + + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts": +/*!************************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LiveChatMessages": () => (/* binding */ LiveChatMessages) +/* harmony export */ }); +var LiveChatMessages = { + CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts": +/*!********************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/plugin/PluginMessages.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PluginMessages": () => (/* binding */ PluginMessages) +/* harmony export */ }); +var PluginMessages = { + PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION', + PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG', + TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT', + InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST', + InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE', + InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR', + InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST', + InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR', + BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST', + BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE', + BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR', + BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST', + BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR', + SkipReviewRequest: 'SKIP_REVIEW_REQUEST', + SkipReviewResponse: 'SKIP_REVIEW_RESPONSE', + SkipReviewError: 'SKIP_REVIEW_ERROR', + RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM', + ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST', + ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE', + ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR', + ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST', + ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE', + ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ProxyMessages": () => (/* binding */ ProxyMessages) +/* harmony export */ }); +var ProxyMessages = { + FetchForms: 'FETCH_FORMS', + FetchForm: 'FETCH_FORM', + CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE', + FetchAuth: 'FETCH_AUTH', + FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS', + FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION', + FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER', + ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR', + TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER', + TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE', + TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED', + TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER', + TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE', + TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER', + TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION', + TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED', + TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION' +}; + +/***/ }), + +/***/ "./scripts/lib/Raven.ts": +/*!******************************!*\ + !*** ./scripts/lib/Raven.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "configureRaven": () => (/* binding */ configureRaven), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); + + +function configureRaven() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.hubspotBaseUrl.indexOf('app.hubspot.com') === -1) { + return; + } + + raven_js__WEBPACK_IMPORTED_MODULE_0___default().config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', { + instrument: { + tryCatch: false + }, + release: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion + }).install(); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setTagsContext({ + v: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion, + php: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.phpVersion, + wordpress: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.wpVersion + }); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setExtraContext({ + hub: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.portalId, + plugins: Object.keys(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins).map(function (name) { + return "".concat(name, "#").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins[name]); + }).join(',') + }); +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((raven_js__WEBPACK_IMPORTED_MODULE_0___default())); + +/***/ }), + +/***/ "./scripts/utils/appUtils.ts": +/*!***********************************!*\ + !*** ./scripts/utils/appUtils.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "initApp": () => (/* binding */ initApp), +/* harmony export */ "initAppOnReady": () => (/* binding */ initAppOnReady) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); + + +function initApp(initFn) { + (0,_lib_Raven__WEBPACK_IMPORTED_MODULE_1__.configureRaven)(); + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].context(initFn); +} +function initAppOnReady(initFn) { + function main() { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(initFn); + } + + initApp(main); +} + +/***/ }), + +/***/ "./scripts/utils/backgroundAppUtils.ts": +/*!*********************************************!*\ + !*** ./scripts/utils/backgroundAppUtils.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "getOrCreateBackgroundApp": () => (/* binding */ getOrCreateBackgroundApp), +/* harmony export */ "initBackgroundApp": () => (/* binding */ initBackgroundApp) +/* harmony export */ }); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _appUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./appUtils */ "./scripts/utils/appUtils.ts"); + + +function initBackgroundApp(initFn) { + function main() { + if (Array.isArray(initFn)) { + initFn.forEach(function (callback) { + return callback(); + }); + } else { + initFn(); + } + } + + (0,_appUtils__WEBPACK_IMPORTED_MODULE_1__.initApp)(main); +} +var getOrCreateBackgroundApp = function getOrCreateBackgroundApp(refreshToken) { + if (window.LeadinBackgroundApp) { + return window.LeadinBackgroundApp; + } + + var _window = window, + IntegratedAppEmbedder = _window.IntegratedAppEmbedder, + IntegratedAppOptions = _window.IntegratedAppOptions; + var options = new IntegratedAppOptions().setLocale(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.locale).setDeviceId(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.deviceId).setRefreshToken(refreshToken); + var embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.portalId, _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.hubspotBaseUrl, function () {}).setOptions(options); + embedder.attachTo(document.body, false); + embedder.postStartAppMessage(); // lets the app know all all data has been passed to it + + window.LeadinBackgroundApp = embedder; + return window.LeadinBackgroundApp; +}; + +/***/ }), + +/***/ "./node_modules/raven-js/src/configError.js": +/*!**************************************************!*\ + !*** ./node_modules/raven-js/src/configError.js ***! + \**************************************************/ +/***/ ((module) => { + +function RavenConfigError(message) { + this.name = 'RavenConfigError'; + this.message = message; +} +RavenConfigError.prototype = new Error(); +RavenConfigError.prototype.constructor = RavenConfigError; + +module.exports = RavenConfigError; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/console.js": +/*!**********************************************!*\ + !*** ./node_modules/raven-js/src/console.js ***! + \**********************************************/ +/***/ ((module) => { + +var wrapMethod = function(console, level, callback) { + var originalConsoleLevel = console[level]; + var originalConsole = console; + + if (!(level in console)) { + return; + } + + var sentryLevel = level === 'warn' ? 'warning' : level; + + console[level] = function() { + var args = [].slice.call(arguments); + + var msg = '' + args.join(' '); + var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}}; + + if (level === 'assert') { + if (args[0] === false) { + // Default browsers message + msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert'); + data.extra.arguments = args.slice(1); + callback && callback(msg, data); + } + } else { + callback && callback(msg, data); + } + + // this fails for some browsers. :( + if (originalConsoleLevel) { + // IE9 doesn't allow calling apply on console functions directly + // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193 + Function.prototype.apply.call(originalConsoleLevel, originalConsole, args); + } + }; +}; + +module.exports = { + wrapMethod: wrapMethod +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/raven.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/raven.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/*global XDomainRequest:false */ + +var TraceKit = __webpack_require__(/*! ../vendor/TraceKit/tracekit */ "./node_modules/raven-js/vendor/TraceKit/tracekit.js"); +var stringify = __webpack_require__(/*! ../vendor/json-stringify-safe/stringify */ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js"); +var RavenConfigError = __webpack_require__(/*! ./configError */ "./node_modules/raven-js/src/configError.js"); + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/raven-js/src/utils.js"); +var isError = utils.isError; +var isObject = utils.isObject; +var isObject = utils.isObject; +var isErrorEvent = utils.isErrorEvent; +var isUndefined = utils.isUndefined; +var isFunction = utils.isFunction; +var isString = utils.isString; +var isEmptyObject = utils.isEmptyObject; +var each = utils.each; +var objectMerge = utils.objectMerge; +var truncate = utils.truncate; +var objectFrozen = utils.objectFrozen; +var hasKey = utils.hasKey; +var joinRegExp = utils.joinRegExp; +var urlencode = utils.urlencode; +var uuid4 = utils.uuid4; +var htmlTreeAsString = utils.htmlTreeAsString; +var isSameException = utils.isSameException; +var isSameStacktrace = utils.isSameStacktrace; +var parseUrl = utils.parseUrl; +var fill = utils.fill; + +var wrapConsoleMethod = (__webpack_require__(/*! ./console */ "./node_modules/raven-js/src/console.js").wrapMethod); + +var dsnKeys = 'source protocol user pass host port path'.split(' '), + dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/; + +function now() { + return +new Date(); +} + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _document = _window.document; +var _navigator = _window.navigator; + +function keepOriginalCallback(original, callback) { + return isFunction(callback) + ? function(data) { + return callback(data, original); + } + : callback; +} + +// First, check for JSON support +// If there is no JSON, we no-op the core features of Raven +// since JSON is required to encode the payload +function Raven() { + this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify); + // Raven can run in contexts where there's no document (react-native) + this._hasDocument = !isUndefined(_document); + this._hasNavigator = !isUndefined(_navigator); + this._lastCapturedException = null; + this._lastData = null; + this._lastEventId = null; + this._globalServer = null; + this._globalKey = null; + this._globalProject = null; + this._globalContext = {}; + this._globalOptions = { + logger: 'javascript', + ignoreErrors: [], + ignoreUrls: [], + whitelistUrls: [], + includePaths: [], + collectWindowErrors: true, + maxMessageLength: 0, + + // By default, truncates URL values to 250 chars + maxUrlLength: 250, + stackTraceLimit: 50, + autoBreadcrumbs: true, + instrument: true, + sampleRate: 1 + }; + this._ignoreOnError = 0; + this._isRavenInstalled = false; + this._originalErrorStackTraceLimit = Error.stackTraceLimit; + // capture references to window.console *and* all its methods first + // before the console plugin has a chance to monkey patch + this._originalConsole = _window.console || {}; + this._originalConsoleMethods = {}; + this._plugins = []; + this._startTime = now(); + this._wrappedBuiltIns = []; + this._breadcrumbs = []; + this._lastCapturedEvent = null; + this._keypressTimeout; + this._location = _window.location; + this._lastHref = this._location && this._location.href; + this._resetBackoff(); + + // eslint-disable-next-line guard-for-in + for (var method in this._originalConsole) { + this._originalConsoleMethods[method] = this._originalConsole[method]; + } +} + +/* + * The core Raven singleton + * + * @this {Raven} + */ + +Raven.prototype = { + // Hardcode version string so that raven source can be loaded directly via + // webpack (using a build step causes webpack #1617). Grunt verifies that + // this value matches package.json during build. + // See: https://github.com/getsentry/raven-js/issues/465 + VERSION: '3.19.1', + + debug: false, + + TraceKit: TraceKit, // alias to TraceKit + + /* + * Configure Raven with a DSN and extra options + * + * @param {string} dsn The public Sentry DSN + * @param {object} options Set of global options [optional] + * @return {Raven} + */ + config: function(dsn, options) { + var self = this; + + if (self._globalServer) { + this._logDebug('error', 'Error: Raven has already been configured'); + return self; + } + if (!dsn) return self; + + var globalOptions = self._globalOptions; + + // merge in options + if (options) { + each(options, function(key, value) { + // tags and extra are special and need to be put into context + if (key === 'tags' || key === 'extra' || key === 'user') { + self._globalContext[key] = value; + } else { + globalOptions[key] = value; + } + }); + } + + self.setDSN(dsn); + + // "Script error." is hard coded into browsers for errors that it can't read. + // this is the result of a script being pulled in from an external domain and CORS. + globalOptions.ignoreErrors.push(/^Script error\.?$/); + globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/); + + // join regexp rules into one big rule + globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors); + globalOptions.ignoreUrls = globalOptions.ignoreUrls.length + ? joinRegExp(globalOptions.ignoreUrls) + : false; + globalOptions.whitelistUrls = globalOptions.whitelistUrls.length + ? joinRegExp(globalOptions.whitelistUrls) + : false; + globalOptions.includePaths = joinRegExp(globalOptions.includePaths); + globalOptions.maxBreadcrumbs = Math.max( + 0, + Math.min(globalOptions.maxBreadcrumbs || 100, 100) + ); // default and hard limit is 100 + + var autoBreadcrumbDefaults = { + xhr: true, + console: true, + dom: true, + location: true + }; + + var autoBreadcrumbs = globalOptions.autoBreadcrumbs; + if ({}.toString.call(autoBreadcrumbs) === '[object Object]') { + autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs); + } else if (autoBreadcrumbs !== false) { + autoBreadcrumbs = autoBreadcrumbDefaults; + } + globalOptions.autoBreadcrumbs = autoBreadcrumbs; + + var instrumentDefaults = { + tryCatch: true + }; + + var instrument = globalOptions.instrument; + if ({}.toString.call(instrument) === '[object Object]') { + instrument = objectMerge(instrumentDefaults, instrument); + } else if (instrument !== false) { + instrument = instrumentDefaults; + } + globalOptions.instrument = instrument; + + TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors; + + // return for chaining + return self; + }, + + /* + * Installs a global window.onerror error handler + * to capture and report uncaught exceptions. + * At this point, install() is required to be called due + * to the way TraceKit is set up. + * + * @return {Raven} + */ + install: function() { + var self = this; + if (self.isSetup() && !self._isRavenInstalled) { + TraceKit.report.subscribe(function() { + self._handleOnErrorStackInfo.apply(self, arguments); + }); + if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) { + self._instrumentTryCatch(); + } + + if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs(); + + // Install all of the plugins + self._drainPlugins(); + + self._isRavenInstalled = true; + } + + Error.stackTraceLimit = self._globalOptions.stackTraceLimit; + return this; + }, + + /* + * Set the DSN (can be called multiple time unlike config) + * + * @param {string} dsn The public Sentry DSN + */ + setDSN: function(dsn) { + var self = this, + uri = self._parseDSN(dsn), + lastSlash = uri.path.lastIndexOf('/'), + path = uri.path.substr(1, lastSlash); + + self._dsn = dsn; + self._globalKey = uri.user; + self._globalSecret = uri.pass && uri.pass.substr(1); + self._globalProject = uri.path.substr(lastSlash + 1); + + self._globalServer = self._getGlobalServer(uri); + + self._globalEndpoint = + self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/'; + + // Reset backoff state since we may be pointing at a + // new project/server + this._resetBackoff(); + }, + + /* + * Wrap code within a context so Raven can capture errors + * reliably across domains that is executed immediately. + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The callback to be immediately executed within the context + * @param {array} args An array of arguments to be called with the callback [optional] + */ + context: function(options, func, args) { + if (isFunction(options)) { + args = func || []; + func = options; + options = undefined; + } + + return this.wrap(options, func).apply(this, args); + }, + + /* + * Wrap code within a context and returns back a new function to be executed + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The function to be wrapped in a new context + * @param {function} func A function to call before the try/catch wrapper [optional, private] + * @return {function} The newly wrapped functions with a context + */ + wrap: function(options, func, _before) { + var self = this; + // 1 argument has been passed, and it's not a function + // so just return it + if (isUndefined(func) && !isFunction(options)) { + return options; + } + + // options is optional + if (isFunction(options)) { + func = options; + options = undefined; + } + + // At this point, we've passed along 2 arguments, and the second one + // is not a function either, so we'll just return the second argument. + if (!isFunction(func)) { + return func; + } + + // We don't wanna wrap it twice! + try { + if (func.__raven__) { + return func; + } + + // If this has already been wrapped in the past, return that + if (func.__raven_wrapper__) { + return func.__raven_wrapper__; + } + } catch (e) { + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + // Bail on wrapping and return the function as-is (defers to window.onerror). + return func; + } + + function wrapped() { + var args = [], + i = arguments.length, + deep = !options || (options && options.deep !== false); + + if (_before && isFunction(_before)) { + _before.apply(this, arguments); + } + + // Recursively wrap all of a function's arguments that are + // functions themselves. + while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i]; + + try { + // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means Raven caught an error invoking your application code. This is + // expected behavior and NOT indicative of a bug with Raven.js. + return func.apply(this, args); + } catch (e) { + self._ignoreNextOnError(); + self.captureException(e, options); + throw e; + } + } + + // copy over properties of the old function + for (var property in func) { + if (hasKey(func, property)) { + wrapped[property] = func[property]; + } + } + wrapped.prototype = func.prototype; + + func.__raven_wrapper__ = wrapped; + // Signal that this function has been wrapped already + // for both debugging and to prevent it to being wrapped twice + wrapped.__raven__ = true; + wrapped.__inner__ = func; + + return wrapped; + }, + + /* + * Uninstalls the global error handler. + * + * @return {Raven} + */ + uninstall: function() { + TraceKit.report.uninstall(); + + this._restoreBuiltIns(); + + Error.stackTraceLimit = this._originalErrorStackTraceLimit; + this._isRavenInstalled = false; + + return this; + }, + + /* + * Manually capture an exception and send it over to Sentry + * + * @param {error} ex An exception to be logged + * @param {object} options A specific set of options for this error [optional] + * @return {Raven} + */ + captureException: function(ex, options) { + // Cases for sending ex as a message, rather than an exception + var isNotError = !isError(ex); + var isNotErrorEvent = !isErrorEvent(ex); + var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error; + + if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) { + return this.captureMessage( + ex, + objectMerge( + { + trimHeadFrames: 1, + stacktrace: true // if we fall back to captureMessage, default to attempting a new trace + }, + options + ) + ); + } + + // Get actual Error from ErrorEvent + if (isErrorEvent(ex)) ex = ex.error; + + // Store the raw exception object for potential debugging and introspection + this._lastCapturedException = ex; + + // TraceKit.report will re-raise any exception passed to it, + // which means you have to wrap it in try/catch. Instead, we + // can wrap it here and only re-raise if TraceKit.report + // raises an exception different from the one we asked to + // report on. + try { + var stack = TraceKit.computeStackTrace(ex); + this._handleStackInfo(stack, options); + } catch (ex1) { + if (ex !== ex1) { + throw ex1; + } + } + + return this; + }, + + /* + * Manually send a message to Sentry + * + * @param {string} msg A plain message to be captured in Sentry + * @param {object} options A specific set of options for this message [optional] + * @return {Raven} + */ + captureMessage: function(msg, options) { + // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an + // early call; we'll error on the side of logging anything called before configuration since it's + // probably something you should see: + if ( + !!this._globalOptions.ignoreErrors.test && + this._globalOptions.ignoreErrors.test(msg) + ) { + return; + } + + options = options || {}; + + var data = objectMerge( + { + message: msg + '' // Make sure it's actually a string + }, + options + ); + + var ex; + // Generate a "synthetic" stack trace from this point. + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative + // of a bug with Raven.js. Sentry generates synthetic traces either by configuration, + // or if it catches a thrown object without a "stack" property. + try { + throw new Error(msg); + } catch (ex1) { + ex = ex1; + } + + // null exception name so `Error` isn't prefixed to msg + ex.name = null; + var stack = TraceKit.computeStackTrace(ex); + + // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1] + var initialCall = stack.stack[1]; + + var fileurl = (initialCall && initialCall.url) || ''; + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + if (this._globalOptions.stacktrace || (options && options.stacktrace)) { + options = objectMerge( + { + // fingerprint on msg, not stack trace (legacy behavior, could be + // revisited) + fingerprint: msg, + // since we know this is a synthetic trace, the top N-most frames + // MUST be from Raven.js, so mark them as in_app later by setting + // trimHeadFrames + trimHeadFrames: (options.trimHeadFrames || 0) + 1 + }, + options + ); + + var frames = this._prepareFrames(stack, options); + data.stacktrace = { + // Sentry expects frames oldest to newest + frames: frames.reverse() + }; + } + + // Fire away! + this._send(data); + + return this; + }, + + captureBreadcrumb: function(obj) { + var crumb = objectMerge( + { + timestamp: now() / 1000 + }, + obj + ); + + if (isFunction(this._globalOptions.breadcrumbCallback)) { + var result = this._globalOptions.breadcrumbCallback(crumb); + + if (isObject(result) && !isEmptyObject(result)) { + crumb = result; + } else if (result === false) { + return this; + } + } + + this._breadcrumbs.push(crumb); + if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) { + this._breadcrumbs.shift(); + } + return this; + }, + + addPlugin: function(plugin /*arg1, arg2, ... argN*/) { + var pluginArgs = [].slice.call(arguments, 1); + + this._plugins.push([plugin, pluginArgs]); + if (this._isRavenInstalled) { + this._drainPlugins(); + } + + return this; + }, + + /* + * Set/clear a user to be sent along with the payload. + * + * @param {object} user An object representing user data [optional] + * @return {Raven} + */ + setUserContext: function(user) { + // Intentionally do not merge here since that's an unexpected behavior. + this._globalContext.user = user; + + return this; + }, + + /* + * Merge extra attributes to be sent along with the payload. + * + * @param {object} extra An object representing extra data [optional] + * @return {Raven} + */ + setExtraContext: function(extra) { + this._mergeContext('extra', extra); + + return this; + }, + + /* + * Merge tags to be sent along with the payload. + * + * @param {object} tags An object representing tags [optional] + * @return {Raven} + */ + setTagsContext: function(tags) { + this._mergeContext('tags', tags); + + return this; + }, + + /* + * Clear all of the context. + * + * @return {Raven} + */ + clearContext: function() { + this._globalContext = {}; + + return this; + }, + + /* + * Get a copy of the current context. This cannot be mutated. + * + * @return {object} copy of context + */ + getContext: function() { + // lol javascript + return JSON.parse(stringify(this._globalContext)); + }, + + /* + * Set environment of application + * + * @param {string} environment Typically something like 'production'. + * @return {Raven} + */ + setEnvironment: function(environment) { + this._globalOptions.environment = environment; + + return this; + }, + + /* + * Set release version of application + * + * @param {string} release Typically something like a git SHA to identify version + * @return {Raven} + */ + setRelease: function(release) { + this._globalOptions.release = release; + + return this; + }, + + /* + * Set the dataCallback option + * + * @param {function} callback The callback to run which allows the + * data blob to be mutated before sending + * @return {Raven} + */ + setDataCallback: function(callback) { + var original = this._globalOptions.dataCallback; + this._globalOptions.dataCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the breadcrumbCallback option + * + * @param {function} callback The callback to run which allows filtering + * or mutating breadcrumbs + * @return {Raven} + */ + setBreadcrumbCallback: function(callback) { + var original = this._globalOptions.breadcrumbCallback; + this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the shouldSendCallback option + * + * @param {function} callback The callback to run which allows + * introspecting the blob before sending + * @return {Raven} + */ + setShouldSendCallback: function(callback) { + var original = this._globalOptions.shouldSendCallback; + this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback); + return this; + }, + + /** + * Override the default HTTP transport mechanism that transmits data + * to the Sentry server. + * + * @param {function} transport Function invoked instead of the default + * `makeRequest` handler. + * + * @return {Raven} + */ + setTransport: function(transport) { + this._globalOptions.transport = transport; + + return this; + }, + + /* + * Get the latest raw exception that was captured by Raven. + * + * @return {error} + */ + lastException: function() { + return this._lastCapturedException; + }, + + /* + * Get the last event id + * + * @return {string} + */ + lastEventId: function() { + return this._lastEventId; + }, + + /* + * Determine if Raven is setup and ready to go. + * + * @return {boolean} + */ + isSetup: function() { + if (!this._hasJSON) return false; // needs JSON support + if (!this._globalServer) { + if (!this.ravenNotConfiguredError) { + this.ravenNotConfiguredError = true; + this._logDebug('error', 'Error: Raven has not been configured.'); + } + return false; + } + return true; + }, + + afterLoad: function() { + // TODO: remove window dependence? + + // Attempt to initialize Raven on load + var RavenConfig = _window.RavenConfig; + if (RavenConfig) { + this.config(RavenConfig.dsn, RavenConfig.config).install(); + } + }, + + showReportDialog: function(options) { + if ( + !_document // doesn't work without a document (React native) + ) + return; + + options = options || {}; + + var lastEventId = options.eventId || this.lastEventId(); + if (!lastEventId) { + throw new RavenConfigError('Missing eventId'); + } + + var dsn = options.dsn || this._dsn; + if (!dsn) { + throw new RavenConfigError('Missing DSN'); + } + + var encode = encodeURIComponent; + var qs = ''; + qs += '?eventId=' + encode(lastEventId); + qs += '&dsn=' + encode(dsn); + + var user = options.user || this._globalContext.user; + if (user) { + if (user.name) qs += '&name=' + encode(user.name); + if (user.email) qs += '&email=' + encode(user.email); + } + + var globalServer = this._getGlobalServer(this._parseDSN(dsn)); + + var script = _document.createElement('script'); + script.async = true; + script.src = globalServer + '/api/embed/error-page/' + qs; + (_document.head || _document.body).appendChild(script); + }, + + /**** Private functions ****/ + _ignoreNextOnError: function() { + var self = this; + this._ignoreOnError += 1; + setTimeout(function() { + // onerror should trigger before setTimeout + self._ignoreOnError -= 1; + }); + }, + + _triggerEvent: function(eventType, options) { + // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it + var evt, key; + + if (!this._hasDocument) return; + + options = options || {}; + + eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1); + + if (_document.createEvent) { + evt = _document.createEvent('HTMLEvents'); + evt.initEvent(eventType, true, true); + } else { + evt = _document.createEventObject(); + evt.eventType = eventType; + } + + for (key in options) + if (hasKey(options, key)) { + evt[key] = options[key]; + } + + if (_document.createEvent) { + // IE9 if standards + _document.dispatchEvent(evt); + } else { + // IE8 regardless of Quirks or Standards + // IE9 if quirks + try { + _document.fireEvent('on' + evt.eventType.toLowerCase(), evt); + } catch (e) { + // Do nothing + } + } + }, + + /** + * Wraps addEventListener to capture UI breadcrumbs + * @param evtName the event name (e.g. "click") + * @returns {Function} + * @private + */ + _breadcrumbEventHandler: function(evtName) { + var self = this; + return function(evt) { + // reset keypress timeout; e.g. triggering a 'click' after + // a 'keypress' will reset the keypress debounce so that a new + // set of keypresses can be recorded + self._keypressTimeout = null; + + // It's possible this handler might trigger multiple times for the same + // event (e.g. event propagation through node ancestors). Ignore if we've + // already captured the event. + if (self._lastCapturedEvent === evt) return; + + self._lastCapturedEvent = evt; + + // try/catch both: + // - accessing evt.target (see getsentry/raven-js#838, #768) + // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly + // can throw an exception in some circumstances. + var target; + try { + target = htmlTreeAsString(evt.target); + } catch (e) { + target = ''; + } + + self.captureBreadcrumb({ + category: 'ui.' + evtName, // e.g. ui.click, ui.input + message: target + }); + }; + }, + + /** + * Wraps addEventListener to capture keypress UI events + * @returns {Function} + * @private + */ + _keypressEventHandler: function() { + var self = this, + debounceDuration = 1000; // milliseconds + + // TODO: if somehow user switches keypress target before + // debounce timeout is triggered, we will only capture + // a single breadcrumb from the FIRST target (acceptable?) + return function(evt) { + var target; + try { + target = evt.target; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + var tagName = target && target.tagName; + + // only consider keypress events on actual input elements + // this will disregard keypresses targeting body (e.g. tabbing + // through elements, hotkeys, etc) + if ( + !tagName || + (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) + ) + return; + + // record first keypress in a series, but ignore subsequent + // keypresses until debounce clears + var timeout = self._keypressTimeout; + if (!timeout) { + self._breadcrumbEventHandler('input')(evt); + } + clearTimeout(timeout); + self._keypressTimeout = setTimeout(function() { + self._keypressTimeout = null; + }, debounceDuration); + }; + }, + + /** + * Captures a breadcrumb of type "navigation", normalizing input URLs + * @param to the originating URL + * @param from the target URL + * @private + */ + _captureUrlChange: function(from, to) { + var parsedLoc = parseUrl(this._location.href); + var parsedTo = parseUrl(to); + var parsedFrom = parseUrl(from); + + // because onpopstate only tells you the "new" (to) value of location.href, and + // not the previous (from) value, we need to track the value of the current URL + // state ourselves + this._lastHref = to; + + // Use only the path component of the URL if the URL matches the current + // document (almost all the time when using pushState) + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) + to = parsedTo.relative; + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) + from = parsedFrom.relative; + + this.captureBreadcrumb({ + category: 'navigation', + data: { + to: to, + from: from + } + }); + }, + + /** + * Wrap timer functions and event targets to catch errors and provide + * better metadata. + */ + _instrumentTryCatch: function() { + var self = this; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapTimeFn(orig) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + var originalCallback = args[0]; + if (isFunction(originalCallback)) { + args[0] = self.wrap(originalCallback); + } + + // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it + // also supports only two arguments and doesn't care what this is, so we + // can just call the original function directly. + if (orig.apply) { + return orig.apply(this, args); + } else { + return orig(args[0], args[1]); + } + }; + } + + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + function wrapEventTarget(global) { + var proto = _window[global] && _window[global].prototype; + if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) { + fill( + proto, + 'addEventListener', + function(orig) { + return function(evtName, fn, capture, secure) { + // preserve arity + try { + if (fn && fn.handleEvent) { + fn.handleEvent = self.wrap(fn.handleEvent); + } + } catch (err) { + // can sometimes get 'Permission denied to access property "handle Event' + } + + // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs` + // so that we don't have more than one wrapper function + var before, clickHandler, keypressHandler; + + if ( + autoBreadcrumbs && + autoBreadcrumbs.dom && + (global === 'EventTarget' || global === 'Node') + ) { + // NOTE: generating multiple handlers per addEventListener invocation, should + // revisit and verify we can just use one (almost certainly) + clickHandler = self._breadcrumbEventHandler('click'); + keypressHandler = self._keypressEventHandler(); + before = function(evt) { + // need to intercept every DOM event in `before` argument, in case that + // same wrapped method is re-used for different events (e.g. mousemove THEN click) + // see #724 + if (!evt) return; + + var eventType; + try { + eventType = evt.type; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + if (eventType === 'click') return clickHandler(evt); + else if (eventType === 'keypress') return keypressHandler(evt); + }; + } + return orig.call( + this, + evtName, + self.wrap(fn, undefined, before), + capture, + secure + ); + }; + }, + wrappedBuiltIns + ); + fill( + proto, + 'removeEventListener', + function(orig) { + return function(evt, fn, capture, secure) { + try { + fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn); + } catch (e) { + // ignore, accessing __raven_wrapper__ will throw in some Selenium environments + } + return orig.call(this, evt, fn, capture, secure); + }; + }, + wrappedBuiltIns + ); + } + } + + fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns); + fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns); + if (_window.requestAnimationFrame) { + fill( + _window, + 'requestAnimationFrame', + function(orig) { + return function(cb) { + return orig(self.wrap(cb)); + }; + }, + wrappedBuiltIns + ); + } + + // event targets borrowed from bugsnag-js: + // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666 + var eventTargets = [ + 'EventTarget', + 'Window', + 'Node', + 'ApplicationCache', + 'AudioTrackList', + 'ChannelMergerNode', + 'CryptoOperation', + 'EventSource', + 'FileReader', + 'HTMLUnknownElement', + 'IDBDatabase', + 'IDBRequest', + 'IDBTransaction', + 'KeyOperation', + 'MediaController', + 'MessagePort', + 'ModalWindow', + 'Notification', + 'SVGElementInstance', + 'Screen', + 'TextTrack', + 'TextTrackCue', + 'TextTrackList', + 'WebSocket', + 'WebSocketWorker', + 'Worker', + 'XMLHttpRequest', + 'XMLHttpRequestEventTarget', + 'XMLHttpRequestUpload' + ]; + for (var i = 0; i < eventTargets.length; i++) { + wrapEventTarget(eventTargets[i]); + } + }, + + /** + * Instrument browser built-ins w/ breadcrumb capturing + * - XMLHttpRequests + * - DOM interactions (click/typing) + * - window.location changes + * - console + * + * Can be disabled or individually configured via the `autoBreadcrumbs` config option + */ + _instrumentBreadcrumbs: function() { + var self = this; + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapProp(prop, xhr) { + if (prop in xhr && isFunction(xhr[prop])) { + fill(xhr, prop, function(orig) { + return self.wrap(orig); + }); // intentionally don't track filled methods on XHR instances + } + } + + if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) { + var xhrproto = XMLHttpRequest.prototype; + fill( + xhrproto, + 'open', + function(origOpen) { + return function(method, url) { + // preserve arity + + // if Sentry key appears in URL, don't capture + if (isString(url) && url.indexOf(self._globalKey) === -1) { + this.__raven_xhr = { + method: method, + url: url, + status_code: null + }; + } + + return origOpen.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + + fill( + xhrproto, + 'send', + function(origSend) { + return function(data) { + // preserve arity + var xhr = this; + + function onreadystatechangeHandler() { + if (xhr.__raven_xhr && xhr.readyState === 4) { + try { + // touching statusCode in some platforms throws + // an exception + xhr.__raven_xhr.status_code = xhr.status; + } catch (e) { + /* do nothing */ + } + + self.captureBreadcrumb({ + type: 'http', + category: 'xhr', + data: xhr.__raven_xhr + }); + } + } + + var props = ['onload', 'onerror', 'onprogress']; + for (var j = 0; j < props.length; j++) { + wrapProp(props[j], xhr); + } + + if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) { + fill( + xhr, + 'onreadystatechange', + function(orig) { + return self.wrap(orig, undefined, onreadystatechangeHandler); + } /* intentionally don't track this instrumentation */ + ); + } else { + // if onreadystatechange wasn't actually set by the page on this xhr, we + // are free to set our own and capture the breadcrumb + xhr.onreadystatechange = onreadystatechangeHandler; + } + + return origSend.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + } + + if (autoBreadcrumbs.xhr && 'fetch' in _window) { + fill( + _window, + 'fetch', + function(origFetch) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + var fetchInput = args[0]; + var method = 'GET'; + var url; + + if (typeof fetchInput === 'string') { + url = fetchInput; + } else if ('Request' in _window && fetchInput instanceof _window.Request) { + url = fetchInput.url; + if (fetchInput.method) { + method = fetchInput.method; + } + } else { + url = '' + fetchInput; + } + + if (args[1] && args[1].method) { + method = args[1].method; + } + + var fetchData = { + method: method, + url: url, + status_code: null + }; + + self.captureBreadcrumb({ + type: 'http', + category: 'fetch', + data: fetchData + }); + + return origFetch.apply(this, args).then(function(response) { + fetchData.status_code = response.status; + + return response; + }); + }; + }, + wrappedBuiltIns + ); + } + + // Capture breadcrumbs from any click that is unhandled / bubbled up all the way + // to the document. Do this before we instrument addEventListener. + if (autoBreadcrumbs.dom && this._hasDocument) { + if (_document.addEventListener) { + _document.addEventListener('click', self._breadcrumbEventHandler('click'), false); + _document.addEventListener('keypress', self._keypressEventHandler(), false); + } else { + // IE8 Compatibility + _document.attachEvent('onclick', self._breadcrumbEventHandler('click')); + _document.attachEvent('onkeypress', self._keypressEventHandler()); + } + } + + // record navigation (URL) changes + // NOTE: in Chrome App environment, touching history.pushState, *even inside + // a try/catch block*, will cause Chrome to output an error to console.error + // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var chrome = _window.chrome; + var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + var hasPushAndReplaceState = + !isChromePackagedApp && + _window.history && + history.pushState && + history.replaceState; + if (autoBreadcrumbs.location && hasPushAndReplaceState) { + // TODO: remove onpopstate handler on uninstall() + var oldOnPopState = _window.onpopstate; + _window.onpopstate = function() { + var currentHref = self._location.href; + self._captureUrlChange(self._lastHref, currentHref); + + if (oldOnPopState) { + return oldOnPopState.apply(this, arguments); + } + }; + + var historyReplacementFunction = function(origHistFunction) { + // note history.pushState.length is 0; intentionally not declaring + // params to preserve 0 arity + return function(/* state, title, url */) { + var url = arguments.length > 2 ? arguments[2] : undefined; + + // url argument is optional + if (url) { + // coerce to string (this is what pushState does) + self._captureUrlChange(self._lastHref, url + ''); + } + + return origHistFunction.apply(this, arguments); + }; + }; + + fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns); + fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns); + } + + if (autoBreadcrumbs.console && 'console' in _window && console.log) { + // console + var consoleMethodCallback = function(msg, data) { + self.captureBreadcrumb({ + message: msg, + level: data.level, + category: 'console' + }); + }; + + each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) { + wrapConsoleMethod(console, level, consoleMethodCallback); + }); + } + }, + + _restoreBuiltIns: function() { + // restore any wrapped builtins + var builtin; + while (this._wrappedBuiltIns.length) { + builtin = this._wrappedBuiltIns.shift(); + + var obj = builtin[0], + name = builtin[1], + orig = builtin[2]; + + obj[name] = orig; + } + }, + + _drainPlugins: function() { + var self = this; + + // FIX ME TODO + each(this._plugins, function(_, plugin) { + var installer = plugin[0]; + var args = plugin[1]; + installer.apply(self, [self].concat(args)); + }); + }, + + _parseDSN: function(str) { + var m = dsnPattern.exec(str), + dsn = {}, + i = 7; + + try { + while (i--) dsn[dsnKeys[i]] = m[i] || ''; + } catch (e) { + throw new RavenConfigError('Invalid DSN: ' + str); + } + + if (dsn.pass && !this._globalOptions.allowSecretKey) { + throw new RavenConfigError( + 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key' + ); + } + + return dsn; + }, + + _getGlobalServer: function(uri) { + // assemble the endpoint from the uri pieces + var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : ''); + + if (uri.protocol) { + globalServer = uri.protocol + ':' + globalServer; + } + return globalServer; + }, + + _handleOnErrorStackInfo: function() { + // if we are intentionally ignoring errors via onerror, bail out + if (!this._ignoreOnError) { + this._handleStackInfo.apply(this, arguments); + } + }, + + _handleStackInfo: function(stackInfo, options) { + var frames = this._prepareFrames(stackInfo, options); + + this._triggerEvent('handle', { + stackInfo: stackInfo, + options: options + }); + + this._processException( + stackInfo.name, + stackInfo.message, + stackInfo.url, + stackInfo.lineno, + frames, + options + ); + }, + + _prepareFrames: function(stackInfo, options) { + var self = this; + var frames = []; + if (stackInfo.stack && stackInfo.stack.length) { + each(stackInfo.stack, function(i, stack) { + var frame = self._normalizeFrame(stack, stackInfo.url); + if (frame) { + frames.push(frame); + } + }); + + // e.g. frames captured via captureMessage throw + if (options && options.trimHeadFrames) { + for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) { + frames[j].in_app = false; + } + } + } + frames = frames.slice(0, this._globalOptions.stackTraceLimit); + return frames; + }, + + _normalizeFrame: function(frame, stackInfoUrl) { + // normalize the frames data + var normalized = { + filename: frame.url, + lineno: frame.line, + colno: frame.column, + function: frame.func || '?' + }; + + // Case when we don't have any information about the error + // E.g. throwing a string or raw object, instead of an `Error` in Firefox + // Generating synthetic error doesn't add any value here + // + // We should probably somehow let a user know that they should fix their code + if (!frame.url) { + normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler + } + + normalized.in_app = !// determine if an exception came from outside of our app + // first we check the global includePaths list. + ( + (!!this._globalOptions.includePaths.test && + !this._globalOptions.includePaths.test(normalized.filename)) || + // Now we check for fun, if the function name is Raven or TraceKit + /(Raven|TraceKit)\./.test(normalized['function']) || + // finally, we do a last ditch effort and check for raven.min.js + /raven\.(min\.)?js$/.test(normalized.filename) + ); + + return normalized; + }, + + _processException: function(type, message, fileurl, lineno, frames, options) { + var prefixedMessage = (type ? type + ': ' : '') + (message || ''); + if ( + !!this._globalOptions.ignoreErrors.test && + (this._globalOptions.ignoreErrors.test(message) || + this._globalOptions.ignoreErrors.test(prefixedMessage)) + ) { + return; + } + + var stacktrace; + + if (frames && frames.length) { + fileurl = frames[0].filename || fileurl; + // Sentry expects frames oldest to newest + // and JS sends them as newest to oldest + frames.reverse(); + stacktrace = {frames: frames}; + } else if (fileurl) { + stacktrace = { + frames: [ + { + filename: fileurl, + lineno: lineno, + in_app: true + } + ] + }; + } + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + var data = objectMerge( + { + // sentry.interfaces.Exception + exception: { + values: [ + { + type: type, + value: message, + stacktrace: stacktrace + } + ] + }, + culprit: fileurl + }, + options + ); + + // Fire away! + this._send(data); + }, + + _trimPacket: function(data) { + // For now, we only want to truncate the two different messages + // but this could/should be expanded to just trim everything + var max = this._globalOptions.maxMessageLength; + if (data.message) { + data.message = truncate(data.message, max); + } + if (data.exception) { + var exception = data.exception.values[0]; + exception.value = truncate(exception.value, max); + } + + var request = data.request; + if (request) { + if (request.url) { + request.url = truncate(request.url, this._globalOptions.maxUrlLength); + } + if (request.Referer) { + request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength); + } + } + + if (data.breadcrumbs && data.breadcrumbs.values) + this._trimBreadcrumbs(data.breadcrumbs); + + return data; + }, + + /** + * Truncate breadcrumb values (right now just URLs) + */ + _trimBreadcrumbs: function(breadcrumbs) { + // known breadcrumb properties with urls + // TODO: also consider arbitrary prop values that start with (https?)?:// + var urlProps = ['to', 'from', 'url'], + urlProp, + crumb, + data; + + for (var i = 0; i < breadcrumbs.values.length; ++i) { + crumb = breadcrumbs.values[i]; + if ( + !crumb.hasOwnProperty('data') || + !isObject(crumb.data) || + objectFrozen(crumb.data) + ) + continue; + + data = objectMerge({}, crumb.data); + for (var j = 0; j < urlProps.length; ++j) { + urlProp = urlProps[j]; + if (data.hasOwnProperty(urlProp) && data[urlProp]) { + data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength); + } + } + breadcrumbs.values[i].data = data; + } + }, + + _getHttpData: function() { + if (!this._hasNavigator && !this._hasDocument) return; + var httpData = {}; + + if (this._hasNavigator && _navigator.userAgent) { + httpData.headers = { + 'User-Agent': navigator.userAgent + }; + } + + if (this._hasDocument) { + if (_document.location && _document.location.href) { + httpData.url = _document.location.href; + } + if (_document.referrer) { + if (!httpData.headers) httpData.headers = {}; + httpData.headers.Referer = _document.referrer; + } + } + + return httpData; + }, + + _resetBackoff: function() { + this._backoffDuration = 0; + this._backoffStart = null; + }, + + _shouldBackoff: function() { + return this._backoffDuration && now() - this._backoffStart < this._backoffDuration; + }, + + /** + * Returns true if the in-process data payload matches the signature + * of the previously-sent data + * + * NOTE: This has to be done at this level because TraceKit can generate + * data from window.onerror WITHOUT an exception object (IE8, IE9, + * other old browsers). This can take the form of an "exception" + * data object with a single frame (derived from the onerror args). + */ + _isRepeatData: function(current) { + var last = this._lastData; + + if ( + !last || + current.message !== last.message || // defined for captureMessage + current.culprit !== last.culprit // defined for captureException/onerror + ) + return false; + + // Stacktrace interface (i.e. from captureMessage) + if (current.stacktrace || last.stacktrace) { + return isSameStacktrace(current.stacktrace, last.stacktrace); + } else if (current.exception || last.exception) { + // Exception interface (i.e. from captureException/onerror) + return isSameException(current.exception, last.exception); + } + + return true; + }, + + _setBackoffState: function(request) { + // If we are already in a backoff state, don't change anything + if (this._shouldBackoff()) { + return; + } + + var status = request.status; + + // 400 - project_id doesn't exist or some other fatal + // 401 - invalid/revoked dsn + // 429 - too many requests + if (!(status === 400 || status === 401 || status === 429)) return; + + var retry; + try { + // If Retry-After is not in Access-Control-Expose-Headers, most + // browsers will throw an exception trying to access it + retry = request.getResponseHeader('Retry-After'); + retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds + } catch (e) { + /* eslint no-empty:0 */ + } + + this._backoffDuration = retry + ? // If Sentry server returned a Retry-After value, use it + retry + : // Otherwise, double the last backoff duration (starts at 1 sec) + this._backoffDuration * 2 || 1000; + + this._backoffStart = now(); + }, + + _send: function(data) { + var globalOptions = this._globalOptions; + + var baseData = { + project: this._globalProject, + logger: globalOptions.logger, + platform: 'javascript' + }, + httpData = this._getHttpData(); + + if (httpData) { + baseData.request = httpData; + } + + // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload + if (data.trimHeadFrames) delete data.trimHeadFrames; + + data = objectMerge(baseData, data); + + // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge + data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags); + data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra); + + // Send along our own collected metadata with extra + data.extra['session:duration'] = now() - this._startTime; + + if (this._breadcrumbs && this._breadcrumbs.length > 0) { + // intentionally make shallow copy so that additions + // to breadcrumbs aren't accidentally sent in this request + data.breadcrumbs = { + values: [].slice.call(this._breadcrumbs, 0) + }; + } + + // If there are no tags/extra, strip the key from the payload alltogther. + if (isEmptyObject(data.tags)) delete data.tags; + + if (this._globalContext.user) { + // sentry.interfaces.User + data.user = this._globalContext.user; + } + + // Include the environment if it's defined in globalOptions + if (globalOptions.environment) data.environment = globalOptions.environment; + + // Include the release if it's defined in globalOptions + if (globalOptions.release) data.release = globalOptions.release; + + // Include server_name if it's defined in globalOptions + if (globalOptions.serverName) data.server_name = globalOptions.serverName; + + if (isFunction(globalOptions.dataCallback)) { + data = globalOptions.dataCallback(data) || data; + } + + // Why?????????? + if (!data || isEmptyObject(data)) { + return; + } + + // Check if the request should be filtered or not + if ( + isFunction(globalOptions.shouldSendCallback) && + !globalOptions.shouldSendCallback(data) + ) { + return; + } + + // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests), + // so drop requests until "cool-off" period has elapsed. + if (this._shouldBackoff()) { + this._logDebug('warn', 'Raven dropped error due to backoff: ', data); + return; + } + + if (typeof globalOptions.sampleRate === 'number') { + if (Math.random() < globalOptions.sampleRate) { + this._sendProcessedPayload(data); + } + } else { + this._sendProcessedPayload(data); + } + }, + + _getUuid: function() { + return uuid4(); + }, + + _sendProcessedPayload: function(data, callback) { + var self = this; + var globalOptions = this._globalOptions; + + if (!this.isSetup()) return; + + // Try and clean up the packet before sending by truncating long values + data = this._trimPacket(data); + + // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback, + // but this would require copying an un-truncated copy of the data packet, which can be + // arbitrarily deep (extra_data) -- could be worthwhile? will revisit + if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) { + this._logDebug('warn', 'Raven dropped repeat event: ', data); + return; + } + + // Send along an event_id if not explicitly passed. + // This event_id can be used to reference the error within Sentry itself. + // Set lastEventId after we know the error should actually be sent + this._lastEventId = data.event_id || (data.event_id = this._getUuid()); + + // Store outbound payload after trim + this._lastData = data; + + this._logDebug('debug', 'Raven about to send:', data); + + var auth = { + sentry_version: '7', + sentry_client: 'raven-js/' + this.VERSION, + sentry_key: this._globalKey + }; + + if (this._globalSecret) { + auth.sentry_secret = this._globalSecret; + } + + var exception = data.exception && data.exception.values[0]; + this.captureBreadcrumb({ + category: 'sentry', + message: exception + ? (exception.type ? exception.type + ': ' : '') + exception.value + : data.message, + event_id: data.event_id, + level: data.level || 'error' // presume error unless specified + }); + + var url = this._globalEndpoint; + (globalOptions.transport || this._makeRequest).call(this, { + url: url, + auth: auth, + data: data, + options: globalOptions, + onSuccess: function success() { + self._resetBackoff(); + + self._triggerEvent('success', { + data: data, + src: url + }); + callback && callback(); + }, + onError: function failure(error) { + self._logDebug('error', 'Raven transport failed to send: ', error); + + if (error.request) { + self._setBackoffState(error.request); + } + + self._triggerEvent('failure', { + data: data, + src: url + }); + error = error || new Error('Raven send failed (no additional details provided)'); + callback && callback(error); + } + }); + }, + + _makeRequest: function(opts) { + var request = _window.XMLHttpRequest && new _window.XMLHttpRequest(); + if (!request) return; + + // if browser doesn't support CORS (e.g. IE7), we are out of luck + var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined'; + + if (!hasCORS) return; + + var url = opts.url; + + if ('withCredentials' in request) { + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } else if (request.status === 200) { + opts.onSuccess && opts.onSuccess(); + } else if (opts.onError) { + var err = new Error('Sentry error code: ' + request.status); + err.request = request; + opts.onError(err); + } + }; + } else { + request = new XDomainRequest(); + // xdomainrequest cannot go http -> https (or vice versa), + // so always use protocol relative + url = url.replace(/^https?:/, ''); + + // onreadystatechange not supported by XDomainRequest + if (opts.onSuccess) { + request.onload = opts.onSuccess; + } + if (opts.onError) { + request.onerror = function() { + var err = new Error('Sentry error code: XDomainRequest'); + err.request = request; + opts.onError(err); + }; + } + } + + // NOTE: auth is intentionally sent as part of query string (NOT as custom + // HTTP header) so as to avoid preflight CORS requests + request.open('POST', url + '?' + urlencode(opts.auth)); + request.send(stringify(opts.data)); + }, + + _logDebug: function(level) { + if (this._originalConsoleMethods[level] && this.debug) { + // In IE<10 console methods do not have their own 'apply' method + Function.prototype.apply.call( + this._originalConsoleMethods[level], + this._originalConsole, + [].slice.call(arguments, 1) + ); + } + }, + + _mergeContext: function(key, context) { + if (isUndefined(context)) { + delete this._globalContext[key]; + } else { + this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context); + } + } +}; + +// Deprecations +Raven.prototype.setUser = Raven.prototype.setUserContext; +Raven.prototype.setReleaseContext = Raven.prototype.setRelease; + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/singleton.js": +/*!************************************************!*\ + !*** ./node_modules/raven-js/src/singleton.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * Enforces a single instance of the Raven client, and the + * main entry point for Raven. If you are a consumer of the + * Raven library, you SHOULD load this file (vs raven.js). + **/ + +var RavenConstructor = __webpack_require__(/*! ./raven */ "./node_modules/raven-js/src/raven.js"); + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _Raven = _window.Raven; + +var Raven = new RavenConstructor(); + +/* + * Allow multiple versions of Raven to be installed. + * Strip Raven from the global context and returns the instance. + * + * @return {Raven} + */ +Raven.noConflict = function() { + _window.Raven = _Raven; + return Raven; +}; + +Raven.afterLoad(); + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/utils.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/utils.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +function isObject(what) { + return typeof what === 'object' && what !== null; +} + +// Yanked from https://git.io/vS8DV re-used under CC0 +// with some tiny modifications +function isError(value) { + switch ({}.toString.call(value)) { + case '[object Error]': + return true; + case '[object Exception]': + return true; + case '[object DOMException]': + return true; + default: + return value instanceof Error; + } +} + +function isErrorEvent(value) { + return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]'; +} + +function isUndefined(what) { + return what === void 0; +} + +function isFunction(what) { + return typeof what === 'function'; +} + +function isString(what) { + return Object.prototype.toString.call(what) === '[object String]'; +} + +function isEmptyObject(what) { + for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars + return true; +} + +function supportsErrorEvent() { + try { + new ErrorEvent(''); // eslint-disable-line no-new + return true; + } catch (e) { + return false; + } +} + +function wrappedCallback(callback) { + function dataCallback(data, original) { + var normalizedData = callback(data) || data; + if (original) { + return original(normalizedData) || normalizedData; + } + return normalizedData; + } + + return dataCallback; +} + +function each(obj, callback) { + var i, j; + + if (isUndefined(obj.length)) { + for (i in obj) { + if (hasKey(obj, i)) { + callback.call(null, i, obj[i]); + } + } + } else { + j = obj.length; + if (j) { + for (i = 0; i < j; i++) { + callback.call(null, i, obj[i]); + } + } + } +} + +function objectMerge(obj1, obj2) { + if (!obj2) { + return obj1; + } + each(obj2, function(key, value) { + obj1[key] = value; + }); + return obj1; +} + +/** + * This function is only used for react-native. + * react-native freezes object that have already been sent over the + * js bridge. We need this function in order to check if the object is frozen. + * So it's ok that objectFrozen returns false if Object.isFrozen is not + * supported because it's not relevant for other "platforms". See related issue: + * https://github.com/getsentry/react-native-sentry/issues/57 + */ +function objectFrozen(obj) { + if (!Object.isFrozen) { + return false; + } + return Object.isFrozen(obj); +} + +function truncate(str, max) { + return !max || str.length <= max ? str : str.substr(0, max) + '\u2026'; +} + +/** + * hasKey, a better form of hasOwnProperty + * Example: hasKey(MainHostObject, property) === true/false + * + * @param {Object} host object to check property + * @param {string} key to check + */ +function hasKey(object, key) { + return Object.prototype.hasOwnProperty.call(object, key); +} + +function joinRegExp(patterns) { + // Combine an array of regular expressions and strings into one large regexp + // Be mad. + var sources = [], + i = 0, + len = patterns.length, + pattern; + + for (; i < len; i++) { + pattern = patterns[i]; + if (isString(pattern)) { + // If it's a string, we need to escape it + // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1')); + } else if (pattern && pattern.source) { + // If it's a regexp already, we want to extract the source + sources.push(pattern.source); + } + // Intentionally skip other cases + } + return new RegExp(sources.join('|'), 'i'); +} + +function urlencode(o) { + var pairs = []; + each(o, function(key, value) { + pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + return pairs.join('&'); +} + +// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B +// intentionally using regex and not href parsing trick because React Native and other +// environments where DOM might not be available +function parseUrl(url) { + var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); + if (!match) return {}; + + // coerce to undefined values to empty string so we don't get 'undefined' + var query = match[6] || ''; + var fragment = match[8] || ''; + return { + protocol: match[2], + host: match[4], + path: match[5], + relative: match[5] + query + fragment // everything minus origin + }; +} +function uuid4() { + var crypto = _window.crypto || _window.msCrypto; + + if (!isUndefined(crypto) && crypto.getRandomValues) { + // Use window.crypto API if available + // eslint-disable-next-line no-undef + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); + + // set 4 in byte 7 + arr[3] = (arr[3] & 0xfff) | 0x4000; + // set 2 most significant bits of byte 9 to '10' + arr[4] = (arr[4] & 0x3fff) | 0x8000; + + var pad = function(num) { + var v = num.toString(16); + while (v.length < 4) { + v = '0' + v; + } + return v; + }; + + return ( + pad(arr[0]) + + pad(arr[1]) + + pad(arr[2]) + + pad(arr[3]) + + pad(arr[4]) + + pad(arr[5]) + + pad(arr[6]) + + pad(arr[7]) + ); + } else { + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + } +} + +/** + * Given a child DOM element, returns a query-selector statement describing that + * and its ancestors + * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] + * @param elem + * @returns {string} + */ +function htmlTreeAsString(elem) { + /* eslint no-extra-parens:0*/ + var MAX_TRAVERSE_HEIGHT = 5, + MAX_OUTPUT_LEN = 80, + out = [], + height = 0, + len = 0, + separator = ' > ', + sepLength = separator.length, + nextStr; + + while (elem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = htmlElementAsString(elem); + // bail out if + // - nextStr is the 'html' element + // - the length of the string that would be created exceeds MAX_OUTPUT_LEN + // (ignore this limit if we are on the first iteration) + if ( + nextStr === 'html' || + (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) + ) { + break; + } + + out.push(nextStr); + + len += nextStr.length; + elem = elem.parentNode; + } + + return out.reverse().join(separator); +} + +/** + * Returns a simple, query-selector representation of a DOM element + * e.g. [HTMLElement] => input#foo.btn[name=baz] + * @param HTMLElement + * @returns {string} + */ +function htmlElementAsString(elem) { + var out = [], + className, + classes, + key, + attr, + i; + + if (!elem || !elem.tagName) { + return ''; + } + + out.push(elem.tagName.toLowerCase()); + if (elem.id) { + out.push('#' + elem.id); + } + + className = elem.className; + if (className && isString(className)) { + classes = className.split(/\s+/); + for (i = 0; i < classes.length; i++) { + out.push('.' + classes[i]); + } + } + var attrWhitelist = ['type', 'name', 'title', 'alt']; + for (i = 0; i < attrWhitelist.length; i++) { + key = attrWhitelist[i]; + attr = elem.getAttribute(key); + if (attr) { + out.push('[' + key + '="' + attr + '"]'); + } + } + return out.join(''); +} + +/** + * Returns true if either a OR b is truthy, but not both + */ +function isOnlyOneTruthy(a, b) { + return !!(!!a ^ !!b); +} + +/** + * Returns true if the two input exception interfaces have the same content + */ +function isSameException(ex1, ex2) { + if (isOnlyOneTruthy(ex1, ex2)) return false; + + ex1 = ex1.values[0]; + ex2 = ex2.values[0]; + + if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false; + + return isSameStacktrace(ex1.stacktrace, ex2.stacktrace); +} + +/** + * Returns true if the two input stack trace interfaces have the same content + */ +function isSameStacktrace(stack1, stack2) { + if (isOnlyOneTruthy(stack1, stack2)) return false; + + var frames1 = stack1.frames; + var frames2 = stack2.frames; + + // Exit early if frame count differs + if (frames1.length !== frames2.length) return false; + + // Iterate through every frame; bail out if anything differs + var a, b; + for (var i = 0; i < frames1.length; i++) { + a = frames1[i]; + b = frames2[i]; + if ( + a.filename !== b.filename || + a.lineno !== b.lineno || + a.colno !== b.colno || + a['function'] !== b['function'] + ) + return false; + } + return true; +} + +/** + * Polyfill a method + * @param obj object e.g. `document` + * @param name method name present on object e.g. `addEventListener` + * @param replacement replacement function + * @param track {optional} record instrumentation to an array + */ +function fill(obj, name, replacement, track) { + var orig = obj[name]; + obj[name] = replacement(orig); + if (track) { + track.push([obj, name, orig]); + } +} + +module.exports = { + isObject: isObject, + isError: isError, + isErrorEvent: isErrorEvent, + isUndefined: isUndefined, + isFunction: isFunction, + isString: isString, + isEmptyObject: isEmptyObject, + supportsErrorEvent: supportsErrorEvent, + wrappedCallback: wrappedCallback, + each: each, + objectMerge: objectMerge, + truncate: truncate, + objectFrozen: objectFrozen, + hasKey: hasKey, + joinRegExp: joinRegExp, + urlencode: urlencode, + uuid4: uuid4, + htmlTreeAsString: htmlTreeAsString, + htmlElementAsString: htmlElementAsString, + isSameException: isSameException, + isSameStacktrace: isSameStacktrace, + parseUrl: parseUrl, + fill: fill +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/TraceKit/tracekit.js": +/*!***********************************************************!*\ + !*** ./node_modules/raven-js/vendor/TraceKit/tracekit.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var utils = __webpack_require__(/*! ../../src/utils */ "./node_modules/raven-js/src/utils.js"); + +/* + TraceKit - Cross brower stack traces + + This was originally forked from github.com/occ/TraceKit, but has since been + largely re-written and is now maintained as part of raven-js. Tests for + this are in test/vendor. + + MIT license +*/ + +var TraceKit = { + collectWindowErrors: true, + debug: false +}; + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +// global reference to slice +var _slice = [].slice; +var UNKNOWN_FUNCTION = '?'; + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types +var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/; + +function getLocationHref() { + if (typeof document === 'undefined' || document.location == null) return ''; + + return document.location.href; +} + +/** + * TraceKit.report: cross-browser processing of unhandled exceptions + * + * Syntax: + * TraceKit.report.subscribe(function(stackInfo) { ... }) + * TraceKit.report.unsubscribe(function(stackInfo) { ... }) + * TraceKit.report(exception) + * try { ...code... } catch(ex) { TraceKit.report(ex); } + * + * Supports: + * - Firefox: full stack trace with line numbers, plus column number + * on top frame; column number is not guaranteed + * - Opera: full stack trace with line and column numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * - IE: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * + * In theory, TraceKit should work on all of the following versions: + * - IE5.5+ (only 8.0 tested) + * - Firefox 0.9+ (only 3.5+ tested) + * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require + * Exceptions Have Stacktrace to be enabled in opera:config) + * - Safari 3+ (only 4+ tested) + * - Chrome 1+ (only 5+ tested) + * - Konqueror 3.5+ (untested) + * + * Requires TraceKit.computeStackTrace. + * + * Tries to catch all unhandled exceptions and report them to the + * subscribed handlers. Please note that TraceKit.report will rethrow the + * exception. This is REQUIRED in order to get a useful stack trace in IE. + * If the exception does not reach the top of the browser, you will only + * get a stack trace from the point where TraceKit.report was called. + * + * Handlers receive a stackInfo object as described in the + * TraceKit.computeStackTrace docs. + */ +TraceKit.report = (function reportModuleWrapper() { + var handlers = [], + lastArgs = null, + lastException = null, + lastExceptionStack = null; + + /** + * Add a crash handler. + * @param {Function} handler + */ + function subscribe(handler) { + installGlobalHandler(); + handlers.push(handler); + } + + /** + * Remove a crash handler. + * @param {Function} handler + */ + function unsubscribe(handler) { + for (var i = handlers.length - 1; i >= 0; --i) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } + + /** + * Remove all crash handlers. + */ + function unsubscribeAll() { + uninstallGlobalHandler(); + handlers = []; + } + + /** + * Dispatch stack information to all handlers. + * @param {Object.} stack + */ + function notifyHandlers(stack, isWindowError) { + var exception = null; + if (isWindowError && !TraceKit.collectWindowErrors) { + return; + } + for (var i in handlers) { + if (handlers.hasOwnProperty(i)) { + try { + handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); + } catch (inner) { + exception = inner; + } + } + } + + if (exception) { + throw exception; + } + } + + var _oldOnerrorHandler, _onErrorHandlerInstalled; + + /** + * Ensures all global unhandled exceptions are recorded. + * Supported by Gecko and IE. + * @param {string} message Error message. + * @param {string} url URL of script that generated the exception. + * @param {(number|string)} lineNo The line number at which the error + * occurred. + * @param {?(number|string)} colNo The column number at which the error + * occurred. + * @param {?Error} ex The actual Error object. + */ + function traceKitWindowOnError(message, url, lineNo, colNo, ex) { + var stack = null; + + if (lastExceptionStack) { + TraceKit.computeStackTrace.augmentStackTraceWithInitialElement( + lastExceptionStack, + url, + lineNo, + message + ); + processLastException(); + } else if (ex && utils.isError(ex)) { + // non-string `ex` arg; attempt to extract stack trace + + // New chrome and blink send along a real error object + // Let's just report that like a normal error. + // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror + stack = TraceKit.computeStackTrace(ex); + notifyHandlers(stack, true); + } else { + var location = { + url: url, + line: lineNo, + column: colNo + }; + + var name = undefined; + var msg = message; // must be new var or will modify original `arguments` + var groups; + if ({}.toString.call(message) === '[object String]') { + var groups = message.match(ERROR_TYPES_RE); + if (groups) { + name = groups[1]; + msg = groups[2]; + } + } + + location.func = UNKNOWN_FUNCTION; + + stack = { + name: name, + message: msg, + url: getLocationHref(), + stack: [location] + }; + notifyHandlers(stack, true); + } + + if (_oldOnerrorHandler) { + return _oldOnerrorHandler.apply(this, arguments); + } + + return false; + } + + function installGlobalHandler() { + if (_onErrorHandlerInstalled) { + return; + } + _oldOnerrorHandler = _window.onerror; + _window.onerror = traceKitWindowOnError; + _onErrorHandlerInstalled = true; + } + + function uninstallGlobalHandler() { + if (!_onErrorHandlerInstalled) { + return; + } + _window.onerror = _oldOnerrorHandler; + _onErrorHandlerInstalled = false; + _oldOnerrorHandler = undefined; + } + + function processLastException() { + var _lastExceptionStack = lastExceptionStack, + _lastArgs = lastArgs; + lastArgs = null; + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs)); + } + + /** + * Reports an unhandled Error to TraceKit. + * @param {Error} ex + * @param {?boolean} rethrow If false, do not re-throw the exception. + * Only used for window.onerror to not cause an infinite loop of + * rethrowing. + */ + function report(ex, rethrow) { + var args = _slice.call(arguments, 1); + if (lastExceptionStack) { + if (lastException === ex) { + return; // already caught by an inner catch block, ignore + } else { + processLastException(); + } + } + + var stack = TraceKit.computeStackTrace(ex); + lastExceptionStack = stack; + lastException = ex; + lastArgs = args; + + // If the stack trace is incomplete, wait for 2 seconds for + // slow slow IE to see if onerror occurs or not before reporting + // this exception; otherwise, we will end up with an incomplete + // stack trace + setTimeout(function() { + if (lastException === ex) { + processLastException(); + } + }, stack.incomplete ? 2000 : 0); + + if (rethrow !== false) { + throw ex; // re-throw to propagate to the top level (and cause window.onerror) + } + } + + report.subscribe = subscribe; + report.unsubscribe = unsubscribe; + report.uninstall = unsubscribeAll; + return report; +})(); + +/** + * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript + * + * Syntax: + * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) + * Returns: + * s.name - exception name + * s.message - exception message + * s.stack[i].url - JavaScript or HTML file URL + * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) + * s.stack[i].args - arguments passed to the function, if known + * s.stack[i].line - line number, if known + * s.stack[i].column - column number, if known + * + * Supports: + * - Firefox: full stack trace with line numbers and unreliable column + * number on top frame + * - Opera 10: full stack trace with line and column numbers + * - Opera 9-: full stack trace with line numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the topmost stacktrace element + * only + * - IE: no line numbers whatsoever + * + * Tries to guess names of anonymous functions by looking for assignments + * in the source code. In IE and Safari, we have to guess source file names + * by searching for function bodies inside all page scripts. This will not + * work for scripts that are loaded cross-domain. + * Here be dragons: some function names may be guessed incorrectly, and + * duplicate functions may be mismatched. + * + * TraceKit.computeStackTrace should only be used for tracing purposes. + * Logging of unhandled exceptions should be done with TraceKit.report, + * which builds on top of TraceKit.computeStackTrace and provides better + * IE support by utilizing the window.onerror event to retrieve information + * about the top of the stack. + * + * Note: In IE and Safari, no stack trace is recorded on the Error object, + * so computeStackTrace instead walks its *own* chain of callers. + * This means that: + * * in Safari, some methods may be missing from the stack trace; + * * in IE, the topmost function in the stack trace will always be the + * caller of computeStackTrace. + * + * This is okay for tracing (because you are likely to be calling + * computeStackTrace from the function you want to be the topmost element + * of the stack trace anyway), but not okay for logging unhandled + * exceptions (because your catch block will likely be far away from the + * inner function that actually caused the exception). + * + */ +TraceKit.computeStackTrace = (function computeStackTraceWrapper() { + // Contents of Exception in various browsers. + // + // SAFARI: + // ex.message = Can't find variable: qq + // ex.line = 59 + // ex.sourceId = 580238192 + // ex.sourceURL = http://... + // ex.expressionBeginOffset = 96 + // ex.expressionCaretOffset = 98 + // ex.expressionEndOffset = 98 + // ex.name = ReferenceError + // + // FIREFOX: + // ex.message = qq is not defined + // ex.fileName = http://... + // ex.lineNumber = 59 + // ex.columnNumber = 69 + // ex.stack = ...stack trace... (see the example below) + // ex.name = ReferenceError + // + // CHROME: + // ex.message = qq is not defined + // ex.name = ReferenceError + // ex.type = not_defined + // ex.arguments = ['aa'] + // ex.stack = ...stack trace... + // + // INTERNET EXPLORER: + // ex.message = ... + // ex.name = ReferenceError + // + // OPERA: + // ex.message = ...message... (see the example below) + // ex.name = ReferenceError + // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) + // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + + /** + * Computes stack trace information from the stack property. + * Chrome and Gecko use this property. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceFromStackProp(ex) { + if (typeof ex.stack === 'undefined' || !ex.stack) return; + + var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, + gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i, + winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i, + // Used to additionally parse URL/line/column from eval frames + geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, + chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/, + lines = ex.stack.split('\n'), + stack = [], + submatch, + parts, + element, + reference = /^(.*) is undefined$/.exec(ex.message); + + for (var i = 0, j = lines.length; i < j; ++i) { + if ((parts = chrome.exec(lines[i]))) { + var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + if (isEval && (submatch = chromeEval.exec(parts[2]))) { + // throw out eval line/column and use top-most line/column number + parts[2] = submatch[1]; // url + parts[3] = submatch[2]; // line + parts[4] = submatch[3]; // column + } + element = { + url: !isNative ? parts[2] : null, + func: parts[1] || UNKNOWN_FUNCTION, + args: isNative ? [parts[2]] : [], + line: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = winjs.exec(lines[i]))) { + element = { + url: parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: [], + line: +parts[3], + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = gecko.exec(lines[i]))) { + var isEval = parts[3] && parts[3].indexOf(' > eval') > -1; + if (isEval && (submatch = geckoEval.exec(parts[3]))) { + // throw out eval line/column and use top-most line number + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = null; // no column when eval + } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') { + // FireFox uses this awesome columnNumber property for its top frame + // Also note, Firefox's column number is 0-based and everything else expects 1-based, + // so adding 1 + // NOTE: this hack doesn't work if top-most frame is eval + stack[0].column = ex.columnNumber + 1; + } + element = { + url: parts[3], + func: parts[1] || UNKNOWN_FUNCTION, + args: parts[2] ? parts[2].split(',') : [], + line: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null + }; + } else { + continue; + } + + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; + } + + stack.push(element); + } + + if (!stack.length) { + return null; + } + + return { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + } + + /** + * Adds information about the first frame to incomplete stack traces. + * Safari and IE require this to get complete data on the first frame. + * @param {Object.} stackInfo Stack trace information from + * one of the compute* methods. + * @param {string} url The URL of the script that caused an error. + * @param {(number|string)} lineNo The line number of the script that + * caused an error. + * @param {string=} message The error generated by the browser, which + * hopefully contains the name of the object that caused the error. + * @return {boolean} Whether or not the stack information was + * augmented. + */ + function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { + var initial = { + url: url, + line: lineNo + }; + + if (initial.url && initial.line) { + stackInfo.incomplete = false; + + if (!initial.func) { + initial.func = UNKNOWN_FUNCTION; + } + + if (stackInfo.stack.length > 0) { + if (stackInfo.stack[0].url === initial.url) { + if (stackInfo.stack[0].line === initial.line) { + return false; // already in stack trace + } else if ( + !stackInfo.stack[0].line && + stackInfo.stack[0].func === initial.func + ) { + stackInfo.stack[0].line = initial.line; + return false; + } + } + } + + stackInfo.stack.unshift(initial); + stackInfo.partial = true; + return true; + } else { + stackInfo.incomplete = true; + } + + return false; + } + + /** + * Computes stack trace information by walking the arguments.caller + * chain at the time the exception occurred. This will cause earlier + * frames to be missed but is the only way to get any stack trace in + * Safari and IE. The top frame is restored by + * {@link augmentStackTraceWithInitialElement}. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceByWalkingCallerChain(ex, depth) { + var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, + stack = [], + funcs = {}, + recursion = false, + parts, + item, + source; + + for ( + var curr = computeStackTraceByWalkingCallerChain.caller; + curr && !recursion; + curr = curr.caller + ) { + if (curr === computeStackTrace || curr === TraceKit.report) { + // console.log('skipping internal function'); + continue; + } + + item = { + url: null, + func: UNKNOWN_FUNCTION, + line: null, + column: null + }; + + if (curr.name) { + item.func = curr.name; + } else if ((parts = functionName.exec(curr.toString()))) { + item.func = parts[1]; + } + + if (typeof item.func === 'undefined') { + try { + item.func = parts.input.substring(0, parts.input.indexOf('{')); + } catch (e) {} + } + + if (funcs['' + curr]) { + recursion = true; + } else { + funcs['' + curr] = true; + } + + stack.push(item); + } + + if (depth) { + // console.log('depth is ' + depth); + // console.log('stack is ' + stack.length); + stack.splice(0, depth); + } + + var result = { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + augmentStackTraceWithInitialElement( + result, + ex.sourceURL || ex.fileName, + ex.line || ex.lineNumber, + ex.message || ex.description + ); + return result; + } + + /** + * Computes a stack trace for an exception. + * @param {Error} ex + * @param {(string|number)=} depth + */ + function computeStackTrace(ex, depth) { + var stack = null; + depth = depth == null ? 0 : +depth; + + try { + stack = computeStackTraceFromStackProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + + try { + stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + return { + name: ex.name, + message: ex.message, + url: getLocationHref() + }; + } + + computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; + computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp; + + return computeStackTrace; +})(); + +module.exports = TraceKit; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js": +/*!***********************************************************************!*\ + !*** ./node_modules/raven-js/vendor/json-stringify-safe/stringify.js ***! + \***********************************************************************/ +/***/ ((module, exports) => { + +/* + json-stringify-safe + Like JSON.stringify, but doesn't throw on circular references. + + Originally forked from https://github.com/isaacs/json-stringify-safe + version 5.0.1 on 3/8/2017 and modified to handle Errors serialization + and IE8 compatibility. Tests for this are in test/vendor. + + ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE +*/ + +exports = module.exports = stringify; +exports.getSerialize = serializer; + +function indexOf(haystack, needle) { + for (var i = 0; i < haystack.length; ++i) { + if (haystack[i] === needle) return i; + } + return -1; +} + +function stringify(obj, replacer, spaces, cycleReplacer) { + return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); +} + +// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106 +function stringifyError(value) { + var err = { + // These properties are implemented as magical getters and don't show up in for in + stack: value.stack, + message: value.message, + name: value.name + }; + + for (var i in value) { + if (Object.prototype.hasOwnProperty.call(value, i)) { + err[i] = value[i]; + } + } + + return err; +} + +function serializer(replacer, cycleReplacer) { + var stack = []; + var keys = []; + + if (cycleReplacer == null) { + cycleReplacer = function(key, value) { + if (stack[0] === value) { + return '[Circular ~]'; + } + return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'; + }; + } + + return function(key, value) { + if (stack.length > 0) { + var thisPos = indexOf(stack, this); + ~thisPos ? stack.splice(thisPos + 1) : stack.push(this); + ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key); + + if (~indexOf(stack, value)) { + value = cycleReplacer.call(this, key, value); + } + } else { + stack.push(value); + } + + return replacer == null + ? value instanceof Error ? stringifyError(value) : value + : replacer.call(this, key, value); + }; +} + + +/***/ }), + +/***/ "jquery": +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["jQuery"]; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!*************************************!*\ + !*** ./scripts/entries/feedback.ts ***! + \*************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); +/* harmony import */ var _constants_selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants/selectors */ "./scripts/constants/selectors.ts"); +/* harmony import */ var _feedback_ThickBoxModal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../feedback/ThickBoxModal */ "./scripts/feedback/ThickBoxModal.ts"); +/* harmony import */ var _feedback_feedbackFormApi__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../feedback/feedbackFormApi */ "./scripts/feedback/feedbackFormApi.ts"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); + + + + + + + + + +function deactivatePlugin() { + var href = jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.deactivatePluginButton).attr('href'); + + if (href) { + window.location.href = href; + } +} + +function setLoadingState() { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.deactivateFeedbackSubmit).addClass('loading'); +} + +function submitAndDeactivate(e) { + e.preventDefault(); + setLoadingState(); + var feedback = jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.deactivateFeedbackForm).serializeArray().find(function (field) { + return field.name === 'feedback'; + }); + (0,_feedback_feedbackFormApi__WEBPACK_IMPORTED_MODULE_4__.submitFeedbackForm)(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.deactivateFeedbackForm).then(function () { + if (feedback && _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_6__.refreshToken) { + var embedder = (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_5__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_6__.refreshToken); + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__.ProxyMessages.TrackPluginDeactivation, + payload: { + type: feedback.value.trim().replace(/[\s']+/g, '_') + } + }); + } + })["catch"](function (err) { + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].captureException(err); + })["finally"](function () { + deactivatePlugin(); + }); +} + +function init() { + // eslint-disable-next-line no-new + new _feedback_ThickBoxModal__WEBPACK_IMPORTED_MODULE_3__["default"](_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.deactivatePluginButton, 'leadin-feedback-container', 'leadin-feedback-window', 'leadin-feedback-content'); + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.deactivateFeedbackForm).off('submit').on('submit', submitAndDeactivate); + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.deactivateFeedbackSkip).off('click').on('click', deactivatePlugin); +} + +(0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_5__.initBackgroundApp)(init); +})(); + +/******/ })() +; +//# sourceMappingURL=feedback.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/feedback.js.map b/wp/wp-content/plugins/leadin/build/feedback.js.map new file mode 100644 index 00000000..b2e12d56 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/feedback.js.map @@ -0,0 +1 @@ +{"version":3,"file":"feedback.js","mappings":"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,IAAMwJ,QAAQ,GAAG,IAAIN,qBAAJ,CAA0B,yBAA1B,EAAqDtJ,6DAArD,EAA+DhB,mEAA/D,EAA+E,YAAM,CAAG,CAAxF,EAA0F6K,UAA1F,CAAqGL,OAArG,CAAjB;EACAI,QAAQ,CAACE,QAAT,CAAkBC,QAAQ,CAACC,IAA3B,EAAiC,KAAjC;EACAJ,QAAQ,CAACK,mBAAT,GAXsD,CAWtB;;EAChC9L,MAAM,CAACkL,mBAAP,GAA6BO,QAA7B;EACA,OAAOzL,MAAM,CAACkL,mBAAd;AACH,CAdM;;;;;;;;;;ACbP;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACPA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,gBAAgB,+CAA+C;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACtCA;;AAEA,eAAe,mBAAO,CAAC,wFAA6B;AACpD,gBAAgB,mBAAO,CAAC,gHAAyC;AACjE,uBAAuB,mBAAO,CAAC,iEAAe;;AAE9C,YAAY,mBAAO,CAAC,qDAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,2FAA+B;;AAEvD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,UAAU;AACzB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,0CAA0C;AAC1C,2CAA2C;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,MAAM;AACN,2EAA2E;AAC3E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACr4DA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAO,CAAC,qDAAS;;AAExC;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;AC9BA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA,iDAAiD;AACjD,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kCAAkC;AAClC;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChYA,YAAY,mBAAO,CAAC,6DAAiB;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD,KAAK;AAC1D,uDAAuD,KAAK;AAC5D;AACA,WAAW,aAAa,YAAY;AACpC;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,+DAA+D;AAC/D;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,kBAAkB;AACjC;AACA,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA,qEAAqE;AACrE,iEAAiE;AACjE;AACA;AACA,kCAAkC;AAClC,kCAAkC;AAClC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,SAAS;AACxB;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAA0C;AAClD,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,qEAAqE;AACrE,UAAU;AACV;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;AC9mBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB;;AAEpB;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASa,gBAAT,GAA4B;EACxB,IAAMC,IAAI,GAAGrI,6CAAC,CAAClB,oFAAD,CAAD,CAAsCwJ,IAAtC,CAA2C,MAA3C,CAAb;;EACA,IAAID,IAAJ,EAAU;IACNhM,MAAM,CAACkM,QAAP,CAAgBF,IAAhB,GAAuBA,IAAvB;EACH;AACJ;;AACD,SAASG,eAAT,GAA2B;EACvBxI,6CAAC,CAAClB,sFAAD,CAAD,CAAwC8B,QAAxC,CAAiD,SAAjD;AACH;;AACD,SAAS6H,mBAAT,CAA6B/H,CAA7B,EAAgC;EAC5BA,CAAC,CAACK,cAAF;EACAyH,eAAe;EACf,IAAME,QAAQ,GAAG1I,6CAAC,CAAClB,oFAAD,CAAD,CACZwC,cADY,GAEZqH,IAFY,CAEP,UAAAC,KAAK;IAAA,OAAIA,KAAK,CAAClC,IAAN,KAAe,UAAnB;EAAA,CAFE,CAAjB;EAGAxF,6EAAkB,CAACpC,oFAAD,CAAlB,CACK+J,IADL,CACU,YAAM;IACZ,IAAIH,QAAQ,IAAIpK,iEAAhB,EAA8B;MAC1B,IAAMwJ,QAAQ,GAAGR,mFAAwB,CAAChJ,iEAAD,CAAzC;MACAwJ,QAAQ,CAACgB,WAAT,CAAqB;QACjBC,GAAG,EAAExE,6FADY;QAEjByE,OAAO,EAAE;UACLpH,IAAI,EAAE8G,QAAQ,CAACO,KAAT,CAAeC,IAAf,GAAsBC,OAAtB,CAA8B,SAA9B,EAAyC,GAAzC;QADD;MAFQ,CAArB;IAMH;EACJ,CAXD,WAYW,UAACC,GAAD,EAAS;IAChB3D,mEAAA,CAAuB2D,GAAvB;EACH,CAdD,aAea,YAAM;IACfhB,gBAAgB;EACnB,CAjBD;AAkBH;;AACD,SAAS7H,IAAT,GAAgB;EACZ;EACA,IAAIN,+DAAJ,CAAkBnB,oFAAlB,EAAsD,2BAAtD,EAAmF,wBAAnF,EAA6G,yBAA7G;EACAkB,6CAAC,CAAClB,oFAAD,CAAD,CACK+B,GADL,CACS,QADT,EAEKP,EAFL,CAEQ,QAFR,EAEkBmI,mBAFlB;EAGAzI,6CAAC,CAAClB,oFAAD,CAAD,CACK+B,GADL,CACS,OADT,EAEKP,EAFL,CAEQ,OAFR,EAEiB8H,gBAFjB;AAGH;;AACDnB,4EAAiB,CAAC1G,IAAD,CAAjB,C","sources":["webpack://leadin/./scripts/constants/leadinConfig.ts","webpack://leadin/./scripts/constants/selectors.ts","webpack://leadin/./scripts/feedback/ThickBoxModal.ts","webpack://leadin/./scripts/feedback/feedbackFormApi.ts","webpack://leadin/./scripts/iframe/integratedMessages/core/CoreMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/forms/FormsMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/index.ts","webpack://leadin/./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/plugin/PluginMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts","webpack://leadin/./scripts/lib/Raven.ts","webpack://leadin/./scripts/utils/appUtils.ts","webpack://leadin/./scripts/utils/backgroundAppUtils.ts","webpack://leadin/./node_modules/raven-js/src/configError.js","webpack://leadin/./node_modules/raven-js/src/console.js","webpack://leadin/./node_modules/raven-js/src/raven.js","webpack://leadin/./node_modules/raven-js/src/singleton.js","webpack://leadin/./node_modules/raven-js/src/utils.js","webpack://leadin/./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack://leadin/./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack://leadin/external window \"jQuery\"","webpack://leadin/webpack/bootstrap","webpack://leadin/webpack/runtime/compat get default export","webpack://leadin/webpack/runtime/define property getters","webpack://leadin/webpack/runtime/global","webpack://leadin/webpack/runtime/hasOwnProperty shorthand","webpack://leadin/webpack/runtime/make namespace object","webpack://leadin/./scripts/entries/feedback.ts"],"sourcesContent":["const { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, locale, loginUrl, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, } = window.leadinConfig;\nexport { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, loginUrl, locale, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, };\n","export const domElements = {\n iframe: '#leadin-iframe',\n subMenu: '.toplevel_page_leadin > ul',\n subMenuLinks: '.toplevel_page_leadin > ul a',\n subMenuButtons: '.toplevel_page_leadin > ul > li',\n deactivatePluginButton: '[data-slug=\"leadin\"] .deactivate a',\n deactivateFeedbackForm: 'form.leadin-deactivate-form',\n deactivateFeedbackSubmit: 'button#leadin-feedback-submit',\n deactivateFeedbackSkip: 'button#leadin-feedback-skip',\n thickboxModalClose: '.leadin-modal-close',\n thickboxModalWindow: 'div#TB_window.thickbox-loading',\n thickboxModalContent: 'div#TB_ajaxContent.TB_modal',\n reviewBannerContainer: '#leadin-review-banner',\n reviewBannerLeaveReviewLink: 'a#leave-review-button',\n reviewBannerDismissButton: 'a#dismiss-review-banner-button',\n leadinIframeContainer: 'leadin-iframe-container',\n leadinIframe: 'leadin-iframe',\n leadinIframeFallbackContainer: 'leadin-iframe-fallback-container',\n};\n","import $ from 'jquery';\nimport { domElements } from '../constants/selectors';\nexport default class ThickBoxModal {\n openTriggerSelector;\n inlineContentId;\n windowCssClass;\n contentCssClass;\n constructor(openTriggerSelector, inlineContentId, windowCssClass, contentCssClass) {\n this.openTriggerSelector = openTriggerSelector;\n this.inlineContentId = inlineContentId;\n this.windowCssClass = windowCssClass;\n this.contentCssClass = contentCssClass;\n $(openTriggerSelector).on('click', this.init.bind(this));\n }\n close() {\n //@ts-expect-error global\n window.tb_remove();\n }\n init(e) {\n //@ts-expect-error global\n window.tb_show('', `#TB_inline?inlineId=${this.inlineContentId}&modal=true`);\n // thickbox doesn't respect the width and height url parameters https://core.trac.wordpress.org/ticket/17249\n // We override thickboxes css with !important in the css\n $(domElements.thickboxModalWindow).addClass(this.windowCssClass);\n // have to modify the css of the thickbox content container as well\n $(domElements.thickboxModalContent).addClass(this.contentCssClass);\n // we unbind previous handlers because a thickbox modal is a single global object.\n // Everytime it is re-opened, it still has old handlers bound\n $(domElements.thickboxModalClose)\n .off('click')\n .on('click', this.close);\n e.preventDefault();\n }\n}\n","import $ from 'jquery';\nconst portalId = '6275621';\nconst formId = '0e8807f8-2ac3-4664-b742-44552bfa09e2';\nconst formSubmissionUrl = `https://api.hsforms.com/submissions/v3/integration/submit/${portalId}/${formId}`;\nexport function submitFeedbackForm(formSelector) {\n const formSubmissionPayload = {\n fields: $(formSelector).serializeArray(),\n skipValidation: true,\n };\n return new Promise((resolve, reject) => {\n $.ajax({\n type: 'POST',\n url: formSubmissionUrl,\n contentType: 'application/json',\n data: JSON.stringify(formSubmissionPayload),\n success: resolve,\n error: reject,\n });\n });\n}\n","export const CoreMessages = {\n HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED',\n SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN',\n ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME',\n RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME',\n SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE',\n SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID',\n};\n","export const FormMessages = {\n CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION',\n};\n","export * from './core/CoreMessages';\nexport * from './forms/FormsMessages';\nexport * from './livechat/LiveChatMessages';\nexport * from './plugin/PluginMessages';\nexport * from './proxy/ProxyMessages';\n","export const LiveChatMessages = {\n CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION',\n};\n","export const PluginMessages = {\n PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION',\n PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG',\n TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT',\n InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST',\n InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE',\n InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR',\n InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST',\n InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR',\n BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST',\n BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE',\n BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR',\n BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST',\n BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR',\n SkipReviewRequest: 'SKIP_REVIEW_REQUEST',\n SkipReviewResponse: 'SKIP_REVIEW_RESPONSE',\n SkipReviewError: 'SKIP_REVIEW_ERROR',\n RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM',\n ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST',\n ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE',\n ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR',\n ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST',\n ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE',\n ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR',\n};\n","export const ProxyMessages = {\n FetchForms: 'FETCH_FORMS',\n FetchForm: 'FETCH_FORM',\n CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE',\n FetchAuth: 'FETCH_AUTH',\n FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS',\n FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION',\n FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER',\n ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR',\n TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER',\n TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE',\n TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED',\n TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER',\n TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE',\n TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER',\n TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION',\n TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED',\n TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION',\n};\n","import Raven from 'raven-js';\nimport { hubspotBaseUrl, phpVersion, wpVersion, leadinPluginVersion, portalId, plugins, } from '../constants/leadinConfig';\nexport function configureRaven() {\n if (hubspotBaseUrl.indexOf('app.hubspot.com') === -1) {\n return;\n }\n Raven.config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', {\n instrument: {\n tryCatch: false,\n },\n release: leadinPluginVersion,\n }).install();\n Raven.setTagsContext({\n v: leadinPluginVersion,\n php: phpVersion,\n wordpress: wpVersion,\n });\n Raven.setExtraContext({\n hub: portalId,\n plugins: Object.keys(plugins)\n .map(name => `${name}#${plugins[name]}`)\n .join(','),\n });\n}\nexport default Raven;\n","import $ from 'jquery';\nimport Raven, { configureRaven } from '../lib/Raven';\nexport function initApp(initFn) {\n configureRaven();\n Raven.context(initFn);\n}\nexport function initAppOnReady(initFn) {\n function main() {\n $(initFn);\n }\n initApp(main);\n}\n","import { deviceId, hubspotBaseUrl, locale, portalId, } from '../constants/leadinConfig';\nimport { initApp } from './appUtils';\nexport function initBackgroundApp(initFn) {\n function main() {\n if (Array.isArray(initFn)) {\n initFn.forEach(callback => callback());\n }\n else {\n initFn();\n }\n }\n initApp(main);\n}\nexport const getOrCreateBackgroundApp = (refreshToken) => {\n if (window.LeadinBackgroundApp) {\n return window.LeadinBackgroundApp;\n }\n const { IntegratedAppEmbedder, IntegratedAppOptions } = window;\n const options = new IntegratedAppOptions()\n .setLocale(locale)\n .setDeviceId(deviceId)\n .setRefreshToken(refreshToken);\n const embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', portalId, hubspotBaseUrl, () => { }).setOptions(options);\n embedder.attachTo(document.body, false);\n embedder.postStartAppMessage(); // lets the app know all all data has been passed to it\n window.LeadinBackgroundApp = embedder;\n return window.LeadinBackgroundApp;\n};\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = '' + args.join(' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n collectWindowErrors: true,\n maxMessageLength: 0,\n\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.19.1',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped already\n // for both debugging and to prevent it to being wrapped twice\n wrapped.__raven__ = true;\n wrapped.__inner__ = func;\n\n return wrapped;\n },\n\n /*\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._restoreBuiltIns();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /*\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n // Cases for sending ex as a message, rather than an exception\n var isNotError = !isError(ex);\n var isNotErrorEvent = !isErrorEvent(ex);\n var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n return this.captureMessage(\n ex,\n objectMerge(\n {\n trimHeadFrames: 1,\n stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n },\n options\n )\n );\n }\n\n // Get actual Error from ErrorEvent\n if (isErrorEvent(ex)) ex = ex.error;\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n\n var data = objectMerge(\n {\n message: msg + '' // Make sure it's actually a string\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = stack.stack[1];\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n options = objectMerge(\n {\n // fingerprint on msg, not stack trace (legacy behavior, could be\n // revisited)\n fingerprint: msg,\n // since we know this is a synthetic trace, the top N-most frames\n // MUST be from Raven.js, so mark them as in_app later by setting\n // trimHeadFrames\n trimHeadFrames: (options.trimHeadFrames || 0) + 1\n },\n options\n );\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function(data) {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && 'fetch' in _window) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n return response;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n if (this._hasDocument) {\n if (_document.location && _document.location.href) {\n httpData.url = _document.location.href;\n }\n if (_document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n retry = request.getResponseHeader('Retry-After');\n retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n // If there are no tags/extra, strip the key from the payload alltogther.\n if (isEmptyObject(data.tags)) delete data.tags;\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n var url = opts.url;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n // NOTE: auth is intentionally sent as part of query string (NOT as custom\n // HTTP header) so as to avoid preflight CORS requests\n request.open('POST', url + '?' + urlencode(opts.auth));\n request.send(stringify(opts.data));\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","var _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) return {};\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isString: isString,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} message Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (ex && utils.isError(ex)) {\n // non-string `ex` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(ex);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var msg = message; // must be new var or will modify original `arguments`\n var groups;\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n msg = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: msg,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n // Used to additionally parse URL/line/column from eval frames\n geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n lines = ex.stack.split('\\n'),\n stack = [],\n submatch,\n parts,\n element,\n reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","module.exports = window[\"jQuery\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import $ from 'jquery';\nimport Raven from '../lib/Raven';\nimport { domElements } from '../constants/selectors';\nimport ThickBoxModal from '../feedback/ThickBoxModal';\nimport { submitFeedbackForm } from '../feedback/feedbackFormApi';\nimport { getOrCreateBackgroundApp, initBackgroundApp, } from '../utils/backgroundAppUtils';\nimport { refreshToken } from '../constants/leadinConfig';\nimport { ProxyMessages } from '../iframe/integratedMessages';\nfunction deactivatePlugin() {\n const href = $(domElements.deactivatePluginButton).attr('href');\n if (href) {\n window.location.href = href;\n }\n}\nfunction setLoadingState() {\n $(domElements.deactivateFeedbackSubmit).addClass('loading');\n}\nfunction submitAndDeactivate(e) {\n e.preventDefault();\n setLoadingState();\n const feedback = $(domElements.deactivateFeedbackForm)\n .serializeArray()\n .find(field => field.name === 'feedback');\n submitFeedbackForm(domElements.deactivateFeedbackForm)\n .then(() => {\n if (feedback && refreshToken) {\n const embedder = getOrCreateBackgroundApp(refreshToken);\n embedder.postMessage({\n key: ProxyMessages.TrackPluginDeactivation,\n payload: {\n type: feedback.value.trim().replace(/[\\s']+/g, '_'),\n },\n });\n }\n })\n .catch((err) => {\n Raven.captureException(err);\n })\n .finally(() => {\n deactivatePlugin();\n });\n}\nfunction init() {\n // eslint-disable-next-line no-new\n new ThickBoxModal(domElements.deactivatePluginButton, 'leadin-feedback-container', 'leadin-feedback-window', 'leadin-feedback-content');\n $(domElements.deactivateFeedbackForm)\n .off('submit')\n .on('submit', submitAndDeactivate);\n $(domElements.deactivateFeedbackSkip)\n .off('click')\n .on('click', deactivatePlugin);\n}\ninitBackgroundApp(init);\n"],"names":["window","leadinConfig","accountName","adminUrl","activationTime","connectionStatus","deviceId","didDisconnect","env","formsScript","meetingsScript","formsScriptPayload","hublet","hubspotBaseUrl","hubspotNonce","iframeUrl","impactLink","lastAuthorizeTime","lastDeauthorizeTime","lastDisconnectTime","leadinPluginVersion","leadinQueryParams","locale","loginUrl","phpVersion","pluginPath","plugins","portalDomain","portalEmail","portalId","redirectNonce","restNonce","restUrl","refreshToken","reviewSkippedDate","theme","trackConsent","wpVersion","contentEmbed","requiresContentEmbedScope","refreshTokenError","domElements","iframe","subMenu","subMenuLinks","subMenuButtons","deactivatePluginButton","deactivateFeedbackForm","deactivateFeedbackSubmit","deactivateFeedbackSkip","thickboxModalClose","thickboxModalWindow","thickboxModalContent","reviewBannerContainer","reviewBannerLeaveReviewLink","reviewBannerDismissButton","leadinIframeContainer","leadinIframe","leadinIframeFallbackContainer","$","ThickBoxModal","openTriggerSelector","inlineContentId","windowCssClass","contentCssClass","on","init","bind","tb_remove","e","tb_show","addClass","off","close","preventDefault","formId","formSubmissionUrl","submitFeedbackForm","formSelector","formSubmissionPayload","fields","serializeArray","skipValidation","Promise","resolve","reject","ajax","type","url","contentType","data","JSON","stringify","success","error","CoreMessages","HandshakeReceive","SendRefreshToken","ReloadParentFrame","RedirectParentFrame","SendLocale","SendDeviceId","FormMessages","CreateFormAppNavigation","LiveChatMessages","CreateLiveChatAppNavigation","PluginMessages","PluginSettingsNavigation","PluginLeadinConfig","TrackConsent","InternalTrackingFetchRequest","InternalTrackingFetchResponse","InternalTrackingFetchError","InternalTrackingChangeRequest","InternalTrackingChangeError","BusinessUnitFetchRequest","BusinessUnitFetchResponse","BusinessUnitFetchError","BusinessUnitChangeRequest","BusinessUnitChangeError","SkipReviewRequest","SkipReviewResponse","SkipReviewError","RemoveParentQueryParam","ContentEmbedInstallRequest","ContentEmbedInstallResponse","ContentEmbedInstallError","ContentEmbedActivationRequest","ContentEmbedActivationResponse","ContentEmbedActivationError","ProxyMessages","FetchForms","FetchForm","CreateFormFromTemplate","FetchAuth","FetchMeetingsAndUsers","FetchContactsCreateSinceActivation","FetchOrCreateMeetingUser","ConnectMeetingsCalendar","TrackFormPreviewRender","TrackFormCreatedFromTemplate","TrackFormCreationFailed","TrackMeetingPreviewRender","TrackSidebarMetaChange","TrackReviewBannerRender","TrackReviewBannerInteraction","TrackReviewBannerDismissed","TrackPluginDeactivation","Raven","configureRaven","indexOf","config","instrument","tryCatch","release","install","setTagsContext","v","php","wordpress","setExtraContext","hub","Object","keys","map","name","join","initApp","initFn","context","initAppOnReady","main","initBackgroundApp","Array","isArray","forEach","callback","getOrCreateBackgroundApp","LeadinBackgroundApp","IntegratedAppEmbedder","IntegratedAppOptions","options","setLocale","setDeviceId","setRefreshToken","embedder","setOptions","attachTo","document","body","postStartAppMessage","deactivatePlugin","href","attr","location","setLoadingState","submitAndDeactivate","feedback","find","field","then","postMessage","key","payload","value","trim","replace","err","captureException"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/gutenberg.asset.php b/wp/wp-content/plugins/leadin/build/gutenberg.asset.php new file mode 100644 index 00000000..b0b7a670 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/gutenberg.asset.php @@ -0,0 +1 @@ + array('jquery', 'react', 'wp-blocks', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins'), 'version' => '2129d49ff2651d26d477'); diff --git a/wp/wp-content/plugins/leadin/build/gutenberg.css b/wp/wp-content/plugins/leadin/build/gutenberg.css new file mode 100644 index 00000000..e796fb33 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/gutenberg.css @@ -0,0 +1,67 @@ +/*!***************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/gutenberg/UIComponents/UIImage.ts ***! + \***************************************************************************************************************************************************************************/ +.ump7xqy{height:var(--ump7xqy-0);width:var(--ump7xqy-1);} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2d1dGVuYmVyZy9VSUNvbXBvbmVudHMvVUlJbWFnZS50cyJdLCJuYW1lcyI6WyIudW1wN3hxeSJdLCJtYXBwaW5ncyI6IkFBQ2VBIiwiZmlsZSI6Ii91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2d1dGVuYmVyZy9VSUNvbXBvbmVudHMvVUlJbWFnZS50cyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5pbWcgYFxuICBoZWlnaHQ6ICR7cHJvcHMgPT4gKHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICdhdXRvJyl9O1xuICB3aWR0aDogJHtwcm9wcyA9PiAocHJvcHMud2lkdGggPyBwcm9wcy53aWR0aCA6ICdhdXRvJyl9O1xuYDtcbiJdfQ==*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts ***! + \*************************************************************************************************************************************************************************/ +.ug152ch{background-color:var(--ug152ch-0);border:3px solid var(--ug152ch-0);color:#ffffff;border-radius:3px;font-size:14px;line-height:14px;padding:12px 24px;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-weight:500;white-space:nowrap;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlCdXR0b24udHMiXSwibmFtZXMiOlsiLnVnMTUyY2giXSwibWFwcGluZ3MiOiJBQUVlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQnV0dG9uLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuaW1wb3J0IHsgSEVGRkFMVU1QLCBMT1JBWCwgT0xBRiB9IGZyb20gJy4vY29sb3JzJztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5idXR0b24gYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGJvcmRlcjogM3B4IHNvbGlkICR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGNvbG9yOiAke09MQUZ9XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTRweDtcbiAgcGFkZGluZzogMTJweCAyNHB4O1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmA7XG4iXX0=*/ +/*!****************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts ***! + \****************************************************************************************************************************************************************************/ +.ua13n1c{text-align:var(--ua13n1c-0);} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlDb250YWluZXIudHMiXSwibmFtZXMiOlsiLnVhMTNuMWMiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQ29udGFpbmVyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHRleHQtYWxpZ246ICR7cHJvcHMgPT4gKHByb3BzLnRleHRBbGlnbiA/IHByb3BzLnRleHRBbGlnbiA6ICdpbmhlcml0Jyl9O1xuYDtcbiJdfQ==*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts ***! + \*************************************************************************************************************************************************************************/ +.h1q5v5ee{background-image:var(--h1q5v5ee-0);background-color:#f5f8fa;background-repeat:no-repeat;background-position:center 25px;background-size:120px;color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;padding:var(--h1q5v5ee-1);}.h1q5v5ee p{font-size:inherit !important;line-height:24px;margin:4px 0;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vSHVic3BvdFdyYXBwZXIudHMiXSwibmFtZXMiOlsiLmgxcTV2NWVlIl0sIm1hcHBpbmdzIjoiQUFDZUEiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL0NvbW1vbi9IdWJzcG90V3JhcHBlci50cyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5kaXYgYFxuICBiYWNrZ3JvdW5kLWltYWdlOiAke3Byb3BzID0+IGB1cmwoJHtwcm9wcy5wbHVnaW5QYXRofS9wdWJsaWMvYXNzZXRzL2ltYWdlcy9odWJzcG90LnN2ZylgfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjhmYTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDI1cHg7XG4gIGJhY2tncm91bmQtc2l6ZTogMTIwcHg7XG4gIGNvbG9yOiAjMzM0NzViO1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuXG4gIHBhZGRpbmc6ICR7KHByb3BzKSA9PiBwcm9wcy5wYWRkaW5nIHx8ICc5MHB4IDIwJSAyNXB4J307XG5cbiAgcCB7XG4gICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgfVxuYDtcbiJdfQ==*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts ***! + \*************************************************************************************************************************************************************************/ +.u3qxofx{height:30px;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGFjZXIudHMiXSwibmFtZXMiOlsiLnUzcXhvZngiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJU3BhY2VyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIGhlaWdodDogMzBweDtcbmA7XG4iXX0=*/ +/*!**************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts ***! + \**************************************************************************************************************************************************************************/ +.u1q7a48k{position:relative;}.u1q7a48k:after{content:'';position:absolute;top:0;bottom:0;right:0;left:0;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIl0sIm5hbWVzIjpbIi51MXE3YTQ4ayJdLCJtYXBwaW5ncyI6IkFBQ2VBIiwiZmlsZSI6Ii91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5gO1xuIl19*/ +/*!***************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx ***! + \***************************************************************************************************************************************************************************/ +.sxa9zrc{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#00a4bd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;margin:'2px';} +.s14430wa{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;} +.ct87ghk{fill:none;stroke:var(--ct87ghk-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;} +.avili0h{fill:none;stroke:var(--avili0h-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;}@-webkit-keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@-webkit-keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGlubmVyLnRzeCJdLCJuYW1lcyI6WyIuc3hhOXpyYyIsIi5zMTQ0MzB3YSIsIi5jdDg3Z2hrIiwiLmF2aWxpMGgiXSwibWFwcGluZ3MiOiJBQUdxQkE7QUFVQUM7QUFPTkM7QUFPUUMiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSVNwaW5uZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmltcG9ydCB7IENBTFlQU09fTUVESVVNLCBDQUxZUFNPIH0gZnJvbSAnLi9jb2xvcnMnO1xuY29uc3QgU3Bpbm5lck91dGVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMDBhNGJkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAnMnB4JztcbmA7XG5jb25zdCBTcGlubmVySW5uZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuY29uc3QgQ2lyY2xlID0gc3R5bGVkLmNpcmNsZSBgXG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy5jb2xvcn07XG4gIHN0cm9rZS13aWR0aDogNTtcbiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG5gO1xuY29uc3QgQW5pbWF0ZWRDaXJjbGUgPSBzdHlsZWQuY2lyY2xlIGBcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlOiAke3Byb3BzID0+IHByb3BzLmNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiA1O1xuICBzdHJva2UtbGluZWNhcDogcm91bmQ7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgYW5pbWF0aW9uOiBkYXNoQW5pbWF0aW9uIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLFxuICAgIHNwaW5BbmltYXRpb24gMnMgbGluZWFyIGluZmluaXRlO1xuXG4gIEBrZXlmcmFtZXMgZGFzaEFuaW1hdGlvbiB7XG4gICAgMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTUwO1xuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gICAgfVxuXG4gICAgNTAlIHtcbiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDkwLCAxNTA7XG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogLTUwO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogOTAsIDE1MDtcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTQwO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc3BpbkFuaW1hdGlvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVJU3Bpbm5lcih7IHNpemUgPSAyMCB9KSB7XG4gICAgcmV0dXJuIChfanN4KFNwaW5uZXJPdXRlciwgeyBjaGlsZHJlbjogX2pzeChTcGlubmVySW5uZXIsIHsgY2hpbGRyZW46IF9qc3hzKFwic3ZnXCIsIHsgaGVpZ2h0OiBzaXplLCB3aWR0aDogc2l6ZSwgdmlld0JveDogXCIwIDAgNTAgNTBcIiwgY2hpbGRyZW46IFtfanN4KENpcmNsZSwgeyBjb2xvcjogQ0FMWVBTT19NRURJVU0sIGN4OiBcIjI1XCIsIGN5OiBcIjI1XCIsIHI6IFwiMjIuNVwiIH0pLCBfanN4KEFuaW1hdGVkQ2lyY2xlLCB7IGNvbG9yOiBDQUxZUFNPLCBjeDogXCIyNVwiLCBjeTogXCIyNVwiLCByOiBcIjIyLjVcIiB9KV0gfSkgfSkgfSkpO1xufVxuIl19*/ +/*!***********************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx ***! + \***********************************************************************************************************************************************************************/ +.c1wxx7eu{color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;position:relative;} +.c1rgwbep{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:hsl(0,0%,100%);border-color:hsl(0,0%,80%);border-radius:4px;border-style:solid;border-width:var(--c1rgwbep-0);cursor:default;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:38px;outline:0 !important;position:relative;-webkit-transition:all 100ms;transition:all 100ms;box-sizing:border-box;box-shadow:var(--c1rgwbep-1);}.c1rgwbep:hover{border-color:hsl(0,0%,70%);} +.v1mdmbaj{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:2px 8px;position:relative;overflow:hidden;box-sizing:border-box;} +.p1gwkvxy{color:hsl(0,0%,50%);margin-left:2px;margin-right:2px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;font-size:16px;} +.s1bwlafs{color:hsl(0,0%,20%);margin-left:2px;margin-right:2px;max-width:calc(100% - 8px);overflow:hidden;position:absolute;text-overflow:ellipsis;white-space:nowrap;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;} +.i196z9y5{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;} +.d1dfo5ow{border-top:8px solid #00a4bd;border-left:6px solid transparent;border-right:6px solid transparent;width:0px;height:0px;margin:10px;} +.if3lze{margin:2px;padding-bottom:2px;padding-top:2px;visibility:visible;color:hsl(0,0%,20%);box-sizing:border-box;} +.i9kxf50{box-sizing:content-box;background:rgba(0,0,0,0) none repeat scroll 0px center;border:0px none;font-size:inherit;opacity:1;outline:currentcolor none 0px;padding:0px;color:inherit;font-family:inherit;} +.igjr3uc{position:absolute;opacity:0;font-size:inherit;} +.mhb9if7{position:absolute;top:100%;background-color:#fff;border-radius:4px;margin-bottom:8px;margin-top:8px;z-index:9999;box-shadow:0 0 0 1px hsla(0,0%,0%,0.1),0 4px 11px hsla(0,0%,0%,0.1);width:100%;} +.mxaof7s{max-height:300px;overflow-y:auto;padding-bottom:4px;padding-top:4px;position:relative;} +.mw50s5v{padding-bottom:8px;padding-top:8px;} +.m11rzvjw{color:#999;cursor:default;font-size:75%;font-weight:500;margin-bottom:0.25em;text-transform:uppercase;padding-left:12px;padding-left:12px;} +.m1jcdsjv{display:block;background-color:var(--m1jcdsjv-0);color:var(--m1jcdsjv-1);cursor:default;font-size:inherit;width:100%;padding:8px 12px;}.m1jcdsjv:hover{background-color:var(--m1jcdsjv-2);} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vQXN5bmNTZWxlY3QudHN4Il0sIm5hbWVzIjpbIi5jMXd4eDdldSIsIi5jMXJnd2JlcCIsIi52MW1kbWJhaiIsIi5wMWd3a3Z4eSIsIi5zMWJ3bGFmcyIsIi5pMTk2ejl5NSIsIi5kMWRmbzVvdyIsIi5pZjNsemUiLCIuaTlreGY1MCIsIi5pZ2pyM3VjIiwiLm1oYjlpZjciLCIubXhhb2Y3cyIsIi5tdzUwczV2IiwiLm0xMXJ6dmp3IiwiLm0xamNkc2p2Il0sIm1hcHBpbmdzIjoiQUFNa0JBO0FBTU9DO0FBcUJGQztBQVVIQztBQVVBQztBQWFPQztBQU9EQztBQVFIQztBQVFUQztBQVdNQztBQUtFQztBQVdMQztBQU9DQztBQUlNQztBQVVQQyIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvQ29tbW9uL0FzeW5jU2VsZWN0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBDQUxZUFNPLCBDQUxZUFNPX0xJR0hULCBDQUxZUFNPX01FRElVTSwgT0JTSURJQU4sIH0gZnJvbSAnLi4vVUlDb21wb25lbnRzL2NvbG9ycyc7XG5pbXBvcnQgVUlTcGlubmVyIGZyb20gJy4uL1VJQ29tcG9uZW50cy9VSVNwaW5uZXInO1xuaW1wb3J0IExvYWRTdGF0ZSBmcm9tICcuLi9lbnVtcy9sb2FkU3RhdGUnO1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiAke09CU0lESUFOfTtcbiAgZm9udC1mYW1pbHk6ICdMZXhlbmQgRGVjYScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcbmNvbnN0IENvbnRyb2xDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDAsIDAlLCAxMDAlKTtcbiAgYm9yZGVyLWNvbG9yOiBoc2woMCwgMCUsIDgwJSk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAke3Byb3BzID0+IChwcm9wcy5mb2N1c2VkID8gJzAnIDogJzFweCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWluLWhlaWdodDogMzhweDtcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IGFsbCAxMDBtcztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogJHtwcm9wcyA9PiBwcm9wcy5mb2N1c2VkID8gYDAgMCAwIDJweCAke0NBTFlQU09fTUVESVVNfWAgOiAnbm9uZSd9O1xuICAmOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IGhzbCgwLCAwJSwgNzAlKTtcbiAgfVxuYDtcbmNvbnN0IFZhbHVlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZzogMnB4IDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IFBsYWNlaG9sZGVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiBoc2woMCwgMCUsIDUwJSk7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZvbnQtc2l6ZTogMTZweDtcbmA7XG5jb25zdCBTaW5nbGVWYWx1ZSA9IHN0eWxlZC5kaXYgYFxuICBjb2xvcjogaHNsKDAsIDAlLCAyMCUpO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA4cHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IEluZGljYXRvckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXNocmluazogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbmA7XG5jb25zdCBEcm9wZG93bkluZGljYXRvciA9IHN0eWxlZC5kaXYgYFxuICBib3JkZXItdG9wOiA4cHggc29saWQgJHtDQUxZUFNPfTtcbiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdpZHRoOiAwcHg7XG4gIGhlaWdodDogMHB4O1xuICBtYXJnaW46IDEwcHg7XG5gO1xuY29uc3QgSW5wdXRDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luOiAycHg7XG4gIHBhZGRpbmctYm90dG9tOiAycHg7XG4gIHBhZGRpbmctdG9wOiAycHg7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGNvbG9yOiBoc2woMCwgMCUsIDIwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5gO1xuY29uc3QgSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKSBub25lIHJlcGVhdCBzY3JvbGwgMHB4IGNlbnRlcjtcbiAgYm9yZGVyOiAwcHggbm9uZTtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBvcGFjaXR5OiAxO1xuICBvdXRsaW5lOiBjdXJyZW50Y29sb3Igbm9uZSAwcHg7XG4gIHBhZGRpbmc6IDBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuYDtcbmNvbnN0IElucHV0U2hhZG93ID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3BhY2l0eTogMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuYDtcbmNvbnN0IE1lbnVDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIHotaW5kZXg6IDk5OTk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuY29uc3QgTWVudUxpc3QgPSBzdHlsZWQuZGl2IGBcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gIHBhZGRpbmctdG9wOiA0cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG5jb25zdCBNZW51R3JvdXAgPSBzdHlsZWQuZGl2IGBcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgcGFkZGluZy10b3A6IDhweDtcbmA7XG5jb25zdCBNZW51R3JvdXBIZWFkZXIgPSBzdHlsZWQuZGl2IGBcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIG1hcmdpbi1ib3R0b206IDAuMjVlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG5gO1xuY29uc3QgTWVudUl0ZW0gPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuc2VsZWN0ZWQgPyBDQUxZUFNPX01FRElVTSA6ICd0cmFuc3BhcmVudCd9O1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2ZmZicgOiAnaW5oZXJpdCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiA4cHggMTJweDtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCA/IENBTFlQU09fTUVESVVNIDogQ0FMWVBTT19MSUdIVH07XG4gIH1cbmA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBc3luY1NlbGVjdCh7IHBsYWNlaG9sZGVyLCB2YWx1ZSwgbG9hZE9wdGlvbnMsIG9uQ2hhbmdlLCBkZWZhdWx0T3B0aW9ucywgfSkge1xuICAgIGNvbnN0IGlucHV0RWwgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaW5wdXRTaGFkb3dFbCA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbaXNGb2N1c2VkLCBzZXRGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2xvYWRTdGF0ZSwgc2V0TG9hZFN0YXRlXSA9IHVzZVN0YXRlKExvYWRTdGF0ZS5Ob3RMb2FkZWQpO1xuICAgIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgY29uc3QgaW5wdXRTaXplID0gYCR7aW5wdXRTaGFkb3dFbC5jdXJyZW50ID8gaW5wdXRTaGFkb3dFbC5jdXJyZW50LmNsaWVudFdpZHRoICsgMTAgOiAyfXB4YDtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobG9hZE9wdGlvbnMgJiYgbG9hZFN0YXRlID09PSBMb2FkU3RhdGUuTm90TG9hZGVkKSB7XG4gICAgICAgICAgICBsb2FkT3B0aW9ucygnJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldE9wdGlvbnMocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLklkbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbbG9hZE9wdGlvbnMsIGxvYWRTdGF0ZV0pO1xuICAgIGNvbnN0IHJlbmRlckl0ZW1zID0gKGl0ZW1zID0gW10sIHBhcmVudEtleSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeHMoTWVudUdyb3VwLCB7IGNoaWxkcmVuOiBbX2pzeChNZW51R3JvdXBIZWFkZXIsIHsgaWQ6IGAke2luZGV4fS1oZWFkaW5nYCwgY2hpbGRyZW46IGl0ZW0ubGFiZWwgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogcmVuZGVySXRlbXMoaXRlbS5vcHRpb25zLCBpbmRleCkgfSldIH0sIGBhc3luYy1zZWxlY3QtaXRlbS0ke2luZGV4fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGBhc3luYy1zZWxlY3QtaXRlbS0ke3BhcmVudEtleSAhPT0gdW5kZWZpbmVkID8gYCR7cGFyZW50S2V5fS0ke2luZGV4fWAgOiBpbmRleH1gO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChNZW51SXRlbSwgeyBpZDoga2V5LCBzZWxlY3RlZDogdmFsdWUgJiYgaXRlbS52YWx1ZSA9PT0gdmFsdWUudmFsdWUsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogaXRlbS5sYWJlbCB9LCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3hzKENvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKENvbnRyb2xDb250YWluZXIsIHsgaWQ6IFwibGVhZGluLWFzeW5jLXNlbGVjdG9yXCIsIGZvY3VzZWQ6IGlzRm9jdXNlZCwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbC5jdXJyZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWwuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWwuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW19qc3hzKFZhbHVlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbbG9jYWxWYWx1ZSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF2YWx1ZSA/IChfanN4KFBsYWNlaG9sZGVyLCB7IGNoaWxkcmVuOiBwbGFjZWhvbGRlciB9KSkgOiAoX2pzeChTaW5nbGVWYWx1ZSwgeyBjaGlsZHJlbjogdmFsdWUubGFiZWwgfSkpKSwgX2pzeHMoSW5wdXRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KElucHV0LCB7IHJlZjogaW5wdXRFbCwgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb2N1cyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkNoYW5nZTogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLkxvYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnMoZS50YXJnZXQudmFsdWUsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRPcHRpb25zKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZFN0YXRlKExvYWRTdGF0ZS5JZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbHVlOiBsb2NhbFZhbHVlLCB3aWR0aDogaW5wdXRTaXplLCBpZDogXCJhc3ljbi1zZWxlY3QtaW5wdXRcIiB9KSwgX2pzeChJbnB1dFNoYWRvdywgeyByZWY6IGlucHV0U2hhZG93RWwsIGNoaWxkcmVuOiBsb2NhbFZhbHVlIH0pXSB9KV0gfSksIF9qc3hzKEluZGljYXRvckNvbnRhaW5lciwgeyBjaGlsZHJlbjogW2xvYWRTdGF0ZSA9PT0gTG9hZFN0YXRlLkxvYWRpbmcgJiYgX2pzeChVSVNwaW5uZXIsIHt9KSwgX2pzeChEcm9wZG93bkluZGljYXRvciwge30pXSB9KV0gfSksIGlzRm9jdXNlZCAmJiAoX2pzeChNZW51Q29udGFpbmVyLCB7IGNoaWxkcmVuOiBfanN4KE1lbnVMaXN0LCB7IGNoaWxkcmVuOiByZW5kZXJJdGVtcyhvcHRpb25zKSB9KSB9KSldIH0pKTtcbn1cbiJdfQ==*/ +/*!*************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx ***! + \*************************************************************************************************************************************************************************/ +.a1h8m4fo{background-color:#fef8f0;border-color:#fae0b5;color:#33475b;font-size:14px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-style:solid;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-width:1px;min-height:60px;padding:8px 20px;position:relative;text-align:left;} +.tyndzxk{font-family:'Lexend Deca';font-style:normal;font-weight:700;font-size:16px;line-height:19px;color:#33475b;margin:0;padding:0;} +.m1m9sbk4{font-family:'Lexend Deca';font-style:normal;font-weight:400;font-size:14px;margin:0;padding:0;} +.mg5o421{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlBbGVydC50c3giXSwibmFtZXMiOlsiLmExaDhtNGZvIiwiLnR5bmR6eGsiLCIubTFtOXNiazQiLCIubWc1bzQyMSJdLCJtYXBwaW5ncyI6IkFBR3VCQTtBQW1CVEM7QUFVRUM7QUFRU0MiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSUFsZXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBNQVJJR09MRF9MSUdIVCwgTUFSSUdPTERfTUVESVVNLCBPQlNJRElBTiB9IGZyb20gJy4vY29sb3JzJztcbmNvbnN0IEFsZXJ0Q29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7TUFSSUdPTERfTElHSFR9O1xuICBib3JkZXItY29sb3I6ICR7TUFSSUdPTERfTUVESVVNfTtcbiAgY29sb3I6ICR7T0JTSURJQU59O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBtaW4taGVpZ2h0OiA2MHB4O1xuICBwYWRkaW5nOiA4cHggMjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuYDtcbmNvbnN0IFRpdGxlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICBjb2xvcjogJHtPQlNJRElBTn07XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVUlBbGVydCh7IHRpdGxlVGV4dCwgdGl0bGVNZXNzYWdlLCBjaGlsZHJlbiwgfSkge1xuICAgIHJldHVybiAoX2pzeHMoQWxlcnRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhNZXNzYWdlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChUaXRsZSwgeyBjaGlsZHJlbjogdGl0bGVUZXh0IH0pLCBfanN4KE1lc3NhZ2UsIHsgY2hpbGRyZW46IHRpdGxlTWVzc2FnZSB9KV0gfSksIGNoaWxkcmVuXSB9KSk7XG59XG4iXX0=*/ + +/*# sourceMappingURL=gutenberg.css.map*/ \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/gutenberg.css.map b/wp/wp-content/plugins/leadin/build/gutenberg.css.map new file mode 100644 index 00000000..3d4d7b5b --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/gutenberg.css.map @@ -0,0 +1 @@ +{"version":3,"file":"gutenberg.css","mappings":"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","sources":["webpack://leadin/./scripts/gutenberg/UIComponents/UIImage.ts","webpack://leadin/./scripts/gutenberg/UIComponents/UIImage.ts","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts","webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx","webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx"],"sourcesContent":["import { styled } from '@linaria/react';\nexport default styled.img `\n height: ${props => (props.height ? props.height : 'auto')};\n width: ${props => (props.width ? props.width : 'auto')};\n`;\n",".ump7xqy{height:var(--ump7xqy-0);width:var(--ump7xqy-1);}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2d1dGVuYmVyZy9VSUNvbXBvbmVudHMvVUlJbWFnZS50cyJdLCJuYW1lcyI6WyIudW1wN3hxeSJdLCJtYXBwaW5ncyI6IkFBQ2VBIiwiZmlsZSI6Ii91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2d1dGVuYmVyZy9VSUNvbXBvbmVudHMvVUlJbWFnZS50cyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5pbWcgYFxuICBoZWlnaHQ6ICR7cHJvcHMgPT4gKHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICdhdXRvJyl9O1xuICB3aWR0aDogJHtwcm9wcyA9PiAocHJvcHMud2lkdGggPyBwcm9wcy53aWR0aCA6ICdhdXRvJyl9O1xuYDtcbiJdfQ==*/","import { styled } from '@linaria/react';\nimport { HEFFALUMP, LORAX, OLAF } from './colors';\nexport default styled.button `\n background-color:${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n border: 3px solid ${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n color: ${OLAF}\n border-radius: 3px;\n font-size: 14px;\n line-height: 14px;\n padding: 12px 24px;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-weight: 500;\n white-space: nowrap;\n`;\n",".ug152ch{background-color:var(--ug152ch-0);border:3px solid var(--ug152ch-0);color:#ffffff;border-radius:3px;font-size:14px;line-height:14px;padding:12px 24px;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-weight:500;white-space:nowrap;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlCdXR0b24udHMiXSwibmFtZXMiOlsiLnVnMTUyY2giXSwibWFwcGluZ3MiOiJBQUVlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQnV0dG9uLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuaW1wb3J0IHsgSEVGRkFMVU1QLCBMT1JBWCwgT0xBRiB9IGZyb20gJy4vY29sb3JzJztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5idXR0b24gYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGJvcmRlcjogM3B4IHNvbGlkICR7cHJvcHMgPT4gKHByb3BzLnVzZSA9PT0gJ3RlcnRpYXJ5JyA/IEhFRkZBTFVNUCA6IExPUkFYKX07XG4gIGNvbG9yOiAke09MQUZ9XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTRweDtcbiAgcGFkZGluZzogMTJweCAyNHB4O1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbmA7XG4iXX0=*/","import { styled } from '@linaria/react';\nexport default styled.div `\n text-align: ${props => (props.textAlign ? props.textAlign : 'inherit')};\n`;\n",".ua13n1c{text-align:var(--ua13n1c-0);}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlDb250YWluZXIudHMiXSwibmFtZXMiOlsiLnVhMTNuMWMiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJQ29udGFpbmVyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHRleHQtYWxpZ246ICR7cHJvcHMgPT4gKHByb3BzLnRleHRBbGlnbiA/IHByb3BzLnRleHRBbGlnbiA6ICdpbmhlcml0Jyl9O1xuYDtcbiJdfQ==*/","import { styled } from '@linaria/react';\nexport default styled.div `\n background-image: ${props => `url(${props.pluginPath}/public/assets/images/hubspot.svg)`};\n background-color: #f5f8fa;\n background-repeat: no-repeat;\n background-position: center 25px;\n background-size: 120px;\n color: #33475b;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n\n padding: ${(props) => props.padding || '90px 20% 25px'};\n\n p {\n font-size: inherit !important;\n line-height: 24px;\n margin: 4px 0;\n }\n`;\n",".h1q5v5ee{background-image:var(--h1q5v5ee-0);background-color:#f5f8fa;background-repeat:no-repeat;background-position:center 25px;background-size:120px;color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;padding:var(--h1q5v5ee-1);}.h1q5v5ee p{font-size:inherit !important;line-height:24px;margin:4px 0;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vSHVic3BvdFdyYXBwZXIudHMiXSwibmFtZXMiOlsiLmgxcTV2NWVlIl0sIm1hcHBpbmdzIjoiQUFDZUEiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL0NvbW1vbi9IdWJzcG90V3JhcHBlci50cyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZC5kaXYgYFxuICBiYWNrZ3JvdW5kLWltYWdlOiAke3Byb3BzID0+IGB1cmwoJHtwcm9wcy5wbHVnaW5QYXRofS9wdWJsaWMvYXNzZXRzL2ltYWdlcy9odWJzcG90LnN2ZylgfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjhmYTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDI1cHg7XG4gIGJhY2tncm91bmQtc2l6ZTogMTIwcHg7XG4gIGNvbG9yOiAjMzM0NzViO1xuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuXG4gIHBhZGRpbmc6ICR7KHByb3BzKSA9PiBwcm9wcy5wYWRkaW5nIHx8ICc5MHB4IDIwJSAyNXB4J307XG5cbiAgcCB7XG4gICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgfVxuYDtcbiJdfQ==*/","import { styled } from '@linaria/react';\nexport default styled.div `\n height: 30px;\n`;\n",".u3qxofx{height:30px;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGFjZXIudHMiXSwibmFtZXMiOlsiLnUzcXhvZngiXSwibWFwcGluZ3MiOiJBQUNlQSIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvVUlDb21wb25lbnRzL1VJU3BhY2VyLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIGhlaWdodDogMzBweDtcbmA7XG4iXX0=*/","import { styled } from '@linaria/react';\nexport default styled.div `\n position: relative;\n\n &:after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n }\n`;\n",".u1q7a48k{position:relative;}.u1q7a48k:after{content:'';position:absolute;top:0;bottom:0;right:0;left:0;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIl0sIm5hbWVzIjpbIi51MXE3YTQ4ayJdLCJtYXBwaW5ncyI6IkFBQ2VBIiwiZmlsZSI6Ii91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlPdmVybGF5LnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQGxpbmFyaWEvcmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5gO1xuIl19*/","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { CALYPSO_MEDIUM, CALYPSO } from './colors';\nconst SpinnerOuter = styled.div `\n align-items: center;\n color: #00a4bd;\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 100%;\n height: 100%;\n margin: '2px';\n`;\nconst SpinnerInner = styled.div `\n align-items: center;\n display: flex;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\nconst Circle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n`;\nconst AnimatedCircle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n animation: dashAnimation 2s ease-in-out infinite,\n spinAnimation 2s linear infinite;\n\n @keyframes dashAnimation {\n 0% {\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -50;\n }\n\n 100% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -140;\n }\n }\n\n @keyframes spinAnimation {\n transform: rotate(360deg);\n }\n`;\nexport default function UISpinner({ size = 20 }) {\n return (_jsx(SpinnerOuter, { children: _jsx(SpinnerInner, { children: _jsxs(\"svg\", { height: size, width: size, viewBox: \"0 0 50 50\", children: [_jsx(Circle, { color: CALYPSO_MEDIUM, cx: \"25\", cy: \"25\", r: \"22.5\" }), _jsx(AnimatedCircle, { color: CALYPSO, cx: \"25\", cy: \"25\", r: \"22.5\" })] }) }) }));\n}\n",".sxa9zrc{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#00a4bd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;margin:'2px';}\n.s14430wa{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;}\n.ct87ghk{fill:none;stroke:var(--ct87ghk-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;}\n.avili0h{fill:none;stroke:var(--avili0h-0);stroke-width:5;stroke-linecap:round;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;animation:dashAnimation-avili0h 2s ease-in-out infinite,spinAnimation-avili0h 2s linear infinite;}@-webkit-keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@keyframes dashAnimation-avili0h{0%{stroke-dasharray:1,150;stroke-dashoffset:0;}50%{stroke-dasharray:90,150;stroke-dashoffset:-50;}100%{stroke-dasharray:90,150;stroke-dashoffset:-140;}}@-webkit-keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes spinAnimation-avili0h{{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlTcGlubmVyLnRzeCJdLCJuYW1lcyI6WyIuc3hhOXpyYyIsIi5zMTQ0MzB3YSIsIi5jdDg3Z2hrIiwiLmF2aWxpMGgiXSwibWFwcGluZ3MiOiJBQUdxQkE7QUFVQUM7QUFPTkM7QUFPUUMiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSVNwaW5uZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BsaW5hcmlhL3JlYWN0JztcbmltcG9ydCB7IENBTFlQU09fTUVESVVNLCBDQUxZUFNPIH0gZnJvbSAnLi9jb2xvcnMnO1xuY29uc3QgU3Bpbm5lck91dGVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMDBhNGJkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAnMnB4JztcbmA7XG5jb25zdCBTcGlubmVySW5uZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuY29uc3QgQ2lyY2xlID0gc3R5bGVkLmNpcmNsZSBgXG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy5jb2xvcn07XG4gIHN0cm9rZS13aWR0aDogNTtcbiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG5gO1xuY29uc3QgQW5pbWF0ZWRDaXJjbGUgPSBzdHlsZWQuY2lyY2xlIGBcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlOiAke3Byb3BzID0+IHByb3BzLmNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiA1O1xuICBzdHJva2UtbGluZWNhcDogcm91bmQ7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgYW5pbWF0aW9uOiBkYXNoQW5pbWF0aW9uIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlLFxuICAgIHNwaW5BbmltYXRpb24gMnMgbGluZWFyIGluZmluaXRlO1xuXG4gIEBrZXlmcmFtZXMgZGFzaEFuaW1hdGlvbiB7XG4gICAgMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTUwO1xuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gICAgfVxuXG4gICAgNTAlIHtcbiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDkwLCAxNTA7XG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogLTUwO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogOTAsIDE1MDtcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTQwO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc3BpbkFuaW1hdGlvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVJU3Bpbm5lcih7IHNpemUgPSAyMCB9KSB7XG4gICAgcmV0dXJuIChfanN4KFNwaW5uZXJPdXRlciwgeyBjaGlsZHJlbjogX2pzeChTcGlubmVySW5uZXIsIHsgY2hpbGRyZW46IF9qc3hzKFwic3ZnXCIsIHsgaGVpZ2h0OiBzaXplLCB3aWR0aDogc2l6ZSwgdmlld0JveDogXCIwIDAgNTAgNTBcIiwgY2hpbGRyZW46IFtfanN4KENpcmNsZSwgeyBjb2xvcjogQ0FMWVBTT19NRURJVU0sIGN4OiBcIjI1XCIsIGN5OiBcIjI1XCIsIHI6IFwiMjIuNVwiIH0pLCBfanN4KEFuaW1hdGVkQ2lyY2xlLCB7IGNvbG9yOiBDQUxZUFNPLCBjeDogXCIyNVwiLCBjeTogXCIyNVwiLCByOiBcIjIyLjVcIiB9KV0gfSkgfSkgfSkpO1xufVxuIl19*/","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef, useState, useEffect } from 'react';\nimport { styled } from '@linaria/react';\nimport { CALYPSO, CALYPSO_LIGHT, CALYPSO_MEDIUM, OBSIDIAN, } from '../UIComponents/colors';\nimport UISpinner from '../UIComponents/UISpinner';\nimport LoadState from '../enums/loadState';\nconst Container = styled.div `\n color: ${OBSIDIAN};\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n position: relative;\n`;\nconst ControlContainer = styled.div `\n align-items: center;\n background-color: hsl(0, 0%, 100%);\n border-color: hsl(0, 0%, 80%);\n border-radius: 4px;\n border-style: solid;\n border-width: ${props => (props.focused ? '0' : '1px')};\n cursor: default;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n min-height: 38px;\n outline: 0 !important;\n position: relative;\n transition: all 100ms;\n box-sizing: border-box;\n box-shadow: ${props => props.focused ? `0 0 0 2px ${CALYPSO_MEDIUM}` : 'none'};\n &:hover {\n border-color: hsl(0, 0%, 70%);\n }\n`;\nconst ValueContainer = styled.div `\n align-items: center;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n padding: 2px 8px;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n`;\nconst Placeholder = styled.div `\n color: hsl(0, 0%, 50%);\n margin-left: 2px;\n margin-right: 2px;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n font-size: 16px;\n`;\nconst SingleValue = styled.div `\n color: hsl(0, 0%, 20%);\n margin-left: 2px;\n margin-right: 2px;\n max-width: calc(100% - 8px);\n overflow: hidden;\n position: absolute;\n text-overflow: ellipsis;\n white-space: nowrap;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n`;\nconst IndicatorContainer = styled.div `\n align-items: center;\n align-self: stretch;\n display: flex;\n flex-shrink: 0;\n box-sizing: border-box;\n`;\nconst DropdownIndicator = styled.div `\n border-top: 8px solid ${CALYPSO};\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n width: 0px;\n height: 0px;\n margin: 10px;\n`;\nconst InputContainer = styled.div `\n margin: 2px;\n padding-bottom: 2px;\n padding-top: 2px;\n visibility: visible;\n color: hsl(0, 0%, 20%);\n box-sizing: border-box;\n`;\nconst Input = styled.input `\n box-sizing: content-box;\n background: rgba(0, 0, 0, 0) none repeat scroll 0px center;\n border: 0px none;\n font-size: inherit;\n opacity: 1;\n outline: currentcolor none 0px;\n padding: 0px;\n color: inherit;\n font-family: inherit;\n`;\nconst InputShadow = styled.div `\n position: absolute;\n opacity: 0;\n font-size: inherit;\n`;\nconst MenuContainer = styled.div `\n position: absolute;\n top: 100%;\n background-color: #fff;\n border-radius: 4px;\n margin-bottom: 8px;\n margin-top: 8px;\n z-index: 9999;\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1);\n width: 100%;\n`;\nconst MenuList = styled.div `\n max-height: 300px;\n overflow-y: auto;\n padding-bottom: 4px;\n padding-top: 4px;\n position: relative;\n`;\nconst MenuGroup = styled.div `\n padding-bottom: 8px;\n padding-top: 8px;\n`;\nconst MenuGroupHeader = styled.div `\n color: #999;\n cursor: default;\n font-size: 75%;\n font-weight: 500;\n margin-bottom: 0.25em;\n text-transform: uppercase;\n padding-left: 12px;\n padding-left: 12px;\n`;\nconst MenuItem = styled.div `\n display: block;\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : 'transparent'};\n color: ${props => (props.selected ? '#fff' : 'inherit')};\n cursor: default;\n font-size: inherit;\n width: 100%;\n padding: 8px 12px;\n &:hover {\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : CALYPSO_LIGHT};\n }\n`;\nexport default function AsyncSelect({ placeholder, value, loadOptions, onChange, defaultOptions, }) {\n const inputEl = useRef(null);\n const inputShadowEl = useRef(null);\n const [isFocused, setFocus] = useState(false);\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [localValue, setLocalValue] = useState('');\n const [options, setOptions] = useState(defaultOptions);\n const inputSize = `${inputShadowEl.current ? inputShadowEl.current.clientWidth + 10 : 2}px`;\n useEffect(() => {\n if (loadOptions && loadState === LoadState.NotLoaded) {\n loadOptions('', (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }\n }, [loadOptions, loadState]);\n const renderItems = (items = [], parentKey) => {\n return items.map((item, index) => {\n if (item.options) {\n return (_jsxs(MenuGroup, { children: [_jsx(MenuGroupHeader, { id: `${index}-heading`, children: item.label }), _jsx(\"div\", { children: renderItems(item.options, index) })] }, `async-select-item-${index}`));\n }\n else {\n const key = `async-select-item-${parentKey !== undefined ? `${parentKey}-${index}` : index}`;\n return (_jsx(MenuItem, { id: key, selected: value && item.value === value.value, onClick: () => {\n onChange(item);\n setFocus(false);\n }, children: item.label }, key));\n }\n });\n };\n return (_jsxs(Container, { children: [_jsxs(ControlContainer, { id: \"leadin-async-selector\", focused: isFocused, onClick: () => {\n if (isFocused) {\n if (inputEl.current) {\n inputEl.current.blur();\n }\n setFocus(false);\n setLocalValue('');\n }\n else {\n if (inputEl.current) {\n inputEl.current.focus();\n }\n setFocus(true);\n }\n }, children: [_jsxs(ValueContainer, { children: [localValue === '' &&\n (!value ? (_jsx(Placeholder, { children: placeholder })) : (_jsx(SingleValue, { children: value.label }))), _jsxs(InputContainer, { children: [_jsx(Input, { ref: inputEl, onFocus: () => {\n setFocus(true);\n }, onChange: e => {\n setLocalValue(e.target.value);\n setLoadState(LoadState.Loading);\n loadOptions &&\n loadOptions(e.target.value, (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }, value: localValue, width: inputSize, id: \"asycn-select-input\" }), _jsx(InputShadow, { ref: inputShadowEl, children: localValue })] })] }), _jsxs(IndicatorContainer, { children: [loadState === LoadState.Loading && _jsx(UISpinner, {}), _jsx(DropdownIndicator, {})] })] }), isFocused && (_jsx(MenuContainer, { children: _jsx(MenuList, { children: renderItems(options) }) }))] }));\n}\n",".c1wxx7eu{color:#33475b;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-size:14px;position:relative;}\n.c1rgwbep{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:hsl(0,0%,100%);border-color:hsl(0,0%,80%);border-radius:4px;border-style:solid;border-width:var(--c1rgwbep-0);cursor:default;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:38px;outline:0 !important;position:relative;-webkit-transition:all 100ms;transition:all 100ms;box-sizing:border-box;box-shadow:var(--c1rgwbep-1);}.c1rgwbep:hover{border-color:hsl(0,0%,70%);}\n.v1mdmbaj{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:2px 8px;position:relative;overflow:hidden;box-sizing:border-box;}\n.p1gwkvxy{color:hsl(0,0%,50%);margin-left:2px;margin-right:2px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;font-size:16px;}\n.s1bwlafs{color:hsl(0,0%,20%);margin-left:2px;margin-right:2px;max-width:calc(100% - 8px);overflow:hidden;position:absolute;text-overflow:ellipsis;white-space:nowrap;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);box-sizing:border-box;}\n.i196z9y5{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;}\n.d1dfo5ow{border-top:8px solid #00a4bd;border-left:6px solid transparent;border-right:6px solid transparent;width:0px;height:0px;margin:10px;}\n.if3lze{margin:2px;padding-bottom:2px;padding-top:2px;visibility:visible;color:hsl(0,0%,20%);box-sizing:border-box;}\n.i9kxf50{box-sizing:content-box;background:rgba(0,0,0,0) none repeat scroll 0px center;border:0px none;font-size:inherit;opacity:1;outline:currentcolor none 0px;padding:0px;color:inherit;font-family:inherit;}\n.igjr3uc{position:absolute;opacity:0;font-size:inherit;}\n.mhb9if7{position:absolute;top:100%;background-color:#fff;border-radius:4px;margin-bottom:8px;margin-top:8px;z-index:9999;box-shadow:0 0 0 1px hsla(0,0%,0%,0.1),0 4px 11px hsla(0,0%,0%,0.1);width:100%;}\n.mxaof7s{max-height:300px;overflow-y:auto;padding-bottom:4px;padding-top:4px;position:relative;}\n.mw50s5v{padding-bottom:8px;padding-top:8px;}\n.m11rzvjw{color:#999;cursor:default;font-size:75%;font-weight:500;margin-bottom:0.25em;text-transform:uppercase;padding-left:12px;padding-left:12px;}\n.m1jcdsjv{display:block;background-color:var(--m1jcdsjv-0);color:var(--m1jcdsjv-1);cursor:default;font-size:inherit;width:100%;padding:8px 12px;}.m1jcdsjv:hover{background-color:var(--m1jcdsjv-2);}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9Db21tb24vQXN5bmNTZWxlY3QudHN4Il0sIm5hbWVzIjpbIi5jMXd4eDdldSIsIi5jMXJnd2JlcCIsIi52MW1kbWJhaiIsIi5wMWd3a3Z4eSIsIi5zMWJ3bGFmcyIsIi5pMTk2ejl5NSIsIi5kMWRmbzVvdyIsIi5pZjNsemUiLCIuaTlreGY1MCIsIi5pZ2pyM3VjIiwiLm1oYjlpZjciLCIubXhhb2Y3cyIsIi5tdzUwczV2IiwiLm0xMXJ6dmp3IiwiLm0xamNkc2p2Il0sIm1hcHBpbmdzIjoiQUFNa0JBO0FBTU9DO0FBcUJGQztBQVVIQztBQVVBQztBQWFPQztBQU9EQztBQVFIQztBQVFUQztBQVdNQztBQUtFQztBQVdMQztBQU9DQztBQUlNQztBQVVQQyIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9zaGFyZWQvQ29tbW9uL0FzeW5jU2VsZWN0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBDQUxZUFNPLCBDQUxZUFNPX0xJR0hULCBDQUxZUFNPX01FRElVTSwgT0JTSURJQU4sIH0gZnJvbSAnLi4vVUlDb21wb25lbnRzL2NvbG9ycyc7XG5pbXBvcnQgVUlTcGlubmVyIGZyb20gJy4uL1VJQ29tcG9uZW50cy9VSVNwaW5uZXInO1xuaW1wb3J0IExvYWRTdGF0ZSBmcm9tICcuLi9lbnVtcy9sb2FkU3RhdGUnO1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiAke09CU0lESUFOfTtcbiAgZm9udC1mYW1pbHk6ICdMZXhlbmQgRGVjYScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcbmNvbnN0IENvbnRyb2xDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDAsIDAlLCAxMDAlKTtcbiAgYm9yZGVyLWNvbG9yOiBoc2woMCwgMCUsIDgwJSk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiAke3Byb3BzID0+IChwcm9wcy5mb2N1c2VkID8gJzAnIDogJzFweCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWluLWhlaWdodDogMzhweDtcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IGFsbCAxMDBtcztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogJHtwcm9wcyA9PiBwcm9wcy5mb2N1c2VkID8gYDAgMCAwIDJweCAke0NBTFlQU09fTUVESVVNfWAgOiAnbm9uZSd9O1xuICAmOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IGhzbCgwLCAwJSwgNzAlKTtcbiAgfVxuYDtcbmNvbnN0IFZhbHVlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZzogMnB4IDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IFBsYWNlaG9sZGVyID0gc3R5bGVkLmRpdiBgXG4gIGNvbG9yOiBoc2woMCwgMCUsIDUwJSk7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZvbnQtc2l6ZTogMTZweDtcbmA7XG5jb25zdCBTaW5nbGVWYWx1ZSA9IHN0eWxlZC5kaXYgYFxuICBjb2xvcjogaHNsKDAsIDAlLCAyMCUpO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA4cHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYDtcbmNvbnN0IEluZGljYXRvckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXNocmluazogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbmA7XG5jb25zdCBEcm9wZG93bkluZGljYXRvciA9IHN0eWxlZC5kaXYgYFxuICBib3JkZXItdG9wOiA4cHggc29saWQgJHtDQUxZUFNPfTtcbiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdpZHRoOiAwcHg7XG4gIGhlaWdodDogMHB4O1xuICBtYXJnaW46IDEwcHg7XG5gO1xuY29uc3QgSW5wdXRDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luOiAycHg7XG4gIHBhZGRpbmctYm90dG9tOiAycHg7XG4gIHBhZGRpbmctdG9wOiAycHg7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGNvbG9yOiBoc2woMCwgMCUsIDIwJSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5gO1xuY29uc3QgSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKSBub25lIHJlcGVhdCBzY3JvbGwgMHB4IGNlbnRlcjtcbiAgYm9yZGVyOiAwcHggbm9uZTtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBvcGFjaXR5OiAxO1xuICBvdXRsaW5lOiBjdXJyZW50Y29sb3Igbm9uZSAwcHg7XG4gIHBhZGRpbmc6IDBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuYDtcbmNvbnN0IElucHV0U2hhZG93ID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3BhY2l0eTogMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuYDtcbmNvbnN0IE1lbnVDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIHotaW5kZXg6IDk5OTk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKSwgMCA0cHggMTFweCBoc2xhKDAsIDAlLCAwJSwgMC4xKTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuY29uc3QgTWVudUxpc3QgPSBzdHlsZWQuZGl2IGBcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gIHBhZGRpbmctdG9wOiA0cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG5jb25zdCBNZW51R3JvdXAgPSBzdHlsZWQuZGl2IGBcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgcGFkZGluZy10b3A6IDhweDtcbmA7XG5jb25zdCBNZW51R3JvdXBIZWFkZXIgPSBzdHlsZWQuZGl2IGBcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIG1hcmdpbi1ib3R0b206IDAuMjVlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG5gO1xuY29uc3QgTWVudUl0ZW0gPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuc2VsZWN0ZWQgPyBDQUxZUFNPX01FRElVTSA6ICd0cmFuc3BhcmVudCd9O1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2ZmZicgOiAnaW5oZXJpdCcpfTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiA4cHggMTJweDtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCA/IENBTFlQU09fTUVESVVNIDogQ0FMWVBTT19MSUdIVH07XG4gIH1cbmA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBc3luY1NlbGVjdCh7IHBsYWNlaG9sZGVyLCB2YWx1ZSwgbG9hZE9wdGlvbnMsIG9uQ2hhbmdlLCBkZWZhdWx0T3B0aW9ucywgfSkge1xuICAgIGNvbnN0IGlucHV0RWwgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaW5wdXRTaGFkb3dFbCA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbaXNGb2N1c2VkLCBzZXRGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2xvYWRTdGF0ZSwgc2V0TG9hZFN0YXRlXSA9IHVzZVN0YXRlKExvYWRTdGF0ZS5Ob3RMb2FkZWQpO1xuICAgIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZShkZWZhdWx0T3B0aW9ucyk7XG4gICAgY29uc3QgaW5wdXRTaXplID0gYCR7aW5wdXRTaGFkb3dFbC5jdXJyZW50ID8gaW5wdXRTaGFkb3dFbC5jdXJyZW50LmNsaWVudFdpZHRoICsgMTAgOiAyfXB4YDtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobG9hZE9wdGlvbnMgJiYgbG9hZFN0YXRlID09PSBMb2FkU3RhdGUuTm90TG9hZGVkKSB7XG4gICAgICAgICAgICBsb2FkT3B0aW9ucygnJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldE9wdGlvbnMocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLklkbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbbG9hZE9wdGlvbnMsIGxvYWRTdGF0ZV0pO1xuICAgIGNvbnN0IHJlbmRlckl0ZW1zID0gKGl0ZW1zID0gW10sIHBhcmVudEtleSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeHMoTWVudUdyb3VwLCB7IGNoaWxkcmVuOiBbX2pzeChNZW51R3JvdXBIZWFkZXIsIHsgaWQ6IGAke2luZGV4fS1oZWFkaW5nYCwgY2hpbGRyZW46IGl0ZW0ubGFiZWwgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogcmVuZGVySXRlbXMoaXRlbS5vcHRpb25zLCBpbmRleCkgfSldIH0sIGBhc3luYy1zZWxlY3QtaXRlbS0ke2luZGV4fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGBhc3luYy1zZWxlY3QtaXRlbS0ke3BhcmVudEtleSAhPT0gdW5kZWZpbmVkID8gYCR7cGFyZW50S2V5fS0ke2luZGV4fWAgOiBpbmRleH1gO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChNZW51SXRlbSwgeyBpZDoga2V5LCBzZWxlY3RlZDogdmFsdWUgJiYgaXRlbS52YWx1ZSA9PT0gdmFsdWUudmFsdWUsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogaXRlbS5sYWJlbCB9LCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3hzKENvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKENvbnRyb2xDb250YWluZXIsIHsgaWQ6IFwibGVhZGluLWFzeW5jLXNlbGVjdG9yXCIsIGZvY3VzZWQ6IGlzRm9jdXNlZCwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbC5jdXJyZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWwuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWwuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW19qc3hzKFZhbHVlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbbG9jYWxWYWx1ZSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF2YWx1ZSA/IChfanN4KFBsYWNlaG9sZGVyLCB7IGNoaWxkcmVuOiBwbGFjZWhvbGRlciB9KSkgOiAoX2pzeChTaW5nbGVWYWx1ZSwgeyBjaGlsZHJlbjogdmFsdWUubGFiZWwgfSkpKSwgX2pzeHMoSW5wdXRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KElucHV0LCB7IHJlZjogaW5wdXRFbCwgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb2N1cyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkNoYW5nZTogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsVmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkU3RhdGUoTG9hZFN0YXRlLkxvYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnMoZS50YXJnZXQudmFsdWUsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRPcHRpb25zKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZFN0YXRlKExvYWRTdGF0ZS5JZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZhbHVlOiBsb2NhbFZhbHVlLCB3aWR0aDogaW5wdXRTaXplLCBpZDogXCJhc3ljbi1zZWxlY3QtaW5wdXRcIiB9KSwgX2pzeChJbnB1dFNoYWRvdywgeyByZWY6IGlucHV0U2hhZG93RWwsIGNoaWxkcmVuOiBsb2NhbFZhbHVlIH0pXSB9KV0gfSksIF9qc3hzKEluZGljYXRvckNvbnRhaW5lciwgeyBjaGlsZHJlbjogW2xvYWRTdGF0ZSA9PT0gTG9hZFN0YXRlLkxvYWRpbmcgJiYgX2pzeChVSVNwaW5uZXIsIHt9KSwgX2pzeChEcm9wZG93bkluZGljYXRvciwge30pXSB9KV0gfSksIGlzRm9jdXNlZCAmJiAoX2pzeChNZW51Q29udGFpbmVyLCB7IGNoaWxkcmVuOiBfanN4KE1lbnVMaXN0LCB7IGNoaWxkcmVuOiByZW5kZXJJdGVtcyhvcHRpb25zKSB9KSB9KSldIH0pKTtcbn1cbiJdfQ==*/","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { MARIGOLD_LIGHT, MARIGOLD_MEDIUM, OBSIDIAN } from './colors';\nconst AlertContainer = styled.div `\n background-color: ${MARIGOLD_LIGHT};\n border-color: ${MARIGOLD_MEDIUM};\n color: ${OBSIDIAN};\n font-size: 14px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n border-style: solid;\n border-top-style: solid;\n border-right-style: solid;\n border-bottom-style: solid;\n border-left-style: solid;\n border-width: 1px;\n min-height: 60px;\n padding: 8px 20px;\n position: relative;\n text-align: left;\n`;\nconst Title = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 700;\n font-size: 16px;\n line-height: 19px;\n color: ${OBSIDIAN};\n margin: 0;\n padding: 0;\n`;\nconst Message = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n margin: 0;\n padding: 0;\n`;\nconst MessageContainer = styled.div `\n display: flex;\n flex-direction: column;\n`;\nexport default function UIAlert({ titleText, titleMessage, children, }) {\n return (_jsxs(AlertContainer, { children: [_jsxs(MessageContainer, { children: [_jsx(Title, { children: titleText }), _jsx(Message, { children: titleMessage })] }), children] }));\n}\n",".a1h8m4fo{background-color:#fef8f0;border-color:#fae0b5;color:#33475b;font-size:14px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-style:solid;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-width:1px;min-height:60px;padding:8px 20px;position:relative;text-align:left;}\n.tyndzxk{font-family:'Lexend Deca';font-style:normal;font-weight:700;font-size:16px;line-height:19px;color:#33475b;margin:0;padding:0;}\n.m1m9sbk4{font-family:'Lexend Deca';font-style:normal;font-weight:400;font-size:14px;margin:0;padding:0;}\n.mg5o421{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL3NoYXJlZC9VSUNvbXBvbmVudHMvVUlBbGVydC50c3giXSwibmFtZXMiOlsiLmExaDhtNGZvIiwiLnR5bmR6eGsiLCIubTFtOXNiazQiLCIubWc1bzQyMSJdLCJtYXBwaW5ncyI6IkFBR3VCQTtBQW1CVEM7QUFVRUM7QUFRU0MiLCJmaWxlIjoiL3Vzci9zaGFyZS9odWJzcG90L2J1aWxkL3dvcmtzcGFjZS9MZWFkaW5Xb3JkUHJlc3NQbHVnaW4vbGVhZGluL3NjcmlwdHMvc2hhcmVkL1VJQ29tcG9uZW50cy9VSUFsZXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5pbXBvcnQgeyBNQVJJR09MRF9MSUdIVCwgTUFSSUdPTERfTUVESVVNLCBPQlNJRElBTiB9IGZyb20gJy4vY29sb3JzJztcbmNvbnN0IEFsZXJ0Q29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7TUFSSUdPTERfTElHSFR9O1xuICBib3JkZXItY29sb3I6ICR7TUFSSUdPTERfTUVESVVNfTtcbiAgY29sb3I6ICR7T0JTSURJQU59O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBtaW4taGVpZ2h0OiA2MHB4O1xuICBwYWRkaW5nOiA4cHggMjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuYDtcbmNvbnN0IFRpdGxlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICBjb2xvcjogJHtPQlNJRElBTn07XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlID0gc3R5bGVkLnAgYFxuICBmb250LWZhbWlseTogJ0xleGVuZCBEZWNhJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbmA7XG5jb25zdCBNZXNzYWdlQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVUlBbGVydCh7IHRpdGxlVGV4dCwgdGl0bGVNZXNzYWdlLCBjaGlsZHJlbiwgfSkge1xuICAgIHJldHVybiAoX2pzeHMoQWxlcnRDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhNZXNzYWdlQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChUaXRsZSwgeyBjaGlsZHJlbjogdGl0bGVUZXh0IH0pLCBfanN4KE1lc3NhZ2UsIHsgY2hpbGRyZW46IHRpdGxlTWVzc2FnZSB9KV0gfSksIGNoaWxkcmVuXSB9KSk7XG59XG4iXX0=*/"],"names":[".ump7xqy",".ug152ch",".ua13n1c",".h1q5v5ee",".u3qxofx",".u1q7a48k",".sxa9zrc",".s14430wa",".ct87ghk",".avili0h",".c1wxx7eu",".c1rgwbep",".v1mdmbaj",".p1gwkvxy",".s1bwlafs",".i196z9y5",".d1dfo5ow",".if3lze",".i9kxf50",".igjr3uc",".mhb9if7",".mxaof7s",".mw50s5v",".m11rzvjw",".m1jcdsjv",".a1h8m4fo",".tyndzxk",".m1m9sbk4",".mg5o421"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/gutenberg.js b/wp/wp-content/plugins/leadin/build/gutenberg.js new file mode 100644 index 00000000..d4f34eb4 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/gutenberg.js @@ -0,0 +1,13124 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ "./node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/memoize.browser.esm.js"); + + +var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 + +var index = (0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__["default"])(function (prop) { + return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 + /* o */ + && prop.charCodeAt(1) === 110 + /* n */ + && prop.charCodeAt(2) < 91; +} +/* Z+1 */ +); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (index); + + +/***/ }), + +/***/ "./node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/memoize.browser.esm.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/memoize.browser.esm.js ***! + \*******************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +function memoize(fn) { + var cache = {}; + return function (arg) { + if (cache[arg] === undefined) cache[arg] = fn(arg); + return cache[arg]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize); + + +/***/ }), + +/***/ "./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +function memoize(fn) { + var cache = Object.create(null); + return function (arg) { + if (cache[arg] === undefined) cache[arg] = fn(arg); + return cache[arg]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize); + + +/***/ }), + +/***/ "./node_modules/@emotion/unitless/dist/unitless.browser.esm.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@emotion/unitless/dist/unitless.browser.esm.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +var unitlessKeys = { + animationIterationCount: 1, + borderImageOutset: 1, + borderImageSlice: 1, + borderImageWidth: 1, + boxFlex: 1, + boxFlexGroup: 1, + boxOrdinalGroup: 1, + columnCount: 1, + columns: 1, + flex: 1, + flexGrow: 1, + flexPositive: 1, + flexShrink: 1, + flexNegative: 1, + flexOrder: 1, + gridRow: 1, + gridRowEnd: 1, + gridRowSpan: 1, + gridRowStart: 1, + gridColumn: 1, + gridColumnEnd: 1, + gridColumnSpan: 1, + gridColumnStart: 1, + msGridRow: 1, + msGridRowSpan: 1, + msGridColumn: 1, + msGridColumnSpan: 1, + fontWeight: 1, + lineHeight: 1, + opacity: 1, + order: 1, + orphans: 1, + tabSize: 1, + widows: 1, + zIndex: 1, + zoom: 1, + WebkitLineClamp: 1, + // SVG-related properties + fillOpacity: 1, + floodOpacity: 1, + stopOpacity: 1, + strokeDasharray: 1, + strokeDashoffset: 1, + strokeMiterlimit: 1, + strokeOpacity: 1, + strokeWidth: 1 +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (unitlessKeys); + + +/***/ }), + +/***/ "./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js ***! + \***********************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ "./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js"); + + +var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 + +var isPropValid = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__["default"])(function (prop) { + return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 + /* o */ + && prop.charCodeAt(1) === 110 + /* n */ + && prop.charCodeAt(2) < 91; +} +/* Z+1 */ +); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPropValid); + + +/***/ }), + +/***/ "./scripts/constants/defaultFormOptions.ts": +/*!*************************************************!*\ + !*** ./scripts/constants/defaultFormOptions.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DEFAULT_OPTIONS": () => (/* binding */ DEFAULT_OPTIONS), +/* harmony export */ "isDefaultForm": () => (/* binding */ isDefaultForm) +/* harmony export */ }); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); + +var REGISTRATION_FORM = 'REGISTRATION_FORM'; +var CONTACT_US_FORM = 'CONTACT_US_FORM'; +var NEWSLETTER_FORM = 'NEWSLETTER_FORM'; +var SUPPORT_FORM = 'SUPPORT_FORM'; +var EVENT_FORM = 'EVENT_FORM'; +var DEFAULT_OPTIONS = { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Templates', 'leadin'), + options: [{ + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Registration Form', 'leadin'), + value: REGISTRATION_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Contact us Form', 'leadin'), + value: CONTACT_US_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Newsletter sign-up Form', 'leadin'), + value: NEWSLETTER_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Support Form', 'leadin'), + value: SUPPORT_FORM + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Event Registration Form', 'leadin'), + value: EVENT_FORM + }] +}; +function isDefaultForm(value) { + return value === REGISTRATION_FORM || value === CONTACT_US_FORM || value === NEWSLETTER_FORM || value === SUPPORT_FORM || value === EVENT_FORM; +} + +/***/ }), + +/***/ "./scripts/constants/leadinConfig.ts": +/*!*******************************************!*\ + !*** ./scripts/constants/leadinConfig.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "accountName": () => (/* binding */ accountName), +/* harmony export */ "activationTime": () => (/* binding */ activationTime), +/* harmony export */ "adminUrl": () => (/* binding */ adminUrl), +/* harmony export */ "connectionStatus": () => (/* binding */ connectionStatus), +/* harmony export */ "contentEmbed": () => (/* binding */ contentEmbed), +/* harmony export */ "deviceId": () => (/* binding */ deviceId), +/* harmony export */ "didDisconnect": () => (/* binding */ didDisconnect), +/* harmony export */ "env": () => (/* binding */ env), +/* harmony export */ "formsScript": () => (/* binding */ formsScript), +/* harmony export */ "formsScriptPayload": () => (/* binding */ formsScriptPayload), +/* harmony export */ "hublet": () => (/* binding */ hublet), +/* harmony export */ "hubspotBaseUrl": () => (/* binding */ hubspotBaseUrl), +/* harmony export */ "hubspotNonce": () => (/* binding */ hubspotNonce), +/* harmony export */ "iframeUrl": () => (/* binding */ iframeUrl), +/* harmony export */ "impactLink": () => (/* binding */ impactLink), +/* harmony export */ "lastAuthorizeTime": () => (/* binding */ lastAuthorizeTime), +/* harmony export */ "lastDeauthorizeTime": () => (/* binding */ lastDeauthorizeTime), +/* harmony export */ "lastDisconnectTime": () => (/* binding */ lastDisconnectTime), +/* harmony export */ "leadinPluginVersion": () => (/* binding */ leadinPluginVersion), +/* harmony export */ "leadinQueryParams": () => (/* binding */ leadinQueryParams), +/* harmony export */ "locale": () => (/* binding */ locale), +/* harmony export */ "loginUrl": () => (/* binding */ loginUrl), +/* harmony export */ "meetingsScript": () => (/* binding */ meetingsScript), +/* harmony export */ "phpVersion": () => (/* binding */ phpVersion), +/* harmony export */ "pluginPath": () => (/* binding */ pluginPath), +/* harmony export */ "plugins": () => (/* binding */ plugins), +/* harmony export */ "portalDomain": () => (/* binding */ portalDomain), +/* harmony export */ "portalEmail": () => (/* binding */ portalEmail), +/* harmony export */ "portalId": () => (/* binding */ portalId), +/* harmony export */ "redirectNonce": () => (/* binding */ redirectNonce), +/* harmony export */ "refreshToken": () => (/* binding */ refreshToken), +/* harmony export */ "refreshTokenError": () => (/* binding */ refreshTokenError), +/* harmony export */ "requiresContentEmbedScope": () => (/* binding */ requiresContentEmbedScope), +/* harmony export */ "restNonce": () => (/* binding */ restNonce), +/* harmony export */ "restUrl": () => (/* binding */ restUrl), +/* harmony export */ "reviewSkippedDate": () => (/* binding */ reviewSkippedDate), +/* harmony export */ "theme": () => (/* binding */ theme), +/* harmony export */ "trackConsent": () => (/* binding */ trackConsent), +/* harmony export */ "wpVersion": () => (/* binding */ wpVersion) +/* harmony export */ }); +var _window$leadinConfig = window.leadinConfig, + accountName = _window$leadinConfig.accountName, + adminUrl = _window$leadinConfig.adminUrl, + activationTime = _window$leadinConfig.activationTime, + connectionStatus = _window$leadinConfig.connectionStatus, + deviceId = _window$leadinConfig.deviceId, + didDisconnect = _window$leadinConfig.didDisconnect, + env = _window$leadinConfig.env, + formsScript = _window$leadinConfig.formsScript, + meetingsScript = _window$leadinConfig.meetingsScript, + formsScriptPayload = _window$leadinConfig.formsScriptPayload, + hublet = _window$leadinConfig.hublet, + hubspotBaseUrl = _window$leadinConfig.hubspotBaseUrl, + hubspotNonce = _window$leadinConfig.hubspotNonce, + iframeUrl = _window$leadinConfig.iframeUrl, + impactLink = _window$leadinConfig.impactLink, + lastAuthorizeTime = _window$leadinConfig.lastAuthorizeTime, + lastDeauthorizeTime = _window$leadinConfig.lastDeauthorizeTime, + lastDisconnectTime = _window$leadinConfig.lastDisconnectTime, + leadinPluginVersion = _window$leadinConfig.leadinPluginVersion, + leadinQueryParams = _window$leadinConfig.leadinQueryParams, + locale = _window$leadinConfig.locale, + loginUrl = _window$leadinConfig.loginUrl, + phpVersion = _window$leadinConfig.phpVersion, + pluginPath = _window$leadinConfig.pluginPath, + plugins = _window$leadinConfig.plugins, + portalDomain = _window$leadinConfig.portalDomain, + portalEmail = _window$leadinConfig.portalEmail, + portalId = _window$leadinConfig.portalId, + redirectNonce = _window$leadinConfig.redirectNonce, + restNonce = _window$leadinConfig.restNonce, + restUrl = _window$leadinConfig.restUrl, + refreshToken = _window$leadinConfig.refreshToken, + reviewSkippedDate = _window$leadinConfig.reviewSkippedDate, + theme = _window$leadinConfig.theme, + trackConsent = _window$leadinConfig.trackConsent, + wpVersion = _window$leadinConfig.wpVersion, + contentEmbed = _window$leadinConfig.contentEmbed, + requiresContentEmbedScope = _window$leadinConfig.requiresContentEmbedScope, + refreshTokenError = _window$leadinConfig.refreshTokenError; + + +/***/ }), + +/***/ "./scripts/gutenberg/Common/CalendarIcon.tsx": +/*!***************************************************!*\ + !*** ./scripts/gutenberg/Common/CalendarIcon.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ CalendarIcon) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + +function CalendarIcon() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", { + width: "18", + height: "18", + viewBox: "0 0 18 18", + fill: "none", + xmlns: "http://www.w3.org/2000/svg", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("g", { + clipPath: "url(#clip0_903_1965)", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { + fillRule: "evenodd", + clipRule: "evenodd", + d: "M13.519 2.48009H15.069H15.0697C16.2619 2.48719 17.2262 3.45597 17.2262 4.65016V12.7434C17.223 12.9953 17.1203 13.2226 16.9549 13.3886L12.6148 17.7287C12.4488 17.8941 12.2214 17.9968 11.9689 18H3.29508C2.09637 18 1.125 17.0286 1.125 15.8299V4.65016C1.125 3.45404 2.09314 2.48396 3.28862 2.48009H4.83867V0.930032C4.83867 0.416577 5.25525 0 5.7687 0C6.28216 0 6.69874 0.416577 6.69874 0.930032V2.48009H11.6589V0.930032C11.6589 0.416577 12.0755 0 12.5889 0C13.1024 0 13.519 0.416577 13.519 0.930032V2.48009ZM2.98506 15.8312C2.99863 15.9882 3.12909 16.1115 3.28862 16.1141H11.5814L11.6589 16.0366V13.634C11.6589 12.9494 12.2143 12.394 12.899 12.394H15.2951L15.3726 12.3165V7.4338H2.98506V15.8312ZM4.83868 8.68029H6.07873H6.07937C6.42684 8.68029 6.71037 8.95478 6.72458 9.30032V14.2863C6.72458 14.6428 6.43524 14.9322 6.07873 14.9322H4.83868C4.48217 14.9322 4.19283 14.6428 4.19283 14.2863V9.32615C4.19283 8.96964 4.48217 8.68029 4.83868 8.68029ZM8.53298 8.68029H9.82469H9.82534C10.1728 8.68029 10.4563 8.95478 10.4705 9.30032V14.2863C10.4705 14.6428 10.1812 14.9322 9.82469 14.9322H8.53298C8.17647 14.9322 7.88712 14.6428 7.88712 14.2863V9.32615C7.88712 8.96964 8.17647 8.68029 8.53298 8.68029ZM13.519 8.68029H12.2789C11.9366 8.68029 11.6589 8.95801 11.6589 9.30032V10.5404C11.6589 10.8827 11.9366 11.1604 12.2789 11.1604H13.519C13.8613 11.1604 14.139 10.8827 14.139 10.5404V9.30032C14.139 8.95801 13.8613 8.68029 13.519 8.68029Z", + fill: "#FF7A59" + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("defs", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("clipPath", { + id: "clip0_903_1965", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("rect", { + width: "18", + height: "18", + fill: "white" + }) + }) + })] + }); +} + +/***/ }), + +/***/ "./scripts/gutenberg/Common/SidebarSprocketIcon.tsx": +/*!**********************************************************!*\ + !*** ./scripts/gutenberg/Common/SidebarSprocketIcon.tsx ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ SidebarSprocketIcon) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + +function SidebarSprocketIcon() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { + width: "20px", + height: "20px", + version: "1.1", + viewBox: "0 0 40 42", + xmlns: "http://www.w3.org/2000/svg", + xmlnsXlink: "http://www.w3.org/1999/xlink", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { + d: "M28.8989809,30.0402293 C25.817707,30.0402293 23.319363,27.5423949 23.319363,24.461121 C23.319363,21.3798471 25.817707,18.881758 28.8989809,18.881758 C31.98,18.881758 34.4780892,21.3798471 34.4780892,24.461121 C34.4780892,27.5423949 31.98,30.0402293 28.8989809,30.0402293 M30.5692994,13.7199745 L30.5692994,8.75717196 C31.864586,8.14519744 32.7723567,6.8346242 32.7723567,5.31360508 L32.7723567,5.1989554 C32.7723567,3.10010191 31.0546497,1.38264968 28.956051,1.38264968 L28.8414013,1.38264968 C26.7425478,1.38264968 25.0248408,3.10010191 25.0248408,5.1989554 L25.0248408,5.31360508 C25.0248408,6.8346242 25.9328662,8.14519744 27.2281529,8.75717196 L27.2281529,13.7202293 C25.2994904,14.0180637 23.5371974,14.8137325 22.0829299,15.9844331 L8.45643312,5.38417836 C8.54611464,5.0392102 8.6090446,4.6835414 8.60955416,4.310293 C8.61261148,1.93271338 6.68777072,0.00303184713 4.31019108,-2.5477707e-05 C1.93286624,-0.00308280255 0.0029299363,1.92175796 0.000127388535,4.29933756 C-0.0029299363,6.67666244 1.92191083,8.60634396 4.29949044,8.60940128 C5.07426752,8.6104204 5.7912102,8.390293 6.42,8.03284076 L19.8243312,18.4603567 C18.6842038,20.181121 18.0166879,22.2422675 18.0166879,24.461121 C18.0166879,26.7841784 18.7504458,28.9327134 19.9907006,30.7001019 L15.9142675,34.776535 C15.5919745,34.6799745 15.2574522,34.6122038 14.9033121,34.6122038 C12.9499363,34.6122038 11.3659873,36.1961529 11.3659873,38.1497834 C11.3659873,40.103414 12.9499363,41.6871084 14.9033121,41.6871084 C16.8571974,41.6871084 18.4408917,40.103414 18.4408917,38.1497834 C18.4408917,37.7958981 18.3733758,37.461121 18.2765605,37.1390828 L22.3089172,33.1067261 C24.1392357,34.5041784 26.4184713,35.3431592 28.8989809,35.3431592 C34.9089172,35.3431592 39.7810191,30.4710573 39.7810191,24.461121 C39.7810191,19.0203567 35.7840764,14.5255796 30.5692994,13.7199745", + id: "Fill-1", + fillRule: "evenodd" + }) + }); +} + +/***/ }), + +/***/ "./scripts/gutenberg/Common/SprocketIcon.tsx": +/*!***************************************************!*\ + !*** ./scripts/gutenberg/Common/SprocketIcon.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ SprocketIcon) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + +function SprocketIcon() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", { + width: "40px", + height: "42px", + viewBox: "0 0 40 42", + version: "1.1", + xmlns: "http://www.w3.org/2000/svg", + xmlnsXlink: "http://www.w3.org/1999/xlink", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("defs", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("polygon", { + id: "path-1", + points: "0.000123751494 0 39.7808917 0 39.7808917 41.6871084 0.000123751494 41.6871084" + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("g", { + id: "Page-1", + stroke: "none", + strokeWidth: "1", + fill: "none", + fillRule: "evenodd", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("g", { + id: "HubSpot-Sprocket---Full-Color", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("mask", { + id: "mask-2", + fill: "white", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("use", { + xlinkHref: "#path-1" + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("g", { + id: "path-1" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { + d: "M28.8989809,30.0402293 C25.817707,30.0402293 23.319363,27.5423949 23.319363,24.461121 C23.319363,21.3798471 25.817707,18.881758 28.8989809,18.881758 C31.98,18.881758 34.4780892,21.3798471 34.4780892,24.461121 C34.4780892,27.5423949 31.98,30.0402293 28.8989809,30.0402293 M30.5692994,13.7199745 L30.5692994,8.75717196 C31.864586,8.14519744 32.7723567,6.8346242 32.7723567,5.31360508 L32.7723567,5.1989554 C32.7723567,3.10010191 31.0546497,1.38264968 28.956051,1.38264968 L28.8414013,1.38264968 C26.7425478,1.38264968 25.0248408,3.10010191 25.0248408,5.1989554 L25.0248408,5.31360508 C25.0248408,6.8346242 25.9328662,8.14519744 27.2281529,8.75717196 L27.2281529,13.7202293 C25.2994904,14.0180637 23.5371974,14.8137325 22.0829299,15.9844331 L8.45643312,5.38417836 C8.54611464,5.0392102 8.6090446,4.6835414 8.60955416,4.310293 C8.61261148,1.93271338 6.68777072,0.00303184713 4.31019108,-2.5477707e-05 C1.93286624,-0.00308280255 0.0029299363,1.92175796 0.000127388535,4.29933756 C-0.0029299363,6.67666244 1.92191083,8.60634396 4.29949044,8.60940128 C5.07426752,8.6104204 5.7912102,8.390293 6.42,8.03284076 L19.8243312,18.4603567 C18.6842038,20.181121 18.0166879,22.2422675 18.0166879,24.461121 C18.0166879,26.7841784 18.7504458,28.9327134 19.9907006,30.7001019 L15.9142675,34.776535 C15.5919745,34.6799745 15.2574522,34.6122038 14.9033121,34.6122038 C12.9499363,34.6122038 11.3659873,36.1961529 11.3659873,38.1497834 C11.3659873,40.103414 12.9499363,41.6871084 14.9033121,41.6871084 C16.8571974,41.6871084 18.4408917,40.103414 18.4408917,38.1497834 C18.4408917,37.7958981 18.3733758,37.461121 18.2765605,37.1390828 L22.3089172,33.1067261 C24.1392357,34.5041784 26.4184713,35.3431592 28.8989809,35.3431592 C34.9089172,35.3431592 39.7810191,30.4710573 39.7810191,24.461121 C39.7810191,19.0203567 35.7840764,14.5255796 30.5692994,13.7199745", + id: "Fill-1", + fill: "#F3785B", + fillRule: "nonzero", + mask: "url(#mask-2)" + })] + }) + })] + }); +} + +/***/ }), + +/***/ "./scripts/gutenberg/FormBlock/FormBlockSave.tsx": +/*!*******************************************************!*\ + !*** ./scripts/gutenberg/FormBlock/FormBlockSave.tsx ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormSaveBlock) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); + + +function FormSaveBlock(_ref) { + var attributes = _ref.attributes; + var portalId = attributes.portalId, + formId = attributes.formId; + + if (portalId && formId) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.RawHTML, { + className: "wp-block-leadin-hubspot-form-block", + children: "[hubspot portal=\"".concat(portalId, "\" id=\"").concat(formId, "\" type=\"form\"]") + }); + } + + return null; +} + +/***/ }), + +/***/ "./scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx": +/*!**************************************************************!*\ + !*** ./scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormGutenbergPreview) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _UIComponents_UIImage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UIImage */ "./scripts/gutenberg/UIComponents/UIImage.ts"); + + + + +function FormGutenbergPreview() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIImage__WEBPACK_IMPORTED_MODULE_3__["default"], { + alt: "Create a new Hubspot Form", + src: "".concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.pluginPath, "/public/assets/images/hubspot-form.png") + }) + }); +} + +/***/ }), + +/***/ "./scripts/gutenberg/FormBlock/registerFormBlock.tsx": +/*!***********************************************************!*\ + !*** ./scripts/gutenberg/FormBlock/registerFormBlock.tsx ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ registerFormBlock) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Common_SprocketIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/SprocketIcon */ "./scripts/gutenberg/Common/SprocketIcon.tsx"); +/* harmony import */ var _FormBlockSave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FormBlockSave */ "./scripts/gutenberg/FormBlock/FormBlockSave.tsx"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _FormGutenbergPreview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FormGutenbergPreview */ "./scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx"); +/* harmony import */ var _shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../shared/Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); +/* harmony import */ var _shared_Form_FormEdit__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../shared/Form/FormEdit */ "./scripts/shared/Form/FormEdit.tsx"); +/* harmony import */ var _shared_enums_connectionStatus__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../shared/enums/connectionStatus */ "./scripts/shared/enums/connectionStatus.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var _utils_withMetaData__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/withMetaData */ "./scripts/utils/withMetaData.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + + +function registerFormBlock() { + var editComponent = function editComponent(props) { + if (props.attributes.preview) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FormGutenbergPreview__WEBPACK_IMPORTED_MODULE_5__["default"], {}); + } else if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__.connectionStatus === _shared_enums_connectionStatus__WEBPACK_IMPORTED_MODULE_8__["default"].Connected) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Form_FormEdit__WEBPACK_IMPORTED_MODULE_7__["default"], _objectSpread(_objectSpread({}, props), {}, { + origin: "gutenberg", + preview: true + })); + } else { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_6__["default"], { + status: 401 + }); + } + }; // We do not support the full site editor: https://issues.hubspotcentral.com/browse/WP-1033 + + + if (!_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ || (0,_utils_withMetaData__WEBPACK_IMPORTED_MODULE_10__.isFullSiteEditor)()) { + return null; + } + + _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__.registerBlockType('leadin/hubspot-form-block', { + title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('HubSpot Form', 'leadin'), + description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Select and embed a HubSpot form', 'leadin'), + icon: _Common_SprocketIcon__WEBPACK_IMPORTED_MODULE_2__["default"], + category: 'leadin-blocks', + attributes: { + portalId: { + type: 'string', + "default": '' + }, + formId: { + type: 'string' + }, + formName: { + type: 'string' + }, + preview: { + type: 'boolean', + "default": false + } + }, + example: { + attributes: { + preview: true + } + }, + edit: editComponent, + save: function save(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FormBlockSave__WEBPACK_IMPORTED_MODULE_3__["default"], _objectSpread({}, props)); + } + }); +} + +/***/ }), + +/***/ "./scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx": +/*!*********************************************************************!*\ + !*** ./scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingGutenbergPreview) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _UIComponents_UIImage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UIImage */ "./scripts/gutenberg/UIComponents/UIImage.ts"); + + + + +function MeetingGutenbergPreview() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIImage__WEBPACK_IMPORTED_MODULE_3__["default"], { + alt: "Create a new Hubspot Meeting", + width: "100%", + src: "".concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.pluginPath, "/public/assets/images/hubspot-meetings.png") + }) + }); +} + +/***/ }), + +/***/ "./scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx": +/*!**************************************************************!*\ + !*** ./scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingSaveBlock) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); + + +function MeetingSaveBlock(_ref) { + var attributes = _ref.attributes; + var url = attributes.url; + + if (url) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.RawHTML, { + className: "wp-block-leadin-hubspot-meeting-block", + children: "[hubspot url=\"".concat(url, "\" type=\"meeting\"]") + }); + } + + return null; +} + +/***/ }), + +/***/ "./scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx": +/*!******************************************************************!*\ + !*** ./scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ registerMeetingBlock) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Common_CalendarIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/CalendarIcon */ "./scripts/gutenberg/Common/CalendarIcon.tsx"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _MeetingGutenbergPreview__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./MeetingGutenbergPreview */ "./scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx"); +/* harmony import */ var _MeetingSaveBlock__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./MeetingSaveBlock */ "./scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx"); +/* harmony import */ var _shared_Meeting_MeetingEdit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../shared/Meeting/MeetingEdit */ "./scripts/shared/Meeting/MeetingEdit.tsx"); +/* harmony import */ var _shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../shared/Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _utils_withMetaData__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/withMetaData */ "./scripts/utils/withMetaData.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + +var ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected' +}; +function registerMeetingBlock() { + var editComponent = function editComponent(props) { + if (props.attributes.preview) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingGutenbergPreview__WEBPACK_IMPORTED_MODULE_4__["default"], {}); + } else if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.connectionStatus === ConnectionStatus.Connected) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Meeting_MeetingEdit__WEBPACK_IMPORTED_MODULE_6__["default"], _objectSpread(_objectSpread({}, props), {}, { + preview: true, + origin: "gutenberg" + })); + } else { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_shared_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__["default"], { + status: 401 + }); + } + }; // We do not support the full site editor: https://issues.hubspotcentral.com/browse/WP-1033 + + + if (!_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ || (0,_utils_withMetaData__WEBPACK_IMPORTED_MODULE_9__.isFullSiteEditor)()) { + return null; + } + + _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__.registerBlockType('leadin/hubspot-meeting-block', { + title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Hubspot Meetings Scheduler', 'leadin'), + description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Schedule meetings faster and forget the back-and-forth emails Your calendar stays full, and you stay productive', 'leadin'), + icon: _Common_CalendarIcon__WEBPACK_IMPORTED_MODULE_2__["default"], + category: 'leadin-blocks', + attributes: { + url: { + type: 'string', + "default": '' + }, + preview: { + type: 'boolean', + "default": false + } + }, + example: { + attributes: { + preview: true + } + }, + edit: editComponent, + save: function save(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingSaveBlock__WEBPACK_IMPORTED_MODULE_5__["default"], _objectSpread({}, props)); + } + }); +} + +/***/ }), + +/***/ "./scripts/gutenberg/Sidebar/contentType.tsx": +/*!***************************************************!*\ + !*** ./scripts/gutenberg/Sidebar/contentType.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "registerHubspotSidebar": () => (/* binding */ registerHubspotSidebar) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _wordpress_plugins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/plugins */ "@wordpress/plugins"); +/* harmony import */ var _wordpress_plugins__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_plugins__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_edit_post__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/edit-post */ "@wordpress/edit-post"); +/* harmony import */ var _wordpress_edit_post__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_edit_post__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); +/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _UIComponents_UISidebarSelectControl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../UIComponents/UISidebarSelectControl */ "./scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx"); +/* harmony import */ var _Common_SidebarSprocketIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Common/SidebarSprocketIcon */ "./scripts/gutenberg/Common/SidebarSprocketIcon.tsx"); +/* harmony import */ var styled_components__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! styled-components */ "./node_modules/styled-components/dist/styled-components.browser.esm.js"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +var _templateObject; + +function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + + + + + + + + + + + + + +function registerHubspotSidebar() { + var ContentTypeLabelStyle = styled_components__WEBPACK_IMPORTED_MODULE_11__["default"].div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n white-space: normal;\n text-transform: none;\n "]))); + + var ContentTypeLabel = (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ContentTypeLabelStyle, { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Select the content type HubSpot Analytics uses to track this page', 'leadin') + }); + + var LeadinPluginSidebar = function LeadinPluginSidebar(_ref) { + var postType = _ref.postType; + return postType ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_wordpress_edit_post__WEBPACK_IMPORTED_MODULE_2__.PluginSidebar, { + name: "leadin", + title: "HubSpot", + icon: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.Icon, { + className: "hs-plugin-sidebar-sprocket", + icon: (0,_Common_SidebarSprocketIcon__WEBPACK_IMPORTED_MODULE_6__["default"])() + }), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.PanelBody, { + title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('HubSpot Analytics', 'leadin'), + initialOpen: true, + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_8__.BackgroudAppContext.Provider, { + value: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_9__.refreshToken && (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_10__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_9__.refreshToken), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISidebarSelectControl__WEBPACK_IMPORTED_MODULE_5__["default"], { + metaKey: "content-type", + className: "select-content-type", + label: ContentTypeLabel, + options: [{ + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Detect Automatically', 'leadin'), + value: '' + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Blog Post', 'leadin'), + value: 'blog-post' + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Knowledge Article', 'leadin'), + value: 'knowledge-article' + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Landing Page', 'leadin'), + value: 'landing-page' + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Listing Page', 'leadin'), + value: 'listing-page' + }, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Standard Page', 'leadin'), + value: 'standard-page' + }] + }) + }) + }) + }) : null; + }; + + var LeadinPluginSidebarWrapper = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_4__.withSelect)(function (select) { + var data = select('core/editor'); + return { + postType: data && data.getCurrentPostType() && data.getEditedPostAttribute('meta') + }; + })(LeadinPluginSidebar); + + if (_wordpress_plugins__WEBPACK_IMPORTED_MODULE_1__) { + _wordpress_plugins__WEBPACK_IMPORTED_MODULE_1__.registerPlugin('leadin', { + render: LeadinPluginSidebarWrapper, + icon: _Common_SidebarSprocketIcon__WEBPACK_IMPORTED_MODULE_6__["default"] + }); + } +} + +/***/ }), + +/***/ "./scripts/gutenberg/UIComponents/UIImage.ts": +/*!***************************************************!*\ + !*** ./scripts/gutenberg/UIComponents/UIImage.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + +var _exp = /*#__PURE__*/function _exp() { + return function (props) { + return props.height ? props.height : 'auto'; + }; +}; + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.width ? props.width : 'auto'; + }; +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('img')({ + name: "UIImage0", + "class": "ump7xqy", + propsAsIs: false, + vars: { + "ump7xqy-0": [_exp()], + "ump7xqy-1": [_exp2()] + } +})); + +__webpack_require__(/*! ./UIImage.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIImage.ts */ "./scripts/gutenberg/UIComponents/UIImage.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/gutenberg/UIComponents/UIImage.ts"); + +/***/ }), + +/***/ "./scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx": +/*!*******************************************************************!*\ + !*** ./scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _utils_withMetaData__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/withMetaData */ "./scripts/utils/withMetaData.ts"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + +var UISidebarSelectControl = function UISidebarSelectControl(props) { + var isBackgroundAppReady = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_3__.useBackgroundAppContext)(); + var monitorSidebarMetaChange = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_3__.usePostBackgroundMessage)(); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.SelectControl, _objectSpread({ + value: props.metaValue, + onChange: function onChange(content) { + if (props.setMetaValue) { + props.setMetaValue(content); + } + + isBackgroundAppReady && monitorSidebarMetaChange({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages.TrackSidebarMetaChange, + payload: { + metaKey: props.metaKey + } + }); + } + }, props)); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_withMetaData__WEBPACK_IMPORTED_MODULE_2__["default"])(UISidebarSelectControl)); + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/core/CoreMessages.ts": +/*!****************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/core/CoreMessages.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* binding */ CoreMessages) +/* harmony export */ }); +var CoreMessages = { + HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED', + SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN', + ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME', + RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME', + SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE', + SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/forms/FormsMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FormMessages": () => (/* binding */ FormMessages) +/* harmony export */ }); +var FormMessages = { + CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/index.ts": +/*!****************************************************!*\ + !*** ./scripts/iframe/integratedMessages/index.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* reexport safe */ _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__.CoreMessages), +/* harmony export */ "FormMessages": () => (/* reexport safe */ _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__.FormMessages), +/* harmony export */ "LiveChatMessages": () => (/* reexport safe */ _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__.LiveChatMessages), +/* harmony export */ "PluginMessages": () => (/* reexport safe */ _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__.PluginMessages), +/* harmony export */ "ProxyMessages": () => (/* reexport safe */ _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages) +/* harmony export */ }); +/* harmony import */ var _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/CoreMessages */ "./scripts/iframe/integratedMessages/core/CoreMessages.ts"); +/* harmony import */ var _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./forms/FormsMessages */ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts"); +/* harmony import */ var _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./livechat/LiveChatMessages */ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts"); +/* harmony import */ var _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./plugin/PluginMessages */ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts"); +/* harmony import */ var _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./proxy/ProxyMessages */ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts"); + + + + + + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts": +/*!************************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LiveChatMessages": () => (/* binding */ LiveChatMessages) +/* harmony export */ }); +var LiveChatMessages = { + CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts": +/*!********************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/plugin/PluginMessages.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PluginMessages": () => (/* binding */ PluginMessages) +/* harmony export */ }); +var PluginMessages = { + PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION', + PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG', + TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT', + InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST', + InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE', + InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR', + InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST', + InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR', + BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST', + BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE', + BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR', + BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST', + BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR', + SkipReviewRequest: 'SKIP_REVIEW_REQUEST', + SkipReviewResponse: 'SKIP_REVIEW_RESPONSE', + SkipReviewError: 'SKIP_REVIEW_ERROR', + RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM', + ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST', + ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE', + ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR', + ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST', + ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE', + ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ProxyMessages": () => (/* binding */ ProxyMessages) +/* harmony export */ }); +var ProxyMessages = { + FetchForms: 'FETCH_FORMS', + FetchForm: 'FETCH_FORM', + CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE', + FetchAuth: 'FETCH_AUTH', + FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS', + FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION', + FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER', + ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR', + TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER', + TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE', + TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED', + TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER', + TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE', + TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER', + TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION', + TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED', + TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/useBackgroundApp.ts": +/*!********************************************!*\ + !*** ./scripts/iframe/useBackgroundApp.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "BackgroudAppContext": () => (/* binding */ BackgroudAppContext), +/* harmony export */ "useBackgroundAppContext": () => (/* binding */ useBackgroundAppContext), +/* harmony export */ "usePostAsyncBackgroundMessage": () => (/* binding */ usePostAsyncBackgroundMessage), +/* harmony export */ "usePostBackgroundMessage": () => (/* binding */ usePostBackgroundMessage) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); + +var BackgroudAppContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null); +function useBackgroundAppContext() { + return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(BackgroudAppContext); +} +function usePostBackgroundMessage() { + var app = useBackgroundAppContext(); + return function (message) { + app.postMessage(message); + }; +} +function usePostAsyncBackgroundMessage() { + var app = useBackgroundAppContext(); + return function (message) { + return app.postAsyncMessage(message); + }; +} + +/***/ }), + +/***/ "./scripts/lib/Raven.ts": +/*!******************************!*\ + !*** ./scripts/lib/Raven.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "configureRaven": () => (/* binding */ configureRaven), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); + + +function configureRaven() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.hubspotBaseUrl.indexOf('app.hubspot.com') === -1) { + return; + } + + raven_js__WEBPACK_IMPORTED_MODULE_0___default().config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', { + instrument: { + tryCatch: false + }, + release: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion + }).install(); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setTagsContext({ + v: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion, + php: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.phpVersion, + wordpress: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.wpVersion + }); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setExtraContext({ + hub: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.portalId, + plugins: Object.keys(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins).map(function (name) { + return "".concat(name, "#").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins[name]); + }).join(',') + }); +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((raven_js__WEBPACK_IMPORTED_MODULE_0___default())); + +/***/ }), + +/***/ "./scripts/shared/Common/AsyncSelect.tsx": +/*!***********************************************!*\ + !*** ./scripts/shared/Common/AsyncSelect.tsx ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ AsyncSelect) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +/* harmony import */ var _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/colors */ "./scripts/shared/UIComponents/colors.ts"); +/* harmony import */ var _UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UISpinner */ "./scripts/shared/UIComponents/UISpinner.tsx"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + +var Container = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "Container", + "class": "c1wxx7eu", + propsAsIs: false +}); + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.focused ? '0' : '1px'; + }; +}; + +var _exp3 = /*#__PURE__*/function _exp3() { + return function (props) { + return props.focused ? "0 0 0 2px ".concat(_UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_MEDIUM) : 'none'; + }; +}; + +var ControlContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "ControlContainer", + "class": "c1rgwbep", + propsAsIs: false, + vars: { + "c1rgwbep-0": [_exp2()], + "c1rgwbep-1": [_exp3()] + } +}); +var ValueContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "ValueContainer", + "class": "v1mdmbaj", + propsAsIs: false +}); +var Placeholder = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "Placeholder", + "class": "p1gwkvxy", + propsAsIs: false +}); +var SingleValue = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "SingleValue", + "class": "s1bwlafs", + propsAsIs: false +}); +var IndicatorContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "IndicatorContainer", + "class": "i196z9y5", + propsAsIs: false +}); +var DropdownIndicator = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "DropdownIndicator", + "class": "d1dfo5ow", + propsAsIs: false +}); +var InputContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "InputContainer", + "class": "if3lze", + propsAsIs: false +}); +var Input = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('input')({ + name: "Input", + "class": "i9kxf50", + propsAsIs: false +}); +var InputShadow = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "InputShadow", + "class": "igjr3uc", + propsAsIs: false +}); +var MenuContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuContainer", + "class": "mhb9if7", + propsAsIs: false +}); +var MenuList = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuList", + "class": "mxaof7s", + propsAsIs: false +}); +var MenuGroup = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuGroup", + "class": "mw50s5v", + propsAsIs: false +}); +var MenuGroupHeader = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuGroupHeader", + "class": "m11rzvjw", + propsAsIs: false +}); + +var _exp5 = /*#__PURE__*/function _exp5() { + return function (props) { + return props.selected ? _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_MEDIUM : 'transparent'; + }; +}; + +var _exp6 = /*#__PURE__*/function _exp6() { + return function (props) { + return props.selected ? '#fff' : 'inherit'; + }; +}; + +var _exp7 = /*#__PURE__*/function _exp7() { + return function (props) { + return props.selected ? _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_MEDIUM : _UIComponents_colors__WEBPACK_IMPORTED_MODULE_2__.CALYPSO_LIGHT; + }; +}; + +var MenuItem = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_5__.styled)('div')({ + name: "MenuItem", + "class": "m1jcdsjv", + propsAsIs: false, + vars: { + "m1jcdsjv-0": [_exp5()], + "m1jcdsjv-1": [_exp6()], + "m1jcdsjv-2": [_exp7()] + } +}); +function AsyncSelect(_ref) { + var placeholder = _ref.placeholder, + value = _ref.value, + loadOptions = _ref.loadOptions, + onChange = _ref.onChange, + defaultOptions = _ref.defaultOptions; + var inputEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + var inputShadowEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + isFocused = _useState2[0], + setFocus = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].NotLoaded), + _useState4 = _slicedToArray(_useState3, 2), + loadState = _useState4[0], + setLoadState = _useState4[1]; + + var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''), + _useState6 = _slicedToArray(_useState5, 2), + localValue = _useState6[0], + setLocalValue = _useState6[1]; + + var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(defaultOptions), + _useState8 = _slicedToArray(_useState7, 2), + options = _useState8[0], + setOptions = _useState8[1]; + + var inputSize = "".concat(inputShadowEl.current ? inputShadowEl.current.clientWidth + 10 : 2, "px"); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (loadOptions && loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].NotLoaded) { + loadOptions('', function (result) { + setOptions(result); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Idle); + }); + } + }, [loadOptions, loadState]); + + var renderItems = function renderItems() { + var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var parentKey = arguments.length > 1 ? arguments[1] : undefined; + return items.map(function (item, index) { + if (item.options) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(MenuGroup, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuGroupHeader, { + id: "".concat(index, "-heading"), + children: item.label + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { + children: renderItems(item.options, index) + })] + }, "async-select-item-".concat(index)); + } else { + var key = "async-select-item-".concat(parentKey !== undefined ? "".concat(parentKey, "-").concat(index) : index); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuItem, { + id: key, + selected: value && item.value === value.value, + onClick: function onClick() { + onChange(item); + setFocus(false); + }, + children: item.label + }, key); + } + }); + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(Container, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(ControlContainer, { + id: "leadin-async-selector", + focused: isFocused, + onClick: function onClick() { + if (isFocused) { + if (inputEl.current) { + inputEl.current.blur(); + } + + setFocus(false); + setLocalValue(''); + } else { + if (inputEl.current) { + inputEl.current.focus(); + } + + setFocus(true); + } + }, + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(ValueContainer, { + children: [localValue === '' && (!value ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Placeholder, { + children: placeholder + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SingleValue, { + children: value.label + })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(InputContainer, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Input, { + ref: inputEl, + onFocus: function onFocus() { + setFocus(true); + }, + onChange: function onChange(e) { + setLocalValue(e.target.value); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Loading); + loadOptions && loadOptions(e.target.value, function (result) { + setOptions(result); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Idle); + }); + }, + value: localValue, + width: inputSize, + id: "asycn-select-input" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(InputShadow, { + ref: inputShadowEl, + children: localValue + })] + })] + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(IndicatorContainer, { + children: [loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_4__["default"].Loading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_3__["default"], {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(DropdownIndicator, {})] + })] + }), isFocused && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuContainer, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MenuList, { + children: renderItems(options) + }) + })] + }); +} + +__webpack_require__(/*! ./AsyncSelect.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./AsyncSelect.tsx */ "./scripts/shared/Common/AsyncSelect.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx"); + +/***/ }), + +/***/ "./scripts/shared/Common/ErrorHandler.tsx": +/*!************************************************!*\ + !*** ./scripts/shared/Common/ErrorHandler.tsx ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ ErrorHandler) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../UIComponents/UIButton */ "./scripts/shared/UIComponents/UIButton.ts"); +/* harmony import */ var _UIComponents_UIContainer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIContainer */ "./scripts/shared/UIComponents/UIContainer.ts"); +/* harmony import */ var _HubspotWrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); + + + + + + + + +function redirectToPlugin() { + window.location.href = "".concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__.adminUrl, "admin.php?page=leadin&leadin_expired=").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__.redirectNonce); +} + +function ErrorHandler(_ref) { + var status = _ref.status, + resetErrorState = _ref.resetErrorState, + _ref$errorInfo = _ref.errorInfo, + errorInfo = _ref$errorInfo === void 0 ? { + header: '', + message: '', + action: '' + } : _ref$errorInfo; + var isUnauthorized = status === 401 || status === 403; + var errorHeader = isUnauthorized ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)("Your plugin isn't authorized", 'leadin') : errorInfo.header; + var errorMessage = isUnauthorized ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Reauthorize your plugin to access your free HubSpot tools', 'leadin') : errorInfo.message; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HubspotWrapper__WEBPACK_IMPORTED_MODULE_3__["default"], { + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_4__.pluginPath, + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_UIComponents_UIContainer__WEBPACK_IMPORTED_MODULE_2__["default"], { + textAlign: "center", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h4", { + children: errorHeader + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + children: errorMessage + }) + }), isUnauthorized ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_1__["default"], { + "data-test-id": "authorize-button", + onClick: redirectToPlugin, + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Go to plugin', 'leadin') + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_1__["default"], { + "data-test-id": "retry-button", + onClick: resetErrorState, + children: errorInfo.action + })] + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Common/HubspotWrapper.ts": +/*!*************************************************!*\ + !*** ./scripts/shared/Common/HubspotWrapper.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + +var _exp = /*#__PURE__*/function _exp() { + return function (props) { + return "url(".concat(props.pluginPath, "/public/assets/images/hubspot.svg)"); + }; +}; + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.padding || '90px 20% 25px'; + }; +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "HubspotWrapper0", + "class": "h1q5v5ee", + propsAsIs: false, + vars: { + "h1q5v5ee-0": [_exp()], + "h1q5v5ee-1": [_exp2()] + } +})); + +__webpack_require__(/*! ./HubspotWrapper.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./HubspotWrapper.ts */ "./scripts/shared/Common/HubspotWrapper.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts"); + +/***/ }), + +/***/ "./scripts/shared/Common/LoadingBlock.tsx": +/*!************************************************!*\ + !*** ./scripts/shared/Common/LoadingBlock.tsx ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ LoadingBlock) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UISpinner */ "./scripts/shared/UIComponents/UISpinner.tsx"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); + + + + +function LoadingBlock() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__["default"], { + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.pluginPath, + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpinner__WEBPACK_IMPORTED_MODULE_2__["default"], { + size: 50 + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/FormEdit.tsx": +/*!******************************************!*\ + !*** ./scripts/shared/Form/FormEdit.tsx ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormEditContainer) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UISpacer */ "./scripts/shared/UIComponents/UISpacer.ts"); +/* harmony import */ var _PreviewForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./PreviewForm */ "./scripts/shared/Form/PreviewForm.tsx"); +/* harmony import */ var _FormSelect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FormSelect */ "./scripts/shared/Form/FormSelect.tsx"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + + +function FormEdit(_ref) { + var attributes = _ref.attributes, + isSelected = _ref.isSelected, + setAttributes = _ref.setAttributes, + _ref$preview = _ref.preview, + preview = _ref$preview === void 0 ? true : _ref$preview, + _ref$origin = _ref.origin, + origin = _ref$origin === void 0 ? 'gutenberg' : _ref$origin; + var formId = attributes.formId, + formName = attributes.formName; + var formSelected = _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId && formId; + var isBackgroundAppReady = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.useBackgroundAppContext)(); + var monitorFormPreviewRender = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.usePostBackgroundMessage)(); + + var handleChange = function handleChange(selectedForm) { + setAttributes({ + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + formId: selectedForm.value, + formName: selectedForm.label + }); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + monitorFormPreviewRender({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__.ProxyMessages.TrackFormPreviewRender, + payload: { + origin: origin + } + }); + }, [origin]); + return !isBackgroundAppReady ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_8__["default"], {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [(isSelected || !formSelected) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FormSelect__WEBPACK_IMPORTED_MODULE_5__["default"], { + formId: formId, + formName: formName, + handleChange: handleChange, + origin: origin + }), formSelected && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [isSelected && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__["default"], {}), preview && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PreviewForm__WEBPACK_IMPORTED_MODULE_4__["default"], { + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + formId: formId + })] + })] + }); +} + +function FormEditContainer(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.BackgroudAppContext.Provider, { + value: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken && (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_9__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(FormEdit, _objectSpread({}, props)) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/FormSelect.tsx": +/*!********************************************!*\ + !*** ./scripts/shared/Form/FormSelect.tsx ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormSelect) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _FormSelector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormSelector */ "./scripts/shared/Form/FormSelector.tsx"); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _hooks_useForms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks/useForms */ "./scripts/shared/Form/hooks/useForms.ts"); +/* harmony import */ var _hooks_useCreateFormFromTemplate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks/useCreateFormFromTemplate */ "./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts"); +/* harmony import */ var _constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../constants/defaultFormOptions */ "./scripts/constants/defaultFormOptions.ts"); +/* harmony import */ var _Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); + + + + + + + + +function FormSelect(_ref) { + var formId = _ref.formId, + formName = _ref.formName, + handleChange = _ref.handleChange, + _ref$origin = _ref.origin, + origin = _ref$origin === void 0 ? 'gutenberg' : _ref$origin; + + var _useForms = (0,_hooks_useForms__WEBPACK_IMPORTED_MODULE_4__["default"])(), + search = _useForms.search, + formApiError = _useForms.formApiError, + reset = _useForms.reset; + + var _useCreateFormFromTem = (0,_hooks_useCreateFormFromTemplate__WEBPACK_IMPORTED_MODULE_5__["default"])(origin), + createFormByTemplate = _useCreateFormFromTem.createFormByTemplate, + createReset = _useCreateFormFromTem.reset, + isCreating = _useCreateFormFromTem.isCreating, + hasError = _useCreateFormFromTem.hasError, + createApiError = _useCreateFormFromTem.formApiError; + + var value = formId && formName ? { + label: formName, + value: formId + } : null; + + var handleLocalChange = function handleLocalChange(option) { + if ((0,_constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_6__.isDefaultForm)(option.value)) { + createFormByTemplate(option.value).then(function (_ref2) { + var guid = _ref2.guid, + name = _ref2.name; + handleChange({ + value: guid, + label: name + }); + }); + } else { + handleChange(option); + } + }; + + return isCreating ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__["default"], {}) : formApiError || createApiError ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__["default"], { + status: formApiError ? formApiError.status : createApiError.status, + resetErrorState: function resetErrorState() { + if (hasError) { + createReset(); + } else { + reset(); + } + }, + errorInfo: { + header: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('There was a problem retrieving your forms', 'leadin'), + message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Please refresh your forms or try again in a few minutes', 'leadin'), + action: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Refresh forms', 'leadin') + } + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FormSelector__WEBPACK_IMPORTED_MODULE_1__["default"], { + loadOptions: search, + onChange: function onChange(option) { + return handleLocalChange(option); + }, + value: value + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/FormSelector.tsx": +/*!**********************************************!*\ + !*** ./scripts/shared/Form/FormSelector.tsx ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormSelector) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Common/HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Common/AsyncSelect */ "./scripts/shared/Common/AsyncSelect.tsx"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); + + + + + +function FormSelector(_ref) { + var loadOptions = _ref.loadOptions, + onChange = _ref.onChange, + value = _ref.value; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_1__["default"], { + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.pluginPath, + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + "data-test-id": "leadin-form-select", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Select an existing form or create a new one from a template', 'leadin') + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_3__["default"], { + placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Search for a form', 'leadin'), + value: value, + loadOptions: loadOptions, + onChange: onChange + })] + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/PreviewForm.tsx": +/*!*********************************************!*\ + !*** ./scripts/shared/Form/PreviewForm.tsx ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ PreviewForm) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIOverlay */ "./scripts/shared/UIComponents/UIOverlay.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _hooks_useFormsScript__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks/useFormsScript */ "./scripts/shared/Form/hooks/useFormsScript.ts"); + + + + + +function PreviewForm(_ref) { + var portalId = _ref.portalId, + formId = _ref.formId; + var inputEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + var ready = (0,_hooks_useFormsScript__WEBPACK_IMPORTED_MODULE_4__["default"])(); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (!ready) { + return; + } + + if (inputEl.current) { + inputEl.current.innerHTML = ''; + var embedScript = document.createElement('script'); + embedScript.innerHTML = "hbspt.forms.create({ portalId: '".concat(portalId, "', formId: '").concat(formId, "', region: '").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.hublet, "', ").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.formsScriptPayload, " });"); + inputEl.current.appendChild(embedScript); + } + }, [formId, portalId, ready, inputEl]); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__["default"], { + ref: inputEl + }); +} + +/***/ }), + +/***/ "./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts": +/*!****************************************************************!*\ + !*** ./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useCreateFormFromTemplate) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +function useCreateFormFromTemplate() { + var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'gutenberg'; + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostAsyncBackgroundMessage)(); + var track = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle), + _useState2 = _slicedToArray(_useState, 2), + loadState = _useState2[0], + setLoadState = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState4 = _slicedToArray(_useState3, 2), + formApiError = _useState4[0], + setFormApiError = _useState4[1]; + + var createFormByTemplate = function createFormByTemplate(type) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading); + track({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.TrackFormCreatedFromTemplate, + payload: { + type: type, + origin: origin + } + }); + return proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.CreateFormFromTemplate, + payload: type + }).then(function (form) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle); + return form; + })["catch"](function (err) { + setFormApiError(err); + track({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.TrackFormCreationFailed, + payload: { + origin: origin + } + }); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed); + }); + }; + + return { + isCreating: loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading, + hasError: loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed, + formApiError: formApiError, + createFormByTemplate: createFormByTemplate, + reset: function reset() { + return setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle); + } + }; +} + +/***/ }), + +/***/ "./scripts/shared/Form/hooks/useForms.ts": +/*!***********************************************!*\ + !*** ./scripts/shared/Form/hooks/useForms.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useForms) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/debounce */ "./node_modules/lodash/debounce.js"); +/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../constants/defaultFormOptions */ "./scripts/constants/defaultFormOptions.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + +function useForms() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_2__.usePostAsyncBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState2 = _slicedToArray(_useState, 2), + formApiError = _useState2[0], + setFormApiError = _useState2[1]; + + var search = lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default()(function (search, callback) { + return proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages.FetchForms, + payload: { + search: search + } + }).then(function (forms) { + callback([].concat(_toConsumableArray(forms.map(function (form) { + return { + label: form.name, + value: form.guid + }; + })), [_constants_defaultFormOptions__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPTIONS])); + })["catch"](function (error) { + setFormApiError(error); + }); + }, 300, { + trailing: true + }); + return { + search: search, + formApiError: formApiError, + reset: function reset() { + return setFormApiError(null); + } + }; +} + +/***/ }), + +/***/ "./scripts/shared/Form/hooks/useFormsScript.ts": +/*!*****************************************************!*\ + !*** ./scripts/shared/Form/hooks/useFormsScript.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useFormScript) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lib/Raven */ "./scripts/lib/Raven.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var promise; + +function loadFormsScript() { + if (!promise) { + promise = new Promise(function (resolve, reject) { + return jquery__WEBPACK_IMPORTED_MODULE_0___default().getScript(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.formsScript).done(resolve).fail(reject); + }); + } + + return promise; +} + +function useFormScript() { + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + ready = _useState2[0], + setReady = _useState2[1]; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + loadFormsScript().then(function () { + return setReady(true); + })["catch"](function (error) { + return _lib_Raven__WEBPACK_IMPORTED_MODULE_3__["default"].captureException(error); + }); + }, []); + return ready; +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingController.tsx": +/*!******************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingController.tsx ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingController) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _MeetingSelector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MeetingSelector */ "./scripts/shared/Meeting/MeetingSelector.tsx"); +/* harmony import */ var _MeetingWarning__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./MeetingWarning */ "./scripts/shared/Meeting/MeetingWarning.tsx"); +/* harmony import */ var _hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks/useMeetings */ "./scripts/shared/Meeting/hooks/useMeetings.ts"); +/* harmony import */ var _Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Common/HubspotWrapper */ "./scripts/shared/Common/HubspotWrapper.ts"); +/* harmony import */ var _Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Common/ErrorHandler */ "./scripts/shared/Common/ErrorHandler.tsx"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_10__); + + + + + + + + + + + +function MeetingController(_ref) { + var handleChange = _ref.handleChange, + url = _ref.url; + + var _useMeetings = (0,_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__["default"])(), + meetings = _useMeetings.mappedMeetings, + loading = _useMeetings.loading, + error = _useMeetings.error, + reload = _useMeetings.reload, + connectCalendar = _useMeetings.connectCalendar; + + var selectedMeetingOption = (0,_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__.useSelectedMeeting)(url); + var selectedMeetingCalendar = (0,_hooks_useMeetings__WEBPACK_IMPORTED_MODULE_5__.useSelectedMeetingCalendar)(url); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (!url && meetings.length > 0) { + handleChange(meetings[0].value); + } + }, [meetings, url, handleChange]); + + var handleLocalChange = function handleLocalChange(option) { + handleChange(option.value); + }; + + var handleConnectCalendar = function handleConnectCalendar() { + return connectCalendar().then(function () { + reload(); + })["catch"](function (error) { + raven_js__WEBPACK_IMPORTED_MODULE_10___default().captureMessage('Unable to connect calendar', { + extra: { + error: error + } + }); + }); + }; + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: loading ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_2__["default"], {}) : error ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_ErrorHandler__WEBPACK_IMPORTED_MODULE_7__["default"], { + status: error && error.status || error, + resetErrorState: function resetErrorState() { + return reload(); + }, + errorInfo: { + header: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('There was a problem retrieving your meetings', 'leadin'), + message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Please refresh your meetings or try again in a few minutes', 'leadin'), + action: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Refresh meetings', 'leadin') + } + }) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Common_HubspotWrapper__WEBPACK_IMPORTED_MODULE_6__["default"], { + padding: "90px 32px 24px", + pluginPath: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_8__.pluginPath, + children: [selectedMeetingCalendar && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingWarning__WEBPACK_IMPORTED_MODULE_4__["default"], { + status: selectedMeetingCalendar, + onConnectCalendar: handleConnectCalendar + }), meetings.length > 1 && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingSelector__WEBPACK_IMPORTED_MODULE_3__["default"], { + onChange: handleLocalChange, + options: meetings, + value: selectedMeetingOption + })] + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingEdit.tsx": +/*!************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingEdit.tsx ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingsEditContainer) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _MeetingController__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MeetingController */ "./scripts/shared/Meeting/MeetingController.tsx"); +/* harmony import */ var _PreviewMeeting__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PreviewMeeting */ "./scripts/shared/Meeting/PreviewMeeting.tsx"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +/* harmony import */ var _Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Common/LoadingBlock */ "./scripts/shared/Common/LoadingBlock.tsx"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + +function MeetingEdit(_ref) { + var url = _ref.attributes.url, + isSelected = _ref.isSelected, + setAttributes = _ref.setAttributes, + _ref$preview = _ref.preview, + preview = _ref$preview === void 0 ? true : _ref$preview, + _ref$origin = _ref.origin, + origin = _ref$origin === void 0 ? 'gutenberg' : _ref$origin; + var isBackgroundAppReady = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__.useBackgroundAppContext)(); + var monitorFormPreviewRender = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__.usePostBackgroundMessage)(); + + var handleChange = function handleChange(newUrl) { + setAttributes({ + url: newUrl + }); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + monitorFormPreviewRender({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_6__.ProxyMessages.TrackMeetingPreviewRender, + payload: { + origin: origin + } + }); + }, [origin]); + return !isBackgroundAppReady ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_LoadingBlock__WEBPACK_IMPORTED_MODULE_7__["default"], {}) : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [(isSelected || !url) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MeetingController__WEBPACK_IMPORTED_MODULE_2__["default"], { + url: url, + handleChange: handleChange + }), preview && url && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PreviewMeeting__WEBPACK_IMPORTED_MODULE_3__["default"], { + url: url + })] + }); +} + +function MeetingsEditContainer(props) { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_4__.BackgroudAppContext.Provider, { + value: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_5__.refreshToken && (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_8__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_5__.refreshToken), + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(MeetingEdit, _objectSpread({}, props)) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingSelector.tsx": +/*!****************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingSelector.tsx ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingSelector) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Common/AsyncSelect */ "./scripts/shared/Common/AsyncSelect.tsx"); +/* harmony import */ var _UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../UIComponents/UISpacer */ "./scripts/shared/UIComponents/UISpacer.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); + + + + + +function MeetingSelector(_ref) { + var options = _ref.options, + onChange = _ref.onChange, + value = _ref.value; + var optionsWrapper = [{ + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Meeting name', 'leadin'), + options: options + }]; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UISpacer__WEBPACK_IMPORTED_MODULE_3__["default"], {}), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + "data-test-id": "leadin-meeting-select", + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("b", { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Select a meeting scheduling page', 'leadin') + }) + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Common_AsyncSelect__WEBPACK_IMPORTED_MODULE_2__["default"], { + defaultOptions: optionsWrapper, + onChange: onChange, + placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Select a meeting', 'leadin'), + value: value + })] + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/MeetingWarning.tsx": +/*!***************************************************!*\ + !*** ./scripts/shared/Meeting/MeetingWarning.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ MeetingWarning) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _UIComponents_UIAlert__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../UIComponents/UIAlert */ "./scripts/shared/UIComponents/UIAlert.tsx"); +/* harmony import */ var _UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIButton */ "./scripts/shared/UIComponents/UIButton.ts"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./scripts/shared/Meeting/constants.ts"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); + + + + + +function MeetingWarning(_ref) { + var status = _ref.status, + onConnectCalendar = _ref.onConnectCalendar; + var isMeetingOwner = status === _constants__WEBPACK_IMPORTED_MODULE_3__.CURRENT_USER_CALENDAR_MISSING; + var titleText = isMeetingOwner ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Your calendar is not connected', 'leadin') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Calendar is not connected', 'leadin'); + var titleMessage = isMeetingOwner ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Please connect your calendar to activate your scheduling pages', 'leadin') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', 'leadin'); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIAlert__WEBPACK_IMPORTED_MODULE_1__["default"], { + titleText: titleText, + titleMessage: titleMessage, + children: isMeetingOwner && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIButton__WEBPACK_IMPORTED_MODULE_2__["default"], { + use: "tertiary", + id: "meetings-connect-calendar", + onClick: onConnectCalendar, + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Connect calendar', 'leadin') + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/PreviewMeeting.tsx": +/*!***************************************************!*\ + !*** ./scripts/shared/Meeting/PreviewMeeting.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ PreviewForm) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../UIComponents/UIOverlay */ "./scripts/shared/UIComponents/UIOverlay.ts"); +/* harmony import */ var _hooks_useMeetingsScript__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks/useMeetingsScript */ "./scripts/shared/Meeting/hooks/useMeetingsScript.ts"); + + + + +function PreviewForm(_ref) { + var url = _ref.url; + var ready = (0,_hooks_useMeetingsScript__WEBPACK_IMPORTED_MODULE_3__["default"])(); + var inputEl = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + if (!ready) { + return; + } + + if (inputEl.current) { + inputEl.current.innerHTML = ''; + var container = document.createElement('div'); + container.dataset.src = "".concat(url, "?embed=true"); + container.classList.add('meetings-iframe-container'); + inputEl.current.appendChild(container); + var embedScript = document.createElement('script'); + embedScript.innerHTML = 'hbspt.meetings.create(".meetings-iframe-container");'; + inputEl.current.appendChild(embedScript); + } + }, [url, ready, inputEl]); + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: url && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UIComponents_UIOverlay__WEBPACK_IMPORTED_MODULE_2__["default"], { + ref: inputEl + }) + }); +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/constants.ts": +/*!*********************************************!*\ + !*** ./scripts/shared/Meeting/constants.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CURRENT_USER_CALENDAR_MISSING": () => (/* binding */ CURRENT_USER_CALENDAR_MISSING), +/* harmony export */ "OTHER_USER_CALENDAR_MISSING": () => (/* binding */ OTHER_USER_CALENDAR_MISSING) +/* harmony export */ }); +var OTHER_USER_CALENDAR_MISSING = 'OTHER_USER_CALENDAR_MISSING'; +var CURRENT_USER_CALENDAR_MISSING = 'CURRENT_USER_CALENDAR_MISSING'; + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts": +/*!*************************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useCurrentUserFetch) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var user = null; +function useCurrentUserFetch() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostAsyncBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded), + _useState2 = _slicedToArray(_useState, 2), + loadState = _useState2[0], + setLoadState = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState4 = _slicedToArray(_useState3, 2), + error = _useState4[0], + setError = _useState4[1]; + + var createUser = function createUser() { + if (!user) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded); + } + }; + + var reload = function reload() { + user = null; + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded); + setError(null); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded && !user) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading); + proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.FetchOrCreateMeetingUser + }).then(function (data) { + user = data; + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Idle); + })["catch"](function (err) { + setError(err); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed); + }); + } + }, [loadState]); + return { + user: user, + loadUserState: loadState, + error: error, + createUser: createUser, + reload: reload + }; +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useMeetings.ts": +/*!*****************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useMeetings.ts ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useMeetings), +/* harmony export */ "useSelectedMeeting": () => (/* binding */ useSelectedMeeting), +/* harmony export */ "useSelectedMeetingCalendar": () => (/* binding */ useSelectedMeetingCalendar) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants */ "./scripts/shared/Meeting/constants.ts"); +/* harmony import */ var _useMeetingsFetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useMeetingsFetch */ "./scripts/shared/Meeting/hooks/useMeetingsFetch.ts"); +/* harmony import */ var _useCurrentUserFetch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useCurrentUserFetch */ "./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + + + +function getDefaultMeetingName(meeting, currentUser, meetingUsers) { + var _meeting$meetingsUser = _slicedToArray(meeting.meetingsUserIds, 1), + meetingOwnerId = _meeting$meetingsUser[0]; + + var result = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Default', 'leadin'); + + if (currentUser && meetingOwnerId !== currentUser.id && meetingUsers[meetingOwnerId]) { + var user = meetingUsers[meetingOwnerId]; + result += " (".concat(user.userProfile.fullName, ")"); + } + + return result; +} + +function hasCalendarObject(user) { + return user && user.meetingsUserBlob && user.meetingsUserBlob.calendarSettings && user.meetingsUserBlob.calendarSettings.email; +} + +function useMeetings() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_6__.usePostAsyncBackgroundMessage)(); + + var _useMeetingsFetch = (0,_useMeetingsFetch__WEBPACK_IMPORTED_MODULE_3__["default"])(), + meetings = _useMeetingsFetch.meetings, + meetingUsers = _useMeetingsFetch.meetingUsers, + meetingsError = _useMeetingsFetch.error, + loadMeetingsState = _useMeetingsFetch.loadMeetingsState, + reloadMeetings = _useMeetingsFetch.reload; + + var _useCurrentUserFetch = (0,_useCurrentUserFetch__WEBPACK_IMPORTED_MODULE_4__["default"])(), + currentUser = _useCurrentUserFetch.user, + userError = _useCurrentUserFetch.error, + loadUserState = _useCurrentUserFetch.loadUserState, + reloadUser = _useCurrentUserFetch.reload; + + var reload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(function () { + reloadUser(); + reloadMeetings(); + }, [reloadUser, reloadMeetings]); + + var connectCalendar = function connectCalendar() { + return proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_7__.ProxyMessages.ConnectMeetingsCalendar + }); + }; + + return { + mappedMeetings: meetings.map(function (meet) { + return { + label: meet.name || getDefaultMeetingName(meet, currentUser, meetingUsers), + value: meet.link + }; + }), + meetings: meetings, + meetingUsers: meetingUsers, + currentUser: currentUser, + error: meetingsError || userError, + loading: loadMeetingsState == _enums_loadState__WEBPACK_IMPORTED_MODULE_5__["default"].Loading || loadUserState === _enums_loadState__WEBPACK_IMPORTED_MODULE_5__["default"].Loading, + reload: reload, + connectCalendar: connectCalendar + }; +} +function useSelectedMeeting(url) { + var _useMeetings = useMeetings(), + meetings = _useMeetings.mappedMeetings; + + var option = meetings.find(function (_ref) { + var value = _ref.value; + return value === url; + }); + return option; +} +function useSelectedMeetingCalendar(url) { + var _useMeetings2 = useMeetings(), + meetings = _useMeetings2.meetings, + meetingUsers = _useMeetings2.meetingUsers, + currentUser = _useMeetings2.currentUser; + + var meeting = meetings.find(function (meet) { + return meet.link === url; + }); + var mappedMeetingUsersId = meetingUsers.reduce(function (p, c) { + return _objectSpread(_objectSpread({}, p), {}, _defineProperty({}, c.id, c)); + }, {}); + + if (!meeting) { + return null; + } else { + var meetingsUserIds = meeting.meetingsUserIds; + + if (currentUser && meetingsUserIds.includes(currentUser.id) && !hasCalendarObject(currentUser)) { + return _constants__WEBPACK_IMPORTED_MODULE_2__.CURRENT_USER_CALENDAR_MISSING; + } else if (meetingsUserIds.map(function (id) { + return mappedMeetingUsersId[id]; + }).some(function (user) { + return !hasCalendarObject(user); + })) { + return _constants__WEBPACK_IMPORTED_MODULE_2__.OTHER_USER_CALENDAR_MISSING; + } else { + return null; + } + } +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useMeetingsFetch.ts": +/*!**********************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useMeetingsFetch.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useMeetingsFetch) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../iframe/useBackgroundApp */ "./scripts/iframe/useBackgroundApp.ts"); +/* harmony import */ var _enums_loadState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../enums/loadState */ "./scripts/shared/enums/loadState.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var meetings = []; +var meetingUsers = []; +function useMeetingsFetch() { + var proxy = (0,_iframe_useBackgroundApp__WEBPACK_IMPORTED_MODULE_1__.usePostAsyncBackgroundMessage)(); + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded), + _useState2 = _slicedToArray(_useState, 2), + loadState = _useState2[0], + setLoadState = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + _useState4 = _slicedToArray(_useState3, 2), + error = _useState4[0], + setError = _useState4[1]; + + var reload = function reload() { + meetings = []; + setError(null); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (loadState === _enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].NotLoaded && meetings.length === 0) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loading); + proxy({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_3__.ProxyMessages.FetchMeetingsAndUsers + }).then(function (data) { + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Loaded); + meetings = data && data.meetingLinks; + meetingUsers = data && data.meetingUsers; + })["catch"](function (e) { + setError(e); + setLoadState(_enums_loadState__WEBPACK_IMPORTED_MODULE_2__["default"].Failed); + }); + } + }, [loadState]); + return { + meetings: meetings, + meetingUsers: meetingUsers, + loadMeetingsState: loadState, + error: error, + reload: reload + }; +} + +/***/ }), + +/***/ "./scripts/shared/Meeting/hooks/useMeetingsScript.ts": +/*!***********************************************************!*\ + !*** ./scripts/shared/Meeting/hooks/useMeetingsScript.ts ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useMeetingsScript) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lib/Raven */ "./scripts/lib/Raven.ts"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var promise; + +function loadMeetingsScript() { + if (!promise) { + promise = new Promise(function (resolve, reject) { + return jquery__WEBPACK_IMPORTED_MODULE_0___default().getScript(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.meetingsScript).done(resolve).fail(reject); + }); + } + + return promise; +} + +function useMeetingsScript() { + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + ready = _useState2[0], + setReady = _useState2[1]; + + (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () { + loadMeetingsScript().then(function () { + return setReady(true); + })["catch"](function (error) { + return _lib_Raven__WEBPACK_IMPORTED_MODULE_3__["default"].captureException(error); + }); + }, []); + return ready; +} + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIAlert.tsx": +/*!*************************************************!*\ + !*** ./scripts/shared/UIComponents/UIAlert.tsx ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UIAlert) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + +var AlertContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('div')({ + name: "AlertContainer", + "class": "a1h8m4fo", + propsAsIs: false +}); +var Title = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('p')({ + name: "Title", + "class": "tyndzxk", + propsAsIs: false +}); +var Message = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('p')({ + name: "Message", + "class": "m1m9sbk4", + propsAsIs: false +}); +var MessageContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('div')({ + name: "MessageContainer", + "class": "mg5o421", + propsAsIs: false +}); +function UIAlert(_ref) { + var titleText = _ref.titleText, + titleMessage = _ref.titleMessage, + children = _ref.children; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(AlertContainer, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(MessageContainer, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Title, { + children: titleText + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Message, { + children: titleMessage + })] + }), children] + }); +} + +__webpack_require__(/*! ./UIAlert.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIAlert.tsx */ "./scripts/shared/UIComponents/UIAlert.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIButton.ts": +/*!*************************************************!*\ + !*** ./scripts/shared/UIComponents/UIButton.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colors */ "./scripts/shared/UIComponents/colors.ts"); + + + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.use === 'tertiary' ? _colors__WEBPACK_IMPORTED_MODULE_0__.HEFFALUMP : _colors__WEBPACK_IMPORTED_MODULE_0__.LORAX; + }; +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_1__.styled)('button')({ + name: "UIButton0", + "class": "ug152ch", + propsAsIs: false, + vars: { + "ug152ch-0": [_exp2()] + } +})); + +__webpack_require__(/*! ./UIButton.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIButton.ts */ "./scripts/shared/UIComponents/UIButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIContainer.ts": +/*!****************************************************!*\ + !*** ./scripts/shared/UIComponents/UIContainer.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + +var _exp = /*#__PURE__*/function _exp() { + return function (props) { + return props.textAlign ? props.textAlign : 'inherit'; + }; +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "UIContainer0", + "class": "ua13n1c", + propsAsIs: false, + vars: { + "ua13n1c-0": [_exp()] + } +})); + +__webpack_require__(/*! ./UIContainer.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIContainer.ts */ "./scripts/shared/UIComponents/UIContainer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIOverlay.ts": +/*!**************************************************!*\ + !*** ./scripts/shared/UIComponents/UIOverlay.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "UIOverlay0", + "class": "u1q7a48k", + propsAsIs: false +})); + +__webpack_require__(/*! ./UIOverlay.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UIOverlay.ts */ "./scripts/shared/UIComponents/UIOverlay.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpacer.ts": +/*!*************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpacer.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_0__.styled)('div')({ + name: "UISpacer0", + "class": "u3qxofx", + propsAsIs: false +})); + +__webpack_require__(/*! ./UISpacer.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UISpacer.ts */ "./scripts/shared/UIComponents/UISpacer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpinner.tsx": +/*!***************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpinner.tsx ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UISpinner) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); +/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ "./scripts/shared/UIComponents/colors.ts"); + + + +var SpinnerOuter = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('div')({ + name: "SpinnerOuter", + "class": "sxa9zrc", + propsAsIs: false +}); +var SpinnerInner = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('div')({ + name: "SpinnerInner", + "class": "s14430wa", + propsAsIs: false +}); + +var _exp = /*#__PURE__*/function _exp() { + return function (props) { + return props.color; + }; +}; + +var Circle = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('circle')({ + name: "Circle", + "class": "ct87ghk", + propsAsIs: true, + vars: { + "ct87ghk-0": [_exp()] + } +}); + +var _exp2 = /*#__PURE__*/function _exp2() { + return function (props) { + return props.color; + }; +}; + +var AnimatedCircle = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('circle')({ + name: "AnimatedCircle", + "class": "avili0h", + propsAsIs: true, + vars: { + "avili0h-0": [_exp2()] + } +}); +function UISpinner(_ref) { + var _ref$size = _ref.size, + size = _ref$size === void 0 ? 20 : _ref$size; + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SpinnerOuter, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SpinnerInner, { + children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", { + height: size, + width: size, + viewBox: "0 0 50 50", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Circle, { + color: _colors__WEBPACK_IMPORTED_MODULE_1__.CALYPSO_MEDIUM, + cx: "25", + cy: "25", + r: "22.5" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(AnimatedCircle, { + color: _colors__WEBPACK_IMPORTED_MODULE_1__.CALYPSO, + cx: "25", + cy: "25", + r: "22.5" + })] + }) + }) + }); +} + +__webpack_require__(/*! ./UISpinner.linaria.css!=!../../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./UISpinner.tsx */ "./scripts/shared/UIComponents/UISpinner.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx"); + +/***/ }), + +/***/ "./scripts/shared/UIComponents/colors.ts": +/*!***********************************************!*\ + !*** ./scripts/shared/UIComponents/colors.ts ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CALYPSO": () => (/* binding */ CALYPSO), +/* harmony export */ "CALYPSO_LIGHT": () => (/* binding */ CALYPSO_LIGHT), +/* harmony export */ "CALYPSO_MEDIUM": () => (/* binding */ CALYPSO_MEDIUM), +/* harmony export */ "HEFFALUMP": () => (/* binding */ HEFFALUMP), +/* harmony export */ "LORAX": () => (/* binding */ LORAX), +/* harmony export */ "MARIGOLD_LIGHT": () => (/* binding */ MARIGOLD_LIGHT), +/* harmony export */ "MARIGOLD_MEDIUM": () => (/* binding */ MARIGOLD_MEDIUM), +/* harmony export */ "OBSIDIAN": () => (/* binding */ OBSIDIAN), +/* harmony export */ "OLAF": () => (/* binding */ OLAF) +/* harmony export */ }); +var CALYPSO = '#00a4bd'; +var CALYPSO_MEDIUM = '#7fd1de'; +var CALYPSO_LIGHT = '#e5f5f8'; +var LORAX = '#ff7a59'; +var OLAF = '#ffffff'; +var HEFFALUMP = '#425b76'; +var MARIGOLD_LIGHT = '#fef8f0'; +var MARIGOLD_MEDIUM = '#fae0b5'; +var OBSIDIAN = '#33475b'; + +/***/ }), + +/***/ "./scripts/shared/enums/connectionStatus.ts": +/*!**************************************************!*\ + !*** ./scripts/shared/enums/connectionStatus.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +var ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected' +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConnectionStatus); + +/***/ }), + +/***/ "./scripts/shared/enums/loadState.ts": +/*!*******************************************!*\ + !*** ./scripts/shared/enums/loadState.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +var LoadState = { + NotLoaded: 'NotLoaded', + Loading: 'Loading', + Loaded: 'Loaded', + Idle: 'Idle', + Failed: 'Failed' +}; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LoadState); + +/***/ }), + +/***/ "./scripts/utils/appUtils.ts": +/*!***********************************!*\ + !*** ./scripts/utils/appUtils.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "initApp": () => (/* binding */ initApp), +/* harmony export */ "initAppOnReady": () => (/* binding */ initAppOnReady) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); + + +function initApp(initFn) { + (0,_lib_Raven__WEBPACK_IMPORTED_MODULE_1__.configureRaven)(); + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].context(initFn); +} +function initAppOnReady(initFn) { + function main() { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(initFn); + } + + initApp(main); +} + +/***/ }), + +/***/ "./scripts/utils/backgroundAppUtils.ts": +/*!*********************************************!*\ + !*** ./scripts/utils/backgroundAppUtils.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "getOrCreateBackgroundApp": () => (/* binding */ getOrCreateBackgroundApp), +/* harmony export */ "initBackgroundApp": () => (/* binding */ initBackgroundApp) +/* harmony export */ }); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _appUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./appUtils */ "./scripts/utils/appUtils.ts"); + + +function initBackgroundApp(initFn) { + function main() { + if (Array.isArray(initFn)) { + initFn.forEach(function (callback) { + return callback(); + }); + } else { + initFn(); + } + } + + (0,_appUtils__WEBPACK_IMPORTED_MODULE_1__.initApp)(main); +} +var getOrCreateBackgroundApp = function getOrCreateBackgroundApp(refreshToken) { + if (window.LeadinBackgroundApp) { + return window.LeadinBackgroundApp; + } + + var _window = window, + IntegratedAppEmbedder = _window.IntegratedAppEmbedder, + IntegratedAppOptions = _window.IntegratedAppOptions; + var options = new IntegratedAppOptions().setLocale(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.locale).setDeviceId(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.deviceId).setRefreshToken(refreshToken); + var embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.portalId, _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.hubspotBaseUrl, function () {}).setOptions(options); + embedder.attachTo(document.body, false); + embedder.postStartAppMessage(); // lets the app know all all data has been passed to it + + window.LeadinBackgroundApp = embedder; + return window.LeadinBackgroundApp; +}; + +/***/ }), + +/***/ "./scripts/utils/withMetaData.ts": +/*!***************************************!*\ + !*** ./scripts/utils/withMetaData.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ "isFullSiteEditor": () => (/* binding */ isFullSiteEditor) +/* harmony export */ }); +/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); +/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + // from answer here: https://github.com/WordPress/gutenberg/issues/44477#issuecomment-1263026599 + +var isFullSiteEditor = function isFullSiteEditor() { + return _wordpress_data__WEBPACK_IMPORTED_MODULE_0__.select && !!(0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.select)('core/edit-site'); +}; +var applyWithSelect = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.withSelect)(function (select, props) { + return { + metaValue: select('core/editor').getEditedPostAttribute('meta')[props.metaKey] + }; +}); +var applyWithDispatch = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.withDispatch)(function (dispatch, props) { + return { + setMetaValue: function setMetaValue(value) { + dispatch('core/editor').editPost({ + meta: _defineProperty({}, props.metaKey, value) + }); + } + }; +}); + +function apply(el) { + return applyWithSelect(applyWithDispatch(el)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (apply); + +/***/ }), + +/***/ "./node_modules/is-what/dist/index.esm.js": +/*!************************************************!*\ + !*** ./node_modules/is-what/dist/index.esm.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "getType": () => (/* binding */ getType), +/* harmony export */ "isAnyObject": () => (/* binding */ isAnyObject), +/* harmony export */ "isArray": () => (/* binding */ isArray), +/* harmony export */ "isBlob": () => (/* binding */ isBlob), +/* harmony export */ "isBoolean": () => (/* binding */ isBoolean), +/* harmony export */ "isDate": () => (/* binding */ isDate), +/* harmony export */ "isEmptyArray": () => (/* binding */ isEmptyArray), +/* harmony export */ "isEmptyObject": () => (/* binding */ isEmptyObject), +/* harmony export */ "isEmptyString": () => (/* binding */ isEmptyString), +/* harmony export */ "isError": () => (/* binding */ isError), +/* harmony export */ "isFile": () => (/* binding */ isFile), +/* harmony export */ "isFullArray": () => (/* binding */ isFullArray), +/* harmony export */ "isFullObject": () => (/* binding */ isFullObject), +/* harmony export */ "isFullString": () => (/* binding */ isFullString), +/* harmony export */ "isFunction": () => (/* binding */ isFunction), +/* harmony export */ "isMap": () => (/* binding */ isMap), +/* harmony export */ "isNaNValue": () => (/* binding */ isNaNValue), +/* harmony export */ "isNull": () => (/* binding */ isNull), +/* harmony export */ "isNullOrUndefined": () => (/* binding */ isNullOrUndefined), +/* harmony export */ "isNumber": () => (/* binding */ isNumber), +/* harmony export */ "isObject": () => (/* binding */ isObject), +/* harmony export */ "isObjectLike": () => (/* binding */ isObjectLike), +/* harmony export */ "isOneOf": () => (/* binding */ isOneOf), +/* harmony export */ "isPlainObject": () => (/* binding */ isPlainObject), +/* harmony export */ "isPrimitive": () => (/* binding */ isPrimitive), +/* harmony export */ "isPromise": () => (/* binding */ isPromise), +/* harmony export */ "isRegExp": () => (/* binding */ isRegExp), +/* harmony export */ "isSet": () => (/* binding */ isSet), +/* harmony export */ "isString": () => (/* binding */ isString), +/* harmony export */ "isSymbol": () => (/* binding */ isSymbol), +/* harmony export */ "isType": () => (/* binding */ isType), +/* harmony export */ "isUndefined": () => (/* binding */ isUndefined), +/* harmony export */ "isWeakMap": () => (/* binding */ isWeakMap), +/* harmony export */ "isWeakSet": () => (/* binding */ isWeakSet) +/* harmony export */ }); +/** + * Returns the object type of the given payload + * + * @param {*} payload + * @returns {string} + */ +function getType(payload) { + return Object.prototype.toString.call(payload).slice(8, -1); +} +/** + * Returns whether the payload is undefined + * + * @param {*} payload + * @returns {payload is undefined} + */ +function isUndefined(payload) { + return getType(payload) === 'Undefined'; +} +/** + * Returns whether the payload is null + * + * @param {*} payload + * @returns {payload is null} + */ +function isNull(payload) { + return getType(payload) === 'Null'; +} +/** + * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes) + * + * @param {*} payload + * @returns {payload is PlainObject} + */ +function isPlainObject(payload) { + if (getType(payload) !== 'Object') + return false; + return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype; +} +/** + * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes) + * + * @param {*} payload + * @returns {payload is PlainObject} + */ +function isObject(payload) { + return isPlainObject(payload); +} +/** + * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes) + * + * @param {*} payload + * @returns {payload is { [K in any]: never }} + */ +function isEmptyObject(payload) { + return isPlainObject(payload) && Object.keys(payload).length === 0; +} +/** + * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes) + * + * @param {*} payload + * @returns {payload is PlainObject} + */ +function isFullObject(payload) { + return isPlainObject(payload) && Object.keys(payload).length > 0; +} +/** + * Returns whether the payload is an any kind of object (including special classes or objects with different prototypes) + * + * @param {*} payload + * @returns {payload is PlainObject} + */ +function isAnyObject(payload) { + return getType(payload) === 'Object'; +} +/** + * Returns whether the payload is an object like a type passed in < > + * + * Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop. + * + * @template T this must be passed in < > + * @param {*} payload + * @returns {payload is T} + */ +function isObjectLike(payload) { + return isAnyObject(payload); +} +/** + * Returns whether the payload is a function (regular or async) + * + * @param {*} payload + * @returns {payload is AnyFunction} + */ +function isFunction(payload) { + return typeof payload === 'function'; +} +/** + * Returns whether the payload is an array + * + * @param {any} payload + * @returns {payload is any[]} + */ +function isArray(payload) { + return getType(payload) === 'Array'; +} +/** + * Returns whether the payload is a an array with at least 1 item + * + * @param {*} payload + * @returns {payload is any[]} + */ +function isFullArray(payload) { + return isArray(payload) && payload.length > 0; +} +/** + * Returns whether the payload is a an empty array + * + * @param {*} payload + * @returns {payload is []} + */ +function isEmptyArray(payload) { + return isArray(payload) && payload.length === 0; +} +/** + * Returns whether the payload is a string + * + * @param {*} payload + * @returns {payload is string} + */ +function isString(payload) { + return getType(payload) === 'String'; +} +/** + * Returns whether the payload is a string, BUT returns false for '' + * + * @param {*} payload + * @returns {payload is string} + */ +function isFullString(payload) { + return isString(payload) && payload !== ''; +} +/** + * Returns whether the payload is '' + * + * @param {*} payload + * @returns {payload is string} + */ +function isEmptyString(payload) { + return payload === ''; +} +/** + * Returns whether the payload is a number (but not NaN) + * + * This will return `false` for `NaN`!! + * + * @param {*} payload + * @returns {payload is number} + */ +function isNumber(payload) { + return getType(payload) === 'Number' && !isNaN(payload); +} +/** + * Returns whether the payload is a boolean + * + * @param {*} payload + * @returns {payload is boolean} + */ +function isBoolean(payload) { + return getType(payload) === 'Boolean'; +} +/** + * Returns whether the payload is a regular expression (RegExp) + * + * @param {*} payload + * @returns {payload is RegExp} + */ +function isRegExp(payload) { + return getType(payload) === 'RegExp'; +} +/** + * Returns whether the payload is a Map + * + * @param {*} payload + * @returns {payload is Map} + */ +function isMap(payload) { + return getType(payload) === 'Map'; +} +/** + * Returns whether the payload is a WeakMap + * + * @param {*} payload + * @returns {payload is WeakMap} + */ +function isWeakMap(payload) { + return getType(payload) === 'WeakMap'; +} +/** + * Returns whether the payload is a Set + * + * @param {*} payload + * @returns {payload is Set} + */ +function isSet(payload) { + return getType(payload) === 'Set'; +} +/** + * Returns whether the payload is a WeakSet + * + * @param {*} payload + * @returns {payload is WeakSet} + */ +function isWeakSet(payload) { + return getType(payload) === 'WeakSet'; +} +/** + * Returns whether the payload is a Symbol + * + * @param {*} payload + * @returns {payload is symbol} + */ +function isSymbol(payload) { + return getType(payload) === 'Symbol'; +} +/** + * Returns whether the payload is a Date, and that the date is valid + * + * @param {*} payload + * @returns {payload is Date} + */ +function isDate(payload) { + return getType(payload) === 'Date' && !isNaN(payload); +} +/** + * Returns whether the payload is a Blob + * + * @param {*} payload + * @returns {payload is Blob} + */ +function isBlob(payload) { + return getType(payload) === 'Blob'; +} +/** + * Returns whether the payload is a File + * + * @param {*} payload + * @returns {payload is File} + */ +function isFile(payload) { + return getType(payload) === 'File'; +} +/** + * Returns whether the payload is a Promise + * + * @param {*} payload + * @returns {payload is Promise} + */ +function isPromise(payload) { + return getType(payload) === 'Promise'; +} +/** + * Returns whether the payload is an Error + * + * @param {*} payload + * @returns {payload is Error} + */ +function isError(payload) { + return getType(payload) === 'Error'; +} +/** + * Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`) + * + * @param {*} payload + * @returns {payload is typeof NaN} + */ +function isNaNValue(payload) { + return getType(payload) === 'Number' && isNaN(payload); +} +/** + * Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol) + * + * @param {*} payload + * @returns {(payload is boolean | null | undefined | number | string | symbol)} + */ +function isPrimitive(payload) { + return (isBoolean(payload) || + isNull(payload) || + isUndefined(payload) || + isNumber(payload) || + isString(payload) || + isSymbol(payload)); +} +/** + * Returns true whether the payload is null or undefined + * + * @param {*} payload + * @returns {(payload is null | undefined)} + */ +var isNullOrUndefined = isOneOf(isNull, isUndefined); +function isOneOf(a, b, c, d, e) { + return function (value) { + return a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value)); + }; +} +/** + * Does a generic check to check that the given payload is of a given type. + * In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!); + * It will, however, differentiate between object and null + * + * @template T + * @param {*} payload + * @param {T} type + * @throws {TypeError} Will throw type error if type is an invalid type + * @returns {payload is T} + */ +function isType(payload, type) { + if (!(type instanceof Function)) { + throw new TypeError('Type must be a function'); + } + if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) { + throw new TypeError('Type is not a class'); + } + // Classes usually have names (as functions usually have names) + var name = type.name; + return getType(payload) === name || Boolean(payload && payload.constructor === type); +} + + + + +/***/ }), + +/***/ "./node_modules/lodash/_Symbol.js": +/*!****************************************!*\ + !*** ./node_modules/lodash/_Symbol.js ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseGetTag.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_baseGetTag.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), + getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"), + objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js"); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_baseTrim.js": +/*!******************************************!*\ + !*** ./node_modules/lodash/_baseTrim.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var trimmedEndIndex = __webpack_require__(/*! ./_trimmedEndIndex */ "./node_modules/lodash/_trimmedEndIndex.js"); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +module.exports = baseTrim; + + +/***/ }), + +/***/ "./node_modules/lodash/_freeGlobal.js": +/*!********************************************!*\ + !*** ./node_modules/lodash/_freeGlobal.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; + +module.exports = freeGlobal; + + +/***/ }), + +/***/ "./node_modules/lodash/_getRawTag.js": +/*!*******************************************!*\ + !*** ./node_modules/lodash/_getRawTag.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), + +/***/ "./node_modules/lodash/_objectToString.js": +/*!************************************************!*\ + !*** ./node_modules/lodash/_objectToString.js ***! + \************************************************/ +/***/ ((module) => { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), + +/***/ "./node_modules/lodash/_root.js": +/*!**************************************!*\ + !*** ./node_modules/lodash/_root.js ***! + \**************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), + +/***/ "./node_modules/lodash/_trimmedEndIndex.js": +/*!*************************************************!*\ + !*** ./node_modules/lodash/_trimmedEndIndex.js ***! + \*************************************************/ +/***/ ((module) => { + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +module.exports = trimmedEndIndex; + + +/***/ }), + +/***/ "./node_modules/lodash/debounce.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/debounce.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + now = __webpack_require__(/*! ./now */ "./node_modules/lodash/now.js"), + toNumber = __webpack_require__(/*! ./toNumber */ "./node_modules/lodash/toNumber.js"); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; + + +/***/ }), + +/***/ "./node_modules/lodash/isObject.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isObject.js ***! + \*****************************************/ +/***/ ((module) => { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), + +/***/ "./node_modules/lodash/isObjectLike.js": +/*!*********************************************!*\ + !*** ./node_modules/lodash/isObjectLike.js ***! + \*********************************************/ +/***/ ((module) => { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), + +/***/ "./node_modules/lodash/isSymbol.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/isSymbol.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), + isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), + +/***/ "./node_modules/lodash/now.js": +/*!************************************!*\ + !*** ./node_modules/lodash/now.js ***! + \************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js"); + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return root.Date.now(); +}; + +module.exports = now; + + +/***/ }), + +/***/ "./node_modules/lodash/toNumber.js": +/*!*****************************************!*\ + !*** ./node_modules/lodash/toNumber.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseTrim = __webpack_require__(/*! ./_baseTrim */ "./node_modules/lodash/_baseTrim.js"), + isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"), + isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = toNumber; + + +/***/ }), + +/***/ "./node_modules/memoize-one/dist/memoize-one.esm.js": +/*!**********************************************************!*\ + !*** ./node_modules/memoize-one/dist/memoize-one.esm.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +var safeIsNaN = Number.isNaN || + function ponyfill(value) { + return typeof value === 'number' && value !== value; + }; +function isEqual(first, second) { + if (first === second) { + return true; + } + if (safeIsNaN(first) && safeIsNaN(second)) { + return true; + } + return false; +} +function areInputsEqual(newInputs, lastInputs) { + if (newInputs.length !== lastInputs.length) { + return false; + } + for (var i = 0; i < newInputs.length; i++) { + if (!isEqual(newInputs[i], lastInputs[i])) { + return false; + } + } + return true; +} + +function memoizeOne(resultFn, isEqual) { + if (isEqual === void 0) { isEqual = areInputsEqual; } + var lastThis; + var lastArgs = []; + var lastResult; + var calledOnce = false; + function memoized() { + var newArgs = []; + for (var _i = 0; _i < arguments.length; _i++) { + newArgs[_i] = arguments[_i]; + } + if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) { + return lastResult; + } + lastResult = resultFn.apply(this, newArgs); + calledOnce = true; + lastThis = this; + lastArgs = newArgs; + return lastResult; + } + return memoized; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoizeOne); + + +/***/ }), + +/***/ "./node_modules/merge-anything/dist/index.esm.js": +/*!*******************************************************!*\ + !*** ./node_modules/merge-anything/dist/index.esm.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "concatArrays": () => (/* binding */ concatArrays), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ "merge": () => (/* binding */ merge) +/* harmony export */ }); +/* harmony import */ var is_what__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-what */ "./node_modules/is-what/dist/index.esm.js"); + + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +} + +function assignProp(carry, key, newVal, originalObject) { + var propType = originalObject.propertyIsEnumerable(key) + ? 'enumerable' + : 'nonenumerable'; + if (propType === 'enumerable') + carry[key] = newVal; + if (propType === 'nonenumerable') { + Object.defineProperty(carry, key, { + value: newVal, + enumerable: false, + writable: true, + configurable: true + }); + } +} +function mergeRecursively(origin, newComer, extensions) { + // work directly on newComer if its not an object + if (!(0,is_what__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(newComer)) { + // extend merge rules + if (extensions && (0,is_what__WEBPACK_IMPORTED_MODULE_0__.isArray)(extensions)) { + extensions.forEach(function (extend) { + newComer = extend(origin, newComer); + }); + } + return newComer; + } + // define newObject to merge all values upon + var newObject = {}; + if ((0,is_what__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(origin)) { + var props_1 = Object.getOwnPropertyNames(origin); + var symbols_1 = Object.getOwnPropertySymbols(origin); + newObject = __spreadArrays(props_1, symbols_1).reduce(function (carry, key) { + // @ts-ignore + var targetVal = origin[key]; + if ((!(0,is_what__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(key) && !Object.getOwnPropertyNames(newComer).includes(key)) || + ((0,is_what__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(key) && !Object.getOwnPropertySymbols(newComer).includes(key))) { + assignProp(carry, key, targetVal, origin); + } + return carry; + }, {}); + } + var props = Object.getOwnPropertyNames(newComer); + var symbols = Object.getOwnPropertySymbols(newComer); + var result = __spreadArrays(props, symbols).reduce(function (carry, key) { + // re-define the origin and newComer as targetVal and newVal + var newVal = newComer[key]; + var targetVal = ((0,is_what__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(origin)) + // @ts-ignore + ? origin[key] + : undefined; + // extend merge rules + if (extensions && (0,is_what__WEBPACK_IMPORTED_MODULE_0__.isArray)(extensions)) { + extensions.forEach(function (extend) { + newVal = extend(targetVal, newVal); + }); + } + // When newVal is an object do the merge recursively + if (targetVal !== undefined && (0,is_what__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(newVal)) { + newVal = mergeRecursively(targetVal, newVal, extensions); + } + assignProp(carry, key, newVal, newComer); + return carry; + }, newObject); + return result; +} +/** + * Merge anything recursively. + * Objects get merged, special objects (classes etc.) are re-assigned "as is". + * Basic types overwrite objects or other basic types. + * + * @param {(IConfig | any)} origin + * @param {...any[]} newComers + * @returns the result + */ +function merge(origin) { + var newComers = []; + for (var _i = 1; _i < arguments.length; _i++) { + newComers[_i - 1] = arguments[_i]; + } + var extensions = null; + var base = origin; + if ((0,is_what__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(origin) && origin.extensions && Object.keys(origin).length === 1) { + base = {}; + extensions = origin.extensions; + } + return newComers.reduce(function (result, newComer) { + return mergeRecursively(result, newComer, extensions); + }, base); +} + +function concatArrays(originVal, newVal) { + if ((0,is_what__WEBPACK_IMPORTED_MODULE_0__.isArray)(originVal) && (0,is_what__WEBPACK_IMPORTED_MODULE_0__.isArray)(newVal)) { + // concat logic + return originVal.concat(newVal); + } + return newVal; // always return newVal as fallback!! +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (merge); + + + +/***/ }), + +/***/ "./scripts/gutenberg/UIComponents/UIImage.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/gutenberg/UIComponents/UIImage.ts": +/*!****************************************************************************************************************************************************************************************!*\ + !*** ./scripts/gutenberg/UIComponents/UIImage.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/gutenberg/UIComponents/UIImage.ts ***! + \****************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/Common/AsyncSelect.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx": +/*!*******************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/Common/AsyncSelect.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/AsyncSelect.tsx ***! + \*******************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/Common/HubspotWrapper.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts": +/*!************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/Common/HubspotWrapper.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/Common/HubspotWrapper.ts ***! + \************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIAlert.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx": +/*!***********************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIAlert.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIAlert.tsx ***! + \***********************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts": +/*!************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIButton.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIButton.ts ***! + \************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIContainer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts": +/*!******************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIContainer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIContainer.ts ***! + \******************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UIOverlay.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts": +/*!**************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UIOverlay.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UIOverlay.ts ***! + \**************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpacer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts": +/*!************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpacer.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpacer.ts ***! + \************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./scripts/shared/UIComponents/UISpinner.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx": +/*!***************************************************************************************************************************************************************************************!*\ + !*** ./scripts/shared/UIComponents/UISpinner.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/shared/UIComponents/UISpinner.tsx ***! + \***************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./node_modules/object-assign/index.js": +/*!*********************************************!*\ + !*** ./node_modules/object-assign/index.js ***! + \*********************************************/ +/***/ ((module) => { + +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), + +/***/ "./node_modules/prop-types/checkPropTypes.js": +/*!***************************************************!*\ + !*** ./node_modules/prop-types/checkPropTypes.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var printWarning = function() {}; + +if (true) { + var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js"); + var loggedTypeFailures = {}; + var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js"); + + printWarning = function(text) { + var message = 'Warning: ' + text; + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) { /**/ } + }; +} + +/** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ +function checkPropTypes(typeSpecs, values, location, componentName, getStack) { + if (true) { + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error( + (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.' + ); + err.name = 'Invariant Violation'; + throw err; + } + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); + } catch (ex) { + error = ex; + } + if (error && !(error instanceof Error)) { + printWarning( + (componentName || 'React class') + ': type specification of ' + + location + ' `' + typeSpecName + '` is invalid; the type checker ' + + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + + 'You may have forgotten to pass an argument to the type checker ' + + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + + 'shape all require an argument).' + ); + } + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var stack = getStack ? getStack() : ''; + + printWarning( + 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') + ); + } + } + } + } +} + +/** + * Resets warning cache when testing. + * + * @private + */ +checkPropTypes.resetWarningCache = function() { + if (true) { + loggedTypeFailures = {}; + } +} + +module.exports = checkPropTypes; + + +/***/ }), + +/***/ "./node_modules/prop-types/factoryWithTypeCheckers.js": +/*!************************************************************!*\ + !*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js"); +var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); + +var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js"); +var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js"); +var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "./node_modules/prop-types/checkPropTypes.js"); + +var printWarning = function() {}; + +if (true) { + printWarning = function(text) { + var message = 'Warning: ' + text; + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} + +function emptyFunctionThatReturnsNull() { + return null; +} + +module.exports = function(isValidElement, throwOnDirectAccess) { + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + var ANONYMOUS = '<>'; + + // Important! + // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bigint: createPrimitiveTypeChecker('bigint'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + elementType: createElementTypeTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker, + exact: createStrictShapeTypeChecker, + }; + + /** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ + /*eslint-disable no-self-compare*/ + function is(x, y) { + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return x !== 0 || 1 / x === 1 / y; + } else { + // Step 6.a: NaN == NaN + return x !== x && y !== y; + } + } + /*eslint-enable no-self-compare*/ + + /** + * We use an Error-like object for backward compatibility as people may call + * PropTypes directly and inspect their output. However, we don't use real + * Errors anymore. We don't inspect their stack anyway, and creating them + * is prohibitively expensive if they are created too often, such as what + * happens in oneOfType() for any type before the one that matched. + */ + function PropTypeError(message, data) { + this.message = message; + this.data = data && typeof data === 'object' ? data: {}; + this.stack = ''; + } + // Make `instanceof Error` still work for returned errors. + PropTypeError.prototype = Error.prototype; + + function createChainableTypeChecker(validate) { + if (true) { + var manualPropTypeCallCache = {}; + var manualPropTypeWarningCount = 0; + } + function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + + if (secret !== ReactPropTypesSecret) { + if (throwOnDirectAccess) { + // New behavior only for users of `prop-types` package + var err = new Error( + 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + + 'Use `PropTypes.checkPropTypes()` to call them. ' + + 'Read more at http://fb.me/use-check-prop-types' + ); + err.name = 'Invariant Violation'; + throw err; + } else if ( true && typeof console !== 'undefined') { + // Old behavior for people using React.PropTypes + var cacheKey = componentName + ':' + propName; + if ( + !manualPropTypeCallCache[cacheKey] && + // Avoid spamming the console because they are often not actionable except for lib authors + manualPropTypeWarningCount < 3 + ) { + printWarning( + 'You are manually calling a React.PropTypes validation ' + + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + + 'and will throw in the standalone `prop-types` package. ' + + 'You may be seeing this warning due to a third-party PropTypes ' + + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' + ); + manualPropTypeCallCache[cacheKey] = true; + manualPropTypeWarningCount++; + } + } + } + if (props[propName] == null) { + if (isRequired) { + if (props[propName] === null) { + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); + } + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName, secret) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + + return new PropTypeError( + 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'), + {expectedType: expectedType} + ); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunctionThatReturnsNull); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); + } + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!isValidElement(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!ReactIs.isValidElementType(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + if (true) { + if (arguments.length > 1) { + printWarning( + 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' + ); + } else { + printWarning('Invalid argument supplied to oneOf, expected an array.'); + } + } + return emptyFunctionThatReturnsNull; + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (is(propValue, expectedValues[i])) { + return null; + } + } + + var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { + var type = getPreciseType(value); + if (type === 'symbol') { + return String(value); + } + return value; + }); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); + } + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (has(propValue, key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0; + return emptyFunctionThatReturnsNull; + } + + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (typeof checker !== 'function') { + printWarning( + 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' + ); + return emptyFunctionThatReturnsNull; + } + } + + function validate(props, propName, componentName, location, propFullName) { + var expectedTypes = []; + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret); + if (checkerResult == null) { + return null; + } + if (checkerResult.data && has(checkerResult.data, 'expectedType')) { + expectedTypes.push(checkerResult.data.expectedType); + } + } + var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': ''; + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function invalidValidatorError(componentName, location, propFullName, key, type) { + return new PropTypeError( + (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' + + 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.' + ); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (typeof checker !== 'function') { + return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createStrictShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + // We need to check all keys in case some are required but missing from props. + var allKeys = assign({}, props[propName], shapeTypes); + for (var key in allKeys) { + var checker = shapeTypes[key]; + if (has(shapeTypes, key) && typeof checker !== 'function') { + return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); + } + if (!checker) { + return new PropTypeError( + 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') + ); + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + if (error) { + return error; + } + } + return null; + } + + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + function isSymbol(propType, propValue) { + // Native Symbol. + if (propType === 'symbol') { + return true; + } + + // falsy value can't be a Symbol + if (!propValue) { + return false; + } + + // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } + + // Fallback for non-spec compliant Symbols which are polyfilled. + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } + + // Equivalent of `typeof` but with special handling for array and regexp. + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + return propType; + } + + // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + function getPreciseType(propValue) { + if (typeof propValue === 'undefined' || propValue === null) { + return '' + propValue; + } + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + // Returns a string that is postfixed to a warning about an invalid type. + // For example, "undefined" or "of type array" + function getPostfixForTypeWarning(value) { + var type = getPreciseType(value); + switch (type) { + case 'array': + case 'object': + return 'an ' + type; + case 'boolean': + case 'date': + case 'regexp': + return 'a ' + type; + default: + return type; + } + } + + // Returns class name of the object, if any. + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + return propValue.constructor.name; + } + + ReactPropTypes.checkPropTypes = checkPropTypes; + ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; + ReactPropTypes.PropTypes = ReactPropTypes; + + return ReactPropTypes; +}; + + +/***/ }), + +/***/ "./node_modules/prop-types/index.js": +/*!******************************************!*\ + !*** ./node_modules/prop-types/index.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +if (true) { + var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js"); + + // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + var throwOnDirectAccess = true; + module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "./node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess); +} else {} + + +/***/ }), + +/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js": +/*!*************************************************************!*\ + !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***! + \*************************************************************/ +/***/ ((module) => { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +module.exports = ReactPropTypesSecret; + + +/***/ }), + +/***/ "./node_modules/prop-types/lib/has.js": +/*!********************************************!*\ + !*** ./node_modules/prop-types/lib/has.js ***! + \********************************************/ +/***/ ((module) => { + +module.exports = Function.call.bind(Object.prototype.hasOwnProperty); + + +/***/ }), + +/***/ "./node_modules/raven-js/src/configError.js": +/*!**************************************************!*\ + !*** ./node_modules/raven-js/src/configError.js ***! + \**************************************************/ +/***/ ((module) => { + +function RavenConfigError(message) { + this.name = 'RavenConfigError'; + this.message = message; +} +RavenConfigError.prototype = new Error(); +RavenConfigError.prototype.constructor = RavenConfigError; + +module.exports = RavenConfigError; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/console.js": +/*!**********************************************!*\ + !*** ./node_modules/raven-js/src/console.js ***! + \**********************************************/ +/***/ ((module) => { + +var wrapMethod = function(console, level, callback) { + var originalConsoleLevel = console[level]; + var originalConsole = console; + + if (!(level in console)) { + return; + } + + var sentryLevel = level === 'warn' ? 'warning' : level; + + console[level] = function() { + var args = [].slice.call(arguments); + + var msg = '' + args.join(' '); + var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}}; + + if (level === 'assert') { + if (args[0] === false) { + // Default browsers message + msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert'); + data.extra.arguments = args.slice(1); + callback && callback(msg, data); + } + } else { + callback && callback(msg, data); + } + + // this fails for some browsers. :( + if (originalConsoleLevel) { + // IE9 doesn't allow calling apply on console functions directly + // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193 + Function.prototype.apply.call(originalConsoleLevel, originalConsole, args); + } + }; +}; + +module.exports = { + wrapMethod: wrapMethod +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/raven.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/raven.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/*global XDomainRequest:false */ + +var TraceKit = __webpack_require__(/*! ../vendor/TraceKit/tracekit */ "./node_modules/raven-js/vendor/TraceKit/tracekit.js"); +var stringify = __webpack_require__(/*! ../vendor/json-stringify-safe/stringify */ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js"); +var RavenConfigError = __webpack_require__(/*! ./configError */ "./node_modules/raven-js/src/configError.js"); + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/raven-js/src/utils.js"); +var isError = utils.isError; +var isObject = utils.isObject; +var isObject = utils.isObject; +var isErrorEvent = utils.isErrorEvent; +var isUndefined = utils.isUndefined; +var isFunction = utils.isFunction; +var isString = utils.isString; +var isEmptyObject = utils.isEmptyObject; +var each = utils.each; +var objectMerge = utils.objectMerge; +var truncate = utils.truncate; +var objectFrozen = utils.objectFrozen; +var hasKey = utils.hasKey; +var joinRegExp = utils.joinRegExp; +var urlencode = utils.urlencode; +var uuid4 = utils.uuid4; +var htmlTreeAsString = utils.htmlTreeAsString; +var isSameException = utils.isSameException; +var isSameStacktrace = utils.isSameStacktrace; +var parseUrl = utils.parseUrl; +var fill = utils.fill; + +var wrapConsoleMethod = (__webpack_require__(/*! ./console */ "./node_modules/raven-js/src/console.js").wrapMethod); + +var dsnKeys = 'source protocol user pass host port path'.split(' '), + dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/; + +function now() { + return +new Date(); +} + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _document = _window.document; +var _navigator = _window.navigator; + +function keepOriginalCallback(original, callback) { + return isFunction(callback) + ? function(data) { + return callback(data, original); + } + : callback; +} + +// First, check for JSON support +// If there is no JSON, we no-op the core features of Raven +// since JSON is required to encode the payload +function Raven() { + this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify); + // Raven can run in contexts where there's no document (react-native) + this._hasDocument = !isUndefined(_document); + this._hasNavigator = !isUndefined(_navigator); + this._lastCapturedException = null; + this._lastData = null; + this._lastEventId = null; + this._globalServer = null; + this._globalKey = null; + this._globalProject = null; + this._globalContext = {}; + this._globalOptions = { + logger: 'javascript', + ignoreErrors: [], + ignoreUrls: [], + whitelistUrls: [], + includePaths: [], + collectWindowErrors: true, + maxMessageLength: 0, + + // By default, truncates URL values to 250 chars + maxUrlLength: 250, + stackTraceLimit: 50, + autoBreadcrumbs: true, + instrument: true, + sampleRate: 1 + }; + this._ignoreOnError = 0; + this._isRavenInstalled = false; + this._originalErrorStackTraceLimit = Error.stackTraceLimit; + // capture references to window.console *and* all its methods first + // before the console plugin has a chance to monkey patch + this._originalConsole = _window.console || {}; + this._originalConsoleMethods = {}; + this._plugins = []; + this._startTime = now(); + this._wrappedBuiltIns = []; + this._breadcrumbs = []; + this._lastCapturedEvent = null; + this._keypressTimeout; + this._location = _window.location; + this._lastHref = this._location && this._location.href; + this._resetBackoff(); + + // eslint-disable-next-line guard-for-in + for (var method in this._originalConsole) { + this._originalConsoleMethods[method] = this._originalConsole[method]; + } +} + +/* + * The core Raven singleton + * + * @this {Raven} + */ + +Raven.prototype = { + // Hardcode version string so that raven source can be loaded directly via + // webpack (using a build step causes webpack #1617). Grunt verifies that + // this value matches package.json during build. + // See: https://github.com/getsentry/raven-js/issues/465 + VERSION: '3.19.1', + + debug: false, + + TraceKit: TraceKit, // alias to TraceKit + + /* + * Configure Raven with a DSN and extra options + * + * @param {string} dsn The public Sentry DSN + * @param {object} options Set of global options [optional] + * @return {Raven} + */ + config: function(dsn, options) { + var self = this; + + if (self._globalServer) { + this._logDebug('error', 'Error: Raven has already been configured'); + return self; + } + if (!dsn) return self; + + var globalOptions = self._globalOptions; + + // merge in options + if (options) { + each(options, function(key, value) { + // tags and extra are special and need to be put into context + if (key === 'tags' || key === 'extra' || key === 'user') { + self._globalContext[key] = value; + } else { + globalOptions[key] = value; + } + }); + } + + self.setDSN(dsn); + + // "Script error." is hard coded into browsers for errors that it can't read. + // this is the result of a script being pulled in from an external domain and CORS. + globalOptions.ignoreErrors.push(/^Script error\.?$/); + globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/); + + // join regexp rules into one big rule + globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors); + globalOptions.ignoreUrls = globalOptions.ignoreUrls.length + ? joinRegExp(globalOptions.ignoreUrls) + : false; + globalOptions.whitelistUrls = globalOptions.whitelistUrls.length + ? joinRegExp(globalOptions.whitelistUrls) + : false; + globalOptions.includePaths = joinRegExp(globalOptions.includePaths); + globalOptions.maxBreadcrumbs = Math.max( + 0, + Math.min(globalOptions.maxBreadcrumbs || 100, 100) + ); // default and hard limit is 100 + + var autoBreadcrumbDefaults = { + xhr: true, + console: true, + dom: true, + location: true + }; + + var autoBreadcrumbs = globalOptions.autoBreadcrumbs; + if ({}.toString.call(autoBreadcrumbs) === '[object Object]') { + autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs); + } else if (autoBreadcrumbs !== false) { + autoBreadcrumbs = autoBreadcrumbDefaults; + } + globalOptions.autoBreadcrumbs = autoBreadcrumbs; + + var instrumentDefaults = { + tryCatch: true + }; + + var instrument = globalOptions.instrument; + if ({}.toString.call(instrument) === '[object Object]') { + instrument = objectMerge(instrumentDefaults, instrument); + } else if (instrument !== false) { + instrument = instrumentDefaults; + } + globalOptions.instrument = instrument; + + TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors; + + // return for chaining + return self; + }, + + /* + * Installs a global window.onerror error handler + * to capture and report uncaught exceptions. + * At this point, install() is required to be called due + * to the way TraceKit is set up. + * + * @return {Raven} + */ + install: function() { + var self = this; + if (self.isSetup() && !self._isRavenInstalled) { + TraceKit.report.subscribe(function() { + self._handleOnErrorStackInfo.apply(self, arguments); + }); + if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) { + self._instrumentTryCatch(); + } + + if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs(); + + // Install all of the plugins + self._drainPlugins(); + + self._isRavenInstalled = true; + } + + Error.stackTraceLimit = self._globalOptions.stackTraceLimit; + return this; + }, + + /* + * Set the DSN (can be called multiple time unlike config) + * + * @param {string} dsn The public Sentry DSN + */ + setDSN: function(dsn) { + var self = this, + uri = self._parseDSN(dsn), + lastSlash = uri.path.lastIndexOf('/'), + path = uri.path.substr(1, lastSlash); + + self._dsn = dsn; + self._globalKey = uri.user; + self._globalSecret = uri.pass && uri.pass.substr(1); + self._globalProject = uri.path.substr(lastSlash + 1); + + self._globalServer = self._getGlobalServer(uri); + + self._globalEndpoint = + self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/'; + + // Reset backoff state since we may be pointing at a + // new project/server + this._resetBackoff(); + }, + + /* + * Wrap code within a context so Raven can capture errors + * reliably across domains that is executed immediately. + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The callback to be immediately executed within the context + * @param {array} args An array of arguments to be called with the callback [optional] + */ + context: function(options, func, args) { + if (isFunction(options)) { + args = func || []; + func = options; + options = undefined; + } + + return this.wrap(options, func).apply(this, args); + }, + + /* + * Wrap code within a context and returns back a new function to be executed + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The function to be wrapped in a new context + * @param {function} func A function to call before the try/catch wrapper [optional, private] + * @return {function} The newly wrapped functions with a context + */ + wrap: function(options, func, _before) { + var self = this; + // 1 argument has been passed, and it's not a function + // so just return it + if (isUndefined(func) && !isFunction(options)) { + return options; + } + + // options is optional + if (isFunction(options)) { + func = options; + options = undefined; + } + + // At this point, we've passed along 2 arguments, and the second one + // is not a function either, so we'll just return the second argument. + if (!isFunction(func)) { + return func; + } + + // We don't wanna wrap it twice! + try { + if (func.__raven__) { + return func; + } + + // If this has already been wrapped in the past, return that + if (func.__raven_wrapper__) { + return func.__raven_wrapper__; + } + } catch (e) { + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + // Bail on wrapping and return the function as-is (defers to window.onerror). + return func; + } + + function wrapped() { + var args = [], + i = arguments.length, + deep = !options || (options && options.deep !== false); + + if (_before && isFunction(_before)) { + _before.apply(this, arguments); + } + + // Recursively wrap all of a function's arguments that are + // functions themselves. + while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i]; + + try { + // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means Raven caught an error invoking your application code. This is + // expected behavior and NOT indicative of a bug with Raven.js. + return func.apply(this, args); + } catch (e) { + self._ignoreNextOnError(); + self.captureException(e, options); + throw e; + } + } + + // copy over properties of the old function + for (var property in func) { + if (hasKey(func, property)) { + wrapped[property] = func[property]; + } + } + wrapped.prototype = func.prototype; + + func.__raven_wrapper__ = wrapped; + // Signal that this function has been wrapped already + // for both debugging and to prevent it to being wrapped twice + wrapped.__raven__ = true; + wrapped.__inner__ = func; + + return wrapped; + }, + + /* + * Uninstalls the global error handler. + * + * @return {Raven} + */ + uninstall: function() { + TraceKit.report.uninstall(); + + this._restoreBuiltIns(); + + Error.stackTraceLimit = this._originalErrorStackTraceLimit; + this._isRavenInstalled = false; + + return this; + }, + + /* + * Manually capture an exception and send it over to Sentry + * + * @param {error} ex An exception to be logged + * @param {object} options A specific set of options for this error [optional] + * @return {Raven} + */ + captureException: function(ex, options) { + // Cases for sending ex as a message, rather than an exception + var isNotError = !isError(ex); + var isNotErrorEvent = !isErrorEvent(ex); + var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error; + + if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) { + return this.captureMessage( + ex, + objectMerge( + { + trimHeadFrames: 1, + stacktrace: true // if we fall back to captureMessage, default to attempting a new trace + }, + options + ) + ); + } + + // Get actual Error from ErrorEvent + if (isErrorEvent(ex)) ex = ex.error; + + // Store the raw exception object for potential debugging and introspection + this._lastCapturedException = ex; + + // TraceKit.report will re-raise any exception passed to it, + // which means you have to wrap it in try/catch. Instead, we + // can wrap it here and only re-raise if TraceKit.report + // raises an exception different from the one we asked to + // report on. + try { + var stack = TraceKit.computeStackTrace(ex); + this._handleStackInfo(stack, options); + } catch (ex1) { + if (ex !== ex1) { + throw ex1; + } + } + + return this; + }, + + /* + * Manually send a message to Sentry + * + * @param {string} msg A plain message to be captured in Sentry + * @param {object} options A specific set of options for this message [optional] + * @return {Raven} + */ + captureMessage: function(msg, options) { + // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an + // early call; we'll error on the side of logging anything called before configuration since it's + // probably something you should see: + if ( + !!this._globalOptions.ignoreErrors.test && + this._globalOptions.ignoreErrors.test(msg) + ) { + return; + } + + options = options || {}; + + var data = objectMerge( + { + message: msg + '' // Make sure it's actually a string + }, + options + ); + + var ex; + // Generate a "synthetic" stack trace from this point. + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative + // of a bug with Raven.js. Sentry generates synthetic traces either by configuration, + // or if it catches a thrown object without a "stack" property. + try { + throw new Error(msg); + } catch (ex1) { + ex = ex1; + } + + // null exception name so `Error` isn't prefixed to msg + ex.name = null; + var stack = TraceKit.computeStackTrace(ex); + + // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1] + var initialCall = stack.stack[1]; + + var fileurl = (initialCall && initialCall.url) || ''; + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + if (this._globalOptions.stacktrace || (options && options.stacktrace)) { + options = objectMerge( + { + // fingerprint on msg, not stack trace (legacy behavior, could be + // revisited) + fingerprint: msg, + // since we know this is a synthetic trace, the top N-most frames + // MUST be from Raven.js, so mark them as in_app later by setting + // trimHeadFrames + trimHeadFrames: (options.trimHeadFrames || 0) + 1 + }, + options + ); + + var frames = this._prepareFrames(stack, options); + data.stacktrace = { + // Sentry expects frames oldest to newest + frames: frames.reverse() + }; + } + + // Fire away! + this._send(data); + + return this; + }, + + captureBreadcrumb: function(obj) { + var crumb = objectMerge( + { + timestamp: now() / 1000 + }, + obj + ); + + if (isFunction(this._globalOptions.breadcrumbCallback)) { + var result = this._globalOptions.breadcrumbCallback(crumb); + + if (isObject(result) && !isEmptyObject(result)) { + crumb = result; + } else if (result === false) { + return this; + } + } + + this._breadcrumbs.push(crumb); + if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) { + this._breadcrumbs.shift(); + } + return this; + }, + + addPlugin: function(plugin /*arg1, arg2, ... argN*/) { + var pluginArgs = [].slice.call(arguments, 1); + + this._plugins.push([plugin, pluginArgs]); + if (this._isRavenInstalled) { + this._drainPlugins(); + } + + return this; + }, + + /* + * Set/clear a user to be sent along with the payload. + * + * @param {object} user An object representing user data [optional] + * @return {Raven} + */ + setUserContext: function(user) { + // Intentionally do not merge here since that's an unexpected behavior. + this._globalContext.user = user; + + return this; + }, + + /* + * Merge extra attributes to be sent along with the payload. + * + * @param {object} extra An object representing extra data [optional] + * @return {Raven} + */ + setExtraContext: function(extra) { + this._mergeContext('extra', extra); + + return this; + }, + + /* + * Merge tags to be sent along with the payload. + * + * @param {object} tags An object representing tags [optional] + * @return {Raven} + */ + setTagsContext: function(tags) { + this._mergeContext('tags', tags); + + return this; + }, + + /* + * Clear all of the context. + * + * @return {Raven} + */ + clearContext: function() { + this._globalContext = {}; + + return this; + }, + + /* + * Get a copy of the current context. This cannot be mutated. + * + * @return {object} copy of context + */ + getContext: function() { + // lol javascript + return JSON.parse(stringify(this._globalContext)); + }, + + /* + * Set environment of application + * + * @param {string} environment Typically something like 'production'. + * @return {Raven} + */ + setEnvironment: function(environment) { + this._globalOptions.environment = environment; + + return this; + }, + + /* + * Set release version of application + * + * @param {string} release Typically something like a git SHA to identify version + * @return {Raven} + */ + setRelease: function(release) { + this._globalOptions.release = release; + + return this; + }, + + /* + * Set the dataCallback option + * + * @param {function} callback The callback to run which allows the + * data blob to be mutated before sending + * @return {Raven} + */ + setDataCallback: function(callback) { + var original = this._globalOptions.dataCallback; + this._globalOptions.dataCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the breadcrumbCallback option + * + * @param {function} callback The callback to run which allows filtering + * or mutating breadcrumbs + * @return {Raven} + */ + setBreadcrumbCallback: function(callback) { + var original = this._globalOptions.breadcrumbCallback; + this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the shouldSendCallback option + * + * @param {function} callback The callback to run which allows + * introspecting the blob before sending + * @return {Raven} + */ + setShouldSendCallback: function(callback) { + var original = this._globalOptions.shouldSendCallback; + this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback); + return this; + }, + + /** + * Override the default HTTP transport mechanism that transmits data + * to the Sentry server. + * + * @param {function} transport Function invoked instead of the default + * `makeRequest` handler. + * + * @return {Raven} + */ + setTransport: function(transport) { + this._globalOptions.transport = transport; + + return this; + }, + + /* + * Get the latest raw exception that was captured by Raven. + * + * @return {error} + */ + lastException: function() { + return this._lastCapturedException; + }, + + /* + * Get the last event id + * + * @return {string} + */ + lastEventId: function() { + return this._lastEventId; + }, + + /* + * Determine if Raven is setup and ready to go. + * + * @return {boolean} + */ + isSetup: function() { + if (!this._hasJSON) return false; // needs JSON support + if (!this._globalServer) { + if (!this.ravenNotConfiguredError) { + this.ravenNotConfiguredError = true; + this._logDebug('error', 'Error: Raven has not been configured.'); + } + return false; + } + return true; + }, + + afterLoad: function() { + // TODO: remove window dependence? + + // Attempt to initialize Raven on load + var RavenConfig = _window.RavenConfig; + if (RavenConfig) { + this.config(RavenConfig.dsn, RavenConfig.config).install(); + } + }, + + showReportDialog: function(options) { + if ( + !_document // doesn't work without a document (React native) + ) + return; + + options = options || {}; + + var lastEventId = options.eventId || this.lastEventId(); + if (!lastEventId) { + throw new RavenConfigError('Missing eventId'); + } + + var dsn = options.dsn || this._dsn; + if (!dsn) { + throw new RavenConfigError('Missing DSN'); + } + + var encode = encodeURIComponent; + var qs = ''; + qs += '?eventId=' + encode(lastEventId); + qs += '&dsn=' + encode(dsn); + + var user = options.user || this._globalContext.user; + if (user) { + if (user.name) qs += '&name=' + encode(user.name); + if (user.email) qs += '&email=' + encode(user.email); + } + + var globalServer = this._getGlobalServer(this._parseDSN(dsn)); + + var script = _document.createElement('script'); + script.async = true; + script.src = globalServer + '/api/embed/error-page/' + qs; + (_document.head || _document.body).appendChild(script); + }, + + /**** Private functions ****/ + _ignoreNextOnError: function() { + var self = this; + this._ignoreOnError += 1; + setTimeout(function() { + // onerror should trigger before setTimeout + self._ignoreOnError -= 1; + }); + }, + + _triggerEvent: function(eventType, options) { + // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it + var evt, key; + + if (!this._hasDocument) return; + + options = options || {}; + + eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1); + + if (_document.createEvent) { + evt = _document.createEvent('HTMLEvents'); + evt.initEvent(eventType, true, true); + } else { + evt = _document.createEventObject(); + evt.eventType = eventType; + } + + for (key in options) + if (hasKey(options, key)) { + evt[key] = options[key]; + } + + if (_document.createEvent) { + // IE9 if standards + _document.dispatchEvent(evt); + } else { + // IE8 regardless of Quirks or Standards + // IE9 if quirks + try { + _document.fireEvent('on' + evt.eventType.toLowerCase(), evt); + } catch (e) { + // Do nothing + } + } + }, + + /** + * Wraps addEventListener to capture UI breadcrumbs + * @param evtName the event name (e.g. "click") + * @returns {Function} + * @private + */ + _breadcrumbEventHandler: function(evtName) { + var self = this; + return function(evt) { + // reset keypress timeout; e.g. triggering a 'click' after + // a 'keypress' will reset the keypress debounce so that a new + // set of keypresses can be recorded + self._keypressTimeout = null; + + // It's possible this handler might trigger multiple times for the same + // event (e.g. event propagation through node ancestors). Ignore if we've + // already captured the event. + if (self._lastCapturedEvent === evt) return; + + self._lastCapturedEvent = evt; + + // try/catch both: + // - accessing evt.target (see getsentry/raven-js#838, #768) + // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly + // can throw an exception in some circumstances. + var target; + try { + target = htmlTreeAsString(evt.target); + } catch (e) { + target = ''; + } + + self.captureBreadcrumb({ + category: 'ui.' + evtName, // e.g. ui.click, ui.input + message: target + }); + }; + }, + + /** + * Wraps addEventListener to capture keypress UI events + * @returns {Function} + * @private + */ + _keypressEventHandler: function() { + var self = this, + debounceDuration = 1000; // milliseconds + + // TODO: if somehow user switches keypress target before + // debounce timeout is triggered, we will only capture + // a single breadcrumb from the FIRST target (acceptable?) + return function(evt) { + var target; + try { + target = evt.target; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + var tagName = target && target.tagName; + + // only consider keypress events on actual input elements + // this will disregard keypresses targeting body (e.g. tabbing + // through elements, hotkeys, etc) + if ( + !tagName || + (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) + ) + return; + + // record first keypress in a series, but ignore subsequent + // keypresses until debounce clears + var timeout = self._keypressTimeout; + if (!timeout) { + self._breadcrumbEventHandler('input')(evt); + } + clearTimeout(timeout); + self._keypressTimeout = setTimeout(function() { + self._keypressTimeout = null; + }, debounceDuration); + }; + }, + + /** + * Captures a breadcrumb of type "navigation", normalizing input URLs + * @param to the originating URL + * @param from the target URL + * @private + */ + _captureUrlChange: function(from, to) { + var parsedLoc = parseUrl(this._location.href); + var parsedTo = parseUrl(to); + var parsedFrom = parseUrl(from); + + // because onpopstate only tells you the "new" (to) value of location.href, and + // not the previous (from) value, we need to track the value of the current URL + // state ourselves + this._lastHref = to; + + // Use only the path component of the URL if the URL matches the current + // document (almost all the time when using pushState) + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) + to = parsedTo.relative; + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) + from = parsedFrom.relative; + + this.captureBreadcrumb({ + category: 'navigation', + data: { + to: to, + from: from + } + }); + }, + + /** + * Wrap timer functions and event targets to catch errors and provide + * better metadata. + */ + _instrumentTryCatch: function() { + var self = this; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapTimeFn(orig) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + var originalCallback = args[0]; + if (isFunction(originalCallback)) { + args[0] = self.wrap(originalCallback); + } + + // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it + // also supports only two arguments and doesn't care what this is, so we + // can just call the original function directly. + if (orig.apply) { + return orig.apply(this, args); + } else { + return orig(args[0], args[1]); + } + }; + } + + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + function wrapEventTarget(global) { + var proto = _window[global] && _window[global].prototype; + if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) { + fill( + proto, + 'addEventListener', + function(orig) { + return function(evtName, fn, capture, secure) { + // preserve arity + try { + if (fn && fn.handleEvent) { + fn.handleEvent = self.wrap(fn.handleEvent); + } + } catch (err) { + // can sometimes get 'Permission denied to access property "handle Event' + } + + // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs` + // so that we don't have more than one wrapper function + var before, clickHandler, keypressHandler; + + if ( + autoBreadcrumbs && + autoBreadcrumbs.dom && + (global === 'EventTarget' || global === 'Node') + ) { + // NOTE: generating multiple handlers per addEventListener invocation, should + // revisit and verify we can just use one (almost certainly) + clickHandler = self._breadcrumbEventHandler('click'); + keypressHandler = self._keypressEventHandler(); + before = function(evt) { + // need to intercept every DOM event in `before` argument, in case that + // same wrapped method is re-used for different events (e.g. mousemove THEN click) + // see #724 + if (!evt) return; + + var eventType; + try { + eventType = evt.type; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + if (eventType === 'click') return clickHandler(evt); + else if (eventType === 'keypress') return keypressHandler(evt); + }; + } + return orig.call( + this, + evtName, + self.wrap(fn, undefined, before), + capture, + secure + ); + }; + }, + wrappedBuiltIns + ); + fill( + proto, + 'removeEventListener', + function(orig) { + return function(evt, fn, capture, secure) { + try { + fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn); + } catch (e) { + // ignore, accessing __raven_wrapper__ will throw in some Selenium environments + } + return orig.call(this, evt, fn, capture, secure); + }; + }, + wrappedBuiltIns + ); + } + } + + fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns); + fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns); + if (_window.requestAnimationFrame) { + fill( + _window, + 'requestAnimationFrame', + function(orig) { + return function(cb) { + return orig(self.wrap(cb)); + }; + }, + wrappedBuiltIns + ); + } + + // event targets borrowed from bugsnag-js: + // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666 + var eventTargets = [ + 'EventTarget', + 'Window', + 'Node', + 'ApplicationCache', + 'AudioTrackList', + 'ChannelMergerNode', + 'CryptoOperation', + 'EventSource', + 'FileReader', + 'HTMLUnknownElement', + 'IDBDatabase', + 'IDBRequest', + 'IDBTransaction', + 'KeyOperation', + 'MediaController', + 'MessagePort', + 'ModalWindow', + 'Notification', + 'SVGElementInstance', + 'Screen', + 'TextTrack', + 'TextTrackCue', + 'TextTrackList', + 'WebSocket', + 'WebSocketWorker', + 'Worker', + 'XMLHttpRequest', + 'XMLHttpRequestEventTarget', + 'XMLHttpRequestUpload' + ]; + for (var i = 0; i < eventTargets.length; i++) { + wrapEventTarget(eventTargets[i]); + } + }, + + /** + * Instrument browser built-ins w/ breadcrumb capturing + * - XMLHttpRequests + * - DOM interactions (click/typing) + * - window.location changes + * - console + * + * Can be disabled or individually configured via the `autoBreadcrumbs` config option + */ + _instrumentBreadcrumbs: function() { + var self = this; + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapProp(prop, xhr) { + if (prop in xhr && isFunction(xhr[prop])) { + fill(xhr, prop, function(orig) { + return self.wrap(orig); + }); // intentionally don't track filled methods on XHR instances + } + } + + if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) { + var xhrproto = XMLHttpRequest.prototype; + fill( + xhrproto, + 'open', + function(origOpen) { + return function(method, url) { + // preserve arity + + // if Sentry key appears in URL, don't capture + if (isString(url) && url.indexOf(self._globalKey) === -1) { + this.__raven_xhr = { + method: method, + url: url, + status_code: null + }; + } + + return origOpen.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + + fill( + xhrproto, + 'send', + function(origSend) { + return function(data) { + // preserve arity + var xhr = this; + + function onreadystatechangeHandler() { + if (xhr.__raven_xhr && xhr.readyState === 4) { + try { + // touching statusCode in some platforms throws + // an exception + xhr.__raven_xhr.status_code = xhr.status; + } catch (e) { + /* do nothing */ + } + + self.captureBreadcrumb({ + type: 'http', + category: 'xhr', + data: xhr.__raven_xhr + }); + } + } + + var props = ['onload', 'onerror', 'onprogress']; + for (var j = 0; j < props.length; j++) { + wrapProp(props[j], xhr); + } + + if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) { + fill( + xhr, + 'onreadystatechange', + function(orig) { + return self.wrap(orig, undefined, onreadystatechangeHandler); + } /* intentionally don't track this instrumentation */ + ); + } else { + // if onreadystatechange wasn't actually set by the page on this xhr, we + // are free to set our own and capture the breadcrumb + xhr.onreadystatechange = onreadystatechangeHandler; + } + + return origSend.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + } + + if (autoBreadcrumbs.xhr && 'fetch' in _window) { + fill( + _window, + 'fetch', + function(origFetch) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + var fetchInput = args[0]; + var method = 'GET'; + var url; + + if (typeof fetchInput === 'string') { + url = fetchInput; + } else if ('Request' in _window && fetchInput instanceof _window.Request) { + url = fetchInput.url; + if (fetchInput.method) { + method = fetchInput.method; + } + } else { + url = '' + fetchInput; + } + + if (args[1] && args[1].method) { + method = args[1].method; + } + + var fetchData = { + method: method, + url: url, + status_code: null + }; + + self.captureBreadcrumb({ + type: 'http', + category: 'fetch', + data: fetchData + }); + + return origFetch.apply(this, args).then(function(response) { + fetchData.status_code = response.status; + + return response; + }); + }; + }, + wrappedBuiltIns + ); + } + + // Capture breadcrumbs from any click that is unhandled / bubbled up all the way + // to the document. Do this before we instrument addEventListener. + if (autoBreadcrumbs.dom && this._hasDocument) { + if (_document.addEventListener) { + _document.addEventListener('click', self._breadcrumbEventHandler('click'), false); + _document.addEventListener('keypress', self._keypressEventHandler(), false); + } else { + // IE8 Compatibility + _document.attachEvent('onclick', self._breadcrumbEventHandler('click')); + _document.attachEvent('onkeypress', self._keypressEventHandler()); + } + } + + // record navigation (URL) changes + // NOTE: in Chrome App environment, touching history.pushState, *even inside + // a try/catch block*, will cause Chrome to output an error to console.error + // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var chrome = _window.chrome; + var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + var hasPushAndReplaceState = + !isChromePackagedApp && + _window.history && + history.pushState && + history.replaceState; + if (autoBreadcrumbs.location && hasPushAndReplaceState) { + // TODO: remove onpopstate handler on uninstall() + var oldOnPopState = _window.onpopstate; + _window.onpopstate = function() { + var currentHref = self._location.href; + self._captureUrlChange(self._lastHref, currentHref); + + if (oldOnPopState) { + return oldOnPopState.apply(this, arguments); + } + }; + + var historyReplacementFunction = function(origHistFunction) { + // note history.pushState.length is 0; intentionally not declaring + // params to preserve 0 arity + return function(/* state, title, url */) { + var url = arguments.length > 2 ? arguments[2] : undefined; + + // url argument is optional + if (url) { + // coerce to string (this is what pushState does) + self._captureUrlChange(self._lastHref, url + ''); + } + + return origHistFunction.apply(this, arguments); + }; + }; + + fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns); + fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns); + } + + if (autoBreadcrumbs.console && 'console' in _window && console.log) { + // console + var consoleMethodCallback = function(msg, data) { + self.captureBreadcrumb({ + message: msg, + level: data.level, + category: 'console' + }); + }; + + each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) { + wrapConsoleMethod(console, level, consoleMethodCallback); + }); + } + }, + + _restoreBuiltIns: function() { + // restore any wrapped builtins + var builtin; + while (this._wrappedBuiltIns.length) { + builtin = this._wrappedBuiltIns.shift(); + + var obj = builtin[0], + name = builtin[1], + orig = builtin[2]; + + obj[name] = orig; + } + }, + + _drainPlugins: function() { + var self = this; + + // FIX ME TODO + each(this._plugins, function(_, plugin) { + var installer = plugin[0]; + var args = plugin[1]; + installer.apply(self, [self].concat(args)); + }); + }, + + _parseDSN: function(str) { + var m = dsnPattern.exec(str), + dsn = {}, + i = 7; + + try { + while (i--) dsn[dsnKeys[i]] = m[i] || ''; + } catch (e) { + throw new RavenConfigError('Invalid DSN: ' + str); + } + + if (dsn.pass && !this._globalOptions.allowSecretKey) { + throw new RavenConfigError( + 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key' + ); + } + + return dsn; + }, + + _getGlobalServer: function(uri) { + // assemble the endpoint from the uri pieces + var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : ''); + + if (uri.protocol) { + globalServer = uri.protocol + ':' + globalServer; + } + return globalServer; + }, + + _handleOnErrorStackInfo: function() { + // if we are intentionally ignoring errors via onerror, bail out + if (!this._ignoreOnError) { + this._handleStackInfo.apply(this, arguments); + } + }, + + _handleStackInfo: function(stackInfo, options) { + var frames = this._prepareFrames(stackInfo, options); + + this._triggerEvent('handle', { + stackInfo: stackInfo, + options: options + }); + + this._processException( + stackInfo.name, + stackInfo.message, + stackInfo.url, + stackInfo.lineno, + frames, + options + ); + }, + + _prepareFrames: function(stackInfo, options) { + var self = this; + var frames = []; + if (stackInfo.stack && stackInfo.stack.length) { + each(stackInfo.stack, function(i, stack) { + var frame = self._normalizeFrame(stack, stackInfo.url); + if (frame) { + frames.push(frame); + } + }); + + // e.g. frames captured via captureMessage throw + if (options && options.trimHeadFrames) { + for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) { + frames[j].in_app = false; + } + } + } + frames = frames.slice(0, this._globalOptions.stackTraceLimit); + return frames; + }, + + _normalizeFrame: function(frame, stackInfoUrl) { + // normalize the frames data + var normalized = { + filename: frame.url, + lineno: frame.line, + colno: frame.column, + function: frame.func || '?' + }; + + // Case when we don't have any information about the error + // E.g. throwing a string or raw object, instead of an `Error` in Firefox + // Generating synthetic error doesn't add any value here + // + // We should probably somehow let a user know that they should fix their code + if (!frame.url) { + normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler + } + + normalized.in_app = !// determine if an exception came from outside of our app + // first we check the global includePaths list. + ( + (!!this._globalOptions.includePaths.test && + !this._globalOptions.includePaths.test(normalized.filename)) || + // Now we check for fun, if the function name is Raven or TraceKit + /(Raven|TraceKit)\./.test(normalized['function']) || + // finally, we do a last ditch effort and check for raven.min.js + /raven\.(min\.)?js$/.test(normalized.filename) + ); + + return normalized; + }, + + _processException: function(type, message, fileurl, lineno, frames, options) { + var prefixedMessage = (type ? type + ': ' : '') + (message || ''); + if ( + !!this._globalOptions.ignoreErrors.test && + (this._globalOptions.ignoreErrors.test(message) || + this._globalOptions.ignoreErrors.test(prefixedMessage)) + ) { + return; + } + + var stacktrace; + + if (frames && frames.length) { + fileurl = frames[0].filename || fileurl; + // Sentry expects frames oldest to newest + // and JS sends them as newest to oldest + frames.reverse(); + stacktrace = {frames: frames}; + } else if (fileurl) { + stacktrace = { + frames: [ + { + filename: fileurl, + lineno: lineno, + in_app: true + } + ] + }; + } + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + var data = objectMerge( + { + // sentry.interfaces.Exception + exception: { + values: [ + { + type: type, + value: message, + stacktrace: stacktrace + } + ] + }, + culprit: fileurl + }, + options + ); + + // Fire away! + this._send(data); + }, + + _trimPacket: function(data) { + // For now, we only want to truncate the two different messages + // but this could/should be expanded to just trim everything + var max = this._globalOptions.maxMessageLength; + if (data.message) { + data.message = truncate(data.message, max); + } + if (data.exception) { + var exception = data.exception.values[0]; + exception.value = truncate(exception.value, max); + } + + var request = data.request; + if (request) { + if (request.url) { + request.url = truncate(request.url, this._globalOptions.maxUrlLength); + } + if (request.Referer) { + request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength); + } + } + + if (data.breadcrumbs && data.breadcrumbs.values) + this._trimBreadcrumbs(data.breadcrumbs); + + return data; + }, + + /** + * Truncate breadcrumb values (right now just URLs) + */ + _trimBreadcrumbs: function(breadcrumbs) { + // known breadcrumb properties with urls + // TODO: also consider arbitrary prop values that start with (https?)?:// + var urlProps = ['to', 'from', 'url'], + urlProp, + crumb, + data; + + for (var i = 0; i < breadcrumbs.values.length; ++i) { + crumb = breadcrumbs.values[i]; + if ( + !crumb.hasOwnProperty('data') || + !isObject(crumb.data) || + objectFrozen(crumb.data) + ) + continue; + + data = objectMerge({}, crumb.data); + for (var j = 0; j < urlProps.length; ++j) { + urlProp = urlProps[j]; + if (data.hasOwnProperty(urlProp) && data[urlProp]) { + data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength); + } + } + breadcrumbs.values[i].data = data; + } + }, + + _getHttpData: function() { + if (!this._hasNavigator && !this._hasDocument) return; + var httpData = {}; + + if (this._hasNavigator && _navigator.userAgent) { + httpData.headers = { + 'User-Agent': navigator.userAgent + }; + } + + if (this._hasDocument) { + if (_document.location && _document.location.href) { + httpData.url = _document.location.href; + } + if (_document.referrer) { + if (!httpData.headers) httpData.headers = {}; + httpData.headers.Referer = _document.referrer; + } + } + + return httpData; + }, + + _resetBackoff: function() { + this._backoffDuration = 0; + this._backoffStart = null; + }, + + _shouldBackoff: function() { + return this._backoffDuration && now() - this._backoffStart < this._backoffDuration; + }, + + /** + * Returns true if the in-process data payload matches the signature + * of the previously-sent data + * + * NOTE: This has to be done at this level because TraceKit can generate + * data from window.onerror WITHOUT an exception object (IE8, IE9, + * other old browsers). This can take the form of an "exception" + * data object with a single frame (derived from the onerror args). + */ + _isRepeatData: function(current) { + var last = this._lastData; + + if ( + !last || + current.message !== last.message || // defined for captureMessage + current.culprit !== last.culprit // defined for captureException/onerror + ) + return false; + + // Stacktrace interface (i.e. from captureMessage) + if (current.stacktrace || last.stacktrace) { + return isSameStacktrace(current.stacktrace, last.stacktrace); + } else if (current.exception || last.exception) { + // Exception interface (i.e. from captureException/onerror) + return isSameException(current.exception, last.exception); + } + + return true; + }, + + _setBackoffState: function(request) { + // If we are already in a backoff state, don't change anything + if (this._shouldBackoff()) { + return; + } + + var status = request.status; + + // 400 - project_id doesn't exist or some other fatal + // 401 - invalid/revoked dsn + // 429 - too many requests + if (!(status === 400 || status === 401 || status === 429)) return; + + var retry; + try { + // If Retry-After is not in Access-Control-Expose-Headers, most + // browsers will throw an exception trying to access it + retry = request.getResponseHeader('Retry-After'); + retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds + } catch (e) { + /* eslint no-empty:0 */ + } + + this._backoffDuration = retry + ? // If Sentry server returned a Retry-After value, use it + retry + : // Otherwise, double the last backoff duration (starts at 1 sec) + this._backoffDuration * 2 || 1000; + + this._backoffStart = now(); + }, + + _send: function(data) { + var globalOptions = this._globalOptions; + + var baseData = { + project: this._globalProject, + logger: globalOptions.logger, + platform: 'javascript' + }, + httpData = this._getHttpData(); + + if (httpData) { + baseData.request = httpData; + } + + // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload + if (data.trimHeadFrames) delete data.trimHeadFrames; + + data = objectMerge(baseData, data); + + // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge + data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags); + data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra); + + // Send along our own collected metadata with extra + data.extra['session:duration'] = now() - this._startTime; + + if (this._breadcrumbs && this._breadcrumbs.length > 0) { + // intentionally make shallow copy so that additions + // to breadcrumbs aren't accidentally sent in this request + data.breadcrumbs = { + values: [].slice.call(this._breadcrumbs, 0) + }; + } + + // If there are no tags/extra, strip the key from the payload alltogther. + if (isEmptyObject(data.tags)) delete data.tags; + + if (this._globalContext.user) { + // sentry.interfaces.User + data.user = this._globalContext.user; + } + + // Include the environment if it's defined in globalOptions + if (globalOptions.environment) data.environment = globalOptions.environment; + + // Include the release if it's defined in globalOptions + if (globalOptions.release) data.release = globalOptions.release; + + // Include server_name if it's defined in globalOptions + if (globalOptions.serverName) data.server_name = globalOptions.serverName; + + if (isFunction(globalOptions.dataCallback)) { + data = globalOptions.dataCallback(data) || data; + } + + // Why?????????? + if (!data || isEmptyObject(data)) { + return; + } + + // Check if the request should be filtered or not + if ( + isFunction(globalOptions.shouldSendCallback) && + !globalOptions.shouldSendCallback(data) + ) { + return; + } + + // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests), + // so drop requests until "cool-off" period has elapsed. + if (this._shouldBackoff()) { + this._logDebug('warn', 'Raven dropped error due to backoff: ', data); + return; + } + + if (typeof globalOptions.sampleRate === 'number') { + if (Math.random() < globalOptions.sampleRate) { + this._sendProcessedPayload(data); + } + } else { + this._sendProcessedPayload(data); + } + }, + + _getUuid: function() { + return uuid4(); + }, + + _sendProcessedPayload: function(data, callback) { + var self = this; + var globalOptions = this._globalOptions; + + if (!this.isSetup()) return; + + // Try and clean up the packet before sending by truncating long values + data = this._trimPacket(data); + + // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback, + // but this would require copying an un-truncated copy of the data packet, which can be + // arbitrarily deep (extra_data) -- could be worthwhile? will revisit + if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) { + this._logDebug('warn', 'Raven dropped repeat event: ', data); + return; + } + + // Send along an event_id if not explicitly passed. + // This event_id can be used to reference the error within Sentry itself. + // Set lastEventId after we know the error should actually be sent + this._lastEventId = data.event_id || (data.event_id = this._getUuid()); + + // Store outbound payload after trim + this._lastData = data; + + this._logDebug('debug', 'Raven about to send:', data); + + var auth = { + sentry_version: '7', + sentry_client: 'raven-js/' + this.VERSION, + sentry_key: this._globalKey + }; + + if (this._globalSecret) { + auth.sentry_secret = this._globalSecret; + } + + var exception = data.exception && data.exception.values[0]; + this.captureBreadcrumb({ + category: 'sentry', + message: exception + ? (exception.type ? exception.type + ': ' : '') + exception.value + : data.message, + event_id: data.event_id, + level: data.level || 'error' // presume error unless specified + }); + + var url = this._globalEndpoint; + (globalOptions.transport || this._makeRequest).call(this, { + url: url, + auth: auth, + data: data, + options: globalOptions, + onSuccess: function success() { + self._resetBackoff(); + + self._triggerEvent('success', { + data: data, + src: url + }); + callback && callback(); + }, + onError: function failure(error) { + self._logDebug('error', 'Raven transport failed to send: ', error); + + if (error.request) { + self._setBackoffState(error.request); + } + + self._triggerEvent('failure', { + data: data, + src: url + }); + error = error || new Error('Raven send failed (no additional details provided)'); + callback && callback(error); + } + }); + }, + + _makeRequest: function(opts) { + var request = _window.XMLHttpRequest && new _window.XMLHttpRequest(); + if (!request) return; + + // if browser doesn't support CORS (e.g. IE7), we are out of luck + var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined'; + + if (!hasCORS) return; + + var url = opts.url; + + if ('withCredentials' in request) { + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } else if (request.status === 200) { + opts.onSuccess && opts.onSuccess(); + } else if (opts.onError) { + var err = new Error('Sentry error code: ' + request.status); + err.request = request; + opts.onError(err); + } + }; + } else { + request = new XDomainRequest(); + // xdomainrequest cannot go http -> https (or vice versa), + // so always use protocol relative + url = url.replace(/^https?:/, ''); + + // onreadystatechange not supported by XDomainRequest + if (opts.onSuccess) { + request.onload = opts.onSuccess; + } + if (opts.onError) { + request.onerror = function() { + var err = new Error('Sentry error code: XDomainRequest'); + err.request = request; + opts.onError(err); + }; + } + } + + // NOTE: auth is intentionally sent as part of query string (NOT as custom + // HTTP header) so as to avoid preflight CORS requests + request.open('POST', url + '?' + urlencode(opts.auth)); + request.send(stringify(opts.data)); + }, + + _logDebug: function(level) { + if (this._originalConsoleMethods[level] && this.debug) { + // In IE<10 console methods do not have their own 'apply' method + Function.prototype.apply.call( + this._originalConsoleMethods[level], + this._originalConsole, + [].slice.call(arguments, 1) + ); + } + }, + + _mergeContext: function(key, context) { + if (isUndefined(context)) { + delete this._globalContext[key]; + } else { + this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context); + } + } +}; + +// Deprecations +Raven.prototype.setUser = Raven.prototype.setUserContext; +Raven.prototype.setReleaseContext = Raven.prototype.setRelease; + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/singleton.js": +/*!************************************************!*\ + !*** ./node_modules/raven-js/src/singleton.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * Enforces a single instance of the Raven client, and the + * main entry point for Raven. If you are a consumer of the + * Raven library, you SHOULD load this file (vs raven.js). + **/ + +var RavenConstructor = __webpack_require__(/*! ./raven */ "./node_modules/raven-js/src/raven.js"); + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _Raven = _window.Raven; + +var Raven = new RavenConstructor(); + +/* + * Allow multiple versions of Raven to be installed. + * Strip Raven from the global context and returns the instance. + * + * @return {Raven} + */ +Raven.noConflict = function() { + _window.Raven = _Raven; + return Raven; +}; + +Raven.afterLoad(); + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/utils.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/utils.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +function isObject(what) { + return typeof what === 'object' && what !== null; +} + +// Yanked from https://git.io/vS8DV re-used under CC0 +// with some tiny modifications +function isError(value) { + switch ({}.toString.call(value)) { + case '[object Error]': + return true; + case '[object Exception]': + return true; + case '[object DOMException]': + return true; + default: + return value instanceof Error; + } +} + +function isErrorEvent(value) { + return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]'; +} + +function isUndefined(what) { + return what === void 0; +} + +function isFunction(what) { + return typeof what === 'function'; +} + +function isString(what) { + return Object.prototype.toString.call(what) === '[object String]'; +} + +function isEmptyObject(what) { + for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars + return true; +} + +function supportsErrorEvent() { + try { + new ErrorEvent(''); // eslint-disable-line no-new + return true; + } catch (e) { + return false; + } +} + +function wrappedCallback(callback) { + function dataCallback(data, original) { + var normalizedData = callback(data) || data; + if (original) { + return original(normalizedData) || normalizedData; + } + return normalizedData; + } + + return dataCallback; +} + +function each(obj, callback) { + var i, j; + + if (isUndefined(obj.length)) { + for (i in obj) { + if (hasKey(obj, i)) { + callback.call(null, i, obj[i]); + } + } + } else { + j = obj.length; + if (j) { + for (i = 0; i < j; i++) { + callback.call(null, i, obj[i]); + } + } + } +} + +function objectMerge(obj1, obj2) { + if (!obj2) { + return obj1; + } + each(obj2, function(key, value) { + obj1[key] = value; + }); + return obj1; +} + +/** + * This function is only used for react-native. + * react-native freezes object that have already been sent over the + * js bridge. We need this function in order to check if the object is frozen. + * So it's ok that objectFrozen returns false if Object.isFrozen is not + * supported because it's not relevant for other "platforms". See related issue: + * https://github.com/getsentry/react-native-sentry/issues/57 + */ +function objectFrozen(obj) { + if (!Object.isFrozen) { + return false; + } + return Object.isFrozen(obj); +} + +function truncate(str, max) { + return !max || str.length <= max ? str : str.substr(0, max) + '\u2026'; +} + +/** + * hasKey, a better form of hasOwnProperty + * Example: hasKey(MainHostObject, property) === true/false + * + * @param {Object} host object to check property + * @param {string} key to check + */ +function hasKey(object, key) { + return Object.prototype.hasOwnProperty.call(object, key); +} + +function joinRegExp(patterns) { + // Combine an array of regular expressions and strings into one large regexp + // Be mad. + var sources = [], + i = 0, + len = patterns.length, + pattern; + + for (; i < len; i++) { + pattern = patterns[i]; + if (isString(pattern)) { + // If it's a string, we need to escape it + // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1')); + } else if (pattern && pattern.source) { + // If it's a regexp already, we want to extract the source + sources.push(pattern.source); + } + // Intentionally skip other cases + } + return new RegExp(sources.join('|'), 'i'); +} + +function urlencode(o) { + var pairs = []; + each(o, function(key, value) { + pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + return pairs.join('&'); +} + +// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B +// intentionally using regex and not href parsing trick because React Native and other +// environments where DOM might not be available +function parseUrl(url) { + var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); + if (!match) return {}; + + // coerce to undefined values to empty string so we don't get 'undefined' + var query = match[6] || ''; + var fragment = match[8] || ''; + return { + protocol: match[2], + host: match[4], + path: match[5], + relative: match[5] + query + fragment // everything minus origin + }; +} +function uuid4() { + var crypto = _window.crypto || _window.msCrypto; + + if (!isUndefined(crypto) && crypto.getRandomValues) { + // Use window.crypto API if available + // eslint-disable-next-line no-undef + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); + + // set 4 in byte 7 + arr[3] = (arr[3] & 0xfff) | 0x4000; + // set 2 most significant bits of byte 9 to '10' + arr[4] = (arr[4] & 0x3fff) | 0x8000; + + var pad = function(num) { + var v = num.toString(16); + while (v.length < 4) { + v = '0' + v; + } + return v; + }; + + return ( + pad(arr[0]) + + pad(arr[1]) + + pad(arr[2]) + + pad(arr[3]) + + pad(arr[4]) + + pad(arr[5]) + + pad(arr[6]) + + pad(arr[7]) + ); + } else { + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + } +} + +/** + * Given a child DOM element, returns a query-selector statement describing that + * and its ancestors + * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] + * @param elem + * @returns {string} + */ +function htmlTreeAsString(elem) { + /* eslint no-extra-parens:0*/ + var MAX_TRAVERSE_HEIGHT = 5, + MAX_OUTPUT_LEN = 80, + out = [], + height = 0, + len = 0, + separator = ' > ', + sepLength = separator.length, + nextStr; + + while (elem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = htmlElementAsString(elem); + // bail out if + // - nextStr is the 'html' element + // - the length of the string that would be created exceeds MAX_OUTPUT_LEN + // (ignore this limit if we are on the first iteration) + if ( + nextStr === 'html' || + (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) + ) { + break; + } + + out.push(nextStr); + + len += nextStr.length; + elem = elem.parentNode; + } + + return out.reverse().join(separator); +} + +/** + * Returns a simple, query-selector representation of a DOM element + * e.g. [HTMLElement] => input#foo.btn[name=baz] + * @param HTMLElement + * @returns {string} + */ +function htmlElementAsString(elem) { + var out = [], + className, + classes, + key, + attr, + i; + + if (!elem || !elem.tagName) { + return ''; + } + + out.push(elem.tagName.toLowerCase()); + if (elem.id) { + out.push('#' + elem.id); + } + + className = elem.className; + if (className && isString(className)) { + classes = className.split(/\s+/); + for (i = 0; i < classes.length; i++) { + out.push('.' + classes[i]); + } + } + var attrWhitelist = ['type', 'name', 'title', 'alt']; + for (i = 0; i < attrWhitelist.length; i++) { + key = attrWhitelist[i]; + attr = elem.getAttribute(key); + if (attr) { + out.push('[' + key + '="' + attr + '"]'); + } + } + return out.join(''); +} + +/** + * Returns true if either a OR b is truthy, but not both + */ +function isOnlyOneTruthy(a, b) { + return !!(!!a ^ !!b); +} + +/** + * Returns true if the two input exception interfaces have the same content + */ +function isSameException(ex1, ex2) { + if (isOnlyOneTruthy(ex1, ex2)) return false; + + ex1 = ex1.values[0]; + ex2 = ex2.values[0]; + + if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false; + + return isSameStacktrace(ex1.stacktrace, ex2.stacktrace); +} + +/** + * Returns true if the two input stack trace interfaces have the same content + */ +function isSameStacktrace(stack1, stack2) { + if (isOnlyOneTruthy(stack1, stack2)) return false; + + var frames1 = stack1.frames; + var frames2 = stack2.frames; + + // Exit early if frame count differs + if (frames1.length !== frames2.length) return false; + + // Iterate through every frame; bail out if anything differs + var a, b; + for (var i = 0; i < frames1.length; i++) { + a = frames1[i]; + b = frames2[i]; + if ( + a.filename !== b.filename || + a.lineno !== b.lineno || + a.colno !== b.colno || + a['function'] !== b['function'] + ) + return false; + } + return true; +} + +/** + * Polyfill a method + * @param obj object e.g. `document` + * @param name method name present on object e.g. `addEventListener` + * @param replacement replacement function + * @param track {optional} record instrumentation to an array + */ +function fill(obj, name, replacement, track) { + var orig = obj[name]; + obj[name] = replacement(orig); + if (track) { + track.push([obj, name, orig]); + } +} + +module.exports = { + isObject: isObject, + isError: isError, + isErrorEvent: isErrorEvent, + isUndefined: isUndefined, + isFunction: isFunction, + isString: isString, + isEmptyObject: isEmptyObject, + supportsErrorEvent: supportsErrorEvent, + wrappedCallback: wrappedCallback, + each: each, + objectMerge: objectMerge, + truncate: truncate, + objectFrozen: objectFrozen, + hasKey: hasKey, + joinRegExp: joinRegExp, + urlencode: urlencode, + uuid4: uuid4, + htmlTreeAsString: htmlTreeAsString, + htmlElementAsString: htmlElementAsString, + isSameException: isSameException, + isSameStacktrace: isSameStacktrace, + parseUrl: parseUrl, + fill: fill +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/TraceKit/tracekit.js": +/*!***********************************************************!*\ + !*** ./node_modules/raven-js/vendor/TraceKit/tracekit.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var utils = __webpack_require__(/*! ../../src/utils */ "./node_modules/raven-js/src/utils.js"); + +/* + TraceKit - Cross brower stack traces + + This was originally forked from github.com/occ/TraceKit, but has since been + largely re-written and is now maintained as part of raven-js. Tests for + this are in test/vendor. + + MIT license +*/ + +var TraceKit = { + collectWindowErrors: true, + debug: false +}; + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +// global reference to slice +var _slice = [].slice; +var UNKNOWN_FUNCTION = '?'; + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types +var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/; + +function getLocationHref() { + if (typeof document === 'undefined' || document.location == null) return ''; + + return document.location.href; +} + +/** + * TraceKit.report: cross-browser processing of unhandled exceptions + * + * Syntax: + * TraceKit.report.subscribe(function(stackInfo) { ... }) + * TraceKit.report.unsubscribe(function(stackInfo) { ... }) + * TraceKit.report(exception) + * try { ...code... } catch(ex) { TraceKit.report(ex); } + * + * Supports: + * - Firefox: full stack trace with line numbers, plus column number + * on top frame; column number is not guaranteed + * - Opera: full stack trace with line and column numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * - IE: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * + * In theory, TraceKit should work on all of the following versions: + * - IE5.5+ (only 8.0 tested) + * - Firefox 0.9+ (only 3.5+ tested) + * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require + * Exceptions Have Stacktrace to be enabled in opera:config) + * - Safari 3+ (only 4+ tested) + * - Chrome 1+ (only 5+ tested) + * - Konqueror 3.5+ (untested) + * + * Requires TraceKit.computeStackTrace. + * + * Tries to catch all unhandled exceptions and report them to the + * subscribed handlers. Please note that TraceKit.report will rethrow the + * exception. This is REQUIRED in order to get a useful stack trace in IE. + * If the exception does not reach the top of the browser, you will only + * get a stack trace from the point where TraceKit.report was called. + * + * Handlers receive a stackInfo object as described in the + * TraceKit.computeStackTrace docs. + */ +TraceKit.report = (function reportModuleWrapper() { + var handlers = [], + lastArgs = null, + lastException = null, + lastExceptionStack = null; + + /** + * Add a crash handler. + * @param {Function} handler + */ + function subscribe(handler) { + installGlobalHandler(); + handlers.push(handler); + } + + /** + * Remove a crash handler. + * @param {Function} handler + */ + function unsubscribe(handler) { + for (var i = handlers.length - 1; i >= 0; --i) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } + + /** + * Remove all crash handlers. + */ + function unsubscribeAll() { + uninstallGlobalHandler(); + handlers = []; + } + + /** + * Dispatch stack information to all handlers. + * @param {Object.} stack + */ + function notifyHandlers(stack, isWindowError) { + var exception = null; + if (isWindowError && !TraceKit.collectWindowErrors) { + return; + } + for (var i in handlers) { + if (handlers.hasOwnProperty(i)) { + try { + handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); + } catch (inner) { + exception = inner; + } + } + } + + if (exception) { + throw exception; + } + } + + var _oldOnerrorHandler, _onErrorHandlerInstalled; + + /** + * Ensures all global unhandled exceptions are recorded. + * Supported by Gecko and IE. + * @param {string} message Error message. + * @param {string} url URL of script that generated the exception. + * @param {(number|string)} lineNo The line number at which the error + * occurred. + * @param {?(number|string)} colNo The column number at which the error + * occurred. + * @param {?Error} ex The actual Error object. + */ + function traceKitWindowOnError(message, url, lineNo, colNo, ex) { + var stack = null; + + if (lastExceptionStack) { + TraceKit.computeStackTrace.augmentStackTraceWithInitialElement( + lastExceptionStack, + url, + lineNo, + message + ); + processLastException(); + } else if (ex && utils.isError(ex)) { + // non-string `ex` arg; attempt to extract stack trace + + // New chrome and blink send along a real error object + // Let's just report that like a normal error. + // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror + stack = TraceKit.computeStackTrace(ex); + notifyHandlers(stack, true); + } else { + var location = { + url: url, + line: lineNo, + column: colNo + }; + + var name = undefined; + var msg = message; // must be new var or will modify original `arguments` + var groups; + if ({}.toString.call(message) === '[object String]') { + var groups = message.match(ERROR_TYPES_RE); + if (groups) { + name = groups[1]; + msg = groups[2]; + } + } + + location.func = UNKNOWN_FUNCTION; + + stack = { + name: name, + message: msg, + url: getLocationHref(), + stack: [location] + }; + notifyHandlers(stack, true); + } + + if (_oldOnerrorHandler) { + return _oldOnerrorHandler.apply(this, arguments); + } + + return false; + } + + function installGlobalHandler() { + if (_onErrorHandlerInstalled) { + return; + } + _oldOnerrorHandler = _window.onerror; + _window.onerror = traceKitWindowOnError; + _onErrorHandlerInstalled = true; + } + + function uninstallGlobalHandler() { + if (!_onErrorHandlerInstalled) { + return; + } + _window.onerror = _oldOnerrorHandler; + _onErrorHandlerInstalled = false; + _oldOnerrorHandler = undefined; + } + + function processLastException() { + var _lastExceptionStack = lastExceptionStack, + _lastArgs = lastArgs; + lastArgs = null; + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs)); + } + + /** + * Reports an unhandled Error to TraceKit. + * @param {Error} ex + * @param {?boolean} rethrow If false, do not re-throw the exception. + * Only used for window.onerror to not cause an infinite loop of + * rethrowing. + */ + function report(ex, rethrow) { + var args = _slice.call(arguments, 1); + if (lastExceptionStack) { + if (lastException === ex) { + return; // already caught by an inner catch block, ignore + } else { + processLastException(); + } + } + + var stack = TraceKit.computeStackTrace(ex); + lastExceptionStack = stack; + lastException = ex; + lastArgs = args; + + // If the stack trace is incomplete, wait for 2 seconds for + // slow slow IE to see if onerror occurs or not before reporting + // this exception; otherwise, we will end up with an incomplete + // stack trace + setTimeout(function() { + if (lastException === ex) { + processLastException(); + } + }, stack.incomplete ? 2000 : 0); + + if (rethrow !== false) { + throw ex; // re-throw to propagate to the top level (and cause window.onerror) + } + } + + report.subscribe = subscribe; + report.unsubscribe = unsubscribe; + report.uninstall = unsubscribeAll; + return report; +})(); + +/** + * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript + * + * Syntax: + * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) + * Returns: + * s.name - exception name + * s.message - exception message + * s.stack[i].url - JavaScript or HTML file URL + * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) + * s.stack[i].args - arguments passed to the function, if known + * s.stack[i].line - line number, if known + * s.stack[i].column - column number, if known + * + * Supports: + * - Firefox: full stack trace with line numbers and unreliable column + * number on top frame + * - Opera 10: full stack trace with line and column numbers + * - Opera 9-: full stack trace with line numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the topmost stacktrace element + * only + * - IE: no line numbers whatsoever + * + * Tries to guess names of anonymous functions by looking for assignments + * in the source code. In IE and Safari, we have to guess source file names + * by searching for function bodies inside all page scripts. This will not + * work for scripts that are loaded cross-domain. + * Here be dragons: some function names may be guessed incorrectly, and + * duplicate functions may be mismatched. + * + * TraceKit.computeStackTrace should only be used for tracing purposes. + * Logging of unhandled exceptions should be done with TraceKit.report, + * which builds on top of TraceKit.computeStackTrace and provides better + * IE support by utilizing the window.onerror event to retrieve information + * about the top of the stack. + * + * Note: In IE and Safari, no stack trace is recorded on the Error object, + * so computeStackTrace instead walks its *own* chain of callers. + * This means that: + * * in Safari, some methods may be missing from the stack trace; + * * in IE, the topmost function in the stack trace will always be the + * caller of computeStackTrace. + * + * This is okay for tracing (because you are likely to be calling + * computeStackTrace from the function you want to be the topmost element + * of the stack trace anyway), but not okay for logging unhandled + * exceptions (because your catch block will likely be far away from the + * inner function that actually caused the exception). + * + */ +TraceKit.computeStackTrace = (function computeStackTraceWrapper() { + // Contents of Exception in various browsers. + // + // SAFARI: + // ex.message = Can't find variable: qq + // ex.line = 59 + // ex.sourceId = 580238192 + // ex.sourceURL = http://... + // ex.expressionBeginOffset = 96 + // ex.expressionCaretOffset = 98 + // ex.expressionEndOffset = 98 + // ex.name = ReferenceError + // + // FIREFOX: + // ex.message = qq is not defined + // ex.fileName = http://... + // ex.lineNumber = 59 + // ex.columnNumber = 69 + // ex.stack = ...stack trace... (see the example below) + // ex.name = ReferenceError + // + // CHROME: + // ex.message = qq is not defined + // ex.name = ReferenceError + // ex.type = not_defined + // ex.arguments = ['aa'] + // ex.stack = ...stack trace... + // + // INTERNET EXPLORER: + // ex.message = ... + // ex.name = ReferenceError + // + // OPERA: + // ex.message = ...message... (see the example below) + // ex.name = ReferenceError + // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) + // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + + /** + * Computes stack trace information from the stack property. + * Chrome and Gecko use this property. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceFromStackProp(ex) { + if (typeof ex.stack === 'undefined' || !ex.stack) return; + + var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, + gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i, + winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i, + // Used to additionally parse URL/line/column from eval frames + geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, + chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/, + lines = ex.stack.split('\n'), + stack = [], + submatch, + parts, + element, + reference = /^(.*) is undefined$/.exec(ex.message); + + for (var i = 0, j = lines.length; i < j; ++i) { + if ((parts = chrome.exec(lines[i]))) { + var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + if (isEval && (submatch = chromeEval.exec(parts[2]))) { + // throw out eval line/column and use top-most line/column number + parts[2] = submatch[1]; // url + parts[3] = submatch[2]; // line + parts[4] = submatch[3]; // column + } + element = { + url: !isNative ? parts[2] : null, + func: parts[1] || UNKNOWN_FUNCTION, + args: isNative ? [parts[2]] : [], + line: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = winjs.exec(lines[i]))) { + element = { + url: parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: [], + line: +parts[3], + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = gecko.exec(lines[i]))) { + var isEval = parts[3] && parts[3].indexOf(' > eval') > -1; + if (isEval && (submatch = geckoEval.exec(parts[3]))) { + // throw out eval line/column and use top-most line number + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = null; // no column when eval + } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') { + // FireFox uses this awesome columnNumber property for its top frame + // Also note, Firefox's column number is 0-based and everything else expects 1-based, + // so adding 1 + // NOTE: this hack doesn't work if top-most frame is eval + stack[0].column = ex.columnNumber + 1; + } + element = { + url: parts[3], + func: parts[1] || UNKNOWN_FUNCTION, + args: parts[2] ? parts[2].split(',') : [], + line: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null + }; + } else { + continue; + } + + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; + } + + stack.push(element); + } + + if (!stack.length) { + return null; + } + + return { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + } + + /** + * Adds information about the first frame to incomplete stack traces. + * Safari and IE require this to get complete data on the first frame. + * @param {Object.} stackInfo Stack trace information from + * one of the compute* methods. + * @param {string} url The URL of the script that caused an error. + * @param {(number|string)} lineNo The line number of the script that + * caused an error. + * @param {string=} message The error generated by the browser, which + * hopefully contains the name of the object that caused the error. + * @return {boolean} Whether or not the stack information was + * augmented. + */ + function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { + var initial = { + url: url, + line: lineNo + }; + + if (initial.url && initial.line) { + stackInfo.incomplete = false; + + if (!initial.func) { + initial.func = UNKNOWN_FUNCTION; + } + + if (stackInfo.stack.length > 0) { + if (stackInfo.stack[0].url === initial.url) { + if (stackInfo.stack[0].line === initial.line) { + return false; // already in stack trace + } else if ( + !stackInfo.stack[0].line && + stackInfo.stack[0].func === initial.func + ) { + stackInfo.stack[0].line = initial.line; + return false; + } + } + } + + stackInfo.stack.unshift(initial); + stackInfo.partial = true; + return true; + } else { + stackInfo.incomplete = true; + } + + return false; + } + + /** + * Computes stack trace information by walking the arguments.caller + * chain at the time the exception occurred. This will cause earlier + * frames to be missed but is the only way to get any stack trace in + * Safari and IE. The top frame is restored by + * {@link augmentStackTraceWithInitialElement}. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceByWalkingCallerChain(ex, depth) { + var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, + stack = [], + funcs = {}, + recursion = false, + parts, + item, + source; + + for ( + var curr = computeStackTraceByWalkingCallerChain.caller; + curr && !recursion; + curr = curr.caller + ) { + if (curr === computeStackTrace || curr === TraceKit.report) { + // console.log('skipping internal function'); + continue; + } + + item = { + url: null, + func: UNKNOWN_FUNCTION, + line: null, + column: null + }; + + if (curr.name) { + item.func = curr.name; + } else if ((parts = functionName.exec(curr.toString()))) { + item.func = parts[1]; + } + + if (typeof item.func === 'undefined') { + try { + item.func = parts.input.substring(0, parts.input.indexOf('{')); + } catch (e) {} + } + + if (funcs['' + curr]) { + recursion = true; + } else { + funcs['' + curr] = true; + } + + stack.push(item); + } + + if (depth) { + // console.log('depth is ' + depth); + // console.log('stack is ' + stack.length); + stack.splice(0, depth); + } + + var result = { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + augmentStackTraceWithInitialElement( + result, + ex.sourceURL || ex.fileName, + ex.line || ex.lineNumber, + ex.message || ex.description + ); + return result; + } + + /** + * Computes a stack trace for an exception. + * @param {Error} ex + * @param {(string|number)=} depth + */ + function computeStackTrace(ex, depth) { + var stack = null; + depth = depth == null ? 0 : +depth; + + try { + stack = computeStackTraceFromStackProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + + try { + stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + return { + name: ex.name, + message: ex.message, + url: getLocationHref() + }; + } + + computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; + computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp; + + return computeStackTrace; +})(); + +module.exports = TraceKit; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js": +/*!***********************************************************************!*\ + !*** ./node_modules/raven-js/vendor/json-stringify-safe/stringify.js ***! + \***********************************************************************/ +/***/ ((module, exports) => { + +/* + json-stringify-safe + Like JSON.stringify, but doesn't throw on circular references. + + Originally forked from https://github.com/isaacs/json-stringify-safe + version 5.0.1 on 3/8/2017 and modified to handle Errors serialization + and IE8 compatibility. Tests for this are in test/vendor. + + ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE +*/ + +exports = module.exports = stringify; +exports.getSerialize = serializer; + +function indexOf(haystack, needle) { + for (var i = 0; i < haystack.length; ++i) { + if (haystack[i] === needle) return i; + } + return -1; +} + +function stringify(obj, replacer, spaces, cycleReplacer) { + return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); +} + +// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106 +function stringifyError(value) { + var err = { + // These properties are implemented as magical getters and don't show up in for in + stack: value.stack, + message: value.message, + name: value.name + }; + + for (var i in value) { + if (Object.prototype.hasOwnProperty.call(value, i)) { + err[i] = value[i]; + } + } + + return err; +} + +function serializer(replacer, cycleReplacer) { + var stack = []; + var keys = []; + + if (cycleReplacer == null) { + cycleReplacer = function(key, value) { + if (stack[0] === value) { + return '[Circular ~]'; + } + return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'; + }; + } + + return function(key, value) { + if (stack.length > 0) { + var thisPos = indexOf(stack, this); + ~thisPos ? stack.splice(thisPos + 1) : stack.push(this); + ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key); + + if (~indexOf(stack, value)) { + value = cycleReplacer.call(this, key, value); + } + } else { + stack.push(value); + } + + return replacer == null + ? value instanceof Error ? stringifyError(value) : value + : replacer.call(this, key, value); + }; +} + + +/***/ }), + +/***/ "./node_modules/react-is/cjs/react-is.development.js": +/*!***********************************************************!*\ + !*** ./node_modules/react-is/cjs/react-is.development.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +/** @license React v16.13.1 + * react-is.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + + + +if (true) { + (function() { +'use strict'; + +// The Symbol used to tag the ReactElement-like types. If there is no native Symbol +// nor polyfill, then a plain number is used for performance. +var hasSymbol = typeof Symbol === 'function' && Symbol.for; +var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; +var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; +var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; +var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; +var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; +var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; +var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary +// (unstable) APIs that have been removed. Can we remove the symbols? + +var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; +var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; +var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; +var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; +var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; +var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; +var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; +var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; +var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; +var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; +var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; + +function isValidElementType(type) { + return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. + type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); +} + +function typeOf(object) { + if (typeof object === 'object' && object !== null) { + var $$typeof = object.$$typeof; + + switch ($$typeof) { + case REACT_ELEMENT_TYPE: + var type = object.type; + + switch (type) { + case REACT_ASYNC_MODE_TYPE: + case REACT_CONCURRENT_MODE_TYPE: + case REACT_FRAGMENT_TYPE: + case REACT_PROFILER_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_SUSPENSE_TYPE: + return type; + + default: + var $$typeofType = type && type.$$typeof; + + switch ($$typeofType) { + case REACT_CONTEXT_TYPE: + case REACT_FORWARD_REF_TYPE: + case REACT_LAZY_TYPE: + case REACT_MEMO_TYPE: + case REACT_PROVIDER_TYPE: + return $$typeofType; + + default: + return $$typeof; + } + + } + + case REACT_PORTAL_TYPE: + return $$typeof; + } + } + + return undefined; +} // AsyncMode is deprecated along with isAsyncMode + +var AsyncMode = REACT_ASYNC_MODE_TYPE; +var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; +var ContextConsumer = REACT_CONTEXT_TYPE; +var ContextProvider = REACT_PROVIDER_TYPE; +var Element = REACT_ELEMENT_TYPE; +var ForwardRef = REACT_FORWARD_REF_TYPE; +var Fragment = REACT_FRAGMENT_TYPE; +var Lazy = REACT_LAZY_TYPE; +var Memo = REACT_MEMO_TYPE; +var Portal = REACT_PORTAL_TYPE; +var Profiler = REACT_PROFILER_TYPE; +var StrictMode = REACT_STRICT_MODE_TYPE; +var Suspense = REACT_SUSPENSE_TYPE; +var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated + +function isAsyncMode(object) { + { + if (!hasWarnedAboutDeprecatedIsAsyncMode) { + hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint + + console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); + } + } + + return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; +} +function isConcurrentMode(object) { + return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; +} +function isContextConsumer(object) { + return typeOf(object) === REACT_CONTEXT_TYPE; +} +function isContextProvider(object) { + return typeOf(object) === REACT_PROVIDER_TYPE; +} +function isElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; +} +function isForwardRef(object) { + return typeOf(object) === REACT_FORWARD_REF_TYPE; +} +function isFragment(object) { + return typeOf(object) === REACT_FRAGMENT_TYPE; +} +function isLazy(object) { + return typeOf(object) === REACT_LAZY_TYPE; +} +function isMemo(object) { + return typeOf(object) === REACT_MEMO_TYPE; +} +function isPortal(object) { + return typeOf(object) === REACT_PORTAL_TYPE; +} +function isProfiler(object) { + return typeOf(object) === REACT_PROFILER_TYPE; +} +function isStrictMode(object) { + return typeOf(object) === REACT_STRICT_MODE_TYPE; +} +function isSuspense(object) { + return typeOf(object) === REACT_SUSPENSE_TYPE; +} + +exports.AsyncMode = AsyncMode; +exports.ConcurrentMode = ConcurrentMode; +exports.ContextConsumer = ContextConsumer; +exports.ContextProvider = ContextProvider; +exports.Element = Element; +exports.ForwardRef = ForwardRef; +exports.Fragment = Fragment; +exports.Lazy = Lazy; +exports.Memo = Memo; +exports.Portal = Portal; +exports.Profiler = Profiler; +exports.StrictMode = StrictMode; +exports.Suspense = Suspense; +exports.isAsyncMode = isAsyncMode; +exports.isConcurrentMode = isConcurrentMode; +exports.isContextConsumer = isContextConsumer; +exports.isContextProvider = isContextProvider; +exports.isElement = isElement; +exports.isForwardRef = isForwardRef; +exports.isFragment = isFragment; +exports.isLazy = isLazy; +exports.isMemo = isMemo; +exports.isPortal = isPortal; +exports.isProfiler = isProfiler; +exports.isStrictMode = isStrictMode; +exports.isSuspense = isSuspense; +exports.isValidElementType = isValidElementType; +exports.typeOf = typeOf; + })(); +} + + +/***/ }), + +/***/ "./node_modules/react-is/index.js": +/*!****************************************!*\ + !*** ./node_modules/react-is/index.js ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +if (false) {} else { + module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/react-is/cjs/react-is.development.js"); +} + + +/***/ }), + +/***/ "./node_modules/react/cjs/react-jsx-runtime.development.js": +/*!*****************************************************************!*\ + !*** ./node_modules/react/cjs/react-jsx-runtime.development.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +/** @license React v17.0.2 + * react-jsx-runtime.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +if (true) { + (function() { +'use strict'; + +var React = __webpack_require__(/*! react */ "react"); +var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); + +// ATTENTION +// When adding new symbols to this file, +// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' +// The Symbol used to tag the ReactElement-like types. If there is no native Symbol +// nor polyfill, then a plain number is used for performance. +var REACT_ELEMENT_TYPE = 0xeac7; +var REACT_PORTAL_TYPE = 0xeaca; +exports.Fragment = 0xeacb; +var REACT_STRICT_MODE_TYPE = 0xeacc; +var REACT_PROFILER_TYPE = 0xead2; +var REACT_PROVIDER_TYPE = 0xeacd; +var REACT_CONTEXT_TYPE = 0xeace; +var REACT_FORWARD_REF_TYPE = 0xead0; +var REACT_SUSPENSE_TYPE = 0xead1; +var REACT_SUSPENSE_LIST_TYPE = 0xead8; +var REACT_MEMO_TYPE = 0xead3; +var REACT_LAZY_TYPE = 0xead4; +var REACT_BLOCK_TYPE = 0xead9; +var REACT_SERVER_BLOCK_TYPE = 0xeada; +var REACT_FUNDAMENTAL_TYPE = 0xead5; +var REACT_SCOPE_TYPE = 0xead7; +var REACT_OPAQUE_ID_TYPE = 0xeae0; +var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1; +var REACT_OFFSCREEN_TYPE = 0xeae2; +var REACT_LEGACY_HIDDEN_TYPE = 0xeae3; + +if (typeof Symbol === 'function' && Symbol.for) { + var symbolFor = Symbol.for; + REACT_ELEMENT_TYPE = symbolFor('react.element'); + REACT_PORTAL_TYPE = symbolFor('react.portal'); + exports.Fragment = symbolFor('react.fragment'); + REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode'); + REACT_PROFILER_TYPE = symbolFor('react.profiler'); + REACT_PROVIDER_TYPE = symbolFor('react.provider'); + REACT_CONTEXT_TYPE = symbolFor('react.context'); + REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref'); + REACT_SUSPENSE_TYPE = symbolFor('react.suspense'); + REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list'); + REACT_MEMO_TYPE = symbolFor('react.memo'); + REACT_LAZY_TYPE = symbolFor('react.lazy'); + REACT_BLOCK_TYPE = symbolFor('react.block'); + REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block'); + REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental'); + REACT_SCOPE_TYPE = symbolFor('react.scope'); + REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id'); + REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode'); + REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen'); + REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden'); +} + +var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; +var FAUX_ITERATOR_SYMBOL = '@@iterator'; +function getIteratorFn(maybeIterable) { + if (maybeIterable === null || typeof maybeIterable !== 'object') { + return null; + } + + var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; + + if (typeof maybeIterator === 'function') { + return maybeIterator; + } + + return null; +} + +var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + +function error(format) { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } +} + +function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } + + var argsWithFormat = args.map(function (item) { + return '' + item; + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } +} + +// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. + +var enableScopeAPI = false; // Experimental Create Event Handle API. + +function isValidElementType(type) { + if (typeof type === 'string' || typeof type === 'function') { + return true; + } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). + + + if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) { + return true; + } + + if (typeof type === 'object' && type !== null) { + if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) { + return true; + } + } + + return false; +} + +function getWrappedName(outerType, innerType, wrapperName) { + var functionName = innerType.displayName || innerType.name || ''; + return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); +} + +function getContextName(type) { + return type.displayName || 'Context'; +} + +function getComponentName(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case exports.Fragment: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + return getComponentName(type.type); + + case REACT_BLOCK_TYPE: + return getComponentName(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentName(init(payload)); + } catch (x) { + return null; + } + } + } + } + + return null; +} + +// Helpers to patch console.logs to avoid logging during side-effect free +// replaying on render function. This currently only patches the object +// lazily which won't cover if the log function was extracted eagerly. +// We could also eagerly patch the method. +var disabledDepth = 0; +var prevLog; +var prevInfo; +var prevWarn; +var prevError; +var prevGroup; +var prevGroupCollapsed; +var prevGroupEnd; + +function disabledLog() {} + +disabledLog.__reactDisabledLog = true; +function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } +} +function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: _assign({}, props, { + value: prevLog + }), + info: _assign({}, props, { + value: prevInfo + }), + warn: _assign({}, props, { + value: prevWarn + }), + error: _assign({}, props, { + value: prevError + }), + group: _assign({}, props, { + value: prevGroup + }), + groupCollapsed: _assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: _assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } +} + +var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; +var prefix; +function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } +} +var reentry = false; +var componentFrameCache; + +{ + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); +} + +function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if (!fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; +} +function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } +} + +function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); +} + +function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_BLOCK_TYPE: + return describeFunctionComponentFrame(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; +} + +var loggedTypeFailures = {}; +var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame.setExtraStackFrame(null); + } + } +} + +function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(Object.prototype.hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } +} + +var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true +}; +var specialPropKeyWarningShown; +var specialPropRefWarningShown; +var didWarnAboutStringRefs; + +{ + didWarnAboutStringRefs = {}; +} + +function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.ref !== undefined; +} + +function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.key !== undefined; +} + +function warnIfStringRefCannotBeAutoConverted(config, self) { + { + if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) { + var componentName = getComponentName(ReactCurrentOwner.current.type); + + if (!didWarnAboutStringRefs[componentName]) { + error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref); + + didWarnAboutStringRefs[componentName] = true; + } + } + } +} + +function defineKeyPropWarningGetter(props, displayName) { + { + var warnAboutAccessingKey = function () { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + + error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); + } +} + +function defineRefPropWarningGetter(props, displayName) { + { + var warnAboutAccessingRef = function () { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + + error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); + } +} +/** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, instanceof check + * will not work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} props + * @param {*} key + * @param {string|object} ref + * @param {*} owner + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @internal + */ + + +var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); // self and source are DEV only properties. + + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; +}; +/** + * https://github.com/reactjs/rfcs/pull/107 + * @param {*} type + * @param {object} props + * @param {string} key + */ + +function jsxDEV(type, config, maybeKey, source, self) { + { + var propName; // Reserved names are extracted + + var props = {}; + var key = null; + var ref = null; // Currently, key can be spread in as a prop. This causes a potential + // issue if key is also explicitly declared (ie.
+ // or
). We want to deprecate key spread, + // but as an intermediary step, we will use jsxDEV for everything except + //
, because we aren't currently able to tell if + // key is explicitly declared to be undefined or not. + + if (maybeKey !== undefined) { + key = '' + maybeKey; + } + + if (hasValidKey(config)) { + key = '' + config.key; + } + + if (hasValidRef(config)) { + ref = config.ref; + warnIfStringRefCannotBeAutoConverted(config, self); + } // Remaining properties are added to a new props object + + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } // Resolve default props + + + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + + if (key || ref) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); + } +} + +var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; +var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement$1(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame$1.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame$1.setExtraStackFrame(null); + } + } +} + +var propTypesMisspellWarningShown; + +{ + propTypesMisspellWarningShown = false; +} +/** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a ReactElement. + * @final + */ + +function isValidElement(object) { + { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + } +} + +function getDeclarationErrorAddendum() { + { + if (ReactCurrentOwner$1.current) { + var name = getComponentName(ReactCurrentOwner$1.current.type); + + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + + return ''; + } +} + +function getSourceInfoErrorAddendum(source) { + { + if (source !== undefined) { + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + + return ''; + } +} +/** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + + +var ownerHasKeyUseWarning = {}; + +function getCurrentComponentErrorInfo(parentType) { + { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + + if (parentName) { + info = "\n\nCheck the top-level render call using <" + parentName + ">."; + } + } + + return info; + } +} +/** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + + +function validateExplicitKey(element, parentType) { + { + if (!element._store || element._store.validated || element.key != null) { + return; + } + + element._store.validated = true; + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + + var childOwner = ''; + + if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) { + // Give the component that originally created this child. + childOwner = " It was passed a child from " + getComponentName(element._owner.type) + "."; + } + + setCurrentlyValidatingElement$1(element); + + error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); + + setCurrentlyValidatingElement$1(null); + } +} +/** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + + +function validateChildKeys(node, parentType) { + { + if (typeof node !== 'object') { + return; + } + + if (Array.isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } + } +} +/** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + + +function validatePropTypes(element) { + { + var type = element.type; + + if (type === null || type === undefined || typeof type === 'string') { + return; + } + + var propTypes; + + if (typeof type === 'function') { + propTypes = type.propTypes; + } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + type.$$typeof === REACT_MEMO_TYPE)) { + propTypes = type.propTypes; + } else { + return; + } + + if (propTypes) { + // Intentionally inside to avoid triggering lazy initializers: + var name = getComponentName(type); + checkPropTypes(propTypes, element.props, 'prop', name, element); + } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: + + var _name = getComponentName(type); + + error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); + } + + if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { + error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } + } +} +/** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ + + +function validateFragmentProps(fragment) { + { + var keys = Object.keys(fragment.props); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (key !== 'children' && key !== 'key') { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); + + setCurrentlyValidatingElement$1(null); + break; + } + } + + if (fragment.ref !== null) { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid attribute `ref` supplied to `React.Fragment`.'); + + setCurrentlyValidatingElement$1(null); + } + } +} + +function jsxWithValidation(type, props, key, isStaticChildren, source, self) { + { + var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + + if (!validType) { + var info = ''; + + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendum(source); + + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + var typeString; + + if (type === null) { + typeString = 'null'; + } else if (Array.isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />"; + info = ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); + } + + var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + + if (element == null) { + return element; + } // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + + + if (validType) { + var children = props.children; + + if (children !== undefined) { + if (isStaticChildren) { + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) { + validateChildKeys(children[i], type); + } + + if (Object.freeze) { + Object.freeze(children); + } + } else { + error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); + } + } else { + validateChildKeys(children, type); + } + } + } + + if (type === exports.Fragment) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; + } +} // These two functions exist to still get child warnings in dev +// even with the prod transform. This means that jsxDEV is purely +// opt-in behavior for better messages but that we won't stop +// giving you warnings if you use production apis. + +function jsxWithValidationStatic(type, props, key) { + { + return jsxWithValidation(type, props, key, true); + } +} +function jsxWithValidationDynamic(type, props, key) { + { + return jsxWithValidation(type, props, key, false); + } +} + +var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children. +// for now we can ship identical prod functions + +var jsxs = jsxWithValidationStatic ; + +exports.jsx = jsx; +exports.jsxs = jsxs; + })(); +} + + +/***/ }), + +/***/ "./node_modules/react/jsx-runtime.js": +/*!*******************************************!*\ + !*** ./node_modules/react/jsx-runtime.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +if (false) {} else { + module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ "./node_modules/react/cjs/react-jsx-runtime.development.js"); +} + + +/***/ }), + +/***/ "./node_modules/styled-components/dist/styled-components.browser.esm.js": +/*!******************************************************************************!*\ + !*** ./node_modules/styled-components/dist/styled-components.browser.esm.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ServerStyleSheet": () => (/* binding */ ServerStyleSheet), +/* harmony export */ "StyleSheetConsumer": () => (/* binding */ StyleSheetConsumer), +/* harmony export */ "StyleSheetContext": () => (/* binding */ StyleSheetContext), +/* harmony export */ "StyleSheetManager": () => (/* binding */ StyleSheetManager), +/* harmony export */ "ThemeConsumer": () => (/* binding */ ThemeConsumer), +/* harmony export */ "ThemeContext": () => (/* binding */ ThemeContext), +/* harmony export */ "ThemeProvider": () => (/* binding */ ThemeProvider), +/* harmony export */ "__DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS": () => (/* binding */ __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS), +/* harmony export */ "createGlobalStyle": () => (/* binding */ createGlobalStyle), +/* harmony export */ "css": () => (/* binding */ css), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ "isStyledComponent": () => (/* binding */ isStyledComponent), +/* harmony export */ "keyframes": () => (/* binding */ keyframes), +/* harmony export */ "withTheme": () => (/* binding */ withTheme) +/* harmony export */ }); +/* harmony import */ var stylis_stylis_min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! stylis/stylis.min */ "./node_modules/stylis/stylis.min.js"); +/* harmony import */ var stylis_stylis_min__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(stylis_stylis_min__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var stylis_rule_sheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! stylis-rule-sheet */ "./node_modules/stylis-rule-sheet/index.js"); +/* harmony import */ var stylis_rule_sheet__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(stylis_rule_sheet__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _emotion_unitless__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/unitless */ "./node_modules/@emotion/unitless/dist/unitless.browser.esm.js"); +/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js"); +/* harmony import */ var memoize_one__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! memoize-one */ "./node_modules/memoize-one/dist/memoize-one.esm.js"); +/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); +/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/is-prop-valid */ "./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js"); +/* harmony import */ var merge_anything__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! merge-anything */ "./node_modules/merge-anything/dist/index.esm.js"); + + + + + + + + + + +// + +var interleave = (function (strings, interpolations) { + var result = [strings[0]]; + + for (var i = 0, len = interpolations.length; i < len; i += 1) { + result.push(interpolations[i], strings[i + 1]); + } + + return result; +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + +var objectWithoutProperties = function (obj, keys) { + var target = {}; + + for (var i in obj) { + if (keys.indexOf(i) >= 0) continue; + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; + target[i] = obj[i]; + } + + return target; +}; + +var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; +}; + +// +var isPlainObject = (function (x) { + return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x.constructor === Object; +}); + +// +var EMPTY_ARRAY = Object.freeze([]); +var EMPTY_OBJECT = Object.freeze({}); + +// +function isFunction(test) { + return typeof test === 'function'; +} + +// + +function getComponentName(target) { + return ( true ? typeof target === 'string' && target : 0) || target.displayName || target.name || 'Component'; +} + +// +function isStatelessFunction(test) { + return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent); +} + +// +function isStyledComponent(target) { + return target && typeof target.styledComponentId === 'string'; +} + +// + +var SC_ATTR = typeof process !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled'; + +var SC_VERSION_ATTR = 'data-styled-version'; + +var SC_STREAM_ATTR = 'data-styled-streamed'; + +var IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window; + +var DISABLE_SPEEDY = typeof SC_DISABLE_SPEEDY === 'boolean' && SC_DISABLE_SPEEDY || typeof process !== 'undefined' && (process.env.REACT_APP_SC_DISABLE_SPEEDY || process.env.SC_DISABLE_SPEEDY) || "development" !== 'production'; + +// Shared empty execution context when generating static styles +var STATIC_EXECUTION_CONTEXT = {}; + +// + + +/** + * Parse errors.md and turn it into a simple hash of code: message + */ +var ERRORS = true ? { + "1": "Cannot create styled-component for component: %s.\n\n", + "2": "Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\n\n- Are you trying to reuse it across renders?\n- Are you accidentally calling collectStyles twice?\n\n", + "3": "Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\n\n", + "4": "The `StyleSheetManager` expects a valid target or sheet prop!\n\n- Does this error occur on the client and is your target falsy?\n- Does this error occur on the server and is the sheet falsy?\n\n", + "5": "The clone method cannot be used on the client!\n\n- Are you running in a client-like environment on the server?\n- Are you trying to run SSR on the client?\n\n", + "6": "Trying to insert a new style tag, but the given Node is unmounted!\n\n- Are you using a custom target that isn't mounted?\n- Does your document not have a valid head element?\n- Have you accidentally removed a style tag manually?\n\n", + "7": "ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\n\n```js\ntheme={() => ({})}\n```\n\n", + "8": "ThemeProvider: Please make your \"theme\" prop an object.\n\n", + "9": "Missing document ``\n\n", + "10": "Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\n\n", + "11": "_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\n\n", + "12": "It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\`\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\n\n", + "13": "%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\n" +} : 0; + +/** + * super basic version of sprintf + */ +function format() { + var a = arguments.length <= 0 ? undefined : arguments[0]; + var b = []; + + for (var c = 1, len = arguments.length; c < len; c += 1) { + b.push(arguments.length <= c ? undefined : arguments[c]); + } + + b.forEach(function (d) { + a = a.replace(/%[a-z]/, d); + }); + + return a; +} + +/** + * Create an error file out of errors.md for development and a simple web link to the full errors + * in production mode. + */ + +var StyledComponentsError = function (_Error) { + inherits(StyledComponentsError, _Error); + + function StyledComponentsError(code) { + classCallCheck(this, StyledComponentsError); + + for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + interpolations[_key - 1] = arguments[_key]; + } + + if (false) { var _this; } else { + var _this = possibleConstructorReturn(this, _Error.call(this, format.apply(undefined, [ERRORS[code]].concat(interpolations)).trim())); + } + return possibleConstructorReturn(_this); + } + + return StyledComponentsError; +}(Error); + +// +var SC_COMPONENT_ID = /^[^\S\n]*?\/\* sc-component-id:\s*(\S+)\s+\*\//gm; + +var extractComps = (function (maybeCSS) { + var css = '' + (maybeCSS || ''); // Definitely a string, and a clone + var existingComponents = []; + css.replace(SC_COMPONENT_ID, function (match, componentId, matchIndex) { + existingComponents.push({ componentId: componentId, matchIndex: matchIndex }); + return match; + }); + return existingComponents.map(function (_ref, i) { + var componentId = _ref.componentId, + matchIndex = _ref.matchIndex; + + var nextComp = existingComponents[i + 1]; + var cssFromDOM = nextComp ? css.slice(matchIndex, nextComp.matchIndex) : css.slice(matchIndex); + return { componentId: componentId, cssFromDOM: cssFromDOM }; + }); +}); + +// + +var COMMENT_REGEX = /^\s*\/\/.*$/gm; + +// NOTE: This stylis instance is only used to split rules from SSR'd style tags +var stylisSplitter = new (stylis_stylis_min__WEBPACK_IMPORTED_MODULE_0___default())({ + global: false, + cascade: true, + keyframe: false, + prefix: false, + compress: false, + semicolon: true +}); + +var stylis = new (stylis_stylis_min__WEBPACK_IMPORTED_MODULE_0___default())({ + global: false, + cascade: true, + keyframe: false, + prefix: true, + compress: false, + semicolon: false // NOTE: This means "autocomplete missing semicolons" +}); + +// Wrap `insertRulePlugin to build a list of rules, +// and then make our own plugin to return the rules. This +// makes it easier to hook into the existing SSR architecture + +var parsingRules = []; + +// eslint-disable-next-line consistent-return +var returnRulesPlugin = function returnRulesPlugin(context) { + if (context === -2) { + var parsedRules = parsingRules; + parsingRules = []; + return parsedRules; + } +}; + +var parseRulesPlugin = stylis_rule_sheet__WEBPACK_IMPORTED_MODULE_1___default()(function (rule) { + parsingRules.push(rule); +}); + +var _componentId = void 0; +var _selector = void 0; +var _selectorRegexp = void 0; + +var selfReferenceReplacer = function selfReferenceReplacer(match, offset, string) { + if ( + // the first self-ref is always untouched + offset > 0 && + // there should be at least two self-refs to do a replacement (.b > .b) + string.slice(0, offset).indexOf(_selector) !== -1 && + // no consecutive self refs (.b.b); that is a precedence boost and treated differently + string.slice(offset - _selector.length, offset) !== _selector) { + return '.' + _componentId; + } + + return match; +}; + +/** + * When writing a style like + * + * & + & { + * color: red; + * } + * + * The second ampersand should be a reference to the static component class. stylis + * has no knowledge of static class so we have to intelligently replace the base selector. + */ +var selfReferenceReplacementPlugin = function selfReferenceReplacementPlugin(context, _, selectors) { + if (context === 2 && selectors.length && selectors[0].lastIndexOf(_selector) > 0) { + // eslint-disable-next-line no-param-reassign + selectors[0] = selectors[0].replace(_selectorRegexp, selfReferenceReplacer); + } +}; + +stylis.use([selfReferenceReplacementPlugin, parseRulesPlugin, returnRulesPlugin]); +stylisSplitter.use([parseRulesPlugin, returnRulesPlugin]); + +var splitByRules = function splitByRules(css) { + return stylisSplitter('', css); +}; + +function stringifyRules(rules, selector, prefix) { + var componentId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '&'; + + var flatCSS = rules.join('').replace(COMMENT_REGEX, ''); // replace JS comments + + var cssStr = selector && prefix ? prefix + ' ' + selector + ' { ' + flatCSS + ' }' : flatCSS; + + // stylis has no concept of state to be passed to plugins + // but since JS is single=threaded, we can rely on that to ensure + // these properties stay in sync with the current stylis run + _componentId = componentId; + _selector = selector; + _selectorRegexp = new RegExp('\\' + _selector + '\\b', 'g'); + + return stylis(prefix || !selector ? '' : selector, cssStr); +} + +// +/* eslint-disable camelcase, no-undef */ + +var getNonce = (function () { + return true ? __webpack_require__.nc : 0; +}); + +// +/* These are helpers for the StyleTags to keep track of the injected + * rule names for each (component) ID that they're keeping track of. + * They're crucial for detecting whether a name has already been + * injected. + * (This excludes rehydrated names) */ + +/* adds a new ID:name pairing to a names dictionary */ +var addNameForId = function addNameForId(names, id, name) { + if (name) { + // eslint-disable-next-line no-param-reassign + var namesForId = names[id] || (names[id] = Object.create(null)); + namesForId[name] = true; + } +}; + +/* resets an ID entirely by overwriting it in the dictionary */ +var resetIdNames = function resetIdNames(names, id) { + // eslint-disable-next-line no-param-reassign + names[id] = Object.create(null); +}; + +/* factory for a names dictionary checking the existance of an ID:name pairing */ +var hasNameForId = function hasNameForId(names) { + return function (id, name) { + return names[id] !== undefined && names[id][name]; + }; +}; + +/* stringifies names for the html/element output */ +var stringifyNames = function stringifyNames(names) { + var str = ''; + // eslint-disable-next-line guard-for-in + for (var id in names) { + str += Object.keys(names[id]).join(' ') + ' '; + } + return str.trim(); +}; + +/* clones the nested names dictionary */ +var cloneNames = function cloneNames(names) { + var clone = Object.create(null); + // eslint-disable-next-line guard-for-in + for (var id in names) { + clone[id] = _extends({}, names[id]); + } + return clone; +}; + +// + +/* These are helpers that deal with the insertRule (aka speedy) API + * They are used in the StyleTags and specifically the speedy tag + */ + +/* retrieve a sheet for a given style tag */ +var sheetForTag = function sheetForTag(tag) { + // $FlowFixMe + if (tag.sheet) return tag.sheet; + + /* Firefox quirk requires us to step through all stylesheets to find one owned by the given tag */ + var size = tag.ownerDocument.styleSheets.length; + for (var i = 0; i < size; i += 1) { + var sheet = tag.ownerDocument.styleSheets[i]; + // $FlowFixMe + if (sheet.ownerNode === tag) return sheet; + } + + /* we should always be able to find a tag */ + throw new StyledComponentsError(10); +}; + +/* insert a rule safely and return whether it was actually injected */ +var safeInsertRule = function safeInsertRule(sheet, cssRule, index) { + /* abort early if cssRule string is falsy */ + if (!cssRule) return false; + + var maxIndex = sheet.cssRules.length; + + try { + /* use insertRule and cap passed index with maxIndex (no of cssRules) */ + sheet.insertRule(cssRule, index <= maxIndex ? index : maxIndex); + } catch (err) { + /* any error indicates an invalid rule */ + return false; + } + + return true; +}; + +/* deletes `size` rules starting from `removalIndex` */ +var deleteRules = function deleteRules(sheet, removalIndex, size) { + var lowerBound = removalIndex - size; + for (var i = removalIndex; i > lowerBound; i -= 1) { + sheet.deleteRule(i); + } +}; + +// + +/* this marker separates component styles and is important for rehydration */ +var makeTextMarker = function makeTextMarker(id) { + return '\n/* sc-component-id: ' + id + ' */\n'; +}; + +/* add up all numbers in array up until and including the index */ +var addUpUntilIndex = function addUpUntilIndex(sizes, index) { + var totalUpToIndex = 0; + for (var i = 0; i <= index; i += 1) { + totalUpToIndex += sizes[i]; + } + + return totalUpToIndex; +}; + +/* create a new style tag after lastEl */ +var makeStyleTag = function makeStyleTag(target, tagEl, insertBefore) { + var targetDocument = document; + if (target) targetDocument = target.ownerDocument;else if (tagEl) targetDocument = tagEl.ownerDocument; + + var el = targetDocument.createElement('style'); + el.setAttribute(SC_ATTR, ''); + el.setAttribute(SC_VERSION_ATTR, "4.4.1"); + + var nonce = getNonce(); + if (nonce) { + el.setAttribute('nonce', nonce); + } + + /* Work around insertRule quirk in EdgeHTML */ + el.appendChild(targetDocument.createTextNode('')); + + if (target && !tagEl) { + /* Append to target when no previous element was passed */ + target.appendChild(el); + } else { + if (!tagEl || !target || !tagEl.parentNode) { + throw new StyledComponentsError(6); + } + + /* Insert new style tag after the previous one */ + tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling); + } + + return el; +}; + +/* takes a css factory function and outputs an html styled tag factory */ +var wrapAsHtmlTag = function wrapAsHtmlTag(css, names) { + return function (additionalAttrs) { + var nonce = getNonce(); + var attrs = [nonce && 'nonce="' + nonce + '"', SC_ATTR + '="' + stringifyNames(names) + '"', SC_VERSION_ATTR + '="' + "4.4.1" + '"', additionalAttrs]; + + var htmlAttr = attrs.filter(Boolean).join(' '); + return ''; + }; +}; + +/* takes a css factory function and outputs an element factory */ +var wrapAsElement = function wrapAsElement(css, names) { + return function () { + var _props; + + var props = (_props = {}, _props[SC_ATTR] = stringifyNames(names), _props[SC_VERSION_ATTR] = "4.4.1", _props); + + var nonce = getNonce(); + if (nonce) { + // $FlowFixMe + props.nonce = nonce; + } + + // eslint-disable-next-line react/no-danger + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement('style', _extends({}, props, { dangerouslySetInnerHTML: { __html: css() } })); + }; +}; + +var getIdsFromMarkersFactory = function getIdsFromMarkersFactory(markers) { + return function () { + return Object.keys(markers); + }; +}; + +/* speedy tags utilise insertRule */ +var makeSpeedyTag = function makeSpeedyTag(el, getImportRuleTag) { + var names = Object.create(null); + var markers = Object.create(null); + var sizes = []; + + var extractImport = getImportRuleTag !== undefined; + /* indicates whether getImportRuleTag was called */ + var usedImportRuleTag = false; + + var insertMarker = function insertMarker(id) { + var prev = markers[id]; + if (prev !== undefined) { + return prev; + } + + markers[id] = sizes.length; + sizes.push(0); + resetIdNames(names, id); + + return markers[id]; + }; + + var insertRules = function insertRules(id, cssRules, name) { + var marker = insertMarker(id); + var sheet = sheetForTag(el); + var insertIndex = addUpUntilIndex(sizes, marker); + + var injectedRules = 0; + var importRules = []; + var cssRulesSize = cssRules.length; + + for (var i = 0; i < cssRulesSize; i += 1) { + var cssRule = cssRules[i]; + var mayHaveImport = extractImport; /* @import rules are reordered to appear first */ + if (mayHaveImport && cssRule.indexOf('@import') !== -1) { + importRules.push(cssRule); + } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) { + mayHaveImport = false; + injectedRules += 1; + } + } + + if (extractImport && importRules.length > 0) { + usedImportRuleTag = true; + // $FlowFixMe + getImportRuleTag().insertRules(id + '-import', importRules); + } + + sizes[marker] += injectedRules; /* add up no of injected rules */ + addNameForId(names, id, name); + }; + + var removeRules = function removeRules(id) { + var marker = markers[id]; + if (marker === undefined) return; + // $FlowFixMe + if (el.isConnected === false) return; + + var size = sizes[marker]; + var sheet = sheetForTag(el); + var removalIndex = addUpUntilIndex(sizes, marker) - 1; + deleteRules(sheet, removalIndex, size); + sizes[marker] = 0; + resetIdNames(names, id); + + if (extractImport && usedImportRuleTag) { + // $FlowFixMe + getImportRuleTag().removeRules(id + '-import'); + } + }; + + var css = function css() { + var _sheetForTag = sheetForTag(el), + cssRules = _sheetForTag.cssRules; + + var str = ''; + + // eslint-disable-next-line guard-for-in + for (var id in markers) { + str += makeTextMarker(id); + var marker = markers[id]; + var end = addUpUntilIndex(sizes, marker); + var size = sizes[marker]; + for (var i = end - size; i < end; i += 1) { + var rule = cssRules[i]; + if (rule !== undefined) { + str += rule.cssText; + } + } + } + + return str; + }; + + return { + clone: function clone() { + throw new StyledComponentsError(5); + }, + + css: css, + getIds: getIdsFromMarkersFactory(markers), + hasNameForId: hasNameForId(names), + insertMarker: insertMarker, + insertRules: insertRules, + removeRules: removeRules, + sealed: false, + styleTag: el, + toElement: wrapAsElement(css, names), + toHTML: wrapAsHtmlTag(css, names) + }; +}; + +var makeTextNode = function makeTextNode(targetDocument, id) { + return targetDocument.createTextNode(makeTextMarker(id)); +}; + +var makeBrowserTag = function makeBrowserTag(el, getImportRuleTag) { + var names = Object.create(null); + var markers = Object.create(null); + + var extractImport = getImportRuleTag !== undefined; + + /* indicates whether getImportRuleTag was called */ + var usedImportRuleTag = false; + + var insertMarker = function insertMarker(id) { + var prev = markers[id]; + if (prev !== undefined) { + return prev; + } + + markers[id] = makeTextNode(el.ownerDocument, id); + el.appendChild(markers[id]); + names[id] = Object.create(null); + + return markers[id]; + }; + + var insertRules = function insertRules(id, cssRules, name) { + var marker = insertMarker(id); + var importRules = []; + var cssRulesSize = cssRules.length; + + for (var i = 0; i < cssRulesSize; i += 1) { + var rule = cssRules[i]; + var mayHaveImport = extractImport; + if (mayHaveImport && rule.indexOf('@import') !== -1) { + importRules.push(rule); + } else { + mayHaveImport = false; + var separator = i === cssRulesSize - 1 ? '' : ' '; + marker.appendData('' + rule + separator); + } + } + + addNameForId(names, id, name); + + if (extractImport && importRules.length > 0) { + usedImportRuleTag = true; + // $FlowFixMe + getImportRuleTag().insertRules(id + '-import', importRules); + } + }; + + var removeRules = function removeRules(id) { + var marker = markers[id]; + if (marker === undefined) return; + + /* create new empty text node and replace the current one */ + var newMarker = makeTextNode(el.ownerDocument, id); + el.replaceChild(newMarker, marker); + markers[id] = newMarker; + resetIdNames(names, id); + + if (extractImport && usedImportRuleTag) { + // $FlowFixMe + getImportRuleTag().removeRules(id + '-import'); + } + }; + + var css = function css() { + var str = ''; + + // eslint-disable-next-line guard-for-in + for (var id in markers) { + str += markers[id].data; + } + + return str; + }; + + return { + clone: function clone() { + throw new StyledComponentsError(5); + }, + + css: css, + getIds: getIdsFromMarkersFactory(markers), + hasNameForId: hasNameForId(names), + insertMarker: insertMarker, + insertRules: insertRules, + removeRules: removeRules, + sealed: false, + styleTag: el, + toElement: wrapAsElement(css, names), + toHTML: wrapAsHtmlTag(css, names) + }; +}; + +var makeServerTag = function makeServerTag(namesArg, markersArg) { + var names = namesArg === undefined ? Object.create(null) : namesArg; + var markers = markersArg === undefined ? Object.create(null) : markersArg; + + var insertMarker = function insertMarker(id) { + var prev = markers[id]; + if (prev !== undefined) { + return prev; + } + + return markers[id] = ['']; + }; + + var insertRules = function insertRules(id, cssRules, name) { + var marker = insertMarker(id); + marker[0] += cssRules.join(' '); + addNameForId(names, id, name); + }; + + var removeRules = function removeRules(id) { + var marker = markers[id]; + if (marker === undefined) return; + marker[0] = ''; + resetIdNames(names, id); + }; + + var css = function css() { + var str = ''; + // eslint-disable-next-line guard-for-in + for (var id in markers) { + var cssForId = markers[id][0]; + if (cssForId) { + str += makeTextMarker(id) + cssForId; + } + } + return str; + }; + + var clone = function clone() { + var namesClone = cloneNames(names); + var markersClone = Object.create(null); + + // eslint-disable-next-line guard-for-in + for (var id in markers) { + markersClone[id] = [markers[id][0]]; + } + + return makeServerTag(namesClone, markersClone); + }; + + var tag = { + clone: clone, + css: css, + getIds: getIdsFromMarkersFactory(markers), + hasNameForId: hasNameForId(names), + insertMarker: insertMarker, + insertRules: insertRules, + removeRules: removeRules, + sealed: false, + styleTag: null, + toElement: wrapAsElement(css, names), + toHTML: wrapAsHtmlTag(css, names) + }; + + return tag; +}; + +var makeTag = function makeTag(target, tagEl, forceServer, insertBefore, getImportRuleTag) { + if (IS_BROWSER && !forceServer) { + var el = makeStyleTag(target, tagEl, insertBefore); + + if (DISABLE_SPEEDY) { + return makeBrowserTag(el, getImportRuleTag); + } else { + return makeSpeedyTag(el, getImportRuleTag); + } + } + + return makeServerTag(); +}; + +var rehydrate = function rehydrate(tag, els, extracted) { + /* add all extracted components to the new tag */ + for (var i = 0, len = extracted.length; i < len; i += 1) { + var _extracted$i = extracted[i], + componentId = _extracted$i.componentId, + cssFromDOM = _extracted$i.cssFromDOM; + + var cssRules = splitByRules(cssFromDOM); + tag.insertRules(componentId, cssRules); + } + + /* remove old HTMLStyleElements, since they have been rehydrated */ + for (var _i = 0, _len = els.length; _i < _len; _i += 1) { + var el = els[_i]; + if (el.parentNode) { + el.parentNode.removeChild(el); + } + } +}; + +// + +var SPLIT_REGEX = /\s+/; + +/* determine the maximum number of components before tags are sharded */ +var MAX_SIZE = void 0; +if (IS_BROWSER) { + /* in speedy mode we can keep a lot more rules in a sheet before a slowdown can be expected */ + MAX_SIZE = DISABLE_SPEEDY ? 40 : 1000; +} else { + /* for servers we do not need to shard at all */ + MAX_SIZE = -1; +} + +var sheetRunningId = 0; +var master = void 0; + +var StyleSheet = function () { + + /* a map from ids to tags */ + + /* deferred rules for a given id */ + + /* this is used for not reinjecting rules via hasNameForId() */ + + /* when rules for an id are removed using remove() we have to ignore rehydratedNames for it */ + + /* a list of tags belonging to this StyleSheet */ + + /* a tag for import rules */ + + /* current capacity until a new tag must be created */ + + /* children (aka clones) of this StyleSheet inheriting all and future injections */ + + function StyleSheet() { + var _this = this; + + var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : IS_BROWSER ? document.head : null; + var forceServer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + classCallCheck(this, StyleSheet); + + this.getImportRuleTag = function () { + var importRuleTag = _this.importRuleTag; + + if (importRuleTag !== undefined) { + return importRuleTag; + } + + var firstTag = _this.tags[0]; + var insertBefore = true; + + return _this.importRuleTag = makeTag(_this.target, firstTag ? firstTag.styleTag : null, _this.forceServer, insertBefore); + }; + + sheetRunningId += 1; + this.id = sheetRunningId; + this.forceServer = forceServer; + this.target = forceServer ? null : target; + this.tagMap = {}; + this.deferred = {}; + this.rehydratedNames = {}; + this.ignoreRehydratedNames = {}; + this.tags = []; + this.capacity = 1; + this.clones = []; + } + + /* rehydrate all SSR'd style tags */ + + + StyleSheet.prototype.rehydrate = function rehydrate$$1() { + if (!IS_BROWSER || this.forceServer) return this; + + var els = []; + var extracted = []; + var isStreamed = false; + + /* retrieve all of our SSR style elements from the DOM */ + var nodes = document.querySelectorAll('style[' + SC_ATTR + '][' + SC_VERSION_ATTR + '="' + "4.4.1" + '"]'); + + var nodesSize = nodes.length; + + /* abort rehydration if no previous style tags were found */ + if (!nodesSize) return this; + + for (var i = 0; i < nodesSize; i += 1) { + var el = nodes[i]; + + /* check if style tag is a streamed tag */ + if (!isStreamed) isStreamed = !!el.getAttribute(SC_STREAM_ATTR); + + /* retrieve all component names */ + var elNames = (el.getAttribute(SC_ATTR) || '').trim().split(SPLIT_REGEX); + var elNamesSize = elNames.length; + for (var j = 0, name; j < elNamesSize; j += 1) { + name = elNames[j]; + /* add rehydrated name to sheet to avoid re-adding styles */ + this.rehydratedNames[name] = true; + } + + /* extract all components and their CSS */ + extracted.push.apply(extracted, extractComps(el.textContent)); + + /* store original HTMLStyleElement */ + els.push(el); + } + + /* abort rehydration if nothing was extracted */ + var extractedSize = extracted.length; + if (!extractedSize) return this; + + /* create a tag to be used for rehydration */ + var tag = this.makeTag(null); + + rehydrate(tag, els, extracted); + + /* reset capacity and adjust MAX_SIZE by the initial size of the rehydration */ + this.capacity = Math.max(1, MAX_SIZE - extractedSize); + this.tags.push(tag); + + /* retrieve all component ids */ + for (var _j = 0; _j < extractedSize; _j += 1) { + this.tagMap[extracted[_j].componentId] = tag; + } + + return this; + }; + + /* retrieve a "master" instance of StyleSheet which is typically used when no other is available + * The master StyleSheet is targeted by createGlobalStyle, keyframes, and components outside of any + * StyleSheetManager's context */ + + + /* reset the internal "master" instance */ + StyleSheet.reset = function reset() { + var forceServer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + master = new StyleSheet(undefined, forceServer).rehydrate(); + }; + + /* adds "children" to the StyleSheet that inherit all of the parents' rules + * while their own rules do not affect the parent */ + + + StyleSheet.prototype.clone = function clone() { + var sheet = new StyleSheet(this.target, this.forceServer); + + /* add to clone array */ + this.clones.push(sheet); + + /* clone all tags */ + sheet.tags = this.tags.map(function (tag) { + var ids = tag.getIds(); + var newTag = tag.clone(); + + /* reconstruct tagMap */ + for (var i = 0; i < ids.length; i += 1) { + sheet.tagMap[ids[i]] = newTag; + } + + return newTag; + }); + + /* clone other maps */ + sheet.rehydratedNames = _extends({}, this.rehydratedNames); + sheet.deferred = _extends({}, this.deferred); + + return sheet; + }; + + /* force StyleSheet to create a new tag on the next injection */ + + + StyleSheet.prototype.sealAllTags = function sealAllTags() { + this.capacity = 1; + + this.tags.forEach(function (tag) { + // eslint-disable-next-line no-param-reassign + tag.sealed = true; + }); + }; + + StyleSheet.prototype.makeTag = function makeTag$$1(tag) { + var lastEl = tag ? tag.styleTag : null; + var insertBefore = false; + + return makeTag(this.target, lastEl, this.forceServer, insertBefore, this.getImportRuleTag); + }; + + /* get a tag for a given componentId, assign the componentId to one, or shard */ + StyleSheet.prototype.getTagForId = function getTagForId(id) { + /* simply return a tag, when the componentId was already assigned one */ + var prev = this.tagMap[id]; + if (prev !== undefined && !prev.sealed) { + return prev; + } + + var tag = this.tags[this.tags.length - 1]; + + /* shard (create a new tag) if the tag is exhausted (See MAX_SIZE) */ + this.capacity -= 1; + + if (this.capacity === 0) { + this.capacity = MAX_SIZE; + tag = this.makeTag(tag); + this.tags.push(tag); + } + + return this.tagMap[id] = tag; + }; + + /* mainly for createGlobalStyle to check for its id */ + + + StyleSheet.prototype.hasId = function hasId(id) { + return this.tagMap[id] !== undefined; + }; + + /* caching layer checking id+name to already have a corresponding tag and injected rules */ + + + StyleSheet.prototype.hasNameForId = function hasNameForId(id, name) { + /* exception for rehydrated names which are checked separately */ + if (this.ignoreRehydratedNames[id] === undefined && this.rehydratedNames[name]) { + return true; + } + + var tag = this.tagMap[id]; + return tag !== undefined && tag.hasNameForId(id, name); + }; + + /* registers a componentId and registers it on its tag */ + + + StyleSheet.prototype.deferredInject = function deferredInject(id, cssRules) { + /* don't inject when the id is already registered */ + if (this.tagMap[id] !== undefined) return; + + var clones = this.clones; + + for (var i = 0; i < clones.length; i += 1) { + clones[i].deferredInject(id, cssRules); + } + + this.getTagForId(id).insertMarker(id); + this.deferred[id] = cssRules; + }; + + /* injects rules for a given id with a name that will need to be cached */ + + + StyleSheet.prototype.inject = function inject(id, cssRules, name) { + var clones = this.clones; + + + for (var i = 0; i < clones.length; i += 1) { + clones[i].inject(id, cssRules, name); + } + + var tag = this.getTagForId(id); + + /* add deferred rules for component */ + if (this.deferred[id] !== undefined) { + // Combine passed cssRules with previously deferred CSS rules + // NOTE: We cannot mutate the deferred array itself as all clones + // do the same (see clones[i].inject) + var rules = this.deferred[id].concat(cssRules); + tag.insertRules(id, rules, name); + + this.deferred[id] = undefined; + } else { + tag.insertRules(id, cssRules, name); + } + }; + + /* removes all rules for a given id, which doesn't remove its marker but resets it */ + + + StyleSheet.prototype.remove = function remove(id) { + var tag = this.tagMap[id]; + if (tag === undefined) return; + + var clones = this.clones; + + for (var i = 0; i < clones.length; i += 1) { + clones[i].remove(id); + } + + /* remove all rules from the tag */ + tag.removeRules(id); + + /* ignore possible rehydrated names */ + this.ignoreRehydratedNames[id] = true; + + /* delete possible deferred rules */ + this.deferred[id] = undefined; + }; + + StyleSheet.prototype.toHTML = function toHTML() { + return this.tags.map(function (tag) { + return tag.toHTML(); + }).join(''); + }; + + StyleSheet.prototype.toReactElements = function toReactElements() { + var id = this.id; + + + return this.tags.map(function (tag, i) { + var key = 'sc-' + id + '-' + i; + return (0,react__WEBPACK_IMPORTED_MODULE_2__.cloneElement)(tag.toElement(), { key: key }); + }); + }; + + createClass(StyleSheet, null, [{ + key: 'master', + get: function get$$1() { + return master || (master = new StyleSheet().rehydrate()); + } + + /* NOTE: This is just for backwards-compatibility with jest-styled-components */ + + }, { + key: 'instance', + get: function get$$1() { + return StyleSheet.master; + } + }]); + return StyleSheet; +}(); + +// + +var Keyframes = function () { + function Keyframes(name, rules) { + var _this = this; + + classCallCheck(this, Keyframes); + + this.inject = function (styleSheet) { + if (!styleSheet.hasNameForId(_this.id, _this.name)) { + styleSheet.inject(_this.id, _this.rules, _this.name); + } + }; + + this.toString = function () { + throw new StyledComponentsError(12, String(_this.name)); + }; + + this.name = name; + this.rules = rules; + + this.id = 'sc-keyframes-' + name; + } + + Keyframes.prototype.getName = function getName() { + return this.name; + }; + + return Keyframes; +}(); + +// + +/** + * inlined version of + * https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/hyphenateStyleName.js + */ + +var uppercasePattern = /([A-Z])/g; +var msPattern = /^ms-/; + +/** + * Hyphenates a camelcased CSS property name, for example: + * + * > hyphenateStyleName('backgroundColor') + * < "background-color" + * > hyphenateStyleName('MozTransition') + * < "-moz-transition" + * > hyphenateStyleName('msTransition') + * < "-ms-transition" + * + * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix + * is converted to `-ms-`. + * + * @param {string} string + * @return {string} + */ +function hyphenateStyleName(string) { + return string.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-'); +} + +// + +// Taken from https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/dangerousStyleValue.js +function addUnitIfNeeded(name, value) { + // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133 + // $FlowFixMe + if (value == null || typeof value === 'boolean' || value === '') { + return ''; + } + + if (typeof value === 'number' && value !== 0 && !(name in _emotion_unitless__WEBPACK_IMPORTED_MODULE_3__["default"])) { + return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers + } + + return String(value).trim(); +} + +// + +/** + * It's falsish not falsy because 0 is allowed. + */ +var isFalsish = function isFalsish(chunk) { + return chunk === undefined || chunk === null || chunk === false || chunk === ''; +}; + +var objToCssArray = function objToCssArray(obj, prevKey) { + var rules = []; + var keys = Object.keys(obj); + + keys.forEach(function (key) { + if (!isFalsish(obj[key])) { + if (isPlainObject(obj[key])) { + rules.push.apply(rules, objToCssArray(obj[key], key)); + + return rules; + } else if (isFunction(obj[key])) { + rules.push(hyphenateStyleName(key) + ':', obj[key], ';'); + + return rules; + } + rules.push(hyphenateStyleName(key) + ': ' + addUnitIfNeeded(key, obj[key]) + ';'); + } + return rules; + }); + + return prevKey ? [prevKey + ' {'].concat(rules, ['}']) : rules; +}; + +function flatten(chunk, executionContext, styleSheet) { + if (Array.isArray(chunk)) { + var ruleSet = []; + + for (var i = 0, len = chunk.length, result; i < len; i += 1) { + result = flatten(chunk[i], executionContext, styleSheet); + + if (result === null) continue;else if (Array.isArray(result)) ruleSet.push.apply(ruleSet, result);else ruleSet.push(result); + } + + return ruleSet; + } + + if (isFalsish(chunk)) { + return null; + } + + /* Handle other components */ + if (isStyledComponent(chunk)) { + return '.' + chunk.styledComponentId; + } + + /* Either execute or defer the function */ + if (isFunction(chunk)) { + if (isStatelessFunction(chunk) && executionContext) { + var _result = chunk(executionContext); + + if ( true && (0,react_is__WEBPACK_IMPORTED_MODULE_4__.isElement)(_result)) { + // eslint-disable-next-line no-console + console.warn(getComponentName(chunk) + ' is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.'); + } + + return flatten(_result, executionContext, styleSheet); + } else return chunk; + } + + if (chunk instanceof Keyframes) { + if (styleSheet) { + chunk.inject(styleSheet); + return chunk.getName(); + } else return chunk; + } + + /* Handle objects */ + return isPlainObject(chunk) ? objToCssArray(chunk) : chunk.toString(); +} + +// + +function css(styles) { + for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + interpolations[_key - 1] = arguments[_key]; + } + + if (isFunction(styles) || isPlainObject(styles)) { + // $FlowFixMe + return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations))); + } + + // $FlowFixMe + return flatten(interleave(styles, interpolations)); +} + +// + +function constructWithOptions(componentConstructor, tag) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT; + + if (!(0,react_is__WEBPACK_IMPORTED_MODULE_4__.isValidElementType)(tag)) { + throw new StyledComponentsError(1, String(tag)); + } + + /* This is callable directly as a template function */ + // $FlowFixMe: Not typed to avoid destructuring arguments + var templateFunction = function templateFunction() { + return componentConstructor(tag, options, css.apply(undefined, arguments)); + }; + + /* If config methods are called, wrap up a new template function and merge options */ + templateFunction.withConfig = function (config) { + return constructWithOptions(componentConstructor, tag, _extends({}, options, config)); + }; + + /* Modify/inject new props at runtime */ + templateFunction.attrs = function (attrs) { + return constructWithOptions(componentConstructor, tag, _extends({}, options, { + attrs: Array.prototype.concat(options.attrs, attrs).filter(Boolean) + })); + }; + + return templateFunction; +} + +// +// Source: https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js +function murmurhash(c) { + for (var e = c.length | 0, a = e | 0, d = 0, b; e >= 4;) { + b = c.charCodeAt(d) & 255 | (c.charCodeAt(++d) & 255) << 8 | (c.charCodeAt(++d) & 255) << 16 | (c.charCodeAt(++d) & 255) << 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), b ^= b >>> 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16) ^ b, e -= 4, ++d; + } + switch (e) { + case 3: + a ^= (c.charCodeAt(d + 2) & 255) << 16; + case 2: + a ^= (c.charCodeAt(d + 1) & 255) << 8; + case 1: + a ^= c.charCodeAt(d) & 255, a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16); + } + a ^= a >>> 13; + a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16); + return (a ^ a >>> 15) >>> 0; +} + +// +/* eslint-disable no-bitwise */ + +/* This is the "capacity" of our alphabet i.e. 2x26 for all letters plus their capitalised + * counterparts */ +var charsLength = 52; + +/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */ +var getAlphabeticChar = function getAlphabeticChar(code) { + return String.fromCharCode(code + (code > 25 ? 39 : 97)); +}; + +/* input a number, usually a hash and convert it to base-52 */ +function generateAlphabeticName(code) { + var name = ''; + var x = void 0; + + /* get a char and divide by alphabet-length */ + for (x = code; x > charsLength; x = Math.floor(x / charsLength)) { + name = getAlphabeticChar(x % charsLength) + name; + } + + return getAlphabeticChar(x % charsLength) + name; +} + +// + +function hasFunctionObjectKey(obj) { + // eslint-disable-next-line guard-for-in, no-restricted-syntax + for (var key in obj) { + if (isFunction(obj[key])) { + return true; + } + } + + return false; +} + +function isStaticRules(rules, attrs) { + for (var i = 0; i < rules.length; i += 1) { + var rule = rules[i]; + + // recursive case + if (Array.isArray(rule) && !isStaticRules(rule, attrs)) { + return false; + } else if (isFunction(rule) && !isStyledComponent(rule)) { + // functions are allowed to be static if they're just being + // used to get the classname of a nested styled component + return false; + } + } + + if (attrs.some(function (x) { + return isFunction(x) || hasFunctionObjectKey(x); + })) return false; + + return true; +} + +// + +/* combines hashStr (murmurhash) and nameGenerator for convenience */ +var hasher = function hasher(str) { + return generateAlphabeticName(murmurhash(str)); +}; + +/* + ComponentStyle is all the CSS-specific stuff, not + the React-specific stuff. + */ + +var ComponentStyle = function () { + function ComponentStyle(rules, attrs, componentId) { + classCallCheck(this, ComponentStyle); + + this.rules = rules; + this.isStatic = false && 0; + this.componentId = componentId; + + if (!StyleSheet.master.hasId(componentId)) { + StyleSheet.master.deferredInject(componentId, []); + } + } + + /* + * Flattens a rule set into valid CSS + * Hashes it, wraps the whole chunk in a .hash1234 {} + * Returns the hash to be injected on render() + * */ + + + ComponentStyle.prototype.generateAndInjectStyles = function generateAndInjectStyles(executionContext, styleSheet) { + var isStatic = this.isStatic, + componentId = this.componentId, + lastClassName = this.lastClassName; + + if (IS_BROWSER && isStatic && typeof lastClassName === 'string' && styleSheet.hasNameForId(componentId, lastClassName)) { + return lastClassName; + } + + var flatCSS = flatten(this.rules, executionContext, styleSheet); + var name = hasher(this.componentId + flatCSS.join('')); + if (!styleSheet.hasNameForId(componentId, name)) { + styleSheet.inject(this.componentId, stringifyRules(flatCSS, '.' + name, undefined, componentId), name); + } + + this.lastClassName = name; + return name; + }; + + ComponentStyle.generateName = function generateName(str) { + return hasher(str); + }; + + return ComponentStyle; +}(); + +// + +var LIMIT = 200; + +var createWarnTooManyClasses = (function (displayName) { + var generatedClasses = {}; + var warningSeen = false; + + return function (className) { + if (!warningSeen) { + generatedClasses[className] = true; + if (Object.keys(generatedClasses).length >= LIMIT) { + // Unable to find latestRule in test environment. + /* eslint-disable no-console, prefer-template */ + console.warn('Over ' + LIMIT + ' classes were generated for component ' + displayName + '. \n' + 'Consider using the attrs method, together with a style object for frequently changed styles.\n' + 'Example:\n' + ' const Component = styled.div.attrs(props => ({\n' + ' style: {\n' + ' background: props.background,\n' + ' },\n' + ' }))`width: 100%;`\n\n' + ' '); + warningSeen = true; + generatedClasses = {}; + } + } + }; +}); + +// + +var determineTheme = (function (props, fallbackTheme) { + var defaultProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT; + + // Props should take precedence over ThemeProvider, which should take precedence over + // defaultProps, but React automatically puts defaultProps on props. + + /* eslint-disable react/prop-types, flowtype-errors/show-errors */ + var isDefaultTheme = defaultProps ? props.theme === defaultProps.theme : false; + var theme = props.theme && !isDefaultTheme ? props.theme : fallbackTheme || defaultProps.theme; + /* eslint-enable */ + + return theme; +}); + +// +var escapeRegex = /[[\].#*$><+~=|^:(),"'`-]+/g; +var dashesAtEnds = /(^-|-$)/g; + +/** + * TODO: Explore using CSS.escape when it becomes more available + * in evergreen browsers. + */ +function escape(str) { + return str + // Replace all possible CSS selectors + .replace(escapeRegex, '-') + + // Remove extraneous hyphens at the start and end + .replace(dashesAtEnds, ''); +} + +// + +function isTag(target) { + return typeof target === 'string' && ( true ? target.charAt(0) === target.charAt(0).toLowerCase() : 0); +} + +// + +function generateDisplayName(target) { + // $FlowFixMe + return isTag(target) ? 'styled.' + target : 'Styled(' + getComponentName(target) + ')'; +} + +var _TYPE_STATICS; + +var REACT_STATICS = { + childContextTypes: true, + contextTypes: true, + defaultProps: true, + displayName: true, + getDerivedStateFromProps: true, + propTypes: true, + type: true +}; + +var KNOWN_STATICS = { + name: true, + length: true, + prototype: true, + caller: true, + callee: true, + arguments: true, + arity: true +}; + +var TYPE_STATICS = (_TYPE_STATICS = {}, _TYPE_STATICS[react_is__WEBPACK_IMPORTED_MODULE_4__.ForwardRef] = { + $$typeof: true, + render: true +}, _TYPE_STATICS); + +var defineProperty$1 = Object.defineProperty, + getOwnPropertyNames = Object.getOwnPropertyNames, + _Object$getOwnPropert = Object.getOwnPropertySymbols, + getOwnPropertySymbols = _Object$getOwnPropert === undefined ? function () { + return []; +} : _Object$getOwnPropert, + getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor, + getPrototypeOf = Object.getPrototypeOf, + objectPrototype = Object.prototype; +var arrayPrototype = Array.prototype; + + +function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { + if (typeof sourceComponent !== 'string') { + // don't hoist over string (html) components + + var inheritedComponent = getPrototypeOf(sourceComponent); + + if (inheritedComponent && inheritedComponent !== objectPrototype) { + hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); + } + + var keys = arrayPrototype.concat(getOwnPropertyNames(sourceComponent), + // $FlowFixMe + getOwnPropertySymbols(sourceComponent)); + + var targetStatics = TYPE_STATICS[targetComponent.$$typeof] || REACT_STATICS; + + var sourceStatics = TYPE_STATICS[sourceComponent.$$typeof] || REACT_STATICS; + + var i = keys.length; + var descriptor = void 0; + var key = void 0; + + // eslint-disable-next-line no-plusplus + while (i--) { + key = keys[i]; + + if ( + // $FlowFixMe + !KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && + // $FlowFixMe + !(targetStatics && targetStatics[key])) { + descriptor = getOwnPropertyDescriptor(sourceComponent, key); + + if (descriptor) { + try { + // Avoid failures from read-only properties + defineProperty$1(targetComponent, key, descriptor); + } catch (e) { + /* fail silently */ + } + } + } + } + + return targetComponent; + } + + return targetComponent; +} + +// +function isDerivedReactComponent(fn) { + return !!(fn && fn.prototype && fn.prototype.isReactComponent); +} + +// +// Helper to call a given function, only once +var once = (function (cb) { + var called = false; + + return function () { + if (!called) { + called = true; + cb.apply(undefined, arguments); + } + }; +}); + +// + +var ThemeContext = (0,react__WEBPACK_IMPORTED_MODULE_2__.createContext)(); + +var ThemeConsumer = ThemeContext.Consumer; + +/** + * Provide a theme to an entire react component tree via context + */ + +var ThemeProvider = function (_Component) { + inherits(ThemeProvider, _Component); + + function ThemeProvider(props) { + classCallCheck(this, ThemeProvider); + + var _this = possibleConstructorReturn(this, _Component.call(this, props)); + + _this.getContext = (0,memoize_one__WEBPACK_IMPORTED_MODULE_7__["default"])(_this.getContext.bind(_this)); + _this.renderInner = _this.renderInner.bind(_this); + return _this; + } + + ThemeProvider.prototype.render = function render() { + if (!this.props.children) return null; + + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + ThemeContext.Consumer, + null, + this.renderInner + ); + }; + + ThemeProvider.prototype.renderInner = function renderInner(outerTheme) { + var context = this.getContext(this.props.theme, outerTheme); + + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + ThemeContext.Provider, + { value: context }, + this.props.children + ); + }; + + /** + * Get the theme from the props, supporting both (outerTheme) => {} + * as well as object notation + */ + + + ThemeProvider.prototype.getTheme = function getTheme(theme, outerTheme) { + if (isFunction(theme)) { + var mergedTheme = theme(outerTheme); + + if ( true && (mergedTheme === null || Array.isArray(mergedTheme) || (typeof mergedTheme === 'undefined' ? 'undefined' : _typeof(mergedTheme)) !== 'object')) { + throw new StyledComponentsError(7); + } + + return mergedTheme; + } + + if (theme === null || Array.isArray(theme) || (typeof theme === 'undefined' ? 'undefined' : _typeof(theme)) !== 'object') { + throw new StyledComponentsError(8); + } + + return _extends({}, outerTheme, theme); + }; + + ThemeProvider.prototype.getContext = function getContext(theme, outerTheme) { + return this.getTheme(theme, outerTheme); + }; + + return ThemeProvider; +}(react__WEBPACK_IMPORTED_MODULE_2__.Component); + +// + +var CLOSING_TAG_R = /^\s*<\/[a-z]/i; + +var ServerStyleSheet = function () { + function ServerStyleSheet() { + classCallCheck(this, ServerStyleSheet); + + /* The master sheet might be reset, so keep a reference here */ + this.masterSheet = StyleSheet.master; + this.instance = this.masterSheet.clone(); + this.sealed = false; + } + + /** + * Mark the ServerStyleSheet as being fully emitted and manually GC it from the + * StyleSheet singleton. + */ + + + ServerStyleSheet.prototype.seal = function seal() { + if (!this.sealed) { + /* Remove sealed StyleSheets from the master sheet */ + var index = this.masterSheet.clones.indexOf(this.instance); + this.masterSheet.clones.splice(index, 1); + this.sealed = true; + } + }; + + ServerStyleSheet.prototype.collectStyles = function collectStyles(children) { + if (this.sealed) { + throw new StyledComponentsError(2); + } + + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + StyleSheetManager, + { sheet: this.instance }, + children + ); + }; + + ServerStyleSheet.prototype.getStyleTags = function getStyleTags() { + this.seal(); + return this.instance.toHTML(); + }; + + ServerStyleSheet.prototype.getStyleElement = function getStyleElement() { + this.seal(); + return this.instance.toReactElements(); + }; + + ServerStyleSheet.prototype.interleaveWithNodeStream = function interleaveWithNodeStream(readableStream) { + var _this = this; + + { + throw new StyledComponentsError(3); + } + + /* the tag index keeps track of which tags have already been emitted */ + var instance = this.instance; + + var instanceTagIndex = 0; + + var streamAttr = SC_STREAM_ATTR + '="true"'; + + var transformer = new stream.Transform({ + transform: function appendStyleChunks(chunk, /* encoding */_, callback) { + var tags = instance.tags; + + var html = ''; + + /* retrieve html for each new style tag */ + for (; instanceTagIndex < tags.length; instanceTagIndex += 1) { + var tag = tags[instanceTagIndex]; + html += tag.toHTML(streamAttr); + } + + /* force our StyleSheets to emit entirely new tags */ + instance.sealAllTags(); + + var renderedHtml = chunk.toString(); + + /* prepend style html to chunk, unless the start of the chunk is a closing tag in which case append right after that */ + if (CLOSING_TAG_R.test(renderedHtml)) { + var endOfClosingTag = renderedHtml.indexOf('>'); + + this.push(renderedHtml.slice(0, endOfClosingTag + 1) + html + renderedHtml.slice(endOfClosingTag + 1)); + } else this.push(html + renderedHtml); + + callback(); + } + }); + + readableStream.on('end', function () { + return _this.seal(); + }); + + readableStream.on('error', function (err) { + _this.seal(); + + // forward the error to the transform stream + transformer.emit('error', err); + }); + + return readableStream.pipe(transformer); + }; + + return ServerStyleSheet; +}(); + +// + +var StyleSheetContext = (0,react__WEBPACK_IMPORTED_MODULE_2__.createContext)(); +var StyleSheetConsumer = StyleSheetContext.Consumer; + +var StyleSheetManager = function (_Component) { + inherits(StyleSheetManager, _Component); + + function StyleSheetManager(props) { + classCallCheck(this, StyleSheetManager); + + var _this = possibleConstructorReturn(this, _Component.call(this, props)); + + _this.getContext = (0,memoize_one__WEBPACK_IMPORTED_MODULE_7__["default"])(_this.getContext); + return _this; + } + + StyleSheetManager.prototype.getContext = function getContext(sheet, target) { + if (sheet) { + return sheet; + } else if (target) { + return new StyleSheet(target); + } else { + throw new StyledComponentsError(4); + } + }; + + StyleSheetManager.prototype.render = function render() { + var _props = this.props, + children = _props.children, + sheet = _props.sheet, + target = _props.target; + + + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + StyleSheetContext.Provider, + { value: this.getContext(sheet, target) }, + true ? react__WEBPACK_IMPORTED_MODULE_2___default().Children.only(children) : 0 + ); + }; + + return StyleSheetManager; +}(react__WEBPACK_IMPORTED_MODULE_2__.Component); + true ? StyleSheetManager.propTypes = { + sheet: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_8___default().instanceOf(StyleSheet), prop_types__WEBPACK_IMPORTED_MODULE_8___default().instanceOf(ServerStyleSheet)]), + + target: prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape({ + appendChild: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func.isRequired) + }) +} : 0; + +// + +var identifiers = {}; + +/* We depend on components having unique IDs */ +function generateId(_ComponentStyle, _displayName, parentComponentId) { + var displayName = typeof _displayName !== 'string' ? 'sc' : escape(_displayName); + + /** + * This ensures uniqueness if two components happen to share + * the same displayName. + */ + var nr = (identifiers[displayName] || 0) + 1; + identifiers[displayName] = nr; + + var componentId = displayName + '-' + _ComponentStyle.generateName(displayName + nr); + + return parentComponentId ? parentComponentId + '-' + componentId : componentId; +} + +// $FlowFixMe + +var StyledComponent = function (_Component) { + inherits(StyledComponent, _Component); + + function StyledComponent() { + classCallCheck(this, StyledComponent); + + var _this = possibleConstructorReturn(this, _Component.call(this)); + + _this.attrs = {}; + + _this.renderOuter = _this.renderOuter.bind(_this); + _this.renderInner = _this.renderInner.bind(_this); + + if (true) { + _this.warnInnerRef = once(function (displayName) { + return ( + // eslint-disable-next-line no-console + console.warn('The "innerRef" API has been removed in styled-components v4 in favor of React 16 ref forwarding, use "ref" instead like a typical component. "innerRef" was detected on component "' + displayName + '".') + ); + }); + + _this.warnAttrsFnObjectKeyDeprecated = once(function (key, displayName) { + return ( + // eslint-disable-next-line no-console + console.warn('Functions as object-form attrs({}) keys are now deprecated and will be removed in a future version of styled-components. Switch to the new attrs(props => ({})) syntax instead for easier and more powerful composition. The attrs key in question is "' + key + '" on component "' + displayName + '".', '\n ' + new Error().stack) + ); + }); + + _this.warnNonStyledComponentAttrsObjectKey = once(function (key, displayName) { + return ( + // eslint-disable-next-line no-console + console.warn('It looks like you\'ve used a non styled-component as the value for the "' + key + '" prop in an object-form attrs constructor of "' + displayName + '".\n' + 'You should use the new function-form attrs constructor which avoids this issue: attrs(props => ({ yourStuff }))\n' + "To continue using the deprecated object syntax, you'll need to wrap your component prop in a function to make it available inside the styled component (you'll still get the deprecation warning though.)\n" + ('For example, { ' + key + ': () => InnerComponent } instead of { ' + key + ': InnerComponent }')) + ); + }); + } + return _this; + } + + StyledComponent.prototype.render = function render() { + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + StyleSheetConsumer, + null, + this.renderOuter + ); + }; + + StyledComponent.prototype.renderOuter = function renderOuter() { + var styleSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : StyleSheet.master; + + this.styleSheet = styleSheet; + + // No need to subscribe a static component to theme changes, it won't change anything + if (this.props.forwardedComponent.componentStyle.isStatic) return this.renderInner(); + + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + ThemeConsumer, + null, + this.renderInner + ); + }; + + StyledComponent.prototype.renderInner = function renderInner(theme) { + var _props$forwardedCompo = this.props.forwardedComponent, + componentStyle = _props$forwardedCompo.componentStyle, + defaultProps = _props$forwardedCompo.defaultProps, + displayName = _props$forwardedCompo.displayName, + foldedComponentIds = _props$forwardedCompo.foldedComponentIds, + styledComponentId = _props$forwardedCompo.styledComponentId, + target = _props$forwardedCompo.target; + + + var generatedClassName = void 0; + if (componentStyle.isStatic) { + generatedClassName = this.generateAndInjectStyles(EMPTY_OBJECT, this.props); + } else { + generatedClassName = this.generateAndInjectStyles(determineTheme(this.props, theme, defaultProps) || EMPTY_OBJECT, this.props); + } + + var elementToBeCreated = this.props.as || this.attrs.as || target; + var isTargetTag = isTag(elementToBeCreated); + + var propsForElement = {}; + var computedProps = _extends({}, this.props, this.attrs); + + var key = void 0; + // eslint-disable-next-line guard-for-in + for (key in computedProps) { + if ( true && key === 'innerRef' && isTargetTag) { + this.warnInnerRef(displayName); + } + + if (key === 'forwardedComponent' || key === 'as') { + continue; + } else if (key === 'forwardedRef') propsForElement.ref = computedProps[key];else if (key === 'forwardedAs') propsForElement.as = computedProps[key];else if (!isTargetTag || (0,_emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_5__["default"])(key)) { + // Don't pass through non HTML tags through to HTML elements + propsForElement[key] = computedProps[key]; + } + } + + if (this.props.style && this.attrs.style) { + propsForElement.style = _extends({}, this.attrs.style, this.props.style); + } + + propsForElement.className = Array.prototype.concat(foldedComponentIds, styledComponentId, generatedClassName !== styledComponentId ? generatedClassName : null, this.props.className, this.attrs.className).filter(Boolean).join(' '); + + return (0,react__WEBPACK_IMPORTED_MODULE_2__.createElement)(elementToBeCreated, propsForElement); + }; + + StyledComponent.prototype.buildExecutionContext = function buildExecutionContext(theme, props, attrs) { + var _this2 = this; + + var context = _extends({}, props, { theme: theme }); + + if (!attrs.length) return context; + + this.attrs = {}; + + attrs.forEach(function (attrDef) { + var resolvedAttrDef = attrDef; + var attrDefWasFn = false; + var attr = void 0; + var key = void 0; + + if (isFunction(resolvedAttrDef)) { + // $FlowFixMe + resolvedAttrDef = resolvedAttrDef(context); + attrDefWasFn = true; + } + + /* eslint-disable guard-for-in */ + // $FlowFixMe + for (key in resolvedAttrDef) { + attr = resolvedAttrDef[key]; + + if (!attrDefWasFn) { + if (isFunction(attr) && !isDerivedReactComponent(attr) && !isStyledComponent(attr)) { + if (true) { + _this2.warnAttrsFnObjectKeyDeprecated(key, props.forwardedComponent.displayName); + } + + attr = attr(context); + + if ( true && react__WEBPACK_IMPORTED_MODULE_2___default().isValidElement(attr)) { + _this2.warnNonStyledComponentAttrsObjectKey(key, props.forwardedComponent.displayName); + } + } + } + + _this2.attrs[key] = attr; + context[key] = attr; + } + /* eslint-enable */ + }); + + return context; + }; + + StyledComponent.prototype.generateAndInjectStyles = function generateAndInjectStyles(theme, props) { + var _props$forwardedCompo2 = props.forwardedComponent, + attrs = _props$forwardedCompo2.attrs, + componentStyle = _props$forwardedCompo2.componentStyle, + warnTooManyClasses = _props$forwardedCompo2.warnTooManyClasses; + + // statically styled-components don't need to build an execution context object, + // and shouldn't be increasing the number of class names + + if (componentStyle.isStatic && !attrs.length) { + return componentStyle.generateAndInjectStyles(EMPTY_OBJECT, this.styleSheet); + } + + var className = componentStyle.generateAndInjectStyles(this.buildExecutionContext(theme, props, attrs), this.styleSheet); + + if ( true && warnTooManyClasses) warnTooManyClasses(className); + + return className; + }; + + return StyledComponent; +}(react__WEBPACK_IMPORTED_MODULE_2__.Component); + +function createStyledComponent(target, options, rules) { + var isTargetStyledComp = isStyledComponent(target); + var isClass = !isTag(target); + + var _options$displayName = options.displayName, + displayName = _options$displayName === undefined ? generateDisplayName(target) : _options$displayName, + _options$componentId = options.componentId, + componentId = _options$componentId === undefined ? generateId(ComponentStyle, options.displayName, options.parentComponentId) : _options$componentId, + _options$ParentCompon = options.ParentComponent, + ParentComponent = _options$ParentCompon === undefined ? StyledComponent : _options$ParentCompon, + _options$attrs = options.attrs, + attrs = _options$attrs === undefined ? EMPTY_ARRAY : _options$attrs; + + + var styledComponentId = options.displayName && options.componentId ? escape(options.displayName) + '-' + options.componentId : options.componentId || componentId; + + // fold the underlying StyledComponent attrs up (implicit extend) + var finalAttrs = + // $FlowFixMe + isTargetStyledComp && target.attrs ? Array.prototype.concat(target.attrs, attrs).filter(Boolean) : attrs; + + var componentStyle = new ComponentStyle(isTargetStyledComp ? // fold the underlying StyledComponent rules up (implicit extend) + // $FlowFixMe + target.componentStyle.rules.concat(rules) : rules, finalAttrs, styledComponentId); + + /** + * forwardRef creates a new interim component, which we'll take advantage of + * instead of extending ParentComponent to create _another_ interim class + */ + var WrappedStyledComponent = void 0; + var forwardRef = function forwardRef(props, ref) { + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ParentComponent, _extends({}, props, { forwardedComponent: WrappedStyledComponent, forwardedRef: ref })); + }; + forwardRef.displayName = displayName; + WrappedStyledComponent = react__WEBPACK_IMPORTED_MODULE_2___default().forwardRef(forwardRef); + WrappedStyledComponent.displayName = displayName; + + // $FlowFixMe + WrappedStyledComponent.attrs = finalAttrs; + // $FlowFixMe + WrappedStyledComponent.componentStyle = componentStyle; + + // $FlowFixMe + WrappedStyledComponent.foldedComponentIds = isTargetStyledComp ? // $FlowFixMe + Array.prototype.concat(target.foldedComponentIds, target.styledComponentId) : EMPTY_ARRAY; + + // $FlowFixMe + WrappedStyledComponent.styledComponentId = styledComponentId; + + // fold the underlying StyledComponent target up since we folded the styles + // $FlowFixMe + WrappedStyledComponent.target = isTargetStyledComp ? target.target : target; + + // $FlowFixMe + WrappedStyledComponent.withComponent = function withComponent(tag) { + var previousComponentId = options.componentId, + optionsToCopy = objectWithoutProperties(options, ['componentId']); + + + var newComponentId = previousComponentId && previousComponentId + '-' + (isTag(tag) ? tag : escape(getComponentName(tag))); + + var newOptions = _extends({}, optionsToCopy, { + attrs: finalAttrs, + componentId: newComponentId, + ParentComponent: ParentComponent + }); + + return createStyledComponent(tag, newOptions, rules); + }; + + // $FlowFixMe + Object.defineProperty(WrappedStyledComponent, 'defaultProps', { + get: function get$$1() { + return this._foldedDefaultProps; + }, + set: function set$$1(obj) { + // $FlowFixMe + this._foldedDefaultProps = isTargetStyledComp ? (0,merge_anything__WEBPACK_IMPORTED_MODULE_6__["default"])(target.defaultProps, obj) : obj; + } + }); + + if (true) { + // $FlowFixMe + WrappedStyledComponent.warnTooManyClasses = createWarnTooManyClasses(displayName); + } + + // $FlowFixMe + WrappedStyledComponent.toString = function () { + return '.' + WrappedStyledComponent.styledComponentId; + }; + + if (isClass) { + hoistNonReactStatics(WrappedStyledComponent, target, { + // all SC-specific things should not be hoisted + attrs: true, + componentStyle: true, + displayName: true, + foldedComponentIds: true, + styledComponentId: true, + target: true, + withComponent: true + }); + } + + return WrappedStyledComponent; +} + +// +// Thanks to ReactDOMFactories for this handy list! + +var domElements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', + +// SVG +'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'marker', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan']; + +// + +var styled = function styled(tag) { + return constructWithOptions(createStyledComponent, tag); +}; + +// Shorthands for all valid HTML Elements +domElements.forEach(function (domElement) { + styled[domElement] = styled(domElement); +}); + +// + +var GlobalStyle = function () { + function GlobalStyle(rules, componentId) { + classCallCheck(this, GlobalStyle); + + this.rules = rules; + this.componentId = componentId; + this.isStatic = isStaticRules(rules, EMPTY_ARRAY); + + if (!StyleSheet.master.hasId(componentId)) { + StyleSheet.master.deferredInject(componentId, []); + } + } + + GlobalStyle.prototype.createStyles = function createStyles(executionContext, styleSheet) { + var flatCSS = flatten(this.rules, executionContext, styleSheet); + var css = stringifyRules(flatCSS, ''); + + styleSheet.inject(this.componentId, css); + }; + + GlobalStyle.prototype.removeStyles = function removeStyles(styleSheet) { + var componentId = this.componentId; + + if (styleSheet.hasId(componentId)) { + styleSheet.remove(componentId); + } + }; + + // TODO: overwrite in-place instead of remove+create? + + + GlobalStyle.prototype.renderStyles = function renderStyles(executionContext, styleSheet) { + this.removeStyles(styleSheet); + this.createStyles(executionContext, styleSheet); + }; + + return GlobalStyle; +}(); + +// + +// place our cache into shared context so it'll persist between HMRs +if (IS_BROWSER) { + window.scCGSHMRCache = {}; +} + +function createGlobalStyle(strings) { + for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + interpolations[_key - 1] = arguments[_key]; + } + + var rules = css.apply(undefined, [strings].concat(interpolations)); + var id = 'sc-global-' + murmurhash(JSON.stringify(rules)); + var style = new GlobalStyle(rules, id); + + var GlobalStyleComponent = function (_React$Component) { + inherits(GlobalStyleComponent, _React$Component); + + function GlobalStyleComponent(props) { + classCallCheck(this, GlobalStyleComponent); + + var _this = possibleConstructorReturn(this, _React$Component.call(this, props)); + + var _this$constructor = _this.constructor, + globalStyle = _this$constructor.globalStyle, + styledComponentId = _this$constructor.styledComponentId; + + + if (IS_BROWSER) { + window.scCGSHMRCache[styledComponentId] = (window.scCGSHMRCache[styledComponentId] || 0) + 1; + } + + /** + * This fixes HMR compatibility. Don't ask me why, but this combination of + * caching the closure variables via statics and then persisting the statics in + * state works across HMR where no other combination did. ¯\_(ツ)_/¯ + */ + _this.state = { + globalStyle: globalStyle, + styledComponentId: styledComponentId + }; + return _this; + } + + GlobalStyleComponent.prototype.componentWillUnmount = function componentWillUnmount() { + if (window.scCGSHMRCache[this.state.styledComponentId]) { + window.scCGSHMRCache[this.state.styledComponentId] -= 1; + } + /** + * Depending on the order "render" is called this can cause the styles to be lost + * until the next render pass of the remaining instance, which may + * not be immediate. + */ + if (window.scCGSHMRCache[this.state.styledComponentId] === 0) { + this.state.globalStyle.removeStyles(this.styleSheet); + } + }; + + GlobalStyleComponent.prototype.render = function render() { + var _this2 = this; + + if ( true && react__WEBPACK_IMPORTED_MODULE_2___default().Children.count(this.props.children)) { + // eslint-disable-next-line no-console + console.warn('The global style component ' + this.state.styledComponentId + ' was given child JSX. createGlobalStyle does not render children.'); + } + + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + StyleSheetConsumer, + null, + function (styleSheet) { + _this2.styleSheet = styleSheet || StyleSheet.master; + + var globalStyle = _this2.state.globalStyle; + + + if (globalStyle.isStatic) { + globalStyle.renderStyles(STATIC_EXECUTION_CONTEXT, _this2.styleSheet); + + return null; + } else { + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + ThemeConsumer, + null, + function (theme) { + // $FlowFixMe + var defaultProps = _this2.constructor.defaultProps; + + + var context = _extends({}, _this2.props); + + if (typeof theme !== 'undefined') { + context.theme = determineTheme(_this2.props, theme, defaultProps); + } + + globalStyle.renderStyles(context, _this2.styleSheet); + + return null; + } + ); + } + } + ); + }; + + return GlobalStyleComponent; + }((react__WEBPACK_IMPORTED_MODULE_2___default().Component)); + + GlobalStyleComponent.globalStyle = style; + GlobalStyleComponent.styledComponentId = id; + + + return GlobalStyleComponent; +} + +// + +var replaceWhitespace = function replaceWhitespace(str) { + return str.replace(/\s|\\n/g, ''); +}; + +function keyframes(strings) { + /* Warning if you've used keyframes on React Native */ + if ( true && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { + // eslint-disable-next-line no-console + console.warn('`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.'); + } + + for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + interpolations[_key - 1] = arguments[_key]; + } + + var rules = css.apply(undefined, [strings].concat(interpolations)); + + var name = generateAlphabeticName(murmurhash(replaceWhitespace(JSON.stringify(rules)))); + + return new Keyframes(name, stringifyRules(rules, name, '@keyframes')); +} + +// + +var withTheme = (function (Component$$1) { + var WithTheme = react__WEBPACK_IMPORTED_MODULE_2___default().forwardRef(function (props, ref) { + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement( + ThemeConsumer, + null, + function (theme) { + // $FlowFixMe + var defaultProps = Component$$1.defaultProps; + + var themeProp = determineTheme(props, theme, defaultProps); + + if ( true && themeProp === undefined) { + // eslint-disable-next-line no-console + console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class "' + getComponentName(Component$$1) + '"'); + } + + return react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Component$$1, _extends({}, props, { theme: themeProp, ref: ref })); + } + ); + }); + + hoistNonReactStatics(WithTheme, Component$$1); + + WithTheme.displayName = 'WithTheme(' + getComponentName(Component$$1) + ')'; + + return WithTheme; +}); + +// + +/* eslint-disable */ +var __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS = { + StyleSheet: StyleSheet +}; + +// + +/* Warning if you've imported this file on React Native */ +if ( true && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { + // eslint-disable-next-line no-console + console.warn("It looks like you've imported 'styled-components' on React Native.\n" + "Perhaps you're looking to import 'styled-components/native'?\n" + 'Read more about this at https://www.styled-components.com/docs/basics#react-native'); +} + +/* Warning if there are several instances of styled-components */ +if ( true && typeof window !== 'undefined' && typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Node.js') === -1 && navigator.userAgent.indexOf('jsdom') === -1) { + window['__styled-components-init__'] = window['__styled-components-init__'] || 0; + + if (window['__styled-components-init__'] === 1) { + // eslint-disable-next-line no-console + console.warn("It looks like there are several instances of 'styled-components' initialized in this application. " + 'This may cause dynamic styles not rendering properly, errors happening during rehydration process ' + 'and makes your application bigger without a good reason.\n\n' + 'See https://s-c.sh/2BAXzed for more info.'); + } + + window['__styled-components-init__'] += 1; +} + +// + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (styled); + +//# sourceMappingURL=styled-components.browser.esm.js.map + + +/***/ }), + +/***/ "./node_modules/stylis-rule-sheet/index.js": +/*!*************************************************!*\ + !*** ./node_modules/stylis-rule-sheet/index.js ***! + \*************************************************/ +/***/ ((module) => { + +(function (factory) { + true ? (module['exports'] = factory()) : + 0 +}(function () { + + 'use strict' + + return function (insertRule) { + var delimiter = '/*|*/' + var needle = delimiter+'}' + + function toSheet (block) { + if (block) + try { + insertRule(block + '}') + } catch (e) {} + } + + return function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) { + switch (context) { + // property + case 1: + // @import + if (depth === 0 && content.charCodeAt(0) === 64) + return insertRule(content+';'), '' + break + // selector + case 2: + if (ns === 0) + return content + delimiter + break + // at-rule + case 3: + switch (ns) { + // @font-face, @page + case 102: + case 112: + return insertRule(selectors[0]+content), '' + default: + return content + (at === 0 ? delimiter : '') + } + case -2: + content.split(needle).forEach(toSheet) + } + } + } +})) + + +/***/ }), + +/***/ "./node_modules/stylis/stylis.min.js": +/*!*******************************************!*\ + !*** ./node_modules/stylis/stylis.min.js ***! + \*******************************************/ +/***/ ((module) => { + +!function(e){ true?module.exports=e(null):0}(function e(a){"use strict";var r=/^\0+/g,c=/[\0\r\f]/g,s=/: */g,t=/zoo|gra/,i=/([,: ])(transform)/g,f=/,+\s*(?![^(]*[)])/g,n=/ +\s*(?![^(]*[)])/g,l=/ *[\0] */g,o=/,\r+?/g,h=/([\t\r\n ])*\f?&/g,u=/:global\(((?:[^\(\)\[\]]*|\[.*\]|\([^\(\)]*\))*)\)/g,d=/\W+/g,b=/@(k\w+)\s*(\S*)\s*/,p=/::(place)/g,k=/:(read-only)/g,g=/\s+(?=[{\];=:>])/g,A=/([[}=:>])\s+/g,C=/(\{[^{]+?);(?=\})/g,w=/\s{2,}/g,v=/([^\(])(:+) */g,m=/[svh]\w+-[tblr]{2}/,x=/\(\s*(.*)\s*\)/g,$=/([\s\S]*?);/g,y=/-self|flex-/g,O=/[^]*?(:[rp][el]a[\w-]+)[^]*/,j=/stretch|:\s*\w+\-(?:conte|avail)/,z=/([^-])(image-set\()/,N="-webkit-",S="-moz-",F="-ms-",W=59,q=125,B=123,D=40,E=41,G=91,H=93,I=10,J=13,K=9,L=64,M=32,P=38,Q=45,R=95,T=42,U=44,V=58,X=39,Y=34,Z=47,_=62,ee=43,ae=126,re=0,ce=12,se=11,te=107,ie=109,fe=115,ne=112,le=111,oe=105,he=99,ue=100,de=112,be=1,pe=1,ke=0,ge=1,Ae=1,Ce=1,we=0,ve=0,me=0,xe=[],$e=[],ye=0,Oe=null,je=-2,ze=-1,Ne=0,Se=1,Fe=2,We=3,qe=0,Be=1,De="",Ee="",Ge="";function He(e,a,s,t,i){for(var f,n,o=0,h=0,u=0,d=0,g=0,A=0,C=0,w=0,m=0,$=0,y=0,O=0,j=0,z=0,R=0,we=0,$e=0,Oe=0,je=0,ze=s.length,Je=ze-1,Re="",Te="",Ue="",Ve="",Xe="",Ye="";R0)Te=Te.replace(c,"");if(Te.trim().length>0){switch(C){case M:case K:case W:case J:case I:break;default:Te+=s.charAt(R)}C=W}}if(1===$e)switch(C){case B:case q:case W:case Y:case X:case D:case E:case U:$e=0;case K:case J:case I:case M:break;default:for($e=0,je=R,g=C,R--,C=W;je0)++R,C=g;case B:je=ze}}switch(C){case B:for(g=(Te=Te.trim()).charCodeAt(0),y=1,je=++R;R0)Te=Te.replace(c,"");switch(A=Te.charCodeAt(1)){case ue:case ie:case fe:case Q:f=a;break;default:f=xe}if(je=(Ue=He(a,f,Ue,A,i+1)).length,me>0&&0===je)je=Te.length;if(ye>0)if(f=Ie(xe,Te,Oe),n=Pe(We,Ue,f,a,pe,be,je,A,i,t),Te=f.join(""),void 0!==n)if(0===(je=(Ue=n.trim()).length))A=0,Ue="";if(je>0)switch(A){case fe:Te=Te.replace(x,Me);case ue:case ie:case Q:Ue=Te+"{"+Ue+"}";break;case te:if(Ue=(Te=Te.replace(b,"$1 $2"+(Be>0?De:"")))+"{"+Ue+"}",1===Ae||2===Ae&&Le("@"+Ue,3))Ue="@"+N+Ue+"@"+Ue;else Ue="@"+Ue;break;default:if(Ue=Te+Ue,t===de)Ve+=Ue,Ue=""}else Ue="";break;default:Ue=He(a,Ie(a,Te,Oe),Ue,t,i+1)}Xe+=Ue,O=0,$e=0,z=0,we=0,Oe=0,j=0,Te="",Ue="",C=s.charCodeAt(++R);break;case q:case W:if((je=(Te=(we>0?Te.replace(c,""):Te).trim()).length)>1){if(0===z)if((g=Te.charCodeAt(0))===Q||g>96&&g<123)je=(Te=Te.replace(" ",":")).length;if(ye>0)if(void 0!==(n=Pe(Se,Te,a,e,pe,be,Ve.length,t,i,t)))if(0===(je=(Te=n.trim()).length))Te="\0\0";switch(g=Te.charCodeAt(0),A=Te.charCodeAt(1),g){case re:break;case L:if(A===oe||A===he){Ye+=Te+s.charAt(R);break}default:if(Te.charCodeAt(je-1)===V)break;Ve+=Ke(Te,g,A,Te.charCodeAt(2))}}O=0,$e=0,z=0,we=0,Oe=0,Te="",C=s.charCodeAt(++R)}}switch(C){case J:case I:if(h+d+u+o+ve===0)switch($){case E:case X:case Y:case L:case ae:case _:case T:case ee:case Z:case Q:case V:case U:case W:case B:case q:break;default:if(z>0)$e=1}if(h===Z)h=0;else if(ge+O===0&&t!==te&&Te.length>0)we=1,Te+="\0";if(ye*qe>0)Pe(Ne,Te,a,e,pe,be,Ve.length,t,i,t);be=1,pe++;break;case W:case q:if(h+d+u+o===0){be++;break}default:switch(be++,Re=s.charAt(R),C){case K:case M:if(d+o+h===0)switch(w){case U:case V:case K:case M:Re="";break;default:if(C!==M)Re=" "}break;case re:Re="\\0";break;case ce:Re="\\f";break;case se:Re="\\v";break;case P:if(d+h+o===0&&ge>0)Oe=1,we=1,Re="\f"+Re;break;case 108:if(d+h+o+ke===0&&z>0)switch(R-z){case 2:if(w===ne&&s.charCodeAt(R-3)===V)ke=w;case 8:if(m===le)ke=m}break;case V:if(d+h+o===0)z=R;break;case U:if(h+u+d+o===0)we=1,Re+="\r";break;case Y:case X:if(0===h)d=d===C?0:0===d?C:d;break;case G:if(d+h+u===0)o++;break;case H:if(d+h+u===0)o--;break;case E:if(d+h+o===0)u--;break;case D:if(d+h+o===0){if(0===O)switch(2*w+3*m){case 533:break;default:y=0,O=1}u++}break;case L:if(h+u+d+o+z+j===0)j=1;break;case T:case Z:if(d+o+u>0)break;switch(h){case 0:switch(2*C+3*s.charCodeAt(R+1)){case 235:h=Z;break;case 220:je=R,h=T}break;case T:if(C===Z&&w===T&&je+2!==R){if(33===s.charCodeAt(je+2))Ve+=s.substring(je,R+1);Re="",h=0}}}if(0===h){if(ge+d+o+j===0&&t!==te&&C!==W)switch(C){case U:case ae:case _:case ee:case E:case D:if(0===O){switch(w){case K:case M:case I:case J:Re+="\0";break;default:Re="\0"+Re+(C===U?"":"\0")}we=1}else switch(C){case D:if(z+7===R&&108===w)z=0;O=++y;break;case E:if(0==(O=--y))we=1,Re+="\0"}break;case K:case M:switch(w){case re:case B:case q:case W:case U:case ce:case K:case M:case I:case J:break;default:if(0===O)we=1,Re+="\0"}}if(Te+=Re,C!==M&&C!==K)$=C}}m=w,w=C,R++}if(je=Ve.length,me>0)if(0===je&&0===Xe.length&&0===a[0].length==false)if(t!==ie||1===a.length&&(ge>0?Ee:Ge)===a[0])je=a.join(",").length+2;if(je>0){if(f=0===ge&&t!==te?function(e){for(var a,r,s=0,t=e.length,i=Array(t);s1)continue;if(u=n.charCodeAt(n.length-1),d=r.charCodeAt(0),a="",0!==o)switch(u){case T:case ae:case _:case ee:case M:case D:break;default:a=" "}switch(d){case P:r=a+Ee;case ae:case _:case ee:case M:case E:case D:break;case G:r=a+r+Ee;break;case V:switch(2*r.charCodeAt(1)+3*r.charCodeAt(2)){case 530:if(Ce>0){r=a+r.substring(8,h-1);break}default:if(o<1||f[o-1].length<1)r=a+Ee+r}break;case U:a="";default:if(h>1&&r.indexOf(":")>0)r=a+r.replace(v,"$1"+Ee+"$2");else r=a+r+Ee}n+=r}i[s]=n.replace(c,"").trim()}return i}(a):a,ye>0)if(void 0!==(n=Pe(Fe,Ve,f,e,pe,be,je,t,i,t))&&0===(Ve=n).length)return Ye+Ve+Xe;if(Ve=f.join(",")+"{"+Ve+"}",Ae*ke!=0){if(2===Ae&&!Le(Ve,2))ke=0;switch(ke){case le:Ve=Ve.replace(k,":"+S+"$1")+Ve;break;case ne:Ve=Ve.replace(p,"::"+N+"input-$1")+Ve.replace(p,"::"+S+"$1")+Ve.replace(p,":"+F+"input-$1")+Ve}ke=0}}return Ye+Ve+Xe}function Ie(e,a,r){var c=a.trim().split(o),s=c,t=c.length,i=e.length;switch(i){case 0:case 1:for(var f=0,n=0===i?"":e[0]+" ";f0&&ge>0)return s.replace(u,"$1").replace(h,"$1"+Ge);break;default:return e.trim()+s.replace(h,"$1"+e.trim())}default:if(r*ge>0&&s.indexOf("\f")>0)return s.replace(h,(e.charCodeAt(0)===V?"":"$1")+e.trim())}return e+s}function Ke(e,a,r,c){var l,o=0,h=e+";",u=2*a+3*r+4*c;if(944===u)return function(e){var a=e.length,r=e.indexOf(":",9)+1,c=e.substring(0,r).trim(),s=e.substring(r,a-1).trim();switch(e.charCodeAt(9)*Be){case 0:break;case Q:if(110!==e.charCodeAt(10))break;default:for(var t=s.split((s="",f)),i=0,r=0,a=t.length;iL&&h<90||h>96&&h<123||h===R||h===Q&&l.charCodeAt(1)!==Q))switch(isNaN(parseFloat(l))+(-1!==l.indexOf("("))){case 1:switch(l){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:l+=De}}o[r++]=l}s+=(0===i?"":",")+o.join(" ")}}if(s=c+s+";",1===Ae||2===Ae&&Le(s,1))return N+s+s;return s}(h);else if(0===Ae||2===Ae&&!Le(h,1))return h;switch(u){case 1015:return 97===h.charCodeAt(10)?N+h+h:h;case 951:return 116===h.charCodeAt(3)?N+h+h:h;case 963:return 110===h.charCodeAt(5)?N+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return N+h+h;case 978:return N+h+S+h+h;case 1019:case 983:return N+h+S+h+F+h+h;case 883:if(h.charCodeAt(8)===Q)return N+h+h;if(h.indexOf("image-set(",11)>0)return h.replace(z,"$1"+N+"$2")+h;return h;case 932:if(h.charCodeAt(4)===Q)switch(h.charCodeAt(5)){case 103:return N+"box-"+h.replace("-grow","")+N+h+F+h.replace("grow","positive")+h;case 115:return N+h+F+h.replace("shrink","negative")+h;case 98:return N+h+F+h.replace("basis","preferred-size")+h}return N+h+F+h+h;case 964:return N+h+F+"flex-"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return l=h.substring(h.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),N+"box-pack"+l+N+h+F+"flex-pack"+l+h;case 1005:return t.test(h)?h.replace(s,":"+N)+h.replace(s,":"+S)+h:h;case 1e3:switch(o=(l=h.substring(13).trim()).indexOf("-")+1,l.charCodeAt(0)+l.charCodeAt(o)){case 226:l=h.replace(m,"tb");break;case 232:l=h.replace(m,"tb-rl");break;case 220:l=h.replace(m,"lr");break;default:return h}return N+h+F+l+h;case 1017:if(-1===h.indexOf("sticky",9))return h;case 975:switch(o=(h=e).length-10,u=(l=(33===h.charCodeAt(o)?h.substring(0,o):h).substring(e.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|l.charCodeAt(7))){case 203:if(l.charCodeAt(8)<111)break;case 115:h=h.replace(l,N+l)+";"+h;break;case 207:case 102:h=h.replace(l,N+(u>102?"inline-":"")+"box")+";"+h.replace(l,N+l)+";"+h.replace(l,F+l+"box")+";"+h}return h+";";case 938:if(h.charCodeAt(5)===Q)switch(h.charCodeAt(6)){case 105:return l=h.replace("-items",""),N+h+N+"box-"+l+F+"flex-"+l+h;case 115:return N+h+F+"flex-item-"+h.replace(y,"")+h;default:return N+h+F+"flex-line-pack"+h.replace("align-content","").replace(y,"")+h}break;case 973:case 989:if(h.charCodeAt(3)!==Q||122===h.charCodeAt(4))break;case 931:case 953:if(true===j.test(e))if(115===(l=e.substring(e.indexOf(":")+1)).charCodeAt(0))return Ke(e.replace("stretch","fill-available"),a,r,c).replace(":fill-available",":stretch");else return h.replace(l,N+l)+h.replace(l,S+l.replace("fill-",""))+h;break;case 962:if(h=N+h+(102===h.charCodeAt(5)?F+h:"")+h,r+c===211&&105===h.charCodeAt(13)&&h.indexOf("transform",10)>0)return h.substring(0,h.indexOf(";",27)+1).replace(i,"$1"+N+"$2")+h}return h}function Le(e,a){var r=e.indexOf(1===a?":":"{"),c=e.substring(0,3!==a?r:10),s=e.substring(r+1,e.length-1);return Oe(2!==a?c:c.replace(O,"$1"),s,a)}function Me(e,a){var r=Ke(a,a.charCodeAt(0),a.charCodeAt(1),a.charCodeAt(2));return r!==a+";"?r.replace($," or ($1)").substring(4):"("+a+")"}function Pe(e,a,r,c,s,t,i,f,n,l){for(var o,h=0,u=a;h0)De=s.replace(d,t===G?"":"-");if(t=1,1===ge)Ge=s;else Ee=s;var i,f=[Ge];if(ye>0)if(void 0!==(i=Pe(ze,r,f,f,pe,be,0,0,0,0))&&"string"==typeof i)r=i;var n=He(xe,f,r,0,0);if(ye>0)if(void 0!==(i=Pe(je,n,f,f,pe,be,n.length,0,0,0))&&"string"!=typeof(n=i))t=0;return De="",Ge="",Ee="",ke=0,pe=1,be=1,we*t==0?n:n.replace(c,"").replace(g,"").replace(A,"$1").replace(C,"$1").replace(w," ")}if(Te.use=function e(a){switch(a){case void 0:case null:ye=$e.length=0;break;default:if("function"==typeof a)$e[ye++]=a;else if("object"==typeof a)for(var r=0,c=a.length;r { + +"use strict"; +module.exports = window["React"]; + +/***/ }), + +/***/ "jquery": +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["jQuery"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/data": +/*!******************************!*\ + !*** external ["wp","data"] ***! + \******************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["data"]; + +/***/ }), + +/***/ "@wordpress/edit-post": +/*!**********************************!*\ + !*** external ["wp","editPost"] ***! + \**********************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["editPost"]; + +/***/ }), + +/***/ "@wordpress/element": +/*!*********************************!*\ + !*** external ["wp","element"] ***! + \*********************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["element"]; + +/***/ }), + +/***/ "@wordpress/i18n": +/*!******************************!*\ + !*** external ["wp","i18n"] ***! + \******************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["i18n"]; + +/***/ }), + +/***/ "@wordpress/plugins": +/*!*********************************!*\ + !*** external ["wp","plugins"] ***! + \*********************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["plugins"]; + +/***/ }), + +/***/ "./node_modules/@linaria/react/dist/index.mjs": +/*!****************************************************!*\ + !*** ./node_modules/@linaria/react/dist/index.mjs ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "styled": () => (/* binding */ styled_default) +/* harmony export */ }); +/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/is-prop-valid */ "./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var _linaria_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @linaria/core */ "./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs"); +// src/styled.ts + + + +var isCapital = (ch) => ch.toUpperCase() === ch; +var filterKey = (keys) => (key) => keys.indexOf(key) === -1; +var omit = (obj, keys) => { + const res = {}; + Object.keys(obj).filter(filterKey(keys)).forEach((key) => { + res[key] = obj[key]; + }); + return res; +}; +function filterProps(asIs, props, omitKeys) { + const filteredProps = omit(props, omitKeys); + if (!asIs) { + const interopValidAttr = typeof _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"] === "function" ? { default: _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"] } : _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"]; + Object.keys(filteredProps).forEach((key) => { + if (!interopValidAttr.default(key)) { + delete filteredProps[key]; + } + }); + } + return filteredProps; +} +var warnIfInvalid = (value, componentName) => { + if (true) { + if (typeof value === "string" || typeof value === "number" && isFinite(value)) { + return; + } + const stringified = typeof value === "object" ? JSON.stringify(value) : String(value); + console.warn( + `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.` + ); + } +}; +function styled(tag) { + return (options) => { + if (true) { + if (Array.isArray(options)) { + throw new Error( + 'Using the "styled" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup' + ); + } + } + const render = (props, ref) => { + const { as: component = tag, class: className } = props; + const shouldKeepProps = options.propsAsIs === void 0 ? !(typeof component === "string" && component.indexOf("-") === -1 && !isCapital(component[0])) : options.propsAsIs; + const filteredProps = filterProps(shouldKeepProps, props, [ + "as", + "class" + ]); + filteredProps.ref = ref; + filteredProps.className = options.atomic ? (0,_linaria_core__WEBPACK_IMPORTED_MODULE_2__.cx)(options.class, filteredProps.className || className) : (0,_linaria_core__WEBPACK_IMPORTED_MODULE_2__.cx)(filteredProps.className || className, options.class); + const { vars } = options; + if (vars) { + const style = {}; + for (const name in vars) { + const variable = vars[name]; + const result = variable[0]; + const unit = variable[1] || ""; + const value = typeof result === "function" ? result(props) : result; + warnIfInvalid(value, options.name); + style[`--${name}`] = `${value}${unit}`; + } + const ownStyle = filteredProps.style || {}; + const keys = Object.keys(ownStyle); + if (keys.length > 0) { + keys.forEach((key) => { + style[key] = ownStyle[key]; + }); + } + filteredProps.style = style; + } + if (tag.__linaria && tag !== component) { + filteredProps.as = component; + return react__WEBPACK_IMPORTED_MODULE_1__.createElement(tag, filteredProps); + } + return react__WEBPACK_IMPORTED_MODULE_1__.createElement(component, filteredProps); + }; + const Result = react__WEBPACK_IMPORTED_MODULE_1__.forwardRef ? react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(render) : (props) => { + const rest = omit(props, ["innerRef"]); + return render(rest, props.innerRef); + }; + Result.displayName = options.name; + Result.__linaria = { + className: options.class, + extends: tag + }; + return Result; + }; +} +var styled_default = true ? new Proxy(styled, { + get(o, prop) { + return o(prop); + } +}) : 0; + +//# sourceMappingURL=index.mjs.map + +/***/ }), + +/***/ "./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs": +/*!*******************************************************************************!*\ + !*** ./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs ***! + \*******************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "css": () => (/* binding */ css_default), +/* harmony export */ "cx": () => (/* binding */ cx_default) +/* harmony export */ }); +// src/css.ts +var css = () => { + throw new Error( + 'Using the "css" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.' + ); +}; +var css_default = css; + +// src/cx.ts +var cx = function cx2() { + const presentClassNames = Array.prototype.slice.call(arguments).filter(Boolean); + const atomicClasses = {}; + const nonAtomicClasses = []; + presentClassNames.forEach((arg) => { + const individualClassNames = arg ? arg.split(" ") : []; + individualClassNames.forEach((className) => { + if (className.startsWith("atm_")) { + const [, keyHash] = className.split("_"); + atomicClasses[keyHash] = className; + } else { + nonAtomicClasses.push(className); + } + }); + }); + const result = []; + for (const keyHash in atomicClasses) { + if (Object.prototype.hasOwnProperty.call(atomicClasses, keyHash)) { + result.push(atomicClasses[keyHash]); + } + } + result.push(...nonAtomicClasses); + return result.join(" "); +}; +var cx_default = cx; + +//# sourceMappingURL=index.mjs.map + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/nonce */ +/******/ (() => { +/******/ __webpack_require__.nc = undefined; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!**************************************!*\ + !*** ./scripts/entries/gutenberg.ts ***! + \**************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _gutenberg_FormBlock_registerFormBlock__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../gutenberg/FormBlock/registerFormBlock */ "./scripts/gutenberg/FormBlock/registerFormBlock.tsx"); +/* harmony import */ var _gutenberg_Sidebar_contentType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../gutenberg/Sidebar/contentType */ "./scripts/gutenberg/Sidebar/contentType.tsx"); +/* harmony import */ var _gutenberg_MeetingsBlock_registerMeetingBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../gutenberg/MeetingsBlock/registerMeetingBlock */ "./scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx"); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); + + + + +(0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_3__.initBackgroundApp)([_gutenberg_FormBlock_registerFormBlock__WEBPACK_IMPORTED_MODULE_0__["default"], _gutenberg_MeetingsBlock_registerMeetingBlock__WEBPACK_IMPORTED_MODULE_2__["default"], _gutenberg_Sidebar_contentType__WEBPACK_IMPORTED_MODULE_1__.registerHubspotSidebar]); +})(); + +/******/ })() +; +//# sourceMappingURL=gutenberg.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/gutenberg.js.map b/wp/wp-content/plugins/leadin/build/gutenberg.js.map new file mode 100644 index 00000000..8c5af06d --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/gutenberg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"gutenberg.js","mappings":"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;;;;;;;;;ACpBA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,YAAY,WAAW;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEsY;;;;;;;;;;;ACtUtY,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;;AAEA;;;;;;;;;;;ACLA,aAAa,mBAAO,CAAC,mDAAW;AAChC,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,qBAAqB,mBAAO,CAAC,mEAAmB;;AAEhD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC3BA,sBAAsB,mBAAO,CAAC,qEAAoB;;AAElD;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AClBA;AACA,wBAAwB,qBAAM,gBAAgB,qBAAM,IAAI,qBAAM,sBAAsB,qBAAM;;AAE1F;;;;;;;;;;;ACHA,aAAa,mBAAO,CAAC,mDAAW;;AAEhC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC7CA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACRA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClBA,eAAe,mBAAO,CAAC,qDAAY;AACnC,UAAU,mBAAO,CAAC,2CAAO;AACzB,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ,WAAW;AAC9B,WAAW,SAAS;AACpB;AACA,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,+CAA+C,iBAAiB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC5BA,WAAW,mBAAO,CAAC,+CAAS;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACtBA,eAAe,mBAAO,CAAC,uDAAa;AACpC,eAAe,mBAAO,CAAC,qDAAY;AACnC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,UAAU,EAAC;;;;;;;;;;;;;;;;;;;AChDiC;;AAE3D;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D,yCAAyC,QAAQ;AACjD,yDAAyD,QAAQ;AACjE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS,sDAAa;AACtB;AACA,0BAA0B,gDAAO;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,QAAQ,sDAAa;AACrB;AACA;AACA;AACA;AACA;AACA,kBAAkB,iDAAQ;AAC1B,iBAAiB,iDAAQ;AACzB;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAa;AACtC;AACA;AACA;AACA;AACA,0BAA0B,gDAAO;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,uCAAuC,sDAAa;AACpD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA,QAAQ,sDAAa;AACrB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,QAAQ,gDAAO,eAAe,gDAAO;AACrC;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA,iEAAe,KAAK,EAAC;AACU;;;;;;;;;;;;;AC5H/B;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,IAAI,IAAqC;AACzC,6BAA6B,mBAAO,CAAC,yFAA4B;AACjE;AACA,YAAY,mBAAO,CAAC,uDAAW;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,WAAW;AACtB;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;;AAEA;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb,cAAc,mBAAO,CAAC,kDAAU;AAChC,aAAa,mBAAO,CAAC,4DAAe;;AAEpC,2BAA2B,mBAAO,CAAC,yFAA4B;AAC/D,UAAU,mBAAO,CAAC,uDAAW;AAC7B,qBAAqB,mBAAO,CAAC,qEAAkB;;AAE/C;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,8BAA8B;AAC9B,QAAQ;AACR;AACA;AACA;AACA;AACA,+BAA+B,KAAK;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B;AAC5B,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,SAAS,KAAqC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,IAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM,KAAqC,4FAA4F,CAAM;AAC7I;AACA;;AAEA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,gCAAgC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iHAAiH;AACjH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACjmBA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,IAAqC;AACzC,gBAAgB,mBAAO,CAAC,kDAAU;;AAElC;AACA;AACA;AACA,mBAAmB,mBAAO,CAAC,uFAA2B;AACtD,EAAE,KAAK,EAIN;;;;;;;;;;;;AClBD;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA;;;;;;;;;;;ACXA;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACPA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,gBAAgB,+CAA+C;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACtCA;;AAEA,eAAe,mBAAO,CAAC,wFAA6B;AACpD,gBAAgB,mBAAO,CAAC,gHAAyC;AACjE,uBAAuB,mBAAO,CAAC,iEAAe;;AAE9C,YAAY,mBAAO,CAAC,qDAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,2FAA+B;;AAEvD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,UAAU;AACzB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,0CAA0C;AAC1C,2CAA2C;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,MAAM;AACN,2EAA2E;AAC3E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACr4DA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAO,CAAC,qDAAS;;AAExC;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;AC9BA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA,iDAAiD;AACjD,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kCAAkC;AAClC;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChYA,YAAY,mBAAO,CAAC,6DAAiB;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD,KAAK;AAC1D,uDAAuD,KAAK;AAC5D;AACA,WAAW,aAAa,YAAY;AACpC;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,+DAA+D;AAC/D;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,kBAAkB;AACjC;AACA,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA,qEAAqE;AACrE,iEAAiE;AACjE;AACA;AACA,kCAAkC;AAClC,kCAAkC;AAClC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,SAAS;AACxB;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAA0C;AAClD,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,qEAAqE;AACrE,UAAU;AACV;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;AC9mBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB;;AAEpB;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;;;AAIb,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,eAAe;AACf,kBAAkB;AAClB,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,gBAAgB;AAChB,mBAAmB;AACnB,wBAAwB;AACxB,yBAAyB;AACzB,yBAAyB;AACzB,iBAAiB;AACjB,oBAAoB;AACpB,kBAAkB;AAClB,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,oBAAoB;AACpB,kBAAkB;AAClB,0BAA0B;AAC1B,cAAc;AACd,GAAG;AACH;;;;;;;;;;;;ACpLa;;AAEb,IAAI,KAAqC,EAAE,EAE1C,CAAC;AACF,EAAE,gIAAyD;AAC3D;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb,IAAI,IAAqC;AACzC;AACA;;AAEA,YAAY,mBAAO,CAAC,oBAAO;AAC3B,cAAc,mBAAO,CAAC,4DAAe;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE,gBAAgB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,+FAA+F,eAAe;AAC9G;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK,GAAG;;AAER,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,4BAA4B;;AAE5B;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,uBAAuB;AACvB;AACA,SAAS;AACT,wBAAwB;AACxB;AACA,SAAS;AACT,wBAAwB;AACxB;AACA,SAAS;AACT,yBAAyB;AACzB;AACA,SAAS;AACT,yBAAyB;AACzB;AACA,SAAS;AACT,kCAAkC;AAClC;AACA,SAAS;AACT,4BAA4B;AAC5B;AACA,SAAS;AACT,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2DAA2D;;AAE3D;AACA;;AAEA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;;;AAGlB;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,2HAA2H;AAC3H;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA,oEAAoE;;AAEpE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,eAAe;AAC1B,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;;AAER;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA,oBAAoB;AACpB,2DAA2D,UAAU;AACrE,yBAAyB,UAAU;AACnC;AACA,aAAa,UAAU;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,YAAY,SAAS;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,GAAG;AACd;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,GAAG;AACd;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,iBAAiB;AACvC;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,4CAA4C;;AAE5C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;;;AAGA;AACA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA,0DAA0D;AAC1D;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC;AACtC;;AAEA;;AAEA,WAAW;AACX,YAAY;AACZ,GAAG;AACH;;;;;;;;;;;;ACpsCa;;AAEb,IAAI,KAAqC,EAAE,EAE1C,CAAC;AACF,EAAE,+IAAkE;AACpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNuC;AACW;AACmC;AAC5C;AAC4B;AACnC;AACC;AACY;AACZ;;AAEnC;;AAEA;AACA;;AAEA,+CAA+C,SAAS;AACxD;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAU,KAAqC,0CAA0C,CAAK;AAC9F;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,oMAAoM,aAAoB;;AAExN;AACA;;AAEA;;;AAGA;AACA;AACA;AACA,aAAa,KAAqC;AAClD;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA,wGAAwG,SAAS,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAE;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C,SAAS;AACnD;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iGAAiG,aAAa;AAC9G;AACA;;AAEA,QAAQ,KAAqC,EAAE,cAE1C,CAAC;AACN;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA,mCAAmC;AACnC;AACA;AACA,8BAA8B,kDAAkD;AAChF;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,GAAG;AACH,CAAC;;AAED;;AAEA;;AAEA;AACA,yBAAyB,0DAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,iBAAiB,0DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,wDAAiB;AACxC;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,2DAA2D;;AAE3D,kEAAkE,iBAAiB;;AAEnF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AAC5E,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;;AAEpD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,0DAAmB,qBAAqB,WAAW,2BAA2B,iBAAiB;AAC1G;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;AACA,yCAAyC;AACzC;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0CAA0C,SAAS;AACnD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,oBAAoB,eAAe;AACnC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB,oBAAoB;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,uCAAuC;AACvC,gCAAgC;;AAEhC;AACA;;AAEA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;;AAEA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA;;;AAGA;AACA;;;AAGA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;;AAEA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;;AAGA;AACA;AACA,aAAa,mDAAY,oBAAoB,UAAU;AACvD,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4DAA4D,yDAAQ;AACpE,yBAAyB;AACzB;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR,8DAA8D;;AAE9D;AACA;AACA,qFAAqF;AACrF;AACA;AACA,GAAG;;AAEH,iCAAiC,oBAAoB;AACrD;;AAEA;AACA;AACA;;AAEA,gDAAgD,SAAS;AACzD;;AAEA,oCAAoC,oEAAoE;AACxG;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,UAAU,KAAqC,IAAI,mDAAS;AAC5D;AACA;AACA;;AAEA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,+FAA+F,aAAa;AAC5G;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,OAAO,4DAAkB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sEAAsE;AACtE;;AAEA;AACA;AACA,sEAAsE;AACtE;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,kBAAkB;AACpC;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,MAAqC,IAAI,CAA2B;AACxF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4QAA4Q,mBAAmB,sDAAsD,WAAW,eAAe;AAC/W;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,wCAAwC,KAAqC,yDAAyD,CAAI;AAC1I;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,gBAAgB,gDAAU;AAChE;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA,mBAAmB,oDAAa;;AAEhC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,uBAAuB,uDAAO;AAC9B;AACA;AACA;;AAEA;AACA;;AAEA,WAAW,0DAAmB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,WAAW,0DAAmB;AAC9B;AACA,QAAQ,gBAAgB;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA,UAAU,KAAqC;AAC/C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,CAAC,4CAAS;;AAEX;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAW,0DAAmB;AAC9B;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,eAAe,gCAAgC;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;;AAEV;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,CAAC;;AAED;;AAEA,wBAAwB,oDAAa;AACrC;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,uBAAuB,uDAAO;AAC9B;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,WAAW,0DAAmB;AAC9B;AACA,QAAQ,uCAAuC;AAC/C,MAAM,KAAqC,GAAG,0DAAmB,aAAa,CAAQ;AACtF;AACA;;AAEA;AACA,CAAC,CAAC,4CAAS;AACX,KAAqC;AACrC,SAAS,2DAAmB,EAAE,4DAAoB,cAAc,4DAAoB;;AAEpF,UAAU,uDAAe;AACzB,iBAAiB,mEAAyB;AAC1C,GAAG;AACH,EAAE,EAAE,CAAM;;AAEV;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,yDAAyD,4HAA4H;AACrL;AACA,OAAO;;AAEP;AACA;AACA;AACA,wRAAwR,WAAW,yOAAyO,oCAAoC,aAAa,6BAA6B;AAC1lB;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,WAAW,0DAAmB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,WAAW,0DAAmB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;;AAEA;AACA;AACA,QAAQ,0EAA0E,wEAAwE,yBAAyB,kEAAS;AAC5L;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;AACzC;;AAEA;;AAEA,WAAW,oDAAa;AACxB;;AAEA;AACA;;AAEA,6BAA6B,WAAW,cAAc;;AAEtD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,IAAqC;AACrD;AACA;;AAEA;;AAEA,gBAAgB,KAAqC,IAAI,2DAAoB;AAC7E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,QAAQ,KAAqC;;AAE7C;AACA;;AAEA;AACA,CAAC,CAAC,4CAAS;;AAEX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,0DAAmB,6BAA6B,WAAW,+DAA+D;AACrI;AACA;AACA,2BAA2B,uDAAgB;AAC3C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA,gCAAgC;AAChC;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sDAAsD,0DAAK;AAC3D;AACA,GAAG;;AAEH,MAAM,IAAqC;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+FAA+F,aAAa;AAC5G;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,UAAU,KAAqC,IAAI,2DAAoB;AACvE;AACA;AACA;;AAEA,aAAa,0DAAmB;AAChC;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;;AAEA;AACA,YAAY;AACZ,mBAA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CA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,oCAAoC,8DAAS,oBAAoB,SAAS,8DAAS,GAAG,EAAE,8DAAS;AACjG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA,wCAAwC,YAAY,sBAAsB,cAAc;AACxF;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wCAAwC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,iDAAE,wDAAwD,iDAAE;AAC7G,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAK,QAAQ,MAAM,EAAE,KAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAmB;AAClC;AACA,aAAa,gDAAmB;AAChC;AACA,mBAAmB,6CAAgB,GAAG,6CAAgB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAqC;AAC1D;AACA;AACA;AACA,CAAC,IAAI,CAAM;AAGT;AACF;;;;;;;;;;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIE;AACF;;;;;;UCtCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACApB,4EAAiB,CAAC,CACdlX,8EADc,EAEdsB,qFAFc,EAGdU,kFAHc,CAAD,CAAjB,C","sources":["webpack://leadin/./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js","webpack://leadin/./node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/memoize.browser.esm.js","webpack://leadin/./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://leadin/./node_modules/@emotion/unitless/dist/unitless.browser.esm.js","webpack://leadin/./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://leadin/./scripts/constants/defaultFormOptions.ts","webpack://leadin/./scripts/constants/leadinConfig.ts","webpack://leadin/./scripts/gutenberg/Common/CalendarIcon.tsx","webpack://leadin/./scripts/gutenberg/Common/SidebarSprocketIcon.tsx","webpack://leadin/./scripts/gutenberg/Common/SprocketIcon.tsx","webpack://leadin/./scripts/gutenberg/FormBlock/FormBlockSave.tsx","webpack://leadin/./scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx","webpack://leadin/./scripts/gutenberg/FormBlock/registerFormBlock.tsx","webpack://leadin/./scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx","webpack://leadin/./scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx","webpack://leadin/./scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx","webpack://leadin/./scripts/gutenberg/Sidebar/contentType.tsx","webpack://leadin/./scripts/gutenberg/UIComponents/UIImage.ts","webpack://leadin/./scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx","webpack://leadin/./scripts/iframe/integratedMessages/core/CoreMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/forms/FormsMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/index.ts","webpack://leadin/./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/plugin/PluginMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts","webpack://leadin/./scripts/iframe/useBackgroundApp.ts","webpack://leadin/./scripts/lib/Raven.ts","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx","webpack://leadin/./scripts/shared/Common/ErrorHandler.tsx","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts","webpack://leadin/./scripts/shared/Common/LoadingBlock.tsx","webpack://leadin/./scripts/shared/Form/FormEdit.tsx","webpack://leadin/./scripts/shared/Form/FormSelect.tsx","webpack://leadin/./scripts/shared/Form/FormSelector.tsx","webpack://leadin/./scripts/shared/Form/PreviewForm.tsx","webpack://leadin/./scripts/shared/Form/hooks/useCreateFormFromTemplate.ts","webpack://leadin/./scripts/shared/Form/hooks/useForms.ts","webpack://leadin/./scripts/shared/Form/hooks/useFormsScript.ts","webpack://leadin/./scripts/shared/Meeting/MeetingController.tsx","webpack://leadin/./scripts/shared/Meeting/MeetingEdit.tsx","webpack://leadin/./scripts/shared/Meeting/MeetingSelector.tsx","webpack://leadin/./scripts/shared/Meeting/MeetingWarning.tsx","webpack://leadin/./scripts/shared/Meeting/PreviewMeeting.tsx","webpack://leadin/./scripts/shared/Meeting/constants.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useCurrentUserFetch.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useMeetings.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useMeetingsFetch.ts","webpack://leadin/./scripts/shared/Meeting/hooks/useMeetingsScript.ts","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts","webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx","webpack://leadin/./scripts/shared/UIComponents/colors.ts","webpack://leadin/./scripts/shared/enums/connectionStatus.ts","webpack://leadin/./scripts/shared/enums/loadState.ts","webpack://leadin/./scripts/utils/appUtils.ts","webpack://leadin/./scripts/utils/backgroundAppUtils.ts","webpack://leadin/./scripts/utils/withMetaData.ts","webpack://leadin/./node_modules/is-what/dist/index.esm.js","webpack://leadin/./node_modules/lodash/_Symbol.js","webpack://leadin/./node_modules/lodash/_baseGetTag.js","webpack://leadin/./node_modules/lodash/_baseTrim.js","webpack://leadin/./node_modules/lodash/_freeGlobal.js","webpack://leadin/./node_modules/lodash/_getRawTag.js","webpack://leadin/./node_modules/lodash/_objectToString.js","webpack://leadin/./node_modules/lodash/_root.js","webpack://leadin/./node_modules/lodash/_trimmedEndIndex.js","webpack://leadin/./node_modules/lodash/debounce.js","webpack://leadin/./node_modules/lodash/isObject.js","webpack://leadin/./node_modules/lodash/isObjectLike.js","webpack://leadin/./node_modules/lodash/isSymbol.js","webpack://leadin/./node_modules/lodash/now.js","webpack://leadin/./node_modules/lodash/toNumber.js","webpack://leadin/./node_modules/memoize-one/dist/memoize-one.esm.js","webpack://leadin/./node_modules/merge-anything/dist/index.esm.js","webpack://leadin/./scripts/gutenberg/UIComponents/UIImage.ts?e01f","webpack://leadin/./scripts/shared/Common/AsyncSelect.tsx?df11","webpack://leadin/./scripts/shared/Common/HubspotWrapper.ts?a346","webpack://leadin/./scripts/shared/UIComponents/UIAlert.tsx?0f15","webpack://leadin/./scripts/shared/UIComponents/UIButton.ts?d089","webpack://leadin/./scripts/shared/UIComponents/UIContainer.ts?e576","webpack://leadin/./scripts/shared/UIComponents/UIOverlay.ts?c9f9","webpack://leadin/./scripts/shared/UIComponents/UISpacer.ts?8e1e","webpack://leadin/./scripts/shared/UIComponents/UISpinner.tsx?4a02","webpack://leadin/./node_modules/object-assign/index.js","webpack://leadin/./node_modules/prop-types/checkPropTypes.js","webpack://leadin/./node_modules/prop-types/factoryWithTypeCheckers.js","webpack://leadin/./node_modules/prop-types/index.js","webpack://leadin/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://leadin/./node_modules/prop-types/lib/has.js","webpack://leadin/./node_modules/raven-js/src/configError.js","webpack://leadin/./node_modules/raven-js/src/console.js","webpack://leadin/./node_modules/raven-js/src/raven.js","webpack://leadin/./node_modules/raven-js/src/singleton.js","webpack://leadin/./node_modules/raven-js/src/utils.js","webpack://leadin/./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack://leadin/./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack://leadin/./node_modules/react-is/cjs/react-is.development.js","webpack://leadin/./node_modules/react-is/index.js","webpack://leadin/./node_modules/react/cjs/react-jsx-runtime.development.js","webpack://leadin/./node_modules/react/jsx-runtime.js","webpack://leadin/./node_modules/styled-components/dist/styled-components.browser.esm.js","webpack://leadin/./node_modules/stylis-rule-sheet/index.js","webpack://leadin/./node_modules/stylis/stylis.min.js","webpack://leadin/external window \"React\"","webpack://leadin/external window \"jQuery\"","webpack://leadin/external window [\"wp\",\"blocks\"]","webpack://leadin/external window [\"wp\",\"components\"]","webpack://leadin/external window [\"wp\",\"data\"]","webpack://leadin/external window [\"wp\",\"editPost\"]","webpack://leadin/external window [\"wp\",\"element\"]","webpack://leadin/external window [\"wp\",\"i18n\"]","webpack://leadin/external window [\"wp\",\"plugins\"]","webpack://leadin/./node_modules/@linaria/react/dist/index.mjs","webpack://leadin/./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs","webpack://leadin/webpack/bootstrap","webpack://leadin/webpack/runtime/compat get default export","webpack://leadin/webpack/runtime/define property getters","webpack://leadin/webpack/runtime/global","webpack://leadin/webpack/runtime/hasOwnProperty shorthand","webpack://leadin/webpack/runtime/make namespace object","webpack://leadin/webpack/runtime/nonce","webpack://leadin/./scripts/entries/gutenberg.ts"],"sourcesContent":["import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","import { __ } from '@wordpress/i18n';\nconst REGISTRATION_FORM = 'REGISTRATION_FORM';\nconst CONTACT_US_FORM = 'CONTACT_US_FORM';\nconst NEWSLETTER_FORM = 'NEWSLETTER_FORM';\nconst SUPPORT_FORM = 'SUPPORT_FORM';\nconst EVENT_FORM = 'EVENT_FORM';\nexport const DEFAULT_OPTIONS = {\n label: __('Templates', 'leadin'),\n options: [\n { label: __('Registration Form', 'leadin'), value: REGISTRATION_FORM },\n { label: __('Contact us Form', 'leadin'), value: CONTACT_US_FORM },\n { label: __('Newsletter sign-up Form', 'leadin'), value: NEWSLETTER_FORM },\n { label: __('Support Form', 'leadin'), value: SUPPORT_FORM },\n { label: __('Event Registration Form', 'leadin'), value: EVENT_FORM },\n ],\n};\nexport function isDefaultForm(value) {\n return (value === REGISTRATION_FORM ||\n value === CONTACT_US_FORM ||\n value === NEWSLETTER_FORM ||\n value === SUPPORT_FORM ||\n value === EVENT_FORM);\n}\n","const { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, locale, loginUrl, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, } = window.leadinConfig;\nexport { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, loginUrl, locale, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, };\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function CalendarIcon() {\n return (_jsxs(\"svg\", { width: \"18\", height: \"18\", viewBox: \"0 0 18 18\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", children: [_jsx(\"g\", { clipPath: \"url(#clip0_903_1965)\", children: _jsx(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M13.519 2.48009H15.069H15.0697C16.2619 2.48719 17.2262 3.45597 17.2262 4.65016V12.7434C17.223 12.9953 17.1203 13.2226 16.9549 13.3886L12.6148 17.7287C12.4488 17.8941 12.2214 17.9968 11.9689 18H3.29508C2.09637 18 1.125 17.0286 1.125 15.8299V4.65016C1.125 3.45404 2.09314 2.48396 3.28862 2.48009H4.83867V0.930032C4.83867 0.416577 5.25525 0 5.7687 0C6.28216 0 6.69874 0.416577 6.69874 0.930032V2.48009H11.6589V0.930032C11.6589 0.416577 12.0755 0 12.5889 0C13.1024 0 13.519 0.416577 13.519 0.930032V2.48009ZM2.98506 15.8312C2.99863 15.9882 3.12909 16.1115 3.28862 16.1141H11.5814L11.6589 16.0366V13.634C11.6589 12.9494 12.2143 12.394 12.899 12.394H15.2951L15.3726 12.3165V7.4338H2.98506V15.8312ZM4.83868 8.68029H6.07873H6.07937C6.42684 8.68029 6.71037 8.95478 6.72458 9.30032V14.2863C6.72458 14.6428 6.43524 14.9322 6.07873 14.9322H4.83868C4.48217 14.9322 4.19283 14.6428 4.19283 14.2863V9.32615C4.19283 8.96964 4.48217 8.68029 4.83868 8.68029ZM8.53298 8.68029H9.82469H9.82534C10.1728 8.68029 10.4563 8.95478 10.4705 9.30032V14.2863C10.4705 14.6428 10.1812 14.9322 9.82469 14.9322H8.53298C8.17647 14.9322 7.88712 14.6428 7.88712 14.2863V9.32615C7.88712 8.96964 8.17647 8.68029 8.53298 8.68029ZM13.519 8.68029H12.2789C11.9366 8.68029 11.6589 8.95801 11.6589 9.30032V10.5404C11.6589 10.8827 11.9366 11.1604 12.2789 11.1604H13.519C13.8613 11.1604 14.139 10.8827 14.139 10.5404V9.30032C14.139 8.95801 13.8613 8.68029 13.519 8.68029Z\", fill: \"#FF7A59\" }) }), _jsx(\"defs\", { children: _jsx(\"clipPath\", { id: \"clip0_903_1965\", children: _jsx(\"rect\", { width: \"18\", height: \"18\", fill: \"white\" }) }) })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function SidebarSprocketIcon() {\n return (_jsx(\"svg\", { width: \"20px\", height: \"20px\", version: \"1.1\", viewBox: \"0 0 40 42\", xmlns: \"http://www.w3.org/2000/svg\", xmlnsXlink: \"http://www.w3.org/1999/xlink\", children: _jsx(\"path\", { d: \"M28.8989809,30.0402293 C25.817707,30.0402293 23.319363,27.5423949 23.319363,24.461121 C23.319363,21.3798471 25.817707,18.881758 28.8989809,18.881758 C31.98,18.881758 34.4780892,21.3798471 34.4780892,24.461121 C34.4780892,27.5423949 31.98,30.0402293 28.8989809,30.0402293 M30.5692994,13.7199745 L30.5692994,8.75717196 C31.864586,8.14519744 32.7723567,6.8346242 32.7723567,5.31360508 L32.7723567,5.1989554 C32.7723567,3.10010191 31.0546497,1.38264968 28.956051,1.38264968 L28.8414013,1.38264968 C26.7425478,1.38264968 25.0248408,3.10010191 25.0248408,5.1989554 L25.0248408,5.31360508 C25.0248408,6.8346242 25.9328662,8.14519744 27.2281529,8.75717196 L27.2281529,13.7202293 C25.2994904,14.0180637 23.5371974,14.8137325 22.0829299,15.9844331 L8.45643312,5.38417836 C8.54611464,5.0392102 8.6090446,4.6835414 8.60955416,4.310293 C8.61261148,1.93271338 6.68777072,0.00303184713 4.31019108,-2.5477707e-05 C1.93286624,-0.00308280255 0.0029299363,1.92175796 0.000127388535,4.29933756 C-0.0029299363,6.67666244 1.92191083,8.60634396 4.29949044,8.60940128 C5.07426752,8.6104204 5.7912102,8.390293 6.42,8.03284076 L19.8243312,18.4603567 C18.6842038,20.181121 18.0166879,22.2422675 18.0166879,24.461121 C18.0166879,26.7841784 18.7504458,28.9327134 19.9907006,30.7001019 L15.9142675,34.776535 C15.5919745,34.6799745 15.2574522,34.6122038 14.9033121,34.6122038 C12.9499363,34.6122038 11.3659873,36.1961529 11.3659873,38.1497834 C11.3659873,40.103414 12.9499363,41.6871084 14.9033121,41.6871084 C16.8571974,41.6871084 18.4408917,40.103414 18.4408917,38.1497834 C18.4408917,37.7958981 18.3733758,37.461121 18.2765605,37.1390828 L22.3089172,33.1067261 C24.1392357,34.5041784 26.4184713,35.3431592 28.8989809,35.3431592 C34.9089172,35.3431592 39.7810191,30.4710573 39.7810191,24.461121 C39.7810191,19.0203567 35.7840764,14.5255796 30.5692994,13.7199745\", id: \"Fill-1\", fillRule: \"evenodd\" }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function SprocketIcon() {\n return (_jsxs(\"svg\", { width: \"40px\", height: \"42px\", viewBox: \"0 0 40 42\", version: \"1.1\", xmlns: \"http://www.w3.org/2000/svg\", xmlnsXlink: \"http://www.w3.org/1999/xlink\", children: [_jsx(\"defs\", { children: _jsx(\"polygon\", { id: \"path-1\", points: \"0.000123751494 0 39.7808917 0 39.7808917 41.6871084 0.000123751494 41.6871084\" }) }), _jsx(\"g\", { id: \"Page-1\", stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\", children: _jsxs(\"g\", { id: \"HubSpot-Sprocket---Full-Color\", children: [_jsx(\"mask\", { id: \"mask-2\", fill: \"white\", children: _jsx(\"use\", { xlinkHref: \"#path-1\" }) }), _jsx(\"g\", { id: \"path-1\" }), _jsx(\"path\", { d: \"M28.8989809,30.0402293 C25.817707,30.0402293 23.319363,27.5423949 23.319363,24.461121 C23.319363,21.3798471 25.817707,18.881758 28.8989809,18.881758 C31.98,18.881758 34.4780892,21.3798471 34.4780892,24.461121 C34.4780892,27.5423949 31.98,30.0402293 28.8989809,30.0402293 M30.5692994,13.7199745 L30.5692994,8.75717196 C31.864586,8.14519744 32.7723567,6.8346242 32.7723567,5.31360508 L32.7723567,5.1989554 C32.7723567,3.10010191 31.0546497,1.38264968 28.956051,1.38264968 L28.8414013,1.38264968 C26.7425478,1.38264968 25.0248408,3.10010191 25.0248408,5.1989554 L25.0248408,5.31360508 C25.0248408,6.8346242 25.9328662,8.14519744 27.2281529,8.75717196 L27.2281529,13.7202293 C25.2994904,14.0180637 23.5371974,14.8137325 22.0829299,15.9844331 L8.45643312,5.38417836 C8.54611464,5.0392102 8.6090446,4.6835414 8.60955416,4.310293 C8.61261148,1.93271338 6.68777072,0.00303184713 4.31019108,-2.5477707e-05 C1.93286624,-0.00308280255 0.0029299363,1.92175796 0.000127388535,4.29933756 C-0.0029299363,6.67666244 1.92191083,8.60634396 4.29949044,8.60940128 C5.07426752,8.6104204 5.7912102,8.390293 6.42,8.03284076 L19.8243312,18.4603567 C18.6842038,20.181121 18.0166879,22.2422675 18.0166879,24.461121 C18.0166879,26.7841784 18.7504458,28.9327134 19.9907006,30.7001019 L15.9142675,34.776535 C15.5919745,34.6799745 15.2574522,34.6122038 14.9033121,34.6122038 C12.9499363,34.6122038 11.3659873,36.1961529 11.3659873,38.1497834 C11.3659873,40.103414 12.9499363,41.6871084 14.9033121,41.6871084 C16.8571974,41.6871084 18.4408917,40.103414 18.4408917,38.1497834 C18.4408917,37.7958981 18.3733758,37.461121 18.2765605,37.1390828 L22.3089172,33.1067261 C24.1392357,34.5041784 26.4184713,35.3431592 28.8989809,35.3431592 C34.9089172,35.3431592 39.7810191,30.4710573 39.7810191,24.461121 C39.7810191,19.0203567 35.7840764,14.5255796 30.5692994,13.7199745\", id: \"Fill-1\", fill: \"#F3785B\", fillRule: \"nonzero\", mask: \"url(#mask-2)\" })] }) })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { RawHTML } from '@wordpress/element';\nexport default function FormSaveBlock({ attributes }) {\n const { portalId, formId } = attributes;\n if (portalId && formId) {\n return (_jsx(RawHTML, { className: \"wp-block-leadin-hubspot-form-block\", children: `[hubspot portal=\"${portalId}\" id=\"${formId}\" type=\"form\"]` }));\n }\n return null;\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport UIImage from '../UIComponents/UIImage';\nexport default function FormGutenbergPreview() {\n return (_jsx(Fragment, { children: _jsx(UIImage, { alt: \"Create a new Hubspot Form\", src: `${pluginPath}/public/assets/images/hubspot-form.png` }) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as WpBlocksApi from '@wordpress/blocks';\nimport SprocketIcon from '../Common/SprocketIcon';\nimport FormBlockSave from './FormBlockSave';\nimport { connectionStatus } from '../../constants/leadinConfig';\nimport FormGutenbergPreview from './FormGutenbergPreview';\nimport ErrorHandler from '../../shared/Common/ErrorHandler';\nimport FormEdit from '../../shared/Form/FormEdit';\nimport ConnectionStatus from '../../shared/enums/connectionStatus';\nimport { __ } from '@wordpress/i18n';\nimport { isFullSiteEditor } from '../../utils/withMetaData';\nexport default function registerFormBlock() {\n const editComponent = (props) => {\n if (props.attributes.preview) {\n return _jsx(FormGutenbergPreview, {});\n }\n else if (connectionStatus === ConnectionStatus.Connected) {\n return _jsx(FormEdit, { ...props, origin: \"gutenberg\", preview: true });\n }\n else {\n return _jsx(ErrorHandler, { status: 401 });\n }\n };\n // We do not support the full site editor: https://issues.hubspotcentral.com/browse/WP-1033\n if (!WpBlocksApi || isFullSiteEditor()) {\n return null;\n }\n WpBlocksApi.registerBlockType('leadin/hubspot-form-block', {\n title: __('HubSpot Form', 'leadin'),\n description: __('Select and embed a HubSpot form', 'leadin'),\n icon: SprocketIcon,\n category: 'leadin-blocks',\n attributes: {\n portalId: {\n type: 'string',\n default: '',\n },\n formId: {\n type: 'string',\n },\n formName: {\n type: 'string',\n },\n preview: {\n type: 'boolean',\n default: false,\n },\n },\n example: {\n attributes: {\n preview: true,\n },\n },\n edit: editComponent,\n save: props => _jsx(FormBlockSave, { ...props }),\n });\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport UIImage from '../UIComponents/UIImage';\nexport default function MeetingGutenbergPreview() {\n return (_jsx(Fragment, { children: _jsx(UIImage, { alt: \"Create a new Hubspot Meeting\", width: \"100%\", src: `${pluginPath}/public/assets/images/hubspot-meetings.png` }) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { RawHTML } from '@wordpress/element';\nexport default function MeetingSaveBlock({ attributes, }) {\n const { url } = attributes;\n if (url) {\n return (_jsx(RawHTML, { className: \"wp-block-leadin-hubspot-meeting-block\", children: `[hubspot url=\"${url}\" type=\"meeting\"]` }));\n }\n return null;\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as WpBlocksApi from '@wordpress/blocks';\nimport CalendarIcon from '../Common/CalendarIcon';\nimport { connectionStatus } from '../../constants/leadinConfig';\nimport MeetingGutenbergPreview from './MeetingGutenbergPreview';\nimport MeetingSaveBlock from './MeetingSaveBlock';\nimport MeetingEdit from '../../shared/Meeting/MeetingEdit';\nimport ErrorHandler from '../../shared/Common/ErrorHandler';\nimport { __ } from '@wordpress/i18n';\nimport { isFullSiteEditor } from '../../utils/withMetaData';\nconst ConnectionStatus = {\n Connected: 'Connected',\n NotConnected: 'NotConnected',\n};\nexport default function registerMeetingBlock() {\n const editComponent = (props) => {\n if (props.attributes.preview) {\n return _jsx(MeetingGutenbergPreview, {});\n }\n else if (connectionStatus === ConnectionStatus.Connected) {\n return _jsx(MeetingEdit, { ...props, preview: true, origin: \"gutenberg\" });\n }\n else {\n return _jsx(ErrorHandler, { status: 401 });\n }\n };\n // We do not support the full site editor: https://issues.hubspotcentral.com/browse/WP-1033\n if (!WpBlocksApi || isFullSiteEditor()) {\n return null;\n }\n WpBlocksApi.registerBlockType('leadin/hubspot-meeting-block', {\n title: __('Hubspot Meetings Scheduler', 'leadin'),\n description: __('Schedule meetings faster and forget the back-and-forth emails Your calendar stays full, and you stay productive', 'leadin'),\n icon: CalendarIcon,\n category: 'leadin-blocks',\n attributes: {\n url: {\n type: 'string',\n default: '',\n },\n preview: {\n type: 'boolean',\n default: false,\n },\n },\n example: {\n attributes: {\n preview: true,\n },\n },\n edit: editComponent,\n save: props => _jsx(MeetingSaveBlock, { ...props }),\n });\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as WpPluginsLib from '@wordpress/plugins';\nimport { PluginSidebar } from '@wordpress/edit-post';\nimport { PanelBody, Icon } from '@wordpress/components';\nimport { withSelect } from '@wordpress/data';\nimport UISidebarSelectControl from '../UIComponents/UISidebarSelectControl';\nimport SidebarSprocketIcon from '../Common/SidebarSprocketIcon';\nimport styled from 'styled-components';\nimport { __ } from '@wordpress/i18n';\nimport { BackgroudAppContext } from '../../iframe/useBackgroundApp';\nimport { refreshToken } from '../../constants/leadinConfig';\nimport { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils';\nexport function registerHubspotSidebar() {\n const ContentTypeLabelStyle = styled.div `\n white-space: normal;\n text-transform: none;\n `;\n const ContentTypeLabel = (_jsx(ContentTypeLabelStyle, { children: __('Select the content type HubSpot Analytics uses to track this page', 'leadin') }));\n const LeadinPluginSidebar = ({ postType }) => postType ? (_jsx(PluginSidebar, { name: \"leadin\", title: \"HubSpot\", icon: _jsx(Icon, { className: \"hs-plugin-sidebar-sprocket\", icon: SidebarSprocketIcon() }), children: _jsx(PanelBody, { title: __('HubSpot Analytics', 'leadin'), initialOpen: true, children: _jsx(BackgroudAppContext.Provider, { value: refreshToken && getOrCreateBackgroundApp(refreshToken), children: _jsx(UISidebarSelectControl, { metaKey: \"content-type\", className: \"select-content-type\", label: ContentTypeLabel, options: [\n { label: __('Detect Automatically', 'leadin'), value: '' },\n { label: __('Blog Post', 'leadin'), value: 'blog-post' },\n {\n label: __('Knowledge Article', 'leadin'),\n value: 'knowledge-article',\n },\n { label: __('Landing Page', 'leadin'), value: 'landing-page' },\n { label: __('Listing Page', 'leadin'), value: 'listing-page' },\n {\n label: __('Standard Page', 'leadin'),\n value: 'standard-page',\n },\n ] }) }) }) })) : null;\n const LeadinPluginSidebarWrapper = withSelect((select) => {\n const data = select('core/editor');\n return {\n postType: data &&\n data.getCurrentPostType() &&\n data.getEditedPostAttribute('meta'),\n };\n })(LeadinPluginSidebar);\n if (WpPluginsLib) {\n WpPluginsLib.registerPlugin('leadin', {\n render: LeadinPluginSidebarWrapper,\n icon: SidebarSprocketIcon,\n });\n }\n}\n","import { styled } from '@linaria/react';\nexport default styled.img `\n height: ${props => (props.height ? props.height : 'auto')};\n width: ${props => (props.width ? props.width : 'auto')};\n`;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { SelectControl } from '@wordpress/components';\nimport withMetaData from '../../utils/withMetaData';\nimport { useBackgroundAppContext, usePostBackgroundMessage, } from '../../iframe/useBackgroundApp';\nimport { ProxyMessages } from '../../iframe/integratedMessages';\nconst UISidebarSelectControl = (props) => {\n const isBackgroundAppReady = useBackgroundAppContext();\n const monitorSidebarMetaChange = usePostBackgroundMessage();\n return (_jsx(SelectControl, { value: props.metaValue, onChange: content => {\n if (props.setMetaValue) {\n props.setMetaValue(content);\n }\n isBackgroundAppReady &&\n monitorSidebarMetaChange({\n key: ProxyMessages.TrackSidebarMetaChange,\n payload: {\n metaKey: props.metaKey,\n },\n });\n }, ...props }));\n};\nexport default withMetaData(UISidebarSelectControl);\n","export const CoreMessages = {\n HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED',\n SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN',\n ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME',\n RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME',\n SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE',\n SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID',\n};\n","export const FormMessages = {\n CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION',\n};\n","export * from './core/CoreMessages';\nexport * from './forms/FormsMessages';\nexport * from './livechat/LiveChatMessages';\nexport * from './plugin/PluginMessages';\nexport * from './proxy/ProxyMessages';\n","export const LiveChatMessages = {\n CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION',\n};\n","export const PluginMessages = {\n PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION',\n PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG',\n TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT',\n InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST',\n InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE',\n InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR',\n InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST',\n InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR',\n BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST',\n BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE',\n BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR',\n BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST',\n BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR',\n SkipReviewRequest: 'SKIP_REVIEW_REQUEST',\n SkipReviewResponse: 'SKIP_REVIEW_RESPONSE',\n SkipReviewError: 'SKIP_REVIEW_ERROR',\n RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM',\n ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST',\n ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE',\n ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR',\n ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST',\n ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE',\n ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR',\n};\n","export const ProxyMessages = {\n FetchForms: 'FETCH_FORMS',\n FetchForm: 'FETCH_FORM',\n CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE',\n FetchAuth: 'FETCH_AUTH',\n FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS',\n FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION',\n FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER',\n ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR',\n TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER',\n TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE',\n TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED',\n TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER',\n TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE',\n TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER',\n TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION',\n TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED',\n TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION',\n};\n","import { createContext, useContext } from 'react';\nexport const BackgroudAppContext = createContext(null);\nexport function useBackgroundAppContext() {\n return useContext(BackgroudAppContext);\n}\nexport function usePostBackgroundMessage() {\n const app = useBackgroundAppContext();\n return (message) => {\n app.postMessage(message);\n };\n}\nexport function usePostAsyncBackgroundMessage() {\n const app = useBackgroundAppContext();\n return (message) => app.postAsyncMessage(message);\n}\n","import Raven from 'raven-js';\nimport { hubspotBaseUrl, phpVersion, wpVersion, leadinPluginVersion, portalId, plugins, } from '../constants/leadinConfig';\nexport function configureRaven() {\n if (hubspotBaseUrl.indexOf('app.hubspot.com') === -1) {\n return;\n }\n Raven.config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', {\n instrument: {\n tryCatch: false,\n },\n release: leadinPluginVersion,\n }).install();\n Raven.setTagsContext({\n v: leadinPluginVersion,\n php: phpVersion,\n wordpress: wpVersion,\n });\n Raven.setExtraContext({\n hub: portalId,\n plugins: Object.keys(plugins)\n .map(name => `${name}#${plugins[name]}`)\n .join(','),\n });\n}\nexport default Raven;\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useRef, useState, useEffect } from 'react';\nimport { styled } from '@linaria/react';\nimport { CALYPSO, CALYPSO_LIGHT, CALYPSO_MEDIUM, OBSIDIAN, } from '../UIComponents/colors';\nimport UISpinner from '../UIComponents/UISpinner';\nimport LoadState from '../enums/loadState';\nconst Container = styled.div `\n color: ${OBSIDIAN};\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n position: relative;\n`;\nconst ControlContainer = styled.div `\n align-items: center;\n background-color: hsl(0, 0%, 100%);\n border-color: hsl(0, 0%, 80%);\n border-radius: 4px;\n border-style: solid;\n border-width: ${props => (props.focused ? '0' : '1px')};\n cursor: default;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n min-height: 38px;\n outline: 0 !important;\n position: relative;\n transition: all 100ms;\n box-sizing: border-box;\n box-shadow: ${props => props.focused ? `0 0 0 2px ${CALYPSO_MEDIUM}` : 'none'};\n &:hover {\n border-color: hsl(0, 0%, 70%);\n }\n`;\nconst ValueContainer = styled.div `\n align-items: center;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n padding: 2px 8px;\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n`;\nconst Placeholder = styled.div `\n color: hsl(0, 0%, 50%);\n margin-left: 2px;\n margin-right: 2px;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n font-size: 16px;\n`;\nconst SingleValue = styled.div `\n color: hsl(0, 0%, 20%);\n margin-left: 2px;\n margin-right: 2px;\n max-width: calc(100% - 8px);\n overflow: hidden;\n position: absolute;\n text-overflow: ellipsis;\n white-space: nowrap;\n top: 50%;\n transform: translateY(-50%);\n box-sizing: border-box;\n`;\nconst IndicatorContainer = styled.div `\n align-items: center;\n align-self: stretch;\n display: flex;\n flex-shrink: 0;\n box-sizing: border-box;\n`;\nconst DropdownIndicator = styled.div `\n border-top: 8px solid ${CALYPSO};\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n width: 0px;\n height: 0px;\n margin: 10px;\n`;\nconst InputContainer = styled.div `\n margin: 2px;\n padding-bottom: 2px;\n padding-top: 2px;\n visibility: visible;\n color: hsl(0, 0%, 20%);\n box-sizing: border-box;\n`;\nconst Input = styled.input `\n box-sizing: content-box;\n background: rgba(0, 0, 0, 0) none repeat scroll 0px center;\n border: 0px none;\n font-size: inherit;\n opacity: 1;\n outline: currentcolor none 0px;\n padding: 0px;\n color: inherit;\n font-family: inherit;\n`;\nconst InputShadow = styled.div `\n position: absolute;\n opacity: 0;\n font-size: inherit;\n`;\nconst MenuContainer = styled.div `\n position: absolute;\n top: 100%;\n background-color: #fff;\n border-radius: 4px;\n margin-bottom: 8px;\n margin-top: 8px;\n z-index: 9999;\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1);\n width: 100%;\n`;\nconst MenuList = styled.div `\n max-height: 300px;\n overflow-y: auto;\n padding-bottom: 4px;\n padding-top: 4px;\n position: relative;\n`;\nconst MenuGroup = styled.div `\n padding-bottom: 8px;\n padding-top: 8px;\n`;\nconst MenuGroupHeader = styled.div `\n color: #999;\n cursor: default;\n font-size: 75%;\n font-weight: 500;\n margin-bottom: 0.25em;\n text-transform: uppercase;\n padding-left: 12px;\n padding-left: 12px;\n`;\nconst MenuItem = styled.div `\n display: block;\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : 'transparent'};\n color: ${props => (props.selected ? '#fff' : 'inherit')};\n cursor: default;\n font-size: inherit;\n width: 100%;\n padding: 8px 12px;\n &:hover {\n background-color: ${props => props.selected ? CALYPSO_MEDIUM : CALYPSO_LIGHT};\n }\n`;\nexport default function AsyncSelect({ placeholder, value, loadOptions, onChange, defaultOptions, }) {\n const inputEl = useRef(null);\n const inputShadowEl = useRef(null);\n const [isFocused, setFocus] = useState(false);\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [localValue, setLocalValue] = useState('');\n const [options, setOptions] = useState(defaultOptions);\n const inputSize = `${inputShadowEl.current ? inputShadowEl.current.clientWidth + 10 : 2}px`;\n useEffect(() => {\n if (loadOptions && loadState === LoadState.NotLoaded) {\n loadOptions('', (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }\n }, [loadOptions, loadState]);\n const renderItems = (items = [], parentKey) => {\n return items.map((item, index) => {\n if (item.options) {\n return (_jsxs(MenuGroup, { children: [_jsx(MenuGroupHeader, { id: `${index}-heading`, children: item.label }), _jsx(\"div\", { children: renderItems(item.options, index) })] }, `async-select-item-${index}`));\n }\n else {\n const key = `async-select-item-${parentKey !== undefined ? `${parentKey}-${index}` : index}`;\n return (_jsx(MenuItem, { id: key, selected: value && item.value === value.value, onClick: () => {\n onChange(item);\n setFocus(false);\n }, children: item.label }, key));\n }\n });\n };\n return (_jsxs(Container, { children: [_jsxs(ControlContainer, { id: \"leadin-async-selector\", focused: isFocused, onClick: () => {\n if (isFocused) {\n if (inputEl.current) {\n inputEl.current.blur();\n }\n setFocus(false);\n setLocalValue('');\n }\n else {\n if (inputEl.current) {\n inputEl.current.focus();\n }\n setFocus(true);\n }\n }, children: [_jsxs(ValueContainer, { children: [localValue === '' &&\n (!value ? (_jsx(Placeholder, { children: placeholder })) : (_jsx(SingleValue, { children: value.label }))), _jsxs(InputContainer, { children: [_jsx(Input, { ref: inputEl, onFocus: () => {\n setFocus(true);\n }, onChange: e => {\n setLocalValue(e.target.value);\n setLoadState(LoadState.Loading);\n loadOptions &&\n loadOptions(e.target.value, (result) => {\n setOptions(result);\n setLoadState(LoadState.Idle);\n });\n }, value: localValue, width: inputSize, id: \"asycn-select-input\" }), _jsx(InputShadow, { ref: inputShadowEl, children: localValue })] })] }), _jsxs(IndicatorContainer, { children: [loadState === LoadState.Loading && _jsx(UISpinner, {}), _jsx(DropdownIndicator, {})] })] }), isFocused && (_jsx(MenuContainer, { children: _jsx(MenuList, { children: renderItems(options) }) }))] }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport UIButton from '../UIComponents/UIButton';\nimport UIContainer from '../UIComponents/UIContainer';\nimport HubspotWrapper from './HubspotWrapper';\nimport { adminUrl, redirectNonce } from '../../constants/leadinConfig';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport { __ } from '@wordpress/i18n';\nfunction redirectToPlugin() {\n window.location.href = `${adminUrl}admin.php?page=leadin&leadin_expired=${redirectNonce}`;\n}\nexport default function ErrorHandler({ status, resetErrorState, errorInfo = { header: '', message: '', action: '' }, }) {\n const isUnauthorized = status === 401 || status === 403;\n const errorHeader = isUnauthorized\n ? __(\"Your plugin isn't authorized\", 'leadin')\n : errorInfo.header;\n const errorMessage = isUnauthorized\n ? __('Reauthorize your plugin to access your free HubSpot tools', 'leadin')\n : errorInfo.message;\n return (_jsx(HubspotWrapper, { pluginPath: pluginPath, children: _jsxs(UIContainer, { textAlign: \"center\", children: [_jsx(\"h4\", { children: errorHeader }), _jsx(\"p\", { children: _jsx(\"b\", { children: errorMessage }) }), isUnauthorized ? (_jsx(UIButton, { \"data-test-id\": \"authorize-button\", onClick: redirectToPlugin, children: __('Go to plugin', 'leadin') })) : (_jsx(UIButton, { \"data-test-id\": \"retry-button\", onClick: resetErrorState, children: errorInfo.action }))] }) }));\n}\n","import { styled } from '@linaria/react';\nexport default styled.div `\n background-image: ${props => `url(${props.pluginPath}/public/assets/images/hubspot.svg)`};\n background-color: #f5f8fa;\n background-repeat: no-repeat;\n background-position: center 25px;\n background-size: 120px;\n color: #33475b;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-size: 14px;\n\n padding: ${(props) => props.padding || '90px 20% 25px'};\n\n p {\n font-size: inherit !important;\n line-height: 24px;\n margin: 4px 0;\n }\n`;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport HubspotWrapper from './HubspotWrapper';\nimport UISpinner from '../UIComponents/UISpinner';\nimport { pluginPath } from '../../constants/leadinConfig';\nexport default function LoadingBlock() {\n return (_jsx(HubspotWrapper, { pluginPath: pluginPath, children: _jsx(UISpinner, { size: 50 }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment, useEffect } from 'react';\nimport { portalId, refreshToken } from '../../constants/leadinConfig';\nimport UISpacer from '../UIComponents/UISpacer';\nimport PreviewForm from './PreviewForm';\nimport FormSelect from './FormSelect';\nimport { usePostBackgroundMessage, BackgroudAppContext, useBackgroundAppContext, } from '../../iframe/useBackgroundApp';\nimport { ProxyMessages } from '../../iframe/integratedMessages';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils';\nfunction FormEdit({ attributes, isSelected, setAttributes, preview = true, origin = 'gutenberg', }) {\n const { formId, formName } = attributes;\n const formSelected = portalId && formId;\n const isBackgroundAppReady = useBackgroundAppContext();\n const monitorFormPreviewRender = usePostBackgroundMessage();\n const handleChange = (selectedForm) => {\n setAttributes({\n portalId,\n formId: selectedForm.value,\n formName: selectedForm.label,\n });\n };\n useEffect(() => {\n monitorFormPreviewRender({\n key: ProxyMessages.TrackFormPreviewRender,\n payload: {\n origin,\n },\n });\n }, [origin]);\n return !isBackgroundAppReady ? (_jsx(LoadingBlock, {})) : (_jsxs(Fragment, { children: [(isSelected || !formSelected) && (_jsx(FormSelect, { formId: formId, formName: formName, handleChange: handleChange, origin: origin })), formSelected && (_jsxs(Fragment, { children: [isSelected && _jsx(UISpacer, {}), preview && _jsx(PreviewForm, { portalId: portalId, formId: formId })] }))] }));\n}\nexport default function FormEditContainer(props) {\n return (_jsx(BackgroudAppContext.Provider, { value: refreshToken && getOrCreateBackgroundApp(refreshToken), children: _jsx(FormEdit, { ...props }) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport FormSelector from './FormSelector';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport { __ } from '@wordpress/i18n';\nimport useForms from './hooks/useForms';\nimport useCreateFormFromTemplate from './hooks/useCreateFormFromTemplate';\nimport { isDefaultForm } from '../../constants/defaultFormOptions';\nimport ErrorHandler from '../Common/ErrorHandler';\nexport default function FormSelect({ formId, formName, handleChange, origin = 'gutenberg', }) {\n const { search, formApiError, reset } = useForms();\n const { createFormByTemplate, reset: createReset, isCreating, hasError, formApiError: createApiError, } = useCreateFormFromTemplate(origin);\n const value = formId && formName\n ? {\n label: formName,\n value: formId,\n }\n : null;\n const handleLocalChange = (option) => {\n if (isDefaultForm(option.value)) {\n createFormByTemplate(option.value).then(({ guid, name }) => {\n handleChange({\n value: guid,\n label: name,\n });\n });\n }\n else {\n handleChange(option);\n }\n };\n return isCreating ? (_jsx(LoadingBlock, {})) : formApiError || createApiError ? (_jsx(ErrorHandler, { status: formApiError ? formApiError.status : createApiError.status, resetErrorState: () => {\n if (hasError) {\n createReset();\n }\n else {\n reset();\n }\n }, errorInfo: {\n header: __('There was a problem retrieving your forms', 'leadin'),\n message: __('Please refresh your forms or try again in a few minutes', 'leadin'),\n action: __('Refresh forms', 'leadin'),\n } })) : (_jsx(FormSelector, { loadOptions: search, onChange: (option) => handleLocalChange(option), value: value }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport HubspotWrapper from '../Common/HubspotWrapper';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport AsyncSelect from '../Common/AsyncSelect';\nimport { __ } from '@wordpress/i18n';\nexport default function FormSelector({ loadOptions, onChange, value, }) {\n return (_jsxs(HubspotWrapper, { pluginPath: pluginPath, children: [_jsx(\"p\", { \"data-test-id\": \"leadin-form-select\", children: _jsx(\"b\", { children: __('Select an existing form or create a new one from a template', 'leadin') }) }), _jsx(AsyncSelect, { placeholder: __('Search for a form', 'leadin'), value: value, loadOptions: loadOptions, onChange: onChange })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect, useRef } from 'react';\nimport UIOverlay from '../UIComponents/UIOverlay';\nimport { formsScriptPayload, hublet } from '../../constants/leadinConfig';\nimport useFormScript from './hooks/useFormsScript';\nexport default function PreviewForm({ portalId, formId, }) {\n const inputEl = useRef(null);\n const ready = useFormScript();\n useEffect(() => {\n if (!ready) {\n return;\n }\n if (inputEl.current) {\n inputEl.current.innerHTML = '';\n const embedScript = document.createElement('script');\n embedScript.innerHTML = `hbspt.forms.create({ portalId: '${portalId}', formId: '${formId}', region: '${hublet}', ${formsScriptPayload} });`;\n inputEl.current.appendChild(embedScript);\n }\n }, [formId, portalId, ready, inputEl]);\n return _jsx(UIOverlay, { ref: inputEl });\n}\n","import { useState } from 'react';\nimport { usePostAsyncBackgroundMessage, usePostBackgroundMessage, } from '../../../iframe/useBackgroundApp';\nimport LoadState from '../../enums/loadState';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nexport default function useCreateFormFromTemplate(origin = 'gutenberg') {\n const proxy = usePostAsyncBackgroundMessage();\n const track = usePostBackgroundMessage();\n const [loadState, setLoadState] = useState(LoadState.Idle);\n const [formApiError, setFormApiError] = useState(null);\n const createFormByTemplate = (type) => {\n setLoadState(LoadState.Loading);\n track({\n key: ProxyMessages.TrackFormCreatedFromTemplate,\n payload: {\n type,\n origin,\n },\n });\n return proxy({\n key: ProxyMessages.CreateFormFromTemplate,\n payload: type,\n })\n .then(form => {\n setLoadState(LoadState.Idle);\n return form;\n })\n .catch(err => {\n setFormApiError(err);\n track({\n key: ProxyMessages.TrackFormCreationFailed,\n payload: {\n origin,\n },\n });\n setLoadState(LoadState.Failed);\n });\n };\n return {\n isCreating: loadState === LoadState.Loading,\n hasError: loadState === LoadState.Failed,\n formApiError,\n createFormByTemplate,\n reset: () => setLoadState(LoadState.Idle),\n };\n}\n","import { useState } from 'react';\nimport debounce from 'lodash/debounce';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport { DEFAULT_OPTIONS } from '../../../constants/defaultFormOptions';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nexport default function useForms() {\n const proxy = usePostAsyncBackgroundMessage();\n const [formApiError, setFormApiError] = useState(null);\n const search = debounce((search, callback) => {\n return proxy({\n key: ProxyMessages.FetchForms,\n payload: {\n search,\n },\n })\n .then(forms => {\n callback([\n ...forms.map((form) => ({\n label: form.name,\n value: form.guid,\n })),\n DEFAULT_OPTIONS,\n ]);\n })\n .catch(error => {\n setFormApiError(error);\n });\n }, 300, { trailing: true });\n return {\n search,\n formApiError,\n reset: () => setFormApiError(null),\n };\n}\n","import $ from 'jquery';\nimport { useEffect, useState } from 'react';\nimport { formsScript } from '../../../constants/leadinConfig';\nimport Raven from '../../../lib/Raven';\nlet promise;\nfunction loadFormsScript() {\n if (!promise) {\n promise = new Promise((resolve, reject) => $.getScript(formsScript)\n .done(resolve)\n .fail(reject));\n }\n return promise;\n}\nexport default function useFormScript() {\n const [ready, setReady] = useState(false);\n useEffect(() => {\n loadFormsScript()\n .then(() => setReady(true))\n .catch(error => Raven.captureException(error));\n }, []);\n return ready;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment, useEffect } from 'react';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport MeetingSelector from './MeetingSelector';\nimport MeetingWarning from './MeetingWarning';\nimport useMeetings, { useSelectedMeeting, useSelectedMeetingCalendar, } from './hooks/useMeetings';\nimport HubspotWrapper from '../Common/HubspotWrapper';\nimport ErrorHandler from '../Common/ErrorHandler';\nimport { pluginPath } from '../../constants/leadinConfig';\nimport { __ } from '@wordpress/i18n';\nimport Raven from 'raven-js';\nexport default function MeetingController({ handleChange, url, }) {\n const { mappedMeetings: meetings, loading, error, reload, connectCalendar, } = useMeetings();\n const selectedMeetingOption = useSelectedMeeting(url);\n const selectedMeetingCalendar = useSelectedMeetingCalendar(url);\n useEffect(() => {\n if (!url && meetings.length > 0) {\n handleChange(meetings[0].value);\n }\n }, [meetings, url, handleChange]);\n const handleLocalChange = (option) => {\n handleChange(option.value);\n };\n const handleConnectCalendar = () => {\n return connectCalendar()\n .then(() => {\n reload();\n })\n .catch(error => {\n Raven.captureMessage('Unable to connect calendar', {\n extra: { error },\n });\n });\n };\n return (_jsx(Fragment, { children: loading ? (_jsx(LoadingBlock, {})) : error ? (_jsx(ErrorHandler, { status: (error && error.status) || error, resetErrorState: () => reload(), errorInfo: {\n header: __('There was a problem retrieving your meetings', 'leadin'),\n message: __('Please refresh your meetings or try again in a few minutes', 'leadin'),\n action: __('Refresh meetings', 'leadin'),\n } })) : (_jsxs(HubspotWrapper, { padding: \"90px 32px 24px\", pluginPath: pluginPath, children: [selectedMeetingCalendar && (_jsx(MeetingWarning, { status: selectedMeetingCalendar, onConnectCalendar: handleConnectCalendar })), meetings.length > 1 && (_jsx(MeetingSelector, { onChange: handleLocalChange, options: meetings, value: selectedMeetingOption }))] })) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment, useEffect } from 'react';\nimport MeetingController from './MeetingController';\nimport PreviewMeeting from './PreviewMeeting';\nimport { BackgroudAppContext, useBackgroundAppContext, usePostBackgroundMessage, } from '../../iframe/useBackgroundApp';\nimport { refreshToken } from '../../constants/leadinConfig';\nimport { ProxyMessages } from '../../iframe/integratedMessages';\nimport LoadingBlock from '../Common/LoadingBlock';\nimport { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils';\nfunction MeetingEdit({ attributes: { url }, isSelected, setAttributes, preview = true, origin = 'gutenberg', }) {\n const isBackgroundAppReady = useBackgroundAppContext();\n const monitorFormPreviewRender = usePostBackgroundMessage();\n const handleChange = (newUrl) => {\n setAttributes({\n url: newUrl,\n });\n };\n useEffect(() => {\n monitorFormPreviewRender({\n key: ProxyMessages.TrackMeetingPreviewRender,\n payload: {\n origin,\n },\n });\n }, [origin]);\n return !isBackgroundAppReady ? (_jsx(LoadingBlock, {})) : (_jsxs(Fragment, { children: [(isSelected || !url) && (_jsx(MeetingController, { url: url, handleChange: handleChange })), preview && url && _jsx(PreviewMeeting, { url: url })] }));\n}\nexport default function MeetingsEditContainer(props) {\n return (_jsx(BackgroudAppContext.Provider, { value: refreshToken && getOrCreateBackgroundApp(refreshToken), children: _jsx(MeetingEdit, { ...props }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport AsyncSelect from '../Common/AsyncSelect';\nimport UISpacer from '../UIComponents/UISpacer';\nimport { __ } from '@wordpress/i18n';\nexport default function MeetingSelector({ options, onChange, value, }) {\n const optionsWrapper = [\n {\n label: __('Meeting name', 'leadin'),\n options,\n },\n ];\n return (_jsxs(Fragment, { children: [_jsx(UISpacer, {}), _jsx(\"p\", { \"data-test-id\": \"leadin-meeting-select\", children: _jsx(\"b\", { children: __('Select a meeting scheduling page', 'leadin') }) }), _jsx(AsyncSelect, { defaultOptions: optionsWrapper, onChange: onChange, placeholder: __('Select a meeting', 'leadin'), value: value })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport UIAlert from '../UIComponents/UIAlert';\nimport UIButton from '../UIComponents/UIButton';\nimport { CURRENT_USER_CALENDAR_MISSING } from './constants';\nimport { __ } from '@wordpress/i18n';\nexport default function MeetingWarning({ status, onConnectCalendar, }) {\n const isMeetingOwner = status === CURRENT_USER_CALENDAR_MISSING;\n const titleText = isMeetingOwner\n ? __('Your calendar is not connected', 'leadin')\n : __('Calendar is not connected', 'leadin');\n const titleMessage = isMeetingOwner\n ? __('Please connect your calendar to activate your scheduling pages', 'leadin')\n : __('Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', 'leadin');\n return (_jsx(UIAlert, { titleText: titleText, titleMessage: titleMessage, children: isMeetingOwner && (_jsx(UIButton, { use: \"tertiary\", id: \"meetings-connect-calendar\", onClick: onConnectCalendar, children: __('Connect calendar', 'leadin') })) }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment, useEffect, useRef } from 'react';\nimport UIOverlay from '../UIComponents/UIOverlay';\nimport useMeetingsScript from './hooks/useMeetingsScript';\nexport default function PreviewForm({ url }) {\n const ready = useMeetingsScript();\n const inputEl = useRef(null);\n useEffect(() => {\n if (!ready) {\n return;\n }\n if (inputEl.current) {\n inputEl.current.innerHTML = '';\n const container = document.createElement('div');\n container.dataset.src = `${url}?embed=true`;\n container.classList.add('meetings-iframe-container');\n inputEl.current.appendChild(container);\n const embedScript = document.createElement('script');\n embedScript.innerHTML =\n 'hbspt.meetings.create(\".meetings-iframe-container\");';\n inputEl.current.appendChild(embedScript);\n }\n }, [url, ready, inputEl]);\n return _jsx(Fragment, { children: url && _jsx(UIOverlay, { ref: inputEl }) });\n}\n","export const OTHER_USER_CALENDAR_MISSING = 'OTHER_USER_CALENDAR_MISSING';\nexport const CURRENT_USER_CALENDAR_MISSING = 'CURRENT_USER_CALENDAR_MISSING';\n","import { useEffect, useState } from 'react';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport LoadState from '../../enums/loadState';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nlet user = null;\nexport default function useCurrentUserFetch() {\n const proxy = usePostAsyncBackgroundMessage();\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [error, setError] = useState(null);\n const createUser = () => {\n if (!user) {\n setLoadState(LoadState.NotLoaded);\n }\n };\n const reload = () => {\n user = null;\n setLoadState(LoadState.NotLoaded);\n setError(null);\n };\n useEffect(() => {\n if (loadState === LoadState.NotLoaded && !user) {\n setLoadState(LoadState.Loading);\n proxy({\n key: ProxyMessages.FetchOrCreateMeetingUser,\n })\n .then(data => {\n user = data;\n setLoadState(LoadState.Idle);\n })\n .catch(err => {\n setError(err);\n setLoadState(LoadState.Failed);\n });\n }\n }, [loadState]);\n return { user, loadUserState: loadState, error, createUser, reload };\n}\n","import { useCallback } from 'react';\nimport { __ } from '@wordpress/i18n';\nimport { CURRENT_USER_CALENDAR_MISSING, OTHER_USER_CALENDAR_MISSING, } from '../constants';\nimport useMeetingsFetch from './useMeetingsFetch';\nimport useCurrentUserFetch from './useCurrentUserFetch';\nimport LoadState from '../../enums/loadState';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nfunction getDefaultMeetingName(meeting, currentUser, meetingUsers) {\n const [meetingOwnerId] = meeting.meetingsUserIds;\n let result = __('Default', 'leadin');\n if (currentUser &&\n meetingOwnerId !== currentUser.id &&\n meetingUsers[meetingOwnerId]) {\n const user = meetingUsers[meetingOwnerId];\n result += ` (${user.userProfile.fullName})`;\n }\n return result;\n}\nfunction hasCalendarObject(user) {\n return (user &&\n user.meetingsUserBlob &&\n user.meetingsUserBlob.calendarSettings &&\n user.meetingsUserBlob.calendarSettings.email);\n}\nexport default function useMeetings() {\n const proxy = usePostAsyncBackgroundMessage();\n const { meetings, meetingUsers, error: meetingsError, loadMeetingsState, reload: reloadMeetings, } = useMeetingsFetch();\n const { user: currentUser, error: userError, loadUserState, reload: reloadUser, } = useCurrentUserFetch();\n const reload = useCallback(() => {\n reloadUser();\n reloadMeetings();\n }, [reloadUser, reloadMeetings]);\n const connectCalendar = () => {\n return proxy({\n key: ProxyMessages.ConnectMeetingsCalendar,\n });\n };\n return {\n mappedMeetings: meetings.map(meet => ({\n label: meet.name || getDefaultMeetingName(meet, currentUser, meetingUsers),\n value: meet.link,\n })),\n meetings,\n meetingUsers,\n currentUser,\n error: meetingsError || userError,\n loading: loadMeetingsState == LoadState.Loading ||\n loadUserState === LoadState.Loading,\n reload,\n connectCalendar,\n };\n}\nexport function useSelectedMeeting(url) {\n const { mappedMeetings: meetings } = useMeetings();\n const option = meetings.find(({ value }) => value === url);\n return option;\n}\nexport function useSelectedMeetingCalendar(url) {\n const { meetings, meetingUsers, currentUser } = useMeetings();\n const meeting = meetings.find(meet => meet.link === url);\n const mappedMeetingUsersId = meetingUsers.reduce((p, c) => ({ ...p, [c.id]: c }), {});\n if (!meeting) {\n return null;\n }\n else {\n const { meetingsUserIds } = meeting;\n if (currentUser &&\n meetingsUserIds.includes(currentUser.id) &&\n !hasCalendarObject(currentUser)) {\n return CURRENT_USER_CALENDAR_MISSING;\n }\n else if (meetingsUserIds\n .map(id => mappedMeetingUsersId[id])\n .some((user) => !hasCalendarObject(user))) {\n return OTHER_USER_CALENDAR_MISSING;\n }\n else {\n return null;\n }\n }\n}\n","import { useEffect, useState } from 'react';\nimport { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';\nimport LoadState from '../../enums/loadState';\nimport { ProxyMessages } from '../../../iframe/integratedMessages';\nlet meetings = [];\nlet meetingUsers = [];\nexport default function useMeetingsFetch() {\n const proxy = usePostAsyncBackgroundMessage();\n const [loadState, setLoadState] = useState(LoadState.NotLoaded);\n const [error, setError] = useState(null);\n const reload = () => {\n meetings = [];\n setError(null);\n setLoadState(LoadState.NotLoaded);\n };\n useEffect(() => {\n if (loadState === LoadState.NotLoaded && meetings.length === 0) {\n setLoadState(LoadState.Loading);\n proxy({\n key: ProxyMessages.FetchMeetingsAndUsers,\n })\n .then(data => {\n setLoadState(LoadState.Loaded);\n meetings = data && data.meetingLinks;\n meetingUsers = data && data.meetingUsers;\n })\n .catch(e => {\n setError(e);\n setLoadState(LoadState.Failed);\n });\n }\n }, [loadState]);\n return {\n meetings,\n meetingUsers,\n loadMeetingsState: loadState,\n error,\n reload,\n };\n}\n","import $ from 'jquery';\nimport { useState, useEffect } from 'react';\nimport { meetingsScript } from '../../../constants/leadinConfig';\nimport Raven from '../../../lib/Raven';\nlet promise;\nfunction loadMeetingsScript() {\n if (!promise) {\n promise = new Promise((resolve, reject) => $.getScript(meetingsScript)\n .done(resolve)\n .fail(reject));\n }\n return promise;\n}\nexport default function useMeetingsScript() {\n const [ready, setReady] = useState(false);\n useEffect(() => {\n loadMeetingsScript()\n .then(() => setReady(true))\n .catch(error => Raven.captureException(error));\n }, []);\n return ready;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { MARIGOLD_LIGHT, MARIGOLD_MEDIUM, OBSIDIAN } from './colors';\nconst AlertContainer = styled.div `\n background-color: ${MARIGOLD_LIGHT};\n border-color: ${MARIGOLD_MEDIUM};\n color: ${OBSIDIAN};\n font-size: 14px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n border-style: solid;\n border-top-style: solid;\n border-right-style: solid;\n border-bottom-style: solid;\n border-left-style: solid;\n border-width: 1px;\n min-height: 60px;\n padding: 8px 20px;\n position: relative;\n text-align: left;\n`;\nconst Title = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 700;\n font-size: 16px;\n line-height: 19px;\n color: ${OBSIDIAN};\n margin: 0;\n padding: 0;\n`;\nconst Message = styled.p `\n font-family: 'Lexend Deca';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n margin: 0;\n padding: 0;\n`;\nconst MessageContainer = styled.div `\n display: flex;\n flex-direction: column;\n`;\nexport default function UIAlert({ titleText, titleMessage, children, }) {\n return (_jsxs(AlertContainer, { children: [_jsxs(MessageContainer, { children: [_jsx(Title, { children: titleText }), _jsx(Message, { children: titleMessage })] }), children] }));\n}\n","import { styled } from '@linaria/react';\nimport { HEFFALUMP, LORAX, OLAF } from './colors';\nexport default styled.button `\n background-color:${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n border: 3px solid ${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)};\n color: ${OLAF}\n border-radius: 3px;\n font-size: 14px;\n line-height: 14px;\n padding: 12px 24px;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-weight: 500;\n white-space: nowrap;\n`;\n","import { styled } from '@linaria/react';\nexport default styled.div `\n text-align: ${props => (props.textAlign ? props.textAlign : 'inherit')};\n`;\n","import { styled } from '@linaria/react';\nexport default styled.div `\n position: relative;\n\n &:after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n }\n`;\n","import { styled } from '@linaria/react';\nexport default styled.div `\n height: 30px;\n`;\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { styled } from '@linaria/react';\nimport { CALYPSO_MEDIUM, CALYPSO } from './colors';\nconst SpinnerOuter = styled.div `\n align-items: center;\n color: #00a4bd;\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 100%;\n height: 100%;\n margin: '2px';\n`;\nconst SpinnerInner = styled.div `\n align-items: center;\n display: flex;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\nconst Circle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n`;\nconst AnimatedCircle = styled.circle `\n fill: none;\n stroke: ${props => props.color};\n stroke-width: 5;\n stroke-linecap: round;\n transform-origin: center;\n animation: dashAnimation 2s ease-in-out infinite,\n spinAnimation 2s linear infinite;\n\n @keyframes dashAnimation {\n 0% {\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -50;\n }\n\n 100% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -140;\n }\n }\n\n @keyframes spinAnimation {\n transform: rotate(360deg);\n }\n`;\nexport default function UISpinner({ size = 20 }) {\n return (_jsx(SpinnerOuter, { children: _jsx(SpinnerInner, { children: _jsxs(\"svg\", { height: size, width: size, viewBox: \"0 0 50 50\", children: [_jsx(Circle, { color: CALYPSO_MEDIUM, cx: \"25\", cy: \"25\", r: \"22.5\" }), _jsx(AnimatedCircle, { color: CALYPSO, cx: \"25\", cy: \"25\", r: \"22.5\" })] }) }) }));\n}\n","export const CALYPSO = '#00a4bd';\nexport const CALYPSO_MEDIUM = '#7fd1de';\nexport const CALYPSO_LIGHT = '#e5f5f8';\nexport const LORAX = '#ff7a59';\nexport const OLAF = '#ffffff';\nexport const HEFFALUMP = '#425b76';\nexport const MARIGOLD_LIGHT = '#fef8f0';\nexport const MARIGOLD_MEDIUM = '#fae0b5';\nexport const OBSIDIAN = '#33475b';\n","const ConnectionStatus = {\n Connected: 'Connected',\n NotConnected: 'NotConnected',\n};\nexport default ConnectionStatus;\n","const LoadState = {\n NotLoaded: 'NotLoaded',\n Loading: 'Loading',\n Loaded: 'Loaded',\n Idle: 'Idle',\n Failed: 'Failed',\n};\nexport default LoadState;\n","import $ from 'jquery';\nimport Raven, { configureRaven } from '../lib/Raven';\nexport function initApp(initFn) {\n configureRaven();\n Raven.context(initFn);\n}\nexport function initAppOnReady(initFn) {\n function main() {\n $(initFn);\n }\n initApp(main);\n}\n","import { deviceId, hubspotBaseUrl, locale, portalId, } from '../constants/leadinConfig';\nimport { initApp } from './appUtils';\nexport function initBackgroundApp(initFn) {\n function main() {\n if (Array.isArray(initFn)) {\n initFn.forEach(callback => callback());\n }\n else {\n initFn();\n }\n }\n initApp(main);\n}\nexport const getOrCreateBackgroundApp = (refreshToken) => {\n if (window.LeadinBackgroundApp) {\n return window.LeadinBackgroundApp;\n }\n const { IntegratedAppEmbedder, IntegratedAppOptions } = window;\n const options = new IntegratedAppOptions()\n .setLocale(locale)\n .setDeviceId(deviceId)\n .setRefreshToken(refreshToken);\n const embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', portalId, hubspotBaseUrl, () => { }).setOptions(options);\n embedder.attachTo(document.body, false);\n embedder.postStartAppMessage(); // lets the app know all all data has been passed to it\n window.LeadinBackgroundApp = embedder;\n return window.LeadinBackgroundApp;\n};\n","import { withSelect, withDispatch, select } from '@wordpress/data';\n// from answer here: https://github.com/WordPress/gutenberg/issues/44477#issuecomment-1263026599\nexport const isFullSiteEditor = () => {\n return select && !!select('core/edit-site');\n};\nconst applyWithSelect = withSelect((select, props) => {\n return {\n metaValue: select('core/editor').getEditedPostAttribute('meta')[props.metaKey],\n };\n});\nconst applyWithDispatch = withDispatch((dispatch, props) => {\n return {\n setMetaValue(value) {\n dispatch('core/editor').editPost({ meta: { [props.metaKey]: value } });\n },\n };\n});\nfunction apply(el) {\n return applyWithSelect(applyWithDispatch(el));\n}\nexport default apply;\n","/**\r\n * Returns the object type of the given payload\r\n *\r\n * @param {*} payload\r\n * @returns {string}\r\n */\r\nfunction getType(payload) {\r\n return Object.prototype.toString.call(payload).slice(8, -1);\r\n}\r\n/**\r\n * Returns whether the payload is undefined\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\r\nfunction isUndefined(payload) {\r\n return getType(payload) === 'Undefined';\r\n}\r\n/**\r\n * Returns whether the payload is null\r\n *\r\n * @param {*} payload\r\n * @returns {payload is null}\r\n */\r\nfunction isNull(payload) {\r\n return getType(payload) === 'Null';\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isPlainObject(payload) {\r\n if (getType(payload) !== 'Object')\r\n return false;\r\n return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isObject(payload) {\r\n return isPlainObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is { [K in any]: never }}\r\n */\r\nfunction isEmptyObject(payload) {\r\n return isPlainObject(payload) && Object.keys(payload).length === 0;\r\n}\r\n/**\r\n * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isFullObject(payload) {\r\n return isPlainObject(payload) && Object.keys(payload).length > 0;\r\n}\r\n/**\r\n * Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isAnyObject(payload) {\r\n return getType(payload) === 'Object';\r\n}\r\n/**\r\n * Returns whether the payload is an object like a type passed in < >\r\n *\r\n * Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop.\r\n *\r\n * @template T this must be passed in < >\r\n * @param {*} payload\r\n * @returns {payload is T}\r\n */\r\nfunction isObjectLike(payload) {\r\n return isAnyObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a function (regular or async)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is AnyFunction}\r\n */\r\nfunction isFunction(payload) {\r\n return typeof payload === 'function';\r\n}\r\n/**\r\n * Returns whether the payload is an array\r\n *\r\n * @param {any} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isArray(payload) {\r\n return getType(payload) === 'Array';\r\n}\r\n/**\r\n * Returns whether the payload is a an array with at least 1 item\r\n *\r\n * @param {*} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isFullArray(payload) {\r\n return isArray(payload) && payload.length > 0;\r\n}\r\n/**\r\n * Returns whether the payload is a an empty array\r\n *\r\n * @param {*} payload\r\n * @returns {payload is []}\r\n */\r\nfunction isEmptyArray(payload) {\r\n return isArray(payload) && payload.length === 0;\r\n}\r\n/**\r\n * Returns whether the payload is a string\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isString(payload) {\r\n return getType(payload) === 'String';\r\n}\r\n/**\r\n * Returns whether the payload is a string, BUT returns false for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isFullString(payload) {\r\n return isString(payload) && payload !== '';\r\n}\r\n/**\r\n * Returns whether the payload is ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isEmptyString(payload) {\r\n return payload === '';\r\n}\r\n/**\r\n * Returns whether the payload is a number (but not NaN)\r\n *\r\n * This will return `false` for `NaN`!!\r\n *\r\n * @param {*} payload\r\n * @returns {payload is number}\r\n */\r\nfunction isNumber(payload) {\r\n return getType(payload) === 'Number' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a boolean\r\n *\r\n * @param {*} payload\r\n * @returns {payload is boolean}\r\n */\r\nfunction isBoolean(payload) {\r\n return getType(payload) === 'Boolean';\r\n}\r\n/**\r\n * Returns whether the payload is a regular expression (RegExp)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is RegExp}\r\n */\r\nfunction isRegExp(payload) {\r\n return getType(payload) === 'RegExp';\r\n}\r\n/**\r\n * Returns whether the payload is a Map\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Map}\r\n */\r\nfunction isMap(payload) {\r\n return getType(payload) === 'Map';\r\n}\r\n/**\r\n * Returns whether the payload is a WeakMap\r\n *\r\n * @param {*} payload\r\n * @returns {payload is WeakMap}\r\n */\r\nfunction isWeakMap(payload) {\r\n return getType(payload) === 'WeakMap';\r\n}\r\n/**\r\n * Returns whether the payload is a Set\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Set}\r\n */\r\nfunction isSet(payload) {\r\n return getType(payload) === 'Set';\r\n}\r\n/**\r\n * Returns whether the payload is a WeakSet\r\n *\r\n * @param {*} payload\r\n * @returns {payload is WeakSet}\r\n */\r\nfunction isWeakSet(payload) {\r\n return getType(payload) === 'WeakSet';\r\n}\r\n/**\r\n * Returns whether the payload is a Symbol\r\n *\r\n * @param {*} payload\r\n * @returns {payload is symbol}\r\n */\r\nfunction isSymbol(payload) {\r\n return getType(payload) === 'Symbol';\r\n}\r\n/**\r\n * Returns whether the payload is a Date, and that the date is valid\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Date}\r\n */\r\nfunction isDate(payload) {\r\n return getType(payload) === 'Date' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a Blob\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Blob}\r\n */\r\nfunction isBlob(payload) {\r\n return getType(payload) === 'Blob';\r\n}\r\n/**\r\n * Returns whether the payload is a File\r\n *\r\n * @param {*} payload\r\n * @returns {payload is File}\r\n */\r\nfunction isFile(payload) {\r\n return getType(payload) === 'File';\r\n}\r\n/**\r\n * Returns whether the payload is a Promise\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Promise}\r\n */\r\nfunction isPromise(payload) {\r\n return getType(payload) === 'Promise';\r\n}\r\n/**\r\n * Returns whether the payload is an Error\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Error}\r\n */\r\nfunction isError(payload) {\r\n return getType(payload) === 'Error';\r\n}\r\n/**\r\n * Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is typeof NaN}\r\n */\r\nfunction isNaNValue(payload) {\r\n return getType(payload) === 'Number' && isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is boolean | null | undefined | number | string | symbol)}\r\n */\r\nfunction isPrimitive(payload) {\r\n return (isBoolean(payload) ||\r\n isNull(payload) ||\r\n isUndefined(payload) ||\r\n isNumber(payload) ||\r\n isString(payload) ||\r\n isSymbol(payload));\r\n}\r\n/**\r\n * Returns true whether the payload is null or undefined\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is null | undefined)}\r\n */\r\nvar isNullOrUndefined = isOneOf(isNull, isUndefined);\r\nfunction isOneOf(a, b, c, d, e) {\r\n return function (value) {\r\n return a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));\r\n };\r\n}\r\n/**\r\n * Does a generic check to check that the given payload is of a given type.\r\n * In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);\r\n * It will, however, differentiate between object and null\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {T} type\r\n * @throws {TypeError} Will throw type error if type is an invalid type\r\n * @returns {payload is T}\r\n */\r\nfunction isType(payload, type) {\r\n if (!(type instanceof Function)) {\r\n throw new TypeError('Type must be a function');\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {\r\n throw new TypeError('Type is not a class');\r\n }\r\n // Classes usually have names (as functions usually have names)\r\n var name = type.name;\r\n return getType(payload) === name || Boolean(payload && payload.constructor === type);\r\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isMap, isNaNValue, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import { isPlainObject, isArray, isSymbol } from 'is-what';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\n\nfunction assignProp(carry, key, newVal, originalObject) {\r\n var propType = originalObject.propertyIsEnumerable(key)\r\n ? 'enumerable'\r\n : 'nonenumerable';\r\n if (propType === 'enumerable')\r\n carry[key] = newVal;\r\n if (propType === 'nonenumerable') {\r\n Object.defineProperty(carry, key, {\r\n value: newVal,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n });\r\n }\r\n}\r\nfunction mergeRecursively(origin, newComer, extensions) {\r\n // work directly on newComer if its not an object\r\n if (!isPlainObject(newComer)) {\r\n // extend merge rules\r\n if (extensions && isArray(extensions)) {\r\n extensions.forEach(function (extend) {\r\n newComer = extend(origin, newComer);\r\n });\r\n }\r\n return newComer;\r\n }\r\n // define newObject to merge all values upon\r\n var newObject = {};\r\n if (isPlainObject(origin)) {\r\n var props_1 = Object.getOwnPropertyNames(origin);\r\n var symbols_1 = Object.getOwnPropertySymbols(origin);\r\n newObject = __spreadArrays(props_1, symbols_1).reduce(function (carry, key) {\r\n // @ts-ignore\r\n var targetVal = origin[key];\r\n if ((!isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key)) ||\r\n (isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key))) {\r\n assignProp(carry, key, targetVal, origin);\r\n }\r\n return carry;\r\n }, {});\r\n }\r\n var props = Object.getOwnPropertyNames(newComer);\r\n var symbols = Object.getOwnPropertySymbols(newComer);\r\n var result = __spreadArrays(props, symbols).reduce(function (carry, key) {\r\n // re-define the origin and newComer as targetVal and newVal\r\n var newVal = newComer[key];\r\n var targetVal = (isPlainObject(origin))\r\n // @ts-ignore\r\n ? origin[key]\r\n : undefined;\r\n // extend merge rules\r\n if (extensions && isArray(extensions)) {\r\n extensions.forEach(function (extend) {\r\n newVal = extend(targetVal, newVal);\r\n });\r\n }\r\n // When newVal is an object do the merge recursively\r\n if (targetVal !== undefined && isPlainObject(newVal)) {\r\n newVal = mergeRecursively(targetVal, newVal, extensions);\r\n }\r\n assignProp(carry, key, newVal, newComer);\r\n return carry;\r\n }, newObject);\r\n return result;\r\n}\r\n/**\r\n * Merge anything recursively.\r\n * Objects get merged, special objects (classes etc.) are re-assigned \"as is\".\r\n * Basic types overwrite objects or other basic types.\r\n *\r\n * @param {(IConfig | any)} origin\r\n * @param {...any[]} newComers\r\n * @returns the result\r\n */\r\nfunction merge(origin) {\r\n var newComers = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n newComers[_i - 1] = arguments[_i];\r\n }\r\n var extensions = null;\r\n var base = origin;\r\n if (isPlainObject(origin) && origin.extensions && Object.keys(origin).length === 1) {\r\n base = {};\r\n extensions = origin.extensions;\r\n }\r\n return newComers.reduce(function (result, newComer) {\r\n return mergeRecursively(result, newComer, extensions);\r\n }, base);\r\n}\n\nfunction concatArrays(originVal, newVal) {\r\n if (isArray(originVal) && isArray(newVal)) {\r\n // concat logic\r\n return originVal.concat(newVal);\r\n }\r\n return newVal; // always return newVal as fallback!!\r\n}\n\nexport default merge;\nexport { concatArrays, merge };\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = '' + args.join(' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n collectWindowErrors: true,\n maxMessageLength: 0,\n\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.19.1',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped already\n // for both debugging and to prevent it to being wrapped twice\n wrapped.__raven__ = true;\n wrapped.__inner__ = func;\n\n return wrapped;\n },\n\n /*\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._restoreBuiltIns();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /*\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n // Cases for sending ex as a message, rather than an exception\n var isNotError = !isError(ex);\n var isNotErrorEvent = !isErrorEvent(ex);\n var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n return this.captureMessage(\n ex,\n objectMerge(\n {\n trimHeadFrames: 1,\n stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n },\n options\n )\n );\n }\n\n // Get actual Error from ErrorEvent\n if (isErrorEvent(ex)) ex = ex.error;\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n\n var data = objectMerge(\n {\n message: msg + '' // Make sure it's actually a string\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = stack.stack[1];\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n options = objectMerge(\n {\n // fingerprint on msg, not stack trace (legacy behavior, could be\n // revisited)\n fingerprint: msg,\n // since we know this is a synthetic trace, the top N-most frames\n // MUST be from Raven.js, so mark them as in_app later by setting\n // trimHeadFrames\n trimHeadFrames: (options.trimHeadFrames || 0) + 1\n },\n options\n );\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function(data) {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && 'fetch' in _window) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n return response;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n if (this._hasDocument) {\n if (_document.location && _document.location.href) {\n httpData.url = _document.location.href;\n }\n if (_document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n retry = request.getResponseHeader('Retry-After');\n retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n // If there are no tags/extra, strip the key from the payload alltogther.\n if (isEmptyObject(data.tags)) delete data.tags;\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n var url = opts.url;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n // NOTE: auth is intentionally sent as part of query string (NOT as custom\n // HTTP header) so as to avoid preflight CORS requests\n request.open('POST', url + '?' + urlencode(opts.auth));\n request.send(stringify(opts.data));\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","var _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) return {};\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isString: isString,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} message Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (ex && utils.isError(ex)) {\n // non-string `ex` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(ex);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var msg = message; // must be new var or will modify original `arguments`\n var groups;\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n msg = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: msg,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n // Used to additionally parse URL/line/column from eval frames\n geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n lines = ex.stack.split('\\n'),\n stack = [],\n submatch,\n parts,\n element,\n reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v17.0.2\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\nvar _assign = require('object-assign');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = 0xeac7;\nvar REACT_PORTAL_TYPE = 0xeaca;\nexports.Fragment = 0xeacb;\nvar REACT_STRICT_MODE_TYPE = 0xeacc;\nvar REACT_PROFILER_TYPE = 0xead2;\nvar REACT_PROVIDER_TYPE = 0xeacd;\nvar REACT_CONTEXT_TYPE = 0xeace;\nvar REACT_FORWARD_REF_TYPE = 0xead0;\nvar REACT_SUSPENSE_TYPE = 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = 0xead8;\nvar REACT_MEMO_TYPE = 0xead3;\nvar REACT_LAZY_TYPE = 0xead4;\nvar REACT_BLOCK_TYPE = 0xead9;\nvar REACT_SERVER_BLOCK_TYPE = 0xeada;\nvar REACT_FUNDAMENTAL_TYPE = 0xead5;\nvar REACT_SCOPE_TYPE = 0xead7;\nvar REACT_OPAQUE_ID_TYPE = 0xeae0;\nvar REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\nvar REACT_OFFSCREEN_TYPE = 0xeae2;\nvar REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\n\nif (typeof Symbol === 'function' && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor('react.element');\n REACT_PORTAL_TYPE = symbolFor('react.portal');\n exports.Fragment = symbolFor('react.fragment');\n REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');\n REACT_PROFILER_TYPE = symbolFor('react.profiler');\n REACT_PROVIDER_TYPE = symbolFor('react.provider');\n REACT_CONTEXT_TYPE = symbolFor('react.context');\n REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');\n REACT_SUSPENSE_TYPE = symbolFor('react.suspense');\n REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');\n REACT_MEMO_TYPE = symbolFor('react.memo');\n REACT_LAZY_TYPE = symbolFor('react.lazy');\n REACT_BLOCK_TYPE = symbolFor('react.block');\n REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');\n REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');\n REACT_SCOPE_TYPE = symbolFor('react.scope');\n REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');\n REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');\n REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');\n}\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case exports.Fragment:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentName(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: _assign({}, props, {\n value: prevLog\n }),\n info: _assign({}, props, {\n value: prevInfo\n }),\n warn: _assign({}, props, {\n value: prevWarn\n }),\n error: _assign({}, props, {\n value: prevError\n }),\n group: _assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: _assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: _assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at ');\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_BLOCK_TYPE:\n return describeFunctionComponentFrame(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie.
\n // or
). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n //
, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentName(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentName(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentName(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === exports.Fragment) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import Stylis from 'stylis/stylis.min';\nimport _insertRulePlugin from 'stylis-rule-sheet';\nimport React, { cloneElement, createContext, Component, createElement } from 'react';\nimport unitless from '@emotion/unitless';\nimport { isElement, isValidElementType, ForwardRef } from 'react-is';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport validAttr from '@emotion/is-prop-valid';\nimport merge from 'merge-anything';\n\n// \n\nvar interleave = (function (strings, interpolations) {\n var result = [strings[0]];\n\n for (var i = 0, len = interpolations.length; i < len; i += 1) {\n result.push(interpolations[i], strings[i + 1]);\n }\n\n return result;\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n// \nvar isPlainObject = (function (x) {\n return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x.constructor === Object;\n});\n\n// \nvar EMPTY_ARRAY = Object.freeze([]);\nvar EMPTY_OBJECT = Object.freeze({});\n\n// \nfunction isFunction(test) {\n return typeof test === 'function';\n}\n\n// \n\nfunction getComponentName(target) {\n return (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) || target.displayName || target.name || 'Component';\n}\n\n// \nfunction isStatelessFunction(test) {\n return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent);\n}\n\n// \nfunction isStyledComponent(target) {\n return target && typeof target.styledComponentId === 'string';\n}\n\n// \n\nvar SC_ATTR = typeof process !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';\n\nvar SC_VERSION_ATTR = 'data-styled-version';\n\nvar SC_STREAM_ATTR = 'data-styled-streamed';\n\nvar IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;\n\nvar DISABLE_SPEEDY = typeof SC_DISABLE_SPEEDY === 'boolean' && SC_DISABLE_SPEEDY || typeof process !== 'undefined' && (process.env.REACT_APP_SC_DISABLE_SPEEDY || process.env.SC_DISABLE_SPEEDY) || process.env.NODE_ENV !== 'production';\n\n// Shared empty execution context when generating static styles\nvar STATIC_EXECUTION_CONTEXT = {};\n\n// \n\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n */\nvar ERRORS = process.env.NODE_ENV !== 'production' ? {\n \"1\": \"Cannot create styled-component for component: %s.\\n\\n\",\n \"2\": \"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",\n \"3\": \"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",\n \"4\": \"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\",\n \"5\": \"The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\",\n \"6\": \"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",\n \"7\": \"ThemeProvider: Please return an object from your \\\"theme\\\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n\",\n \"8\": \"ThemeProvider: Please make your \\\"theme\\\" prop an object.\\n\\n\",\n \"9\": \"Missing document ``\\n\\n\",\n \"10\": \"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",\n \"11\": \"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",\n \"12\": \"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",\n \"13\": \"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\"\n} : {};\n\n/**\n * super basic version of sprintf\n */\nfunction format() {\n var a = arguments.length <= 0 ? undefined : arguments[0];\n var b = [];\n\n for (var c = 1, len = arguments.length; c < len; c += 1) {\n b.push(arguments.length <= c ? undefined : arguments[c]);\n }\n\n b.forEach(function (d) {\n a = a.replace(/%[a-z]/, d);\n });\n\n return a;\n}\n\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n */\n\nvar StyledComponentsError = function (_Error) {\n inherits(StyledComponentsError, _Error);\n\n function StyledComponentsError(code) {\n classCallCheck(this, StyledComponentsError);\n\n for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n interpolations[_key - 1] = arguments[_key];\n }\n\n if (process.env.NODE_ENV === 'production') {\n var _this = possibleConstructorReturn(this, _Error.call(this, 'An error occurred. See https://github.com/styled-components/styled-components/blob/master/packages/styled-components/src/utils/errors.md#' + code + ' for more information.' + (interpolations.length > 0 ? ' Additional arguments: ' + interpolations.join(', ') : '')));\n } else {\n var _this = possibleConstructorReturn(this, _Error.call(this, format.apply(undefined, [ERRORS[code]].concat(interpolations)).trim()));\n }\n return possibleConstructorReturn(_this);\n }\n\n return StyledComponentsError;\n}(Error);\n\n// \nvar SC_COMPONENT_ID = /^[^\\S\\n]*?\\/\\* sc-component-id:\\s*(\\S+)\\s+\\*\\//gm;\n\nvar extractComps = (function (maybeCSS) {\n var css = '' + (maybeCSS || ''); // Definitely a string, and a clone\n var existingComponents = [];\n css.replace(SC_COMPONENT_ID, function (match, componentId, matchIndex) {\n existingComponents.push({ componentId: componentId, matchIndex: matchIndex });\n return match;\n });\n return existingComponents.map(function (_ref, i) {\n var componentId = _ref.componentId,\n matchIndex = _ref.matchIndex;\n\n var nextComp = existingComponents[i + 1];\n var cssFromDOM = nextComp ? css.slice(matchIndex, nextComp.matchIndex) : css.slice(matchIndex);\n return { componentId: componentId, cssFromDOM: cssFromDOM };\n });\n});\n\n// \n\nvar COMMENT_REGEX = /^\\s*\\/\\/.*$/gm;\n\n// NOTE: This stylis instance is only used to split rules from SSR'd style tags\nvar stylisSplitter = new Stylis({\n global: false,\n cascade: true,\n keyframe: false,\n prefix: false,\n compress: false,\n semicolon: true\n});\n\nvar stylis = new Stylis({\n global: false,\n cascade: true,\n keyframe: false,\n prefix: true,\n compress: false,\n semicolon: false // NOTE: This means \"autocomplete missing semicolons\"\n});\n\n// Wrap `insertRulePlugin to build a list of rules,\n// and then make our own plugin to return the rules. This\n// makes it easier to hook into the existing SSR architecture\n\nvar parsingRules = [];\n\n// eslint-disable-next-line consistent-return\nvar returnRulesPlugin = function returnRulesPlugin(context) {\n if (context === -2) {\n var parsedRules = parsingRules;\n parsingRules = [];\n return parsedRules;\n }\n};\n\nvar parseRulesPlugin = _insertRulePlugin(function (rule) {\n parsingRules.push(rule);\n});\n\nvar _componentId = void 0;\nvar _selector = void 0;\nvar _selectorRegexp = void 0;\n\nvar selfReferenceReplacer = function selfReferenceReplacer(match, offset, string) {\n if (\n // the first self-ref is always untouched\n offset > 0 &&\n // there should be at least two self-refs to do a replacement (.b > .b)\n string.slice(0, offset).indexOf(_selector) !== -1 &&\n // no consecutive self refs (.b.b); that is a precedence boost and treated differently\n string.slice(offset - _selector.length, offset) !== _selector) {\n return '.' + _componentId;\n }\n\n return match;\n};\n\n/**\n * When writing a style like\n *\n * & + & {\n * color: red;\n * }\n *\n * The second ampersand should be a reference to the static component class. stylis\n * has no knowledge of static class so we have to intelligently replace the base selector.\n */\nvar selfReferenceReplacementPlugin = function selfReferenceReplacementPlugin(context, _, selectors) {\n if (context === 2 && selectors.length && selectors[0].lastIndexOf(_selector) > 0) {\n // eslint-disable-next-line no-param-reassign\n selectors[0] = selectors[0].replace(_selectorRegexp, selfReferenceReplacer);\n }\n};\n\nstylis.use([selfReferenceReplacementPlugin, parseRulesPlugin, returnRulesPlugin]);\nstylisSplitter.use([parseRulesPlugin, returnRulesPlugin]);\n\nvar splitByRules = function splitByRules(css) {\n return stylisSplitter('', css);\n};\n\nfunction stringifyRules(rules, selector, prefix) {\n var componentId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '&';\n\n var flatCSS = rules.join('').replace(COMMENT_REGEX, ''); // replace JS comments\n\n var cssStr = selector && prefix ? prefix + ' ' + selector + ' { ' + flatCSS + ' }' : flatCSS;\n\n // stylis has no concept of state to be passed to plugins\n // but since JS is single=threaded, we can rely on that to ensure\n // these properties stay in sync with the current stylis run\n _componentId = componentId;\n _selector = selector;\n _selectorRegexp = new RegExp('\\\\' + _selector + '\\\\b', 'g');\n\n return stylis(prefix || !selector ? '' : selector, cssStr);\n}\n\n// \n/* eslint-disable camelcase, no-undef */\n\nvar getNonce = (function () {\n return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n});\n\n// \n/* These are helpers for the StyleTags to keep track of the injected\n * rule names for each (component) ID that they're keeping track of.\n * They're crucial for detecting whether a name has already been\n * injected.\n * (This excludes rehydrated names) */\n\n/* adds a new ID:name pairing to a names dictionary */\nvar addNameForId = function addNameForId(names, id, name) {\n if (name) {\n // eslint-disable-next-line no-param-reassign\n var namesForId = names[id] || (names[id] = Object.create(null));\n namesForId[name] = true;\n }\n};\n\n/* resets an ID entirely by overwriting it in the dictionary */\nvar resetIdNames = function resetIdNames(names, id) {\n // eslint-disable-next-line no-param-reassign\n names[id] = Object.create(null);\n};\n\n/* factory for a names dictionary checking the existance of an ID:name pairing */\nvar hasNameForId = function hasNameForId(names) {\n return function (id, name) {\n return names[id] !== undefined && names[id][name];\n };\n};\n\n/* stringifies names for the html/element output */\nvar stringifyNames = function stringifyNames(names) {\n var str = '';\n // eslint-disable-next-line guard-for-in\n for (var id in names) {\n str += Object.keys(names[id]).join(' ') + ' ';\n }\n return str.trim();\n};\n\n/* clones the nested names dictionary */\nvar cloneNames = function cloneNames(names) {\n var clone = Object.create(null);\n // eslint-disable-next-line guard-for-in\n for (var id in names) {\n clone[id] = _extends({}, names[id]);\n }\n return clone;\n};\n\n// \n\n/* These are helpers that deal with the insertRule (aka speedy) API\n * They are used in the StyleTags and specifically the speedy tag\n */\n\n/* retrieve a sheet for a given style tag */\nvar sheetForTag = function sheetForTag(tag) {\n // $FlowFixMe\n if (tag.sheet) return tag.sheet;\n\n /* Firefox quirk requires us to step through all stylesheets to find one owned by the given tag */\n var size = tag.ownerDocument.styleSheets.length;\n for (var i = 0; i < size; i += 1) {\n var sheet = tag.ownerDocument.styleSheets[i];\n // $FlowFixMe\n if (sheet.ownerNode === tag) return sheet;\n }\n\n /* we should always be able to find a tag */\n throw new StyledComponentsError(10);\n};\n\n/* insert a rule safely and return whether it was actually injected */\nvar safeInsertRule = function safeInsertRule(sheet, cssRule, index) {\n /* abort early if cssRule string is falsy */\n if (!cssRule) return false;\n\n var maxIndex = sheet.cssRules.length;\n\n try {\n /* use insertRule and cap passed index with maxIndex (no of cssRules) */\n sheet.insertRule(cssRule, index <= maxIndex ? index : maxIndex);\n } catch (err) {\n /* any error indicates an invalid rule */\n return false;\n }\n\n return true;\n};\n\n/* deletes `size` rules starting from `removalIndex` */\nvar deleteRules = function deleteRules(sheet, removalIndex, size) {\n var lowerBound = removalIndex - size;\n for (var i = removalIndex; i > lowerBound; i -= 1) {\n sheet.deleteRule(i);\n }\n};\n\n// \n\n/* this marker separates component styles and is important for rehydration */\nvar makeTextMarker = function makeTextMarker(id) {\n return '\\n/* sc-component-id: ' + id + ' */\\n';\n};\n\n/* add up all numbers in array up until and including the index */\nvar addUpUntilIndex = function addUpUntilIndex(sizes, index) {\n var totalUpToIndex = 0;\n for (var i = 0; i <= index; i += 1) {\n totalUpToIndex += sizes[i];\n }\n\n return totalUpToIndex;\n};\n\n/* create a new style tag after lastEl */\nvar makeStyleTag = function makeStyleTag(target, tagEl, insertBefore) {\n var targetDocument = document;\n if (target) targetDocument = target.ownerDocument;else if (tagEl) targetDocument = tagEl.ownerDocument;\n\n var el = targetDocument.createElement('style');\n el.setAttribute(SC_ATTR, '');\n el.setAttribute(SC_VERSION_ATTR, \"4.4.1\");\n\n var nonce = getNonce();\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n\n /* Work around insertRule quirk in EdgeHTML */\n el.appendChild(targetDocument.createTextNode(''));\n\n if (target && !tagEl) {\n /* Append to target when no previous element was passed */\n target.appendChild(el);\n } else {\n if (!tagEl || !target || !tagEl.parentNode) {\n throw new StyledComponentsError(6);\n }\n\n /* Insert new style tag after the previous one */\n tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling);\n }\n\n return el;\n};\n\n/* takes a css factory function and outputs an html styled tag factory */\nvar wrapAsHtmlTag = function wrapAsHtmlTag(css, names) {\n return function (additionalAttrs) {\n var nonce = getNonce();\n var attrs = [nonce && 'nonce=\"' + nonce + '\"', SC_ATTR + '=\"' + stringifyNames(names) + '\"', SC_VERSION_ATTR + '=\"' + \"4.4.1\" + '\"', additionalAttrs];\n\n var htmlAttr = attrs.filter(Boolean).join(' ');\n return '';\n };\n};\n\n/* takes a css factory function and outputs an element factory */\nvar wrapAsElement = function wrapAsElement(css, names) {\n return function () {\n var _props;\n\n var props = (_props = {}, _props[SC_ATTR] = stringifyNames(names), _props[SC_VERSION_ATTR] = \"4.4.1\", _props);\n\n var nonce = getNonce();\n if (nonce) {\n // $FlowFixMe\n props.nonce = nonce;\n }\n\n // eslint-disable-next-line react/no-danger\n return React.createElement('style', _extends({}, props, { dangerouslySetInnerHTML: { __html: css() } }));\n };\n};\n\nvar getIdsFromMarkersFactory = function getIdsFromMarkersFactory(markers) {\n return function () {\n return Object.keys(markers);\n };\n};\n\n/* speedy tags utilise insertRule */\nvar makeSpeedyTag = function makeSpeedyTag(el, getImportRuleTag) {\n var names = Object.create(null);\n var markers = Object.create(null);\n var sizes = [];\n\n var extractImport = getImportRuleTag !== undefined;\n /* indicates whether getImportRuleTag was called */\n var usedImportRuleTag = false;\n\n var insertMarker = function insertMarker(id) {\n var prev = markers[id];\n if (prev !== undefined) {\n return prev;\n }\n\n markers[id] = sizes.length;\n sizes.push(0);\n resetIdNames(names, id);\n\n return markers[id];\n };\n\n var insertRules = function insertRules(id, cssRules, name) {\n var marker = insertMarker(id);\n var sheet = sheetForTag(el);\n var insertIndex = addUpUntilIndex(sizes, marker);\n\n var injectedRules = 0;\n var importRules = [];\n var cssRulesSize = cssRules.length;\n\n for (var i = 0; i < cssRulesSize; i += 1) {\n var cssRule = cssRules[i];\n var mayHaveImport = extractImport; /* @import rules are reordered to appear first */\n if (mayHaveImport && cssRule.indexOf('@import') !== -1) {\n importRules.push(cssRule);\n } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) {\n mayHaveImport = false;\n injectedRules += 1;\n }\n }\n\n if (extractImport && importRules.length > 0) {\n usedImportRuleTag = true;\n // $FlowFixMe\n getImportRuleTag().insertRules(id + '-import', importRules);\n }\n\n sizes[marker] += injectedRules; /* add up no of injected rules */\n addNameForId(names, id, name);\n };\n\n var removeRules = function removeRules(id) {\n var marker = markers[id];\n if (marker === undefined) return;\n // $FlowFixMe\n if (el.isConnected === false) return;\n\n var size = sizes[marker];\n var sheet = sheetForTag(el);\n var removalIndex = addUpUntilIndex(sizes, marker) - 1;\n deleteRules(sheet, removalIndex, size);\n sizes[marker] = 0;\n resetIdNames(names, id);\n\n if (extractImport && usedImportRuleTag) {\n // $FlowFixMe\n getImportRuleTag().removeRules(id + '-import');\n }\n };\n\n var css = function css() {\n var _sheetForTag = sheetForTag(el),\n cssRules = _sheetForTag.cssRules;\n\n var str = '';\n\n // eslint-disable-next-line guard-for-in\n for (var id in markers) {\n str += makeTextMarker(id);\n var marker = markers[id];\n var end = addUpUntilIndex(sizes, marker);\n var size = sizes[marker];\n for (var i = end - size; i < end; i += 1) {\n var rule = cssRules[i];\n if (rule !== undefined) {\n str += rule.cssText;\n }\n }\n }\n\n return str;\n };\n\n return {\n clone: function clone() {\n throw new StyledComponentsError(5);\n },\n\n css: css,\n getIds: getIdsFromMarkersFactory(markers),\n hasNameForId: hasNameForId(names),\n insertMarker: insertMarker,\n insertRules: insertRules,\n removeRules: removeRules,\n sealed: false,\n styleTag: el,\n toElement: wrapAsElement(css, names),\n toHTML: wrapAsHtmlTag(css, names)\n };\n};\n\nvar makeTextNode = function makeTextNode(targetDocument, id) {\n return targetDocument.createTextNode(makeTextMarker(id));\n};\n\nvar makeBrowserTag = function makeBrowserTag(el, getImportRuleTag) {\n var names = Object.create(null);\n var markers = Object.create(null);\n\n var extractImport = getImportRuleTag !== undefined;\n\n /* indicates whether getImportRuleTag was called */\n var usedImportRuleTag = false;\n\n var insertMarker = function insertMarker(id) {\n var prev = markers[id];\n if (prev !== undefined) {\n return prev;\n }\n\n markers[id] = makeTextNode(el.ownerDocument, id);\n el.appendChild(markers[id]);\n names[id] = Object.create(null);\n\n return markers[id];\n };\n\n var insertRules = function insertRules(id, cssRules, name) {\n var marker = insertMarker(id);\n var importRules = [];\n var cssRulesSize = cssRules.length;\n\n for (var i = 0; i < cssRulesSize; i += 1) {\n var rule = cssRules[i];\n var mayHaveImport = extractImport;\n if (mayHaveImport && rule.indexOf('@import') !== -1) {\n importRules.push(rule);\n } else {\n mayHaveImport = false;\n var separator = i === cssRulesSize - 1 ? '' : ' ';\n marker.appendData('' + rule + separator);\n }\n }\n\n addNameForId(names, id, name);\n\n if (extractImport && importRules.length > 0) {\n usedImportRuleTag = true;\n // $FlowFixMe\n getImportRuleTag().insertRules(id + '-import', importRules);\n }\n };\n\n var removeRules = function removeRules(id) {\n var marker = markers[id];\n if (marker === undefined) return;\n\n /* create new empty text node and replace the current one */\n var newMarker = makeTextNode(el.ownerDocument, id);\n el.replaceChild(newMarker, marker);\n markers[id] = newMarker;\n resetIdNames(names, id);\n\n if (extractImport && usedImportRuleTag) {\n // $FlowFixMe\n getImportRuleTag().removeRules(id + '-import');\n }\n };\n\n var css = function css() {\n var str = '';\n\n // eslint-disable-next-line guard-for-in\n for (var id in markers) {\n str += markers[id].data;\n }\n\n return str;\n };\n\n return {\n clone: function clone() {\n throw new StyledComponentsError(5);\n },\n\n css: css,\n getIds: getIdsFromMarkersFactory(markers),\n hasNameForId: hasNameForId(names),\n insertMarker: insertMarker,\n insertRules: insertRules,\n removeRules: removeRules,\n sealed: false,\n styleTag: el,\n toElement: wrapAsElement(css, names),\n toHTML: wrapAsHtmlTag(css, names)\n };\n};\n\nvar makeServerTag = function makeServerTag(namesArg, markersArg) {\n var names = namesArg === undefined ? Object.create(null) : namesArg;\n var markers = markersArg === undefined ? Object.create(null) : markersArg;\n\n var insertMarker = function insertMarker(id) {\n var prev = markers[id];\n if (prev !== undefined) {\n return prev;\n }\n\n return markers[id] = [''];\n };\n\n var insertRules = function insertRules(id, cssRules, name) {\n var marker = insertMarker(id);\n marker[0] += cssRules.join(' ');\n addNameForId(names, id, name);\n };\n\n var removeRules = function removeRules(id) {\n var marker = markers[id];\n if (marker === undefined) return;\n marker[0] = '';\n resetIdNames(names, id);\n };\n\n var css = function css() {\n var str = '';\n // eslint-disable-next-line guard-for-in\n for (var id in markers) {\n var cssForId = markers[id][0];\n if (cssForId) {\n str += makeTextMarker(id) + cssForId;\n }\n }\n return str;\n };\n\n var clone = function clone() {\n var namesClone = cloneNames(names);\n var markersClone = Object.create(null);\n\n // eslint-disable-next-line guard-for-in\n for (var id in markers) {\n markersClone[id] = [markers[id][0]];\n }\n\n return makeServerTag(namesClone, markersClone);\n };\n\n var tag = {\n clone: clone,\n css: css,\n getIds: getIdsFromMarkersFactory(markers),\n hasNameForId: hasNameForId(names),\n insertMarker: insertMarker,\n insertRules: insertRules,\n removeRules: removeRules,\n sealed: false,\n styleTag: null,\n toElement: wrapAsElement(css, names),\n toHTML: wrapAsHtmlTag(css, names)\n };\n\n return tag;\n};\n\nvar makeTag = function makeTag(target, tagEl, forceServer, insertBefore, getImportRuleTag) {\n if (IS_BROWSER && !forceServer) {\n var el = makeStyleTag(target, tagEl, insertBefore);\n\n if (DISABLE_SPEEDY) {\n return makeBrowserTag(el, getImportRuleTag);\n } else {\n return makeSpeedyTag(el, getImportRuleTag);\n }\n }\n\n return makeServerTag();\n};\n\nvar rehydrate = function rehydrate(tag, els, extracted) {\n /* add all extracted components to the new tag */\n for (var i = 0, len = extracted.length; i < len; i += 1) {\n var _extracted$i = extracted[i],\n componentId = _extracted$i.componentId,\n cssFromDOM = _extracted$i.cssFromDOM;\n\n var cssRules = splitByRules(cssFromDOM);\n tag.insertRules(componentId, cssRules);\n }\n\n /* remove old HTMLStyleElements, since they have been rehydrated */\n for (var _i = 0, _len = els.length; _i < _len; _i += 1) {\n var el = els[_i];\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n }\n};\n\n// \n\nvar SPLIT_REGEX = /\\s+/;\n\n/* determine the maximum number of components before tags are sharded */\nvar MAX_SIZE = void 0;\nif (IS_BROWSER) {\n /* in speedy mode we can keep a lot more rules in a sheet before a slowdown can be expected */\n MAX_SIZE = DISABLE_SPEEDY ? 40 : 1000;\n} else {\n /* for servers we do not need to shard at all */\n MAX_SIZE = -1;\n}\n\nvar sheetRunningId = 0;\nvar master = void 0;\n\nvar StyleSheet = function () {\n\n /* a map from ids to tags */\n\n /* deferred rules for a given id */\n\n /* this is used for not reinjecting rules via hasNameForId() */\n\n /* when rules for an id are removed using remove() we have to ignore rehydratedNames for it */\n\n /* a list of tags belonging to this StyleSheet */\n\n /* a tag for import rules */\n\n /* current capacity until a new tag must be created */\n\n /* children (aka clones) of this StyleSheet inheriting all and future injections */\n\n function StyleSheet() {\n var _this = this;\n\n var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : IS_BROWSER ? document.head : null;\n var forceServer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n classCallCheck(this, StyleSheet);\n\n this.getImportRuleTag = function () {\n var importRuleTag = _this.importRuleTag;\n\n if (importRuleTag !== undefined) {\n return importRuleTag;\n }\n\n var firstTag = _this.tags[0];\n var insertBefore = true;\n\n return _this.importRuleTag = makeTag(_this.target, firstTag ? firstTag.styleTag : null, _this.forceServer, insertBefore);\n };\n\n sheetRunningId += 1;\n this.id = sheetRunningId;\n this.forceServer = forceServer;\n this.target = forceServer ? null : target;\n this.tagMap = {};\n this.deferred = {};\n this.rehydratedNames = {};\n this.ignoreRehydratedNames = {};\n this.tags = [];\n this.capacity = 1;\n this.clones = [];\n }\n\n /* rehydrate all SSR'd style tags */\n\n\n StyleSheet.prototype.rehydrate = function rehydrate$$1() {\n if (!IS_BROWSER || this.forceServer) return this;\n\n var els = [];\n var extracted = [];\n var isStreamed = false;\n\n /* retrieve all of our SSR style elements from the DOM */\n var nodes = document.querySelectorAll('style[' + SC_ATTR + '][' + SC_VERSION_ATTR + '=\"' + \"4.4.1\" + '\"]');\n\n var nodesSize = nodes.length;\n\n /* abort rehydration if no previous style tags were found */\n if (!nodesSize) return this;\n\n for (var i = 0; i < nodesSize; i += 1) {\n var el = nodes[i];\n\n /* check if style tag is a streamed tag */\n if (!isStreamed) isStreamed = !!el.getAttribute(SC_STREAM_ATTR);\n\n /* retrieve all component names */\n var elNames = (el.getAttribute(SC_ATTR) || '').trim().split(SPLIT_REGEX);\n var elNamesSize = elNames.length;\n for (var j = 0, name; j < elNamesSize; j += 1) {\n name = elNames[j];\n /* add rehydrated name to sheet to avoid re-adding styles */\n this.rehydratedNames[name] = true;\n }\n\n /* extract all components and their CSS */\n extracted.push.apply(extracted, extractComps(el.textContent));\n\n /* store original HTMLStyleElement */\n els.push(el);\n }\n\n /* abort rehydration if nothing was extracted */\n var extractedSize = extracted.length;\n if (!extractedSize) return this;\n\n /* create a tag to be used for rehydration */\n var tag = this.makeTag(null);\n\n rehydrate(tag, els, extracted);\n\n /* reset capacity and adjust MAX_SIZE by the initial size of the rehydration */\n this.capacity = Math.max(1, MAX_SIZE - extractedSize);\n this.tags.push(tag);\n\n /* retrieve all component ids */\n for (var _j = 0; _j < extractedSize; _j += 1) {\n this.tagMap[extracted[_j].componentId] = tag;\n }\n\n return this;\n };\n\n /* retrieve a \"master\" instance of StyleSheet which is typically used when no other is available\n * The master StyleSheet is targeted by createGlobalStyle, keyframes, and components outside of any\n * StyleSheetManager's context */\n\n\n /* reset the internal \"master\" instance */\n StyleSheet.reset = function reset() {\n var forceServer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n master = new StyleSheet(undefined, forceServer).rehydrate();\n };\n\n /* adds \"children\" to the StyleSheet that inherit all of the parents' rules\n * while their own rules do not affect the parent */\n\n\n StyleSheet.prototype.clone = function clone() {\n var sheet = new StyleSheet(this.target, this.forceServer);\n\n /* add to clone array */\n this.clones.push(sheet);\n\n /* clone all tags */\n sheet.tags = this.tags.map(function (tag) {\n var ids = tag.getIds();\n var newTag = tag.clone();\n\n /* reconstruct tagMap */\n for (var i = 0; i < ids.length; i += 1) {\n sheet.tagMap[ids[i]] = newTag;\n }\n\n return newTag;\n });\n\n /* clone other maps */\n sheet.rehydratedNames = _extends({}, this.rehydratedNames);\n sheet.deferred = _extends({}, this.deferred);\n\n return sheet;\n };\n\n /* force StyleSheet to create a new tag on the next injection */\n\n\n StyleSheet.prototype.sealAllTags = function sealAllTags() {\n this.capacity = 1;\n\n this.tags.forEach(function (tag) {\n // eslint-disable-next-line no-param-reassign\n tag.sealed = true;\n });\n };\n\n StyleSheet.prototype.makeTag = function makeTag$$1(tag) {\n var lastEl = tag ? tag.styleTag : null;\n var insertBefore = false;\n\n return makeTag(this.target, lastEl, this.forceServer, insertBefore, this.getImportRuleTag);\n };\n\n /* get a tag for a given componentId, assign the componentId to one, or shard */\n StyleSheet.prototype.getTagForId = function getTagForId(id) {\n /* simply return a tag, when the componentId was already assigned one */\n var prev = this.tagMap[id];\n if (prev !== undefined && !prev.sealed) {\n return prev;\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n /* shard (create a new tag) if the tag is exhausted (See MAX_SIZE) */\n this.capacity -= 1;\n\n if (this.capacity === 0) {\n this.capacity = MAX_SIZE;\n tag = this.makeTag(tag);\n this.tags.push(tag);\n }\n\n return this.tagMap[id] = tag;\n };\n\n /* mainly for createGlobalStyle to check for its id */\n\n\n StyleSheet.prototype.hasId = function hasId(id) {\n return this.tagMap[id] !== undefined;\n };\n\n /* caching layer checking id+name to already have a corresponding tag and injected rules */\n\n\n StyleSheet.prototype.hasNameForId = function hasNameForId(id, name) {\n /* exception for rehydrated names which are checked separately */\n if (this.ignoreRehydratedNames[id] === undefined && this.rehydratedNames[name]) {\n return true;\n }\n\n var tag = this.tagMap[id];\n return tag !== undefined && tag.hasNameForId(id, name);\n };\n\n /* registers a componentId and registers it on its tag */\n\n\n StyleSheet.prototype.deferredInject = function deferredInject(id, cssRules) {\n /* don't inject when the id is already registered */\n if (this.tagMap[id] !== undefined) return;\n\n var clones = this.clones;\n\n for (var i = 0; i < clones.length; i += 1) {\n clones[i].deferredInject(id, cssRules);\n }\n\n this.getTagForId(id).insertMarker(id);\n this.deferred[id] = cssRules;\n };\n\n /* injects rules for a given id with a name that will need to be cached */\n\n\n StyleSheet.prototype.inject = function inject(id, cssRules, name) {\n var clones = this.clones;\n\n\n for (var i = 0; i < clones.length; i += 1) {\n clones[i].inject(id, cssRules, name);\n }\n\n var tag = this.getTagForId(id);\n\n /* add deferred rules for component */\n if (this.deferred[id] !== undefined) {\n // Combine passed cssRules with previously deferred CSS rules\n // NOTE: We cannot mutate the deferred array itself as all clones\n // do the same (see clones[i].inject)\n var rules = this.deferred[id].concat(cssRules);\n tag.insertRules(id, rules, name);\n\n this.deferred[id] = undefined;\n } else {\n tag.insertRules(id, cssRules, name);\n }\n };\n\n /* removes all rules for a given id, which doesn't remove its marker but resets it */\n\n\n StyleSheet.prototype.remove = function remove(id) {\n var tag = this.tagMap[id];\n if (tag === undefined) return;\n\n var clones = this.clones;\n\n for (var i = 0; i < clones.length; i += 1) {\n clones[i].remove(id);\n }\n\n /* remove all rules from the tag */\n tag.removeRules(id);\n\n /* ignore possible rehydrated names */\n this.ignoreRehydratedNames[id] = true;\n\n /* delete possible deferred rules */\n this.deferred[id] = undefined;\n };\n\n StyleSheet.prototype.toHTML = function toHTML() {\n return this.tags.map(function (tag) {\n return tag.toHTML();\n }).join('');\n };\n\n StyleSheet.prototype.toReactElements = function toReactElements() {\n var id = this.id;\n\n\n return this.tags.map(function (tag, i) {\n var key = 'sc-' + id + '-' + i;\n return cloneElement(tag.toElement(), { key: key });\n });\n };\n\n createClass(StyleSheet, null, [{\n key: 'master',\n get: function get$$1() {\n return master || (master = new StyleSheet().rehydrate());\n }\n\n /* NOTE: This is just for backwards-compatibility with jest-styled-components */\n\n }, {\n key: 'instance',\n get: function get$$1() {\n return StyleSheet.master;\n }\n }]);\n return StyleSheet;\n}();\n\n// \n\nvar Keyframes = function () {\n function Keyframes(name, rules) {\n var _this = this;\n\n classCallCheck(this, Keyframes);\n\n this.inject = function (styleSheet) {\n if (!styleSheet.hasNameForId(_this.id, _this.name)) {\n styleSheet.inject(_this.id, _this.rules, _this.name);\n }\n };\n\n this.toString = function () {\n throw new StyledComponentsError(12, String(_this.name));\n };\n\n this.name = name;\n this.rules = rules;\n\n this.id = 'sc-keyframes-' + name;\n }\n\n Keyframes.prototype.getName = function getName() {\n return this.name;\n };\n\n return Keyframes;\n}();\n\n// \n\n/**\n * inlined version of\n * https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/hyphenateStyleName.js\n */\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n return string.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\n// \n\n// Taken from https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/dangerousStyleValue.js\nfunction addUnitIfNeeded(name, value) {\n // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133\n // $FlowFixMe\n if (value == null || typeof value === 'boolean' || value === '') {\n return '';\n }\n\n if (typeof value === 'number' && value !== 0 && !(name in unitless)) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n return String(value).trim();\n}\n\n// \n\n/**\n * It's falsish not falsy because 0 is allowed.\n */\nvar isFalsish = function isFalsish(chunk) {\n return chunk === undefined || chunk === null || chunk === false || chunk === '';\n};\n\nvar objToCssArray = function objToCssArray(obj, prevKey) {\n var rules = [];\n var keys = Object.keys(obj);\n\n keys.forEach(function (key) {\n if (!isFalsish(obj[key])) {\n if (isPlainObject(obj[key])) {\n rules.push.apply(rules, objToCssArray(obj[key], key));\n\n return rules;\n } else if (isFunction(obj[key])) {\n rules.push(hyphenateStyleName(key) + ':', obj[key], ';');\n\n return rules;\n }\n rules.push(hyphenateStyleName(key) + ': ' + addUnitIfNeeded(key, obj[key]) + ';');\n }\n return rules;\n });\n\n return prevKey ? [prevKey + ' {'].concat(rules, ['}']) : rules;\n};\n\nfunction flatten(chunk, executionContext, styleSheet) {\n if (Array.isArray(chunk)) {\n var ruleSet = [];\n\n for (var i = 0, len = chunk.length, result; i < len; i += 1) {\n result = flatten(chunk[i], executionContext, styleSheet);\n\n if (result === null) continue;else if (Array.isArray(result)) ruleSet.push.apply(ruleSet, result);else ruleSet.push(result);\n }\n\n return ruleSet;\n }\n\n if (isFalsish(chunk)) {\n return null;\n }\n\n /* Handle other components */\n if (isStyledComponent(chunk)) {\n return '.' + chunk.styledComponentId;\n }\n\n /* Either execute or defer the function */\n if (isFunction(chunk)) {\n if (isStatelessFunction(chunk) && executionContext) {\n var _result = chunk(executionContext);\n\n if (process.env.NODE_ENV !== 'production' && isElement(_result)) {\n // eslint-disable-next-line no-console\n console.warn(getComponentName(chunk) + ' is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.');\n }\n\n return flatten(_result, executionContext, styleSheet);\n } else return chunk;\n }\n\n if (chunk instanceof Keyframes) {\n if (styleSheet) {\n chunk.inject(styleSheet);\n return chunk.getName();\n } else return chunk;\n }\n\n /* Handle objects */\n return isPlainObject(chunk) ? objToCssArray(chunk) : chunk.toString();\n}\n\n// \n\nfunction css(styles) {\n for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n interpolations[_key - 1] = arguments[_key];\n }\n\n if (isFunction(styles) || isPlainObject(styles)) {\n // $FlowFixMe\n return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));\n }\n\n // $FlowFixMe\n return flatten(interleave(styles, interpolations));\n}\n\n// \n\nfunction constructWithOptions(componentConstructor, tag) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT;\n\n if (!isValidElementType(tag)) {\n throw new StyledComponentsError(1, String(tag));\n }\n\n /* This is callable directly as a template function */\n // $FlowFixMe: Not typed to avoid destructuring arguments\n var templateFunction = function templateFunction() {\n return componentConstructor(tag, options, css.apply(undefined, arguments));\n };\n\n /* If config methods are called, wrap up a new template function and merge options */\n templateFunction.withConfig = function (config) {\n return constructWithOptions(componentConstructor, tag, _extends({}, options, config));\n };\n\n /* Modify/inject new props at runtime */\n templateFunction.attrs = function (attrs) {\n return constructWithOptions(componentConstructor, tag, _extends({}, options, {\n attrs: Array.prototype.concat(options.attrs, attrs).filter(Boolean)\n }));\n };\n\n return templateFunction;\n}\n\n// \n// Source: https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js\nfunction murmurhash(c) {\n for (var e = c.length | 0, a = e | 0, d = 0, b; e >= 4;) {\n b = c.charCodeAt(d) & 255 | (c.charCodeAt(++d) & 255) << 8 | (c.charCodeAt(++d) & 255) << 16 | (c.charCodeAt(++d) & 255) << 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), b ^= b >>> 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16) ^ b, e -= 4, ++d;\n }\n switch (e) {\n case 3:\n a ^= (c.charCodeAt(d + 2) & 255) << 16;\n case 2:\n a ^= (c.charCodeAt(d + 1) & 255) << 8;\n case 1:\n a ^= c.charCodeAt(d) & 255, a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16);\n }\n a ^= a >>> 13;\n a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16);\n return (a ^ a >>> 15) >>> 0;\n}\n\n// \n/* eslint-disable no-bitwise */\n\n/* This is the \"capacity\" of our alphabet i.e. 2x26 for all letters plus their capitalised\n * counterparts */\nvar charsLength = 52;\n\n/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */\nvar getAlphabeticChar = function getAlphabeticChar(code) {\n return String.fromCharCode(code + (code > 25 ? 39 : 97));\n};\n\n/* input a number, usually a hash and convert it to base-52 */\nfunction generateAlphabeticName(code) {\n var name = '';\n var x = void 0;\n\n /* get a char and divide by alphabet-length */\n for (x = code; x > charsLength; x = Math.floor(x / charsLength)) {\n name = getAlphabeticChar(x % charsLength) + name;\n }\n\n return getAlphabeticChar(x % charsLength) + name;\n}\n\n// \n\nfunction hasFunctionObjectKey(obj) {\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\n for (var key in obj) {\n if (isFunction(obj[key])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isStaticRules(rules, attrs) {\n for (var i = 0; i < rules.length; i += 1) {\n var rule = rules[i];\n\n // recursive case\n if (Array.isArray(rule) && !isStaticRules(rule, attrs)) {\n return false;\n } else if (isFunction(rule) && !isStyledComponent(rule)) {\n // functions are allowed to be static if they're just being\n // used to get the classname of a nested styled component\n return false;\n }\n }\n\n if (attrs.some(function (x) {\n return isFunction(x) || hasFunctionObjectKey(x);\n })) return false;\n\n return true;\n}\n\n// \n\n/* combines hashStr (murmurhash) and nameGenerator for convenience */\nvar hasher = function hasher(str) {\n return generateAlphabeticName(murmurhash(str));\n};\n\n/*\n ComponentStyle is all the CSS-specific stuff, not\n the React-specific stuff.\n */\n\nvar ComponentStyle = function () {\n function ComponentStyle(rules, attrs, componentId) {\n classCallCheck(this, ComponentStyle);\n\n this.rules = rules;\n this.isStatic = process.env.NODE_ENV === 'production' && isStaticRules(rules, attrs);\n this.componentId = componentId;\n\n if (!StyleSheet.master.hasId(componentId)) {\n StyleSheet.master.deferredInject(componentId, []);\n }\n }\n\n /*\n * Flattens a rule set into valid CSS\n * Hashes it, wraps the whole chunk in a .hash1234 {}\n * Returns the hash to be injected on render()\n * */\n\n\n ComponentStyle.prototype.generateAndInjectStyles = function generateAndInjectStyles(executionContext, styleSheet) {\n var isStatic = this.isStatic,\n componentId = this.componentId,\n lastClassName = this.lastClassName;\n\n if (IS_BROWSER && isStatic && typeof lastClassName === 'string' && styleSheet.hasNameForId(componentId, lastClassName)) {\n return lastClassName;\n }\n\n var flatCSS = flatten(this.rules, executionContext, styleSheet);\n var name = hasher(this.componentId + flatCSS.join(''));\n if (!styleSheet.hasNameForId(componentId, name)) {\n styleSheet.inject(this.componentId, stringifyRules(flatCSS, '.' + name, undefined, componentId), name);\n }\n\n this.lastClassName = name;\n return name;\n };\n\n ComponentStyle.generateName = function generateName(str) {\n return hasher(str);\n };\n\n return ComponentStyle;\n}();\n\n// \n\nvar LIMIT = 200;\n\nvar createWarnTooManyClasses = (function (displayName) {\n var generatedClasses = {};\n var warningSeen = false;\n\n return function (className) {\n if (!warningSeen) {\n generatedClasses[className] = true;\n if (Object.keys(generatedClasses).length >= LIMIT) {\n // Unable to find latestRule in test environment.\n /* eslint-disable no-console, prefer-template */\n console.warn('Over ' + LIMIT + ' classes were generated for component ' + displayName + '. \\n' + 'Consider using the attrs method, together with a style object for frequently changed styles.\\n' + 'Example:\\n' + ' const Component = styled.div.attrs(props => ({\\n' + ' style: {\\n' + ' background: props.background,\\n' + ' },\\n' + ' }))`width: 100%;`\\n\\n' + ' ');\n warningSeen = true;\n generatedClasses = {};\n }\n }\n };\n});\n\n// \n\nvar determineTheme = (function (props, fallbackTheme) {\n var defaultProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT;\n\n // Props should take precedence over ThemeProvider, which should take precedence over\n // defaultProps, but React automatically puts defaultProps on props.\n\n /* eslint-disable react/prop-types, flowtype-errors/show-errors */\n var isDefaultTheme = defaultProps ? props.theme === defaultProps.theme : false;\n var theme = props.theme && !isDefaultTheme ? props.theme : fallbackTheme || defaultProps.theme;\n /* eslint-enable */\n\n return theme;\n});\n\n// \nvar escapeRegex = /[[\\].#*$><+~=|^:(),\"'`-]+/g;\nvar dashesAtEnds = /(^-|-$)/g;\n\n/**\n * TODO: Explore using CSS.escape when it becomes more available\n * in evergreen browsers.\n */\nfunction escape(str) {\n return str\n // Replace all possible CSS selectors\n .replace(escapeRegex, '-')\n\n // Remove extraneous hyphens at the start and end\n .replace(dashesAtEnds, '');\n}\n\n// \n\nfunction isTag(target) {\n return typeof target === 'string' && (process.env.NODE_ENV !== 'production' ? target.charAt(0) === target.charAt(0).toLowerCase() : true);\n}\n\n// \n\nfunction generateDisplayName(target) {\n // $FlowFixMe\n return isTag(target) ? 'styled.' + target : 'Styled(' + getComponentName(target) + ')';\n}\n\nvar _TYPE_STATICS;\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDerivedStateFromProps: true,\n propTypes: true,\n type: true\n};\n\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\n\nvar TYPE_STATICS = (_TYPE_STATICS = {}, _TYPE_STATICS[ForwardRef] = {\n $$typeof: true,\n render: true\n}, _TYPE_STATICS);\n\nvar defineProperty$1 = Object.defineProperty,\n getOwnPropertyNames = Object.getOwnPropertyNames,\n _Object$getOwnPropert = Object.getOwnPropertySymbols,\n getOwnPropertySymbols = _Object$getOwnPropert === undefined ? function () {\n return [];\n} : _Object$getOwnPropert,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor,\n getPrototypeOf = Object.getPrototypeOf,\n objectPrototype = Object.prototype;\nvar arrayPrototype = Array.prototype;\n\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n\n var keys = arrayPrototype.concat(getOwnPropertyNames(sourceComponent),\n // $FlowFixMe\n getOwnPropertySymbols(sourceComponent));\n\n var targetStatics = TYPE_STATICS[targetComponent.$$typeof] || REACT_STATICS;\n\n var sourceStatics = TYPE_STATICS[sourceComponent.$$typeof] || REACT_STATICS;\n\n var i = keys.length;\n var descriptor = void 0;\n var key = void 0;\n\n // eslint-disable-next-line no-plusplus\n while (i--) {\n key = keys[i];\n\n if (\n // $FlowFixMe\n !KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) &&\n // $FlowFixMe\n !(targetStatics && targetStatics[key])) {\n descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n if (descriptor) {\n try {\n // Avoid failures from read-only properties\n defineProperty$1(targetComponent, key, descriptor);\n } catch (e) {\n /* fail silently */\n }\n }\n }\n }\n\n return targetComponent;\n }\n\n return targetComponent;\n}\n\n// \nfunction isDerivedReactComponent(fn) {\n return !!(fn && fn.prototype && fn.prototype.isReactComponent);\n}\n\n// \n// Helper to call a given function, only once\nvar once = (function (cb) {\n var called = false;\n\n return function () {\n if (!called) {\n called = true;\n cb.apply(undefined, arguments);\n }\n };\n});\n\n// \n\nvar ThemeContext = createContext();\n\nvar ThemeConsumer = ThemeContext.Consumer;\n\n/**\n * Provide a theme to an entire react component tree via context\n */\n\nvar ThemeProvider = function (_Component) {\n inherits(ThemeProvider, _Component);\n\n function ThemeProvider(props) {\n classCallCheck(this, ThemeProvider);\n\n var _this = possibleConstructorReturn(this, _Component.call(this, props));\n\n _this.getContext = memoize(_this.getContext.bind(_this));\n _this.renderInner = _this.renderInner.bind(_this);\n return _this;\n }\n\n ThemeProvider.prototype.render = function render() {\n if (!this.props.children) return null;\n\n return React.createElement(\n ThemeContext.Consumer,\n null,\n this.renderInner\n );\n };\n\n ThemeProvider.prototype.renderInner = function renderInner(outerTheme) {\n var context = this.getContext(this.props.theme, outerTheme);\n\n return React.createElement(\n ThemeContext.Provider,\n { value: context },\n this.props.children\n );\n };\n\n /**\n * Get the theme from the props, supporting both (outerTheme) => {}\n * as well as object notation\n */\n\n\n ThemeProvider.prototype.getTheme = function getTheme(theme, outerTheme) {\n if (isFunction(theme)) {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme === null || Array.isArray(mergedTheme) || (typeof mergedTheme === 'undefined' ? 'undefined' : _typeof(mergedTheme)) !== 'object')) {\n throw new StyledComponentsError(7);\n }\n\n return mergedTheme;\n }\n\n if (theme === null || Array.isArray(theme) || (typeof theme === 'undefined' ? 'undefined' : _typeof(theme)) !== 'object') {\n throw new StyledComponentsError(8);\n }\n\n return _extends({}, outerTheme, theme);\n };\n\n ThemeProvider.prototype.getContext = function getContext(theme, outerTheme) {\n return this.getTheme(theme, outerTheme);\n };\n\n return ThemeProvider;\n}(Component);\n\n// \n\nvar CLOSING_TAG_R = /^\\s*<\\/[a-z]/i;\n\nvar ServerStyleSheet = function () {\n function ServerStyleSheet() {\n classCallCheck(this, ServerStyleSheet);\n\n /* The master sheet might be reset, so keep a reference here */\n this.masterSheet = StyleSheet.master;\n this.instance = this.masterSheet.clone();\n this.sealed = false;\n }\n\n /**\n * Mark the ServerStyleSheet as being fully emitted and manually GC it from the\n * StyleSheet singleton.\n */\n\n\n ServerStyleSheet.prototype.seal = function seal() {\n if (!this.sealed) {\n /* Remove sealed StyleSheets from the master sheet */\n var index = this.masterSheet.clones.indexOf(this.instance);\n this.masterSheet.clones.splice(index, 1);\n this.sealed = true;\n }\n };\n\n ServerStyleSheet.prototype.collectStyles = function collectStyles(children) {\n if (this.sealed) {\n throw new StyledComponentsError(2);\n }\n\n return React.createElement(\n StyleSheetManager,\n { sheet: this.instance },\n children\n );\n };\n\n ServerStyleSheet.prototype.getStyleTags = function getStyleTags() {\n this.seal();\n return this.instance.toHTML();\n };\n\n ServerStyleSheet.prototype.getStyleElement = function getStyleElement() {\n this.seal();\n return this.instance.toReactElements();\n };\n\n ServerStyleSheet.prototype.interleaveWithNodeStream = function interleaveWithNodeStream(readableStream) {\n var _this = this;\n\n {\n throw new StyledComponentsError(3);\n }\n\n /* the tag index keeps track of which tags have already been emitted */\n var instance = this.instance;\n\n var instanceTagIndex = 0;\n\n var streamAttr = SC_STREAM_ATTR + '=\"true\"';\n\n var transformer = new stream.Transform({\n transform: function appendStyleChunks(chunk, /* encoding */_, callback) {\n var tags = instance.tags;\n\n var html = '';\n\n /* retrieve html for each new style tag */\n for (; instanceTagIndex < tags.length; instanceTagIndex += 1) {\n var tag = tags[instanceTagIndex];\n html += tag.toHTML(streamAttr);\n }\n\n /* force our StyleSheets to emit entirely new tags */\n instance.sealAllTags();\n\n var renderedHtml = chunk.toString();\n\n /* prepend style html to chunk, unless the start of the chunk is a closing tag in which case append right after that */\n if (CLOSING_TAG_R.test(renderedHtml)) {\n var endOfClosingTag = renderedHtml.indexOf('>');\n\n this.push(renderedHtml.slice(0, endOfClosingTag + 1) + html + renderedHtml.slice(endOfClosingTag + 1));\n } else this.push(html + renderedHtml);\n\n callback();\n }\n });\n\n readableStream.on('end', function () {\n return _this.seal();\n });\n\n readableStream.on('error', function (err) {\n _this.seal();\n\n // forward the error to the transform stream\n transformer.emit('error', err);\n });\n\n return readableStream.pipe(transformer);\n };\n\n return ServerStyleSheet;\n}();\n\n// \n\nvar StyleSheetContext = createContext();\nvar StyleSheetConsumer = StyleSheetContext.Consumer;\n\nvar StyleSheetManager = function (_Component) {\n inherits(StyleSheetManager, _Component);\n\n function StyleSheetManager(props) {\n classCallCheck(this, StyleSheetManager);\n\n var _this = possibleConstructorReturn(this, _Component.call(this, props));\n\n _this.getContext = memoize(_this.getContext);\n return _this;\n }\n\n StyleSheetManager.prototype.getContext = function getContext(sheet, target) {\n if (sheet) {\n return sheet;\n } else if (target) {\n return new StyleSheet(target);\n } else {\n throw new StyledComponentsError(4);\n }\n };\n\n StyleSheetManager.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n sheet = _props.sheet,\n target = _props.target;\n\n\n return React.createElement(\n StyleSheetContext.Provider,\n { value: this.getContext(sheet, target) },\n process.env.NODE_ENV !== 'production' ? React.Children.only(children) : children\n );\n };\n\n return StyleSheetManager;\n}(Component);\nprocess.env.NODE_ENV !== \"production\" ? StyleSheetManager.propTypes = {\n sheet: PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]),\n\n target: PropTypes.shape({\n appendChild: PropTypes.func.isRequired\n })\n} : void 0;\n\n// \n\nvar identifiers = {};\n\n/* We depend on components having unique IDs */\nfunction generateId(_ComponentStyle, _displayName, parentComponentId) {\n var displayName = typeof _displayName !== 'string' ? 'sc' : escape(_displayName);\n\n /**\n * This ensures uniqueness if two components happen to share\n * the same displayName.\n */\n var nr = (identifiers[displayName] || 0) + 1;\n identifiers[displayName] = nr;\n\n var componentId = displayName + '-' + _ComponentStyle.generateName(displayName + nr);\n\n return parentComponentId ? parentComponentId + '-' + componentId : componentId;\n}\n\n// $FlowFixMe\n\nvar StyledComponent = function (_Component) {\n inherits(StyledComponent, _Component);\n\n function StyledComponent() {\n classCallCheck(this, StyledComponent);\n\n var _this = possibleConstructorReturn(this, _Component.call(this));\n\n _this.attrs = {};\n\n _this.renderOuter = _this.renderOuter.bind(_this);\n _this.renderInner = _this.renderInner.bind(_this);\n\n if (process.env.NODE_ENV !== 'production') {\n _this.warnInnerRef = once(function (displayName) {\n return (\n // eslint-disable-next-line no-console\n console.warn('The \"innerRef\" API has been removed in styled-components v4 in favor of React 16 ref forwarding, use \"ref\" instead like a typical component. \"innerRef\" was detected on component \"' + displayName + '\".')\n );\n });\n\n _this.warnAttrsFnObjectKeyDeprecated = once(function (key, displayName) {\n return (\n // eslint-disable-next-line no-console\n console.warn('Functions as object-form attrs({}) keys are now deprecated and will be removed in a future version of styled-components. Switch to the new attrs(props => ({})) syntax instead for easier and more powerful composition. The attrs key in question is \"' + key + '\" on component \"' + displayName + '\".', '\\n ' + new Error().stack)\n );\n });\n\n _this.warnNonStyledComponentAttrsObjectKey = once(function (key, displayName) {\n return (\n // eslint-disable-next-line no-console\n console.warn('It looks like you\\'ve used a non styled-component as the value for the \"' + key + '\" prop in an object-form attrs constructor of \"' + displayName + '\".\\n' + 'You should use the new function-form attrs constructor which avoids this issue: attrs(props => ({ yourStuff }))\\n' + \"To continue using the deprecated object syntax, you'll need to wrap your component prop in a function to make it available inside the styled component (you'll still get the deprecation warning though.)\\n\" + ('For example, { ' + key + ': () => InnerComponent } instead of { ' + key + ': InnerComponent }'))\n );\n });\n }\n return _this;\n }\n\n StyledComponent.prototype.render = function render() {\n return React.createElement(\n StyleSheetConsumer,\n null,\n this.renderOuter\n );\n };\n\n StyledComponent.prototype.renderOuter = function renderOuter() {\n var styleSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : StyleSheet.master;\n\n this.styleSheet = styleSheet;\n\n // No need to subscribe a static component to theme changes, it won't change anything\n if (this.props.forwardedComponent.componentStyle.isStatic) return this.renderInner();\n\n return React.createElement(\n ThemeConsumer,\n null,\n this.renderInner\n );\n };\n\n StyledComponent.prototype.renderInner = function renderInner(theme) {\n var _props$forwardedCompo = this.props.forwardedComponent,\n componentStyle = _props$forwardedCompo.componentStyle,\n defaultProps = _props$forwardedCompo.defaultProps,\n displayName = _props$forwardedCompo.displayName,\n foldedComponentIds = _props$forwardedCompo.foldedComponentIds,\n styledComponentId = _props$forwardedCompo.styledComponentId,\n target = _props$forwardedCompo.target;\n\n\n var generatedClassName = void 0;\n if (componentStyle.isStatic) {\n generatedClassName = this.generateAndInjectStyles(EMPTY_OBJECT, this.props);\n } else {\n generatedClassName = this.generateAndInjectStyles(determineTheme(this.props, theme, defaultProps) || EMPTY_OBJECT, this.props);\n }\n\n var elementToBeCreated = this.props.as || this.attrs.as || target;\n var isTargetTag = isTag(elementToBeCreated);\n\n var propsForElement = {};\n var computedProps = _extends({}, this.props, this.attrs);\n\n var key = void 0;\n // eslint-disable-next-line guard-for-in\n for (key in computedProps) {\n if (process.env.NODE_ENV !== 'production' && key === 'innerRef' && isTargetTag) {\n this.warnInnerRef(displayName);\n }\n\n if (key === 'forwardedComponent' || key === 'as') {\n continue;\n } else if (key === 'forwardedRef') propsForElement.ref = computedProps[key];else if (key === 'forwardedAs') propsForElement.as = computedProps[key];else if (!isTargetTag || validAttr(key)) {\n // Don't pass through non HTML tags through to HTML elements\n propsForElement[key] = computedProps[key];\n }\n }\n\n if (this.props.style && this.attrs.style) {\n propsForElement.style = _extends({}, this.attrs.style, this.props.style);\n }\n\n propsForElement.className = Array.prototype.concat(foldedComponentIds, styledComponentId, generatedClassName !== styledComponentId ? generatedClassName : null, this.props.className, this.attrs.className).filter(Boolean).join(' ');\n\n return createElement(elementToBeCreated, propsForElement);\n };\n\n StyledComponent.prototype.buildExecutionContext = function buildExecutionContext(theme, props, attrs) {\n var _this2 = this;\n\n var context = _extends({}, props, { theme: theme });\n\n if (!attrs.length) return context;\n\n this.attrs = {};\n\n attrs.forEach(function (attrDef) {\n var resolvedAttrDef = attrDef;\n var attrDefWasFn = false;\n var attr = void 0;\n var key = void 0;\n\n if (isFunction(resolvedAttrDef)) {\n // $FlowFixMe\n resolvedAttrDef = resolvedAttrDef(context);\n attrDefWasFn = true;\n }\n\n /* eslint-disable guard-for-in */\n // $FlowFixMe\n for (key in resolvedAttrDef) {\n attr = resolvedAttrDef[key];\n\n if (!attrDefWasFn) {\n if (isFunction(attr) && !isDerivedReactComponent(attr) && !isStyledComponent(attr)) {\n if (process.env.NODE_ENV !== 'production') {\n _this2.warnAttrsFnObjectKeyDeprecated(key, props.forwardedComponent.displayName);\n }\n\n attr = attr(context);\n\n if (process.env.NODE_ENV !== 'production' && React.isValidElement(attr)) {\n _this2.warnNonStyledComponentAttrsObjectKey(key, props.forwardedComponent.displayName);\n }\n }\n }\n\n _this2.attrs[key] = attr;\n context[key] = attr;\n }\n /* eslint-enable */\n });\n\n return context;\n };\n\n StyledComponent.prototype.generateAndInjectStyles = function generateAndInjectStyles(theme, props) {\n var _props$forwardedCompo2 = props.forwardedComponent,\n attrs = _props$forwardedCompo2.attrs,\n componentStyle = _props$forwardedCompo2.componentStyle,\n warnTooManyClasses = _props$forwardedCompo2.warnTooManyClasses;\n\n // statically styled-components don't need to build an execution context object,\n // and shouldn't be increasing the number of class names\n\n if (componentStyle.isStatic && !attrs.length) {\n return componentStyle.generateAndInjectStyles(EMPTY_OBJECT, this.styleSheet);\n }\n\n var className = componentStyle.generateAndInjectStyles(this.buildExecutionContext(theme, props, attrs), this.styleSheet);\n\n if (process.env.NODE_ENV !== 'production' && warnTooManyClasses) warnTooManyClasses(className);\n\n return className;\n };\n\n return StyledComponent;\n}(Component);\n\nfunction createStyledComponent(target, options, rules) {\n var isTargetStyledComp = isStyledComponent(target);\n var isClass = !isTag(target);\n\n var _options$displayName = options.displayName,\n displayName = _options$displayName === undefined ? generateDisplayName(target) : _options$displayName,\n _options$componentId = options.componentId,\n componentId = _options$componentId === undefined ? generateId(ComponentStyle, options.displayName, options.parentComponentId) : _options$componentId,\n _options$ParentCompon = options.ParentComponent,\n ParentComponent = _options$ParentCompon === undefined ? StyledComponent : _options$ParentCompon,\n _options$attrs = options.attrs,\n attrs = _options$attrs === undefined ? EMPTY_ARRAY : _options$attrs;\n\n\n var styledComponentId = options.displayName && options.componentId ? escape(options.displayName) + '-' + options.componentId : options.componentId || componentId;\n\n // fold the underlying StyledComponent attrs up (implicit extend)\n var finalAttrs =\n // $FlowFixMe\n isTargetStyledComp && target.attrs ? Array.prototype.concat(target.attrs, attrs).filter(Boolean) : attrs;\n\n var componentStyle = new ComponentStyle(isTargetStyledComp ? // fold the underlying StyledComponent rules up (implicit extend)\n // $FlowFixMe\n target.componentStyle.rules.concat(rules) : rules, finalAttrs, styledComponentId);\n\n /**\n * forwardRef creates a new interim component, which we'll take advantage of\n * instead of extending ParentComponent to create _another_ interim class\n */\n var WrappedStyledComponent = void 0;\n var forwardRef = function forwardRef(props, ref) {\n return React.createElement(ParentComponent, _extends({}, props, { forwardedComponent: WrappedStyledComponent, forwardedRef: ref }));\n };\n forwardRef.displayName = displayName;\n WrappedStyledComponent = React.forwardRef(forwardRef);\n WrappedStyledComponent.displayName = displayName;\n\n // $FlowFixMe\n WrappedStyledComponent.attrs = finalAttrs;\n // $FlowFixMe\n WrappedStyledComponent.componentStyle = componentStyle;\n\n // $FlowFixMe\n WrappedStyledComponent.foldedComponentIds = isTargetStyledComp ? // $FlowFixMe\n Array.prototype.concat(target.foldedComponentIds, target.styledComponentId) : EMPTY_ARRAY;\n\n // $FlowFixMe\n WrappedStyledComponent.styledComponentId = styledComponentId;\n\n // fold the underlying StyledComponent target up since we folded the styles\n // $FlowFixMe\n WrappedStyledComponent.target = isTargetStyledComp ? target.target : target;\n\n // $FlowFixMe\n WrappedStyledComponent.withComponent = function withComponent(tag) {\n var previousComponentId = options.componentId,\n optionsToCopy = objectWithoutProperties(options, ['componentId']);\n\n\n var newComponentId = previousComponentId && previousComponentId + '-' + (isTag(tag) ? tag : escape(getComponentName(tag)));\n\n var newOptions = _extends({}, optionsToCopy, {\n attrs: finalAttrs,\n componentId: newComponentId,\n ParentComponent: ParentComponent\n });\n\n return createStyledComponent(tag, newOptions, rules);\n };\n\n // $FlowFixMe\n Object.defineProperty(WrappedStyledComponent, 'defaultProps', {\n get: function get$$1() {\n return this._foldedDefaultProps;\n },\n set: function set$$1(obj) {\n // $FlowFixMe\n this._foldedDefaultProps = isTargetStyledComp ? merge(target.defaultProps, obj) : obj;\n }\n });\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n WrappedStyledComponent.warnTooManyClasses = createWarnTooManyClasses(displayName);\n }\n\n // $FlowFixMe\n WrappedStyledComponent.toString = function () {\n return '.' + WrappedStyledComponent.styledComponentId;\n };\n\n if (isClass) {\n hoistNonReactStatics(WrappedStyledComponent, target, {\n // all SC-specific things should not be hoisted\n attrs: true,\n componentStyle: true,\n displayName: true,\n foldedComponentIds: true,\n styledComponentId: true,\n target: true,\n withComponent: true\n });\n }\n\n return WrappedStyledComponent;\n}\n\n// \n// Thanks to ReactDOMFactories for this handy list!\n\nvar domElements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr',\n\n// SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'marker', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// \n\nvar styled = function styled(tag) {\n return constructWithOptions(createStyledComponent, tag);\n};\n\n// Shorthands for all valid HTML Elements\ndomElements.forEach(function (domElement) {\n styled[domElement] = styled(domElement);\n});\n\n// \n\nvar GlobalStyle = function () {\n function GlobalStyle(rules, componentId) {\n classCallCheck(this, GlobalStyle);\n\n this.rules = rules;\n this.componentId = componentId;\n this.isStatic = isStaticRules(rules, EMPTY_ARRAY);\n\n if (!StyleSheet.master.hasId(componentId)) {\n StyleSheet.master.deferredInject(componentId, []);\n }\n }\n\n GlobalStyle.prototype.createStyles = function createStyles(executionContext, styleSheet) {\n var flatCSS = flatten(this.rules, executionContext, styleSheet);\n var css = stringifyRules(flatCSS, '');\n\n styleSheet.inject(this.componentId, css);\n };\n\n GlobalStyle.prototype.removeStyles = function removeStyles(styleSheet) {\n var componentId = this.componentId;\n\n if (styleSheet.hasId(componentId)) {\n styleSheet.remove(componentId);\n }\n };\n\n // TODO: overwrite in-place instead of remove+create?\n\n\n GlobalStyle.prototype.renderStyles = function renderStyles(executionContext, styleSheet) {\n this.removeStyles(styleSheet);\n this.createStyles(executionContext, styleSheet);\n };\n\n return GlobalStyle;\n}();\n\n// \n\n// place our cache into shared context so it'll persist between HMRs\nif (IS_BROWSER) {\n window.scCGSHMRCache = {};\n}\n\nfunction createGlobalStyle(strings) {\n for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n interpolations[_key - 1] = arguments[_key];\n }\n\n var rules = css.apply(undefined, [strings].concat(interpolations));\n var id = 'sc-global-' + murmurhash(JSON.stringify(rules));\n var style = new GlobalStyle(rules, id);\n\n var GlobalStyleComponent = function (_React$Component) {\n inherits(GlobalStyleComponent, _React$Component);\n\n function GlobalStyleComponent(props) {\n classCallCheck(this, GlobalStyleComponent);\n\n var _this = possibleConstructorReturn(this, _React$Component.call(this, props));\n\n var _this$constructor = _this.constructor,\n globalStyle = _this$constructor.globalStyle,\n styledComponentId = _this$constructor.styledComponentId;\n\n\n if (IS_BROWSER) {\n window.scCGSHMRCache[styledComponentId] = (window.scCGSHMRCache[styledComponentId] || 0) + 1;\n }\n\n /**\n * This fixes HMR compatibility. Don't ask me why, but this combination of\n * caching the closure variables via statics and then persisting the statics in\n * state works across HMR where no other combination did. ¯\\_(ツ)_/¯\n */\n _this.state = {\n globalStyle: globalStyle,\n styledComponentId: styledComponentId\n };\n return _this;\n }\n\n GlobalStyleComponent.prototype.componentWillUnmount = function componentWillUnmount() {\n if (window.scCGSHMRCache[this.state.styledComponentId]) {\n window.scCGSHMRCache[this.state.styledComponentId] -= 1;\n }\n /**\n * Depending on the order \"render\" is called this can cause the styles to be lost\n * until the next render pass of the remaining instance, which may\n * not be immediate.\n */\n if (window.scCGSHMRCache[this.state.styledComponentId] === 0) {\n this.state.globalStyle.removeStyles(this.styleSheet);\n }\n };\n\n GlobalStyleComponent.prototype.render = function render() {\n var _this2 = this;\n\n if (process.env.NODE_ENV !== 'production' && React.Children.count(this.props.children)) {\n // eslint-disable-next-line no-console\n console.warn('The global style component ' + this.state.styledComponentId + ' was given child JSX. createGlobalStyle does not render children.');\n }\n\n return React.createElement(\n StyleSheetConsumer,\n null,\n function (styleSheet) {\n _this2.styleSheet = styleSheet || StyleSheet.master;\n\n var globalStyle = _this2.state.globalStyle;\n\n\n if (globalStyle.isStatic) {\n globalStyle.renderStyles(STATIC_EXECUTION_CONTEXT, _this2.styleSheet);\n\n return null;\n } else {\n return React.createElement(\n ThemeConsumer,\n null,\n function (theme) {\n // $FlowFixMe\n var defaultProps = _this2.constructor.defaultProps;\n\n\n var context = _extends({}, _this2.props);\n\n if (typeof theme !== 'undefined') {\n context.theme = determineTheme(_this2.props, theme, defaultProps);\n }\n\n globalStyle.renderStyles(context, _this2.styleSheet);\n\n return null;\n }\n );\n }\n }\n );\n };\n\n return GlobalStyleComponent;\n }(React.Component);\n\n GlobalStyleComponent.globalStyle = style;\n GlobalStyleComponent.styledComponentId = id;\n\n\n return GlobalStyleComponent;\n}\n\n// \n\nvar replaceWhitespace = function replaceWhitespace(str) {\n return str.replace(/\\s|\\\\n/g, '');\n};\n\nfunction keyframes(strings) {\n /* Warning if you've used keyframes on React Native */\n if (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n // eslint-disable-next-line no-console\n console.warn('`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.');\n }\n\n for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n interpolations[_key - 1] = arguments[_key];\n }\n\n var rules = css.apply(undefined, [strings].concat(interpolations));\n\n var name = generateAlphabeticName(murmurhash(replaceWhitespace(JSON.stringify(rules))));\n\n return new Keyframes(name, stringifyRules(rules, name, '@keyframes'));\n}\n\n// \n\nvar withTheme = (function (Component$$1) {\n var WithTheme = React.forwardRef(function (props, ref) {\n return React.createElement(\n ThemeConsumer,\n null,\n function (theme) {\n // $FlowFixMe\n var defaultProps = Component$$1.defaultProps;\n\n var themeProp = determineTheme(props, theme, defaultProps);\n\n if (process.env.NODE_ENV !== 'production' && themeProp === undefined) {\n // eslint-disable-next-line no-console\n console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"' + getComponentName(Component$$1) + '\"');\n }\n\n return React.createElement(Component$$1, _extends({}, props, { theme: themeProp, ref: ref }));\n }\n );\n });\n\n hoistNonReactStatics(WithTheme, Component$$1);\n\n WithTheme.displayName = 'WithTheme(' + getComponentName(Component$$1) + ')';\n\n return WithTheme;\n});\n\n// \n\n/* eslint-disable */\nvar __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS = {\n StyleSheet: StyleSheet\n};\n\n// \n\n/* Warning if you've imported this file on React Native */\nif (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n // eslint-disable-next-line no-console\n console.warn(\"It looks like you've imported 'styled-components' on React Native.\\n\" + \"Perhaps you're looking to import 'styled-components/native'?\\n\" + 'Read more about this at https://www.styled-components.com/docs/basics#react-native');\n}\n\n/* Warning if there are several instances of styled-components */\nif (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Node.js') === -1 && navigator.userAgent.indexOf('jsdom') === -1) {\n window['__styled-components-init__'] = window['__styled-components-init__'] || 0;\n\n if (window['__styled-components-init__'] === 1) {\n // eslint-disable-next-line no-console\n console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. \" + 'This may cause dynamic styles not rendering properly, errors happening during rehydration process ' + 'and makes your application bigger without a good reason.\\n\\n' + 'See https://s-c.sh/2BAXzed for more info.');\n }\n\n window['__styled-components-init__'] += 1;\n}\n\n//\n\nexport default styled;\nexport { createGlobalStyle, css, isStyledComponent, keyframes, ServerStyleSheet, StyleSheetConsumer, StyleSheetContext, StyleSheetManager, ThemeConsumer, ThemeContext, ThemeProvider, withTheme, __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS };\n//# sourceMappingURL=styled-components.browser.esm.js.map\n","(function (factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory()) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory()) :\n\t\t\t(window['stylisRuleSheet'] = factory())\n}(function () {\n\n\t'use strict'\n\n\treturn function (insertRule) {\n\t\tvar delimiter = '/*|*/'\n\t\tvar needle = delimiter+'}'\n\n\t\tfunction toSheet (block) {\n\t\t\tif (block)\n\t\t\t\ttry {\n\t\t\t\t\tinsertRule(block + '}')\n\t\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) {\n\t\t\tswitch (context) {\n\t\t\t\t// property\n\t\t\t\tcase 1:\n\t\t\t\t\t// @import\n\t\t\t\t\tif (depth === 0 && content.charCodeAt(0) === 64)\n\t\t\t\t\t\treturn insertRule(content+';'), ''\n\t\t\t\t\tbreak\n\t\t\t\t// selector\n\t\t\t\tcase 2:\n\t\t\t\t\tif (ns === 0)\n\t\t\t\t\t\treturn content + delimiter\n\t\t\t\t\tbreak\n\t\t\t\t// at-rule\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\t// @font-face, @page\n\t\t\t\t\t\tcase 102:\n\t\t\t\t\t\tcase 112:\n\t\t\t\t\t\t\treturn insertRule(selectors[0]+content), ''\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn content + (at === 0 ? delimiter : '')\n\t\t\t\t\t}\n\t\t\t\tcase -2:\n\t\t\t\t\tcontent.split(needle).forEach(toSheet)\n\t\t\t}\n\t\t}\n\t}\n}))\n","!function(e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(null):\"function\"==typeof define&&define.amd?define(e(null)):window.stylis=e(null)}(function e(a){\"use strict\";var r=/^\\0+/g,c=/[\\0\\r\\f]/g,s=/: */g,t=/zoo|gra/,i=/([,: ])(transform)/g,f=/,+\\s*(?![^(]*[)])/g,n=/ +\\s*(?![^(]*[)])/g,l=/ *[\\0] */g,o=/,\\r+?/g,h=/([\\t\\r\\n ])*\\f?&/g,u=/:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g,d=/\\W+/g,b=/@(k\\w+)\\s*(\\S*)\\s*/,p=/::(place)/g,k=/:(read-only)/g,g=/\\s+(?=[{\\];=:>])/g,A=/([[}=:>])\\s+/g,C=/(\\{[^{]+?);(?=\\})/g,w=/\\s{2,}/g,v=/([^\\(])(:+) */g,m=/[svh]\\w+-[tblr]{2}/,x=/\\(\\s*(.*)\\s*\\)/g,$=/([\\s\\S]*?);/g,y=/-self|flex-/g,O=/[^]*?(:[rp][el]a[\\w-]+)[^]*/,j=/stretch|:\\s*\\w+\\-(?:conte|avail)/,z=/([^-])(image-set\\()/,N=\"-webkit-\",S=\"-moz-\",F=\"-ms-\",W=59,q=125,B=123,D=40,E=41,G=91,H=93,I=10,J=13,K=9,L=64,M=32,P=38,Q=45,R=95,T=42,U=44,V=58,X=39,Y=34,Z=47,_=62,ee=43,ae=126,re=0,ce=12,se=11,te=107,ie=109,fe=115,ne=112,le=111,oe=105,he=99,ue=100,de=112,be=1,pe=1,ke=0,ge=1,Ae=1,Ce=1,we=0,ve=0,me=0,xe=[],$e=[],ye=0,Oe=null,je=-2,ze=-1,Ne=0,Se=1,Fe=2,We=3,qe=0,Be=1,De=\"\",Ee=\"\",Ge=\"\";function He(e,a,s,t,i){for(var f,n,o=0,h=0,u=0,d=0,g=0,A=0,C=0,w=0,m=0,$=0,y=0,O=0,j=0,z=0,R=0,we=0,$e=0,Oe=0,je=0,ze=s.length,Je=ze-1,Re=\"\",Te=\"\",Ue=\"\",Ve=\"\",Xe=\"\",Ye=\"\";R0)Te=Te.replace(c,\"\");if(Te.trim().length>0){switch(C){case M:case K:case W:case J:case I:break;default:Te+=s.charAt(R)}C=W}}if(1===$e)switch(C){case B:case q:case W:case Y:case X:case D:case E:case U:$e=0;case K:case J:case I:case M:break;default:for($e=0,je=R,g=C,R--,C=W;je0)++R,C=g;case B:je=ze}}switch(C){case B:for(g=(Te=Te.trim()).charCodeAt(0),y=1,je=++R;R0)Te=Te.replace(c,\"\");switch(A=Te.charCodeAt(1)){case ue:case ie:case fe:case Q:f=a;break;default:f=xe}if(je=(Ue=He(a,f,Ue,A,i+1)).length,me>0&&0===je)je=Te.length;if(ye>0)if(f=Ie(xe,Te,Oe),n=Pe(We,Ue,f,a,pe,be,je,A,i,t),Te=f.join(\"\"),void 0!==n)if(0===(je=(Ue=n.trim()).length))A=0,Ue=\"\";if(je>0)switch(A){case fe:Te=Te.replace(x,Me);case ue:case ie:case Q:Ue=Te+\"{\"+Ue+\"}\";break;case te:if(Ue=(Te=Te.replace(b,\"$1 $2\"+(Be>0?De:\"\")))+\"{\"+Ue+\"}\",1===Ae||2===Ae&&Le(\"@\"+Ue,3))Ue=\"@\"+N+Ue+\"@\"+Ue;else Ue=\"@\"+Ue;break;default:if(Ue=Te+Ue,t===de)Ve+=Ue,Ue=\"\"}else Ue=\"\";break;default:Ue=He(a,Ie(a,Te,Oe),Ue,t,i+1)}Xe+=Ue,O=0,$e=0,z=0,we=0,Oe=0,j=0,Te=\"\",Ue=\"\",C=s.charCodeAt(++R);break;case q:case W:if((je=(Te=(we>0?Te.replace(c,\"\"):Te).trim()).length)>1){if(0===z)if((g=Te.charCodeAt(0))===Q||g>96&&g<123)je=(Te=Te.replace(\" \",\":\")).length;if(ye>0)if(void 0!==(n=Pe(Se,Te,a,e,pe,be,Ve.length,t,i,t)))if(0===(je=(Te=n.trim()).length))Te=\"\\0\\0\";switch(g=Te.charCodeAt(0),A=Te.charCodeAt(1),g){case re:break;case L:if(A===oe||A===he){Ye+=Te+s.charAt(R);break}default:if(Te.charCodeAt(je-1)===V)break;Ve+=Ke(Te,g,A,Te.charCodeAt(2))}}O=0,$e=0,z=0,we=0,Oe=0,Te=\"\",C=s.charCodeAt(++R)}}switch(C){case J:case I:if(h+d+u+o+ve===0)switch($){case E:case X:case Y:case L:case ae:case _:case T:case ee:case Z:case Q:case V:case U:case W:case B:case q:break;default:if(z>0)$e=1}if(h===Z)h=0;else if(ge+O===0&&t!==te&&Te.length>0)we=1,Te+=\"\\0\";if(ye*qe>0)Pe(Ne,Te,a,e,pe,be,Ve.length,t,i,t);be=1,pe++;break;case W:case q:if(h+d+u+o===0){be++;break}default:switch(be++,Re=s.charAt(R),C){case K:case M:if(d+o+h===0)switch(w){case U:case V:case K:case M:Re=\"\";break;default:if(C!==M)Re=\" \"}break;case re:Re=\"\\\\0\";break;case ce:Re=\"\\\\f\";break;case se:Re=\"\\\\v\";break;case P:if(d+h+o===0&&ge>0)Oe=1,we=1,Re=\"\\f\"+Re;break;case 108:if(d+h+o+ke===0&&z>0)switch(R-z){case 2:if(w===ne&&s.charCodeAt(R-3)===V)ke=w;case 8:if(m===le)ke=m}break;case V:if(d+h+o===0)z=R;break;case U:if(h+u+d+o===0)we=1,Re+=\"\\r\";break;case Y:case X:if(0===h)d=d===C?0:0===d?C:d;break;case G:if(d+h+u===0)o++;break;case H:if(d+h+u===0)o--;break;case E:if(d+h+o===0)u--;break;case D:if(d+h+o===0){if(0===O)switch(2*w+3*m){case 533:break;default:y=0,O=1}u++}break;case L:if(h+u+d+o+z+j===0)j=1;break;case T:case Z:if(d+o+u>0)break;switch(h){case 0:switch(2*C+3*s.charCodeAt(R+1)){case 235:h=Z;break;case 220:je=R,h=T}break;case T:if(C===Z&&w===T&&je+2!==R){if(33===s.charCodeAt(je+2))Ve+=s.substring(je,R+1);Re=\"\",h=0}}}if(0===h){if(ge+d+o+j===0&&t!==te&&C!==W)switch(C){case U:case ae:case _:case ee:case E:case D:if(0===O){switch(w){case K:case M:case I:case J:Re+=\"\\0\";break;default:Re=\"\\0\"+Re+(C===U?\"\":\"\\0\")}we=1}else switch(C){case D:if(z+7===R&&108===w)z=0;O=++y;break;case E:if(0==(O=--y))we=1,Re+=\"\\0\"}break;case K:case M:switch(w){case re:case B:case q:case W:case U:case ce:case K:case M:case I:case J:break;default:if(0===O)we=1,Re+=\"\\0\"}}if(Te+=Re,C!==M&&C!==K)$=C}}m=w,w=C,R++}if(je=Ve.length,me>0)if(0===je&&0===Xe.length&&0===a[0].length==false)if(t!==ie||1===a.length&&(ge>0?Ee:Ge)===a[0])je=a.join(\",\").length+2;if(je>0){if(f=0===ge&&t!==te?function(e){for(var a,r,s=0,t=e.length,i=Array(t);s1)continue;if(u=n.charCodeAt(n.length-1),d=r.charCodeAt(0),a=\"\",0!==o)switch(u){case T:case ae:case _:case ee:case M:case D:break;default:a=\" \"}switch(d){case P:r=a+Ee;case ae:case _:case ee:case M:case E:case D:break;case G:r=a+r+Ee;break;case V:switch(2*r.charCodeAt(1)+3*r.charCodeAt(2)){case 530:if(Ce>0){r=a+r.substring(8,h-1);break}default:if(o<1||f[o-1].length<1)r=a+Ee+r}break;case U:a=\"\";default:if(h>1&&r.indexOf(\":\")>0)r=a+r.replace(v,\"$1\"+Ee+\"$2\");else r=a+r+Ee}n+=r}i[s]=n.replace(c,\"\").trim()}return i}(a):a,ye>0)if(void 0!==(n=Pe(Fe,Ve,f,e,pe,be,je,t,i,t))&&0===(Ve=n).length)return Ye+Ve+Xe;if(Ve=f.join(\",\")+\"{\"+Ve+\"}\",Ae*ke!=0){if(2===Ae&&!Le(Ve,2))ke=0;switch(ke){case le:Ve=Ve.replace(k,\":\"+S+\"$1\")+Ve;break;case ne:Ve=Ve.replace(p,\"::\"+N+\"input-$1\")+Ve.replace(p,\"::\"+S+\"$1\")+Ve.replace(p,\":\"+F+\"input-$1\")+Ve}ke=0}}return Ye+Ve+Xe}function Ie(e,a,r){var c=a.trim().split(o),s=c,t=c.length,i=e.length;switch(i){case 0:case 1:for(var f=0,n=0===i?\"\":e[0]+\" \";f0&&ge>0)return s.replace(u,\"$1\").replace(h,\"$1\"+Ge);break;default:return e.trim()+s.replace(h,\"$1\"+e.trim())}default:if(r*ge>0&&s.indexOf(\"\\f\")>0)return s.replace(h,(e.charCodeAt(0)===V?\"\":\"$1\")+e.trim())}return e+s}function Ke(e,a,r,c){var l,o=0,h=e+\";\",u=2*a+3*r+4*c;if(944===u)return function(e){var a=e.length,r=e.indexOf(\":\",9)+1,c=e.substring(0,r).trim(),s=e.substring(r,a-1).trim();switch(e.charCodeAt(9)*Be){case 0:break;case Q:if(110!==e.charCodeAt(10))break;default:for(var t=s.split((s=\"\",f)),i=0,r=0,a=t.length;iL&&h<90||h>96&&h<123||h===R||h===Q&&l.charCodeAt(1)!==Q))switch(isNaN(parseFloat(l))+(-1!==l.indexOf(\"(\"))){case 1:switch(l){case\"infinite\":case\"alternate\":case\"backwards\":case\"running\":case\"normal\":case\"forwards\":case\"both\":case\"none\":case\"linear\":case\"ease\":case\"ease-in\":case\"ease-out\":case\"ease-in-out\":case\"paused\":case\"reverse\":case\"alternate-reverse\":case\"inherit\":case\"initial\":case\"unset\":case\"step-start\":case\"step-end\":break;default:l+=De}}o[r++]=l}s+=(0===i?\"\":\",\")+o.join(\" \")}}if(s=c+s+\";\",1===Ae||2===Ae&&Le(s,1))return N+s+s;return s}(h);else if(0===Ae||2===Ae&&!Le(h,1))return h;switch(u){case 1015:return 97===h.charCodeAt(10)?N+h+h:h;case 951:return 116===h.charCodeAt(3)?N+h+h:h;case 963:return 110===h.charCodeAt(5)?N+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return N+h+h;case 978:return N+h+S+h+h;case 1019:case 983:return N+h+S+h+F+h+h;case 883:if(h.charCodeAt(8)===Q)return N+h+h;if(h.indexOf(\"image-set(\",11)>0)return h.replace(z,\"$1\"+N+\"$2\")+h;return h;case 932:if(h.charCodeAt(4)===Q)switch(h.charCodeAt(5)){case 103:return N+\"box-\"+h.replace(\"-grow\",\"\")+N+h+F+h.replace(\"grow\",\"positive\")+h;case 115:return N+h+F+h.replace(\"shrink\",\"negative\")+h;case 98:return N+h+F+h.replace(\"basis\",\"preferred-size\")+h}return N+h+F+h+h;case 964:return N+h+F+\"flex-\"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return l=h.substring(h.indexOf(\":\",15)).replace(\"flex-\",\"\").replace(\"space-between\",\"justify\"),N+\"box-pack\"+l+N+h+F+\"flex-pack\"+l+h;case 1005:return t.test(h)?h.replace(s,\":\"+N)+h.replace(s,\":\"+S)+h:h;case 1e3:switch(o=(l=h.substring(13).trim()).indexOf(\"-\")+1,l.charCodeAt(0)+l.charCodeAt(o)){case 226:l=h.replace(m,\"tb\");break;case 232:l=h.replace(m,\"tb-rl\");break;case 220:l=h.replace(m,\"lr\");break;default:return h}return N+h+F+l+h;case 1017:if(-1===h.indexOf(\"sticky\",9))return h;case 975:switch(o=(h=e).length-10,u=(l=(33===h.charCodeAt(o)?h.substring(0,o):h).substring(e.indexOf(\":\",7)+1).trim()).charCodeAt(0)+(0|l.charCodeAt(7))){case 203:if(l.charCodeAt(8)<111)break;case 115:h=h.replace(l,N+l)+\";\"+h;break;case 207:case 102:h=h.replace(l,N+(u>102?\"inline-\":\"\")+\"box\")+\";\"+h.replace(l,N+l)+\";\"+h.replace(l,F+l+\"box\")+\";\"+h}return h+\";\";case 938:if(h.charCodeAt(5)===Q)switch(h.charCodeAt(6)){case 105:return l=h.replace(\"-items\",\"\"),N+h+N+\"box-\"+l+F+\"flex-\"+l+h;case 115:return N+h+F+\"flex-item-\"+h.replace(y,\"\")+h;default:return N+h+F+\"flex-line-pack\"+h.replace(\"align-content\",\"\").replace(y,\"\")+h}break;case 973:case 989:if(h.charCodeAt(3)!==Q||122===h.charCodeAt(4))break;case 931:case 953:if(true===j.test(e))if(115===(l=e.substring(e.indexOf(\":\")+1)).charCodeAt(0))return Ke(e.replace(\"stretch\",\"fill-available\"),a,r,c).replace(\":fill-available\",\":stretch\");else return h.replace(l,N+l)+h.replace(l,S+l.replace(\"fill-\",\"\"))+h;break;case 962:if(h=N+h+(102===h.charCodeAt(5)?F+h:\"\")+h,r+c===211&&105===h.charCodeAt(13)&&h.indexOf(\"transform\",10)>0)return h.substring(0,h.indexOf(\";\",27)+1).replace(i,\"$1\"+N+\"$2\")+h}return h}function Le(e,a){var r=e.indexOf(1===a?\":\":\"{\"),c=e.substring(0,3!==a?r:10),s=e.substring(r+1,e.length-1);return Oe(2!==a?c:c.replace(O,\"$1\"),s,a)}function Me(e,a){var r=Ke(a,a.charCodeAt(0),a.charCodeAt(1),a.charCodeAt(2));return r!==a+\";\"?r.replace($,\" or ($1)\").substring(4):\"(\"+a+\")\"}function Pe(e,a,r,c,s,t,i,f,n,l){for(var o,h=0,u=a;h0)De=s.replace(d,t===G?\"\":\"-\");if(t=1,1===ge)Ge=s;else Ee=s;var i,f=[Ge];if(ye>0)if(void 0!==(i=Pe(ze,r,f,f,pe,be,0,0,0,0))&&\"string\"==typeof i)r=i;var n=He(xe,f,r,0,0);if(ye>0)if(void 0!==(i=Pe(je,n,f,f,pe,be,n.length,0,0,0))&&\"string\"!=typeof(n=i))t=0;return De=\"\",Ge=\"\",Ee=\"\",ke=0,pe=1,be=1,we*t==0?n:n.replace(c,\"\").replace(g,\"\").replace(A,\"$1\").replace(C,\"$1\").replace(w,\" \")}if(Te.use=function e(a){switch(a){case void 0:case null:ye=$e.length=0;break;default:if(\"function\"==typeof a)$e[ye++]=a;else if(\"object\"==typeof a)for(var r=0,c=a.length;r ch.toUpperCase() === ch;\nvar filterKey = (keys) => (key) => keys.indexOf(key) === -1;\nvar omit = (obj, keys) => {\n const res = {};\n Object.keys(obj).filter(filterKey(keys)).forEach((key) => {\n res[key] = obj[key];\n });\n return res;\n};\nfunction filterProps(asIs, props, omitKeys) {\n const filteredProps = omit(props, omitKeys);\n if (!asIs) {\n const interopValidAttr = typeof validAttr === \"function\" ? { default: validAttr } : validAttr;\n Object.keys(filteredProps).forEach((key) => {\n if (!interopValidAttr.default(key)) {\n delete filteredProps[key];\n }\n });\n }\n return filteredProps;\n}\nvar warnIfInvalid = (value, componentName) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof value === \"string\" || typeof value === \"number\" && isFinite(value)) {\n return;\n }\n const stringified = typeof value === \"object\" ? JSON.stringify(value) : String(value);\n console.warn(\n `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.`\n );\n }\n};\nfunction styled(tag) {\n return (options) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (Array.isArray(options)) {\n throw new Error(\n 'Using the \"styled\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup'\n );\n }\n }\n const render = (props, ref) => {\n const { as: component = tag, class: className } = props;\n const shouldKeepProps = options.propsAsIs === void 0 ? !(typeof component === \"string\" && component.indexOf(\"-\") === -1 && !isCapital(component[0])) : options.propsAsIs;\n const filteredProps = filterProps(shouldKeepProps, props, [\n \"as\",\n \"class\"\n ]);\n filteredProps.ref = ref;\n filteredProps.className = options.atomic ? cx(options.class, filteredProps.className || className) : cx(filteredProps.className || className, options.class);\n const { vars } = options;\n if (vars) {\n const style = {};\n for (const name in vars) {\n const variable = vars[name];\n const result = variable[0];\n const unit = variable[1] || \"\";\n const value = typeof result === \"function\" ? result(props) : result;\n warnIfInvalid(value, options.name);\n style[`--${name}`] = `${value}${unit}`;\n }\n const ownStyle = filteredProps.style || {};\n const keys = Object.keys(ownStyle);\n if (keys.length > 0) {\n keys.forEach((key) => {\n style[key] = ownStyle[key];\n });\n }\n filteredProps.style = style;\n }\n if (tag.__linaria && tag !== component) {\n filteredProps.as = component;\n return React.createElement(tag, filteredProps);\n }\n return React.createElement(component, filteredProps);\n };\n const Result = React.forwardRef ? React.forwardRef(render) : (props) => {\n const rest = omit(props, [\"innerRef\"]);\n return render(rest, props.innerRef);\n };\n Result.displayName = options.name;\n Result.__linaria = {\n className: options.class,\n extends: tag\n };\n return Result;\n };\n}\nvar styled_default = process.env.NODE_ENV !== \"production\" ? new Proxy(styled, {\n get(o, prop) {\n return o(prop);\n }\n}) : styled;\nexport {\n styled_default as styled\n};\n//# sourceMappingURL=index.mjs.map","// src/css.ts\nvar css = () => {\n throw new Error(\n 'Using the \"css\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.'\n );\n};\nvar css_default = css;\n\n// src/cx.ts\nvar cx = function cx2() {\n const presentClassNames = Array.prototype.slice.call(arguments).filter(Boolean);\n const atomicClasses = {};\n const nonAtomicClasses = [];\n presentClassNames.forEach((arg) => {\n const individualClassNames = arg ? arg.split(\" \") : [];\n individualClassNames.forEach((className) => {\n if (className.startsWith(\"atm_\")) {\n const [, keyHash] = className.split(\"_\");\n atomicClasses[keyHash] = className;\n } else {\n nonAtomicClasses.push(className);\n }\n });\n });\n const result = [];\n for (const keyHash in atomicClasses) {\n if (Object.prototype.hasOwnProperty.call(atomicClasses, keyHash)) {\n result.push(atomicClasses[keyHash]);\n }\n }\n result.push(...nonAtomicClasses);\n return result.join(\" \");\n};\nvar cx_default = cx;\nexport {\n css_default as css,\n cx_default as cx\n};\n//# sourceMappingURL=index.mjs.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nc = undefined;","import registerFormBlock from '../gutenberg/FormBlock/registerFormBlock';\nimport { registerHubspotSidebar } from '../gutenberg/Sidebar/contentType';\nimport registerMeetingBlock from '../gutenberg/MeetingsBlock/registerMeetingBlock';\nimport { initBackgroundApp } from '../utils/backgroundAppUtils';\ninitBackgroundApp([\n registerFormBlock,\n registerMeetingBlock,\n registerHubspotSidebar,\n]);\n"],"names":["__","REGISTRATION_FORM","CONTACT_US_FORM","NEWSLETTER_FORM","SUPPORT_FORM","EVENT_FORM","DEFAULT_OPTIONS","label","options","value","isDefaultForm","window","leadinConfig","accountName","adminUrl","activationTime","connectionStatus","deviceId","didDisconnect","env","formsScript","meetingsScript","formsScriptPayload","hublet","hubspotBaseUrl","hubspotNonce","iframeUrl","impactLink","lastAuthorizeTime","lastDeauthorizeTime","lastDisconnectTime","leadinPluginVersion","leadinQueryParams","locale","loginUrl","phpVersion","pluginPath","plugins","portalDomain","portalEmail","portalId","redirectNonce","restNonce","restUrl","refreshToken","reviewSkippedDate","theme","trackConsent","wpVersion","contentEmbed","requiresContentEmbedScope","refreshTokenError","jsx","_jsx","jsxs","_jsxs","CalendarIcon","width","height","viewBox","fill","xmlns","children","clipPath","fillRule","clipRule","d","id","SidebarSprocketIcon","version","xmlnsXlink","SprocketIcon","points","stroke","strokeWidth","xlinkHref","mask","RawHTML","FormSaveBlock","attributes","formId","className","Fragment","UIImage","FormGutenbergPreview","alt","src","WpBlocksApi","FormBlockSave","ErrorHandler","FormEdit","ConnectionStatus","isFullSiteEditor","registerFormBlock","editComponent","props","preview","Connected","origin","status","registerBlockType","title","description","icon","category","type","formName","example","edit","save","MeetingGutenbergPreview","MeetingSaveBlock","url","MeetingEdit","NotConnected","registerMeetingBlock","WpPluginsLib","PluginSidebar","PanelBody","Icon","withSelect","UISidebarSelectControl","styled","BackgroudAppContext","getOrCreateBackgroundApp","registerHubspotSidebar","ContentTypeLabelStyle","div","ContentTypeLabel","LeadinPluginSidebar","postType","name","initialOpen","Provider","metaKey","LeadinPluginSidebarWrapper","select","data","getCurrentPostType","getEditedPostAttribute","registerPlugin","render","_exp","_exp2","propsAsIs","vars","SelectControl","withMetaData","useBackgroundAppContext","usePostBackgroundMessage","ProxyMessages","isBackgroundAppReady","monitorSidebarMetaChange","metaValue","onChange","content","setMetaValue","key","TrackSidebarMetaChange","payload","CoreMessages","HandshakeReceive","SendRefreshToken","ReloadParentFrame","RedirectParentFrame","SendLocale","SendDeviceId","FormMessages","CreateFormAppNavigation","LiveChatMessages","CreateLiveChatAppNavigation","PluginMessages","PluginSettingsNavigation","PluginLeadinConfig","TrackConsent","InternalTrackingFetchRequest","InternalTrackingFetchResponse","InternalTrackingFetchError","InternalTrackingChangeRequest","InternalTrackingChangeError","BusinessUnitFetchRequest","BusinessUnitFetchResponse","BusinessUnitFetchError","BusinessUnitChangeRequest","BusinessUnitChangeError","SkipReviewRequest","SkipReviewResponse","SkipReviewError","RemoveParentQueryParam","ContentEmbedInstallRequest","ContentEmbedInstallResponse","ContentEmbedInstallError","ContentEmbedActivationRequest","ContentEmbedActivationResponse","ContentEmbedActivationError","FetchForms","FetchForm","CreateFormFromTemplate","FetchAuth","FetchMeetingsAndUsers","FetchContactsCreateSinceActivation","FetchOrCreateMeetingUser","ConnectMeetingsCalendar","TrackFormPreviewRender","TrackFormCreatedFromTemplate","TrackFormCreationFailed","TrackMeetingPreviewRender","TrackReviewBannerRender","TrackReviewBannerInteraction","TrackReviewBannerDismissed","TrackPluginDeactivation","createContext","useContext","app","message","postMessage","usePostAsyncBackgroundMessage","postAsyncMessage","Raven","configureRaven","indexOf","config","instrument","tryCatch","release","install","setTagsContext","v","php","wordpress","setExtraContext","hub","Object","keys","map","join","useRef","useState","useEffect","CALYPSO_LIGHT","CALYPSO_MEDIUM","UISpinner","LoadState","Container","focused","_exp3","ControlContainer","ValueContainer","Placeholder","SingleValue","IndicatorContainer","DropdownIndicator","InputContainer","Input","InputShadow","MenuContainer","MenuList","MenuGroup","MenuGroupHeader","_exp5","selected","_exp6","_exp7","MenuItem","AsyncSelect","placeholder","loadOptions","defaultOptions","inputEl","inputShadowEl","isFocused","setFocus","NotLoaded","loadState","setLoadState","localValue","setLocalValue","setOptions","inputSize","current","clientWidth","result","Idle","renderItems","items","parentKey","item","index","undefined","onClick","blur","focus","ref","onFocus","e","target","Loading","UIButton","UIContainer","HubspotWrapper","redirectToPlugin","location","href","resetErrorState","errorInfo","header","action","isUnauthorized","errorHeader","errorMessage","textAlign","padding","LoadingBlock","size","UISpacer","PreviewForm","FormSelect","isSelected","setAttributes","formSelected","monitorFormPreviewRender","handleChange","selectedForm","FormEditContainer","FormSelector","useForms","useCreateFormFromTemplate","search","formApiError","reset","createFormByTemplate","createReset","isCreating","hasError","createApiError","handleLocalChange","option","then","guid","UIOverlay","useFormScript","ready","innerHTML","embedScript","document","createElement","appendChild","proxy","track","setFormApiError","form","err","Failed","debounce","callback","forms","error","trailing","$","promise","loadFormsScript","Promise","resolve","reject","getScript","done","fail","setReady","captureException","MeetingSelector","MeetingWarning","useMeetings","useSelectedMeeting","useSelectedMeetingCalendar","MeetingController","meetings","mappedMeetings","loading","reload","connectCalendar","selectedMeetingOption","selectedMeetingCalendar","length","handleConnectCalendar","captureMessage","extra","onConnectCalendar","PreviewMeeting","newUrl","MeetingsEditContainer","optionsWrapper","UIAlert","CURRENT_USER_CALENDAR_MISSING","isMeetingOwner","titleText","titleMessage","use","useMeetingsScript","container","dataset","classList","add","OTHER_USER_CALENDAR_MISSING","user","useCurrentUserFetch","setError","createUser","loadUserState","useCallback","useMeetingsFetch","getDefaultMeetingName","meeting","currentUser","meetingUsers","meetingsUserIds","meetingOwnerId","userProfile","fullName","hasCalendarObject","meetingsUserBlob","calendarSettings","email","meetingsError","loadMeetingsState","reloadMeetings","userError","reloadUser","meet","link","find","mappedMeetingUsersId","reduce","p","c","includes","some","Loaded","meetingLinks","loadMeetingsScript","AlertContainer","Title","Message","MessageContainer","HEFFALUMP","LORAX","CALYPSO","SpinnerOuter","SpinnerInner","color","Circle","AnimatedCircle","cx","cy","r","OLAF","MARIGOLD_LIGHT","MARIGOLD_MEDIUM","OBSIDIAN","initApp","initFn","context","initAppOnReady","main","initBackgroundApp","Array","isArray","forEach","LeadinBackgroundApp","IntegratedAppEmbedder","IntegratedAppOptions","setLocale","setDeviceId","setRefreshToken","embedder","attachTo","body","postStartAppMessage","withDispatch","applyWithSelect","applyWithDispatch","dispatch","editPost","meta","apply","el"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/leadin.asset.php b/wp/wp-content/plugins/leadin/build/leadin.asset.php new file mode 100644 index 00000000..fd64b327 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/leadin.asset.php @@ -0,0 +1 @@ + array('jquery', 'react', 'react-dom', 'wp-i18n'), 'version' => '3408e7707e6fed1f69d5'); diff --git a/wp/wp-content/plugins/leadin/build/leadin.css b/wp/wp-content/plugins/leadin/build/leadin.css new file mode 100644 index 00000000..dd7babe6 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/leadin.css @@ -0,0 +1,8 @@ +/*!********************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/iframe/IframeErrorPage.tsx ***! + \********************************************************************************************************************************************************************/ +.i1jit3y0{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:120px;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-weight:400;font-size:14px;font-size:0.875rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;line-height:1.5rem;} +.e12lu7tb{text-shadow:0 0 1px transparent;margin-bottom:1.25rem;color:#33475b;font-size:1.25rem;} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2lmcmFtZS9JZnJhbWVFcnJvclBhZ2UudHN4Il0sIm5hbWVzIjpbIi5pMWppdDN5MCIsIi5lMTJsdTd0YiJdLCJtYXBwaW5ncyI6IkFBRzZCQTtBQWVUQyIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9pZnJhbWUvSWZyYW1lRXJyb3JQYWdlLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5jb25zdCBJZnJhbWVFcnJvckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMTIwcHg7XG4gIGZvbnQtZmFtaWx5OiAnTGV4ZW5kIERlY2EnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG5gO1xuY29uc3QgRXJyb3JIZWFkZXIgPSBzdHlsZWQuaDEgYFxuICB0ZXh0LXNoYWRvdzogMCAwIDFweCB0cmFuc3BhcmVudDtcbiAgbWFyZ2luLWJvdHRvbTogMS4yNXJlbTtcbiAgY29sb3I6ICMzMzQ3NWI7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbmA7XG5leHBvcnQgY29uc3QgSWZyYW1lRXJyb3JQYWdlID0gKCkgPT4gKF9qc3hzKElmcmFtZUVycm9yQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChcImltZ1wiLCB7IGFsdDogXCJDYW5ub3QgZmluZCBwYWdlXCIsIHdpZHRoOiBcIjE3NVwiLCBzcmM6IFwiLy9zdGF0aWMuaHNhcHBzdGF0aWMubmV0L3VpLWltYWdlcy9zdGF0aWMtMS4xNC9vcHRpbWl6ZWQvZXJyb3JzL21hcC5zdmdcIiB9KSwgX2pzeChFcnJvckhlYWRlciwgeyBjaGlsZHJlbjogX18oJ1RoZSBIdWJTcG90IGZvciBXb3JkUHJlc3MgcGx1Z2luIGlzIG5vdCBhYmxlIHRvIGxvYWQgcGFnZXMnLCAnbGVhZGluJykgfSksIF9qc3goXCJwXCIsIHsgY2hpbGRyZW46IF9fKCdUcnkgZGlzYWJsaW5nIHlvdXIgYnJvd3NlciBleHRlbnNpb25zIGFuZCBhZCBibG9ja2VycywgdGhlbiByZWZyZXNoIHRoZSBwYWdlJywgJ2xlYWRpbicpIH0pLCBfanN4KFwicFwiLCB7IGNoaWxkcmVuOiBfXygnT3Igb3BlbiB0aGUgSHViU3BvdCBmb3IgV29yZFByZXNzIHBsdWdpbiBpbiBhIGRpZmZlcmVudCBicm93c2VyJywgJ2xlYWRpbicpIH0pXSB9KSk7XG4iXX0=*/ + +/*# sourceMappingURL=leadin.css.map*/ \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/leadin.css.map b/wp/wp-content/plugins/leadin/build/leadin.css.map new file mode 100644 index 00000000..9201435b --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/leadin.css.map @@ -0,0 +1 @@ +{"version":3,"file":"leadin.css","mappings":";;;AAG6BA,UAAAA,mBAAAA,CAAAA,oBAAAA,CAAAA,mBAAAA,CAAAA,YAAAA,CAAAA,6BAAAA,CAAAA,yBAAAA,CAAAA,qBAAAA,CAAAA,0BAAAA,CAAAA,wBAAAA,CAAAA,qBAAAA,CAAAA,kBAAAA,CAAAA,uBAAAA,CAAAA,8BAAAA,CAAAA,oBAAAA,CAAAA,sBAAAA,CAAAA,gBAAAA,CAAAA,oDAAAA,CAAAA,eAAAA,CAAAA,cAAAA,CAAAA,kBAAAA,CAAAA,kCAAAA,CAAAA,iCAAAA,CAAAA,0BAAAA,CAAAA,kBAAAA,CAAAA;AAeTC,UAAAA,+BAAAA,CAAAA,qBAAAA,CAAAA,aAAAA,CAAAA,iBAAAA,CAAAA;AChBpB,2oEAA2oE,C","sources":["webpack://leadin/./scripts/iframe/IframeErrorPage.tsx","webpack://leadin/./scripts/iframe/IframeErrorPage.tsx"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { __ } from '@wordpress/i18n';\nimport { styled } from '@linaria/react';\nconst IframeErrorContainer = styled.div `\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-top: 120px;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-weight: 400;\n font-size: 14px;\n font-size: 0.875rem;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-smoothing: antialiased;\n line-height: 1.5rem;\n`;\nconst ErrorHeader = styled.h1 `\n text-shadow: 0 0 1px transparent;\n margin-bottom: 1.25rem;\n color: #33475b;\n font-size: 1.25rem;\n`;\nexport const IframeErrorPage = () => (_jsxs(IframeErrorContainer, { children: [_jsx(\"img\", { alt: \"Cannot find page\", width: \"175\", src: \"//static.hsappstatic.net/ui-images/static-1.14/optimized/errors/map.svg\" }), _jsx(ErrorHeader, { children: __('The HubSpot for WordPress plugin is not able to load pages', 'leadin') }), _jsx(\"p\", { children: __('Try disabling your browser extensions and ad blockers, then refresh the page', 'leadin') }), _jsx(\"p\", { children: __('Or open the HubSpot for WordPress plugin in a different browser', 'leadin') })] }));\n",".i1jit3y0{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:120px;font-family:'Lexend Deca',Helvetica,Arial,sans-serif;font-weight:400;font-size:14px;font-size:0.875rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;line-height:1.5rem;}\n.e12lu7tb{text-shadow:0 0 1px transparent;margin-bottom:1.25rem;color:#33475b;font-size:1.25rem;}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3Ivc2hhcmUvaHVic3BvdC9idWlsZC93b3Jrc3BhY2UvTGVhZGluV29yZFByZXNzUGx1Z2luL2xlYWRpbi9zY3JpcHRzL2lmcmFtZS9JZnJhbWVFcnJvclBhZ2UudHN4Il0sIm5hbWVzIjpbIi5pMWppdDN5MCIsIi5lMTJsdTd0YiJdLCJtYXBwaW5ncyI6IkFBRzZCQTtBQWVUQyIsImZpbGUiOiIvdXNyL3NoYXJlL2h1YnNwb3QvYnVpbGQvd29ya3NwYWNlL0xlYWRpbldvcmRQcmVzc1BsdWdpbi9sZWFkaW4vc2NyaXB0cy9pZnJhbWUvSWZyYW1lRXJyb3JQYWdlLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBfXyB9IGZyb20gJ0B3b3JkcHJlc3MvaTE4bic7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbGluYXJpYS9yZWFjdCc7XG5jb25zdCBJZnJhbWVFcnJvckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMTIwcHg7XG4gIGZvbnQtZmFtaWx5OiAnTGV4ZW5kIERlY2EnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG5gO1xuY29uc3QgRXJyb3JIZWFkZXIgPSBzdHlsZWQuaDEgYFxuICB0ZXh0LXNoYWRvdzogMCAwIDFweCB0cmFuc3BhcmVudDtcbiAgbWFyZ2luLWJvdHRvbTogMS4yNXJlbTtcbiAgY29sb3I6ICMzMzQ3NWI7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbmA7XG5leHBvcnQgY29uc3QgSWZyYW1lRXJyb3JQYWdlID0gKCkgPT4gKF9qc3hzKElmcmFtZUVycm9yQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChcImltZ1wiLCB7IGFsdDogXCJDYW5ub3QgZmluZCBwYWdlXCIsIHdpZHRoOiBcIjE3NVwiLCBzcmM6IFwiLy9zdGF0aWMuaHNhcHBzdGF0aWMubmV0L3VpLWltYWdlcy9zdGF0aWMtMS4xNC9vcHRpbWl6ZWQvZXJyb3JzL21hcC5zdmdcIiB9KSwgX2pzeChFcnJvckhlYWRlciwgeyBjaGlsZHJlbjogX18oJ1RoZSBIdWJTcG90IGZvciBXb3JkUHJlc3MgcGx1Z2luIGlzIG5vdCBhYmxlIHRvIGxvYWQgcGFnZXMnLCAnbGVhZGluJykgfSksIF9qc3goXCJwXCIsIHsgY2hpbGRyZW46IF9fKCdUcnkgZGlzYWJsaW5nIHlvdXIgYnJvd3NlciBleHRlbnNpb25zIGFuZCBhZCBibG9ja2VycywgdGhlbiByZWZyZXNoIHRoZSBwYWdlJywgJ2xlYWRpbicpIH0pLCBfanN4KFwicFwiLCB7IGNoaWxkcmVuOiBfXygnT3Igb3BlbiB0aGUgSHViU3BvdCBmb3IgV29yZFByZXNzIHBsdWdpbiBpbiBhIGRpZmZlcmVudCBicm93c2VyJywgJ2xlYWRpbicpIH0pXSB9KSk7XG4iXX0=*/"],"names":[".i1jit3y0",".e12lu7tb"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/leadin.js b/wp/wp-content/plugins/leadin/build/leadin.js new file mode 100644 index 00000000..c90e460d --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/leadin.js @@ -0,0 +1,5903 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +function memoize(fn) { + var cache = Object.create(null); + return function (arg) { + if (cache[arg] === undefined) cache[arg] = fn(arg); + return cache[arg]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize); + + +/***/ }), + +/***/ "./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js ***! + \***********************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ "./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js"); + + +var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 + +var isPropValid = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__["default"])(function (prop) { + return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 + /* o */ + && prop.charCodeAt(1) === 110 + /* n */ + && prop.charCodeAt(2) < 91; +} +/* Z+1 */ +); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPropValid); + + +/***/ }), + +/***/ "./scripts/api/wordpressApiClient.ts": +/*!*******************************************!*\ + !*** ./scripts/api/wordpressApiClient.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "disableInternalTracking": () => (/* binding */ disableInternalTracking), +/* harmony export */ "fetchDisableInternalTracking": () => (/* binding */ fetchDisableInternalTracking), +/* harmony export */ "getBusinessUnitId": () => (/* binding */ getBusinessUnitId), +/* harmony export */ "healthcheckRestApi": () => (/* binding */ healthcheckRestApi), +/* harmony export */ "setBusinessUnitId": () => (/* binding */ setBusinessUnitId), +/* harmony export */ "skipReview": () => (/* binding */ skipReview), +/* harmony export */ "trackConsent": () => (/* binding */ trackConsent), +/* harmony export */ "updateHublet": () => (/* binding */ updateHublet) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _utils_queryParams__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/queryParams */ "./scripts/utils/queryParams.ts"); + + + + + +function makeRequest(method, path) { + var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var queryParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + // eslint-disable-next-line compat/compat + var restApiUrl = new URL("".concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.restUrl, "leadin/v1").concat(path)); + (0,_utils_queryParams__WEBPACK_IMPORTED_MODULE_3__.addQueryObjectToUrl)(restApiUrl, queryParams); + return new Promise(function (resolve, reject) { + var payload = { + url: restApiUrl.toString(), + method: method, + contentType: 'application/json', + beforeSend: function beforeSend(xhr) { + return xhr.setRequestHeader('X-WP-Nonce', _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.restNonce); + }, + success: resolve, + error: function error(response) { + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].captureMessage("HTTP Request to ".concat(restApiUrl, " failed with error ").concat(response.status, ": ").concat(response.responseText), { + fingerprint: ['{{ default }}', path, response.status, response.responseText] + }); + reject(response); + } + }; + + if (method !== 'get') { + payload.data = JSON.stringify(data); + } + + jquery__WEBPACK_IMPORTED_MODULE_0___default().ajax(payload); + }); +} + +function healthcheckRestApi() { + return makeRequest('get', '/healthcheck'); +} +function disableInternalTracking(value) { + return makeRequest('put', '/internal-tracking', value ? '1' : '0'); +} +function fetchDisableInternalTracking() { + return makeRequest('get', '/internal-tracking').then(function (message) { + return { + message: message + }; + }); +} +function updateHublet(hublet) { + return makeRequest('put', '/hublet', { + hublet: hublet + }); +} +function skipReview() { + return makeRequest('post', '/skip-review'); +} +function trackConsent(canTrack) { + return makeRequest('post', '/track-consent', { + canTrack: canTrack + }).then(function (message) { + return { + message: message + }; + }); +} +function setBusinessUnitId(businessUnitId) { + return makeRequest('put', '/business-unit', { + businessUnitId: businessUnitId + }); +} +function getBusinessUnitId() { + return makeRequest('get', '/business-unit'); +} + +/***/ }), + +/***/ "./scripts/constants/leadinConfig.ts": +/*!*******************************************!*\ + !*** ./scripts/constants/leadinConfig.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "accountName": () => (/* binding */ accountName), +/* harmony export */ "activationTime": () => (/* binding */ activationTime), +/* harmony export */ "adminUrl": () => (/* binding */ adminUrl), +/* harmony export */ "connectionStatus": () => (/* binding */ connectionStatus), +/* harmony export */ "contentEmbed": () => (/* binding */ contentEmbed), +/* harmony export */ "deviceId": () => (/* binding */ deviceId), +/* harmony export */ "didDisconnect": () => (/* binding */ didDisconnect), +/* harmony export */ "env": () => (/* binding */ env), +/* harmony export */ "formsScript": () => (/* binding */ formsScript), +/* harmony export */ "formsScriptPayload": () => (/* binding */ formsScriptPayload), +/* harmony export */ "hublet": () => (/* binding */ hublet), +/* harmony export */ "hubspotBaseUrl": () => (/* binding */ hubspotBaseUrl), +/* harmony export */ "hubspotNonce": () => (/* binding */ hubspotNonce), +/* harmony export */ "iframeUrl": () => (/* binding */ iframeUrl), +/* harmony export */ "impactLink": () => (/* binding */ impactLink), +/* harmony export */ "lastAuthorizeTime": () => (/* binding */ lastAuthorizeTime), +/* harmony export */ "lastDeauthorizeTime": () => (/* binding */ lastDeauthorizeTime), +/* harmony export */ "lastDisconnectTime": () => (/* binding */ lastDisconnectTime), +/* harmony export */ "leadinPluginVersion": () => (/* binding */ leadinPluginVersion), +/* harmony export */ "leadinQueryParams": () => (/* binding */ leadinQueryParams), +/* harmony export */ "locale": () => (/* binding */ locale), +/* harmony export */ "loginUrl": () => (/* binding */ loginUrl), +/* harmony export */ "meetingsScript": () => (/* binding */ meetingsScript), +/* harmony export */ "phpVersion": () => (/* binding */ phpVersion), +/* harmony export */ "pluginPath": () => (/* binding */ pluginPath), +/* harmony export */ "plugins": () => (/* binding */ plugins), +/* harmony export */ "portalDomain": () => (/* binding */ portalDomain), +/* harmony export */ "portalEmail": () => (/* binding */ portalEmail), +/* harmony export */ "portalId": () => (/* binding */ portalId), +/* harmony export */ "redirectNonce": () => (/* binding */ redirectNonce), +/* harmony export */ "refreshToken": () => (/* binding */ refreshToken), +/* harmony export */ "refreshTokenError": () => (/* binding */ refreshTokenError), +/* harmony export */ "requiresContentEmbedScope": () => (/* binding */ requiresContentEmbedScope), +/* harmony export */ "restNonce": () => (/* binding */ restNonce), +/* harmony export */ "restUrl": () => (/* binding */ restUrl), +/* harmony export */ "reviewSkippedDate": () => (/* binding */ reviewSkippedDate), +/* harmony export */ "theme": () => (/* binding */ theme), +/* harmony export */ "trackConsent": () => (/* binding */ trackConsent), +/* harmony export */ "wpVersion": () => (/* binding */ wpVersion) +/* harmony export */ }); +var _window$leadinConfig = window.leadinConfig, + accountName = _window$leadinConfig.accountName, + adminUrl = _window$leadinConfig.adminUrl, + activationTime = _window$leadinConfig.activationTime, + connectionStatus = _window$leadinConfig.connectionStatus, + deviceId = _window$leadinConfig.deviceId, + didDisconnect = _window$leadinConfig.didDisconnect, + env = _window$leadinConfig.env, + formsScript = _window$leadinConfig.formsScript, + meetingsScript = _window$leadinConfig.meetingsScript, + formsScriptPayload = _window$leadinConfig.formsScriptPayload, + hublet = _window$leadinConfig.hublet, + hubspotBaseUrl = _window$leadinConfig.hubspotBaseUrl, + hubspotNonce = _window$leadinConfig.hubspotNonce, + iframeUrl = _window$leadinConfig.iframeUrl, + impactLink = _window$leadinConfig.impactLink, + lastAuthorizeTime = _window$leadinConfig.lastAuthorizeTime, + lastDeauthorizeTime = _window$leadinConfig.lastDeauthorizeTime, + lastDisconnectTime = _window$leadinConfig.lastDisconnectTime, + leadinPluginVersion = _window$leadinConfig.leadinPluginVersion, + leadinQueryParams = _window$leadinConfig.leadinQueryParams, + locale = _window$leadinConfig.locale, + loginUrl = _window$leadinConfig.loginUrl, + phpVersion = _window$leadinConfig.phpVersion, + pluginPath = _window$leadinConfig.pluginPath, + plugins = _window$leadinConfig.plugins, + portalDomain = _window$leadinConfig.portalDomain, + portalEmail = _window$leadinConfig.portalEmail, + portalId = _window$leadinConfig.portalId, + redirectNonce = _window$leadinConfig.redirectNonce, + restNonce = _window$leadinConfig.restNonce, + restUrl = _window$leadinConfig.restUrl, + refreshToken = _window$leadinConfig.refreshToken, + reviewSkippedDate = _window$leadinConfig.reviewSkippedDate, + theme = _window$leadinConfig.theme, + trackConsent = _window$leadinConfig.trackConsent, + wpVersion = _window$leadinConfig.wpVersion, + contentEmbed = _window$leadinConfig.contentEmbed, + requiresContentEmbedScope = _window$leadinConfig.requiresContentEmbedScope, + refreshTokenError = _window$leadinConfig.refreshTokenError; + + +/***/ }), + +/***/ "./scripts/constants/selectors.ts": +/*!****************************************!*\ + !*** ./scripts/constants/selectors.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "domElements": () => (/* binding */ domElements) +/* harmony export */ }); +var domElements = { + iframe: '#leadin-iframe', + subMenu: '.toplevel_page_leadin > ul', + subMenuLinks: '.toplevel_page_leadin > ul a', + subMenuButtons: '.toplevel_page_leadin > ul > li', + deactivatePluginButton: '[data-slug="leadin"] .deactivate a', + deactivateFeedbackForm: 'form.leadin-deactivate-form', + deactivateFeedbackSubmit: 'button#leadin-feedback-submit', + deactivateFeedbackSkip: 'button#leadin-feedback-skip', + thickboxModalClose: '.leadin-modal-close', + thickboxModalWindow: 'div#TB_window.thickbox-loading', + thickboxModalContent: 'div#TB_ajaxContent.TB_modal', + reviewBannerContainer: '#leadin-review-banner', + reviewBannerLeaveReviewLink: 'a#leave-review-button', + reviewBannerDismissButton: 'a#dismiss-review-banner-button', + leadinIframeContainer: 'leadin-iframe-container', + leadinIframe: 'leadin-iframe', + leadinIframeFallbackContainer: 'leadin-iframe-fallback-container' +}; + +/***/ }), + +/***/ "./scripts/iframe/IframeErrorPage.tsx": +/*!********************************************!*\ + !*** ./scripts/iframe/IframeErrorPage.tsx ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "IframeErrorPage": () => (/* binding */ IframeErrorPage) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _linaria_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @linaria/react */ "./node_modules/@linaria/react/dist/index.mjs"); + + + +var IframeErrorContainer = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('div')({ + name: "IframeErrorContainer", + "class": "i1jit3y0", + propsAsIs: false +}); +var ErrorHeader = /*#__PURE__*/(0,_linaria_react__WEBPACK_IMPORTED_MODULE_2__.styled)('h1')({ + name: "ErrorHeader", + "class": "e12lu7tb", + propsAsIs: false +}); +var IframeErrorPage = function IframeErrorPage() { + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(IframeErrorContainer, { + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("img", { + alt: "Cannot find page", + width: "175", + src: "//static.hsappstatic.net/ui-images/static-1.14/optimized/errors/map.svg" + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ErrorHeader, { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('The HubSpot for WordPress plugin is not able to load pages', 'leadin') + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Try disabling your browser extensions and ad blockers, then refresh the page', 'leadin') + }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { + children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Or open the HubSpot for WordPress plugin in a different browser', 'leadin') + })] + }); +}; + +__webpack_require__(/*! ./IframeErrorPage.linaria.css!=!../../node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./IframeErrorPage.tsx */ "./scripts/iframe/IframeErrorPage.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/iframe/IframeErrorPage.tsx"); + +/***/ }), + +/***/ "./scripts/iframe/constants.ts": +/*!*************************************!*\ + !*** ./scripts/iframe/constants.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "App": () => (/* binding */ App), +/* harmony export */ "AppIframe": () => (/* binding */ AppIframe) +/* harmony export */ }); +var _AppIframe; + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var App; + +(function (App) { + App[App["Forms"] = 0] = "Forms"; + App[App["LiveChat"] = 1] = "LiveChat"; + App[App["Plugin"] = 2] = "Plugin"; + App[App["PluginSettings"] = 3] = "PluginSettings"; + App[App["Background"] = 4] = "Background"; +})(App || (App = {})); + +var AppIframe = (_AppIframe = {}, _defineProperty(_AppIframe, App.Forms, 'integrated-form-app'), _defineProperty(_AppIframe, App.LiveChat, 'integrated-livechat-app'), _defineProperty(_AppIframe, App.Plugin, 'integrated-plugin-app'), _defineProperty(_AppIframe, App.PluginSettings, 'integrated-plugin-app'), _defineProperty(_AppIframe, App.Background, 'integrated-plugin-proxy'), _AppIframe); + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/core/CoreMessages.ts": +/*!****************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/core/CoreMessages.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* binding */ CoreMessages) +/* harmony export */ }); +var CoreMessages = { + HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED', + SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN', + ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME', + RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME', + SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE', + SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/forms/FormsMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FormMessages": () => (/* binding */ FormMessages) +/* harmony export */ }); +var FormMessages = { + CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/index.ts": +/*!****************************************************!*\ + !*** ./scripts/iframe/integratedMessages/index.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* reexport safe */ _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__.CoreMessages), +/* harmony export */ "FormMessages": () => (/* reexport safe */ _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__.FormMessages), +/* harmony export */ "LiveChatMessages": () => (/* reexport safe */ _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__.LiveChatMessages), +/* harmony export */ "PluginMessages": () => (/* reexport safe */ _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__.PluginMessages), +/* harmony export */ "ProxyMessages": () => (/* reexport safe */ _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages) +/* harmony export */ }); +/* harmony import */ var _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/CoreMessages */ "./scripts/iframe/integratedMessages/core/CoreMessages.ts"); +/* harmony import */ var _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./forms/FormsMessages */ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts"); +/* harmony import */ var _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./livechat/LiveChatMessages */ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts"); +/* harmony import */ var _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./plugin/PluginMessages */ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts"); +/* harmony import */ var _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./proxy/ProxyMessages */ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts"); + + + + + + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts": +/*!************************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LiveChatMessages": () => (/* binding */ LiveChatMessages) +/* harmony export */ }); +var LiveChatMessages = { + CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts": +/*!********************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/plugin/PluginMessages.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PluginMessages": () => (/* binding */ PluginMessages) +/* harmony export */ }); +var PluginMessages = { + PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION', + PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG', + TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT', + InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST', + InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE', + InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR', + InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST', + InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR', + BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST', + BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE', + BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR', + BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST', + BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR', + SkipReviewRequest: 'SKIP_REVIEW_REQUEST', + SkipReviewResponse: 'SKIP_REVIEW_RESPONSE', + SkipReviewError: 'SKIP_REVIEW_ERROR', + RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM', + ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST', + ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE', + ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR', + ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST', + ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE', + ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ProxyMessages": () => (/* binding */ ProxyMessages) +/* harmony export */ }); +var ProxyMessages = { + FetchForms: 'FETCH_FORMS', + FetchForm: 'FETCH_FORM', + CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE', + FetchAuth: 'FETCH_AUTH', + FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS', + FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION', + FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER', + ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR', + TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER', + TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE', + TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED', + TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER', + TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE', + TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER', + TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION', + TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED', + TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/messageMiddleware.ts": +/*!*********************************************!*\ + !*** ./scripts/iframe/messageMiddleware.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "messageMiddleware": () => (/* binding */ messageMiddleware) +/* harmony export */ }); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); +/* harmony import */ var _api_wordpressApiClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api/wordpressApiClient */ "./scripts/api/wordpressApiClient.ts"); +/* harmony import */ var _utils_queryParams__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/queryParams */ "./scripts/utils/queryParams.ts"); +/* harmony import */ var _utils_contentEmbedInstaller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/contentEmbedInstaller */ "./scripts/utils/contentEmbedInstaller.ts"); + + + + +var messageMapper = new Map([[_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.TrackConsent, function (message) { + (0,_api_wordpressApiClient__WEBPACK_IMPORTED_MODULE_1__.trackConsent)(message.payload); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.InternalTrackingChangeRequest, function (message, embedder) { + (0,_api_wordpressApiClient__WEBPACK_IMPORTED_MODULE_1__.disableInternalTracking)(message.payload).then(function () { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.InternalTrackingFetchResponse, + payload: message.payload + }); + })["catch"](function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.InternalTrackingChangeError, + payload: payload + }); + }); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.InternalTrackingFetchRequest, function (__message, embedder) { + (0,_api_wordpressApiClient__WEBPACK_IMPORTED_MODULE_1__.fetchDisableInternalTracking)().then(function (_ref) { + var payload = _ref.message; + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.InternalTrackingFetchResponse, + payload: payload + }); + })["catch"](function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.InternalTrackingFetchError, + payload: payload + }); + }); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.BusinessUnitFetchRequest, function (__message, embedder) { + (0,_api_wordpressApiClient__WEBPACK_IMPORTED_MODULE_1__.getBusinessUnitId)().then(function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.BusinessUnitFetchResponse, + payload: payload + }); + })["catch"](function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.BusinessUnitFetchError, + payload: payload + }); + }); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.BusinessUnitChangeRequest, function (message, embedder) { + (0,_api_wordpressApiClient__WEBPACK_IMPORTED_MODULE_1__.setBusinessUnitId)(message.payload).then(function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.BusinessUnitFetchResponse, + payload: payload + }); + })["catch"](function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.BusinessUnitChangeError, + payload: payload + }); + }); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.SkipReviewRequest, function (__message, embedder) { + (0,_api_wordpressApiClient__WEBPACK_IMPORTED_MODULE_1__.skipReview)().then(function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.SkipReviewResponse, + payload: payload + }); + })["catch"](function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.SkipReviewError, + payload: payload + }); + }); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.RemoveParentQueryParam, function (message) { + (0,_utils_queryParams__WEBPACK_IMPORTED_MODULE_2__.removeQueryParamFromLocation)(message.payload); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.ContentEmbedInstallRequest, function (message, embedder) { + (0,_utils_contentEmbedInstaller__WEBPACK_IMPORTED_MODULE_3__.startInstall)(message.payload.nonce).then(function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.ContentEmbedInstallResponse, + payload: payload + }); + })["catch"](function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.ContentEmbedInstallError, + payload: payload + }); + }); +}], [_iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.ContentEmbedActivationRequest, function (message, embedder) { + (0,_utils_contentEmbedInstaller__WEBPACK_IMPORTED_MODULE_3__.startActivation)(message.payload.activateAjaxUrl).then(function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.ContentEmbedActivationResponse, + payload: payload + }); + })["catch"](function (payload) { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_0__.PluginMessages.ContentEmbedActivationError, + payload: payload + }); + }); +}]]); +var messageMiddleware = function messageMiddleware(embedder) { + return function (message) { + var next = messageMapper.get(message.key); + + if (next) { + next(message, embedder); + } + }; +}; + +/***/ }), + +/***/ "./scripts/iframe/renderIframeApp.tsx": +/*!********************************************!*\ + !*** ./scripts/iframe/renderIframeApp.tsx ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ "react-dom"); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _constants_selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants/selectors */ "./scripts/constants/selectors.ts"); +/* harmony import */ var _useAppEmbedder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useAppEmbedder */ "./scripts/iframe/useAppEmbedder.ts"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants */ "./scripts/iframe/constants.ts"); +/* harmony import */ var _IframeErrorPage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./IframeErrorPage */ "./scripts/iframe/IframeErrorPage.tsx"); + + + + + + + + +var IntegratedIframePortal = function IntegratedIframePortal(props) { + var container = document.getElementById(_constants_selectors__WEBPACK_IMPORTED_MODULE_3__.domElements.leadinIframeContainer); + var iframeNotRendered = (0,_useAppEmbedder__WEBPACK_IMPORTED_MODULE_4__["default"])(props.app, props.createRoute, container); + + if (container && !iframeNotRendered) { + return /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_2___default().createPortal(props.children, container); + } + + return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, { + children: (!container || iframeNotRendered) && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_IframeErrorPage__WEBPACK_IMPORTED_MODULE_6__.IframeErrorPage, {}) + }); +}; + +var renderIframeApp = function renderIframeApp() { + var iframeFallbackContainer = document.getElementById(_constants_selectors__WEBPACK_IMPORTED_MODULE_3__.domElements.leadinIframeContainer); + var app; + var queryParams = new URLSearchParams(location.search); + var page = queryParams.get('page'); + var createRoute = queryParams.get('leadin_route[0]') === 'create'; + + switch (page) { + case 'leadin_forms': + app = _constants__WEBPACK_IMPORTED_MODULE_5__.App.Forms; + break; + + case 'leadin_chatflows': + app = _constants__WEBPACK_IMPORTED_MODULE_5__.App.LiveChat; + break; + + case 'leadin_settings': + app = _constants__WEBPACK_IMPORTED_MODULE_5__.App.PluginSettings; + break; + + case 'leadin_user_guide': + default: + app = _constants__WEBPACK_IMPORTED_MODULE_5__.App.Plugin; + break; + } + + react_dom__WEBPACK_IMPORTED_MODULE_2___default().render((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(IntegratedIframePortal, { + app: app, + createRoute: createRoute + }), iframeFallbackContainer); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (renderIframeApp); + +/***/ }), + +/***/ "./scripts/iframe/useAppEmbedder.ts": +/*!******************************************!*\ + !*** ./scripts/iframe/useAppEmbedder.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ useAppEmbedder) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./scripts/iframe/constants.ts"); +/* harmony import */ var _messageMiddleware__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messageMiddleware */ "./scripts/iframe/messageMiddleware.ts"); +/* harmony import */ var _utils_iframe__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/iframe */ "./scripts/utils/iframe.ts"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + +var getLeadinConfig = function getLeadinConfig() { + var utm_query_params = Object.keys(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams).filter(function (x) { + return /^utm/.test(x); + }).reduce(function (p, c) { + return _objectSpread(_defineProperty({}, c, _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams[c]), p); + }, {}); + return _objectSpread({ + accountName: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.accountName, + admin: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.admin, + adminUrl: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.adminUrl, + company: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.company, + connectionStatus: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.connectionStatus, + deviceId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.deviceId, + email: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.email, + firstName: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.firstName, + irclickid: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.irclickid, + justConnected: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.justConnected, + lastName: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.lastName, + lastAuthorizeTime: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.lastAuthorizeTime, + lastDeauthorizeTime: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.lastDeauthorizeTime, + lastDisconnectTime: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.lastDisconnectTime, + leadinPluginVersion: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinPluginVersion, + mpid: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.mpid, + nonce: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.nonce, + phpVersion: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.phpVersion, + plugins: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.plugins, + portalDomain: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalDomain, + portalEmail: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalEmail, + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + reviewSkippedDate: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.reviewSkippedDate, + theme: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.theme, + trackConsent: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.trackConsent, + websiteName: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.leadinQueryParams.websiteName, + wpVersion: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.wpVersion, + contentEmbed: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.contentEmbed, + requiresContentEmbedScope: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.requiresContentEmbedScope, + refreshTokenError: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshTokenError + }, utm_query_params); +}; + +var getAppOptions = function getAppOptions(app) { + var createRoute = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var _window = window, + IntegratedAppOptions = _window.IntegratedAppOptions, + FormsAppOptions = _window.FormsAppOptions, + LiveChatAppOptions = _window.LiveChatAppOptions, + PluginAppOptions = _window.PluginAppOptions; + var options; + + switch (app) { + case _constants__WEBPACK_IMPORTED_MODULE_3__.App.Plugin: + options = new PluginAppOptions().setLeadinConfig(getLeadinConfig()); + break; + + case _constants__WEBPACK_IMPORTED_MODULE_3__.App.PluginSettings: + options = new PluginAppOptions().setLeadinConfig(getLeadinConfig()).setPluginSettingsInit(); + break; + + case _constants__WEBPACK_IMPORTED_MODULE_3__.App.Forms: + options = new FormsAppOptions(); + + if (createRoute) { + options = options.setCreateFormAppInit(); + } + + break; + + case _constants__WEBPACK_IMPORTED_MODULE_3__.App.LiveChat: + options = new LiveChatAppOptions(); + + if (createRoute) { + options = options.setCreateLiveChatAppInit(); + } + + break; + + default: + options = new IntegratedAppOptions(); + } + + return options; +}; + +function useAppEmbedder(app, createRoute, container) { + console.info('HubSpot plugin - starting app embedder for:', _constants__WEBPACK_IMPORTED_MODULE_3__.AppIframe[app], container); + var iframeNotRendered = (0,_utils_iframe__WEBPACK_IMPORTED_MODULE_5__.useIframeNotRendered)(_constants__WEBPACK_IMPORTED_MODULE_3__.AppIframe[app]); + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + var _window2 = window, + IntegratedAppEmbedder = _window2.IntegratedAppEmbedder; + + if (IntegratedAppEmbedder) { + var options = getAppOptions(app, createRoute).setLocale(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.locale).setDeviceId(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.deviceId).setRefreshToken(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken); + var embedder = new IntegratedAppEmbedder(_constants__WEBPACK_IMPORTED_MODULE_3__.AppIframe[app], _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.hubspotBaseUrl, _utils_iframe__WEBPACK_IMPORTED_MODULE_5__.resizeWindow, _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken ? '' : _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.impactLink).setOptions(options); + embedder.subscribe((0,_messageMiddleware__WEBPACK_IMPORTED_MODULE_4__.messageMiddleware)(embedder)); + embedder.attachTo(container, true); + embedder.postStartAppMessage(); // lets the app know all all data has been passed to it + + window.embedder = embedder; + } + }, []); + + if (iframeNotRendered) { + console.error('HubSpot plugin Iframe not rendered', { + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + container: container, + appName: _constants__WEBPACK_IMPORTED_MODULE_3__.AppIframe[app], + hasIntegratedAppEmbedder: !!window.IntegratedAppEmbedder + }); + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].captureException(new Error('Leadin Iframe not rendered'), { + fingerprint: ['USE_APP_EMBEDDER', 'IFRAME_SETUP_ERROR'], + extra: { + portalId: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.portalId, + container: container, + app: app, + hubspotBaseUrl: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.hubspotBaseUrl, + impactLink: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.impactLink, + appName: _constants__WEBPACK_IMPORTED_MODULE_3__.AppIframe[app], + hasRefreshToken: !!_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_2__.refreshToken + } + }); + } + + return iframeNotRendered; +} + +/***/ }), + +/***/ "./scripts/lib/Raven.ts": +/*!******************************!*\ + !*** ./scripts/lib/Raven.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "configureRaven": () => (/* binding */ configureRaven), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); + + +function configureRaven() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.hubspotBaseUrl.indexOf('app.hubspot.com') === -1) { + return; + } + + raven_js__WEBPACK_IMPORTED_MODULE_0___default().config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', { + instrument: { + tryCatch: false + }, + release: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion + }).install(); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setTagsContext({ + v: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion, + php: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.phpVersion, + wordpress: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.wpVersion + }); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setExtraContext({ + hub: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.portalId, + plugins: Object.keys(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins).map(function (name) { + return "".concat(name, "#").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins[name]); + }).join(',') + }); +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((raven_js__WEBPACK_IMPORTED_MODULE_0___default())); + +/***/ }), + +/***/ "./scripts/utils/appUtils.ts": +/*!***********************************!*\ + !*** ./scripts/utils/appUtils.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "initApp": () => (/* binding */ initApp), +/* harmony export */ "initAppOnReady": () => (/* binding */ initAppOnReady) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); + + +function initApp(initFn) { + (0,_lib_Raven__WEBPACK_IMPORTED_MODULE_1__.configureRaven)(); + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].context(initFn); +} +function initAppOnReady(initFn) { + function main() { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(initFn); + } + + initApp(main); +} + +/***/ }), + +/***/ "./scripts/utils/contentEmbedInstaller.ts": +/*!************************************************!*\ + !*** ./scripts/utils/contentEmbedInstaller.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "startActivation": () => (/* binding */ startActivation), +/* harmony export */ "startInstall": () => (/* binding */ startInstall) +/* harmony export */ }); +function startInstall(nonce) { + var formData = new FormData(); + var ajaxUrl = window.ajaxurl; + formData.append('_wpnonce', nonce); + formData.append('action', 'content_embed_install'); + return fetch(ajaxUrl, { + method: 'POST', + body: formData, + keepalive: true + }).then(function (res) { + return res.json(); + }); +} +function startActivation(requestUrl) { + return fetch(requestUrl, { + method: 'POST', + keepalive: true + }).then(function (res) { + return res.json(); + }); +} + +/***/ }), + +/***/ "./scripts/utils/iframe.ts": +/*!*********************************!*\ + !*** ./scripts/utils/iframe.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "resizeWindow": () => (/* binding */ resizeWindow), +/* harmony export */ "useIframeNotRendered": () => (/* binding */ useIframeNotRendered) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + +var IFRAME_DISPLAY_TIMEOUT = 5000; +function useIframeNotRendered(app) { + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + iframeNotRendered = _useState2[0], + setIframeNotRendered = _useState2[1]; + + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + var timer = setTimeout(function () { + var iframe = document.getElementById(app); + + if (!iframe) { + setIframeNotRendered(true); + } + }, IFRAME_DISPLAY_TIMEOUT); + return function () { + if (timer) { + clearTimeout(timer); + } + }; + }, []); + return iframeNotRendered; +} +var resizeWindow = function resizeWindow() { + var adminMenuWrap = document.getElementById('adminmenuwrap'); + var sideMenuHeight = adminMenuWrap ? adminMenuWrap.offsetHeight : 0; + var adminBar = document.getElementById('wpadminbar'); + var adminBarHeight = adminBar && adminBar.offsetHeight || 0; + var offset = 4; + + if (window.innerHeight < sideMenuHeight) { + return sideMenuHeight - offset; + } else { + return window.innerHeight - adminBarHeight - offset; + } +}; + +/***/ }), + +/***/ "./scripts/utils/queryParams.ts": +/*!**************************************!*\ + !*** ./scripts/utils/queryParams.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "addQueryObjectToUrl": () => (/* binding */ addQueryObjectToUrl), +/* harmony export */ "removeQueryParamFromLocation": () => (/* binding */ removeQueryParamFromLocation) +/* harmony export */ }); +function addQueryObjectToUrl(urlObject, queryParams) { + Object.keys(queryParams).forEach(function (key) { + urlObject.searchParams.append(key, queryParams[key]); + }); +} +function removeQueryParamFromLocation(key) { + var location = new URL(window.location.href); + location.searchParams["delete"](key); + window.history.replaceState(null, '', location.href); +} + +/***/ }), + +/***/ "./scripts/iframe/IframeErrorPage.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/iframe/IframeErrorPage.tsx": +/*!*************************************************************************************************************************************************************************!*\ + !*** ./scripts/iframe/IframeErrorPage.linaria.css!=!./node_modules/@linaria/webpack5-loader/lib/outputCssLoader.js?cacheProvider=!./scripts/iframe/IframeErrorPage.tsx ***! + \*************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./node_modules/object-assign/index.js": +/*!*********************************************!*\ + !*** ./node_modules/object-assign/index.js ***! + \*********************************************/ +/***/ ((module) => { + +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/configError.js": +/*!**************************************************!*\ + !*** ./node_modules/raven-js/src/configError.js ***! + \**************************************************/ +/***/ ((module) => { + +function RavenConfigError(message) { + this.name = 'RavenConfigError'; + this.message = message; +} +RavenConfigError.prototype = new Error(); +RavenConfigError.prototype.constructor = RavenConfigError; + +module.exports = RavenConfigError; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/console.js": +/*!**********************************************!*\ + !*** ./node_modules/raven-js/src/console.js ***! + \**********************************************/ +/***/ ((module) => { + +var wrapMethod = function(console, level, callback) { + var originalConsoleLevel = console[level]; + var originalConsole = console; + + if (!(level in console)) { + return; + } + + var sentryLevel = level === 'warn' ? 'warning' : level; + + console[level] = function() { + var args = [].slice.call(arguments); + + var msg = '' + args.join(' '); + var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}}; + + if (level === 'assert') { + if (args[0] === false) { + // Default browsers message + msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert'); + data.extra.arguments = args.slice(1); + callback && callback(msg, data); + } + } else { + callback && callback(msg, data); + } + + // this fails for some browsers. :( + if (originalConsoleLevel) { + // IE9 doesn't allow calling apply on console functions directly + // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193 + Function.prototype.apply.call(originalConsoleLevel, originalConsole, args); + } + }; +}; + +module.exports = { + wrapMethod: wrapMethod +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/raven.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/raven.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/*global XDomainRequest:false */ + +var TraceKit = __webpack_require__(/*! ../vendor/TraceKit/tracekit */ "./node_modules/raven-js/vendor/TraceKit/tracekit.js"); +var stringify = __webpack_require__(/*! ../vendor/json-stringify-safe/stringify */ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js"); +var RavenConfigError = __webpack_require__(/*! ./configError */ "./node_modules/raven-js/src/configError.js"); + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/raven-js/src/utils.js"); +var isError = utils.isError; +var isObject = utils.isObject; +var isObject = utils.isObject; +var isErrorEvent = utils.isErrorEvent; +var isUndefined = utils.isUndefined; +var isFunction = utils.isFunction; +var isString = utils.isString; +var isEmptyObject = utils.isEmptyObject; +var each = utils.each; +var objectMerge = utils.objectMerge; +var truncate = utils.truncate; +var objectFrozen = utils.objectFrozen; +var hasKey = utils.hasKey; +var joinRegExp = utils.joinRegExp; +var urlencode = utils.urlencode; +var uuid4 = utils.uuid4; +var htmlTreeAsString = utils.htmlTreeAsString; +var isSameException = utils.isSameException; +var isSameStacktrace = utils.isSameStacktrace; +var parseUrl = utils.parseUrl; +var fill = utils.fill; + +var wrapConsoleMethod = (__webpack_require__(/*! ./console */ "./node_modules/raven-js/src/console.js").wrapMethod); + +var dsnKeys = 'source protocol user pass host port path'.split(' '), + dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/; + +function now() { + return +new Date(); +} + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _document = _window.document; +var _navigator = _window.navigator; + +function keepOriginalCallback(original, callback) { + return isFunction(callback) + ? function(data) { + return callback(data, original); + } + : callback; +} + +// First, check for JSON support +// If there is no JSON, we no-op the core features of Raven +// since JSON is required to encode the payload +function Raven() { + this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify); + // Raven can run in contexts where there's no document (react-native) + this._hasDocument = !isUndefined(_document); + this._hasNavigator = !isUndefined(_navigator); + this._lastCapturedException = null; + this._lastData = null; + this._lastEventId = null; + this._globalServer = null; + this._globalKey = null; + this._globalProject = null; + this._globalContext = {}; + this._globalOptions = { + logger: 'javascript', + ignoreErrors: [], + ignoreUrls: [], + whitelistUrls: [], + includePaths: [], + collectWindowErrors: true, + maxMessageLength: 0, + + // By default, truncates URL values to 250 chars + maxUrlLength: 250, + stackTraceLimit: 50, + autoBreadcrumbs: true, + instrument: true, + sampleRate: 1 + }; + this._ignoreOnError = 0; + this._isRavenInstalled = false; + this._originalErrorStackTraceLimit = Error.stackTraceLimit; + // capture references to window.console *and* all its methods first + // before the console plugin has a chance to monkey patch + this._originalConsole = _window.console || {}; + this._originalConsoleMethods = {}; + this._plugins = []; + this._startTime = now(); + this._wrappedBuiltIns = []; + this._breadcrumbs = []; + this._lastCapturedEvent = null; + this._keypressTimeout; + this._location = _window.location; + this._lastHref = this._location && this._location.href; + this._resetBackoff(); + + // eslint-disable-next-line guard-for-in + for (var method in this._originalConsole) { + this._originalConsoleMethods[method] = this._originalConsole[method]; + } +} + +/* + * The core Raven singleton + * + * @this {Raven} + */ + +Raven.prototype = { + // Hardcode version string so that raven source can be loaded directly via + // webpack (using a build step causes webpack #1617). Grunt verifies that + // this value matches package.json during build. + // See: https://github.com/getsentry/raven-js/issues/465 + VERSION: '3.19.1', + + debug: false, + + TraceKit: TraceKit, // alias to TraceKit + + /* + * Configure Raven with a DSN and extra options + * + * @param {string} dsn The public Sentry DSN + * @param {object} options Set of global options [optional] + * @return {Raven} + */ + config: function(dsn, options) { + var self = this; + + if (self._globalServer) { + this._logDebug('error', 'Error: Raven has already been configured'); + return self; + } + if (!dsn) return self; + + var globalOptions = self._globalOptions; + + // merge in options + if (options) { + each(options, function(key, value) { + // tags and extra are special and need to be put into context + if (key === 'tags' || key === 'extra' || key === 'user') { + self._globalContext[key] = value; + } else { + globalOptions[key] = value; + } + }); + } + + self.setDSN(dsn); + + // "Script error." is hard coded into browsers for errors that it can't read. + // this is the result of a script being pulled in from an external domain and CORS. + globalOptions.ignoreErrors.push(/^Script error\.?$/); + globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/); + + // join regexp rules into one big rule + globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors); + globalOptions.ignoreUrls = globalOptions.ignoreUrls.length + ? joinRegExp(globalOptions.ignoreUrls) + : false; + globalOptions.whitelistUrls = globalOptions.whitelistUrls.length + ? joinRegExp(globalOptions.whitelistUrls) + : false; + globalOptions.includePaths = joinRegExp(globalOptions.includePaths); + globalOptions.maxBreadcrumbs = Math.max( + 0, + Math.min(globalOptions.maxBreadcrumbs || 100, 100) + ); // default and hard limit is 100 + + var autoBreadcrumbDefaults = { + xhr: true, + console: true, + dom: true, + location: true + }; + + var autoBreadcrumbs = globalOptions.autoBreadcrumbs; + if ({}.toString.call(autoBreadcrumbs) === '[object Object]') { + autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs); + } else if (autoBreadcrumbs !== false) { + autoBreadcrumbs = autoBreadcrumbDefaults; + } + globalOptions.autoBreadcrumbs = autoBreadcrumbs; + + var instrumentDefaults = { + tryCatch: true + }; + + var instrument = globalOptions.instrument; + if ({}.toString.call(instrument) === '[object Object]') { + instrument = objectMerge(instrumentDefaults, instrument); + } else if (instrument !== false) { + instrument = instrumentDefaults; + } + globalOptions.instrument = instrument; + + TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors; + + // return for chaining + return self; + }, + + /* + * Installs a global window.onerror error handler + * to capture and report uncaught exceptions. + * At this point, install() is required to be called due + * to the way TraceKit is set up. + * + * @return {Raven} + */ + install: function() { + var self = this; + if (self.isSetup() && !self._isRavenInstalled) { + TraceKit.report.subscribe(function() { + self._handleOnErrorStackInfo.apply(self, arguments); + }); + if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) { + self._instrumentTryCatch(); + } + + if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs(); + + // Install all of the plugins + self._drainPlugins(); + + self._isRavenInstalled = true; + } + + Error.stackTraceLimit = self._globalOptions.stackTraceLimit; + return this; + }, + + /* + * Set the DSN (can be called multiple time unlike config) + * + * @param {string} dsn The public Sentry DSN + */ + setDSN: function(dsn) { + var self = this, + uri = self._parseDSN(dsn), + lastSlash = uri.path.lastIndexOf('/'), + path = uri.path.substr(1, lastSlash); + + self._dsn = dsn; + self._globalKey = uri.user; + self._globalSecret = uri.pass && uri.pass.substr(1); + self._globalProject = uri.path.substr(lastSlash + 1); + + self._globalServer = self._getGlobalServer(uri); + + self._globalEndpoint = + self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/'; + + // Reset backoff state since we may be pointing at a + // new project/server + this._resetBackoff(); + }, + + /* + * Wrap code within a context so Raven can capture errors + * reliably across domains that is executed immediately. + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The callback to be immediately executed within the context + * @param {array} args An array of arguments to be called with the callback [optional] + */ + context: function(options, func, args) { + if (isFunction(options)) { + args = func || []; + func = options; + options = undefined; + } + + return this.wrap(options, func).apply(this, args); + }, + + /* + * Wrap code within a context and returns back a new function to be executed + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The function to be wrapped in a new context + * @param {function} func A function to call before the try/catch wrapper [optional, private] + * @return {function} The newly wrapped functions with a context + */ + wrap: function(options, func, _before) { + var self = this; + // 1 argument has been passed, and it's not a function + // so just return it + if (isUndefined(func) && !isFunction(options)) { + return options; + } + + // options is optional + if (isFunction(options)) { + func = options; + options = undefined; + } + + // At this point, we've passed along 2 arguments, and the second one + // is not a function either, so we'll just return the second argument. + if (!isFunction(func)) { + return func; + } + + // We don't wanna wrap it twice! + try { + if (func.__raven__) { + return func; + } + + // If this has already been wrapped in the past, return that + if (func.__raven_wrapper__) { + return func.__raven_wrapper__; + } + } catch (e) { + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + // Bail on wrapping and return the function as-is (defers to window.onerror). + return func; + } + + function wrapped() { + var args = [], + i = arguments.length, + deep = !options || (options && options.deep !== false); + + if (_before && isFunction(_before)) { + _before.apply(this, arguments); + } + + // Recursively wrap all of a function's arguments that are + // functions themselves. + while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i]; + + try { + // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means Raven caught an error invoking your application code. This is + // expected behavior and NOT indicative of a bug with Raven.js. + return func.apply(this, args); + } catch (e) { + self._ignoreNextOnError(); + self.captureException(e, options); + throw e; + } + } + + // copy over properties of the old function + for (var property in func) { + if (hasKey(func, property)) { + wrapped[property] = func[property]; + } + } + wrapped.prototype = func.prototype; + + func.__raven_wrapper__ = wrapped; + // Signal that this function has been wrapped already + // for both debugging and to prevent it to being wrapped twice + wrapped.__raven__ = true; + wrapped.__inner__ = func; + + return wrapped; + }, + + /* + * Uninstalls the global error handler. + * + * @return {Raven} + */ + uninstall: function() { + TraceKit.report.uninstall(); + + this._restoreBuiltIns(); + + Error.stackTraceLimit = this._originalErrorStackTraceLimit; + this._isRavenInstalled = false; + + return this; + }, + + /* + * Manually capture an exception and send it over to Sentry + * + * @param {error} ex An exception to be logged + * @param {object} options A specific set of options for this error [optional] + * @return {Raven} + */ + captureException: function(ex, options) { + // Cases for sending ex as a message, rather than an exception + var isNotError = !isError(ex); + var isNotErrorEvent = !isErrorEvent(ex); + var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error; + + if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) { + return this.captureMessage( + ex, + objectMerge( + { + trimHeadFrames: 1, + stacktrace: true // if we fall back to captureMessage, default to attempting a new trace + }, + options + ) + ); + } + + // Get actual Error from ErrorEvent + if (isErrorEvent(ex)) ex = ex.error; + + // Store the raw exception object for potential debugging and introspection + this._lastCapturedException = ex; + + // TraceKit.report will re-raise any exception passed to it, + // which means you have to wrap it in try/catch. Instead, we + // can wrap it here and only re-raise if TraceKit.report + // raises an exception different from the one we asked to + // report on. + try { + var stack = TraceKit.computeStackTrace(ex); + this._handleStackInfo(stack, options); + } catch (ex1) { + if (ex !== ex1) { + throw ex1; + } + } + + return this; + }, + + /* + * Manually send a message to Sentry + * + * @param {string} msg A plain message to be captured in Sentry + * @param {object} options A specific set of options for this message [optional] + * @return {Raven} + */ + captureMessage: function(msg, options) { + // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an + // early call; we'll error on the side of logging anything called before configuration since it's + // probably something you should see: + if ( + !!this._globalOptions.ignoreErrors.test && + this._globalOptions.ignoreErrors.test(msg) + ) { + return; + } + + options = options || {}; + + var data = objectMerge( + { + message: msg + '' // Make sure it's actually a string + }, + options + ); + + var ex; + // Generate a "synthetic" stack trace from this point. + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative + // of a bug with Raven.js. Sentry generates synthetic traces either by configuration, + // or if it catches a thrown object without a "stack" property. + try { + throw new Error(msg); + } catch (ex1) { + ex = ex1; + } + + // null exception name so `Error` isn't prefixed to msg + ex.name = null; + var stack = TraceKit.computeStackTrace(ex); + + // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1] + var initialCall = stack.stack[1]; + + var fileurl = (initialCall && initialCall.url) || ''; + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + if (this._globalOptions.stacktrace || (options && options.stacktrace)) { + options = objectMerge( + { + // fingerprint on msg, not stack trace (legacy behavior, could be + // revisited) + fingerprint: msg, + // since we know this is a synthetic trace, the top N-most frames + // MUST be from Raven.js, so mark them as in_app later by setting + // trimHeadFrames + trimHeadFrames: (options.trimHeadFrames || 0) + 1 + }, + options + ); + + var frames = this._prepareFrames(stack, options); + data.stacktrace = { + // Sentry expects frames oldest to newest + frames: frames.reverse() + }; + } + + // Fire away! + this._send(data); + + return this; + }, + + captureBreadcrumb: function(obj) { + var crumb = objectMerge( + { + timestamp: now() / 1000 + }, + obj + ); + + if (isFunction(this._globalOptions.breadcrumbCallback)) { + var result = this._globalOptions.breadcrumbCallback(crumb); + + if (isObject(result) && !isEmptyObject(result)) { + crumb = result; + } else if (result === false) { + return this; + } + } + + this._breadcrumbs.push(crumb); + if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) { + this._breadcrumbs.shift(); + } + return this; + }, + + addPlugin: function(plugin /*arg1, arg2, ... argN*/) { + var pluginArgs = [].slice.call(arguments, 1); + + this._plugins.push([plugin, pluginArgs]); + if (this._isRavenInstalled) { + this._drainPlugins(); + } + + return this; + }, + + /* + * Set/clear a user to be sent along with the payload. + * + * @param {object} user An object representing user data [optional] + * @return {Raven} + */ + setUserContext: function(user) { + // Intentionally do not merge here since that's an unexpected behavior. + this._globalContext.user = user; + + return this; + }, + + /* + * Merge extra attributes to be sent along with the payload. + * + * @param {object} extra An object representing extra data [optional] + * @return {Raven} + */ + setExtraContext: function(extra) { + this._mergeContext('extra', extra); + + return this; + }, + + /* + * Merge tags to be sent along with the payload. + * + * @param {object} tags An object representing tags [optional] + * @return {Raven} + */ + setTagsContext: function(tags) { + this._mergeContext('tags', tags); + + return this; + }, + + /* + * Clear all of the context. + * + * @return {Raven} + */ + clearContext: function() { + this._globalContext = {}; + + return this; + }, + + /* + * Get a copy of the current context. This cannot be mutated. + * + * @return {object} copy of context + */ + getContext: function() { + // lol javascript + return JSON.parse(stringify(this._globalContext)); + }, + + /* + * Set environment of application + * + * @param {string} environment Typically something like 'production'. + * @return {Raven} + */ + setEnvironment: function(environment) { + this._globalOptions.environment = environment; + + return this; + }, + + /* + * Set release version of application + * + * @param {string} release Typically something like a git SHA to identify version + * @return {Raven} + */ + setRelease: function(release) { + this._globalOptions.release = release; + + return this; + }, + + /* + * Set the dataCallback option + * + * @param {function} callback The callback to run which allows the + * data blob to be mutated before sending + * @return {Raven} + */ + setDataCallback: function(callback) { + var original = this._globalOptions.dataCallback; + this._globalOptions.dataCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the breadcrumbCallback option + * + * @param {function} callback The callback to run which allows filtering + * or mutating breadcrumbs + * @return {Raven} + */ + setBreadcrumbCallback: function(callback) { + var original = this._globalOptions.breadcrumbCallback; + this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the shouldSendCallback option + * + * @param {function} callback The callback to run which allows + * introspecting the blob before sending + * @return {Raven} + */ + setShouldSendCallback: function(callback) { + var original = this._globalOptions.shouldSendCallback; + this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback); + return this; + }, + + /** + * Override the default HTTP transport mechanism that transmits data + * to the Sentry server. + * + * @param {function} transport Function invoked instead of the default + * `makeRequest` handler. + * + * @return {Raven} + */ + setTransport: function(transport) { + this._globalOptions.transport = transport; + + return this; + }, + + /* + * Get the latest raw exception that was captured by Raven. + * + * @return {error} + */ + lastException: function() { + return this._lastCapturedException; + }, + + /* + * Get the last event id + * + * @return {string} + */ + lastEventId: function() { + return this._lastEventId; + }, + + /* + * Determine if Raven is setup and ready to go. + * + * @return {boolean} + */ + isSetup: function() { + if (!this._hasJSON) return false; // needs JSON support + if (!this._globalServer) { + if (!this.ravenNotConfiguredError) { + this.ravenNotConfiguredError = true; + this._logDebug('error', 'Error: Raven has not been configured.'); + } + return false; + } + return true; + }, + + afterLoad: function() { + // TODO: remove window dependence? + + // Attempt to initialize Raven on load + var RavenConfig = _window.RavenConfig; + if (RavenConfig) { + this.config(RavenConfig.dsn, RavenConfig.config).install(); + } + }, + + showReportDialog: function(options) { + if ( + !_document // doesn't work without a document (React native) + ) + return; + + options = options || {}; + + var lastEventId = options.eventId || this.lastEventId(); + if (!lastEventId) { + throw new RavenConfigError('Missing eventId'); + } + + var dsn = options.dsn || this._dsn; + if (!dsn) { + throw new RavenConfigError('Missing DSN'); + } + + var encode = encodeURIComponent; + var qs = ''; + qs += '?eventId=' + encode(lastEventId); + qs += '&dsn=' + encode(dsn); + + var user = options.user || this._globalContext.user; + if (user) { + if (user.name) qs += '&name=' + encode(user.name); + if (user.email) qs += '&email=' + encode(user.email); + } + + var globalServer = this._getGlobalServer(this._parseDSN(dsn)); + + var script = _document.createElement('script'); + script.async = true; + script.src = globalServer + '/api/embed/error-page/' + qs; + (_document.head || _document.body).appendChild(script); + }, + + /**** Private functions ****/ + _ignoreNextOnError: function() { + var self = this; + this._ignoreOnError += 1; + setTimeout(function() { + // onerror should trigger before setTimeout + self._ignoreOnError -= 1; + }); + }, + + _triggerEvent: function(eventType, options) { + // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it + var evt, key; + + if (!this._hasDocument) return; + + options = options || {}; + + eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1); + + if (_document.createEvent) { + evt = _document.createEvent('HTMLEvents'); + evt.initEvent(eventType, true, true); + } else { + evt = _document.createEventObject(); + evt.eventType = eventType; + } + + for (key in options) + if (hasKey(options, key)) { + evt[key] = options[key]; + } + + if (_document.createEvent) { + // IE9 if standards + _document.dispatchEvent(evt); + } else { + // IE8 regardless of Quirks or Standards + // IE9 if quirks + try { + _document.fireEvent('on' + evt.eventType.toLowerCase(), evt); + } catch (e) { + // Do nothing + } + } + }, + + /** + * Wraps addEventListener to capture UI breadcrumbs + * @param evtName the event name (e.g. "click") + * @returns {Function} + * @private + */ + _breadcrumbEventHandler: function(evtName) { + var self = this; + return function(evt) { + // reset keypress timeout; e.g. triggering a 'click' after + // a 'keypress' will reset the keypress debounce so that a new + // set of keypresses can be recorded + self._keypressTimeout = null; + + // It's possible this handler might trigger multiple times for the same + // event (e.g. event propagation through node ancestors). Ignore if we've + // already captured the event. + if (self._lastCapturedEvent === evt) return; + + self._lastCapturedEvent = evt; + + // try/catch both: + // - accessing evt.target (see getsentry/raven-js#838, #768) + // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly + // can throw an exception in some circumstances. + var target; + try { + target = htmlTreeAsString(evt.target); + } catch (e) { + target = ''; + } + + self.captureBreadcrumb({ + category: 'ui.' + evtName, // e.g. ui.click, ui.input + message: target + }); + }; + }, + + /** + * Wraps addEventListener to capture keypress UI events + * @returns {Function} + * @private + */ + _keypressEventHandler: function() { + var self = this, + debounceDuration = 1000; // milliseconds + + // TODO: if somehow user switches keypress target before + // debounce timeout is triggered, we will only capture + // a single breadcrumb from the FIRST target (acceptable?) + return function(evt) { + var target; + try { + target = evt.target; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + var tagName = target && target.tagName; + + // only consider keypress events on actual input elements + // this will disregard keypresses targeting body (e.g. tabbing + // through elements, hotkeys, etc) + if ( + !tagName || + (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) + ) + return; + + // record first keypress in a series, but ignore subsequent + // keypresses until debounce clears + var timeout = self._keypressTimeout; + if (!timeout) { + self._breadcrumbEventHandler('input')(evt); + } + clearTimeout(timeout); + self._keypressTimeout = setTimeout(function() { + self._keypressTimeout = null; + }, debounceDuration); + }; + }, + + /** + * Captures a breadcrumb of type "navigation", normalizing input URLs + * @param to the originating URL + * @param from the target URL + * @private + */ + _captureUrlChange: function(from, to) { + var parsedLoc = parseUrl(this._location.href); + var parsedTo = parseUrl(to); + var parsedFrom = parseUrl(from); + + // because onpopstate only tells you the "new" (to) value of location.href, and + // not the previous (from) value, we need to track the value of the current URL + // state ourselves + this._lastHref = to; + + // Use only the path component of the URL if the URL matches the current + // document (almost all the time when using pushState) + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) + to = parsedTo.relative; + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) + from = parsedFrom.relative; + + this.captureBreadcrumb({ + category: 'navigation', + data: { + to: to, + from: from + } + }); + }, + + /** + * Wrap timer functions and event targets to catch errors and provide + * better metadata. + */ + _instrumentTryCatch: function() { + var self = this; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapTimeFn(orig) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + var originalCallback = args[0]; + if (isFunction(originalCallback)) { + args[0] = self.wrap(originalCallback); + } + + // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it + // also supports only two arguments and doesn't care what this is, so we + // can just call the original function directly. + if (orig.apply) { + return orig.apply(this, args); + } else { + return orig(args[0], args[1]); + } + }; + } + + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + function wrapEventTarget(global) { + var proto = _window[global] && _window[global].prototype; + if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) { + fill( + proto, + 'addEventListener', + function(orig) { + return function(evtName, fn, capture, secure) { + // preserve arity + try { + if (fn && fn.handleEvent) { + fn.handleEvent = self.wrap(fn.handleEvent); + } + } catch (err) { + // can sometimes get 'Permission denied to access property "handle Event' + } + + // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs` + // so that we don't have more than one wrapper function + var before, clickHandler, keypressHandler; + + if ( + autoBreadcrumbs && + autoBreadcrumbs.dom && + (global === 'EventTarget' || global === 'Node') + ) { + // NOTE: generating multiple handlers per addEventListener invocation, should + // revisit and verify we can just use one (almost certainly) + clickHandler = self._breadcrumbEventHandler('click'); + keypressHandler = self._keypressEventHandler(); + before = function(evt) { + // need to intercept every DOM event in `before` argument, in case that + // same wrapped method is re-used for different events (e.g. mousemove THEN click) + // see #724 + if (!evt) return; + + var eventType; + try { + eventType = evt.type; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + if (eventType === 'click') return clickHandler(evt); + else if (eventType === 'keypress') return keypressHandler(evt); + }; + } + return orig.call( + this, + evtName, + self.wrap(fn, undefined, before), + capture, + secure + ); + }; + }, + wrappedBuiltIns + ); + fill( + proto, + 'removeEventListener', + function(orig) { + return function(evt, fn, capture, secure) { + try { + fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn); + } catch (e) { + // ignore, accessing __raven_wrapper__ will throw in some Selenium environments + } + return orig.call(this, evt, fn, capture, secure); + }; + }, + wrappedBuiltIns + ); + } + } + + fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns); + fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns); + if (_window.requestAnimationFrame) { + fill( + _window, + 'requestAnimationFrame', + function(orig) { + return function(cb) { + return orig(self.wrap(cb)); + }; + }, + wrappedBuiltIns + ); + } + + // event targets borrowed from bugsnag-js: + // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666 + var eventTargets = [ + 'EventTarget', + 'Window', + 'Node', + 'ApplicationCache', + 'AudioTrackList', + 'ChannelMergerNode', + 'CryptoOperation', + 'EventSource', + 'FileReader', + 'HTMLUnknownElement', + 'IDBDatabase', + 'IDBRequest', + 'IDBTransaction', + 'KeyOperation', + 'MediaController', + 'MessagePort', + 'ModalWindow', + 'Notification', + 'SVGElementInstance', + 'Screen', + 'TextTrack', + 'TextTrackCue', + 'TextTrackList', + 'WebSocket', + 'WebSocketWorker', + 'Worker', + 'XMLHttpRequest', + 'XMLHttpRequestEventTarget', + 'XMLHttpRequestUpload' + ]; + for (var i = 0; i < eventTargets.length; i++) { + wrapEventTarget(eventTargets[i]); + } + }, + + /** + * Instrument browser built-ins w/ breadcrumb capturing + * - XMLHttpRequests + * - DOM interactions (click/typing) + * - window.location changes + * - console + * + * Can be disabled or individually configured via the `autoBreadcrumbs` config option + */ + _instrumentBreadcrumbs: function() { + var self = this; + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapProp(prop, xhr) { + if (prop in xhr && isFunction(xhr[prop])) { + fill(xhr, prop, function(orig) { + return self.wrap(orig); + }); // intentionally don't track filled methods on XHR instances + } + } + + if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) { + var xhrproto = XMLHttpRequest.prototype; + fill( + xhrproto, + 'open', + function(origOpen) { + return function(method, url) { + // preserve arity + + // if Sentry key appears in URL, don't capture + if (isString(url) && url.indexOf(self._globalKey) === -1) { + this.__raven_xhr = { + method: method, + url: url, + status_code: null + }; + } + + return origOpen.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + + fill( + xhrproto, + 'send', + function(origSend) { + return function(data) { + // preserve arity + var xhr = this; + + function onreadystatechangeHandler() { + if (xhr.__raven_xhr && xhr.readyState === 4) { + try { + // touching statusCode in some platforms throws + // an exception + xhr.__raven_xhr.status_code = xhr.status; + } catch (e) { + /* do nothing */ + } + + self.captureBreadcrumb({ + type: 'http', + category: 'xhr', + data: xhr.__raven_xhr + }); + } + } + + var props = ['onload', 'onerror', 'onprogress']; + for (var j = 0; j < props.length; j++) { + wrapProp(props[j], xhr); + } + + if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) { + fill( + xhr, + 'onreadystatechange', + function(orig) { + return self.wrap(orig, undefined, onreadystatechangeHandler); + } /* intentionally don't track this instrumentation */ + ); + } else { + // if onreadystatechange wasn't actually set by the page on this xhr, we + // are free to set our own and capture the breadcrumb + xhr.onreadystatechange = onreadystatechangeHandler; + } + + return origSend.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + } + + if (autoBreadcrumbs.xhr && 'fetch' in _window) { + fill( + _window, + 'fetch', + function(origFetch) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + var fetchInput = args[0]; + var method = 'GET'; + var url; + + if (typeof fetchInput === 'string') { + url = fetchInput; + } else if ('Request' in _window && fetchInput instanceof _window.Request) { + url = fetchInput.url; + if (fetchInput.method) { + method = fetchInput.method; + } + } else { + url = '' + fetchInput; + } + + if (args[1] && args[1].method) { + method = args[1].method; + } + + var fetchData = { + method: method, + url: url, + status_code: null + }; + + self.captureBreadcrumb({ + type: 'http', + category: 'fetch', + data: fetchData + }); + + return origFetch.apply(this, args).then(function(response) { + fetchData.status_code = response.status; + + return response; + }); + }; + }, + wrappedBuiltIns + ); + } + + // Capture breadcrumbs from any click that is unhandled / bubbled up all the way + // to the document. Do this before we instrument addEventListener. + if (autoBreadcrumbs.dom && this._hasDocument) { + if (_document.addEventListener) { + _document.addEventListener('click', self._breadcrumbEventHandler('click'), false); + _document.addEventListener('keypress', self._keypressEventHandler(), false); + } else { + // IE8 Compatibility + _document.attachEvent('onclick', self._breadcrumbEventHandler('click')); + _document.attachEvent('onkeypress', self._keypressEventHandler()); + } + } + + // record navigation (URL) changes + // NOTE: in Chrome App environment, touching history.pushState, *even inside + // a try/catch block*, will cause Chrome to output an error to console.error + // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var chrome = _window.chrome; + var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + var hasPushAndReplaceState = + !isChromePackagedApp && + _window.history && + history.pushState && + history.replaceState; + if (autoBreadcrumbs.location && hasPushAndReplaceState) { + // TODO: remove onpopstate handler on uninstall() + var oldOnPopState = _window.onpopstate; + _window.onpopstate = function() { + var currentHref = self._location.href; + self._captureUrlChange(self._lastHref, currentHref); + + if (oldOnPopState) { + return oldOnPopState.apply(this, arguments); + } + }; + + var historyReplacementFunction = function(origHistFunction) { + // note history.pushState.length is 0; intentionally not declaring + // params to preserve 0 arity + return function(/* state, title, url */) { + var url = arguments.length > 2 ? arguments[2] : undefined; + + // url argument is optional + if (url) { + // coerce to string (this is what pushState does) + self._captureUrlChange(self._lastHref, url + ''); + } + + return origHistFunction.apply(this, arguments); + }; + }; + + fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns); + fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns); + } + + if (autoBreadcrumbs.console && 'console' in _window && console.log) { + // console + var consoleMethodCallback = function(msg, data) { + self.captureBreadcrumb({ + message: msg, + level: data.level, + category: 'console' + }); + }; + + each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) { + wrapConsoleMethod(console, level, consoleMethodCallback); + }); + } + }, + + _restoreBuiltIns: function() { + // restore any wrapped builtins + var builtin; + while (this._wrappedBuiltIns.length) { + builtin = this._wrappedBuiltIns.shift(); + + var obj = builtin[0], + name = builtin[1], + orig = builtin[2]; + + obj[name] = orig; + } + }, + + _drainPlugins: function() { + var self = this; + + // FIX ME TODO + each(this._plugins, function(_, plugin) { + var installer = plugin[0]; + var args = plugin[1]; + installer.apply(self, [self].concat(args)); + }); + }, + + _parseDSN: function(str) { + var m = dsnPattern.exec(str), + dsn = {}, + i = 7; + + try { + while (i--) dsn[dsnKeys[i]] = m[i] || ''; + } catch (e) { + throw new RavenConfigError('Invalid DSN: ' + str); + } + + if (dsn.pass && !this._globalOptions.allowSecretKey) { + throw new RavenConfigError( + 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key' + ); + } + + return dsn; + }, + + _getGlobalServer: function(uri) { + // assemble the endpoint from the uri pieces + var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : ''); + + if (uri.protocol) { + globalServer = uri.protocol + ':' + globalServer; + } + return globalServer; + }, + + _handleOnErrorStackInfo: function() { + // if we are intentionally ignoring errors via onerror, bail out + if (!this._ignoreOnError) { + this._handleStackInfo.apply(this, arguments); + } + }, + + _handleStackInfo: function(stackInfo, options) { + var frames = this._prepareFrames(stackInfo, options); + + this._triggerEvent('handle', { + stackInfo: stackInfo, + options: options + }); + + this._processException( + stackInfo.name, + stackInfo.message, + stackInfo.url, + stackInfo.lineno, + frames, + options + ); + }, + + _prepareFrames: function(stackInfo, options) { + var self = this; + var frames = []; + if (stackInfo.stack && stackInfo.stack.length) { + each(stackInfo.stack, function(i, stack) { + var frame = self._normalizeFrame(stack, stackInfo.url); + if (frame) { + frames.push(frame); + } + }); + + // e.g. frames captured via captureMessage throw + if (options && options.trimHeadFrames) { + for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) { + frames[j].in_app = false; + } + } + } + frames = frames.slice(0, this._globalOptions.stackTraceLimit); + return frames; + }, + + _normalizeFrame: function(frame, stackInfoUrl) { + // normalize the frames data + var normalized = { + filename: frame.url, + lineno: frame.line, + colno: frame.column, + function: frame.func || '?' + }; + + // Case when we don't have any information about the error + // E.g. throwing a string or raw object, instead of an `Error` in Firefox + // Generating synthetic error doesn't add any value here + // + // We should probably somehow let a user know that they should fix their code + if (!frame.url) { + normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler + } + + normalized.in_app = !// determine if an exception came from outside of our app + // first we check the global includePaths list. + ( + (!!this._globalOptions.includePaths.test && + !this._globalOptions.includePaths.test(normalized.filename)) || + // Now we check for fun, if the function name is Raven or TraceKit + /(Raven|TraceKit)\./.test(normalized['function']) || + // finally, we do a last ditch effort and check for raven.min.js + /raven\.(min\.)?js$/.test(normalized.filename) + ); + + return normalized; + }, + + _processException: function(type, message, fileurl, lineno, frames, options) { + var prefixedMessage = (type ? type + ': ' : '') + (message || ''); + if ( + !!this._globalOptions.ignoreErrors.test && + (this._globalOptions.ignoreErrors.test(message) || + this._globalOptions.ignoreErrors.test(prefixedMessage)) + ) { + return; + } + + var stacktrace; + + if (frames && frames.length) { + fileurl = frames[0].filename || fileurl; + // Sentry expects frames oldest to newest + // and JS sends them as newest to oldest + frames.reverse(); + stacktrace = {frames: frames}; + } else if (fileurl) { + stacktrace = { + frames: [ + { + filename: fileurl, + lineno: lineno, + in_app: true + } + ] + }; + } + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + var data = objectMerge( + { + // sentry.interfaces.Exception + exception: { + values: [ + { + type: type, + value: message, + stacktrace: stacktrace + } + ] + }, + culprit: fileurl + }, + options + ); + + // Fire away! + this._send(data); + }, + + _trimPacket: function(data) { + // For now, we only want to truncate the two different messages + // but this could/should be expanded to just trim everything + var max = this._globalOptions.maxMessageLength; + if (data.message) { + data.message = truncate(data.message, max); + } + if (data.exception) { + var exception = data.exception.values[0]; + exception.value = truncate(exception.value, max); + } + + var request = data.request; + if (request) { + if (request.url) { + request.url = truncate(request.url, this._globalOptions.maxUrlLength); + } + if (request.Referer) { + request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength); + } + } + + if (data.breadcrumbs && data.breadcrumbs.values) + this._trimBreadcrumbs(data.breadcrumbs); + + return data; + }, + + /** + * Truncate breadcrumb values (right now just URLs) + */ + _trimBreadcrumbs: function(breadcrumbs) { + // known breadcrumb properties with urls + // TODO: also consider arbitrary prop values that start with (https?)?:// + var urlProps = ['to', 'from', 'url'], + urlProp, + crumb, + data; + + for (var i = 0; i < breadcrumbs.values.length; ++i) { + crumb = breadcrumbs.values[i]; + if ( + !crumb.hasOwnProperty('data') || + !isObject(crumb.data) || + objectFrozen(crumb.data) + ) + continue; + + data = objectMerge({}, crumb.data); + for (var j = 0; j < urlProps.length; ++j) { + urlProp = urlProps[j]; + if (data.hasOwnProperty(urlProp) && data[urlProp]) { + data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength); + } + } + breadcrumbs.values[i].data = data; + } + }, + + _getHttpData: function() { + if (!this._hasNavigator && !this._hasDocument) return; + var httpData = {}; + + if (this._hasNavigator && _navigator.userAgent) { + httpData.headers = { + 'User-Agent': navigator.userAgent + }; + } + + if (this._hasDocument) { + if (_document.location && _document.location.href) { + httpData.url = _document.location.href; + } + if (_document.referrer) { + if (!httpData.headers) httpData.headers = {}; + httpData.headers.Referer = _document.referrer; + } + } + + return httpData; + }, + + _resetBackoff: function() { + this._backoffDuration = 0; + this._backoffStart = null; + }, + + _shouldBackoff: function() { + return this._backoffDuration && now() - this._backoffStart < this._backoffDuration; + }, + + /** + * Returns true if the in-process data payload matches the signature + * of the previously-sent data + * + * NOTE: This has to be done at this level because TraceKit can generate + * data from window.onerror WITHOUT an exception object (IE8, IE9, + * other old browsers). This can take the form of an "exception" + * data object with a single frame (derived from the onerror args). + */ + _isRepeatData: function(current) { + var last = this._lastData; + + if ( + !last || + current.message !== last.message || // defined for captureMessage + current.culprit !== last.culprit // defined for captureException/onerror + ) + return false; + + // Stacktrace interface (i.e. from captureMessage) + if (current.stacktrace || last.stacktrace) { + return isSameStacktrace(current.stacktrace, last.stacktrace); + } else if (current.exception || last.exception) { + // Exception interface (i.e. from captureException/onerror) + return isSameException(current.exception, last.exception); + } + + return true; + }, + + _setBackoffState: function(request) { + // If we are already in a backoff state, don't change anything + if (this._shouldBackoff()) { + return; + } + + var status = request.status; + + // 400 - project_id doesn't exist or some other fatal + // 401 - invalid/revoked dsn + // 429 - too many requests + if (!(status === 400 || status === 401 || status === 429)) return; + + var retry; + try { + // If Retry-After is not in Access-Control-Expose-Headers, most + // browsers will throw an exception trying to access it + retry = request.getResponseHeader('Retry-After'); + retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds + } catch (e) { + /* eslint no-empty:0 */ + } + + this._backoffDuration = retry + ? // If Sentry server returned a Retry-After value, use it + retry + : // Otherwise, double the last backoff duration (starts at 1 sec) + this._backoffDuration * 2 || 1000; + + this._backoffStart = now(); + }, + + _send: function(data) { + var globalOptions = this._globalOptions; + + var baseData = { + project: this._globalProject, + logger: globalOptions.logger, + platform: 'javascript' + }, + httpData = this._getHttpData(); + + if (httpData) { + baseData.request = httpData; + } + + // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload + if (data.trimHeadFrames) delete data.trimHeadFrames; + + data = objectMerge(baseData, data); + + // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge + data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags); + data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra); + + // Send along our own collected metadata with extra + data.extra['session:duration'] = now() - this._startTime; + + if (this._breadcrumbs && this._breadcrumbs.length > 0) { + // intentionally make shallow copy so that additions + // to breadcrumbs aren't accidentally sent in this request + data.breadcrumbs = { + values: [].slice.call(this._breadcrumbs, 0) + }; + } + + // If there are no tags/extra, strip the key from the payload alltogther. + if (isEmptyObject(data.tags)) delete data.tags; + + if (this._globalContext.user) { + // sentry.interfaces.User + data.user = this._globalContext.user; + } + + // Include the environment if it's defined in globalOptions + if (globalOptions.environment) data.environment = globalOptions.environment; + + // Include the release if it's defined in globalOptions + if (globalOptions.release) data.release = globalOptions.release; + + // Include server_name if it's defined in globalOptions + if (globalOptions.serverName) data.server_name = globalOptions.serverName; + + if (isFunction(globalOptions.dataCallback)) { + data = globalOptions.dataCallback(data) || data; + } + + // Why?????????? + if (!data || isEmptyObject(data)) { + return; + } + + // Check if the request should be filtered or not + if ( + isFunction(globalOptions.shouldSendCallback) && + !globalOptions.shouldSendCallback(data) + ) { + return; + } + + // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests), + // so drop requests until "cool-off" period has elapsed. + if (this._shouldBackoff()) { + this._logDebug('warn', 'Raven dropped error due to backoff: ', data); + return; + } + + if (typeof globalOptions.sampleRate === 'number') { + if (Math.random() < globalOptions.sampleRate) { + this._sendProcessedPayload(data); + } + } else { + this._sendProcessedPayload(data); + } + }, + + _getUuid: function() { + return uuid4(); + }, + + _sendProcessedPayload: function(data, callback) { + var self = this; + var globalOptions = this._globalOptions; + + if (!this.isSetup()) return; + + // Try and clean up the packet before sending by truncating long values + data = this._trimPacket(data); + + // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback, + // but this would require copying an un-truncated copy of the data packet, which can be + // arbitrarily deep (extra_data) -- could be worthwhile? will revisit + if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) { + this._logDebug('warn', 'Raven dropped repeat event: ', data); + return; + } + + // Send along an event_id if not explicitly passed. + // This event_id can be used to reference the error within Sentry itself. + // Set lastEventId after we know the error should actually be sent + this._lastEventId = data.event_id || (data.event_id = this._getUuid()); + + // Store outbound payload after trim + this._lastData = data; + + this._logDebug('debug', 'Raven about to send:', data); + + var auth = { + sentry_version: '7', + sentry_client: 'raven-js/' + this.VERSION, + sentry_key: this._globalKey + }; + + if (this._globalSecret) { + auth.sentry_secret = this._globalSecret; + } + + var exception = data.exception && data.exception.values[0]; + this.captureBreadcrumb({ + category: 'sentry', + message: exception + ? (exception.type ? exception.type + ': ' : '') + exception.value + : data.message, + event_id: data.event_id, + level: data.level || 'error' // presume error unless specified + }); + + var url = this._globalEndpoint; + (globalOptions.transport || this._makeRequest).call(this, { + url: url, + auth: auth, + data: data, + options: globalOptions, + onSuccess: function success() { + self._resetBackoff(); + + self._triggerEvent('success', { + data: data, + src: url + }); + callback && callback(); + }, + onError: function failure(error) { + self._logDebug('error', 'Raven transport failed to send: ', error); + + if (error.request) { + self._setBackoffState(error.request); + } + + self._triggerEvent('failure', { + data: data, + src: url + }); + error = error || new Error('Raven send failed (no additional details provided)'); + callback && callback(error); + } + }); + }, + + _makeRequest: function(opts) { + var request = _window.XMLHttpRequest && new _window.XMLHttpRequest(); + if (!request) return; + + // if browser doesn't support CORS (e.g. IE7), we are out of luck + var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined'; + + if (!hasCORS) return; + + var url = opts.url; + + if ('withCredentials' in request) { + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } else if (request.status === 200) { + opts.onSuccess && opts.onSuccess(); + } else if (opts.onError) { + var err = new Error('Sentry error code: ' + request.status); + err.request = request; + opts.onError(err); + } + }; + } else { + request = new XDomainRequest(); + // xdomainrequest cannot go http -> https (or vice versa), + // so always use protocol relative + url = url.replace(/^https?:/, ''); + + // onreadystatechange not supported by XDomainRequest + if (opts.onSuccess) { + request.onload = opts.onSuccess; + } + if (opts.onError) { + request.onerror = function() { + var err = new Error('Sentry error code: XDomainRequest'); + err.request = request; + opts.onError(err); + }; + } + } + + // NOTE: auth is intentionally sent as part of query string (NOT as custom + // HTTP header) so as to avoid preflight CORS requests + request.open('POST', url + '?' + urlencode(opts.auth)); + request.send(stringify(opts.data)); + }, + + _logDebug: function(level) { + if (this._originalConsoleMethods[level] && this.debug) { + // In IE<10 console methods do not have their own 'apply' method + Function.prototype.apply.call( + this._originalConsoleMethods[level], + this._originalConsole, + [].slice.call(arguments, 1) + ); + } + }, + + _mergeContext: function(key, context) { + if (isUndefined(context)) { + delete this._globalContext[key]; + } else { + this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context); + } + } +}; + +// Deprecations +Raven.prototype.setUser = Raven.prototype.setUserContext; +Raven.prototype.setReleaseContext = Raven.prototype.setRelease; + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/singleton.js": +/*!************************************************!*\ + !*** ./node_modules/raven-js/src/singleton.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * Enforces a single instance of the Raven client, and the + * main entry point for Raven. If you are a consumer of the + * Raven library, you SHOULD load this file (vs raven.js). + **/ + +var RavenConstructor = __webpack_require__(/*! ./raven */ "./node_modules/raven-js/src/raven.js"); + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _Raven = _window.Raven; + +var Raven = new RavenConstructor(); + +/* + * Allow multiple versions of Raven to be installed. + * Strip Raven from the global context and returns the instance. + * + * @return {Raven} + */ +Raven.noConflict = function() { + _window.Raven = _Raven; + return Raven; +}; + +Raven.afterLoad(); + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/utils.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/utils.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +function isObject(what) { + return typeof what === 'object' && what !== null; +} + +// Yanked from https://git.io/vS8DV re-used under CC0 +// with some tiny modifications +function isError(value) { + switch ({}.toString.call(value)) { + case '[object Error]': + return true; + case '[object Exception]': + return true; + case '[object DOMException]': + return true; + default: + return value instanceof Error; + } +} + +function isErrorEvent(value) { + return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]'; +} + +function isUndefined(what) { + return what === void 0; +} + +function isFunction(what) { + return typeof what === 'function'; +} + +function isString(what) { + return Object.prototype.toString.call(what) === '[object String]'; +} + +function isEmptyObject(what) { + for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars + return true; +} + +function supportsErrorEvent() { + try { + new ErrorEvent(''); // eslint-disable-line no-new + return true; + } catch (e) { + return false; + } +} + +function wrappedCallback(callback) { + function dataCallback(data, original) { + var normalizedData = callback(data) || data; + if (original) { + return original(normalizedData) || normalizedData; + } + return normalizedData; + } + + return dataCallback; +} + +function each(obj, callback) { + var i, j; + + if (isUndefined(obj.length)) { + for (i in obj) { + if (hasKey(obj, i)) { + callback.call(null, i, obj[i]); + } + } + } else { + j = obj.length; + if (j) { + for (i = 0; i < j; i++) { + callback.call(null, i, obj[i]); + } + } + } +} + +function objectMerge(obj1, obj2) { + if (!obj2) { + return obj1; + } + each(obj2, function(key, value) { + obj1[key] = value; + }); + return obj1; +} + +/** + * This function is only used for react-native. + * react-native freezes object that have already been sent over the + * js bridge. We need this function in order to check if the object is frozen. + * So it's ok that objectFrozen returns false if Object.isFrozen is not + * supported because it's not relevant for other "platforms". See related issue: + * https://github.com/getsentry/react-native-sentry/issues/57 + */ +function objectFrozen(obj) { + if (!Object.isFrozen) { + return false; + } + return Object.isFrozen(obj); +} + +function truncate(str, max) { + return !max || str.length <= max ? str : str.substr(0, max) + '\u2026'; +} + +/** + * hasKey, a better form of hasOwnProperty + * Example: hasKey(MainHostObject, property) === true/false + * + * @param {Object} host object to check property + * @param {string} key to check + */ +function hasKey(object, key) { + return Object.prototype.hasOwnProperty.call(object, key); +} + +function joinRegExp(patterns) { + // Combine an array of regular expressions and strings into one large regexp + // Be mad. + var sources = [], + i = 0, + len = patterns.length, + pattern; + + for (; i < len; i++) { + pattern = patterns[i]; + if (isString(pattern)) { + // If it's a string, we need to escape it + // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1')); + } else if (pattern && pattern.source) { + // If it's a regexp already, we want to extract the source + sources.push(pattern.source); + } + // Intentionally skip other cases + } + return new RegExp(sources.join('|'), 'i'); +} + +function urlencode(o) { + var pairs = []; + each(o, function(key, value) { + pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + return pairs.join('&'); +} + +// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B +// intentionally using regex and not href parsing trick because React Native and other +// environments where DOM might not be available +function parseUrl(url) { + var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); + if (!match) return {}; + + // coerce to undefined values to empty string so we don't get 'undefined' + var query = match[6] || ''; + var fragment = match[8] || ''; + return { + protocol: match[2], + host: match[4], + path: match[5], + relative: match[5] + query + fragment // everything minus origin + }; +} +function uuid4() { + var crypto = _window.crypto || _window.msCrypto; + + if (!isUndefined(crypto) && crypto.getRandomValues) { + // Use window.crypto API if available + // eslint-disable-next-line no-undef + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); + + // set 4 in byte 7 + arr[3] = (arr[3] & 0xfff) | 0x4000; + // set 2 most significant bits of byte 9 to '10' + arr[4] = (arr[4] & 0x3fff) | 0x8000; + + var pad = function(num) { + var v = num.toString(16); + while (v.length < 4) { + v = '0' + v; + } + return v; + }; + + return ( + pad(arr[0]) + + pad(arr[1]) + + pad(arr[2]) + + pad(arr[3]) + + pad(arr[4]) + + pad(arr[5]) + + pad(arr[6]) + + pad(arr[7]) + ); + } else { + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + } +} + +/** + * Given a child DOM element, returns a query-selector statement describing that + * and its ancestors + * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] + * @param elem + * @returns {string} + */ +function htmlTreeAsString(elem) { + /* eslint no-extra-parens:0*/ + var MAX_TRAVERSE_HEIGHT = 5, + MAX_OUTPUT_LEN = 80, + out = [], + height = 0, + len = 0, + separator = ' > ', + sepLength = separator.length, + nextStr; + + while (elem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = htmlElementAsString(elem); + // bail out if + // - nextStr is the 'html' element + // - the length of the string that would be created exceeds MAX_OUTPUT_LEN + // (ignore this limit if we are on the first iteration) + if ( + nextStr === 'html' || + (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) + ) { + break; + } + + out.push(nextStr); + + len += nextStr.length; + elem = elem.parentNode; + } + + return out.reverse().join(separator); +} + +/** + * Returns a simple, query-selector representation of a DOM element + * e.g. [HTMLElement] => input#foo.btn[name=baz] + * @param HTMLElement + * @returns {string} + */ +function htmlElementAsString(elem) { + var out = [], + className, + classes, + key, + attr, + i; + + if (!elem || !elem.tagName) { + return ''; + } + + out.push(elem.tagName.toLowerCase()); + if (elem.id) { + out.push('#' + elem.id); + } + + className = elem.className; + if (className && isString(className)) { + classes = className.split(/\s+/); + for (i = 0; i < classes.length; i++) { + out.push('.' + classes[i]); + } + } + var attrWhitelist = ['type', 'name', 'title', 'alt']; + for (i = 0; i < attrWhitelist.length; i++) { + key = attrWhitelist[i]; + attr = elem.getAttribute(key); + if (attr) { + out.push('[' + key + '="' + attr + '"]'); + } + } + return out.join(''); +} + +/** + * Returns true if either a OR b is truthy, but not both + */ +function isOnlyOneTruthy(a, b) { + return !!(!!a ^ !!b); +} + +/** + * Returns true if the two input exception interfaces have the same content + */ +function isSameException(ex1, ex2) { + if (isOnlyOneTruthy(ex1, ex2)) return false; + + ex1 = ex1.values[0]; + ex2 = ex2.values[0]; + + if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false; + + return isSameStacktrace(ex1.stacktrace, ex2.stacktrace); +} + +/** + * Returns true if the two input stack trace interfaces have the same content + */ +function isSameStacktrace(stack1, stack2) { + if (isOnlyOneTruthy(stack1, stack2)) return false; + + var frames1 = stack1.frames; + var frames2 = stack2.frames; + + // Exit early if frame count differs + if (frames1.length !== frames2.length) return false; + + // Iterate through every frame; bail out if anything differs + var a, b; + for (var i = 0; i < frames1.length; i++) { + a = frames1[i]; + b = frames2[i]; + if ( + a.filename !== b.filename || + a.lineno !== b.lineno || + a.colno !== b.colno || + a['function'] !== b['function'] + ) + return false; + } + return true; +} + +/** + * Polyfill a method + * @param obj object e.g. `document` + * @param name method name present on object e.g. `addEventListener` + * @param replacement replacement function + * @param track {optional} record instrumentation to an array + */ +function fill(obj, name, replacement, track) { + var orig = obj[name]; + obj[name] = replacement(orig); + if (track) { + track.push([obj, name, orig]); + } +} + +module.exports = { + isObject: isObject, + isError: isError, + isErrorEvent: isErrorEvent, + isUndefined: isUndefined, + isFunction: isFunction, + isString: isString, + isEmptyObject: isEmptyObject, + supportsErrorEvent: supportsErrorEvent, + wrappedCallback: wrappedCallback, + each: each, + objectMerge: objectMerge, + truncate: truncate, + objectFrozen: objectFrozen, + hasKey: hasKey, + joinRegExp: joinRegExp, + urlencode: urlencode, + uuid4: uuid4, + htmlTreeAsString: htmlTreeAsString, + htmlElementAsString: htmlElementAsString, + isSameException: isSameException, + isSameStacktrace: isSameStacktrace, + parseUrl: parseUrl, + fill: fill +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/TraceKit/tracekit.js": +/*!***********************************************************!*\ + !*** ./node_modules/raven-js/vendor/TraceKit/tracekit.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var utils = __webpack_require__(/*! ../../src/utils */ "./node_modules/raven-js/src/utils.js"); + +/* + TraceKit - Cross brower stack traces + + This was originally forked from github.com/occ/TraceKit, but has since been + largely re-written and is now maintained as part of raven-js. Tests for + this are in test/vendor. + + MIT license +*/ + +var TraceKit = { + collectWindowErrors: true, + debug: false +}; + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +// global reference to slice +var _slice = [].slice; +var UNKNOWN_FUNCTION = '?'; + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types +var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/; + +function getLocationHref() { + if (typeof document === 'undefined' || document.location == null) return ''; + + return document.location.href; +} + +/** + * TraceKit.report: cross-browser processing of unhandled exceptions + * + * Syntax: + * TraceKit.report.subscribe(function(stackInfo) { ... }) + * TraceKit.report.unsubscribe(function(stackInfo) { ... }) + * TraceKit.report(exception) + * try { ...code... } catch(ex) { TraceKit.report(ex); } + * + * Supports: + * - Firefox: full stack trace with line numbers, plus column number + * on top frame; column number is not guaranteed + * - Opera: full stack trace with line and column numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * - IE: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * + * In theory, TraceKit should work on all of the following versions: + * - IE5.5+ (only 8.0 tested) + * - Firefox 0.9+ (only 3.5+ tested) + * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require + * Exceptions Have Stacktrace to be enabled in opera:config) + * - Safari 3+ (only 4+ tested) + * - Chrome 1+ (only 5+ tested) + * - Konqueror 3.5+ (untested) + * + * Requires TraceKit.computeStackTrace. + * + * Tries to catch all unhandled exceptions and report them to the + * subscribed handlers. Please note that TraceKit.report will rethrow the + * exception. This is REQUIRED in order to get a useful stack trace in IE. + * If the exception does not reach the top of the browser, you will only + * get a stack trace from the point where TraceKit.report was called. + * + * Handlers receive a stackInfo object as described in the + * TraceKit.computeStackTrace docs. + */ +TraceKit.report = (function reportModuleWrapper() { + var handlers = [], + lastArgs = null, + lastException = null, + lastExceptionStack = null; + + /** + * Add a crash handler. + * @param {Function} handler + */ + function subscribe(handler) { + installGlobalHandler(); + handlers.push(handler); + } + + /** + * Remove a crash handler. + * @param {Function} handler + */ + function unsubscribe(handler) { + for (var i = handlers.length - 1; i >= 0; --i) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } + + /** + * Remove all crash handlers. + */ + function unsubscribeAll() { + uninstallGlobalHandler(); + handlers = []; + } + + /** + * Dispatch stack information to all handlers. + * @param {Object.} stack + */ + function notifyHandlers(stack, isWindowError) { + var exception = null; + if (isWindowError && !TraceKit.collectWindowErrors) { + return; + } + for (var i in handlers) { + if (handlers.hasOwnProperty(i)) { + try { + handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); + } catch (inner) { + exception = inner; + } + } + } + + if (exception) { + throw exception; + } + } + + var _oldOnerrorHandler, _onErrorHandlerInstalled; + + /** + * Ensures all global unhandled exceptions are recorded. + * Supported by Gecko and IE. + * @param {string} message Error message. + * @param {string} url URL of script that generated the exception. + * @param {(number|string)} lineNo The line number at which the error + * occurred. + * @param {?(number|string)} colNo The column number at which the error + * occurred. + * @param {?Error} ex The actual Error object. + */ + function traceKitWindowOnError(message, url, lineNo, colNo, ex) { + var stack = null; + + if (lastExceptionStack) { + TraceKit.computeStackTrace.augmentStackTraceWithInitialElement( + lastExceptionStack, + url, + lineNo, + message + ); + processLastException(); + } else if (ex && utils.isError(ex)) { + // non-string `ex` arg; attempt to extract stack trace + + // New chrome and blink send along a real error object + // Let's just report that like a normal error. + // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror + stack = TraceKit.computeStackTrace(ex); + notifyHandlers(stack, true); + } else { + var location = { + url: url, + line: lineNo, + column: colNo + }; + + var name = undefined; + var msg = message; // must be new var or will modify original `arguments` + var groups; + if ({}.toString.call(message) === '[object String]') { + var groups = message.match(ERROR_TYPES_RE); + if (groups) { + name = groups[1]; + msg = groups[2]; + } + } + + location.func = UNKNOWN_FUNCTION; + + stack = { + name: name, + message: msg, + url: getLocationHref(), + stack: [location] + }; + notifyHandlers(stack, true); + } + + if (_oldOnerrorHandler) { + return _oldOnerrorHandler.apply(this, arguments); + } + + return false; + } + + function installGlobalHandler() { + if (_onErrorHandlerInstalled) { + return; + } + _oldOnerrorHandler = _window.onerror; + _window.onerror = traceKitWindowOnError; + _onErrorHandlerInstalled = true; + } + + function uninstallGlobalHandler() { + if (!_onErrorHandlerInstalled) { + return; + } + _window.onerror = _oldOnerrorHandler; + _onErrorHandlerInstalled = false; + _oldOnerrorHandler = undefined; + } + + function processLastException() { + var _lastExceptionStack = lastExceptionStack, + _lastArgs = lastArgs; + lastArgs = null; + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs)); + } + + /** + * Reports an unhandled Error to TraceKit. + * @param {Error} ex + * @param {?boolean} rethrow If false, do not re-throw the exception. + * Only used for window.onerror to not cause an infinite loop of + * rethrowing. + */ + function report(ex, rethrow) { + var args = _slice.call(arguments, 1); + if (lastExceptionStack) { + if (lastException === ex) { + return; // already caught by an inner catch block, ignore + } else { + processLastException(); + } + } + + var stack = TraceKit.computeStackTrace(ex); + lastExceptionStack = stack; + lastException = ex; + lastArgs = args; + + // If the stack trace is incomplete, wait for 2 seconds for + // slow slow IE to see if onerror occurs or not before reporting + // this exception; otherwise, we will end up with an incomplete + // stack trace + setTimeout(function() { + if (lastException === ex) { + processLastException(); + } + }, stack.incomplete ? 2000 : 0); + + if (rethrow !== false) { + throw ex; // re-throw to propagate to the top level (and cause window.onerror) + } + } + + report.subscribe = subscribe; + report.unsubscribe = unsubscribe; + report.uninstall = unsubscribeAll; + return report; +})(); + +/** + * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript + * + * Syntax: + * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) + * Returns: + * s.name - exception name + * s.message - exception message + * s.stack[i].url - JavaScript or HTML file URL + * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) + * s.stack[i].args - arguments passed to the function, if known + * s.stack[i].line - line number, if known + * s.stack[i].column - column number, if known + * + * Supports: + * - Firefox: full stack trace with line numbers and unreliable column + * number on top frame + * - Opera 10: full stack trace with line and column numbers + * - Opera 9-: full stack trace with line numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the topmost stacktrace element + * only + * - IE: no line numbers whatsoever + * + * Tries to guess names of anonymous functions by looking for assignments + * in the source code. In IE and Safari, we have to guess source file names + * by searching for function bodies inside all page scripts. This will not + * work for scripts that are loaded cross-domain. + * Here be dragons: some function names may be guessed incorrectly, and + * duplicate functions may be mismatched. + * + * TraceKit.computeStackTrace should only be used for tracing purposes. + * Logging of unhandled exceptions should be done with TraceKit.report, + * which builds on top of TraceKit.computeStackTrace and provides better + * IE support by utilizing the window.onerror event to retrieve information + * about the top of the stack. + * + * Note: In IE and Safari, no stack trace is recorded on the Error object, + * so computeStackTrace instead walks its *own* chain of callers. + * This means that: + * * in Safari, some methods may be missing from the stack trace; + * * in IE, the topmost function in the stack trace will always be the + * caller of computeStackTrace. + * + * This is okay for tracing (because you are likely to be calling + * computeStackTrace from the function you want to be the topmost element + * of the stack trace anyway), but not okay for logging unhandled + * exceptions (because your catch block will likely be far away from the + * inner function that actually caused the exception). + * + */ +TraceKit.computeStackTrace = (function computeStackTraceWrapper() { + // Contents of Exception in various browsers. + // + // SAFARI: + // ex.message = Can't find variable: qq + // ex.line = 59 + // ex.sourceId = 580238192 + // ex.sourceURL = http://... + // ex.expressionBeginOffset = 96 + // ex.expressionCaretOffset = 98 + // ex.expressionEndOffset = 98 + // ex.name = ReferenceError + // + // FIREFOX: + // ex.message = qq is not defined + // ex.fileName = http://... + // ex.lineNumber = 59 + // ex.columnNumber = 69 + // ex.stack = ...stack trace... (see the example below) + // ex.name = ReferenceError + // + // CHROME: + // ex.message = qq is not defined + // ex.name = ReferenceError + // ex.type = not_defined + // ex.arguments = ['aa'] + // ex.stack = ...stack trace... + // + // INTERNET EXPLORER: + // ex.message = ... + // ex.name = ReferenceError + // + // OPERA: + // ex.message = ...message... (see the example below) + // ex.name = ReferenceError + // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) + // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + + /** + * Computes stack trace information from the stack property. + * Chrome and Gecko use this property. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceFromStackProp(ex) { + if (typeof ex.stack === 'undefined' || !ex.stack) return; + + var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, + gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i, + winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i, + // Used to additionally parse URL/line/column from eval frames + geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, + chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/, + lines = ex.stack.split('\n'), + stack = [], + submatch, + parts, + element, + reference = /^(.*) is undefined$/.exec(ex.message); + + for (var i = 0, j = lines.length; i < j; ++i) { + if ((parts = chrome.exec(lines[i]))) { + var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + if (isEval && (submatch = chromeEval.exec(parts[2]))) { + // throw out eval line/column and use top-most line/column number + parts[2] = submatch[1]; // url + parts[3] = submatch[2]; // line + parts[4] = submatch[3]; // column + } + element = { + url: !isNative ? parts[2] : null, + func: parts[1] || UNKNOWN_FUNCTION, + args: isNative ? [parts[2]] : [], + line: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = winjs.exec(lines[i]))) { + element = { + url: parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: [], + line: +parts[3], + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = gecko.exec(lines[i]))) { + var isEval = parts[3] && parts[3].indexOf(' > eval') > -1; + if (isEval && (submatch = geckoEval.exec(parts[3]))) { + // throw out eval line/column and use top-most line number + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = null; // no column when eval + } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') { + // FireFox uses this awesome columnNumber property for its top frame + // Also note, Firefox's column number is 0-based and everything else expects 1-based, + // so adding 1 + // NOTE: this hack doesn't work if top-most frame is eval + stack[0].column = ex.columnNumber + 1; + } + element = { + url: parts[3], + func: parts[1] || UNKNOWN_FUNCTION, + args: parts[2] ? parts[2].split(',') : [], + line: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null + }; + } else { + continue; + } + + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; + } + + stack.push(element); + } + + if (!stack.length) { + return null; + } + + return { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + } + + /** + * Adds information about the first frame to incomplete stack traces. + * Safari and IE require this to get complete data on the first frame. + * @param {Object.} stackInfo Stack trace information from + * one of the compute* methods. + * @param {string} url The URL of the script that caused an error. + * @param {(number|string)} lineNo The line number of the script that + * caused an error. + * @param {string=} message The error generated by the browser, which + * hopefully contains the name of the object that caused the error. + * @return {boolean} Whether or not the stack information was + * augmented. + */ + function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { + var initial = { + url: url, + line: lineNo + }; + + if (initial.url && initial.line) { + stackInfo.incomplete = false; + + if (!initial.func) { + initial.func = UNKNOWN_FUNCTION; + } + + if (stackInfo.stack.length > 0) { + if (stackInfo.stack[0].url === initial.url) { + if (stackInfo.stack[0].line === initial.line) { + return false; // already in stack trace + } else if ( + !stackInfo.stack[0].line && + stackInfo.stack[0].func === initial.func + ) { + stackInfo.stack[0].line = initial.line; + return false; + } + } + } + + stackInfo.stack.unshift(initial); + stackInfo.partial = true; + return true; + } else { + stackInfo.incomplete = true; + } + + return false; + } + + /** + * Computes stack trace information by walking the arguments.caller + * chain at the time the exception occurred. This will cause earlier + * frames to be missed but is the only way to get any stack trace in + * Safari and IE. The top frame is restored by + * {@link augmentStackTraceWithInitialElement}. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceByWalkingCallerChain(ex, depth) { + var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, + stack = [], + funcs = {}, + recursion = false, + parts, + item, + source; + + for ( + var curr = computeStackTraceByWalkingCallerChain.caller; + curr && !recursion; + curr = curr.caller + ) { + if (curr === computeStackTrace || curr === TraceKit.report) { + // console.log('skipping internal function'); + continue; + } + + item = { + url: null, + func: UNKNOWN_FUNCTION, + line: null, + column: null + }; + + if (curr.name) { + item.func = curr.name; + } else if ((parts = functionName.exec(curr.toString()))) { + item.func = parts[1]; + } + + if (typeof item.func === 'undefined') { + try { + item.func = parts.input.substring(0, parts.input.indexOf('{')); + } catch (e) {} + } + + if (funcs['' + curr]) { + recursion = true; + } else { + funcs['' + curr] = true; + } + + stack.push(item); + } + + if (depth) { + // console.log('depth is ' + depth); + // console.log('stack is ' + stack.length); + stack.splice(0, depth); + } + + var result = { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + augmentStackTraceWithInitialElement( + result, + ex.sourceURL || ex.fileName, + ex.line || ex.lineNumber, + ex.message || ex.description + ); + return result; + } + + /** + * Computes a stack trace for an exception. + * @param {Error} ex + * @param {(string|number)=} depth + */ + function computeStackTrace(ex, depth) { + var stack = null; + depth = depth == null ? 0 : +depth; + + try { + stack = computeStackTraceFromStackProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + + try { + stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + return { + name: ex.name, + message: ex.message, + url: getLocationHref() + }; + } + + computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; + computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp; + + return computeStackTrace; +})(); + +module.exports = TraceKit; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js": +/*!***********************************************************************!*\ + !*** ./node_modules/raven-js/vendor/json-stringify-safe/stringify.js ***! + \***********************************************************************/ +/***/ ((module, exports) => { + +/* + json-stringify-safe + Like JSON.stringify, but doesn't throw on circular references. + + Originally forked from https://github.com/isaacs/json-stringify-safe + version 5.0.1 on 3/8/2017 and modified to handle Errors serialization + and IE8 compatibility. Tests for this are in test/vendor. + + ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE +*/ + +exports = module.exports = stringify; +exports.getSerialize = serializer; + +function indexOf(haystack, needle) { + for (var i = 0; i < haystack.length; ++i) { + if (haystack[i] === needle) return i; + } + return -1; +} + +function stringify(obj, replacer, spaces, cycleReplacer) { + return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); +} + +// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106 +function stringifyError(value) { + var err = { + // These properties are implemented as magical getters and don't show up in for in + stack: value.stack, + message: value.message, + name: value.name + }; + + for (var i in value) { + if (Object.prototype.hasOwnProperty.call(value, i)) { + err[i] = value[i]; + } + } + + return err; +} + +function serializer(replacer, cycleReplacer) { + var stack = []; + var keys = []; + + if (cycleReplacer == null) { + cycleReplacer = function(key, value) { + if (stack[0] === value) { + return '[Circular ~]'; + } + return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'; + }; + } + + return function(key, value) { + if (stack.length > 0) { + var thisPos = indexOf(stack, this); + ~thisPos ? stack.splice(thisPos + 1) : stack.push(this); + ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key); + + if (~indexOf(stack, value)) { + value = cycleReplacer.call(this, key, value); + } + } else { + stack.push(value); + } + + return replacer == null + ? value instanceof Error ? stringifyError(value) : value + : replacer.call(this, key, value); + }; +} + + +/***/ }), + +/***/ "./node_modules/react/cjs/react-jsx-runtime.development.js": +/*!*****************************************************************!*\ + !*** ./node_modules/react/cjs/react-jsx-runtime.development.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +/** @license React v17.0.2 + * react-jsx-runtime.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +if (true) { + (function() { +'use strict'; + +var React = __webpack_require__(/*! react */ "react"); +var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); + +// ATTENTION +// When adding new symbols to this file, +// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' +// The Symbol used to tag the ReactElement-like types. If there is no native Symbol +// nor polyfill, then a plain number is used for performance. +var REACT_ELEMENT_TYPE = 0xeac7; +var REACT_PORTAL_TYPE = 0xeaca; +exports.Fragment = 0xeacb; +var REACT_STRICT_MODE_TYPE = 0xeacc; +var REACT_PROFILER_TYPE = 0xead2; +var REACT_PROVIDER_TYPE = 0xeacd; +var REACT_CONTEXT_TYPE = 0xeace; +var REACT_FORWARD_REF_TYPE = 0xead0; +var REACT_SUSPENSE_TYPE = 0xead1; +var REACT_SUSPENSE_LIST_TYPE = 0xead8; +var REACT_MEMO_TYPE = 0xead3; +var REACT_LAZY_TYPE = 0xead4; +var REACT_BLOCK_TYPE = 0xead9; +var REACT_SERVER_BLOCK_TYPE = 0xeada; +var REACT_FUNDAMENTAL_TYPE = 0xead5; +var REACT_SCOPE_TYPE = 0xead7; +var REACT_OPAQUE_ID_TYPE = 0xeae0; +var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1; +var REACT_OFFSCREEN_TYPE = 0xeae2; +var REACT_LEGACY_HIDDEN_TYPE = 0xeae3; + +if (typeof Symbol === 'function' && Symbol.for) { + var symbolFor = Symbol.for; + REACT_ELEMENT_TYPE = symbolFor('react.element'); + REACT_PORTAL_TYPE = symbolFor('react.portal'); + exports.Fragment = symbolFor('react.fragment'); + REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode'); + REACT_PROFILER_TYPE = symbolFor('react.profiler'); + REACT_PROVIDER_TYPE = symbolFor('react.provider'); + REACT_CONTEXT_TYPE = symbolFor('react.context'); + REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref'); + REACT_SUSPENSE_TYPE = symbolFor('react.suspense'); + REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list'); + REACT_MEMO_TYPE = symbolFor('react.memo'); + REACT_LAZY_TYPE = symbolFor('react.lazy'); + REACT_BLOCK_TYPE = symbolFor('react.block'); + REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block'); + REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental'); + REACT_SCOPE_TYPE = symbolFor('react.scope'); + REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id'); + REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode'); + REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen'); + REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden'); +} + +var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; +var FAUX_ITERATOR_SYMBOL = '@@iterator'; +function getIteratorFn(maybeIterable) { + if (maybeIterable === null || typeof maybeIterable !== 'object') { + return null; + } + + var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; + + if (typeof maybeIterator === 'function') { + return maybeIterator; + } + + return null; +} + +var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + +function error(format) { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } +} + +function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } + + var argsWithFormat = args.map(function (item) { + return '' + item; + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } +} + +// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. + +var enableScopeAPI = false; // Experimental Create Event Handle API. + +function isValidElementType(type) { + if (typeof type === 'string' || typeof type === 'function') { + return true; + } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). + + + if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) { + return true; + } + + if (typeof type === 'object' && type !== null) { + if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) { + return true; + } + } + + return false; +} + +function getWrappedName(outerType, innerType, wrapperName) { + var functionName = innerType.displayName || innerType.name || ''; + return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); +} + +function getContextName(type) { + return type.displayName || 'Context'; +} + +function getComponentName(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case exports.Fragment: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + return getComponentName(type.type); + + case REACT_BLOCK_TYPE: + return getComponentName(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentName(init(payload)); + } catch (x) { + return null; + } + } + } + } + + return null; +} + +// Helpers to patch console.logs to avoid logging during side-effect free +// replaying on render function. This currently only patches the object +// lazily which won't cover if the log function was extracted eagerly. +// We could also eagerly patch the method. +var disabledDepth = 0; +var prevLog; +var prevInfo; +var prevWarn; +var prevError; +var prevGroup; +var prevGroupCollapsed; +var prevGroupEnd; + +function disabledLog() {} + +disabledLog.__reactDisabledLog = true; +function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } +} +function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: _assign({}, props, { + value: prevLog + }), + info: _assign({}, props, { + value: prevInfo + }), + warn: _assign({}, props, { + value: prevWarn + }), + error: _assign({}, props, { + value: prevError + }), + group: _assign({}, props, { + value: prevGroup + }), + groupCollapsed: _assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: _assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } +} + +var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; +var prefix; +function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } +} +var reentry = false; +var componentFrameCache; + +{ + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); +} + +function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if (!fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; +} +function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } +} + +function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); +} + +function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_BLOCK_TYPE: + return describeFunctionComponentFrame(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; +} + +var loggedTypeFailures = {}; +var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame.setExtraStackFrame(null); + } + } +} + +function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(Object.prototype.hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } +} + +var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true +}; +var specialPropKeyWarningShown; +var specialPropRefWarningShown; +var didWarnAboutStringRefs; + +{ + didWarnAboutStringRefs = {}; +} + +function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.ref !== undefined; +} + +function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.key !== undefined; +} + +function warnIfStringRefCannotBeAutoConverted(config, self) { + { + if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) { + var componentName = getComponentName(ReactCurrentOwner.current.type); + + if (!didWarnAboutStringRefs[componentName]) { + error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref); + + didWarnAboutStringRefs[componentName] = true; + } + } + } +} + +function defineKeyPropWarningGetter(props, displayName) { + { + var warnAboutAccessingKey = function () { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + + error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); + } +} + +function defineRefPropWarningGetter(props, displayName) { + { + var warnAboutAccessingRef = function () { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + + error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); + } +} +/** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, instanceof check + * will not work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} props + * @param {*} key + * @param {string|object} ref + * @param {*} owner + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @internal + */ + + +var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); // self and source are DEV only properties. + + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; +}; +/** + * https://github.com/reactjs/rfcs/pull/107 + * @param {*} type + * @param {object} props + * @param {string} key + */ + +function jsxDEV(type, config, maybeKey, source, self) { + { + var propName; // Reserved names are extracted + + var props = {}; + var key = null; + var ref = null; // Currently, key can be spread in as a prop. This causes a potential + // issue if key is also explicitly declared (ie.
+ // or
). We want to deprecate key spread, + // but as an intermediary step, we will use jsxDEV for everything except + //
, because we aren't currently able to tell if + // key is explicitly declared to be undefined or not. + + if (maybeKey !== undefined) { + key = '' + maybeKey; + } + + if (hasValidKey(config)) { + key = '' + config.key; + } + + if (hasValidRef(config)) { + ref = config.ref; + warnIfStringRefCannotBeAutoConverted(config, self); + } // Remaining properties are added to a new props object + + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } // Resolve default props + + + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + + if (key || ref) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); + } +} + +var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; +var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement$1(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame$1.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame$1.setExtraStackFrame(null); + } + } +} + +var propTypesMisspellWarningShown; + +{ + propTypesMisspellWarningShown = false; +} +/** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a ReactElement. + * @final + */ + +function isValidElement(object) { + { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + } +} + +function getDeclarationErrorAddendum() { + { + if (ReactCurrentOwner$1.current) { + var name = getComponentName(ReactCurrentOwner$1.current.type); + + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + + return ''; + } +} + +function getSourceInfoErrorAddendum(source) { + { + if (source !== undefined) { + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + + return ''; + } +} +/** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + + +var ownerHasKeyUseWarning = {}; + +function getCurrentComponentErrorInfo(parentType) { + { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + + if (parentName) { + info = "\n\nCheck the top-level render call using <" + parentName + ">."; + } + } + + return info; + } +} +/** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + + +function validateExplicitKey(element, parentType) { + { + if (!element._store || element._store.validated || element.key != null) { + return; + } + + element._store.validated = true; + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + + var childOwner = ''; + + if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) { + // Give the component that originally created this child. + childOwner = " It was passed a child from " + getComponentName(element._owner.type) + "."; + } + + setCurrentlyValidatingElement$1(element); + + error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); + + setCurrentlyValidatingElement$1(null); + } +} +/** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + + +function validateChildKeys(node, parentType) { + { + if (typeof node !== 'object') { + return; + } + + if (Array.isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } + } +} +/** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + + +function validatePropTypes(element) { + { + var type = element.type; + + if (type === null || type === undefined || typeof type === 'string') { + return; + } + + var propTypes; + + if (typeof type === 'function') { + propTypes = type.propTypes; + } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + type.$$typeof === REACT_MEMO_TYPE)) { + propTypes = type.propTypes; + } else { + return; + } + + if (propTypes) { + // Intentionally inside to avoid triggering lazy initializers: + var name = getComponentName(type); + checkPropTypes(propTypes, element.props, 'prop', name, element); + } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: + + var _name = getComponentName(type); + + error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); + } + + if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { + error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } + } +} +/** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ + + +function validateFragmentProps(fragment) { + { + var keys = Object.keys(fragment.props); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (key !== 'children' && key !== 'key') { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); + + setCurrentlyValidatingElement$1(null); + break; + } + } + + if (fragment.ref !== null) { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid attribute `ref` supplied to `React.Fragment`.'); + + setCurrentlyValidatingElement$1(null); + } + } +} + +function jsxWithValidation(type, props, key, isStaticChildren, source, self) { + { + var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + + if (!validType) { + var info = ''; + + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendum(source); + + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + var typeString; + + if (type === null) { + typeString = 'null'; + } else if (Array.isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />"; + info = ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); + } + + var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + + if (element == null) { + return element; + } // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + + + if (validType) { + var children = props.children; + + if (children !== undefined) { + if (isStaticChildren) { + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) { + validateChildKeys(children[i], type); + } + + if (Object.freeze) { + Object.freeze(children); + } + } else { + error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); + } + } else { + validateChildKeys(children, type); + } + } + } + + if (type === exports.Fragment) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; + } +} // These two functions exist to still get child warnings in dev +// even with the prod transform. This means that jsxDEV is purely +// opt-in behavior for better messages but that we won't stop +// giving you warnings if you use production apis. + +function jsxWithValidationStatic(type, props, key) { + { + return jsxWithValidation(type, props, key, true); + } +} +function jsxWithValidationDynamic(type, props, key) { + { + return jsxWithValidation(type, props, key, false); + } +} + +var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children. +// for now we can ship identical prod functions + +var jsxs = jsxWithValidationStatic ; + +exports.jsx = jsx; +exports.jsxs = jsxs; + })(); +} + + +/***/ }), + +/***/ "./node_modules/react/jsx-runtime.js": +/*!*******************************************!*\ + !*** ./node_modules/react/jsx-runtime.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +if (false) {} else { + module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ "./node_modules/react/cjs/react-jsx-runtime.development.js"); +} + + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "React" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["React"]; + +/***/ }), + +/***/ "react-dom": +/*!***************************!*\ + !*** external "ReactDOM" ***! + \***************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["ReactDOM"]; + +/***/ }), + +/***/ "jquery": +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["jQuery"]; + +/***/ }), + +/***/ "@wordpress/i18n": +/*!******************************!*\ + !*** external ["wp","i18n"] ***! + \******************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["wp"]["i18n"]; + +/***/ }), + +/***/ "./node_modules/@linaria/react/dist/index.mjs": +/*!****************************************************!*\ + !*** ./node_modules/@linaria/react/dist/index.mjs ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "styled": () => (/* binding */ styled_default) +/* harmony export */ }); +/* harmony import */ var _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/is-prop-valid */ "./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js"); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); +/* harmony import */ var _linaria_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @linaria/core */ "./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs"); +// src/styled.ts + + + +var isCapital = (ch) => ch.toUpperCase() === ch; +var filterKey = (keys) => (key) => keys.indexOf(key) === -1; +var omit = (obj, keys) => { + const res = {}; + Object.keys(obj).filter(filterKey(keys)).forEach((key) => { + res[key] = obj[key]; + }); + return res; +}; +function filterProps(asIs, props, omitKeys) { + const filteredProps = omit(props, omitKeys); + if (!asIs) { + const interopValidAttr = typeof _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"] === "function" ? { default: _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"] } : _emotion_is_prop_valid__WEBPACK_IMPORTED_MODULE_0__["default"]; + Object.keys(filteredProps).forEach((key) => { + if (!interopValidAttr.default(key)) { + delete filteredProps[key]; + } + }); + } + return filteredProps; +} +var warnIfInvalid = (value, componentName) => { + if (true) { + if (typeof value === "string" || typeof value === "number" && isFinite(value)) { + return; + } + const stringified = typeof value === "object" ? JSON.stringify(value) : String(value); + console.warn( + `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.` + ); + } +}; +function styled(tag) { + return (options) => { + if (true) { + if (Array.isArray(options)) { + throw new Error( + 'Using the "styled" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup' + ); + } + } + const render = (props, ref) => { + const { as: component = tag, class: className } = props; + const shouldKeepProps = options.propsAsIs === void 0 ? !(typeof component === "string" && component.indexOf("-") === -1 && !isCapital(component[0])) : options.propsAsIs; + const filteredProps = filterProps(shouldKeepProps, props, [ + "as", + "class" + ]); + filteredProps.ref = ref; + filteredProps.className = options.atomic ? (0,_linaria_core__WEBPACK_IMPORTED_MODULE_2__.cx)(options.class, filteredProps.className || className) : (0,_linaria_core__WEBPACK_IMPORTED_MODULE_2__.cx)(filteredProps.className || className, options.class); + const { vars } = options; + if (vars) { + const style = {}; + for (const name in vars) { + const variable = vars[name]; + const result = variable[0]; + const unit = variable[1] || ""; + const value = typeof result === "function" ? result(props) : result; + warnIfInvalid(value, options.name); + style[`--${name}`] = `${value}${unit}`; + } + const ownStyle = filteredProps.style || {}; + const keys = Object.keys(ownStyle); + if (keys.length > 0) { + keys.forEach((key) => { + style[key] = ownStyle[key]; + }); + } + filteredProps.style = style; + } + if (tag.__linaria && tag !== component) { + filteredProps.as = component; + return react__WEBPACK_IMPORTED_MODULE_1__.createElement(tag, filteredProps); + } + return react__WEBPACK_IMPORTED_MODULE_1__.createElement(component, filteredProps); + }; + const Result = react__WEBPACK_IMPORTED_MODULE_1__.forwardRef ? react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(render) : (props) => { + const rest = omit(props, ["innerRef"]); + return render(rest, props.innerRef); + }; + Result.displayName = options.name; + Result.__linaria = { + className: options.class, + extends: tag + }; + return Result; + }; +} +var styled_default = true ? new Proxy(styled, { + get(o, prop) { + return o(prop); + } +}) : 0; + +//# sourceMappingURL=index.mjs.map + +/***/ }), + +/***/ "./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs": +/*!*******************************************************************************!*\ + !*** ./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs ***! + \*******************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "css": () => (/* binding */ css_default), +/* harmony export */ "cx": () => (/* binding */ cx_default) +/* harmony export */ }); +// src/css.ts +var css = () => { + throw new Error( + 'Using the "css" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.' + ); +}; +var css_default = css; + +// src/cx.ts +var cx = function cx2() { + const presentClassNames = Array.prototype.slice.call(arguments).filter(Boolean); + const atomicClasses = {}; + const nonAtomicClasses = []; + presentClassNames.forEach((arg) => { + const individualClassNames = arg ? arg.split(" ") : []; + individualClassNames.forEach((className) => { + if (className.startsWith("atm_")) { + const [, keyHash] = className.split("_"); + atomicClasses[keyHash] = className; + } else { + nonAtomicClasses.push(className); + } + }); + }); + const result = []; + for (const keyHash in atomicClasses) { + if (Object.prototype.hasOwnProperty.call(atomicClasses, keyHash)) { + result.push(atomicClasses[keyHash]); + } + } + result.push(...nonAtomicClasses); + return result.join(" "); +}; +var cx_default = cx; + +//# sourceMappingURL=index.mjs.map + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!********************************!*\ + !*** ./scripts/entries/app.ts ***! + \********************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _utils_appUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/appUtils */ "./scripts/utils/appUtils.ts"); +/* harmony import */ var _iframe_renderIframeApp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../iframe/renderIframeApp */ "./scripts/iframe/renderIframeApp.tsx"); + + +(0,_utils_appUtils__WEBPACK_IMPORTED_MODULE_0__.initAppOnReady)(_iframe_renderIframeApp__WEBPACK_IMPORTED_MODULE_1__["default"]); +})(); + +/******/ })() +; +//# sourceMappingURL=leadin.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/leadin.js.map b/wp/wp-content/plugins/leadin/build/leadin.js.map new file mode 100644 index 00000000..2bf4b7cd --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/leadin.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leadin.js","mappings":"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iEAAe;;AAE9C,YAAY,mBAAO,CAAC,qDAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,2FAA+B;;AAEvD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,UAAU;AACzB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,0CAA0C;AAC1C,2CAA2C;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,MAAM;AACN,2EAA2E;AAC3E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACr4DA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAO,CAAC,qDAAS;;AAExC;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;AC9BA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA,iDAAiD;AACjD,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kCAAkC;AAClC;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChYA,YAAY,mBAAO,CAAC,6DAAiB;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD,KAAK;AAC1D,uDAAuD,KAAK;AAC5D;AACA,WAAW,aAAa,YAAY;AACpC;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,+DAA+D;AAC/D;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,kBAAkB;AACjC;AACA,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA,qEAAqE;AACrE,iEAAiE;AACjE;AACA;AACA,kCAAkC;AAClC,kCAAkC;AAClC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,SAAS;AACxB;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAA0C;AAClD,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,qEAAqE;AACrE,UAAU;AACV;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;AC9mBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB;;AAEpB;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb,IAAI,IAAqC;AACzC;AACA;;AAEA,YAAY,mBAAO,CAAC,oBAAO;AAC3B,cAAc,mBAAO,CAAC,4DAAe;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE,gBAAgB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,+FAA+F,eAAe;AAC9G;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK,GAAG;;AAER,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,4BAA4B;;AAE5B;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,uBAAuB;AACvB;AACA,SAAS;AACT,wBAAwB;AACxB;AACA,SAAS;AACT,wBAAwB;AACxB;AACA,SAAS;AACT,yBAAyB;AACzB;AACA,SAAS;AACT,yBAAyB;AACzB;AACA,SAAS;AACT,kCAAkC;AAClC;AACA,SAAS;AACT,4BAA4B;AAC5B;AACA,SAAS;AACT,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2DAA2D;;AAE3D;AACA;;AAEA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;;;AAGlB;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,2HAA2H;AAC3H;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA,oEAAoE;;AAEpE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,eAAe;AAC1B,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;;AAER;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA,oBAAoB;AACpB,2DAA2D,UAAU;AACrE,yBAAyB,UAAU;AACnC;AACA,aAAa,UAAU;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,YAAY,SAAS;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,GAAG;AACd;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,GAAG;AACd;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,iBAAiB;AACvC;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,4CAA4C;;AAE5C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;;;AAGA;AACA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA,0DAA0D;AAC1D;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC;AACtC;;AAEA;;AAEA,WAAW;AACX,YAAY;AACZ,GAAG;AACH;;;;;;;;;;;;ACpsCa;;AAEb,IAAI,KAAqC,EAAE,EAE1C,CAAC;AACF,EAAE,+IAAkE;AACpE;;;;;;;;;;;;ACNA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;ACAA;AAC+C;AACrB;AACS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,oCAAoC,8DAAS,oBAAoB,SAAS,8DAAS,GAAG,EAAE,8DAAS;AACjG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA,wCAAwC,YAAY,sBAAsB,cAAc;AACxF;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wCAAwC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,iDAAE,wDAAwD,iDAAE;AAC7G,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAK,QAAQ,MAAM,EAAE,KAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAmB;AAClC;AACA,aAAa,gDAAmB;AAChC;AACA,mBAAmB,6CAAgB,GAAG,6CAAgB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAqC;AAC1D;AACA;AACA;AACA,CAAC,IAAI,CAAM;AAGT;AACF;;;;;;;;;;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIE;AACF;;;;;;UCtCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;ACNA;AACA;AACA7B,+DAAc,CAACzE,+DAAD,CAAd,C","sources":["webpack://leadin/./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://leadin/./node_modules/@linaria/react/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://leadin/./scripts/api/wordpressApiClient.ts","webpack://leadin/./scripts/constants/leadinConfig.ts","webpack://leadin/./scripts/constants/selectors.ts","webpack://leadin/./scripts/iframe/IframeErrorPage.tsx","webpack://leadin/./scripts/iframe/constants.ts","webpack://leadin/./scripts/iframe/integratedMessages/core/CoreMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/forms/FormsMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/index.ts","webpack://leadin/./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/plugin/PluginMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts","webpack://leadin/./scripts/iframe/messageMiddleware.ts","webpack://leadin/./scripts/iframe/renderIframeApp.tsx","webpack://leadin/./scripts/iframe/useAppEmbedder.ts","webpack://leadin/./scripts/lib/Raven.ts","webpack://leadin/./scripts/utils/appUtils.ts","webpack://leadin/./scripts/utils/contentEmbedInstaller.ts","webpack://leadin/./scripts/utils/iframe.ts","webpack://leadin/./scripts/utils/queryParams.ts","webpack://leadin/./scripts/iframe/IframeErrorPage.tsx?1b3e","webpack://leadin/./node_modules/object-assign/index.js","webpack://leadin/./node_modules/raven-js/src/configError.js","webpack://leadin/./node_modules/raven-js/src/console.js","webpack://leadin/./node_modules/raven-js/src/raven.js","webpack://leadin/./node_modules/raven-js/src/singleton.js","webpack://leadin/./node_modules/raven-js/src/utils.js","webpack://leadin/./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack://leadin/./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack://leadin/./node_modules/react/cjs/react-jsx-runtime.development.js","webpack://leadin/./node_modules/react/jsx-runtime.js","webpack://leadin/external window \"React\"","webpack://leadin/external window \"ReactDOM\"","webpack://leadin/external window \"jQuery\"","webpack://leadin/external window [\"wp\",\"i18n\"]","webpack://leadin/./node_modules/@linaria/react/dist/index.mjs","webpack://leadin/./node_modules/@linaria/react/node_modules/@linaria/core/dist/index.mjs","webpack://leadin/webpack/bootstrap","webpack://leadin/webpack/runtime/compat get default export","webpack://leadin/webpack/runtime/define property getters","webpack://leadin/webpack/runtime/global","webpack://leadin/webpack/runtime/hasOwnProperty shorthand","webpack://leadin/webpack/runtime/make namespace object","webpack://leadin/./scripts/entries/app.ts"],"sourcesContent":["function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","import $ from 'jquery';\nimport Raven from '../lib/Raven';\nimport { restNonce, restUrl } from '../constants/leadinConfig';\nimport { addQueryObjectToUrl } from '../utils/queryParams';\nfunction makeRequest(method, path, data = {}, queryParams = {}) {\n // eslint-disable-next-line compat/compat\n const restApiUrl = new URL(`${restUrl}leadin/v1${path}`);\n addQueryObjectToUrl(restApiUrl, queryParams);\n return new Promise((resolve, reject) => {\n const payload = {\n url: restApiUrl.toString(),\n method,\n contentType: 'application/json',\n beforeSend: (xhr) => xhr.setRequestHeader('X-WP-Nonce', restNonce),\n success: resolve,\n error: (response) => {\n Raven.captureMessage(`HTTP Request to ${restApiUrl} failed with error ${response.status}: ${response.responseText}`, {\n fingerprint: [\n '{{ default }}',\n path,\n response.status,\n response.responseText,\n ],\n });\n reject(response);\n },\n };\n if (method !== 'get') {\n payload.data = JSON.stringify(data);\n }\n $.ajax(payload);\n });\n}\nexport function healthcheckRestApi() {\n return makeRequest('get', '/healthcheck');\n}\nexport function disableInternalTracking(value) {\n return makeRequest('put', '/internal-tracking', value ? '1' : '0');\n}\nexport function fetchDisableInternalTracking() {\n return makeRequest('get', '/internal-tracking').then(message => ({\n message,\n }));\n}\nexport function updateHublet(hublet) {\n return makeRequest('put', '/hublet', { hublet });\n}\nexport function skipReview() {\n return makeRequest('post', '/skip-review');\n}\nexport function trackConsent(canTrack) {\n return makeRequest('post', '/track-consent', { canTrack }).then(message => ({\n message,\n }));\n}\nexport function setBusinessUnitId(businessUnitId) {\n return makeRequest('put', '/business-unit', { businessUnitId });\n}\nexport function getBusinessUnitId() {\n return makeRequest('get', '/business-unit');\n}\n","const { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, locale, loginUrl, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, } = window.leadinConfig;\nexport { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, loginUrl, locale, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, };\n","export const domElements = {\n iframe: '#leadin-iframe',\n subMenu: '.toplevel_page_leadin > ul',\n subMenuLinks: '.toplevel_page_leadin > ul a',\n subMenuButtons: '.toplevel_page_leadin > ul > li',\n deactivatePluginButton: '[data-slug=\"leadin\"] .deactivate a',\n deactivateFeedbackForm: 'form.leadin-deactivate-form',\n deactivateFeedbackSubmit: 'button#leadin-feedback-submit',\n deactivateFeedbackSkip: 'button#leadin-feedback-skip',\n thickboxModalClose: '.leadin-modal-close',\n thickboxModalWindow: 'div#TB_window.thickbox-loading',\n thickboxModalContent: 'div#TB_ajaxContent.TB_modal',\n reviewBannerContainer: '#leadin-review-banner',\n reviewBannerLeaveReviewLink: 'a#leave-review-button',\n reviewBannerDismissButton: 'a#dismiss-review-banner-button',\n leadinIframeContainer: 'leadin-iframe-container',\n leadinIframe: 'leadin-iframe',\n leadinIframeFallbackContainer: 'leadin-iframe-fallback-container',\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { __ } from '@wordpress/i18n';\nimport { styled } from '@linaria/react';\nconst IframeErrorContainer = styled.div `\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-top: 120px;\n font-family: 'Lexend Deca', Helvetica, Arial, sans-serif;\n font-weight: 400;\n font-size: 14px;\n font-size: 0.875rem;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-smoothing: antialiased;\n line-height: 1.5rem;\n`;\nconst ErrorHeader = styled.h1 `\n text-shadow: 0 0 1px transparent;\n margin-bottom: 1.25rem;\n color: #33475b;\n font-size: 1.25rem;\n`;\nexport const IframeErrorPage = () => (_jsxs(IframeErrorContainer, { children: [_jsx(\"img\", { alt: \"Cannot find page\", width: \"175\", src: \"//static.hsappstatic.net/ui-images/static-1.14/optimized/errors/map.svg\" }), _jsx(ErrorHeader, { children: __('The HubSpot for WordPress plugin is not able to load pages', 'leadin') }), _jsx(\"p\", { children: __('Try disabling your browser extensions and ad blockers, then refresh the page', 'leadin') }), _jsx(\"p\", { children: __('Or open the HubSpot for WordPress plugin in a different browser', 'leadin') })] }));\n","export var App;\n(function (App) {\n App[App[\"Forms\"] = 0] = \"Forms\";\n App[App[\"LiveChat\"] = 1] = \"LiveChat\";\n App[App[\"Plugin\"] = 2] = \"Plugin\";\n App[App[\"PluginSettings\"] = 3] = \"PluginSettings\";\n App[App[\"Background\"] = 4] = \"Background\";\n})(App || (App = {}));\nexport const AppIframe = {\n [App.Forms]: 'integrated-form-app',\n [App.LiveChat]: 'integrated-livechat-app',\n [App.Plugin]: 'integrated-plugin-app',\n [App.PluginSettings]: 'integrated-plugin-app',\n [App.Background]: 'integrated-plugin-proxy',\n};\n","export const CoreMessages = {\n HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED',\n SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN',\n ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME',\n RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME',\n SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE',\n SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID',\n};\n","export const FormMessages = {\n CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION',\n};\n","export * from './core/CoreMessages';\nexport * from './forms/FormsMessages';\nexport * from './livechat/LiveChatMessages';\nexport * from './plugin/PluginMessages';\nexport * from './proxy/ProxyMessages';\n","export const LiveChatMessages = {\n CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION',\n};\n","export const PluginMessages = {\n PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION',\n PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG',\n TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT',\n InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST',\n InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE',\n InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR',\n InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST',\n InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR',\n BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST',\n BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE',\n BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR',\n BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST',\n BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR',\n SkipReviewRequest: 'SKIP_REVIEW_REQUEST',\n SkipReviewResponse: 'SKIP_REVIEW_RESPONSE',\n SkipReviewError: 'SKIP_REVIEW_ERROR',\n RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM',\n ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST',\n ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE',\n ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR',\n ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST',\n ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE',\n ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR',\n};\n","export const ProxyMessages = {\n FetchForms: 'FETCH_FORMS',\n FetchForm: 'FETCH_FORM',\n CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE',\n FetchAuth: 'FETCH_AUTH',\n FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS',\n FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION',\n FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER',\n ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR',\n TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER',\n TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE',\n TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED',\n TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER',\n TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE',\n TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER',\n TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION',\n TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED',\n TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION',\n};\n","import { PluginMessages } from '../iframe/integratedMessages';\nimport { fetchDisableInternalTracking, trackConsent, disableInternalTracking, getBusinessUnitId, setBusinessUnitId, skipReview, } from '../api/wordpressApiClient';\nimport { removeQueryParamFromLocation } from '../utils/queryParams';\nimport { startActivation, startInstall } from '../utils/contentEmbedInstaller';\nconst messageMapper = new Map([\n [\n PluginMessages.TrackConsent,\n (message) => {\n trackConsent(message.payload);\n },\n ],\n [\n PluginMessages.InternalTrackingChangeRequest,\n (message, embedder) => {\n disableInternalTracking(message.payload)\n .then(() => {\n embedder.postMessage({\n key: PluginMessages.InternalTrackingFetchResponse,\n payload: message.payload,\n });\n })\n .catch(payload => {\n embedder.postMessage({\n key: PluginMessages.InternalTrackingChangeError,\n payload,\n });\n });\n },\n ],\n [\n PluginMessages.InternalTrackingFetchRequest,\n (__message, embedder) => {\n fetchDisableInternalTracking()\n .then(({ message: payload }) => {\n embedder.postMessage({\n key: PluginMessages.InternalTrackingFetchResponse,\n payload,\n });\n })\n .catch(payload => {\n embedder.postMessage({\n key: PluginMessages.InternalTrackingFetchError,\n payload,\n });\n });\n },\n ],\n [\n PluginMessages.BusinessUnitFetchRequest,\n (__message, embedder) => {\n getBusinessUnitId()\n .then(payload => {\n embedder.postMessage({\n key: PluginMessages.BusinessUnitFetchResponse,\n payload,\n });\n })\n .catch(payload => {\n embedder.postMessage({\n key: PluginMessages.BusinessUnitFetchError,\n payload,\n });\n });\n },\n ],\n [\n PluginMessages.BusinessUnitChangeRequest,\n (message, embedder) => {\n setBusinessUnitId(message.payload)\n .then(payload => {\n embedder.postMessage({\n key: PluginMessages.BusinessUnitFetchResponse,\n payload,\n });\n })\n .catch(payload => {\n embedder.postMessage({\n key: PluginMessages.BusinessUnitChangeError,\n payload,\n });\n });\n },\n ],\n [\n PluginMessages.SkipReviewRequest,\n (__message, embedder) => {\n skipReview()\n .then(payload => {\n embedder.postMessage({\n key: PluginMessages.SkipReviewResponse,\n payload,\n });\n })\n .catch(payload => {\n embedder.postMessage({\n key: PluginMessages.SkipReviewError,\n payload,\n });\n });\n },\n ],\n [\n PluginMessages.RemoveParentQueryParam,\n (message) => {\n removeQueryParamFromLocation(message.payload);\n },\n ],\n [\n PluginMessages.ContentEmbedInstallRequest,\n (message, embedder) => {\n startInstall(message.payload.nonce)\n .then(payload => {\n embedder.postMessage({\n key: PluginMessages.ContentEmbedInstallResponse,\n payload: payload,\n });\n })\n .catch(payload => {\n embedder.postMessage({\n key: PluginMessages.ContentEmbedInstallError,\n payload,\n });\n });\n },\n ],\n [\n PluginMessages.ContentEmbedActivationRequest,\n (message, embedder) => {\n startActivation(message.payload.activateAjaxUrl)\n .then(payload => {\n embedder.postMessage({\n key: PluginMessages.ContentEmbedActivationResponse,\n payload: payload,\n });\n })\n .catch(payload => {\n embedder.postMessage({\n key: PluginMessages.ContentEmbedActivationError,\n payload,\n });\n });\n },\n ],\n]);\nexport const messageMiddleware = (embedder) => (message) => {\n const next = messageMapper.get(message.key);\n if (next) {\n next(message, embedder);\n }\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport { domElements } from '../constants/selectors';\nimport useAppEmbedder from './useAppEmbedder';\nimport { App } from './constants';\nimport { IframeErrorPage } from './IframeErrorPage';\nconst IntegratedIframePortal = (props) => {\n const container = document.getElementById(domElements.leadinIframeContainer);\n const iframeNotRendered = useAppEmbedder(props.app, props.createRoute, container);\n if (container && !iframeNotRendered) {\n return ReactDOM.createPortal(props.children, container);\n }\n return (_jsx(Fragment, { children: (!container || iframeNotRendered) && _jsx(IframeErrorPage, {}) }));\n};\nconst renderIframeApp = () => {\n const iframeFallbackContainer = document.getElementById(domElements.leadinIframeContainer);\n let app;\n const queryParams = new URLSearchParams(location.search);\n const page = queryParams.get('page');\n const createRoute = queryParams.get('leadin_route[0]') === 'create';\n switch (page) {\n case 'leadin_forms':\n app = App.Forms;\n break;\n case 'leadin_chatflows':\n app = App.LiveChat;\n break;\n case 'leadin_settings':\n app = App.PluginSettings;\n break;\n case 'leadin_user_guide':\n default:\n app = App.Plugin;\n break;\n }\n ReactDOM.render(_jsx(IntegratedIframePortal, { app: app, createRoute: createRoute }), iframeFallbackContainer);\n};\nexport default renderIframeApp;\n","import { useEffect } from 'react';\nimport Raven from '../lib/Raven';\nimport { accountName, adminUrl, connectionStatus, deviceId, hubspotBaseUrl, leadinQueryParams, locale, plugins, portalDomain, portalEmail, portalId, reviewSkippedDate, refreshToken, impactLink, theme, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, phpVersion, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, } from '../constants/leadinConfig';\nimport { App, AppIframe } from './constants';\nimport { messageMiddleware } from './messageMiddleware';\nimport { resizeWindow, useIframeNotRendered } from '../utils/iframe';\nconst getLeadinConfig = () => {\n const utm_query_params = Object.keys(leadinQueryParams)\n .filter(x => /^utm/.test(x))\n .reduce((p, c) => ({\n [c]: leadinQueryParams[c],\n ...p,\n }), {});\n return {\n accountName,\n admin: leadinQueryParams.admin,\n adminUrl,\n company: leadinQueryParams.company,\n connectionStatus,\n deviceId,\n email: leadinQueryParams.email,\n firstName: leadinQueryParams.firstName,\n irclickid: leadinQueryParams.irclickid,\n justConnected: leadinQueryParams.justConnected,\n lastName: leadinQueryParams.lastName,\n lastAuthorizeTime,\n lastDeauthorizeTime,\n lastDisconnectTime,\n leadinPluginVersion,\n mpid: leadinQueryParams.mpid,\n nonce: leadinQueryParams.nonce,\n phpVersion,\n plugins,\n portalDomain,\n portalEmail,\n portalId,\n reviewSkippedDate,\n theme,\n trackConsent: leadinQueryParams.trackConsent,\n websiteName: leadinQueryParams.websiteName,\n wpVersion,\n contentEmbed,\n requiresContentEmbedScope,\n refreshTokenError,\n ...utm_query_params,\n };\n};\nconst getAppOptions = (app, createRoute = false) => {\n const { IntegratedAppOptions, FormsAppOptions, LiveChatAppOptions, PluginAppOptions, } = window;\n let options;\n switch (app) {\n case App.Plugin:\n options = new PluginAppOptions().setLeadinConfig(getLeadinConfig());\n break;\n case App.PluginSettings:\n options = new PluginAppOptions()\n .setLeadinConfig(getLeadinConfig())\n .setPluginSettingsInit();\n break;\n case App.Forms:\n options = new FormsAppOptions();\n if (createRoute) {\n options = options.setCreateFormAppInit();\n }\n break;\n case App.LiveChat:\n options = new LiveChatAppOptions();\n if (createRoute) {\n options = options.setCreateLiveChatAppInit();\n }\n break;\n default:\n options = new IntegratedAppOptions();\n }\n return options;\n};\nexport default function useAppEmbedder(app, createRoute, container) {\n console.info('HubSpot plugin - starting app embedder for:', AppIframe[app], container);\n const iframeNotRendered = useIframeNotRendered(AppIframe[app]);\n useEffect(() => {\n const { IntegratedAppEmbedder } = window;\n if (IntegratedAppEmbedder) {\n const options = getAppOptions(app, createRoute)\n .setLocale(locale)\n .setDeviceId(deviceId)\n .setRefreshToken(refreshToken);\n const embedder = new IntegratedAppEmbedder(AppIframe[app], portalId, hubspotBaseUrl, resizeWindow, refreshToken ? '' : impactLink).setOptions(options);\n embedder.subscribe(messageMiddleware(embedder));\n embedder.attachTo(container, true);\n embedder.postStartAppMessage(); // lets the app know all all data has been passed to it\n window.embedder = embedder;\n }\n }, []);\n if (iframeNotRendered) {\n console.error('HubSpot plugin Iframe not rendered', {\n portalId,\n container,\n appName: AppIframe[app],\n hasIntegratedAppEmbedder: !!window.IntegratedAppEmbedder,\n });\n Raven.captureException(new Error('Leadin Iframe not rendered'), {\n fingerprint: ['USE_APP_EMBEDDER', 'IFRAME_SETUP_ERROR'],\n extra: {\n portalId,\n container,\n app,\n hubspotBaseUrl,\n impactLink,\n appName: AppIframe[app],\n hasRefreshToken: !!refreshToken,\n },\n });\n }\n return iframeNotRendered;\n}\n","import Raven from 'raven-js';\nimport { hubspotBaseUrl, phpVersion, wpVersion, leadinPluginVersion, portalId, plugins, } from '../constants/leadinConfig';\nexport function configureRaven() {\n if (hubspotBaseUrl.indexOf('app.hubspot.com') === -1) {\n return;\n }\n Raven.config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', {\n instrument: {\n tryCatch: false,\n },\n release: leadinPluginVersion,\n }).install();\n Raven.setTagsContext({\n v: leadinPluginVersion,\n php: phpVersion,\n wordpress: wpVersion,\n });\n Raven.setExtraContext({\n hub: portalId,\n plugins: Object.keys(plugins)\n .map(name => `${name}#${plugins[name]}`)\n .join(','),\n });\n}\nexport default Raven;\n","import $ from 'jquery';\nimport Raven, { configureRaven } from '../lib/Raven';\nexport function initApp(initFn) {\n configureRaven();\n Raven.context(initFn);\n}\nexport function initAppOnReady(initFn) {\n function main() {\n $(initFn);\n }\n initApp(main);\n}\n","export function startInstall(nonce) {\n const formData = new FormData();\n const ajaxUrl = window.ajaxurl;\n formData.append('_wpnonce', nonce);\n formData.append('action', 'content_embed_install');\n return fetch(ajaxUrl, {\n method: 'POST',\n body: formData,\n keepalive: true,\n }).then(res => res.json());\n}\nexport function startActivation(requestUrl) {\n return fetch(requestUrl, {\n method: 'POST',\n keepalive: true,\n }).then(res => res.json());\n}\n","import { useEffect, useState } from 'react';\nconst IFRAME_DISPLAY_TIMEOUT = 5000;\nexport function useIframeNotRendered(app) {\n const [iframeNotRendered, setIframeNotRendered] = useState(false);\n useEffect(() => {\n const timer = setTimeout(() => {\n const iframe = document.getElementById(app);\n if (!iframe) {\n setIframeNotRendered(true);\n }\n }, IFRAME_DISPLAY_TIMEOUT);\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, []);\n return iframeNotRendered;\n}\nexport const resizeWindow = () => {\n const adminMenuWrap = document.getElementById('adminmenuwrap');\n const sideMenuHeight = adminMenuWrap ? adminMenuWrap.offsetHeight : 0;\n const adminBar = document.getElementById('wpadminbar');\n const adminBarHeight = (adminBar && adminBar.offsetHeight) || 0;\n const offset = 4;\n if (window.innerHeight < sideMenuHeight) {\n return sideMenuHeight - offset;\n }\n else {\n return window.innerHeight - adminBarHeight - offset;\n }\n};\n","export function addQueryObjectToUrl(urlObject, queryParams) {\n Object.keys(queryParams).forEach(key => {\n urlObject.searchParams.append(key, queryParams[key]);\n });\n}\nexport function removeQueryParamFromLocation(key) {\n const location = new URL(window.location.href);\n location.searchParams.delete(key);\n window.history.replaceState(null, '', location.href);\n}\n","// extracted by mini-css-extract-plugin\nexport {};","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = '' + args.join(' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n collectWindowErrors: true,\n maxMessageLength: 0,\n\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.19.1',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped already\n // for both debugging and to prevent it to being wrapped twice\n wrapped.__raven__ = true;\n wrapped.__inner__ = func;\n\n return wrapped;\n },\n\n /*\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._restoreBuiltIns();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /*\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n // Cases for sending ex as a message, rather than an exception\n var isNotError = !isError(ex);\n var isNotErrorEvent = !isErrorEvent(ex);\n var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n return this.captureMessage(\n ex,\n objectMerge(\n {\n trimHeadFrames: 1,\n stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n },\n options\n )\n );\n }\n\n // Get actual Error from ErrorEvent\n if (isErrorEvent(ex)) ex = ex.error;\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n\n var data = objectMerge(\n {\n message: msg + '' // Make sure it's actually a string\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = stack.stack[1];\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n options = objectMerge(\n {\n // fingerprint on msg, not stack trace (legacy behavior, could be\n // revisited)\n fingerprint: msg,\n // since we know this is a synthetic trace, the top N-most frames\n // MUST be from Raven.js, so mark them as in_app later by setting\n // trimHeadFrames\n trimHeadFrames: (options.trimHeadFrames || 0) + 1\n },\n options\n );\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function(data) {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && 'fetch' in _window) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n return response;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n if (this._hasDocument) {\n if (_document.location && _document.location.href) {\n httpData.url = _document.location.href;\n }\n if (_document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n retry = request.getResponseHeader('Retry-After');\n retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n // If there are no tags/extra, strip the key from the payload alltogther.\n if (isEmptyObject(data.tags)) delete data.tags;\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n var url = opts.url;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n // NOTE: auth is intentionally sent as part of query string (NOT as custom\n // HTTP header) so as to avoid preflight CORS requests\n request.open('POST', url + '?' + urlencode(opts.auth));\n request.send(stringify(opts.data));\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","var _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) return {};\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isString: isString,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} message Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (ex && utils.isError(ex)) {\n // non-string `ex` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(ex);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var msg = message; // must be new var or will modify original `arguments`\n var groups;\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n msg = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: msg,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n // Used to additionally parse URL/line/column from eval frames\n geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n lines = ex.stack.split('\\n'),\n stack = [],\n submatch,\n parts,\n element,\n reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","/** @license React v17.0.2\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\nvar _assign = require('object-assign');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = 0xeac7;\nvar REACT_PORTAL_TYPE = 0xeaca;\nexports.Fragment = 0xeacb;\nvar REACT_STRICT_MODE_TYPE = 0xeacc;\nvar REACT_PROFILER_TYPE = 0xead2;\nvar REACT_PROVIDER_TYPE = 0xeacd;\nvar REACT_CONTEXT_TYPE = 0xeace;\nvar REACT_FORWARD_REF_TYPE = 0xead0;\nvar REACT_SUSPENSE_TYPE = 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = 0xead8;\nvar REACT_MEMO_TYPE = 0xead3;\nvar REACT_LAZY_TYPE = 0xead4;\nvar REACT_BLOCK_TYPE = 0xead9;\nvar REACT_SERVER_BLOCK_TYPE = 0xeada;\nvar REACT_FUNDAMENTAL_TYPE = 0xead5;\nvar REACT_SCOPE_TYPE = 0xead7;\nvar REACT_OPAQUE_ID_TYPE = 0xeae0;\nvar REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\nvar REACT_OFFSCREEN_TYPE = 0xeae2;\nvar REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\n\nif (typeof Symbol === 'function' && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor('react.element');\n REACT_PORTAL_TYPE = symbolFor('react.portal');\n exports.Fragment = symbolFor('react.fragment');\n REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');\n REACT_PROFILER_TYPE = symbolFor('react.profiler');\n REACT_PROVIDER_TYPE = symbolFor('react.provider');\n REACT_CONTEXT_TYPE = symbolFor('react.context');\n REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');\n REACT_SUSPENSE_TYPE = symbolFor('react.suspense');\n REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');\n REACT_MEMO_TYPE = symbolFor('react.memo');\n REACT_LAZY_TYPE = symbolFor('react.lazy');\n REACT_BLOCK_TYPE = symbolFor('react.block');\n REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');\n REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');\n REACT_SCOPE_TYPE = symbolFor('react.scope');\n REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');\n REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');\n REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');\n}\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case exports.Fragment:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentName(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: _assign({}, props, {\n value: prevLog\n }),\n info: _assign({}, props, {\n value: prevInfo\n }),\n warn: _assign({}, props, {\n value: prevWarn\n }),\n error: _assign({}, props, {\n value: prevError\n }),\n group: _assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: _assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: _assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at ');\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_BLOCK_TYPE:\n return describeFunctionComponentFrame(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie.
\n // or
). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n //
, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentName(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentName(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentName(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === exports.Fragment) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","module.exports = window[\"React\"];","module.exports = window[\"ReactDOM\"];","module.exports = window[\"jQuery\"];","module.exports = window[\"wp\"][\"i18n\"];","// src/styled.ts\nimport validAttr from \"@emotion/is-prop-valid\";\nimport React from \"react\";\nimport { cx } from \"@linaria/core\";\nvar isCapital = (ch) => ch.toUpperCase() === ch;\nvar filterKey = (keys) => (key) => keys.indexOf(key) === -1;\nvar omit = (obj, keys) => {\n const res = {};\n Object.keys(obj).filter(filterKey(keys)).forEach((key) => {\n res[key] = obj[key];\n });\n return res;\n};\nfunction filterProps(asIs, props, omitKeys) {\n const filteredProps = omit(props, omitKeys);\n if (!asIs) {\n const interopValidAttr = typeof validAttr === \"function\" ? { default: validAttr } : validAttr;\n Object.keys(filteredProps).forEach((key) => {\n if (!interopValidAttr.default(key)) {\n delete filteredProps[key];\n }\n });\n }\n return filteredProps;\n}\nvar warnIfInvalid = (value, componentName) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof value === \"string\" || typeof value === \"number\" && isFinite(value)) {\n return;\n }\n const stringified = typeof value === \"object\" ? JSON.stringify(value) : String(value);\n console.warn(\n `An interpolation evaluated to '${stringified}' in the component '${componentName}', which is probably a mistake. You should explicitly cast or transform the value to a string.`\n );\n }\n};\nfunction styled(tag) {\n return (options) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (Array.isArray(options)) {\n throw new Error(\n 'Using the \"styled\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly. See https://github.com/callstack/linaria#setup'\n );\n }\n }\n const render = (props, ref) => {\n const { as: component = tag, class: className } = props;\n const shouldKeepProps = options.propsAsIs === void 0 ? !(typeof component === \"string\" && component.indexOf(\"-\") === -1 && !isCapital(component[0])) : options.propsAsIs;\n const filteredProps = filterProps(shouldKeepProps, props, [\n \"as\",\n \"class\"\n ]);\n filteredProps.ref = ref;\n filteredProps.className = options.atomic ? cx(options.class, filteredProps.className || className) : cx(filteredProps.className || className, options.class);\n const { vars } = options;\n if (vars) {\n const style = {};\n for (const name in vars) {\n const variable = vars[name];\n const result = variable[0];\n const unit = variable[1] || \"\";\n const value = typeof result === \"function\" ? result(props) : result;\n warnIfInvalid(value, options.name);\n style[`--${name}`] = `${value}${unit}`;\n }\n const ownStyle = filteredProps.style || {};\n const keys = Object.keys(ownStyle);\n if (keys.length > 0) {\n keys.forEach((key) => {\n style[key] = ownStyle[key];\n });\n }\n filteredProps.style = style;\n }\n if (tag.__linaria && tag !== component) {\n filteredProps.as = component;\n return React.createElement(tag, filteredProps);\n }\n return React.createElement(component, filteredProps);\n };\n const Result = React.forwardRef ? React.forwardRef(render) : (props) => {\n const rest = omit(props, [\"innerRef\"]);\n return render(rest, props.innerRef);\n };\n Result.displayName = options.name;\n Result.__linaria = {\n className: options.class,\n extends: tag\n };\n return Result;\n };\n}\nvar styled_default = process.env.NODE_ENV !== \"production\" ? new Proxy(styled, {\n get(o, prop) {\n return o(prop);\n }\n}) : styled;\nexport {\n styled_default as styled\n};\n//# sourceMappingURL=index.mjs.map","// src/css.ts\nvar css = () => {\n throw new Error(\n 'Using the \"css\" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.'\n );\n};\nvar css_default = css;\n\n// src/cx.ts\nvar cx = function cx2() {\n const presentClassNames = Array.prototype.slice.call(arguments).filter(Boolean);\n const atomicClasses = {};\n const nonAtomicClasses = [];\n presentClassNames.forEach((arg) => {\n const individualClassNames = arg ? arg.split(\" \") : [];\n individualClassNames.forEach((className) => {\n if (className.startsWith(\"atm_\")) {\n const [, keyHash] = className.split(\"_\");\n atomicClasses[keyHash] = className;\n } else {\n nonAtomicClasses.push(className);\n }\n });\n });\n const result = [];\n for (const keyHash in atomicClasses) {\n if (Object.prototype.hasOwnProperty.call(atomicClasses, keyHash)) {\n result.push(atomicClasses[keyHash]);\n }\n }\n result.push(...nonAtomicClasses);\n return result.join(\" \");\n};\nvar cx_default = cx;\nexport {\n css_default as css,\n cx_default as cx\n};\n//# sourceMappingURL=index.mjs.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { initAppOnReady } from '../utils/appUtils';\nimport renderIframeApp from '../iframe/renderIframeApp';\ninitAppOnReady(renderIframeApp);\n"],"names":["$","Raven","restNonce","restUrl","addQueryObjectToUrl","makeRequest","method","path","data","queryParams","restApiUrl","URL","Promise","resolve","reject","payload","url","toString","contentType","beforeSend","xhr","setRequestHeader","success","error","response","captureMessage","status","responseText","fingerprint","JSON","stringify","ajax","healthcheckRestApi","disableInternalTracking","value","fetchDisableInternalTracking","then","message","updateHublet","hublet","skipReview","trackConsent","canTrack","setBusinessUnitId","businessUnitId","getBusinessUnitId","window","leadinConfig","accountName","adminUrl","activationTime","connectionStatus","deviceId","didDisconnect","env","formsScript","meetingsScript","formsScriptPayload","hubspotBaseUrl","hubspotNonce","iframeUrl","impactLink","lastAuthorizeTime","lastDeauthorizeTime","lastDisconnectTime","leadinPluginVersion","leadinQueryParams","locale","loginUrl","phpVersion","pluginPath","plugins","portalDomain","portalEmail","portalId","redirectNonce","refreshToken","reviewSkippedDate","theme","wpVersion","contentEmbed","requiresContentEmbedScope","refreshTokenError","domElements","iframe","subMenu","subMenuLinks","subMenuButtons","deactivatePluginButton","deactivateFeedbackForm","deactivateFeedbackSubmit","deactivateFeedbackSkip","thickboxModalClose","thickboxModalWindow","thickboxModalContent","reviewBannerContainer","reviewBannerLeaveReviewLink","reviewBannerDismissButton","leadinIframeContainer","leadinIframe","leadinIframeFallbackContainer","jsx","_jsx","jsxs","_jsxs","__","styled","IframeErrorContainer","name","propsAsIs","ErrorHeader","IframeErrorPage","children","alt","width","src","App","AppIframe","Forms","LiveChat","Plugin","PluginSettings","Background","CoreMessages","HandshakeReceive","SendRefreshToken","ReloadParentFrame","RedirectParentFrame","SendLocale","SendDeviceId","FormMessages","CreateFormAppNavigation","LiveChatMessages","CreateLiveChatAppNavigation","PluginMessages","PluginSettingsNavigation","PluginLeadinConfig","TrackConsent","InternalTrackingFetchRequest","InternalTrackingFetchResponse","InternalTrackingFetchError","InternalTrackingChangeRequest","InternalTrackingChangeError","BusinessUnitFetchRequest","BusinessUnitFetchResponse","BusinessUnitFetchError","BusinessUnitChangeRequest","BusinessUnitChangeError","SkipReviewRequest","SkipReviewResponse","SkipReviewError","RemoveParentQueryParam","ContentEmbedInstallRequest","ContentEmbedInstallResponse","ContentEmbedInstallError","ContentEmbedActivationRequest","ContentEmbedActivationResponse","ContentEmbedActivationError","ProxyMessages","FetchForms","FetchForm","CreateFormFromTemplate","FetchAuth","FetchMeetingsAndUsers","FetchContactsCreateSinceActivation","FetchOrCreateMeetingUser","ConnectMeetingsCalendar","TrackFormPreviewRender","TrackFormCreatedFromTemplate","TrackFormCreationFailed","TrackMeetingPreviewRender","TrackSidebarMetaChange","TrackReviewBannerRender","TrackReviewBannerInteraction","TrackReviewBannerDismissed","TrackPluginDeactivation","removeQueryParamFromLocation","startActivation","startInstall","messageMapper","Map","embedder","postMessage","key","__message","nonce","activateAjaxUrl","messageMiddleware","next","get","Fragment","ReactDOM","useAppEmbedder","IntegratedIframePortal","props","container","document","getElementById","iframeNotRendered","app","createRoute","createPortal","renderIframeApp","iframeFallbackContainer","URLSearchParams","location","search","page","render","useEffect","resizeWindow","useIframeNotRendered","getLeadinConfig","utm_query_params","Object","keys","filter","x","test","reduce","p","c","admin","company","email","firstName","irclickid","justConnected","lastName","mpid","websiteName","getAppOptions","IntegratedAppOptions","FormsAppOptions","LiveChatAppOptions","PluginAppOptions","options","setLeadinConfig","setPluginSettingsInit","setCreateFormAppInit","setCreateLiveChatAppInit","console","info","IntegratedAppEmbedder","setLocale","setDeviceId","setRefreshToken","setOptions","subscribe","attachTo","postStartAppMessage","appName","hasIntegratedAppEmbedder","captureException","Error","extra","hasRefreshToken","configureRaven","indexOf","config","instrument","tryCatch","release","install","setTagsContext","v","php","wordpress","setExtraContext","hub","map","join","initApp","initFn","context","initAppOnReady","main","formData","FormData","ajaxUrl","ajaxurl","append","fetch","body","keepalive","res","json","requestUrl","useState","IFRAME_DISPLAY_TIMEOUT","setIframeNotRendered","timer","setTimeout","clearTimeout","adminMenuWrap","sideMenuHeight","offsetHeight","adminBar","adminBarHeight","offset","innerHeight","urlObject","forEach","searchParams","href","history","replaceState"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/reviewBanner.asset.php b/wp/wp-content/plugins/leadin/build/reviewBanner.asset.php new file mode 100644 index 00000000..c2696477 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/reviewBanner.asset.php @@ -0,0 +1 @@ + array('jquery'), 'version' => '060055fdaca4e5c8b67b'); diff --git a/wp/wp-content/plugins/leadin/build/reviewBanner.js b/wp/wp-content/plugins/leadin/build/reviewBanner.js new file mode 100644 index 00000000..6ad96e11 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/reviewBanner.js @@ -0,0 +1,3729 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./scripts/constants/leadinConfig.ts": +/*!*******************************************!*\ + !*** ./scripts/constants/leadinConfig.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "accountName": () => (/* binding */ accountName), +/* harmony export */ "activationTime": () => (/* binding */ activationTime), +/* harmony export */ "adminUrl": () => (/* binding */ adminUrl), +/* harmony export */ "connectionStatus": () => (/* binding */ connectionStatus), +/* harmony export */ "contentEmbed": () => (/* binding */ contentEmbed), +/* harmony export */ "deviceId": () => (/* binding */ deviceId), +/* harmony export */ "didDisconnect": () => (/* binding */ didDisconnect), +/* harmony export */ "env": () => (/* binding */ env), +/* harmony export */ "formsScript": () => (/* binding */ formsScript), +/* harmony export */ "formsScriptPayload": () => (/* binding */ formsScriptPayload), +/* harmony export */ "hublet": () => (/* binding */ hublet), +/* harmony export */ "hubspotBaseUrl": () => (/* binding */ hubspotBaseUrl), +/* harmony export */ "hubspotNonce": () => (/* binding */ hubspotNonce), +/* harmony export */ "iframeUrl": () => (/* binding */ iframeUrl), +/* harmony export */ "impactLink": () => (/* binding */ impactLink), +/* harmony export */ "lastAuthorizeTime": () => (/* binding */ lastAuthorizeTime), +/* harmony export */ "lastDeauthorizeTime": () => (/* binding */ lastDeauthorizeTime), +/* harmony export */ "lastDisconnectTime": () => (/* binding */ lastDisconnectTime), +/* harmony export */ "leadinPluginVersion": () => (/* binding */ leadinPluginVersion), +/* harmony export */ "leadinQueryParams": () => (/* binding */ leadinQueryParams), +/* harmony export */ "locale": () => (/* binding */ locale), +/* harmony export */ "loginUrl": () => (/* binding */ loginUrl), +/* harmony export */ "meetingsScript": () => (/* binding */ meetingsScript), +/* harmony export */ "phpVersion": () => (/* binding */ phpVersion), +/* harmony export */ "pluginPath": () => (/* binding */ pluginPath), +/* harmony export */ "plugins": () => (/* binding */ plugins), +/* harmony export */ "portalDomain": () => (/* binding */ portalDomain), +/* harmony export */ "portalEmail": () => (/* binding */ portalEmail), +/* harmony export */ "portalId": () => (/* binding */ portalId), +/* harmony export */ "redirectNonce": () => (/* binding */ redirectNonce), +/* harmony export */ "refreshToken": () => (/* binding */ refreshToken), +/* harmony export */ "refreshTokenError": () => (/* binding */ refreshTokenError), +/* harmony export */ "requiresContentEmbedScope": () => (/* binding */ requiresContentEmbedScope), +/* harmony export */ "restNonce": () => (/* binding */ restNonce), +/* harmony export */ "restUrl": () => (/* binding */ restUrl), +/* harmony export */ "reviewSkippedDate": () => (/* binding */ reviewSkippedDate), +/* harmony export */ "theme": () => (/* binding */ theme), +/* harmony export */ "trackConsent": () => (/* binding */ trackConsent), +/* harmony export */ "wpVersion": () => (/* binding */ wpVersion) +/* harmony export */ }); +var _window$leadinConfig = window.leadinConfig, + accountName = _window$leadinConfig.accountName, + adminUrl = _window$leadinConfig.adminUrl, + activationTime = _window$leadinConfig.activationTime, + connectionStatus = _window$leadinConfig.connectionStatus, + deviceId = _window$leadinConfig.deviceId, + didDisconnect = _window$leadinConfig.didDisconnect, + env = _window$leadinConfig.env, + formsScript = _window$leadinConfig.formsScript, + meetingsScript = _window$leadinConfig.meetingsScript, + formsScriptPayload = _window$leadinConfig.formsScriptPayload, + hublet = _window$leadinConfig.hublet, + hubspotBaseUrl = _window$leadinConfig.hubspotBaseUrl, + hubspotNonce = _window$leadinConfig.hubspotNonce, + iframeUrl = _window$leadinConfig.iframeUrl, + impactLink = _window$leadinConfig.impactLink, + lastAuthorizeTime = _window$leadinConfig.lastAuthorizeTime, + lastDeauthorizeTime = _window$leadinConfig.lastDeauthorizeTime, + lastDisconnectTime = _window$leadinConfig.lastDisconnectTime, + leadinPluginVersion = _window$leadinConfig.leadinPluginVersion, + leadinQueryParams = _window$leadinConfig.leadinQueryParams, + locale = _window$leadinConfig.locale, + loginUrl = _window$leadinConfig.loginUrl, + phpVersion = _window$leadinConfig.phpVersion, + pluginPath = _window$leadinConfig.pluginPath, + plugins = _window$leadinConfig.plugins, + portalDomain = _window$leadinConfig.portalDomain, + portalEmail = _window$leadinConfig.portalEmail, + portalId = _window$leadinConfig.portalId, + redirectNonce = _window$leadinConfig.redirectNonce, + restNonce = _window$leadinConfig.restNonce, + restUrl = _window$leadinConfig.restUrl, + refreshToken = _window$leadinConfig.refreshToken, + reviewSkippedDate = _window$leadinConfig.reviewSkippedDate, + theme = _window$leadinConfig.theme, + trackConsent = _window$leadinConfig.trackConsent, + wpVersion = _window$leadinConfig.wpVersion, + contentEmbed = _window$leadinConfig.contentEmbed, + requiresContentEmbedScope = _window$leadinConfig.requiresContentEmbedScope, + refreshTokenError = _window$leadinConfig.refreshTokenError; + + +/***/ }), + +/***/ "./scripts/constants/selectors.ts": +/*!****************************************!*\ + !*** ./scripts/constants/selectors.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "domElements": () => (/* binding */ domElements) +/* harmony export */ }); +var domElements = { + iframe: '#leadin-iframe', + subMenu: '.toplevel_page_leadin > ul', + subMenuLinks: '.toplevel_page_leadin > ul a', + subMenuButtons: '.toplevel_page_leadin > ul > li', + deactivatePluginButton: '[data-slug="leadin"] .deactivate a', + deactivateFeedbackForm: 'form.leadin-deactivate-form', + deactivateFeedbackSubmit: 'button#leadin-feedback-submit', + deactivateFeedbackSkip: 'button#leadin-feedback-skip', + thickboxModalClose: '.leadin-modal-close', + thickboxModalWindow: 'div#TB_window.thickbox-loading', + thickboxModalContent: 'div#TB_ajaxContent.TB_modal', + reviewBannerContainer: '#leadin-review-banner', + reviewBannerLeaveReviewLink: 'a#leave-review-button', + reviewBannerDismissButton: 'a#dismiss-review-banner-button', + leadinIframeContainer: 'leadin-iframe-container', + leadinIframe: 'leadin-iframe', + leadinIframeFallbackContainer: 'leadin-iframe-fallback-container' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/core/CoreMessages.ts": +/*!****************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/core/CoreMessages.ts ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* binding */ CoreMessages) +/* harmony export */ }); +var CoreMessages = { + HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED', + SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN', + ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME', + RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME', + SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE', + SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/forms/FormsMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "FormMessages": () => (/* binding */ FormMessages) +/* harmony export */ }); +var FormMessages = { + CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/index.ts": +/*!****************************************************!*\ + !*** ./scripts/iframe/integratedMessages/index.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CoreMessages": () => (/* reexport safe */ _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__.CoreMessages), +/* harmony export */ "FormMessages": () => (/* reexport safe */ _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__.FormMessages), +/* harmony export */ "LiveChatMessages": () => (/* reexport safe */ _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__.LiveChatMessages), +/* harmony export */ "PluginMessages": () => (/* reexport safe */ _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__.PluginMessages), +/* harmony export */ "ProxyMessages": () => (/* reexport safe */ _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages) +/* harmony export */ }); +/* harmony import */ var _core_CoreMessages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/CoreMessages */ "./scripts/iframe/integratedMessages/core/CoreMessages.ts"); +/* harmony import */ var _forms_FormsMessages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./forms/FormsMessages */ "./scripts/iframe/integratedMessages/forms/FormsMessages.ts"); +/* harmony import */ var _livechat_LiveChatMessages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./livechat/LiveChatMessages */ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts"); +/* harmony import */ var _plugin_PluginMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./plugin/PluginMessages */ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts"); +/* harmony import */ var _proxy_ProxyMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./proxy/ProxyMessages */ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts"); + + + + + + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts": +/*!************************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LiveChatMessages": () => (/* binding */ LiveChatMessages) +/* harmony export */ }); +var LiveChatMessages = { + CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/plugin/PluginMessages.ts": +/*!********************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/plugin/PluginMessages.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PluginMessages": () => (/* binding */ PluginMessages) +/* harmony export */ }); +var PluginMessages = { + PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION', + PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG', + TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT', + InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST', + InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE', + InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR', + InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST', + InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR', + BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST', + BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE', + BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR', + BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST', + BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR', + SkipReviewRequest: 'SKIP_REVIEW_REQUEST', + SkipReviewResponse: 'SKIP_REVIEW_RESPONSE', + SkipReviewError: 'SKIP_REVIEW_ERROR', + RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM', + ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST', + ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE', + ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR', + ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST', + ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE', + ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR' +}; + +/***/ }), + +/***/ "./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts": +/*!******************************************************************!*\ + !*** ./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ProxyMessages": () => (/* binding */ ProxyMessages) +/* harmony export */ }); +var ProxyMessages = { + FetchForms: 'FETCH_FORMS', + FetchForm: 'FETCH_FORM', + CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE', + FetchAuth: 'FETCH_AUTH', + FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS', + FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION', + FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER', + ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR', + TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER', + TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE', + TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED', + TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER', + TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE', + TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER', + TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION', + TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED', + TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION' +}; + +/***/ }), + +/***/ "./scripts/lib/Raven.ts": +/*!******************************!*\ + !*** ./scripts/lib/Raven.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "configureRaven": () => (/* binding */ configureRaven), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! raven-js */ "./node_modules/raven-js/src/singleton.js"); +/* harmony import */ var raven_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(raven_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); + + +function configureRaven() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.hubspotBaseUrl.indexOf('app.hubspot.com') === -1) { + return; + } + + raven_js__WEBPACK_IMPORTED_MODULE_0___default().config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', { + instrument: { + tryCatch: false + }, + release: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion + }).install(); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setTagsContext({ + v: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.leadinPluginVersion, + php: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.phpVersion, + wordpress: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.wpVersion + }); + raven_js__WEBPACK_IMPORTED_MODULE_0___default().setExtraContext({ + hub: _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.portalId, + plugins: Object.keys(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins).map(function (name) { + return "".concat(name, "#").concat(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_1__.plugins[name]); + }).join(',') + }); +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((raven_js__WEBPACK_IMPORTED_MODULE_0___default())); + +/***/ }), + +/***/ "./scripts/utils/appUtils.ts": +/*!***********************************!*\ + !*** ./scripts/utils/appUtils.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "initApp": () => (/* binding */ initApp), +/* harmony export */ "initAppOnReady": () => (/* binding */ initAppOnReady) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _lib_Raven__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/Raven */ "./scripts/lib/Raven.ts"); + + +function initApp(initFn) { + (0,_lib_Raven__WEBPACK_IMPORTED_MODULE_1__.configureRaven)(); + _lib_Raven__WEBPACK_IMPORTED_MODULE_1__["default"].context(initFn); +} +function initAppOnReady(initFn) { + function main() { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(initFn); + } + + initApp(main); +} + +/***/ }), + +/***/ "./scripts/utils/backgroundAppUtils.ts": +/*!*********************************************!*\ + !*** ./scripts/utils/backgroundAppUtils.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "getOrCreateBackgroundApp": () => (/* binding */ getOrCreateBackgroundApp), +/* harmony export */ "initBackgroundApp": () => (/* binding */ initBackgroundApp) +/* harmony export */ }); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _appUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./appUtils */ "./scripts/utils/appUtils.ts"); + + +function initBackgroundApp(initFn) { + function main() { + if (Array.isArray(initFn)) { + initFn.forEach(function (callback) { + return callback(); + }); + } else { + initFn(); + } + } + + (0,_appUtils__WEBPACK_IMPORTED_MODULE_1__.initApp)(main); +} +var getOrCreateBackgroundApp = function getOrCreateBackgroundApp(refreshToken) { + if (window.LeadinBackgroundApp) { + return window.LeadinBackgroundApp; + } + + var _window = window, + IntegratedAppEmbedder = _window.IntegratedAppEmbedder, + IntegratedAppOptions = _window.IntegratedAppOptions; + var options = new IntegratedAppOptions().setLocale(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.locale).setDeviceId(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.deviceId).setRefreshToken(refreshToken); + var embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.portalId, _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_0__.hubspotBaseUrl, function () {}).setOptions(options); + embedder.attachTo(document.body, false); + embedder.postStartAppMessage(); // lets the app know all all data has been passed to it + + window.LeadinBackgroundApp = embedder; + return window.LeadinBackgroundApp; +}; + +/***/ }), + +/***/ "./node_modules/raven-js/src/configError.js": +/*!**************************************************!*\ + !*** ./node_modules/raven-js/src/configError.js ***! + \**************************************************/ +/***/ ((module) => { + +function RavenConfigError(message) { + this.name = 'RavenConfigError'; + this.message = message; +} +RavenConfigError.prototype = new Error(); +RavenConfigError.prototype.constructor = RavenConfigError; + +module.exports = RavenConfigError; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/console.js": +/*!**********************************************!*\ + !*** ./node_modules/raven-js/src/console.js ***! + \**********************************************/ +/***/ ((module) => { + +var wrapMethod = function(console, level, callback) { + var originalConsoleLevel = console[level]; + var originalConsole = console; + + if (!(level in console)) { + return; + } + + var sentryLevel = level === 'warn' ? 'warning' : level; + + console[level] = function() { + var args = [].slice.call(arguments); + + var msg = '' + args.join(' '); + var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}}; + + if (level === 'assert') { + if (args[0] === false) { + // Default browsers message + msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert'); + data.extra.arguments = args.slice(1); + callback && callback(msg, data); + } + } else { + callback && callback(msg, data); + } + + // this fails for some browsers. :( + if (originalConsoleLevel) { + // IE9 doesn't allow calling apply on console functions directly + // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193 + Function.prototype.apply.call(originalConsoleLevel, originalConsole, args); + } + }; +}; + +module.exports = { + wrapMethod: wrapMethod +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/raven.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/raven.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/*global XDomainRequest:false */ + +var TraceKit = __webpack_require__(/*! ../vendor/TraceKit/tracekit */ "./node_modules/raven-js/vendor/TraceKit/tracekit.js"); +var stringify = __webpack_require__(/*! ../vendor/json-stringify-safe/stringify */ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js"); +var RavenConfigError = __webpack_require__(/*! ./configError */ "./node_modules/raven-js/src/configError.js"); + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/raven-js/src/utils.js"); +var isError = utils.isError; +var isObject = utils.isObject; +var isObject = utils.isObject; +var isErrorEvent = utils.isErrorEvent; +var isUndefined = utils.isUndefined; +var isFunction = utils.isFunction; +var isString = utils.isString; +var isEmptyObject = utils.isEmptyObject; +var each = utils.each; +var objectMerge = utils.objectMerge; +var truncate = utils.truncate; +var objectFrozen = utils.objectFrozen; +var hasKey = utils.hasKey; +var joinRegExp = utils.joinRegExp; +var urlencode = utils.urlencode; +var uuid4 = utils.uuid4; +var htmlTreeAsString = utils.htmlTreeAsString; +var isSameException = utils.isSameException; +var isSameStacktrace = utils.isSameStacktrace; +var parseUrl = utils.parseUrl; +var fill = utils.fill; + +var wrapConsoleMethod = (__webpack_require__(/*! ./console */ "./node_modules/raven-js/src/console.js").wrapMethod); + +var dsnKeys = 'source protocol user pass host port path'.split(' '), + dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/; + +function now() { + return +new Date(); +} + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _document = _window.document; +var _navigator = _window.navigator; + +function keepOriginalCallback(original, callback) { + return isFunction(callback) + ? function(data) { + return callback(data, original); + } + : callback; +} + +// First, check for JSON support +// If there is no JSON, we no-op the core features of Raven +// since JSON is required to encode the payload +function Raven() { + this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify); + // Raven can run in contexts where there's no document (react-native) + this._hasDocument = !isUndefined(_document); + this._hasNavigator = !isUndefined(_navigator); + this._lastCapturedException = null; + this._lastData = null; + this._lastEventId = null; + this._globalServer = null; + this._globalKey = null; + this._globalProject = null; + this._globalContext = {}; + this._globalOptions = { + logger: 'javascript', + ignoreErrors: [], + ignoreUrls: [], + whitelistUrls: [], + includePaths: [], + collectWindowErrors: true, + maxMessageLength: 0, + + // By default, truncates URL values to 250 chars + maxUrlLength: 250, + stackTraceLimit: 50, + autoBreadcrumbs: true, + instrument: true, + sampleRate: 1 + }; + this._ignoreOnError = 0; + this._isRavenInstalled = false; + this._originalErrorStackTraceLimit = Error.stackTraceLimit; + // capture references to window.console *and* all its methods first + // before the console plugin has a chance to monkey patch + this._originalConsole = _window.console || {}; + this._originalConsoleMethods = {}; + this._plugins = []; + this._startTime = now(); + this._wrappedBuiltIns = []; + this._breadcrumbs = []; + this._lastCapturedEvent = null; + this._keypressTimeout; + this._location = _window.location; + this._lastHref = this._location && this._location.href; + this._resetBackoff(); + + // eslint-disable-next-line guard-for-in + for (var method in this._originalConsole) { + this._originalConsoleMethods[method] = this._originalConsole[method]; + } +} + +/* + * The core Raven singleton + * + * @this {Raven} + */ + +Raven.prototype = { + // Hardcode version string so that raven source can be loaded directly via + // webpack (using a build step causes webpack #1617). Grunt verifies that + // this value matches package.json during build. + // See: https://github.com/getsentry/raven-js/issues/465 + VERSION: '3.19.1', + + debug: false, + + TraceKit: TraceKit, // alias to TraceKit + + /* + * Configure Raven with a DSN and extra options + * + * @param {string} dsn The public Sentry DSN + * @param {object} options Set of global options [optional] + * @return {Raven} + */ + config: function(dsn, options) { + var self = this; + + if (self._globalServer) { + this._logDebug('error', 'Error: Raven has already been configured'); + return self; + } + if (!dsn) return self; + + var globalOptions = self._globalOptions; + + // merge in options + if (options) { + each(options, function(key, value) { + // tags and extra are special and need to be put into context + if (key === 'tags' || key === 'extra' || key === 'user') { + self._globalContext[key] = value; + } else { + globalOptions[key] = value; + } + }); + } + + self.setDSN(dsn); + + // "Script error." is hard coded into browsers for errors that it can't read. + // this is the result of a script being pulled in from an external domain and CORS. + globalOptions.ignoreErrors.push(/^Script error\.?$/); + globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/); + + // join regexp rules into one big rule + globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors); + globalOptions.ignoreUrls = globalOptions.ignoreUrls.length + ? joinRegExp(globalOptions.ignoreUrls) + : false; + globalOptions.whitelistUrls = globalOptions.whitelistUrls.length + ? joinRegExp(globalOptions.whitelistUrls) + : false; + globalOptions.includePaths = joinRegExp(globalOptions.includePaths); + globalOptions.maxBreadcrumbs = Math.max( + 0, + Math.min(globalOptions.maxBreadcrumbs || 100, 100) + ); // default and hard limit is 100 + + var autoBreadcrumbDefaults = { + xhr: true, + console: true, + dom: true, + location: true + }; + + var autoBreadcrumbs = globalOptions.autoBreadcrumbs; + if ({}.toString.call(autoBreadcrumbs) === '[object Object]') { + autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs); + } else if (autoBreadcrumbs !== false) { + autoBreadcrumbs = autoBreadcrumbDefaults; + } + globalOptions.autoBreadcrumbs = autoBreadcrumbs; + + var instrumentDefaults = { + tryCatch: true + }; + + var instrument = globalOptions.instrument; + if ({}.toString.call(instrument) === '[object Object]') { + instrument = objectMerge(instrumentDefaults, instrument); + } else if (instrument !== false) { + instrument = instrumentDefaults; + } + globalOptions.instrument = instrument; + + TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors; + + // return for chaining + return self; + }, + + /* + * Installs a global window.onerror error handler + * to capture and report uncaught exceptions. + * At this point, install() is required to be called due + * to the way TraceKit is set up. + * + * @return {Raven} + */ + install: function() { + var self = this; + if (self.isSetup() && !self._isRavenInstalled) { + TraceKit.report.subscribe(function() { + self._handleOnErrorStackInfo.apply(self, arguments); + }); + if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) { + self._instrumentTryCatch(); + } + + if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs(); + + // Install all of the plugins + self._drainPlugins(); + + self._isRavenInstalled = true; + } + + Error.stackTraceLimit = self._globalOptions.stackTraceLimit; + return this; + }, + + /* + * Set the DSN (can be called multiple time unlike config) + * + * @param {string} dsn The public Sentry DSN + */ + setDSN: function(dsn) { + var self = this, + uri = self._parseDSN(dsn), + lastSlash = uri.path.lastIndexOf('/'), + path = uri.path.substr(1, lastSlash); + + self._dsn = dsn; + self._globalKey = uri.user; + self._globalSecret = uri.pass && uri.pass.substr(1); + self._globalProject = uri.path.substr(lastSlash + 1); + + self._globalServer = self._getGlobalServer(uri); + + self._globalEndpoint = + self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/'; + + // Reset backoff state since we may be pointing at a + // new project/server + this._resetBackoff(); + }, + + /* + * Wrap code within a context so Raven can capture errors + * reliably across domains that is executed immediately. + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The callback to be immediately executed within the context + * @param {array} args An array of arguments to be called with the callback [optional] + */ + context: function(options, func, args) { + if (isFunction(options)) { + args = func || []; + func = options; + options = undefined; + } + + return this.wrap(options, func).apply(this, args); + }, + + /* + * Wrap code within a context and returns back a new function to be executed + * + * @param {object} options A specific set of options for this context [optional] + * @param {function} func The function to be wrapped in a new context + * @param {function} func A function to call before the try/catch wrapper [optional, private] + * @return {function} The newly wrapped functions with a context + */ + wrap: function(options, func, _before) { + var self = this; + // 1 argument has been passed, and it's not a function + // so just return it + if (isUndefined(func) && !isFunction(options)) { + return options; + } + + // options is optional + if (isFunction(options)) { + func = options; + options = undefined; + } + + // At this point, we've passed along 2 arguments, and the second one + // is not a function either, so we'll just return the second argument. + if (!isFunction(func)) { + return func; + } + + // We don't wanna wrap it twice! + try { + if (func.__raven__) { + return func; + } + + // If this has already been wrapped in the past, return that + if (func.__raven_wrapper__) { + return func.__raven_wrapper__; + } + } catch (e) { + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + // Bail on wrapping and return the function as-is (defers to window.onerror). + return func; + } + + function wrapped() { + var args = [], + i = arguments.length, + deep = !options || (options && options.deep !== false); + + if (_before && isFunction(_before)) { + _before.apply(this, arguments); + } + + // Recursively wrap all of a function's arguments that are + // functions themselves. + while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i]; + + try { + // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means Raven caught an error invoking your application code. This is + // expected behavior and NOT indicative of a bug with Raven.js. + return func.apply(this, args); + } catch (e) { + self._ignoreNextOnError(); + self.captureException(e, options); + throw e; + } + } + + // copy over properties of the old function + for (var property in func) { + if (hasKey(func, property)) { + wrapped[property] = func[property]; + } + } + wrapped.prototype = func.prototype; + + func.__raven_wrapper__ = wrapped; + // Signal that this function has been wrapped already + // for both debugging and to prevent it to being wrapped twice + wrapped.__raven__ = true; + wrapped.__inner__ = func; + + return wrapped; + }, + + /* + * Uninstalls the global error handler. + * + * @return {Raven} + */ + uninstall: function() { + TraceKit.report.uninstall(); + + this._restoreBuiltIns(); + + Error.stackTraceLimit = this._originalErrorStackTraceLimit; + this._isRavenInstalled = false; + + return this; + }, + + /* + * Manually capture an exception and send it over to Sentry + * + * @param {error} ex An exception to be logged + * @param {object} options A specific set of options for this error [optional] + * @return {Raven} + */ + captureException: function(ex, options) { + // Cases for sending ex as a message, rather than an exception + var isNotError = !isError(ex); + var isNotErrorEvent = !isErrorEvent(ex); + var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error; + + if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) { + return this.captureMessage( + ex, + objectMerge( + { + trimHeadFrames: 1, + stacktrace: true // if we fall back to captureMessage, default to attempting a new trace + }, + options + ) + ); + } + + // Get actual Error from ErrorEvent + if (isErrorEvent(ex)) ex = ex.error; + + // Store the raw exception object for potential debugging and introspection + this._lastCapturedException = ex; + + // TraceKit.report will re-raise any exception passed to it, + // which means you have to wrap it in try/catch. Instead, we + // can wrap it here and only re-raise if TraceKit.report + // raises an exception different from the one we asked to + // report on. + try { + var stack = TraceKit.computeStackTrace(ex); + this._handleStackInfo(stack, options); + } catch (ex1) { + if (ex !== ex1) { + throw ex1; + } + } + + return this; + }, + + /* + * Manually send a message to Sentry + * + * @param {string} msg A plain message to be captured in Sentry + * @param {object} options A specific set of options for this message [optional] + * @return {Raven} + */ + captureMessage: function(msg, options) { + // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an + // early call; we'll error on the side of logging anything called before configuration since it's + // probably something you should see: + if ( + !!this._globalOptions.ignoreErrors.test && + this._globalOptions.ignoreErrors.test(msg) + ) { + return; + } + + options = options || {}; + + var data = objectMerge( + { + message: msg + '' // Make sure it's actually a string + }, + options + ); + + var ex; + // Generate a "synthetic" stack trace from this point. + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative + // of a bug with Raven.js. Sentry generates synthetic traces either by configuration, + // or if it catches a thrown object without a "stack" property. + try { + throw new Error(msg); + } catch (ex1) { + ex = ex1; + } + + // null exception name so `Error` isn't prefixed to msg + ex.name = null; + var stack = TraceKit.computeStackTrace(ex); + + // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1] + var initialCall = stack.stack[1]; + + var fileurl = (initialCall && initialCall.url) || ''; + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + if (this._globalOptions.stacktrace || (options && options.stacktrace)) { + options = objectMerge( + { + // fingerprint on msg, not stack trace (legacy behavior, could be + // revisited) + fingerprint: msg, + // since we know this is a synthetic trace, the top N-most frames + // MUST be from Raven.js, so mark them as in_app later by setting + // trimHeadFrames + trimHeadFrames: (options.trimHeadFrames || 0) + 1 + }, + options + ); + + var frames = this._prepareFrames(stack, options); + data.stacktrace = { + // Sentry expects frames oldest to newest + frames: frames.reverse() + }; + } + + // Fire away! + this._send(data); + + return this; + }, + + captureBreadcrumb: function(obj) { + var crumb = objectMerge( + { + timestamp: now() / 1000 + }, + obj + ); + + if (isFunction(this._globalOptions.breadcrumbCallback)) { + var result = this._globalOptions.breadcrumbCallback(crumb); + + if (isObject(result) && !isEmptyObject(result)) { + crumb = result; + } else if (result === false) { + return this; + } + } + + this._breadcrumbs.push(crumb); + if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) { + this._breadcrumbs.shift(); + } + return this; + }, + + addPlugin: function(plugin /*arg1, arg2, ... argN*/) { + var pluginArgs = [].slice.call(arguments, 1); + + this._plugins.push([plugin, pluginArgs]); + if (this._isRavenInstalled) { + this._drainPlugins(); + } + + return this; + }, + + /* + * Set/clear a user to be sent along with the payload. + * + * @param {object} user An object representing user data [optional] + * @return {Raven} + */ + setUserContext: function(user) { + // Intentionally do not merge here since that's an unexpected behavior. + this._globalContext.user = user; + + return this; + }, + + /* + * Merge extra attributes to be sent along with the payload. + * + * @param {object} extra An object representing extra data [optional] + * @return {Raven} + */ + setExtraContext: function(extra) { + this._mergeContext('extra', extra); + + return this; + }, + + /* + * Merge tags to be sent along with the payload. + * + * @param {object} tags An object representing tags [optional] + * @return {Raven} + */ + setTagsContext: function(tags) { + this._mergeContext('tags', tags); + + return this; + }, + + /* + * Clear all of the context. + * + * @return {Raven} + */ + clearContext: function() { + this._globalContext = {}; + + return this; + }, + + /* + * Get a copy of the current context. This cannot be mutated. + * + * @return {object} copy of context + */ + getContext: function() { + // lol javascript + return JSON.parse(stringify(this._globalContext)); + }, + + /* + * Set environment of application + * + * @param {string} environment Typically something like 'production'. + * @return {Raven} + */ + setEnvironment: function(environment) { + this._globalOptions.environment = environment; + + return this; + }, + + /* + * Set release version of application + * + * @param {string} release Typically something like a git SHA to identify version + * @return {Raven} + */ + setRelease: function(release) { + this._globalOptions.release = release; + + return this; + }, + + /* + * Set the dataCallback option + * + * @param {function} callback The callback to run which allows the + * data blob to be mutated before sending + * @return {Raven} + */ + setDataCallback: function(callback) { + var original = this._globalOptions.dataCallback; + this._globalOptions.dataCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the breadcrumbCallback option + * + * @param {function} callback The callback to run which allows filtering + * or mutating breadcrumbs + * @return {Raven} + */ + setBreadcrumbCallback: function(callback) { + var original = this._globalOptions.breadcrumbCallback; + this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback); + return this; + }, + + /* + * Set the shouldSendCallback option + * + * @param {function} callback The callback to run which allows + * introspecting the blob before sending + * @return {Raven} + */ + setShouldSendCallback: function(callback) { + var original = this._globalOptions.shouldSendCallback; + this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback); + return this; + }, + + /** + * Override the default HTTP transport mechanism that transmits data + * to the Sentry server. + * + * @param {function} transport Function invoked instead of the default + * `makeRequest` handler. + * + * @return {Raven} + */ + setTransport: function(transport) { + this._globalOptions.transport = transport; + + return this; + }, + + /* + * Get the latest raw exception that was captured by Raven. + * + * @return {error} + */ + lastException: function() { + return this._lastCapturedException; + }, + + /* + * Get the last event id + * + * @return {string} + */ + lastEventId: function() { + return this._lastEventId; + }, + + /* + * Determine if Raven is setup and ready to go. + * + * @return {boolean} + */ + isSetup: function() { + if (!this._hasJSON) return false; // needs JSON support + if (!this._globalServer) { + if (!this.ravenNotConfiguredError) { + this.ravenNotConfiguredError = true; + this._logDebug('error', 'Error: Raven has not been configured.'); + } + return false; + } + return true; + }, + + afterLoad: function() { + // TODO: remove window dependence? + + // Attempt to initialize Raven on load + var RavenConfig = _window.RavenConfig; + if (RavenConfig) { + this.config(RavenConfig.dsn, RavenConfig.config).install(); + } + }, + + showReportDialog: function(options) { + if ( + !_document // doesn't work without a document (React native) + ) + return; + + options = options || {}; + + var lastEventId = options.eventId || this.lastEventId(); + if (!lastEventId) { + throw new RavenConfigError('Missing eventId'); + } + + var dsn = options.dsn || this._dsn; + if (!dsn) { + throw new RavenConfigError('Missing DSN'); + } + + var encode = encodeURIComponent; + var qs = ''; + qs += '?eventId=' + encode(lastEventId); + qs += '&dsn=' + encode(dsn); + + var user = options.user || this._globalContext.user; + if (user) { + if (user.name) qs += '&name=' + encode(user.name); + if (user.email) qs += '&email=' + encode(user.email); + } + + var globalServer = this._getGlobalServer(this._parseDSN(dsn)); + + var script = _document.createElement('script'); + script.async = true; + script.src = globalServer + '/api/embed/error-page/' + qs; + (_document.head || _document.body).appendChild(script); + }, + + /**** Private functions ****/ + _ignoreNextOnError: function() { + var self = this; + this._ignoreOnError += 1; + setTimeout(function() { + // onerror should trigger before setTimeout + self._ignoreOnError -= 1; + }); + }, + + _triggerEvent: function(eventType, options) { + // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it + var evt, key; + + if (!this._hasDocument) return; + + options = options || {}; + + eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1); + + if (_document.createEvent) { + evt = _document.createEvent('HTMLEvents'); + evt.initEvent(eventType, true, true); + } else { + evt = _document.createEventObject(); + evt.eventType = eventType; + } + + for (key in options) + if (hasKey(options, key)) { + evt[key] = options[key]; + } + + if (_document.createEvent) { + // IE9 if standards + _document.dispatchEvent(evt); + } else { + // IE8 regardless of Quirks or Standards + // IE9 if quirks + try { + _document.fireEvent('on' + evt.eventType.toLowerCase(), evt); + } catch (e) { + // Do nothing + } + } + }, + + /** + * Wraps addEventListener to capture UI breadcrumbs + * @param evtName the event name (e.g. "click") + * @returns {Function} + * @private + */ + _breadcrumbEventHandler: function(evtName) { + var self = this; + return function(evt) { + // reset keypress timeout; e.g. triggering a 'click' after + // a 'keypress' will reset the keypress debounce so that a new + // set of keypresses can be recorded + self._keypressTimeout = null; + + // It's possible this handler might trigger multiple times for the same + // event (e.g. event propagation through node ancestors). Ignore if we've + // already captured the event. + if (self._lastCapturedEvent === evt) return; + + self._lastCapturedEvent = evt; + + // try/catch both: + // - accessing evt.target (see getsentry/raven-js#838, #768) + // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly + // can throw an exception in some circumstances. + var target; + try { + target = htmlTreeAsString(evt.target); + } catch (e) { + target = ''; + } + + self.captureBreadcrumb({ + category: 'ui.' + evtName, // e.g. ui.click, ui.input + message: target + }); + }; + }, + + /** + * Wraps addEventListener to capture keypress UI events + * @returns {Function} + * @private + */ + _keypressEventHandler: function() { + var self = this, + debounceDuration = 1000; // milliseconds + + // TODO: if somehow user switches keypress target before + // debounce timeout is triggered, we will only capture + // a single breadcrumb from the FIRST target (acceptable?) + return function(evt) { + var target; + try { + target = evt.target; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + var tagName = target && target.tagName; + + // only consider keypress events on actual input elements + // this will disregard keypresses targeting body (e.g. tabbing + // through elements, hotkeys, etc) + if ( + !tagName || + (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) + ) + return; + + // record first keypress in a series, but ignore subsequent + // keypresses until debounce clears + var timeout = self._keypressTimeout; + if (!timeout) { + self._breadcrumbEventHandler('input')(evt); + } + clearTimeout(timeout); + self._keypressTimeout = setTimeout(function() { + self._keypressTimeout = null; + }, debounceDuration); + }; + }, + + /** + * Captures a breadcrumb of type "navigation", normalizing input URLs + * @param to the originating URL + * @param from the target URL + * @private + */ + _captureUrlChange: function(from, to) { + var parsedLoc = parseUrl(this._location.href); + var parsedTo = parseUrl(to); + var parsedFrom = parseUrl(from); + + // because onpopstate only tells you the "new" (to) value of location.href, and + // not the previous (from) value, we need to track the value of the current URL + // state ourselves + this._lastHref = to; + + // Use only the path component of the URL if the URL matches the current + // document (almost all the time when using pushState) + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) + to = parsedTo.relative; + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) + from = parsedFrom.relative; + + this.captureBreadcrumb({ + category: 'navigation', + data: { + to: to, + from: from + } + }); + }, + + /** + * Wrap timer functions and event targets to catch errors and provide + * better metadata. + */ + _instrumentTryCatch: function() { + var self = this; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapTimeFn(orig) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + var originalCallback = args[0]; + if (isFunction(originalCallback)) { + args[0] = self.wrap(originalCallback); + } + + // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it + // also supports only two arguments and doesn't care what this is, so we + // can just call the original function directly. + if (orig.apply) { + return orig.apply(this, args); + } else { + return orig(args[0], args[1]); + } + }; + } + + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + function wrapEventTarget(global) { + var proto = _window[global] && _window[global].prototype; + if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) { + fill( + proto, + 'addEventListener', + function(orig) { + return function(evtName, fn, capture, secure) { + // preserve arity + try { + if (fn && fn.handleEvent) { + fn.handleEvent = self.wrap(fn.handleEvent); + } + } catch (err) { + // can sometimes get 'Permission denied to access property "handle Event' + } + + // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs` + // so that we don't have more than one wrapper function + var before, clickHandler, keypressHandler; + + if ( + autoBreadcrumbs && + autoBreadcrumbs.dom && + (global === 'EventTarget' || global === 'Node') + ) { + // NOTE: generating multiple handlers per addEventListener invocation, should + // revisit and verify we can just use one (almost certainly) + clickHandler = self._breadcrumbEventHandler('click'); + keypressHandler = self._keypressEventHandler(); + before = function(evt) { + // need to intercept every DOM event in `before` argument, in case that + // same wrapped method is re-used for different events (e.g. mousemove THEN click) + // see #724 + if (!evt) return; + + var eventType; + try { + eventType = evt.type; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + if (eventType === 'click') return clickHandler(evt); + else if (eventType === 'keypress') return keypressHandler(evt); + }; + } + return orig.call( + this, + evtName, + self.wrap(fn, undefined, before), + capture, + secure + ); + }; + }, + wrappedBuiltIns + ); + fill( + proto, + 'removeEventListener', + function(orig) { + return function(evt, fn, capture, secure) { + try { + fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn); + } catch (e) { + // ignore, accessing __raven_wrapper__ will throw in some Selenium environments + } + return orig.call(this, evt, fn, capture, secure); + }; + }, + wrappedBuiltIns + ); + } + } + + fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns); + fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns); + if (_window.requestAnimationFrame) { + fill( + _window, + 'requestAnimationFrame', + function(orig) { + return function(cb) { + return orig(self.wrap(cb)); + }; + }, + wrappedBuiltIns + ); + } + + // event targets borrowed from bugsnag-js: + // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666 + var eventTargets = [ + 'EventTarget', + 'Window', + 'Node', + 'ApplicationCache', + 'AudioTrackList', + 'ChannelMergerNode', + 'CryptoOperation', + 'EventSource', + 'FileReader', + 'HTMLUnknownElement', + 'IDBDatabase', + 'IDBRequest', + 'IDBTransaction', + 'KeyOperation', + 'MediaController', + 'MessagePort', + 'ModalWindow', + 'Notification', + 'SVGElementInstance', + 'Screen', + 'TextTrack', + 'TextTrackCue', + 'TextTrackList', + 'WebSocket', + 'WebSocketWorker', + 'Worker', + 'XMLHttpRequest', + 'XMLHttpRequestEventTarget', + 'XMLHttpRequestUpload' + ]; + for (var i = 0; i < eventTargets.length; i++) { + wrapEventTarget(eventTargets[i]); + } + }, + + /** + * Instrument browser built-ins w/ breadcrumb capturing + * - XMLHttpRequests + * - DOM interactions (click/typing) + * - window.location changes + * - console + * + * Can be disabled or individually configured via the `autoBreadcrumbs` config option + */ + _instrumentBreadcrumbs: function() { + var self = this; + var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; + + var wrappedBuiltIns = self._wrappedBuiltIns; + + function wrapProp(prop, xhr) { + if (prop in xhr && isFunction(xhr[prop])) { + fill(xhr, prop, function(orig) { + return self.wrap(orig); + }); // intentionally don't track filled methods on XHR instances + } + } + + if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) { + var xhrproto = XMLHttpRequest.prototype; + fill( + xhrproto, + 'open', + function(origOpen) { + return function(method, url) { + // preserve arity + + // if Sentry key appears in URL, don't capture + if (isString(url) && url.indexOf(self._globalKey) === -1) { + this.__raven_xhr = { + method: method, + url: url, + status_code: null + }; + } + + return origOpen.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + + fill( + xhrproto, + 'send', + function(origSend) { + return function(data) { + // preserve arity + var xhr = this; + + function onreadystatechangeHandler() { + if (xhr.__raven_xhr && xhr.readyState === 4) { + try { + // touching statusCode in some platforms throws + // an exception + xhr.__raven_xhr.status_code = xhr.status; + } catch (e) { + /* do nothing */ + } + + self.captureBreadcrumb({ + type: 'http', + category: 'xhr', + data: xhr.__raven_xhr + }); + } + } + + var props = ['onload', 'onerror', 'onprogress']; + for (var j = 0; j < props.length; j++) { + wrapProp(props[j], xhr); + } + + if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) { + fill( + xhr, + 'onreadystatechange', + function(orig) { + return self.wrap(orig, undefined, onreadystatechangeHandler); + } /* intentionally don't track this instrumentation */ + ); + } else { + // if onreadystatechange wasn't actually set by the page on this xhr, we + // are free to set our own and capture the breadcrumb + xhr.onreadystatechange = onreadystatechangeHandler; + } + + return origSend.apply(this, arguments); + }; + }, + wrappedBuiltIns + ); + } + + if (autoBreadcrumbs.xhr && 'fetch' in _window) { + fill( + _window, + 'fetch', + function(origFetch) { + return function(fn, t) { + // preserve arity + // Make a copy of the arguments to prevent deoptimization + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + + var fetchInput = args[0]; + var method = 'GET'; + var url; + + if (typeof fetchInput === 'string') { + url = fetchInput; + } else if ('Request' in _window && fetchInput instanceof _window.Request) { + url = fetchInput.url; + if (fetchInput.method) { + method = fetchInput.method; + } + } else { + url = '' + fetchInput; + } + + if (args[1] && args[1].method) { + method = args[1].method; + } + + var fetchData = { + method: method, + url: url, + status_code: null + }; + + self.captureBreadcrumb({ + type: 'http', + category: 'fetch', + data: fetchData + }); + + return origFetch.apply(this, args).then(function(response) { + fetchData.status_code = response.status; + + return response; + }); + }; + }, + wrappedBuiltIns + ); + } + + // Capture breadcrumbs from any click that is unhandled / bubbled up all the way + // to the document. Do this before we instrument addEventListener. + if (autoBreadcrumbs.dom && this._hasDocument) { + if (_document.addEventListener) { + _document.addEventListener('click', self._breadcrumbEventHandler('click'), false); + _document.addEventListener('keypress', self._keypressEventHandler(), false); + } else { + // IE8 Compatibility + _document.attachEvent('onclick', self._breadcrumbEventHandler('click')); + _document.attachEvent('onkeypress', self._keypressEventHandler()); + } + } + + // record navigation (URL) changes + // NOTE: in Chrome App environment, touching history.pushState, *even inside + // a try/catch block*, will cause Chrome to output an error to console.error + // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var chrome = _window.chrome; + var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + var hasPushAndReplaceState = + !isChromePackagedApp && + _window.history && + history.pushState && + history.replaceState; + if (autoBreadcrumbs.location && hasPushAndReplaceState) { + // TODO: remove onpopstate handler on uninstall() + var oldOnPopState = _window.onpopstate; + _window.onpopstate = function() { + var currentHref = self._location.href; + self._captureUrlChange(self._lastHref, currentHref); + + if (oldOnPopState) { + return oldOnPopState.apply(this, arguments); + } + }; + + var historyReplacementFunction = function(origHistFunction) { + // note history.pushState.length is 0; intentionally not declaring + // params to preserve 0 arity + return function(/* state, title, url */) { + var url = arguments.length > 2 ? arguments[2] : undefined; + + // url argument is optional + if (url) { + // coerce to string (this is what pushState does) + self._captureUrlChange(self._lastHref, url + ''); + } + + return origHistFunction.apply(this, arguments); + }; + }; + + fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns); + fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns); + } + + if (autoBreadcrumbs.console && 'console' in _window && console.log) { + // console + var consoleMethodCallback = function(msg, data) { + self.captureBreadcrumb({ + message: msg, + level: data.level, + category: 'console' + }); + }; + + each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) { + wrapConsoleMethod(console, level, consoleMethodCallback); + }); + } + }, + + _restoreBuiltIns: function() { + // restore any wrapped builtins + var builtin; + while (this._wrappedBuiltIns.length) { + builtin = this._wrappedBuiltIns.shift(); + + var obj = builtin[0], + name = builtin[1], + orig = builtin[2]; + + obj[name] = orig; + } + }, + + _drainPlugins: function() { + var self = this; + + // FIX ME TODO + each(this._plugins, function(_, plugin) { + var installer = plugin[0]; + var args = plugin[1]; + installer.apply(self, [self].concat(args)); + }); + }, + + _parseDSN: function(str) { + var m = dsnPattern.exec(str), + dsn = {}, + i = 7; + + try { + while (i--) dsn[dsnKeys[i]] = m[i] || ''; + } catch (e) { + throw new RavenConfigError('Invalid DSN: ' + str); + } + + if (dsn.pass && !this._globalOptions.allowSecretKey) { + throw new RavenConfigError( + 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key' + ); + } + + return dsn; + }, + + _getGlobalServer: function(uri) { + // assemble the endpoint from the uri pieces + var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : ''); + + if (uri.protocol) { + globalServer = uri.protocol + ':' + globalServer; + } + return globalServer; + }, + + _handleOnErrorStackInfo: function() { + // if we are intentionally ignoring errors via onerror, bail out + if (!this._ignoreOnError) { + this._handleStackInfo.apply(this, arguments); + } + }, + + _handleStackInfo: function(stackInfo, options) { + var frames = this._prepareFrames(stackInfo, options); + + this._triggerEvent('handle', { + stackInfo: stackInfo, + options: options + }); + + this._processException( + stackInfo.name, + stackInfo.message, + stackInfo.url, + stackInfo.lineno, + frames, + options + ); + }, + + _prepareFrames: function(stackInfo, options) { + var self = this; + var frames = []; + if (stackInfo.stack && stackInfo.stack.length) { + each(stackInfo.stack, function(i, stack) { + var frame = self._normalizeFrame(stack, stackInfo.url); + if (frame) { + frames.push(frame); + } + }); + + // e.g. frames captured via captureMessage throw + if (options && options.trimHeadFrames) { + for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) { + frames[j].in_app = false; + } + } + } + frames = frames.slice(0, this._globalOptions.stackTraceLimit); + return frames; + }, + + _normalizeFrame: function(frame, stackInfoUrl) { + // normalize the frames data + var normalized = { + filename: frame.url, + lineno: frame.line, + colno: frame.column, + function: frame.func || '?' + }; + + // Case when we don't have any information about the error + // E.g. throwing a string or raw object, instead of an `Error` in Firefox + // Generating synthetic error doesn't add any value here + // + // We should probably somehow let a user know that they should fix their code + if (!frame.url) { + normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler + } + + normalized.in_app = !// determine if an exception came from outside of our app + // first we check the global includePaths list. + ( + (!!this._globalOptions.includePaths.test && + !this._globalOptions.includePaths.test(normalized.filename)) || + // Now we check for fun, if the function name is Raven or TraceKit + /(Raven|TraceKit)\./.test(normalized['function']) || + // finally, we do a last ditch effort and check for raven.min.js + /raven\.(min\.)?js$/.test(normalized.filename) + ); + + return normalized; + }, + + _processException: function(type, message, fileurl, lineno, frames, options) { + var prefixedMessage = (type ? type + ': ' : '') + (message || ''); + if ( + !!this._globalOptions.ignoreErrors.test && + (this._globalOptions.ignoreErrors.test(message) || + this._globalOptions.ignoreErrors.test(prefixedMessage)) + ) { + return; + } + + var stacktrace; + + if (frames && frames.length) { + fileurl = frames[0].filename || fileurl; + // Sentry expects frames oldest to newest + // and JS sends them as newest to oldest + frames.reverse(); + stacktrace = {frames: frames}; + } else if (fileurl) { + stacktrace = { + frames: [ + { + filename: fileurl, + lineno: lineno, + in_app: true + } + ] + }; + } + + if ( + !!this._globalOptions.ignoreUrls.test && + this._globalOptions.ignoreUrls.test(fileurl) + ) { + return; + } + + if ( + !!this._globalOptions.whitelistUrls.test && + !this._globalOptions.whitelistUrls.test(fileurl) + ) { + return; + } + + var data = objectMerge( + { + // sentry.interfaces.Exception + exception: { + values: [ + { + type: type, + value: message, + stacktrace: stacktrace + } + ] + }, + culprit: fileurl + }, + options + ); + + // Fire away! + this._send(data); + }, + + _trimPacket: function(data) { + // For now, we only want to truncate the two different messages + // but this could/should be expanded to just trim everything + var max = this._globalOptions.maxMessageLength; + if (data.message) { + data.message = truncate(data.message, max); + } + if (data.exception) { + var exception = data.exception.values[0]; + exception.value = truncate(exception.value, max); + } + + var request = data.request; + if (request) { + if (request.url) { + request.url = truncate(request.url, this._globalOptions.maxUrlLength); + } + if (request.Referer) { + request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength); + } + } + + if (data.breadcrumbs && data.breadcrumbs.values) + this._trimBreadcrumbs(data.breadcrumbs); + + return data; + }, + + /** + * Truncate breadcrumb values (right now just URLs) + */ + _trimBreadcrumbs: function(breadcrumbs) { + // known breadcrumb properties with urls + // TODO: also consider arbitrary prop values that start with (https?)?:// + var urlProps = ['to', 'from', 'url'], + urlProp, + crumb, + data; + + for (var i = 0; i < breadcrumbs.values.length; ++i) { + crumb = breadcrumbs.values[i]; + if ( + !crumb.hasOwnProperty('data') || + !isObject(crumb.data) || + objectFrozen(crumb.data) + ) + continue; + + data = objectMerge({}, crumb.data); + for (var j = 0; j < urlProps.length; ++j) { + urlProp = urlProps[j]; + if (data.hasOwnProperty(urlProp) && data[urlProp]) { + data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength); + } + } + breadcrumbs.values[i].data = data; + } + }, + + _getHttpData: function() { + if (!this._hasNavigator && !this._hasDocument) return; + var httpData = {}; + + if (this._hasNavigator && _navigator.userAgent) { + httpData.headers = { + 'User-Agent': navigator.userAgent + }; + } + + if (this._hasDocument) { + if (_document.location && _document.location.href) { + httpData.url = _document.location.href; + } + if (_document.referrer) { + if (!httpData.headers) httpData.headers = {}; + httpData.headers.Referer = _document.referrer; + } + } + + return httpData; + }, + + _resetBackoff: function() { + this._backoffDuration = 0; + this._backoffStart = null; + }, + + _shouldBackoff: function() { + return this._backoffDuration && now() - this._backoffStart < this._backoffDuration; + }, + + /** + * Returns true if the in-process data payload matches the signature + * of the previously-sent data + * + * NOTE: This has to be done at this level because TraceKit can generate + * data from window.onerror WITHOUT an exception object (IE8, IE9, + * other old browsers). This can take the form of an "exception" + * data object with a single frame (derived from the onerror args). + */ + _isRepeatData: function(current) { + var last = this._lastData; + + if ( + !last || + current.message !== last.message || // defined for captureMessage + current.culprit !== last.culprit // defined for captureException/onerror + ) + return false; + + // Stacktrace interface (i.e. from captureMessage) + if (current.stacktrace || last.stacktrace) { + return isSameStacktrace(current.stacktrace, last.stacktrace); + } else if (current.exception || last.exception) { + // Exception interface (i.e. from captureException/onerror) + return isSameException(current.exception, last.exception); + } + + return true; + }, + + _setBackoffState: function(request) { + // If we are already in a backoff state, don't change anything + if (this._shouldBackoff()) { + return; + } + + var status = request.status; + + // 400 - project_id doesn't exist or some other fatal + // 401 - invalid/revoked dsn + // 429 - too many requests + if (!(status === 400 || status === 401 || status === 429)) return; + + var retry; + try { + // If Retry-After is not in Access-Control-Expose-Headers, most + // browsers will throw an exception trying to access it + retry = request.getResponseHeader('Retry-After'); + retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds + } catch (e) { + /* eslint no-empty:0 */ + } + + this._backoffDuration = retry + ? // If Sentry server returned a Retry-After value, use it + retry + : // Otherwise, double the last backoff duration (starts at 1 sec) + this._backoffDuration * 2 || 1000; + + this._backoffStart = now(); + }, + + _send: function(data) { + var globalOptions = this._globalOptions; + + var baseData = { + project: this._globalProject, + logger: globalOptions.logger, + platform: 'javascript' + }, + httpData = this._getHttpData(); + + if (httpData) { + baseData.request = httpData; + } + + // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload + if (data.trimHeadFrames) delete data.trimHeadFrames; + + data = objectMerge(baseData, data); + + // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge + data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags); + data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra); + + // Send along our own collected metadata with extra + data.extra['session:duration'] = now() - this._startTime; + + if (this._breadcrumbs && this._breadcrumbs.length > 0) { + // intentionally make shallow copy so that additions + // to breadcrumbs aren't accidentally sent in this request + data.breadcrumbs = { + values: [].slice.call(this._breadcrumbs, 0) + }; + } + + // If there are no tags/extra, strip the key from the payload alltogther. + if (isEmptyObject(data.tags)) delete data.tags; + + if (this._globalContext.user) { + // sentry.interfaces.User + data.user = this._globalContext.user; + } + + // Include the environment if it's defined in globalOptions + if (globalOptions.environment) data.environment = globalOptions.environment; + + // Include the release if it's defined in globalOptions + if (globalOptions.release) data.release = globalOptions.release; + + // Include server_name if it's defined in globalOptions + if (globalOptions.serverName) data.server_name = globalOptions.serverName; + + if (isFunction(globalOptions.dataCallback)) { + data = globalOptions.dataCallback(data) || data; + } + + // Why?????????? + if (!data || isEmptyObject(data)) { + return; + } + + // Check if the request should be filtered or not + if ( + isFunction(globalOptions.shouldSendCallback) && + !globalOptions.shouldSendCallback(data) + ) { + return; + } + + // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests), + // so drop requests until "cool-off" period has elapsed. + if (this._shouldBackoff()) { + this._logDebug('warn', 'Raven dropped error due to backoff: ', data); + return; + } + + if (typeof globalOptions.sampleRate === 'number') { + if (Math.random() < globalOptions.sampleRate) { + this._sendProcessedPayload(data); + } + } else { + this._sendProcessedPayload(data); + } + }, + + _getUuid: function() { + return uuid4(); + }, + + _sendProcessedPayload: function(data, callback) { + var self = this; + var globalOptions = this._globalOptions; + + if (!this.isSetup()) return; + + // Try and clean up the packet before sending by truncating long values + data = this._trimPacket(data); + + // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback, + // but this would require copying an un-truncated copy of the data packet, which can be + // arbitrarily deep (extra_data) -- could be worthwhile? will revisit + if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) { + this._logDebug('warn', 'Raven dropped repeat event: ', data); + return; + } + + // Send along an event_id if not explicitly passed. + // This event_id can be used to reference the error within Sentry itself. + // Set lastEventId after we know the error should actually be sent + this._lastEventId = data.event_id || (data.event_id = this._getUuid()); + + // Store outbound payload after trim + this._lastData = data; + + this._logDebug('debug', 'Raven about to send:', data); + + var auth = { + sentry_version: '7', + sentry_client: 'raven-js/' + this.VERSION, + sentry_key: this._globalKey + }; + + if (this._globalSecret) { + auth.sentry_secret = this._globalSecret; + } + + var exception = data.exception && data.exception.values[0]; + this.captureBreadcrumb({ + category: 'sentry', + message: exception + ? (exception.type ? exception.type + ': ' : '') + exception.value + : data.message, + event_id: data.event_id, + level: data.level || 'error' // presume error unless specified + }); + + var url = this._globalEndpoint; + (globalOptions.transport || this._makeRequest).call(this, { + url: url, + auth: auth, + data: data, + options: globalOptions, + onSuccess: function success() { + self._resetBackoff(); + + self._triggerEvent('success', { + data: data, + src: url + }); + callback && callback(); + }, + onError: function failure(error) { + self._logDebug('error', 'Raven transport failed to send: ', error); + + if (error.request) { + self._setBackoffState(error.request); + } + + self._triggerEvent('failure', { + data: data, + src: url + }); + error = error || new Error('Raven send failed (no additional details provided)'); + callback && callback(error); + } + }); + }, + + _makeRequest: function(opts) { + var request = _window.XMLHttpRequest && new _window.XMLHttpRequest(); + if (!request) return; + + // if browser doesn't support CORS (e.g. IE7), we are out of luck + var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined'; + + if (!hasCORS) return; + + var url = opts.url; + + if ('withCredentials' in request) { + request.onreadystatechange = function() { + if (request.readyState !== 4) { + return; + } else if (request.status === 200) { + opts.onSuccess && opts.onSuccess(); + } else if (opts.onError) { + var err = new Error('Sentry error code: ' + request.status); + err.request = request; + opts.onError(err); + } + }; + } else { + request = new XDomainRequest(); + // xdomainrequest cannot go http -> https (or vice versa), + // so always use protocol relative + url = url.replace(/^https?:/, ''); + + // onreadystatechange not supported by XDomainRequest + if (opts.onSuccess) { + request.onload = opts.onSuccess; + } + if (opts.onError) { + request.onerror = function() { + var err = new Error('Sentry error code: XDomainRequest'); + err.request = request; + opts.onError(err); + }; + } + } + + // NOTE: auth is intentionally sent as part of query string (NOT as custom + // HTTP header) so as to avoid preflight CORS requests + request.open('POST', url + '?' + urlencode(opts.auth)); + request.send(stringify(opts.data)); + }, + + _logDebug: function(level) { + if (this._originalConsoleMethods[level] && this.debug) { + // In IE<10 console methods do not have their own 'apply' method + Function.prototype.apply.call( + this._originalConsoleMethods[level], + this._originalConsole, + [].slice.call(arguments, 1) + ); + } + }, + + _mergeContext: function(key, context) { + if (isUndefined(context)) { + delete this._globalContext[key]; + } else { + this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context); + } + } +}; + +// Deprecations +Raven.prototype.setUser = Raven.prototype.setUserContext; +Raven.prototype.setReleaseContext = Raven.prototype.setRelease; + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/singleton.js": +/*!************************************************!*\ + !*** ./node_modules/raven-js/src/singleton.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * Enforces a single instance of the Raven client, and the + * main entry point for Raven. If you are a consumer of the + * Raven library, you SHOULD load this file (vs raven.js). + **/ + +var RavenConstructor = __webpack_require__(/*! ./raven */ "./node_modules/raven-js/src/raven.js"); + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; +var _Raven = _window.Raven; + +var Raven = new RavenConstructor(); + +/* + * Allow multiple versions of Raven to be installed. + * Strip Raven from the global context and returns the instance. + * + * @return {Raven} + */ +Raven.noConflict = function() { + _window.Raven = _Raven; + return Raven; +}; + +Raven.afterLoad(); + +module.exports = Raven; + + +/***/ }), + +/***/ "./node_modules/raven-js/src/utils.js": +/*!********************************************!*\ + !*** ./node_modules/raven-js/src/utils.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +function isObject(what) { + return typeof what === 'object' && what !== null; +} + +// Yanked from https://git.io/vS8DV re-used under CC0 +// with some tiny modifications +function isError(value) { + switch ({}.toString.call(value)) { + case '[object Error]': + return true; + case '[object Exception]': + return true; + case '[object DOMException]': + return true; + default: + return value instanceof Error; + } +} + +function isErrorEvent(value) { + return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]'; +} + +function isUndefined(what) { + return what === void 0; +} + +function isFunction(what) { + return typeof what === 'function'; +} + +function isString(what) { + return Object.prototype.toString.call(what) === '[object String]'; +} + +function isEmptyObject(what) { + for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars + return true; +} + +function supportsErrorEvent() { + try { + new ErrorEvent(''); // eslint-disable-line no-new + return true; + } catch (e) { + return false; + } +} + +function wrappedCallback(callback) { + function dataCallback(data, original) { + var normalizedData = callback(data) || data; + if (original) { + return original(normalizedData) || normalizedData; + } + return normalizedData; + } + + return dataCallback; +} + +function each(obj, callback) { + var i, j; + + if (isUndefined(obj.length)) { + for (i in obj) { + if (hasKey(obj, i)) { + callback.call(null, i, obj[i]); + } + } + } else { + j = obj.length; + if (j) { + for (i = 0; i < j; i++) { + callback.call(null, i, obj[i]); + } + } + } +} + +function objectMerge(obj1, obj2) { + if (!obj2) { + return obj1; + } + each(obj2, function(key, value) { + obj1[key] = value; + }); + return obj1; +} + +/** + * This function is only used for react-native. + * react-native freezes object that have already been sent over the + * js bridge. We need this function in order to check if the object is frozen. + * So it's ok that objectFrozen returns false if Object.isFrozen is not + * supported because it's not relevant for other "platforms". See related issue: + * https://github.com/getsentry/react-native-sentry/issues/57 + */ +function objectFrozen(obj) { + if (!Object.isFrozen) { + return false; + } + return Object.isFrozen(obj); +} + +function truncate(str, max) { + return !max || str.length <= max ? str : str.substr(0, max) + '\u2026'; +} + +/** + * hasKey, a better form of hasOwnProperty + * Example: hasKey(MainHostObject, property) === true/false + * + * @param {Object} host object to check property + * @param {string} key to check + */ +function hasKey(object, key) { + return Object.prototype.hasOwnProperty.call(object, key); +} + +function joinRegExp(patterns) { + // Combine an array of regular expressions and strings into one large regexp + // Be mad. + var sources = [], + i = 0, + len = patterns.length, + pattern; + + for (; i < len; i++) { + pattern = patterns[i]; + if (isString(pattern)) { + // If it's a string, we need to escape it + // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1')); + } else if (pattern && pattern.source) { + // If it's a regexp already, we want to extract the source + sources.push(pattern.source); + } + // Intentionally skip other cases + } + return new RegExp(sources.join('|'), 'i'); +} + +function urlencode(o) { + var pairs = []; + each(o, function(key, value) { + pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + }); + return pairs.join('&'); +} + +// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B +// intentionally using regex and not href parsing trick because React Native and other +// environments where DOM might not be available +function parseUrl(url) { + var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); + if (!match) return {}; + + // coerce to undefined values to empty string so we don't get 'undefined' + var query = match[6] || ''; + var fragment = match[8] || ''; + return { + protocol: match[2], + host: match[4], + path: match[5], + relative: match[5] + query + fragment // everything minus origin + }; +} +function uuid4() { + var crypto = _window.crypto || _window.msCrypto; + + if (!isUndefined(crypto) && crypto.getRandomValues) { + // Use window.crypto API if available + // eslint-disable-next-line no-undef + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); + + // set 4 in byte 7 + arr[3] = (arr[3] & 0xfff) | 0x4000; + // set 2 most significant bits of byte 9 to '10' + arr[4] = (arr[4] & 0x3fff) | 0x8000; + + var pad = function(num) { + var v = num.toString(16); + while (v.length < 4) { + v = '0' + v; + } + return v; + }; + + return ( + pad(arr[0]) + + pad(arr[1]) + + pad(arr[2]) + + pad(arr[3]) + + pad(arr[4]) + + pad(arr[5]) + + pad(arr[6]) + + pad(arr[7]) + ); + } else { + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + } +} + +/** + * Given a child DOM element, returns a query-selector statement describing that + * and its ancestors + * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] + * @param elem + * @returns {string} + */ +function htmlTreeAsString(elem) { + /* eslint no-extra-parens:0*/ + var MAX_TRAVERSE_HEIGHT = 5, + MAX_OUTPUT_LEN = 80, + out = [], + height = 0, + len = 0, + separator = ' > ', + sepLength = separator.length, + nextStr; + + while (elem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = htmlElementAsString(elem); + // bail out if + // - nextStr is the 'html' element + // - the length of the string that would be created exceeds MAX_OUTPUT_LEN + // (ignore this limit if we are on the first iteration) + if ( + nextStr === 'html' || + (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) + ) { + break; + } + + out.push(nextStr); + + len += nextStr.length; + elem = elem.parentNode; + } + + return out.reverse().join(separator); +} + +/** + * Returns a simple, query-selector representation of a DOM element + * e.g. [HTMLElement] => input#foo.btn[name=baz] + * @param HTMLElement + * @returns {string} + */ +function htmlElementAsString(elem) { + var out = [], + className, + classes, + key, + attr, + i; + + if (!elem || !elem.tagName) { + return ''; + } + + out.push(elem.tagName.toLowerCase()); + if (elem.id) { + out.push('#' + elem.id); + } + + className = elem.className; + if (className && isString(className)) { + classes = className.split(/\s+/); + for (i = 0; i < classes.length; i++) { + out.push('.' + classes[i]); + } + } + var attrWhitelist = ['type', 'name', 'title', 'alt']; + for (i = 0; i < attrWhitelist.length; i++) { + key = attrWhitelist[i]; + attr = elem.getAttribute(key); + if (attr) { + out.push('[' + key + '="' + attr + '"]'); + } + } + return out.join(''); +} + +/** + * Returns true if either a OR b is truthy, but not both + */ +function isOnlyOneTruthy(a, b) { + return !!(!!a ^ !!b); +} + +/** + * Returns true if the two input exception interfaces have the same content + */ +function isSameException(ex1, ex2) { + if (isOnlyOneTruthy(ex1, ex2)) return false; + + ex1 = ex1.values[0]; + ex2 = ex2.values[0]; + + if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false; + + return isSameStacktrace(ex1.stacktrace, ex2.stacktrace); +} + +/** + * Returns true if the two input stack trace interfaces have the same content + */ +function isSameStacktrace(stack1, stack2) { + if (isOnlyOneTruthy(stack1, stack2)) return false; + + var frames1 = stack1.frames; + var frames2 = stack2.frames; + + // Exit early if frame count differs + if (frames1.length !== frames2.length) return false; + + // Iterate through every frame; bail out if anything differs + var a, b; + for (var i = 0; i < frames1.length; i++) { + a = frames1[i]; + b = frames2[i]; + if ( + a.filename !== b.filename || + a.lineno !== b.lineno || + a.colno !== b.colno || + a['function'] !== b['function'] + ) + return false; + } + return true; +} + +/** + * Polyfill a method + * @param obj object e.g. `document` + * @param name method name present on object e.g. `addEventListener` + * @param replacement replacement function + * @param track {optional} record instrumentation to an array + */ +function fill(obj, name, replacement, track) { + var orig = obj[name]; + obj[name] = replacement(orig); + if (track) { + track.push([obj, name, orig]); + } +} + +module.exports = { + isObject: isObject, + isError: isError, + isErrorEvent: isErrorEvent, + isUndefined: isUndefined, + isFunction: isFunction, + isString: isString, + isEmptyObject: isEmptyObject, + supportsErrorEvent: supportsErrorEvent, + wrappedCallback: wrappedCallback, + each: each, + objectMerge: objectMerge, + truncate: truncate, + objectFrozen: objectFrozen, + hasKey: hasKey, + joinRegExp: joinRegExp, + urlencode: urlencode, + uuid4: uuid4, + htmlTreeAsString: htmlTreeAsString, + htmlElementAsString: htmlElementAsString, + isSameException: isSameException, + isSameStacktrace: isSameStacktrace, + parseUrl: parseUrl, + fill: fill +}; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/TraceKit/tracekit.js": +/*!***********************************************************!*\ + !*** ./node_modules/raven-js/vendor/TraceKit/tracekit.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var utils = __webpack_require__(/*! ../../src/utils */ "./node_modules/raven-js/src/utils.js"); + +/* + TraceKit - Cross brower stack traces + + This was originally forked from github.com/occ/TraceKit, but has since been + largely re-written and is now maintained as part of raven-js. Tests for + this are in test/vendor. + + MIT license +*/ + +var TraceKit = { + collectWindowErrors: true, + debug: false +}; + +// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) +var _window = + typeof window !== 'undefined' + ? window + : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {}; + +// global reference to slice +var _slice = [].slice; +var UNKNOWN_FUNCTION = '?'; + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types +var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/; + +function getLocationHref() { + if (typeof document === 'undefined' || document.location == null) return ''; + + return document.location.href; +} + +/** + * TraceKit.report: cross-browser processing of unhandled exceptions + * + * Syntax: + * TraceKit.report.subscribe(function(stackInfo) { ... }) + * TraceKit.report.unsubscribe(function(stackInfo) { ... }) + * TraceKit.report(exception) + * try { ...code... } catch(ex) { TraceKit.report(ex); } + * + * Supports: + * - Firefox: full stack trace with line numbers, plus column number + * on top frame; column number is not guaranteed + * - Opera: full stack trace with line and column numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * - IE: line and column number for the top frame only; some frames + * may be missing, and column number is not guaranteed + * + * In theory, TraceKit should work on all of the following versions: + * - IE5.5+ (only 8.0 tested) + * - Firefox 0.9+ (only 3.5+ tested) + * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require + * Exceptions Have Stacktrace to be enabled in opera:config) + * - Safari 3+ (only 4+ tested) + * - Chrome 1+ (only 5+ tested) + * - Konqueror 3.5+ (untested) + * + * Requires TraceKit.computeStackTrace. + * + * Tries to catch all unhandled exceptions and report them to the + * subscribed handlers. Please note that TraceKit.report will rethrow the + * exception. This is REQUIRED in order to get a useful stack trace in IE. + * If the exception does not reach the top of the browser, you will only + * get a stack trace from the point where TraceKit.report was called. + * + * Handlers receive a stackInfo object as described in the + * TraceKit.computeStackTrace docs. + */ +TraceKit.report = (function reportModuleWrapper() { + var handlers = [], + lastArgs = null, + lastException = null, + lastExceptionStack = null; + + /** + * Add a crash handler. + * @param {Function} handler + */ + function subscribe(handler) { + installGlobalHandler(); + handlers.push(handler); + } + + /** + * Remove a crash handler. + * @param {Function} handler + */ + function unsubscribe(handler) { + for (var i = handlers.length - 1; i >= 0; --i) { + if (handlers[i] === handler) { + handlers.splice(i, 1); + } + } + } + + /** + * Remove all crash handlers. + */ + function unsubscribeAll() { + uninstallGlobalHandler(); + handlers = []; + } + + /** + * Dispatch stack information to all handlers. + * @param {Object.} stack + */ + function notifyHandlers(stack, isWindowError) { + var exception = null; + if (isWindowError && !TraceKit.collectWindowErrors) { + return; + } + for (var i in handlers) { + if (handlers.hasOwnProperty(i)) { + try { + handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); + } catch (inner) { + exception = inner; + } + } + } + + if (exception) { + throw exception; + } + } + + var _oldOnerrorHandler, _onErrorHandlerInstalled; + + /** + * Ensures all global unhandled exceptions are recorded. + * Supported by Gecko and IE. + * @param {string} message Error message. + * @param {string} url URL of script that generated the exception. + * @param {(number|string)} lineNo The line number at which the error + * occurred. + * @param {?(number|string)} colNo The column number at which the error + * occurred. + * @param {?Error} ex The actual Error object. + */ + function traceKitWindowOnError(message, url, lineNo, colNo, ex) { + var stack = null; + + if (lastExceptionStack) { + TraceKit.computeStackTrace.augmentStackTraceWithInitialElement( + lastExceptionStack, + url, + lineNo, + message + ); + processLastException(); + } else if (ex && utils.isError(ex)) { + // non-string `ex` arg; attempt to extract stack trace + + // New chrome and blink send along a real error object + // Let's just report that like a normal error. + // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror + stack = TraceKit.computeStackTrace(ex); + notifyHandlers(stack, true); + } else { + var location = { + url: url, + line: lineNo, + column: colNo + }; + + var name = undefined; + var msg = message; // must be new var or will modify original `arguments` + var groups; + if ({}.toString.call(message) === '[object String]') { + var groups = message.match(ERROR_TYPES_RE); + if (groups) { + name = groups[1]; + msg = groups[2]; + } + } + + location.func = UNKNOWN_FUNCTION; + + stack = { + name: name, + message: msg, + url: getLocationHref(), + stack: [location] + }; + notifyHandlers(stack, true); + } + + if (_oldOnerrorHandler) { + return _oldOnerrorHandler.apply(this, arguments); + } + + return false; + } + + function installGlobalHandler() { + if (_onErrorHandlerInstalled) { + return; + } + _oldOnerrorHandler = _window.onerror; + _window.onerror = traceKitWindowOnError; + _onErrorHandlerInstalled = true; + } + + function uninstallGlobalHandler() { + if (!_onErrorHandlerInstalled) { + return; + } + _window.onerror = _oldOnerrorHandler; + _onErrorHandlerInstalled = false; + _oldOnerrorHandler = undefined; + } + + function processLastException() { + var _lastExceptionStack = lastExceptionStack, + _lastArgs = lastArgs; + lastArgs = null; + lastExceptionStack = null; + lastException = null; + notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs)); + } + + /** + * Reports an unhandled Error to TraceKit. + * @param {Error} ex + * @param {?boolean} rethrow If false, do not re-throw the exception. + * Only used for window.onerror to not cause an infinite loop of + * rethrowing. + */ + function report(ex, rethrow) { + var args = _slice.call(arguments, 1); + if (lastExceptionStack) { + if (lastException === ex) { + return; // already caught by an inner catch block, ignore + } else { + processLastException(); + } + } + + var stack = TraceKit.computeStackTrace(ex); + lastExceptionStack = stack; + lastException = ex; + lastArgs = args; + + // If the stack trace is incomplete, wait for 2 seconds for + // slow slow IE to see if onerror occurs or not before reporting + // this exception; otherwise, we will end up with an incomplete + // stack trace + setTimeout(function() { + if (lastException === ex) { + processLastException(); + } + }, stack.incomplete ? 2000 : 0); + + if (rethrow !== false) { + throw ex; // re-throw to propagate to the top level (and cause window.onerror) + } + } + + report.subscribe = subscribe; + report.unsubscribe = unsubscribe; + report.uninstall = unsubscribeAll; + return report; +})(); + +/** + * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript + * + * Syntax: + * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) + * Returns: + * s.name - exception name + * s.message - exception message + * s.stack[i].url - JavaScript or HTML file URL + * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) + * s.stack[i].args - arguments passed to the function, if known + * s.stack[i].line - line number, if known + * s.stack[i].column - column number, if known + * + * Supports: + * - Firefox: full stack trace with line numbers and unreliable column + * number on top frame + * - Opera 10: full stack trace with line and column numbers + * - Opera 9-: full stack trace with line numbers + * - Chrome: full stack trace with line and column numbers + * - Safari: line and column number for the topmost stacktrace element + * only + * - IE: no line numbers whatsoever + * + * Tries to guess names of anonymous functions by looking for assignments + * in the source code. In IE and Safari, we have to guess source file names + * by searching for function bodies inside all page scripts. This will not + * work for scripts that are loaded cross-domain. + * Here be dragons: some function names may be guessed incorrectly, and + * duplicate functions may be mismatched. + * + * TraceKit.computeStackTrace should only be used for tracing purposes. + * Logging of unhandled exceptions should be done with TraceKit.report, + * which builds on top of TraceKit.computeStackTrace and provides better + * IE support by utilizing the window.onerror event to retrieve information + * about the top of the stack. + * + * Note: In IE and Safari, no stack trace is recorded on the Error object, + * so computeStackTrace instead walks its *own* chain of callers. + * This means that: + * * in Safari, some methods may be missing from the stack trace; + * * in IE, the topmost function in the stack trace will always be the + * caller of computeStackTrace. + * + * This is okay for tracing (because you are likely to be calling + * computeStackTrace from the function you want to be the topmost element + * of the stack trace anyway), but not okay for logging unhandled + * exceptions (because your catch block will likely be far away from the + * inner function that actually caused the exception). + * + */ +TraceKit.computeStackTrace = (function computeStackTraceWrapper() { + // Contents of Exception in various browsers. + // + // SAFARI: + // ex.message = Can't find variable: qq + // ex.line = 59 + // ex.sourceId = 580238192 + // ex.sourceURL = http://... + // ex.expressionBeginOffset = 96 + // ex.expressionCaretOffset = 98 + // ex.expressionEndOffset = 98 + // ex.name = ReferenceError + // + // FIREFOX: + // ex.message = qq is not defined + // ex.fileName = http://... + // ex.lineNumber = 59 + // ex.columnNumber = 69 + // ex.stack = ...stack trace... (see the example below) + // ex.name = ReferenceError + // + // CHROME: + // ex.message = qq is not defined + // ex.name = ReferenceError + // ex.type = not_defined + // ex.arguments = ['aa'] + // ex.stack = ...stack trace... + // + // INTERNET EXPLORER: + // ex.message = ... + // ex.name = ReferenceError + // + // OPERA: + // ex.message = ...message... (see the example below) + // ex.name = ReferenceError + // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) + // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + + /** + * Computes stack trace information from the stack property. + * Chrome and Gecko use this property. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceFromStackProp(ex) { + if (typeof ex.stack === 'undefined' || !ex.stack) return; + + var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, + gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i, + winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i, + // Used to additionally parse URL/line/column from eval frames + geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, + chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/, + lines = ex.stack.split('\n'), + stack = [], + submatch, + parts, + element, + reference = /^(.*) is undefined$/.exec(ex.message); + + for (var i = 0, j = lines.length; i < j; ++i) { + if ((parts = chrome.exec(lines[i]))) { + var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + if (isEval && (submatch = chromeEval.exec(parts[2]))) { + // throw out eval line/column and use top-most line/column number + parts[2] = submatch[1]; // url + parts[3] = submatch[2]; // line + parts[4] = submatch[3]; // column + } + element = { + url: !isNative ? parts[2] : null, + func: parts[1] || UNKNOWN_FUNCTION, + args: isNative ? [parts[2]] : [], + line: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = winjs.exec(lines[i]))) { + element = { + url: parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: [], + line: +parts[3], + column: parts[4] ? +parts[4] : null + }; + } else if ((parts = gecko.exec(lines[i]))) { + var isEval = parts[3] && parts[3].indexOf(' > eval') > -1; + if (isEval && (submatch = geckoEval.exec(parts[3]))) { + // throw out eval line/column and use top-most line number + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = null; // no column when eval + } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') { + // FireFox uses this awesome columnNumber property for its top frame + // Also note, Firefox's column number is 0-based and everything else expects 1-based, + // so adding 1 + // NOTE: this hack doesn't work if top-most frame is eval + stack[0].column = ex.columnNumber + 1; + } + element = { + url: parts[3], + func: parts[1] || UNKNOWN_FUNCTION, + args: parts[2] ? parts[2].split(',') : [], + line: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null + }; + } else { + continue; + } + + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; + } + + stack.push(element); + } + + if (!stack.length) { + return null; + } + + return { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + } + + /** + * Adds information about the first frame to incomplete stack traces. + * Safari and IE require this to get complete data on the first frame. + * @param {Object.} stackInfo Stack trace information from + * one of the compute* methods. + * @param {string} url The URL of the script that caused an error. + * @param {(number|string)} lineNo The line number of the script that + * caused an error. + * @param {string=} message The error generated by the browser, which + * hopefully contains the name of the object that caused the error. + * @return {boolean} Whether or not the stack information was + * augmented. + */ + function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { + var initial = { + url: url, + line: lineNo + }; + + if (initial.url && initial.line) { + stackInfo.incomplete = false; + + if (!initial.func) { + initial.func = UNKNOWN_FUNCTION; + } + + if (stackInfo.stack.length > 0) { + if (stackInfo.stack[0].url === initial.url) { + if (stackInfo.stack[0].line === initial.line) { + return false; // already in stack trace + } else if ( + !stackInfo.stack[0].line && + stackInfo.stack[0].func === initial.func + ) { + stackInfo.stack[0].line = initial.line; + return false; + } + } + } + + stackInfo.stack.unshift(initial); + stackInfo.partial = true; + return true; + } else { + stackInfo.incomplete = true; + } + + return false; + } + + /** + * Computes stack trace information by walking the arguments.caller + * chain at the time the exception occurred. This will cause earlier + * frames to be missed but is the only way to get any stack trace in + * Safari and IE. The top frame is restored by + * {@link augmentStackTraceWithInitialElement}. + * @param {Error} ex + * @return {?Object.} Stack trace information. + */ + function computeStackTraceByWalkingCallerChain(ex, depth) { + var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, + stack = [], + funcs = {}, + recursion = false, + parts, + item, + source; + + for ( + var curr = computeStackTraceByWalkingCallerChain.caller; + curr && !recursion; + curr = curr.caller + ) { + if (curr === computeStackTrace || curr === TraceKit.report) { + // console.log('skipping internal function'); + continue; + } + + item = { + url: null, + func: UNKNOWN_FUNCTION, + line: null, + column: null + }; + + if (curr.name) { + item.func = curr.name; + } else if ((parts = functionName.exec(curr.toString()))) { + item.func = parts[1]; + } + + if (typeof item.func === 'undefined') { + try { + item.func = parts.input.substring(0, parts.input.indexOf('{')); + } catch (e) {} + } + + if (funcs['' + curr]) { + recursion = true; + } else { + funcs['' + curr] = true; + } + + stack.push(item); + } + + if (depth) { + // console.log('depth is ' + depth); + // console.log('stack is ' + stack.length); + stack.splice(0, depth); + } + + var result = { + name: ex.name, + message: ex.message, + url: getLocationHref(), + stack: stack + }; + augmentStackTraceWithInitialElement( + result, + ex.sourceURL || ex.fileName, + ex.line || ex.lineNumber, + ex.message || ex.description + ); + return result; + } + + /** + * Computes a stack trace for an exception. + * @param {Error} ex + * @param {(string|number)=} depth + */ + function computeStackTrace(ex, depth) { + var stack = null; + depth = depth == null ? 0 : +depth; + + try { + stack = computeStackTraceFromStackProp(ex); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + + try { + stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + if (stack) { + return stack; + } + } catch (e) { + if (TraceKit.debug) { + throw e; + } + } + return { + name: ex.name, + message: ex.message, + url: getLocationHref() + }; + } + + computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; + computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp; + + return computeStackTrace; +})(); + +module.exports = TraceKit; + + +/***/ }), + +/***/ "./node_modules/raven-js/vendor/json-stringify-safe/stringify.js": +/*!***********************************************************************!*\ + !*** ./node_modules/raven-js/vendor/json-stringify-safe/stringify.js ***! + \***********************************************************************/ +/***/ ((module, exports) => { + +/* + json-stringify-safe + Like JSON.stringify, but doesn't throw on circular references. + + Originally forked from https://github.com/isaacs/json-stringify-safe + version 5.0.1 on 3/8/2017 and modified to handle Errors serialization + and IE8 compatibility. Tests for this are in test/vendor. + + ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE +*/ + +exports = module.exports = stringify; +exports.getSerialize = serializer; + +function indexOf(haystack, needle) { + for (var i = 0; i < haystack.length; ++i) { + if (haystack[i] === needle) return i; + } + return -1; +} + +function stringify(obj, replacer, spaces, cycleReplacer) { + return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); +} + +// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106 +function stringifyError(value) { + var err = { + // These properties are implemented as magical getters and don't show up in for in + stack: value.stack, + message: value.message, + name: value.name + }; + + for (var i in value) { + if (Object.prototype.hasOwnProperty.call(value, i)) { + err[i] = value[i]; + } + } + + return err; +} + +function serializer(replacer, cycleReplacer) { + var stack = []; + var keys = []; + + if (cycleReplacer == null) { + cycleReplacer = function(key, value) { + if (stack[0] === value) { + return '[Circular ~]'; + } + return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'; + }; + } + + return function(key, value) { + if (stack.length > 0) { + var thisPos = indexOf(stack, this); + ~thisPos ? stack.splice(thisPos + 1) : stack.push(this); + ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key); + + if (~indexOf(stack, value)) { + value = cycleReplacer.call(this, key, value); + } + } else { + stack.push(value); + } + + return replacer == null + ? value instanceof Error ? stringifyError(value) : value + : replacer.call(this, key, value); + }; +} + + +/***/ }), + +/***/ "jquery": +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = window["jQuery"]; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!*****************************************!*\ + !*** ./scripts/entries/reviewBanner.ts ***! + \*****************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "initMonitorReviewBanner": () => (/* binding */ initMonitorReviewBanner) +/* harmony export */ }); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/backgroundAppUtils */ "./scripts/utils/backgroundAppUtils.ts"); +/* harmony import */ var _constants_selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants/selectors */ "./scripts/constants/selectors.ts"); +/* harmony import */ var _constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants/leadinConfig */ "./scripts/constants/leadinConfig.ts"); +/* harmony import */ var _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../iframe/integratedMessages */ "./scripts/iframe/integratedMessages/index.ts"); + + + + + +var REVIEW_BANNER_INTRO_PERIOD_DAYS = 15; + +var userIsAfterIntroductoryPeriod = function userIsAfterIntroductoryPeriod() { + var activationDate = new Date(+_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.activationTime * 1000); + var currentDate = new Date(); + var timeElapsed = new Date(currentDate.getTime() - activationDate.getTime()); + return timeElapsed.getUTCDate() - 1 >= REVIEW_BANNER_INTRO_PERIOD_DAYS; +}; +/** + * Adds some methods to window when review banner is + * displayed to monitor events + */ + + +function initMonitorReviewBanner() { + if (_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.refreshToken) { + var embedder = (0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_1__.getOrCreateBackgroundApp)(_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.refreshToken); + var container = jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.reviewBannerContainer); + + if (container && userIsAfterIntroductoryPeriod()) { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.reviewBannerLeaveReviewLink).off('click').on('click', function () { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages.TrackReviewBannerInteraction + }); + }); + jquery__WEBPACK_IMPORTED_MODULE_0___default()(_constants_selectors__WEBPACK_IMPORTED_MODULE_2__.domElements.reviewBannerDismissButton).off('click').on('click', function () { + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages.TrackReviewBannerDismissed + }); + }); + embedder.postAsyncMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages.FetchContactsCreateSinceActivation, + payload: +_constants_leadinConfig__WEBPACK_IMPORTED_MODULE_3__.activationTime * 1000 + }).then(function (_ref) { + var total = _ref.total; + + if (total >= 5) { + container.removeClass('leadin-review-banner--hide'); + embedder.postMessage({ + key: _iframe_integratedMessages__WEBPACK_IMPORTED_MODULE_4__.ProxyMessages.TrackReviewBannerRender + }); + } + }); + } + } +} +(0,_utils_backgroundAppUtils__WEBPACK_IMPORTED_MODULE_1__.initBackgroundApp)(initMonitorReviewBanner); +})(); + +/******/ })() +; +//# sourceMappingURL=reviewBanner.js.map \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/build/reviewBanner.js.map b/wp/wp-content/plugins/leadin/build/reviewBanner.js.map new file mode 100644 index 00000000..452a0ad6 --- /dev/null +++ b/wp/wp-content/plugins/leadin/build/reviewBanner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reviewBanner.js","mappings":"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CAAjB;EACAI,QAAQ,CAACE,QAAT,CAAkBC,QAAQ,CAACC,IAA3B,EAAiC,KAAjC;EACAJ,QAAQ,CAACK,mBAAT,GAXsD,CAWtB;;EAChC3J,MAAM,CAAC+I,mBAAP,GAA6BO,QAA7B;EACA,OAAOtJ,MAAM,CAAC+I,mBAAd;AACH,CAdM;;;;;;;;;;ACbP;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACPA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,gBAAgB,+CAA+C;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACtCA;;AAEA,eAAe,mBAAO,CAAC,wFAA6B;AACpD,gBAAgB,mBAAO,CAAC,gHAAyC;AACjE,uBAAuB,mBAAO,CAAC,iEAAe;;AAE9C,YAAY,mBAAO,CAAC,qDAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,2FAA+B;;AAEvD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,UAAU;AACzB,eAAe,UAAU;AACzB,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,0CAA0C;AAC1C,2CAA2C;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,MAAM;AACN,2EAA2E;AAC3E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACr4DA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAO,CAAC,qDAAS;;AAExC;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;AC9BA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA,iDAAiD;AACjD,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kCAAkC;AAClC;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChYA,YAAY,mBAAO,CAAC,6DAAiB;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,qBAAM,mBAAmB,qBAAM;;AAE5C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD,KAAK;AAC1D,uDAAuD,KAAK;AAC5D;AACA,WAAW,aAAa,YAAY;AACpC;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,+DAA+D;AAC/D;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,kBAAkB;AACjC;AACA,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA,qEAAqE;AACrE,iEAAiE;AACjE;AACA;AACA,kCAAkC;AAClC,kCAAkC;AAClC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA,eAAe,QAAQ;AACvB,eAAe,iBAAiB;AAChC;AACA,eAAe,SAAS;AACxB;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAA0C;AAClD,eAAe,OAAO;AACtB,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,qEAAqE;AACrE,UAAU;AACV;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;AC9mBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB;;AAEpB;AACA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA,IAAMa,+BAA+B,GAAG,EAAxC;;AACA,IAAMC,6BAA6B,GAAG,SAAhCA,6BAAgC,GAAM;EACxC,IAAMC,cAAc,GAAG,IAAIC,IAAJ,CAAS,CAAC3J,mEAAD,GAAkB,IAA3B,CAAvB;EACA,IAAM4J,WAAW,GAAG,IAAID,IAAJ,EAApB;EACA,IAAME,WAAW,GAAG,IAAIF,IAAJ,CAASC,WAAW,CAACE,OAAZ,KAAwBJ,cAAc,CAACI,OAAf,EAAjC,CAApB;EACA,OAAOD,WAAW,CAACE,UAAZ,KAA2B,CAA3B,IAAgCP,+BAAvC;AACH,CALD;AAMA;AACA;AACA;AACA;;;AACO,SAASQ,uBAAT,GAAmC;EACtC,IAAInI,iEAAJ,EAAkB;IACd,IAAMqH,QAAQ,GAAGR,mFAAwB,CAAC7G,iEAAD,CAAzC;IACA,IAAMoI,SAAS,GAAGlC,6CAAC,CAAC1F,mFAAD,CAAnB;;IACA,IAAI4H,SAAS,IAAIR,6BAA6B,EAA9C,EAAkD;MAC9C1B,6CAAC,CAAC1F,yFAAD,CAAD,CACK6H,GADL,CACS,OADT,EAEKC,EAFL,CAEQ,OAFR,EAEiB,YAAM;QACnBjB,QAAQ,CAACkB,WAAT,CAAqB;UACjBC,GAAG,EAAE3E,kGAA0Ce;QAD9B,CAArB;MAGH,CAND;MAOAsB,6CAAC,CAAC1F,uFAAD,CAAD,CACK6H,GADL,CACS,OADT,EAEKC,EAFL,CAEQ,OAFR,EAEiB,YAAM;QACnBjB,QAAQ,CAACkB,WAAT,CAAqB;UACjBC,GAAG,EAAE3E,gGAAwCgB;QAD5B,CAArB;MAGH,CAND;MAOAwC,QAAQ,CACHoB,gBADL,CACsB;QAClBD,GAAG,EAAE3E,wGADa;QAElB6E,OAAO,EAAE,CAACvK,mEAAD,GAAkB;MAFT,CADtB,EAKKwK,IALL,CAKU,gBAAe;QAAA,IAAZC,KAAY,QAAZA,KAAY;;QACrB,IAAIA,KAAK,IAAI,CAAb,EAAgB;UACZR,SAAS,CAACS,WAAV,CAAsB,4BAAtB;UACAxB,QAAQ,CAACkB,WAAT,CAAqB;YACjBC,GAAG,EAAE3E,6FAAqCc;UADzB,CAArB;QAGH;MACJ,CAZD;IAaH;EACJ;AACJ;AACD6B,4EAAiB,CAAC2B,uBAAD,CAAjB,C","sources":["webpack://leadin/./scripts/constants/leadinConfig.ts","webpack://leadin/./scripts/constants/selectors.ts","webpack://leadin/./scripts/iframe/integratedMessages/core/CoreMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/forms/FormsMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/index.ts","webpack://leadin/./scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/plugin/PluginMessages.ts","webpack://leadin/./scripts/iframe/integratedMessages/proxy/ProxyMessages.ts","webpack://leadin/./scripts/lib/Raven.ts","webpack://leadin/./scripts/utils/appUtils.ts","webpack://leadin/./scripts/utils/backgroundAppUtils.ts","webpack://leadin/./node_modules/raven-js/src/configError.js","webpack://leadin/./node_modules/raven-js/src/console.js","webpack://leadin/./node_modules/raven-js/src/raven.js","webpack://leadin/./node_modules/raven-js/src/singleton.js","webpack://leadin/./node_modules/raven-js/src/utils.js","webpack://leadin/./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack://leadin/./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack://leadin/external window \"jQuery\"","webpack://leadin/webpack/bootstrap","webpack://leadin/webpack/runtime/compat get default export","webpack://leadin/webpack/runtime/define property getters","webpack://leadin/webpack/runtime/global","webpack://leadin/webpack/runtime/hasOwnProperty shorthand","webpack://leadin/webpack/runtime/make namespace object","webpack://leadin/./scripts/entries/reviewBanner.ts"],"sourcesContent":["const { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, locale, loginUrl, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, } = window.leadinConfig;\nexport { accountName, adminUrl, activationTime, connectionStatus, deviceId, didDisconnect, env, formsScript, meetingsScript, formsScriptPayload, hublet, hubspotBaseUrl, hubspotNonce, iframeUrl, impactLink, lastAuthorizeTime, lastDeauthorizeTime, lastDisconnectTime, leadinPluginVersion, leadinQueryParams, loginUrl, locale, phpVersion, pluginPath, plugins, portalDomain, portalEmail, portalId, redirectNonce, restNonce, restUrl, refreshToken, reviewSkippedDate, theme, trackConsent, wpVersion, contentEmbed, requiresContentEmbedScope, refreshTokenError, };\n","export const domElements = {\n iframe: '#leadin-iframe',\n subMenu: '.toplevel_page_leadin > ul',\n subMenuLinks: '.toplevel_page_leadin > ul a',\n subMenuButtons: '.toplevel_page_leadin > ul > li',\n deactivatePluginButton: '[data-slug=\"leadin\"] .deactivate a',\n deactivateFeedbackForm: 'form.leadin-deactivate-form',\n deactivateFeedbackSubmit: 'button#leadin-feedback-submit',\n deactivateFeedbackSkip: 'button#leadin-feedback-skip',\n thickboxModalClose: '.leadin-modal-close',\n thickboxModalWindow: 'div#TB_window.thickbox-loading',\n thickboxModalContent: 'div#TB_ajaxContent.TB_modal',\n reviewBannerContainer: '#leadin-review-banner',\n reviewBannerLeaveReviewLink: 'a#leave-review-button',\n reviewBannerDismissButton: 'a#dismiss-review-banner-button',\n leadinIframeContainer: 'leadin-iframe-container',\n leadinIframe: 'leadin-iframe',\n leadinIframeFallbackContainer: 'leadin-iframe-fallback-container',\n};\n","export const CoreMessages = {\n HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED',\n SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN',\n ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME',\n RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME',\n SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE',\n SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID',\n};\n","export const FormMessages = {\n CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION',\n};\n","export * from './core/CoreMessages';\nexport * from './forms/FormsMessages';\nexport * from './livechat/LiveChatMessages';\nexport * from './plugin/PluginMessages';\nexport * from './proxy/ProxyMessages';\n","export const LiveChatMessages = {\n CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION',\n};\n","export const PluginMessages = {\n PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION',\n PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG',\n TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT',\n InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST',\n InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE',\n InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR',\n InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST',\n InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR',\n BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST',\n BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE',\n BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR',\n BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST',\n BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR',\n SkipReviewRequest: 'SKIP_REVIEW_REQUEST',\n SkipReviewResponse: 'SKIP_REVIEW_RESPONSE',\n SkipReviewError: 'SKIP_REVIEW_ERROR',\n RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM',\n ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST',\n ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE',\n ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR',\n ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST',\n ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE',\n ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR',\n};\n","export const ProxyMessages = {\n FetchForms: 'FETCH_FORMS',\n FetchForm: 'FETCH_FORM',\n CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE',\n FetchAuth: 'FETCH_AUTH',\n FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS',\n FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION',\n FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER',\n ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR',\n TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER',\n TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE',\n TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED',\n TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER',\n TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE',\n TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER',\n TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION',\n TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED',\n TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION',\n};\n","import Raven from 'raven-js';\nimport { hubspotBaseUrl, phpVersion, wpVersion, leadinPluginVersion, portalId, plugins, } from '../constants/leadinConfig';\nexport function configureRaven() {\n if (hubspotBaseUrl.indexOf('app.hubspot.com') === -1) {\n return;\n }\n Raven.config('https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', {\n instrument: {\n tryCatch: false,\n },\n release: leadinPluginVersion,\n }).install();\n Raven.setTagsContext({\n v: leadinPluginVersion,\n php: phpVersion,\n wordpress: wpVersion,\n });\n Raven.setExtraContext({\n hub: portalId,\n plugins: Object.keys(plugins)\n .map(name => `${name}#${plugins[name]}`)\n .join(','),\n });\n}\nexport default Raven;\n","import $ from 'jquery';\nimport Raven, { configureRaven } from '../lib/Raven';\nexport function initApp(initFn) {\n configureRaven();\n Raven.context(initFn);\n}\nexport function initAppOnReady(initFn) {\n function main() {\n $(initFn);\n }\n initApp(main);\n}\n","import { deviceId, hubspotBaseUrl, locale, portalId, } from '../constants/leadinConfig';\nimport { initApp } from './appUtils';\nexport function initBackgroundApp(initFn) {\n function main() {\n if (Array.isArray(initFn)) {\n initFn.forEach(callback => callback());\n }\n else {\n initFn();\n }\n }\n initApp(main);\n}\nexport const getOrCreateBackgroundApp = (refreshToken) => {\n if (window.LeadinBackgroundApp) {\n return window.LeadinBackgroundApp;\n }\n const { IntegratedAppEmbedder, IntegratedAppOptions } = window;\n const options = new IntegratedAppOptions()\n .setLocale(locale)\n .setDeviceId(deviceId)\n .setRefreshToken(refreshToken);\n const embedder = new IntegratedAppEmbedder('integrated-plugin-proxy', portalId, hubspotBaseUrl, () => { }).setOptions(options);\n embedder.attachTo(document.body, false);\n embedder.postStartAppMessage(); // lets the app know all all data has been passed to it\n window.LeadinBackgroundApp = embedder;\n return window.LeadinBackgroundApp;\n};\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = '' + args.join(' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n collectWindowErrors: true,\n maxMessageLength: 0,\n\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.19.1',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped already\n // for both debugging and to prevent it to being wrapped twice\n wrapped.__raven__ = true;\n wrapped.__inner__ = func;\n\n return wrapped;\n },\n\n /*\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._restoreBuiltIns();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /*\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n // Cases for sending ex as a message, rather than an exception\n var isNotError = !isError(ex);\n var isNotErrorEvent = !isErrorEvent(ex);\n var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n return this.captureMessage(\n ex,\n objectMerge(\n {\n trimHeadFrames: 1,\n stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n },\n options\n )\n );\n }\n\n // Get actual Error from ErrorEvent\n if (isErrorEvent(ex)) ex = ex.error;\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n\n var data = objectMerge(\n {\n message: msg + '' // Make sure it's actually a string\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = stack.stack[1];\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n options = objectMerge(\n {\n // fingerprint on msg, not stack trace (legacy behavior, could be\n // revisited)\n fingerprint: msg,\n // since we know this is a synthetic trace, the top N-most frames\n // MUST be from Raven.js, so mark them as in_app later by setting\n // trimHeadFrames\n trimHeadFrames: (options.trimHeadFrames || 0) + 1\n },\n options\n );\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function(data) {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && 'fetch' in _window) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n return response;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': navigator.userAgent\n };\n }\n\n if (this._hasDocument) {\n if (_document.location && _document.location.href) {\n httpData.url = _document.location.href;\n }\n if (_document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n retry = request.getResponseHeader('Retry-After');\n retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n // If there are no tags/extra, strip the key from the payload alltogther.\n if (isEmptyObject(data.tags)) delete data.tags;\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n var url = opts.url;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n // NOTE: auth is intentionally sent as part of query string (NOT as custom\n // HTTP header) so as to avoid preflight CORS requests\n request.open('POST', url + '?' + urlencode(opts.auth));\n request.send(stringify(opts.data));\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","var _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch ({}.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) return {};\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isString: isString,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} message Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (ex && utils.isError(ex)) {\n // non-string `ex` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(ex);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var msg = message; // must be new var or will modify original `arguments`\n var groups;\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n msg = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: msg,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n // Used to additionally parse URL/line/column from eval frames\n geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n lines = ex.stack.split('\\n'),\n stack = [],\n submatch,\n parts,\n element,\n reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","module.exports = window[\"jQuery\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import $ from 'jquery';\nimport { getOrCreateBackgroundApp, initBackgroundApp, } from '../utils/backgroundAppUtils';\nimport { domElements } from '../constants/selectors';\nimport { refreshToken, activationTime } from '../constants/leadinConfig';\nimport { ProxyMessages } from '../iframe/integratedMessages';\nconst REVIEW_BANNER_INTRO_PERIOD_DAYS = 15;\nconst userIsAfterIntroductoryPeriod = () => {\n const activationDate = new Date(+activationTime * 1000);\n const currentDate = new Date();\n const timeElapsed = new Date(currentDate.getTime() - activationDate.getTime());\n return timeElapsed.getUTCDate() - 1 >= REVIEW_BANNER_INTRO_PERIOD_DAYS;\n};\n/**\n * Adds some methods to window when review banner is\n * displayed to monitor events\n */\nexport function initMonitorReviewBanner() {\n if (refreshToken) {\n const embedder = getOrCreateBackgroundApp(refreshToken);\n const container = $(domElements.reviewBannerContainer);\n if (container && userIsAfterIntroductoryPeriod()) {\n $(domElements.reviewBannerLeaveReviewLink)\n .off('click')\n .on('click', () => {\n embedder.postMessage({\n key: ProxyMessages.TrackReviewBannerInteraction,\n });\n });\n $(domElements.reviewBannerDismissButton)\n .off('click')\n .on('click', () => {\n embedder.postMessage({\n key: ProxyMessages.TrackReviewBannerDismissed,\n });\n });\n embedder\n .postAsyncMessage({\n key: ProxyMessages.FetchContactsCreateSinceActivation,\n payload: +activationTime * 1000,\n })\n .then(({ total }) => {\n if (total >= 5) {\n container.removeClass('leadin-review-banner--hide');\n embedder.postMessage({\n key: ProxyMessages.TrackReviewBannerRender,\n });\n }\n });\n }\n }\n}\ninitBackgroundApp(initMonitorReviewBanner);\n"],"names":["window","leadinConfig","accountName","adminUrl","activationTime","connectionStatus","deviceId","didDisconnect","env","formsScript","meetingsScript","formsScriptPayload","hublet","hubspotBaseUrl","hubspotNonce","iframeUrl","impactLink","lastAuthorizeTime","lastDeauthorizeTime","lastDisconnectTime","leadinPluginVersion","leadinQueryParams","locale","loginUrl","phpVersion","pluginPath","plugins","portalDomain","portalEmail","portalId","redirectNonce","restNonce","restUrl","refreshToken","reviewSkippedDate","theme","trackConsent","wpVersion","contentEmbed","requiresContentEmbedScope","refreshTokenError","domElements","iframe","subMenu","subMenuLinks","subMenuButtons","deactivatePluginButton","deactivateFeedbackForm","deactivateFeedbackSubmit","deactivateFeedbackSkip","thickboxModalClose","thickboxModalWindow","thickboxModalContent","reviewBannerContainer","reviewBannerLeaveReviewLink","reviewBannerDismissButton","leadinIframeContainer","leadinIframe","leadinIframeFallbackContainer","CoreMessages","HandshakeReceive","SendRefreshToken","ReloadParentFrame","RedirectParentFrame","SendLocale","SendDeviceId","FormMessages","CreateFormAppNavigation","LiveChatMessages","CreateLiveChatAppNavigation","PluginMessages","PluginSettingsNavigation","PluginLeadinConfig","TrackConsent","InternalTrackingFetchRequest","InternalTrackingFetchResponse","InternalTrackingFetchError","InternalTrackingChangeRequest","InternalTrackingChangeError","BusinessUnitFetchRequest","BusinessUnitFetchResponse","BusinessUnitFetchError","BusinessUnitChangeRequest","BusinessUnitChangeError","SkipReviewRequest","SkipReviewResponse","SkipReviewError","RemoveParentQueryParam","ContentEmbedInstallRequest","ContentEmbedInstallResponse","ContentEmbedInstallError","ContentEmbedActivationRequest","ContentEmbedActivationResponse","ContentEmbedActivationError","ProxyMessages","FetchForms","FetchForm","CreateFormFromTemplate","FetchAuth","FetchMeetingsAndUsers","FetchContactsCreateSinceActivation","FetchOrCreateMeetingUser","ConnectMeetingsCalendar","TrackFormPreviewRender","TrackFormCreatedFromTemplate","TrackFormCreationFailed","TrackMeetingPreviewRender","TrackSidebarMetaChange","TrackReviewBannerRender","TrackReviewBannerInteraction","TrackReviewBannerDismissed","TrackPluginDeactivation","Raven","configureRaven","indexOf","config","instrument","tryCatch","release","install","setTagsContext","v","php","wordpress","setExtraContext","hub","Object","keys","map","name","join","$","initApp","initFn","context","initAppOnReady","main","initBackgroundApp","Array","isArray","forEach","callback","getOrCreateBackgroundApp","LeadinBackgroundApp","IntegratedAppEmbedder","IntegratedAppOptions","options","setLocale","setDeviceId","setRefreshToken","embedder","setOptions","attachTo","document","body","postStartAppMessage","REVIEW_BANNER_INTRO_PERIOD_DAYS","userIsAfterIntroductoryPeriod","activationDate","Date","currentDate","timeElapsed","getTime","getUTCDate","initMonitorReviewBanner","container","off","on","postMessage","key","postAsyncMessage","payload","then","total","removeClass"],"sourceRoot":""} \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/changelog.txt b/wp/wp-content/plugins/leadin/changelog.txt new file mode 100644 index 00000000..c36a68c3 --- /dev/null +++ b/wp/wp-content/plugins/leadin/changelog.txt @@ -0,0 +1,307 @@ += 11.1.11 (2024-05-16) = +* Add another field to integrated app config + += 11.1.10 (2024-05-15) = +* fix race condition with our Elementor widgets which would occasionally prevent them from loading. + += 11.1.9 (2024-05-15) = +* Add extra data to integrated app config + += 11.1.5 (2024-04-19) = +* Pushing new plugin version with tagging mechanism working correctly. + += 11.1.3 (2024-04-17) = +* Optimize metadata update on connection + += 11.1.0 (2024-04-16) = +* Addressing issue with our SVN tagging + += 11.0.57 (2024-04-16) = +* Update logic that is used to disable blocks in the full site editor + += 11.0.55 (2024-04-12) = +* Remove support for full site editor for forms and meetings blocks + += 11.0.37 (2024-04-10) = +* Fix translation keys + += 11.0.36 (2024-04-09) = +* Refactor connection function and add extra leadin config + += 11.0.32 (2024-03-27) = +* Update the gutenberg save blocks for wordpress customizer compatibility + += 11.0.28 (2024-03-22) = +* Fix for the HubSpot gutenberg blogs rendered in the wordpress customizer context + += 11.0.23 (2024-03-14) = +* Fix error when adding the wordpress sidebar + += 11.0.15 (2024-03-13) = +* Add better error logging + += 11.0.9 (2024-03-12) = +* Translations fixed + += 11.0.8 (2024-03-04) = +* Update review banner display logic + += 11.0.5 (2024-02-29) = +* Adds ability to delete query param from embedded app + += 11.0.4 (2024-02-26) = +* Adds version info to leadin config + += 11.0.3 (2024-02-20) = +* Remove unnecessary "type" attribute from javascript resources + += 11.0.0 (2024-02-13) = +* Fix locale bug +* Integrated Plugin App embedder +* Remove 3rd party cookies dependency + += 10.2.23 (2024-01-24) = +* Update link of the review survey + += 10.2.17 (2023-12-13) = +* Change minimum required version in plugin listing + += 10.2.14 (2023-11-15) = +* Remove deprecated block_categories method + += 10.2.13 (2023-11-13) = +* Bump WP tested version and fix feedback banner show up condition + += 10.2.3 (2023-08-23) = +* Sets device id in embedder options + += 10.2.0 (2023-08-09) = +* Live chat app embedder + += 10.1.30 (2023-07-24) = +* Updated readme + += 10.1.28 (2023-07-11) = +* Removes unused jQuery dependency + += 10.1.24 (2023-05-31) = +* Add Norwegian language support + += 10.1.23 (2023-05-17) = +* Fixed form creation by template + += 10.1.16 (2023-04-11) = +* Updated tested up to WordPress version and HubSpot video + += 10.1.13 (2023-03-30) = +* Add url sanitizing for meetings shortcode + += 10.1.0 (2023-03-08) = +* Forms app embedder + += 10.0.24 (2023-03-07) = +* Change font type + += 10.0.21 (2023-02-20) = +* Content type default selection for elementor + += 10.0.18 (2023-01-20) = +* Add business unit proxy + += 10.0.17 (2023-01-19) = +* Add loader animation to prevent blank screen + += 10.0.7 (2023-01-10) = +* Remove getHublet endpoint + += 10.0.0 (2023-01-06) = +* Plugin restructure to use WordPress env and scripts + += 9.2.26 (2022-12-08) = +* Update feedback survey link + += 9.2.0 (2022-12-01) = +* Add support for Business Units + += 9.1.0 (2022-11-30) = +* Make list link external + += 9.0.499 (2022-11-25) = +* Fix custom post type validation for sidebar + += 9.0.497 (2022-11-24) = +* Added fallback page if iframe is blocked + += 9.0.469 (2022-11-21) = +* Replace null parameter for http_build_query method + += 9.0.432 (2022-11-17) = +* Migrate to TypeScript + += 9.0.405 (2022-11-14) = +* Add validation to metadata access + += 9.0.387 (2022-11-01) = +* Use WP set script translations + += 9.0.365 (2022-10-28) = +* Move ajax to rest endpoints + += 9.0.320 (2022-10-24) = +* Make report link external + += 9.0.311 (2022-10-21) = +* Fix for form select sometimes not working in form Gutenberg block + += 9.0.272 (2022-10-12) = +* Fix for Penpal to connect to correct child when Impact Link is present + += 9.0.108 (2022-09-14) = +* Enqueue Meetings script + += 9.0.91 (2022-09-13) = +* Changed the placeholder text for form blocks + += 9.0.77 (2022-09-12) = +* Change review link to external survey + += 9.0.74 (2022-09-09) = +* Add filter to pass additional query parameters to iframe + += 9.0.72 (2022-09-09) = +* Prevent sidebar from rendering when not post or page + += 9.0.20 (2022-08-30) = +* Remove tests folder and composer.phar file + += 9.0.0 (2022-08-29) = +* Added HusbSpot Elementor widgets + += 8.16.25 (2022-08-19) = +* Fixes the headers missing issue by tying the script with a hook + += 8.16.6 (2022-08-17) = +* Revert changes for open upgrade link in new tab + += 8.16.5 (2022-08-17) = +* Removed newline before/after php tag + += 8.16.2 (2022-08-17) = +* Fixes the headers already sent error + += 8.16.0 (2022-08-17) = +* Made upgrade link open up in a new tab instead of the iframe + += 8.15.139 (2022-08-04) = +* Fix for content type customization + += 8.15.65 (2022-07-22) = +* Fix encode URL for affiliate link + += 8.15.36 (2022-07-19) = +* Add validation for content type in meta data + += 8.15.0 (2022-07-15) = +* Add hubspot sidebar to set content type + += 8.14.24 (2022-07-15) = +* Add fallback for affiliate link +* Increase WP tested up to version + += 8.14.0 (2022-07-13) = +* Add Meetings gutenberg block + += 8.13.56 (2022-06-10) = +* Use new script to render forms + += 8.13.52 (2022-06-09) = +* Add defer to forms script + += 8.13.45 (2022-06-08) = +* Remove char from proxy url + += 8.13.39 (2022-06-07) = +* Add tracking of events in review banner + += 8.13.0 (2022-06-01) = +* Add validation to connect method + += 8.12.33 (2022-05-27) = +* Replaced some whitelisted URLs with regex + += 8.12.0 (2022-05-24) = +* Added Gutenberg block preview image + += 8.11.221 (2022-05-24) = +* Update dependencies + += 8.11.150 (2022-05-13) = +* Update build steps + += 8.11.0 (2022-04-27) = +* Add option to disable HS analytics tracking for internal WP users + += 8.10.25 (2022-04-25) = +* Fix Gutenberg block breaking after user disconnects plugin + += 8.10.0 (2022-04-21) = +* Add templates options to gutenberg form + += 8.9.22 (2022-04-13) = +* Prevent script to be loaded while Elementor Edit mode is on/or admin + += 8.9.20 (2022-04-13) = +* Fix security issue related to sanitizing inputs + += 8.9.14 (2022-04-12) = +* Fix security issue related to form inputs + += 8.9.0 (2022-04-11) = +* Add api that gets the correct hublet + += 8.8.15 (2022-04-07) = +* Fix security issue related to proxy URL + += 8.8.13 (2022-04-07) = +* Whitelist proxy paths + += 8.8.0 (2022-04-06) = +* Add api that updates hublet +* Add api to track user consent + += 8.7.5 (2022-03-14) = +* Always add utm params to iframe + += 8.7.0 (2022-03-11) = +* Validations to when show the review banner +* Add banner to ask the user to leave a review + += 8.6.0 (2022-03-09) = +* Add banner to ask the user to leave a review + += 8.5.50 (2022-02-22) = +* Increase WP tested up to version + += 8.5.0 (2022-02-11) = +* Add api to hide review banner + += 8.4.662 (2022-02-04) = +* Remove "shortcode" property from form definition as it was not used anywhere + += 8.4.598 (2022-01-25) = +* Add sandbox attribute to iframe + += 8.4.463 (2021-12-16) = +* Store activation time in the database. This will be needed to show contextual suggestions at the right time in the future. + += 8.4.353 (2021-11-29) = +* Add rel='noopener' to target _blank link + += 8.4.344 (2021-11-23) = +* Replace jQuery .unbind with .off +* Replace rand with wp_rand +* Fix Gutenberg block not showing due to a js error + += 8.4.302 (2021-10-21) = +* Fix for search function in HubSpot Gutenberg block + diff --git a/wp/wp-content/plugins/leadin/languages/leadin-da_DK.mo b/wp/wp-content/plugins/leadin/languages/leadin-da_DK.mo new file mode 100644 index 0000000000000000000000000000000000000000..4102cdbea4514d55d3f85ba1cbbb1ceff861f799 GIT binary patch literal 3542 zcmb7GO>ZPe87|23mHBI289WMc-PL_>`pv*CU$nkSIu-yPr0kB zo2u$Dqp;!^aLj=puzP|_4&Y;y;l>G}NFXG{g-A$9NWcMs5Ik>p&x|c1Bv$f1)74e) z=Tq;~zkBS`YXbkC!ry1{7r%?2g!u8hSNH+^{0W}l5BwSM*lrv6A>a)l=hFi|35AlI>t&Afga_!O`Yya&7whjSX`Sz+LSu53Q;D`UQNQ#HG?^|&WF%*y~5iuTH3zrfjX?&vso zanC6@FHD(e`&F^0X4Uz1(d=6wZ5tEq+vvb5>PnZYplwoZC8xeyYFMG(UXLnoFg?-9 zL^iQW}sxouRP)u`!tgFY9Ox@3p)hcTv%<^Ja{bO^v#J3qN}RHdFqcQ zDlUz3;s9Ydaj1$Mo^2xf$}mYdxDkkhq$tdaRpYj;G&98L5l`Lu;6Rd^KLtnISAi{g z(NA?jPpp#0tAMnmi|e%d%iHUyCSlm;-FpnGU)#9p)p36^A%4k21j+FB{x1D7T-|=Qf#6!ccV*(Xr0bFvBUVW8zc8|V& zw0qd!KX{4m-(RcA7j=E21@MXbF-KdMXf!l^_ zvUW%M5DlEP-pG)D9eQ@C!&>iP z5Zy%611cWv$N*zo?XBxk`o~w9k@Hq-n+Zohf((+ z+S#VPgHCt<+P#C9c9+R^Xzi8gma@v#H9PJ_H}CAzR%^436kdsTpb{F5Zfaa9ing(t zKTO1J)|510a`buB$wpFqDz?W60e2pEk1`d<7$?T7me`Fhh)S!~swAZ}(k*|$+@5q4 zmkViu0}9#@=vv0(nZXQad8w_JHU<~xX9+u~CV!qSS$RQUqM9wNFDI1&9`7te3;ZAQ zlDhdrT)36GD1)&{llj?+a;ilK^+i2DJ;w7hs7q^U{9-J8FZop^FJDs$rP7j4`JQT% zDb6v|3Ds_(H4uej{y^+iWi1K(Ayk~*V>YJil+7P-#T2Sxa1PGG{2^kb9M^6#&3Op% z253(T?Lp9Z#E4!Dq?S0sbg^Dy{-??;l*fCXIk)r_mPy(wFs^f>Jo5)b5Qih<_jX2O zX(3e58&w^wemQ(yI0c$8?V&#NvsmFCSf)^dW^W_rAP!}9rIq8kcZApzrVmstp5!L> ztUl|QN~_+kBxvYL*jZ2n6|FRusmDRI#Jbax7} zS4k}oPv;L^8Y;F`)sCT<%MYiBwFU}@`lQlum#eQYZE6RNI6$DmUf0-&-AnA7M1{~oHCJE~mG52VkxBU3(9MdU5a WZmxXF2FB}b1l#b!;DZn}@Zvvl6f`ja literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-da_DK.po b/wp/wp-content/plugins/leadin/languages/leadin-da_DK.po new file mode 100644 index 00000000..2d7cb72c --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-da_DK.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Vi er ked af, at du forlader os" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Hvis du har et øjeblik, mÃ¥ du endelig fortælle os, hvorfor du deaktiverer dette plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Jeg kan ikke tilmelde mig eller logge pÃ¥" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Dette plugin pÃ¥virker webstedets performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Dette plugin virker ikke" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Dette plugin er ikke nyttigt" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Midlertidig deaktivering eller fejlfinding" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Andet" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Indsend og deaktiver" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Spring over og deaktiver" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Vælg den indholdstype, som HubSpot Analytics bruger til at spore denne side." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Slet automatisk" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blogindlæg" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Vidensartikel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landingsside" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listeside" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardside" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Brugervejledning" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularer" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Direkte chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontakter" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lister" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Rapportering" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Indstillinger" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Opgradering" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s kræver PHP %2$s eller højere. Opgrader WordPress først." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Dette HubSpot-plugin er ikke tilsluttet lige nu. Hvis du vil bruge HubSpot-værktøjer pÃ¥ dit WordPress-websted, skal du %1$stilslutte plugin'et nu%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Afvis denne meddelelse." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hej %1$s" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Har du 2 minutter til at udfylde %1$sdenne undersøgelse %2$som HubSpot for WordPress-plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Vi læser alle svar. Din feedback hjælper vores team med at foretage de forbedringer, som du har mest brug for." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress-team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Tak" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Giv en anmeldelse | link Ã¥bner pÃ¥ en ny fane" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formular" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Mødeplanlægger" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-de_AT.mo b/wp/wp-content/plugins/leadin/languages/leadin-de_AT.mo new file mode 100644 index 0000000000000000000000000000000000000000..148b2d8b2cc6cac836ef8814c847b457c2147f4b GIT binary patch literal 3721 zcmb7G&2J<}6>rG$WkL`EDSU~%Ly`rpdpx!_DDeWpUVCF}*Xz-a*G^U_q-Od}ckT34 zHC5Ff#z};bIKTmkOArUR1x`UiNGv%l2;n~fI7C81LU7;!0&xKeAtCs^nw}Xi?1j~O zeqGg7@8kEr`nM0Cdo{toPvGyP_{-iRt0Z~-tqXh?9>0(EJApq2egOD0;QN7Z0^bJw zWApy6z;jstquKu#@CB?NcpyncP7nAFUuz;oc>pFpwy-%u|0JqTlk z$47x516~B;NYVw$xm!T7GY8^-QsHL+JOREN_Uehn!6 zzX24xAHik0zk;7@z)L{!|EoaJ|4pFi{SNRU;P;yKkATA0Pk}E2e+iU(t1wpVe+DS) z7l5Lt1g-+V0u;G-fZqcC1o$-Y5QiTHegi1?e*hG{zW|D!UjxU$KLMWr_QaUY(&p5$ zJ|vf|3927_vc-Y>fi~)3M=I#PD$7Z-rTs{IPodDBjKwx5+asmRxGV~=)VHXI^Qa&k?X zOb&Hajs=Sn$W!q4So4@(rc#?B*@}&aF?eCH8&og3rhSw?y@-X!7H(fIR7mzX66dMg zFF319cF8`>aLEm>EHs-u>2fJaBF6QRIB<%>q*?@S!>Dos8$IlqMm{(s$uxf|v9`-W zB>AK})D=Cka2l@y+)^%^y49_FBOUHNalj*3qMR-#lxeSe@G}?IgR^z7WM5e1DC|5a zlo|SE;KH^kn>0;iG2g%y&d4Df0+M@72Ug6cS>S`Ur6+47K4%hw~y&55Bf+cb! z&7$UoMm?$|wlH?gJ-JU6J7oDt8B~;5IX^4;1S*P>xSaq&1uReH$Bq$*;;3u z95JG=GU8))6Fee64SacCOdmA0N(Gk{Ji=B$8q-J(Iob~MoIPeqQmJ(nV)7bXi?2u0 zD2`Zi)LRGfsA$i#QcpV0-UgNFZk8Uh^V*vAIfwVH%#@^Q_+@mUs;+?Z9Hf_CqOI-2 z&mV5z=IAwgPf_2e2DPQ{3{C3*hOmieskZd5zpnrS|{t+k3lv z+Y4S+TkR!jxnMdyK;^6>5?>U9l{S~CUnu7}e7X*U^r^);F@3-;-8OwIb-zwe^>kS3 z>>s3;5%d7Y(=8PsY^}X^F>ODYu72`h_2PQ_>GdZsUTC-1+ie_9Z=gF!beglzZ*Sa4 z_x97R4cggX-`l-#YybN8+}U+ndM@wm0`$Wlkumog%eI@bH(=yVzg*fAG&02tkdk+P*mWj&6I`gNbPWYXEI2ABT@NsWl99o8gm+z!a@l<{kV+sb}oMnJI)N z6{mO5UR$)O13Cf-t5t~z&G|T~QBGkom|8M;rUUXGLt|pj-X*(Wc&LoQ{Kb>OPe4D& z(d-+lt>{)}#ASvU93d2uebxvG?Zr_Q`J+OJT}FoLvLU#}KtbxkTJ+{+8Y>49W9UFc zLn6l55MwO5(Mpc+`G6#dsnA1HRv08hE@vYw&IANJuq&0EjM7Anm_wU925mL^=F4aj zm}z5;`2b$!?FeJ7#*G8jqnuCg3(1n$I}IMn0!pZPLRT`<>txS)onX$0$s=Jakg2(6geX!p}KjFBw3&EX_a z*5m^6UkWXjVM7#px6D*k4`{b=NW=M8UV79F#*=zZl4(W5n!G~jhw`a~q?Y@jl{$+d z3c4Vzk%9P}y(ykd9jKgeiXL>2~w71tiw#-3ym_G(EyRS hgaSOhBN+-Vw(&6sPhdShS8*EkGOrdyW?Db3\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Es ist schade, dass Sie uns verlassen." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Wenn Sie einen Moment Zeit haben, teilen Sie uns bitte mit, warum Sie das Plugin deaktivieren." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Ich kann mich nicht registrieren oder anmelden" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Das Plugin wirkt sich auf die Performance der Website aus" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Das Plugin funktioniert nicht." + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Das Plugin ist nicht praktisch." + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Vorübergehende Deaktivierung oder Fehlerbehebung" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Sonstige" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback ..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Senden und deaktivieren" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Überspringen und deaktivieren" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Wählen Sie den Content-Typ aus, den HubSpot Analytics zum Nachverfolgen dieser Seite verwendet." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Automatisch erkennen" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog-Beitrag" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Wissensdatenbankartikel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landingpage" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing-Seite" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardseite" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Benutzeranleitung" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulare" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Livechat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontaktdatensätze" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-Mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listen" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Berichterstattung" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Einstellungen" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgraden" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Das All-in-one-Marketing-Plug-in %1$s erfordert PHP %2$s oder höher. Bitte aktualisieren Sie zuerst WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Das HubSpot-Plug-in ist momentan nicht verknüpft. %1$sVerknüpfen Sie jetzt das Plug-in%2$s, um HubSpot-Tools auf Ihrer WordPress-Website zu verwenden." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorieren Sie diesen Hinweis." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hallo %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Haben Sie 2 Minuten Zeit, um an %1$sdieser Umfrage%2$s zum HubSpot Plugin für WordPress teilzunehmen?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Wir lesen jede Antwort. Ihr Feedback hilft unserem Team, die Verbesserungen vorzunehmen, die Sie am meisten benötigen." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot für WordPress-Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Danke," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Hinterlassen Sie uns eine Bewertung | Link wird in einem neuen Tab geöffnet" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formular" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meeting-Planer" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-de_CH_informal.mo b/wp/wp-content/plugins/leadin/languages/leadin-de_CH_informal.mo new file mode 100644 index 0000000000000000000000000000000000000000..148b2d8b2cc6cac836ef8814c847b457c2147f4b GIT binary patch literal 3721 zcmb7G&2J<}6>rG$WkL`EDSU~%Ly`rpdpx!_DDeWpUVCF}*Xz-a*G^U_q-Od}ckT34 zHC5Ff#z};bIKTmkOArUR1x`UiNGv%l2;n~fI7C81LU7;!0&xKeAtCs^nw}Xi?1j~O zeqGg7@8kEr`nM0Cdo{toPvGyP_{-iRt0Z~-tqXh?9>0(EJApq2egOD0;QN7Z0^bJw zWApy6z;jstquKu#@CB?NcpyncP7nAFUuz;oc>pFpwy-%u|0JqTlk z$47x516~B;NYVw$xm!T7GY8^-QsHL+JOREN_Uehn!6 zzX24xAHik0zk;7@z)L{!|EoaJ|4pFi{SNRU;P;yKkATA0Pk}E2e+iU(t1wpVe+DS) z7l5Lt1g-+V0u;G-fZqcC1o$-Y5QiTHegi1?e*hG{zW|D!UjxU$KLMWr_QaUY(&p5$ zJ|vf|3927_vc-Y>fi~)3M=I#PD$7Z-rTs{IPodDBjKwx5+asmRxGV~=)VHXI^Qa&k?X zOb&Hajs=Sn$W!q4So4@(rc#?B*@}&aF?eCH8&og3rhSw?y@-X!7H(fIR7mzX66dMg zFF319cF8`>aLEm>EHs-u>2fJaBF6QRIB<%>q*?@S!>Dos8$IlqMm{(s$uxf|v9`-W zB>AK})D=Cka2l@y+)^%^y49_FBOUHNalj*3qMR-#lxeSe@G}?IgR^z7WM5e1DC|5a zlo|SE;KH^kn>0;iG2g%y&d4Df0+M@72Ug6cS>S`Ur6+47K4%hw~y&55Bf+cb! z&7$UoMm?$|wlH?gJ-JU6J7oDt8B~;5IX^4;1S*P>xSaq&1uReH$Bq$*;;3u z95JG=GU8))6Fee64SacCOdmA0N(Gk{Ji=B$8q-J(Iob~MoIPeqQmJ(nV)7bXi?2u0 zD2`Zi)LRGfsA$i#QcpV0-UgNFZk8Uh^V*vAIfwVH%#@^Q_+@mUs;+?Z9Hf_CqOI-2 z&mV5z=IAwgPf_2e2DPQ{3{C3*hOmieskZd5zpnrS|{t+k3lv z+Y4S+TkR!jxnMdyK;^6>5?>U9l{S~CUnu7}e7X*U^r^);F@3-;-8OwIb-zwe^>kS3 z>>s3;5%d7Y(=8PsY^}X^F>ODYu72`h_2PQ_>GdZsUTC-1+ie_9Z=gF!beglzZ*Sa4 z_x97R4cggX-`l-#YybN8+}U+ndM@wm0`$Wlkumog%eI@bH(=yVzg*fAG&02tkdk+P*mWj&6I`gNbPWYXEI2ABT@NsWl99o8gm+z!a@l<{kV+sb}oMnJI)N z6{mO5UR$)O13Cf-t5t~z&G|T~QBGkom|8M;rUUXGLt|pj-X*(Wc&LoQ{Kb>OPe4D& z(d-+lt>{)}#ASvU93d2uebxvG?Zr_Q`J+OJT}FoLvLU#}KtbxkTJ+{+8Y>49W9UFc zLn6l55MwO5(Mpc+`G6#dsnA1HRv08hE@vYw&IANJuq&0EjM7Anm_wU925mL^=F4aj zm}z5;`2b$!?FeJ7#*G8jqnuCg3(1n$I}IMn0!pZPLRT`<>txS)onX$0$s=Jakg2(6geX!p}KjFBw3&EX_a z*5m^6UkWXjVM7#px6D*k4`{b=NW=M8UV79F#*=zZl4(W5n!G~jhw`a~q?Y@jl{$+d z3c4Vzk%9P}y(ykd9jKgeiXL>2~w71tiw#-3ym_G(EyRS hgaSOhBN+-Vw(&6sPhdShS8*EkGOrdyW?Db3\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Es ist schade, dass Sie uns verlassen." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Wenn Sie einen Moment Zeit haben, teilen Sie uns bitte mit, warum Sie das Plugin deaktivieren." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Ich kann mich nicht registrieren oder anmelden" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Das Plugin wirkt sich auf die Performance der Website aus" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Das Plugin funktioniert nicht." + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Das Plugin ist nicht praktisch." + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Vorübergehende Deaktivierung oder Fehlerbehebung" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Sonstige" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback ..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Senden und deaktivieren" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Überspringen und deaktivieren" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Wählen Sie den Content-Typ aus, den HubSpot Analytics zum Nachverfolgen dieser Seite verwendet." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Automatisch erkennen" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog-Beitrag" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Wissensdatenbankartikel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landingpage" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing-Seite" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardseite" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Benutzeranleitung" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulare" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Livechat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontaktdatensätze" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-Mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listen" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Berichterstattung" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Einstellungen" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgraden" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Das All-in-one-Marketing-Plug-in %1$s erfordert PHP %2$s oder höher. Bitte aktualisieren Sie zuerst WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Das HubSpot-Plug-in ist momentan nicht verknüpft. %1$sVerknüpfen Sie jetzt das Plug-in%2$s, um HubSpot-Tools auf Ihrer WordPress-Website zu verwenden." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorieren Sie diesen Hinweis." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hallo %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Haben Sie 2 Minuten Zeit, um an %1$sdieser Umfrage%2$s zum HubSpot Plugin für WordPress teilzunehmen?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Wir lesen jede Antwort. Ihr Feedback hilft unserem Team, die Verbesserungen vorzunehmen, die Sie am meisten benötigen." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot für WordPress-Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Danke," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Hinterlassen Sie uns eine Bewertung | Link wird in einem neuen Tab geöffnet" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formular" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meeting-Planer" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-de_DE.mo b/wp/wp-content/plugins/leadin/languages/leadin-de_DE.mo new file mode 100644 index 0000000000000000000000000000000000000000..148b2d8b2cc6cac836ef8814c847b457c2147f4b GIT binary patch literal 3721 zcmb7G&2J<}6>rG$WkL`EDSU~%Ly`rpdpx!_DDeWpUVCF}*Xz-a*G^U_q-Od}ckT34 zHC5Ff#z};bIKTmkOArUR1x`UiNGv%l2;n~fI7C81LU7;!0&xKeAtCs^nw}Xi?1j~O zeqGg7@8kEr`nM0Cdo{toPvGyP_{-iRt0Z~-tqXh?9>0(EJApq2egOD0;QN7Z0^bJw zWApy6z;jstquKu#@CB?NcpyncP7nAFUuz;oc>pFpwy-%u|0JqTlk z$47x516~B;NYVw$xm!T7GY8^-QsHL+JOREN_Uehn!6 zzX24xAHik0zk;7@z)L{!|EoaJ|4pFi{SNRU;P;yKkATA0Pk}E2e+iU(t1wpVe+DS) z7l5Lt1g-+V0u;G-fZqcC1o$-Y5QiTHegi1?e*hG{zW|D!UjxU$KLMWr_QaUY(&p5$ zJ|vf|3927_vc-Y>fi~)3M=I#PD$7Z-rTs{IPodDBjKwx5+asmRxGV~=)VHXI^Qa&k?X zOb&Hajs=Sn$W!q4So4@(rc#?B*@}&aF?eCH8&og3rhSw?y@-X!7H(fIR7mzX66dMg zFF319cF8`>aLEm>EHs-u>2fJaBF6QRIB<%>q*?@S!>Dos8$IlqMm{(s$uxf|v9`-W zB>AK})D=Cka2l@y+)^%^y49_FBOUHNalj*3qMR-#lxeSe@G}?IgR^z7WM5e1DC|5a zlo|SE;KH^kn>0;iG2g%y&d4Df0+M@72Ug6cS>S`Ur6+47K4%hw~y&55Bf+cb! z&7$UoMm?$|wlH?gJ-JU6J7oDt8B~;5IX^4;1S*P>xSaq&1uReH$Bq$*;;3u z95JG=GU8))6Fee64SacCOdmA0N(Gk{Ji=B$8q-J(Iob~MoIPeqQmJ(nV)7bXi?2u0 zD2`Zi)LRGfsA$i#QcpV0-UgNFZk8Uh^V*vAIfwVH%#@^Q_+@mUs;+?Z9Hf_CqOI-2 z&mV5z=IAwgPf_2e2DPQ{3{C3*hOmieskZd5zpnrS|{t+k3lv z+Y4S+TkR!jxnMdyK;^6>5?>U9l{S~CUnu7}e7X*U^r^);F@3-;-8OwIb-zwe^>kS3 z>>s3;5%d7Y(=8PsY^}X^F>ODYu72`h_2PQ_>GdZsUTC-1+ie_9Z=gF!beglzZ*Sa4 z_x97R4cggX-`l-#YybN8+}U+ndM@wm0`$Wlkumog%eI@bH(=yVzg*fAG&02tkdk+P*mWj&6I`gNbPWYXEI2ABT@NsWl99o8gm+z!a@l<{kV+sb}oMnJI)N z6{mO5UR$)O13Cf-t5t~z&G|T~QBGkom|8M;rUUXGLt|pj-X*(Wc&LoQ{Kb>OPe4D& z(d-+lt>{)}#ASvU93d2uebxvG?Zr_Q`J+OJT}FoLvLU#}KtbxkTJ+{+8Y>49W9UFc zLn6l55MwO5(Mpc+`G6#dsnA1HRv08hE@vYw&IANJuq&0EjM7Anm_wU925mL^=F4aj zm}z5;`2b$!?FeJ7#*G8jqnuCg3(1n$I}IMn0!pZPLRT`<>txS)onX$0$s=Jakg2(6geX!p}KjFBw3&EX_a z*5m^6UkWXjVM7#px6D*k4`{b=NW=M8UV79F#*=zZl4(W5n!G~jhw`a~q?Y@jl{$+d z3c4Vzk%9P}y(ykd9jKgeiXL>2~w71tiw#-3ym_G(EyRS hgaSOhBN+-Vw(&6sPhdShS8*EkGOrdyW?Db3\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Es ist schade, dass Sie uns verlassen." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Wenn Sie einen Moment Zeit haben, teilen Sie uns bitte mit, warum Sie das Plugin deaktivieren." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Ich kann mich nicht registrieren oder anmelden" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Das Plugin wirkt sich auf die Performance der Website aus" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Das Plugin funktioniert nicht." + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Das Plugin ist nicht praktisch." + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Vorübergehende Deaktivierung oder Fehlerbehebung" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Sonstige" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback ..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Senden und deaktivieren" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Überspringen und deaktivieren" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Wählen Sie den Content-Typ aus, den HubSpot Analytics zum Nachverfolgen dieser Seite verwendet." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Automatisch erkennen" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog-Beitrag" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Wissensdatenbankartikel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landingpage" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing-Seite" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardseite" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Benutzeranleitung" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulare" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Livechat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontaktdatensätze" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-Mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listen" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Berichterstattung" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Einstellungen" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgraden" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Das All-in-one-Marketing-Plug-in %1$s erfordert PHP %2$s oder höher. Bitte aktualisieren Sie zuerst WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Das HubSpot-Plug-in ist momentan nicht verknüpft. %1$sVerknüpfen Sie jetzt das Plug-in%2$s, um HubSpot-Tools auf Ihrer WordPress-Website zu verwenden." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorieren Sie diesen Hinweis." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hallo %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Haben Sie 2 Minuten Zeit, um an %1$sdieser Umfrage%2$s zum HubSpot Plugin für WordPress teilzunehmen?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Wir lesen jede Antwort. Ihr Feedback hilft unserem Team, die Verbesserungen vorzunehmen, die Sie am meisten benötigen." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot für WordPress-Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Danke," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Hinterlassen Sie uns eine Bewertung | Link wird in einem neuen Tab geöffnet" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formular" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meeting-Planer" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-de_DE_formal.mo b/wp/wp-content/plugins/leadin/languages/leadin-de_DE_formal.mo new file mode 100644 index 0000000000000000000000000000000000000000..148b2d8b2cc6cac836ef8814c847b457c2147f4b GIT binary patch literal 3721 zcmb7G&2J<}6>rG$WkL`EDSU~%Ly`rpdpx!_DDeWpUVCF}*Xz-a*G^U_q-Od}ckT34 zHC5Ff#z};bIKTmkOArUR1x`UiNGv%l2;n~fI7C81LU7;!0&xKeAtCs^nw}Xi?1j~O zeqGg7@8kEr`nM0Cdo{toPvGyP_{-iRt0Z~-tqXh?9>0(EJApq2egOD0;QN7Z0^bJw zWApy6z;jstquKu#@CB?NcpyncP7nAFUuz;oc>pFpwy-%u|0JqTlk z$47x516~B;NYVw$xm!T7GY8^-QsHL+JOREN_Uehn!6 zzX24xAHik0zk;7@z)L{!|EoaJ|4pFi{SNRU;P;yKkATA0Pk}E2e+iU(t1wpVe+DS) z7l5Lt1g-+V0u;G-fZqcC1o$-Y5QiTHegi1?e*hG{zW|D!UjxU$KLMWr_QaUY(&p5$ zJ|vf|3927_vc-Y>fi~)3M=I#PD$7Z-rTs{IPodDBjKwx5+asmRxGV~=)VHXI^Qa&k?X zOb&Hajs=Sn$W!q4So4@(rc#?B*@}&aF?eCH8&og3rhSw?y@-X!7H(fIR7mzX66dMg zFF319cF8`>aLEm>EHs-u>2fJaBF6QRIB<%>q*?@S!>Dos8$IlqMm{(s$uxf|v9`-W zB>AK})D=Cka2l@y+)^%^y49_FBOUHNalj*3qMR-#lxeSe@G}?IgR^z7WM5e1DC|5a zlo|SE;KH^kn>0;iG2g%y&d4Df0+M@72Ug6cS>S`Ur6+47K4%hw~y&55Bf+cb! z&7$UoMm?$|wlH?gJ-JU6J7oDt8B~;5IX^4;1S*P>xSaq&1uReH$Bq$*;;3u z95JG=GU8))6Fee64SacCOdmA0N(Gk{Ji=B$8q-J(Iob~MoIPeqQmJ(nV)7bXi?2u0 zD2`Zi)LRGfsA$i#QcpV0-UgNFZk8Uh^V*vAIfwVH%#@^Q_+@mUs;+?Z9Hf_CqOI-2 z&mV5z=IAwgPf_2e2DPQ{3{C3*hOmieskZd5zpnrS|{t+k3lv z+Y4S+TkR!jxnMdyK;^6>5?>U9l{S~CUnu7}e7X*U^r^);F@3-;-8OwIb-zwe^>kS3 z>>s3;5%d7Y(=8PsY^}X^F>ODYu72`h_2PQ_>GdZsUTC-1+ie_9Z=gF!beglzZ*Sa4 z_x97R4cggX-`l-#YybN8+}U+ndM@wm0`$Wlkumog%eI@bH(=yVzg*fAG&02tkdk+P*mWj&6I`gNbPWYXEI2ABT@NsWl99o8gm+z!a@l<{kV+sb}oMnJI)N z6{mO5UR$)O13Cf-t5t~z&G|T~QBGkom|8M;rUUXGLt|pj-X*(Wc&LoQ{Kb>OPe4D& z(d-+lt>{)}#ASvU93d2uebxvG?Zr_Q`J+OJT}FoLvLU#}KtbxkTJ+{+8Y>49W9UFc zLn6l55MwO5(Mpc+`G6#dsnA1HRv08hE@vYw&IANJuq&0EjM7Anm_wU925mL^=F4aj zm}z5;`2b$!?FeJ7#*G8jqnuCg3(1n$I}IMn0!pZPLRT`<>txS)onX$0$s=Jakg2(6geX!p}KjFBw3&EX_a z*5m^6UkWXjVM7#px6D*k4`{b=NW=M8UV79F#*=zZl4(W5n!G~jhw`a~q?Y@jl{$+d z3c4Vzk%9P}y(ykd9jKgeiXL>2~w71tiw#-3ym_G(EyRS hgaSOhBN+-Vw(&6sPhdShS8*EkGOrdyW?Db3\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Es ist schade, dass Sie uns verlassen." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Wenn Sie einen Moment Zeit haben, teilen Sie uns bitte mit, warum Sie das Plugin deaktivieren." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Ich kann mich nicht registrieren oder anmelden" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Das Plugin wirkt sich auf die Performance der Website aus" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Das Plugin funktioniert nicht." + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Das Plugin ist nicht praktisch." + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Vorübergehende Deaktivierung oder Fehlerbehebung" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Sonstige" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback ..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Senden und deaktivieren" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Überspringen und deaktivieren" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Wählen Sie den Content-Typ aus, den HubSpot Analytics zum Nachverfolgen dieser Seite verwendet." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Automatisch erkennen" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog-Beitrag" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Wissensdatenbankartikel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landingpage" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing-Seite" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardseite" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Benutzeranleitung" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulare" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Livechat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontaktdatensätze" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-Mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listen" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Berichterstattung" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Einstellungen" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgraden" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Das All-in-one-Marketing-Plug-in %1$s erfordert PHP %2$s oder höher. Bitte aktualisieren Sie zuerst WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Das HubSpot-Plug-in ist momentan nicht verknüpft. %1$sVerknüpfen Sie jetzt das Plug-in%2$s, um HubSpot-Tools auf Ihrer WordPress-Website zu verwenden." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorieren Sie diesen Hinweis." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hallo %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Haben Sie 2 Minuten Zeit, um an %1$sdieser Umfrage%2$s zum HubSpot Plugin für WordPress teilzunehmen?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Wir lesen jede Antwort. Ihr Feedback hilft unserem Team, die Verbesserungen vorzunehmen, die Sie am meisten benötigen." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot für WordPress-Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Danke," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Hinterlassen Sie uns eine Bewertung | Link wird in einem neuen Tab geöffnet" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formular" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meeting-Planer" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-en.mo b/wp/wp-content/plugins/leadin/languages/leadin-en.mo new file mode 100644 index 0000000000000000000000000000000000000000..e113af572a8ee8440a211ed6bb87456e38df6b58 GIT binary patch literal 3416 zcmds&O^6&t6vs;wKeF+IM8VHP9TL~D+r6{PM&cw!cXu|~A-maOXOc~Vs5R3yJ>_&) zwN=%-4l#&V!DH~^)r%;C9?VH35D-r)iTNu*0T(Md+>P_pXe4EG4}4Qo7{$dZ~&eKDek?uGxh+u zAAAsOf<->y2*w_K0elstJiZ3Eq6R;Kr0-V*r}*12pgQg>ISL{KI{7r{la3sSxxf>g%~Am#IAIsOHt_}dYj{O(rIE(Q?kn(s9B)_kNRL8eKs^dE#)$wDH^n44R1}}qSU>_o=j&Fig$M->+ z_bCV|>~pXUUIHnPgT*E#Cgu&}JexDxi;j1!CcW%gMNd~N@T&kSozNZ}5 z24>0TQ=t-eNXn=!I(>G?*tGa^Y(cC^J}^0tjptK5RXX<)iw*CXG)oYG@1ES{3TH02 zYjUuAYM0}pZE}wgk}u@#W`?z0WBIDFQNv0E&yqY=`f0Wx2gUkvR?fRZK9eLtT?flr z@+D#W(kmSoQ@NEdiD?CxU&rK$^gBU!} zuzJyEi^>(=hYK-qFk$svPk6Q@i^4hH?DS-mC(^QI$gpfhW(JXU%$hQxCLwVhG!ByD zevoZ$+>92<02&?i40qmJG|8}kGE&==o;*3$?5m7FwwW{@d88$5G)$|Rw^QY>ozaph zlnASm0gsduZR8nK)x9-&JCUwu(4)}V>IvO<%3)1 zHovm*-k8L3qiKJx?nkG*9533dbaK^ZksoTaBJyTLm1eZJ5W6nhw4P_uqRUgEaiU1& z#$4(rsOaX&AMNYL_9?w%!o9NPGBt|G}+C3as#T&_twz)$q2MlL5wdbd2QyeE?k z8NuYy#yk~$S!jnmYt|$+DV=rUi{{l>RyS-IEz`dTF?Eyn(Vj12=k*pFYiN^T(e*KEKkeFCXP+&WsG3FIaN1ih|iZ zc0tQjdC&XIRVOA;ktn0LL}+Y0;qr_+bz)e|37j?@laWQ?e9*E&yF_?n3vqOO`GJkq zLAf%B(MXwlrZ+s`A>LaDv0leHdN-i6|F>5!)tBZs>oOTuM(CA`N(U{RoGNzWWfClu z-p@NdVV(3(<-Qy2+nh(zyV3^px?||vSNXoS@*|DqRxpQ6_o#SK6CTc{DpS)zWp6O~ zL~C-oT6wa%cY3T+sa7hO9IW8&K)X}UJvl$K5-cqTwHdy!TwSV\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We're sorry to see you go" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "If you have a moment, please let us know why you're deactivating the plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "I can't sign up or log in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "The plugin is impacting website performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "The plugin isn't working" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "The plugin isn't useful" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Temporarily disabling or troubleshooting" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Other" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Submit & deactivate" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Skip & deactivate" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Select the content type HubSpot Analytics uses to track this page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detect Automatically" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog Post" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Knowledge Article" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing Page" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standard Page" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "User Guide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Forms" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Email" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lists" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Settings" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher. Please upgrade WordPress first." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "The HubSpot plugin is not connected right now. To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Dismiss this notice." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We read every response. Your feedback helps our team make the improvements that you need the most." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Thanks," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Leave us a review | link opens in a new tab" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetings Scheduler" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-en_AU.mo b/wp/wp-content/plugins/leadin/languages/leadin-en_AU.mo new file mode 100644 index 0000000000000000000000000000000000000000..e113af572a8ee8440a211ed6bb87456e38df6b58 GIT binary patch literal 3416 zcmds&O^6&t6vs;wKeF+IM8VHP9TL~D+r6{PM&cw!cXu|~A-maOXOc~Vs5R3yJ>_&) zwN=%-4l#&V!DH~^)r%;C9?VH35D-r)iTNu*0T(Md+>P_pXe4EG4}4Qo7{$dZ~&eKDek?uGxh+u zAAAsOf<->y2*w_K0elstJiZ3Eq6R;Kr0-V*r}*12pgQg>ISL{KI{7r{la3sSxxf>g%~Am#IAIsOHt_}dYj{O(rIE(Q?kn(s9B)_kNRL8eKs^dE#)$wDH^n44R1}}qSU>_o=j&Fig$M->+ z_bCV|>~pXUUIHnPgT*E#Cgu&}JexDxi;j1!CcW%gMNd~N@T&kSozNZ}5 z24>0TQ=t-eNXn=!I(>G?*tGa^Y(cC^J}^0tjptK5RXX<)iw*CXG)oYG@1ES{3TH02 zYjUuAYM0}pZE}wgk}u@#W`?z0WBIDFQNv0E&yqY=`f0Wx2gUkvR?fRZK9eLtT?flr z@+D#W(kmSoQ@NEdiD?CxU&rK$^gBU!} zuzJyEi^>(=hYK-qFk$svPk6Q@i^4hH?DS-mC(^QI$gpfhW(JXU%$hQxCLwVhG!ByD zevoZ$+>92<02&?i40qmJG|8}kGE&==o;*3$?5m7FwwW{@d88$5G)$|Rw^QY>ozaph zlnASm0gsduZR8nK)x9-&JCUwu(4)}V>IvO<%3)1 zHovm*-k8L3qiKJx?nkG*9533dbaK^ZksoTaBJyTLm1eZJ5W6nhw4P_uqRUgEaiU1& z#$4(rsOaX&AMNYL_9?w%!o9NPGBt|G}+C3as#T&_twz)$q2MlL5wdbd2QyeE?k z8NuYy#yk~$S!jnmYt|$+DV=rUi{{l>RyS-IEz`dTF?Eyn(Vj12=k*pFYiN^T(e*KEKkeFCXP+&WsG3FIaN1ih|iZ zc0tQjdC&XIRVOA;ktn0LL}+Y0;qr_+bz)e|37j?@laWQ?e9*E&yF_?n3vqOO`GJkq zLAf%B(MXwlrZ+s`A>LaDv0leHdN-i6|F>5!)tBZs>oOTuM(CA`N(U{RoGNzWWfClu z-p@NdVV(3(<-Qy2+nh(zyV3^px?||vSNXoS@*|DqRxpQ6_o#SK6CTc{DpS)zWp6O~ zL~C-oT6wa%cY3T+sa7hO9IW8&K)X}UJvl$K5-cqTwHdy!TwSV\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We're sorry to see you go" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "If you have a moment, please let us know why you're deactivating the plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "I can't sign up or log in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "The plugin is impacting website performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "The plugin isn't working" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "The plugin isn't useful" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Temporarily disabling or troubleshooting" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Other" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Submit & deactivate" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Skip & deactivate" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Select the content type HubSpot Analytics uses to track this page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detect Automatically" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog Post" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Knowledge Article" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing Page" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standard Page" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "User Guide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Forms" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Email" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lists" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Settings" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher. Please upgrade WordPress first." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "The HubSpot plugin is not connected right now. To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Dismiss this notice." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We read every response. Your feedback helps our team make the improvements that you need the most." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Thanks," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Leave us a review | link opens in a new tab" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetings Scheduler" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-en_CA.mo b/wp/wp-content/plugins/leadin/languages/leadin-en_CA.mo new file mode 100644 index 0000000000000000000000000000000000000000..e113af572a8ee8440a211ed6bb87456e38df6b58 GIT binary patch literal 3416 zcmds&O^6&t6vs;wKeF+IM8VHP9TL~D+r6{PM&cw!cXu|~A-maOXOc~Vs5R3yJ>_&) zwN=%-4l#&V!DH~^)r%;C9?VH35D-r)iTNu*0T(Md+>P_pXe4EG4}4Qo7{$dZ~&eKDek?uGxh+u zAAAsOf<->y2*w_K0elstJiZ3Eq6R;Kr0-V*r}*12pgQg>ISL{KI{7r{la3sSxxf>g%~Am#IAIsOHt_}dYj{O(rIE(Q?kn(s9B)_kNRL8eKs^dE#)$wDH^n44R1}}qSU>_o=j&Fig$M->+ z_bCV|>~pXUUIHnPgT*E#Cgu&}JexDxi;j1!CcW%gMNd~N@T&kSozNZ}5 z24>0TQ=t-eNXn=!I(>G?*tGa^Y(cC^J}^0tjptK5RXX<)iw*CXG)oYG@1ES{3TH02 zYjUuAYM0}pZE}wgk}u@#W`?z0WBIDFQNv0E&yqY=`f0Wx2gUkvR?fRZK9eLtT?flr z@+D#W(kmSoQ@NEdiD?CxU&rK$^gBU!} zuzJyEi^>(=hYK-qFk$svPk6Q@i^4hH?DS-mC(^QI$gpfhW(JXU%$hQxCLwVhG!ByD zevoZ$+>92<02&?i40qmJG|8}kGE&==o;*3$?5m7FwwW{@d88$5G)$|Rw^QY>ozaph zlnASm0gsduZR8nK)x9-&JCUwu(4)}V>IvO<%3)1 zHovm*-k8L3qiKJx?nkG*9533dbaK^ZksoTaBJyTLm1eZJ5W6nhw4P_uqRUgEaiU1& z#$4(rsOaX&AMNYL_9?w%!o9NPGBt|G}+C3as#T&_twz)$q2MlL5wdbd2QyeE?k z8NuYy#yk~$S!jnmYt|$+DV=rUi{{l>RyS-IEz`dTF?Eyn(Vj12=k*pFYiN^T(e*KEKkeFCXP+&WsG3FIaN1ih|iZ zc0tQjdC&XIRVOA;ktn0LL}+Y0;qr_+bz)e|37j?@laWQ?e9*E&yF_?n3vqOO`GJkq zLAf%B(MXwlrZ+s`A>LaDv0leHdN-i6|F>5!)tBZs>oOTuM(CA`N(U{RoGNzWWfClu z-p@NdVV(3(<-Qy2+nh(zyV3^px?||vSNXoS@*|DqRxpQ6_o#SK6CTc{DpS)zWp6O~ zL~C-oT6wa%cY3T+sa7hO9IW8&K)X}UJvl$K5-cqTwHdy!TwSV\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We're sorry to see you go" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "If you have a moment, please let us know why you're deactivating the plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "I can't sign up or log in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "The plugin is impacting website performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "The plugin isn't working" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "The plugin isn't useful" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Temporarily disabling or troubleshooting" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Other" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Submit & deactivate" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Skip & deactivate" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Select the content type HubSpot Analytics uses to track this page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detect Automatically" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog Post" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Knowledge Article" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing Page" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standard Page" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "User Guide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Forms" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Email" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lists" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Settings" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher. Please upgrade WordPress first." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "The HubSpot plugin is not connected right now. To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Dismiss this notice." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We read every response. Your feedback helps our team make the improvements that you need the most." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Thanks," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Leave us a review | link opens in a new tab" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetings Scheduler" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-en_GB.mo b/wp/wp-content/plugins/leadin/languages/leadin-en_GB.mo new file mode 100644 index 0000000000000000000000000000000000000000..e113af572a8ee8440a211ed6bb87456e38df6b58 GIT binary patch literal 3416 zcmds&O^6&t6vs;wKeF+IM8VHP9TL~D+r6{PM&cw!cXu|~A-maOXOc~Vs5R3yJ>_&) zwN=%-4l#&V!DH~^)r%;C9?VH35D-r)iTNu*0T(Md+>P_pXe4EG4}4Qo7{$dZ~&eKDek?uGxh+u zAAAsOf<->y2*w_K0elstJiZ3Eq6R;Kr0-V*r}*12pgQg>ISL{KI{7r{la3sSxxf>g%~Am#IAIsOHt_}dYj{O(rIE(Q?kn(s9B)_kNRL8eKs^dE#)$wDH^n44R1}}qSU>_o=j&Fig$M->+ z_bCV|>~pXUUIHnPgT*E#Cgu&}JexDxi;j1!CcW%gMNd~N@T&kSozNZ}5 z24>0TQ=t-eNXn=!I(>G?*tGa^Y(cC^J}^0tjptK5RXX<)iw*CXG)oYG@1ES{3TH02 zYjUuAYM0}pZE}wgk}u@#W`?z0WBIDFQNv0E&yqY=`f0Wx2gUkvR?fRZK9eLtT?flr z@+D#W(kmSoQ@NEdiD?CxU&rK$^gBU!} zuzJyEi^>(=hYK-qFk$svPk6Q@i^4hH?DS-mC(^QI$gpfhW(JXU%$hQxCLwVhG!ByD zevoZ$+>92<02&?i40qmJG|8}kGE&==o;*3$?5m7FwwW{@d88$5G)$|Rw^QY>ozaph zlnASm0gsduZR8nK)x9-&JCUwu(4)}V>IvO<%3)1 zHovm*-k8L3qiKJx?nkG*9533dbaK^ZksoTaBJyTLm1eZJ5W6nhw4P_uqRUgEaiU1& z#$4(rsOaX&AMNYL_9?w%!o9NPGBt|G}+C3as#T&_twz)$q2MlL5wdbd2QyeE?k z8NuYy#yk~$S!jnmYt|$+DV=rUi{{l>RyS-IEz`dTF?Eyn(Vj12=k*pFYiN^T(e*KEKkeFCXP+&WsG3FIaN1ih|iZ zc0tQjdC&XIRVOA;ktn0LL}+Y0;qr_+bz)e|37j?@laWQ?e9*E&yF_?n3vqOO`GJkq zLAf%B(MXwlrZ+s`A>LaDv0leHdN-i6|F>5!)tBZs>oOTuM(CA`N(U{RoGNzWWfClu z-p@NdVV(3(<-Qy2+nh(zyV3^px?||vSNXoS@*|DqRxpQ6_o#SK6CTc{DpS)zWp6O~ zL~C-oT6wa%cY3T+sa7hO9IW8&K)X}UJvl$K5-cqTwHdy!TwSV\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We're sorry to see you go" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "If you have a moment, please let us know why you're deactivating the plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "I can't sign up or log in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "The plugin is impacting website performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "The plugin isn't working" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "The plugin isn't useful" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Temporarily disabling or troubleshooting" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Other" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Submit & deactivate" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Skip & deactivate" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Select the content type HubSpot Analytics uses to track this page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detect Automatically" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog Post" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Knowledge Article" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing Page" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standard Page" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "User Guide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Forms" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Email" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lists" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Settings" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher. Please upgrade WordPress first." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "The HubSpot plugin is not connected right now. To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Dismiss this notice." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We read every response. Your feedback helps our team make the improvements that you need the most." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Thanks," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Leave us a review | link opens in a new tab" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetings Scheduler" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-en_NZ.mo b/wp/wp-content/plugins/leadin/languages/leadin-en_NZ.mo new file mode 100644 index 0000000000000000000000000000000000000000..e113af572a8ee8440a211ed6bb87456e38df6b58 GIT binary patch literal 3416 zcmds&O^6&t6vs;wKeF+IM8VHP9TL~D+r6{PM&cw!cXu|~A-maOXOc~Vs5R3yJ>_&) zwN=%-4l#&V!DH~^)r%;C9?VH35D-r)iTNu*0T(Md+>P_pXe4EG4}4Qo7{$dZ~&eKDek?uGxh+u zAAAsOf<->y2*w_K0elstJiZ3Eq6R;Kr0-V*r}*12pgQg>ISL{KI{7r{la3sSxxf>g%~Am#IAIsOHt_}dYj{O(rIE(Q?kn(s9B)_kNRL8eKs^dE#)$wDH^n44R1}}qSU>_o=j&Fig$M->+ z_bCV|>~pXUUIHnPgT*E#Cgu&}JexDxi;j1!CcW%gMNd~N@T&kSozNZ}5 z24>0TQ=t-eNXn=!I(>G?*tGa^Y(cC^J}^0tjptK5RXX<)iw*CXG)oYG@1ES{3TH02 zYjUuAYM0}pZE}wgk}u@#W`?z0WBIDFQNv0E&yqY=`f0Wx2gUkvR?fRZK9eLtT?flr z@+D#W(kmSoQ@NEdiD?CxU&rK$^gBU!} zuzJyEi^>(=hYK-qFk$svPk6Q@i^4hH?DS-mC(^QI$gpfhW(JXU%$hQxCLwVhG!ByD zevoZ$+>92<02&?i40qmJG|8}kGE&==o;*3$?5m7FwwW{@d88$5G)$|Rw^QY>ozaph zlnASm0gsduZR8nK)x9-&JCUwu(4)}V>IvO<%3)1 zHovm*-k8L3qiKJx?nkG*9533dbaK^ZksoTaBJyTLm1eZJ5W6nhw4P_uqRUgEaiU1& z#$4(rsOaX&AMNYL_9?w%!o9NPGBt|G}+C3as#T&_twz)$q2MlL5wdbd2QyeE?k z8NuYy#yk~$S!jnmYt|$+DV=rUi{{l>RyS-IEz`dTF?Eyn(Vj12=k*pFYiN^T(e*KEKkeFCXP+&WsG3FIaN1ih|iZ zc0tQjdC&XIRVOA;ktn0LL}+Y0;qr_+bz)e|37j?@laWQ?e9*E&yF_?n3vqOO`GJkq zLAf%B(MXwlrZ+s`A>LaDv0leHdN-i6|F>5!)tBZs>oOTuM(CA`N(U{RoGNzWWfClu z-p@NdVV(3(<-Qy2+nh(zyV3^px?||vSNXoS@*|DqRxpQ6_o#SK6CTc{DpS)zWp6O~ zL~C-oT6wa%cY3T+sa7hO9IW8&K)X}UJvl$K5-cqTwHdy!TwSV\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We're sorry to see you go" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "If you have a moment, please let us know why you're deactivating the plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "I can't sign up or log in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "The plugin is impacting website performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "The plugin isn't working" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "The plugin isn't useful" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Temporarily disabling or troubleshooting" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Other" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Submit & deactivate" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Skip & deactivate" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Select the content type HubSpot Analytics uses to track this page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detect Automatically" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog Post" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Knowledge Article" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing Page" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standard Page" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "User Guide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Forms" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Email" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lists" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Settings" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher. Please upgrade WordPress first." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "The HubSpot plugin is not connected right now. To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Dismiss this notice." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We read every response. Your feedback helps our team make the improvements that you need the most." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Thanks," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Leave us a review | link opens in a new tab" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetings Scheduler" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-en_US.mo b/wp/wp-content/plugins/leadin/languages/leadin-en_US.mo new file mode 100644 index 0000000000000000000000000000000000000000..e113af572a8ee8440a211ed6bb87456e38df6b58 GIT binary patch literal 3416 zcmds&O^6&t6vs;wKeF+IM8VHP9TL~D+r6{PM&cw!cXu|~A-maOXOc~Vs5R3yJ>_&) zwN=%-4l#&V!DH~^)r%;C9?VH35D-r)iTNu*0T(Md+>P_pXe4EG4}4Qo7{$dZ~&eKDek?uGxh+u zAAAsOf<->y2*w_K0elstJiZ3Eq6R;Kr0-V*r}*12pgQg>ISL{KI{7r{la3sSxxf>g%~Am#IAIsOHt_}dYj{O(rIE(Q?kn(s9B)_kNRL8eKs^dE#)$wDH^n44R1}}qSU>_o=j&Fig$M->+ z_bCV|>~pXUUIHnPgT*E#Cgu&}JexDxi;j1!CcW%gMNd~N@T&kSozNZ}5 z24>0TQ=t-eNXn=!I(>G?*tGa^Y(cC^J}^0tjptK5RXX<)iw*CXG)oYG@1ES{3TH02 zYjUuAYM0}pZE}wgk}u@#W`?z0WBIDFQNv0E&yqY=`f0Wx2gUkvR?fRZK9eLtT?flr z@+D#W(kmSoQ@NEdiD?CxU&rK$^gBU!} zuzJyEi^>(=hYK-qFk$svPk6Q@i^4hH?DS-mC(^QI$gpfhW(JXU%$hQxCLwVhG!ByD zevoZ$+>92<02&?i40qmJG|8}kGE&==o;*3$?5m7FwwW{@d88$5G)$|Rw^QY>ozaph zlnASm0gsduZR8nK)x9-&JCUwu(4)}V>IvO<%3)1 zHovm*-k8L3qiKJx?nkG*9533dbaK^ZksoTaBJyTLm1eZJ5W6nhw4P_uqRUgEaiU1& z#$4(rsOaX&AMNYL_9?w%!o9NPGBt|G}+C3as#T&_twz)$q2MlL5wdbd2QyeE?k z8NuYy#yk~$S!jnmYt|$+DV=rUi{{l>RyS-IEz`dTF?Eyn(Vj12=k*pFYiN^T(e*KEKkeFCXP+&WsG3FIaN1ih|iZ zc0tQjdC&XIRVOA;ktn0LL}+Y0;qr_+bz)e|37j?@laWQ?e9*E&yF_?n3vqOO`GJkq zLAf%B(MXwlrZ+s`A>LaDv0leHdN-i6|F>5!)tBZs>oOTuM(CA`N(U{RoGNzWWfClu z-p@NdVV(3(<-Qy2+nh(zyV3^px?||vSNXoS@*|DqRxpQ6_o#SK6CTc{DpS)zWp6O~ zL~C-oT6wa%cY3T+sa7hO9IW8&K)X}UJvl$K5-cqTwHdy!TwSV\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We're sorry to see you go" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "If you have a moment, please let us know why you're deactivating the plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "I can't sign up or log in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "The plugin is impacting website performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "The plugin isn't working" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "The plugin isn't useful" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Temporarily disabling or troubleshooting" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Other" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Submit & deactivate" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Skip & deactivate" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Select the content type HubSpot Analytics uses to track this page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detect Automatically" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog Post" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Knowledge Article" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing Page" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standard Page" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "User Guide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Forms" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Email" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lists" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Settings" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher. Please upgrade WordPress first." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "The HubSpot plugin is not connected right now. To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Dismiss this notice." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We read every response. Your feedback helps our team make the improvements that you need the most." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Thanks," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Leave us a review | link opens in a new tab" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetings Scheduler" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-en_ZA.mo b/wp/wp-content/plugins/leadin/languages/leadin-en_ZA.mo new file mode 100644 index 0000000000000000000000000000000000000000..e113af572a8ee8440a211ed6bb87456e38df6b58 GIT binary patch literal 3416 zcmds&O^6&t6vs;wKeF+IM8VHP9TL~D+r6{PM&cw!cXu|~A-maOXOc~Vs5R3yJ>_&) zwN=%-4l#&V!DH~^)r%;C9?VH35D-r)iTNu*0T(Md+>P_pXe4EG4}4Qo7{$dZ~&eKDek?uGxh+u zAAAsOf<->y2*w_K0elstJiZ3Eq6R;Kr0-V*r}*12pgQg>ISL{KI{7r{la3sSxxf>g%~Am#IAIsOHt_}dYj{O(rIE(Q?kn(s9B)_kNRL8eKs^dE#)$wDH^n44R1}}qSU>_o=j&Fig$M->+ z_bCV|>~pXUUIHnPgT*E#Cgu&}JexDxi;j1!CcW%gMNd~N@T&kSozNZ}5 z24>0TQ=t-eNXn=!I(>G?*tGa^Y(cC^J}^0tjptK5RXX<)iw*CXG)oYG@1ES{3TH02 zYjUuAYM0}pZE}wgk}u@#W`?z0WBIDFQNv0E&yqY=`f0Wx2gUkvR?fRZK9eLtT?flr z@+D#W(kmSoQ@NEdiD?CxU&rK$^gBU!} zuzJyEi^>(=hYK-qFk$svPk6Q@i^4hH?DS-mC(^QI$gpfhW(JXU%$hQxCLwVhG!ByD zevoZ$+>92<02&?i40qmJG|8}kGE&==o;*3$?5m7FwwW{@d88$5G)$|Rw^QY>ozaph zlnASm0gsduZR8nK)x9-&JCUwu(4)}V>IvO<%3)1 zHovm*-k8L3qiKJx?nkG*9533dbaK^ZksoTaBJyTLm1eZJ5W6nhw4P_uqRUgEaiU1& z#$4(rsOaX&AMNYL_9?w%!o9NPGBt|G}+C3as#T&_twz)$q2MlL5wdbd2QyeE?k z8NuYy#yk~$S!jnmYt|$+DV=rUi{{l>RyS-IEz`dTF?Eyn(Vj12=k*pFYiN^T(e*KEKkeFCXP+&WsG3FIaN1ih|iZ zc0tQjdC&XIRVOA;ktn0LL}+Y0;qr_+bz)e|37j?@laWQ?e9*E&yF_?n3vqOO`GJkq zLAf%B(MXwlrZ+s`A>LaDv0leHdN-i6|F>5!)tBZs>oOTuM(CA`N(U{RoGNzWWfClu z-p@NdVV(3(<-Qy2+nh(zyV3^px?||vSNXoS@*|DqRxpQ6_o#SK6CTc{DpS)zWp6O~ zL~C-oT6wa%cY3T+sa7hO9IW8&K)X}UJvl$K5-cqTwHdy!TwSV\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We're sorry to see you go" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "If you have a moment, please let us know why you're deactivating the plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "I can't sign up or log in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "The plugin is impacting website performance" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "The plugin isn't working" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "The plugin isn't useful" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Temporarily disabling or troubleshooting" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Other" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Submit & deactivate" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Skip & deactivate" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Select the content type HubSpot Analytics uses to track this page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detect Automatically" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blog Post" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Knowledge Article" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listing Page" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standard Page" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "User Guide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Forms" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Email" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lists" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Settings" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher. Please upgrade WordPress first." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "The HubSpot plugin is not connected right now. To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Dismiss this notice." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We read every response. Your feedback helps our team make the improvements that you need the most." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Thanks," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Leave us a review | link opens in a new tab" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetings Scheduler" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_AR.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_AR.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_CL.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_CL.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_CO.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_CO.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_CR.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_CR.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_ES.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_ES.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_GT.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_GT.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_MX.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_MX.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_PE.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_PE.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-es_VE.mo b/wp/wp-content/plugins/leadin/languages/leadin-es_VE.mo new file mode 100644 index 0000000000000000000000000000000000000000..56623c8e18d73ad47ff5d376f5a08c5f2ca77459 GIT binary patch literal 3610 zcmb7G%a0sK87~|Y!U92rSUe@_kYFNj&yH746ptaW_HMkR?0QC?v7JQWQPcfRPkFnm z+EvxNOkyisIC6;;am7d+Ea3xi0Ob;t`3pGYgoHT20SN&I4iOT9-&Z}4U6Bhb&HlQo ztG>tYd-WflIQ_Q3-!u4q8Nci!yb|K)r&joJJU+zwG2pL(PXd1n{4DT&;75UfnZN%# z@HEyR%=iBd{0`QSJR$_k838{AEP$^81MrK$-_7^`3j6}r{{+4Sd>q0)1AGa}fNNL>;P-%U0@;s00#Ad3e*u}d|3EpPdlJU-`>z1M z1iT2u5pe_f3E*o$J~x@KJut)i&H4IIK-T*Y;J1Mv09npWT;hEPJPUjs$UOcO$ol>U zWF8-bk{5tyfb91W$oeNhh!Pga{!M|POuPkT-hK=u;7@>$10RJjzJCVDd_FT@Ujimr z_ke8AJ>Xs74}s4CPl5C^z>9P20XYu{$Z~!Fw7|E3%=al)cDb;*>{}ni6>EY@gBRNr zC=GI}4z^T5r>ZEXVq5!CdoRO8duc4TN$iwL7ve>tY^2fy@uGEQ{O854IwU!@wajgh zo3hlV4us2ArnamKD3DK|f67N;zIKN+eR}gLFV)D_0V+uD)}uj%yJPF*E$gzrBPg$m zI@ji#Vwa}z{<@f-TcF%3ill3jo*}uf+yMn`@_1A_x>IXNk^SAijM^Z2qVowk*)K?W zl693kmC-SUW9`7qhZ{2_Rq`tjJ4IKf%A5_->)b$&glr~O8_^v{A|}j;lBF%lgmril zHG&CQdwF2&kvy7A`Q%wgG9v^+AA)>X&vZ17ioR@=iLRnpq6Fr#W z#C57HG@D!usNf`F<5DCJoRVQ$tpc}YR568(9`-bm4-QGvw4P2p2I%GpYav#Z|WwYfX@WI-`OKUhj$MezaKd|y`NkmaQ^s3^8_d6x4DR*dW7fA^29J7D*2G$|`?c%<>wT4y9~5u&d$Nr&X7 zctn00`0@&yKAzXAoKR80BWwkvu`JaAMcZMXvxme<%C)XSOkRU)@pZ|K;udj^dg~w_ z742zJ>Z0%LZBUtXv*ac@udV4UIsDMdOe8lAzm5)6)fI4=gYu0xxJ$IG%Qt*oai(rGWNx6^P$p}8%7>9E%C4U;PfdI00e zwh9oo+1|X6w4Y7RKQ}yoq0_$DdG^A&cDvJV<8X2v-GQSsKl{qg*7an+muzpz-Ck$E zd+ycVwVkE29l7>$a+M6ZhO=A!~h$&TCF&0>H<9g z+sLBk(Tn%q9cozX7jwsAZYakskt-oXo$%<1I>@9oKQzN9C6_8#Tr5fu#xFWRl&~B` zm_W8rP33oZ1`K!xEY7Y5Pq3Mlgn?k}u^~jLp4AYNNH~HIt|hn9P^&_}u8vKh%IT7v zZ7rprv_zhmLf5RUYJyHjIa)fnEJ+%T&aYDqV&OGMMGUkI%n=NmPb9l8v)O~&%786& zQ;>x6k$39Z1CGY*z6US98A^tIT5!}7m_)OOX=|cExI#lS5h|cU6O7v&?dEu3l?=7A@6%pu3=#HsD&1$2lw z^@><7lEdt6fi^GEv@!HbuyK_Y0(TY>VkQ=ui8PGS\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Lamentamos verte partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si tiene un momento, déjanos saber por qué estás desactivando el plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "No puedo registrarme ni iniciar sesión" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "El plugin está afectando el rendimiento del sitio web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "El plugin no funciona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "El plugin no es útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desactivar temporalmente o resolver problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Otro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar y desactivar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Omitir y desactivar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleccionar el tipo de contenido que HubSpot Analytics utiliza para hacer seguimiento a esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automáticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Publicación de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artículo de conocimiento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Páginas de índice" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página estándar" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guía del usuario" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularios" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr " Contactos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Correo" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Informes" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configuración" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Adquirir versión superior" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot Marketing todo en uno %1$s requiere PHP %2$s o superior. Actualiza WordPress primero." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "El plugin de HubSpot no está conectado. %1$sConéctalo%2$s para usar las herramientas de HubSpot en tu portal de WordPress." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar esta notificación." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hola, %1$s:" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "¿Tienes 2 minutos para responder %1$sesta encuesta%2$s acerca del plugin de HubSpot para WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leemos todas las respuestas. Tus comentarios ayudan a nuestro equipo a realizar las mejoras que más necesitas." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot para WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Gracias" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Déjanos tu opinión | el enlace se abre en una nueva pestaña" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulario" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Programador de reuniones" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-fi.mo b/wp/wp-content/plugins/leadin/languages/leadin-fi.mo new file mode 100644 index 0000000000000000000000000000000000000000..1ebc6200af5ad3747f407a8d8ce71821e45c6ac5 GIT binary patch literal 3634 zcmb7`O>ZPe8OIBJRub_65aARl5+|g|ja)bwj)?gL9CAVeE=V9D@gfcgf#Cmi_jn8m2Ugzxxw@;K zdS3odm4EffrPl=heF6VJh5zZhcqGJ+-o4-l@avlxzaRVw_%ZNj;77r?!1sW^@4o*L zyoB-Jy7&JCU%>c*2ZUfdhv54_1AYSx;AQX^-TOa)pTzjD;12i@jC};W4}J(V;5D%B z#&3YU|Bpeo|5NZ0@aNt8x4QSg1lRHYw;;!H6^qzzAAAtJ335C`@bh2_vY+1rYw$IY z_kH-iLVO&20{jHH4>s|DOBe_6o8Wgqj^j7rCFJ1mAn)@pY|e2!2xocyWsv865#;xK zAltbQVu?^7euTjz11BK+|7(!<{T=us_$QF_IK*OppMweL!2$R~kn{3q@PptbJe~qS z4D!BT2Vp|I&@ltqzY0Vt#CJjbi0|WZ0R8~v`F{aF4gRAWUxqQl_zJiMZh}1TRq$2t zb+8X!MKV4M-UYc1FN4iI5L3kKpa$OnKLbAe5FR&;8`IGFAZ|Gu~RYmjgVoOdG)h^Q51zM#-+ZYrU zJ34YjX|Mr3x^l%g#(b$I@-X+4(1t^juov}sDM#oSK5>(4doaE#hbvMM6?sF zPU&Sb+UDd+Wj&n12aC5s9*SM<8|&>t3_M<8^{q?>v8S5EdD=h9R2q${!~kwo;jr}4}aRqhYBKT^;5F9`zo*{FZOd?(&rXI<5NIb zvP#>q_Tyop!+*{gsREwJN}HNe?d2ij9COw~<>H}HK6B70{2XP{=6)Gm_||5VS|PLh z7NMw=DyShq+@~~h>^98{ADlCuoaOpl)T7ryEjRM&j9e%d+hLhCJ1=(BMai{=v#08i z*Hft~sJxIC9mQUr&t*Nqi{ohC{{GZeIfwUrD_QZphm4lA`LRxun{n)ukz1oIgwn5FzmANgC7%*KSBPYZbO?a?Mfe#Q6;T6 zGPtU7j@y^Ma=tq0RwiQzsq{}}ZG-o4ZhZ~w?Knca3HSd0y?SqZZ*!5Cm0o{|k6dIr z8KHC5P>FA|!&2KP=qQtwSK+HM94C)2=CSL?s!BHPk>kE!qsI?*SQ-vS$t@H;Amhn~ z3^2CZU%ip^A4^ugG+Mc_*8lR_V>hn#`)mC^CMUOXI&gKmx%W2LZzp?$WMiGS25WoU z*X|FV+dL0;jh5~v&nT;^HfMK+$*tXOTJ5d$5yIVM1Gj`mp}QP6H;O)qCYRbraW4z1 z#!;hEoRYW}qz(|HZ0;6`0|19Z&|<4L`D{9yQkYE(K%2tp5PeVV&!$;EJ1ZePEr!xy zrRw#1Vi&vSIPw@djw>;+Ikbq2#u!Pt%)M@|orpaoNu5hc&f_Y>Q5R)<`@r;UYALV1 zGIed6OQCCdoR#O-PJ%VFDHi)6pCnv9x>-KI7Usl~g~pQtw+}khX&c(^TesES`1#JX1K-G8J;&rf8XRRaK4(#paPfPNNGr2Ie`iR5~1-s8$_jXC4ms z#7HZyTkR$822{gnv2L3Bc|D2Z+1Zri>TJqtf?6sQyUU5Up0I-vhY8EUOPb84MjMr- z7|o_)H{z;L#x>UFgV5Yp2^uAc9hbWZqqyKu=pds(+2x58dohaJl23xB5aK|ZMt@Bz z3<3ysU6y*8P7ow@*-T`6cOeugi35fEoXtj?7O9&=JXJ(D28rT{b+l^C@eqSd!_Wz| z2K;xXuzjw(D4;z~+W(w72#RgDso<#EPI;Tnrp5uOYD!BJEiD>oHm#rlu8!Ezn*CRH zE|zmSOM;Re%3No-La|?{=_JNVldVIKSS6V>5yiidgn5pjud^Iq5$d8*I5R#tbf8C0 z`7gZIG~%4=hi!ACp@X}wLSyKh>xH^2G){ZWJF;^8#nays^YiTgo$6O8l`C(Rd1VZ!(KKb9ZwMxfh#bCMX5*Lz(OuI=9f+ zA4`JDRg+@0f`kMtR%yu+;?f7`n\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Ikävää nähdä sinun lähtevän" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Jos sinulla on hetki aikaa, kerro meille miksi otat lisäosan pois käytöstä." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "En voi rekisteröityä tai kirjautua sisään" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Lisäosa vaikuttaa verkkosivuston suorituskykyyn" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Lisäosa ei toimi" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Tämä lisäosa ei ole hyödyllinen" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Otetaan väliaikaisesti pois käytöstä tai tehdään vianmääritystä" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Muu" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Palaute..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Lähetä ja ota pois käytöstä" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ohita ja ota pois käytöstä" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Valitse sisältötyyppi, jota HubSpot-analytiikka käyttää tämän sivun seurantaan." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Havaitse automaattisesti" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blogijulkaisu" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Tietämysartikkeli" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Aloitussivu" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Luettelosivu" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Vakiosivu" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Käyttöopas" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Lomakkeet" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live-chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Yhteystiedot" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Sähköposti" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Luettelot" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Raportointi" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Asetukset" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Päivitä" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpotin All-In-One-markkinointi %1$s vaatii PHP %2$s tai uudemman. Päivitä ensin WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "HubSpot-lisäosaa ei ole yhdistetty juuri nyt. Jos haluat käyttää HubSpot-työkaluja WordPress-sivustollasi, %1$syhdistä lisäosa nyt%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Hylkää tämä ilmoitus." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hei %1$s" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Onko sinulla kaksi minuuttia aikaa osallistua %1$stähän kyselyyn%2$s HubSpotin WordPress-lisäosasta? " + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Luemme jokaisen vastauksen. Palautteesi auttaa tiimiämme tekemään parannuksia, joita tarvitset eniten." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot WordPress Teamille" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Kiittäen" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Jätä meille arvostelu | linkki avautuu toisessa välilehdessä" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Lomake" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Kokousten aikatauluttaja" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-fr_BE.mo b/wp/wp-content/plugins/leadin/languages/leadin-fr_BE.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a476618772c82f0e5be908ec11c5c5c871d2631 GIT binary patch literal 3685 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-fr_BE.po b/wp/wp-content/plugins/leadin/languages/leadin-fr_BE.po new file mode 100644 index 00000000..f4af79d2 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-fr_BE.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Nous regrettons de vous voir partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si vous avez un moment, dites-nous pourquoi vous désactivez le plug-in." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Je ne parviens pas à m'inscrire ni à me connecter" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Le plug-in a un impact sur les performances du site web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Le plug-in ne fonctionne pas" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Le plug-in n'est pas utile" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Désactivation temporaire ou dépannage" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Autre" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Soumettre et désactiver" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignorer et désactiver" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Sélectionnez le type de contenu utilisé par HubSpot Analytics pour suivre cette page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Détecter automatiquement" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Article de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Article de connaissance" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Page de destination" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Page de listing" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Page standard" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guide d'utilisation" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulaires" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat en direct" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listes" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Paramètres" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Mettre à niveau" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Marketing Hub tout-en-un %1$s nécessite PHP %2$s ou une version ultérieure. Veuillez d'abord mettre à jour WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Le plug-in HubSpot n'est pas connecté pour le moment. Pour utiliser les outils HubSpot sur votre site WordPress, %1$sconnectez le plug-in maintenant%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorer cet avis." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Bonjour %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Avez-vous 2 minutes pour répondre à %1$scette enquête%2$s sur le plug-in HubSpot pour WordPress ?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Nous lisons chaque réponse. Votre feedback aide notre équipe à apporter les améliorations dont vous avez le plus besoin." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Équipe HubSpot pour WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Merci," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Nous laisser un avis | le lien s'ouvre dans un nouvel onglet" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulaire" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Planificateur de réunions" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-fr_CA.mo b/wp/wp-content/plugins/leadin/languages/leadin-fr_CA.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a476618772c82f0e5be908ec11c5c5c871d2631 GIT binary patch literal 3685 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-fr_CA.po b/wp/wp-content/plugins/leadin/languages/leadin-fr_CA.po new file mode 100644 index 00000000..f4af79d2 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-fr_CA.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Nous regrettons de vous voir partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si vous avez un moment, dites-nous pourquoi vous désactivez le plug-in." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Je ne parviens pas à m'inscrire ni à me connecter" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Le plug-in a un impact sur les performances du site web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Le plug-in ne fonctionne pas" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Le plug-in n'est pas utile" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Désactivation temporaire ou dépannage" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Autre" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Soumettre et désactiver" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignorer et désactiver" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Sélectionnez le type de contenu utilisé par HubSpot Analytics pour suivre cette page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Détecter automatiquement" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Article de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Article de connaissance" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Page de destination" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Page de listing" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Page standard" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guide d'utilisation" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulaires" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat en direct" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listes" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Paramètres" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Mettre à niveau" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Marketing Hub tout-en-un %1$s nécessite PHP %2$s ou une version ultérieure. Veuillez d'abord mettre à jour WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Le plug-in HubSpot n'est pas connecté pour le moment. Pour utiliser les outils HubSpot sur votre site WordPress, %1$sconnectez le plug-in maintenant%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorer cet avis." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Bonjour %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Avez-vous 2 minutes pour répondre à %1$scette enquête%2$s sur le plug-in HubSpot pour WordPress ?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Nous lisons chaque réponse. Votre feedback aide notre équipe à apporter les améliorations dont vous avez le plus besoin." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Équipe HubSpot pour WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Merci," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Nous laisser un avis | le lien s'ouvre dans un nouvel onglet" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulaire" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Planificateur de réunions" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-fr_FR.mo b/wp/wp-content/plugins/leadin/languages/leadin-fr_FR.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a476618772c82f0e5be908ec11c5c5c871d2631 GIT binary patch literal 3685 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-fr_FR.po b/wp/wp-content/plugins/leadin/languages/leadin-fr_FR.po new file mode 100644 index 00000000..f4af79d2 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-fr_FR.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Nous regrettons de vous voir partir" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Si vous avez un moment, dites-nous pourquoi vous désactivez le plug-in." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Je ne parviens pas à m'inscrire ni à me connecter" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Le plug-in a un impact sur les performances du site web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Le plug-in ne fonctionne pas" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Le plug-in n'est pas utile" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Désactivation temporaire ou dépannage" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Autre" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Soumettre et désactiver" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignorer et désactiver" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Sélectionnez le type de contenu utilisé par HubSpot Analytics pour suivre cette page." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Détecter automatiquement" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Article de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Article de connaissance" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Page de destination" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Page de listing" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Page standard" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guide d'utilisation" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulaires" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat en direct" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "contacts" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listes" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Reporting" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Paramètres" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Mettre à niveau" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Marketing Hub tout-en-un %1$s nécessite PHP %2$s ou une version ultérieure. Veuillez d'abord mettre à jour WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Le plug-in HubSpot n'est pas connecté pour le moment. Pour utiliser les outils HubSpot sur votre site WordPress, %1$sconnectez le plug-in maintenant%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorer cet avis." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Bonjour %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Avez-vous 2 minutes pour répondre à %1$scette enquête%2$s sur le plug-in HubSpot pour WordPress ?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Nous lisons chaque réponse. Votre feedback aide notre équipe à apporter les améliorations dont vous avez le plus besoin." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Équipe HubSpot pour WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Merci," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Nous laisser un avis | le lien s'ouvre dans un nouvel onglet" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulaire" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Planificateur de réunions" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-it_IT.mo b/wp/wp-content/plugins/leadin/languages/leadin-it_IT.mo new file mode 100644 index 0000000000000000000000000000000000000000..ad1948aad1e38e41367ddc25f5dbec7f624dbf67 GIT binary patch literal 3676 zcmb7G&2J<}6)(v0W!MBl2p6hd2kv0~&p?i29f#O%8+aLb4ao8IfnNZoK=$*y zz!~rkknerq{X%>a_%!fSzyYv|2e^jk2)qUS4v^#cBk&S(@J}G$^KV?v_g{vy4+9?t zegc>Pu|@0xKMZ^h2v@~vgI@=p;`tU3zv4}N@V&nV-U9vxNWjP81h3x!a=ZiJ0q_p+ zbHG0VIgfnFGl0uLj{63X&%F#}KQrLtz!Hei#Seh&=NrH?;4gt}=OKJ>z8?WT0K5w1 zyzT*yfTuvV`v&m)z@Gu11YW}>9RIAr?*TuG=N|$2{98Z={4MYiVCQ~(Tr)1Cz6(+8 zIveFE2C=828b#VEqswK~BWcV`?CFr}5GYP`AnUNKL^qe(h-Z~bhjMf-o^?L2K7!bn zQ$;gZQsyFUQ?6|p6%IQZxx6sAfF9d=G*rey>8EP;*!H7=DlDSDms+@Tt#iOYAbp5N~vLm`ulyVZiDHG z&L+xJ-zXUrl||-ds#Y!>Ymdy_+nEz3bAA=zr|8j0+Vx05XBKt{wmGrdir%Ru}Xd8EwzW70L!UgBKR7Q4Ym{4wd!#ARYpiaC&zlqc~Jm;sOmu z6P1=md2s|cyf{{c!_77m17(;b?A!>%K~NND#j1uEHAR_qD+B^uoOXK%H_GLe2079O%;=rdtJtgycWl**EtW0 zGsPSY&ci%9I;eT8i@tZ?LMoG9nw%;hw6mQ>4)58S3GvVf8<;>vSpXLtq*q_1z3%DD zr`_X0@8~AI{`y)?zT_}uI!&&XSx8P?hbA!=p|iP(jHCrmiI(%(W+)40>SmqHO>`UD zWbHtPn4EZNgOSns$~kUd`tss*(ws~(5UB`Xo74^7!rb}_&fBa6cN6aY|NHb|@36bf z%T}ws#v>P*PEOD{9aQ4m?6B1KX&OzW4=O%W#&Po0av!@sRzB(4k>kGa&{IPl*ZM~% z$u5c>k?~|tMi|>}Z(mK?Pb6DUo@`z1w7=AO;_8)lyVGuCb8?L7z}0E?zS!M4P7aTf zy&c*=>Kyj2ymWN4y9l;JYcC|%l~umZ*;zl?J?PPPYpabAUP$(!5*meWaxALR#%H@?U(KB`Xt=PQFsfE1U#O(1}g%MIjYCOj1EIC}mlRm@r z_VPCBsp!AouglR0J>f8IX@b0!&;V2;cN;XuD@{S-#%c(m2GS@f6qE;D9kH7yD|SyY zjUC5VcT;Ow;#3*9!17hg(hxGb(4=b0qvb|g;-V6vdo_X(RgS*K_9}4-nj{*R<%##$ z(t##{g+~gglg1kIgRv9}gzZGvD2tQ}Rw_!Rp(*@@WcZR9<*LnET0O=$mpUozC5ECd zEw0vL$3P?m_e=9ylb6-F(3Pz5s$}<~E-G`iz?Bg}ARkzg3kob{jtiH=Jmv~lrXryv zN=OC@}wXQvvKUfD6ILW9z2qj{GDbt(4APSR2zhy2+N!{!8&p#Qo)shrb2>iR#lCP#?nZYLl<+BM!1>#vC!}Qf`+IO b#$ZeARxMYcU#d-0j1_#_qKXp=JeT4>oK{(e literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-it_IT.po b/wp/wp-content/plugins/leadin/languages/leadin-it_IT.po new file mode 100644 index 00000000..761c90f4 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-it_IT.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Ci dispiace di vederti andare via" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Se hai un attimo, facci sapere per quale motivo stai disattivando il plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Non riesco a effettuare la registrazione o a effettuare l'accesso" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Il plugin sta influendo sulle prestazioni del sito web" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Il plugin non funziona" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Il plugin non è utile" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Sto disabilitando temporaneamente o sto effettuando la risoluzione dei problemi" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Altro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Invia e disattiva" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignora e disattiva" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Seleziona il tipo di contenuti usato da HubSpot Analytics per monitorare questa pagina." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Rileva automaticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Articolo blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Articolo della knowledge base" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Pagina di prospetto" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Pagina standard" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guida dell'utente" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Form" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat dal vivo" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contatti" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Elenchi" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Creazione di rapporti" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Impostazioni" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Esegui l'upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Marketing all-in-one di HubSpot %1$s richiede il PHP %2$s o superiore. Prima aggiorna WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Il plugin di HubSpot non è connesso al momento. Per utilizzare gli strumenti di HubSpot sul tuo sito WordPress, %1$sconnetti subito il plugin%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignora questo avviso." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hey %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Hai 2 minuti per completare %1$squesto sondaggio%2$s sul plugin HubSpot per WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Leggiamo ogni risposta. Il tuo feedback aiuta il nostro team ad apportare le migliorie di cui hai più bisogno." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Il team di HubSpot per WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Grazie," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Lasciaci una recensione | il link si apre in una nuova scheda" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Form" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Strumento di pianificazione delle riunioni" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-ja.mo b/wp/wp-content/plugins/leadin/languages/leadin-ja.mo new file mode 100644 index 0000000000000000000000000000000000000000..aef3f980fea3b780e22d907988464f6270ae6ad5 GIT binary patch literal 4135 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-ja.po b/wp/wp-content/plugins/leadin/languages/leadin-ja.po new file mode 100644 index 00000000..bfc7cb6b --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-ja.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "ã”利用ã‚りãŒã¨ã†ã”ã–ã„ã¾ã—ãŸ" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "ãŠæ™‚é–“ãŒã‚りã¾ã—ãŸã‚‰ã€ãƒ—ラグインを無効ã«ã™ã‚‹ç†ç”±ã‚’ãŠèžã‹ã›ãã ã•ã„。" + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "登録ã¾ãŸã¯ãƒ­ã‚°ã‚¤ãƒ³ã§ããªã„" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "ã“ã®ãƒ—ラグインã¯ã‚¦ã‚§ãƒ–サイトã®ãƒ‘フォーマンスã«å½±éŸ¿ã—ã¾ã™" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "ãƒ—ãƒ©ã‚°ã‚¤ãƒ³ãŒæ©Ÿèƒ½ã—ãªã„" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "プラグインãŒå½¹ã«ç«‹ãŸãªã„" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "一時的ãªç„¡åŠ¹åŒ–ã¾ãŸã¯ãƒˆãƒ©ãƒ–ルシューティング" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "ãã®ä»–" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "フィードãƒãƒƒã‚¯..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "é€ä¿¡ã—ã¦ç„¡åŠ¹åŒ–ã™ã‚‹" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "スキップã—ã¦ç„¡åŠ¹åŒ–ã™ã‚‹" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "HubSpotアナリティクスã§ã“ã®ãƒšãƒ¼ã‚¸ã®ãƒˆãƒ©ãƒƒã‚­ãƒ³ã‚°ã«ä½¿ç”¨ã•ã‚Œã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚¿ã‚¤ãƒ—ã‚’é¸æŠžã—ã¾ã™ã€‚" + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "è‡ªå‹•çš„ã«æ¤œå‡º" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "ブログ記事" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "ナレッジ記事" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "ランディングページ" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "リストページ" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "標準ページ" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "ユーザーガイド" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "フォーム" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "ウェブãƒãƒ£ãƒƒãƒˆ" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "コンタクト" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "Eメール" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "リスト" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "レãƒãƒ¼ãƒˆ" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "設定" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "アップグレード" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing%1$sã«ã¯PHP %2$s以上ãŒå¿…è¦ã§ã™ã€‚ã¾ãšWordPressをアップグレードã—ã¦ãã ã•ã„。" + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "HubSpotプラグインã¯ç¾åœ¨æŽ¥ç¶šã•れã¦ã„ã¾ã›ã‚“。WordPressサイトã§HubSpotツールを使用ã™ã‚‹ã«ã¯ã€%1$s今ã™ãプラグインを接続%2$sã—ã¦ãã ã•ã„。" + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "ã“ã®é€šçŸ¥ã‚’無視ã—ã¦ãã ã•ã„。" + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "%1$sã•ã‚“ã€ã“ã‚“ã«ã¡ã¯ã€‚" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "HubSpot for WordPressプラグインã«é–¢ã™ã‚‹%1$sã“ã®ã‚¢ãƒ³ã‚±ãƒ¼ãƒˆ%2$sã«ã”回答ã„ãŸã ããŸã‚ã€2分ã»ã©ãŠæ™‚é–“ã‚’ã„ãŸã ã„ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "回答ã¯å…¨ã¦ç›®ã‚’通ã•ã›ã¦ã„ãŸã ãã¾ã™ã€‚ã„ãŸã ã„ãŸã”æ„見ã¯ã€æœ€ã‚‚ã”è¦æœ›ã®å¤šã„機能強化ã«å½¹ç«‹ãŸã›ã¦ã„ãŸã ãã¾ã™ã€‚" + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPressãƒãƒ¼ãƒ " + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "ã©ã†ãžã‚ˆã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ã€‚" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "ãƒ¬ãƒ“ãƒ¥ãƒ¼ã‚’ãŠæ›¸ããã ã•ã„ | ãƒªãƒ³ã‚¯ãŒæ–°ã—ã„タブã§é–‹ãã¾ã™" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "フォーム" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "ミーティング日程調整" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-nb_NO.mo b/wp/wp-content/plugins/leadin/languages/leadin-nb_NO.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e7390716dc7137fa042969c03139e517680098e GIT binary patch literal 3497 zcmb7GOK&7s6~2(+_-`o9v0k7cs zLA(B6;OlsPO^x zJ^_mUp8`exDewv4uiEwd?fUP5>sbFQQ2e-xOCq-m{3vh(DE{<;&jMqh*!dQ44tyIZ zdLRFwQlA070Q@X)0IdB1F5x)FS~b@gqa*gppD08606?dQNJfxm9|{|FR*`~!Fm_zqC+ zU&G}e0=qy0{t_tn{sNSIJphVdk3y)}_aspKdItCf;9H_>BP$Z>7e1)X!UjDKUTtyU zaiH}o6uAy&tg~#cwv5k>_Y|halP$2!YCG2^Q!g>cBRx*lONGnpFRym=jA>p}loWy1 zC^xnWjLQX$i@eOBfSz7`%GbhtD;o`nyC@-@r zG4>m3hv)VEW!0WLM_SLaXxB#jmT6DBl!LKJeUu!3w=$4I{hdD5+8}yrk|{gtXRJL_ zRVGfyd`aQNI7H^%jTy4eWy`}(wM%1duLklav5-TMErB&w?M~`IOeG?k@*-y&mf=aQ z5s{$EQ)-K2I-btuu;=7A26U z;qA=uF@2vhV^b7_P7q5r@?s2ah0)C`!K_) z11<|_wuu^WCL|H##vl%yqA)Kn61Q%3HiwNK_B5Ff4kT&#Q;M|%4kF2`L262R=E7-g z1-PYM+_*KUM!5+OpBQouOSCiDoMPkk2!19K_27zXl(C-{;3(`IPPI+_GVsE-CYsa` zSON`5Z$(VM`_HN9FPmy#uNgl4to3ymf(CATp4 zm`8G-N_Jp*t}QA`tX!NGKEaAfmHq$vap6*N@0EtK>J<+f->gi`>JB6OIwqd6o8u?= zY2nLVF@4h3Dor^n;SrVsXiT|IxwakVxnjmbQmJ(vYVulKtG9D$6n9uS>I(<)sA$jU zrLOv}I6^3+-8edA=S^XIix|FZWkw`T!!M%)l~oB`aFE`3gSNI0zjL^KFxcIHncjSJ zsUcsq=Mxi08&%??VbP;$2&M0>tRNzBDP5vdxMamwr7(4+3FZo_4P~-)Tl)|Vowh#H zp>VZvQoi)n#qFrQ86_Z6>0g{S1>Qm5`a160qyl#%sr~nSdvAAd`ywu@o$ivfTtqq= zqH=o3#P`HtZR`s)o@(bge60$T==qCtV)}$#v~9?ZSmuqb*DcgG9G6t|tn*w9Pn4)GZk*X^;j| zma$Gqw^PN}^CCq;Q1}65FcXK-4?Ai*Durf4lZ`;joHOyX)9Ij59C5B&fXE%~D6Y=u z3zSeW8J(RFN+z3}or0w@WnxBwQ)OdN^6WI_%(HCv1 zIiE6|p?%Wy>~zkKJ9G$RGLyjVqHJpSazhcLJwkBacpf%ON>#S%iStcPDAkrsiqdtQ zpoKeVpd9OsP7EMS3S>gg2 zQAgdXto5lby+;3s$_%dwGC{OILVNMjcy5|n9%IZ{$(jUOCJ@^cYiB2=#UL<*-*!$D zZCN-W9wWVt1Q|-m>lWrTID;C%C^|b0jH0ONguQj-GN=Pxmp98*b;y}aT01SW*vk;I zXikgNMp`D3w8xRFQb5ZQ1hJm9!VNLscGNCh#IB4IVHXla=!LGCJWWIvqp9|Iz%~}m z51rUEF*1%Yo8%&r5ZPvB!X^_MiseI{ri*u&mURS$bxvVPT40m~!l??yNA~QbBMnn1 zUORJ6-w0Nw0TiPWTZ{Ll2%!pyC<+WiGT^l%$2JlyRZ+{XgVC@ZZ*^xUQWhQ6uV1r7 z*394?%HgGwY?)gNP_EEDyKH;;LqSZ$F|Oz0W%~mc)dgh zQ2rg-!Yc~gzEt)!J;J2IDd9fcn4O)tApQ#%haT={3yI{Wh9|n>rvH$=8 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-nb_NO.po b/wp/wp-content/plugins/leadin/languages/leadin-nb_NO.po new file mode 100644 index 00000000..e68c6944 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-nb_NO.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "SÃ¥ synd at du forlater oss" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Hvis du har tid, fortell oss gjerne hvorfor du deaktiverer plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Jeg kan ikke registrere meg eller logge inn" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Plugin pÃ¥virker nettstedytelsen" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Plugin virker ikke" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Plugin er ikke nyttig" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Midlertidig deaktivering eller feilsøking" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Annet" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Tilbakemelding..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Send inn & deaktiver" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Hopp over & deaktiver" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Velg innholdstypen som HubSpot-analyser bruker til Ã¥ spore denne siden." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Oppdag automatisk" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blogginnlegg" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Kunnskapsartikkel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Destinasjonsside" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Oppføringsside" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardside" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Brukerveiledning" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Skjemaer" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Direktechat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontakter" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-post" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lister" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Rapportering" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Innstillinger" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Oppgrader" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s krever PHP %2$s eller høyere. Vennligst oppgrader WordPress først." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "HubSpot-plugin er ikke tilkoblet akkurat nÃ¥. For Ã¥ bruke HubSpot-verktøy pÃ¥ WordPress-nettstedet ditt, mÃ¥ du %1$skoble til plugins nÃ¥%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Forkast dette varselet." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hei %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Har du 2 minutter til Ã¥ fullføre %1$sdenne undersøkelsen%2$s om HubSpot for WordPress-plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Vi leser alle svar. Din tilbakemelding hjelper teamet vÃ¥rt Ã¥ skape de forbedringene du trenger mest." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress-team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Takk," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Gi oss en anmeldelse | lenken Ã¥pnes i en ny fane" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Skjema" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Møteplanlegger" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-nl_NL.mo b/wp/wp-content/plugins/leadin/languages/leadin-nl_NL.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcb55813ac6f0173fcfcde1e87933394170b8110 GIT binary patch literal 3567 zcmb7G%Wot{8866&hZ7PJ-VdRYNV1@HkH^*q!X!Mr>&e<#J097y>ui98>gjKK%2Qp{ zsjBucd5Aj_CzL;d3j#&r0!KuSIUta7K%giW5J*T|Ktf0eeqVRbj2-sEYVDuv{XKr) z_v^PGy7ZdBzc1qFv-rv0!y_Sn^4=AG5P$v@;|~CT4*V$am%xtz-vZtX{7bw3H{d0V z|Jly}8~8lN_uL}{-;)C04>Z7U0VD9!z~8jBOtblQ{Ww71>}7E8p!tl0my#+qaELi#RTKe z0Xg3L!0!WZ0j~hx0djoqhfyB`J__W0PqyPe&|&;d;OBvF0>w4sayf7zitElsHHty( zP^3|m+f{Uhih87snTs7A3LS!s6CI>=m?qILls4iiqAXRTsd&oyqW%@ct~w(*ca_Xt zlv}dUwu*$qPL5nr8ayB$*?c(Emxaoo(fpCEhl5n9t0JBtxm%^jCC-kWmnY6=15bFo zG*zzc*TpW)>+|cP-M2uwZA`LflS51LK=~;}ZS#7o^z>q-af=-64rKiruAb<8LS7CG zsX($SbFVTw_uyE2MCR_s3`rHd6kw;=lOts>M;UZ(agW5^99V6|-nb6Lgd?J4;R>>G z9iG%LA`-F+a%$a7&L(r-dD)Z92#L^V2tKUma5RpKo7iV4%Smo~WWbQvS2p8K1C?Vy z{0Qz-@b*m8OuizGwo~a!vH`|m!D2S5RP5_e-`*U=AYclouTNAI2UG_x$m7w3vdWMb zhcLs7BPtzUwz)Va!z5wjMj#HHl5t+H61Q!YnZw2adz#Eg50W(eDcRa%ihNTL$5UO( zM^{c`DZ(w~v&OCCDlK%pxMN5KEKy#Yxy*D>Dg4Yi>e0I@H54We9EF|3iL%qM4qVyR zL{m0IX7epvp-g(PA%fg9Idp8cTqHg^XM%K=^K+h$K}TAz>D69xE?ImJ)2x1Z^`b6H z&Ml0cQOf6KNggaOlto3cmCL=%Cs;AA%>T~MoS(9Lw;IZdTLCn_QR$4t2_gF`lXOOY zjz7Uq3t#TA>EpIm<%CQLk1!QMV_B#v)waVt@6L!x%C)XyOV?D;)Ix^!FgPd ziVn0WbusYn6roJ^vg9`Tpq=e4V|drfOe8mru#OH?RwZ!BLHY8_a;Ja$h1>n37W5B3iFtGH}-x@+8W z5$R-z%IP5!-(`c9wok~>MEOARt5qB)kFWNz>0|Oq-;NyDeNR4~>bN#I946P1^oWQj zJ1XL`t?t&2`bFE;c7e=nkBncJH13_EBL!f1keXPF_7>0?u&z%zP@5958>pRK5SiSM%NKMyAS>UN9FVEb0iAfgKXORwhRvAOAH;_R0F2%Xc=N1j( zuHu4e?;d6G%j>J+LTt#LYSz3N3$1 zW+65K?OR(V`nVz`gdwB4`+~YE228#pr>-oUNiM7?b7Bd~AVhH0vT;={L#a`jK&vRo zFr61S@9Wb50~P-V5!b!j;B_fEUFz%Aj9y9Uo;2A8Lwnra-OcbAre;`Oc{c zeAdB-P~gP2ekYBBfddzOE_utz;`1t5$ysv^uiEMyIkABpAeZD\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "We vinden het jammer dat je weggaat" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "We willen graag weten waarom je de plug-in deactiveert." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Ik kan me niet registreren of niet inloggen" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "De plug-in beïnvloedt de websiteprestaties" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "De plug-in werkt niet" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "De plug-in is niet nuttig" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Tijdelijke uitschakeling of probleemoplossing" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Overig" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Verzenden en deactiveren" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Overslaan en deactiveren" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Selecteer het type content dat HubSpot Analytics moet gebruiken om deze pagina te volgen." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Automatisch detecteren" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blogbericht" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Kennisartikel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landingspagina" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Vermeldingspagina" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standaardpagina" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Gebruikershandleiding" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulieren" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Live chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contactpersonen" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lijsten" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Rapportage" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Instellingen" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgraden" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Voor HubSpot All-In-One Marketing %1$s is PHP %2$s of hoger vereist. Upgrade eerst WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "De HubSpot-plug-in is momenteel niet gekoppeld. Als je HubSpot-tools wilt gebruiken op je WordPress-site, %1$skoppel je nu de plug-in%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Sluit deze kennisgeving." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hallo %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Heb je 2 minuten om %1$sdeze enquête%2$s over de HubSpot voor WordPress-plugin in te vullen?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "We lezen elke reactie. Je feedback helpt ons team de verbeteringen aan te brengen die jij het meest nodig hebt." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress-team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Bedankt," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Een beoordeling plaatsen | koppeling wordt geopend op een nieuw tabblad" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulier" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Meetingplanner" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-nn_NO.mo b/wp/wp-content/plugins/leadin/languages/leadin-nn_NO.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e7390716dc7137fa042969c03139e517680098e GIT binary patch literal 3497 zcmb7GOK&7s6~2(+_-`o9v0k7cs zLA(B6;OlsPO^x zJ^_mUp8`exDewv4uiEwd?fUP5>sbFQQ2e-xOCq-m{3vh(DE{<;&jMqh*!dQ44tyIZ zdLRFwQlA070Q@X)0IdB1F5x)FS~b@gqa*gppD08606?dQNJfxm9|{|FR*`~!Fm_zqC+ zU&G}e0=qy0{t_tn{sNSIJphVdk3y)}_aspKdItCf;9H_>BP$Z>7e1)X!UjDKUTtyU zaiH}o6uAy&tg~#cwv5k>_Y|halP$2!YCG2^Q!g>cBRx*lONGnpFRym=jA>p}loWy1 zC^xnWjLQX$i@eOBfSz7`%GbhtD;o`nyC@-@r zG4>m3hv)VEW!0WLM_SLaXxB#jmT6DBl!LKJeUu!3w=$4I{hdD5+8}yrk|{gtXRJL_ zRVGfyd`aQNI7H^%jTy4eWy`}(wM%1duLklav5-TMErB&w?M~`IOeG?k@*-y&mf=aQ z5s{$EQ)-K2I-btuu;=7A26U z;qA=uF@2vhV^b7_P7q5r@?s2ah0)C`!K_) z11<|_wuu^WCL|H##vl%yqA)Kn61Q%3HiwNK_B5Ff4kT&#Q;M|%4kF2`L262R=E7-g z1-PYM+_*KUM!5+OpBQouOSCiDoMPkk2!19K_27zXl(C-{;3(`IPPI+_GVsE-CYsa` zSON`5Z$(VM`_HN9FPmy#uNgl4to3ymf(CATp4 zm`8G-N_Jp*t}QA`tX!NGKEaAfmHq$vap6*N@0EtK>J<+f->gi`>JB6OIwqd6o8u?= zY2nLVF@4h3Dor^n;SrVsXiT|IxwakVxnjmbQmJ(vYVulKtG9D$6n9uS>I(<)sA$jU zrLOv}I6^3+-8edA=S^XIix|FZWkw`T!!M%)l~oB`aFE`3gSNI0zjL^KFxcIHncjSJ zsUcsq=Mxi08&%??VbP;$2&M0>tRNzBDP5vdxMamwr7(4+3FZo_4P~-)Tl)|Vowh#H zp>VZvQoi)n#qFrQ86_Z6>0g{S1>Qm5`a160qyl#%sr~nSdvAAd`ywu@o$ivfTtqq= zqH=o3#P`HtZR`s)o@(bge60$T==qCtV)}$#v~9?ZSmuqb*DcgG9G6t|tn*w9Pn4)GZk*X^;j| zma$Gqw^PN}^CCq;Q1}65FcXK-4?Ai*Durf4lZ`;joHOyX)9Ij59C5B&fXE%~D6Y=u z3zSeW8J(RFN+z3}or0w@WnxBwQ)OdN^6WI_%(HCv1 zIiE6|p?%Wy>~zkKJ9G$RGLyjVqHJpSazhcLJwkBacpf%ON>#S%iStcPDAkrsiqdtQ zpoKeVpd9OsP7EMS3S>gg2 zQAgdXto5lby+;3s$_%dwGC{OILVNMjcy5|n9%IZ{$(jUOCJ@^cYiB2=#UL<*-*!$D zZCN-W9wWVt1Q|-m>lWrTID;C%C^|b0jH0ONguQj-GN=Pxmp98*b;y}aT01SW*vk;I zXikgNMp`D3w8xRFQb5ZQ1hJm9!VNLscGNCh#IB4IVHXla=!LGCJWWIvqp9|Iz%~}m z51rUEF*1%Yo8%&r5ZPvB!X^_MiseI{ri*u&mURS$bxvVPT40m~!l??yNA~QbBMnn1 zUORJ6-w0Nw0TiPWTZ{Ll2%!pyC<+WiGT^l%$2JlyRZ+{XgVC@ZZ*^xUQWhQ6uV1r7 z*394?%HgGwY?)gNP_EEDyKH;;LqSZ$F|Oz0W%~mc)dgh zQ2rg-!Yc~gzEt)!J;J2IDd9fcn4O)tApQ#%haT={3yI{Wh9|n>rvH$=8 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-nn_NO.po b/wp/wp-content/plugins/leadin/languages/leadin-nn_NO.po new file mode 100644 index 00000000..e68c6944 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-nn_NO.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "SÃ¥ synd at du forlater oss" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Hvis du har tid, fortell oss gjerne hvorfor du deaktiverer plugin." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Jeg kan ikke registrere meg eller logge inn" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Plugin pÃ¥virker nettstedytelsen" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Plugin virker ikke" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Plugin er ikke nyttig" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Midlertidig deaktivering eller feilsøking" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Annet" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Tilbakemelding..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Send inn & deaktiver" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Hopp over & deaktiver" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "Hubspot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Velg innholdstypen som HubSpot-analyser bruker til Ã¥ spore denne siden." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Oppdag automatisk" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blogginnlegg" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Kunnskapsartikkel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Destinasjonsside" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Oppføringsside" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardside" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Brukerveiledning" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Skjemaer" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Direktechat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontakter" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-post" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Lister" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Rapportering" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Innstillinger" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Oppgrader" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s krever PHP %2$s eller høyere. Vennligst oppgrader WordPress først." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "HubSpot-plugin er ikke tilkoblet akkurat nÃ¥. For Ã¥ bruke HubSpot-verktøy pÃ¥ WordPress-nettstedet ditt, mÃ¥ du %1$skoble til plugins nÃ¥%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Forkast dette varselet." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Hei %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Har du 2 minutter til Ã¥ fullføre %1$sdenne undersøkelsen%2$s om HubSpot for WordPress-plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Vi leser alle svar. Din tilbakemelding hjelper teamet vÃ¥rt Ã¥ skape de forbedringene du trenger mest." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot for WordPress-team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Takk," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Gi oss en anmeldelse | lenken Ã¥pnes i en ny fane" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Skjema" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Møteplanlegger" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pl_PL.mo b/wp/wp-content/plugins/leadin/languages/leadin-pl_PL.mo new file mode 100644 index 0000000000000000000000000000000000000000..957e8f432eb4a9c0229c001546f4186265b37b8d GIT binary patch literal 3614 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pl_PL.po b/wp/wp-content/plugins/leadin/languages/leadin-pl_PL.po new file mode 100644 index 00000000..ee011ca1 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-pl_PL.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Przykro nam, że rezygnujesz" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "JeÅ›li możesz poÅ›wiÄ™cić chwilÄ™, powiedz nam, dlaczego dezaktywujesz wtyczkÄ™." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Nie mogÄ™ siÄ™ zarejestrować lub zalogować" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Wtyczka wpÅ‚ywa na wydajność witryny internetowej" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Wtyczka nie dziaÅ‚a" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Wtyczka jest nieprzydatna" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Chwilowe wyłączenie lub rozwiÄ…zywanie problemu" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Inne" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Opinia…" + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "PrzeÅ›lij i dezaktywuj" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "PomiÅ„ i dezaktywuj" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Wybierz typ treÅ›ci, którÄ… wykorzystuje analityka HubSpot do Å›ledzenia tej strony." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Wykryj automatycznie" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Wpis na blogu" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "ArtykuÅ‚ w bazie wiedzy" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Strona docelowa" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Strona z listingiem" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Strona standardowa" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Przewodnik użytkownika" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formularze" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Czat na żywo" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontakty" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listy" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Raportowanie" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Ustawienia" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Uaktualnij" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "Uniwersalny marketing HubSpot %1$s wymaga wersji PHP %2$s lub wyższej. Najpierw uaktualnij WordPress." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Wtyczka HubSpot nie jest obecnie połączona. Aby korzystać z narzÄ™dzi HubSpot w witrynie WordPress, %1$społącz teraz wtyczkÄ™%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Odrzuć tÄ™ notatkÄ™." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Cześć, %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Czy masz 2 minuty na wypeÅ‚nienie %1$stej ankiety%2$s na temat wtyczki HubSpot for WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Czytamy wszystkie odpowiedzi. Twoja opinia pomaga naszemu zespoÅ‚owi wprowadzić ulepszenia, których najbardziej potrzebujesz." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot dla zespoÅ‚u WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "DziÄ™kujemy," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Napisz recenzjÄ™ | ÅÄ…cze otwiera siÄ™ w nowej karcie" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formularz" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Terminarz spotkaÅ„" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_AO.mo b/wp/wp-content/plugins/leadin/languages/leadin-pt_AO.mo new file mode 100644 index 0000000000000000000000000000000000000000..26d0791bb187a1fc51169d3a6550a5175f828a06 GIT binary patch literal 3582 zcmb7GO^+i-8Lp5GA45oB`9=uUA;|{qbdP7)pv3`#cgNYWc4lp@y|YP#2xa%{cE#OQ zovLcjIv zu6pbJc;5G!Kb$@DvcSJD;^*`DN$%n|A%5|`HGT+>zr_0ofxiKM0{A=N$ANDE?*aaG z`TZZjGkE{ka{b@HZ{hv!yM?)_rci5fKLJM z1!lnW!1?n1CqTacS3tJ^Ti{vX@0aUuEZ5%xwy^#eAjfeIhuCfd_z~bGAji`KJ`7BN z?B@@FbKuKBzW4t33-M{-qrlGq`@kw5;1=Ek@Y}$bfE>pkfoG6|cYy5we{eb9e=nTn z^PdFry)h75#3kT|ft@AZ0P;BnOo3*({w9#`{S$Bsd>bf%$8dtzPk4rS;(PdY1NbB0{lK?@eEyx~`+YFZ z`Tqj&OTb+qToVNRAM=Wz!pfmeX+_XPM+U;$LX?*N$}e+G(6nN4NS`XDY_ z6Vxbpu}^_ULAJ_Za~1SRW!YTpYoBZHWteC$jm0vFcCK_L9w$nMYBUv(TbEbAyf{!Z zl5<L z@}fW0g?wloG(H7{rCd^n)h~y+4tMStP!3O&)7e}m+N&YrOgZbp*>aeXpIC4dehwze zO#L=+?OUBqSreJvHwc9i>A;2na-Yb7Ww+&N;e)lAm)3B7Hu>mvpzVrYOCuY_VmnN; z>gM&0Ixo1kaQ1|Td|nph!17!fbQF8J+RJ=`7vnPf-}MvgrX1dlnzG`C2aT_kIw5hB zP<@q1nvt915&SfWDJLNmzPYo5j3fn5iP*Yy$Cm{&b*E0|4!R9( zvUR9@hz3p>pQ&J7L*(JrP|YL$1!*&0ci*up{^4-3CH6oY$TPq88tptyWE-tToJ?5#; z>Lj}8f^j%e)yPH@oeIuUNjuI7 z{KkBJw~wo>E2pk4e#|m!AVpT@gt6~OkORyI=}F(};QcY)M?2#ch<-gJ3gEX1mT=ELe$f5ekkwCp3b;CfGZLX`l41+GLq46d7@< z#ZTGK7i71VD8;2f5qX2LGbPhfE74orhNp_HXV56LUJjYUgBO)hwNipmB=8eE9F;~d zUL`NOC1e0%g)U$G8rg-$uv~%hoZX;{Q-1?3UPCw>kZ7{(ulMoFQ&G z!tV~DR)~BXB;+CYF8&%$Ze2H&1v432k=N5Y$52+ZNa^8;@{k4R6xR*U8wA6CPw;?M zYQ?ja-mzw`i6B*qHs-d9H$196P-9|2XWD>72#?GJkFXBQ8@nr~7eAMa*8={oT*tK$ z%(ygMMz*%nKFA&z!irti^Wl)7Q}}}np;Yn*zQnSRNLKQvo+h9Sb^#>L{lMS?}Y literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_AO.po b/wp/wp-content/plugins/leadin/languages/leadin-pt_AO.po new file mode 100644 index 00000000..5a8b1ab7 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-pt_AO.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "É uma pena vê-lo partir." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Se tiver um momento, informe-nos por que está desativando o plug-in." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Não consigo me inscrever ou fazer login" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "O plug-in está afetando o desempenho do site" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "O plug-in não está funcionando" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "O plug-in não é útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desativação temporária ou solução de problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Outro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar e desativar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignorar e desativar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Selecione o tipo de conteúdo que a HubSpot Analytics usa para rastrear esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automaticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Post de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artigo de conhecimento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Página de listagem" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página padrão" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guia do usuário" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulários" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contatos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Relatórios" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configurações" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "O software de marketing completo da HubSpot %1$s exige PHP %2$s ou superior. Atualize o WordPress primeiro." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "O plug-in da HubSpot não está conectado no momento. Para usar as ferramentas da HubSpot no seu site WordPress, %1$sconecte o plug-in agora%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar este aviso." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Olá, %1$s." + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Você tem 2 minutos para participar %1$sdesta pesquisa%2$s sobre o plug-in da HubSpot para o WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Lemos cada resposta. Seu feedback ajuda nossa equipe a fazer as melhorias que você mais precisa." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Equipe da HubSpot para WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Obrigado," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Deixe-nos uma avaliação | O link abre em uma nova guia" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulário" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Agendador de reuniões" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_BR.mo b/wp/wp-content/plugins/leadin/languages/leadin-pt_BR.mo new file mode 100644 index 0000000000000000000000000000000000000000..26d0791bb187a1fc51169d3a6550a5175f828a06 GIT binary patch literal 3582 zcmb7GO^+i-8Lp5GA45oB`9=uUA;|{qbdP7)pv3`#cgNYWc4lp@y|YP#2xa%{cE#OQ zovLcjIv zu6pbJc;5G!Kb$@DvcSJD;^*`DN$%n|A%5|`HGT+>zr_0ofxiKM0{A=N$ANDE?*aaG z`TZZjGkE{ka{b@HZ{hv!yM?)_rci5fKLJM z1!lnW!1?n1CqTacS3tJ^Ti{vX@0aUuEZ5%xwy^#eAjfeIhuCfd_z~bGAji`KJ`7BN z?B@@FbKuKBzW4t33-M{-qrlGq`@kw5;1=Ek@Y}$bfE>pkfoG6|cYy5we{eb9e=nTn z^PdFry)h75#3kT|ft@AZ0P;BnOo3*({w9#`{S$Bsd>bf%$8dtzPk4rS;(PdY1NbB0{lK?@eEyx~`+YFZ z`Tqj&OTb+qToVNRAM=Wz!pfmeX+_XPM+U;$LX?*N$}e+G(6nN4NS`XDY_ z6Vxbpu}^_ULAJ_Za~1SRW!YTpYoBZHWteC$jm0vFcCK_L9w$nMYBUv(TbEbAyf{!Z zl5<L z@}fW0g?wloG(H7{rCd^n)h~y+4tMStP!3O&)7e}m+N&YrOgZbp*>aeXpIC4dehwze zO#L=+?OUBqSreJvHwc9i>A;2na-Yb7Ww+&N;e)lAm)3B7Hu>mvpzVrYOCuY_VmnN; z>gM&0Ixo1kaQ1|Td|nph!17!fbQF8J+RJ=`7vnPf-}MvgrX1dlnzG`C2aT_kIw5hB zP<@q1nvt915&SfWDJLNmzPYo5j3fn5iP*Yy$Cm{&b*E0|4!R9( zvUR9@hz3p>pQ&J7L*(JrP|YL$1!*&0ci*up{^4-3CH6oY$TPq88tptyWE-tToJ?5#; z>Lj}8f^j%e)yPH@oeIuUNjuI7 z{KkBJw~wo>E2pk4e#|m!AVpT@gt6~OkORyI=}F(};QcY)M?2#ch<-gJ3gEX1mT=ELe$f5ekkwCp3b;CfGZLX`l41+GLq46d7@< z#ZTGK7i71VD8;2f5qX2LGbPhfE74orhNp_HXV56LUJjYUgBO)hwNipmB=8eE9F;~d zUL`NOC1e0%g)U$G8rg-$uv~%hoZX;{Q-1?3UPCw>kZ7{(ulMoFQ&G z!tV~DR)~BXB;+CYF8&%$Ze2H&1v432k=N5Y$52+ZNa^8;@{k4R6xR*U8wA6CPw;?M zYQ?ja-mzw`i6B*qHs-d9H$196P-9|2XWD>72#?GJkFXBQ8@nr~7eAMa*8={oT*tK$ z%(ygMMz*%nKFA&z!irti^Wl)7Q}}}np;Yn*zQnSRNLKQvo+h9Sb^#>L{lMS?}Y literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_BR.po b/wp/wp-content/plugins/leadin/languages/leadin-pt_BR.po new file mode 100644 index 00000000..5a8b1ab7 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-pt_BR.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "É uma pena vê-lo partir." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Se tiver um momento, informe-nos por que está desativando o plug-in." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Não consigo me inscrever ou fazer login" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "O plug-in está afetando o desempenho do site" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "O plug-in não está funcionando" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "O plug-in não é útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desativação temporária ou solução de problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Outro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar e desativar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignorar e desativar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Selecione o tipo de conteúdo que a HubSpot Analytics usa para rastrear esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automaticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Post de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artigo de conhecimento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Página de listagem" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página padrão" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guia do usuário" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulários" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contatos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Relatórios" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configurações" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "O software de marketing completo da HubSpot %1$s exige PHP %2$s ou superior. Atualize o WordPress primeiro." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "O plug-in da HubSpot não está conectado no momento. Para usar as ferramentas da HubSpot no seu site WordPress, %1$sconecte o plug-in agora%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar este aviso." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Olá, %1$s." + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Você tem 2 minutos para participar %1$sdesta pesquisa%2$s sobre o plug-in da HubSpot para o WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Lemos cada resposta. Seu feedback ajuda nossa equipe a fazer as melhorias que você mais precisa." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Equipe da HubSpot para WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Obrigado," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Deixe-nos uma avaliação | O link abre em uma nova guia" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulário" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Agendador de reuniões" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_PT.mo b/wp/wp-content/plugins/leadin/languages/leadin-pt_PT.mo new file mode 100644 index 0000000000000000000000000000000000000000..26d0791bb187a1fc51169d3a6550a5175f828a06 GIT binary patch literal 3582 zcmb7GO^+i-8Lp5GA45oB`9=uUA;|{qbdP7)pv3`#cgNYWc4lp@y|YP#2xa%{cE#OQ zovLcjIv zu6pbJc;5G!Kb$@DvcSJD;^*`DN$%n|A%5|`HGT+>zr_0ofxiKM0{A=N$ANDE?*aaG z`TZZjGkE{ka{b@HZ{hv!yM?)_rci5fKLJM z1!lnW!1?n1CqTacS3tJ^Ti{vX@0aUuEZ5%xwy^#eAjfeIhuCfd_z~bGAji`KJ`7BN z?B@@FbKuKBzW4t33-M{-qrlGq`@kw5;1=Ek@Y}$bfE>pkfoG6|cYy5we{eb9e=nTn z^PdFry)h75#3kT|ft@AZ0P;BnOo3*({w9#`{S$Bsd>bf%$8dtzPk4rS;(PdY1NbB0{lK?@eEyx~`+YFZ z`Tqj&OTb+qToVNRAM=Wz!pfmeX+_XPM+U;$LX?*N$}e+G(6nN4NS`XDY_ z6Vxbpu}^_ULAJ_Za~1SRW!YTpYoBZHWteC$jm0vFcCK_L9w$nMYBUv(TbEbAyf{!Z zl5<L z@}fW0g?wloG(H7{rCd^n)h~y+4tMStP!3O&)7e}m+N&YrOgZbp*>aeXpIC4dehwze zO#L=+?OUBqSreJvHwc9i>A;2na-Yb7Ww+&N;e)lAm)3B7Hu>mvpzVrYOCuY_VmnN; z>gM&0Ixo1kaQ1|Td|nph!17!fbQF8J+RJ=`7vnPf-}MvgrX1dlnzG`C2aT_kIw5hB zP<@q1nvt915&SfWDJLNmzPYo5j3fn5iP*Yy$Cm{&b*E0|4!R9( zvUR9@hz3p>pQ&J7L*(JrP|YL$1!*&0ci*up{^4-3CH6oY$TPq88tptyWE-tToJ?5#; z>Lj}8f^j%e)yPH@oeIuUNjuI7 z{KkBJw~wo>E2pk4e#|m!AVpT@gt6~OkORyI=}F(};QcY)M?2#ch<-gJ3gEX1mT=ELe$f5ekkwCp3b;CfGZLX`l41+GLq46d7@< z#ZTGK7i71VD8;2f5qX2LGbPhfE74orhNp_HXV56LUJjYUgBO)hwNipmB=8eE9F;~d zUL`NOC1e0%g)U$G8rg-$uv~%hoZX;{Q-1?3UPCw>kZ7{(ulMoFQ&G z!tV~DR)~BXB;+CYF8&%$Ze2H&1v432k=N5Y$52+ZNa^8;@{k4R6xR*U8wA6CPw;?M zYQ?ja-mzw`i6B*qHs-d9H$196P-9|2XWD>72#?GJkFXBQ8@nr~7eAMa*8={oT*tK$ z%(ygMMz*%nKFA&z!irti^Wl)7Q}}}np;Yn*zQnSRNLKQvo+h9Sb^#>L{lMS?}Y literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_PT.po b/wp/wp-content/plugins/leadin/languages/leadin-pt_PT.po new file mode 100644 index 00000000..5a8b1ab7 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-pt_PT.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "É uma pena vê-lo partir." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Se tiver um momento, informe-nos por que está desativando o plug-in." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Não consigo me inscrever ou fazer login" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "O plug-in está afetando o desempenho do site" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "O plug-in não está funcionando" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "O plug-in não é útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desativação temporária ou solução de problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Outro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar e desativar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignorar e desativar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Selecione o tipo de conteúdo que a HubSpot Analytics usa para rastrear esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automaticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Post de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artigo de conhecimento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Página de listagem" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página padrão" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guia do usuário" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulários" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contatos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Relatórios" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configurações" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "O software de marketing completo da HubSpot %1$s exige PHP %2$s ou superior. Atualize o WordPress primeiro." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "O plug-in da HubSpot não está conectado no momento. Para usar as ferramentas da HubSpot no seu site WordPress, %1$sconecte o plug-in agora%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar este aviso." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Olá, %1$s." + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Você tem 2 minutos para participar %1$sdesta pesquisa%2$s sobre o plug-in da HubSpot para o WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Lemos cada resposta. Seu feedback ajuda nossa equipe a fazer as melhorias que você mais precisa." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Equipe da HubSpot para WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Obrigado," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Deixe-nos uma avaliação | O link abre em uma nova guia" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulário" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Agendador de reuniões" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_PT_ao90.mo b/wp/wp-content/plugins/leadin/languages/leadin-pt_PT_ao90.mo new file mode 100644 index 0000000000000000000000000000000000000000..26d0791bb187a1fc51169d3a6550a5175f828a06 GIT binary patch literal 3582 zcmb7GO^+i-8Lp5GA45oB`9=uUA;|{qbdP7)pv3`#cgNYWc4lp@y|YP#2xa%{cE#OQ zovLcjIv zu6pbJc;5G!Kb$@DvcSJD;^*`DN$%n|A%5|`HGT+>zr_0ofxiKM0{A=N$ANDE?*aaG z`TZZjGkE{ka{b@HZ{hv!yM?)_rci5fKLJM z1!lnW!1?n1CqTacS3tJ^Ti{vX@0aUuEZ5%xwy^#eAjfeIhuCfd_z~bGAji`KJ`7BN z?B@@FbKuKBzW4t33-M{-qrlGq`@kw5;1=Ek@Y}$bfE>pkfoG6|cYy5we{eb9e=nTn z^PdFry)h75#3kT|ft@AZ0P;BnOo3*({w9#`{S$Bsd>bf%$8dtzPk4rS;(PdY1NbB0{lK?@eEyx~`+YFZ z`Tqj&OTb+qToVNRAM=Wz!pfmeX+_XPM+U;$LX?*N$}e+G(6nN4NS`XDY_ z6Vxbpu}^_ULAJ_Za~1SRW!YTpYoBZHWteC$jm0vFcCK_L9w$nMYBUv(TbEbAyf{!Z zl5<L z@}fW0g?wloG(H7{rCd^n)h~y+4tMStP!3O&)7e}m+N&YrOgZbp*>aeXpIC4dehwze zO#L=+?OUBqSreJvHwc9i>A;2na-Yb7Ww+&N;e)lAm)3B7Hu>mvpzVrYOCuY_VmnN; z>gM&0Ixo1kaQ1|Td|nph!17!fbQF8J+RJ=`7vnPf-}MvgrX1dlnzG`C2aT_kIw5hB zP<@q1nvt915&SfWDJLNmzPYo5j3fn5iP*Yy$Cm{&b*E0|4!R9( zvUR9@hz3p>pQ&J7L*(JrP|YL$1!*&0ci*up{^4-3CH6oY$TPq88tptyWE-tToJ?5#; z>Lj}8f^j%e)yPH@oeIuUNjuI7 z{KkBJw~wo>E2pk4e#|m!AVpT@gt6~OkORyI=}F(};QcY)M?2#ch<-gJ3gEX1mT=ELe$f5ekkwCp3b;CfGZLX`l41+GLq46d7@< z#ZTGK7i71VD8;2f5qX2LGbPhfE74orhNp_HXV56LUJjYUgBO)hwNipmB=8eE9F;~d zUL`NOC1e0%g)U$G8rg-$uv~%hoZX;{Q-1?3UPCw>kZ7{(ulMoFQ&G z!tV~DR)~BXB;+CYF8&%$Ze2H&1v432k=N5Y$52+ZNa^8;@{k4R6xR*U8wA6CPw;?M zYQ?ja-mzw`i6B*qHs-d9H$196P-9|2XWD>72#?GJkFXBQ8@nr~7eAMa*8={oT*tK$ z%(ygMMz*%nKFA&z!irti^Wl)7Q}}}np;Yn*zQnSRNLKQvo+h9Sb^#>L{lMS?}Y literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/languages/leadin-pt_PT_ao90.po b/wp/wp-content/plugins/leadin/languages/leadin-pt_PT_ao90.po new file mode 100644 index 00000000..5a8b1ab7 --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin-pt_PT_ao90.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "É uma pena vê-lo partir." + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Se tiver um momento, informe-nos por que está desativando o plug-in." + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Não consigo me inscrever ou fazer login" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "O plug-in está afetando o desempenho do site" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "O plug-in não está funcionando" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "O plug-in não é útil" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Desativação temporária ou solução de problemas" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Outro" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Enviar e desativar" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Ignorar e desativar" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Selecione o tipo de conteúdo que a HubSpot Analytics usa para rastrear esta página." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Detectar automaticamente" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Post de blog" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Artigo de conhecimento" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landing Page" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Página de listagem" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Página padrão" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Guia do usuário" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulários" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Chat" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Contatos" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-mail" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listas" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Relatórios" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Configurações" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Upgrade" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "O software de marketing completo da HubSpot %1$s exige PHP %2$s ou superior. Atualize o WordPress primeiro." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "O plug-in da HubSpot não está conectado no momento. Para usar as ferramentas da HubSpot no seu site WordPress, %1$sconecte o plug-in agora%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Ignorar este aviso." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "Olá, %1$s." + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Você tem 2 minutos para participar %1$sdesta pesquisa%2$s sobre o plug-in da HubSpot para o WordPress?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Lemos cada resposta. Seu feedback ajuda nossa equipe a fazer as melhorias que você mais precisa." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "Equipe da HubSpot para WordPress" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Obrigado," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Deixe-nos uma avaliação | O link abre em uma nova guia" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulário" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Agendador de reuniões" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-sv_SE.mo b/wp/wp-content/plugins/leadin/languages/leadin-sv_SE.mo new file mode 100644 index 0000000000000000000000000000000000000000..17a9cceb20511e03e9479cf5c2c616c927362640 GIT binary patch literal 3564 zcmb7`&u=706~_y*{4z-v0^&E)LrSuM-Q%&fL17Yp%&xuh?Aq(Wp0$(ZXU%j?PiasnX);s8R*1qp__uHX>MZG(@1*Fd(X4}KnuLDuuf;0$~P>tb!i`x4;jA zcR>6XvSA9|#d8U=-mimv@1MYLgMR}*4eme*UXQ^qf(ASWe*#_x-vrs-x4;(o2rlF2 zXF;eaZh{acz5(+7Z-Ovgq#*16B6u78A^0fx8p!ecee?dGAlq{Zo1X+f3-b9b@TcHS za25PB_&M-0F6Z+bAXE~&Aj>@lV{i--_#04MGkHS&+y`+zw?U4A7h5W*QJ`)a@=OLj zlE%!$miC$Up29?XvN@KO*v_Oj;)YW3P>xb@BX?Q#%ZnX3RW!>>O7cLPlxbTAg~K_G z@~kkpfS%ZR+*iVU>85J-#OC9k_MI-3HMUolKOYzERREDvQL)SS?*R z)()O|du0YnX8g)SPtl{1v{wRoomj{r$Y#fCD|+L~5fk=^q%6;r4QsHZx)GkB(o<^l z6FQm9c;^+TC{_rBp2GRip50L!E^c9;QE{TE>kt8>#ICe4Z|chg4~j2=JPB*3TAk1j z$Y`5VUMTCK3|?5Q200YF+E>!+gLv>*!s+W18N{Bd9Ovn9G*NMBloR_{@6#DP&1X2l|KT`SEDI(q0+M?N?tNu56hYkQ~yOY-6{)dfAdFdDA{%#tpy z%{nZHnGO%`7^n=INTX#}>+-s3D)H zLOEo4CM_z8wY=EN`2;P-rTPE$lia0j-kmyS#T}0{ey-H962}VBmocfSax?si{Isy; z1y+6B)GAGsDPR$n0@9c=nW{>6sOR#j;w0r-m!V2ti(}R6j2p$V;vDt4gLqW5SLdZJ z`Yyi*S4O=!I#SN-+;%Q}__mc95jPFLh7MGe1$dEz^wLYTwSDy6qwRyk-u`WR`Q?>5 z`Jz3a=s3DoCO#VE9h!tt_|Ez|JQ5e&C0e;l)_qxUrmok{Tt~H`OjdTK57EF$>x~S# ztCZvNrDrcrN6pD7K_V6Y>yx^`Tj*O~#d({Q$lZu*{~e#+>+NkX{Ibz%uW-wSr=tNX zr-Mj*pB0wcK0~94bY6w8lwlk_z1YX9kCltI?I`EE@6gjj9aj4LgXlVf9^mn4O9lwr zY;RtT+D}CrUm9#&?Xps_B(sM)w}z* zw=azC(8}}CbIK}L`|P+MUEl4|W^1Dj6P}N@FeNks-T1hgDCp8=ewrlW77vv)pmp3S ziZDM#2awHN@o5mDBU*Zn_M)=DZN-TC=hYT>nV%(2wFpkBMvjxqLkDX3(Bj!r&%g)OI-fiIPTZ6UrP89e!)~V% zG;)VPVd5rKUxhK0zzJ6DXY3&4RplRL$p?62jeJ@{Cz@(XU?F@o)#e_4D}-b!UF8%U zlvBhJ69P@QiC66(ajUdGm4%lW45>2JNMi4LuVabk?(~!pU&^z1ewHboN%K<-rTJM= zSc$Pj(8bPZY;;>i~_F;e>?1Pz^N%A&3EHE`X;_7u z+ZaBpY^{3G#*A506{|$d;%S&A1S2sx?IP_W%%dSZi@uL=a;oqbT78E+ zA4<05nrZPTBC?}V2%=aj@`6QFe#564T5&bSAKbg7eC7BdvgW}Z\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "Vi är ledsna att du lämnar oss" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "Om du har tid en stund, skulle vi gärna vilja veta varför du avaktiverar detta plugin" + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "Jag kan inte registrera mig eller logga in" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "Detta plugin pÃ¥verkar webbsidans prestanda" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "Detta plugin fungerar inte" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "Detta plugin är inte användbart" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "Avaktiverar eller felsöker temporärt" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "Annat" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "Feedback..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "Skicka in och avaktivera" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "Hoppa över och avaktivera" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "Välj den innehÃ¥llstyp som HubSpot Analytics använder för att spÃ¥ra sidan." + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "Upptäck automatiskt" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "Blogginlägg" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "Kunskapsartikel" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "Landningssida" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "Listningssida" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "Standardsida" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "Användarguide" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "Formulär" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "Livechatt" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "Kontakter" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "E-postmeddelande" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "Listor" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "Rapportering" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "Inställningar" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "Uppgradera" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot All-In-One Marketing %1$s kräver PHP %2$s eller högre. Uppgradera WordPress först." + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "Denna HubSpot-plugin är inte ansluten för tillfället. För att använda HubSpot-verktyg pÃ¥ din WordPress-webbplats ska du %1$sansluta plugin nu%2$s." + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "Avvisa detta meddelande." + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "HallÃ¥ där %1$s," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "Har du lite tid att fylla i %1$s denna undersökning%2$s om HubSpot för WordPress plugin?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "Vi läser alla svar. Din feedback hjälper vÃ¥rt team att göra de förbättringar du behöver mest." + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "HubSpot för WordPress Team" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "Tack," + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "Skriv ett omdöme | länk öppnas i en ny flik" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "Formulär" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "Mötesplanerare" diff --git a/wp/wp-content/plugins/leadin/languages/leadin-zh_TW.mo b/wp/wp-content/plugins/leadin/languages/leadin-zh_TW.mo new file mode 100644 index 0000000000000000000000000000000000000000..ac189e745659a79eaebbc951d26777db879cae95 GIT binary patch literal 3444 zcmb7_TWlOx8OIMaKrzs$1q20D9i*fI#p9dOs%#6?iQU?2T(4rsX)07Y>pk8bJUg?@ z%-XCA`+o)>#rkjH3*bXA_AvM| z_+?N9_k!tQJqHT^*Fj;w06qf#I@td(*#8Ku$36!|9(!;}*sTG-0`3PzK4I{CU=$Q_ zj(}-!929wm+!h;t`?iF_Uf zzYabgte*kJxn>Yo$kBkWf>Eqv;6vbVLE-l!umk)A{5BXu5MsXr6!EEQWtuwDbdi~Zk#2#x#& z%z}RhcY(*@MC3gWia76pBHurN!rsSV7x-83G4Qb0Bvp^mux?u9fUa3`r)81`X0c9- z)~75zAzMnPtg30!pqL58G^rI=OseVFW~4D8D=K-8v1ml@>?Y6YM#B4Lk|w!_(X^hT zG2NndG@)oIi{Y|PJM~0Tg#)^~c9-cHGgC$nOYg4RWl}k!r!2T&v?OX6;qZqOsT z5e*v*&XZ~?rf5GVO)Tx*uOz{_P11T*m6|oFRb#Y8HoBRmXff|7HQ3Kn3arp@Q@67mB}WfsbtKMqimbQF2z7)K0TOrCMU!r6LFGe+9_*$ENUt-4R$DOi^3`z zY3}k05f>GaX+lph&8kEuo<~%IrcBzc>Akc!o)#zf7>q_48lm){_=sMV!%v*NfO9H~ z#u%+P&;gZ^gR&MChr)6U3nrYvo{VgJ6xK_BNmWJbrh1ZTCW65O4ZD^cAqN%Hv+iHS z!o(JCABf8qX<=UBOxo5NXVH|(4AP1)404Dib$Hfdq>ZUUBqF#@2nR_~E1fJiu3nSX zG-5OnkKcLAfJl7(Bt^7s%o3JN($=jc>Eq?3@yJ42vJv&uYD+~Digo{qc9uXSvZ1JH z8dXd=f;?lQ>XxCWA}TZEIy8zn+vBp8)ug&6`mn8WsgcCDSC@wds#%>r%7f&`Rs$HX-BZQ%aPPBMjY_qm=b9BaJ_yPYt;o6`^+pvr6Mk zO(G*~S&%VJ$lc6~9pM>z4-+C4vo2encr{$}9w)?$;s_HOHFX2#G0`U59CZ>l^q--W zQgc-5V1}vaT4<|=pE{Wm6)z355^tbnDhY0BkiPaBZD{QHX-DIsw&vCs>Fcjo_~MgV z%$O3D_NQW|)UJnU+_I8psJa>zi6+HcqDnVn)n+Owlv?c&nBmv#NLV^>u$k6X)z%<|m!t-KB@{F|s4;Pm&pTrq z_RPAS8z?Q#5V!AA>E^}a>MC&t-sRbGp1Elkt`PTJ-pviUeG`0W!0nqXU6}i%?-+5X z*7(wxd;Df`?G~|5j5?RId}`XA%T`rY5$EDO&n<7FxG`hrhwydbgD2gw^Y+9sH+Qyp z=OkY~We<+Qyq#O$Qs4dG5k8xMQUhxd&`<%;}@>j+l%-K`#+qtWyp+P%; z1xY%KS>8X$M+QpoPnN$mBKz`}j_1$2lf$^OnZc$@Vh^4vow#V<7mDMyP2~hnM}U)=KOyZfuFv>r)ESHIOi;#54s2A z?nJ?z$+&O5P5AA_z|{Cev5<8Z#+}6+J~Cd5$N1F&o}Wjiq9HSxVqwY6W%>98Vi)?+ zx4?$KAbjKof^;&&e0G7@`Qy&gRr~ZCq9qgag!kVnuH^{q*wbTt<{CdUOx#R?kLEVZ zLCfD4q=HU6cQ>5dv-Z-g?*?7v{qOMQ+wR3_KAjb5IrB?=d6GCQH{8tWV&Sr11!B)n z*sHnC;6}%atFzl4PA(!!|0F8y_FYG#OSv=d)FnjgymN^-SKh*Zp^ehiG9MbjT|57- zUy!X}x0hN7AUg+%pjPMw0xfHRmTp~#o{ELx;>KO%RW`6P$NN|OehQJ5Afb^PLD{#7 zStwWJy4|6@bP2Bb#x?iCUEjVvKIk0ZxbIN0Fydww;PSp*UubS7TinQ_V?waRkId=o zw@(f5k#j\n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: \n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "HubSpot" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "æˆ‘å€‘å¾ˆéºæ†¾çœ‹åˆ°ä½ é›¢é–‹" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "如果你有時間,請讓我們知é“ä½ åœç”¨å¤–掛程å¼çš„原因。" + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "我無法註冊或登入" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "å¤–æŽ›ç¨‹å¼æ­£åœ¨å½±éŸ¿ç¶²ç«™æ•ˆèƒ½" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "外掛程å¼ç„¡æ³•é‹ä½œ" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "外掛程å¼ä¸é©ç”¨" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "暫時åœç”¨æˆ–進行疑難排解" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "å…¶ä»–" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "æ„見回饋..." + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "æäº¤ä¸¦åœç”¨" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "è·³éŽä¸¦åœç”¨" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "HubSpot" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "é¸å– HubSpot Analytics 用於追蹤此é é¢çš„內容類型。" + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "è‡ªå‹•åµæ¸¬" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "éƒ¨è½æ ¼æ–‡ç« " + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "知識文章" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "登陸é é¢" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "清單é é¢" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "標準é é¢" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "使用者指å—" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "表單" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "峿™‚èŠå¤©" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "連絡人" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "é›»å­éƒµä»¶" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "清單" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "分æžå ±å‘Š" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "設定" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "å‡ç´š" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "HubSpot 一站å¼è¡ŒéŠ·%1$séœ€è¦ PHP %2$s 或更新版本。請先å‡ç´š WordPress。" + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "ç›®å‰ä¸¦æœªé€£çµ HubSpot 外掛程å¼ã€‚è‹¥è¦åœ¨ä½ çš„ WordPress 網站上使用 HubSpot 工具,請%1$sç«‹å³é€£çµå¤–掛程å¼%2$s。" + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "關閉這則通知。" + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "%1$s 你好," + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "你有 2 åˆ†é˜æ™‚間來完æˆé—œæ–¼ HubSpot for WordPress 外掛程å¼çš„%1$s這份å•å·%2$s嗎?" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "我們詳閱了æ¯ä¸€å‰‡å›žæ‡‰ã€‚ä½ çš„æ„見回饋有助於我們的團隊åšå‡ºæœ€éœ€è¦çš„æ”¹é€²ã€‚" + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "WordPress 團隊版 HubSpot" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "è¬è¬ï¼Œ" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "幫我們留下評論 | 連çµå°‡åœ¨æ–°åˆ†é ä¸­é–‹å•Ÿ" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "表單" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "會議排程器" diff --git a/wp/wp-content/plugins/leadin/languages/leadin.pot b/wp/wp-content/plugins/leadin/languages/leadin.pot new file mode 100644 index 00000000..ef33b78f --- /dev/null +++ b/wp/wp-content/plugins/leadin/languages/leadin.pot @@ -0,0 +1,203 @@ +# Copyright (C) 2024 HubSpot +# This file is distributed under the GPL v3. +msgid "" +msgstr "" +"Project-Id-Version: HubSpot All-In-One Marketing - Forms, Popups, Live Chat {{ DEV_VERSION }}\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/leadin\n" +"Last-Translator: Hubspot \n" +"Language-Team: Hubspot \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2024-05-16T14:09:54+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.10.0\n" +"X-Domain: leadin\n" + +#. Plugin Name of the plugin +#: leadin.php +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#. Plugin URI of the plugin +#: leadin.php +msgid "http://www.hubspot.com/integrations/wordpress" +msgstr "" + +#. Description of the plugin +#: leadin.php +msgid "HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM." +msgstr "" + +#. Author of the plugin +#: leadin.php +#: public/admin/class-gutenberg.php:36 +#: public/admin/class-leadinadmin.php:200 +#: public/admin/class-leadinadmin.php:218 +msgid "HubSpot" +msgstr "" + +#. Author URI of the plugin +#: leadin.php +msgid "http://hubspot.com/products/wordpress" +msgstr "" + +#: public/admin/class-deactivationform.php:29 +msgid "We're sorry to see you go" +msgstr "" + +#: public/admin/class-deactivationform.php:39 +msgid "If you have a moment, please let us know why you're deactivating the plugin" +msgstr "" + +#: public/admin/class-deactivationform.php:54 +msgid "I can't sign up or log in" +msgstr "" + +#: public/admin/class-deactivationform.php:55 +msgid "The plugin is impacting website performance" +msgstr "" + +#: public/admin/class-deactivationform.php:56 +msgid "The plugin isn't working" +msgstr "" + +#: public/admin/class-deactivationform.php:57 +msgid "The plugin isn't useful" +msgstr "" + +#: public/admin/class-deactivationform.php:58 +msgid "Temporarily disabling or troubleshooting" +msgstr "" + +#: public/admin/class-deactivationform.php:59 +msgid "Other" +msgstr "" + +#: public/admin/class-deactivationform.php:81 +msgid "Feedback" +msgstr "" + +#: public/admin/class-deactivationform.php:86 +msgid "Submit & deactivate" +msgstr "" + +#: public/admin/class-deactivationform.php:91 +msgid "Skip & deactivate" +msgstr "" + +#: public/admin/class-leadinadmin.php:72 +#: public/class-leadin.php:41 +msgid "Hubspot" +msgstr "" + +#: public/admin/class-leadinadmin.php:80 +msgid "Select the content type HubSpot Analytics uses to track this page" +msgstr "" + +#: public/admin/class-leadinadmin.php:84 +msgid "Detect Automatically" +msgstr "" + +#: public/admin/class-leadinadmin.php:85 +msgid "Blog Post" +msgstr "" + +#: public/admin/class-leadinadmin.php:86 +msgid "Knowledge Article" +msgstr "" + +#: public/admin/class-leadinadmin.php:87 +msgid "Landing Page" +msgstr "" + +#: public/admin/class-leadinadmin.php:88 +msgid "Listing Page" +msgstr "" + +#: public/admin/class-leadinadmin.php:89 +msgid "Standard Page" +msgstr "" + +#: public/admin/class-leadinadmin.php:202 +msgid "User Guide" +msgstr "" + +#: public/admin/class-leadinadmin.php:203 +msgid "Forms" +msgstr "" + +#: public/admin/class-leadinadmin.php:204 +msgid "Live Chat" +msgstr "" + +#: public/admin/class-leadinadmin.php:206 +msgid "Contacts" +msgstr "" + +#: public/admin/class-leadinadmin.php:207 +msgid "Email" +msgstr "" + +#: public/admin/class-leadinadmin.php:208 +msgid "Lists" +msgstr "" + +#: public/admin/class-leadinadmin.php:209 +msgid "Reporting" +msgstr "" + +#: public/admin/class-leadinadmin.php:211 +#: public/admin/class-pluginactionsmanager.php:35 +msgid "Settings" +msgstr "" + +#: public/admin/class-leadinadmin.php:213 +#: public/admin/class-pluginactionsmanager.php:50 +msgid "Upgrade" +msgstr "" + +#: public/admin/class-leadinadmin.php:258 +#: public/admin/class-leadinadmin.php:264 +msgid "HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first" +msgstr "" + +#: public/admin/class-noticemanager.php:35 +msgid "The HubSpot plugin is not connected right now To use HubSpot tools on your WordPress site, %1$sconnect the plugin now%2$s" +msgstr "" + +#: public/admin/class-reviewbanner.php:27 +msgid "Dismiss this notice" +msgstr "" + +#: public/admin/class-reviewbanner.php:29 +msgid "Hey %1$s," +msgstr "" + +#: public/admin/class-reviewbanner.php:32 +msgid "Have you got 2 minutes to complete %1$sthis survey%2$s about the HubSpot for WordPress plugin?" +msgstr "" + +#: public/admin/class-reviewbanner.php:33 +msgid "We read every response Your feedback helps our team make the improvements that you need the most" +msgstr "" + +#: public/admin/class-reviewbanner.php:34 +msgid "HubSpot for WordPress Team" +msgstr "" + +#: public/admin/class-reviewbanner.php:35 +msgid "Thanks," +msgstr "" + +#: public/admin/class-reviewbanner.php:59 +msgid "Leave us a review | link opens in a new tab" +msgstr "" + +#: public/admin/widgets/class-elementorform.php:85 +msgid "Form" +msgstr "" + +#: public/admin/widgets/class-elementormeeting.php:84 +msgid "Meetings Scheduler" +msgstr "" diff --git a/wp/wp-content/plugins/leadin/leadin.php b/wp/wp-content/plugins/leadin/leadin.php new file mode 100644 index 00000000..7498325d --- /dev/null +++ b/wp/wp-content/plugins/leadin/leadin.php @@ -0,0 +1,79 @@ +. + */ + +// ============================================= +// Define Constants +// ============================================= +if ( ! defined( 'LEADIN_BASE_PATH' ) ) { + define( 'LEADIN_BASE_PATH', __FILE__ ); +} + +if ( ! defined( 'LEADIN_PATH' ) ) { + define( 'LEADIN_PATH', untrailingslashit( plugins_url( '', LEADIN_BASE_PATH ) ) ); +} + +if ( ! defined( 'LEADIN_ASSETS_PATH' ) ) { + define( 'LEADIN_ASSETS_PATH', untrailingslashit( plugins_url( '', LEADIN_BASE_PATH ) . '/public/assets' ) ); +} + +if ( ! defined( 'LEADIN_JS_BASE_PATH' ) ) { + define( 'LEADIN_JS_BASE_PATH', untrailingslashit( plugins_url( '', LEADIN_BASE_PATH ) . '/build' ) ); +} + +if ( ! defined( 'LEADIN_PLUGIN_DIR' ) ) { + define( 'LEADIN_PLUGIN_DIR', untrailingslashit( dirname( LEADIN_BASE_PATH ) ) ); +} + +if ( ! defined( 'LEADIN_REQUIRED_WP_VERSION' ) ) { + define( 'LEADIN_REQUIRED_WP_VERSION', '5.8' ); +} + +if ( ! defined( 'LEADIN_REQUIRED_PHP_VERSION' ) ) { + define( 'LEADIN_REQUIRED_PHP_VERSION', '7.2' ); +} + +if ( ! defined( 'LEADIN_PLUGIN_VERSION' ) ) { + define( 'LEADIN_PLUGIN_VERSION', '11.1.11' ); +} + + +if ( ! defined( 'LEADIN_PREFIX' ) ) { + define( 'LEADIN_PREFIX', 'leadin' ); +} + +// ============================================= +// Set autoload +// ============================================= +require_once LEADIN_PLUGIN_DIR . '/vendor/autoload.php'; +require_once ABSPATH . 'wp-admin/includes/plugin.php'; + + +use \Leadin\Leadin; + +$leadin = new Leadin(); diff --git a/wp/wp-content/plugins/leadin/license.txt b/wp/wp-content/plugins/leadin/license.txt new file mode 100644 index 00000000..4c3bbef1 --- /dev/null +++ b/wp/wp-content/plugins/leadin/license.txt @@ -0,0 +1,642 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 18. Additional terms + + In the light of Article 7 of the GPL license, the following additional +terms apply: + + a) You are prohibited to make misrepresentations of the origin of that +material, or to require that modified versions of such material be marked +in reasonable ways as different from the original version; + + b) You are limited in the use for publicity purposes of names of +licensors or authors of the material; + + c) You are declined any grant of rights under trademark law for use of +the trade names, trademarks, or service marks of YOAST B.V.; + + d) You are required to indemnify licensors and authors of that material +by anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any liability +that these contractual assumptions directly impose on those licensors and +authors. + +END OF TERMS AND CONDITIONS diff --git a/wp/wp-content/plugins/leadin/package.json b/wp/wp-content/plugins/leadin/package.json new file mode 100644 index 00000000..b4855695 --- /dev/null +++ b/wp/wp-content/plugins/leadin/package.json @@ -0,0 +1,70 @@ +{ + "name": "leadin", + "scripts": { + "start": "wp-scripts start", + "build": "wp-scripts build", + "test-e2e": "wp-scripts test-e2e", + "test-e2e:debug": "wp-scripts test-e2e --puppeteer-devtools", + "plugin-zip": "wp-scripts plugin-zip" + }, + "files": [ + "/public/**", + "/build/**", + "/languages/*", + "/scripts/**/*", + "vendor/*", + "changelog.txt", + "leadin.php", + "uninstall.php", + "phpunit.xml.dist", + "license.txt", + "readme.txt" + ], + "devDependencies": { + "@babel/preset-typescript": "^7.18.6", + "@linaria/babel-preset": "4.0.0-beta.0", + "@linaria/core": "4.0.0-beta.0", + "@linaria/react": "^4.0.0-beta.0", + "@linaria/shaker": "4.0.0-beta.0", + "@types/jest": "^29.2.4", + "@types/jquery": "^3.5.14", + "@types/lodash": "^4.14.188", + "@types/styled-components": "^5.1.26", + "@types/wordpress__block-editor": "^7.0.0", + "@types/wordpress__blocks": "^11.0.7", + "@types/wordpress__edit-post": "^4.0.1", + "@types/wordpress__plugins": "^3.0.0", + "@wordpress/e2e-test-utils": "^8.2.0", + "@wordpress/env": "^5.3.0", + "@wordpress/jest-preset-default": "^10.0.0", + "@wordpress/scripts": "^24.2.0", + "jest": "^29.1.2", + "msw": "^0.49.2", + "ts-loader": "^9.4.1", + "typescript": "^4.8.4" + }, + "dependencies": { + "@babel/cli": "7.18.6", + "@babel/core": "7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/preset-env": "7.18.6", + "@babel/preset-react": "7.18.6", + "@linaria/webpack-loader": "4.0.0-beta.0", + "@wordpress/block-editor": "^10.1.0", + "@wordpress/blocks": "^11.17.0", + "@wordpress/edit-post": "^6.18.0", + "@wordpress/i18n": "^4.18.0", + "@wordpress/plugins": "^4.19.0", + "babel-loader": "8.2.5", + "css-loader": "6.7.1", + "mini-css-extract-plugin": "2.6.1", + "penpal": "3.1.3", + "raven-js": "3.19.1", + "styled-components": "^4.3.2", + "webpack": "5.73.0", + "webpack-cli": "4.10.0" + }, + "msw": { + "workerDirectory": "" + } +} diff --git a/wp/wp-content/plugins/leadin/phpunit.xml.dist b/wp/wp-content/plugins/leadin/phpunit.xml.dist new file mode 100644 index 00000000..11fae88a --- /dev/null +++ b/wp/wp-content/plugins/leadin/phpunit.xml.dist @@ -0,0 +1,15 @@ + + + + + ./tests/ + + + diff --git a/wp/wp-content/plugins/leadin/public/admin/class-adminconstants.php b/wp/wp-content/plugins/leadin/public/admin/class-adminconstants.php new file mode 100644 index 00000000..04f9dfee --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-adminconstants.php @@ -0,0 +1,206 @@ + 'wordpress-plugin', + 'utm_medium' => 'marketplaces', + ); + + $utm_campaign = self::get_utm_campaign(); + if ( ! empty( $utm_campaign ) ) { + $utm_params['utm_campaign'] = $utm_campaign; + } + return $utm_params; + } + + /** + * Return a nonce used on the connection class + */ + private static function get_connection_nonce() { + return wp_create_nonce( 'hubspot-nonce' ); + } + + /** + * Return an array with the user's pre-fill info for signup + */ + private static function get_signup_prefill_params_array() { + $wp_user = wp_get_current_user(); + $user_info = array( + 'firstName' => $wp_user->user_firstname, + 'lastName' => $wp_user->user_lastname, + 'email' => $wp_user->user_email, + 'company' => get_bloginfo( 'name' ), + ); + + return $user_info; + } + + /** + * Return an array of properties to be included in the signup search string + */ + public static function get_signup_query_params_array() { + $signup_params = array(); + $signup_params['leadinPluginVersion'] = constant( 'LEADIN_PLUGIN_VERSION' ); + $signup_params['trackConsent'] = User_Metadata::get_track_consent(); + $user_prefill_params = self::get_signup_prefill_params_array(); + $signup_params = array_merge( $signup_params, $user_prefill_params ); + return $signup_params; + } + + /** + * Return query params array for the iframe. + */ + public static function get_hubspot_query_params_array() { + $wp_user = wp_get_current_user(); + $hubspot_config = array( + 'l' => get_locale(), + 'php' => Versions::get_php_version(), + 'v' => LEADIN_PLUGIN_VERSION, + 'wp' => Versions::get_wp_version(), + 'theme' => get_option( 'stylesheet' ), + 'adminUrl' => admin_url(), + 'websiteName' => get_bloginfo( 'name' ), + 'domain' => parse_url( get_site_url(), PHP_URL_HOST ), + 'wp_user' => $wp_user->first_name ? $wp_user->first_name : $wp_user->user_nicename, + 'nonce' => self::get_connection_nonce(), + 'accountName' => Portal_Options::get_account_name(), + 'hsdio' => Portal_Options::get_device_id(), + 'portalDomain' => Portal_Options::get_portal_domain(), + ); + + $utm_params = self::get_utm_query_params_array(); + $hubspot_config = array_merge( $hubspot_config, $utm_params ); + + if ( User::is_admin() ) { + $hubspot_config['admin'] = '1'; + } + + if ( Routing::has_just_connected_with_oauth() ) { + $hubspot_config['justConnected'] = true; + } + if ( Routing::is_new_portal_with_oauth() ) { + $hubspot_config['isNewPortal'] = true; + } + + if ( ! Connection::is_connected() ) { + $signup_params = self::get_signup_query_params_array(); + $hubspot_config = array_merge( $hubspot_config, $signup_params, Impact::get_params() ); + } + + return $hubspot_config; + } + + /** + * Returns information about Content embed plugin necessary for user guide to determine if/how to install & activate + */ + public static function get_content_embed_config() { + $content_embed_config = array_merge( + array( + 'userCanInstall' => current_user_can( 'install_plugins' ), + 'userCanActivate' => current_user_can( 'activate_plugins' ), + 'nonce' => wp_create_nonce( ContentEmbedInstaller::INSTALL_ARG ), + ), + ContentEmbedInstaller::is_content_embed_active_installed() + ); + + return $content_embed_config; + } + + /** + * Returns a minimal version of leadinConfig, containing the data needed by the background iframe. + */ + public static function get_background_leadin_config() { + $wp_user_id = get_current_user_id(); + + $background_config = array( + 'adminUrl' => admin_url(), + 'activationTime' => Portal_Options::get_activation_time(), + 'deviceId' => Portal_Options::get_device_id(), + 'formsScript' => Filters::apply_forms_script_url_filters(), + 'formsScriptPayload' => Filters::apply_forms_payload_filters(), + 'meetingsScript' => Filters::apply_meetings_script_url_filters(), + 'hublet' => Filters::apply_hublet_filters(), + 'hubspotBaseUrl' => Filters::apply_base_url_filters( Connection::is_connected() ), + 'leadinPluginVersion' => constant( 'LEADIN_PLUGIN_VERSION' ), + 'locale' => get_locale(), + 'restUrl' => get_rest_url(), + 'restNonce' => wp_create_nonce( 'wp_rest' ), + 'redirectNonce' => wp_create_nonce( Routing::REDIRECT_NONCE ), + 'phpVersion' => Versions::get_php_version(), + 'pluginPath' => constant( 'LEADIN_PATH' ), + 'plugins' => get_plugins(), + 'portalId' => Portal_Options::get_portal_id(), + 'accountName' => Portal_Options::get_account_name(), + 'portalDomain' => Portal_Options::get_portal_domain(), + 'portalEmail' => get_user_meta( $wp_user_id, 'leadin_email', true ), + 'reviewSkippedDate' => User_Metadata::get_skip_review(), + 'theme' => get_option( 'stylesheet' ), + 'wpVersion' => Versions::get_wp_version(), + 'leadinQueryParams' => self::get_hubspot_query_params_array(), + 'connectionStatus' => Connection::is_connected() ? 'Connected' : 'NotConnected', + 'contentEmbed' => self::get_content_embed_config(), + 'requiresContentEmbedScope' => is_plugin_active( 'hubspot-content-embed/content-embed.php' ) ? '1' : '0', + 'lastAuthorizeTime' => Portal_Options::get_last_authorize_time(), + 'lastDeauthorizeTime' => Portal_Options::get_last_deauthorize_time(), + 'lastDisconnectTime' => Portal_Options::get_last_disconnect_time(), + 'refreshTokenError' => Portal_Options::get_refresh_token_error(), + ); + + if ( Connection::is_connected() ) { + $background_config['refreshToken'] = OAuth::get_refresh_token(); + } + + return $background_config; + } + + /** + * Returns leadinConfig, containing all the data needed by the leadin javascript. + */ + public static function get_leadin_config() { + $leadin_config = self::get_background_leadin_config(); + + if ( ! Connection::is_connected() ) { + if ( ! Impact::has_params() ) { + $impact_link = Impact::get_affiliate_link(); + if ( ! empty( $impact_link ) ) { + $leadin_config['impactLink'] = Impact::get_affiliate_link(); + } + } + } + + return $leadin_config; + } +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-connection.php b/wp/wp-content/plugins/leadin/public/admin/class-connection.php new file mode 100644 index 00000000..be3722ec --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-connection.php @@ -0,0 +1,168 @@ +ID; + foreach ( $user_meta as $key => $value ) { + add_user_meta( $wp_user_id, $key, $value ); + } + } + + /** + * Retrieves user ID and deletes a piece of the users meta data. + * + * @param String $meta_key is the key of the data you want to delete. + */ + private static function delete_metadata( $meta_key ) { + $wp_user = wp_get_current_user(); + $wp_user_id = $wp_user->ID; + delete_user_meta( $wp_user_id, $meta_key ); + } + + /** + * Connect portal id, domain, name to WordPress options and HubSpot email to user meta data. + * + * @param Number $portal_id HubSpot account id. + * @param String $portal_name HubSpot account name. + * @param String $portal_domain HubSpot account domain. + * @param String $hs_user_email HubSpot user email. + * @param String $hublet HubSpot account's hublet. + */ + public static function connect( $portal_id, $portal_name, $portal_domain, $hs_user_email, $hublet ) { + self::disconnect(); + self::store_portal_info( $portal_id, $portal_name, $portal_domain, $hublet ); + self::add_metadata( array( 'leadin_email' => $hs_user_email ) ); + } + + /** + * Connect the plugin with OAuthorization. Storing OAuth tokens and metadata for the connected portal. + */ + public static function oauth_connect() { + $connect_params = QueryParameters::get_parameters( self::CONNECT_KEYS, 'hubspot-nonce', self::CONNECT_NONCE_ARG ); + + self::disconnect(); + self::store_portal_info( + $connect_params['portal_id'], + $connect_params['portal_name'], + $connect_params['portal_domain'], + $connect_params['hublet'] + ); + + OAuth::authorize( $connect_params['refresh_token'] ); + } + + /** + * Removes portal id and domain from the WordPress options. + */ + public static function disconnect() { + Portal_Options::set_last_disconnect_time(); + + self::delete_portal_info(); + + $users = get_users( + array( 'role__in' => array( 'administrator', 'editor' ) ), + array( 'fields' => array( 'ID' ) ) + ); + foreach ( $users as $user ) { + delete_user_meta( $user->ID, 'leadin_email' ); + delete_user_meta( $user->ID, 'leadin_skip_review' ); + delete_user_meta( $user->ID, 'leadin_review_banner_last_call' ); + delete_user_meta( $user->ID, 'leadin_has_min_contacts' ); + delete_user_meta( $user->ID, 'leadin_track_consent' ); + } + + OAuth::deauthorize(); + } + + /** + * Store the portal metadata for connecting the plugin in the options table + * + * @param String $portal_id ID for connecting portal. + * @param String $portal_name Name of the connecting portal. + * @param String $portal_domain Domain for the connecting portal. + * @param String $hublet Hublet for the connecting portal. + */ + public static function store_portal_info( $portal_id, $portal_name, $portal_domain, $hublet ) { + Portal_Options::set_portal_id( $portal_id ); + Portal_Options::set_account_name( $portal_name ); + Portal_Options::set_portal_domain( $portal_domain ); + Portal_Options::set_hublet( $hublet ); + Portal_Options::set_disable_internal_tracking(); + } + + /** + * Delete stored portal metadata for disconnecting the plugin from the options table + */ + private static function delete_portal_info() { + Portal_Options::delete_portal_id(); + Portal_Options::delete_account_name(); + Portal_Options::delete_portal_domain(); + Portal_Options::delete_hublet(); + Portal_Options::delete_disable_internal_tracking(); + Portal_Options::delete_business_unit_id(); + } +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-contentembedinstaller.php b/wp/wp-content/plugins/leadin/public/admin/class-contentembedinstaller.php new file mode 100644 index 00000000..ed851f52 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-contentembedinstaller.php @@ -0,0 +1,154 @@ +install( self::CONTENT_EMBED_LINK ); + + if ( is_wp_error( $result ) ) { + $status['errorCode'] = 'GENERIC_ERROR'; + $status['errorMessage'] = $result->get_error_message(); + wp_send_json_error( $status ); + } + + if ( is_wp_error( $skin->result ) ) { + $status['errorCode'] = 'GENERIC_ERROR'; + $status['errorMessage'] = $skin->result->get_error_message(); + wp_send_json_error( $status ); + } + + if ( $skin->get_errors()->has_errors() ) { + $status['errorCode'] = 'GENERIC_ERROR'; + $status['errorMessage'] = $skin->get_error_messages(); + wp_send_json_error( $status ); + } + + if ( is_null( $result ) ) { + global $wp_filesystem; + $status['errorCode'] = 'FILESYSTEM_ERROR'; + $status['errorMessage'] = 'Unable to connect to the filesystem. Please confirm your credentials.'; + + // Pass through the error from WP_Filesystem if one was raised. + if ( $wp_filesystem instanceof \WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) { + $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); + } + wp_send_json_error( $status ); + } + + $plugin_info = $upgrader->plugin_info(); + if ( ! $plugin_info ) { + return wp_send_json_error( + array( + 'errorCode' => 'INFO_FETCH_ERROR', + 'errorMessage' => 'Plugin installation failed, could not retrieve plugin info', + ), + 500 + ); + } + + $status = array( + 'message' => 'Plugin installed and activated successfully', + 'plugin_info' => $plugin_info, + 'activated' => false, + ); + + if ( current_user_can( 'activate_plugins' ) ) { + $activation_response = activate_plugin( $plugin_info ); + if ( is_wp_error( $activation_response ) ) { + $status['errorCode'] = 'ACTIVATION_ERROR'; + $status['errorMessage'] = $activation_response->get_error_message(); + } else { + $status['activated'] = true; + } + } + + update_option( self::INSTALL_OPTION, true ); + return wp_send_json_success( $status ); + } + + /** + * Determine if there is a copy of Content embed installed, and if so, if it is active. + * Checks for path names with junk at the end to handle multiple installs + */ + public static function is_content_embed_active_installed() { + $content_embed_regex = '/hubspot-content-embed((-.*)?)\/content-embed.php/'; + if ( ! function_exists( 'get_plugins' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + + // Filter based on regex in case there are multiple copies installed for some reason. + $all_plugins = array_keys( get_plugins() ); + $content_embed_paths = array_filter( + $all_plugins, + function ( $plugin_path ) use ( $content_embed_regex ) { + return preg_match( $content_embed_regex, $plugin_path ); + } + ); + + $installed = ! empty( $content_embed_paths ); + $active = ! empty( + array_filter( + $content_embed_paths, + function ( $plugin_path ) { + return is_plugin_active( $plugin_path ); + } + ) + ); + + return array( + 'installed' => $installed, + 'active' => $active, + ); + } +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-deactivationform.php b/wp/wp-content/plugins/leadin/public/admin/class-deactivationform.php new file mode 100644 index 00000000..a0a285a2 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-deactivationform.php @@ -0,0 +1,100 @@ +id === 'plugins' ) { + // handlers and logic are added via jQuery in the frontend. + ?> + + 'leadin-blocks', + 'title' => __( 'HubSpot', 'leadin' ), + ), + ) + ); + } + /** + * Register HubSpot Form Gutenberg block. + */ + public function register_gutenberg_block() { + AssetsManager::localize_gutenberg(); + register_block_type( + 'leadin/hubspot-blocks', + array( + 'editor_script' => AssetsManager::GUTENBERG, + ) + ); + } +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-impact.php b/wp/wp-content/plugins/leadin/public/admin/class-impact.php new file mode 100644 index 00000000..aa38c7eb --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-impact.php @@ -0,0 +1,46 @@ +start_controls_section( + 'hubspot', + array( + 'label' => esc_html__( 'Hubspot', 'leadin' ), + 'tab' => \Elementor\Controls_Manager::TAB_SETTINGS, + ) + ); + + $document->add_control( + 'content_type', + array( + 'label' => esc_html__( 'Select the content type HubSpot Analytics uses to track this page', 'leadin' ), + 'label_block' => true, + 'type' => \Elementor\Controls_Manager::SELECT, + 'options' => array( + '' => esc_html__( 'Detect Automatically', 'leadin' ), + 'blog-post' => esc_html__( 'Blog Post', 'leadin' ), + 'knowledge-article' => esc_html__( 'Knowledge Article', 'leadin' ), + 'landing-page' => esc_html__( 'Landing Page', 'leadin' ), + 'listing-page' => esc_html__( 'Listing Page', 'leadin' ), + 'standard-page' => esc_html__( 'Standard Page', 'leadin' ), + ), + 'default' => '', + ) + ); + + $document->end_controls_section(); + } + + + + /** + * Load the .mo language files. + */ + public function load_languages() { + load_plugin_textdomain( 'leadin', false, '/leadin/languages' ); + } + + /** + * Handler called on plugin activation. + */ + public function do_activate_action() { + \do_action( 'leadin_activate' ); + } + + /** + * Handler for the leadin_activate action. + */ + public function do_redirect_action() { + \do_action( 'leadin_redirect' ); + } + + /** + * Set transient after activating the plugin. + */ + public function set_redirect_transient() { + set_transient( self::REDIRECT_TRANSIENT, true, 60 ); + } + + /** + * Redirect to the dashboard after activation. + */ + public function redirect_after_activation() { + if ( get_transient( self::REDIRECT_TRANSIENT ) ) { + delete_transient( self::REDIRECT_TRANSIENT ); + wp_safe_redirect( admin_url( 'admin.php?page=leadin' ) ); + exit; + } + } + + /** + * Connect/disconnect the plugin + */ + public function authorize() { + if ( User::is_admin() ) { + if ( Connection::is_connection_requested() ) { + $redirect_params = array(); + Connection::oauth_connect(); + $redirect_params['leadin_just_connected'] = 1; + + if ( Connection::is_new_portal() ) { + $redirect_params['is_new_portal'] = 1; + } + Routing::redirect( MenuConstants::USER_GUIDE, $redirect_params ); + } elseif ( Connection::is_disconnection_requested() ) { + Connection::disconnect(); + Routing::redirect( MenuConstants::ROOT ); + } + } + } + + /** + * Check if query parameter for review is present on the request + * then add user metadata to persist review time + * Redirects if value is equal to true + */ + public function check_review_requested() { + if ( Connection::is_connected() && Routing::has_review_request() ) { + User_Metadata::set_skip_review( time() ); + if ( Routing::is_review_request() ) { + header( 'Location: https://survey.hsforms.com/1ILAEu_k_Ttiy344dpHM--w1h' ); + exit(); + } + } + } + + /** + * Store activation time in a WP option. + */ + public function store_activation_time() { + if ( empty( Portal_Options::get_activation_time() ) ) { + Portal_Options::set_activation_time(); + } + } + + /** + * Adds scripts for the admin section. + */ + public function enqueue_scripts() { + AssetsManager::register_assets(); + AssetsManager::enqueue_admin_assets(); + if ( get_current_screen()->id === 'plugins' ) { + AssetsManager::enqueue_feedback_assets(); + } + } + + /** + * Adds Leadin menu to admin sidebar + */ + public function build_menu() { + if ( Connection::is_connected() ) { + add_menu_page( __( 'HubSpot', 'leadin' ), __( 'HubSpot', 'leadin' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::ROOT, array( $this, 'build_integrated_app' ), 'dashicons-sprocket', '25.100713' ); + + add_submenu_page( MenuConstants::ROOT, __( 'User Guide', 'leadin' ), __( 'User Guide', 'leadin' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::USER_GUIDE, array( $this, 'build_integrated_app' ) ); + add_submenu_page( MenuConstants::ROOT, __( 'Forms', 'leadin' ), __( 'Forms', 'leadin' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::FORMS, array( $this, 'build_integrated_app' ) ); + add_submenu_page( MenuConstants::ROOT, __( 'Live Chat', 'leadin' ), __( 'Live Chat', 'leadin' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::CHATFLOWS, array( $this, 'build_integrated_app' ) ); + + add_submenu_page( MenuConstants::ROOT, __( 'Contacts', 'leadin' ), self::make_external_link( Links::get_iframe_src( MenuConstants::CONTACTS ), __( 'Contacts', 'leadin' ), 'leadin_contacts_link' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::CONTACTS, array( $this, 'build_app' ) ); + add_submenu_page( MenuConstants::ROOT, __( 'Email', 'leadin' ), self::make_external_link( Links::get_iframe_src( MenuConstants::EMAIL ), __( 'Email', 'leadin' ), 'leadin_email_link' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::EMAIL, array( $this, 'build_app' ) ); + add_submenu_page( MenuConstants::ROOT, __( 'Lists', 'leadin' ), self::make_external_link( Links::get_iframe_src( MenuConstants::LISTS ), __( 'Lists', 'leadin' ), 'leadin_lists_link' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::LISTS, array( $this, 'build_app' ) ); + add_submenu_page( MenuConstants::ROOT, __( 'Reporting', 'leadin' ), self::make_external_link( Links::get_iframe_src( MenuConstants::REPORTING ), __( 'Reporting', 'leadin' ), 'leadin_reporting_link' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::REPORTING, array( $this, 'build_app' ) ); + + add_submenu_page( MenuConstants::ROOT, __( 'Settings', 'leadin' ), __( 'Settings', 'leadin' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::SETTINGS, array( $this, 'build_integrated_app' ) ); + + add_submenu_page( MenuConstants::ROOT, __( 'Upgrade', 'leadin' ), self::make_external_link( Links::get_iframe_src( MenuConstants::PRICING ), __( 'Upgrade', 'leadin' ), 'leadin_pricing_link' ), Filters::apply_view_plugin_menu_capability_filters(), MenuConstants::PRICING, array( $this, 'build_app' ) ); + + remove_submenu_page( MenuConstants::ROOT, MenuConstants::ROOT ); + } else { + $notification_icon = ' !'; + add_menu_page( __( 'HubSpot', 'leadin' ), __( 'HubSpot', 'leadin' ) . $notification_icon, Filters::apply_connect_plugin_capability_filters(), MenuConstants::ROOT, array( $this, 'build_integrated_app' ), 'dashicons-sprocket', '25.100713' ); + } + } + + + /** + * Wraps external link. + * + * @param String $href link destination. + * @param String $content link content. + * @param String $class class for ATs. + */ + public function make_external_link( $href, $content, $class ) { + return "$content"; + } + + /** + * Renders the leadin admin page. + */ + public function build_app() { + AssetsManager::enqueue_bridge_assets(); + self::render_app(); + } + + /** + * Renders the integrated forms app. + */ + public function build_integrated_app() { + AssetsManager::enqueue_integrated_app_assets(); + self::render_app(); + } + + /** + * Render app container + */ + public function render_app() { + $error_message = ''; + + if ( Versions::is_php_version_not_supported() ) { + $error_message = sprintf( + __( 'HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first', 'leadin' ), + LEADIN_PLUGIN_VERSION, + LEADIN_REQUIRED_PHP_VERSION + ); + } elseif ( Versions::is_wp_version_not_supported() ) { + $error_message = sprintf( + __( 'HubSpot All-In-One Marketing %1$s requires PHP %2$s or higher Please upgrade WordPress first', 'leadin' ), + LEADIN_PLUGIN_VERSION, + LEADIN_REQUIRED_WP_VERSION + ); + } + + if ( $error_message ) { + ?> +
+

+ +

+
+ +
+
+ + * Where + * - admin_page is a string + * - url is either a string or another map , both strings + */ + public static function get_routes_mapping() { + $portal_id = Portal_Options::get_portal_id(); + $reporting_page = "/reports-dashboard/$portal_id"; + $user_guide = "/wordpress-plugin-ui/$portal_id/onboarding/start"; + + return array( + MenuConstants::ROOT => $user_guide, + MenuConstants::USER_GUIDE => $user_guide, + MenuConstants::REPORTING => $reporting_page, + MenuConstants::CONTACTS => "/contacts/$portal_id", + MenuConstants::LISTS => array( + '' => "/contacts/$portal_id/objectLists/all", + 'default' => "/contacts/$portal_id/objectLists", + 'lists' => "/contacts/$portal_id/lists", + ), + MenuConstants::EMAIL => array( + '' => "/email/$portal_id", + 'cms' => "/content/$portal_id/create/email", + ), + MenuConstants::SETTINGS => array( + '' => "/wordpress-plugin-ui/$portal_id/settings", + 'forms' => "/settings/$portal_id/marketing/form", + ), + MenuConstants::PRICING => "/pricing/$portal_id/marketing", + ); + } + + /** + * Get page name from the current page id. + * E.g. "hubspot_page_leadin_forms" => "forms" + */ + private static function get_page_id() { + $screen_id = get_current_screen()->id; + return preg_replace( '/^(hubspot_page_|toplevel_page_)/', '', $screen_id ); + } + + /** + * Get the parsed `leadin_route` from the query string. + */ + private static function get_iframe_route() { + $iframe_route = QueryParameters::get_param_array( 'leadin_route', 'hubspot-route' ); + return is_array( $iframe_route ) ? $iframe_route : array(); + } + + /** + * Get the parsed `leadin_search` from the query string. + */ + private static function get_iframe_search_string() { + return QueryParameters::get_param( 'leadin_search', 'hubspot-route' ); + } + + /** + * Return query string from object + * + * @param array $arr query parameters to stringify. + */ + private static function http_build_query( $arr ) { + if ( ! is_array( $arr ) ) { + return ''; + } + return http_build_query( $arr, '', ini_get( 'arg_separator.output' ), PHP_QUERY_RFC3986 ); + } + + /** + * Validate static version. + * + * @param String $version version of the static bundle. + */ + private static function is_static_version_valid( $version ) { + preg_match( '/static-\d+\.\d+/', $version, $match ); + return ! empty( $match ); + } + + /** + * Return a string query parameters to add to the iframe src. + */ + public static function get_query_params() { + $config_array = AdminConstants::get_hubspot_query_params_array(); + \array_merge( $config_array, Impact::get_params() ); + + return self::http_build_query( $config_array ); + } + + /** + * This function computes the right iframe src based on query params and current page. + * + * The `page` query param is used as a key to get the url from the get_routes_mapping + * This query param will get ignored if $page_id function param is present + * The `leadin_route[]` query params are added to the url + * + * e.g.: + * ?page=leadin_forms&leadin_route[]=foo&leadin_route[]=bar will redirect to /forms/$portal_id/foo/bar + * + * If the value of get_routes_mapping is an array, the first value of `leadin_route` will be used as key. + * If the key isn't found, it will fall back to '' + * + * e.g.: + * ?page=leadin_settings&leadin=route[]=forms&leadin_route[]=bar will redirect to /settings/$portal_id/forms/bar + * ?page=leadin_settings&leadin=route[]=foo&leadin_route[]=bar will redirect to /wordpress_plugin_ui/$portal_id/settings/foo/bar + * + * @param String $page_id is used as a key to get the url from the get_routes_mapping by overriding the query param. + * + * Returns the right iframe src. + */ + public static function get_iframe_src( $page_id = '' ) { + $leadin_onboarding = 'leadin_onboarding'; + $leadin_new_portal = 'leadin_new_portal'; + $browser_search_string = ''; + + if ( get_transient( $leadin_onboarding ) ) { + delete_transient( $leadin_onboarding ); + $browser_search_string = '&justConnected=true'; + if ( get_transient( $leadin_new_portal ) ) { + delete_transient( $leadin_new_portal ); + $browser_search_string = $browser_search_string . '&isNewPortal=true'; + } + } + + $sub_routes_array = self::get_iframe_route(); + $inframe_search_string = self::get_iframe_search_string(); + $browser_search_string = $browser_search_string . $inframe_search_string; + + if ( empty( Portal_Options::get_portal_id() ) ) { + $wp_user = wp_get_current_user(); + $wp_user_id = $wp_user->ID; + set_transient( $leadin_onboarding, 'true' ); + } else { + if ( '' === $page_id ) { + $page_id = self::get_page_id(); + } + + $routes = self::get_routes_mapping(); + + $is_external = MenuConstants::PRICING === $page_id || MenuConstants::REPORTING === $page_id || MenuConstants::LISTS === $page_id || MenuConstants::CONTACTS === $page_id || MenuConstants::EMAIL === $page_id; + + if ( empty( $route ) && isset( $routes[ $page_id ] ) ) { + $route = $routes[ $page_id ]; + + if ( \is_array( $route ) && isset( $sub_routes_array[0] ) ) { + $first_sub_route = $sub_routes_array[0]; + + if ( isset( $route[ $first_sub_route ] ) ) { + $route = $route[ $first_sub_route ]; + array_shift( $sub_routes_array ); + } + } + + if ( \is_array( $route ) ) { + $route = $route['']; + } + } + } + + $sub_routes = join( '/', $sub_routes_array ); + $sub_routes = empty( $sub_routes ) ? $sub_routes : "/$sub_routes"; + // Query string separator "?" may have been added to the URL already. + $add_separator = strpos( $sub_routes, '?' ) ? '&' : '?'; + $additional_query_params = Filters::apply_query_params_filters(); + + return Filters::apply_base_url_filters() . "$route$sub_routes" . $add_separator . self::get_query_params() . $browser_search_string . $additional_query_params; + } +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-menuconstants.php b/wp/wp-content/plugins/leadin/public/admin/class-menuconstants.php new file mode 100644 index 00000000..bef89069 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-menuconstants.php @@ -0,0 +1,19 @@ + +
+

+ +   + ', + '' + ); + ?> +

+
+ leadin_render_disconnected_banner(); + } elseif ( self::should_show_review_notice() ) { + $review_banner = new ReviewBanner(); + $review_banner->leadin_render_review_banner(); + } + } + } + + /** + * Find if disconnected notice should be shown + */ + public function should_show_disconnected_notice() { + $current_screen = get_current_screen(); + return ! Connection::is_connected() && 'leadin' !== $current_screen->parent_base; + } + + /** + * Find if review notice should be shown + */ + public function should_show_review_notice() { + $current_screen = get_current_screen(); + $is_dashboard = 'index' === $current_screen->parent_base; + $is_not_skipped = empty( User_Metadata::get_skip_review() ); + return $is_dashboard && Connection::is_connected() && $is_not_skipped; + } + +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-pluginactionsmanager.php b/wp/wp-content/plugins/leadin/public/admin/class-pluginactionsmanager.php new file mode 100644 index 00000000..7d95bc66 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-pluginactionsmanager.php @@ -0,0 +1,55 @@ +' . __( 'Settings', 'leadin' ) . ''; + array_unshift( $links, $settings_link ); + return $links; + } + + /** + * Adds upgrade link for Leadin to plugins management page + * + * @param array $links Return the links for the upgrade page. + * @return array + */ + public function leadin_plugin_advanced_features_link( $links ) { + if ( Connection::is_connected() ) { + $portal_id = Portal_Options::get_portal_id(); + $url = Filters::apply_base_url_filters() . '/pricing/' . $portal_id . '/marketing?' . Links::get_query_params(); + $advanced_features_link = '' . esc_html( __( 'Upgrade', 'leadin' ) ) . ''; + array_push( $links, $advanced_features_link ); + } + return $links; + } +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-reviewbanner.php b/wp/wp-content/plugins/leadin/public/admin/class-reviewbanner.php new file mode 100644 index 00000000..703f7bc6 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-reviewbanner.php @@ -0,0 +1,89 @@ + +
+ + + + + +
+

+ +

+ +
+ +

+ ', + '' + ); + ?> +

+

+ +

+
+
+

+ +

+
+
+ +
+ + +

+ Kelly +
+ +

+
+
+ + + get_contacts_from_timestamp( Portal_Options::get_activation_time() ); + $has_min_contacts = count( $contacts->results ) >= self::CONTACTS_CREATED_SINCE_ACTIVATION; + User_Metadata::set_has_min_contacts( $has_min_contacts ); + return $has_min_contacts; + } catch ( \Exception $e ) { + return false; + } + } + + /** + * Check to see if current time is after introductary period. + */ + public static function is_after_introductary_period() { + $activation_time = new \DateTime(); + $activation_time->setTimestamp( Portal_Options::get_activation_time() ); + $diff = $activation_time->diff( new \DateTime() ); + return $diff->days >= self::REVIEW_BANNER_INTRO_PERIOD; + } + + /** + * Check SKIP_REVIEW meta data for a user. + */ + public static function is_reviewed_or_skipped() { + return ! empty( User_Metadata::get_skip_review() ); + } + + /** + * Check if contacts have been fetched at the current day. + */ + public static function should_fetch_contacts() { + $last_call_ts = User_Metadata::get_review_banner_last_call(); + if ( empty( $last_call_ts ) ) { + return true; + } + $last_call_date = new \DateTime(); + $last_call_date->setTimestamp( $last_call_ts ); + $diff = $last_call_date->diff( new \DateTime() ); + return $diff->days >= self::DAYS_SINCE_LAST_FETCH; + } + + /** + * Check if contacts minimun have already been fulfilled . + */ + public static function has_min_contacts() { + return User_Metadata::get_has_min_contacts(); + } + +} diff --git a/wp/wp-content/plugins/leadin/public/admin/class-routing.php b/wp/wp-content/plugins/leadin/public/admin/class-routing.php new file mode 100644 index 00000000..686531cb --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/class-routing.php @@ -0,0 +1,101 @@ + $page ), + array( self::REDIRECT_NONCE => wp_create_nonce( self::REDIRECT_NONCE ) ), + $extra_params + ); + + $redirect_url = add_query_arg( + urlencode_deep( $redirect_params ), + admin_url( 'admin.php' ) + ); + + nocache_headers(); + wp_safe_redirect( $redirect_url ); + exit; + } + + /** + * Return a boolean if the plugin has just been connected. + * Signified by query parameter flag `leadin_just_connected`. + * + * @return bool True if the plugin has just connected. + */ + public static function has_just_connected_with_oauth() { + $just_connected_param = QueryParameters::get_param( + self::JUST_CONNECTED, + self::REDIRECT_NONCE, + self::REDIRECT_NONCE + ); + + return null !== $just_connected_param; + } + + /** + * Return a boolean if the plugin is being used with a new portal. + * Signified by query parameter flag `is_new_portal`. + * + * @return bool True if the plugin has just connected using a new portal. + */ + public static function is_new_portal_with_oauth() { + $just_connected_param = QueryParameters::get_param( + self::IS_NEW_PORTAL, + self::REDIRECT_NONCE, + self::REDIRECT_NONCE + ); + + return null !== $just_connected_param; + } + + /** + * Reads query param to see if request has review request query params + * + * @return bool True if the `leadin_review` query parameter is not empty + */ + public static function has_review_request() { + $is_review_request = QueryParameters::get_param( + self::REVIEW, + 'leadin-review' + ); + return ! empty( $is_review_request ); + } + + /** + * Reads query param to see if request has review request query params set to true + * + * @return bool True if the `leadin_review` query parameter is true + */ + public static function is_review_request() { + $is_review_request = QueryParameters::get_param( + self::REVIEW, + 'leadin-review' + ); + return 'true' === $is_review_request; + } + + +} diff --git a/wp/wp-content/plugins/leadin/public/admin/modules/api/class-hublet-api-controller.php b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-hublet-api-controller.php new file mode 100644 index 00000000..423fa692 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-hublet-api-controller.php @@ -0,0 +1,40 @@ +get_body(), true ); + $hublet = $data['hublet']; + + if ( ! $hublet ) { + return new \WP_REST_Response( 'Hublet is required', 400 ); + } + Portal_Options::set_hublet( $hublet ); + return new \WP_REST_Response( $hublet, 200 ); + } + +} diff --git a/wp/wp-content/plugins/leadin/public/admin/modules/api/class-internal-tracking-api-controller.php b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-internal-tracking-api-controller.php new file mode 100644 index 00000000..072d6aee --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-internal-tracking-api-controller.php @@ -0,0 +1,50 @@ +get_body(), true ) ); + return new \WP_REST_Response( 'OK', 200 ); + } + +} diff --git a/wp/wp-content/plugins/leadin/public/admin/modules/api/class-portal-api-controller.php b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-portal-api-controller.php new file mode 100644 index 00000000..44cfa2e5 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-portal-api-controller.php @@ -0,0 +1,53 @@ +get_body(), true ); + $business_unit_id = $data['businessUnitId']; + Portal_Options::set_business_unit_id( $business_unit_id ); + return new \WP_REST_Response( 'OK', 200 ); + } + +} diff --git a/wp/wp-content/plugins/leadin/public/admin/modules/api/class-user-meta-api-controller.php b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-user-meta-api-controller.php new file mode 100644 index 00000000..80515434 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/modules/api/class-user-meta-api-controller.php @@ -0,0 +1,54 @@ +get_body(), true ); + if ( array_key_exists( 'canTrack', $data ) ) { + $consent = $data['canTrack']; + User_Metadata::set_track_consent( $consent ? 'true' : 'false' ); + } + return new \WP_REST_Response( + json_encode( User_Metadata::get_track_consent(), true ), + 200 + ); + } + +} diff --git a/wp/wp-content/plugins/leadin/public/admin/widgets/class-elementorform.php b/wp/wp-content/plugins/leadin/public/admin/widgets/class-elementorform.php new file mode 100644 index 00000000..cc87585c --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/admin/widgets/class-elementorform.php @@ -0,0 +1,129 @@ +start_controls_section( + 'content_section', + array( + 'label' => esc_html( __( 'Form', 'leadin' ) ), + 'tab' => \Elementor\Controls_Manager::TAB_CONTENT, + ) + ); + + $this->add_control( + 'content', + array( + 'type' => 'leadinformselect', + ) + ); + + $this->end_controls_section(); + } + + /** + * Render the widget + */ + protected function render() { + $settings = $this->get_settings_for_display(); + $content = $settings['content']; + + if ( Plugin::$instance->editor->is_edit_mode() ) { + + ?> +
+   +
+ +
+ +
+ true, + 'rows' => 3, + 'hsptform_options' => array(), + ); + } + + /** + * Render Function + */ + public function content_template() { + $control_uid = $this->get_control_uid(); + ?> +
+ start_controls_section( + 'content_section', + array( + 'label' => esc_html( __( 'Meetings Scheduler', 'leadin' ) ), + 'tab' => \Elementor\Controls_Manager::TAB_CONTENT, + ) + ); + + $this->add_control( + 'content', + array( + 'type' => 'leadinmeetingselect', + ) + ); + + $this->end_controls_section(); + } + + /** + * Render the widget + */ + protected function render() { + $settings = $this->get_settings_for_display(); + $content = $settings['content']; + + if ( Plugin::$instance->editor->is_edit_mode() ) { + ?> +
> +   +
+ + +
+ +
+ true, + 'rows' => 3, + 'hsptmeeting_options' => array(), + ); + } + + /** + * Render Function + */ + public function content_template() { + $control_uid = $this->get_control_uid(); + ?> +
+ + \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/public/assets/images/hubspot-form.png b/wp/wp-content/plugins/leadin/public/assets/images/hubspot-form.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7c25139369668e7c0295aea209cc6c792a584d GIT binary patch literal 27921 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/public/assets/images/hubspot-team-profile.png b/wp/wp-content/plugins/leadin/public/assets/images/hubspot-team-profile.png new file mode 100644 index 0000000000000000000000000000000000000000..31815976f81cabb0fca5c4ec8e9f00f5e01fc42a GIT binary patch literal 40042 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 W$6UK63WG-g0000 + + + HubSpot Wordmark - Full Color + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/public/assets/images/hubspot.svg b/wp/wp-content/plugins/leadin/public/assets/images/hubspot.svg new file mode 100644 index 00000000..0e59856d --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/assets/images/hubspot.svg @@ -0,0 +1 @@ +Asset 3 \ No newline at end of file diff --git a/wp/wp-content/plugins/leadin/public/assets/images/loading-dots.svg b/wp/wp-content/plugins/leadin/public/assets/images/loading-dots.svg new file mode 100644 index 00000000..95c29d33 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/assets/images/loading-dots.svg @@ -0,0 +1,45 @@ + + + + + + + + diff --git a/wp/wp-content/plugins/leadin/public/assets/images/sprocket.svg b/wp/wp-content/plugins/leadin/public/assets/images/sprocket.svg new file mode 100644 index 00000000..a2d622c5 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/assets/images/sprocket.svg @@ -0,0 +1,18 @@ + + + + HubSpot Sprocket - Full Color + Created with Sketch. + + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Bold.woff2 b/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e1768a72762fca8e68e5e706313af96d2778abb9 GIT binary patch literal 29428 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Light.woff2 b/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Light.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..06520b933734b19a22bf27f0ede29b75b9eadf93 GIT binary patch literal 29088 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 TKtz$9m(nfnf3pr)4FCWD3rNK1 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Medium.woff2 b/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9eca3d6c70c37bc4c6bbda7a8260abce4333536b GIT binary patch literal 29452 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-SemiBold.woff2 b/wp/wp-content/plugins/leadin/public/assets/style/fonts/LexendDeca-SemiBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..825131b3f97ec6a6be1ea4c37660f829c907af55 GIT binary patch literal 29604 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/leadin/public/assets/style/fonts/hs-font.svg b/wp/wp-content/plugins/leadin/public/assets/style/fonts/hs-font.svg new file mode 100644 index 00000000..3ce780db --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/assets/style/fonts/hs-font.svg @@ -0,0 +1,11 @@ + + + +Generated by Fontastic.me + + + + + + + diff --git a/wp/wp-content/plugins/leadin/public/assets/style/fonts/hs-font.woff b/wp/wp-content/plugins/leadin/public/assets/style/fonts/hs-font.woff new file mode 100644 index 0000000000000000000000000000000000000000..7fc89788707e622fd2a7239c14d9b2dff60c7b57 GIT binary patch literal 1116 zcmXT-cXRU(3GruOV2NSiW&i@V3~w4JeiXB+f?1wgSAK)x-| zJTHbTOyL=+i75;W%s@MUx)>PDgm`y5WB>($VirKYED)rB`cjJdk^W(HrD1}w&Bihks}T! z*XLO1uigCoh56RT_Cwz6{QNe{pDP|PaNzKq#x-kA?DO+WxtA{R-0h&`kf1N3^f1jN zCS7Nqg1qZI!Q>5vGk&@L5uf+_i<4?i3hN71mWCw^&7q7d9KHn$#HI)-G?lCto4R@R z9<{0Zsk-~OMDJr3U{-2zv3qpTf5YT&%Y*NS+eC(iMt&2qPiDXQrM$MRhkeG`r<+zJ zecXCyx%%=osS#{aA?riFT>5)KaxbrYl5}+1?IoKfqqn|Jp7UVG<8L`u_qi;#C0?2B z?~z|}e6|I5iD`3N=8W?uH|8C`;rM><>n$(D!{1){WwAhiPWJ6}8EbcZn>#JD=tn^H z8nYLI;{3a_XSmsYWA87kjRpo_#hm1XgoG4^CgW}0=bB$gi&l#!m@s(%X1fNFOG!w0 zz?{U%CXkSn(BdR!(9g)g63So#)|Zx)Fz3L5QwI*dI6ULnfddctmhLz5Fxp~ZU|_hR z$mjrrGP4keN3m~WL4rq$M@r3y|BTIYkGuc-CuT{+GjOshq_8mXAK|ryx*@G0L6Xgl zO`w4Blf=OqF*aU>vusNwC1*6OIr9JiL9GK{{<8*rbvSV1Si^%0To>*zonm0P@snKx z>Ia}Z8Iqn}zi)r+^X;0{2Wd$RjUc}~*kaUd@;LXHxPu-$bA%Lw_grosuzf)FH3ttI zSaAFZ15?j-NeRgSMqviSuZ+Kd<}pFAG6O>Zm{T!lYX3p6!ww>@=eJ}!h;&JpPrG@# z#b?*11=hbge>N>s4G{9U9AEgH{ikMKllA)}&z;1b*yW0M6yLASZ;*~FT=F>LQE&Pa z8|m|v56)Uletx*(;MU!y=OTBhTgH~Drka+j&ePm)GB5aZ(wvi@^Y%RG^M5>N>h9-0 z$30eCUD}|$Vfp+m4lTvz+a7Pc*;;$Q*YVK$>+*%!NxRtjxITr5L>=E8_}Bi)?agAX zE49A5%89Q2k!vp_6)(E<{tx@p9+AfdoI~Aa>i_l7y?($`_T img { + height: 30px; +} + +.leadin-notice__title, +.leadin-notice__content { + margin-left: 25px; +} + +.leadin-notice__title { + font-weight: bold; + font-size: 18px; +} + +.leadin-notice__content { + margin-top: 10px; +} + +.leadin-notice__options { + display: flex; + flex-direction: column; + margin-top: 15px; +} + +.leadin-notice__footer { + display: flex; + margin-top: 15px; +} + +.leadin-notice__footer-text { + display: flex; + flex-direction: column; + margin-left: 10px; +} + +.leadin-notice__footer-image { + margin-top: auto; + margin-bottom: auto; +} + +.leadin-notice__cta { + padding: 6px 14px; + font-size: 13px; + font-weight: normal; +} + +.leadin-banner.notice-warning { + border-left-color: #ff7a59; +} + +.leadin-banner__link { + font-weight: 500; +} + +.leadin-review-banner { + position: relative; + padding: 20px 28px 26px 28px; + color: #5f5f5f; +} + +.leadin-review-banner--hide { + display: none; +} + +.leadin-review-banner__dismiss { + position: absolute; + top: 0; + right: 0; + padding: 22px; +} + +.leadin-review-banner__content { + min-height: 74px; +} + +.leadin-review-banner__content-body { + margin-top: 8px; +} + +.leadin-review-banner__text { + margin: 0 !important; + padding: 0 !important; + + font-size: 14px; + font-weight: 400; + line-height: 19px; +} + +.leadin-review-banner__author { + display: flex; + align-items: center; + flex-direction: row; + gap: 8px; + margin-top: 6px; +} + +.leadin-review-banner__profile { + margin-right: 8px; +} + +#toplevel_page_leadin a[href*='leadin_settings'], +#toplevel_page_leadin a[href*='leadin_user_guide'], +#toplevel_page_leadin a[href*='leadin_forms'], +#toplevel_page_leadin a[href*='leadin_chatflows'], +#toplevel_page_leadin a.leadin_lists_link, +#toplevel_page_leadin a.leadin_reporting_link, +#toplevel_page_leadin a.leadin_contacts_link, +#toplevel_page_leadin a.leadin_email_link, +#toplevel_page_leadin a.leadin_pricing_link { + display: inherit; +} + +#toplevel_page_leadin a[href*='leadin_lists'], +#toplevel_page_leadin a[href*='leadin_reporting'], +#toplevel_page_leadin a[href*='leadin_pricing'], +#toplevel_page_leadin a[href*='leadin_contacts'], +#toplevel_page_leadin a[href*='leadin_email'] { + display: none !important; +} + +#toplevel_page_leadin a[href*='leadin_pricing'] + .external_link { + color: #ff7a59 !important; +} + +#toplevel_page_leadin a[href*='leadin_pricing'] + .external_link:hover { + color: #ffbcac !important; +} + +#toplevel_page_leadin a[href*='leadin_pricing'] + .external_link::after { + background-color: #ff7a59; +} + +#toplevel_page_leadin a[href*='leadin_pricing'] + .external_link:hover::after { + background-color: #ffbcac; +} + +#toplevel_page_leadin .external_link:hover::after { + background-color: #72aee6; +} + +#toplevel_page_leadin .external_link::after { + content: ''; + -webkit-mask: url('../images/external_link.svg') no-repeat 50% 50%; + mask: url('../images/external_link.svg') no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + position: absolute; + height: 12px; + width: 12px; + background-size: contain; + margin: 4px 2px; + background-color: rgba(240, 246, 252, 0.7); +} + +/* Needed to prevent the notice banners being shown briefly under the iframe */ +#leadin-iframe-container { + position: absolute; + top: 0; + height: 100% !important; + width: 100% !important; + left: 0; + z-index: 2; +} + +#leadin-iframe-fallback-container { + position: absolute; + top: 0; + height: 100% !important; + width: 100% !important; + left: 0; + background: white; + z-index: 1; +} + +.elementor-element-editable .hubspot-form-edit-mode + .hubspot-widget-empty, +.elementor-element-editable .hubspot-meeting-edit-mode + .hubspot-widget-empty { + display: none; +} + +.hubspot-form-edit-mode ~ .hbspt-form, +.hubspot-meeting-edit-mode ~ .meetings-iframe-container { + pointer-events: none; +} + +.hubspot-widget-empty { + background-image: url('../images/hubspot.svg'); + background-color: #f5f8fa; + background-repeat: no-repeat; + background-position: center 25px; + background-size: 120px; + color: #33475b; + font-family: 'Lexend Deca', Helvetica, Arial, sans-serif; + font-size: 14px; + padding: 90px 20% 25px; +} + +.hubspot-widget-empty p { + font-size: inherit !important; + line-height: 24px; + margin: 4px 0; +} diff --git a/wp/wp-content/plugins/leadin/public/auth/class-oauth.php b/wp/wp-content/plugins/leadin/public/auth/class-oauth.php new file mode 100644 index 00000000..49d6c718 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/auth/class-oauth.php @@ -0,0 +1,86 @@ +add_category( + 'hubspot', + array( + 'title' => esc_html__( 'Hubspot', 'leadin' ), + 'icon' => 'fa fa-plug', + ) + ); + } + + /** + * Register widgets for Elementor. + * + * @param object $widgets_manager elementor widget manager. + */ + public function register_elementor_widgets( $widgets_manager ) { + $widgets_manager->register( new ElementorForm() ); + $widgets_manager->register( new ElementorMeeting() ); + } + + /** + * Register controls for elementor widget + * + * @param object $controls_manager elementor controls manager. + */ + public function register_hsselectors_control( $controls_manager ) { + $controls_manager->register( new ElementorFormSelect() ); + $controls_manager->register( new ElementorMeetingSelect() ); + } + +} + diff --git a/wp/wp-content/plugins/leadin/public/class-pagehooks.php b/wp/wp-content/plugins/leadin/public/class-pagehooks.php new file mode 100644 index 00000000..6c4de5db --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/class-pagehooks.php @@ -0,0 +1,149 @@ + 'post', // specify a post type here. + 'type' => 'string', + 'single' => true, + 'show_in_rest' => true, + 'auth_callback' => function () { + return current_user_can( 'edit_posts' ); + }, + ) + ); + } + + /** + * Adds the script loader to the page. + */ + public function add_frontend_scripts() { + if ( Portal_Options::get_disable_internal_tracking() && ( is_user_logged_in() || current_user_can( 'install_plugins' ) ) ) { + return; + } + + if ( is_single() ) { + $page_type = 'post'; + } elseif ( is_front_page() ) { + $page_type = 'home'; + } elseif ( is_archive() ) { + $page_type = 'archive'; + } elseif ( is_page() ) { + $page_type = 'page'; + } else { + $page_type = 'other'; + } + + $leadin_wordpress_info = array( + 'userRole' => User::get_role(), + 'pageType' => $page_type, + 'leadinPluginVersion' => LEADIN_PLUGIN_VERSION, + ); + + AssetsManager::enqueue_script_loader( $leadin_wordpress_info ); + } + + /** + * Adds the script containing the information needed by the script loader. + */ + public function add_page_analytics() { + $portal_id = Portal_Options::get_portal_id(); + + if ( empty( $portal_id ) ) { + echo ''; + } else { + $content_type = Filters::apply_page_content_type_filters(); + $page_id = get_the_ID(); + $post_meta = get_post_meta( $page_id ); + if ( isset( $post_meta['content-type'][0] ) && '' !== $post_meta['content-type'][0] ) { + $content_type = $post_meta['content-type'][0]; + } elseif ( is_plugin_active( 'elementor/elementor.php' ) ) { + $page_settings_manager = \Elementor\Core\Settings\Manager::get_settings_managers( 'page' ); + $page_settings_model = $page_settings_manager->get_model( $page_id ); + $elementor_content_type = $page_settings_model->get_settings( 'content_type' ); + if ( ! empty( $elementor_content_type ) ) { + $content_type = $elementor_content_type; + } + } + + ?> + + + + + * + * @param String $tag tag name. + * @param String $handle handle. + */ + public function add_id_to_tracking_code( $tag, $handle ) { + if ( AssetsManager::TRACKING_CODE === $handle ) { + $tag = str_replace( "id='" . $handle . "-js'", "async defer id='hs-script-loader'", $tag ); + } + return $tag; + } + + /** + * Add defer to leadin forms plugin + * + * @param String $tag tag name. + * @param String $handle handle. + */ + public function add_defer_to_forms_script( $tag, $handle ) { + if ( AssetsManager::FORMS_SCRIPT === $handle ) { + $tag = str_replace( 'src', 'defer src', $tag ); + } + return $tag; + } + + /** + * Parse leadin shortcodes + * + * @param array $attributes Shortcode attributes. + */ + public function leadin_add_hubspot_shortcode( $attributes ) { + return ShortcodeRenderUtils::render_shortcode( $attributes ); + } + +} diff --git a/wp/wp-content/plugins/leadin/public/data/class-filters.php b/wp/wp-content/plugins/leadin/public/data/class-filters.php new file mode 100644 index 00000000..b0a897c1 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/data/class-filters.php @@ -0,0 +1,173 @@ +roles; + $user_role = array_shift( $user_roles ); + } else { + $user_role = 'visitor'; + } + + return $user_role; + } + + /** + * Return true if the current user has the `manage_options` capability. + */ + public static function is_admin() { + return current_user_can( 'manage_options' ); + } + + /** + * Set metadata for current user + * + * @param String $key metadata key to store data in. + * @param String $data metadata value to store. + */ + public static function set_metadata( $key, $data ) { + update_user_meta( get_current_user_id(), $key, $data ); + } + + /** + * Fetch metadata stored for this user by key + * + * @param String $key metadata to retrieve by the key. + */ + public static function get_metadata( $key ) { + return get_user_meta( get_current_user_id(), $key, true ); + } + + /** + * Delete metadata associated with this user + * + * @param String $key key to delete metadata for. + */ + public static function delete_metadata( $key ) { + delete_user_meta( get_current_user_id(), $key ); + } +} diff --git a/wp/wp-content/plugins/leadin/public/includes/api-loader.php b/wp/wp-content/plugins/leadin/public/includes/api-loader.php new file mode 100644 index 00000000..e693d55d --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/includes/api-loader.php @@ -0,0 +1,27 @@ + $methods, + 'callback' => $callback, + 'permission_callback' => array( $this, 'verify_permissions' ), + ) + ); + } + + /** + * Register an admin route with given parameters + * + * @param string $path The path for the route to register the service on. Route gets namespaced with leadin/v1. + * @param string $methods Comma seperated list of methods allowed for this route. + * @param array $callback Method to execute when this endpoint is requested. + */ + public function register_leadin_admin_route( $path, $methods, $callback ) { + register_rest_route( + 'leadin/v1', + $path, + array( + 'methods' => $methods, + 'callback' => $callback, + 'permission_callback' => array( $this, 'verify_admin_permissions' ), + ) + ); + } + + + /** + * Permissions required by user to execute the request. User permissions are already + * verified by nonce 'wp_rest' automatically. + * + * @return bool true if the user has adequate permissions for this endpoint. + */ + public function verify_permissions() { + return current_user_can( Filters::apply_view_plugin_menu_capability_filters() ); + } + + /** + * Permissions required by user to execute the request. User permissions are already + * verified by nonce 'wp_rest' automatically. + * + * @return bool true if the user has adequate admin permissions for this endpoint. + */ + public function verify_admin_permissions() { + return current_user_can( Filters::apply_connect_plugin_capability_filters() ); + } + +} diff --git a/wp/wp-content/plugins/leadin/public/modules/api/class-healthcheck-api-controller.php b/wp/wp-content/plugins/leadin/public/modules/api/class-healthcheck-api-controller.php new file mode 100644 index 00000000..b820d26f --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/modules/api/class-healthcheck-api-controller.php @@ -0,0 +1,33 @@ + $error, + ), + intval( $code ) + ); + } + + /** + * Send JSON response with a message key. + * + * @param String $message Message to be sent on te JSON. + */ + public static function send_message( $message ) { + self::send( + array( + 'message' => $message, + ), + 200 + ); + } +} diff --git a/wp/wp-content/plugins/leadin/public/utils/class-shortcoderenderutils.php b/wp/wp-content/plugins/leadin/public/utils/class-shortcoderenderutils.php new file mode 100644 index 00000000..d07c987d --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/utils/class-shortcoderenderutils.php @@ -0,0 +1,179 @@ + null ), $shortcode_attrs ); + + $type = $parsed_attributes['type']; + if ( ! isset( $type ) ) { + return; + } + + switch ( $type ) { + case 'form': + return self::render_form( $shortcode_attrs ); + case 'cta': + return self::render_cta( $shortcode_attrs ); + case 'meeting': + return self::render_meeting( $shortcode_attrs ); + } + } + + /** + * Render form leadin shortcodes + * + * @param array $attrs Shortcode attributes. + */ + private static function render_form( $attrs ) { + $parsed_attributes = shortcode_atts( + array( + 'portal' => null, + 'id' => null, + ), + $attrs + ); + + $portal_id = $parsed_attributes['portal']; + $id = $parsed_attributes['id']; + + if ( ! isset( $portal_id ) || ! isset( $id ) || ! is_numeric( $portal_id ) || + ! ( self::is_valid_uuid( $id ) || is_numeric( $id ) ) ) { + return; + } + + $form_div_uuid = self::generate_div_uuid(); + $hublet = Filters::apply_hublet_filters(); + AssetsManager::enqueue_forms_script(); + return ' + +
'; + } + + /** + * Render cta leadin shortcodes + * + * @param array $attrs Shortcode attributes. + */ + private static function render_cta( $attrs ) { + $parsed_attributes = shortcode_atts( + array( + 'portal' => null, + 'id' => null, + ), + $attrs + ); + + $portal_id = $parsed_attributes['portal']; + $id = $parsed_attributes['id']; + + if ( ! isset( $portal_id ) || ! isset( $id ) || ! is_numeric( $portal_id ) || + ! ( self::is_valid_uuid( $id ) || is_numeric( $id ) ) ) { + return; + } + + return ' + + + + +
+ New call-to-action + + + <' . 'script charset="utf-8" src="//js.hubspot.com/cta/current.js"> + + + + '; + } + + /** + * Render meeting leadin shortcodes + * + * @param array $attrs Shortcode attributes. + */ + private static function render_meeting( $attrs ) { + $parsed_attributes = shortcode_atts( + array( + 'url' => null, + ), + $attrs + ); + + $url = esc_url_raw( $parsed_attributes['url'] ); + + if ( filter_var( $url, FILTER_VALIDATE_URL ) === false ) { + return; + } + + AssetsManager::enqueue_meetings_script(); + + return ' +
+ + '; + } + + /** + * Generates 10 characters long string with random values + */ + private static function get_random_number_string() { + $result = ''; + for ( $i = 0; $i < 10; $i++ ) { + $result .= wp_rand( 0, 9 ); + } + return $result; + } + + /** + * Generates a unique uuid + */ + private static function generate_div_uuid() { + return time() * 1000 . '-' . self::get_random_number_string(); + } + + /** + * Checks if input is a valid uuid. + * + * @param String $uuid input to validate. + */ + private static function is_valid_uuid( $uuid ) { + if ( ! is_string( $uuid ) || ( preg_match( '/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', $uuid ) !== 1 ) ) { + return false; + } + return true; + } + +} diff --git a/wp/wp-content/plugins/leadin/public/utils/class-versions.php b/wp/wp-content/plugins/leadin/public/utils/class-versions.php new file mode 100644 index 00000000..6be01a6d --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/utils/class-versions.php @@ -0,0 +1,62 @@ + 6.4.2 + * + * @param String $version version. + */ + private static function parse_version( $version ) { + preg_match( '/^\d+(\.\d+){0,2}/', $version, $match ); + if ( empty( $match ) ) { + return ''; + } + return $match[0]; + } + + /** + * Return the current WordPress version. + */ + public static function get_wp_version() { + global $wp_version; + return self::parse_version( $wp_version ); + } + + /** + * Return the current PHP version. + */ + public static function get_php_version() { + return self::parse_version( phpversion() ); + } + + /** + * Return true if the current PHP version is not supported. + */ + public static function is_php_version_not_supported() { + return version_compare( phpversion(), LEADIN_REQUIRED_PHP_VERSION, '<' ); + } + + /** + * Return true if the current WordPress version is not supported. + */ + public static function is_wp_version_not_supported() { + global $wp_version; + return version_compare( $wp_version, LEADIN_REQUIRED_WP_VERSION, '<' ); + } + + /** + * Return true if a given version is less than the supported version + * + * @param String $version Given version to check. + * @param String $version_to_compare The version number to test the given version against. + */ + public static function is_version_less_than( $version, $version_to_compare ) { + return version_compare( $version, $version_to_compare, '<' ); + } +} diff --git a/wp/wp-content/plugins/leadin/public/wp/class-page.php b/wp/wp-content/plugins/leadin/public/wp/class-page.php new file mode 100644 index 00000000..87a2abf9 --- /dev/null +++ b/wp/wp-content/plugins/leadin/public/wp/class-page.php @@ -0,0 +1,33 @@ +is_block_editor() ) { + // Gutenberg page on 5+. + return true; + } + return false; + } + + /** + * Return true if the current page is the WP Admin dashboard. + */ + public static function is_dashboard() { + $screen = get_current_screen(); + return 'dashboard' === $screen->id; + } +} diff --git a/wp/wp-content/plugins/leadin/readme.md b/wp/wp-content/plugins/leadin/readme.md new file mode 100644 index 00000000..c63fa456 --- /dev/null +++ b/wp/wp-content/plugins/leadin/readme.md @@ -0,0 +1,7 @@ +# Leadin plugin + +## How to build + +- yarn install +- yarn build +- yarn plugin-zip diff --git a/wp/wp-content/plugins/leadin/readme.txt b/wp/wp-content/plugins/leadin/readme.txt new file mode 100644 index 00000000..d27d087c --- /dev/null +++ b/wp/wp-content/plugins/leadin/readme.txt @@ -0,0 +1,429 @@ +=== HubSpot - CRM, Email Marketing, Live Chat, Forms & Analytics === +Contributors: HubSpotDev, leadin +License: GPLv3 +License URI: http://www.gnu.org/licenses/gpl.html +Tags: CRM, Marketing, Live Chat, Forms, Analytics, popups, newsletter, contact management, chat, contact form, marketing automation +Requires at least: 5.8 +Tested up to: 6.4.1 +Requires PHP: 7.2 +Stable tag: 11.1.11 + +The CRM, Sales, and Marketing WordPress plugin to grow your business better. + +Capture, organize, and engage web visitors with free live chat, forms, CRM (contact management), email marketing, and analytics. Easy to use, no coding. + +== Description == + +*HubSpot is a CRM platform with all the tools and integrations you need for marketing, sales, and customer service. Each product in the platform is powerful alone, but the real magic happens when you use them together. See for yourself in the free HubSpot WordPress plugin.* + +Build a relationship with your audience and grow your business with HubSpot. HubSpot's all-in-one WordPress plugin allows you to manage contacts (CRM), create the best email marketing campaigns, engage visitors with live chat and chatbots, add beautiful forms to pages, and more. + +Use HubSpot to: + +- 💬 Connect with visitors on your site in real-time using live chat and chatbots. +- 📋 Capture leads with ease — build custom forms or link existing forms from your website in minutes. +- 📧 Nurture your leads by sending newsletters & automating email marketing campaigns. +- 📈 Track the health of your business with easy-to-understand analytics dashboards. +- 🚀 See a unified timeline of a contact’s page views, past conversations, and more in the smart WordPress CRM plugin. + +Ready to get started? Click download in the top right corner of the page. + +### CRM & Contact Management Platform +Your CRM in the HubSpot WordPress plugin is your company's command center. It's the place where you can track every single customer interaction and get a 360-degree view of your customers. You can even use it to manage or automate marketing, sales, and service processes.] + +With HubSpot CRM, you don't need to jump from tool to tool to keep track of everything. Instead, you can store all of your data in one place. + +HubSpot’s free WordPress CRM gives you ultimate visibility into customer interactions across every team in your organization. That means that everyone will be on the same page—from marketing to sales to customer service—and able to help your customers more effectively. + +Best of all, if you’re planning on growing your business (or you already are), HubSpot has the tools to grow with you. + +Features of our top WordPress CRM that you'll love, suited specifically for your business needs: + +✅ Lead generation & lead management on your WordPress website +✅ Pipeline management +✅ WordPress email marketing +✅ WordPress reporting dashboard +✅ Contact management +✅ Prospect tracking + +Streamline your entire business with the free CRM solution that has something for everyone. Try the HubSpot CRM plugin today. + +### [Email Newsletter & Marketing Automation Software](https://www.hubspot.com/products/wordpress/email-marketing) +Would you like to enhance your WordPress email marketing campaigns or build the best email newsletter templates? 🤔 + +Maybe you'd like to explore different automation features, build professional emails in minutes, and send them to your entire contact database with ease. + +Try the HubSpot WordPress email marketing plugin today. Customers love our free email marketing software for features like: + +🤩 **20+ pre-designed free email templates to match your campaign goals. (Choose from free newsletter templates, eBooks, welcome emails, and more!)** + +> All you have to do is add your content and press send! + +âš’ï¸ **Drag and drop WordPress newsletter builder.** + +> Build beautiful newsletter templates with the HubSpot WordPress plugin. Create custom newsletter templates effortlessly with a drag-and-drop builder. + +> Test out newsletters before you send them, schedule publications for the best time to convert, optimize for mobile devices, and save your own email designs to use again later. + +> Send newsletters to targeted contact lists all within the free WordPress newsletter plugin tool.. + +> Adjust typography, designs, colors, and more to create email campaigns your subscribers will love! + +🤖 **Email automation software, email tracking, and A/B testing tools.** + +> Send automated emails anytime someone fills out a form or engages with your live chat & chatbots. You can send messages immediately or use email scheduling to send messages later. + +> Setup an A/B test of your newsletter while designing it. Test out different email calls to action and optimize your newsletters with the best performing versions. + +Email is one of the most effective ways to stay connected to your audience. With email tracking, all of your emails are logged in your database. You can measure email engagement with reports for delivery rates, open rates, and click-through rates — and use that information to improve campaigns. + +### [Live Chat & Chatbots](https://www.hubspot.com/products/wordpress/live-chat) +Make your website a 24-hour marketing machine on autopilot with the HubSpot WordPress live chat plugin. + +Live website chat inside the HubSpot WordPress plugin streamlines the customer experience, making it easier than ever for you to engage with website visitors leads, convert them into customers, and provide them with the support they need. + +HubSpot’s free WordPress live chat solution software offers: + +😀 Custom styling to match your website +🤖 A variety of chatbot options including: + +- ✅ Concierge chatbot +- ✅ Qualify leads chatbot +- ✅ Meetings chatbot +- ✅ Tickets chatbot +- ✅ Knowledge base & support chatbot +- ✅ Offline chatbot + +📲 Real-time live messaging on the go via HubSpot’s mobile app +👨â€ðŸ’» A Slack integration to receive and respond to live chat notifications +🕠24/7 live chat support on autopilot + +Our free live chat plugin feature helps you turn website visitors into customers by providing insightful, real-time support. + +### [Forms & Popups](https://www.hubspot.com/products/wordpress/forms) +Want to know the easiest way to learn more about your visitors? + +*Ask them directly.* + +The problem is that forms can come in so many different shapes and sizes that it's hard to know where to start. That's why HubSpot has options for you. + +​​HubSpot's form builder and popup plugin give you the power to create or edit forms in just a few clicks. + +First, get familiar with our different form types: + +✅ Embedded +✅ Standalone page +✅ Pop-up box +✅ Dropdown banner +✅ Slide in left/right box + +Then, when you're ready to go, pick a custom template: + +✅ Contact us +✅ Newsletter sign up form template +✅ Support template +✅ eBook download template +✅ Event registration template +✅ More coming soon + +Choose from a variety of settings, color schemes, and fonts — or start from scratch. HubSpot comes with an intuitive form and popup builder that simplifies the process, no matter what type of form you have in mind. + +Rather stick with your existing forms and popup plugin? That’s fine too! HubSpot integrates with most WordPress form builders, form creators, and popup builders out-of-the-box so you don’t have to worry about a thing. + +### [Live Chat & Chatbots](https://www.hubspot.com/products/wordpress/live-chat) +Make your website a 24-hour marketing machine on autopilot. + +Live web chat inside the HubSpot WordPress plugin streamlines the customer experience, making it easier than ever for you to engage with leads, convert them into customers, and provide them with the support they need. + +HubSpot’s WordPress live chat software offers: + +😀 Custom styling to match your website +🤖 A variety of bot options including: + +- ✅ Concierge bot +- ✅ Qualify leads bot +- ✅ Meetings bot +- ✅ Tickets bot +- ✅ Knowledge base & support bot +- ✅ Offline bot + +📲 Real-time messaging on the go via HubSpot’s mobile app +👨â€ðŸ’» A Slack integration to receive and respond to chat notifications +🕠24/7 live support on autopilot + +Our free live chat feature helps you turn website visitors into customers by providing insightful, real-time support. + +### [Analytics](https://www.hubspot.com/products/wordpress/analytics) + +Customers are browsing your website, but what are they actually looking at? + +The HubSpot WordPress plugin gives you a straightforward, visual answer. + +With built-in marketing analytics (email analytics, web traffic analytics, WordPress analytics), it's easy to understand which marketing actions are driving the most results… and which ones you need to fix. Quickly see how your forms, popup forms, live chat & chatbots, email marketing, and sales follow-ups are helping grow your business. + +👩â€ðŸ’» **Get a complete picture of who's on your site.** + +What pages are being looked at? Who is visiting the pages? How long do they stay on-site? What parts of the site do they spend the most time on? With our plugin, you'll be able to see everything about your visitor behavior in one place—and learn how to convert them into customers! + +📈 **Get detailed reports across marketing channels.** + +Create detailed reports on performance of various assets, from blog posts and landing pages to email campaigns and more. Arrange these views in dashboards in your plugin, so you can easily see the performance of your website and make data-driven decisions. + +### Seamless Integrations +Ready to get started? Now you can easily integrate HubSpot with over 1030 integrations including: + +💻 **Social Media Software, Analytics, & Advertising Software Integrations** + +✅ Adroll +✅ Facebook Ads +✅ Facebook Messenger +✅ Google Ads +✅ Hotjar +✅ Instagram +✅ Linkedin Ads +✅ Twitter +✅ YouTube + +📲 **Communications & Design Integrations** + +✅ Canva +✅ HelloSign +✅ Slack +✅ Vidyard +✅ Integromat +✅ Zoom + +ðŸ–¥ï¸ **CRM, Email Marketing, & Marketing Automation Integrations** + +✅ Active Campaign +✅ Campaign Monitor +✅ Constant Contact +✅ Drip +✅ Gmail +✅ Hustle +✅ Mailchimp +✅ Ontraport +✅ Outlook +✅ Salesforce +✅ Sendinblue +✅ WP Fusion +✅ Zoho +✅ Neverbounce +✅ Email Delivery Optimization by Seventh Sense + +💵 **E-commerce (Online Store), Recurring Payment, & Payment Processing Integrations** + +✅ BigCommerce +✅ Shopify +✅ Stripe +✅ WooCommerce + +📆 **Events & Meeting Scheduling Software Integrations** + +✅ Calendly +✅ Eventbrite +✅ The Events Calendar + +📋 **Forms, Landing Page Builders, & CRO Integrations** + +✅ Elementor +✅ Formidable Forms +✅ Forminator +✅ Gravity Forms +✅ Instapage +✅ JotForm +✅ Kali Forms +✅ MailOptIn +✅ Ninja Forms +✅ OptInMonster +✅ Sumo +✅ Survey Monkey +✅ Typeform +✅ Unbounce +✅ WPForms + +💬 **Live Chat & Customer Support Software Integrations** + +✅ Drift +✅ Front +✅ Help Scout +✅ Intercom +✅ LiveChat +✅ Pure Chat +✅ Zendesk +✅ Sakari SMS +✅ Treble.ai + +🔋 **Productivity & Project Management Software Integrations** + +✅ Asana +✅ Jira + +### What are people saying about the HubSpot plugin? + +> “HubSpot was a big factor in helping us scale WP Buffs to $1M in revenue. Their plugin and sales CRM made our sales process so much more professional and kept us fully organized as we grew from 1 salesperson to 4. Plus, the reporting dashboards allow me to know where our sales game is strong and where we can still improve with just a few clicks. Needless to say, I'm all in on HubSpot.†– **Joe Howard, Founder & CEO, WP Buffs** + +> “HubSpot educates marketers beyond just the anonymous web analytics they get from Google Analytics. Instead, it digs down to individual users.†– **Michael Shoup, Founder / CEO, 12South Marketing** + +> “HubSpot dramatically cuts down the time I spend on marketing. We used to spend tons of time generating very few inbound leads, but those numbers have gone through the roof with minimal effort.†– **Brian Ruhlmann, Director of Sales & Marketing, AdmitHub** + +== Installation == + += Search = + +The easiest way to install this plugin is to use the WordPress Admin interface. + +- Go to your admin dashboard +- Find the "Plugins" menu +- Click on "Add New" +- Search for "HubSpot" +- Click "Install Now" +- Go to your "Plugins" menu +- Click "Activate" on the HubSpot - CRM, Email Marketing, Live Chat, Forms & Analytics plugin +- Log in or sign up for a HubSpot account + +Your WordPress site and HubSpot account will be connected and you're ready to get started with HubSpot - CRM, Email Marketing, Live Chat, Forms & Analytics. + += Upload = + +1. Upload the 'leadin' folder to the '/wp-content/plugins/' directory +2. Activate the plugin through the 'Plugins' menu in WordPress + +Having trouble? Check out our help documentation + +== Frequently Asked Questions == + += Requirements = + +- Your website or blog must be using WordPress.org version 3.7 or higher on your server. We recommend the latest version. +- The plugin cannot be installed on WordPress.com sites, as they do not allow you to add plugins or Javascript. +- The wp_footer function must be included in your WordPress theme’s footer file (footer.php). +- This function is required for our Javascript snippet to be installed on every page of your site. +- You must be a WordPress admin to be able to install plugins for your site. If you are not the admin, you can forward these instructions to the person who manages your WordPress install. + += What does the plugin do? = + +HubSpot's WordPress plugin allows you to use HubSpot email marketing, CRM, forms, popups, analytics, and live chat on your WordPress website. This plugin gives you all the tools you need to grow your business and delight your contacts and customers. + += What is HubSpot? = + +HubSpot is an all-in-one CRM platform that provides a marketing, sales, and customer service products to help you grow your business. + += Who should use HubSpot? = + +HubSpot is perfect for agencies, business owners (including small businesses and e-commerce companies), bloggers, designers, or anyone with a WordPress website that wants to use a seamless CRM plugin with built-in marketing tools. 135,000+ companies in 100+ countries already use HubSpot to grow their businesses. + += Are coding skills needed to use the HubSpot WordPress plugin? = + +Not at all! HubSpot’s WordPress plugin is easy to download and starts working seamlessly with your WordPress site right away. You can take advantage of our CRM, live chat, email marketing, forms, and much more without the need to code. + += What is available for free with HubSpot? = + +With HubSpot’s WordPress plugin, you can use the free CRM software for email marketing, contact management, live chat, customer service, content creation, content management, and more. HubSpot’s full suite of free tools is perfect for small businesses looking to grow and streamline their tech stack. is free to use with forms, contact management, email marketing, and more. + +HubSpot also has paid tiers available for those who want more advanced functionality like blogging, landing pages, search engine optimization (SEO), team email, retargeting, lead scoring, bots, email scheduling, NPS surveys, calls-to-action (CTAs), knowledge base, and more. If you'd like a complete view of the features offered in HubSpot's free and paid tiers, view our pricing page. + +Our CRM for Wordpress is powered by HubSpot’s free CRM. + += Do I need to install a Wordpress SMTP plugin to use HubSpot's email feature? = + +No, there’s no need to install an additional mail SMTP plugin. + +Unlike other Wordpress form plugins and email plugins that send messages using a PHP mail function, HubSpot is a stand-alone email marketing software. You can define your IMAP and SMTP from your existing mail service (Gmail, Outlook, Yahoo) and stop worrying about email deliverability from within WordPress. + += What types of forms and popups can I build with HubSpot? = + +Here are some examples of the types of forms and popups you can create with HubSpot: + +- advanced forms +- announcement popup +- appointment form +- banner bar +- calculator form +- conditional form +- conditional logic form +- contact button form +- contact form popup +- contact forms +- coupon popup +- custom form +- custom forms +- custom popup +- custom popups +- donation form +- email form +- email forms +- email submit form +- event form +- exit intent popup forms +- exit popup +- feedback form +- file upload form +- floating bar popup +- inline signup form +- lightbox popup +- mobile popup +- multi page form +- newsletter form +- newsletter popup +- order form +- payment form +- pdf form +- popup form +- quiz form +- quote form +- quote request form +- registration popup +- scroll trigger popup +- signature form +- signup form +- slide-in popup +- slide-in scroll popup +- star rating form +- sticky bar +- sticky popup +- subscription form +- survey form +- survey popup +- targeted popup +- time on site popup +- upload form +- user registration form +- web contact form +- web form +- welcome mat popup +- woocommerce popup + +Rather use your existing form tool? HubSpot integrates with most WordPress form builders and popup builders. + += Does HubSpot support e-commerce stores? = + +The HubSpot WordPress plugin is great for many types of businesses including ecommerce. For WooCommerce shop owners, consider the HubSpot for WooCommerce plugin for even added functionality in your shop. + += My question is not listed. = + +Please visit the HubSpot Community for more detailed documentation and support. Thank you! + +== Screenshots == + +1. Measure impact with reports. +2. Organize, track, and nurture your leads in your free HubSpot CRM. +3. Your website forms will automatically sync with your HubSpot CRM. +4. Nurture and convert leads with lists and email. +5. Send contacts a beautiful, effective and personalized email. +6. Add live chat to your website and easily engage & help your site visitors. +7. Add 24/7 chatbots to your website to help automate lead capture and support. +8. Create beautiful forms and popups on your website in minutes using the intuitive drag and drop builder. + +== Changelog == + +Full changelog here +- Current version: 11.1.11 +- Version release date: 2024-05-16 + += 11.1.11 (2024-05-16) = +* Add another field to integrated app config + += 11.1.10 (2024-05-15) = +* fix race condition with our Elementor widgets which would occasionally prevent them from loading. + diff --git a/wp/wp-content/plugins/leadin/scripts/api/wordpressApiClient.ts b/wp/wp-content/plugins/leadin/scripts/api/wordpressApiClient.ts new file mode 100644 index 00000000..31fa798e --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/api/wordpressApiClient.ts @@ -0,0 +1,82 @@ +import $ from 'jquery'; + +import Raven from '../lib/Raven'; +import { restNonce, restUrl } from '../constants/leadinConfig'; +import { addQueryObjectToUrl } from '../utils/queryParams'; + +function makeRequest( + method: string, + path: string, + data: any = {}, + queryParams = {} +): Promise { + // eslint-disable-next-line compat/compat + const restApiUrl = new URL(`${restUrl}leadin/v1${path}`); + addQueryObjectToUrl(restApiUrl, queryParams); + + return new Promise((resolve, reject) => { + const payload: { [key: string]: any } = { + url: restApiUrl.toString(), + method, + contentType: 'application/json', + beforeSend: (xhr: any) => xhr.setRequestHeader('X-WP-Nonce', restNonce), + success: resolve, + error: (response: any) => { + Raven.captureMessage( + `HTTP Request to ${restApiUrl} failed with error ${response.status}: ${response.responseText}`, + { + fingerprint: [ + '{{ default }}', + path, + response.status, + response.responseText, + ], + } + ); + reject(response); + }, + }; + + if (method !== 'get') { + payload.data = JSON.stringify(data); + } + + $.ajax(payload); + }); +} + +export function healthcheckRestApi() { + return makeRequest('get', '/healthcheck'); +} + +export function disableInternalTracking(value: boolean) { + return makeRequest('put', '/internal-tracking', value ? '1' : '0'); +} + +export function fetchDisableInternalTracking() { + return makeRequest('get', '/internal-tracking').then(message => ({ + message, + })); +} + +export function updateHublet(hublet: string) { + return makeRequest('put', '/hublet', { hublet }); +} + +export function skipReview() { + return makeRequest('post', '/skip-review'); +} + +export function trackConsent(canTrack: boolean) { + return makeRequest('post', '/track-consent', { canTrack }).then(message => ({ + message, + })); +} + +export function setBusinessUnitId(businessUnitId: number) { + return makeRequest('put', '/business-unit', { businessUnitId }); +} + +export function getBusinessUnitId() { + return makeRequest('get', '/business-unit'); +} diff --git a/wp/wp-content/plugins/leadin/scripts/constants/defaultFormOptions.ts b/wp/wp-content/plugins/leadin/scripts/constants/defaultFormOptions.ts new file mode 100644 index 00000000..8396848b --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/constants/defaultFormOptions.ts @@ -0,0 +1,35 @@ +import { __ } from '@wordpress/i18n'; + +const REGISTRATION_FORM = 'REGISTRATION_FORM'; +const CONTACT_US_FORM = 'CONTACT_US_FORM'; +const NEWSLETTER_FORM = 'NEWSLETTER_FORM'; +const SUPPORT_FORM = 'SUPPORT_FORM'; +const EVENT_FORM = 'EVENT_FORM'; + +export type FormType = + | typeof REGISTRATION_FORM + | typeof CONTACT_US_FORM + | typeof NEWSLETTER_FORM + | typeof SUPPORT_FORM + | typeof EVENT_FORM; + +export const DEFAULT_OPTIONS = { + label: __('Templates', 'leadin'), + options: [ + { label: __('Registration Form', 'leadin'), value: REGISTRATION_FORM }, + { label: __('Contact us Form', 'leadin'), value: CONTACT_US_FORM }, + { label: __('Newsletter sign-up Form', 'leadin'), value: NEWSLETTER_FORM }, + { label: __('Support Form', 'leadin'), value: SUPPORT_FORM }, + { label: __('Event Registration Form', 'leadin'), value: EVENT_FORM }, + ], +}; + +export function isDefaultForm(value: FormType) { + return ( + value === REGISTRATION_FORM || + value === CONTACT_US_FORM || + value === NEWSLETTER_FORM || + value === SUPPORT_FORM || + value === EVENT_FORM + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/constants/leadinConfig.ts b/wp/wp-content/plugins/leadin/scripts/constants/leadinConfig.ts new file mode 100644 index 00000000..b4b22020 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/constants/leadinConfig.ts @@ -0,0 +1,138 @@ +interface KeyStringObject { + [key: string]: string; +} + +export type ContentEmbedDetails = { + activated: boolean; + installed: boolean; + canActivate: boolean; + canInstall: boolean; + nonce: string; +}; + +export interface LeadinConfig { + accountName: string; + adminUrl: string; + activationTime: string; + connectionStatus?: 'Connected' | 'NotConnected'; + deviceId: string; + didDisconnect: '1' | '0'; + env: string; + formsScript: string; + meetingsScript: string; + formsScriptPayload: string; + hublet: string; + hubspotBaseUrl: string; + hubspotNonce: string; + iframeUrl: string; + impactLink?: string; + lastAuthorizeTime: string; + lastDeauthorizeTime: string; + lastDisconnectTime: string; + leadinPluginVersion: string; + leadinQueryParams: KeyStringObject; + loginUrl: string; + locale: string; + phpVersion: string; + pluginPath: string; + plugins: KeyStringObject; + portalDomain: string; + portalEmail: string; + portalId: number; + redirectNonce: string; + restNonce: string; + restUrl: string; + reviewSkippedDate: string; + refreshToken?: string; + theme: string; + trackConsent?: boolean | string; + wpVersion: string; + contentEmbed: ContentEmbedDetails; + requiresContentEmbedScope?: boolean; + refreshTokenError?: string; +} + +const { + accountName, + adminUrl, + activationTime, + connectionStatus, + deviceId, + didDisconnect, + env, + formsScript, + meetingsScript, + formsScriptPayload, + hublet, + hubspotBaseUrl, + hubspotNonce, + iframeUrl, + impactLink, + lastAuthorizeTime, + lastDeauthorizeTime, + lastDisconnectTime, + leadinPluginVersion, + leadinQueryParams, + locale, + loginUrl, + phpVersion, + pluginPath, + plugins, + portalDomain, + portalEmail, + portalId, + redirectNonce, + restNonce, + restUrl, + refreshToken, + reviewSkippedDate, + theme, + trackConsent, + wpVersion, + contentEmbed, + requiresContentEmbedScope, + refreshTokenError, +}: //@ts-expect-error global +LeadinConfig = window.leadinConfig; + +export { + accountName, + adminUrl, + activationTime, + connectionStatus, + deviceId, + didDisconnect, + env, + formsScript, + meetingsScript, + formsScriptPayload, + hublet, + hubspotBaseUrl, + hubspotNonce, + iframeUrl, + impactLink, + lastAuthorizeTime, + lastDeauthorizeTime, + lastDisconnectTime, + leadinPluginVersion, + leadinQueryParams, + loginUrl, + locale, + phpVersion, + pluginPath, + plugins, + portalDomain, + portalEmail, + portalId, + redirectNonce, + restNonce, + restUrl, + refreshToken, + reviewSkippedDate, + theme, + trackConsent, + wpVersion, + contentEmbed, + requiresContentEmbedScope, + refreshTokenError, +}; diff --git a/wp/wp-content/plugins/leadin/scripts/constants/selectors.ts b/wp/wp-content/plugins/leadin/scripts/constants/selectors.ts new file mode 100644 index 00000000..9afb2402 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/constants/selectors.ts @@ -0,0 +1,19 @@ +export const domElements = { + iframe: '#leadin-iframe', + subMenu: '.toplevel_page_leadin > ul', + subMenuLinks: '.toplevel_page_leadin > ul a', + subMenuButtons: '.toplevel_page_leadin > ul > li', + deactivatePluginButton: '[data-slug="leadin"] .deactivate a', + deactivateFeedbackForm: 'form.leadin-deactivate-form', + deactivateFeedbackSubmit: 'button#leadin-feedback-submit', + deactivateFeedbackSkip: 'button#leadin-feedback-skip', + thickboxModalClose: '.leadin-modal-close', + thickboxModalWindow: 'div#TB_window.thickbox-loading', + thickboxModalContent: 'div#TB_ajaxContent.TB_modal', + reviewBannerContainer: '#leadin-review-banner', + reviewBannerLeaveReviewLink: 'a#leave-review-button', + reviewBannerDismissButton: 'a#dismiss-review-banner-button', + leadinIframeContainer: 'leadin-iframe-container', + leadinIframe: 'leadin-iframe', + leadinIframeFallbackContainer: 'leadin-iframe-fallback-container', +}; diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/Common/ConnectPluginBanner.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ConnectPluginBanner.tsx new file mode 100644 index 00000000..9cbe2b45 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ConnectPluginBanner.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import ElementorBanner from './ElementorBanner'; +import { __ } from '@wordpress/i18n'; + +export default function ConnectPluginBanner() { + return ( + + ' + ) + .replace('%2$s', ''), + }} + > + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorBanner.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorBanner.tsx new file mode 100644 index 00000000..4a35799f --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorBanner.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +interface IElementorBannerProps { + type?: string; +} + +export default function ElementorBanner({ + type = 'warning', + children, +}: React.PropsWithChildren) { + return ( +
+
+ {children} +
+
+ ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorButton.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorButton.tsx new file mode 100644 index 00000000..e041f8c8 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorButton.tsx @@ -0,0 +1,25 @@ +import { styled } from '@linaria/react'; +import React from 'react'; + +const Container = styled.div` + display: flex; + justify-content: center; + padding-bottom: 8px; +`; + +export default function ElementorButton({ + children, + ...params +}: React.PropsWithChildren>) { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorWrapper.ts b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorWrapper.ts new file mode 100644 index 00000000..169fd90b --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/Common/ElementorWrapper.ts @@ -0,0 +1,25 @@ +import { styled } from '@linaria/react'; + +interface IElementorWrapperProps { + pluginPath?: string; +} + +export default styled.div` + background-image: ${props => + `url(${props.pluginPath}/plugin/assets/images/hubspot.svg)`}; + background-color: #f5f8fa; + background-repeat: no-repeat; + background-position: center 25px; + background-size: 120px; + color: #33475b; + font-family: 'Lexend Deca', Helvetica, Arial, sans-serif; + font-size: 14px; + + padding: ${(props: any) => props.padding || '90px 20% 25px'}; + + p { + font-size: inherit !important; + line-height: 24px; + margin: 4px 0; + } +`; diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/ElementorFormSelect.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/ElementorFormSelect.tsx new file mode 100644 index 00000000..ef2768dd --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/ElementorFormSelect.tsx @@ -0,0 +1,86 @@ +import React, { useState, useEffect, Fragment } from 'react'; +import { portalId, refreshToken } from '../../constants/leadinConfig'; +import ElementorBanner from '../Common/ElementorBanner'; +import UISpinner from '../../shared/UIComponents/UISpinner'; +import { __ } from '@wordpress/i18n'; +import { + BackgroudAppContext, + useBackgroundAppContext, +} from '../../iframe/useBackgroundApp'; +import useForms from './hooks/useForms'; +import { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils'; + +interface IElementorFormSelectProps { + formId: string; + setAttributes: Function; +} + +function ElementorFormSelect({ + formId, + setAttributes, +}: IElementorFormSelectProps) { + const { hasError, forms, loading } = useForms(); + + return loading ? ( +
+ +
+ ) : hasError ? ( + + {__('Please refresh your forms or try again in a few minutes', 'leadin')} + + ) : ( + + ); +} + +function ElementorFormSelectWrapper(props: IElementorFormSelectProps) { + const isBackgroundAppReady = useBackgroundAppContext(); + + return ( + + {!isBackgroundAppReady ? ( +
+ +
+ ) : ( + + )} +
+ ); +} + +export default function ElementorFormSelectContainer( + props: IElementorFormSelectProps +) { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormControlController.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormControlController.tsx new file mode 100644 index 00000000..f78756e7 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormControlController.tsx @@ -0,0 +1,31 @@ +import React, { Fragment } from 'react'; +import { connectionStatus } from '../../constants/leadinConfig'; +import ConnectPluginBanner from '../Common/ConnectPluginBanner'; +import ElementorFormSelect from './ElementorFormSelect'; +import { IFormAttributes } from './registerFormWidget'; + +const ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected', +}; + +export default function FormControlController( + attributes: IFormAttributes, + setValue: Function +) { + return () => { + const render = () => { + if (connectionStatus === ConnectionStatus.Connected) { + return ( + + ); + } else { + return ; + } + }; + return {render()}; + }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormWidgetController.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormWidgetController.tsx new file mode 100644 index 00000000..ca7a5266 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/FormWidgetController.tsx @@ -0,0 +1,30 @@ +import React, { Fragment } from 'react'; +import { connectionStatus } from '../../constants/leadinConfig'; +import ErrorHandler from '../../shared/Common/ErrorHandler'; +import FormEdit from '../../shared/Form/FormEdit'; +import ConnectionStatus from '../../shared/enums/connectionStatus'; +import { IFormAttributes } from './registerFormWidget'; + +export default function FormWidgetController( + attributes: IFormAttributes, + setValue: Function +) { + return () => { + const render = () => { + if (connectionStatus === ConnectionStatus.Connected) { + return ( + + ); + } else { + return ; + } + }; + return {render()}; + }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/hooks/useForms.ts b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/hooks/useForms.ts new file mode 100644 index 00000000..4ebe3d08 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/hooks/useForms.ts @@ -0,0 +1,45 @@ +import { useState, useEffect } from 'react'; +import LoadState, { LoadStateType } from '../../../shared/enums/loadState'; +import { ProxyMessages } from '../../../iframe/integratedMessages'; +import { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp'; +import { IForm } from '../../../shared/types'; + +interface FormOption { + label: string; + value: string; +} + +export default function useForms() { + const proxy = usePostAsyncBackgroundMessage(); + const [loadState, setLoadState] = useState( + LoadState.NotLoaded + ); + const [hasError, setError] = useState(null); + const [forms, setForms] = useState([]); + + useEffect(() => { + if (loadState === LoadState.NotLoaded) { + proxy({ + key: ProxyMessages.FetchForms, + payload: { + search: '', + }, + }) + .then(data => { + setForms( + data.map((form: IForm) => ({ + label: form.name, + value: form.guid, + })) + ); + setLoadState(LoadState.Loaded); + }) + .catch(error => { + setError(error); + setLoadState(LoadState.Failed); + }); + } + }, [loadState]); + + return { forms, loading: loadState === LoadState.Loading, hasError }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/registerFormWidget.ts b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/registerFormWidget.ts new file mode 100644 index 00000000..a92ae509 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/FormWidget/registerFormWidget.ts @@ -0,0 +1,44 @@ +import ReactDOM from 'react-dom'; +import FormControlController from './FormControlController'; +import FormWidgetController from './FormWidgetController'; + +export interface IFormAttributes { + formId: string; + formName: string; + portalId: string; +} + +export default class registerFormWidget { + widgetContainer: Element; + attributes: IFormAttributes; + controlContainer: Element; + setValue: Function; + + constructor(controlContainer: any, widgetContainer: any, setValue: Function) { + const attributes = widgetContainer.dataset.attributes + ? JSON.parse(widgetContainer.dataset.attributes) + : {}; + + this.widgetContainer = widgetContainer; + this.controlContainer = controlContainer; + this.setValue = setValue; + this.attributes = attributes; + } + + render() { + ReactDOM.render( + FormWidgetController(this.attributes, this.setValue)(), + this.widgetContainer + ); + + ReactDOM.render( + FormControlController(this.attributes, this.setValue)(), + this.controlContainer + ); + } + + done() { + ReactDOM.unmountComponentAtNode(this.widgetContainer); + ReactDOM.unmountComponentAtNode(this.controlContainer); + } +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx new file mode 100644 index 00000000..b744287b --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingSelect.tsx @@ -0,0 +1,122 @@ +import React, { Fragment, useState } from 'react'; +import ElementorBanner from '../Common/ElementorBanner'; +import UISpinner from '../../shared/UIComponents/UISpinner'; +import ElementorMeetingWarning from './ElementorMeetingWarning'; +import useMeetings, { + useSelectedMeetingCalendar, +} from '../../shared/Meeting/hooks/useMeetings'; +import { __ } from '@wordpress/i18n'; +import Raven from 'raven-js'; +import { + BackgroudAppContext, + useBackgroundAppContext, +} from '../../iframe/useBackgroundApp'; +import { refreshToken } from '../../constants/leadinConfig'; +import { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils'; + +interface IElementorMeetingSelectProps { + url: string; + setAttributes: Function; +} + +function ElementorMeetingSelect({ + url, + setAttributes, +}: IElementorMeetingSelectProps) { + const { + mappedMeetings: meetings, + loading, + error, + reload, + connectCalendar, + } = useMeetings(); + const selectedMeetingCalendar = useSelectedMeetingCalendar(url); + const [localUrl, setLocalUrl] = useState(url); + + const handleConnectCalendar = () => { + return connectCalendar() + .then(() => { + reload(); + }) + .catch(error => { + Raven.captureMessage('Unable to connect calendar', { + extra: { error }, + }); + }); + }; + + return ( + + {loading ? ( +
+ +
+ ) : error ? ( + + {__( + 'Please refresh your meetings or try again in a few minutes', + 'leadin' + )} + + ) : ( + + {selectedMeetingCalendar && ( + + )} + {meetings.length > 1 && ( + + )} + + )} +
+ ); +} + +function ElementorMeetingSelectWrapper(props: IElementorMeetingSelectProps) { + const isBackgroundAppReady = useBackgroundAppContext(); + + return ( + + {!isBackgroundAppReady ? ( +
+ +
+ ) : ( + + )} +
+ ); +} + +export default function ElementorMeetingsSelectContainer( + props: IElementorMeetingSelectProps +) { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx new file mode 100644 index 00000000..b0f6d607 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/ElementorMeetingWarning.tsx @@ -0,0 +1,53 @@ +import React, { Fragment } from 'react'; +import { CURRENT_USER_CALENDAR_MISSING } from '../../shared/Meeting/constants'; +import ElementorButton from '../Common/ElementorButton'; +import ElementorBanner from '../Common/ElementorBanner'; +import { styled } from '@linaria/react'; +import { __ } from '@wordpress/i18n'; + +const Container = styled.div` + padding-bottom: 8px; +`; + +interface IMeetingWarningPros { + onConnectCalendar: React.MouseEventHandler; + status: string; +} + +export default function MeetingWarning({ + onConnectCalendar, + status, +}: IMeetingWarningPros) { + const isMeetingOwner = status === CURRENT_USER_CALENDAR_MISSING; + const titleText = isMeetingOwner + ? __('Your calendar is not connected', 'leadin') + : __('Calendar is not connected', 'leadin'); + const titleMessage = isMeetingOwner + ? __( + 'Please connect your calendar to activate your scheduling pages', + 'leadin' + ) + : __( + 'Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', + 'leadin' + ); + return ( + + + + {titleText} +
+ {titleMessage} +
+
+ {isMeetingOwner && ( + + {__('Connect calendar', 'leadin')} + + )} +
+ ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingControlController.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingControlController.tsx new file mode 100644 index 00000000..be25296e --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingControlController.tsx @@ -0,0 +1,31 @@ +import React, { Fragment } from 'react'; +import { connectionStatus } from '../../constants/leadinConfig'; +import ConnectPluginBanner from '../Common/ConnectPluginBanner'; +import ElementorMeetingSelect from './ElementorMeetingSelect'; +import { IMeetingAttributes } from './registerMeetingWidget'; + +const ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected', +}; + +export default function MeetingControlController( + attributes: IMeetingAttributes, + setValue: Function +) { + return () => { + const render = () => { + if (connectionStatus === ConnectionStatus.Connected) { + return ( + + ); + } else { + return ; + } + }; + return {render()}; + }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingWidgetController.tsx b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingWidgetController.tsx new file mode 100644 index 00000000..a34ceccd --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/MeetingWidgetController.tsx @@ -0,0 +1,34 @@ +import React, { Fragment } from 'react'; +import { connectionStatus } from '../../constants/leadinConfig'; +import ErrorHandler from '../../shared/Common/ErrorHandler'; +import MeetingsEdit from '../../shared/Meeting/MeetingEdit'; +import { IMeetingAttributes } from './registerMeetingWidget'; + +const ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected', +}; + +export default function MeetingWidgetController( + attributes: IMeetingAttributes, + setValue: Function +) { + return () => { + const render = () => { + if (connectionStatus === ConnectionStatus.Connected) { + return ( + + ); + } else { + return ; + } + }; + return {render()}; + }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/registerMeetingWidget.ts b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/registerMeetingWidget.ts new file mode 100644 index 00000000..7c890f4b --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/MeetingWidget/registerMeetingWidget.ts @@ -0,0 +1,42 @@ +import ReactDOM from 'react-dom'; +import MeetingControlController from './MeetingControlController'; +import MeetingWidgetController from './MeetingWidgetController'; + +export interface IMeetingAttributes { + url: string; +} + +export default class registerMeetingsWidget { + widgetContainer: Element; + controlContainer: Element; + setValue: Function; + attributes: IMeetingAttributes; + + constructor(controlContainer: any, widgetContainer: any, setValue: Function) { + const attributes = widgetContainer.dataset.attributes + ? JSON.parse(widgetContainer.dataset.attributes) + : {}; + + this.widgetContainer = widgetContainer; + this.controlContainer = controlContainer; + this.setValue = setValue; + this.attributes = attributes; + } + + render() { + ReactDOM.render( + MeetingWidgetController(this.attributes, this.setValue)(), + this.widgetContainer + ); + + ReactDOM.render( + MeetingControlController(this.attributes, this.setValue)(), + this.controlContainer + ); + } + + done() { + ReactDOM.unmountComponentAtNode(this.widgetContainer); + ReactDOM.unmountComponentAtNode(this.controlContainer); + } +} diff --git a/wp/wp-content/plugins/leadin/scripts/elementor/elementorWidget.ts b/wp/wp-content/plugins/leadin/scripts/elementor/elementorWidget.ts new file mode 100644 index 00000000..905d0f08 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/elementor/elementorWidget.ts @@ -0,0 +1,46 @@ +export default function elementorWidget( + elementor: any, + options: any, + callback: Function, + done = () => {} +) { + return elementor.modules.controls.BaseData.extend({ + onReady() { + const self = this; + const controlContainer = this.ui.contentEditable.prevObject[0].querySelector( + options.controlSelector + ); + let widgetContainer = this.options.element.$el[0].querySelector( + options.containerSelector + ); + if (widgetContainer) { + callback(controlContainer, widgetContainer, (args: any) => + self.setValue(args) + ); + } else { + //@ts-expect-error global + window.elementorFrontend.hooks.addAction( + `frontend/element_ready/${options.widgetName}.default`, + (element: HTMLElement[]) => { + widgetContainer = element[0].querySelector( + options.containerSelector + ); + callback(controlContainer, widgetContainer, (args: any) => + self.setValue(args) + ); + } + ); + } + }, + saveValue(props: any) { + this.setValue(props); + }, + onBeforeDestroy() { + //@ts-expect-error global + window.elementorFrontend.hooks.removeAction( + `frontend/element_ready/${options.widgetName}.default` + ); + done(); + }, + }); +} diff --git a/wp/wp-content/plugins/leadin/scripts/entries/app.ts b/wp/wp-content/plugins/leadin/scripts/entries/app.ts new file mode 100644 index 00000000..18f769a8 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/entries/app.ts @@ -0,0 +1,4 @@ +import { initAppOnReady } from '../utils/appUtils'; +import renderIframeApp from '../iframe/renderIframeApp'; + +initAppOnReady(renderIframeApp); diff --git a/wp/wp-content/plugins/leadin/scripts/entries/elementor.ts b/wp/wp-content/plugins/leadin/scripts/entries/elementor.ts new file mode 100644 index 00000000..43e986e3 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/entries/elementor.ts @@ -0,0 +1,79 @@ +import elementorWidget from '../elementor/elementorWidget'; +import registerFormWidget from '../elementor/FormWidget/registerFormWidget'; +import { initBackgroundApp } from '../utils/backgroundAppUtils'; +import registerMeetingsWidget from '../elementor/MeetingWidget/registerMeetingWidget'; + +const ELEMENTOR_READY_INTERVAL = 500; +const MAX_POLL_TIMEOUT = 30000; + +const registerElementorWidgets = () => { + initBackgroundApp(() => { + let FormWidget: any; + let MeetingsWidget: any; + + const leadinSelectFormItemView = elementorWidget( + //@ts-expect-error global + window.elementor, + { + widgetName: 'hubspot-form', + controlSelector: '.elementor-hbspt-form-selector', + containerSelector: '.hubspot-form-edit-mode', + }, + (controlContainer: any, widgetContainer: any, setValue: Function) => { + FormWidget = new registerFormWidget( + controlContainer, + widgetContainer, + setValue + ); + FormWidget.render(); + }, + () => { + FormWidget.done(); + } + ); + + const leadinSelectMeetingItemView = elementorWidget( + //@ts-expect-error global + window.elementor, + { + widgetName: 'hubspot-meeting', + controlSelector: '.elementor-hbspt-meeting-selector', + containerSelector: '.hubspot-meeting-edit-mode', + }, + (controlContainer: any, widgetContainer: any, setValue: Function) => { + MeetingsWidget = new registerMeetingsWidget( + controlContainer, + widgetContainer, + setValue + ); + MeetingsWidget.render(); + }, + () => { + MeetingsWidget.done(); + } + ); + + //@ts-expect-error global + window.elementor.addControlView( + 'leadinformselect', + leadinSelectFormItemView + ); + //@ts-expect-error global + window.elementor.addControlView( + 'leadinmeetingselect', + leadinSelectMeetingItemView + ); + }); +}; + +const pollForElementorReady = setInterval(() => { + const elementorFrontend = (window as any).elementorFrontend; + if (elementorFrontend) { + registerElementorWidgets(); + clearInterval(pollForElementorReady); + } +}, ELEMENTOR_READY_INTERVAL); + +setTimeout(() => { + clearInterval(pollForElementorReady); +}, MAX_POLL_TIMEOUT); diff --git a/wp/wp-content/plugins/leadin/scripts/entries/feedback.ts b/wp/wp-content/plugins/leadin/scripts/entries/feedback.ts new file mode 100644 index 00000000..548c8c59 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/entries/feedback.ts @@ -0,0 +1,68 @@ +import $ from 'jquery'; +import Raven from '../lib/Raven'; +import { domElements } from '../constants/selectors'; +import ThickBoxModal from '../feedback/ThickBoxModal'; +import { submitFeedbackForm } from '../feedback/feedbackFormApi'; +import { + getOrCreateBackgroundApp, + initBackgroundApp, +} from '../utils/backgroundAppUtils'; +import { refreshToken } from '../constants/leadinConfig'; +import { ProxyMessages } from '../iframe/integratedMessages'; + +function deactivatePlugin() { + const href = $(domElements.deactivatePluginButton).attr('href'); + if (href) { + window.location.href = href; + } +} + +function setLoadingState() { + $(domElements.deactivateFeedbackSubmit).addClass('loading'); +} + +function submitAndDeactivate(e: Event) { + e.preventDefault(); + setLoadingState(); + const feedback = $(domElements.deactivateFeedbackForm) + .serializeArray() + .find(field => field.name === 'feedback'); + + submitFeedbackForm(domElements.deactivateFeedbackForm) + .then(() => { + if (feedback && refreshToken) { + const embedder = getOrCreateBackgroundApp(refreshToken); + embedder.postMessage({ + key: ProxyMessages.TrackPluginDeactivation, + payload: { + type: feedback.value.trim().replace(/[\s']+/g, '_'), + }, + }); + } + }) + .catch((err: Error) => { + Raven.captureException(err); + }) + .finally(() => { + deactivatePlugin(); + }); +} + +function init() { + // eslint-disable-next-line no-new + new ThickBoxModal( + domElements.deactivatePluginButton, + 'leadin-feedback-container', + 'leadin-feedback-window', + 'leadin-feedback-content' + ); + + $(domElements.deactivateFeedbackForm) + .off('submit') + .on('submit', submitAndDeactivate); + $(domElements.deactivateFeedbackSkip) + .off('click') + .on('click', deactivatePlugin); +} + +initBackgroundApp(init); diff --git a/wp/wp-content/plugins/leadin/scripts/entries/gutenberg.ts b/wp/wp-content/plugins/leadin/scripts/entries/gutenberg.ts new file mode 100644 index 00000000..240bf73b --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/entries/gutenberg.ts @@ -0,0 +1,10 @@ +import registerFormBlock from '../gutenberg/FormBlock/registerFormBlock'; +import { registerHubspotSidebar } from '../gutenberg/Sidebar/contentType'; +import registerMeetingBlock from '../gutenberg/MeetingsBlock/registerMeetingBlock'; +import { initBackgroundApp } from '../utils/backgroundAppUtils'; + +initBackgroundApp([ + registerFormBlock, + registerMeetingBlock, + registerHubspotSidebar, +]); diff --git a/wp/wp-content/plugins/leadin/scripts/entries/reviewBanner.ts b/wp/wp-content/plugins/leadin/scripts/entries/reviewBanner.ts new file mode 100644 index 00000000..280b70aa --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/entries/reviewBanner.ts @@ -0,0 +1,64 @@ +import $ from 'jquery'; +import { + getOrCreateBackgroundApp, + initBackgroundApp, +} from '../utils/backgroundAppUtils'; +import { domElements } from '../constants/selectors'; +import { refreshToken, activationTime } from '../constants/leadinConfig'; +import { ProxyMessages } from '../iframe/integratedMessages'; + +const REVIEW_BANNER_INTRO_PERIOD_DAYS = 15; + +const userIsAfterIntroductoryPeriod = () => { + const activationDate = new Date(+activationTime * 1000); + const currentDate = new Date(); + const timeElapsed = new Date( + currentDate.getTime() - activationDate.getTime() + ); + + return timeElapsed.getUTCDate() - 1 >= REVIEW_BANNER_INTRO_PERIOD_DAYS; +}; + +/** + * Adds some methods to window when review banner is + * displayed to monitor events + */ +export function initMonitorReviewBanner() { + if (refreshToken) { + const embedder = getOrCreateBackgroundApp(refreshToken); + const container = $(domElements.reviewBannerContainer); + if (container && userIsAfterIntroductoryPeriod()) { + $(domElements.reviewBannerLeaveReviewLink) + .off('click') + .on('click', () => { + embedder.postMessage({ + key: ProxyMessages.TrackReviewBannerInteraction, + }); + }); + + $(domElements.reviewBannerDismissButton) + .off('click') + .on('click', () => { + embedder.postMessage({ + key: ProxyMessages.TrackReviewBannerDismissed, + }); + }); + + embedder + .postAsyncMessage({ + key: ProxyMessages.FetchContactsCreateSinceActivation, + payload: +activationTime * 1000, + }) + .then(({ total }: any) => { + if (total >= 5) { + container.removeClass('leadin-review-banner--hide'); + embedder.postMessage({ + key: ProxyMessages.TrackReviewBannerRender, + }); + } + }); + } + } +} + +initBackgroundApp(initMonitorReviewBanner); diff --git a/wp/wp-content/plugins/leadin/scripts/feedback/ThickBoxModal.ts b/wp/wp-content/plugins/leadin/scripts/feedback/ThickBoxModal.ts new file mode 100644 index 00000000..c76e9519 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/feedback/ThickBoxModal.ts @@ -0,0 +1,50 @@ +import $ from 'jquery'; +import { domElements } from '../constants/selectors'; + +export default class ThickBoxModal { + openTriggerSelector: string; + inlineContentId: string; + windowCssClass: string; + contentCssClass: string; + + constructor( + openTriggerSelector: string, + inlineContentId: string, + windowCssClass: string, + contentCssClass: string + ) { + this.openTriggerSelector = openTriggerSelector; + this.inlineContentId = inlineContentId; + this.windowCssClass = windowCssClass; + this.contentCssClass = contentCssClass; + + $(openTriggerSelector).on('click', this.init.bind(this)); + } + + close() { + //@ts-expect-error global + window.tb_remove(); + } + + init(e: Event) { + //@ts-expect-error global + window.tb_show( + '', + `#TB_inline?inlineId=${this.inlineContentId}&modal=true` + ); + // thickbox doesn't respect the width and height url parameters https://core.trac.wordpress.org/ticket/17249 + // We override thickboxes css with !important in the css + $(domElements.thickboxModalWindow).addClass(this.windowCssClass); + + // have to modify the css of the thickbox content container as well + $(domElements.thickboxModalContent).addClass(this.contentCssClass); + + // we unbind previous handlers because a thickbox modal is a single global object. + // Everytime it is re-opened, it still has old handlers bound + $(domElements.thickboxModalClose) + .off('click') + .on('click', this.close); + + e.preventDefault(); + } +} diff --git a/wp/wp-content/plugins/leadin/scripts/feedback/feedbackFormApi.ts b/wp/wp-content/plugins/leadin/scripts/feedback/feedbackFormApi.ts new file mode 100644 index 00000000..817fff49 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/feedback/feedbackFormApi.ts @@ -0,0 +1,23 @@ +import $ from 'jquery'; + +const portalId = '6275621'; +const formId = '0e8807f8-2ac3-4664-b742-44552bfa09e2'; +const formSubmissionUrl = `https://api.hsforms.com/submissions/v3/integration/submit/${portalId}/${formId}`; + +export function submitFeedbackForm(formSelector: string) { + const formSubmissionPayload = { + fields: $(formSelector).serializeArray(), + skipValidation: true, + }; + + return new Promise((resolve, reject) => { + $.ajax({ + type: 'POST', + url: formSubmissionUrl, + contentType: 'application/json', + data: JSON.stringify(formSubmissionPayload), + success: resolve, + error: reject, + }); + }); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/CalendarIcon.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/CalendarIcon.tsx new file mode 100644 index 00000000..105497c5 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/CalendarIcon.tsx @@ -0,0 +1,27 @@ +import React from 'react'; + +export default function CalendarIcon() { + return ( + + + + + + + + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SidebarSprocketIcon.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SidebarSprocketIcon.tsx new file mode 100644 index 00000000..c642d1a0 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SidebarSprocketIcon.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +export default function SidebarSprocketIcon() { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SprocketIcon.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SprocketIcon.tsx new file mode 100644 index 00000000..0fad5d88 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/Common/SprocketIcon.tsx @@ -0,0 +1,42 @@ +import React from 'react'; + +export default function SprocketIcon() { + return ( + + + + + + + + + + + + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormBlockSave.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormBlockSave.tsx new file mode 100644 index 00000000..3877790a --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormBlockSave.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { RawHTML } from '@wordpress/element'; +import { IFormBlockAttributes } from './registerFormBlock'; + +export default function FormSaveBlock({ attributes }: IFormBlockAttributes) { + const { portalId, formId } = attributes; + + if (portalId && formId) { + return ( + + {`[hubspot portal="${portalId}" id="${formId}" type="form"]`} + + ); + } + return null; +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx new file mode 100644 index 00000000..2278af8c --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/FormGutenbergPreview.tsx @@ -0,0 +1,14 @@ +import React, { Fragment } from 'react'; +import { pluginPath } from '../../constants/leadinConfig'; +import UIImage from '../UIComponents/UIImage'; + +export default function FormGutenbergPreview() { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/registerFormBlock.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/registerFormBlock.tsx new file mode 100644 index 00000000..6cc9b1e6 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/FormBlock/registerFormBlock.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import * as WpBlocksApi from '@wordpress/blocks'; +import SprocketIcon from '../Common/SprocketIcon'; +import FormBlockSave from './FormBlockSave'; +import { connectionStatus } from '../../constants/leadinConfig'; +import FormGutenbergPreview from './FormGutenbergPreview'; +import ErrorHandler from '../../shared/Common/ErrorHandler'; +import FormEdit from '../../shared/Form/FormEdit'; +import ConnectionStatus from '../../shared/enums/connectionStatus'; +import { __ } from '@wordpress/i18n'; +import { isFullSiteEditor } from '../../utils/withMetaData'; + +export interface IFormBlockAttributes { + attributes: { + portalId: string; + formId: string; + preview?: boolean; + formName: string; + }; +} + +export interface IFormBlockProps extends IFormBlockAttributes { + setAttributes: Function; + isSelected: boolean; + context?: any; +} + +export default function registerFormBlock() { + const editComponent = (props: IFormBlockProps) => { + if (props.attributes.preview) { + return ; + } else if (connectionStatus === ConnectionStatus.Connected) { + return ; + } else { + return ; + } + }; + + // We do not support the full site editor: https://issues.hubspotcentral.com/browse/WP-1033 + if (!WpBlocksApi || isFullSiteEditor()) { + return null; + } + + WpBlocksApi.registerBlockType('leadin/hubspot-form-block', { + title: __('HubSpot Form', 'leadin'), + description: __('Select and embed a HubSpot form', 'leadin'), + icon: SprocketIcon, + category: 'leadin-blocks', + attributes: { + portalId: { + type: 'string', + default: '', + } as WpBlocksApi.BlockAttribute, + formId: { + type: 'string', + } as WpBlocksApi.BlockAttribute, + formName: { + type: 'string', + } as WpBlocksApi.BlockAttribute, + preview: { + type: 'boolean', + default: false, + } as WpBlocksApi.BlockAttribute, + }, + example: { + attributes: { + preview: true, + }, + }, + edit: editComponent, + save: props => , + }); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx new file mode 100644 index 00000000..fcc75fee --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingGutenbergPreview.tsx @@ -0,0 +1,15 @@ +import React, { Fragment } from 'react'; +import { pluginPath } from '../../constants/leadinConfig'; +import UIImage from '../UIComponents/UIImage'; + +export default function MeetingGutenbergPreview() { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx new file mode 100644 index 00000000..9501bb43 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/MeetingSaveBlock.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { RawHTML } from '@wordpress/element'; +import { IMeetingBlockAttributes } from './registerMeetingBlock'; + +export default function MeetingSaveBlock({ + attributes, +}: IMeetingBlockAttributes) { + const { url } = attributes; + + if (url) { + return ( + {`[hubspot url="${url}" type="meeting"]`} + ); + } + return null; +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx new file mode 100644 index 00000000..69b7b5fe --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/MeetingsBlock/registerMeetingBlock.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import * as WpBlocksApi from '@wordpress/blocks'; +import CalendarIcon from '../Common/CalendarIcon'; +import { connectionStatus } from '../../constants/leadinConfig'; +import MeetingGutenbergPreview from './MeetingGutenbergPreview'; +import MeetingSaveBlock from './MeetingSaveBlock'; +import MeetingEdit from '../../shared/Meeting/MeetingEdit'; +import ErrorHandler from '../../shared/Common/ErrorHandler'; +import { __ } from '@wordpress/i18n'; +import { isFullSiteEditor } from '../../utils/withMetaData'; + +const ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected', +}; + +export interface IMeetingBlockAttributes { + attributes: { + url: string; + preview?: boolean; + }; +} + +export interface IMeetingBlockProps extends IMeetingBlockAttributes { + setAttributes: Function; + isSelected: boolean; +} + +export default function registerMeetingBlock() { + const editComponent = (props: IMeetingBlockProps) => { + if (props.attributes.preview) { + return ; + } else if (connectionStatus === ConnectionStatus.Connected) { + return ; + } else { + return ; + } + }; + + // We do not support the full site editor: https://issues.hubspotcentral.com/browse/WP-1033 + if (!WpBlocksApi || isFullSiteEditor()) { + return null; + } + + WpBlocksApi.registerBlockType('leadin/hubspot-meeting-block', { + title: __('Hubspot Meetings Scheduler', 'leadin'), + description: __( + 'Schedule meetings faster and forget the back-and-forth emails Your calendar stays full, and you stay productive', + 'leadin' + ), + icon: CalendarIcon, + category: 'leadin-blocks', + attributes: { + url: { + type: 'string', + default: '', + } as WpBlocksApi.BlockAttribute, + preview: { + type: 'boolean', + default: false, + } as WpBlocksApi.BlockAttribute, + }, + example: { + attributes: { + preview: true, + }, + }, + edit: editComponent, + save: props => , + }); +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/Sidebar/contentType.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/Sidebar/contentType.tsx new file mode 100644 index 00000000..eebedde4 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/Sidebar/contentType.tsx @@ -0,0 +1,83 @@ +import React from 'react'; +import * as WpPluginsLib from '@wordpress/plugins'; +import { PluginSidebar } from '@wordpress/edit-post'; +import { PanelBody, Icon } from '@wordpress/components'; +import { withSelect } from '@wordpress/data'; +import UISidebarSelectControl from '../UIComponents/UISidebarSelectControl'; +import SidebarSprocketIcon from '../Common/SidebarSprocketIcon'; +import styled from 'styled-components'; +import { __ } from '@wordpress/i18n'; +import { BackgroudAppContext } from '../../iframe/useBackgroundApp'; +import { refreshToken } from '../../constants/leadinConfig'; +import { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils'; + +export function registerHubspotSidebar() { + const ContentTypeLabelStyle = styled.div` + white-space: normal; + text-transform: none; + `; + + const ContentTypeLabel = ( + + {__( + 'Select the content type HubSpot Analytics uses to track this page', + 'leadin' + )} + + ); + + const LeadinPluginSidebar = ({ postType }: { postType: string }) => + postType ? ( + + } + > + + + + + + + ) : null; + const LeadinPluginSidebarWrapper = withSelect((select: Function) => { + const data = select('core/editor'); + return { + postType: + data && + data.getCurrentPostType() && + data.getEditedPostAttribute('meta'), + }; + })(LeadinPluginSidebar); + if (WpPluginsLib) { + WpPluginsLib.registerPlugin('leadin', { + render: LeadinPluginSidebarWrapper, + icon: SidebarSprocketIcon, + }); + } +} diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UIImage.ts b/wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UIImage.ts new file mode 100644 index 00000000..c3817b7a --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UIImage.ts @@ -0,0 +1,6 @@ +import { styled } from '@linaria/react'; + +export default styled.img` + height: ${props => (props.height ? props.height : 'auto')}; + width: ${props => (props.width ? props.width : 'auto')}; +`; diff --git a/wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx b/wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx new file mode 100644 index 00000000..57901d3e --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/gutenberg/UIComponents/UISidebarSelectControl.tsx @@ -0,0 +1,51 @@ +import React from 'react'; + +import { SelectControl } from '@wordpress/components'; +import withMetaData from '../../utils/withMetaData'; +import { + useBackgroundAppContext, + usePostBackgroundMessage, +} from '../../iframe/useBackgroundApp'; +import { ProxyMessages } from '../../iframe/integratedMessages'; + +interface IOption { + label: string; + value: string; + disabled?: boolean; +} + +interface IUISidebarSelectControlProps { + metaValue?: string; + metaKey: string; + setMetaValue?: Function; + options: IOption[]; + className: string; + label: JSX.Element; +} + +const UISidebarSelectControl = (props: IUISidebarSelectControlProps) => { + const isBackgroundAppReady = useBackgroundAppContext(); + + const monitorSidebarMetaChange = usePostBackgroundMessage(); + + return ( + { + if (props.setMetaValue) { + props.setMetaValue(content); + } + isBackgroundAppReady && + monitorSidebarMetaChange({ + key: ProxyMessages.TrackSidebarMetaChange, + payload: { + metaKey: props.metaKey, + }, + }); + }} + {...props} + /> + ); +}; + +export default withMetaData(UISidebarSelectControl); diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/IframeErrorPage.tsx b/wp/wp-content/plugins/leadin/scripts/iframe/IframeErrorPage.tsx new file mode 100644 index 00000000..8a20d9d7 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/IframeErrorPage.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import { __ } from '@wordpress/i18n'; +import { styled } from '@linaria/react'; + +const IframeErrorContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-top: 120px; + font-family: 'Lexend Deca', Helvetica, Arial, sans-serif; + font-weight: 400; + font-size: 14px; + font-size: 0.875rem; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-smoothing: antialiased; + line-height: 1.5rem; +`; + +const ErrorHeader = styled.h1` + text-shadow: 0 0 1px transparent; + margin-bottom: 1.25rem; + color: #33475b; + font-size: 1.25rem; +`; + +export const IframeErrorPage = () => ( + + Cannot find page + + {__( + 'The HubSpot for WordPress plugin is not able to load pages', + 'leadin' + )} + +

+ {__( + 'Try disabling your browser extensions and ad blockers, then refresh the page', + 'leadin' + )} +

+

+ {__( + 'Or open the HubSpot for WordPress plugin in a different browser', + 'leadin' + )} +

+
+); diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/constants.ts b/wp/wp-content/plugins/leadin/scripts/iframe/constants.ts new file mode 100644 index 00000000..11d907a9 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/constants.ts @@ -0,0 +1,15 @@ +export enum App { + Forms, + LiveChat, + Plugin, + PluginSettings, + Background, +} + +export const AppIframe = { + [App.Forms]: 'integrated-form-app', + [App.LiveChat]: 'integrated-livechat-app', + [App.Plugin]: 'integrated-plugin-app', + [App.PluginSettings]: 'integrated-plugin-app', + [App.Background]: 'integrated-plugin-proxy', +} as const; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/core/CoreMessages.ts b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/core/CoreMessages.ts new file mode 100644 index 00000000..829fc363 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/core/CoreMessages.ts @@ -0,0 +1,10 @@ +export const CoreMessages = { + HandshakeReceive: 'INTEGRATED_APP_EMBEDDER_HANDSHAKE_RECEIVED', + SendRefreshToken: 'INTEGRATED_APP_EMBEDDER_SEND_REFRESH_TOKEN', + ReloadParentFrame: 'INTEGRATED_APP_EMBEDDER_RELOAD_PARENT_FRAME', + RedirectParentFrame: 'INTEGRATED_APP_EMBEDDER_REDIRECT_PARENT_FRAME', + SendLocale: 'INTEGRATED_APP_EMBEDDER_SEND_LOCALE', + SendDeviceId: 'INTEGRATED_APP_EMBEDDER_SEND_DEVICE_ID', +} as const; + +export type CoreMessageType = typeof CoreMessages[keyof typeof CoreMessages]; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/forms/FormsMessages.ts b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/forms/FormsMessages.ts new file mode 100644 index 00000000..d9cd5bb5 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/forms/FormsMessages.ts @@ -0,0 +1,5 @@ +export const FormMessages = { + CreateFormAppNavigation: 'CREATE_FORM_APP_NAVIGATION', +} as const; + +export type FormMessageType = typeof FormMessages[keyof typeof FormMessages]; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/index.ts b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/index.ts new file mode 100644 index 00000000..bfd18a0a --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/index.ts @@ -0,0 +1,18 @@ +import * as Core from './core/CoreMessages'; +import * as Forms from './forms/FormsMessages'; +import * as LiveChat from './livechat/LiveChatMessages'; +import * as Plugin from './plugin/PluginMessages'; +import * as Proxy from './proxy/ProxyMessages'; + +export type MessageType = + | Core.CoreMessageType + | Forms.FormMessageType + | LiveChat.LiveChatMessageType + | Plugin.PluginMessageType + | Proxy.ProxyMessageType; + +export * from './core/CoreMessages'; +export * from './forms/FormsMessages'; +export * from './livechat/LiveChatMessages'; +export * from './plugin/PluginMessages'; +export * from './proxy/ProxyMessages'; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts new file mode 100644 index 00000000..a850f130 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/livechat/LiveChatMessages.ts @@ -0,0 +1,5 @@ +export const LiveChatMessages = { + CreateLiveChatAppNavigation: 'CREATE_LIVE_CHAT_APP_NAVIGATION', +} as const; + +export type LiveChatMessageType = typeof LiveChatMessages[keyof typeof LiveChatMessages]; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/plugin/PluginMessages.ts b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/plugin/PluginMessages.ts new file mode 100644 index 00000000..a7049970 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/plugin/PluginMessages.ts @@ -0,0 +1,27 @@ +export const PluginMessages = { + PluginSettingsNavigation: 'PLUGIN_SETTINGS_NAVIGATION', + PluginLeadinConfig: 'PLUGIN_LEADIN_CONFIG', + TrackConsent: 'INTEGRATED_APP_EMBEDDER_TRACK_CONSENT', + InternalTrackingFetchRequest: 'INTEGRATED_TRACKING_FETCH_REQUEST', + InternalTrackingFetchResponse: 'INTEGRATED_TRACKING_FETCH_RESPONSE', + InternalTrackingFetchError: 'INTEGRATED_TRACKING_FETCH_ERROR', + InternalTrackingChangeRequest: 'INTEGRATED_TRACKING_CHANGE_REQUEST', + InternalTrackingChangeError: 'INTEGRATED_TRACKING_CHANGE_ERROR', + BusinessUnitFetchRequest: 'BUSINESS_UNIT_FETCH_REQUEST', + BusinessUnitFetchResponse: 'BUSINESS_UNIT_FETCH_FETCH_RESPONSE', + BusinessUnitFetchError: 'BUSINESS_UNIT_FETCH_FETCH_ERROR', + BusinessUnitChangeRequest: 'BUSINESS_UNIT_CHANGE_REQUEST', + BusinessUnitChangeError: 'BUSINESS_UNIT_CHANGE_ERROR', + SkipReviewRequest: 'SKIP_REVIEW_REQUEST', + SkipReviewResponse: 'SKIP_REVIEW_RESPONSE', + SkipReviewError: 'SKIP_REVIEW_ERROR', + RemoveParentQueryParam: 'REMOVE_PARENT_QUERY_PARAM', + ContentEmbedInstallRequest: 'CONTENT_EMBED_INSTALL_REQUEST', + ContentEmbedInstallResponse: 'CONTENT_EMBED_INSTALL_RESPONSE', + ContentEmbedInstallError: 'CONTENT_EMBED_INSTALL_ERROR', + ContentEmbedActivationRequest: 'CONTENT_EMBED_ACTIVATION_REQUEST', + ContentEmbedActivationResponse: 'CONTENT_EMBED_ACTIVATION_RESPONSE', + ContentEmbedActivationError: 'CONTENT_EMBED_ACTIVATION_ERROR', +} as const; + +export type PluginMessageType = typeof PluginMessages[keyof typeof PluginMessages]; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/proxy/ProxyMessages.ts b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/proxy/ProxyMessages.ts new file mode 100644 index 00000000..62fe8729 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/integratedMessages/proxy/ProxyMessages.ts @@ -0,0 +1,21 @@ +export const ProxyMessages = { + FetchForms: 'FETCH_FORMS', + FetchForm: 'FETCH_FORM', + CreateFormFromTemplate: 'CREATE_FORM_FROM_TEMPLATE', + FetchAuth: 'FETCH_AUTH', + FetchMeetingsAndUsers: 'FETCH_MEETINGS_AND_USERS', + FetchContactsCreateSinceActivation: 'FETCH_CONTACTS_CREATED_SINCE_ACTIVATION', + FetchOrCreateMeetingUser: 'FETCH_OR_CREATE_MEETING_USER', + ConnectMeetingsCalendar: 'CONNECT_MEETINGS_CALENDAR', + TrackFormPreviewRender: 'TRACK_FORM_PREVIEW_RENDER', + TrackFormCreatedFromTemplate: 'TRACK_FORM_CREATED_FROM_TEMPLATE', + TrackFormCreationFailed: 'TRACK_FORM_CREATION_FAILED', + TrackMeetingPreviewRender: 'TRACK_MEETING_PREVIEW_RENDER', + TrackSidebarMetaChange: 'TRACK_SIDEBAR_META_CHANGE', + TrackReviewBannerRender: 'TRACK_REVIEW_BANNER_RENDER', + TrackReviewBannerInteraction: 'TRACK_REVIEW_BANNER_INTERACTION', + TrackReviewBannerDismissed: 'TRACK_REVIEW_BANNER_DISMISSED', + TrackPluginDeactivation: 'TRACK_PLUGIN_DEACTIVATION', +} as const; + +export type ProxyMessageType = typeof ProxyMessages[keyof typeof ProxyMessages]; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/messageMiddleware.ts b/wp/wp-content/plugins/leadin/scripts/iframe/messageMiddleware.ts new file mode 100644 index 00000000..165aaa63 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/messageMiddleware.ts @@ -0,0 +1,161 @@ +import { MessageType, PluginMessages } from '../iframe/integratedMessages'; +import { + fetchDisableInternalTracking, + trackConsent, + disableInternalTracking, + getBusinessUnitId, + setBusinessUnitId, + skipReview, +} from '../api/wordpressApiClient'; +import { removeQueryParamFromLocation } from '../utils/queryParams'; +import { startActivation, startInstall } from '../utils/contentEmbedInstaller'; + +export type Message = { key: MessageType; payload?: any }; + +const messageMapper: Map = new Map([ + [ + PluginMessages.TrackConsent, + (message: Message) => { + trackConsent(message.payload); + }, + ], + [ + PluginMessages.InternalTrackingChangeRequest, + (message: Message, embedder: any) => { + disableInternalTracking(message.payload) + .then(() => { + embedder.postMessage({ + key: PluginMessages.InternalTrackingFetchResponse, + payload: message.payload, + }); + }) + .catch(payload => { + embedder.postMessage({ + key: PluginMessages.InternalTrackingChangeError, + payload, + }); + }); + }, + ], + [ + PluginMessages.InternalTrackingFetchRequest, + (__message: Message, embedder: any) => { + fetchDisableInternalTracking() + .then(({ message: payload }) => { + embedder.postMessage({ + key: PluginMessages.InternalTrackingFetchResponse, + payload, + }); + }) + .catch(payload => { + embedder.postMessage({ + key: PluginMessages.InternalTrackingFetchError, + payload, + }); + }); + }, + ], + [ + PluginMessages.BusinessUnitFetchRequest, + (__message: Message, embedder: any) => { + getBusinessUnitId() + .then(payload => { + embedder.postMessage({ + key: PluginMessages.BusinessUnitFetchResponse, + payload, + }); + }) + .catch(payload => { + embedder.postMessage({ + key: PluginMessages.BusinessUnitFetchError, + payload, + }); + }); + }, + ], + [ + PluginMessages.BusinessUnitChangeRequest, + (message: Message, embedder: any) => { + setBusinessUnitId(message.payload) + .then(payload => { + embedder.postMessage({ + key: PluginMessages.BusinessUnitFetchResponse, + payload, + }); + }) + .catch(payload => { + embedder.postMessage({ + key: PluginMessages.BusinessUnitChangeError, + payload, + }); + }); + }, + ], + [ + PluginMessages.SkipReviewRequest, + (__message: Message, embedder: any) => { + skipReview() + .then(payload => { + embedder.postMessage({ + key: PluginMessages.SkipReviewResponse, + payload, + }); + }) + .catch(payload => { + embedder.postMessage({ + key: PluginMessages.SkipReviewError, + payload, + }); + }); + }, + ], + [ + PluginMessages.RemoveParentQueryParam, + (message: Message) => { + removeQueryParamFromLocation(message.payload); + }, + ], + [ + PluginMessages.ContentEmbedInstallRequest, + (message: Message, embedder: any) => { + startInstall(message.payload.nonce) + .then(payload => { + embedder.postMessage({ + key: PluginMessages.ContentEmbedInstallResponse, + payload: payload, + }); + }) + .catch(payload => { + embedder.postMessage({ + key: PluginMessages.ContentEmbedInstallError, + payload, + }); + }); + }, + ], + [ + PluginMessages.ContentEmbedActivationRequest, + (message: Message, embedder: any) => { + startActivation(message.payload.activateAjaxUrl) + .then(payload => { + embedder.postMessage({ + key: PluginMessages.ContentEmbedActivationResponse, + payload: payload, + }); + }) + .catch(payload => { + embedder.postMessage({ + key: PluginMessages.ContentEmbedActivationError, + payload, + }); + }); + }, + ], +]); + +export const messageMiddleware = (embedder: any) => (message: Message) => { + const next = messageMapper.get(message.key); + if (next) { + next(message, embedder); + } +}; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/renderIframeApp.tsx b/wp/wp-content/plugins/leadin/scripts/iframe/renderIframeApp.tsx new file mode 100644 index 00000000..9df8b1de --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/renderIframeApp.tsx @@ -0,0 +1,64 @@ +import React, { Fragment } from 'react'; +import ReactDOM from 'react-dom'; +import { domElements } from '../constants/selectors'; +import useAppEmbedder from './useAppEmbedder'; +import { App } from './constants'; +import { IframeErrorPage } from './IframeErrorPage'; + +interface PortalProps extends React.PropsWithChildren { + app: App; + createRoute: boolean; +} + +const IntegratedIframePortal = (props: PortalProps) => { + const container = document.getElementById(domElements.leadinIframeContainer); + const iframeNotRendered = useAppEmbedder( + props.app, + props.createRoute, + container + ); + + if (container && !iframeNotRendered) { + return ReactDOM.createPortal(props.children, container); + } + + return ( + + {(!container || iframeNotRendered) && } + + ); +}; + +const renderIframeApp = () => { + const iframeFallbackContainer = document.getElementById( + domElements.leadinIframeContainer + ); + + let app: App; + const queryParams = new URLSearchParams(location.search); + const page = queryParams.get('page'); + const createRoute = queryParams.get('leadin_route[0]') === 'create'; + + switch (page) { + case 'leadin_forms': + app = App.Forms; + break; + case 'leadin_chatflows': + app = App.LiveChat; + break; + case 'leadin_settings': + app = App.PluginSettings; + break; + case 'leadin_user_guide': + default: + app = App.Plugin; + break; + } + + ReactDOM.render( + , + iframeFallbackContainer + ); +}; + +export default renderIframeApp; diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/useAppEmbedder.ts b/wp/wp-content/plugins/leadin/scripts/iframe/useAppEmbedder.ts new file mode 100644 index 00000000..7585c76c --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/useAppEmbedder.ts @@ -0,0 +1,223 @@ +import { useEffect } from 'react'; +import Raven from '../lib/Raven'; + +import { + accountName, + adminUrl, + connectionStatus, + deviceId, + hubspotBaseUrl, + leadinQueryParams, + locale, + plugins, + portalDomain, + portalEmail, + portalId, + reviewSkippedDate, + refreshToken, + impactLink, + theme, + lastAuthorizeTime, + lastDeauthorizeTime, + lastDisconnectTime, + leadinPluginVersion, + phpVersion, + wpVersion, + contentEmbed, + requiresContentEmbedScope, + refreshTokenError, + LeadinConfig, +} from '../constants/leadinConfig'; +import { App, AppIframe } from './constants'; +import { messageMiddleware } from './messageMiddleware'; +import { resizeWindow, useIframeNotRendered } from '../utils/iframe'; + +type PartialLeadinConfig = Pick< + LeadinConfig, + | 'accountName' + | 'adminUrl' + | 'connectionStatus' + | 'deviceId' + | 'plugins' + | 'portalDomain' + | 'portalEmail' + | 'portalId' + | 'reviewSkippedDate' + | 'refreshToken' + | 'impactLink' + | 'theme' + | 'trackConsent' + | 'lastAuthorizeTime' + | 'lastDeauthorizeTime' + | 'lastDisconnectTime' + | 'leadinPluginVersion' + | 'phpVersion' + | 'wpVersion' + | 'contentEmbed' + | 'requiresContentEmbedScope' + | 'refreshTokenError' +>; + +/** + * A modified version of the original leadinConfig that is passed to some integrated apps. + * + * Important: + * Try not to add new fields here. + * This config is already too large and broad in scope. + * It tightly couples the apps that use it with the WordPress plugin. + * Consider instead passing new required fields as new entry to PluginAppOptions or app-specific options. + */ +type AppLeadinConfig = { + admin: string; + company: string; + email: string; + firstName: string; + irclickid: string; + justConnected: string; + lastName: string; + mpid: string; + nonce: string; + websiteName: string; +} & PartialLeadinConfig; + +const getLeadinConfig = (): AppLeadinConfig => { + const utm_query_params = Object.keys(leadinQueryParams) + .filter(x => /^utm/.test(x)) + .reduce( + (p: { [key: string]: string }, c: string) => ({ + [c]: leadinQueryParams[c], + ...p, + }), + {} + ); + return { + accountName, + admin: leadinQueryParams.admin, + adminUrl, + company: leadinQueryParams.company, + connectionStatus, + deviceId, + email: leadinQueryParams.email, + firstName: leadinQueryParams.firstName, + irclickid: leadinQueryParams.irclickid, + justConnected: leadinQueryParams.justConnected, + lastName: leadinQueryParams.lastName, + lastAuthorizeTime, + lastDeauthorizeTime, + lastDisconnectTime, + leadinPluginVersion, + mpid: leadinQueryParams.mpid, + nonce: leadinQueryParams.nonce, + phpVersion, + plugins, + portalDomain, + portalEmail, + portalId, + reviewSkippedDate, + theme, + trackConsent: leadinQueryParams.trackConsent, + websiteName: leadinQueryParams.websiteName, + wpVersion, + contentEmbed, + requiresContentEmbedScope, + refreshTokenError, + ...utm_query_params, + }; +}; + +const getAppOptions = (app: App, createRoute = false) => { + const { + IntegratedAppOptions, + FormsAppOptions, + LiveChatAppOptions, + PluginAppOptions, + }: any = window; + let options; + switch (app) { + case App.Plugin: + options = new PluginAppOptions().setLeadinConfig(getLeadinConfig()); + break; + case App.PluginSettings: + options = new PluginAppOptions() + .setLeadinConfig(getLeadinConfig()) + .setPluginSettingsInit(); + break; + case App.Forms: + options = new FormsAppOptions(); + if (createRoute) { + options = options.setCreateFormAppInit(); + } + break; + case App.LiveChat: + options = new LiveChatAppOptions(); + if (createRoute) { + options = options.setCreateLiveChatAppInit(); + } + break; + default: + options = new IntegratedAppOptions(); + } + + return options; +}; + +export default function useAppEmbedder( + app: App, + createRoute: boolean, + container: HTMLElement | null +) { + console.info( + 'HubSpot plugin - starting app embedder for:', + AppIframe[app], + container + ); + const iframeNotRendered = useIframeNotRendered(AppIframe[app]); + + useEffect(() => { + const { IntegratedAppEmbedder }: any = window; + + if (IntegratedAppEmbedder) { + const options = getAppOptions(app, createRoute) + .setLocale(locale) + .setDeviceId(deviceId) + .setRefreshToken(refreshToken); + + const embedder = new IntegratedAppEmbedder( + AppIframe[app], + portalId, + hubspotBaseUrl, + resizeWindow, + refreshToken ? '' : impactLink + ).setOptions(options); + + embedder.subscribe(messageMiddleware(embedder)); + embedder.attachTo(container, true); + embedder.postStartAppMessage(); // lets the app know all all data has been passed to it + + (window as any).embedder = embedder; + } + }, []); + + if (iframeNotRendered) { + console.error('HubSpot plugin Iframe not rendered', { + portalId, + container, + appName: AppIframe[app], + hasIntegratedAppEmbedder: !!(window as any).IntegratedAppEmbedder, + }); + Raven.captureException(new Error('Leadin Iframe not rendered'), { + fingerprint: ['USE_APP_EMBEDDER', 'IFRAME_SETUP_ERROR'], + extra: { + portalId, + container, + app, + hubspotBaseUrl, + impactLink, + appName: AppIframe[app], + hasRefreshToken: !!refreshToken, + }, + }); + } + + return iframeNotRendered; +} diff --git a/wp/wp-content/plugins/leadin/scripts/iframe/useBackgroundApp.ts b/wp/wp-content/plugins/leadin/scripts/iframe/useBackgroundApp.ts new file mode 100644 index 00000000..47b0d98e --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/iframe/useBackgroundApp.ts @@ -0,0 +1,29 @@ +import { createContext, useContext } from 'react'; +import { + deviceId, + hubspotBaseUrl, + locale, + portalId, +} from '../constants/leadinConfig'; +import { Message } from './messageMiddleware'; + +export const BackgroudAppContext = createContext(null); + +export function useBackgroundAppContext() { + return useContext(BackgroudAppContext); +} + +export function usePostBackgroundMessage() { + const app = useBackgroundAppContext(); + + return (message: Message) => { + app.postMessage(message); + }; +} + +export function usePostAsyncBackgroundMessage(): ( + message: Message +) => Promise { + const app = useBackgroundAppContext(); + return (message: Message) => app.postAsyncMessage(message); +} diff --git a/wp/wp-content/plugins/leadin/scripts/lib/Raven.ts b/wp/wp-content/plugins/leadin/scripts/lib/Raven.ts new file mode 100644 index 00000000..bd596fee --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/lib/Raven.ts @@ -0,0 +1,40 @@ +import Raven from 'raven-js'; +import { + hubspotBaseUrl, + phpVersion, + wpVersion, + leadinPluginVersion, + portalId, + plugins, +} from '../constants/leadinConfig'; + +export function configureRaven() { + if (hubspotBaseUrl.indexOf('app.hubspot.com') === -1) { + return; + } + + Raven.config( + 'https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1', + { + instrument: { + tryCatch: false, + }, + release: leadinPluginVersion, + } + ).install(); + + Raven.setTagsContext({ + v: leadinPluginVersion, + php: phpVersion, + wordpress: wpVersion, + }); + + Raven.setExtraContext({ + hub: portalId, + plugins: Object.keys(plugins) + .map(name => `${name}#${plugins[name]}`) + .join(','), + }); +} + +export default Raven; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Common/AsyncSelect.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Common/AsyncSelect.tsx new file mode 100644 index 00000000..b5a4b432 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Common/AsyncSelect.tsx @@ -0,0 +1,311 @@ +import React, { useRef, useState, useEffect } from 'react'; +import { styled } from '@linaria/react'; +import { + CALYPSO, + CALYPSO_LIGHT, + CALYPSO_MEDIUM, + OBSIDIAN, +} from '../UIComponents/colors'; +import UISpinner from '../UIComponents/UISpinner'; +import LoadState, { LoadStateType } from '../enums/loadState'; + +const Container = styled.div` + color: ${OBSIDIAN}; + font-family: 'Lexend Deca', Helvetica, Arial, sans-serif; + font-size: 14px; + position: relative; +`; + +interface IControlContainerProps { + focused: boolean; +} + +const ControlContainer = styled.div` + align-items: center; + background-color: hsl(0, 0%, 100%); + border-color: hsl(0, 0%, 80%); + border-radius: 4px; + border-style: solid; + border-width: ${props => (props.focused ? '0' : '1px')}; + cursor: default; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + min-height: 38px; + outline: 0 !important; + position: relative; + transition: all 100ms; + box-sizing: border-box; + box-shadow: ${props => + props.focused ? `0 0 0 2px ${CALYPSO_MEDIUM}` : 'none'}; + &:hover { + border-color: hsl(0, 0%, 70%); + } +`; + +const ValueContainer = styled.div` + align-items: center; + display: flex; + flex: 1; + flex-wrap: wrap; + padding: 2px 8px; + position: relative; + overflow: hidden; + box-sizing: border-box; +`; + +const Placeholder = styled.div` + color: hsl(0, 0%, 50%); + margin-left: 2px; + margin-right: 2px; + position: absolute; + top: 50%; + transform: translateY(-50%); + box-sizing: border-box; + font-size: 16px; +`; + +const SingleValue = styled.div` + color: hsl(0, 0%, 20%); + margin-left: 2px; + margin-right: 2px; + max-width: calc(100% - 8px); + overflow: hidden; + position: absolute; + text-overflow: ellipsis; + white-space: nowrap; + top: 50%; + transform: translateY(-50%); + box-sizing: border-box; +`; + +const IndicatorContainer = styled.div` + align-items: center; + align-self: stretch; + display: flex; + flex-shrink: 0; + box-sizing: border-box; +`; + +const DropdownIndicator = styled.div` + border-top: 8px solid ${CALYPSO}; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + width: 0px; + height: 0px; + margin: 10px; +`; + +const InputContainer = styled.div` + margin: 2px; + padding-bottom: 2px; + padding-top: 2px; + visibility: visible; + color: hsl(0, 0%, 20%); + box-sizing: border-box; +`; + +const Input = styled.input` + box-sizing: content-box; + background: rgba(0, 0, 0, 0) none repeat scroll 0px center; + border: 0px none; + font-size: inherit; + opacity: 1; + outline: currentcolor none 0px; + padding: 0px; + color: inherit; + font-family: inherit; +`; + +const InputShadow = styled.div` + position: absolute; + opacity: 0; + font-size: inherit; +`; + +const MenuContainer = styled.div` + position: absolute; + top: 100%; + background-color: #fff; + border-radius: 4px; + margin-bottom: 8px; + margin-top: 8px; + z-index: 9999; + box-shadow: 0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1); + width: 100%; +`; + +const MenuList = styled.div` + max-height: 300px; + overflow-y: auto; + padding-bottom: 4px; + padding-top: 4px; + position: relative; +`; + +const MenuGroup = styled.div` + padding-bottom: 8px; + padding-top: 8px; +`; + +const MenuGroupHeader = styled.div` + color: #999; + cursor: default; + font-size: 75%; + font-weight: 500; + margin-bottom: 0.25em; + text-transform: uppercase; + padding-left: 12px; + padding-left: 12px; +`; + +interface IMenuItemProps { + selected: boolean; +} + +const MenuItem = styled.div` + display: block; + background-color: ${props => + props.selected ? CALYPSO_MEDIUM : 'transparent'}; + color: ${props => (props.selected ? '#fff' : 'inherit')}; + cursor: default; + font-size: inherit; + width: 100%; + padding: 8px 12px; + &:hover { + background-color: ${props => + props.selected ? CALYPSO_MEDIUM : CALYPSO_LIGHT}; + } +`; + +interface IAsyncSelectProps { + placeholder: string; + value: any; + loadOptions?: Function; + defaultOptions?: any[]; + onChange: Function; +} + +export default function AsyncSelect({ + placeholder, + value, + loadOptions, + onChange, + defaultOptions, +}: IAsyncSelectProps) { + const inputEl = useRef(null); + const inputShadowEl = useRef(null); + const [isFocused, setFocus] = useState(false); + const [loadState, setLoadState] = useState( + LoadState.NotLoaded + ); + const [localValue, setLocalValue] = useState(''); + const [options, setOptions] = useState(defaultOptions); + + const inputSize = `${ + inputShadowEl.current ? inputShadowEl.current.clientWidth + 10 : 2 + }px`; + + useEffect(() => { + if (loadOptions && loadState === LoadState.NotLoaded) { + loadOptions('', (result: any) => { + setOptions(result); + setLoadState(LoadState.Idle); + }); + } + }, [loadOptions, loadState]); + + const renderItems = (items: any[] = [], parentKey?: number) => { + return items.map((item, index) => { + if (item.options) { + return ( + + + {item.label} + +
{renderItems(item.options, index)}
+
+ ); + } else { + const key = `async-select-item-${ + parentKey !== undefined ? `${parentKey}-${index}` : index + }`; + return ( + { + onChange(item); + setFocus(false); + }} + > + {item.label} + + ); + } + }); + }; + + return ( + + { + if (isFocused) { + if (inputEl.current) { + inputEl.current.blur(); + } + setFocus(false); + setLocalValue(''); + } else { + if (inputEl.current) { + inputEl.current.focus(); + } + setFocus(true); + } + }} + > + + {localValue === '' && + (!value ? ( + {placeholder} + ) : ( + {value.label} + ))} + + { + setFocus(true); + }} + onChange={e => { + setLocalValue(e.target.value); + setLoadState(LoadState.Loading); + loadOptions && + loadOptions(e.target.value, (result: any) => { + setOptions(result); + setLoadState(LoadState.Idle); + }); + }} + value={localValue} + width={inputSize} + id="asycn-select-input" + /> + {localValue} + + + + {loadState === LoadState.Loading && } + + + + {isFocused && ( + + {renderItems(options)} + + )} + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Common/ErrorHandler.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Common/ErrorHandler.tsx new file mode 100644 index 00000000..63078bac --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Common/ErrorHandler.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import UIButton from '../UIComponents/UIButton'; +import UIContainer from '../UIComponents/UIContainer'; +import HubspotWrapper from './HubspotWrapper'; +import { adminUrl, redirectNonce } from '../../constants/leadinConfig'; +import { pluginPath } from '../../constants/leadinConfig'; +import { __ } from '@wordpress/i18n'; + +interface IErrorHandlerProps { + status: number; + resetErrorState?: React.MouseEventHandler; + errorInfo?: { + header: string; + message: string; + action: string; + }; +} + +function redirectToPlugin() { + window.location.href = `${adminUrl}admin.php?page=leadin&leadin_expired=${redirectNonce}`; +} + +export default function ErrorHandler({ + status, + resetErrorState, + errorInfo = { header: '', message: '', action: '' }, +}: IErrorHandlerProps) { + const isUnauthorized = status === 401 || status === 403; + const errorHeader = isUnauthorized + ? __("Your plugin isn't authorized", 'leadin') + : errorInfo.header; + const errorMessage = isUnauthorized + ? __('Reauthorize your plugin to access your free HubSpot tools', 'leadin') + : errorInfo.message; + + return ( + + +

{errorHeader}

+

+ {errorMessage} +

+ {isUnauthorized ? ( + + {__('Go to plugin', 'leadin')} + + ) : ( + + {errorInfo.action} + + )} +
+
+ ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Common/HubspotWrapper.ts b/wp/wp-content/plugins/leadin/scripts/shared/Common/HubspotWrapper.ts new file mode 100644 index 00000000..d85a19fb --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Common/HubspotWrapper.ts @@ -0,0 +1,26 @@ +import { styled } from '@linaria/react'; + +interface IHubspotWrapperProps { + pluginPath: string; + padding?: string; +} + +export default styled.div` + background-image: ${props => + `url(${props.pluginPath}/public/assets/images/hubspot.svg)`}; + background-color: #f5f8fa; + background-repeat: no-repeat; + background-position: center 25px; + background-size: 120px; + color: #33475b; + font-family: 'Lexend Deca', Helvetica, Arial, sans-serif; + font-size: 14px; + + padding: ${(props: any) => props.padding || '90px 20% 25px'}; + + p { + font-size: inherit !important; + line-height: 24px; + margin: 4px 0; + } +`; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Common/LoadingBlock.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Common/LoadingBlock.tsx new file mode 100644 index 00000000..600ed306 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Common/LoadingBlock.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import HubspotWrapper from './HubspotWrapper'; +import UISpinner from '../UIComponents/UISpinner'; +import { pluginPath } from '../../constants/leadinConfig'; + +export default function LoadingBlock() { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Form/FormEdit.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Form/FormEdit.tsx new file mode 100644 index 00000000..90454599 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Form/FormEdit.tsx @@ -0,0 +1,81 @@ +import React, { Fragment, useEffect } from 'react'; +import { portalId, refreshToken } from '../../constants/leadinConfig'; +import UISpacer from '../UIComponents/UISpacer'; +import PreviewForm from './PreviewForm'; +import FormSelect from './FormSelect'; +import { IFormBlockProps } from '../../gutenberg/FormBlock/registerFormBlock'; +import { + usePostBackgroundMessage, + BackgroudAppContext, + useBackgroundAppContext, +} from '../../iframe/useBackgroundApp'; +import { ProxyMessages } from '../../iframe/integratedMessages'; +import LoadingBlock from '../Common/LoadingBlock'; +import { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils'; + +interface IFormEditProps extends IFormBlockProps { + preview: boolean; + origin: 'gutenberg' | 'elementor'; +} + +function FormEdit({ + attributes, + isSelected, + setAttributes, + preview = true, + origin = 'gutenberg', +}: IFormEditProps) { + const { formId, formName } = attributes; + const formSelected = portalId && formId; + + const isBackgroundAppReady = useBackgroundAppContext(); + const monitorFormPreviewRender = usePostBackgroundMessage(); + + const handleChange = (selectedForm: { value: string; label: string }) => { + setAttributes({ + portalId, + formId: selectedForm.value, + formName: selectedForm.label, + }); + }; + + useEffect(() => { + monitorFormPreviewRender({ + key: ProxyMessages.TrackFormPreviewRender, + payload: { + origin, + }, + }); + }, [origin]); + + return !isBackgroundAppReady ? ( + + ) : ( + + {(isSelected || !formSelected) && ( + + )} + {formSelected && ( + + {isSelected && } + {preview && } + + )} + + ); +} + +export default function FormEditContainer(props: IFormEditProps) { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelect.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelect.tsx new file mode 100644 index 00000000..48cdc248 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelect.tsx @@ -0,0 +1,80 @@ +import React from 'react'; +import FormSelector from './FormSelector'; +import LoadingBlock from '../Common/LoadingBlock'; +import { __ } from '@wordpress/i18n'; +import useForms from './hooks/useForms'; +import useCreateFormFromTemplate from './hooks/useCreateFormFromTemplate'; +import { FormType, isDefaultForm } from '../../constants/defaultFormOptions'; +import ErrorHandler from '../Common/ErrorHandler'; + +interface IFormSelectProps { + formId: string; + formName: string; + handleChange: Function; + origin: 'gutenberg' | 'elementor'; +} + +export default function FormSelect({ + formId, + formName, + handleChange, + origin = 'gutenberg', +}: IFormSelectProps) { + const { search, formApiError, reset } = useForms(); + const { + createFormByTemplate, + reset: createReset, + isCreating, + hasError, + formApiError: createApiError, + } = useCreateFormFromTemplate(origin); + const value = + formId && formName + ? { + label: formName, + value: formId, + } + : null; + + const handleLocalChange = (option: { value: FormType }) => { + if (isDefaultForm(option.value)) { + createFormByTemplate(option.value).then(({ guid, name }) => { + handleChange({ + value: guid, + label: name, + }); + }); + } else { + handleChange(option); + } + }; + + return isCreating ? ( + + ) : formApiError || createApiError ? ( + { + if (hasError) { + createReset(); + } else { + reset(); + } + }} + errorInfo={{ + header: __('There was a problem retrieving your forms', 'leadin'), + message: __( + 'Please refresh your forms or try again in a few minutes', + 'leadin' + ), + action: __('Refresh forms', 'leadin'), + }} + /> + ) : ( + handleLocalChange(option)} + value={value} + /> + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelector.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelector.tsx new file mode 100644 index 00000000..49d44a82 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Form/FormSelector.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import HubspotWrapper from '../Common/HubspotWrapper'; +import { pluginPath } from '../../constants/leadinConfig'; +import AsyncSelect from '../Common/AsyncSelect'; +import { __ } from '@wordpress/i18n'; + +interface IFormSelectorProps { + loadOptions: Function; + onChange: Function; + value: any; +} + +export default function FormSelector({ + loadOptions, + onChange, + value, +}: IFormSelectorProps) { + return ( + +

+ + {__( + 'Select an existing form or create a new one from a template', + 'leadin' + )} + +

+ +
+ ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Form/PreviewForm.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Form/PreviewForm.tsx new file mode 100644 index 00000000..4846b018 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Form/PreviewForm.tsx @@ -0,0 +1,29 @@ +import React, { useEffect, useRef } from 'react'; +import UIOverlay from '../UIComponents/UIOverlay'; +import { formsScriptPayload, hublet } from '../../constants/leadinConfig'; +import useFormScript from './hooks/useFormsScript'; + +export default function PreviewForm({ + portalId, + formId, +}: { + portalId: number; + formId: string; +}) { + const inputEl = useRef(null); + const ready = useFormScript(); + + useEffect(() => { + if (!ready) { + return; + } + if (inputEl.current) { + inputEl.current.innerHTML = ''; + const embedScript = document.createElement('script'); + embedScript.innerHTML = `hbspt.forms.create({ portalId: '${portalId}', formId: '${formId}', region: '${hublet}', ${formsScriptPayload} });`; + inputEl.current.appendChild(embedScript); + } + }, [formId, portalId, ready, inputEl]); + + return ; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useCreateFormFromTemplate.ts b/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useCreateFormFromTemplate.ts new file mode 100644 index 00000000..be35f01d --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useCreateFormFromTemplate.ts @@ -0,0 +1,53 @@ +import { useState } from 'react'; +import { + usePostAsyncBackgroundMessage, + usePostBackgroundMessage, +} from '../../../iframe/useBackgroundApp'; +import { FormType } from '../../../constants/defaultFormOptions'; +import LoadState, { LoadStateType } from '../../enums/loadState'; +import { ProxyMessages } from '../../../iframe/integratedMessages'; + +export default function useCreateFormFromTemplate(origin = 'gutenberg') { + const proxy = usePostAsyncBackgroundMessage(); + const track = usePostBackgroundMessage(); + const [loadState, setLoadState] = useState(LoadState.Idle); + const [formApiError, setFormApiError] = useState(null); + + const createFormByTemplate = (type: FormType) => { + setLoadState(LoadState.Loading); + track({ + key: ProxyMessages.TrackFormCreatedFromTemplate, + payload: { + type, + origin, + }, + }); + + return proxy({ + key: ProxyMessages.CreateFormFromTemplate, + payload: type, + }) + .then(form => { + setLoadState(LoadState.Idle); + return form; + }) + .catch(err => { + setFormApiError(err); + track({ + key: ProxyMessages.TrackFormCreationFailed, + payload: { + origin, + }, + }); + setLoadState(LoadState.Failed); + }); + }; + + return { + isCreating: loadState === LoadState.Loading, + hasError: loadState === LoadState.Failed, + formApiError, + createFormByTemplate, + reset: () => setLoadState(LoadState.Idle), + }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useForms.ts b/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useForms.ts new file mode 100644 index 00000000..56eb74ae --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useForms.ts @@ -0,0 +1,42 @@ +import { useState } from 'react'; +import debounce from 'lodash/debounce'; +import { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp'; +import { DEFAULT_OPTIONS } from '../../../constants/defaultFormOptions'; +import { ProxyMessages } from '../../../iframe/integratedMessages'; +import { IForm } from '../../types'; + +export default function useForms() { + const proxy = usePostAsyncBackgroundMessage(); + const [formApiError, setFormApiError] = useState(null); + + const search = debounce( + (search: string, callback: Function) => { + return proxy({ + key: ProxyMessages.FetchForms, + payload: { + search, + }, + }) + .then(forms => { + callback([ + ...forms.map((form: IForm) => ({ + label: form.name, + value: form.guid, + })), + DEFAULT_OPTIONS, + ]); + }) + .catch(error => { + setFormApiError(error); + }); + }, + 300, + { trailing: true } + ); + + return { + search, + formApiError, + reset: () => setFormApiError(null), + }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useFormsScript.ts b/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useFormsScript.ts new file mode 100644 index 00000000..9daab439 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Form/hooks/useFormsScript.ts @@ -0,0 +1,30 @@ +import $ from 'jquery'; + +import { useEffect, useState } from 'react'; +import { formsScript } from '../../../constants/leadinConfig'; +import Raven from '../../../lib/Raven'; + +let promise: Promise; + +function loadFormsScript() { + if (!promise) { + promise = new Promise((resolve, reject) => + $.getScript(formsScript) + .done(resolve) + .fail(reject) + ); + } + return promise; +} + +export default function useFormScript() { + const [ready, setReady] = useState(false); + + useEffect(() => { + loadFormsScript() + .then(() => setReady(true)) + .catch(error => Raven.captureException(error)); + }, []); + + return ready; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingController.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingController.tsx new file mode 100644 index 00000000..80bfac54 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingController.tsx @@ -0,0 +1,95 @@ +import React, { Fragment, useEffect } from 'react'; +import LoadingBlock from '../Common/LoadingBlock'; +import MeetingSelector from './MeetingSelector'; +import MeetingWarning from './MeetingWarning'; +import useMeetings, { + useSelectedMeeting, + useSelectedMeetingCalendar, +} from './hooks/useMeetings'; +import HubspotWrapper from '../Common/HubspotWrapper'; +import ErrorHandler from '../Common/ErrorHandler'; +import { pluginPath } from '../../constants/leadinConfig'; +import { __ } from '@wordpress/i18n'; +import Raven from 'raven-js'; + +interface IMeetingControllerProps { + url: string; + handleChange: Function; +} + +export default function MeetingController({ + handleChange, + url, +}: IMeetingControllerProps) { + const { + mappedMeetings: meetings, + loading, + error, + reload, + connectCalendar, + } = useMeetings(); + const selectedMeetingOption = useSelectedMeeting(url); + const selectedMeetingCalendar = useSelectedMeetingCalendar(url); + + useEffect(() => { + if (!url && meetings.length > 0) { + handleChange(meetings[0].value); + } + }, [meetings, url, handleChange]); + + const handleLocalChange = (option: { value: string }) => { + handleChange(option.value); + }; + + const handleConnectCalendar = () => { + return connectCalendar() + .then(() => { + reload(); + }) + .catch(error => { + Raven.captureMessage('Unable to connect calendar', { + extra: { error }, + }); + }); + }; + + return ( + + {loading ? ( + + ) : error ? ( + reload()} + errorInfo={{ + header: __( + 'There was a problem retrieving your meetings', + 'leadin' + ), + message: __( + 'Please refresh your meetings or try again in a few minutes', + 'leadin' + ), + action: __('Refresh meetings', 'leadin'), + }} + /> + ) : ( + + {selectedMeetingCalendar && ( + + )} + {meetings.length > 1 && ( + + )} + + )} + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingEdit.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingEdit.tsx new file mode 100644 index 00000000..343816ed --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingEdit.tsx @@ -0,0 +1,65 @@ +import React, { Fragment, useEffect } from 'react'; +import { IMeetingBlockProps } from '../../gutenberg/MeetingsBlock/registerMeetingBlock'; +import MeetingController from './MeetingController'; +import PreviewMeeting from './PreviewMeeting'; +import { + BackgroudAppContext, + useBackgroundAppContext, + usePostBackgroundMessage, +} from '../../iframe/useBackgroundApp'; +import { refreshToken } from '../../constants/leadinConfig'; +import { ProxyMessages } from '../../iframe/integratedMessages'; +import LoadingBlock from '../Common/LoadingBlock'; +import { getOrCreateBackgroundApp } from '../../utils/backgroundAppUtils'; + +interface IMeetingEditProps extends IMeetingBlockProps { + preview?: boolean; + origin?: 'gutenberg' | 'elementor'; +} + +function MeetingEdit({ + attributes: { url }, + isSelected, + setAttributes, + preview = true, + origin = 'gutenberg', +}: IMeetingEditProps) { + const isBackgroundAppReady = useBackgroundAppContext(); + const monitorFormPreviewRender = usePostBackgroundMessage(); + + const handleChange = (newUrl: string) => { + setAttributes({ + url: newUrl, + }); + }; + + useEffect(() => { + monitorFormPreviewRender({ + key: ProxyMessages.TrackMeetingPreviewRender, + payload: { + origin, + }, + }); + }, [origin]); + + return !isBackgroundAppReady ? ( + + ) : ( + + {(isSelected || !url) && ( + + )} + {preview && url && } + + ); +} + +export default function MeetingsEditContainer(props: IMeetingEditProps) { + return ( + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingSelector.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingSelector.tsx new file mode 100644 index 00000000..d05c9974 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingSelector.tsx @@ -0,0 +1,38 @@ +import React, { Fragment } from 'react'; +import AsyncSelect from '../Common/AsyncSelect'; +import UISpacer from '../UIComponents/UISpacer'; +import { __ } from '@wordpress/i18n'; + +interface IMeetingSelectorProps { + options: any[]; + onChange: Function; + value: any; +} + +export default function MeetingSelector({ + options, + onChange, + value, +}: IMeetingSelectorProps) { + const optionsWrapper = [ + { + label: __('Meeting name', 'leadin'), + options, + }, + ]; + + return ( + + +

+ {__('Select a meeting scheduling page', 'leadin')} +

+ +
+ ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingWarning.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingWarning.tsx new file mode 100644 index 00000000..197a209c --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingWarning.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import UIAlert from '../UIComponents/UIAlert'; +import UIButton from '../UIComponents/UIButton'; +import { CURRENT_USER_CALENDAR_MISSING } from './constants'; +import { __ } from '@wordpress/i18n'; + +interface IMeetingWarningProps { + status: string; + onConnectCalendar: React.MouseEventHandler; +} + +export default function MeetingWarning({ + status, + onConnectCalendar, +}: IMeetingWarningProps) { + const isMeetingOwner = status === CURRENT_USER_CALENDAR_MISSING; + const titleText = isMeetingOwner + ? __('Your calendar is not connected', 'leadin') + : __('Calendar is not connected', 'leadin'); + const titleMessage = isMeetingOwner + ? __( + 'Please connect your calendar to activate your scheduling pages', + 'leadin' + ) + : __( + 'Make sure that everybody in this meeting has connected their calendar from the Meetings page in HubSpot', + 'leadin' + ); + return ( + + {isMeetingOwner && ( + + {__('Connect calendar', 'leadin')} + + )} + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingsContext.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingsContext.tsx new file mode 100644 index 00000000..bd53ffba --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/MeetingsContext.tsx @@ -0,0 +1,106 @@ +import React, { useEffect, useState, useCallback } from 'react'; +import useCurrentUserFetch from './hooks/useCurrentUserFetch'; +import useMeetingsFetch from './hooks/useMeetingsFetch'; +import LoadState from '../enums/loadState'; + +interface IMeetingsContextWrapperState { + loading: boolean; + error: any; + meetings: any[]; + currentUser: any; + meetingUsers: any; + selectedMeeting: string; +} + +interface IMeetingsContext extends IMeetingsContextWrapperState { + reload: Function; +} + +interface IMeetingsContextWrapperProps { + url: string; +} + +export const MeetingsContext = React.createContext({ + loading: true, + error: null, + meetings: [], + currentUser: null, + meetingUsers: {}, + selectedMeeting: '', + reload: () => {}, +}); + +export default function MeetingsContextWrapper({ + url, + children, +}: React.PropsWithChildren) { + const [state, setState] = useState({ + loading: true, + error: null, + meetings: [], + currentUser: null, + meetingUsers: {}, + selectedMeeting: url, + }); + + const { + meetings, + meetingUsers, + loadMeetingsState, + error: errorMeeting, + reload: reloadMeetings, + } = useMeetingsFetch(); + + const { + user: currentUser, + loadUserState, + error: errorUser, + reload: reloadUser, + } = useCurrentUserFetch(); + + const reload = useCallback(() => { + reloadUser(); + reloadMeetings(); + }, [reloadUser, reloadMeetings]); + + useEffect(() => { + if ( + !state.loading && + !state.error && + state.currentUser && + state.meetings.length === 0 + ) { + reloadMeetings(); + } + }, [state, reloadMeetings]); + + useEffect(() => { + setState(previous => ({ + ...previous, + loading: + loadUserState === LoadState.Loading || + loadMeetingsState === LoadState.Loading, + currentUser, + meetings, + meetingUsers: meetingUsers.reduce((p, c) => ({ ...p, [c.id]: c }), {}), + error: errorMeeting || errorUser, + selectedMeeting: url, + })); + }, [ + loadUserState, + loadMeetingsState, + currentUser, + meetings, + meetingUsers, + errorMeeting, + errorUser, + url, + setState, + ]); + + return ( + + {children} + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/PreviewMeeting.tsx b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/PreviewMeeting.tsx new file mode 100644 index 00000000..c52f816e --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/PreviewMeeting.tsx @@ -0,0 +1,31 @@ +import React, { Fragment, useEffect, useRef } from 'react'; +import UIOverlay from '../UIComponents/UIOverlay'; +import useMeetingsScript from './hooks/useMeetingsScript'; + +interface IPreviewForm { + url: string; +} + +export default function PreviewForm({ url }: IPreviewForm) { + const ready = useMeetingsScript(); + const inputEl = useRef(null); + + useEffect(() => { + if (!ready) { + return; + } + if (inputEl.current) { + inputEl.current.innerHTML = ''; + const container = document.createElement('div'); + container.dataset.src = `${url}?embed=true`; + container.classList.add('meetings-iframe-container'); + inputEl.current.appendChild(container); + const embedScript = document.createElement('script'); + embedScript.innerHTML = + 'hbspt.meetings.create(".meetings-iframe-container");'; + inputEl.current.appendChild(embedScript); + } + }, [url, ready, inputEl]); + + return {url && }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/constants.ts b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/constants.ts new file mode 100644 index 00000000..b85dd7b9 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/constants.ts @@ -0,0 +1,2 @@ +export const OTHER_USER_CALENDAR_MISSING = 'OTHER_USER_CALENDAR_MISSING'; +export const CURRENT_USER_CALENDAR_MISSING = 'CURRENT_USER_CALENDAR_MISSING'; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useCurrentUserFetch.ts b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useCurrentUserFetch.ts new file mode 100644 index 00000000..27e3e481 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useCurrentUserFetch.ts @@ -0,0 +1,45 @@ +import { useEffect, useState } from 'react'; +import { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp'; +import LoadState, { LoadStateType } from '../../enums/loadState'; +import { ProxyMessages } from '../../../iframe/integratedMessages'; + +let user: any = null; + +export default function useCurrentUserFetch() { + const proxy = usePostAsyncBackgroundMessage(); + const [loadState, setLoadState] = useState( + LoadState.NotLoaded + ); + const [error, setError] = useState(null); + + const createUser = () => { + if (!user) { + setLoadState(LoadState.NotLoaded); + } + }; + + const reload = () => { + user = null; + setLoadState(LoadState.NotLoaded); + setError(null); + }; + + useEffect(() => { + if (loadState === LoadState.NotLoaded && !user) { + setLoadState(LoadState.Loading); + proxy({ + key: ProxyMessages.FetchOrCreateMeetingUser, + }) + .then(data => { + user = data; + setLoadState(LoadState.Idle); + }) + .catch(err => { + setError(err); + setLoadState(LoadState.Failed); + }); + } + }, [loadState]); + + return { user, loadUserState: loadState, error, createUser, reload }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetings.ts b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetings.ts new file mode 100644 index 00000000..62198944 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetings.ts @@ -0,0 +1,121 @@ +import { useCallback } from 'react'; +import { __ } from '@wordpress/i18n'; +import { + CURRENT_USER_CALENDAR_MISSING, + OTHER_USER_CALENDAR_MISSING, +} from '../constants'; +import useMeetingsFetch, { MeetingUser } from './useMeetingsFetch'; +import useCurrentUserFetch from './useCurrentUserFetch'; +import LoadState from '../../enums/loadState'; +import { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp'; +import { ProxyMessages } from '../../../iframe/integratedMessages'; + +function getDefaultMeetingName( + meeting: any, + currentUser: any, + meetingUsers: any +) { + const [meetingOwnerId] = meeting.meetingsUserIds; + let result = __('Default', 'leadin'); + if ( + currentUser && + meetingOwnerId !== currentUser.id && + meetingUsers[meetingOwnerId] + ) { + const user = meetingUsers[meetingOwnerId]; + result += ` (${user.userProfile.fullName})`; + } + return result; +} + +function hasCalendarObject(user: any) { + return ( + user && + user.meetingsUserBlob && + user.meetingsUserBlob.calendarSettings && + user.meetingsUserBlob.calendarSettings.email + ); +} + +export default function useMeetings() { + const proxy = usePostAsyncBackgroundMessage(); + const { + meetings, + meetingUsers, + error: meetingsError, + loadMeetingsState, + reload: reloadMeetings, + } = useMeetingsFetch(); + const { + user: currentUser, + error: userError, + loadUserState, + reload: reloadUser, + } = useCurrentUserFetch(); + + const reload = useCallback(() => { + reloadUser(); + reloadMeetings(); + }, [reloadUser, reloadMeetings]); + + const connectCalendar = () => { + return proxy({ + key: ProxyMessages.ConnectMeetingsCalendar, + }); + }; + + return { + mappedMeetings: meetings.map(meet => ({ + label: + meet.name || getDefaultMeetingName(meet, currentUser, meetingUsers), + value: meet.link, + })), + meetings, + meetingUsers, + currentUser, + error: meetingsError || (userError as any), + loading: + loadMeetingsState == LoadState.Loading || + loadUserState === LoadState.Loading, + reload, + connectCalendar, + }; +} + +export function useSelectedMeeting(url: string) { + const { mappedMeetings: meetings } = useMeetings(); + const option = meetings.find(({ value }) => value === url); + + return option; +} + +export function useSelectedMeetingCalendar(url: string) { + const { meetings, meetingUsers, currentUser } = useMeetings(); + + const meeting = meetings.find(meet => meet.link === url); + + const mappedMeetingUsersId: { + [key: number]: MeetingUser; + } = meetingUsers.reduce((p, c) => ({ ...p, [c.id]: c }), {}); + + if (!meeting) { + return null; + } else { + const { meetingsUserIds } = meeting; + if ( + currentUser && + meetingsUserIds.includes(currentUser.id) && + !hasCalendarObject(currentUser) + ) { + return CURRENT_USER_CALENDAR_MISSING; + } else if ( + meetingsUserIds + .map(id => mappedMeetingUsersId[id]) + .some((user: any) => !hasCalendarObject(user)) + ) { + return OTHER_USER_CALENDAR_MISSING; + } else { + return null; + } + } +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsFetch.ts b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsFetch.ts new file mode 100644 index 00000000..425c6e79 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsFetch.ts @@ -0,0 +1,58 @@ +import { useEffect, useState } from 'react'; +import { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp'; +import LoadState, { LoadStateType } from '../../enums/loadState'; +import { ProxyMessages } from '../../../iframe/integratedMessages'; + +export interface Meeting { + meetingsUserIds: number[]; + name: string; + link: string; +} + +export interface MeetingUser { + id: string; +} + +let meetings: Meeting[] = []; +let meetingUsers: MeetingUser[] = []; + +export default function useMeetingsFetch() { + const proxy = usePostAsyncBackgroundMessage(); + const [loadState, setLoadState] = useState( + LoadState.NotLoaded + ); + + const [error, setError] = useState(null); + + const reload = () => { + meetings = []; + setError(null); + setLoadState(LoadState.NotLoaded); + }; + + useEffect(() => { + if (loadState === LoadState.NotLoaded && meetings.length === 0) { + setLoadState(LoadState.Loading); + proxy({ + key: ProxyMessages.FetchMeetingsAndUsers, + }) + .then(data => { + setLoadState(LoadState.Loaded); + meetings = data && data.meetingLinks; + meetingUsers = data && data.meetingUsers; + }) + .catch(e => { + setError(e); + setLoadState(LoadState.Failed); + }); + } + }, [loadState]); + + return { + meetings, + meetingUsers, + loadMeetingsState: loadState, + error, + reload, + }; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsScript.ts b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsScript.ts new file mode 100644 index 00000000..34bd865e --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/Meeting/hooks/useMeetingsScript.ts @@ -0,0 +1,30 @@ +import $ from 'jquery'; + +import { useState, useEffect } from 'react'; +import { meetingsScript } from '../../../constants/leadinConfig'; +import Raven from '../../../lib/Raven'; + +let promise: Promise; + +function loadMeetingsScript() { + if (!promise) { + promise = new Promise((resolve, reject) => + $.getScript(meetingsScript) + .done(resolve) + .fail(reject) + ); + } + return promise; +} + +export default function useMeetingsScript() { + const [ready, setReady] = useState(false); + + useEffect(() => { + loadMeetingsScript() + .then(() => setReady(true)) + .catch(error => Raven.captureException(error)); + }, []); + + return ready; +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIAlert.tsx b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIAlert.tsx new file mode 100644 index 00000000..7d749190 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIAlert.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { styled } from '@linaria/react'; +import { MARIGOLD_LIGHT, MARIGOLD_MEDIUM, OBSIDIAN } from './colors'; + +const AlertContainer = styled.div` + background-color: ${MARIGOLD_LIGHT}; + border-color: ${MARIGOLD_MEDIUM}; + color: ${OBSIDIAN}; + font-size: 14px; + align-items: center; + justify-content: space-between; + display: flex; + border-style: solid; + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-width: 1px; + min-height: 60px; + padding: 8px 20px; + position: relative; + text-align: left; +`; + +const Title = styled.p` + font-family: 'Lexend Deca'; + font-style: normal; + font-weight: 700; + font-size: 16px; + line-height: 19px; + color: ${OBSIDIAN}; + margin: 0; + padding: 0; +`; + +const Message = styled.p` + font-family: 'Lexend Deca'; + font-style: normal; + font-weight: 400; + font-size: 14px; + margin: 0; + padding: 0; +`; + +const MessageContainer = styled.div` + display: flex; + flex-direction: column; +`; + +interface IUIAlertProps { + titleText: string; + titleMessage: string; +} + +export default function UIAlert({ + titleText, + titleMessage, + children, +}: React.PropsWithChildren) { + return ( + + + {titleText} + {titleMessage} + + {children} + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIButton.ts b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIButton.ts new file mode 100644 index 00000000..97c8ba70 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIButton.ts @@ -0,0 +1,19 @@ +import { styled } from '@linaria/react'; +import { HEFFALUMP, LORAX, OLAF } from './colors'; + +interface IButtonProps { + use?: string; +} + +export default styled.button` + background-color:${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)}; + border: 3px solid ${props => (props.use === 'tertiary' ? HEFFALUMP : LORAX)}; + color: ${OLAF} + border-radius: 3px; + font-size: 14px; + line-height: 14px; + padding: 12px 24px; + font-family: 'Lexend Deca', Helvetica, Arial, sans-serif; + font-weight: 500; + white-space: nowrap; +`; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIContainer.ts b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIContainer.ts new file mode 100644 index 00000000..6f44b8e5 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIContainer.ts @@ -0,0 +1,9 @@ +import { styled } from '@linaria/react'; + +interface IUIContainerProps { + textAlign?: string; +} + +export default styled.div` + text-align: ${props => (props.textAlign ? props.textAlign : 'inherit')}; +`; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIOverlay.ts b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIOverlay.ts new file mode 100644 index 00000000..35d06791 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UIOverlay.ts @@ -0,0 +1,14 @@ +import { styled } from '@linaria/react'; + +export default styled.div` + position: relative; + + &:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + } +`; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpacer.ts b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpacer.ts new file mode 100644 index 00000000..f014b0cd --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpacer.ts @@ -0,0 +1,5 @@ +import { styled } from '@linaria/react'; + +export default styled.div` + height: 30px; +`; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpinner.tsx b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpinner.tsx new file mode 100644 index 00000000..f1494bd2 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/UISpinner.tsx @@ -0,0 +1,78 @@ +import React from 'react'; +import { styled } from '@linaria/react'; +import { CALYPSO_MEDIUM, CALYPSO } from './colors'; + +const SpinnerOuter = styled.div` + align-items: center; + color: #00a4bd; + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; + height: 100%; + margin: '2px'; +`; + +const SpinnerInner = styled.div` + align-items: center; + display: flex; + justify-content: center; + width: 100%; + height: 100%; +`; + +interface IColorProp { + color: string; +} + +const Circle = styled.circle` + fill: none; + stroke: ${props => props.color}; + stroke-width: 5; + stroke-linecap: round; + transform-origin: center; +`; + +const AnimatedCircle = styled.circle` + fill: none; + stroke: ${props => props.color}; + stroke-width: 5; + stroke-linecap: round; + transform-origin: center; + animation: dashAnimation 2s ease-in-out infinite, + spinAnimation 2s linear infinite; + + @keyframes dashAnimation { + 0% { + stroke-dasharray: 1, 150; + stroke-dashoffset: 0; + } + + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -50; + } + + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -140; + } + } + + @keyframes spinAnimation { + transform: rotate(360deg); + } +`; + +export default function UISpinner({ size = 20 }) { + return ( + + + + + + + + + ); +} diff --git a/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/colors.ts b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/colors.ts new file mode 100644 index 00000000..9aaccc62 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/UIComponents/colors.ts @@ -0,0 +1,9 @@ +export const CALYPSO = '#00a4bd'; +export const CALYPSO_MEDIUM = '#7fd1de'; +export const CALYPSO_LIGHT = '#e5f5f8'; +export const LORAX = '#ff7a59'; +export const OLAF = '#ffffff'; +export const HEFFALUMP = '#425b76'; +export const MARIGOLD_LIGHT = '#fef8f0'; +export const MARIGOLD_MEDIUM = '#fae0b5'; +export const OBSIDIAN = '#33475b'; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/enums/connectionStatus.ts b/wp/wp-content/plugins/leadin/scripts/shared/enums/connectionStatus.ts new file mode 100644 index 00000000..62142122 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/enums/connectionStatus.ts @@ -0,0 +1,6 @@ +const ConnectionStatus = { + Connected: 'Connected', + NotConnected: 'NotConnected', +} as const; + +export default ConnectionStatus; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/enums/loadState.ts b/wp/wp-content/plugins/leadin/scripts/shared/enums/loadState.ts new file mode 100644 index 00000000..e6c64077 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/enums/loadState.ts @@ -0,0 +1,11 @@ +const LoadState = { + NotLoaded: 'NotLoaded', + Loading: 'Loading', + Loaded: 'Loaded', + Idle: 'Idle', + Failed: 'Failed', +} as const; + +export type LoadStateType = typeof LoadState[keyof typeof LoadState]; + +export default LoadState; diff --git a/wp/wp-content/plugins/leadin/scripts/shared/types.ts b/wp/wp-content/plugins/leadin/scripts/shared/types.ts new file mode 100644 index 00000000..2276fa06 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/shared/types.ts @@ -0,0 +1,4 @@ +export interface IForm { + guid: string; + name: string; +} diff --git a/wp/wp-content/plugins/leadin/scripts/utils/appUtils.ts b/wp/wp-content/plugins/leadin/scripts/utils/appUtils.ts new file mode 100644 index 00000000..c08ec5e6 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/utils/appUtils.ts @@ -0,0 +1,14 @@ +import $ from 'jquery'; +import Raven, { configureRaven } from '../lib/Raven'; + +export function initApp(initFn: Function) { + configureRaven(); + Raven.context(initFn); +} + +export function initAppOnReady(initFn: (...args: any[]) => void) { + function main() { + $(initFn); + } + initApp(main); +} diff --git a/wp/wp-content/plugins/leadin/scripts/utils/backgroundAppUtils.ts b/wp/wp-content/plugins/leadin/scripts/utils/backgroundAppUtils.ts new file mode 100644 index 00000000..62486af2 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/utils/backgroundAppUtils.ts @@ -0,0 +1,44 @@ +import { + deviceId, + hubspotBaseUrl, + locale, + portalId, +} from '../constants/leadinConfig'; +import { initApp } from './appUtils'; + +type CallbackFn = (...args: any[]) => void; + +export function initBackgroundApp(initFn: CallbackFn | CallbackFn[]) { + function main() { + if (Array.isArray(initFn)) { + initFn.forEach(callback => callback()); + } else { + initFn(); + } + } + initApp(main); +} + +export const getOrCreateBackgroundApp = (refreshToken: string) => { + if ((window as any).LeadinBackgroundApp) { + return (window as any).LeadinBackgroundApp; + } + const { IntegratedAppEmbedder, IntegratedAppOptions }: any = window; + const options = new IntegratedAppOptions() + .setLocale(locale) + .setDeviceId(deviceId) + .setRefreshToken(refreshToken); + + const embedder = new IntegratedAppEmbedder( + 'integrated-plugin-proxy', + portalId, + hubspotBaseUrl, + () => {} + ).setOptions(options); + + embedder.attachTo(document.body, false); + embedder.postStartAppMessage(); // lets the app know all all data has been passed to it + + (window as any).LeadinBackgroundApp = embedder; + return (window as any).LeadinBackgroundApp; +}; diff --git a/wp/wp-content/plugins/leadin/scripts/utils/contentEmbedInstaller.ts b/wp/wp-content/plugins/leadin/scripts/utils/contentEmbedInstaller.ts new file mode 100644 index 00000000..ae3adf52 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/utils/contentEmbedInstaller.ts @@ -0,0 +1,27 @@ +type ContentEmbedInfoResponse = { + success: boolean; + data?: { + // Empty if user doesn't have permissions or plugin already activated + activateAjaxUrl?: string; + message: string; + }; +}; + +export function startInstall(nonce: string) { + const formData = new FormData(); + const ajaxUrl = (window as any).ajaxurl; + formData.append('_wpnonce', nonce); + formData.append('action', 'content_embed_install'); + return fetch(ajaxUrl, { + method: 'POST', + body: formData, + keepalive: true, + }).then(res => res.json()); +} + +export function startActivation(requestUrl: string) { + return fetch(requestUrl, { + method: 'POST', + keepalive: true, + }).then(res => res.json()); +} diff --git a/wp/wp-content/plugins/leadin/scripts/utils/iframe.ts b/wp/wp-content/plugins/leadin/scripts/utils/iframe.ts new file mode 100644 index 00000000..9b80009b --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/utils/iframe.ts @@ -0,0 +1,36 @@ +import { useEffect, useState } from 'react'; + +const IFRAME_DISPLAY_TIMEOUT = 5000; + +export function useIframeNotRendered(app: string) { + const [iframeNotRendered, setIframeNotRendered] = useState(false); + useEffect(() => { + const timer = setTimeout(() => { + const iframe = document.getElementById(app); + if (!iframe) { + setIframeNotRendered(true); + } + }, IFRAME_DISPLAY_TIMEOUT); + + return () => { + if (timer) { + clearTimeout(timer); + } + }; + }, []); + + return iframeNotRendered; +} + +export const resizeWindow = () => { + const adminMenuWrap = document.getElementById('adminmenuwrap'); + const sideMenuHeight = adminMenuWrap ? adminMenuWrap.offsetHeight : 0; + const adminBar = document.getElementById('wpadminbar'); + const adminBarHeight = (adminBar && adminBar.offsetHeight) || 0; + const offset = 4; + if (window.innerHeight < sideMenuHeight) { + return sideMenuHeight - offset; + } else { + return window.innerHeight - adminBarHeight - offset; + } +}; diff --git a/wp/wp-content/plugins/leadin/scripts/utils/queryParams.ts b/wp/wp-content/plugins/leadin/scripts/utils/queryParams.ts new file mode 100644 index 00000000..69b5ec88 --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/utils/queryParams.ts @@ -0,0 +1,14 @@ +export function addQueryObjectToUrl( + urlObject: URL, + queryParams: { [key: string]: any } +) { + Object.keys(queryParams).forEach(key => { + urlObject.searchParams.append(key, queryParams[key]); + }); +} + +export function removeQueryParamFromLocation(key: string) { + const location = new URL(window.location.href); + location.searchParams.delete(key); + window.history.replaceState(null, '', location.href); +} diff --git a/wp/wp-content/plugins/leadin/scripts/utils/withMetaData.ts b/wp/wp-content/plugins/leadin/scripts/utils/withMetaData.ts new file mode 100644 index 00000000..186ded3f --- /dev/null +++ b/wp/wp-content/plugins/leadin/scripts/utils/withMetaData.ts @@ -0,0 +1,30 @@ +import { withSelect, withDispatch, select } from '@wordpress/data'; + +// from answer here: https://github.com/WordPress/gutenberg/issues/44477#issuecomment-1263026599 +export const isFullSiteEditor = () => { + return select && !!select('core/edit-site'); +}; + +const applyWithSelect = withSelect((select: Function, props: any): any => { + return { + metaValue: select('core/editor').getEditedPostAttribute('meta')[ + props.metaKey + ], + }; +}); + +const applyWithDispatch = withDispatch( + (dispatch: Function, props: any): any => { + return { + setMetaValue(value: string) { + dispatch('core/editor').editPost({ meta: { [props.metaKey]: value } }); + }, + }; + } +); + +function apply(el: T): T { + return applyWithSelect(applyWithDispatch(el)); +} + +export default apply; diff --git a/wp/wp-content/plugins/leadin/uninstall.php b/wp/wp-content/plugins/leadin/uninstall.php new file mode 100644 index 00000000..c0814058 --- /dev/null +++ b/wp/wp-content/plugins/leadin/uninstall.php @@ -0,0 +1,26 @@ + array( 'ID' ) ) ); +foreach ( $leadin_users as $leadin_user ) { + delete_user_meta( $leadin_user->ID, 'leadin_email' ); + delete_user_meta( $leadin_user->ID, 'leadin_skip_review' ); + delete_user_meta( $leadin_user->ID, 'leadin_review_banner_last_call' ); + delete_user_meta( $leadin_user->ID, 'leadin_has_min_contacts' ); + delete_user_meta( $leadin_user->ID, 'leadin_track_consent' ); +} + +delete_option( 'leadin_portalId' ); +delete_option( 'leadin_account_name' ); +delete_option( 'leadin_portal_domain' ); +delete_option( 'leadin_hublet' ); +delete_option( 'leadin_disable_internal_tracking' ); +delete_option( 'leadin_business_unit_id' ); +delete_option( 'leadin_access_token' ); +delete_option( 'leadin_refresh_token' ); +delete_option( 'leadin_expiry_time' ); +delete_option( 'leadin_activation_time' ); +delete_option( 'leadin_content_embed_ui_install' ); diff --git a/wp/wp-content/plugins/leadin/vendor/autoload.php b/wp/wp-content/plugins/leadin/vendor/autoload.php new file mode 100644 index 00000000..c139a08b --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/autoload.php @@ -0,0 +1,25 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ + private $prefixesPsr0 = array(); + /** + * @var list + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/wp/wp-content/plugins/leadin/vendor/composer/InstalledVersions.php b/wp/wp-content/plugins/leadin/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..51e734a7 --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/wp/wp-content/plugins/leadin/vendor/composer/LICENSE b/wp/wp-content/plugins/leadin/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/wp/wp-content/plugins/leadin/vendor/composer/autoload_classmap.php b/wp/wp-content/plugins/leadin/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..906a5704 --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/composer/autoload_classmap.php @@ -0,0 +1,48 @@ + $vendorDir . '/composer/InstalledVersions.php', + 'Leadin\\AssetsManager' => $baseDir . '/public/class-assetsmanager.php', + 'Leadin\\Leadin' => $baseDir . '/public/class-leadin.php', + 'Leadin\\PageHooks' => $baseDir . '/public/class-pagehooks.php', + 'Leadin\\admin\\AdminConstants' => $baseDir . '/public/admin/class-adminconstants.php', + 'Leadin\\admin\\Connection' => $baseDir . '/public/admin/class-connection.php', + 'Leadin\\admin\\ContentEmbedInstaller' => $baseDir . '/public/admin/class-contentembedinstaller.php', + 'Leadin\\admin\\DeactivationForm' => $baseDir . '/public/admin/class-deactivationform.php', + 'Leadin\\admin\\Gutenberg' => $baseDir . '/public/admin/class-gutenberg.php', + 'Leadin\\admin\\Impact' => $baseDir . '/public/admin/class-impact.php', + 'Leadin\\admin\\LeadinAdmin' => $baseDir . '/public/admin/class-leadinadmin.php', + 'Leadin\\admin\\Links' => $baseDir . '/public/admin/class-links.php', + 'Leadin\\admin\\MenuConstants' => $baseDir . '/public/admin/class-menuconstants.php', + 'Leadin\\admin\\NoticeManager' => $baseDir . '/public/admin/class-noticemanager.php', + 'Leadin\\admin\\PluginActionsManager' => $baseDir . '/public/admin/class-pluginactionsmanager.php', + 'Leadin\\admin\\ReviewBanner' => $baseDir . '/public/admin/class-reviewbanner.php', + 'Leadin\\admin\\ReviewController' => $baseDir . '/public/admin/class-reviewcontroller.php', + 'Leadin\\admin\\Routing' => $baseDir . '/public/admin/class-routing.php', + 'Leadin\\admin\\api\\Hublet_Api_Controller' => $baseDir . '/public/admin/modules/api/class-hublet-api-controller.php', + 'Leadin\\admin\\api\\Internal_Tracking_Api_Controller' => $baseDir . '/public/admin/modules/api/class-internal-tracking-api-controller.php', + 'Leadin\\admin\\api\\Portal_Api_Controller' => $baseDir . '/public/admin/modules/api/class-portal-api-controller.php', + 'Leadin\\admin\\api\\User_Meta_Api_Controller' => $baseDir . '/public/admin/modules/api/class-user-meta-api-controller.php', + 'Leadin\\admin\\widgets\\ElementorForm' => $baseDir . '/public/admin/widgets/class-elementorform.php', + 'Leadin\\admin\\widgets\\ElementorFormSelect' => $baseDir . '/public/admin/widgets/class-elementorformselect.php', + 'Leadin\\admin\\widgets\\ElementorMeeting' => $baseDir . '/public/admin/widgets/class-elementormeeting.php', + 'Leadin\\admin\\widgets\\ElementorMeetingSelect' => $baseDir . '/public/admin/widgets/class-elementormeetingselect.php', + 'Leadin\\api\\Base_Api_Controller' => $baseDir . '/public/modules/api/class-base-api-controller.php', + 'Leadin\\api\\Healthcheck_Api_Controller' => $baseDir . '/public/modules/api/class-healthcheck-api-controller.php', + 'Leadin\\auth\\OAuth' => $baseDir . '/public/auth/class-oauth.php', + 'Leadin\\auth\\OAuthCrypto' => $baseDir . '/public/auth/class-oauthcrypto.php', + 'Leadin\\data\\Filters' => $baseDir . '/public/data/class-filters.php', + 'Leadin\\data\\Portal_Options' => $baseDir . '/public/data/class-portal-options.php', + 'Leadin\\data\\User' => $baseDir . '/public/data/class-user.php', + 'Leadin\\data\\User_Metadata' => $baseDir . '/public/data/class-user-metadata.php', + 'Leadin\\utils\\QueryParameters' => $baseDir . '/public/utils/class-queryparameters.php', + 'Leadin\\utils\\RequestUtils' => $baseDir . '/public/utils/class-requestutils.php', + 'Leadin\\utils\\ShortcodeRenderUtils' => $baseDir . '/public/utils/class-shortcoderenderutils.php', + 'Leadin\\utils\\Versions' => $baseDir . '/public/utils/class-versions.php', + 'Leadin\\wp\\Page' => $baseDir . '/public/wp/class-page.php', +); diff --git a/wp/wp-content/plugins/leadin/vendor/composer/autoload_namespaces.php b/wp/wp-content/plugins/leadin/vendor/composer/autoload_namespaces.php new file mode 100644 index 00000000..15a2ff3a --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ +register(true); + + return $loader; + } +} diff --git a/wp/wp-content/plugins/leadin/vendor/composer/autoload_static.php b/wp/wp-content/plugins/leadin/vendor/composer/autoload_static.php new file mode 100644 index 00000000..a4c35c57 --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/composer/autoload_static.php @@ -0,0 +1,58 @@ + __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'Leadin\\AssetsManager' => __DIR__ . '/../..' . '/public/class-assetsmanager.php', + 'Leadin\\Leadin' => __DIR__ . '/../..' . '/public/class-leadin.php', + 'Leadin\\PageHooks' => __DIR__ . '/../..' . '/public/class-pagehooks.php', + 'Leadin\\admin\\AdminConstants' => __DIR__ . '/../..' . '/public/admin/class-adminconstants.php', + 'Leadin\\admin\\Connection' => __DIR__ . '/../..' . '/public/admin/class-connection.php', + 'Leadin\\admin\\ContentEmbedInstaller' => __DIR__ . '/../..' . '/public/admin/class-contentembedinstaller.php', + 'Leadin\\admin\\DeactivationForm' => __DIR__ . '/../..' . '/public/admin/class-deactivationform.php', + 'Leadin\\admin\\Gutenberg' => __DIR__ . '/../..' . '/public/admin/class-gutenberg.php', + 'Leadin\\admin\\Impact' => __DIR__ . '/../..' . '/public/admin/class-impact.php', + 'Leadin\\admin\\LeadinAdmin' => __DIR__ . '/../..' . '/public/admin/class-leadinadmin.php', + 'Leadin\\admin\\Links' => __DIR__ . '/../..' . '/public/admin/class-links.php', + 'Leadin\\admin\\MenuConstants' => __DIR__ . '/../..' . '/public/admin/class-menuconstants.php', + 'Leadin\\admin\\NoticeManager' => __DIR__ . '/../..' . '/public/admin/class-noticemanager.php', + 'Leadin\\admin\\PluginActionsManager' => __DIR__ . '/../..' . '/public/admin/class-pluginactionsmanager.php', + 'Leadin\\admin\\ReviewBanner' => __DIR__ . '/../..' . '/public/admin/class-reviewbanner.php', + 'Leadin\\admin\\ReviewController' => __DIR__ . '/../..' . '/public/admin/class-reviewcontroller.php', + 'Leadin\\admin\\Routing' => __DIR__ . '/../..' . '/public/admin/class-routing.php', + 'Leadin\\admin\\api\\Hublet_Api_Controller' => __DIR__ . '/../..' . '/public/admin/modules/api/class-hublet-api-controller.php', + 'Leadin\\admin\\api\\Internal_Tracking_Api_Controller' => __DIR__ . '/../..' . '/public/admin/modules/api/class-internal-tracking-api-controller.php', + 'Leadin\\admin\\api\\Portal_Api_Controller' => __DIR__ . '/../..' . '/public/admin/modules/api/class-portal-api-controller.php', + 'Leadin\\admin\\api\\User_Meta_Api_Controller' => __DIR__ . '/../..' . '/public/admin/modules/api/class-user-meta-api-controller.php', + 'Leadin\\admin\\widgets\\ElementorForm' => __DIR__ . '/../..' . '/public/admin/widgets/class-elementorform.php', + 'Leadin\\admin\\widgets\\ElementorFormSelect' => __DIR__ . '/../..' . '/public/admin/widgets/class-elementorformselect.php', + 'Leadin\\admin\\widgets\\ElementorMeeting' => __DIR__ . '/../..' . '/public/admin/widgets/class-elementormeeting.php', + 'Leadin\\admin\\widgets\\ElementorMeetingSelect' => __DIR__ . '/../..' . '/public/admin/widgets/class-elementormeetingselect.php', + 'Leadin\\api\\Base_Api_Controller' => __DIR__ . '/../..' . '/public/modules/api/class-base-api-controller.php', + 'Leadin\\api\\Healthcheck_Api_Controller' => __DIR__ . '/../..' . '/public/modules/api/class-healthcheck-api-controller.php', + 'Leadin\\auth\\OAuth' => __DIR__ . '/../..' . '/public/auth/class-oauth.php', + 'Leadin\\auth\\OAuthCrypto' => __DIR__ . '/../..' . '/public/auth/class-oauthcrypto.php', + 'Leadin\\data\\Filters' => __DIR__ . '/../..' . '/public/data/class-filters.php', + 'Leadin\\data\\Portal_Options' => __DIR__ . '/../..' . '/public/data/class-portal-options.php', + 'Leadin\\data\\User' => __DIR__ . '/../..' . '/public/data/class-user.php', + 'Leadin\\data\\User_Metadata' => __DIR__ . '/../..' . '/public/data/class-user-metadata.php', + 'Leadin\\utils\\QueryParameters' => __DIR__ . '/../..' . '/public/utils/class-queryparameters.php', + 'Leadin\\utils\\RequestUtils' => __DIR__ . '/../..' . '/public/utils/class-requestutils.php', + 'Leadin\\utils\\ShortcodeRenderUtils' => __DIR__ . '/../..' . '/public/utils/class-shortcoderenderutils.php', + 'Leadin\\utils\\Versions' => __DIR__ . '/../..' . '/public/utils/class-versions.php', + 'Leadin\\wp\\Page' => __DIR__ . '/../..' . '/public/wp/class-page.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->classMap = ComposerStaticInit2c7a3473c61a1b3f879a569918ce92c4::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/wp/wp-content/plugins/leadin/vendor/composer/installed.json b/wp/wp-content/plugins/leadin/vendor/composer/installed.json new file mode 100644 index 00000000..f20a6c47 --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/composer/installed.json @@ -0,0 +1,5 @@ +{ + "packages": [], + "dev": false, + "dev-package-names": [] +} diff --git a/wp/wp-content/plugins/leadin/vendor/composer/installed.php b/wp/wp-content/plugins/leadin/vendor/composer/installed.php new file mode 100644 index 00000000..7736fe40 --- /dev/null +++ b/wp/wp-content/plugins/leadin/vendor/composer/installed.php @@ -0,0 +1,23 @@ + array( + 'name' => 'hubspot/leadin-wordpress-plugin', + 'pretty_version' => '11.1.11', + 'version' => '11.1.11.0', + 'reference' => '274eae235191412f03c0865de147b922d821ee54', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => false, + ), + 'versions' => array( + 'hubspot/leadin-wordpress-plugin' => array( + 'pretty_version' => '11.1.11', + 'version' => '11.1.11.0', + 'reference' => '274eae235191412f03c0865de147b922d821ee54', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/wp/wp-content/plugins/maintenance-mode/maintenance-mode.php b/wp/wp-content/plugins/maintenance-mode/maintenance-mode.php new file mode 100644 index 00000000..4139af43 --- /dev/null +++ b/wp/wp-content/plugins/maintenance-mode/maintenance-mode.php @@ -0,0 +1,87 @@ + +
+
+ + + +
+
+'; +$html .= ''; + +echo $html; + +} + +function plugin_maint_section_text() { + echo '

Set Maintenance Mode

'; +} + + +function plugin_maint_options_validate($input) { +$options = get_option('plugin_options'); +return $options; +} + + +add_action('wp_loaded', 'maintenance_mode'); +function maintenance_mode(){ +$options = get_option( 'plugin_options' ); +$checked = ( isset($options['maint_checkbox']) && $options['maint_checkbox'] == 1) ? 1 : 0; + global $pagenow; + + if( $checked == 1 ){ + define('IN_MAINTENANCE', true); + } else { + define('IN_MAINTENANCE', false); + } + + if( + defined( 'IN_MAINTENANCE' ) + && IN_MAINTENANCE + && $pagenow !== 'wp-login.php' + && ! is_user_logged_in() + ) { + if ( file_exists( plugin_dir_path( __FILE__ ) . '/maintenance.php' ) ) { + require_once( plugin_dir_path( __FILE__ ) . '/maintenance.php' ); + } + die(); + } +}; + diff --git a/wp/wp-content/plugins/maintenance-mode/maintenance.php b/wp/wp-content/plugins/maintenance-mode/maintenance.php new file mode 100644 index 00000000..11920e85 --- /dev/null +++ b/wp/wp-content/plugins/maintenance-mode/maintenance.php @@ -0,0 +1,15 @@ + + + + +

For immediate support, please call 800-800-2537.

+Maintenance + + + + + + + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/LICENSE.txt b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/LICENSE.txt new file mode 100644 index 00000000..871ce8e6 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/class-hubwoo-admin.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/class-hubwoo-admin.php new file mode 100644 index 00000000..5fcc30ff --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/class-hubwoo-admin.php @@ -0,0 +1,3285 @@ +plugin_name = $plugin_name; + $this->version = $version; + + // let's modularize our codebase, all the admin actions in one function. + $this->admin_actions(); + } + + /** + * All admin actions. + * + * @since 1.0.0 + */ + public function admin_actions() { + + // add submenu hubspot in woocommerce top menu. + add_action( 'admin_menu', array( &$this, 'add_hubwoo_submenu' ) ); + // add filter. + add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', array( $this, 'hubwoo_ignore_guest_synced' ), 10, 2 ); + } + + /** + * Register the stylesheets for the admin area. + * + * @since 1.0.0 + */ + public function enqueue_styles() { + + $screen = get_current_screen(); + + if ( isset( $screen->id ) && 'woocommerce_page_hubwoo' === $screen->id || 'edit-shop_order' === $screen->id || 'woocommerce_page_wc-orders' === $screen->id ) { + + wp_enqueue_style( 'hubwoo-admin-style', plugin_dir_url( __FILE__ ) . 'css/hubwoo-admin.css', array(), $this->version, 'all' ); + wp_register_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION ); + wp_enqueue_style( 'woocommerce_admin_menu_styles' ); + wp_enqueue_style( 'woocommerce_admin_styles' ); + wp_enqueue_style( 'hubwoo_jquery_ui', plugin_dir_url( __FILE__ ) . 'css/jquery-ui.css', array(), $this->version ); + } + // deactivation screen + wp_enqueue_style( 'hubwoo-admin-global-style', plugin_dir_url( __FILE__ ) . 'css/hubwoo-admin-global.css', array(), $this->version, 'all' ); + } + + /** + * Register the JavaScript for the admin area. + * + * @since 1.0.0 + */ + public function enqueue_scripts() { + + $screen = get_current_screen(); + + if ( isset( $screen->id ) && 'woocommerce_page_hubwoo' === $screen->id || 'edit-shop_order' === $screen->id || 'woocommerce_page_wc-orders' === $screen->id ) { + + wp_register_script( 'woocommerce_admin', WC()->plugin_url() . '/assets/js/admin/woocommerce_admin.js', array( 'jquery', 'jquery-blockui', 'jquery-ui-sortable', 'jquery-ui-widget', 'jquery-ui-core', 'jquery-tiptip', 'wc-enhanced-select' ), WC_VERSION, true ); + wp_register_script( 'jquery-tiptip', WC()->plugin_url() . '/assets/js/jquery-tiptip/jquery.tipTip.js', array( 'jquery' ), WC_VERSION, true ); + + $locale = localeconv(); + $decimal = isset( $locale['decimal_point'] ) ? $locale['decimal_point'] : '.'; + $decimal_seperator = wc_get_price_decimal_separator(); + $params = array( + /* translators: %s: decimal */ + 'i18n_decimal_error' => sprintf( esc_html__( 'Please enter in decimal (%s) format without thousand separators.', 'makewebbetter-hubspot-for-woocommerce' ), $decimal ), + /* translators: %s: decimal_separator */ + 'i18n_mon_decimal_error' => sprintf( esc_html__( 'Please enter in monetary decimal (%s) format without thousand separators and currency symbols.', 'makewebbetter-hubspot-for-woocommerce' ), $decimal_seperator ), + 'i18n_country_iso_error' => esc_html__( 'Please enter in country code with two capital letters.', 'makewebbetter-hubspot-for-woocommerce' ), + 'i18_sale_less_than_regular_error' => esc_html__( 'Please enter in a value less than the regular price.', 'makewebbetter-hubspot-for-woocommerce' ), + 'decimal_point' => $decimal, + 'mon_decimal_point' => $decimal_seperator, + 'strings' => array( + 'import_products' => esc_html__( 'Import', 'makewebbetter-hubspot-for-woocommerce' ), + 'export_products' => esc_html__( 'Export', 'makewebbetter-hubspot-for-woocommerce' ), + ), + 'urls' => array( + 'import_products' => esc_url_raw( admin_url( 'edit.php?post_type=product&page=product_importer' ) ), + 'export_products' => esc_url_raw( admin_url( 'edit.php?post_type=product&page=product_exporter' ) ), + ), + ); + wp_enqueue_script( 'jquery-ui-datepicker' ); + wp_enqueue_script( 'hubwoo-datatables', plugin_dir_url( __FILE__ ) . 'js/datatable.js', array( 'jquery' ), $this->version, false ); + wp_localize_script( 'woocommerce_admin', 'woocommerce_admin', $params ); + wp_enqueue_script( 'woocommerce_admin' ); + wp_register_script( 'hubwoo_admin_script', plugin_dir_url( __FILE__ ) . 'js/hubwoo-admin.js', array( 'jquery', 'hubwoo-datatables' ), $this->version, true ); + wp_localize_script( + 'hubwoo_admin_script', + 'hubwooi18n', + array( + 'ajaxUrl' => admin_url( 'admin-ajax.php' ), + 'hubwooSecurity' => wp_create_nonce( 'hubwoo_security' ), + 'hubwooWentWrong' => esc_html__( 'Something went wrong, please try again later!', 'makewebbetter-hubspot-for-woocommerce' ), + 'hubwooSuccess' => esc_html__( 'Setup is completed successfully!', 'makewebbetter-hubspot-for-woocommerce' ), + 'hubwooMailFailure' => esc_html__( 'Mail not sent', 'makewebbetter-hubspot-for-woocommerce' ), + 'hubwooMailSuccess' => esc_html__( 'Mail Sent Successfully. We will get back to you soon.', 'makewebbetter-hubspot-for-woocommerce' ), + 'hubwooAccountSwitch' => esc_html__( 'Want to continue to switch to new HubSpot account? This cannot be reverted and will require running the whole setup again.', 'makewebbetter-hubspot-for-woocommerce' ), + 'hubwooRollback' => esc_html__( 'Doing rollback will require running the whole setup again. Continue?' ), + 'hubwooOverviewTab' => admin_url() . 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-overview', + 'hubwooNoListsSelected' => esc_html__( 'Please select a list to proceed', 'makewebbetter-hubspot-for-woocommerce' ), + 'hubwooOcsSuccess' => esc_html__( 'Congratulations !! Your data has been synced successfully.', 'makewebbetter-hubspot-for-woocommerce' ), + 'hubwooOcsError' => esc_html__( 'Something went wrong, Please check the error log and try re-sync your data.', 'makewebbetter-hubspot-for-woocommerce' ), + ) + ); + wp_enqueue_script( 'hubwoo_admin_script' ); + } + // deactivation screen. + wp_enqueue_script( 'crm-connect-hubspot-sdk', '//js.hsforms.net/forms/shell.js', array(), $this->version, false ); + wp_register_script( 'hubwoo_admin_global_script', plugin_dir_url( __FILE__ ) . 'js/hubwoo-admin-global.js', array( 'jquery' ), $this->version, true ); + wp_localize_script( + 'hubwoo_admin_global_script', + 'hubwooi18n', + array( + 'ajaxUrl' => admin_url( 'admin-ajax.php' ), + 'hubwooSecurity' => wp_create_nonce( 'hubwoo_security' ), + ) + ); + wp_enqueue_script( 'hubwoo_admin_global_script' ); + } + + /** + * Add hubspot submenu in woocommerce menu.. + * + * @since 1.0.0 + */ + public function add_hubwoo_submenu() { + + add_submenu_page( 'woocommerce', esc_html__( 'HubSpot', 'makewebbetter-hubspot-for-woocommerce' ), esc_html__( 'HubSpot', 'makewebbetter-hubspot-for-woocommerce' ), 'manage_woocommerce', 'hubwoo', array( &$this, 'hubwoo_configurations' ) ); + } + + /** + * All the configuration related fields and settings. + * + * @since 1.0.0 + */ + public function hubwoo_configurations() { + + include_once HUBWOO_ABSPATH . 'admin/templates/hubwoo-main-template.php'; + } + + /** + * Handle a custom 'hubwoo_pro_guest_order' query var to get orders with the 'hubwoo_pro_guest_order' meta. + * + * @param array $query - Args for WP_Query. + * @param array $query_vars - Query vars from WC_Order_Query. + * @return array modified $query + */ + public function hubwoo_ignore_guest_synced( $query, $query_vars ) { + + if ( ! empty( $query_vars['hubwoo_pro_guest_order'] ) ) { + + $query['meta_query'][] = array( + 'key' => '_billing_email', + 'value' => '', + 'compare' => 'NOT IN', + ); + + $query['meta_query'] = array( + array( + 'relation' => 'AND', + array( + 'key' => 'hubwoo_pro_guest_order', + 'value' => esc_attr( $query_vars['hubwoo_pro_guest_order'] ), + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => '_customer_user', + 'value' => 0, + 'compare' => '=', + ), + ), + ); + } + + return $query; + } + + /** + * Generating access token. + * + * @since 1.0.0 + */ + public function hubwoo_redirect_from_hubspot() { + + if ( isset( $_GET['code'] ) ) { + + if ( isset( $_GET['mwb_source'] ) && $_GET['mwb_source'] == 'hubspot' ) { + if ( ! isset( $_GET['state'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['state'] ) ), 'hubwoo_security' ) ) { + wp_die( 'The state is not correct from HubSpot Server. Try again.' ); + } + } + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + + if ( $hapikey && $hseckey ) { + if ( ! Hubwoo::is_valid_client_ids_stored() ) { + + if ( HubWooConnectionMananager::get_instance()->hubwoo_fetch_access_token_from_code( $hapikey, $hseckey ) == true ) { + $hubwoo_connection_complete = 'yes'; + update_option( 'hubwoo_static_redirect', 'yes' ); + } else { + $hubwoo_connection_complete = 'no'; + } + + global $hubwoo; + $hubwoo->hubwoo_owners_email_info(); + if ( 'yes' == $hubwoo_connection_complete ) { + update_option( 'hubwoo_connection_complete', 'yes' ); + delete_option( 'hubwoo_connection_issue' ); + wp_safe_redirect( admin_url() . 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-overview&hubwoo_key=grp-pr-setup' ); + } else { + update_option( 'hubwoo_connection_complete', 'no' ); + update_option( 'hubwoo_connection_issue', 'yes' ); + wp_safe_redirect( admin_url() . 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-overview&hubwoo_key=connection-setup' ); + } + } + } + } elseif ( ! empty( $_GET['hubwoo_download'] ) ) { + + // Download log file. + $filename = WC_LOG_DIR . Hubwoo::get_current_crm_name( 'slug' ) . '-sync-log.log'; + header( 'Content-type: text/plain' ); + header( 'Content-Disposition: attachment; filename="' . basename( $filename ) . '"' ); + readfile( $filename ); //phpcs:ignore + exit; + } + } + + + + /** + * WooCommerce privacy policy + * + * @since 1.0.0 + */ + public function hubwoo_pro_add_privacy_message() { + + if ( function_exists( 'wp_add_privacy_policy_content' ) ) { + + $content = '

' . esc_html__( 'We use your email to send your Orders related data over HubSpot.', 'makewebbetter-hubspot-for-woocommerce' ) . '

'; + + $content .= '

' . esc_html__( 'HubSpot is an inbound marketing and sales platform that helps companies attract visitors, convert leads, and close customers.', 'makewebbetter-hubspot-for-woocommerce' ) . '

'; + + $content .= '

' . esc_html__( 'Please see the ', 'makewebbetter-hubspot-for-woocommerce' ) . '' . esc_html__( 'HubSpot Data Privacy', 'makewebbetter-hubspot-for-woocommerce' ) . '' . esc_html__( ' for more details.', 'makewebbetter-hubspot-for-woocommerce' ) . '

'; + + if ( $content ) { + + wp_add_privacy_policy_content( esc_html__( 'MWB HubSpot for WooCommerce', 'makewebbetter-hubspot-for-woocommerce' ), $content ); + } + } + } + + /** + * General setting tab fields for hubwoo old customers sync + * + * @return array woocommerce_admin_fields acceptable fields in array. + * @since 1.0.0 + */ + public static function hubwoo_customers_sync_settings() { + + $settings = array(); + + if ( ! function_exists( 'get_editable_roles' ) ) { + + require_once ABSPATH . 'wp-admin/includes/user.php'; + } + + $existing_user_roles = self::get_all_user_roles(); + + $settings[] = array( + 'title' => esc_html__( 'Export your users and customers to HubSpot', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_customers_settings_title', + 'type' => 'title', + ); + + $settings[] = array( + 'title' => esc_html__( 'Select user role', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_customers_role_settings', + 'type' => 'multiselect', + 'desc' => esc_html__( 'Select a user role from the dropdown. Default will be all user roles.', 'makewebbetter-hubspot-for-woocommerce' ), + 'options' => $existing_user_roles, + 'desc_tip' => true, + 'class' => 'hubwoo-ocs-input-change', + 'custom_attributes' => array( + 'data-keytype' => esc_html__( 'user-role', 'makewebbetter-hubspot-for-woocommerce' ), + ), + ); + + $settings[] = array( + 'title' => esc_html__( 'Select a time period', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_customers_manual_sync', + 'class' => 'hubwoo-ocs-input-change', + 'type' => 'checkbox', + 'desc' => esc_html__( 'Date range for user / order sync', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $settings[] = array( + 'title' => esc_html__( 'Users registered from date', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_users_from_date', + 'type' => 'text', + 'placeholder' => 'dd-mm-yyyy', + 'default' => gmdate( 'd-m-Y' ), + 'desc' => esc_html__( 'From which date you want to sync the users, select that', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'class' => 'date-picker hubwoo-date-range hubwoo-ocs-input-change', + 'custom_attributes' => array( + 'data-keytype' => esc_html__( 'from-date', 'makewebbetter-hubspot-for-woocommerce' ), + ), + ); + $settings[] = array( + 'title' => esc_html__( 'Users registered upto date', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_users_upto_date', + 'type' => 'text', + 'default' => gmdate( 'd-m-Y' ), + 'placeholder' => esc_html__( 'dd-mm-yyyy', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc' => esc_html__( 'Upto which date you want to sync the users, select that date', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'class' => 'date-picker hubwoo-date-range hubwoo-ocs-input-change', + 'custom_attributes' => array( + 'data-keytype' => esc_html__( 'upto-date', 'makewebbetter-hubspot-for-woocommerce' ), + ), + ); + $settings[] = array( + 'type' => 'sectionend', + 'id' => 'hubwoo_customers_settings_end', + ); + return $settings; + } + + /** + * Get all WordPress user roles in formatted way + * + * @return array $existing_user_roles user roles in an array. + * @since 1.0.0 + */ + public static function get_all_user_roles() { + + $existing_user_roles = array(); + + global $wp_roles; + + $user_roles = ! empty( $wp_roles->role_names ) ? $wp_roles->role_names : array(); + + if ( is_array( $user_roles ) && count( $user_roles ) ) { + + foreach ( $user_roles as $role => $role_info ) { + + $role_label = ! empty( $role_info ) ? $role_info : $role; + + $existing_user_roles[ $role ] = $role_label; + } + $existing_user_roles['guest_user'] = 'Guest User'; + } + + return $existing_user_roles; + } + + /** + * Check if the user has cart as abandoned. + * + * @param array $properties array of contact properties. + * @return bool $flag true/false. + * @since 1.0.0 + */ + public static function hubwoo_check_for_cart( $properties ) { + + $flag = false; + + if ( ! empty( $properties ) && is_array( $properties ) ) { + $key = array_search( 'current_abandoned_cart', array_column( $properties, 'property' ) ); + if ( false !== $key ) { + $value = $properties[ $key ]['value']; + $flag = 'yes' === $value ? true : false; + } + } + + return $flag; + } + + + /** + * Check if the key in properties contains specific values + * + * @since 1.0.0 + * @param string $key key name to compare. + * @param string $value value of the property to check. + * @param array $properties array of contact properties. + * @return bool $flag true/false. + */ + public static function hubwoo_check_for_properties( $key, $value, $properties ) { + $flag = false; + + if ( is_array( $properties ) ) { + + $prop_index = array_search( $key, array_column( $properties, 'property' ) ); + + if ( array_key_exists( $prop_index, $properties ) ) { + $property_value = $properties[ $prop_index ]['value']; + $flag = $property_value == $value ? true : false; + } + } + + return $flag; + } + + /** + * Unset the workflow/ROI properties to avoid update on data sync. + * + * @since 1.0.0 + * @param array $properties contact properties data. + */ + public function hubwoo_reset_workflow_properties( $properties ) { + + $workflow_properties = HubWooContactProperties::get_instance()->_get( 'properties', 'roi_tracking' ); + if ( is_array( $workflow_properties ) && count( $workflow_properties ) ) { + foreach ( $workflow_properties as $single_property ) { + $group_name = isset( $single_property['name'] ) ? $single_property['name'] : ''; + if ( ! empty( $group_name ) ) { + if ( 'customer_new_order' !== $group_name ) { + $properties = self::hubwoo_unset_property( $properties, $group_name ); + } + } + } + } + return $properties; + } + + /** + * Unset the key from array of properties. + * + * @since 1.0.0 + * @param array $properties contact properties data. + * @param array $key key to unset. + */ + public static function hubwoo_unset_property( $properties, $key ) { + + if ( ! empty( $properties ) && ! empty( $key ) ) { + if ( array_key_exists( $key, $properties ) ) { + unset( $properties[ $key ] ); + } + } + return $properties; + } + + /** + * Getting next execution for realtime cron, priorities task for old users. + * + * @since 1.0.0 + */ + public function hubwoo_cron_notification() { + + if ( 'yes' == get_option( 'hubwoo-cron-notice-dismiss', 'no' ) ) { + return; + } + + ?> + + +
+
+

+ +

+
+ + +
+
+
+ + + + + +
+
+

+ + +

+
+
+ + + +
+
+

+ +

+
+ + +
+
+
+ get_customer_id(); + + if ( 0 !== $user_id && 0 < $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'yes' ); + } else { + + if ( 'yes' === get_option( 'hubwoo_pro_guest_sync_enable', 'yes' ) ) { + $order->update_meta_data('hubwoo_pro_guest_order', 'yes'); + } + } + + $upsert_meta = $order->get_meta('hubwoo_ecomm_deal_upsert', 'no'); + + if( $upsert_meta == 'yes'){ + return; + } + + $post_type = get_post_type( $order_id ); + + if ( 'shop_subscription' == $post_type ) { + return; + } + + if ('yes' == get_option('woocommerce_custom_orders_table_data_sync_enabled', 'no') && 'yes' == get_option('woocommerce_custom_orders_table_enabled', 'no')) { + return; + } + + $order->update_meta_data('hubwoo_ecomm_deal_upsert', 'yes'); + + $order->save(); + } + } + + /** + * Updating users list to be updated on hubspot when admin changes the role forcefully. + * + * @since 1.0.0 + * @param int $user_id user id. + */ + public function hubwoo_add_user_toupdate( $user_id ) { + + if ( ! empty( $user_id ) ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'yes' ); + } + } + + /** + * New active groups for subscriptions. + * + * @since 1.0.0 + * @param array $values list of pre-defined groups. + */ + public function hubwoo_subs_groups( $values ) { + + $values[] = array( + 'name' => 'subscriptions_details', + 'label' => __( 'Subscriptions Details', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + return $values; + } + + /** + * New active groups for subscriptions + * + * @since 1.0.0 + * @param array $active_groups list of active groups. + */ + public function hubwoo_active_subs_groups( $active_groups ) { + + $active_groups[] = 'subscriptions_details'; + + return $active_groups; + } + + /** + * Realtime sync for HubSpot CRM. + * + * @since 1.0.0 + */ + public function hubwoo_cron_schedule() { + + if ( 'yes' != get_option( 'hubwoo_greeting_displayed_setup', 'no' ) ) { + return; + } + + $contacts = array(); + + $args['meta_query'] = array( + 'relation' => 'AND', + array( + 'key' => 'hubwoo_pro_user_data_change', + 'value' => 'yes', + 'compare' => '==', + ), + array( + 'key' => 'hubwoo_invalid_contact', + 'compare' => 'NOT EXISTS', + ), + ); + + $args['role__in'] = get_option( 'hubwoo-selected-user-roles', array() ); + + $args['number'] = 5; + + $args['fields'] = 'ID'; + + $hubwoo_updated_user = get_users( $args ); + $hubwoo_unique_users = apply_filters( 'hubwoo_users', $hubwoo_updated_user ); + if ( ! empty( $hubwoo_unique_users ) ) { + $hubwoo_unique_users = array_unique( $hubwoo_unique_users ); + $contacts = HubwooDataSync::get_sync_data( $hubwoo_unique_users ); + } + + if ( ! empty( $contacts ) ) { + + $flag = true; + + if ( Hubwoo::is_access_token_expired() ) { + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + unset( $args ); + $args['ids'] = $hubwoo_unique_users; + $args['type'] = 'user'; + $response = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $contacts, $args ); + if ( ( count( $contacts ) ) && 400 == $response['status_code'] ) { + Hubwoo::hubwoo_handle_contact_sync( $response, $contacts, $args ); + } + } + } + unset( $hubwoo_unique_users ); + unset( $contacts ); + unset( $args ); + + $contacts = array(); + //hpos changes + if( Hubwoo::hubwoo_check_hpos_active() ) { + $query = new WC_Order_Query(array( + 'posts_per_page' => 5, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'post_parent' => 0, + 'customer_id' => 0, + 'meta_query' => array( + 'relation' => 'AND', + array( + 'key' => 'hubwoo_pro_guest_order', + 'compare' => '==', + 'value' => 'yes', + ), + array( + 'key' => 'hubwoo_invalid_contact', + 'compare' => 'NOT EXISTS', + ), + ) + )); + + $hubwoo_orders = $query->get_orders(); + } else { + + $query = new WP_Query(); + + $hubwoo_orders = $query->query( + array( + 'post_type' => 'shop_order', + 'posts_per_page' => 5, + 'post_status' => 'any', + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + 'relation' => 'AND', + array( + 'key' => 'hubwoo_pro_guest_order', + 'compare' => '==', + 'value' => 'yes', + ), + array( + 'key' => 'hubwoo_invalid_contact', + 'compare' => 'NOT EXISTS', + ), + ), + ) + ); + } + + $hubwoo_orders = apply_filters( 'hubwoo_guest_orders', $hubwoo_orders ); + + if ( ! empty( $hubwoo_orders ) ) { + $guest_contacts = HubwooDataSync::get_guest_sync_data( $hubwoo_orders ); + + $args['type'] = 'order'; + $args['ids'] = $hubwoo_orders; + + $response = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $guest_contacts, $args ); + + if ( ( count( $guest_contacts ) ) && 400 == $response['status_code'] ) { + Hubwoo::hubwoo_handle_contact_sync( $response, $guest_contacts, $args ); + } + } + + $hubwoo_guest_cart = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + + $guest_abandoned_carts = array(); + + if ( ! empty( $hubwoo_guest_cart ) ) { + foreach ( $hubwoo_guest_cart as $key => &$single_cart ) { + + if ( ! empty( $single_cart['email'] ) ) { + if ( ! empty( $single_cart['sent'] ) && 'yes' == $single_cart['sent'] ) { + if ( empty( $single_cart['cartData'] ) || empty( $single_cart['cartData']['cart'] ) ) { + unset( $hubwoo_guest_cart[ $key ] ); + } + continue; + } + $guest_user_properties = apply_filters( 'hubwoo_pro_track_guest_cart', $single_cart['email'], array() ); + + if ( self::hubwoo_check_for_cart( $guest_user_properties ) ) { + + $single_cart['sent'] = 'yes'; + } elseif ( ! self::hubwoo_check_for_cart( $guest_user_properties ) && self::hubwoo_check_for_cart_contents( $guest_user_properties ) ) { + + $single_cart['sent'] = 'yes'; + } + + $guest_user_properties = apply_filters( 'hubwoo_map_new_abncart_properties', $single_cart['email'], $guest_user_properties ); + + if ( ! empty( $guest_user_properties ) ) { + $guest_abandoned_carts[] = array( + 'email' => $single_cart['email'], + 'properties' => $guest_user_properties, + ); + } + } else { + unset( $hubwoo_guest_cart[ $key ] ); + } + } + + update_option( 'mwb_hubwoo_guest_user_cart', $hubwoo_guest_cart ); + } + if ( count( $guest_abandoned_carts ) ) { + + $chunked_array = array_chunk( $guest_abandoned_carts, 50, false ); + + if ( ! empty( $chunked_array ) ) { + + foreach ( $chunked_array as $single_chunk ) { + $response = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $single_chunk ); + if ( ( count( $single_chunk ) ) && 400 == $response['status_code'] ) { + Hubwoo::hubwoo_handle_contact_sync( $response, $single_chunk ); + } + } + } + } + } + + /** + * Check if the user has empty cart. + * + * @since 1.0.0 + * @param array $properties list of properties. + */ + public static function hubwoo_check_for_cart_contents( $properties ) { + + $flag = false; + + if ( ! empty( $properties ) ) { + + foreach ( $properties as $single_record ) { + + if ( ! empty( $single_record['property'] ) ) { + + if ( 'abandoned_cart_products' == $single_record['property'] ) { + + if ( empty( $single_record['value'] ) ) { + + $flag = true; + break; + } + } + } + } + } + + return $flag; + } + + /** + * Split contact batch on failure. + * + * @since 1.0.0 + * @param array $contacts array of contacts for batch upload. + */ + public static function hubwoo_split_contact_batch( $contacts ) { + + $contacts_chunk = array_chunk( $contacts, ceil( count( $contacts ) / 2 ) ); + + $response_chunk = array(); + + if ( isset( $contacts_chunk[0] ) ) { + + $response_chunk = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $contacts_chunk[0] ); + if ( isset( $response_chunk['status_code'] ) && 400 == $response_chunk['status_code'] ) { + + $response_chunk = self::hubwoo_single_contact_upload( $contacts_chunk[0] ); + } + } + if ( isset( $contacts_chunk[1] ) ) { + + $response_chunk = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $contacts_chunk[1] ); + if ( isset( $response_chunk['status_code'] ) && 400 == $response_chunk['status_code'] ) { + + $response_chunk = self::hubwoo_single_contact_upload( $contacts_chunk[1] ); + } + } + + return $response_chunk; + } + + /** + * Fallback for single contact. + * + * @since 1.0.0 + * @param array $contacts array of contacts for batch upload. + */ + public static function hubwoo_single_contact_upload( $contacts ) { + + if ( ! empty( $contacts ) ) { + + foreach ( $contacts as $single_contact ) { + + $response = HubWooConnectionMananager::get_instance()->create_or_update_contacts( array( $single_contact ) ); + } + } + + return $response; + } + + + /** + * Populating Orders column that has been synced as deal. + * + * @since 1.0.0 + * @param array $column Array of available columns. + * @param int $post_id Current Order post id. + */ + public function hubwoo_order_cols_value( $column, $post_id ) { + + $deal_id = get_post_meta( $post_id, 'hubwoo_ecomm_deal_id', true ); + $portal_id = get_option( 'hubwoo_pro_hubspot_id', '' ); + $user_id = get_post_meta( $post_id, '_customer_user', true ); + $user_vid = $user_id > 0 ? get_user_meta( $user_id, 'hubwoo_user_vid', true ) : get_post_meta( $post_id, 'hubwoo_user_vid', true ); + + if ( get_option( 'hubwoo_background_process_running', false ) || get_option( 'hubwoo_contact_vid_update', 0 ) ) { + $contact_tip = 'Contacts are being synced'; + $contact_status = 'yes'; + } else { + $contact_tip = 'Sync Contacts'; + $contact_status = 'no'; + } + + if ( 1 == get_option( 'hubwoo_deals_sync_running', 0 ) ) { + $deal_tip = 'Deals are being synced'; + $deal_status = 'yes'; + } else { + $deal_tip = 'Sync Deals'; + $deal_status = 'no'; + } + + switch ( $column ) { + + case 'hubwoo-deal-sync': + ?> +

+ + + + + + + + + +

+ esc_html__( 'Abandoned Cart Settings', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_abncart_settings_title', + 'type' => 'title', + 'class' => 'hubwoo-abncart-settings-title', + ); + $settings[] = array( + 'title' => esc_html__( 'Enable/Disable', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_abncart_enable_addon', + 'desc' => esc_html__( 'Track Abandoned Carts', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'default' => 'yes', + ); + + $settings[] = array( + 'title' => esc_html__( 'Guest Users ', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_abncart_guest_cart', + 'desc' => esc_html__( 'Track Guest Abandoned Carts', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'default' => 'yes', + ); + + $settings[] = array( + 'title' => esc_html__( 'Delete Old Data ', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_abncart_delete_old_data', + 'desc' => esc_html__( 'Delete Abandoned Carts Data', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'default' => 'yes', + ); + + $settings[] = array( + 'title' => esc_html__( 'Delete Data Timer( Days )', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_abncart_delete_after', + 'type' => 'number', + 'desc' => esc_html__( 'Delete Abandoned cart data form woocommerce store.', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'custom_attributes' => array( 'min' => '7' ), + 'default' => '30', + ); + + $settings[] = array( + 'title' => esc_html__( 'Cart Timer( Minutes )', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_abncart_timing', + 'type' => 'number', + 'desc' => esc_html__( 'Set the timer for abandoned cart. Customers abandoned cart data will be updated over HubSpot after the specified timer. Minimum value is 5 minutes.', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'custom_attributes' => array( 'min' => '5' ), + 'default' => '5', + ); + $settings[] = array( + 'type' => 'sectionend', + 'id' => 'hubwoo_abncart_settings_end', + ); + + return apply_filters( 'hubwoo_abn_cart_settings', $settings ); + } + + /** + * Updating customer properties for abandoned cart on HubSpot. + * + * @since 1.0.0 + * @param array $properties list of contact properties. + * @param int $contact_id user ID. + */ + public function hubwoo_abncart_contact_properties( $properties, $contact_id ) { + + $cart_product_skus = array(); + $cart_categories = array(); + $cart_products = array(); + $in_cart_products = array(); + $abncart_properties = array(); + $abncart_properties['current_abandoned_cart'] = 'no'; + $abncart_properties['abandoned_cart_date'] = ''; + $abncart_properties['abandoned_cart_counter'] = 0; + $abncart_properties['abandoned_cart_url'] = ''; + $abncart_properties['abandoned_cart_products_skus'] = ''; + $abncart_properties['abandoned_cart_products_categories'] = ''; + $abncart_properties['abandoned_cart_products'] = ''; + $abncart_properties['abandoned_cart_tax_value'] = 0; + $abncart_properties['abandoned_cart_subtotal'] = 0; + $abncart_properties['abandoned_cart_total_value'] = 0; + $abncart_properties['abandoned_cart_products_html'] = ''; + + $hubwoo_abncart_timer = get_option( 'hubwoo_abncart_timing', 5 ); + $customer_cart = get_user_meta( $contact_id, '_woocommerce_persistent_cart_' . get_current_blog_id(), true ); + $last_time = get_user_meta( $contact_id, 'hubwoo_pro_last_addtocart', true ); + + if ( isset( $customer_cart['cart'] ) && ! empty( $last_time ) ) { + + if ( count( $customer_cart['cart'] ) ) { + + $current_time = time(); + + $time_diff = round( abs( $current_time - $last_time ) / 60, 2 ); + + $hubwoo_abncart_timer = (int) $hubwoo_abncart_timer; + + if ( $time_diff <= $hubwoo_abncart_timer ) { + return $properties; + } + $last_date = (int) $last_time; + $last_date = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $last_date ); + $abncart_properties['abandoned_cart_date'] = $last_date; + $locale = get_user_meta( $contact_id, 'hubwoo_pro_cart_locale', true ); + $locale = ! empty( $locale ) ? $locale : get_locale(); + $cart_url = apply_filters( 'wpml_permalink', wc_get_cart_url(), $locale, true ); + + $abncart_properties['current_abandoned_cart'] = 'yes'; + + $cart_products = self::hubwoo_return_abncart_values( $customer_cart['cart'] ); + + if ( count( $cart_products ) ) { + + $abncart_properties['abandoned_cart_products_html'] = self::hubwoo_abncart_product_html( $cart_products ); + } + $cart_url .= '?hubwoo-abncart-retrieve='; + $cart_prod = array(); + foreach ( $customer_cart['cart'] as $single_cart_item ) { + + $item_id = $single_cart_item['product_id']; + $parent_item_sku = get_post_meta( $item_id, '_sku', true ); + if ( ! empty( $single_cart_item['variation_id'] ) ) { + $item_id = $single_cart_item['variation_id']; + } + + $qty = $single_cart_item['quantity'] ? $single_cart_item['quantity'] : 1; + $cart_prod[] = $item_id . ':' . $qty; + if ( get_post_status( $item_id ) == 'trash' || get_post_status( $item_id ) == false ) { + + continue; + } + + $cart_item_sku = get_post_meta( $item_id, '_sku', true ); + + if ( empty( $cart_item_sku ) ) { + $cart_item_sku = $parent_item_sku; + } + + if ( empty( $cart_item_sku ) ) { + $cart_item_sku = $item_id; + } + + $cart_product_skus[] = $cart_item_sku; + + $product_cats_ids = wc_get_product_term_ids( $item_id, 'product_cat' ); + + if ( is_array( $product_cats_ids ) && count( $product_cats_ids ) ) { + + foreach ( $product_cats_ids as $cat_id ) { + + $term = get_term_by( 'id', $cat_id, 'product_cat' ); + $cart_categories[] = $term->slug; + } + } + + $post = get_post( $item_id ); + $post_name = isset( $post->post_name ) ? $post->post_name : ''; + $product_name = $post_name . '-' . $item_id; + $in_cart_products[] = $product_name; + $abncart_properties['abandoned_cart_counter']++; + if ( array_key_exists( 'line_total', $single_cart_item ) ) { + $abncart_properties['abandoned_cart_subtotal'] += $single_cart_item['line_total']; + } else { + $product_obj = wc_get_product( $item_id ); + $abncart_properties['abandoned_cart_subtotal'] += $product_obj->get_price() * $single_cart_item['quantity']; + } + + $abncart_properties['abandoned_cart_tax_value'] += isset( $single_cart_item['line_tax'] ) ? $single_cart_item['line_tax'] : 0; + } + + $cart_url .= implode( ',', $cart_prod ); + + $abncart_properties['abandoned_cart_url'] = $cart_url; + $abncart_properties['abandoned_cart_products_skus'] = HubwooGuestOrdersManager::hubwoo_format_array( $cart_product_skus ); + $abncart_properties['abandoned_cart_products_categories'] = HubwooGuestOrdersManager::hubwoo_format_array( $cart_categories ); + $abncart_properties['abandoned_cart_products'] = HubwooGuestOrdersManager::hubwoo_format_array( $in_cart_products ); + + if ( ! empty( $abncart_properties['abandoned_cart_subtotal'] ) || ! empty( $abncart_properties['abandoned_cart_tax_value'] ) ) { + + $abncart_properties['abandoned_cart_total_value'] = floatval( $abncart_properties['abandoned_cart_subtotal'] + $abncart_properties['abandoned_cart_tax_value'] ); + } + } else { + + delete_user_meta( $contact_id, 'hubwoo_pro_user_left_cart' ); + delete_user_meta( $contact_id, 'hubwoo_pro_last_addtocart' ); + delete_user_meta( $contact_id, 'hubwoo_pro_cart_locale' ); + delete_user_meta( $contact_id, 'hubwoo_pro_user_cart_sent' ); + } + } else { + + delete_user_meta( $contact_id, 'hubwoo_pro_user_left_cart' ); + delete_user_meta( $contact_id, 'hubwoo_pro_last_addtocart' ); + delete_user_meta( $contact_id, 'hubwoo_pro_cart_locale' ); + delete_user_meta( $contact_id, 'hubwoo_pro_user_cart_sent' ); + } + + $abandoned_property_updated = get_option( 'hubwoo_abandoned_property_update', 'no' ); + + if ( ! empty( $abandoned_property_updated ) && 'yes' == $abandoned_property_updated ) { + if ( 'yes' == $abncart_properties['current_abandoned_cart'] ) { + $abncart_properties['current_abandoned_cart'] = true; + } else { + $abncart_properties['current_abandoned_cart'] = false; + } + } + + foreach ( $abncart_properties as $property_name => $property_value ) { + if ( isset( $property_value ) ) { + $properties[] = array( + 'property' => $property_name, + 'value' => $property_value, + ); + } + } + return $properties; + } + + /** + * Preparing few parameters value for abandoned cart details. + * + * @since 1.0.0 + * @param array $customer_cart cart contents. + */ + public static function hubwoo_return_abncart_values( $customer_cart ) { + + $key = 0; + + $cart_products = array(); + + $cart_total = 0; + $cart_counter = 0; + + if ( ! empty( $customer_cart ) ) { + + foreach ( $customer_cart as $single_cart_item ) { + + $item_id = $single_cart_item['product_id']; + $parent_item_img = wp_get_attachment_image_src( get_post_thumbnail_id( $item_id ), 'single-post-thumbnail' ); + $item_img = ''; + if ( ! empty( $single_cart_item['variation_id'] ) ) { + $item_id = $single_cart_item['variation_id']; + $item_img = wp_get_attachment_image_src( get_post_thumbnail_id( $item_id ), 'single-post-thumbnail' ); + } + if ( get_post_status( $item_id ) == 'trash' || get_post_status( $item_id ) == false ) { + + continue; + } + if ( empty( $item_img ) ) { + $item_img = $parent_item_img; + } + $product = wc_get_product( $item_id ); + if ( $product instanceof WC_Product ) { + $cart_products[ $key ]['image'] = $item_img; + $cart_products[ $key ]['name'] = $product->get_name(); + $cart_products[ $key ]['url'] = get_permalink( $item_id ); + $cart_products[ $key ]['price'] = $product->get_price(); + $cart_products[ $key ]['qty'] = $single_cart_item['quantity']; + $cart_products[ $key ]['item_id'] = $item_id; + if ( array_key_exists( 'line_total', $single_cart_item ) ) { + $cart_products[ $key ]['total'] = floatval( $single_cart_item['line_total'] + $single_cart_item['line_tax'] ); + } else { + $product_obj = wc_get_product( $item_id ); + $cart_products[ $key ]['total'] = $product_obj->get_price() * $single_cart_item['quantity']; + } + $key++; + } + } + } + + return $cart_products; + } + + /** + * Preparing cart HTML with products data. + * + * @since 1.0.0 + * @param array $cart_products values for products to be used in html. + */ + public static function hubwoo_abncart_product_html( $cart_products ) { + + $products_html = '

'; + foreach ( $cart_products as $single_product ) { + $products_html .= ''; + } + $products_html .= '
' . __( 'Image', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Item', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Qty', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Cost', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Total', 'makewebbetter-hubspot-for-woocommerce' ) . '
' . $single_product['name'] . '' . $single_product['qty'] . '' . wc_price( $single_product['price'], array( 'currency' => get_option( 'woocommerce_currency' ) ) ) . '' . wc_price( $single_product['total'], array( 'currency' => get_option( 'woocommerce_currency' ) ) ) . '

'; + + return apply_filters( 'hubwoo_abandoned_cart_html', $products_html, $cart_products ); + } + + /** + * Preparing guest user data for HubSpot. + * + * @since 1.0.0 + * @param string $email user email. + * @param array $properties list of properties. + */ + public function hubwoo_abncart_process_guest_data( $email, $properties = array() ) { + + if ( ! empty( $email ) ) { + $cart_product_skus = array(); + $cart_product_qty = 0; + $cart_subtotal = 0; + $cart_total = 0; + $cart_tax = 0; + $last_date = ''; + $cart_url = ''; + $cart_status = 'no'; + $cart_categories = array(); + $cart_products = array(); + $hubwoo_abncart_timer = get_option( 'hubwoo_abncart_timing', 5 ); + $products_html = ''; + $in_cart_products = array(); + $flag = false; + + $existing_guest_users = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + + if ( ! empty( $existing_guest_users ) ) { + + foreach ( $existing_guest_users as $key => &$single_cart_data ) { + + $flag = false; + + if ( isset( $single_cart_data['email'] ) && $email == $single_cart_data['email'] ) { + + $last_time = ! empty( $single_cart_data['timeStamp'] ) ? $single_cart_data['timeStamp'] : ''; + $current_time = time(); + $time_diff = round( abs( $current_time - $last_time ) / 60, 2 ); + $hubwoo_abncart_timer = (int) $hubwoo_abncart_timer; + $flag = true; + + $cart_data = ! empty( $single_cart_data['cartData']['cart'] ) ? $single_cart_data['cartData']['cart'] : array(); + + if ( count( $cart_data ) ) { + + $cart_products = self::hubwoo_return_abncart_values( $cart_data ); + } + + if ( count( $cart_products ) ) { + + $products_html = self::hubwoo_abncart_product_html( $cart_products ); + } + if ( ! empty( $cart_data ) ) { + $cart_status = 'yes'; + + $last_date = $last_time; + + $locale = ! empty( $single_cart_data['locale'] ) ? $single_cart_data['locale'] : get_locale(); + $cart_url = apply_filters( 'wpml_permalink', wc_get_cart_url(), $locale, true ); + + $cart_url .= '?hubwoo-abncart-retrieve='; + $cart_prod = array(); + + foreach ( $cart_data as $single_cart_item ) { + $item_id = $single_cart_item['product_id']; + $parent_item_sku = get_post_meta( $item_id, '_sku', true ); + if ( ! empty( $single_cart_item['variation_id'] ) ) { + $item_id = $single_cart_item['variation_id']; + } + + $qty = $single_cart_item['quantity'] ? $single_cart_item['quantity'] : 1; + $cart_prod[] = $item_id . ':' . $qty; + if ( get_post_status( $item_id ) == 'trash' || get_post_status( $item_id ) == false ) { + + continue; + } + + $cart_item_sku = get_post_meta( $item_id, '_sku', true ); + + if ( empty( $cart_item_sku ) ) { + + $cart_item_sku = $parent_item_sku; + } + + if ( empty( $cart_item_sku ) ) { + + $cart_item_sku = $item_id; + } + + $cart_product_skus[] = $cart_item_sku; + + $product_cats_ids = wc_get_product_term_ids( $item_id, 'product_cat' ); + + if ( is_array( $product_cats_ids ) && count( $product_cats_ids ) ) { + + foreach ( $product_cats_ids as $cat_id ) { + + $term = get_term_by( 'id', $cat_id, 'product_cat' ); + $cart_categories[] = $term->slug; + } + } + + $post = get_post( $item_id ); + $post_name = isset( $post->post_name ) ? $post->post_name : ''; + $product_name = $post_name . '-' . $item_id; + $in_cart_products[] = $product_name; + $cart_product_qty += $single_cart_item['quantity']; + $cart_subtotal += $single_cart_item['line_total']; + $cart_tax += $single_cart_item['line_tax']; + } + $cart_url .= implode( ',', $cart_prod ); + + } else { + + $this->hubwoo_abncart_clear_data( $email ); + } + + if ( $time_diff <= $hubwoo_abncart_timer ) { + if ( count( $cart_data ) ) { + $flag = false; + break; + } else { + $flag = true; + break; + } + } + break; + } + } + } + + $cart_product_skus = HubwooGuestOrdersManager::hubwoo_format_array( $cart_product_skus ); + $in_cart_products = HubwooGuestOrdersManager::hubwoo_format_array( $in_cart_products ); + $cart_categories = HubwooGuestOrdersManager::hubwoo_format_array( $cart_categories ); + $cart_total = floatval( $cart_tax + $cart_subtotal ); + + if ( $flag ) { + if ( ! empty( $last_date ) ) { + + $last_date = (int) $last_date; + $properties[] = array( + 'property' => 'abandoned_cart_date', + 'value' => HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $last_date ), + ); + } else { + $properties[] = array( + 'property' => 'abandoned_cart_date', + 'value' => '', + ); + } + + $abandoned_property_updated = get_option( 'hubwoo_abandoned_property_update', 'no' ); + + if ( ! empty( $abandoned_property_updated ) && 'yes' == $abandoned_property_updated ) { + if ( 'yes' == $cart_status ) { + $cart_status = true; + } else { + $cart_status = false; + } + } + + $properties[] = array( + 'property' => 'current_abandoned_cart', + 'value' => $cart_status, + ); + $properties[] = array( + 'property' => 'abandoned_cart_counter', + 'value' => $cart_product_qty, + ); + $properties[] = array( + 'property' => 'abandoned_cart_url', + 'value' => $cart_url, + ); + $properties[] = array( + 'property' => 'abandoned_cart_products_skus', + 'value' => $cart_product_skus, + ); + $properties[] = array( + 'property' => 'abandoned_cart_products_categories', + 'value' => $cart_categories, + ); + $properties[] = array( + 'property' => 'abandoned_cart_products', + 'value' => $in_cart_products, + ); + $properties[] = array( + 'property' => 'abandoned_cart_tax_value', + 'value' => $cart_tax, + ); + $properties[] = array( + 'property' => 'abandoned_cart_subtotal', + 'value' => $cart_subtotal, + ); + $properties[] = array( + 'property' => 'abandoned_cart_total_value', + 'value' => $cart_total, + ); + $properties[] = array( + 'property' => 'abandoned_cart_products_html', + 'value' => $products_html, + ); + } + return $properties; + } + } + + /** + * Clear data for email whose cart has been found empty. + * + * @since 1.0.0 + * @param string $email contact email. + */ + public function hubwoo_abncart_clear_data( $email ) { + + $existing_guest_users = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + + if ( ! empty( $existing_guest_users ) ) { + + foreach ( $existing_guest_users as $key => &$single_cart_data ) { + + if ( isset( $single_cart_data['email'] ) && $email == $single_cart_data['email'] ) { + + unset( $existing_guest_users[ $key ] ); + break; + } + } + } + + $existing_guest_users = array_values( $existing_guest_users ); + update_option( 'mwb_hubwoo_guest_user_cart', $existing_guest_users ); + } + + /** + * Clear those abandoned carts who have elapsed the saved timer. + * + * @since 1.0.0 + */ + public function huwoo_abncart_clear_old_cart() { + + if ( get_option( 'hubwoo_abncart_delete_old_data', 'yes' ) == 'yes' ) { + $saved_carts = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + + $hubwoo_abncart_delete_after = (int) get_option( 'hubwoo_abncart_delete_after', '30' ); + + $hubwoo_abncart_delete_after = $hubwoo_abncart_delete_after * ( 24 * 60 * 60 ); + + // process the guest cart data. + if ( ! empty( $hubwoo_abncart_delete_after ) ) { + + if ( ! empty( $saved_carts ) ) { + + foreach ( $saved_carts as $key => &$single_cart ) { + + $cart_time = ! empty( $single_cart['timeStamp'] ) ? $single_cart['timeStamp'] : ''; + + if ( ! empty( $cart_time ) ) { + + $time = time(); + + if ( $time > $cart_time && ( $time - $cart_time ) >= $hubwoo_abncart_delete_after ) { + + unset($saved_carts[$key]); + } + } + } + } + } + + update_option( 'mwb_hubwoo_guest_user_cart', $saved_carts ); + + // process the clearing of meta for registered users but don't clear their cart. + $args['meta_query'] = array( + + array( + 'key' => 'hubwoo_pro_user_left_cart', + 'value' => 'yes', + 'compare' => '==', + ), + ); + + $users = wp_list_pluck( get_users( $args ), 'ID' ); + + if ( ! empty( $users ) ) { + foreach ( $users as $user_id ) { + $cart_time = get_user_meta( $user_id, 'hubwoo_pro_last_addtocart', true ); + if ( ! empty( $cart_time ) ) { + $time = time(); + if ( $time > $cart_time && ( $time - $cart_time ) >= $hubwoo_abncart_delete_after ) { + delete_user_meta( $user_id, 'hubwoo_pro_last_addtocart' ); + delete_user_meta( $user_id, 'hubwoo_pro_user_left_cart' ); + delete_user_meta( $user_id, 'hubwoo_pro_cart_locale' ); + } + } + } + } + } + } + + /** + * Fetching the customers who have abandoned cart. + * + * @since 1.0.0 + * @param array $hubwoo_users list of users ready to be synced on hubspot. + */ + public function hubwoo_abncart_users( $hubwoo_users ) { + + $args['meta_query'] = array( + 'relation' => 'AND', + array( + 'key' => 'hubwoo_pro_user_left_cart', + 'value' => 'yes', + 'compare' => '==', + ), + array( + 'relation' => 'OR', + array( + 'key' => 'hubwoo_pro_user_cart_sent', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => 'hubwoo_pro_user_cart_sent', + 'value' => 'no', + 'compare' => '==', + ), + ), + ); + $args['number'] = 25; + $args['fields'] = 'ID'; + $hubwoo_abandoned_cart_users = get_users( $args ); + $hubwoo_new_users = array(); + + if ( count( $hubwoo_abandoned_cart_users ) ) { + + $hubwoo_new_users = array_merge( $hubwoo_users, $hubwoo_abandoned_cart_users ); + } else { + + $hubwoo_new_users = $hubwoo_users; + } + + return $hubwoo_new_users; + } + /** + * Get user actions for marketing. + * + * @return array abandoned cart current status. + * @since 1.0.0 + */ + public static function get_abandoned_cart_status() { + + $cart_status = array(); + + $cart_status[] = array( + 'label' => __( 'Yes', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'yes', + ); + $cart_status[] = array( + 'label' => __( 'No', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'no', + ); + + $cart_status = apply_filters( 'hubwoo_customer_cart_statuses', $cart_status ); + + return $cart_status; + } + + /** + * Prepare params for generating plugin settings. + * + * @since 1.0.0 + * @return array $basic_settings array of html settings. + */ + public static function hubwoo_get_plugin_settings() { + + global $hubwoo; + + $existing_user_roles = self::get_all_user_roles(); + + $basic_settings = array(); + + $basic_settings[] = array( + 'title' => esc_html__( 'Plugin Settings', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_checkout_optin_title', + 'type' => 'title', + ); + + $basic_settings[] = array( + 'title' => esc_html__( 'Sync with User Role', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo-selected-user-roles', + 'class' => 'hubwoo-general-settings-fields', + 'type' => 'multiselect', + 'desc' => esc_html__( 'The users with selected roles will be synced on HubSpot. Default will be all user roles.', 'makewebbetter-hubspot-for-woocommerce' ), + 'options' => $existing_user_roles, + 'desc_tip' => true, + + ); + + if ( Hubwoo::hubwoo_subs_active() ) { + $basic_settings[] = array( + 'title' => esc_html__( 'WooCommerce Subscription', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_subs_settings_enable', + 'class' => 'hubwoo-general-settings-fields', + 'desc' => esc_html__( 'Enable subscriptions data sync', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'default' => 'yes', + ); + } + + $basic_settings[] = array( + 'title' => esc_html__( 'Show Checkbox on Checkout Page', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_checkout_optin_enable', + 'class' => 'hubwoo-general-settings-fields', + 'desc' => esc_html__( 'Show Opt-In checkbox on Checkout Page', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'default' => 'no', + ); + + $basic_settings[] = array( + 'title' => esc_html__( 'Checkbox Label on Checkout Page', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_checkout_optin_label', + 'class' => 'hubwoo-general-settings-fields', + 'desc' => esc_html__( 'Label to show for the checkbox', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'text', + 'default' => esc_html__( 'Subscribe', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $basic_settings[] = array( + 'title' => esc_html__( 'Show Checkbox on My Account Page', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_registeration_optin_enable', + 'class' => 'hubwoo-general-settings-fields', + 'desc' => esc_html__( 'Show Opt-In checkbox on My Account Page (Registration form)', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'default' => 'no', + ); + + $basic_settings[] = array( + 'title' => esc_html__( 'Checkbox Label on My Account Page', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_registeration_optin_label', + 'class' => 'hubwoo-general-settings-fields', + 'desc' => esc_html__( 'Label to show for the checkbox', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'text', + 'default' => esc_html__( 'Subscribe', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $basic_settings[] = array( + 'title' => esc_html__( 'Calculate ROI for the Selected Status', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_no_status', + 'class' => 'hubwoo-general-settings-fields', + 'type' => 'select', + 'desc' => esc_html__( 'Select an order status from the dropdown for which the new order property will be set/changed on each sync. Default Order Status is Completed', 'makewebbetter-hubspot-for-woocommerce' ), + 'options' => wc_get_order_statuses(), + 'desc_tip' => true, + 'default' => 'wc-completed', + ); + + $basic_settings = apply_filters( 'hubwoo_general_settings_options', $basic_settings ); + + $basic_settings[] = array( + 'type' => 'sectionend', + 'id' => 'hubwoo_pro_settings_end', + ); + + return $basic_settings; + } + + /** + * Get products count. + * + * @since 1.0.0 + * @return int $counter count of woocommerce products. + */ + public static function hubwoo_get_all_products_count() { + $counter = 0; + + $query = new WP_Query(); + + $products = $query->query( + array( + 'post_type' => array( 'product', 'product_variation' ), + 'posts_per_page' => -1, + 'post_status' => array( 'publish' ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + ) + ); + if ( ! empty( $products ) ) { + $counter = count( $products ); + } + return $counter; + } + + /** + * Get all users count. + * + * @since 1.0.0 + * @param string $constraint ( default = "NOT EXISTS" ). + * @return int $users count of all users + */ + public static function hubwoo_get_all_users_count( $constraint = 'NOT EXISTS' ) { + + global $hubwoo; + + $roles = get_option( 'hubwoo_customers_role_settings', array() ); + + if ( empty( $roles ) ) { + $roles = array_keys( $hubwoo->hubwoo_get_user_roles() ); + $key = array_search( 'guest_user', $roles ); + if ( false !== $key ) { + unset( $roles[ $key ] ); + } + } + + $args['role__in'] = $roles; + + $args['meta_query'] = array( + array( + 'key' => 'hubwoo_pro_user_data_change', + 'compare' => $constraint, + ), + ); + + $args['fields'] = 'ids'; + + return count( get_users( $args ) ); + } + + /** + * Background sync for Deals. + * + * @since 1.0.0 + * @param int $order_id order id. + */ + public function hubwoo_ecomm_deal_upsert( $order_id ) { + + if ( empty( $order_id ) ) { + return; + } + + HubwooObjectProperties::get_instance()->hubwoo_ecomm_deals_sync( $order_id ); + } + + /** + * Background sync for Deals. + * + * @since 1.0.0 + */ + public function hubwoo_ecomm_deal_update( ) { + + if ( 'no' == get_option( 'hubwoo_ecomm_setup_completed', 'no' ) || 'yes' === get_option( 'hubwoo_connection_issue', 'no' ) ) { + return; + } + + //hpos changes + if ( Hubwoo::hubwoo_check_hpos_active() ) { + + $query = new WC_Order_Query(array( + 'posts_per_page' => 3, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'post_parent' => 0, + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_upsert', + 'compare' => '==', + 'value' => 'yes', + ), + ), + )); + + $failed_orders = $query->get_orders(); + } else { + // CPT-based orders are in use. + $query = new WP_Query(); + + $args = array( + 'post_type' => 'shop_order', + 'posts_per_page' => 3, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_upsert', + 'compare' => '==', + 'value' => 'yes', + ), + ), + ); + + $failed_orders = $query->query( $args ); + } + + if ( ! empty( $failed_orders ) ) { + foreach ( $failed_orders as $order_id ) { + HubwooObjectProperties::get_instance()->hubwoo_ecomm_deals_sync( $order_id ); + } + } + + } + + /** + * Background sync for Deals. + * + * @since 1.0.0 + */ + public function hubwoo_deals_sync_background() { + + $orders_needs_syncing = self::hubwoo_orders_count_for_deal( 5, false ); + if ( is_array( $orders_needs_syncing ) && count( $orders_needs_syncing ) ) { + foreach ( $orders_needs_syncing as $order_id ) { + HubwooObjectProperties::get_instance()->hubwoo_ecomm_deals_sync( $order_id ); + } + } else { + Hubwoo::hubwoo_stop_sync( 'stop-deal' ); + } + } + + /** + * Background sync for Products. + * + * @since 1.0.0 + */ + public function hubwoo_products_sync_background() { + + if ( 'yes' != get_option( 'hubwoo_greeting_displayed_setup', 'no' ) || 'yes' == get_option( 'hubwoo_product_scope_needed', 'no' ) ) { + return; + } + + $product_data = Hubwoo::hubwoo_get_product_data( 10 ); + if ( ! empty( $product_data ) && is_array( $product_data ) ) { + + foreach ( $product_data as $pro_id => $value ) { + + $filtergps = array(); + $product_data = array( + 'properties' => $value['properties'], + ); + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $product = wc_get_product( $pro_id ); + + if( $product instanceof WC_Product ) { + + $filtergps = array( + 'filterGroups' => array( + array( + 'filters' => array( + array( + 'value' => $pro_id, + 'propertyName' => 'store_product_id', + 'operator' => 'EQ', + ), + ), + ), + ), + ); + + if( !empty($product->get_sku()) ) { + $filtergps['filterGroups'][] = array( + 'filters' => array( + array( + 'value' => $product->get_sku(), + 'propertyName' => 'hs_sku', + 'operator' => 'EQ', + ), + ), + ); + } + + $response = HubWooConnectionMananager::get_instance()->search_object_record( 'products', $filtergps ); + + if ( 200 == $response['status_code'] ) { + $responce_body = json_decode( $response['body'] ); + $result = $responce_body->results; + if ( ! empty( $result ) ) { + foreach ( $result as $key => $value ) { + update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $value->id ); + } + } + } + + $pro_hs_id = get_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', true ); + if ( ! empty( $pro_hs_id ) ) { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'products', $pro_hs_id, $product_data ); + if ( 200 == $response['status_code'] ) { + delete_post_meta( $pro_id, 'hubwoo_product_synced' ); + } + } else { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'products', $product_data ); + if ( 201 == $response['status_code'] ) { + $response_body = json_decode( $response['body'] ); + update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $response_body->id ); + delete_post_meta( $pro_id, 'hubwoo_product_synced' ); + } + } + do_action( 'hubwoo_update_product_property', $pro_id ); + } + } + } + + if ( ! as_next_scheduled_action( 'hubwoo_products_status_background' ) ) { + as_schedule_recurring_action( time(), 180, 'hubwoo_products_status_background' ); + } + } + } + + /** + * Background sync status for Products. + * + * @since 1.0.0 + */ + public function hubwoo_products_status_background() { + + $products = Hubwoo::hubwoo_get_product_data( 10 ); + if ( empty( $products ) ) { + + $orders_needs_syncing = self::hubwoo_orders_count_for_deal(); + if ( $orders_needs_syncing ) { + + update_option( 'hubwoo_deals_sync_running', 1 ); + update_option( 'hubwoo_deals_sync_total', $orders_needs_syncing ); + if ( ! as_next_scheduled_action( 'hubwoo_deals_sync_background' ) ) { + as_schedule_recurring_action( time(), 300, 'hubwoo_deals_sync_background' ); + } + } + + Hubwoo::hubwoo_stop_sync( 'stop-product-sync' ); + } + } + + /** + * Updates the product whenever there is any change + * + * @since 1.0.0 + * @param int $post_ID post id of the product. + * @param object $post post object. + */ + public function hubwoo_ecomm_update_product( $post_ID, $post ) { + + if ( 'yes' != get_option( 'hubwoo_greeting_displayed_setup', 'no' ) || 'yes' == get_option( 'hubwoo_product_scope_needed', 'no' ) ) { + return; + } + + $post_type = $post->post_type; + if ( 'product' != $post_type ) { + return; + } + $updates = array(); + $hs_new = 'true'; + $object_type = 'PRODUCT'; + if ( is_ajax() ) { + return; + } + $post_status = get_post_status( $post_ID ); + if ( 'publish' == $post_status ) { + if ( ! empty( $post_ID ) ) { + $product = wc_get_product( $post_ID ); + $product_type = $product->get_type(); + if ( ! empty( $product_type ) && ( 'variable' == $product_type || 'variable-subscription' == $product_type ) ) { + $variation_args = array( + 'post_parent' => $post_ID, + 'post_type' => 'product_variation', + 'numberposts' => -1, + ); + $wc_products_array = get_posts( $variation_args ); + if ( is_array( $wc_products_array ) && count( $wc_products_array ) ) { + foreach ( $wc_products_array as $single_var_product ) { + $hubwoo_ecomm_product = new HubwooEcommObject( $single_var_product->ID, $object_type ); + $properties = $hubwoo_ecomm_product->get_object_properties(); + $properties = apply_filters( 'hubwoo_map_ecomm_' . $object_type . '_properties', $properties, $single_var_product->ID ); + $pro_hs_id = get_post_meta( $single_var_product->ID, 'hubwoo_ecomm_pro_id', true ); + $properties['description'] = $properties['pr_description']; + + unset( $properties['pr_description'] ); + if ( ! empty( $pro_hs_id ) ) { + $updates[] = array( + 'id' => $pro_hs_id, + 'properties' => $properties, + ); + $hs_new = 'false'; + } else { + $updates[] = array( + 'properties' => $properties, + ); + } + } + } + } else { + $hubwoo_ecomm_product = new HubwooEcommObject( $post_ID, $object_type ); + $properties = $hubwoo_ecomm_product->get_object_properties(); + $properties = apply_filters( 'hubwoo_map_ecomm_' . $object_type . '_properties', $properties, $post_ID ); + $pro_hs_id = get_post_meta( $post_ID, 'hubwoo_ecomm_pro_id', true ); + $properties['description'] = $properties['pr_description']; + + unset( $properties['pr_description'] ); + if ( ! empty( $pro_hs_id ) ) { + $updates[] = array( + 'id' => $pro_hs_id, + 'properties' => $properties, + ); + $hs_new = 'false'; + } else { + $updates[] = array( + 'properties' => $properties, + ); + } + } + } + } + if ( count( $updates ) ) { + $updates = array( + 'inputs' => $updates, + ); + + $flag = true; + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + if ( 'true' == $hs_new ) { + $response = HubWooConnectionMananager::get_instance()->create_batch_object_record( 'products', $updates ); + + if ( 201 == $response['status_code'] ) { + $response = json_decode( $response['body'] ); + $result = $response->results; + foreach ( $result as $key => $value ) { + update_post_meta( $value->properties->store_product_id, 'hubwoo_ecomm_pro_id', $value->id ); + delete_post_meta( $value->properties->store_product_id, 'hubwoo_product_synced' ); + do_action( 'hubwoo_update_product_property', $value->properties->store_product_id ); + } + } + } else { + $response = HubWooConnectionMananager::get_instance()->update_batch_object_record( 'products', $updates ); + if ( 200 == $response['status_code'] ) { + $response = json_decode( $response['body'] ); + $result = $response->results; + foreach ( $result as $key => $value ) { + delete_post_meta( $value->properties->store_product_id, 'hubwoo_product_synced' ); + do_action( 'hubwoo_update_product_property', $value->properties->store_product_id ); + } + } + } + } + } + } + + /** + * Fetching total order available and returning count. Also excluding orders with deal id. + * + * @since 1.0.0 + * @param int $number_of_posts posts to fetch in one call. + * @param bool $count true/false. + * @return array $old_orders orders posts. + */ + public static function hubwoo_orders_count_for_deal( $number_of_posts = -1, $count = true ) { + + $sync_data['since_date'] = get_option( 'hubwoo_ecomm_order_ocs_from_date', gmdate( 'd-m-Y' ) ); + $sync_data['upto_date'] = get_option( 'hubwoo_ecomm_order_ocs_upto_date', gmdate( 'd-m-Y' ) ); + $sync_data['selected_order_status'] = get_option( 'hubwoo_ecomm_order_ocs_status', array_keys( wc_get_order_statuses() ) ); + + //hpos changes + if ( Hubwoo::hubwoo_check_hpos_active() ) { + // HPOS is enabled. + $args = array( + 'limit' => $number_of_posts, // Query all orders + 'orderby' => 'date', + 'post_status' => $sync_data['selected_order_status'], + 'order' => 'DESC', + 'return' => 'ids', + 'meta_key' => 'hubwoo_ecomm_deal_created', // The postmeta key field + 'meta_compare' => 'NOT EXISTS', // The comparison argument + 'post_parent' => 0, + ); + } else { + // CPT-based orders are in use. + $args = array( + 'numberposts' => $number_of_posts, + 'post_type' => 'shop_order', + 'fields' => 'ids', + 'post_status' => $sync_data['selected_order_status'], + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_created', + 'compare' => 'NOT EXISTS', + ), + ), + ); + } + + if ( 'yes' == get_option( 'hubwoo_ecomm_order_date_allow', 'no' ) ) { + $args['date_query'] = array( + array( + 'after' => gmdate( 'd-m-Y', strtotime( $sync_data['since_date'] ) ), + 'before' => gmdate( 'd-m-Y', strtotime( $sync_data['upto_date'] . ' +1 day' ) ), + 'inclusive' => true, + ), + ); + } + + //hpos changes + if( Hubwoo::hubwoo_check_hpos_active() ) { + $old_orders = wc_get_orders( $args ); + } else { + $old_orders = get_posts( $args ); + } + + if ( $count ) { + + $orders_count = count( $old_orders ); + + return $orders_count; + + } else { + + return $old_orders; + } + } + + /** + * General setting tab fields. + * + * @return array woocommerce_admin_fields acceptable fields in array. + * @since 1.0.0 + */ + public static function hubwoo_ecomm_general_settings() { + + $settings = array(); + + $settings[] = array( + 'title' => __( 'Apply your settings for Deals and its stages', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_deals_settings_title', + 'type' => 'title', + 'class' => 'hubwoo-ecomm-settings-title', + ); + + $settings[] = array( + 'title' => __( 'Enable/Disable', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_deal_enable', + 'desc' => __( 'Allow to sync new deals', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'class' => 'hubwoo-ecomm-settings-checkbox hubwoo_real_time_changes', + 'default' => 'yes', + ); + + $settings[] = array( + 'title' => __( 'Days required to close a deal', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_closedate_days', + 'type' => 'number', + 'desc' => __( 'set the minimum number of days in which the pending/open deals can be closed/won', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'custom_attributes' => array( 'min' => '5' ), + 'default' => '5', + 'class' => 'hubwoo-ecomm-settings-text hubwoo_real_time_changes', + ); + + $settings[] = array( + 'title' => __( 'Winning Deal Stages', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_won_stages', + 'type' => 'multiselect', + 'class' => 'hubwoo-ecomm-settings-multiselect hubwoo_real_time_changes', + 'desc' => __( 'select the deal stages of ecommerce pipeline which are won according to your business needs. "Processing" and "Completed" are default winning stages for extension as well as HubSpot', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'options' => self::hubwoo_ecomm_get_stages(), + ); + + $settings[] = array( + 'title' => __( 'Enable/Disable', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_assoc_deal_cmpy_enable', + 'desc' => __( 'Allow to associate deal and company', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'class' => 'hubwoo-ecomm-settings-checkbox hubwoo_real_time_changes', + 'default' => 'yes', + ); + + $settings[] = array( + 'title' => __( 'Enable Multi Currency Sync', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_deal_multi_currency_enable', + 'desc' => __( 'Enable to sync currency if you are using multi currency on your site.', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'class' => 'hubwoo-ecomm-settings-checkbox hubwoo_real_time_changes', + ); + + $settings[] = array( + 'type' => 'sectionend', + 'id' => 'hubwoo_ecomm_deal_settings_end', + ); + + return apply_filters( 'hubwoo_ecomm_deals_settings', $settings ); + } + + + /** + * Updates the product whenever there is any change + * + * @since 1.0.0 + * @return array $settings ecomm ocs settings + */ + public static function hubwoo_ecomm_order_ocs_settings() { + + $settings = array(); + + $settings[] = array( + 'title' => __( 'Export your old orders as Deals on HubSpot', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_order_ocs_title', + 'type' => 'title', + 'class' => 'hubwoo-ecomm-settings-title', + ); + + $settings[] = array( + 'title' => __( 'Select order status', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_order_ocs_status', + 'type' => 'multiselect', + 'desc' => __( 'Select a order status from the dropdown and all orders for the selected status will be synced as deals', 'makewebbetter-hubspot-for-woocommerce' ), + 'options' => wc_get_order_statuses(), + 'desc_tip' => true, + 'class' => 'hubwoo-ecomm-settings-select', + ); + + $settings[] = array( + 'title' => __( 'Select a time period', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_order_date_allow', + 'desc' => __( ' Date range for orders', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'checkbox', + 'class' => 'hubwoo-ecomm-settings-checkbox hubwoo-ecomm-settings-select', + ); + + $settings[] = array( + 'title' => __( 'Orders from date', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_order_ocs_from_date', + 'type' => 'text', + 'placeholder' => 'dd-mm-yyyy', + 'default' => gmdate( 'd-m-Y' ), + 'desc' => __( 'From which date you want to sync the orders, select that date', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'class' => 'hubwoo-date-picker hubwoo-date-d-range hubwoo-ecomm-settings-select', + ); + + $settings[] = array( + 'title' => __( 'Orders up to date', 'makewebbetter-hubspot-for-woocommerce' ), + 'id' => 'hubwoo_ecomm_order_ocs_upto_date', + 'type' => 'text', + 'default' => gmdate( 'd-m-Y' ), + 'placeholder' => __( 'dd-mm-yyyy', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc' => __( 'Up to which date you want to sync the orders, select that date', 'makewebbetter-hubspot-for-woocommerce' ), + 'desc_tip' => true, + 'class' => 'hubwoo-date-picker hubwoo-date-d-range hubwoo-ecomm-settings-select', + ); + + $settings[] = array( + 'type' => 'sectionend', + 'id' => 'hubwoo_ecomm_order_ocs_end', + ); + + return apply_filters( 'hubwoo_ecomm_order_sync_settings', $settings ); + } + + /** + * Updates the product whenever there is any change + * + * @since 1.0.0 + * @return array $mapped_array mapped deal stage and order statuses. + */ + public static function hubwoo_ecomm_get_stages() { + + $mapped_array = array(); + $stages = get_option( 'hubwoo_fetched_deal_stages', '' ); + $deal_stage_id = 'stageId'; + + if ( 'yes' == get_option( 'hubwoo_ecomm_pipeline_created', 'no' ) ) { + $deal_stage_id = 'id'; + } + if ( ! empty( $stages ) ) { + $mapped_array = array_combine( array_column( $stages, $deal_stage_id ), array_column( $stages, 'label' ) ); + } + return $mapped_array; + } + + /** + * Updates the product whenever there is any change + * + * @since 1.0.0 + * @param bool $redirect redirect to contact page ( default = false). + */ + public static function hubwoo_schedule_sync_listener( $redirect = false ) { + + $hubwoodatasync = new HubwooDataSync(); + + $unique_users = $hubwoodatasync->hubwoo_get_all_unique_user( true ); + + update_option( 'hubwoo_total_ocs_need_sync', $unique_users ); + + $hubwoodatasync->hubwoo_start_schedule(); + + if ( $redirect ) { + wp_safe_redirect( admin_url( 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-sync-contacts' ) ); + } + } + + /** + * Download the log file of the plugin. + * + * @return void + */ + public function hubwoo_get_plugin_log() { + + if ( isset( $_GET['action'] ) && 'download-log' == $_GET['action'] ) { + $filename = WC_LOG_DIR . 'hubspot-for-woocommerce-logs.log'; + if ( is_readable( $filename ) && file_exists( $filename ) ) { + header( 'Content-type: text/plain' ); + header( 'Content-Disposition: attachment; filename="' . basename( $filename ) . '"' ); + readfile( $filename ); + exit(); + } + } elseif ( isset( $_GET['action'] ) && 'dismiss-hubwoo-notice' == $_GET['action'] ) { + update_option( 'hubwoo-cron-notice-dismiss', 'yes' ); + wp_safe_redirect( admin_url( 'admin.php' ) . '?page=hubwoo' ); + } + } + + /** + * Re-sync Orders as deals. + * + * @since 1.0.0 + */ + public function hubwoo_deals_sync_check() { + + if ( 'no' == get_option( 'hubwoo_ecomm_setup_completed', 'no' ) || 'yes' === get_option( 'hubwoo_connection_issue', 'no' ) ) { + return; + } + + //hpos changes + if ( Hubwoo::hubwoo_check_hpos_active() ) { + // HPOS is enabled. + $args = array( + 'limit' => 3, // Query all orders + 'orderby' => 'date', + 'post_status' => array_keys( wc_get_order_statuses() ), + 'order' => 'DESC', + 'return' => 'ids', + 'meta_key' => 'hubwoo_ecomm_deal_created', // The postmeta key field + 'meta_compare' => 'NOT EXISTS', // The comparison argument + 'post_parent' => 0, + ); + } else { + // CPT-based orders are in use. + $query = new WP_Query(); + + $args = array( + 'post_type' => 'shop_order', + 'posts_per_page' => 3, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_created', + 'compare' => 'NOT EXISTS', + ), + ), + ); + } + + $activated_time = get_option( 'hubwoo_plugin_activated_time', '' ); + if ( ! empty( $activated_time ) ) { + $args['date_query'] = array( + array( + 'after' => gmdate( 'd-m-Y', strtotime( '-1 day', $activated_time ) ), + 'inclusive' => true, + ), + ); + } + //hpos changes + if( Hubwoo::hubwoo_check_hpos_active() ) { + $failed_orders = wc_get_orders( $args ); + } else { + $failed_orders = $query->query( $args ); + } + + if ( ! empty( $failed_orders ) ) { + foreach ( $failed_orders as $order_id ) { + HubwooObjectProperties::get_instance()->hubwoo_ecomm_deals_sync( $order_id ); + } + } + } + + /** + * Re-sync Orders as deals. + * + * @since 1.0.0 + */ + public function hubwoo_products_sync_check() { + + if ( 'yes' != get_option( 'hubwoo_greeting_displayed_setup', 'no' ) || 'yes' == get_option( 'hubwoo_product_scope_needed', 'no' ) ) { + return; + } + + $product_data = Hubwoo::hubwoo_get_product_data( 10 ); + + if ( ! empty( $product_data ) && is_array( $product_data ) ) { + foreach ( $product_data as $pro_id => $value ) { + + $filtergps = array(); + $product_data = array( + 'properties' => $value['properties'], + ); + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $product = wc_get_product( $pro_id ); + + $filtergps = array( + 'filterGroups' => array( + array( + 'filters' => array( + array( + 'value' => $pro_id, + 'propertyName' => 'store_product_id', + 'operator' => 'EQ', + ), + ), + ), + ), + ); + + if( !empty($product->get_sku()) ) { + $filtergps['filterGroups'][] = array( + 'filters' => array( + array( + 'value' => $product->get_sku(), + 'propertyName' => 'hs_sku', + 'operator' => 'EQ', + ), + ), + ); + } + + $response = HubWooConnectionMananager::get_instance()->search_object_record( 'products', $filtergps ); + + if ( 200 == $response['status_code'] ) { + $responce_body = json_decode( $response['body'] ); + $result = $responce_body->results; + if ( ! empty( $result ) ) { + foreach ( $result as $key => $value ) { + update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $value->id ); + } + } + } + + $pro_hs_id = get_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', true ); + + if ( ! empty( $pro_hs_id ) ) { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'products', $pro_hs_id, $product_data ); + if ( 200 == $response['status_code'] ) { + delete_post_meta( $pro_id, 'hubwoo_product_synced' ); + } + } else { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'products', $product_data ); + if ( 201 == $response['status_code'] ) { + $response_body = json_decode( $response['body'] ); + update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $response_body->id ); + delete_post_meta( $pro_id, 'hubwoo_product_synced' ); + } + } + do_action( 'hubwoo_update_product_property', $pro_id ); + } + } + } + } + + /** + * Contact sync in background. + * + * @since 1.0.4 + */ + public function hubwoo_contacts_sync_background() { + + $user_data = array(); + $hubwoo_datasync = new HubwooDataSync(); + $users_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user(); + if ( ! count( $users_need_syncing ) ) { + $users_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user( false, 'guestOrder' ); + $user_data = HubwooDataSync::get_guest_sync_data( $users_need_syncing ); + $mark['type'] = 'order'; + $mark['ids'] = $users_need_syncing; + } else { + $user_data = HubwooDataSync::get_sync_data( $users_need_syncing ); + $mark['type'] = 'user'; + $mark['ids'] = $users_need_syncing; + } + + if ( ! empty( $user_data ) ) { + $response = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $user_data, $mark ); + if ( ( count( $user_data ) ) && 400 == $response['status_code'] ) { + Hubwoo::hubwoo_handle_contact_sync( $response, $user_data, $mark ); + } + } else { + Hubwoo::hubwoo_stop_sync( 'stop-contact' ); + } + } + + /** + * Re-sync Contacts to fetch Vid. + * + * @since 1.0.0 + */ + public function hubwoo_update_contacts_vid() { + + $contact_data = array(); + + $mark = array(); + + $args['meta_query'] = array( + + array( + 'key' => 'hubwoo_user_vid', + 'compare' => 'NOT EXISTS', + ), + ); + $args['role__in'] = get_option( 'hubwoo-selected-user-roles', array() ); + $args['number'] = 20; + $args['fields'] = 'ID'; + + $users = get_users( $args ); + + if ( ! empty( $users ) ) { + $mark['type'] = 'user'; + $mark['ids'] = $users; + + foreach ( $users as $user_id ) { + $user_data = array(); + $user = get_user_by( 'id', $user_id ); + $user_data['email'] = $user->data->user_email; + $user_data['customer_group'] = ! empty( $user->data->roles ) ? HubwooGuestOrdersManager::hubwoo_format_array( $user->data->roles ) : 'customer'; + $user_data['firstname'] = get_user_meta( $user_id, 'first_name', true ); + $user_data['lastname'] = get_user_meta( $user_id, 'last_name', true ); + $contacts[] = $user_data; + } + } else { + + //hpos changes + if ( Hubwoo::hubwoo_check_hpos_active() ) { + // HPOS is enabled. + $query = new WC_Order_Query(array( + 'limit' => 20, // Query all orders + 'orderby' => 'date', + 'post_status' => array_keys( wc_get_order_statuses() ), + 'order' => 'DESC', + 'return' => 'ids', + 'meta_key' => 'hubwoo_user_vid', // The postmeta key field + 'meta_compare' => 'NOT EXISTS', // The comparison argument + 'post_parent' => 0, + 'customer_id' => 0, + )); + $customer_orders = $query->get_orders(); + } else { + // CPT-based orders are in use. + $query = new WP_Query(); + + $customer_orders = $query->query( + array( + 'post_type' => 'shop_order', + 'posts_per_page' => 20, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + 'relation' => 'AND', + array( + 'key' => '_customer_user', + 'value' => 0, + ), + array( + 'key' => 'hubwoo_user_vid', + 'compare' => 'NOT EXISTS', + ), + ), + ) + ); + } + + if ( ! empty( $customer_orders ) ) { + + $mark['type'] = 'order'; + $mark['ids'] = $customer_orders; + + foreach ( $customer_orders as $order_id ) { + $order = wc_get_order($order_id); + $user_data = array(); + $user_data['email'] = $order->get_billing_email(); + $user_data['customer_group'] = 'guest'; + $user_data['firstname'] = $order->get_billing_first_name(); + $user_data['lastname'] = $order->get_billing_last_name(); + $contacts[] = $user_data; + } + } + } + + if ( ! empty( $contacts ) ) { + + $prepared_data = array(); + + array_walk( + $contacts, + function( $user_data ) use ( &$prepared_data ) { + if ( ! empty( $user_data ) ) { + $temp_data = array(); + + if ( isset( $user_data['email'] ) ) { + $temp_data['email'] = $user_data['email']; + unset( $user_data['email'] ); + foreach ( $user_data as $name => $value ) { + if ( ! empty( $value ) ) { + $temp_data['properties'][] = array( + 'property' => $name, + 'value' => $value, + ); + } + } + $prepared_data[] = $temp_data; + } + } + } + ); + + HubWooConnectionMananager::get_instance()->create_or_update_contacts( $prepared_data, $mark ); + } else { + delete_option( 'hubwoo_contact_vid_update' ); + as_unschedule_action( 'hubwoo_update_contacts_vid' ); + } + } + + /** + * Source tracking from Checkout form. + * + * @since 1.0.4 + */ + public function hubwoo_submit_checkout_form() { + + if ( ! empty( $_REQUEST['woocommerce-process-checkout-nonce'] ) ) { + + $request = sanitize_text_field( wp_unslash( $_REQUEST['woocommerce-process-checkout-nonce'] ) ); + $hub_cookie = isset( $_COOKIE['hubspotutk'] ) ? sanitize_text_field( wp_unslash( $_COOKIE['hubspotutk'] ) ) : ''; + $nonce_value = wc_get_var( $request ); + + if ( ! empty( $nonce_value ) && wp_verify_nonce( $nonce_value, 'woocommerce-process_checkout' ) ) { + $data = array(); + $form_id = get_option( 'hubwoo_checkout_form_id', '' ); + $portal_id = get_option( 'hubwoo_pro_hubspot_id', '' ); + $form_data = ! empty( $_POST ) ? map_deep( wp_unslash( $_POST ), 'sanitize_text_field' ) : ''; + $required_data = array( + 'billing_email' => 'email', + 'billing_first_name' => 'firstname', + 'billing_last_name' => 'lastname', + ); + + foreach ( $required_data as $key => $name ) { + if ( array_key_exists( $key, $form_data ) ) { + $value = $form_data[ $key ]; + if ( empty( $value ) ) { + continue; + } + $data[] = array( + 'name' => $name, + 'value' => $value, + ); + } + } + if ( ! empty( $data ) ) { + + $data = array( 'fields' => $data ); + $context = self::hubwoo_page_source( $hub_cookie ); + + if ( ! empty( $context['context'] ) ) { + $data = array_merge( $data, $context ); + } + } + $response = HubWooConnectionMananager::get_instance()->submit_form_data( $data, $portal_id, $form_id ); + if ( 200 != $response['status_code'] ) { + $all_errors = json_decode( $response['body'] ); + if ( ! empty( $all_errors ) ) { + $get_errors = $all_errors->errors; + } + if ( ! empty( $get_errors ) ) { + $get_error_type = $get_errors[0]->errorType; + } + if ( ! empty( $get_error_type ) && 'INVALID_HUTK' === $get_error_type ) { + $context_data = self::hubwoo_page_source(); + if ( ! empty( $context_data['context'] ) ) { + $data = array_merge( $data, $context_data ); + HubWooConnectionMananager::get_instance()->submit_form_data( $data, $portal_id, $form_id ); + } + } + } + } + } + } + + /** + * Fetching current page context. + * + * @since 1.0.4 + * @param string $hub_cookie hubspot cookies. + * @return array $context. + */ + public static function hubwoo_page_source( $hub_cookie = '' ) { + + $referrer = wp_get_referer(); + $obj_id = 0; + $ip = isset( $_SERVER['REMOTE_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) ) : ''; + + if ( $referrer ) { + $obj_id = url_to_postid( $referrer ); + } + + $current_url = get_permalink( $obj_id ); + $page_name = get_the_title( $obj_id ); + $context = array(); + + if ( ! empty( $current_url ) ) { + $context['pageUri'] = $current_url; + } + if ( ! empty( $page_name ) ) { + $context['pageName'] = $page_name; + } + if ( ! empty( $hub_cookie ) ) { + $context['hutk'] = $hub_cookie; + } + if ( ! empty( $ip ) ) { + if ( filter_var( $ip, FILTER_VALIDATE_IP ) ) { + $context['ipAddress'] = $ip; + } + } + $context = array( + 'context' => $context, + ); + + return $context; + } + + /** + * Fetching property value. + * + * @since 1.2.6 + */ + public function hubwoo_check_property_value() { + + if ( 1 == get_option( 'hubwoo_pro_lists_setup_completed', 0 ) ) { + + $property_updated = get_option( 'hubwoo_newsletter_property_update' ); + $abandoned_property_updated = get_option( 'hubwoo_abandoned_property_update' ); + + if ( empty( $property_updated ) ) { + + $flag = true; + $object_type = 'contacts'; + $property_name = 'newsletter_subscription'; + $property_changed = 'no'; + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + $response = HubWooConnectionMananager::get_instance()->hubwoo_read_object_property( $object_type, $property_name ); + + if ( 200 == $response['status_code'] ) { + $results = json_decode( $response['body'] ); + + if ( isset( $results->options ) ) { + $options = $results->options; + + if ( 'no' == $options[0]->value || 'yes' == $options[0]->value ) { + $property_changed = 'no'; + } else { + $property_changed = 'yes'; + } + } + } + } + + update_option( 'hubwoo_newsletter_property_update', $property_changed ); + } + + if ( empty( $abandoned_property_updated ) ) { + + $flag = true; + $object_type = 'contacts'; + $property_name = 'current_abandoned_cart'; + $abandoned_property_changed = 'no'; + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + $response = HubWooConnectionMananager::get_instance()->hubwoo_read_object_property( $object_type, $property_name ); + + if ( 200 == $response['status_code'] ) { + $results = json_decode( $response['body'] ); + + if ( isset( $results->options ) ) { + $options = $results->options; + + if ( 'no' == $options[0]->value || 'yes' == $options[0]->value ) { + $abandoned_property_changed = 'no'; + } else { + $abandoned_property_changed = 'yes'; + } + } + } + } + + update_option( 'hubwoo_abandoned_property_update', $abandoned_property_changed ); + } + } + } + + /** + * Check and create new properties. + * + * @since 1.4.0 + */ + public function hubwoo_check_update_changes() { + if ( 1 == get_option( 'hubwoo_pro_lists_setup_completed', 0 ) ) { + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + if ( 'yes' != get_option( 'hubwoo_product_property_created', 'no' ) && 'yes' != get_option( 'hubwoo_product_scope_needed', 'no' ) ) { + $product_properties = Hubwoo::hubwoo_get_product_properties(); + + $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $product_properties, 'products' ); + if ( 201 == $response['status_code'] || 207 == $response['status_code'] ) { + update_option( 'hubwoo_product_property_created', 'yes' ); + } else if ( 403 == $response['status_code'] ) { + update_option( 'hubwoo_product_scope_needed', 'yes' ); + update_option( 'hubwoo_ecomm_setup_completed', 'yes' ); + } + } + + if ( 'yes' != get_option( 'hubwoo_deal_property_created', 'no' ) ) { + $deal_properties = Hubwoo::hubwoo_get_deal_properties(); + + $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $deal_properties, 'deals' ); + if ( 201 == $response['status_code'] || 207 == $response['status_code'] ) { + update_option( 'hubwoo_deal_property_created', 'yes' ); + } + } + + if ( 'yes' != get_option( 'hubwoo_contact_new_property_created', 'no' ) ) { + $group_properties[] = array( + 'name' => 'customer_source_store', + 'label' => __( 'Customer Source Store', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + 'groupName' => 'customer_group', + ); + + $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $group_properties, 'contacts' ); + if ( 201 == $response['status_code'] || 207 == $response['status_code'] ) { + update_option( 'hubwoo_contact_new_property_created', 'yes' ); + } + } + + if ( as_next_scheduled_action( 'hubwoo_deal_update_schedule' ) ) { + as_unschedule_action( 'hubwoo_deal_update_schedule' ); + } + } + } + } + + /** + * Update a ecomm deal. + * + * @since 1.0.0 + * @param int $order_id order id to be updated. + */ + public function hubwoo_ecomm_deal_update_order( $order_id ) { + + if ( ! empty( $order_id ) ) { + + $order = wc_get_order( $order_id ); + + $upsert_meta = $order->get_meta('hubwoo_ecomm_deal_upsert', 'no'); + + if( $upsert_meta == 'yes'){ + return; + } + + $post_type = get_post_type( $order_id ); + + if ( 'shop_subscription' == $post_type ) { + return; + } + + if ('yes' == get_option('woocommerce_custom_orders_table_data_sync_enabled', 'no') && 'yes' == get_option('woocommerce_custom_orders_table_enabled', 'no')) { + return; + } + + $order->update_meta_data('hubwoo_ecomm_deal_upsert', 'yes'); + $order->save(); + + } + } + + /** + * Initiate deactivation screen. + */ + public static function init_deactivation() { + $params = array(); + try { + $result = wc_get_template( + '/templates/deactivation-screen.php', + $params, + '', + plugin_dir_path( __FILE__ ) + ); + + } catch ( \Throwable $th ) { + echo( esc_html( $th->getMessage() ) ); + die; + } + } + + /** + * Check and delete logs. + */ + public function hubwoo_check_logs() { + global $wpdb; + $table_name = $wpdb->prefix . 'hubwoo_log'; + $delete_timestamp = time() - ( 30 * 24 * 60 * 60 ); + + $wpdb->get_results( $wpdb->prepare( 'DELETE FROM %1s WHERE time < %d', $table_name, $delete_timestamp ) ); + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin-global.css b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin-global.css new file mode 100644 index 00000000..b4768570 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin-global.css @@ -0,0 +1,59 @@ +/*//deactivation screen*/ + +.mwb-g-modal__cover { + background-color: rgba(0, 0, 0, 0.2); + bottom: 0; + display: none; + left: 0; + position: fixed; + right: 0; + top: 0; +} + +.mwb-g-modal__close { + cursor: pointer; + font-size: 24px; + font-weight: 600; + position: absolute; + right: 7px; + top: 3px; + transform: rotate(45deg); +} + +.mwb-g-modal__message { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + color: #053500; + left: -200%; + max-width: 600px; + min-height: 50px; + padding: 15px 20px; + position: fixed; + text-align: center; + top: 50%; + transform: translate(-50%, -50%); + transition: centre 1.2s linear; + width: 80%; +} + +.show-g_modal_cover { + display: block; +} + +.show-g_modal_message { + left: 50%; +} + +.mwb-g-modal__content__header { + margin: auto; +} + +/* Additional fixes. */ +.mwb-g-modal__content { + margin-bottom: -80px; +} + +.mwb-g-modal iframe { + height: 536px !important; +} \ No newline at end of file diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin.css b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin.css new file mode 100644 index 00000000..636537e8 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/hubwoo-admin.css @@ -0,0 +1,3803 @@ +@import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"); +@import url('https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,800,900&display=swap'); + +/*====================================== += Log Table = +======================================*/ + +table.dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; +} + +table.dataTable thead th, table.dataTable tfoot th { + font-weight: bold; +} + +table.dataTable thead th, table.dataTable thead td { + padding: 10px 18px; + border-bottom: 1px solid #111; +} + +table.dataTable thead th:active, table.dataTable thead td:active { + outline: none; +} + +table.dataTable tfoot th, table.dataTable tfoot td { + padding: 10px 18px 6px 18px; + border-top: 1px solid #111; +} + +table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { + cursor: pointer; + *cursor: hand; + background-repeat: no-repeat; + background-position: center right; +} + +table.dataTable thead .sorting { + background-image: url("../images/sort_both.png"); +} + +table.dataTable thead .sorting_asc { + background-image: url("../images/sort_asc.png"); +} + +table.dataTable thead .sorting_desc { + background-image: url("../images/sort_desc.png"); +} + +table.dataTable thead .sorting_asc_disabled { + background-image: url("../images/sort_asc_disabled.png"); +} + +table.dataTable thead .sorting_desc_disabled { + background-image: url("../images/sort_desc_disabled.png"); +} + +table.dataTable tbody tr { + background-color: #ffffff; +} + +table.dataTable tbody tr.selected { + background-color: #B0BED9; +} + +table.dataTable tbody th, table.dataTable tbody td { + padding: 8px 10px; +} + +table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { + border-top: 1px solid #ddd; +} + +table.dataTable.row-border tbody tr:first-child th, table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, table.dataTable.display tbody tr:first-child td { + border-top: none; +} + +table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; +} + +table.dataTable.cell-border tbody tr th:first-child, table.dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #ddd; +} + +table.dataTable.cell-border tbody tr:first-child th, table.dataTable.cell-border tbody tr:first-child td { + border-top: none; +} + +table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { + background-color: #f9f9f9; +} + +table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { + background-color: #acbad4; +} + +table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { + background-color: #f6f6f6; +} + +table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { + background-color: #aab7d1; +} + +table.dataTable.order-column tbody tr > .sorting_1, table.dataTable.order-column tbody tr > .sorting_2, table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, table.dataTable.display tbody tr > .sorting_2, table.dataTable.display tbody tr > .sorting_3 { + background-color: #fafafa; +} + +table.dataTable.order-column tbody tr.selected > .sorting_1, table.dataTable.order-column tbody tr.selected > .sorting_2, table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, table.dataTable.display tbody tr.selected > .sorting_2, table.dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad5; +} + +table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; +} + +table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; +} + +table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; +} + +table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b4cd; +} + +table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a8b5cf; +} + +table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b7d1; +} + +table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #fafafa; +} + +table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fcfcfc; +} + +table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fefefe; +} + +table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad5; +} + +table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #aebcd6; +} + +table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; +} + +table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { + background-color: #eaeaea; +} + +table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { + background-color: #ececec; +} + +table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { + background-color: #efefef; +} + +table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + background-color: #a2aec7; +} + +table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + background-color: #a3b0c9; +} + +table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + background-color: #a5b2cb; +} + +table.dataTable.no-footer { + border-bottom: 1px solid #111; +} + +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} + +table.dataTable.compact thead th, table.dataTable.compact thead td { + padding: 4px 17px 4px 4px; +} + +table.dataTable.compact tfoot th, table.dataTable.compact tfoot td { + padding: 4px; +} + +table.dataTable.compact tbody th, table.dataTable.compact tbody td { + padding: 4px; +} + +table.dataTable th.dt-left, table.dataTable td.dt-left { + text-align: left; +} + +table.dataTable th.dt-center, table.dataTable td.dt-center, table.dataTable td.dataTables_empty { + text-align: center; +} + +table.dataTable th.dt-right, table.dataTable td.dt-right { + text-align: right; +} + +table.dataTable th.dt-justify, table.dataTable td.dt-justify { + text-align: justify; +} + +table.dataTable th.dt-nowrap, table.dataTable td.dt-nowrap { + white-space: nowrap; +} + +table.dataTable thead th.dt-head-left, table.dataTable thead td.dt-head-left, table.dataTable tfoot th.dt-head-left, table.dataTable tfoot td.dt-head-left { + text-align: left; +} + +table.dataTable thead th.dt-head-center, table.dataTable thead td.dt-head-center, table.dataTable tfoot th.dt-head-center, table.dataTable tfoot td.dt-head-center { + text-align: center; +} + +table.dataTable thead th.dt-head-right, table.dataTable thead td.dt-head-right, table.dataTable tfoot th.dt-head-right, table.dataTable tfoot td.dt-head-right { + text-align: right; +} + +table.dataTable thead th.dt-head-justify, table.dataTable thead td.dt-head-justify, table.dataTable tfoot th.dt-head-justify, table.dataTable tfoot td.dt-head-justify { + text-align: justify; +} + +table.dataTable thead th.dt-head-nowrap, table.dataTable thead td.dt-head-nowrap, table.dataTable tfoot th.dt-head-nowrap, table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} + +table.dataTable tbody th.dt-body-left, table.dataTable tbody td.dt-body-left { + text-align: left; +} + +table.dataTable tbody th.dt-body-center, table.dataTable tbody td.dt-body-center { + text-align: center; +} + +table.dataTable tbody th.dt-body-right, table.dataTable tbody td.dt-body-right { + text-align: right; +} + +table.dataTable tbody th.dt-body-justify, table.dataTable tbody td.dt-body-justify { + text-align: justify; +} + +table.dataTable tbody th.dt-body-nowrap, table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +table.dataTable, table.dataTable th, table.dataTable td { + box-sizing: content-box; +} + +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; +} + +.dataTables_wrapper tr .dtr-control { + position: relative; +} + +.dataTables_wrapper tr .dtr-control::after { + background: #ff7a59; + border-radius: 50%; + color: #ffffff; + content: '+'; + cursor: pointer; + font-family: "NunitoSans-Bold"; + font-size: 16px; + height: 16px; + line-height: 15px; + position: absolute; + text-align: center; + top: 50%; + transform: translateY(-50%); + width: 16px; +} + +.dataTables_wrapper tr.parent .dtr-control:after { + background: #ff7a59; + content: '-'; +} + +.dataTables_wrapper .dataTables_length { + float: left; +} + +.dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; + margin: 10px; +} + +.dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; +} + +.dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; +} + +.dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; +} + +.dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; + border-radius: 2px; +} + +.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: #333 !important; + border: 1px solid #979797; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc)); + background: -webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%); + background: -moz-linear-gradient(top, #fff 0%, #dcdcdc 100%); + background: -ms-linear-gradient(top, #fff 0%, #dcdcdc 100%); + background: -o-linear-gradient(top, #fff 0%, #dcdcdc 100%); + background: linear-gradient(to bottom, #fff 0%, #dcdcdc 100%); +} + +.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; +} + +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #111; + background-color: #585858; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); + background: -webkit-linear-gradient(top, #585858 0%, #111 100%); + background: -moz-linear-gradient(top, #585858 0%, #111 100%); + background: -ms-linear-gradient(top, #585858 0%, #111 100%); + background: -o-linear-gradient(top, #585858 0%, #111 100%); + background: linear-gradient(to bottom, #585858 0%, #111 100%); +} + +.dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #2b2b2b; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); + background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); + box-shadow: inset 0 0 3px #111; +} + +.dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; +} + +.dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); +} + +.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter, .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper .dataTables_paginate { + color: #333; +} + +.dataTables_wrapper .dataTables_scroll { + clear: both; +} + +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; +} + +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td { + vertical-align: middle; +} + +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; +} + +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #111; +} + +.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable, .dataTables_wrapper.no-footer div.dataTables_scrollBody > table { + border-bottom: none; +} + +.dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +.hubwoo-content-wrap { + background: #ffffff; + border-radius: 8px; + margin-bottom: 10px; + padding: 15px; +} + +.hubwoo-table td.child { + padding: 20px !important; + text-align: left; + word-break: break-word; +} + +#hubwoo-woo-crm-reauth, +#hubwoo-woo-crm-disconnect { + margin-top: 10px; +} + +.hubwoo-btn__loader { + font-family: dashicons; + padding-left: 35px !important; + position: relative; +} + +.hubwoo-btn__loader:before { + animation: loading 1s infinite linear; + content: "\f113"; + font-size: 20px; + left: 10px; + position: absolute; + top: 5px; +} + +.hubwoo-logs__header .hubwoo-logs__settings-list .hubwoo-logs__settings-list-item .hubwoo-logs__setting-link { + color: #2196f3; + font-size: 12px; + display: block; + background: #f4f4f4; + padding: 4px 8px; + border-radius: 8px; + cursor: pointer; +} + +.hubwoo-logs__header .hubwoo-logs__settings-list .hubwoo-logs__settings-list-item { + display: inline-block; + vertical-align: middle; + margin-right: 15px; +} + +.hubwoo-logs__header .hubwoo-logs__settings-list { + flex: 0 0 60%; + max-width: 60%; + text-align: right; +} + +.hubwoo-logs__header .hubwoo-logs__heading-wrap { + flex: 0 0 40%; + max-width: 40%; +} + +.hubwoo-logs__header { + display: flex; + flex-wrap: wrap; +} + +.hubwoo-table__wrapper .bottom:last-child { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + align-items: center; + padding: 10px 0; +} + +.hubwoo-table__wrapper .bottom .dataTables_info { + padding: 0 !important; + font-size: 14px; +} + +.hubwoo-table__wrapper .bottom .dataTables_info, .hubwoo-table__wrapper .bottom .dataTables_length, .hubwoo-table__wrapper .bottom .dataTables_paginate { + margin-right: 25px; +} + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } + .hubwoo-about__list-item .hubwoo-about__list-item-text .hubwoo-sync-form__field label { + width: 100% !important; + margin-bottom: 10px; + } + .hubwoo-feeds__form-wrap.hubwoo-fields-form-row .hubwoo-form-wrapper .hubwoo-fields-form-section-form label { + width: 100% !important; + } + #hubwoo-woo-crm-reauth, + #hubwoo-woo-crm-disconnect { + min-width: 140px; + margin-top: 10px; + } + .hubwoo-feeds__form-wrap.hubwoo-fields-form-row .hubwoo-form-wrapper .hubwoo-fields-form-section-form .custom-value-select { + margin-left: 0 !important; + margin-top: 25px; + } + .hubwoo-feeds__content .hubwoo-form-wrapper label { + width: 100% !important; + margin-bottom: 10px; + } +} + +@media screen and (max-width: 640px) { + .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; + } +} + +table.DTFC_Cloned thead, table.DTFC_Cloned tfoot { + background-color: white; +} + +div.DTFC_Blocker { + background-color: white; +} + +div.DTFC_LeftWrapper table.dataTable, div.DTFC_RightWrapper table.dataTable { + margin-bottom: 0; + z-index: 2; +} + +div.DTFC_LeftWrapper table.dataTable.no-footer, div.DTFC_RightWrapper table.dataTable.no-footer { + border-bottom: none; +} + +table.dataTable.display tbody tr.DTFC_NoData { + background-color: transparent; +} + +/*==================================== += LOGS SECTION = +====================================*/ +.hubwoo-table__wrapper { + border-radius: 3px; + border: 1px solid #c7c7c7; + margin-top: 15px; +} + +.hubwoo-table__wrapper thead th { + font-size: 16px; + font-weight: 400; + letter-spacing: 0.25px; + line-height: 26px; +} + +.hubwoo-table { + text-align: center; +} + +table.hubwoo-table, +.hubwoo-table th, +.hubwoo-table td { + border-bottom: 1px solid #c7c7c7 !important; + border-collapse: collapse; +} + +tr:last-child { + border-bottom: 0; +} + +.hubwoo-table-btn { + background-color: transparent; + border: none; + cursor: pointer; + display: inline-block; + margin: 0; + max-width: 25px; + vertical-align: middle; + width: 100%; +} + +.hubwoo-table-btn:focus { + outline: none; +} + +.hubwoo-logs__header { + display: flex; + flex-wrap: wrap; +} + +.hubwoo-logs__header .hubwoo-logs__heading-wrap { + flex: 0 0 40%; + max-width: 40%; +} + +.hubwoo-logs__header .hubwoo-logs__settings-list { + flex: 0 0 60%; + max-width: 60%; + text-align: right; +} + +@media (max-width: 768px) { + .hubwoo-logs__header .hubwoo-logs__settings-list { + flex: 0 0 100%; + max-width: 100%; + margin: 10px 0 5px; + text-align: left; + } +} + +.hubwoo-logs__header .hubwoo-logs__settings-list .hubwoo-logs__settings-list-item { + display: inline-block; + vertical-align: middle; + margin-right: 15px; +} + +.hubwoo-logs__header .hubwoo-logs__settings-list .hubwoo-logs__settings-list-item .hubwoo-logs__setting-link { + color: #2196f3; + font-size: 12px; + display: block; + background: #f4f4f4; + padding: 4px 8px; + border-radius: 8px; +} + +.hubwoo-logs__header .hubwoo-logs__settings-list .hubwoo-logs__settings-list-item:last-child { + margin-right: 0; +} + +.hubwoo-logs__header .hubwoo-logs__settings-list .hubwoo-logs__settings-list-item .hubwoo-logs__setting-img { + display: block; + padding: 8px; + background-color: #f4f4f4; + border-radius: 8px; +} + +/*===== End of LOGS SECTION ======*/ + +/*====================================== += Plugin Wrapper = +======================================*/ +.hub-woo-main-wrapper * { + box-sizing: border-box; +} +.hub-woo-main-wrapper { + box-sizing: border-box; + box-shadow: 0 0 100px 10px rgba(0,0,0,.05); + font-family: 'Nunito Sans', sans-serif; + margin: 20px auto 0; + width: 98%; +} +.hubwoo_pop_up_wrap { + background-color: rgba(0, 0, 0, 0.55); + bottom: 0; + height: 100%; + left: 0; + position: fixed; + right: 0; + top: 0; + width: 100%; + z-index: 9999; + padding: 15px; + display: flex; + align-items: center; + justify-content: center; +} +.hubwoo_pop_up_wrap .pop_up_sub_wrap { + background-color: #fff; + border-radius: 3px; + box-shadow: 0 6px 5px rgba(0, 0, 0, 0.1); + box-sizing: border-box; + left: 0; + margin: 0 auto; + max-width: 900px; + right: 0; + display: flex; + flex-wrap: wrap; + align-items: center; + overflow: hidden; +} + +.hubwoo_pop_up_wrap .pop_up_sub_wrap .button_wrap { + margin-top: 35px; + text-align: center; +} +.hubwoo_pop_up_wrap .pop_up_sub_wrap .button_wrap a { + border-radius: 3px; + box-sizing: border-box; + color: #fff; + display: block; + font-size: 17px; + padding: 10px; + text-decoration: none; + width: 80%; + margin: 0 auto 15px; +} +.hubwoo_pop_up_wrap .pop_up_sub_wrap .button_wrap a:nth-child(1) { + background-color: #fff; + color: #333333; +} +.hubwoo_pop_up_wrap .pop_up_sub_wrap .button_wrap a:nth-child(2) { + text-decoration: underline; + color: #ffffff; + font-weight: 600; +} +.hubwoo_pop_up_wrap--image--inner-content { + text-align: center; + font-size: 20px; + line-height: 1.3; +} +#hub-lists-form .hubwoo-fields-created .hubwoo_groups span { + padding-left: 40px; +} +#hub-lists-form .hubwoo-fields-created { + margin-bottom: 20px; +} +.hubwoo_pop_up_wrap--content { + max-width: 40%; + flex: 0 0 40%; +} +.hubwoo_pop_up_wrap--image { + max-width: 60%; + flex: 0 0 60%; +} +.hubwoo_pop_up_wrap--image img { + max-width: 100%; + width: auto; +} +.hubwoo_pop_up_wrap--inner-content { + padding: 80px 20px; + background-color: #ff7a59; + color: #ffffff; +} +.hubwoo_pop_up_wrap--image--inner-content{ + padding: 20px; +} +.hubwoo_pop_up_wrap--inner-content h2 { + text-align: center !important; + font-weight: bold; + font-size: 30px; + color: #ffffff !important; + line-height: 1.3 !important; +} +a { + outline: none !important; + box-shadow: none !important; +} +.mwb-heb-wlcm, .mwb-heb-wlcm *, .mwb-heb-setup-wrapper, .mwb-heb-setup-wrapper *, .mwb-heb-dash-wrapper, .mwb-heb-dash-wrapper * { + box-sizing: border-box; +} +.hub-woo-main-wrapper h1, +.hub-woo-main-wrapper h2, +.hub-woo-main-wrapper h3, +.hub-woo-main-wrapper h4, +.hub-woo-main-wrapper h5, +.hub-woo-main-wrapper h6{ + color: #2d3e50; +} +.hubwoo-inner-container { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.hubwoo-static-menu { + background: #2D3E50; + border-left: 1px solid #566b7c; + display: inline-block; + padding: 20px 15px; +} +.mwb-heb-welcome { + color: #181a25; + font-family: 'Nunito Sans', sans-serif; + padding: 0px 15px 70px; + width: 100%; + z-index: 1; +} +/*===== End of Plugin Wrapper ======*/ + +/*====================================== += header-section = +======================================*/ + +.hubwoo-go-pro-banner { + background: #253342; + border-bottom: 10px solid #ff7a59; +} +.hubwoo-name-wrapper { + align-items: center; + display: flex; + flex: 0 0 50%; + padding: 20px 15px; +} +.hubwoo-name-wrapper img { + margin-right: 15px; + max-width: 70px; +} +.hubwoo-static-menu { + flex: 0 0 50%; + padding: 26px 15px; +} +.hubwoo-static-menu:after{ + display: block; + content: ""; + clear: both; +} + +.hubwoo-static-menu li { + display: inline-block; + margin: 0; +} +.hubwoo-static-menu ul{ + float: right; + margin: 0; +} +.hubwoo-name-wrapper p { + color: #fff; + font-size: 18px; + margin: 0 !important; + font-weight: bold; + letter-spacing: 1px; +} +.hubwoo-static-menu li a { + font-size: 14px; + color: #a7b8c6; + margin-bottom: 5px; + margin-left: 15px; + text-decoration: none; +} +.hubwoo-static-menu li:first-child a { + margin-left: 0; +} +.hubwoo-static-menu li a:focus { + border: none; + box-shadow: none; + outline: 0; +} +.hubwoo-overview-go-pro, .hubwoo-next-connect-tab, .hubwoo__btn, +.hubwoo-general-settings .submit input[type="submit"], +#hubwoo-pro-email-logs, +.hubwoo-ocs-template .submit input[type="submit"], +#hubwoo_pro_upgrade, +#hubwoo_pro_up_date, .hubwoo-add-action, +.hubwoo-advanced-settings .submit input[type="submit"], +#hubwoo-rfm-form .submit input[type="submit"], +.hubwoo-field-text-col .hubwoo-create-single-workflow { + background: #ff7a59; + border-radius: 3px; + color: #ffffff; + display: inline-block; + font-size: 11px; + font-weight: bold; + min-width: 125px; + padding: 8px 22px; + letter-spacing: 1px; + text-transform: uppercase; + text-decoration: none; + margin-right: 20px; + cursor: pointer; + line-height: 28px; + border: none; + text-align: center; + height: auto; + text-shadow: none; + box-shadow: none; +} +.hubwoo-overview-go-pro:hover, .hubwoo__btn:hover, +.hubwoo-overview-go-pro:focus, .hubwoo__btn:focus +,.hubwoo-general-settings .submit input[type="submit"]:hover, +.hubwoo-general-settings .submit input[type="submit"]:focus, +#hubwoo-pro-email-logs:hover, +#hubwoo-pro-email-logs:focus, +.hubwoo-ocs-template .submit input[type="submit"]:hover,.hubwoo-ocs-template .submit input[type="submit"]:focus, +#hubwoo_pro_upgrade:hover, #hubwoo_pro_upgrade:focus, #hubwoo_pro_up_date:hover, #hubwoo_pro_up_date:focus, +.hubwoo-add-action:hover, .hubwoo-add-action:focus, +.hubwoo-advanced-settings .submit input[type="submit"]:hover, +.hubwoo-advanced-settings .submit input[type="submit"]:focus, +#hubwoo-rfm-form .submit input[type="submit"]:hover, +#hubwoo-rfm-form .submit input[type="submit"]:focus, +.hubwoo-field-text-col .hubwoo-create-single-workflow:hover, .hubwoo-field-text-col .hubwoo-create-single-workflow:focus{ + background-color: #ff8f73; + color: #ffffff; + outline: 0; +} +.hubwoo-next-connect-tab:hover { + background: #ff7a59; +} +.hubwoo-overview-go-pro { + margin-right: 30px; +} +.hubwoo-disabled { + pointer-events: none; + opacity: .35; +} +.hubwoo-align-class { + text-align: center !important; +} +.hubwoo_btn_0 { + margin: 0 !important; +} +.checked{ + max-width: 34px; +} +/*===== End of header-section ======*/ + +/*====================================== += custom-css = +======================================*/ +.hubwoo-field-checked img { + max-width: 30px; +} +.list-progress-bar { + margin-top: 20px; +} +.gen-text{ + font-size: 16px; + margin-top: 15px !important; +} +.align-big { + font-size: 20px; + text-align: center !important; +} +.mwb__accordian-heading-wrap .hubwoo-font-icon { + position: absolute; + left: 15px; + top: 52%; + transform: translateY(-50%); +} +.hubwoo_tooltip_wrap, .hub-woo__checkmark { + position: absolute; + left: 0; + right: 0; + top: 52px; + background-color: #33475B; + z-index: 11; + border-radius: 3px; + padding: 5px; + line-height: 18px; + opacity: 0; + visibility: hidden; + transition: 0.2s linear all; + font-size: 13px; + font-weight: 400; + text-transform: none; + color: #ffffff; +} +.hubwoo_tooltip_wrap::before, .hub-woo__checkmark:before { + content: ""; + position: absolute; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #33475B; + top: -6px; + left: 50%; +} +.hubwoo_update_loader{ + max-width: 30px; + margin-left: 10px; + vertical-align: middle; +} + +.hubwoo_email_loader{ + max-width: 30px; + margin-left: 95px; + vertical-align: middle; +} +.hub-woo__checkmark { + min-width: 150px; + top: auto; + bottom: 27px; +} +.hub-woo__checkmark:before { + left: 5px; + top: auto; + bottom: -6px; + transform: rotate(180deg); +} +.hubwoo_pro_support_dev { + margin: 20px -1% 0 -1%; + display: flex; + flex-wrap: wrap; + justify-content: center; +} +.hubwoo_pro_support_dev a { + margin: 0; + display: block; +} +.hubwoo_pro_support_dev .hubwoo_pro_support_link:hover .hubwoo_tooltip_wrap, .hub-req-checkbox:hover .hub-woo__checkmark { + opacity: 1; + visibility: visible; + transition: 0.2s linear all; +} +.hubwoo_pro_support_link{ + position: relative; + width: 31.33%; + margin: 0 1% 10px 1%; +} +.hubwoo-common-header { + margin-bottom: 30px; +} +.hubwoo-main-template h2{ + color: #444444; + font-size: 28px; + font-weight: 500; + line-height: 33px; + margin: 20px 0 10px; + text-align: left; +} +.hubwoo-body-template { + background: #ffffff; + display: flex; + flex-wrap: wrap; + width: 100%; +} +.hubwoo-navigator-template { + display: block; + flex: 0 0 20%; +} +.hubwoo .hubwoo-nav-tab-wrapper .nav-tab-active{ + background: #fff; +} +.hubwoo-tabs .nav-tab-active, +.hubwoo-tabs .nav-tab-active:focus, +.hubwoo-tabs .nav-tab-active:focus:active, +.hubwoo-tabs .nav-tab-active:hover +{ + + border-color: #ff7a59 !important; + background-color: #ffffff; + color: #2d3e50; +} +.hubwoo-tabs .nav-tab-active{ + position: relative; +} +.hubwoo-tab-disabled img { + opacity: .35; +} +.hubwoo-tab-disabled .hubwoo-disable-white { + display: none !important; +} +.hubwoo-tab-disabled{ + cursor:not-allowed; +} +.hubwoo-content-template { + box-shadow: -1px -5px 4px 2px rgba(0,0,0,.05); + color: #2d3e50; + font-size: 16px; + flex: 0 0 80%; + max-width: 80%; + padding: 10px 30px 10px 40px; + position: relative; +} +.hubwoo-content-template p { + font-size: 16px; +} +.hubwoo-content-template { + line-height: 28px; +} +.hubwoo-content-container .notice.notice-success.is-dismissible{ + box-shadow: 2px 2px 11px #cecece; + color: #46B450; + font-weight: bold; +} +.hubwoo-content-container .notice.error { + box-shadow: 2px 2px 11px #cecece; + color: red; + font-weight: bold; + margin-top: 20px; +} +#hubwoo-skype-link img { + margin-right: 5px; + vertical-align: text-bottom; +} + +.grp-pr-list{ + font-size: 16px; + list-style: disc; + margin-left: 20px; +} +.hubwoo-content__para--greeting { + display: flex; + align-items: center; + justify-content: center; + flex-direction: row-reverse; +} +.hubwoo-content__para--greeting-img { + max-width: 80%; + flex: 0 0 80%; +} +.hubwoo-content__para--greeting-content { + flex: 0 0 20%; + max-width: 20%; +} +/*===== End of custom-css ======*/ + +/*====================================== += hubwoo-nav-tabs-css = +======================================*/ +.hubwoo-nav { + border-bottom: 1px solid #eee; +} +.hubwoo-nav-tab { + background-color: #fff; + border-image: none; + border-bottom: 2px solid transparent !important; + color: #939393; + display: block; + font-size: 11px; + font-weight: bold; + letter-spacing: 1.2px; + line-height: 22px; + padding: 20px 15px; + text-decoration: none; + text-transform: uppercase; + text-align: center; +} +.hubwoo-nav-tab:hover { + color: #2d3e50; +} +.hubwoo-nav-tab:focus, .hubwoo-nav-tab:hover { + box-shadow: none; +} +.hubwoo-navigator-template { + display: block; + flex: 0 0 20%; +} + +/*===== End of nav-tab-css ======*/ + +/*====================================== += loader-css = +======================================*/ +#hubwoo_loader.loading-style-bg img { + left: 0; + margin: 0 auto; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + width: 100px; +} +#hubwoo_loader.loading-style-bg { + background-color: rgba(0, 0, 0, 0.65); + bottom: 0; + height: 100%; + left: 0; + position: fixed; + right: 0; + top: 0; + width: 100%; + z-index: 2147483647; +} + +/*===== End of loader-css ======*/ + + +.hubwoo-overview-footer{ + text-align: center; + padding: 5px; +} +.hubwoo-overview-footer-content-2{ + text-align: center; + margin-bottom: 20px; + margin-top: 40px; +} + +.hubwoo-overview-footer-content-2 img{ + vertical-align: middle; + margin-right: 10px; +} +.hubwoo-overview-footer-content-1.hubwoo-footer-container { + background: #efefef; + padding: 15px; + margin: 20px; +} +.hubwoo-overview-footer-content-1.hubwoo-footer-container p { + color: #2D1665; + font-size: 18px; + margin-bottom: 0; +} +/*===== End of overview-footer-css ======*/ + +/*=================================== + video section and sidecontent to it + *===================================*/ + .hubwoo-ow-intro { + display: flex; + flex-wrap: wrap; + flex-direction: column-reverse; + } + .hubwoo-ow-doc, .hubwoo-ow-support { + flex: 0 0 100%; + padding: 10px; + } + .hubwoo-ow-support { + padding: 0; + } + .hubwoo-ow-doc { + max-width: 470px; + margin: 15px auto 0; + width: 100%; + } + .hubwoo-ow-doc__video { + margin: 0 0 20px; + } + .hubwoo-ow-support h2 { + margin-top: 0; + } + .hubwoo-ow-doc__btn { + text-align: center; + } + .hubwoo-ow-doc { + padding-left: 0px; + } + .hubwoo-ow-support { + padding-right: 0; + } + .hubwoo-ow-support__list { + margin: 0; + padding-left: 14px; +} +.hubwoo-ow-support__content .hubwoo-ow-support__list a { + color: #00a4bd; + text-decoration: none; + font-weight: bold; +} +/*======end of video section=======*/ + +/*============================================ += connect-form-section = +============================================*/ +.hubwoo-connect-form-desc { + font-size: 15px; + line-height: 24px; + margin-bottom: 25px; + margin-top: 25px; +} +.hubwoo-connection-container label { + font-size: 16px; +} +.hubwoo-connection-container input { + margin-bottom: 19px; + margin-left: 25px; +} +.hubwoo_msg_notice { + display: block; + margin: 15px 0; + background: #214460; +} +.hubwoo_msg_notice label { + display: inline-block; + padding: 10px 30px 10px 10px !important; + background: #214460 !important; + margin: 0 !important; + border-left: 5px solid #ff7a59 !important; + color: #fff !important; +} +.hubwoo_msg_notice label:after { + border-left: 10px solid #ffffff !important; +} +.hubwoo_msg_notice .hubwoo__btn { + float: right; + margin-top: 5px; + margin-right: 10px; + background: #ff7a59; + text-shadow: none; + box-shadow: none; + border: none; + padding: 5px 20px; +} +/*===== End of connect-form-section ======*/ + +/*======================================= += connect-section = +=======================================*/ + +.hubwoo-connect-form table tr th{ + padding: 20px !important; + background: #ffffff; +} +.hubwoo-connect-form table tr td{ + text-align: left; + padding: 10px; +} +.hubwoo-connect-form input{ + margin-bottom: 0 !important; + margin-left: 0 !important +} +.hubwoo-connect-form table{ + background: #efefef; + border: 1px solid #bababa; +} +.hubwoo-connect-form table tr{ + border: 1px solid #bababa; +} +.hubwoo-connect-form .submit{ + text-align: center !important; +} +.hubwoo-connection .hubwoo-connection-status-text, .hubwoo-acces-token-renewal { + font-size: 13px; + margin: 6px 0 0; + word-break: break-word; +} +.hubwoo-inner-header { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; +} +.hubwoo-inner-header .hubwoo__btn { + margin: 20px 0 10px; +} +.hubwoo-connection .hubwoo-connection-label, +.hubwoo-connection .hubwoo-acc-email-label, +.hubwoo-connection .hubwoo-token-expiry-label { + color: #555d66; + font-size: 18px; + font-weight: bold; + margin: 20px 0 0; +} +.hubwoo-connection .hubwoo-connection-status-text, .hubwoo-acces-token-renewal { + font-size: 13px; + margin: 6px 0 0; + word-break: break-word; +} +/*===== End of connect-section ======*/ + +/*======================================= + checkboxes + ========================================*/ + .hubwoo-general-settings .forminp-checkbox label, + #hubwoo-ocs-form .forminp-checkbox label, + .mwb-hub-custom-checkbox, .hubwoo-custom-chheckbox, + .hubwoo-connection-container .forminp-checkbox label { + padding-left: 10px; + position: relative; + } + .hubwoo-general-settings .forminp-checkbox label input[type="checkbox"], + #hubwoo-ocs-form .forminp-checkbox label input[type="checkbox"], + .mwb-hub-custom-checkbox input[type="checkbox"], + .hubwoo-custom-chheckbox input[type="checkbox"], + .hubwoo-connection-container .forminp-checkbox label input[type="checkbox"] { + margin: 0; + padding: 0 !important; + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + -o-appearance: none; + border: none; + background-color: transparent; + box-shadow: none; + } + .hubwoo-disconnect-form label { + position: relative; + } + .hubwoo-disconnect-form input[type="checkbox"] { + margin-right: 15px; + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + -o-appearance: none; + border: none; + background-color: transparent; + box-shadow: none; + } + .hubwoo-general-settings .forminp-checkbox label input[type="checkbox"]::after, + .hubwoo-disconnect-form input[type="checkbox"]::after, + #hubwoo-ocs-form .forminp-checkbox label input[type="checkbox"]::after, + .mwb-hub-custom-checkbox input[type="checkbox"]::after, + .hubwoo-custom-chheckbox input[type="checkbox"]::after, + .hubwoo-connection-container .forminp-checkbox label input[type="checkbox"]::after { + position: absolute; + content: ""; + width: 16px; + height: 16px; + border: 2px solid #10AAC1; + left: 0; + border-radius: 3px; + } + .hubwoo-general-settings .forminp-checkbox label input[type="checkbox"]:checked::after, + .hubwoo-disconnect-form input[type="checkbox"]:checked::after, + #hubwoo-ocs-form .forminp-checkbox label input[type="checkbox"]:checked::after, + .mwb-hub-custom-checkbox input[type="checkbox"]:checked::after, + .hubwoo-custom-chheckbox input[type="checkbox"]:checked::after, + .hubwoo-connection-container .forminp-checkbox label input[type="checkbox"]:checked::after { + background-color: #10AAC1; + } + .hubwoo-general-settings .forminp-checkbox label input[type="checkbox"]::before, + .hubwoo-disconnect-form input[type="checkbox"]::before, + #hubwoo-ocs-form .forminp-checkbox label input[type="checkbox"]::before , + .mwb-hub-custom-checkbox input[type="checkbox"]::before, + .hubwoo-custom-chheckbox input[type="checkbox"]:before, + .hubwoo-connection-container .forminp-checkbox label input[type="checkbox"]::before { + content: "\f147"; + display: block; + position: absolute; + left: -1px; + top: 5px; + margin: 0 auto; + border-radius: 4px; + bottom: 0; + color: #fff; + line-height: 17px; + text-align: center; + opacity: 0; + visibility: hidden; + transition: 0.2s linear all; + transform: scale(0); + font-family: dashicons; + z-index: 1; + } + .hubwoo-general-settings .forminp-checkbox label input[type="checkbox"]:checked::before, + #hubwoo-ocs-form .forminp-checkbox label input[type="checkbox"]:checked::before, + .mwb-hub-custom-checkbox input[type="checkbox"]:checked::before, + .hubwoo-custom-chheckbox input[type="checkbox"]:checked::before, + .hubwoo-connection-container .forminp-checkbox label input[type="checkbox"]:checked::before, + .hubwoo-disconnect-form input[type="checkbox"]:checked::before { + opacity: 1; + visibility: visible; + transition: 0.2s linear all; + transform: scale(1); + } + + .hubwoo_listwork_img { + max-width: 30px; + vertical-align: middle; + } + /*====end======*/ + +/*======================================= += connect-section = +=======================================*/ +.hubwoo-connection-info { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.hubwoo-connection { + background-color: #ffffff; + border-radius: 8px; + box-shadow: 0px 5px 20px 0px rgba(70, 46, 46, 0.2); + flex: 0 0 30%; + margin-top: 25px; + max-width: 30%; + padding: 40px 20px 40px 20px; + position: relative; + text-align: center; + word-wrap: break-word; + z-index: 5; +} +.hubwoo-connection:hover { + box-shadow: 0px 1px 20px 0px rgba(70, 46, 46, 0.35); +} +/*========end===============*/ + +/*======================================= += setup-section = +=======================================*/ + +.hubwoo-form-wizard-link-disabled { + pointer-events: none; +} + +.hubwoo-form-wizard-wrapper .hubwoo-form-wizardmove-button { + position: absolute; + width: 0px; /* tab width*/ + left: 0; + top: -4px; + bottom: -4px; + border-radius: 0; + background-color: #FF7A59; + -webkit-transition: all 0.5s cubic-bezier(0.29, 1.42, 0.79, 1) 0s; + -moz-transition: all 0.5s cubic-bezier(0.29, 1.42, 0.79, 1) 0s; + -ms-transition: all 0.5s cubic-bezier(0.29, 1.42, 0.79, 1) 0s; + -o-transition: all 0.5s cubic-bezier(0.29, 1.42, 0.79, 1) 0s; + transition: all 0.5s cubic-bezier(0.29, 1.42, 0.79, 1) 0s; + -webkit-box-shadow: 0 16px 26px -10px rgba(244, 67, 54, 0.56), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(244, 67, 54, 0.2); + -moz-box-shadow: 0 16px 26px -10px rgba(244, 67, 54, 0.56), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(244, 67, 54, 0.2); + -ms-box-shadow: 0 16px 26px -10px rgba(244, 67, 54, 0.56), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(244, 67, 54, 0.2); + -o-box-shadow: 0 16px 26px -10px rgba(244, 67, 54, 0.56), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(244, 67, 54, 0.2); + box-shadow: 0 16px 26px -10px rgba(244, 67, 54, 0.56), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(244, 67, 54, 0.2); +} +.hubwoo-form-wizard-wrapper > ul { + background-color: #DFE3EB; + z-index: 1; + border-radius: 0; + display: flex; + justify-content: center; + position: relative; + margin: 0; + padding: 0; +} +.hubwoo-form-wizard-wrapper > ul > li { + list-style-type: none; + width: 100%; + text-align: center; + display: flex; + margin: 0 0 4px; + justify-content: center; +} +.hubwoo-form-wizard-wrapper > ul > li > a { + display: block; + padding: 10px; + width: 100%; + color: #2d3e50; + text-decoration: none; + outline: none !important; + box-shadow: none !important; +} +.hubwoo-form-wizard-wrapper > ul > li > a.active { + color: #ffffff; +} +.hubwoo-form-wizard-link-disabled { + opacity: .5; + pointer-events: none; +} +.hubwoo-form-wizard-wrapper > ul > li > a:focus{ + outline: 0; +} +.hubwoo-form-wizard-wrapper > ul > li > a > span { + position: relative; + z-index: 1; +} +.hubwoo-form-wizard-wrapper > ul > li.active > a { + background-color: #ffffff; +} +.hubwoo-form-wizard-wrapper .hubwoo-form-wizard-content { + background-color: #ffffff; + padding: 0; + color: #181a25; + position: static; + left: 0; + right: 0; + bottom: 0; + top: 0; + display: block; + margin-bottom: 25px; +} +.hubwoo-form-wizard-wrapper .hubwoo-form-wizard-content.show { + display: block; + transform: translate3d(0px, 0px, 0px); +} +.hubwoo-form-wizard-wrapper .hubwoo-form-wizard-content h6 { + font-size: 18px; + font-weight: bold; + margin: 0 0 10px; +} +.hubwoo-full-wdth .hubwoo__btn { + margin: 0; +} +.grLoader, .grSuccess, .grError, .grToCreate { + position: absolute; + max-width: 70px; + width: 100%; + top: 50%; + right: 9px; + transform: translateY(-50%); + text-align: center; + cursor: pointer; + font-weight: bold; +} +.mwb-woo__accordion-wrapper:hover { + background: #ececec; +} +.mwb-woo__custom-prop .mwb-woo__custom { + padding-bottom: 4px; +} +.mwb-woo__accordion-wrapper:hover .grLoader, .mwb-woo__accordion-wrapper:hover .grSuccess, .mwb-woo__accordion-wrapper:hover .grError, .mwb-woo__accordion-wrapper:hover .grToCreate { + display: inline-block; +} +.hubwoo-cr-btn { + cursor: pointer; + font-weight: bold; + font-size: 13px; +} +.grLoader img, .grSuccess img, .grError img { + max-width:30px; + display: block; + width: auto; + background-color: #EAF0F6; +} +.grSuccess .fa, .grCreateNew .fa { + font-size: 18px; + color: #ff7a59; +} +.grCreateNew .fa { + color: #2e3f51; +} +.listLoader, .listSuccess, .listError { + position: absolute; + right: 20px; + top: 50%; + transform: translateY(-50%); + width: 30px; + padding: 0 !important; +} +.listLoader img, .listSuccess img, .listError img { + max-width: 100%; + display: block; +} +.hubwoo-form-wizard-submit-btn { + cursor: pointer; +} +.hubwoo-form-wizard-submit-btn .hub-gr-props-setup { + background: transparent; + border: none; + color: #fff; +} +.hubwoo-form-wizard-wrapper .hubwoo-form-wizard-content .hubwoo-form-wizard-previous-btn { + background-color: #f1f1f1; + color: #000000; +} +label.hub-pr-created, .hub-pr-create { + position: absolute; + max-width: 15px; + left: -30px; + top: 50%; + transform: translateY(-50%); +} +label.hub-pr-created img, label.hub-pr-created span, label.hub-pr-created, +label.hub-pr-create img, label.hub-pr-create span, label.hub-pr-create { + display: block; +} +label.hub-pr-created img, label.hub-pr-create img { + max-width: 100%; +} +.hubwoo-form-wizard-content-wrapper { + position: relative; +} +.hubwoo-custom-chheckbox input[type="checkbox"]::before { + top: 2px; +} +.hubwoo-fields-created-list table { + border-collapse: collapse; + width: 100%; +} +span.hubwoo-cr-btn.hubwoo-crd-btn { + border: 1px solid; + padding: 6px 13px !important; + display: inline-block; + text-decoration: none; + border-radius: 4px; + max-width: 70px; +} +span.hubwoo-cr-btn.hubwoo-crd-btn:hover { + background: #2e3f51; + color: #fff; +} +.hubwoo-fields-created-list table th { + color: #2d3e50; + text-align: left; + font-weight: bold; + font-size: 18px; + line-height: 40px; +} +.hubwoo-fields-created-list table th, .hubwoo-fields-created-list table td { + font-weight: 600; + padding: 10px 25px; +} +.hubwoo-field-heading-col { + text-align: right; +} +.hubwoo-field-heading-col { + text-align: right; +} +.hubwoo-fields-created .hubwoo_groups { + border-bottom: 1px solid #ddd; + position: relative; +} +.hubwoo-fields-created .hubwoo_groups:hover { + background-color: #ececec !important; +} +.hubwoo-fields-created .hubwoo_groups span { + display: inline-block; + padding-left: 20px; +} +.hubwoo-fields-created .hubwoo-custom-chheckbox { + position: absolute; + top: 45%; + transform: translateY(-50%); +} +#hub-lists-form .hubwoo-fields-created .hubwoo-custom-chheckbox { + top: 8px; + left: 5px; + transform: translateY(0); +} +.hubwoo_groups-content.hubwoo_groups-content--p { + padding-left: 40px !important; + padding-right: 0 !important; +} +.gr_uncreated { + opacity: 0.55; +} +.hubwoo-list-desc { + margin-top: 20px; +} +.hubwoo-fields-created .hubwoo-custom-chheckbox input[type="checkbox"]::before { + top: 10px; +} +label.hubwoo-list-created, .hubwoo-list-create { + font-size: 18px; + position: absolute; + right: 19px; + top: 50%; + transform: translateY(-50%); + width: 70px; + text-align: center; +} +label.hubwoo-list-created span, .hubwoo-list-create span { + padding: 0 !important; + display: block !important; +} +label.hubwoo-list-created img, .hubwoo-list-create img { + max-width: 100%; + display: block; +} +.hubwoo_groups-content, .hubwoo-wf-text { + padding: 0 100px 0 20px; + font-weight: normal; + font-size: 14px; + margin-top: 5px; +} +.hubwoo-wf-text { + padding: 0; +} +.hubwoo-fields-created-list tr { + border-bottom: 1px solid #ddd; +} +.mwb-woo__accordion-wrapper { + padding: 5px 10px; +} +.mwb__accordian-heading-wrap { + padding-left: 30px; + position: relative; +} +.mwb-woo__accordian-heading { + box-shadow: none !important; + color:#2e3f51 !important; + font-weight: bold; + margin-left: 10px; + display: block; + text-decoration: none; + outline: none !important; + padding: 10px 0; +} +.mwb-woo__accordion-content { + padding-left: 45px; +} +li.mwb-woo__custom { + position: relative; +} +ul.mwb-woo__custom-prop { + margin: 0; + padding: 0; + padding-left: 40px; + list-style: none; +} +.mwb-woo__custom .mwb-hub-custom-checkbox { + left: -30px !important; +} +.mwb-hub-custom-checkbox { + padding-left: 0; + position: absolute; + left: 10px; + top: 43%; + transform: translateY(-50%); +} +.mwb-hub-custom-checkbox input[type="checkbox"]::before { + top: 9px; +} +.clearfix:after{ + display: block; + content: ''; + clear: both; +} +.hubwoo-full-wdth{ + width: 100%; +} +.hubwoo-full-wdth { + position: relative; + min-height: 1px; +} +.hubwoo-float-right{ + float: right; + margin: 0!important; +} +.hubwoo-float-left{ + float: left; +} +.hubwoo-form-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} +.hubwoo-notice { + padding: 10px; + border-left: 4px solid #ff7a59; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; + margin: 35px 0 15px; +} +.hubwoo-log-notice-txt { + display: flex; + align-items: center; + justify-content: space-between; + margin: 0; +} +/*=========end========================*/ + +/*======================================= += RFM-section = +=======================================*/ +.hubwoo_rfm_settings{ + overflow-y: auto; +} +.hubwoo_rfm_settings table th { + background-color: #253342; + color: #fff !important; + font-size: 16px; +} +.hubwoo_rfm_settings table th p { + color: #ffffff; + margin: 7px 0 0 0; +} +.hubwoo_rfm_settings input[type="number"] { + display: block; +} +/*==========end of RFM section============*/ +/*======================================= += general setting = +=======================================*/ + + +.hubwoo-general-settings, .hubwoo-advanced-settings__form-wrap, +#hubwoo-ocs-form { + margin-bottom: 0; + padding: 0; + overflow: hidden; +} +.hubwoo-general-settings form h2, .hubwoo-advanced-settings__form-wrap h2, +#hubwoo-ocs-form h2 { + margin: 0; + font-size: 20px; + color: #2D3E50; + line-height: 1.6; +} +#hubwoo-selected-user-roles ~ .select2.select2-container { + min-width: 300px; + padding: 4px; +} +.hubwoo-general-settings form label { + min-width: 180px; + display: inline-block; +} +.hubwoo-general-settings input[type="text"], +.hubwoo-general-settings input[type="number"], +.hubwoo-general-settings select, +.hubwoo-advanced-settings select, +#hubwoo-ocs-form input[type="text"], +#hubwoo-ocs-form input[type="number"], +#hubwoo-ocs-form select { + padding: 10px; + border-radius: 4px; + min-width: 300px; + height: auto; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; +} +#hubwoo_ecomm_order_ocs_status { + width:100%; +} +#reset-deal-stages{ + padding: inherit; +} + +.deal-sync_progress{ + margin: 0px 25px 0px 0px !important; + width: 88%; +} +.redirect-link{ + text-decoration: none !important; +} +#deals-save-message { +} +/*===== End of general setting ======*/ + +/*======================================= += Hubspot Deals = +=======================================*/ +.hubwoo-group-wrap__deal_notice { + display: flex; + flex-wrap: wrap; + align-items: center; + margin: 20px 0; + padding: 10px 15px; + color: #2d3e50; + font-weight: 600; + border-left: 2px solid #fd8567; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; +} +select#hubwoo_ecomm_order_ocs_status ~ .select2-container { + width: 100% !important; +} + +.stop-ecomm-sync{ +float: right; + margin-left: 10px; + padding: 2px 0px; +} + +#reset-deal-stages{ + padding: inherit; +} + +.deal-sync_progress{ + margin: 0px 25px 0px 0px !important; + width: 88%; +} +.redirect-link{ + text-decoration: none !important; +} +#deals-save-message { + display: flex; + align-items: center; +} +.psync_desc{ + display: block; + margin-bottom: 10px; + width: 70%; +} +.hubwoo-group-wrap__deal_notice p { + margin: 0 10px 0 0; + font-size: 16px; +} +.hubwoo-group-wrap__deal_notice .hubwoo__btn { + padding: 8px 10px; + width: auto; + min-width: auto; + margin: 0; + font-size: 10px; + line-height: normal; +} +.manage-ocs-bar { + display: flex; + align-items: flex-start; +} + +table.hubwoo-deals-stages-conf-table { + table-layout: fixed; +} +th.hubwoo-deal-wrap-con__thead { + width: 240px !important; +} +table.hubwoo-deals-stages-conf-table.form-table th { + width: 100%; +} +.hubwoo-deals-multiselect ~ .select2 { + width: 100% !important; +} +#hubwoo_real_time_deal_settings > h2, #hubwoo_deals_ocs_form > h2 { + display: none; +} +.mwb-heb-setup-content { + padding: 0 0 20px; + margin: 0 auto; + position: relative; +} +.mwb-heb-setup-content .dashicons { + color: #cccccc; + font-size: 80px; + height: auto; + width: auto; + display: none; +} +.mwb-heb-setup-content { + position: relative; +} + +.mwb-heb-setup-box { + flex: 0 0 38%; + padding: 15px; + position: relative; + opacity: 1; + background-color: #f6f6f6; + z-index: 55; + +} +.mwb-heb-setup-progress { + display: flex; + align-items: center; + margin-bottom: 0; + padding: 20px 20px 10px; + background: #f6f6f6; +} +.mwb-heb-setup-pregress__number { + + margin-right: 40px; +} +.mwb-heb-setup-pregress__number span { + display: inline-block; + height: 30px; + width: 30px; + text-align: center; + line-height: 30px; + color: #2D3E50; + font-weight: bold; + font-size: 14px; + margin-right: 5px; + border: 1px solid #2D3E50; + border-radius: 50%; +} +.hubwoo-list-desc__notice-sec p { + margin-bottom: 5px; + padding: 8px 10px; + background: #f2f2f2; + display: flex; + align-items: center; +} +.mwb-heb-setup-pregress__number.done span { + color: #fff; + background: #ff7a59; + border-color: #ff7a59; +} +form#hubwoo-ocs-form > div { + padding: 15px 25px 0; +} +.mwb-heb-setup-box:after { + background: rgba(232, 232, 232, 0.38); + bottom: 0; + content: ""; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; + z-index: 66; +} +.mwb-heb-setup-box.active { + filter: blur(0); + pointer-events: unset; + opacity: 1; + position: relative; + z-index: 55; +} +.mwb-heb-setup-box.active:after { + display: none; +} +.mwb-heb-setup-title { + font-weight: bold; + font-size: 20px; + line-height: 28px; + margin-bottom: 9px; +} +.mwb-heb-setup-text { + color: #181a25; + font-size: 16px; + line-height: 1.6; + margin: 0 0 15px; +} +.mwb-heb-gbtn:hover { + color: #ffffff; +} +.mwb-heb-gbtn:focus { + outline: 0; +} +.mwb-heb-setup__info { + display: flex; + flex-wrap: wrap; + justify-content: center; + margin-bottom: 20px; + position: relative; +} +.mwb-heb__info-icon { + color: #354558 !important; + font-size: 40px !important; +} +.mwb-heb-setup__info .dashicons:hover + .mwb-heb-setup__info-content { + display: block; +} +.mwb-heb-setup__info-content { + background: #2d3e52; + border: 1px solid #2d3e52; + border-radius: 5px; + bottom: calc( 100% + 6px); + color: #fff; + display: none; + padding: 5px; + position: absolute; + text-align: center; + font-size: 15px; +} +.mwb-heb-setup__info-content:after { + bottom: -9px; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #2d3e52; + content: ""; + height: 0; + left: 0; + margin: 0 auto; + position: absolute; + right: 0; + width: 0; +} +.mwb-heb-setup__success { + background: #63b36d; + border-radius: 50%; + color: #ffffff; + display: none; + height: 35px; + margin: 0 auto 20px; + max-width: 35px; + text-align: center; +} +.mwb-heb__success-icon { + color: #ffffff !important; + display: inline-block; + font-size: 30px !important; + margin-top: 4px; +} +.mwb-heb-setup-box.completed .mwb-heb-setup__success { + display: block; +} +.mwb-heb-setup-box.completed .mwb-heb-setup__info { + display: none; +} +.mwb-heb-setup-box.completed + .dashicons { + color: #63b36d; +} +.deal-progress{ + width: 80%; + display: none !important; +} +#hubwoo_ecomm_won_stages ~ .select2.select2-container.select2-container--default { + width: 100% !important; +} +.hubwoo_update_pipelines{ + margin: 20px; + text-decoration: none; + color: #000; + cursor: pointer; +} + +/*===== End of hubspot deals ======*/ + +/*======================================= += advance setting = +=======================================*/ +.hubwoo-advanced-settings table { + table-layout: fixed; +} +.hubwoo-advanced-settings table th { + padding: 15px 10px; + vertical-align: middle; +} +.hubwoo-advanced-settings select { + min-width: auto; + width: 100%; +} +.order-list-rule-rem { + cursor: pointer; +} +.hubwoo-dib-w { + min-width: 220px; + display: inline-block; +} +#hubwoo_pro_upgrade, #hubwoo_pro_up_date { + vertical-align: middle; + padding: 1px 13px !important; + min-width: 90px !important; + margin-right: 0 !important; + margin-left: 15px; +} +.hubwoo-add-more-workflow-actions, .hubwoo-add-more-list-actions { + padding: 15px 10px 0; +} +/*===== End of advance setting ======*/ + +/*======================================= += error-section = +=======================================*/ +.hubwoo-error-navs a { + text-decoration: none; + padding: 3px 10px; + display: inline-block; + border-bottom: 1px solid #2D3E50; + color: #2D3E50; + margin-left: 41px; + font-weight: bold; +} +.hubwoo-error-navs { + text-align: center; + margin: 60px 0 10px; +} +.hubwoo-error-navs a:first-child { + margin: 0; +} +.hubwoo-error-navs a.active { + color: #ff7a59; + border-bottom: 1px solid #ff7a59; +} +#hubwoo-pro-email-logs{ + margin: 0 0 0 15px!important; +} +.hubwoo-extn-status img { + max-width: 34px; + margin-left: 10px; +} +.hubwoo-log-viewer #log-viewer { + height: 250px; + overflow-y: auto; + margin-top: 25px; + background-color: #F5F8FA; +} +.hubwoo-notice-sym { + animation: pulse 1s infinite; + display: inline-block; + height: 20px; + width: 20px; + text-align: center; + border: 1px solid #ff5353; + line-height: 14px; + border-radius: 50%; +} +.hubwoo-notice-sym span { + height: 8px; + width: 8px; + background: #ff5353; + border-radius: 50%; + display: inline-block; +} +@-webkit-keyframes pulse { + 0% { + -webkit-box-shadow: 0 0 0 0 rgba(255,83,83, 0.4); + } + 70% { + -webkit-box-shadow: 0 0 0 10px rgba(255,83,83, 0); + } + 100% { + -webkit-box-shadow: 0 0 0 0 rgba(255,83,83, 0); + } +} +@keyframes pulse { + 0% { + -moz-box-shadow: 0 0 0 0 rgba(255,83,83, 0.4); + box-shadow: 0 0 0 0 rgba(255,83,83, 0.4); + } + 70% { + -moz-box-shadow: 0 0 0 10px rgba(255,83,83, 0); + box-shadow: 0 0 0 10px rgba(255,83,83, 0); + } + 100% { + -moz-box-shadow: 0 0 0 0 rgba(255,83,83, 0); + box-shadow: 0 0 0 0 rgba(255,83,83, 0); + } +} + +@-webkit-keyframes pulsesuccess { + 0% { + -webkit-box-shadow: 0 0 0 0 rgba(56,165,56, 0.4); + } + 70% { + -webkit-box-shadow: 0 0 0 10px rgba(56,165,56, 0); + } + 100% { + -webkit-box-shadow: 0 0 0 0 rgba(56,165,56, 0); + } +} +@keyframes pulsesuccess { + 0% { + -moz-box-shadow: 0 0 0 0 rgba(56,165,56, 0.4); + box-shadow: 0 0 0 0 rgba(56,165,56, 0.4); + } + 70% { + -moz-box-shadow: 0 0 0 10px rgba(56,165,56, 0); + box-shadow: 0 0 0 10px rgba(56,165,56, 0); + } + 100% { + -moz-box-shadow: 0 0 0 0 rgba(56,165,56, 0); + box-shadow: 0 0 0 0 rgba(56,165,56, 0); + } +} +.hubwoo-error-info { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.hubwoo-error { + box-shadow: rgba(61, 61, 61, 0.17) 0px 3px 10px 0; + display: flex; + flex-direction: column; + flex: 0 0 31%; + justify-content: center; + margin-top: 25px; + padding: 20px 15px; + text-align: left; + width: 100%; + word-wrap: break-word; +} +.hubwoo-error .hubwoo-total-calls, .hubwoo-success-calls, .hubwoo-failed-calls, +.hubwoo-success-calls,.hubwoo-failed-calls{ + font-size: 20px!important; + font-weight: bold; + margin: 0 0 5px; + color: #2b5d89; +} +.hubwoo-error .hubwoo-success-calls{ + color: #38a538; +} +.hubwoo-error .hubwoo-failed-calls{ + color: #ff5353; +} +.hubwoo-error .hubwoo-error-text{ + font-size: 16px; + margin: 0; +} + +/*===== End of error-section ======*/ + +/*===================================== += one cick sync = +=====================================*/ + +select#hubwoo_customers_role_settings ~ .select2-container { + width: 90% !important; +} +.hubwoo-ocs-notice-wrap .hubwoo-ocs-options { + font-size: 16px;, + display: flex; + align-items: center; + margin-bottom: 10px; + justify-content: space-between; +} +.hubwoo-ocs-notice-wrap > div a.hubwoo__btn { + padding: 5px 10px; + margin: 0; +} +.hubwoo-ocs-notice-wrap { + margin: 15px 25px; + padding: 15px; + color: #2d3e50; + font-weight: 600; + border-left: 2px solid #fd8567; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; +} +.progress-cover { + margin: 0px 25px; +} +.hubwoo-progress-wrap,#hubwoo-ocs-form table tr:nth-child(3), +#hubwoo-ocs-form table tr:nth-child(4) { + display: none; + margin-top: 10px; +} +.hubwoo-progress-wrap,#hubwoo-ocs-form table tr:nth-child(3), +#hubwoo-ocs-form table tr:nth-child(4) { + display: none; + margin-top: 10px; +} +.hubwoo-progress { + background-color: #EAF0F6; + border-radius: 6px; + display: -ms-flexbox; + display: flex; + font-size: 12px; + height: 32px; + overflow: hidden; +} +.hubwoo-progress-bar { + background-color: #00BDA5; + background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); + background-size: 15px; + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + transition: width .6s ease; + font-size: 20px; +} +.hubwoo-progress-bar.hubwoo-progress-error { + background-color: #F42525; +} +.hubwoo-user-notice { + padding: 10px 17px; + color: #2d3e50; + width: 500px; + font-weight: 600; + font-size: 16px; + border-left: 2px solid #fd8567; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; +} +/*===== End of one-click sync ======*/ + +/*===================================== += HubSpot Deal Page CSS = +=====================================*/ +.form-table th { + margin-bottom: 9px; + padding: 15px 10px; + line-height: 1.3; + vertical-align: middle; +} +.hubwoo_coupons_list .widefat tfoot tr td, .hubwoo_coupons_list .widefat tfoot tr th, .hubwoo_coupons_list .widefat thead tr td, .hubwoo_coupons_list .widefat thead tr th { + padding: 15px 10px; +} +.hubwoo_coupons_list .widefat tfoot tr th, .hubwoo_coupons_list .widefat thead tr th { + background-color: #2D3E50; + color: #ffffff; +} +.hubwoo_oauth_span label { + font-weight: bold; + color: #2D3E50; + display: inline-block; + margin-right: 15px; +} +.hubwoo-common--custom { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 20px; +} +.hubwoo-common--custom h2, .hubwoo-common--custom .hubwoo__btn { + margin: 0; +} +.hubwoo-connect-form-submit.hubwoo-connect-form--submit p.submit { + margin: 30px 0 0; + padding: 20px 15px; +} +.hubwoo-connect-form-submit.hubwoo-connect-form--submit { + background: #253342; +} + +/*===== End of HubSpot Deal Page CSS ======*/ +/* Card Layout CSS */ + +.hubwoo-box-card .grLoader img, .hubwoo-box-card .grSuccess img, .hubwoo-box-card .grError img { + background: transparent; +} +.hubwoo-box-card .hubwoo-fields-created .hubwoo_groups { + background: transparent; +} +.hubwoo-box-card .hubwoo-common-header h2 { + margin: 0; + line-height: 1.6; +} +.hubwoo-box-card .hubwoo-common-header, .hubwoo-deal-wrap-con .hubwoo-common-header { + margin: 0 0 0; +} +.hubwoo-common-header > h2 > a { + color: #2d3e50; + text-decoration: none; +} +.hubwoo-box-card .mwb-woo__accordion-wrapper { + padding: 0 10px; +} +.hubwoo-box-card .hubwoo-group-wrap__glist .mwb-hub-custom-checkbox { + left: 0px; +} +.hubwoo-btn-cshow__content { + display: none; + width: 100% !important; +} +.hubwoo-btn-cshow__btn { +} +.hubwoo-success__heading { + display: flex; + width: 100%; + justify-content: space-between; + align-items: center; +} +.hubwoo-success__heading img { + max-width: 40px; +} +.hubwoo_oauth_span.hubwoo_auth_section { + margin-bottom: 20px; +} +.hubwoo-strip--button { + padding: 10px; + text-align: center; + background: #253342; +} +.hubwoo_pro_support a i { + margin-right: 9px; + font-size: 18px; +} +.hubwoo_pro_support a { + display: flex; + align-items: center; + justify-content: center; + max-width: 260px; +} +.hubwoo-connect-section__con { + padding-bottom: 25px; + border-bottom: 1px solid #ddd; +} +.hubwoo-connect-section__wrapper .hubwoo-connect-section__con:last-child { + border-bottom: none; +} +.hubwoo-general-setting{ + box-shadow: none; + border-radius: 0; + margin-bottom: 0; + +} +/* End of Card Layout CSS */ + +/* Start of New Setup */ + +.mwb-heb-wlcm__title h2 { + color: #2d3e50; + font-size: 32px; + font-weight: 700; + display: inline-block; + line-height: normal; + margin: 50px 0 0 0; +} +.mwb-heb-wlcm-wrapper, .mwb-heb-setup-wrapper, .mwb-heb-dash-wrapper { + background: #ffffff; + margin: 20px 15px 0 0; + overflow: hidden; + position: relative; + font-size: 18px; + line-height: 1.6; +} +.mwb-heb-wlcm.active { + display: block; + opacity: 1; + z-index: 5; +} +.hubwoo-box { + max-width: 1000px; + margin: 0 auto; +} +.hubwoo-box .hubwoo-deal-wrap-con__store { + display: block; +} +.hubwoo-box th.hubwoo-deal-wrap-con__thead { + width: 320px !important; +} +.mwb-heb-wlcm__content { + padding: 0 15px; +} +.hubwoo-content__para { + margin-bottom: 25px; +} +.mwb-heb-wlcm__content p { + font-size: 16px; + line-height: 25px; + margin: 0 0 15px; + font-weight: 400; + color: #181a25; +} +.hubwoo-content__para p:last-child { + margin: 0; +} +.mwb-heb-wlcm, .mwb-heb-wlcm *, .mwb-heb-setup-wrapper, .mwb-heb-setup-wrapper *, .mwb-heb-dash-wrapper, .mwb-heb-dash-wrapper * { + box-sizing: border-box; +} +.hubwoo-btn--primary { + display: inline-block; + padding: 13px 30px; + text-decoration: none; + background: #ff7a59; + color: #fff!important; + font-size: 11px; + font-weight: 700; + letter-spacing: 1px; + border-radius: 3px; + box-shadow: none!important; + text-transform: uppercase; + border: 2px solid #ff7a59; +} +.hubwoo-btn--secondary { + background-color: #fff; + color: #ff7a59 !important; + border-color: #ff7a59; + margin-left: 20px; +} +.hubwoo-hub-login { + font-size: 14px; + margin: 15px 0 0; +} +.mwb-heb-wlcm { + align-items: center; + color: #181a25; + flex-direction: column; + font-family: 'Nunito Sans', sans-serif; + justify-content: center; + min-height: 464px; + padding: 100px 15px; + width: 100%; + height: 100%; + top: 0; + opacity: 0; + z-index: 1; +} +.mwb-heb-wlcm { + align-items: center; + color: #181a25; + flex-direction: column; + font-family: 'Nunito Sans', sans-serif; + justify-content: center; + min-height: 464px; + padding: 100px 15px; + width: 100%; + height: 100%; + top: 0; + opacity: 0; + z-index: 1; +} +.mwb-heb-wlcm { + align-items: center; + color: #181a25; + flex-direction: column; + font-family: 'Nunito Sans', sans-serif; + justify-content: center; + min-height: 464px; + padding: 100px 15px; + width: 100%; + height: 100%; + top: 0; + opacity: 0; + z-index: 1; +} + +.mwb-heb-wlcm__btn:hover { + color: #fb9772; +} +.hubwoo-hub-login a { + font-weight: bold; + text-decoration: none; + color: #00AFA0 !important; + box-shadow: none !important; +} +.mwb-heb-wlcm__btn--next { + float: right; +} +.hubwoo-connect--img { + max-width: 100px; + margin-left: 15px; + opacity: .85; +} +.mwb-heb-wlcm__title { + padding: 0 15px; + margin-bottom: 20px; +} +.mwb-heb-wlcm__content-link { + margin-top: 30px !important; +} +.mwb-heb-wlcm__btn:hover { + color: #fb9772; +} +a { + color: #0073aa; + transition-property: border,background,color; + transition-duration: .05s; + transition-timing-function: ease-in-out; +} +.mwb-heb-wlcm__btn--previous { + float: left; +} +.mwb-heb-wlcm__btn span { + margin-top: 4px; +} +.hubwoo-group__manage { + display: none; + margin: 30px 0 0; +} +.hubwoo-group__manage-list a { + display: block; + color: #474747; + text-decoration: none; + font-weight: 700; + font-size: 16px; + padding: 10px 0; + box-shadow: none !important; +} + +.hubwoo-progress__bar { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-color: #00AFA0; + height: 10px; + width: 30%; + transition: 0.3s linear all; + -webkit-animation: progress-bar-stripes 1s linear infinite; + -o-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; + background-size: 40px 40px; +} +/* End of New Setup */ + +/*============================================= += Nav Setion CSS = +=============================================*/ +.mwb-heb-wlcm { + padding-top: 30px; +} +.mwb-heb__nav, .mwb-heb__nav * { + box-sizing: border-box; +} + + +/*===== End of Nav Setion CSS ======*/ + +/*================================================ += Dashboard Section Design = +================================================*/ +.hubwoo-nav ul, .hubwoo-nav ul li { + margin: 0; +} +.hubwoo-discon { + margin-right: 22px; +} +.hubwoo-db-wrap, .hubwoo-db-wrap *, .hubwoo-nav-wrap, .hubwoo-nav-wrap * { + box-sizing: border-box; +} +.hubwoo-disconnect-wrapper { + padding: 10px 40px; +} +.hubwoo-disconnect-wrapper h2 { + font-size: 20px; + display: inline-block; +} +form.hubwoo-disconnect-form label { + font-size: 16px; +} +.hubwoo-discon-btn { + display: block; + margin: 3% 0; +} +.hubwoo-discon-spinner { + display: none; + text-align: center; + margin: 2% 0; +} +.hubwoo-discon-spinner span { + font-size: 32px; +} +.hubwoo-ocs-notice-wrap-error { + margin: 14px 18px 11px 15px; + padding: 9px; + color: #2d3e50; + background: white; + font-weight: 600; + border-left: 4px solid #ff3c0b; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; +} +.hubwoo-db-wrap { + font-family: 'Nunito Sans', sans-serif; + padding: 30px 25px 50px; + background: #fff; + margin: 0 15px 0 0; + color: #181a25; +} +.hubwoo-nav-wrap { + background: #fff; + margin: 20px 15px 0 0; + padding: 0; +} +.hubwoo-nav ul { + display: flex; + flex-wrap: wrap; +} +nav.hubwoo-nav li a { + display: inline-block; + padding: 15px 10px; + text-decoration: none; + font-size: 16px; + color: #fff; +} +.hubwoo-nav li:hover,.hubwoo-nav li.active { + background: #1c1a1a; +} +.hubwoo-db__column .hubwoo-db__box { + flex: 0 0 24%; + margin-bottom: 25px; + max-width: 24%; +} +.hubwoo-db__colum-graph { + width: 100%; +} +img.hubwoo-graph-img { + margin: 30px 0 0; + max-width: 490px; +} +.hubwoo-db__column { + flex: 0 0 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.hubwoo-db__row { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.hubwoo-db__box { + flex: 0 0 100%; + max-width: 100%; + border-right: 1px solid #ddd; + padding: 20px 0 23px; + box-shadow: rgba(61, 61, 61, 0.17) 0px 3px 10px 0px; +} +.hubwoo-db__box-full { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: 1px solid #dddddd; + padding: 45px 20px; + box-shadow: rgba(61, 61, 61, 0.17) 0px 3px 10px 0px; + width: 100%; + align-items: center; + border-radius: 4px; +} +.hubwoo-db__box-full .hubwoo-db__box-title p span { + color: #999; + margin-left: 10px; +} +.hubwoo-db__box-full .hubwoo-db__box-title h4 { + margin: 0; + font-size: 20px; + text-transform: capitalize; +} +.hubwoo-db__box-full .hubwoo-db__box-title p { + margin: 8px 0 0 0; + text-align: left; +} +.hubwoo-db__box:last-child { + border-right: none; +} + +.hubwoo-db__box-title { + font-size: 20px; + font-weight: 600; + line-height: 1.3; + letter-spacing: 1px; +} + +.hubwoo-db__box.hubwoo-db__box--info .hubwoo-db__box-title { + margin-bottom: 20px; + text-align: center; + color: #2d3e50; +} +.hubwoo-db__row--info__mtitle { + flex: 0 0 100%; + max-width: 100%; + text-align: center; +} +.hubwoo-db__row--info__mtitle h2 { + color: #2d3e50; + font-size: 26px; + font-weight: 700; + margin: 0 0 20px; + line-height: normal; +} +.hubwoo-db__box-content { + text-align: center; + font-size: 50px; + line-height: 1.6; + font-weight: bold; + color: #00AFA0; +} +.hubwoo-db__row--info { + margin-top: 70px; + margin-bottom: 50px; +} +.hubwoo-btn--primary.hubwoo-btn--dashboard { + min-width: 220px; + padding: 15px; + text-align: center; + text-transform: unset; + font-size: 14px; +} +.hubwoo-btn--primary.hubwoo-btn--dashboard.hubwoo-btn--dashboard-chat { + margin-right: 20px; +} +.hubwoo-db__box.hubwoo-db__box--info { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: 1px solid #dddddd; + padding: 45px 20px 130px 20px; + margin-bottom: 20px; + box-shadow: rgba(61, 61, 61, 0.17) 0px 3px 10px 0px; + max-width: 31%; + border-radius: 4px; + position: relative; +} +.hubwoo-db__box--infoImg iframe { + width: 100%; +} +.hubwoo-ocs-btn-notice { + display: inline-block; + font-size: 14px; + font-weight: 700; +} +.hubwoo-deal-order-count{ + display: inline-block; + font-size: 16px; + font-weight: bold; + padding: 18px 10px; +} +.hubwoo-db__box--infoImg { + flex: 0 0 15%; + max-width: 15%; +} +.hubwoo-db__box--infoImg img { + max-width: 100%; +} +.hubwoo-db__box-row-content p { + font-size: 16px; + line-height: 1.6; + text-align: center; + margin: 8px 0; +} +.hubwoo-db__box--info .mwb-heb-wlcm__btn-wrap { + text-align: center; + position: absolute; + left: 0; + right: 0; + bottom: 45px; +} +.hubwoo-db__strip--infoCon { + display: flex; + flex-wrap: wrap; + padding: 20px; + border-radius: 4px; + align-items: center; + border: 1px solid #dddddd; + box-shadow: rgba(61, 61, 61, 0.17) 0px 3px 10px 0px; +} +.hubwoo-db__strip-row-content { + flex: 0 0 100%; + margin-right: 10px; + max-width: calc(70% - 5px); +} +.hubwoo-db__strip-row-content p { + margin: 0; + font-size: 14px; + font-weight: 600; +} +.hubwoo-db__strip--infoCon .mwb-heb-wlcm__btn-wrap { + flex: 0 0 100%; + max-width: calc(30% - 5px); + min-width: unset; + text-align: right; +} +.mwb-heb-wlcm { + padding-top: 30px; +} +.mwb-heb__nav, .mwb-heb__nav * { + box-sizing: border-box; +} +nav.mwb-heb__nav { + border-bottom: 1px solid #eee; + margin-top: 0; +} +.mwb-heb__nav-list { + display: flex; + flex-wrap: wrap; + margin: 0 auto; + max-width: 1000px; + padding: 0 20px; +} +.mwb-heb__nav-list-item { + margin: 0; + position: relative; +} + +.mwb-heb__nav-list-item a { + border-bottom: 2px solid transparent; + font-size: 11px; + font-weight: 700; + display: inline-block; + text-decoration: none; + padding: 20px 15px; + color: #939393; + text-transform: uppercase; + position: relative; + z-index: 5; + outline: none !important; + box-shadow: none !important; + text-align: center; + letter-spacing: 1.2px; + pointer-events: none; +} +.mwb-heb__nav-list-item.active .mwb-heb__nav-count { + background-color: #ff7a59; + border-color: #ff7a59; + color: #ffffff; +} +.mwb-heb__nav-list-item.completed .mwb-heb__nav-count { + border-color: #00A4BD; + color: #fff; + background-color: #00A4BD; +} +.mwb-heb__nav-list-item a:hover, .mwb-heb__nav-list-item.completed a, .mwb-heb__nav-list-item.active a { + background-color: #ffffff; + color: #2d3e50; +} +.mwb-heb__nav-list-item.completed a, .mwb-heb__nav-list-item.active a { + pointer-events: unset !important; +} +.mwb-heb__nav-count { + display: inline-block; + height: 25px; + width: 25px; + border: 1px solid; + text-align: center; + line-height: 22px; + border-radius: 50%; + margin-right: 5px; + position: relative; +} +.mwb-heb__nav-list-item.completed .mwb-heb__nav-count::after { + content: "\f00c"; + background-color: #00A4BD; + width: 100%; + position: absolute; + left: 0; + right: 0; + border-radius: 50%; + font-family: FontAwesome; + display: flex; + align-items: center; + justify-content: center; + top: 0; + bottom: 0; +} +/*===== End of Nav Setion CSS ======*/ + + +.hubwoo-db__connection { + padding: 20px 25px; + background: #f7fff1; + font-size: 16px; + line-height: 1.6; + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} +.hubwoo-db__connection-notice { + display: flex; + align-items: center; +} +.hubwoo-db__connection-notice i { + color: #529123; + font-size: 22px; + margin-right: 10px; +} +.hubwoo-db__connection-links a { + text-decoration: none; + font-weight: 600; +} +.hubwoo-db__connection-links { + font-weight: 600; +} +.hubwoo-db-notice-box { + width: 100%; + margin: 0 auto 50px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px; + border-left: 2px solid #fd8567; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; +} +.hubwoo-db-notice__heading { + font-size: 20px; + line-height: 28px; + text-align: left; + font-weight: 600; + margin-bottom: 10px; +} +.hubwoo-db-notice__blink { + font-weight: 600; + font-size: 16px; + display: flex; + flex-wrap: wrap; + align-items: center; +} +.hubwoo-db-notice__blink .hubwpp-db-notice__link { + background: #eaf8df; + border: 2px solid #fff; + color: #000; + display: inline-block; + font-size: 20px; + margin-left: 10px; + height: 40px; + width: 40px; + text-align: center; + line-height: 40px; + position: relative; + outline: none !important; + box-shadow: none !important; +} +.hubwoo-db-notice__blink .hubwpp-db-notice__link:hover .hubwoo-tooltipp { + display: block; +} +.hubwoo-tooltipp { + position: absolute; + width: 200px; + font-size: 14px; + line-height: 20px; + top: -45px; + background: #515151; + padding: 8px 15px; + color: #fff; + font-weight: 500; + left: 0; + display: none; +} +.hubwoo-tooltipp:after { + content: ""; + position: absolute; + border-left: 8px solid transparent; + height: 8px; + border-top: 8px solid #515151; + border-right: 8px solid transparent; + bottom: -16px; + left: 0; +} +.hubwoo-db-notice__blink img, .hubwoo-db-notice__blink .fa-globe, .hubwoo-db-notice__blink .fa-icon { + display: inline-block; + margin-right: 10px; + font-size: 20px; +} +.hubwoo-m-wrap-c { + padding: 30px 0 50px; + background: #fff; + color: #181a25; +} +.hubwoo-inner-header > div { + margin-bottom: 12px; +} +.hubwoo-db__connection-notice--default .fa-icon { + color: #181a25; +} +.hubwoo-m-wrap-c form h2 { + padding: 0 25px; +} +.hubwoo-m-wrap-c form table th { + padding-left: 25px; +} +.hubwoo-m-wrap-c form .submit { + padding-bottom: 0; + padding-left: 25px; + margin-bottom: 0; +} +.hubwoo-discon { + display: inline-block; + margin-top: 0; + color: #595c5d; + font-weight: 600; + font-size: 14px; + line-height: 1.6; + text-decoration: none; + margin-left: 28px; +} +.hubwoo-db__connection-links .hubwoo__btn { + padding: 7px 11px; + min-width: auto; + margin-right: 9px; +} +.hubwoo-db__connection-links .hubwoo__btn:last-child { + margin-right: 0; +} + + +/*** General Setting ***/ +.hubwoo-btn-cshow__content { + background: #fcfcfc; + color: #2e3f51; + margin-top: 15px; +} +.hubwoo-gs-wrap, .hubwoo-et-wrap { + padding: 30px 25px; + color: #181a25; +} +.hubwoo-gs-wrap--gen .hubwoo-common-header h2, .hubwoo-deal-wrap-con .hubwoo-common-header h2{ + font-size: 20px; + color: #2D3E50; + line-height: 1.6; +} +.hubwoo-deal-wrap-con .hubwoo-common-header h2 { + margin: 0; +} +.hubwoo-gs-wrap--gen .hubwoo-box-card__subtitle, .hubwoo-deal-wrap-con__intro { + font-size: 16px; + line-height: 1.6; + margin-bottom: 8px; +} +.hubwoo-gs-wrap--gen .hubwoo-box-card, .hubwoo-form-wizard-wrapper .hubwoo-form-wizard-content { + padding: 15px 0; + border-bottom: 1px solid #bebebe; + margin-bottom: 0; +} +.hubwoo-setting-heading { + margin-top: 0; + font-size: 28px; + margin-bottom: 10px; +} +.hubwoo-addon-heading { + margin-top: 28px; + font-size: 28px; + margin-bottom: 10px; +} +#hubwoo_create_lists { + margin-bottom: 50px; +} +.hubwoo-gs-wrap--gen .hubwoo-box-card:last-child, .hubwoo-form-wizard-wrapper .hubwoo-form-wizard-content:last-child { + border-bottom: 0; + padding-bottom: 0; +} +.hubwoo-gs-wrap--gen .hubwoo-box-card:first-child, .hubwoo-form-wizard-wrapper .hubwoo-form-wizard-content:first-child { + padding-top: 0; +} +.hubwoo-gs-wrap--gen .hubwoo-box-card:last-child { + margin: 0; +} +.mwb-woo__custom-prop, .mwb__accordian-heading-wrap, .hubwoo-btn-cshow__content .hubwoo-fields-created-list table th { + color: #2e3f51; +} +.mwb-woo__accordian-main-wrapper { + padding: 10px 0; +} +.hubwoo-fields-created .hubwoo_groups { + background: transparent; + padding: 10px 0; + font-weight: bold; +} +.label.hubwoo-list-created { + left: 13px; +} +.hubwoo-m-wrap-c th { + color: #2d3e50; + font-size: 16px; +} + + +/** Advance Setting **/ +.select2-container .select2-selection { + border-radius: 4px !important; +} +.hubwoo-adv-settingg__heading { + line-height: 1.6; + font-size: 20px; + margin: 0; +} +.hubwoo-adv-settingg__content p { + font-size: 16px; + margin: 0 0 10px; + line-height: 1.6; +} + +.hubwoo-adv-settingg__wrapper, .hubwoo-box-n-card, .hubwoo-deal-wrap-con-flex { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; +} +.hubwoo-adv-settingg__con, .hubwoo-box-n-card__content, .hubwoo-deal-wrap-con__h-con { + flex: 0 0 80%; + max-width: 80%; +} +.hubwoo-adv-settingg__btn, .hubwoo-box-n-card__btn, .hubwoo-deal-wrap-con__h-btn { + margin-bottom: 0; + flex: 0 0 17%; + text-align: right; +} +.hubwoo-box-n-card__btn .hubwoo__btn { + margin: 0; +} +.hubwoo-box-n-card .hubwoo-btn-cshow { + flex: 0 0 100%; + max-width: 100%; +} +.hubwoo-adv-settingg__btn a, .hubwoo-deal-wrap-con__h-btn a { + margin: 0; +} +.hubwoo-adv-settingg form > h2 { + display: none; +} +.hubwoo-form-wizard-wrapper { + padding: 30px 25px; +} +.hubwoo_rfm_settings .tablenav.top { + display: none; +} +#hubwoo-rfm-form { + padding-top: 15px !important; +} +.hubwoo-adv-settingg__form { + display: none; + width: 100% !important; +} +.hubwoo-advanced-settings__form-wrap h2 { + font-size: 18px; + padding: 0 10px; +} +#hubwoo-enroll { + padding: 20px !important; + background: #f8f8f8; + width: 100% !important; +} +#hubwoo-enroll .form-table { + background-color: #ffffff; + border: 1px solid #e3e3e3; + border-bottom: none; +} +.hubwoo-adv-table-app-btn { + background: #fff; + padding: 15px 10px; + border: 1px solid #e3e3e3; + border-top: none; +} +form#hubwoo-enroll .submit { + margin-top: 25px; + padding-bottom: 0; + margin-bottom: 5px; +} +#hubwoo-enroll h2 { + margin-bottom: 18px; +} +.hubwoo-advanced-settings__form-wrap { + margin-bottom: 45px; +} +.hubwoo-advanced-settings__form-wrap:last-child { + margin-bottom: 0; +} +form#hubwoo-enroll .submit { + margin-top: 20px; + padding-top: 0; +} +.hubwoo-adv-table-app-btn .hubwoo-add-action { + margin: 0; + padding: 4px 12px; + min-width: 80px; +} +.hubwoo-abncart-setup-form--d th { + padding-left: 0; +} +.connect-list { + list-style: disc; + margin-left: 20px; + font-size: 16px; +} +/** HubSpot Deals **/ +.hubwoo-deal-wrap-con__store { + display: none; +} + +.hubwoo-deal-wrap-con__store td { + padding: 10px; + font-size: 16px; + +} +.hubwoo-deal-wrap-con__store th { + font-weight: 600; +} +.hubwoo-deal-head-form h2 { + display: none; +} + +/** Error Tracking CSS **/ +.hubwoo-et-wrap .hubwoo-connect-form-header h2 { + line-height: 1.6; + margin: 0; + font-size: 20px; +} +.hubwoo-deal-wrap-con__store { + width: 100% !important; +} +.hubwoo-right { + float: right; +} + +.hubwoo-btn--primary.hubwoo-btn--disconnect { + text-align: center; + text-transform: unset; + font-size: 14px; +} +/*================================================ += End Dashboard Section Design = +=================================================*/ + + + +@media screen and (max-width: 767px) { + .hubwoo-db__box.hubwoo-db__box--info{ + max-width: 100%; + } + .hubwoo-db__strip--infoCon { + justify-content: center; + } + .hubwoo-db__strip-row-content { + margin-bottom: 10px; + } + .hubwoo-db__strip-row-content, + .hubwoo-db__strip--infoCon .mwb-heb-wlcm__btn-wrap { + max-width: 100%; + text-align: center; + } + .hubwoo-btn--primary.hubwoo-btn--dashboard.hubwoo-btn--dashboard-chat { + margin: 20px 0; + } + .hubwoo-db__box-full.box-services { + text-align: center; + } + .hubwoo-btn--primary.hubwoo-btn--dashboard.hubwoo-btn--dashboard-chat { + margin: 20px 0; + } + .hubwoo-btn--primary.hubwoo-btn--dashboard { + min-width: 190px; + padding: 15px 6px; + font-size: 13px; + } +} + +/*========================================= += Onboarding Section = +==========================================*/ +.hubwoo-onboard-suburb-label{ + margin: 15px 0px; +} +.onboard-spinner { + display: none; + text-align: center; +} +.onboard-spinner span { + font-size: 28px; +} +.hubwoo-onboarding-email__items>span { + font-size:14px; +} +.hubwoo-onboarding-email__body-content { + margin: auto 20%; + max-width: 545px; + padding-top: 10px; +} +.hubwoo-onboard-notice { + padding: 10px 17px; + color: #2d3e50; + font-weight: 600; + font-size: 16px; + border-left: 2px solid #fd8567; + display: none; + box-shadow: rgba(61, 61, 61, 0.08) 0px 3px 10px 0px; +} +.hubwoo-onboarding-email__items label { + display: block; + font-size: 14px; + font-weight: 600; + margin-bottom: 10px; +} +.hubwoo-onboarding-email__items { + margin-bottom: 4%; + position: relative; +} + +.hubwoo-onboarding-email__items .hubwoo-onboard-img { + position: absolute; + top: 55%; + right: -30px; + display: none; +} +.hubwoo-onboarding-email__butttons { + margin-top: 50px; +} +.hubwoo-onboarding-email__butttons { + text-align: center; +} +.hubwoo-form-control { + background-color: #F6F8FA!important; + border: 1px solid #D3DBE5 !important; + display: block; + padding: 10px 19px !important; + width: 100%; + line-height: 1.5 !important; + max-width: 100% !important; +} +.hubwoo-form-control-flname { + background-color: #F6F8FA!important; + border: 1px solid #D3DBE5 !important; + display: block; + padding: 10px 19px !important; + width: 100%; + line-height: 1.5 !important; + max-width: 100% !important; +} +.hubwoo-onboarding-email__items.flname { + display: inline-block; + width: 100%; + max-width: 49%; +} + +.hubwoo_register.hidefield { + display: none; +} + +.hubwoo-onboarding-message { + display: block; + font-size: 14px; + color: #ff0000; +} + +.hubwoo-onboarding-skip--link { + margin-top: 15px; +} +.hubwoo-onboarding-skip--link a { + color: #000000; + text-decoration: none; + font-size: 14px; +} +.hubwoo-nav ul { + position: relative; +} +.hubwoo-nav ul .hubwoo-tabs:last-child { + position: absolute; + right: 26px; +} +.hubwoo-db__counter { + align-items: center; + border-radius: 4px; + border: 1px solid #dddddd; + box-shadow: rgba(61, 61, 61, 0.17) 0px 3px 10px 0px; + margin-top: 70px; + padding: 70px 20px 45px 20px; + text-align: center; + width: 100%; +} +.hubwoo-db__counter-column { + max-width: 31%; + flex: 0 0 31%; +} +.hubwoo-db__counter-title { + font-size: 14px; + color: #000; + font-weight: 600; + text-transform: uppercase; + margin: 0; +} +.hubwoo-db__counter-number { + margin: 0; + font-size: 50px; + line-height: 1.5; + color: #00BDA5!important; + font-weight: normal; +} + +.hubwoo-db__counter-number > a { + color: #00BDA5!important; + text-decoration: none; +} + +.hubwoo-db__counter-desc { + font-size: 14px; + color: #737373; +} + +.hubwoo-db__counter-desc > a { + text-decoration: none; + color: #737373; +} +.hubwoo-db__counter-button { + background-color: #E7E7E7; + border-radius: 5px; + color: #434343; + display: inline-block; + font-size: 14px; + font-style: italic; + padding: 8px 20px; + text-decoration: none; +} +.hubwoo-db__counter-button:hover, +.hubwoo-db__counter-button:focus{ + color: #434343; +} +.hubwoo-db__counter-button--wrap { + margin-top: 50px; +} +.hubwoo-box-card.hubwoo-box-n-card .hubwoo-box-n-card { + flex-grow: 1; +} +.hubwoo-onboard-suburb { + margin-left: 2%; +} +.hubwoo-onboard-suburb p { + font-size: 16px +} +/*===== End of onboarding emails ======*/ + +/*===== Order Edit Page ======*/ +.hubwoo-action-icon { + display: inline-flex; +} +th#hubwoo-deal-sync{ + text-align:center; +} +.hubwoo-deal-sync { + position: relative; +} +.hs-action-active { + display: block; +} +.tooltip { + position: absolute; + border-radius:4px; + padding: 6px 12px; + font-family: arial; + font-size: 11px; + z-index: 55; + text-shadow: 0px 1px 1px #000; + background: #1e1e1e; + color: #f7f7f7; + border-radius: 5px; + max-width: 85px; + text-align: center; +} +.tooltip:before { + content: ''; + position: absolute; + width: 0px; + top: -7px; + display: block; + left: 45%; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #1e1e1e; +} +.hubwoo-contact-ac:before{ + left:70px !important; +} +.hubwoo-deal-ac:before{ + left:110px !important; +} +a.hubwoo-action-icon { + position: relative; +} +.hubwoo-action-tool { + min-width: none!important; + background: #252a2d !important; + color: #ffffff !important; + text-align: center; + font-size: 11px; + left: 0; + right: 0; + padding: 10px 10px!important; +} +.hubwoo-action-tool:before { + content: ''; + position: absolute; + width: 0px; + top: -10px; + display: block; + left: 110px; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #252a2d!important; +} +.hubwoo-action-tool p { + color: #ffffff; + font-size: 12px; +} +a.hubwoo-action-icon > img { + width: 32px; +} + + + +/*deactivation pop-up css codee*/ +/*//deactivation screen*/ +.mwb-g-modal__cover { + background-color: rgba(0, 0, 0, 0.2); + bottom: 0; + display: none; + left: 0; + position: fixed; + right: 0; + top: 0; +} + +.mwb-g-modal__close { + cursor: pointer; + font-size: 24px; + font-weight: 600; + position: absolute; + right: 7px; + top: 3px; + transform: rotate(45deg); +} + +.mwb-g-modal__message { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + color: #053500; + left: -200%; + max-width: 600px; + min-height: 50px; + padding: 15px 20px; + position: fixed; + text-align: center; + top: 50%; + transform: translate(-50%, -50%); + transition: centre 1.2s linear; + width: 80%; +} + +.show-g_modal_cover { + display: block; +} + +.show-g_modal_message { + left: 50%; +} + +.mwb-g-modal__content__header { + margin: auto; +} + +/* Additional fixes. */ +.mwb-g-modal__content { + margin-bottom: -80px; +} + +.mwb-g-modal iframe { + height: 536px !important; +} + +/*===== End of Order Edit Page ======*/ + + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/index.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/index.php new file mode 100644 index 00000000..0de7bcdd --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/css/index.php @@ -0,0 +1,2 @@ + + + + + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Documentation.svg b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Documentation.svg new file mode 100644 index 00000000..0ecff0eb --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Documentation.svg @@ -0,0 +1,4 @@ + + + + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Support.svg b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Support.svg new file mode 100644 index 00000000..18541242 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/Support.svg @@ -0,0 +1,3 @@ + + + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/checked.png b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/images/checked.png new file mode 100644 index 0000000000000000000000000000000000000000..cabbdf37ce0f8727d44d2fa79b93aace7d695648 GIT binary patch literal 2247 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

wNq9pT@wyI-=j^OUaBWPwzfyd|X~k9tix;pAZn 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 z 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

E_}N$AEai9nema36Lrq_<_*UBy)Qpq3XJ8 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

Ik)n^)I-{x{S@%s_OS2qt)dKRzBCVWyC`@sI_5X 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 nb@L2R{wrhJOO").css({position:"fixed",top:0,left:-1*h(E).scrollLeft(),height:1,width:1, +overflow:"hidden"}).append(h("

").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(h("
").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,n.__browser);a.oScroll.iBarWidth=n.__browser.barWidth} +function hb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==e;)a.hasOwnProperty(d)&&(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ea(a,b){var c=n.defaults.column,d=a.aoColumns.length,c=h.extend({},n.models.oColumn,c,{nTh:b?b:H.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},n.models.oSearch,c[d]);ka(a,d,h(b).data())}function ka(a,b,c){var b=a.aoColumns[b], +d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(fb(c),J(n.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),h.extend(b,c),F(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),F(b,c,"aDataSort"));var g=b.mData,j=S(g),i=b.mRender? +S(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return N(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone, +b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function $(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Fa(a);for(var c=0,d=b.length;cq[f])d(l.length+q[f],m);else if("string"=== +typeof q[f]){j=0;for(i=l.length;jb&&a[e]--; -1!=d&&c===k&&a.splice(d, +1)}function da(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ia(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c").appendTo(g));b=0;for(c=l.length;btr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(m.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(m.sFooterTH);if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);var g=a._iDisplayStart,m=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!lb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:m;for(j=j?0:g;j",{"class":e?d[0]:""}).append(h("",{valign:"top",colSpan:V(a),"class":a.oClasses.sRowEmpty}).html(c))[0];r(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ka(a),g,m,i]);r(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ka(a),g,m,i]);d=h(a.nTBody);d.children().detach(); +d.append(h(b));r(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&mb(a);d?ga(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;P(a);a._drawHold=!1}function nb(a){var b=a.oClasses,c=h(a.nTable),c=h("
").insertBefore(c),d=a.oFeatures,e=h("
",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore= +a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,m,l,q,k=0;k")[0];m=f[k+1];if("'"==m||'"'==m){l="";for(q=2;f[k+q]!=m;)l+=f[k+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(m=l.split("."),i.id=m[0].substr(1,m[0].length-1),i.className=m[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;k+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=ob(a);else if("f"==j&& +d.bFilter)g=pb(a);else if("r"==j&&d.bProcessing)g=qb(a);else if("t"==j)g=rb(a);else if("i"==j&&d.bInfo)g=sb(a);else if("p"==j&&d.bPaginate)g=tb(a);else if(0!==n.ext.feature.length){i=n.ext.feature;q=0;for(m=i.length;q',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_", +g):j+g,b=h("
",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("
").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).on("change.DT",function(){Ra(a,h(this).val());P(a)});h(a.nTable).on("length.dt.DT",function(b,c,d){a=== +c&&h("select",i).val(d)});return i[0]}function tb(a){var b=a.sPaginationType,c=n.ext.pager[b],d="function"===typeof c,e=function(a){P(a)},b=h("
").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;lf&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]} +function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");r(a,null,"processing",[a,b])}function rb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),m=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("
",{"class":f.sScrollWrapper}).append(h("
",{"class":f.sScrollHead}).css({overflow:"hidden", +position:"relative",border:0,width:d?!d?null:v(d):"100%"}).append(h("
",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("
",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:v(d)}).append(b));l&&i.append(h("
",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:v(d):"100%"}).append(h("
", +{"class":f.sScrollFootInner}).append(m.removeAttr("id").css("margin-left",0).append("bottom"===j?g:null).append(b.children("tfoot")))));var b=i.children(),k=b[0],f=b[1],t=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(t.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:la,sName:"scrolling"});return i[0]}function la(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth, +f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,m=j.children("table"),j=a.nScrollBody,l=h(j),q=j.style,t=h(a.nScrollFoot).children("div"),n=t.children("table"),o=h(a.nTHead),p=h(a.nTable),s=p[0],r=s.style,u=a.nTFoot?h(a.nTFoot):null,x=a.oBrowser,U=x.bScrollOversize,Xb=D(a.aoColumns,"nTh"),Q,L,R,w,Ua=[],y=[],z=[],A=[],B,C=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};L=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!== +L&&a.scrollBarVis!==k)a.scrollBarVis=L,$(a);else{a.scrollBarVis=L;p.children("thead, tfoot").remove();u&&(R=u.clone().prependTo(p),Q=u.find("tr"),R=R.find("tr"));w=o.clone().prependTo(p);o=o.find("tr");L=w.find("tr");w.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(ra(a,w),function(b,c){B=aa(a,b);c.style.width=a.aoColumns[B].sWidth});u&&I(function(a){a.style.width=""},R);f=p.outerWidth();if(""===c){r.width="100%";if(U&&(p.find("tbody").height()>j.offsetHeight|| +"scroll"==l.css("overflow-y")))r.width=v(p.outerWidth()-b);f=p.outerWidth()}else""!==d&&(r.width=v(d),f=p.outerWidth());I(C,L);I(function(a){z.push(a.innerHTML);Ua.push(v(h(a).css("width")))},L);I(function(a,b){if(h.inArray(a,Xb)!==-1)a.style.width=Ua[b]},o);h(L).height(0);u&&(I(C,R),I(function(a){A.push(a.innerHTML);y.push(v(h(a).css("width")))},R),I(function(a,b){a.style.width=y[b]},Q),h(R).height(0));I(function(a,b){a.innerHTML='
'+z[b]+"
";a.childNodes[0].style.height= +"0";a.childNodes[0].style.overflow="hidden";a.style.width=Ua[b]},L);u&&I(function(a,b){a.innerHTML='
'+A[b]+"
";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=y[b]},R);if(p.outerWidth()j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(U&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=v(Q-b);(""===c||""!==d)&&K(a,1,"Possible column misalignment",6)}else Q="100%";q.width=v(Q); +g.width=v(Q);u&&(a.nScrollFoot.style.width=v(Q));!e&&U&&(q.height=v(s.offsetHeight+b));c=p.outerWidth();m[0].style.width=v(c);i.width=v(c);d=p.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+(x.bScrollbarLeft?"Left":"Right");i[e]=d?b+"px":"0px";u&&(n[0].style.width=v(c),t[0].style.width=v(c),t[0].style[e]=d?b+"px":"0px");p.children("colgroup").insertBefore(p.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function I(a,b,c){for(var d=0,e=0, +f=b.length,g,j;e").appendTo(j.find("tbody"));j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");m=ra(a,j.find("thead")[0]);for(n=0;n").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(n=0;n").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()").css("width",v(a)).appendTo(b||H.body),d=c[0].offsetWidth;c.remove();return d}function Fb(a, +b){var c=Gb(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Gb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;fd&&(d=c.length,e=f);return e}function v(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function X(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var m=[];f=function(a){a.length&& +!h.isArray(a[0])?m.push(a):h.merge(m,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;ae?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return ce?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,n=f[a]._aSortData,o=f[b]._aSortData;for(j=0;jg?1:0})}a.bSorted=!0}function Ib(a){for(var b,c,d=a.aoColumns,e=X(a),a=a.oLanguage.oAria,f=0,g=d.length;f/g,"");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0e?e+1:3));e=0;for(f=d.length;ee?e+1:3))}a.aLastSort=d}function Hb(a,b){var c=a.aoColumns[b],d=n.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ba(a,b)));for(var f,g=n.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j=f.length?[0,c[1]]:c)}));b.search!==k&&h.extend(a.oPreviousSearch,Bb(b.search));if(b.columns){d=0;for(e=b.columns.length;d=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Na(a,b){var c=a.renderer,d=n.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"=== +typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ia(a,b){var c=[],c=Kb.numbers_length,d=Math.floor(c/2);b<=c?c=Y(0,b):a<=d?(c=Y(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=Y(b-(c-2),b):(c=Y(a-d+2,a+d-1),c.push("ellipsis"),c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function Da(a){h.each({num:function(b){return za(b,a)},"num-fmt":function(b){return za(b,a,Ya)},"html-num":function(b){return za(b, +a,Aa)},"html-num-fmt":function(b){return za(b,a,Aa,Ya)}},function(b,c){x.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(x.type.search[b+a]=x.type.search.html)})}function Lb(a){return function(){var b=[ya(this[n.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return n.ext.internal[a].apply(this,b)}}var n=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new s(ya(this[x.iApiIndex])):new s(this)}; +this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&la(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a, +b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data(): +c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]}; +this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return ya(this[x.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust(); +(d===k||d)&&h.draw();return 0};this.fnVersionCheck=x.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=x.internal;for(var e in n.ext.internal)e&&(this[e]=Lb(e));this.each(function(){var e={},g=1").appendTo(q)); +p.nTHead=b[0];b=q.children("tbody");b.length===0&&(b=h("").appendTo(q));p.nTBody=b[0];b=q.children("tfoot");if(b.length===0&&a.length>0&&(p.oScroll.sX!==""||p.oScroll.sY!==""))b=h("").appendTo(q);if(b.length===0||b.children().length===0)q.addClass(u.sNoFooter);else if(b.length>0){p.nTFoot=b[0];ea(p.aoFooter,p.nTFoot)}if(g.aaData)for(j=0;j/g,Zb=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,$b=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Ya=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Nb=function(a){var b=parseInt(a,10);return!isNaN(b)&& +isFinite(a)?b:null},Ob=function(a,b){Za[b]||(Za[b]=RegExp(Qa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(Za[b],"."):a},$a=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Ob(a,b));c&&d&&(a=a.replace(Ya,""));return!isNaN(parseFloat(a))&&isFinite(a)},Pb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:$a(a.replace(Aa,""),b,c)?!0:null},D=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;ea.length)){b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d")[0],Wb=va.textContent!==k,Yb= +/<.*?>/g,Oa=n.util.throttle,Rb=[],w=Array.prototype,ac=function(a){var b,c,d=n.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};s=function(a,b){if(!(this instanceof +s))return new s(a,b);var c=[],d=function(a){(a=ac(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;ea?new s(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this);else for(var c=0,d=this.length;c").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=V(d),e.push(c[0]))};f(a,b);c._details&&c._details.detach();c._details=h(e); +c._detailsShow&&c._details.insertAfter(c.nTr)}return this});o(["row().child.show()","row().child().show()"],function(){Tb(this,!0);return this});o(["row().child.hide()","row().child().hide()"],function(){Tb(this,!1);return this});o(["row().child.remove()","row().child().remove()"],function(){db(this);return this});o("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var bc=/^([^:]+):(name|visIdx|visible)$/,Ub=function(a,b, +c,d,e){for(var c=[],d=0,f=e.length;d=0?b:g.length+b];if(typeof a==="function"){var e=Ba(c,f);return h.map(g,function(b,f){return a(f,Ub(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(bc): +"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],10);if(b<0){var n=h.map(g,function(a,b){return a.bVisible?b:null});return[n[n.length+b]]}return[aa(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)}, +1);c.selector.cols=a;c.selector.opts=b;return c});u("columns().header()","column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});u("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});u("columns().data()","column().data()",function(){return this.iterator("column-rows",Ub,1)});u("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData}, +1)});u("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ja(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});u("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ja(a.aoData,e,"anCells",b)},1)});u("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData, +i,m,l;if(a!==k&&g.bVisible!==a){if(a){var n=h.inArray(!0,D(f,"bVisible"),c+1);i=0;for(m=j.length;id;return!0};n.isDataTable= +n.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;if(a instanceof n.Api)return!0;h.each(n.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?h("table",e.nScrollFoot)[0]:null;if(e.nTable===b||f===b||g===b)c=!0});return c};n.tables=n.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(n.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new s(c):c};n.camelToHungarian=J;o("$()",function(a,b){var c= +this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){o(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=h.map(a[0].split(/\s/),function(a){return!a.match(/\.dt\b/)?a+".dt":a}).join(" ");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});o("clear()",function(){return this.iterator("table",function(a){oa(a)})});o("settings()",function(){return new s(this.context,this.context)});o("init()",function(){var a= +this.context;return a.length?a[0].oInit:null});o("data()",function(){return this.iterator("table",function(a){return D(a.aoData,"_aData")}).flatten()});o("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),o;b.bDestroying=!0;r(b,"aoDestroyCallback","destroy",[b]);a||(new s(b)).columns().visible(!0);k.off(".DT").find(":not(tbody *)").off(".DT"); +h(E).off(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j));b.aaSorting=[];b.aaSortingFixed=[];wa(b);h(l).removeClass(b.asStripeClasses.join(" "));h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width",b.sDestroyWidth).removeClass(d.sTable), +(o=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%o])}));c=h.inArray(b,n.settings);-1!==c&&n.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){o(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,m){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,m)})})});o("i18n()",function(a,b,c){var d=this.context[0],a=S(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]: +a._);return a.replace("%d",c)});n.version="1.10.18";n.settings=[];n.models={};n.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};n.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};n.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null, +sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};n.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1, +bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+ +a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"}, +oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({}, +n.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};Z(n.defaults);n.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null}; +Z(n.defaults.column);n.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[], +aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button", +iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal: +this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};n.ext=x={buttons:{}, +classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:n.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:n.version};h.extend(x,{afnFiltering:x.search,aTypes:x.type.detect,ofnSearch:x.type.search,oSort:x.type.order,afnSortData:x.order,aoFeatures:x.feature,oApi:x.internal,oStdClasses:x.classes,oPagination:x.pager}); +h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled", +sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"", +sJUIHeader:"",sJUIFooter:""});var Kb=n.ext.pager;h.extend(Kb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ia(a,b)]},simple_numbers:function(a,b){return["previous",ia(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ia(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ia(a,b),"last"]},_numbers:ia,numbers_length:7});h.extend(!0,n.ext.renderer,{pageButton:{_:function(a,b,c,d,e, +f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},m,l,n=0,o=function(b,d){var k,s,u,r,v=function(b){Ta(a,b.data.action,true)};k=0;for(s=d.length;k").appendTo(b);o(u,r)}else{m=null;l="";switch(r){case "ellipsis":b.append('');break;case "first":m=j.sFirst;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":m=j.sPrevious;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":m= +j.sNext;l=r+(e",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[r],"data-dt-idx":n,tabindex:a.iTabIndex,id:c===0&&typeof r==="string"?a.sTableId+"_"+r:null}).html(m).appendTo(b);Wa(u,{action:r},v);n++}}}},s;try{s=h(b).find(H.activeElement).data("dt-idx")}catch(u){}o(h(b).empty(),d);s!==k&&h(b).find("[data-dt-idx="+ +s+"]").focus()}}});h.extend(n.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return $a(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&!Zb.test(a))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date":null},function(a,b){var c=b.oLanguage.sDecimal;return $a(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Pb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Pb(a,c,!0)?"html-num-fmt"+c:null},function(a){return M(a)|| +"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(n.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Mb," ").replace(Aa,""):""},string:function(a){return M(a)?a:"string"===typeof a?a.replace(Mb," "):a}});var za=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Ob(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(x.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return M(a)? +"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return ab?1:0},"string-desc":function(a,b){return ab?-1:0}});Da("");h.extend(!0,n.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc: +c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("
").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]== +"asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Vb=function(a){return"string"===typeof a?a.replace(//g,">").replace(/"/g,"""):a};n.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Vb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g, +a)+f+(e||"")}}},text:function(){return{display:Vb}}};h.extend(n.ext.internal,{_fnExternApiFunc:Lb,_fnBuildAjax:sa,_fnAjaxUpdate:lb,_fnAjaxParameters:ub,_fnAjaxUpdateDraw:vb,_fnAjaxDataSrc:ta,_fnAddColumn:Ea,_fnColumnOptions:ka,_fnAdjustColumnSizing:$,_fnVisibleToColumnIndex:aa,_fnColumnIndexToVisible:ba,_fnVisbleColumns:V,_fnGetColumns:ma,_fnColumnTypes:Ga,_fnApplyColumnDefs:ib,_fnHungarianMap:Z,_fnCamelToHungarian:J,_fnLanguageCompat:Ca,_fnBrowserDetect:gb,_fnAddData:O,_fnAddTr:na,_fnNodeToDataIndex:function(a, +b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:jb,_fnSplitObjNotation:Ja,_fnGetObjectDataFn:S,_fnSetObjectDataFn:N,_fnGetDataMaster:Ka,_fnClearTable:oa,_fnDeleteIndex:pa,_fnInvalidate:da,_fnGetRowElements:Ia,_fnCreateTr:Ha,_fnBuildHead:kb,_fnDrawHead:fa,_fnDraw:P,_fnReDraw:T,_fnAddOptionsHtml:nb,_fnDetectHeader:ea,_fnGetUniqueThs:ra,_fnFeatureHtmlFilter:pb,_fnFilterComplete:ga,_fnFilterCustom:yb, +_fnFilterColumn:xb,_fnFilter:wb,_fnFilterCreateSearch:Pa,_fnEscapeRegex:Qa,_fnFilterData:zb,_fnFeatureHtmlInfo:sb,_fnUpdateInfo:Cb,_fnInfoMacros:Db,_fnInitialise:ha,_fnInitComplete:ua,_fnLengthChange:Ra,_fnFeatureHtmlLength:ob,_fnFeatureHtmlPaginate:tb,_fnPageChange:Ta,_fnFeatureHtmlProcessing:qb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:rb,_fnScrollDraw:la,_fnApplyToChildren:I,_fnCalculateColumnWidths:Fa,_fnThrottle:Oa,_fnConvertToWidth:Eb,_fnGetWidestNode:Fb,_fnGetMaxLenString:Gb,_fnStringToCss:v, +_fnSortFlatten:X,_fnSort:mb,_fnSortAria:Ib,_fnSortListener:Va,_fnSortAttachListener:Ma,_fnSortingClasses:wa,_fnSortData:Hb,_fnSaveState:xa,_fnLoadState:Jb,_fnSettingsFromNode:ya,_fnLog:K,_fnMap:F,_fnBindAction:Wa,_fnCallbackReg:z,_fnCallbackFire:r,_fnLengthOverflow:Sa,_fnRenderer:Na,_fnDataSource:y,_fnRowAttributes:La,_fnExtend:Xa,_fnCalculateEnd:function(){}});h.fn.dataTable=n;n.$=h;h.fn.dataTableSettings=n.settings;h.fn.dataTableExt=n.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()}; +h.each(n,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable}); + +/*! + Responsive 2.2.7 + 2014-2021 SpryMedia Ltd - datatables.net/license +*/ +(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(m){return d(m,window,document)}):"object"===typeof exports?module.exports=function(m,l){m||(m=window);if(!l||!l.fn.dataTable)l=require("datatables.net")(m,l).$;return d(l,m,m.document)}:d(jQuery,window,document)})(function(d,m,l,q){function t(a,b,c){var e=b+"-"+c;if(n[e])return n[e];for(var d=[],a=a.cell(b,c).node().childNodes,b=0,c=a.length;btd, >th", +c).each(function(c){c=b.column.index("toData",c);!1===a.s.current[c]&&d(this).css("display","none")})});b.on("destroy.dtr",function(){b.off(".dtr");d(b.table().body()).off(".dtr");d(m).off("resize.dtr orientationchange.dtr");b.cells(".dtr-control").nodes().to$().removeClass("dtr-control");d.each(a.s.current,function(b,c){!1===c&&a._setColumnVis(b,!0)})});this.c.breakpoints.sort(function(a,b){return a.widthb.width?-1:0});this._classLogic();this._resizeAuto();c=this.c.details;!1!== +c.type&&(a._detailsInit(),b.on("column-visibility.dtr",function(){a._timer&&clearTimeout(a._timer);a._timer=setTimeout(function(){a._timer=null;a._classLogic();a._resizeAuto();a._resize(!0);a._redrawChildren()},100)}),b.on("draw.dtr",function(){a._redrawChildren()}),d(b.table().node()).addClass("dtr-"+c.type));b.on("column-reorder.dtr",function(){a._classLogic();a._resizeAuto();a._resize(true)});b.on("column-sizing.dtr",function(){a._resizeAuto();a._resize()});b.on("preXhr.dtr",function(){var c=[]; +b.rows().every(function(){this.child.isShown()&&c.push(this.id(true))});b.one("draw.dtr",function(){a._resizeAuto();a._resize();b.rows(c).every(function(){a._detailsDisplay(this,false)})})});b.on("draw.dtr",function(){a._controlClass()}).on("init.dtr",function(c){if(c.namespace==="dt"){a._resizeAuto();a._resize();d.inArray(false,a.s.current)&&b.columns.adjust()}});this._resize()},_columnsVisiblity:function(a){var b=this.s.dt,c=this.s.columns,e,f,g=c.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a, +b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),j=d.map(c,function(c,e){return!1===b.column(e).visible()?"not-visible":c.auto&&null===c.minWidth?!1:!0===c.auto?"-":-1!==d.inArray(a,c.includeIn)}),h=0;e=0;for(f=j.length;eh-c[k].minWidth?(s=!0,j[k]=!1):j[k]=!0,h-=c[k].minWidth)}g=!1;e=0;for(f=c.length;e=k&&f(c,b[d].name)}else{if("not-"===g){d=0;for(g=b.length;d").append(j).appendTo(f)}d("").append(g).appendTo(e);"inline"===this.c.details.type&&d(c).addClass("dtr-inline collapsed");d(c).find("[name]").removeAttr("name");d(c).css("position","relative");c=d("
").css({width:1,height:1,overflow:"hidden",clear:"both"}).append(c);c.insertBefore(a.table().node());g.each(function(d){d=a.column.index("fromVisible",d);b[d].minWidth=this.offsetWidth||0});c.remove()}},_responsiveOnlyHidden:function(){var a=this.s.dt;return d.map(this.s.current, +function(b,d){return!1===a.column(d).visible()?!0:b})},_setColumnVis:function(a,b){var c=this.s.dt,e=b?"":"none";d(c.column(a).header()).css("display",e);d(c.column(a).footer()).css("display",e);c.column(a).nodes().to$().css("display",e);d.isEmptyObject(n)||c.cells(null,a).indexes().each(function(a){r(c,a.row,a.column)})},_tabIndexes:function(){var a=this.s.dt,b=a.cells({page:"current"}).nodes().to$(),c=a.settings()[0],e=this.c.details.target;b.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]"); +"number"===typeof e?a.cells(null,e,{page:"current"}).nodes().to$().attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1):("td:first-child, th:first-child"===e&&(e=">td:first-child, >th:first-child"),d(e,a.rows({page:"current"}).nodes()).attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1))}});i.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];i.display={childRow:function(a,b,c){if(b){if(d(a.node()).hasClass("parent"))return a.child(c(), +"child").show(),!0}else{if(a.child.isShown())return a.child(!1),d(a.node()).removeClass("parent"),!1;a.child(c(),"child").show();d(a.node()).addClass("parent");return!0}},childRowImmediate:function(a,b,c){if(!b&&a.child.isShown()||!a.responsive.hasHidden())return a.child(!1),d(a.node()).removeClass("parent"),!1;a.child(c(),"child").show();d(a.node()).addClass("parent");return!0},modal:function(a){return function(b,c,e){if(c)d("div.dtr-modal-content").empty().append(e());else{var f=function(){g.remove(); +d(l).off("keypress.dtr")},g=d('
').append(d('
').append(d('
').append(e())).append(d('
×
').click(function(){f()}))).append(d('
').click(function(){f()})).appendTo("body");d(l).on("keyup.dtr",function(a){27===a.keyCode&&(a.stopPropagation(),f())})}a&&a.header&&d("div.dtr-modal-content").prepend("

"+a.header(b)+"

")}}};var n={};i.renderer= +{listHiddenNodes:function(){return function(a,b,c){var e=d('
    '),f=!1;d.each(c,function(b,c){c.hidden&&(d("
  • '+c.title+"
  • ").append(d('').append(t(a,c.rowIndex,c.columnIndex))).appendTo(e),f=!0)});return f?e:!1}},listHidden:function(){return function(a, +b,c){return(a=d.map(c,function(a){var b=a.className?'class="'+a.className+'"':"";return a.hidden?"
  • '+a.title+' '+a.data+"
  • ":""}).join(""))?d('
      ').append(a):!1}},tableAll:function(a){a=d.extend({tableClass:""},a);return function(b,c,e){b=d.map(e,function(a){return"'+a.title+": "+a.data+""}).join("");return d('').append(b)}}};i.defaults={breakpoints:i.breakpoints,auto:!0,details:{display:i.display.childRow,renderer:i.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var p=d.fn.dataTable.Api;p.register("responsive()",function(){return this});p.register("responsive.index()", +function(a){a=d(a);return{column:a.data("dtr-index"),row:a.parent().data("dtr-index")}});p.register("responsive.rebuild()",function(){return this.iterator("table",function(a){a._responsive&&a._responsive._classLogic()})});p.register("responsive.recalc()",function(){return this.iterator("table",function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});p.register("responsive.hasHidden()",function(){var a=this.context[0];return a._responsive?-1!==d.inArray(!1,a._responsive._responsiveOnlyHidden()): +!1});p.registerPlural("columns().responsiveHidden()","column().responsiveHidden()",function(){return this.iterator("column",function(a,b){return a._responsive?a._responsive._responsiveOnlyHidden()[b]:!1},1)});i.version="2.2.7";d.fn.dataTable.Responsive=i;d.fn.DataTable.Responsive=i;d(l).on("preInit.dt.dtr",function(a,b){if("dt"===a.namespace&&(d(b.nTable).hasClass("responsive")||d(b.nTable).hasClass("dt-responsive")||b.oInit.responsive||o.defaults.responsive)){var c=b.oInit.responsive;!1!==c&&new i(b, +d.isPlainObject(c)?c:{})}});return i}); + +/*! + DataTables styling wrapper for FixedColumns + ©2018 SpryMedia Ltd - datatables.net/license +*/ +(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-dt","datatables.net-fixedcolumns"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net-dt")(a,b).$;b.fn.dataTable.FixedColumns||require("datatables.net-fixedcolumns")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c){return c.fn.dataTable}); diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin-global.js b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin-global.js new file mode 100644 index 00000000..1e128aef --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin-global.js @@ -0,0 +1,68 @@ +const ajaxUrl = hubwooi18n.ajaxUrl; +const hubwooSecurity = hubwooi18n.hubwooSecurity; + +jQuery( document ).ready(function($){ + let href = ''; + //deactivation screen + // Deactivate Modal Open. + jQuery('#deactivate-makewebbetter-hubspot-for-woocommerce').on('click', function(evt) { + evt.preventDefault(); + href = jQuery(this).attr( 'href' ); + jQuery('.mwb-g-modal__cover').addClass('show-g_modal_cover'); + jQuery('.mwb-g-modal__message').addClass('show-g_modal_message'); + }); + + // Deactivate Modal close. + jQuery('.mwb-w-modal__cover, .mwb-g-modal__close').on('click', function() { + jQuery('.mwb-g-modal__cover').removeClass('show-g_modal_cover'); + jQuery('.mwb-g-modal__message').removeClass('show-g_modal_message'); + + if ( href.length > 0 ) { + window.location.replace( href ); + } + }); + + jQuery(document).on( + 'click', + '.hubwoo-hide-rev-notice', + async function() { + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_hide_rev_notice', + hubwooSecurity, + }, + dataType : 'json', + } + ); + + if( true == response.status ) { + jQuery('.hubwoo-review-notice-wrapper').hide(); + } + } + ); + + jQuery(document).on( + 'click', + '.hubwoo-hide-hpos-notice', + async function() { + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_hide_hpos_notice', + hubwooSecurity, + }, + dataType : 'json', + } + ); + + if( true == response.status ) { + jQuery('.hubwoo-hpos-notice-wrapper').hide(); + } + } + ); +}); \ No newline at end of file diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin.js b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin.js new file mode 100644 index 00000000..2178c0b2 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/hubwoo-admin.js @@ -0,0 +1,2192 @@ +( function( $ ) { + 'use strict'; + + // i18n variables + const ajaxUrl = hubwooi18n.ajaxUrl; + const hubwooWentWrong = hubwooi18n.hubwooWentWrong; + const hubwooMailSuccess = hubwooi18n.hubwooMailSuccess; + const hubwooMailFailure = hubwooi18n.hubwooMailFailure; + const hubwooSecurity = hubwooi18n.hubwooSecurity; + const hubwooAccountSwitch = hubwooi18n.hubwooAccountSwitch; + const hubwooOcsSuccess = hubwooi18n.hubwooOcsSuccess; + const hubwooOcsError = hubwooi18n.hubwooOcsError; + const hubwooOverviewTab = hubwooi18n.hubwooOverviewTab; + const dataCounter = { + percentage: 0, + totalCount: 0, + totalGrpPrCreated: 0, + setupRunning: false + }; + + jQuery( document ).ready( + function() { + const createLists = ( list ) => { + return new Promise( + ( resolve, reject ) => { + const listData = { + action: 'hubwoo_create_list', + listDetails: list, + hubwooSecurity, + }; + jQuery.ajax( { url: ajaxUrl, type: 'POST', data: listData } ) + .then( + ( listResponse ) => { + if ( listResponse != null ) { + const response = jQuery.parseJSON( listResponse ); + const responseCode = response.status_code; + if ( responseCode == 200 || responseCode == 409 ) { + dataCounter.totalGrpPrCreated += 1; + dataCounter.percentage = ( ( dataCounter.totalGrpPrCreated / dataCounter.totalCount ) * 100 ).toFixed( 0 ); + updateProgressBar( dataCounter.percentage ); + resolve( response ); + } else { + reject( response ); + } + } + }, + ); + }, + ); + }; + + const createGroupsToHS = ( groupName, type ) => { + let action = ''; + + if ( type == 'contact' ) { + action = 'hubwoo_create_property_group'; + } else if ( type == 'deal' ) { + action = 'hubwoo_deals_create_group'; + } + + const groupData = { + action, + createNow: 'group', + groupName, + hubwooSecurity, + }; + + return new Promise( + ( resolve, reject ) => { + jQuery.ajax( { url: ajaxUrl, type: 'POST', data: groupData } ) + .done( + ( groupResponse ) => { + const groupRes = jQuery.parseJSON( groupResponse ); + groupRes.name = groupName; + if ( groupRes.status_code == 201 || groupRes.status_code == 409 ) { + dataCounter.totalGrpPrCreated += 1; + dataCounter.percentage = ( ( dataCounter.totalGrpPrCreated / dataCounter.totalCount ) * 100 ).toFixed( 0 ); + updateProgressBar( dataCounter.percentage ); + resolve( groupRes ); + } else { + reject( groupRes ); + } + }, + ); + }, + ); + }; + + const createPropertiesToHS = ( dealProperty, type ) => { + let action = ''; + if ( type == 'contact' ) { + action = 'hubwoo_create_group_property'; + } else if ( type == 'deal' ) { + action = 'hubwoo_deals_create_property'; + } + + return new Promise( + ( resolve, reject ) => { + const createProperties = { + action, + propertyDetails: dealProperty, + hubwooSecurity, + }; + jQuery.ajax( { url: ajaxUrl, type: 'POST', data: createProperties } ) + .done( + function( propertyResponse ) { + const propRes = jQuery.parseJSON( propertyResponse ); + + if ( propRes.status_code == 201 ) { + dataCounter.totalGrpPrCreated += propRes.body.results.length; + dataCounter.percentage = ( ( dataCounter.totalGrpPrCreated / dataCounter.totalCount ) * 100 ).toFixed( 0 ); + updateProgressBar( dataCounter.percentage ); + resolve( propRes ); + } else if ( propRes.status_code == 207 ) { + dataCounter.totalGrpPrCreated += propRes.body.numErrors; + dataCounter.percentage = ( ( dataCounter.totalGrpPrCreated / dataCounter.totalCount ) * 100 ).toFixed( 0 ); + updateProgressBar( dataCounter.percentage ); + resolve( propRes ); + } else { + reject( propRes ); + } + }, + ); + }, + ); + }; + + const debounce = ( func, delay ) => { + let callDebounce; + + return function() { + const context = this; + const args = arguments; + clearTimeout( callDebounce ); + callDebounce = setTimeout( () => func.apply( context, args ), delay ); + }; + }; + + const trackInputCheckboxes = () => { + return { + hubwoo_customers_manual_sync: '.hubwoo-date-range', + hubwoo_abncart_delete_old_data: '.delete-after-date', + hubwoo_checkout_optin_enable: '#hubwoo_checkout_optin_label', + hubwoo_registeration_optin_enable: '#hubwoo_registeration_optin_label', + hubwoo_ecomm_order_date_allow: '.hubwoo-date-d-range', + }; + }; + + const arrayChunk = ( array, size ) => { + const tempArray = []; + + const length = array.length; + let initialIndex = 0, + maxLength = Math.round( length / size ), + lastIndex = size; + + for ( let index = 0; index < maxLength + 1; index += 1 ) { + const cutArr = array.slice( initialIndex, lastIndex ); + if ( cutArr.length > 0 ) { + tempArray.push( cutArr ); + } + initialIndex = lastIndex; + lastIndex += size; + } + + return tempArray; + }; + + const runEcommSetup = async () => { + + const totalProducts = jQuery( '.hubwoo-info' ).data( 'products' ); + await jQuery.ajax( { url: ajaxUrl, type: 'POST', data: { action: 'hubwoo_ecomm_setup', hubwooSecurity, process: 'start-products-sync' } } ); + if(dataCounter.setupRunning) { updateProgressBar( 95 ) } + let response = await jQuery.ajax( { url: ajaxUrl, type: 'POST', data: { action: 'hubwoo_ecomm_setup', hubwooSecurity, process: 'update-deal-stages' } } ); + + return response + } + + + const manageSpinText = ( job, type, result = 'none' ) => { + if ( type == 'add' ) { + job.addClass( 'fa' ); + job.removeClass( 'hubwoo-cr-btn' ); + job.removeClass( 'hubwoo-crd-btn' ); + job.addClass( 'fa-spinner' ); + job.addClass( 'fa-spin' ); + job.text( '' ); + } else if ( type == 'remove' ) { + job.removeClass( 'fa' ); + job.removeClass( 'fa-spinner' ); + job.removeClass( 'fa-spin' ); + job.addClass( 'hubwoo-cr-btn' ); + job.text( 'Created' ); + + if ( result == 'failed' ) { + job.addClass( 'hubwoo-crd-btn' ); + job.text( 'Create' ); + } + } + }; + + const updateProgressBar = ( percentage, mode = 1 ) => { + if ( mode == 1 ) { + jQuery( '.hubwoo-progress-bar' ).css( 'width', percentage + '%' ); + jQuery( '.hubwoo-progress-bar' ).html( percentage + '%' ); + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsSuccess ); + } else if ( mode == 2 ) { + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsError ); + jQuery( '.hubwoo-progress-bar' ).addClass( 'hubwoo-progress-error' ); + jQuery( '.hubwoo-progress-bar' ).css( 'width', '100%' ); + jQuery( '.hubwoo-progress-bar' ).html( 'Failed! Please check error log or contact support' ); + } + }; + + const capitalize = (s) => { + if (typeof s !== 'string') return '' + return s.charAt(0).toUpperCase() + s.slice(1) + } + + const transferScreen = async( screenKey, lastKey = undefined ) => { + let redirectUrl, + redirect = true, + currentPage = window.location.href; + + if ( lastKey == undefined ) { + lastKey = 'hubwoo_key'; + } + + if ( ! currentPage.includes( lastKey ) ) { + currentPage = jQuery( '.mwb-heb__nav-list-item:eq(0) a' ).attr( 'href' ); + } + redirectUrl = currentPage.substring( 0, currentPage.indexOf( lastKey ) ); + redirectUrl += lastKey; + + switch ( screenKey ) { + case 'move-to-grp-pr': + redirectUrl += '=grp-pr-setup'; + break; + case 'move-to-list': + redirectUrl += '=list-setup'; + break; + case 'move-to-sync': + redirectUrl += '=sync'; + break; + case 'move-to-pipeline': + redirectUrl += '=pipeline-setup'; + break; + case 'greet-to-dashboard': + await saveUpdates( { 'hubwoo_connection_setup_established': 1 } ); + redirectUrl += '=hubwoo-overview'; + break; + case 'move-to-dashboard': + redirectUrl += '=hubwoo-overview'; + break; + case 'skip-list-creation': + jQuery( '.hubwoo_pop_up_wrap' ).slideUp( 800 ); + redirect = lastKey != 'hubwoo_key' + ? false + : 'true' == await saveUpdates( { 'hubwoo_pro_lists_setup_completed': 1 } ) + ? true + : false; + break; + default: + location.reload(); + } + + if ( redirect ) { + window.location.href = redirectUrl; + } + }; + + const getCurrentUsersToSync = () => { + jQuery.post( + ajaxUrl, + { action: 'hubwoo_get_user_for_current_roles', hubwooSecurity }, + function( totalUsers ) { + let message = 'We have found ' + totalUsers + ' Users'; + + if ( jQuery( '#hubwoo_customers_manual_sync' ).is( ':checked' ) ) { + message += ` from ${ jQuery( '#hubwoo_users_from_date' ).val() } to ${ jQuery( '#hubwoo_users_upto_date' ).val() }`; + } + jQuery('#hubwoo-usr-spin').hide() + jQuery( '.hubwoo-ocs-btn-notice' ).text( message + ' ready to be synced over HubSpot' ); + if ( totalUsers > 0 ) { + jQuery( '.hubwoo-osc-instant-sync' ).attr( 'data-total_users', totalUsers ); + jQuery( '#hubwoo-osc-instant-sync' ).fadeIn(); + jQuery( '#hubwoo-osc-schedule-sync' ).hide(); + } else { + jQuery( '.hubwoo-ocs-btn-notice' ).delay( 1500 ).slideDown( 5000 ); + jQuery( '.hubwoo-ocs-btn-notice' ).text( 'We could not find any user / order, please try changing the filters' ); + jQuery( '#hubwoo-osc-instant-sync' ).hide(); + jQuery( '#hubwoo-osc-schedule-sync' ).hide(); + } + + if ( totalUsers > 500 ) { + jQuery( '#hubwoo-osc-schedule-sync' ).fadeIn(); + jQuery( '#hubwoo-osc-instant-sync' ).hide(); + } + + const userRoles = jQuery( '#hubwoo_customers_role_settings' ).val(); + + if ( userRoles === undefined || userRoles.length === 0 ) { + jQuery( '.hubwoo-ocs-btn-notice' ).hide(); + jQuery( '#hubwoo-osc-instant-sync' ).hide(); + jQuery( '#hubwoo-osc-schedule-sync' ).hide(); + } + }, + ); + }; + const startContactSync = async( step, progress ) => { + const response = await jQuery.ajax( + { + type: 'POST', + url: ajaxUrl, + data: { + action: 'hubwoo_ocs_instant_sync', + step, + hubwooSecurity, + }, + dataType: 'json', + }, + ).fail( + ( response ) => { + updateProgressBar( response.progress, 2 ); + saveUpdates( [ 'hubwoo_total_ocs_need_sync' ], 'delete' ); + }, + ); + + if ( 100 == response.progress && response.propertyError != true ) { + updateProgressBar( response.progress ); + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsSuccess ); + jQuery( 'a#hubwoo-osc-instant-sync' ).hide(); + await saveUpdates( { 'hubwoo_greeting_displayed_setup': 'yes' } ); + location.reload(); + } else if ( response.propertyError == true ) { + updateProgressBar( 100, 2 ); + saveUpdates( [ 'hubwoo_total_ocs_need_sync' ], 'delete' ); + } else { + updateProgressBar( Math.ceil( response.progress ) ); + startContactSync( parseInt( response.step ), parseInt( response.progress ) ); + } + }; + + const getDealsUsersToSync = async() => { + const ocsCount = await jQuery.post( ajaxUrl, { action: 'hubwoo_ecomm_get_ocs_count', hubwooSecurity } ); + + let message = 'No Users found. Please change the filters below.'; + + if ( ocsCount > 0 ) { + message = `We have found ${ ocsCount } Orders for the selected order statuses`; + jQuery( '.manage_deals_ocs' ).fadeIn(); + } else { + jQuery( '.manage_deals_ocs' ).hide(); + jQuery( '.deal-sync_progress' ).hide(); + message = 'No Orders found for the selected order statuses'; + } + if(jQuery('#hubwoo_ecomm_order_date_allow').is(':checked')) { + message += ' and date range' + } + + jQuery( '.hubwoo_deals_message[data-sync-type="order"]' ).text( message ); + jQuery( '.hubwoo-group-wrap__deal_notice[data-type="pBar"]' ).slideDown( 'slow' ); + }; + + const saveUpdates = ( data, action = 'update' ) => { + return jQuery.post( ajaxUrl, { action: 'hubwoo_save_updates', hubwooSecurity, updates: data, type: action } ); + }; + + const prepareFormData = ( data, enableKeys = null, singleKeys = false ) => { + const preparedFormData = {}; + + data.map( + ( formElement ) => { + let { name, value } = formElement; + if ( enableKeys != null ) { + enableKeys.map( + ( enableKey ) => { + if ( name == enableKey.key ) { + enableKey.status = 'yes'; + } + }, + ); + } + if ( name.includes( '[]' ) == false && singleKeys ) { + preparedFormData[ name ] = value; + } + if ( name.includes( '[]' ) && value != '' ) { + name = name.replace( '[]', '' ); + + if ( preparedFormData.hasOwnProperty( name ) ) { + preparedFormData[ name ].push( value ); + } else { + preparedFormData[ name ] = [ value ]; + } + } + }, + ); + + if ( enableKeys !== null ) { + enableKeys.map( + ( enableKey ) => { + preparedFormData[ enableKey.key ] = enableKey.status; + }, + ); + } + + return preparedFormData; + }; + + Object.entries( trackInputCheckboxes() ).map( + ( elementData ) => { + const [ key, hideField ] = elementData; + if ( jQuery( `#${ key }` ).is( ':checked' ) ) { + jQuery( '.hubwoo-date-range' ).closest( 'tr' ).slideDown(); + } else { + jQuery( hideField ).closest( 'tr' ).hide(); + } + } + ); + + jQuery( '#hubwoo_pro_switch' ).on( + 'click', + function( e ) { + if ( ! confirm( hubwooAccountSwitch ) ) { + e.preventDefault(); + return false; + } + }, + ); + + if ( jQuery( '#get_workflow_scope' ).val() == 'false' ) { + setTimeout( + function() { + jQuery( '.hubwoo_pop_up_wrap' ).slideDown( 'slow' ); + }, + 1000 + ); + } + const dataOfSelected = jQuery( '#hubwoo_customers_role_settings' ).val(); + if ( dataOfSelected != null ) { + jQuery.post( + ajaxUrl, + { action: 'hubwoo_get_current_sync_status', hubwooSecurity, data: { type: 'contact' } }, + function( response ) { + // response = jQuery.parseJSON( response ); + if ( response === true || response == 1 ) { + jQuery( '#hubwoo_customers_role_settings' ).attr( { disabled: 'true' } ); + jQuery( '#hubwoo_customers_manual_sync' ).attr( { disabled: 'true' } ); + } else { + getCurrentUsersToSync(); + } + }, + ); + } + + const innerWidth = jQuery( '.hubwoo-form-wizard-wrapper' ).find( '.hubwoo-form-wizard-link' ).innerWidth(); + const position = jQuery( '.hubwoo-form-wizard-wrapper' ).find( '.hubwoo-form-wizard-link' ).position(); + if ( position != null ) { + jQuery( '.hubwoo-form-wizardmove-button' ).css( { left: position.left, width: innerWidth } ); + } + + if( new URLSearchParams(window.location.search).get('trn') == 'shDls') { + window.scroll( { + top: 200, + behavior: 'smooth' + } ); + jQuery('.hubwoo-group-wrap__deal_ocs[data-txn="ocs-form"]').slideDown() + } + + jQuery( '.hubwoo-form-wizard-wrapper' ).find( '.hubwoo-form-wizard-link' ).click( + function() { + jQuery( '.hubwoo-form-wizard-link' ).removeClass( 'active' ); + const innerWidth = jQuery( this ).innerWidth(); + jQuery( this ).addClass( 'active' ); + const position = jQuery( this ).position(); + jQuery( '.hubwoo-form-wizardmove-button' ).css( { left: position.left, width: innerWidth } ); + const attr = jQuery( this ).attr( 'data-attr' ); + jQuery( '.hubwoo-form-wizard-content' ).each( + function() { + if ( jQuery( this ).attr( 'data-tab-content' ) == attr ) { + jQuery( this ).addClass( 'show' ); + } else { + jQuery( this ).removeClass( 'show' ); + } + }, + ); + }, + ); + + jQuery( '.hubwoo-form-wizard-next-btn' ).click( + function() { + const next = jQuery( this ); + next.parents( '.hubwoo-form-wizard-content' ).toggle( 'slow' ); + next.parents( '.hubwoo-form-wizard-content' ).next( '.hubwoo-form-wizard-content' ).toggle( 'slow' ); + jQuery( document ).find( '.hubwoo-form-wizard-content' ).each( + function() { + if ( jQuery( this ).hasClass( 'show' ) ) { + const formAtrr = jQuery( this ).attr( 'data-tab-content' ); + jQuery( document ).find( '.hubwoo-form-wizard-wrapper li a' ).each( + function() { + if ( jQuery( this ).attr( 'data-attr' ) == formAtrr ) { + jQuery( this ).addClass( 'active' ); + const innerWidth = jQuery( this ).innerWidth(); + const position = jQuery( this ).position(); + jQuery( document ).find( '.hubwoo-form-wizardmove-button' ).css( { left: position.left, width: innerWidth } ); + } else { + jQuery( this ).removeClass( 'active' ); + } + }, + ); + } + }, + ); + }, + ); + + jQuery( '.hubwoo-form-wizard-previous-btn' ).click( + function() { + const prev = jQuery( this ); + prev.parents( '.hubwoo-form-wizard-content' ).removeClass( 'show' ); + prev.parents( '.hubwoo-form-wizard-content' ).prev( '.hubwoo-form-wizard-content' ).addClass( 'show' ); + jQuery( document ).find( '.hubwoo-form-wizard-content' ).each( + function() { + if ( jQuery( this ).hasClass( 'show' ) ) { + const formAtrr = jQuery( this ).attr( 'data-tab-content' ); + jQuery( document ).find( '.hubwoo-form-wizard-wrapper li a' ).each( + function() { + if ( jQuery( this ).attr( 'data-attr' ) == formAtrr ) { + jQuery( this ).addClass( 'active' ); + const innerWidth = jQuery( this ).innerWidth(); + const position = jQuery( this ).position(); + jQuery( document ).find( '.hubwoo-form-wizardmove-button' ).css( { left: position.left, width: innerWidth } ); + } else { + jQuery( this ).removeClass( 'active' ); + } + }, + ); + } + }, + ); + }, + ); + + jQuery( '.mwb-woo__accordian-heading' ).click( + function() { + const name = $( this ).data( 'name' ); + jQuery( '.grToCreate' ).removeClass( 'fa-minus' ).addClass( 'fa-plus' ); + if ( jQuery( '.mwb-woo__accordian-heading' ).is( '.gr_created' ) ) { + jQuery( '.gr_created' ).parent( 'div' ).children( 'i' ).removeClass( 'fa fa-chevron-down' ).addClass( 'fa fa-chevron-right' ); + } + + if ( ! jQuery( this ).hasClass( 'active' ) ) { + jQuery( '#fa-drag-' + name ).removeClass( 'fa-plus' ).addClass( 'fa-minus' ); + if ( jQuery( this ).hasClass( 'gr_created' ) ) { + jQuery( this ).parent( 'div' ).children( 'i' ).removeClass( 'fa fa-chevron-right' ).addClass( 'fa fa-chevron-down' ); + jQuery( '#' + 'fa-' + name ).removeClass( 'fa fa-chevron-right' ).addClass( 'fa fa-chevron-down' ); + } + if ( ! jQuery( this ).hasClass( 'gr_uncreated' ) ) { + jQuery( '.mwb-woo__accordian-heading' ).removeClass( 'active' ); + jQuery( '.mwb-woo__accordion-content' ).slideUp( 500 ); + jQuery( this ).addClass( 'active' ); + jQuery( this ).parents( '.mwb-woo__accordion-wrapper' ).children( '.mwb-woo__accordion-content' ).slideDown( 500 ); + } + } else if ( jQuery( this ).hasClass( 'active' ) ) { + if ( jQuery( this ).hasClass( 'gr_created' ) ) { + jQuery( '#' + 'fa-' + name ).removeClass( 'fa fa-chevron-down' ).addClass( 'fa fa-chevron-right' ); + } + if ( ! jQuery( this ).hasClass( 'gr_uncreated' ) ) { + jQuery( this ).removeClass( 'active' ); + jQuery( this ).parents( '.mwb-woo__accordion-wrapper' ).children( '.mwb-woo__accordion-content' ).slideUp( 500 ); + } + } + }, + ); + + jQuery( '.mwb-woo__accordian-heading' ).hover( + function() { + if ( jQuery( this ).parent( 'div' ).children( 'span' ).hasClass( 'grCreateNew' ) ) { + jQuery( this ).prop( 'title', 'Create group first, before creating properties.' ); + } + }, + ); + + jQuery( 'input.hub-group' ).on( + 'click', + function() { + const groupID = jQuery( this ).data( 'group' ); + const groupRequired = jQuery( this ).data( 'req' ); + const currentChecked = jQuery( this ).prop( 'checked' ); + + if ( 'yes' == groupRequired ) { + return false; + } + + jQuery( 'div#' + groupID ).find( 'input[type=checkbox]' ).each( + function() { + jQuery( this ).attr( 'checked', currentChecked ); + if ( currentChecked ) { + jQuery( this ).removeAttr( 'disabled' ); + } else { + jQuery( this ).attr( 'disabled', true ); + } + }, + ); + }, + ); + + jQuery( '#hubwoo-re-auth' ).click( + ( e ) => { + e.preventDefault(); + saveUpdates( [ 'hubwoo_pro_oauth_success', 'hubwoo_pro_account_scopes', 'hubwoo_pro_valid_client_ids_stored' ], 'delete' ); + window.location.href = jQuery( '#hubwoo-re-auth' ).attr( 'href' ); + }, + ); + + jQuery( 'input.hub-prop' ).on( + 'click', + function() { + const propRequired = jQuery( this ).data( 'req' ); + if ( 'yes' == propRequired ) { + return false; + } + }, + ); + + jQuery( '#hub-lists-form' ).submit( + async( event ) => { + event.preventDefault(); + jQuery( '.hubwoo-list__manage' ).slideUp(); + jQuery( '.hubwoo-btn-list' ).hide(); + jQuery( '.hubwoo-list__progress' ).css( 'display', 'block' ); + updateProgressBar( 0 ); + const countLists = jQuery( 'input[name=\'selectedLists[]\']' ).length; + const currentCounter = 0; + const maxCounter = countLists != null ? countLists : 3; + const data = jQuery( 'form#hub-lists-form' ).serializeArray(); + const selectedLists = []; + jQuery.each( + data, + function( i, input ) { + if ( input.name == 'selectedLists[]' ) { + selectedLists.push( input.value ); + } + }, + ); + let oauth_response = await jQuery.post( ajaxUrl, { action: 'hubwoo_check_oauth_access_token', hubwooSecurity } ); + oauth_response = jQuery.parseJSON( oauth_response ); + const oauth_status = oauth_response.status; + + if ( oauth_status ) { + let listsResponse = await jQuery.post( ajaxUrl, { action: 'hubwoo_get_lists', hubwooSecurity } ); + listsResponse = jQuery.parseJSON( listsResponse ); + + const tempLists = []; + + jQuery.each( + listsResponse, + function( i, singleList ) { + if ( selectedLists.includes( singleList.name ) ) { + tempLists.push( singleList ); + } + }, + ); + + dataCounter.totalCount = tempLists.length; + try { + const createdLists = []; + let upgradeRequired = false; + const allListResults = await Promise.all( + tempLists.map( + async( singleList ) => { + try { + const response = await createLists( singleList ); + if ( response.status_code == 200 || response.status_code == 409 ) { + createdLists.push( singleList.name ); + } + return response; + } catch ( errors ) { + if ( errors.status_code == 402 ) { + upgradeRequired = true; + } else if ( errors.status_code == 400 ) { + + const promessage = jQuery.parseJSON(errors.body); + const errormessage = promessage.message; + if(errormessage.indexOf('The following list names already exist') != -1) { + createdLists.push( singleList.name ); + } + } else { + console.error( errors ); + } + } + }, + ), + ); + + if ( upgradeRequired ) { + jQuery( '.hubwoo_pop_up_wrap' ).slideDown( 'slow' ); + } else { + await saveUpdates( { 'hubwoo-lists-created': createdLists, 'hubwoo_pro_lists_setup_completed': 1 } ); + transferScreen( 'move-to-pipeline' ); + } + } catch ( error ) { + console.error( error ); + } + } else { + alert( hubwooWentWrong ); + return false; + } + }, + ); + + jQuery( 'span.hubwoo-create-single-group' ).on( + 'click', + function() { + const name = $( this ).data( 'name' ); + const job = $( this ); + + manageSpinText( job, 'add' ); + + jQuery.post( + ajaxUrl, + { action: 'hubwoo_check_oauth_access_token', hubwooSecurity }, + function( response ) { + const oauth_response = jQuery.parseJSON( response ); + const oauth_status = oauth_response.status; + if ( oauth_status ) { + jQuery.post( + ajaxUrl, + { action: 'hubwoo_create_single_group', name, hubwooSecurity }, + function( response ) { + const proresponse = jQuery.parseJSON( response ); + const proerrors = proresponse.errors; + const prohubMessage = ''; + + if ( ! proerrors ) { + const proresponseCode = proresponse.status_code; + + if ( proresponseCode == 200 ) { + manageSpinText( job, 'remove' ); + job.addClass( 'grSuccess' ); + + jQuery( '#' + name ).removeClass( 'mwb-woo__accordion-content-disable' ).addClass( 'mwb-woo__accordion-content' ); + if ( jQuery( '.mwb-woo__accordian-heading' ).hasClass( name ) ) { + jQuery( '.' + name ).removeClass( 'gr_uncreated' ).addClass( 'gr_created' ); + } + } else if ( proresponseCode == 409 ) { + manageSpinText( job, 'remove' ); + job.addClass( 'grSuccess' ); + jQuery( '#' + name ).removeClass( 'mwb-woo__accordion-content-disable' ).addClass( 'mwb-woo__accordion-content' ); + if ( jQuery( '.mwb-woo__accordian-heading' ).hasClass( name ) ) { + jQuery( '.' + name ).removeClass( 'gr_uncreated' ).addClass( 'gr_created' ); + } + } else { + manageSpinText( job, 'remove', 'failed' ); + } + } + }, + ); + } else { + manageSpinText( job, 'remove', 'failed' ); + return false; + } + }, + ); + }, + ); + + jQuery( 'span.hubwoo-create-single-field' ).on( + 'click', + function() { + const name = $( this ).data( 'name' ); + + const group = $( this ).data( 'group' ); + + const job = $( '.pr-' + name ); + job.removeClass( 'fa-plus' ); + job.addClass( 'fa-spinner' ); + job.addClass( 'fa-spin' ); + jQuery.post( + ajaxUrl, + { action: 'hubwoo_check_oauth_access_token', hubwooSecurity }, + function( response ) { + const oauth_response = jQuery.parseJSON( response ); + const oauth_status = oauth_response.status; + + if ( oauth_status ) { + jQuery.post( + ajaxUrl, + { action: 'hubwoo_create_single_property', name, group, hubwooSecurity }, + function( response ) { + const proresponse = jQuery.parseJSON( response ); + const proerrors = proresponse.errors; + const prohubMessage = ''; + + if ( ! proerrors ) { + const proresponseCode = proresponse.status_code; + + if ( proresponseCode == 200 ) { + job.removeClass( 'fa-spinner' ); + job.removeClass( 'fa-spin' ); + job.addClass( 'fa-check' ); + } else if ( proresponseCode == 409 ) { + job.removeClass( 'fa-spinner' ); + job.removeClass( 'fa-spin' ); + job.addClass( 'fa-check' ); + } else { + job.removeClass( 'fa-spinner' ); + job.removeClass( 'fa-spin' ); + job.addClass( 'fa-plus' ); + } + } + }, + ); + } else { + job.removeClass( 'fa-spinner' ); + job.removeClass( 'fa-spin' ); + job.addClass( 'fa-plus' ); + return false; + } + }, + ); + }, + ); + + jQuery( '.hubwoo-create-single-list' ).on( + 'click', + function() { + const name = $( this ).data( 'name' ); + const job = $( this ); + + manageSpinText( job, 'add' ); + + jQuery.post( + ajaxUrl, + { action: 'hubwoo_check_oauth_access_token', hubwooSecurity }, + function( response ) { + const oauth_response = jQuery.parseJSON( response ); + const oauth_status = oauth_response.status; + + if ( oauth_status ) { + jQuery.post( + ajaxUrl, + { action: 'hubwoo_create_single_list', name, hubwooSecurity }, + function( response ) { + const proresponse = jQuery.parseJSON( response ); + const proerrors = proresponse.errors; + const prohubMessage = ''; + + if ( ! proerrors ) { + const proresponseCode = proresponse.status_code; + if ( proresponseCode == 200 ) { + manageSpinText( job, 'remove' ); + } else if ( proresponseCode == 409 ) { + manageSpinText( job, 'remove' ); + } else if ( proresponseCode == 400 ) { + const promessage = jQuery.parseJSON(proresponse.body); + const errormessage = promessage.message; + if(errormessage.indexOf('The following list names already exist') != -1) { + manageSpinText( job, 'remove' ); + } else { + jQuery( '.hubwoo_pop_up_wrap' ).slideDown( 'slow' ); + manageSpinText( job, 'remove', 'failed' ); + } + } else { + manageSpinText( job, 'remove', 'failed' ); + } + } + }, + ); + } else { + manageSpinText( job, 'remove', 'failed' ); + return false; + } + }, + ); + }, + ); + + jQuery( '#save-deal-stages' ).click( + async( e ) => { + e.preventDefault(); + if ( jQuery( '#hubwoo-ecomm-deal-stage' ).length ) { + await saveUpdates( { 'hubwoo_ecomm_mapping_setup': 'yes' } ); + } + window.location.reload( true ); + }, + ); + + setInterval( + function() { + jQuery( '.hubwoo-progress-bar' ).map( + async function( element ) { + const currentElement = jQuery( this ); + if ( 'yes' == currentElement.data( 'sync-status' ) ) { + const type = currentElement.data( 'sync-type' ); + let response = await jQuery.ajax( { url: ajaxUrl, type: 'POST', data: { action: 'hubwoo_sync_status_tracker', hubwooSecurity, process: type } } ); + response = jQuery.parseJSON( response ); + currentElement.css( 'width', response.percentage + '%' ); + currentElement.text( response.percentage + '%' ); + if ( response.hasOwnProperty( 'eta' ) ) { + const currentDesc = jQuery( '.sync-desc[data-sync-type=\'' + type + '\']' ); + let text = currentDesc.text().trim(); + const previousEta = currentDesc.attr( 'data-sync-eta' ); + text = text.replace( previousEta, response.eta ); + currentDesc.attr( 'data-sync-eta', response.eta ); + currentDesc.text( text ); + } + if ( 'no' == response.is_running || 100 == currentElement.data( 'percentage' ) || 100 == response.percentage ) { + currentElement.css( 'width', '100%' ); + currentElement.text( '100%' ); + window.location.href = window.location.href; + } + } + } + ); + }, + 25000 + ); + + jQuery( '#reset-deal-stages' ).click( + async( e ) => { + e.preventDefault(); + let pipeline = jQuery( '.hubwoo_selected_pipeline' ).find(":selected").text(); + await jQuery.ajax( { url: ajaxUrl, type: 'POST', data: { action: 'hubwoo_ecomm_setup', hubwooSecurity, process: 'reset-mapping', pipeline } } ); + window.location.reload( true ); + }, + ); + + jQuery( '.hubwoo-create-single-workflow-data' ).on( + 'click', + function() { + const btnThis = jQuery( this ); + var name = jQuery( this ).data( 'name' ); + const tab = jQuery( this ).closest( '.hubwoo-field-text-col' ); + tab.removeClass( 'hubwoo-align-class' ).addClass( 'align-big' ); + var name = $( this ).data( 'name' ); + const job = $( this ); + + manageSpinText( job, 'add' ); + + jQuery.post( + ajaxUrl, + { action: 'hubwoo_check_oauth_access_token', hubwooSecurity }, + function( response ) { + const oauth_response = jQuery.parseJSON( response ); + const oauth_status = oauth_response.status; + + if ( oauth_status ) { + jQuery.post( + ajaxUrl, + { action: 'hubwoo_create_single_workflow', name, hubwooSecurity }, + function( response ) { + const proresponse = jQuery.parseJSON( response ); + const proerrors = proresponse.errors; + const prohubMessage = ''; + + if ( ! proerrors ) { + const proresponseCode = proresponse.status_code; + + if ( proresponseCode == 200 ) { + manageSpinText( job, 'remove' ); + + tab.removeClass( 'align-big' ).addClass( 'hubwoo-align-class' ); + + jQuery.post( + ajaxUrl, + { action: 'hubwoo_update_workflow_tab' }, + function( data ) { + var data = JSON.parse( data ); + $.each( + data, + function( index, value ) { + $( '.workflow-tab[data-name="' + value + '"]' ).removeClass( 'hubwoo-disabled' ); + }, + ); + }, + ); + + btnThis.parents( '.hubwoo-field-text-col' ).children( 'div.hubwoo-field-checked' ).show(); + } else if ( proresponseCode == 404 ) { + let message = JSON.parse( proresponse.response ); + message = message.message; + manageSpinText( job, 'remove', 'failed' ); + tab.removeClass( 'align-big' ).addClass( 'hubwoo-align-class' ); + alert( message ); + } else { + alert( hubwooWentWrong ); + manageSpinText( job, 'remove', 'failed' ); + tab.removeClass( 'align-big' ).addClass( 'hubwoo-align-class' ); + } + } + }, + ); + } else { + tab.removeClass( 'align-big' ).addClass( 'hubwoo-align-class' ); + manageSpinText( job, 'remove', 'failed' ); + return false; + } + }, + ); + }, + ); + + jQuery( '.hubwoo-onquest' ).select2( + { + placeholder: "Select from the options", + ajax: { + url: ajaxurl, + dataType: 'json', + delay: 100, + type: 'POST', + data( params ) { + return { + q: params.term, + action: 'hubwoo_get_onboard_form', + key: jQuery(this).attr('name'), + hubwooSecurity:hubwooSecurity + }; + }, + processResults( data ) { + const options = []; + if ( data ) { + $.each( + data, + function( index, text ) { + options.push( { id: text[ 0 ], text: text[ 1 ] } ); + }, + ); + } + return { + results: options, + }; + }, + cache: true, + }, + }, + ); + + jQuery( '#hubwoo_ecomm_order_ocs_status' ).select2( + { + placeholder: 'Processing, Completed etc.', + ajax: { + url: ajaxurl, + dataType: 'json', + delay: 200, + data( params ) { + return { + q: params.term, + action: 'hubwoo_search_for_order_status', + }; + }, + processResults( data ) { + const options = []; + if ( data ) { + $.each( + data, + function( index, text ) { + options.push( { id: text[ 0 ], text: text[ 1 ] } ); + }, + ); + } + return { + results: options, + }; + }, + cache: true, + }, + }, + ); + + jQuery( '#hubwoo-selected-user-roles, #hubwoo_customers_role_settings' ).select2( + { + placeholder: 'All Users Roles are Selected except Guest.', + ajax: { + url: ajaxurl, + dataType: 'json', + delay: 200, + data( params ) { + return { + q: params.term, + action: 'hubwoo_get_for_user_roles', + }; + }, + processResults( data ) { + const options = []; + if ( data ) { + $.each( + data, + function( index, text ) { + options.push( { id: text[ 0 ], text: text[ 1 ] } ); + }, + ); + } + return { + results: options, + }; + }, + cache: true, + }, + }, + ); + + jQuery( 'input[type="checkbox"]' ).on( + 'change', + function() { + const elementId = jQuery( this ).attr( 'id' ); + const checkboxes = trackInputCheckboxes(); + if ( checkboxes.hasOwnProperty( elementId ) ) { + const hideField = checkboxes[ elementId ]; + if ( jQuery( this ).is( ':checked' ) ) { + jQuery( hideField ).closest( 'tr' ).fadeIn(); + } else { + jQuery( hideField ).closest( 'tr' ).fadeOut(); + } + } + }, + ); + + jQuery( '.date-picker' ).datepicker( { dateFormat: 'dd-mm-yy', maxDate: 0, changeMonth: true, changeYear: true } ); + + jQuery( document ).on( + 'click', + '#hubwoo-osc-instant-sync', + async function( event ) { + event.preventDefault(); + jQuery( '#hubwoo-osc-instant-sync' ).hide(); + const progress = 0; + jQuery( '#hubwoo-ocs-form' ).slideUp( 600 ); + jQuery( '#hubwoo-osc-instant-sync' ).addClass( 'hubwoo-disable' ); + jQuery( '#hubwoo-osc-schedule-sync' ).addClass( 'hubwoo-disable' ); + jQuery( '.hubwoo-progress-wrap' ).css( 'display', 'block' ); + const totalUsers = jQuery( '.hubwoo-osc-instant-sync' ).data( 'total_users' ); + await saveUpdates( { 'hubwoo_total_ocs_need_sync': totalUsers } ); + await saveUpdates( [ 'hubwoo_ocs_contacts_synced' ], 'delete' ); + updateProgressBar( 0 ); + startContactSync( 1, progress ); + }, + ); + + jQuery( '.hubwoo-date-picker' ).datepicker( { dateFormat: 'dd-mm-yy', maxDate: 0, changeMonth: true, changeYear: true } ); + + jQuery( '#hubwoo-pro-email-logs' ).on( + 'click', + function( e ) { + e.preventDefault(); + jQuery( '#hubwoo_email_loader' ).css( { display: 'inline-block' } ); + + jQuery.post( + ajaxUrl, + { action: 'hubwoo_email_the_error_log', hubwooSecurity }, + function( response ) { + const res_parsed = jQuery.parseJSON(response); + if ( res_parsed != null ) { + if ( res_parsed == 'success' ) { + alert( hubwooMailSuccess ); + jQuery( '#hubwoo_email_loader' ).css( { display: 'none' } ); + jQuery( '#hubwoo_email_success' ).css( { display: 'inline-block' } ); + } else { + alert( hubwooMailFailure ); + jQuery( '#hubwoo_email_loader' ).css( { display: 'none' } ); + } + } else { + // close the popup and show the error. + alert( hubwooMailFailure ); + jQuery( '#hubwoo_email_loader' ).css( { display: 'none' } ); + } + jQuery( '#hubwoo_email_success' ).css( { display: 'none' } ); + }, + ); + }, + ); + + jQuery( '.hubwoo-general-settings-fields' ).on( + 'change', + function() { + const data = jQuery( '#plugin-settings-gen-adv' ).serializeArray(); + const enableKeys = [ + { key: 'hubwoo_checkout_optin_enable', status: 'no' }, + { key: 'hubwoo_registeration_optin_enable', status: 'no' }, + { key: 'hubwoo_subs_settings_enable', status: 'no' }, + ]; + const multiSelectKeys = [ + { key: 'hubwoo-selected-user-roles', status: 'EMPTY_ARRAY' }, + ]; + const preparedFormData = prepareFormData( data, enableKeys, true ); + multiSelectKeys.map( + ( singleKey ) => { + if ( preparedFormData.hasOwnProperty( singleKey.key ) == false ) { + preparedFormData[ singleKey.key ] = singleKey.status; + } + }, + ); + saveUpdates( preparedFormData ); + }, + ); + + jQuery( '.hubwoo_rfm_data_fields' ).on( + 'change', + debounce( + function() { + const data = jQuery( '#hubwoo-rfm-form' ).serializeArray(); + const preparedFormData = prepareFormData( data ); + saveUpdates( preparedFormData ); + }, + 800, + ), + ); + + // Deals + + if( new URLSearchParams(window.location.search).get('hubwoo_tab') == 'hubwoo-deals') { + jQuery.post( + ajaxUrl, + { action: 'hubwoo_get_current_sync_status', hubwooSecurity, data: { type: 'deal' } }, + function( response ) { + // response = jQuery.parseJSON( response ); + if ( response != true || response != 1 ) { + getDealsUsersToSync(); + } else { + $("#hubwoo_deals_ocs_form :input").map(function() { + $(this).attr( { disabled: 'true' } ); + }) + } + }, + ); + } + + jQuery( '.hubwoo_real_time_changes' ).on( + 'change', + debounce( + () => { + const data = jQuery( '#hubwoo_real_time_deal_settings' ).serializeArray(); + const enableKeys = [ { key: 'hubwoo_ecomm_deal_enable', status: 'no' }, { key: 'hubwoo_assoc_deal_cmpy_enable', status: 'no' }, { key: 'hubwoo_deal_multi_currency_enable', status: 'no' } ]; + const multiSelectKeys = [ { key: 'hubwoo_ecomm_won_stages', status: 'EMPTY_ARRAY' } ]; + const formData = prepareFormData( data, enableKeys, true ); + multiSelectKeys.map( + ( singleKey ) => { + if ( formData.hasOwnProperty( singleKey.key ) == false ) { + formData[ singleKey.key ] = singleKey.status; + } + }, + ); + saveUpdates( formData ); + }, + 800, + ), + ); + + jQuery( '.hubwoo_ecomm_mapping' ).on( + 'change', + debounce( + () => { + const data = jQuery( '.hubwoo_save_ecomm_mapping' ).serializeArray(); + const formData = []; + for ( let index = 0; index < data.length; index++ ) { + const preparedData = {}; + preparedData.status = data[ index ].value; + preparedData.deal_stage = data[ ++index ].value; + formData.push( preparedData ); + } + saveUpdates( { 'hubwoo_ecomm_final_mapping': formData } ); + }, + 300, + ), + ); + + jQuery( document ).on( + 'change', + '.hubwoo_selected_pipeline', + debounce( + async () => { + const selected_pipeline = jQuery( this ).find(":selected").val(); + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_fetch_deal_stages', + selected_pipeline, + hubwooSecurity, + }, + dataType : 'json', + } + ); + if ( response.success ) { + window.location.reload( true ); + } + }, + 300, + ), + ); + + jQuery( '#hubwoo_ecomm_won_stages' ).select2( + { + placeholder: 'Select Winning Deal Stages.', + ajax: { + url: ajaxurl, + dataType: 'json', + delay: 200, + data( params ) { + return { + q: params.term, + action: 'hubwoo_deals_search_for_stages', + }; + }, + processResults( data ) { + const options = []; + if ( data ) { + $.each( + data, + function( index, text ) { + options.push( { id: text[ 0 ], text: text[ 1 ] } ); + }, + ); + } + return { + results: options, + }; + }, + cache: true, + }, + }, + ); + + jQuery( '.hubwoo-ecomm-settings-select' ).on( + 'change', + async() => { + const data = jQuery( '#hubwoo_deals_ocs_form' ).serializeArray(); + const enableKeys = [ { key: 'hubwoo_ecomm_order_date_allow', status: 'no' } ]; + const multiSelectKeys = [ { key: 'hubwoo_ecomm_order_ocs_status', status: 'EMPTY_ARRAY' } ]; + const formData = prepareFormData( data, enableKeys, true ); + multiSelectKeys.map( + ( singleKey ) => { + if ( formData.hasOwnProperty( singleKey.key ) == false ) { + formData[ singleKey.key ] = singleKey.status; + } + } + ); + + if(formData.hubwoo_ecomm_order_date_allow == 'no') { + delete formData.hubwoo_ecomm_order_ocs_from_date + delete formData.hubwoo_ecomm_order_ocs_upto_date + } + const syncReponse = await jQuery.post( ajaxUrl, { action: 'hubwoo_get_current_sync_status', hubwooSecurity, data: { type: 'deal' } } ); + if ( syncReponse != true || syncReponse != 1 ) { + const savedResponse = await saveUpdates( formData ); + if ( savedResponse ) { + const ocsCount = await jQuery.get( ajaxUrl, { action: 'hubwoo_ecomm_get_ocs_count', hubwooSecurity } ); + if ( ocsCount !== undefined || ocsCount !== null ) { + jQuery( '.hubwoo_deals_message[data-sync-type="order"]' ).slideDown( 20 ); + jQuery( '.hubwoo_deals_message[data-sync-type="order"]' ).css( 'display', 'inline-block' ); + jQuery( '.hubwoo-group-wrap__deal_notice[data-type="pBar"]' ).slideDown( 200 ); + + let message = ''; + + if ( ocsCount > 0 ) { + message = `We have found ${ ocsCount } Orders for the selected order statuses`; + if(jQuery('#hubwoo_ecomm_order_date_allow').is(':checked')) { + message += ' and date range' + } + jQuery( '.manage_deals_ocs' ).fadeIn(); + } else { + jQuery( '.manage_deals_ocs' ).fadeOut(); + message = 'No Orders found for the selected order statuses'; + if(jQuery('#hubwoo_ecomm_order_date_allow').is(':checked')) { + message += ' and date range' + } + } + + jQuery( '.hubwoo_deals_message[data-sync-type="order"]' ).text( message ); + } + } + } else { + jQuery( '.hubwoo-deals-settings-select' ).attr( { disabled: 'true' } ); + } + }, + ); + + $('#hubwoo-initiate-oauth').click( function(e) { + e.preventDefault() + const url = $(this).attr('href') + // track connect count and redirect + window.location.href = url + }) + + jQuery( '.manage_deals_ocs, .manage_contact_sync, .manage_product_sync' ).click( + async function() { + const syncAction = jQuery( this ).data( 'action' ); + if ( syncAction !== undefined ) { + if( 'run-ecomm-setup' === syncAction ) { + await runEcommSetup(); + } else { + await jQuery.post( ajaxUrl, { action: 'hubwoo_manage_sync', hubwooSecurity, process: syncAction } ); + } + window.location.reload( true ); + } + }, + ); + + // Abandoned Cart + jQuery( '.hubwoo-abncart-setup-form' ).on( + 'change', + debounce( + function() { + const data = jQuery( '.hubwoo-abncart-setup-form' ).serializeArray(); + const enableKeys = [ + { key: 'hubwoo_abncart_enable_addon', status: 'no' }, + { key: 'hubwoo_abncart_guest_cart', status: 'no' }, + { key: 'hubwoo_abncart_delete_old_data', status: 'no' }, + ]; + const preparedFormData = prepareFormData( data, enableKeys, true ); + saveUpdates( preparedFormData ); + }, + 700, + ), + ); + + // Show Setup Content on Click + jQuery( '.hubwoo-btn-cshow__btn a' ).click( + function( e ) { + e.preventDefault(); + $( this ).parents( '.hubwoo-box-card' ).find( '.hubwoo-btn-cshow__content' ).toggle( 'slow' ); + }, + ); + + jQuery( '.hubwoo-btn-data' ).click( + function( e ) { + e.preventDefault(); + jQuery( this ).parents( '.hubwoo-btn-list' ).next( '.hubwoo-sub-content' ).children( 'div' ).hide(); + const datavalue = jQuery( this ).data( 'action' ); + if ( datavalue == 'group_setup' ) { + jQuery( this ).parents( '.hubwoo-btn-list' ).next( '.hubwoo-sub-content' ).children( '.hubwoo-group__progress' ).show(); + jQuery( '#hubwoo_create_group_prop_setup' ).hide(); + jQuery( '.gen-text' ).hide(); + jQuery( '#hub-gr-props-form' ).submit(); + } else if ( datavalue == 'group_manage_setup' ) { + jQuery( '.grp-pr-heading' ).text( 'Created Properties & Groups' ); + jQuery( '.hubwoo-content__para' ).hide(); + jQuery( this ).parents( '.hubwoo-btn-list' ).next( '.hubwoo-sub-content' ).children( '.hubwoo-group__manage' ).slideDown( 'slow' ); + jQuery( '.hubwoo-group-desc' ).show(); + jQuery( '#hubwoo_create_group_prop_setup' ).hide(); + jQuery( '#hubwoo-manage-setup' ).hide(); + } + + if ( datavalue == 'lists_setup' ) { + jQuery( this ).parents( '.hubwoo-btn-list' ).next( '.hubwoo-sub-content' ).children( '.hubwoo-list__progress' ).show(); + jQuery( '#hub-lists-form' ).submit(); + } else if ( datavalue == 'lists_setup_manage' ) { + jQuery( this ).parents( '.hubwoo-btn-list' ).next( '.hubwoo-sub-content' ).children( '.hubwoo-list__manage' ).slideDown( 'slow' ); + jQuery( '.list-setup-heading' ).text( 'Lists' ); + jQuery( '.hubwoo-content__para' ).hide(); + jQuery( '.hubwoo-list-desc' ).show(); + jQuery( '.hubwoo-btn-data' ).hide(); + jQuery( '#hub-lists-form' ).slideDown(); + } + }, + ); + + jQuery( '.hubwoo_manage_screen' ).click( + () => { + const screenKey = jQuery( '.hubwoo_manage_screen' ).data( 'process' ); + const lastKey = jQuery( '.hubwoo_manage_screen' ).data( 'tab' ); + transferScreen( screenKey, lastKey ); + }, + ); + + jQuery( '.hubwoo-adv-settingg__btn a' ).click( + function() { + jQuery( this ).parents( '.hubwoo-adv-settingg' ).children( '.hubwoo-adv-settingg__form' ).toggle( 'slow' ); + }, + ); + jQuery( '.hubwoo-deal-wrap-con__h-btn a' ).click( + function( e ) { + e.preventDefault(); + jQuery( this ).parents( '.hubwoo-deal-wrap-con' ).children( '.hubwoo-deal-wrap-con__store' ).toggle( 'slow' ); + }, + ); + + jQuery( '.hubwoo-manage-account' ).on('click', + function() { + let formData = {} + switch (jQuery(this).data('type')) { + case 'disconnect-form': + jQuery('.hubwoo_pop_up_wrap').fadeIn(); + break; + case 'disconnect': + formData = jQuery('.hubwoo-disconnect-form').serializeArray(); + const enableKeys = [ { key: 'delete_meta', status: 'no' } ]; + formData = prepareFormData( formData, enableKeys ); + case 'change-account': + jQuery('.hubwoo-discon-spinner').slideDown('slow') + const currentPage = window.location.href; + let redirectUrl = currentPage.substring( 0, currentPage.indexOf( 'hubwoo' ) ); + redirectUrl += 'hubwoo'; + + const action = { action: 'hubwoo_disconnect_account', hubwooSecurity } + + if(Object.keys(formData).length !== 0) { + action.data = formData + } + jQuery.post( + ajaxUrl, + action, + function( status ) { + if ( status ) { + window.location.href = redirectUrl + } + }, + ); + break; + case 'cancel': + jQuery('.hubwoo_pop_up_wrap').hide(); + default: + break; + } + } + ); + + jQuery( '.hubwoo-ocs-input-change' ).on( + 'change', + async() => { + const data = jQuery( '#hubwoo-ocs-form' ).serializeArray(); + const enableKeys = [ { key: 'hubwoo_customers_manual_sync', status: 'no' } ]; + const multiSelectKeys = [ { key: 'hubwoo_customers_role_settings', status: 'EMPTY_ARRAY' } ]; + const preparedFormData = prepareFormData( data, enableKeys, true ); + multiSelectKeys.map( + ( singleKey ) => { + if ( preparedFormData.hasOwnProperty( singleKey.key ) == false ) { + preparedFormData[ singleKey.key ] = singleKey.status; + } + }, + ); + saveUpdates( preparedFormData ); + jQuery.post( + ajaxUrl, + { action: 'hubwoo_get_current_sync_status', hubwooSecurity, data: { type: 'contact' } }, + function( response ) { + // response = jQuery.parseJSON( response ); + if ( response != true || response != 1 ) { + getCurrentUsersToSync(); + } else { + jQuery( '#hubwoo_customers_role_settings' ).attr( { disabled: 'true' } ); + jQuery( '#hubwoo_customers_manual_sync' ).attr( { disabled: 'true' } ); + } + }, + ); + }, + ); + + jQuery(document).on('change', '.which_hubspot_packages_do_you_currently_use_', function() { + var hubwoo_package = jQuery(this).val(); + if( hubwoo_package.includes("I don’t currently use HubSpot") ){ + jQuery('.hubwoo_register').removeClass('hidefield'); + } else { + jQuery('.hubwoo_register').addClass('hidefield'); + } + + }); + + jQuery('.hubwoo-onboard-manage').click( async function(e){ + e.preventDefault() + + switch (jQuery(this).data('type')) { + case 'sync': + + let inputFields = true + let formData = jQuery('#hubwoo-onboarding-form').serializeArray(); + formData = prepareFormData(formData, null, true); + let hubwoo_package = jQuery('.which_hubspot_packages_do_you_currently_use_').val(); + + const onboardKeys = [ + { key: 'mwb_hs_familarity', status: '' }, + { key: 'mwb_woo_familarity', status: '' }, + { key: 'which_hubspot_packages_do_you_currently_use_', status: '' }, + { key: 'firstname', status: '' }, + { key: 'lastname', status: '' }, + { key: 'company', status: '' }, + { key: 'website', status: '' }, + { key: 'email', status: '' }, + { key: 'phone', status: '' }, + ]; + + if( ! hubwoo_package.includes("I don’t currently use HubSpot") ){ + onboardKeys.splice(3,4); + delete formData["firstname"]; + delete formData["lastname"]; + delete formData["company"]; + delete formData["website"]; + } + + onboardKeys.map( + ( singleKey ) => { + if ( formData.hasOwnProperty( singleKey.key ) == false ) { + formData[ singleKey.key ] = singleKey.status; + } + }, + ); + Object.keys(formData).forEach((key) => { + if(formData[key] !== '') { + jQuery('.hubwoo-onboard-img[name='+key+']').show() + } else { + inputFields = false + jQuery('.hubwoo-onboard-img[name='+key+']').hide() + } + }) + + if(inputFields) { + jQuery('.hubwoo-onboard-notice').slideUp() + jQuery('.onboard-spinner').slideDown() + await jQuery.post( ajaxUrl, { action: 'hubwoo_onboard_form', formData, hubwooSecurity } ); + } else { + $('html,body').animate({ scrollTop: $(".mwb-heb-wlcm__title").outerHeight() + 220 }, 'slow', function() { + jQuery('.hubwoo-onboard-notice').slideDown('slow') + }); + break; + } + case 'skip': + await saveUpdates({'hubwoo_onboard_user': 'yes'}) + jQuery("#hubwoo-onboard-user").hide() + jQuery("#hubwoo-visit-dashboard").show() + default: + break; + } + }) + + jQuery('.hubwoo-action-icon').tipTip({ + 'attribute': 'data-tip', + delay: 150, + fadeIn: 150, + fadeOut: 200, + }) + + $('.hubwoo-action-icon').click( async function(e) { + if('no' == $(this).data("status")) { + e.preventDefault() + + if( 'yes' == $(this).attr('data-sync-status')) { + return; + } + + let triggerStatus = false + const type = $(this).data('type'); + const firstChild = document.body.firstChild; + const popupWrap = document.createElement("div"); + popupWrap.className = 'hubwoo_pop_up_wrap'; + firstChild.parentNode.insertBefore(popupWrap, firstChild); + $(popupWrap).css('display','none'); + $(popupWrap).fadeIn() + $(popupWrap).append('

      '); + $('.hubwoo-disconnect-wrapper').append('
      '); + $('.hubwoo-disconnect-wrapper').append(''); + $('.hubwoo-disconnect-wrapper > h2').text("Schedule a background sync") + $('.hubwoo-disconnect-wrapper > p').text("Would you like to schedule a background sync for all of the "+ capitalize(type)+ "s") + $('.hubwoo-objects').click( async function() { + if( 'sync' == $(this).data('type') ) { + $('.hubwoo-discon-spinner').fadeIn('slow'); + switch (type) { + case 'contact': + await jQuery.post( ajaxUrl, { action: 'hubwoo_manage_vids', hubwooSecurity, process: type } ); + window.location.reload() + break; + case 'deal': + await jQuery.post( ajaxUrl, { action: 'hubwoo_manage_vids', hubwooSecurity, process: type } ); + window.location.reload() + break; + default: + break; + } + } else { + $('.hubwoo_pop_up_wrap').hide(); + } + }) + } + }) + + jQuery( '#hub-gr-props-form' ).submit( + async( event ) => { + event.preventDefault(); + const data = jQuery( 'form#hub-gr-props-form' ).serializeArray(); + const progress = 0; + const selectedGroups = []; + const selectedProps = []; + jQuery( '.hubwoo-group__progress' ).css( 'display', 'block' ); + updateProgressBar( 0 ); + jQuery.each( + data, + function( i, input ) { + if ( input.name == 'selectedGroups[]' ) { + selectedGroups.push( input.value ); + } else if ( input.name == 'selectedProps[]' ) { + selectedProps.push( input.value ); + } + }, + ); + dataCounter.setupRunning = true; + dataCounter.totalCount = selectedGroups.length + selectedProps.length; + const ecommSetupCount = 10 * dataCounter.totalCount / 100; + dataCounter.totalCount += ecommSetupCount; + let oauth_response = await jQuery.post( ajaxUrl, { action: 'hubwoo_check_oauth_access_token', hubwooSecurity } ); + oauth_response = jQuery.parseJSON( oauth_response ); + const oauth_status = oauth_response.status; + + if ( oauth_status ) { + const allCreatedGroups = []; + let allCreatedProperties = []; + let chunkedProperties = []; + + for (let i = selectedGroups.length - 1; i >= 0; i--) { + const singleCreatedGroup = await createGroupsToHS( selectedGroups[i], 'contact' ); + let groupName = null; + + if ( singleCreatedGroup.status_code == 200 ) { + groupName = singleCreatedGroup.name; + } else if ( singleCreatedGroup.status_code == 409 ) { + groupName = singleCreatedGroup.name; + } else if ( singleCreatedGroup.status_code == 201 ) { + groupName = singleCreatedGroup.name; + } + allCreatedGroups.push( groupName ); + } + + for (let i = allCreatedGroups.length - 1; i >= 0; i--) { + let groupName = allCreatedGroups[i]; + let tempPropertiesToCreate = await jQuery.ajax( { url: ajaxUrl, type: 'POST', data: { action: 'hubwoo_get_group_properties', groupName, hubwooSecurity } } ); + + if ( tempPropertiesToCreate != undefined || tempPropertiesToCreate.length > 0 ) { + tempPropertiesToCreate = jQuery.parseJSON( tempPropertiesToCreate ); + tempPropertiesToCreate = tempPropertiesToCreate.map( ( property ) => ( { ...property, groupName } ) ); + chunkedProperties.push(arrayChunk( tempPropertiesToCreate, 16 ) ); + } + } + + if(chunkedProperties.length > 0) { + + chunkedProperties = chunkedProperties.flat(); + + for (let i = chunkedProperties.length - 1; i >= 0; i--) { + let singleChunk = chunkedProperties[i] + try { + const response = await createPropertiesToHS( singleChunk, 'contact' ); + let results = []; + + if ( response.status_code == 201 ) { + results = response.body.results; + results.map( + ( createdProperty ) => { + allCreatedProperties.push( createdProperty.name ); + } + ); + } else if ( response.status_code == 207 ) { + results = response.body.errors; + results.map( + ( createdProperty ) => { + const message = createdProperty.message; + const propertyName = message.slice( message.indexOf( 'named' ) + 5, message.indexOf( 'already' ) - 1 ); + allCreatedProperties.push( propertyName ); + } + ); + } + } catch ( errors ) { + console.error( errors ); + continue; + } + } + } + + const deal_property = await jQuery.ajax({ type : 'POST', url : ajaxUrl, data : { action : 'hubwoo_deals_create_property', hubwooSecurity, }, dataType : 'json', }); + + allCreatedProperties = allCreatedProperties.map((prop) => { return prop.replace(/["']/g, "").trim()}) + await saveUpdates( { 'hubwoo-groups-created': allCreatedGroups, 'hubwoo-properties-created': allCreatedProperties, 'hubwoo_fields_setup_completed': 1, 'hubwoo_pro_setup_completed': 1, 'hubwoo_plugin_version': '1.5.7' } ); + await runEcommSetup(); + updateProgressBar( 100 ); + transferScreen( 'move-to-list' ); + } + }, + ); + + /* CSV creation and syncing of products, contacts, deals start. */ + jQuery( document ).on( + 'click', + '#hubwoo-osc-instant-sync-historical', + async function( event ) { + event.preventDefault(); + jQuery( '#hubwoo-osc-instant-sync-historical' ).hide(); + const progress = 0; + jQuery( '#hubwoo-ocs-form' ).slideUp( 600 ); + jQuery( '#hubwoo-osc-instant-sync' ).addClass( 'hubwoo-disable' ); + jQuery( '#hubwoo-osc-schedule-sync' ).addClass( 'hubwoo-disable' ); + jQuery( '.hubwoo-progress-wrap' ).css( 'display', 'block' ); + jQuery( '#hubwoo-osc-schedule-sync' ).css( 'display', 'none' ); + updateProgressBar( 0 ); + + checkHistoricalData( 1, progress ); + + }, + ); + + + const checkHistoricalData = async( step, progress ) => { + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_ocs_historical_contact', + step, + hubwooSecurity, + }, + dataType : 'json', + } + ).fail( + ( response ) => { + updateProgressBar ( response.progress, 2 ); + } + ); + + var max_item = Math.ceil( response.max_time / 100); + + if ( 0 == response.progress && response.propertyError != true && response.status == true ) { + updateProgressBar( response.progress ); + var con_batches = Math.ceil( response.contact / max_item ); + var con_batch_count = 1; + var con_bar_update = parseFloat( 100 / con_batches ); + con_bar_update = parseFloat( con_bar_update.toFixed(2) ); + var con_progress_bar = parseFloat( 0 ); + var con_deal_response = ''; + var con_get_vid = 'process_request'; + + while ( con_batch_count <= con_batches ) { + + con_progress_bar += con_bar_update; + con_progress_bar = parseFloat( con_progress_bar.toFixed(2) ); + + if ( con_batch_count == con_batches ) { + con_progress_bar = 100; + con_get_vid = 'final_request'; + } + + con_deal_response = await bulkContactSync( 1, con_progress_bar, max_item, con_get_vid ); + con_batch_count++; + + } + + + } else if( 100 == response.progress && response.propertyError != true && response.status == true ) { + con_get_vid = 'final_request'; + await bulkContactSync( 1, response.progress, max_item, con_get_vid ); + } else if ( response.propertyError == true ) { + updateProgressBar( 100, 2 ); + + } else { + con_get_vid = 'final_request'; + updateProgressBar( Math.ceil( response.progress ) ); + bulkContactSync( parseInt( response.step ), parseInt( response.progress ), max_item, con_get_vid ); + } + }; + + const bulkContactSync = async( step, progress, max_item, con_get_vid ) => { + + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_historical_contact_sync', + step, + hubwooSecurity, + max_item, + con_get_vid, + }, + dataType : 'json', + } + ).fail( + ( response ) => { + updateProgressBar ( response.progress, 2 ); + } + ); + + if ( 100 == progress && response.propertyError != true && response.status == true ) { + updateProgressBar( progress ); + jQuery( '.hubwoo-progress-wrap' ).children( 'p' ).append( 'Completed !' ); + + if ( 'false' == response.skip_product ) { + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).css( 'width', 0 + '%' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).html( 0 + '%' ); + jQuery( '.hubwoo-progress-wrap-import' ).show(500); + } else { + jQuery( '.hubwoo-progress-wrap-import-deals p strong' ).html( '2. Syncing your Deals to Hubspot. This should only take a few moments. Thanks for your patience!' ); + } + + var total_prod = response.total_prod; + var total_deals = response.total_deals; + + if ( total_prod == 0 ) { + + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).css( 'width', 100 + '%' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).html( 100 + '%' ); + jQuery( '.hubwoo-progress-wrap-import' ).children( 'p' ).append( 'Completed !' ); + + if ( total_deals != 0 ) { + + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', 0 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( 0 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals' ).show(1000); + + await deals_check( total_deals, max_item ); + } else if ( total_deals == 0 ) { + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', 100 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( 100 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals' ).show(1000); + jQuery( '.hubwoo-progress-wrap-import-deals' ).children( 'p' ).append( 'Completed !' ); + + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsSuccess ); + await saveUpdates( { 'hubwoo_greeting_displayed_setup': 'yes' } ); + setTimeout(function(){ location.reload();}, 3000 ); + } + + } else { + + var pro_batches = Math.ceil( total_prod / max_item ); + var batch_count = 1; + var bar_update = parseFloat( 100 / pro_batches ); + bar_update = parseFloat( bar_update.toFixed(2) ); + var progress_bar = parseFloat( 0 ); + var last_request = false; + var bulk_pro_response = ''; + var total_deals = ''; + var pro_get_vid = 'process_request'; + + while ( batch_count <= pro_batches ) { + + progress_bar += bar_update; + progress_bar = parseFloat( progress_bar.toFixed(2) ); + + if ( batch_count == pro_batches ){ + progress_bar = 100; + last_request = true; + pro_get_vid = 'final_request'; + } + + bulk_pro_response = await bulkProductsSync( 1, progress_bar, last_request, max_item, pro_get_vid ); + total_deals = bulk_pro_response.total_deals; + batch_count++; + } + + if ( 100 == progress_bar ) { + jQuery( '.hubwoo-progress-wrap-import' ).children( 'p' ).append( 'Completed !' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', 0 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( 0 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals' ).show(1000); + + if ( true == last_request && total_deals == 0 ) { + + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', 100 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( 100 + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals' ).children( 'p' ).append( 'Completed !' ); + + } else { + + await deals_check( total_deals, max_item ); + } + + } + } + + } else if ( response.propertyError == true ) { + updateProgressBar( 100, 2 ); + } else { + updateProgressBar( Math.ceil( progress ) ); + // bulkContactSync( parseInt( response.step ), parseInt( response.progress ) ); + } + + return response; + } + + const bulkProductsSync = async( step, progress, last_request, max_item, pro_get_vid ) => { + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_historical_products_import', + step, + hubwooSecurity, + last_request, + max_item, + pro_get_vid, + }, + dataType : 'json', + } + ).fail( + ( response ) => { + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsError ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).addClass( 'hubwoo-progress-error' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).css( 'width', '100%' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).html( 'Failed! Please check error log or contact support' ); + } + ); + + if ( true == response.status && response.propertyError != true && response.status == true ) { + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).css( 'width', progress + '%' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).html( progress + '%' ); + jQuery( '.hubwoo-progress-wrap-import' ).show(500); + + } else if ( response.propertyError == true ) { + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsError ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).addClass( 'hubwoo-progress-error' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).css( 'width', '100%' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).html( 'Failed! Please check error log or contact support' ); + } else { + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsError ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).addClass( 'hubwoo-progress-error' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).css( 'width', '100%' ); + jQuery( '.hubwoo-progress-wrap-import .hubwoo-progress-bar' ).html( 'Failed! Please check error log or contact support' ); + } + + return response; + } + + const bulkDealsSync = async( step, progress, max_item ) => { + + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_historical_deals_sync', + step, + hubwooSecurity, + max_item, + }, + dataType : 'json', + } + ).fail( + ( response ) => { + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsError ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).addClass( 'hubwoo-progress-error' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', '100%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( 'Failed! Please check error log or contact support' ); + } + ); + + if ( true == response.status && response.propertyError != true && response.status == true ) { + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', progress + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( progress + '%' ); + jQuery( '.hubwoo-progress-wrap-import-deals' ).show(1000); + + } else if ( response.propertyError == true ) { + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsError ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).addClass( 'hubwoo-progress-error' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', '100%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( 'Failed! Please check error log or contact support' ); + } else { + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsError ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).addClass( 'hubwoo-progress-error' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).css( 'width', '100%' ); + jQuery( '.hubwoo-progress-wrap-import-deals .hubwoo-progress-bar' ).html( 'Failed! Please check error log or contact support' ); + + } + } + + const deals_check = async( total_deals, max_item ) => { + + var deal_batches = Math.ceil( total_deals / max_item ); + var deal_batch_count = 1; + var deal_bar_update = parseFloat( 100 / deal_batches ); + deal_bar_update = parseFloat( deal_bar_update.toFixed(2) ); + var deal_progress_bar = parseFloat( 0 ); + var bulk_deal_response = ''; + + while ( deal_batch_count <= deal_batches ) { + + deal_progress_bar += deal_bar_update; + deal_progress_bar = parseFloat( deal_progress_bar.toFixed(2) ); + + if ( deal_batch_count == deal_batches ) { + deal_progress_bar = 100; + + } + + bulk_deal_response = await bulkDealsSync( 1, deal_progress_bar, max_item ); + deal_batch_count++; + + if ( 100 == deal_progress_bar ) { + jQuery( '.hubwoo-progress-wrap-import-deals' ).children( 'p' ).append( 'Completed !' ); + jQuery( '.hubwoo-progress-notice' ).html( hubwooOcsSuccess ); + await saveUpdates( { 'hubwoo_greeting_displayed_setup': 'yes' } ); + location.reload(); + } + } + } + + if( new URLSearchParams(window.location.search).get('hubwoo_tab') == 'hubwoo-logs') { + + var ajax_url = ajaxUrl + '?action=hubwoo_get_datatable_data&hubwooSecurity='+hubwooSecurity; + + jQuery('#hubwoo-table').dataTable({ + "processing": true, + "serverSide": true, + "ajax": ajax_url, + "dom": 'f<"bottom">tr<"bottom"ilp>', + "ordering": false, + language: { + "lengthMenu": "Rows per page _MENU_", + "info": "_START_ - _END_ of _TOTAL_", + + paginate: { + next: '', + previous: '' + } + } + }); + } + + jQuery(document).on('click', '#hubwoo-download-log', async function(e){ + e.preventDefault(); + var button = jQuery(this); + button.addClass('hubwoo-btn__loader'); + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_download_sync_log', + hubwooSecurity, + }, + dataType : 'json', + } + ); + if ( response.success ) { + button.removeClass('hubwoo-btn__loader'); + window.location.href = response.redirect; + } + }); + + jQuery(document).on('click', '#hubwoo-clear-log', async function(e){ + e.preventDefault(); + var button = jQuery(this); + button.addClass('hubwoo-btn__loader'); + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_clear_sync_log', + hubwooSecurity, + }, + dataType : 'json', + } + ); + if ( response.success ) { + button.removeClass('hubwoo-btn__loader'); + window.location.href = response.redirect; + } + }); + + jQuery( document ).on( + 'click', + '#hubwoo-save-pipeline', + async function( event ) { + await saveUpdates( { 'hubwoo_pipeline_setup_completed': 1 } ); + transferScreen( 'move-to-sync' ); + }, + ); + + jQuery( document ).on( + 'click', + '.hubwoo_update_pipelines', + async function( event ) { + const selected_pipeline = jQuery( '.hubwoo_selected_pipeline' ).find(":selected").val(); + jQuery(this).find('.fa-refresh').addClass('fa-spin'); + const response = await jQuery.ajax( + { + type : 'POST', + url : ajaxUrl, + data : { + action : 'hubwoo_fetch_update_pipelines', + selected_pipeline, + hubwooSecurity, + }, + dataType : 'json', + } + ); + if ( response.success ) { + jQuery(this).find('.fa-refresh').removeClass('fa-spin'); + window.location.href = window.location.href; + } + } + ); + }, + ); +}( jQuery ) ); diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/index.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/index.php new file mode 100644 index 00000000..0de7bcdd --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/js/index.php @@ -0,0 +1,2 @@ + + +
      +
      +
      + + +
      + +
      +
      +
      diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-abncart.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-abncart.php new file mode 100644 index 00000000..d5300fa4 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-abncart.php @@ -0,0 +1,27 @@ + +
      +
      +
      +
      +
      +
      +
      + + +
      +
      +
      +
      +
      +
      diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-add-ons.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-add-ons.php new file mode 100644 index 00000000..129cd107 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-add-ons.php @@ -0,0 +1,169 @@ + + +
      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +

      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      +
      +
      +
      +

      +
      +
      + +
      +
      +
      +
      + +
      +
      +
      +
      +
      diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-automation.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-automation.php new file mode 100644 index 00000000..f6789944 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-automation.php @@ -0,0 +1,134 @@ +hubwoo_get_final_workflows(); +$workflows_dependencies = $hubwoo->hubwoo_workflows_dependency(); +$hubwoo_workflow_desc = $hubwoo->get_workflow_description(); +$automation_enabled = $hubwoo->is_automation_enabled(); +$access_workflow = get_option( 'hubwoo_access_workflow', 'yes' ); +$popup_display = ( 'yes' == $access_workflow ) ? 'true' : 'false'; +?> + +
      + + +
      +
      + + + + + + + + + + + + + is_workflow_dependent( $single_workflow['detail']['name'] ) ) { + if ( $automation_enabled ) { + $class = ''; + } else { + $class = 'hubwoo-disabled'; + } + ?> + + + + + + + + + + + +
      + +
      + +
      +
      +
      + Created +
      +
      + +
      + +
      +
      + +
      + +
      + +
      +
      + +
      +
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-deals.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-deals.php new file mode 100644 index 00000000..8d45e59e --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-deals.php @@ -0,0 +1,285 @@ + +
+
+ + + +
+

+ +

+
+
+
+
+
+

+ +
+
+ +
+
+
+ + + +
+
+
+ +
+ + + + + + + +
+
+ % +
+
+
+
+
+ + + +
+
+
+
+

+
+
+ +
+
+
+ + + +
+
+ +
+
+ + + + + +
+ + +
+
+
+ + + + + + + + + + $order_label ) { + $stage = Hubwoo::get_selected_deal_stage( $order_key ); + ?> + + + + + + + + + + + + +
+ + + + +
+ +
+
+
+
+ +
+
+
+
+
+

+
+
+ +
+
+
+ + + +
+
+
+ +
+
+
+ +
+
+
+
+
+

+
+
+ +
+
+
+ + + +
+
+
+
+

+ + + + +

+
+
+
+
+ % +
+
+
+ +
+
+ +
+
+
+
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-general-settings.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-general-settings.php new file mode 100644 index 00000000..afa3b0c9 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-general-settings.php @@ -0,0 +1,401 @@ + +_get( 'groups' ); ?> +hubwoo_get_final_groups(); ?> +hubwoo_workflows_and_list_groups(); ?> +hubwoo_workflows_and_list_properties(); ?> + +is_field_setup_completed(); ?> +is_list_setup_completed(); ?> +hubwoo_get_final_lists(); ?> +get_lists_description(); ?> + +
+

+
+
+
+
+

+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+ $single_group ) { + ?> +
+
+ + + + + +
+ +
+ +
+
+
+ + +
+
+ +
+
+ + + + + + + + + Created + + + +
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+
+

+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+ $single_list ) { + + ?> +
+ + +
+ +
+
+ +
+ $single_list ) { + + ?> +
+ + + + + + + + +
+ +
+
+ +
+ +
+
+
+

+
+
+
+
+
+
+

+ +

+
+

+ + +

+
+
+
+ + + +
+
+
+ + +
+
+
+
+
+ +
+
+ prepare_items(); + ?> +
+
+

+ +

+
+

+ + +

+
+
+ +
+ + + +
+
+
+
+ display(); + ?> +
+
+
+
+ +
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-logs.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-logs.php new file mode 100644 index 00000000..6a019684 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-logs.php @@ -0,0 +1,61 @@ + +
+
+
+

+ +

+
+ + + +
+ +
+ + + + + + + + + + + +
+ +
+
+ +
+ +
+ +
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-main-template.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-main-template.php new file mode 100644 index 00000000..02b874c5 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-main-template.php @@ -0,0 +1,207 @@ + + +hubwoo_default_tabs(); +?> + +is_field_setup_completed(); ?> +is_list_setup_completed(); ?> +hubwoo_get_final_lists(); ?> + +
+
+ + +
+
+ 100 ? 100 : $perc; + + ?> +
+
+
+
+
+ % +
+
+
+ +
+
+ load_template_view( $tab_content_path, $active_tab ); + ?> +
+
+ + +
+ + load_template_view( $tab_content_path, $setup_tab ); + ?> +
+ diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-overview.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-overview.php new file mode 100644 index 00000000..339eba83 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-overview.php @@ -0,0 +1,232 @@ + + +
+
+
+
+
+
+

+

+ + + + +

+
+ +
+
+
+
+
+
+

+
+ +
+
+

+
+ +
+
+

+
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

+ + +

+
+
+ +
+
+
+
+
+
+ +
+
+

+ +

+
+
+ +
+
+
+
+
+
+ + +
+
+

+ +

+

+ + + + + +

+
+
+ +
+
+
+
+
+
+ + +
+
+

+ +

+
+
+ +
+
+
+
+
+
+ + +
+
+

+ +

+
+
+ +
+
+
+
+
+
+ + +
+
+

+ +

+
+
+ +
+
+
+
+
+
+ +
+
+
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-support.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-support.php new file mode 100644 index 00000000..787cbc29 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-support.php @@ -0,0 +1,137 @@ + + +
+
+
+
+
+

+
+
+ +
+
+
+ +
+
+
+
+
+
+
+

+
+
+ +
+
+
+ +
+
+
+
+
+
+
+

+
+
+ +
+
+
+ +
+
+
+
+
+
+
+

+
+
+ +
+
+
+ +
+
+
+
+
+
+
+

+
+
+ +
+
+
+ +
+
+
+
+
+
+
+

+
+
+ +
+
+
+ +
+
+
+
+
+
+
+

+
+
+ +
+
+
+
+ +
+
+
+
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-sync-contacts.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-sync-contacts.php new file mode 100644 index 00000000..6463f572 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/hubwoo-sync-contacts.php @@ -0,0 +1,47 @@ + + +
+ +
+ +
+
+ +
+ + +
+
+ + +
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/index.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/index.php new file mode 100644 index 00000000..0de7bcdd --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/index.php @@ -0,0 +1,2 @@ +hubwoo_notice( $notice, 'hubwoo-notice' ); +} +?> + +
+
+
+

+ +

+
+
+
+

+ +

+

+ +

    +
  • +
  • +
  • +
  • +
+

+
+

+ +

+ +
+ + +
+
+
+
+ +
+
+
+

+ +

+
+
+
+ +

+ +

+ + +

+ + +

+
+
+ + +
+
+
+
+ +hubwoo_switch_account( false ); +} +?> diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-grp-pr-setup.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-grp-pr-setup.php new file mode 100644 index 00000000..26d26e4f --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-grp-pr-setup.php @@ -0,0 +1,264 @@ +_get( 'groups' ); +$final_groups = $hubwoo->hubwoo_get_final_groups(); +$hubwoo_required_groups = $hubwoo->hubwoo_workflows_and_list_groups(); +$hubwoo_required_props = $hubwoo->hubwoo_workflows_and_list_properties(); +$final_properties = array_map( + function( $property ) { + return str_replace( "'", '', $property ); + }, + get_option( 'hubwoo-properties-created', array() ) +); +$field_setup = $hubwoo->is_field_setup_completed(); + +if ( 1 == get_option( 'hubwoo_fields_setup_completed', 0 ) ) { + $cta['will_create'] = 'none'; + $cta['did_created'] = 'inline-block'; + $cta['gen_text'] = 'none'; + +} else { + $cta['will_create'] = 'inline-block'; + $cta['did_created'] = 'none'; + $cta['gen_text'] = 'block'; +} +?> +
+
+
+

+ +

+
+
+
+

+ +

+

+ +

+
    +
  • +
  • +
  • +
  • +
+
+
+ + +
+
+ + +
+
+ + + +
+
+
+ $single_group ) { + + ?> +
+
+ + + + + +
+ +
+ +
+
+
+ +
+
+ + +
+ + + +
+ +
+
+ + + + + + + + + + + + +
+ +
+ +
+
+ +
+
+
+
+
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-list-setup.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-list-setup.php new file mode 100644 index 00000000..7d000a02 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-list-setup.php @@ -0,0 +1,175 @@ +is_automation_enabled(); +$list_setup = $hubwoo->is_list_setup_completed(); +$hubwoo_lists = $hubwoo->hubwoo_get_final_lists(); +$hubwoo_lists_desc = $hubwoo->get_lists_description(); +$dynamic_lists = HubWooConnectionMananager::get_instance()->get_dynamic_lists(); + +if ( 1 == get_option( 'hubwoo_pro_lists_setup_completed', 0 ) ) { + $cta['create'] = 'none'; + $cta['created'] = 'inline-block'; + $cta['gen-text'] = 'none'; +} else { + $cta['create'] = 'inline-block'; + $cta['created'] = 'none'; + $cta['gen-text'] = 'block'; +} + +?> +
+ +
+
+

+ +

+
+
+
+

+ + +

+
+

+ +

    +
  • +
  • +
  • +
+

+
+
+
+ + +
+
+ + +
+
+
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-pipeline-setup.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-pipeline-setup.php new file mode 100644 index 00000000..dcdbd76e --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-pipeline-setup.php @@ -0,0 +1,116 @@ + + +
+
+
+

Map Deal Stages with eCommerce pipeline

+
+
+
+ + + + + +
+ + +
+
+
+ + + + + + + + + + $order_label ) { + $stage = Hubwoo::get_selected_deal_stage( $order_key ); + ?> + + + + + + + + + + + + +
+ + + + +
+ + + +
+
+
+
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-sync.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-sync.php new file mode 100644 index 00000000..6d43f18f --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/admin/templates/setup/hubwoo-sync.php @@ -0,0 +1,209 @@ + + +
+
+
+

+ +

+
+
+
+

+ +

+

+ +

+
+
+ + + + + +
+
+
+ + + +
+
+
+ +
+
+
+

+ +

+
+
+
+
+

+ +

+
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+

+ +

+
+
+

+
+
+
+
+
+ +
+ $data ) { + ?> +
+ + + +
+ + + + + + + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ +
+
+ + +
+
+
+
+
+
diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/changelog.txt b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/changelog.txt new file mode 100644 index 00000000..88bef7c9 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/changelog.txt @@ -0,0 +1,123 @@ + *** MWB HubSpot for WooCommerce Changelog *** +2024-08-30 - version 1.5.7 +* Fix - Bulk line item update. + +2024-06-05 - version 1.5.6 +* Fix - Deal Update Fix for HPOS. + +2024-04-12 - version 1.5.5 +* Fix - Minor Fixes. + +2024-04-10 - version 1.5.4 +* Fix - Minor Fixes. + +2024-03-06 - version 1.5.3 +* Added - HPOS Compatibility Addon. + +2024-01-12 - version 1.5.2 +* Fix - Minor Fixes. + +2023-09-22 - version 1.5.1 +* Fix - Minor Bug Fixes. + +2023-08-21 - version 1.5.0 +* Added - Refresh Pipeline. + +2023-08-01 - version 1.4.9 +* Added - Delete Abandoned Data. + +2023-06-29 - version 1.4.8 +* Fix - Minor Bug Fixes. + +2023-05-22 - version 1.4.7 +* Fix - Minor Bug Fixes. + +2023-05-03 - version 1.4.6 +* Add - UTM links. + +2023-03-17 - version 1.4.5 +* Fix - Minor Bug Fixes. + +2023-01-31 - version 1.4.4 +* Fix - Redirect URI. + +2023-01-19 - version 1.4.3 +* Fix - Update filter. + +2022-11-17 - version 1.4.2 +* Fix - Minor Bug Fixes. + +2022-11-10 - version 1.4.1 +* Fix - Minor Bug Fixes. + +2022-11-07 - version 1.4.0 +* Added - New API endpoints. + +2022-09-15 - version 1.3.3 +* Added - migration notice & subscribe us form. + +2022-08-08 - version 1.3.2 +* Added - Update multi currency. + +2022-06-02 - version 1.3.1 +* Fix - Minor Bug Fixes. + +2022-04-14 - version 1.3.0 +* Added - Line item filter. + +2022-03-17 - version 1.2.9 +* Fix - Minor Bug Fixes. + +2022-01-31 - version 1.2.8 +* Added - Update Scopes. + +2022-01-13 - version 1.2.7 +* Added - Deal Company association. + +2021-12-06 - version 1.2.6 +* Fix - Newsletter Subscription Property issue. + +2021-11-12 - version 1.2.5 +* Fix - Sync message issue. + +2021-10-20 - version 1.2.4 +* Fix - Minor Bug Fixes. + +2021-09-13 - version 1.2.3 +* Add - Content Part + +2021-08-18 - version 1.2.2 +* Add - Fixed deal and contact association issue. + +2021-05-29 - version 1.2.1 +* Add - Bug Fixes. + +2021-04-23 - version 1.2.0 +* Add - Historical Sync Data. + +2021-04-23 - version 1.0.8 +* Fix - Creating Groups issue. + +2021-04-06 - version 1.0.7 +* Fix - Authentication issue. + +2020-10-18 - version 1.0.6 +* Fix - Deal update issue. + +2020-09-30 - version 1.0.5 +* Fix - Source tracking. + +2020-06-23 - version 1.0.4 +* Fix - Session issue and minor bugs. + +2020-05-21 - version 1.0.3 +* Add - Shipment tracking and re-sync deals. + +2020-05-15 - version 1.0.2 +* Add - Multi site support. + +2020-05-07 - version 1.0.1 +* Fix - Contact sync from sync tab. + +2020-01-24 - version 1.0.0 +* Initial release. \ No newline at end of file diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-activator.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-activator.php new file mode 100644 index 00000000..7e4f53cf --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-activator.php @@ -0,0 +1,74 @@ + true, + 'message' => esc_html__( 'Success', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $response['status'] = false; + $response['message'] = esc_html__( 'Something went wrong. Please verify your HubSpot Connection once.', 'makewebbetter-hubspot-for-woocommerce' ); + } + } + + echo wp_json_encode( $response ); + + wp_die(); + } + + /** + * Create new group for contact properties. + * + * @since 1.0.0 + */ + public function hubwoo_create_property_group() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + if ( ! empty( $_POST['groupName'] ) ) { + $group_name = sanitize_key( wp_unslash( $_POST['groupName'] ) ); + } + $object_type = 'contacts'; + $groups = HubWooContactProperties::get_instance()->_get( 'groups' ); + $group_details = array(); + if ( ! empty( $groups ) ) { + foreach ( $groups as $single_group ) { + if ( $single_group['name'] == $group_name ) { + $group_details = $single_group; + break; + } + } + } + $response = HubWooConnectionMananager::get_instance()->create_group( $group_details, $object_type ); + echo wp_json_encode( $response ); + wp_die(); + } + + /** + * Get hubwoo group properties by group name. + * + * @since 1.0.0 + */ + public function hubwoo_get_group_properties() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( isset( $_POST['groupName'] ) ) { + + $group_name = sanitize_text_field( wp_unslash( $_POST['groupName'] ) ); + $properties = HubWooContactProperties::get_instance()->_get( 'properties', $group_name ); + echo wp_json_encode( $properties ); + } + + wp_die(); + } + + /** + * Create an group property on ajax request. + * + * @since 1.0.0 + */ + public function hubwoo_create_group_property() { + + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( isset( $_POST['propertyDetails'] ) ) { + $property_details = map_deep( wp_unslash( $_POST['propertyDetails'] ), 'sanitize_text_field' ); + $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $property_details, 'contact' ); + $response['body'] = json_decode( $response['body'], true ); + echo wp_json_encode( $response ); + wp_die(); + } + } + + /** + * Create deal group property on ajax request. + * + * @since 1.4.0 + */ + public function hubwoo_deals_create_property() { + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $product_properties = Hubwoo::hubwoo_get_product_properties(); + $object_type = 'products'; + $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $product_properties, $object_type ); + if ( 201 == $response['status_code'] || 207 == $response['status_code'] ) { + update_option( 'hubwoo_product_property_created', 'yes' ); + $response['body'] = json_decode( $response['body'], true ); + } else if ( 403 == $response['status_code'] ) { + update_option( 'hubwoo_product_scope_needed', 'yes' ); + update_option( 'hubwoo_ecomm_setup_completed', 'yes' ); + } + + $deal_properties = Hubwoo::hubwoo_get_deal_properties(); + $object_type = 'deals'; + $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $deal_properties, $object_type ); + if ( 201 == $response['status_code'] || 207 == $response['status_code'] ) { + update_option( 'hubwoo_deal_property_created', 'yes' ); + $response['body'] = json_decode( $response['body'], true ); + } + + echo wp_json_encode( $response ); + wp_die(); + } + + + /** + * Get lists to be created on husbpot. + * + * @since 1.0.0 + */ + public function hubwoo_get_lists_to_create() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $lists = HubWooContactProperties::get_instance()->_get( 'lists' ); + + echo wp_json_encode( $lists ); + + wp_die(); + } + + /** + * Create bulk lists on hubspot. + * + * @since 1.0.0 + */ + public function hubwoo_create_list() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( isset( $_POST['listDetails'] ) ) { + + $list_details = map_deep( wp_unslash( $_POST['listDetails'] ), 'sanitize_text_field' ); + $response = HubWooConnectionMananager::get_instance()->create_list( $list_details ); + echo wp_json_encode( $response ); + } + + wp_die(); + } + + + /** + * Create single group on HubSpot. + * + * @since 1.0.0 + */ + public function hubwoo_create_single_group() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + if ( ! empty( $_POST['name'] ) ) { + $group_name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); + } else { + $group_name = ''; + } + $groups = HubWooContactProperties::get_instance()->_get( 'groups' ); + $group_details = ''; + $object_type = 'contacts'; + + if ( is_array( $groups ) && count( $groups ) ) { + + foreach ( $groups as $single_group ) { + + if ( $single_group['name'] === $group_name ) { + + $group_details = $single_group; + break; + } + } + } + + if ( ! empty( $group_details ) ) { + + $response = HubWooConnectionMananager::get_instance()->create_group( $group_details, $object_type ); + } + + if ( isset( $response['status_code'] ) && ( 201 === $response['status_code'] || 409 === $response['status_code'] ) ) { + + $add_groups = get_option( 'hubwoo-groups-created', array() ); + $add_groups[] = $group_details['name']; + update_option( 'hubwoo-groups-created', $add_groups ); + } + + echo wp_json_encode( $response ); + wp_die(); + } + + /** + * Create single property on HubSpot. + * + * @since 1.0.0 + */ + public function hubwoo_create_single_property() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( ! empty( $_POST['group'] ) ) { + $group_name = sanitize_text_field( wp_unslash( $_POST['group'] ) ); + } else { + $group_name = ''; + } + + if ( ! empty( $_POST['name'] ) ) { + $property_name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); + } else { + $property_name = ''; + } + + $properties = HubWooContactProperties::get_instance()->_get( 'properties', $group_name ); + + if ( ! empty( $properties ) && count( $properties ) ) { + + foreach ( $properties as $single_property ) { + + if ( ! empty( $single_property['name'] ) && $single_property['name'] == $property_name ) { + + $property_details = $single_property; + break; + } + } + } + + if ( ! empty( $property_details ) ) { + + $property_details['groupName'] = $group_name; + + $response = HubWooConnectionMananager::get_instance()->create_property( $property_details, 'contacts' ); + } + + if ( isset( $response['status_code'] ) && ( 201 === $response['status_code'] || 409 === $response['status_code'] ) ) { + + $add_properties = get_option( 'hubwoo-properties-created', array() ); + $add_properties[] = $property_details['name']; + update_option( 'hubwoo-properties-created', $add_properties ); + } + + echo wp_json_encode( $response ); + + wp_die(); + } + + /** + * Create single list on hubspot. + * + * @since 1.0.0 + */ + public function hubwoo_create_single_list() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( isset( $_POST['name'] ) ) { + + $list_name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); + + $lists = HubWooContactProperties::get_instance()->_get( 'lists' ); + + if ( ! empty( $lists ) && count( $lists ) ) { + + foreach ( $lists as $single_list ) { + + if ( ! empty( $single_list['name'] ) && $single_list['name'] == $list_name ) { + + $list_details = $single_list; + break; + } + } + } + + if ( ! empty( $list_details ) ) { + + $response = HubWooConnectionMananager::get_instance()->create_list( $list_details ); + } + + if ( isset( $response['status_code'] ) && ( 200 === $response['status_code'] || 409 === $response['status_code'] ) ) { + + $add_lists = get_option( 'hubwoo-lists-created', array() ); + $add_lists[] = $list_name; + update_option( 'hubwoo-lists-created', $add_lists ); + } + + echo wp_json_encode( $response ); + wp_die(); + } + } + + /** + * Create single list on hubspot. + * + * @since 1.0.0 + */ + public function hubwoo_create_single_workflow() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( ! empty( $_POST['name'] ) ) { + + $name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); + + $add_workflows = get_option( 'hubwoo-workflows-created', array() ); + + if ( in_array( $name, $add_workflows ) ) { + return; + } + + $workflows = HubWooContactProperties::get_instance()->_get( 'workflows' ); + + if ( ! empty( $workflows ) ) { + + foreach ( $workflows as $single_workflow ) { + + if ( isset( $single_workflow['name'] ) && $single_workflow['name'] == $name ) { + + $workflow_details = $single_workflow; + break; + } + } + } + + if ( ! empty( $workflow_details ) ) { + + $response = HubWooConnectionMananager::get_instance()->create_workflow( $workflow_details ); + + if ( isset( $response['status_code'] ) && ( 200 != $response['status_code'] ) ) { + + $response = HubwooErrorHandling::get_instance()->hubwoo_handle_response( $response, HubwooConst::HUBWOOWORKFLOW, array( 'current_workflow' => $workflow_details ) ); + } + + if ( 200 == $response['status_code'] ) { + + $add_workflows[] = $workflow_details['name']; + update_option( 'hubwoo-workflows-created', $add_workflows ); + + $workflow_data = isset( $response['body'] ) ? $response['body'] : ''; + + if ( ! empty( $workflow_data ) ) { + + $workflow_data = json_decode( + $workflow_data + ); + $id = isset( $workflow_data->id ) ? $workflow_data->id : ''; + update_option( $workflow_details['name'], $id ); + } + } + + echo wp_json_encode( $response ); + wp_die(); + } + } + } + + /** + * Ajax search for order statuses. + * + * @since 1.0.0 + */ + public function hubwoo_search_for_order_status() { + + $order_statuses = wc_get_order_statuses(); + + $modified_order_statuses = array(); + + if ( ! empty( $order_statuses ) ) { + + foreach ( $order_statuses as $status_key => $single_status ) { + + $modified_order_statuses[] = array( $status_key, $single_status ); + } + } + + echo wp_json_encode( $modified_order_statuses ); + + wp_die(); + } + + /** + * User roles for batch sync. + * + * @since 1.0.0 + */ + public function hubwoo_get_for_user_roles() { + + global $hubwoo; + + $user_roles = $hubwoo->hubwoo_get_user_roles(); + + $modified_order_statuses = array(); + + if ( ! empty( $user_roles ) ) { + + foreach ( $user_roles as $user_key => $single_role ) { + + $modified_order_statuses[] = array( $user_key, $single_role ); + } + } + + echo wp_json_encode( $modified_order_statuses ); + + wp_die(); + } + + /** + * Callback to sync contacts to hubspot in 1 click. + * + * @since 1.0.0 + */ + public function hubwoo_ocs_instant_sync() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( ! empty( $_POST['step'] ) ) { + $step = sanitize_text_field( wp_unslash( $_POST['step'] ) ); + } else { + $step = ''; + } + + $contact_sync = true; + $hubwoo_datasync = new HubwooDataSync(); + + $total_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user( true ); + + if ( ! $total_need_syncing ) { + + $percentage_done = 100; + $response = array( + 'step' => $step + 1, + 'progress' => $percentage_done, + 'completed' => true, + 'nocontacts' => true, + ); + + echo wp_json_encode( $response ); + wp_die(); + } + + $users_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user(); + + $user_data = array(); + + $args = array(); + + if ( is_array( $users_need_syncing ) && count( $users_need_syncing ) ) { + + $user_data = $hubwoo_datasync->get_sync_data( $users_need_syncing ); + $args['ids'] = $users_need_syncing; + $args['type'] = 'user'; + } else { + + $roles = get_option( 'hubwoo_customers_role_settings', array() ); + + if ( in_array( 'guest_user', $roles, true ) ) { + + $contact_sync = false; + + $user_to_sync = $hubwoo_datasync->hubwoo_get_all_unique_user( false, 'guestOrder' ); + + $user_data = $hubwoo_datasync->get_guest_sync_data( $user_to_sync ); + $args['ids'] = $user_to_sync; + $args['type'] = 'order'; + } + } + + if ( ! empty( $user_data ) ) { + + if ( Hubwoo::is_valid_client_ids_stored() ) { + + $flag = true; + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + $response = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $user_data, $args ); + + if ( ( count( $user_data ) > 1 ) && isset( $response['status_code'] ) && 400 === $response['status_code'] ) { + + if ( isset( $response['response'] ) ) { + $error_response = json_decode( $response['response'], true ); + + if ( isset( $error_response['failureMessages'] ) ) { + + $failure_messages = $error_response['failureMessages']; + + if ( is_array( $failure_messages ) ) { + foreach ( $failure_messages as $failure_error ) { + $property_validation_error = isset( $failure_error['propertyValidationResult'] ) ? 1 : 0; + if ( $property_validation_error ) { + $percentage_done = 100; + $response = array( + 'step' => $step + 1, + 'progress' => $percentage_done, + 'completed' => true, + 'propertyError' => true, + ); + + echo wp_json_encode( $response ); + wp_die(); + } + } + } + } + } + $response = Hubwoo_Admin::hubwoo_split_contact_batch( $user_data ); + } + $hsocssynced = get_option( 'hubwoo_ocs_contacts_synced', 0 ); + + if ( ! empty( $user_to_sync ) ) { + $hsocssynced += count( $user_to_sync ); + } + + if ( $contact_sync ) { + foreach ( $users_need_syncing as $user_id ) { + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); + } + } else { + foreach ( $user_to_sync as $order_id ) { + //hpos changes + $order = wc_get_order($order_id); + $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); + $order->save(); + } + } + + update_option( 'hubwoo_ocs_contacts_synced', $hsocssynced ); + } + } + } + + $percentage_done = 0; + $total_users = get_option( 'hubwoo_total_ocs_need_sync', 0 ); + if ( $total_users ) { + + $synced = $total_users - $total_need_syncing; + $percentage = ( $synced / $total_users ) * 100; + $percentage_done = sprintf( '%.2f', $percentage ); + } + + $response = array( + 'step' => $step + 1, + 'progress' => $percentage_done, + 'totalNeedSyncing' => $total_need_syncing, + 'synced' => wp_json_encode( $users_need_syncing ), + ); + + $contactqueue = $hubwoo_datasync->hubwoo_get_all_unique_user( true ); + + if ( ! $contactqueue ) { + $response['progress'] = 100; + $response['completed'] = true; + delete_option( 'hubwoo_total_ocs_need_sync' ); + delete_option( 'hubwoo_ocs_contacts_synced' ); + } + + echo wp_json_encode( $response ); + + wp_die(); + } + + + /** + * Update workflow listing window when a workflow is created. + * + * @since 1.0.0 + */ + public function hubwoo_update_workflow_tab() { + + global $hubwoo; + + $created_workflows = get_option( 'hubwoo-workflows-created', '' ); + + $workflows_dependencies = $hubwoo->hubwoo_workflows_dependency(); + + $updated_tabs = array(); + + $dependencies_count = 0; + + if ( is_array( $workflows_dependencies ) && count( $workflows_dependencies ) ) { + foreach ( $workflows_dependencies as $workflows ) { + $dependencies_count = count( $workflows['dependencies'] ); + $counter = 0; + foreach ( $workflows['dependencies'] as $dependencies ) { + if ( is_array( $created_workflows ) && count( $created_workflows ) ) { + if ( in_array( $dependencies, $created_workflows, true ) ) { + $counter++; + } + } + } + if ( $counter === $dependencies_count ) { + $updated_tabs[] = $workflows['workflow']; + } + } + } + echo wp_json_encode( $updated_tabs ); + wp_die(); + } + + /** + * Email the hubspot API error log. + * + * @since 1.0.0 + */ + public function hubwoo_email_the_error_log() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + $log_dir = WC_LOG_DIR . 'hubspot-for-woocommerce-logs.log'; + $attachments = array( $log_dir ); + $to = 'integrations@makewebbetter.com'; + $subject = 'HubSpot Pro Error Logs'; + $headers = array( 'Content-Type: text/html; charset=UTF-8' ); + $message = 'admin email: ' . get_option( 'admin_email', '' ) . '
'; + $status = wp_mail( $to, $subject, $message, $headers, $attachments ); + + if ( 1 === $status ) { + $status = 'success'; + } else { + $status = 'failure'; + } + update_option( 'hubwoo_pro_alert_param_set', false ); + echo wp_json_encode( $status ); + wp_die(); + } + + + /** + * Disconnect hubspot account. + * + * @since 1.0.0 + */ + public function hubwoo_disconnect_account() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + global $hubwoo; + + $delete_meta = false; + + if ( isset( $_POST['data'] ) ) { + $data = map_deep( wp_unslash( $_POST['data'] ), 'sanitize_text_field' ); + $delete_meta = 'yes' == $data['delete_meta'] ? true : false; + } + + $hubwoo->hubwoo_switch_account( true, $delete_meta ); + echo wp_json_encode( true ); + wp_die(); + } + + /** + * Get wordpress/woocommerce user roles. + * + * @since 1.0.0 + */ + public function hubwoo_get_user_for_current_roles() { + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $hubwoo_data_sync = new HubwooDataSync(); + $unique_users = $hubwoo_data_sync->hubwoo_get_all_unique_user( true ); + update_option( 'hubwoo_total_ocs_need_sync', $unique_users ); + echo wp_json_encode( $unique_users ); + wp_die(); + } + + /** + * Get sync status for contact/deal. + * + * @since 1.0.0 + */ + public function hubwoo_get_current_sync_status() { + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + if ( ! empty( $_POST['data'] ) ) { + $type = map_deep( wp_unslash( $_POST['data'] ), 'sanitize_text_field' ); + } else { + $type = ''; + } + if ( isset( $type['type'] ) ) { + switch ( $type['type'] ) { + case 'contact': + $status = get_option( 'hubwoo_background_process_running', false ); + break; + case 'deal': + $status = get_option( 'hubwoo_deals_sync_running', 0 ); + break; + default: + $status = false; + break; + } + echo wp_json_encode( $status ); + } + wp_die(); + } + + /** + * Saving Updates to the Database. + * + * @since 1.0.0 + */ + public function hubwoo_save_updates() { + + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( isset( $_POST['updates'] ) && ! empty( $_POST['action'] ) ) { + $updates = map_deep( wp_unslash( $_POST['updates'] ), 'sanitize_text_field' ); + + if ( isset( $_POST['type'] ) ) { + $action = map_deep( wp_unslash( $_POST['type'] ), 'sanitize_text_field' ); + $status = false; + if ( count( $updates ) ) { + + foreach ( $updates as $db_key => $value ) { + + if ( 'update' === $action ) { + $value = 'EMPTY_ARRAY' === $value ? array() : $value; + update_option( $db_key, $value ); + } elseif ( 'delete' === $action ) { + delete_option( $value ); + } + } + + $status = true; + } + echo wp_json_encode( $status ); + wp_die(); + } + } + } + + /** + * Saving Updates to the Database. + * + * @since 1.0.0 + */ + public function hubwoo_manage_sync() { + + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( ! empty( $_POST['process'] ) ) { + $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); + + if ( ! empty( $process ) ) { + + if ( 'start-deal' === $process ) { + $orders_needs_syncing = Hubwoo_Admin::hubwoo_orders_count_for_deal(); + if ( $orders_needs_syncing ) { + + update_option( 'hubwoo_deals_sync_running', 1 ); + update_option( 'hubwoo_deals_sync_total', $orders_needs_syncing ); + as_schedule_recurring_action( time(), 300, 'hubwoo_deals_sync_background' ); + } + } else { + Hubwoo::hubwoo_stop_sync( $process ); + } + echo true; + } + } + + wp_die(); + } + + /** + * Manages Vids to Database. + * + * @since 1.0.0 + */ + public function hubwoo_manage_vids() { + + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $status = false; + + if ( ! empty( $_POST['process'] ) ) { + $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); + if ( ! empty( $process ) ) { + switch ( $process ) { + case 'contact': + update_option( 'hubwoo_contact_vid_update', 1 ); + as_schedule_recurring_action( time(), 300, 'hubwoo_update_contacts_vid' ); + $status = true; + break; + case 'deal': + delete_option( 'hubwoo_ecomm_order_date_allow' ); + $orders_needs_syncing = Hubwoo_Admin::hubwoo_orders_count_for_deal(); + if ( $orders_needs_syncing ) { + update_option( 'hubwoo_deals_sync_running', 1 ); + update_option( 'hubwoo_deals_sync_total', $orders_needs_syncing ); + as_schedule_recurring_action( time(), 300, 'hubwoo_deals_sync_background' ); + $status = true; + } + break; + default: + break; + } + } + } + echo wp_json_encode( $status ); + wp_die(); + } + + /** + * Ajax call to search for deal stages. + * + * @since 1.0.0 + */ + public function hubwoo_deals_search_for_stages() { + + $stages = get_option( 'hubwoo_fetched_deal_stages', array() ); + + $existing_stages = array(); + + $deal_stage_id = 'stageId'; + + if ( 'yes' == get_option( 'hubwoo_ecomm_pipeline_created', 'no' ) ) { + $deal_stage_id = 'id'; + } + + if ( is_array( $stages ) && count( $stages ) ) { + + foreach ( $stages as $stage ) { + + $existing_stages[] = array( $stage[ $deal_stage_id ], $stage['label'] ); + } + } + + echo wp_json_encode( $existing_stages ); + wp_die(); + } + + /** + * Get orders count for 1 click sync. + * + * @since 1.0.0 + */ + public function hubwoo_ecomm_get_ocs_count() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $ocs_order_count = Hubwoo_Admin::hubwoo_orders_count_for_deal(); + if ( 1 != get_option( 'hubwoo_deals_sync_running', 0 ) ) { + update_option( 'hubwoo_deals_current_sync_total', $ocs_order_count ); + } + echo wp_json_encode( $ocs_order_count ); + wp_die(); + } + + /** + * Track sync percentage and eta for background processes + * + * @since 1.0.0 + */ + public function hubwoo_sync_status_tracker() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + $response = array( + 'percentage' => 0, + 'is_running' => 'no', + ); + + if ( isset( $_POST['process'] ) ) { + $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); + if ( ! empty( $process ) ) { + switch ( $process ) { + case 'contact': + if ( get_option( 'hubwoo_background_process_running', false ) ) { + + $unique_users = Hubwoo::hubwoo_get_total_contact_need_sync(); + update_option( 'hubwoo_total_ocs_contact_need_sync', $unique_users ); + + $users_to_sync = get_option( 'hubwoo_total_ocs_contact_need_sync', 0 ); + $current_user_sync = get_option( 'hubwoo_ocs_contacts_synced', 0 ); + $perc = round( $current_user_sync * 100 / $users_to_sync ); + $response['percentage'] = $perc > 100 ? 100 : $perc; + $response['is_running'] = 'yes'; + + if ( 100 == $response['percentage'] ) { + update_option( 'hubwoo_background_process_running', false ); + } + } + + break; + case 'product': + if ( 'yes' == get_option( 'hubwoo_start_product_sync', 'no' ) ) { + $total_products = get_option( 'hubwoo_products_to_sync', 0 ); + $sync_result = Hubwoo::hubwoo_make_db_query( 'total_synced_products' ); + if ( ! empty( $sync_result ) ) { + $sync_result = (array) $sync_result[0]; + $synced_products = $sync_result['COUNT(post_id)']; + if ( 0 != $total_products ) { + $response['percentage'] = round( $synced_products * 100 / $total_products ); + $response['eta'] = Hubwoo::hubwoo_create_sync_eta( $synced_products, $total_products, 3, 5 ); + $response['is_running'] = 'yes'; + } + } + } + break; + case 'order': + if ( 1 == get_option( 'hubwoo_deals_sync_running', 0 ) ) { + $data = Hubwoo::get_sync_status(); + $response['percentage'] = $data['deals_progress']; + $response['eta'] = $data['eta_deals_sync']; + $response['is_running'] = 'yes'; + } + break; + } + echo wp_json_encode( $response ); + } + } + wp_die(); + } + /** + * Upserting ecomm bridge settings for hubspot objects-contact,deal,product,line-item + * + * @since 1.0.0 + */ + public function hubwoo_ecomm_setup() { + + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $response = array( + 'status_code' => 404, + 'response' => 'E-Commerce Bridge Setup Failed.', + ); + + if ( ! empty( $_POST['process'] ) ) { + $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); + + if ( ! empty( $process ) ) { + switch ( $process ) { + case 'get-total-products': + $store = Hubwoo::get_store_data(); + break; + case 'update-deal-stages': + $deal_stages = Hubwoo::fetch_deal_stages_from_pipeline( 'Ecommerce Pipeline', false ); + $deal_model = Hubwoo::hubwoo_deal_stage_model(); + $process_deal_stages = array_map( + function ( $deal_stage_data ) use ( $deal_model ) { + $updates = ( isset( $deal_model[ $deal_stage_data['id'] ] ) && ! empty( $deal_model[ $deal_stage_data['id'] ] ) ) ? $deal_model[ $deal_stage_data['id'] ] : ''; + if ( ! empty( $updates ) ) { + foreach ( $updates as $key => $value ) { + if ( array_key_exists( $key, $deal_stage_data ) ) { + $deal_stage_data[ $key ] = $value; + } + } + } + return $deal_stage_data; + }, + $deal_stages['stages'] + ); + $deal_stages['stages'] = $process_deal_stages; + $pipeline_id = $deal_stages['id']; + unset( $deal_stages['id'] ); + $response = HubWooConnectionMananager::get_instance()->update_deal_pipeline( $deal_stages, $pipeline_id ); + update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_deals_mapping() ); + break; + case 'reset-mapping': + if ( ! empty( $_POST['pipeline'] ) ) { + $selected_pipeline = map_deep( wp_unslash( $_POST['pipeline'] ), 'sanitize_text_field' ); + if ( 'Ecommerce Pipeline' == $selected_pipeline ) { + update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_deals_mapping() ); + } else if ( 'Sales Pipeline' == $selected_pipeline ) { + update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_sales_deals_mapping() ); + } + } else { + update_option( 'hubwoo_ecomm_final_mapping', '' ); + } + break; + case 'start-products-sync': + if ( ! as_next_scheduled_action( 'hubwoo_products_sync_background' ) ) { + update_option( 'hubwoo_start_product_sync', 'yes' ); + as_schedule_recurring_action( time(), 180, 'hubwoo_products_sync_background' ); + } + $response['status_code'] = 200; + $response['response'] = 'Product Sync-Status has been initiated'; + break; + + } + echo wp_json_encode( $response ); + } + } + wp_die(); + } + + /** + * Get the onboarding submission data. + * + * @since 1.0.4 + */ + public function hubwoo_get_onboard_form() { + + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + if ( ! empty( $_POST['key'] ) ) { + $key = map_deep( wp_unslash( $_POST['key'] ), 'sanitize_text_field' ); + $key = str_replace( '[]', '', $key ); + $options = array_map( + function( $option ) { + return array( $option, $option ); + }, + Hubwoo::hubwoo_onboarding_questionaire()[ $key ]['options'] + ); + echo json_encode( $options ); + } + wp_die(); + } + + /** + * Handle the onboarding form submision. + * + * @since 1.0.4 + */ + public function hubwoo_onboard_form() { + // check the nonce sercurity. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( ! empty( $_POST['formData'] ) ) { + $form_data = map_deep( wp_unslash( $_POST['formData'] ), 'sanitize_text_field' ); + if ( ! empty( $form_data ) ) { + $form_details = array(); + array_walk( + $form_data, + function( $field, $name ) use ( &$form_details ) { + if ( is_array( $field ) ) { + $field = HubwooGuestOrdersManager::hubwoo_format_array( $field ); + } + $form_details['fields'][] = array( + 'name' => $name, + 'value' => $field, + ); + } + ); + echo json_encode( HubWooConnectionMananager::get_instance()->submit_form_data( $form_details, '5373140', '0354594f-26ce-414d-adab-4e89f2104902' ) ); + } + } + wp_die(); + } + + + /** + * Generate Contacts CSV file. + */ + public function hubwoo_ocs_historical_contact() { + + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( ! empty( $_POST['step'] ) ) { + $step = sanitize_text_field( wp_unslash( $_POST['step'] ) ); + } else { + $step = ''; + } + + $hubwoo_datasync = new HubwooDataSync(); + $total_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user( true ); + $server_time = ini_get( 'max_execution_time' ); + + if ( isset( $server_time ) && $server_time < 1500 ) { + $server_time = 1500; + } + + if ( ! $total_need_syncing ) { + + $percentage_done = 100; + + echo wp_json_encode( + array( + 'step' => $step + 1, + 'progress' => $percentage_done, + 'max_time' => empty( $server_time ) ? 1500 : $server_time, + 'status' => true, + 'response' => true, + ) + ); + wp_die(); + + } else { + $percentage_done = 0; + + echo wp_json_encode( + array( + 'step' => $step, + 'progress' => $percentage_done, + 'max_time' => empty( $server_time ) ? '1500' : $server_time, + 'status' => true, + 'contact' => $total_need_syncing, + 'response' => 'Historical contact data found.', + ) + ); + wp_die(); + } + + } + + /** + * Import historical contacts csv to hubspot. + */ + public function hubwoo_historical_contact_sync() { + + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + if ( ! empty( $_POST['step'] ) ) { + $step = sanitize_text_field( wp_unslash( $_POST['step'] ) ); + } else { + $step = ''; + } + + if ( ! empty( $_POST['max_item'] ) ) { + $max_item = sanitize_text_field( wp_unslash( $_POST['max_item'] ) ); + } else { + $max_item = 15; + } + + $con_get_vid = ! empty( $_POST['con_get_vid'] ) ? sanitize_text_field( wp_unslash( $_POST['con_get_vid'] ) ) : 'final_request'; + $skip_product = 'false'; + $user_ids = array(); + + $contraints = array( + array( + 'key' => 'hubwoo_ecomm_pro_id', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => 'hubwoo_ecomm_invalid_pro', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => 'hubwoo_product_synced', + 'compare' => 'NOT EXISTS', + ), + 'relation' => 'AND', + ); + + $total_products = Hubwoo::hubwoo_ecomm_get_products( -1, $contraints ); + + if ( 'yes' == get_option( 'hubwoo_product_scope_needed', 'no' ) ) { + $total_products = array(); + $skip_product = 'true'; + } + + if ( count( $total_products ) == 0 ) { + + if( Hubwoo::hubwoo_check_hpos_active() ) { + $query = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'post_parent' => 0, + 'meta_key' => 'hubwoo_ecomm_deal_created', + 'meta_compare' => 'NOT EXISTS', + )); + + $order_ids = $query->get_orders(); + } else { + $query = new WP_Query(); + + $order_args = array( + 'post_type' => 'shop_order', + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_created', + 'compare' => 'NOT EXISTS', + ), + ), + ); + + $order_ids = $query->query( $order_args ); + } + } + + $hubwoo_datasync = new HubwooDataSync(); + $user_ids = $hubwoo_datasync->hubwoo_get_all_unique_user( false, 'customer', $max_item ); + + $response = ''; + + if ( empty( $user_ids ) ) { + $percentage_done = 100; + echo wp_json_encode( + array( + 'step' => $step + 1, + 'progress' => $percentage_done, + 'status' => true, + 'total_prod' => empty( $total_products ) ? 0 : count( $total_products ), + 'total_deals' => empty( $order_ids ) ? 0 : count( $order_ids ), + 'skip_product' => $skip_product, + 'response' => 'No Contact found.', + ) + ); + wp_die(); + } + + foreach ( $user_ids as $user_id ) { + + $user_info = json_decode( json_encode( get_userdata( $user_id ) ), true ); + $user_email = $user_info['data']['user_email']; + $contact = array(); + $properties = array(); + + $hubwoo_customer = new HubWooCustomer( $user_id ); + $properties = $hubwoo_customer->get_contact_properties(); + $user_properties = $hubwoo_customer->get_user_data_properties( $properties ); + foreach ( $user_properties as $key => $property ) { + $contact[ $property['property'] ] = $property['value']; + } + $contact['email'] = $user_email; + $contact = array( + 'properties' => $contact, + ); + + if ( ! empty( $contact ) ) { + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'contacts', $contact ); + + if ( 201 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + update_user_meta( $user_id, 'hubwoo_user_vid', $contact_vid->id ); + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); + + } else if ( 409 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + $hs_id = explode( 'ID: ', $contact_vid->message ); + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $hs_id[1], $contact ); + update_user_meta( $user_id, 'hubwoo_user_vid', $hs_id[1] ); + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); + } else if ( 400 == $response['status_code'] ) { + update_user_meta( $user_id, 'hubwoo_invalid_contact', 'yes' ); + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); + } + + do_action( 'hubwoo_ecomm_contact_synced', $user_email ); + } + } + } + + echo wp_json_encode( + array( + 'step' => $step + 1, + 'status' => true, + 'total_prod' => empty( $total_products ) ? 0 : count( $total_products ), + 'total_deals' => empty( $order_ids ) ? 0 : count( $order_ids ), + 'skip_product' => $skip_product, + 'response' => 'Historical contacts synced successfully.', + ) + ); + wp_die(); + + } + + /** + * Sync historical products data. + */ + public function hubwoo_historical_products_import() { + + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $order_ids = array(); + + $step = ! empty( $_POST['step'] ) ? sanitize_text_field( wp_unslash( $_POST['step'] ) ) : ''; + + $pro_get_vid = ! empty( $_POST['pro_get_vid'] ) ? sanitize_text_field( wp_unslash( $_POST['pro_get_vid'] ) ) : 'final_request'; + + if ( ! empty( $_POST['max_item'] ) ) { + $max_item = sanitize_text_field( wp_unslash( $_POST['max_item'] ) ); + } else { + $max_item = 15; + } + + if( Hubwoo::hubwoo_check_hpos_active() ) { + $query = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'post_parent' => 0, + 'meta_key' => 'hubwoo_ecomm_deal_created', + 'meta_compare' => 'NOT EXISTS', + )); + + $order_ids = $query->get_orders(); + } else { + + $query = new WP_Query(); + + $order_args = array( + 'post_type' => 'shop_order', + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_created', + 'compare' => 'NOT EXISTS', + ), + ), + ); + + $order_ids = $query->query( $order_args ); + } + + $product_data = Hubwoo::hubwoo_get_product_data( $max_item ); + + if ( empty( $product_data ) ) { + echo wp_json_encode( + array( + 'step' => $step + 1, + 'status' => true, + 'total_deals' => empty( $order_ids ) ? '' : count( $order_ids ), + 'response' => 'No products found to sync.', + ) + ); + wp_die(); + } + + if ( ! empty( $product_data ) && is_array( $product_data ) ) { + foreach ( $product_data as $pro_id => $value ) { + + $filtergps = array(); + $product_data = array( + 'properties' => $value['properties'], + ); + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $product = wc_get_product( $pro_id ); + + $filtergps = array( + 'filterGroups' => array( + array( + 'filters' => array( + array( + 'value' => $pro_id, + 'propertyName' => 'store_product_id', + 'operator' => 'EQ', + ), + ), + ), + ), + ); + + if( !empty($product->get_sku()) ) { + $filtergps['filterGroups'][] = array( + 'filters' => array( + array( + 'value' => $product->get_sku(), + 'propertyName' => 'hs_sku', + 'operator' => 'EQ', + ), + ), + ); + } + + $response = HubWooConnectionMananager::get_instance()->search_object_record( 'products', $filtergps ); + + if ( 200 == $response['status_code'] ) { + $responce_body = json_decode( $response['body'] ); + $result = $responce_body->results; + if ( ! empty( $result ) ) { + foreach ( $result as $key => $value ) { + update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $value->id ); + } + } + } + + $pro_hs_id = get_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', true ); + + if ( ! empty( $pro_hs_id ) ) { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'products', $pro_hs_id, $product_data ); + if ( 200 == $response['status_code'] ) { + delete_post_meta( $pro_id, 'hubwoo_product_synced' ); + } + } else { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'products', $product_data ); + if ( 201 == $response['status_code'] ) { + $response_body = json_decode( $response['body'] ); + update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $response_body->id ); + delete_post_meta( $pro_id, 'hubwoo_product_synced' ); + } + } + do_action( 'hubwoo_update_product_property', $pro_id ); + } + } + + if ( 'final_request' == $pro_get_vid ) { + update_option( 'hubwoo_ecomm_setup_completed', 'yes' ); + } + + echo wp_json_encode( + array( + 'step' => $step + 1, + 'status' => true, + 'total_deals' => empty( $order_ids ) ? '' : count( $order_ids ), + 'response' => 'Products batch synced succesfully', + ) + ); + wp_die(); + } + } + + /** + * Sync historical deals to HubSpot. + */ + public function hubwoo_historical_deals_sync() { + + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $object_type = 'DEAL'; + $deal_updates = array(); + + $step = ! empty( $_POST['step'] ) ? sanitize_text_field( wp_unslash( $_POST['step'] ) ) : ''; + + if ( ! empty( $_POST['max_item'] ) ) { + $max_item = sanitize_text_field( wp_unslash( $_POST['max_item'] ) ); + } else { + $max_item = 15; + } + + if( Hubwoo::hubwoo_check_hpos_active() ) { + $query = new WC_Order_Query(array( + 'posts_per_page' => $max_item, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'post_parent' => 0, + 'meta_key' => 'hubwoo_ecomm_deal_created', + 'meta_compare' => 'NOT EXISTS', + )); + + $order_ids = $query->get_orders(); + } else { + + $query = new WP_Query(); + + $order_args = array( + 'post_type' => 'shop_order', + 'posts_per_page' => $max_item, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_created', + 'compare' => 'NOT EXISTS', + ), + ), + ); + + $order_ids = $query->query( $order_args ); + } + + if ( empty( $order_ids ) ) { + + echo wp_json_encode( + array( + 'step' => $step + 1, + 'status' => true, + 'response' => 'No deals found to sync.', + ) + ); + wp_die(); + + } + + foreach ( $order_ids as $order_id ) { + + $order = wc_get_order( $order_id ); + $deal_updates = array(); + + if ( $order instanceof WC_Order ) { + + $customer_id = $order->get_customer_id(); + + if ( ! empty( $customer_id ) ) { + $source = 'user'; + HubwooObjectProperties::hubwoo_ecomm_contacts_with_id( $customer_id ); + + } else { + $source = 'guest'; + $guest_object_type = 'CONTACT'; + + $guest_user_properties = $this->mwb_get_guestuser_properties( $order_id ); + $contact_properties = array(); + foreach ( $guest_user_properties as $key => $value ) { + + $contact_properties[ $value['property'] ] = $value['value']; + } + $guest_contact_properties = apply_filters( 'hubwoo_map_ecomm_guest_' . $guest_object_type . '_properties', $contact_properties, $order_id ); + + $contacts = array(); + if ( isset( $order_id ) ) { + //hpos changes + $user_data = array(); + $user_data['email'] = $order->get_billing_email(); + $user_data['customer_group'] = 'guest'; + $user_data['firstname'] = $order->get_billing_first_name(); + $user_data['lastname'] = $order->get_billing_last_name(); + $user_data['customer_source_store'] = get_bloginfo( 'name' ); + $user_data['hs_language'] = $order->get_meta('hubwoo_preferred_language', true); + foreach ( $guest_contact_properties as $key => $value ) { + $user_data[ $key ] = $value; + } + $user_vid = $order->get_meta('hubwoo_user_vid', true); + $contacts = array( + 'properties' => $user_data, + ); + } + + if ( ! empty( $contacts ) ) { + + $flag = true; + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + if ( ! empty( $user_vid ) ) { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $user_vid, $contacts ); + } else { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'contacts', $contacts ); + + if ( 201 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + $order->update_meta_data('hubwoo_user_vid', $contact_vid->id); + $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); + $order->save(); + + } else if ( 409 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + $hs_id = explode( 'ID: ', $contact_vid->message ); + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $hs_id[1], $contacts ); + $order->update_meta_data('hubwoo_user_vid', $hs_id[1]); + $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); + $order->save(); + } else if ( 400 == $response['status_code'] ) { + $order->update_meta_data('hubwoo_invalid_contact', 'yes'); + $order->update_meta_data('hubwoo_pro_user_data_change', 'synced'); + $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); + $order->save(); + } + } + + $user_email = $order->get_billing_email(); + do_action( 'hubwoo_ecomm_contact_synced', $user_email ); + } + } + } + } + + $assc_deal_cmpy = get_option( 'hubwoo_assoc_deal_cmpy_enable', 'yes' ); + $pipeline_id = get_option( 'hubwoo_ecomm_pipeline_id', false ); + $hubwoo_ecomm_deal = new HubwooEcommObject( $order_id, $object_type ); + $deal_properties = $hubwoo_ecomm_deal->get_object_properties(); + $deal_properties = apply_filters( 'hubwoo_map_ecomm_' . $object_type . '_properties', $deal_properties, $order_id ); + + if ( 'yes' == get_option( 'hubwoo_deal_multi_currency_enable', 'no' ) ) { + $currency = $order->get_currency(); + if ( ! empty( $currency ) ) { + $deal_properties['deal_currency_code'] = $currency; + } + } + + if ( empty( $pipeline_id ) ) { + Hubwoo::get_all_deal_stages(); + $pipeline_id = get_option( 'hubwoo_ecomm_pipeline_id', false ); + } + + $deal_properties['pipeline'] = $pipeline_id; + + $deal_updates = array( + 'properties' => $deal_properties, + ); + $response = ''; + + if ( 'user' == $source ) { + $user_info = json_decode( wp_json_encode( get_userdata( $customer_id ) ), true ); + $user_email = $user_info['data']['user_email']; + $contact = $user_email; + if ( empty( $contact ) ) { + $contact = $customer_id; + } + $contact_vid = get_user_meta( $customer_id, 'hubwoo_user_vid', true ); + $invalid_contact = get_user_meta( $customer_id, 'hubwoo_invalid_contact', true ); + } else { + $contact_vid = $order->get_meta('hubwoo_user_vid', true); + $contact = $order->get_billing_email(); + $invalid_contact = $order->get_meta('hubwoo_invalid_contact', true); + } + + if ( count( $deal_updates ) ) { + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $deal_name = '#' . $order->get_order_number(); + + $user_detail['first_name'] = $order->get_billing_first_name(); + $user_detail['last_name'] = $order->get_billing_last_name(); + + foreach ( $user_detail as $value ) { + if ( ! empty( $value ) ) { + $deal_name .= ' ' . $value; + } + } + + $filtergps = array( + 'filterGroups' => array( + array( + 'filters' => array( + array( + 'value' => $deal_name, + 'propertyName' => 'dealname', + 'operator' => 'EQ', + ), + ), + ), + ), + ); + + $response = HubWooConnectionMananager::get_instance()->search_object_record( 'deals', $filtergps ); + + if ( 200 == $response['status_code'] ) { + $responce_body = json_decode( $response['body'] ); + $result = $responce_body->results; + if ( ! empty( $result ) ) { + foreach ( $result as $key => $value ) { + $order->update_meta_data('hubwoo_ecomm_deal_id', $value->id); + $order->update_meta_data('hubwoo_order_line_item_created', 'yes'); + $order->save(); + } + } + } + + $hubwoo_ecomm_deal_id = $order->get_meta('hubwoo_ecomm_deal_id', true); + + if ( empty( $hubwoo_ecomm_deal_id ) ) { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'deals', $deal_updates ); + if ( 201 == $response['status_code'] ) { + $response_body = json_decode( $response['body'] ); + $hubwoo_ecomm_deal_id = $response_body->id; + $order->update_meta_data('hubwoo_ecomm_deal_id', $hubwoo_ecomm_deal_id ); + $order->save(); + } + } else { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'deals', $hubwoo_ecomm_deal_id, $deal_updates ); + } + + HubWooConnectionMananager::get_instance()->associate_object( 'deal', $hubwoo_ecomm_deal_id, 'contact', $contact_vid, 3 ); + + do_action( 'hubwoo_ecomm_deal_created', $order_id ); + + if ( 'yes' == $assc_deal_cmpy ) { + if ( ! empty( $contact ) && empty( $invalid_contact ) ) { + Hubwoo::hubwoo_associate_deal_company( $contact, $hubwoo_ecomm_deal_id ); + } + } + $this->bulk_line_item_link( $order_id ); + } + } + } + + echo wp_json_encode( + array( + 'step' => $step + 1, + 'status' => true, + 'response' => 'Deals batch synced succesfully', + ) + ); + wp_die(); + + } + + /** + * Hide review notice. + */ + public function hubwoo_hide_rev_notice() { + + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + update_option( 'hubwoo_hide_rev_notice', 'yes' ); + + echo wp_json_encode( + array( + 'status' => true, + 'response' => 'Notice hide succesfully', + ) + ); + wp_die(); + } + + /** + * Hide HPOS notice + */ + public function hubwoo_hide_hpos_notice(){ + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + update_option( 'hubwoo_hide_hpos_notice', 'yes' ); + + echo wp_json_encode( + array( + 'status' => true, + 'response' => 'Notice hide succesfully', + ) + ); + wp_die(); + } + + /** + * Get guest user properties. + * + * @param int $order_id Order ID. + */ + public function mwb_get_guestuser_properties( $order_id ) { + + global $hubwoo; + + $hubwoo_guest_order = wc_get_order( $order_id ); + + if ( $hubwoo_guest_order instanceof WC_Order ) { + //hpos changes + $guest_email = $hubwoo_guest_order->get_billing_email(); + + $guest_order_callback = new HubwooGuestOrdersManager( $order_id ); + + $guest_user_properties = $guest_order_callback->get_order_related_properties( $order_id, $guest_email ); + + $guest_user_properties = $hubwoo->hubwoo_filter_contact_properties( $guest_user_properties ); + + $fname = $hubwoo_guest_order->get_billing_first_name(); + if ( ! empty( $fname ) ) { + $guest_user_properties[] = array( + 'property' => 'firstname', + 'value' => $fname, + ); + } + + $lname = $hubwoo_guest_order->get_billing_last_name(); + if ( ! empty( $lname ) ) { + $guest_user_properties[] = array( + 'property' => 'lastname', + 'value' => $lname, + ); + } + + $cname = $hubwoo_guest_order->get_billing_company(); + if ( ! empty( $cname ) ) { + $guest_user_properties[] = array( + 'property' => 'company', + 'value' => $cname, + ); + } + + $city = $hubwoo_guest_order->get_billing_city(); + if ( ! empty( $city ) ) { + $guest_user_properties[] = array( + 'property' => 'city', + 'value' => $city, + ); + } + + $state = $hubwoo_guest_order->get_billing_state(); + if ( ! empty( $state ) ) { + $guest_user_properties[] = array( + 'property' => 'state', + 'value' => $state, + ); + } + + $country = $hubwoo_guest_order->get_billing_country(); + if ( ! empty( $country ) ) { + $guest_user_properties[] = array( + 'property' => 'country', + 'value' => Hubwoo::map_country_by_abbr( $country ), + ); + } + + $address1 = $hubwoo_guest_order->get_billing_address_1(); + $address2 = $hubwoo_guest_order->get_billing_address_2(); + if ( ! empty( $address1 ) || ! empty( $address2 ) ) { + $address = $address1 . ' ' . $address2; + $guest_user_properties[] = array( + 'property' => 'address', + 'value' => $address, + ); + } + + $zip = $hubwoo_guest_order->get_billing_postcode(); + if ( ! empty( $zip ) ) { + $guest_user_properties[] = array( + 'property' => 'zip', + 'value' => $zip, + ); + } + + $guest_phone = $hubwoo_guest_order->get_billing_phone(); + + if ( ! empty( $guest_phone ) ) { + $guest_user_properties[] = array( + 'property' => 'mobilephone', + 'value' => $guest_phone, + ); + $guest_user_properties[] = array( + 'property' => 'phone', + 'value' => $guest_phone, + ); + } + + $customer_new_order_flag = 'no'; + $prop_index = array_search( 'customer_new_order', array_column( $guest_user_properties, 'property' ) ); + + if ( Hubwoo_Admin::hubwoo_check_for_properties( 'order_recency_rating', 5, $guest_user_properties ) ) { + + if ( Hubwoo_Admin::hubwoo_check_for_properties( 'last_order_status', get_option( 'hubwoo_no_status', 'wc-completed' ), $guest_user_properties ) ) { + + $customer_new_order_flag = 'yes'; + } + } + + if ( $prop_index ) { + $guest_user_properties[ $prop_index ]['value'] = $customer_new_order_flag; + } else { + $guest_user_properties[] = array( + 'property' => 'customer_new_order', + 'value' => $customer_new_order_flag, + ); + } + } + return $guest_user_properties; + } + + /** + * Sync line items to deals over Hubspot. + * + * @param int $order_id Order ID. + */ + public function bulk_line_item_link( $order_id ) { + + if ( ! empty( $order_id ) ) { + $object_type = 'LINE_ITEM'; + $order = wc_get_order( $order_id ); + $line_updates = array(); + $order_items = $order->get_items(); + $object_ids = array(); + $response = array( 'status_code' => 206 ); + $no_products_found = false; + + if ( is_array( $order_items ) && count( $order_items ) ) { + + foreach ( $order_items as $item_key => $single_item ) : + + $product_id = $single_item->get_variation_id(); + if ( 0 === $product_id ) { + $product_id = $single_item->get_product_id(); + if ( 0 === $product_id ) { + $no_products_found = true; + } + } + if ( get_post_status( $product_id ) == 'trash' || get_post_status( $product_id ) == false ) { + continue; + } + $item_sku = get_post_meta( $product_id, '_sku', true ); + if ( empty( $item_sku ) ) { + $item_sku = $product_id; + } + + $line_item_hs_id = wc_get_order_item_meta( $item_key, 'hubwoo_ecomm_line_item_id', true ); + + if ( ! empty( $line_item_hs_id ) || 'yes' == $order->get_meta('hubwoo_order_line_item_created', 'no') ) { + continue; + } + + $quantity = ! empty( $single_item->get_quantity() ) ? $single_item->get_quantity() : 0; + $item_total = ! empty( $single_item->get_total() ) ? $single_item->get_total() : 0; + $item_sub_total = ! empty( $single_item->get_subtotal() ) ? $single_item->get_subtotal() : 0; + $product = $single_item->get_product(); + $name = HubwooObjectProperties::get_instance()->hubwoo_ecomm_product_name( $product ); + $discount_amount = abs( $item_total - $item_sub_total ); + $discount_amount = $discount_amount / $quantity; + $item_sub_total = $item_sub_total / $quantity; + $hs_product_id = get_post_meta( $product_id, 'hubwoo_ecomm_pro_id', true ); + $object_ids[] = $item_key; + + $properties = array( + 'quantity' => $quantity, + 'price' => $item_sub_total, + 'amount' => $item_total, + 'name' => $name, + 'discount_amount' => $discount_amount, + 'sku' => $item_sku, + 'tax_amount' => $single_item->get_total_tax(), + ); + + if ( 'yes' != get_option( 'hubwoo_product_scope_needed', 'no' ) ) { + $properties['hs_product_id'] = $hs_product_id; + } + + $properties = apply_filters( 'hubwoo_line_item_properties', $properties, $product_id, $order_id ); + + $line_updates[] = array( + 'properties' => $properties, + ); + endforeach; + } + + $line_updates = apply_filters( 'hubwoo_custom_line_item', $line_updates, $order_id ); + + if ( count( $line_updates ) ) { + $line_updates = array( + 'inputs' => $line_updates, + ); + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + if ( ! $status ) { + $flag = false; + } + } + if ( $flag ) { + + $response = HubWooConnectionMananager::get_instance()->create_batch_object_record( 'line_items', $line_updates ); + } + } + + if ( 201 == $response['status_code'] || 204 == $response['status_code'] || empty( $object_ids ) ) { + + $order->update_meta_data( 'hubwoo_ecomm_deal_created', 'yes' ); + $order->save(); + + $deal_id = $order->get_meta( 'hubwoo_ecomm_deal_id', true ); + if ( isset( $response['body'] ) && ! empty( $response['body'] ) ) { + $response_body = json_decode( $response['body'] ); + foreach ( $order_items as $item_key => $single_item ) : + + $product_id = $single_item->get_variation_id(); + if ( 0 === $product_id ) { + $product_id = $single_item->get_product_id(); + if ( 0 === $product_id ) { + $no_products_found = true; + } + } + if ( get_post_status( $product_id ) == 'trash' || get_post_status( $product_id ) == false ) { + continue; + } + + $product = $single_item->get_product(); + $name = HubwooObjectProperties::get_instance()->hubwoo_ecomm_product_name( $product ); + + if ( isset( $response_body ) && ! empty( $response_body ) ) { + + foreach ( $response_body->results as $key => $value ) { + + $line_item_hs_id = $value->id; + $order->update_meta_data( 'hubwoo_order_line_item_created', 'yes' ); + $order->save(); + $response = HubWooConnectionMananager::get_instance()->associate_object( 'deal', $deal_id, 'line_item', $line_item_hs_id, 19 ); + } + } + endforeach; + + if ( 1 == get_option( 'hubwoo_deals_sync_running', 0 ) ) { + + $current_count = get_option( 'hubwoo_deals_current_sync_count', 0 ); + update_option( 'hubwoo_deals_current_sync_count', ++$current_count ); + } + } + } + } + } + + /** + * Fetch logs from database. + */ + public function hubwoo_get_datatable_data() { + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $request = $_GET; + $offset = $request['start']; + $limit = $request['length']; + + $search_data = $request['search']; + $search_value = $search_data['value']; + + if ( '' !== $search_value ) { + $log_data = Hubwoo::hubwoo_get_log_data( $search_value ); + } else { + + $log_data = Hubwoo::hubwoo_get_log_data( false, $limit, $offset ); + } + + $count_data = Hubwoo::hubwoo_get_total_log_count(); + $total_count = $count_data[0]; + $data = array(); + foreach ( $log_data as $key => $value ) { + $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ] = ! empty( $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ] ) ? $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ] : '-'; + $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_id' ] = ! empty( $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_id' ] ) ? $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_id' ] : '-'; + + $current_request = $value['request']; //phpcs:ignore + $response = unserialize( $value['response'] ); //phpcs:ignore + + $temp = array( + '', + $value['event'], + $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ], + gmdate( 'd-m-Y h:i A', esc_html( $value['time'] ) ), + $current_request, + wp_json_encode( $response ), + ); + + $data[] = $temp; + } + + $json_data = array( + 'draw' => intval( $request['draw'] ), + 'recordsTotal' => $total_count, + 'recordsFiltered' => $total_count, + 'data' => $data, + ); + + echo wp_json_encode( $json_data ); + wp_die(); + } + + /** + * Download logs from database. + */ + public function hubwoo_download_sync_log() { + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $crm_name = Hubwoo::get_current_crm_name( 'slug' ); + $log_data = Hubwoo::hubwoo_get_log_data( false, 25, 0, true ); + $data = array(); + $log_dir = WC_LOG_DIR . $crm_name . '-sync-log.log'; + if ( ! is_dir( $log_dir ) ) { + $log_dir = WC_LOG_DIR . $crm_name . '-sync-log.log'; + } + + global $wp_filesystem; // Define global object of WordPress filesystem. + WP_Filesystem(); // Intialise new file system object. + + $file_data = ''; + $wp_filesystem->put_contents( $log_dir, '' ); + + foreach ( $log_data as $key => $value ) { + $value[ $crm_name . '_id' ] = ! empty( $value[ $crm_name . '_id' ] ) ? $value[ $crm_name . '_id' ] : '-'; + $log = 'Feed : ' . $value['event'] . PHP_EOL; + $log .= ucwords( $crm_name ) . ' Object : ' . $value[ $crm_name . '_object' ] . PHP_EOL; + $log .= 'Time : ' . gmdate( 'd-m-Y h:i A', esc_html( $value['time'] ) ) . PHP_EOL; + $log .= 'Request : ' . $value['request'] . PHP_EOL; // phpcs:ignore + $log .= 'Response : ' . wp_json_encode( unserialize( $value['response'] ) ) . PHP_EOL; // phpcs:ignore + $log .= '-----------------------------------------------------------------------' . PHP_EOL; + + $file_data .= $log; + $wp_filesystem->put_contents( $log_dir, $file_data ); + } + + $json_data = array( + 'success' => true, + 'redirect' => admin_url( 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-logs&hubwoo_download=1' ), + ); + + echo wp_json_encode( $json_data ); + wp_die(); + } + + /** + * Clear log from database + */ + public function hubwoo_clear_sync_log() { + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + global $wpdb; + $table_name = $wpdb->prefix . 'hubwoo_log'; + + $wpdb->get_results( $wpdb->prepare( 'DELETE FROM %1s', $table_name ) ); + + $json_data = array( + 'success' => true, + 'redirect' => admin_url( 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-logs' ), + ); + + echo wp_json_encode( $json_data ); + wp_die(); + } + + /** + * Fetch pipeline deal stages. + */ + public function hubwoo_fetch_deal_stages() { + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $selected_pipeline = ! empty( $_POST['selected_pipeline'] ) ? sanitize_text_field( wp_unslash( $_POST['selected_pipeline'] ) ) : ''; + + $all_pipeline = get_option( 'hubwoo_potal_pipelines', true ); + update_option( 'hubwoo_ecomm_pipeline_id', $selected_pipeline ); + $deal_stages = ''; + + foreach ( $all_pipeline as $single_pipeline ) { + if ( $single_pipeline['id'] == $selected_pipeline ) { + $deal_stages = $single_pipeline['stages']; + if ( 'Ecommerce Pipeline' == $single_pipeline['label'] ) { + Hubwoo::update_deal_stages_mapping( $deal_stages ); + } else if ( 'Sales Pipeline' == $single_pipeline['label'] ) { + update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_sales_deals_mapping() ); + } + } + } + + if ( ! empty( $deal_stages ) ) { + + update_option( 'hubwoo_ecomm_pipeline_created', 'yes' ); + update_option( 'hubwoo_fetched_deal_stages', $deal_stages ); + update_option( 'hubwoo_ecomm_won_stages', '' ); + } + + echo wp_json_encode( + array( + 'success' => true, + ) + ); + wp_die(); + } + + /** + * Fetch deal pipelines. + */ + public function hubwoo_fetch_update_pipelines() { + // Nonce verification. + check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); + + $selected_pipeline = ! empty( $_POST['selected_pipeline'] ) ? sanitize_text_field( wp_unslash( $_POST['selected_pipeline'] ) ) : ''; + + $all_deal_pipelines = HubWooConnectionMananager::get_instance()->fetch_all_deal_pipelines(); + + if ( ! empty( $all_deal_pipelines['results'] ) ) { + update_option( 'hubwoo_potal_pipelines', $all_deal_pipelines['results'] ); + } + + $all_pipeline = get_option( 'hubwoo_potal_pipelines', true ); + update_option( 'hubwoo_ecomm_pipeline_id', $selected_pipeline ); + $deal_stages = ''; + + foreach ( $all_pipeline as $single_pipeline ) { + if ( $single_pipeline['id'] == $selected_pipeline ) { + $deal_stages = $single_pipeline['stages']; + } + } + + if ( ! empty( $deal_stages ) ) { + + update_option( 'hubwoo_ecomm_pipeline_created', 'yes' ); + update_option( 'hubwoo_fetched_deal_stages', $deal_stages ); + update_option( 'hubwoo_ecomm_won_stages', '' ); + } + + echo wp_json_encode( + array( + 'success' => true, + ) + ); + wp_die(); + } + } +} + +new Hubwoo_Ajax_Handler(); diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-csv-handler.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-csv-handler.php new file mode 100644 index 00000000..00c772fd --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-csv-handler.php @@ -0,0 +1,185 @@ +folder = $folder; + + // Create Base Activity Directory. + $this->working_path = $this->base_dir . $this->folder; + $this->dirpath = $this->check_and_create_folder( $this->working_path ); + + } + + /** + * Library functions :: Check/create folder. + * + * @param string $path Path to create folder. + * + * @since 1.0.0 + */ + public function check_and_create_folder( $path = '' ) { + + if ( ! empty( $path ) && ! is_dir( $path ) && is_writable( $this->base_dir ) ) { + + $directory = mkdir( $path, 0755, true ); + + if ( $directory ) { + return array( + 'status' => $directory, + ); + } + } else { + return array( + 'status' => false, + 'message' => 'We do not have write permission to create dir/file.', + ); + } + } + + /** + * Generate Contacts csv. + * + * @param array $contacts An array of all users properties data. + */ + public function generate_contacts_csv( $contacts = array() ) { + + $contact_file = fopen( $this->working_path . '/contacts-import.csv', 'w' ); + + fputcsv( + $contact_file, + array( + 'Firstname', + 'Lastname', + 'Email Address', + 'Company', + 'Phone Number', + 'Mobile Number', + 'Address', + 'City', + 'State', + 'Country', + 'Postcode', + ) + ); + + foreach ( $contacts as $key => $value ) { + $contact_cells = $this->format_contact_csv_cells( $value ); + + fputcsv( + $contact_file, + array( + $contact_cells['firstname'], + $contact_cells['lastname'], + $contact_cells['email'], + $contact_cells['company'], + $contact_cells['phone'], + $contact_cells['mobilephone'], + $contact_cells['address'], + $contact_cells['city'], + $contact_cells['state'], + $contact_cells['country'], + $contact_cells['zip'], + ) + ); + } + + return fclose( $contact_file ); + + } + + /** + * Returns a set of contact propertieis to be mapped in CSV. + * + * @param array $contact An array of user data. + * + * @return array An array of set of contact properties + */ + public function format_contact_csv_cells( $contact = array() ) { + + $email = ! empty( $contact['email'] ) ? $contact['email'] : false; + unset( $contact['email'] ); + + $properties = ! empty( $contact['properties'] ) ? $this->format_contact_properties( $contact['properties'] ) : array(); + $properties['email'] = ! empty( $email ) ? $email : false; + + return $properties; + } + + /** + * Format properties of an array of contact data. + * + * @param array $properties Set of properties to format. + * + * @return string Resultant of an array key. + */ + public function format_contact_properties( $properties = array() ) { + + $resultant = array(); + + if ( ! empty( $properties ) && is_array( $properties ) ) { + + foreach ( $properties as $key => $value ) { + $resultant[ $value['property'] ] = ! empty( $value['value'] ) ? $value['value'] : false; + } + } + + return $resultant; + } + + +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-deactivator.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-deactivator.php new file mode 100644 index 00000000..00e55ebe --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-deactivator.php @@ -0,0 +1,54 @@ +actions = array(); + $this->filters = array(); + } + + /** + * Add a new action to the collection to be registered with WordPress. + * + * @since 1.0.0 + * @param string $hook The name of the WordPress action that is being registered. + * @param object $component A reference to the instance of the object on which the action is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1. + */ + public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * Add a new filter to the collection to be registered with WordPress. + * + * @since 1.0.0 + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1. + */ + public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * A utility function that is used to register the actions and hooks into a single + * collection. + * + * @since 1.0.0 + * @param array $hooks The collection of hooks that is being registered (that is, actions or filters). + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority The priority at which the function should be fired. + * @param int $accepted_args The number of arguments that should be passed to the $callback. + * @return array The collection of actions and filters registered with WordPress. + */ + private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) { + + $hooks[] = array( + 'hook' => $hook, + 'component' => $component, + 'callback' => $callback, + 'priority' => $priority, + 'accepted_args' => $accepted_args, + ); + + return $hooks; + } + + /** + * Register the filters and actions with WordPress. + * + * @since 1.0.0 + */ + public function run() { + + foreach ( $this->filters as $hook ) { + add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + + foreach ( $this->actions as $hook ) { + add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-rfm-configuration.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-rfm-configuration.php new file mode 100644 index 00000000..8a7a75a8 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoo-rfm-configuration.php @@ -0,0 +1,251 @@ +get_columns(); + $hidden = array(); + $sortable = array(); + $this->_column_headers = array( $columns, $hidden, $sortable ); + $data = $this->table_data(); + $current_page = $this->get_pagenum(); + $total_items = count( $data ); + $this->set_pagination_args( + array( + 'total_items' => $total_items, + 'per_page' => $per_page, + ) + ); + $data = array_slice( $data, ( ( $current_page - 1 ) * $per_page ), $per_page ); + $this->items = $data; + } + + /** + * Get the RFM Setting column. + * + * @since 1.0.0 + */ + public function get_columns() { + + $columns = array( + 'score' => __( 'Score', 'makewebbetter-hubspot-for-woocommerce' ) . '

(' . __( 'Ratings for RFM Segmentation', 'makewebbetter-hubspot-for-woocommerce' ) . ')

', + 'recency' => __( 'Recency', 'makewebbetter-hubspot-for-woocommerce' ) . '

(' . __( 'Days Since last Order', 'makewebbetter-hubspot-for-woocommerce' ) . ')

', + 'frequency' => __( 'Frequency', 'makewebbetter-hubspot-for-woocommerce' ) . '

(' . __( 'Total Orders Placed', 'makewebbetter-hubspot-for-woocommerce' ) . ')

', + 'monetary' => __( 'Monetary', 'makewebbetter-hubspot-for-woocommerce' ) . '

(' . __( 'Total Money Spent', 'makewebbetter-hubspot-for-woocommerce' ) . ')

', + ); + return $columns; + } + + /** + * Display the table data its values. + * + * @since 1.0.0 + */ + private function table_data() { + + $temp_data = array(); + + $rfm_settings = array( + 'score_5' => 5, + 'score_4' => 4, + 'score_3' => 3, + 'score_2' => 2, + 'score_1' => 1, + ); + $hubwoo_rfm_at_5 = get_option( + 'hubwoo_rfm_5', + array( + 0 => 30, + 1 => 20, + 2 => 1000, + ) + ); + $hubwoo_from_rfm_4 = get_option( + 'hubwoo_from_rfm_4', + array( + 0 => 31, + 1 => 10, + 2 => 750, + ) + ); + $hubwoo_to_rfm_4 = get_option( + 'hubwoo_to_rfm_4', + array( + 0 => 90, + 1 => 20, + 2 => 1000, + ) + ); + $hubwoo_from_rfm_3 = get_option( + 'hubwoo_from_rfm_3', + array( + 0 => 91, + 1 => 5, + 2 => 500, + ) + ); + $hubwoo_to_rfm_3 = get_option( + 'hubwoo_to_rfm_3', + array( + 0 => 180, + 1 => 10, + 2 => 750, + ) + ); + $hubwoo_from_rfm_2 = get_option( + 'hubwoo_from_rfm_2', + array( + 0 => 181, + 1 => 2, + 2 => 250, + ) + ); + $hubwoo_to_rfm_2 = get_option( + 'hubwoo_to_rfm_2', + array( + 0 => 360, + 1 => 5, + 2 => 500, + ) + ); + $hubwoo_rfm_at_1 = get_option( + 'hubwoo_rfm_1', + array( + 0 => 361, + 1 => 2, + 2 => 250, + ) + ); + + foreach ( $rfm_settings as $key => $single_setting ) { + + if ( 5 == $single_setting ) { + + $new_data = array( + 'score' => '

' . $single_setting . '

', + 'recency' => '

' . __( 'Less than', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + 'frequency' => '

' . __( 'More than', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + 'monetary' => '

' . __( 'More than', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + ); + } elseif ( 1 == $single_setting ) { + + $new_data = array( + 'score' => '

' . $single_setting . '

', + 'recency' => '

' . __( 'More than', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + 'frequency' => '

' . __( 'Less than', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + 'monetary' => '

' . __( 'Less than', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + ); + } else { + + if ( 4 == $single_setting ) { + + $rfm_from_0 = $hubwoo_from_rfm_4[0]; + $rfm_from_1 = $hubwoo_from_rfm_4[1]; + $rfm_from_2 = $hubwoo_from_rfm_4[2]; + $rfm_to_0 = $hubwoo_to_rfm_4[0]; + $rfm_to_1 = $hubwoo_to_rfm_4[1]; + $rfm_to_2 = $hubwoo_to_rfm_4[2]; + } elseif ( 3 == $single_setting ) { + + $rfm_from_0 = $hubwoo_from_rfm_3[0]; + $rfm_from_1 = $hubwoo_from_rfm_3[1]; + $rfm_from_2 = $hubwoo_from_rfm_3[2]; + $rfm_to_0 = $hubwoo_to_rfm_3[0]; + $rfm_to_1 = $hubwoo_to_rfm_3[1]; + $rfm_to_2 = $hubwoo_to_rfm_3[2]; + } elseif ( 2 == $single_setting ) { + + $rfm_from_0 = $hubwoo_from_rfm_2[0]; + $rfm_from_1 = $hubwoo_from_rfm_2[1]; + $rfm_from_2 = $hubwoo_from_rfm_2[2]; + $rfm_to_0 = $hubwoo_to_rfm_2[0]; + $rfm_to_1 = $hubwoo_to_rfm_2[1]; + $rfm_to_2 = $hubwoo_to_rfm_2[2]; + } + + $new_data = array( + 'score' => '

' . $single_setting . '

', + 'recency' => '

' . __( 'From', 'makewebbetter-hubspot-for-woocommerce' ) . '

' . __( 'To', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + 'frequency' => '

' . __( 'From', 'makewebbetter-hubspot-for-woocommerce' ) . '

' . __( 'To', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + 'monetary' => '

' . __( 'From', 'makewebbetter-hubspot-for-woocommerce' ) . '

' . __( 'To', 'makewebbetter-hubspot-for-woocommerce' ) . '

', + ); + } + + $temp_data[] = $new_data; + } + + return $temp_data; + } + + /** + * Return default column name. + * + * @since 1.0.0 + * @param int $item rfm setting column type. + * @param string $column_name column name. + * @since 1.0.0 + */ + public function column_default( $item, $column_name ) { + + switch ( $column_name ) { + case 'score': + case 'recency': + case 'frequency': + case 'monetary': + return $item[ $column_name ]; + default: + return $item; + } + } + + /** + * Display the row placeholder. + * + * @since 1.0.0 + */ + public function display_rows_or_placeholder() { + + if ( $this->has_items() ) { + + $this->display_rows(); + } else { + + ?> + + no_items(); + ?> + + version = HUBWOO_VERSION; + } else { + + $this->version = '1.5.7'; + } + + $this->plugin_name = 'makewebbetter-hubspot-for-woocommerce'; + $this->load_dependencies(); + $this->set_locale(); + $this->define_admin_hooks(); + $this->define_public_hooks(); + } + + /** + * Load the required dependencies for this plugin. + * + * Include the following files that make up the plugin: + * + * - Hubwoo_Loader. Orchestrates the hooks of the plugin. + * - Hubwoo_I18n. Defines internationalization functionality. + * - Hubwoo_Admin. Defines all hooks for the admin area. + * - Hubwoo_Public. Defines all hooks for the public side of the site. + * + * Create an instance of the loader which will be used to register the hooks + * with WordPress. + * + * @since 1.0.0 + */ + private function load_dependencies() { + + /** + * The class responsible for orchestrating the actions and filters of the + * core plugin. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoo-loader.php'; + + /** + * The class responsible for defining internationalization functionality + * of the plugin. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoo-i18n.php'; + + /** + * The class responsible for handling background data sync from WooCommerce to + * HubSpot. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoodatasync.php'; + + /** + * The class for Managing Enums. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/classes/class-hubwooenum.php'; + + /** + * The class for Error Handling. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooerrorhandling.php'; + + /** + * The class responsible for plugin constants. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooconst.php'; + + /** + * The class responsible for defining all actions that occur in the admin area. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-hubwoo-admin.php'; + + /** + * The class responsible for defining all actions that occur in the public area. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-hubwoo-public.php'; + + $this->loader = new Hubwoo_Loader(); + + /** + * The class responsible for all api actions with hubspot. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooconnectionmananager.php'; + + /** + * The class contains all the information related to customer groups and properties. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoocontactproperties.php'; + + /** + * The class contains are readymade contact details to send it to + * hubspot. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoocustomer.php'; + + /** + * The class responsible for property values. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoopropertycallbacks.php'; + + /** + * The class responsible for handling ajax requests. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoo-ajax-handler.php'; + + /** + * The class responsible for rfm configuration settings. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoo-rfm-configuration.php'; + + /** + * The class responsible for manging guest orders. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooguestordersmanager.php'; + + /** + * The class responsible for defining all upsert settings and ecomm mappings for deals and line items + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooecommproperties.php'; + + /** + * The class responsible for defining functions related to get values/date for ecomm objects + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooecommobject.php'; + + /** + * The class responsible for defining functions related to get values/date for ecomm objects + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooobjectproperties.php'; + + /** + * The class responsible for defining functions to return values as per ecomm settings upserted + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwooecommpropertycallbacks.php'; + + /** + * The class responsible for defining functions for CSV generations of the respective hubspot objects. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-hubwoo-csv-handler.php'; + } + + /** + * Define the locale for this plugin for internationalization. + * + * Uses the Hubwoo_I18n class in order to set the domain and to register the hook + * with WordPress. + * + * @since 1.0.0 + */ + private function set_locale() { + + $plugin_i18n = new Hubwoo_I18n(); + + $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' ); + } + + /** + * Register all of the hooks related to the admin area functionality + * of the plugin. + * + * @since 1.0.0 + */ + private function define_admin_hooks() { + + $plugin_admin = new Hubwoo_Admin( $this->get_plugin_name(), $this->get_version() ); + $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' ); + $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' ); + $this->loader->add_action( 'admin_init', $plugin_admin, 'hubwoo_redirect_from_hubspot' ); + $this->loader->add_action( 'admin_init', $plugin_admin, 'hubwoo_pro_add_privacy_message' ); + $this->loader->add_action( 'admin_init', $plugin_admin, 'hubwoo_get_plugin_log' ); + $this->loader->add_action( 'admin_init', $plugin_admin, 'hubwoo_check_property_value' ); + $this->loader->add_action( 'admin_init', $plugin_admin, 'hubwoo_check_update_changes' ); + $this->loader->add_action( 'admin_notices', $plugin_admin, 'hubwoo_cron_notification' ); + $this->loader->add_action( 'admin_notices', $plugin_admin, 'hubwoo_review_notice', 99 ); + //hpos changes + $this->loader->add_action( 'admin_notices', $plugin_admin, 'hubwoo_hpos_notice', 99 ); + // hubspot deal hooks. + if ( 'yes' == get_option( 'hubwoo_ecomm_deal_enable', 'yes' ) ) { + + $this->loader->add_filter( 'manage_edit-shop_order_columns', $plugin_admin, 'hubwoo_order_cols', 11 ); + $this->loader->add_action( 'manage_shop_order_posts_custom_column', $plugin_admin, 'hubwoo_order_cols_value', 10, 2 ); + } + + // deactivation screen. + $this->loader->add_action( 'admin_footer', $plugin_admin, 'init_deactivation' ); + + // hubspot abandon carts. + $this->loader->add_filter( 'hubwoo_users', $plugin_admin, 'hubwoo_abncart_users' ); + $this->loader->add_filter( 'hubwoo_contact_modified_fields', $plugin_admin, 'hubwoo_abncart_contact_properties', 10, 2 ); + $this->loader->add_filter( 'hubwoo_pro_track_guest_cart', $plugin_admin, 'hubwoo_abncart_process_guest_data', 10, 2 ); + + $this->loader->add_action( 'huwoo_abncart_clear_old_cart', $plugin_admin, 'huwoo_abncart_clear_old_cart' ); + + if ( get_option( 'hubwoo_checkout_form_created', 'no' ) == 'yes' ) { + + $this->loader->add_action( 'woocommerce_checkout_process', $plugin_admin, 'hubwoo_submit_checkout_form' ); + } + + if ( $this->is_plugin_enable() == 'yes' ) { + + if ( $this->is_setup_completed() ) { + + $this->loader->add_action( 'hubwoo_cron_schedule', $plugin_admin, 'hubwoo_cron_schedule' ); + $this->loader->add_filter( 'hubwoo_unset_workflow_properties', $plugin_admin, 'hubwoo_reset_workflow_properties' ); + $this->loader->add_action( 'woocommerce_order_status_changed', $plugin_admin, 'hubwoo_update_order_changes' ); + $this->loader->add_action( 'set_user_role', $plugin_admin, 'hubwoo_add_user_toupdate', 10 ); + } + + if ( $this->hubwoo_subs_active() ) { + + $this->loader->add_filter( 'hubwoo_contact_groups', $plugin_admin, 'hubwoo_subs_groups' ); + $this->loader->add_filter( 'hubwoo_active_groups', $plugin_admin, 'hubwoo_active_subs_groups' ); + } + + // HubSpot Deals. + if ( false === wp_cache_get( 'hubwoo_product_update_lock' ) ) { + wp_cache_set( 'hubwoo_product_update_lock', true ); + $this->loader->add_action( 'save_post', $plugin_admin, 'hubwoo_ecomm_update_product', 10, 2 ); + } + if ( 'yes' == get_option( 'hubwoo_ecomm_deal_enable', 'yes' ) ) { + + $this->loader->add_action( 'hubwoo_ecomm_deal_upsert', $plugin_admin, 'hubwoo_ecomm_deal_upsert' ); + $this->loader->add_action( 'hubwoo_ecomm_deal_update', $plugin_admin, 'hubwoo_ecomm_deal_update' ); + $this->loader->add_action( 'hubwoo_deals_sync_check', $plugin_admin, 'hubwoo_deals_sync_check' ); + $this->loader->add_action( 'hubwoo_products_sync_check', $plugin_admin, 'hubwoo_products_sync_check' ); + $this->loader->add_action( 'hubwoo_deals_sync_background', $plugin_admin, 'hubwoo_deals_sync_background', 10, 2 ); + $this->loader->add_action( 'hubwoo_products_sync_background', $plugin_admin, 'hubwoo_products_sync_background' ); + $this->loader->add_action( 'hubwoo_products_status_background', $plugin_admin, 'hubwoo_products_status_background' ); + } + + $this->loader->add_action( 'hubwoo_check_logs', $plugin_admin, 'hubwoo_check_logs' ); + + // HubSpot deals hooks. + if ( 'yes' == get_option( 'hubwoo_ecomm_setup_completed', 'no' ) ) { + + if( 'yes' != get_option('woocommerce_custom_orders_table_enabled', 'no') ) { + $this->loader->add_action( 'save_post_shop_order', $plugin_admin, 'hubwoo_ecomm_deal_update_order' ); + } + } + + $this->loader->add_action( 'hubwoo_contacts_sync_background', $plugin_admin, 'hubwoo_contacts_sync_background' ); + $this->loader->add_action( 'hubwoo_update_contacts_vid', $plugin_admin, 'hubwoo_update_contacts_vid' ); + } + } + + /** + * Register all of the hooks related to the public-facing functionality + * of the plugin. + * + * @since 1.0.0 + */ + private function define_public_hooks() { + + $plugin_public = new Hubwoo_Public( $this->get_plugin_name(), $this->get_version() ); + + if ( $this->is_plugin_enable() == 'yes' ) { + + $this->loader->add_action( 'profile_update', $plugin_public, 'hubwoo_woocommerce_save_account_details' ); + $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'hubwoo_add_hs_script' ); + $this->loader->add_action( 'user_register', $plugin_public, 'hubwoo_woocommerce_save_account_details' ); + $this->loader->add_action( 'woocommerce_customer_save_address', $plugin_public, 'hubwoo_woocommerce_save_account_details' ); + $this->loader->add_action( 'woocommerce_checkout_update_user_meta', $plugin_public, 'hubwoo_woocommerce_save_account_details' ); + if ( 'yes' == get_option( 'hubwoo_pro_guest_sync_enable', 'yes' ) ) { + $this->loader->add_action( 'woocommerce_update_order', $plugin_public, 'hubwoo_pro_woocommerce_guest_orders' ); + } + if ( 'yes' == get_option( 'hubwoo_checkout_optin_enable', 'no' ) ) { + $this->loader->add_action( 'woocommerce_after_checkout_billing_form', $plugin_public, 'hubwoo_pro_checkout_field' ); + $this->loader->add_action( 'woocommerce_checkout_order_processed', $plugin_public, 'hubwoo_pro_process_checkout_optin' ); + } + if ( 'yes' == get_option( 'hubwoo_registeration_optin_enable', 'no' ) ) { + $this->loader->add_action( 'woocommerce_register_form', $plugin_public, 'hubwoo_pro_register_field' ); + $this->loader->add_action( 'woocommerce_created_customer', $plugin_public, 'hubwoo_save_register_optin' ); + } + $this->loader->add_action( 'wp_loaded', $plugin_public, 'hubwoo_add_abncart_products', 10 ); + + $subs_enable = get_option( 'hubwoo_subs_settings_enable', 'yes' ); + + if ( 'yes' == $subs_enable && $this->hubwoo_subs_active() ) { + + $this->loader->add_action( 'woocommerce_renewal_order_payment_complete', $plugin_public, 'hubwoo_pro_save_renewal_orders' ); + $this->loader->add_action( 'woocommerce_scheduled_subscription_payment', $plugin_public, 'hubwoo_pro_save_renewal_orders' ); + $this->loader->add_action( 'woocommerce_subscription_renewal_payment_complete', $plugin_public, 'hubwoo_pro_update_subs_changes' ); + $this->loader->add_action( 'woocommerce_subscription_payment_failed', $plugin_public, 'hubwoo_pro_update_subs_changes' ); + $this->loader->add_action( 'woocommerce_subscription_renewal_payment_failed', $plugin_public, 'hubwoo_pro_update_subs_changes' ); + $this->loader->add_action( 'woocommerce_subscription_payment_complete', $plugin_public, 'hubwoo_pro_update_subs_changes' ); + $this->loader->add_action( 'woocommerce_subscription_status_updated', $plugin_public, 'hubwoo_pro_update_subs_changes' ); + $this->loader->add_action( 'woocommerce_customer_changed_subscription_to_cancelled', $plugin_public, 'hubwoo_save_changes_in_subs' ); + $this->loader->add_action( 'woocommerce_customer_changed_subscription_to_active', $plugin_public, 'hubwoo_save_changes_in_subs' ); + $this->loader->add_action( 'woocommerce_customer_changed_subscription_to_on-hold', $plugin_public, 'hubwoo_save_changes_in_subs' ); + $this->loader->add_action( 'init', $plugin_public, 'hubwoo_subscription_switch' ); + } + + // HubSpot Abandon Carts. + if ( get_option( 'hubwoo_abncart_enable_addon', 'yes' ) == 'yes' ) { + + if ( get_option( 'hubwoo_abncart_guest_cart', 'yes' ) == 'yes' ) { + + $this->loader->add_action( 'init', $plugin_public, 'hubwoo_abncart_start_session', 10 ); + $this->loader->add_action( 'template_redirect', $plugin_public, 'hubwoo_track_cart_for_formuser' ); + $this->loader->add_action( 'wp_ajax_nopriv_hubwoo_save_guest_user_cart', $plugin_public, 'hubwoo_save_guest_user_cart' ); + $this->loader->add_action( 'wp_ajax_nopriv_get_order_detail', $plugin_public, 'get_order_detail' ); + $this->loader->add_action( 'woocommerce_after_checkout_billing_form', $plugin_public, 'hubwoo_track_email_for_guest_users', 10 ); + $this->loader->add_action( 'woocommerce_after_checkout_billing_form', $plugin_public, 'get_email_checkout_page' ); + $this->loader->add_action( 'woocommerce_new_order', $plugin_public, 'hubwoo_abncart_woocommerce_new_orders' ); + $this->loader->add_action( 'woocommerce_cart_updated', $plugin_public, 'hubwoo_abncart_track_guest_cart', 99, 0 ); + $this->loader->add_action( 'user_register', $plugin_public, 'hubwoo_abncart_user_registeration' ); + $this->loader->add_action( 'wp_logout', $plugin_public, 'hubwoo_clear_session' ); + } + $this->loader->add_filter( 'woocommerce_update_cart_action_cart_updated', $plugin_public, 'hubwoo_guest_cart_updated' ); + $this->loader->add_action( 'woocommerce_add_to_cart', $plugin_public, 'hubwoo_abncart_woocommerce_add_to_cart', 20, 0 ); + } + + $active_plugins = get_option( 'active_plugins' ); + if ( in_array( 'sitepress-multilingual-cms/sitepress.php', $active_plugins ) ) { + $this->loader->add_action( 'woocommerce_thankyou', $plugin_public, 'hubwoo_update_user_prefered_lang' ); + } + + $this->loader->add_filter( 'woocommerce_order_item_get_formatted_meta_data', $plugin_public, 'hubwoo_hide_line_item_meta', 20, 2 ); + } + } + + /** + * Run the loader to execute all of the hooks with WordPress. + * + * @since 1.0.0 + */ + public function run() { + + $this->loader->run(); + } + + /** + * The name of the plugin used to uniquely identify it within the context of + * WordPress and to define internationalization functionality. + * + * @since 1.0.0 + * @return string The name of the plugin. + */ + public function get_plugin_name() { + + return $this->plugin_name; + } + + /** + * The reference to the class that orchestrates the hooks with the plugin. + * + * @since 1.0.0 + * @return Hubwoo_Loader Orchestrates the hooks of the plugin. + */ + public function get_loader() { + + return $this->loader; + } + + /** + * Retrieve the version number of the plugin. + * + * @since 1.0.0 + * @return string The version number of the plugin. + */ + public function get_version() { + + return $this->version; + } + + /** + * Predefined default hubwoo tabs. + * + * @since 1.0.0 + */ + public function hubwoo_default_tabs() { + + $default_tabs = array(); + + $common_dependency = array( 'is_oauth_success', 'is_valid_client_ids_stored', 'is_field_setup_completed' ); + + $default_tabs['hubwoo-overview'] = array( + 'name' => __( 'Dashboard', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => array(), + 'title' => esc_html__( 'Integrate your WooCommerce store with HubSpot', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $default_tabs['hubwoo-sync-contacts'] = array( + 'name' => __( 'Contacts', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => $common_dependency, + 'title' => esc_html__( 'Sync all your woocommerce data to HubSpot', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $default_tabs['hubwoo-deals'] = array( + 'name' => __( 'Deals', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => $common_dependency, + 'title' => esc_html__( 'Sync All of your woocommerce orders as HubSpot Deals', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $default_tabs['hubwoo-abncart'] = array( + 'name' => __( 'Abandoned Carts', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => $common_dependency, + 'title' => esc_html__( 'Sync all of the cart abandoners on your website', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $default_tabs['hubwoo-automation'] = array( + 'name' => __( 'Automation', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => $common_dependency, + 'title' => esc_html__( 'Create Workflows to Track ROI and Retrieve Abandoned Carts', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $default_tabs['hubwoo-add-ons'] = array( + 'name' => __( 'Add Ons', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => '', + 'title' => esc_html__( 'Add-ons for the HubSpot Integrations', 'makewebbetter-hubspot-for-woocommerce' ), + ); + $default_tabs['hubwoo-general-settings'] = array( + 'name' => __( 'Settings', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => array( 'is_oauth_success', 'is_valid_client_ids_stored' ), + 'title' => esc_html__( 'General And Advanced Settings', 'makewebbetter-hubspot-for-woocommerce' ), + ); + $default_tabs['hubwoo-logs'] = array( + 'name' => __( 'Logs', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => array( 'is_oauth_success', 'is_valid_client_ids_stored' ), + 'title' => esc_html__( 'HubSpot Logs', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + $default_tabs = apply_filters( 'hubwoo_navigation_tabs', $default_tabs ); + + $default_tabs['hubwoo-support'] = array( + 'name' => __( 'Support', 'makewebbetter-hubspot-for-woocommerce' ), + 'dependency' => array( 'is_oauth_success', 'is_valid_client_ids_stored' ), + 'title' => esc_html__( 'Support', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + return $default_tabs; + } + + /** + * Checking dependencies for tabs. + * + * @since 1.0.0 + * @param array $dependency list of dependencies of function. + */ + public function check_dependencies( $dependency = array() ) { + + $flag = true; + + global $hubwoo; + + if ( count( $dependency ) ) { + + foreach ( $dependency as $single_dependency ) { + + if ( ! empty( $hubwoo->$single_dependency() ) ) { + $flag = $flag & $hubwoo->$single_dependency(); + } + } + } + + return $flag; + } + + /** + * Get started with setup. + * + * @since 1.0.0 + */ + public static function hubwoo_pro_get_started() { + + $last_version = self::hubwoo_pro_last_version(); + + if ( HUBWOO_VERSION != $last_version ) { + + return true; + } elseif ( HUBWOO_VERSION != $last_version && ! get_option( 'hubwoo_pro_get_started', false ) ) { + + return false; + } elseif ( HUBWOO_VERSION == $last_version && get_option( 'hubwoo_pro_get_started', false ) ) { + + return true; + } else { + + return get_option( 'hubwoo_pro_get_started', false ); + } + } + + /** + * Fetching the last version from user database + * + * @since 1.0.0 + */ + public static function hubwoo_pro_last_version() { + + if ( self::is_setup_completed() ) { + + return get_option( 'hubwoo_pro_version', '1.5.7' ); + } else { + + return HUBWOO_VERSION; + } + } + + /** + * Verify if the hubspot setup is completed. + * + * @since 1.0.0 + * @return boolean true/false + */ + public static function is_setup_completed() { + + return get_option( 'hubwoo_pro_setup_completed', false ); + } + + /** + * Check if hubspot oauth has been successful. + * + * @since 1.0.0 + * @return boolean true/false + */ + public function is_oauth_success() { + + return get_option( 'hubwoo_pro_oauth_success', false ); + } + + /** + * Check if plugin feature is enbled or not. + * + * @since 1.0.0 + * @return boolean true/false + */ + public function is_plugin_enable() { + + return get_option( 'hubwoo_pro_settings_enable', 'yes' ); + } + + /** + * Check if valid hubspot client Ids is stored. + * + * @since 1.0.0 + * @return boolean true/false + */ + public static function is_valid_client_ids_stored() { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + + if ( $hapikey && $hseckey ) { + + return get_option( 'hubwoo_pro_valid_client_ids_stored', false ); + } + + return false; + } + + /** + * Checking the properties setup status. + * + * @since 1.0.0 + */ + public function is_field_setup_completed() { + + $last_version = self::hubwoo_pro_last_version(); + + if ( HUBWOO_VERSION != $last_version ) { + + return true; + } else { + + return get_option( 'hubwoo_fields_setup_completed', false ); + } + } + + /** + * Locate and load appropriate tempate. + * + * @since 1.0.0 + * @param string $path path of the file. + * @param string $tab tab name. + */ + public function load_template_view( $path, $tab = '' ) { + + $file_path = HUBWOO_ABSPATH . $path; + + if ( file_exists( $file_path ) ) { + + include $file_path; + } else { + + $file_path = apply_filters( 'hubwoo_load_template_path', $tab ); + + if ( file_exists( $file_path ) ) { + + include $file_path; + } else { + + /* translators: %s: file path */ + $notice = sprintf( esc_html__( 'Unable to locate file path at location %s some features may not work properly in HubSpot Integration, please contact us!', 'makewebbetter-hubspot-for-woocommerce' ), $file_path ); + $this->hubwoo_notice( $notice, 'error' ); + } + } + } + + /** + * Show admin notices. + * + * @param string $message Message to display. + * @param string $type notice type, accepted values - error/update/update-nag. + * @since 1.0.0 + */ + public static function hubwoo_notice( $message, $type = 'error' ) { + + $classes = 'notice '; + + switch ( $type ) { + + case 'update': + $classes .= 'updated'; + break; + + case 'update-nag': + $classes .= 'update-nag'; + break; + + case 'success': + $classes .= 'notice-success is-dismissible'; + break; + case 'hubwoo-notice': + $classes .= 'hubwoo-notice'; + break; + default: + $classes .= 'error'; + } + + $notice = '
'; + $notice .= '

' . $message . '

'; + $notice .= '
'; + + echo wp_kses_post( $notice ); + } + + /** + * Fetch owner email info from HubSpot. + * + * @since 1.0.0 + * @return boolean true/false + */ + public function hubwoo_owners_email_info() { + + $owner_email = get_option( 'hubwoo_pro_hubspot_id', '' ); + + if ( empty( $owner_email ) ) { + + if ( self::is_valid_client_ids_stored() ) { + + $flag = true; + + if ( self::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $owner_email = HubWooConnectionMananager::get_instance()->hubwoo_get_owners_info(); + + if ( ! empty( $owner_email ) ) { + + update_option( 'hubwoo_pro_hubspot_id', $owner_email ); + } + } + } + } + + return $owner_email; + } + + /** + * Check if access token is expired. + * + * @since 1.0.0 + * @return boolean true/false + */ + public static function is_access_token_expired() { + + $get_expiry = get_option( 'hubwoo_pro_token_expiry', false ); + + if ( $get_expiry ) { + + $current_time = time(); + + if ( ( $get_expiry > $current_time ) && ( $get_expiry - $current_time ) <= 50 ) { + + return true; + } elseif ( ( $current_time > $get_expiry ) ) { + + return true; + } + } + + return false; + } + + /** + * Reset saved options for setup. + * + * @param bool $redirect whether to redirect. + * @param bool $delete_meta whether to delete meta. + * @since 1.0.0 + */ + public function hubwoo_switch_account( $redirect = true, $delete_meta = false ) { + + global $wpdb; + $wpdb->query( "DELETE FROM `{$wpdb->options}` WHERE `option_name` LIKE '%hubwoo%'" ); + as_unschedule_action( 'hubwoo_contacts_sync_background' ); + as_unschedule_action( 'hubwoo_deals_sync_background' ); + as_unschedule_action( 'hubwoo_products_sync_background' ); + as_unschedule_action( 'hubwoo_products_status_background' ); + as_unschedule_action( 'hubwoo_update_contacts_vid' ); + + if ( $delete_meta ) { + delete_option( 'WooCommerce: set Order Recency 1 Ratings' ); + delete_option( 'WooCommerce: set Order Recency 2 Ratings' ); + delete_option( 'WooCommerce: set Order Recency 3 Ratings' ); + delete_option( 'WooCommerce: set Order Recency 4 Ratings' ); + delete_option( 'WooCommerce: set Order Recency 5 Ratings' ); + delete_option( 'WooCommerce: MQL to Customer lifecycle stage Conversion' ); + delete_option( 'WooCommerce: Welcome New Customer & Get a 2nd Order' ); + delete_option( 'WooCommerce: 2nd Order Thank You & Get a 3rd Order' ); + delete_option( 'WooCommerce: 3rd Order Thank You' ); + delete_option( 'WooCommerce: ROI Calculation' ); + delete_option( 'WooCommerce: Order Workflow' ); + delete_option( 'WooCommerce: Update Historical Order Recency Rating' ); + delete_option( 'WooCommerce: After order Workflow' ); + delete_option( 'WooCommerce: Enroll Customers for Recency Settings' ); + delete_metadata( 'user', 0, 'hubwoo_pro_user_data_change', '', true ); + delete_metadata( 'user', 0, 'hubwoo_user_vid', '', true ); + delete_metadata( 'post', 0, 'hubwoo_pro_user_data_change', '', true ); + delete_metadata( 'post', 0, 'hubwoo_pro_guest_order', '', true ); + delete_metadata( 'post', 0, 'hubwoo_ecomm_deal_id', '', true ); + delete_metadata( 'post', 0, 'hubwoo_ecomm_pro_id', '', true ); + delete_metadata( 'post', 0, 'hubwoo_ecomm_deal_created', '', true ); + delete_metadata( 'post', 0, 'hubwoo_product_synced', '', true ); + delete_metadata( 'post', 0, 'hubwoo_user_vid', '', true ); + + //hpos changes + if( 'yes' == get_option('woocommerce_custom_orders_table_enabled', 'no') ) { + $wpdb->query( "DELETE FROM `{$wpdb->prefix}wc_orders_meta` WHERE `meta_key` IN ('hubwoo_pro_guest_order', 'hubwoo_ecomm_deal_id', 'hubwoo_ecomm_deal_created', 'hubwoo_user_vid', 'hubwoo_pro_user_data_change')" ); + } + } + + if ( $redirect ) { + wp_safe_redirect( admin_url( 'admin.php?page=hubwoo' ) ); + } else { + update_option( 'hubwoo_clear_previous_options', 'yes' ); + } + exit(); + } + + /** + * Getting the final groups after the setup. + * + * @since 1.0.0 + */ + public function hubwoo_get_final_groups() { + + $final_groups = array(); + + $hubwoo_groups = HubWooContactProperties::get_instance()->_get( 'groups' ); + + $last_version = self::hubwoo_pro_last_version(); + + if ( HUBWOO_VERSION != $last_version && '2.0.0' > $last_version ) { + + if ( is_array( $hubwoo_groups ) && count( $hubwoo_groups ) ) { + + foreach ( $hubwoo_groups as $single_group ) { + + if ( 'subscriptions_details' == $single_group['name'] && ! self::is_subs_group_setup_completed() ) { + + $final_groups[] = array( + 'detail' => $single_group, + 'status' => 'false', + ); + } else { + + $final_groups[] = array( + 'detail' => $single_group, + 'status' => 'created', + ); + } + } + } + } else { + + $added_groups = get_option( 'hubwoo-groups-created', array() ); + + if ( get_option( 'hubwoo_abncart_added', 0 ) == 1 ) { + $added_groups = apply_filters( 'hubwoo_active_groups', $added_groups ); + } + + if ( is_array( $hubwoo_groups ) && count( $hubwoo_groups ) ) { + + foreach ( $hubwoo_groups as $single_group ) { + + if ( in_array( $single_group['name'], $added_groups ) ) { + + $final_groups[] = array( + 'detail' => $single_group, + 'status' => 'created', + ); + } else { + + $final_groups[] = array( + 'detail' => $single_group, + 'status' => 'false', + ); + } + } + } + } + + return $final_groups; + } + + /** + * Verify if the hubspot subscription group setup is completed. + * + * @since 1.0.0 + * @return boolean true/false + */ + public static function is_subs_group_setup_completed() { + + $last_version = self::hubwoo_pro_last_version(); + + if ( HUBWOO_VERSION != $last_version ) { + + if ( get_option( 'hubwoo_subs_setup_completed', false ) ) { + + return true; + } else { + + if ( in_array( 'subscriptions_details', get_option( 'hubwoo-groups-created', array() ) ) ) { + + return true; + } else { + + return false; + } + } + } + } + + /** + * Required groups for lists and workflows. + * + * @since 1.0.0 + */ + public function hubwoo_workflows_and_list_groups() { + + return array( 'rfm_fields', 'roi_tracking', 'customer_group', 'order', 'abandoned_cart' ); + } + + /** + * Required properties for lists abd workflows. + * + * @since 1.0.0 + */ + public function hubwoo_workflows_and_list_properties() { + + $required_fields = array(); + + $roi_tracking_properties = HubWooContactProperties::get_instance()->_get( 'properties', 'roi_tracking' ); + + if ( ! empty( $roi_tracking_properties ) ) { + + foreach ( $roi_tracking_properties as $single_property ) { + + if ( isset( $single_property['name'] ) ) { + + $required_fields[] = $single_property['name']; + } + } + } + + $required_fields[] = 'newsletter_subscription'; + $required_fields[] = 'total_number_of_orders'; + $required_fields[] = 'last_order_date'; + $required_fields[] = 'last_order_value'; + $required_fields[] = 'average_days_between_orders'; + $required_fields[] = 'monetary_rating'; + $required_fields[] = 'order_frequency_rating'; + $required_fields[] = 'order_recency_rating'; + + return $required_fields; + } + + /** + * Get final lists to be created on HubSpot. + * + * @since 1.0.0 + */ + public function hubwoo_get_final_lists() { + + $final_lists = array(); + + $hubwoo_lists = HubWooContactProperties::get_instance()->_get( 'lists' ); + if ( is_array( $hubwoo_lists ) && count( $hubwoo_lists ) ) { + + foreach ( $hubwoo_lists as $single_list ) { + $list_filter_created = self::is_list_filter_created( $single_list['filters'] ); + if ( $list_filter_created ) { + + $final_lists[] = $single_list; + } + } + } + + if ( count( $final_lists ) ) { + + $add_lists = get_option( 'hubwoo-lists-created', array() ); + + $filtered_final_lists = array(); + + foreach ( $final_lists as $single_list ) { + + if ( in_array( $single_list['name'], $add_lists ) ) { + + $filtered_final_lists[] = array( + 'detail' => $single_list, + 'status' => 'created', + ); + } else { + + $filtered_final_lists[] = array( + 'detail' => $single_list, + 'status' => 'false', + ); + } + } + } + + return $filtered_final_lists; + } + + /** + * Checking the list filter to be created. + * + * @since 1.0.0 + * @param array $filters list of filters in a list. + */ + public function is_list_filter_created( $filters ) { + + $status = true; + + if ( is_array( $filters ) && count( $filters ) ) { + + foreach ( $filters as $key => $single_filter ) { + + foreach ( $single_filter as $single_filter_detail ) { + + if ( isset( $single_filter_detail['property'] ) ) { + + $status &= self::check_field_existence( $single_filter_detail['property'] ); + } + } + } + } + + return $status; + } + + /** + * Checking field existense for the lists. + * + * @since 1.0.0 + * @param string $field name of the field. + */ + public static function check_field_existence( $field = '' ) { + + $status = false; + + if ( 'lifecyclestage' == $field ) { + + return true; + } + + global $hubwoo; + + $hubwoo_fields = get_option( 'hubwoo-properties-created', array() ); + + $status = in_array( $field, $hubwoo_fields ) ? true : false; + + return $status; + } + + /** + * Checking the lists setup status. + * + * @since 1.0.0 + */ + public function is_list_setup_completed() { + + return get_option( 'hubwoo_pro_lists_setup_completed', false ); + } + + /** + * Workflow description. + * + * @since 1.0.0 + */ + public function get_workflow_description() { + return array( + 'WooCommerce: MQL to Customer lifecycle stage Conversion' => 'It is designed to get a qualified lead to make the first purchase.', + 'WooCommerce: Welcome New Customer & Get a 2nd Order' => 'This workflow triggers shortly after a first purchase, and are designed to push the customer towards a 2nd order.', + 'WooCommerce: 2nd Order Thank You & Get a 3rd Order' => 'This workflow triggers shortly after the 2nd Purchase and is designed to thank customers to become repeat buyers.', + 'WooCommerce: 3rd Order Thank You' => 'This workflow triggers for those customers who have placed their order for at least 3 times.', + 'WooCommerce: ROI Calculation' => 'This workflow triggers to track conversions in your marketing system by knowing Return-On-Investment.', + 'WooCommerce: After order Workflow' => 'This workflow triggers when any new order gets placed.', + 'WooCommerce: Order Workflow' => 'This workflow triggers to track purchase if a prospect gets convert into a customer.', + 'WooCommerce: set Order Recency 1 Ratings' => 'This workflow triggers for those customers with Order Recency Rating - 1.', + 'WooCommerce: set Order Recency 2 Ratings' => 'This workflow triggers for those customers with Order Recency Rating - 2', + 'WooCommerce: set Order Recency 3 Ratings' => 'This workflow triggers for those customers with Order Recency Rating - 3', + 'WooCommerce: set Order Recency 4 Ratings' => 'This workflow triggers for those customers with Order Recency Rating - 4', + 'WooCommerce: set Order Recency 5 Ratings' => 'This workflow triggers for those customers with Order Recency Rating - 5', + 'WooCommerce: Update Historical Order Recency Rating' => 'This workflow triggers when any historical order recency rating gets updated.', + 'WooCommerce: Enroll Customers for Recency Settings' => 'This workflow triggers when any customer has made its first purchase and enrolled for Order Recency.', + 'WooCommerce: Abandoned Cart Recovery' => 'This workflow triggers when any user abandons their cart on your store.', + ); + } + + /** + * Checking the lists setup status. + * + * @since 1.0.0 + */ + public function get_lists_description() { + + return array( + 'Repeat Buyers' => 'Repeat Buyers is the smart list of HubSpot which helps to segment customers those who shop on your store regularly and their HubSpot property Average days between orders is also under the count of 30 days.', + 'DisEngaged Customers' => 'Disengaged Customers is the smart list where you can see the list of customers that didn’t reach you from more than 60-180 days. It is the most useful list where you can target your those customers who are disengaged for a long period of time.', + 'Abandoned Cart' => 'Send Reminders, Capture emails and Recover Lost Sales in real-time with an Automated Cart Recovery Solution for your WooCommerce store.', + 'Engaged Customers' => 'Engaged Customers is the smart list of HubSpot that will list all your contacts whose last brought item is less than 60days. It will show the list of your loyal and regular customers.', + 'Customers' => 'This list will enroll customers according to their customer’s lifecycle stage. Whenever any customer’s lifecycle changes it would filter all those customers.', + 'Marketing Qualified Leads' => 'It will enlist all those marketing qualified lead (MQL) who has been deemed more likely to become a customer compared to other leads. This qualification is based on what web pages a person has visited, what they’ve downloaded, and similar engagement with the business’s content.', + 'Leads' => 'It will list all those leads who have indicated interest in your company’s product or service in some way, shape, or form.', + 'Bought four or more times' => 'It will list all those customers who have purchased 4 times from your store. You can provide special benefits to those customers.', + 'Three time purchase customers' => 'It will list all those customers who have purchased only three times from your store. You can encourage them to buy more frequently.', + 'Two time purchase customers' => 'It will list all those customers who have brought only 2 times from your store. You can pay special attention to those customers as they are interested but you have to educate them about your product and service.', + 'One time purchase customers' => 'It will list all those customers whose total number of order is 1. As the list shows, the total number of order is 1, so you have to work hard on these customers and start nurturing them and educate them about your product and services.', + 'Newsletter Subscriber' => 'It will list all those newsletter subscribers who have subscribed for a printed report containing news (information) of the activities of a business or an organization (institutions, societies, associations) that is sent by mail regularly to all its members, customers, employees or people, who are interested.', + 'Low Spenders' => 'This list shows the contact property whose Monetary rating is equal to 1. It notifies that your customer is not spending much on your store.', + 'Mid Spenders' => 'This list shows the contact property whose Monetary rating is equal to 3. It means that he not frequently buying from your store.', + 'Big Spenders' => 'This list shows the contact property whose Monetary rating is equal to 5. These are the customers who are spending lavishly and purchasing more often from your store.', + 'About to Sleep' => 'It is the list in which customer whose Recency Frequency and Monetary (RFM) value lie between 1 & 2 and they are about to sleep. It means that their engagement with your website is getting less on each successive day.', + 'Customers needing attention' => 'In this list, Monetary and Frequency of the customer are 3 but Recency lies between 1 & 2. This list shows that customer has spent time and money both on your website but his last order was long-ago.', + 'New Customers' => 'This list shows new contact whose Frequency and Recency is 1. They are the new customer they are not yet engaged with your website.', + 'Low Value Lost Customers' => 'It is the list of those customers whose Recency, Frequency & Monetary is 1. These are the customer who is on the verge of getting lost as their engagement with the website is very low.', + 'Churning Customers' => 'It is the list of those customers whose Monetary and Order frequency is 5 but Recency is 1. The churning rate, also known as the rate of attrition, it is the percentage of subscribers to a service who discontinue their subscriptions to the service within a given time period.', + 'Loyal Customers' => 'It is the list of those customers whose Frequency and Recency of order is 5. It is the list which exhibits customer loyalty when they consistently purchase a certain product or brand over an extended period of time and describes the loyalty which is established between a customer and companies.', + 'Best Customers' => 'It is the list of those customers whose RFM (Recency, Frequency & Monetary) rating is perfect 5. It is the list of your loyal customers that are consistently positive & emotional, physical attribute-based satisfaction and perceived value of an experience, which includes the product or services.', + ); + } + + /** + * Required lists to create. + * + * @since 1.0.0 + * @param string $list_name name of the list. + */ + public function required_lists_to_create( $list_name ) { + + $required_lists = array( 'Customers', 'Leads', 'Abandoned Cart' ); + + return in_array( $list_name, $required_lists ) ? "checked='checked'" : ''; + } + + /** + * Getting the final groups after the setup. + * + * @since 1.0.0 + */ + public function hubwoo_get_final_workflows() { + + $final_workflows = array(); + + $hubwoo_workflows = HubWooContactProperties::get_instance()->_get( 'workflows' ); + + $add_workflows = get_option( 'hubwoo-workflows-created', array() ); + + if ( is_array( $hubwoo_workflows ) && count( $hubwoo_workflows ) ) { + + foreach ( $hubwoo_workflows as $single_workflow ) { + + if ( in_array( $single_workflow['name'], $add_workflows ) ) { + + $final_workflows[] = array( + 'detail' => $single_workflow, + 'status' => 'created', + ); + } else { + + $final_workflows[] = array( + 'detail' => $single_workflow, + 'status' => 'false', + ); + } + } + } + + return $final_workflows; + } + + /** + * All dependencies for workflows. + * + * @since 1.0.0 + */ + public static function hubwoo_workflows_dependency() { + + $workflows = array(); + + $workflows[] = array( + 'workflow' => 'WooCommerce: set Order Recency 1 Ratings', + 'dependencies' => array( 'WooCommerce: Order Workflow' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: set Order Recency 2 Ratings', + 'dependencies' => array( 'WooCommerce: set Order Recency 1 Ratings' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: set Order Recency 3 Ratings', + 'dependencies' => array( 'WooCommerce: set Order Recency 2 Ratings' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: set Order Recency 4 Ratings', + 'dependencies' => array( 'WooCommerce: set Order Recency 3 Ratings' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: set Order Recency 5 Ratings', + 'dependencies' => array( 'WooCommerce: set Order Recency 4 Ratings', 'WooCommerce: Order Workflow' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: Enroll Customers for Recency Settings', + 'dependencies' => array( 'WooCommerce: Update Historical Order Recency Rating' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: Update Historical Order Recency Rating', + 'dependencies' => array( 'WooCommerce: set Order Recency 5 Ratings' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: Order Workflow', + 'dependencies' => array( 'WooCommerce: ROI Calculation', 'WooCommerce: After order Workflow' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: After order Workflow', + 'dependencies' => array( 'WooCommerce: 3rd Order Thank You', 'WooCommerce: 2nd Order Thank You & Get a 3rd Order', 'WooCommerce: Welcome New Customer & Get a 2nd Order' ), + ); + + $workflows[] = array( + 'workflow' => 'WooCommerce: Abandoned Cart Recovery', + 'dependencies' => array( 'WooCommerce: Order Workflow' ), + ); + + return $workflows; + } + + /** + * Checking workflow dependency. + * + * @since 1.0.0 + * @param string $workflow name of workflow. + */ + public function is_workflow_dependent( $workflow = '' ) { + + if ( ! empty( $workflow ) ) { + + $workflow_dependencies = self::hubwoo_workflows_dependency(); + + $dependencies = array(); + + $status = true; + + if ( ! empty( $workflow_dependencies ) ) { + + foreach ( $workflow_dependencies as $single_workflow ) { + + if ( isset( $single_workflow['workflow'] ) && $workflow == $single_workflow['workflow'] ) { + + $dependencies = $single_workflow['dependencies']; + break; + } + } + } + + if ( ! empty( $dependencies ) ) { + + foreach ( $dependencies as $single_dependency ) { + + $status &= self::is_hubwoo_workflow_exists( $single_dependency ); + } + } + + return $status; + } + } + + /** + * Check for workflow existence. + * + * @since 1.0.0 + * @param string $workflow workflow name. + */ + public static function is_hubwoo_workflow_exists( $workflow = '' ) { + + $status = false; + + if ( ! empty( $workflow ) ) { + + return in_array( $workflow, get_option( 'hubwoo-workflows-created', array() ) ); + } + + return $status; + } + + /** + * Checking for workflows scope. + * + * @since 1.0.0 + */ + public function is_automation_enabled() { + + $scopes = get_option( 'hubwoo_pro_account_scopes', array() ); + + HubWooConnectionMananager::get_instance()->get_workflows(); + + if ( empty( $scopes ) ) { + + HubWooConnectionMananager::get_instance()->hubwoo_pro_get_access_token_info(); + } + + if ( in_array( 'automation', $scopes ) ) { + + return true; + } + } + + + /** + * Get array of all workflows with id and name. + * + * @since 1.0.0 + */ + public static function hubwoo_get_all_workflows_id_name() { + + $all_workflows = array(); + + $all_workflows = HubWooConnectionMananager::get_instance()->get_workflows(); + + return $all_workflows; + } + + /** + * Get selected order action. + * + * @since 1.0.0 + * @param string $action name of action to get html. + */ + public static function hubwoo_get_selected_order_action( $action = '' ) { + + $actions_for_workflows = self::hubwoo_order_actions_for_workflows(); + + $option = ''; + + if ( ! empty( $actions_for_workflows ) ) { + + foreach ( $actions_for_workflows as $key => $value ) { + + if ( $key == $action ) { + + $option .= ''; + } else { + + $option .= ''; + } + } + } + + return $option; + } + + /** + * Get selected workflow. + * + * @since 1.0.0 + * @param array $all_workflows list of all workflows. + * @param string $workflow workflow name. + */ + public static function hubwoo_get_selected_workflow( $all_workflows, $workflow = '' ) { + + $option = ''; + + if ( ! empty( $all_workflows ) ) { + + foreach ( $all_workflows as $key => $value ) { + + if ( $key == $workflow ) { + + $option .= ''; + } else { + + $option .= ''; + } + } + } + + return $option; + } + + + + /** + * Get selected customer action. + * + * @since 1.0.0 + * @param string $action key to be make selected. + */ + public static function hubwoo_get_selected_customer_action( $action = '' ) { + + $actions_for_workflows = self::hubwoo_customer_actions_for_workflows(); + + $option = ''; + + if ( ! empty( $actions_for_workflows ) ) { + + foreach ( $actions_for_workflows as $key => $value ) { + + if ( $key == $action ) { + + $option .= ''; + } else { + + $option .= ''; + } + } + } + + return $option; + } + + /** + * Get array of customer activity actions. + * + * @since 1.0.0 + */ + public static function hubwoo_customer_actions_for_workflows() { + + $actions = array(); + + $actions['user_register'] = esc_html__( 'New User Registration', 'makewebbetter-hubspot-for-woocommerce' ); + + return apply_filters( 'hubwoo_customer_actions_for_workflows', $actions ); + } + + /** + * Get array of order status transition actions. + * + * @since 1.0.0 + */ + public static function hubwoo_order_actions_for_workflows() { + + $actions = array(); + + $actions['woocommerce_order_status_completed'] = esc_html__( 'When order status changes to Completed', 'makewebbetter-hubspot-for-woocommerce' ); + $actions['woocommerce_order_status_processing'] = esc_html__( 'When order status changes to Processing', 'makewebbetter-hubspot-for-woocommerce' ); + $actions['woocommerce_order_status_failed'] = esc_html__( 'When order status changes to Failed', 'makewebbetter-hubspot-for-woocommerce' ); + $actions['woocommerce_order_status_on-hold'] = esc_html__( 'When order status changes to On-hold', 'makewebbetter-hubspot-for-woocommerce' ); + $actions['woocommerce_order_status_refunded'] = esc_html__( 'When order status changes to Refunded', 'makewebbetter-hubspot-for-woocommerce' ); + $actions['woocommerce_order_status_cancelled'] = esc_html__( 'When order status changes to Cancelled', 'makewebbetter-hubspot-for-woocommerce' ); + + return apply_filters( 'hubwoo_order_actions_for_workflows', $actions ); + } + + /** + * Get array of all static lists with id and name. + * + * @since 1.0.0 + */ + public static function hubwoo_get_all_static_lists_id_name() { + + $all_lists = array(); + + $all_lists = HubWooConnectionMananager::get_instance()->get_static_list(); + + return $all_lists; + } + + /** + * Get selected list. + * + * @since 1.0.0 + * @param array $all_lists array of all lists. + * @param string $list name of list. + */ + public static function hubwoo_get_selected_list( $all_lists, $list = '' ) { + + $option = ''; + + if ( ! empty( $all_lists ) ) { + + foreach ( $all_lists as $key => $value ) { + + if ( $key == $list ) { + + $option .= ''; + } else { + + $option .= ''; + } + } + } + + return $option; + } + + /** + * Get array of all user roles of WordPress. + * + * @since 1.0.0 + */ + public static function hubwoo_get_user_roles() { + + global $wp_roles; + + $exiting_user_roles = array(); + + $user_roles = ! empty( $wp_roles->role_names ) ? $wp_roles->role_names : array(); + + if ( is_array( $user_roles ) && count( $user_roles ) ) { + + foreach ( $user_roles as $role => $role_info ) { + + $role_label = ! empty( $role_info ) ? $role_info : $role; + + $exiting_user_roles[ $role ] = $role_label; + } + + $exiting_user_roles['guest_user'] = 'Guest User'; + } + + return $exiting_user_roles; + } + + /** + * Check whether subscriptions are active or not. + * + * @since 1.0.0 + * @return boolean true/false + */ + public static function hubwoo_subs_active() { + + $flag = false; + + if ( in_array( 'woocommerce-subscriptions/woocommerce-subscriptions.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { + + $flag = true; + } + + return $flag; + } + + /** + * Get full country name. + * + * @since 1.0.0 + * @param string $value country abbreviation. + */ + public static function map_country_by_abbr( $value ) { + + if ( ! empty( $value ) ) { + if ( class_exists( 'WC_Countries' ) ) { + $wc_countries = new WC_Countries(); + $countries = $wc_countries->__get( 'countries' ); + } + if ( ! empty( $countries ) ) { + foreach ( $countries as $abbr => $country_name ) { + if ( $value == $abbr ) { + $value = $country_name; + break; + } + } + } + } + return $value; + } + + /** + * Get full state name. + * + * @since 1.0.0 + * @param string $value abbrevarion for state. + * @param string $country name of country. + */ + public static function map_state_by_abbr( $value, $country ) { + + if ( ! empty( $value ) && ! empty( $country ) ) { + if ( class_exists( 'WC_Countries' ) ) { + $wc_countries = new WC_Countries(); + $states = $wc_countries->__get( 'states' ); + } + if ( ! empty( $states ) ) { + foreach ( $states as $country_abbr => $country_states ) { + if ( $country == $country_abbr ) { + foreach ( $country_states as $state_abbr => $state_name ) { + if ( $value == $state_abbr ) { + $value = $state_name; + break; + } + } + break; + } + } + } + } + return $value; + } + + /** + * Filter contact properties with the help of created properties. + * + * @since 1.0.0 + * @param array $properties list of contact properties. + */ + public function hubwoo_filter_contact_properties( $properties = array() ) { + + $filtered_properties = array(); + + $created_properties = array_map( + function( $property ) { + return str_replace( "'", '', $property ); + }, + get_option( 'hubwoo-properties-created', array() ) + ); + + if ( ! empty( $properties ) && count( $properties ) ) { + + foreach ( $properties as $single_property ) { + + if ( ! empty( $single_property['property'] ) ) { + + if ( in_array( $single_property['property'], $created_properties ) ) { + + $filtered_properties[] = $single_property; + } + } + } + } + + return $filtered_properties; + } + + /** + * Returning saved access token. + * + * @since 1.0.0 + */ + public static function hubwoo_get_access_token() { + + if ( self::is_valid_client_ids_stored() ) { + + if ( self::is_access_token_expired() ) { + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + } + } + + return get_option( 'hubwoo_pro_access_token', false ); + } + + /** + * Get auth url. + * + * @since 1.0.0 + */ + public static function hubwoo_get_auth_url() { + + $url = 'https://app.hubspot.com/oauth/authorize'; + + $hapikey = HUBWOO_CLIENT_ID; + + $hubspot_url = add_query_arg( + array( + 'response_type' => 'code', + 'state' => urlencode( self::get_oauth_state() ), + 'client_id' => $hapikey, + 'optional_scope' => 'automation%20files%20timeline%20content%20forms%20integration-sync%20e-commerce%20crm.objects.custom.read%20crm.objects.custom.write', + 'scope' => 'oauth%20crm.objects.owners.read%20crm.objects.contacts.write%20crm.objects.companies.write%20crm.lists.write%20crm.objects.companies.read%20crm.lists.read%20crm.objects.deals.read%20crm.objects.deals.write%20crm.objects.contacts.read%20crm.schemas.companies.write%20crm.schemas.contacts.write%20crm.schemas.deals.read%20crm.schemas.deals.write%20crm.schemas.contacts.read%20crm.schemas.companies.read', + 'redirect_uri' => 'https://auth.makewebbetter.com/integration/hubspot-auth/', + ), + $url + ); + + return $hubspot_url; + } + + /** + * Get oauth state with current instance redirect url. + * + * @since 1.4.4 + * @return string State. + */ + public static function get_oauth_state( ) { + + $nonce = wp_create_nonce( 'hubwoo_security' ); + + $admin_redirect_url = admin_url(); + $args = array( + 'mwb_nonce' => $nonce, + 'mwb_source' => 'hubspot', + ); + $admin_redirect_url = add_query_arg( $args, $admin_redirect_url ); + return $admin_redirect_url; + } + + /** + * Get selected deal stage by order key. + * + * @since 1.0.0 + * @param string $order_key order key. + */ + public static function get_selected_deal_stage( $order_key ) { + + $deal_stage = array(); + if ( ! empty( $order_key ) ) { + $saved_mapping = get_option( 'hubwoo_ecomm_final_mapping', array() ); + if ( ! empty( $saved_mapping ) ) { + foreach ( $saved_mapping as $single_mapping ) { + if ( $order_key == $single_mapping['status'] ) { + $deal_stage = $single_mapping['deal_stage']; + break; + } + } + } + } + return $deal_stage; + } + + /** + * Get contact sync status. + * + * @since 1.0.0 + */ + public static function get_sync_status() { + + $sync_status['current'] = get_option( 'hubwoo_deals_current_sync_count', 0 ); + $sync_status['total'] = get_option( 'hubwoo_deals_current_sync_total', 0 ); + $sync_status['eta_deals_sync'] = ''; + + if ( $sync_status['total'] ) { + $perc = round( ( $sync_status['current'] / $sync_status['total'] ) * 100 ); + $sync_status['deals_progress'] = $perc > 100 ? 99 : $perc; + $sync_status['eta_deals_sync'] = self::hubwoo_create_sync_eta( $sync_status['current'], $sync_status['total'], 5, 5 ); + } + + if ( ( $sync_status['current'] == $sync_status['total'] ) || ( $sync_status['current'] > $sync_status['total'] ) ) { + self::hubwoo_stop_sync( 'stop-deal' ); + } + return $sync_status; + } + + /** + * Get contact sync status. + * + * @since 1.0.0 + * @param string $query_action which query to run. + * @return array|string query result. + */ + public static function hubwoo_make_db_query( $query_action ) { + + global $wpdb; + + switch ( $query_action ) { + case 'total_products_to_sync': + return $wpdb->get_results( "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_type IN ( 'product', 'product_variation' ) AND ID NOT IN (SELECT post_parent FROM {$wpdb->posts} WHERE post_type IN ( 'product', 'product_variation' ) ) AND post_status IN ( 'publish', 'draft' )" ); + case 'total_synced_products': + return $wpdb->get_results( "SELECT COUNT(post_id) FROM {$wpdb->postmeta} WHERE meta_key LIKE 'hubwoo_ecomm_pro_id'" ); + case 'total_synced_deals': + return $wpdb->get_results( "SELECT COUNT(post_id) FROM {$wpdb->postmeta} WHERE meta_key LIKE 'hubwoo_ecomm_deal_created'" ); + case 'total_synced_contacts': + return $wpdb->get_results( "SELECT COUNT(user_id) FROM {$wpdb->usermeta} WHERE meta_key = 'hubwoo_pro_user_data_change' AND meta_value = 'synced'" ); + case 'total_synced_guest_contacts': + return $wpdb->get_results( "SELECT COUNT(post_id) FROM {$wpdb->postmeta} WHERE meta_key = 'hubwoo_pro_guest_order' AND meta_value = 'synced'" ); + default: + return ''; + } + } + + /** + * Get contact sync status. + * + * @since 1.0.0 + */ + public static function get_deals_presenter() { + + $synced_products = 0; + $percentage_done = 0; + $display_data = array(); + $total_products = get_option( 'hubwoo_products_to_sync', 0 ); + + if ( 0 == $total_products ) { + $result = self::hubwoo_make_db_query( 'total_products_to_sync' ); + if ( ! empty( $result ) ) { + $result = (array) $result[0]; + $total_products = $result['COUNT(ID)']; + update_option( 'hubwoo_products_to_sync', $total_products ); + } + } + $display_data['total_products'] = $total_products; + + if ( 'yes' == get_option( 'hubwoo_ecomm_setup_completed', 'no' ) ) { + $display_data['view_all'] = 'block'; + $display_data['view_mapping'] = 'none'; + $display_data['view_button'] = 'inline-block'; + } else { + $display_data['view_mapping'] = 'block'; + $display_data['view_all'] = 'none'; + $display_data['view_button'] = 'none'; + $display_data['p_run_sync'] = 'block'; + } + + $display_data['is_psync_running'] = 'no'; + if ( 'yes' == get_option( 'hubwoo_start_product_sync', 'no' ) ) { + + $display_data['p_run_sync'] = 'block'; + $display_data['is_psync_running'] = 'yes'; + $display_data['view_btn_mapping'] = 'none'; + $display_data['h_sync'] = 'none'; + $display_data['heading'] = 'eCommerce Pipeline setup is now running, please wait.'; + $sync_result = self::hubwoo_make_db_query( 'total_synced_products' ); + + if ( ! empty( $sync_result ) ) { + $sync_result = (array) $sync_result[0]; + $synced_products = $sync_result['COUNT(post_id)']; + } + if ( 0 != $total_products ) { + $percentage_done = round( $synced_products * 100 / $total_products ); + $percentage_done = $percentage_done > 100 ? 99 : $percentage_done; + } + + $display_data['eta_product_sync'] = self::hubwoo_create_sync_eta( $synced_products, $total_products, 3, 5 ); + $display_data['percentage_done'] = $percentage_done; + if ( 100 == $percentage_done ) { + self::hubwoo_stop_sync( 'stop-product-sync' ); + } + } else { + $display_data['heading'] = 'Connect with eCommerce Pipeline'; + $display_data['h_sync'] = 'block'; + $display_data['p_run_sync'] = 'none'; + } + + $display_data['is_dsync'] = 'no'; + if ( 1 == get_option( 'hubwoo_deals_sync_running', 0 ) ) { + $display_data['is_dsync'] = 'yes'; + $display_data['message'] = 'block'; + $display_data['button'] = 'none'; + $display_data['btn_data'] = 'stop-deal'; + $display_data['btn_text'] = 'Stop Sync'; + } else { + $display_data['btn_text'] = 'Start Sync'; + $display_data['btn_data'] = 'start-deal'; + $display_data['message'] = 'none'; + $display_data['button'] = 'inline-block'; + } + + $scopes = get_option( 'hubwoo_pro_account_scopes', array() ); + + $display_data['scope_notice'] = 'none'; + if ( ! in_array( 'integration-sync', $scopes ) ) { + $display_data['scope_notice'] = 'block'; + } + + return $display_data; + } + + /** + * Get all deal stages + * + * @since 1.0.0 + * @param bool $update true/false. + */ + public static function get_all_deal_stages( $update = false ) { + + $deal_stages = get_option( 'hubwoo_fetched_deal_stages', '' ); + $pipeline_id = get_option( 'hubwoo_ecomm_pipeline_id', '' ); + if ( empty( $deal_stages ) || $update || empty( $pipeline_id ) ) { + + $deal_stages = self::fetch_deal_stages_from_pipeline(); + if ( ! empty( $deal_stages ) ) { + update_option( 'hubwoo_fetched_deal_stages', $deal_stages ); + } + } + return $deal_stages; + } + + /** + * Get deal stages from sales pipeline. + * + * @since 1.0.0 + * @param string $pipeline_label name of pipeline ( default Ecommerce Pipline). + * @param bool $only_stages return only stages (default true). + */ + public static function fetch_deal_stages_from_pipeline( $pipeline_label = 'Ecommerce Pipeline', $only_stages = true ) { + + $all_deal_pipelines = HubWooConnectionMananager::get_instance()->fetch_all_deal_pipelines(); + $fetched_pipeline = array(); + if ( ! empty( $all_deal_pipelines['results'] ) ) { + update_option( 'hubwoo_potal_pipelines', $all_deal_pipelines['results'] ); + array_map( + function( $single_pipeline ) use ( $pipeline_label, &$fetched_pipeline, $only_stages ) { + + if ( $single_pipeline['label'] == $pipeline_label ) { + + $fetched_pipeline = $only_stages ? $single_pipeline['stages'] : $single_pipeline; + + $pipeline_id = $single_pipeline['id']; + update_option( 'hubwoo_ecomm_pipeline_id', $pipeline_id ); + + self::update_deal_stages_mapping( $fetched_pipeline ); + } + }, + $all_deal_pipelines['results'] + ); + } + + if ( empty( $fetched_pipeline ) ) { + + $create_pipeline = array( + 'label' => 'Ecommerce Pipeline', + 'displayOrder' => 0, + 'stages' => self::get_ecomm_deal_stages(), + ); + + $flag = true; + if ( self::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $response = HubWooConnectionMananager::get_instance()->create_deal_pipeline( $create_pipeline ); + if ( 201 == $response['status_code'] ) { + $all_deal_pipelines = HubWooConnectionMananager::get_instance()->fetch_all_deal_pipelines(); + array_map( + function( $single_pipeline ) use ( $pipeline_label, &$fetched_pipeline, $only_stages ) { + + if ( $single_pipeline['label'] == $pipeline_label ) { + + $fetched_pipeline = $only_stages ? $single_pipeline['stages'] : $single_pipeline; + $pipeline_id = $single_pipeline['id']; + update_option( 'hubwoo_ecomm_pipeline_id', $pipeline_id ); + } + }, + $all_deal_pipelines['results'] + ); + + self::update_deal_stages_mapping( $fetched_pipeline ); + } + } + } + + return $fetched_pipeline; + } + + /** + * Get deal stages from sales pipeline. + * + * @since 1.4.0 + * @param string $fetched_pipeline array of deal stages. + */ + public static function update_deal_stages_mapping( $fetched_pipeline = array() ) { + + if ( empty( $fetched_pipeline ) ) { + return; + } + + $mapping_with_new_stages = array(); + + foreach ( $fetched_pipeline as $single_pipeline ) { + $label = isset( $single_pipeline['label'] ) ? $single_pipeline['label'] : ''; + switch ( $label ) { + case 'Checkout Abandoned': + $mapping_with_new_stages['checkout_abandoned'] = $single_pipeline['id']; + break; + case 'Payment Pending/Failed': + $mapping_with_new_stages['checkout_pending'] = $single_pipeline['id']; + break; + case 'On hold': + $mapping_with_new_stages['checkout_completed'] = $single_pipeline['id']; + break; + case 'Processing': + $mapping_with_new_stages['processed'] = $single_pipeline['id']; + break; + case 'Completed': + $mapping_with_new_stages['shipped'] = $single_pipeline['id']; + break; + case 'Refunded/Cancelled': + $mapping_with_new_stages['cancelled'] = $single_pipeline['id']; + break; + } + } + update_option( 'hubwoo_ecomm_pipeline_created', 'yes' ); + update_option( 'hubwoo_ecomm_deal_stage_ids', $mapping_with_new_stages ); + update_option( 'hubwoo_ecomm_final_mapping', self::hubwoo_deals_mapping() ); + } + + /** + * Fetch Ecomm pipeline deal stages. + * + * @since 1.4.0 + * @return array formatted array with get request. + */ + public static function get_ecomm_deal_stages() { + return array( + array( + 'label' => 'Checkout Abandoned', + 'displayOrder' => 0, + 'metadata' => array( + 'isClosed' => false, + 'probability' => 0.1, + ), + ), + array( + 'label' => 'Payment Pending/Failed', + 'displayOrder' => 1, + 'metadata' => array( + 'isClosed' => false, + 'probability' => 0.2, + ), + ), + array( + 'label' => 'On hold', + 'displayOrder' => 2, + 'metadata' => array( + 'isClosed' => false, + 'probability' => 0.6, + ), + ), + array( + 'label' => 'Processing', + 'displayOrder' => 3, + 'metadata' => array( + 'isClosed' => true, + 'probability' => 1.0, + ), + ), + array( + 'label' => 'Completed', + 'displayOrder' => 4, + 'metadata' => array( + 'isClosed' => true, + 'probability' => 1.0, + ), + ), + array( + 'label' => 'Refunded/Cancelled', + 'displayOrder' => 5, + 'metadata' => array( + 'isClosed' => true, + 'probability' => 0.0, + ), + ), + + ); + } + + /** + * Stop deals sync. + * + * @since 1.0.0 + * @param string $type stop a specific task. + * @return void + */ + public static function hubwoo_stop_sync( $type ) { + + if ( 'stop-contact' == $type ) { + + update_option( 'hubwoo_ocs_data_synced', true ); + delete_option( 'hubwoo_background_process_running' ); + delete_option( 'hubwoo_total_ocs_need_sync' ); + as_unschedule_action( 'hubwoo_contacts_sync_background' ); + + } elseif ( 'stop-deal' == $type ) { + + delete_option( 'hubwoo_deals_sync_total' ); + delete_option( 'hubwoo_deals_sync_running' ); + delete_option( 'hubwoo_deals_current_sync_count' ); + as_unschedule_action( 'hubwoo_deals_sync_background' ); + } elseif ( 'stop-product-sync' ) { + update_option( 'hubwoo_ecomm_setup_completed', 'yes' ); + delete_option( 'hubwoo_start_product_sync' ); + delete_option( 'hubwoo_products_to_sync' ); + as_unschedule_action( 'hubwoo_products_sync_background' ); + as_unschedule_action( 'hubwoo_products_status_background' ); + } + } + + /** + * Get the eCommerce Store Data. + * + * @since 1.0.0 + * @return array store data . + */ + public static function get_store_data() { + + $blog_name = get_bloginfo( 'name' ); + $blog_id = preg_replace( '/[^a-zA-Z0-9]/', '', $blog_name ); + $store = array( + 'id' => $blog_id . '-' . get_current_blog_id(), + 'label' => $blog_name, + 'adminUri' => get_admin_url(), + ); + return $store; + } + + /** + * Stop deals sync. + * + * @since 1.0.0 + * @param int $number_of_products number of products to prepare. + * @return array products info as eCommerce products. + */ + public static function hubwoo_get_product_data( $number_of_products = 5 ) { + + $contraints = array( + array( + 'key' => 'hubwoo_ecomm_pro_id', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => 'hubwoo_ecomm_invalid_pro', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => 'hubwoo_product_synced', + 'compare' => 'NOT EXISTS', + ), + 'relation' => 'AND', + ); + + $products = self::hubwoo_ecomm_get_products( $number_of_products, $contraints ); + + $products_info = array(); + + if ( is_array( $products ) && count( $products ) ) { + + $object_type = 'PRODUCT'; + + foreach ( $products as $product_id ) { + + if ( ! empty( $product_id ) ) { + + $product = wc_get_product( $product_id ); + $product_type = $product->get_type(); + + if ( 'variable' == $product_type && ( ! empty( $product_type ) ) || 'variable-subscription' == $product_type || null == $product_type ) { + update_post_meta( $product_id, 'hubwoo_ecomm_invalid_pro', 'yes' ); + continue; + } else { + + $hubwoo_ecomm_product = new HubwooEcommObject( $product_id, $object_type ); + $properties = $hubwoo_ecomm_product->get_object_properties(); + $properties = apply_filters( 'hubwoo_map_ecomm_' . $object_type . '_properties', $properties, $product_id ); + $properties['description'] = isset( $properties['pr_description'] ) ? $properties['pr_description'] : ''; + + unset( $properties['pr_description'] ); + $products_info[ $product_id ] = array( + 'properties' => $properties, + ); + } + } + } + } + return $products_info; + } + + /** + * Retrieve all of the products. + * + * @since 1.0.0 + * @param int $post_per_page number of products to prepare. + * @param array $constraints meta query constraints. + * @return array products ids. + */ + public static function hubwoo_ecomm_get_products( $post_per_page = 10, $constraints = array() ) { + + $response = array( + 'status_code' => 400, + 'reponse' => 'No Products Found', + ); + $query = new WP_Query(); + $request = array( + 'post_type' => array( 'product', 'product_variation' ), + 'posts_per_page' => $post_per_page, + 'post_status' => array( 'publish', 'draft' ), + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + ); + + if ( ! empty( $constraints ) ) { + if ( isset( $constraints['relation'] ) ) { + $request['meta_query']['relation'] = array_pop( $constraints ); + } + $request['meta_query'] = array_merge( $constraints ); + } + + $response = $query->query( $request ); + return $response; + } + + /** + * Update the eCommerce pipeline deal stages + * with WooCommerce Deal stages and probability. + * + * @since 1.0.0 + * @return array deal stage data. + */ + public static function hubwoo_deal_stage_model() { + return array( + 'checkout_abandoned' => array( + 'label' => esc_html__( 'Checkout Abandoned', 'makewebbetter-hubspot-for-woocommerce' ), + 'metadata' => array( + 'isClosed' => false, + 'probability' => 0.1, + ), + ), + 'checkout_pending' => array( + 'label' => esc_html__( 'Payment Pending/Failed', 'makewebbetter-hubspot-for-woocommerce' ), + 'metadata' => array( + 'isClosed' => false, + 'probability' => 0.2, + ), + ), + 'checkout_completed' => array( + 'label' => esc_html__( 'On hold', 'makewebbetter-hubspot-for-woocommerce' ), + 'metadata' => array( + 'isClosed' => false, + 'probability' => 0.6, + ), + ), + 'processed' => array( + 'label' => esc_html__( 'Processing', 'makewebbetter-hubspot-for-woocommerce' ), + 'metadata' => array( + 'isClosed' => true, + 'probability' => 1, + ), + ), + 'shipped' => array( + 'label' => esc_html__( 'Completed', 'makewebbetter-hubspot-for-woocommerce' ), + 'metadata' => array( + 'isClosed' => true, + 'probability' => 1, + ), + ), + 'cancelled' => array( + 'label' => esc_html__( 'Refunded/Cancelled', 'makewebbetter-hubspot-for-woocommerce' ), + 'metadata' => array( + 'isClosed' => true, + 'probability' => 0, + ), + ), + ); + } + + /** + * Get the default model of order status and deal stage. + * + * @since 1.0.0 + * @return array mapped deal stage and order status. + */ + public static function hubwoo_deals_mapping() { + + $mapping = array(); + + $default_dealstages = array( + 'wc-pending' => 'checkout_pending', + 'wc-processing' => 'processed', + 'wc-on-hold' => 'checkout_completed', + 'wc-completed' => 'shipped', + 'wc-cancelled' => 'cancelled', + 'wc-refunded' => 'cancelled', + 'wc-failed' => 'checkout_pending', + ); + + if ( 'yes' == get_option( 'hubwoo_ecomm_pipeline_created', 'no' ) ) { + $new_stages = get_option( 'hubwoo_ecomm_deal_stage_ids', true ); + foreach ( $default_dealstages as $key => $value ) { + $new_stage_value = isset( $new_stages[ $value ] ) ? $new_stages[ $value ] : ''; + $default_dealstages[ $key ] = $new_stage_value; + } + } + + $mapping = array_map( + function( $order_status ) use ( $default_dealstages ) { + $mapped_data['status'] = $order_status; + if ( array_key_exists( $order_status, $default_dealstages ) ) { + $mapped_data['deal_stage'] = $default_dealstages[ $order_status ]; + } else { + $mapped_data['deal_stage'] = 'checkout_completed'; + } + return $mapped_data; + }, + array_keys( wc_get_order_statuses() ) + ); + return $mapping; + } + + /** + * Get the default model of order status and deal stage. + * + * @since 1.0.0 + * @return array mapped deal stage and order status. + */ + public static function hubwoo_sales_deals_mapping() { + $default_dealstages = array( + 'wc-pending' => 'appointmentscheduled', + 'wc-processing' => 'contractsent', + 'wc-on-hold' => 'presentationscheduled', + 'wc-completed' => 'closedwon', + 'wc-cancelled' => 'closedlost', + 'wc-refunded' => 'closedlost', + 'wc-failed' => 'appointmentscheduled', + ); + + update_option( 'hubwoo_ecomm_pipeline_created', 'yes' ); + $mapping = array_map( + function( $order_status ) use ( $default_dealstages ) { + $mapped_data['status'] = $order_status; + if ( array_key_exists( $order_status, $default_dealstages ) ) { + $mapped_data['deal_stage'] = $default_dealstages[ $order_status ]; + } else { + $mapped_data['deal_stage'] = 'presentationscheduled'; + } + return $mapped_data; + }, + array_keys( wc_get_order_statuses() ) + ); + + return $mapping; + } + + /** + * Setup the overview section of the dashboard. + * + * @since 1.0.0 + * @param bool $install_plugin default ( false ). + * @return array|void $display_data display data for the HS plugin. + */ + public function hubwoo_setup_overview( $install_plugin = false ) { + + global $hubwoo; + + if ( 'no' == get_option( 'hubwoo_checkout_form_created', 'no' ) ) { + $form_data = self::form_data_model( HubwooConst::CHECKOUTFORM ); + $flag = true; + if ( self::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + $res = HubWooConnectionMananager::get_instance()->create_form_data( $form_data ); + if ( 200 == $res['status_code'] ) { + update_option( 'hubwoo_checkout_form_created', 'yes' ); + $res = json_decode( $res['body'], true ); + if ( isset( $res['guid'] ) ) { + update_option( 'hubwoo_checkout_form_id', $res['guid'] ); + } + } else { + HubwooErrorHandling::get_instance()->hubwoo_handle_response( $res, HubwooConst::CHECKOUTFORM ); + } + } + } + + if ( $install_plugin ) { + + WC_Install::background_installer( + 'leadin', + array( + 'name' => esc_html__( 'HubSpot All-In-One Marketing - Forms, Popups, Live Chat', 'makewebbetter-hubspot-for-woocommerce' ), + 'repo-slug' => 'leadin', + ) + ); + ?> + + setTimestamp( $last_sync ); + $display_data['last_sync'] = 'Last Sync: ' . date_format( $date, 'jS F Y \a\t g:ia ' ); + } + //hpos changes + if( self::hubwoo_check_hpos_active() ) { + $query = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'post_parent' => 0, + 'meta_key' => 'hubwoo_ecomm_deal_created', + 'meta_compare' => 'NOT EXISTS', + )); + + $customer_orders = $query->get_orders(); + } else { + + $query = new WP_Query(); + + $customer_orders = $query->query( + array( + 'post_type' => 'shop_order', + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => 'hubwoo_ecomm_deal_created', + 'compare' => 'NOT EXISTS', + ), + ), + ) + ); + } + + $display_data['deals_left'] = empty( $customer_orders ) ? 'Sync completed' : count( $customer_orders ) . ' waiting to sync'; + + $roles = get_option( 'hubwoo_customers_role_settings', array() ); + + if ( empty( $roles ) ) { + + $roles = array_keys( $hubwoo->hubwoo_get_user_roles() ); + } + + $guest_key = array_search( 'guest_user', $roles ); + + if ( false !== $guest_key ) { + unset( $roles[ $guest_key ] ); + } + + $args['meta_query'] = array( + array( + 'key' => 'hubwoo_pro_user_data_change', + 'compare' => 'NOT EXISTS', + ), + ); + $args['role__in'] = $roles; + $args['number'] = -1; + $args['fields'] = 'ID'; + + $users = get_users( $args ); + + $display_data['contacts_left'] = empty( $users ) ? 'Sync completed' : count( $users ) . ' waiting to sync'; + + //hpos changes + if( self::hubwoo_check_hpos_active() ) { + $synced_orders = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_key' => 'hubwoo_ecomm_deal_created', + 'meta_compare' => 'EXISTS', + )); + + $total_order_synced = $synced_orders->get_orders(); + + $object_data['deal'][] = strval(count($total_order_synced)); + } else { + $object_data['deal'] = self::hubwoo_make_db_query( 'total_synced_deals' ); + } + + $object_data['reg_users'] = self::hubwoo_make_db_query( 'total_synced_contacts' ); + $object_data['guest_users'] = self::hubwoo_make_db_query( 'total_synced_guest_contacts' ); + $object_data['product'] = self::hubwoo_make_db_query( 'total_synced_products' ); + $object_data['total_products'] = self::hubwoo_make_db_query( 'total_products_to_sync' ); + + array_walk( + $object_data, + function( $data, $type ) use ( &$display_data ) { + if ( ! empty( $data ) ) { + $data = (array) $data[0]; + $data = array_pop( $data ); + $display_data[ $type ] = ! empty( $data ) ? $data : 0; + } + } + ); + $display_data['products_left'] = intval( $display_data['total_products'] ) - intval( $display_data['product'] ); + $display_data['products_left'] = $display_data['products_left'] > 0 ? $display_data['products_left'] . ' waiting to sync' : 'Sync completed'; + return $display_data; + } + + /** + * Create an ETA for the current running sync. + * + * @since 1.0.0 + * @param int $current current sync count. + * @param int $total total sync count. + * @param int $timer scheduled timer. + * @param int $limiter limiter of the sync. + * @return string $eta_string returns the calculated eta string. + */ + public static function hubwoo_create_sync_eta( $current, $total, $timer, $limiter ) { + $eta_string = ''; + $left_items_timer = round( ( $total - $current ) / $limiter ) * $timer; + + if ( $left_items_timer > 90 ) { + $float_timer = number_format( ( $left_items_timer / 60 ), 2 ); + $hours = intval( $float_timer ); + $minutes = round( ( $float_timer - $hours ) * 0.6 ); + $eta_string = "{$hours} hours and {$minutes} minutes "; + } elseif ( 0 == $left_items_timer ) { + $eta_string = 'less than a minute'; + } else { + $eta_string = "{$left_items_timer} minutes"; + } + return $eta_string; + } + + /** + * Handle the Contact sync for failed cases. + * + * @since 1.0.0 + * @param array $response response from HubSpot. + * @param array $contact_data prepared contact data. + * @param array $args data and type of sync object. + * @return void. + */ + public static function hubwoo_handle_contact_sync( $response, &$contact_data, $args = array() ) { + + $response = json_decode( $response['body'], true ); + + if ( ! empty( $response['invalidEmails'] ) ) { + + $failed_indexes = array_column( $response['failureMessages'], 'index' ); + + if ( ! empty( $failed_indexes ) ) { + + array_walk( + $failed_indexes, + function( $index ) use ( &$contact_data ) { + unset( $contact_data[ $index ] ); + } + ); + + $contact_data = array_values( $contact_data ); + + HubWooConnectionMananager::get_instance()->create_or_update_contacts( $contact_data, $args ); + } + } else { + Hubwoo_Admin::hubwoo_split_contact_batch( $contact_data ); + } + } + + /** + * Handle the Contact sync for failed cases. + * + * @since 1.0.0 + * @param array $ids object ids to be marked. + * @param string $type type of object id. + * @return void. + */ + public static function hubwoo_marked_sync( $ids, $type ) { + + if ( ! empty( $ids ) ) { + + $emails = ''; + $user_data = array(); + + $method_calls['user'] = array( + 'get' => 'get_user_meta', + 'update' => 'update_user_meta', + 'get_key' => 'billing_email', + 'update_key' => 'hubwoo_pro_user_data_change', + ); + $method_calls['order'] = array( + 'get' => 'get_post_meta', + 'update' => 'update_post_meta', + 'get_key' => '_billing_email', + 'update_key' => 'hubwoo_pro_guest_order', + ); + $unsynced_ids = array_filter( + $ids, + function( $id ) use ( &$method_calls, &$type ) { + return empty( $method_calls[ $type ]['get']( $id, 'hubwoo_user_vid', true ) ); + } + ); + + if ( empty( $unsynced_ids ) && 'user' == $type ) { + foreach ( $ids as $id ) { + $method_calls[ $type ]['update']( $id, $method_calls[ $type ]['update_key'], 'synced' ); + } + return; + } + + switch ( $type ) { + case 'user': + foreach ( $unsynced_ids as $id ) { + $user = get_user_by( 'id', $id ); + $usr_email = $user->data->user_email; + if ( ! empty( $usr_email ) ) { + $usr_email = strtolower( $usr_email ); + $user_data[ $usr_email ] = $id; + $emails .= 'email=' . $usr_email . '&'; + } + } + break; + case 'order': + foreach ( $unsynced_ids as $id ) { + $usr_email = $method_calls[ $type ]['get']( $id, $method_calls[ $type ]['get_key'], true ); + if ( ! empty( $usr_email ) ) { + $usr_email = strtolower( $usr_email ); + $user_data[ $usr_email ] = $id; + $emails .= 'email=' . $usr_email . '&'; + } + } + break; + default: + return; + } + + $response = HubWooConnectionMananager::get_instance()->hubwoo_get_batch_vids( $emails ); + + if ( 200 == $response['status_code'] && ! empty( $response['body'] ) ) { + $users = json_decode( $response['body'], true ); + if ( 0 == count( $users ) ) { + return; } + + foreach ( $users as $vid => $data ) { + if ( ! empty( $data['properties']['email'] ) ) { + if ( array_key_exists( $data['properties']['email']['value'], $user_data ) ) { + $method_calls[ $type ]['update']( $user_data[ $data['properties']['email']['value'] ], 'hubwoo_user_vid', $vid ); + $method_calls[ $type ]['update']( $user_data[ $data['properties']['email']['value'] ], $method_calls[ $type ]['update_key'], 'synced' ); + } + } + } + } + } + } + + /** + * Displays Cron status. + * + * @since 1.0.0 + * @return array. + */ + public static function hubwoo_cron_status() { + + $cron_status = array( + 'status' => true, + 'type' => 'Cron Events are working fine on your website.', + ); + + if ( ! as_next_scheduled_action( 'hubwoo_cron_schedule' ) ) { + as_schedule_recurring_action( time(), 300, 'hubwoo_cron_schedule' ); + } + + if ( ! as_next_scheduled_action( 'hubwoo_deals_sync_check' ) ) { + as_schedule_recurring_action( time(), 300, 'hubwoo_deals_sync_check' ); + } + + if ( ! as_next_scheduled_action( 'hubwoo_ecomm_deal_update' ) ) { + as_schedule_recurring_action( time(), 300, 'hubwoo_ecomm_deal_update' ); + } + + if ( ! as_next_scheduled_action( 'hubwoo_products_sync_check' ) ) { + as_schedule_recurring_action( time(), 300, 'hubwoo_products_sync_check' ); + } + + if ( ! as_next_scheduled_action( 'hubwoo_check_logs' ) ) { + as_schedule_recurring_action( time(), 86400, 'hubwoo_check_logs' ); + } + + if ( ! as_next_scheduled_action( 'huwoo_abncart_clear_old_cart' ) ) { + as_schedule_recurring_action( time(), 86400, 'huwoo_abncart_clear_old_cart' ); + } + + if ( ! as_next_scheduled_action( 'hubwoo_cron_schedule' ) || ! as_next_scheduled_action( 'hubwoo_deals_sync_check' ) || ! as_next_scheduled_action( 'hubwoo_ecomm_deal_update' ) ) { + $cron_status['status'] = false; + $cron_status['type'] = esc_html__( 'You are having issues with your MWB HubSpot for WooCommerce sync. Please read this doc on how to fix your integration.', 'makewebbetter-hubspot-for-woocommerce' ); + } + + return $cron_status; + } + + /** + * Onboarding questionaire Model. + * + * @since 1.0.0 + * @return array. + */ + public static function hubwoo_onboarding_questionaire() { + + return array( + 'mwb_hs_familarity' => array( + 'allow' => '', + 'label' => 'Which of these sounds most like your HubSpot ability?', + 'options' => array( + '', + 'I have never used a CRM before', + 'I\'m new to HubSpot, but I have used a CRM before', + 'I know my way around HubSpot pretty well', + ), + ), + 'mwb_woo_familarity' => array( + 'allow' => '', + 'label' => 'Which of these sounds most like your WooCommerce ability?', + 'options' => array( + '', + 'I have never used an e-Commerce platform before', + 'I\'m new to WooCommerce, but I have used an e-Commerce platform before', + 'I know my way around WooCommerce pretty well', + ), + ), + 'which_hubspot_packages_do_you_currently_use_' => array( + 'allow' => 'multiple', + 'label' => 'Which HubSpot plan you are using?', + 'options' => array( + 'I don’t currently use HubSpot', + 'HubSpot Free', + 'Marketing Starter', + 'Marketing Pro', + 'Marketing Enterprise', + 'Sales Starter', + 'Sales Pro', + 'Sales Enterprise', + 'Service Starter', + 'Service Pro', + 'Service Enterprise', + 'CMS Hub', + 'Other', + ), + ), + ); + } + + /** + * Form Model Data. + * + * @since 1.0.0 + * @param stgring $type type of form model. + * @return array. + */ + public static function form_data_model( $type ) { + switch ( $type ) { + case HubwooConst::CHECKOUTFORM: + return array( + array( + 'name' => HubwooConst::CHECKOUTFORMNAME, + 'submitText' => 'Submit', + 'formFieldGroups' => array( + array( + 'fields' => array( + array( + 'name' => 'firstname', + 'label' => 'First Name', + 'required' => false, + ), + array( + 'name' => 'lastname', + 'label' => 'Last Name', + 'required' => false, + ), + array( + 'name' => 'email', + 'label' => 'Email', + 'required' => false, + ), + ), + ), + ), + ), + ); + default: + return array(); + } + } + + /** + * Get contact sync status. + * + * @since 1.2.7 + * @return int $unique_users number of unique users. + */ + public static function hubwoo_get_total_contact_need_sync() { + + $unique_users = count( get_users() ); + + $order_args = array( + 'return' => 'ids', + 'limit' => -1, + 'type' => wc_get_order_types(), + 'status' => array_keys( wc_get_order_statuses() ), + 'customer' => 0, + ); + + $guest_orders = wc_get_orders( $order_args ); + $unique_users += count( $guest_orders ); + + return $unique_users; + } + + /** + * Currently CRM name. + * + * @param string $get The slug for crm we want to integrate with. + */ + public static function get_current_crm_name( $get = '' ) { + $slug = 'hubwoo'; + if ( 'slug' === $get ) { + return esc_html( ( $slug ) ); + } else { + return esc_html( ucwords( $slug ) ); + } + } + + /** + * Check if log is enable. + * + * @return boolean + */ + public static function is_log_enable() { + $enable = get_option( 'hubwoo_' . self::get_current_crm_name( 'slug' ) . '_enable_log', 'yes' ); + $enable = ( 'yes' === $enable ); + return $enable; + } + + /** + * Check if table exists. + * + * @param string $table_name Table name to be checked. + */ + public static function hubwoo_log_table_exists( $table_name ) { + global $wpdb; + + if ( $wpdb->get_var( $wpdb->prepare('show tables like %s', $wpdb->esc_like( $table_name ) ) ) === $table_name ) { + return 'exists'; + } else { + return false; + } + } + + /** + * Create log table in database. + * + * @param string $slug crm slug. + */ + public static function hubwoo_create_log_table( $slug = '' ) { + + global $wpdb; + $crm_log_table = $wpdb->prefix . 'hubwoo_log'; + + // If exists true. + if ( 'exists' === self::hubwoo_log_table_exists( $crm_log_table ) ) { + return; + } + + $crm_object = $slug . '_object'; + + global $wpdb; + $wpdb->get_results( $wpdb->prepare( + 'CREATE TABLE IF NOT EXISTS %1s ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `%1s` varchar(255) NOT NULL, + `event` varchar(255) NOT NULL, + `request` text NOT NULL, + `response` text NOT NULL, + `time` int(11) NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;', $crm_log_table, $crm_object ) ); + } + + /** + * Get CRM log data from database. + * + * @param string|boolean $search_value Search value. + * @param integer $limit Max limit of data. + * @param integer $offset Offest to start. + * @param boolean $all Return all results. + * @return array Array of data. + */ + public static function hubwoo_get_log_data( $search_value = false, $limit = 25, $offset = 0, $all = false ) { + + global $wpdb; + $table_name = $wpdb->prefix . 'hubwoo_log'; + $log_data = array(); + + if ( $all ) { + + $log_data = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM %1s ORDER BY `id` DESC', $table_name ), ARRAY_A ); // @codingStandardsIgnoreLine. + return $log_data; + + } + + if ( ! $search_value ) { + + $log_data = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM %1s ORDER BY `id` DESC LIMIT %d OFFSET %d ', $table_name, $limit, $offset ), ARRAY_A ); // @codingStandardsIgnoreLine. + return $log_data; + + } + + $log_data = $wpdb->get_results( $wpdb->prepare( 'SELECT * FROM %1s WHERE `hubwoo_object` = %s ORDER BY `id` DESC', $table_name, $search_value ), ARRAY_A ); // @codingStandardsIgnoreLine. + + return $log_data; + } + + /** + * Get total count from log table. + * + * @return integer Total count. + */ + public static function hubwoo_get_total_log_count() { + global $wpdb; + $table_name = $wpdb->prefix . 'hubwoo_log'; + + $count = $wpdb->get_results( $wpdb->prepare( 'SELECT COUNT(*) as `total_count` FROM %1s', $table_name ) ); // @codingStandardsIgnoreLine. + $count[0] = $count[0]->total_count; + return $count; + } + + /** + * Get deal group properties. + * + * @return array array of properties. + */ + public static function hubwoo_get_deal_properties() { + $update_properties = array( + array( + 'name' => 'discount_amount', + 'label' => __( 'Discount savings', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'groupName' => 'dealinformation', + ), + array( + 'name' => 'order_number', + 'label' => __( 'Order number', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + 'groupName' => 'dealinformation', + ), + array( + 'name' => 'shipment_ids', + 'label' => __( 'Shipment IDs', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + 'groupName' => 'dealinformation', + ), + array( + 'name' => 'tax_amount', + 'label' => __( 'Tax amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'groupName' => 'dealinformation', + ), + ); + + return $update_properties; + } + + /** + * Get product group properties. + * + * @return array array of properties. + */ + public static function hubwoo_get_product_properties() { + return array( + array( + 'name' => 'store_product_id', + 'label' => __( 'Store Product Id', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'groupName' => 'productinformation', + ), + array( + 'name' => 'product_source_store', + 'label' => __( 'Product Source Store', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + 'groupName' => 'productinformation', + ), + ); + } + + /** + * Associate deal with company. + * + * @param integer $contact Contact hubspot id. + * @param integer $deal_id Deal hubspot id. + */ + public static function hubwoo_associate_deal_company( $contact = '', $deal_id = '' ) { + + if ( ! empty( $contact ) && ! empty( $deal_id ) ) { + $contact_response = HubWooConnectionMananager::get_instance()->get_customer_vid_historical( $contact ); + if ( 200 == $contact_response['status_code'] ) { + $decoded_response = json_decode( $contact_response['body'] ); + $comp = $decoded_response->properties; + $comp_meta = ( isset( $comp->associatedcompanyid ) ) ? $comp->associatedcompanyid : ''; + $company_id = ( isset( $comp_meta->value ) ) ? $comp_meta->value : ''; + if ( ! empty( $company_id ) ) { + HubWooConnectionMananager::get_instance()->associate_object( 'deal', $deal_id, 'company', $company_id, 5 ); + + } + } + } + + } + + public static function hubwoo_check_hpos_active() { + if( 'yes' == get_option('woocommerce_custom_orders_table_enabled', 'no') && true == get_option( 'hubwoo_hpos_license_check', 0 ) ) { + return true; + } + + return false; + } + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconnectionmananager.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconnectionmananager.php new file mode 100644 index 00000000..418fc776 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconnectionmananager.php @@ -0,0 +1,2893 @@ + 'refresh_token', + 'client_id' => $hapikey, + 'client_secret' => $hseckey, + 'refresh_token' => $refresh_token, + 'redirect_uri' => $redirect_uri, + ); + + $body = http_build_query( $data ); + + return $this->hubwoo_oauth_post_api( $endpoint, $body, 'refresh' ); + } + + /** + * Fetching access token from code. + * + * @since 1.0.0 + * @param string $hapikey client id for app. + * @param string $hseckey secret id for app. + */ + public function hubwoo_fetch_access_token_from_code( $hapikey, $hseckey ) { + + if ( isset( $_GET['code'] ) ) { + $code = sanitize_key( $_GET['code'] ); + $endpoint = '/oauth/v1/token'; + $data = array( + 'grant_type' => 'authorization_code', + 'client_id' => $hapikey, + 'client_secret' => $hseckey, + 'code' => $code, + 'redirect_uri' => 'https://auth.makewebbetter.com/integration/hubspot-auth/', + ); + $body = http_build_query( $data ); + return $this->hubwoo_oauth_post_api( $endpoint, $body, 'access' ); + } + } + + /** + * Post api for oauth access and refresh token. + * + * @since 1.0.0 + * @param string $endpoint API endpoint to call. + * @param array $body formatted data to be sent in hubspot api request. + * @param string $action refresh/access. + */ + public function hubwoo_oauth_post_api( $endpoint, $body, $action ) { + + $headers = array( + 'Content-Type: application/x-www-form-urlencoded;charset=utf-8', + ); + + $response = wp_remote_post( + $this->base_url . $endpoint, + array( + 'body' => $body, + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + $parsed_response = array( + 'status_code' => 400, + 'response' => 'error', + ); + + if ( 200 === $status_code ) { + + $api_body = wp_remote_retrieve_body( $response ); + + if ( $api_body ) { + $api_body = json_decode( $api_body ); + } + + if ( ! empty( $api_body->refresh_token ) && ! empty( $api_body->access_token ) && ! empty( $api_body->expires_in ) ) { + + update_option( 'hubwoo_pro_access_token', $api_body->access_token ); + update_option( 'hubwoo_pro_refresh_token', $api_body->refresh_token ); + update_option( 'hubwoo_pro_token_expiry', time() + $api_body->expires_in ); + update_option( 'hubwoo_pro_valid_client_ids_stored', true ); + $message = esc_html__( 'Fetching and refreshing access token', 'makewebbetter-hubspot-for-woocommerce' ); + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $this->create_log( $message, $endpoint, $parsed_response, $action ); + + if ( 'access' === $action ) { + + $this->hubwoo_pro_get_access_token_info(); + } + + update_option( 'hubwoo_pro_send_suggestions', true ); + update_option( 'hubwoo_pro_oauth_success', true ); + return true; + } + } elseif ( 400 === $status_code ) { + $message = ! empty( $api_body['message'] ) ? $api_body['message'] : ''; + } elseif ( 403 === $status_code ) { + $message = esc_html__( 'You are forbidden to use this scope', 'makewebbetter-hubspot-for-woocommerce' ); + } else { + $message = esc_html__( 'Something went wrong.', 'makewebbetter-hubspot-for-woocommerce' ); + } + + update_option( 'hubwoo_pro_send_suggestions', false ); + update_option( 'hubwoo_pro_api_validation_error_message', $message ); + update_option( 'hubwoo_pro_valid_client_ids_stored', false ); + $this->create_log( $message, $endpoint, $parsed_response, 'access_token' ); + return false; + } + + + /** + * Fetch access token info for automation enabling. + * + * @since 1.0.0 + */ + public function hubwoo_pro_get_access_token_info() { + + $access_token = Hubwoo::hubwoo_get_access_token(); + $endpoint = '/oauth/v1/access-tokens/' . $access_token; + $headers = $this->get_token_headers(); + + $response = wp_remote_get( $this->base_url . $endpoint, array( 'headers' => $headers ) ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + if ( 200 === $status_code ) { + $api_body = wp_remote_retrieve_body( $response ); + if ( $api_body ) { + $api_body = json_decode( $api_body, true ); + } + if ( ! empty( $api_body['scopes'] ) ) { + update_option( 'hubwoo_pro_account_scopes', $api_body['scopes'] ); + } + } + + $message = esc_html__( 'Getting access token information', 'makewebbetter-hubspot-for-woocommerce' ); + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $this->create_log( $message, $endpoint, $parsed_response, 'access_token' ); + } + + /** + * Sending details of hubspot. + * + * @since 1.0.0 + */ + public function send_clients_details() { + + $send_status = get_option( 'hubwoo_pro_send_suggestions', false ); + + if ( $send_status ) { + + $url = '/owners/v2/owners'; + $headers = $this->get_token_headers(); + + $response = wp_remote_get( $this->base_url . $url, array( 'headers' => $headers ) ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + if ( 200 == $status_code ) { + + $api_body = wp_remote_retrieve_body( $response ); + + if ( $api_body ) { + $api_body = json_decode( $api_body ); + } + + $message = ''; + + if ( ! empty( $api_body ) ) { + + foreach ( $api_body as $single_row ) { + //phpcs:disable + $message = 'portalId: ' . $single_row->portalId . '
'; + $message .= 'ownerId: ' . $single_row->ownerId . '
'; + $message .= 'type: ' . $single_row->type . '
'; + $message .= 'firstName: ' . $single_row->firstName . '
'; + $message .= 'lastName: ' . $single_row->lastName . '
'; + $message .= 'email: ' . $single_row->email . '
'; + //phpcs:enable + break; + } + + $to = 'integrations@makewebbetter.com'; + $subject = 'HubSpot PRO Customers Details'; + $headers = array( 'Content-Type: text/html; charset=UTF-8' ); + $status = wp_mail( $to, $subject, $message, $headers ); + return $status; + } + } + } + return false; + } + + /** + * Get hubspot owner email. + * + * @since 1.0.0 + * @return int $portalId portal id for hubspot account. + */ + public function hubwoo_get_owners_info() { + + $url = '/account-info/v3/details'; + $headers = $this->get_token_headers(); + + $response = wp_remote_get( $this->base_url . $url, array( 'headers' => $headers ) ); + + $portal_id = ''; + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + if ( 200 === $status_code ) { + + $api_body = wp_remote_retrieve_body( $response ); + + if ( $api_body ) { + $api_body = json_decode( $api_body ); + } + //phpcs:disable + if ( ! empty( $api_body ) && isset( $api_body->portalId ) ) { + $portal_id = $api_body->portalId; + } + //phpcs:enable + } + + return $portal_id; + } + + /** + * Create group on hubspot. + * + * @since 1.0.0 + * @param array $group_details formatted data to create new group. + * @param array $object_type type of object. + * @return array $parsed_response formatted array with status code/response. + */ + public function create_group( $group_details, $object_type ) { + + if ( is_array( $group_details ) ) { + + if ( isset( $group_details['name'] ) && isset( $group_details['label'] ) ) { + + $url = '/crm/v3/properties/' . $object_type . '/groups'; + $headers = $this->get_token_headers(); + + $group_details = wp_json_encode( $group_details ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $group_details, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Creating ' . $object_type . ' Groups', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $this->create_log( $message, $url, $parsed_response, 'groups' ); + return $parsed_response; + } + } + } + + /** + * Read a property from HubSpot. + * + * @since 1.0.0 + * @param array $object_type Object name. + * @param array $property_name Property name. + * @return array $parsed_response Parsed Response. + */ + public function hubwoo_read_object_property( $object_type, $property_name ) { + + $url = '/crm/v3/properties/' . $object_type . '/' . $property_name; + $headers = $this->get_token_headers(); + $res_body = ''; + $response = wp_remote_get( $this->base_url . $url, array( 'headers' => $headers ) ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $message = __( 'Reading object property', 'makewebbetter-hubspot-for-woocommerce' ); + + $this->create_log( $message, $url, $parsed_response, 'properties' ); + + return $parsed_response; + } + + /** + * Create property on hubspot. + * + * @since 1.0.0 + * @param array $prop_details formatted data to create new property. + * @param array $object_type HubSpot Object type. + * @return array $parsed_response formatted array with status/message. + */ + public function create_property( $prop_details, $object_type ) { + + if ( is_array( $prop_details ) ) { + + if ( isset( $prop_details['name'] ) && isset( $prop_details['groupName'] ) ) { + + $url = '/crm/v3/properties/' . $object_type; + $headers = $this->get_token_headers(); + $res_body = ''; + $prop_details = wp_json_encode( $prop_details ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $prop_details, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Creating Properties', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $this->create_log( $message, $url, $parsed_response, 'properties' ); + return $parsed_response; + } + } + } + + /** + * Create Bulk Contact Property in HubSpot. + * + * @since 1.0.0 + * @param array $properties_data all of the hs properties. + * @param array $object_type HubSpot Object type. + * @return array $parsed_response formatted array with status/message. + */ + public function create_batch_properties( $properties_data, $object_type ) { + + $request_body['inputs'] = $properties_data; + $request_body['objectType'] = $object_type; + + if ( is_array( $request_body ) ) { + + $url = '/crm/v3/properties/' . $object_type . '/batch/create'; + $headers = $this->get_token_headers(); + $res_body = ''; + $request_body = wp_json_encode( $request_body ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $request_body, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Creating ' . $object_type . ' Batch Properties', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $this->create_log( $message, $url, $parsed_response, 'properties' ); + return $parsed_response; + } + } + + /** + * Update property on hubspot. + * + * @since 1.0.0 + * @param array $prop_details formatted data to update hubspot property. + * @param array $object_type HubSpot Object type. + * @return array $parsed_response formatted array with status/message. + */ + public function update_property( $prop_details, $object_type ) { + // check if in the form of array. + if ( is_array( $prop_details ) ) { + // check for name and groupName. + if ( isset( $prop_details['name'] ) && isset( $prop_details['groupName'] ) ) { + + // let's update. + $url = '/crm/v3/properties/' . $object_type . '/' . $prop_details['name']; + + $headers = $this->get_token_headers(); + $prop_details = wp_json_encode( $prop_details ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'method' => 'PUT', + 'headers' => $headers, + 'body' => $prop_details, + ) + ); + + $message = __( 'Updating Properties', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $this->create_log( $message, $url, $parsed_response, 'properties' ); + + return $parsed_response; + } + } + } + + /** + * Fetch batch properties on hubspot. + * + * @since 1.4.0 + * @param array $prop_data list of property name to be fetch. + * @param array $object_type HubSpot Object type. + * @return array $parsed_response formatted array with status/message. + */ + public function hubwoo_read_batch_object_properties( $prop_data, $object_type ) { + if ( is_array( $prop_data ) ) { + $url = '/crm/v3/properties/' . $object_type . '/batch/read'; + + $headers = $this->get_token_headers(); + $prop_data = wp_json_encode( $prop_data ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'headers' => $headers, + 'body' => $prop_data, + ) + ); + + $message = __( 'Fetch batch properties', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $this->create_log( $message, $url, $parsed_response, 'properties' ); + + return $parsed_response; + } + } + + /** + * Create a single contact on HS. + * + * @since 1.0.0 + * @param array $contact formatted data to create single contact on hubspot. + * @return array $parsed_response formatted array with status/message. + */ + public function create_single_contact( $contact ) { + + if ( is_array( $contact ) ) { + + $url = '/contacts/v1/contact'; + $headers = $this->get_token_headers(); + $contact = wp_json_encode( $contact ); + $res_body = ''; + $response = wp_remote_post( + $this->base_url . $url, + array( + 'headers' => $headers, + 'body' => $contact, + ) + ); + $message = __( 'Creating Single Contact', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $this->create_log( $message, $url, $parsed_response, 'contacts' ); + return $parsed_response; + } + } + + /** + * Create or update contacts. + * + * @param array $contacts hubspot acceptable contacts array. + * @param array $args ids of contacts or orders. + * @since 1.0.0 + * @return array $parsed_response formatted array with status/message + */ + public function create_or_update_contacts( $contacts, $args = array() ) { + + if ( is_array( $contacts ) ) { + + $url = '/contacts/v1/contact/batch/'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $contacts = wp_json_encode( $contacts ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $contacts, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Updating or Creating users data', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + if ( 202 == $status_code ) { + update_option( 'hubwoo_last_sync_date', time() ); + if ( ! empty( $args ) && get_option( 'hubwoo_background_process_running', false ) ) { + $hsocssynced = get_option( 'hubwoo_ocs_contacts_synced', 0 ); + $hsocssynced += count( $args['ids'] ); + update_option( 'hubwoo_ocs_contacts_synced', $hsocssynced ); + } + if ( isset( $args['ids'] ) && isset( $args['type'] ) ) { + Hubwoo::hubwoo_marked_sync( $args['ids'], $args['type'] ); + } + } elseif ( 400 === $status_code ) { + + $api_body = wp_remote_retrieve_body( $response ); + + if ( $api_body ) { + $api_body = json_decode( $api_body ); + } + //phpcs:disable + if ( ! empty( $api_body->invalidEmails ) ) { + $savedinvalidemails = get_option( 'hubwoo_pro_invalid_emails', array() ); + foreach ( $api_body->invalidEmails as $single_email ) { + //phpcs:enable + if ( ! in_array( $single_email, $savedinvalidemails, true ) ) { + $savedinvalidemails[] = $single_email; + $user_exists = email_exists( $single_email ); + if ( $user_exists ) { + + update_user_meta( $user_exists, 'hubwoo_invalid_contact', 'yes' ); + update_user_meta( $user_exists, 'hubwoo_pro_user_data_change', 'synced' ); + } else { + $query = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'order' => 'desc', + 'post_parent' => 0, + 'customer' => $single_email, + 'return' => 'ids', + )); + + $customer_orders = $query->get_orders(); + + if ( count( $customer_orders ) ) { + foreach ( $customer_orders as $key => $value ) { + $order = wc_get_order($order_id); + $order->update_meta_data('hubwoo_invalid_contact', 'yes'); + $order->save(); + } + } + } + } + } + } + + update_option( 'hubwoo_newsletter_property_update', '' ); + update_option( 'hubwoo_abandoned_property_update', '' ); + } + + if ( ! empty( $savedinvalidemails ) ) { + update_option( 'hubwoo_pro_invalid_emails', $savedinvalidemails ); + } + $this->create_log( $message, $url, $parsed_response, 'contacts' ); + return $parsed_response; + } + } + + /** + * Create or update contacts. + * + * @param array $contacts hubspot acceptable contact properties array. + * @param string $email email of contact. + * @since 1.2.6 + * @return array $parsed_response formatted array with status/message + */ + public function create_or_update_single_contact( $contacts, $email ) { + + if ( is_array( $contacts ) ) { + + $url = '/contacts/v1/contact/createOrUpdate/email/' . $email . '/'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $contacts = wp_json_encode( $contacts ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $contacts, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Updating or Creating single users data', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, 'contacts' ); + return $parsed_response; + } + } + + /** + * Create list on hubspot. + * + * @since 1.0.0 + * @param array $list_details formatted data to create new list on hubspot. + * @return array $parsed_response formatted array with status/message. + */ + public function create_list( $list_details ) { + + if ( is_array( $list_details ) ) { + if ( isset( $list_details['name'] ) ) { + $url = '/contacts/v1/lists'; + $headers = $this->get_token_headers(); + $res_body = ''; + $list_details = wp_json_encode( $list_details ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $list_details, + 'headers' => $headers, + ) + ); + $message = __( 'Creating Lists', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $this->create_log( $message, $url, $parsed_response, 'lists' ); + return $parsed_response; + } + } + } + + /** + * Get all static lists from HS. + * + * @since 1.0.0 + * @return array $lists formatted array with list id and name. + */ + public function get_static_list() { + + $lists = array(); + $lists['select'] = __( '--Please Select a Static List--', 'makewebbetter-hubspot-for-woocommerce' ); + + $url = '/contacts/v1/lists/static?count=250'; + $headers = $this->get_token_headers(); + $response = wp_remote_get( $this->base_url . $url, array( 'headers' => $headers ) ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $message = __( 'Get Static Lists', 'makewebbetter-hubspot-for-woocommerce' ); + + $this->create_log( $message, $url, $parsed_response, 'lists' ); + + if ( 200 == $status_code ) { + $api_body = wp_remote_retrieve_body( $response ); + if ( $api_body ) { + $api_body = json_decode( $api_body, true ); + } + if ( ! empty( $api_body->lists ) ) { + + foreach ( $api_body->lists as $single_list ) { + //phpcs:disable + if ( isset( $single_list->name ) && isset( $single_list->listId ) ) { + + $lists[ $single_list->listId ] = $single_list->name; + } + //phpcs:enable + } + } + } + + return $lists; + } + + /** + * Get all active lists from HS. + * + * @since 1.0.0 + * @return array $lists formatted array with list id and name. + */ + public function get_dynamic_lists() { + + $lists = array(); + + $url = '/contacts/v1/lists/dynamic?count=250'; + $headers = $this->get_token_headers(); + $response = wp_remote_get( $this->base_url . $url, array( 'headers' => $headers ) ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $message = __( 'Get Dynamic Lists', 'makewebbetter-hubspot-for-woocommerce' ); + + $this->create_log( $message, $url, $parsed_response, 'lists' ); + + if ( 200 == $status_code ) { + $api_body = wp_remote_retrieve_body( $response ); + if ( $api_body ) { + $api_body = json_decode( $api_body, true ); + } + if ( ! empty( $api_body['lists'] ) ) { + + foreach ( $api_body['lists'] as $single_list ) { + //phpcs:disable + if ( isset( $single_list['name'] ) && isset( $single_list['listId'] ) ) { + + $lists[ $single_list['listId'] ] = $single_list['name']; + } + //phpcs:enable + } + } + } + + return $lists; + } + + /** + * Enroll a contact email in a list. + * + * @since 1.0.0 + * @param string $email contact email to be enrolled. + * @param string $list_id id of the hubspot list. + * @return array $parsed_response formatted array with status/response. + */ + public function list_enrollment( $email, $list_id ) { + + if ( ! empty( $email ) && ! empty( $list_id ) ) { + + $url = '/contacts/v1/lists/' . $list_id . '/add'; + $headers = $this->get_token_headers(); + $emails = array(); + $emails[] = $email; + $request = array( 'emails' => $emails ); + $request = wp_json_encode( $request ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $request, + 'headers' => $headers, + ) + ); + $message = __( 'Enrolling in Static List', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $this->create_log( $message, $url, $parsed_response, 'lists' ); + return $parsed_response; + } + } + + /** + * Create workflow on hubspot. + * + * @since 1.0.0 + * @param array $workflow_details formatted array with workflow details. + * @return array $parsed_response formatted array with status/response. + */ + public function create_workflow( $workflow_details ) { + + if ( is_array( $workflow_details ) ) { + + if ( isset( $workflow_details['name'] ) ) { + + $url = '/automation/v3/workflows'; + $headers = $this->get_token_headers(); + $res_body = ''; + $workflow = wp_json_encode( $workflow_details ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $workflow, + 'headers' => $headers, + ) + ); + $message = __( 'Creating Workflows', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $this->create_log( $message, $url, $parsed_response, 'workflows' ); + return $parsed_response; + } + } + } + + /** + * Get all workflows from hubspot. + * + * @since 1.0.0 + */ + public function get_workflows() { + + $workflows = array(); + $workflows['select'] = esc_html__( '--Please Select a Workflow--', 'makewebbetter-hubspot-for-woocommerce' ); + $url = '/automation/v3/workflows'; + $headers = $this->get_token_headers(); + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $message = __( 'Getting all Workflows', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'workflows' ); + + if ( 200 == $status_code ) { + $api_body = wp_remote_retrieve_body( $response ); + if ( $api_body ) { + $api_body = json_decode( $api_body, true ); + } + update_option( 'hubwoo_access_workflow', 'yes' ); + } else { + $workflows = array(); + update_option( 'hubwoo_access_workflow', 'no' ); + } + + if ( ! empty( $response->workflows ) ) { + + foreach ( $response->workflows as $single_workflow ) { + + if ( isset( $single_workflow->name ) && isset( $single_workflow->id ) ) { + + $workflows[ $single_workflow->id ] = $single_workflow->name; + } + } + } + + return $workflows; + } + + /** + * Get all workflows from hubspot. + * + * @since 1.4.0 + * @param array $workflow_id workflow id to fetch. + * @return array $workflows formatted array with status/response. + */ + public function get_workflow( $workflow_id ) { + + $workflows = array(); + $workflows['select'] = esc_html__( '--Please Select a Workflow--', 'makewebbetter-hubspot-for-woocommerce' ); + $url = '/automation/v3/workflows/' . $workflow_id; + $headers = $this->get_token_headers(); + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $message = __( 'Get single Workflows', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'workflows' ); + + if ( 200 == $status_code ) { + $api_body = wp_remote_retrieve_body( $response ); + if ( $api_body ) { + $api_body = json_decode( $api_body, true ); + } + update_option( 'hubwoo_access_workflow', 'yes' ); + } else { + $workflows = array(); + update_option( 'hubwoo_access_workflow', 'no' ); + } + + if ( ! empty( $response->workflows ) ) { + + foreach ( $response->workflows as $single_workflow ) { + + if ( isset( $single_workflow->name ) && isset( $single_workflow->id ) ) { + + $workflows[ $single_workflow->id ] = $single_workflow->name; + } + } + } + + return $workflows; + } + + /** + * Enroll a contact email in a worlflow. + * + * @since 1.0.0 + * @param string $email contact email. + * @param string $workflow_id id of hubspot workflow. + */ + public function workflow_enrollment( $email, $workflow_id ) { + + if ( ! empty( $email ) && ! empty( $workflow_id ) ) { + + $url = '/automation/v2/workflows/' . $workflow_id . '/enrollments/contacts/' . $email; + $headers = $this->get_token_headers(); + $response = $this->_post( $url, array(), $headers ); + $message = __( 'Enrolling in Workflow', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $response, 'workflows' ); + } + } + + /** + * Create log of requests. + * + * @param string $message hubspot log message. + * @param string $url hubspot acceptable url. + * @param array $response hubspot response array. + * @since 1.0.0 + */ + public function create_log( $message, $url, $response, $object_type = '' ) { + + if ( isset( $response['status_code'] ) ) { + + if ( 400 == $response['status_code'] || 401 == $response['status_code'] ) { + + update_option( 'hubwoo_pro_alert_param_set', true ); + $error_apis = get_option( 'hubwoo-error-api-calls', 0 ); + $error_apis ++; + update_option( 'hubwoo-error-api-calls', $error_apis ); + } elseif ( 200 == $response['status_code'] || 202 == $response['status_code'] || 201 == $response['status_code'] || 204 == $response['status_code'] ) { + + $success_apis = get_option( 'hubwoo-success-api-calls', 0 ); + $success_apis ++; + update_option( 'hubwoo-success-api-calls', $success_apis ); + update_option( 'hubwoo_pro_alert_param_set', false ); + } else { + + update_option( 'hubwoo_pro_alert_param_set', false ); + } + + if ( 200 == $response['status_code'] ) { + + $final_response['status_code'] = 200; + } elseif ( 202 == $response['status_code'] ) { + + $final_response['status_code'] = 202; + } else { + + $final_response = $response; + } + + $final_response['body'] = isset( $final_response['body'] ) ? json_decode( $final_response['body'] ) : ''; + + // Create log table in database. + Hubwoo::hubwoo_create_log_table( Hubwoo::get_current_crm_name( 'slug' ) ); + // Insert log in table + self::log_request_in_db( $message, $object_type, $url, $final_response ); + } + } + + /** + * Log request and response in database. + * + * @param string $event Event of which data is synced. + * @param string $crm_object Update or create crm object. + * @param array $request Request data. + * @param array $response Api response. + */ + public function log_request_in_db( $event, $crm_object, $request, $response ) { + + global $wpdb; + + $log_data = array( + 'event' => $event, + 'request' => $request, + 'response' => serialize( $response ), + Hubwoo::get_current_crm_name( 'slug' ) . '_object' => $crm_object, + 'time' => time(), + ); + + $table = $wpdb->prefix . 'hubwoo_log'; + $response = $wpdb->insert( $table, $log_data ); //phpcs:ignore + } + + /** + * Getting all hubspot properties. + * + * @since 1.0.0 + * @param array $object_type HubSpot Object type. + * @return array $response formatted array with status/response. + */ + public function get_all_hubspot_properties( $object_type ) { + + $response = ''; + + $url = '/crm/v3/properties/' . $object_type; + + $headers = $this->get_token_headers(); + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + $message = esc_html__( 'Fetching all ' . $object_type . ' Properties', 'makewebbetter-hubspot-for-woocommerce' ); + + $this->create_log( $message, $url, $response, 'properties' ); + + if ( isset( $response['status_code'] ) && 200 == $response['status_code'] ) { + + if ( isset( $response['response'] ) ) { + + $response = json_decode( $response['response'] ); + } + } + + return $response; + } + + /** + * Get all contcat lists from hubspot. + * + * @since 1.0.0 + * @param int $count count of list to get from HubSpot. + * @param int $offset offset for get call. + */ + public function get_all_contact_lists( $count, $offset ) { + + $response = array(); + + $url = '/contacts/v1/lists?count=' . $count . '&offset=' . $offset; + + $headers = $this->get_token_headers(); + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + $message = __( 'Fetching Contact Lists', 'makewebbetter-hubspot-for-woocommerce' ); + + $this->create_log( $message, $url, $response, 'lists' ); + + if ( isset( $response['status_code'] ) && 200 == $response['status_code'] ) { + + if ( isset( $response['response'] ) ) { + + $response = json_decode( $response['response'] ); + } + } + + return $response; + } + + /** + * Get all contacts in a list. + * + * @since 1.0.0 + * @param int $list_id id of the list. + * @param int $offset list offset. + */ + public function get_contacts_in_list( $list_id, $offset ) { + + $response = array(); + + $url = '/contacts/v1/lists/' . $list_id . '/contacts/all?count=50&vidOffset=' . $offset; + + $headers = $this->get_token_headers(); + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + $message = __( 'Fetching Contacts from List', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $response, 'lists' ); + + if ( isset( $response['status_code'] ) && 200 == $response['status_code'] ) { + + if ( isset( $response['response'] ) ) { + + $response = json_decode( $response['response'] ); + } + } + + return $response; + } + + /** + * Getting single object record. + * + * @since 1.4.0 + * @param array $object_type HubSpot Object type. + * @param int $object_id id of the object. + * @return array $parsed_response formatted array with status/response. + */ + public function get_object_record( $object_type, $object_id ) { + $url = '/crm/v3/objects/' . $object_type . '/' . $object_id; + $headers = $this->get_token_headers(); + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = esc_html__( 'Fetching ' . $object_type . ' object', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, $object_type ); + + return $parsed_response; + } + + /** + * Create single object record. + * + * @since 1.4.0 + * @param array $object_type HubSpot Object type. + * @param array $properties_data array of object properties. + * @return array $parsed_response formatted array with status/response. + */ + public function create_object_record( $object_type, $properties_data ) { + if ( is_array( $properties_data ) ) { + + $url = '/crm/v3/objects/' . $object_type; + $headers = $this->get_token_headers(); + $res_body = ''; + + $properties_data = wp_json_encode( $properties_data ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $properties_data, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Creating single ' . $object_type . ' data', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, $object_type ); + return $parsed_response; + } + } + + /** + * Update single object record. + * + * @since 1.4.0 + * @param array $object_type HubSpot Object type. + * @param int $object_id id of object. + * @param array $properties_data array of object properties. + * @return array $parsed_response formatted array with status/response. + */ + public function update_object_record( $object_type, $object_id, $properties_data ) { + if ( is_array( $properties_data ) ) { + + $url = '/crm/v3/objects/' . $object_type . '/' . $object_id; + $headers = $this->get_token_headers(); + $res_body = ''; + + $properties_data = wp_json_encode( $properties_data ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'method' => 'PATCH', + 'body' => $properties_data, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Updated single ' . $object_type . ' data', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, $object_type ); + return $parsed_response; + } + } + + /** + * Search single object record. + * + * @since 1.4.0 + * @param array $object_type HubSpot Object type. + * @param array $filter_data array of object filter. + * @return array $parsed_response formatted array with status/response. + */ + public function search_object_record( $object_type, $filter_data ) { + if ( is_array( $filter_data ) ) { + $url = '/crm/v3/objects/' . $object_type . '/search'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $filter_data = wp_json_encode( $filter_data ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $filter_data, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Search single ' . $object_type . ' data', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, $object_type ); + return $parsed_response; + } + } + + /** + * Fetch bulk object record. + * + * @since 1.4.0 + * @param array $object_type HubSpot Object type. + * @param array $object_data array of object data. + * @return array $parsed_response formatted array with status/response. + */ + public function get_batch_object_record( $object_type, $object_data ) { + if ( is_array( $object_data ) ) { + $url = '/crm/v3/objects/' . $object_type . '/batch/read'; + $headers = $this->get_token_headers(); + $res_body = ''; + $object_data = wp_json_encode( $object_data ); + + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $object_data, + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = esc_html__( 'Fetching Batch ' . $object_type, 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, $object_type ); + + return $parsed_response; + } + } + + /** + * Create bulk object record. + * + * @since 1.4.0 + * @param array $object_type HubSpot Object type. + * @param array $object_data array of object data. + * @return array $parsed_response formatted array with status/response. + */ + public function create_batch_object_record( $object_type, $object_data ) { + if ( is_array( $object_data ) ) { + + $url = '/crm/v3/objects/' . $object_type . '/batch/create'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $object_data = wp_json_encode( $object_data ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $object_data, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Creating bulk ' . $object_type . ' data', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, $object_type ); + return $parsed_response; + } + } + + /** + * Update bulk object record. + * + * @since 1.4.0 + * @param array $object_type HubSpot Object type. + * @param array $object_data array of object data. + * @return array $parsed_response formatted array with status/response. + */ + public function update_batch_object_record( $object_type, $object_data ) { + if ( is_array( $object_data ) ) { + + $url = '/crm/v3/objects/' . $object_type . '/batch/update'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $object_data = wp_json_encode( $object_data ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'method' => 'POST', + 'body' => $object_data, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Updated bulk ' . $object_type . ' data', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, $object_type ); + return $parsed_response; + } + } + + /** + * Associate single object record. + * + * @since 1.4.0 + * @param array $from_object associate from object type. + * @param array $from_object_id associate from object id. + * @param array $to_object associate to object type. + * @param array $to_object_id associate to object id. + * @param array $association_id id of association type. + * @return array $parsed_response formatted array with status/response. + */ + public function associate_object( $from_object, $from_object_id, $to_object, $to_object_id, $association_id ) { + + if ( isset( $from_object ) && isset( $to_object ) ) { + + $url = '/crm/v4/objects/' . $from_object . '/' . $from_object_id . '/associations/' . $to_object . '/' . $to_object_id; + $headers = $this->get_token_headers(); + $res_body = ''; + + $associate_body[] = array( + 'associationCategory' => 'HUBSPOT_DEFINED', + 'associationTypeId' => $association_id, + ); + $associate_body = wp_json_encode( $associate_body ); + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'method' => 'PUT', + 'body' => $associate_body, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Associate ' . $from_object . ' to ' . $to_object, 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, 'association' ); + return $parsed_response; + } + } + + /** + * Delete association single object record. + * + * @since 1.4.0 + * @param array $from_object associate from object type. + * @param array $from_object_id associate from object id. + * @param array $to_object associate to object type. + * @param array $to_object_id associate to object id. + * @return array $parsed_response formatted array with status/response. + */ + public function remove_associated_object( $from_object, $from_object_id, $to_object, $to_object_id ) { + if ( isset( $from_object ) && isset( $to_object ) ) { + + $url = '/crm/v4/objects/' . $from_object . '/' . $from_object_id . '/associations/' . $to_object . '/' . $to_object_id; + $headers = $this->get_token_headers(); + $res_body = ''; + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'method' => 'DELETE', + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Delete association ' . $from_object . ' to ' . $to_object, 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, 'association' ); + return $parsed_response; + } + } + + /** + * Bulk associate single object record. + * + * @since 1.4.0 + * @param array $from_object associate from object type. + * @param array $to_object associate to object type. + * @param array $associate_body array of associated data. + * @return array $parsed_response formatted array with status/response. + */ + public function associate_batch_object( $from_object, $to_object, $associate_body ) { + $url = '/crm/v4/associations/' . $from_object . '/' . $to_object . '/batch/create'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $associate_body = wp_json_encode( $associate_body ); + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'method' => 'POST', + 'body' => $associate_body, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Associate batch ' . $from_object . ' to ' . $to_object, 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, 'association' ); + return $parsed_response; + } + + /** + * Bulk delete associate single object record. + * + * @since 1.4.0 + * @param array $from_object associate from object type. + * @param array $to_object associate to object type. + * @param array $associate_body array of associated data. + * @return array $parsed_response formatted array with status/response. + */ + public function remove_associate_batch_object( $from_object, $to_object, $associate_body ) { + $url = '/crm/v4/associations/' . $from_object . '/' . $to_object . '/batch/archive'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $associate_body = wp_json_encode( $associate_body ); + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'method' => 'POST', + 'body' => $associate_body, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Delete batch association ' . $from_object . ' to ' . $to_object, 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, 'association' ); + return $parsed_response; + } + + /** + * Fetch marketing emails. + * + * @since 1.4.0 + * @param array $limit number of emails to be fetched. + * @return array $parsed_response formatted array with status/response. + */ + public function get_marketing_emails( $limit = 10 ) { + $url = '/marketing-emails/v1/emails?limit=' . $limit; + $headers = $this->get_token_headers(); + $res_body = ''; + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = esc_html__( 'Fetching marketing emails', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'marketing_emails' ); + + return $parsed_response; + } + + /** + * Create marketing emails. + * + * @since 1.4.0 + * @param array $email_template email template data. + * @return array $parsed_response formatted array with status/response. + */ + public function create_marketing_emails( $email_template ) { + if ( is_array( $email_template ) ) { + + $url = '/marketing-emails/v1/emails'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $email_template = wp_json_encode( $email_template ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $email_template, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Creating marketing email.', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, 'marketing_emails' ); + return $parsed_response; + } + } + + /** + * Remove deal associations on email change. + * + * @since 1.0.0 + * @param string $deal_id id of the deal. + * @param string $vid id of the contact. + * @return array $response formatted aray for response. + */ + public function remove_deal_associations( $deal_id, $vid ) { + + $url = '/crm-associations/v1/associations/delete'; + $headers = $this->get_token_headers(); + $request = array( + 'fromObjectId' => $vid, + 'toObjectId' => $deal_id, + 'category' => 'HUBSPOT_DEFINED', + 'definitionId' => '4', + ); + $request = json_encode( $request ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $request, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $message = __( 'Removing Deal Association With Contact', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'association' ); + return $response; + } + + /** + * Create deal associations. + * + * @since 1.0.0 + * @param string $deal_id id of the deal. + * @param string $vid id of the contact. + * @return array $response formatted aray for response. + */ + public function create_deal_associations( $deal_id, $vid ) { + + $url = '/crm-associations/v1/associations'; + $headers = $this->get_token_headers(); + $request = array( + 'fromObjectId' => $vid, + 'toObjectId' => $deal_id, + 'category' => 'HUBSPOT_DEFINED', + 'definitionId' => '4', + ); + $request = json_encode( $request ); + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $request, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $message = __( 'Creating Deal Association With Contact', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'association' ); + return $parsed_response; + } + + /** + * Create deal and company associations. + * + * @since 1.2.7 + * @param string $deal_id id of the deal. + * @param string $company_id id of the company. + * @return array $response formatted aray for response. + */ + public function create_deal_company_associations( $deal_id, $company_id ) { + + $url = '/crm-associations/v1/associations'; + $headers = $this->get_token_headers(); + $request = array( + 'fromObjectId' => $company_id, + 'toObjectId' => $deal_id, + 'category' => 'HUBSPOT_DEFINED', + 'definitionId' => '6', + ); + $request = json_encode( $request ); + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $request, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $message = __( 'Creating Deal Association With Company', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'association' ); + return $parsed_response; + } + + /** + * Updating deals. + * + * @since 1.0.0 + * @param string $deal_id id of the deal. + * @param array $deal_details details of the deal. + */ + public function update_existing_deal( $deal_id, $deal_details ) { + + $url = '/deals/v1/deal/' . $deal_id; + $headers = $this->get_token_headers(); + $res_body = ''; + $deal_details = json_encode( $deal_details ); + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $deal_details, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = __( 'Updating HubSpot Deals', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'deals' ); + return $parsed_response; + } + + /** + * Creating groups for deals on HubSpot. + * + * @since 1.0.0 + * @param array $deal_groups formatted array for deal groups. + * @return array $parsed_response formatted array for API response. + */ + public function create_deal_group( $deal_groups ) { + + $url = '/properties/v1/deals/groups/'; + $headers = $this->get_token_headers(); + $parsed_response = array( + 'status_code' => 400, + 'response' => 'error', + ); + if ( is_array( $deal_groups ) && count( $deal_groups ) ) { + $deal_details = wp_json_encode( $deal_groups ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $deal_details, + 'headers' => $headers, + ) + ); + $message = __( 'Creating deal custom groups', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $this->create_log( $message, $url, $parsed_response, 'groups' ); + return $parsed_response; + } + } + + /** + * Creating properties for deals. + * + * @since 1.0.0 + * @param array $prop_details formatted array for creating deal property. + * @return array $parsed_response formatted response from API. + */ + public function create_deal_property( $prop_details ) { + + $url = '/properties/v1/deals/properties/'; + if ( is_array( $prop_details ) ) { + if ( isset( $prop_details['name'] ) && isset( $prop_details['groupName'] ) ) { + $url = '/properties/v1/deals/properties/'; + $headers = $this->get_token_headers(); + $parsed_response = array( + 'status_code' => 400, + 'response' => 'error', + ); + $prop_details = wp_json_encode( $prop_details ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $prop_details, + 'headers' => $headers, + ) + ); + $message = __( 'Creating deal custom properties', 'makewebbetter-hubspot-for-woocommerce' ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $this->create_log( $message, $url, $parsed_response, 'properties' ); + return $parsed_response; + } + } + } + + /** + * Updating deal properties. + * + * @since 1.0.0 + * @param array $deal_property details to create new deal. + * @return array $response api response. + */ + public function update_deal_property( $deal_property ) { + + if ( is_array( $deal_property ) ) { + if ( isset( $deal_property['name'] ) && isset( $deal_property['groupName'] ) ) { + $url = '/properties/v1/deals/properties/named/' . $deal_property['name']; + $headers = $this->get_token_headers(); + $deal_property = json_encode( $deal_property ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $deal_property, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $message = __( 'Updating HubSpot Deal Properties', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'properties' ); + return $parsed_response; + } + } + } + + /** + * Get customer vid using email. + * + * @since 1.0.0 + * @param string $email contact email. + * @return string $vid hubspot vid of contact. + */ + public function get_customer_vid( $email ) { + + $vid = ''; + $url = '/contacts/v1/contact/email/' . $email . '/profile'; + $headers = $this->get_token_headers(); + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $message = esc_html__( 'Fetching Contact VID by email', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'contacts' ); + return $vid; + } + + /** + * Get customer vid using email. + * + * @since 1.0.0 + * @param string $email contact email. + * @return string $vid hubspot vid of contact. + */ + public function get_customer_vid_historical( $email ) { + $vid = ''; + $url = '/contacts/v1/contact/email/' . $email . '/profile'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = esc_html__( 'Fetching Contact VID by email', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'contacts' ); + return $parsed_response; + } + + /** + * Creating deals on HubSpot. + * + * @since 1.0.0 + * @param array $deal_details details to create new deal. + * @return array $parsed_response formatted array with status/response. + */ + public function create_new_deal( $deal_details ) { + + $url = '/deals/v1/deal/'; + $headers = $this->get_token_headers(); + $res_body = ''; + $deal_details = wp_json_encode( $deal_details ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $deal_details, + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = esc_html__( 'Creating New deal', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'deals' ); + return $parsed_response; + } + + /** + * Fetching all of the deal stages + * + * @since 1.0.0 + * @return array $api_body formatted object with get request + */ + public function fetch_all_deal_pipelines() { + + $url = '/crm/v3/pipelines/deals'; + $headers = $this->get_token_headers(); + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + if ( 200 === $status_code ) { + $api_body = wp_remote_retrieve_body( $response ); + if ( $api_body ) { + $api_body = json_decode( $api_body, true ); + } + } else { + $api_body = array(); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $message = __( 'Fetch all pipeline', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'pipeline' ); + + return $api_body; + } + + /** + * Fetching pipeline by it's id. + * + * @since 1.0.0 + * @param string $pipeline_id id of pipeline. + * @return array $api_body formatted object with get request + */ + public function get_deal_pipeline( $pipeline_id ) { + + $url = '/crm/v3/pipelines/deals/' . $pipeline_id; + $headers = $this->get_token_headers(); + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + + if ( 200 === $status_code ) { + $api_body = wp_remote_retrieve_body( $response ); + if ( $api_body ) { + $api_body = json_decode( $api_body, true ); + } + } else { + $api_body = array(); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + + $message = __( 'Get deal pipeline info', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'pipeline' ); + + return $api_body; + } + + /** + * Create new deal pipeline. + * + * @since 1.0.0 + * @param array $pipeline_date array of pipeline label and it's stages. + * @return array $api_body formatted object with get request. + */ + public function create_deal_pipeline( $pipeline_data ) { + if ( is_array( $pipeline_data ) ) { + $url = '/crm/v3/pipelines/deals'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $pipeline_data = wp_json_encode( $pipeline_data ); + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $pipeline_data, + 'headers' => $headers, + ) + ); + $message = esc_html__( 'Creating deal pipeline', 'makewebbetter-hubspot-for-woocommerce' ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + $this->create_log( $message, $url, $parsed_response, 'pipeline' ); + return $parsed_response; + } + } + + /** + * Updating the deal stages in eCommerce Pipeline + * + * @since 1.0.0 + * @param string $pipeline_updates updated pipeline data. + * @param string $pipeline_id id of pipeline. + * @return array $response formatted aray for response. + */ + public function update_deal_pipeline( $pipeline_updates, $pipeline_id ) { + + $url = '/crm/v3/pipelines/deals/' . $pipeline_id; + $headers = $this->get_token_headers(); + $pipeline_updates = json_encode( $pipeline_updates ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $pipeline_updates, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + ); + $message = __( 'Updating the ecommerce pipeline deal stages', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'pipeline' ); + return $parsed_response; + } + + /** + * Get General Headers for API Calls. + * + * @since 1.0.0 + * @param array $additional_args (default: array()) Additional headers to be passed. + * @return array $headers All of the headers. + */ + private function get_token_headers( $additional_args = array() ) { + + $access_token = Hubwoo::hubwoo_get_access_token(); + $headers = array( + 'Content-Type' => 'application/json', + 'Authorization' => 'Bearer ' . $access_token, + ); + + if ( ! empty( $additional_args ) ) { + $headers = array_merge( $headers, $additional_args ); + } + + return $headers; + } + + /** + * Get General Headers for API Calls. + * + * @since 1.0.0 + * @param array $stores store details required for HubSpot. + * @return array $parsed_response Response from HubSpot. + */ + public function create_or_update_store( $stores ) { + + $headers = self::get_token_headers(); + $res_body = ''; + $url = '/extensions/ecomm/v2/stores'; + $stores = json_encode( $stores ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $stores, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => json_decode( $res_body ), + ); + $message = __( 'Creating or Updating Store', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'store' ); + return $parsed_response; + } + + /** + * Sending sync messages to hubspot + * + * @since 1.0.0 + * @param array $updates array of properties showing the changes. + * @param string $object_type hubspot object name. + * @return array response from HubSpot. + */ + public function ecomm_sync_messages( $updates, $object_type ) { + + $messages = array(); + $messages['storeId'] = get_option( 'hubwoo_ecomm_store_id', '' ); + $messages['objectType'] = $object_type; + $messages['messages'] = $updates; + $url = '/extensions/ecomm/v2/sync/messages'; + $headers = self::get_token_headers(); + $messages = json_encode( $messages ); + $res_body = ''; + + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $messages, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = 'Updating/Creating Ecomm Bridge - ' . $object_type; + $this->create_log( $message, $url, $parsed_response, $object_type ); + return $parsed_response; + } + + /** + * Sending sync messages to hubspot + * + * @since 1.0.0 + * @param array $object_id external object Id. + * @param string $object_type hubspot object name. + * @return array response from HubSpot. + */ + public function ecomm_sync_status( $object_id, $object_type ) { + + $store_id = get_option( 'hubwoo_ecomm_store_id', '' ); + $url = '/extensions/ecomm/v2/sync/status/' . $store_id . '/' . $object_type . '/' . $object_id; + $headers = self::get_token_headers(); + $res_body = ''; + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = 'Checking Sync Status of object id -' . $object_id . ' and type ' . $object_type; + $this->create_log( $message, $url, $parsed_response, $object_type ); + return $parsed_response; + } + + /** + * Create a form data. + * + * @since 1.0.4 + * @param array $form_data post form data. + * @return array $response formatted aray for response. + */ + public function create_form_data( $form_data ) { + + $url = '/forms/v2/forms'; + $headers = $this->get_token_headers(); + $form_data = wp_json_encode( $form_data ); + $res_body = ''; + + $response = wp_remote_post( + $this->base_url . $url, + array( + 'body' => $form_data, + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = __( 'Creating a form data', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'form' ); + return $parsed_response; + } + + /** + * Submit a form data to HubSpot. + * + * @since 1.0.0 + * @param array $form_data form fields. + * @param string $portal_id portal id. + * @param string $form_guid form id. + * @return array $response formatted aray for response. + */ + public function submit_form_data( $form_data, $portal_id, $form_guid ) { + + $url = 'https://api.hsforms.com/submissions/v3/integration/submit/' . $portal_id . '/' . $form_guid; + $headers = $this->get_token_headers(); + $res_body = ''; + + $form_data = json_encode( $form_data ); + + $response = wp_remote_post( + $url, + array( + 'body' => $form_data, + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = __( 'Submitting Form data', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'form' ); + return $parsed_response; + } + + /** + * Get Batch contacts from emails. + * + * @since 1.0.0 + * @param array $batch_emails batch email string. + * @return array $response formatted aray for response. + */ + public function hubwoo_get_batch_vids( $batch_emails ) { + + $url = '/contacts/v1/contact/emails/batch/?' . $batch_emails . 'property=email'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $batch_emails = json_encode( $batch_emails ); + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = __( 'Fetching Batch Vids', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'contacts' ); + return $parsed_response; + } + + + /** + * Get All forms. + * + * @since 1.0. + * @return array $response formatted aray for response. + */ + public function hubwoo_get_all_forms() { + + $url = '/forms/v2/forms'; + $headers = $this->get_token_headers(); + $res_body = ''; + + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = __( 'Fetching All Forms', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'form' ); + return $parsed_response; + } + + /** + * Fetchig user by email. + * + * @since 1.0.0 + * @param string $email email of user. + */ + public function get_customer_by_email( $email ) { + + $vid = ''; + $url = '/contacts/v1/contact/email/' . $email . '/profile'; + $headers = $this->get_token_headers(); + $response = wp_remote_get( + $this->base_url . $url, + array( + 'headers' => $headers, + ) + ); + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + + if ( 200 == $parsed_response['status_code'] ) { + $parsed_response['body'] = json_decode( $parsed_response['body'], true ); + if ( ! empty( $parsed_response['body'] ) && isset( $parsed_response['body']['vid'] ) ) { + $vid = $parsed_response['body']['vid']; + } + } + $message = esc_html__( 'Fetching Contact by email', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'contacts' ); + return $vid; + } + + /** + * Updating products. + * + * @since 1.2.7 + * @param string $hubwoo_ecomm_pro_id hubspot product id. + * @param array $properties product properties. + */ + public function update_existing_products( $hubwoo_ecomm_pro_id, $properties ) { + + $url = '/crm-objects/v1/objects/products/' . $hubwoo_ecomm_pro_id; + $headers = $this->get_token_headers(); + $properties = json_encode( $properties ); + $response = wp_remote_request( + $this->base_url . $url, + array( + 'body' => $properties, + 'headers' => $headers, + 'method' => 'PUT', + ) + ); + + if ( is_wp_error( $response ) ) { + $status_code = $response->get_error_code(); + $res_message = $response->get_error_message(); + } else { + $status_code = wp_remote_retrieve_response_code( $response ); + $res_message = wp_remote_retrieve_response_message( $response ); + $res_body = wp_remote_retrieve_body( $response ); + } + $parsed_response = array( + 'status_code' => $status_code, + 'response' => $res_message, + 'body' => $res_body, + ); + $message = __( 'Updating HubSpot Products', 'makewebbetter-hubspot-for-woocommerce' ); + $this->create_log( $message, $url, $parsed_response, 'products' ); + return $parsed_response; + } + +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconst.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconst.php new file mode 100644 index 00000000..ffcbb8de --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooconst.php @@ -0,0 +1,23 @@ +groups = $this->_set( 'groups' ); + $this->properties = $this->_set( 'properties' ); + $this->lists = $this->_set( 'lists' ); + $this->workflows = $this->_set( 'workflows' ); + } + + /** + * Get groups/properties. + * + * @param string $option groups/properties. + * @param string $group_name name of group to get properties. + * @param bool $all true/false. + * @return array array of groups/properties/lists/workflows information. + */ + public function _get( $option, $group_name = '', $all = false ) { + + if ( 'groups' === $option ) { + + return $this->groups; + } elseif ( 'properties' === $option ) { + + if ( $all ) { + $properties = $this->get_all_active_groups_properties( true ); + return $properties; + } + + if ( ! empty( $group_name ) && isset( $this->properties[ $group_name ] ) && ! $all ) { + return $this->properties[ $group_name ]; + } else { + return $this->_get_group_properties( $group_name ); + } + } elseif ( 'lists' === $option ) { + return $this->lists; + } elseif ( 'workflows' === $option ) { + return $this->workflows; + } + } + + /** + * Get an array of required option. + * + * @param String $option the identifier. + * @return Array An array of values. + * @since 1.0.0 + */ + private function _set( $option ) { + + $values = array(); + + if ( 'groups' === $option ) { + + // order details. + $values[] = array( + 'name' => 'order', + 'label' => __( 'Order Information', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + // products bought details. + $values[] = array( + 'name' => 'last_products_bought', + 'label' => __( 'Products Bought', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + // shopping cart details. + $values[] = array( + 'name' => 'shopping_cart_fields', + 'label' => __( 'Shopping Cart Information', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + // customer details. + $values[] = array( + 'name' => 'customer_group', + 'label' => __( 'Customer Group', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + // categories bought details. + $values[] = array( + 'name' => 'categories_bought', + 'label' => __( 'Categories Bought', 'makewebbetter-hubspot-for-woocommerce' ), + ); + // RFM details. + $values[] = array( + 'name' => 'rfm_fields', + 'label' => __( 'RFM Information', 'makewebbetter-hubspot-for-woocommerce' ), + ); + // skus bought details. + $values[] = array( + 'name' => 'skus_bought', + 'label' => __( 'SKUs Bought', 'makewebbetter-hubspot-for-woocommerce' ), + ); + // roi tracking. + $values[] = array( + 'name' => 'roi_tracking', + 'label' => __( 'ROI Tracking', 'makewebbetter-hubspot-for-woocommerce' ), + ); + // Abandeond Cart. + $values[] = array( + 'name' => 'abandoned_cart', + 'label' => __( 'Abandoned Cart Details', 'makewebbetter-hubspot-for-woocommerce' ), + ); + + // filter for new groups. + $values = apply_filters( 'hubwoo_sync_groups', $values ); + } elseif ( 'properties' === $option ) { + + // let's check for all active tracking groups and get there associated properties. + $values = $this->get_all_active_groups_properties(); + } elseif ( 'lists' === $option ) { + + $values = $this->get_all_active_lists(); + } elseif ( 'workflows' === $option ) { + + $values = $this->get_all_workflows(); + } + + // add your values to the either groups or properties. + return apply_filters( 'hubwoo_contact_' . $option, $values ); + } + + /** + * Add subscription groups. + * + * @param array $values predefined groups. + * @return Array Properties array with there associated group. + * @since 1.0.0 + */ + public static function _get_subs_groups( $values = array() ) { + + $values[] = array( + 'name' => 'subscriptions_details', + 'label' => __( 'Subscriptions Details', 'makewebbetter-hubspot-for-woocommerce' ), + ); + return apply_filters( 'hubwoo_subs_groups', $values ); + } + + /** + * Check for the active groups and get there properties. + * + * @param bool $all to get all propertues or not. + * @return Array Properties array with there associated group. + * @since 1.0.0 + */ + private function get_all_active_groups_properties( $all = false ) { + + $active_groups_properties = array(); + + $active_groups = $all ? $this->_get( 'groups' ) : $this->get_active_groups(); + + if ( is_array( $active_groups ) && count( $active_groups ) ) { + + foreach ( $active_groups as $active_group ) { + + if ( ! empty( $active_group ) ) { + + if ( $all ) { + $active_groups_properties[ $active_group['name'] ] = $this->_get_group_properties( $active_group['name'] ); + } else { + $active_groups_properties[ $active_group ] = $this->_get_group_properties( $active_group ); + } + } + } + } + + return apply_filters( 'hubwoo_active_groups_properties', $active_groups_properties ); + } + + /** + * Filter extra properties to avaoid error on hubspot. + * + * @return only created properties + * @since 1.0.0 + */ + public function hubwoo_get_filtered_properties() { + + $filtered_properties = array(); + + $all_filtered_properties = array(); + + $active_groups = $this->get_active_groups(); + + if ( is_array( $active_groups ) && count( $active_groups ) ) { + + foreach ( $active_groups as $active_group ) { + + if ( ! empty( $active_group ) && ! is_array( $active_group ) ) { + + $active_groups_properties[ $active_group ] = $this->_get_group_properties( $active_group ); + } + } + } + + if ( ! empty( $active_groups_properties ) ) { + + $group_name = ''; + + $created_properties = array_map( + function( $property ) { + return str_replace( "'", '', $property ); + }, + get_option( 'hubwoo-properties-created', array() ) + ); + + foreach ( $active_groups_properties as $group_name_key => $single_group_property ) { + + $group_name = $group_name_key; + + $filtered_properties = array(); + + foreach ( $single_group_property as $single_property ) { + + if ( isset( $single_property['name'] ) && in_array( $single_property['name'], $created_properties ) ) { + + $filtered_properties[] = $single_property; + } + } + + $all_filtered_properties[ $group_name ] = $filtered_properties; + } + } + + return apply_filters( 'hubwoo_active_groups_properties', $all_filtered_properties ); + } + + + /** + * Filter for active groups only. + * + * @return Array active group names. + * @since 1.0.0 + */ + private function get_active_groups() { + + $active_groups = array(); + + $all_groups = $this->_get( 'groups' ); + if ( is_array( $all_groups ) && count( $all_groups ) ) { + + foreach ( $all_groups as $group_details ) { + + $group_name = isset( $group_details['name'] ) ? $group_details['name'] : ''; + + if ( ! empty( $group_name ) ) { + + $created_groups = get_option( 'hubwoo-groups-created', array() ); + + $is_active = false; + + if ( in_array( $group_name, $created_groups ) ) { + + $is_active = true; + } + + if ( $is_active ) { + + $active_groups[] = $group_name; + } + } + } + } + return apply_filters( 'hubwoo_active_groups', $active_groups ); + } + + + /** + * Get all the groups properties. + * + * @param string $group_name name of the existed valid hubspot contact properties group. + * @return Array Properties array. + * @since 1.0.0 + */ + private function _get_group_properties( $group_name ) { + + $group_properties = array(); + + if ( ! empty( $group_name ) ) { + + if ( 'customer_group' === $group_name ) { + + $group_properties[] = array( + 'name' => 'customer_group', + 'label' => __( 'Customer Group/ User role', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'newsletter_subscription', + 'label' => __( 'Accepts Marketing', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => true, + 'options' => $this->get_user_marketing_action(), + ); + + $group_properties[] = array( + 'name' => 'marketing_newsletter', + 'label' => __( 'Marketing Newsletter', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'checkbox', + 'formField' => true, + 'options' => $this->get_user_marketing_sources(), + ); + + $group_properties[] = array( + 'name' => 'shopping_cart_customer_id', + 'label' => __( 'Shopping Cart ID', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'customer_source_store', + 'label' => __( 'Customer Source Store', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + } elseif ( 'shopping_cart_fields' === $group_name ) { + + $group_properties[] = array( + 'name' => 'shipping_address_line_1', + 'label' => __( 'Shipping Address Line 1', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'shipping_address_line_2', + 'label' => __( 'Shipping Address Line 2', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'shipping_city', + 'label' => __( 'Shipping City', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'shipping_state', + 'label' => __( 'Shipping State', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'shipping_postal_code', + 'label' => __( 'Shipping Postal Code', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'shipping_country', + 'label' => __( 'Shipping Country', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'billing_address_line_1', + 'label' => __( 'Billing Address Line 1', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'billing_address_line_2', + 'label' => __( 'Billing Address Line 2', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'billing_city', + 'label' => __( 'Billing City', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'billing_state', + 'label' => __( 'Billing State', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'billing_postal_code', + 'label' => __( 'Billing Postal Code', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + + $group_properties[] = array( + 'name' => 'billing_country', + 'label' => __( 'Billing Country', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => true, + ); + } elseif ( 'last_products_bought' === $group_name ) { + + $group_properties[] = array( + 'name' => 'last_product_bought', + 'label' => __( 'Last Product Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_product_types_bought', + 'label' => __( 'Last Product Types Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought', + 'label' => __( 'Last Products Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_html', + 'label' => __( 'Last Products Bought HTML', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_total_number_of_products_bought', + 'label' => __( 'Last Total Number Of Products Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'product_types_bought', + 'label' => __( 'Product Types Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'products_bought', + 'label' => __( 'Products Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'total_number_of_products_bought', + 'label' => __( 'Total Number Of Products Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_1_image_url', + 'label' => __( 'Last Products Bought Product 1 Image URL', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_1_name', + 'label' => __( 'Last Products Bought Product 1 Name', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_1_price', + 'label' => __( 'Last Products Bought Product 1 Price', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'showCurrencySymbol' => true, + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_1_url', + 'label' => __( 'Last Products Bought Product 1 Url', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_2_image_url', + 'label' => __( 'Last Products Bought Product 2 Image URL', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_2_name', + 'label' => __( 'Last Products Bought Product 2 Name', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_2_price', + 'label' => __( 'Last Products Bought Product 2 Price', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_2_url', + 'label' => __( 'Last Products Bought Product 2 Url', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_3_image_url', + 'label' => __( 'Last Products Bought Product 3 Image URL', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_3_name', + 'label' => __( 'Last Products Bought Product 3 Name', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_3_price', + 'label' => __( 'Last Products Bought Product 3 Price', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'last_products_bought_product_3_url', + 'label' => __( 'Last Products Bought Product 3 Url', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + } elseif ( 'order' === $group_name ) { + + $group_properties[] = array( + 'name' => 'last_order_status', + 'label' => __( 'Last Order Status', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_order_statuses(), + ); + + $group_properties[] = array( + 'name' => 'last_order_fulfillment_status', + 'label' => __( 'Last Order Fulfillment Status', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_order_statuses(), + ); + + $group_properties[] = array( + 'name' => 'last_order_tracking_number', + 'label' => __( 'Last Order Tracking Number', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_order_tracking_url', + 'label' => __( 'Last Order Tracking URL', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_order_shipment_date', + 'label' => __( 'Last Order Shipment Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_order_order_number', + 'label' => __( 'Last Order Number', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_order_currency', + 'label' => __( 'Last Order Currency', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'total_number_of_current_orders', + 'label' => __( 'Total Number of Current Orders', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + } elseif ( 'rfm_fields' === $group_name ) { + + $group_properties[] = array( + 'name' => 'total_value_of_orders', + 'label' => __( 'Total Value of Orders', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'average_order_value', + 'label' => __( 'Average Order Value', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'total_number_of_orders', + 'label' => __( 'Total Number of Orders', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'first_order_value', + 'label' => __( 'First Order Value', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'first_order_date', + 'label' => __( 'First Order Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_order_value', + 'label' => __( 'Last Order Value', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'last_order_date', + 'label' => __( 'Last Order Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'average_days_between_orders', + 'label' => __( 'Average Days Between Orders', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'account_creation_date', + 'label' => __( 'Account Creation Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'monetary_rating', + 'label' => __( 'Monetary Rating', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_rfm_rating(), + ); + + $group_properties[] = array( + 'name' => 'order_frequency_rating', + 'label' => __( 'Order Frequency Rating', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_rfm_rating(), + ); + + $group_properties[] = array( + 'name' => 'order_recency_rating', + 'label' => __( 'Order Recency Rating', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_rfm_rating(), + ); + } elseif ( 'categories_bought' === $group_name ) { + + $group_properties[] = array( + 'name' => 'last_categories_bought', + 'label' => __( 'Last Categories Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'categories_bought', + 'label' => __( 'Categories Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + } elseif ( 'skus_bought' === $group_name ) { + + $group_properties[] = array( + 'name' => 'last_skus_bought', + 'label' => __( 'Last SKUs Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'skus_bought', + 'label' => __( 'SKUs Bought', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + } elseif ( 'subscriptions_details' == $group_name ) { + + $group_properties[] = array( + 'name' => 'last_subscription_order_number', + 'label' => __( 'Last Subscription Order Number', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_subscription_parent_order_number', + 'label' => __( 'Last Subscription Parent Order Number', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_subscription_order_status', + 'label' => __( 'Last Subscription Order Status', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_subscription_status_options(), + ); + + $group_properties[] = array( + 'name' => 'last_subscription_order_creation_date', + 'label' => __( 'Last Subscription Order Creation Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_subscription_order_paid_date', + 'label' => __( 'Last Subscription Order Paid Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_subscription_order_completed_date', + 'label' => __( 'Last Subscription Order Completed Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'related_last_order_creation_date', + 'label' => __( 'Related Last Order Creation Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'related_last_order_paid_date', + 'label' => __( 'Related Last Order Paid Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'related_last_order_completed_date', + 'label' => __( 'Related Last Order Completed Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_subscription_trial_end_date', + 'label' => __( 'Last Subscription Trial End Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_subscription_next_payment_date', + 'label' => __( 'Last Subscription Next Payment Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'last_subscription_billing_period', + 'label' => __( 'Last Subscription Billing Period', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_subscriptions_billing_period(), + ); + + $group_properties[] = array( + 'name' => 'last_subscription_billing_interval', + 'label' => __( 'Last Subscription Billing Interval', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_subscriptions_billing_interval(), + ); + + $group_properties[] = array( + 'name' => 'last_subscription_products', + 'label' => __( 'Last Subscription Products', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formField' => false, + ); + } elseif ( 'roi_tracking' === $group_name ) { + + $group_properties[] = array( + 'name' => 'customer_new_order', + 'label' => __( 'Customer New Order', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'options' => $this->hubwoo_new_order_status(), + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_recovery_workflow_conversion', + 'label' => __( 'Abandoned Cart Recovery Workflow Conversion', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'booleancheckbox', + 'formField' => false, + 'options' => $this->hubwoo_campaign_conversion_options(), + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_recovery_workflow_conversion_amount', + 'label' => __( 'Abandoned Cart Recovery Workflow Conversion Amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_recovery_workflow_conversion_date', + 'label' => __( 'Abandoned Cart Recovery Workflow Conversion Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_recovery_workflow_start_date', + 'label' => __( 'Abandoned Cart Recovery Workflow Start Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'current_roi_campaign', + 'label' => __( 'Current ROI Campaign', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formField' => false, + 'options' => $this->get_all_campaign_names(), + ); + + $group_properties[] = array( + 'name' => 'customer_reengagement_workflow_conversion', + 'label' => __( 'Customer Reengagement Workflow Conversion', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'booleancheckbox', + 'formField' => false, + 'options' => $this->hubwoo_campaign_conversion_options(), + ); + + $group_properties[] = array( + 'name' => 'customer_reengagement_workflow_conversion_amount', + 'label' => __( 'Customer Reengagement Workflow Conversion Amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'customer_reengagement_workflow_conversion_date', + 'label' => __( 'Customer Reengagement Workflow Conversion Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'customer_reengagement_workflow_start_date', + 'label' => __( 'Customer Reengagement Workflow Start Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'customer_rewards_workflow_conversion', + 'label' => __( 'Customer Rewards Workflow Conversion', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'booleancheckbox', + 'formField' => false, + 'options' => $this->hubwoo_campaign_conversion_options(), + ); + + $group_properties[] = array( + 'name' => 'customer_rewards_workflow_conversion_amount', + 'label' => __( 'Customer Rewards Workflow Conversion Amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'customer_rewards_workflow_conversion_date', + 'label' => __( 'Customer Rewards Workflow Conversion Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'customer_rewards_workflow_start_date', + 'label' => __( 'Customer Rewards Workflow Start Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'mql_capture_nurture_conversion_conversion', + 'label' => __( 'MQL Capture, Nurture & Conversion Conversion', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'booleancheckbox', + 'formField' => false, + 'options' => $this->hubwoo_campaign_conversion_options(), + ); + + $group_properties[] = array( + 'name' => 'mql_capture_nurture_conversion_conversion_amount', + 'label' => __( 'MQL Capture, Nurture & Conversion Conversion Amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'mql_capture_nurture_conversion_conversion_date', + 'label' => __( 'MQL Capture, Nurture & Conversion Conversion Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'mql_capture_nurture_conversion_start_date', + 'label' => __( 'MQL Capture, Nurture & Conversion Start date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'new_customer_workflow_conversion', + 'label' => __( 'New Customer Workflow Conversion', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'booleancheckbox', + 'formField' => false, + 'options' => $this->hubwoo_campaign_conversion_options(), + ); + + $group_properties[] = array( + 'name' => 'new_customer_workflow_conversion_amount', + 'label' => __( 'New Customer Workflow Conversion Amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'new_customer_workflow_conversion_date', + 'label' => __( 'New Customer Workflow Conversion Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'new_customer_workflow_start_date', + 'label' => __( 'New Customer Workflow Start Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'second_purchase_workflow_conversion', + 'label' => __( 'Second Purchase Workflow Conversion', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'booleancheckbox', + 'formField' => false, + 'options' => $this->hubwoo_campaign_conversion_options(), + ); + + $group_properties[] = array( + 'name' => 'second_purchase_workflow_conversion_amount', + 'label' => __( 'Second Purchase Workflow Conversion Amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'second_purchase_workflow_conversion_date', + 'label' => __( 'Second Purchase Workflow Conversion Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'second_purchase_workflow_start_date', + 'label' => __( 'Second Purchase Workflow Start Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'third_purchase_workflow_conversion', + 'label' => __( 'Third Purchase Workflow Conversion', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'booleancheckbox', + 'formField' => false, + 'options' => $this->hubwoo_campaign_conversion_options(), + ); + + $group_properties[] = array( + 'name' => 'third_purchase_workflow_conversion_amount', + 'label' => __( 'Third Purchase Workflow Conversion Amount', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formField' => false, + 'showCurrencySymbol' => true, + ); + + $group_properties[] = array( + 'name' => 'third_purchase_workflow_conversion_date', + 'label' => __( 'Third Purchase Workflow Conversion Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + + $group_properties[] = array( + 'name' => 'third_purchase_workflow_start_date', + 'label' => __( 'Third Purchase Workflow Start Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formField' => false, + ); + } elseif ( 'abandoned_cart' === $group_name ) { + + $group_properties[] = array( + 'name' => 'current_abandoned_cart', + 'label' => __( 'Current Abandoned Cart', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'enumeration', + 'fieldType' => 'select', + 'formfield' => false, + 'options' => Hubwoo_Admin::get_abandoned_cart_status(), + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_date', + 'label' => __( 'Abandoned Cart Date', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'date', + 'fieldType' => 'date', + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_counter', + 'label' => __( 'Abandoned Cart Counter', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_url', + 'label' => __( 'Abandoned Cart URL', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'text', + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_products_skus', + 'label' => __( 'Abandoned Cart Products SKUs', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_products_categories', + 'label' => __( 'Abandoned Cart Products Categories', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_products', + 'label' => __( 'Abandoned Cart Products', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_products_html', + 'label' => __( 'Abandoned Cart Products HTML', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'string', + 'fieldType' => 'textarea', + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_tax_value', + 'label' => __( 'Abandoned Cart Tax Value', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'showCurrencySymbol' => true, + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_subtotal', + 'label' => __( 'Abandoned Cart Subtotal', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'showCurrencySymbol' => true, + 'formfield' => false, + ); + + $group_properties[] = array( + 'name' => 'abandoned_cart_total_value', + 'label' => __( 'Abandoned Cart Total Value', 'makewebbetter-hubspot-for-woocommerce' ), + 'type' => 'number', + 'fieldType' => 'number', + 'showCurrencySymbol' => true, + 'formfield' => false, + ); + } + } + + return apply_filters( 'hubwoo_group_properties', $group_properties, $group_name ); + } + + /** + * Get all active lists for hubspot. + * + * @since 1.0.0 + */ + private function get_all_active_lists() { + + $lists = array(); + + $optin = 'yes'; + $abandoned_status = 'yes'; + $property_updated = get_option( 'hubwoo_newsletter_property_update', 'no' ); + $abandoned_property_updated = get_option( 'hubwoo_abandoned_property_update', 'no' ); + + if ( ! empty( $property_updated ) && 'yes' == $property_updated ) { + if ( 'yes' == $optin ) { + $optin = true; + } + } + + if ( ! empty( $abandoned_property_updated ) && 'yes' == $abandoned_property_updated ) { + + $abandoned_status = true; + } + + $lists[] = array( + + 'name' => __( 'Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 'customer', + 'property' => 'lifecyclestage', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Leads', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 'lead', + 'property' => 'lifecyclestage', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Abandoned Cart', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => $abandoned_status, + 'property' => 'current_abandoned_cart', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Best Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'order_frequency_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'order_recency_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Big Spenders', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Loyal Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'order_frequency_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'order_recency_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Churning Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 5, + 'property' => 'order_frequency_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'order_recency_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Low Value Lost Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'order_frequency_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'order_recency_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'New Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'order_frequency_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'order_recency_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Customers needing attention', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 3, + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'EQ', + 'value' => 3, + 'property' => 'order_frequency_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'SET_ANY', + 'value' => implode( ';', array( 1, 2 ) ), + 'property' => 'order_recency_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'About to Sleep', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'SET_ANY', + 'value' => implode( ';', array( 1, 2 ) ), + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'SET_ANY', + 'value' => implode( ';', array( 1, 2 ) ), + 'property' => 'order_frequency_rating', + 'type' => 'enumeration', + ), + array( + 'operator' => 'SET_ANY', + 'value' => implode( ';', array( 1, 2 ) ), + 'property' => 'order_recency_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Mid Spenders', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 3, + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Low Spenders', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'monetary_rating', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Newsletter Subscriber', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => $optin, + 'property' => 'newsletter_subscription', + 'type' => 'enumeration', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'One time purchase customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 1, + 'property' => 'total_number_of_orders', + 'type' => 'number', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Two time purchase customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 2, + 'property' => 'total_number_of_orders', + 'type' => 'number', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Three time purchase customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 3, + 'property' => 'total_number_of_orders', + 'type' => 'number', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Bought four or more times', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 4, + 'property' => 'total_number_of_orders', + 'type' => 'number', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'Marketing Qualified Leads', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'EQ', + 'value' => 'marketingqualifiedlead', + 'property' => 'lifecyclestage', + 'type' => 'enumeration', + ), + ), + ), + ); + $lists[] = array( + + 'name' => __( 'Engaged Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'operator' => 'WITHIN_TIME', + 'withinLastTime' => 60, + 'withinLastTimeUnit' => 'DAYS', + 'withinLastDays' => 60, + 'withinTimeMode' => 'PAST', + 'property' => 'last_order_date', + 'type' => 'date', + ), + ), + ), + ); + + $lists[] = array( + + 'name' => __( 'DisEngaged Customers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'withinLastTime' => 60, + 'withinLastTimeUnit' => 'DAYS', + 'reverseWithinTimeWindow' => true, + 'withinLastDays' => 60, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'operator' => 'WITHIN_TIME', + 'property' => 'last_order_date', + ), + array( + 'withinLastTime' => 180, + 'withinLastTimeUnit' => 'DAYS', + 'withinLastDays' => 180, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'operator' => 'WITHIN_TIME', + 'property' => 'last_order_date', + ), + ), + ), + ); + + $lists[] = array( + 'name' => __( 'Repeat Buyers', 'makewebbetter-hubspot-for-woocommerce' ), + 'dynamic' => true, + 'filters' => array( + array( + array( + 'type' => 'number', + 'operator' => 'GTE', + 'property' => 'total_number_of_orders', + 'value' => 5, + ), + array( + 'type' => 'number', + 'operator' => 'LTE', + 'property' => 'average_days_between_orders', + 'value' => 30, + ), + ), + ), + ); + + return apply_filters( 'hubwoo_lists', $lists ); + } + + /** + * Get all workflows. + * + * @since 1.0.0 + */ + private function get_all_workflows() { + + $workflows = array(); + + $abandoned_status = 'yes'; + $abandoned_property_updated = get_option( 'hubwoo_abandoned_property_update', 'no' ); + + if ( ! empty( $abandoned_property_updated ) && 'yes' == $abandoned_property_updated ) { + + $abandoned_status = true; + } + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: MQL to Customer lifecycle stage Conversion', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'mql_capture_nurture_conversion_start_date', + 'name' => 'MQL Capture, Nurture & Conversion Start Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'MQL Nurture & Conversion', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + array( + 'type' => 'DELAY', + 'delayMillis' => 172800000, + ), + array( + 'type' => 'DELAY', + 'delayMillis' => 432000000, + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'lifecyclestage', + 'value' => 'customer', + 'operator' => 'SET_ANY', + ), + ), + ), + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: Welcome New Customer & Get a 2nd Order', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'New Customer Welcome & Get a 2nd Order', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'second_purchase_workflow_start_date', + 'name' => 'Second Purchase Workflow Start Date', + ), + array( + 'type' => 'DELAY', + 'delayMillis' => 172800000, + ), + array( + 'type' => 'DELAY', + 'delayMillis' => 172800000, + ), + array( + 'type' => 'DELAY', + 'delayMillis' => 604800000, + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'number', + 'property' => 'total_number_of_orders', + 'value' => 1, + 'operator' => 'GT', + ), + ), + ), + 'onlyExecOnBizDays' => true, + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: 2nd Order Thank You & Get a 3rd Order', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'DELAY', + 'delayMillis' => 172800000, + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => '2nd Order Thank You & Get a 3rd Order', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'third_purchase_workflow_start_date', + 'name' => 'Third Purchase Workflow Start Date', + ), + array( + 'type' => 'DELAY', + 'delayMillis' => 172800000, + ), + + array( + 'type' => 'DELAY', + 'delayMillis' => 172800000, + ), + + array( + 'type' => 'DELAY', + 'delayMillis' => 432000000, + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'number', + 'property' => 'total_number_of_orders', + 'value' => 2, + 'operator' => 'GT', + ), + ), + ), + 'onlyExecOnBizDays' => true, + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: 3rd Order Thank You', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'DELAY', + 'delayMillis' => 172800000, + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => '3rd Order Thank You', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Current ROI Campaign', + ), + ), + 'onlyExecOnBizDays' => true, + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: ROI Calculation', + 'enabled' => true, + 'enrollOnCriteriaUpdate' => true, + 'actions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'current_roi_campaign', + 'value' => 'MQL Nurture & Conversion', + 'operator' => 'SET_ANY', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'true', + 'propertyName' => 'mql_capture_nurture_conversion_conversion', + 'name' => 'Set Property', + ), + array( + 'type' => 'COPY_PROPERTY', + 'sourceProperty' => 'last_order_value', + 'targetProperty' => 'mql_capture_nurture_conversion_conversion_amount', + 'targetModel' => 'CONTACT', + 'name' => 'Copy property', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'mql_capture_nurture_conversion_conversion_date', + 'model' => 'CONTACT', + 'name' => 'MQL Capture, Nurture & Conversion Conversion Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'current_roi_campaign', + 'value' => 'New Customer Welcome & Get a 2nd Order', + 'operator' => 'SET_ANY', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'true', + 'propertyName' => 'new_customer_workflow_conversion', + 'name' => 'Set Property', + ), + array( + 'type' => 'COPY_PROPERTY', + 'sourceProperty' => 'last_order_value', + 'targetProperty' => 'new_customer_workflow_conversion_amount', + 'targetModel' => 'CONTACT', + 'name' => 'Copy property', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'new_customer_workflow_conversion_date', + 'model' => 'CONTACT', + 'name' => 'New Customer Workflow Conversion Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'current_roi_campaign', + 'value' => '2nd Order Thank You & Get a 3rd Order', + 'operator' => 'SET_ANY', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'true', + 'propertyName' => 'second_purchase_workflow_conversion', + 'name' => 'Set Property', + ), + array( + 'type' => 'COPY_PROPERTY', + 'sourceProperty' => 'last_order_value', + 'targetProperty' => 'second_purchase_workflow_conversion_amount', + 'targetModel' => 'CONTACT', + 'name' => 'Copy property', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'second_purchase_workflow_conversion_date', + 'model' => 'CONTACT', + 'name' => 'Second Purchase Workflow Conversion Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'current_roi_campaign', + 'value' => '3rd Order Thank You', + 'operator' => 'SET_ANY', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'true', + 'propertyName' => 'third_purchase_workflow_conversion', + 'name' => 'Set Property', + ), + array( + 'type' => 'COPY_PROPERTY', + 'sourceProperty' => 'last_order_value', + 'targetProperty' => 'third_purchase_workflow_conversion_amount', + 'targetModel' => 'CONTACT', + 'name' => 'COPY_PROPERTY', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'third_purchase_workflow_conversion_date', + 'model' => 'CONTACT', + 'name' => 'Third Purchase Workflow Conversion Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'current_roi_campaign', + 'value' => 'Customer Reengagement', + 'operator' => 'SET_ANY', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'true', + 'propertyName' => 'customer_reengagement_workflow_conversion', + 'name' => 'Set Property', + ), + array( + 'type' => 'COPY_PROPERTY', + 'sourceProperty' => 'last_order_value', + 'targetProperty' => 'customer_reengagement_workflow_conversion_amount', + 'targetModel' => 'CONTACT', + 'name' => 'Copy property', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'customer_reengagement_workflow_conversion_date', + 'name' => 'Customer Reengagement Workflow Conversion Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'current_roi_campaign', + 'value' => 'Customer Rewards', + 'operator' => 'SET_ANY', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'true', + 'propertyName' => 'customer_rewards_workflow_conversion', + 'name' => 'Set Property', + ), + array( + 'type' => 'COPY_PROPERTY', + 'sourceProperty' => 'last_order_value', + 'targetProperty' => 'customer_rewards_workflow_conversion_amount', + 'targetModel' => 'CONTACT', + 'name' => 'Copy property', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'customer_rewards_workflow_conversion_date', + 'model' => 'CONTACT', + 'name' => 'Customer Rewards Workflow Conversion Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'enumeration', + 'property' => 'current_roi_campaign', + 'value' => 'Abandoned Cart Recovery', + 'operator' => 'SET_ANY', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'true', + 'propertyName' => 'abandoned_cart_recovery_workflow_conversion', + 'name' => 'Set Property', + ), + array( + 'type' => 'COPY_PROPERTY', + 'sourceProperty' => 'last_order_value', + 'targetProperty' => 'abandoned_cart_recovery_workflow_conversion_amount', + 'targetModel' => 'CONTACT', + 'name' => 'Copy Property', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'abandoned_cart_recovery_workflow_conversion_date', + 'model' => 'CONTACT', + 'name' => 'Abandoned Cart Recovery Workflow Conversion Date', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'None', + 'propertyName' => 'current_roi_campaign', + 'name' => 'Set Property', + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ); + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: After order Workflow', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'number', + 'property' => 'total_number_of_orders', + 'value' => 3, + 'operator' => 'EQ', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: 3rd Order Thank You', + 'workflowId' => get_option( 'WooCommerce: 3rd Order Thank You', '' ), + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => '', + 'propertyName' => 'customer_new_order', + 'name' => 'Customer New Order', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'number', + 'property' => 'total_number_of_orders', + 'value' => 2, + 'operator' => 'EQ', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: 2nd Order Thank You & Get a 3rd Order', + 'workflowId' => get_option( 'WooCommerce: 2nd Order Thank You & Get a 3rd Order', '' ), + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => '', + 'propertyName' => 'customer_new_order', + 'name' => 'Customer New Order', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'type' => 'number', + 'property' => 'total_number_of_orders', + 'value' => 1, + 'operator' => 'EQ', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: Welcome New Customer & Get a 2nd Order', + 'workflowId' => get_option( 'WooCommerce: Welcome New Customer & Get a 2nd Order', '' ), + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => '', + 'propertyName' => 'customer_new_order', + 'name' => 'Customer New Order', + ), + ), + 'rejectActions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => '', + 'propertyName' => 'customer_new_order', + 'name' => 'Customer New Order', + ), + ), + ), + ), + ), + ), + ), + ), + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: Order Workflow', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'DELAY', + 'delayMillis' => 300000, + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => '', + 'propertyName' => 'lifecyclestage', + 'name' => 'Lifecycle stage', + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 'customer', + 'propertyName' => 'lifecyclestage', + 'name' => 'Lifecycle stage', + ), + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'workflowId' => get_option( 'WooCommerce: ROI Calculation', '' ), + 'name' => 'WooCommerce: ROI Calculation', + ), + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'workflowId' => get_option( 'WooCommerce: After order Workflow', '' ), + 'name' => 'WooCommerce: After order Workflow', + ), + ), + 'enrollOnCriteriaUpdate' => true, + 'segmentCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'PropertyValue', + 'type' => 'enumeration', + 'property' => 'customer_new_order', + 'value' => 'yes', + 'operator' => 'SET_ANY', + ), + ), + ), + ); + + if ( 'yes' == get_option( 'hubwoo_abncart_enable_addon', 'yes' ) ) { + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: Abandoned Cart Recovery', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'propertyName' => 'current_roi_campaign', + 'newValue' => 'Abandoned Cart Recovery', + 'name' => 'Current ROI Campaign', + ), + array( + 'type' => 'DATE_STAMP_PROPERTY', + 'propertyName' => 'abandoned_cart_recovery_workflow_start_date', + 'name' => 'Abandoned Cart Recovery Workflow Start Date', + ), + + array( + 'type' => 'DELAY', + 'delayMillis' => 345600000, + ), + + array( + 'type' => 'DELAY', + 'delayMillis' => 1209600000, + ), + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'propertyName' => 'current_roi_campaign', + 'newValue' => 'None', + 'name' => 'Current ROI Campaign', + ), + ), + 'onlyExecOnBizDays' => true, + 'enrollOnCriteriaUpdate' => true, + 'segmentCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'PropertyValue', + 'type' => 'enumeration', + 'property' => 'current_abandoned_cart', + 'value' => $abandoned_status, + 'operator' => 'SET_ANY', + ), + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'Workflow', + 'workflowId' => get_option( 'WooCommerce: Order Workflow', '' ), + 'operator' => 'ACTIVE_IN_WORKFLOW', + ), + ), + ), + 'reEnrollmentTriggerSets' => array( + array( + array( + 'type' => 'CONTACT_PROPERTY_NAME', + 'id' => 'current_abandoned_cart', + ), + array( + 'type' => 'CONTACT_PROPERTY_VALUE', + 'id' => $abandoned_status, + ), + ), + ), + ); + + } + + $workflows[] = array( + + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: set Order Recency 1 Ratings', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 1, + 'propertyName' => 'order_recency_rating', + 'name' => 'Order Recency Rating', + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'Workflow', + 'workflowId' => get_option( 'WooCommerce: Order Workflow', '' ), + 'operator' => 'ACTIVE_IN_WORKFLOW', + ), + ), + ), + ); + + $workflows[] = array( + + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: set Order Recency 2 Ratings', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 2, + 'propertyName' => 'order_recency_rating', + 'name' => 'Order Recency Rating', + ), + array( + 'type' => 'DELAY', + 'delayMillis' => '31104000000', + ), + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 1 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 1 Ratings', '' ), + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'Workflow', + 'workflowId' => get_option( 'WooCommerce: Order Workflow', '' ), + 'operator' => 'ACTIVE_IN_WORKFLOW', + ), + ), + ), + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: set Order Recency 3 Ratings', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 3, + 'propertyName' => 'order_recency_rating', + 'name' => 'Order Recency Rating', + ), + array( + 'type' => 'DELAY', + 'delayMillis' => '15552000000', + ), + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 2 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 2 Ratings', '' ), + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'Workflow', + 'workflowId' => get_option( 'WooCommerce: Order Workflow', '' ), + 'operator' => 'ACTIVE_IN_WORKFLOW', + ), + ), + ), + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: set Order Recency 4 Ratings', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 4, + 'propertyName' => 'order_recency_rating', + 'name' => 'Order Recency Rating', + ), + array( + 'type' => 'DELAY', + 'delayMillis' => '7776000000', + ), + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 3 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 3 Ratings', '' ), + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'Workflow', + 'workflowId' => get_option( 'WooCommerce: Order Workflow', '' ), + 'operator' => 'ACTIVE_IN_WORKFLOW', + ), + ), + ), + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: set Order Recency 5 Ratings', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'SET_CONTACT_PROPERTY', + 'newValue' => 5, + 'propertyName' => 'order_recency_rating', + 'name' => 'Order Recency Rating', + ), + array( + 'type' => 'DELAY', + 'delayMillis' => '2592000000', + ), + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 4 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 4 Ratings', '' ), + ), + ), + 'goalCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'Workflow', + 'workflowId' => get_option( 'WooCommerce: Order Workflow', '' ), + 'operator' => 'ACTIVE_IN_WORKFLOW', + ), + ), + ), + ); + + $workflows[] = array( + + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: Update Historical Order Recency Rating', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinLastTime' => 31, + 'withinLastTimeUnit' => 'DAYS', + 'withinLastDays' => 31, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'property' => 'last_order_date', + 'operator' => 'WITHIN_TIME', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 5 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 5 Ratings', '' ), + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinLastTime' => 30, + 'withinLastTimeUnit' => 'DAYS', + 'reverseWithinTimeWindow' => true, + 'withinLastDays' => 30, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'property' => 'last_order_date', + 'operator' => 'WITHIN_TIME', + ), + array( + 'withinLastTime' => 91, + 'withinLastTimeUnit' => 'DAYS', + 'withinLastDays' => 91, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'property' => 'last_order_date', + 'operator' => 'WITHIN_TIME', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 4 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 4 Ratings', '' ), + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinLastTime' => 90, + 'withinLastTimeUnit' => 'DAYS', + 'reverseWithinTimeWindow' => true, + 'withinLastDays' => 90, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'property' => 'last_order_date', + 'operator' => 'WITHIN_TIME', + ), + array( + 'withinLastTime' => 181, + 'withinLastTimeUnit' => 'DAYS', + 'withinLastDays' => 181, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'property' => 'last_order_date', + 'operator' => 'WITHIN_TIME', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 3 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 3 Ratings', '' ), + ), + ), + 'rejectActions' => array( + array( + 'type' => 'BRANCH', + 'filters' => array( + array( + array( + 'withinLastTime' => 180, + 'withinLastTimeUnit' => 'DAYS', + 'reverseWithinTimeWindow' => true, + 'withinLastDays' => 180, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'property' => 'last_order_date', + 'operator' => 'WITHIN_TIME', + ), + array( + 'withinLastTime' => 365, + 'withinLastTimeUnit' => 'DAYS', + 'withinLastDays' => 365, + 'withinTimeMode' => 'PAST', + 'type' => 'date', + 'property' => 'last_order_date', + 'operator' => 'WITHIN_TIME', + ), + ), + ), + 'acceptActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 2 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 2 Ratings', '' ), + ), + ), + 'rejectActions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'name' => 'WooCommerce: set Order Recency 1 Ratings', + 'workflowId' => get_option( 'WooCommerce: set Order Recency 1 Ratings', '' ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ); + + $workflows[] = array( + 'type' => 'DRIP_DELAY', + 'name' => 'WooCommerce: Enroll Customers for Recency Settings', + 'enabled' => true, + 'actions' => array( + array( + 'type' => 'WORKFLOW_ENROLLMENT', + 'workflowId' => get_option( 'WooCommerce: Update Historical Order Recency Rating', '' ), + 'name' => 'WooCommerce: Update Historical Order Recency Rating', + ), + ), + 'enrollOnCriteriaUpdate' => true, + 'segmentCriteria' => array( + array( + array( + 'withinTimeMode' => 'PAST', + 'filterFamily' => 'PropertyValue', + 'type' => 'enumeration', + 'property' => 'lifecyclestage', + 'value' => 'customer', + 'operator' => 'SET_ANY', + ), + ), + ), + 'reEnrollmentTriggerSets' => array( + array( + array( + 'type' => 'CONTACT_PROPERTY_NAME', + 'id' => 'lifecyclestage', + ), + array( + 'type' => 'CONTACT_PROPERTY_VALUE', + 'id' => 'customer', + ), + ), + ), + ); + + return apply_filters( 'hubwoo_workflows', $workflows ); + } + + /** + * Customer new order. + * + * @since 1.0.0 + */ + public function hubwoo_new_order_status() { + + $values = array(); + + $values[] = array( + 'label' => __( 'Yes', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'yes', + ); + $values[] = array( + 'label' => __( 'No', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'no', + ); + + return $values; + } + + /** + * Get optin sources. + * + * @since 1.0.0 + */ + public function get_user_marketing_sources() { + + $sources = array(); + $sources[] = array( + 'label' => __( 'Checkout', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'checkout', + ); + $sources[] = array( + 'label' => __( 'Registration', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'registration', + ); + $sources[] = array( + 'label' => __( 'Others', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'other', + ); + $sources = apply_filters( 'hubwoo_user_marketing_sources', $sources ); + return $sources; + } + + /** + * Get all campaigns names for hubspot. + * + * @since 1.0.0 + */ + public function get_all_campaign_names() { + + $all_names = array(); + + $all_names[] = array( + 'label' => 'MQL Nurture & Conversion', + 'value' => 'MQL Nurture & Conversion', + ); + + $all_names[] = array( + 'label' => 'New Customer Welcome & Get a 2nd Order', + 'value' => 'New Customer Welcome & Get a 2nd Order', + ); + + $all_names[] = array( + 'label' => '2nd Order Thank You & Get a 3rd Order', + 'value' => '2nd Order Thank You & Get a 3rd Order', + ); + + $all_names[] = array( + 'label' => '3rd Order Thank You', + 'value' => '3rd Order Thank You', + ); + + $all_names[] = array( + 'label' => 'Customer Reengagement', + 'value' => 'Customer Reengagement', + ); + + $all_names[] = array( + 'label' => 'Customer Rewards', + 'value' => 'Customer Rewards', + ); + + $all_names[] = array( + 'label' => 'Abandoned Cart Recovery', + 'value' => 'Abandoned Cart Recovery', + ); + + $all_names[] = array( + 'label' => 'None', + 'value' => 'None', + ); + + return $all_names; + } + + /** + * Conversion options for campaigns on hubspot. + * + * @since 1.0.0 + */ + public function hubwoo_campaign_conversion_options() { + + $values = array(); + + $values[] = array( + 'label' => __( 'Yes', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'true', + ); + $values[] = array( + 'label' => __( 'No', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'false', + ); + + return $values; + } + + /** + * Get subscriptions billing period for hubspot. + * + * @since 1.0.0 + */ + public static function get_subscriptions_billing_period() { + + $values = array(); + + $values[] = array( + 'label' => __( 'Day', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'day', + ); + $values[] = array( + 'label' => __( 'Week', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'week', + ); + $values[] = array( + 'label' => __( 'Month', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'month', + ); + $values[] = array( + 'label' => __( 'Year', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'year', + ); + + $values = apply_filters( 'hubwoo_subscriptions_period', $values ); + + return $values; + } + + /** + * Get subscriptions billing interval for hubspot. + * + * @since 1.0.0 + */ + public static function get_subscriptions_billing_interval() { + + $values = array(); + + $values[] = array( + 'label' => __( 'Every', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 1, + ); + $values[] = array( + 'label' => __( 'Every Second', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 2, + ); + $values[] = array( + 'label' => __( 'Every Third', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 3, + ); + $values[] = array( + 'label' => __( 'Every Fourth', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 4, + ); + $values[] = array( + 'label' => __( 'Every Fifth', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 5, + ); + $values[] = array( + 'label' => __( 'Every Sixth', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 6, + ); + + $values = apply_filters( 'hubwoo_subscriptions_interval', $values ); + + return $values; + } + + /** + * Get all available woocommerce order statuses. + * + * @return JSON Order statuses in the form of enumaration options. + * @since 1.0.0 + */ + public static function get_order_statuses() { + + $all_wc_statuses = array(); + + // get all statuses. + $all_status = wc_get_order_statuses(); + + // if status available. + if ( is_array( $all_status ) && count( $all_status ) ) { + + foreach ( $all_status as $status_id => $status_label ) { + + $all_wc_statuses[] = array( + 'label' => $status_label, + 'value' => $status_id, + ); + } + } + $all_wc_statuses = apply_filters( 'hubwoo_order_status_options', $all_wc_statuses ); + + return $all_wc_statuses; + } + + /** + * Get all available woocommerce order statuses for subscriptions. + * + * @return JSON Order statuses in the form of enumaration options. + * @since 1.0.0 + */ + public static function get_subscription_status_options() { + + $all_wc_subs_status = array(); + + // get all statuses. + $all_status = wcs_get_subscription_statuses(); + + // if status available. + if ( is_array( $all_status ) && count( $all_status ) ) { + + foreach ( $all_status as $status_id => $status_label ) { + + $all_wc_subs_status[] = array( + 'label' => $status_label, + 'value' => $status_id, + ); + } + } + + $all_wc_subs_status = apply_filters( 'hubwoo_order_status_options', $all_wc_subs_status ); + + return $all_wc_subs_status; + } + + /** + * Get ratings for RFM analysis. + * + * @return ratings for RFM analysis. + * @since 1.0.0 + */ + public function get_rfm_rating() { + + $rating = array(); + + $rating[] = array( + 'label' => __( '5', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 5, + ); + $rating[] = array( + 'label' => __( '4', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 4, + ); + $rating[] = array( + 'label' => __( '3', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 3, + ); + $rating[] = array( + 'label' => __( '2', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 2, + ); + $rating[] = array( + 'label' => __( '1', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 1, + ); + + $rating = apply_filters( 'hubwoo_rfm_ratings', $rating ); + + return $rating; + } + + /** + * Get user actions for marketing. + * + * @return array marketing actions for users. + * @since 1.0.0 + */ + public function get_user_marketing_action() { + + $user_actions = array(); + + $user_actions[] = array( + 'label' => __( 'Yes', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'yes', + ); + $user_actions[] = array( + 'label' => __( 'No', 'makewebbetter-hubspot-for-woocommerce' ), + 'value' => 'no', + ); + + $user_actions = apply_filters( 'hubwoo_user_marketing_actions', $user_actions ); + + return $user_actions; + } + + /** + * Last order products html for hubspot. + * + * @since 1.0.0 + * @param int $last_order_id last order if to create html. + */ + public function hubwoo_last_order_html( $last_order_id = '' ) { + + $products_html = ''; + + if ( ! empty( $last_order_id ) ) { + + $order = new WC_Order( $last_order_id ); + + $key = 0; + + $last_order_products = array(); + + if ( ! empty( $order ) || ! is_wp_error( $order ) ) { + + $order_items = $order->get_items(); + + if ( is_array( $order_items ) && count( $order_items ) ) { + + foreach ( $order_items as $item_id_1 => $wc_order_item_product ) { + + if ( ! empty( $wc_order_item_product ) && $wc_order_item_product instanceof WC_Order_Item ) { + + $item_id = $wc_order_item_product->get_variation_id(); + + if ( empty( $item_id ) ) { + $item_id = $wc_order_item_product->get_product_id(); + } + + $product = wc_get_product( $item_id ); + + if ( get_post_status( $item_id ) == 'trash' || get_post_status( $item_id ) == false ) { + + continue; + } + + $attachment_src = wp_get_attachment_image_src( get_post_thumbnail_id( $product->get_id() ), 'single-post-thumbnail' ); + + $last_order_products[ $key ]['image'] = isset( $attachment_src[0] ) ? $attachment_src[0] : ''; + $last_order_products[ $key ]['name'] = get_the_title( $item_id ); + $last_order_products[ $key ]['url'] = get_permalink( $item_id ); + $last_order_products[ $key ]['price'] = $product->get_price(); + $last_order_products[ $key ]['qty'] = $wc_order_item_product->get_quantity(); + $last_order_products[ $key ]['disc'] = $wc_order_item_product->get_total(); + $key++; + } + } + } + } + + if ( count( $last_order_products ) ) { + + $products_html = '

'; + + foreach ( $last_order_products as $single_product ) { + + $total = $single_product['disc']; + $disc = ( (int) $single_product['price'] * $single_product['qty'] ) - $total; + $products_html .= ''; + } + + $products_html .= '
' . __( 'Image', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Item', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Qty', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Price', 'huwboo' ) . '' . __( 'Discount', 'makewebbetter-hubspot-for-woocommerce' ) . '' . __( 'Total', 'makewebbetter-hubspot-for-woocommerce' ) . '
' . $single_product['name'] . '' . $single_product['qty'] . '' . wc_price( $single_product['price'], array( 'currency' => $order->get_currency() ) ) . '' . wc_price( $disc, array( 'currency' => $order->get_currency() ) ) . '' . wc_price( $total, array( 'currency' => $order->get_currency() ) ) . '

'; + } + } + + return $products_html; + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoocustomer.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoocustomer.php new file mode 100644 index 00000000..a9d1f7d3 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoocustomer.php @@ -0,0 +1,311 @@ +_contact_id = $contact_id; + + // store the instance of property callback. + $this->_callback_instance = new HubWooPropertyCallbacks( $this->_contact_id ); + + // prepare the modified fields data and store it in the contact. + $this->prepare_modified_fields(); + } + + /** + * Get user email. + * + * @since 1.0.0 + */ + public function get_email() { + + return $this->_callback_instance->_get_mail(); + } + + /** + * Get all properties with values. + * + * @return array and key value pair array of properties. + * @since 1.0.0 + */ + public function get_contact_properties() { + + // let others decide if they have modified fields in there integration. + $this->_properties = apply_filters( 'hubwoo_contact_modified_fields', $this->_properties, $this->_contact_id ); + return $this->_properties; + } + + /** + * Get all properties with values. + * + * @param array $properties array of contact properties. + * @return array $properties array of properties with user value. + * @since 1.0.0 + */ + public function get_user_data_properties( $properties ) { + + $fname = get_user_meta( $this->_contact_id, 'first_name', true ); + if ( ! empty( $fname ) ) { + $properties[] = array( + 'property' => 'firstname', + 'value' => $fname, + ); + } + + $lname = get_user_meta( $this->_contact_id, 'last_name', true ); + if ( ! empty( $lname ) ) { + $properties[] = array( + 'property' => 'lastname', + 'value' => $lname, + ); + } + + $cname = get_user_meta( $this->_contact_id, 'billing_company', true ); + if ( ! empty( $cname ) ) { + $properties[] = array( + 'property' => 'company', + 'value' => $cname, + ); + } + + $phone = get_user_meta( $this->_contact_id, 'billing_phone', true ); + if ( ! empty( $phone ) ) { + $properties[] = array( + 'property' => 'mobilephone', + 'value' => $phone, + ); + $properties[] = array( + 'property' => 'phone', + 'value' => $phone, + ); + } + + $city = get_user_meta( $this->_contact_id, 'billing_city', true ); + if ( ! empty( $city ) ) { + $properties[] = array( + 'property' => 'city', + 'value' => $city, + ); + } + + $state = get_user_meta( $this->_contact_id, 'billing_state', true ); + if ( ! empty( $state ) ) { + $properties[] = array( + 'property' => 'state', + 'value' => $state, + ); + } + + $country = get_user_meta( $this->_contact_id, 'billing_country', true ); + if ( ! empty( $country ) ) { + $properties[] = array( + 'property' => 'country', + 'value' => Hubwoo::map_country_by_abbr( $country ), + ); + } + + $address1 = get_user_meta( $this->_contact_id, 'billing_address_1', true ); + $address2 = get_user_meta( $this->_contact_id, 'billing_address_2', true ); + + if ( ! empty( $address1 ) || ! empty( $address2 ) ) { + $address = $address1 . ' ' . $address2; + $properties[] = array( + 'property' => 'address', + 'value' => $address, + ); + } + + $postcode = get_user_meta( $this->_contact_id, 'billing_postcode', true ); + if ( ! empty( $postcode ) ) { + $properties[] = array( + 'property' => 'zip', + 'value' => $postcode, + ); + } + + $prop_index = array_search( 'customer_new_order', array_column( $properties, 'property' ) ); + + $customer_new_order_flag = 'no'; + + if ( ! Hubwoo_Admin::hubwoo_check_for_cart( $properties ) ) { + if ( Hubwoo_Admin::hubwoo_check_for_properties( 'order_recency_rating', 5, $properties ) ) { + if ( Hubwoo_Admin::hubwoo_check_for_properties( 'last_order_status', get_option( 'hubwoo_no_status', 'wc-completed' ), $properties ) ) { + $customer_new_order_flag = 'yes'; + } + } + } + + if ( $prop_index ) { + $properties[ $prop_index ]['value'] = $customer_new_order_flag; + } else { + $properties[] = array( + 'property' => 'customer_new_order', + 'value' => $customer_new_order_flag, + ); + } + + $properties = apply_filters( 'hubwoo_unset_workflow_properties', $properties ); + $properties = apply_filters( 'hubwoo_map_new_properties', $properties, $this->_contact_id ); + + if ( Hubwoo_Admin::hubwoo_check_for_cart( $properties ) ) { + update_user_meta( $this->_contact_id, 'hubwoo_pro_user_cart_sent', 'yes' ); + } + return $properties; + } + + /** + * Format modified fields of customer. + * + * Check for all the modified fields till the last update + * and prepare them in the hubspot api acceptable form. + * + * @since 1.0.0 + */ + private function prepare_modified_fields() { + + $hubwoo_vid = $this->get_hubwoo_vid(); + + if ( ! empty( $hubwoo_vid ) && $hubwoo_vid > 0 ) { + + $modified_fields = $this->get_contact_modified_fields(); + } else { + + $modified_fields = HubWooContactProperties::get_instance()->hubwoo_get_filtered_properties(); + } + + if ( is_array( $modified_fields ) && count( $modified_fields ) ) { + + foreach ( $modified_fields as $group_fields ) { + + if ( is_array( $group_fields ) ) { + + foreach ( $group_fields as $field ) { + $property = $this->_prepare_property( $field ); + + if ( is_array( $property ) && ! empty( $property['value'] ) ) { + + $this->_properties[] = array( + 'property' => $property['property'], + 'value' => $property['value'], + ); + } + } + } + } + } + } + + /** + * Check if the contact is not uploaded to hubspot. + * + * @return Int/null hubspot vid if pre-uploaded either null. + * @since 1.0.0 + */ + private function get_hubwoo_vid() { + + return get_user_meta( $this->_contact_id, 'hubwoo_vid', true ); + } + + /** + * Get modified fields since last update of the contact. + * + * @return Array Array of fields modified. + */ + public function get_contact_modified_fields() { + + $modified_fields = get_user_meta( $this->_contact_id, 'hubwoo_modified_fields', true ); + + if ( ! is_array( $modified_fields ) ) { + + $modified_fields = array(); + } + + return $modified_fields; + } + + /** + * Prepare property in the form of key value accepted by hubspot. + * + * @param array $property array of the property details to validate the value. + * @return array formatted key value pair. + */ + public function _prepare_property( $property ) { + + $property_name = isset( $property['name'] ) ? $property['name'] : ''; + + if ( ! empty( $property_name ) ) { + + $property_val = $this->_callback_instance->_get_property_value( $property_name, $this->_contact_id ); + + $property = array( + 'property' => $property_name, + 'value' => $property_val, + ); + + return $property; + } + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoodatasync.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoodatasync.php new file mode 100644 index 00000000..a6726b60 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoodatasync.php @@ -0,0 +1,378 @@ +hubwoo_get_user_roles() ); + $key = array_search( 'guest_user', $roles ); + if ( false !== $key ) { + unset( $roles[ $key ] ); + } + } + + if ( in_array( 'guest_user', $roles ) ) { + + $key = array_search( 'guest_user', $roles ); + + $order_statuses = get_option( 'hubwoo-selected-order-status', array() ); + + if ( empty( $order_statuses ) || ( ! is_array( $order_statuses ) && count( $order_statuses ) < 1 ) ) { + $order_statuses = array_keys( wc_get_order_statuses() ); + } + + if ( false !== $key ) { + unset( $roles[ $key ] ); + } + + $order_args = array( + 'return' => 'ids', + 'limit' => $limit, + 'type' => wc_get_order_types(), + 'status' => $order_statuses, + 'customer' => 0, + 'hubwoo_pro_guest_order' => 'synced', + ); + + if ( $date_range ) { + $order_args['date_modified'] = gmdate( 'Y-m-d', strtotime( $from_date ) ) . '...' . gmdate( 'Y-m-d', strtotime( $upto_date . ' +1 day' ) ); + } + + $guest_orders = wc_get_orders( $order_args ); + + $guest_emails = array_unique( self::get_guest_sync_data( $guest_orders, true ) ); + + if ( 'guestOrder' == $response_type ) { + return $guest_orders; + } + + if ( is_array( $guest_orders ) ) { + $unique_users += count( $guest_emails ); + } + } else { + + if ( 'guestOrder' == $response_type ) { + return false; + } + } + + if ( $date_range ) { + + $args['date_query'] = array( + array( + 'after' => gmdate( 'd-m-Y', strtotime( $from_date ) ), + 'before' => gmdate( 'd-m-Y', strtotime( $upto_date . ' +1 day' ) ), + 'inclusive' => true, + ), + ); + } + + // creating args for registered users. + $args['meta_query'] = array( + + 'relation' => 'OR', + array( + 'key' => 'hubwoo_pro_user_data_change', + 'compare' => 'NOT EXISTS', + ), + array( + 'key' => 'hubwoo_pro_user_data_change', + 'value' => 'synced', + 'compare' => '!=', + ), + ); + + $args['role__in'] = $roles; + + $args['number'] = $limit; + + $args['fields'] = 'ID'; + + $registered_users = get_users( $args ); + + if ( $count ) { + $unique_users += count( $registered_users ); + return $unique_users; + } + + return $registered_users; + } + + /** + * Retrieve User Data + * for Guest Users + * + * @param array $hubwoo_orders array of order to be synced. + * @param bool $only_email true/false. + */ + public static function get_guest_sync_data( $hubwoo_orders, $only_email = false ) { + + global $hubwoo; + + $guest_user_emails = array(); + $guest_contacts = array(); + $guest_user_properties = array(); + + if ( ! empty( $hubwoo_orders ) && count( $hubwoo_orders ) ) { + + foreach ( $hubwoo_orders as $order_id ) { + + $hubwoo_guest_order = wc_get_order( $order_id ); + + if ( $hubwoo_guest_order instanceof WC_Order ) { + + $guest_email = $hubwoo_guest_order->get_billing_email(); + + if ( ! empty( $guest_email ) && $only_email ) { + $guest_user_emails[] = $guest_email; + continue; + } + + if ( empty( $guest_email ) ) { + + $hubwoo_guest_order->delete_meta_data('hubwoo_pro_guest_order'); + continue; + } + + $guest_order_callback = new HubwooGuestOrdersManager( $order_id ); + + $guest_user_properties = $guest_order_callback->get_order_related_properties( $order_id, $guest_email ); + + $guest_user_properties = $hubwoo->hubwoo_filter_contact_properties( $guest_user_properties ); + + $fname = $hubwoo_guest_order->get_billing_first_name(); + if ( ! empty( $fname ) ) { + $guest_user_properties[] = array( + 'property' => 'firstname', + 'value' => $fname, + ); + } + + $lname = $hubwoo_guest_order->get_billing_last_name(); + if ( ! empty( $lname ) ) { + $guest_user_properties[] = array( + 'property' => 'lastname', + 'value' => $lname, + ); + } + + $cname = $hubwoo_guest_order->get_billing_company(); + if ( ! empty( $cname ) ) { + $guest_user_properties[] = array( + 'property' => 'company', + 'value' => $cname, + ); + } + + $city = $hubwoo_guest_order->get_billing_city(); + if ( ! empty( $city ) ) { + $guest_user_properties[] = array( + 'property' => 'city', + 'value' => $city, + ); + } + + $state = $hubwoo_guest_order->get_billing_state(); + if ( ! empty( $state ) ) { + $guest_user_properties[] = array( + 'property' => 'state', + 'value' => $state, + ); + } + + $country = $hubwoo_guest_order->get_billing_country(); + if ( ! empty( $country ) ) { + $guest_user_properties[] = array( + 'property' => 'country', + 'value' => Hubwoo::map_country_by_abbr( $country ), + ); + } + + $address1 = $hubwoo_guest_order->get_billing_address_1(); + $address2 = $hubwoo_guest_order->get_billing_address_2(); + if ( ! empty( $address1 ) || ! empty( $address2 ) ) { + $address = $address1 . ' ' . $address2; + $guest_user_properties[] = array( + 'property' => 'address', + 'value' => $address, + ); + } + + $zip = $hubwoo_guest_order->get_billing_postcode(); + if ( ! empty( $zip ) ) { + $guest_user_properties[] = array( + 'property' => 'zip', + 'value' => $zip, + ); + } + + $guest_phone = $hubwoo_guest_order->get_billing_phone(); + + if ( ! empty( $guest_phone ) ) { + $guest_user_properties[] = array( + 'property' => 'mobilephone', + 'value' => $guest_phone, + ); + $guest_user_properties[] = array( + 'property' => 'phone', + 'value' => $guest_phone, + ); + } + + $customer_new_order_flag = 'no'; + $prop_index = array_search( 'customer_new_order', array_column( $guest_user_properties, 'property' ) ); + + if ( Hubwoo_Admin::hubwoo_check_for_properties( 'order_recency_rating', 5, $guest_user_properties ) ) { + + if ( Hubwoo_Admin::hubwoo_check_for_properties( 'last_order_status', get_option( 'hubwoo_no_status', 'wc-completed' ), $guest_user_properties ) ) { + + $customer_new_order_flag = 'yes'; + } + } + + if ( $prop_index ) { + $guest_user_properties[ $prop_index ]['value'] = $customer_new_order_flag; + } else { + $guest_user_properties[] = array( + 'property' => 'customer_new_order', + 'value' => $customer_new_order_flag, + ); + } + + $guest_user_properties = apply_filters( 'hubwoo_map_ecomm_guest_CONTACT_properties', $guest_user_properties, $order_id ); + + $guest_user_properties_data = array( + 'email' => $guest_email, + 'properties' => $guest_user_properties, + ); + + $guest_contacts[] = $guest_user_properties_data; + + $hubwoo_guest_order->delete_meta_data('hubwoo_pro_guest_order'); + } + } + } + $response = $only_email ? $guest_user_emails : $guest_contacts; + + return $response; + } + + /** + * Scheduling Background Tasks + */ + public function schedule_background_task() { + + delete_option( 'hubwoo_ocs_data_synced' ); + delete_option( 'hubwoo_ocs_contacts_synced' ); + update_option( 'hubwoo_background_process_running', true ); + + if ( ! as_next_scheduled_action( 'hubwoo_contacts_sync_background' ) ) { + as_schedule_recurring_action( time(), 300, 'hubwoo_contacts_sync_background' ); + } + } + + /** + * Starts Scheduling once + * the data has been retrieved + */ + public function hubwoo_start_schedule() { + + $hubwoo_unique_users = $this->hubwoo_get_all_unique_user( true ); + + if ( $hubwoo_unique_users ) { + $this->schedule_background_task(); + } + } + + /** + * Retrieving Data For Registered + * Users + * + * @param array $hubwoo_unique_users array of users to sync. + * @return User Data + */ + public static function get_sync_data( $hubwoo_unique_users ) { + + // basic data function for user ids. + $contacts = array(); + $role__in = get_option( 'hubwoo-selected-user-roles', array() ); + $user_role_in = get_option( 'hubwoo_customers_role_settings', array() ); + + if ( ! empty( $hubwoo_unique_users ) && count( $hubwoo_unique_users ) ) { + + foreach ( $hubwoo_unique_users as $key => $id ) { + + $hubwoo_customer = new HubWooCustomer( $id ); + + $email = $hubwoo_customer->get_email(); + $user_data = get_user_by( 'email', $email ); + + if( ! empty( $user_data ) ) { + + if( ! empty( $user_data->roles[0] ) ) { + + $role = $user_data->roles[0]; + if ( in_array( $role, $role__in ) || in_array( $role, $user_role_in ) ) { + + if ( empty( $email ) ) { + delete_user_meta( $id, 'hubwoo_pro_user_data_change' ); + continue; + } + $properties = $hubwoo_customer->get_contact_properties(); + $user_properties = $hubwoo_customer->get_user_data_properties( $properties ); + $properties_data = array( + 'email' => $email, + 'properties' => $user_properties, + ); + + $contacts[] = $properties_data; + } + } + } + } + } + return $contacts; + } +} + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommobject.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommobject.php new file mode 100644 index 00000000..c8ccd476 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommobject.php @@ -0,0 +1,169 @@ +_object_id = $id; + + // load the object type in the class property. + $this->_object_type = $object_type; + + // store the instance of property callback. + $this->_callback_instance = new HubwooEcommPropertyCallbacks( $this->_object_id, $this->_object_type ); + + // prepare the modified fields data and store it in the object. + $this->prepare_modified_fields(); + } + + /** + * All properties for sync messages. + * + * @return array and key value pair array of properties. + * @since 1.0.0 + */ + public function get_object_properties() { + + // let others decide if they have modified fields in there integration. + $this->_properties = apply_filters( 'hubwoo_ecomm_' . $this->_object_type . '_modified_fields', $this->_properties, $this->_object_id ); + return $this->_properties; + } + + /** + * All properties for creation + * + * @return array and key value pair array of properties. + * @since 1.0.0 + */ + public function get_object_properties_for_creation() { + + $modified_fields = HubwooEcommProperties::get_instance()->hubwoo_ecomm_get_properties_for_object( $this->_object_type ); + + $properties = array(); + + if ( is_array( $modified_fields ) && count( $modified_fields ) ) { + + foreach ( $modified_fields as $single_field ) { + + $property_val = $this->_return_property_value( $single_field ); + + if ( ! empty( $property_val ) ) { + + $properties[] = array( + 'name' => $single_field, + 'value' => $property_val, + ); + } + } + } + + return $properties; + } + + /** + * Format modified fields of customer. + * + * Check for all the modified fields till the last update + * and prepare them in the hubspot api acceptable form. + * + * @since 1.0.0 + */ + private function prepare_modified_fields() { + + // need to update all fields, so lets get all the properties that we are working with. + $modified_fields = HubwooEcommProperties::get_instance()->hubwoo_ecomm_get_properties_for_object( $this->_object_type ); + + if ( is_array( $modified_fields ) && count( $modified_fields ) ) { + + foreach ( $modified_fields as $single_field ) { + + $property = $this->_return_property_value( $single_field ); + + if ( ! empty( $property ) ) { + + $this->_properties[ $single_field ] = $property; + } + } + } + } + + + /** + * Prepare property in the form of key value accepted by hubspot. + * + * @param array $property_name array of the property details to validate the value. + * @return string property value + */ + public function _return_property_value( $property_name ) { + + // if property name is not empty. + if ( ! empty( $property_name ) ) { + // get property value. + $property_val = $this->_callback_instance->_get_object_property_value( $property_name, $this->_object_id ); + return $property_val; + } + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommproperties.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommproperties.php new file mode 100644 index 00000000..2afed49f --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommproperties.php @@ -0,0 +1,376 @@ +objects = $this->_set( 'objects' ); + $this->properties = $this->_set( 'properties' ); + } + + /** + * Get groups/properties. + * + * @param string $option groups/properties. + * @return array Array of groups/properties information. + */ + public function _get( $option ) { + + if ( 'objects' === $option ) { + + return $this->objects; + } elseif ( 'properties' === $option ) { + + return $this->properties; + } + } + + /** + * Get an array of required option. + * + * @param String $option the identifier. + * @return Array An array of values. + * @since 1.0.0 + */ + private function _set( $option ) { + + $values = array(); + + if ( 'objects' === $option ) { + $values = array( 'CONTACT', 'PRODUCT', 'DEAL', 'LINE_ITEM' ); + } elseif ( 'properties' === $option ) { + $values = $this->hubwoo_ecomm_get_object_properties(); + } + + return apply_filters( 'hubwoo_ecomm_' . $option, $values ); + } + + + /** + * Get the required properties for an hubspot object for installation + * + * @return Array object properties + * @since 1.0.0 + */ + private function hubwoo_ecomm_get_object_properties() { + + $objects = $this->_get( 'objects' ); + + $ecomm_object_properties = array(); + + if ( is_array( $objects ) && count( $objects ) ) { + foreach ( $objects as $single_object ) { + $ecomm_object_properties[ $single_object ] = $this->hubwoo_ecomm_set_all_properties( $single_object ); + } + } + + return apply_filters( 'hubwoo_ecomm_bridge_object_properties', $ecomm_object_properties ); + } + + /** + * Get the required properties for sync messages to hubspot. + * + * @since 1.0.0 + * @param string $object type of object. + * @return Array object properties + */ + public function hubwoo_ecomm_get_properties_for_object( $object ) { + + $object_properties = array(); + + if ( ! empty( $object ) ) { + $properties = $this->hubwoo_ecomm_set_all_properties( $object ); + if ( is_array( $properties ) && count( $properties ) ) { + foreach ( $properties as $single_property ) { + if ( ! empty( $single_property['externalPropertyName'] ) ) { + $object_properties[] = $single_property['externalPropertyName']; + } + } + } + } + + return apply_filters( 'hubwoo_ecomm_bridge_' . $object . '_properties', $object_properties ); + } + + + /** + * Prepares all the properties for hubspot objects. + * + * @since 1.0.0 + * @param string $object_name object type. + * @return Array object properties + */ + public function hubwoo_ecomm_set_all_properties( $object_name ) { + + $object_properties = array(); + + if ( ! empty( $object_name ) ) { + + switch ( $object_name ) { + + case 'CONTACT': + $object_properties[] = array( + 'externalPropertyName' => 'email', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'email', + ); + $object_properties[] = array( + 'externalPropertyName' => 'firstname', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'firstname', + ); + $object_properties[] = array( + 'externalPropertyName' => 'lastname', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'lastname', + ); + $object_properties[] = array( + 'externalPropertyName' => 'company', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'company', + ); + $object_properties[] = array( + 'externalPropertyName' => 'phone', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'phone', + ); + $object_properties[] = array( + 'externalPropertyName' => 'mobilephone', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'mobilephone', + ); + $object_properties[] = array( + 'externalPropertyName' => 'address', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'address', + ); + $object_properties[] = array( + 'externalPropertyName' => 'city', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'city', + ); + $object_properties[] = array( + 'externalPropertyName' => 'state', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'state', + ); + $object_properties[] = array( + 'externalPropertyName' => 'country', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'country', + ); + $object_properties[] = array( + 'externalPropertyName' => 'zip', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'zip', + ); + + break; + + case 'PRODUCT': + $object_properties[] = array( + 'externalPropertyName' => 'name', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'name', + ); + $object_properties[] = array( + 'externalPropertyName' => 'hs_images', + 'dataType' => 'AVATAR_IMAGE', + 'hubspotPropertyName' => 'hs_images', + ); + $object_properties[] = array( + 'externalPropertyName' => 'price', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'price', + ); + $object_properties[] = array( + 'externalPropertyName' => 'pr_description', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'description', + ); + $object_properties[] = array( + 'externalPropertyName' => 'store_product_id', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'store_product_id', + ); + $object_properties[] = array( + 'externalPropertyName' => 'product_source_store', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'product_source_store', + ); + $object_properties[] = array( + 'externalPropertyName' => 'hs_sku', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'hs_sku', + ); + + break; + + case 'DEAL': + $object_properties[] = array( + 'externalPropertyName' => 'dealstage', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'dealstage', + ); + $object_properties[] = array( + 'externalPropertyName' => 'dealname', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'dealname', + ); + $object_properties[] = array( + 'externalPropertyName' => 'closedate', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'closedate', + ); + $object_properties[] = array( + 'externalPropertyName' => 'createdate', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'createdate', + ); + $object_properties[] = array( + 'externalPropertyName' => 'amount', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'amount', + ); + $object_properties[] = array( + 'externalPropertyName' => 'discount_amount', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'discount_amount', + ); + $object_properties[] = array( + 'externalPropertyName' => 'order_number', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'order_number', + ); + $object_properties[] = array( + 'externalPropertyName' => 'shipment_ids', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'shipment_ids', + ); + $object_properties[] = array( + 'externalPropertyName' => 'tax_amount', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'tax_amount', + ); + $object_properties[] = array( + 'externalPropertyName' => 'description', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'description', + ); + + break; + + case 'LINE_ITEM': + $object_properties[] = array( + 'externalPropertyName' => 'discount_amount', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'discount', + ); + $object_properties[] = array( + 'externalPropertyName' => 'quantity', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'quantity', + ); + $object_properties[] = array( + 'externalPropertyName' => 'name', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'name', + ); + $object_properties[] = array( + 'externalPropertyName' => 'price', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'price', + ); + $object_properties[] = array( + 'externalPropertyName' => 'sku', + 'dataType' => 'STRING', + 'hubspotPropertyName' => 'description', + ); + $object_properties[] = array( + 'externalPropertyName' => 'amount', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'amount', + ); + $object_properties[] = array( + 'externalPropertyName' => 'tax_amount', + 'dataType' => 'NUMBER', + 'hubspotPropertyName' => 'tax', + ); + + break; + } + } + + return $object_properties; + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommpropertycallbacks.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommpropertycallbacks.php new file mode 100644 index 00000000..2acf0c89 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooecommpropertycallbacks.php @@ -0,0 +1,459 @@ + 'hubwoo_get_user_mail', + 'firstname' => 'hubwoo_get_user_meta', + 'lastname' => 'hubwoo_get_user_meta', + 'address' => 'hubwoo_get_user_meta', + 'company' => 'hubwoo_get_user_meta', + 'city' => 'hubwoo_get_user_meta', + 'state' => 'hubwoo_get_user_meta', + 'zip' => 'hubwoo_get_user_meta', + 'country' => 'hubwoo_get_user_meta', + 'phone' => 'hubwoo_get_user_meta', + 'mobilephone' => 'hubwoo_get_user_meta', + + 'name' => 'hubwoo_ecomm_product_info', + 'hs_images' => 'hubwoo_ecomm_product_info', + 'price' => 'hubwoo_ecomm_product_info', + 'pr_description' => 'hubwoo_ecomm_product_info', + 'product_source_store' => 'hubwoo_ecomm_product_info', + 'store_product_id' => 'hubwoo_ecomm_product_info', + 'hs_sku' => 'hubwoo_ecomm_product_info', + + 'dealstage' => 'hubwoo_ecomm_deal_info', + 'dealname' => 'hubwoo_ecomm_deal_info', + 'closedate' => 'hubwoo_ecomm_deal_info', + 'amount' => 'hubwoo_ecomm_deal_info', + 'order_abandoned_cart_url' => 'hubwoo_ecomm_deal_info', + 'discount_amount' => 'hubwoo_ecomm_deal_info', + 'order_number' => 'hubwoo_ecomm_deal_info', + 'shipment_ids' => 'hubwoo_ecomm_deal_info', + 'tax_amount' => 'hubwoo_ecomm_deal_info', + 'createdate' => 'hubwoo_ecomm_deal_info', + 'description' => 'hubwoo_ecomm_deal_info', + ); + + /** + * Constructor + * + * @param int $object_id object id to get property values of. + * @param string $object_type object type to get property values of. + */ + public function __construct( $object_id, $object_type ) { + + $this->_object_id = $object_id; + $this->_object = $object_type; + } + + /** + * Property value. + * + * @param string $property_name name of the object property. + * @since 1.0.0 + */ + public function _get_object_property_value( $property_name ) { + + $value = ''; + + if ( ! empty( $property_name ) ) { + // get the callback. + $callback_function = $this->_get_property_callback( $property_name ); + + if ( ! empty( $callback_function ) ) { + + // get the value by calling respective callback. + $value = $this->$callback_function( $property_name ); + } + } + + $value = apply_filters( 'hubwoo-ecomm_contact_property_value', $value, $property_name, $this->_object_id, $this->_object ); + + return $value; + } + + /** + * Filter the property callback to get value of. + * + * @param strig $property_name name of the property. + * @return string/false callback function name or false. + */ + private function _get_property_callback( $property_name ) { + // check if the property name exists in the array. + if ( array_key_exists( $property_name, $this->_property_callbacks ) ) { + // if exists then get the callback name. + $callback = $this->_property_callbacks[ $property_name ]; + + return $callback; + } + + return false; + } + + /** + * User email + * + * @since 1.0.0 + */ + public function hubwoo_get_user_mail() { + // get it from user object. + $user = get_user_by( 'id', $this->_object_id ); + return $user->data->user_email; + } + + /** + * Get customer meta + * + * @param string $key meta key. + * @return string customer meta detail. + * @since 1.0.0 + */ + public function hubwoo_get_user_meta( $key ) { + + $value = ''; + + switch ( $key ) { + + case 'firstname': + $value = get_user_meta( $this->_object_id, 'first_name', true ); + break; + + case 'lastname': + $value = get_user_meta( $this->_object_id, 'last_name', true ); + break; + + case 'company': + $value = get_user_meta( $this->_object_id, 'billing_company', true ); + break; + + case 'city': + $value = get_user_meta( $this->_object_id, 'billing_city', true ); + break; + + case 'state': + $value = get_user_meta( $this->_object_id, 'billing_state', true ); + break; + + case 'country': + $value = get_user_meta( $this->_object_id, 'billing_country', true ); + break; + + case 'address': + $address1 = get_user_meta( $this->_object_id, 'billing_address_1', true ); + $address2 = get_user_meta( $this->_object_id, 'billing_address_2', true ); + $address = ''; + if ( ! empty( $address1 ) || ! empty( $address2 ) ) { + $address = $address1 . ' ' . $address2; + } + $value = $address; + break; + + case 'zip': + $value = get_user_meta( $this->_object_id, 'billing_postcode', true ); + break; + + case 'mobilephone': + case 'phone': + $value = get_user_meta( $this->_object_id, 'billing_phone', true ); + break; + } + return $value; + } + + /** + * Create user date. + * + * @since 1.0.0 + * @return string user registered date + */ + public function hubwoo_create_date() { + + $create_date = ''; + $customer = new WP_User( $this->_object_id ); + $account_creation = isset( $customer->data->user_registered ) ? $customer->data->user_registered : ''; + if ( ! empty( $account_creation ) ) { + $account_creation = strtotime( $account_creation ); + } + if ( ! empty( $account_creation ) ) { + $create_date = HubwooObjectProperties::get_instance()->hubwoo_set_utc_midnight( $account_creation ); + } + return $create_date; + } + + /** + * Get contact lifecycle stage + * + * @return string customer lifecycle stage + * @since 1.0.0 + */ + public function hubwoo_contact_stage() { + + $stage = ''; + + $orders_count = 0; + + //hpos changes + $query = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => array_keys( wc_get_order_statuses() ), + 'order' => 'desc', + 'post_parent' => 0, + 'customer_id' => $this->_object_id, + )); + + $customer_orders = $query->get_orders(); + + if ( is_array( $customer_orders ) && count( $customer_orders ) ) { + + $orders_count = count( $customer_orders ); + } + + if ( $orders_count > 0 ) { + + $stage = 'customer'; + } else { + + $stage = 'lead'; + } + + return $stage; + } + + /** + * Callback for products objects + * + * @param string $key meta key. + * @return string product properties + * @since 1.0.0 + */ + public function hubwoo_ecomm_product_info( $key ) { + + $product = wc_get_product( $this->_object_id ); + + $value = ''; + + if ( ! empty( $product ) && ! is_wp_error( $product ) ) { + + switch ( $key ) { + + case 'name': + $value = HubwooObjectProperties::hubwoo_ecomm_product_name( $product ); + break; + + case 'hs_images': + $attachment_src = wp_get_attachment_image_src( get_post_thumbnail_id( $this->_object_id ), 'single-post-thumbnail' ); + $image_url = isset( $attachment_src[0] ) ? $attachment_src[0] : wc_placeholder_img_src(); + $value = $image_url; + break; + + case 'price': + $value = $product->get_price(); + break; + + case 'pr_description': + $value = $product->get_short_description(); + break; + + case 'store_product_id': + $value = $this->_object_id; + break; + + case 'product_source_store': + $value = get_bloginfo( 'name' ); + break; + + case 'hs_sku': + $value = $product->get_sku(); + break; + } + } + + return $value; + } + + /** + * Callback for deal objects. + * + * @since 1.0.0 + * @param string $key meta key. + * @return string object properties + */ + public function hubwoo_ecomm_deal_info( $key ) { + + $order = wc_get_order( $this->_object_id ); + + $value = ''; + + if ( $order instanceof WC_Order ) { + $status = $order->get_status(); + $deal_name = '#' . $order->get_order_number(); + $order_date = get_post_time( 'U', true, $this->_object_id ); + + $create_date = $order_date; + + $user_info['first_name'] = $order->get_billing_first_name(); + $user_info['last_name'] = $order->get_billing_last_name(); + + foreach ( $user_info as $value ) { + if ( ! empty( $value ) ) { + $deal_name .= ' ' . $value; + } + } + + $deal_stage = self::hubwoo_get_valid_deal_stage( 'wc-' . $status ); + + if ( ! in_array( $deal_stage, self::hubwoo_ecomm_won_stages() ) ) { + + $order_date = get_post_time( 'U', true, $this->_object_id ) + ( get_option( 'hubwoo_ecomm_closedate_days', 1 ) * 24 * 60 * 60 ); + } + + if ( ! empty( $order ) && ! is_wp_error( $order ) ) { + + switch ( $key ) { + + case 'dealstage': + $value = $deal_stage; + break; + + case 'dealname': + $value = $deal_name; + break; + + case 'closedate': + $value = HubwooObjectProperties::get_instance()->hubwoo_set_utc_midnight( $order_date ); + break; + + case 'createdate': + $value = HubwooObjectProperties::get_instance()->hubwoo_set_utc_midnight( $create_date ); + break; + + case 'amount': + $value = $order->get_total(); + break; + + case 'order_abandoned_cart_url': + $value = $order->get_checkout_payment_url(); + break; + + case 'discount_amount': + $value = $order->get_discount_total(); + break; + + case 'order_number': + $value = $order->get_order_number(); + break; + + case 'shipment_ids': + $value = $order->get_shipping_method(); + break; + + case 'tax_amount': + $value = $order->get_total_tax(); + break; + + case 'description': + $value = $order->get_customer_note(); + break; + } + } + } + + return $value; + } + + /** + * Format an array in hubspot accepted enumeration value. + * + * @param array $properties Array of values. + * @return string formatted string. + * @since 1.0.0 + */ + public static function hubwoo_ecomm_format_array( $properties ) { + + if ( is_array( $properties ) ) { + + $properties = array_unique( $properties ); + $properties = implode( ',', $properties ); + } + + return $properties; + } + + /** + * Return a valid deal stage for the order status + * + * @since 1.0.0 + * @param string $order_key order status key. + * @return string hubspot deal stage + */ + public static function hubwoo_get_valid_deal_stage( $order_key ) { + + $saved_mappings = get_option( 'hubwoo_ecomm_final_mapping', array() ); + $key = array_search( $order_key, array_column( $saved_mappings, 'status' ) ); + return false === $key ? 'checkout_completed' : $saved_mappings[ $key ]['deal_stage']; + } + + /** + * Returns won deal stages. + * + * @since 1.0.0 + * @return array won deal stages + */ + public static function hubwoo_ecomm_won_stages() { + + $won_stages = get_option( 'hubwoo_ecomm_won_stages', array() ); + + if ( empty( $won_stages ) ) { + + $won_stages = array( 'processed', 'shipped' ); + } + + return $won_stages; + } +} + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooerrorhandling.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooerrorhandling.php new file mode 100644 index 00000000..7a123bed --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooerrorhandling.php @@ -0,0 +1,157 @@ +hubwoo_handle_workflow( $response, $additional_args ); + case HubwooConst::CHECKOUTFORM: + return $this->hubwoo_handle_form( $response, $additional_args ); + default: + return; + } + } + + /** + * Handling errors in Forms. + * + * @since 1.0.4 + * @param array $response response from HubSpot. + * @param array $additional_args any additional args. + */ + public function hubwoo_handle_form( $response, $additional_args ) { + + switch ( $response['status_code'] ) { + case 409: + $res = HubWooConnectionMananager::get_instance()->hubwoo_get_all_forms(); + if ( 200 == $res['status_code'] ) { + $res = json_decode( $res['body'], true ); + if ( ! empty( $res ) ) { + foreach ( $res as $form_value ) { + if ( HubwooConst::CHECKOUTFORMNAME == $form_value['name'] ) { + update_option( 'hubwoo_checkout_form_created', 'yes' ); + update_option( 'hubwoo_checkout_form_id', $form_value['guid'] ); + break; + } + } + } + } + break; + default: + return; + } + } + + /** + * Handling errors in Workflows. + * + * @since 1.0.4 + * @param array $response response from HubSpot. + * @param array $additional_args any additional args. + */ + public function hubwoo_handle_workflow( $response, $additional_args ) { + + if ( array_key_exists( 'current_workflow', $additional_args ) && ! empty( $additional_args['current_workflow'] ) ) { + + $properties = array(); + + $current_workflow = $additional_args['current_workflow']; + + switch ( $response['status_code'] ) { + case 500: + foreach ( $current_workflow['actions'] as $action ) { + if ( array_key_exists( 'propertyName', $action ) ) { + $properties[] = $action['propertyName']; + } + } + if ( ! empty( $properties ) ) { + $all_properties = HubWooContactProperties::get_instance()->_get( 'properties', '', true ); + foreach ( $properties as $property ) { + + $response = HubWooConnectionMananager::get_instance()->hubwoo_read_object_property( 'contact', $property ); + if ( 404 == $response['status_code'] ) { + $this->hubwoo_prepare_single_property( $all_properties, $property ); + } + } + return HubWooConnectionMananager::get_instance()->create_workflow( $current_workflow ); + } + break; + default: + return; + } + } + } + + /** + * Read and create property in HubSpot. + * + * @since 1.0.4 + * @param array $all_properties all properties. + * @param string $property current property to be checked. + */ + public function hubwoo_prepare_single_property( $all_properties, $property ) { + $property_details = array(); + foreach ( $all_properties as $group_name => $group_properties ) { + foreach ( $group_properties as $group_property ) { + if ( $property == $group_property['name'] ) { + $property_details = $group_property; + $property_details['groupName'] = $group_name; + HubWooConnectionMananager::get_instance()->create_property( $property_details, 'contacts' ); + } + } + } + } + +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooguestordersmanager.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooguestordersmanager.php new file mode 100644 index 00000000..30a622a2 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooguestordersmanager.php @@ -0,0 +1,837 @@ +_order_id = $order_id; + } + + /** + * Get customer shopping cart details from order meta. + * + * @return string order meta detail. + * @param int $order_id id of the order. + * @param string $property_name name of the property. + * @since 1.0.0 + */ + public static function get_order_meta( $order_id, $property_name ) { + //hpos changes + $order = wc_get_order( $order_id ); + + return $order->get_meta($property_name, true); + } + + /** + * Guest customer details. + * + * @param int $order_id id of the order. + * @param string $email email of the user. + * @return array full of HubSpot contact properties and values + * @since 1.0.0 + */ + public static function get_order_related_properties( $order_id, $email ) { + + $guest_user_properties = array(); + + $order = wc_get_order($order_id); + + $billing_country = $order->get_billing_country(); + $billing_state = $order->get_billing_state(); + $shipping_state = $order->get_shipping_state(); + $shipping_country = $order->get_shipping_country(); + + $guest_user_properties[] = array( + 'property' => 'shipping_address_line_1', + 'value' => $order->get_shipping_address_1(), + ); + + $guest_user_properties[] = array( + 'property' => 'shipping_address_line_2', + 'value' => $order->get_shipping_address_2(), + ); + + $guest_user_properties[] = array( + 'property' => 'shipping_city', + 'value' => $order->get_shipping_city(), + ); + + $guest_user_properties[] = array( + 'property' => 'shipping_country', + 'value' => Hubwoo::map_country_by_abbr( $shipping_country ), + ); + + $guest_user_properties[] = array( + 'property' => 'shipping_state', + 'value' => Hubwoo::map_state_by_abbr( $shipping_state, $shipping_country ), + ); + + $guest_user_properties[] = array( + 'property' => 'shipping_postal_code', + 'value' => $order->get_shipping_postcode(), + ); + + $guest_user_properties[] = array( + 'property' => 'billing_address_line_1', + 'value' => $order->get_billing_address_1(), + ); + + $guest_user_properties[] = array( + 'property' => 'billing_address_line_2', + 'value' => $order->get_billing_address_2(), + ); + + $guest_user_properties[] = array( + 'property' => 'billing_city', + 'value' => $order->get_billing_city(), + ); + + $guest_user_properties[] = array( + 'property' => 'billing_country', + 'value' => Hubwoo::map_country_by_abbr( $billing_country ), + ); + + $guest_user_properties[] = array( + 'property' => 'billing_state', + 'value' => Hubwoo::map_state_by_abbr( $billing_state, $billing_country ), + ); + + $guest_user_properties[] = array( + 'property' => 'billing_postal_code', + 'value' => $order->get_billing_postcode(), + ); + + $categories_bought = array(); + $skus_bought = array(); + $product_types_bought = array(); + $last_3_products_ids = array(); + $last_products_bought = array(); + $last_order_date = 0; + $last_products_bought_html = array(); + $days_differences = array(); + $last_type_bought = ''; + $first_date = 0; + $last_date = 0; + $average_days = array(); + $products_bought = array(); + $last_product_bought = ''; + $total_value_of_orders = 0; + $total_number_of_orders = 0; + $total_number_of_current_orders = 0; + $last_order_for_html = 0; + $last_order_id = 0; + + $order_statuses = get_option( 'hubwoo-selected-order-status', array() ); + + if ( empty( $order_statuses ) ) { + + $order_statuses = array_keys( wc_get_order_statuses() ); + } + + //hpos changes + if( Hubwoo::hubwoo_check_hpos_active() ) { + $query = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => $order_statuses, + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'customer' => $email, + )); + + $customer_orders = $query->get_orders(); + + } else { + $query = new WP_Query(); + + $customer_orders = $query->query( + array( + 'post_type' => 'shop_order', + 'posts_per_page' => -1, + 'post_status' => $order_statuses, + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => '_billing_email', + 'value' => $email, + ), + ), + ) + ); + } + + $guest_user_properties[] = array( + 'property' => 'customer_group', + 'value' => 'guest', + ); + + $last_order = ! empty( $customer_orders ) && is_array( $customer_orders ) ? $customer_orders[0] : ''; + $last_order_object = wc_get_order($last_order); + $order_tracking_number = $last_order_object->get_meta('_wc_shipment_tracking_items', true); + if ( ! empty( $order_tracking_number ) ) { + + $shipment_data = $order_tracking_number[0]; + + if ( ! empty( $shipment_data['date_shipped'] ) ) { + $guest_user_properties[] = array( + 'property' => 'last_order_shipment_date', + 'value' => self::hubwoo_set_utc_midnight( $shipment_data['date_shipped'] ), + ); + } + if ( ! empty( $shipment_data['tracking_number'] ) ) { + $guest_user_properties[] = array( + 'property' => 'last_order_tracking_number', + 'value' => $shipment_data['tracking_number'], + ); + } + if ( ! empty( $shipment_data['custom_tracking_link'] ) ) { + $guest_user_properties[] = array( + 'property' => 'last_order_tracking_url', + 'value' => $shipment_data['custom_tracking_link'], + ); + } + } + + $optin = $order->get_meta('hubwoo_checkout_marketing_optin', true); + $optin_sources = array(); + if ( ! empty( $optin ) && 'yes' == $optin ) { + $optin_sources[] = 'checkout'; + } else { + $optin = 'no'; + } + + $property_updated = get_option( 'hubwoo_newsletter_property_update', 'no' ); + + if ( ! empty( $property_updated ) && 'yes' == $property_updated ) { + if ( 'yes' == $optin ) { + $optin = true; + } else { + $optin = false; + } + } + + $guest_user_properties[] = array( + 'property' => 'newsletter_subscription', + 'value' => $optin, + ); + $guest_user_properties[] = array( + 'property' => 'marketing_newsletter', + 'value' => self::hubwoo_format_array( $optin_sources ), + ); + + // if customer have orders. + if ( is_array( $customer_orders ) && count( $customer_orders ) ) { + + // total number of customer orders. + $total_number_of_orders = count( $customer_orders ); + + $guest_user_properties[] = array( + 'property' => 'total_number_of_orders', + 'value' => count( $customer_orders ), + ); + + $order_frequency = count( $customer_orders ); + + $counter = 0; + + $products_count = 0; + + foreach ( $customer_orders as $order_id ) { + + // if order id not found let's check for another order. + if ( ! $order_id ) { + continue; + } + + // order date. + $order_date = get_post_time( 'U', false, $order_id ); + + $last_date = $order_date; + + if ( 0 == $first_date ) { + $first_date = $last_date; + } + + $average_days[] = self::hubwoo_get_average_days( $first_date, $last_date ); + + $first_date = $last_date; + + // get order. + $order = new WC_Order( $order_id ); + + // check for WP_Error object. + if ( empty( $order ) || is_wp_error( $order ) ) { + continue; + } + + $order_status = $order->get_status(); + + if ( 'failed' !== $order_status && 'cancelled' !== $order_status ) { + + $last_order_for_html ++; + + $order_items = $order->get_items(); + + // check if order has items. + if ( is_array( $order_items ) && count( $order_items ) ) { + + // let's loop each order item to get the details. + foreach ( $order_items as $item_id_1 => $wc_order_item_product ) { + + if ( ! empty( $wc_order_item_product ) && $wc_order_item_product instanceof WC_Order_Item ) { + + $item_id = $wc_order_item_product->get_product_id(); + $parent_item_sku = get_post_meta( $item_id, '_sku', true ); + $item_var_id = $wc_order_item_product->get_variation_id(); + + if ( get_post_status( $item_id ) == 'trash' || get_post_status( $item_id ) == false ) { + + continue; + } + + $product_cats_ids = wc_get_product_term_ids( $item_id, 'product_cat' ); + + if ( is_array( $product_cats_ids ) && count( $product_cats_ids ) ) { + + foreach ( $product_cats_ids as $cat_id ) { + + $term = get_term_by( 'id', $cat_id, 'product_cat' ); + $categories_bought[] = $term->slug; + } + } + + if ( $item_var_id ) { + + $item_id = $item_var_id; + } + + $products_count += $wc_order_item_product->get_quantity(); + + $item_sku = get_post_meta( $item_id, '_sku', true ); + + if ( empty( $item_sku ) || '' == $item_sku ) { + + $item_sku = $parent_item_sku; + } + + if ( empty( $item_sku ) || '' == $item_sku ) { + + $item_sku = $item_id; + } + + $skus_bought[] = $item_sku; + + $post = get_post( $item_id ); + + $product_uni_name = isset( $post->post_name ) ? $post->post_name : ''; + + if ( ! empty( $product_uni_name ) ) { + + $products_bought[] = $product_uni_name . '-' . $item_id; + $last_product_bought = $product_uni_name . '-' . $item_id; + $last_products_bought[] = $product_uni_name . '-' . $item_id; + } + + $product = $wc_order_item_product->get_product(); + + if ( $product instanceof WC_Product ) { + + $product_type = $product->get_type(); + } else { + + $product_type = ''; + } + + if ( 'variation' == $product_type ) { + $product_type = 'variable'; + } + + if ( 'subscription_variation' == $product_type ) { + $product_type = 'variable-subscription'; + } + + if ( ! empty( $product_type ) ) { + + $product_types_bought[] = $product_type; + } + + if ( count( $last_3_products_ids ) < 3 ) { + + $last_3_products_ids[] = $item_id; + } + + if ( 1 == $last_order_for_html ) { + + $last_order_id = $order_id; + } + } + } + } + } + + $order_total = $order->get_total(); + + $total_value_of_orders += floatval( $order_total ); + + if ( 'failed' !== $order_status && 'cancelled' !== $order_status && 'refunded' !== $order_status && 'completed' !== $order_status ) { + + $total_number_of_current_orders ++; + } + + // check for last order and finish all last order calculations. + if ( ! $counter ) { + + // last order date. + $guest_user_properties[] = array( + 'property' => 'last_order_date', + 'value' => self::hubwoo_set_utc_midnight( get_post_time( 'U', false, $order_id ) ), + ); + + $last_order_date = get_post_time( 'U', false, $order_id ); + + $guest_user_properties[] = array( + 'property' => 'last_order_value', + 'value' => $order_total, + ); + + $guest_user_properties[] = array( + 'property' => 'last_order_order_number', + 'value' => $order_id, + ); + + $guest_user_properties[] = array( + 'property' => 'last_order_fulfillment_status', + 'value' => 'wc-' . $order->get_status(), + ); + + $guest_user_properties[] = array( + 'property' => 'last_order_status', + 'value' => 'wc-' . $order->get_status(), + ); + + $guest_user_properties[] = array( + 'property' => 'last_order_currency', + 'value' => $order->get_currency(), + ); + + $guest_user_properties[] = array( + 'property' => 'last_product_bought', + 'value' => self::hubwoo_format_array( $last_product_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'last_products_bought', + 'value' => self::hubwoo_format_array( $last_products_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'last_skus_bought', + 'value' => self::hubwoo_format_array( $skus_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'last_categories_bought', + 'value' => self::hubwoo_format_array( $categories_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'last_product_types_bought', + 'value' => self::hubwoo_format_array( $product_types_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'last_total_number_of_products_bought', + 'value' => $products_count, + ); + + $guest_user_properties[] = array( + 'property' => 'last_products_bought_html', + 'value' => HubWooContactProperties::get_instance()->hubwoo_last_order_html( $last_order_id ), + ); + + } + + // check for first order. + if ( ( count( $customer_orders ) - 1 ) == $counter ) { + + // first order based calculation here.. + $guest_user_properties[] = array( + 'property' => 'first_order_date', + 'value' => self::hubwoo_set_utc_midnight( get_post_time( 'U', false, $order_id ) ), + ); + $guest_user_properties[] = array( + 'property' => 'first_order_value', + 'value' => $order_total, + ); + } + + $counter++; + } + + // rest calculations here. + $guest_user_properties[] = array( + 'property' => 'average_order_value', + 'value' => floatval( $total_value_of_orders / $total_number_of_orders ), + ); + + $guest_user_properties[] = array( + 'property' => 'total_number_of_current_orders', + 'value' => $total_number_of_current_orders, + ); + + $guest_user_properties[] = array( + 'property' => 'total_value_of_orders', + 'value' => $total_value_of_orders, + ); + + $guest_user_properties[] = array( + 'property' => 'average_days_between_orders', + 'value' => floatval( array_sum( $average_days ) / $total_number_of_orders ), + ); + + $guest_user_properties[] = array( + 'property' => 'skus_bought', + 'value' => self::hubwoo_format_array( $skus_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'categories_bought', + 'value' => self::hubwoo_format_array( $categories_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'product_types_bought', + 'value' => self::hubwoo_format_array( $product_types_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'products_bought', + 'value' => self::hubwoo_format_array( $products_bought ), + ); + + $guest_user_properties[] = array( + 'property' => 'total_number_of_products_bought', + 'value' => $products_count, + ); + + if ( is_array( $last_3_products_ids ) && count( $last_3_products_ids ) ) { + + $counter = 1; + + foreach ( $last_3_products_ids as $last_3_product_id ) { + + $_product = wc_get_product( $last_3_product_id ); + + if ( $_product instanceof WC_Product ) { + + $image_url = ''; + + $guest_user_properties[] = array( + 'property' => 'last_products_bought_product_' . $counter . '_name', + 'value' => $_product->get_title(), + ); + + $attachment_src = wp_get_attachment_image_src( get_post_thumbnail_id( $last_3_product_id ), 'single-post-thumbnail' ); + + if ( empty( $attachment_src[0] ) ) { + + $parent_id = $_product->get_parent_id(); + $attachment_src = wp_get_attachment_image_src( get_post_thumbnail_id( $parent_id ), 'single-post-thumbnail' ); + } + + if ( ! empty( $attachment_src[0] ) ) { + $image_url = $attachment_src[0]; + } + + $guest_user_properties[] = array( + 'property' => 'last_products_bought_product_' . $counter . '_image_url', + 'value' => $image_url, + ); + + $guest_user_properties[] = array( + 'property' => 'last_products_bought_product_' . $counter . '_price', + 'value' => $_product->get_price(), + ); + + $guest_user_properties[] = array( + 'property' => 'last_products_bought_product_' . $counter . '_url', + 'value' => get_permalink( $last_3_product_id ), + ); + + $counter++; + } + } + } + + $hubwoo_rfm_at_5 = get_option( + 'hubwoo_rfm_5', + array( + 0 => 30, + 1 => 20, + 2 => 1000, + ) + ); + + $hubwoo_from_rfm_4 = get_option( + 'hubwoo_from_rfm_4', + array( + 0 => 31, + 1 => 10, + 2 => 750, + ) + ); + + $hubwoo_to_rfm_4 = get_option( + 'hubwoo_to_rfm_4', + array( + 0 => 90, + 1 => 20, + 2 => 1000, + ) + ); + + $hubwoo_from_rfm_3 = get_option( + 'hubwoo_from_rfm_3', + array( + 0 => 91, + 1 => 5, + 2 => 500, + ) + ); + + $hubwoo_to_rfm_3 = get_option( + 'hubwoo_to_rfm_3', + array( + 0 => 180, + 1 => 10, + 2 => 750, + ) + ); + + $hubwoo_from_rfm_2 = get_option( + 'hubwoo_from_rfm_2', + array( + 0 => 181, + 1 => 2, + 2 => 250, + ) + ); + + $hubwoo_to_rfm_2 = get_option( + 'hubwoo_to_rfm_2', + array( + 0 => 365, + 1 => 5, + 2 => 500, + ) + ); + + $hubwoo_rfm_at_1 = get_option( + 'hubwoo_rfm_1', + array( + 0 => 365, + 1 => 2, + 2 => 250, + ) + ); + + $order_monetary = $total_value_of_orders; + + $current_date = gmdate( 'Y-m-d H:i:s', time() ); + $current_date = new DateTime( $current_date ); + $last_order_date = gmdate( 'Y-m-d H:i:s', $last_order_date ); + $last_order_date = new DateTime( $last_order_date ); + $order_recency = date_diff( $current_date, $last_order_date, true ); + + $order_recency = $order_recency->days; + $monetary_rating = 1; + $order_recency_rating = 1; + $order_frequency_rating = 1; + + if ( $order_recency <= $hubwoo_rfm_at_5[0] ) { + $order_recency_rating = 5; + } elseif ( $order_recency >= $hubwoo_from_rfm_4[0] && $order_recency <= $hubwoo_to_rfm_4[0] ) { + $order_recency_rating = 4; + } elseif ( $order_recency >= $hubwoo_from_rfm_3[0] && $order_recency <= $hubwoo_to_rfm_3[0] ) { + $order_recency_rating = 3; + } elseif ( $order_recency >= $hubwoo_from_rfm_2[0] && $order_recency <= $hubwoo_to_rfm_2[0] ) { + $order_recency_rating = 2; + } else { + $order_recency_rating = 1; + } + + $guest_user_properties[] = array( + 'property' => 'order_recency_rating', + 'value' => $order_recency_rating, + ); + + if ( $order_frequency > $hubwoo_rfm_at_5[1] ) { + $order_frequency_rating = 5; + } elseif ( $order_frequency >= $hubwoo_from_rfm_4[1] && $order_frequency < $hubwoo_to_rfm_4[1] ) { + $order_frequency_rating = 4; + } elseif ( $order_frequency >= $hubwoo_from_rfm_3[1] && $order_frequency < $hubwoo_to_rfm_3[1] ) { + $order_frequency_rating = 3; + } elseif ( $order_frequency >= $hubwoo_from_rfm_2[1] && $order_frequency < $hubwoo_to_rfm_2[1] ) { + $order_frequency_rating = 2; + } else { + $order_frequency_rating = 1; + } + + $guest_user_properties[] = array( + 'property' => 'order_frequency_rating', + 'value' => $order_frequency_rating, + ); + + if ( $order_monetary > $hubwoo_rfm_at_5[2] ) { + $monetary_rating = 5; + } elseif ( $order_monetary >= $hubwoo_from_rfm_4[2] && $order_monetary < $hubwoo_to_rfm_4[2] ) { + $monetary_rating = 4; + } elseif ( $order_monetary >= $hubwoo_from_rfm_3[2] && $order_monetary < $hubwoo_to_rfm_3[2] ) { + $monetary_rating = 3; + } elseif ( $order_monetary >= $hubwoo_from_rfm_2[2] && $order_monetary < $hubwoo_to_rfm_2[2] ) { + $monetary_rating = 2; + } else { + $monetary_rating = 1; + } + + $guest_user_properties[] = array( + 'property' => 'monetary_rating', + 'value' => $monetary_rating, + ); + } else { + + $guest_user_properties[] = array( + 'property' => 'total_number_of_orders', + 'value' => $total_number_of_orders, + ); + $guest_user_properties[] = array( + 'property' => 'total_number_of_products_bought', + 'value' => 0, + ); + $guest_user_properties[] = array( + 'property' => 'total_number_of_current_orders', + 'value' => $total_number_of_current_orders, + ); + $guest_user_properties[] = array( + 'property' => 'total_value_of_orders', + 'value' => $total_value_of_orders, + ); + $guest_user_properties[] = array( + 'property' => 'last_total_number_of_products_bought', + 'value' => 0, + ); + + $guest_user_properties[] = array( + 'property' => 'monetary_rating', + 'value' => 1, + ); + $guest_user_properties[] = array( + 'property' => 'order_frequency_rating', + 'value' => 1, + ); + $guest_user_properties[] = array( + 'property' => 'order_recency_rating', + 'value' => 1, + ); + } + + return $guest_user_properties; + } + + /** + * Format an array in hubspot accepted enumeration value. + * + * @param array $properties Array of values. + * @return string formatted string. + * @since 1.0.0 + */ + public static function hubwoo_format_array( $properties ) { + + if ( is_array( $properties ) ) { + + $properties = array_unique( $properties ); + + $properties = implode( ';', $properties ); + } + + return $properties; + } + + /** + * Convert unix timestamp to hubwoo formatted midnight time. + * + * @param int $unix_timestamp timestamp for date. + * @param bool $for_deals true/false. + * @return Unix midnight timestamp. + * @since 1.0.0 + */ + public static function hubwoo_set_utc_midnight( $unix_timestamp, $for_deals = false ) { + $string = gmdate( 'Y-m-d H:i:s', $unix_timestamp ); + $date = new DateTime( $string ); + + if ( $for_deals ) { + + $wptimezone = get_option( 'timezone_string', '' ); + if ( empty( $wptimezone ) ) { + $wptimezone = 'UTC'; + } + $timezone = new DateTimeZone( $wptimezone ); + //phpcs:disable + $date->setTimezone( $timezone ); + //phpcs:enable + } else { + $wptimezone = 'UTC'; + $timezone = new DateTimeZone( $wptimezone ); + $date->setTimezone( $timezone ); + $date->modify( 'midnight' ); + } + return $date->getTimestamp() * 1000; + } + + /** + * Return days between two dates. + * + * @param int $first_date first order date. + * @param int $last_date last order date. + * @return int $datediff date differences. + * @since 1.0.0 + */ + public static function hubwoo_get_average_days( $first_date, $last_date ) { + + $now = $first_date; + $your_date = $last_date; + $datediff = $now - $your_date; + return floor( $datediff / ( 60 * 60 * 24 ) ); + } +} + diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooobjectproperties.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooobjectproperties.php new file mode 100644 index 00000000..dde4be9a --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwooobjectproperties.php @@ -0,0 +1,569 @@ +get_object_properties(); + $contact_properties = apply_filters( 'hubwoo_map_ecomm_' . $object_type . '_properties', $contact_properties, $user_id ); + $user_vid = get_user_meta( $user_id, 'hubwoo_user_vid', true ); + + $contact = $contact_properties; + $contact['email'] = $user_email; + $contact = array( + 'properties' => $contact, + ); + + if ( count( $contact ) ) { + + $flag = true; + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + if ( ! empty( $user_vid ) ) { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $user_vid, $contact ); + } else { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'contacts', $contact ); + + if ( 201 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + update_user_meta( $user_id, 'hubwoo_user_vid', $contact_vid->id ); + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); + + } else if ( 409 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + $hs_id = explode( 'ID: ', $contact_vid->message ); + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $hs_id[1], $contact ); + update_user_meta( $user_id, 'hubwoo_user_vid', $hs_id[1] ); + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); + } else if ( 400 == $response['status_code'] ) { + update_user_meta( $user_id, 'hubwoo_invalid_contact', 'yes' ); + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); + } + } + + do_action( 'hubwoo_ecomm_contact_synced', $user_email ); + } + } + } + + /** + * Create/update a guest user and associate with a deal. + * + * @since 1.0.0 + * @param int $order_id - order id of the contact. + * @static + * @return void. + */ + public static function hubwoo_ecomm_guest_user( $order_id ) { + + global $hubwoo; + + $order = wc_get_order($order_id); + $guest_email = $order->get_billing_email(); + + $contact = array(); + + if ( ! empty( $guest_email ) ) { + + $object_type = 'CONTACT'; + $guest_user_info = array(); + $guest_order_callback = new HubwooGuestOrdersManager( $order_id ); + $guest_user_properties = $guest_order_callback->get_order_related_properties( $order_id, $guest_email ); + $guest_user_properties = $hubwoo->hubwoo_filter_contact_properties( $guest_user_properties ); + + foreach ( $guest_user_properties as $key => $value ) { + $guest_user_info[ $value['property'] ] = $value['value']; + } + + $guest_user_info['email'] = $guest_email; + $guest_user_info['firstname'] = $order->get_billing_first_name(); + $guest_user_info['lastname'] = $order->get_billing_last_name(); + $guest_user_info['phone'] = $order->get_billing_phone(); + $guest_user_info['billing_address_line_1'] = $order->get_billing_address_1(); + $guest_user_info['billing_address_line_2'] = $order->get_billing_address_2(); + $guest_user_info['billing_city'] = $order->get_billing_city(); + $guest_user_info['billing_state'] = $order->get_billing_state(); + $guest_user_info['billing_country'] = $order->get_billing_country(); + $guest_user_info['billing_postal_code'] = $order->get_billing_postcode(); + $guest_user_info['lifecyclestage'] = 'customer'; + $guest_user_info['customer_source_store'] = get_bloginfo( 'name' ); + $guest_user_info['hs_language'] = $order->get_meta('hubwoo_preferred_language', true); + $guest_contact_properties = apply_filters( 'hubwoo_map_ecomm_guest_' . $object_type . '_properties', $guest_user_info, $order_id ); + $user_vid = $order->get_meta('hubwoo_user_vid', true); + $contact = array( + 'properties' => $guest_contact_properties, + ); + } + if ( count( $contact ) ) { + + $flag = true; + + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + if ( ! empty( $user_vid ) ) { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $user_vid, $contact ); + } else { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'contacts', $contact ); + + if ( 201 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + $order->update_meta_data('hubwoo_user_vid', $contact_vid->id); + $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); + $order->save(); + + } else if ( 409 == $response['status_code'] ) { + $contact_vid = json_decode( $response['body'] ); + $hs_id = explode( 'ID: ', $contact_vid->message ); + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $hs_id[1], $contact ); + $order->update_meta_data('hubwoo_user_vid', $hs_id[1]); + $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); + $order->save(); + } else if ( 400 == $response['status_code'] ) { + $order->update_meta_data('hubwoo_invalid_contact', 'yes'); + $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); + $order->update_meta_data('hubwoo_pro_user_data_change', 'synced'); + $order->save(); + } + } + + do_action( 'hubwoo_ecomm_contact_synced', $guest_email ); + } + } + } + + /** + * Create/update an ecommerce deal. + * + * @since 1.0.0 + * @param int $order_id - order id. + * @param int $source - register or guest. + * @param int $customer_id - user id. + * @static + * @return array sync response from HubSpot. + */ + public static function hubwoo_ecomm_sync_deal( $order_id, $source, $customer_id ) { + $object_type = 'DEAL'; + $deal_updates = array(); + $assc_deal_cmpy = get_option( 'hubwoo_assoc_deal_cmpy_enable', 'yes' ); + $pipeline_id = get_option( 'hubwoo_ecomm_pipeline_id', false ); + $hubwoo_ecomm_deal = new HubwooEcommObject( $order_id, $object_type ); + $deal_properties = $hubwoo_ecomm_deal->get_object_properties(); + $deal_properties = apply_filters( 'hubwoo_map_ecomm_' . $object_type . '_properties', $deal_properties, $order_id ); + $order = wc_get_order($order_id); + + if ( 'yes' == get_option( 'hubwoo_deal_multi_currency_enable', 'no' ) ) { + $currency = $order->get_currency(); + if ( ! empty( $currency ) ) { + $deal_properties['deal_currency_code'] = $currency; + } + } + + if ( empty( $pipeline_id ) ) { + Hubwoo::get_all_deal_stages(); + $pipeline_id = get_option( 'hubwoo_ecomm_pipeline_id', false ); + } + + $deal_properties['pipeline'] = $pipeline_id; + + $deal_updates = array( + 'properties' => $deal_properties, + ); + $response = ''; + + if ( 'user' == $source ) { + $user_info = json_decode( wp_json_encode( get_userdata( $customer_id ) ), true ); + $user_email = $user_info['data']['user_email']; + $contact = $user_email; + if ( empty( $contact ) ) { + $contact = $customer_id; + } + $contact_vid = get_user_meta( $customer_id, 'hubwoo_user_vid', true ); + $invalid_contact = get_user_meta( $customer_id, 'hubwoo_invalid_contact', true ); + } else { + $contact_vid = $order->get_meta('hubwoo_user_vid', true); + $contact = $order->get_billing_email(); + $invalid_contact = $order->get_meta('hubwoo_invalid_contact', true); + } + + if ( count( $deal_updates ) ) { + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + + if ( ! $status ) { + + $flag = false; + } + } + + if ( $flag ) { + + $deal_name = '#' . $order->get_order_number(); + + $user_detail['first_name'] = $order->get_billing_first_name(); + $user_detail['last_name'] = $order->get_billing_last_name(); + + foreach ( $user_detail as $value ) { + if ( ! empty( $value ) ) { + $deal_name .= ' ' . $value; + } + } + + $filtergps = array( + 'filterGroups' => array( + array( + 'filters' => array( + array( + 'value' => $deal_name, + 'propertyName' => 'dealname', + 'operator' => 'EQ', + ), + ), + ), + ), + ); + + $response = HubWooConnectionMananager::get_instance()->search_object_record( 'deals', $filtergps ); + + if ( 200 == $response['status_code'] ) { + $responce_body = json_decode( $response['body'] ); + $result = $responce_body->results; + if ( ! empty( $result ) ) { + foreach ( $result as $key => $value ) { + $order->update_meta_data('hubwoo_ecomm_deal_id', $value->id); + $order->update_meta_data('hubwoo_order_line_item_created', 'yes'); + $order->save(); + } + } + } + + $hubwoo_ecomm_deal_id =$order->get_meta('hubwoo_ecomm_deal_id', true); + + if ( empty( $hubwoo_ecomm_deal_id ) ) { + $response = HubWooConnectionMananager::get_instance()->create_object_record( 'deals', $deal_updates ); + if ( 201 == $response['status_code'] ) { + $response_body = json_decode( $response['body'] ); + $hubwoo_ecomm_deal_id = $response_body->id; + $order->update_meta_data('hubwoo_ecomm_deal_id', $hubwoo_ecomm_deal_id); + $order->save(); + } + } else { + $response = HubWooConnectionMananager::get_instance()->update_object_record( 'deals', $hubwoo_ecomm_deal_id, $deal_updates ); + } + + HubWooConnectionMananager::get_instance()->associate_object( 'deal', $hubwoo_ecomm_deal_id, 'contact', $contact_vid, 3 ); + + do_action( 'hubwoo_ecomm_deal_created', $order_id ); + + if ( 'yes' == $assc_deal_cmpy ) { + if ( ! empty( $contact ) && empty( $invalid_contact ) ) { + Hubwoo::hubwoo_associate_deal_company( $contact, $hubwoo_ecomm_deal_id ); + } + } + + $order->update_meta_data('hubwoo_ecomm_deal_upsert', 'no'); + $order->delete_meta_data('hubwoo_ecomm_deal_upsert'); + $order->save(); + + $response = self::hubwoo_ecomm_sync_line_items( $order_id ); + + return $response; + } + } + } + + /** + * Create and Associate Line Items for an order. + * + * @since 1.0.0 + * @param int $order_id - order id. + * @static + * @return array sync response from HubSpot. + */ + public static function hubwoo_ecomm_sync_line_items( $order_id ) { + + if ( ! empty( $order_id ) ) { + + $order = wc_get_order( $order_id ); + $line_updates = array(); + $order_items = $order->get_items(); + $object_ids = array(); + $response = array( 'status_code' => 206 ); + $no_products_found = false; + + if ( is_array( $order_items ) && count( $order_items ) ) { + + foreach ( $order_items as $item_key => $single_item ) : + + $product_id = $single_item->get_variation_id(); + if ( 0 === $product_id ) { + $product_id = $single_item->get_product_id(); + if ( 0 === $product_id ) { + $no_products_found = true; + } + } + if ( get_post_status( $product_id ) == 'trash' || get_post_status( $product_id ) == false ) { + continue; + } + $item_sku = get_post_meta( $product_id, '_sku', true ); + if ( empty( $item_sku ) ) { + $item_sku = $product_id; + } + + $line_item_hs_id = wc_get_order_item_meta( $item_key, 'hubwoo_ecomm_line_item_id', true ); + + if ( ! empty( $line_item_hs_id ) || 'yes' == $order->get_meta('hubwoo_order_line_item_created', 'no') ) { + continue; + } + + $quantity = ! empty( $single_item->get_quantity() ) ? $single_item->get_quantity() : 0; + $item_total = ! empty( $single_item->get_total() ) ? $single_item->get_total() : 0; + $item_sub_total = ! empty( $single_item->get_subtotal() ) ? $single_item->get_subtotal() : 0; + $product = $single_item->get_product(); + $name = self::hubwoo_ecomm_product_name( $product ); + $discount_amount = abs( $item_total - $item_sub_total ); + $discount_amount = $discount_amount / $quantity; + $item_sub_total = $item_sub_total / $quantity; + $hs_product_id = get_post_meta( $product_id, 'hubwoo_ecomm_pro_id', true ); + $object_ids[] = $item_key; + + $properties = array( + 'quantity' => $quantity, + 'price' => $item_sub_total, + 'amount' => $item_total, + 'name' => $name, + 'discount_amount' => $discount_amount, + 'sku' => $item_sku, + 'tax_amount' => $single_item->get_total_tax(), + ); + + if ( 'yes' != get_option( 'hubwoo_product_scope_needed', 'no' ) ) { + $properties['hs_product_id'] = $hs_product_id; + } + + $properties = apply_filters( 'hubwoo_line_item_properties', $properties, $product_id, $order_id ); + + $line_updates[] = array( + 'properties' => $properties, + ); + endforeach; + } + + $line_updates = apply_filters( 'hubwoo_custom_line_item', $line_updates, $order_id ); + + if ( count( $line_updates ) ) { + + $line_updates = array( + 'inputs' => $line_updates, + ); + + $flag = true; + if ( Hubwoo::is_access_token_expired() ) { + $hapikey = HUBWOO_CLIENT_ID; + $hseckey = HUBWOO_SECRET_ID; + $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); + if ( ! $status ) { + $flag = false; + } + } + if ( $flag ) { + $response = HubWooConnectionMananager::get_instance()->create_batch_object_record( 'line_items', $line_updates ); + } + } + + if ( 201 == $response['status_code'] || 206 == $response['status_code'] || empty( $object_ids ) ) { + + $order->update_meta_data('hubwoo_ecomm_deal_created', 'yes'); + $order->save(); + + $deal_id = $order->get_meta('hubwoo_ecomm_deal_id', true); + if ( isset( $response['body'] ) && ! empty( $response['body'] ) ) { + $created_line_items = json_decode( $response['body'] )->results; + $inputs = array(); + foreach($created_line_items as $line_item){ + $input = array( + 'types' => array( + array( + 'associationCategory' => "HUBSPOT_DEFINED", + 'associationTypeId' => 19 + ) + ), + 'from' => array( + 'id' => $deal_id + ), + 'to' => array( + 'id' => $line_item->id + ) + ); + $inputs[] = $input; + } + $inputs = array('inputs'=>$inputs); + $response = HubWooConnectionMananager::get_instance()->associate_batch_object( 'deal', 'line_item', $inputs); + if($response['status_code'] == 201){ + $order->update_meta_data('hubwoo_order_line_item_created', 'yes'); + $order->save(); + } + if ( 1 == get_option( 'hubwoo_deals_sync_running', 0 ) ) { + $current_count = get_option( 'hubwoo_deals_current_sync_count', 0 ); + update_option( 'hubwoo_deals_current_sync_count', ++$current_count ); + } + } + } + + return $response; + } + } + + + /** + * Start syncing an ecommerce deal + * + * @since 1.0.0 + * @param int $order_id - order id. + * @return array sync response from HubSpot. + */ + public function hubwoo_ecomm_deals_sync( $order_id ) { + + if ( ! empty( $order_id ) ) { + $hubwoo_ecomm_order = wc_get_order( $order_id ); + if ( $hubwoo_ecomm_order instanceof WC_Order ) { + $customer_id = $hubwoo_ecomm_order->get_customer_id(); + + if ( ! empty( $customer_id ) ) { + $source = 'user'; + self::hubwoo_ecomm_contacts_with_id( $customer_id ); + } else { + $source = 'guest'; + self::hubwoo_ecomm_guest_user( $order_id ); + } + + $response = self::hubwoo_ecomm_sync_deal( $order_id, $source, $customer_id ); + update_option( 'hubwoo_last_sync_date', time() ); + return $response; + } + } + } + /** + * Create a formatted name of the product. + * + * @since 1.0.0 + * @param int $product product object. + * @return string formatted name of the product. + */ + public static function hubwoo_ecomm_product_name( $product ) { + + if ( $product->get_sku() ) { + $identifier = $product->get_sku(); + } else { + $identifier = '#' . $product->get_id(); + } + return sprintf( '%2$s (%1$s)', $identifier, $product->get_name() ); + } + + + /** + * Return formatted time for HubSpot + * + * @param int $unix_timestamp current timestamp. + * @return string formatted time. + * @since 1.0.0 + */ + public static function hubwoo_set_utc_midnight( $unix_timestamp ) { + + $string = gmdate( 'Y-m-d H:i:s', $unix_timestamp ); + $date = new DateTime( $string ); + $wp_time_zone = get_option( 'timezone_string', '' ); + if ( empty( $wp_time_zone ) ) { + $wp_time_zone = 'UTC'; + } + $time_zone = new DateTimeZone( $wp_time_zone ); + $date->setTimezone( $time_zone ); + return $date->getTimestamp() * 1000; // in miliseconds. + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoopropertycallbacks.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoopropertycallbacks.php new file mode 100644 index 00000000..cacb3010 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/class-hubwoopropertycallbacks.php @@ -0,0 +1,1029 @@ + 'get_contact_group', + 'newsletter_subscription' => 'hubwoo_user_meta', + 'shopping_cart_customer_id' => 'hubwoo_user_meta', + 'customer_source_store' => 'hubwoo_user_meta', + 'hs_language' => 'hubwoo_user_meta', + 'marketing_newsletter' => 'hubwoo_user_meta', + + 'shipping_address_line_1' => 'get_user_meta', + 'shipping_address_line_2' => 'get_user_meta', + 'shipping_city' => 'get_user_meta', + 'shipping_state' => 'get_user_meta', + 'shipping_postal_code' => 'get_user_meta', + 'shipping_country' => 'get_user_meta', + 'billing_address_line_1' => 'get_user_meta', + 'billing_address_line_2' => 'get_user_meta', + 'billing_city' => 'get_user_meta', + 'billing_state' => 'get_user_meta', + 'billing_postal_code' => 'get_user_meta', + 'billing_country' => 'get_user_meta', + + 'skus_bought' => 'hubwoo_user_meta', + 'last_skus_bought' => 'hubwoo_user_meta', + + 'categories_bought' => 'hubwoo_user_meta', + 'last_categories_bought' => 'hubwoo_user_meta', + + 'last_order_status' => 'hubwoo_user_meta', + 'last_order_fulfillment_status' => 'hubwoo_user_meta', + 'last_order_tracking_number' => 'hubwoo_user_meta', + 'last_order_tracking_url' => 'hubwoo_user_meta', + 'last_order_shipment_date' => 'hubwoo_user_meta', + 'last_order_order_number' => 'hubwoo_user_meta', + 'last_order_currency' => 'hubwoo_user_meta', + 'total_number_of_current_orders' => 'hubwoo_user_meta', + + 'total_value_of_orders' => 'hubwoo_user_meta', + 'average_order_value' => 'hubwoo_user_meta', + 'total_number_of_orders' => 'hubwoo_user_meta', + 'first_order_date' => 'hubwoo_user_meta', + 'first_order_value' => 'hubwoo_user_meta', + 'last_order_date' => 'hubwoo_user_meta', + 'last_order_value' => 'hubwoo_user_meta', + 'average_days_between_orders' => 'hubwoo_user_meta', + 'account_creation_date' => 'hubwoo_user_meta', + 'monetary_rating' => 'hubwoo_user_meta', + 'order_frequency_rating' => 'hubwoo_user_meta', + 'order_recency_rating' => 'hubwoo_user_meta', + + 'last_product_bought' => 'hubwoo_user_meta', + 'last_product_types_bought' => 'hubwoo_user_meta', + 'last_products_bought' => 'hubwoo_user_meta', + 'last_products_bought_html' => 'hubwoo_user_meta', + 'last_total_number_of_products_bought' => 'hubwoo_user_meta', + 'product_types_bought' => 'hubwoo_user_meta', + 'last_products_bought_product_1_image_url' => 'hubwoo_user_meta', + 'last_products_bought_product_1_name' => 'hubwoo_user_meta', + 'last_products_bought_product_1_price' => 'hubwoo_user_meta', + 'last_products_bought_product_1_url' => 'hubwoo_user_meta', + 'last_products_bought_product_2_image_url' => 'hubwoo_user_meta', + 'last_products_bought_product_2_name' => 'hubwoo_user_meta', + 'last_products_bought_product_2_price' => 'hubwoo_user_meta', + 'last_products_bought_product_2_url' => 'hubwoo_user_meta', + 'last_products_bought_product_3_image_url' => 'hubwoo_user_meta', + 'last_products_bought_product_3_name' => 'hubwoo_user_meta', + 'last_products_bought_product_3_price' => 'hubwoo_user_meta', + 'last_products_bought_product_3_url' => 'hubwoo_user_meta', + 'products_bought' => 'hubwoo_user_meta', + 'total_number_of_products_bought' => 'hubwoo_user_meta', + + 'last_subscription_order_number' => 'hubwoo_user_subs_data', + 'last_subscription_parent_order_number' => 'hubwoo_user_subs_data', + 'last_subscription_order_status' => 'hubwoo_user_subs_data', + 'last_subscription_order_creation_date' => 'hubwoo_user_subs_data', + 'last_subscription_order_paid_date' => 'hubwoo_user_subs_data', + 'last_subscription_order_completed_date' => 'hubwoo_user_subs_data', + 'last_subscription_trial_end_date' => 'hubwoo_user_subs_data', + 'last_subscription_next_payment_date' => 'hubwoo_user_subs_data', + 'last_subscription_billing_period' => 'hubwoo_user_subs_data', + 'last_subscription_billing_interval' => 'hubwoo_user_subs_data', + 'last_subscription_products' => 'hubwoo_user_subs_data', + 'related_last_order_creation_date' => 'hubwoo_user_subs_data', + 'related_last_order_paid_date' => 'hubwoo_user_subs_data', + 'related_last_order_completed_date' => 'hubwoo_user_subs_data', + ); + + /** + * Constructor. + * + * @since 1.0.0 + * @param int $contact_id contact id to get property values of. + */ + public function __construct( $contact_id ) { + + $this->_contact_id = $contact_id; + + $this->_user = get_user_by( 'id', $this->_contact_id ); + } + + /** + * Property value. + * + * @param string $property_name name of the contact property. + * @since 1.0.0 + */ + public function _get_property_value( $property_name ) { + + $value = ''; + + if ( ! empty( $property_name ) ) { + + $callback_function = $this->_get_property_callback( $property_name ); + + if ( ! empty( $callback_function ) ) { + + $value = $this->$callback_function( $property_name ); + } + } + + $value = apply_filters( 'hubwoo_contact_property_value', $value, $property_name, $this->_contact_id ); + + return $value; + } + + /** + * Filter the property callback to get value of. + * + * @param strig $property_name name of the property. + * @return string/false callback function name or false. + */ + private function _get_property_callback( $property_name ) { + + if ( array_key_exists( $property_name, $this->_property_callbacks ) ) { + + $callback = $this->_property_callbacks[ $property_name ]; + return $callback; + } + + return false; + } + + /** + * Get contact user role. + * + * @return string user role of the current contact. + * @since 1.0.0 + */ + public function get_contact_group() { + + $user_roles = isset( $this->_user->roles ) ? $this->_user->roles : ''; + + return HubwooGuestOrdersManager::hubwoo_format_array( $user_roles ); + } + + /** + * User email. + * + * @since 1.0.0 + */ + public function _get_mail() { + + return $this->_user->data->user_email; + } + + /** + * Get customer meta. + * + * @since 1.0.0 + * @param string $property_name name of property. + */ + public function get_user_meta( $property_name ) { + + switch ( $property_name ) { + + case 'shipping_address_line_1': + $key = 'shipping_address_1'; + break; + + case 'shipping_address_line_2': + $key = 'shipping_address_2'; + break; + + case 'shipping_postal_code': + $key = 'shipping_postcode'; + break; + + case 'billing_address_line_1': + $key = 'billing_address_1'; + break; + + case 'billing_address_line_2': + $key = 'billing_address_2'; + break; + + case 'billing_postal_code': + $key = 'billing_postcode'; + break; + + default: + $key = $property_name; + } + + if ( 'billing_country' == $key ) { + $value = get_user_meta( $this->_contact_id, $key, true ); + $value = Hubwoo::map_country_by_abbr( $value ); + } elseif ( 'billing_state' == $key ) { + $value = get_user_meta( $this->_contact_id, $key, true ); + $value = Hubwoo::map_state_by_abbr( $value, get_user_meta( $this->_contact_id, 'billing_country', true ) ); + } elseif ( 'shipping_country' == $key ) { + $value = get_user_meta( $this->_contact_id, $key, true ); + $value = Hubwoo::map_country_by_abbr( $value ); + } elseif ( 'shipping_state' == $key ) { + $value = get_user_meta( $this->_contact_id, $key, true ); + $value = Hubwoo::map_state_by_abbr( $value, get_user_meta( $this->_contact_id, 'shipping_country', true ) ); + } else { + $value = get_user_meta( $this->_contact_id, $key, true ); + } + return $value; + } + + /** + * User details with hubwoo_ prefix. + * + * @since 1.0.0 + * @param string $key name of the user key. + */ + public function hubwoo_user_meta( $key ) { + + if ( array_key_exists( $key, $this->_cache ) ) { + + return $this->_cache[ $key ]; + } + + $order_statuses = get_option( 'hubwoo-selected-order-status', array() ); + + if ( empty( $order_statuses ) ) { + + $order_statuses = array_keys( wc_get_order_statuses() ); + } + + //hpos changes + if( Hubwoo::hubwoo_check_hpos_active() ) { + $query = new WC_Order_Query(array( + 'posts_per_page' => -1, + 'post_status' => $order_statuses, + 'orderby' => 'date', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'customer_id' => $this->_contact_id, + )); + + $customer_orders = $query->get_orders(); + } else { + $query = new WP_Query(); + + $customer_orders = $query->query( + array( + 'post_type' => 'shop_order', + 'posts_per_page' => -1, + 'post_status' => $order_statuses, + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => '_customer_user', + 'value' => $this->_contact_id, + ), + ), + ) + ); + } + + $last_order = ! empty( $customer_orders ) && is_array( $customer_orders ) ? $customer_orders[0] : ''; + $customer = new WP_User( $this->_contact_id ); + + $order_frequency = 0; + + $account_creation = isset( $customer->data->user_registered ) ? $customer->data->user_registered : ''; + + if ( ! empty( $account_creation ) ) { + + $account_creation = strtotime( $account_creation ); + } + + if ( ! empty( $account_creation ) && 0 < $account_creation ) { + + $this->_cache['account_creation_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $account_creation ); + } + + $categories_bought = array(); + $skus_bought = array(); + $product_types_bought = array(); + $last_3_products_ids = array(); + $last_products_bought = array(); + $last_order_date = 0; + $last_products_bought_html = array(); + $days_differences = array(); + $last_type_bought = ''; + $first_date = 0; + $last_date = 0; + $average_days = array(); + $products_bought = array(); + $last_product_bought = ''; + $last_order_for_html = 0; + $last_order_id = 0; + + $order_tracking_number = get_post_meta( $last_order, '_wc_shipment_tracking_items', true ); + if ( ! empty( $order_tracking_number ) ) { + + $shipment_data = $order_tracking_number[0]; + + if ( ! empty( $shipment_data['date_shipped'] ) ) { + $this->_cache['last_order_shipment_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $shipment_data['date_shipped'] ); + } + if ( ! empty( $shipment_data['tracking_number'] ) ) { + $this->_cache['last_order_tracking_number'] = $shipment_data['tracking_number']; + } + if ( ! empty( $shipment_data['custom_tracking_link'] ) ) { + $this->_cache['last_order_tracking_url'] = $shipment_data['custom_tracking_link']; + } + } + + $contact_preferred_lang = get_user_meta( $this->_contact_id, 'hubwoo_preferred_language', true ); + + if ( isset( $contact_preferred_lang ) && ! empty( $contact_preferred_lang ) ) { + $this->_cache['hs_language'] = $contact_preferred_lang; + } + + $this->_cache['shopping_cart_customer_id'] = $this->_contact_id; + + $this->_cache['customer_source_store'] = get_bloginfo( 'name' ); + + $this->_cache['total_number_of_current_orders'] = 0; + + $this->_cache['last_total_number_of_products_bought'] = 0; + + $this->_cache['total_number_of_orders'] = 0; + + $this->_cache['order_recency_rating'] = 1; + + $this->_cache['order_frequency_rating'] = 1; + + $this->_cache['monetary_rating'] = 1; + + $optin = 'yes'; + $reg_optin = get_user_meta( $this->_contact_id, 'hubwoo_registeration_marketing_optin', true ); + $check_optin = get_user_meta( $this->_contact_id, 'hubwoo_checkout_marketing_optin', true ); + + $optin_sources = array(); + + if ( empty( $reg_optin ) ) { + $optin = $check_optin; + } + + if ( empty( $optin ) ) { + $optin = 'no'; + } + + $property_updated = get_option( 'hubwoo_newsletter_property_update', 'no' ); + + if ( ! empty( $property_updated ) && 'yes' == $property_updated ) { + if ( 'yes' == $optin ) { + $optin = true; + } else { + $optin = false; + } + } + + if ( ! empty( $reg_optin ) && 'yes' == $reg_optin ) { + $optin_sources[] = 'registration'; + } + + if ( ! empty( $check_optin ) && 'yes' == $check_optin ) { + $optin_sources[] = 'checkout'; + } + + $this->_cache['newsletter_subscription'] = $optin; + + $this->_cache['marketing_newsletter'] = HubwooGuestOrdersManager::hubwoo_format_array( $optin_sources ); + + $this->_cache['total_value_of_orders'] = 0; + + $this->_cache['total_number_of_products_bought'] = 0; + + // if customer have orders. + if ( is_array( $customer_orders ) && count( $customer_orders ) ) { + + $this->_cache['total_number_of_orders'] = count( $customer_orders ); + + $order_frequency = $this->_cache['total_number_of_orders']; + + $counter = 0; + + $products_count = 0; + + foreach ( $customer_orders as $order_id ) { + + if ( ! $order_id ) { + + continue; + } + + // order date. + $order_date = get_post_time( 'U', false, $order_id ); + + $last_date = $order_date; + + if ( 0 == $first_date ) { + + $first_date = $last_date; + } + + $average_days[] = $this->hubwoo_get_average_days( $first_date, $last_date ); + + $first_date = $last_date; + + // get order. + $order = new WC_Order( $order_id ); + + // check for WP_Error object. + if ( empty( $order ) || is_wp_error( $order ) ) { + continue; + } + + $order_status = $order->get_status(); + + if ( 'failed' !== $order_status && 'cancelled' !== $order_status ) { + + $last_order_for_html++; + + $order_items = $order->get_items(); + + // check if order has items. + if ( is_array( $order_items ) && count( $order_items ) ) { + + // let's loop each order item to get the details. + foreach ( $order_items as $item_id_1 => $wc_order_item_product ) { + + if ( ! empty( $wc_order_item_product ) && $wc_order_item_product instanceof WC_Order_Item ) { + + $item_id = $wc_order_item_product->get_product_id(); + $parent_item_sku = get_post_meta( $item_id, '_sku', true ); + $item_var_id = $wc_order_item_product->get_variation_id(); + + if ( 'trash' == get_post_status( $item_id ) || false == get_post_status( $item_id ) ) { + + continue; + } + + $product_cats_ids = wc_get_product_term_ids( $item_id, 'product_cat' ); + + if ( is_array( $product_cats_ids ) && count( $product_cats_ids ) ) { + + foreach ( $product_cats_ids as $cat_id ) { + + $term = get_term_by( 'id', $cat_id, 'product_cat' ); + $categories_bought[] = $term->slug; + } + } + + if ( $item_var_id ) { + + $item_id = $item_var_id; + } + + $products_count += $wc_order_item_product->get_quantity(); + + $item_sku = get_post_meta( $item_id, '_sku', true ); + + if ( empty( $item_sku ) || '' == $item_sku ) { + + $item_sku = $parent_item_sku; + } + + if ( empty( $item_sku ) || '' == $item_sku ) { + + $item_sku = $item_id; + } + + $skus_bought[] = $item_sku; + + $post = get_post( $item_id ); + + $product_uni_name = isset( $post->post_name ) ? $post->post_name : ''; + + if ( ! empty( $product_uni_name ) ) { + + $products_bought[] = $product_uni_name . '-' . $item_id; + $last_product_bought = $product_uni_name . '-' . $item_id; + $last_products_bought[] = $product_uni_name . '-' . $item_id; + } + + $product = $wc_order_item_product->get_product(); + + if ( $product instanceof WC_Product ) { + + $product_type = $product->get_type(); + } else { + + $product_type = ''; + } + + if ( 'variation' == $product_type ) { + + $product_type = 'variable'; + } + + if ( 'subscription_variation' == $product_type ) { + + $product_type = 'variable-subscription'; + } + + if ( ! empty( $product_type ) ) { + + $product_types_bought[] = $product_type; + } + + if ( count( $last_3_products_ids ) < 3 ) { + + $last_3_products_ids[] = $item_id; + } + + if ( 1 == $last_order_for_html ) { + + $last_order_id = $order_id; + } + } + } + } + } + + $order_total = $order->get_total(); + + $this->_cache['total_value_of_orders'] += floatval( $order_total ); + + if ( 'failed' !== $order_status && 'cancelled' !== $order_status && 'refunded' !== $order_status && 'completed' !== $order_status ) { + + $this->_cache['total_number_of_current_orders'] += 1; + } + + // check for last order and finish all last order calculations. + if ( ! $counter ) { + + $last_order_date = get_post_time( 'U', false, $order_id ); + + if ( ! empty( $last_order_date ) ) { + + $this->_cache['last_order_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $last_order_date ); + } + + $this->_cache['last_order_value'] = $order_total; + + $this->_cache['last_order_order_number'] = $order_id; + + $this->_cache['last_order_currency'] = $order->get_currency(); + + $this->_cache['last_order_fulfillment_status'] = 'wc-' . $order_status; + + $this->_cache['last_order_status'] = 'wc-' . $order->get_status(); + + $this->_cache['last_product_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $last_product_bought ); + + $this->_cache['last_products_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $last_products_bought ); + + $this->_cache['last_skus_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $skus_bought ); + + $this->_cache['last_categories_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $categories_bought ); + + $this->_cache['last_product_types_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $product_types_bought ); + + $this->_cache['last_total_number_of_products_bought'] = $products_count; + + $this->_cache['last_products_bought_html'] = HubWooContactProperties::get_instance()->hubwoo_last_order_html( $last_order_id ); + } + + // check for first order. + if ( ( count( $customer_orders ) - 1 ) == $counter ) { + + // first order based calculation here.. + $first_order_date = get_post_time( 'U', false, $order_id ); + + if ( ! empty( $first_order_date ) ) { + + $this->_cache['first_order_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $first_order_date ); + } + + $this->_cache['first_order_value'] = $order_total; + } + + $counter++; + } + + // rest calculations here. + $this->_cache['average_order_value'] = floatval( $this->_cache['total_value_of_orders'] / $this->_cache['total_number_of_orders'] ); + + $this->_cache['average_days_between_orders'] = floatval( array_sum( $average_days ) / $this->_cache['total_number_of_orders'] ); + + $this->_cache['skus_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $skus_bought ); + + $this->_cache['categories_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $categories_bought ); + + $this->_cache['product_types_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $product_types_bought ); + + $this->_cache['products_bought'] = HubwooGuestOrdersManager::hubwoo_format_array( $products_bought ); + + $this->_cache['total_number_of_products_bought'] = $products_count; + + if ( is_array( $last_3_products_ids ) && count( $last_3_products_ids ) ) { + + $counter = 1; + + foreach ( $last_3_products_ids as $last_3_product_id ) { + + $_product = wc_get_product( $last_3_product_id ); + + if ( $_product instanceof WC_Product ) { + + $image_url = ''; + + $this->_cache[ 'last_products_bought_product_' . $counter . '_name' ] = $_product->get_title(); + + $attachment_src = wp_get_attachment_image_src( get_post_thumbnail_id( $last_3_product_id ), 'single-post-thumbnail' ); + + if ( empty( $attachment_src[0] ) ) { + + $parent_id = $_product->get_parent_id(); + $attachment_src = wp_get_attachment_image_src( get_post_thumbnail_id( $parent_id ), 'single-post-thumbnail' ); + } + + if ( ! empty( $attachment_src[0] ) ) { + $image_url = $attachment_src[0]; + } + + $this->_cache[ 'last_products_bought_product_' . $counter . '_image_url' ] = $image_url; + + $this->_cache[ 'last_products_bought_product_' . $counter . '_price' ] = $_product->get_price(); + + $this->_cache[ 'last_products_bought_product_' . $counter . '_url' ] = get_permalink( $last_3_product_id ); + + $counter++; + } + } + } + + $hubwoo_rfm_at_5 = get_option( + 'hubwoo_rfm_5', + array( + 0 => 30, + 1 => 20, + 2 => 1000, + ) + ); + + $hubwoo_from_rfm_4 = get_option( + 'hubwoo_from_rfm_4', + array( + 0 => 31, + 1 => 10, + 2 => 750, + ) + ); + + $hubwoo_to_rfm_4 = get_option( + 'hubwoo_to_rfm_4', + array( + 0 => 90, + 1 => 20, + 2 => 1000, + ) + ); + + $hubwoo_from_rfm_3 = get_option( + 'hubwoo_from_rfm_3', + array( + 0 => 91, + 1 => 5, + 2 => 500, + ) + ); + + $hubwoo_to_rfm_3 = get_option( + 'hubwoo_to_rfm_3', + array( + 0 => 180, + 1 => 10, + 2 => 750, + ) + ); + + $hubwoo_from_rfm_2 = get_option( + 'hubwoo_from_rfm_2', + array( + 0 => 181, + 1 => 2, + 2 => 250, + ) + ); + + $hubwoo_to_rfm_2 = get_option( + 'hubwoo_to_rfm_2', + array( + 0 => 365, + 1 => 5, + 2 => 500, + ) + ); + + $hubwoo_rfm_at_1 = get_option( + 'hubwoo_rfm_1', + array( + 0 => 365, + 1 => 2, + 2 => 250, + ) + ); + + $order_monetary = $this->_cache['total_value_of_orders']; + + $current_date = gmdate( 'Y-m-d H:i:s', time() ); + $current_date = new DateTime( $current_date ); + $last_order_date = gmdate( 'Y-m-d H:i:s', $last_order_date ); + $last_order_date = new DateTime( $last_order_date ); + $order_recency = date_diff( $current_date, $last_order_date, true ); + + $order_recency = $order_recency->days; + + if ( $order_recency <= $hubwoo_rfm_at_5[0] ) { + + $this->_cache['order_recency_rating'] = 5; + } elseif ( $order_recency >= $hubwoo_from_rfm_4[0] && $order_recency <= $hubwoo_to_rfm_4[0] ) { + + $this->_cache['order_recency_rating'] = 4; + } elseif ( $order_recency >= $hubwoo_from_rfm_3[0] && $order_recency <= $hubwoo_to_rfm_3[0] ) { + + $this->_cache['order_recency_rating'] = 3; + } elseif ( $order_recency >= $hubwoo_from_rfm_2[0] && $order_recency <= $hubwoo_to_rfm_2[0] ) { + + $this->_cache['order_recency_rating'] = 2; + } else { + + $this->_cache['order_recency_rating'] = 1; + } + + if ( $order_frequency > $hubwoo_rfm_at_5[1] ) { + + $this->_cache['order_frequency_rating'] = 5; + } elseif ( $order_frequency >= $hubwoo_from_rfm_4[1] && $order_frequency < $hubwoo_to_rfm_4[1] ) { + + $this->_cache['order_frequency_rating'] = 4; + } elseif ( $order_frequency >= $hubwoo_from_rfm_3[1] && $order_frequency < $hubwoo_to_rfm_3[1] ) { + + $this->_cache['order_frequency_rating'] = 3; + } elseif ( $order_frequency >= $hubwoo_from_rfm_2[1] && $order_frequency < $hubwoo_to_rfm_2[1] ) { + + $this->_cache['order_frequency_rating'] = 2; + } else { + + $this->_cache['order_frequency_rating'] = 1; + } + + if ( $order_monetary > $hubwoo_rfm_at_5[2] ) { + + $this->_cache['monetary_rating'] = 5; + } elseif ( $order_monetary >= $hubwoo_from_rfm_4[2] && $order_monetary <= $hubwoo_to_rfm_4[2] ) { + + $this->_cache['monetary_rating'] = 4; + } elseif ( $order_monetary >= $hubwoo_from_rfm_3[2] && $order_monetary < $hubwoo_to_rfm_3[2] ) { + + $this->_cache['monetary_rating'] = 3; + } elseif ( $order_monetary >= $hubwoo_from_rfm_2[2] && $order_monetary < $hubwoo_to_rfm_2[2] ) { + + $this->_cache['monetary_rating'] = 2; + } else { + + $this->_cache['monetary_rating'] = 1; + } + } + + if ( isset( $this->_cache[ $key ] ) ) { + + return $this->_cache[ $key ]; + } + } + + /** + * Contact subscriptions data. + * + * @param string $key for subscription properties. + * @since 1.0.0 + */ + public function hubwoo_user_subs_data( $key ) { + + if ( Hubwoo::hubwoo_subs_active() && 'no' == get_option( 'hubwoo_subs_settings_enable', 'yes' ) ) { + + return; + } + + if ( array_key_exists( $key, $this->_cache ) ) { + + return $this->_cache[ $key ]; + } + + $query = new WP_Query(); + + $customer_orders = $query->query( + array( + 'post_type' => 'shop_subscription', + 'posts_per_page' => 1, + 'post_status' => 'any', + 'orderby' => 'date', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => '_customer_user', + 'value' => $this->_contact_id, + ), + ), + ) + ); + + // if customer have orders. + if ( is_array( $customer_orders ) && count( $customer_orders ) ) { + + foreach ( $customer_orders as $counter => $order_id ) { + + // if order id not found let's check for another order. + if ( ! $order_id ) { + continue; + } + + // get order. + $order = wc_get_order( $order_id ); + + // check for WP_Error object. + if ( empty( $order ) || is_wp_error( $order ) ) { + + continue; + } + + $subs_order = new WC_Subscription( $order_id ); + + $order_items = $order->get_items(); + + if ( is_array( $order_items ) && count( $order_items ) ) { + + $subs_products = array(); + + // let's loop each order item to get the details. + foreach ( $order_items as $item_id_1 => $wc_order_item_product ) { + + if ( ! empty( $wc_order_item_product ) && $wc_order_item_product instanceof WC_Order_Item ) { + + $item_id = $wc_order_item_product->get_product_id(); + + if ( get_post_status( $item_id ) == 'trash' || get_post_status( $item_id ) == false ) { + + continue; + } + + $post = get_post( $item_id ); + + $product_uni_name = isset( $post->post_name ) ? $post->post_name : ''; + + if ( ! empty( $product_uni_name ) ) { + + $subs_products[] = $product_uni_name . '-' . $item_id; + } + } + } + + if ( count( $subs_products ) ) { + + $this->_cache['last_subscription_products'] = HubwooGuestOrdersManager::hubwoo_format_array( $subs_products ); + } + + if ( $subs_order->get_status() == 'pending-cancel' || $subs_order->get_status() == 'cancelled' ) { + + $this->_cache['last_subscription_products'] = ' '; + } + } + + $order_data = $order->get_data(); + + if ( ! empty( $order_data['schedule_trial_end'] ) ) { + + $this->_cache['last_subscription_trial_end_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $order_data['schedule_trial_end']->getTimestamp() ); + } + + if ( ! empty( $order_data['schedule_next_payment'] ) && $order_data['schedule_next_payment'] instanceof WC_DateTime ) { + + $this->_cache['last_subscription_next_payment_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( $order_data['schedule_next_payment']->getTimestamp() ); + } + + $this->_cache['last_subscription_order_status'] = 'wc-' . $subs_order->get_status(); + + $this->_cache['last_subscription_order_number'] = $subs_order->get_id(); + + $this->_cache['last_subscription_parent_order_number'] = $subs_order->get_parent_id(); + + $date_created = ! empty( $subs_order->get_date( 'date_created' ) ) ? $subs_order->get_date( 'date_created' ) : ''; + + if ( ! empty( $date_created ) ) { + + $this->_cache['last_subscription_order_creation_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( strtotime( $date_created ) ); + } + + $date_paid = ! empty( $subs_order->get_date( 'date_paid' ) ) ? $subs_order->get_date( 'date_paid' ) : ''; + + if ( ! empty( $date_paid ) ) { + + $this->_cache['last_subscription_order_paid_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( strtotime( $date_paid ) ); + } + + $date_completed = ! empty( $subs_order->get_date( 'date_completed' ) ) ? $subs_order->get_date( 'date_completed' ) : ''; + + if ( ! empty( $date_completed ) ) { + + $this->_cache['last_subscription_order_completed_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( strtotime( $date_completed ) ); + } + + $last_order_creation_date = ! empty( $subs_order->get_date( 'last_order_date_created' ) ) ? $subs_order->get_date( 'last_order_date_created' ) : ''; + + if ( ! empty( $last_order_creation_date ) ) { + + $this->_cache['related_last_order_creation_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( strtotime( $last_order_creation_date ) ); + } + + $last_order_paid_date = ! empty( $subs_order->get_date( 'last_order_date_paid' ) ) ? $subs_order->get_date( 'last_order_date_paid' ) : ''; + + if ( ! empty( $last_order_date_paid ) ) { + + $this->_cache['related_last_order_paid_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( strtotime( $last_order_paid_date ) ); + } + + $last_order_completion_date = ! empty( $subs_order->get_date( 'last_order_date_completed' ) ) ? $subs_order->get_date( 'last_order_date_completed' ) : ''; + + if ( ! empty( $last_order_completion_date ) ) { + + $this->_cache['related_last_order_completed_date'] = HubwooGuestOrdersManager::hubwoo_set_utc_midnight( strtotime( $last_order_completion_date ) ); + } + + $this->_cache['last_subscription_billing_period'] = ! empty( $subs_order->get_billing_period() ) ? $subs_order->get_billing_period() : ''; + + $this->_cache['last_subscription_billing_interval'] = ! empty( $subs_order->get_billing_interval() ) ? $subs_order->get_billing_interval() : ''; + } + } + + if ( isset( $this->_cache[ $key ] ) ) { + + return $this->_cache[ $key ]; + } + } + + /** + * Return days between two dates + * + * @param int $first_date first order date. + * @param int $last_date last order date. + * @since 1.0.0 + */ + public function hubwoo_get_average_days( $first_date, $last_date ) { + + $now = $first_date; + $your_date = $last_date; + $datediff = $now - $your_date; + return floor( $datediff / ( 60 * 60 * 24 ) ); + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/classes/class-hubwooenum.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/classes/class-hubwooenum.php new file mode 100644 index 00000000..31f4005f --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/classes/class-hubwooenum.php @@ -0,0 +1,43 @@ +getConstants() ) ) { + throw IllegalArgumentException(); + } + $this->value = $value; + } + + /** + * Conver the Enum value to String. + * + * @since 1.0.4 + */ + final public function __toString() { + return $this->value; + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/index.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/index.php new file mode 100644 index 00000000..0de7bcdd --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/includes/index.php @@ -0,0 +1,2 @@ +}i3_4rLY&a>nrfH%Q|9bD7M@Q_{(`R6)<{SfLwMLO zXN~o+vJMv3j%;0{D-gn95L~hBi9h3q?&ADTd6W=|sLw^hV*z0#MgLq3V!<9&>v`^! zX*bGSCxJSq+Nuh9j;j9WC7^km&saK5$NNvhK(LWD9u2MeYUqx~Pk-5Llr}d|td(og z-_G+1PxiU)+zK5Zo5GgbR1%V<_Ux74qd~X(BePg)4^a?Pe`okmwb&@XmJqPsFK%pH Ao&W#< literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce-en_US.po b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce-en_US.po new file mode 100644 index 00000000..eb486dec --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce-en_US.po @@ -0,0 +1,2493 @@ +msgid "" +msgstr "" +"Project-Id-Version: MWB HubSpot for WooCommerce 1.5.7\n" +"POT-Creation-Date: 2024-08-30 12:02+0530\n" +"PO-Revision-Date: 2024-08-30 12:04+0530\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: .\n" + +#: admin/class-hubwoo-admin.php:108 +#, php-format +msgid "Please enter in decimal (%s) format without thousand separators." +msgstr "" + +#: admin/class-hubwoo-admin.php:110 +#, php-format +msgid "" +"Please enter in monetary decimal (%s) format without thousand separators and " +"currency symbols." +msgstr "" + +#: admin/class-hubwoo-admin.php:111 +msgid "Please enter in country code with two capital letters." +msgstr "" + +#: admin/class-hubwoo-admin.php:112 +msgid "Please enter in a value less than the regular price." +msgstr "" + +#: admin/class-hubwoo-admin.php:116 +msgid "Import" +msgstr "" + +#: admin/class-hubwoo-admin.php:117 +msgid "Export" +msgstr "" + +#: admin/class-hubwoo-admin.php:135 +msgid "Something went wrong, please try again later!" +msgstr "" + +#: admin/class-hubwoo-admin.php:136 +msgid "Setup is completed successfully!" +msgstr "" + +#: admin/class-hubwoo-admin.php:137 +msgid "Mail not sent" +msgstr "" + +#: admin/class-hubwoo-admin.php:138 +msgid "Mail Sent Successfully. We will get back to you soon." +msgstr "" + +#: admin/class-hubwoo-admin.php:139 +msgid "" +"Want to continue to switch to new HubSpot account? This cannot be reverted " +"and will require running the whole setup again." +msgstr "" + +#: admin/class-hubwoo-admin.php:140 +msgid "Doing rollback will require running the whole setup again. Continue?" +msgstr "" + +#: admin/class-hubwoo-admin.php:142 +msgid "Please select a list to proceed" +msgstr "" + +#: admin/class-hubwoo-admin.php:143 +msgid "Congratulations !! Your data has been synced successfully." +msgstr "" + +#: admin/class-hubwoo-admin.php:144 +msgid "" +"Something went wrong, Please check the error log and try re-sync your data." +msgstr "" + +#: admin/class-hubwoo-admin.php:170 +msgid "HubSpot" +msgstr "" + +#: admin/class-hubwoo-admin.php:283 +msgid "We use your email to send your Orders related data over HubSpot." +msgstr "" + +#: admin/class-hubwoo-admin.php:285 +msgid "" +"HubSpot is an inbound marketing and sales platform that helps companies " +"attract visitors, convert leads, and close customers." +msgstr "" + +#: admin/class-hubwoo-admin.php:287 +msgid "Please see the " +msgstr "" + +#: admin/class-hubwoo-admin.php:287 +msgid "HubSpot Data Privacy" +msgstr "" + +#: admin/class-hubwoo-admin.php:287 +msgid " for more details." +msgstr "" + +#: admin/class-hubwoo-admin.php:291 +msgid "MWB HubSpot for WooCommerce" +msgstr "" + +#: admin/class-hubwoo-admin.php:314 +msgid "Export your users and customers to HubSpot" +msgstr "" + +#: admin/class-hubwoo-admin.php:320 +msgid "Select user role" +msgstr "" + +#: admin/class-hubwoo-admin.php:323 +msgid "Select a user role from the dropdown. Default will be all user roles." +msgstr "" + +#: admin/class-hubwoo-admin.php:328 +msgid "user-role" +msgstr "" + +#: admin/class-hubwoo-admin.php:333 admin/class-hubwoo-admin.php:2522 +msgid "Select a time period" +msgstr "" + +#: admin/class-hubwoo-admin.php:337 +msgid "Date range for user / order sync" +msgstr "" + +#: admin/class-hubwoo-admin.php:341 +msgid "Users registered from date" +msgstr "" + +#: admin/class-hubwoo-admin.php:346 +msgid "From which date you want to sync the users, select that" +msgstr "" + +#: admin/class-hubwoo-admin.php:350 +msgid "from-date" +msgstr "" + +#: admin/class-hubwoo-admin.php:354 +msgid "Users registered upto date" +msgstr "" + +#: admin/class-hubwoo-admin.php:358 admin/class-hubwoo-admin.php:2545 +msgid "dd-mm-yyyy" +msgstr "" + +#: admin/class-hubwoo-admin.php:359 +msgid "Upto which date you want to sync the users, select that date" +msgstr "" + +#: admin/class-hubwoo-admin.php:363 +msgid "upto-date" +msgstr "" + +#: admin/class-hubwoo-admin.php:540 +msgid "View Document" +msgstr "" + +#: admin/class-hubwoo-admin.php:629 +msgid "" +"The HubSpot for WooCommerce plugin isn’t connected right now. To start sync " +"store data to HubSpot " +msgstr "" + +#: admin/class-hubwoo-admin.php:630 +msgid "connect the plugin now." +msgstr "" + +#: admin/class-hubwoo-admin.php:714 +msgid "" +"We noticed you're using WooCommerce HPOS. To ensure compatibility with the " +"HubSpot WooCommerce plugin, please install the HPOS Addon." +msgstr "" + +#: admin/class-hubwoo-admin.php:717 +msgid "Install Now" +msgstr "" + +#: admin/class-hubwoo-admin.php:796 +#: includes/class-hubwoocontactproperties.php:225 +msgid "Subscriptions Details" +msgstr "" + +#: admin/class-hubwoo-admin.php:1166 +msgid "HubSpot Actions" +msgstr "" + +#: admin/class-hubwoo-admin.php:1182 admin/templates/hubwoo-overview.php:121 +msgid "Abandoned Cart Settings" +msgstr "" + +#: admin/class-hubwoo-admin.php:1188 admin/class-hubwoo-admin.php:2439 +#: admin/class-hubwoo-admin.php:2469 +msgid "Enable/Disable" +msgstr "" + +#: admin/class-hubwoo-admin.php:1190 +msgid "Track Abandoned Carts" +msgstr "" + +#: admin/class-hubwoo-admin.php:1196 +msgid "Guest Users " +msgstr "" + +#: admin/class-hubwoo-admin.php:1198 +msgid "Track Guest Abandoned Carts" +msgstr "" + +#: admin/class-hubwoo-admin.php:1204 +msgid "Delete Old Data " +msgstr "" + +#: admin/class-hubwoo-admin.php:1206 +msgid "Delete Abandoned Carts Data" +msgstr "" + +#: admin/class-hubwoo-admin.php:1212 +msgid "Delete Data Timer( Days )" +msgstr "" + +#: admin/class-hubwoo-admin.php:1215 +msgid "Delete Abandoned cart data form woocommerce store." +msgstr "" + +#: admin/class-hubwoo-admin.php:1222 +msgid "Cart Timer( Minutes )" +msgstr "" + +#: admin/class-hubwoo-admin.php:1225 +msgid "" +"Set the timer for abandoned cart. Customers abandoned cart data will be " +"updated over HubSpot after the specified timer. Minimum value is 5 minutes." +msgstr "" + +#: admin/class-hubwoo-admin.php:1461 +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Image" +msgstr "" + +#: admin/class-hubwoo-admin.php:1461 +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Item" +msgstr "" + +#: admin/class-hubwoo-admin.php:1461 +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Qty" +msgstr "" + +#: admin/class-hubwoo-admin.php:1461 +msgid "Cost" +msgstr "" + +#: admin/class-hubwoo-admin.php:1461 +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Total" +msgstr "" + +#: admin/class-hubwoo-admin.php:1822 +#: includes/class-hubwoocontactproperties.php:2904 +#: includes/class-hubwoocontactproperties.php:3001 +#: includes/class-hubwoocontactproperties.php:3188 +msgid "Yes" +msgstr "" + +#: admin/class-hubwoo-admin.php:1826 +#: includes/class-hubwoocontactproperties.php:2908 +#: includes/class-hubwoocontactproperties.php:3005 +#: includes/class-hubwoocontactproperties.php:3192 +msgid "No" +msgstr "" + +#: admin/class-hubwoo-admin.php:1850 +#: admin/templates/hubwoo-general-settings.php:303 +msgid "Plugin Settings" +msgstr "" + +#: admin/class-hubwoo-admin.php:1856 +msgid "Sync with User Role" +msgstr "" + +#: admin/class-hubwoo-admin.php:1860 +msgid "" +"The users with selected roles will be synced on HubSpot. Default will be all " +"user roles." +msgstr "" + +#: admin/class-hubwoo-admin.php:1868 +msgid "WooCommerce Subscription" +msgstr "" + +#: admin/class-hubwoo-admin.php:1871 +msgid "Enable subscriptions data sync" +msgstr "" + +#: admin/class-hubwoo-admin.php:1878 +msgid "Show Checkbox on Checkout Page" +msgstr "" + +#: admin/class-hubwoo-admin.php:1881 +msgid "Show Opt-In checkbox on Checkout Page" +msgstr "" + +#: admin/class-hubwoo-admin.php:1887 +msgid "Checkbox Label on Checkout Page" +msgstr "" + +#: admin/class-hubwoo-admin.php:1890 admin/class-hubwoo-admin.php:1908 +msgid "Label to show for the checkbox" +msgstr "" + +#: admin/class-hubwoo-admin.php:1892 admin/class-hubwoo-admin.php:1910 +#: public/class-hubwoo-public.php:198 public/class-hubwoo-public.php:219 +msgid "Subscribe" +msgstr "" + +#: admin/class-hubwoo-admin.php:1896 +msgid "Show Checkbox on My Account Page" +msgstr "" + +#: admin/class-hubwoo-admin.php:1899 +msgid "Show Opt-In checkbox on My Account Page (Registration form)" +msgstr "" + +#: admin/class-hubwoo-admin.php:1905 +msgid "Checkbox Label on My Account Page" +msgstr "" + +#: admin/class-hubwoo-admin.php:1914 +msgid "Calculate ROI for the Selected Status" +msgstr "" + +#: admin/class-hubwoo-admin.php:1918 +msgid "" +"Select an order status from the dropdown for which the new order property " +"will be set/changed on each sync. Default Order Status is Completed" +msgstr "" + +#: admin/class-hubwoo-admin.php:2432 +msgid "Apply your settings for Deals and its stages" +msgstr "" + +#: admin/class-hubwoo-admin.php:2441 +msgid "Allow to sync new deals" +msgstr "" + +#: admin/class-hubwoo-admin.php:2448 +msgid "Days required to close a deal" +msgstr "" + +#: admin/class-hubwoo-admin.php:2451 +msgid "" +"set the minimum number of days in which the pending/open deals can be closed/" +"won" +msgstr "" + +#: admin/class-hubwoo-admin.php:2459 +msgid "Winning Deal Stages" +msgstr "" + +#: admin/class-hubwoo-admin.php:2463 +msgid "" +"select the deal stages of ecommerce pipeline which are won according to your " +"business needs. \"Processing\" and \"Completed\" are default winning stages " +"for extension as well as HubSpot" +msgstr "" + +#: admin/class-hubwoo-admin.php:2471 +msgid "Allow to associate deal and company" +msgstr "" + +#: admin/class-hubwoo-admin.php:2478 +msgid "Enable Multi Currency\tSync" +msgstr "" + +#: admin/class-hubwoo-admin.php:2480 +msgid "Enable to sync currency if you are using multi currency on your site." +msgstr "" + +#: admin/class-hubwoo-admin.php:2505 +msgid "Export your old orders as Deals on HubSpot" +msgstr "" + +#: admin/class-hubwoo-admin.php:2512 +msgid "Select order status" +msgstr "" + +#: admin/class-hubwoo-admin.php:2515 +msgid "" +"Select a order status from the dropdown and all orders for the selected " +"status will be synced as deals" +msgstr "" + +#: admin/class-hubwoo-admin.php:2524 +msgid " Date range for orders" +msgstr "" + +#: admin/class-hubwoo-admin.php:2530 +msgid "Orders from date" +msgstr "" + +#: admin/class-hubwoo-admin.php:2535 +msgid "From which date you want to sync the orders, select that date" +msgstr "" + +#: admin/class-hubwoo-admin.php:2541 +msgid "Orders up to date" +msgstr "" + +#: admin/class-hubwoo-admin.php:2546 +msgid "Up to which date you want to sync the orders, select that date" +msgstr "" + +#: admin/class-hubwoo-admin.php:3202 +#: includes/class-hubwoocontactproperties.php:409 +msgid "Customer Source Store" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:20 +msgid "HubSpot Recommended Products Addon" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:24 +msgid "" +"Recommend related products automatically to increase average order value at " +"your store. With this add-on, you can select the products you want to offer " +"as recommendations and send them through automated emails after the purchase." +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:30 admin/templates/hubwoo-add-ons.php:49 +msgid "$79 Buy Now" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:39 +msgid "HubSpot Field To Field Sync" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:43 +msgid "" +"Automate the process of syncing all of your customer information to HubSpot " +"for quicker access and efficient decision making process. With Field to " +"Field Sync for HubSpot, you can easily map HubSpot contact properties and " +"the WordPress users’ fields." +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:58 +msgid "HubSpot Deals For WooCommerce Memberships" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:62 +msgid "" +"HubSpot Deals for WooCommerce Memberships enables you to organize your site " +"members as HubSpot deals with relevant deal stage, plans and the opening and " +"closing dates." +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:68 +msgid "$59 Buy Now" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:77 +msgid "HubSpot Automated Coupons" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:81 +msgid "" +"Create and send discount coupon codes automatically to your customers using " +"HubSpot. Also, monitor your coupon usage with automated coupons." +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:87 admin/templates/hubwoo-add-ons.php:107 +#: admin/templates/hubwoo-add-ons.php:126 +#: admin/templates/hubwoo-add-ons.php:145 +#: admin/templates/hubwoo-add-ons.php:164 admin/templates/hubwoo-support.php:80 +#: admin/templates/hubwoo-support.php:132 +msgid "Get Started" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:92 +msgid "Additional Services" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:97 +msgid "HubSpot Onboarding Services" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:101 +msgid "" +"Maximize your business’s potential with our HubSpot Onboarding Services. Our " +"onboarding services include a personalized approach to streamline HubSpot " +"implementation and training processes." +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:116 +msgid "Custom App/Integration Development Services" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:120 +msgid "" +"Scale your business to new heights with unique functionalities and features " +"that your customers will love. Get our dedicated HubSpot custom app/" +"integration services to fulfill your unique business needs." +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:135 +msgid "HubSpot Themes" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:139 +msgid "" +"Create aesthetic & responsive web pages with minimal efforts with HubSpot " +"themes and offer a great experience on every device." +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:154 +msgid "HubSpot Migration Services" +msgstr "" + +#: admin/templates/hubwoo-add-ons.php:158 +msgid "" +"Our HubSpot Migration Services help you to migrate your website from any CMS " +"to HubSpot along with the blogs, automations, leads, deals, SMSs, calls & " +"emails, etc. with experienced Hubspot migration consultants." +msgstr "" + +#: admin/templates/hubwoo-automation.php:28 +msgid "Automate your marketing, sales, and services" +msgstr "" + +#: admin/templates/hubwoo-automation.php:31 +msgid "Upgrade your HubSpot plan to create automated workflows." +msgstr "" + +#: admin/templates/hubwoo-automation.php:34 +#: admin/templates/hubwoo-general-settings.php:383 +#: admin/templates/setup/hubwoo-list-setup.php:42 +msgid "Upgrade plan" +msgstr "" + +#: admin/templates/hubwoo-automation.php:36 +#: admin/templates/hubwoo-general-settings.php:384 +#: admin/templates/setup/hubwoo-list-setup.php:43 +msgid "Skip this step" +msgstr "" + +#: admin/templates/hubwoo-automation.php:43 +#: admin/templates/hubwoo-general-settings.php:391 +#: admin/templates/setup/hubwoo-list-setup.php:50 +msgid "Connect with MakeWebBetter to learn more about HubSpot’s plans" +msgstr "" + +#: admin/templates/hubwoo-automation.php:46 +#: admin/templates/setup/hubwoo-list-setup.php:53 +msgid "" +"MakeWebBetter is a HubSpot Elite Solutions Partner. Schedule a meeting with " +"our experts to learn more about HubSpot." +msgstr "" + +#: admin/templates/hubwoo-automation.php:48 +#: admin/templates/hubwoo-general-settings.php:396 +#: admin/templates/setup/hubwoo-list-setup.php:55 +msgid "Schedule meeting" +msgstr "" + +#: admin/templates/hubwoo-automation.php:57 +msgid "Workflow" +msgstr "" + +#: admin/templates/hubwoo-automation.php:58 +msgid "Status" +msgstr "" + +#: admin/templates/hubwoo-automation.php:105 +#: admin/templates/hubwoo-automation.php:122 +#: admin/templates/hubwoo-general-settings.php:161 +#: admin/templates/setup/hubwoo-grp-pr-setup.php:205 +#: admin/templates/setup/hubwoo-list-setup.php:154 +msgid "Create" +msgstr "" + +#: admin/templates/hubwoo-deals.php:34 +msgid "" +"eCommerce scopes are missing, please Re-authorize with a Super Admin account " +"from the dashboard to start eCommerce pipeline setup." +msgstr "" + +#: admin/templates/hubwoo-deals.php:48 +msgid "" +"Connect with HubSpot eCommerce pipeline to create deals for your WooCommerce " +"orders. " +msgstr "" + +#: admin/templates/hubwoo-deals.php:53 admin/templates/hubwoo-deals.php:99 +#: admin/templates/hubwoo-deals.php:204 admin/templates/hubwoo-deals.php:241 +msgid "View" +msgstr "" + +#: admin/templates/hubwoo-deals.php:58 +msgid "Run Setup" +msgstr "" + +#: admin/templates/hubwoo-deals.php:74 +msgid "Stop" +msgstr "" + +#: admin/templates/hubwoo-deals.php:91 +msgid "Map Deal Stages with eCommerce pipeline" +msgstr "" + +#: admin/templates/hubwoo-deals.php:94 +msgid "" +"Sync order statuses with deal stages so you can manage your eCommerce " +"pipeline in HubSpot." +msgstr "" + +#: admin/templates/hubwoo-deals.php:108 +#: admin/templates/setup/hubwoo-pipeline-setup.php:32 +msgid "Select Pipeline" +msgstr "" + +#: admin/templates/hubwoo-deals.php:137 +#: admin/templates/setup/hubwoo-pipeline-setup.php:61 +msgid "WooCommerce Order Status" +msgstr "" + +#: admin/templates/hubwoo-deals.php:138 +#: admin/templates/hubwoo-main-template.php:190 +#: admin/templates/setup/hubwoo-pipeline-setup.php:62 +msgid "Deal Stage" +msgstr "" + +#: admin/templates/hubwoo-deals.php:181 +#: admin/templates/setup/hubwoo-pipeline-setup.php:107 +msgid " Reset to Default Mapping" +msgstr "" + +#: admin/templates/hubwoo-deals.php:196 +msgid "Create Deals for New Orders" +msgstr "" + +#: admin/templates/hubwoo-deals.php:199 +msgid "" +"Create Deals in real time for the new orders that are mapped with winning " +"deal stages." +msgstr "" + +#: admin/templates/hubwoo-deals.php:233 +msgid "Sync Historical Orders as Deals" +msgstr "" + +#: admin/templates/hubwoo-deals.php:236 +msgid "" +"Select Order status and the time frame and start syncing all of those orders " +"as deals in HubSpot." +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:32 +msgid "Basic Settings" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:37 +#: admin/templates/hubwoo-main-template.php:178 +msgid "Groups & Properties" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:41 +msgid "" +"Groups & properties are used to store data on certain objects in HubSpot, " +"such as contacts, companies, deals, and tickets. You can have up to 1,000 " +"properties per object, including the default HubSpot properties." +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:47 +#: admin/templates/hubwoo-general-settings.php:234 +#: admin/templates/hubwoo-general-settings.php:316 +#: admin/templates/hubwoo-general-settings.php:359 +msgid "Manage" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:75 +#: admin/templates/setup/hubwoo-grp-pr-setup.php:112 +msgid "Required Group for Lists & Workflows" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:103 +#: admin/templates/setup/hubwoo-grp-pr-setup.php:140 +msgid "Required Property for Lists & Workflows" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:224 +#: admin/templates/hubwoo-main-template.php:184 +msgid "Lists" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:228 +msgid "" +"Lists are HubSpot lists that update automatically, enrolling the contacts " +"who meet the membership criteria and removing those who no longer meet it." +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:295 +msgid "Advanced Settings" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:308 +msgid "Manage all your HubSpot plugin's additional settings from here." +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:345 +msgid "RFM Settings( Manage ROI Tracking )" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:350 +msgid "" +"RFM (Recency, Frequency and Monetary) segmentation allows marketers to " +"target specific clusters of customers with communications that are much more " +"relevant for their particular behavior – and thus generate much higher rates " +"of response, plus increased loyalty and customer lifetime value." +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:377 +#: admin/templates/setup/hubwoo-list-setup.php:36 +msgid "Create more dynamic / active lists" +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:380 +#: admin/templates/setup/hubwoo-list-setup.php:39 +msgid "" +"You have reached maximum limit of Dynamic / Active Lists creation as per " +"your CRM plan." +msgstr "" + +#: admin/templates/hubwoo-general-settings.php:394 +msgid "" +"MakeWebBetter is a HubSpot Elite Solutions Partner. Schedule a meeting with " +"our experts to learn more about HubSpot" +msgstr "" + +#: admin/templates/hubwoo-logs.php:18 +msgid "Sync Log" +msgstr "" + +#: admin/templates/hubwoo-logs.php:25 +msgid "Clear Log" +msgstr "" + +#: admin/templates/hubwoo-logs.php:30 admin/templates/hubwoo-support.php:114 +msgid "Download" +msgstr "" + +#: admin/templates/hubwoo-logs.php:41 +msgid "Expand" +msgstr "" + +#: admin/templates/hubwoo-logs.php:42 +msgid "Feed" +msgstr "" + +#: admin/templates/hubwoo-logs.php:46 +msgid " Object" +msgstr "" + +#: admin/templates/hubwoo-logs.php:49 +msgid "Time" +msgstr "" + +#: admin/templates/hubwoo-logs.php:50 +msgid "Request" +msgstr "" + +#: admin/templates/hubwoo-logs.php:51 +msgid "Response" +msgstr "" + +#: admin/templates/hubwoo-logs.php:58 +msgid "Please enable the log" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:96 +msgid "" +"Your contacts are syncing in the background so you can safely leave this " +"page." +msgstr "" + +#: admin/templates/hubwoo-main-template.php:110 +msgid "Stop Sync" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:171 +#: includes/class-hubwoocontactproperties.php:3168 +msgid "1" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:172 +msgid "Connection" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:177 +#: includes/class-hubwoocontactproperties.php:3164 +msgid "2" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:183 +#: includes/class-hubwoocontactproperties.php:3160 +msgid "3" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:189 +#: includes/class-hubwoocontactproperties.php:3156 +msgid "4" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:195 +#: includes/class-hubwoocontactproperties.php:3152 +msgid "5" +msgstr "" + +#: admin/templates/hubwoo-main-template.php:196 +msgid "Sync" +msgstr "" + +#: admin/templates/hubwoo-overview.php:25 +msgid "Disconnect your WooCommerce store from HubSpot" +msgstr "" + +#: admin/templates/hubwoo-overview.php:27 +msgid "" +"Do you want to delete all your WooCommerce data from HubSpot? If yes, check " +"the box." +msgstr "" + +#: admin/templates/hubwoo-overview.php:34 +msgid "Confirm and Disconnect" +msgstr "" + +#: admin/templates/hubwoo-overview.php:35 +msgid "Cancel and Go Back" +msgstr "" + +#: admin/templates/hubwoo-overview.php:46 +msgid "Connected Hubspot Account" +msgstr "" + +#: admin/templates/hubwoo-overview.php:50 +msgid "Re-Authorize your Account" +msgstr "" + +#: admin/templates/hubwoo-overview.php:56 +msgid "Disconnect Store" +msgstr "" + +#: admin/templates/hubwoo-overview.php:59 +msgid "Open HubSpot" +msgstr "" + +#: admin/templates/hubwoo-overview.php:68 +msgid "CONTACTS SYNCED" +msgstr "" + +#: admin/templates/hubwoo-overview.php:73 +msgid "DEALS SYNCED" +msgstr "" + +#: admin/templates/hubwoo-overview.php:78 +msgid "PRODUCTS SYNCED" +msgstr "" + +#: admin/templates/hubwoo-overview.php:92 +msgid "Sync WooCommerce orders with HubSpot eCommerce pipeline" +msgstr "" + +#: admin/templates/hubwoo-overview.php:98 +msgid "" +"Automatically create deals in your HubSpot sales pipeline when new " +"WooCommerce orders are created." +msgstr "" + +#: admin/templates/hubwoo-overview.php:104 +msgid "Deals Settings" +msgstr "" + +#: admin/templates/hubwoo-overview.php:111 +msgid "Set up abandoned cart capture" +msgstr "" + +#: admin/templates/hubwoo-overview.php:116 +msgid "" +"Automatically track people that have added products to their cart and did " +"not check out." +msgstr "" + +#: admin/templates/hubwoo-overview.php:129 +msgid "Automate your sales, marketing and support" +msgstr "" + +#: admin/templates/hubwoo-overview.php:136 +msgid "" +"Convert more leads into customers, drive more sales, and scale your support." +msgstr "" + +#: admin/templates/hubwoo-overview.php:140 +msgid "This requires a " +msgstr "" + +#: admin/templates/hubwoo-overview.php:143 +msgid "HubSpot Professional or Enterprise plan." +msgstr "" + +#: admin/templates/hubwoo-overview.php:150 +msgid "Automation Settings" +msgstr "" + +#: admin/templates/hubwoo-overview.php:158 +msgid "Manage basic & advanced settings" +msgstr "" + +#: admin/templates/hubwoo-overview.php:165 +msgid "" +"Modify any of your basic & advanced settings to make sure the MWB HubSpot " +"for WooCommerce integration is set up for your business needs." +msgstr "" + +#: admin/templates/hubwoo-overview.php:170 +msgid "View Basic & Advanced Settings" +msgstr "" + +#: admin/templates/hubwoo-overview.php:178 +msgid "Download HubSpot’s WordPress plugin" +msgstr "" + +#: admin/templates/hubwoo-overview.php:185 +msgid "" +"Do even more for your online store with HubSpot’s official WordPress plugin. " +"Download the plugin to easily manage your HubSpot account without navigating " +"away from the WordPress backend." +msgstr "" + +#: admin/templates/hubwoo-overview.php:198 +msgid "User guide documentation" +msgstr "" + +#: admin/templates/hubwoo-overview.php:205 +msgid "" +"To get the most out of the WooCommerce HubSpot integration, check out the " +"user guide documentation for more details." +msgstr "" + +#: admin/templates/hubwoo-overview.php:210 +msgid "View User Guides" +msgstr "" + +#: admin/templates/hubwoo-overview.php:221 +msgid "" +"Our HubSpot Onboarding Services offer a personalized strategy to streamline " +"HubSpot implementations, migrations, integrations, and training." +msgstr "" + +#: admin/templates/hubwoo-support.php:20 +msgid "User Guide and Documentation" +msgstr "" + +#: admin/templates/hubwoo-support.php:24 +msgid "" +"Follow through the steps and directions mentioned in our documentation for " +"hands-on experience." +msgstr "" + +#: admin/templates/hubwoo-support.php:29 +msgid "View Guide" +msgstr "" + +#: admin/templates/hubwoo-support.php:37 +msgid "Knowledgebase of HubSpot Plugins" +msgstr "" + +#: admin/templates/hubwoo-support.php:41 +msgid "" +"Learn more about your HubSpot integration and get your basic queries " +"resolved with our detailed Q/A guides." +msgstr "" + +#: admin/templates/hubwoo-support.php:46 +msgid "Learn More" +msgstr "" + +#: admin/templates/hubwoo-support.php:54 +msgid "Free Support" +msgstr "" + +#: admin/templates/hubwoo-support.php:58 +msgid "" +"We’re available 24/7 at your service. Get connected with our skilled and " +"experienced experts to get your queries resolved in no time." +msgstr "" + +#: admin/templates/hubwoo-support.php:63 +msgid "Connect Us" +msgstr "" + +#: admin/templates/hubwoo-support.php:71 +msgid "Custom Development Service" +msgstr "" + +#: admin/templates/hubwoo-support.php:75 +msgid "" +"Explore our custom development services if you need to get any specific " +"feature for your business process to function more smoothly." +msgstr "" + +#: admin/templates/hubwoo-support.php:88 +msgid "Book a Meeting" +msgstr "" + +#: admin/templates/hubwoo-support.php:92 +msgid "" +"Need personalized and dedicated assistance from our skilled experts? " +"Schedule a 15-minutes meeting and get your business started with HubSpot." +msgstr "" + +#: admin/templates/hubwoo-support.php:97 +msgid "Book Now" +msgstr "" + +#: admin/templates/hubwoo-support.php:105 +msgid "Download Plugin Log File" +msgstr "" + +#: admin/templates/hubwoo-support.php:109 +msgid "" +"Share your log files, if you face troubles working with the plugin, with our " +"tech team." +msgstr "" + +#: admin/templates/hubwoo-support.php:122 +msgid "HubSpot CMS Services" +msgstr "" + +#: admin/templates/hubwoo-support.php:126 +msgid "" +"Build amazingly beautiful and interactive websites with our easy-to-use " +"HubSpot themes." +msgstr "" + +#: admin/templates/hubwoo-sync-contacts.php:31 +msgid "Fetching all of the recently updated and un-synced users / orders" +msgstr "" + +#: admin/templates/hubwoo-sync-contacts.php:33 +#: admin/templates/setup/hubwoo-sync.php:60 +msgid "Sync Now" +msgstr "" + +#: admin/templates/hubwoo-sync-contacts.php:34 +msgid "Schedule Sync" +msgstr "" + +#: admin/templates/hubwoo-sync-contacts.php:40 +msgid "Contact sync is in progress." +msgstr "" + +#: admin/templates/hubwoo-sync-contacts.php:41 +msgid "This should only take a few moments. Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:23 +msgid "Failed to connect to HubSpot, Try to reconnect or please contact us!" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:33 +msgid "Getting started with HubSpot and WooCommerce" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:40 +msgid "" +"With this WooCommerce HubSpot integration, you can automatically sync all " +"your WooCommerce contacts and customers with HubSpot’s CRM and marketing " +"platform." +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:45 +msgid "Once you set up this integration, you will be able to:" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:48 +msgid "" +"See every action each contact has taken including their page views, past " +"orders, abandoned carts, and more — in HubSpot CRM’s tidy timeline view" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:49 +msgid "" +"Segment contacts and customers into lists based on their previous " +"interactions with your store" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:50 +msgid "Easily create and send beautiful, responsive emails to drive sales" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:51 +msgid "Measure your store’s performance with custom reports and dashboards" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:56 +msgid "" +"To get started, connect your HubSpot account. If you don’t have a HubSpot " +"account, create one then return to this window to connect it." +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:60 +msgid "Connect your Account" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:61 +msgid "Create a free HubSpot Account" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:71 +msgid "Congratulation your account is now connected." +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:81 +msgid "Connected Portal ID : " +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:89 +msgid "Switch to Another Account -" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:91 +msgid "Click Here" +msgstr "" + +#: admin/templates/setup/hubwoo-connection-setup.php:96 +msgid "Continue" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:40 +msgid "Set up groups & properties in HubSpot" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:47 +msgid "" +"In order to view your WooCommerce data correctly in HubSpot, you need to set " +"up groups and properties in your HubSpot account." +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:51 +msgid "" +"Once you set up groups and properties, you can easily see the following " +"information about your contacts and customers:" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:54 +msgid "Order information" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:55 +msgid "Previous purchases" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:56 +msgid "Abandoned cart details" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:57 +msgid "And more" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:61 +msgid "Create Groups & Properties " +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:62 +msgid "View Created Properties and Groups " +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:67 +msgid "" +"Group and property creation is in progress. This should only take a few " +"moments. Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:82 +msgid "" +"Select the Groups and Properties that you need on HubSpot.
\r\n" +"\t\t\t\t\t\t\t\t\tClick on a Group to Select/De-Select its Group Properties." +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:163 +msgid "Create Now" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:170 +msgid "All of the created Groups and Properties are below." +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:200 +#: admin/templates/setup/hubwoo-list-setup.php:149 +msgid "Created" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:63 +msgid "Create lists in HubSpot" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:70 +msgid "" +"Set up lists to segment your contacts and customers based on their previous " +"actions and behaviors." +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:77 +msgid "You can set up the following lists:" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:80 +msgid "Leads: contacts that have not yet made any orders" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:81 +msgid "Customers: contacts that have made at least one order" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:82 +msgid "" +"Abandoned Cart: contacts that have added products to their carts, but have " +"not purchased" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:88 +msgid "Create Lists" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:89 +msgid "View All Lists" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:94 +msgid "" +"List creation is in progress. This should only take a few moments. Thanks " +"for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:108 +msgid "Select the Groups and Properties that you need on HubSpot." +msgstr "" + +#: admin/templates/setup/hubwoo-pipeline-setup.php:104 +msgid "Save" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:46 +msgid "Sync WooCommerce data with HubSpot" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:52 +msgid "" +"You’re almost done! The last step is to sync your existing WooCommerce data " +"to HubSpot. This will sync all your Contacts, Deals, and Products data to " +"HubSpot." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:55 +msgid "" +"Once you sync your data, you’ll see all your WooCommerce information on " +"HubSpot so you can start engaging with them right away." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:62 +msgid "Skip Historical Data Sync" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:69 +msgid "" +"1. Syncing Your Contacts to HubSpot. This should only take a few moments. " +"Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:77 +msgid "" +"2. Syncing your Products to HubSpot. This should only take a few moments. " +"Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:85 +msgid "" +"3. Syncing your Deals to Hubspot. This should only take a few moments. " +"Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:99 +msgid "" +"Congrats! You’ve successfully set up the MWB HubSpot for WooCommerce plugin" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:106 +msgid "What's next? Go to your dashboard to learn more about the integration." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:109 +msgid "Visit DashBoard" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:124 +msgid "Get tailored onboarding emails straight to your inbox" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:128 +msgid "Help us make your experience even better by telling us:" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:134 +msgid "Please fill all of the below fields before submission" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:152 +msgid "Choosing the ideal plan for your company might be confusing. " +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:153 +msgid "Connect Us " +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:154 +msgid "and we can assist you for free." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:158 +msgid "First Name" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:165 +msgid "Last Name" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:172 +msgid "Company Name" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:179 +msgid "Website URL" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:186 +msgid "Email Address" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:193 +msgid "Phone Number" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:200 +msgid "Complete Onboarding" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:202 +msgid "Skip for now" +msgstr "" + +#: includes/class-hubwoo-ajax-handler.php:125 +msgid "Success" +msgstr "" + +#: includes/class-hubwoo-ajax-handler.php:139 +msgid "Something went wrong. Please verify your HubSpot Connection once." +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:58 +msgid "Score" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:58 +msgid "Ratings for RFM Segmentation" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:59 +msgid "Recency" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:59 +msgid "Days Since last Order" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:60 +msgid "Frequency" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:60 +msgid "Total Orders Placed" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:61 +msgid "Monetary" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:61 +msgid "Total Money Spent" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:153 +#: includes/class-hubwoo-rfm-configuration.php:162 +#: includes/class-hubwoo-rfm-configuration.php:163 +msgid "Less than" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:154 +#: includes/class-hubwoo-rfm-configuration.php:155 +#: includes/class-hubwoo-rfm-configuration.php:161 +msgid "More than" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:195 +#: includes/class-hubwoo-rfm-configuration.php:196 +#: includes/class-hubwoo-rfm-configuration.php:197 +msgid "From" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:195 +#: includes/class-hubwoo-rfm-configuration.php:196 +#: includes/class-hubwoo-rfm-configuration.php:197 +msgid "To" +msgstr "" + +#: includes/class-hubwoo.php:444 +msgid "Dashboard" +msgstr "" + +#: includes/class-hubwoo.php:446 +msgid "Integrate your WooCommerce store with HubSpot" +msgstr "" + +#: includes/class-hubwoo.php:450 +msgid "Contacts" +msgstr "" + +#: includes/class-hubwoo.php:452 +msgid "Sync all your woocommerce data to HubSpot" +msgstr "" + +#: includes/class-hubwoo.php:456 +msgid "Deals" +msgstr "" + +#: includes/class-hubwoo.php:458 +msgid "Sync All of your woocommerce orders as HubSpot Deals" +msgstr "" + +#: includes/class-hubwoo.php:462 +msgid "Abandoned Carts" +msgstr "" + +#: includes/class-hubwoo.php:464 +msgid "Sync all of the cart abandoners on your website" +msgstr "" + +#: includes/class-hubwoo.php:468 +msgid "Automation" +msgstr "" + +#: includes/class-hubwoo.php:470 +msgid "Create Workflows to Track ROI and Retrieve Abandoned Carts" +msgstr "" + +#: includes/class-hubwoo.php:474 +msgid "Add Ons" +msgstr "" + +#: includes/class-hubwoo.php:476 +msgid "Add-ons for the HubSpot Integrations" +msgstr "" + +#: includes/class-hubwoo.php:479 makewebbetter-hubspot-for-woocommerce.php:165 +msgid "Settings" +msgstr "" + +#: includes/class-hubwoo.php:481 +msgid "General And Advanced Settings" +msgstr "" + +#: includes/class-hubwoo.php:484 +msgid "Logs" +msgstr "" + +#: includes/class-hubwoo.php:486 +msgid "HubSpot Logs" +msgstr "" + +#: includes/class-hubwoo.php:492 includes/class-hubwoo.php:494 +msgid "Support" +msgstr "" + +#: includes/class-hubwoo.php:659 +#, php-format +msgid "" +"Unable to locate file path at location %s some features may not work " +"properly in HubSpot Integration, please contact us!" +msgstr "" + +#: includes/class-hubwoo.php:1436 +msgid "New User Registration" +msgstr "" + +#: includes/class-hubwoo.php:1450 +msgid "When order status changes to Completed" +msgstr "" + +#: includes/class-hubwoo.php:1451 +msgid "When order status changes to Processing" +msgstr "" + +#: includes/class-hubwoo.php:1452 +msgid "When order status changes to Failed" +msgstr "" + +#: includes/class-hubwoo.php:1453 +msgid "When order status changes to On-hold" +msgstr "" + +#: includes/class-hubwoo.php:1454 +msgid "When order status changes to Refunded" +msgstr "" + +#: includes/class-hubwoo.php:1455 +msgid "When order status changes to Cancelled" +msgstr "" + +#: includes/class-hubwoo.php:2218 +msgid "Checkout Abandoned" +msgstr "" + +#: includes/class-hubwoo.php:2225 +msgid "Payment Pending/Failed" +msgstr "" + +#: includes/class-hubwoo.php:2232 +msgid "On hold" +msgstr "" + +#: includes/class-hubwoo.php:2239 +msgid "Processing" +msgstr "" + +#: includes/class-hubwoo.php:2246 +msgid "Completed" +msgstr "" + +#: includes/class-hubwoo.php:2253 +msgid "Refunded/Cancelled" +msgstr "" + +#: includes/class-hubwoo.php:2384 +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#: includes/class-hubwoo.php:2710 +msgid "" +"You are having issues with your MWB HubSpot for WooCommerce sync. Please " +"read this doc on how to fix your integration." +msgstr "" + +#: includes/class-hubwoo.php:2960 +msgid "Discount savings" +msgstr "" + +#: includes/class-hubwoo.php:2968 +msgid "Order number" +msgstr "" + +#: includes/class-hubwoo.php:2976 +msgid "Shipment IDs" +msgstr "" + +#: includes/class-hubwoo.php:2984 +msgid "Tax amount" +msgstr "" + +#: includes/class-hubwoo.php:3004 +msgid "Store Product Id" +msgstr "" + +#: includes/class-hubwoo.php:3012 +msgid "Product Source Store" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:165 +msgid "Fetching and refreshing access token" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:184 +msgid "You are forbidden to use this scope" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:186 +msgid "Something went wrong." +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:227 +msgid "Getting access token information" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:359 +#: includes/class-hubwooconnectionmananager.php:485 +msgid "Creating " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:406 +msgid "Reading object property" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:438 +msgid "Creating Properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:533 +msgid "Updating Properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:577 +msgid "Fetch batch properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:620 +msgid "Creating Single Contact" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:664 +msgid "Updating or Creating users data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:770 +msgid "Updating or Creating single users data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:814 +msgid "Creating Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:844 +msgid "--Please Select a Static List--" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:862 +msgid "Get Static Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:913 +msgid "Get Dynamic Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:963 +msgid "Enrolling in Static List" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1004 +msgid "Creating Workflows" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1032 +#: includes/class-hubwooconnectionmananager.php:1093 +msgid "--Please Select a Workflow--" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1055 +msgid "Getting all Workflows" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1116 +msgid "Get single Workflows" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1158 +msgid "Enrolling in Workflow" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1258 +msgid "Fetching all " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1295 +msgid "Fetching Contact Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1332 +msgid "Fetching Contacts from List" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1376 +msgid "Fetching " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1405 +msgid "Creating single " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1452 +msgid "Updated single " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1496 +msgid "Search single " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1553 +msgid "Fetching Batch " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1583 +msgid "Creating bulk " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1629 +msgid "Updated bulk " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1684 +msgid "Associate " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1730 +msgid "Delete association " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1776 +msgid "Associate batch " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1821 +msgid "Delete batch association " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1873 +msgid "Fetching marketing emails" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1901 +msgid "Creating marketing email." +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1962 +msgid "Removing Deal Association With Contact" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2007 +msgid "Creating Deal Association With Contact" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2052 +msgid "Creating Deal Association With Company" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2092 +msgid "Updating HubSpot Deals" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2121 +msgid "Creating deal custom groups" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2164 +msgid "Creating deal custom properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2217 +msgid "Updating HubSpot Deal Properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2253 +#: includes/class-hubwooconnectionmananager.php:2290 +msgid "Fetching Contact VID by email" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2328 +msgid "Creating New deal" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2371 +msgid "Fetch all pipeline" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2418 +msgid "Get deal pipeline info" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2445 +msgid "Creating deal pipeline" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2500 +msgid "Updating the ecommerce pipeline deal stages" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2562 +msgid "Creating or Updating Store" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2687 +msgid "Creating a form data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2729 +msgid "Submitting Form data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2769 +msgid "Fetching Batch Vids" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2807 +msgid "Fetching All Forms" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2849 +msgid "Fetching Contact by email" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2888 +msgid "Updating HubSpot Products" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:149 +msgid "Order Information" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:155 +#: includes/class-hubwoocontactproperties.php:563 +msgid "Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:161 +msgid "Shopping Cart Information" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:167 +msgid "Customer Group" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:173 +#: includes/class-hubwoocontactproperties.php:858 +msgid "Categories Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:178 +msgid "RFM Information" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:183 +#: includes/class-hubwoocontactproperties.php:875 +msgid "SKUs Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:188 +msgid "ROI Tracking" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:193 +msgid "Abandoned Cart Details" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:375 +msgid "Customer Group/ User role" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:383 +msgid "Accepts Marketing" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:392 +msgid "Marketing Newsletter" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:401 +msgid "Shopping Cart ID" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:418 +msgid "Shipping Address Line 1" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:426 +msgid "Shipping Address Line 2" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:434 +msgid "Shipping City" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:442 +msgid "Shipping State" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:450 +msgid "Shipping Postal Code" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:458 +msgid "Shipping Country" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:466 +msgid "Billing Address Line 1" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:474 +msgid "Billing Address Line 2" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:482 +msgid "Billing City" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:490 +msgid "Billing State" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:498 +msgid "Billing Postal Code" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:506 +msgid "Billing Country" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:515 +msgid "Last Product Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:523 +msgid "Last Product Types Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:531 +msgid "Last Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:539 +msgid "Last Products Bought HTML" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:547 +msgid "Last Total Number Of Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:555 +msgid "Product Types Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:571 +msgid "Total Number Of Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:579 +msgid "Last Products Bought Product 1 Image URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:587 +msgid "Last Products Bought Product 1 Name" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:595 +msgid "Last Products Bought Product 1 Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:604 +msgid "Last Products Bought Product 1 Url" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:612 +msgid "Last Products Bought Product 2 Image URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:620 +msgid "Last Products Bought Product 2 Name" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:628 +msgid "Last Products Bought Product 2 Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:637 +msgid "Last Products Bought Product 2 Url" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:645 +msgid "Last Products Bought Product 3 Image URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:653 +msgid "Last Products Bought Product 3 Name" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:661 +msgid "Last Products Bought Product 3 Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:670 +msgid "Last Products Bought Product 3 Url" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:679 +msgid "Last Order Status" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:688 +msgid "Last Order Fulfillment Status" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:697 +msgid "Last Order Tracking Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:705 +msgid "Last Order Tracking URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:713 +msgid "Last Order Shipment Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:721 +msgid "Last Order Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:729 +msgid "Last Order Currency" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:737 +msgid "Total Number of Current Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:746 +msgid "Total Value of Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:755 +msgid "Average Order Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:764 +msgid "Total Number of Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:772 +msgid "First Order Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:781 +msgid "First Order Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:789 +msgid "Last Order Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:798 +msgid "Last Order Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:806 +msgid "Average Days Between Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:814 +msgid "Account Creation Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:822 +msgid "Monetary Rating" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:831 +msgid "Order Frequency Rating" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:840 +msgid "Order Recency Rating" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:850 +msgid "Last Categories Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:867 +msgid "Last SKUs Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:884 +msgid "Last Subscription Order Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:892 +msgid "Last Subscription Parent Order Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:900 +msgid "Last Subscription Order Status" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:909 +msgid "Last Subscription Order Creation Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:917 +msgid "Last Subscription Order Paid Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:925 +msgid "Last Subscription Order Completed Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:933 +msgid "Related Last Order Creation Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:941 +msgid "Related Last Order Paid Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:949 +msgid "Related Last Order Completed Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:957 +msgid "Last Subscription Trial End Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:965 +msgid "Last Subscription Next Payment Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:973 +msgid "Last Subscription Billing Period" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:982 +msgid "Last Subscription Billing Interval" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:991 +msgid "Last Subscription Products" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1000 +msgid "Customer New Order" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1008 +msgid "Abandoned Cart Recovery Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1017 +msgid "Abandoned Cart Recovery Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1026 +msgid "Abandoned Cart Recovery Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1034 +msgid "Abandoned Cart Recovery Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1042 +msgid "Current ROI Campaign" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1051 +msgid "Customer Reengagement Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1060 +msgid "Customer Reengagement Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1069 +msgid "Customer Reengagement Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1077 +msgid "Customer Reengagement Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1085 +msgid "Customer Rewards Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1094 +msgid "Customer Rewards Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1103 +msgid "Customer Rewards Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1111 +msgid "Customer Rewards Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1119 +msgid "MQL Capture, Nurture & Conversion Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1128 +msgid "MQL Capture, Nurture & Conversion Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1137 +msgid "MQL Capture, Nurture & Conversion Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1145 +msgid "MQL Capture, Nurture & Conversion Start date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1153 +msgid "New Customer Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1162 +msgid "New Customer Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1171 +msgid "New Customer Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1179 +msgid "New Customer Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1187 +msgid "Second Purchase Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1196 +msgid "Second Purchase Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1205 +msgid "Second Purchase Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1213 +msgid "Second Purchase Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1221 +msgid "Third Purchase Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1230 +msgid "Third Purchase Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1239 +msgid "Third Purchase Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1247 +msgid "Third Purchase Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1256 +msgid "Current Abandoned Cart" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1265 +msgid "Abandoned Cart Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1273 +msgid "Abandoned Cart Counter" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1281 +msgid "Abandoned Cart URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1289 +msgid "Abandoned Cart Products SKUs" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1297 +msgid "Abandoned Cart Products Categories" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1305 +msgid "Abandoned Cart Products" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1313 +msgid "Abandoned Cart Products HTML" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1321 +msgid "Abandoned Cart Tax Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1330 +msgid "Abandoned Cart Subtotal" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1339 +msgid "Abandoned Cart Total Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1378 +msgid "Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1394 +msgid "Leads" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1410 +msgid "Abandoned Cart" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1426 +msgid "Best Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1454 +msgid "Big Spenders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1470 +msgid "Loyal Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1492 +msgid "Churning Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1520 +msgid "Low Value Lost Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1548 +msgid "New Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1570 +msgid "Customers needing attention" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1598 +msgid "About to Sleep" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1626 +msgid "Mid Spenders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1642 +msgid "Low Spenders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1658 +msgid "Newsletter Subscriber" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1674 +msgid "One time purchase customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1690 +msgid "Two time purchase customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1706 +msgid "Three time purchase customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1722 +msgid "Bought four or more times" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1738 +msgid "Marketing Qualified Leads" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1753 +msgid "Engaged Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1772 +msgid "DisEngaged Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1800 +msgid "Repeat Buyers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:2924 +msgid "Checkout" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:2928 +msgid "Registration" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:2932 +msgid "Others" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3022 +msgid "Day" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3026 +msgid "Week" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3030 +msgid "Month" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3034 +msgid "Year" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3053 +msgid "Every" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3057 +msgid "Every Second" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3061 +msgid "Every Third" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3065 +msgid "Every Fourth" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3069 +msgid "Every Fifth" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3073 +msgid "Every Sixth" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Discount" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:127 +msgid "Onboarding Services" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:128 +msgid "Docs" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:129 +msgid "KB" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:171 +msgid "Get Premium Support" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:243 +msgid "" +"WooCommerce is not activated. Please activate WooCommerce first to install " +"MWB HubSpot for WooCommerce" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:263 +msgid "" +"Oops! You tried activating the MWB HubSpot for WooCommerce without " +"deactivating the another version of the integration created by " +"MakewebBetter. Kindly deactivate the other version of HubSpot WooCommerce " +"Integration and then try again." +msgstr "" diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce.mo b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/languages/makewebbetter-hubspot-for-woocommerce.mo new file mode 100644 index 0000000000000000000000000000000000000000..0862f22fc7cd5a039a6596d1f7f1a83a07ca6906 GIT binary patch literal 554 zcmYjN!A`49+zYtZVtz~b!L`>4JZGRv zp5Mc5j2h26y$@j#@ixSnGRW; zDq8~HPsWeDeb7~QbFjRpW0PchAy|8sq4U9?K!dIKhzukdvcPS+4eHb>@2C\r\n" +"\t\t\t\t\t\t\t\t\tClick on a Group to Select/De-Select its Group Properties." +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:163 +msgid "Create Now" +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:170 +msgid "All of the created Groups and Properties are below." +msgstr "" + +#: admin/templates/setup/hubwoo-grp-pr-setup.php:200 +#: admin/templates/setup/hubwoo-list-setup.php:149 +msgid "Created" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:63 +msgid "Create lists in HubSpot" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:70 +msgid "" +"Set up lists to segment your contacts and customers based on their previous " +"actions and behaviors." +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:77 +msgid "You can set up the following lists:" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:80 +msgid "Leads: contacts that have not yet made any orders" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:81 +msgid "Customers: contacts that have made at least one order" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:82 +msgid "" +"Abandoned Cart: contacts that have added products to their carts, but have " +"not purchased" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:88 +msgid "Create Lists" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:89 +msgid "View All Lists" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:94 +msgid "" +"List creation is in progress. This should only take a few moments. Thanks " +"for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-list-setup.php:108 +msgid "Select the Groups and Properties that you need on HubSpot." +msgstr "" + +#: admin/templates/setup/hubwoo-pipeline-setup.php:104 +msgid "Save" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:46 +msgid "Sync WooCommerce data with HubSpot" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:52 +msgid "" +"You’re almost done! The last step is to sync your existing WooCommerce data " +"to HubSpot. This will sync all your Contacts, Deals, and Products data to " +"HubSpot." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:55 +msgid "" +"Once you sync your data, you’ll see all your WooCommerce information on " +"HubSpot so you can start engaging with them right away." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:62 +msgid "Skip Historical Data Sync" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:69 +msgid "" +"1. Syncing Your Contacts to HubSpot. This should only take a few moments. " +"Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:77 +msgid "" +"2. Syncing your Products to HubSpot. This should only take a few moments. " +"Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:85 +msgid "" +"3. Syncing your Deals to Hubspot. This should only take a few moments. " +"Thanks for your patience!" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:99 +msgid "" +"Congrats! You’ve successfully set up the MWB HubSpot for WooCommerce plugin" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:106 +msgid "What's next? Go to your dashboard to learn more about the integration." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:109 +msgid "Visit DashBoard" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:124 +msgid "Get tailored onboarding emails straight to your inbox" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:128 +msgid "Help us make your experience even better by telling us:" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:134 +msgid "Please fill all of the below fields before submission" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:152 +msgid "Choosing the ideal plan for your company might be confusing. " +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:153 +msgid "Connect Us " +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:154 +msgid "and we can assist you for free." +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:158 +msgid "First Name" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:165 +msgid "Last Name" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:172 +msgid "Company Name" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:179 +msgid "Website URL" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:186 +msgid "Email Address" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:193 +msgid "Phone Number" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:200 +msgid "Complete Onboarding" +msgstr "" + +#: admin/templates/setup/hubwoo-sync.php:202 +msgid "Skip for now" +msgstr "" + +#: includes/class-hubwoo-ajax-handler.php:125 +msgid "Success" +msgstr "" + +#: includes/class-hubwoo-ajax-handler.php:139 +msgid "Something went wrong. Please verify your HubSpot Connection once." +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:58 +msgid "Score" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:58 +msgid "Ratings for RFM Segmentation" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:59 +msgid "Recency" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:59 +msgid "Days Since last Order" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:60 +msgid "Frequency" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:60 +msgid "Total Orders Placed" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:61 +msgid "Monetary" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:61 +msgid "Total Money Spent" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:153 +#: includes/class-hubwoo-rfm-configuration.php:162 +#: includes/class-hubwoo-rfm-configuration.php:163 +msgid "Less than" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:154 +#: includes/class-hubwoo-rfm-configuration.php:155 +#: includes/class-hubwoo-rfm-configuration.php:161 +msgid "More than" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:195 +#: includes/class-hubwoo-rfm-configuration.php:196 +#: includes/class-hubwoo-rfm-configuration.php:197 +msgid "From" +msgstr "" + +#: includes/class-hubwoo-rfm-configuration.php:195 +#: includes/class-hubwoo-rfm-configuration.php:196 +#: includes/class-hubwoo-rfm-configuration.php:197 +msgid "To" +msgstr "" + +#: includes/class-hubwoo.php:444 +msgid "Dashboard" +msgstr "" + +#: includes/class-hubwoo.php:446 +msgid "Integrate your WooCommerce store with HubSpot" +msgstr "" + +#: includes/class-hubwoo.php:450 +msgid "Contacts" +msgstr "" + +#: includes/class-hubwoo.php:452 +msgid "Sync all your woocommerce data to HubSpot" +msgstr "" + +#: includes/class-hubwoo.php:456 +msgid "Deals" +msgstr "" + +#: includes/class-hubwoo.php:458 +msgid "Sync All of your woocommerce orders as HubSpot Deals" +msgstr "" + +#: includes/class-hubwoo.php:462 +msgid "Abandoned Carts" +msgstr "" + +#: includes/class-hubwoo.php:464 +msgid "Sync all of the cart abandoners on your website" +msgstr "" + +#: includes/class-hubwoo.php:468 +msgid "Automation" +msgstr "" + +#: includes/class-hubwoo.php:470 +msgid "Create Workflows to Track ROI and Retrieve Abandoned Carts" +msgstr "" + +#: includes/class-hubwoo.php:474 +msgid "Add Ons" +msgstr "" + +#: includes/class-hubwoo.php:476 +msgid "Add-ons for the HubSpot Integrations" +msgstr "" + +#: includes/class-hubwoo.php:479 makewebbetter-hubspot-for-woocommerce.php:165 +msgid "Settings" +msgstr "" + +#: includes/class-hubwoo.php:481 +msgid "General And Advanced Settings" +msgstr "" + +#: includes/class-hubwoo.php:484 +msgid "Logs" +msgstr "" + +#: includes/class-hubwoo.php:486 +msgid "HubSpot Logs" +msgstr "" + +#: includes/class-hubwoo.php:492 includes/class-hubwoo.php:494 +msgid "Support" +msgstr "" + +#: includes/class-hubwoo.php:659 +#, php-format +msgid "" +"Unable to locate file path at location %s some features may not work " +"properly in HubSpot Integration, please contact us!" +msgstr "" + +#: includes/class-hubwoo.php:1436 +msgid "New User Registration" +msgstr "" + +#: includes/class-hubwoo.php:1450 +msgid "When order status changes to Completed" +msgstr "" + +#: includes/class-hubwoo.php:1451 +msgid "When order status changes to Processing" +msgstr "" + +#: includes/class-hubwoo.php:1452 +msgid "When order status changes to Failed" +msgstr "" + +#: includes/class-hubwoo.php:1453 +msgid "When order status changes to On-hold" +msgstr "" + +#: includes/class-hubwoo.php:1454 +msgid "When order status changes to Refunded" +msgstr "" + +#: includes/class-hubwoo.php:1455 +msgid "When order status changes to Cancelled" +msgstr "" + +#: includes/class-hubwoo.php:2218 +msgid "Checkout Abandoned" +msgstr "" + +#: includes/class-hubwoo.php:2225 +msgid "Payment Pending/Failed" +msgstr "" + +#: includes/class-hubwoo.php:2232 +msgid "On hold" +msgstr "" + +#: includes/class-hubwoo.php:2239 +msgid "Processing" +msgstr "" + +#: includes/class-hubwoo.php:2246 +msgid "Completed" +msgstr "" + +#: includes/class-hubwoo.php:2253 +msgid "Refunded/Cancelled" +msgstr "" + +#: includes/class-hubwoo.php:2384 +msgid "HubSpot All-In-One Marketing - Forms, Popups, Live Chat" +msgstr "" + +#: includes/class-hubwoo.php:2710 +msgid "" +"You are having issues with your MWB HubSpot for WooCommerce sync. Please " +"read this doc on how to fix your integration." +msgstr "" + +#: includes/class-hubwoo.php:2960 +msgid "Discount savings" +msgstr "" + +#: includes/class-hubwoo.php:2968 +msgid "Order number" +msgstr "" + +#: includes/class-hubwoo.php:2976 +msgid "Shipment IDs" +msgstr "" + +#: includes/class-hubwoo.php:2984 +msgid "Tax amount" +msgstr "" + +#: includes/class-hubwoo.php:3004 +msgid "Store Product Id" +msgstr "" + +#: includes/class-hubwoo.php:3012 +msgid "Product Source Store" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:165 +msgid "Fetching and refreshing access token" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:184 +msgid "You are forbidden to use this scope" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:186 +msgid "Something went wrong." +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:227 +msgid "Getting access token information" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:359 +#: includes/class-hubwooconnectionmananager.php:485 +msgid "Creating " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:406 +msgid "Reading object property" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:438 +msgid "Creating Properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:533 +msgid "Updating Properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:577 +msgid "Fetch batch properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:620 +msgid "Creating Single Contact" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:664 +msgid "Updating or Creating users data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:770 +msgid "Updating or Creating single users data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:814 +msgid "Creating Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:844 +msgid "--Please Select a Static List--" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:862 +msgid "Get Static Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:913 +msgid "Get Dynamic Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:963 +msgid "Enrolling in Static List" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1004 +msgid "Creating Workflows" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1032 +#: includes/class-hubwooconnectionmananager.php:1093 +msgid "--Please Select a Workflow--" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1055 +msgid "Getting all Workflows" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1116 +msgid "Get single Workflows" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1158 +msgid "Enrolling in Workflow" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1258 +msgid "Fetching all " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1295 +msgid "Fetching Contact Lists" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1332 +msgid "Fetching Contacts from List" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1376 +msgid "Fetching " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1405 +msgid "Creating single " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1452 +msgid "Updated single " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1496 +msgid "Search single " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1553 +msgid "Fetching Batch " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1583 +msgid "Creating bulk " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1629 +msgid "Updated bulk " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1684 +msgid "Associate " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1730 +msgid "Delete association " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1776 +msgid "Associate batch " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1821 +msgid "Delete batch association " +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1873 +msgid "Fetching marketing emails" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1901 +msgid "Creating marketing email." +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:1962 +msgid "Removing Deal Association With Contact" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2007 +msgid "Creating Deal Association With Contact" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2052 +msgid "Creating Deal Association With Company" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2092 +msgid "Updating HubSpot Deals" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2121 +msgid "Creating deal custom groups" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2164 +msgid "Creating deal custom properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2217 +msgid "Updating HubSpot Deal Properties" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2253 +#: includes/class-hubwooconnectionmananager.php:2290 +msgid "Fetching Contact VID by email" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2328 +msgid "Creating New deal" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2371 +msgid "Fetch all pipeline" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2418 +msgid "Get deal pipeline info" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2445 +msgid "Creating deal pipeline" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2500 +msgid "Updating the ecommerce pipeline deal stages" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2562 +msgid "Creating or Updating Store" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2687 +msgid "Creating a form data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2729 +msgid "Submitting Form data" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2769 +msgid "Fetching Batch Vids" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2807 +msgid "Fetching All Forms" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2849 +msgid "Fetching Contact by email" +msgstr "" + +#: includes/class-hubwooconnectionmananager.php:2888 +msgid "Updating HubSpot Products" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:149 +msgid "Order Information" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:155 +#: includes/class-hubwoocontactproperties.php:563 +msgid "Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:161 +msgid "Shopping Cart Information" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:167 +msgid "Customer Group" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:173 +#: includes/class-hubwoocontactproperties.php:858 +msgid "Categories Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:178 +msgid "RFM Information" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:183 +#: includes/class-hubwoocontactproperties.php:875 +msgid "SKUs Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:188 +msgid "ROI Tracking" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:193 +msgid "Abandoned Cart Details" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:375 +msgid "Customer Group/ User role" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:383 +msgid "Accepts Marketing" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:392 +msgid "Marketing Newsletter" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:401 +msgid "Shopping Cart ID" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:418 +msgid "Shipping Address Line 1" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:426 +msgid "Shipping Address Line 2" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:434 +msgid "Shipping City" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:442 +msgid "Shipping State" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:450 +msgid "Shipping Postal Code" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:458 +msgid "Shipping Country" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:466 +msgid "Billing Address Line 1" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:474 +msgid "Billing Address Line 2" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:482 +msgid "Billing City" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:490 +msgid "Billing State" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:498 +msgid "Billing Postal Code" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:506 +msgid "Billing Country" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:515 +msgid "Last Product Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:523 +msgid "Last Product Types Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:531 +msgid "Last Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:539 +msgid "Last Products Bought HTML" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:547 +msgid "Last Total Number Of Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:555 +msgid "Product Types Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:571 +msgid "Total Number Of Products Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:579 +msgid "Last Products Bought Product 1 Image URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:587 +msgid "Last Products Bought Product 1 Name" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:595 +msgid "Last Products Bought Product 1 Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:604 +msgid "Last Products Bought Product 1 Url" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:612 +msgid "Last Products Bought Product 2 Image URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:620 +msgid "Last Products Bought Product 2 Name" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:628 +msgid "Last Products Bought Product 2 Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:637 +msgid "Last Products Bought Product 2 Url" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:645 +msgid "Last Products Bought Product 3 Image URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:653 +msgid "Last Products Bought Product 3 Name" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:661 +msgid "Last Products Bought Product 3 Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:670 +msgid "Last Products Bought Product 3 Url" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:679 +msgid "Last Order Status" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:688 +msgid "Last Order Fulfillment Status" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:697 +msgid "Last Order Tracking Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:705 +msgid "Last Order Tracking URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:713 +msgid "Last Order Shipment Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:721 +msgid "Last Order Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:729 +msgid "Last Order Currency" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:737 +msgid "Total Number of Current Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:746 +msgid "Total Value of Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:755 +msgid "Average Order Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:764 +msgid "Total Number of Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:772 +msgid "First Order Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:781 +msgid "First Order Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:789 +msgid "Last Order Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:798 +msgid "Last Order Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:806 +msgid "Average Days Between Orders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:814 +msgid "Account Creation Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:822 +msgid "Monetary Rating" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:831 +msgid "Order Frequency Rating" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:840 +msgid "Order Recency Rating" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:850 +msgid "Last Categories Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:867 +msgid "Last SKUs Bought" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:884 +msgid "Last Subscription Order Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:892 +msgid "Last Subscription Parent Order Number" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:900 +msgid "Last Subscription Order Status" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:909 +msgid "Last Subscription Order Creation Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:917 +msgid "Last Subscription Order Paid Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:925 +msgid "Last Subscription Order Completed Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:933 +msgid "Related Last Order Creation Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:941 +msgid "Related Last Order Paid Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:949 +msgid "Related Last Order Completed Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:957 +msgid "Last Subscription Trial End Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:965 +msgid "Last Subscription Next Payment Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:973 +msgid "Last Subscription Billing Period" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:982 +msgid "Last Subscription Billing Interval" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:991 +msgid "Last Subscription Products" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1000 +msgid "Customer New Order" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1008 +msgid "Abandoned Cart Recovery Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1017 +msgid "Abandoned Cart Recovery Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1026 +msgid "Abandoned Cart Recovery Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1034 +msgid "Abandoned Cart Recovery Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1042 +msgid "Current ROI Campaign" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1051 +msgid "Customer Reengagement Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1060 +msgid "Customer Reengagement Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1069 +msgid "Customer Reengagement Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1077 +msgid "Customer Reengagement Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1085 +msgid "Customer Rewards Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1094 +msgid "Customer Rewards Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1103 +msgid "Customer Rewards Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1111 +msgid "Customer Rewards Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1119 +msgid "MQL Capture, Nurture & Conversion Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1128 +msgid "MQL Capture, Nurture & Conversion Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1137 +msgid "MQL Capture, Nurture & Conversion Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1145 +msgid "MQL Capture, Nurture & Conversion Start date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1153 +msgid "New Customer Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1162 +msgid "New Customer Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1171 +msgid "New Customer Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1179 +msgid "New Customer Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1187 +msgid "Second Purchase Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1196 +msgid "Second Purchase Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1205 +msgid "Second Purchase Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1213 +msgid "Second Purchase Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1221 +msgid "Third Purchase Workflow Conversion" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1230 +msgid "Third Purchase Workflow Conversion Amount" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1239 +msgid "Third Purchase Workflow Conversion Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1247 +msgid "Third Purchase Workflow Start Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1256 +msgid "Current Abandoned Cart" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1265 +msgid "Abandoned Cart Date" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1273 +msgid "Abandoned Cart Counter" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1281 +msgid "Abandoned Cart URL" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1289 +msgid "Abandoned Cart Products SKUs" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1297 +msgid "Abandoned Cart Products Categories" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1305 +msgid "Abandoned Cart Products" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1313 +msgid "Abandoned Cart Products HTML" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1321 +msgid "Abandoned Cart Tax Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1330 +msgid "Abandoned Cart Subtotal" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1339 +msgid "Abandoned Cart Total Value" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1378 +msgid "Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1394 +msgid "Leads" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1410 +msgid "Abandoned Cart" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1426 +msgid "Best Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1454 +msgid "Big Spenders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1470 +msgid "Loyal Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1492 +msgid "Churning Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1520 +msgid "Low Value Lost Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1548 +msgid "New Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1570 +msgid "Customers needing attention" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1598 +msgid "About to Sleep" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1626 +msgid "Mid Spenders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1642 +msgid "Low Spenders" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1658 +msgid "Newsletter Subscriber" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1674 +msgid "One time purchase customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1690 +msgid "Two time purchase customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1706 +msgid "Three time purchase customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1722 +msgid "Bought four or more times" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1738 +msgid "Marketing Qualified Leads" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1753 +msgid "Engaged Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1772 +msgid "DisEngaged Customers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:1800 +msgid "Repeat Buyers" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:2924 +msgid "Checkout" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:2928 +msgid "Registration" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:2932 +msgid "Others" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3022 +msgid "Day" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3026 +msgid "Week" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3030 +msgid "Month" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3034 +msgid "Year" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3053 +msgid "Every" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3057 +msgid "Every Second" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3061 +msgid "Every Third" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3065 +msgid "Every Fourth" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3069 +msgid "Every Fifth" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3073 +msgid "Every Sixth" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Price" +msgstr "" + +#: includes/class-hubwoocontactproperties.php:3258 +msgid "Discount" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:127 +msgid "Onboarding Services" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:128 +msgid "Docs" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:129 +msgid "KB" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:171 +msgid "Get Premium Support" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:243 +msgid "" +"WooCommerce is not activated. Please activate WooCommerce first to install " +"MWB HubSpot for WooCommerce" +msgstr "" + +#: makewebbetter-hubspot-for-woocommerce.php:263 +msgid "" +"Oops! You tried activating the MWB HubSpot for WooCommerce without " +"deactivating the another version of the integration created by " +"MakewebBetter. Kindly deactivate the other version of HubSpot WooCommerce " +"Integration and then try again." +msgstr "" diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/makewebbetter-hubspot-for-woocommerce.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/makewebbetter-hubspot-for-woocommerce.php new file mode 100644 index 00000000..ae425961 --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/makewebbetter-hubspot-for-woocommerce.php @@ -0,0 +1,323 @@ +' . esc_html__( 'Onboarding Services', 'makewebbetter-hubspot-for-woocommerce' ) . ''; + $links_array[] = '
' . esc_html__( 'Docs', 'makewebbetter-hubspot-for-woocommerce' ) . ''; + $links_array[] = '' . esc_html__( 'KB', 'makewebbetter-hubspot-for-woocommerce' ) . ''; + } + return $links_array; + } + add_filter( 'plugin_row_meta', 'hubwoo_custom_settings_at_plugin_tab', 10, 2 ); + + /** + * Define constant if not already set. + * + * @param string $name name for the constant. + * @param string $value value for the constant. + * @since 1.0.0 + */ + function hubwoo_pro_define( $name, $value ) { + if ( ! defined( $name ) ) { + define( $name, $value ); + } + } + + /** + * Setting Page Link. + * + * @param array $actions actions for the plugin. + * @param string $plugin_file name of the plugin. + * @return array + * @since 1.0.0 + */ + function hubwoo_pro_admin_settings( $actions, $plugin_file ) { + static $plugin; + + if ( ! isset( $plugin ) ) { + $plugin = plugin_basename( __FILE__ ); + } + + if ( $plugin === $plugin_file ) { + $settings = array( + 'settings' => '' . esc_html__( 'Settings', 'makewebbetter-hubspot-for-woocommerce' ) . '', + ); + + $actions = array_merge( $settings, $actions ); + + $premium_support = array( + 'premium_support' => '' . esc_html__( 'Get Premium Support', 'makewebbetter-hubspot-for-woocommerce' ) . '', + ); + + $actions = array_merge( $premium_support, $actions ); + } + + return $actions; + } + + // add link for settings. + add_filter( 'plugin_action_links', 'hubwoo_pro_admin_settings', 10, 2 ); + + /** + * Auto Redirection to settings page after plugin activation + * + * @since 1.0.0 + * @param string $plugin name of the plugin. + * @link https://makewebbetter.com/ + */ + function hubwoo_pro_activation_redirect( $plugin ) { + if ( WC()->is_rest_api_request() ) { + return; + } + + if ( plugin_basename( __FILE__ ) === $plugin ) { + wp_safe_redirect( admin_url( 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-overview&hubwoo_key=connection-setup' ) ); + exit(); + } + } + // redirect to settings page as soon as plugin is activated. + add_action( 'activated_plugin', 'hubwoo_pro_activation_redirect' ); + + /** + * Begins execution of the plugin. + * + * Since everything within the plugin is registered via hooks, + * then kicking off the plugin from this point in the file does + * not affect the page life cycle. + * + * @since 1.0.0 + */ + function run_hubwoo_pro() { + // define contants if not defined.. + hubwoo_pro_define_constants(); + + $hub_woo = new Hubwoo(); + $hub_woo->run(); + + $GLOBALS['hubwoo'] = $hub_woo; + } + run_hubwoo_pro(); +} elseif ( ! $hubwoo_pro_activated && 0 === $hubwoo_pro_flag ) { + add_action( 'admin_init', 'hubwoo_pro_plugin_deactivate' ); + + /** + * Call Admin notices + * + * @link https://www.makewebbetter.com/ + */ + function hubwoo_pro_plugin_deactivate() { + deactivate_plugins( plugin_basename( __FILE__ ) ); + add_action( 'admin_notices', 'hubwoo_pro_plugin_error_notice' ); + } + + /** + * Show warning message if woocommerce is not install + * + * @since 1.0.0 + * @link https://www.makewebbetter.com/ + */ + function hubwoo_pro_plugin_error_notice() { ?> +
+

+
+ + +
+

+
+ + plugin_name = $plugin_name; + $this->version = $version; + } + + /** + * Update key as soon as user data is updated. + * + * @since 1.0.0 + * @param string $user_id User Id. + */ + public function hubwoo_woocommerce_save_account_details( $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'yes' ); + } + + /** + * Enqueuing the HubSpot Tracking Script + * in the footer file + * + * @since 1.0.0 + */ + public function hubwoo_add_hs_script() { + if ( ! in_array( 'leadin/leadin.php', get_option( 'active_plugins' ), true ) ) { + $portal_id = get_option( 'hubwoo_pro_hubspot_id', '' ); + if ( ! empty( $portal_id ) ) { + wp_enqueue_script( 'hs-script-loader', '//js.hs-scripts.com/' . $portal_id . '.js', array( 'jquery' ), WC_VERSION, true ); + } + } + } + + /** + * Update key as soon as guest order is done + * + * @since 1.0.0 + * @param string $order_id Order Id. + */ + public function hubwoo_pro_woocommerce_guest_orders( $order_id ) { + + if ( ! empty( $order_id ) ) { + //hpos changes + $order = wc_get_order($order_id); + $customer_id = $order->get_customer_id(); + + if ( empty( $customer_id ) || 0 == $customer_id ) { + if ('yes' != $order->get_meta('hubwoo_pro_guest_order', true)) { + $order->update_meta_data('hubwoo_pro_guest_order', 'yes'); + $order->save(); + } + } else { + update_user_meta( $customer_id, 'hubwoo_pro_user_data_change', 'yes' ); + } + } + } + + /** + * Update key as soon as order is renewed + * + * @since 1.0.0 + * @param string $order_id Order Id. + */ + public function hubwoo_pro_save_renewal_orders( $order_id ) { + + if ( ! empty( $order_id ) ) { + + $order = wc_get_order($order_id); + $user_id = (int) $order->get_customer_id(); + + if ( 0 !== $user_id && 0 < $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'yes' ); + } + } + } + + /** + * Update key as soon as customer make changes in his/her subscription orders + * + * @since 1.0.0 + */ + public function hubwoo_save_changes_in_subs() { + + $user_id = get_current_user_id(); + + if ( $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'yes' ); + } + } + + /** + * Update key as soon as customer make changes in his/her subscription orders + * + * @since 1.0.0 + */ + public function hubwoo_subscription_switch() { + + if ( isset( $_GET['switch-subscription'] ) && isset( $_GET['item'] ) ) { + + $user_id = get_current_user_id(); + + if ( $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'yes' ); + } + } + } + + /** + * Update key as soon as subscriptions order status changes. + * + * @since 1.0.0 + * @param object $subs subscription order object. + */ + public function hubwoo_pro_update_subs_changes( $subs ) { + + if ( ! empty( $subs ) && ( $subs instanceof WC_Subscription ) ) { + + $order_id = $subs->get_id(); + + if ( ! empty( $order_id ) ) { + + $order = wc_get_order($order_id); + $user_id = (int) $order->get_customer_id(); + + if ( 0 !== $user_id && 0 < $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'yes' ); + } + } + } + } + + + /** + * Add checkout optin checkbox at woocommerce checkout + * + * @since 1.0.0 + * @param object $checkout woocommerce checkut object. + */ + public function hubwoo_pro_checkout_field( $checkout ) { + + if ( is_user_logged_in() ) { + $subscribe_status = get_user_meta( get_current_user_id(), 'hubwoo_checkout_marketing_optin', true ); + $registeration_optin = get_user_meta( get_current_user_id(), 'hubwoo_registeration_marketing_optin', true ); + } + if ( ! empty( $subscribe_status ) && 'yes' === $subscribe_status ) { + return; + } elseif ( ! empty( $registeration_optin ) && 'yes' === $registeration_optin ) { + return; + } + $label = get_option( 'hubwoo_checkout_optin_label', __( 'Subscribe', 'makewebbetter-hubspot-for-woocommerce' ) ); + echo '
'; + woocommerce_form_field( + 'hubwoo_checkout_marketing_optin', + array( + 'type' => 'checkbox', + 'class' => array( 'hubwoo-input-checkbox', 'woocommerce-form__input', 'woocommerce-form__input-checkbox' ), + 'label' => $label, + ), + WC()->checkout->get_value( 'hubwoo_checkout_marketing_optin' ) + ); + echo '
'; + } + + /** + * Optin checkbox on My Account page. + * + * @since 1.0.0 + */ + public function hubwoo_pro_register_field() { + + $label = get_option( 'hubwoo_registeration_optin_label', __( 'Subscribe', 'makewebbetter-hubspot-for-woocommerce' ) ); + echo '
'; + woocommerce_form_field( + 'hubwoo_registeration_marketing_optin', + array( + 'type' => 'checkbox', + 'class' => array( 'hubwoo-input-checkbox', 'woocommerce-form__input', 'woocommerce-form__input-checkbox' ), + 'label' => $label, + 'default' => 'yes', + ), + 'yes' + ); + echo '
'; + } + + /** + * Save order meta when any user optin through checkout. + * + * @since 1.0.0 + * @param int $order_id order ID. + */ + public function hubwoo_pro_process_checkout_optin( $order_id ) { + + if ( ! empty( $_REQUEST['woocommerce-process-checkout-nonce'] ) ) { + + $request = sanitize_text_field( wp_unslash( $_REQUEST['woocommerce-process-checkout-nonce'] ) ); + + $nonce_value = wc_get_var( $request ); + + if ( ( ! empty( $nonce_value ) && wp_verify_nonce( $nonce_value, 'woocommerce-process_checkout' ) ) || is_user_logged_in() ) { + if ( ! empty( $_POST['hubwoo_checkout_marketing_optin'] ) ) { + + if ( ! empty( $order_id ) ) { + + if ( is_user_logged_in() ) { + + update_user_meta( get_current_user_id(), 'hubwoo_checkout_marketing_optin', 'yes' ); + } else { + + $order = wc_get_order($order_id); + $order->update_meta_data( 'hubwoo_checkout_marketing_optin', 'yes' ); + $order->save(); + } + } + } + } + } + } + + /** + * Save user meta when they optin via woocommerce registeration form. + * + * @since 1.0.0 + * @param int $user_id user ID. + */ + public function hubwoo_save_register_optin( $user_id ) { + + if ( empty( $user_id ) ) { + return; + } + $nonce_value = isset( $_POST['woocommerce-register-nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['woocommerce-register-nonce'] ) ) : ''; + if ( isset( $_POST['email'] ) && wp_verify_nonce( $nonce_value, 'woocommerce-register' ) ) { + if ( isset( $_POST['hubwoo_registeration_marketing_optin'] ) ) { + update_user_meta( $user_id, 'hubwoo_registeration_marketing_optin', 'yes' ); + } + } + } + + /** + * Start session for abandonec carts. + * + * @since 1.0.0 + */ + public function hubwoo_abncart_start_session() { + if ( WC()->is_rest_api_request() ) { + return; + } + + if ( function_exists( 'WC' ) && ! empty( WC()->session ) && ! is_admin() ) { + + WC()->session; + self::hubwoo_abncart_set_locale(); + } + } + + /** + * Save cart of the user if captured by HubSpot. + * + * @since 1.0.0 + */ + public function hubwoo_track_cart_for_formuser() { + + if ( ! empty( WC()->session ) ) { + if ( ! empty( WC()->session->get( 'mwb_guest_user_email' ) ) && empty( WC()->session->get( 'hs_form_user_tracked' ) ) ) { + + $guest_user_cart = array(); + + if ( function_exists( 'WC' ) ) { + + $guest_user_cart['cart'] = WC()->session->cart; + } else { + + $guest_user_cart['cart'] = $woocommerce->session->cart; + } + + if ( empty( $guest_user_cart['cart'] ) ) { + return; + } + + $get_cookie = WC()->session->get_session_cookie(); + + $session_id = ''; + if ( ! empty( $get_cookie ) ) { + $session_id = $get_cookie[0]; + } + + $locale = ! empty( WC()->session->get( 'locale' ) ) ? WC()->session->get( 'locale' ) : ''; + + $user_data = array( + 'email' => WC()->session->get( 'mwb_guest_user_email' ), + 'cartData' => $guest_user_cart, + 'timeStamp' => time(), + 'sessionID' => $session_id, + 'locale' => $locale, + 'sent' => 'no', + ); + + self::hubwoo_abncart_update_new_data( WC()->session->get( 'mwb_guest_user_email' ), $user_data, $session_id ); + + WC()->session->set( 'hs_form_user_tracked', true ); + } + } + } + + /** + * Save cart when billing email is entered on checkout. + * + * @since 1.0.0 + */ + public function hubwoo_save_guest_user_cart() { + + check_ajax_referer( 'hubwoo_cart_security', 'nonce' ); + + if ( ! empty( $_POST['email'] ) ) { + + $posted_email = sanitize_email( wp_unslash( $_POST['email'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + + $guest_user_cart = array(); + + if ( function_exists( 'WC' ) ) { + + $guest_user_cart['cart'] = WC()->session->cart; + } else { + + $guest_user_cart['cart'] = $woocommerce->session->cart; + } + + $get_cookie = WC()->session->get_session_cookie(); + + $session_id = ''; + if ( ! empty( $get_cookie ) ) { + $session_id = $get_cookie[0]; + } + + if ( ! empty( $session_id ) ) { + + $locale = ! empty( $_POST['locale'] ) ? sanitize_text_field( wp_unslash( $_POST['locale'] ) ) : ''; + + if ( empty( WC()->session->get( 'mwb_guest_user_email' ) ) ) { + + WC()->session->set( 'mwb_guest_user_email', ! empty( $posted_email ) ? $posted_email : '' ); + $user_data = array( + 'email' => WC()->session->get( 'mwb_guest_user_email' ), + 'cartData' => $guest_user_cart, + 'timeStamp' => time(), + 'sessionID' => $session_id, + 'locale' => $locale, + 'sent' => 'no', + ); + + self::hubwoo_abncart_update_new_data( WC()->session->get( 'mwb_guest_user_email' ), $user_data, $session_id ); + } else { + + $new_email_entered = ! empty( $posted_email ) ? $posted_email : ''; + + $before_entered_email = WC()->session->get( 'mwb_guest_user_email' ); + + WC()->session->set( 'mwb_guest_user_email', $new_email_entered ); + + $existing_cart_data = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + + if ( ! empty( $existing_cart_data ) ) { + + if ( $new_email_entered === $before_entered_email ) { + + foreach ( $existing_cart_data as $key => &$single_cart_data ) { + + if ( array_key_exists( 'sessionID', $single_cart_data ) && $single_cart_data['sessionID'] == $session_id ) { + + $single_cart_data['cartData'] = $guest_user_cart; + $single_cart_data['timeStamp'] = time(); + $single_cart_data['locale'] = $locale; + $single_cart_data['sent'] = 'no'; + break; + } elseif ( array_key_exists( 'email', $single_cart_data ) && $single_cart_data['email'] == $before_entered_email ) { + + $single_cart_data['cartData'] = $guest_user_cart; + $single_cart_data['timeStamp'] = time(); + $single_cart_data['locale'] = $locale; + $single_cart_data['sent'] = 'no'; + break; + } + } + } else { + + foreach ( $existing_cart_data as $key => &$single_cart_data ) { + + if ( array_key_exists( 'sessionID', $single_cart_data ) && $single_cart_data['sessionID'] == $session_id ) { + + $single_cart_data['cartData'] = $guest_user_cart; + $single_cart_data['timeStamp'] = time(); + $single_cart_data['email'] = $new_email_entered; + $single_cart_data['locale'] = $locale; + $single_cart_data['sent'] = 'no'; + + $user_data = array( + 'email' => $before_entered_email, + 'cartData' => '', + 'timeStamp' => time(), + 'sessionID' => $session_id, + 'locale' => $locale, + 'sent' => 'no', + ); + $existing_cart_data[] = $user_data; + break; + } + } + } + } else { + + WC()->session->set( 'mwb_guest_user_email', ! empty( $posted_email ) ? $posted_email : '' ); + $user_data = array( + 'email' => WC()->session->get( 'mwb_guest_user_email' ), + 'cartData' => $guest_user_cart, + 'timeStamp' => time(), + 'sessionID' => $session_id, + 'locale' => $locale, + 'sent' => 'no', + ); + self::hubwoo_abncart_update_new_data( WC()->session->get( 'mwb_guest_user_email' ), $user_data, $session_id ); + } + + update_option( 'mwb_hubwoo_guest_user_cart', $existing_cart_data ); + } + } + + wp_die(); + } + } + + /** + * Set site local in session. + * + * @since 1.0.0 + */ + public static function hubwoo_abncart_set_locale() { + + if ( defined( 'ICL_LANGUAGE_CODE' ) ) { + + $locale = ICL_LANGUAGE_CODE; + } else { + + $locale = get_locale(); + } + + if ( ! empty( $locale ) ) { + + WC()->session->set( 'locale', $locale ); + } + } + + /** + * Track billing form for email on checkout. + * + * @since 1.0.0 + */ + public function hubwoo_track_email_for_guest_users() { + + if ( ! is_user_logged_in() ) { + + if ( defined( 'ICL_LANGUAGE_CODE' ) ) { + + $locale = ICL_LANGUAGE_CODE; + } else { + + $locale = get_locale(); + } + ?> + + session ) ) { + return; } + + $get_cookie = WC()->session->get_session_cookie(); + + $session_id = ''; + if ( ! empty( $get_cookie ) ) { + $session_id = $get_cookie[0]; + } + + if ( ! empty( $order_id ) ) { + + $order = new WC_Order( $order_id ); + + $order_status = $order->get_status(); + + $order_email = $order->get_billing_email(); + + $existing_cart_data = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + + if ( 'failed' !== $order_status ) { + + if ( ! empty( $existing_cart_data ) ) { + + foreach ( $existing_cart_data as $key => &$single_cart_data ) { + + if ( array_key_exists( 'sessionID', $single_cart_data ) && $single_cart_data['sessionID'] == $session_id ) { + + if ( isset( $single_cart_data['cartData']['cart'] ) ) { + + $single_cart_data['cartData']['cart'] = ''; + $single_cart_data['sent'] = 'no'; + } + } + + if ( array_key_exists( 'email', $single_cart_data ) && $single_cart_data['email'] == $order_email ) { + + if ( isset( $single_cart_data['cartData']['cart'] ) ) { + + $single_cart_data['cartData']['cart'] = ''; + $single_cart_data['sent'] = 'no'; + } + } + + if ( array_key_exists( 'email', $single_cart_data ) && null !== WC()->session->get( 'mwb_guest_user_email' ) && WC()->session->get( 'mwb_guest_user_email' ) == $single_cart_data['email'] ) { + + if ( isset( $single_cart_data['cartData']['cart'] ) ) { + + $single_cart_data['cartData']['cart'] = ''; + $single_cart_data['sent'] = 'no'; + } + } + } + + update_option( 'mwb_hubwoo_guest_user_cart', $existing_cart_data ); + } + } + + if ( is_user_logged_in() ) { + + update_user_meta( get_current_user_id(), 'hubwoo_pro_user_cart_sent', 'no' ); + } + } + } + + /** + * Track changes on cart being updated. + * + * @since 1.0.0 + */ + public static function hubwoo_abncart_track_guest_cart() { + + if ( ! is_user_logged_in() ) { + + $get_cookie = WC()->session->get_session_cookie(); + + if ( ! empty( $get_cookie ) ) { + + $session_id = $get_cookie[0]; + + if ( ! empty( $session_id ) ) { + + if ( null !== WC()->session->get( 'mwb_guest_user_email' ) ) { + + $guest_user_email = WC()->session->get( 'mwb_guest_user_email' ); + + if ( ! empty( $guest_user_email ) ) { + + $guest_user_cart = array(); + + $locale = ! empty( WC()->session->get( 'locale' ) ) ? WC()->session->get( 'locale' ) : ''; + + if ( function_exists( 'WC' ) ) { + + $guest_user_cart['cart'] = WC()->session->cart; + } else { + + $guest_user_cart['cart'] = $woocommerce->session->cart; + } + + $existing_cart_data = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + + $saved_cart = array(); + + if ( ! empty( $existing_cart_data ) ) { + + foreach ( $existing_cart_data as $single_cart_data ) { + + if ( array_key_exists( 'email', $single_cart_data ) && WC()->session->get( 'mwb_guest_user_email' ) == $single_cart_data['email'] ) { + + if ( array_key_exists( 'cartData', $single_cart_data ) ) { + + if ( ! empty( $single_cart_data['cartData']['cart'] ) ) { + $saved_cart = $single_cart_data['cartData']['cart']; + } + } + break; + } + } + } + + if ( $saved_cart === $guest_user_cart['cart'] ) { + + return; + } + + $user_data = array( + 'email' => WC()->session->get( 'mwb_guest_user_email' ), + 'cartData' => $guest_user_cart, + 'timeStamp' => time(), + 'sessionID' => $session_id, + 'locale' => $locale, + 'sent' => 'no', + ); + + self::hubwoo_abncart_update_new_data( WC()->session->get( 'mwb_guest_user_email' ), $user_data, $session_id ); + } + } + } + } + } + } + + /** + * Callback to update cart data in DB. + * + * @since 1.0.0 + * @param string $email email of the contact. + * @param array $user_data formatted data for cart. + * @param string $session session id for the cart activity. + */ + public static function hubwoo_abncart_update_new_data( $email, $user_data, $session ) { + + $existing_cart_data = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + $update_flag = false; + + if ( ! empty( $existing_cart_data ) ) { + + foreach ( $existing_cart_data as $key => &$single_cart_data ) { + + if ( ! empty( $single_cart_data['email'] ) && $single_cart_data['email'] == $email ) { + + $single_cart_data = $user_data; + $update_flag = true; + break; + } elseif ( ! empty( $single_cart_data['sessionID'] ) && $single_cart_data['sessionID'] == $session ) { + + $single_cart_data = $user_data; + $update_flag = true; + break; + } + } + } + + if ( ! $update_flag ) { + + $existing_cart_data[] = $user_data; + } + + update_option( 'mwb_hubwoo_guest_user_cart', $existing_cart_data ); + } + + /** + * Transfer guest cart to user on account registeration. + * + * @since 1.0.0 + * @param int $user_id user ID. + */ + public function hubwoo_abncart_user_registeration( $user_id ) { + + $user = get_user_by( 'id', $user_id ); + $email = ! empty( $user->data->user_email ) ? $user->data->user_email : ''; + if ( empty( $email ) || null == WC()->session ) { + return; + } + $get_cookie = WC()->session->get_session_cookie(); + + if ( ! empty( $get_cookie ) ) { + + $session_id = $get_cookie[0]; + $existing_cart_data = get_option( 'mwb_hubwoo_guest_user_cart', array() ); + foreach ( $existing_cart_data as $key => &$single_cart_data ) { + if ( array_key_exists( 'sessionID', $single_cart_data ) && $single_cart_data['sessionID'] === $session_id ) { + if ( ! empty( $single_cart_data['sent'] ) && 'no' === $single_cart_data['sent'] ) { + unset( $existing_cart_data[ $key ] ); + } else { + $single_cart_data['cartData'] = ''; + $single_cart_data['sent'] = 'no'; + } + } elseif ( array_key_exists( 'email', $single_cart_data ) && $single_cart_data['email'] === $email ) { + if ( ! empty( $single_cart_data['sent'] ) && 'no' === $single_cart_data['sent'] ) { + unset( $existing_cart_data[ $key ] ); + } else { + $single_cart_data['cartData'] = ''; + $single_cart_data['sent'] = 'no'; + } + } + } + + update_option( 'mwb_hubwoo_guest_user_cart', $existing_cart_data ); + + $locale = ! empty( WC()->session->get( 'locale' ) ) ? WC()->session->get( 'locale' ) : ''; + + update_user_meta( $user_id, 'hubwoo_pro_user_left_cart', 'yes' ); + update_user_meta( $user_id, 'hubwoo_pro_last_addtocart', time() ); + update_user_meta( $user_id, 'hubwoo_pro_user_cart_sent', 'no' ); + update_user_meta( $user_id, 'hubwoo_pro_cart_locale', $locale ); + } + } + + /** + * Clear session on logout. + * + * @since 1.0.0 + */ + public function hubwoo_clear_session() { + + if ( null !== WC()->session->get( 'locale' ) ) { + WC()->session->set( 'locale', null ); + } + if ( null !== WC()->session->get( 'mwb_guest_user_email' ) ) { + WC()->session->set( 'mwb_guest_user_email', null ); + } + } + + /** + * Handles the cart data when the guest user updates the cart. + * + * @since 1.0.0 + * @param bool $cart_updated true/false. + * @return bool $cart_updated true/false. + */ + public function hubwoo_guest_cart_updated( $cart_updated ) { + + if ( is_user_logged_in() ) { + + $user_id = get_current_user_id(); + //phpcs:disable + $locale = ! empty( WC()->session->get( 'locale' ) ) ? WC()->session->get( 'locale' ) : ''; + //phpcs:enable + if ( ! empty( $user_id ) && $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_left_cart', 'yes' ); + update_user_meta( $user_id, 'hubwoo_pro_last_addtocart', time() ); + update_user_meta( $user_id, 'hubwoo_pro_cart_locale', $locale ); + update_user_meta( $user_id, 'hubwoo_pro_user_cart_sent', 'no' ); + } + } else { + + self::hubwoo_abncart_track_guest_cart(); + } + return $cart_updated; + } + + /** + * Update key as soon as user makes a addtocart action + * + * @since 1.0.0 + */ + public function hubwoo_abncart_woocommerce_add_to_cart() { + + if ( is_user_logged_in() ) { + + $user_id = get_current_user_id(); + //phpcs:disable + $locale = ! empty( WC()->session->get( 'locale' ) ) ? WC()->session->get( 'locale' ) : ''; + //phpcs:enable + if ( ! empty( $user_id ) && $user_id ) { + + update_user_meta( $user_id, 'hubwoo_pro_user_left_cart', 'yes' ); + + update_user_meta( $user_id, 'hubwoo_pro_last_addtocart', time() ); + + update_user_meta( $user_id, 'hubwoo_pro_cart_locale', $locale ); + + update_user_meta( $user_id, 'hubwoo_pro_user_cart_sent', 'no' ); + } + } else { + + self::hubwoo_abncart_track_guest_cart(); + } + } + + /** + * Tracking the abandonded cart products. + * + * @since 1.0.4 + */ + public function hubwoo_add_abncart_products() { + $product_string = ! empty( $_GET['hubwoo-abncart-retrieve'] ) ? sanitize_text_field( wp_unslash( $_GET['hubwoo-abncart-retrieve'] ) ) : ''; + if ( ! empty( $product_string ) ) { + $seperated_products = explode( ',', $product_string ); + if ( ! empty( $seperated_products ) ) { + global $woocommerce; + $woocommerce->cart->empty_cart(); + foreach ( $seperated_products as $product ) { + $pro_qty = array(); + $pro_qty = explode( ':', $product ); + $pro_qty[1] = ! empty( $pro_qty[1] ) ? $pro_qty[1] : 1; + $woocommerce->cart->add_to_cart( $pro_qty[0], $pro_qty[1] ); + } + wp_safe_redirect( wc_get_cart_url(), 301 ); + exit; + } + } + } + + /** + * Tracking subscribe box for guest users + * + * @since 1.2.2 + */ + public function get_email_checkout_page() { + if ( ! is_user_logged_in() ) { + ?> + + + -1, + 'post_status' => $order_statuses, + 'orderby' => 'id', + 'order' => 'desc', + 'return' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'customer' => $email, + )); + + $customer_orders = $query->get_orders(); + + } else { + $query = new WP_Query(); + + $customer_orders = $query->query( + array( + 'post_type' => 'shop_order', + 'posts_per_page' => 1, + 'post_status' => $order_statuses, + 'orderby' => 'id', + 'order' => 'desc', + 'fields' => 'ids', + 'no_found_rows' => true, + 'ignore_sticky_posts' => true, + 'meta_query' => array( + array( + 'key' => '_billing_email', + 'value' => $fetched_email, + ), + ), + ) + ); + } + + $value = null; + + foreach ( $customer_orders as $single_order ) { + $orders = wc_get_order( $single_order ); + $meta_data = $orders->get_meta_data(); + foreach ( $meta_data as $data ) { + $key = $data->key; + if ( 'hubwoo_checkout_marketing_optin' == $key ) { + $value = 'success'; + break; + } else { + $value = 'failure'; + } + } + } + + echo wp_json_encode( $value ); + } + + wp_die(); + } + + /** + * Getting current language of user + * + * @since 1.3.2 + */ + public function hubwoo_update_user_prefered_lang( $order_id ) { + $current_lang = apply_filters( 'wpml_current_language', null ); + + $order = wc_get_order( $order_id ); + $customer_id = $order->get_customer_id(); + + if ( ! empty( $customer_id ) ) { + update_user_meta( $customer_id, 'hubwoo_preferred_language', $current_lang ); + + } else { + $order->update_meta_data('hubwoo_preferred_language', $current_lang); + $order->save(); + } + } + + /** + * Hide line item meta. + * + * @since 1.4.1 + */ + public function hubwoo_hide_line_item_meta( $meta_data, $item ) { + $new_meta = array(); + foreach ( $meta_data as $id => $meta_array ) { + if ( 'hubwoo_ecomm_line_item_id' === $meta_array->key ) { + continue; + } + $new_meta[ $id ] = $meta_array; + } + return $new_meta; + } +} diff --git a/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/public/index.php b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/public/index.php new file mode 100644 index 00000000..0de7bcdd --- /dev/null +++ b/wp/wp-content/plugins/makewebbetter-hubspot-for-woocommerce/public/index.php @@ -0,0 +1,2 @@ + Note “Hands-down the BEST support team I’ve ever interacted with. The plugins work great, and if you ever have any issues, the support staff is super responsive and helpful. I’ve recently completed a very complex integration with HubSpot utilizing the plugin... 5 stars and two thumbs up... world-class!†*– Joe Peterson* + +> Note “As a HubSpot agency, we’ve set up many eCommerce websites, and even more Inbound marketing campaigns. This plugin helps to bridge the gap between an online shop and the Inbound Methodology. Additionally, the implementation time is reduced by many hours. No question, this is one of the best investments we make for our eCom clients. Lower cost to implement, much faster Return on HubSpot Investment, and quicker time to market. It’s a win, win, win. +†*– MediaTown* + +If you don’t find the solution to your problem in our documentation, you can [Contact us](https://makewebbetter.com/contact-us/?utm_source=MWB-HubspotFree-ORG&utm_medium=MWB-ORG&utm_campaign=ORG) with your query. + + +== Installation == + += Automatic installation = + +Automatic installation is the easiest option as WordPress handles the file transfers itself and you don't need to leave your web browser. To do an automatic install of MWB HubSpot for WooCommerce, log in to your WordPress dashboard, navigate to the Plugins menu and click Add New. + +In the search field type "MWB HubSpot for WooCommerce" and click Search Plugins. Once you've found our MWB HubSpot for WooCommerce plugin you can view details about it such as the point release, rating and description. Most importantly, of course, you can install it by simply clicking "Install Now". + += Manual installation = + +The manual installation method involves downloading our MWB HubSpot for WooCommerce and uploading it to your webserver via your favorite FTP application. The WordPress codex contains [instructions on how to do this here](http://codex.wordpress.org/Managing_Plugins#Manual_Plugin_Installation). + += Updating = + +Automatic updates should work like a charm as always though, ensure you backup your site just in case. + + +== Screenshots == + +1. Abandoned cart view +2. Ads view +3. Contacts View +4. Dashboard view +5. Email marketing view +6. List View +7. Reporting view + +== Frequently Asked Questions == + += What does the plugin do? = +The [MWB HubSpot for WooCommerce](https://makewebbetter.com/product/hubspot-for-woocommerce/?utm_source=MWB-HubspotFree-ORG&utm_medium=MWB-ORG&utm_campaign=ORG) plugin allows you to sync your WooCommerce data with HubSpot, so you can engage your online store’s visitors with targeted email marketing, automation, and ads. With the combined power of WooCommerce and HubSpot, this plugin gives you all the tools you need to grow your WooCommerce online store and delight your contacts and customers. + += What is HubSpot? = +[HubSpot](https://hubspot.com/) is an all-in-one growth platform that provides free CRM, marketing, sales, and customer service products to help you grow your business. 100,000+ websites in 100+ countries already use HubSpot to grow their businesses. + += Who should use the MWB HubSpot for WooCommerce plugin? = +This plugin is perfect for WooCommerce store owners who want to use a free CRM to track their leads, customers, and abandoned carts, send marketing emails, and access robust analytics to see how their store is performing. + += Are coding skills needed to use the MWB HubSpot for WooCommerce plugin? = +Not at all! The MWB HubSpot for WooCommerce plugin is easy to download and starts working seamlessly with your WordPress site right away. + += Who is MakeWebBetter? = +[MakeWebBetter](http://www.makewebbetter.com/?utm_source=MWB-HubspotFree-ORG&utm_medium=MWB-ORG&utm_campaign=ORG) is a premier HubSpot partner, experts in WooCommerce, and creator of this free plugin! They build, maintain, and optimize WooCommerce stores to help businesses grow better. To learn more about MakeWebBetter, visit their website. + += Is there any way to make the synchronization faster for those who have 1000+ contacts? = +If you have over 1000+ contacts, synchronization may take a while. You can [connect with us](https://makewebbetter.com/product/hubspot-for-woocommerce/?utm_source=MWB-HubspotFree-ORG&utm_medium=MWB-ORG&utm_campaign=ORG) for faster syncing. + += My question is not listed = +Please visit the MakeWebBetter [knowledge base](https://support.makewebbetter.com/hubspot-integrations/category/hubspot-woocommerce-integration-kb/?utm_source=MWB-HubspotFree-ORG&utm_medium=MWB-ORG&utm_campaign=ORG) for more detailed [documentation and support.](https://docs.makewebbetter.com/hubspot-integration-for-woocommerce/?utm_source=MWB-HubspotFree-ORG&utm_medium=MWB-ORG&utm_campaign=ORG) + += What product data can I send over HubSpot through this plugin? = +If you have the free HubSpot plan, you can sync Product Name, Product Image, Product Price, Product Description. And if you use a Marketing professional or enterprise plan, you can sync all the data included in the free plan along with the Product SKU and Product Image URL. + +== Changelog == += 1.5.7 - Released on 30 August 2024 = +* Fix - Bulk line item update, filters added. += 1.5.6 - Released on 05 June 2024 = +* Fix - Deal Update Fix for HPOS. += 1.5.5 - Released on 12 April 2024 = +* Fix - Minor Fixes. += 1.5.4 - Released on 10 April 2024 = +* Fix - Minor Fixes. += 1.5.3 - Released on 06 March 2024 = +* Added - HPOS Compatibility Addon. += 1.5.2 - Released on 12 Jan 2024 = +* Fix - Minor Fixes. += 1.5.1 - Released on 22 September 2023 = +* Fix - Minor Bug Fixes. += 1.5.0 - Released on 21 August 2023 = +* Added - Refresh Pipeline. += 1.4.9 - Released on 01 August 2023 = +* Added - Delete Abandoned Data. += 1.4.8 - Released on 29 June 2023 = +* Fix - Minor Bug Fixes. += 1.4.7 - Released on 22 May 2023 = +* Fix - Minor Bug Fixes. += 1.4.6 - Released on 03 May 2023 = +* Add - UTM links. += 1.4.5 - Released on 17 March 2023 = +* Fix - Minor Bug Fixes. += 1.4.4 - Released on 31 Jan 2023 = +* Fix - Redirect URI. += 1.4.3 - Released on 19 Jan 2023 = +* Fix - Update filter. += 1.4.2 - Released on 17 Nov 2022 = +* Fix - Minor Bug Fixes. += 1.4.1 - Released on 10 Nov 2022 = +* Fix - Minor Bug Fixes. += 1.4.0 - Released on 07 Nov 2022 = +* Added - New API endpoints. += 1.3.3 - Released on 15 September 2022 = +* Added - migration notice & subscribe us form. += 1.3.2 - Released on 08 August 2022 = +* Added - Update multi currency. += 1.3.1 - Released on 02 June 2022 = +* Fix - Minor Bug Fixes. += 1.3.0 - Released on 14 April 2022 = +* Added - Line item filter. += 1.2.9 - Released on 17 March 2022 = +* Fix - Minor Bug Fixes. += 1.2.8 - Released on 31 Jan 2022 = +* Added - Update Scopes. += 1.2.7 - Released on 13 Jan 2022 = +* Added - Deal Company association. += 1.2.6 - Released on 06 Dec 2021 = +* Fix - Newsletter Subscription Property issue. += 1.2.5 - Released on 12 Nov 2021 = +* Fix - Sync message issue. += 1.2.4 - Released on 20 Oct 2021 = +* Fix - Minor Bug Fixes. += 1.2.3 - Released on 13 Sep 2021 = +* Added - Content Part += 1.2.2 - Released on 18 August 2021 = +* Added - Fixed deal and contact association issue += 1.2.1 - Released on 29 May 2021 = +* Added - Bug Fixes. += 1.2.0 - Released on 23 April 2021 = +* Added - Historical Sync Data. += 1.0.8 - Released on 23 April 2021 = +* Fix - Creating Groups issue. += 1.0.7 - Released on 06 April 2021 = +* Fix - Authentication issue += 1.0.6 - Released on 18 December 2020 = +* Fix - Deal update issue += 1.0.5 = +* Fix - Bug Fixes. += 1.0.4 = +* Session issue and minor bugs += 1.0.3 = +* Shipment tracking and re-sync deals += 1.0.2 = +* Multi site support += 1.0.1 = +* Contact sync fixed += 1.0.0 = +* Initial release + + +== Upgrade Notice == + += 1.5.7 - Released on 30 August 2024 = +* Fix - Minor Fixes. diff --git a/wp/wp-content/plugins/relevanssi/changelog.txt b/wp/wp-content/plugins/relevanssi/changelog.txt new file mode 100644 index 00000000..61dcb23d --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/changelog.txt @@ -0,0 +1,1457 @@ += 4.22.1 = +* Security fix: Relevanssi had a vulnerability where anyone could access the search logs and click logs. The log export is now protected. +* Minor fix: Relevanssi had problems with Polylang when a post or term didn't have language specified. Now Relevanssi handles those situations better. +* Minor fix: Post date throttling had a MySQL error that made it replace JOINs instead of concatenating. +* Minor fix: The log database table now has an index on session_id, as not having that index can slow down the search a lot. + += 4.22.0 = +* New feature: New filter hook `relevanssi_searchform_dropdown_args` filters the arguments for `wp_dropdown_categories()` in search forms. +* Changed behaviour: Search form shortcode taxonomy dropdowns are now sorted alphabetically and not by term ID. +* Minor fix: Caught a bug in excerpt-building with empty words. +* Minor fix: It's now possible to set both `post__in` and `post__not_in` and likewise for `parent__in` and `parent__not_in`. +* Minor fix: The `post_status` is no longer available as a query parameter. +* Minor fix: It's now possible to sort posts in ascending order of relevance. + += 4.21.2 = +* Minor fix: Meta query boolean to array conversion. + += 4.21.1 = +* Changed behaviour: The 'relevanssi_index_content' and 'relevanssi_index_titles' filter hooks now get the post object as a second parameter. +* Minor fix: Relevanssi is now blocked in the reusable content block search. +* Minor fix: Stop Relevanssi from blocking the feed searches. +* Minor fix: Improve exact match boosts with accented letters. +* Minor fix: Entering synonyms in Polylang all languages mode was possible; it shouldn't be. + += 4.21.0 = +* New feature: New filter hook `relevanssi_highlight_regex` makes it possible to adjust the regex used for highlighting. +* New feature: New filter hook `relevanssi_excerpt_custom_fields` filters the list of custom fields used for creating the excerpt. +* New feature: New filter hook `relevanssi_phrase_custom_fields` filters the list of custom fields used for phrase matching. Return an empty array to disable phrase matching in custom fields. +* New feature: New filter hook `relevanssi_phrase_taxonomies` filters the list of taxonomies used for phrase matching. Return an empty array to disable phrase matching in taxonomies. +* New feature: If RELEVANSSI_DEBUG, WP_DEBUG and WP_DEBUG_DISPLAY are all true, Relevanssi will print out indexing debugging messages to the error log (PHP error log or whatever is defined in WP_DEBUG_LOG). +* Minor fix: Some ACF fields change the global $post, leading to indexing problems. Relevanssi tries to prevent that now. +* Minor fix: Avoid fatal errors from `action` query variable being a non-string. +* Minor fix: Term indexing with WPML only indexed the terms in the current admin language. Now the terms are indexed in all languages. + += 4.20.0 = +* New feature: Relevanssi can now create custom field specific excerpts that come from one custom field only and know which field that is. +* New feature: You can see the list of indexed custom field names in the indexing and excerpt settings. +* New feature: New filter hook `relevanssi_excerpt_specific_custom_field_content` filters the excerpt custom field content if `relevanssi_excerpt_specific_fields` is enabled. +* Changed behaviour: The `relevanssi_get_custom_field_content()` function now returns an array instead of string. If `relevanssi_excerpt_specific_fields` is off, the previous string return value is returned as a single-item array with the string in index 0. If the setting is on, the array keys are the field names. +* Minor fix: The stopword population during the multisite installation used the wrong database table, leading to failed population. +* Minor fix: Multisite installation is moved from `wp_insert_site` (priority 10) to `wp_initialize_site` (priority 200) in order to avoid trouble. +* Minor fix: The session ID is now included in the log export. +* Minor fix: The "none" value in category dropdowns from the searchform shortcode is changed from -1 to 0. + += 4.19.0 = +* New feature: Logging now includes a session ID (based on user ID for logged-in users, HTTP user agent for others, and current time, stable for 10 minutes per user). This is used to remove duplicate searches from live searches, keeping only the final search query. + += 4.18.4 = +* New feature: New filter hook `relevanssi_highlight_query` lets you modify the search query for highlighting. +* Changed behavior: Relevanssi no longer searches in feed searches by default. + += 4.18.3 = +* New feature: New filter hook `relevanssi_blocked_field_types` can be used to control which ACF field types are excluded from the index. By default, this includes 'repeater', 'flexible_content', and 'group'. +* New feature: New filter hook `relevanssi_acf_field_object` can be used to filter the ACF field object before Relevanssi indexes it. Return false to have Relevanssi ignore the field type. +* New feature: Relevanssi debug mode has more features now. +* Minor fix: ACF field exclusion is now recursive. If a parent field is excluded, all sub fields will also be excluded. +* Minor fix: Handling of data attributes in in-document highlighting had a bug that caused problems with third-party plugins. +* Minor fix: The indexing settings tab now checks if the wp_relevanssi database table exists and will create the table if it doesn't. + += 4.18.2 = +* New feature: Relevanssi now has a debug mode that will help troubleshooting and support. +* Minor fix: Using the_permalink() caused problems with search result links. That is now fixed. Relevanssi no longer hooks onto `the_permalink` hook and instead uses `post_link` and other similar hooks. + += 4.18.1 = +* New feature: New filter hook `relevanssi_add_highlight_and_tracking` can be used to force Relevanssi to add the `highlight` and tracking parameters to permalinks. +* Changed behaviour: The 'relevanssi_wpml_filter' filter function now runs on priority 9 instead of 10 to avoid problems with custom filters on relevanssi_hits_filter. +* Minor fix: Handle cases of missing posts better; relevanssi_get_post() now returns a WP_Error if no post is found. +* Minor fix: Search queries that contain apostrophes and quotes can now be deleted from the log. +* Minor fix: Avoid a slow query on the searching tab when the throttle is not enabled. + += 4.18.0 = +* New feature: Relevanssi now shows the MySQL `max_allowed_packet` size on the debug tab. +* New feature: Relevanssi now shows the indexing query on the debug tab. +* New feature: ACF field settings now include a 'Exclude from Relevanssi index' setting. You can use that to exclude ACF fields from the Relevanssi index. +* Minor fix: Relevanssi was adding extra quotes around search terms in the `highlight` parameter. +* Minor fix: Yet another update to data attributes in highlighting. Thanks to Faeddur. +* Minor fix: Taxonomy query handling was improved. This should help in particular Polylang users who've had problems with Relevanssi ignoring Polylang language restrictions. + += 4.17.1 = +* Minor fix: WooCommerce layered navigation compatibility caused enough problems that I've disabled it by default. You can enable it with `add_filter( 'woocommerce_get_filtered_term_product_counts_query', 'relevanssi_filtered_term_product_counts_query' );`. +* Minor fix: Data attribute handling for in-document highlighting is now better. + += 4.17.0 = +* New feature: You can now look at how the posts appear in the database from the Debugging tab. +* New feature: Relevanssi now works with WooCommerce layered navigation filters. The filter post counts should now match the Relevanssi search results. +* New feature: New function `relevanssi_count_term_occurrances()` can be used to display how many times search terms appear in the database. +* Changed behaviour: Relevanssi post update trigger is now on `wp_after_insert_post` instead of `wp_insert_post`. This makes the indexing more reliable and better compatible with other plugins. +* Changed behaviour: Previously, throttling searches has been impossible when results are sorted by date. Now if you set Relevanssi to sort by post date from the searching settings, you can enable the throttle and the throttling will make sure to keep the most recent posts. This does not work if you set the `orderby` to `post_date` elsewhere. +* Minor fix: Prevents Relevanssi from interfering in fringe cases (including The Event Calendar event search). +* Minor fix: Relevanssi added the `highlight` parameter to home page URLs, even though it shouldn't. +* Minor fix: Indexing `nav_menu_item` posts is stopped earlier in the process to avoid problems with big menus. +* Minor fix: If the `sentence` query variable is used to enable phrase searching, Relevanssi now adds quotes to the `highlight` parameter. +* Minor fix: Add support for JetSmartFilters. +* Minor fix: Add support for WooCommerce products attribute lookup table filtering. +* Minor fix: Improve excerpts to avoid breaking HTML tags when tags are allowed. +* Minor fix: Fix broken tag and category weight settings. +* Minor fix: Improve Polylang language detection. +* Minor fix: Relevanssi now hyphenates long search terms in the User searches page. This prevents long search terms from messing up the display. +* Minor fix: Improve WPFD file content indexing support. Relevanssi indexing now happens after the WPFD indexing is done. +* Minor fix: Add support for TablePress `table_filter` shortcodes. +* Minor fix: Stopped some problems with Did you mean suggestions suggesting the same word if a hyphen was included. +* Minor fix: Paging didn't work in admin searches for hierarchical post types (like pages). +* Minor fix: In-document highlighting could break certain elements thanks to Relevanssi messing up data attributes. +* Minor fix: Relevanssi now recursively runs `relevanssi_block_to_render` and the CSS `relevanssi_noindex` filtering for inner blocks. + += 4.16.0 = +* New feature: Oxygen compatibility has been upgraded to support JSON data from Oxygen 4. This is still in early stages, so feedback from Oxygen users is welcome. +* New feature: New filter hook `relevanssi_oxygen_element` is used to filter Oxygen JSON elements. The earlier `relevanssi_oxygen_section_filters` and `relevanssi_oxygen_section_content` filters are no longer used with Oxygen 4; this hook is the only way to filter Oxygen elements. +* Changed behaviour: Relevanssi now applies `remove_accents()` to all strings. This is because default database collations do not care for accents and having accents may cause missing information in indexing. If you use a database collation that doesn't ignore accents, make sure you disable this filter. +* Minor fix: Relevanssi used `the_category` filter with too few parameters. The missing parameters have been added. +* Minor fix: Stops drafts and pending posts from showing up in Relevanssi Live Ajax Searches. +* Minor fix: Phrases weren't used in some cases where a multiple-word phrase looked like a single-word phrase. +* Minor fix: Prevents fatal errors from `relevanssi_strip_all_tags()`. + += 4.15.2 = +* New feature: New filter hook `relevanssi_didyoumean_token` lets you filter Did you mean words before correction. You can use this filter hook to exclude words from being corrected. +* Minor fix: Phrase search couldn't find phrases that include an ampersand if they matched the post title. This works now. +* Minor fix: Relevanssi now adds spaces after table cell tags to avoid table cell content sticking together in excerpts. +* Minor fix: The 'Allowable tags in excerpts' function now automatically corrects the entered value to match what Relevanssi expects the value to be. + += 4.15.1 = +* Changed behaviour: Relevanssi now ignores WordPress metadata custom fields that aren't interesting for Relevanssi indexing. +* Changed behaviour: Both `relevanssi_get_permalink()` and `relevanssi_the_permalink()` now can take post ID or a post object as a parameter and can thus be used outside the Loop. +* Changed behaviour: The `relevanssi_hits_filter` hook now gets the WP_Query object as the second parameter. +* Minor fix: Avoid error messages for missing `mysqlcolumn_matches` array key. + += 4.15.0 = +* New feature: The action hook `relevanssi_init` runs at the end of the `relevanssi_init()` function. +* New feature: New filter hook `relevanssi_author_query_filter` filters the post author MySQL query. +* New feature: New filter hook `relevanssi_by_date_query_filter` filters the by_date MySQL query. +* New feature: New filter hook `relevanssi_date_query_filter` filters the date query MySQL query. +* New feature: New filter hook `relevanssi_parent_query_filter` filters the post parent MySQL query. +* New feature: New filter hook `relevanssi_post_query_filter` filters the post__in and post__not_in MySQL query. +* New feature: New filter hook `relevanssi_post_status_query_filter` filters the post_status MySQL query. +* New feature: New filter hook `relevanssi_post_type_query_filter` filters the post_type MySQL query. +* Minor fix: The Bricks compatibility was improved, Relevanssi now notices changes to Bricks posts more often. Relevanssi also only reads the text from the `_bricks_page_content_2` custom field. + += 4.14.7 = +* User interface: The synonym settings page now alerts if the synonyms aren't active because of the AND search. + += 4.14.6 = +* Security fix: Extra hardening for AJAX requests. Some AJAX actions in Relevanssi could leak information to site subscribers who knew what to look for. + += 4.14.5 = +* Security fix: Any registered user could empty the Relevanssi index by triggering the index truncate AJAX action. That is no longer possible. +* New feature: The [searchform] shortcode has a new parameter, 'checklist', which you can use to create taxonomy checklists. +* Changed behaviour: The `relevanssi_search_again` parameter array has more parameters the filter can modify. +* Changed behaviour: The `relevanssi_show_matches` filter hook gets the post object as the second parameter. +* Minor fix: The `cats` and `tags` parameters work better and support array values. + += 4.14.4 = +* Minor fix: `relevanssi_orderby` did not always accept an array-format orderby parameter. +* Minor fix: Removes a highlighting problem stemming from uppercase search terms. +* Minor fix: Relevanssi removes highlights better from inside multiline HTML tags. +* Minor fix: When image attachment indexing was disabled, saving image attachments would still index the images. Image attachment blocking is now a `relevanssi_indexing_restriction` filter function, which means it's always active. + += 4.14.3 = +* Security fix: User searches page had a XSS vulnerability. + += 4.14.2 = +* Minor fix: Remove unnecessary database calls from admin pages. +* Minor fix: Improved Oxygen compatibility. + += 4.14.1 = +* Adds a missing file. + += 4.14.0 = +* New feature: New filter hook `relevanssi_render_blocks` controls whether Relevanssi renders blocks in a post or not. If you are having problems updating long posts with lots of blocks, having this filter hook return `false` for the post in question will likely help, as rendering the blocks in a long post can take huge amounts of memory. +* New feature: The user searches page has been improved a lot. +* New feature: The [searchform] shortcode has a new parameter, 'post_type_boxes', which creates a checkbox for each post type you list in the value. For example [searchform post_type_boxes='*post,page'] would create a search with a checkbox for 'post' and 'page' post types, with 'post' pre-checked. +* New feature: You can now have multiple dropdowns in one [searchform] shortcode. Anything that begins with 'dropdown' is considered a dropdown parameter, so you can do [searchform dropdown_1='category' dropdown_2='post_tag'] for example. +* New feature: New filter hook `relevanssi_search_params` lets you filter search parameters after they've been collected from the WP_Query. +* New feature: New filter hook `relevanssi_excerpt_post` lets you make Relevanssi skip creating excerpts for specific posts. +* Changed behaviour: Filter hooks `relevanssi_1day`, `relevanssi_7days` and `relevanssi_30days` are removed, as the user searches page is now different. The default value for `relevanssi_user_searches_limit` is now 100 instead of 20. +* Minor fix: In some languages, iOS uses „“ for quotes. Relevanssi now understands those for the phrase operator. +* Minor fix: Stops Relevanssi from blocking the admin search for WooCommerce coupons and other WooCommerce custom post types. +* Minor fix: Fixes problems with the WP-Members compatibility. +* Minor fix: New parameter for `relevanssi_tokenize()` introduces the context (indexing or search query). The `relevanssi_extract_phrases()` is only used on search queries. +* Minor fix: Relevanssi won't let you adjust synonyms and stopwords anymore if you use Polylang and are in 'Show all languages' mode. +* Minor fix: Highlighting is improved by a more precise HTML entity filter, thanks to Jacob Bearce. + += 4.13.3.1 = +* Minor fix: The Bricks compatibility was broken. This version fixes it. + += 4.13.3 = +* New feature: You can now add a post type dropdown to search forms with the [searchform] shortcode with the parameter 'dropdown' set to 'post_type'. +* New feature: Adds compatibility for Product GTIN (EAN, UPC, ISBN) for WooCommerce plugin. +* New feature: New filter hook `relevanssi_post_to_excerpt` lets you filter the post object before an excerpt is created from it. +* New feature: Relevanssi is now compatible with the Bricks page builder theme (requires Bricks 1.3.2). +* Minor fix: The ″ character is now counted as a quote. +* Minor fix: Running indexing through WP CLI doesn't cause PHP notices anymore. +* Minor fix: Sometimes the Did you mean would return really weird long suggestions from the search logs. That won't happen anymore. +* Minor fix: Improves tax_query handling in fringe cases with multiple AND clauses joined together with OR. +* Minor fix: Oxygen compatibility has been improved. Rich text fields and updating posts when they are saved in Oxygen now work better, and revisions are no longer indexed. +* Minor fix: Searching without a search term works much better now, you get more posts in the results (default value is up to 500). + += 4.13.2 = +* New feature: Adds support for Avada Live Search. +* New feature: Adds support for Fibo Search. +* Minor fix: Elementor library searches are not broken anymore when Relevanssi is enabled in admin. +* Minor fix: Relevanssi now understands array-style post_type[] parameters. +* Minor fix: Relevanssi now automatically considers the Turkish 'ı' the same as 'i'. + += 4.13.1 = +* New feature: Adds compatibility for WP-Members plugin, preventing blocked posts from showing up in the search results. +* New feature: New function `relevanssi_get_attachment_suffix()` can be used to return the attachment file suffix based on a post object or a post ID. +* Minor fix: Improves the Oxygen compatibility. Now also the [oxygen] shortcode tags are removed. + += 4.13.0 = +* New feature: New filter hook `relevanssi_phrase` filters each phrase before it's used in the MySQL query. +* New feature: Relevanssi can now add Google-style missing term lists to the search results. You can either use the `%missing%` tag in the search results breakdown settings, or you can create your own code: the missing terms are also in `$post->missing_terms`. Relevanssi Premium will also add "Must have" links when there's just one missing term. +* New feature: New filter hook `relevanssi_missing_terms_tag` controls which tag is used to wrap the missing terms. +* New feature: New filter hook `relevanssi_missing_terms_template` can be used to filter the template used to display the missing terms. +* New feature: New function `relevanssi_get_post_meta_for_all_posts()` can be used to fetch particular meta field for a number of posts with just one query. +* New feature: New filter hook `relevanssi_post_author` lets you filter the post author display_name before it is indexed. +* Changed behaviour: `relevanssi_strip_tags()` used to add spaces between HTML tags before stripping them. It no longer does that, but instead adds a space after specific list of tags (p, br, h1-h6, div, blockquote, hr, li, img) to avoid words being stuck to each other in excerpts. +* Changed behaviour: Relevanssi now indexes the contents of Oxygen Builder PHP & HTML code blocks. +* Changed behaviour: Relevanssi now handles synonyms inside phrases differently. If the new filter hook `relevanssi_phrase_synonyms` returns `true` (default value), synonyms create a new phrase (with synonym 'dog=hound', phrase `"dog biscuits"` becomes `"dog biscuits" "hound biscuits"`). If the value is `false`, synonyms inside phrases are ignored. +* Minor fix: Warnings when creating excerpts with search terms that contain a slash were removed. +* Minor fix: Better Ninja Tables compatibility to avoid problems with lightbox images. +* Minor fix: Relevanssi did not work well in the Media Library grid view. Relevanssi is now blocked there. If you need Relevanssi in Media Library searches, use the list view. +* Minor fix: Relevanssi excerpt creation didn't work correctly when numerical search terms were used. + += 4.12.5 = +* Changed behaviour: `relevanssi_excerpt_custom_field_content` now gets the post ID and list of custom field names as a parameter. +* Minor fix: Makes sure Relevanssi options are not wiped when the free version is deleted while Premium is active. +* Minor fix: Adds a trailing slash to the blog URL in Did you mean links. + += 4.12.4 = +* New feature: New action hooks `relevanssi_pre_the_content` and `relevanssi_post_the_content` fire before and after Relevanssi applies `the_content` filter to the post excerpts. Some Relevanssi default behaviour has been moved to these hooks so it can be modified. +* Changed behaviour: The `relevanssi_do_not_index` gets the post object as a third parameter. +* Minor fix: Remove errors from `relevanssi_strip_all_tags()` getting a `null` parameter. + += 4.12.3 = +* Major fix: Post type weights did not work; improving the caching had broken them. +* Minor fix: Relevanssi works better with soft hyphens now, removing them in indexing and excerpt-building. +* Minor fix: Stops indexing error messages in WPML. + += 4.12.2 = +* Major fix: Stops more problems with ACF custom field indexing. +* Major fix: Fixes a bug in search result caching that caused Relevanssi to make lots of unnecessary database queries. + += 4.12.1 = +* Major fix: Stops TypeError crashes from null custom field indexing. + += 4.12.0 = +* New feature: New filter hook `relevanssi_phrase_queries` can be used to add phrase matching queries to support more content types. +* New feature: New filter hook `relevanssi_excerpt_gap` lets you adjust the first line of excerpt optimization. +* Changed behaviour: The `relevanssi_admin_search_element` filter hook now gets the post object as the second parameter, rendering the filter hook more useful. +* Changed behaviour: Relevanssi now automatically optimizes excerpt creation in long posts. You can still use `relevanssi_optimize_excerpts` for further optimization, but it's probably not necessary. +* Changed behaviour: The `relevanssi_tag_before_tokenize` filter hook parameters were changed in order to be actually useful and to match what the filter hook is supposed to do. +* Minor fix: In some cases Relevanssi wouldn't highlight the last word of the title. This is more reliable now. +* Minor fix: Relevanssi will now add the `highlight` parameter only to search results, and not to other links on the search results page. +* Minor fix: Improved fringe cases in nested taxonomy queries. +* Minor fix: Taxonomy terms in WPML were not indexed correctly. Instead of the post language, the current language was used, so if your admin dashboard is in English, German posts would get English translations of the terms, not German. This is now fixed. +* Minor fix: Excerpt creation is now faster when multiple excerpts are not used. +* Minor fix: The SEO plugin noindex setting did not actually work. That has been fixed now. + += 4.11.1 = +* Major fix: The type hinting introduced for some functions turned out to be too strict, causing fatal errors. The type hinting has been relaxed (using nullable types would help, but that's a PHP 7.4 feature, and we don't want that). + += 4.11.0 = +* New feature: New filter hook `relevanssi_rendered_block` filters Gutenberg block content after the block has been rendered with `render_block()`. +* New feature: New filter hook `relevanssi_log_query` can be used to filter the search query before it's logged. This can be used to log instead the query that includes synonyms (available as a parameter to the filter hook). +* New feature: New filter hook `relevanssi_add_all_results` can be used to make Relevanssi add a list of all result IDs found to `$query->relevanssi_all_results`. Just make this hook return `true`. +* New feature: New filter hook `relevanssi_acceptable_hooks` can be used to adjust where in WP admin the Relevanssi admin javascripts are enqueued. +* New feature: Support for All-in-One SEO. Posts marked as 'Robots No Index' are not indexed by Relevanssi. +* New feature: New setting in advanced indexing settings to control whether Relevanssi respects the SEO plugin 'noindex' setting or not. +* Changed behaviour: Type hinting has been added to Relevanssi functions, which may cause errors if the filter functions are sloppy with data types. +* Changed behaviour: `relevanssi_the_title()` now supports the same parameters as `the_title()`, so you can just replace `the_title()` with it and keep everything else the same. The old behaviour is still supported. +* Changed behaviour: Relevanssi no longer logs queries with the added synonyms. You can use the `relevanssi_log_query` filter hook to return to the previous behaviour of logging the synonyms too. Thanks to Jan Willem Oostendorp. +* Changed behaviour: When using ACF and custom fields indexing set to 'all', Relevanssi will no longer index the meta fields (where the content begins with `field_`). +* Minor fix: The Oxygen compatibility made it impossible to index other custom fields than the Oxygen `ct_builder_shortcodes`. This has been improved now. +* Minor fix: Old legacy scripts that caused Javascript warnings on admin pages have been removed. +* Minor fix: In some cases, having less than or greater than symbols in PDF content would block that PDF content from being indexed. + += 4.10.2 = +* New feature: You can force Relevanssi to be active by setting the query variable `relevanssi` to `true`. Thanks to Jan Willem Oostendorp. +* Changed behaviour: Relevanssi has been moved from `the_posts` filter to `posts_pre_query`. This change doesn't do much, but increases performance slightly as WordPress needs to do less useless work, as now the default query is no longer run. Thanks to Jan Willem Oostendorp. +* Minor fix: Highlighting didn't work properly when highlighting something immediately following a HTML tag. +* Minor fix: You can no longer set the value of minimum word length to less than 1 or higher than 9 from the settings page. +* Minor fix: Importing options broke synonym and stopword settings. +* Minor fix: Improves the Rank Math SEO compatibility to avoid errors in plugin activation. +* Minor fix: WPML search results that included non-post results caused fatal errors and crashes. This fixes the crashing and makes non-post results work better in both WPML and Polylang. + += 4.10.1 = +* Major fix: The multilingual stopwords and synonyms were used based on the global language. Now when indexing posts, the post language is used instead of the global language. + += 4.10.0 = +* New feature: Relevanssi now supports multilingual synonyms and stopwords. Relevanssi now has a different set of synonyms and stopwords for each language. This feature is compatible with WPML and Polylang. +* New feature: SEO by Rank Math compatibility is added: posts marked as 'noindex' with Rank Math are not indexed by Relevanssi. +* Minor fix: With keyword matching set to 'whole words' and the 'expand highlights' disabled, words that ended with an 's' weren't highlighted correctly. +* Minor fix: The 'Post exclusion' setting didn't work correctly. It has been fixed. +* Minor fix: It's now impossible to set negative weights in searching settings. They did not work as expected anyway. +* Minor fix: Relevanssi had an unnecessary index on the `doc` column in the `wp_relevanssi` database table. It is now removed to save space. Thanks to Matthew Wang. +* Minor fix: Improved Oxygen Builder support makes sure `ct_builder_shortcodes` custom field is always indexed. + += 4.9.1 = +* Changed behaviour: The `relevanssi_excerpt_part` filter hook now gets the post ID as a second parameter. The documentation for the filter has been fixed to match actual use: this filter is applied to the excerpt part after the highlighting and the ellipsis have been added. +* Changed behaviour: The `relevanssi_index_custom_fields` filter hook is no longer used when determining which custom fields are used for phrase searching. If you have a use case where this change matters, please contact us. +* Minor fix: The `relevanssi_excerpt` filter hook was removed in 4.9.0. It is now restored and behaves the way it did before. +* Minor fix: Avoids undefined variable warnings from the Pretty Links compatibility code. +* Minor fix: The Oxygen Builder compatibility has been improved. Now shortcodes in Oxygen Builder content are expanded, if that setting is enabled in Relevanssi settings. + += 4.9.0 = +* New feature: There's now a "Debugging" tab in the Relevanssi settings, letting you see how the Relevanssi index sees posts. This is familiar to Premium users, but is now available in the free version as well. +* New feature: The SEO Framework plugin is now supported and posts set excluded from the search in SEO Framework settings will be excluded from the index. +* New feature: There's a new option, "Expand highlights". Enabling it makes Relevanssi expand partial-word highlights to cover the full word. This is useful when doing partial matching and when using a stemmer. +* New feature: New filter hook `relevanssi_excerpt_part` allows you to modify the excerpt parts before they are combined together. This doesn't do much in the free version. +* New feature: Improved compatibility with Oxygen Builder. Relevanssi automatically indexes the Oxygen Builder content and cleans it up. New filter hooks `relevanssi_oxygen_section_filters` and `relevanssi_oxygen_section_content` allow easier filtering of Oxygen content to eg. remove unwanted sections. +* Changed behaviour: The "Uncheck this for non-ASCII highlights" option has been removed. Highlights are now done in a slightly different way that should work in all cases, including for example Cyrillic text, thus this option is no longer necessary. +* Minor fix: Fixes phrase searching using non-US alphabet. +* Minor fix: Relevanssi would break admin searching for hierarchical post types. This is now fixed, Relevanssi won't do that anymore. +* Minor fix: Relevanssi indexing now survives better shortcodes that change the global `$post`. +* Minor fix: Warnings about missing `relevanssi_update_counts` function are now removed. +* Minor fix: Paid Membership Pro support now takes notice of the "filter queries" setting. +* Minor fix: OR logic didn't work correctly when two phrases both had the same word (for example "freedom of speech" and "free speech"). The search would always be an AND search in those cases. That has been fixed. +* Minor fix: Relevanssi no longer blocks the Pretty Links admin page search. +* Minor fix: The "Respect 'exclude_from_search'" setting did not work if no post type parameter was included in the search parameters. +* Minor fix: The category inclusion and exclusion setting checkboxes on the Searching tab didn't work. The setting was saved, but the checkboxes wouldn't appear. + += 4.8.3 = +* New feature: Both `relevanssi_fuzzy_query` and `relevanssi_term_where` now get the current search term as a parameter. +* Minor fix: Relevanssi database tables don't have PRIMARY keys, only UNIQUE keys. In case this is a problem (for example on Digital Ocean servers), deactivate and activate Relevanssi to fix the problem. +* Minor fix: When `posts_per_page` was set to -1, the `max_num_pages` was incorrectly set to the number of posts found. It should, of course, be 1. +* Minor fix: Excluding from logs didn't work if user IDs had spaces between them ('user_a, user_b'). This is now fixed for good, the earlier fix didn't work. + += 4.8.2 = +* New feature: New filter hook `relevanssi_term_where` lets you filter the term WHERE conditional for the search query. +* Minor fix: Doing the document count updates asynchronously caused problems in some cases (eg. importing posts). Now the document count is only updated after a full indexing and once per week. +* Minor fix: Phrase matching has been improved to make it possible to search for phrases that include characters like the ampersand. + += 4.8.1 = +* Major fix: Changes in WooCommerce 4.4.0 broke the Relevanssi searches. This makes the WooCommerce search work again. +* Minor fix: Excluding from logs didn't work if user IDs had spaces between them ('user_a, user_b'). Now the extra spaces don't matter. +* Minor fix: The asynchronous doc count action in the previous version could cause an infinite loop with the Snitch logger plugin. This is prevented now: the async action doesn't run after indexing unless a post is actually indexed. +* Minor fix: Relevanssi indexing procedure was triggered for autosaved drafts, causing possible problems with the asynchronous doc count action. +* Minor fix: The `relevanssi_index_custom_fields` filter hook was not applied when doing phrase matching, thus phrases could not be found when they were in custom fields added with the filter. + += 4.8.0 = +* Changed behaviour: Relevanssi now requires PHP 7. +* Changed behaviour: Relevanssi now sorts strings with `strnatcasecmp()` instead of `strcasecmp()`, leading to a more natural results with strings that include numbers. +* Changed behaviour: Relevanssi init is now moved from priority 10 to priority 1 on the `init` hook to avoid problems with missing TablePress compatibility. +* New feature: New filter hook `relevanssi_get_approved_comments_args` filters the arguments to `get_approved_comments` in comment indexing. This can be used to index custom comment types, for example. +* New feature: Content wrapped in the `noindex` tags is no longer used for excerpts. +* New feature: The `[et_pb_fullwidth_code]` shortcode is now removed completely, including the contents, when Relevanssi is indexing and building excerpts. +* Major fix: Relevanssi didn't index new comments when they were added; when a post was indexed or the whole index rebuilt, comment content was included. We don't know how long this bug has existed, but it is now fixed. Rebuild the index to get all comment content included in the index. +* Minor fix: Autoload has been disabled for several options that are not needed often. +* Minor fix: Phrase matching did not work correctly in visible custom fields. +* Minor fix: TablePress support could cause halting errors if posts were inserted before Relevanssi has loaded itself (on `init` priority 10). These errors will no longer happen. +* Minor fix: The doc count update, which is a heavy task, is now moved to an asynchronous action to avoid slowing down the site for users. +* Minor fix: Relevanssi only updates doc count on `relevanssi_insert_edit()` when the post is indexed. + += 4.7.2 = +* Minor fix: Media Library searches failed if Relevanssi was enabled in the WP admin, but the `attachment` post type wasn't indexed. Relevanssi will no longer block the default Media Library search in these cases. +* Minor fix: Adds more backwards compatibility for the `relevanssi_indexing_restriction` change, there's now an alert on indexing tab if there's a problem. + += 4.7.1 = +* New feature: New filter hook `relevanssi_post_content_after_shortcodes` filters the post content after shortcodes have been processed but before the HTML tags are stripped. +* Minor fix: Adds more backwards compatibility for the `relevanssi_indexing_restriction` change. + += 4.7.0 = +* New feature: New filter hook `relevanssi_admin_search_blocked_post_types` makes it easy to block Relevanssi from searching a specific post type in the admin dashboard. There's built-in support for Reusable Content Blocks `rc_blocks` post type, for example. +* New feature: The reason why a post is not indexed is now stored in the `_relevanssi_noindex_reason` custom field. +* Changed behaviour: The `relevanssi_indexing_restriction` filter hook has a changed format. Instead of a string value, the filter now expects an array with the MySQL query in the index 'mysql' and a reason in string format in 'reason'. There's some temporary backwards compatibility for this. +* Changed behaviour: Relevanssi now applies minimum word length when tokenizing search query terms. +* Changed behaviour: Content stopwords are removed from the search queries when doing excerpts and highlights. When Relevanssi uses the untokenized search terms for excerpt-building, stopwords are removed from those words. This should lead to better excerpts. +* Minor fix: Improves handling of emoji in indexing. If the database supports emoji, they are allowed, otherwise they are encoded. + += 4.6.0 = +* Changed behaviour: Phrases in OR search are now less restrictive. A search for 'foo "bar baz"' used to only return posts with the "bar baz" phrase, but now also posts with just the word 'foo' will be returned. +* Minor fix: User Access Manager showed drafts in search results for all users. This is now fixed. + += 4.5.0 = +* New feature: New filter hook `relevanssi_disable_stopwords` can be used to disable stopwords completely. Just add a filter function that returns `true`. +* Changed behaviour: Stopwords are no longer automatically restored if emptied. It's now possible to empty the stopword list. If you want to restore the stopwords from the file (or from the database, if you're upgrading from an earlier version of Relevanssi and find your stopwords missing), just click the button on the stopwords settings page that restores the stopwords. +* Changed behaviour: Changes to post weights in the `relevanssi_results` hook did not affect the relevance scores shown in excerpts. That's changed now, and the displayed scores are now taken from the `$doc_weight` array, which is returned in the return value array from `relevanssi_search()`. +* Changed behaviour: Excerpt length and type are now checked outside the loop that goes through the posts. This reduces the number of database calls required. +* Minor fix: Searching for regex special characters (for example parentheses, brackets) caused problems in excerpts. +* Minor fix: Improvements in handling highlighting for words with apostrophes. +* Minor fix: Disregard hanging commas at the end of post exclusion settings. +* Minor fix: Sometimes excerpts wouldn't have an ellipsis in the beginning even though they should. + += 4.4.1 = +* Major fix: Returns the missing stopwords. + += 4.4.0 = +* New feature: It's now possible to exclude image attachments from the index with a simple setting on the indexing settings page. +* New feature: Page builder short codes are now removed in Relevanssi indexing. This should reduce the amount of garbage data indexed for posts in Divi, Avada and other page builder themes. +* Changed behaviour: The `relevanssi_page_builder_shortcodes` filter hook is now applied both in indexing and excerpts, and has a second parameter that will inform you of the current context. +* Minor fix: Stopwords weren't case insensitive like they should. They are now. Also, stopwords are no longer stored in the `wp_relevanssi_stopwords` database table, but are now stored in the `relevanssi_stopwords` option. +* Minor fix: A comma at the end of the custom field indexing setting made Relevanssi index all custom fields. This doesn't happen anymore and trailing commas are automatically removed, too. +* Minor fix: Accessibility improvements all around the admin interface. Screen reader support should be better, feel free to report any further ways to make this better. +* Minor fix: Doing searches without search terms and with the throttle disabled could cause problems. Relevanssi now makes sure throttle is always on when doing termless searches. +* Minor fix: Untokenized search terms are used for building excerpts, which makes highlighting in excerpts work better. +* Minor fix: Indexing did not adjust the number of posts indexed at one go like it should. + += 4.3.4 = +* New feature: You can now give Gutenberg blocks a CSS class `relevanssi_noindex` to exclude them from being indexed. Relevanssi will not index Gutenberg blocks that have the class. +* New feature: Relevanssi automatically skips some custom fields from common plugins that only contain unnecessary metadata. +* New feature: The search results breakdown is added to the post objects and can be found in $post->relevanssi_hits. The data also includes new fields and the breakdown from the excerpt settings page can now show author, excerpt, custom field and MySQL column hits. +* New feature: Relevanssi can now index Ninja Tables table content. This is something of an experimental feature right now, feedback is welcome. +* New feature: New filter hook `relevanssi_indexing_query` filters the indexing query and is mostly interesting for debugging reasons. +* Minor fix: Deleted and trashed comment contents were not deindexed when the comment was removed. That has been corrected now. +* Minor fix: Phrase matching is now applied to attachments as well, including the attachments indexed for parent post. +* Minor fix: Phrase matching only looks at custom fields that are indexed by Relevanssi. +* Minor fix: Exact match bonus now uses the original query without synonyms added for the exact match check. +* Minor fix: Paid Membership Pro filtering is only applied to published posts to prevent drafts from showing up in the search results. + += 4.3.3 = +* New feature: New filter hook `relevanssi_indexing_adjust` can be used to stop Relevanssi from adjusting the number of posts indexed at once during the indexing. +* New feature: New filter hook `relevanssi_acf_field_value` filters ACF field values before they are indexed. +* New feature: New filter hook `relevanssi_disabled_shortcodes` filters the array containing shortcodes that are disabled when indexing. +* Removed feature: The `relevanssi_indexing_limit` option wasn't really used anymore, so it has been removed. +* Changed behaviour: Indexing exclusions from Yoast SEO and SEOPress are applied in a different way in the indexing, making for a smoother indexing process. +* Changed behaviour: WP Table Reloaded support has been removed; you really shouldn't be using WP Table Reloaded anymore. +* Minor fix: Relevanssi won't choke on ACF fields with array or object values anymore. +* Minor fix: Relevanssi uninstall process left couple of Relevanssi options in the database. +* Minor fix: WPML language filter didn't work when `fields` was set to `ids` or `id=>parent`. + += 4.3.2 = +* New feature: SEOPress support, posts marked "noindex" in SEOPress are no longer indexed by Relevanssi by default. +* Changed behaviour: Membership plugin compatibility is removed from `relevanssi_default_post_ok` function and has been moved to individual compatibility functions for each supported membership plugin. This makes it much easier to for example disable the membership plugin features if required. +* Minor fix: The `searchform` shortcode now works better with different kinds of search forms. +* Minor fix: Yoast SEO compatibility won't block indexing of posts with explicitly allowed indexing. +* Minor fix: The `relevanssi_the_tags()` function printed out plain text, not HTML code like it should. The function now also accepts the post ID as a parameter. +* Minor fix: Excerpt creation and highlighting have been improved a little. + += 4.3.1.1 = +* Remove notice about undefined index. + += 4.3.1 = +* Adding a missing file. + += 4.3.0 = +* New feature: Multi-phrase searches now respect AND and OR operators. If multiple phrases are included in an OR search, any posts with at least one phrase will be included. In AND search, all phrases must be included. +* New feature: Admin search has been improved: there's a post type dropdown and the search is triggered when you press enter. The debug information has a `div` tag around it with the id `debugging`, so you can hide them with CSS if you want to. The numbering of results also makes more sense. +* New feature: The date parameters (`year`, `monthnum`, `w`, `day`, `hour`, `minute`, `second`, `m`) are now supported. +* New feature: New filter hook `relevanssi_indexing_limit` filters the default number of posts to index (10). If you have issues with indexing timing out, you can try adjusting this to a smaller number like 5 or 1. +* New feature: Support for Paid Membership Pro added. +* New feature: WordPress SEO support, posts marked "noindex" in WordPress SEO are no longer indexed by Relevanssi by default. +* Removed feature: qTranslate is no longer supported. +* Major fix: Tax query searching had some bugs in it, manifesting especially into Polylang not limiting the languages correctly. Some problems with the test suites were found and fixed, and similar problems won't happen again. +* Minor fix: Admin search only shows editing options to users with enough capabilities to use them. +* Minor fix: Phrase searching now uses filterable post statuses instead of a hard-coded set of post statuses. +* Minor fix: The plugin action links were missing on the Plugins page list, they're back now. +* Minor fix: Search terms with slashes won't cause errors anymore. +* Minor fix: Relevanssi admin pages have been examined for accessibility and form labels have been improved in many places. +* Deprecated: `relevanssi_get_term_taxonomy()` function is deprecated and will be removed at some point in the future. + += 4.2.0 = +* New feature: The search form shortcode has a new parameter `dropdown` which can be used to add a category dropdown, like this: `[searchform dropdown="category"]`. +* New feature: Relevanssi can now use the contents of the PDF files indexed with WP File Download. +* New filter: `relevanssi_indexing_tokens` can be used to filter the tokens (individual words) before they are indexed. +* Removed filter: `relevanssi_default_meta_query_relation` did not have any effect anymore. +* Changed behaviour: The default taxonomy relation was set to AND in 4.1.4, but wasn't properly applied before. Now it is really switched. +* Changed behaviour: New post types have been added to list of forbidden post types Relevanssi won't show as indexing options (ACF, TablePress and WooCommerce). +* Major fix: Tax query processing has been completely refactored, eliminating all sorts of bugs, especially with various edge cases. +* Major fix: Gutenberg block indexing only worked with the Gutenberg plugin enabled. It now works with WP 5.0 built-in Gutenberg as well. If you use Gutenberg blocks, reindex to get all the block content in the index. +* Major fix: Excerpt-building and highlighting did not respect the "Keyword matching" setting. They do now, and the excerpts should be better now. +* Major fix: AND searches needed queries that could get too long for the database to handle. This has been fixed and optimized. +* Major fix: Taxonomy term subquery relations didn't work; now they are applied. +* Minor fix: iOS uses curly quotes by default, and that didn't work as a phrase operator. Now phrase operator works with curly quotes and straight quotes. +* Minor fix: The Did you mean broke with search terms longer than 255 characters. +* Minor fix: Phrases with numbers and one word like "team 17" didn't work, because numbers weren't counted as words. + += 4.1.4 = +* `EXISTS` and `NOT EXISTS` didn’t work for taxonomy terms in searches. +* WPML post type handling has been improved. If post type allows fallback for default language, Relevanssi will support that. +* Relevanssi now reminds you to set up automatic trimming for the logs. It’s a really good idea, otherwise the logs will become bloated, which will hurt search performance. +* The Groups posts filter is only applied to public posts to avoid drafts being shown to people who shouldn’t see them. +* The `posts_per_page` query variable didn’t work; it’s now added to the introduced query variables so that it works. +* Relevanssi won’t log empty queries anymore. +* The default tax query relation was switched from `OR` to `AND` to match the WP_Query default behaviour. +* When used with WP 5.1, Relevanssi will now use `wp_insert_site` instead of the now-deprecated `wpmu_new_blog`. +* Multisite blog creation is handled better in WP 5.1+. +* Relevanssi now supports Restrict Content Pro permissions. + += 4.1.3 = +* Improvements to meta key sorting. +* Relevanssi settings page won't let you exclude categories you have restricted the search to. +* Members plugin compatibility has been improved: it's only used if the 'content permissions' feature has been enabled. +* The excerpt settings page was a bit buggy. +* Slimstat analytics is now added to the blocked shortcodes list. +* New filter: `relevanssi_search_form` works exactly like `get_search_form`, but only applies to the Relevanssi shortcode search forms. +* New JetPack taxonomies and post types have been added to the block list so they won't appear in Relevanssi settings. + += 4.1.2 = +* Choosing "CSS Style" for highlighting was not possible. That is now fixed. +* Gutenberg reusable block indexing was fatally broken with the latest Gutenberg version. That has been updated. +* Relevanssi now by default respects the WooCommerce "exclude from search" setting. +* `post__not_in` still didn't work properly, it does now. +* New filter: `relevanssi_comparison_order` can be used to define the sorting order when sorting the results by post type. +* "Did you mean" process included a very slow query. It is now cached, leading in some cases to massive performance improvements (we're talking about several seconds here). +* Highlights inside `code` and similar blocks are handled better now. + += 4.1.1.2 = +* Fixes the broken User searches page. + += 4.1.1.1 = +* Adding the missing Gutenberg compatibility file. + += 4.1.1 = +* Relevanssi can now index Gutenberg reusable blocks. (This functionality broke once already before release, so that can happen, since Gutenberg is still in very active development.) +* The `post__in` and `post__not_in` parameters didn't work, and are now fixed. `post_parent__in` and `post_parent__not_in` are also improved. +* You can use named meta queries for sorting posts. Meta query sorting is improved in other ways as well. +* Log export didn't work properly. +* Adding stopwords from the common word list has been fixed. +* The `relevanssi_get_words_having` filter hook is now also applied to the free version Did you mean queries. +* New filters: `relevanssi_1day` and `relevanssi_7days` can be used to adjust the number of days for log displays, so instead of 1, 7 and 30 days you can have anything you want. + += 4.1.0.1 = +* Actually working admin search. + += 4.1 = +* New feature: You can now export the search log as a CSV file. +* New feature: Admin Search page allows you to perform searches in WP admin using Relevanssi. +* New filter: `relevanssi_admin_search_capability` can be used to adjust who sees the admin search page. +* New filter: `relevanssi_entities_inside_pre` and `relevanssi_entities_inside_code` adjust how HTML entities are handled inside `pre` and `code` tags. +* Numeric meta values (`meta_value_num`) are now sorted as numbers and not strings. +* Pinned posts have `$post->relevanssi_pinned` set to 1 for debugging purposes, but you can also use this for styling the posts in the search results templates. +* The Did you mean feature has been toned down a bit, to make the suggestions slightly less weird in some cases. +* Post parent parameters now accept 0 as a value, making it easier to search for children of any post or posts without a parent. +* Polylang compatibility has been improved. +* Phrases with apostrophes inside work better. +* The `relevanssi_excerpt` filter hook got a second parameter that holds the post ID. +* Custom field sorting actually works now. +* WP Search Suggest compatibility added. + += 4.0.11 = +* Home page links were getting the highlight parameter even though they shouldn't. This has been fixed. +* Added support for WP JV Post Reading Groups. +* Improved handling of HTML entities. +* Events Made Easy Calendar shortcodes are now removed when building excerpts. +* `set_time_limit()` was removed from the indexing; it's no longer necessary, and it can break the indexing on sites that don't allow the use of the function. +* `relevanssi_post_title_before_tokenize` filter was moved a bit so that it's the last thing that runs before tokenizing. +* Disabled shortcodes are handled better in the indexing: the shortcode names won't be indexed anymore like they were before. +* Made sure there won't be a warning for non-numeric values when searching. +* New filter: `relevanssi_clean_excerpt` lets you remove unwanted highlights from excerpts. +* Highlighting works better with `pre` and `code` tags. +* New filter: `relevanssi_comment_author_to_index` lets you filter comment author names before indexing. +* `relevanssi_comment_content_to_index` doesn't include the comment author name anymore. + += 4.0.10.1 = +* The privacy features caused an error notice with certain Relevanssi configurations, and the plugin required WP 4.9.6. + += 4.0.10 = +* Privacy: If you log search queries, Relevanssi will suggest some additional content to your privacy policy page. +* Privacy: Relevanssi now supports the new Privacy Policy and Personal Data tools in WordPress 4.9.6. +* Saving synonyms with quotes worked, but the synonyms showed up wrong. +* Relevanssi could in some situations override navigation menu links with links to the user profiles or taxonomy terms found in the search. This update fixes that behaviour. +* Random order works again; using orderby `rand` didn't work properly. The `rand(seed)` format is also supported now. +* Fixed quotes and apostrophes in Did you mean suggestions. + += 4.0.9 = +* Fixes broken tag and category indexing and searching. If you use tags and categories, rebuild the index after updating. +* Phrases were not highlighted correctly on documents. This is now fixed. +* Shortcode fix: 'wp_show_posts' shouldn't cause problems anymore. +* New filter: `relevanssi_indexing_restriction` allows filtering posts before indexing. +* New WooCommerce product visibility filtering tool makes WooCommerce product indexing faster. +* MemberPress post controls were loose and showed drafts to searchers. That is now fixed. +* Highlighting was too loose, even if matching was set to whole words. +* Highlighting now works better in cases where there's a hyphen or an apostrophe inside a word. + += 4.0.8 = +* Fixed cases where Relevanssi added an ellipsis even if the excerpt was from the start of the post. +* Highlighting now works with numeric search strings. +* Improved highlighting for accented words. Thanks to Paul Ryan. +* A surplus comma at the end of post exclusion setting won't break the search anymore. +* Fixed instructions for adjusting the throttle limit. + += 4.0.7 = +* Recent post bonus is now applied to searches. +* Exact term setting can now be disabled. +* Users of Members plugin would have drafts appear in search results. This is now fixed. + += 4.0.6 = +* Indexing bugs squashed. +* Missing tag and category weight settings returned. +* Fusion builder shortcodes are removed from excerpts. +* MemberPress post control was backwards. +* User searches page reset buttons fixed. +* WPML language filter fix. + += 4.0.4 = +* Fixed shortcode: `searchform` shortcode didn't work properly. +* Setting post type or post content weight to 0 didn't work. +* Gravity Forms shortcode is now disabled in Relevanssi indexing. +* New filter: `relevanssi_excerpt_query` filters the search query before building excerpts. +* HTML tags are stripped from post excerpts when using the excerpt to build Relevanssi excerpts. +* Fixed filter: `relevanssi_custom_field_value` didn't have the correct post ID parameter. +* `relevanssi_get_permalink` doesn't add the `highlight` parameter to URLs outside search results pages anymore, and won't add the parameter to front page links either. +* Relevanssi used `sanitize_hex_color`, which isn't actually reliably available. +* Did you mean suggestions have been improved. +* Single-word phrases are not allowed anymore, as they do no good. They are silently converted to non-phrases now. + += 4.0.3 = +* Relevanssi didn't index all posts with one go. It does now. +* © and ® symbols caused problems in indexing; they are now included in the default punctuation removal. +* In some cases excerpt-building could take ages because of autoembed link discovery. Relevanssi now blocks the autoembed procedure in link-building. +* New filter: `relevanssi_custom_field_value` is used to filter custom field values both before indexing and before excerpt-building. Parameters include the field name and the post ID. +* Updated filter: `relevanssi_index_custom_fields` now gets a second parameter that contains the post ID. + += 4.0.2 = +* Removed couple of error notices in the code. +* Improved the support for page builders. +* Improvements to the Polylang setting. + += 4.0.1 = +* The plugin can now be uninstalled. + += 4.0 = +* Legacy code has been removed. If you have a version older than 3.6, update first to 3.6.2.2 to guarantee smooth upgrade process. +* Improved indexing: no more clicking "Continue indexing" again and again! +* Settings pages have been completely rewritten. +* There's documentation in the WordPress contextual help: just click Help on the top right corner. +* Better Polylang support. A new option to remove the Polylang language filter. +* Logs can be automatically trimmed. Old log entries are removed to save space. +* Finally a setting to adjust content weight! +* Excerpts can use the custom field content. +* Highlighting in documents is changed: it now requires a `highlight` query parameter. This helps getting pass caching and makes the highlighting more reliable. To get the query parameter active, use `relevanssi_get_permalink()` to print out the permalinks on the search results templates. +* Relevanssi added synonyms to highlighting even if synonyms were not used for searching. In some cases, synonyms were added twice. +* The User Searches page got a makeover, too. +* Relevanssi is automatically disabled in REST API searches. +* Groups and Simple Membership support has been improved. +* Sorting search results is now up to 300 times faster than before. +* Lots of improvements all over the place. +* New filter: `relevanssi_excerpt_custom_field_content` lets you modify custom field content that is used for excerpts. +* New filter: `relevanssi_punctuation_filter` allows for easy modification of punctuation handling. +* New filter: `relevanssi_default_punctuation_replacement` changes the default way to handle the rest of the punctuation. +* New filter: `relevanssi_search_again` lets you run the search again if no results are found and to modify the parameters between search runs. +* New filter: `relevanssi_fallback` allows you to do fallback searches. +* New filter: `relevanssi_page_builder_shortcodes` lets you control which page builder shortcodes Relevanssi removes before building the excerpts. +* New filter: `relevanssi_optimize_excerpts` makes excerpt-building faster, if you make the filter return `true`. + += 3.6.2.2 = +* A bug in post sorting broke string sorting (mostly post title sorting). + += 3.6.2.1 = +* A bug was left in the post ordering code. That bug is now squashed. + += 3.6.2 = +* Simple Membership plugin is now supported automatically to restrict access to posts. +* Relevanssi can now handle orderby parameter in array format. +* Relevanssi now blocks Easy Digital Downloads shortcodes when indexing to improve compatibility with EDD. +* When using `fields` to only fetch post IDs, Relevanssi doesn't try to highlight post titles. +* New action: `relevanssi_update_options` lets you adjust Relevanssi options immediately after the defaults are set. +* Remove notices about duplicated database columns when installing the plugin. + += 3.6.1 = +* SECURITY: This version fixes a SQL injection vulnerability, where a site admin could theoretically inject SQL code into Relevanssi search queries. Doing this required access to Relevanssi settings page and in my tests, I couldn't do any damage, just break the Relevanssi search, but in any case, this vulnerability is now fixed. +* Search and Filter shortcode is added to the blacklist. +* Groups plugin is now supported automatically to restrict access to posts. +* The filter `relevanssi_index_custom_fields` now works even if the custom field setting is empty. +* The filter `relevanssi_post_to_index` now has a second parameter. For posts, it simply repeats the post object, but for taxonomy terms, it has the term object. + += 3.6.0 = +* Changed a bit how Relevanssi attaches itself to queries. Instead of the global $wp_query, Relevanssi now uses the query passed as the parameter to `the_posts` filter hook. This should improve compatibility in some cases, but may cause problems in some fringe cases. If you're doing something unusual with Relevanssi, try this out before deploying to public use. +* Some meta queries caused major problems with the Relevanssi weighting algorithm. This has now been fixed. +* Error notices caused by trying to use a non-existing taxonomy term have been removed. + += 3.5.12 = +* Post type exclusion didn't work as expected. +* Relevanssi couldn't handle nested tax queries (such as those generated by WooCommerce product visibility filtering) properly. + += 3.5.11.1 = +* New filter: `relevanssi_allow_one_letter_highlights` lets you allow one-letter highlights. Just make the filter function return `true`. +* New filter: `relevanssi_block_one_letter_searches` by default blocks one-letter searches. If you want to enable them, add a filter function that always returns `false`. +* Fixed an undefined variable notice. + += 3.5.11 = +* Synonym indexing failed if synonyms contained a forward slash. +* Highlighting HTML tags has been improved further. +* New filter: `relevanssi_tag_before_tokenize` allows you to access tag content before indexing. +* Relevanssi now actively blocks one-letter search terms, as they are generally pointless and can cause "out of memory" issues. One-letter search terms are no longer highlighted, either. These are usually caused by cases like "word's" being interpreted as "word s". +* New filter: `relevanssi_disable_shortcodes_excerpt` lets you add more shortcodes to be disabled before excerpts are built. + += 3.5.10 = +* Some users got a fatal parse error. That shouldn't happen anymore. +* FacetWP users ran into trouble, as `relevanssi_do_query()` started to explicitly expect a WP_Query object in version 1.15.0. That expectation is removed; it's still highly recommended for future compatibility that you use WP_Query objects. +* Small bug fix: `get_current_screen()` is now only used when it's available to avoid occasional fatal errors. +* Error messages from `DOING_AJAX` being undefined should be removed. + += 3.5.9.1 = +* WP.org plugin repo didn't like 3.5.9 for some reason, hoping to have better luck with this. + += 3.5.9 = +* Improved the way highlighting handles HTML tags, especially when highlighting on post pages. +* The throttle limit setting was removed from the settings page for causing trouble. If you need to change it, update `relevanssi_throttle_limit` option directly. +* Relevanssi didn't support tax_queries with `field` set to `name`. That works now. +* Much faster way of showing the 25 most common words in the index. If you've disabled this feature because it was so slow, try enabling it - you might be surprised! + += 3.5.8 = +* Did you mean function had a XSS vulnerability, which is now removed. +* Minimum word length wasn't applied to titles in indexing. It is now fixed. If you think this is a problem, rebuild the index. +* TablePress compatibility has been improved. +* Meta query handling has been improved, thanks to Maxime Culea. +* Improved WP_Query parameter support: setting query variable `sentence` to 1 forces phrase search. +* Improved ACF compatibility. + += 3.5.7.1 = +* Small fix for a bug that broke the settings page. + += 3.5.7 = +* An improved version of the sorting function will not throw notices when Intuitive Custom Post Order plugin is used. +* New filter: `relevanssi_missing_sort_key` can be used to adjust the result sorting when using keys that are not present in all posts (eg. menu_order). +* Czech translation and stopwords, thanks to Michael Kucera. +* Relevanssi broke the WP admin menu search when admin searches were enabled. +* Relevanssi broke the admin page search under WP 4.7. Relevanssi is now disabled in admin page searches. +* The way accented characters are handled in highlighting is improved. A new filter, `relevanssi_accents_replacement_arrays`, can be used to adjust the accent replacement. + += 3.5.6.1 = +* Fix for a fatal bug in 3.5.6. + += 3.5.6 = +* Relevanssi admin page had a vulnerability that allowed SQL injection attacks. That is now fixed. +* Relevanssi didn't like to highlight search terms that are followed by a ?, an ! or an apostrophe. +* New filter: `relevanssi_ok_to_log` lets you control whether search queries are logged or not. + += 3.5.5 = +* 500 errors caused by arrays in custom fields should be gone now. +* Improvements to the ACF "select" field support. +* Relevanssi will not break when frontend plugins insert posts. +* `relevanssi_match` filter has a new parameter, which contains the search term. +* Polylang support has been improved. +* WPML and Polylang filters work when "fields" is set to "ids". +* New filter: `relevanssi_log_get_user` gets passed the user object before Relevanssi decides if the query should be logged or not. + += 3.5.4 = +* Relevanssi had a bug that lead to inflated relevancy scores for posts. +* Relevanssi can now index the human-readable labels of ACF "select" fields. (Thanks to Raphaël Droz.) +* New filter: `relevanssi_30days` can be used to adjust the 30 day logs to a different number of days. +* Adding stopwords that contain apostrophes didn't work. +* Ensured PHP7 and WP 4.6 compatibility. +* Fixed a small glitch that could happen if a highlighted term is next to a starting square bracket. + += 3.5.3 = +* New filter `relevanssi_user_searches_limit` to adjust the number of user searches shown in the logs. +* Old data check is only done on Relevanssi settings page, not on all admin pages. That should improve admin performance. +* Fixed a fatal error when searching includes private posts. +* New filter: `relevanssi_remote_addr` can be used to modify the IP address logged to Relevanssi logs. +* Blocked CFDB and WooCommerce shortcodes that are causing problems with Relevanssi. + += 3.5.2 = +* Added correct support for `term_taxonomy_id` in the `fields` parameter in tax_queries. + += 3.5.1 = +* Fixed an error in the Did you mean function. +* Fixed an error if the search term was not found in content. +* Fixed an error when building excerpts from posts shorter than the excerpt length. +* Blocked the `[starpro]` shortcode that was causing problems with Relevanssi. +* New filter: `relevanssi_remove_stopwords_in_titles` allows you to include stopwords in titles. +* Added support for `term_tax_id` in the `fields` parameter in tax_queries. +* Excerpt-building failed if multibyte string operations were missing. It should work now. + += 3.5 = +* Tokenizer was using `strlen()` and not `mb_strlen()`, so word lengths were not calculated properly. If your site uses non-ASCII alphabet, rebuilding the index is a good idea. +* Small improvement to WPML multilanguage filtering. +* `relevanssi_the_title()` got a new parameter: if you don't want to echo the title, you can use it like `relevanssi_the_title(false)` to make it return the title. +* Relevanssi had `the_title` filter hook calls that were missing the second parameter; that's now fixed. +* The excerpt-building algorithm is completely rewritten based on work by Ben Boyter (http://www.boyter.org/). +* The `[watupro]` shortcode didn't work with Relevanssi, so Relevanssi will now bypass it. +* The plugin i18n features have been improved slightly. +* New filter: `relevanssi_didyoumean_suggestion` lets you modify the Did you mean? suggestion before it's displayed. +* `relevanssi_didyoumean()` has a new parameter: you can now choose whether the result is echoed out (the default value) or just returned. +* In the search results breakdown, you can now use %categories% and %taxonomies% to show the number of matches in categories and taxonomies other than tags and cats, respectively. +* Relevanssi supports `fields` parameter (both `ids` and `id=>parent`) to return only post IDs or post IDs and post parents. + += 3.4.2 = +* Empty lines on synonym settings caused problems. Fixed that. +* In WordPress 4.2 installations, emoji in will be handled better. Emoji in posts may cause problems with WordPress versions below 4.2, so please update! + += 3.4.1 = +* Removed a notice about an undefined variable. + += 3.4 = +* New filter: `relevanssi_valid_admin_status` can be used to adjust post statuses that Relevanssi will handle. +* If Relevanssi creates an empty excerpt for a post and there's a user-set excerpt for the post, that excerpt is used. +* No ellipsis is added to the post excerpt, if the post excerpt shows the whole post. +* The `relevanssi_post_title_before_tokenize` filter now has a second parameter that contains the post object. +* New filter: `relevanssi_display_common_words` can be used to disable the "25 most common words" listing on the settings page, if it's too heavy to load. +* Relevanssi was sanitizing taxonomy titles too aggressively. That is now toned down a bit. +* Relevanssi now supports `post_parent`, `post_parent__in` and `post_parent__not_in`, though you have to set them in `relevanssi_modify_wp_query` filter for them to work. +* Meta query support should now be perfect; there were some limitations with complicated meta queries before. + += 3.3.8 = +* Fixed a bug that caused the results to change depending of the order of words in a multi-word search query. +* Added `product_categories` and `recent_products` from WooCommerce to the list of blocked shortcodes. +* There are improvements in excerpt-building and highlighting, especially when fuzzy search is enabled. +* Fixed a possible (if quite unlikely) XSS vulnerability. +* Improved search performance (thanks to MikeNGarrett). +* Sometimes highlights in documents make the document content disappear. I don't know why, but I've added a fix that should make the content visible (without the highlights) if a problem appears. + += 3.3.7.1 = +* Fixed bbPress compatibility. + += 3.3.7 = +* Fixed bbPress compatibility. + += 3.3.6 = +* Relevanssi handles taxonomy terms in search better. The change requires a reindexing. +* Fix in indexing: Relevanssi will now bypass the global $post when indexing. This should help with problems with the Cookie Law Info plugin, for example. +* Tax query relation setting didn't work properly. It is now fixed. +* Word-based excerpt building sometimes created too short excerpts. That is now fixed. +* Synonyms are now highlighted. +* Phrase matching had issues where searching for a too common phrase crashed the search. That has been fixed. +* LIKE operator didn't work properly in meta_queries. +* Problems with Avatar Upload plugin are fixed. +* Offset errors with mb_stripos() shouldn't happen anymore. +* A small problem in taxonomy search MySQL fixed, also a small problem with AND operator in tax_queries. +* New filter: `relevanssi_post_to_index` lets you access the post object before the post is indexed. +* New filter: `relevanssi_orderby` lets you modify the $orderby value before Relevanssi sorts posts. +* New filter: `relevanssi_order` lets you modify the $order value before Relevanssi sorts posts. +* New filter: `relevanssi_post_title_before_tokenize` lets you modify post titles before indexing. +* New filter: `relevanssi_private_cap` lets you adjust the capability setting for private posts in custom post types. +* Deprecated use of `like_escape` has been fixed. + += 3.3.5 = +* Fixed a bug where excluding posts would cause the search to fail. +* Fixed a bug causing duplicate search results in WPML searches. +* Increased plugin safety against hackers. +* There was a bug in `relevanssi_comment_content_to_index` filter. +* Some people had problems with the log entry timestamps. Fixed that. +* New filter: `relevanssi_prevent_default_request` gives you more control over where Relevanssi prevents the default query from running. +* New filter: `relevanssi_private_cap` lets you set the correct capability for finding private posts in custom post types. +* The option to exclude categories and tags from search only worked for categories, not tags. Tags have been separated to a different option. + += 3.3.4 = +* Couple of bug fixes. + += 3.3.3 = +* OR fallback had problems. +* Indexing sub pages didn't work. +* Relevanssi now automatically treats 'ß' as 'ss'. If your site has 'ß' in text, reindexing the database is a good idea. +* Query variable `post_status` is now supported. + += 3.3.2 = +* Fixed a warning on search results page. + += 3.3.1 = +* Fixed bugs related to the removal of the cache feature. + += 3.3 = +* Improvements to excerpts: excerpts with phrases work much better now, and the excerpt creation logic has been improved: the excerpts are now better. The process takes a bit more time, though. +* Allowing HTML tags in excerpts could lead to those tags being left open. Relevanssi will now try to close open HTML tags in excerpts. +* Allowed tags were not controlled in comments. They are now. +* Highlighting in documents didn't always work; it should be more reliable now. +* Non-integer values are removed from `post__in` and `post__not_in` before processing them. +* Query variables `p` and `page_id` are now supported. +* Relevanssi now understands `date_query` variables as well. +* The original post excerpt is stored in $post->original_excerpt. +* Taxonomy search works better with term id parameters (for example from `wp_category_dropdown`). +* Errors about $wpdb->prepare() missing an argument removed. +* New functions: `relevanssi_the_title()` and `relevanssi_get_the_title()` can be used to display highlighted titles in search results. +* The old title highlighting method has been disabled, because it caused highlights in wrong places. Now the highlighted title is stored in $post->highlighted_post_title, take it from there or use the Relevanssi title functions to display it. +* Polylang and WPML support was adjusted to perform better in edge cases. +* Indexing is faster, thanks to some improved code from Tom Novelli. +* MySQL injection attack vulnerability removed. +* The cache feature is now removed. Relevanssi should automatically drop the cache tables. +* New filter: `relevanssi_indexing_data` lets you modify the data before it's indexed. + += 3.2 = +* Fixed a bug in the TablePress support. +* Titles are put through the_title filter before indexing. +* New filter: `relevanssi_join` can be used to join tables in the Relevanssi search MySQL queries. Thanks to Ninos Ego. +* New filter: `relevanssi_post_content` can be used to modify post content before any Relevanssi processing. +* New filter: `relevanssi_post_content_before_tokenize` can be used to modify post content just before it's tokenized. +* New filter: `relevanssi_indexing_values` can be used to modify what Relevanssi stores in the index. +* New filter: `relevanssi_default_meta_query_relation` can be used to change the default meta query relation (default value is "AND"). +* When using a meta_query, `relation` can be set to OR now. +* Phrases are now matched to excerpts. +* Number of queries Relevanssi generates is much, much lower. +* New filter: `relevanssi_didyoumean_url` lets you modify the URL generated by the did you mean feature. +* Better set of Russian stopwords. +* Relevanssi now highlights search query synonyms as well in documents. + += 3.1.9 = +* Fix to make Relevanssi compatible with WordPress 3.7. +* Fixed a mistyped database table name. +* Relevanssi disables responsive-flipbook shortcode in indexing; it was causing problems. +* Fixed a problem with an author dropdown with no author selected. + += 3.1.8 = +* Category restriction and exclusion and couple of other category-related settings didn't work properly. +* Support for Polylang broke the support for WPML. That is now fixed. +* One deprecated `$wpdb->escape()` was still left; it's gone now. +* Shortcode `layerslider` was causing problems with Relevanssi; Relevanssi now disables it before building excerpts. +* Relevanssi won't break BBPress search anymore. +* If Relevanssi Premium is installed, deleting Relevanssi will not remove the databases and the options. + += 3.1.7 = +* New filter: `relevanssi_comment_content_to_index` lets you modify comment content before it's indexed by Relevanssi (to index comment meta, for example). +* Facetious support: if post_type is set to -1, Relevanssi will not hang up on it. +* Numerical search terms work better now. +* Excerpt-building had issues, which are now fixed. +* Punctuation removal now replaces   with a space. +* "starrater" short code from GD Star Rating is now disabled in indexing. +* Punctuation removal now replaces invisible spaces with a normal space. +* Division by zero error caused by 0 in posts_per_page is now prevented, and -1 value for posts_per_page handled better. +* Relevanssi doesn't apply `get_the_excerpt` filters to excerpts it builds any more. +* New filter: `relevanssi_excerpt` lets you modify the excerpts Relevanssi creates. +* Relevanssi now suspends WP post cache while indexing, making indexing a lot more efficient. Thanks to Julien Mession for this one. +* Deprecated function errors in 3.6 removed. +* When search included user profiles or taxonomy terms, Relevanssi would generate lots of MySQL errors. Not anymore. +* New filter: `relevanssi_valid_status` lets you modify the post statuses Relevanssi indexes. +* New filter: `relevanssi_index_taxonomies_args` lets you modify the arguments passed to get_terms() when indexing taxonomies (for example to set 'hide_empty' to false). +* Searching by taxonomy ID could confuse two taxonomies with the same term_id. The search is now checking the taxonomy as well to see it's correct. +* Basic support for Polylang plugin. +* Russian and Italian stopwords are now included, thanks to Flector and Valerio Vendrame. +* Small fix in the way user meta fields are handled. + += 3.1.6 = +* DEACTIVATE AND ACTIVATE THE PLUGIN AFTER YOU UPDATE. +* Fuzzy searches are now a lot more efficient; they were a huge resource hog before. +* Fixed a possible MySQL injection attack. +* Fixed MySQL errors from empty meta queries. +* Sort order (orderby and order variables) are now read from query variables instead of global variables. +* Relevanssi will not choke on bad values of orderby anymore. +* Limit searches is improved: when using AND search it is less likely to miss results. +* Phrase recognition read the whole post content (which it didn't need) from database, causing memory issues in some cases. Fixed that. +* Highlighting was broken, and should work much better now. + += 3.1.5 = +* OR fallback didn't actually fall back to OR, but instead got stuck in an endless loop of AND searches. +* Meta queries didn't work without a key; now they work with just meta_value or meta_value_num. +* Meta queries had problems with meta_value being set to null. +* Relevanssi now supports category__and. By default this sets include_children to false. +* When querying by slug, the term taxonomy is also taken into consideration, fixing problems when same slug appears in different taxonomies. +* Author search didn't work. +* Fixed an error message caused by all-number synonyms starting with zero, like 02. +* Synonyms are now case-insensitive. +* New filter: `relevanssi_default_tax_query_relation` can be used to change the default tax query relation from OR to AND. +* Fixed undefined variable errors when doing an OR fallback. +* New filter: `relevanssi_bots_to_not_log` makes it possible to block bots from logs. The format matches what other plugins, ie. WP-Useronline, use for bot blocking, so you can share block lists. +* New filter: `relevanssi_admin_search_ok` gives you more control when Relevanssi overrides the default WP search in admin, useful for fixing P2P_Box AJAX search. +* Ordering search results by title or date in admin search works now. +* Modified the way the highlights work; now highlighting words with apostrophes should produce more meaningful results. +* Highlighting should not highlight anything between & and ; or in @siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@@siu', + ), + ' ', + $text + ); + return $text; +} + +/** + * Strips tags from contents, keeping the allowed tags. + * + * The allowable tags are read from the relevanssi_excerpt_allowable_tags + * option. Relevanssi also adds extra spaces after some tags to make sure words + * are not stuck together after the tags are removed. The function also removes + * invisible content. + * + * @uses relevanssi_strip_invisibles() Used to remove scripts and other tags. + * @see strip_tags() Used to remove tags. + * + * @param string|null $content The content. + * + * @return string The content without tags. + */ +function relevanssi_strip_tags( $content ) { + if ( ! is_string( $content ) ) { + $content = strval( $content ); + } + $content = relevanssi_strip_invisibles( $content ); + + $space_tags = array( + '/(<\/?p.*?>)/', + '/(<\/?br.*?>)/', + '/(<\/?h[1-6].*?>)/', + '/(<\/?div.*?>)/', + '/(<\/?blockquote.*?>)/', + '/(<\/?hr.*?>)/', + '/(<\/?li.*?>)/', + '/()/', + '/(<\/td>)/', + ); + + $content = preg_replace( $space_tags, '$1 ', $content ); + return strip_tags( + $content, + get_option( 'relevanssi_excerpt_allowable_tags', '' ) + ); +} + +/** + * Returns the position of substring in the string. + * + * Uses mb_stripos() if possible, falls back to mb_strpos() and mb_strtoupper() + * if that cannot be found, and falls back to just strpos() if even that is not + * possible. + * + * @param string $haystack String where to look. + * @param string $needle The string to look for. + * @param int $offset Where to start, default 0. + * + * @return mixed False, if no result or $offset outside the length of $haystack, + * otherwise the position (which can be non-false 0!). + */ +function relevanssi_stripos( $haystack, $needle, int $offset = 0 ) { + if ( ! is_string( $haystack ) ) { + $haystack = strval( $haystack ); + } + if ( ! is_string( $needle ) ) { + $needle = strval( $needle ); + } + if ( $offset > relevanssi_strlen( $haystack ) ) { + return false; + } + + if ( preg_match( '/[\?\*]/', $needle ) ) { + // There's a ? or an * in the string, which means it's a wildcard search + // query (a Premium feature) and requires some extra steps. + $needle_regex = str_replace( + array( '?', '*' ), + array( '.', '.*' ), + preg_quote( $needle, '/' ) + ); + $pos_found = false; + while ( ! $pos_found ) { + preg_match( + "/$needle_regex/i", + $haystack, + $matches, + PREG_OFFSET_CAPTURE, + $offset + ); + /** + * This trickery is necessary, because PREG_OFFSET_CAPTURE gives + * wrong offsets for multibyte strings. The mb_strlen() gives the + * correct offset, the rest of this is because the $offset received + * as a parameter can be before the first $position, leading to an + * infinite loop. + */ + $pos = isset( $matches[0][1] ) + ? mb_strlen( substr( $haystack, 0, $matches[0][1] ) ) + : false; + if ( $pos && $pos > $offset ) { + $pos_found = true; + } elseif ( $pos ) { + ++$offset; + } else { + $pos_found = true; + } + } + } elseif ( function_exists( 'mb_stripos' ) ) { + if ( '' === $haystack ) { + $pos = false; + } else { + $pos = mb_stripos( $haystack, $needle, $offset ); + } + } elseif ( function_exists( 'mb_strpos' ) && function_exists( 'mb_strtoupper' ) && function_exists( 'mb_substr' ) ) { + $pos = mb_strpos( + mb_strtoupper( $haystack ), + mb_strtoupper( $needle ), + $offset + ); + } else { + $pos = strpos( strtoupper( $haystack ), strtoupper( $needle ), $offset ); + } + return $pos; +} + +/** + * Returns the length of the string. + * + * Uses mb_strlen() if available, otherwise falls back to strlen(). + * + * @param string $s The string to measure. + * + * @return int The length of the string. + */ +function relevanssi_strlen( $s ) { + if ( ! is_string( $s ) ) { + $s = strval( $s ); + } + if ( function_exists( 'mb_strlen' ) ) { + return mb_strlen( $s ); + } + return strlen( $s ); +} + +/** + * Multibyte friendly strtolower. + * + * If multibyte string functions are available, returns mb_strtolower() and + * falls back to strtolower() if multibyte functions are not available. + * + * @param string $str The string to lowercase. + * + * @return string $str The string in lowercase. + */ +function relevanssi_strtolower( $str ) { + if ( ! is_string( $str ) ) { + $str = strval( $str ); + } + if ( ! function_exists( 'mb_strtolower' ) ) { + return strtolower( $str ); + } else { + return mb_strtolower( $str ); + } +} + +/** + * Multibyte friendly substr. + * + * If multibyte string functions are available, returns mb_substr() and falls + * back to substr() if multibyte functions are not available. + * + * @param string $str The source string. + * @param int $start If start is non-negative, the returned string will + * start at the start'th position in str, counting from zero. If start is + * negative, the returned string will start at the start'th character from the + * end of string. + * @param int|null $length Maximum number of characters to use from string. If + * omitted or null is passed, extract all characters to the end of the string. + * + * @return string $str The string in lowercase. + */ +function relevanssi_substr( $str, int $start, $length = null ) { + if ( ! is_string( $str ) ) { + $str = strval( $str ); + } + if ( ! function_exists( 'mb_substr' ) ) { + return substr( $str, $start, $length ); + } else { + return mb_substr( $str, $start, $length ); + } +} + +/** + * Prints out the post excerpt. + * + * Prints out the post excerpt from $post->post_excerpt, unless the post is + * protected. Only works in the Loop. + * + * @see post_password_required() Used to check for password requirements. + * + * @global $post The global post object. + */ +function relevanssi_the_excerpt() { + global $post; + if ( ! post_password_required( $post ) ) { + echo '

' . $post->post_excerpt . '

'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } else { + esc_html_e( 'There is no excerpt because this is a protected post.', 'relevanssi' ); + } +} + +/** + * Echoes out the permalink to the current post within Loop. + * + * Uses get_permalink() to get the permalink, then adds the 'highlight' + * parameter if necessary using relevanssi_add_highlight(), then echoes it out. + * + * @param int|WP_Post $post Post ID or post object. Default is the global $post. + * + * @uses relevanssi_get_permalink() Fetches the current post permalink. + */ +function relevanssi_the_permalink( $post = 0 ) { + echo esc_url( relevanssi_get_permalink( $post ) ); +} + +/** + * Prints out a list of tags for post. + * + * Replacement for the_tags() that does the same, but applies Relevanssi search term + * highlighting on the results. + * + * @param string $before What is printed before the tags, default ''. + * @param string $separator The separator between items, default ', '. + * @param string $after What is printed after the tags, default ''. + * @param boolean $echoed If true, echo, otherwise return the result. Default true. + * @param int $post_id The post ID. Default current post ID (in the Loop). + */ +function relevanssi_the_tags( string $before = '', string $separator = ', ', string $after = '', bool $echoed = true, int $post_id = 0 ) { + $tag_list = get_the_tag_list( $before, $separator, $after, $post_id ); + $found = preg_match_all( '~~', $tag_list, $matches ); + if ( $found ) { + $originals = $matches[0]; + $tag_names = $matches[1]; + $highlighted = array(); + + $count = count( $matches[0] ); + for ( $i = 0; $i < $count; $i++ ) { + $highlighted_tag_name = relevanssi_highlight_terms( $tag_names[ $i ], get_search_query(), true ); + $highlighted[ $i ] = str_replace( '>' . $tag_names[ $i ] . '<', '>' . $highlighted_tag_name . '<', $originals[ $i ] ); + } + + $tag_list = str_replace( $originals, $highlighted, $tag_list ); + } + + if ( $echoed ) { + echo $tag_list; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } else { + return $tag_list; + } +} + +/** + * Prints out post title with highlighting. + * + * Uses the global $post object. Reads the highlighted title from + * $post->post_highlighted_title. This used to accept one parameter, the + * `$echo` boolean, but in 2.12.3 / 4.10.3 the function signature was matched + * to copy `the_title()` function in WordPress core. The original behaviour is + * still supported: `relevanssi_the_title()` without arguments works exactly as + * before and `relevanssi_the_title( false )` returns the title. + * + * @global object $post The global post object. + * + * @param boolean|string $before Markup to prepend to the title. Can also be a + * boolean for whether to echo or return the title. + * @param string $after Markup to append to the title. + * @param boolean $echoed Whether to echo or return the title. Default + * true for echo. + * + * @return void|string Void if $echoed argument is true, current post title with + * highlights if $echoed is false. + */ +function relevanssi_the_title( $before = true, string $after = '', bool $echoed = true ) { + if ( true === $before ) { + $before = ''; + $echoed = true; + } elseif ( false === $before ) { + $before = ''; + $echoed = false; + } + global $post; + if ( empty( $post->post_highlighted_title ) ) { + $post->post_highlighted_title = $post->post_title; + } + if ( relevanssi_strlen( $post->post_highlighted_title ) === 0 ) { + return; + } + $title = $before . $post->post_highlighted_title . $after; + if ( $echoed ) { + echo $title; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } else { + return $title; + } +} + +/** + * Turns off options, ie. sets them to "off". + * + * If the specified options don't exist in the request array, they are set to + * "off". + * + * @param array $request The _REQUEST array, passed as reference. + * @param array $options An array of option names. + */ +function relevanssi_turn_off_options( array &$request, array $options ) { + array_walk( + $options, + function ( $option ) use ( &$request ) { + if ( ! isset( $request[ $option ] ) ) { + $request[ $option ] = 'off'; + } + } + ); +} + +/** + * Sets an option after doing floatval. + * + * @param array $request An array of option values. + * @param string $option The key to check. + * @param boolean $autoload Should the option autoload, default true. + * @param float $def_val The default value if floatval() fails, default 0. + * @param boolean $positive If true, replace negative values and zeroes with + * $def_val. + */ +function relevanssi_update_floatval( array $request, string $option, bool $autoload = true, float $def_val = 0, bool $positive = false ) { + if ( isset( $request[ $option ] ) ) { + $value = floatval( $request[ $option ] ); + if ( ! $value ) { + $value = $def_val; + } + if ( $positive && $value <= 0 ) { + $value = $def_val; + } + update_option( $option, $value, $autoload ); + } +} + +/** + * Sets an option after doing intval. + * + * @param array $request An array of option values. + * @param string $option The key to check. + * @param boolean $autoload Should the option autoload, default true. + * @param int $def_val The default value if intval() fails, default 0. + */ +function relevanssi_update_intval( array $request, string $option, bool $autoload = true, int $def_val = 0 ) { + if ( isset( $request[ $option ] ) ) { + $value = intval( $request[ $option ] ); + if ( ! $value ) { + $value = $def_val; + } + update_option( $option, $value, $autoload ); + } +} + +/** + * Sets an option with one of the listed legal values. + * + * @param array $request An array of option values. + * @param string $option The key to check. + * @param array $values The legal values. + * @param string $def_val The default value. + * @param boolean $autoload Should the option autoload, default true. + */ +function relevanssi_update_legal_value( array $request, string $option, array $values, string $def_val, bool $autoload = true ) { + if ( isset( $request[ $option ] ) ) { + $value = $def_val; + if ( in_array( $request[ $option ], $values, true ) ) { + $value = $request[ $option ]; + } + update_option( $option, $value, $autoload ); + } +} + +/** + * Sets an on/off option according to the request value. + * + * @param array $request An array of option values. + * @param string $option The key to check. + * @param boolean $autoload Should the option autoload, default true. + */ +function relevanssi_update_off_or_on( array $request, string $option, bool $autoload = true ) { + relevanssi_update_legal_value( + $request, + $option, + array( 'off', 'on' ), + 'off', + $autoload + ); +} + +/** + * Sets an option after sanitizing and unslashing the value. + * + * @param array $request An array of option values. + * @param string $option The key to check. + * @param boolean $autoload Should the option autoload, default true. + */ +function relevanssi_update_sanitized( array $request, string $option, bool $autoload = true ) { + if ( isset( $request[ $option ] ) ) { + $value = sanitize_text_field( wp_unslash( $request[ $option ] ) ); + update_option( $option, $value, $autoload ); + } +} + +/** + * Returns true if $_SERVER['HTTP_USER_AGENT'] is on the bot block list. + * + * Looks for bot user agents in the $_SERVER['HTTP_USER_AGENT'] and returns true + * if a match is found. + * + * @return bool True if $_SERVER['HTTP_USER_AGENT'] is a bot. + */ +function relevanssi_user_agent_is_bot(): bool { + if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) { + /** + * Filters the bots Relevanssi should block from search queries. + * + * Lets you filter the bots that are blocked from Relevanssi search + * queries. + * + * @param array $bots An array of bot user agents. + */ + $bots = apply_filters( 'relevanssi_bots_to_block', relevanssi_bot_block_list() ); + foreach ( array_values( $bots ) as $lookfor ) { + if ( false !== stristr( $_SERVER['HTTP_USER_AGENT'], $lookfor ) ) { + return true; + } + } + } + return false; +} + +/** + * Validates that the parameter is a valid taxonomy type. + * + * @parameter string $taxonomy The taxonomy to validate. + * + * @return string The validated taxonomy, empty string if invalid. + */ +function relevanssi_validate_taxonomy( $taxonomy ) { + $taxonomy = sanitize_text_field( $taxonomy ); + if ( taxonomy_exists( $taxonomy ) ) { + return $taxonomy; + } + return ''; +} diff --git a/wp/wp-content/plugins/relevanssi/readme.txt b/wp/wp-content/plugins/relevanssi/readme.txt new file mode 100644 index 00000000..99800375 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/readme.txt @@ -0,0 +1,157 @@ +=== Relevanssi - A Better Search === +Contributors: msaari +Donate link: https://www.relevanssi.com/buy-premium/ +Tags: search, relevance, better search, product search, woocommerce search +Requires at least: 4.9 +Tested up to: 6.6 +Requires PHP: 7.0 +Stable tag: 4.23.1 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Relevanssi replaces the default search with a partial-match search that sorts results by relevance. It also indexes comments and shortcode content. + +== Description == + +Relevanssi replaces the standard WordPress search with a better search engine, with lots of features and configurable options. You'll get better results, better presentation of results - your users will thank you. + +This is the free version of Relevanssi. There's also Relevanssi Premium, which has added features. For more information about Premium, see [Relevanssi.com](https://www.relevanssi.com/). + +Do note that using Relevanssi may require large amounts (hundreds of megabytes) of database space (for a reasonable estimate, multiply the size of your `wp_posts` database table by three). If your hosting setup has a limited amount of space for database tables, using Relevanssi may cause problems. In those cases use of Relevanssi cannot be recommended. + += Key features = +* Search results sorted in the order of relevance, not by date. +* Fuzzy matching: match partial words, if complete words don't match. +* Find documents matching either just one search term (OR query) or require all words to appear (AND query). +* Search for phrases with quotes, for example "search phrase". +* Create custom excerpts that show where the hit was made, with the search terms highlighted. +* Highlight search terms in the documents when user clicks through search results. +* Search comments, tags, categories and custom fields. +* Multisite friendly. +* bbPress support. +* Gutenberg friendly. + += Advanced features = +* Adjust the weighting for titles, tags and comments. +* Log queries, show most popular queries and recent queries with no hits. +* Restrict searches to categories and tags using a hidden variable or plugin settings. +* Index custom post types and custom taxonomies. +* Index the contents of shortcodes. +* Google-style "Did you mean?" suggestions based on successful user searches. +* Support for [WPML multi-language plugin](http://wpml.org/) and [Polylang](https://wordpress.org/plugins/polylang/). +* Support for [s2member membership plugin](http://www.s2member.com/), [Members](https://wordpress.org/plugins/members/), [Groups](https://wordpress.org/plugins/groups/), [Simple Membership](https://wordpress.org/plugins/simple-membership/) and other membership plugins. +* Advanced filtering to help hacking the search results the way you want. +* Search result throttling to improve performance on large databases. +* Disable indexing of post content and post titles with a simple filter hook. + += Premium features (only in Relevanssi Premium) = +* Indexing attachment content (PDF, Office, Open Office). +* Improved spelling correction in "Did you mean?" suggestions. +* Searching across multiple sites in the same multisite installation. +* Search and index user profiles. +* Search and index taxonomy term pages (categories, tags, custom taxonomies). +* Search and index arbitrary columns in wp_posts MySQL table. +* Assign weights to any post types and taxonomies. +* Assign extra weight to new posts. +* Let the user choose between AND and OR searches, use + and - operator (AND and NOT). +* Export and import settings. +* [WP CLI commands](https://www.relevanssi.com/user-manual/wp-cli/). +* [Related posts](https://www.relevanssi.com/knowledge-base/related-posts/). +* [Redirects for searches](https://www.relevanssi.com/user-manual/redirects/). + +== Screenshots == + +1. Overview page +2. Indexing settings +3. Searching settings +4. Logging settings +5. Excerpts and highlights +6. Synonym settings +7. Stopword settings + +== Installation == + +1. Install the plugin from the WordPress plugin screen. +1. Activate the plugin. +1. Go to the plugin settings page and build the index following the instructions there. +1. That's it! + +Relevanssi uses the standard search form and doesn't usually need any changes in the search results template. + +If the search does not bring any results, your theme probably has a query_posts() call in the search results template. That throws Relevanssi off. For more information, see [The most important Relevanssi debugging trick](https://www.relevanssi.com/knowledge-base/query_posts/). + += Uninstalling = +To uninstall the plugin remove the plugin using the normal WordPress plugin management tools (from the Plugins page, first Deactivate, then Delete). If you remove the plugin files manually, the database tables and options will remain. + +== Frequently Asked Questions == + += Knowledge Base = +You can find solutions and answers at the [Relevanssi Knowledge Base](https://www.relevanssi.com/category/knowledge-base/). + += Contextual help = +Answers to many common problems can be found from the contextual menu. Just click "Help" in the top right corner of your WordPress admin dashboard on the Relevanssi settings page. + += Relevanssi doesn't work = +If you the results don't change after installing and activating Relevanssi, the most likely reason is that you have a call to `query_posts()` on your search results template. This confuses Relevanssi. Try removing the `query_posts()` call and see what happens. + += Searching for words with ampersands or hyphens doesn't work = +Please read [Words with punctuation can't be found](https://www.relevanssi.com/knowledge-base/words-ampersands-cant-found/). This is a Relevanssi feature, but you can fix it from Relevanssi indexing settings. + += Where are the user search logs? = +See the top of the admin menu. There's 'User searches'. + += Displaying the relevance score = +Relevanssi stores the relevance score it uses to sort results in the $post variable. Just add something like + +`echo $post->relevance_score` + +to your search results template inside a PHP code block to display the relevance score. + += Did you mean? suggestions = +Relevanssi offers Google-style "Did you mean?" suggestions. See ["Did you mean" suggestions](https://www.relevanssi.com/knowledge-base/did-you-mean-suggestions/) in the Knowledge Base for more details. + += What is tf * idf weighing? = + +It's the basic weighing scheme used in information retrieval. Tf stands for *term frequency* while idf is *inverted document frequency*. Term frequency is simply the number of times the term appears in a document, while document frequency is the number of documents in the database where the term appears. + +Thus, the weight of the word for a document increases the more often it appears in the document and the less often it appears in other documents. + += What are stop words? = + +Each document database is full of useless words. All the little words that appear in just about every document are completely useless for information retrieval purposes. Basically, their inverted document frequency is really low, so they never have much power in matching. Also, removing those words helps to make the index smaller and searching faster. + +== Thanks == +* Cristian Damm for tag indexing, comment indexing, post/page exclusion and general helpfulness. +* Marcus Dalgren for UTF-8 fixing. +* Warren Tape for 2.5.5 fixes. +* Mohib Ebrahim for relentless bug hunting. +* John Calahan for extensive 4.0 beta testing. + +== Changelog == += 4.23.1 = +* Security fix: Prevent an XSS attack by a malicious contributor. + += 4.23.0 = +* New feature: New filter hook `relevanssi_forbidden_post_types` filters the list of post types excluded from Relevanssi indexing. +* New feature: New filter hook `relevanssi_forbidden_taxonomies` filters the list of taxonomies excluded from Relevanssi indexing. +* New feature: New filter hook `relevanssi_show_password_protected` controls whether password protected posts are shown in the search results. +* New feature: Support for `post_mime_type` query parameter. +* New feature: Relevanssi settings tabs have more CSS ids to help hide individual settings. +* Changed behaviour: Password protected posts are excluded from the search results by default to protect their contents. +* Minor fix: In rare cases, the search results would not be in relevance order if the throttle wasn't used. +* Minor fix: The settings tab query parameter was renamed to avoid collisions with other plugins. +* Minor fix: User searches page now uses `wp_print_inline_script_tag()`. + += 4.22.2 = +* Security fix: Prevent CSV injection attack in log export. +* Security fix: Restrict access to doc count updates. +* Minor fix: Product variations check the parent product for access restrictions, to avoid situations where variations of a draft product appear in the results. +* Minor fix: Improved TablePress compatibility. +* Minor fix: Added error handling to the Ninja Table compatibility code. + +== Upgrade notice == += 4.23.1 = +* Security hardening. + += 4.23.0 = +* New filter hooks, support for `post_mime_type` and bug fixes. \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/relevanssi.php b/wp/wp-content/plugins/relevanssi/relevanssi.php new file mode 100644 index 00000000..b103ade6 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/relevanssi.php @@ -0,0 +1,92 @@ + + * @license https://wordpress.org/about/gpl/ GNU General Public License + * @see https://www.relevanssi.com/ + * + * @wordpress-plugin + * Plugin Name: Relevanssi + * Plugin URI: https://www.relevanssi.com/ + * Description: This plugin replaces WordPress search with a relevance-sorting search. + * Version: 4.23.1 + * Author: Mikko Saari + * Author URI: http://www.mikkosaari.fi/ + * Text Domain: relevanssi + * License: GPLv2 or later + * License URI: http://www.gnu.org/licenses/gpl-2.0.html + */ + +/** + * Copyright 2024 Mikko Saari (email: mikko@mikkosaari.fi) + * This file is part of Relevanssi, a search plugin for WordPress. + * + * Relevanssi is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Relevanssi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Relevanssi. If not, see . + */ + +define( 'RELEVANSSI_PREMIUM', false ); + +add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'relevanssi_action_links' ); + +global $wp_version; +if ( version_compare( $wp_version, '5.1', '>=' ) ) { + add_action( 'wp_insert_site', 'relevanssi_new_blog', 10, 1 ); +} else { + add_action( 'wpmu_new_blog', 'relevanssi_new_blog', 10, 1 ); +} + +global $relevanssi_variables; +global $wpdb; + +$relevanssi_variables['relevanssi_table'] = $wpdb->prefix . 'relevanssi'; +$relevanssi_variables['stopword_table'] = $wpdb->prefix . 'relevanssi_stopwords'; +$relevanssi_variables['log_table'] = $wpdb->prefix . 'relevanssi_log'; +$relevanssi_variables['content_boost_default'] = 1; +$relevanssi_variables['comment_boost_default'] = 0.75; +$relevanssi_variables['title_boost_default'] = 5; +$relevanssi_variables['comment_boost_default'] = 0.75; +$relevanssi_variables['post_type_weight_defaults']['post_tag'] = 0.75; +$relevanssi_variables['post_type_weight_defaults']['category'] = 0.75; +$relevanssi_variables['post_type_index_defaults'] = array( 'post', 'page' ); +$relevanssi_variables['database_version'] = 8; +$relevanssi_variables['file'] = __FILE__; +$relevanssi_variables['plugin_dir'] = plugin_dir_path( __FILE__ ); +$relevanssi_variables['plugin_basename'] = plugin_basename( __FILE__ ); +$relevanssi_variables['plugin_version'] = '4.23.1'; + +require_once 'lib/admin-ajax.php'; +require_once 'lib/common.php'; +require_once 'lib/debug.php'; +require_once 'lib/didyoumean.php'; +require_once 'lib/excerpts-highlights.php'; +require_once 'lib/indexing.php'; +require_once 'lib/init.php'; +require_once 'lib/install.php'; +require_once 'lib/interface.php'; +require_once 'lib/log.php'; +require_once 'lib/options.php'; +require_once 'lib/phrases.php'; +require_once 'lib/privacy.php'; +require_once 'lib/search.php'; +require_once 'lib/search-tax-query.php'; +require_once 'lib/search-query-restrictions.php'; +require_once 'lib/shortcodes.php'; +require_once 'lib/sorting.php'; +require_once 'lib/stopwords.php'; +require_once 'lib/user-searches.php'; +require_once 'lib/utils.php'; diff --git a/wp/wp-content/plugins/relevanssi/relevanssi.po b/wp/wp-content/plugins/relevanssi/relevanssi.po new file mode 100644 index 00000000..b13d6cbd --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/relevanssi.po @@ -0,0 +1,2413 @@ +msgid "" +msgstr "" +"Project-Id-Version: Relevanssi\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-25 10:14+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: Mikko Saari \n" +"Language-Team: \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: _e;__;esc_html__;esc_html_e;_n\n" +"X-Poedit-Basepath: .\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPath-1: lib\n" + +#: lib/admin-ajax.php:91 vendor/lib/admin-ajax.php:89 +#, php-format +msgid "Indexed %1$d post (total %2$d), processed %3$d / %4$d." +msgstr "" + +#: lib/admin-ajax.php:214 lib/tabs/indexing-tab.php:130 +#: vendor/lib/admin-ajax.php:212 vendor/lib/tabs/indexing-tab.php:125 +msgid "Results" +msgstr "" + +#: lib/admin-ajax.php:218 vendor/lib/admin-ajax.php:216 +#, php-format +msgid "Found a total of %1$d posts, showing posts %2$d–%3$s." +msgstr "" + +#: lib/admin-ajax.php:220 vendor/lib/admin-ajax.php:218 +msgid "Previous page" +msgstr "" + +#: lib/admin-ajax.php:223 vendor/lib/admin-ajax.php:221 +msgid "Next page" +msgstr "" + +#: lib/admin-ajax.php:227 vendor/lib/admin-ajax.php:225 +msgid "Score:" +msgstr "" + +#: lib/admin-ajax.php:252 vendor/lib/admin-ajax.php:250 +msgid "Edit" +msgstr "" + +#: lib/admin-ajax.php:300 vendor/lib/admin-ajax.php:296 +msgid "Query variables" +msgstr "" + +#: lib/admin-ajax.php:369 vendor/lib/admin-ajax.php:365 +msgid "Filters" +msgstr "" + +#: lib/admin-ajax.php:370 vendor/lib/admin-ajax.php:366 +msgid "show" +msgstr "" + +#: lib/admin-ajax.php:371 vendor/lib/admin-ajax.php:367 +msgid "hide" +msgstr "" + +#: lib/common.php:999 vendor/lib/common.php:1601 +msgid "25 most common words in the index" +msgstr "" + +#: lib/common.php:1000 vendor/lib/common.php:1602 +msgid "" +"These words are excellent stopword material. A word that appears in most of " +"the posts in the database is quite pointless when searching. This is also an " +"easy way to create a completely new stopword list, if one isn't available in " +"your language. Click the word to add the word to the stopword list. The word " +"will also be removed from the index, so rebuilding the index is not " +"necessary." +msgstr "" + +#: lib/common.php:1006 vendor/lib/common.php:1608 +msgid "Stopword Candidates" +msgstr "" + +#: lib/common.php:1011 vendor/lib/common.php:1613 +msgid "Add to stopwords" +msgstr "" + +#: lib/common.php:1014 vendor/lib/common.php:1616 +msgid "Add to content stopwords" +msgstr "" + +#: lib/common.php:1334 +#, php-format +msgid "Nothing found for post ID %d." +msgstr "" + +#: lib/common.php:1341 +msgid "Possible reasons this post is not indexed" +msgstr "" + +#: lib/common.php:1345 +msgid "Post title" +msgstr "" + +#: lib/common.php:1349 +msgid "Post content" +msgstr "" + +#: lib/common.php:1353 lib/tabs/indexing-tab.php:320 +#: vendor/lib/tabs/indexing-tab.php:265 +msgid "Comments" +msgstr "" + +#: lib/common.php:1357 +msgid "Tags" +msgstr "" + +#: lib/common.php:1361 +msgid "Categories" +msgstr "" + +#: lib/common.php:1365 +msgid "Other taxonomies" +msgstr "" + +#: lib/common.php:1369 +msgid "Links" +msgstr "" + +#: lib/common.php:1373 +msgid "Authors" +msgstr "" + +#: lib/common.php:1377 +msgid "Excerpt" +msgstr "" + +#: lib/common.php:1381 lib/tabs/indexing-tab.php:334 +#: vendor/lib/tabs/indexing-tab.php:279 +msgid "Custom fields" +msgstr "" + +#: lib/common.php:1385 +msgid "MySQL content" +msgstr "" + +#: lib/compatibility/aioseo.php:88 +msgid "Use All-in-One SEO noindex" +msgstr "" + +#: lib/compatibility/aioseo.php:93 +msgid "Use All-in-One SEO noindex." +msgstr "" + +#: lib/compatibility/aioseo.php:95 +msgid "" +"If checked, Relevanssi will not index posts marked as \"No index\" in All-in-" +"One SEO settings." +msgstr "" + +#: lib/compatibility/rankmath.php:80 +msgid "Use Rank Math SEO noindex" +msgstr "" + +#: lib/compatibility/rankmath.php:85 +msgid "Use Rank Math SEO noindex." +msgstr "" + +#: lib/compatibility/rankmath.php:87 +msgid "" +"If checked, Relevanssi will not index posts marked as \"No index\" in Rank " +"Math SEO settings." +msgstr "" + +#: lib/compatibility/seoframework.php:76 +msgid "Use SEO Framework noindex" +msgstr "" + +#: lib/compatibility/seoframework.php:81 +msgid "Use SEO Framework noindex." +msgstr "" + +#: lib/compatibility/seoframework.php:83 +msgid "" +"If checked, Relevanssi will not index posts marked as \"No index\" in SEO " +"Framework settings." +msgstr "" + +#: lib/compatibility/seopress.php:82 +msgid "Use SEOPress noindex" +msgstr "" + +#: lib/compatibility/seopress.php:87 +msgid "Use SEOPress noindex." +msgstr "" + +#: lib/compatibility/seopress.php:89 +msgid "" +"If checked, Relevanssi will not index posts marked as \"No index\" in " +"SEOPress settings." +msgstr "" + +#: lib/compatibility/yoast-seo.php:82 +msgid "Use Yoast SEO noindex" +msgstr "" + +#: lib/compatibility/yoast-seo.php:87 +msgid "Use Yoast SEO noindex." +msgstr "" + +#: lib/compatibility/yoast-seo.php:89 +msgid "" +"If checked, Relevanssi will not index posts marked as \"No index\" in Yoast " +"SEO settings." +msgstr "" + +#: lib/contextual-help.php:24 vendor/lib/contextual-help.php:28 +#, php-format +msgid "" +"To adjust the post order, you can use the %1$s query parameter. With %1$s, " +"you can use multiple layers of different sorting methods. See WordPress Codex for more details on using arrays for orderby." +msgstr "" + +#: lib/contextual-help.php:26 vendor/lib/contextual-help.php:35 +#, php-format +msgid "" +"To get inside-word highlights, uncheck the \"%s\" option. That has a side-" +"effect of enabling the inside-word highlights." +msgstr "" + +#: lib/contextual-help.php:26 vendor/lib/contextual-help.php:35 +#: vendor/lib/tabs/excerpts-tab.php:378 vendor/lib/tabs/excerpts-tab.php:387 +msgid "Uncheck this if you use non-ASCII characters" +msgstr "" + +#: lib/contextual-help.php:28 vendor/lib/contextual-help.php:37 +#, php-format +msgid "In order to adjust the throttle limit, you can use the %s filter hook." +msgstr "" + +#: lib/contextual-help.php:33 lib/interface.php:446 +#: lib/tabs/overview-tab.php:56 vendor/lib/contextual-help.php:25 +#: vendor/lib/interface.php:831 vendor/lib/tabs/overview-tab.php:56 +msgid "Searching" +msgstr "" + +#: lib/contextual-help.php:36 vendor/lib/contextual-help.php:29 +msgid "" +"Inside-word matching is disabled by default, because it increases garbage " +"results that don't really match the search term. If you want to enable it, " +"add the following function to your theme functions.php:" +msgstr "" + +#: lib/contextual-help.php:44 vendor/lib/contextual-help.php:39 +msgid "" +"It's not usually necessary to adjust the limit from 500, but in some cases " +"performance gains can be achieved by setting a lower limit. We don't suggest " +"going under 200, as low values will make the results worse." +msgstr "" + +#: lib/contextual-help.php:50 vendor/lib/contextual-help.php:54 +#, php-format +msgid "For all the possible options, see the Codex documentation for %s." +msgstr "" + +#: lib/contextual-help.php:55 vendor/lib/contextual-help.php:46 +msgid "Restrictions" +msgstr "" + +#: lib/contextual-help.php:57 vendor/lib/contextual-help.php:48 +msgid "" +"If you want the general search to target all posts, but have a single search " +"form target only certain posts, you can add a hidden input variable to the " +"search form. " +msgstr "" + +#: lib/contextual-help.php:58 vendor/lib/contextual-help.php:49 +msgid "" +"For example in order to restrict the search to categories 10, 14 and 17, you " +"could add this to the search form:" +msgstr "" + +#: lib/contextual-help.php:60 vendor/lib/contextual-help.php:51 +msgid "" +"To restrict the search to posts tagged with alfa AND beta, you could add " +"this to the search form:" +msgstr "" + +#: lib/contextual-help.php:67 vendor/lib/contextual-help.php:64 +#, php-format +msgid "" +"For more exclusion options, see the Codex documentation for %s. For example, " +"to exclude tag ID 10, use" +msgstr "" + +#: lib/contextual-help.php:69 vendor/lib/contextual-help.php:67 +#, php-format +msgid "" +"To exclude posts from the index and not just from the search, you can use " +"the %s filter hook. This would not index posts that have a certain taxonomy " +"term:" +msgstr "" + +#: lib/contextual-help.php:71 lib/contextual-help.php:153 +#: vendor/lib/contextual-help.php:77 vendor/lib/contextual-help.php:133 +#, php-format +msgid "" +"For more examples, see the related knowledge base posts." +msgstr "" + +#: lib/contextual-help.php:76 vendor/lib/contextual-help.php:61 +msgid "Exclusions" +msgstr "" + +#: lib/contextual-help.php:95 vendor/lib/contextual-help.php:87 +#, php-format +msgid "" +"By default, the User searches page shows 20 most common keywords. In order " +"to see more, you can adjust the value with the %s filter hook, like this:" +msgstr "" + +#: lib/contextual-help.php:97 vendor/lib/contextual-help.php:90 +#, php-format +msgid "" +"The complete logs are stored in the %s database table, where you can access " +"them if you need more information than what the User searches page provides." +msgstr "" + +#: lib/contextual-help.php:102 vendor/lib/contextual-help.php:84 +msgid "Logs" +msgstr "" + +#: lib/contextual-help.php:112 vendor/lib/contextual-help.php:101 +#, php-format +msgid "" +"Custom snippets require that the search results template uses %s to print " +"out the excerpts." +msgstr "" + +#: lib/contextual-help.php:114 vendor/lib/contextual-help.php:104 +#, php-format +msgid "" +"If you want more control over what content Relevanssi uses to create the " +"excerpts, you can use the %1$s and %2$s filter hooks to adjust the content." +msgstr "" + +#: lib/contextual-help.php:116 vendor/lib/contextual-help.php:106 +#, php-format +msgid "" +"Some shortcode do not work well with Relevanssi excerpt-generation. " +"Relevanssi disables some shortcodes automatically to prevent problems. This " +"can be adjusted with the %s filter hook." +msgstr "" + +#: lib/contextual-help.php:118 vendor/lib/contextual-help.php:108 +#, php-format +msgid "" +"If you want Relevanssi to build excerpts faster and don't mind that they may " +"be less than perfect in quality, add a filter that returns true on hook %s." +msgstr "" + +#: lib/contextual-help.php:123 lib/tabs/indexing-tab.php:393 +#: vendor/lib/contextual-help.php:97 vendor/lib/tabs/indexing-tab.php:341 +msgid "Excerpts" +msgstr "" + +#: lib/contextual-help.php:125 vendor/lib/contextual-help.php:99 +msgid "" +"Building custom excerpts can be slow. If you are not actually using the " +"excerpts, make sure you disable the option." +msgstr "" + +#: lib/contextual-help.php:127 vendor/lib/contextual-help.php:102 +msgid "" +"Generally, Relevanssi generates the excerpts from post content. If you want " +"to include custom field content in the excerpt-building, this can be done " +"with a simple setting from the excerpt settings." +msgstr "" + +#: lib/contextual-help.php:137 vendor/lib/contextual-help.php:120 +#, php-format +msgid "" +"In order to see title highlights from Relevanssi, replace %1$s in the search " +"results template with %2$s. It does the same thing, but supports Relevanssi " +"title highlights." +msgstr "" + +#: lib/contextual-help.php:142 vendor/lib/contextual-help.php:116 +msgid "Highlights" +msgstr "" + +#: lib/contextual-help.php:144 vendor/lib/contextual-help.php:118 +msgid "" +"Title highlights don't appear automatically, because that led to problems " +"with highlights appearing in wrong places and messing up navigation menus, " +"for example." +msgstr "" + +#: lib/contextual-help.php:151 vendor/lib/contextual-help.php:131 +#, php-format +msgid "" +"For more fine-tuned changes, you can use %1$s filter hook to adjust what is " +"replaced with what, and %2$s filter hook to completely override the default " +"punctuation control." +msgstr "" + +#: lib/contextual-help.php:158 vendor/lib/contextual-help.php:127 +msgid "Punctuation" +msgstr "" + +#: lib/contextual-help.php:160 vendor/lib/contextual-help.php:129 +msgid "" +"Relevanssi removes punctuation. Some punctuation is removed, some replaced " +"with spaces. Advanced indexing settings include some of the more common " +"settings people want to change." +msgstr "" + +#: lib/contextual-help.php:168 vendor/lib/contextual-help.php:143 +#, php-format +msgid "" +"If you have content that you don't want indexed, you can wrap that content " +"in a %s shortcode." +msgstr "" + +#: lib/contextual-help.php:170 vendor/lib/contextual-help.php:145 +#, php-format +msgid "" +"If you need a search form on some page on your site, you can use the %s " +"shortcode to print out a basic search form." +msgstr "" + +#: lib/contextual-help.php:172 vendor/lib/contextual-help.php:147 +#, php-format +msgid "" +"If you need to add query variables to the search form, the shortcode takes " +"parameters, which are then printed out as hidden input fields. To get a " +"search form with a post type restriction, you can use %1$s. To restrict the " +"search to categories 10, 14 and 17, you can use %2$s and so on." +msgstr "" + +#: lib/contextual-help.php:174 vendor/lib/contextual-help.php:149 +#, php-format +msgid "" +"You can use the %1$s parameter to add a taxonomy dropdown to the search " +"form. Just use the name of the taxonomy, like %2$s. This works best with " +"hierarchical taxonomies like categories with relatively few options " +"available." +msgstr "" + +#: lib/contextual-help.php:179 vendor/lib/contextual-help.php:140 +msgid "Helpful shortcodes" +msgstr "" + +#: lib/contextual-help.php:190 vendor/lib/contextual-help.php:160 +#, php-format +msgid "" +"For more details how to fix that issue, see WooCommerce tips in " +"Relevanssi user manual." +msgstr "" + +#: lib/contextual-help.php:195 vendor/lib/contextual-help.php:156 +msgid "WooCommerce" +msgstr "" + +#: lib/contextual-help.php:197 vendor/lib/contextual-help.php:158 +msgid "" +"If your SKUs include hyphens or other punctuation, do note that Relevanssi " +"replaces most punctuation with spaces. That's going to cause issues with SKU " +"searches." +msgstr "" + +#: lib/contextual-help.php:199 vendor/lib/contextual-help.php:161 +msgid "" +"If you don't want to index products that are out of stock, excluded from the " +"catalog or excluded from the search, there's a product visibility filtering " +"method that is described in the user manual (see link above)." +msgstr "" + +#: lib/contextual-help.php:205 vendor/lib/contextual-help.php:171 +#, php-format +msgid "" +"To adjust the amount of the exact match bonus, you can use the %s filter " +"hook. It works like this:" +msgstr "" + +#: lib/contextual-help.php:207 vendor/lib/contextual-help.php:177 +#, php-format +msgid "The default values are %1$s for titles and %2$s for content." +msgstr "" + +#: lib/contextual-help.php:212 vendor/lib/contextual-help.php:168 +msgid "Exact match bonus" +msgstr "" + +#: lib/contextual-help.php:223 vendor/lib/contextual-help.php:181 +msgid "For more information:" +msgstr "" + +#: lib/contextual-help.php:224 vendor/lib/contextual-help.php:182 +msgid "Plugin knowledge base" +msgstr "" + +#: lib/contextual-help.php:225 vendor/lib/contextual-help.php:183 +msgid "WordPress.org forum" +msgstr "" + +#: lib/indexing.php:463 +msgid "Relevanssi index exclude" +msgstr "" + +#: lib/indexing.php:491 +msgid "Blocked by a filter function" +msgstr "" + +#: lib/init.php:109 vendor/lib/init.php:88 +msgid "" +"You do not have an index! Remember to build the index (click the \"Build the " +"index\" button), otherwise searching won't work." +msgstr "" + +#: lib/init.php:121 vendor/lib/init.php:100 +msgid "" +"Multibyte string functions are not available. Relevanssi may not work well " +"without them. Please install (or ask your host to install) the mbstring " +"extension." +msgstr "" + +#: lib/init.php:298 lib/init.php:299 lib/interface.php:109 +#: lib/tabs/logging-tab.php:48 vendor/lib/init.php:237 vendor/lib/init.php:238 +#: vendor/lib/interface.php:469 vendor/lib/tabs/logging-tab.php:48 +msgid "User searches" +msgstr "" + +#: lib/init.php:310 lib/init.php:311 lib/tabs/searching-tab.php:248 +#: vendor/lib/init.php:249 vendor/lib/init.php:250 +#: vendor/lib/tabs/searching-tab.php:248 +msgid "Admin search" +msgstr "" + +#: lib/init.php:523 vendor/lib/init.php:441 +msgid "Settings" +msgstr "" + +#: lib/init.php:526 vendor/lib/init.php:444 +msgid "Go Premium!" +msgstr "" + +#: lib/interface.php:18 vendor/lib/interface.php:18 +msgid "Relevanssi Search Options" +msgstr "" + +#: lib/interface.php:20 vendor/lib/interface.php:20 +msgid "Relevanssi Premium Search Options" +msgstr "" + +#: lib/interface.php:111 vendor/lib/interface.php:471 +msgid "Relevanssi User Searches" +msgstr "" + +#: lib/interface.php:129 vendor/lib/interface.php:494 +msgid "Enable query logging to see stats here." +msgstr "" + +#: lib/interface.php:141 vendor/lib/interface.php:506 +msgid "Admin Search" +msgstr "" + +#: lib/interface.php:166 vendor/lib/interface.php:536 +msgid "Logs clear!" +msgstr "" + +#: lib/interface.php:168 vendor/lib/interface.php:538 +msgid "Clearing the logs failed." +msgstr "" + +#: lib/interface.php:202 vendor/lib/interface.php:572 +msgid "Total Searches" +msgstr "" + +#: lib/interface.php:204 vendor/lib/interface.php:574 +msgid "Totals" +msgstr "" + +#: lib/interface.php:208 vendor/lib/interface.php:578 +msgid "Common Queries" +msgstr "" + +#: lib/interface.php:218 vendor/lib/interface.php:588 +#, php-format +msgid "" +"Here you can see the %d most common user search queries, how many times " +"those queries were made and how many results were found for those queries." +msgstr "" + +#: lib/interface.php:222 lib/interface.php:244 lib/interface.php:293 +#: vendor/lib/interface.php:592 vendor/lib/interface.php:614 +#: vendor/lib/interface.php:664 +msgid "Today and yesterday" +msgstr "" + +#: lib/interface.php:225 lib/interface.php:231 lib/interface.php:236 +#: lib/interface.php:253 vendor/lib/interface.php:595 +#: vendor/lib/interface.php:601 vendor/lib/interface.php:606 +#: vendor/lib/interface.php:623 +#, php-format +msgid "Last %d days" +msgstr "" + +#: lib/interface.php:241 vendor/lib/interface.php:611 +msgid "Unsuccessful Queries" +msgstr "" + +#: lib/interface.php:248 lib/interface.php:294 vendor/lib/interface.php:618 +#: vendor/lib/interface.php:665 +msgid "Last 7 days" +msgstr "" + +#: lib/interface.php:259 vendor/lib/interface.php:629 +msgid "Reset Logs" +msgstr "" + +#: lib/interface.php:268 +msgid "" +"To reset the logs, type \"reset\" into the box here and click the Reset " +"button" +msgstr "" + +#: lib/interface.php:271 +msgid "Reset" +msgstr "" + +#: lib/interface.php:295 vendor/lib/interface.php:666 +msgid "Last 30 days" +msgstr "" + +#: lib/interface.php:296 vendor/lib/interface.php:667 +msgid "Forever" +msgstr "" + +#: lib/interface.php:306 vendor/lib/interface.php:677 +msgid "When" +msgstr "" + +#: lib/interface.php:307 vendor/lib/interface.php:678 +msgid "Searches" +msgstr "" + +#: lib/interface.php:369 lib/log.php:195 vendor/lib/interface.php:740 +#: vendor/lib/log.php:178 +msgid "Query" +msgstr "" + +#: lib/interface.php:370 vendor/lib/interface.php:741 +msgid "Hits" +msgstr "" + +#: lib/interface.php:425 vendor/lib/interface.php:828 +msgid "Overview" +msgstr "" + +#: lib/interface.php:432 lib/tabs/overview-tab.php:44 +#: vendor/lib/interface.php:829 vendor/lib/tabs/overview-tab.php:44 +msgid "Indexing" +msgstr "" + +#: lib/interface.php:439 vendor/lib/interface.php:830 +msgid "Attachments" +msgstr "" + +#: lib/interface.php:453 vendor/lib/interface.php:832 +msgid "Logging" +msgstr "" + +#: lib/interface.php:460 lib/tabs/overview-tab.php:60 +#: vendor/lib/interface.php:833 vendor/lib/tabs/overview-tab.php:60 +msgid "Excerpts and highlights" +msgstr "" + +#: lib/interface.php:467 lib/tabs/synonyms-tab.php:27 +#: lib/tabs/synonyms-tab.php:32 vendor/lib/interface.php:834 +#: vendor/lib/tabs/synonyms-tab.php:25 vendor/lib/tabs/synonyms-tab.php:30 +msgid "Synonyms" +msgstr "" + +#: lib/interface.php:474 lib/tabs/stopwords-tab.php:18 +#: vendor/lib/interface.php:835 vendor/lib/tabs/stopwords-tab.php:18 +msgid "Stopwords" +msgstr "" + +#: lib/interface.php:481 lib/tabs/redirects-tab.php:18 +#: vendor/lib/interface.php:836 vendor/lib/tabs/redirects-tab.php:18 +msgid "Redirects" +msgstr "" + +#: lib/interface.php:488 lib/tabs/debugging-tab.php:28 +msgid "Debugging" +msgstr "" + +#: lib/interface.php:590 vendor/lib/interface.php:958 +msgid "Click OK to copy Relevanssi options to all subsites" +msgstr "" + +#: lib/interface.php:591 vendor/lib/interface.php:959 +msgid "Are you sure you want to remove all stopwords?" +msgstr "" + +#: lib/interface.php:592 vendor/lib/interface.php:960 +msgid "Wiping out the index..." +msgstr "" + +#: lib/interface.php:593 vendor/lib/interface.php:961 +msgid "Done." +msgstr "" + +#: lib/interface.php:594 vendor/lib/interface.php:962 +msgid "Indexing users..." +msgstr "" + +#: lib/interface.php:595 vendor/lib/interface.php:963 +msgid "Indexing the following taxonomies:" +msgstr "" + +#: lib/interface.php:596 vendor/lib/interface.php:964 +msgid "Indexing attachments..." +msgstr "" + +#: lib/interface.php:597 vendor/lib/interface.php:965 +msgid "Counting posts..." +msgstr "" + +#: lib/interface.php:598 vendor/lib/interface.php:966 +msgid "Counting taxonomy terms..." +msgstr "" + +#: lib/interface.php:599 vendor/lib/interface.php:967 +msgid "Counting users..." +msgstr "" + +#: lib/interface.php:600 vendor/lib/interface.php:968 +msgid "Counting attachments..." +msgstr "" + +#: lib/interface.php:601 vendor/lib/interface.php:969 +msgid "posts found." +msgstr "" + +#: lib/interface.php:602 vendor/lib/interface.php:970 +msgid "taxonomy terms found." +msgstr "" + +#: lib/interface.php:603 vendor/lib/interface.php:971 +msgid "users found." +msgstr "" + +#: lib/interface.php:604 vendor/lib/interface.php:972 +msgid "attachments found." +msgstr "" + +#: lib/interface.php:605 vendor/lib/interface.php:973 +msgid "Taxonomy term indexing is disabled." +msgstr "" + +#: lib/interface.php:606 vendor/lib/interface.php:974 +msgid "User indexing is disabled." +msgstr "" + +#: lib/interface.php:607 vendor/lib/interface.php:975 +msgid "Indexing complete." +msgstr "" + +#: lib/interface.php:608 vendor/lib/interface.php:976 +msgid "posts excluded." +msgstr "" + +#: lib/interface.php:609 vendor/lib/interface.php:977 +msgid "Settings have changed, please save the options before indexing." +msgstr "" + +#: lib/interface.php:610 vendor/lib/interface.php:978 +msgid "Reload the page to refresh the state of the index." +msgstr "" + +#: lib/interface.php:611 vendor/lib/interface.php:979 +msgid "Are you sure you want to delete all attachment content from the index?" +msgstr "" + +#: lib/interface.php:612 vendor/lib/interface.php:980 +msgid "Relevanssi attachment data wiped clean." +msgstr "" + +#: lib/interface.php:613 +msgid "There were problems wiping the Relevanssi attachment data clean." +msgstr "" + +#: lib/interface.php:614 vendor/lib/interface.php:981 +msgid "hour" +msgstr "" + +#: lib/interface.php:615 vendor/lib/interface.php:982 +msgid "hours" +msgstr "" + +#: lib/interface.php:616 vendor/lib/interface.php:983 +msgid "about" +msgstr "" + +#: lib/interface.php:617 vendor/lib/interface.php:984 +msgid "about an hour" +msgstr "" + +#: lib/interface.php:618 vendor/lib/interface.php:985 +msgid "about an hour and a half" +msgstr "" + +#: lib/interface.php:619 vendor/lib/interface.php:986 +msgid "minute" +msgstr "" + +#: lib/interface.php:620 vendor/lib/interface.php:987 +msgid "minutes" +msgstr "" + +#: lib/interface.php:621 vendor/lib/interface.php:988 +msgid "less than a minute" +msgstr "" + +#: lib/interface.php:622 vendor/lib/interface.php:989 +msgid "we're done!" +msgstr "" + +#: lib/interface.php:689 vendor/lib/interface.php:1056 +msgid "Tag weight" +msgstr "" + +#: lib/interface.php:697 vendor/lib/interface.php:1064 +msgid "Category weight" +msgstr "" + +#: lib/log.php:188 +msgid "Logged searches" +msgstr "" + +#: lib/log.php:191 vendor/lib/log.php:174 +msgid "Time" +msgstr "" + +#: lib/log.php:199 vendor/lib/log.php:182 +msgid "Hits found" +msgstr "" + +#: lib/log.php:203 vendor/lib/log.php:186 +msgid "IP address" +msgstr "" + +#: lib/log.php:298 +msgid "No search keywords logged." +msgstr "" + +#: lib/privacy.php:34 vendor/lib/privacy.php:34 +msgid "What personal data we collect and why we collect it" +msgstr "" + +#: lib/privacy.php:36 vendor/lib/privacy.php:36 +msgid "IP address for searches" +msgstr "" + +#: lib/privacy.php:37 vendor/lib/privacy.php:37 +msgid "" +"All searches performed using the internal site search are logged in the " +"database, including the following information: the search query, the number " +"of hits found, user ID for users who are logged in, date and time and the IP " +"address. The IP address is stored for security and auditing purposes." +msgstr "" + +#: lib/privacy.php:39 vendor/lib/privacy.php:39 +msgid "" +"All searches performed using the internal site search are logged in the " +"database, including the following information: the search query, the number " +"of hits found, user ID for users who are logged in and date and time." +msgstr "" + +#: lib/privacy.php:42 vendor/lib/privacy.php:42 +msgid "How long we retain your data" +msgstr "" + +#: lib/privacy.php:45 vendor/lib/privacy.php:45 +#, php-format +msgid "" +"The search logs are stored for %d days before they are automatically removed." +msgstr "" + +#: lib/privacy.php:47 vendor/lib/privacy.php:47 +msgid "The search logs are stored indefinitely." +msgstr "" + +#: lib/privacy.php:64 lib/privacy.php:81 vendor/lib/privacy.php:64 +#: vendor/lib/privacy.php:81 +msgid "Relevanssi Search Logs" +msgstr "" + +#: lib/shortcodes.php:126 vendor/lib/shortcodes.php:131 +msgid "None" +msgstr "" + +#: lib/stopwords.php:38 +msgid "Added stopwords from the database." +msgstr "" + +#: lib/stopwords.php:53 +#, php-format +msgid "The stopword file for the language '%s' doesn't exist." +msgstr "" + +#: lib/stopwords.php:69 +msgid "Couldn't read the stopwords from the file." +msgstr "" + +#: lib/stopwords.php:79 +msgid "Added stopwords from the stopword file." +msgstr "" + +#: lib/stopwords.php:138 vendor/lib/stopwords.php:96 +#, php-format +msgid "Successfully added %1$d/%2$d terms to stopwords!" +msgstr "" + +#: lib/stopwords.php:157 vendor/lib/stopwords.php:107 +#, php-format +msgid "Term '%s' added to stopwords!" +msgstr "" + +#: lib/stopwords.php:166 vendor/lib/stopwords.php:110 +#, php-format +msgid "Couldn't add term '%s' to stopwords!" +msgstr "" + +#: lib/stopwords.php:317 vendor/lib/stopwords.php:162 +msgid "All stopwords removed! Remember to re-index." +msgstr "" + +#: lib/stopwords.php:325 vendor/lib/stopwords.php:164 +msgid "There was a problem, and stopwords couldn't be removed." +msgstr "" + +#: lib/stopwords.php:362 vendor/lib/stopwords.php:187 +#, php-format +msgid "Term '%s' removed from stopwords! Re-index to get it back to index." +msgstr "" + +#: lib/stopwords.php:375 vendor/lib/stopwords.php:193 +#, php-format +msgid "Couldn't remove term '%s' from stopwords!" +msgstr "" + +#: lib/tabs/attachments-tab.php:18 vendor/lib/tabs/attachments-tab.php:18 +msgid "Indexing attachment content" +msgstr "" + +#: lib/tabs/attachments-tab.php:20 vendor/lib/tabs/attachments-tab.php:20 +msgid "" +"With Relevanssi Premium, you can index the text contents of attachments " +"(PDFs, Word documents, Open Office documents and many other types). The " +"contents of the attachments are processed on an external service, which " +"makes the feature reliable and light on your own server performance." +msgstr "" + +#: lib/tabs/attachments-tab.php:22 lib/tabs/redirects-tab.php:22 +#: vendor/lib/tabs/attachments-tab.php:22 vendor/lib/tabs/redirects-tab.php:22 +#, php-format +msgid "" +"In order to access this and many other delightful Premium features, %1$sbuy " +"Relevanssi Premium here%2$s." +msgstr "" + +#: lib/tabs/debugging-tab.php:30 +msgid "" +"In order to figure out problems with indexing posts, you can test how " +"Relevanssi sees the post by entering the post ID number in the field below." +msgstr "" + +#: lib/tabs/debugging-tab.php:34 +#, php-format +msgid "" +"In Relevanssi Premium, you can find this feature for each post on the post " +"edit page. %1$sBuy Relevanssi Premium here%2$s." +msgstr "" + +#: lib/tabs/debugging-tab.php:37 +msgid "The post ID" +msgstr "" + +#: lib/tabs/excerpts-tab.php:84 vendor/lib/tabs/excerpts-tab.php:84 +msgid "Custom excerpts/snippets" +msgstr "" + +#: lib/tabs/excerpts-tab.php:89 vendor/lib/tabs/excerpts-tab.php:89 +msgid "Custom search result snippets" +msgstr "" + +#: lib/tabs/excerpts-tab.php:94 vendor/lib/tabs/excerpts-tab.php:93 +#: vendor/lib/tabs/excerpts-tab.php:96 +msgid "Create custom search result snippets" +msgstr "" + +#: lib/tabs/excerpts-tab.php:96 vendor/lib/tabs/excerpts-tab.php:99 +msgid "Only enable this if you actually use the custom excerpts." +msgstr "" + +#: lib/tabs/excerpts-tab.php:103 vendor/lib/tabs/excerpts-tab.php:106 +#, php-format +msgid "" +"Looks like you are using Divi. In order to use custom excerpts with Divi, " +"you need to make some changes to your templates. %1$sSee instructions here" +"%2$s." +msgstr "" + +#: lib/tabs/excerpts-tab.php:115 vendor/lib/tabs/excerpts-tab.php:118 +msgid "Length of the snippet" +msgstr "" + +#: lib/tabs/excerpts-tab.php:125 vendor/lib/tabs/excerpts-tab.php:128 +msgid "Excerpt length type" +msgstr "" + +#: lib/tabs/excerpts-tab.php:133 vendor/lib/tabs/excerpts-tab.php:136 +msgid "characters" +msgstr "" + +#: lib/tabs/excerpts-tab.php:134 vendor/lib/tabs/excerpts-tab.php:137 +msgid "words" +msgstr "" + +#: lib/tabs/excerpts-tab.php:136 vendor/lib/tabs/excerpts-tab.php:139 +msgid "" +"Using words is much faster than characters. Don't use characters, unless you " +"have a really good reason and your posts are short." +msgstr "" + +#: lib/tabs/excerpts-tab.php:152 vendor/lib/tabs/excerpts-tab.php:150 +msgid "Allowable tags in excerpts" +msgstr "" + +#: lib/tabs/excerpts-tab.php:162 vendor/lib/tabs/excerpts-tab.php:160 +msgid "" +"List all tags you want to allow in excerpts. For example: <p><a>" +"<strong>." +msgstr "" + +#: lib/tabs/excerpts-tab.php:173 vendor/lib/tabs/excerpts-tab.php:171 +msgid "Use custom fields for excerpts" +msgstr "" + +#: lib/tabs/excerpts-tab.php:184 vendor/lib/tabs/excerpts-tab.php:175 +#: vendor/lib/tabs/excerpts-tab.php:184 +msgid "Use custom field content for building excerpts" +msgstr "" + +#: lib/tabs/excerpts-tab.php:186 vendor/lib/tabs/excerpts-tab.php:187 +msgid "" +"Use the custom fields setting for indexing for excerpt-making as well. " +"Enabling this option will show custom field content in Relevanssi-generated " +"excerpts." +msgstr "" + +#: lib/tabs/excerpts-tab.php:189 vendor/lib/tabs/excerpts-tab.php:190 +msgid "Enable this option to use PDF content for excerpts." +msgstr "" + +#: lib/tabs/excerpts-tab.php:194 vendor/lib/tabs/excerpts-tab.php:195 +msgid "Current custom field setting" +msgstr "" + +#: lib/tabs/excerpts-tab.php:197 vendor/lib/tabs/excerpts-tab.php:198 +msgid "all visible custom fields" +msgstr "" + +#: lib/tabs/excerpts-tab.php:199 vendor/lib/tabs/excerpts-tab.php:200 +msgid "all custom fields" +msgstr "" + +#: lib/tabs/excerpts-tab.php:203 vendor/lib/tabs/excerpts-tab.php:204 +msgid "Just PDF content" +msgstr "" + +#: lib/tabs/excerpts-tab.php:205 vendor/lib/tabs/excerpts-tab.php:206 +msgid "None selected" +msgstr "" + +#: lib/tabs/excerpts-tab.php:213 vendor/lib/tabs/excerpts-tab.php:214 +msgid "Search hit highlighting" +msgstr "" + +#: lib/tabs/excerpts-tab.php:224 vendor/lib/tabs/excerpts-tab.php:225 +msgid "Highlight type" +msgstr "" + +#: lib/tabs/excerpts-tab.php:234 vendor/lib/tabs/excerpts-tab.php:235 +msgid "No highlighting" +msgstr "" + +#: lib/tabs/excerpts-tab.php:238 lib/tabs/excerpts-tab.php:248 +#: vendor/lib/tabs/excerpts-tab.php:239 vendor/lib/tabs/excerpts-tab.php:249 +msgid "Text color" +msgstr "" + +#: lib/tabs/excerpts-tab.php:239 lib/tabs/excerpts-tab.php:262 +#: vendor/lib/tabs/excerpts-tab.php:240 vendor/lib/tabs/excerpts-tab.php:263 +msgid "Background color" +msgstr "" + +#: lib/tabs/excerpts-tab.php:240 vendor/lib/tabs/excerpts-tab.php:241 +msgid "CSS Style" +msgstr "" + +#: lib/tabs/excerpts-tab.php:241 vendor/lib/tabs/excerpts-tab.php:242 +msgid "CSS Class" +msgstr "" + +#: lib/tabs/excerpts-tab.php:243 lib/tabs/excerpts-tab.php:406 +#: vendor/lib/tabs/excerpts-tab.php:244 vendor/lib/tabs/excerpts-tab.php:422 +msgid "Requires custom snippets to work." +msgstr "" + +#: lib/tabs/excerpts-tab.php:276 vendor/lib/tabs/excerpts-tab.php:277 +msgid "CSS style for highlights" +msgstr "" + +#: lib/tabs/excerpts-tab.php:287 vendor/lib/tabs/excerpts-tab.php:288 +#, php-format +msgid "" +"The highlights will be wrapped in a %s with this CSS in the style parameter." +msgstr "" + +#: lib/tabs/excerpts-tab.php:292 vendor/lib/tabs/excerpts-tab.php:293 +msgid "CSS class for highlights" +msgstr "" + +#: lib/tabs/excerpts-tab.php:303 vendor/lib/tabs/excerpts-tab.php:304 +#, php-format +msgid "The highlights will be wrapped in a %s with this class." +msgstr "" + +#: lib/tabs/excerpts-tab.php:308 vendor/lib/tabs/excerpts-tab.php:309 +msgid "Highlight in titles" +msgstr "" + +#: lib/tabs/excerpts-tab.php:319 vendor/lib/tabs/excerpts-tab.php:313 +#: vendor/lib/tabs/excerpts-tab.php:322 +msgid "Highlight query terms in titles" +msgstr "" + +#: lib/tabs/excerpts-tab.php:322 vendor/lib/tabs/excerpts-tab.php:326 +#, php-format +msgid "" +"Highlights in titles require changes to the search results template. You " +"need to replace %1$s in the search results template with %2$s. For more " +"information, see the contextual help." +msgstr "" + +#: lib/tabs/excerpts-tab.php:327 vendor/lib/tabs/excerpts-tab.php:331 +msgid "Highlight in documents" +msgstr "" + +#: lib/tabs/excerpts-tab.php:338 vendor/lib/tabs/excerpts-tab.php:335 +#: vendor/lib/tabs/excerpts-tab.php:344 +msgid "Highlight query terms in documents" +msgstr "" + +#: lib/tabs/excerpts-tab.php:341 vendor/lib/tabs/excerpts-tab.php:348 +#, php-format +msgid "" +"Highlights hits when user opens the post from search results. This requires " +"an extra parameter (%s) to the links from the search results pages, which " +"Relevanssi should add automatically." +msgstr "" + +#: lib/tabs/excerpts-tab.php:346 vendor/lib/tabs/excerpts-tab.php:353 +msgid "Highlight in comments" +msgstr "" + +#: lib/tabs/excerpts-tab.php:357 vendor/lib/tabs/excerpts-tab.php:357 +#: vendor/lib/tabs/excerpts-tab.php:366 +msgid "Highlight query terms in comments" +msgstr "" + +#: lib/tabs/excerpts-tab.php:359 vendor/lib/tabs/excerpts-tab.php:369 +msgid "" +"Highlights hits in comments when user opens the post from search results." +msgstr "" + +#: lib/tabs/excerpts-tab.php:364 +msgid "Expand highlights" +msgstr "" + +#: lib/tabs/excerpts-tab.php:375 +msgid "Expand highlights to cover full words" +msgstr "" + +#: lib/tabs/excerpts-tab.php:377 +msgid "" +"When a highlight matches part of the word, if this option is enabled, the " +"highlight will be expanded to highlight the whole word." +msgstr "" + +#: lib/tabs/excerpts-tab.php:382 vendor/lib/tabs/excerpts-tab.php:395 +msgid "Breakdown of search results" +msgstr "" + +#: lib/tabs/excerpts-tab.php:393 vendor/lib/tabs/excerpts-tab.php:406 +msgid "Breakdown of search hits in excerpts" +msgstr "" + +#: lib/tabs/excerpts-tab.php:404 vendor/lib/tabs/excerpts-tab.php:419 +msgid "Show the breakdown of search hits in the excerpts." +msgstr "" + +#: lib/tabs/excerpts-tab.php:411 vendor/lib/tabs/excerpts-tab.php:427 +msgid "The breakdown format" +msgstr "" + +#: lib/tabs/excerpts-tab.php:421 +msgid "" +"Use %body%, %title%, %categories%, %tags%, %taxonomies%, %comments%, " +"%customfields%, %author%, %excerpt% and %mysqlcolumns% to display the number " +"of hits (in different parts of the post), %total% for total hits, %score% to " +"display the document weight and %terms% to show how many hits each search " +"term got." +msgstr "" + +#: lib/tabs/indexing-tab.php:117 vendor/lib/tabs/indexing-tab.php:112 +#, php-format +msgid "%s empties the existing index and rebuilds it from scratch." +msgstr "" + +#: lib/tabs/indexing-tab.php:117 vendor/lib/tabs/indexing-tab.php:112 +msgid "Build the index" +msgstr "" + +#: lib/tabs/indexing-tab.php:119 vendor/lib/tabs/indexing-tab.php:114 +#, php-format +msgid "" +"%s doesn't empty the index and only indexes those posts that are not " +"indexed. You can use it if you have to interrupt building the index." +msgstr "" + +#: lib/tabs/indexing-tab.php:119 vendor/lib/tabs/indexing-tab.php:114 +msgid "Index unindexed posts" +msgstr "" + +#: lib/tabs/indexing-tab.php:122 vendor/lib/tabs/indexing-tab.php:117 +msgid "This doesn't index any taxonomy terms or users." +msgstr "" + +#: lib/tabs/indexing-tab.php:129 vendor/lib/tabs/indexing-tab.php:124 +msgid "Time elapsed" +msgstr "" + +#: lib/tabs/indexing-tab.php:129 vendor/lib/tabs/indexing-tab.php:124 +msgid "Time remaining" +msgstr "" + +#: lib/tabs/indexing-tab.php:129 vendor/lib/tabs/indexing-tab.php:124 +msgid "some time" +msgstr "" + +#: lib/tabs/indexing-tab.php:131 vendor/lib/tabs/indexing-tab.php:126 +msgid "" +"Indexing should respond quickly. If nothing happens in couple of minutes, " +"it's probably stuck. The most common reasons for indexing issues are " +"incompatible shortcodes, so try disabling the shortcode expansion setting " +"and try again. Also, if you've just updated Relevanssi, doing a hard refresh " +"in your browser will make sure your browser is not trying to use an outdated " +"version of the Relevanssi scripts." +msgstr "" + +#: lib/tabs/indexing-tab.php:135 vendor/lib/tabs/indexing-tab.php:130 +msgid "State of the index" +msgstr "" + +#: lib/tabs/indexing-tab.php:136 vendor/lib/tabs/indexing-tab.php:131 +msgid "document in the index." +msgstr "" + +#: lib/tabs/indexing-tab.php:138 vendor/lib/tabs/indexing-tab.php:133 +msgid "user in the index." +msgstr "" + +#: lib/tabs/indexing-tab.php:139 vendor/lib/tabs/indexing-tab.php:134 +msgid "taxonomy term in the index." +msgstr "" + +#: lib/tabs/indexing-tab.php:142 vendor/lib/tabs/indexing-tab.php:137 +msgid "term in the index." +msgstr "" + +#: lib/tabs/indexing-tab.php:143 vendor/lib/tabs/indexing-tab.php:138 +msgid "is the lowest post ID indexed." +msgstr "" + +#: lib/tabs/indexing-tab.php:145 +#, php-format +msgid "" +"These values may be inaccurate. If you need exact values, %1$supdate the " +"counts%2$s" +msgstr "" + +#: lib/tabs/indexing-tab.php:155 vendor/lib/tabs/indexing-tab.php:148 +msgid "" +"WARNING: You've chosen no post types to index. Nothing will be indexed. " +"Choose some post types to index." +msgstr "" + +#: lib/tabs/indexing-tab.php:160 vendor/lib/tabs/indexing-tab.php:153 +msgid "Indexing options" +msgstr "" + +#: lib/tabs/indexing-tab.php:162 vendor/lib/tabs/indexing-tab.php:155 +msgid "" +"Any changes to the settings on this page require reindexing before they take " +"effect." +msgstr "" + +#: lib/tabs/indexing-tab.php:166 vendor/lib/tabs/indexing-tab.php:159 +msgid "Post types" +msgstr "" + +#: lib/tabs/indexing-tab.php:170 +msgid "Post types to index" +msgstr "" + +#: lib/tabs/indexing-tab.php:174 vendor/lib/tabs/indexing-tab.php:165 +msgid "Type" +msgstr "" + +#: lib/tabs/indexing-tab.php:175 lib/tabs/indexing-tab.php:267 +#: vendor/lib/tabs/indexing-tab.php:166 vendor/lib/tabs/indexing-tab.php:226 +msgid "Index" +msgstr "" + +#: lib/tabs/indexing-tab.php:176 vendor/lib/tabs/indexing-tab.php:167 +msgid "Excluded from search?" +msgstr "" + +#: lib/tabs/indexing-tab.php:193 +#, php-format +msgid "Index post type %s" +msgstr "" + +#: lib/tabs/indexing-tab.php:195 lib/tabs/indexing-tab.php:289 +#: vendor/lib/tabs/indexing-tab.php:184 vendor/lib/tabs/indexing-tab.php:244 +msgid "yes" +msgstr "" + +#: lib/tabs/indexing-tab.php:197 +#, php-format +msgid "Post type %s is excluded from search" +msgstr "" + +#: lib/tabs/indexing-tab.php:199 lib/tabs/indexing-tab.php:285 +#: vendor/lib/tabs/indexing-tab.php:186 vendor/lib/tabs/indexing-tab.php:242 +msgid "no" +msgstr "" + +#: lib/tabs/indexing-tab.php:201 +#, php-format +msgid "Post type %s can be searched" +msgstr "" + +#: lib/tabs/indexing-tab.php:232 vendor/lib/tabs/indexing-tab.php:212 +msgid "" +"If you want to index a post type that's marked 'Excluded from search', you " +"can do that without worrying about it – but you need to uncheck the 'Respect " +"exclude_from_search' setting from the Searching tab." +msgstr "" + +#: lib/tabs/indexing-tab.php:244 +msgid "Index image files" +msgstr "" + +#: lib/tabs/indexing-tab.php:249 +msgid "Index image attachments" +msgstr "" + +#: lib/tabs/indexing-tab.php:251 +msgid "" +"If this option is enabled, Relevanssi will include image attachments in the " +"index. If the option is disabled, only other attachment types are included." +msgstr "" + +#: lib/tabs/indexing-tab.php:253 +#, php-format +msgid "" +"For more detailed control over the attachment type indexing, see " +"%1$sControlling attachment types in the Knowledge base%2$s." +msgstr "" + +#: lib/tabs/indexing-tab.php:259 vendor/lib/tabs/indexing-tab.php:218 +msgid "Taxonomies" +msgstr "" + +#: lib/tabs/indexing-tab.php:266 vendor/lib/tabs/indexing-tab.php:225 +msgid "Taxonomy" +msgstr "" + +#: lib/tabs/indexing-tab.php:268 vendor/lib/tabs/indexing-tab.php:227 +msgid "Public?" +msgstr "" + +#: lib/tabs/indexing-tab.php:284 +#, php-format +msgid "Index taxonomy %s" +msgstr "" + +#: lib/tabs/indexing-tab.php:287 +#, php-format +msgid "Taxonomy %s is not public" +msgstr "" + +#: lib/tabs/indexing-tab.php:291 +#, php-format +msgid "Taxonomy %s is public" +msgstr "" + +#: lib/tabs/indexing-tab.php:313 vendor/lib/tabs/indexing-tab.php:258 +msgid "" +"If you check a taxonomy here, the terms for that taxonomy are indexed with " +"the posts. If you for example choose \"post_tag\", searching for a tag will " +"find all posts that have the tag." +msgstr "" + +#: lib/tabs/indexing-tab.php:324 lib/tabs/indexing-tab.php:338 +#: vendor/lib/tabs/indexing-tab.php:269 vendor/lib/tabs/indexing-tab.php:283 +msgid "none" +msgstr "" + +#: lib/tabs/indexing-tab.php:325 vendor/lib/tabs/indexing-tab.php:270 +msgid "comments" +msgstr "" + +#: lib/tabs/indexing-tab.php:326 vendor/lib/tabs/indexing-tab.php:271 +msgid "comments and pingbacks" +msgstr "" + +#: lib/tabs/indexing-tab.php:328 vendor/lib/tabs/indexing-tab.php:273 +msgid "" +"If you choose to index comments, you can choose if you want to index just " +"comments, or everything including comments and track- and pingbacks." +msgstr "" + +#: lib/tabs/indexing-tab.php:339 vendor/lib/tabs/indexing-tab.php:284 +msgid "all" +msgstr "" + +#: lib/tabs/indexing-tab.php:340 vendor/lib/tabs/indexing-tab.php:285 +msgid "visible" +msgstr "" + +#: lib/tabs/indexing-tab.php:341 lib/tabs/indexing-tab.php:373 +#: vendor/lib/tabs/indexing-tab.php:286 vendor/lib/tabs/indexing-tab.php:318 +msgid "some" +msgstr "" + +#: lib/tabs/indexing-tab.php:345 vendor/lib/tabs/indexing-tab.php:290 +msgid "'All' indexes all custom fields for posts." +msgstr "" + +#: lib/tabs/indexing-tab.php:347 vendor/lib/tabs/indexing-tab.php:292 +msgid "" +"'Visible' only includes the custom fields that are visible in the user " +"interface (with names that don't start with an underscore)." +msgstr "" + +#: lib/tabs/indexing-tab.php:349 vendor/lib/tabs/indexing-tab.php:294 +msgid "'Some' lets you choose individual custom fields to index." +msgstr "" + +#: lib/tabs/indexing-tab.php:355 vendor/lib/tabs/indexing-tab.php:300 +msgid "" +"Advanced Custom Fields has lots of invisible custom fields with meta data. " +"Selecting \"all\" will include lots of garbage in the index and excerpts. " +"\"Visible\" is usually a better option with ACF." +msgstr "" + +#: lib/tabs/indexing-tab.php:366 vendor/lib/tabs/indexing-tab.php:311 +msgid "Custom fields to index" +msgstr "" + +#: lib/tabs/indexing-tab.php:368 vendor/lib/tabs/indexing-tab.php:313 +msgid "" +"Enter a comma-separated list of custom fields to include in the index. With " +"Relevanssi Premium, you can also use 'fieldname_%_subfieldname' notation for " +"ACF repeater fields." +msgstr "" + +#: lib/tabs/indexing-tab.php:369 vendor/lib/tabs/indexing-tab.php:314 +msgid "" +"You can use 'relevanssi_index_custom_fields' filter hook to adjust which " +"custom fields are indexed." +msgstr "" + +#: lib/tabs/indexing-tab.php:373 vendor/lib/tabs/indexing-tab.php:318 +#, php-format +msgid "" +"If you want the SKU included, choose %1$s and enter %2$s. Also see the " +"contextual help for more details." +msgstr "" + +#: lib/tabs/indexing-tab.php:380 vendor/lib/tabs/indexing-tab.php:325 +msgid "Author display names" +msgstr "" + +#: lib/tabs/indexing-tab.php:385 vendor/lib/tabs/indexing-tab.php:329 +#: vendor/lib/tabs/indexing-tab.php:332 +msgid "Index the post author display name" +msgstr "" + +#: lib/tabs/indexing-tab.php:387 vendor/lib/tabs/indexing-tab.php:334 +msgid "" +"Searching for the post author display name will return posts by that author." +msgstr "" + +#: lib/tabs/indexing-tab.php:398 vendor/lib/tabs/indexing-tab.php:345 +#: vendor/lib/tabs/indexing-tab.php:348 vendor/lib/tabs/indexing-tab.php:369 +msgid "Index the post excerpt" +msgstr "" + +#: lib/tabs/indexing-tab.php:400 vendor/lib/tabs/indexing-tab.php:350 +msgid "Relevanssi will find posts by the content in the excerpt." +msgstr "" + +#: lib/tabs/indexing-tab.php:402 vendor/lib/tabs/indexing-tab.php:352 +msgid "" +"WooCommerce stores the product short description in the excerpt, so it's a " +"good idea to index excerpts." +msgstr "" + +#: lib/tabs/indexing-tab.php:409 vendor/lib/tabs/indexing-tab.php:360 +msgid "Shortcodes" +msgstr "" + +#: lib/tabs/indexing-tab.php:414 vendor/lib/tabs/indexing-tab.php:365 +msgid "Expand shortcodes" +msgstr "" + +#: lib/tabs/indexing-tab.php:419 vendor/lib/tabs/indexing-tab.php:372 +msgid "Expand shortcodes when indexing" +msgstr "" + +#: lib/tabs/indexing-tab.php:422 vendor/lib/tabs/indexing-tab.php:375 +msgid "" +"WooCommerce has shortcodes that don't work well with Relevanssi. With " +"WooCommerce, make sure the option is disabled." +msgstr "" + +#: lib/tabs/indexing-tab.php:424 vendor/lib/tabs/indexing-tab.php:377 +msgid "" +"If checked, Relevanssi will expand shortcodes in post content before " +"indexing. Otherwise shortcodes will be stripped." +msgstr "" + +#: lib/tabs/indexing-tab.php:425 vendor/lib/tabs/indexing-tab.php:378 +msgid "" +"If you use shortcodes to include dynamic content, Relevanssi will not keep " +"the index updated, the index will reflect the status of the shortcode " +"content at the moment of indexing." +msgstr "" + +#: lib/tabs/indexing-tab.php:439 vendor/lib/tabs/indexing-tab.php:409 +msgid "Advanced indexing settings" +msgstr "" + +#: lib/tabs/indexing-tab.php:441 vendor/lib/tabs/indexing-tab.php:411 +msgid "Show advanced settings" +msgstr "" + +#: lib/tabs/indexing-tab.php:446 vendor/lib/tabs/indexing-tab.php:416 +msgid "Minimum word length" +msgstr "" + +#: lib/tabs/indexing-tab.php:450 vendor/lib/tabs/indexing-tab.php:420 +msgid "Words shorter than this many letters will not be indexed." +msgstr "" + +#: lib/tabs/indexing-tab.php:452 vendor/lib/tabs/indexing-tab.php:422 +#, php-format +msgid "" +"To enable one-letter searches, you need to add a filter function on the " +"filter hook %1$s that returns %2$s." +msgstr "" + +#: lib/tabs/indexing-tab.php:456 vendor/lib/tabs/indexing-tab.php:426 +msgid "Punctuation control" +msgstr "" + +#: lib/tabs/indexing-tab.php:457 vendor/lib/tabs/indexing-tab.php:427 +msgid "" +"Here you can adjust how the punctuation is controlled. For more information, " +"see help. Remember that any changes here require reindexing, otherwise " +"searches will fail to find posts they should." +msgstr "" + +#: lib/tabs/indexing-tab.php:461 vendor/lib/tabs/indexing-tab.php:431 +msgid "Hyphens and dashes" +msgstr "" + +#: lib/tabs/indexing-tab.php:465 lib/tabs/indexing-tab.php:492 +#: lib/tabs/indexing-tab.php:506 vendor/lib/tabs/indexing-tab.php:435 +#: vendor/lib/tabs/indexing-tab.php:462 vendor/lib/tabs/indexing-tab.php:476 +msgid "Keep" +msgstr "" + +#: lib/tabs/indexing-tab.php:466 lib/tabs/indexing-tab.php:479 +#: lib/tabs/indexing-tab.php:493 lib/tabs/indexing-tab.php:507 +#: vendor/lib/tabs/indexing-tab.php:436 vendor/lib/tabs/indexing-tab.php:449 +#: vendor/lib/tabs/indexing-tab.php:463 vendor/lib/tabs/indexing-tab.php:477 +msgid "Replace with spaces" +msgstr "" + +#: lib/tabs/indexing-tab.php:467 lib/tabs/indexing-tab.php:480 +#: lib/tabs/indexing-tab.php:494 lib/tabs/indexing-tab.php:508 +#: vendor/lib/tabs/indexing-tab.php:437 vendor/lib/tabs/indexing-tab.php:450 +#: vendor/lib/tabs/indexing-tab.php:464 vendor/lib/tabs/indexing-tab.php:478 +msgid "Remove" +msgstr "" + +#: lib/tabs/indexing-tab.php:469 vendor/lib/tabs/indexing-tab.php:439 +msgid "" +"How Relevanssi should handle hyphens and dashes (en and em dashes)? " +"Replacing with spaces is generally the best option, but in some cases " +"removing completely is the best option. Keeping them is rarely the best " +"option." +msgstr "" + +#: lib/tabs/indexing-tab.php:475 vendor/lib/tabs/indexing-tab.php:445 +msgid "Apostrophes and quotes" +msgstr "" + +#: lib/tabs/indexing-tab.php:482 vendor/lib/tabs/indexing-tab.php:452 +msgid "" +"How Relevanssi should handle apostrophes and quotes? It's not possible to " +"keep them; that would lead to problems. Default behaviour is to replace with " +"spaces, but sometimes removing makes sense." +msgstr "" + +#: lib/tabs/indexing-tab.php:488 vendor/lib/tabs/indexing-tab.php:458 +msgid "Ampersands" +msgstr "" + +#: lib/tabs/indexing-tab.php:496 vendor/lib/tabs/indexing-tab.php:466 +msgid "" +"How Relevanssi should handle ampersands? Replacing with spaces is generally " +"the best option, but if you talk a lot about D&D, for example, keeping " +"the ampersands is useful." +msgstr "" + +#: lib/tabs/indexing-tab.php:502 vendor/lib/tabs/indexing-tab.php:472 +msgid "Decimal separators" +msgstr "" + +#: lib/tabs/indexing-tab.php:510 vendor/lib/tabs/indexing-tab.php:480 +msgid "" +"How Relevanssi should handle periods between decimals? Replacing with spaces " +"is the default option, but that often leads to the numbers being removed " +"completely. If you need to search decimal numbers a lot, keep the periods." +msgstr "" + +#: lib/tabs/indexing-tab.php:520 vendor/lib/tabs/indexing-tab.php:498 +msgid "Hide advanced settings" +msgstr "" + +#: lib/tabs/logging-tab.php:33 vendor/lib/tabs/logging-tab.php:33 +msgid "Enable logs" +msgstr "" + +#: lib/tabs/logging-tab.php:37 lib/tabs/logging-tab.php:40 +#: vendor/lib/tabs/logging-tab.php:37 vendor/lib/tabs/logging-tab.php:40 +msgid "Keep a log of user queries." +msgstr "" + +#: lib/tabs/logging-tab.php:47 vendor/lib/tabs/logging-tab.php:47 +#, php-format +msgid "" +"If enabled, Relevanssi will log user queries. The logs can be examined under " +"'%1$s' on the Dashboard admin menu and are stored in the %2$s database table." +msgstr "" + +#: lib/tabs/logging-tab.php:57 vendor/lib/tabs/logging-tab.php:57 +msgid "Log user IP" +msgstr "" + +#: lib/tabs/logging-tab.php:61 lib/tabs/logging-tab.php:64 +#: vendor/lib/tabs/logging-tab.php:61 vendor/lib/tabs/logging-tab.php:64 +msgid "Log the user's IP with the queries." +msgstr "" + +#: lib/tabs/logging-tab.php:67 vendor/lib/tabs/logging-tab.php:67 +msgid "" +"If enabled, Relevanssi will log user's IP adress with the queries. Note that " +"this may be illegal where you live, and in EU will create a person registry " +"that falls under the GDPR." +msgstr "" + +#: lib/tabs/logging-tab.php:72 vendor/lib/tabs/logging-tab.php:72 +msgid "Exclude users" +msgstr "" + +#: lib/tabs/logging-tab.php:76 vendor/lib/tabs/logging-tab.php:76 +msgid "" +"Comma-separated list of numeric user IDs or user login names that will not " +"be logged." +msgstr "" + +#: lib/tabs/logging-tab.php:86 vendor/lib/tabs/logging-tab.php:86 +msgid "Trim logs" +msgstr "" + +#: lib/tabs/logging-tab.php:90 vendor/lib/tabs/logging-tab.php:90 +msgid "How many days of logs to keep in the database." +msgstr "" + +#: lib/tabs/logging-tab.php:94 vendor/lib/tabs/logging-tab.php:94 +msgid "" +"Big log database table will eventually start to slow down the search, so " +"it's a good idea to use some level of automatic log trimming." +msgstr "" + +#: lib/tabs/logging-tab.php:99 vendor/lib/tabs/logging-tab.php:99 +#, php-format +msgid " Set to %d for no trimming." +msgstr "" + +#: lib/tabs/logging-tab.php:108 vendor/lib/tabs/logging-tab.php:108 +msgid "Export logs" +msgstr "" + +#: lib/tabs/logging-tab.php:111 vendor/lib/tabs/logging-tab.php:111 +msgid "Export the log as a CSV file" +msgstr "" + +#: lib/tabs/logging-tab.php:112 vendor/lib/tabs/logging-tab.php:112 +msgid "Push the button to export the search log as a CSV file." +msgstr "" + +#: lib/tabs/overview-tab.php:22 vendor/lib/tabs/overview-tab.php:22 +msgid "Welcome to Relevanssi!" +msgstr "" + +#: lib/tabs/overview-tab.php:38 vendor/lib/tabs/overview-tab.php:38 +msgid "Getting started" +msgstr "" + +#: lib/tabs/overview-tab.php:40 vendor/lib/tabs/overview-tab.php:40 +msgid "" +"You've already installed Relevanssi. That's a great first step towards good " +"search experience!" +msgstr "" + +#: lib/tabs/overview-tab.php:44 vendor/lib/tabs/overview-tab.php:44 +#, php-format +msgid "" +"Now, you need an index. Head over to the %1$s%2$s%3$s tab to set up the " +"basic indexing options and to build the index." +msgstr "" + +#: lib/tabs/overview-tab.php:45 vendor/lib/tabs/overview-tab.php:45 +msgid "You need to check at least the following options:" +msgstr "" + +#: lib/tabs/overview-tab.php:46 vendor/lib/tabs/overview-tab.php:46 +msgid "Make sure the post types you want to include in the index are indexed." +msgstr "" + +#: lib/tabs/overview-tab.php:48 vendor/lib/tabs/overview-tab.php:48 +#, php-format +msgid "" +"Do you use custom fields to store content you want included? If so, add " +"those too. WooCommerce user? You probably want to include %s." +msgstr "" + +#: lib/tabs/overview-tab.php:49 vendor/lib/tabs/overview-tab.php:49 +msgid "" +"Then just save the options and build the index. First time you have to do it " +"manually, but after that, it's fully automatic: all changes are reflected in " +"the index without reindexing. (That said, it's a good idea to rebuild the " +"index once a year.)" +msgstr "" + +#: lib/tabs/overview-tab.php:52 vendor/lib/tabs/overview-tab.php:52 +msgid "Great, you already have an index!" +msgstr "" + +#: lib/tabs/overview-tab.php:56 vendor/lib/tabs/overview-tab.php:56 +#, php-format +msgid "" +"On the %1$s%2$s%3$s tab, choose whether you want the default operator to be " +"AND (less results, but more precise) or OR (more results, less precise)." +msgstr "" + +#: lib/tabs/overview-tab.php:60 vendor/lib/tabs/overview-tab.php:60 +#, php-format +msgid "" +"The next step is the %1$s%2$s%3$s tab, where you can enable the custom " +"excerpts that show the relevant part of post in the search results pages." +msgstr "" + +#: lib/tabs/overview-tab.php:61 vendor/lib/tabs/overview-tab.php:61 +msgid "" +"There are couple of options related to that, so if you want highlighting in " +"the results, you can adjust the styles for that to suit the look of your " +"site." +msgstr "" + +#: lib/tabs/overview-tab.php:64 vendor/lib/tabs/overview-tab.php:64 +msgid "" +"That's about it! Now you should have Relevanssi up and running. The rest of " +"the options is mostly fine-tuning." +msgstr "" + +#: lib/tabs/overview-tab.php:67 vendor/lib/tabs/overview-tab.php:67 +msgid "" +"Relevanssi doesn't have a separate search widget. Instead, Relevanssi uses " +"the default search widget. Any standard search form will do!" +msgstr "" + +#: lib/tabs/overview-tab.php:71 vendor/lib/tabs/overview-tab.php:71 +msgid "Privacy and GDPR compliance" +msgstr "" + +#: lib/tabs/overview-tab.php:74 vendor/lib/tabs/overview-tab.php:74 +#, php-format +msgid "" +"%1$sGDPR Compliance at Relevanssi knowledge base%2$s explains how using " +"Relevanssi affects the GDPR compliance and the privacy policies of your " +"site. Relevanssi also supports the %3$sprivacy policy tool%2$s and the " +"WordPress user data export and erase tools." +msgstr "" + +#: lib/tabs/overview-tab.php:78 vendor/lib/tabs/overview-tab.php:78 +msgid "For more information" +msgstr "" + +#: lib/tabs/overview-tab.php:80 vendor/lib/tabs/overview-tab.php:80 +msgid "" +"Relevanssi uses the WordPress contextual help. Click 'Help' on the top right " +"corner for more information on many Relevanssi topics." +msgstr "" + +#: lib/tabs/overview-tab.php:82 vendor/lib/tabs/overview-tab.php:82 +#, php-format +msgid "" +"%1$sRelevanssi knowledge base%2$s has lots of information about advanced " +"Relevanssi use, including plenty of code samples." +msgstr "" + +#: lib/tabs/overview-tab.php:86 vendor/lib/tabs/overview-tab.php:86 +msgid "Do you like Relevanssi?" +msgstr "" + +#: lib/tabs/overview-tab.php:88 vendor/lib/tabs/overview-tab.php:88 +msgid "" +"If you do, the best way to show your appreciation is to spread the word and " +"perhaps give us a good review on WordPress.org." +msgstr "" + +#: lib/tabs/overview-tab.php:90 vendor/lib/tabs/overview-tab.php:90 +#, php-format +msgid "" +"If you like Relevanssi, leaving a five-star review on WordPress.org will " +"help others discover Relevanssi. %1$sYou can add your review here%2$s." +msgstr "" + +#: lib/tabs/overview-tab.php:95 vendor/lib/tabs/overview-tab.php:95 +msgid "Relevanssi on Facebook" +msgstr "" + +#: lib/tabs/overview-tab.php:98 vendor/lib/tabs/overview-tab.php:98 +msgid "" +"Check out the Relevanssi page on Facebook for news and updates about " +"Relevanssi." +msgstr "" + +#: lib/tabs/overview-tab.php:104 vendor/lib/tabs/overview-tab.php:104 +msgid "Buy Relevanssi Premium" +msgstr "" + +#: lib/tabs/overview-tab.php:107 vendor/lib/tabs/overview-tab.php:107 +msgid "Buy Relevanssi Premium now" +msgstr "" + +#: lib/tabs/overview-tab.php:109 vendor/lib/tabs/overview-tab.php:109 +#, php-format +msgid "" +"use coupon code %1$s for 20%% discount (valid at least until the end of %2$s)" +msgstr "" + +#: lib/tabs/overview-tab.php:110 vendor/lib/tabs/overview-tab.php:110 +msgid "Here are some improvements Relevanssi Premium offers:" +msgstr "" + +#: lib/tabs/overview-tab.php:112 vendor/lib/tabs/overview-tab.php:112 +msgid "PDF content indexing" +msgstr "" + +#: lib/tabs/overview-tab.php:113 vendor/lib/tabs/overview-tab.php:113 +msgid "A Related posts feature" +msgstr "" + +#: lib/tabs/overview-tab.php:114 vendor/lib/tabs/overview-tab.php:114 +msgid "Index and search user profile pages" +msgstr "" + +#: lib/tabs/overview-tab.php:115 vendor/lib/tabs/overview-tab.php:115 +msgid "Index and search taxonomy term pages" +msgstr "" + +#: lib/tabs/overview-tab.php:116 vendor/lib/tabs/overview-tab.php:116 +msgid "Multisite searches across many subsites" +msgstr "" + +#: lib/tabs/overview-tab.php:117 vendor/lib/tabs/overview-tab.php:117 +msgid "WP CLI commands" +msgstr "" + +#: lib/tabs/overview-tab.php:118 vendor/lib/tabs/overview-tab.php:118 +msgid "Adjust weights separately for each post type and taxonomy" +msgstr "" + +#: lib/tabs/overview-tab.php:119 vendor/lib/tabs/overview-tab.php:119 +msgid "Internal link anchors can be search terms for the target posts" +msgstr "" + +#: lib/tabs/overview-tab.php:120 vendor/lib/tabs/overview-tab.php:120 +msgid "Index and search any columns in the wp_posts database" +msgstr "" + +#: lib/tabs/overview-tab.php:121 vendor/lib/tabs/overview-tab.php:121 +msgid "" +"Hide Relevanssi branding from the User Searches page on a client installation" +msgstr "" + +#: lib/tabs/overview-tab.php:122 vendor/lib/tabs/overview-tab.php:122 +msgid "Redirect search queries to custom URLs" +msgstr "" + +#: lib/tabs/redirects-tab.php:20 vendor/lib/tabs/redirects-tab.php:20 +msgid "" +"With Relevanssi Premium, you can set up redirects. These are keywords that " +"automatically redirect the user to certain page, without going through the " +"usual search process. For example, you could set it up so that all searches " +"for \"job\" automatically lead to your \"Careers\" page." +msgstr "" + +#: lib/tabs/search-page.php:18 vendor/lib/tabs/search-page.php:18 +msgid "" +"You can use this search to perform Relevanssi searches without any " +"restrictions from WordPress. You can search all post types here." +msgstr "" + +#: lib/tabs/search-page.php:24 vendor/lib/tabs/search-page.php:24 +msgid "Search terms" +msgstr "" + +#: lib/tabs/search-page.php:32 vendor/lib/tabs/search-page.php:32 +msgid "Post type" +msgstr "" + +#: lib/tabs/search-page.php:36 vendor/lib/tabs/search-page.php:36 +msgid "Any" +msgstr "" + +#: lib/tabs/search-page.php:59 vendor/lib/tabs/search-page.php:59 +msgid "Posts per page" +msgstr "" + +#: lib/tabs/search-page.php:63 vendor/lib/tabs/search-page.php:63 +msgid "All" +msgstr "" + +#: lib/tabs/search-page.php:72 vendor/lib/tabs/search-page.php:72 +msgid "Search parameters" +msgstr "" + +#: lib/tabs/search-page.php:77 vendor/lib/tabs/search-page.php:77 +#, php-format +msgid "" +"Use query parameter formatting here, the same that would appear on search " +"page results URL. For example %s." +msgstr "" + +#: lib/tabs/searching-tab.php:66 vendor/lib/tabs/searching-tab.php:66 +msgid "Default operator" +msgstr "" + +#: lib/tabs/searching-tab.php:70 vendor/lib/tabs/searching-tab.php:70 +msgid "AND - require all terms" +msgstr "" + +#: lib/tabs/searching-tab.php:71 vendor/lib/tabs/searching-tab.php:71 +msgid "OR - any term present is enough" +msgstr "" + +#: lib/tabs/searching-tab.php:73 vendor/lib/tabs/searching-tab.php:73 +msgid "This setting determines the default operator for the search." +msgstr "" + +#: lib/tabs/searching-tab.php:77 vendor/lib/tabs/searching-tab.php:77 +#, php-format +msgid "" +"You can override this setting with the %1$s query parameter, like this: %2$s" +msgstr "" + +#: lib/tabs/searching-tab.php:84 vendor/lib/tabs/searching-tab.php:84 +msgid "Fallback to OR" +msgstr "" + +#: lib/tabs/searching-tab.php:88 lib/tabs/searching-tab.php:91 +#: vendor/lib/tabs/searching-tab.php:88 vendor/lib/tabs/searching-tab.php:91 +msgid "Disable the OR fallback." +msgstr "" + +#: lib/tabs/searching-tab.php:94 vendor/lib/tabs/searching-tab.php:94 +msgid "" +"By default, if AND search fails to find any results, Relevanssi will switch " +"the operator to OR and run the search again. You can prevent that by " +"checking this option." +msgstr "" + +#: lib/tabs/searching-tab.php:99 vendor/lib/tabs/searching-tab.php:99 +msgid "Default order" +msgstr "" + +#: lib/tabs/searching-tab.php:103 vendor/lib/tabs/searching-tab.php:103 +msgid "Relevance (highly recommended)" +msgstr "" + +#: lib/tabs/searching-tab.php:104 vendor/lib/tabs/searching-tab.php:104 +msgid "Post date" +msgstr "" + +#: lib/tabs/searching-tab.php:107 vendor/lib/tabs/searching-tab.php:107 +#, php-format +msgid "" +"If you want to override this or use multi-layered ordering (eg. first order " +"by relevance, but sort ties by post title), you can use the %s query " +"variable. See Help for more information." +msgstr "" + +#: lib/tabs/searching-tab.php:109 vendor/lib/tabs/searching-tab.php:109 +msgid "" +" If you want date-based results, see the recent post bonus in the Weights " +"section." +msgstr "" + +#: lib/tabs/searching-tab.php:115 vendor/lib/tabs/searching-tab.php:115 +msgid "Keyword matching" +msgstr "" + +#: lib/tabs/searching-tab.php:119 vendor/lib/tabs/searching-tab.php:119 +msgid "Whole words" +msgstr "" + +#: lib/tabs/searching-tab.php:120 lib/tabs/searching-tab.php:125 +#: vendor/lib/tabs/searching-tab.php:120 vendor/lib/tabs/searching-tab.php:125 +msgid "Partial words" +msgstr "" + +#: lib/tabs/searching-tab.php:121 vendor/lib/tabs/searching-tab.php:121 +msgid "Partial words if no hits for whole words" +msgstr "" + +#: lib/tabs/searching-tab.php:125 vendor/lib/tabs/searching-tab.php:125 +#, php-format +msgid "" +"Choosing the \"%1$s\" option may lead to unexpected results. Most of the " +"time the \"%2$s\" option is the better choice." +msgstr "" + +#: lib/tabs/searching-tab.php:125 vendor/lib/tabs/searching-tab.php:125 +msgid "Partial words if not hits for whole words" +msgstr "" + +#: lib/tabs/searching-tab.php:127 vendor/lib/tabs/searching-tab.php:127 +msgid "" +"Whole words means Relevanssi only finds posts that include the whole search " +"term." +msgstr "" + +#: lib/tabs/searching-tab.php:128 vendor/lib/tabs/searching-tab.php:128 +msgid "" +"Partial words also includes cases where the word in the index begins or ends " +"with the search term (searching for 'ana' will match 'anaconda' or 'banana', " +"but not 'banal'). See Help, if you want to make Relevanssi match also inside " +"words." +msgstr "" + +#: lib/tabs/searching-tab.php:133 vendor/lib/tabs/searching-tab.php:133 +msgid "Weights" +msgstr "" + +#: lib/tabs/searching-tab.php:136 vendor/lib/tabs/searching-tab.php:136 +msgid "" +"All the weights in the table are multipliers. To increase the weight of an " +"element, use a higher number. To make an element less significant, use a " +"number lower than 1." +msgstr "" + +#: lib/tabs/searching-tab.php:140 vendor/lib/tabs/searching-tab.php:140 +msgid "Element" +msgstr "" + +#: lib/tabs/searching-tab.php:141 vendor/lib/tabs/searching-tab.php:141 +msgid "Weight" +msgstr "" + +#: lib/tabs/searching-tab.php:146 vendor/lib/tabs/searching-tab.php:146 +msgid "Content" +msgstr "" + +#: lib/tabs/searching-tab.php:154 vendor/lib/tabs/searching-tab.php:154 +msgid "Titles" +msgstr "" + +#: lib/tabs/searching-tab.php:167 vendor/lib/tabs/searching-tab.php:167 +msgid "Comment text" +msgstr "" + +#: lib/tabs/searching-tab.php:196 vendor/lib/tabs/searching-tab.php:196 +msgid "Boost exact matches" +msgstr "" + +#: lib/tabs/searching-tab.php:200 lib/tabs/searching-tab.php:203 +#: vendor/lib/tabs/searching-tab.php:200 vendor/lib/tabs/searching-tab.php:203 +msgid "Give boost to exact matches." +msgstr "" + +#: lib/tabs/searching-tab.php:207 vendor/lib/tabs/searching-tab.php:207 +#, php-format +msgid "" +"If you enable this option, matches where the search query appears in title " +"or content as a phrase will get a weight boost. To adjust the boost, you can " +"use the %s filter hook. See Help for more details." +msgstr "" + +#: lib/tabs/searching-tab.php:215 vendor/lib/tabs/searching-tab.php:215 +msgid "WPML" +msgstr "" + +#: lib/tabs/searching-tab.php:219 lib/tabs/searching-tab.php:222 +#: vendor/lib/tabs/searching-tab.php:219 vendor/lib/tabs/searching-tab.php:222 +msgid "Limit results to current language." +msgstr "" + +#: lib/tabs/searching-tab.php:225 vendor/lib/tabs/searching-tab.php:225 +msgid "" +"Enabling this option will restrict the results to the currently active " +"language. If the option is disabled, results will include posts in all " +"languages." +msgstr "" + +#: lib/tabs/searching-tab.php:232 vendor/lib/tabs/searching-tab.php:232 +msgid "Polylang" +msgstr "" + +#: lib/tabs/searching-tab.php:236 lib/tabs/searching-tab.php:239 +#: vendor/lib/tabs/searching-tab.php:236 vendor/lib/tabs/searching-tab.php:239 +msgid "Allow results from all languages." +msgstr "" + +#: lib/tabs/searching-tab.php:242 vendor/lib/tabs/searching-tab.php:242 +msgid "" +"By default Polylang restricts the search to the current language. Enabling " +"this option will lift this restriction." +msgstr "" + +#: lib/tabs/searching-tab.php:252 lib/tabs/searching-tab.php:255 +#: vendor/lib/tabs/searching-tab.php:252 vendor/lib/tabs/searching-tab.php:255 +msgid "Use Relevanssi for admin searches." +msgstr "" + +#: lib/tabs/searching-tab.php:258 vendor/lib/tabs/searching-tab.php:258 +msgid "" +"If checked, Relevanssi will be used for searches in the admin interface. The " +"page search doesn't use Relevanssi, because WordPress works like that." +msgstr "" + +#: lib/tabs/searching-tab.php:264 vendor/lib/tabs/searching-tab.php:264 +#, php-format +msgid "Respect %s" +msgstr "" + +#: lib/tabs/searching-tab.php:268 vendor/lib/tabs/searching-tab.php:268 +msgid "Respect exclude_from_search for custom post types" +msgstr "" + +#: lib/tabs/searching-tab.php:272 vendor/lib/tabs/searching-tab.php:272 +#, php-format +msgid "Respect %s for custom post types" +msgstr "" + +#: lib/tabs/searching-tab.php:274 vendor/lib/tabs/searching-tab.php:274 +msgid "" +"If checked, Relevanssi won't display posts of custom post types that have " +"'exclude_from_search' set to true." +msgstr "" + +#: lib/tabs/searching-tab.php:286 vendor/lib/tabs/searching-tab.php:286 +msgid "" +"You probably should uncheck this option, because you've set Relevanssi to " +"index the following non-public post types:" +msgstr "" + +#: lib/tabs/searching-tab.php:299 vendor/lib/tabs/searching-tab.php:299 +msgid "Throttle searches" +msgstr "" + +#: lib/tabs/searching-tab.php:309 vendor/lib/tabs/searching-tab.php:309 +msgid "Throttling the search does not work when sorting the posts by date." +msgstr "" + +#: lib/tabs/searching-tab.php:319 lib/tabs/searching-tab.php:322 +#: vendor/lib/tabs/searching-tab.php:319 vendor/lib/tabs/searching-tab.php:322 +msgid "Throttle searches." +msgstr "" + +#: lib/tabs/searching-tab.php:326 vendor/lib/tabs/searching-tab.php:326 +msgid "Your database is so small that you don't need to enable this." +msgstr "" + +#: lib/tabs/searching-tab.php:328 vendor/lib/tabs/searching-tab.php:328 +msgid "" +"If this option is checked, Relevanssi will limit search results to at most " +"500 results per term. This will improve performance, but may cause some " +"relevant documents to go unfound. See Help for more details." +msgstr "" + +#: lib/tabs/searching-tab.php:334 lib/tabs/searching-tab.php:340 +#: vendor/lib/tabs/searching-tab.php:334 vendor/lib/tabs/searching-tab.php:340 +msgid "Category restriction" +msgstr "" + +#: lib/tabs/searching-tab.php:360 vendor/lib/tabs/searching-tab.php:360 +msgid "" +"You can restrict search results to a category for all searches. For " +"restricting on a per-search basis and more options (eg. tag restrictions), " +"see Help." +msgstr "" + +#: lib/tabs/searching-tab.php:365 lib/tabs/searching-tab.php:371 +#: vendor/lib/tabs/searching-tab.php:365 vendor/lib/tabs/searching-tab.php:371 +msgid "Category exclusion" +msgstr "" + +#: lib/tabs/searching-tab.php:391 vendor/lib/tabs/searching-tab.php:391 +msgid "" +"Posts in these categories are not included in search results. To exclude the " +"posts completely from the index, see Help." +msgstr "" + +#: lib/tabs/searching-tab.php:396 vendor/lib/tabs/searching-tab.php:396 +msgid "Post exclusion" +msgstr "" + +#: lib/tabs/searching-tab.php:400 vendor/lib/tabs/searching-tab.php:400 +msgid "" +"Enter a comma-separated list of post or page ID's to exclude those pages " +"from the search results." +msgstr "" + +#: lib/tabs/searching-tab.php:402 vendor/lib/tabs/searching-tab.php:402 +msgid "" +"With Relevanssi Premium, it's better to use the check box on post edit " +"pages. That will remove the posts completely from the index, and will work " +"with multisite searches unlike this setting." +msgstr "" + +#: lib/tabs/stopwords-tab.php:25 vendor/lib/tabs/stopwords-tab.php:25 +msgid "Content stopwords" +msgstr "" + +#: lib/tabs/stopwords-tab.php:34 vendor/lib/tabs/stopwords-tab.php:31 +msgid "" +"Content stopwords are a premium feature where you can set stopwords that " +"only apply to the post content. Those stopwords will still be indexed if " +"they appear in post titles, tags, categories, custom fields or other parts " +"of the post. To use content stopwords, you need Relevanssi Premium." +msgstr "" + +#: lib/tabs/stopwords-tab.php:64 vendor/lib/tabs/stopwords-tab.php:59 +msgid "" +"Enter a word here to add it to the list of stopwords. The word will " +"automatically be removed from the index, so re-indexing is not necessary. " +"You can enter many words at the same time, separate words with commas." +msgstr "" + +#: lib/tabs/stopwords-tab.php:72 vendor/lib/tabs/stopwords-tab.php:64 +msgid "Stopword(s) to add" +msgstr "" + +#: lib/tabs/stopwords-tab.php:80 vendor/lib/tabs/stopwords-tab.php:72 +msgid "" +"Here's a list of stopwords in the database. Click a word to remove it from " +"stopwords. Removing stopwords won't automatically return them to index, so " +"you need to re-index all posts after removing stopwords to get those words " +"back to index." +msgstr "" + +#: lib/tabs/stopwords-tab.php:85 vendor/lib/tabs/stopwords-tab.php:77 +msgid "Current stopwords" +msgstr "" + +#: lib/tabs/stopwords-tab.php:122 lib/tabs/stopwords-tab.php:125 +#: vendor/lib/tabs/stopwords-tab.php:98 vendor/lib/tabs/stopwords-tab.php:101 +msgid "Exportable list of stopwords" +msgstr "" + +#: lib/tabs/stopwords-tab.php:127 vendor/lib/tabs/stopwords-tab.php:103 +msgid "" +"You can copy the list of stopwords here if you want to back up the list, " +"copy it to a different blog or otherwise need the list." +msgstr "" + +#: lib/tabs/synonyms-tab.php:35 vendor/lib/tabs/synonyms-tab.php:33 +msgid "" +"Add synonyms here to make the searches find better results. If you notice " +"your users frequently misspelling a product name, or for other reasons use " +"many names for one thing, adding synonyms will make the results better." +msgstr "" + +#: lib/tabs/synonyms-tab.php:37 vendor/lib/tabs/synonyms-tab.php:35 +msgid "" +"Do not go overboard, though, as too many synonyms can make the search " +"confusing: users understand if a search query doesn't match everything, but " +"they get confused if the searches match to unexpected things." +msgstr "" + +#: lib/tabs/synonyms-tab.php:41 vendor/lib/tabs/synonyms-tab.php:39 +msgid "" +"The format here is key = value. If you add dog = hound to the list of synonyms, searches for dog automatically " +"become a search for dog hound and will thus match to posts that " +"include either dog or hound. This only works in OR " +"searches: in AND searches the synonyms only restrict the search, as now the " +"search only finds posts that contain both dog " +"and hound." +msgstr "" + +#: lib/tabs/synonyms-tab.php:43 vendor/lib/tabs/synonyms-tab.php:41 +msgid "" +"The synonyms are one direction only. If you want both directions, add the " +"synonym again, reversed: hound = dog." +msgstr "" + +#: lib/tabs/synonyms-tab.php:45 vendor/lib/tabs/synonyms-tab.php:43 +msgid "" +"It's possible to use phrases for the value, but not for the key. dog = " +"\"great dane\" works, but \"great dane\" = dog doesn't." +msgstr "" + +#: lib/tabs/synonyms-tab.php:48 vendor/lib/tabs/synonyms-tab.php:46 +msgid "" +"If you want to use synonyms in AND searches, enable synonym indexing on the " +"Indexing tab." +msgstr "" + +#: lib/utils.php:926 vendor/lib/excerpts-highlights.php:24 +msgid "There is no excerpt because this is a protected post." +msgstr "" + +#: vendor/lib/interface.php:637 +#, php-format +msgid "To reset the logs, type \"reset\" into the box here %1$s and click %2$s" +msgstr "" + +#: vendor/lib/interface.php:838 +msgid "Related" +msgstr "" + +#: vendor/lib/interface.php:839 +msgid "Import / Export options" +msgstr "" + +#: vendor/lib/log.php:171 +msgid "Logged seaches" +msgstr "" + +#: vendor/lib/tabs/excerpts-tab.php:374 +msgid "Highlighting problems with non-ASCII alphabet?" +msgstr "" + +#: vendor/lib/tabs/excerpts-tab.php:390 +msgid "" +"If you use non-ASCII characters (like Cyrillic alphabet) and the highlights " +"don't work, unchecking this option may make the highlights work." +msgstr "" + +#: vendor/lib/tabs/excerpts-tab.php:410 +msgid "Show the breakdown of search hits in the excerpts" +msgstr "" + +#: vendor/lib/tabs/excerpts-tab.php:437 +msgid "" +"Use %body%, %title%, %tags% and %comments% to display the number of hits (in " +"different parts of the post), %total% for total hits, %score% to display the " +"document weight and %terms% to show how many hits each search term got." +msgstr "" + +#: vendor/lib/tabs/indexing-tab.php:211 +#, php-format +msgid "" +"%1$s includes all attachment types. If you want to index only some " +"attachments, see %2$sControlling attachment types in the Knowledge base%3$s." +msgstr "" diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_CN b/wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_CN new file mode 100644 index 00000000..11d00c03 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_CN @@ -0,0 +1,865 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_TW b/wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_TW new file mode 100644 index 00000000..5e13ccad --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopword.zh_TW @@ -0,0 +1,769 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.cs_CZ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.cs_CZ new file mode 100644 index 00000000..9e8b426a --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.cs_CZ @@ -0,0 +1,327 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.de_DE b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.de_DE new file mode 100644 index 00000000..be4105ea --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.de_DE @@ -0,0 +1,1037 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_GB b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_GB new file mode 100644 index 00000000..86215bda --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_GB @@ -0,0 +1,323 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_US b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_US new file mode 100644 index 00000000..86215bda --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.en_US @@ -0,0 +1,323 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.es_ES b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.es_ES new file mode 100644 index 00000000..4dbeea01 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.es_ES @@ -0,0 +1,386 @@ + diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.fi b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.fi new file mode 100644 index 00000000..c9e56028 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.fi @@ -0,0 +1,365 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.fr_FR b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.fr_FR new file mode 100644 index 00000000..87290ad5 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.fr_FR @@ -0,0 +1,72 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.it_IT b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.it_IT new file mode 100644 index 00000000..10aa1b0f --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.it_IT @@ -0,0 +1,666 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/stopwords/stopwords.pt_BR b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.pt_BR new file mode 100644 index 00000000..b0798a02 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/stopwords/stopwords.pt_BR @@ -0,0 +1,173 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/relevanssi/uninstall.php b/wp/wp-content/plugins/relevanssi/uninstall.php new file mode 100644 index 00000000..edcb0ae0 --- /dev/null +++ b/wp/wp-content/plugins/relevanssi/uninstall.php @@ -0,0 +1,31 @@ +get_col( "SELECT blog_id FROM $wpdb->blogs" ); + $old_blogid = $wpdb->blogid; + foreach ( $blogids as $uninstall_blog_id ) { + switch_to_blog( $uninstall_blog_id ); + relevanssi_uninstall_free(); + restore_current_blog(); + } +} else { + relevanssi_uninstall_free(); +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/banner-1544x500.jpg b/wp/wp-content/plugins/sharethis-share-buttons/assets/banner-1544x500.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db1ba7e7e9673fa7579231c23ff2e536a4c513e0 GIT binary patch literal 25738 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/consent-management-platform.svg b/wp/wp-content/plugins/sharethis-share-buttons/assets/consent-management-platform.svg new file mode 100644 index 00000000..2cb00a06 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/assets/consent-management-platform.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/finished-step.png b/wp/wp-content/plugins/sharethis-share-buttons/assets/finished-step.png new file mode 100644 index 0000000000000000000000000000000000000000..b0719a4cbc88aa91118e22bd78a2ed8801d78f26 GIT binary patch literal 2709 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 T)^yFqA4PA^?W7uysI>n8;#7@@ literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/icon-128x128.jpg b/wp/wp-content/plugins/sharethis-share-buttons/assets/icon-128x128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2183cc9209489c0c6bd90c9f32b4ac5b048e7400 GIT binary patch literal 4060 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/inline-setup-logo.png b/wp/wp-content/plugins/sharethis-share-buttons/assets/inline-setup-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9f34ccf32aa31bbd2ed1f9ec2a471216686a97 GIT binary patch literal 60074 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/inline-share-buttons.svg b/wp/wp-content/plugins/sharethis-share-buttons/assets/inline-share-buttons.svg new file mode 100644 index 00000000..7bc99dc4 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/assets/inline-share-buttons.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/screenshot-1.png b/wp/wp-content/plugins/sharethis-share-buttons/assets/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2ea1018cd900557f785777248c87038a38bc42 GIT binary patch literal 174507 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≀h!lteXi>6YgEW7s>VIMf}(H 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 Oor0{YOqJC8PyZL4aVcs5 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/screenshot-2.png b/wp/wp-content/plugins/sharethis-share-buttons/assets/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0741bc4e6857ec8bd549ef1224784cddcdd4223c GIT binary patch literal 168750 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

  • t3M2YJOsvPEj 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 P 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/sharethis-setup-logo.png b/wp/wp-content/plugins/sharethis-share-buttons/assets/sharethis-setup-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..007deab15da779915a3230352e151d757c37371d GIT binary patch literal 50080 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/sharethis-share-buttons/assets/st-loading.gif b/wp/wp-content/plugins/sharethis-share-buttons/assets/st-loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..601d37c728142bb5119a51cfecd720c632c2ba78 GIT binary patch literal 10152 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

    ?t9B%J1338chWlBEu(qK1l~}ip#hq++F^J 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

    ;-xz9G23g0N7 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 + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/sharethis-share-buttons/css/admin.css b/wp/wp-content/plugins/sharethis-share-buttons/css/admin.css new file mode 100644 index 00000000..ead4a313 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/css/admin.css @@ -0,0 +1,1905 @@ +/*Share Buttons Menus*/ +.adBanner { + background-color: transparent; + height: 1px; + width: 1px; +} + +#adblocker-notice { + display: none; +} + +div[title="googlebookmarks"] svg, +div[title="telegram"] svg, +div[title="douban"] svg, +div[title="renren"] svg, +div[title="getpocket"] svg +{ + width: 25px; + height: 24px; + padding-bottom: 10px; +} + +.sharethis-wrap { + background: #ffffff; + padding: 1rem; +} + +.sharethis-wrap .tabs-wrap { + border-bottom: 1px solid #ebebeb; + display: flex; +} + +.sharethis-wrap .tabs-wrap .button-tab { + align-items: center; + color: #3d3d3d; + cursor: pointer; + display: flex; + font-size: 1rem; + font-weight: 400; + margin-right: 2.5rem; + padding-bottom: .75rem; +} + +.sharethis-wrap .tabs-wrap .button-tab.engage { + border-bottom: 2px solid #13682B; + color: #13682B; + font-weight: 600; +} + +.sharethis-wrap .tabs-wrap .button-tab span { + background: #f5f5f5; + border-radius: .5rem; + color: #a3a3a3; + font-size: 12px; + font-weight: 600; + padding: .5rem; + margin-left: 1rem; +} + +.sharethis-wrap .tabs-wrap .button-tab img { + margin-right: .5rem; + width: 1.5rem; +} + +.sharethis-wrap .tabs-wrap .button-tab.engage span { + background: #ECF3EE; + color: #13682B; +} + +.sharethis-wrap input[type=radio] { + display: none; +} + +.sharethis-wrap .share-on input[type=radio]:checked + div { + background: #4089c1; +} + +.sharethis-wrap .share-off input[type=radio]:checked + div { + background: #979797; +} + +.sharethis-wrap .enable-buttons .share-on input[type=radio]:checked + div { + background: #00b300; +} + +.sharethis-wrap .share-off input[type=radio] + div, .sharethis-wrap .share-on input[type=radio] + div { + width: 40px; + height: 40px; + background: #ffffff; + border: 1px solid #c5c5c5; + display: inline-block; +} + +.sharethis-wrap .share-on input[type=radio] + div { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.sharethis-wrap .share-off input[type=radio] + div { + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.sharethis-wrap .form-table label .label-text { + color: #8d8d8d; + text-align: center; + line-height: 40px; +} + +.sharethis-wrap .share-on { + margin-right: -6px; +} + +.sharethis-wrap .share-on input:checked:before, .sharethis-wrap .share-off input:checked:before { + display: none; +} + +.sharethis-wrap input:checked:focus { + box-shadow: none; +} + +.sharethis-wrap input[type=radio]:checked + div { + color: #ffffff; +} + +.sharethis-wrap h2 { + padding: 1.2rem; +} + +.sharethis-wrap h2 span { + border: 1px solid #ffffff; + padding: .4rem .6rem; + border-radius: 5px; + margin-right: 1rem; + font-size: 14px; + cursor: pointer; + font-family: arial, sans-serif; +} + +.sharethis-wrap form { + margin: 0 2rem; +} + +.sharethis-wrap form .form-table tbody { + display: table; + width: 100%; +} + +.sharethis-wrap form .form-table { + display: none; +} + +.sharethis-wrap form .form-table.engage { + display: block; + margin: 5rem auto 0; + max-width: 690px; +} + +.sharethis-wrap form .form-table tr:first-of-type td { + width: 100%; +} + +.sharethis-wrap .form-table th { + min-width: 17.5rem; +} + +.sharethis-wrap .form-table th span { + padding-top: 1rem; + display: block; + color: #6f6f6f; + font-weight: 100; + font-size: 12px; + line-height: 1.5; +} + +.sharethis-wrap .form-table tr { + border-top: solid 1px #d6d6d6; + margin: 2rem 0 0 1.5rem; + padding-top: .5rem; +} + +.sharethis-wrap form .form-table tr:first-of-type { + display: table-row; + border-top: none; +} + +.sharethis-wrap form .form-table tr:nth-child(2) { + border-top: none; +} + +.sharethis-wrap h3 { + font-weight: 100; + line-height: 1.5; +} + +.sharethis-wrap h3 a { + color: #1ca5d8; + text-decoration: none; +} + +.sharethis-wrap .onoff-buttons .option-title { + display: inline-block; + margin-bottom: 2rem; +} + +.sharethis-wrap form .submit { + display: none; + text-align: right; +} + +.sharethis-wrap .enable-tool, +.sharethis-wrap .disable-tool { + background: #13682B; + border-radius: .25rem; + border: none; + color: white; + cursor: pointer; + font-weight: 600; + font-size: 14px; + margin-bottom: 3rem; + outline: none; + padding: .5rem 1.25rem; +} + +.sharethis-wrap .disable-tool { + bottom: 60px; + left: 50%; + position: absolute; + transform: translateX(-50%); +} + +.sharethis-wrap form .submit.engage { + display: block; +} + +.sharethis-wrap .submit #submit { + background: #00b300; + text-shadow: none; + border: 1px solid #009900; + +} + +.sharethis-wrap .submit #reset { + background: #979797; + margin-left: .5rem; + text-shadow: none; + border: 1px solid #727272; + box-shadow: none; +} + +.sharethis-wrap .readonly-input-field input { + background: #ffffff; +} + +.sharethis-wrap .readonly-input-field button { + border-radius: 4px; + font-size: 11px; + background: #efefef; + border: 1px solid #dddddd; + padding: .46rem .6rem; +} + +.sharethis-wrap a.social-login-button { + padding: .4rem; + background: #008ec2; + border: 1px solid #006799; + border-radius: 4px; + color: #ffffff; + text-decoration: none; +} + +.sharethis-wrap form .form-table td { + padding-left: 2rem; +} + +.sharethis-wrap .list-wrapper { + margin: -1.5rem 0 2rem; +} + +.sharethis-wrap .search-st-icon { + padding: 0 9px; + background: url( 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWw0KCTwhRU5USVRZIG5zX2V4dGVuZCAiaHR0cDovL25zLmFkb2JlLmNvbS9FeHRlbnNpYmlsaXR5LzEuMC8iPg0KCTwhRU5USVRZIG5zX2FpICJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlSWxsdXN0cmF0b3IvMTAuMC8iPg0KCTwhRU5USVRZIG5zX2dyYXBocyAiaHR0cDovL25zLmFkb2JlLmNvbS9HcmFwaHMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfdmFycyAiaHR0cDovL25zLmFkb2JlLmNvbS9WYXJpYWJsZXMvMS4wLyI+DQoJPCFFTlRJVFkgbnNfaW1yZXAgImh0dHA6Ly9ucy5hZG9iZS5jb20vSW1hZ2VSZXBsYWNlbWVudC8xLjAvIj4NCgk8IUVOVElUWSBuc19zZncgImh0dHA6Ly9ucy5hZG9iZS5jb20vU2F2ZUZvcldlYi8xLjAvIj4NCgk8IUVOVElUWSBuc19jdXN0b20gImh0dHA6Ly9ucy5hZG9iZS5jb20vR2VuZXJpY0N1c3RvbU5hbWVzcGFjZS8xLjAvIj4NCgk8IUVOVElUWSBuc19hZG9iZV94cGF0aCAiaHR0cDovL25zLmFkb2JlLmNvbS9YUGF0aC8xLjAvIj4NCl0+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zOng9IiZuc19leHRlbmQ7IiB4bWxuczppPSImbnNfYWk7IiB4bWxuczpncmFwaD0iJm5zX2dyYXBoczsiDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIxOC41IDE2LjQgMTYzLjMgMTY1LjYiDQoJIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMTguNSAxNi40IDE2My4zIDE2NS42OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojNjc3MjdGO30NCjwvc3R5bGU+DQo8c3dpdGNoPg0KCTxmb3JlaWduT2JqZWN0IHJlcXVpcmVkRXh0ZW5zaW9ucz0iJm5zX2FpOyIgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSI+DQoJCTxpOnBnZlJlZiAgeGxpbms6aHJlZj0iI2Fkb2JlX2lsbHVzdHJhdG9yX3BnZiI+DQoJCTwvaTpwZ2ZSZWY+DQoJPC9mb3JlaWduT2JqZWN0Pg0KCTxnIGk6ZXh0cmFuZW91cz0ic2VsZiI+DQoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik03OC40LDE3LjJjLTMyLjYsMC01OS4xLDI2LjQtNTkuMSw1OS4xczI2LjQsNTkuMSw1OS4xLDU5LjFjMzIuNiwwLDU5LjEtMjYuNCw1OS4xLTU5LjFTMTExLDE3LjIsNzguNCwxNy4yeg0KCQkJIE03OC40LDEyMC40Yy0yNC40LDAtNDQuMS0xOS43LTQ0LjEtNDQuMVM1NCwzMi4yLDc4LjQsMzIuMmMyNC40LDAsNDQuMSwxOS43LDQ0LjEsNDQuMVMxMDIuNywxMjAuNCw3OC40LDEyMC40eiIvPg0KCQkNCgkJCTxyZWN0IHg9IjExNS41IiB5PSIxMzkuMSIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxIDAuNzA3MSAtMC43MDcxIDAuNzA3MSAxNDkuNzgzMyAtNjEuODg4NSkiIGNsYXNzPSJzdDAiIHdpZHRoPSI2OC4zIiBoZWlnaHQ9IjIxLjQiLz4NCgkJDQoJCQk8cmVjdCB4PSIxMDguMyIgeT0iMTE2IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEgMC43MDcxIC0wLjcwNzEgMC43MDcxIDEyMy42Mjc5IC01MS4wNTQ2KSIgY2xhc3M9InN0MCIgd2lkdGg9IjMwLjMiIGhlaWdodD0iMTUuNSIvPg0KCTwvZz4NCjwvc3dpdGNoPg0KPGk6cGdmICBpZD0iYWRvYmVfaWxsdXN0cmF0b3JfcGdmIj4NCgk8IVtDREFUQVsNCgllSnp0dmVsNjZyalNLUHpkQVBjQUNRUUlZRHd5SlNGaERKa0paQ0lUTWVBa3JCQWdCcnA3dlQvT3RYK1NQQnZMbG9HMWU3L25PYnQzCnB3SExKYWxVVmFvcVZha2lvV1k3VlJwTWVsS0tvK2hnSUJLcHlKSTRuOGlGSVBvMWVESWFMV1p6R2Y0VWE4V0RUSmFpUWFQU1NhNnIKTnJ5VDVObHdNaTRFbVR6Rm9JZDErSGJzWGhaL0I4dVR2MGZEOFVjOEdJdURCemZEK1VnQ2o3N0ZqL0h3L1RkNGtQb1lpYk1aTmZ2cgpJNjUxRFdCVnhUbG94dEJwTnMwSVFZWXRzR3l3ZVFFYmlPTy9RUHZoLzhESEdTN0hnZC9LazhWNEFFQ1ZKLy9BTVFTWkhQZy9DLzZGCkR4dkRsalN6dGFBNG1zNnlOTXZ3T1o2RGpTbWV6VEFzSzJRNFZ1QkJmem1HNGhpR3kyYVlqQ0R3UEFSSFpmTjVqc253ZElZVkFOanEKcEwvNGxzYnpwanpwUzdOWlpUS2F5TE5Dc1BKYkhBY3Z4QS93UkF4MnBORm84bmV3UEJMN1h3R0FNS0ZiSDQ0a2dKdHZjUjVrT0lpcAowZ25EZHN1TDRXaHd1Zmp1U1FCcmJCNyt5blVSeE5zWkFBV2d3cy93NTJ6M0JHQk9ha3Z6T1pnTjZBOGl1M1ZjTm84Qy9JaitpVDIxCnBJOGhXamlBMEplNENsYWVUTDlGK1F1OEM2WXRNQnlUcDdOMGx1ZnlMRnpaUEo5amMxa21td0d6elNBOFpITjVsbUVBQW9RTXhCUkgKQ2JsTWptVjUwSVlYRkpnMzB2ZDBCQllNWVRlZnB3QUNhUnI4TlQ2cTdjRHNVWnNVazh0U09UNEhPcUVGUHAvUEJsT3NJRkFzeC9LOApBTllsbTgwSHVWeU9ZZ1NHcGVrOEw5QTBGK1N6T1FxTUM2eEhOcDlsV1ZhQmFheUQ5TmRRK3JzUXZKeU1KUVhaSlhuZVZ1aUU1MmxhCithczhhUzFHa253N0hzNEJGakx3cDd5QzdvdkpRQnFCOXZyNzlaR0lzSXorWVl5L1NvTWJVZjZRNW9DOEpxUEZIREZBVHVzQnJPYTUKK0Z1Q0pJR2dNZGx1R2F6R0dQUXpub1BoZG9mdjNiOFV0dWwrekF0TVZtbVc3MTVOcGZITjVBNU5KY1hRR1NwTEF3d0FmQWxDTmh0awpXWnJLWlZoYUVMaGNOaWN3UVk3SzBYbUFaSURKWUQ1REI5a01HbVFXTEJYSDYrTm1qTC9xWUVxanVTU1B3WnBwQS9xUDlsNGJEN3FxCjBKQUc1aEVJYUFTd2Z3MTdXVURnVFVEeVYvSVFvSytnNGo3YlBaYUhBNE1Oc213d3AveEJ5d09HaGY3SE1IbVd6ck41MGwveTZIK0EKNjRVY3c3TWt2eWhvQTJReUIxUFExcHJ0Vmk1TUxFcFRGMjB3Q3pEcHl1UWIwdW9NeWl4SURZQnRSNU1QNVpuK0dUMEJyeSttQ2tZVQp1Z0ZrM1pTSFl3Z3pjSW1lNUxyTjBRSThPcFluaStuSitIMFNpQ255dWdrSEk0K3Z4dUREWjdBc0wyYWZ3WnZKWkFSRXNLV0Ira2lCCkFoL0tjK1VkOUR0OGd4S0gwL2gvVFYvNk8wNzlnSWYvVy9xb2lLUFI4RU1XcDUvRHZsTTNEcy8xL3N6UGZIUUpDRlNXRENqb3EvWmYKNzdmYmZiU0lUbU8xUHRJN1VILzJNY0wvUkI5M1VoOW9LMkJMR0FTdmVyL0FGd0FGN2FmQkcxbnNLMHFLM29hQTlvR0Ftb0xtdzc4MAoxQVpSRzRQMjhRMU1qNGlaTEZnYkRNSFlNSDI1dG1uL0xjNzduK2ZEM3N5N3QvUGhlR200NkRkUm52ODlrYjhnMGdhU2FLZ3lCSXY3CkpZSHVsd2FsL0xvNldJVlBSOUo0TU5QeG9IdzFxT1FjWUZqNWpXQ1l2Nzk3azlGdzltMlFudW1YSmhqb3NEK1MycjluYytuYkcxcFYKZWdmek1Ja0s5R3R0L0pjMG1reE56S2kwSTVqdFNCeUxzbTNaenhGdGlXQmpNQURDaHRMOHdRMGl4Tno3Y0R3QVhOVmVET2VTSVhzbQozMU9vS3dmYm4rSlVRclBXV3JaMWdBTGF3RTA3VWlybHZsWGxsU2RRSVp2L0hrbXpRUHBzUFBsN2pMNEVDNEhZRThDQnVCak5YK0xCCjlLWDRMUVdUZ1hSN0NKUktTV3RDQjY4Q3RFbWpZSUlQSXZpaEZhQ3ByRUNERFR4SDV6Z2U2Q0J3SHdmS0sxQlJCWUVGT3pUUThORXYKTk1zeWVhanRaM2dlL3BLbm9TN1A1b1Y4anVVeWpBcjZvUlRROUR6dzVUZjRjZ28rL0FJLy9RMFUyZUJGOE9tRkRnN0F6dyt0QUJyRQpJSkJXc0w4WENLYkJMTUIvMFh3QmdvelplcUtzS1k2QXVpQ2hHVFo3RzU2VDNRNUFHSHo0bjhDU2ZkRHNCNXBsZmJEYW1Qd3M3RGtBCloxN05KVnlnQnF0UUVFTXJqeFNHaEdEK1AvVm5BTWoySXdhNE9sYk5ZQUFXcGhpSWROUGFkMEJrOE51d0Q3RWh5citWN3c4WDU1ZkEKS0hCOHVCZU0vZk05R29QSEtTQjg1V0Z2TVplQUlFckNwaVVaMnI3L0NSQWJnRzlxMWY4RXBxZ3NqWlUyYkRCOUFqQ2pQNFYvNXIraApYSUJQWXp2aldmY3ZVWjd0QWJadEErampEMnZUdjhUUlFtc0xmNTloMm8wQnl5dk4xSkhNTE4vK2wySm5ESXdiQXNTTUp2MHZhVUNDCkdhMWw4dCtkVjIrSVhDa013ZHdBY1FCRDVoSk53bnQrNXRZYld2NDFNY0c0WW9Kby9rT3hONUpJQ045elZmOWxSdTh2WnZQSjk1OWkKOWY5TlVxendGL0hrWUZOeVV2NXpkRmlZaVZDYmduc2VZREZTY3Z6amZBSEc4bDgwbFA4YnVIVDIvdmQvOFc3OEw3UEJiRFRzLzIrWAp4VUREcDdnc3grUzVITTlDSDMyNkpZa2ovSncvcGVISEp3bVg2UzMvWFhITVpGaUtadWlNSU9RRk91czF1NytIZy9rbnllVFVodi95CjNJTHA4bVRpTXAzZVpBNzIySFBwZmE2NHUwbG10dnpPdnp4SisrbWF4eEwrUXlTRy92VloyWThJUFdiMW0yUld2LzhybEFNa0ZkdVQKaGR5WDBESHB2NjRkZ0QzczN4N0N0elFYQjBCWlduY2MrVFhIc1QxUXZSTWs1R1JxREgraDFiN2hpVzlKbHNRUzhqWXZiOWcyTnNveApERzA2RithRE9ZWUd4QTkreUdZRjZGZFNTTDg1R2NJanUyNHdoZzVUemJKSDY3ZzZuRTFINHU4TEVUcDMwWFJLOHJ3M0VlVkJFQnFQCnQrTmhIMHhCbTVaaDl6RWFjelZMTFkzNzdPZlE5cE5xWTB3dGFYUXphU25qUWVOclRtWkRPRUgwbE5YWjJYYjBiVHZZSmdiSTJFVDcKeVV5YnBPb0Z1MXltRmEwRldnVGxHZGp2T0VIRlcra2tENTNpQ3FiNjhGdzZ5QVI3T2xFdzJHYktjNEhsMlJ3ZUZHc0N4WnFheldWeApQSnVLZ0hUN3Y0TWY4bkFRaEVFVytvb3FzNE1OcCtKVWtzSEQ3OFVJZVE0SmUvMlFKWW0wcmF5NU9UelJZb0xxMlZhSGl1Skc5SmFhCkExQ0pMR25yazJhTVNUTk1zQ2xMTTBuK1N3cmVTUC9NMFNtTDJCdU9obk4xL1JpYTFnRXlkUEJkT1JBR2VKTEYyVnlTVTMraFk2VmcKVHh5SjQ3NWs1Uk1FWDNkRG9wUGY0TGs0L2xqQWs2bm1aQXJkL1loOWxQQWFreWo0S3AzVUY2T1I5cTU2cEE2ZUtpOXdMT0FPdFJQVApnUk04T3UrMm9MSjNiR0NQZG10WDFpbkdqR1RIcGkwTnlRS3RzN0ZUdTZ1cDJOZXhaK3luam0zcllsOHFqVDlHa2xkcnFBWFpHK2V3CjQ0QmhCZ0NOUUV6TmpVWEpNVUFhNUhpZXRZczUrOXZ0dWFnTEFXOTAxMGVUaVV5QUc5VE9naHMyQXhRcERGUTRYOU1hQ3JsOGpuRnAKYWwxR2w0YjZRRDNHK2Y0K2s5VEpNOWhGcVVpalVRVW9GaHFXc0RCaHc3Wlo1amlPRDRidExFa2xKbU5pT1hFOEh3YkYwVkNjTGJjegpzK1prTVIvQmM4M1pYSjU4U1lTTjU0RDlOV3pUbEJKQ0FsUmR3WjJDYS8vTTlYMFp2L2hJaWJlc1BiNXRBeDVTVDhZTms5RVdZMmx0ClJDWVowYjQ3UmtGZjVjay92aHJmR3hZVDRVemg4TTBUWlRFcmVHTXlpQmhQTnV1TEJ0L25zamhPUVBSb1lnVlBYalI0d2E0QTZYSi8KTnAzWUtRMVFsWjFPdnNXWnF0NWt0UWtQcGtOS0hiTDZDOWlDTkptc1creFRjVERRZGJmU1NiQzBtRStDTGJSZE9HMjhZSS9ROUx2ZwoxM2pTL3dJVUNiYS9pYlk3WUpvT1p4TVltZ2MyZlFtNTdkWFYxeFkwNkVVR0R4MzdHNWoyVUpxYTJ0UEJsRURUWHFzTGRDc1Jma0ZMCmNpZU9oN05QQU5Ba1UxMjNKWFRRZlRlY0RaV2RHRXBrc3hUUDVyMmx1QUhuWmpJMTlVdThEUmdBeXNnUU44UElaRmtMM3lDZ0pQQ2MKTUpITkN3eWxCSi9sZ1NyTUJYTkFJL2VDQmxrU0RRN0tWak52WXZGcUtQTW40NEgwVDF2cVQ4WXFtUUpyWHA4UFEyZHpSQ013OExQcQpFT3BEZWVieENpSWZQRFhnWHRPeHN4NE42V0JXSkNIOS9TVUt5bVlaZmMyek9aNk1naUE0SndKaU1EdmJWTk5zSjM5SjhoUWVtYy9jClgraVBobE9nVk1NRGhYK0FVdjBCWktmNlJ1enBRaG9NRjk5Qkl5YjJaZG5TYzlKMzZ6cDBwR2pQZ3laejBOZ0VvVnAvSWMwK2RUR0oKVkRCVGI1cUtZWG5qYWpHZkFsbnAvczRlZktNL2tRZlNZSGxYQ0tZdkozUExZNU8wYll0L1NSZkEwQnNDZkdpVzNjeTZBd0w1V1B2dQpTUU5sQ0ZZekRqeXJUOGJ6ODBuZlpFMXBEOC9CQ3hyTWs2ckRmdVU0TXZScTJ2QWxwWDlOZWxSdk9QOFc0VnBicHEwanl0eDgrdkg5ClJZRU5ReHBNM3Q4cHhjR282bzNZNWlpbTNONmNjUmlMRmZoaUpnRktLTU92T2cyWmdvRnNsR09HQTdiVWtZUVFZZkVjTFBVM200K28KZ1FJUkViZUcvNWc3ZVBpYTJ0NXdzcEM4TXgxOGc4ZWpNZkdncGdOaTRNb1pyUDZHMDFKUHA3TGF6R1VKUUJ1MWQzVlpHZFp4WVVFNwprK004bThlMk1wOGRNRGxjcXlHTXRhUkdRRDZSdFp4UFZOMUd5UFB1TFdXais2eUFIYVhTMWt5Z01QZ09hUFdEWU85M3NDb0RDU3E3Ckx3S0VZcXlzSS9QMGJWakROeklqelFYVXhHUmx1UUN6TlZ0YWROUUtPWG53YmFDY0dFaXo0Y2ZZSkl0WVRFUEVIVDNWWSt3R0VUV2MKdkE5SEVrRTdjYVlJS2lLZWdHOVpsbU41MWlPWmd2em8zZ0xvT0dEcDUxRGhkNWtMYktudmtUMlkxS1BwL1k2dDVRRUZiRFNZQ0dRUgp0NDROMzhHVytqbVIvMGNsZDB5cnFlcDRkS01GMU9zSDVVcDhhcHUvVEs0cjUxWXphSHhwc0R6Yi9lVSt4MWwvT3VyL3hrc2xwVTEvCmJGZjI3RzNtdzVGdXgrRG5COVpwSkU2OThhQzJjeGs3MnJDa01Rd1NjSk83c05VTXhqZ1NVUzVxcnNocGd6RkkzZ0VrUDRjNWRPcEkKS0ZiQWJzbEF4RU9YaFZVV3VlekhIbTM2OG1UcTBXUUs1T3R3L0Q3eGFDYWI0azY5T29XKzI1NG96MXpXMGFwUkdOc0xRZU81YVVwZQpiVTE3RElFYVpBeURvTEUrRElLMnBtRTRjZEg3ZUU0TlJ1NGlUMmt6bGQ4bll6ZDVCNXZORnIyWnpaMWpHZG9NVFBRdmFlU3lpak9nCmVVSmQxYlhKV1BvUWpkTXBUQ05vY2dEOWRlWk9OYkFkMkc3RzdyQkdESVFtNmo1SjUvV2ZVYk5QY1NESmtndVdZQ05wRHEyak1SaWIKdmpDTzBLeXRzazV5L3A4cFpUa2s0R2luVGtFcjJhN0tJenZKcWVXSGc5THYxRTdkQlEwUHB4TjlHZTBVdDZsN1M3Q3R1WFlKWGJYSQpVMnVXNkU0Tko5TytpMVJCRFdZdUs0NGFEQlo0UWdZTlpvc3BJcSsvUDRkelNXTklNb3ZXQnNsZEpaRUg4c3g3UDBHdDNoZmp2Z3RGCktXMVV5MW1qS285TkJMMGpqc2VhYTlOdzRpMjE4aklqK3Q4bTFTcDJTN1dwNEwzVUMxWW00aHhvMU0reDl2MVY4emtlL0l2MU1PUysKZ2VablVnK2RsZ2UwZ2FhWTJaZmgxRVp6WmZTL2YzKzVLQkZHdzhuOFU3TUg5L1NEUHRCTHNLUTFEMEpyZTluREtoZ09qT2J3SDJuVQpsT1IzcVcvM3RDdzVzOGVpM1Z1NzFPUno4bmRqT0xEeGxlb2thQU5wck9TVkxubG84c0h4eFBEZ0JJZGo1S0dCQ3FQa1Nza21wd3diCkxKMjRPV0tzNXkzUVl3MFBXa3AyOXRYYklIaFg2cm5KalM1VnNzWWhyZEpFOFlxa2xjeTdZTmtzL1JnY3VMYmptUTFBRTBwamdtT2UKVGNVKzhkU1pZSzNaZHB2N2lrNFg2S1RRSFlwT1JHdllQYU9SRzBPaWRrQzdBdmJiaDRjWk5mc2FUb0YxTW5iaEFOaE1sbUQrdVFUbgpRT1lSZ1M5cForcW1ZWGpOU3JTNnhLeHNkanJwd1lRMEU1TlpUOTNocWxTZ3U3R2l1aHRiWm5jall5T2txMlVIcG5IQURrSFpHOUJMCm5TMlRxNVhxWVJzSHNsOGV0U09oTHBFemZtNW1MbEVndXJPSldVd1lCMnhtQitRWUxLdytZTTU0Z0JLenpHZHkraFBBQmYzaHNyb0YKbmxSdnFyWVp3ZVlmNzh2OCtMQWs4Y0NQMm9VUnl6RGdJZGlaSkkrWG44QVZVVkt0VGVxTzV1UlZzSGtzaXdOb2NBPT0NCgldXT4NCgk8IVtDREFUQVsNCglCOFh4UVBVVHUzbUdsWmRRYWl2TTdJWXZvZUFPKzB2V25wVEY4TnVWOHBaM1gzdkxzc1hJS0xTbXJrR29Ta29iaEtROUM2VGg3K1pmCm9Md3F0U3NuSnptaEtrSG1obEFUUmVFdG16aTg2NlhwZE9JaWxUajhuSFB3RTh2dlh4YzQvY0cxL2drOTJPTU9iK2JsNm52KytLdXgKM1RvUXErOTBwNmcvWlJNSHJjeG5LTTQxRGtLcGRMUVZpSVFTeGEvOVVQenlNUjlLZmc3Qm83ZDNLcFJZRk5xaDVNVkROWlNpTDFnNgpmZENKb2U2RlVDVit6Yy9ZMlFVWVhQV0xQN3g2SzNMbEhKZkxQR2ErSC9kVGIvVko5cDZqQjhaVHV0R1ZLb0dJTEJjUGVxWGs5UEwwCjZDdy9LK1lhKy9kVWZmTEkzOVhrNTBlNitsanYzTlFQU2dkOVpyZVVIZFBwSytrMlVleThzUFJwczFXaEcyOUNtbjBMTmE2WVpQVHoKRGp1UVFJUmdLTEo4R0ZxVTN5NFdGNlZHcG45VjJCa1BkNCtGK2NVUkdNTmQreWc5cCt1Rmw2dnFKUC9XVHBYQXU2ZmY5R0NuVTlVNwpuWUoxVVJiaW9NTXJHQzFQWnBmS0ozVWh6bWV5ekZlSGRQcmhLMnR2QXRFdlA0dFBQTVdkNXhhSjRuRm94NWdHbFo3bGp0bEY1NjJIClZ2OTRwUFp0Z04yYlBjZ3Y4ZW9GbmViYnlwSVlVd1B2Smg3NUxiYXdDMTVqeG5DMFY2Wk9YMjR6VlZ1bnFCZTFXK0dhKzVKeG5iN0oKTHovelcweW5sVjZtSmFaWXgwNW51WHNtRU1ITnRjSG5JNlV2NTA3M3QzWm0wZkJrNnRTcHZIaWp3ckZldVBWc2RCcUlHTjNTZGZwdwpIOU5wWmp1YzIzdlBPM2ZLZDU3cCtrMzUybkdtVy9WcElSQ0pYQTB2V2s1enBZKzNKK2ZZVHFPbjUvd0ZEcjIzOG5PZlBZV2R4bEduCllDNW1CRy9kY3hGaEhnVXY4cE9sVlMyRWkycW56V2pVUmtyOFRmWjRoRG9GZk5XcldUdDlBVno1Y3RkckdkMWFPaTEwaGR2QlI5cXgKMDlmVXpTVzIwMno2dlIwMU9vWDhZbHJWVUZ5ZUZSSXo1MDZiMlZmKzRmTTg2ZFRwTEZyc01KaE9oYzlBSkI0dFM4Zk9jK1U3SGJxZQpweThkTzkycWYyVERyVy8yeXFsVHV2N3lVamM2QmV0aVhkWEkxL2lpZ3V0VXBJK1RiM2ZPblI3VHBhZ1V5M2FjT2dYck10OU9IcXJkCmRsSXhHOU1jWHZJSHowcW50ZWV2dXFYVHgzMzZQSnRpWUtlN1M1MDJwSW5HcVZrZ3greHpQWDk2RkRHZFpyYXpYNFA2SzY3VEtuMngKKzVKMzZqUVFtVzJkL0JTT2ZzbVhMZFN0dmRQMlhwVERkbm9tdFRrYTArbFRpbTUzNDF1b1UxVW1tK2Q2MXBBdW54N2pNY2RPNzZMagpEMnluN2MvcnQ1NVRwM0FYNDUrTzZidXo2YjR6Z3MrNXlHMzlhUC9BdWRQcDZSYTIwN3Z1OGRZY2RScUlPTXoxaXI0L1BLczZkM3BSCnJIVmZyMTllSER0OXVmbzZjZW9VeUdUWTdhK09NS2hqRVB5Y28xOW1vNVJ6cDVlL3B0OVgrUnpuMkduM0pEVkduY0w5WlhtdWNxU2QKQ0dFNjdkelN0ZUgzcVdPbnVjdlVWdWpvSlZVRG5SWitqRTVCTDBncUxiclpyanJYSGhlM01VMzg4VnpjUloyeTBXS3NZWjNwT2YyMgpXeWpCVHBOTE8wMzMxODhPYzlxOUNVUkF0d2Z5MGdZMzJUbFFPNTBmSm13ekRZR05QcTUwV3U0d0oxWkJtSlJudDhVUTdKUXlPZ1c5CnFGTHBKS1hOdFRLM2RacllhMnhsbEU0UG1iT1VUUlFtcC96bEcrcVVDeGNxWjlaT3c3SXM5c2FnRjlBdGJaK3JYSkltR3YyZWh1enkKVi9oVktLdWRGcTRwRzNxM0p0TGJqYks5U1dJM1k5TXVoTWJ0enV1a1lIdHVQTzFjTTk5M3VLZWZRUCtMTExCUEFiL3NscW83bU9kZwpEWFlTRlZXWmtuNUpXZHZUVEk3cGF1T2VmZVhzVDhlZld3OHFWem85enpaUENzL1l0M1BzYnVzTi8vUlRmSTNhbmhvWXkyeVgySjNIClB2YnQ4OFQ0a01VLzdWMjk3MkdmQmlKWFcvMWVBL004MTlocDdOL09sS2Z2MForODdlM2J4SER2bC9xVTJTclluL1pPMjJNTll3N1AKNzZvSlRjdDBlSG9mNmFWRCtLZlAxY0tCN2FrWlkyK1IxMndZKy9hdmVYUGF3RDc5dW1QTDE5aW5nY2ozVjczNGluc094bkM5SjJDZgpucko4OFFIN3REL3V0Yy94R05zSjdadzg3K0xlM3FtVkxub1M5dWtwZTdqRjRERldDckhoZUFIenR0Q2dhd2U3MnB3THNUM2IwOFROCjlleFFmVnFoOW0xUEE1R2J0K1BkRXU3NTUyNzRVRk9Iblo0ZVBoNWRtWi95eVpacThYSGg2MFFsdFZ1aEI5R25pcTRudjBWR3lEaFQKVGJONlYzQXh6ZGg1R0JxOWxWRHFOTjhCUnUrdkcvaUhnci9WUThscXF3TC8zQU5SbHcrajE2QzBURndvRWtidFQyeVZOYmtwYjdIUgpnMlpLM1EyWWlIbUhLRzV6VVdSREtzWU9NTTFNM0pTK3lJMmp3SXg4V0NCakIxbEo3L3U2TWIrZEhoNzA0a0MyYmRXZ3VaT3lDR3R6CnA0bDk5dU1hMDJsbWUvdDJPbm95Ny92bWJ2bk9JN1pUc0FYOVlyQ2QwdlgzeXphMjAwQUVicGw5NTdueW5ZRzVVNzRkTm5XYXV5eTMKVFowT2RuYTJqVTVuMjU5U1MrK1VnNVJzUVhEeEoveXR6L1Y0Wk9rMDNzRjJDdEI3d0dJN0Jhc1BiUWVqVzl0Y29lM3dpdW0wODRLZgo2Vlo5eGx2MmZXdTN5SGJBZGdwdGgwL25UdmRERkxaVHFJM1h6NlBZdVNLTkJOc3AxRWR1TEdzcTViWHUwU2QxR1lBdFZua2NmQk8wCmpMOHV2c2VlN1RMYlA2KzFoeXRiTzlWRFlta3BmS3AwcDhxTE1wajFjeWxoOGdBWmpQc1crNGJZYVpuOGFNWDZRbGFGeTA3N1NKWEoKeG92cDRYWWhhZndwVG1PREc5WFVoMUlKSXJVNGplOVBkWWd4QktLWWI0Ui9vVEVVODhkUFZTQzR4QnJzbVRNRWt5Smh3QUNLdFlqNgpKM2t4VVR0QUNyVFdnVEVhTUxXRHFkTEU0djlEUXErYy9wU3FFZjFQeTJwWnFLNnNLNzE1RmZaeWJCWndiNmVIMnBCdm0rRHJEdFJMCkY3c2FkaFNkWHhYSEpnUTJkMlN3TG1ZVW1qRlBud3FSQ1BvRFNmTGViQUk0RGVrcmY0SWRFdEtURjFGQXVoZEpObnBJbnhnZUc1dHIKRUNHZGZWbVV6MnhJWDBJNS9LTU9YYkhKcjZHOWI1OWhORVF3UC9USGMvM2FXNmlKNFNGeFhNRnRmWDY3MlBsQnhmZldmZjBDcENzNApjYUpRTjJTWlFabm1vZ0JqZHN1LzZsN0FTSWg5TDJYZ1hkVmhWcWFzNCtjZmI4NEJ1eGdKNW9GcTlMZ081K2k4RDVERmxoL3pweXNpCnl5cDY0amJSRTRpQThieldyRXZMcmJvYXRlY1QyWXhBYmNCZ1hTd28zRkdFanpQdVhtczZlakdqU2RhU3loOFZkNHJMMVlrck82bVEKVFhCN2NTVnlJVHBPcldQalNuMDEvRXlOTzd5N3VmQkM5UEhaamlJdFc1aWhWQk1rczVLYTFJNjYra3ZFWGdPOTNFMENFYWZWOGpVaAphQW8rbU1hZ2l6K3JoSG1MNzREaFBWU2RoVXNuT1dYRWNMUkJnQmdzV3RBdVZxV3hpRWwvVGhJSEd1M29sSXdjUXM0NFpweEF3Ym1RCkFiUHkzZTd5bGkvV3NWd1hpUGpqTzNIclllRzZrdHRNOHBaSndqOVBDZjJzUWZXT1dna0RTTVpZN2N4OVFkVS9ZRGtOSi9ZeWJZRDUKUVJtbzZtUEx3SzZ1OVVHWlJnYm1NajkySEZmeHVEZkRUZklJK21IbXQra2xMY3hsU1JMTFN6STRkdC9qQW5qaHMwVFRYN2taVmlGdwoxeGl0WG12UUhHZ3pUM1BYamNseGZSMndlQXd4MHJCcXNMYU5pVmg3R2h4YjVmVHl0Z1FJTjJEYWVGMEdOVDg4eGV5VlZ5MTFORzVEClV2ZDlaVkI0bFU1Zk9xTDFBMWErZGYzTU9yK3FVN2pwL0piMUcwZEkxODk2d3V1RXJPUG05OXJFb096SUVGaDd2Q25LQWh1S0RaUjIKOXJvS3NJNjdFZU1QWXg1Nm5UK01kZVdOWWN3cTBYeGpiR29tdExlc3ZHUzR6b3VPUWtqZHhmeG94dzAvcG1BTEk4ZktENThoQWdVYgo4Ymt6Vjg0UHR6YkdsZVdIbnpDcG9helNtSHFhNjRDZFErYnMzQmQybGtiVGdiNitOYkZUbk9uYk10NVVDR2c2aGJOcTJQQVdDaVFECmdlY3ZwQ1llZmlBZVVnRE1oV0FvVnQxeWhZRkFqSG14dmMwbVQyQjJ6WThHZEYwL09aRUtzc1djYkVQbFVOTndjcmNNaU96THJFZVoKM05uZzB3bWsrSnFyaDhUZWdlcldzT01PYUlJa1RnMlQ4TkRad3hKRm9BeEtVenpJN0dIOGtMYTk3SDFpQWZBeWp4QXduRXBqTFZjQgpjT0pIQURqT1Q3UDN3UXlqS3lKOUNlWExtb0o5ZjdGUkxVNlgvM1VDRHdUdlNlZUh2TmJZRmF6T21kckw3SmpjbjRHeHlRTVJRUDJmCjNNYVE1Y3pnZHQ4RkViSndMSTRsQm9WZkhGbWNDK2UvMGxZV1A3V3p1S09SdHV4ZFd2YVFBS3JkV3RlWGNHcHp5YUxWdDQ2SDJLajQKUHJYcTd4aEhnTEtMZVlnSzVpeTY5dFNnRGxPNHZ2QzBoOTNjRzRmTTZjSzZMZHRuRlNCeGNBQTYrR0hYbVpCQ3lhZEx1K29LZnAvdgpVM2d3M0hGQ2kzVVg4MFNNbDYvUEpnbzBlMzVKdDRUWXlSQmd4eVFLTEo0R3F5cDl0RUNxdE1WckRlaUF4Sm5vclVxZjJWUnBCMzRoCndGM2hPdUkrR3RzMmlIUVk1NDJRTzd6TlJyMHBnbUFiUElNWXMyNkVLMDB0N2o2MUFBSHJuaTF0ZjM3cEhGSHk5TXkrODYwMG9aQjEKeThQNitsd0Z3T0Z0UkZoUkFKajIvYk9scmM0Wk1kNjZMTUNOZGFQRFVUS1pMZ3NQcTZJb2ZzTTBLL0NiblJpV0xENUN2b01KQTlTRQpsQ0pNM2xIcnJCL2E5aVBJbFhlN2h6YnNaVVArVmpBdUhPdjVrTW1RYVVnUEtXeVVhbGtYdUc3dW14NEJ4U01vVmpPU3M1NGsrb0dECjQwQW5LTHFtNUFCbjNaTUtCQVhSaGhKdjZXL25jd1JtT1IvRWFoZEVKeFV3blNBWnMrcWJGUlRpNm43Q0FPeDlNcjlYQllXdXJyamQKMk8xS0NJeWxmSjd4WVZINVM5cEZxUFJlRjlNeHQ2dEVtMzNGbHlUYTdDdGhXRWxyYVJJVmdKaWpIM2RVQnJ5MXVZZmJ0U1dhNFlFSAp3RFltMFc1dEVtMGxUUW42cFgxSk5CenZnM1hiZ0VRRFVKQkU4Nll4YnpqZUVpMUFCR2Y5czFjRXgrVThLRm1PNmVjNGFVZk9zUzZZCmt3VnQwSmo1Nk5CWlMxRUR2YlFvUkdEeExQbkc0VzhPQjdDcnhGekJRM0FpSWFSclpvNW5yeFhBNTFmdWtwSDBjQUdDdWd1Um5POFQKYVBVVkkvckJDVlFnUW1ZMFB0eXRZMHZyNndMWHpSYld0SXBRZ0ZDV0ZYdUR4bnpBOFE2QnNFRnhpRlJCY0RBbXRjL1JhSUZIdUJOZQpWNVhjRHN6VGtSVWcxKy9CL0JMMjNSRDhsaUxnbkFEUmJpaHV0YkFoQXNRVzM4UDk1dlQ3ZTZlOTBJbkdTSGJEZTErbXRjV2phRjdWCjU1OFY5WHZicXFtOXJBM0hwdCt2dElzaE9INzBlOHd1aHVDc3JkOURLTmk5RUoyKytkb05uMy9jMk5CNUw3UmFyL2Jkc0x0OFVneC8KOHgwRWlOR1VnQVFpak1NeXdqQ3dzKy9Ld0xMQUw0a1psUmhkd014REQxamUxbTFrY3U1KzhLL3A0cjBLRDBUY1RTSzJJY2FJV056Ygp1QVFyU1dGMVhvY29OV2RYWEFYZzh5NU5SaEhlbmw0MEtFS0tjR1l1KzdaVW9WTFFzckJ0VEJVS1AyUmZSaHBiZmhnczhMR2pSd1NSCmE5Wng0VThCRUNxZG90U3d4TktiYlM3YUZnSWpQTDN4T0x1Qm9ManczdG41Smp3a0FHTlpJbjh5N216QXVwWmRFazFmQVlXMWtUdEwKMFZKWWlpQWFrb2tpTFBHV3ZtSlZqZjJzS0Z5TUhTMExkUVdVbkhkMjloRktqYSs3b2VUZGF5MlVLbkd2TUhPdTVpdUh6ajJERGtiYQpieUtIemoyRHpuWkx3TW81ZE80WmRJb0d1MzRPblhzR25UVmJjUFVjT3ZjTU9sdTI0TW81ZE80WmRJSElabkxvM0RQb2JObUNLK2ZRCnVXZlFBWDdaU0E2ZGV3WWQ0djBONU5BdHR6Tm4wQ21XeGZvNWRPN3gwRXZubFN2bTBOa0NrbTM3dGFNZnBncERUdXJ1WnE5VnI4UG4KQVNHcnhMU0xrUXpLZVVqdThWTkFNUXpZMVhOTXhsVGRIblRxeThWa09rbXMydlZmVHp6aGJOdW5LdHJ0TFJsREsrTEo1bUp5d0pPQgpKZjBlRXVmTXNsMEx3VHJFbVIzMFlnU3BZTkE3K2t1NjJ3dzlZZU93VFBiTExoa2Q3S1g4ejAvM0t0aVMzYXllSzFla3V3NHBiVHNaCldSbnBYcDRyZDM1eFQ1b2pTcG5UeUZXTEhNWVFiTTBlVjcyQzE2K1RuQWY4QllOZ1EwR1EyNWpFMDB2Z05xNnRHQXBpNWYxT2F0dVgKWjkwWng4dWhJSTZSa0Y3SmJyNURRWnh5RXBQVHRWMVZNRDh0N2FMeiswQU1QaFRFYm9ab2xJd3hSR3J1R1ZyZU5nPT0NCgldXT4NCgk8IVtDREFUQVsNCgl6ZFFhUmZER0xKL1o5TmdmTHpvbkVROWkzWlRENjgvc1hWck9Ib2NQb0F4RW5BK2djVW1tNHRhRlk5YWh1K01NNStrRnlISUpEQ0J3Cm5GbmNobkQxdjNKVG01c0V2SDI3c1hRWW9IUlpLZGx2SHBqV2VIRHNIbUhzTDQ5djRiVk4rc2pqNjdubnYyeGJuRmI0MUxRdEcrK1QKSnhjdUQrbHpHemVrSThPenJFUjNlSzJnUnd5OGp5aUN3YkhWZyttZ05oT3ZuMnpMaVhIU0xYMEE4N0l4VkZER2p1d0N6Q3RGeG5OYworcWtvQk9ZUlZlOWprcmFNbWZVdzVwa202Z2RqWGxjaHVJNUxpKzdRczJmS0Q1MlVOZFNwNFo0OVE2ckxndjFGOS9wNk16c21JOHdyCld3N2RST0VCNG12TFl3eHY3Q3NELzd4aGVWdUpHMjlzek5qN2FOaU1QWWU0QzkzWXc0THdFZy9PQUF3Sjg5SHd1aHpGV0dtL2lYS20KbkJIdlJlN1NwR1lZanZkaGlwc1g3M3ZoRTJ2Q09kaVZlSFI0cGNaaXoyU3NFZ1pNeUpQUExkNEFsMUQrd3N6UUlvMGNxK3JjaisyTAp6L1J4d2p1R2tqM1NqenpkTzdhTUtPZXpWL1psTnNmdTU3NzBzUlBFNzFoOXpCZkgvenB4NG5pYlBrYUdKei91SFp1aWJZNVBocGxqCjZjMlFnTTBvUlBtVjVJT3lEb2tsSFpMaVVYVExRUFBsa1hITnNPTTNoQ2ZQdkZlM1FWazlNdFN5UitiNzFOMGpzMHhqR0kvTTZUb2UKR1YzQ01HZmh6WGhrdUhBQkd2RGV2Z3NDajh6cEppS0lBSWpZQmxJR05ZL01PdmNwZ1RVbjlNZ0VJdTVwYUd0N1pHRCtHZS9saFNORApqRmR5VG9Bd1BRY202Vmxaems5SWlYNERsWjZIZW5nenA2M0s4cGxYSHFxbnNxemVSTUVkM2lhMjNXZnRTUXpUTTZ4THg4aUFJTE5hCndDWkRsRHBxZGVrNDc4aGdhb1hZMmxNejFGMkY5MWVoME1QYkNONjdaS05QR0RtTXo2dkRoeTRRVHdnRnpXTHZodktSVitjZHJlY1YKUFFnUnMwN3FxTmxLT25OMWdub20xOWtEOVpyMmMxUTBGL0FyNGVHRDYwYUh6NGZ6ZFYvZnl2bHdUbWRKTUlsdHMvbHdhOUlZWVQ2YwpkNTdGSnZMaDRFbmlja2JjQ2hHcXJ2bHc1Qm1wNitURExXVUxycGdKN2pRa3czaDBsWllieTRlem5PLzdUdFVnelljanVZZGsvWHc0CjY3cG9HWEdiem9lejlxSmx4SzE1ckFQejJOYlBySWZibTYvRElkUUx6bVVKZ1cwa0poSkptTHVKMVpCZU1YT013MkxiY21MbHBxaFcKbGdNa1ZzcEdSM0NTNjZyTmxlVndCbHlldURlY2pXUnk2YkVNVG5henI3dElFWHRBZnpMV0llWS80am42czdzVTd4ejlTWHJaTDRScwplT2R1UWVzM1VIbm1NcTF6Um12MUtFSmdtd3BON2t3TkpseFpHNGY0NXRmWHhpc2J1UTBZUVVtdGI3MGlPQjdzUTNKM1I4VVczK0IvCk5Jb0dXM0cvRXBoVXRkZEJNVGFPOXJ5SndzVXZIVTh1KzdCZzZ0bXlRVzNORnlNN2Y0TCtQMzhJeE1peDFhNFd4b0RxYm0wc0kxWGMKNnVFZEJzUVpxZmVieVVoOS90bEVSaXFFc29tTVZKZ3Z0b21NVkFobi9ZeFVDTVdla1lxN0J0bzdmK3ZlNmRKVVc1QlJRUE90RXJGaAp5b0VOSHdqOFdrVFJ0bXVud3RsMnNhNzhSMUxobk5abDg2bHdBVkxEZmExVXVDV00vWkZVT0crN2NoT3BjQUd2RzBzMmtncG5qb2hBCnlYRCtVK0VJRkVNbHQ3cmpwaHI2dXhHK3NoUWdZVDBaOFo5WGh6ZUxiQ2MyK3JwZ3ptd2dNS0tidWx4akFyVmJtZ0d3OWQyVEtzWTYKVzBSblNkNkhDeWlGamVSK3RXMzF2Qkt6UGZSbWJrYzQvamFIRHJLUm43RVg0aERIb0JyY0MydkdKWjFqU05RMVFBVXlpMWVmeDZNNwpzVnZkSGl4cTlYejQ2TFYrVTJ6V2p0THphS1YrYzVqdG9Fcm0xY2VhZkZScVpHNU9LMldxWDZtVTAyZXdDRUY3cW0xR2taSGRCNnY2Cm5LelpXQzU1Wi91aEozemx0dHgxb1dtbVZGdUdYV0t2ZjNWaGRqK2JPaFUrZHlQN29Ra3U3K3pCclZ6Y0lPMlNZWWZLYW1NNnpXekQKb3RvaXJ0TTMxd3k3NDFUZTFLbTlubGtoTWRNN3RTZTd3VkxUZWxWRFd3TFlWc3dsdzA1ZXZERVV0dFBFL3Q0M0xzTXVzNzM5azFrOApZelBzT2s5dWVXZmZiaGwyazVzYmJLZUJ5TTY1OURuQVpkaEpicm1FMXcvNFRtdVhUOGRHcDB2MStNSmpicStMNi9SNmlaUUF1NnJkCm8wOHFuUmNjVnQrNTVSNFJSUDc1bktBZHF2VWNieW90VmEvS2VjWkJGZFVZdDc0WTJiZFR0N3ZVamt6UnRvVFgvaWZHUzJIeXpaMEoKUWN3R1VSMHJva3ZjVFY0VHR6cFdQd1NESWhtU3czWHViakZYcTFXU2M5SitzYmMzckZ4SmJtbERiRVpEWHBYeVNQSGtIaUpKSEE5VApKYWc0WWxFd1hldStyVk5FemdiS0lFMU5oMW5wR0xSS1VHd0V6UzlBTkNpUFdnT2VRMUwyL2FyZllFcVhJVGw1amxmamwyUEpvd3lSCkxkaFY1WmNOWnRNNWpkQ2t3VzRvbTg1SjJ6YlhUTmxNTnAyVHd3dFZMZDlvTnAxbGFtb3VuZGZOay82ejZad0NRTFR6U21mNXRFbzIKblZNdUhhejd0dGxzdWxXOTF2Nnk2WndzTlNzbGJ5S2JUdHZaekxsME91OXZMSnZPNlp6R0ptRTJrRTNuWkRmRFhXeXoyWFM0czlmTgpadE01NWRJaFcyeWoyWFJPeWczeXcydzBtODVwZFhIMi91clpkUFpvYVpoTDUxRXZhWVZzT3Z0QnJlTHQyWFEybmRQNjJXODJYaitiCnpsZy9lL1RnSnJQcG5FQnArWldieTZielB1SGRSRGFkVXk3ZEJqRG1xUlA2d1JocE5oMFJ4dGJPcG5QS3BUUHRZaHZLcG5QS3BWdXEKbExkMk5wMFRBRXZPeUVheTZaeHk2Unh5UnRiTXBuUFNuYkhXNjhyWmRBWUE0L3dUWDFkMDFXdzZweFhDWkQrdGtVM25sRXZuYVZkaQowVUdjZm9NN2VWOHJtODQySWZ1ZDlyNnk2YXhEOGpJQW5UTlNyUWFndzRucnJ4TmZWemZocmFRVHJ6S1Z4TGxZUDF1K3RBdWllblZPCkJPbER1eUNzVjBkU044R3pYaDBwbnVZSlUrVWdSZWRmRFUvVnVhZGlZYnRSeDZXVTIxSWxXdjlEUXBWWnZFdlZrYVozWWtyUU9tWUsKZStDSm9PeXliVWlPRXViRU5aVEM1NUNnOTVOTXdtQXRva1BtZEdhemlMaHdmbXFQUHNMdit5NXVNTjlsN2h3eFppOTB0M3E4aEZybQp6bGVka1pYTDNKSDRMazdYTG5PSEtuOTVGYm9qVEtURFgzQkxISis4VnBrN0krYktwZEFkZVpvU3BzeWRhNlVKVEppQy96SjM4UFpzCnowSjM1dEY2bHJranZSZHVlclorVnVYaExST3g3aThyQnlDZWtXWVdCYnlWN3VuWjJuSDQ4STd1MjRQNCtvbDBycEdIWkxIV0tKRnUKamFRaUk0c3pRaHpUN0paZjZCekM0U3NyRFdZWWFtR0h2b0xJSEdxa0F1d1FKY0VRNWhNMTNyYWpsdWdPTlJjdjV1NVVKenZ2T1c1KwoyKzJYRlJQRVBNcHkrSWlHQXNDSVlwR0pvcUVBTUpLSWJ2ZjRjaVQ1TnBMNXVGS05TWFBFblFabjdaeGFCTVc4NVRsS1MwSTQrQ0FxClgzVVNOMVJvRXRWSjNHaGliWHM1YUFMOHRybGJBUUV3Ykw2Sk5iK1NKT01FakpaRW1KbmRSUW44dXR3UW90SnNTT0pVQ0xTL3hIZVgKTFhxWWk3Zm0zUUI2OXROR01sUHM5eDR2eTFmeUNvWUEyTGw3Vm9TUENvYmdVWlBna05pcmdwOVZmMTg1ODlGWElnTTJxaFBDV2Z0dwpGNVdCVy8rV0FBV09weElmSUlOalpVUHZRanhZeXdJeGlGY3FnNTlFaG9UQmhLWmU3amJFaGc0VjdsYktyL1JkNFE1UnNrdU51ODNrCkU4RW9BcmNhZDRSczZGSGhqanp6Y1oxOEltdWx2UFhaMExuQzNXcVY4dnphMHJoS2VYZzJYS1hDbmZjdFo1dW9jT2NTZFVPWVdIdFAKRU41RUlNZWVmOVpXYzh5NWJ4dExySDMrc1ZuVks5VjZCdmoyVnlVZG0vbDRzWUc4ZEFDRldqL21Dc0Voc2FFQ0JIRFdONStRVCtuQwpuZzJMVFdQeXlyeUI1ZkxjWWhUOTU3Y1hZc2tsTml6RUhET1RyWEY5Ukd6NDREK0p5ZTZGczJhRXZXS1ZTWDlKVExDQ1lTR0c5NTc2CmlyQ0JvQnk5T1dhTWtWNXREb0dSY0NYZWIybkYySmdnajVqQXJueFE3MU1pQllZUlhGM1pQWW5KWkZtUUpXYXVsTVJra21NMjFkRGgKdWtTVXY3V0tZdWhRajY5Q2JTak9EbW5FS0ZvR2R6TGlNOGUxNDM1aW85U3VKYzF4N2F4NE5aWGpQVmVkalpWNzdNMVE5TWFHS3VXbAozUTl3QWhaZ3VCelhwVEFNbHh4WHp6dUk0S0EyVU81UjlRREJaVGpQb3Y0Y1lrZzAxUTltdkRVT2JxcGZUS1djUHIydmJrdW43ZXBoCm9uMXpNSGxMWk1DbjQ2YVMyL2Z3WEIrdzBlSldWZGw0b0d2WDdEbldkekZMR3Q3bFljdmNxU1VmYnJaOTEybWFYVlhXT215RnlsUEgKS1I5T3lVdkNwK0hKaTdjQ2crMlVydE83dU15L3pIWTQyNHEvbUsxWGE4TFdzMXZ1MzVURGQzcTgvWGpyMUdrZ290UmhPK2xSSDdnNgpiSEdYMUxTbWdNK0htMFd6TzdJcDFwcXpaVG5HWTRkUEkweHFXdHkxNHB6b21Qa0hNS1lnK0d6ZldGVjdHbDZFdjZ5KzRmTGh1aTZkCkhvY3pGbjZ4RjdxNzNuN0VkSnByV0ZJcjdaMjJuRHBGVVRlSWZzL3VzQWltYTdYYnVuVlZ3L0JwVXYra3BtQXVkZy9TVHUyVWJFRkwKUzY1Q0UwQ2szM1lMSllKMmljSmtYbE5rc3BiamU5RGg3VkVMK25HTnc5WlpjVEdmOUkzT3BhS0JWVnNGU0JYaTF0T2dxcSt3U2ZjcQpaZ2Z1cVUxTEhoSmM5by9TaTQvUUt2eVFLdmk0TnYxdVc2TFVwdG1Lc2VSTE9zeVNROWRIYUpVTlQ4YSs3aDBKNllHbnRsZTBLWEZXCkdtbG9GWllFakt3MGp4aE5ZbnB5aXRKYUtiWUhaZDM1aWRKQ3ZqN3NvSnpqdFB3UHlYNld0RVoyb2t1VWxqOSttYmhrcWFxaldZcU4KdGQ4UUFnWmEzTFdLcTlwbWZNeG9YVTRJRGd3OXFyUzVPN2Y4MUg3cXBEeENZYkRtNzdLRTJZQjcrYlZtdTh0bUZmK1kvd3ZqSFAxagp0VTBjV2IvV0RNOHk3ZzRpc2l4QTBrdG85VnZOblJHemx0VmlvK1Fxb1ZGTUVqVGljTUFLYTlodDVCcm8rZ1p0WkxHK29qUFl3YzhQCkUrNWM5Q3hmamdDeHZ1em45M3Z6a05Xbnd2OHNCUkI4NVdTYnAzZWQ3TFlIL05FZ3lSMFJsbFJBTDcwTnY3cTJTSlhCTVVFdUUxa20KVTk0a1dwZHEyRGw0WS9IWmJXNDNveEpvNDVaQjRZUDFqYVZ6WHovVk93b3craFhlVUNxblE4MGIrNTJReEttQTNrV3ZUS0FVbjVJYgpNUGU2eG1UalFobXBFQmltc3ZFS2s3U2RWNjZITWM5Y0hqOFk4emk1OUljeHp4ckhQaVo1emo5ak1iYVVMb3cxWnYxWDFBdEUxc2tDCnhDbm5tQWpWRmJNQUxXTnd5UUhVdFBIVnNnQkpjd0NkL01ua1dZQVlFbGpLQVhTcndJNEQ0YitpbmowYXlsOFdJR2tPNEZLa2lxOHMKUUZKODJ2WktuMW1BamdUaWtBUG9iaU43WlFINnNKRlh5Z0k4VWthelBDdkhvbndXR3Z0alJmbmNLTmtqYTh0SFVUNlhteWcyV0pRUApaYVZ0cGd5blMxRSs4eW5Qbnl2S3Qxd2YrVThVNVNQMHdxMVpsTS9rN2ZtRFJmbTBYZXpQRnVWenZXL2NCVThaRjkwWmpjYjdicWdWCjZ2b1IzdzIxVmwwL1BkZk9zYXJmS25kRE9kWDFjM2VsNHJPZS9kWDF3MDB0dG42YzBpbGhOSVhIM1ZEa2RmM2NzKzQyY0RjVXF1dTMKaWZ6S2RYTWhyRG1KcTlmMXN5bnN0cXArUmhXekRUaDBzVlg5ZkdaeXJSaXQ2SmpKdFVKZFA4elUxS3ArNjlTdk5OZjFXOWx2NmF1dQpuM3RWUDVMcURDUjEvZHhKMHpOQ2xiQ3VIMEYrNVFicSttblljYzZZc1ZQeXFuWDkzS3Y2WWZReDMzWDlmR2VsYlNqZDNWelZ6OTNQClQxN1hiMDBhSTZ6clIxU1BiKzJjZC9lcWZuN3I4YTIyNVMzVjQxdWJBNTJxK3VGT3JQelc5WE1QYzNPdW0rQy9ycDk3ZW9wNm1vQk4KVDZFSjYvcTVCeFdvbFl6b2RldjZtVkc1WE5VUHR5Nm1reHFpdW43bVhwYXIrcm40WVZ3RHJ1MTEvVmJPU3R0WWVpZmNLemVXOStCUwoxYzhQNzd2VjlmTlhqMi9WdW41V0tQYnNpVlhyOFhra29oUFg0L05YMXc4SEplMXl4dWUvcnA5N1ZUL2xOcTMxNi9wNTJTK2JxZXRICm5wVzJNVFpjcXVwSElNZUk2dnF0ckkzN3F1dm5YdFZ2US9YNFBOaUh1QjdmV3V4anFzZTNWbDAvSFlyak5YOUxtU2tyMXZWenR4TGMKYjlRaHIrdm5ibEE3MzNEb3Y2NmY0NXoxcW41NDY5VmZYVDkzTlNkQW5JZnJYdGVQOU5hbTllcjZHZW1JVGxtNEt3PT0NCgldXT4NCgk8IVtDREFUQVsNCgkxZVB6N2MzQzFlUHpXOWZQR1lybWhsNGo1c3BTMTIvWm5XME9xREg1eHRlcTYrZWVERzg5VFZpOXJwKzdYMHV2eWJWbVhUOWIrcGpOCjFyTHVZcXZYOVhNMzIwM3JzbFpkUDNlejNjU1ZhOVgxczJHTU1CTFNiMTAvYjd0eUUzWDlTTEk0MTYvcjUxN1ZEL2F5aWJwK1JkZXEKZnNwdDgrdlg5WE1XQmRvaEM3cWZmd04xL2R4UGJCU01yVi9YVHgrWG8zTnlGUjNHcWE2ZisrRUMvbllnZjNYOU1QeXBWdlVqaXJjawpLelhva2hBTHZYQSs3MHBKTzJ3T2oyNmJ3OVd0cFY2U2kydjNjK2xHUmZRYi9nelRFbmh2OFYwNEppNWE2RW5CaWVIREtoNU16Y1U4CkZaVk43U3BtM2NYZXFJbUJHRHA5SldWMGpGNWFiTkh6bVN5enM4OFEyRlpPUTRtbnl6Q2RmdmpLS2sxZ1BsVW9mRkU4b2VqWU9KVHUKUDAxNVR2NDhyUmRITDNtZ3c5enV4bExmOFdqNXAwdzNQaTVMMnorTGNpYjBMQTQ0OE9udEtKemJXOVIyTHE1K1dzTFBWK2NwSzFCOApQM2RSZjZET0tEa2tuQi96YitYVzErM2hvSDJSdWYrOGtTNkZuN3VZOUI2K0w4WDU2cSt0bTliWlYyRzAveENJVEtURDJQaW5tLzJKCnlFZmp6R1hvL3ZJd0d1Wml4NW5JKzlQSlNYenh1ZjNFVDU2bEFscGFsTmxadkwxcDM0V294T3RSaVAzNHVVdnNjOUVqdWw0K0s5UDEKOS80cGZaelphY255V3o0bXozTDNKN1B0MTB3dkVKa0p2YWVtbmdwNGt6aElwKzRwN2p5L3BhVzkvVXJMcytjSkxEYVgzM2FXSVpicwowcjNIODI2KzFMK2VRaDVSUzBDaVdEaXBBdXNJUm5aTFIrZW5Uc2hDNkFEVG5lL0lNaGNPdWM3ME15WkdwZWIyM2VOTk1UeVcwL1VkCmx2OVlCQ0xibzBGb0FITkpUN1hrME5BaU9lVXZZYnpheFJqbEpJWks5WnViQ0IyV0J1QzM1c1Nxc0U5dDdBT20xcXlZVXVZVWY3S3kKVjVycVd3S3g1b1NKWWlaU1dWUWY2OUlES3A5WmVUbHVQV1F1SzRPdG8vUjgvL1FvUFJ2czFmUGJYODNhL1JIM0N0QTJMaDZQN2g2ZQpTNDFNcUlja3pOMlBCbFlwb0JsakVsOVptTXpZZVQzYU93L0phRmFsNzhuNXJIUjJmOTlOMU80ZUd2QVRtRzV6Uk1HazNhVGlXeXNLCkhSbFpUblI2SG9PeENOMjVaaU9uQlNxcXlPUzB3TVNRN3hqZ0pEc0dYN083S084WENKeVRLZmg2a0VSZndTNzJKSU92RlVwN3JaNnUKMTlpTEhBRGJvQlBWWkdSUmp6Vk9UcGhrOUxPTGhvbm1jaFkzUDhyUFJXMEdad256Zy9ORVgzK1FNajk0elVyNmc3VDV3YlR5WWVxRgpNVDA2THYvQS9JTExYZk52dDdHZUJ1Y3lhWDd3d1EvMEJ4U3FiOGcwd2tjMDNCTENUQ05WNStBREJ2WnlNUGxpR29jdCtNTzFHWGJ2Ckl3RnhlNTFVbXZURDJZSXF2WUFvaE9SVlp2cXBBd1kyU2NPc3BXK21mM2dDMFhiTnFHOWMzeUtnU21YSi9XMkk3d1RNTGtZYlU1aU4KcDNpby9kK1lFTVBHRDQvMllDOTc4TUM3VlI1Ukg3dWxadi85dkhwMkVtb2JCS2tmQ2xRTS83ekZldFZZb016R0cvWDlGU0U2d1FQYQplUHo2L0VDSFdCYm16YkIwL1BLWSt5aTFGK0ZoN1hIUXBPR3NHSU4rMlpmRjYxRmxLS1laT3QxNTVUVHl1dUZORTY4ZVpuVlN1VStwCjY4SldyeXR3RDd4UGE0Ui9EMkQzWG1CdHRudEdWWGlGZTdRYlRPQW5Udi9FS3dCcWU5OFo4UFV4cFh6dDl0SENQNmIxSEN2aGtkYmcKUEpxb0RZYkZEclh4UEhMbUI5V3ZjSzMvOVpPbjAxKy9CRzB1ajJweFRUb2V6dEhzcUIycEpmTnh3TmIwWGRpYU5mQVdVODlVbFFrWgpmMVRYbitxdEt3b3ZsTkVwdHhPL2draDlBWDg2OXpINGlkRS9zYWhkSUtLMnZQamc0YSs4dzNpdTYyOTNuVW8xa1l2WDY3V0x1NXk2CnA4Ni9CVnJxRlRLUVBpa3V2TC8vVnUvR254NmR0bS9OQTY5czRPcVdYd1o2WGFLbXFpQ2FyRlduaThvT0gyYWpoWjBKeTlmdXl6OTMKUUZydVZoTjVnZC9YNU9iMEVEeTRPSzB1eE9ZVmVIQndDT2FTRDdjR2xaZlQ3VWJ4Si94OWJyKzZRRjJ3MDI5VlpvSHhLb3d0YnAzRwpFWnRwVGU1K0lHRlRFTWNRV2M4eitEU05TRE1RZ2NUNURIN0l5a2hhb2d4bmxJcHNrWlp0SHNHR3hzNlB1dkRDVVFxbG1zTndkS0NQCkplOVVjU3cxcy91S3N2eCtXM2l5M2tTaHUzYmZYNCtlN2FzUEgwQUptM1lRclFsRnFtcmM5S0lLOEdJbEJVY1lZMTltUFdDL2xFZGIKNDdwVnJnSml5ZDQxS205ZnBRRXdRNmRsbFFPUEMzRzRPQmRJVVFQWXlURUs3b0FzellIVi9iaFNaQ2tTWVVDTUNxb0VCVjhERVNoRAowOVhUL1FrTjRGelJjQUJ4THJ6M1VkSmczN0x3TjRpN2hDMlZ2R0kyN01BT2FOTHE2QmkxWjJoMXRtb21TSytiWjBMeHk4ZDhLTkduCmp1Q2ZjaWpKMWkrVnIvSDl5MElvZWZkNkVrcWxvNjFRNG5wckJ6NXRoMUlscmdqL0RFTEppNGRHS0M3THlWQXk5QmFGaXVHZHlSTGYKVVJ5SFV2TWdBVGRqdFR4ejdibitvNnVRU05RZDFjUzMydGZSK0NmOWRuUVhiWFZLTjN1L1l0V1RwOHdwa0h5eHJhUDl3enFscXdzLwpxdWNLcVE3cHo4Z2thVFUvaUR1dERPczdNdWp2NGVkbzBwQTc5VzZ5c1YyNit0Zy9MOTFVK1hEMS9YcldVdld4V2VnbFdxVUhrWEZWCmxnOGV0NUU2d1ZiN1Y0ZXI5WHhkZmQrWmJoZTRTclVISnQ3dkFuN3huckEyM2JFTUlMWjV1eFVJcVFnZUVVZVZldzdVcXg0dXhwRDEKVXRyNUM1Slo5S3c2TGw4MWoxN3FWVUY0ODl2emM5NjlaNlBXczdsdlZWcjJ1N3RIZTgrZjNTclZlcE1yN3dmam5oUFNzU2puU25Lbwpxc2VPL3Nkb3JIamIzYTNackZKVldoNmordTJuMytybEdmV3VxWnc3Vjg1eHVjeDI0YngxVktoSncvSlhMSFpkYXpTSHpORlBLVjJxCm5ud1BaL1hxaUNtamN6SElpM3gxQ0RhdzFoeHlaWlRpRzZYdkZWZmFDZHVCQ0RtK0R3dlhpbUZUWE95RWZFMWM5U2VUVHQxdDRpNkUKcHRXczN6aWg2Uk0vM0N2dTZKWTQySXpwdFBpVHNvK0hWSXp1UnJmM1E4bWY2VGtVbytmUWpENEREMUl5Rko3dFFDU1VqQjhCV2J0YgpUb1pTdWRScktENGNBZUU2dm42R2I5T3crU0VjVk5oaTVaT1JnTTdxWU45ZmhkbDlFcC9HbFdyZmQ5TFIzZG5CU2IwN3Z3blYzakpYCm44VE12cktFMlp4c00vUXhVbFNUVHhjU0dxd2duMXVvdHdPRmRqOW1TMUVMdmhjWk8yZFZUMWFGMlYyNDZvdmJTSGt0RUZsYnJCTUkKZFNndC9lN2kvdmR3ZEl2bTVqY1VtOHF5eWk3bWY3cndackNWVU8xcnVvR0lkY0lPaEZhT3JxMm9nVjVjWjIxd2xvbXYxcVl4dTc2MgpobHlaSXN2SlhKUEx5U0ZXS1ZNMEMweTN6bVVwT2FXUFN2M3J5M3IxTUNHY2xwS1RRclQ2V0orL2xCcVp0OHVqOTV2cFhrMSs2VjBKCm85NXJHTmw1UjJsNUhpNi9YYkx0ZW41YktKb3R2cjNGUnpGWnBuajVqbzBlN2g3YmZHYmF2V0pwZEZVV2hSd3Ztbm40Qml6eHpQYXMKbGhnK2ZwWnU3dTdsUFNrdmY0SFpoejZ6UDQzV2VTQlNFOFVvVlhzY2JIMGl6SnZXSURKNXFVQU5nUVhHTEhOaW1UTnB6K0V3MENOKwpuZ01SdUFZQS9aWFhaekoxWW5hcDNtUG1vMU1rTFZHMzkyeVZvdmJ2Z1VSL1lZNzJUcjlhUGpwVmxRaXM5aFNJckswNEVtaFBsdXphClA3R1ZJVEVEWStGTStwTlBmSk5pRytvd3ErdU1tOVNVMXQ5RVVTYlhCdlFIZCswQnhTajZ0QlBjdDIrbm5nTXJTTmlWTFhIbzhtb2EKRWhiNXNOWmNlRFBlZ1J6endyeTkreWYvYzRhWktUNTNGWFR4NTZuR1pnY3RPOHFoR3doZGo3QVVkMkZ4RjM1a0N5L05penpZUERKSAo0TTkrR1d3VTI1Zm82LzUrYXI0UGRwRGpjN0R4dE0rUDB2UERzMUpEdUtYQWRuUFhCbC9wZW1GblVpMVV0d2NaK28vc0x5NENBT2lXCkJBTFh0N2xxRTdkQXUvQXBjRmZwT1JCWjZudGFxWlMvb3VQbktwV056bXhicS92RytwL2RYNVoyTm5QR0VEbXFmVXdYU0pocFdJMGkKK01QT0dPditBc1I2YXB6S2padzhBeXQydjNjV3JnSWRwbnA4ZlBBRjVBcjM0MnVsZmFsUTZDNENuL3VyZnhKSFVRU2Jjb05oZTRaegpXWWV4eWFoTnRjUkoyV3ZGNlpMSnNUVm9ERTAzRVBIRlhpc3lsNE1jSTExa0g4eEZUbU9JdlZaa3JrREV4bDd3WUs1amppbXpocVNpCkY1UFZGZ3RkZXBlaHhHUHNLSlFZOGZWUXNqczRoVitqb2VUbnJ4Zm93YnVFNXlaNzBMVjNGWWlFNG0vdk9YaWtVb010dVZEcU5OL1oKdE90UDgvTnZ6dHZ1cE54QWpHM1dUN0VoUC84S3hyclp6NyttcGJxaWpieWFuOEpwNG9xTlRLUlJybUhFcURyL0d1NVhrdTc5K21CWApvM2pvSDNQUXFEZHN4QURKNzN6a3NIN1BKb3FITkxhdUtmRUhmYkRlMXB2aUh3TXNGV3VzNWg4YlQrWDZ6U0gvZ0F5U2VuNXJrVFZzCkZTZExCY1hBKzdkVm9ySEtNUFFVSjkxa2dJVFJJd1VUKzhQTXZScmQ4U0RPVjdCWm1hZzByM3htWHlRUEg2emhpdnhKcUhGOXd2ZjkKMDgxT0cwWW9GTlJRVXI4cVJpQ1NPV3p0UHBkdWJuKzlFaWx5NkZPOUd3S2Y5cEtLZjBoM2dtS3BMWUFsOTFLOSt6WGFyWmRHNGk4Qwo3a2FmQUpSRWZSWTZlTkdDWGNVZnlwcnovcWNXWHROZy8rekMyMDk1L3N6Q28yV0hzUXAvZE9HMVNoTi9kdUdOS09nL3VmQXE3Ly9oCmhWZjE1RCs4OEdqWndmN3laeGZlY1gvWjVNS3JpdjM4TUtGbDJHRWlxUFI0ZmhqSGJTclZZWnBCM0xKQk1WUHphMS81WFJRNVlOelYKZVM3WXJRZ2pYdG9hVFkzMnVNUkJ1emJRRk9QK2pya3J0SlB1bjkwYk95bll4U28zUGQ0WUtQcDEreWV6dU5CQXZFWHNJQmE5NW85SgpCOTE1WkU5Tk0wQy9oUTQ2MzdwMWVvdDJNYVBTRDFyemp0a2R2Q05NNm5ZUTNNbVRBYUt0QUZDVGt3QkdVQ3ljRWtaZDcwYlorSGM1CkMxZi9Tb294eDY4Zk5LU0RPUG9WcnVDdSt0dlhWZ0xHNWdsNjVONWd5VUNDYzBZVmovVENQcnRIOTdzaUlndndnRUpSQkVKenNsenoKUnd2WVZTVDIzbmZMVXYxSDI4UDNScmVYY0poYjhFSEhXZ0FwWmw2WGg5QWtYVk9DN09WeTUwbm55czlZTDl4NlpzUXQvaGhHKzFNVwpVcUltR3NZV0lkaHBTRUVsUDN2YTBmZ0tsWHJLYjJzU0JvN0hUSDQ5ZHFJaDRZZ3pJU0d5SDNyVGtNQ25EUlRBMFh5WmJ2RkZaWE1VCkZGUm5iVk9GcVdjekVoWlBWem9TYktXbmtnWVNzQ2pnanE1ak1SVUY0dUdWYlVkR1Y0UWlhYUowR2pJdnlUSVM3Q2c0WkU1bkt1MlgKNDJjNkNob3YxTmF2VzdTL3FKU0FwUVBsWmpTRmlMTlhYeW9kc0F2R2pJTCsxUVdPRHFLYTcwSVpOL3R4N1V4S2JpRE10SWdCQUZmZgpEWVJTWG1pTk1hQ0NIN29Pc3dwSHdHRGY0d1RCR0JUZWR3UmhKc21WcHFIY1RLM3R5Q3ROQTBvZGluUU1Dci9ZUVhEaC9GZDZIYUt5ClVTWHl3L2dERVROVHBjYmQ3cnh0ay93WE1UTmRrb0d3QVRCVDVXb1NKcVlVb2xrZWd3ZEZtSHhLTVROZFlrR1l4MkJIcFVHVnR1VzAKV0h5SGhhK3hCbUxYamtxREx2MFR0bktuU3N3WFhUcE53NkJLSnp4b3ZPKzY2UmwwU1RlcTdaNWVTVzVzYlJjM2lJK3UzNVQxc1haZQo3RFFXSjZJeGwxbkZuU1NmUW1Pa2lJbmphTXlEU0UwMEZqZG9iRFdPajJNbG40WEczRUdZYU13dnV5bzBGamRvYk1WcDRHanMyVXBqCkxod2ZKOWlSUTlIcTg3VUtnSjI5V2dIc1duZmtWUVRYcmtHVjJERUVJdTZqY0pKOXZzWmczWkZYNGZoZEVxcUVZc3ZZa2UyQ2EzZlYKSFJrWlhOSXZDYXFmamFSQlkxcWVjZW8wL3dqUFF4N2hLVWdqbEx5S0o1SHhERFBtOWRUREJxWGxPcDlubGt6SytWRU9LWHg2eXVlcgpPWk9MRWNQZnp6QVI2d3pNb0NNb0tZUGxoeTVLMjB4cCtYQmFRcE9hN3RUUWM2TWFNWlQwQ1BQYllkWmtZMWN4T2Q2WnJTU2FrSnBoCkIwZExxUU5WWDB6ckJzdXpPVzJveU1mMGdiN1FnMWlzb0QwbzdCb1BtTnByWVY5N2NBUjZNUjZ4MGNQem92YW9UcGtlbU5JRGkrZTAKOGNDV3RZU3lqY3c5SHg4bFVHTWxrK3ZWM1BkeFBXV2dGU0R3VmdhL25hZlZmTEhqS3hwU2R3SXcrL2ZjbkxVa3pnPT0NCgldXT4NCgk8IVtDREFUQVsNCgk4eXFBWmlVQm15UlZzNjk1a3RKMWZuanpoMkt1Tjg4cDFBalZRUUpmV3pTVVB3ejRNNEJmSHhTd1FCNEFTMEpKK1F4VGNUVnp0M09DClZoTDBVbUgydE9USUs4cWNtN0FudmNiZks1K1orbFY1bE52T21XeHl4WHlNUGxXMHZEUHpMVW9BVGl2dERzVjZab0dIYzB1Yi9DdTMKQjRWSzZYWm43NjN5bVQyYmxtNUs0M3RJMkhtMi9MVDdxbEJxdlArZ1owM2V3THhYUFFmVXZKYTk4NlMrT0NLUVZCUXd2WHN0SmNNWgozbk1WVno2SlczY294UTJpdDcycmZDby9jZzNrSEFGRXMzK0NQZ1VpNmpMMlBnVEVHNnE3N091V2d1S0RBU3VVaTZJSEFIWXBwbndTCnc1VURkVFJmSXF1UHBnYzZ1RDNVSG56d2VucW5ZSnBManp1OHJUYzBqOXRqcXBvVzkzY0tIK1BvYlgyL3h2OWFjcGdjUDF5cjF4UXAKZjlSYmFIU1B5NzVCZDFEQ3pKL1NLQk1Uakx1MHEzeXFQWjhtbEUrbWNjOC9PUFNibG4xcEhrM204YnN4cXI1SFpqZEgrNGNQZk9ucwpnWWFIbGk4Q2tCdlhNU1ZUT016dERDTTdLS05SeVdhdVBVdGxzOGR0elNSTEU4YitZSktsOWViSlA1VmtDVy9SblBXKy9uQ1NwWjZOCjdqdkpjdkovaW9FY25XZURPUmI4U2JjV0kwbStrb2NmdzNFd0dkZ0xwRXNuREhNN0hrenFzaVRkU1AvTXE1UCs0bHNhejRPRllMclUKcnB5YzVJU3ExSjhNcEdCU0NTek82bFNjVW1XQktudk1kNEpZSElWS05uajFQWC84MWRodUhZalZkN3BUdEFjanhMbkdBVXJUQk1wSApvdmkxcjZRakpUK0huekRtZ0FvbEZvVTJURGlxaGxMMEJRc2RybzVYUHBtRTBtUG0rM0UvOVZhZlpPODVlcEN3eGhKQ05icDQwQ3NsCnA1ZW5SMmY1V1RIWDJMK242cE5IL3E0bVB6L1MxY2Q2NTZaK1VEcm9xMkwrU29KM3VMNnc5R216QmUrbkZ0THNXNmh4QmFubXp1RTIKbGJJUml1MG45NW52cGNzMXRuR0UwcDZQM205dkxsR2NQTXA5dG1jKzY2blZSb2pKUFpKaE1STUJtemErSzJtczhzL0RWNHJ0TmdaSgpsQldtYkQ4dnMwOUV6MG82THhCalcwam9Sclg3c2JhaktCaVhnZGRGOElvTkJLVEMwUVI4TFNTVTZ5S2lCNjBmeEp2SzE1ZVpwTndqCm9lZU5uMEhlKzlENXd6ek1KRDErTTEzdVlMNXNJVm1KNkJjNW5Ka3Zja2plTXJvMmRVYVpIM3djdkp1NDBIaVFDcDk4R3IxY3hsVW0KTzkvUzc2aTROTjlSY2Z4SzZSY1BYSnJ2cURpZUZtRE8vYVd1WEYzU3lqVVBqY3c1Qzc5cTRjdE03eldpdzc1T0tJMTZVd2I2N0s1VApPcGVFMFhreC9JMVNyNHZJVkNDY2F4cldGSktaZnVNS2ZXWFYyeU1lbnhoTlZhZ25nTWkrYUg5QkgrbU5JalhZZUthZ0krYUd3dDQrCllDWkkyOTBEUzJLenBSMDJBSWpwelVEVTRkRUdQRUJqVEhwN3RwKzQzWk16eFZ2K3NwUjlHY1RVMnlvZTJ5R1ZmanRQeHI3OFpwQVgKRzE4TXZ2U2JJcExtS3lRYUIxQ1Z2ZGVTMWRucTQ0a2lkbUVHbGFwQlYwZTNyUHBwOGZTcVJDVFg0bUpYL2NSK1FGRjhMNmpYUlR3ZQpRWWlQRkhKVnM5M1J1WEtCQ050ZHRCVElvSmUzK01PbmZsTUVhNzRwWW0vd1MzL0FtOVFIWXk1djk2RUt3ZVVjaUN0TjEzUHM2SC9zCjEzTndrY1dKdmptOXBCVSszMkZ2ZVhYSDMzc1MxRTlWVWRmVVhqZ1ZZOXpPM1hmSlBwNnJ5czFMdlRyYTZwZGFOOC9SV2k5MWhOUysKZlZRR1NkVU41dE9Nb2lwWlphVDFpcWtkMjRVNytuMDRQaTdjS2J4Y1RXSklicGJqSTdrSkJHcW1VYTdSMUkzVGhUdjZqVDdxOFdsVQoyWU0xZlRDdU1YWnpvazdqNFN1aDJWbXZNM2lDUTZXSFc4MGRSYitrWTlSTVUwMG94VStMMW9XZklHbXBLRGE2dEFTYitLK2lZanJxCldoQjQ1NDVXakMxNElSaXMyVUlocFJBS29VZkY5bks0Y3gzTnBVRTdySDVMa2JERmVmSEhFSzZLYUVVeUJFalZxVHBrWUl3cDEwVW8KQXJ4NGtxYUYzdG1oSVZVMXN6TTVyZENxOGxHOFlnd2pTbGtjUlJjNFB0alY1Z2RrS1Z4ZlJZTUUwMGdwWWhSSk5DQkIwNm9FVlhVawpDU2xTMERnNmJwbGdnNTBvdEFBRzA5RXV5UVZPWnJteWRLbW5jV1Flc3hhdlVPejJJNDl6d0sxS2FVcy9CN3hiT2toa1ozRnp1RXhvCkp6bXMyVUFrS3VIRG1uR3N4TWJ5SGM1MjRybTFWVHc4MWs0OEo3dTJFOC9aVnIxdUNpV0hTWjViUXRvRzR1R2hXZEpCREdPbXdnSEkKdDREMEEwUUN0ZWU5RkdSN0JtaTAxU1JjSWVVNlJ2UWJKRWdLL1liV3Bjc2g3VjB6ZXJwekMrYlhPeUpLR0NHTTZpR25lcVhYQVdzYwp0Y0dqclJmTWFXTmlUSHJhYUhZRW0wOGJPOGt4OXFpTjRLRE41b1hYanpUSVBXSUpmVlUvZDU5a3JxZWhBQjBBYXlpb1BBNWVOUlNnCkEyQXpFcUFSNVlHRTNiRHB0UEd3OGpNeG56WUNyblE2ZFE1RWJPZk8rTlBHTlE2R0ZCZHRtdURJMWUzVU9SNHpZUkVkRkZzSlNhVXgKVnhCeGR4RGVBSFpOeVI0cmdqQVRBNDRmQWhFM2pvZ24xeDFEeXNLVks0R2dDS2FCSm9HdUkzY0VrVjUzR3ZUYW9ReHh4aGRWQXJ0eQpDVVF5N3ArN3JRQjJiUUJRK3FVL0VPdExtR1FTQTRKME5aSXBKd0FJWXhhYU1JL0NEb0lpV0EzM3NJemt1a1NWcExFQTFMQnlieEFNCkFTcXhESTUwbUNTcmdjaHNHK3cxMnpvK3ExaTZTdThhN2NKamJxK3B0cXQvczlaMmRnSnhwakczV2FWWGtEbzJHa3M3a29nUE9rODcKRWdqMDloQnpmSHBWQWpGb0xFMnZPdzI4MUNHbHNUUzd6aGdRamFVNWIyNXI4QWNYbFlRQ1FpNEtuR1VNcklmVVVmY1hOMHl3QklGWQo3bU5JV1hia1ZWYURwUWdvSWhCeFd3MldSTGx4RWx3NkFIcmxIUmxkMGdqTTBhTVp1dHpWN0lNc3RvYjFtOFBDWTAwR1ppWXdqeThiCkZmSGo5QmRLaXowWHpFY2U4QnBZWkdOQjFYQXp0OVdpZFhHK3IzYUR0OVZxTnJMRGZiV0p6ZDFXcS9ndEhlK3JUV3p1dGxyWUMrYSsKMmczZVZnc2tQKzYrMmczZVZxdjZ4a2x2bDEzeHR0cUFHOFNOM1ZZTDVvSzdyM2FEdDlVcWw5STYzbGViMk54dHRaWkwwSWo5dTM1dgpxNFZ6d2R4WHU4SGJhZ01SOWI1YWVQRzhMY2hDa1JJSG5aakNTTm9COEs2R3hmWlViUUp2emxQbEZCOHo1SlIrRlRaS0pwd1hmMkJJCkNOenZHbkhFUmJEVURmb0svblFtbEhwR2NoUjZVWTlDS3NqZDBreWk0K3IwOEdGT0tjNjdZYktRUUJLYkMrL1ZUbzBxQ2dGVFVRYnUKOE83eXpEaVlWMC9uWTROYjFSRlF6TVpOZ1JlSzNDd2VKTFFobjZtaUlIbkxVSXJZMGs4cUF4R3owQytlMDdvdjBDYkNNdnBaNWE0KwpQK2pwZkM1cG5zQktVdmtOVmxjQ1gwK1VKdEE3K2t1N2xCWklMMGFSWGdac1E0VHBsUUwrVHpHd0Y0akFrOHB1YlR3d24xSUdJaEh3ClMxdWFMNmF3Z2RBdFN4L0Q4Ym40VzVJRFRGRDVod2Ivd0wvWmZKQmhjMEZXRU1BWEFmNTYzZ3ZFVU5zZ0V3K2Vqd04wc0FSVXhXNjYKSk0rcncvNThPQm1MOHU5Z0FmNzBjSEYrZTFJTkZvTEtDMTN3d2w0d0JvWkVkMEZyOENnT3owZTdZSmhkQ0FiOCsvQTMvQ0FGZGhkZwpKRlh3K1NwQVV4bU9aZGtzVFhOQ2x1ZXlZRlFVbjh2eFdTWkhaMmcrei9GWjhBdVh5K1Z6YkQ3SDhEekgwMkN3RkVPekFrT0R2M1FlCnZBOWZvcms4eXdpWlhJYk44Z0lDdzJkcElaZGpPWUhOOHd4cWs4K1pXZ25CQnpGQXE5Z0FnL3NOdnB5Q0Q3L0FUMzhIR1RwNEVYeDYKb1lNRE9QQldJSnVqdUF3bjVESThLMlJ6REJka2NpeVZ6ZWM1SnNQVEdWWUlmZ2Q0Z2NyeVBNM2tCSUhQNUFCOGV4TW1UM0UwbldWcApsdUZ6UEpjTGdwRlFuQ0RraFN6Tk1ZNE5XSTdLY2hsZW9KbTh3SUZlKzRHbE5ubUdZcGhNbnVjNEljK0JYcGVHa2VHcFRCWU1uY3VECjl1RDcwbFRzRFVBbkRFM2xjeHhFYm9iSk12bWxKZ3lYcFhnV0RJek5jQm5Zd0Q2S3BRWk9VMWxxWThlSGZSaDJqSHF1U2ovd0R0YXYKdXJ4ODJUeWd2SXcrNGh4WVA0R25BR0l6Yko3TDgyaUVTMjA0bmdKRDVXZ2hvNExQZzhYSTBRRFJUQjdRVmM2aGhjTzBsOXZ3T1lyTwpzeHlmWWZJTStDbTROQkltazZWeUFFY0FGUWczRGhPM3R3RG9wUUV1bUR5Zlkza3dOcmdtOWpZTXkxSjhoc3NCNUtQbjluSFluenNzCm9iWEZFajZXeHJDRVUrK1ZnV3U0ZXd0RVJta2FZRElaaWhGNEtBMnlPUjRzTnlRZ01BZ0JpQkdCaDF6SU1HQ1NnRTZCOEdDRW5KQUwKZ2pjeWVjQXZBTldnSTBCRTU0RHdPSXJtYVNoUmFNQk1iRERIVURrQjljWXd2SkFSWUJ2d0c4Y0FFZ1ZEQVJQaWcrQWRJUWVranBBRgpraWVMd0hnTTVod00zRmwyMnI3SHhHR2gwSkw2YzNIOE1aTGl3ZlR0ZUFnRFROcHplVGorQ0tMSDU4Ty9wUGFuT0pVS2hZWTRIb3drCitWTDhsaFFadXdUdlpQeVhPQm9PbkNIcEhZR1BrOFY0QUI3Yy9JWndHUVdhQUFSbE5wdkxNa0M2MEFBYndYUkxFa2RMNzVhVXNTYjkKOUZlWnlHTkpWbnJqbEhlNVlQcGtQRjlxZVRJZXpvZmk2SG9oRG1SeFBGK2pIOXJudTFhYytIM2IzRE9ydkV0akVLZzBiWW1ENFdLbQpkOFF5Rk5qakFOVUIzWTdMNTNISWIwakRqMCsvV0xIT2pQTXpPbCtOVlRwaWd1bnlaT0xRZURUcGYvMDluSzFEUE14YVUvZTFNR3JqClRBNUliU0hEZ0swSUtDaVpIT2JkKytGZy9xbHFQa3VNMnhSbDhYdm0vRlNkVUlxbXNrQVU1WE5nU3RwY3l1VlNIeWgzcmNsY2hGeHUKMHF1QTlrWUJTZ0VDUGM5a09Kb1Bab0JxeE5CQTltV0JJR05aQmdwRU9rc0IwUW9VQnFCR2dXMFVDanVCNDRBY0F6OHdmSjZGa2d6SQpMcFlHaEFlMmdCeE5BNlVDaUhWQWdYbXdUd0h3VEFZSlRTQ1lnWExGNTJtd1R3UEt6RElVTFFDNW53TkNFL1NOaEtibmVQN3ZrSW5DCi81T0ovMEdaeUFEczV4Z2h6d0w5TTVkbjJQOG5FLzlMWkNKSFUwQkU1SUFNWVlBODRiTC9GVEx4dkt6WXZjQUtSb1pwS2dWTTRxYjQKSWQzSTRoQ0lpTURIVFB4TENvcmpNWHhYbW9JbndROVptczBuc2hTY2ZVNytocitBVjdUbXdKNitxZ2YrZjNtZExaOD0NCgldXT4NCjwvaTpwZ2Y+DQo8L3N2Zz4NCg==' ) no-repeat; +} + +.sharethis-wrap #category-result-wrapper, .sharethis-wrap #page-result-wrapper { + margin: 0 .15rem; + border: 1px solid #eeeeee; + max-height: 10rem; + overflow-y: auto; + overflow-x: hidden; + display: none; + position: absolute; + background: #ffffff; + max-width: 295px; + width: 100%; + z-index: 1; + box-shadow: 0 1px 10px -2px #979797; +} + +.sharethis-wrap #category-result-wrapper li.ta-category-item, .sharethis-wrap #page-result-wrapper li.ta-page-item { + list-style: none; + cursor: pointer; + font-size: 14px; + padding: .5rem 1rem; + margin: 0; +} + +.sharethis-wrap #category-result-wrapper li.ta-category-item:hover, .sharethis-wrap #page-result-wrapper li.ta-page-item:hover { + font-weight: bold; + background: rgb(241, 241, 241); +} + +.sharethis-wrap li.omit-item { + background: #979797; + color: #ffffff; + width: auto; + display: inline; + padding: .45rem .45rem; + border-radius: 3px; + margin-left: .5rem; +} + +.sharethis-wrap li.omit-item:first-of-type { + margin-left: 0; +} + +.sharethis-wrap li.omit-item span.remove-omit { + margin-left: 0.5rem; + color: #979797; + background: #ffffff; + border-radius: 10px; + padding: .1rem .3rem; + font-size: 10px; + cursor: pointer; +} + +.sharethis-wrap .current-page-omit, .sharethis-wrap .current-category-omit { + max-width: 21rem; +} + +.sharethis-wrap .margin-input-fields { + display: none; + margin-left: 1rem; +} + +.sharethis-wrap .margin-control-button { + background: #e2e2e2; + color: #979797; + border: none; + border-radius: 3px; + font-size: 10px; + padding: .3rem .5rem; + outline: none; +} + +.sharethis-wrap .margin-control-button:hover { + background: #dadada; +} + +.sharethis-wrap .margin-control-button span { + background: #979797; + border-radius: 2px; + padding: .15rem .2rem .1rem .15rem; + color: #e2e2e2; + font-size: 10px; + margin-left: .2rem; + font-family: arial, sans-serif; +} + +.sharethis-wrap .margin-control-button.active-margin { + background: #4089c1; + color: #ffffff; + border: none; + border-radius: 3px; + font-size: 10px; + padding: .3rem .5rem; +} + +.sharethis-wrap .margin-control-button.active-margin:hover { + background: #3d79ae; +} + +.sharethis-wrap .margin-control-button.active-margin span { + background: #ffffff; + border-radius: 2px; + color: #4089c1; + font-size: 10px; + margin-left: .2rem; + padding: .15rem .2rem .1rem .15rem; + font-family: arial, sans-serif; +} + +.sharethis-wrap .margin-control-button.active-margin + .margin-input-fields { + display: inline-block; +} + +.sharethis-wrap .margin-input-fields input { + max-width: 4rem; +} + +.sharethis-wrap .margin-input-fields span { + color: #cecece; + font-size: 25px; + margin: 0 .5rem; + font-weight: 300; +} + +/*General & Connection Settings*/ + +.sharethis-connection-wrap h4, .sharethis-general-wrap h4 { + font-size: 23px; + font-weight: normal; + text-align: center; + max-width: 75%; + line-height: 30px; + margin: 0 auto 3rem; +} + +a.st-support, a.st-contact, .sharethis-general-wrap .random-form-table th a { + color: #1ca5d8; + text-decoration: none; +} + +.sharethis-connection-wrap form .form-table, .sharethis-general-wrap form .form-table { + max-width: 28%; + float: left; + margin-top: 0; +} + +.sharethis-connection-wrap form .form-table th { + min-width: 80px; +} + +.sharethis-general-wrap .form-table th { + min-width: 17.5rem; +} + +.sharethis-general-wrap .form-table th span, .sharethis-general-wrap .random-form-table th span { + padding-top: 1rem; + display: block; + color: #6f6f6f; + font-weight: 100; + font-size: 12px; +} + +.sharethis-connection-wrap form p.submit { + width: auto; + display: inline-block; + margin-top: .9rem; +} + +.sharethis-general-wrap form p.submit { + margin-top: 2.5rem; +} + +.sharethis-general-wrap form p.submit input { + background: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; + color: #444444; + box-shadow: none; + text-shadow: none; +} + +.sharethis-connection-wrap p { + font-size: .8rem; + max-width: 55%; + display: block; +} + +.sharethis-general-wrap form, .sharethis-general-wrap .random-form-table { + border-top: solid 1px #d6d6d6; + margin: 2rem 0 0 1.5rem; + padding-top: .5rem; +} + +.sharethis-general-wrap .random-form-table:first-of-type th { + text-align: left; + vertical-align: top; + padding-top: 1rem; + max-width: 275px; + min-width: 275px; + display: block; +} + +.sharethis-general-wrap a.st-support, .sharethis-general-wrap .random-form-table th a { + font-size: 12px; +} + +.sharethis-general-wrap #random-gif-container { + padding: 1rem 1rem 0; + max-width: 35rem; + text-align: left; +} + +.sharethis-general-wrap #random-gif-container img { + width: 100%; +} + +.sharethis-general-wrap .random-form-table { + width: 98%; +} + +.sharethis-general-wrap .random-form-table th { + text-align: left; +} + +.sharethis-general-wrap .st-error { + border-left: 4px solid #dc3232; + padding: 12px; + margin: 0 .1rem .5rem; + background-color: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); +} + +.sharethis-connection-wrap #sharethis-loading { + display: none; + width: 100%; + height: 100%; + position: fixed; + background: rgba( 255, 255, 255, 0.8); + text-align: center; + top: 0; + left: -18px; +} + +.sharethis-connection-wrap #sharethis-loading img { + margin-top: 16%; +} + +.sharethis-connection-wrap #sharethis-loading span { + display: block; + font-size: 14px; + color: #848484; +} + +/* Setup style */ + +.sharethis-connection-wrap .sharethis-setup-logo { + width: 14%; + margin: 1rem auto 0; +} + +.st-loading-gif { + position: fixed; + top: 2rem; + left: 10rem; + background: #ffffff; + opacity: .9; + width: 90%; + height: 100%; + z-index: 99999; + text-align: center; + padding-top: 40vh; + display: none; +} + +.sharethis-connection-wrap .sharethis-setup-logo img { + width: 100%; +} + +.sharethis-connection-wrap .sharethis-setup-steps div, .sharethis-connection-wrap .sharethis-setup-steps span { + display: inline-block; +} + +.sharethis-setup-steps { + text-align: center; + margin: 3rem 0; +} + +#sharethis-step-one-wrap h1 { + text-align: center; + font-size: 60px; + font-weight: bold; + color: #2e7d33; + margin-bottom: 3rem; +} + +.sharethis-setup-steps .step-spacer { + border-top: 1px solid black; + padding: 0 3.5rem .2rem; + margin: 0 .5rem; +} + +.sharethis-setup-steps .step-spacer:last-of-type { + border: none; + padding: 0; + margin: 0; +} + +.sharethis-setup-steps .step-num { + background: #d8d8d8; + color: #ffffff; + border-radius: 25px; + font-size: 12px; + width: 25px; + height: 25px; + line-height: 25px; +} + +.sharethis-setup-steps .step-num.current-step { + background: #91d400; +} + +.sharethis-setup-steps .step-num.finished-step { + background: #2e7d32; +} + +.sharethis-setup-steps .step-num.finished-step img { + width: 15px; + vertical-align: middle; +} + +#sharethis-step-one-wrap .button-choices-wrap { + max-width: 55%; + margin: auto; +} + +#sharethis-step-one-wrap .button-choices-wrap .sharethis-button-option { + width: 47%; + margin-right: .5rem; + display: inline-block; + background: #ffffff; + box-shadow: 0 5px 30px 6px #cdcdcd; +} + +#sharethis-step-one-wrap .button-choices-wrap .sharethis-button-option span { + padding: 1rem; + display: inline-block; + line-height: 25px; +} + +#sharethis-step-one-wrap .button-choices-wrap .sharethis-button-option a { + display: inline-block; + padding: 0 1rem 1rem; + color: #ffaa41; + text-decoration: none; + font-weight: 500; +} + +#sharethis-step-one-wrap .button-choices-wrap .sharethis-button-option img { + width: 100%; +} + +#sharethis-step-one-wrap .sharethis-login-message { + margin-top: 3rem; + text-align: center; +} + +a { + color: #3a843e; +} + +/* Step two */ + +#sharethis-step-two-wrap .st-preview-message { + margin: 2rem auto; + text-align: center; +} + +#sharethis-step-two-wrap .button-configuration-wrap { + padding: 1rem 1rem 2rem; + background: #fff; + max-width: 71%; + margin: auto auto 3rem; + text-align: center; + box-shadow: 0 0 40px 12px #cdcdcd; +} + +a.st-rc-back { + background: #ffffff; + box-shadow: 0 3px 0 0 #a6a6a6; + border-radius: 4px; + border: 1px solid #ddd; + color: #565656; + cursor: pointer; + margin: auto; + display: flex; + font-size: 14px; + font-weight: 300; + height: 40px; + letter-spacing: 0.1em; + line-height: 40px; + opacity: 1; + padding: 0 20px; + text-align: center; + text-transform: uppercase; + text-decoration: none; + transition: opacity 0.2s ease-out; + position: absolute; + left: .5rem; + top: .5rem; +} + +a.st-rc-back:hover { + background: #eeeeee; +} + +a.st-rc-back:active { + background: #eeeeee; + box-shadow: none; +} + +#sharethis-step-two-wrap a.st-rc-link, #sharethis-step-three-wrap a.st-rc-link { + background: #2e7d32; + box-shadow: 0 3px 0 0 #1b5e20; + border-radius: 4px; + border: none; + color: #fff; + cursor: pointer; + margin: auto; + display: flex; + font-size: 14px; + font-weight: 300; + height: 40px; + letter-spacing: 0.1em; + line-height: 40px; + opacity: 1; + padding: 0 20px; + position: relative; + width: 5rem; + text-align: center; + text-transform: uppercase; + text-decoration: none; + transition: opacity 0.2s ease-out; +} + +#sharethis-step-three-wrap a.st-rc-link { + width: 12rem; +} + +#sharethis-step-two-wrap a.st-rc-link:hover, #sharethis-step-three-wrap a.st-rc-link:hover { + background: #388e3c; +} + +#sharethis-step-two-wrap a.st-rc-link:active, #sharethis-step-three-wrap a.st-rc-link:active { + background: #388e3c; + box-shadow: none; +} + +#sharethis-step-two-wrap a.st-rc-link:first-of-type { + position: absolute; + right: .5rem; + top: .5rem; +} + +#sharethis-step-two-wrap .button-configuration-wrap hr { + margin: 2.5rem 1rem; +} + +#sharethis-step-two-wrap .button-configuration-wrap h3 { + margin-bottom: 1rem; +} + +#sharethis-step-two-wrap .button-configuration-wrap .share-buttons { + margin: 1rem 1rem 0; +} + +.share-buttons .share-button { + border-radius: 4px; + color: #fff; + cursor: pointer; + display: inline-block; + height: 48px; + margin-bottom: 8px; + margin-right: 8px; + position: relative; + text-align: center; + transition: all .3s; + top: 0; + width: 48px; +} + +.share-buttons .share-button img { + box-sizing: border-box; + height: 48px; + padding: 12px; + width: 48px; +} + +.button-configuration-wrap hr { + margin: 2rem 0 0; +} + +.button-configuration-wrap .share-buttons .share-button[data-selected=false]:not(:hover) { + background: #ccc !important; +} + +#sharethis-step-two-wrap .button-configuration-wrap .share-buttons .share-button>svg { + height: 20px; + vertical-align: top!important; + width: 20px; +} + +.button-configuration-wrap .alignment-button[data-alignment=left] { + text-align: left; +} + +.button-configuration-wrap .alignment-button[data-alignment=center] { + text-align: center; +} + +.button-configuration-wrap .alignment-button[data-alignment=right] { + text-align: right; +} + +.button-configuration-wrap .alignment-button[data-alignment=justified] .box { + width: 31%; +} + +.button-configuration-wrap .alignment-button { + cursor: pointer; + border-radius: 5px; + overflow: hidden; + display: inline-block; + margin: 8px; +} + +.button-configuration-wrap .alignment-button .top { + width: 190px; + height: 20px; + margin-bottom: 0; + padding: 5px 5px 0; + background: #bdbdbd; +} + +.button-configuration-wrap .alignment-button[data-selected=true] .top { + background: #92d400; +} + +.button-configuration-wrap .alignment-button .bottom { + background: #e0e0e0; + width: 180px; + height: 25px; + padding: 5px 10px 0; + margin-top: 0; + text-align: left +} + +.button-configuration-wrap .alignment-button[data-selected=true] .bottom { + background: #c2ea6a; +} + +.button-configuration-wrap .alignment-button .box { + border-radius: 10px; + display: inline-block; + height: 15px; + width: 15px; + background: #fff; +} + +.button-configuration-wrap .button-sizes .item { + padding-top: 10px; +} + +[type=radio].with-gap:checked+label:after, [type=radio].with-gap:checked+label:before, [type=radio]:checked+label:after { + border: 2px solid #92d400; +} + +[type=radio]:not(:checked)+label:after, [type=radio]:not(:checked)+label:before { + border: 2px solid #5a5a5a; +} + +[type=radio]:checked+label:before { + border: 2px solid transparent; +} + +[type=radio].with-gap:checked+label:after, [type=radio]:checked+label:after { + background-color: #92d400; +} + +[type=radio].with-gap:checked+label:after { + -webkit-transform: scale(.5); + transform: scale(.5); +} + +[type=radio]:checked+label, [type=radio]:not(:checked)+label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 27px; + transition: .28s ease; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +[type=radio]+label:after, [type=radio]+label:before { + content: ""; + position: absolute; + left: 0; + top: 0; + margin: 4px; + width: 16px; + height: 16px; + z-index: 0; + transition: .28s ease; +} + +[type=radio]:checked, [type=radio]:not(:checked) { + position: absolute; + left: -9999px; + opacity: 0; +} + +input[type=checkbox], input[type=radio] { + box-sizing: border-box; + padding: 0; +} + +[type=radio].with-gap:checked+label:after, [type=radio].with-gap:checked+label:before, [type=radio]:checked+label:after, [type=radio]:checked+label:before, [type=radio]:not(:checked)+label:after, [type=radio]:not(:checked)+label:before { + border-radius: 50%; +} + +.switch label input[type=checkbox]:checked+.lever { + background-color: #c2ea6a; +} + +.switch label input[type=checkbox] { + opacity: 0; + width: 0; + height: 0; +} + +[type=checkbox]:checked, [type=checkbox]:not(:checked) { + position: absolute; + left: -9999px; + opacity: 0; +} + +input[type=checkbox], input[type=radio] { + box-sizing: border-box; + padding: 0; +} + +.switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 40px; + height: 15px; + background-color: #818181; + border-radius: 15px; + margin-right: 10px; + transition: background .3s ease; + vertical-align: middle; + margin: 0 16px; +} + +.item .switch, #inline-share-buttons-config .item input[type=text] { + display: inline-block; + height: 25px; + padding: 0; + margin: 6px 0 0 10px; + width: 60px; + text-align: center; + vertical-align: top; +} + +.switch label input[type=checkbox]:checked+.lever:after { + background-color: #92d400; + left: 24px; +} + +.switch label .lever:after { + content: ""; + position: absolute; + display: inline-block; + width: 21px; + height: 21px; + background-color: #f1f1f1; + border-radius: 21px; + box-shadow: 0 1px 3px 1px rgba(0,0,0,.4); + left: -5px; + top: -3px; + transition: left .3s ease,background .3s ease,box-shadow .1s ease; +} + +.button-configuration-wrap .row { + margin: auto; +} + +.item .switch, #inline-share-buttons-config .item input[type=text] { + display: inline-block; + padding: 0; + margin: 0; + width: 60px; + text-align: center; + vertical-align: top; +} + +input:not([type]), input[type=date], input[type=datetime-local], input[type=datetime], input[type=email], .button-configuration-wrap input[type=number], input[type=password], input[type=search], input[type=tel], .button-configuration-wrap input[type=text], input[type=time], input[type=url], textarea.materialize-textarea { + background-color: transparent; + border: none; + border-bottom: 1px solid #9e9e9e; + border-radius: 0; + outline: none; + height: 2rem; + width: 20%; + margin: 0; + padding: 0; + box-shadow: none; + box-sizing: content-box; + transition: all .3s; +} + +.row .button-config .item input[type=text] { + width: 17%; + margin-left: 1.8rem; +} + +.row .button-config { + display: inline-block; + width: 33%; + vertical-align: top; +} + +.row .button-config .item { + text-align: left; + margin: 1.5rem 0 0 7rem; +} + +#sharethis-step-two-wrap .row .button-config .item { + margin: 1.5rem 0 0 5rem; +} + +input[type=range] { + border: 1px solid #fff; +} + +input[type=range] { + position: relative; + background-color: transparent; + border: none; + outline: none; + width: 100%; + margin: 15px 0; + padding: 0; +} + +input[type=range]+.thumb { + position: absolute; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: #92d400; + top: 10px; + margin-left: -6px; + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +input[type=range], input[type=range]+.thumb { + cursor: pointer; +} + +input[type=range] { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background-color: #92d400; + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; + margin: -5px 0 0; + transition: .3s; +} + +input[type=range]:focus::-webkit-slider-runnable-track { + background: #ccc; +} + +input[type=range] { + border: 1px solid #fff; +} + +input[type=range]::-moz-range-track { + height: 3px; + background: #ddd; + border: none; +} + +input[type=range]::-moz-range-thumb { + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #92d400; + margin-top: -5px; +} + +input[type=range]:-moz-focusring { + outline: 1px solid #fff; + outline-offset: -1px; +} + +input[type=range]:focus::-moz-range-track { + background: #ccc; +} + +input[type=range]::-ms-track { + height: 3px; + background: transparent; + border-color: transparent; + border-width: 6px 0; + color: transparent; +} + +input[type=range]::-ms-fill-lower { + background: #777; +} + +input[type=range]::-ms-fill-upper { + background: #ddd; +} + +input[type=range]::-ms-thumb { + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #92d400; +} + +input[type=range]:focus::-ms-fill-lower { + background: #888; +} + +input[type=range]:focus::-ms-fill-upper { + background: #ccc; +} + +.range-field { + position: relative; +} + +input[type=range] { + position: relative; + border: none; + outline: none; + width: 100%; + margin: 15px 0; + padding: 0; +} + +input[type=range]:focus { + outline: none; +} + +input[type=range]+.thumb { + position: absolute; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: #363E27; + top: 10px; + margin-left: -6px; + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +input[type=range]+.thumb .value { + display: none; + width: 30px; + text-align: center; + color: #1d1d1c; + font-size: 0; + -webkit-transform: rotate(45deg); +} + +input[type=range]+.thumb.active { + border-radius: 50% 50% 50% 0; +} + +input[type=range]+.thumb.active .value { + color: #ffffff; + margin-left: -1px; + margin-top: 8px; + font-size: 10px; +} + +input[type=range] { + -webkit-appearance:none; +} + +input[type=range]::-webkit-slider-runnable-track { + height: 3px; + background: #c2c0c2; + border: none; +} + +.button-configuration-wrap .button-config-half { + width: 40%; + display: inline-block; +} + +.button-configuration-wrap .button-config-half span { + color: #9e9e9e; +} + +/* Step three */ + +#sharethis-step-three-wrap .page-content[data-size=small] { + width: 450px; + padding: 1rem 1rem 2rem; + background: #fff; + margin: auto auto 3rem; + text-align: center; + box-shadow: 0 0 40px 12px #cdcdcd; +} + +#sharethis-step-three-wrap .input>input, #sharethis-login-wrap .input>input { + background-color: transparent; + border: none; + border-bottom: 1px solid #9e9e9e; + border-radius: 0; + display: block; + font-family: Roboto,sans-serif; + font-weight: 300; + height: 40px; + line-height: 40px; + margin: 0; + outline: none; + padding: 0; + position: relative; + text-align: left; + width: 100%; + z-index: 2; +} + +#sharethis-step-three-wrap .input>input:focus, #sharethis-login-wrap .input>input:focus { + outline: none; + box-shadow: none; +} + +#sharethis-step-three-wrap .input>input:focus + label, #sharethis-login-wrap .input>input:focus + label { + color: #92d400; + font-size: 13px; + top: -4px; +} + +#sharethis-step-three-wrap .input>input, #sharethis-step-three-wrap .input>label, #sharethis-login-wrap .input>input, #sharethis-login-wrap .input>label { + font-size: 16px; + transition: all .2s ease-in; + box-shadow: none; +} + +#sharethis-step-three-wrap .input.has-text>label, #sharethis-login-wrap .input.has-text>label { + color: rgba(0,0,0,.87); + font-size: 13px; + top: -4px; +} + +#sharethis-step-three-wrap [type=checkbox]:checked, [type=checkbox]:not(:checked) { + position: absolute; + left: -9999px; + opacity: 0; +} + +#sharethis-step-three-wrap [type=checkbox]+label { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + -webkit-user-select: none; + -moz-user-select: none; + -khtml-user-select: none; + -ms-user-select: none; +} + +#sharethis-step-three-wrap [type=checkbox].filled-in:not(:checked)+label:before { + width: 0; + height: 0; + border: 3px solid transparent; + left: 6px; + top: 10px; + -webkit-transform: rotate(37deg); + transform: rotate(37deg); + -webkit-transform-origin: 20% 40%; + transform-origin: 100% 100%; +} + +#sharethis-step-three-wrap [type=checkbox].filled-in+label:after, [type=checkbox].filled-in+label:before { + content: ""; + left: 0; + position: absolute; + transition: border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s; + z-index: 1; +} + +#sharethis-step-three-wrap [type=checkbox]+label:before, [type=checkbox]:not(.filled-in)+label:after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + border: 2px solid #5a5a5a; + border-radius: 1px; + margin-top: 2px; + transition: .2s; +} + +#sharethis-step-three-wrap .st-terms-checkbox { + width: 100%; + display: inline-block; + text-align: center; + margin: 1.5rem 0; +} + +#sharethis-step-three-wrap .st-terms-checkbox a:visited, #sharethis-step-three-wrap .st-terms-checkbox a { + color: #2e7d32; + outline: 0; +} + +#sharethis-step-three-wrap .st-terms-checkbox [type=checkbox].filled-in:not(:checked)+label:after { + height: 15px; + width: 15px; + background-color: transparent; + border: 2px solid #5a5a5a; + top: 0; + z-index: 0; +} + +#sharethis-step-three-wrap .st-terms-checkbox [type=checkbox].filled-in+label:after, [type=checkbox].filled-in+label:before { + content: ""; + left: 0; + position: absolute; + transition: border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s; + z-index: 1; +} + +#sharethis-step-three-wrap .st-terms-checkbox [type=checkbox].filled-in+label:after { + border-radius: 2px; +} + +#sharethis-step-three-wrap .st-terms-checkbox [type=checkbox].filled-in:checked+label:before { + top: 0; + left: 1px; + width: 3px; + height: 9px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid #fff; + border-bottom: 2px solid #fff; + -webkit-transform: rotate(37deg); + transform: rotate(37deg); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} + +#sharethis-step-three-wrap .st-terms-checkbox [type=checkbox].filled-in:checked+label:after { + top: 0; + width: 15px; + height: 15px; + border: 2px solid #92d400; + background-color: #92d400; + z-index: 0; +} + +#sharethis-step-three-wrap .st-terms-checkbox [type=checkbox].filled-in+label:after, [type=checkbox].filled-in+label:before { + content: ""; + left: 0; + position: absolute; + transition: border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s; + z-index: 1; +} + +/* Login */ + +#sharethis-property-select-wrap { + display: none; +} + +#sharethis-login-wrap .sharethis-login-form, #sharethis-property-select-wrap .sharethis-login-form { + max-width: 90%; + width: 380px; + padding: 1rem 1rem 2rem; + background: #fff; + max-width: 71%; + margin: auto auto 3rem; + text-align: center; + box-shadow: 0 0 40px 12px #cdcdcd; +} + +#sharethis-login-wrap .login-account, #sharethis-property-select-wrap #connect-property, #sharethis-property-select-wrap #create-new-property { + background: #2e7d32; + box-shadow: 0 3px 0 0 #1b5e20; + border-radius: 4px; + border: none; + color: #fff; + cursor: pointer; + margin: auto; + display: flex; + font-size: 14px; + font-weight: 300; + height: 40px; + letter-spacing: 0.1em; + line-height: 40px; + opacity: 1; + padding: 0 20px; + position: relative; + width: 5rem; + text-align: center; + text-transform: uppercase; + text-decoration: none; + transition: opacity 0.2s ease-out; +} + +#sharethis-login-wrap .login-account { + width: 3rem; +} + +#sharethis-login-wrap p { + margin: 1rem auto 0; +} + +#sharethis-property-select-wrap #sharethis-properties { + margin-bottom: 1rem; +} + +#sharethis-property-select-wrap #connect-property { + margin-bottom: 1rem; +} + +#sharethis-property-select-wrap #create-new-property { + width: 12rem; +} + +#sharethis-login-wrap .login-account:hover, #sharethis-property-select-wrap #connect-property:hover, #sharethis-property-select-wrap #create-new-property:hover { + background: #388e3c; +} + +#sharethis-login-wrap .login-account:active, #sharethis-property-select-wrap #connect-property:active, #sharethis-property-select-wrap #create-new-property:active { + background: #388e3c; + box-shadow: none; +} + +.sharethis-inline-share-buttons, +.sharethis-sticky-share-buttons { + position: relative; +} + +.sharethis-prev-stick .sharethis-Inline-share-buttons, .sharethis-prev-stick.sharethis-inline-share-buttons, .sharethis-prev-stick .sharethis-inline-share-buttons { + position: fixed; + top: 2rem; + z-index: 99999; + background: #ffffff; + width: 87%; + padding: 1rem; + left: 10rem; + -webkit-box-shadow: 0 4px 11px 0 #cdcdcd; + -moz-box-shadow: 0 4px 11px 0 #cdcdcd; + box-shadow: 0 4px 11px 0 #cdcdcd; +} + +.sharethis-Sticky-share-buttons, .sharethis-sticky-share-buttons .st-sticky-share-buttons.st-left { + z-index: 0!important; + margin-left: 10rem!important; +} + +.sharethis-Sticky-share-buttons, .sharethis-sticky-share-buttons .st-sticky-share-buttons .st-btn { + transition: unset!important; + -webkit-transition: unset!important; +} + +.button-configuration-wrap { + position: relative; + z-index: 10001; +} + +div.st-design-message { + display: block; + color: #6f6f6f; + font-weight: 100; + font-size: 12px; + line-height: 1.5; + width: 280px; + text-align: left; + margin-bottom: 1rem; +} + + +/* Sharethis button config page */ + +.platform-config-wrapper { + display: none; + text-align: center; +} + +.platform-config-wrapper[data-enabled="Disabled"] > div, +.platform-config-wrapper[data-enabled="Disabled"] + table +{ + opacity: .5; +} + +.platform-config-wrapper.engage { + display: block; +} + +.sharethis_page_sharethis-share-buttons .button-configuration-wrap { + text-align: center; + width: 90%; + margin: auto; +} + +.sharethis_page_sharethis-share-buttons .button-configuration-wrap h3 { + font-weight: bold; + margin-bottom: 0; +} + +.sharethis_page_sharethis-share-buttons .button-configuration-wrap span.config-desc { + font-size: 12px; +} + +.sharethis_page_sharethis-share-buttons .button-configuration-wrap .share-buttons { + margin-top: .5rem; +} + +.sharethis_page_sharethis-share-buttons .sharethis-sticky-share-buttons .st-sticky-share-buttons.st-left.stuck-buttons { + left: -1.3rem!important; +} + +.button-config .item { + color: #9e9e9e; +} + +.button-configuration-wrap .button-config-half h3 { + margin-bottom: 1rem; +} + +/* Tool tip */ + +.button-config .tooltip-icon { + font-size: 15px; + padding-left: 5px; +} + +.button-config .tooltip-icon>svg { + background: #9e9e9e; + box-shadow: 0 2px 5px 0 rgba(0,0,0,.16); + width: 10x; + border-radius: 10px; +} + +.button-config .item.tooltip span.lbl { + color: #9e9e9e; + display: inline-block; + line-height: 25px; + padding: 0 0 8px; + text-align: left; + vertical-align: top; + position: relative; +} + +.material-tooltip { + width:250px; + text-align:left; + font-size:12px +} + +.tooltipped:hover + .material-tooltip { + display: block; +} + +.material-tooltip, .st-tooltip { + background:#404040; + border-radius:4px; + position: absolute; + padding: .5rem; + color: #ffffff; + display: none; + left: 9rem; + top: .5rem; + z-index: 999999; +} + +.sharethis_page_sharethis-share-buttons .material-tooltip, .sharethis_page_sharethis-share-buttons .st-tooltip { + left: 11rem; + padding: .5rem 1rem; +} + +.st-tooltip { + box-shadow: 0 2px 5px 0 rgba(0,0,0,.16); + color: #ffffff; + cursor:pointer; + font-size:11px; + min-height:70px; + padding:20px 23px 20px 24px; + position:fixed; + max-width:160px; + z-index:1; +} + +#sharethis-form-color { + display: flex; + flex-wrap: wrap; + margin: auto; + width: 50%; +} + +#sharethis-form-color .color { + box-shadow: 1px 1px 4px 1px #cdcdcd; + cursor: pointer; + margin: 5px; +} + +#sharethis-form-color .color.selected { + box-shadow: 0px 0px 3px 5px #21a219; +} + +#publisher-purpose .purpose-item { + margin-bottom: 25px; +} + +#publisher-purpose .purpose-item div.title { + display: block; + text-align: left; + font-weight: bold; + width: 100%; +} + +#publisher-purpose .purpose-item label { + display: inline-block; + width: 21%; +} + +.gdpr-platform #publisher-purpose .purpose-item label:first-of-type { + width: 14%; +} + + +.gdpr-platform .vendor-table-body { + border: solid 1px #cdcdcd; + padding: 10px; + max-height: 600px; + overflow: scroll; +} + +.gdpr-platform .vendor-table-cell { + padding: 20px 0; + border-bottom: solid 1px #cdcdcd; +} + +.gdpr-platform .vendor-table-cell input[type="checkbox"] { + display: none; +} + +.gdpr-platform .exclusion-item { + padding: 20px 0; + border-bottom: solid 1px #cdcdcd; +} + +.gdpr-platform input[type=checkbox] { + box-sizing: border-box; + padding: 0; +} + +.gdpr-platform .switch label input[type=checkbox]:checked + .lever, +.gdpr-platform .switch label input[type=radio]:checked + .lever { + background: #09cd18; + border: 2px solid #09cd18; + box-shadow: none; +} + +.gdpr-platform input[type="text"] { + line-height: 40px; + margin-bottom: 10px; + width: 300px; +} + +.gdpr-platform select { + margin-bottom: 10px; + line-height: 40px; + width: 300px; +} + +.gdpr-platform .switch label input[type=checkbox]:checked + .lever:before, +.gdpr-platform .switch label input[type=radio]:checked + .lever:before { + content: "✓"; + position: absolute; + top: 0; + left: 5px; + color: #fff; +} + +.gdpr-platform .switch label { + font-size: 12px; + display: block; + margin-top: 10px; +} + +.gdpr-platform .switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 20px; + height: 18px; + background-color: #fff; + border: 1px solid #cdcdcd; + border-radius: 0; + margin-right: 10px; + transition: background .3s ease; + vertical-align: middle; + margin: 0 16px; +} + +.gdpr-platform .switch label .lever:after { + border-radius: 0; + content: unset; + position: unset; +} + + +.gdpr-platform [type=radio].filled-in + label:before { + content: ""; + left: 0; + position: absolute; + transition: border .25s, background-color .25s, width .2s .1s, height .2s .1s, top .2s .1s, left .2s .1s; + z-index: 1; +} + +p.form-color { + float: left; + width: 100%; + padding-top: 15px; +} + +#sharethis-form-color { + display: flex; + flex-wrap: wrap; + margin: auto; + width: 50%; +} + +#sharethis-form-color .color { + box-shadow: 1px 1px 4px 1px #cdcdcd; + cursor: pointer; + margin: 5px; +} + +#sharethis-form-color .color.selected { + box-shadow: 0px 0px 3px 5px #21a219; +} + +.empty-choices { + display: flex; + justify-content: center; + opacity: 1; + transition: opacity .6s; +} + +a.st-rc-link { + margin: 20px 0 0 10px; +} + +.gdpr-platform a.st-rc-link { + background: #09CD18; + border-radius: 3px; + border: none; + color: #fff; + cursor: pointer; + margin: .8em auto .5em; + display: inline-block; + padding: 15px 60px; + letter-spacing: 0.1em; + text-align: center; + text-decoration: none; + transition: opacity 0.2s ease-out +} + +.empty-choices a { + padding: 10px; + min-width: 250px; +} + +.empty-choices a.st-rc-link { + margin: 20px 0 20px 10px; +} + +#starter-questions { + flex-direction: column; + display: flex; + align-items: center; +} + +.accor-wrap { + margin: 1rem 0 0; + display: inline-block; + width: 100%; +} + +.accor-wrap .accor-tab { + background: #308cc1; + padding: .5rem; + border-radius: 5px; + color: #ffffff; +} + +.accor-wrap .well { + display: inline-block; + width: 100%; +} + +.accor-wrap .well h3 { + margin: 1rem 0; +} + +.accor-wrap .well .col-md-12:first-of-type h3 { + margin-top: 0; +} + +.accor-wrap .accor-content { + display: none; +} + +.accor-wrap .accor-arrow { + border: 1px solid #ffffff; + padding: .2rem .4rem; + border-radius: 5px; + margin: 0 .3rem 0 1rem; + font-size: 12px; + cursor: pointer; + font-family: arial, sans-serif; + position: absolute; + left: 43px; +} + +.manual-select, +.ssb-select { + display: none; +} + +.manual-select.engage, +.ssb-select.engage { + display: block; +} + +.network-select-type-wrap { + display: flex; + flex-wrap: wrap; + margin-top: 3rem; +} + +.network-select-type-wrap h2 { + width: 100%; +} + +.network-select-type-wrap .network-type { + border: 1px solid #ddd; + border-radius: 4px; + margin: 1rem; + padding: 1.75rem; + width: 42%; +} + +.network-type.engage label:after { + background-color: #92d400; + border: 2px solid #92d400; + -webkit-transform: scale(.5); + transform: scale(.5); +} + +.network-type.engage label:before { + border: 2px solid #92d400; +} + +.item label { + font-size: 1rem; +} + +.network-select-type-wrap .network-type.engage { + border-color: #21a219; +} + +.network-select-type-wrap .network-type.engage .item label { + color: #21a219; +} + +#social-service-count, +#social-service-count-button { + width: 100%!important; // Override global select menu style. +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/css/meta-box.css b/wp/wp-content/plugins/sharethis-share-buttons/css/meta-box.css new file mode 100644 index 00000000..34d90a81 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/css/meta-box.css @@ -0,0 +1,44 @@ +/* Meta boxes */ + +#sharethis-meta-box .button-check-wrap { + display: block; + margin-bottom: .5rem; +} + +#sharethis-meta-box .sharethis-shortcode { + background: #ffffff; + border: 1px solid #b4b9be; + width: 100%; + margin-right: 1rem; +} + +#sharethis-meta-box .under-message { + font-style: italic; + color: #979797; +} + +#sharethis-meta-box #sticky { + margin-bottom: 1rem; +} + +/* Block styles */ +.inline-share-button-block img { + max-width: 37px; + margin-right: 10px; + display: inline-block; + vertical-align: middle; + background-color: #a4d94a; + padding: 10px; +} + +.inline-share-button-block { + font-size: 20px; + font-family: sans-serif; + border-bottom: 2px solid #93d227; + border-top: 2px solid #93d227; + padding: 10px; + color: #93d227; + text-align: center; + max-width: 400px; + margin: auto; +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/css/mu-style.css b/wp/wp-content/plugins/sharethis-share-buttons/css/mu-style.css new file mode 100644 index 00000000..a6103052 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/css/mu-style.css @@ -0,0 +1 @@ +/* Hide sticky buttons */ diff --git a/wp/wp-content/plugins/sharethis-share-buttons/instance.php b/wp/wp-content/plugins/sharethis-share-buttons/instance.php new file mode 100644 index 00000000..74464ea2 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/instance.php @@ -0,0 +1,34 @@ + { + enableButton.addEventListener( 'click', ( e ) => { + e.stopPropagation(); + e.preventDefault(); + + self.updateButtons( enableButton.dataset.button, 'On' ); + self.loadPreview( 'turnon', enableButton.dataset.button ); + } ); + } ); + } + + // Disable tool submit. + const disableButtons = document.querySelectorAll( '.disable-tool' ); + + if ( disableButtons ) { + disableButtons.forEach( disableButton => { + disableButton.addEventListener( 'click', ( e ) => { + e.stopPropagation(); + e.preventDefault(); + + self.updateButtons( disableButton.dataset.button, 'Off' ); + self.loadPreview( 'turnoff', disableButton.dataset.button ); + } ); + } ); + } + + // Tabs. + const buttonTabs = document.querySelectorAll( '.sharethis-wrap .tabs-wrap .button-tab' ); + const firstTable = document.querySelector( 'table.form-table' ); + const firstSubmit = document.querySelector( 'form .submit' ); + + if ( firstTable && firstSubmit ) { + firstTable.classList.add( 'engage' ); + firstSubmit.classList.add( 'engage' ); + } + + if ( buttonTabs ) { + buttonTabs.forEach( buttonTab => { + buttonTab.addEventListener( 'click', () => { + const buttonType = buttonTab.className.replace( 'button-tab ', '').replace( ' engage', ''); + const currentButton = document.querySelector( '.tabs-wrap .button-tab.engage' ); + const currentContent = document.querySelector( '.platform-config-wrapper.engage' ); + const currentTable = document.querySelector( 'table.form-table.engage' ); + const formTables = document.querySelectorAll( 'table.form-table' ); + + let newTable = 'inline' === buttonType && formTables ? formTables[0] : formTables[1]; + newTable = 'sticky' !== buttonType && 'inline' !== buttonType ? '' : newTable; + + if ( currentButton && currentContent ) { + currentButton.classList.remove( 'engage' ); + currentContent.classList.remove( 'engage' ); + } + + if ( currentTable ) { + currentTable.classList.remove( 'engage' ); + } + + buttonTab.classList.add( 'engage' ); + + const tabContent = document.querySelector( '.' + buttonType + '-platform' ); + + if ( tabContent ) { + tabContent.classList.add( 'engage' ); + } + + if ( newTable && '' !== newTable ) { + newTable.classList.add( 'engage' ); + } + + self.loadPreview( '', buttonType ); + } ); + } ); + } + + // Add click events to networkselect. + const networkTypes = document.querySelectorAll( '.network-type' ); + + if ( networkTypes ) { + networkTypes.forEach( networkType => { + const networkTypeInput = networkType.querySelector( '.item' ); + + if ( networkTypeInput ) { + networkTypeInput.addEventListener( 'click', ( e ) => { + const buttonTab = document.querySelector('.button-tab.engage'); + const buttonType = buttonTab ? buttonTab.className.replace( 'button-tab ', '').replace( ' engage', '') : 'inline'; + const selectedType = document.querySelector( '.' + buttonType + '-platform' + ' .network-type.engage' ); + const manualSelects = document.querySelectorAll( '.' + buttonType + '-platform' + ' .manual-select' ); + const ssbSelects = document.querySelectorAll( '.' + buttonType + '-platform' + ' .ssb-select' ); + + selectedType.classList.remove( 'engage' ); + selectedType.querySelector( 'input' ).checked = false; + e.currentTarget.parentNode.classList.add( 'engage' ); + e.currentTarget.parentNode.querySelector( 'input' ).checked = true; + + if ( e.currentTarget.parentNode.classList.contains( 'manual-share' ) ) { + if ( manualSelects && ssbSelects ) { + manualSelects.forEach( manualSelect => { + manualSelect.classList.add( 'engage' ); + } ); + + ssbSelects.forEach( ssbSelect => { + ssbSelect.classList.remove( 'engage' ); + } ); + } + } else if ( manualSelects && ssbSelects ) { + manualSelects.forEach( manualSelect => { + manualSelect.classList.remove( 'engage' ); + } ); + ssbSelects.forEach( ssbSelect => { + ssbSelect.classList.add( 'engage' ); + } ); + } + + self.loadPreview( 'ssb', buttonType ); + } ); + } + } ); + } + + // Smart share buttons count change. + document.querySelector( '.inline-platform #social-service-count' ).addEventListener('change',() => { + self.loadPreview( '', 'inline' ); + } ); + + document.querySelector( '.sticky-platform #social-service-count' ).addEventListener('change',() => { + self.loadPreview( '', 'sticky' ); + } ); + + // Scroll to anchor in vendor list. + // Send user input to category search AFTER they stop typing. + $('body').on( 'keyup', '.vendor-search input', function( e ) { + clearTimeout( timer ); + + timer = setTimeout( function() { + self.scrollToAnchor($(this).val()); + }.bind( this ), 500 ); + } ); + + // Toggle button menus when arrows are clicked. + $( 'body' ).on( 'click', '.accor-wrap .accor-tab', function() { + var type = $( this ).find( 'span.accor-arrow' ); + + self.updateAccors( type.html(), type ); + } ); + + // New color select. + this.$container.on('click', "#sharethis-form-color .color", function() { + $('#sharethis-form-color .color').removeClass('selected'); + $(this).addClass('selected'); + }); + + // clear or show choices. + this.$container.on('click', '#clear-choices', function(e) { + e.preventDefault(); + e.stopPropagation(); + + $( '.purpose-item input' ).prop( 'checked', false ); + }); + + // clear or show choices. + this.$container.on('click', '#see-st-choices', function(e) { + e.preventDefault(); + e.stopPropagation(); + $('.purpose-item input[name="purposes[1]"]').prop('checked', true); + $('.purpose-item input[name="purposes[3]"][value="consent"]').prop('checked', true); + $('.purpose-item input[name="purposes[5]"][value="consent"]').prop('checked', true); + $('.purpose-item input[name="purposes[6]"][value="consent"]').prop('checked', true); + $('.purpose-item input[name="purposes[9]"][value="legitimate"]').prop('checked', true); + $('.purpose-item input[name="purposes[10]"][value="legitimate"]').prop('checked', true); + }); + + // Uncheck radio if click on selected box. + this.$container.on( 'click', '.gdpr-platform .lever', ( e ) => { + e.preventDefault(); + e.stopPropagation(); + + const theInput = $( e.currentTarget ).siblings( 'input' ); + + if ( 'select-purpose' === theInput.attr( 'name' ) && !theInput.is( ':checked' ) ) { + if ( 'consent' === theInput.val() ) { + $( '.purpose-item input' ).prop( 'checked', false ); + $( '.empty-choices' ).addClass( 'engage' ); + } else { + $( '.purpose-item input[name="purposes[1]"]' ).prop( 'checked', true ); + $( '.purpose-item input[name="purposes[3]"][value="consent"]' ).prop( 'checked', true ); + $( '.purpose-item input[name="purposes[5]"][value="consent"]' ).prop( 'checked', true ); + $( '.purpose-item input[name="purposes[6]"][value="consent"]' ).prop( 'checked', true ); + $( '.purpose-item input[name="purposes[9]"][value="legitimate"]' ).prop( 'checked', true ); + $( '.purpose-item input[name="purposes[10]"][value="legitimate"]' ).prop( 'checked', true ); + } + + theInput.prop( 'checked', true ) + + $( '.back-next' ).addClass( 'engage' ); + + return; + } + + if ( theInput.is( ':checked' ) ) { + $( `input[name="${theInput.attr( 'name' )}"]` ).prop( 'checked', false ) + } else { + theInput.prop( 'checked', true ) + } + } ); + + // On off button events. + this.$container.on( 'click', '.share-on, .share-off', function() { + + // Revert to default color. + $( this ).closest( 'div' ).find( 'div.label-text' ).css( 'color', '#8d8d8d' ); + + // Change the input selected color to white. + $( this ).find( '.label-text' ).css( 'color', '#ffffff' ); + } ); + + // Copy text from read only input fields. + this.$container.on( 'click', '#copy-shortcode, #copy-template', function() { + self.copyText( $( this ).closest( 'div' ).find( 'input' ) ); + } ); + + // Open close options and update platform and WP on off status. + this.$container.on( 'click', '.enable-buttons .share-on, .enable-buttons .share-off', function() { + var button = $( this ).closest( 'div' ).attr( 'id' ), + type = $( this ).find( 'div.label-text' ).html(); + + self.updateButtons( button, type, 'click' ); + } ); + + // Toggle button menus when arrows are clicked. + this.$container.on( 'click', 'span.st-arrow', function() { + var button = $( this ).attr( 'id' ), + type = $( this ).html(); + + self.updateButtons( button, type, '' ); + } ); + + // Click reset buttons. + this.$container.on( 'click', 'p.submit #reset', function() { + var type = $( this ) + .closest( 'p.submit' ) + .prev() + .find( '.enable-buttons' ) + .attr( 'id' ); + + self.setDefaults( type ); + } ); + + // Send user input to category search AFTER they stop typing. + this.$container.on( 'keyup', 'input#category-ta, input#page-ta', function( e ) { + var type = $( this ).siblings( '.search-st-icon' ).attr( 'id' ), + result = '#' + type + '-result-wrapper'; + + clearTimeout( timer ); + + timer = setTimeout( function() { + self.returnResults( $( this ).val(), type, result ); + }.bind( this ), 500 ); + } ); + + // Force search when search icon is clicked. + this.$container.on( 'click', '.search-st-icon', function() { + var type = $( this ).attr( 'id' ), + key = $( this ).siblings( 'input' ).val(), + result = '#' + type + '-result-wrapper'; + + self.returnResults( key, type, result ); + } ); + + // Select an item to exclude. Add it to list. + this.$container.on( 'click', '.ta-page-item, .ta-category-item', function() { + var type = $( this ) + .closest( '.list-wrapper' ) + .find( 'span.search-st-icon' ) + .attr( 'id' ); + + self.updateOmit( $( this ), type ); + } ); + + // Remove excluded item from list. + this.$container.on( 'click', '.remove-omit', function() { + $( this ).closest( 'li.omit-item' ).remove(); + } ); + + // Toggle margin control buttons. + this.$container.on( 'click', 'button.margin-control-button', function() { + var status = $( this ).hasClass( 'active-margin' ); + + self.activateMargin( this, status ); + } ); + + // Color Picker. + var colorOptions = { + change: function( event, ui ){ + var button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + if (true === event.target.classList.contains('custom-icon-color')) { + self.$iconColor = ui.color.toString(); + } else { + self.$backgroundColor = ui.color.toString(); + } + + self.loadPreview( '', button ); + }, + clear: function( event, ui) { + var button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + if (true === event.target.classList.contains('custom-icon-color')) { + self.$iconColor = ui.color.toString(); + } else { + self.$backgroundColor = ui.color.toString(); + } + + self.loadPreview( '', button ); + } + }; + var colorSOptions = { + change: function( event, ui ){ + var button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + if (true === event.target.classList.contains('custom-st-icon-color')) { + self.$iconSColor = ui.color.toString(); + } else { + self.$backgroundSColor = ui.color.toString(); + } + + self.loadPreview( '', button ); + }, + clear: function( event, ui) { + var button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + if (true === event.target.classList.contains('custom-st-icon-color')) { + self.$iconSColor = ui.color.toString(); + } else { + self.$backgroundSColor = ui.color.toString(); + } + + self.loadPreview( '', button ); + } + }; + $( '#inline .custom-button-color' ).wpColorPicker(colorOptions ); + $( '#inline .custom-icon-color' ).wpColorPicker(colorOptions ); + $( '#sticky .custom-st-button-color' ).wpColorPicker(colorSOptions ); + $( '#sticky .custom-st-icon-color' ).wpColorPicker(colorSOptions ); + + $( 'body' ).on( 'click', '.item #black, .item #gray, .item #social, .item #white, .item #custom, .item #cta, .item #counts, .item #none, .item #medium, .item #small, .item #large', function() { + var checked = $( this ).siblings( 'input' ).is( ':checked' ), + button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + $( '.sharethis-inline-share-buttons' ).removeClass( 'st-has-labels' ); + + if ( ! checked ) { + $( this ).closest( '.st-radio-config' ).find( '.item' ).each( function() { + $( this ).find( 'input' ).prop( 'checked', false ); + } ); + + $( this ).siblings( 'input' ).prop( 'checked', true ); + } + + self.loadPreview( '', button ); + } ); + + // All levers. + this.$container.on( 'click', '.item div.switch', function() { + var button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + self.loadPreview( '', button ); + } ); + + // Minimum count. + this.$container.on( 'change', 'input.minimum-count, #radius-selector, .vertical-alignment, .mobile-breakpoint', function() { + var button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + self.loadPreview( '', button ); + } ); + + // Languages. + this.$container.on( 'change', '#st-language-inline, #st-language-sticky', function() { + var id = $( this ).attr( 'id' ), + language = $( this ).find( 'option:selected' ).val(); + + if ( 'st-language-inline' === id ) { + $( '#st-language-sticky option[value="' + language + '"]' ).prop( 'selected', true ); + } else { + $( '#st-language-inline option[value="' + language + '"]' ).prop( 'selected', true ); + } + + self.loadPreview( '', 'sticky' ); + self.loadPreview( '', 'inline' ); + } ); + + // Button alignment. + this.$container.on( 'click', '.button-alignment .alignment-button', function() { + var button = $( this ).closest( '.selected-button' ).attr( 'id' ); + + $( '.sharethis-inline-share-buttons' ).removeClass( 'st-justified' ); + $( '.button-alignment .alignment-button[data-selected="true"]' ) + .attr( 'data-selected', 'false' ); + $( this ).attr( 'data-selected', 'true' ); + + self.loadPreview( '', button ); + } ); + + // Select or deselect a network. + this.$container.on( 'click', '.share-buttons .share-button', function() { + var selection = $( this ).attr( 'data-selected' ), + button = $( this ).closest( '.selected-button' ).attr( 'id' ), + network = $( this ).attr( 'data-network' ); + + if ( 'true' === selection ) { + $( this ).attr( 'data-selected', 'false' ); + $( '.' + button + '-platform .sharethis-selected-networks > div > div div[data-network="' + network + '"]' ).remove(); + } else { + $( this ).attr( 'data-selected', 'true' ); + $( '.' + button + '-platform .sharethis-selected-networks > div > div' ).append( '

    ' ); + } + + self.loadPreview( '', button ); + } ); + + const form = document.querySelector( '.sharethis-wrap form' ); + + form.addEventListener('submit', function (event) { + const button = document.querySelector('.platform-config-wrapper.engage .selected-button').id; + const currentForm = document.querySelector( '.sharethis-wrap form' ); + // Prevent the default form submission behavior + event.preventDefault(); + + // Create an empty object to store the form data + const formData = {}; + + // Iterate through the form fields + for (const field of currentForm.elements) { + + // Check if the field has a name and is not a button + if (field.name && field.name.includes('sharethis') && field.name.includes( button ) && field.type !== 'submit') { + // Add the field's name and value to the formData object + if ( field.checked ) { + formData[field.name] = field.value; + } + + if ( 'number' === field.type ) { + formData[field.name] = field.value; + } + + if ( field.name.includes('page_off') || field.name.includes('category_off') ) { + formData[field.name] = field.value; + } + } + } + + // Now, formData is an object containing the form data in key-value pairs + // Set option value for button. + wp.ajax.post( 'update_st_settings', { + formData: JSON.stringify(formData), + button: button, + nonce: self.data.nonce + } ).always( function(response) { + self.loadPreview( 'submit', 'inline' ); + self.loadPreview( 'submit', 'sticky' ); + self.loadPreview( 'submit', 'gdpr' ); + + window.location.reload(); + } ); + + }); + }, + + /** + * Show button configuration. + * + * @param button + * @param type + */ + updateButtons: function( button, type ) { + const pTypes = [ 'show', 'On', 'â–º', 'true' ]; + + // If not one of the show types then hide. + const turnOnOff = -1 !== $.inArray( type, pTypes ) ? 'On' : 'Off'; + + // Set option value for button. + wp.ajax.post( 'update_buttons', { + type: button.toLowerCase(), + onoff: turnOnOff, + nonce: this.data.nonce + } ).always( function() { + } ); + }, + + /** + * Update buttons on platform + * + * @param button + * @param type + */ + updatePlatform: function( button, type ) { + var status, + buttonConfig, + self = this, + button = button.toLowerCase(); + + // Set status variable to bool. + if ( 'On' === type ) { + status = true; + } else { + status = false; + } + + // Default button config with enable. + if ( 'inline' === button ) { + buttonConfig = { "enabled": ( true === status ), "alignment" : "center", "font_size" : 12, "has_spacing" : true, "labels" : "cta", "min_count" : 10, "networks" : [ "facebook", "twitter", "pinterest", "email", "sms", "sharethis" ], "num_networks" : 6, "padding" : 10, "radius" : 4, "show_total" : true, "size" : 40, "size_label" : "medium", "spacing" : 8 } + } else { + buttonConfig = { "enabled": ( true === status ), "alignment" : "left", "labels" : "cta", "min_count" : 10, "mobile_breakpoint" : 1024, "networks" : [ "facebook", "twitter", "pinterest", "email", "sms", "sharethis" ], "num_networks" : 6, "padding" : 12, "radius" : 4, "show_mobile" : true, "show_toggle" : true, "show_total" : true, "size" : 48, "top" : 160 } + } + }, + + /** + * Copy text to clipboard + * + * @param copiedText + */ + copyText: function( copiedText ) { + copiedText.select(); + document.execCommand( 'copy' ); + }, + + /** + * Add the reset buttons to share buttons menu + */ + createReset: function() { + var button = ''; + + $( '.sharethis-wrap form .submit' ).append( button ); + }, + + /** + * Set to default settings when reset is clicked. + * + * @param type + */ + setDefaults: function( type ) { + wp.ajax.post( 'set_default_settings', { + type: type, + nonce: this.data.nonce + } ).always( function() { + if ( 'both' !== type ) { + location.href = location.pathname + '?page=sharethis-inline-sticky-share-buttons&reset=' + type; + } else { + location.reload(); + } + } ); + }, + + /** + * Send input value and return LIKE categories/pages. + * + * @param key + * @param type + * @param result + */ + returnResults: function( key, type, result ) { + wp.ajax.post( 'return_omit', { + key: key, + type: type, + nonce: this.data.nonce + } ).always( function( results ) { + if ( '' !== results ) { + $( result ).show().html( results ); + } else { + $( result ).hide(); + } + }.bind( this ) ); + }, + + /** + * Add / remove selected omit item to omit list. + * + * @param value + * @param type + */ + updateOmit: function( value, type ) { + var result = '#' + type + '-current-omit', + wrapper = '#' + type + '-result-wrapper'; + + // Hide the results when item is selected and add it to list. + $( wrapper ).hide(); + $( result ).append( '
  • ' + value.html() + 'X
  • ' ); + }, + + /** + * Get current config data from user. + */ + getConfig: function() { + var result = null, + callExtra = 'secret=' + this.data.secret; + + if ( 'undefined' === this.data.secret || undefined === this.data.secret ) { + callExtra = 'token=' + this.data.token; + } + + $.ajax( { + url: 'https://platform-api.sharethis.com/v1.0/property/?' + callExtra + '&id=' + this.data.propertyid, + method: 'GET', + async: false, + contentType: 'application/json; charset=utf-8', + success: function( results ) { + result = results; + }, + error: function (results) { + result = { + inline: { + networks: [], + }, + sticky: { + networks: [], + }, + }; + } + } ); + + return result; + }, + + /** + * Activate specified option margin controls and show/hide + * + * @param marginButton + * @param status + */ + activateMargin: function( marginButton, status ) { + if ( ! status ) { + $( marginButton ).addClass( 'active-margin' ).find( 'span.margin-on-off' ).html( 'On' ); + $( marginButton ).siblings( 'div.margin-input-fields' ).show().find( 'input' ).prop( 'disabled', false ); + } else { + $( marginButton ).removeClass( 'active-margin' ).find( 'span.margin-on-off' ).html( 'Off' ); + $( marginButton ).siblings( 'div.margin-input-fields' ).hide().find( 'input' ).prop( 'disabled', true ); + } + }, + + /** + * Load preview buttons. + * + * @param type + * @param button + */ + loadPreview: function( type, button ) { + if ( 'initial' === type ) { + this.setConfigFields( button, '', '' ); + } + + var bAlignment = $( '.button-alignment .alignment-button[data-selected="true"]' ).attr( 'data-alignment' ), + sAlignment = $( '.sticky-alignment' ).find( 'input' ).is( ':checked' ), + self = this, + bSize = $( '.button-size .item input:checked' ).siblings( 'label' ).html(), + bLabels = $( '#' + button + ' .button-labels .item input:checked' ).siblings( 'label' ).attr( 'id' ), + bCount = $( '#' + button + ' input.minimum-count' ).val(), + bColor = $('#' + button + ' .button-color .item input:checked') + .siblings('label') + .attr('id'), + customColor = this.$backgroundColor, + customSColor = this.$backgroundSColor, + customIconColor = this.$iconColor, + customSIconColor = this.$iconSColor, + showTotal = $( '#' + button + ' span.show-total-count' ).siblings( 'div.switch' ).find( 'input' ).is( ':checked' ), + extraSpacing = $( 'div.extra-spacing' ).find( 'input' ).is( ':checked' ), + showMobile = $( 'div.show-on-mobile' ).find( 'input' ).is( ':checked' ), + showDesktop = $( 'div.show-on-desktop' ).find( 'input' ).is( ':checked' ), + vertAlign = $( '.vertical-alignment' ).val() + 'px', + mobileBreak = $( '.mobile-breakpoint' ).val(), + spacing = 0, + bRadius = $( '#' + button + ' #radius-selector' ).val() + 'px', + language = $( '#st-language-' + button + ' option:selected' ).val(), + publisherPurpose = $('#publisher-purpose input:checked'), + publisherPurposes = [], + display = $('#sharethis-user-type option:selected').val(), + name = $('#sharethis-publisher-name').val(), + scope = 'publisher', + color = $( '#sharethis-form-color .color.selected' ).attr('data-value'), + languageGDPR = $( '#st-language' ).val(), + networks, + size, + padding, + fontSize, + config, + beforeConfig, + theFirst = false, + wpConfig, + upConfig, + theData, + enabled = false, + buttonCode = button.toLowerCase(); + + let smartShareCount = document.querySelector( '.' + buttonCode + '-platform #social-service-count' ); + const smartShareButton = document.querySelector( '.' + buttonCode + '-platform .smart-share.engage.network-type' ); + smartShareCount = smartShareCount ? smartShareCount.value : 6; + + // Set button var. + button = 'inline' === buttonCode || 'sticky' === buttonCode ? buttonCode + '-share-buttons' : 'gdpr-compliance-tool-v2'; + + if ( 'initial' === type && undefined !== this.data.buttonConfig[ buttonCode ] ) { + networks = this.data.buttonConfig[ buttonCode ]['networks']; + } else { + networks = []; + + $( '#' + buttonCode + '-8 > div .st-btn' ).each( function ( index ) { + networks[index] = $( this ).attr( 'data-network' ); + } ); + } + + if ( 'sync-platform' === type && undefined !== this.$config[ button ] ) { + networks = this.$config[ button ]['networks']; + } + + // If newly turned on use selected networks. + if ( 'ssb' === type || 'turnon' === type || undefined !== this.data.buttonConfig[ buttonCode ] && undefined === this.data.buttonConfig[ buttonCode ]['networks'] ) { + networks = []; + + $( '.' + buttonCode + '-platform .share-buttons .share-button[data-selected="true"]' ).each( function ( index ) { + networks[index] = $( this ).attr( 'data-network' ); + } ); + } + + if ( 'submit' === type ) { + networks = []; + + $( '#' + buttonCode + '-8 > div .st-btn' ).each( function ( index ) { + networks[index] = $( this ).attr( 'data-network' ); + } ); + } + + // If true alignment is right else its left. + if ( sAlignment ) { + sAlignment = 'right'; + } else { + sAlignment = 'left'; + } + + if ( 'Small' === bSize ) { + size = 32; + fontSize = 11; + padding = 8; + + $( '#radius-selector' ).attr( 'max', 16 ); + } + + if ( 'Medium' === bSize ) { + size = 40; + fontSize = 12; + padding = 10; + + $( '#radius-selector' ).attr( 'max', 20 ); + } + + if ( 'Large' === bSize ) { + size = 48; + fontSize = 16; + padding = 12; + + $( '#radius-selector' ).attr( 'max', 26 ); + } + + if ( extraSpacing ) { + spacing = 8; + } + + // If submitted or turned on make sure enabled setting is set properly. + if ( undefined !== this.$config[ button ] && undefined !== this.$config[ button ]['enabled'] ) { + enabled = 'true' === this.$config[ button ]['enabled'] || + true === this.$config[ button ]['enabled'] || + true === this.$tempEnable[ buttonCode ]; + } else { + enabled = false; + } + + if ( 'inline' === buttonCode ) { + config = { alignment: bAlignment, + enabled: enabled, + color: bColor, + background_color: customColor, + text_color: customIconColor, + font_size: fontSize, + labels: bLabels, + min_count: bCount, + padding: padding, + radius: bRadius, + networks: networks, + show_total: showTotal, + show_mobile_buttons: true, + size: size, + spacing: spacing, + language: language, + }; + } + if ( 'sticky' === buttonCode ) { + config = { alignment: sAlignment, + enabled: enabled, + labels: bLabels, + color: bColor, + background_color: customSColor, + text_color: customSIconColor, + min_count: bCount, + radius: bRadius, + networks: networks, + mobile_breakpoint: mobileBreak, + top: vertAlign, + show_mobile: showMobile, + show_total: showTotal, + show_desktop: showDesktop, + show_mobile_buttons: true, + language: language, + }; + } + + if ( !!smartShareButton ) { + config.is_ssb = true; + config.num_ssb_networks = smartShareCount; + } + + if ('gdpr-compliance-tool-v2' === button) { + var publisherPurposes = [], + publisherRestrictions = {}; + + $('#publisher-purpose input:checked').each( function( index, value ) { + var theId = $(value).attr('data-id'), + legit = 'consent' !== $(value).val(); + + publisherPurposes.push({ 'id': theId, 'legitimate_interest' : legit }); + }); + + $('.vendor-table-cell-wrapper label input:checked').each( function( index, value ) { + publisherRestrictions[$(value).attr('data-id')] = true; + }); + + config = { + enabled: enabled, + display: display, + publisher_name: name, + publisher_purposes: publisherPurposes, + publisher_restrictions: publisherRestrictions, + language: languageGDPR, + color: color, + scope: scope, + }; + } + + // Set config for initial post. + beforeConfig = config; + + var types = ['submit', 'initial-platform', 'turnon', 'turnoff']; + + if ( types.includes( type ) ) { + + // If submitting WP keep platform timestamp if exists. + if ( 'submit' === type && undefined !== this.$config[ button ] && undefined !== this.$config[ button ]['updated_at'] ) { + config['updated_at'] = this.$config[ button ]['updated_at']; + } + + // If platform different from WP. + if ( 'initial-platform' === type ) { + config = this.$config[ button ]; + + if ( undefined === this.data.buttonConfig || true === this.data.buttonConfig ) { + theFirst = 'upgrade'; + } + } + + // If first load ever. + if ( 'initial-platform' === type && undefined !== this.data.buttonConfig[ buttonCode ] && undefined === this.data.buttonConfig[ buttonCode ]['updated_at'] && undefined !== this.$config[ button ]['updated_at'] ) { + config = beforeConfig; + config['updated_at'] = this.$config[ button ]['updated_at']; + config['networks'] = this.data.buttonConfig[ buttonCode ]['networks']; + } + + if ( 'turnon' === type ) { + config['enabled'] = true; + config['radius'] = 4; + config['show_total'] = true; + config['labels'] = 'cta'; + config['min_count'] = 10; + config['networks'] = undefined !== typeof this.data.buttonConfig[buttonCode] || + undefined === typeof this.data.buttonConfig[buttonCode]['networks'] + ? ['facebook', 'twitter', 'pinterest', 'email', 'sms', 'sharethis'] : + this.data.buttonConfig[buttonCode]['networks']; + + $.each( config['networks'], function( index, value ) { + $( '.' + buttonCode + '-network-list .share-button[data-network="' + value + '"]' ).attr( 'data-selected', 'true' ); + } ); + + // Set temp enable to true. + this.$tempEnable[ buttonCode ] = true; + } + + if ( 'turnoff' === type ) { + config['enabled'] = false; + + // Set temp enable to false. + this.$tempEnable[ buttonCode ] = false; + } + + if ( 'upgrade' === theFirst ) { + upConfig = { + inline: this.$config['inline-share-buttons'], + sticky: this.$config['sticky-share-buttons'], + gdpr: this.$config['gdpr-compliance-tool-v2'], + }; + + wp.ajax.post( 'set_button_config', { + button: 'platform', + config: upConfig, + first: theFirst, + type: 'login', + nonce: this.data.nonce + } ).always( function ( results ) { + location.reload(); + }.bind( this ) ); + } else { + wp.ajax.post( 'set_button_config', { + button: buttonCode, + config: config, + fresh: this.data.fresh, + nonce: this.data.nonce + } ); + + config['show_mobile_buttons'] = false; + + if ( 'initial-platform' !== type || ( + undefined !== this.data.buttonConfig[buttonCode] && undefined === this.data.buttonConfig[buttonCode]['updated_at'] + ) ) { + config['enabled'] = ( 'true' === config['enabled'] || true === config['enabled'] ); + delete config['container']; + delete config['id']; + delete config['has_spacing']; + delete config['show_mobile_buttons']; + + config['radius'] = undefined !== config['radius'] ? parseInt( config['radius'].toString().replace( 'px', '' ) ) : ''; + config['min_count'] = parseInt( config['min_count'] ); + + if ( 'sticky' === buttonCode ) { + config['mobile_breakpoint'] = parseInt( config['mobile_breakpoint'] ); + config['top'] = parseInt( config['top'].toString().replace( 'px', '' ) ); + } + + theData = { + 'id': this.data.propertyid, + 'product': button, + 'config': config + }; + + if ( ( 'true' === this.data.fresh && false !== this.data.first ) || false !== this.data.first ) { + const firstProd = 'sticky' === this.data.first || 'inline' === this.data.first ? this.data.first + '-share-buttons' : this.data.first; + + theData['onboarding_product'] = true === this.data.fresh ? button : firstProd; + } + + + if ( 'undefined' === this.data.secret || undefined === this.data.secret ) { + theData['token'] = this.data.token; + } else { + theData['secret'] = this.data.secret; + } + + theData = JSON.stringify( theData ); + + // Send new button status value. + $.ajax( { + url: 'https://platform-api.sharethis.com/v1.0/property/product', + method: 'POST', + async: false, + contentType: 'application/json; charset=utf-8', + data: theData, + success: function () { + if ( 'turnon' === type || 'turnoff' === type ) { + location.reload(); + } + } + } ); + } + } + } + + if ( '' !== type ) { + if ( 'inline' === buttonCode ) { + + // Convert pieces to integers. + config['size'] = parseInt( config['size'] ); + config['font_size'] = parseInt( config['font_size'] ); + config['padding'] = parseInt( config['padding'] ); + config['spacing'] = parseInt( config['spacing'] ); + config['has_spacing'] = ( + 0 === config['spacing'] + ); + } + } + + if (config.is_ssb) { + networks = [ 'facebook', 'twitter', 'email', 'sms', 'sharethis', 'linkedin', 'messenger', 'pinterest', 'reddit', 'tumblr' ]; + config.networks = networks.slice(0, config.num_ssb_networks); + } + + delete config.is_ssb; + + // Make sure mobile button override is set. + config['show_mobile_buttons'] = true; + + $( '#' + buttonCode + '-8' ).html( '' ); + + config.container = buttonCode + '-8'; + + window.__sharethis__.href = 'https://www.sharethis.com/'; + + // Always enable for preview call. + config.enabled = true; + + window.__sharethis__.load( button, config ); + + $( '#' + buttonCode + '-8 > div' ).sortable( { + stop: function( event, ui ) { + self.loadPreview( '', buttonCode ); + } + } ); + }, + + /** + * Set the settings fields for the button configurations. + * + * @param button + */ + setConfigFields: function( button, config, type ) { + var size; + + if ( '' === config ) { + config = this.data.buttonConfig[ button ]; + } + + if (button === 'gdpr' && undefined !== config) { + this.setGDPRConfig(config, type) + } + + if ( undefined === config || undefined === config['radius'] ) { + return; + } + + // Smart share buttons. + if ( undefined !== config['is_ssb'] ) { + const selectedType = document.querySelector( '.' + button + '-platform .network-type.engage' ); + const manualSelects = document.querySelectorAll( '.' + button + '-platform .manual-select' ); + const ssbSelects = document.querySelectorAll( '.' + button + '-platform .ssb-select' ); + const smartButtons = document.querySelector( '.' + button + '-platform .smart-share.network-type' ); + + selectedType.classList.remove( 'engage' ); + selectedType.querySelector( 'input' ).checked = false; + smartButtons.classList.add( 'engage' ); + smartButtons.querySelector( 'input' ).checked = true; + + manualSelects.forEach( manualSelect => { + manualSelect.classList.remove( 'engage' ); + } ); + ssbSelects.forEach( ssbSelect => { + ssbSelect.classList.add( 'engage' ); + } ); + + const ssbCount = document.querySelector( '.' + button + '-platform #social-service-count' ); + + if ( ssbCount ) { + ssbCount.value = config['num_ssb_networks']; + } + } + + $( '.' + button + '-network-list .share-button' ).each( function() { + $( this ).attr( 'data-selected', false ); + } ); + + // Networks. + $.each( config['networks'], function( index, value ) { + $( '.' + button + '-network-list .share-button[data-network="' + value + '"]' ).attr( 'data-selected', 'true' ); + } ); + + // Colors. + $( '#' + button + ' .button-color .item input' ).prop( 'checked', false ); + $( '#' + button + ' .button-color #' + config['color'] ).siblings( 'input' ).prop( 'checked', true ); + + // Delay for wp color picker to initialize. + setTimeout( () => { + $( '.custom-button-color' ).wpColorPicker('color', config['background_color'] ); + $( '.custom-icon-color' ).wpColorPicker('color', config['text_color'] ); + $( '.custom-st-button-color' ).wpColorPicker('color', config['background_color'] ); + $( '.custom-st-icon-color' ).wpColorPicker('color', config['text_color'] ); + }, 1000 ); + + // Labels. + $( '#' + button + ' .button-labels .item input' ).prop( 'checked', false ); + $( '#' + button + ' .button-labels #' + config['labels'] ).siblings( 'input' ).prop( 'checked', true ); + + // Counts. + $( '#' + button + ' input.minimum-count' ).val( config['min_count'] ); + $( '#' + button + ' span.show-total-count' ).siblings( 'div.switch' ).find( 'input' ).prop( 'checked', ( undefined !== config['show_total'] && 'true' === config['show_total'].toString() ) ); + + // Corners. + if ( parseInt( config['radius'].toString().replace( 'px', '' ) ) > $( '#' + button + ' #radius-selector' ).attr( 'max' ) ) { + $( '#' + button + ' #radius-selector' ).attr( 'max', config['radius'].toString().replace( 'px', '' ) ); + $( '#' + button + ' #radius-selector' ).val( config['radius'].toString().replace( 'px', '' ) ); + } else { + $( '#' + button + ' #radius-selector' ).val( config['radius'].toString().replace( 'px', '' ) ); + } + + // Language. + $( '#st-language-inline option[value="' + config['language'] + '"]' ).prop( 'selected', true ); + $( '#st-language-sticky option[value="' + config['language'] + '"]' ).prop( 'selected', true ); + + if ( 'inline' === button ) { + + // Alignment. + $( '.button-alignment .alignment-button[data-selected="true"]' ).attr( 'data-selected', 'false' ); + $( '.button-alignment .alignment-button[data-alignment="' + config['alignment'] + '"]' ).attr( 'data-selected', 'true' ); + + // Size. + $( '.button-size .item input' ).prop( 'checked', false ); + + if ( '32' === config['size'].toString() ) { + size = '#small'; + } + + if ( '40' === config['size'].toString() ) { + size = '#medium'; + } + + if ( '48' === config['size'].toString() ) { + size = '#large'; + } + + $( '.button-size ' + size ).siblings( 'input' ).prop( 'checked', true ); + + // Extra spacing. + $( 'div.extra-spacing' ).find( 'input' ).prop( 'checked', ( 0 !== config['spacing'] && '0' !== config['spacing'] ) ); + } + + if ( 'sticky' === button ) { + + // Alignment. + if ( 'right' === config['alignment'] ) { + $( '.sticky-alignment' ).find( 'input' ).prop( 'checked', true ); + } + + // Vertical alignment. + $( '.vertical-alignment' ).val( config['top'].toString().replace( 'px', '' ) ); + + // Mobile breakpoint. + $( '.mobile-breakpoint' ).val( config['mobile_breakpoint'] ); + + // Show on mobile. + $( 'div.show-on-mobile' ).find( 'input' ).prop( 'checked', ( undefined !== config['show_mobile'] && 'true' === config['show_mobile'].toString() ) ); + + // Show on desktop. + $( 'div.show-on-desktop' ).find( 'input' ).prop( 'checked', ( undefined !== config['show_desktop'] && 'true' === config['show_desktop'].toString() ) ); + } + + if ( 'platform' === type ) { + this.loadPreview( 'initial-platform', button ); + } + }, + + /** + * Returns gdpr onboarding config values. + */ + setGDPRConfig: function(config, type) { + $('#sharethis-publisher-name').val(config['publisher_name']); + $(`#sharethis-user-type option[value="${config['display']}"]`).prop('selected', true); + $(`#sharethis-consent-type option[value="${config['scope']}"]`).prop('selected', true); + $(`#sharethis-form-color .color[data-value="${config['color']}"]`).addClass('selected'); + $(`#st-language option[value="${config['language']}"]`).prop('selected', true); + + $( "#publisher-purpose .purpose-item input" ).prop('checked', false); + $( ".vendor-table-cell-wrapper input" ).prop('checked', false); + + if (undefined !== config['publisher_purposes'] && 0 < config['publisher_purposes'].length ) { + config['publisher_purposes'].map( ( purpVal ) => { + var legit = 'true' === purpVal['legitimate_interest'] || true === purpVal['legitimate_interest']; + var consent = 'false' === purpVal['legitimate_interest'] || false === purpVal['legitimate_interest']; + + $( `#publisher-purpose .purpose-item input[name="purposes[${purpVal.id}]"][value="legitimate"]` ).prop( 'checked', legit ); + $( `#publisher-purpose .purpose-item input[name="purposes[${purpVal.id}]"][value="consent"]` ).prop( 'checked', consent ); + } ); + } + + if (undefined !== config['publisher_restrictions']) { + $.map(config['publisher_restrictions'], function (id, venVal ) { + if(id) { + $( `input[type="checkbox"][data-id="${venVal}"]` ).prop( 'checked', true ); + } + } ); + } + + if ( 'platform' === type ) { + this.loadPreview( 'initial-platform', 'gdpr' ); + } + }, + /** + * Toggle the accordions. + * + * @param type + * @param arrow + */ + updateAccors: function( type, arrow ) { + var closestButton = $( arrow ).parent( '.accor-tab' ).parent( '.accor-wrap' ); + + if ( 'â–º' === type ) { + + // Show the button configs. + closestButton.find( '.accor-content' ).slideDown(); + + // Change the icon next to title. + closestButton.find( '.accor-arrow' ).html( '▼' ); + } else { + + // Show the button configs. + closestButton.find( '.accor-content' ).slideUp(); + + // Change the icon next to title. + closestButton.find( '.accor-arrow' ).html( '►' ); + } + }, + scrollToAnchor: function(aid) { + var aTag = $("a[name='"+ aid.toLowerCase() +"']"); + + $('.vendor-table-body').animate({ + scrollTop: 0 + }, 0).animate({ + scrollTop: aTag.offset().top - 3000 + }, 0); + }, + }; +} )( window.jQuery, window.wp ); diff --git a/wp/wp-content/plugins/sharethis-share-buttons/js/blocks.js b/wp/wp-content/plugins/sharethis-share-buttons/js/blocks.js new file mode 100755 index 00000000..5ddcaf29 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/js/blocks.js @@ -0,0 +1,43 @@ +// phpcs:ignoreFile +/* global wp:wp */ + +/** + * This section of code registers the sharethis share buttons blocks. + */ + +const shareregisterBlockType = wp.blocks.registerBlockType; +const sharecreateElement = wp.element.createElement; +const shareicon = sharecreateElement('div', { style: { + background: `url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0NC4xICg0MTQ1NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+RmlsbCAzPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkRlc2t0b3AtSEQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMC4wMDAwMDAsIC00MzguMDAwMDAwKSIgZmlsbD0iI0ZFRkVGRSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xNTE2NDMyLDQ0OS4xMDMwMTEgQzIyLjcyNjg4NzcsNDQ5LjEwMzAxMSAyMi4zMzM1MDYyLDQ0OS4yMjg5OSAyMS45OTcwODA2LDQ0OS40Mzc5ODkgQzIxLjk5NTE0OTksNDQ5LjQzNTA5MyAyMS45OTcwODA2LDQ0OS40Mzc5ODkgMjEuOTk3MDgwNiw0NDkuNDM3OTg5IEMyMS44ODA3NTU1LDQ0OS41MDg5NDMgMjEuNzM1NDY5OCw0NDkuNTQ1NjI2IDIxLjU4OTIxODgsNDQ5LjU0NTYyNiBDMjEuNDUzMTA0LDQ0OS41NDU2MjYgMjEuMzE5ODg1Miw0NDkuNTA3NDk0IDIxLjIwODg2OTYsNDQ5LjQ0NTIyOSBMMTQuODczNzM4Myw0NDYuMDM4OTggQzE0Ljc2NDE3MDcsNDQ1Ljk5MDIzIDE0LjY4NzkwNzgsNDQ1Ljg3ODczMSAxNC42ODc5MDc4LDQ0NS43NTEzMDUgQzE0LjY4NzkwNzgsNDQ1LjYyMzM5NSAxNC43NjUxMzYsNDQ1LjUxMTg5NyAxNC44NzQ3MDM2LDQ0NS40NjI2NjQgTDIxLjIwODg2OTYsNDQyLjA1Njg5NyBDMjEuMzE5ODg1Miw0NDEuOTk1MTE1IDIxLjQ1MzEwNCw0NDEuOTU2NTAxIDIxLjU4OTIxODgsNDQxLjk1NjUwMSBDMjEuNzM1NDY5OCw0NDEuOTU2NTAxIDIxLjg4MDc1NTUsNDQxLjk5MzY2NyAyMS45OTcwODA2LDQ0Mi4wNjQ2MiBDMjEuOTk3MDgwNiw0NDIuMDY0NjIgMjEuOTk1MTQ5OSw0NDIuMDY3MDM0IDIxLjk5NzA4MDYsNDQyLjA2NDYyIEMyMi4zMzM1MDYyLDQ0Mi4yNzMxMzcgMjIuNzI2ODg3Nyw0NDIuMzk5MTE1IDIzLjE1MTY0MzIsNDQyLjM5OTExNSBDMjQuMzY2NTQwMyw0NDIuMzk5MTE1IDI1LjM1MTY4MzQsNDQxLjQxNDQ1NSAyNS4zNTE2ODM0LDQ0MC4xOTk1NTggQzI1LjM1MTY4MzQsNDM4Ljk4NDY2IDI0LjM2NjU0MDMsNDM4IDIzLjE1MTY0MzIsNDM4IEMyMi4wMTYzODc2LDQzOCAyMS4wOTMwMjcyLDQzOC44NjMwMjYgMjAuOTc1MjU0MSw0MzkuOTY3MzkgQzIwLjk3MTM5MjYsNDM5Ljk2MzA0NiAyMC45NzUyNTQxLDQzOS45NjczOSAyMC45NzUyNTQxLDQzOS45NjczOSBDMjAuOTUwNjM3NSw0NDAuMjM5MTM3IDIwLjc2OTE1MTEsNDQwLjQ2NzkyNiAyMC41MzYwMTgzLDQ0MC41ODQyNTEgTDE0LjI3OTU2MzMsNDQzLjk0NzU0MiBDMTQuMTY0MjAzNiw0NDQuMDE3MDQ3IDE0LjAyNDIyNzMsNDQ0LjA1NjE0NCAxMy44Nzk0MjQzLDQ0NC4wNTYxNDQgQzEzLjcwODU1NjgsNDQ0LjA1NjE0NCAxMy41NDgzMDgxLDQ0NC4wMDQ0OTggMTMuNDIwODgxNSw0NDMuOTEwMzc2IEMxMy4wNzUyODUsNDQzLjY4NDk2NiAxMi42NjUwMDk4LDQ0My41NTEyNjQgMTIuMjIxOTEyNiw0NDMuNTUxMjY0IEMxMS4wMDcwMTU1LDQ0My41NTEyNjQgMTAuMDIyMzU1MSw0NDQuNTM2NDA3IDEwLjAyMjM1NTEsNDQ1Ljc1MTMwNSBDMTAuMDIyMzU1MSw0NDYuOTY2MjAyIDExLjAwNzAxNTUsNDQ3Ljk1MDg2MiAxMi4yMjE5MTI2LDQ0Ny45NTA4NjIgQzEyLjY2NTAwOTgsNDQ3Ljk1MDg2MiAxMy4wNzUyODUsNDQ3LjgxNzY0MyAxMy40MjA4ODE1LDQ0Ny41OTIyMzMgQzEzLjU0ODMwODEsNDQ3LjQ5NzYyOSAxMy43MDg1NTY4LDQ0Ny40NDY0NjUgMTMuODc5NDI0Myw0NDcuNDQ2NDY1IEMxNC4wMjQyMjczLDQ0Ny40NDY0NjUgMTQuMTY0MjAzNiw0NDcuNDg1MDc5IDE0LjI3OTU2MzMsNDQ3LjU1NDU4NSBMMjAuNTM2MDE4Myw0NTAuOTE4MzU4IEMyMC43Njg2Njg0LDQ1MS4wMzQyMDEgMjAuOTUwNjM3NSw0NTEuMjYzNDcyIDIwLjk3NTI1NDEsNDUxLjUzNTIxOSBDMjAuOTc1MjU0MSw0NTEuNTM1MjE5IDIwLjk3MTM5MjYsNDUxLjUzOTU2MyAyMC45NzUyNTQxLDQ1MS41MzUyMTkgQzIxLjA5MzAyNzIsNDUyLjYzOTEwMSAyMi4wMTYzODc2LDQ1My41MDI2MDkgMjMuMTUxNjQzMiw0NTMuNTAyNjA5IEMyNC4zNjY1NDAzLDQ1My41MDI2MDkgMjUuMzUxNjgzNCw0NTIuNTE3NDY2IDI1LjM1MTY4MzQsNDUxLjMwMjU2OSBDMjUuMzUxNjgzNCw0NTAuMDg3NjcyIDI0LjM2NjU0MDMsNDQ5LjEwMzAxMSAyMy4xNTE2NDMyLDQ0OS4xMDMwMTEiIGlkPSJGaWxsLTMiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==")`, + width: '24px', + height: '24px', + backgroundRepeat: 'no-repeat', + backgroundPosition: 'center', + backgroundColor: '#93d227' +} } ); +/** + * Share Buttons Block + */ +shareregisterBlockType('st/sharebuttons', { + title: 'Inline Share Buttons', + icon: shareicon, + category: 'st-blocks', + edit() { + return ( + sharecreateElement( + 'div', + {className:'inline-share-button-block'}, + sharecreateElement( + 'img', + {src:'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0NC4xICg0MTQ1NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+RmlsbCAzPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkRlc2t0b3AtSEQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMC4wMDAwMDAsIC00MzguMDAwMDAwKSIgZmlsbD0iI0ZFRkVGRSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xNTE2NDMyLDQ0OS4xMDMwMTEgQzIyLjcyNjg4NzcsNDQ5LjEwMzAxMSAyMi4zMzM1MDYyLDQ0OS4yMjg5OSAyMS45OTcwODA2LDQ0OS40Mzc5ODkgQzIxLjk5NTE0OTksNDQ5LjQzNTA5MyAyMS45OTcwODA2LDQ0OS40Mzc5ODkgMjEuOTk3MDgwNiw0NDkuNDM3OTg5IEMyMS44ODA3NTU1LDQ0OS41MDg5NDMgMjEuNzM1NDY5OCw0NDkuNTQ1NjI2IDIxLjU4OTIxODgsNDQ5LjU0NTYyNiBDMjEuNDUzMTA0LDQ0OS41NDU2MjYgMjEuMzE5ODg1Miw0NDkuNTA3NDk0IDIxLjIwODg2OTYsNDQ5LjQ0NTIyOSBMMTQuODczNzM4Myw0NDYuMDM4OTggQzE0Ljc2NDE3MDcsNDQ1Ljk5MDIzIDE0LjY4NzkwNzgsNDQ1Ljg3ODczMSAxNC42ODc5MDc4LDQ0NS43NTEzMDUgQzE0LjY4NzkwNzgsNDQ1LjYyMzM5NSAxNC43NjUxMzYsNDQ1LjUxMTg5NyAxNC44NzQ3MDM2LDQ0NS40NjI2NjQgTDIxLjIwODg2OTYsNDQyLjA1Njg5NyBDMjEuMzE5ODg1Miw0NDEuOTk1MTE1IDIxLjQ1MzEwNCw0NDEuOTU2NTAxIDIxLjU4OTIxODgsNDQxLjk1NjUwMSBDMjEuNzM1NDY5OCw0NDEuOTU2NTAxIDIxLjg4MDc1NTUsNDQxLjk5MzY2NyAyMS45OTcwODA2LDQ0Mi4wNjQ2MiBDMjEuOTk3MDgwNiw0NDIuMDY0NjIgMjEuOTk1MTQ5OSw0NDIuMDY3MDM0IDIxLjk5NzA4MDYsNDQyLjA2NDYyIEMyMi4zMzM1MDYyLDQ0Mi4yNzMxMzcgMjIuNzI2ODg3Nyw0NDIuMzk5MTE1IDIzLjE1MTY0MzIsNDQyLjM5OTExNSBDMjQuMzY2NTQwMyw0NDIuMzk5MTE1IDI1LjM1MTY4MzQsNDQxLjQxNDQ1NSAyNS4zNTE2ODM0LDQ0MC4xOTk1NTggQzI1LjM1MTY4MzQsNDM4Ljk4NDY2IDI0LjM2NjU0MDMsNDM4IDIzLjE1MTY0MzIsNDM4IEMyMi4wMTYzODc2LDQzOCAyMS4wOTMwMjcyLDQzOC44NjMwMjYgMjAuOTc1MjU0MSw0MzkuOTY3MzkgQzIwLjk3MTM5MjYsNDM5Ljk2MzA0NiAyMC45NzUyNTQxLDQzOS45NjczOSAyMC45NzUyNTQxLDQzOS45NjczOSBDMjAuOTUwNjM3NSw0NDAuMjM5MTM3IDIwLjc2OTE1MTEsNDQwLjQ2NzkyNiAyMC41MzYwMTgzLDQ0MC41ODQyNTEgTDE0LjI3OTU2MzMsNDQzLjk0NzU0MiBDMTQuMTY0MjAzNiw0NDQuMDE3MDQ3IDE0LjAyNDIyNzMsNDQ0LjA1NjE0NCAxMy44Nzk0MjQzLDQ0NC4wNTYxNDQgQzEzLjcwODU1NjgsNDQ0LjA1NjE0NCAxMy41NDgzMDgxLDQ0NC4wMDQ0OTggMTMuNDIwODgxNSw0NDMuOTEwMzc2IEMxMy4wNzUyODUsNDQzLjY4NDk2NiAxMi42NjUwMDk4LDQ0My41NTEyNjQgMTIuMjIxOTEyNiw0NDMuNTUxMjY0IEMxMS4wMDcwMTU1LDQ0My41NTEyNjQgMTAuMDIyMzU1MSw0NDQuNTM2NDA3IDEwLjAyMjM1NTEsNDQ1Ljc1MTMwNSBDMTAuMDIyMzU1MSw0NDYuOTY2MjAyIDExLjAwNzAxNTUsNDQ3Ljk1MDg2MiAxMi4yMjE5MTI2LDQ0Ny45NTA4NjIgQzEyLjY2NTAwOTgsNDQ3Ljk1MDg2MiAxMy4wNzUyODUsNDQ3LjgxNzY0MyAxMy40MjA4ODE1LDQ0Ny41OTIyMzMgQzEzLjU0ODMwODEsNDQ3LjQ5NzYyOSAxMy43MDg1NTY4LDQ0Ny40NDY0NjUgMTMuODc5NDI0Myw0NDcuNDQ2NDY1IEMxNC4wMjQyMjczLDQ0Ny40NDY0NjUgMTQuMTY0MjAzNiw0NDcuNDg1MDc5IDE0LjI3OTU2MzMsNDQ3LjU1NDU4NSBMMjAuNTM2MDE4Myw0NTAuOTE4MzU4IEMyMC43Njg2Njg0LDQ1MS4wMzQyMDEgMjAuOTUwNjM3NSw0NTEuMjYzNDcyIDIwLjk3NTI1NDEsNDUxLjUzNTIxOSBDMjAuOTc1MjU0MSw0NTEuNTM1MjE5IDIwLjk3MTM5MjYsNDUxLjUzOTU2MyAyMC45NzUyNTQxLDQ1MS41MzUyMTkgQzIxLjA5MzAyNzIsNDUyLjYzOTEwMSAyMi4wMTYzODc2LDQ1My41MDI2MDkgMjMuMTUxNjQzMiw0NTMuNTAyNjA5IEMyNC4zNjY1NDAzLDQ1My41MDI2MDkgMjUuMzUxNjgzNCw0NTIuNTE3NDY2IDI1LjM1MTY4MzQsNDUxLjMwMjU2OSBDMjUuMzUxNjgzNCw0NTAuMDg3NjcyIDI0LjM2NjU0MDMsNDQ5LjEwMzAxMSAyMy4xNTE2NDMyLDQ0OS4xMDMwMTEiIGlkPSJGaWxsLTMiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=='} + ), + 'Share Buttons Display Here' + ) + ); + }, + save() { + return ( + '[sharethis-inline-buttons]' + ); + } +}); diff --git a/wp/wp-content/plugins/sharethis-share-buttons/js/meta-box.js b/wp/wp-content/plugins/sharethis-share-buttons/js/meta-box.js new file mode 100644 index 00000000..ffdf1bfb --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/js/meta-box.js @@ -0,0 +1,86 @@ +/** + * Minute Control. + * + * @package ShareThisShareButtons + */ + +/* exported MinuteControl */ +var MinuteControl = ( function( $, wp ) { + 'use strict'; + + return { + /** + * Holds data. + */ + data: {}, + + /** + * Boot plugin. + * + * @param data + */ + boot: function( data ) { + this.data = data; + + $( document ).ready( + function() { + this.init(); + }.bind( this ) + ); + }, + + /** + * Initialize plugin. + */ + init: function() { + this.$container = $( '#sharethis-meta-box' ); + + this.listen(); + }, + + /** + * Initiate listeners. + */ + listen: function() { + var self = this; + + // When checking an option in the meta box. + this.$container.on( + 'click', + '#sharethis-bottom-post, #sharethis-top-post, #sharethis-sticky-show', + function() { + var checked = $( this ).prop( 'checked' ), + type = $( this ).closest( '.button-setting-wrap' ).attr( 'id' ), + placement = $( this ).attr( 'class' ); + + self.updateList( type, checked, placement ); + } + ); + }, + + /** + * Add / remove post to list. + * + * @param type + * @param checked + * @param placement + */ + updateList: function( type, checked, placement ) { + + // Update specifide list per checked. + wp.ajax.post( + 'update_list', + { + postid: this.data.postid, + type: type, + checked: checked, + placement: placement, + nonce: this.data.nonce + } + ).always( + function() { + } + ); + } + }; +} )( window.jQuery, window.wp ); diff --git a/wp/wp-content/plugins/sharethis-share-buttons/js/set-credentials.js b/wp/wp-content/plugins/sharethis-share-buttons/js/set-credentials.js new file mode 100644 index 00000000..f7075dc2 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/js/set-credentials.js @@ -0,0 +1,312 @@ +/** + * Credentials + * + * @package ShareThisShareButtons + */ + +/* exported Credentials */ +var Credentials = ( function( $, wp ) { + 'use strict'; + + return { + /** + * Holds data. + */ + data: {}, + + /** + * Boot plugin. + * + * @param data + */ + boot: function( data ) { + this.data = data; + + $( document ).ready( + function() { + this.init(); + }.bind( this ) + ); + }, + + /** + * Initialize plugin. + */ + init: function() { + const self = this; + + // Set default WP config. + wp.ajax.post( + 'set_default_settings', + { + type: 'both', + nonce: self.data.nonce + } + ).always( + function( link ) { + self.registerAccount( self.data.email, Math.random() + '1_stsb_PW!' ); + }.bind( self ) + ); + }, + + /** + * Send hash data to credential setting. + * + * @param secret + * @param propertyid + * @param token + * @param type + */ + + setCredentials: function( secret, propertyid, token, type ) { + var propSecret = propertyid + '-' + secret; + const self = this; + + // If hash exists send it to credential setting. + wp.ajax.post( + 'set_credentials', + { + data: propSecret, + token: token, + nonce: this.data.nonce + } + ).always( + function( link ) { + // Set default product configs. + const iconfig = { + alignment: 'center', + color: 'social', + enabled: false, + font_size: 11, + labels: 'cta', + min_count: 10, + padding: 8, + radius: 4, + networks: ['facebook', 'twitter', 'email', 'sms', 'sharethis'], + show_total: true, + size: 32, + spacing: 8, + language: 'en', + }; + + const sconfig = { + alignment: 'left', + color: 'social', + enabled: false, + labels: 'cta', + min_count: 10, + radius: 4, + networks: ['facebook', 'twitter', 'email', 'sms', 'sharethis'], + top: 200, + show_mobile: true, + show_total: true, + show_desktop: true, + show_mobile_buttons: true, + mobile_breakpoint: 1024, + spacing: 0, + language: 'en' + } + + const gconfig = { + color: '#2e7d32', + display: 'always', + enabled: false, + language: 'en', + publisher_name: '', + publisher_purposes: [], + scope: 'global' + } + + let theiData = { + 'token' : token, + 'id': propertyid, + 'product': 'inline-share-buttons', + 'config': iconfig + }; + + theiData = JSON.stringify( theiData ); + + // Send new button status value. + $.ajax( + { + url: 'https://platform-api.sharethis.com/v1.0/property/product', + method: 'POST', + async: false, + contentType: 'application/json; charset=utf-8', + data: theiData, + success: function () { + wp.ajax.post( + 'set_button_config', + { + button: 'inline', + config: iconfig, + first: true, + nonce: self.data.nonce + } + ).always( + function ( results ) { + let thesData = { + 'token' : token, + 'id': propertyid, + 'product': 'sticky-share-buttons', + 'config': sconfig + }; + + thesData = JSON.stringify( thesData ); + + // Send new button status value. + $.ajax( + { + url: 'https://platform-api.sharethis.com/v1.0/property/product', + method: 'POST', + async: false, + contentType: 'application/json; charset=utf-8', + data: thesData, + success: function () { + wp.ajax.post( + 'set_button_config', + { + button: 'sticky', + config: sconfig, + nonce: self.data.nonce + } + ).always( + function ( results ) { + let thegData = { + 'token' : token, + 'id': propertyid, + 'product': 'gdpr-compliance-tool-v2', + 'config': gconfig + }; + + thegData = JSON.stringify( thegData ); + + // Send new button status value. + $.ajax( + { + url: 'https://platform-api.sharethis.com/v1.0/property/product', + method: 'POST', + async: false, + contentType: 'application/json; charset=utf-8', + data: thegData, + success: function () { + wp.ajax.post( + 'set_button_config', + { + button: 'gdpr', + config: gconfig, + nonce: self.data.nonce + } + ).always( + function ( results ) { + window.location.reload(); + } + ); + } + } + ); + } + ); + } + } + ); + } + ); + } + } + ); + }.bind( this ) + ); + }, + + /** + * Register new account. + * + * @param email + * @param pw + */ + registerAccount: function( email, pw ) { + var result = null, + self = this, + url = this.data.url, + randomNumber = Math.floor( + ( + Math.random() * 10000000000000000 + ) + 1 + ), + randomNumber2 = Math.floor( + ( + Math.random() * 10000000000000000 + ) + 1 + ), + theData = JSON.stringify( + { + email: randomNumber + '@' + randomNumber2 + '.com', + password: pw, + custom: { + onboarding_product: 'inline-share-buttons', + onboarding_domain: url, + is_wordpress: true, + wordpress_email: email, + } + } + ); + + $.ajax( + { + url: 'https://sso.sharethis.com/register', + method: 'POST', + async: false, + contentType: 'application/json; charset=utf-8', + data: theData, + success: function( results ) { + result = results; + + // Create property. + self.createProperty( result, url, '' ); + }, + } + ); + }, + + /** + * Create property for new account. + * + * @param accountInfo + * @param url + */ + createProperty: function( accountInfo, url, type ) { + var result = null, + self = this, + token = accountInfo.token, + theData; + + if ( 'string' === typeof accountInfo ) { + token = accountInfo; + } + + theData = JSON.stringify( + { + token: token, + product: 'inline-share-buttons', + domain: url, + is_wordpress: true + } + ); + + $.ajax( + { + url: 'https://platform-api.sharethis.com/v1.0/property', + method: 'POST', + async: false, + contentType: 'application/json; charset=utf-8', + data: theData, + success: function( results ) { + result = results; + self.setCredentials( result.secret, result._id, token, type ); + } + } + ); + } + }; +} )( window.jQuery, window.wp ); diff --git a/wp/wp-content/plugins/sharethis-share-buttons/php/class-button-widget.php b/wp/wp-content/plugins/sharethis-share-buttons/php/class-button-widget.php new file mode 100644 index 00000000..45bf2726 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/php/class-button-widget.php @@ -0,0 +1,87 @@ +plugin = $plugin; + + $widget_options = array( + 'classname' => 'st_button_widget', + 'description' => esc_html__( 'Add ShareThis share buttons to your sidebar.', 'sharethis-share-buttons' ), + ); + parent::__construct( + 'st_button_widget', + 'ShareThis Buttons', + $widget_options + ); + } + + /** + * Create the widget output. + * + * @param array $args Widget output arguments. + * @param array $instance The widget instance. + */ + public function widget( $args, $instance ) { + global $post; + + $data_url = ''; + + if ( is_archive() || is_front_page() || is_tag() ) { + $data_url = 'data-url=' . get_permalink( $post->ID ); + } + + // Add buttons. + ?> +
    >
    + plugin = $plugin; + } + + /** + * Register the new share buttons metabox. + * + * @action add_meta_boxes + */ + public function share_buttons_metabox() { + // Get all post types available. + $post_types = array( 'post', 'page' ); + + // Add the Share Buttons meta box to editor pages. + add_meta_box( 'sharethis_share_buttons', esc_html__( 'Share Buttons', 'sharethis-share-buttons' ), array( $this, 'share_buttons_custom_box' ), $post_types, 'side', 'high' ); + } + + /** + * Enqueue admin assets. + * + * @action admin_enqueue_scripts + * @param string $hook The page hook name. + */ + public function enqueue_admin_assets( $hook ) { + global $post; + + // Enqueue the assets on editor pages. + if ( in_array( $hook, array( 'post.php', 'post-new.php' ), true ) ) { + wp_enqueue_style( ASSET_PREFIX . '-meta-box' ); + wp_enqueue_script( ASSET_PREFIX . '-meta-box' ); + wp_add_inline_script( + ASSET_PREFIX . '-meta-box', + sprintf( + 'MinuteControl.boot( %s );', + wp_json_encode( + array( + 'postid' => $post->ID, + 'nonce' => wp_create_nonce( META_PREFIX ), + ) + ) + ) + ); + } + } + + /** + * Call back function for the share buttons metabox. + */ + public function share_buttons_custom_box() { + global $post_type; + + switch ( $post_type ) { + case 'page': + $iptype = 'page_'; + $sptype = 'pages'; + break; + default: + $iptype = 'post_'; + $sptype = 'posts'; + break; + } + + // Get all needed options for meta boxes. + $inline_options = get_option( 'sharethis_inline_settings' ); + $sticky_options = get_option( 'sharethis_sticky_settings' ); + $inline_enable = get_option( 'sharethis_inline' ); + $sticky_enable = get_option( 'sharethis_sticky' ); + + // Include the meta box template. + include_once DIR_PATH . 'templates/minute-control/meta-box.php'; + } + + /** + * AJAX Call back function to add a post / page to ommit / show list. + * + * @action wp_ajax_update_list + */ + public function update_list() { + check_ajax_referer( $this->plugin->meta_prefix, 'nonce' ); + + if ( ! isset( $_POST['type'], $_POST['checked'], $_POST['placement'], $_POST['postid'] ) || '' === $_POST['type'] ) { // WPCS: input var okay. + wp_send_json_error( 'Add to list failed.' ); + } + + // Set and sanitize post values. + $type = sanitize_text_field( wp_unslash( $_POST['type'] ) ); // WPCS: input var okay. + $onoff = 'true' === sanitize_text_field( wp_unslash( $_POST['checked'] ) ) ? 'on' : 'off'; // WPCS: input var okay. + $opposite = 'true' === sanitize_text_field( wp_unslash( $_POST['checked'] ) ) ? 'off' : 'on'; // WPCS: input var okay. + $placement = '' !== sanitize_text_field( wp_unslash( $_POST['placement'] ) ) ? '_' . sanitize_text_field( wp_unslash( $_POST['placement'] ) ) : ''; // WPCS: input var okay. + $postid = intval( wp_unslash( $_POST['postid'] ) ); // WPCS: input var okay. + + // Create remaining variables needed for list placement. + $post_info = get_post( $postid ); + $post_type = $post_info->post_type; + $option = 'sharethis_' . $type . '_' . $post_type . $placement . '_' . $onoff; + $oppose = 'sharethis_' . $type . '_' . $post_type . $placement . '_' . $opposite; + $title = $post_info->post_title; + + // Get current list and opposing list options. + $current_list = get_option( $option ); + $current_oppose = get_option( $oppose ); + $current_list = isset( $current_list ) && null !== $current_list && false !== $current_list ? $current_list : ''; + $current_oppose = isset( $current_oppose ) && null !== $current_oppose && false !== $current_oppose ? $current_oppose : ''; + + // Add post id and title to current list. + if ( is_array( $current_list ) && array() !== $current_list ) { + $current_list[ $title ] = (int) $postid; + } else { + $current_list = array( + $title => (int) $postid, + ); + } + + // Remove item from opposing list. + if ( is_array( $current_oppose ) && array() !== $current_oppose && in_array( (int) $postid, array_map( 'intval', $current_oppose ), true ) ) { + unset( $current_oppose[ $title ] ); + delete_option( $oppose ); + } + + // Update both list options. + update_option( $option, $current_list ); + update_option( $oppose, $current_oppose ); + } + + /** + * Helper function to determine whether to check box or not. + * + * @param string $type The type of button. + * @param string $placement The position of the button in question. + */ + private function is_box_checked( $type, $placement = '' ) { + global $post, $post_type; + + $options = array( + 'true' => 'sharethis_' . $type . '_' . $post_type . $placement . '_on', + 'false' => 'sharethis_' . $type . '_' . $post_type . $placement . '_off', + ); + + $default_option = get_option( 'sharethis_' . $type . '_settings' ); + $default_option = isset( $default_option ) && null !== $default_option && false !== $default_option ? $default_option : ''; + $default = $default_option[ "sharethis_{$type}_{$post_type}{$placement}" ]; + + foreach ( $options as $answer => $option ) { + $current_list = get_option( $option ); + $current_list = isset( $current_list ) && null !== $current_list && false !== $current_list ? $current_list : ''; + $answer_minute = ( + is_array( $current_list ) + && + in_array( (int) $post->ID, array_map( 'intval', $current_list ), true ) + ); + + if ( $answer_minute ) { + return $answer; + } + } + + return $default; + } + + /** + * Register the inline share button shortcode + * + * @shortcode sharethis-inline-buttons + * @param array $atts The shortcode attributes. + * + * @return string + */ + public function inline_shortcode( $atts ) { + global $post; + + $data_url = isset( $atts['url'] ) ? $atts['url'] : ''; + + if ( is_archive() || is_front_page() || is_tag() ) { + $data_url = get_permalink( $post->ID ); + } + + // Build container. + return '
    '; + } + + /** + * Set inline container based on plugin config. + * + * @param string $content The post's content. + * + * @filter the_content + * + * @return string + */ + public function set_inline_content( $content ) { + global $post; + + // Get inline settings. + $inline_settings = get_option( 'sharethis_inline_settings' ); + $excerpt = null !== $inline_settings && false !== $inline_settings && 'true' === $inline_settings['sharethis_excerpt'] ? true : false; + + if ( $excerpt && is_archive() || $excerpt && is_home() ) { + return $content . $this->get_inline_container( $inline_settings, 'sharethis_excerpt', $post ); + } + + if ( null !== $inline_settings && false !== $inline_settings && is_array( $inline_settings ) ) { + foreach ( $inline_settings as $type => $value ) { + $position = $this->get_position( $type, $value ); + $container = $this->get_inline_container( $inline_settings, $type ); + + if ( '' !== $position ) { + switch ( $position ) { + case 'top': + $content = $container . $content; + break; + case 'bottom': + $content = $content . $container; + break; + } + } + } + } + + return $content; + } + + /** + * Helper function to determine the inline button container. + * + * @param array $settings The current inline settings. + * @param string $type The type of button setting. + * @param object $post The current post object. + * + * @return string + */ + private function get_inline_container( $settings, $type, $post = '' ) { + $data_url = 'sharethis_excerpt' === $type && '' !== $post ? esc_attr( 'data-url=' . get_permalink( $post->ID ) ) : ''; + $margin_t = isset( $settings[ "{$type}_margin_top" ] ) ? $settings[ "{$type}_margin_top" ] . 'px' : ''; + $margin_b = isset( $settings[ "{$type}_margin_bottom" ] ) ? $settings[ "{$type}_margin_bottom" ] . 'px' : ''; + $margin = ''; + + if ( ! in_array( '', array( $margin_t, $margin_b ), true ) ) { + $margin = 'margin-top: ' . $margin_t . '; margin-bottom: ' . $margin_b . ';'; + } + + return '
    '; + } + + /** + * Hide sticky if configured. + * + * @action wp_enqueue_scripts + */ + public function set_sticky_visibility() { + // Enqueue the blank style sheet. + wp_enqueue_style( ASSET_PREFIX . '-sticky' ); + + // Get sticky settings. + $settings = get_option( 'sharethis_sticky_settings' ); + $settings = null !== $settings && false !== $settings && is_array( $settings ) ? $settings : array(); + $hide_sticky = '.st-sticky-share-buttons{ display: none!important; }'; + + // Get hide status. + foreach ( $settings as $type => $value ) { + $hide = $this->get_hide_status( $type, $value ); + + if ( $hide ) { + wp_add_inline_style( ASSET_PREFIX . '-sticky', $hide_sticky ); + } + } + } + + /** + * Helper function to get the hide status for sticky buttons. + * + * @param string $type The button setting. + * @param string $value The setting value. + * + * @return bool + */ + private function get_hide_status( $type, $value ) { + global $post; + + if ( ! isset( $post->ID ) ) { + return false; + } + + // The non post id dependant types. + $alternate_types = array( 'sharethis_sticky_home', 'sharethis_sticky_category', 'sharethis_sticky_tags', 'sharethis_sticky_author', 'sharethis_sticky_custom_posts' ); + $alternate_pages = ( + ! is_front_page() + && + ! is_archive() + && + ! is_author() + && + ! is_tag() + ); + + if ( in_array( $type, $alternate_types, true ) ) { + return $this->get_alternate_hide( $type, $value ); + } + + $page_option_on = get_option( $type . '_on' ); + $page_option_off = get_option( $type . '_off' ); + + if ( ! is_array( $page_option_off ) && + ! is_array( $page_option_on ) && + 'false' === $value && + $alternate_pages && + in_array( $post->post_type, explode( '_', $type ), true ) + ) { + $hide = true; + } elseif ( isset( $post->ID ) ) { + $hide = ( + is_array( $page_option_on ) + && + 'false' === $value + && + ! in_array( (int) $post->ID, array_map( 'intval', $page_option_on ), true ) + && + $alternate_pages + && + in_array( $post->post_type, explode( '_', $type ), true ) + || + is_array( $page_option_off ) + && + in_array( (int) $post->ID, array_map( 'intval', $page_option_off ), true ) + && + $alternate_pages + && + in_array( $post->post_type, explode( '_', $type ), true ) + ); + } + + return $hide; + } + + /** + * Get the hide values for the non post or page types. + * + * @param string $type The setting type. + * @param string $value The value of the option. + * + * @return bool + */ + private function get_alternate_hide( $type, $value ) { + $value = 'true' === $value ? false : true; + + switch ( $type ) { + case 'sharethis_sticky_home': + if ( is_front_page() ) { + return $value; + } + break; + case 'sharethis_sticky_category': + $current_cats = get_option( 'sharethis_sticky_category_off' ); + $current_cats = is_array( $current_cats ) ? $current_cats : array(); + $queried_object = get_queried_object(); + + if ( true === is_archive() + && true === is_object( $queried_object ) + && true === property_exists( $queried_object, 'term_id' ) + ) { + if ( false === in_array( (string) $queried_object->term_id, array_values( $current_cats ), true ) ) { + return $value; + } else { + return true; + } + } + break; + case 'sharethis_sticky_author': + if ( is_author() ) { + return $value; + } + break; + case 'sharethis_sticky_tags': + if ( is_tag() ) { + return $value; + } + break; + case 'sharethis_sticky_custom_posts': + if ( ! is_singular( array( 'post', 'page' ) ) ) { + return $value; + } + break; + } + return false; + } + /** + * Set inline container based on plugin config. + * + * @param string $excerpt The excerpt of the post. + * + * @filter get_the_excerpt + * + * @return string + */ + public function set_inline_excerpt( $excerpt ) { + global $post; + + if ( is_admin() && ! wp_doing_ajax() ) { + return; + } + + // Get inline settings. + $inline_settings = get_option( 'sharethis_inline_settings' ); + $container = $this->get_inline_container( $inline_settings, 'sharethis_excerpt', $post ); + + if ( null === $inline_settings || false === $inline_settings || ! is_array( $inline_settings ) ) { + return $excerpt; + } + + $excerpt = isset( $inline_settings['sharethis_excerpt'] ) && 'true' === $inline_settings['sharethis_excerpt'] ? $excerpt . $container : $excerpt; + + return $excerpt; + } + + + /** + * Determine the position of the inline buttons. + * + * @param string $type The button type. + * @param string $value The value of the button. + * + * @return string + */ + private function get_position( $type, $value ) { + global $post; + + if ( ! isset( $post->ID ) ) { + return; + } + + $page_option_on = get_option( $type . '_on' ); + $page_option_off = get_option( $type . '_off' ); + $page_option_on = is_array( $page_option_on ) ? array_values( $page_option_on ) : array(); + $page_option_off = is_array( $page_option_off ) ? array_values( $page_option_off ) : array(); + $type_array = explode( '_', $type ); + $position = ''; + + $show = ( + 'true' === $value + && + ! in_array( (int) $post->ID, $page_option_off, true ) + || + in_array( (int) $post->ID, $page_option_on, true ) ); + + if ( in_array( 'top', $type_array, true ) && in_array( $post->post_type, $type_array, true ) ) { + $position = 'top'; + } elseif ( in_array( 'bottom', explode( '_', $type ), true ) && in_array( $post->post_type, $type_array, true ) ) { + $position = 'bottom'; + } + + if ( $show ) { + return $position; + } + + return ''; + } + + /** + * Enqueue the custom gutenberg block script. + * + * @action enqueue_block_editor_assets + */ + public function enqueue_custom_blocks() { + wp_enqueue_script( ASSET_PREFIX . '-blocks', DIR_URL . 'js/blocks.js', array( 'wp-blocks', 'wp-editor', 'wp-element', 'wp-components' ), time(), true ); + } + + /** + * Register new block category for share buttons. + * + * @param array $categories The current block categories. + * @param \WP_Post $post Post object. + * + * @filter block_categories_all + */ + public function st_block_category( $categories, $post ) { + return array_merge( + $categories, + array( + array( + 'slug' => 'st-blocks', + 'title' => __( 'ShareThis Blocks', 'sharethis-share-buttons' ), + ), + ) + ); + } +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin-base.php b/wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin-base.php new file mode 100644 index 00000000..edaeefa7 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin-base.php @@ -0,0 +1,288 @@ +locate_plugin(); + $this->slug = $location['dir_basename']; + $this->dir_path = $location['dir_path']; + $this->dir_url = $location['dir_url']; + + spl_autoload_register( array( $this, 'autoload' ) ); + $this->add_doc_hooks(); + } + + /** + * Plugin_Base destructor. + */ + public function __destruct() { + $this->remove_doc_hooks(); + } + + /** + * Get reflection object for this class. + * + * @return \ReflectionObject + */ + public function get_object_reflection() { + static $reflection; + + if ( empty( $reflection ) ) { + $reflection = new \ReflectionObject( $this ); + } + + return $reflection; + } + + /** + * Autoload for classes that are in the same namespace as $this. + * + * @param string $class Class name. + * @return void + */ + public function autoload( $class ) { + if ( ! isset( $this->autoload_matches_cache[ $class ] ) ) { + if ( ! preg_match( '/^(?P.+)\\\\(?P[^\\\\]+)$/', $class, $matches ) ) { + $matches = false; + } + + $this->autoload_matches_cache[ $class ] = $matches; + } else { + $matches = $this->autoload_matches_cache[ $class ]; + } + + if ( empty( $matches ) ) { + return; + } + + if ( $this->get_object_reflection()->getNamespaceName() !== $matches['namespace'] ) { + return; + } + + $class_name = $matches['class']; + $class_path = \trailingslashit( $this->dir_path ); + + if ( $this->autoload_class_dir ) { + $class_path .= \trailingslashit( $this->autoload_class_dir ); + } + + $class_path .= sprintf( 'class-%s.php', strtolower( str_replace( '_', '-', $class_name ) ) ); + + if ( is_readable( $class_path ) ) { + require_once $class_path; + } + } + + /** + * Version of plugin_dir_url() which works for plugins installed in the plugins directory, + * and for plugins bundled with themes. + * + * @return array + */ + public function locate_plugin() { + $dir_url = trailingslashit( substr( plugins_url( '', __FILE__ ), 0, - 4 ) ); + $dir_path = trailingslashit( substr( __DIR__, 0, - 4 ) ); + $dir_basename = basename( $dir_path ); + + return compact( 'dir_url', 'dir_path', 'dir_basename' ); + } + + /** + * Hooks a function on to a specific filter. + * + * @param string $name The hook name. + * @param array $callback The class object and method. + * @param array $args An array with priority and arg_count. + * + * @return mixed + */ + public function add_filter( $name, $callback, $args = array() ) { + // Merge defaults. + $args = array_merge( + array( + 'priority' => 10, + 'arg_count' => PHP_INT_MAX, + ), + $args + ); + + return $this->add_hook( 'filter', $name, $callback, $args ); + } + + /** + * Hooks a function on to a specific action. + * + * @param string $name The hook name. + * @param array $callback The class object and method. + * @param array $args An array with priority and arg_count. + * + * @return mixed + */ + public function add_action( $name, $callback, $args = array() ) { + // Merge defaults. + $args = array_merge( + array( + 'priority' => 1, + 'arg_count' => PHP_INT_MAX, + ), + $args + ); + + return $this->add_hook( 'action', $name, $callback, $args ); + } + + /** + * Hooks a function on to a specific shortcode. + * + * @param string $name The shortcode name. + * @param array $callback The class object and method. + * + * @return mixed + */ + public function add_shortcode( $name, $callback ) { + return $this->add_hook( 'shortcode', $name, $callback ); + } + + /** + * Hooks a function on to a specific action/filter. + * + * @param string $type The hook type. Options are action/filter. + * @param string $name The hook name. + * @param array $callback The class object and method. + * @param array $args An array with priority and arg_count. + * + * @return mixed + */ + protected function add_hook( $type, $name, $callback, $args = array() ) { + $priority = isset( $args['priority'] ) ? $args['priority'] : 10; + $arg_count = isset( $args['arg_count'] ) ? $args['arg_count'] : PHP_INT_MAX; + $fn = sprintf( '\add_%s', $type ); + $retval = \call_user_func( $fn, $name, $callback, $priority, $arg_count ); + return $retval; + } + + /** + * Add actions/filters/shortcodes from the methods of a class based on DocBlocks. + * + * @param object $object The class object. + */ + public function add_doc_hooks( $object = null ) { + if ( is_null( $object ) ) { + $object = $this; + } + $class_name = get_class( $object ); + if ( isset( $this->called_doc_hooks[ $class_name ] ) ) { + $notice = sprintf( 'The add_doc_hooks method was already called on %s. Note that the Plugin_Base constructor automatically calls this method.', $class_name ); + // @codingStandardsIgnoreStart + trigger_error( esc_html( $notice ), \E_USER_NOTICE ); + // @codingStandardsIgnoreEnd + return; + } + $this->called_doc_hooks[ $class_name ] = true; + $reflector = new \ReflectionObject( $object ); + foreach ( $reflector->getMethods() as $method ) { + $doc = $method->getDocComment(); + $arg_count = $method->getNumberOfParameters(); + if ( preg_match_all( '#\* @(?Pfilter|action|shortcode)\s+(?P[a-z0-9\-\._]+)(?:,\s+(?P\d+))?#', $doc, $matches, PREG_SET_ORDER ) ) { + foreach ( $matches as $match ) { + $type = $match['type']; + $name = $match['name']; + $priority = empty( $match['priority'] ) ? 10 : intval( $match['priority'] ); + $callback = array( $object, $method->getName() ); + call_user_func( array( $this, "add_{$type}" ), $name, $callback, compact( 'priority', 'arg_count' ) ); + } + } + } + } + + /** + * Removes the added DocBlock hooks. + * + * @param object $object The class object. + */ + public function remove_doc_hooks( $object = null ) { + if ( is_null( $object ) ) { + $object = $this; + } + $class_name = get_class( $object ); + $reflector = new \ReflectionObject( $object ); + foreach ( $reflector->getMethods() as $method ) { + $doc = $method->getDocComment(); + if ( preg_match_all( '#\* @(?Pfilter|action|shortcode)\s+(?P[a-z0-9\-\._]+)(?:,\s+(?P\d+))?#', $doc, $matches, PREG_SET_ORDER ) ) { + foreach ( $matches as $match ) { + $type = $match['type']; + $name = $match['name']; + $priority = empty( $match['priority'] ) ? 10 : intval( $match['priority'] ); + $callback = array( $object, $method->getName() ); + call_user_func( "remove_{$type}", $name, $callback, $priority ); + } + } + } + unset( $this->called_doc_hooks[ $class_name ] ); + } +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin.php b/wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin.php new file mode 100644 index 00000000..c6211635 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/php/class-plugin.php @@ -0,0 +1,151 @@ +add_doc_hooks( $instance ); + } + } + + /** + * Register MU Script + * + * @action wp_enqueue_scripts + */ + public function register_assets() { + $propertyid = get_option( 'sharethis_property_id' ); + $propertyid = false !== $propertyid && null !== $propertyid ? explode( '-', $propertyid, 2 ) : array(); + $first_prod = get_option( 'sharethis_first_product' ); + $first_prod = false !== $first_prod && null !== $first_prod ? $first_prod : ''; + + if ( is_array( $propertyid ) && array() !== $propertyid ) { + wp_register_script( + ASSET_PREFIX . '-mu', + "//platform-api.sharethis.com/js/sharethis.js#property={$propertyid[0]}&product={$first_prod}-buttons&source=sharethis-share-buttons-wordpress", + array(), + SHARETHIS_SHARE_BUTTONS_VERSION, + false + ); + } + + // Register style sheet for sticky hiding. + wp_register_style( + ASSET_PREFIX . '-sticky', + DIR_URL . 'css/mu-style.css', + array(), + filemtime( DIR_PATH . 'css/mu-style.css' ) + ); + } + + /** + * Register admin scripts/styles. + * + * @action admin_enqueue_scripts + */ + public function register_admin_assets() { + wp_register_script( + ASSET_PREFIX . '-mua', + '//platform-api.sharethis.com/js/sharethis.js?product=inline-share-buttons', + array(), + SHARETHIS_SHARE_BUTTONS_VERSION, + false + ); + wp_register_script( + ASSET_PREFIX . '-admin', + DIR_URL . 'js/admin.js', + array( 'jquery', 'jquery-ui-sortable', 'wp-util', 'wp-color-picker' ), + filemtime( DIR_PATH . 'js/admin.js' ), + false + ); + wp_register_script( + ASSET_PREFIX . '-meta-box', + DIR_URL . 'js/meta-box.js', + array( 'jquery', 'wp-util' ), + filemtime( DIR_PATH . 'js/meta-box.js' ), + false + ); + wp_register_style( + ASSET_PREFIX . '-admin', + DIR_URL . 'css/admin.css', + array( 'wp-color-picker' ), + filemtime( DIR_PATH . 'css/admin.css' ) + ); + wp_register_style( + ASSET_PREFIX . '-meta-box', + DIR_URL . 'css/meta-box.css', + array(), + filemtime( DIR_PATH . 'css/meta-box.css' ) + ); + } + + /** + * Helper to get the formated network image. + * + * @param string $title The netwokr title. + * + * @return string + */ + public static function getFormattedNetworkImage( $title ) { + return 'https://platform-cdn.sharethis.com/img/' . self::getPlatformName( $title ) . '.svg'; + } + + /** + * Helper to format network title for image retrieval. + * + * @param string $title The network title. + * + * @return string + */ + public static function getFormattedNetworkTitle( $title ) { + return sanitize_title( + str_replace( + array( ' Share Button', 'Google Bookmarks', 'Yahoo Mail' ), + array( '', 'Bookmarks', 'YahooMail' ), + $title + ) + ); + } + + /** + * + * Strips name to look like platform name. + * + * @param string $title Title string. + * + * @return string Modified title string. + */ + public static function getPlatformName( $title ) { + return str_replace( + array( '-pin', 'facebook-messenger', 'sina-', '-ru', 'yahoo-mail', 'okru' ), + array( '', 'messenger', '', 'ru', 'yahoomail', 'odnoklassniki' ), + $title + ); + } +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/php/class-share-buttons.php b/wp/wp-content/plugins/sharethis-share-buttons/php/class-share-buttons.php new file mode 100644 index 00000000..e4093878 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/php/class-share-buttons.php @@ -0,0 +1,1671 @@ +button_widget = $button_widget; + $this->plugin = $plugin; + $this->menu_slug = 'sharethis-inline-sticky'; + $this->set_settings(); + $this->set_networks(); + $this->set_languages(); + + // Configure your buttons notice on activation. + register_activation_hook( + DIR_PATH . 'sharethis-share-buttons.php', + array( $this, 'st_activation_hook' ) + ); + + // Clean up plugin information on deactivation. + register_deactivation_hook( + DIR_PATH . 'sharethis-share-buttons.php', + array( $this, 'st_deactivation_hook' ) + ); + } + + /** + * Set the settings sections and fields. + * + * @access private + */ + private function set_settings() { + // Sections config. + $this->setting_sections = array( + '' . + esc_html__( + 'Inline Share Buttons', + 'sharethis-share-buttons' + ), + '' . + esc_html__( + 'Sticky Share Buttons', + 'sharethis-share-buttons' + ), + '' . + esc_html__( + 'GDPR Compliance Tool', + 'sharethis-share-buttons' + ), + ); + + // Setting configs. + $this->setting_fields = array( + array( + 'id_suffix' => 'inline_settings', + 'description' => $this->get_descriptions( 'Inline' ), + 'callback' => 'config_settings', + 'section' => 'share_button_section_1', + 'arg' => 'inline', + ), + array( + 'id_suffix' => 'sticky_settings', + 'description' => $this->get_descriptions( 'Sticky' ), + 'callback' => 'config_settings', + 'section' => 'share_button_section_2', + 'arg' => 'sticky', + ), + array( + 'id_suffix' => 'shortcode', + 'description' => $this->get_descriptions( '', 'shortcode' ), + 'callback' => 'shortcode_template', + 'section' => 'share_button_section_1', + 'arg' => array( + 'type' => 'shortcode', + 'value' => '[sharethis-inline-buttons]', + ), + ), + array( + 'id_suffix' => 'template', + 'description' => $this->get_descriptions( '', 'template' ), + 'callback' => 'shortcode_template', + 'section' => 'share_button_section_1', + 'arg' => array( + 'type' => 'template', + 'value' => '', + ), + ), + ); + } + + /** + * Set inline settings fields. + */ + public function inline_setting_fields() { + return array( + array( + 'id_suffix' => 'inline_post_top', + 'title' => esc_html__( 'Top of post body', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + 'margin' => true, + ), + ), + array( + 'id_suffix' => 'inline_post_bottom', + 'title' => esc_html__( 'Bottom of post body', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => '', + 'false' => 'checked="checked"', + 'margin' => true, + ), + ), + array( + 'id_suffix' => 'inline_page_top', + 'title' => esc_html__( 'Top of page body', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => '', + 'false' => 'checked="checked"', + 'margin' => true, + ), + ), + array( + 'id_suffix' => 'inline_page_bottom', + 'title' => esc_html__( 'Bottom of page body', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => '', + 'false' => 'checked="checked"', + 'margin' => true, + ), + ), + array( + 'id_suffix' => 'excerpt', + 'title' => esc_html__( 'Include in excerpts', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => '', + 'false' => 'checked="checked"', + 'margin' => true, + ), + ), + ); + } + + /** + * Settings fields. + */ + public function sticky_setting_fields() { + return array( + array( + 'id_suffix' => 'sticky_home', + 'title' => esc_html__( 'Home Page', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + ), + ), + array( + 'id_suffix' => 'sticky_post', + 'title' => esc_html__( 'Posts', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + ), + ), + array( + 'id_suffix' => 'sticky_custom_posts', + 'title' => esc_html__( 'Custom Post Types', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + ), + ), + array( + 'id_suffix' => 'sticky_page', + 'title' => esc_html__( 'Pages', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + ), + ), + array( + 'id_suffix' => 'sticky_page_off', + 'title' => esc_html__( 'Exclude specific pages:', 'sharethis-share-buttons' ), + 'callback' => 'list_cb', + 'type' => array( + 'single' => 'page', + 'multi' => 'pages', + ), + ), + array( + 'id_suffix' => 'sticky_category', + 'title' => esc_html__( 'Category archive pages', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + ), + ), + array( + 'id_suffix' => 'sticky_category_off', + 'title' => esc_html__( 'Exclude specific category archives:', 'sharethis-share-buttons' ), + 'callback' => 'list_cb', + 'type' => array( + 'single' => 'category', + 'multi' => 'categories', + ), + ), + array( + 'id_suffix' => 'sticky_tags', + 'title' => esc_html__( 'Tags Archives', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + ), + ), + array( + 'id_suffix' => 'sticky_author', + 'title' => esc_html__( 'Author pages', 'sharethis-share-buttons' ), + 'callback' => 'onoff_cb', + 'type' => '', + 'default' => array( + 'true' => 'checked="checked"', + 'false' => '', + ), + ), + ); + } + + /** + * Add in ShareThis menu option. + * + * @action admin_menu + */ + public function define_sharethis_menus() { + $propertyid = get_option( 'sharethis_property_id' ); + + // Menu base64 Encoded icon. + $icon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0NC4xICg0MTQ1NSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+RmlsbCAzPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkRlc2t0b3AtSEQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMC4wMDAwMDAsIC00MzguMDAwMDAwKSIgZmlsbD0iI0ZFRkVGRSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xNTE2NDMyLDQ0OS4xMDMwMTEgQzIyLjcyNjg4NzcsNDQ5LjEwMzAxMSAyMi4zMzM1MDYyLDQ0OS4yMjg5OSAyMS45OTcwODA2LDQ0OS40Mzc5ODkgQzIxLjk5NTE0OTksNDQ5LjQzNTA5MyAyMS45OTcwODA2LDQ0OS40Mzc5ODkgMjEuOTk3MDgwNiw0NDkuNDM3OTg5IEMyMS44ODA3NTU1LDQ0OS41MDg5NDMgMjEuNzM1NDY5OCw0NDkuNTQ1NjI2IDIxLjU4OTIxODgsNDQ5LjU0NTYyNiBDMjEuNDUzMTA0LDQ0OS41NDU2MjYgMjEuMzE5ODg1Miw0NDkuNTA3NDk0IDIxLjIwODg2OTYsNDQ5LjQ0NTIyOSBMMTQuODczNzM4Myw0NDYuMDM4OTggQzE0Ljc2NDE3MDcsNDQ1Ljk5MDIzIDE0LjY4NzkwNzgsNDQ1Ljg3ODczMSAxNC42ODc5MDc4LDQ0NS43NTEzMDUgQzE0LjY4NzkwNzgsNDQ1LjYyMzM5NSAxNC43NjUxMzYsNDQ1LjUxMTg5NyAxNC44NzQ3MDM2LDQ0NS40NjI2NjQgTDIxLjIwODg2OTYsNDQyLjA1Njg5NyBDMjEuMzE5ODg1Miw0NDEuOTk1MTE1IDIxLjQ1MzEwNCw0NDEuOTU2NTAxIDIxLjU4OTIxODgsNDQxLjk1NjUwMSBDMjEuNzM1NDY5OCw0NDEuOTU2NTAxIDIxLjg4MDc1NTUsNDQxLjk5MzY2NyAyMS45OTcwODA2LDQ0Mi4wNjQ2MiBDMjEuOTk3MDgwNiw0NDIuMDY0NjIgMjEuOTk1MTQ5OSw0NDIuMDY3MDM0IDIxLjk5NzA4MDYsNDQyLjA2NDYyIEMyMi4zMzM1MDYyLDQ0Mi4yNzMxMzcgMjIuNzI2ODg3Nyw0NDIuMzk5MTE1IDIzLjE1MTY0MzIsNDQyLjM5OTExNSBDMjQuMzY2NTQwMyw0NDIuMzk5MTE1IDI1LjM1MTY4MzQsNDQxLjQxNDQ1NSAyNS4zNTE2ODM0LDQ0MC4xOTk1NTggQzI1LjM1MTY4MzQsNDM4Ljk4NDY2IDI0LjM2NjU0MDMsNDM4IDIzLjE1MTY0MzIsNDM4IEMyMi4wMTYzODc2LDQzOCAyMS4wOTMwMjcyLDQzOC44NjMwMjYgMjAuOTc1MjU0MSw0MzkuOTY3MzkgQzIwLjk3MTM5MjYsNDM5Ljk2MzA0NiAyMC45NzUyNTQxLDQzOS45NjczOSAyMC45NzUyNTQxLDQzOS45NjczOSBDMjAuOTUwNjM3NSw0NDAuMjM5MTM3IDIwLjc2OTE1MTEsNDQwLjQ2NzkyNiAyMC41MzYwMTgzLDQ0MC41ODQyNTEgTDE0LjI3OTU2MzMsNDQzLjk0NzU0MiBDMTQuMTY0MjAzNiw0NDQuMDE3MDQ3IDE0LjAyNDIyNzMsNDQ0LjA1NjE0NCAxMy44Nzk0MjQzLDQ0NC4wNTYxNDQgQzEzLjcwODU1NjgsNDQ0LjA1NjE0NCAxMy41NDgzMDgxLDQ0NC4wMDQ0OTggMTMuNDIwODgxNSw0NDMuOTEwMzc2IEMxMy4wNzUyODUsNDQzLjY4NDk2NiAxMi42NjUwMDk4LDQ0My41NTEyNjQgMTIuMjIxOTEyNiw0NDMuNTUxMjY0IEMxMS4wMDcwMTU1LDQ0My41NTEyNjQgMTAuMDIyMzU1MSw0NDQuNTM2NDA3IDEwLjAyMjM1NTEsNDQ1Ljc1MTMwNSBDMTAuMDIyMzU1MSw0NDYuOTY2MjAyIDExLjAwNzAxNTUsNDQ3Ljk1MDg2MiAxMi4yMjE5MTI2LDQ0Ny45NTA4NjIgQzEyLjY2NTAwOTgsNDQ3Ljk1MDg2MiAxMy4wNzUyODUsNDQ3LjgxNzY0MyAxMy40MjA4ODE1LDQ0Ny41OTIyMzMgQzEzLjU0ODMwODEsNDQ3LjQ5NzYyOSAxMy43MDg1NTY4LDQ0Ny40NDY0NjUgMTMuODc5NDI0Myw0NDcuNDQ2NDY1IEMxNC4wMjQyMjczLDQ0Ny40NDY0NjUgMTQuMTY0MjAzNiw0NDcuNDg1MDc5IDE0LjI3OTU2MzMsNDQ3LjU1NDU4NSBMMjAuNTM2MDE4Myw0NTAuOTE4MzU4IEMyMC43Njg2Njg0LDQ1MS4wMzQyMDEgMjAuOTUwNjM3NSw0NTEuMjYzNDcyIDIwLjk3NTI1NDEsNDUxLjUzNTIxOSBDMjAuOTc1MjU0MSw0NTEuNTM1MjE5IDIwLjk3MTM5MjYsNDUxLjUzOTU2MyAyMC45NzUyNTQxLDQ1MS41MzUyMTkgQzIxLjA5MzAyNzIsNDUyLjYzOTEwMSAyMi4wMTYzODc2LDQ1My41MDI2MDkgMjMuMTUxNjQzMiw0NTMuNTAyNjA5IEMyNC4zNjY1NDAzLDQ1My41MDI2MDkgMjUuMzUxNjgzNCw0NTIuNTE3NDY2IDI1LjM1MTY4MzQsNDUxLjMwMjU2OSBDMjUuMzUxNjgzNCw0NTAuMDg3NjcyIDI0LjM2NjU0MDMsNDQ5LjEwMzAxMSAyMy4xNTE2NDMyLDQ0OS4xMDMwMTEiIGlkPSJGaWxsLTMiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=='; + + // Main sharethis menu. + add_menu_page( + $this->get_descriptions( '', 'share_buttons' ), + __( 'ShareThis Share Buttons', 'sharethis-share-buttons' ), + 'manage_options', + $this->menu_slug . '-share-buttons', + array( $this, 'share_button_display' ), + $icon, + 26 + ); + } + + /** + * Enqueue main MU script. + * + * @action wp_enqueue_scripts + */ + public function enqueue_mu() { + wp_enqueue_script( ASSET_PREFIX . '-mu' ); + } + + /** + * Enqueue admin assets. + * + * @action admin_enqueue_scripts + * + * @param string $hook_suffix The current admin page. + */ + public function enqueue_admin_assets( $hook_suffix ) { + // Are sticky and inline buttons enabled. + $inline = 'true' === get_option( 'sharethis_inline' ) || true === get_option( 'sharethis_inline' ) ? + true : + false; + $sticky = 'true' === get_option( 'sharethis_sticky' ) || true === get_option( 'sharethis_sticky' ) ? + true : + false; + $gdpr = 'true' === get_option( 'sharethis_gdpr' ) || true === get_option( 'sharethis_gdpr' ) ? + true : + false; + $first_exists = get_option( 'sharethis_first_product' ); + $first_button = false !== $first_exists && null !== $first_exists ? $first_exists : ''; + $first_exists = false === $first_exists || null === $first_exists || '' === $first_exists ? true : false; + $propertyid = explode( '-', get_option( 'sharethis_property_id' ), 2 ); + $token = get_option( 'sharethis_token' ); + $property_id = isset( $propertyid[0] ) ? $propertyid[0] : ''; + $secret = isset( $propertyid[1] ) ? $propertyid[1] : ''; + $button_config = get_option( 'sharethis_button_config', true ); + $button_config = false !== $button_config && null !== $button_config ? $button_config : ''; + + if ( '' === $property_id ) { + wp_register_script( + ASSET_PREFIX . '-credentials', + DIR_URL . 'js/set-credentials.js', + array( 'jquery', 'wp-util' ), + filemtime( DIR_PATH . 'js/set-credentials.js' ), + false + ); + + // Only enqueue this script on the general settings page for credentials. + wp_enqueue_script( ASSET_PREFIX . '-credentials' ); + wp_add_inline_script( + ASSET_PREFIX . '-credentials', + sprintf( + 'Credentials.boot( %s );', + wp_json_encode( + array( + 'nonce' => wp_create_nonce( META_PREFIX ), + 'email' => get_bloginfo( 'admin_email' ), + 'url' => str_replace( 'http://', '', str_replace( 'https://', '', site_url() ) ), + 'buttonConfig' => $button_config, + ) + ) + ) + ); + } + + // Only enqueue assets on this plugin admin menu. + if ( 'toplevel_page_sharethis-inline-sticky-share-buttons' !== $hook_suffix ) { + return; + } + + // Enqueue the styles globally throughout the ShareThis menus. + wp_enqueue_style( ASSET_PREFIX . '-admin' ); + wp_enqueue_script( ASSET_PREFIX . '-mua' ); + + if ( $first_exists && ( $inline || $sticky ) ) { + $first = $inline ? 'inline' : 'sticky'; + + update_option( 'sharethis_first_product', $first ); + } + + wp_enqueue_script( ASSET_PREFIX . '-admin' ); + wp_add_inline_script( + ASSET_PREFIX . '-admin', + sprintf( + 'ShareButtons.boot( %s );', + wp_json_encode( + array( + 'inlineEnabled' => $inline, + 'stickyEnabled' => $sticky, + 'gdprEnabled' => $gdpr, + 'propertyid' => $property_id, + 'token' => $token, + 'secret' => $secret, + 'buttonConfig' => $button_config, + 'nonce' => wp_create_nonce( META_PREFIX ), + 'fresh' => get_option( 'sharethis_fract' ), + 'first' => get_option( 'sharethis_first_product', false ), + ) + ) + ) + ); + } + + /** + * Call back for displaying Share Buttons settings page. + */ + public function share_button_display() { + // Check user capabilities. + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + + $description = $this->get_descriptions( '', 'share_buttons' ); + $enabled = array( + 'inline' => 'true' === get_option( 'sharethis_inline' ) ? 'Enabled' : 'Disabled', + 'sticky' => 'true' === get_option( 'sharethis_sticky' ) ? 'Enabled' : 'Disabled', + 'gdpr' => 'true' === get_option( 'sharethis_gdpr' ) ? 'Enabled' : 'Disabled', + ); + + include_once DIR_PATH . '/templates/share-buttons/share-button-settings.php'; + } + + /** + * Define share button setting sections and fields. + * + * @action admin_init + */ + public function settings_api_init() { + // Register sections. + foreach ( $this->setting_sections as $index => $title ) { + // Since the index starts at 0, let's increment it by 1. + $i = $index + 1; + $section = "share_button_section_{$i}"; + + switch ( $i ) { + case 1: + $arg = 'inline'; + break; + case 2: + $arg = 'sticky'; + break; + case 3: + $arg = 'gdpr'; + break; + } + + // Add setting section. + add_settings_section( + $section, + '', + array( $this, 'social_button_link' ), + $this->menu_slug . '-share-buttons', + array( $arg ) + ); + } + + // Register setting fields. + foreach ( $this->setting_fields as $setting_field ) { + register_setting( $this->menu_slug . '-share-buttons', $this->menu_slug . '_' . $setting_field['id_suffix'] ); + add_settings_field( + $this->menu_slug . '_' . $setting_field['id_suffix'], + $setting_field['description'], + array( $this, $setting_field['callback'] ), + $this->menu_slug . '-share-buttons', + $setting_field['section'], + $setting_field['arg'] + ); + } + + // Register omit settings. + register_setting( $this->menu_slug . '-share-buttons', $this->menu_slug . '_sticky_page_off' ); + register_setting( $this->menu_slug . '-share-buttons', $this->menu_slug . '_sticky_category_off' ); + } + + /** + * Call back function for on / off buttons. + * + * @param string $type The setting type. + */ + public function config_settings( $type ) { + $config_array = 'inline' === $type ? $this->inline_setting_fields() : $this->sticky_setting_fields(); + + // Display on off template for inline settings. + foreach ( $config_array as $setting ) { + $option = 'sharethis_' . $setting['id_suffix']; + $title = isset( $setting['title'] ) ? $setting['title'] : ''; + $option_value = get_option( 'sharethis_' . $type . '_settings' ); + $default = isset( $setting['default'] ) ? $setting['default'] : ''; + $allowed = array( + 'li' => array( + 'class' => array(), + ), + 'span' => array( + 'id' => array(), + 'class' => array(), + ), + 'input' => array( + 'id' => array(), + 'name' => array(), + 'type' => array(), + 'value' => array(), + ), + ); + + // Margin control variables. + $margin = isset( $setting['default']['margin'] ) ? $setting['default']['margin'] : false; + $mclass = isset( $option_value[ $option . '_margin_top' ] ) && + 0 !== (int) $option_value[ $option . '_margin_top' ] || + isset( $option_value[ $option . '_margin_bottom' ] ) && + 0 !== (int) $option_value[ $option . '_margin_bottom' ] ? + 'active-margin' : ''; + $onoff = '' !== $mclass ? __( 'On', 'sharethis-share-buttons' ) : __( 'Off', 'sharethis-share-buttons' ); + $active = array( + 'class' => $mclass, + 'onoff' => esc_html( $onoff ), + ); + + if ( isset( $option_value[ $option ] ) && false !== $option_value[ $option ] && null !== $option_value[ $option ] ) { + $default = array( + 'true' => '', + 'false' => '', + ); + } + + // Display the list call back if specified. + if ( 'onoff_cb' === $setting['callback'] ) { + include DIR_PATH . '/templates/share-buttons/onoff-buttons.php'; + } else { + $current_omit = $this->get_omit( $setting['type'] ); + + $this->list_cb( $setting['type'], $current_omit, $allowed ); + } + } + } + + /** + * Helper function to build the omit list html + * + * @access private + * + * @param array $setting the omit type. + * + * @return string The html for omit list. + */ + private function get_omit( $setting ) { + $current_omit = get_option( 'sharethis_sticky_' . $setting['single'] . '_off' ); + $current_omit = isset( $current_omit ) ? $current_omit : ''; + $html = ''; + + if ( is_array( $current_omit ) ) { + foreach ( $current_omit as $title => $id ) { + $html .= '
  • '; + $html .= $title; + $html .= 'X'; + $html .= ""; + $html .= '
  • '; + } + } + + // Add ommit ids to meta box option. + $this->update_metabox_list( $current_omit ); + + return $html; + } + + /** + * Helper function to update metabox list to sync with omit. + * + * @param array $current_omit The omit list. + */ + private function update_metabox_list( $current_omit ) { + $current_on = get_option( 'sharethis_sticky_page_on' ); + + if ( true === isset( $current_on, $current_omit ) + && true === is_array( $current_on ) + && true === is_array( $current_omit ) + ) { + $new_on = array_diff( $current_on, $current_omit ); + + if ( true === is_array( $new_on ) ) { + delete_option( 'sharethis_sticky_page_on' ); + delete_option( 'sharethis_sticky_page_off' ); + + update_option( 'sharethis_sticky_page_off', $current_omit ); + update_option( 'sharethis_sticky_page_on', $new_on ); + } + } + } + + /** + * Callback function for on/off buttons + * + * @param array $id The setting type. + */ + public function enable_cb( $id ) { + include DIR_PATH . '/templates/share-buttons/enable-buttons.php'; + } + + /** + * Callback function for omitting fields. + * + * @param array $type The type of list to return for exlusion. + * @param array $current_omit The currently omited items. + * @param array $allowed The allowed html that an omit item can echo. + */ + public function list_cb( $type, $current_omit, $allowed ) { + include DIR_PATH . '/templates/share-buttons/list.php'; + } + + /** + * Callback function for the shortcode and template code fields. + * + * @param string $type The type of template to pull. + */ + public function shortcode_template( $type ) { + include DIR_PATH . '/templates/share-buttons/shortcode-templatecode.php'; + } + + /** + * Callback function for the login buttons. + * + * @param string $button The specific product to link to. + */ + public function social_button_link( $button ) { + $networks = $this->networks; + $languages = $this->languages; + + if ( isset( $button['id'] ) && 'share_button_section_3' === $button['id'] ) { + // User type options. + $user_types = array( + 'eu' => esc_html__( 'Only visitors in the EU', 'sharethis-custom' ), + 'always' => esc_html__( 'All visitors globally', 'sharethis-custom' ), + ); + + $vendor_data = $this->get_vendors(); + + if ( $vendor_data ) { + $vendors = $vendor_data['vendors']; + $purposes = array_column( $vendor_data['purposes'], 'name', 'id' ); + } + + $enabled = array( + 'gdpr' => 'true' === get_option( 'sharethis_gdpr' ) ? 'Enabled' : 'Disabled', + ); + + // Template vars. + $colors = array( + '#e31010', + '#000000', + '#ffffff', + '#09cd18', + '#ff6900', + '#fcb900', + '#7bdcb5', + '#00d084', + '#8ed1fc', + '#0693e3', + '#abb8c3', + '#eb144c', + '#f78da7', + '#9900ef', + '#b80000', + '#db3e00', + '#fccb00', + '#008b02', + '#006b76', + '#1273de', + '#004dcf', + '#5300eb', + '#eb9694', + '#fad0c3', + '#fef3bd', + '#c1e1c5', + '#bedadc', + '#c4def6', + '#bed3f3', + '#d4c4fb', + ); + + include DIR_PATH . '/templates/general/gdpr/gdpr-config.php'; + } else { + $enabled = array( + 'inline' => 'true' === get_option( 'sharethis_inline' ) ? 'Enabled' : 'Disabled', + 'sticky' => 'true' === get_option( 'sharethis_sticky' ) ? 'Enabled' : 'Disabled', + 'gdpr' => 'true' === get_option( 'sharethis_gdpr' ) ? 'Enabled' : 'Disabled', + ); + + include DIR_PATH . '/templates/share-buttons/button-config.php'; + } + } + + /** + * Define setting descriptions. + * + * @param string $type Type of button. + * @param string $subtype Setting type. + * + * @access private + * @return string|void + */ + private function get_descriptions( $type = '', $subtype = '' ) { + global $current_user; + + switch ( $subtype ) { + case '': + $description = esc_html__( 'WordPress Display Settings', 'sharethis-share-buttons' ); + $description .= ''; + $description .= esc_html__( + 'Use these settings to automatically include or restrict the display of ', + 'sharethis-share-buttons' + ) . esc_html( $type ) . esc_html__( + ' Share Buttons on specific pages of your site.', + 'sharethis-share-buttons' + ); + $description .= ''; + break; + case 'shortcode': + $description = esc_html__( 'Shortcode', 'sharethis-share-buttons' ); + $description .= ''; + $description .= esc_html__( + 'Use this shortcode to deploy your inline share buttons in a widget, or WYSIWYG editor.', + 'sharethis-share-buttons' + ); + $description .= ''; + break; + case 'template': + $description = esc_html__( 'PHP', 'sharethis-share-buttons' ); + $description .= ''; + $description .= esc_html__( + 'Use this PHP snippet to include your inline share buttons anywhere else in your template.', + 'sharethis-share-buttons' + ); + $description .= ''; + break; + case 'social': + $description = esc_html__( 'Social networks and button styles', 'sharethis-share-buttons' ); + $description .= ''; + $description .= esc_html__( + 'Login to ShareThis Platform to add, remove or re-order social networks in your ', + 'sharethis-share-buttons' + ) . esc_html( $type ) . esc_html__( + ' Share buttons. You may also update the alignment, size, labels and count settings.', + 'sharethis-share-buttons' + ); + $description .= ''; + break; + case 'property': + $description = esc_html__( 'Property ID', 'sharethis-share-buttons' ); + $description .= ''; + $description .= esc_html__( + 'We use this unique ID to identify your property. Copy it from your ', + 'sharethis-share-buttons' + ); + $description .= '
    '; + $description .= esc_html__( 'ShareThis platform settings', 'sharethis-share-buttons' ); + $description .= ''; + break; + case 'share_buttons': + $description = '

    '; + break; + } + + return wp_kses_post( $description ); + } + + /** + * Set the property id and secret key for the user's platform account if query params are present. + * + * @action wp_ajax_set_credentials + */ + public function set_credentials() { + check_ajax_referer( META_PREFIX, 'nonce' ); + + if ( ! isset( $_POST['data'], $_POST['token'] ) || '' === $_POST['data'] ) { // WPCS: input var ok. + wp_send_json_error( 'Set credentials failed.' ); + } + + $data = sanitize_text_field( wp_unslash( $_POST['data'] ) ); // WPCS: input var ok. + $token = sanitize_text_field( wp_unslash( $_POST['token'] ) ); // WPCS: input var ok. + + // If both variables exist add them to a database option. + if ( false === get_option( 'sharethis_property_id' ) ) { + update_option( 'sharethis_property_id', $data ); + update_option( 'sharethis_token', $token ); + } + } + + /** + * Helper function to determine if property ID is set. + * + * @param string $type Should empty count as false. + * + * @access private + * @return bool + */ + private function is_property_id_set( $type = '' ) { + $property_id = get_option( 'sharethis_property_id' ); + + // If the property id is set then show the general settings template. + if ( false !== $property_id && null !== $property_id ) { + if ( 'empty' === $type && '' === $property_id ) { + return false; + } + + return true; + } + + return false; + } + + /** + * AJAX Call back to update status of buttons + * + * @action wp_ajax_update_buttons + */ + public function update_buttons() { + check_ajax_referer( META_PREFIX, 'nonce' ); + + if ( ! isset( $_POST['type'], $_POST['onoff'] ) ) { // phpcs:ignore input var ok. + wp_send_json_error( 'Update buttons failed.' ); + } + + // Set option type and button value. + $type = 'sharethis_' . sanitize_text_field( wp_unslash( $_POST['type'] ) ); // WPCS: input var ok. + $onoff = sanitize_text_field( wp_unslash( $_POST['onoff'] ) ); // WPCS: input var ok. + + if ( 'On' === $onoff ) { + update_option( $type, 'true' ); + } elseif ( 'Off' === $onoff ) { + update_option( $type, 'false' ); + } + } + + /** + * AJAX Call back to update buttons show/hide settings. + * + * @action wp_ajax_update_st_settings + */ + public function update_st_settings() { + check_ajax_referer( META_PREFIX, 'nonce' ); + + if ( ! isset( $_POST['formData'], $_POST['button'] ) ) { // phpcs:ignore input var ok. + wp_send_json_error( 'Update settings failed.' ); + } + + $button = sanitize_text_field( wp_unslash( filter_input( INPUT_POST, 'button', FILTER_UNSAFE_RAW ) ) ); + $form_data = sanitize_text_field( wp_unslash( filter_input( INPUT_POST, 'formData', FILTER_UNSAFE_RAW ) ) ); + $new_form_data = array(); + + if ( false === empty( $form_data ) ) { + foreach ( json_decode( $form_data, true ) as $form_data_item_name => $form_data_value ) { + $new_name = str_replace( array( 'sharethis_' . $button . '_settings[', ']' ), array( '', '' ), $form_data_item_name ); + $new_form_data[ $new_name ] = $form_data_value; + } + + update_option( 'sharethis_' . $button . '_settings', $new_form_data ); + wp_send_json_success( 'Settings saved' ); + } + + wp_send_json_error( 'Update settings failed.' ); + } + + /** + * AJAX Call back to set defaults when reset button is clicked. + * + * @action wp_ajax_set_default_settings + */ + public function set_default_settings() { + check_ajax_referer( META_PREFIX, 'nonce' ); + + if ( ! isset( $_POST['type'] ) ) { // WPCS: CRSF ok. input var ok. + wp_send_json_error( 'Update buttons failed.' ); + } + + // Set option type and button value. + $type = strtolower( sanitize_text_field( wp_unslash( $_POST['type'] ) ) ); // WPCS: input var ok. + + // Note the new install. + update_option( 'sharethis_fract', 'true' ); + + $this->set_the_defaults( $type ); + } + + /** + * Helper function to set the default button options. + * + * @param string $type The type of default to set. + */ + private function set_the_defaults( $type ) { + $default = array( + 'inline_settings' => array( + 'sharethis_inline_post_top' => 'true', + 'sharethis_inline_post_bottom' => 'false', + 'sharethis_inline_page_top' => 'false', + 'sharethis_inline_page_bottom' => 'false', + 'sharethis_excerpt' => 'false', + 'sharethis_inline_post_top_margin_top' => 0, + 'sharethis_inline_post_top_margin_bottom' => 0, + 'sharethis_inline_post_bottom_margin_top' => 0, + 'sharethis_inline_post_bottom_margin_bottom' => 0, + 'sharethis_inline_page_top_margin_top' => 0, + 'sharethis_inline_page_top_margin_bottom' => 0, + 'sharethis_inline_page_bottom_margin_top' => 0, + 'sharethis_inline_page_bottom_margin_bottom' => 0, + 'sharethis_excerpt_margin_top' => 0, + 'sharethis_excerpt_margin_bottom' => 0, + ), + 'sticky_settings' => array( + 'sharethis_sticky_home' => 'true', + 'sharethis_sticky_post' => 'true', + 'sharethis_sticky_custom_posts' => 'true', + 'sharethis_sticky_page' => 'true', + 'sharethis_sticky_category' => 'true', + 'sharethis_sticky_tags' => 'true', + 'sharethis_sticky_author' => 'true', + ), + 'sticky_page_off' => '', + 'sticky_category_off' => '', + ); + + if ( 'both' !== $type ) { + update_option( 'sharethis_' . $type . '_settings', $default[ $type . '_settings' ] ); + + if ( 'sticky' === $type ) { + update_option( 'sharethis_sticky_page_off', '' ); + update_option( 'sharethis_sticky_category_off', '' ); + } + } else { + foreach ( $default as $types => $settings ) { + update_option( 'sharethis_' . $types, $settings ); + } + } + } + + /** + * Ajax Call back to return categories or pages based on input. + * + * @action wp_ajax_return_omit + */ + public function return_omit() { + check_ajax_referer( META_PREFIX, 'nonce' ); + + $post = filter_input_array( + INPUT_POST, + array( + 'key' => FILTER_UNSAFE_RAW, + 'type' => FILTER_UNSAFE_RAW, + ) + ); + + if ( true === empty( $post['key'] ) || true === empty( $post['type'] ) ) { + wp_send_json_error( '' ); + } + + $sharethis_sticky_category_off = get_option( 'sharethis_sticky_category_off', array() ); + + if ( false === is_array( $sharethis_sticky_category_off ) ) { + $sharethis_sticky_category_off = array(); + } + + $current_cat = array_values( $sharethis_sticky_category_off ); + + if ( 'category' === $post['type'] ) { + // Search category names LIKE $key_input. + $categories = get_categories( + array( + 'name__like' => htmlspecialchars( $post['key'] ), + 'exclude' => $current_cat, + 'hide_empty' => false, + ) + ); + + foreach ( $categories as $cats ) { + $related[] = array( + 'id' => $cats->term_id, + 'title' => $cats->name, + ); + } + } else { + global $wpdb; + + // @codingStandardsIgnoreStart + $pages = $wpdb->get_results( + $wpdb->prepare( + "SELECT ID, post_title + FROM $wpdb->posts + WHERE post_title LIKE '%%s%' + AND post_type = 'page'", + htmlspecialchars( $post['key'] ) + ) + ); + // @codingStandardsIgnoreEnd + + foreach ( $pages as $page ) { + if ( true === $this->not_in_list( $page->ID ) ) { + $related[] = array( + 'id' => $page->ID, + 'title' => $page->post_title, + ); + } + } + } + + // Create output list if any results exist. + if ( count( $related ) > 0 ) { + foreach ( $related as $items ) { + $item_option[] = sprintf( + '
  • %2$s
  • ', + (int) $items['id'], + esc_html( $items['title'] ) + ); + } + + wp_send_json_success( $item_option ); + } else { + wp_send_json_error( 'no results' ); + } + } + + /** + * Helper function to determine if page is in the list already. + * + * @param integer $id The page id. + * + * @return bool + */ + private function not_in_list( $id ) { + $sharethis_sticky_page_off = get_option( 'sharethis_sticky_page_off', array() ); + + if ( false === is_array( $sharethis_sticky_page_off ) ) { + $sharethis_sticky_page_off = array(); + } + + $current_pages = array_values( $sharethis_sticky_page_off ); + + return true === empty( $current_pages ) || false === in_array( $id, $current_pages, true ); + } + + /** + * Display custom admin notice. + * + * @action admin_notices + */ + public function connection_made_admin_notice() { + $screen = get_current_screen(); + if ( 'sharethis_page_sharethis-share-buttons' === $screen->base ) { + settings_errors(); + + $reset = filter_input( INPUT_GET, 'reset', FILTER_UNSAFE_RAW ); + + if ( false === empty( $reset ) ) { + ?> +
    +

    + +

    +
    + set_the_defaults( 'both' ); + } + + /** + * Admin Notice on Activation. + * + * @action admin_notices + */ + public function activation_inform_notice() { + $screen = get_current_screen(); + $product = get_option( 'sharethis_first_product' ); + $product = null !== $product && false !== $product ? ucfirst( $product ) : 'your'; + $gen_url = ' + configuration + '; + + if ( ! $this->is_property_id_set() ) { + $gen_url = 'configuration'; + } + + // Check transient, if available display notice. + if ( get_transient( 'st-activation' ) ) { + ?> +
    +

    + + . +

    +
    + base && + get_transient( 'st-connection' ) && + true === empty( $nft ) + ) { + ?> +
    +

    + +

    +
    + $value ) { + if ( strpos( $option, 'sharethis_' ) === 0 ) { + delete_option( $option ); + } + } + } + + /** + * Register the button widget. + * + * @action widgets_init + */ + public function register_widgets() { + register_widget( $this->button_widget ); + } + + /** + * Set the languages array. + */ + private function set_languages() { + $this->languages = array( + 'English' => 'en', + 'German' => 'de', + 'Spanish' => 'es', + 'French' => 'fr', + 'Italian' => 'it', + 'Japanese' => 'ja', + 'Korean' => 'ko', + 'Portuguese' => 'pt', + 'Russian' => 'ru', + 'Chinese' => 'zh', + ); + } + + + /** + * Set network array with info. + */ + private function set_networks() { + $this->networks = array( + 'facebook' => array( + 'color' => '#3B5998', + 'selected' => 'true', + ), + 'twitter' => array( + 'color' => '#000000', + 'selected' => 'true', + ), + 'pinterest' => array( + 'color' => '#CB2027', + 'selected' => 'true', + ), + 'email' => array( + 'color' => '#7d7d7d', + 'selected' => 'true', + ), + 'sms' => array( + 'color' => '#ffbd00', + 'selected' => 'true', + ), + 'messenger' => array( + 'color' => '#448AFF', + 'selected' => 'false', + 'url' => 'messenger.com/', + ), + 'sharethis' => array( + 'color' => '#95D03A', + 'selected' => 'true', + ), + 'linkedin' => array( + 'color' => '#0077b5', + 'selected' => 'false', + ), + 'reddit' => array( + 'color' => '#ff4500', + 'selected' => 'false', + ), + 'tumblr' => array( + 'color' => '#32506d', + 'selected' => 'false', + ), + 'digg' => array( + 'color' => '#262626', + 'selected' => 'false', + ), + 'iorbix' => array( + 'color' => '#364447', + 'selected' => 'false', + ), + 'kakao' => array( + 'color' => '#F9DD4A', + 'selected' => 'false', + ), + 'kindleit' => array( + 'color' => '#363C3D', + 'selected' => 'false', + ), + 'kooapp' => array( + 'color' => '#FACB05', + 'selected' => 'false', + ), + 'outlook' => array( + 'color' => '#3070CB', + 'selected' => 'false', + ), + 'tencentqq' => array( + 'color' => '#5790F7', + 'selected' => 'false', + ), + 'trello' => array( + 'color' => '#0D63DE', + 'selected' => 'false', + ), + 'viber' => array( + 'color' => '#645EA4', + 'selected' => 'false', + ), + 'yummly' => array( + 'color' => '#E16120', + 'selected' => 'false', + ), + 'stumbleupon' => array( + 'color' => '#eb4924', + 'selected' => 'false', + ), + 'whatsapp' => array( + 'color' => '#25d366', + 'selected' => 'false', + ), + 'vk' => array( + 'color' => '#4c6c91', + 'selected' => 'false', + ), + 'weibo' => array( + 'color' => '#ff9933', + 'selected' => 'false', + ), + 'odnoklassniki' => array( + 'color' => '#d7772d', + 'selected' => 'false', + ), + 'xing' => array( + 'color' => '#1a7576', + 'selected' => 'false', + ), + 'print' => array( + 'color' => '#222222', + 'selected' => 'false', + ), + 'blogger' => array( + 'color' => '#ff8000', + 'selected' => 'false', + ), + 'flipboard' => array( + 'color' => '#e12828', + 'selected' => 'false', + ), + 'meneame' => array( + 'color' => '#ff6400', + 'selected' => 'false', + ), + 'mailru' => array( + 'color' => '#168de2', + 'selected' => 'false', + ), + 'delicious' => array( + 'color' => '#205cc0', + 'selected' => 'false', + ), + 'buffer' => array( + 'color' => '#323b43', + 'selected' => 'false', + ), + 'diigo' => array( + 'color' => '#5285c4', + 'selected' => 'false', + ), + 'diaspora' => array( + 'color' => '#000000', + 'selected' => 'false', + ), + 'douban' => array( + 'color' => '#2e963d', + 'selected' => 'false', + ), + 'evernote' => array( + 'color' => '#5ba525', + 'selected' => 'false', + ), + 'fark' => array( + 'color' => '#6a6a9c', + 'selected' => 'false', + ), + 'googlebookmarks' => array( + 'color' => '#4285F4', + 'selected' => 'false', + ), + 'gmail' => array( + 'color' => '#D44638', + 'selected' => 'false', + ), + 'hackernews' => array( + 'color' => '#ff4000', + 'selected' => 'false', + ), + 'houzz' => array( + 'color' => '#4DBC15', + 'selected' => 'false', + ), + 'instapaper' => array( + 'color' => '#000000', + 'selected' => 'false', + ), + 'line' => array( + 'color' => '#00c300', + 'selected' => 'false', + ), + 'microsoftteams' => array( + 'color' => '#515bc1', + 'selected' => 'false', + ), + 'naver' => array( + 'color' => '#07bc5e', + 'selected' => 'false', + ), + 'nextdoor' => array( + 'color' => '#8ed500', + 'selected' => 'false', + ), + 'pinboard' => array( + 'color' => '#1f36f2', + 'selected' => 'false', + ), + 'plurk' => array( + 'color' => '#FF574D', + 'selected' => 'false', + ), + 'pocket' => array( + 'color' => '#ef4056', + 'selected' => 'false', + ), + 'qzone' => array( + 'color' => '#F1C40F', + 'selected' => 'false', + ), + 'refind' => array( + 'color' => '#4286f4', + 'selected' => 'false', + ), + 'renren' => array( + 'color' => '#005baa', + 'selected' => 'false', + ), + 'surfingbird' => array( + 'color' => '#6dd3ff', + 'selected' => 'false', + ), + 'skype' => array( + 'color' => '#00aff0', + 'selected' => 'false', + ), + 'telegram' => array( + 'color' => '#37AEE2', + 'selected' => 'false', + ), + 'threema' => array( + 'color' => '#000000', + 'selected' => 'false', + ), + 'yahoomail' => array( + 'color' => '#720e9e', + 'selected' => 'false', + ), + 'wordpress' => array( + 'color' => '#21759b', + 'selected' => 'false', + ), + 'wechat' => array( + 'color' => '#4EC034', + 'selected' => 'false', + 'url' => 'wechat.com/', + ), + 'blm' => array( + 'color' => '#000000', + 'selected' => 'false', + ), + 'livejournal' => array( + 'color' => '#00b0ea', + 'selected' => 'false', + ), + 'snapchat' => array( + 'color' => '#FFFC00', + 'selected' => 'false', + ), + ); + } + + /** + * AJAX Call back to save the set up button config for setup. + * + * @action wp_ajax_set_button_config + */ + public function set_button_config() { + check_ajax_referer( META_PREFIX, 'nonce' ); + + $post = filter_input_array( + INPUT_POST, + array( + 'button' => FILTER_UNSAFE_RAW, + 'config' => array( + 'filter' => FILTER_DEFAULT, + 'flags' => FILTER_REQUIRE_ARRAY, + ), + 'first' => FILTER_UNSAFE_RAW, + 'nonce' => FILTER_UNSAFE_RAW, + 'fresh' => FILTER_UNSAFE_RAW, + 'type' => FILTER_UNSAFE_RAW, + ) + ); + + if ( 'true' === htmlspecialchars( $post['fresh'] ) ) { + update_option( 'sharethis_fract', 'false' ); + } + + if ( true === empty( $post['button'] ) || true === empty( $post['config'] ) ) { + wp_send_json_error( 'Button Config Set Failed' ); + } + + $networks = true === isset( $post['config']['networks'] ) ? + array_map( 'sanitize_text_field', wp_unslash( $post['config']['networks'] ) ) : + ''; + + // Set Purposes. + $purposes = isset( $post['config']['publisher_purposes'] ) ? $post['config']['publisher_purposes'] : ''; + + $first = ( true === isset( $post['first'] ) && 'upgrade' !== $post['first'] ); + $type = ( false === empty( $post['type'] ) ); + $button = sanitize_text_field( wp_unslash( $post['button'] ) ); + $config = $post['config']; + + // If user doesn't have a sharethis account already. + if ( false === $type ) { + $newconfig[ strtolower( $button ) ] = $config; + $config = $newconfig; + } else { + $config = 'platform' !== $button ? json_decode( str_replace( '\\', '', $config ), true ) : $config; + } + + $restrictions = isset( $config[ $button ]['publisher_restrictions'] ) ? $config[ $button ]['publisher_restrictions'] : ''; + + if ( false === $first ) { + $current_config = get_option( 'sharethis_button_config', array() ); + $current_config = true === is_array( $current_config ) ? $current_config : array(); + $current_config[ $button ] = $post['config']; + $current_config[ $button ]['networks'] = $networks; + + if ( 'gdpr' === $button ) { + $current_config[ $button ]['publisher_purposes'] = $purposes; + } + + $config = $current_config; + + if ( 'gdpr' === $button ) { + $config['gdpr']['publisher_restrictions'] = $restrictions; + } + } + // Make sure bool is "true" or "false". + if ( isset( $config['inline'] ) ) { + $config['inline']['enabled'] = ( true === $config['inline']['enabled'] || + '1' === $config['inline']['enabled'] || + 'true' === $config['inline']['enabled'] ); + } + + if ( isset( $config['sticky'] ) ) { + $config['sticky']['enabled'] = ( true === $config['sticky']['enabled'] || + '1' === $config['sticky']['enabled'] || + 'true' === $config['sticky']['enabled'] ); + } + + if ( isset( $config['gdpr'] ) ) { + $config['gdpr']['enabled'] = ( true === $config['gdpr']['enabled'] || + '1' === $config['gdpr']['enabled'] || + 'true' === $config['gdpr']['enabled'] ); + + // Remove network. + unset( $config['gdpr']['networks'] ); + } + + $enable_tool = true === $config[ strtolower( $button ) ]['enabled'] ? 'true' : 'false'; + + update_option( 'sharethis_button_config', $config ); + + if ( 'upgrade' === $first && 'platform' !== $button ) { + update_option( 'sharethis_first_product', strtolower( $button ) ); + update_option( 'sharethis_' . strtolower( $button ), 'false' ); + } + + if ( 'platform' !== $button ) { + update_option( 'sharethis_' . strtolower( $button ), $enable_tool ); + } + } + + /** + * AJAX Call back to save the set up gdpr config for setup. + * + * @action wp_ajax_set_gdpr_config + */ + public function set_gdpr_config() { + check_ajax_referer( META_PREFIX, 'nonce' ); + + $post = filter_input_array( + INPUT_POST, + array( + 'button' => FILTER_UNSAFE_RAW, + 'config' => array( + 'filter' => FILTER_DEFAULT, + 'flags' => FILTER_REQUIRE_ARRAY, + ), + 'first' => FILTER_UNSAFE_RAW, + 'nonce' => FILTER_UNSAFE_RAW, + 'type' => FILTER_UNSAFE_RAW, + ) + ); + + if ( true === empty( $post['config'] ) ) { + wp_send_json_error( 'GDPR Config Set Failed' ); + } + + $first = false === empty( $post['first'] ); + $current_config = get_option( 'sharethis_button_config', true ); + $config = false !== $current_config && null !== $current_config ? $current_config : array(); + $config['gdpr'] = $post['config']; + + // Make sure bool is "true" or "false". + $config['gdpr']['enabled'] = ( true === $config['gdpr']['enabled'] || + '1' === $config['gdpr']['enabled'] || + 'true' === $config['gdpr']['enabled'] ); + + // Add purposes back. + $config['gdpr']['publisher_purposes'] = $purposes; + + update_option( 'sharethis_button_config', $config ); + + if ( $first ) { + update_option( 'sharethis_gdpr', 'true' ); + } + } + + /** + * Helper function get vendors. + * + * @return array + */ + private function get_vendors() { + $response = wp_remote_get( 'https://vendorlist.consensu.org/v2/vendor-list.json' ); + + return json_decode( wp_remote_retrieve_body( $response ), true ); + } +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/readme.txt b/wp/wp-content/plugins/sharethis-share-buttons/readme.txt new file mode 100644 index 00000000..d3d3e6c5 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/readme.txt @@ -0,0 +1,220 @@ +=== ShareThis Share Buttons === +Plugin Name: ShareThis Share Buttons +Contributors: sharethis, scottstorebloom, scottmweaver +Tags: social buttons, sharethis, share this, social sharing, share buttons, social media buttons, sharing tools +Author URI: https://sharethis.com/ +Author: ShareThis +Requires at least: 5.5 +Tested up to: 6.5.3 +Stable tag: 2.3.2 +Version: 2.3.2 + +License: GPLv2 or later + +Grow your website traffic and engagement by enabling one-click sharing with the free ShareThis Share Buttons plugin. The plugin is free (no upgrades available) and there is no registration is required! + +== Description == + +Make it easy for your audience to share your content across 40+ of the most popular social channels including Facebook, WhatsApp, Twitter, and Pinterest. + +The free plugin includes the following features: + +* Configure your buttons to stay anchored on the sidebar as visitors scroll or inline near your headline or product on the page for ideal visibility +* Customize the design including the alignment, size, and color (unlimited options) to match your brand +* Increase social shares with our responsive, lightweight, code which loads asynchronously and won’t slow down your site. +* Select your preferred language from over 15 options (English, German, Spanish, French, Italian, Japanese, Korean, Portuguese, Russian, Chinese, Dutch, Arabic, Bengali, Hindi, Turkish, and Vietnamese). +* Page and post editor controls which give you the power to enable or disable your buttons on specific posts and pages regardless of your default settings. + +Start expanding the reach of your content organically and grow the audience of your WordPress website with the ShareThis Share Buttons plugin. + +== WordPress Features == + +**Inline Share Buttons** + +* Enable or disable inline share buttons at the top and bottom of post and page bodies. +* Pixel perfect placement with top and bottom margin controls. +* Shortcode and PHP snippets. +* Page and post editor controls let you enable or disable inline share buttons on specific posts and pages regardless of your default settings. + +**Sticky Share Buttons** + +* Enable or disable sticky share buttons on the home page, all pages, all posts, custom posts, author pages, as well as tag and category archives. +* Exclude sticky share buttons on specific pages and category archives with a searchable page exception. +* Page and post editor controls let you enable or disable sticky share buttons on specific posts and pages regardless of your default settings. + +== Screenshots == + +1. Inline share button design options. +2. Inline share button settings. +3. Example of Inline share buttons. +4. Sticky share button design options. +5. Sticky share button settings. +6. Example of Sticky share buttons. +7. Share button controls included on post and page editors. +8. Consent management platforom settings. + +== Installation == + +Install ShareThis Share Buttons just like any other plugin. Simply download the file directly from this page or search for us in the WordPress directory and click "Install". After you install and activate the plugin, simply configure your buttons and create an account. + +If you’re already using the new ShareThis buttons, and want to migrate to our WordPress plugin, we’ve got your back. Install the plugin, then from the first configuration screen click, connect to an existing property. Login, and select your property from the list. We’ll sync your settings from our platform. Don’t forget to remove the hard coded JS, and any hard coded inline share button divs! + +== Privacy == + +By creating an account with ShareThis, you agree to our [terms of use](https://sharethis.com/publisher-terms-of-use/) which includes the ability to keep track of user interactions with our buttons. You can read our privacy policy here: [https://www.sharethis.com/privacy/](https://sharethis.com/privacy/) + +Questions? Submit an inquiry through our support forum and our team will be happy to assist. + +== Frequently Asked Questions == + +**I reconfigured my buttons on the ShareThis platform, but nothing happened on my site. What’s going on here?** + +We cache your ShareThis platform button configurations (social networks, button size, labels etc.) to optimize their performance. Sometimes changes you make on the ShareThis platform take a couple minutes to update on your site. Also, if you activate a new button type from the settings page you may experience a similar lag. + +== Changelog == + += 2.3.2 = +* Additional security checks. + += 2.3.1 = +* Fix XSS security hole in shortcode + += 2.3.0 = +* Fix 8.2 deprecations. +* Test wp ver 6.5.2. + += 2.2.0 = +* Add new social networks. + += 2.1.11 = +* Remove leading commas for backwards compatibility + += 2.1.10 = +* Remove restapi action. + += 2.1.9 = +* Fix position option saves. +* Fix random enable on update. + += 2.1.8 = +* Fix missing update/reset buttons. +* Fix conflict with other share this menus. + += 2.1.7 = +* Add check for first product use. + += 2.1.6 = +* Test with WordPress 6.1.1. + += 2.1.5 = +* Add source. + += 2.1.4 = +* Add disable/enable tool buttons to gdpr. +* Fix reset if tool is turned off and on. + += 2.1.2 = +* Add disable tool button.s + += 2.1.1 = +* Fix issue with PHP 5.X compatibility. + += 2.1.0 = +* Add smart share buttons. +* Add new social networks options. + += 2.0.0 = +* Remove account registration. +* Add custom share button color options. +* Change UI to tabs. + += 1.5.8 = +* Test with WordPress 6.0.1 and PHP8. + += 1.5.7 = +* Fix critical error. +* Test with WordPress 5.9.2. +* Remove random gif. + += 1.5.6 = +* Sanitize inputs/outputs and improve code quality. +* Test with WordPress 5.9.1. + += 1.5.5 = +* Fix Ajax +* Test with WordPress 5.9. + += 1.5.4 = +* Fix markup for data-url output. + += 1.5.3 = +* Fix jquery attr call and php warning. +* Remove GDPR global scope. + += 1.5.2 = +* Add Snapchat, BLM and Live Journal network options. + += 1.5.1 = +* Fix position config update save. + += 1.5.0 = +* Fix missing update in stick config. +* Fix language selector. + += 1.4.1 = +* Fix GDPR compliance on/off. + += 1.4.0 = +* Added GDPR compliance tool option and config. + += 1.3.0 = +* Fix registration sticky configurations. +* Add DB data removal on deactivate. +* Add new companies to network list. +* Add notice for ad blockers. + += 1.2.10 = +* Fix endpoint update. + += 1.2.9 = +* Add German to language list. +* Remove Native counts. +* Replace api endpoints. + += 1.2.8 = +* Made WordPress 5+ compatible. +* Added new Gutenberg block category and block for adding inline buttons. +* Fixed backwards compatibility for accounts without secrets. + += 1.1.8 = +* Added multi-language options for translating share buttons. + += 1.1.7 = +* Added loading gifs to registration to avoid user double clicks. +* Added new Messenger button to network list. + += 1.1.6 = +* Menu logic for use by future ShareThis plugins. +* Fix button size selector. + += 1.1.5 = +* Create an account and design your share buttons without leaving the plugin! +* Link the plugin and sync buttons settings with an existing property on our Platform. + += 1.0.5 = +* Add a widget for sidebars to include buttons. + += 1.0.4 = +* Added data-url attribute to non the-excerpt filter excerpts. + += 1.0.3 = +* Fixed random share buttons on homepage base issue. + += 1.0.2 = +* Changed first product set function to add if doesn't exist instead of looking at transient. + += 1.0.1 = +* Fixed excerpt filter solving excerpt display issue. + += 1.0.0 = +* Brand new plugin submission. diff --git a/wp/wp-content/plugins/sharethis-share-buttons/sharethis-share-buttons.php b/wp/wp-content/plugins/sharethis-share-buttons/sharethis-share-buttons.php new file mode 100644 index 00000000..50e9c8ab --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/sharethis-share-buttons.php @@ -0,0 +1,86 @@ +=' ) ) { + require_once __DIR__ . '/instance.php'; +} else { + if ( defined( 'WP_CLI' ) ) { + WP_CLI::warning( _sharethis_share_buttons_php_version_text() ); + } else { + add_action( 'admin_notices', '_sharethis_share_buttons_php_version_error' ); + } +} + +/** + * Admin notice for incompatible versions of PHP. + */ +function _sharethis_share_buttons_php_version_error() { + printf( '

    %s

    ', esc_html( _sharethis_share_buttons_php_version_text() ) ); +} + +/** + * String describing the minimum PHP version. + * + * @return string + */ +function _sharethis_share_buttons_php_version_text() { + return __( + 'ShareThis Share Buttons plugin error: Your version of PHP is too old to run this plugin. You must be running PHP 5.3 or higher.', + 'sharethis-share-buttons' + ); +} + +/** + * The helper function to insert the proper inline button container. + * + * @return string + */ +function sharethis_inline_buttons() { + return '
    '; +} + +add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), '_sharethis_share_buttons_add_action_links' ); + +/** + * Add a link to the settings page. + * + * @param string $links The links shown in the plugin page. + * + * @return array + */ +function _sharethis_share_buttons_add_action_links( $links ) { + $mylinks = array( + 'Settings', + ); + + return array_merge( $links, $mylinks ); +} diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/exclusions.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/exclusions.php new file mode 100644 index 00000000..02d6aff8 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/exclusions.php @@ -0,0 +1,59 @@ + +
    +
    +
    +
    +
    +

    + +

    + +
    +
    +

    + +

    +
    +
    + +
    + + +
    + +
    +

    + + ' . + esc_html( $vendor['policyUrl'] ) . ''; + ?> +

    +

    + +

    + +

    + +
    +

    +
    +
    +
    + +
    +
    +
    diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/gdpr-config.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/gdpr-config.php new file mode 100644 index 00000000..b0d9dc7f --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/gdpr-config.php @@ -0,0 +1,117 @@ + +
    +

    + +

    + + + + +

    + +

    +
    + +
    + +
    + + + + + + + + + + + + +

    + +

    + +
    + +
    + +
    +

    +
    +
    +
    + + +
    + +
    + plugin->dir_path . '/templates/general/gdpr/purposes.php'; ?> +
    +
    + +
    +
    + + +
    +
    +
    + plugin->dir_path . '/templates/general/gdpr/exclusions.php'; ?> +
    +
    + + + + +
    +
    diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/purposes.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/purposes.php new file mode 100644 index 00000000..07f647ae --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/general/gdpr/purposes.php @@ -0,0 +1,207 @@ + + +
    +
    + +
    + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/minute-control/meta-box.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/minute-control/meta-box.php new file mode 100644 index 00000000..aca05163 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/minute-control/meta-box.php @@ -0,0 +1,58 @@ + +
    + +
    +

    + +
    + is_box_checked( 'inline', '_top' ) ); ?>> + + +
    +
    + is_box_checked( 'inline', '_bottom' ) ); ?>> + + +
    + + + +
    + + +
    +

    + + is_box_checked( 'sticky' ) ); ?>> + + +
    + + + + +
    diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/button-config.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/button-config.php new file mode 100644 index 00000000..6a535dbf --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/button-config.php @@ -0,0 +1,321 @@ + +
    +

    + + + +
    +
    +
    + + +

    + ⇧ ⇧ +

    + + +
    +

    + + click a network to add or remove it from your preview. We've already included the most popular networks. + + + + +
    + + + + + + + + + +
    +
    + +
    + + +
    +

    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + +
    + + +
    +

    + +
    + + + +
    +
    + + +
    +
    + + +
    + +
    +

    + +
    + +
    +
    + + + +
    +
    + + + +
    + +
    +
    +

    + +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +

    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +
    + + +
    +
    + +
    + +
    +

    + +
    + + +
    + +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    + +
    +

    + + + + + + + + + +
    +
    +

    + + +
    + + +
    + +
    +
    + +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    +

    + + + +
    +
    +
    + + + +
    diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/enable-buttons.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/enable-buttons.php new file mode 100644 index 00000000..678eccbf --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/enable-buttons.php @@ -0,0 +1,21 @@ + +
    + + +
    diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/list.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/list.php new file mode 100644 index 00000000..b17e86fd --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/list.php @@ -0,0 +1,28 @@ + +
    +

    + +

    + + +
      +
      +
      + diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/onoff-buttons.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/onoff-buttons.php new file mode 100644 index 00000000..2af0cd7a --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/onoff-buttons.php @@ -0,0 +1,35 @@ + +
      + + + +
      + + +
      + px + | + px +
      + +
      diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/share-button-settings.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/share-button-settings.php new file mode 100644 index 00000000..be2fdbf7 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/share-button-settings.php @@ -0,0 +1,25 @@ + + +
      + +
      + plugin->dir_path . '/templates/share-buttons/tabs.php'; ?> +
      + +
      + menu_slug . '-share-buttons' ); + do_settings_sections( $this->menu_slug . '-share-buttons' ); + submit_button( esc_html__( 'Update', 'sharethis-share-buttons' ) ); + ?> +
      +
      diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/shortcode-templatecode.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/shortcode-templatecode.php new file mode 100644 index 00000000..01e0bce5 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/shortcode-templatecode.php @@ -0,0 +1,16 @@ + + + +
      + + +
      diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/ssb.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/ssb.php new file mode 100644 index 00000000..b7f23632 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/ssb.php @@ -0,0 +1,44 @@ + +

      + +

      +
      +

      + +
      +
      + + +
      +

      + +

      + +
      +
      diff --git a/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/tabs.php b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/tabs.php new file mode 100644 index 00000000..e58a6912 --- /dev/null +++ b/wp/wp-content/plugins/sharethis-share-buttons/templates/share-buttons/tabs.php @@ -0,0 +1,23 @@ + +
      + + + +
      +
      + + + +
      +
      + + + +
      diff --git a/wp/wp-content/plugins/visual-web-optimizer/readme.txt b/wp/wp-content/plugins/visual-web-optimizer/readme.txt new file mode 100644 index 00000000..a87fa896 --- /dev/null +++ b/wp/wp-content/plugins/visual-web-optimizer/readme.txt @@ -0,0 +1,147 @@ +=== Visual Website Optimizer === +Contributors: VWO +Plugin Name: VWO +Plugin URI: https://vwo.com/ +Tags: split testing, analytics, stats, visual web optimizer, vwo, cro +Requires at least: 2.7 +Tested up to: 6.6.1 +Stable tag: 4.5 + +VWO is the all-in-one platform that helps you conduct visitor research, build an optimization roadmap, and run continuous experimentation. + +== Description == +This plugin will allow you to automatically insert the VWO tracking code. Just enter your VWO Account ID from https://app.vwo.com/#/settings + +== Installation == +Wordpress : Extract the zip file and just drop the contents in the wp-content/plugins/ directory of your WordPress installation and then activate the Plugin from Plugins page. + +WordpressMu : Same as above + +== Frequently Asked Questions == += I can't see any code added to my header or footer when I view my page source = +Your theme needs to have the header and footer actions in place before the `` and before the `` + += If I use this plugin, do I need to enter any other code on my website? = +No, this plugin is sufficient by itself + +== Screenshots == +1. Settings page (Asynchronous Code) +2. Settings page (Synchronous Code) + +== ChangeLog == += 4.5 = +* Tested with latest version +* VWO SmartCode 2.1 updated + += 4.4 = +* Tested with latest version +* Minor bug fix + += 4.3 = +* Minor bug fix + += 4.2 = +* Tested with latest version +* VWO SmartCode 2.1 updated + += 4.1 = +* Tested with latest version +* PHPCS Errors resolved +* WP Rocket support added + += 4.0 = +* Tested with latest version +* VWO SmartCode updated + += 3.9 = +* Tested with latest version +* Code improvement and add Rocket loader handling + += 3.8 = +* Tested with latest version +* Fix WP Rocket Issue + += 3.7 = +* Tested with latest version +* Fix Divi Frontend Editor Issue + += 3.6 = +* Tested with latest version + += 3.5 = +* Tested with latest version +* Rename label "Handle Rocket Loader Issue" to "Skip Deferred Execution" +* Set field default value of "Skip Deferred Execution" to "yes" + += 3.4 = +* Tested with latest version +* Code improvement and add Rocket loader handling + += 3.3 = +* Tested with latest version +* Add new options in settings + += 3.2 = +* Tested with latest version + += 3.1 = +* Add Setting link in plugin listing page + += 3.0 = +* Update Logo and links + += 2.9 = +* Tested with latest version + += 2.8 = +* Tested with latest version + += 2.7 = +* Update Plugin Name, Author and Description + += 2.6 = +* Remove Conflict Errors + += 2.5 = +* Update tested upto version + += 2.4 = +* Update links + += 2.3 = +* Minor bug fix + += 2.2 = +* Bug fix to have default tolerance values when plugin is updated + += 2.1 = +* Better documentation + += 2.0 = +* Option to choose between asynchronous or synchronous code +* Updated code snippet +* Faster website loading + += 1.3 = +* code snippet updated + += 1.0.1 = +* use Website instead of Web in name of functions and readme (branding) + += 1.0 = +* First Version + +== Upgrade Notice == +Option to choose the new asynchronous code. This will make the website load faster + +== Configuration == + +Enter your ID in the field marked 'YOUR VWO ACCOUNT ID' + +== Adding to your template == + +header code : +`` + +footer code : +`` \ No newline at end of file diff --git a/wp/wp-content/plugins/visual-web-optimizer/visual-website-optimizer.php b/wp/wp-content/plugins/visual-web-optimizer/visual-website-optimizer.php new file mode 100644 index 00000000..c630d9bc --- /dev/null +++ b/wp/wp-content/plugins/visual-web-optimizer/visual-website-optimizer.php @@ -0,0 +1,378 @@ +VWO for more details. + * Author: VWO + * Version: 4.5 + * visual-website-optimizer.php + * Author URI: https://vwo.com/ + * + * @package VWO + * @author VWO + * @version 4.5 + **/ + +/** + * Generate Common Code + * + * @param integer $vwo_clicks integer. Defaults to 10. + */ +function get_vwo_clhf_script_common_code( $vwo_clicks = 10 ) { + ob_start(); + // @codingStandardsIgnoreStart + ?> + + + + + + + + + + + + + '; + ?> +

      VWO

      +

      You need to have a VWO account in order to use this plugin. This plugin inserts the neccessary code into your WordPress site automatically without you having to touch anything. In order to use the plugin, you need to enter your VWO Account ID:

      +
      + + + + + + + + + + + + + + + + > + + + + + > + + + + + > + + + + + + + +
      Your VWO Account ID
      No. of Heatmap Clicks
      Code (default: Asynchronous) + + /> Asynchronous    + + /> Synchronous +  [Help] +
      Settings Timeoutms (default: 2000)
      Library Timeoutms (default: 2500)
      Use Existing jQuery + />Yes
      Skip Deferred Execution + />Yes
      + + +

      +

      Your Account ID (a number) can be found in Settings area (top-right) after you login into your VWO account.

      + '; +} + +/** + * Displays a warning message if VWO settings are not configured. + * This function checks if the user is an admin and if the VWO ID option is set. If the user is not an admin or + * the VWO ID option is not set, it displays a warning message. + * + * @throws Exception Description of exception. + * @return void + */ +function vwo_clhf_warn_nosettings() { + if ( ! is_admin() ) { + return; + } + + $clhf_option = get_option( 'vwo_id' ); + if ( ! $clhf_option || $clhf_option < 1 ) { + echo "

      VWO is almost ready. You must enter your Account ID for it to work.

      "; + } +} + + +add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'vwo_clhf_add_plugin_page_settings_link' ); + +/** + * Function to add Settings Links on Plugin page + * + * @param array $links Array of links. + * @return array + */ +function vwo_clhf_add_plugin_page_settings_link( $links ) { + $links[] = '' . __( 'Settings' ) . ''; + return $links; +} + +/** + * Disables VWO in Divi Builder. + * + * @throws Exception Description of exception. + * @return void + */ +function disable_vwo_in_divi_builder() { + if ( has_action( 'wp_head', 'vwo_clhf_headercode' ) && function_exists( 'et_core_is_fb_enabled' ) && et_core_is_fb_enabled() ) { + remove_action( 'wp_head', 'vwo_clhf_headercode', 1 ); + } +} + +add_action( 'wp_head', 'disable_vwo_in_divi_builder', 0 ); + +?> \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/siblings/block.json b/wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/siblings/block.json new file mode 100644 index 00000000..a308745d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/siblings/block.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "version": "23.0", + "name": "yoast-seo/siblings", + "title": "Yoast Siblings", + "description": "Adds a list of internal links to sibling pages which share the same parent.", + "category": "yoast-internal-linking-blocks", + "icon": "editor-ul", + "keywords": [ + "SEO", + "siblings", + "siblings pages", + "internal linking", + "site structure" + ], + "textdomain": "wordpress-seo-premium", + "attributes": {}, + "example": { + "attributes": {} + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/subpages/block.json b/wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/subpages/block.json new file mode 100644 index 00000000..52e154c5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/blocks/dynamic-blocks/subpages/block.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "version": "23.0", + "name": "yoast-seo/subpages", + "title": "Yoast Subpages", + "description": "Adds a list of internal links to subpages of this page.", + "category": "yoast-internal-linking-blocks", + "icon": "editor-ul", + "keywords": [ + "SEO", + "subpages", + "childpages", + "children", + "internal linking", + "site structure" + ], + "textdomain": "wordpress-seo-premium", + "attributes": {}, + "example": { + "attributes": {} + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290-rtl.css new file mode 100644 index 00000000..194bcfee --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290-rtl.css @@ -0,0 +1 @@ +.yst-root button.yst-replacevar__use-ai-button{align-items:center;background-color:#f7f7f7;border:1px solid #dbdbdb;border-radius:4px;box-shadow:inset 0 -2px 0 0 #0000001a;box-sizing:border-box;color:#303030;cursor:pointer;display:flex;min-height:32px;padding:0 .5em;transition:var(--yoast-transition-default)}.yst-root button.yst-replacevar__use-ai-button:hover{background-color:#fff;border-color:var(--yoast-color-border--default);color:#000}.yst-root .yst-logo-icon{background-color:var(--yoast-color-primary);display:inline-block;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%}.yst-root .yst-ai-mode .yst-radio-group__options{flex-direction:row;gap:1.5rem}.yst-root .yst-length-progress-bar.yst-score-good .yst-progress-bar__progress{background-color:#7ad03a}.yst-root .yst-length-progress-bar.yst-score-ok .yst-progress-bar__progress{background-color:#ee7c1b}.yst-root .yst-length-progress-bar.yst-score-bad .yst-progress-bar__progress{background-color:#dc3232}.yst-root .yst-suggestions-radio-group .yst-radio-group__options{gap:0}.yst-root .yst-suggestions-radio-group .yst-radio-group__options>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-1px*var(--tw-space-y-reverse));margin-top:calc(-1px*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-introduction-modal .yst-modal__close-button{--tw-text-opacity:1;background-color:initial;color:rgb(107 114 128/var(--tw-text-opacity))}.yst-root .yst-introduction-modal .yst-modal__close-button:focus{--tw-ring-offset-width:0px;outline:2px solid #0000;outline-offset:2px}.yst-root .yst-ai-modal .yst-modal__panel{overflow:visible}.yst-root .yst-revoke-button .yst-animate-spin{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.yst-root #facebookPreview,.yst-root #twitterPreview,.yst-root #yoast-snippet-preview-container{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));margin-right:auto;margin-left:auto}.yst-root #yoast-snippet-preview-container{border-bottom:1px hidden #fff;border-radius:8px;box-shadow:0 1px 6px #20212447}.yst-root .desktop #yoast-snippet-preview-container{padding:12px 16px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290.css new file mode 100644 index 00000000..7430bb7a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-ai-generator-2290.css @@ -0,0 +1 @@ +.yst-root button.yst-replacevar__use-ai-button{align-items:center;background-color:#f7f7f7;border:1px solid #dbdbdb;border-radius:4px;box-shadow:inset 0 -2px 0 0 #0000001a;box-sizing:border-box;color:#303030;cursor:pointer;display:flex;min-height:32px;padding:0 .5em;transition:var(--yoast-transition-default)}.yst-root button.yst-replacevar__use-ai-button:hover{background-color:#fff;border-color:var(--yoast-color-border--default);color:#000}.yst-root .yst-logo-icon{background-color:var(--yoast-color-primary);display:inline-block;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%}.yst-root .yst-ai-mode .yst-radio-group__options{flex-direction:row;gap:1.5rem}.yst-root .yst-length-progress-bar.yst-score-good .yst-progress-bar__progress{background-color:#7ad03a}.yst-root .yst-length-progress-bar.yst-score-ok .yst-progress-bar__progress{background-color:#ee7c1b}.yst-root .yst-length-progress-bar.yst-score-bad .yst-progress-bar__progress{background-color:#dc3232}.yst-root .yst-suggestions-radio-group .yst-radio-group__options{gap:0}.yst-root .yst-suggestions-radio-group .yst-radio-group__options>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-1px*var(--tw-space-y-reverse));margin-top:calc(-1px*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-introduction-modal .yst-modal__close-button{--tw-text-opacity:1;background-color:initial;color:rgb(107 114 128/var(--tw-text-opacity))}.yst-root .yst-introduction-modal .yst-modal__close-button:focus{--tw-ring-offset-width:0px;outline:2px solid #0000;outline-offset:2px}.yst-root .yst-ai-modal .yst-modal__panel{overflow:visible}.yst-root .yst-revoke-button .yst-animate-spin{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity))}.yst-root #facebookPreview,.yst-root #twitterPreview,.yst-root #yoast-snippet-preview-container{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));margin-left:auto;margin-right:auto}.yst-root #yoast-snippet-preview-container{border-bottom:1px hidden #fff;border-radius:8px;box-shadow:0 1px 6px #20212447}.yst-root .desktop #yoast-snippet-preview-container{padding:12px 16px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290-rtl.css new file mode 100644 index 00000000..4f6b9824 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290-rtl.css @@ -0,0 +1 @@ +.emoji-select-button{align-items:center;background-color:#f7f7f7;border:1px solid #dbdbdb;border-radius:4px;box-shadow:inset 0 -2px 0 0 #0000001a;box-sizing:border-box;color:#303030;cursor:pointer;display:flex;min-height:32px;padding:0 .5em;transition:var(--yoast-transition-default);width:32px}.emoji-select-button svg{width:100%}.emoji-select-button-pressed,.emoji-select-button:hover{background-color:#fff;border-color:var(--yoast-color-border--default)}.yst-replacevar{position:relative}.yst-replacevar .emoji-select-popover{font-size:15px;margin-top:0;left:0}.rtl .yst-replacevar .emoji-select-popover{right:0;left:unset}.yst-replacevar .emoji-select-popover h3{font-size:1em;margin:0 0 .3em}.yst-replacevar .emoji-select-popover li{margin-bottom:unset}.yst-replacevar .emoji-select-popover .single-emoji{height:37.5px;width:37.5px}.yst-replacevar .emoji-select-popover .single-emoji span{font-size:20px!important}.yst-replacevar{color:#303030}.yst-replacevar .emoji-select-popover-nav{width:auto}.yst-replacevar .emoji-suggestions{padding:6px 0}.rtl .yst-replacevar .emoji-suggestions{left:0}.yst-replacevar .emoji-suggestion-item-wrapper{align-items:center;display:flex;padding:6px 10px}.yst-replacevar .emoji-suggestion-item-wrapper span{font-size:18px;line-height:1}.yst-replacevar .emoji-suggestion-item-wrapper .emoji-suggestion-item-text{font-size:13px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290.css new file mode 100644 index 00000000..610f22e1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-draft-js-plugins-2290.css @@ -0,0 +1 @@ +.emoji-select-button{align-items:center;background-color:#f7f7f7;border:1px solid #dbdbdb;border-radius:4px;box-shadow:inset 0 -2px 0 0 #0000001a;box-sizing:border-box;color:#303030;cursor:pointer;display:flex;min-height:32px;padding:0 .5em;transition:var(--yoast-transition-default);width:32px}.emoji-select-button svg{width:100%}.emoji-select-button-pressed,.emoji-select-button:hover{background-color:#fff;border-color:var(--yoast-color-border--default)}.yst-replacevar{position:relative}.yst-replacevar .emoji-select-popover{font-size:15px;margin-top:0;right:0}.rtl .yst-replacevar .emoji-select-popover{left:0;right:unset}.yst-replacevar .emoji-select-popover h3{font-size:1em;margin:0 0 .3em}.yst-replacevar .emoji-select-popover li{margin-bottom:unset}.yst-replacevar .emoji-select-popover .single-emoji{height:37.5px;width:37.5px}.yst-replacevar .emoji-select-popover .single-emoji span{font-size:20px!important}.yst-replacevar{color:#303030}.yst-replacevar .emoji-select-popover-nav{width:auto}.yst-replacevar .emoji-suggestions{padding:6px 0}.rtl .yst-replacevar .emoji-suggestions{right:0}.yst-replacevar .emoji-suggestion-item-wrapper{align-items:center;display:flex;padding:6px 10px}.yst-replacevar .emoji-suggestion-item-wrapper span{font-size:18px;line-height:1}.yst-replacevar .emoji-suggestion-item-wrapper .emoji-suggestion-item-text{font-size:13px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290-rtl.css new file mode 100644 index 00000000..4f39cea3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290-rtl.css @@ -0,0 +1 @@ +.elementor-panel .yoast-link-suggestions a{color:var(--yoast-color-link)}.yoast-link-suggestion__wrapper .yoast-link-suggestion__container{max-width:100%;padding-left:6px}.yoast-link-suggestion__wrapper .yoast-link-suggestion__container>a{width:-moz-fit-content;width:fit-content}.yoast-link-suggestion__wrapper .yoast-link-suggestion__copy{margin-right:auto}.yoast .notice{border:1px solid #ccd0d4;border-right-width:4px;box-shadow:0 1px 1px #0000000a;padding:1px 12px}.yoast .notice-warning{border-right-color:#ffb900}.yoast .notice-warning.notice-alt{background-color:#fff8e5}.yoast .notice p,.yoast .notice-title{margin:.5em 0;padding:2px}.yoast-links-suggestions-notice .button{background-color:var(--yoast-color-secondary);border:1px solid #0003;border-radius:4px;box-shadow:inset 0 -2px 0 #0000001a;color:var(--yoast-color-dark);cursor:pointer;font-size:14px;line-height:1.2;padding:10px 12px 12px;transition:background-color .15s ease-out 0s}.yoast-links-suggestions-notice .button:focus{box-shadow:var(--yoast-color-focus);outline:none}p.yoast-redirect-notification-modal-url{margin-bottom:0}.yoast .yoast-data-model{color:var(--yoast-elementor-color-paragraph)}@media(hover:hover){.yoast .yoast-links-suggestions-notice .button:active,.yoast-links-suggestions-notice .button:not(:disabled):hover{background-color:var(--yoast-color-secondary-darker);border:1px solid #0003}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290.css new file mode 100644 index 00000000..76d7cb92 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-elementor-2290.css @@ -0,0 +1 @@ +.elementor-panel .yoast-link-suggestions a{color:var(--yoast-color-link)}.yoast-link-suggestion__wrapper .yoast-link-suggestion__container{max-width:100%;padding-right:6px}.yoast-link-suggestion__wrapper .yoast-link-suggestion__container>a{width:-moz-fit-content;width:fit-content}.yoast-link-suggestion__wrapper .yoast-link-suggestion__copy{margin-left:auto}.yoast .notice{border:1px solid #ccd0d4;border-left-width:4px;box-shadow:0 1px 1px #0000000a;padding:1px 12px}.yoast .notice-warning{border-left-color:#ffb900}.yoast .notice-warning.notice-alt{background-color:#fff8e5}.yoast .notice p,.yoast .notice-title{margin:.5em 0;padding:2px}.yoast-links-suggestions-notice .button{background-color:var(--yoast-color-secondary);border:1px solid #0003;border-radius:4px;box-shadow:inset 0 -2px 0 #0000001a;color:var(--yoast-color-dark);cursor:pointer;font-size:14px;line-height:1.2;padding:10px 12px 12px;transition:background-color .15s ease-out 0s}.yoast-links-suggestions-notice .button:focus{box-shadow:var(--yoast-color-focus);outline:none}p.yoast-redirect-notification-modal-url{margin-bottom:0}.yoast .yoast-data-model{color:var(--yoast-elementor-color-paragraph)}@media(hover:hover){.yoast .yoast-links-suggestions-notice .button:active,.yoast-links-suggestions-notice .button:not(:disabled):hover{background-color:var(--yoast-color-secondary-darker);border:1px solid #0003}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290-rtl.css new file mode 100644 index 00000000..64c0384f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290-rtl.css @@ -0,0 +1 @@ +.yoast-link-suggestion-icon.yoast-link-suggestion-icon{box-sizing:border-box}.yoast-link-suggestions--loading{display:block;height:75px;margin:0 auto;padding:3em 0;width:75px}#yoast_internal_linking .inside{margin-top:0;padding-bottom:25px;padding-top:10px}.yoast-links-suggestions-notice{margin:5px 0 2px}body.is-dark-theme .wp-block .yoast-links-suggestions-notice{color:#000}.yoast-redirect-notification-modal-url{margin:0}.yoast-redirect-notification-modal-buttons{align-items:center;display:flex;margin-top:16px}.yoast-redirect-notification-modal-buttons button{margin-left:16px}#wpseosynonyms{margin-bottom:2em}.yoast-section{background-color:#fff;box-shadow:0 1px 2px #0003;padding:0 20px 15px;position:relative}.yoast-section__heading{color:#555;font-family:Open Sans,sans-serif;font-size:.9rem;font-weight:300;margin:0 -20px 15px;padding:8px 20px}.yoast-section__heading-icon{background-position:right 20px top .6em;background-repeat:no-repeat;background-size:16px;padding-right:44px}.yoast-section,.yoast-section *,.yoast-section :after,.yoast-section :before,.yoast-section:after,.yoast-section:before{box-sizing:border-box}.editable-preview h3:first-child{margin-top:0}.wpseo-form .snippet-editor__label{display:inline-block;margin-top:24px;width:auto}.wpseo-form .snippet-editor__label:first-child{margin-top:0}.wpseo-form .yoast_help.yoast-help-button{margin-top:20px}.wpseo-form .snippet-editor__label:first-child+.yoast-help-button{margin-top:-4px}.remove-keyword{background:#0000;border:none;cursor:pointer;display:inline-block;margin:0 -3px 0 0;padding:5px 6px 6px}.remove-keyword span{border:1px solid #0000;border-radius:100%;color:#686868;display:inline-block;font-size:12px;font-weight:400;height:16px;line-height:15px;padding:0;text-align:center;vertical-align:top;width:16px}.remove-keyword:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;outline:none}.remove-keyword:focus span,.remove-keyword:hover span{background-color:#dc3232;color:#fff}.wrap .wpseo-notice-breakout-inside{margin:0 -12px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290.css new file mode 100644 index 00000000..73c0060b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-metabox-2290.css @@ -0,0 +1 @@ +.yoast-link-suggestion-icon.yoast-link-suggestion-icon{box-sizing:border-box}.yoast-link-suggestions--loading{display:block;height:75px;margin:0 auto;padding:3em 0;width:75px}#yoast_internal_linking .inside{margin-top:0;padding-bottom:25px;padding-top:10px}.yoast-links-suggestions-notice{margin:5px 0 2px}body.is-dark-theme .wp-block .yoast-links-suggestions-notice{color:#000}.yoast-redirect-notification-modal-url{margin:0}.yoast-redirect-notification-modal-buttons{align-items:center;display:flex;margin-top:16px}.yoast-redirect-notification-modal-buttons button{margin-right:16px}#wpseosynonyms{margin-bottom:2em}.yoast-section{background-color:#fff;box-shadow:0 1px 2px #0003;padding:0 20px 15px;position:relative}.yoast-section__heading{color:#555;font-family:Open Sans,sans-serif;font-size:.9rem;font-weight:300;margin:0 -20px 15px;padding:8px 20px}.yoast-section__heading-icon{background-position:left 20px top .6em;background-repeat:no-repeat;background-size:16px;padding-left:44px}.yoast-section,.yoast-section *,.yoast-section :after,.yoast-section :before,.yoast-section:after,.yoast-section:before{box-sizing:border-box}.editable-preview h3:first-child{margin-top:0}.wpseo-form .snippet-editor__label{display:inline-block;margin-top:24px;width:auto}.wpseo-form .snippet-editor__label:first-child{margin-top:0}.wpseo-form .yoast_help.yoast-help-button{margin-top:20px}.wpseo-form .snippet-editor__label:first-child+.yoast-help-button{margin-top:-4px}.remove-keyword{background:#0000;border:none;cursor:pointer;display:inline-block;margin:0 0 0 -3px;padding:5px 6px 6px}.remove-keyword span{border:1px solid #0000;border-radius:100%;color:#686868;display:inline-block;font-size:12px;font-weight:400;height:16px;line-height:15px;padding:0;text-align:center;vertical-align:top;width:16px}.remove-keyword:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;outline:none}.remove-keyword:focus span,.remove-keyword:hover span{background-color:#dc3232;color:#fff}.wrap .wpseo-notice-breakout-inside{margin:0 -12px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290-rtl.css new file mode 100644 index 00000000..6060dee7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290-rtl.css @@ -0,0 +1 @@ +.fixed th.column-wpseo-cornerstone,.fixed th.column-wpseo-inclusive-language,.fixed th.column-wpseo-linked{padding:0;width:3em}th.column-wpseo-cornerstone .yoast-tooltip,th.column-wpseo-inclusive-language .yoast-tooltip{display:inline-block;overflow:visible;padding:8px 0;vertical-align:middle}th.column-wpseo-cornerstone .yoast-tooltip:after,th.column-wpseo-inclusive-language .yoast-tooltip:after{max-width:60px;white-space:break-spaces}td.column-wpseo-cornerstone,td.column-wpseo-inclusive-language{padding:8px 0 8px 10px}.manage-column .yoast-column-cornerstone:before{background:#0000 url(../../../assets/images/cornerstone-icon.svg) no-repeat 100% 3px;background-size:20px}.manage-column .yoast-column-inclusive-language:before{background:#0000 url(../../../assets/images/inclusive-language-icon.svg) no-repeat 100% 3px;background-size:20px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290.css new file mode 100644 index 00000000..6e0e9e0e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-post-overview-2290.css @@ -0,0 +1 @@ +.fixed th.column-wpseo-cornerstone,.fixed th.column-wpseo-inclusive-language,.fixed th.column-wpseo-linked{padding:0;width:3em}th.column-wpseo-cornerstone .yoast-tooltip,th.column-wpseo-inclusive-language .yoast-tooltip{display:inline-block;overflow:visible;padding:8px 0;vertical-align:middle}th.column-wpseo-cornerstone .yoast-tooltip:after,th.column-wpseo-inclusive-language .yoast-tooltip:after{max-width:60px;white-space:break-spaces}td.column-wpseo-cornerstone,td.column-wpseo-inclusive-language{padding:8px 10px 8px 0}.manage-column .yoast-column-cornerstone:before{background:#0000 url(../../../assets/images/cornerstone-icon.svg) no-repeat 0 3px;background-size:20px}.manage-column .yoast-column-inclusive-language:before{background:#0000 url(../../../assets/images/inclusive-language-icon.svg) no-repeat 0 3px;background-size:20px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290-rtl.css new file mode 100644 index 00000000..24441a50 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290-rtl.css @@ -0,0 +1 @@ +.redirect_form_row.field_error label{color:#dc3232}.redirect_form_row.field_error input{border-color:#dc3232}tbody .column-old .val:after{color:#d3d3d3;content:"/"}tbody .column-new .has-trailing-slash:after,tbody .column-new .val:before,tbody .column-old .val:before{content:"/"}tbody .column-new .remove-slashes:after,tbody .column-new .remove-slashes:before,tbody .column-old .remove-slashes:after,tbody .column-old .remove-slashes:before{content:none}.wpseo-redirect-clear{clear:both}.redirect_htaccess_disabled{opacity:.5}#inline-edit td{padding:0 20px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290.css new file mode 100644 index 00000000..24441a50 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-redirects-2290.css @@ -0,0 +1 @@ +.redirect_form_row.field_error label{color:#dc3232}.redirect_form_row.field_error input{border-color:#dc3232}tbody .column-old .val:after{color:#d3d3d3;content:"/"}tbody .column-new .has-trailing-slash:after,tbody .column-new .val:before,tbody .column-old .val:before{content:"/"}tbody .column-new .remove-slashes:after,tbody .column-new .remove-slashes:before,tbody .column-old .remove-slashes:after,tbody .column-old .remove-slashes:before{content:none}.wpseo-redirect-clear{clear:both}.redirect_htaccess_disabled{opacity:.5}#inline-edit td{padding:0 20px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290-rtl.css new file mode 100644 index 00000000..2716a864 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290-rtl.css @@ -0,0 +1 @@ +.wp-block-yoast-job-employment-type .components-input-control__container{width:50%}.yoast-job-block__salary .wp-block-yoast-job-salary-range{max-width:25%}.yoast-job-block__salary .wp-block-yoast-job-salary-range input[type=number]{-moz-appearance:textfield}.editor-styles-wrapper .wp-block-yoast-job-salary [data-block]{margin-bottom:0;margin-top:0} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290.css new file mode 100644 index 00000000..2716a864 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-schema-blocks-2290.css @@ -0,0 +1 @@ +.wp-block-yoast-job-employment-type .components-input-control__container{width:50%}.yoast-job-block__salary .wp-block-yoast-job-salary-range{max-width:25%}.yoast-job-block__salary .wp-block-yoast-job-salary-range input[type=number]{-moz-appearance:textfield}.editor-styles-wrapper .wp-block-yoast-job-salary [data-block]{margin-bottom:0;margin-top:0} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290-rtl.css new file mode 100644 index 00000000..c39e4827 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290-rtl.css @@ -0,0 +1 @@ +#yoast-seo-settings .emoji-select-button{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(30 41 59/var(--tw-text-opacity));cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;line-height:1rem;min-height:34px;text-align:center;-webkit-text-decoration-line:none;text-decoration-line:none;width:34px}#yoast-seo-settings .emoji-select-button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}#yoast-seo-settings .emoji-select-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}#yoast-seo-settings .emoji-select-button>svg{height:1.25rem;margin-right:auto;margin-left:auto;width:1.25rem} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290.css new file mode 100644 index 00000000..c11f0dd3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-settings-2290.css @@ -0,0 +1 @@ +#yoast-seo-settings .emoji-select-button{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(30 41 59/var(--tw-text-opacity));cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;line-height:1rem;min-height:34px;text-align:center;-webkit-text-decoration-line:none;text-decoration-line:none;width:34px}#yoast-seo-settings .emoji-select-button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}#yoast-seo-settings .emoji-select-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}#yoast-seo-settings .emoji-select-button>svg{height:1.25rem;margin-left:auto;margin-right:auto;width:1.25rem} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290-rtl.css new file mode 100644 index 00000000..09175dbc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290-rtl.css @@ -0,0 +1 @@ +.yst-root *,.yst-root :after,.yst-root :before{border:0 solid #e5e7eb;box-sizing:border-box}.yst-root :after,.yst-root :before{--tw-content:""}.yst-root{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;margin:0;tab-size:4}.yst-root hr{border-top-width:1px;color:inherit;height:0}.yst-root abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6{font-size:inherit;font-weight:inherit}.yst-root a{color:inherit;text-decoration:inherit}.yst-root b,.yst-root strong{font-weight:bolder}.yst-root code,.yst-root kbd,.yst-root pre,.yst-root samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}.yst-root small{font-size:80%}.yst-root sub,.yst-root sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}.yst-root sub{bottom:-.25em}.yst-root sup{top:-.5em}.yst-root table{border-collapse:collapse;border-color:inherit;text-indent:0}.yst-root button,.yst-root input,.yst-root optgroup,.yst-root select,.yst-root textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}.yst-root button,.yst-root select{text-transform:none}.yst-root [type=button],.yst-root [type=reset],.yst-root [type=submit],.yst-root button{-webkit-appearance:button;background-color:initial;background-image:none}.yst-root :-moz-focusring{outline:auto}.yst-root :-moz-ui-invalid{box-shadow:none}.yst-root progress{vertical-align:initial}.yst-root ::-webkit-inner-spin-button,.yst-root ::-webkit-outer-spin-button{height:auto}.yst-root [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.yst-root ::-webkit-search-decoration{-webkit-appearance:none}.yst-root ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.yst-root summary{display:list-item}.yst-root blockquote,.yst-root dd,.yst-root dl,.yst-root figure,.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6,.yst-root hr,.yst-root p,.yst-root pre{margin:0}.yst-root fieldset{margin:0;padding:0}.yst-root legend{padding:0}.yst-root menu,.yst-root ol,.yst-root ul{list-style:none;margin:0;padding:0}.yst-root textarea{resize:vertical}.yst-root input::placeholder,.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root [role=button],.yst-root button{cursor:pointer}.yst-root :disabled{cursor:default}.yst-root audio,.yst-root canvas,.yst-root embed,.yst-root iframe,.yst-root img,.yst-root object,.yst-root svg,.yst-root video{display:block;vertical-align:middle}.yst-root img,.yst-root video{height:auto;max-width:100%}.yst-root [type=date],.yst-root [type=datetime-local],.yst-root [type=email],.yst-root [type=month],.yst-root [type=number],.yst-root [type=password],.yst-root [type=search],.yst-root [type=tel],.yst-root [type=text],.yst-root [type=time],.yst-root [type=url],.yst-root [type=week]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root [type=date]:focus,.yst-root [type=datetime-local]:focus,.yst-root [type=email]:focus,.yst-root [type=month]:focus,.yst-root [type=number]:focus,.yst-root [type=password]:focus,.yst-root [type=search]:focus,.yst-root [type=tel]:focus,.yst-root [type=text]:focus,.yst-root [type=time]:focus,.yst-root [type=url]:focus,.yst-root [type=week]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder{color:#6b7280;opacity:1}.yst-root [type=date]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=datetime-local]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=email]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=month]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=number]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=password]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=search]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=tel]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=text]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=time]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=url]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=week]::-webkit-datetime-edit-fields-wrapper{padding:0}.yst-root [type=date]::-webkit-date-and-time-value,.yst-root [type=datetime-local]::-webkit-date-and-time-value,.yst-root [type=email]::-webkit-date-and-time-value,.yst-root [type=month]::-webkit-date-and-time-value,.yst-root [type=number]::-webkit-date-and-time-value,.yst-root [type=password]::-webkit-date-and-time-value,.yst-root [type=search]::-webkit-date-and-time-value,.yst-root [type=tel]::-webkit-date-and-time-value,.yst-root [type=text]::-webkit-date-and-time-value,.yst-root [type=time]::-webkit-date-and-time-value,.yst-root [type=url]::-webkit-date-and-time-value,.yst-root [type=week]::-webkit-date-and-time-value{min-height:1.5em}.yst-root [type=date]::-webkit-datetime-edit,.yst-root [type=date]::-webkit-datetime-edit-day-field,.yst-root [type=date]::-webkit-datetime-edit-hour-field,.yst-root [type=date]::-webkit-datetime-edit-meridiem-field,.yst-root [type=date]::-webkit-datetime-edit-millisecond-field,.yst-root [type=date]::-webkit-datetime-edit-minute-field,.yst-root [type=date]::-webkit-datetime-edit-month-field,.yst-root [type=date]::-webkit-datetime-edit-second-field,.yst-root [type=date]::-webkit-datetime-edit-year-field,.yst-root [type=datetime-local]::-webkit-datetime-edit,.yst-root [type=datetime-local]::-webkit-datetime-edit-day-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-hour-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-meridiem-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-millisecond-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-minute-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-month-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-second-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-year-field,.yst-root [type=email]::-webkit-datetime-edit,.yst-root [type=email]::-webkit-datetime-edit-day-field,.yst-root [type=email]::-webkit-datetime-edit-hour-field,.yst-root [type=email]::-webkit-datetime-edit-meridiem-field,.yst-root [type=email]::-webkit-datetime-edit-millisecond-field,.yst-root [type=email]::-webkit-datetime-edit-minute-field,.yst-root [type=email]::-webkit-datetime-edit-month-field,.yst-root [type=email]::-webkit-datetime-edit-second-field,.yst-root [type=email]::-webkit-datetime-edit-year-field,.yst-root [type=month]::-webkit-datetime-edit,.yst-root [type=month]::-webkit-datetime-edit-day-field,.yst-root [type=month]::-webkit-datetime-edit-hour-field,.yst-root [type=month]::-webkit-datetime-edit-meridiem-field,.yst-root [type=month]::-webkit-datetime-edit-millisecond-field,.yst-root [type=month]::-webkit-datetime-edit-minute-field,.yst-root [type=month]::-webkit-datetime-edit-month-field,.yst-root [type=month]::-webkit-datetime-edit-second-field,.yst-root [type=month]::-webkit-datetime-edit-year-field,.yst-root [type=number]::-webkit-datetime-edit,.yst-root [type=number]::-webkit-datetime-edit-day-field,.yst-root [type=number]::-webkit-datetime-edit-hour-field,.yst-root [type=number]::-webkit-datetime-edit-meridiem-field,.yst-root [type=number]::-webkit-datetime-edit-millisecond-field,.yst-root [type=number]::-webkit-datetime-edit-minute-field,.yst-root [type=number]::-webkit-datetime-edit-month-field,.yst-root [type=number]::-webkit-datetime-edit-second-field,.yst-root [type=number]::-webkit-datetime-edit-year-field,.yst-root [type=password]::-webkit-datetime-edit,.yst-root [type=password]::-webkit-datetime-edit-day-field,.yst-root [type=password]::-webkit-datetime-edit-hour-field,.yst-root [type=password]::-webkit-datetime-edit-meridiem-field,.yst-root [type=password]::-webkit-datetime-edit-millisecond-field,.yst-root [type=password]::-webkit-datetime-edit-minute-field,.yst-root [type=password]::-webkit-datetime-edit-month-field,.yst-root [type=password]::-webkit-datetime-edit-second-field,.yst-root [type=password]::-webkit-datetime-edit-year-field,.yst-root [type=search]::-webkit-datetime-edit,.yst-root [type=search]::-webkit-datetime-edit-day-field,.yst-root [type=search]::-webkit-datetime-edit-hour-field,.yst-root [type=search]::-webkit-datetime-edit-meridiem-field,.yst-root [type=search]::-webkit-datetime-edit-millisecond-field,.yst-root [type=search]::-webkit-datetime-edit-minute-field,.yst-root [type=search]::-webkit-datetime-edit-month-field,.yst-root [type=search]::-webkit-datetime-edit-second-field,.yst-root [type=search]::-webkit-datetime-edit-year-field,.yst-root [type=tel]::-webkit-datetime-edit,.yst-root [type=tel]::-webkit-datetime-edit-day-field,.yst-root [type=tel]::-webkit-datetime-edit-hour-field,.yst-root [type=tel]::-webkit-datetime-edit-meridiem-field,.yst-root [type=tel]::-webkit-datetime-edit-millisecond-field,.yst-root [type=tel]::-webkit-datetime-edit-minute-field,.yst-root [type=tel]::-webkit-datetime-edit-month-field,.yst-root [type=tel]::-webkit-datetime-edit-second-field,.yst-root [type=tel]::-webkit-datetime-edit-year-field,.yst-root [type=text]::-webkit-datetime-edit,.yst-root [type=text]::-webkit-datetime-edit-day-field,.yst-root [type=text]::-webkit-datetime-edit-hour-field,.yst-root [type=text]::-webkit-datetime-edit-meridiem-field,.yst-root [type=text]::-webkit-datetime-edit-millisecond-field,.yst-root [type=text]::-webkit-datetime-edit-minute-field,.yst-root [type=text]::-webkit-datetime-edit-month-field,.yst-root [type=text]::-webkit-datetime-edit-second-field,.yst-root [type=text]::-webkit-datetime-edit-year-field,.yst-root [type=time]::-webkit-datetime-edit,.yst-root [type=time]::-webkit-datetime-edit-day-field,.yst-root [type=time]::-webkit-datetime-edit-hour-field,.yst-root [type=time]::-webkit-datetime-edit-meridiem-field,.yst-root [type=time]::-webkit-datetime-edit-millisecond-field,.yst-root [type=time]::-webkit-datetime-edit-minute-field,.yst-root [type=time]::-webkit-datetime-edit-month-field,.yst-root [type=time]::-webkit-datetime-edit-second-field,.yst-root [type=time]::-webkit-datetime-edit-year-field,.yst-root [type=url]::-webkit-datetime-edit,.yst-root [type=url]::-webkit-datetime-edit-day-field,.yst-root [type=url]::-webkit-datetime-edit-hour-field,.yst-root [type=url]::-webkit-datetime-edit-meridiem-field,.yst-root [type=url]::-webkit-datetime-edit-millisecond-field,.yst-root [type=url]::-webkit-datetime-edit-minute-field,.yst-root [type=url]::-webkit-datetime-edit-month-field,.yst-root [type=url]::-webkit-datetime-edit-second-field,.yst-root [type=url]::-webkit-datetime-edit-year-field,.yst-root [type=week]::-webkit-datetime-edit,.yst-root [type=week]::-webkit-datetime-edit-day-field,.yst-root [type=week]::-webkit-datetime-edit-hour-field,.yst-root [type=week]::-webkit-datetime-edit-meridiem-field,.yst-root [type=week]::-webkit-datetime-edit-millisecond-field,.yst-root [type=week]::-webkit-datetime-edit-minute-field,.yst-root [type=week]::-webkit-datetime-edit-month-field,.yst-root [type=week]::-webkit-datetime-edit-second-field,.yst-root [type=week]::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}.yst-root textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root select{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:left .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-left:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.yst-root select[multiple]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select[multiple]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:0;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=checkbox]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:checked,.yst-root [type=checkbox]:checked:focus,.yst-root [type=checkbox]:checked:hover,.yst-root [type=checkbox]:indeterminate{background-color:currentColor;border-color:#0000}.yst-root [type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:indeterminate:focus,.yst-root [type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}.yst-root [type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:100%;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=radio]:checked,.yst-root [type=radio]:checked:focus,.yst-root [type=radio]:checked:hover{background-color:currentColor;border-color:#0000}.yst-root{--tw-text-opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:rgb(71 85 105/var(--tw-text-opacity));font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.8125rem;font-weight:400;line-height:1.5}.yst-root a{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root a:visited{color:#a61e69}.yst-root a:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root a:hover:visited{color:#b94986}.yst-root a:focus{--tw-text-opacity:1;border-radius:.125rem;color:rgb(99 102 241/var(--tw-text-opacity));outline-color:#4f46e5;outline-offset:1px;outline-style:solid}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder,.yst-root textarea::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root svg path{stroke-width:inherit}.yst-root .yst-radio__input,.yst-root a:focus{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-radio__input{transition-property:none}.yst-root .yst-radio__input:checked:before{content:var(--tw-content);display:none}.yst-root .yst-modal{z-index:100000!important}.yst-root dd,.yst-root li{margin-bottom:0}.yst-root input[type=date],.yst-root input[type=datetime-local],.yst-root input[type=datetime],.yst-root input[type=email],.yst-root input[type=month],.yst-root input[type=number],.yst-root input[type=password],.yst-root input[type=search],.yst-root input[type=tel],.yst-root input[type=text],.yst-root input[type=time],.yst-root input[type=url],.yst-root input[type=week]{min-height:0}.yst-root input[type=checkbox]{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important;min-height:0!important;min-width:0!important;transition-property:none!important}.yst-root input[type=checkbox]:before{--tw-content:none!important;content:var(--tw-content)!important}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.yst-root .yst-alert{border-radius:.375rem;display:flex;gap:.75rem;padding:1rem}.yst-root .yst-alert--info{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.yst-root .yst-alert--info .yst-alert__message{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.yst-root .yst-alert--warning{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.yst-root .yst-alert--warning .yst-alert__message{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.yst-root .yst-alert--success{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.yst-root .yst-alert--success .yst-alert__message{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.yst-root .yst-alert--error{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.yst-root .yst-alert--error .yst-alert__message{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.yst-root .yst-alert__icon{flex-grow:0;flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-autocomplete{position:relative}.yst-root .yst-autocomplete--error .yst-autocomplete__button{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.yst-root .yst-autocomplete--error .yst-autocomplete__button:focus{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity));border-color:rgb(239 68 68/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete--error .yst-autocomplete__input::placeholder{--tw-placeholder-opacity:1;color:rgb(252 165 165/var(--tw-placeholder-opacity))}.yst-root .yst-autocomplete--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-autocomplete--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;padding-right:.75rem;padding-left:.75rem;width:100%}.yst-root .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;left:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-autocomplete__input{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem 0 .5rem 2.5rem;width:100%}.yst-root .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:20}.yst-root .yst-autocomplete__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-autocomplete__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-autocomplete__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-autocomplete__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-badge{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(219 234 254/var(--tw-bg-opacity));border-radius:9999px;color:rgb(30 64 175/var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;line-height:1.25;padding:.125rem .5rem;vertical-align:middle;white-space:nowrap}.yst-root .yst-badge--info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity));color:rgb(30 58 138/var(--tw-text-opacity))}.yst-root .yst-badge--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-badge--plain{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(15 23 42/var(--tw-text-opacity))}.yst-root .yst-badge--small{font-size:.675rem}.yst-root .yst-badge--large{font-size:1rem;padding-right:.75rem;padding-left:.75rem}.yst-root .yst-button{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:#0000;align-items:center;border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;justify-content:center;line-height:1.25rem;padding:.5rem .75rem;text-align:center;-webkit-text-decoration-line:none;text-decoration-line:none}.yst-root .yst-button:focus{outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root a.yst-button:focus{border-radius:.375rem}.yst-root .yst-button--primary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:#0000;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:visited{color:#fff}.yst-root .yst-button--primary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(143 15 87/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:hover:visited{color:#fff}.yst-root .yst-button--primary:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--secondary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:visited{color:#1e293b}.yst-root .yst-button--secondary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:hover:visited{color:#1e293b}.yst-root .yst-button--secondary:focus{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--tertiary{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:initial;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:visited{color:#83084e}.yst-root .yst-button--tertiary:hover{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:hover:visited{color:#83084e}.yst-root .yst-button--tertiary:focus{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--error{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity));border-color:#0000;color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:visited{color:#fff}.yst-root .yst-button--error:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:hover:visited{color:#fff}.yst-root .yst-button--error:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#dc2626}.yst-root .yst-button--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity));border-color:#0000;color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:visited{color:#78350f}.yst-root .yst-button--upsell:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:hover:visited{color:#78350f}.yst-root .yst-button--upsell:focus{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity));outline-color:#fbbf24}.yst-root .yst-button--large{font-size:.875rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-button--extra-large{font-size:1rem;line-height:1.5rem;padding:.625rem .875rem}.yst-root .yst-button--small{font-size:.75rem;line-height:1rem;padding:.375rem .625rem}.yst-root .yst-button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-button--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-checkbox{align-items:center;display:flex}.yst-root .yst-checkbox--disabled .yst-checkbox__input,.yst-root .yst-checkbox--disabled .yst-checkbox__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.25rem;color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-checkbox__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-checkbox__label{margin-right:.75rem}.yst-root .yst-code{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(15 23 42/var(--tw-text-opacity));display:inline-block;font-size:.75rem;line-height:1.25;margin:0;padding:.25rem}.yst-root .yst-code--block{display:block;margin-bottom:.5rem;margin-top:.5rem;max-width:100%;overflow-x:auto;padding:.25rem .5rem;white-space:nowrap}.yst-root .yst-file-input{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border:2px dashed rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;padding:1.25rem 1.5rem 1.5rem;text-align:center;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:100%}.yst-root .yst-file-input.yst-is-drag-over{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 243 247/var(--tw-bg-opacity));border-color:rgb(205 130 171/var(--tw-border-opacity))}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__content{pointer-events:none}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__icon{--tw-translate-y:-0.5rem;--tw-text-opacity:1;color:rgb(185 73 134/var(--tw-text-opacity));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-file-input.yst-is-disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-file-input.yst-is-disabled .yst-file-input__select-label{cursor:not-allowed}.yst-root .yst-file-input__content{align-items:center;display:inline-flex;flex-direction:column;max-width:20rem}.yst-root .yst-file-input__content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-input__content{text-align:center}.yst-root .yst-file-input__icon{stroke-width:1;--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:3rem;margin-right:auto;margin-left:auto;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:3rem}.yst-root .yst-file-input__icon>path{stroke-width:1}.yst-root .yst-file-input__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-file-input__input:focus+.yst-file-input__select-label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-input__labels{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:inline-block;font-weight:400}.yst-root .yst-file-input__select-label{border-radius:.375rem;font-weight:500}[dir=rtl] .yst-root .yst-file-input__labels{flex-direction:row-reverse}.yst-root .yst-label{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;font-weight:500}.yst-root .yst-link{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));cursor:pointer;-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root .yst-link:visited{color:#a61e69}.yst-root .yst-link:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root .yst-link:hover:visited{color:#b94986}.yst-root .yst-link:focus{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity));--tw-ring-offset-width:1px;--tw-ring-offset-color:#0000;border-radius:.125rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(99 102 241/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-link--primary{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus,.yst-root .yst-link--primary:hover{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(154 22 96/var(--tw-ring-opacity))}.yst-root .yst-link--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-link--error:focus,.yst-root .yst-link--error:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-link--error:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.yst-root .yst-paper{--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:flex;flex-direction:column}.yst-root .yst-paper__header{border-bottom-width:1px;padding:2rem}.yst-root .yst-paper__content{flex-grow:1;padding:2rem}.yst-root .yst-progress-bar{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;display:block;overflow:hidden;width:100%}.yst-root .yst-progress-bar__progress{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));border-radius:9999px;display:block;height:.375rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}.yst-root .yst-radio{align-items:center;display:flex}.yst-root .yst-radio--disabled .yst-radio__check,.yst-root .yst-radio--disabled .yst-radio__input,.yst-root .yst-radio--disabled .yst-radio__label{cursor:not-allowed;opacity:.5}.yst-root .yst-radio--disabled .yst-radio__check:focus,.yst-root .yst-radio--disabled .yst-radio__input:focus,.yst-root .yst-radio--disabled .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block{display:inline-flex}.yst-root .yst-radio--inline-block .yst-radio__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:#0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__check{visibility:visible}.yst-root .yst-radio--inline-block .yst-radio__input:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-offset-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__content{position:relative}.yst-root .yst-radio--inline-block .yst-radio__label{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer;display:flex;font-size:1rem;height:3.5rem;justify-content:center;margin-right:0;width:3.5rem}.yst-root .yst-radio--inline-block .yst-radio__label:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.yst-root .yst-radio--inline-block .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio--inline-block .yst-radio__check{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity));height:1.25rem;position:absolute;left:.125rem;top:.125rem;visibility:hidden;width:1.25rem}.yst-root .yst-radio__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-radio__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-radio__label{margin-right:.75rem}.yst-root .yst-select{position:relative}.yst-root .yst-select--disabled .yst-select__button,.yst-root .yst-select--disabled .yst-select__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select__button{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;line-height:1.5rem;padding:.5rem .75rem;position:relative;text-align:right;width:100%}.yst-root .yst-select__button:focus{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;left:.625rem;top:.625rem;width:1.25rem}.yst-root .yst-select__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:10}.yst-root .yst-select__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-select__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-select__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(154 22 96/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__button-label,.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-select__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-skeleton-loader{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;display:block;height:auto;overflow:hidden;position:relative;width:-moz-fit-content;width:fit-content}.yst-root .yst-skeleton-loader:after{--tw-translate-x:-100%;animation:wave 2.5s linear .5s infinite;background:linear-gradient(-90deg,#0000,#00000012,#0000);bottom:0;content:"";right:0;position:absolute;left:0;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes wave{0%{transform:translateX(100%)}50%,to{transform:translateX(-100%)}}.yst-root .yst-tag-input{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(30 41 59/var(--tw-text-opacity));display:flex;flex-wrap:wrap;font-size:.8125rem;gap:.375rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-tag-input::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root .yst-tag-input{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-tag-input,.yst-root .yst-tag-input:focus-within{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-tag-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-input--disabled:focus-within{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:rgb(203 213 225/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus,.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(148 163 184/var(--tw-text-opacity))}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__input{cursor:not-allowed}.yst-root .yst-tag-input__tag{cursor:pointer;gap:.125rem;min-height:20px;padding-inline-end:.125rem}.yst-root .yst-tag-input__tag:hover{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input__tag:focus,.yst-root .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__remove-tag{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1rem;justify-content:center;width:1rem}.yst-root .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__input{border-style:none;display:inline-flex;flex:1 1 0%;font-size:.8125rem;margin:0;padding:0}.yst-root .yst-tag-input__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-text-input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-text-input--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-text-input--read-only{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;background-color:rgb(248 250 252/var(--tw-bg-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(100 116 139/var(--tw-text-opacity));cursor:default}.yst-root .yst-textarea{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-textarea:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-textarea--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-textarea--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-title{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity));font-weight:500;line-height:1.25}.yst-root .yst-title--1{font-size:1.5rem}.yst-root .yst-title--2{font-size:1.125rem}.yst-root .yst-title--3{font-size:.875rem}.yst-root .yst-title--4{font-size:1rem}.yst-root .yst-title--5{font-size:.8125rem}.yst-root .yst-toast{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);max-width:100%;overflow-y:auto;padding:1rem;pointer-events:auto;width:20rem;z-index:20}.yst-root .yst-toast--large{width:24rem}.yst-root .yst-toggle{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));border-color:#0000;border-radius:9999px;border-width:2px;cursor:pointer;display:inline-flex;flex-shrink:0;height:1.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2.75rem}.yst-root .yst-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-toggle--checked{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-toggle--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-toggle--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-toggle__handle{--tw-translate-x:0px;--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:9999px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;height:1.25rem;justify-content:center;pointer-events:none;position:relative;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1.25rem}.yst-root .yst-toggle__icon{stroke:currentColor;stroke-width:2;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-grow:0;flex-shrink:0;height:.625rem;transition-duration:.1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:.625rem}.yst-root .yst-toggle__icon--check{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-toggle__icon--x{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}[dir=rtl] .yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity));border-radius:.5rem;color:rgb(255 255 255/var(--tw-text-opacity));display:inline-block;font-size:.75rem;max-width:24rem;padding:.5rem .625rem;position:absolute;white-space:normal;width:max-content;z-index:10}.yst-root .yst-tooltip--top{--tw-translate-x:-50%;--tw-translate-y:-100%;right:50%;margin-top:-.75rem;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--top:before{--tw-translate-x:-50%;--tw-translate-y:0px;--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-right-color:#0000;border-left-color:#0000;border-top-color:rgb(31 41 55/var(--tw-border-opacity));border-width:8px;content:var(--tw-content);position:absolute}.yst-root .yst-tooltip--bottom,.yst-root .yst-tooltip--top:before{right:50%;top:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--bottom{--tw-translate-x:-50%;--tw-translate-y:-0px;margin-top:.75rem}.yst-root .yst-tooltip--bottom:before{--tw-translate-x:-50%;--tw-border-opacity:1;--tw-content:"";border-bottom-color:rgb(31 41 55/var(--tw-border-opacity));border-right-color:#0000;border-left-color:#0000;border-top-color:#0000;border-width:8px;bottom:100%;content:var(--tw-content);right:50%;position:absolute;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right{--tw-translate-x:-0px;right:100%;margin-right:.75rem}.yst-root .yst-tooltip--right,.yst-root .yst-tooltip--right:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-right-color:#0000;border-left-color:rgb(31 41 55/var(--tw-border-opacity));border-top-color:#0000;border-width:8px;content:var(--tw-content);position:absolute;left:100%}.yst-root .yst-tooltip--left{margin-left:.75rem;left:100%}.yst-root .yst-tooltip--left,.yst-root .yst-tooltip--left:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--left:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-right-color:rgb(31 41 55/var(--tw-border-opacity));border-left-color:#0000;border-top-color:#0000;border-width:8px;content:var(--tw-content);right:100%;position:absolute}.yst-root .yst-validation-icon{pointer-events:none}.yst-root .yst-validation-icon--success{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.yst-root .yst-validation-icon--info{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.yst-root .yst-validation-icon--warning{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.yst-root .yst-validation-icon--error{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-validation-input{position:relative}.yst-root .yst-validation-input--success .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--success .yst-validation-input__input:focus,.yst-root .yst-validation-input--success .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.yst-root .yst-validation-input--info .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--info .yst-validation-input__input:focus,.yst-root .yst-validation-input--info .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.yst-root .yst-validation-input--warning .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--warning .yst-validation-input__input:focus,.yst-root .yst-validation-input--warning .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.yst-root .yst-validation-input--error .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--error .yst-validation-input__input:focus,.yst-root .yst-validation-input--error .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.yst-root .yst-validation-input__input:focus,.yst-root .yst-validation-input__input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-validation-input__icon{height:1.25rem;position:absolute;left:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-validation-message a{color:inherit;font-weight:500}.yst-root .yst-validation-message a:visited:hover{color:inherit}.yst-root .yst-validation-message a:focus{--tw-ring-color:currentColor}.yst-root .yst-validation-message--success{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.yst-root .yst-validation-message--info{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.yst-root .yst-validation-message--warning{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.yst-root .yst-validation-message--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-autocomplete-field__description,.yst-root .yst-autocomplete-field__validation{margin-top:.5rem}.yst-root .yst-card{display:flex;flex-direction:column;position:relative}.yst-root .yst-card>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-card{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);overflow:hidden;padding:1.5rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-card__header{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 244 246/var(--tw-bg-opacity));display:flex;height:6rem;justify-content:center;margin-right:-1.5rem;margin-left:-1.5rem;margin-top:-1.5rem;padding:1.5rem;position:relative}.yst-root .yst-card__content{flex-grow:1}.yst-root .yst-card__footer{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity));border-top-width:1px;padding-top:1.5rem}.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__description,.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox-group__label{margin-bottom:.5rem}.yst-root .yst-checkbox-group__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-checkbox-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-feature-upsell{position:relative}.yst-root .yst-feature-upsell--default{--tw-grayscale:grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.yst-root .yst-feature-upsell--card{padding:1.5rem}.yst-root .yst-file-import>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-import__feedback{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding:1rem}.yst-root .yst-file-import__feedback-header{align-items:flex-start;display:flex}.yst-root .yst-file-import__feedback-header>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-left:calc(1rem*var(--tw-space-x-reverse))}.yst-root .yst-file-import__feedback-figure{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 229 237/var(--tw-bg-opacity));border-radius:9999px;display:flex;height:2rem;justify-content:center;width:2rem}.yst-root .yst-file-import__feedback-figure>svg{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity));height:1.25rem;width:1.25rem}.yst-root .yst-file-import__feedback-title{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:block;font-weight:500;margin-bottom:.125rem;overflow-wrap:break-word}.yst-root .yst-file-import__feedback-description{display:block;font-size:.75rem;font-weight:500}.yst-root .yst-file-import__abort-button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(241 245 249/var(--tw-bg-opacity));border-radius:9999px;color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1.25rem;justify-content:center;width:1.25rem}.yst-root .yst-file-import__abort-button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(71 85 105/var(--tw-text-opacity))}.yst-root .yst-file-import__abort-button:focus{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-import__abort-button>svg{height:.75rem;width:.75rem}.yst-root .yst-file-import__abort-button>svg>path{stroke-width:3}.yst-root .yst-modal{bottom:0;right:0;padding:1rem;position:fixed;left:0;top:0;z-index:10}@media (min-width:640px){.yst-root .yst-modal{padding:2rem}}@media (min-width:768px){.yst-root .yst-modal{padding:5rem}}.yst-root .yst-modal__layout{display:flex;min-height:100%}.yst-root .yst-modal--center .yst-modal__layout{align-items:center;justify-content:center}.yst-root .yst-modal--top-center .yst-modal__layout{align-items:flex-start;justify-content:center}.yst-root .yst-modal__overlay{--tw-bg-opacity:0.75;background-color:rgb(100 116 139/var(--tw-bg-opacity));bottom:0;right:0;position:fixed;left:0;top:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-modal__panel{--tw-bg-opacity:1;--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);max-width:36rem;overflow:hidden;padding:1.5rem;position:relative;width:100%}.yst-root .yst-modal__close{display:block;position:absolute;left:1rem;top:1rem}.yst-root .yst-modal__close-button{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(148 163 184/var(--tw-text-opacity));position:relative;z-index:10}.yst-root .yst-modal__close-button:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-modal__close-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-modal__container{display:flex;flex-direction:column;max-height:calc(100vh - 2rem)}@media (min-width:640px){.yst-root .yst-modal__container{max-height:calc(100vh - 4rem)}}@media (min-width:768px){.yst-root .yst-modal__container{max-height:calc(100vh - 10rem)}}.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 5rem)}@media (min-width:640px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 7rem)}}@media (min-width:768px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 13rem)}}.yst-root .yst-modal__container-footer,.yst-root .yst-modal__container-header{flex-shrink:0}.yst-root .yst-modal__container-content{overflow:auto}.yst-root .yst-modal__panel .yst-modal__container-content{margin-right:-1.5rem;margin-left:-1.5rem;padding-right:1.5rem;padding-left:1.5rem}.yst-root .yst-notifications{display:flex;flex-direction:column;max-height:calc(100vh - 4rem);max-width:calc(100vw - 4rem);pointer-events:none;position:fixed;width:100%;z-index:20}.yst-root .yst-notifications>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-notifications--bottom-center{align-items:center;bottom:2rem}.yst-root .yst-notifications--bottom-left{bottom:2rem;right:2rem}.yst-root .yst-notifications--top-center{align-items:center;top:2rem}.yst-root .yst-notification--large{width:24rem}.yst-root .yst-notification__icon{height:1.25rem;width:1.25rem}.yst-root .yst-pagination{display:inline-flex;isolation:isolate}.yst-root .yst-pagination>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-left:calc(-1px*var(--tw-space-x-reverse))}.yst-root .yst-pagination{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-pagination-display__text{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));font-weight:400;padding:.5rem .75rem}.yst-root .yst-pagination-display__current-text{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity));font-weight:600}.yst-root .yst-pagination-display__truncated{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));align-self:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;font-size:.8125rem;font-weight:600;padding:.5rem 1rem}.yst-root .yst-pagination__button{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;padding:.5rem;position:relative}.yst-root .yst-pagination__button:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.yst-root .yst-pagination__button:focus{outline-color:#a61e69;outline-offset:0;z-index:20}.yst-root .yst-pagination__button--active{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:rgb(166 30 105/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(255 255 255/var(--tw-text-opacity));font-size:.8125rem;font-weight:600;z-index:10}.yst-root .yst-pagination__button--active:hover{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-pagination__button--active:focus{z-index:20}.yst-root .yst-pagination__button--active:focus-visible{border-radius:.125rem;outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root .yst-pagination__button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-pagination__button--disabled:hover{background-color:initial}.yst-root .yst-pagination__button--disabled:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio-group--inline-block .yst-radio-group__options{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.yst-root .yst-radio-group--disabled .yst-radio-group__description,.yst-root .yst-radio-group--disabled .yst-radio-group__label{opacity:.5}.yst-root .yst-radio-group--disabled .yst-radio-group__label{cursor:not-allowed}.yst-root .yst-radio-group__label{margin-bottom:.5rem}.yst-root .yst-radio-group__options{display:flex;flex-direction:column;gap:.5rem}.yst-root .yst-radio-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-select-field--disabled .yst-select-field__description,.yst-root .yst-select-field--disabled .yst-select-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select-field__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-select-field__description,.yst-root .yst-select-field__validation{margin-top:.5rem}.yst-root .yst-mobile-navigation__top{position:sticky;top:0;width:100%;z-index:50}.yst-root .yst-mobile-navigation__dialog{bottom:0;display:flex;right:0;position:fixed;left:0;top:0;z-index:50}.yst-root .yst-tag-field--disabled .yst-tag-field__description,.yst-root .yst-tag-field--disabled .yst-tag-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-field__description,.yst-root .yst-tag-field__validation{margin-top:.5rem}.yst-root .yst-text-field--disabled .yst-text-field__description,.yst-root .yst-text-field--disabled .yst-text-field__label{opacity:.5}.yst-root .yst-text-field--disabled .yst-text-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-text-field__label{cursor:default}.yst-root .yst-text-field__description,.yst-root .yst-text-field__validation{margin-top:.5rem}.yst-root .yst-textarea-field--disabled .yst-textarea-field__description,.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{opacity:.5}.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-textarea-field__label{cursor:default}.yst-root .yst-textarea-field__description,.yst-root .yst-textarea-field__validation{margin-top:.5rem}.yst-root .yst-toggle-field{display:flex;flex-direction:column;gap:.25rem}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{opacity:.5}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{cursor:not-allowed}.yst-root .yst-toggle-field__header{align-items:center;display:flex;flex-direction:row;gap:1.5rem;justify-content:space-between}.yst-root .yst-toggle-field__label-wrapper{align-items:center;display:flex;gap:.25rem}.yst-root .yst-toggle-field__description{margin-left:4.25rem}.yst-sr-only{clip:rect(0,0,0,0)!important;border-width:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.yst-pointer-events-none{pointer-events:none!important}.yst-invisible{visibility:hidden!important}.yst-fixed{position:fixed!important}.yst-absolute{position:absolute!important}.yst-relative{position:relative!important}.yst-inset-0{bottom:0!important;top:0!important}.yst-inset-0,.yst-inset-x-0{right:0!important;left:0!important}.yst-top-0{top:0!important}.yst-right-0{left:0!important}.yst--left-3{right:-.75rem!important}.yst-right-2{left:.5rem!important}.yst-left-0{right:0!important}.yst-z-30{z-index:30!important}.yst-z-40{z-index:40!important}.yst-z-10{z-index:10!important}.yst-m-0{margin:0!important}.yst--mx-6{margin-right:-1.5rem!important;margin-left:-1.5rem!important}.yst-mx-auto{margin-right:auto!important;margin-left:auto!important}.yst-my-0\.5{margin-bottom:.125rem!important;margin-top:.125rem!important}.yst-my-0{margin-bottom:0!important;margin-top:0!important}.yst-mx-\[calc\(50\%-50vw\)\]{margin-right:calc(50% - 50vw)!important;margin-left:calc(50% - 50vw)!important}.yst-mx-1\.5{margin-right:.375rem!important;margin-left:.375rem!important}.yst-mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.yst--ml-1{margin-right:-.25rem!important}.yst-mt-6{margin-top:1.5rem!important}.yst-mt-1\.5{margin-top:.375rem!important}.yst-mt-1{margin-top:.25rem!important}.yst-ml-8{margin-right:2rem!important}.yst--mr-14{margin-left:-3.5rem!important}.yst-mb-2{margin-bottom:.5rem!important}.yst-mr-4{margin-left:1rem!important}.yst-mr-2{margin-left:.5rem!important}.yst-mb-px{margin-bottom:1px!important}.yst-ml-4{margin-right:1rem!important}.yst-mt-4{margin-top:1rem!important}.yst-mr-1{margin-left:.25rem!important}.yst-mb-8{margin-bottom:2rem!important}.yst-ml-3{margin-right:.75rem!important}.yst-mt-8{margin-top:2rem!important}.yst-mb-0{margin-bottom:0!important}.yst-mt-2{margin-top:.5rem!important}.yst-ml-1{margin-right:.25rem!important}.yst-mt-3{margin-top:.75rem!important}.yst-mr-1\.5{margin-left:.375rem!important}.yst-mb-4{margin-bottom:1rem!important}.yst-mt-2\.5{margin-top:.625rem!important}.yst-mt-auto{margin-top:auto!important}.yst--mt-10{margin-top:-2.5rem!important}.yst-mr-\[calc\(2\.5rem-1px\)\]{margin-left:calc(2.5rem - 1px)!important}.yst-mb-6{margin-bottom:1.5rem!important}.yst-mb-1{margin-bottom:.25rem!important}.yst--ml-3{margin-right:-.75rem!important}.yst-mb-3{margin-bottom:.75rem!important}.yst-mr-5{margin-left:1.25rem!important}.yst-mr-3{margin-left:.75rem!important}.yst-ml-2{margin-right:.5rem!important}.yst-block{display:block!important}.yst-inline-block{display:inline-block!important}.yst-flex{display:flex!important}.yst-inline-flex{display:inline-flex!important}.yst-hidden{display:none!important}.yst-h-5{height:1.25rem!important}.yst-h-6{height:1.5rem!important}.yst-h-4{height:1rem!important}.yst-h-12{height:3rem!important}.yst-h-0{height:0!important}.yst-h-full{height:100%!important}.yst-h-16{height:4rem!important}.yst-h-7{height:1.75rem!important}.yst-h-3{height:.75rem!important}.yst-h-8{height:2rem!important}.yst-h-2\.5{height:.625rem!important}.yst-h-2{height:.5rem!important}.yst-h-10{height:2.5rem!important}.yst-h-\[273px\]{height:273px!important}.yst-h-\[265px\]{height:265px!important}.yst-h-auto{height:auto!important}.yst-max-h-\[370px\]{max-height:370px!important}.yst-w-5{width:1.25rem!important}.yst-w-6{width:1.5rem!important}.yst-w-0{width:0!important}.yst-w-full{width:100%!important}.yst-w-4{width:1rem!important}.yst-w-12{width:3rem!important}.yst-w-2{width:.5rem!important}.yst-w-3{width:.75rem!important}.yst-w-8{width:2rem!important}.yst-w-7{width:1.75rem!important}.yst-w-1\/3{width:33.333333%!important}.yst-w-10\/12{width:83.333333%!important}.yst-w-9\/12{width:75%!important}.yst-w-7\/12{width:58.333333%!important}.yst-w-11\/12{width:91.666667%!important}.yst-w-8\/12{width:66.666667%!important}.yst-w-\[527px\]{width:527px!important}.yst-w-\[507px\]{width:507px!important}.yst-min-w-full{min-width:100%!important}.yst-max-w-xs{max-width:20rem!important}.yst-max-w-lg{max-width:32rem!important}.yst-max-w-xl{max-width:36rem!important}.yst-max-w-3xl{max-width:48rem!important}.yst-max-w-\[400px\]{max-width:400px!important}.yst-flex-1{flex:1 1 0%!important}.yst-flex-shrink-0,.yst-shrink-0{flex-shrink:0!important}.yst-flex-grow,.yst-grow{flex-grow:1!important}.yst-translate-y-4{--tw-translate-y:1rem!important}.yst-translate-y-0,.yst-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-translate-y-0{--tw-translate-y:0px!important}.yst-translate-y-full{--tw-translate-y:100%!important}.yst--translate-y-full,.yst-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst--translate-y-full{--tw-translate-y:-100%!important}.yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.yst-scale-100,.yst-scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important}.yst-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@keyframes yst-spin{to{transform:rotate(-1turn)}}.yst-animate-spin{animation:yst-spin 1s linear infinite!important}.yst-cursor-wait{cursor:wait!important}.yst-cursor-default{cursor:default!important}.yst-list-disc{list-style-type:disc!important}.yst-flex-row{flex-direction:row!important}.yst-flex-col{flex-direction:column!important}.yst-flex-wrap{flex-wrap:wrap!important}.yst-place-content-end{place-content:end!important}.yst-items-start{align-items:flex-start!important}.yst-items-center{align-items:center!important}.yst-justify-center{justify-content:center!important}.yst-justify-between{justify-content:space-between!important}.yst-gap-2{gap:.5rem!important}.yst-gap-3{gap:.75rem!important}.yst-gap-1{gap:.25rem!important}.yst-gap-x-3{column-gap:.75rem!important}.yst-gap-y-1{row-gap:.25rem!important}.yst-gap-x-4{column-gap:1rem!important}.yst-space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(2rem*var(--tw-space-y-reverse))!important;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.25rem*var(--tw-space-y-reverse))!important;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-right:calc(2rem*(1 - var(--tw-space-x-reverse)))!important;margin-left:calc(2rem*var(--tw-space-x-reverse))!important}.yst-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1rem*var(--tw-space-y-reverse))!important;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-right:calc(.75rem*(1 - var(--tw-space-x-reverse)))!important;margin-left:calc(.75rem*var(--tw-space-x-reverse))!important}.yst--space-y-\[1px\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(-1px*var(--tw-space-y-reverse))!important;margin-top:calc(-1px*(1 - var(--tw-space-y-reverse)))!important}.yst-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.yst-divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(229 231 235/var(--tw-divide-opacity))!important}.yst-divide-slate-300>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(203 213 225/var(--tw-divide-opacity))!important}.yst-overflow-hidden{overflow:hidden!important}.yst-overflow-y-auto{overflow-y:auto!important}.yst-rounded-md{border-radius:.375rem!important}.yst-rounded-full{border-radius:9999px!important}.yst-rounded-lg{border-radius:.5rem!important}.yst-rounded-3xl{border-radius:1.5rem!important}.yst-rounded-none{border-radius:0!important}.yst-rounded-l-md{border-bottom-right-radius:.375rem!important;border-top-right-radius:.375rem!important}.yst-rounded-r-md{border-bottom-left-radius:.375rem!important;border-top-left-radius:.375rem!important}.yst-rounded-t-\[14px\]{border-top-right-radius:14px!important;border-top-left-radius:14px!important}.yst-border{border-width:1px!important}.yst-border-b{border-bottom-width:1px!important}.yst-border-r{border-left-width:1px!important}.yst-border-l{border-right-width:1px!important}.yst-border-dashed{border-style:dashed!important}.yst-border-none{border-style:none!important}.yst-border-slate-200{--tw-border-opacity:1!important;border-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-border-gray-200{--tw-border-opacity:1!important;border-color:rgb(229 231 235/var(--tw-border-opacity))!important}.yst-border-primary-500{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.yst-border-r-slate-200{--tw-border-opacity:1!important;border-left-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-bg-slate-600{--tw-bg-opacity:1!important;background-color:rgb(71 85 105/var(--tw-bg-opacity))!important}.yst-bg-slate-100{--tw-bg-opacity:1!important;background-color:rgb(241 245 249/var(--tw-bg-opacity))!important}.yst-bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.yst-bg-slate-200{--tw-bg-opacity:1!important;background-color:rgb(226 232 240/var(--tw-bg-opacity))!important}.yst-bg-slate-50{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.yst-bg-gray-100{--tw-bg-opacity:1!important;background-color:rgb(243 244 246/var(--tw-bg-opacity))!important}.yst-bg-red-100{--tw-bg-opacity:1!important;background-color:rgb(254 226 226/var(--tw-bg-opacity))!important}.yst-bg-opacity-75{--tw-bg-opacity:0.75!important}.yst-bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))!important}.yst-from-slate-50{--tw-gradient-from:#f8fafc!important;--tw-gradient-to:#f8fafc00!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.yst-stroke-3{stroke-width:3px!important}.yst-p-1{padding:.25rem!important}.yst-p-0{padding:0!important}.yst-p-2{padding:.5rem!important}.yst-p-4{padding:1rem!important}.yst-p-10{padding:2.5rem!important}.yst-px-4{padding-right:1rem!important;padding-left:1rem!important}.yst-px-3{padding-right:.75rem!important;padding-left:.75rem!important}.yst-py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.yst-py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.yst-px-2{padding-right:.5rem!important;padding-left:.5rem!important}.yst-py-4{padding-bottom:1rem!important;padding-top:1rem!important}.yst-py-1\.5{padding-bottom:.375rem!important;padding-top:.375rem!important}.yst-py-1{padding-top:.25rem!important}.yst-pb-1,.yst-py-1{padding-bottom:.25rem!important}.yst-pt-1{padding-top:.25rem!important}.yst-pb-10{padding-bottom:2.5rem!important}.yst-pt-6{padding-top:1.5rem!important}.yst-pt-\[56\.25\%\]{padding-top:56.25%!important}.yst-text-left{text-align:right!important}.yst-text-center{text-align:center!important}.yst-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.yst-text-sm{font-size:.8125rem!important}.yst-text-\[11px\]{font-size:11px!important}.yst-text-xs{font-size:.75rem!important}.yst-text-lg{font-size:1.125rem!important}.yst-font-medium{font-weight:500!important}.yst-font-semibold{font-weight:600!important}.yst-font-normal{font-weight:400!important}.yst-uppercase{text-transform:uppercase!important}.yst-text-slate-800{--tw-text-opacity:1!important;color:rgb(30 41 59/var(--tw-text-opacity))!important}.yst-text-slate-400{--tw-text-opacity:1!important;color:rgb(148 163 184/var(--tw-text-opacity))!important}.yst-text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.yst-text-slate-900{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.yst-text-slate-600{--tw-text-opacity:1!important;color:rgb(71 85 105/var(--tw-text-opacity))!important}.yst-text-primary-500{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.yst-text-gray-400{--tw-text-opacity:1!important;color:rgb(156 163 175/var(--tw-text-opacity))!important}.yst-text-gray-700{--tw-text-opacity:1!important;color:rgb(55 65 81/var(--tw-text-opacity))!important}.yst-text-red-600{--tw-text-opacity:1!important;color:rgb(220 38 38/var(--tw-text-opacity))!important}.yst-text-slate-700{--tw-text-opacity:1!important;color:rgb(51 65 85/var(--tw-text-opacity))!important}.yst-text-gray-200{--tw-text-opacity:1!important;color:rgb(229 231 235/var(--tw-text-opacity))!important}.yst-no-underline{-webkit-text-decoration-line:none!important;text-decoration-line:none!important}.yst-opacity-0{opacity:0!important}.yst-opacity-100{opacity:1!important}.yst-opacity-25{opacity:.25!important}.yst-opacity-75{opacity:.75!important}.yst-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important}.yst-shadow,.yst-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important}.yst-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow-amber-700\/30{--tw-shadow-color:#b453094d!important;--tw-shadow:var(--tw-shadow-colored)!important}.yst-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.yst-ring-black{--tw-ring-opacity:1!important;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))!important}.yst-ring-gray-200{--tw-ring-opacity:1!important;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))!important}.yst-ring-opacity-5{--tw-ring-opacity:0.05!important}.yst-drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f)!important}.yst-drop-shadow-md,.yst-grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.yst-grayscale{--tw-grayscale:grayscale(100%)!important}.yst-transition-opacity{transition-duration:.15s!important;transition-property:opacity!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-all{transition-duration:.15s!important;transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-delay-200{transition-delay:.2s!important}.yst-duration-1000{transition-duration:1s!important}.yst-duration-200{transition-duration:.2s!important}.yst-duration-300{transition-duration:.3s!important}.yst-duration-100{transition-duration:.1s!important}.yst-duration-75{transition-duration:75ms!important}.yst-duration-150{transition-duration:.15s!important}.yst-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.yst-ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}.first\:yst-rounded-t-md:first-child{border-top-right-radius:.375rem!important;border-top-left-radius:.375rem!important}.last\:yst-mr-0:last-child{margin-left:0!important}.last\:yst-rounded-b-md:last-child{border-bottom-right-radius:.375rem!important;border-bottom-left-radius:.375rem!important}.odd\:yst-bg-white:nth-child(odd){--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.even\:yst-bg-slate-50:nth-child(2n),.hover\:yst-bg-slate-50:hover{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.hover\:yst-text-slate-900:hover{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.hover\:yst-text-slate-500:hover{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.focus\:yst-outline-none:focus{outline:2px solid #0000!important;outline-offset:2px!important}.focus\:yst-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-1:focus,.focus\:yst-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.focus\:yst-ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-inset:focus{--tw-ring-inset:inset!important}.focus\:yst-ring-primary-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important}.focus\:yst-ring-offset-1:focus{--tw-ring-offset-width:1px!important}.focus\:yst-ring-offset-2:focus{--tw-ring-offset-width:2px!important}.focus\:yst-ring-offset-transparent:focus{--tw-ring-offset-color:#0000!important}.yst-group:hover .group-hover\:yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}[dir=rtl] .rtl\:yst-rotate-180{--tw-rotate:180deg!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media (min-width:640px){.sm\:yst-inline{display:inline!important}.sm\:yst-flex{display:flex!important}.sm\:yst-hidden{display:none!important}.sm\:yst-w-auto{width:auto!important}.sm\:yst-translate-y-0{--tw-translate-y:0px!important}.sm\:yst-scale-95,.sm\:yst-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.sm\:yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-flex-row-reverse{flex-direction:row-reverse!important}.sm\:yst-justify-end{justify-content:flex-end!important}.sm\:yst-justify-between{justify-content:space-between!important}.sm\:yst-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-right:calc(.5rem*(1 - var(--tw-space-x-reverse)))!important;margin-left:calc(.5rem*var(--tw-space-x-reverse))!important}.sm\:yst-pt-2{padding-top:.5rem!important}}@media (min-width:1024px){.lg\:yst-mb-2{margin-bottom:.5rem!important}.lg\:yst-flex{display:flex!important}.lg\:yst-pt-0{padding-top:0!important}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290.css new file mode 100644 index 00000000..10b00180 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-tailwind-2290.css @@ -0,0 +1 @@ +.yst-root *,.yst-root :after,.yst-root :before{border:0 solid #e5e7eb;box-sizing:border-box}.yst-root :after,.yst-root :before{--tw-content:""}.yst-root{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;margin:0;tab-size:4}.yst-root hr{border-top-width:1px;color:inherit;height:0}.yst-root abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6{font-size:inherit;font-weight:inherit}.yst-root a{color:inherit;text-decoration:inherit}.yst-root b,.yst-root strong{font-weight:bolder}.yst-root code,.yst-root kbd,.yst-root pre,.yst-root samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}.yst-root small{font-size:80%}.yst-root sub,.yst-root sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}.yst-root sub{bottom:-.25em}.yst-root sup{top:-.5em}.yst-root table{border-collapse:collapse;border-color:inherit;text-indent:0}.yst-root button,.yst-root input,.yst-root optgroup,.yst-root select,.yst-root textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}.yst-root button,.yst-root select{text-transform:none}.yst-root [type=button],.yst-root [type=reset],.yst-root [type=submit],.yst-root button{-webkit-appearance:button;background-color:initial;background-image:none}.yst-root :-moz-focusring{outline:auto}.yst-root :-moz-ui-invalid{box-shadow:none}.yst-root progress{vertical-align:initial}.yst-root ::-webkit-inner-spin-button,.yst-root ::-webkit-outer-spin-button{height:auto}.yst-root [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.yst-root ::-webkit-search-decoration{-webkit-appearance:none}.yst-root ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.yst-root summary{display:list-item}.yst-root blockquote,.yst-root dd,.yst-root dl,.yst-root figure,.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6,.yst-root hr,.yst-root p,.yst-root pre{margin:0}.yst-root fieldset{margin:0;padding:0}.yst-root legend{padding:0}.yst-root menu,.yst-root ol,.yst-root ul{list-style:none;margin:0;padding:0}.yst-root textarea{resize:vertical}.yst-root input::placeholder,.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root [role=button],.yst-root button{cursor:pointer}.yst-root :disabled{cursor:default}.yst-root audio,.yst-root canvas,.yst-root embed,.yst-root iframe,.yst-root img,.yst-root object,.yst-root svg,.yst-root video{display:block;vertical-align:middle}.yst-root img,.yst-root video{height:auto;max-width:100%}.yst-root [type=date],.yst-root [type=datetime-local],.yst-root [type=email],.yst-root [type=month],.yst-root [type=number],.yst-root [type=password],.yst-root [type=search],.yst-root [type=tel],.yst-root [type=text],.yst-root [type=time],.yst-root [type=url],.yst-root [type=week]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root [type=date]:focus,.yst-root [type=datetime-local]:focus,.yst-root [type=email]:focus,.yst-root [type=month]:focus,.yst-root [type=number]:focus,.yst-root [type=password]:focus,.yst-root [type=search]:focus,.yst-root [type=tel]:focus,.yst-root [type=text]:focus,.yst-root [type=time]:focus,.yst-root [type=url]:focus,.yst-root [type=week]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder{color:#6b7280;opacity:1}.yst-root [type=date]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=datetime-local]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=email]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=month]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=number]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=password]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=search]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=tel]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=text]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=time]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=url]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=week]::-webkit-datetime-edit-fields-wrapper{padding:0}.yst-root [type=date]::-webkit-date-and-time-value,.yst-root [type=datetime-local]::-webkit-date-and-time-value,.yst-root [type=email]::-webkit-date-and-time-value,.yst-root [type=month]::-webkit-date-and-time-value,.yst-root [type=number]::-webkit-date-and-time-value,.yst-root [type=password]::-webkit-date-and-time-value,.yst-root [type=search]::-webkit-date-and-time-value,.yst-root [type=tel]::-webkit-date-and-time-value,.yst-root [type=text]::-webkit-date-and-time-value,.yst-root [type=time]::-webkit-date-and-time-value,.yst-root [type=url]::-webkit-date-and-time-value,.yst-root [type=week]::-webkit-date-and-time-value{min-height:1.5em}.yst-root [type=date]::-webkit-datetime-edit,.yst-root [type=date]::-webkit-datetime-edit-day-field,.yst-root [type=date]::-webkit-datetime-edit-hour-field,.yst-root [type=date]::-webkit-datetime-edit-meridiem-field,.yst-root [type=date]::-webkit-datetime-edit-millisecond-field,.yst-root [type=date]::-webkit-datetime-edit-minute-field,.yst-root [type=date]::-webkit-datetime-edit-month-field,.yst-root [type=date]::-webkit-datetime-edit-second-field,.yst-root [type=date]::-webkit-datetime-edit-year-field,.yst-root [type=datetime-local]::-webkit-datetime-edit,.yst-root [type=datetime-local]::-webkit-datetime-edit-day-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-hour-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-meridiem-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-millisecond-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-minute-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-month-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-second-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-year-field,.yst-root [type=email]::-webkit-datetime-edit,.yst-root [type=email]::-webkit-datetime-edit-day-field,.yst-root [type=email]::-webkit-datetime-edit-hour-field,.yst-root [type=email]::-webkit-datetime-edit-meridiem-field,.yst-root [type=email]::-webkit-datetime-edit-millisecond-field,.yst-root [type=email]::-webkit-datetime-edit-minute-field,.yst-root [type=email]::-webkit-datetime-edit-month-field,.yst-root [type=email]::-webkit-datetime-edit-second-field,.yst-root [type=email]::-webkit-datetime-edit-year-field,.yst-root [type=month]::-webkit-datetime-edit,.yst-root [type=month]::-webkit-datetime-edit-day-field,.yst-root [type=month]::-webkit-datetime-edit-hour-field,.yst-root [type=month]::-webkit-datetime-edit-meridiem-field,.yst-root [type=month]::-webkit-datetime-edit-millisecond-field,.yst-root [type=month]::-webkit-datetime-edit-minute-field,.yst-root [type=month]::-webkit-datetime-edit-month-field,.yst-root [type=month]::-webkit-datetime-edit-second-field,.yst-root [type=month]::-webkit-datetime-edit-year-field,.yst-root [type=number]::-webkit-datetime-edit,.yst-root [type=number]::-webkit-datetime-edit-day-field,.yst-root [type=number]::-webkit-datetime-edit-hour-field,.yst-root [type=number]::-webkit-datetime-edit-meridiem-field,.yst-root [type=number]::-webkit-datetime-edit-millisecond-field,.yst-root [type=number]::-webkit-datetime-edit-minute-field,.yst-root [type=number]::-webkit-datetime-edit-month-field,.yst-root [type=number]::-webkit-datetime-edit-second-field,.yst-root [type=number]::-webkit-datetime-edit-year-field,.yst-root [type=password]::-webkit-datetime-edit,.yst-root [type=password]::-webkit-datetime-edit-day-field,.yst-root [type=password]::-webkit-datetime-edit-hour-field,.yst-root [type=password]::-webkit-datetime-edit-meridiem-field,.yst-root [type=password]::-webkit-datetime-edit-millisecond-field,.yst-root [type=password]::-webkit-datetime-edit-minute-field,.yst-root [type=password]::-webkit-datetime-edit-month-field,.yst-root [type=password]::-webkit-datetime-edit-second-field,.yst-root [type=password]::-webkit-datetime-edit-year-field,.yst-root [type=search]::-webkit-datetime-edit,.yst-root [type=search]::-webkit-datetime-edit-day-field,.yst-root [type=search]::-webkit-datetime-edit-hour-field,.yst-root [type=search]::-webkit-datetime-edit-meridiem-field,.yst-root [type=search]::-webkit-datetime-edit-millisecond-field,.yst-root [type=search]::-webkit-datetime-edit-minute-field,.yst-root [type=search]::-webkit-datetime-edit-month-field,.yst-root [type=search]::-webkit-datetime-edit-second-field,.yst-root [type=search]::-webkit-datetime-edit-year-field,.yst-root [type=tel]::-webkit-datetime-edit,.yst-root [type=tel]::-webkit-datetime-edit-day-field,.yst-root [type=tel]::-webkit-datetime-edit-hour-field,.yst-root [type=tel]::-webkit-datetime-edit-meridiem-field,.yst-root [type=tel]::-webkit-datetime-edit-millisecond-field,.yst-root [type=tel]::-webkit-datetime-edit-minute-field,.yst-root [type=tel]::-webkit-datetime-edit-month-field,.yst-root [type=tel]::-webkit-datetime-edit-second-field,.yst-root [type=tel]::-webkit-datetime-edit-year-field,.yst-root [type=text]::-webkit-datetime-edit,.yst-root [type=text]::-webkit-datetime-edit-day-field,.yst-root [type=text]::-webkit-datetime-edit-hour-field,.yst-root [type=text]::-webkit-datetime-edit-meridiem-field,.yst-root [type=text]::-webkit-datetime-edit-millisecond-field,.yst-root [type=text]::-webkit-datetime-edit-minute-field,.yst-root [type=text]::-webkit-datetime-edit-month-field,.yst-root [type=text]::-webkit-datetime-edit-second-field,.yst-root [type=text]::-webkit-datetime-edit-year-field,.yst-root [type=time]::-webkit-datetime-edit,.yst-root [type=time]::-webkit-datetime-edit-day-field,.yst-root [type=time]::-webkit-datetime-edit-hour-field,.yst-root [type=time]::-webkit-datetime-edit-meridiem-field,.yst-root [type=time]::-webkit-datetime-edit-millisecond-field,.yst-root [type=time]::-webkit-datetime-edit-minute-field,.yst-root [type=time]::-webkit-datetime-edit-month-field,.yst-root [type=time]::-webkit-datetime-edit-second-field,.yst-root [type=time]::-webkit-datetime-edit-year-field,.yst-root [type=url]::-webkit-datetime-edit,.yst-root [type=url]::-webkit-datetime-edit-day-field,.yst-root [type=url]::-webkit-datetime-edit-hour-field,.yst-root [type=url]::-webkit-datetime-edit-meridiem-field,.yst-root [type=url]::-webkit-datetime-edit-millisecond-field,.yst-root [type=url]::-webkit-datetime-edit-minute-field,.yst-root [type=url]::-webkit-datetime-edit-month-field,.yst-root [type=url]::-webkit-datetime-edit-second-field,.yst-root [type=url]::-webkit-datetime-edit-year-field,.yst-root [type=week]::-webkit-datetime-edit,.yst-root [type=week]::-webkit-datetime-edit-day-field,.yst-root [type=week]::-webkit-datetime-edit-hour-field,.yst-root [type=week]::-webkit-datetime-edit-meridiem-field,.yst-root [type=week]::-webkit-datetime-edit-millisecond-field,.yst-root [type=week]::-webkit-datetime-edit-minute-field,.yst-root [type=week]::-webkit-datetime-edit-month-field,.yst-root [type=week]::-webkit-datetime-edit-second-field,.yst-root [type=week]::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}.yst-root textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root select{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.yst-root select[multiple]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select[multiple]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:0;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=checkbox]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:checked,.yst-root [type=checkbox]:checked:focus,.yst-root [type=checkbox]:checked:hover,.yst-root [type=checkbox]:indeterminate{background-color:currentColor;border-color:#0000}.yst-root [type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:indeterminate:focus,.yst-root [type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}.yst-root [type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:100%;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=radio]:checked,.yst-root [type=radio]:checked:focus,.yst-root [type=radio]:checked:hover{background-color:currentColor;border-color:#0000}.yst-root{--tw-text-opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:rgb(71 85 105/var(--tw-text-opacity));font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.8125rem;font-weight:400;line-height:1.5}.yst-root a{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root a:visited{color:#a61e69}.yst-root a:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root a:hover:visited{color:#b94986}.yst-root a:focus{--tw-text-opacity:1;border-radius:.125rem;color:rgb(99 102 241/var(--tw-text-opacity));outline-color:#4f46e5;outline-offset:1px;outline-style:solid}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder,.yst-root textarea::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root svg path{stroke-width:inherit}.yst-root .yst-radio__input,.yst-root a:focus{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-radio__input{transition-property:none}.yst-root .yst-radio__input:checked:before{content:var(--tw-content);display:none}.yst-root .yst-modal{z-index:100000!important}.yst-root dd,.yst-root li{margin-bottom:0}.yst-root input[type=date],.yst-root input[type=datetime-local],.yst-root input[type=datetime],.yst-root input[type=email],.yst-root input[type=month],.yst-root input[type=number],.yst-root input[type=password],.yst-root input[type=search],.yst-root input[type=tel],.yst-root input[type=text],.yst-root input[type=time],.yst-root input[type=url],.yst-root input[type=week]{min-height:0}.yst-root input[type=checkbox]{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important;min-height:0!important;min-width:0!important;transition-property:none!important}.yst-root input[type=checkbox]:before{--tw-content:none!important;content:var(--tw-content)!important}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.yst-root .yst-alert{border-radius:.375rem;display:flex;gap:.75rem;padding:1rem}.yst-root .yst-alert--info{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.yst-root .yst-alert--info .yst-alert__message{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.yst-root .yst-alert--warning{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.yst-root .yst-alert--warning .yst-alert__message{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.yst-root .yst-alert--success{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.yst-root .yst-alert--success .yst-alert__message{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.yst-root .yst-alert--error{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.yst-root .yst-alert--error .yst-alert__message{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.yst-root .yst-alert__icon{flex-grow:0;flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-autocomplete{position:relative}.yst-root .yst-autocomplete--error .yst-autocomplete__button{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.yst-root .yst-autocomplete--error .yst-autocomplete__button:focus{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity));border-color:rgb(239 68 68/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete--error .yst-autocomplete__input::placeholder{--tw-placeholder-opacity:1;color:rgb(252 165 165/var(--tw-placeholder-opacity))}.yst-root .yst-autocomplete--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-autocomplete--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;padding-left:.75rem;padding-right:.75rem;width:100%}.yst-root .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;right:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-autocomplete__input{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem 2.5rem .5rem 0;width:100%}.yst-root .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:20}.yst-root .yst-autocomplete__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-autocomplete__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-autocomplete__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-autocomplete__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-badge{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(219 234 254/var(--tw-bg-opacity));border-radius:9999px;color:rgb(30 64 175/var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;line-height:1.25;padding:.125rem .5rem;vertical-align:middle;white-space:nowrap}.yst-root .yst-badge--info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity));color:rgb(30 58 138/var(--tw-text-opacity))}.yst-root .yst-badge--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-badge--plain{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(15 23 42/var(--tw-text-opacity))}.yst-root .yst-badge--small{font-size:.675rem}.yst-root .yst-badge--large{font-size:1rem;padding-left:.75rem;padding-right:.75rem}.yst-root .yst-button{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:#0000;align-items:center;border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;justify-content:center;line-height:1.25rem;padding:.5rem .75rem;text-align:center;-webkit-text-decoration-line:none;text-decoration-line:none}.yst-root .yst-button:focus{outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root a.yst-button:focus{border-radius:.375rem}.yst-root .yst-button--primary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:#0000;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:visited{color:#fff}.yst-root .yst-button--primary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(143 15 87/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:hover:visited{color:#fff}.yst-root .yst-button--primary:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--secondary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:visited{color:#1e293b}.yst-root .yst-button--secondary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:hover:visited{color:#1e293b}.yst-root .yst-button--secondary:focus{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--tertiary{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:initial;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:visited{color:#83084e}.yst-root .yst-button--tertiary:hover{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:hover:visited{color:#83084e}.yst-root .yst-button--tertiary:focus{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--error{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity));border-color:#0000;color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:visited{color:#fff}.yst-root .yst-button--error:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:hover:visited{color:#fff}.yst-root .yst-button--error:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#dc2626}.yst-root .yst-button--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity));border-color:#0000;color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:visited{color:#78350f}.yst-root .yst-button--upsell:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:hover:visited{color:#78350f}.yst-root .yst-button--upsell:focus{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity));outline-color:#fbbf24}.yst-root .yst-button--large{font-size:.875rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-button--extra-large{font-size:1rem;line-height:1.5rem;padding:.625rem .875rem}.yst-root .yst-button--small{font-size:.75rem;line-height:1rem;padding:.375rem .625rem}.yst-root .yst-button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-button--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-checkbox{align-items:center;display:flex}.yst-root .yst-checkbox--disabled .yst-checkbox__input,.yst-root .yst-checkbox--disabled .yst-checkbox__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.25rem;color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-checkbox__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-checkbox__label{margin-left:.75rem}.yst-root .yst-code{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(15 23 42/var(--tw-text-opacity));display:inline-block;font-size:.75rem;line-height:1.25;margin:0;padding:.25rem}.yst-root .yst-code--block{display:block;margin-bottom:.5rem;margin-top:.5rem;max-width:100%;overflow-x:auto;padding:.25rem .5rem;white-space:nowrap}.yst-root .yst-file-input{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border:2px dashed rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;padding:1.25rem 1.5rem 1.5rem;text-align:center;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:100%}.yst-root .yst-file-input.yst-is-drag-over{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 243 247/var(--tw-bg-opacity));border-color:rgb(205 130 171/var(--tw-border-opacity))}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__content{pointer-events:none}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__icon{--tw-translate-y:-0.5rem;--tw-text-opacity:1;color:rgb(185 73 134/var(--tw-text-opacity));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-file-input.yst-is-disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-file-input.yst-is-disabled .yst-file-input__select-label{cursor:not-allowed}.yst-root .yst-file-input__content{align-items:center;display:inline-flex;flex-direction:column;max-width:20rem}.yst-root .yst-file-input__content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-input__content{text-align:center}.yst-root .yst-file-input__icon{stroke-width:1;--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:3rem;margin-left:auto;margin-right:auto;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:3rem}.yst-root .yst-file-input__icon>path{stroke-width:1}.yst-root .yst-file-input__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-file-input__input:focus+.yst-file-input__select-label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-input__labels{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:inline-block;font-weight:400}.yst-root .yst-file-input__select-label{border-radius:.375rem;font-weight:500}[dir=rtl] .yst-root .yst-file-input__labels{flex-direction:row-reverse}.yst-root .yst-label{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;font-weight:500}.yst-root .yst-link{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));cursor:pointer;-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root .yst-link:visited{color:#a61e69}.yst-root .yst-link:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root .yst-link:hover:visited{color:#b94986}.yst-root .yst-link:focus{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity));--tw-ring-offset-width:1px;--tw-ring-offset-color:#0000;border-radius:.125rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(99 102 241/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-link--primary{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus,.yst-root .yst-link--primary:hover{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(154 22 96/var(--tw-ring-opacity))}.yst-root .yst-link--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-link--error:focus,.yst-root .yst-link--error:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-link--error:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.yst-root .yst-paper{--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:flex;flex-direction:column}.yst-root .yst-paper__header{border-bottom-width:1px;padding:2rem}.yst-root .yst-paper__content{flex-grow:1;padding:2rem}.yst-root .yst-progress-bar{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;display:block;overflow:hidden;width:100%}.yst-root .yst-progress-bar__progress{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));border-radius:9999px;display:block;height:.375rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}.yst-root .yst-radio{align-items:center;display:flex}.yst-root .yst-radio--disabled .yst-radio__check,.yst-root .yst-radio--disabled .yst-radio__input,.yst-root .yst-radio--disabled .yst-radio__label{cursor:not-allowed;opacity:.5}.yst-root .yst-radio--disabled .yst-radio__check:focus,.yst-root .yst-radio--disabled .yst-radio__input:focus,.yst-root .yst-radio--disabled .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block{display:inline-flex}.yst-root .yst-radio--inline-block .yst-radio__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:#0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__check{visibility:visible}.yst-root .yst-radio--inline-block .yst-radio__input:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-offset-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__content{position:relative}.yst-root .yst-radio--inline-block .yst-radio__label{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer;display:flex;font-size:1rem;height:3.5rem;justify-content:center;margin-left:0;width:3.5rem}.yst-root .yst-radio--inline-block .yst-radio__label:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.yst-root .yst-radio--inline-block .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio--inline-block .yst-radio__check{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity));height:1.25rem;position:absolute;right:.125rem;top:.125rem;visibility:hidden;width:1.25rem}.yst-root .yst-radio__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-radio__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-radio__label{margin-left:.75rem}.yst-root .yst-select{position:relative}.yst-root .yst-select--disabled .yst-select__button,.yst-root .yst-select--disabled .yst-select__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select__button{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;line-height:1.5rem;padding:.5rem .75rem;position:relative;text-align:left;width:100%}.yst-root .yst-select__button:focus{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;right:.625rem;top:.625rem;width:1.25rem}.yst-root .yst-select__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:10}.yst-root .yst-select__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-select__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-select__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(154 22 96/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__button-label,.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-select__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-skeleton-loader{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;display:block;height:auto;overflow:hidden;position:relative;width:-moz-fit-content;width:fit-content}.yst-root .yst-skeleton-loader:after{--tw-translate-x:-100%;animation:wave 2.5s linear .5s infinite;background:linear-gradient(90deg,#0000,#00000012,#0000);bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes wave{0%{transform:translateX(-100%)}50%,to{transform:translateX(100%)}}.yst-root .yst-tag-input{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(30 41 59/var(--tw-text-opacity));display:flex;flex-wrap:wrap;font-size:.8125rem;gap:.375rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-tag-input::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root .yst-tag-input{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-tag-input,.yst-root .yst-tag-input:focus-within{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-tag-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-input--disabled:focus-within{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:rgb(203 213 225/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus,.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(148 163 184/var(--tw-text-opacity))}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__input{cursor:not-allowed}.yst-root .yst-tag-input__tag{cursor:pointer;gap:.125rem;min-height:20px;padding-inline-end:.125rem}.yst-root .yst-tag-input__tag:hover{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input__tag:focus,.yst-root .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__remove-tag{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1rem;justify-content:center;width:1rem}.yst-root .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__input{border-style:none;display:inline-flex;flex:1 1 0%;font-size:.8125rem;margin:0;padding:0}.yst-root .yst-tag-input__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-text-input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-text-input--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-text-input--read-only{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;background-color:rgb(248 250 252/var(--tw-bg-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(100 116 139/var(--tw-text-opacity));cursor:default}.yst-root .yst-textarea{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-textarea:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-textarea--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-textarea--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-title{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity));font-weight:500;line-height:1.25}.yst-root .yst-title--1{font-size:1.5rem}.yst-root .yst-title--2{font-size:1.125rem}.yst-root .yst-title--3{font-size:.875rem}.yst-root .yst-title--4{font-size:1rem}.yst-root .yst-title--5{font-size:.8125rem}.yst-root .yst-toast{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);max-width:100%;overflow-y:auto;padding:1rem;pointer-events:auto;width:20rem;z-index:20}.yst-root .yst-toast--large{width:24rem}.yst-root .yst-toggle{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));border-color:#0000;border-radius:9999px;border-width:2px;cursor:pointer;display:inline-flex;flex-shrink:0;height:1.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2.75rem}.yst-root .yst-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-toggle--checked{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-toggle--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-toggle--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-toggle__handle{--tw-translate-x:0px;--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:9999px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;height:1.25rem;justify-content:center;pointer-events:none;position:relative;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1.25rem}.yst-root .yst-toggle__icon{stroke:currentColor;stroke-width:2;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-grow:0;flex-shrink:0;height:.625rem;transition-duration:.1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:.625rem}.yst-root .yst-toggle__icon--check{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-toggle__icon--x{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}[dir=rtl] .yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity));border-radius:.5rem;color:rgb(255 255 255/var(--tw-text-opacity));display:inline-block;font-size:.75rem;max-width:24rem;padding:.5rem .625rem;position:absolute;white-space:normal;width:max-content;z-index:10}.yst-root .yst-tooltip--top{--tw-translate-x:-50%;--tw-translate-y:-100%;left:50%;margin-top:-.75rem;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--top:before{--tw-translate-x:-50%;--tw-translate-y:0px;--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-left-color:#0000;border-right-color:#0000;border-top-color:rgb(31 41 55/var(--tw-border-opacity));border-width:8px;content:var(--tw-content);position:absolute}.yst-root .yst-tooltip--bottom,.yst-root .yst-tooltip--top:before{left:50%;top:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--bottom{--tw-translate-x:-50%;--tw-translate-y:-0px;margin-top:.75rem}.yst-root .yst-tooltip--bottom:before{--tw-translate-x:-50%;--tw-border-opacity:1;--tw-content:"";border-bottom-color:rgb(31 41 55/var(--tw-border-opacity));border-left-color:#0000;border-right-color:#0000;border-top-color:#0000;border-width:8px;bottom:100%;content:var(--tw-content);left:50%;position:absolute;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right{--tw-translate-x:-0px;left:100%;margin-left:.75rem}.yst-root .yst-tooltip--right,.yst-root .yst-tooltip--right:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-left-color:#0000;border-right-color:rgb(31 41 55/var(--tw-border-opacity));border-top-color:#0000;border-width:8px;content:var(--tw-content);position:absolute;right:100%}.yst-root .yst-tooltip--left{margin-right:.75rem;right:100%}.yst-root .yst-tooltip--left,.yst-root .yst-tooltip--left:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--left:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-left-color:rgb(31 41 55/var(--tw-border-opacity));border-right-color:#0000;border-top-color:#0000;border-width:8px;content:var(--tw-content);left:100%;position:absolute}.yst-root .yst-validation-icon{pointer-events:none}.yst-root .yst-validation-icon--success{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.yst-root .yst-validation-icon--info{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.yst-root .yst-validation-icon--warning{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.yst-root .yst-validation-icon--error{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-validation-input{position:relative}.yst-root .yst-validation-input--success .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--success .yst-validation-input__input:focus,.yst-root .yst-validation-input--success .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.yst-root .yst-validation-input--info .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--info .yst-validation-input__input:focus,.yst-root .yst-validation-input--info .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.yst-root .yst-validation-input--warning .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--warning .yst-validation-input__input:focus,.yst-root .yst-validation-input--warning .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.yst-root .yst-validation-input--error .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--error .yst-validation-input__input:focus,.yst-root .yst-validation-input--error .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.yst-root .yst-validation-input__input:focus,.yst-root .yst-validation-input__input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-validation-input__icon{height:1.25rem;position:absolute;right:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-validation-message a{color:inherit;font-weight:500}.yst-root .yst-validation-message a:visited:hover{color:inherit}.yst-root .yst-validation-message a:focus{--tw-ring-color:currentColor}.yst-root .yst-validation-message--success{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.yst-root .yst-validation-message--info{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.yst-root .yst-validation-message--warning{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.yst-root .yst-validation-message--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-autocomplete-field__description,.yst-root .yst-autocomplete-field__validation{margin-top:.5rem}.yst-root .yst-card{display:flex;flex-direction:column;position:relative}.yst-root .yst-card>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-card{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);overflow:hidden;padding:1.5rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-card__header{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 244 246/var(--tw-bg-opacity));display:flex;height:6rem;justify-content:center;margin-left:-1.5rem;margin-right:-1.5rem;margin-top:-1.5rem;padding:1.5rem;position:relative}.yst-root .yst-card__content{flex-grow:1}.yst-root .yst-card__footer{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity));border-top-width:1px;padding-top:1.5rem}.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__description,.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox-group__label{margin-bottom:.5rem}.yst-root .yst-checkbox-group__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-checkbox-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-feature-upsell{position:relative}.yst-root .yst-feature-upsell--default{--tw-grayscale:grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.yst-root .yst-feature-upsell--card{padding:1.5rem}.yst-root .yst-file-import>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-import__feedback{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding:1rem}.yst-root .yst-file-import__feedback-header{align-items:flex-start;display:flex}.yst-root .yst-file-import__feedback-header>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.yst-root .yst-file-import__feedback-figure{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 229 237/var(--tw-bg-opacity));border-radius:9999px;display:flex;height:2rem;justify-content:center;width:2rem}.yst-root .yst-file-import__feedback-figure>svg{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity));height:1.25rem;width:1.25rem}.yst-root .yst-file-import__feedback-title{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:block;font-weight:500;margin-bottom:.125rem;overflow-wrap:break-word}.yst-root .yst-file-import__feedback-description{display:block;font-size:.75rem;font-weight:500}.yst-root .yst-file-import__abort-button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(241 245 249/var(--tw-bg-opacity));border-radius:9999px;color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1.25rem;justify-content:center;width:1.25rem}.yst-root .yst-file-import__abort-button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(71 85 105/var(--tw-text-opacity))}.yst-root .yst-file-import__abort-button:focus{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-import__abort-button>svg{height:.75rem;width:.75rem}.yst-root .yst-file-import__abort-button>svg>path{stroke-width:3}.yst-root .yst-modal{bottom:0;left:0;padding:1rem;position:fixed;right:0;top:0;z-index:10}@media (min-width:640px){.yst-root .yst-modal{padding:2rem}}@media (min-width:768px){.yst-root .yst-modal{padding:5rem}}.yst-root .yst-modal__layout{display:flex;min-height:100%}.yst-root .yst-modal--center .yst-modal__layout{align-items:center;justify-content:center}.yst-root .yst-modal--top-center .yst-modal__layout{align-items:flex-start;justify-content:center}.yst-root .yst-modal__overlay{--tw-bg-opacity:0.75;background-color:rgb(100 116 139/var(--tw-bg-opacity));bottom:0;left:0;position:fixed;right:0;top:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-modal__panel{--tw-bg-opacity:1;--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);max-width:36rem;overflow:hidden;padding:1.5rem;position:relative;width:100%}.yst-root .yst-modal__close{display:block;position:absolute;right:1rem;top:1rem}.yst-root .yst-modal__close-button{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(148 163 184/var(--tw-text-opacity));position:relative;z-index:10}.yst-root .yst-modal__close-button:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-modal__close-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-modal__container{display:flex;flex-direction:column;max-height:calc(100vh - 2rem)}@media (min-width:640px){.yst-root .yst-modal__container{max-height:calc(100vh - 4rem)}}@media (min-width:768px){.yst-root .yst-modal__container{max-height:calc(100vh - 10rem)}}.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 5rem)}@media (min-width:640px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 7rem)}}@media (min-width:768px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 13rem)}}.yst-root .yst-modal__container-footer,.yst-root .yst-modal__container-header{flex-shrink:0}.yst-root .yst-modal__container-content{overflow:auto}.yst-root .yst-modal__panel .yst-modal__container-content{margin-left:-1.5rem;margin-right:-1.5rem;padding-left:1.5rem;padding-right:1.5rem}.yst-root .yst-notifications{display:flex;flex-direction:column;max-height:calc(100vh - 4rem);max-width:calc(100vw - 4rem);pointer-events:none;position:fixed;width:100%;z-index:20}.yst-root .yst-notifications>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-notifications--bottom-center{align-items:center;bottom:2rem}.yst-root .yst-notifications--bottom-left{bottom:2rem;left:2rem}.yst-root .yst-notifications--top-center{align-items:center;top:2rem}.yst-root .yst-notification--large{width:24rem}.yst-root .yst-notification__icon{height:1.25rem;width:1.25rem}.yst-root .yst-pagination{display:inline-flex;isolation:isolate}.yst-root .yst-pagination>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1px*var(--tw-space-x-reverse))}.yst-root .yst-pagination{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-pagination-display__text{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));font-weight:400;padding:.5rem .75rem}.yst-root .yst-pagination-display__current-text{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity));font-weight:600}.yst-root .yst-pagination-display__truncated{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));align-self:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;font-size:.8125rem;font-weight:600;padding:.5rem 1rem}.yst-root .yst-pagination__button{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;padding:.5rem;position:relative}.yst-root .yst-pagination__button:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.yst-root .yst-pagination__button:focus{outline-color:#a61e69;outline-offset:0;z-index:20}.yst-root .yst-pagination__button--active{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:rgb(166 30 105/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(255 255 255/var(--tw-text-opacity));font-size:.8125rem;font-weight:600;z-index:10}.yst-root .yst-pagination__button--active:hover{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-pagination__button--active:focus{z-index:20}.yst-root .yst-pagination__button--active:focus-visible{border-radius:.125rem;outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root .yst-pagination__button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-pagination__button--disabled:hover{background-color:initial}.yst-root .yst-pagination__button--disabled:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio-group--inline-block .yst-radio-group__options{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.yst-root .yst-radio-group--disabled .yst-radio-group__description,.yst-root .yst-radio-group--disabled .yst-radio-group__label{opacity:.5}.yst-root .yst-radio-group--disabled .yst-radio-group__label{cursor:not-allowed}.yst-root .yst-radio-group__label{margin-bottom:.5rem}.yst-root .yst-radio-group__options{display:flex;flex-direction:column;gap:.5rem}.yst-root .yst-radio-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-select-field--disabled .yst-select-field__description,.yst-root .yst-select-field--disabled .yst-select-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select-field__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-select-field__description,.yst-root .yst-select-field__validation{margin-top:.5rem}.yst-root .yst-mobile-navigation__top{position:sticky;top:0;width:100%;z-index:50}.yst-root .yst-mobile-navigation__dialog{bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:50}.yst-root .yst-tag-field--disabled .yst-tag-field__description,.yst-root .yst-tag-field--disabled .yst-tag-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-field__description,.yst-root .yst-tag-field__validation{margin-top:.5rem}.yst-root .yst-text-field--disabled .yst-text-field__description,.yst-root .yst-text-field--disabled .yst-text-field__label{opacity:.5}.yst-root .yst-text-field--disabled .yst-text-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-text-field__label{cursor:default}.yst-root .yst-text-field__description,.yst-root .yst-text-field__validation{margin-top:.5rem}.yst-root .yst-textarea-field--disabled .yst-textarea-field__description,.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{opacity:.5}.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-textarea-field__label{cursor:default}.yst-root .yst-textarea-field__description,.yst-root .yst-textarea-field__validation{margin-top:.5rem}.yst-root .yst-toggle-field{display:flex;flex-direction:column;gap:.25rem}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{opacity:.5}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{cursor:not-allowed}.yst-root .yst-toggle-field__header{align-items:center;display:flex;flex-direction:row;gap:1.5rem;justify-content:space-between}.yst-root .yst-toggle-field__label-wrapper{align-items:center;display:flex;gap:.25rem}.yst-root .yst-toggle-field__description{margin-right:4.25rem}.yst-sr-only{clip:rect(0,0,0,0)!important;border-width:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.yst-pointer-events-none{pointer-events:none!important}.yst-invisible{visibility:hidden!important}.yst-fixed{position:fixed!important}.yst-absolute{position:absolute!important}.yst-relative{position:relative!important}.yst-inset-0{bottom:0!important;top:0!important}.yst-inset-0,.yst-inset-x-0{left:0!important;right:0!important}.yst-top-0{top:0!important}.yst-right-0{right:0!important}.yst--left-3{left:-.75rem!important}.yst-right-2{right:.5rem!important}.yst-left-0{left:0!important}.yst-z-30{z-index:30!important}.yst-z-40{z-index:40!important}.yst-z-10{z-index:10!important}.yst-m-0{margin:0!important}.yst--mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.yst-mx-auto{margin-left:auto!important;margin-right:auto!important}.yst-my-0\.5{margin-bottom:.125rem!important;margin-top:.125rem!important}.yst-my-0{margin-bottom:0!important;margin-top:0!important}.yst-mx-\[calc\(50\%-50vw\)\]{margin-left:calc(50% - 50vw)!important;margin-right:calc(50% - 50vw)!important}.yst-mx-1\.5{margin-left:.375rem!important;margin-right:.375rem!important}.yst-mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.yst--ml-1{margin-left:-.25rem!important}.yst-mt-6{margin-top:1.5rem!important}.yst-mt-1\.5{margin-top:.375rem!important}.yst-mt-1{margin-top:.25rem!important}.yst-ml-8{margin-left:2rem!important}.yst--mr-14{margin-right:-3.5rem!important}.yst-mb-2{margin-bottom:.5rem!important}.yst-mr-4{margin-right:1rem!important}.yst-mr-2{margin-right:.5rem!important}.yst-mb-px{margin-bottom:1px!important}.yst-ml-4{margin-left:1rem!important}.yst-mt-4{margin-top:1rem!important}.yst-mr-1{margin-right:.25rem!important}.yst-mb-8{margin-bottom:2rem!important}.yst-ml-3{margin-left:.75rem!important}.yst-mt-8{margin-top:2rem!important}.yst-mb-0{margin-bottom:0!important}.yst-mt-2{margin-top:.5rem!important}.yst-ml-1{margin-left:.25rem!important}.yst-mt-3{margin-top:.75rem!important}.yst-mr-1\.5{margin-right:.375rem!important}.yst-mb-4{margin-bottom:1rem!important}.yst-mt-2\.5{margin-top:.625rem!important}.yst-mt-auto{margin-top:auto!important}.yst--mt-10{margin-top:-2.5rem!important}.yst-mr-\[calc\(2\.5rem-1px\)\]{margin-right:calc(2.5rem - 1px)!important}.yst-mb-6{margin-bottom:1.5rem!important}.yst-mb-1{margin-bottom:.25rem!important}.yst--ml-3{margin-left:-.75rem!important}.yst-mb-3{margin-bottom:.75rem!important}.yst-mr-5{margin-right:1.25rem!important}.yst-mr-3{margin-right:.75rem!important}.yst-ml-2{margin-left:.5rem!important}.yst-block{display:block!important}.yst-inline-block{display:inline-block!important}.yst-flex{display:flex!important}.yst-inline-flex{display:inline-flex!important}.yst-hidden{display:none!important}.yst-h-5{height:1.25rem!important}.yst-h-6{height:1.5rem!important}.yst-h-4{height:1rem!important}.yst-h-12{height:3rem!important}.yst-h-0{height:0!important}.yst-h-full{height:100%!important}.yst-h-16{height:4rem!important}.yst-h-7{height:1.75rem!important}.yst-h-3{height:.75rem!important}.yst-h-8{height:2rem!important}.yst-h-2\.5{height:.625rem!important}.yst-h-2{height:.5rem!important}.yst-h-10{height:2.5rem!important}.yst-h-\[273px\]{height:273px!important}.yst-h-\[265px\]{height:265px!important}.yst-h-auto{height:auto!important}.yst-max-h-\[370px\]{max-height:370px!important}.yst-w-5{width:1.25rem!important}.yst-w-6{width:1.5rem!important}.yst-w-0{width:0!important}.yst-w-full{width:100%!important}.yst-w-4{width:1rem!important}.yst-w-12{width:3rem!important}.yst-w-2{width:.5rem!important}.yst-w-3{width:.75rem!important}.yst-w-8{width:2rem!important}.yst-w-7{width:1.75rem!important}.yst-w-1\/3{width:33.333333%!important}.yst-w-10\/12{width:83.333333%!important}.yst-w-9\/12{width:75%!important}.yst-w-7\/12{width:58.333333%!important}.yst-w-11\/12{width:91.666667%!important}.yst-w-8\/12{width:66.666667%!important}.yst-w-\[527px\]{width:527px!important}.yst-w-\[507px\]{width:507px!important}.yst-min-w-full{min-width:100%!important}.yst-max-w-xs{max-width:20rem!important}.yst-max-w-lg{max-width:32rem!important}.yst-max-w-xl{max-width:36rem!important}.yst-max-w-3xl{max-width:48rem!important}.yst-max-w-\[400px\]{max-width:400px!important}.yst-flex-1{flex:1 1 0%!important}.yst-flex-shrink-0,.yst-shrink-0{flex-shrink:0!important}.yst-flex-grow,.yst-grow{flex-grow:1!important}.yst-translate-y-4{--tw-translate-y:1rem!important}.yst-translate-y-0,.yst-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-translate-y-0{--tw-translate-y:0px!important}.yst-translate-y-full{--tw-translate-y:100%!important}.yst--translate-y-full,.yst-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst--translate-y-full{--tw-translate-y:-100%!important}.yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.yst-scale-100,.yst-scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important}.yst-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@keyframes yst-spin{to{transform:rotate(1turn)}}.yst-animate-spin{animation:yst-spin 1s linear infinite!important}.yst-cursor-wait{cursor:wait!important}.yst-cursor-default{cursor:default!important}.yst-list-disc{list-style-type:disc!important}.yst-flex-row{flex-direction:row!important}.yst-flex-col{flex-direction:column!important}.yst-flex-wrap{flex-wrap:wrap!important}.yst-place-content-end{place-content:end!important}.yst-items-start{align-items:flex-start!important}.yst-items-center{align-items:center!important}.yst-justify-center{justify-content:center!important}.yst-justify-between{justify-content:space-between!important}.yst-gap-2{gap:.5rem!important}.yst-gap-3{gap:.75rem!important}.yst-gap-1{gap:.25rem!important}.yst-gap-x-3{column-gap:.75rem!important}.yst-gap-y-1{row-gap:.25rem!important}.yst-gap-x-4{column-gap:1rem!important}.yst-space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(2rem*var(--tw-space-y-reverse))!important;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.25rem*var(--tw-space-y-reverse))!important;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(2rem*var(--tw-space-x-reverse))!important}.yst-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1rem*var(--tw-space-y-reverse))!important;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.75rem*var(--tw-space-x-reverse))!important}.yst--space-y-\[1px\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(-1px*var(--tw-space-y-reverse))!important;margin-top:calc(-1px*(1 - var(--tw-space-y-reverse)))!important}.yst-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.yst-divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(229 231 235/var(--tw-divide-opacity))!important}.yst-divide-slate-300>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(203 213 225/var(--tw-divide-opacity))!important}.yst-overflow-hidden{overflow:hidden!important}.yst-overflow-y-auto{overflow-y:auto!important}.yst-rounded-md{border-radius:.375rem!important}.yst-rounded-full{border-radius:9999px!important}.yst-rounded-lg{border-radius:.5rem!important}.yst-rounded-3xl{border-radius:1.5rem!important}.yst-rounded-none{border-radius:0!important}.yst-rounded-l-md{border-bottom-left-radius:.375rem!important;border-top-left-radius:.375rem!important}.yst-rounded-r-md{border-bottom-right-radius:.375rem!important;border-top-right-radius:.375rem!important}.yst-rounded-t-\[14px\]{border-top-left-radius:14px!important;border-top-right-radius:14px!important}.yst-border{border-width:1px!important}.yst-border-b{border-bottom-width:1px!important}.yst-border-r{border-right-width:1px!important}.yst-border-l{border-left-width:1px!important}.yst-border-dashed{border-style:dashed!important}.yst-border-none{border-style:none!important}.yst-border-slate-200{--tw-border-opacity:1!important;border-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-border-gray-200{--tw-border-opacity:1!important;border-color:rgb(229 231 235/var(--tw-border-opacity))!important}.yst-border-primary-500{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.yst-border-r-slate-200{--tw-border-opacity:1!important;border-right-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-bg-slate-600{--tw-bg-opacity:1!important;background-color:rgb(71 85 105/var(--tw-bg-opacity))!important}.yst-bg-slate-100{--tw-bg-opacity:1!important;background-color:rgb(241 245 249/var(--tw-bg-opacity))!important}.yst-bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.yst-bg-slate-200{--tw-bg-opacity:1!important;background-color:rgb(226 232 240/var(--tw-bg-opacity))!important}.yst-bg-slate-50{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.yst-bg-gray-100{--tw-bg-opacity:1!important;background-color:rgb(243 244 246/var(--tw-bg-opacity))!important}.yst-bg-red-100{--tw-bg-opacity:1!important;background-color:rgb(254 226 226/var(--tw-bg-opacity))!important}.yst-bg-opacity-75{--tw-bg-opacity:0.75!important}.yst-bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))!important}.yst-from-slate-50{--tw-gradient-from:#f8fafc!important;--tw-gradient-to:#f8fafc00!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.yst-stroke-3{stroke-width:3px!important}.yst-p-1{padding:.25rem!important}.yst-p-0{padding:0!important}.yst-p-2{padding:.5rem!important}.yst-p-4{padding:1rem!important}.yst-p-10{padding:2.5rem!important}.yst-px-4{padding-left:1rem!important;padding-right:1rem!important}.yst-px-3{padding-left:.75rem!important;padding-right:.75rem!important}.yst-py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.yst-py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.yst-px-2{padding-left:.5rem!important;padding-right:.5rem!important}.yst-py-4{padding-bottom:1rem!important;padding-top:1rem!important}.yst-py-1\.5{padding-bottom:.375rem!important;padding-top:.375rem!important}.yst-py-1{padding-top:.25rem!important}.yst-pb-1,.yst-py-1{padding-bottom:.25rem!important}.yst-pt-1{padding-top:.25rem!important}.yst-pb-10{padding-bottom:2.5rem!important}.yst-pt-6{padding-top:1.5rem!important}.yst-pt-\[56\.25\%\]{padding-top:56.25%!important}.yst-text-left{text-align:left!important}.yst-text-center{text-align:center!important}.yst-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.yst-text-sm{font-size:.8125rem!important}.yst-text-\[11px\]{font-size:11px!important}.yst-text-xs{font-size:.75rem!important}.yst-text-lg{font-size:1.125rem!important}.yst-font-medium{font-weight:500!important}.yst-font-semibold{font-weight:600!important}.yst-font-normal{font-weight:400!important}.yst-uppercase{text-transform:uppercase!important}.yst-text-slate-800{--tw-text-opacity:1!important;color:rgb(30 41 59/var(--tw-text-opacity))!important}.yst-text-slate-400{--tw-text-opacity:1!important;color:rgb(148 163 184/var(--tw-text-opacity))!important}.yst-text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.yst-text-slate-900{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.yst-text-slate-600{--tw-text-opacity:1!important;color:rgb(71 85 105/var(--tw-text-opacity))!important}.yst-text-primary-500{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.yst-text-gray-400{--tw-text-opacity:1!important;color:rgb(156 163 175/var(--tw-text-opacity))!important}.yst-text-gray-700{--tw-text-opacity:1!important;color:rgb(55 65 81/var(--tw-text-opacity))!important}.yst-text-red-600{--tw-text-opacity:1!important;color:rgb(220 38 38/var(--tw-text-opacity))!important}.yst-text-slate-700{--tw-text-opacity:1!important;color:rgb(51 65 85/var(--tw-text-opacity))!important}.yst-text-gray-200{--tw-text-opacity:1!important;color:rgb(229 231 235/var(--tw-text-opacity))!important}.yst-no-underline{-webkit-text-decoration-line:none!important;text-decoration-line:none!important}.yst-opacity-0{opacity:0!important}.yst-opacity-100{opacity:1!important}.yst-opacity-25{opacity:.25!important}.yst-opacity-75{opacity:.75!important}.yst-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important}.yst-shadow,.yst-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important}.yst-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow-amber-700\/30{--tw-shadow-color:#b453094d!important;--tw-shadow:var(--tw-shadow-colored)!important}.yst-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.yst-ring-black{--tw-ring-opacity:1!important;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))!important}.yst-ring-gray-200{--tw-ring-opacity:1!important;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))!important}.yst-ring-opacity-5{--tw-ring-opacity:0.05!important}.yst-drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f)!important}.yst-drop-shadow-md,.yst-grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.yst-grayscale{--tw-grayscale:grayscale(100%)!important}.yst-transition-opacity{transition-duration:.15s!important;transition-property:opacity!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-all{transition-duration:.15s!important;transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-delay-200{transition-delay:.2s!important}.yst-duration-1000{transition-duration:1s!important}.yst-duration-200{transition-duration:.2s!important}.yst-duration-300{transition-duration:.3s!important}.yst-duration-100{transition-duration:.1s!important}.yst-duration-75{transition-duration:75ms!important}.yst-duration-150{transition-duration:.15s!important}.yst-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.yst-ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}.first\:yst-rounded-t-md:first-child{border-top-left-radius:.375rem!important;border-top-right-radius:.375rem!important}.last\:yst-mr-0:last-child{margin-right:0!important}.last\:yst-rounded-b-md:last-child{border-bottom-left-radius:.375rem!important;border-bottom-right-radius:.375rem!important}.odd\:yst-bg-white:nth-child(odd){--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.even\:yst-bg-slate-50:nth-child(2n),.hover\:yst-bg-slate-50:hover{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.hover\:yst-text-slate-900:hover{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.hover\:yst-text-slate-500:hover{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.focus\:yst-outline-none:focus{outline:2px solid #0000!important;outline-offset:2px!important}.focus\:yst-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-1:focus,.focus\:yst-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.focus\:yst-ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-inset:focus{--tw-ring-inset:inset!important}.focus\:yst-ring-primary-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important}.focus\:yst-ring-offset-1:focus{--tw-ring-offset-width:1px!important}.focus\:yst-ring-offset-2:focus{--tw-ring-offset-width:2px!important}.focus\:yst-ring-offset-transparent:focus{--tw-ring-offset-color:#0000!important}.yst-group:hover .group-hover\:yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}[dir=rtl] .rtl\:yst-rotate-180{--tw-rotate:180deg!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media (min-width:640px){.sm\:yst-inline{display:inline!important}.sm\:yst-flex{display:flex!important}.sm\:yst-hidden{display:none!important}.sm\:yst-w-auto{width:auto!important}.sm\:yst-translate-y-0{--tw-translate-y:0px!important}.sm\:yst-scale-95,.sm\:yst-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.sm\:yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-flex-row-reverse{flex-direction:row-reverse!important}.sm\:yst-justify-end{justify-content:flex-end!important}.sm\:yst-justify-between{justify-content:space-between!important}.sm\:yst-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.5rem*var(--tw-space-x-reverse))!important}.sm\:yst-pt-2{padding-top:.5rem!important}}@media (min-width:1024px){.lg\:yst-mb-2{margin-bottom:.5rem!important}.lg\:yst-flex{display:flex!important}.lg\:yst-pt-0{padding-top:0!important}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290-rtl.css new file mode 100644 index 00000000..dce0a3be --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290-rtl.css @@ -0,0 +1 @@ +.admin_page_wpseo_installation_successful{background:#fff}.admin_page_wpseo_installation_successful h1{color:#a4286a;font-size:40px;font-weight:400;margin-top:0;text-align:center}.admin_page_wpseo_installation_successful .yoast-image{display:block;margin:100px auto 24px;max-width:200px}.admin_page_wpseo_installation_successful #wpcontent{padding-left:20px}@media screen and (max-width:782px){.admin_page_wpseo_installation_successful #wpcontent{padding-left:10px}}.yoast-whats-next{font-size:16px;text-align:center}.yoast-grid{grid-gap:32px;display:grid;grid-template-columns:1fr 1fr 1fr 1fr;margin:48px auto 0;max-width:1120px;text-align:center;width:100%}@media screen and (max-width:1250px){.yoast-grid{grid-template-columns:1fr 1fr;max-width:768px}}@media screen and (max-width:600px){.yoast-grid{grid-template-columns:1fr;max-width:480px}}.yoast-grid div{display:flex;flex-direction:column}.yoast-grid h3{color:#a4286a;font-size:19px;font-weight:400;line-height:26px;margin-top:0}.yoast-grid .yoast-button{margin-top:auto;width:calc(100% - 26px)}.yoast-grid img{margin-bottom:16px;max-width:100%}.yoast-grid p{margin:16px 0} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290.css new file mode 100644 index 00000000..129f2341 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-thank-you-2290.css @@ -0,0 +1 @@ +.admin_page_wpseo_installation_successful{background:#fff}.admin_page_wpseo_installation_successful h1{color:#a4286a;font-size:40px;font-weight:400;margin-top:0;text-align:center}.admin_page_wpseo_installation_successful .yoast-image{display:block;margin:100px auto 24px;max-width:200px}.admin_page_wpseo_installation_successful #wpcontent{padding-right:20px}@media screen and (max-width:782px){.admin_page_wpseo_installation_successful #wpcontent{padding-right:10px}}.yoast-whats-next{font-size:16px;text-align:center}.yoast-grid{grid-gap:32px;display:grid;grid-template-columns:1fr 1fr 1fr 1fr;margin:48px auto 0;max-width:1120px;text-align:center;width:100%}@media screen and (max-width:1250px){.yoast-grid{grid-template-columns:1fr 1fr;max-width:768px}}@media screen and (max-width:600px){.yoast-grid{grid-template-columns:1fr;max-width:480px}}.yoast-grid div{display:flex;flex-direction:column}.yoast-grid h3{color:#a4286a;font-size:19px;font-weight:400;line-height:26px;margin-top:0}.yoast-grid .yoast-button{margin-top:auto;width:calc(100% - 26px)}.yoast-grid img{margin-bottom:16px;max-width:100%}.yoast-grid p{margin:16px 0} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290-rtl.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290-rtl.css new file mode 100644 index 00000000..807b2164 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290-rtl.css @@ -0,0 +1 @@ +#wpseo-workouts-container h1,#wpseo-workouts-container h3{color:#a4286a;font-weight:500}#wpseo-workouts-container h2{font-size:12px;text-transform:uppercase}.workflow tr.cornerstone{font-weight:700}#wpseo-workouts-container hr{margin-bottom:24px}#wpseo-workouts-container progress{margin:16px 0 8px}#wpseo-workouts-container div.card{border:0;border-radius:8px;box-shadow:0 1px 3px 0 #0000001a,0 1px 2px 0 #0000000f;max-width:720px;padding:24px;width:100%}#wpseo-workouts-container div.card>h2{margin:0 0 1em}#wpseo-workouts-container div.card.card-small{display:flex;flex-direction:column;max-width:320px}#wpseo-workouts-container div.card.card-small>span{margin-top:auto}#wpseo-workouts-container table button{margin:2px}.workflow{counter-reset:line-number;list-style:none;margin-right:48px}.workflow li{counter-increment:line-number;padding-bottom:16px;position:relative}.workflow>li:before{background:#a4286a;bottom:-20px;content:"";right:-33px;position:absolute;top:0;width:2px}.workflow>li:last-of-type:before{display:none}.workflow>li:after{background:#fff;border:2px solid #a4286a;border-radius:100%;color:#a4286a;content:counter(line-number);display:block;height:28px;right:-48px;line-height:28px;position:absolute;text-align:center;top:-8px;width:28px}.workflow li.finished:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' fill='none' stroke='%23FFF' height='24' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 13 4 4L19 7'/%3E%3C/svg%3E") #a4286a;background-position:50%;background-repeat:no-repeat;background-size:20px 20px;content:""}.workflow li.finished p,.workflow li.finished table{opacity:.5}.workflow li img{max-width:100%}.workflow li img.workflow__image{max-height:100px;max-width:100px}.workflow li #react-select-2-input{box-shadow:none!important}.workflows__index__grid{display:grid;gap:16px;grid-template-columns:320px 320px}.workflow__grid{display:grid;gap:8px;grid-template-columns:auto 100px}.workflow__grid>div:last-of-type{display:flex;flex-wrap:wrap;justify-content:flex-end}table.yoast_help.yoast_link_suggestions thead td{padding:16px 8px}table.yoast_help.yoast_link_suggestions td{vertical-align:middle}table.yoast_help th.divider{text-align:center}.workflow table.yoast_help td{vertical-align:middle}.workflow table.yoast_help.yoast_link_suggestions td div{display:inline-block}.workflow table.yoast_help.yoast_link_suggestions td strong{display:inline-block;margin-left:8px}.components-modal__header{height:72px;padding:0 24px}.components-modal__header .components-modal__header-heading{color:#a4286a;font-size:20px;font-weight:400;line-height:1.2;margin:0}.components-modal__header .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-left:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.components-modal__content{padding:0 24px 24px}.components-modal__content input[type=text]{max-width:400px;width:100%}.components-modal__frame.yoast__workout{max-width:720px}.yoast__redirect-suggestions{line-height:2} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290.css b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290.css new file mode 100644 index 00000000..a023f3c4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/css/dist/premium-workouts-2290.css @@ -0,0 +1 @@ +#wpseo-workouts-container h1,#wpseo-workouts-container h3{color:#a4286a;font-weight:500}#wpseo-workouts-container h2{font-size:12px;text-transform:uppercase}.workflow tr.cornerstone{font-weight:700}#wpseo-workouts-container hr{margin-bottom:24px}#wpseo-workouts-container progress{margin:16px 0 8px}#wpseo-workouts-container div.card{border:0;border-radius:8px;box-shadow:0 1px 3px 0 #0000001a,0 1px 2px 0 #0000000f;max-width:720px;padding:24px;width:100%}#wpseo-workouts-container div.card>h2{margin:0 0 1em}#wpseo-workouts-container div.card.card-small{display:flex;flex-direction:column;max-width:320px}#wpseo-workouts-container div.card.card-small>span{margin-top:auto}#wpseo-workouts-container table button{margin:2px}.workflow{counter-reset:line-number;list-style:none;margin-left:48px}.workflow li{counter-increment:line-number;padding-bottom:16px;position:relative}.workflow>li:before{background:#a4286a;bottom:-20px;content:"";left:-33px;position:absolute;top:0;width:2px}.workflow>li:last-of-type:before{display:none}.workflow>li:after{background:#fff;border:2px solid #a4286a;border-radius:100%;color:#a4286a;content:counter(line-number);display:block;height:28px;left:-48px;line-height:28px;position:absolute;text-align:center;top:-8px;width:28px}.workflow li.finished:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' fill='none' stroke='%23FFF' height='24' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 13 4 4L19 7'/%3E%3C/svg%3E") #a4286a;background-position:50%;background-repeat:no-repeat;background-size:20px 20px;content:""}.workflow li.finished p,.workflow li.finished table{opacity:.5}.workflow li img{max-width:100%}.workflow li img.workflow__image{max-height:100px;max-width:100px}.workflow li #react-select-2-input{box-shadow:none!important}.workflows__index__grid{display:grid;gap:16px;grid-template-columns:320px 320px}.workflow__grid{display:grid;gap:8px;grid-template-columns:auto 100px}.workflow__grid>div:last-of-type{display:flex;flex-wrap:wrap;justify-content:flex-end}table.yoast_help.yoast_link_suggestions thead td{padding:16px 8px}table.yoast_help.yoast_link_suggestions td{vertical-align:middle}table.yoast_help th.divider{text-align:center}.workflow table.yoast_help td{vertical-align:middle}.workflow table.yoast_help.yoast_link_suggestions td div{display:inline-block}.workflow table.yoast_help.yoast_link_suggestions td strong{display:inline-block;margin-right:8px}.components-modal__header{height:72px;padding:0 24px}.components-modal__header .components-modal__header-heading{color:#a4286a;font-size:20px;font-weight:400;line-height:1.2;margin:0}.components-modal__header .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-right:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.components-modal__content{padding:0 24px 24px}.components-modal__content input[type=text]{max-width:400px;width:100%}.components-modal__frame.yoast__workout{max-width:720px}.yoast__redirect-suggestions{line-height:2} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/images/cornerstone-icon.svg b/wp/wp-content/plugins/wordpress-seo-premium/assets/images/cornerstone-icon.svg new file mode 100644 index 00000000..6ddb4dda --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/images/cornerstone-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/images/inclusive-language-icon.svg b/wp/wp-content/plugins/wordpress-seo-premium/assets/images/inclusive-language-icon.svg new file mode 100644 index 00000000..49bf1678 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/images/inclusive-language-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/ai-generator-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/ai-generator-2290.min.js new file mode 100644 index 00000000..f9fba08d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/ai-generator-2290.min.js @@ -0,0 +1,70 @@ +(()=>{var e={951:(e,t)=>{var s;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";const e=window.React,t=window.wp.components,r=window.wp.data,a=window.wp.domReady;var o=s.n(a);const n=window.wp.hooks,i=window.wp.i18n,l=window.yoast.uiLibrary,c=window.lodash,u=window.yoast.reduxJsToolkit,m="adminUrl",p=(0,u.createSlice)({name:m,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),d=p.getInitialState,y={selectAdminUrl:e=>(0,c.get)(e,m,"")};y.selectAdminLink=(0,u.createSelector)([y.selectAdminUrl,(e,t)=>t],((e,t)=>{try{return new URL(t,e).href}catch(t){return e}}));const g=p.actions,w=p.reducer,h=window.wp.apiFetch;var f=s.n(h);const E="hasConsent",v=`${E}/storeConsent`,b=(0,u.createSlice)({name:E,initialState:!1,reducers:{giveAiGeneratorConsent:(e,{payload:t})=>t}}),S=b.getInitialState,_={selectHasAiGeneratorConsent:e=>(0,c.get)(e,E,!1)},k={...b.actions,storeAiGeneratorConsent:function*(e){try{yield{type:v,payload:e}}catch(e){return!1}return yield{type:`${E}/giveAiGeneratorConsent`,payload:e},!0}},x={[v]:({payload:e})=>f()({path:"yoast/v1/ai_generator/consent",method:"POST",data:{consent:e},parse:!1})},C=b.reducer,N="pluginUrl",T=(0,u.createSlice)({name:N,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),P=(T.getInitialState,{selectPluginUrl:e=>(0,c.get)(e,N,"")});P.selectImageLink=(0,u.createSelector)([P.selectPluginUrl,(e,t,s="assets/images")=>s,(e,t)=>t],((e,t,s)=>[(0,c.trimEnd)(e,"/"),(0,c.trim)(t,"/"),(0,c.trimStart)(s,"/")].join("/"))),T.actions,T.reducer;const R=window.wp.url,A="linkParams",I=(0,u.createSlice)({name:A,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),$=(I.getInitialState,{selectLinkParam:(e,t,s={})=>(0,c.get)(e,`${A}.${t}`,s),selectLinkParams:e=>(0,c.get)(e,A,{})});$.selectLink=(0,u.createSelector)([$.selectLinkParams,(e,t)=>t],((e,t)=>(0,R.addQueryArgs)(t,e))),I.actions,I.reducer;const L="yoast-seo/editor",M="loading",q="showPlay",O="askPermission",F="isPlaying",B="wistiaEmbedPermission",D=(0,u.createSlice)({name:B,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${B}/request`,(e=>{e.status=M})),e.addCase(`${B}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${B}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,c.get)(t,"error.code",500),message:(0,c.get)(t,"error.message","Unknown")}}))}}),G=(D.getInitialState,D.actions,D.reducer,window.wp.element),U=window.yoast.propTypes;var W=s.n(U);const j="yoast-seo-premium/ai-generator",H="google",Y="social",z="twitter",V="title",K="description",X="product",Q="post",J="term",Z={post:"title",term:"term_title"},ee=(0,c.mapValues)(Z,(e=>`%%${e}%%`)),te={mobile:"mobile",desktop:"desktop"},se={idle:"idle",loading:"loading",success:"success",error:"error"},re="success",ae="error",oe="abort",ne=window.yoast.analysis;let ie,le=!1;const ce=["_formal","_informal","_ao90"],ue=e=>{for(const t of ce)if(e.endsWith(t))return e.slice(0,-t.length);return e},me="\\–\\-\\(\\)_\\[\\]’‘“â€ã€ã€žã€Ÿâ€Ÿâ€ž\"'.?!:;,¿¡«»‹›—×+&۔؟،؛。。ï¼â€¼ï¼Ÿâ‡â‰âˆâ€¥â€¦ãƒ»ãƒ¼ã€ã€ƒã€„〆〇〈〉《》「ã€ã€Žã€ã€ã€‘〒〓〔〕〖〗〘〙〚〛〜ã€ã€žã€Ÿã€ ã€¶ã€¼ã€½ï½›ï½ï½œï½žï½Ÿï½ ï½¢ï½£ï½¤ï¼»ï¼½ï½¥ï¿¥ï¼„%@&'()*ï¼ï¼šï¼›ï¼œï¼žï¼¼\\<>";me.split(""),new RegExp("^["+me+"]+"),new RegExp("["+me+"]+$");const pe=new RegExp("["+me+"#$%&*+/=@^`{|}~ -¿–-âŠâ€€-â¯â‚ -⃀]","g"),de=e=>0===e.replace(pe,"").trim().length,ye={editType:V,previewType:H,postType:"post",contentType:Q},ge=(0,G.createContext)(ye),we=ge.Provider,he=()=>(0,G.useContext)(ge),fe=(0,c.get)(window,"yoast.editorModules.components.contexts.location.LocationContext",(0,G.createContext)("unknown")),Ee=()=>(0,G.useContext)(fe),ve=e=>{const t=(0,G.useRef)(null);return(0,G.useCallback)((s=>{(0,c.attempt)((()=>t.current&&t.current.disconnect())),null!==s&&(t.current=new ResizeObserver((t=>{(0,c.forEach)(t,(t=>e(t)))})),t.current.observe(s))}),[e])},be=(0,u.createSlice)({name:"suggestions",initialState:{status:se.loading,error:{code:200,message:""},entities:[],selected:""},reducers:{setLoading:e=>{e.status=se.loading},setSuccess:(e,{payload:t})=>{e.status=se.success,e.selected=t[0],e.entities.push(...t)},setError:(e,{payload:t})=>{e.status=se.error,e.error=t},setSelected:(e,{payload:t})=>{e.selected=t}}}),Se=e=>{switch(e){case Y:return"Facebook";case z:return"Twitter";default:return"Google"}},_e=window.yoast.searchMetadataPreviews,ke=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"}))})),xe=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),Ce=({onGiveConsent:t,learnMoreLink:s,privacyPolicyLink:r,termsOfServiceLink:a,thumbnail:o,wistiaEmbedPermission:n})=>{const{onClose:c,initialFocus:u}=(0,l.useModalContext)(),[m,p]=(0,l.useToggleState)(!1),d=(0,G.useCallback)((()=>{c(),t(!0)}),[t,c]),y=(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s and %2$s are a set of anchor tags and %3$s and %4$s are a set of anchor tags. */ /* translators: %1$s and %2$s are a set of anchor tags and %3$s and %4$s are a set of anchor tags. */ +(0,i.__)("I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.","wordpress-seo-premium"),"","","",""),{a1:(0,e.createElement)(Ne,{href:a}),a2:(0,e.createElement)(Ne,{href:r})});return(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-items-center yst-p-10"},(0,e.createElement)("div",{className:"yst-relative yst-w-full"},(0,e.createElement)(Pe,{videoId:"vmrahpfjxp",thumbnail:o,wistiaEmbedPermission:n}),(0,e.createElement)(l.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,e.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium"},(0,e.createElement)("span",{className:"yst-introduction-modal-uppercase"},(0,i.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ /* translators: %1$s expands to Yoast SEO Premium. */ +(0,i.__)("New to %1$s","wordpress-seo-premium"),"Yoast SEO Premium"))," ",(0,e.createElement)("span",{className:"yst-uppercase yst-text-slate-700"},"21.0")),(0,e.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,e.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,i.__)("Generate titles & descriptions with Yoast AI!","wordpress-seo-premium")),(0,e.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s and %2$s are anchor tag; %3$s is the arrow icon. */ /* translators: %1$s and %2$s are anchor tag; %3$s is the arrow icon. */ +(0,i.__)("Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s","wordpress-seo-premium"),"","",""),{a:(0,e.createElement)(Ne,{href:s,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,e.createElement)(xe,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})}))),(0,e.createElement)("div",{className:"yst-flex yst-w-full yst-mt-6"},(0,e.createElement)("hr",{className:"yst-w-full yst-text-gray-200"})),(0,e.createElement)("div",{className:"yst-flex yst-items-start yst-mt-4"},(0,e.createElement)("input",{type:"checkbox",id:"yst-ai-consent-checkbox",name:"yst-ai-consent-checkbox",checked:m,value:m?"true":"false",onChange:p,className:"yst-checkbox__input",ref:u}),(0,e.createElement)("label",{htmlFor:"yst-ai-consent-checkbox",className:"yst-label yst-checkbox__label yst-text-xs yst-font-normal yst-text-slate-500"},y)),(0,e.createElement)("div",{className:"yst-w-full yst-flex yst-mt-4"},(0,e.createElement)(l.Button,{as:"button",className:"yst-grow",size:"large",disabled:!m,onClick:d},(0,i.__)("Start generating","wordpress-seo-premium"))),(0,e.createElement)(l.Button,{as:"button",className:"yst-mt-4",variant:"tertiary",onClick:c},(0,i.__)("Close","wordpress-seo-premium")))};Ce.propTypes={onGiveConsent:W().func.isRequired,learnMoreLink:W().string.isRequired,privacyPolicyLink:W().string.isRequired,termsOfServiceLink:W().string.isRequired,thumbnail:W().shape({src:W().string.isRequired,width:W().string,height:W().string}).isRequired,wistiaEmbedPermission:W().shape({value:W().bool.isRequired,status:W().string.isRequired,set:W().func.isRequired}).isRequired};const Ne=({href:t,children:s,...r})=>(0,e.createElement)(l.Link,{target:"_blank",rel:"noopener noreferrer",...r,href:t},s,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,i.__)("(Opens in a new browser tab)","wordpress-seo-premium")));Ne.propTypes={href:W().string.isRequired,children:W().node},Ne.defaultProps={children:null};const Te=window.yoast.reactHelmet,Pe=({videoId:t,thumbnail:s,wistiaEmbedPermission:r})=>{const[a,o]=(0,G.useState)(r.value?F:q),n=(0,G.useCallback)((()=>o(F)),[o]),c=(0,G.useCallback)((()=>{r.value?n():o(O)}),[r.value,n,o]),u=(0,G.useCallback)((()=>o(q)),[o]),m=(0,G.useCallback)((()=>{r.set(!0),n()}),[r.set,n]);return(0,e.createElement)(G.Fragment,null,r.value&&(0,e.createElement)(Te.Helmet,null,(0,e.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,e.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},a===q&&(0,e.createElement)("button",{className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:c},(0,e.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...s})),a===O&&(0,e.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,e.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},r.status===M&&(0,e.createElement)(l.Spinner,null),r.status!==M&&(0,i.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ /* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,i.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo-premium"),"Yoast SEO","Wistia")),(0,e.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,e.createElement)(l.Button,{type:"button",variant:"secondary",onClick:u,disabled:r.status===M},(0,i.__)("Deny","wordpress-seo-premium")),(0,e.createElement)(l.Button,{type:"button",variant:"primary",onClick:m,disabled:r.status===M},(0,i.__)("Allow","wordpress-seo-premium")))),r.value&&a===F&&(0,e.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===t&&(0,e.createElement)(l.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==t&&(0,e.createElement)("div",{className:`wistia_embed wistia_async_${t} videoFoam=true`}))))};Pe.propTypes={videoId:W().string.isRequired,thumbnail:W().shape({src:W().string.isRequired,width:W().string,height:W().string}).isRequired,wistiaEmbedPermission:W().shape({value:W().bool.isRequired,status:W().string.isRequired,set:W().func.isRequired}).isRequired};const Re=()=>{const t=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-support")),[]);return(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("span",{className:"yst-block yst-font-medium"},(0,i.__)("Something went wrong","wordpress-seo-premium")),(0,e.createElement)("p",{className:"yst-mt-2"},(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ /* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,i.__)("Please try again later. If the issue persists, please %1$scontact our support team%2$s!","wordpress-seo-premium"),"",""),{a:(0,e.createElement)(Ne,{variant:"error",href:t})})))},Ae=()=>{const t=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-support")),[]);return(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("span",{className:"yst-block yst-font-medium"},(0,i.__)("Not enough content","wordpress-seo-premium")),(0,e.createElement)("p",{className:"yst-mt-2"},(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ /* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,i.__)("Please try again later. If the issue persists, please %1$scontact our support team%2$s!","wordpress-seo-premium"),"",""),{a:(0,e.createElement)(Ne,{variant:"error",href:t})})))},Ie=()=>{const t=(0,r.useSelect)((e=>e(j).selectAdminLink("?page=wpseo_page_settings#/site-features#card-wpseo-keyword_analysis_active")),[]),s=(0,G.useCallback)((()=>{window.location.reload()}),[]),{onClose:a}=(0,l.useModalContext)();return(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-space-y-6 yst-mt-6"},(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("p",null,(0,G.createInterpolateElement)((0,i.sprintf)( +/** + * translators: + * %1$s expands to Yoast SEO. + * %2$s and %3$s expand to an opening and closing anchor tag, respectively, that links to the settings page. + */ +/** + * translators: + * %1$s expands to Yoast SEO. + * %2$s and %3$s expand to an opening and closing anchor tag, respectively, that links to the settings page. + */ +(0,i.__)("The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.","wordpress-seo-premium"),"Yoast SEO","",""),{a:(0,e.createElement)(Ne,{variant:"error",href:t})}))),(0,e.createElement)("div",{className:"yst-mt-6 yst-mb-1 yst-flex yst-space-x-3 yst-place-content-end"},(0,e.createElement)(l.Button,{variant:"secondary",onClick:a},(0,i.__)("Close","wordpress-seo-premium")),(0,e.createElement)(l.Button,{className:"yst-revoke-button",variant:"primary",onClick:s},(0,i.__)("Refresh page","wordpress-seo-premium"))))},$e=()=>{const t=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-rate-limit-help")),[]);return(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("span",{className:"yst-block yst-font-medium"},(0,i.__)("You've reached the Yoast AI rate limit.","wordpress-seo-premium")),(0,e.createElement)("p",{className:"yst-mt-2"},(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ /* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,i.__)("To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.","wordpress-seo-premium"),"",""),{a:(0,e.createElement)(Ne,{variant:"error",href:t})})))},Le=({invalidSubscriptions:t})=>{const s=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-activate-premium")),[]),a=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-new-premium")),[]),o=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-activate-yoast-woocommerce")),[]),n=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-new-yoast-woocommerce")),[]),c=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-activate-woocommerce-premium-bundle")),[]),u=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-new-woocommerce-premium-bundle")),[]),{onClose:m}=(0,l.useModalContext)(),p=(0,G.useCallback)((async()=>{try{await f()({path:"yoast/v1/ai_generator/bust_subscription_cache",method:"POST",parse:!1})}catch(e){console.error(e)}window.location.reload()}),[]);let d,y,g;1===t.length&&(d=t[0],y="Yoast SEO Premium"===d?s:o,g="Yoast SEO Premium"===d?a:n);const w=(0,G.createInterpolateElement)((0,i.sprintf)( +/** + * translators: + * %1$s expands to Yoast SEO Premium or Yoast WooCommerce SEO. + * %2$s expands to MyYoast. + * %3$s and %4$s expand to an opening and closing anchor tag, respectively, to activate your subscription. + * %5$s and %6$s expand to an opening and closing anchor tag, respectively, to get a new subscription. + **/ +/** + * translators: + * %1$s expands to Yoast SEO Premium or Yoast WooCommerce SEO. + * %2$s expands to MyYoast. + * %3$s and %4$s expand to an opening and closing anchor tag, respectively, to activate your subscription. + * %5$s and %6$s expand to an opening and closing anchor tag, respectively, to get a new subscription. + **/ +(0,i.__)("To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.","wordpress-seo-premium"),d,"MyYoast","","","",""),{Activate:(0,e.createElement)(Ne,{variant:"error",href:y}),New:(0,e.createElement)(Ne,{variant:"error",href:g})}),h=(0,G.createInterpolateElement)((0,i.sprintf)( +/** + * translators: + * %1$s expands to MyYoast. + * %2$s expands to Yoast SEO Premium. + * %3$s expands to Yoast WooCommerce SEO. + * %4$s expands to Yoast WooCommerce SEO Premium bundle. + * %5$s and %6$s expand to an opening and closing anchor tag, respectively, to activate your subscription. + * %7$s and %8$s expand to an opening and closing anchor tag, respectively, to get a new subscription. + **/ +/** + * translators: + * %1$s expands to MyYoast. + * %2$s expands to Yoast SEO Premium. + * %3$s expands to Yoast WooCommerce SEO. + * %4$s expands to Yoast WooCommerce SEO Premium bundle. + * %5$s and %6$s expand to an opening and closing anchor tag, respectively, to activate your subscription. + * %7$s and %8$s expand to an opening and closing anchor tag, respectively, to get a new subscription. + **/ +(0,i.__)("To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.","wordpress-seo-premium"),"MyYoast","Yoast SEO Premium","Yoast WooCommerce SEO","Yoast WooCommerce SEO Premium bundle","","","",""),{Activate:(0,e.createElement)(Ne,{variant:"error",href:c}),New:(0,e.createElement)(Ne,{variant:"error",href:u})});return(0,e.createElement)(G.Fragment,null,(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("p",null,1===t.length&&w,t.length>1&&h)),(0,e.createElement)("div",{className:"yst-mt-6 yst-mb-1 yst-flex yst-space-x-3 yst-place-content-end"},(0,e.createElement)(l.Button,{variant:"secondary",onClick:m},(0,i.__)("Close","wordpress-seo-premium")),(0,e.createElement)(l.Button,{variant:"primary",onClick:p},(0,i.__)("Refresh page","wordpress-seo-premium"))))};Le.propTypes={invalidSubscriptions:W().array},Le.defaultProps={invalidSubscriptions:[]};const Me=()=>{const t=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-support")),[]);return(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("span",{className:"yst-block yst-font-medium"},(0,i.__)("Connection timeout","wordpress-seo-premium")),(0,e.createElement)("p",{className:"yst-mt-2"},(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ /* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,i.__)("It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s","wordpress-seo-premium"),"",""),{a:(0,e.createElement)(Ne,{variant:"error",href:t})})))},qe=()=>{const{editType:t}=he(),s=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-configure-page")),[]),a=(0,G.useMemo)((()=>t===K?(0,i.__)("Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.","wordpress-seo-premium"):(0,i.__)("Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.","wordpress-seo-premium") +/** + * translators: %1$s and %2$s expand to an opening and closing anchor tag, respectively, that links to the usage policy. + * %3$s and %4$s expand to an opening and closing anchor tag, respectively, that links to a configure page guide. + */),[t]);return(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("p",null,(0,G.createInterpolateElement)((0,i.sprintf)(a,"","","",""),{a1:(0,e.createElement)(Ne,{variant:"error",href:"https://openai.com/policies/usage-policies"}),a2:(0,e.createElement)(Ne,{variant:"error",href:s})})))},Oe=({errorMessage:t})=>{const s=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-support")),[]);return(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("span",{className:"yst-block yst-font-medium"},(0,i.__)("Something went wrong","wordpress-seo-premium")),(0,e.createElement)("p",{className:"yst-mt-2"},(0,i.sprintf)(/* translators: %s is the error response of the request. */ /* translators: %s is the error response of the request. */ +(0,i.__)('The request came back with the following error: "%s"',"wordpress-seo-premium"),t)),(0,e.createElement)("p",{className:"yst-mt-2"},(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ /* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,i.__)("Please try again later. If the issue persists, please %1$scontact our support team%2$s!","wordpress-seo-premium"),"",""),{a:(0,e.createElement)(Ne,{variant:"error",href:s})})))};Oe.propTypes={errorMessage:W().string},Oe.defaultProps={errorMessage:""};const Fe=({currentSubscriptions:t,isSeoAnalysisActive:s})=>{const{postType:a}=he(),o=(0,r.useSelect)((e=>e(L).getIsWooCommerceActive()),[]),n=(0,G.useMemo)((()=>!t.wooCommerceSubscription&&a===X&&o),[o,a,t.wooCommerceSubscription]),i=[];return t.premiumSubscription||i.push("Yoast SEO Premium"),n&&i.push("Yoast WooCommerce SEO"),i.length>0?(0,e.createElement)(l.Modal.Container.Content,{className:"yst-pt-6"},(0,e.createElement)(Le,{invalidSubscriptions:i})):s?void 0:(0,e.createElement)(Ie,null)};Fe.propTypes={currentSubscriptions:W().object,isSeoAnalysisActive:W().bool};const Be=({onStartGenerating:t})=>{const s=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-terms-of-service")),[]),a=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-privacy-policy")),[]),o=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-learn-more")),[]),n=(0,r.useSelect)((e=>e(L).selectImageLink("ai-generator-preview.png")),[]),i=(0,G.useMemo)((()=>({src:n,width:"432",height:"244"})),[n]),l=(0,r.useSelect)((e=>e(L).selectWistiaEmbedPermissionValue()),[]),c=(0,r.useSelect)((e=>e(L).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:u}=(0,r.useDispatch)(L),m=(0,G.useMemo)((()=>({value:l,status:c,set:u})),[l,c,u]),{storeAiGeneratorConsent:p}=(0,r.useDispatch)(j),d=(0,G.useCallback)((()=>{p(!0),t()}),[p,t]);return(0,e.createElement)(Ce,{onGiveConsent:d,learnMoreLink:o,termsOfServiceLink:s,privacyPolicyLink:a,thumbnail:i,wistiaEmbedPermission:m})};Be.propTypes={onStartGenerating:W().func.isRequired};const De=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"}))})),Ge=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"}))})),Ue=/(?<\/badge>|^(?!))(?[\s\S]+?)(?|$)/g,We=({height:t})=>{const[s,a]=(0,G.useState)(""),{onClose:o}=(0,l.useModalContext)(),{editType:n,previewType:u,contentType:m}=he(),p=(()=>{const{editType:e,previewType:t}=he();let s="SEO";switch(t){case Y:s="social";break;case z:s="X"}switch(e){case V:return(0,i.sprintf)(/* translators: %s is the type of title. */ /* translators: %s is the type of title. */ +(0,i.__)("Generated %s titles","wordpress-seo-premium"),s);case K:return t===H&&(s="meta"),(0,i.sprintf)(/* translators: %s is the type of description. */ /* translators: %s is the type of description. */ +(0,i.__)("Generated %s descriptions","wordpress-seo-premium"),s)}})(),d=(()=>{const{editType:e,previewType:t}=he();let s="SEO";switch(t){case Y:s="social";break;case z:s="X"}switch(e){case V:return(0,i.sprintf)(/* translators: %s is the type of title. */ /* translators: %s is the type of title. */ +(0,i.__)("Apply %s title","wordpress-seo-premium"),s);case K:return t===H&&(s="meta"),(0,i.sprintf)(/* translators: %s is the type of description. */ /* translators: %s is the type of description. */ +(0,i.__)("Apply %s description","wordpress-seo-premium"),s)}})(),y=Ee(),{suggestions:g,fetchSuggestions:w,setSelectedSuggestion:h}=(()=>{const[e,t]=(0,G.useReducer)(be.reducer,be.getInitialState()),{editType:s,previewType:a,postType:o,contentType:n}=he(),i=(0,r.useSelect)((e=>e(L).getContentLocale()),[]),l=(0,r.useSelect)((e=>e(j).selectPromptContent()),[]);let u=(0,r.useSelect)((e=>e(L).getFocusKeyphrase()),[]);const m=(0,r.useSelect)((e=>e(L).getIsWooCommerceActive()),[]);u.length>191&&(u=u.slice(0,191));let p=s===K?"meta-description":"seo-title";return o===X&&m?p=`product-${p}`:n===J&&(p=`taxonomy-${p}`),{suggestions:e,fetchSuggestions:(0,G.useCallback)((async(e=!0)=>{t(be.actions.setLoading());const{status:s,payload:r}=await(async({type:e,promptContent:t,focusKeyphrase:s,platform:r,language:a})=>{let o;const n=1e3*(0,c.get)(window,"wpseoPremiumAiGenerator.requestTimeout",30);try{ie&&ie.abort(),ie=new AbortController,le=!1,o=setTimeout((()=>{le=!0,ie.abort()}),n);const i=await f()({path:"yoast/v1/ai_generator/get_suggestions/",method:"POST",data:{type:e,prompt_content:t,focus_keyphrase:s,platform:r,language:ue(a).replace("_","-")},parse:!1,signal:ie.signal}),l=await i.json();return{status:re,payload:l}}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return le?{status:ae,payload:{message:"timeout",code:408}}:{status:oe};const{message:t,missingLicenses:s,errorIdentifier:r}=await(async e=>{try{const t=e.body.getReader(),{value:s}=await t.read(),r=new TextDecoder("utf-8").decode(s);return console.error(r),JSON.parse(r)}catch(e){return{message:"Unknown"}}})(e);return{status:ae,payload:{message:t,code:e.status||500,missingLicenses:s,errorIdentifier:r}}}finally{clearTimeout(o)}})({canAbort:e,type:p,promptContent:l,focusKeyphrase:u,platform:Se(a),language:i});switch(s){case oe:break;case ae:t(be.actions.setError(r));break;case re:t(be.actions.setSuccess(r))}return s}),[t]),setSelectedSuggestion:(0,G.useCallback)((e=>t(be.actions.setSelected(e))),[t])}})(),E=(()=>{const{previewType:e}=he();switch(e){case Y:return Je;case z:return mt;default:return He}})(),{addAppliedSuggestion:v}=(0,r.useDispatch)(j),b=(0,l.usePrevious)(t),[S,_]=(0,G.useState)(!1),k=(0,G.useCallback)((e=>{_(e.target.offsetHeight!==e.target.scrollHeight)}),[_]),x=ve(k),C=(()=>{const{editType:e,previewType:t,contentType:s}=he(),a=(()=>{const{previewType:e}=he();return(0,G.useMemo)((()=>{switch(e){case H:return()=>(0,r.select)(L).getSnippetEditorData().title;case Y:return(0,r.select)(L).getFacebookTitleOrFallback;case z:return(0,r.select)(L).getTwitterTitleOrFallback;default:return(0,c.constant)("")}}),[e])})(),o=(0,r.useSelect)((s=>s(j).selectAppliedSuggestionFor({editType:e,previewType:t})),[e,t]);return(0,G.useMemo)((()=>{let t=a();return e===K?t:(o&&(t=t.replace(o,ee[s])),((e,t)=>e.includes(ee[t])?e:ee[t])(t,s))}),[e,a])})(),N=(()=>{const e=(()=>{const{previewType:e}=he();return(0,G.useMemo)((()=>{switch(e){case H:return()=>(0,r.select)(L).getSnippetEditorData().description;case Y:return(0,r.select)(L).getFacebookDescriptionOrFallback;case z:return(0,r.select)(L).getTwitterDescriptionOrFallback;default:return(0,c.constant)("")}}),[e])})();return(0,G.useMemo)(e,[e])})(),T=(()=>{const e=(0,r.useSelect)((e=>{const t=e(L).getReplaceVars();return t.forEach((e=>{""!==e.value||["title","excerpt","excerpt_only"].includes(e.name)||(e.value="%%"+e.name+"%%"),e.badge=`${e.label}`})),t}),[]);return(0,G.useCallback)(((t,{key:s="value",overrides:r={},applyPluggable:a=!0,editType:o=V,contentType:n=Q}={})=>{for(const a of e)t=t.replace(new RegExp("%%"+(0,c.escapeRegExp)(a.name)+"%%","g"),(0,c.get)(r,a.name,a[s]));return n===J&&(t=t.replace(" Archives","")),a?((e,t=V)=>{const s=(0,c.get)(window,"yoast.editorModules.helpers.replacementVariableHelpers.applyReplaceUsingPlugin",(e=>({url:e.url,title:ne.languageProcessing.stripHTMLTags(e.title),description:ne.languageProcessing.stripHTMLTags(e.description)}))),r=ne.languageProcessing.stripSpaces(e),a=s({title:"",description:"",[t]:r});return(0,c.get)(a,t,e)})(t,o):t}),[e])})(),P=(0,G.useMemo)((()=>n===V?{[Z[m]]:g.selected}:{}),[n,m,g.selected]),R=(0,G.useMemo)((()=>T(C,{overrides:P,contentType:m})),[T,C,n,m,g.selected]),A=(0,G.useMemo)((()=>T(C,{overrides:{...P,sep:"",sitename:""},contentType:m})),[T,C,n,m,g.selected]),I=(0,G.useMemo)((()=>n===K?g.selected:T(N,{editType:K})),[T,N,n,g.selected]),$=(0,G.useCallback)((e=>T(C,{overrides:{[Z[m]]:e},key:"badge",applyPluggable:!1,contentType:m})),[T,C,m]),{currentPage:M,setCurrentPage:q,isOnLastPage:O,totalPages:F,getItemsOnCurrentPage:B}=(({totalItems:e=0,perPage:t=5})=>{const[s,r]=(0,G.useState)(1),a=(0,G.useMemo)((()=>Math.ceil(e/t)),[e,t]),o=(0,G.useMemo)((()=>s*t),[s,t]),n=(0,G.useMemo)((()=>o-t),[o,t]),i=(0,G.useMemo)((()=>1===s),[s]),l=(0,G.useMemo)((()=>s===a),[s,a]),u=(0,G.useCallback)((()=>{s>1&&r(s-1)}),[s,r]),m=(0,G.useCallback)((()=>{s(0,c.slice)(e,n,o)),[n,o]);return{currentPage:s,setCurrentPage:r,totalPages:a,isOnFirstPage:i,isOnLastPage:l,previousPage:u,nextPage:m,firstOnPage:n,lastOnPage:o,getItemsOnCurrentPage:p}})({totalItems:g.status===se.loading||g.status===se.error?g.entities.length+5:g.entities.length,perPage:5}),D=(0,G.useMemo)((()=>(0,c.map)(B(g.entities),(t=>{let s=t;return n===V&&(s=$(t),s=s.replace(Ue,((e,t,s,r,a,o,{start:n,wrap:i,end:l})=>{const c=i.trim();return 0===c.length?`${n}${i}${l}`:`${n}${c}${l}`})),s=(0,G.createInterpolateElement)(s,{badge:(0,e.createElement)(l.Badge,{className:"yst-mr-2 last:yst-mr-0",variant:"plain"}," "),span:(0,e.createElement)("span",{className:"yst-flex yst-items-center yst-mr-2 last:yst-mr-0"})})),{value:t,label:s}}))),[g.entities,B,n,$]),U=(0,G.useMemo)((()=>g.status!==se.error||g.status===se.error&&!O),[g.status,O]),W=(0,G.useMemo)((()=>g.status===se.loading&&O),[g.status,O]),te=(0,G.useMemo)((()=>g.status===se.error&&O),[g.status,O]),ce=(0,G.useCallback)((()=>{q(g.status===se.error?F:F+1),w()}),[w,g.status,F,q,h]),me=(0,G.useCallback)((()=>a("")),[a]),pe=(()=>{const{editType:e}=he();switch(e){case V:return(()=>{const{previewType:e}=he(),{updateData:t,setFacebookPreviewTitle:s,setTwitterPreviewTitle:a}=(0,r.useDispatch)(L);return(0,G.useMemo)((()=>{switch(e){case H:return e=>t({title:e});case Y:return s;case z:return a;default:return c.noop}}),[e,t,s,a])})();case K:return(()=>{const{previewType:e}=he(),{updateData:t,setFacebookPreviewDescription:s,setTwitterPreviewDescription:a}=(0,r.useDispatch)(L);return(0,G.useMemo)((()=>{switch(e){case H:return e=>t({description:e});case Y:return s;case z:return a;default:return c.noop}}),[e,t,s,a])})();default:return c.noop}})(),de=(0,G.useCallback)((()=>{const e=n===V?C.replace(new RegExp(ee[m]+"( Archives)?"),g.selected):g.selected;pe(e),v({editType:n,previewType:u,suggestion:g.selected}),o()}),[pe,n,u,g.selected,C,o,v]);return(0,G.useEffect)((()=>{""===s&&w().then((e=>a(e)))}),[s,a,w]),s===ae||g.status===se.error&&402===g.error.code?(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-space-y-6 yst-mt-6"},(0,e.createElement)(at,{errorCode:g.error.code,errorIdentifier:g.error.errorIdentifier,invalidSubscriptions:g.error.missingLicenses,showActions:!0,onRetry:me,errorMessage:g.error.message})):(0,e.createElement)(G.Fragment,null,(0,e.createElement)(l.Modal.Container.Content,{ref:x,className:"yst-flex yst-flex-col yst-py-6 yst-space-y-2"},(0,e.createElement)(E,{title:R,description:I,status:g.status,titleForLength:A,showPreviewSkeleton:""===s,showLengthProgress:!W}),U&&(W?(0,e.createElement)(lt,{idSuffix:y,suggestionClassNames:n===V?[["yst-h-3 yst-w-9/12"],["yst-h-3 yst-w-7/12"],["yst-h-3 yst-w-10/12"],["yst-h-3 yst-w-11/12"],["yst-h-3 yst-w-8/12"]]:void 0}):(0,e.createElement)(G.Fragment,null,(0,e.createElement)("div",{className:"yst-flex yst-space-y-4"},(0,e.createElement)(l.Label,{as:"span",className:"yst-flex-grow yst-cursor-default yst-mt-auto"},p),(0,e.createElement)(l.Button,{variant:"secondary",size:"small",onClick:g.status===se.loading?c.noop:ce,isLoading:g.status===se.loading},g.status!==se.loading&&(0,e.createElement)(Ge,{className:"yst--ml-1 yst-mr-2 yst-h-4 yst-w-4 yst-text-gray-400"}),(0,i.__)("Generate 5 more","wordpress-seo-premium"))),(0,e.createElement)(it,{idSuffix:y,suggestions:D,selected:g.selected,onChange:h}),(0,e.createElement)("div",{className:"sm:yst-flex sm:yst-justify-between"},(0,e.createElement)("p",{className:"yst-text-slate-500 yst-text-[11px] yst-mt-1"},(0,i.__)("Text generated by AI may be offensive or inaccurate.","wordpress-seo-premium")),F>1&&(0,e.createElement)(l.Pagination,{current:M,total:F,onNavigate:q,disabled:g.status===se.loading,variant:"text" +/* translators: Hidden accessibility text. */,screenReaderTextPrevious:(0,i.__)("Previous","wordpress-seo-premium") +/* translators: Hidden accessibility text. */,screenReaderTextNext:(0,i.__)("Next","wordpress-seo-premium")})))),g.status===se.error&&O&&(0,e.createElement)(at,{errorCode:g.error.code,errorIdentifier:g.error.errorIdentifier,invalidSubscriptions:g.error.missingLicenses,errorMessage:g.error.message})),(0,e.createElement)(l.Modal.Container.Footer,null,S&&(0,e.createElement)("div",{className:"yst-absolute yst-inset-x-0 yst--mt-10 yst-mr-[calc(2.5rem-1px)] yst-h-10 yst-pointer-events-none yst-bg-gradient-to-t yst-from-slate-50"}),(0,e.createElement)("hr",{className:"yst-mb-6 yst--mx-6"}),(0,e.createElement)("div",{className:"sm:yst-flex sm:yst-justify-end sm:yst-space-x-2"},(0,e.createElement)("div",{className:"yst-hidden sm:yst-inline"},(0,e.createElement)(l.Button,{variant:"secondary",onClick:o},(0,i.__)("Close","wordpress-seo-premium"))),(0,e.createElement)("div",{className:"yst-block sm:yst-inline"},(0,e.createElement)(l.Button,{className:"yst-w-full sm:yst-w-auto",variant:"primary",onClick:de,disabled:""===g.selected||g.status===se.loading||te},(0,e.createElement)(De,{className:"yst--ml-1 yst-mr-1 yst-h-4 yst-w-4 yst-text-white"}),d)),(0,e.createElement)("div",{className:"yst-mt-4 sm:yst-hidden"},(0,e.createElement)(l.Button,{variant:"secondary",onClick:o,className:"yst-w-full sm:yst-w-auto"},(0,i.__)("Close","wordpress-seo-premium"))))),(g.status===se.success||g.status===se.loading)&&(0,e.createElement)(ut,{height:g.status===se.success?t:b}))};We.propTypes={height:W().number.isRequired};const je=({onUseAi:t})=>{const{editType:s,postType:a}=he(),o=Ee(),n=(()=>{const{editType:e,previewType:t}=he();switch(t){case Y:return e===K?(0,i.__)("AI social description generator","wordpress-seo-premium"):(0,i.__)("AI social title generator","wordpress-seo-premium");case z:return e===K?(0,i.__)("AI X description generator","wordpress-seo-premium"):(0,i.__)("AI X title generator","wordpress-seo-premium");default:return e===K?(0,i.__)("AI description generator","wordpress-seo-premium"):(0,i.__)("AI title generator","wordpress-seo-premium")}})(),[c,,,u,m]=(0,l.useToggleState)(!1),p=(0,G.useRef)(null),d=(0,r.useSelect)((e=>e(L).getFocusKeyphrase()),[]),y=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-help-button-modal")),[]),{closeEditorModal:g}=(0,r.useDispatch)(L),w=(0,r.useSelect)((e=>e(j).selectHasAiGeneratorConsent()),[]),h=(0,r.useSelect)((e=>e(j).selectProductSubscriptions()),[]),f=(0,r.useSelect)((e=>e(j).selectPremiumSubscription()),[]),E=(0,r.useSelect)((e=>e(j).selectWooCommerceSubscription()),[]),v=(0,r.useSelect)((e=>e(L).getPreference("isKeywordAnalysisActive",!0)),[]),b=(0,r.useSelect)((e=>e(L).getIsWooCommerceActive()),[]),S=(0,i.__)("Close modal","wordpress-seo-premium"),_=function(e,t,s,r,a){return e===X&&a?t&&s&&r:t&&r}(a,f,E,v,b),k=(0,G.useCallback)((()=>{if(de(d))return m(),g(),void setTimeout((()=>(e=>{const t=`focus-keyword-input-${"modal"===e?"sidebar":e}`;if("metabox"===e){const e=document.getElementById("wpseo-meta-tab-content");e&&e.click()}const s=document.getElementById(t);s&&s.focus()})(o)),0);u()}),[d,u,m,g,o]),x=(0,G.useCallback)((()=>{v?k():u()}),[k,v,u]),C=(0,G.useCallback)((()=>{t(),u(),w&&v&&k()}),[t,u,w,v,k]),N=(0,l.useSvgAria)(),[T,P]=(0,G.useState)(0),R=(0,G.useCallback)((e=>P(e.borderBoxSize[0].blockSize)),[P]),A=ve(R);return(0,e.createElement)(G.Fragment,null,(0,e.createElement)("button",{type:"button",id:`yst-replacevar__use-ai-button__${s}__${o}`,className:"yst-replacevar__use-ai-button",onClick:C},(0,i.__)("Use AI","wordpress-seo-premium")),(0,e.createElement)(l.Modal,{className:"yst-introduction-modal",isOpen:!w&&c,onClose:m,initialFocus:p},(0,e.createElement)(l.Modal.Panel,{className:"yst-max-w-lg yst-p-0 yst-introduction-modal-panel yst-rounded-3xl",closeButtonScreenReaderText:S},(0,e.createElement)(Be,{onStartGenerating:x,focusElementRef:p}))),(0,e.createElement)(l.Modal,{className:"yst-ai-modal",isOpen:w&&c,onClose:m},(0,e.createElement)(l.Modal.Panel,{ref:A,className:"yst-max-w-3xl yst-relative",closeButtonScreenReaderText:S},(0,e.createElement)(l.Modal.Container,null,(0,e.createElement)(l.Modal.Container.Header,null,(0,e.createElement)("div",{className:"yst-flex yst-items-center"},(0,e.createElement)("span",{className:"yst-logo-icon yst-h-5 yst-w-5"}),(0,e.createElement)(l.Modal.Title,{className:"yst-ml-3 yst-mr-1.5",as:"h1",size:"2"},n),(0,e.createElement)(l.Link,{id:"ai-modal-learn-more",href:y,variant:"primary",className:"yst-no-underline yst-mr-2",target:"_blank",rel:"noopener" +/* translators: Hidden accessibility text. */,"aria-label":(0,i.__)("Learn more about AI (Opens in a new browser tab)","wordpress-seo-premium")},(0,e.createElement)(ke,{...N,className:"yst-w-4 yst-h-4 yst-text-slate-500"})),(0,e.createElement)(l.Badge,{variant:"info"},"Beta")),(0,e.createElement)("hr",{className:"yst-mt-6 yst--mx-6"})),_?(0,e.createElement)(We,{height:T}):(0,e.createElement)(Fe,{currentSubscriptions:h,isSeoAnalysisActive:v})))))};je.propTypes={onUseAi:W().func.isRequired};const He=({title:t,description:s,status:a,titleForLength:o,showPreviewSkeleton:n,showLengthProgress:c})=>{const u=(0,r.useSelect)((e=>e(L).getSnippetEditorMode()),[]),[m,p]=(0,G.useState)(u),{editType:d}=he(),y=Ee(),g=(({editType:e,title:t,description:s})=>{const a=(0,r.useSelect)((e=>e(L).getDateFromSettings()),[]),o=(0,r.useSelect)((e=>e(L).getContentLocale()),[]),n=(0,r.useSelect)((e=>e(L).isCornerstoneContent()),[]),i=(0,r.useSelect)((e=>e(L).getIsTerm()),[]);return(0,G.useMemo)((()=>e===K?(0,_e.getDescriptionProgress)(s,a,n,i,o):(0,_e.getTitleProgress)(t)),[e,t,s,a,n,i,o])})({editType:d,title:o,description:s});return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"lg:yst-flex"},(0,e.createElement)(l.Label,{as:"span",className:"yst-flex-grow yst-cursor-default lg:yst-mb-2"},(0,i.__)("Google preview","wordpress-seo-premium")),(0,e.createElement)(Qe,{mode:m,idSuffix:y,onChange:p,disabled:a===se.loading})),n?(0,e.createElement)(ze,null):(0,e.createElement)(Ye,{mode:m,title:t,description:s}),(0,e.createElement)("div",{className:"yst-mt-6"},(0,e.createElement)(l.Label,{as:"span",className:"yst-flex-grow yst-cursor-default"},d===V&&(0,i.__)("SEO title width","wordpress-seo-premium"),d===K&&(0,i.__)("Meta description length","wordpress-seo-premium")),(0,e.createElement)(Xe,{className:"yst-mt-2",progress:c?g.actual:0,min:0,max:g.max,score:g.score})))};He.propTypes={title:W().string.isRequired,description:W().string.isRequired,status:W().oneOf(Object.keys(se)).isRequired,titleForLength:W().string.isRequired,showPreviewSkeleton:W().bool.isRequired,showLengthProgress:W().bool.isRequired};const Ye=({mode:t,title:s,description:a})=>{const o=(0,r.useSelect)((e=>e(L).getBaseUrlFromSettings()),[]),n=(0,r.useSelect)((e=>e(L).getSnippetEditorData().slug||""),[]),i=(0,r.useSelect)((e=>e(L).getDateFromSettings()),[]),l=(0,r.useSelect)((e=>e(L).getFocusKeyphrase()),[]),u=(0,r.useSelect)((e=>e(L).getSnippetEditorPreviewImageUrl()),[]),m=(0,r.useSelect)((e=>e(L).getSiteIconUrlFromSettings()),[]),p=(0,r.useSelect)((e=>e(L).getShoppingData()),[]),d=(0,r.useSelect)((e=>e(L).getSnippetEditorWordsToHighlight()),[]),y=(0,r.useSelect)((e=>e(L).getSiteName()),[]),g=(0,r.useSelect)((e=>e(L).getContentLocale()),[]),w=(0,G.useMemo)((()=>o+n),[o,n]);return(0,e.createElement)("div",{className:`yst-bg-slate-200 yst-p-2 yst--mx-6 ${t}`},(0,e.createElement)(_e.SnippetPreview,{title:s,description:a,mode:t,url:w,keyword:l,date:i,faviconSrc:m,mobileImageSrc:u,wordsToHighlight:d,siteName:y,locale:g,shoppingData:p,onMouseUp:c.noop}))};Ye.propTypes={mode:W().oneOf(Object.keys(te)).isRequired,title:W().string.isRequired,description:W().string.isRequired};const ze=()=>(0,e.createElement)("div",{className:"yst-max-w-[400px] yst-py-4 yst-px-3 yst-border yst-rounded-lg yst-w-full yst-mx-auto"},(0,e.createElement)("div",{className:"yst-flex yst-gap-x-3"},(0,e.createElement)(l.SkeletonLoader,{className:"yst-flex-shrink-0 yst-h-7 yst-w-7 yst-rounded-full"}),(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-w-full yst-gap-y-1"},(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-3 yst-w-1/3"}),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-2.5 yst-w-10/12"}))),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-4 yst-w-full yst-mt-6 yst-mb-4"}),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-3 yst-w-full"}),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-3 yst-w-10/12 yst-mt-2.5"}));var Ve=s(951),Ke=s.n(Ve);const Xe=({className:t,progress:s,max:r,score:a})=>{const o=(0,G.useMemo)((()=>(e=>e>=7?"yst-score-good":e>=5?"yst-score-ok":"yst-score-bad")(a)),[a]);return(0,e.createElement)(l.ProgressBar,{className:Ke()("yst-length-progress-bar",o,t),progress:s,min:0,max:r})};Xe.propTypes={className:W().string,progress:W().number.isRequired,max:W().number.isRequired,score:W().number.isRequired},Xe.defaultProps={className:""};const Qe=({idSuffix:t,mode:s,onChange:r,disabled:a})=>{const o=(0,G.useCallback)((({target:e})=>e.checked&&r(e.value)),[r]);return(0,e.createElement)(l.RadioGroup,{id:`yst-ai-mode__${t}`,className:"yst-ai-mode sm:yst-pt-2 lg:yst-pt-0",disabled:a},(0,e.createElement)(l.RadioGroup.Radio,{id:`yst-ai-mode__mobile__${t}`,name:`yst-ai-mode__${t}`,label:(0,i.__)("Mobile result","wordpress-seo-premium"),value:te.mobile,checked:s===te.mobile,onChange:o,disabled:a}),(0,e.createElement)(l.RadioGroup.Radio,{id:`yst-ai-mode__desktop__${t}`,name:`yst-ai-mode__${t}`,label:(0,i.__)("Desktop result","wordpress-seo-premium"),value:te.desktop,checked:s===te.desktop,onChange:o,disabled:a}))};Qe.propTypes={idSuffix:W().string.isRequired,mode:W().oneOf(Object.keys(te)).isRequired,onChange:W().func.isRequired,disabled:W().bool.isRequired};const Je=({title:t,description:s,showPreviewSkeleton:r})=>(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"yst-flex yst-mb-6"},(0,e.createElement)(l.Label,{as:"span",className:"yst-flex-grow yst-cursor-default"},(0,i.__)("Social preview","wordpress-seo-premium"))),r?(0,e.createElement)(tt,null):(0,e.createElement)(et,{title:t,description:s}));Je.propTypes={title:W().string.isRequired,description:W().string.isRequired,showPreviewSkeleton:W().bool.isRequired};const Ze=window.yoast["social-metadata-previews"],et=({title:t,description:s})=>{const a=(0,r.useSelect)((e=>e(L).getSiteUrl()),[]),o=(0,r.useSelect)((e=>e(L).getFacebookImageUrl()),[]),n=(0,r.useSelect)((e=>e(L).getEditorDataImageFallback()),[]),i=(0,r.useSelect)((e=>e(L).getFacebookAltText()),[]);return(0,e.createElement)("div",{className:"yst-bg-slate-200 yst-p-2 yst--mx-6 yst-mx-auto"},(0,e.createElement)(Ze.FacebookPreview,{title:t,description:s,siteUrl:a,imageUrl:o,imageFallbackUrl:n,alt:i,onSelect:c.noop,onImageClick:c.noop,onMouseHover:c.noop}))};et.propTypes={title:W().string.isRequired,description:W().string.isRequired};const tt=()=>(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-w-[527px] yst-border yst-mx-auto"},(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-[273px] yst-w-full yst-rounded-none yst-border yst-border-dashed"}),(0,e.createElement)("div",{className:"yst-w-full yst-p-4 yst-space-y-1"},(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-3 yst-w-1/3"}),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-5 yst-w-10/12"}),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-3 yst-w-full"}))),st=()=>{const t=(0,r.useSelect)((e=>e(L).selectLink("https://yoa.st/ai-generator-support")),[]);return(0,e.createElement)(l.Alert,{variant:"error"},(0,e.createElement)("span",{className:"yst-block yst-font-medium"},(0,i.__)("Yoast AI cannot reach your site","wordpress-seo-premium")),(0,e.createElement)("p",{className:"yst-mt-2"},(0,G.createInterpolateElement)((0,i.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ /* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,i.__)("To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.","wordpress-seo-premium"),"",""),{a:(0,e.createElement)(Ne,{variant:"error",href:t})})))},rt=({children:t,onRetry:s})=>{const{onClose:r}=(0,l.useModalContext)();return(0,e.createElement)(G.Fragment,null,t,(0,e.createElement)("div",{className:"yst-mt-6 yst-mb-1 yst-flex yst-space-x-3 yst-place-content-end"},(0,e.createElement)(l.Button,{variant:"secondary",onClick:r},(0,i.__)("Close","wordpress-seo-premium")),(0,e.createElement)(l.Button,{variant:"primary",onClick:s},(0,i.__)("Try again","wordpress-seo-premium"))))};rt.propTypes={children:W().node.isRequired,onRetry:W().func.isRequired};const at=({errorCode:t,errorIdentifier:s,invalidSubscriptions:r,showActions:a,onRetry:o,errorMessage:n})=>{switch(t){case 400:switch(s){case"AI_CONTENT_FILTER":return(0,e.createElement)(qe,null);case"NOT_ENOUGH_CONTENT":return(0,e.createElement)(Ae,null);case"SITE_UNREACHABLE":return(0,e.createElement)(st,null);case"WP_HTTP_REQUEST_ERROR":return a?(0,e.createElement)(rt,{onRetry:o},(0,e.createElement)(Oe,{errorMessage:n})):(0,e.createElement)(Oe,{errorMessage:n});default:return a?(0,e.createElement)(rt,{onRetry:o},(0,e.createElement)(Re,null)):(0,e.createElement)(Re,null)}case 402:return(0,e.createElement)(Le,{invalidSubscriptions:r});case 408:return a?(0,e.createElement)(rt,{onRetry:o},(0,e.createElement)(Me,null)):(0,e.createElement)(Me,null);case 429:return(0,e.createElement)($e,null);default:return a?(0,e.createElement)(rt,{onRetry:o},(0,e.createElement)(Re,null)):(0,e.createElement)(Re,null)}};at.propTypes={errorCode:W().number.isRequired,errorIdentifier:W().string.isRequired,invalidSubscriptions:W().array,showActions:W().bool,onRetry:W().func,errorMessage:W().string},at.defaultProps={showActions:!1,onRetry:c.noop,invalidSubscriptions:[],errorMessage:""};const ot=W().shape({value:W().string.isRequired,label:W().node.isRequired}),nt=({id:t,name:s,suggestion:r,isChecked:a,onChange:o})=>{const n=(0,G.useCallback)((()=>o(r.value)),[r,o]);return(0,e.createElement)("label",{htmlFor:t,className:Ke()("yst-flex yst-p-4 yst-items-center yst-border first:yst-rounded-t-md last:yst-rounded-b-md",a&&"yst-z-10 yst-border-primary-500")},(0,e.createElement)("input",{type:"radio",id:t,name:s,className:"yst-radio__input",value:r.value,checked:a,onChange:n}),(0,e.createElement)("div",{className:Ke()("yst-label yst-radio__label yst-flex yst-flex-wrap yst-items-center",!a&&"yst-text-slate-600")},r.label))};nt.propTypes={id:W().string.isRequired,name:W().string.isRequired,suggestion:ot.isRequired,isChecked:W().bool.isRequired,onChange:W().func.isRequired};const it=({idSuffix:t,suggestions:s,selected:r,onChange:a})=>(0,e.createElement)("div",null,(0,e.createElement)(l.RadioGroup,{className:"yst-suggestions-radio-group yst-flex yst-flex-col",id:`yst-ai-suggestions-radio-group__${t}`},s.map(((s,o)=>(0,e.createElement)(nt,{key:`yst-ai-suggestions-radio-${t}__${o}`,id:`yst-ai-suggestions-radio-${t}__${o}`,name:`ai-suggestion__${t}`,isChecked:s.value===r,onChange:a,suggestion:s})))));it.propTypes={idSuffix:W().string.isRequired,suggestions:W().arrayOf(ot).isRequired,selected:W().string.isRequired,onChange:W().func.isRequired};const lt=({suggestionClassNames:t})=>(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst--space-y-[1px]"},t.map(((t,s)=>(0,e.createElement)("div",{key:`yst-ai-suggestion-radio-skeleton__${s}`,className:"yst-flex yst-p-4 yst-gap-x-3 yst-items-center yst-border first:yst-rounded-t-md last:yst-rounded-b-md"},(0,e.createElement)("input",{type:"radio",disabled:!0,className:"yst-my-0.5"}),(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-w-full"},t.map(((t,r)=>(0,e.createElement)(l.SkeletonLoader,{key:`yst-ai-suggestion-radio-skeleton-${s}__${r}`,className:t}))))))));lt.propTypes={suggestionClassNames:W().arrayOf(W().arrayOf(W().string))},lt.defaultProps={suggestionClassNames:[["yst-h-3 yst-w-full","yst-mt-2.5 yst-h-3 yst-w-9/12"],["yst-h-3 yst-w-full","yst-mt-2.5 yst-h-3 yst-w-7/12"],["yst-h-3 yst-w-full","yst-mt-2.5 yst-h-3 yst-w-10/12"],["yst-h-3 yst-w-full","yst-mt-2.5 yst-h-3 yst-w-11/12"],["yst-h-3 yst-w-full","yst-mt-2.5 yst-h-3 yst-w-8/12"]]};const ct="wpseo_premium_ai_generator",ut=({height:t})=>{const s=(0,r.useSelect)((e=>e(L).isAlertDismissed(ct)),[]),a=(0,r.useSelect)((e=>e(L).getEditorDataContent()),[]),o=(0,r.useSelect)((e=>e(L).getIsWooCommerceActive()),[]),[n,,,c]=(0,l.useToggleState)(!1),{editType:u,postType:m,contentType:p}=he(),{dismissAlert:d}=(0,r.useDispatch)(L),y=(0,G.useCallback)((()=>{d(ct)}),[d]),g=(0,G.useMemo)((()=>u===K?(0,i.__)("%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.","wordpress-seo-premium"):(0,i.__)("%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.","wordpress-seo-premium") +/* translators: %1$s and %2$s expand to opening and closing of a span in order to emphasise the word. */),[u]),w=(0,G.useMemo)((()=>((e,t,s)=>e===X&&s||t===J?150:300)(m,p,o)),[m,p,o]);if(s||n||a.length>w)return null;const h=`calc(${0===t?"50%":t/2+"px"} - 50vh)`;return(0,e.createElement)(l.Notifications,{className:"yst-mx-[calc(50%-50vw)] yst-transition-all",style:{marginTop:h,marginBottom:h},position:"bottom-left"},(0,e.createElement)(l.Notifications.Notification,{id:"ai-generator-content-tip",variant:"info",dismissScreenReaderLabel:(0,i.__)("Dismiss","wordpress-seo-premium")},(0,G.createInterpolateElement)((0,i.sprintf)(g,"",""),{span:(0,e.createElement)("span",{className:"yst-font-medium yst-text-slate-800"})}),(0,e.createElement)("div",{className:"yst-flex yst-mt-3 yst--ml-3 yst-gap-1"},(0,e.createElement)(l.Button,{type:"button",variant:"tertiary",onClick:y},(0,i.__)("Don’t show again","wordpress-seo-premium")),(0,e.createElement)(l.Button,{type:"button",variant:"tertiary",className:"yst-text-slate-800",onClick:c},(0,i.__)("Dismiss","wordpress-seo-premium")))))};ut.propTypes={height:W().number.isRequired};const mt=({title:t,description:s,showPreviewSkeleton:r})=>(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"yst-flex yst-mb-6"},(0,e.createElement)(l.Label,{as:"span",className:"yst-flex-grow yst-cursor-default"},(0,i.__)("X preview","wordpress-seo-premium"))),r?(0,e.createElement)(dt,null):(0,e.createElement)(pt,{title:t,description:s}));mt.propTypes={title:W().string.isRequired,description:W().string.isRequired,showPreviewSkeleton:W().bool.isRequired};const pt=({title:t,description:s})=>{const a=(0,r.useSelect)((e=>e(L).getSiteUrl()),[]),o=(0,r.useSelect)((e=>e(L).getTwitterImageUrl()),[]),n=(0,r.useSelect)((e=>e(L).getFacebookImageUrl()),[]),i=(0,r.useSelect)((e=>e(L).getEditorDataImageFallback()),[]),l=(0,r.useSelect)((e=>e(L).getTwitterImageType()),[]),u=(0,r.useSelect)((e=>e(L).getTwitterAltText()),[]);return(0,e.createElement)("div",{className:"yst-bg-slate-200 yst-p-2 yst--mx-6"},(0,e.createElement)(Ze.TwitterPreview,{title:t,description:s,siteUrl:a,imageUrl:o,imageFallbackUrl:n||i,isLarge:"summary"!==l,alt:u,onSelect:c.noop,onImageClick:c.noop,onMouseHover:c.noop}))};pt.propTypes={title:W().string.isRequired,description:W().string.isRequired};const dt=()=>(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-max-h-[370px] yst-w-[507px] yst-border yst-rounded-t-[14px] yst-overflow-hidden yst-mx-auto"},(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-[265px] yst-w-full yst-rounded-none yst-border yst-border-dashed"}),(0,e.createElement)("div",{className:"yst-w-full yst-p-4 yst-space-y-1"},(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-3 yst-w-1/3"}),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-5 yst-w-10/12"}),(0,e.createElement)(l.SkeletonLoader,{className:"yst-h-3 yst-w-full"}))),yt="appliedSuggestions",gt=(0,u.createSlice)({name:yt,initialState:{},reducers:{addAppliedSuggestion:(e,{payload:{editType:t,previewType:s,suggestion:r}})=>{e[s]={...e[s],[t]:r}}}}),wt=gt.getInitialState,ht={selectAppliedSuggestions:e=>(0,c.get)(e,yt,{})};ht.selectAppliedSuggestionFor=(0,u.createSelector)([ht.selectAppliedSuggestions,(e,t)=>t],((e,{editType:t,previewType:s})=>(0,c.get)(e,[s,t],"")));const ft=gt.actions,Et=gt.reducer,vt="productSubscriptions",bt=(0,u.createSlice)({name:vt,initialState:{premiumSubscription:!1,wooCommerceSubscription:!1},reducers:{}}),St=bt.getInitialState,_t={selectProductSubscriptions:e=>(0,c.get)(e,vt,!1),selectPremiumSubscription:e=>(0,c.get)(e,`${vt}.premiumSubscription`),selectWooCommerceSubscription:e=>(0,c.get)(e,`${vt}.wooCommerceSubscription`)},kt=bt.actions,xt=bt.reducer,Ct="promptContent",Nt=(0,u.createSlice)({name:Ct,initialState:"",reducers:{setPromptContent:(e,{payload:t})=>t}}),Tt=Nt.getInitialState,Pt={selectPromptContent:e=>(0,c.get)(e,Ct,"")},Rt=Nt.actions,At=Nt.reducer;let It=!1;const $t=()=>{It||(It=!0,"1"!==(0,c.get)(window,"wpseoPremiumAiGenerator.hasSeenIntroduction",!1)&&(()=>{try{f()({path:"yoast/v1/introductions/ai-generate-titles-and-descriptions/seen/",method:"POST"})}catch(e){}})())},Lt=["attachment","product_cat","product_tag"],Mt=(s,{fieldId:r,type:a})=>{const o=(0,c.get)(window,"wpseoPremiumAiGenerator.postType",""),n=(0,c.get)(window,"wpseoPremiumAiGenerator.contentType",""),i=(0,c.get)(window,"wpseoScriptData.woocommerceUpsell",!1);if(Lt.includes(o)||i)return s;const u=function(e){return e.startsWith("yoast-google-preview")?H:e.startsWith("social")?Y:e.startsWith("x-")?z:void 0}(r);if(!u)return s;const m=(0,c.get)(window,"wpseoScriptData.metabox.isRtl",!1);return s.push((0,e.createElement)(t.Fill,{name:`yoast.replacementVariableEditor.additionalButtons.${r}`},(0,e.createElement)(l.Root,{context:{isRtl:m}},(0,e.createElement)(we,{value:{editType:a,previewType:u,postType:o,contentType:n}},(0,e.createElement)(je,{onUseAi:$t}))))),s},qt=(e,t)=>It&&(0,r.select)(j).selectHasAiGeneratorConsent()?(de(t)&&e.push((0,i.__)("Please enter a valid focus keyphrase.","wordpress-seo-premium")),e):e,Ot=()=>{const{setPromptContent:e}=(0,r.dispatch)(j);return()=>{(e=>{const t=(0,c.get)(window,"wpseoPremiumAiGenerator.postType","")===X,s=(0,c.get)(window,"wpseoPremiumAiGenerator.contentType","")===J,r=(0,c.get)(window,"wpseoScriptData.isWooCommerceActive",!1),a=t&&r||s?150:300,o=(0,c.get)(window,"YoastSEO.analysis.worker.runResearch",c.noop),n=(0,c.get)(window,"YoastSEO.analysis.collectData",!1);o("getParagraphs",n?ne.Paper.parse(n()):null).then((t=>{let s="";if(t.result){const e=t.result;if(e){let t=0;e.forEach((e=>{e.sentences.forEach((e=>{if(t+=e.tokens.length,t>a)return s;s+=e.text})),s+=" ",t+=1}))}}e(s.trimEnd()||".")}))})(e)}},Ft=()=>{Ot(),(0,r.subscribe)((0,c.debounce)((()=>{const{getEditorDataContent:e}=(0,r.select)("yoast-seo/editor"),t=(0,c.get)(window,"yoast.editorModules.helpers.createWatcher",c.noop),s=Ot();return setTimeout(s,1500),t(e,s)})(),1500,{maxWait:3e3}))};o()((()=>{((e={})=>{(0,r.register)((e=>(0,r.createReduxStore)(j,{actions:{...g,...k,...ft,...kt,...Rt},selectors:{...y,..._,...ht,..._t,...Pt},initialState:(0,c.merge)({},{[m]:d(),[E]:S(),[yt]:wt(),[vt]:St(),[Ct]:Tt()},e),reducer:(0,r.combineReducers)({[m]:w,[E]:C,[yt]:Et,[vt]:xt,[Ct]:At}),controls:{...x}}))(e))})({[m]:(0,c.get)(window,"wpseoPremiumAiGenerator.adminUrl",""),[E]:"1"===(0,c.get)(window,"wpseoPremiumAiGenerator.hasConsent",!1),[vt]:(0,c.get)(window,"wpseoPremiumAiGenerator.productSubscriptions",{})}),(0,n.addFilter)("yoast.replacementVariableEditor.additionalButtons","yoast/yoast-seo-premium/AiGenerator",Mt),(0,n.addFilter)("yoast.focusKeyphrase.errors","yoast/yoast-seo-premium/AiGenerator",qt),(0,n.addAction)("yoast.elementor.loaded","yoast/yoast-seo-premium/AiGenerator",Ft)})),window.jQuery(window).on("YoastSEO:ready",(()=>{Ft()}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/blocks-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/blocks-2290.min.js new file mode 100644 index 00000000..4170c5e9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/blocks-2290.min.js @@ -0,0 +1,64 @@ +(()=>{"use strict";var e={865:(e,t,o)=>{var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=i(o(609)),s=i(o(848)),a=i(o(812));function i(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function u(e,t){var o,a,i,c,d,p,m,g,h=[],f={};for(p=0;p "+l);if("componentClose"===d.type)throw new Error("Missing opening component token: `"+d.value+"`");if("componentOpen"===d.type){o=t[d.value],i=p;break}h.push(t[d.value])}else h.push(d.value);return o&&(c=function(e,t){var o,n,r=t[e],s=0;for(n=e+1;n{function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},848:(e,t,o)=>{var n=o(609),r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,s=o(650),a=o(163),i=o(759),l=".",u=":",c="function"==typeof Symbol&&Symbol.iterator,d="@@iterator";function p(e,t){return e&&"object"==typeof e&&null!=e.key?(o=e.key,n={"=":"=0",":":"=2"},"$"+(""+o).replace(/[=:]/g,(function(e){return n[e]}))):t.toString(36);var o,n}function m(e,t,o,n){var s,i=typeof e;if("undefined"!==i&&"boolean"!==i||(e=null),null===e||"string"===i||"number"===i||"object"===i&&e.$$typeof===r)return o(n,e,""===t?l+p(e,0):t),1;var g=0,h=""===t?l:t+u;if(Array.isArray(e))for(var f=0;f{function t(e){return function(){return e}}var o=function(){};o.thatReturns=t,o.thatReturnsFalse=t(!1),o.thatReturnsTrue=t(!0),o.thatReturnsNull=t(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},163:e=>{e.exports=function(e,t,o,n,r,s,a,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[o,n,r,s,a,i],c=0;(l=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},759:(e,t,o)=>{var n=o(650);e.exports=n},609:e=>{e.exports=window.React}},t={};function o(n){var r=t[n];if(void 0!==r)return r.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,o),s.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e=window.lodash;var t=o(609);const n=window.wp.blocks,r=window.wp.blockEditor,s=window.wp.components,a=window.wp.data,i=window.wp.domReady;var l=o.n(i);const u=window.wp.element,c=window.wp.i18n,d=window.wp.a11y,p=window.wp.url,m=window.yoast.helpers;var g=o(865);const h=window.yoast.propTypes;var f=o.n(h);const b=window.yoast.styledComponents;var y=o.n(b);const w=window.yoast.componentsNew,v=window.yoast.styleGuide,k=y().div` + display: flex; + align-items: normal; + min-height: 40px; + margin: 10px 0 5px; +`,_=(0,m.createSvgIconComponent)({copy:{viewbox:"0 0 448 512",path:"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"},check:{viewbox:"0 0 512 512",path:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"}}),x=y().div` + background-color: #e5e5e5; + width: 100%; + height: 1px; +`,E=y().button` + box-sizing: border-box; + flex: 0 0 30px; + height: 30px; + width: 30px; + background-color: ${e=>e.iconBackground}; + border-radius: 5px; + cursor: pointer; + outline: none; + border: 1px solid ${e=>e.iconBorder}; + margin-left: 3px; + + &:focus { + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); + } +`;E.props={iconBackground:f().string,iconBorder:f().string},E.defaultProps={iconBackground:v.colors.$color_button,iconBorder:v.colors.$color_button_border};const A=y().div` + flex: auto; +`,S=(0,m.makeOutboundLink)(y().a` + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + /* -webkit-box-orient: vertical; */ + /* -moz-box-orient: vertical; */ + max-height: 40px; + margin-bottom: 4px; + -webkit-box-orient: vertical; + overflow: hidden; + padding: 0 0 4px; +`),C=y().div` + flex-wrap: wrap; + display: flex; + flex-direction: row; + justify-content: unset; + margin-top: 4px; +`,R=y().span` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + padding: 3px 8px; + font-size: 0.85em; + background-color: #f3f4f5; + border-radius: 2px; + margin-bottom: 4px; + margin-right: 4px; + text-transform: lowercase; +`,T=({badges:e})=>(0,t.createElement)(C,null,e.map(((e,o)=>(0,t.createElement)(R,{key:o},e))));T.propTypes={badges:f().array.isRequired};const B=({value:e,url:o,isActive:n,labels:r})=>{const s=(0,c.__)("Copy link","wordpress-seo-premium"),a=(0,c.sprintf)(/* translators: Hidden accessibility text; %s expands to the link value */ /* translators: Hidden accessibility text; %s expands to the link value */ +(0,c.__)("Copy link to suggested article: %s","wordpress-seo-premium"),e),i=(0,u.useCallback)((e=>{e.nativeEvent.target.setAttribute("aria-label",a),e.nativeEvent.target.setAttribute("data-label",s)}),[a,s]);let l="copy",d=v.colors.$color_black,p=v.colors.$color_button,m="#979797";return n&&(l="check",d=v.colors.$color_alert_success_text,p=v.colors.$color_alert_success_background,m=v.colors.$color_alert_success_background),(0,t.createElement)("div",null,(0,t.createElement)(x,null),(0,t.createElement)(k,{className:"yoast-link-suggestion__wrapper"},(0,t.createElement)(A,{className:"yoast-link-suggestion__container"},(0,t.createElement)(S,{href:o},e),(0,t.createElement)(T,{badges:r})),(0,t.createElement)(E,{type:"button",className:"yoast-link-suggestion__copy yoast-tooltip yoast-tooltip-alt yoast-tooltip-s",onBlur:i,"data-clipboard-text":o,"aria-label":a,"data-label":s,iconBackground:p,iconBorder:m},(0,t.createElement)(_,{icon:l,color:d}),(0,t.createElement)(w.ScreenReaderText,null,s))))};B.propTypes={value:f().string.isRequired,url:f().string.isRequired,isActive:f().bool,labels:f().array.isRequired},B.defaultProps={isActive:!1};const M=B,L=y().div` + display: table-cell; +`,P=(0,c.__)("We could not find any relevant articles on your website that you could link to from your post.","wordpress-seo-premium"),$=(0,c.__)("To improve your site structure, consider linking to other relevant posts or pages on your website.","wordpress-seo-premium");let N;const O=e=>{const t=(0,c.__)("Copied!","wordpress-seo-premium");e.trigger.focus(),e.trigger.setAttribute("aria-label",t),e.trigger.setAttribute("data-label",t),(0,d.speak)(t,"assertive")},j=e=>{const t=(0,c.__)("Not supported!","wordpress-seo-premium");e.trigger.el.setAttribute("aria-label",t),e.trigger.setAttribute("data-label",t),(0,d.speak)(t,"assertive")},I=({suggestions:e,maxSuggestions:o,customMessages:n,location:r})=>{const s=function(e){const o=(0,m.makeOutboundLink)(),n=(0,p.addQueryArgs)(wpseoAdminL10n["shortlinks.site_structure_metabox"],{context:e});return(0,g.A)({ +// Translators: Text between {{a}} and {{/a}} will be a link to an article about site structure. +mixedString:(0,c.__)("{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.","wordpress-seo-premium"),components:{a:(0,t.createElement)(o,{href:n})}})}(r);if(0===e.length){let e=n.lengthMessage;return e=""===e?P:e,(0,t.createElement)("div",null,(0,t.createElement)("p",null,e),(0,t.createElement)("p",null,n.metaMessage),(0,t.createElement)("p",null,s))}return e.length>o&&(e.length=o),(0,t.createElement)(L,null,(0,t.createElement)("p",null,$," ",s),(0,t.createElement)("p",null,n.metaMessage),e.map(((e,o)=>(0,t.createElement)(M,{key:o,...e}))))};I.propTypes={suggestions:f().array.isRequired,maxSuggestions:f().number,customMessages:f().object,location:f().string},I.defaultProps={maxSuggestions:10,customMessages:{lengthMessage:"",metaMessage:""},location:""};const D=()=>{window.open("admin.php?page=wpseo_tools&start-indexation=true","yoastSeoAnalyzeProminentWords")},F=()=>{ +/* translators: 1: link to yoast.com post about internal linking suggestion. 2: is anchor closing. + 3: button to the recalculation option. 4: closing button */ +let e=(0,c.__)("We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s","wordpress-seo-premium");return e=e.replace("%1$s","{{a}}"),e=e.replace("%2$s","{{/a}}"),e=e.replace("%3$s","{{startAnalysis}}"),e=e.replace("%4$s","{{/startAnalysis}}"),e=e.replace("\n\n","{{br /}}{{br /}}"),e=(0,g.A)({mixedString:e,components:{a:(0,t.createElement)("a",{href:wpseoAdminL10n["shortlinks.notification_internal_link"],target:"_blank"}),startAnalysis:(0,t.createElement)("button",{type:"button",className:"button",onClick:D}),br:(0,t.createElement)("br",null)}}),(0,t.createElement)("div",{className:"notice notice-warning notice-alt wpseo-notice-breakout-inside yoast-links-suggestions-notice"},(0,t.createElement)("p",null,e))},W=e=>{if((0,u.useEffect)((()=>(e.suggester.subscribe(),()=>{e.suggester.unsubscribe()})),[]),e.isLoading)return(0,t.createElement)("div",{className:"yoast-link-suggestions"},(0,t.createElement)("p",null,(0,c.__)("It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.","wordpress-seo-premium")));N||(N=new ClipboardJS(".yoast-link-suggestion__copy"),N.on("success",O),N.on("error",j));let o=null;e.showUnindexedWarning&&(o=F());const n=(e=>{let t="";e.hasWordsForLinking||(t=(0,c.__)("Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.","wordpress-seo-premium"));const o=((e,t,o)=>{switch(!0){case o&&!t&&""===e:return(0,c.__)("Add a title to your post for the best internal linking suggestions.","wordpress-seo-premium");case!o&&t&&""===e:return(0,c.__)("Add a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case!o&&!t&&""===e:return(0,c.__)("Add a title and a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case o&&!t&&""!==e:return(0,c.__)("Also, add a title to your post for the best internal linking suggestions.","wordpress-seo-premium");case!o&&t&&""!==e:return(0,c.__)("Also, add a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case!o&&!t&&""!==e:return(0,c.__)("Also, add a title and a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium")}})(t,e.hasTitle,e.hasMetaDescription);return{lengthMessage:t,metaMessage:o}})({...e.messageData,hasWordsForLinking:Array.isArray(e.wordsForLinking)&&e.wordsForLinking.length>0});return(0,t.createElement)("div",{className:"yoast-link-suggestions"},o,(0,t.createElement)(I,{suggestions:e.suggestions,customMessages:n,location:e.location}))};function H(e,t){for(const o of e)t(o),o.innerBlocks&&H(o.innerBlocks,t)}W.propTypes={suggester:f().object,suggestions:f().array.isRequired,wordsForLinking:f().array,messageData:f().object,isLoading:f().bool.isRequired,showUnindexedWarning:f().bool,location:f().string},W.defaultProps={suggester:null,showUnindexedWarning:!1,messageData:{hasMetaDescription:!1,hasTitle:!1},wordsForLinking:[],location:""};const q=window.yoast.editorModules.helpers.createInterpolateElement;function z(e,t,o,n){t!==o&&n(e,{status:t})}function V(t){if(!(0,a.select)("yoast-seo-premium/editor"))return void setTimeout(V.bind(null,t),500);(0,e.get)(YoastSEO,"analysis.linkSuggester")&&YoastSEO.analysis.linkSuggester.update();const{linkSuggestionsAreLoading:o}=(0,a.select)("yoast-seo-premium/editor"),{getBlockAttributes:n}=(0,a.select)("core/block-editor"),r=n(t);"loaded"!==r.status&&(o()?setTimeout(V.bind(null,t),500):function(e,t){const{linkSuggestionsAreUnindexed:o,getLinkSuggestions:n,getWordsForLinking:r}=(0,a.select)("yoast-seo-premium/editor"),{updateBlockAttributes:s}=(0,a.dispatch)("core/block-editor");if(o())return void z(e,"unindexed",t.status,s);const i=r();if(!Array.isArray(i)||0===i.length)return void z(e,"no-content",t.status,s);const l=n();0!==l.length?"loading"===t.status?s(e,{values:l.map((e=>`
    • ${e.value}
    • `)).join(""),status:"loaded"}):z(e,"has-suggestions",t.status,s):z(e,"no-suggestions",t.status,s)}(t,r))}function U(e,o="warning"){const n=`notice notice-${o} notice-alt wpseo-notice-breakout-inside yoast-links-suggestions-notice`;return(0,t.createElement)("div",{className:n},(0,t.createElement)("p",null,e))}function Y(){return(0,a.select)("yoast-seo-premium/editor")?(0,a.select)("yoast-seo-premium/editor").getLinkSuggestions():null}function G(){return(0,a.select)("yoast-seo-premium/editor")?(0,a.select)("yoast-seo-premium/editor").getWordsForLinking():null}const J=window.wp.hooks,Q=window.yoast.analysis,{stripHTMLTags:K}=Q.languageProcessing,X=(t,o)=>{const r=`h-${function(t){const o=new RegExp("[^\\p{L}\\p{N}]+","gu");return(0,e.trim)((0,e.deburr)(K(t)).replace(o,"-").toLowerCase(),"-")}((0,n.getBlockContent)(t))}`;let s=r,a=0;for(;o.includes(s);)s=`${r}-${a}`,a++;return s};const Z=e=>{const t=[];return H(e,(e=>{"core/heading"===e.name&&t.push(e.attributes.anchor)})),t};function ee(e,t){let o=e;for(;o&&o.level>=t;)o=o.parent;return o}function te(e){const o=e.map((e=>{let o=null;return e.children&&e.children.length>0&&(o=te(e.children)),(0,t.createElement)("li",{key:e.href},(0,t.createElement)("a",{href:e.href,"data-level":e.level},e.content),o)}));return(0,t.createElement)("ul",null,o)}function oe(e,t=99){return e&&0!==e.length?te(e=function(e){const t=[];let o;for(const n of e){const e=parseInt(n.level,10),r={children:[],parent:null,...n,level:e},s=ee(o,e);s?(r.parent=s,s.children.push(r)):t.push(r),o=r}return t}(e=e.filter((e=>e.level<=t)))):null}(0,J.addFilter)("blocks.switchToBlockType.transformedBlock","yoast-seo-table-of-contents/transformed-block",(t=>{if((0,e.isNil)(t.attributes.anchor)&&"core/heading"===t.name){const e=(0,a.select)("core/block-editor").getBlocks(),o=Z(e);t.attributes.anchor=X(t,o)}return t})),l()((()=>{window.wpseoPremiumMetaboxData?function(){let t=(0,a.select)("core/block-editor").getBlocks(),o=G(),n=Y();(0,a.subscribe)((()=>{const r=(0,a.select)("core/block-editor").getBlocks(),s=G(),i=Y(),l=!(0,e.isEqual)(t,r),u=!(0,e.isEqual)(o,s),c=!(0,e.isEqual)(n,i);(l||u||c)&&H(r,(e=>{"yoast-seo/related-links"===e.name&&(l&&"loading"===e.attributes.status?V(e.clientId):(u&&"no-content"===e.attributes.status&&V(e.clientId),c&&"loaded"!==e.attributes.status&&V(e.clientId)))})),t=r,o=s,n=i}))}():(0,n.unregisterBlockType)("yoast-seo/related-links")})),(0,n.registerBlockType)("yoast-seo/related-links",{title:(0,c.__)("Yoast Related Links","wordpress-seo-premium"),icon:"editor-ul",category:"yoast-internal-linking-blocks",description:(0,c.__)("Adds a list of links related to this page.","wordpress-seo-premium"),keywords:[(0,c.__)("seo","wordpress-seo-premium"),(0,c.__)("internal linking","wordpress-seo-premium"),(0,c.__)("site structure","wordpress-seo-premium"),(0,c.__)("related posts","wordpress-seo-premium"),(0,c.__)("related pages","wordpress-seo-premium")],attributes:{status:{type:"string",default:"loading"},values:{type:"string",source:"html",selector:"ul",multiline:"li",default:""}},example:{attributes:{status:"loaded",values:"
    • Related link 1
    • Related link 2
    • Related link 3
    • "}},edit:function({clientId:e,attributes:o,setAttributes:a,mergeBlocks:i,onReplace:l}){const{values:d,status:p}=o,m=()=>{a({status:"loading"}),V(e)};(0,u.useEffect)((()=>{"loaded"!==p&&m()}),[]);const g=(0,u.useCallback)((e=>{a({values:e})}),[a]),h=(0,u.useCallback)((e=>{(0,n.createBlock)(name,{...o,values:e})}),[o]),f=(0,u.useCallback)((()=>{l([])}),l);return window.wpseoPremiumMetaboxData.data.restApi.available&&window.wpseoPremiumMetaboxData.data.restApi.contentEndpointsAvailable&&"enabled"===window.wpseoPremiumMetaboxData.data.linkSuggestionsEnabled&&window.wpseoPremiumMetaboxData.data.linkSuggestionsAvailable||"loaded"===p?"loaded"!==p?function(e,o){if("unindexed"===e)return F();let n=(0,c.__)("We could not find any relevant articles on your website that you could link to from your post.","wordpress-seo-premium");return"no-content"===e&&(n=(0,c.__)("Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.","wordpress-seo-premium")),"loading"===e&&(n=(0,c.__)("It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.","wordpress-seo-premium")),"has-suggestions"===e&&(n=(0,t.createElement)(u.Fragment,null,n,(0,t.createElement)("br",null),(0,t.createElement)("br",null),(0,t.createElement)("button",{type:"button",className:"button",onClick:o},(0,c.__)("Load suggestions","wordpress-seo-premium")))),U(n)}(p,m):(0,t.createElement)(r.RichText,{identifier:"values",multiline:"li",tagName:"ul",onChange:g,value:d,placeholder:(0,c.__)("Write list…","wordpress-seo-premium"),onMerge:i,onSplit:h,onReplace:l,onRemove:f},(()=>(0,t.createElement)(r.BlockControls,null,(0,t.createElement)(s.ToolbarGroup,{controls:[{icon:"image-rotate",title:(0,c.__)("Refresh suggestions","wordpress-seo-premium"),isActive:!1,onClick:m}]})))):U(q((0,c.__)("You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.","wordpress-seo-premium"),{a:(0,t.createElement)("a",{href:wpseoPremiumMetaboxData.data.settingsPageUrl,target:"_blank"},"#21441-gutenberg")}),"error")},save:function({attributes:e}){return"loaded"!==e.status?null:(0,t.createElement)(r.RichText.Content,{tagName:"ul",multiline:"li",value:e.values})}}),(0,e.get)(window,"wpseoTOCData.data.disableTableOfContents",!1)||function(){const o=(0,e.get)(window,"wpseoTOCData.data",{}).TOCTitle;var i;l()((()=>{!function(){let t=null,o="",r=!1,s=[];const i={};(0,a.subscribe)((()=>{if(r)return;const l=(0,a.select)("core/block-editor").getBlocks(),u=[];if(t!==l){const t=[],c=[];let d="";r=!0;const p=Z(l).every((t=>(0,e.isUndefined)(t)));H(l,(o=>{if("core/heading"===o.name){const l=K((0,n.getBlockContent)(o)),c=o.attributes.level,m=function(t,o,r,s,i){let l=t.attributes.anchor;const u=o[t.clientId],c=K((0,n.getBlockContent)(t));return u&&u===c||l&&!l.startsWith("h-")||(l=function(t,o,r,s){return!(0,e.isNil)(t.attributes.anchor)||s||(0,e.isEmpty)((0,n.getBlockContent)(t))||r.includes(t.clientId)?X(t,o):""}(t,r,s,i),l!==t.attributes.anchor&&(0,a.dispatch)("core/block-editor").updateBlockAttributes(t.clientId,{anchor:l})),l}(o,i,u,s,p);if(i[o.clientId]=l,""===m||(0,e.isEmpty)(l))return;u.push(m),t.push({content:(r=l,(new DOMParser).parseFromString(r,"text/html").documentElement.textContent),href:"#"+m,level:c}),d+="$"+c+":"+m+":"+l}else c.push(o.clientId);var r})),H(l,(e=>{if("yoast-seo/table-of-contents"===e.name){const n=e.attributes.headings&&e.attributes.headings.length>0;(o!==d||t.length>0&&!n)&&(0,a.dispatch)("core/block-editor").updateBlockAttributes(e.clientId,{headings:t})}})),r=!1,o=d,s=c}t=l}))}()})),i=o,(0,n.registerBlockType)("yoast-seo/table-of-contents",{title:(0,c.__)("Yoast Table of Contents","wordpress-seo-premium"),icon:"editor-ul",category:"yoast-internal-linking-blocks",description:(0,c.__)("Adds a table of contents to this page.","wordpress-seo-premium"),keywords:[(0,c.__)("seo","wordpress-seo-premium"),(0,c.__)("links","wordpress-seo-premium"),(0,c.__)("site structure","wordpress-seo-premium"),(0,c.__)("toc","wordpress-seo-premium")],attributes:{title:{type:"string",source:"html",selector:"h1,h2,h3,h4,h5,h6",default:i},level:{type:"number",default:2},maxHeadingLevel:{type:"number",default:3},headings:{type:"array",source:"query",selector:"a",query:{content:{type:"string",source:"html"},href:{type:"string",source:"attribute",attribute:"href"},level:{type:"string",source:"attribute",attribute:"data-level"}}}},example:{attributes:{headings:[{content:"Heading 1",href:"#heading-1",level:"2"},{content:"Subheading 1",href:"#subheading-1",level:"3"},{content:"Subheading 2",href:"#subheading-2",level:"3"},{content:"Heading 2",href:"#heading-2",level:"2"}]}},edit:function({attributes:e,setAttributes:o}){const n=(0,u.useCallback)((e=>o({title:e})),[o]),a=(0,u.useCallback)((e=>o({level:e})),[o]),i=(0,u.useCallback)((e=>o({maxHeadingLevel:Number(e)})),[o]);return(0,t.createElement)(u.Fragment,null,(0,t.createElement)(r.BlockControls,null,(0,t.createElement)(s.ToolbarGroup,null,(0,t.createElement)(r.HeadingLevelDropdown,{value:e.level,options:[1,2,3,4,5,6],onChange:a}))),(0,t.createElement)(r.InspectorControls,null,(0,t.createElement)(s.PanelBody,{title:(0,c.__)("Settings","wordpress-seo-premium"),className:"yoast-table-of-contents-controls"},(0,t.createElement)(s.SelectControl,{label:(0,c.__)("Maximum heading level","wordpress-seo-premium"),value:e.maxHeadingLevel,options:[1,2,3,4,5,6].map((e=>({label:(0,c.sprintf)((0,c.__)("Heading %d"),e),value:e}))),onChange:i}))),(0,t.createElement)("div",{className:"yoast-table-of-contents"},(0,t.createElement)(r.RichText,{tagName:"h"+e.level,value:e.title,onChange:n}),oe(e.headings,e.maxHeadingLevel)))},save:function({attributes:e}){let o=null;return e.title&&(o=(0,t.createElement)(r.RichText.Content,{tagName:"h"+e.level,value:e.title})),(0,t.createElement)("div",{className:"yoast-table-of-contents"},o,oe(e.headings,e.maxHeadingLevel))},deprecated:[{attributes:{title:{type:"string",source:"html",selector:"h2",default:(0,c.__)("Table of contents","wordpress-seo-premium")},level:{type:"number",default:2},headings:{type:"array",source:"query",selector:"a",query:{content:{type:"string",source:"html"},href:{type:"string",source:"attribute",attribute:"href"},level:{type:"string",source:"attribute",attribute:"data-level"}}}},migrate:e=>({maxHeadingLevel:6,...e}),save:({attributes:e})=>{let o=null;return e.title&&(o=(0,t.createElement)(r.RichText.Content,{tagName:"h"+e.level,value:e.title})),(0,t.createElement)("div",{className:"yoast-table-of-contents"},o,oe(e.headings))}}]})}()})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/dynamic-blocks-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/dynamic-blocks-2290.min.js new file mode 100644 index 00000000..8a163ce7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/dynamic-blocks-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var a in s)e.o(s,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:s[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,s=window.lodash,a=window.wp.blockEditor,i=window.wp.blocks,n=window.wp.data,r=window.wp.domReady;var o=e.n(r);const l=window.wp.serverSideRender;var c=e.n(l);const m=window.wp.components,d=window.wp.i18n,p=window.wp.element,u=window.wp.hooks;function g(){(0,u.addFilter)("blocks.getSaveContent.extraProps","yoast/yoast-seo-premium/remove-extra-class",(e=>e.className?{...e,className:e.className.replace("wp-block-yoast-seo-estimated-reading-time ","")}:e),Number.MAX_SAFE_INTEGER)}const w=(0,t.createElement)(p.Fragment,null,(0,t.createElement)("span",{className:"yoast-reading-time__icon"},(0,t.createElement)("svg",{"aria-hidden":"true",focusable:"false","data-icon":"clock",width:"20",height:"20",fill:"none",stroke:"currentColor",style:{display:"inline-block",verticalAlign:"-0.1em"},role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,t.createElement)("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"}))),(0,t.createElement)("span",{className:"yoast-reading-time__spacer",style:{display:"inline-block",width:"1em"}})),_=(0,t.createElement)(p.Fragment,null,(0,t.createElement)("span",{className:"yoast-reading-time__icon"}),(0,t.createElement)("span",{className:"yoast-reading-time__spacer",style:"width:1em"})),y={v15_6:function({attributes:e}){const{estimatedReadingTime:s,descriptiveText:a,showDescriptiveText:i,showIcon:n}=e;return g(),(0,t.createElement)("p",{className:"yoast-reading-time__wrapper"},n?w:"",i?(0,t.createElement)("span",{className:"yoast-reading-time__descriptive-text"},a," "):"",(0,t.createElement)("span",{className:"yoast-reading-time__reading-time"},s),(0,t.createElement)("span",{className:"yoast-reading-time__time-unit"}," "+(0,d._n)("minute","minutes",s,"wordpress-seo-premium")))},v15_6_nonAdmin:function({attributes:e}){const{estimatedReadingTime:s,descriptiveText:a,showDescriptiveText:i,showIcon:n}=e;return g(),(0,t.createElement)("p",{className:"yoast-reading-time__wrapper"},n?_:"",i?(0,t.createElement)("span",{className:"yoast-reading-time__descriptive-text"},a," "):"",(0,t.createElement)("span",{className:"yoast-reading-time__reading-time"},s),(0,t.createElement)("span",{className:"yoast-reading-time__time-unit"}," "+(0,d._n)("minute","minutes",s,"wordpress-seo-premium")))},v15_8:function({attributes:e}){const{className:s,estimatedReadingTime:a,descriptiveText:i,showDescriptiveText:n,showIcon:r}=e;return(0,t.createElement)("p",{className:s?`yoast-reading-time__wrapper ${s}`:"yoast-reading-time__wrapper"},r?"ICON_PLACEHOLDER":null,n?(0,t.createElement)("span",{className:"yoast-reading-time__descriptive-text"},i," "):null,(0,t.createElement)("span",{className:"yoast-reading-time__reading-time"},a),(0,t.createElement)("span",{className:"yoast-reading-time__time-unit"}," "+(0,d._n)("minute","minutes",a,"wordpress-seo-premium")))}},b=(0,t.createElement)("span",{className:"yoast-reading-time__icon"}),h=(0,t.createElement)(p.Fragment,null,(0,t.createElement)("span",{className:"yoast-reading-time__icon"},(0,t.createElement)("svg",{"aria-hidden":"true",focusable:"false","data-icon":"clock",width:"20",height:"20",fill:"none",stroke:"currentColor",style:{display:"inline-block",verticalAlign:"-0.1em"},role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,t.createElement)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"}))),(0,t.createElement)("span",{className:"yoast-reading-time__spacer",style:{display:"inline-block",width:"1em"}}));function v({attributes:e,useIconPlaceholder:s=!1}){const{className:a,estimatedReadingTime:i,descriptiveText:n,showDescriptiveText:r,showIcon:o}=e,l=s?b:h;return(0,t.createElement)("p",{className:a?`yoast-reading-time__wrapper ${a}`:"yoast-reading-time__wrapper"},o?l:null,r?(0,t.createElement)("span",{className:"yoast-reading-time__descriptive-text"},n," "):null,(0,t.createElement)("span",{className:"yoast-reading-time__reading-time"},i),(0,t.createElement)("span",{className:"yoast-reading-time__time-unit"}," "+(0,d._n)("minute","minutes",i,"wordpress-seo-premium")))}function E({attributes:e}){return(0,t.createElement)(v,{attributes:e,useIconPlaceholder:!0})}const k=(0,n.withSelect)(((e,t)=>{let s=t.attributes.estimatedReadingTime;return e("yoast-seo/editor")&&(s=e("yoast-seo/editor").getEstimatedReadingTime()),"string"==typeof s&&(s=parseInt(s,10)),{attributes:{...t.attributes,estimatedReadingTime:s}}}))((function({attributes:e,setAttributes:s}){const{estimatedReadingTime:i,descriptiveText:n,showDescriptiveText:r,showIcon:o}=e;(0,p.useEffect)((()=>s({estimatedReadingTime:i})),[i]);const l=(0,p.useCallback)((e=>s({descriptiveText:e})),[n]),c=(0,p.useCallback)((()=>s({showDescriptiveText:!r})),[r]),u=(0,p.useCallback)((()=>s({showIcon:!o})),[o]);return(0,t.createElement)("div",null,(0,t.createElement)(a.InspectorControls,null,(0,t.createElement)(m.PanelBody,{title:(0,d.__)("Settings","wordpress-seo-premium"),className:"yoast-reading-time-controls"},(0,t.createElement)(m.TextControl,{label:(0,d.__)("Descriptive text","wordpress-seo-premium"),value:n,onChange:l}),(0,t.createElement)(m.ToggleControl,{label:(0,d.__)("Show the descriptive text","wordpress-seo-premium"),checked:r,onChange:c}),(0,t.createElement)(m.ToggleControl,{label:(0,d.__)("Show icon","wordpress-seo-premium"),checked:o,onChange:u}))),(0,t.createElement)(v,{attributes:e}))})),T=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"version":"23.0","name":"yoast-seo/siblings","title":"Yoast Siblings","description":"Adds a list of internal links to sibling pages which share the same parent.","category":"yoast-internal-linking-blocks","icon":"editor-ul","keywords":["SEO","siblings","siblings pages","internal linking","site structure"],"textdomain":"wordpress-seo-premium","attributes":{},"example":{"attributes":{}}}'),N=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"version":"23.0","name":"yoast-seo/subpages","title":"Yoast Subpages","description":"Adds a list of internal links to subpages of this page.","category":"yoast-internal-linking-blocks","icon":"editor-ul","keywords":["SEO","subpages","childpages","children","internal linking","site structure"],"textdomain":"wordpress-seo-premium","attributes":{},"example":{"attributes":{}}}');o()((()=>{window._wpLoadBlockEditor&&window._wpLoadBlockEditor.then((()=>{const e=setInterval((()=>{const t=(()=>{const{getPostType:e}=(0,n.select)("core"),{getEditedPostAttribute:t}=(0,n.select)("core/editor"),a=t("type");if(null===a)return null;const i=e(a);return i?(0,s.get)(i,["hierarchical"],!1):null})();if(null===t)return;const a=((0,n.select)("core/block-editor").getBlocks()||[]).map((e=>e.name)),r=a.includes("yoast-seo/subpages")||a.includes("yoast-seo/siblings");!1===t&&!1===r&&((0,i.unregisterBlockType)("yoast-seo/subpages"),(0,i.unregisterBlockType)("yoast-seo/siblings")),clearInterval(e)}),250)}))})),(0,i.registerBlockType)(T,{edit:function(e){const s=(0,a.useBlockProps)();return(0,t.createElement)("div",{...s},(0,t.createElement)(c(),{block:"yoast-seo/siblings",attributes:e.attributes}))},save:function(){return null}}),(0,i.registerBlockType)(N,{edit:function(e){const s=(0,a.useBlockProps)();return(0,t.createElement)("div",{...s},(0,t.createElement)(c(),{block:"yoast-seo/subpages",attributes:e.attributes}))},save:function(){return null}}),function(){const e={estimatedReadingTime:{type:"number",default:0},descriptiveText:{type:"string",default:(0,d.__)("Estimated reading time:","wordpress-seo-premium")+" "},showDescriptiveText:{type:"boolean",default:!0},showIcon:{type:"boolean",default:!0}};(0,i.registerBlockType)("yoast-seo/estimated-reading-time",{title:(0,d.__)("Yoast Estimated Reading Time","wordpress-seo-premium"),icon:"clock",category:"yoast-structured-data-blocks",description:(0,d.__)("Shows an estimated reading time based on the content length.","wordpress-seo-premium"),keywords:[(0,d.__)("seo","wordpress-seo-premium"),(0,d.__)("reading time","wordpress-seo-premium"),(0,d.__)("content length","wordpress-seo-premium")],attributes:e,example:{attributes:{}},edit:k,save:E,deprecated:[{attributes:e,save:y.v15_6},{attributes:e,save:y.v15_6_nonAdmin},{attributes:e,save:y.v15_8}]})}()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/frontend-inspector-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/frontend-inspector-2290.min.js new file mode 100644 index 00000000..e143654a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/frontend-inspector-2290.min.js @@ -0,0 +1 @@ +(()=>{var e={11:function(e,t,n){var r;e.exports=(r=n(609),function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=48)}([function(e,t){e.exports=r},function(e,t){var n=e.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},function(e,t,n){var r=n(26)("wks"),a=n(17),o=n(3).Symbol,s="function"==typeof o;(e.exports=function(e){return r[e]||(r[e]=s&&o[e]||(s?o:a)("Symbol."+e))}).store=r},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,n){e.exports=!n(8)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(7),a=n(16);e.exports=n(4)?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(10),a=n(35),o=n(23),s=Object.defineProperty;t.f=n(4)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),a)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var r=n(40),a=n(22);e.exports=function(e){return r(a(e))}},function(e,t,n){var r=n(11);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports={}},function(e,t,n){var r=n(39),a=n(27);e.exports=Object.keys||function(e){return r(e,a)}},function(e,t){e.exports=!0},function(e,t,n){var r=n(3),a=n(1),o=n(53),s=n(6),i=n(5),c=function(e,t,n){var l,u,d,p=e&c.F,f=e&c.G,b=e&c.S,h=e&c.P,m=e&c.B,v=e&c.W,y=f?a:a[t]||(a[t]={}),g=y.prototype,E=f?r:b?r[t]:(r[t]||{}).prototype;for(l in f&&(n=t),n)(u=!p&&E&&void 0!==E[l])&&i(y,l)||(d=u?E[l]:n[l],y[l]=f&&"function"!=typeof E[l]?n[l]:m&&u?o(d,r):v&&E[l]==d?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(d):h&&"function"==typeof d?o(Function.call,d):d,h&&((y.virtual||(y.virtual={}))[l]=d,e&c.R&&g&&!g[l]&&s(g,l,d)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(22);e.exports=function(e){return Object(r(e))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){"use strict";var r=n(52)(!0);n(34)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var r=n(11);e.exports=function(e,t){if(!r(e))return e;var n,a;if(t&&"function"==typeof(n=e.toString)&&!r(a=n.call(e)))return a;if("function"==typeof(n=e.valueOf)&&!r(a=n.call(e)))return a;if(!t&&"function"==typeof(n=e.toString)&&!r(a=n.call(e)))return a;throw TypeError("Can't convert object to primitive value")}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(26)("keys"),a=n(17);e.exports=function(e){return r[e]||(r[e]=a(e))}},function(e,t,n){var r=n(1),a=n(3),o=a["__core-js_shared__"]||(a["__core-js_shared__"]={});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(14)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var r=n(7).f,a=n(5),o=n(2)("toStringTag");e.exports=function(e,t,n){e&&!a(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){n(62);for(var r=n(3),a=n(6),o=n(12),s=n(2)("toStringTag"),i="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),c=0;cdocument.F=Object<\/script>"),e.close(),c=e.F;r--;)delete c.prototype[o[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(i.prototype=r(e),n=new i,i.prototype=null,n[s]=e):n=c(),void 0===t?n:a(n,t)}},function(e,t,n){var r=n(5),a=n(9),o=n(57)(!1),s=n(25)("IE_PROTO");e.exports=function(e,t){var n,i=a(e),c=0,l=[];for(n in i)n!=s&&r(i,n)&&l.push(n);for(;t.length>c;)r(i,n=t[c++])&&(~o(l,n)||l.push(n));return l}},function(e,t,n){var r=n(24);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(39),a=n(27).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,a)}},function(e,t,n){var r=n(24),a=n(2)("toStringTag"),o="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),a))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){var n=/-?\d+(\.\d+)?%?/g;e.exports=function(e){return e.match(n)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getBase16Theme=t.createStyling=t.invertTheme=void 0;var r=f(n(49)),a=f(n(76)),o=f(n(81)),s=f(n(89)),i=f(n(93)),c=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(94)),l=f(n(132)),u=f(n(133)),d=f(n(138)),p=n(139);function f(e){return e&&e.__esModule?e:{default:e}}var b=c.default,h=(0,s.default)(b),m=(0,d.default)(u.default,p.rgb2yuv,(function(e){var t,n=(0,o.default)(e,3);return[(t=n[0],t<.25?1:t<.5?.9-t:1.1-t),n[1],n[2]]}),p.yuv2rgb,l.default),v=function(e){return function(t){return{className:[t.className,e.className].filter(Boolean).join(" "),style:(0,a.default)({},t.style||{},e.style||{})}}},y=function(e,t){var n=(0,s.default)(t);for(var o in e)-1===n.indexOf(o)&&n.push(o);return n.reduce((function(n,o){return n[o]=function(e,t){if(void 0===e)return t;if(void 0===t)return e;var n=void 0===e?"undefined":(0,r.default)(e),o=void 0===t?"undefined":(0,r.default)(t);switch(n){case"string":switch(o){case"string":return[t,e].filter(Boolean).join(" ");case"object":return v({className:e,style:t});case"function":return function(n){for(var r=arguments.length,a=Array(r>1?r-1:0),o=1;o1?r-1:0),o=1;o1?r-1:0),o=1;o1?r-1:0),o=1;o1?r-1:0),o=1;o2?n-2:0),i=2;i3?t-3:0),r=3;r1&&void 0!==arguments[1]?arguments[1]:{},c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=o.defaultBase16,u=void 0===l?b:l,d=o.base16Themes,p=x(c,void 0===d?null:d);p&&(c=(0,a.default)({},p,c));var f=h.reduce((function(e,t){return e[t]=c[t]||u[t],e}),{}),m=(0,s.default)(c).reduce((function(e,t){return-1===h.indexOf(t)?(e[t]=c[t],e):e}),{}),v=e(f),E=y(m,v);return(0,i.default)(g,2).apply(void 0,[E].concat(n))}),3),t.getBase16Theme=function(e,t){if(e&&e.extend&&(e=e.extend),"string"==typeof e){var n=e.split(":"),r=(0,o.default)(n,2),a=r[0],s=r[1];e=(t||{})[a]||c[a],"inverted"===s&&(e=E(e))}return e&&e.hasOwnProperty("base00")?e:void 0})},function(e,t,n){"use strict";var r,a="object"==typeof Reflect?Reflect:null,o=a&&"function"==typeof a.apply?a.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};r=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise((function(n,r){function a(){void 0!==o&&e.removeListener("error",o),n([].slice.call(arguments))}var o;"error"!==t&&(o=function(n){e.removeListener(t,a),r(n)},e.once("error",o)),e.once(t,a)}))},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var c=10;function l(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function u(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function d(e,t,n,r){var a,o,s,i;if(l(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),s=o[t]),void 0===s)s=o[t]=n,++e._eventsCount;else if("function"==typeof s?s=o[t]=r?[n,s]:[s,n]:r?s.unshift(n):s.push(n),(a=u(e))>0&&s.length>a&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,i=c,console&&console.warn&&console.warn(i)}return e}function p(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},a=p.bind(r);return a.listener=n,r.wrapFn=a,a}function b(e,t,n){var r=e._events;if(void 0===r)return[];var a=r[t];return void 0===a?[]:"function"==typeof a?n?[a.listener||a]:[a]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(s=t[0]),s instanceof Error)throw s;var i=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw i.context=s,i}var c=a[e];if(void 0===c)return!1;if("function"==typeof c)o(c,this,t);else{var l=c.length,u=m(c,l);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){s=n[o].listener,a=o;break}if(a<0)return this;0===a?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return b(this,e,!0)},i.prototype.rawListeners=function(e){return b(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},i.prototype.listenerCount=h,i.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){e.exports.Dispatcher=n(140)},function(e,t,n){e.exports=n(142)},function(e,t,n){"use strict";t.__esModule=!0;var r=s(n(50)),a=s(n(65)),o="function"==typeof a.default&&"symbol"==typeof r.default?function(e){return typeof e}:function(e){return e&&"function"==typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":typeof e};function s(e){return e&&e.__esModule?e:{default:e}}t.default="function"==typeof a.default&&"symbol"===o(r.default)?function(e){return void 0===e?"undefined":o(e)}:function(e){return e&&"function"==typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":void 0===e?"undefined":o(e)}},function(e,t,n){e.exports={default:n(51),__esModule:!0}},function(e,t,n){n(20),n(29),e.exports=n(30).f("iterator")},function(e,t,n){var r=n(21),a=n(22);e.exports=function(e){return function(t,n){var o,s,i=String(a(t)),c=r(n),l=i.length;return c<0||c>=l?e?"":void 0:(o=i.charCodeAt(c))<55296||o>56319||c+1===l||(s=i.charCodeAt(c+1))<56320||s>57343?e?i.charAt(c):o:e?i.slice(c,c+2):s-56320+(o-55296<<10)+65536}}},function(e,t,n){var r=n(54);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,a){return e.call(t,n,r,a)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){"use strict";var r=n(38),a=n(16),o=n(28),s={};n(6)(s,n(2)("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=r(s,{next:a(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var r=n(7),a=n(10),o=n(13);e.exports=n(4)?Object.defineProperties:function(e,t){a(e);for(var n,s=o(t),i=s.length,c=0;i>c;)r.f(e,n=s[c++],t[n]);return e}},function(e,t,n){var r=n(9),a=n(58),o=n(59);e.exports=function(e){return function(t,n,s){var i,c=r(t),l=a(c.length),u=o(s,l);if(e&&n!=n){for(;l>u;)if((i=c[u++])!=i)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}}},function(e,t,n){var r=n(21),a=Math.min;e.exports=function(e){return e>0?a(r(e),9007199254740991):0}},function(e,t,n){var r=n(21),a=Math.max,o=Math.min;e.exports=function(e,t){return(e=r(e))<0?a(e+t,0):o(e,t)}},function(e,t,n){var r=n(3).document;e.exports=r&&r.documentElement},function(e,t,n){var r=n(5),a=n(18),o=n(25)("IE_PROTO"),s=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=a(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},function(e,t,n){"use strict";var r=n(63),a=n(64),o=n(12),s=n(9);e.exports=n(34)(Array,"Array",(function(e,t){this._t=s(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,a(1)):a(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){e.exports={default:n(66),__esModule:!0}},function(e,t,n){n(67),n(73),n(74),n(75),e.exports=n(1).Symbol},function(e,t,n){"use strict";var r=n(3),a=n(5),o=n(4),s=n(15),i=n(37),c=n(68).KEY,l=n(8),u=n(26),d=n(28),p=n(17),f=n(2),b=n(30),h=n(31),m=n(69),v=n(70),y=n(10),g=n(11),E=n(18),x=n(9),w=n(23),j=n(16),k=n(38),_=n(71),S=n(72),C=n(32),O=n(7),A=n(13),F=S.f,M=O.f,P=_.f,R=r.Symbol,I=r.JSON,D=I&&I.stringify,L=f("_hidden"),N=f("toPrimitive"),T={}.propertyIsEnumerable,B=u("symbol-registry"),z=u("symbols"),q=u("op-symbols"),V=Object.prototype,K="function"==typeof R&&!!C.f,W=r.QObject,H=!W||!W.prototype||!W.prototype.findChild,U=o&&l((function(){return 7!=k(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=F(V,t);r&&delete V[t],M(e,t,n),r&&e!==V&&M(V,t,r)}:M,Y=function(e){var t=z[e]=k(R.prototype);return t._k=e,t},$=K&&"symbol"==typeof R.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof R},G=function(e,t,n){return e===V&&G(q,t,n),y(e),t=w(t,!0),y(n),a(z,t)?(n.enumerable?(a(e,L)&&e[L][t]&&(e[L][t]=!1),n=k(n,{enumerable:j(0,!1)})):(a(e,L)||M(e,L,j(1,{})),e[L][t]=!0),U(e,t,n)):M(e,t,n)},J=function(e,t){y(e);for(var n,r=m(t=x(t)),a=0,o=r.length;o>a;)G(e,n=r[a++],t[n]);return e},X=function(e){var t=T.call(this,e=w(e,!0));return!(this===V&&a(z,e)&&!a(q,e))&&(!(t||!a(this,e)||!a(z,e)||a(this,L)&&this[L][e])||t)},Q=function(e,t){if(e=x(e),t=w(t,!0),e!==V||!a(z,t)||a(q,t)){var n=F(e,t);return!n||!a(z,t)||a(e,L)&&e[L][t]||(n.enumerable=!0),n}},Z=function(e){for(var t,n=P(x(e)),r=[],o=0;n.length>o;)a(z,t=n[o++])||t==L||t==c||r.push(t);return r},ee=function(e){for(var t,n=e===V,r=P(n?q:x(e)),o=[],s=0;r.length>s;)!a(z,t=r[s++])||n&&!a(V,t)||o.push(z[t]);return o};K||(i((R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(n){this===V&&t.call(q,n),a(this,L)&&a(this[L],e)&&(this[L][e]=!1),U(this,e,j(1,n))};return o&&H&&U(V,e,{configurable:!0,set:t}),Y(e)}).prototype,"toString",(function(){return this._k})),S.f=Q,O.f=G,n(41).f=_.f=Z,n(19).f=X,C.f=ee,o&&!n(14)&&i(V,"propertyIsEnumerable",X,!0),b.f=function(e){return Y(f(e))}),s(s.G+s.W+s.F*!K,{Symbol:R});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ne=0;te.length>ne;)f(te[ne++]);for(var re=A(f.store),ae=0;re.length>ae;)h(re[ae++]);s(s.S+s.F*!K,"Symbol",{for:function(e){return a(B,e+="")?B[e]:B[e]=R(e)},keyFor:function(e){if(!$(e))throw TypeError(e+" is not a symbol!");for(var t in B)if(B[t]===e)return t},useSetter:function(){H=!0},useSimple:function(){H=!1}}),s(s.S+s.F*!K,"Object",{create:function(e,t){return void 0===t?k(e):J(k(e),t)},defineProperty:G,defineProperties:J,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:ee});var oe=l((function(){C.f(1)}));s(s.S+s.F*oe,"Object",{getOwnPropertySymbols:function(e){return C.f(E(e))}}),I&&s(s.S+s.F*(!K||l((function(){var e=R();return"[null]"!=D([e])||"{}"!=D({a:e})||"{}"!=D(Object(e))}))),"JSON",{stringify:function(e){for(var t,n,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(n=t=r[1],(g(t)||void 0!==e)&&!$(e))return v(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!$(t))return t}),r[1]=t,D.apply(I,r)}}),R.prototype[N]||n(6)(R.prototype,N,R.prototype.valueOf),d(R,"Symbol"),d(Math,"Math",!0),d(r.JSON,"JSON",!0)},function(e,t,n){var r=n(17)("meta"),a=n(11),o=n(5),s=n(7).f,i=0,c=Object.isExtensible||function(){return!0},l=!n(8)((function(){return c(Object.preventExtensions({}))})),u=function(e){s(e,r,{value:{i:"O"+ ++i,w:{}}})},d=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!c(e))return"F";if(!t)return"E";u(e)}return e[r].i},getWeak:function(e,t){if(!o(e,r)){if(!c(e))return!0;if(!t)return!1;u(e)}return e[r].w},onFreeze:function(e){return l&&d.NEED&&c(e)&&!o(e,r)&&u(e),e}}},function(e,t,n){var r=n(13),a=n(32),o=n(19);e.exports=function(e){var t=r(e),n=a.f;if(n)for(var s,i=n(e),c=o.f,l=0;i.length>l;)c.call(e,s=i[l++])&&t.push(s);return t}},function(e,t,n){var r=n(24);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(9),a=n(41).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return s&&"[object Window]"==o.call(e)?function(e){try{return a(e)}catch(e){return s.slice()}}(e):a(r(e))}},function(e,t,n){var r=n(19),a=n(16),o=n(9),s=n(23),i=n(5),c=n(35),l=Object.getOwnPropertyDescriptor;t.f=n(4)?l:function(e,t){if(e=o(e),t=s(t,!0),c)try{return l(e,t)}catch(e){}if(i(e,t))return a(!r.f.call(e,t),e[t])}},function(e,t){},function(e,t,n){n(31)("asyncIterator")},function(e,t,n){n(31)("observable")},function(e,t,n){"use strict";t.__esModule=!0;var r,a=(r=n(77))&&r.__esModule?r:{default:r};t.default=a.default||function(e){for(var t=1;tu;)for(var f,b=c(arguments[u++]),h=d?a(b).concat(d(b)):a(b),m=h.length,v=0;m>v;)f=h[v++],r&&!p.call(b,f)||(n[f]=b[f]);return n}:l},function(e,t,n){"use strict";t.__esModule=!0;var r=o(n(82)),a=o(n(85));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if(Array.isArray(e))return e;if((0,r.default)(Object(e)))return function(e,t){var n=[],r=!0,o=!1,s=void 0;try{for(var i,c=(0,a.default)(e);!(r=(i=c.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,s=e}finally{try{!r&&c.return&&c.return()}finally{if(o)throw s}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t,n){e.exports={default:n(83),__esModule:!0}},function(e,t,n){n(29),n(20),e.exports=n(84)},function(e,t,n){var r=n(42),a=n(2)("iterator"),o=n(12);e.exports=n(1).isIterable=function(e){var t=Object(e);return void 0!==t[a]||"@@iterator"in t||o.hasOwnProperty(r(t))}},function(e,t,n){e.exports={default:n(86),__esModule:!0}},function(e,t,n){n(29),n(20),e.exports=n(87)},function(e,t,n){var r=n(10),a=n(88);e.exports=n(1).getIterator=function(e){var t=a(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},function(e,t,n){var r=n(42),a=n(2)("iterator"),o=n(12);e.exports=n(1).getIteratorMethod=function(e){if(null!=e)return e[a]||e["@@iterator"]||o[r(e)]}},function(e,t,n){e.exports={default:n(90),__esModule:!0}},function(e,t,n){n(91),e.exports=n(1).Object.keys},function(e,t,n){var r=n(18),a=n(13);n(92)("keys",(function(){return function(e){return a(r(e))}}))},function(e,t,n){var r=n(15),a=n(1),o=n(8);e.exports=function(e,t){var n=(a.Object||{})[e]||Object[e],s={};s[e]=t(n),r(r.S+r.F*o((function(){n(1)})),"Object",s)}},function(e,t,n){(function(t){var n=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],r=/^\s+|\s+$/g,a=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,o=/\{\n\/\* \[wrapped with (.+)\] \*/,s=/,? & /,i=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^\[object .+?Constructor\]$/,u=/^0o[0-7]+$/i,d=/^(?:0|[1-9]\d*)$/,p=parseInt,f="object"==typeof t&&t&&t.Object===Object&&t,b="object"==typeof self&&self&&self.Object===Object&&self,h=f||b||Function("return this")();function m(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function v(e){return e!=e}function y(e,t){for(var n=-1,r=e.length,a=0,o=[];++n2?E:void 0);function I(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=function(e){return H(e)?F(e):{}}(e.prototype),r=e.apply(n,t);return H(r)?r:n}}function D(e,t,n,r,a,o,s,i,c,l){var u=128&t,d=1&t,p=2&t,f=24&t,b=512&t,m=p?void 0:I(e);return function v(){for(var g=arguments.length,E=Array(g),x=g;x--;)E[x]=arguments[x];if(f)var w=N(v),j=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&r++;return r}(E,w);if(r&&(E=function(e,t,n,r){for(var a=-1,o=e.length,s=n.length,i=-1,c=t.length,l=M(o-s,0),u=Array(c+l),d=!r;++i1&&E.reverse(),u&&c1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(a,"{\n/* [wrapped with "+t+"] */\n")}function q(e,t){return!!(t=null==t?9007199254740991:t)&&("number"==typeof e||d.test(e))&&e>-1&&e%1==0&&e-1}(e,r)&&e.push(r)})),e.sort()}function W(e,t,n){var r=function(e,t,n,r,a,o,s,i){var c=2&t;if(!c&&"function"!=typeof e)throw new TypeError("Expected a function");var l=r?r.length:0;if(l||(t&=-97,r=a=void 0),s=void 0===s?s:M(U(s),0),i=void 0===i?i:U(i),l-=a?a.length:0,64&t){var u=r,d=a;r=a=void 0}var p=[e,t,n,r,a,u,d,o,s,i];if(e=p[0],t=p[1],n=p[2],r=p[3],a=p[4],!(i=p[9]=null==p[9]?c?0:e.length:M(p[9]-l,0))&&24&t&&(t&=-25),t&&1!=t)f=8==t||16==t?function(e,t,n){var r=I(e);return function a(){for(var o=arguments.length,s=Array(o),i=o,c=N(a);i--;)s[i]=arguments[i];var l=o<3&&s[0]!==c&&s[o-1]!==c?[]:y(s,c);return(o-=l.length)1&&r--,o=6*r<1?t+6*(n-t)*r:2*r<1?n:3*r<2?t+(n-t)*(2/3-r)*6:t,a[l]=255*o;return a}},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t,r="object"==typeof self&&self&&self.Object===Object&&self,a=n||r||Function("return this")();function o(e,t){for(var n=-1,r=t.length,a=e.length;++n-1&&e%1==0&&e<=9007199254740991}(e.length)&&!function(e){var t=function(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}(e)?c.call(e):"";return"[object Function]"==t||"[object GeneratorFunction]"==t}(e)}(e)}(e)&&i.call(e,"callee")&&(!u.call(e,"callee")||"[object Arguments]"==c.call(e))}(e)||!!(d&&e&&e[d])}var b,h,m=Array.isArray,v=(b=function(e){for(var t=(e=function e(t,n,r,a,s){var i=-1,c=t.length;for(r||(r=f),s||(s=[]);++i0&&r(l)?n>1?e(l,n-1,r,a,s):o(s,l):a||(s[s.length]=l)}return s}(e,1)).length,n=t;n--;)if("function"!=typeof e[n])throw new TypeError("Expected a function");return function(){for(var n=0,r=t?e[n].apply(this,arguments):arguments[0];++n2?n-2:0),a=2;a=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function w(e){var t=function(e){return{}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase()}(e);return"number"===t&&(t=isNaN(e)?"nan":(0|e)!=e?"float":"integer"),t}v.__suppressDeprecationWarning=!0,y.__suppressDeprecationWarning=!0,g.__suppressDeprecationWarning=!0;var j={scheme:"rjv-default",author:"mac gainor",base00:"rgba(0, 0, 0, 0)",base01:"rgb(245, 245, 245)",base02:"rgb(235, 235, 235)",base03:"#93a1a1",base04:"rgba(0, 0, 0, 0.3)",base05:"#586e75",base06:"#073642",base07:"#002b36",base08:"#d33682",base09:"#cb4b16",base0A:"#dc322f",base0B:"#859900",base0C:"#6c71c4",base0D:"#586e75",base0E:"#2aa198",base0F:"#268bd2"},k={scheme:"rjv-grey",author:"mac gainor",base00:"rgba(1, 1, 1, 0)",base01:"rgba(1, 1, 1, 0.1)",base02:"rgba(0, 0, 0, 0.2)",base03:"rgba(1, 1, 1, 0.3)",base04:"rgba(0, 0, 0, 0.4)",base05:"rgba(1, 1, 1, 0.5)",base06:"rgba(1, 1, 1, 0.6)",base07:"rgba(1, 1, 1, 0.7)",base08:"rgba(1, 1, 1, 0.8)",base09:"rgba(1, 1, 1, 0.8)",base0A:"rgba(1, 1, 1, 0.8)",base0B:"rgba(1, 1, 1, 0.8)",base0C:"rgba(1, 1, 1, 0.8)",base0D:"rgba(1, 1, 1, 0.8)",base0E:"rgba(1, 1, 1, 0.8)",base0F:"rgba(1, 1, 1, 0.8)"},_={white:"#fff",black:"#000",transparent:"rgba(1, 1, 1, 0)",globalFontFamily:"monospace",globalCursor:"default",indentBlockWidth:"5px",braceFontWeight:"bold",braceCursor:"pointer",ellipsisFontSize:"18px",ellipsisLineHeight:"10px",ellipsisCursor:"pointer",keyMargin:"0px 5px",keyLetterSpacing:"0.5px",keyFontStyle:"none",keyBorderRadius:"3px",keyColonWeight:"bold",keyVerticalAlign:"top",keyOpacity:"0.85",keyOpacityHover:"1",keyValPaddingTop:"3px",keyValPaddingBottom:"3px",keyValPaddingRight:"5px",keyValBorderLeft:"1px solid",keyValBorderHover:"2px solid",keyValPaddingHover:"3px 5px 3px 4px",pushedContentMarginLeft:"6px",variableValuePaddingRight:"6px",nullFontSize:"11px",nullFontWeight:"bold",nullPadding:"1px 2px",nullBorderRadius:"3px",nanFontSize:"11px",nanFontWeight:"bold",nanPadding:"1px 2px",nanBorderRadius:"3px",undefinedFontSize:"11px",undefinedFontWeight:"bold",undefinedPadding:"1px 2px",undefinedBorderRadius:"3px",dataTypeFontSize:"11px",dataTypeMarginRight:"4px",datatypeOpacity:"0.8",objectSizeBorderRadius:"3px",objectSizeFontStyle:"italic",objectSizeMargin:"0px 6px 0px 0px",clipboardCursor:"pointer",clipboardCheckMarginLeft:"-12px",metaDataPadding:"0px 0px 0px 10px",arrayGroupMetaPadding:"0px 0px 0px 4px",iconContainerWidth:"17px",tooltipPadding:"4px",editInputMinWidth:"130px",editInputBorderRadius:"2px",editInputPadding:"5px",editInputMarginRight:"4px",editInputFontFamily:"monospace",iconCursor:"pointer",iconFontSize:"15px",iconPaddingRight:"1px",dateValueMarginLeft:"2px",iconMarginRight:"3px",detectedRowPaddingTop:"3px",addKeyCoverBackground:"rgba(255, 255, 255, 0.3)",addKeyCoverPosition:"absolute",addKeyCoverPositionPx:"0px",addKeyModalWidth:"200px",addKeyModalMargin:"auto",addKeyModalPadding:"10px",addKeyModalRadius:"3px"},S=n(45),C=function(e){var t=function(e){return{backgroundColor:e.base00,ellipsisColor:e.base09,braceColor:e.base07,expandedIcon:e.base0D,collapsedIcon:e.base0E,keyColor:e.base07,arrayKeyColor:e.base0C,objectSize:e.base04,copyToClipboard:e.base0F,copyToClipboardCheck:e.base0D,objectBorder:e.base02,dataTypes:{boolean:e.base0E,date:e.base0D,float:e.base0B,function:e.base0D,integer:e.base0F,string:e.base09,nan:e.base08,null:e.base0A,undefined:e.base05,regexp:e.base0A,background:e.base02},editVariable:{editIcon:e.base0E,cancelIcon:e.base09,removeIcon:e.base09,addIcon:e.base0E,checkIcon:e.base0E,background:e.base01,color:e.base0A,border:e.base07},addKeyModal:{background:e.base05,border:e.base04,color:e.base0A,labelColor:e.base01},validationFailure:{background:e.base09,iconColor:e.base01,fontColor:e.base01}}}(e);return{"app-container":{fontFamily:_.globalFontFamily,cursor:_.globalCursor,backgroundColor:t.backgroundColor,position:"relative"},ellipsis:{display:"inline-block",color:t.ellipsisColor,fontSize:_.ellipsisFontSize,lineHeight:_.ellipsisLineHeight,cursor:_.ellipsisCursor},"brace-row":{display:"inline-block",cursor:"pointer"},brace:{display:"inline-block",cursor:_.braceCursor,fontWeight:_.braceFontWeight,color:t.braceColor},"expanded-icon":{color:t.expandedIcon},"collapsed-icon":{color:t.collapsedIcon},colon:{display:"inline-block",margin:_.keyMargin,color:t.keyColor,verticalAlign:"top"},objectKeyVal:function(e,n){return{style:o({paddingTop:_.keyValPaddingTop,paddingRight:_.keyValPaddingRight,paddingBottom:_.keyValPaddingBottom,borderLeft:_.keyValBorderLeft+" "+t.objectBorder,":hover":{paddingLeft:n.paddingLeft-1+"px",borderLeft:_.keyValBorderHover+" "+t.objectBorder}},n)}},"object-key-val-no-border":{padding:_.keyValPadding},"pushed-content":{marginLeft:_.pushedContentMarginLeft},variableValue:function(e,t){return{style:o({display:"inline-block",paddingRight:_.variableValuePaddingRight,position:"relative"},t)}},"object-name":{display:"inline-block",color:t.keyColor,letterSpacing:_.keyLetterSpacing,fontStyle:_.keyFontStyle,verticalAlign:_.keyVerticalAlign,opacity:_.keyOpacity,":hover":{opacity:_.keyOpacityHover}},"array-key":{display:"inline-block",color:t.arrayKeyColor,letterSpacing:_.keyLetterSpacing,fontStyle:_.keyFontStyle,verticalAlign:_.keyVerticalAlign,opacity:_.keyOpacity,":hover":{opacity:_.keyOpacityHover}},"object-size":{color:t.objectSize,borderRadius:_.objectSizeBorderRadius,fontStyle:_.objectSizeFontStyle,margin:_.objectSizeMargin,cursor:"default"},"data-type-label":{fontSize:_.dataTypeFontSize,marginRight:_.dataTypeMarginRight,opacity:_.datatypeOpacity},boolean:{display:"inline-block",color:t.dataTypes.boolean},date:{display:"inline-block",color:t.dataTypes.date},"date-value":{marginLeft:_.dateValueMarginLeft},float:{display:"inline-block",color:t.dataTypes.float},function:{display:"inline-block",color:t.dataTypes.function,cursor:"pointer",whiteSpace:"pre-line"},"function-value":{fontStyle:"italic"},integer:{display:"inline-block",color:t.dataTypes.integer},string:{display:"inline-block",color:t.dataTypes.string},nan:{display:"inline-block",color:t.dataTypes.nan,fontSize:_.nanFontSize,fontWeight:_.nanFontWeight,backgroundColor:t.dataTypes.background,padding:_.nanPadding,borderRadius:_.nanBorderRadius},null:{display:"inline-block",color:t.dataTypes.null,fontSize:_.nullFontSize,fontWeight:_.nullFontWeight,backgroundColor:t.dataTypes.background,padding:_.nullPadding,borderRadius:_.nullBorderRadius},undefined:{display:"inline-block",color:t.dataTypes.undefined,fontSize:_.undefinedFontSize,padding:_.undefinedPadding,borderRadius:_.undefinedBorderRadius,backgroundColor:t.dataTypes.background},regexp:{display:"inline-block",color:t.dataTypes.regexp},"copy-to-clipboard":{cursor:_.clipboardCursor},"copy-icon":{color:t.copyToClipboard,fontSize:_.iconFontSize,marginRight:_.iconMarginRight,verticalAlign:"top"},"copy-icon-copied":{color:t.copyToClipboardCheck,marginLeft:_.clipboardCheckMarginLeft},"array-group-meta-data":{display:"inline-block",padding:_.arrayGroupMetaPadding},"object-meta-data":{display:"inline-block",padding:_.metaDataPadding},"icon-container":{display:"inline-block",width:_.iconContainerWidth},tooltip:{padding:_.tooltipPadding},removeVarIcon:{verticalAlign:"top",display:"inline-block",color:t.editVariable.removeIcon,cursor:_.iconCursor,fontSize:_.iconFontSize,marginRight:_.iconMarginRight},addVarIcon:{verticalAlign:"top",display:"inline-block",color:t.editVariable.addIcon,cursor:_.iconCursor,fontSize:_.iconFontSize,marginRight:_.iconMarginRight},editVarIcon:{verticalAlign:"top",display:"inline-block",color:t.editVariable.editIcon,cursor:_.iconCursor,fontSize:_.iconFontSize,marginRight:_.iconMarginRight},"edit-icon-container":{display:"inline-block",verticalAlign:"top"},"check-icon":{display:"inline-block",cursor:_.iconCursor,color:t.editVariable.checkIcon,fontSize:_.iconFontSize,paddingRight:_.iconPaddingRight},"cancel-icon":{display:"inline-block",cursor:_.iconCursor,color:t.editVariable.cancelIcon,fontSize:_.iconFontSize,paddingRight:_.iconPaddingRight},"edit-input":{display:"inline-block",minWidth:_.editInputMinWidth,borderRadius:_.editInputBorderRadius,backgroundColor:t.editVariable.background,color:t.editVariable.color,padding:_.editInputPadding,marginRight:_.editInputMarginRight,fontFamily:_.editInputFontFamily},"detected-row":{paddingTop:_.detectedRowPaddingTop},"key-modal-request":{position:_.addKeyCoverPosition,top:_.addKeyCoverPositionPx,left:_.addKeyCoverPositionPx,right:_.addKeyCoverPositionPx,bottom:_.addKeyCoverPositionPx,backgroundColor:_.addKeyCoverBackground},"key-modal":{width:_.addKeyModalWidth,backgroundColor:t.addKeyModal.background,marginLeft:_.addKeyModalMargin,marginRight:_.addKeyModalMargin,padding:_.addKeyModalPadding,borderRadius:_.addKeyModalRadius,marginTop:"15px",position:"relative"},"key-modal-label":{color:t.addKeyModal.labelColor,marginLeft:"2px",marginBottom:"5px",fontSize:"11px"},"key-modal-input-container":{overflow:"hidden"},"key-modal-input":{width:"100%",padding:"3px 6px",fontFamily:"monospace",color:t.addKeyModal.color,border:"none",boxSizing:"border-box",borderRadius:"2px"},"key-modal-cancel":{backgroundColor:t.editVariable.removeIcon,position:"absolute",top:"0px",right:"0px",borderRadius:"0px 3px 0px 3px",cursor:"pointer"},"key-modal-cancel-icon":{color:t.addKeyModal.labelColor,fontSize:_.iconFontSize,transform:"rotate(45deg)"},"key-modal-submit":{color:t.editVariable.addIcon,fontSize:_.iconFontSize,position:"absolute",right:"2px",top:"3px",cursor:"pointer"},"function-ellipsis":{display:"inline-block",color:t.ellipsisColor,fontSize:_.ellipsisFontSize,lineHeight:_.ellipsisLineHeight,cursor:_.ellipsisCursor},"validation-failure":{float:"right",padding:"3px 6px",borderRadius:"2px",cursor:"pointer",color:t.validationFailure.fontColor,backgroundColor:t.validationFailure.background},"validation-failure-label":{marginRight:"6px"},"validation-failure-clear":{position:"relative",verticalAlign:"top",cursor:"pointer",color:t.validationFailure.iconColor,fontSize:_.iconFontSize,transform:"rotate(45deg)"}}};function O(e,t,n){return e||console.error("theme has not been set"),function(e){var t=j;return!1!==e&&"none"!==e||(t=k),Object(S.createStyling)(C,{defaultBase16:t})(e)}(e)(t,n)}var A=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=(e.rjvId,e.type_name),n=e.displayDataTypes,r=e.theme;return n?m.a.createElement("span",Object.assign({className:"data-type-label"},O(r,"data-type-label")),t):null}}]),n}(m.a.PureComponent),F=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props;return m.a.createElement("div",O(e.theme,"boolean"),m.a.createElement(A,Object.assign({type_name:"bool"},e)),e.value?"true":"false")}}]),n}(m.a.PureComponent),M=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props;return m.a.createElement("div",O(e.theme,"date"),m.a.createElement(A,Object.assign({type_name:"date"},e)),m.a.createElement("span",Object.assign({className:"date-value"},O(e.theme,"date-value")),e.value.toLocaleTimeString("en-us",{weekday:"short",year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})))}}]),n}(m.a.PureComponent),P=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props;return m.a.createElement("div",O(e.theme,"float"),m.a.createElement(A,Object.assign({type_name:"float"},e)),this.props.value)}}]),n}(m.a.PureComponent);function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,i=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){i=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(i)throw o}}}}(a);try{for(d.s();!(i=d.n()).done;)u=u[i.value]}catch(e){d.e(e)}finally{d.f()}return s?"array"==w(u)?u.splice(r,1):delete u[r]:null!==r?u[r]=o:l=o,e.set(t,"global","src",l),l},e.deepCopy=function(t,n){var r,a=w(t),s=n.shift();return"array"==a?r=D(t):"object"==a&&(r=o({},t)),void 0!==s&&(r[s]=e.deepCopy(t[s],n)),r},e}return n}(L.EventEmitter));N.register(T.handleAction.bind(T));var B=T,z=function(e){u(n,e);var t=b(n);function n(e){var r;return s(this,n),(r=t.call(this,e)).toggleCollapsed=function(){r.setState({collapsed:!r.state.collapsed},(function(){B.set(r.props.rjvId,r.props.namespace,"collapsed",r.state.collapsed)}))},r.getFunctionDisplay=function(e){var t=f(r).props;return e?m.a.createElement("span",null,r.props.value.toString().slice(9,-1).replace(/\{[\s\S]+/,""),m.a.createElement("span",{className:"function-collapsed",style:{fontWeight:"bold"}},m.a.createElement("span",null,"{"),m.a.createElement("span",O(t.theme,"ellipsis"),"..."),m.a.createElement("span",null,"}"))):r.props.value.toString().slice(9,-1)},r.state={collapsed:B.get(e.rjvId,e.namespace,"collapsed",!0)},r}return c(n,[{key:"render",value:function(){var e=this.props,t=this.state.collapsed;return m.a.createElement("div",O(e.theme,"function"),m.a.createElement(A,Object.assign({type_name:"function"},e)),m.a.createElement("span",Object.assign({},O(e.theme,"function-value"),{className:"rjv-function-container",onClick:this.toggleCollapsed}),this.getFunctionDisplay(t)))}}]),n}(m.a.PureComponent),q=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){return m.a.createElement("div",O(this.props.theme,"nan"),"NaN")}}]),n}(m.a.PureComponent),V=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){return m.a.createElement("div",O(this.props.theme,"null"),"NULL")}}]),n}(m.a.PureComponent),K=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props;return m.a.createElement("div",O(e.theme,"integer"),m.a.createElement(A,Object.assign({type_name:"int"},e)),this.props.value)}}]),n}(m.a.PureComponent),W=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props;return m.a.createElement("div",O(e.theme,"regexp"),m.a.createElement(A,Object.assign({type_name:"regexp"},e)),this.props.value.toString())}}]),n}(m.a.PureComponent),H=function(e){u(n,e);var t=b(n);function n(e){var r;return s(this,n),(r=t.call(this,e)).toggleCollapsed=function(){r.setState({collapsed:!r.state.collapsed},(function(){B.set(r.props.rjvId,r.props.namespace,"collapsed",r.state.collapsed)}))},r.state={collapsed:B.get(e.rjvId,e.namespace,"collapsed",!0)},r}return c(n,[{key:"render",value:function(){this.state.collapsed;var e=this.props,t=e.collapseStringsAfterLength,n=e.theme,r=e.value,a={style:{cursor:"default"}};return"integer"===w(t)&&r.length>t&&(a.style.cursor="pointer",this.state.collapsed&&(r=m.a.createElement("span",null,r.substring(0,t),m.a.createElement("span",O(n,"ellipsis")," ...")))),m.a.createElement("div",O(n,"string"),m.a.createElement(A,Object.assign({type_name:"string"},e)),m.a.createElement("span",Object.assign({className:"string-value"},a,{onClick:this.toggleCollapsed}),'"',r,'"'))}}]),n}(m.a.PureComponent),U=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){return m.a.createElement("div",O(this.props.theme,"undefined"),"undefined")}}]),n}(m.a.PureComponent);function Y(){return(Y=Object.assign||function(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"]),d=void 0!==u.value,p=Object(h.useRef)(null),f=function(e,t){var n=Object(h.useRef)();return Object(h.useCallback)((function(r){e.current=r,n.current&&G(n.current,null),n.current=t,t&&G(t,r)}),[t])}(p,t),b=Object(h.useRef)(0),m=Object(h.useRef)(),v=function(){var e=p.current,t=r&&m.current?m.current:function(e){var t=window.getComputedStyle(e);if(null===t)return null;var n,r=(n=t,ee.reduce((function(e,t){return e[t]=n[t],e}),{})),a=r.boxSizing;return""===a?null:(te&&"border-box"===a&&(r.width=parseFloat(r.width)+parseFloat(r.borderRightWidth)+parseFloat(r.borderLeftWidth)+parseFloat(r.paddingRight)+parseFloat(r.paddingLeft)+"px"),{sizingStyle:r,paddingSize:parseFloat(r.paddingBottom)+parseFloat(r.paddingTop),borderSize:parseFloat(r.borderBottomWidth)+parseFloat(r.borderTopWidth)})}(e);if(t){m.current=t;var n=function(e,t,n,r){void 0===n&&(n=1),void 0===r&&(r=1/0),Q||((Q=document.createElement("textarea")).setAttribute("tab-index","-1"),Q.setAttribute("aria-hidden","true"),X(Q)),null===Q.parentNode&&document.body.appendChild(Q);var a=e.paddingSize,o=e.borderSize,s=e.sizingStyle,i=s.boxSizing;Object.keys(s).forEach((function(e){var t=e;Q.style[t]=s[t]})),X(Q),Q.value=t;var c=function(e,t){var n=e.scrollHeight;return"border-box"===t.sizingStyle.boxSizing?n+t.borderSize:n-t.paddingSize}(Q,e);Q.value="x";var l=Q.scrollHeight-a,u=l*n;"border-box"===i&&(u=u+a+o),c=Math.max(u,c);var d=l*r;return"border-box"===i&&(d=d+a+o),[c=Math.min(d,c),l]}(t,e.value||e.placeholder||"x",o,a),s=n[0],i=n[1];b.current!==s&&(b.current=s,e.style.setProperty("height",s+"px","important"),l(s,{rowHeight:i}))}};return Object(h.useLayoutEffect)(v),n=function(e){var t=Object(h.useRef)(e);return $((function(){t.current=e})),t}(v),Object(h.useLayoutEffect)((function(){var e=function(e){n.current(e)};return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),Object(h.createElement)("textarea",Y({},u,{onChange:function(e){d||v(),i(e)},ref:f}))}));function re(e){e=e.trim();try{if("["===(e=JSON.stringify(JSON.parse(e)))[0])return ae("array",JSON.parse(e));if("{"===e[0])return ae("object",JSON.parse(e));if(e.match(/\-?\d+\.\d+/)&&e.match(/\-?\d+\.\d+/)[0]===e)return ae("float",parseFloat(e));if(e.match(/\-?\d+e-\d+/)&&e.match(/\-?\d+e-\d+/)[0]===e)return ae("float",Number(e));if(e.match(/\-?\d+/)&&e.match(/\-?\d+/)[0]===e)return ae("integer",parseInt(e));if(e.match(/\-?\d+e\+\d+/)&&e.match(/\-?\d+e\+\d+/)[0]===e)return ae("integer",Number(e))}catch(e){}switch(e=e.toLowerCase()){case"undefined":return ae("undefined",void 0);case"nan":return ae("nan",NaN);case"null":return ae("null",null);case"true":return ae("boolean",!0);case"false":return ae("boolean",!1);default:if(e=Date.parse(e))return ae("date",new Date(e))}return ae(!1,null)}function ae(e,t){return{type:e,value:t}}var oe=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 24 24",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("path",{d:"M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M7,13H17V11H7"})))}}]),n}(m.a.PureComponent),se=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 24 24",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("path",{d:"M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M13,7H11V11H7V13H11V17H13V13H17V11H13V7Z"})))}}]),n}(m.a.PureComponent),ie=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]),r=ve(t).style;return m.a.createElement("span",n,m.a.createElement("svg",{fill:r.color,width:r.height,height:r.width,style:r,viewBox:"0 0 1792 1792"},m.a.createElement("path",{d:"M1344 800v64q0 14-9 23t-23 9h-832q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h832q14 0 23 9t9 23zm128 448v-832q0-66-47-113t-113-47h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113zm128-832v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z"})))}}]),n}(m.a.PureComponent),ce=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]),r=ve(t).style;return m.a.createElement("span",n,m.a.createElement("svg",{fill:r.color,width:r.height,height:r.width,style:r,viewBox:"0 0 1792 1792"},m.a.createElement("path",{d:"M1344 800v64q0 14-9 23t-23 9h-352v352q0 14-9 23t-23 9h-64q-14 0-23-9t-9-23v-352h-352q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h352v-352q0-14 9-23t23-9h64q14 0 23 9t9 23v352h352q14 0 23 9t9 23zm128 448v-832q0-66-47-113t-113-47h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113zm128-832v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z"})))}}]),n}(m.a.PureComponent),le=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",{style:o(o({},ve(t).style),{},{paddingLeft:"2px",verticalAlign:"top"}),viewBox:"0 0 15 15",fill:"currentColor"},m.a.createElement("path",{d:"M0 14l6-6-6-6z"})))}}]),n}(m.a.PureComponent),ue=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",{style:o(o({},ve(t).style),{},{paddingLeft:"2px",verticalAlign:"top"}),viewBox:"0 0 15 15",fill:"currentColor"},m.a.createElement("path",{d:"M0 5l6 6 6-6z"})))}}]),n}(m.a.PureComponent),de=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 40 40",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("g",null,m.a.createElement("path",{d:"m30 35h-25v-22.5h25v7.5h2.5v-12.5c0-1.4-1.1-2.5-2.5-2.5h-7.5c0-2.8-2.2-5-5-5s-5 2.2-5 5h-7.5c-1.4 0-2.5 1.1-2.5 2.5v27.5c0 1.4 1.1 2.5 2.5 2.5h25c1.4 0 2.5-1.1 2.5-2.5v-5h-2.5v5z m-20-27.5h2.5s2.5-1.1 2.5-2.5 1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5 1.3 2.5 2.5 2.5h2.5s2.5 1.1 2.5 2.5h-20c0-1.5 1.1-2.5 2.5-2.5z m-2.5 20h5v-2.5h-5v2.5z m17.5-5v-5l-10 7.5 10 7.5v-5h12.5v-5h-12.5z m-17.5 10h7.5v-2.5h-7.5v2.5z m12.5-17.5h-12.5v2.5h12.5v-2.5z m-7.5 5h-5v2.5h5v-2.5z"}))))}}]),n}(m.a.PureComponent),pe=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 40 40",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("g",null,m.a.createElement("path",{d:"m28.6 25q0-0.5-0.4-1l-4-4 4-4q0.4-0.5 0.4-1 0-0.6-0.4-1.1l-2-2q-0.4-0.4-1-0.4-0.6 0-1 0.4l-4.1 4.1-4-4.1q-0.4-0.4-1-0.4-0.6 0-1 0.4l-2 2q-0.5 0.5-0.5 1.1 0 0.5 0.5 1l4 4-4 4q-0.5 0.5-0.5 1 0 0.7 0.5 1.1l2 2q0.4 0.4 1 0.4 0.6 0 1-0.4l4-4.1 4.1 4.1q0.4 0.4 1 0.4 0.6 0 1-0.4l2-2q0.4-0.4 0.4-1z m8.7-5q0 4.7-2.3 8.6t-6.3 6.2-8.6 2.3-8.6-2.3-6.2-6.2-2.3-8.6 2.3-8.6 6.2-6.2 8.6-2.3 8.6 2.3 6.3 6.2 2.3 8.6z"}))))}}]),n}(m.a.PureComponent),fe=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 40 40",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("g",null,m.a.createElement("path",{d:"m30.1 21.4v-2.8q0-0.6-0.4-1t-1-0.5h-5.7v-5.7q0-0.6-0.4-1t-1-0.4h-2.9q-0.6 0-1 0.4t-0.4 1v5.7h-5.7q-0.6 0-1 0.5t-0.5 1v2.8q0 0.6 0.5 1t1 0.5h5.7v5.7q0 0.5 0.4 1t1 0.4h2.9q0.6 0 1-0.4t0.4-1v-5.7h5.7q0.6 0 1-0.5t0.4-1z m7.2-1.4q0 4.7-2.3 8.6t-6.3 6.2-8.6 2.3-8.6-2.3-6.2-6.2-2.3-8.6 2.3-8.6 6.2-6.2 8.6-2.3 8.6 2.3 6.3 6.2 2.3 8.6z"}))))}}]),n}(m.a.PureComponent),be=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 40 40",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("g",null,m.a.createElement("path",{d:"m31.6 21.6h-10v10h-3.2v-10h-10v-3.2h10v-10h3.2v10h10v3.2z"}))))}}]),n}(m.a.PureComponent),he=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 40 40",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("g",null,m.a.createElement("path",{d:"m19.8 26.4l2.6-2.6-3.4-3.4-2.6 2.6v1.3h2.2v2.1h1.2z m9.8-16q-0.3-0.4-0.7 0l-7.8 7.8q-0.4 0.4 0 0.7t0.7 0l7.8-7.8q0.4-0.4 0-0.7z m1.8 13.2v4.3q0 2.6-1.9 4.5t-4.5 1.9h-18.6q-2.6 0-4.5-1.9t-1.9-4.5v-18.6q0-2.7 1.9-4.6t4.5-1.8h18.6q1.4 0 2.6 0.5 0.3 0.2 0.4 0.5 0.1 0.4-0.2 0.7l-1.1 1.1q-0.3 0.3-0.7 0.1-0.5-0.1-1-0.1h-18.6q-1.4 0-2.5 1.1t-1 2.5v18.6q0 1.4 1 2.5t2.5 1h18.6q1.5 0 2.5-1t1.1-2.5v-2.9q0-0.2 0.2-0.4l1.4-1.5q0.3-0.3 0.8-0.1t0.4 0.6z m-2.1-16.5l6.4 6.5-15 15h-6.4v-6.5z m9.9 3l-2.1 2-6.4-6.4 2.1-2q0.6-0.7 1.5-0.7t1.5 0.7l3.4 3.4q0.6 0.6 0.6 1.5t-0.6 1.5z"}))))}}]),n}(m.a.PureComponent),me=function(e){u(n,e);var t=b(n);function n(){return s(this,n),t.apply(this,arguments)}return c(n,[{key:"render",value:function(){var e=this.props,t=e.style,n=x(e,["style"]);return m.a.createElement("span",n,m.a.createElement("svg",Object.assign({},ve(t),{viewBox:"0 0 40 40",fill:"currentColor",preserveAspectRatio:"xMidYMid meet"}),m.a.createElement("g",null,m.a.createElement("path",{d:"m31.7 16.4q0-0.6-0.4-1l-2.1-2.1q-0.4-0.4-1-0.4t-1 0.4l-9.1 9.1-5-5q-0.5-0.4-1-0.4t-1 0.4l-2.1 2q-0.4 0.4-0.4 1 0 0.6 0.4 1l8.1 8.1q0.4 0.4 1 0.4 0.6 0 1-0.4l12.2-12.1q0.4-0.4 0.4-1z m5.6 3.6q0 4.7-2.3 8.6t-6.3 6.2-8.6 2.3-8.6-2.3-6.2-6.2-2.3-8.6 2.3-8.6 6.2-6.2 8.6-2.3 8.6 2.3 6.3 6.2 2.3 8.6z"}))))}}]),n}(m.a.PureComponent);function ve(e){return e||(e={}),{style:o(o({verticalAlign:"middle"},e),{},{color:e.color?e.color:"#000000",height:"1em",width:"1em"})}}var ye=function(e){u(n,e);var t=b(n);function n(e){var r;return s(this,n),(r=t.call(this,e)).copiedTimer=null,r.handleCopy=function(){var e=document.createElement("textarea"),t=r.props,n=t.clickCallback,a=t.src,o=t.namespace;e.innerHTML=JSON.stringify(r.clipboardValue(a),null," "),document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e),r.copiedTimer=setTimeout((function(){r.setState({copied:!1})}),5500),r.setState({copied:!0},(function(){"function"==typeof n&&n({src:a,namespace:o,name:o[o.length-1]})}))},r.getClippyIcon=function(){var e=r.props.theme;return r.state.copied?m.a.createElement("span",null,m.a.createElement(de,Object.assign({className:"copy-icon"},O(e,"copy-icon"))),m.a.createElement("span",O(e,"copy-icon-copied"),"✔")):m.a.createElement(de,Object.assign({className:"copy-icon"},O(e,"copy-icon")))},r.clipboardValue=function(e){switch(w(e)){case"function":case"regexp":return e.toString();default:return e}},r.state={copied:!1},r}return c(n,[{key:"componentWillUnmount",value:function(){this.copiedTimer&&(clearTimeout(this.copiedTimer),this.copiedTimer=null)}},{key:"render",value:function(){var e=this.props,t=(e.src,e.theme),n=e.hidden,r=e.rowHovered,a=O(t,"copy-to-clipboard").style,s="inline";return n&&(s="none"),m.a.createElement("span",{className:"copy-to-clipboard-container",title:"Copy to clipboard",style:{verticalAlign:"top",display:r?"inline-block":"none"}},m.a.createElement("span",{style:o(o({},a),{},{display:s}),onClick:this.handleCopy},this.getClippyIcon()))}}]),n}(m.a.PureComponent),ge=function(e){u(n,e);var t=b(n);function n(e){var r;return s(this,n),(r=t.call(this,e)).getEditIcon=function(){var e=r.props,t=e.variable,n=e.theme;return m.a.createElement("div",{className:"click-to-edit",style:{verticalAlign:"top",display:r.state.hovered?"inline-block":"none"}},m.a.createElement(he,Object.assign({className:"click-to-edit-icon"},O(n,"editVarIcon"),{onClick:function(){r.prepopInput(t)}})))},r.prepopInput=function(e){if(!1!==r.props.onEdit){var t=function(e){var t;switch(w(e)){case"undefined":t="undefined";break;case"nan":t="NaN";break;case"string":t=e;break;case"date":case"function":case"regexp":t=e.toString();break;default:try{t=JSON.stringify(e,null," ")}catch(e){t=""}}return t}(e.value),n=re(t);r.setState({editMode:!0,editValue:t,parsedInput:{type:n.type,value:n.value}})}},r.getRemoveIcon=function(){var e=r.props,t=e.variable,n=e.namespace,a=e.theme,o=e.rjvId;return m.a.createElement("div",{className:"click-to-remove",style:{verticalAlign:"top",display:r.state.hovered?"inline-block":"none"}},m.a.createElement(pe,Object.assign({className:"click-to-remove-icon"},O(a,"removeVarIcon"),{onClick:function(){N.dispatch({name:"VARIABLE_REMOVED",rjvId:o,data:{name:t.name,namespace:n,existing_value:t.value,variable_removed:!0}})}})))},r.getValue=function(e,t){var n=!t&&e.type,a=f(r).props;switch(n){case!1:return r.getEditInput();case"string":return m.a.createElement(H,Object.assign({value:e.value},a));case"integer":return m.a.createElement(K,Object.assign({value:e.value},a));case"float":return m.a.createElement(P,Object.assign({value:e.value},a));case"boolean":return m.a.createElement(F,Object.assign({value:e.value},a));case"function":return m.a.createElement(z,Object.assign({value:e.value},a));case"null":return m.a.createElement(V,a);case"nan":return m.a.createElement(q,a);case"undefined":return m.a.createElement(U,a);case"date":return m.a.createElement(M,Object.assign({value:e.value},a));case"regexp":return m.a.createElement(W,Object.assign({value:e.value},a));default:return m.a.createElement("div",{className:"object-value"},JSON.stringify(e.value))}},r.getEditInput=function(){var e=r.props.theme,t=r.state.editValue;return m.a.createElement("div",null,m.a.createElement(ne,Object.assign({type:"text",inputRef:function(e){return e&&e.focus()},value:t,className:"variable-editor",onChange:function(e){var t=e.target.value,n=re(t);r.setState({editValue:t,parsedInput:{type:n.type,value:n.value}})},onKeyDown:function(e){switch(e.key){case"Escape":r.setState({editMode:!1,editValue:""});break;case"Enter":(e.ctrlKey||e.metaKey)&&r.submitEdit(!0)}e.stopPropagation()},placeholder:"update this value",minRows:2},O(e,"edit-input"))),m.a.createElement("div",O(e,"edit-icon-container"),m.a.createElement(pe,Object.assign({className:"edit-cancel"},O(e,"cancel-icon"),{onClick:function(){r.setState({editMode:!1,editValue:""})}})),m.a.createElement(me,Object.assign({className:"edit-check string-value"},O(e,"check-icon"),{onClick:function(){r.submitEdit()}})),m.a.createElement("div",null,r.showDetected())))},r.submitEdit=function(e){var t=r.props,n=t.variable,a=t.namespace,o=t.rjvId,s=r.state,i=s.editValue,c=s.parsedInput,l=i;e&&c.type&&(l=c.value),r.setState({editMode:!1}),N.dispatch({name:"VARIABLE_UPDATED",rjvId:o,data:{name:n.name,namespace:a,existing_value:n.value,new_value:l,variable_removed:!1}})},r.showDetected=function(){var e=r.props,t=e.theme,n=(e.variable,e.namespace,e.rjvId,r.state.parsedInput),a=(n.type,n.value,r.getDetectedInput());if(a)return m.a.createElement("div",null,m.a.createElement("div",O(t,"detected-row"),a,m.a.createElement(me,{className:"edit-check detected",style:o({verticalAlign:"top",paddingLeft:"3px"},O(t,"check-icon").style),onClick:function(){r.submitEdit(!0)}})))},r.getDetectedInput=function(){var e=r.state.parsedInput,t=e.type,n=e.value,a=f(r).props,s=a.theme;if(!1!==t)switch(t.toLowerCase()){case"object":return m.a.createElement("span",null,m.a.createElement("span",{style:o(o({},O(s,"brace").style),{},{cursor:"default"})},"{"),m.a.createElement("span",{style:o(o({},O(s,"ellipsis").style),{},{cursor:"default"})},"..."),m.a.createElement("span",{style:o(o({},O(s,"brace").style),{},{cursor:"default"})},"}"));case"array":return m.a.createElement("span",null,m.a.createElement("span",{style:o(o({},O(s,"brace").style),{},{cursor:"default"})},"["),m.a.createElement("span",{style:o(o({},O(s,"ellipsis").style),{},{cursor:"default"})},"..."),m.a.createElement("span",{style:o(o({},O(s,"brace").style),{},{cursor:"default"})},"]"));case"string":return m.a.createElement(H,Object.assign({value:n},a));case"integer":return m.a.createElement(K,Object.assign({value:n},a));case"float":return m.a.createElement(P,Object.assign({value:n},a));case"boolean":return m.a.createElement(F,Object.assign({value:n},a));case"function":return m.a.createElement(z,Object.assign({value:n},a));case"null":return m.a.createElement(V,a);case"nan":return m.a.createElement(q,a);case"undefined":return m.a.createElement(U,a);case"date":return m.a.createElement(M,Object.assign({value:new Date(n)},a))}},r.state={editMode:!1,editValue:"",hovered:!1,renameKey:!1,parsedInput:{type:!1,value:null}},r}return c(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.variable,r=t.singleIndent,a=t.type,s=t.theme,i=t.namespace,c=t.indentWidth,l=t.enableClipboard,u=t.onEdit,d=t.onDelete,p=t.onSelect,f=t.displayArrayKey,b=t.quotesOnKeys,h=this.state.editMode;return m.a.createElement("div",Object.assign({},O(s,"objectKeyVal",{paddingLeft:c*r}),{onMouseEnter:function(){return e.setState(o(o({},e.state),{},{hovered:!0}))},onMouseLeave:function(){return e.setState(o(o({},e.state),{},{hovered:!1}))},className:"variable-row",key:n.name}),"array"==a?f?m.a.createElement("span",Object.assign({},O(s,"array-key"),{key:n.name+"_"+i}),n.name,m.a.createElement("div",O(s,"colon"),":")):null:m.a.createElement("span",null,m.a.createElement("span",Object.assign({},O(s,"object-name"),{className:"object-key",key:n.name+"_"+i}),!!b&&m.a.createElement("span",{style:{verticalAlign:"top"}},'"'),m.a.createElement("span",{style:{display:"inline-block"}},n.name),!!b&&m.a.createElement("span",{style:{verticalAlign:"top"}},'"')),m.a.createElement("span",O(s,"colon"),":")),m.a.createElement("div",Object.assign({className:"variable-value",onClick:!1===p&&!1===u?null:function(t){var r=D(i);(t.ctrlKey||t.metaKey)&&!1!==u?e.prepopInput(n):!1!==p&&(r.shift(),p(o(o({},n),{},{namespace:r})))}},O(s,"variableValue",{cursor:!1===p?"default":"pointer"})),this.getValue(n,h)),l?m.a.createElement(ye,{rowHovered:this.state.hovered,hidden:h,src:n.value,clickCallback:l,theme:s,namespace:[].concat(D(i),[n.name])}):null,!1!==u&&0==h?this.getEditIcon():null,!1!==d&&0==h?this.getRemoveIcon():null)}}]),n}(m.a.PureComponent),Ee=function(e){u(n,e);var t=b(n);function n(){var e;s(this,n);for(var r=arguments.length,a=new Array(r),i=0;i0?s:null,namespace:a.splice(0,a.length-1),existing_value:i,variable_removed:!1,key_name:null};"object"===w(i)?N.dispatch({name:"ADD_VARIABLE_KEY_REQUEST",rjvId:c,data:e}):N.dispatch({name:"VARIABLE_ADDED",rjvId:c,data:o(o({},e),{},{new_value:[].concat(D(i),[null])})})}})))},e.getRemoveObject=function(t){var n=e.props,r=n.theme,a=(n.hover,n.namespace),o=n.name,s=n.src,i=n.rjvId;if(1!==a.length)return m.a.createElement("span",{className:"click-to-remove",style:{display:t?"inline-block":"none"}},m.a.createElement(pe,Object.assign({className:"click-to-remove-icon"},O(r,"removeVarIcon"),{onClick:function(){N.dispatch({name:"VARIABLE_REMOVED",rjvId:i,data:{name:o,namespace:a.splice(0,a.length-1),existing_value:s,variable_removed:!0}})}})))},e.render=function(){var t=e.props,n=t.theme,r=t.onDelete,a=t.onAdd,o=t.enableClipboard,s=t.src,i=t.namespace,c=t.rowHovered;return m.a.createElement("div",Object.assign({},O(n,"object-meta-data"),{className:"object-meta-data",onClick:function(e){e.stopPropagation()}}),e.getObjectSize(),o?m.a.createElement(ye,{rowHovered:c,clickCallback:o,src:s,theme:n,namespace:i}):null,!1!==a?e.getAddAttribute(c):null,!1!==r?e.getRemoveObject(c):null)},e}return n}(m.a.PureComponent);function xe(e){var t=e.parent_type,n=e.namespace,r=e.quotesOnKeys,a=e.theme,o=e.jsvRoot,s=e.name,i=e.displayArrayKey,c=e.name?e.name:"";return!o||!1!==s&&null!==s?"array"==t?i?m.a.createElement("span",Object.assign({},O(a,"array-key"),{key:n}),m.a.createElement("span",{className:"array-key"},c),m.a.createElement("span",O(a,"colon"),":")):m.a.createElement("span",null):m.a.createElement("span",Object.assign({},O(a,"object-name"),{key:n}),m.a.createElement("span",{className:"object-key"},r&&m.a.createElement("span",{style:{verticalAlign:"top"}},'"'),m.a.createElement("span",null,c),r&&m.a.createElement("span",{style:{verticalAlign:"top"}},'"')),m.a.createElement("span",O(a,"colon"),":")):m.a.createElement("span",null)}function we(e){var t=e.theme;switch(e.iconStyle){case"triangle":return m.a.createElement(ue,Object.assign({},O(t,"expanded-icon"),{className:"expanded-icon"}));case"square":return m.a.createElement(ie,Object.assign({},O(t,"expanded-icon"),{className:"expanded-icon"}));default:return m.a.createElement(oe,Object.assign({},O(t,"expanded-icon"),{className:"expanded-icon"}))}}function je(e){var t=e.theme;switch(e.iconStyle){case"triangle":return m.a.createElement(le,Object.assign({},O(t,"collapsed-icon"),{className:"collapsed-icon"}));case"square":return m.a.createElement(ce,Object.assign({},O(t,"collapsed-icon"),{className:"collapsed-icon"}));default:return m.a.createElement(se,Object.assign({},O(t,"collapsed-icon"),{className:"collapsed-icon"}))}}var ke=function(e){u(n,e);var t=b(n);function n(e){var r;return s(this,n),(r=t.call(this,e)).toggleCollapsed=function(e){var t=[];for(var n in r.state.expanded)t.push(r.state.expanded[n]);t[e]=!t[e],r.setState({expanded:t})},r.state={expanded:[]},r}return c(n,[{key:"getExpandedIcon",value:function(e){var t=this.props,n=t.theme,r=t.iconStyle;return this.state.expanded[e]?m.a.createElement(we,{theme:n,iconStyle:r}):m.a.createElement(je,{theme:n,iconStyle:r})}},{key:"render",value:function(){var e=this,t=this.props,n=t.src,r=t.groupArraysAfterLength,a=(t.depth,t.name),o=t.theme,s=t.jsvRoot,i=t.namespace,c=(t.parent_type,x(t,["src","groupArraysAfterLength","depth","name","theme","jsvRoot","namespace","parent_type"])),l=0,u=5*this.props.indentWidth;s||(l=5*this.props.indentWidth);var d=r,p=Math.ceil(n.length/d);return m.a.createElement("div",Object.assign({className:"object-key-val"},O(o,s?"jsv-root":"objectKeyVal",{paddingLeft:l})),m.a.createElement(xe,this.props),m.a.createElement("span",null,m.a.createElement(Ee,Object.assign({size:n.length},this.props))),D(Array(p)).map((function(t,r){return m.a.createElement("div",Object.assign({key:r,className:"object-key-val array-group"},O(o,"objectKeyVal",{marginLeft:6,paddingLeft:u})),m.a.createElement("span",O(o,"brace-row"),m.a.createElement("div",Object.assign({className:"icon-container"},O(o,"icon-container"),{onClick:function(t){e.toggleCollapsed(r)}}),e.getExpandedIcon(r)),e.state.expanded[r]?m.a.createElement(Ce,Object.assign({key:a+r,depth:0,name:!1,collapsed:!1,groupArraysAfterLength:d,index_offset:r*d,src:n.slice(r*d,r*d+d),namespace:i,type:"array",parent_type:"array_group",theme:o},c)):m.a.createElement("span",Object.assign({},O(o,"brace"),{onClick:function(t){e.toggleCollapsed(r)},className:"array-group-brace"}),"[",m.a.createElement("div",Object.assign({},O(o,"array-group-meta-data"),{className:"array-group-meta-data"}),m.a.createElement("span",Object.assign({className:"object-size"},O(o,"object-size")),r*d," - ",r*d+d>n.length?n.length:r*d+d)),"]")))})))}}]),n}(m.a.PureComponent),_e=function(e){u(n,e);var t=b(n);function n(e){var r;s(this,n),(r=t.call(this,e)).toggleCollapsed=function(){r.setState({expanded:!r.state.expanded},(function(){B.set(r.props.rjvId,r.props.namespace,"expanded",r.state.expanded)}))},r.getObjectContent=function(e,t,n){return m.a.createElement("div",{className:"pushed-content object-container"},m.a.createElement("div",Object.assign({className:"object-content"},O(r.props.theme,"pushed-content")),r.renderObjectContents(t,n)))},r.getEllipsis=function(){return 0===r.state.size?null:m.a.createElement("div",Object.assign({},O(r.props.theme,"ellipsis"),{className:"node-ellipsis",onClick:r.toggleCollapsed}),"...")},r.getObjectMetaData=function(e){var t=r.props,n=(t.rjvId,t.theme,r.state),a=n.size,o=n.hovered;return m.a.createElement(Ee,Object.assign({rowHovered:o,size:a},r.props))},r.renderObjectContents=function(e,t){var n,a=r.props,o=a.depth,s=a.parent_type,i=a.index_offset,c=a.groupArraysAfterLength,l=a.namespace,u=r.state.object_type,d=[],p=Object.keys(e||{});return r.props.sortKeys&&"array"!==u&&(p=p.sort()),p.forEach((function(a){if(n=new Se(a,e[a]),"array_group"===s&&i&&(n.name=parseInt(n.name)+i),e.hasOwnProperty(a))if("object"===n.type)d.push(m.a.createElement(Ce,Object.assign({key:n.name,depth:o+1,name:n.name,src:n.value,namespace:l.concat(n.name),parent_type:u},t)));else if("array"===n.type){var p=Ce;c&&n.value.length>c&&(p=ke),d.push(m.a.createElement(p,Object.assign({key:n.name,depth:o+1,name:n.name,src:n.value,namespace:l.concat(n.name),type:"array",parent_type:u},t)))}else d.push(m.a.createElement(ge,Object.assign({key:n.name+"_"+l,variable:n,singleIndent:5,namespace:l,type:r.props.type},t)))})),d};var a=n.getState(e);return r.state=o(o({},a),{},{prevProps:{}}),r}return c(n,[{key:"getBraceStart",value:function(e,t){var n=this,r=this.props,a=r.src,o=r.theme,s=r.iconStyle;if("array_group"===r.parent_type)return m.a.createElement("span",null,m.a.createElement("span",O(o,"brace"),"array"===e?"[":"{"),t?this.getObjectMetaData(a):null);var i=t?we:je;return m.a.createElement("span",null,m.a.createElement("span",Object.assign({onClick:function(e){n.toggleCollapsed()}},O(o,"brace-row")),m.a.createElement("div",Object.assign({className:"icon-container"},O(o,"icon-container")),m.a.createElement(i,{theme:o,iconStyle:s})),m.a.createElement(xe,this.props),m.a.createElement("span",O(o,"brace"),"array"===e?"[":"{")),t?this.getObjectMetaData(a):null)}},{key:"render",value:function(){var e=this,t=this.props,n=t.depth,r=t.src,a=(t.namespace,t.name,t.type,t.parent_type),s=t.theme,i=t.jsvRoot,c=t.iconStyle,l=x(t,["depth","src","namespace","name","type","parent_type","theme","jsvRoot","iconStyle"]),u=this.state,d=u.object_type,p=u.expanded,f={};return i||"array_group"===a?"array_group"===a&&(f.borderLeft=0,f.display="inline"):f.paddingLeft=5*this.props.indentWidth,m.a.createElement("div",Object.assign({className:"object-key-val",onMouseEnter:function(){return e.setState(o(o({},e.state),{},{hovered:!0}))},onMouseLeave:function(){return e.setState(o(o({},e.state),{},{hovered:!1}))}},O(s,i?"jsv-root":"objectKeyVal",f)),this.getBraceStart(d,p),p?this.getObjectContent(n,r,o({theme:s,iconStyle:c},l)):this.getEllipsis(),m.a.createElement("span",{className:"brace-row"},m.a.createElement("span",{style:o(o({},O(s,"brace").style),{},{paddingLeft:p?"3px":"0px"})},"array"===d?"]":"}"),p?null:this.getObjectMetaData(r)))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var r=t.prevProps;return e.src!==r.src||e.collapsed!==r.collapsed||e.name!==r.name||e.namespace!==r.namespace||e.rjvId!==r.rjvId?o(o({},n.getState(e)),{},{prevProps:e}):null}}]),n}(m.a.PureComponent);_e.getState=function(e){var t=Object.keys(e.src).length,n=(!1===e.collapsed||!0!==e.collapsed&&e.collapsed>e.depth)&&(!e.shouldCollapse||!1===e.shouldCollapse({name:e.name,src:e.src,type:w(e.src),namespace:e.namespace}))&&0!==t;return{expanded:B.get(e.rjvId,e.namespace,"expanded",n),object_type:"array"===e.type?"array":"object",parent_type:"array"===e.type?"array":"object",size:t,hovered:!1}};var Se=function e(t,n){s(this,e),this.name=t,this.value=n,this.type=w(n)};E(_e);var Ce=_e,Oe=function(e){u(n,e);var t=b(n);function n(){var e;s(this,n);for(var r=arguments.length,a=new Array(r),o=0;ot.groupArraysAfterLength&&(r=ke),m.a.createElement("div",{className:"pretty-json-container object-container"},m.a.createElement("div",{className:"object-content"},m.a.createElement(r,Object.assign({namespace:n,depth:0,jsvRoot:!0},t))))},e}return n}(m.a.PureComponent),Ae=function(e){u(n,e);var t=b(n);function n(e){var r;return s(this,n),(r=t.call(this,e)).closeModal=function(){N.dispatch({rjvId:r.props.rjvId,name:"RESET"})},r.submit=function(){r.props.submit(r.state.input)},r.state={input:e.input?e.input:""},r}return c(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.theme,r=t.rjvId,a=t.isValid,o=this.state.input,s=a(o);return m.a.createElement("div",Object.assign({className:"key-modal-request"},O(n,"key-modal-request"),{onClick:this.closeModal}),m.a.createElement("div",Object.assign({},O(n,"key-modal"),{onClick:function(e){e.stopPropagation()}}),m.a.createElement("div",O(n,"key-modal-label"),"Key Name:"),m.a.createElement("div",{style:{position:"relative"}},m.a.createElement("input",Object.assign({},O(n,"key-modal-input"),{className:"key-modal-input",ref:function(e){return e&&e.focus()},spellCheck:!1,value:o,placeholder:"...",onChange:function(t){e.setState({input:t.target.value})},onKeyPress:function(t){s&&"Enter"===t.key?e.submit():"Escape"===t.key&&e.closeModal()}})),s?m.a.createElement(me,Object.assign({},O(n,"key-modal-submit"),{className:"key-modal-submit",onClick:function(t){return e.submit()}})):null),m.a.createElement("span",O(n,"key-modal-cancel"),m.a.createElement(be,Object.assign({},O(n,"key-modal-cancel-icon"),{className:"key-modal-cancel",onClick:function(){N.dispatch({rjvId:r,name:"RESET"})}})))))}}]),n}(m.a.PureComponent),Fe=function(e){u(n,e);var t=b(n);function n(){var e;s(this,n);for(var r=arguments.length,a=new Array(r),i=0;i{"use strict";e.exports=window.React}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};n.r(e),n.d(e,{getData:()=>xe});var t=n(609);const r=window.wp.domReady;var a=n.n(r);const o=window.wp.element,s=window.yoast.styledComponents,i=window.wp.data,c=window.wp.i18n,l=window.yoast.componentsNew,u=window.yoast.styleGuide,d=window.yoast.propTypes;var p=n.n(d),f=n(11),b=n.n(f);const h=window.lodash,m=()=>null,v=(0,h.get)(window,"yoast.frontendInspector.getIndicatorForScore",(()=>({className:"",screenReaderText:"",screenReaderReadabilityText:""}))),y=(0,h.get)(window,"yoast.frontendInspector.AnalysisCheck",m),g=(0,h.get)(window,"yoast.frontendInspector.YoastIcon",m);function E(e,t,...n){if(e in t){let r=t[e];return"function"==typeof r?r(...n):r}let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e=>`"${e}"`)).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,E),r}var x,w,j=((w=j||{})[w.None=0]="None",w[w.RenderStrategy=1]="RenderStrategy",w[w.Static=2]="Static",w),k=((x=k||{})[x.Unmount=0]="Unmount",x[x.Hidden=1]="Hidden",x);function _({ourProps:e,theirProps:t,slot:n,defaultTag:r,features:a,visible:o=!0,name:s}){let i=C(t,e);if(o)return S(i,n,r,s);let c=null!=a?a:0;if(2&c){let{static:e=!1,...t}=i;if(e)return S(t,n,r,s)}if(1&c){let{unmount:e=!0,...t}=i;return E(e?0:1,{0:()=>null,1:()=>S({...t,hidden:!0,style:{display:"none"}},n,r,s)})}return S(i,n,r,s)}function S(e,n={},r,a){let{as:o=r,children:s,refName:i="ref",...c}=F(e,["unmount","static"]),l=void 0!==e.ref?{[i]:e.ref}:{},u="function"==typeof s?s(n):s;c.className&&"function"==typeof c.className&&(c.className=c.className(n));let d={};if(o===t.Fragment&&Object.keys(A(c)).length>0){if(!(0,t.isValidElement)(u)||Array.isArray(u)&&u.length>1)throw new Error(['Passing props on "Fragment"!',"",`The current component <${a} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(c).map((e=>` - ${e}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map((e=>` - ${e}`)).join("\n")].join("\n"));return(0,t.cloneElement)(u,Object.assign({},C(u.props,A(F(c,["ref"]))),d,l))}return(0,t.createElement)(o,Object.assign({},F(c,["ref"]),o!==t.Fragment&&l,o!==t.Fragment&&d),u)}function C(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},n={};for(let r of e)for(let e in r)e.startsWith("on")&&"function"==typeof r[e]?(null!=n[e]||(n[e]=[]),n[e].push(r[e])):t[e]=r[e];if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(n).map((e=>[e,void 0]))));for(let e in n)Object.assign(t,{[e](t,...r){let a=n[e];for(let e of a){if(t.defaultPrevented)return;e(t,...r)}}});return t}function O(e){var n;return Object.assign((0,t.forwardRef)(e),{displayName:null!=(n=e.displayName)?n:e.name})}function A(e){let t=Object.assign({},e);for(let e in t)void 0===t[e]&&delete t[e];return t}function F(e,t=[]){let n=Object.assign({},e);for(let e of t)e in n&&delete n[e];return n}let M=(0,t.createContext)(null);M.displayName="OpenClosedContext";var P=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(P||{});function R(){return(0,t.useContext)(M)}function I({value:e,children:n}){return t.createElement(M.Provider,{value:e},n)}let D="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,L={serverHandoffComplete:!1};function N(){let[e,n]=(0,t.useState)(L.serverHandoffComplete);return(0,t.useEffect)((()=>{!0!==e&&n(!0)}),[e]),(0,t.useEffect)((()=>{!1===L.serverHandoffComplete&&(L.serverHandoffComplete=!0)}),[]),e}var T;let B=0;function z(){return++B}let q=null!=(T=t.useId)?T:function(){let e=N(),[n,r]=t.useState(e?z:null);return D((()=>{null===n&&r(z())}),[n]),null!=n?""+n:void 0};function V(){let e=(0,t.useRef)(!1);return D((()=>(e.current=!0,()=>{e.current=!1})),[]),e}function K(e){let n=(0,t.useRef)(e);return D((()=>{n.current=e}),[e]),n}let W=function(e){let n=K(e);return t.useCallback(((...e)=>n.current(...e)),[n])},H=Symbol();function U(...e){let n=(0,t.useRef)(e);(0,t.useEffect)((()=>{n.current=e}),[e]);let r=W((e=>{for(let t of n.current)null!=t&&("function"==typeof t?t(e):t.current=e)}));return e.every((e=>null==e||(null==e?void 0:e[H])))?void 0:r}function Y(){let e=[],t=[],n={enqueue(e){t.push(e)},addEventListener:(e,t,r,a)=>(e.addEventListener(t,r,a),n.add((()=>e.removeEventListener(t,r,a)))),requestAnimationFrame(...e){let t=requestAnimationFrame(...e);return n.add((()=>cancelAnimationFrame(t)))},nextFrame:(...e)=>n.requestAnimationFrame((()=>n.requestAnimationFrame(...e))),setTimeout(...e){let t=setTimeout(...e);return n.add((()=>clearTimeout(t)))},add:t=>(e.push(t),()=>{let n=e.indexOf(t);if(n>=0){let[t]=e.splice(n,1);t()}}),dispose(){for(let t of e.splice(0))t()},async workQueue(){for(let e of t.splice(0))await e()}};return n}function $(e,...t){e&&t.length>0&&e.classList.add(...t)}function G(e,...t){e&&t.length>0&&e.classList.remove(...t)}var J=(e=>(e.Ended="ended",e.Cancelled="cancelled",e))(J||{});function X({container:e,direction:n,classes:r,events:a,onStart:o,onStop:s}){let i=V(),c=function(){let[e]=(0,t.useState)(Y);return(0,t.useEffect)((()=>()=>e.dispose()),[e]),e}(),l=K(n),u=W((()=>E(l.current,{enter:()=>a.current.beforeEnter(),leave:()=>a.current.beforeLeave(),idle:()=>{}}))),d=W((()=>E(l.current,{enter:()=>a.current.afterEnter(),leave:()=>a.current.afterLeave(),idle:()=>{}})));D((()=>{let t=Y();c.add(t.dispose);let n=e.current;if(n&&"idle"!==l.current&&i.current)return t.dispose(),u(),o.current(l.current),t.add(function(e,t,n,r){let a=n?"enter":"leave",o=Y(),s=void 0!==r?function(e){let t={called:!1};return(...n)=>{if(!t.called)return t.called=!0,e(...n)}}(r):()=>{},i=E(a,{enter:()=>t.enter,leave:()=>t.leave}),c=E(a,{enter:()=>t.enterTo,leave:()=>t.leaveTo}),l=E(a,{enter:()=>t.enterFrom,leave:()=>t.leaveFrom});return G(e,...t.enter,...t.enterTo,...t.enterFrom,...t.leave,...t.leaveFrom,...t.leaveTo,...t.entered),$(e,...i,...l),o.nextFrame((()=>{G(e,...l),$(e,...c),function(e,t){let n=Y();if(!e)return n.dispose;let{transitionDuration:r,transitionDelay:a}=getComputedStyle(e),[o,s]=[r,a].map((e=>{let[t=0]=e.split(",").filter(Boolean).map((e=>e.includes("ms")?parseFloat(e):1e3*parseFloat(e))).sort(((e,t)=>t-e));return t}));if(o+s!==0){let r=[];r.push(n.addEventListener(e,"transitionrun",(a=>{a.target===a.currentTarget&&(r.splice(0).forEach((e=>e())),r.push(n.addEventListener(e,"transitionend",(e=>{e.target===e.currentTarget&&(t("ended"),r.splice(0).forEach((e=>e())))})),n.addEventListener(e,"transitioncancel",(e=>{e.target===e.currentTarget&&(t("cancelled"),r.splice(0).forEach((e=>e())))}))))})))}else t("ended");n.add((()=>t("cancelled"))),n.dispose}(e,(n=>("ended"===n&&(G(e,...i),$(e,...t.entered)),s(n))))})),o.dispose}(n,r.current,"enter"===l.current,(e=>{t.dispose(),E(e,{[J.Ended](){d(),s.current(l.current)},[J.Cancelled]:()=>{}})}))),t.dispose}),[n])}function Q(e=""){return e.split(" ").filter((e=>e.trim().length>1))}let Z=(0,t.createContext)(null);Z.displayName="TransitionContext";var ee,te=((ee=te||{}).Visible="visible",ee.Hidden="hidden",ee);let ne=(0,t.createContext)(null);function re(e){return"children"in e?re(e.children):e.current.filter((({state:e})=>"visible"===e)).length>0}function ae(e){let n=K(e),r=(0,t.useRef)([]),a=V(),o=W(((e,t=k.Hidden)=>{let o=r.current.findIndex((({id:t})=>t===e));-1!==o&&(E(t,{[k.Unmount](){r.current.splice(o,1)},[k.Hidden](){r.current[o].state="hidden"}}),function(e){"function"==typeof queueMicrotask?queueMicrotask(e):Promise.resolve().then(e).catch((e=>setTimeout((()=>{throw e}))))}((()=>{var e;!re(r)&&a.current&&(null==(e=n.current)||e.call(n))})))})),s=W((e=>{let t=r.current.find((({id:t})=>t===e));return t?"visible"!==t.state&&(t.state="visible"):r.current.push({id:e,state:"visible"}),()=>o(e,k.Unmount)}));return(0,t.useMemo)((()=>({children:r,register:s,unregister:o})),[s,o,r])}function oe(){}ne.displayName="NestingContext";let se=["beforeEnter","afterEnter","beforeLeave","afterLeave"];function ie(e){var t;let n={};for(let r of se)n[r]=null!=(t=e[r])?t:oe;return n}let ce=j.RenderStrategy,le=O((function(e,n){let{beforeEnter:r,afterEnter:a,beforeLeave:o,afterLeave:s,enter:i,enterFrom:c,enterTo:l,entered:u,leave:d,leaveFrom:p,leaveTo:f,...b}=e,h=(0,t.useRef)(null),m=U(h,n),[v,y]=(0,t.useState)("visible"),g=b.unmount?k.Unmount:k.Hidden,{show:x,appear:w,initial:j}=function(){let e=(0,t.useContext)(Z);if(null===e)throw new Error("A is used but it is missing a parent or .");return e}(),{register:S,unregister:C}=function(){let e=(0,t.useContext)(ne);if(null===e)throw new Error("A is used but it is missing a parent or .");return e}(),O=(0,t.useRef)(null),A=q();(0,t.useEffect)((()=>{if(A)return S(A)}),[S,A]),(0,t.useEffect)((()=>{if(g===k.Hidden&&A){if(x&&"visible"!==v)return void y("visible");E(v,{hidden:()=>C(A),visible:()=>S(A)})}}),[v,A,S,C,x,g]);let F=K({enter:Q(i),enterFrom:Q(c),enterTo:Q(l),entered:Q(u),leave:Q(d),leaveFrom:Q(p),leaveTo:Q(f)}),M=function(e){let n=(0,t.useRef)(ie(e));return(0,t.useEffect)((()=>{n.current=ie(e)}),[e]),n}({beforeEnter:r,afterEnter:a,beforeLeave:o,afterLeave:s}),R=N();(0,t.useEffect)((()=>{if(R&&"visible"===v&&null===h.current)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")}),[h,v,R]);let D=j&&!w,L=!R||D||O.current===x?"idle":x?"enter":"leave",T=(0,t.useRef)(!1),B=ae((()=>{T.current||(y("hidden"),C(A))}));X({container:h,classes:F,events:M,direction:L,onStart:K((()=>{T.current=!0})),onStop:K((e=>{T.current=!1,"leave"===e&&!re(B)&&(y("hidden"),C(A))}))}),(0,t.useEffect)((()=>{!D||(g===k.Hidden?O.current=null:O.current=x)}),[x,D,v]);let z=b,V={ref:m};return t.createElement(ne.Provider,{value:B},t.createElement(I,{value:E(v,{visible:P.Open,hidden:P.Closed})},_({ourProps:V,theirProps:z,defaultTag:"div",features:ce,visible:"visible"===v,name:"Transition.Child"})))})),ue=O((function(e,n){let{show:r,appear:a=!1,unmount:o,...s}=e,i=(0,t.useRef)(null),c=U(i,n);N();let l=R();if(void 0===r&&null!==l&&(r=E(l,{[P.Open]:!0,[P.Closed]:!1})),![!0,!1].includes(r))throw new Error("A is used but it is missing a `show={true | false}` prop.");let[u,d]=(0,t.useState)(r?"visible":"hidden"),p=ae((()=>{d("hidden")})),[f,b]=(0,t.useState)(!0),h=(0,t.useRef)([r]);D((()=>{!1!==f&&h.current[h.current.length-1]!==r&&(h.current.push(r),b(!1))}),[h,r]);let m=(0,t.useMemo)((()=>({show:r,appear:a,initial:f})),[r,a,f]);(0,t.useEffect)((()=>{if(r)d("visible");else if(re(p)){let e=i.current;if(!e)return;let t=e.getBoundingClientRect();0===t.x&&0===t.y&&0===t.width&&0===t.height&&d("hidden")}else d("hidden")}),[r,p]);let v={unmount:o};return t.createElement(ne.Provider,{value:p},t.createElement(Z.Provider,{value:m},_({ourProps:{...v,as:t.Fragment,children:t.createElement(le,{ref:c,...v,...s})},theirProps:{},defaultTag:t.Fragment,features:ce,visible:"visible"===u,name:"Transition"})))})),de=O((function(e,n){let r=null!==(0,t.useContext)(Z),a=null!==R();return t.createElement(t.Fragment,null,!r&&a?t.createElement(ue,{ref:n,...e}):t.createElement(le,{ref:n,...e}))})),pe=Object.assign(ue,{Child:de,Root:ue});const fe=(0,o.forwardRef)((({isOpen:e,header:n,children:r},a)=>(0,t.createElement)(pe.Root,{ref:a,show:e,as:o.Fragment},(0,t.createElement)("div",{className:"yoast-slide-over pointer-events-none"},(0,t.createElement)("div",{className:"fixed inset-0"}),(0,t.createElement)("div",{className:"fixed inset-0 overflow-hidden"},(0,t.createElement)("div",{className:"absolute inset-0 overflow-hidden"},(0,t.createElement)("div",{className:"pointer-events-none fixed inset-y-0 end-0 flex max-w-full pend-10"},(0,t.createElement)(pe.Child,{as:o.Fragment,enter:"transform transition ease-in-out duration-500 sm:duration-700",enterFrom:"translate-x-full",enterTo:"translate-x-0",leave:"transform transition ease-in-out duration-500 sm:duration-700",leaveFrom:"translate-x-0",leaveTo:"translate-x-full"},(0,t.createElement)("div",{className:"w-screen max-w-md"},(0,t.createElement)("div",{className:"yoast-slide-over__container pointer-events-auto"},(0,t.createElement)("header",{className:"yoast-slide-over__header"},n),(0,t.createElement)("div",{className:"yoast-slide-over__content"},r)))))))))));fe.propTypes={isOpen:p().bool.isRequired,header:p().node.isRequired,children:p().node.isRequired};const be=fe,he=new RegExp(/^https?:\/\//i),me=()=>(0,t.createElement)("em",null,(0,c.__)("Focus keyphrase not set","wordpress-seo-premium")),ve=({onClick:e})=>(0,t.createElement)(o.Fragment,null,(0,t.createElement)("h2",null,(0,t.createElement)(g,null),(0,c.__)("Front-end SEO inspector","wordpress-seo-premium")),(0,t.createElement)("button",{className:"close",onClick:e},(0,t.createElement)(l.SvgIcon,{icon:"times",color:u.colors.$color_grey_text})));ve.propTypes={onClick:p().func.isRequired};const ye=()=>{const e=(0,i.useSelect)((e=>e("yoast-seo/frontend-inspector").getData()),[]),[n,r]=(0,o.useState)("open"===localStorage.getItem("wpseoFrontendInspectorOpen")),a=(0,o.useCallback)((e=>{e.preventDefault(),r(!n)}),[n]),s=(0,o.useCallback)((()=>r(!1)),[r]),d=(0,o.useMemo)((()=>{const t=v(e.seoScore);return e.isIndexable?e.focusKeyphrase?"ok"===t.className?t.screenReaderText=(0,c.__)("OK","wordpress-seo-premium"):"good"===t.className&&(t.screenReaderText=(0,c.__)("Good","wordpress-seo-premium")):(t.className="na",t.screenReaderText=(0,c.__)("Focus keyphrase not set","wordpress-seo-premium")):(t.className="noindex",t.screenReaderText=(0,c.__)("No index","wordpress-seo-premium")),t}),[e.seoScore,e.isIndexable]),p=(0,o.useMemo)((()=>v(e.readabilityScore)),[e.readabilityScore]),f=(0,o.useRef)();return(0,o.useEffect)((()=>{const e=document.querySelector("#wp-admin-bar-wpseo-frontend-inspector > a");if(e)return e.addEventListener("click",a),()=>e.removeEventListener("click",a)}),[a]),(0,o.useEffect)((()=>localStorage.setItem("wpseoFrontendInspectorOpen",n?"open":"closed")),[n]),(0,o.useEffect)((()=>{const e=document.getElementById("wpadminbar");if(!e)return;const t=()=>{if(!f.current)return;if(32===e.clientHeight||0===window.scrollY||window.innerWidth>600)return void f.current.removeAttribute("style");const t=window.scrollY<46?46-window.scrollY:0;f.current.setAttribute("style",`--yst-admin-bar-margin: ${t}px;`)};return window.addEventListener("resize",t),window.addEventListener("scroll",t),()=>{window.removeEventListener("resize",t),window.removeEventListener("scroll",t)}}),[]),(0,t.createElement)(be,{ref:f,isOpen:n,header:(0,t.createElement)(ve,{onClick:s})},e.editButton&&(0,t.createElement)("section",null,e.keywordAnalysisActive&&(0,t.createElement)(o.Fragment,null,(0,t.createElement)("h3",null,(0,c.__)("Focus Keyphrase","wordpress-seo-premium")),(0,t.createElement)("span",null,e.focusKeyphrase||(0,t.createElement)(me,null))),(e.keywordAnalysisActive||e.contentAnalysisActive)&&(0,t.createElement)("div",{className:"checks"},(0,t.createElement)("h3",null,(0,c.__)("Checks","wordpress-seo-premium")),e.keywordAnalysisActive&&(0,t.createElement)(y,{label:(0,c.__)("SEO score","wordpress-seo-premium")+":",score:d.className||"not-set",scoreValue:d.screenReaderText||(0,c.__)("Not available","wordpress-seo-premium")}),e.contentAnalysisActive&&(0,t.createElement)(y,{label:(0,c.__)("Readability score","wordpress-seo-premium")+":",score:"na"!==p.className&&p.className?p.className:"not-set",scoreValue:p.screenReaderReadabilityText||(0,c.__)("Not available","wordpress-seo-premium")})),(0,t.createElement)("div",{className:"yoast-edit-button"},(0,t.createElement)(l.LinkButton,{href:e.editButton.href},(0,t.createElement)(l.SvgIcon,{icon:"edit",color:u.colors.$color_grey_text})," ",e.editButton.text))),(0,t.createElement)("section",null,(0,t.createElement)("h3",null,(0,c.__)("Meta tags","wordpress-seo-premium")),(0,t.createElement)("ul",null,e.metaTags.map(((e,n)=>(0,t.createElement)("li",{key:`${e.key}-${n}`},(0,t.createElement)("strong",null,e.key),(0,t.createElement)("br",null),(0,t.createElement)("span",{dir:he.test(e.val)?"ltr":null},e.val)))))),(0,t.createElement)("section",null,(0,t.createElement)("h3",null,(0,c.__)("Schema","wordpress-seo-premium")),(0,t.createElement)(b(),{src:e.schema,collapsed:3,displayDataTypes:!1,displayObjectSize:!1,indentWidth:2})))},ge=()=>{const e=document.querySelector('meta[name="robots"]'),t=Array.from(document.querySelectorAll(".yoast-seo-meta-tag")).map((e=>e.name?{key:e.name,val:e.content}:e.getAttribute("property")?{key:e.getAttribute("property"),val:e.content}:"LINK"===e.nodeName?{key:e.rel,val:decodeURI(e.href)}:void 0)).filter(Boolean);return[{key:"title",val:document.title},...t,{key:"robots",val:(0,h.get)(e,"content","")}]},Ee=(e=(()=>{const e=document.getElementById("wp-admin-bar-edit"),t=e&&e.firstChild.href&&e.firstChild.text?{href:e.firstChild.href,text:e.firstChild.text}:null,n=Array.from(document.querySelectorAll(".yoast-schema-graph")).map((e=>JSON.parse(e.text)));return{isIndexable:(0,h.get)(window,"wpseoScriptData.frontendInspector.isIndexable",!0),contentAnalysisActive:(0,h.get)(window,"wpseoScriptData.frontendInspector.contentAnalysisActive",!1),keywordAnalysisActive:(0,h.get)(window,"wpseoScriptData.frontendInspector.keywordAnalysisActive",!1),focusKeyphrase:(0,h.get)(window,"wpseoScriptData.frontendInspector.indexable.primary_focus_keyword",""),seoScore:(0,h.get)(window,"wpseoScriptData.frontendInspector.indexable.primary_focus_keyword_score",null),readabilityScore:(0,h.get)(window,"wpseoScriptData.frontendInspector.indexable.readability_score",null)||0,metaTags:ge(),schema:n,editButton:t}})(),t)=>e,xe=e=>e;a()((()=>{(0,i.register)((0,i.createReduxStore)("yoast-seo/frontend-inspector",{reducer:Ee,selectors:e}));const n=document.createElement("div"),r=n.attachShadow({mode:"open"}),a=document.createElement("style"),c=document.createElement("div");n.style.position="relative",n.style.zIndex="99998",c.setAttribute("id","wpseo-frontend-inspector"),a.textContent='\n#wpseo-frontend-inspector {\n\t--yoast-color-default: #404040;\n\t--yoast-color-default-darker: #303030;\n\t--yoast-color-primary: #a4286a;\n\t--yoast-color-secondary: #f7f7f7;\n\t--yoast-color-white: #fff;\n\t--yoast-color-green: #6EA029;\n\t--yoast-color-primary-darker: #7b1e50;\n\t--yoast-color-primary-lighter: #F5D6E6;\n\t--yoast-color-secondary-darker: #d9d9d9;\n\t--yoast-color-button-upsell: #FEC228;\n\t--yoast-color-button-upsell-hover: #F2AE01;\n\t--yoast-color-dark: #303030;\n\t--yoast-color-sale: #fec228;\n\t--yoast-color-sale-darker: #feb601;\n\t--yoast-color-border: rgba(0, 0, 0, 0.2);\n\t--yoast-color-label: #303030;\n\t--yoast-color-label-help: #707070;\n\t--yoast-color-active: #6EA029;\n\t--yoast-color-inactive: #DC3232;\n\t--yoast-color-inactive-text: #707070;\n\t--yoast-color-inactive-grey: #9E9E9E;\n\t--yoast-color-inactive-grey-light: #f1f1f1;\n\t--yoast-color-active-light: #B6CF94;\n\t--yoast-transition-default: all 150ms ease-out;\n\t--yoast-color-link: #006dac;\n\t--yoast-color-border--default: rgba(0, 0, 0, 0.2);\n\t--yoast-color-focus: 0 0 0 2px #007fff, 0 0 0 5px #bfdfff;\n\n\tbackground: #ffffff;\n\tz-index: 99998;\n\tfont-size: 14px;\n\tfont-weight: normal;\n\tfont-family: Inter var,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";\n\tcolor: #4b5563;\n\tbox-shadow: rgb(255, 255, 255) 0 0 0 0, rgba(0, 0, 0, 0.05) 0 0 0 1px, rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px;\n\tline-height: 1.5;\n\tletter-spacing: 0;\n}\n\n#wpseo-frontend-inspector section {\n\tpadding: 16px 24px;\n\tborder-bottom: 1px solid #e5e7eb;\n\tbox-sizing: border-box;\n\tword-break: break-word;\n}\n\n#wpseo-frontend-inspector h2 {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tmargin: 8px 0;\n\tfont-size: 16px;\n\tfont-weight: 500;\n\tcolor: var(--yoast-color-primary);\n}\n#wpseo-frontend-inspector h2 > svg {\n\twidth: 18px;\n\theight: 18px;\n\tfill: var(--yoast-color-primary);\n}\n\n#wpseo-frontend-inspector h3 {\n\tfont-size: 14px;\n\tfont-weight: 500;\n\tcolor: #111827;\n\tmargin: 8px 0 4px 0;\n}\n\n#wpseo-frontend-inspector strong {\n\tfont-weight: 500;\n\tcolor: #374151;\n}\n\n#wpseo-frontend-inspector button.close {\n\twidth: 44px;\n\theight: 44px;\n\tbackground: transparent;\n\tborder: 0;\n\tpadding: 0;\n\tmargin-right: -16px;\n\tcursor: pointer;\n}\n\n#wpseo-frontend-inspector .checks:not(:first-child) {\n\tmargin-top: 16px;\n}\n#wpseo-frontend-inspector .checks > div {\n\tline-height: 2;\n}\n#wpseo-frontend-inspector .checks svg {\n\tmargin-right: 4px;\n\twidth: 16px;\n\theight: 16px;\n\tvertical-align: middle;\n\tdisplay: inline;\n}\n\n#wpseo-frontend-inspector .yoast-edit-button:not(:first-child) {\n\tmargin-top: 16px;\n}\n#wpseo-frontend-inspector .yoast-edit-button svg {\n\tmargin-inline-end: 4px;\n\twidth: 16px;\n\theight: 16px;\n\t-webkit-flex: none;\n\t-ms-flex: none;\n\tflex: none;\n}\n\n#wpseo-frontend-inspector ul {\n\tpadding: 0;\n\tmargin: 0;\n\tlist-style: none;\n}\n#wpseo-frontend-inspector li {\n\tpadding: 8px 0;\n\tmargin: 0;\n}\n\n#wpseo-frontend-inspector .yoast-slide-over {\n\t--yst-admin-bar-margin: 32px;\n\t--yst-translate-x: 0;\n\t--yst-translate-y: 0;\n\t--yst-rotate: 0;\n\t--yst-skew-x: 0;\n\t--yst-skew-y: 0;\n\t--yst-scale-x: 1;\n\t--yst-scale-y: 1;\n\n\tposition: relative;\n\tz-index: 10;\n}\n#wpseo-frontend-inspector .yoast-slide-over .yoast-slide-over__container {\n\tmargin-top: var(--yst-admin-bar-margin);\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow-y: scroll;\n\theight: 100%;\n\t--yst-bg-opacity: 1;\n\tbackground-color: rgb(255 255 255 / var(--yst-bg-opacity));\n\tbox-shadow: 0 0 #0000,0 0 #0000,0 20px 25px -5px rgb(0 0 0 / 0.1),0 8px 10px -6px rgb(0 0 0 / 0.1);\n}\n#wpseo-frontend-inspector .yoast-slide-over__header {\n\tposition: sticky;\n\ttop: 0;\n\tleft: 0;\n\tpadding: 16px 24px;\n\tz-index: 99998;\n\tbackground: #f3f4f6;\n\tdisplay: flex;\n justify-content: space-between;\n}\n#wpseo-frontend-inspector .yoast-slide-over .yoast-slide-over__content {\n\tmargin-bottom: var(--yst-admin-bar-margin);\n\tposition: relative;\n\tflex: 1 1 0%;\n}\n@media (max-width: 782px) {\n\t#wpseo-frontend-inspector .yoast-slide-over {\n\t\t--yst-admin-bar-margin: 46px;\n\t}\n}\n#wpseo-frontend-inspector .fixed {\n\tposition: fixed;\n}\n#wpseo-frontend-inspector .absolute {\n\tposition: absolute;\n}\n#wpseo-frontend-inspector .inset-0 {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n#wpseo-frontend-inspector .overflow-hidden {\n\toverflow: hidden;\n}\n#wpseo-frontend-inspector .pointer-events-none {\n\tpointer-events: none;\n}\n#wpseo-frontend-inspector .inset-y-0 {\n\ttop: 0;\n\tbottom: 0;\n}\n#wpseo-frontend-inspector .end-0 {\n\tright: 0;\n}\n#wpseo-frontend-inspector.rtl .end-0 {\n\tright: auto;\n\tleft: 0;\n}\n#wpseo-frontend-inspector .flex {\n\tdisplay: flex;\n}\n#wpseo-frontend-inspector .max-w-full {\n\tmax-width: 100%;\n}\n#wpseo-frontend-inspector .pend-10 {\n\tpadding-left: 40px;\n}\n#wpseo-frontend-inspector.rtl .pend-10 {\n\tpadding-left: 0;\n\tpadding-right: 40px;\n}\n#wpseo-frontend-inspector .transform {\n\ttransform: translate(var(--yst-translate-x),var(--yst-translate-y)) rotate(var(--yst-rotate)) skewX(var(--yst-skew-x)) skewY(var(--yst-skew-y)) scaleX(var(--yst-scale-x)) scaleY(var(--yst-scale-y));\n}\n#wpseo-frontend-inspector .transition {\n\ttransition-property: color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;\n\ttransition-property: color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;\n\ttransition-property: color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;\n\ttransition-timing-function: cubic-bezier(0.4,0,0.2,1);\n\ttransition-duration: 150ms;\n}\n#wpseo-frontend-inspector .ease-in-out {\n\ttransition-timing-function: cubic-bezier(0.4,0,0.2,1);\n}\n#wpseo-frontend-inspector .duration-500 {\n\ttransition-duration: .5s;\n}\n@media (min-width: 640px) {\n\t#wpseo-frontend-inspector .sm:duration-700 {\n\t\ttransition-duration: .7s;\n\t}\n}\n#wpseo-frontend-inspector .translate-x-full {\n\t--yst-translate-x: 100%;\n\ttransform: translate(var(--yst-translate-x),var(--yst-translate-y)) rotate(var(--yst-rotate)) skewX(var(--yst-skew-x)) skewY(var(--yst-skew-y)) scaleX(var(--yst-scale-x)) scaleY(var(--yst-scale-y));\n}\n#wpseo-frontend-inspector.rtl .translate-x-full {\n\t--yst-translate-x: -100%;\n}\n#wpseo-frontend-inspector .translate-x-0 {\n\t--yst-translate-x: 0px;\n\ttransform: translate(var(--yst-translate-x),var(--yst-translate-y)) rotate(var(--yst-rotate)) skewX(var(--yst-skew-x)) skewY(var(--yst-skew-y)) scaleX(var(--yst-scale-x)) scaleY(var(--yst-scale-y));\n}\n#wpseo-frontend-inspector .pointer-events-auto {\n\tpointer-events: auto;\n}\n#wpseo-frontend-inspector .w-screen {\n\twidth: 100vw;\n}\n#wpseo-frontend-inspector .max-w-md {\n\tmax-width: 448px;\n}\n\n#wpseo-frontend-inspector .variable-row .copy-to-clipboard-container {\n\tposition: absolute;\n}\n#wpseo-frontend-inspector .react-json-view {\n\tdirection: ltr;\n}\n',r.append(a,c),document.body.appendChild(n),document.body.classList.contains("rtl")&&c.classList.add("rtl"),(0,o.render)((0,t.createElement)(s.StyleSheetManager,{target:r},(0,t.createElement)(ye,null)),c)}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/introductions-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/introductions-2290.min.js new file mode 100644 index 00000000..4a9dc4b9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/introductions-2290.min.js @@ -0,0 +1,6 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var a in s)e.o(s,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:s[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.domReady;var s=e.n(t);const a=window.wp.hooks,r=window.lodash,i=window.yoast.reduxJsToolkit,n="adminUrl",o=(0,i.createSlice)({name:n,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),l=(o.getInitialState,{selectAdminUrl:e=>(0,r.get)(e,n,"")});l.selectAdminLink=(0,i.createSelector)([l.selectAdminUrl,(e,t)=>t],((e,t)=>{try{return new URL(t,e).href}catch(t){return e}})),o.actions,o.reducer;const c=window.wp.apiFetch;var m=e.n(c);const d="hasConsent",u=`${d}/storeConsent`,y=(0,i.createSlice)({name:d,initialState:!1,reducers:{giveAiGeneratorConsent:(e,{payload:t})=>t}}),p=y.getInitialState,w={selectHasAiGeneratorConsent:e=>(0,r.get)(e,d,!1)},g={...y.actions,storeAiGeneratorConsent:function*(e){try{yield{type:u,payload:e}}catch(e){return!1}return yield{type:`${d}/giveAiGeneratorConsent`,payload:e},!0}},h={[u]:({payload:e})=>m()({path:"yoast/v1/ai_generator/consent",method:"POST",data:{consent:e},parse:!1})},v=y.reducer,f="pluginUrl",b=(0,i.createSlice)({name:f,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),E=b.getInitialState,k={selectPluginUrl:e=>(0,r.get)(e,f,"")};k.selectImageLink=(0,i.createSelector)([k.selectPluginUrl,(e,t,s="assets/images")=>s,(e,t)=>t],((e,t,s)=>[(0,r.trimEnd)(e,"/"),(0,r.trim)(t,"/"),(0,r.trimStart)(s,"/")].join("/")));const x=b.actions,S=b.reducer,P=window.wp.url,_="linkParams",N=(0,i.createSlice)({name:_,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),C=(N.getInitialState,{selectLinkParam:(e,t,s={})=>(0,r.get)(e,`${_}.${t}`,s),selectLinkParams:e=>(0,r.get)(e,_,{})});C.selectLink=(0,i.createSelector)([C.selectLinkParams,(e,t)=>t],((e,t)=>(0,P.addQueryArgs)(t,e))),N.actions,N.reducer;const R="loading",L="showPlay",I="askPermission",q="isPlaying",A="wistiaEmbedPermission",$=(0,i.createSlice)({name:A,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${A}/request`,(e=>{e.status=R})),e.addCase(`${A}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${A}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,r.get)(t,"error.code",500),message:(0,r.get)(t,"error.message","Unknown")}}))}}),O=($.getInitialState,$.actions,$.reducer,window.React),U=window.wp.data,B=window.wp.element,G=O.forwardRef((function(e,t){return O.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),O.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),T=window.wp.i18n,M=window.yoast.uiLibrary,j=window.yoast.propTypes;var W=e.n(j);const Y=({onGiveConsent:e,learnMoreLink:t,privacyPolicyLink:s,termsOfServiceLink:a,thumbnail:r,wistiaEmbedPermission:i})=>{const{onClose:n,initialFocus:o}=(0,M.useModalContext)(),[l,c]=(0,M.useToggleState)(!1),m=(0,B.useCallback)((()=>{n(),e(!0)}),[e,n]),d=(0,B.createInterpolateElement)((0,T.sprintf)(/* translators: %1$s and %2$s are a set of anchor tags and %3$s and %4$s are a set of anchor tags. */ /* translators: %1$s and %2$s are a set of anchor tags and %3$s and %4$s are a set of anchor tags. */ +(0,T.__)("I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.","wordpress-seo-premium"),"","","",""),{a1:(0,O.createElement)(F,{href:a}),a2:(0,O.createElement)(F,{href:s})});return(0,O.createElement)("div",{className:"yst-flex yst-flex-col yst-items-center yst-p-10"},(0,O.createElement)("div",{className:"yst-relative yst-w-full"},(0,O.createElement)(H,{videoId:"vmrahpfjxp",thumbnail:r,wistiaEmbedPermission:i}),(0,O.createElement)(M.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,O.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium"},(0,O.createElement)("span",{className:"yst-introduction-modal-uppercase"},(0,T.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ /* translators: %1$s expands to Yoast SEO Premium. */ +(0,T.__)("New to %1$s","wordpress-seo-premium"),"Yoast SEO Premium"))," ",(0,O.createElement)("span",{className:"yst-uppercase yst-text-slate-700"},"21.0")),(0,O.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,O.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,T.__)("Generate titles & descriptions with Yoast AI!","wordpress-seo-premium")),(0,O.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,B.createInterpolateElement)((0,T.sprintf)(/* translators: %1$s and %2$s are anchor tag; %3$s is the arrow icon. */ /* translators: %1$s and %2$s are anchor tag; %3$s is the arrow icon. */ +(0,T.__)("Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s","wordpress-seo-premium"),"","",""),{a:(0,O.createElement)(F,{href:t,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,O.createElement)(G,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})}))),(0,O.createElement)("div",{className:"yst-flex yst-w-full yst-mt-6"},(0,O.createElement)("hr",{className:"yst-w-full yst-text-gray-200"})),(0,O.createElement)("div",{className:"yst-flex yst-items-start yst-mt-4"},(0,O.createElement)("input",{type:"checkbox",id:"yst-ai-consent-checkbox",name:"yst-ai-consent-checkbox",checked:l,value:l?"true":"false",onChange:c,className:"yst-checkbox__input",ref:o}),(0,O.createElement)("label",{htmlFor:"yst-ai-consent-checkbox",className:"yst-label yst-checkbox__label yst-text-xs yst-font-normal yst-text-slate-500"},d)),(0,O.createElement)("div",{className:"yst-w-full yst-flex yst-mt-4"},(0,O.createElement)(M.Button,{as:"button",className:"yst-grow",size:"large",disabled:!l,onClick:m},(0,T.__)("Start generating","wordpress-seo-premium"))),(0,O.createElement)(M.Button,{as:"button",className:"yst-mt-4",variant:"tertiary",onClick:n},(0,T.__)("Close","wordpress-seo-premium")))};Y.propTypes={onGiveConsent:W().func.isRequired,learnMoreLink:W().string.isRequired,privacyPolicyLink:W().string.isRequired,termsOfServiceLink:W().string.isRequired,thumbnail:W().shape({src:W().string.isRequired,width:W().string,height:W().string}).isRequired,wistiaEmbedPermission:W().shape({value:W().bool.isRequired,status:W().string.isRequired,set:W().func.isRequired}).isRequired};const F=({href:e,children:t,...s})=>(0,O.createElement)(M.Link,{target:"_blank",rel:"noopener noreferrer",...s,href:e},t,(0,O.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,T.__)("(Opens in a new browser tab)","wordpress-seo-premium")));F.propTypes={href:W().string.isRequired,children:W().node},F.defaultProps={children:null};const z=window.yoast.reactHelmet,H=({videoId:e,thumbnail:t,wistiaEmbedPermission:s})=>{const[a,r]=(0,B.useState)(s.value?q:L),i=(0,B.useCallback)((()=>r(q)),[r]),n=(0,B.useCallback)((()=>{s.value?i():r(I)}),[s.value,i,r]),o=(0,B.useCallback)((()=>r(L)),[r]),l=(0,B.useCallback)((()=>{s.set(!0),i()}),[s.set,i]);return(0,O.createElement)(B.Fragment,null,s.value&&(0,O.createElement)(z.Helmet,null,(0,O.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,O.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},a===L&&(0,O.createElement)("button",{className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:n},(0,O.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...t})),a===I&&(0,O.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,O.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},s.status===R&&(0,O.createElement)(M.Spinner,null),s.status!==R&&(0,T.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ /* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,T.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo-premium"),"Yoast SEO","Wistia")),(0,O.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,O.createElement)(M.Button,{type:"button",variant:"secondary",onClick:o,disabled:s.status===R},(0,T.__)("Deny","wordpress-seo-premium")),(0,O.createElement)(M.Button,{type:"button",variant:"primary",onClick:l,disabled:s.status===R},(0,T.__)("Allow","wordpress-seo-premium")))),s.value&&a===q&&(0,O.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===e&&(0,O.createElement)(M.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==e&&(0,O.createElement)("div",{className:`wistia_embed wistia_async_${e} videoFoam=true`}))))};H.propTypes={videoId:W().string.isRequired,thumbnail:W().shape({src:W().string.isRequired,width:W().string,height:W().string}).isRequired,wistiaEmbedPermission:W().shape({value:W().bool.isRequired,status:W().string.isRequired,set:W().func.isRequired}).isRequired};const D="yoast-seo/introductions",V="yoast-seo-premium/introductions",J=()=>{const e=(0,U.useSelect)((e=>e(D).selectLink("https://yoa.st/ai-generator-learn-more")),[]),t=(0,U.useSelect)((e=>e(D).selectLink("https://yoa.st/ai-generator-privacy-policy")),[]),s=(0,U.useSelect)((e=>e(D).selectLink("https://yoa.st/ai-generator-terms-of-service")),[]),{storeAiGeneratorConsent:a}=(0,U.useDispatch)(V),r=(0,U.useSelect)((e=>e(D).selectImageLink("ai-generator-preview.png")),[]),i=(0,B.useMemo)((()=>({src:r,width:"432",height:"244"})),[r]),n=(0,U.useSelect)((e=>e(D).selectWistiaEmbedPermissionValue()),[]),o=(0,U.useSelect)((e=>e(D).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:l}=(0,U.useDispatch)(D),c=(0,B.useMemo)((()=>({value:n,status:o,set:l})),[n,o,l]);return(0,O.createElement)(Y,{onGiveConsent:a,learnMoreLink:e,privacyPolicyLink:t,termsOfServiceLink:s,thumbnail:i,wistiaEmbedPermission:c})},Q=()=>{const e=(0,r.get)(window,"YoastSEO._registerIntroductionComponent",null);null!==e?(((e={})=>{(0,U.register)((e=>(0,U.createReduxStore)(V,{actions:{...g,...x},selectors:{...w,...k},initialState:(0,r.merge)({},{[d]:p(),[f]:E()},e),reducer:(0,U.combineReducers)({[d]:v,[f]:S}),controls:{...h}}))(e))})({[f]:(0,r.get)(window,"wpseoPremiumIntroductions.pluginUrl","")}),e("ai-generate-titles-and-descriptions",J)):console.error("Warning: Premium introductions expected window.YoastSEO._registerIntroductionComponent to exist.")};s()((()=>{(0,a.didAction)("yoast.introductions.ready")?Q():(0,a.addAction)("yoast.introductions.ready","yoast/yoast-seo-premium/initializeIntroductions",Q)}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/manage-ai-consent-button-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/manage-ai-consent-button-2290.min.js new file mode 100644 index 00000000..72f3b64f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/manage-ai-consent-button-2290.min.js @@ -0,0 +1,6 @@ +(()=>{var e={951:(e,t)=>{var s;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";const e=window.React,t=window.wp.data,a=window.wp.domReady;var r=s.n(a);const n=window.wp.element,i=window.yoast.uiLibrary;var o=s(951),l=s.n(o);const c=window.lodash,m=window.yoast.reduxJsToolkit,u="adminUrl",d=(0,m.createSlice)({name:u,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),y=(d.getInitialState,{selectAdminUrl:e=>(0,c.get)(e,u,"")});y.selectAdminLink=(0,m.createSelector)([y.selectAdminUrl,(e,t)=>t],((e,t)=>{try{return new URL(t,e).href}catch(t){return e}})),d.actions,d.reducer;const p=window.wp.apiFetch;var w=s.n(p);const g="hasConsent",v=`${g}/storeConsent`,h=(0,m.createSlice)({name:g,initialState:!1,reducers:{giveAiGeneratorConsent:(e,{payload:t})=>t}}),f=h.getInitialState,E={selectHasAiGeneratorConsent:e=>(0,c.get)(e,g,!1)},b={...h.actions,storeAiGeneratorConsent:function*(e){try{yield{type:v,payload:e}}catch(e){return!1}return yield{type:`${g}/giveAiGeneratorConsent`,payload:e},!0}},x={[v]:({payload:e})=>w()({path:"yoast/v1/ai_generator/consent",method:"POST",data:{consent:e},parse:!1})},k=h.reducer,S="pluginUrl",C=(0,m.createSlice)({name:S,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),N=C.getInitialState,P={selectPluginUrl:e=>(0,c.get)(e,S,"")};P.selectImageLink=(0,m.createSelector)([P.selectPluginUrl,(e,t,s="assets/images")=>s,(e,t)=>t],((e,t,s)=>[(0,c.trimEnd)(e,"/"),(0,c.trim)(t,"/"),(0,c.trimStart)(s,"/")].join("/")));const _=C.actions,R=C.reducer,L=window.wp.url,A="linkParams",$=(0,m.createSlice)({name:A,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),I=$.getInitialState,q={selectLinkParam:(e,t,s={})=>(0,c.get)(e,`${A}.${t}`,s),selectLinkParams:e=>(0,c.get)(e,A,{})};q.selectLink=(0,m.createSelector)([q.selectLinkParams,(e,t)=>t],((e,t)=>(0,L.addQueryArgs)(t,e)));const B=$.actions,M=$.reducer,O="request",G="success",T="error",j="idle",W="loading",U="showPlay",F="askPermission",D="isPlaying",Y="wistiaEmbedPermission",z=(0,m.createSlice)({name:Y,initialState:{value:!1,status:j,error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${Y}/${O}`,(e=>{e.status=W})),e.addCase(`${Y}/${G}`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${Y}/${T}`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,c.get)(t,"error.code",500),message:(0,c.get)(t,"error.message","Unknown")}}))}}),H=z.getInitialState,V={selectWistiaEmbedPermission:e=>(0,c.get)(e,Y,{value:!1,status:j}),selectWistiaEmbedPermissionValue:e=>(0,c.get)(e,[Y,"value"],!1),selectWistiaEmbedPermissionStatus:e=>(0,c.get)(e,[Y,"status"],j),selectWistiaEmbedPermissionError:e=>(0,c.get)(e,[Y,"error"],{})},J={...z.actions,setWistiaEmbedPermission:function*(e){yield{type:`${Y}/${O}`};try{return yield{type:Y,payload:e},{type:`${Y}/${G}`,payload:{value:e}}}catch(t){return{type:`${Y}/${T}`,payload:{error:t,value:e}}}}},Q={[Y]:async({payload:e})=>w()({path:"/yoast/v1/wistia_embed_permission",method:"POST",data:{value:Boolean(e)}})},K=z.reducer,X=window.yoast.propTypes;var Z=s.n(X);const ee=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),te=window.wp.i18n,se=({onGiveConsent:t,learnMoreLink:s,privacyPolicyLink:a,termsOfServiceLink:r,thumbnail:o,wistiaEmbedPermission:l})=>{const{onClose:c,initialFocus:m}=(0,i.useModalContext)(),[u,d]=(0,i.useToggleState)(!1),y=(0,n.useCallback)((()=>{c(),t(!0)}),[t,c]),p=(0,n.createInterpolateElement)((0,te.sprintf)(/* translators: %1$s and %2$s are a set of anchor tags and %3$s and %4$s are a set of anchor tags. */ /* translators: %1$s and %2$s are a set of anchor tags and %3$s and %4$s are a set of anchor tags. */ +(0,te.__)("I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.","wordpress-seo-premium"),"","","",""),{a1:(0,e.createElement)(ae,{href:r}),a2:(0,e.createElement)(ae,{href:a})});return(0,e.createElement)("div",{className:"yst-flex yst-flex-col yst-items-center yst-p-10"},(0,e.createElement)("div",{className:"yst-relative yst-w-full"},(0,e.createElement)(ne,{videoId:"vmrahpfjxp",thumbnail:o,wistiaEmbedPermission:l}),(0,e.createElement)(i.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,e.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium"},(0,e.createElement)("span",{className:"yst-introduction-modal-uppercase"},(0,te.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ /* translators: %1$s expands to Yoast SEO Premium. */ +(0,te.__)("New to %1$s","wordpress-seo-premium"),"Yoast SEO Premium"))," ",(0,e.createElement)("span",{className:"yst-uppercase yst-text-slate-700"},"21.0")),(0,e.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,e.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,te.__)("Generate titles & descriptions with Yoast AI!","wordpress-seo-premium")),(0,e.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,n.createInterpolateElement)((0,te.sprintf)(/* translators: %1$s and %2$s are anchor tag; %3$s is the arrow icon. */ /* translators: %1$s and %2$s are anchor tag; %3$s is the arrow icon. */ +(0,te.__)("Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s","wordpress-seo-premium"),"","",""),{a:(0,e.createElement)(ae,{href:s,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,e.createElement)(ee,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})}))),(0,e.createElement)("div",{className:"yst-flex yst-w-full yst-mt-6"},(0,e.createElement)("hr",{className:"yst-w-full yst-text-gray-200"})),(0,e.createElement)("div",{className:"yst-flex yst-items-start yst-mt-4"},(0,e.createElement)("input",{type:"checkbox",id:"yst-ai-consent-checkbox",name:"yst-ai-consent-checkbox",checked:u,value:u?"true":"false",onChange:d,className:"yst-checkbox__input",ref:m}),(0,e.createElement)("label",{htmlFor:"yst-ai-consent-checkbox",className:"yst-label yst-checkbox__label yst-text-xs yst-font-normal yst-text-slate-500"},p)),(0,e.createElement)("div",{className:"yst-w-full yst-flex yst-mt-4"},(0,e.createElement)(i.Button,{as:"button",className:"yst-grow",size:"large",disabled:!u,onClick:y},(0,te.__)("Start generating","wordpress-seo-premium"))),(0,e.createElement)(i.Button,{as:"button",className:"yst-mt-4",variant:"tertiary",onClick:c},(0,te.__)("Close","wordpress-seo-premium")))};se.propTypes={onGiveConsent:Z().func.isRequired,learnMoreLink:Z().string.isRequired,privacyPolicyLink:Z().string.isRequired,termsOfServiceLink:Z().string.isRequired,thumbnail:Z().shape({src:Z().string.isRequired,width:Z().string,height:Z().string}).isRequired,wistiaEmbedPermission:Z().shape({value:Z().bool.isRequired,status:Z().string.isRequired,set:Z().func.isRequired}).isRequired};const ae=({href:t,children:s,...a})=>(0,e.createElement)(i.Link,{target:"_blank",rel:"noopener noreferrer",...a,href:t},s,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,te.__)("(Opens in a new browser tab)","wordpress-seo-premium")));ae.propTypes={href:Z().string.isRequired,children:Z().node},ae.defaultProps={children:null};const re=window.yoast.reactHelmet,ne=({videoId:t,thumbnail:s,wistiaEmbedPermission:a})=>{const[r,o]=(0,n.useState)(a.value?D:U),l=(0,n.useCallback)((()=>o(D)),[o]),c=(0,n.useCallback)((()=>{a.value?l():o(F)}),[a.value,l,o]),m=(0,n.useCallback)((()=>o(U)),[o]),u=(0,n.useCallback)((()=>{a.set(!0),l()}),[a.set,l]);return(0,e.createElement)(n.Fragment,null,a.value&&(0,e.createElement)(re.Helmet,null,(0,e.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,e.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},r===U&&(0,e.createElement)("button",{className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:c},(0,e.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...s})),r===F&&(0,e.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,e.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},a.status===W&&(0,e.createElement)(i.Spinner,null),a.status!==W&&(0,te.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ /* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,te.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo-premium"),"Yoast SEO","Wistia")),(0,e.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,e.createElement)(i.Button,{type:"button",variant:"secondary",onClick:m,disabled:a.status===W},(0,te.__)("Deny","wordpress-seo-premium")),(0,e.createElement)(i.Button,{type:"button",variant:"primary",onClick:u,disabled:a.status===W},(0,te.__)("Allow","wordpress-seo-premium")))),a.value&&r===D&&(0,e.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===t&&(0,e.createElement)(i.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==t&&(0,e.createElement)("div",{className:`wistia_embed wistia_async_${t} videoFoam=true`}))))};ne.propTypes={videoId:Z().string.isRequired,thumbnail:Z().shape({src:Z().string.isRequired,width:Z().string,height:Z().string}).isRequired,wistiaEmbedPermission:Z().shape({value:Z().bool.isRequired,status:Z().string.isRequired,set:Z().func.isRequired}).isRequired};const ie="yoast-seo-premium/manage-ai-consent-button",oe=({onStartGenerating:s})=>{const a=(0,t.useSelect)((e=>e(ie).selectLink("https://yoa.st/ai-generator-terms-of-service")),[]),r=(0,t.useSelect)((e=>e(ie).selectLink("https://yoa.st/ai-generator-privacy-policy")),[]),i=(0,t.useSelect)((e=>e(ie).selectLink("https://yoa.st/ai-generator-learn-more")),[]),o=(0,t.useSelect)((e=>e(ie).selectImageLink("ai-generator-preview.png","images")),[]),l=(0,n.useMemo)((()=>({src:o,width:"432",height:"244"})),[o]),c=(0,t.useSelect)((e=>e(ie).selectWistiaEmbedPermissionValue()),[]),m=(0,t.useSelect)((e=>e(ie).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:u}=(0,t.useDispatch)(ie),d=(0,n.useMemo)((()=>({value:c,status:m,set:u})),[c,m,u]),{storeAiGeneratorConsent:y}=(0,t.useDispatch)(ie),p=(0,n.useCallback)((()=>{y(!0),s()}),[y,s]);return(0,e.createElement)(se,{imageLink:o,onGiveConsent:p,learnMoreLink:i,termsOfServiceLink:a,privacyPolicyLink:r,thumbnail:l,wistiaEmbedPermission:d})};oe.propTypes={onStartGenerating:Z().func.isRequired};const le=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"}))})),ce=({onClose:s})=>{const{storeAiGeneratorConsent:a}=(0,t.useDispatch)(ie),[r,o]=(0,n.useState)(!1),[l,c]=(0,n.useState)(!1),m=(0,n.useCallback)((async()=>{if(c(!1),o(!0),!1===await a(!1))return c(!0),void o(!1);s(),o(!1)}),[a,o,s]);return(0,e.createElement)("div",{className:"yst-flex yst-flex-row"},(0,e.createElement)("span",{className:"yst-shrink-0 yst-h-12 yst-w-12 yst-rounded-full yst-flex yst-justify-center yst-items-center yst-mb-3 yst-mr-5 yst-bg-red-100"},(0,e.createElement)(le,{className:"yst-w-6 yst-h-6 yst-align-center yst-text-red-600"})),(0,e.createElement)("div",null,(0,e.createElement)(i.Modal.Title,{className:"yst-font-semibold",as:"h3",size:"4"},(0,te.__)("Revoke AI consent","wordpress-seo-premium")),l&&(0,e.createElement)(i.Alert,{className:"yst-mt-2",variant:"error"},(0,te.__)("Something went wrong, please try again later.","wordpress-seo-premium")),(0,e.createElement)("p",{className:"yst-mt-2 yst-text-slate-600"},(0,te.__)("By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?","wordpress-seo-premium")),(0,e.createElement)("footer",{className:"yst-mt-6 sm:yst-flex sm:yst-flex-row-reverse"},(0,e.createElement)(i.Button,{variant:"error",isLoading:r,className:"yst-w-full sm:yst-w-auto yst-revoke-button",onClick:m},(0,te.__)("Yes, revoke consent","wordpress-seo-premium")),(0,e.createElement)(i.Button,{variant:"secondary",className:"yst-w-full sm:yst-w-auto yst-mr-3",onClick:s},(0,te.__)("Close","wordpress-seo-premium")))))};ce.propTypes={onClose:Z().func.isRequired};const me=(e={})=>{(0,t.register)((e=>(0,t.createReduxStore)(ie,{actions:{...b,..._,...B,...J},selectors:{...E,...P,...q,...V},initialState:(0,c.merge)({},{[g]:f(),[S]:N(),[A]:I(),[Y]:H()},e),reducer:(0,t.combineReducers)({[g]:k,[S]:R,[A]:M,[Y]:K}),controls:{...x,...Q}}))(e))};r()((()=>{const s=(0,c.get)(window,"yoast.editorModules.sharedAdmin.store.WISTIA_EMBED_PERMISSION_NAME","wistiaEmbedPermission");me({[g]:"1"===(0,c.get)(window,"wpseoPremiumManageAiConsentButton.hasConsent",!1),[S]:(0,c.get)(window,"wpseoPremiumManageAiConsentButton.pluginUrl",""),[s]:{value:"1"===(0,c.get)(window,"wpseoPremiumManageAiConsentButton.wistiaEmbedPermission",!1)}});const a=document.getElementById("ai-generator-consent");a&&(0,n.render)((0,e.createElement)((()=>{const s=(0,t.useSelect)((e=>e(ie).selectHasAiGeneratorConsent()),[]),[a,,,r,o]=(0,i.useToggleState)(!1),c=(0,n.useRef)(null),m=(0,n.useCallback)((e=>{e.preventDefault(),r()}),[r]);return(0,e.createElement)(n.Fragment,null,(0,e.createElement)(i.Modal,{className:"yst-introduction-modal",isOpen:a,onClose:o,initialFocus:c},(0,e.createElement)(i.Modal.Panel,{className:l()(!s&&"yst-p-0 yst-introduction-modal-panel yst-max-w-lg yst-rounded-3xl",s&&"yst-max-w-xl yst-rounded-lg")},!s&&(0,e.createElement)(oe,{onStartGenerating:o,focusElementRef:c}),s&&(0,e.createElement)(ce,{onClose:o}))),(0,e.createElement)("button",{className:"button",id:"ai-generator-consent-button",onClick:m},(s?"Revoke":"Grant")+" consent"))}),null),a)}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-premium-assessments-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-premium-assessments-2290.min.js new file mode 100644 index 00000000..307fb912 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-premium-assessments-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";const e=window.yoast.analysis,{readability:s}=e.assessments,{WordComplexityAssessment:t}=s,i={de:e.languageProcessing.languageHelpers.wordComplexityHelperGerman,en:e.languageProcessing.languageHelpers.wordComplexityHelperEnglish,es:e.languageProcessing.languageHelpers.wordComplexityHelperSpanish,fr:e.languageProcessing.languageHelpers.wordComplexityHelperFrench},n={de:e.languageProcessing.languageConfigs.wordComplexityConfigGerman,en:e.languageProcessing.languageConfigs.wordComplexityConfigEnglish,es:e.languageProcessing.languageConfigs.wordComplexityConfigSpanish,fr:e.languageProcessing.languageConfigs.wordComplexityConfigFrench},{seo:r}=e.assessments,{KeyphraseDistributionAssessment:g}=r,{readability:o,seo:a}=e.assessments,l="YoastSEOPremium";(new class{constructor(){this._worker=analysisWorker}register(){this._worker.registerMessageHandler("initialize",this.initialize.bind(this),l)}initialize({options:s}){if(s.isTitleAssessmentAvailable){const{TextTitleAssessment:e}=a,s=new e;this._worker.registerAssessment("TextTitleAssessment",s,l,"seo")}!function(s,t){const i=new g;s.registerResearch("keyphraseDistribution",e.languageProcessing.researches.keyphraseDistribution),s.registerAssessment("keyphraseDistributionAssessment",i,t,"seo")}(this._worker,l);const r=s.language;(function(e){return(0,window.yoast.analysis.helpers.getLanguagesWithWordComplexity)().includes(e)})(r)&&function(s,r,g){const o=n[r],a=i[r],l=new t,m=new t({scores:{acceptableAmount:3}});s.registerResearcherConfig("wordComplexity",o),s.registerHelper("checkIfWordIsComplex",a),s.registerResearch("wordComplexity",e.languageProcessing.researches.wordComplexity),s.registerAssessment("wordComplexity",l,g,"readability"),s.registerAssessment("wordComplexity",m,g,"cornerstoneReadability")}(this._worker,r,l),s.isTextAlignmentAssessmentAvailable&&this.registerTextAlignmentAssessment()}registerTextAlignmentAssessment(){const{TextAlignmentAssessment:s}=o;this._textAlignmentAssessment=new s,this._worker.registerResearch("getLongCenterAlignedTexts",e.languageProcessing.researches.getLongCenterAlignedTexts),this._worker.registerAssessment("textAlignment",this._textAlignmentAssessment,l,"readability"),this._worker.registerAssessment("textAlignment",this._textAlignmentAssessment,l,"cornerstoneReadability")}}).register()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-text-formality-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-text-formality-2290.min.js new file mode 100644 index 00000000..7e9e50d4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/register-text-formality-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";const e=window.yoast.analysis,{getSentences:r,getWords:n}=e.languageProcessing,o=["I","you","me","my","mine","your","yours","myself","yourself","yourselves"],t=["we","they","their","theirs","themselves","us","our","ours","ourselves","it","its","itself"];function s(e,r){return e.filter((e=>r.includes(e)))}analysisWorker.registerResearch("textFormality",(function(e,l){const{charsPerSentence:a,wordsPerSentence:i,averageFormalPronouns:m,averageInformalPronouns:u}=function(e,l){const a=e.getText(),i=l.getHelper("memoizedTokenizer"),m=r(a,i),u=n(a);var g;return{charsPerSentence:(0===(g=m).length?0:g.map((e=>e.length)).reduce(((e,r)=>e+r)))/m.length,wordsPerSentence:u.length/m.length,averageFormalPronouns:s(u,t).length/u.length,averageInformalPronouns:s(u,o).length/u.length}}(e,l);return u<=.01805790513753891?a<=90.87325286865234?a<=73.79549026489258?"informal":a<=86.5999984741211?"formal":"informal":a<=172.26373291015625&&m<=.05696944147348404?"formal":"informal":u<=.04157066158950329?i<=24.832167625427246?"informal":m<=.0007042253273539245?"formal":"informal":u<=.06274875998497009?u<=.06258514896035194?"informal":"formal":"informal"}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/workouts-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/workouts-2290.min.js new file mode 100644 index 00000000..c8957c7d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/workouts-2290.min.js @@ -0,0 +1,22 @@ +(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.domReady;var n=e.n(r);const o=window.yoast.componentsNew,s=window.yoast.propTypes;var a=e.n(s);const l=window.wp.element,i=window.wp.data,c=window.wp.compose,m=window.wp.i18n;function d({onClick:e,isFinished:r}){const n=r?(0,m.__)("Revise this step","wordpress-seo-premium"):(0,m.__)("I've finished this step","wordpress-seo-premium");return(0,t.createElement)(o.Button,{onClick:e},n)}function u(){return(0,t.createElement)("span",{className:"dashicons dashicons-external",style:{textDecoration:"none",fontSize:"12px",width:"16px",height:"0",lineHeight:"1.4"}})}function p({url:e}){return(0,t.createElement)(o.Alert,{type:"warning"},(0,l.createInterpolateElement)((0,m.sprintf)(/* translators: %1$s expands to an opening anchor tag. %2$s expands to a closing anchor tag */ /* translators: %1$s expands to an opening anchor tag. %2$s expands to a closing anchor tag */ +(0,m.__)("Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.","wordpress-seo-premium"),"",""),{a:(0,t.createElement)("a",{href:e})}))}function h({url:e}){return(0,t.createElement)(o.Alert,{type:"warning"},(0,l.createInterpolateElement)((0,m.sprintf)(/* translators: %1$s expands to an opening anchor tag. %2$s expands to a closing anchor tag */ /* translators: %1$s expands to an opening anchor tag. %2$s expands to a closing anchor tag */ +(0,m.__)("Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.","wordpress-seo-premium"),"",""),{a:(0,t.createElement)("a",{href:e})}))}d.propTypes={isFinished:a().bool.isRequired,onClick:a().func.isRequired},p.propTypes={url:a().string.isRequired},h.propTypes={url:a().string.isRequired};const k=window.yoast.analysis,_=window.wp.apiFetch;var y=e.n(_);const E=window.yoast.styleGuide;function b(e){return jQuery("
      ").html(e).text()}function w(e){const t={icon:"circle",color:E.colors.$color_grey_disabled};switch(e){case"loading":t.color=E.colors.$color_green_medium_light;break;case"good":t.color=E.colors.$color_green_medium;break;case"ok":t.color=E.colors.$color_ok;break;case"bad":t.color=E.colors.$color_red}return t}async function g(e,t){try{const r=await y()({path:"yoast/v1/workouts/link_suggestions?indexableId="+e.id}),n=await r.json;return t(n),n}catch(e){return t([]),console.error(e.message),!1}}async function f(e){try{const t=await y()({path:"yoast/v1/workouts/cornerstone_data"}),r=await t.json;return e(r),r}catch(t){return e([]),console.error(t.message),!1}}async function v(e,t){try{const r=await y()({path:"yoast/v1/workouts/remove_redirect",method:"POST",data:{object_id:e.object_id,object_type:e.object_type,object_sub_type:e.object_sub_type,permalink:e.permalink,redirect_url:t}});return await r.json}catch(e){return console.error(e.message),!1}}const x=window.yoast.reactSelectAsync;var C=e.n(x);const R=window.lodash,{scoreToRating:S}=k.interpreters;function I({indexable:e}){return(0,t.createElement)("tr",null,(0,t.createElement)("td",null,(0,t.createElement)(o.SvgIcon,{...w(S(e.primary_focus_keyword_score/10))})),(0,t.createElement)("td",null,(0,t.createElement)(o.SvgIcon,{...w(S(e.readability_score/10))})),(0,t.createElement)("td",null,(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),(0,t.createElement)("td",null,e.primary_focus_keyword||"-"))}function N({indexables:e,loading:r,setCornerstones:n,isDisabled:o}){const s=(0,m.__)("SEO score","wordpress-seo-premium"),a=(0,m.__)("Readability score","wordpress-seo-premium"),i=(0,l.useCallback)((0,R.debounce)(((e,t)=>{!async function(e,t){try{const r=await y()({path:"wp/v2/search/?search="+e});let n=await r;return n=n.map((e=>({value:e.id,label:e.title+" ("+e.url+")",type:e.type}))),t(n),n}catch(e){return t([]),console.error(e.message),!1}}(e,t)}),500),[]),c=(0,l.useCallback)((e=>{!async function(e,t,r){try{return await y()({path:"yoast/v1/workouts/enable_cornerstone",method:"POST",data:{object_id:e,object_type:t}}),await f(r)}catch(e){return console.error(e.message),!1}}(e.value,e.type,n)}),[n]);return r?(0,t.createElement)("div",null,(0,t.createElement)("em",null,(0,m.__)("Loading data...","wordpress-seo-premium"))):e.length<=0?(0,t.createElement)("div",null,(0,t.createElement)("p",null,(0,t.createElement)("em",null,(0,m.__)("You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.","wordpress-seo-premium"))),(0,t.createElement)(C(),{value:"",onChange:c,cacheOptions:!0,loadOptions:i,defaultOptions:!0,placeholder:(0,m.__)("Choose cornerstone articles...","wordpress-seo-premium"),isDisabled:o})):(0,t.createElement)("div",null,(0,t.createElement)("table",{className:"yoast_help"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{className:"manage-column"},(0,t.createElement)("span",{"data-label":s,className:"yoast-tooltip yoast-tooltip-n yoast-tooltip-alt"},(0,t.createElement)("span",{className:"yoast-column-seo-score yoast-column-header-has-tooltip"},(0,t.createElement)("span",{className:"screen-reader-text"},s)))),(0,t.createElement)("th",{className:"manage-column"},(0,t.createElement)("span",{"data-label":a,className:"yoast-tooltip yoast-tooltip-n yoast-tooltip-alt"},(0,t.createElement)("span",{className:"yoast-column-readability yoast-column-header-has-tooltip"},(0,t.createElement)("span",{className:"screen-reader-text"},a)))),(0,t.createElement)("th",null,(0,m.__)("Article","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Focus keyphrase","wordpress-seo-premium")))),(0,t.createElement)("tbody",null,e.map((function(e){return(0,t.createElement)(I,{key:e.id,indexable:e})})))),(0,t.createElement)(C(),{value:"",onChange:c,cacheOptions:!0,loadOptions:i,defaultOptions:!0,placeholder:(0,m.__)("Choose cornerstone articles...","wordpress-seo-premium"),isDisabled:o}))}I.propTypes={indexable:a().object.isRequired},N.propTypes={indexables:a().arrayOf(a().object).isRequired,loading:a().bool.isRequired,setCornerstones:a().func.isRequired,isDisabled:a().bool.isRequired};const q={cornerstone:"cornerstone",orphaned:"orphaned"},L={cornerstone:{chooseCornerstones:"chooseCornerstones",checkLinks:"checkLinks",addLinks:"addLinks",improved:"improved",skipped:"skipped"},orphaned:{improveRemove:"improveRemove",update:"update",addLinks:"addLinks",removed:"removed",noindexed:"noindexed",improved:"improved",skipped:"skipped"}};function W({indexable:e,moveIndexables:r,improvableIds:n}){const s=(0,l.useCallback)((()=>{r(q.cornerstone,[e],"",L.cornerstone.addLinks)}),[r,e]);let a;return a=n.includes(e.id)?(0,t.createElement)("em",null,(0,m.__)("Added to next step","wordpress-seo-premium")):(0,t.createElement)(o.Button,{onClick:s},(0,m.__)("Optimize","wordpress-seo-premium")),(0,t.createElement)("tr",null,(0,t.createElement)("td",null,e.incoming_link_count||"0"),(0,t.createElement)("td",null,"1"===e.is_cornerstone?"★ ":"",(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),(0,t.createElement)("td",null,e.object_sub_type||e.object_type),(0,t.createElement)("td",null,"1"===e.is_cornerstone&&a))}function T({mostLinked:e,cornerstones:r,moveIndexables:n,improvableIds:o,loading:s}){if(s)return(0,t.createElement)("div",null,(0,t.createElement)("em",null,(0,m.__)("Loading data...","wordpress-seo-premium")));if(e.length<=0)return(0,t.createElement)("p",null,(0,t.createElement)("em",null,(0,m.__)("We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.","wordpress-seo-premium")));const a=e.map((e=>e.id));return(0,t.createElement)("table",{className:"yoast_help"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",null,(0,m.__)("Incoming links","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Article","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Type","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Action","wordpress-seo-premium")))),(0,t.createElement)("tbody",null,e.map((function(e){return(0,t.createElement)(W,{key:e.id,indexable:e,moveIndexables:n,improvableIds:o})})),r.map((function(e){if(!a.includes(e.id))return(0,t.createElement)(W,{key:e.id,indexable:e,moveIndexables:n,improvableIds:o})}))))}function O(){return(0,t.createElement)(o.Alert,{type:"warning"},(0,m.__)("Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.","wordpress-seo-premium"))}L.cornerstone.chooseCornerstones,L.cornerstone.checkLinks,L.cornerstone.addLinks,L.orphaned.improveRemove,L.orphaned.update,L.orphaned.addLinks,W.propTypes={indexable:a().object.isRequired,moveIndexables:a().func.isRequired,improvableIds:a().array.isRequired},T.propTypes={mostLinked:a().arrayOf(a().object).isRequired,cornerstones:a().arrayOf(a().object).isRequired,moveIndexables:a().func.isRequired,improvableIds:a().array.isRequired,loading:a().bool.isRequired};const j=window.wp.a11y;function F(){const e=new ClipboardJS(".yoast-copy__button");e.on("success",(function(e){const t=(0,m.__)("Copied!","wordpress-seo-premium");e.trigger.focus(),e.trigger.setAttribute("aria-label",t),e.trigger.innerHTML=t,(0,j.speak)(t,"assertive")})),e.on("error",(function(e){const t=(0,m.__)("Copy failed","wordpress-seo-premium");e.trigger.setAttribute("aria-label",t),e.trigger.innerHTML=t,(0,j.speak)(t,"assertive")}))}function $({clipboardText:e}){(0,l.useEffect)(F,[]);const r=(0,m.__)("Copy link","wordpress-seo-premium"),n=(0,l.useCallback)((e=>{e.nativeEvent.target.setAttribute("aria-label",r),e.nativeEvent.target.innerText=r}),[]);return(0,t.createElement)(o.Button,{className:"yoast-copy__button","data-clipboard-text":e,"aria-label":r,onBlur:n},r)}function B({suggestion:e}){return(0,t.createElement)("tr",null,(0,t.createElement)("td",null,b(e.breadcrumb_title)),(0,t.createElement)("td",null,(0,t.createElement)("a",{href:b(e.edit_link),target:"_blank",rel:"noopener noreferrer"},(0,m.__)("Edit to add link","wordpress-seo-premium"),(0,t.createElement)(u,null))))}function Y({indexable:e}){const[r,n]=(0,l.useState)([]),[o,s]=(0,l.useState)(!0),a=(0,l.useCallback)((e=>{n(e),s(!1)}),[n,s]);return(0,l.useEffect)((()=>{g(e,a)}),[e.id]),e.purge?null:0===r.length?(0,t.createElement)("tr",null,(0,t.createElement)("td",{colSpan:"2"},(0,t.createElement)("em",null,o?(0,m.__)("Loading link suggestions...","wordpress-seo-premium"):(0,m.__)("We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.","wordpress-seo-premium")))):r.map((function(e){return(0,t.createElement)(B,{key:"suggestion-"+e.id,suggestion:e})}))}function A({indexable:e,finish:r,skip:n,minimumLinks:s}){const a=(0,l.useCallback)(r.bind(null,e),[r,e]),i=(0,l.useCallback)(n.bind(null,e),[n,e]);return e.purge?(0,t.createElement)("td",null,(0,m.__)("You've finished adding links to this article.","wordpress-seo-premium")):(0,t.createElement)("td",null,(0,t.createElement)($,{clipboardText:e.permalink}),e.incoming_link_count>=s&&(0,t.createElement)("div",null,(0,t.createElement)(o.Button,{className:"yoast-button--primary",onClick:a},(0,m.__)("Finish optimizing","wordpress-seo-premium"))),e.incoming_link_counte.length<=0?(0,t.createElement)("p",null,(0,t.createElement)("em",null,(0,m.__)("You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.","wordpress-seo-premium"))):(0,t.createElement)("table",{className:"yoast_help yoast_link_suggestions"},e.map((function(e){return(0,t.createElement)(D,{indexable:e,finish:r,skip:n,key:"suggestions-"+e.id,minimumLinks:o})})));P.propTypes={indexables:a().arrayOf(a().object).isRequired,finish:a().func.isRequired,skip:a().func,minimumLinks:a().number},P.defaultProps={minimumLinks:0,skip:()=>{}};const{cornerstoneOn:H,seoDataOptimizationNeeded:z,cornerstoneGuide:M}=window.wpseoPremiumWorkoutsData;function U({toggleStep:e,toggleWorkout:r,isWorkoutFinished:n,isStepFinished:s,getIndexablesByStep:a,moveIndexables:i}){const{toolsPageUrl:c}=window.wpseoWorkoutsData,h=L.cornerstone,[k,_]=(0,l.useState)({cornerstones:[],mostLinked:[]}),[y,E]=(0,l.useState)(!0),b=(0,l.useCallback)((e=>{_(e),E(!1)}),[_,E]);(0,l.useEffect)((()=>{f(b)}),[n]);const w=(0,l.useCallback)((e=>{i(q.cornerstone,[e],L.cornerstone.addLinks,"")}),[i]),g=(0,l.useCallback)(e.bind(null,"cornerstone",h.checkLinks),[e,h.checkLinks]),v=(0,l.useCallback)(e.bind(null,"cornerstone",h.chooseCornerstones),[e,h.chooseCornerstones]),x=(0,l.useCallback)(e.bind(null,"cornerstone",h.addLinks),[e,h.addLinks]),C=(0,l.useCallback)(r.bind(null,"cornerstone"),[r]),S=a(q.cornerstone,L.cornerstone.addLinks);let I=[];return(0,R.isEmpty)(S)||(I=S.filter((e=>!0!==e.purge)).map((e=>e.id))),(0,t.createElement)("div",{className:"card"},(0,t.createElement)("h2",null,(0,m.__)("The cornerstone approach","wordpress-seo-premium")),(0,t.createElement)("h3",null,(0,m.__)("Rank with articles you want to rank with","wordpress-seo-premium")),"1"!==H&&(0,t.createElement)(O,null),"1"===z&&(0,t.createElement)(p,{url:c}),(0,t.createElement)("p",null,(0,l.createInterpolateElement)((0,m.sprintf)(/* translators: %1$s is an opening emphasis tag, %2$s a closing emphasis tag, and %3$s is the company name, Yoast. */ /* translators: %1$s is an opening emphasis tag, %2$s a closing emphasis tag, and %3$s is the company name, Yoast. */ +(0,m.__)("Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!","wordpress-seo-premium"),"","","Yoast"),{em:(0,t.createElement)("em",null)})),(0,t.createElement)("p",null,(0,l.createInterpolateElement)((0,m.sprintf)( +// translators: %1$s and %6$s are emphasis tags, %2$s and %5$s are anchor tags, %3$s and %4$s expand to an icon tag. %7$s is Yoast SEO Premium. +// translators: %1$s and %6$s are emphasis tags, %2$s and %5$s are anchor tags, %3$s and %4$s expand to an icon tag. %7$s is Yoast SEO Premium. +(0,m.__)("%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s","wordpress-seo-premium"),"","","","","","","Yoast SEO Premium"),{icon:(0,t.createElement)(u,null),a:(0,t.createElement)("a",{href:M,target:"_blank",rel:"noopener noreferrer"}),em:(0,t.createElement)("em",null)})),(0,t.createElement)("hr",null),(0,t.createElement)("ol",{className:"workflow yoast"},(0,t.createElement)("li",{className:"step"+(s("cornerstone",h.chooseCornerstones)?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Start: Choose your cornerstones!","wordpress-seo-premium")),(0,t.createElement)("div",{className:"workflow__grid"},(0,t.createElement)("div",null,(0,t.createElement)("p",null,(0,m.__)("Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.","wordpress-seo-premium")),(0,t.createElement)("p",null,(0,m.__)("Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!","wordpress-seo-premium"))),(0,t.createElement)("div",null,(0,t.createElement)("img",{className:"workflow__image",src:"https://yoast.com/shared-assets/images/wpseo_workouts/17-9/motivated_bubble_man_1_optim.svg",width:"100",height:"100",alt:""}))),(0,t.createElement)(N,{indexables:k.cornerstones,loading:y,setCornerstones:b,isDisabled:s("cornerstone",h.chooseCornerstones)}),(0,t.createElement)("br",null),(0,t.createElement)(d,{onClick:v,isFinished:s("cornerstone",h.chooseCornerstones)})),(0,t.createElement)("li",{className:"step"+(s("cornerstone",h.checkLinks)?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Check the number of incoming internal links of your cornerstones","wordpress-seo-premium")),(0,t.createElement)("p",null,(0,m.sprintf)( +// translators: %1$s is replaced with a star icon ★ +// translators: %1$s is replaced with a star icon ★ +(0,m.__)("Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.","wordpress-seo-premium"),"★")),(0,t.createElement)(T,{mostLinked:k.mostLinked,cornerstones:k.cornerstones,moveIndexables:i,improvableIds:I,loading:y}),(0,t.createElement)("br",null),(0,t.createElement)(d,{onClick:g,isFinished:s("cornerstone",h.checkLinks)})),(0,t.createElement)("li",{className:"step"+(s("cornerstone",h.addLinks)?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Add internal links towards your cornerstones","wordpress-seo-premium")),(0,t.createElement)("p",null,(0,m.__)("Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.","wordpress-seo-premium")),(0,t.createElement)(P,{indexables:a(q.cornerstone,L.cornerstone.addLinks),finish:w}),(0,t.createElement)("br",null),(0,t.createElement)(d,{onClick:x,isFinished:s("cornerstone",h.addLinks)})),(0,t.createElement)("li",{className:"step"+(n?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Well done!","wordpress-seo-premium")),(0,t.createElement)("div",{className:"workflow__grid"},(0,t.createElement)("div",null,(0,t.createElement)("p",null,(0,m.__)("You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!","wordpress-seo-premium")),(0,t.createElement)(o.Button,{className:"yoast-button yoast-button--primary",onClick:C},n?(0,m.__)("Reset this workout","wordpress-seo-premium"):(0,m.__)("I've finished this workout","wordpress-seo-premium"))),(0,t.createElement)("div",null,(0,t.createElement)("img",{className:"workflow__image",src:"https://yoast.com/shared-assets/images/wpseo_workouts/17-9/fit_bubble_man_1_optim.svg",width:"120",height:"120",alt:"",style:{maxWidth:"120px",maxHeight:"120px"}}))))))}U.propTypes={toggleStep:a().func.isRequired,toggleWorkout:a().func.isRequired,isWorkoutFinished:a().bool.isRequired,isStepFinished:a().func.isRequired,getIndexablesByStep:a().func.isRequired,moveIndexables:a().func.isRequired};const G=(0,c.compose)([(0,i.withSelect)((e=>{const t=e("yoast-seo/workouts").getWorkouts(),r=e("yoast-seo/workouts").getFinishedWorkouts(),n=r.includes(q.cornerstone);return{finishedWorkouts:r,isStepFinished:(e,r)=>t[e].finishedSteps.includes(r),isWorkoutFinished:n,getIndexablesByStep:e("yoast-seo/workouts").getIndexablesByStep}})),(0,i.withDispatch)((e=>{const{toggleStep:t,toggleWorkout:r,moveIndexables:n}=e("yoast-seo/workouts");return{toggleStep:t,toggleWorkout:r,moveIndexables:n}}))])(U),J=window.wp.components,{scoreToRating:K}=k.interpreters,Q=({indexable:e,moveIndexables:r})=>{const[n,s]=(0,l.useState)(!1);(0,l.useEffect)((()=>{"post"===e.object_type&&(s("Loading..."),async function(e,t){try{const r=await y()({path:"yoast/v1/workouts/last_updated?postId="+e}),n=await r.json;return t(new Date(n).toDateString()),n}catch(e){return console.error(e.message),!1}}(e.object_id,s))}),[e.id]);const a=!!e.purge;return(0,t.createElement)("tr",null,(0,t.createElement)("td",null,(0,t.createElement)(o.SvgIcon,{...w(K(e.primary_focus_keyword_score/10))})),(0,t.createElement)("td",null,(0,t.createElement)(o.SvgIcon,{...w(K(e.readability_score/10))})),(0,t.createElement)("td",null,(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),(0,t.createElement)("td",null,n||(0,t.createElement)("em",null,(0,m.__)("Unknown","wordpress-seo-premium"))),!a&&(0,t.createElement)("td",null,(0,t.createElement)(J.CheckboxControl,{onChange:()=>{r(q.orphaned,[e],L.orphaned.update,L.orphaned.addLinks)}})),a&&(0,t.createElement)("td",null,(0,t.createElement)("em",null,(0,m.__)("You've moved this article to the next step.","wordpress-seo-premium"))))};Q.propTypes={indexable:a().object.isRequired,moveIndexables:a().func.isRequired};const V=({indexables:e,moveIndexables:r})=>{const n=(0,m.__)("SEO score","wordpress-seo-premium"),o=(0,m.__)("Readability score","wordpress-seo-premium");return e.length>0?(0,t.createElement)("table",{className:"yoast_help"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{className:"manage-column"},(0,t.createElement)("span",{"data-label":n,className:"yoast-tooltip yoast-tooltip-n yoast-tooltip-alt"},(0,t.createElement)("span",{className:"yoast-column-seo-score yoast-column-header-has-tooltip"},(0,t.createElement)("span",{className:"screen-reader-text"},n)))),(0,t.createElement)("th",{className:"manage-column"},(0,t.createElement)("span",{"data-label":o,className:"yoast-tooltip yoast-tooltip-n yoast-tooltip-alt"},(0,t.createElement)("span",{className:"yoast-column-readability yoast-column-header-has-tooltip"},(0,t.createElement)("span",{className:"screen-reader-text"},o)))),(0,t.createElement)("th",null,(0,m.__)("Article","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Last Updated","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Is it up-to-date?","wordpress-seo-premium")))),(0,t.createElement)("tbody",null,e.map((function(e){return(0,t.createElement)(Q,{key:"improvable-"+e.id,indexable:e,moveIndexables:r})})))):(0,t.createElement)("p",null,(0,t.createElement)("em",null,(0,m.__)("You haven't selected any articles for this step yet. You can do so in the previous step.","wordpress-seo-premium")))};V.propTypes={indexables:a().arrayOf(a().object).isRequired,moveIndexables:a().func.isRequired};const X=({improved:e,removed:r,noindexed:n,skipped:o})=>e.length>0||r.length>0||n.length>0||o.length>0?(0,t.createElement)("table",{className:"yoast_help"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",null,(0,m.__)("Article","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Resolution","wordpress-seo-premium")))),(0,t.createElement)("tbody",null,e.map((function(e){return(0,t.createElement)("tr",{key:"improved-"+e.id},(0,t.createElement)("td",null,(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),(0,t.createElement)("td",null,(0,m.__)("Improved","wordpress-seo-premium")))})),r.map((function(e){return(0,t.createElement)("tr",{key:"removed-"+e.id},(0,t.createElement)("td",null,(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),(0,t.createElement)("td",null,(0,m.__)("Removed","wordpress-seo-premium")))})),n.map((function(e){return(0,t.createElement)("tr",{key:"noindexed"+e.id},(0,t.createElement)("td",null,(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),(0,t.createElement)("td",null,(0,m.__)("Hidden from search engines.","wordpress-seo-premium")))})),o.map((function(e){return(0,t.createElement)("tr",{key:"skipped"+e.id},(0,t.createElement)("td",null,(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),(0,t.createElement)("td",null,(0,m.__)("Skipped","wordpress-seo-premium")))})))):(0,t.createElement)("p",null,(0,t.createElement)("em",null,(0,m.__)("You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.","wordpress-seo-premium")));X.propTypes={improved:a().arrayOf(a().object).isRequired,removed:a().arrayOf(a().object).isRequired,noindexed:a().arrayOf(a().object).isRequired,skipped:a().arrayOf(a().object).isRequired};const Z=({indexable:e,moveIndexables:r})=>{const{homeUrl:n}=window.wpseoWorkoutsData,[s,a]=(0,l.useState)(!1),[i,c]=(0,l.useState)([]),[d,u]=(0,l.useState)(n),[p,h]=(0,l.useState)(""),[k,_]=(0,l.useState)(!0),[y,E]=(0,l.useState)("yoast-redirect-to-homepage"),w=(0,l.useCallback)((e=>{c(e),_(!1)}),[E,_]);(0,l.useEffect)((()=>{s&&g(e,w)}),[s]);const f=(0,l.useCallback)((()=>a(!1)),[]),x=(0,l.useCallback)((()=>a(!0)),[]),C=(0,l.useCallback)((()=>{v(e,d),r(q.orphaned,[e],L.orphaned.improveRemove,L.orphaned.removed),f()}),[v,e,d,r,f]),R=(0,l.useCallback)((e=>{u(e.target.value),E("yoast-redirect-to-homepage")}),[u,E]),S=(0,l.useCallback)((e=>{u(e.target.value),E("yoast-custom-redirect")}),[u,E]),I=(0,l.useCallback)((e=>{h(e.target.value),u(e.target.value),E("yoast-custom-redirect")}),[h,u,E]);return(0,t.createElement)(l.Fragment,null,(0,t.createElement)(o.Button,{onClick:x,className:"yoast__workout__remove-article",style:{color:"red"}},(0,m.__)("Remove","wordpress-seo-premium")),s&&(0,t.createElement)(J.Modal,{onRequestClose:f,title:(0,m.__)("SEO Workout: Remove article","wordpress-seo-premium"),className:"yoast__workout",icon:(0,t.createElement)("span",{className:"yoast-icon"})},(0,t.createElement)("p",null,(0,l.createInterpolateElement)((0,m.sprintf)( +// translators: %1$s and %3$s expand to an opening and closing anchor tag, respectively, that links to the article that is about to be removed. %2$s is the title of this article. +// translators: %1$s and %3$s expand to an opening and closing anchor tag, respectively, that links to the article that is about to be removed. %2$s is the title of this article. +(0,m.__)("You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?","wordpress-seo-premium"),"",b(e.breadcrumb_title),""),{a:(0,t.createElement)("a",{href:e.permalink})})),!k&&(0,t.createElement)("div",{className:"yoast__redirect-suggestions"},(0,t.createElement)("div",null,(0,t.createElement)("input",{type:"radio",id:"yoast-redirect-to-homepage",value:n,checked:"yoast-redirect-to-homepage"===y,onChange:R}),(0,t.createElement)("label",{htmlFor:"yoast-redirect-to-homepage"},(0,m.__)("Home page:","wordpress-seo-premium")+" ",(0,t.createElement)("a",{href:n},n))),i.length>0&&i.map((function(e){return(0,t.createElement)("div",{key:"redirect-suggestion-"+e.id},(0,t.createElement)("input",{type:"radio",id:"yoast-redirect-to-indexable-"+e.id,value:e.permalink,checked:y==="yoast-redirect-to-indexable-"+e.id,onChange:t=>{u(t.target.value),E("yoast-redirect-to-indexable-"+e.id)}}),(0,t.createElement)("label",{htmlFor:"yoast-redirect-to-indexable-"+e.id},(0,m.__)("Related article:","wordpress-seo-premium")+" ",(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},e.breadcrumb_title)))})),(0,t.createElement)("div",null,(0,t.createElement)("input",{type:"radio",id:"yoast-custom-redirect",value:p,checked:"yoast-custom-redirect"===y,onChange:S}),(0,t.createElement)("label",{htmlFor:"yoast-custom-redirect"},(0,m.__)("Custom url:","wordpress-seo-premium"),(0,t.createElement)("input",{type:"text",onChange:I,value:p}))),(0,t.createElement)("br",null),(0,t.createElement)(o.Button,{onClick:C,className:"yoast__workout__remove-and-redirect"},(0,m.__)("Remove and redirect","wordpress-seo-premium"))),k&&(0,t.createElement)("p",null,(0,t.createElement)("em",null,(0,m.__)("Loading redirect options...","wordpress-seo-premium")))))};Z.propTypes={indexable:a().object.isRequired,moveIndexables:a().func.isRequired};const{scoreToRating:ee}=k.interpreters,te=({indexables:e,moveIndexables:r})=>{const n=(0,m.__)("SEO score","wordpress-seo-premium"),s=(0,m.__)("Readability score","wordpress-seo-premium");return e.length>0?(0,t.createElement)("table",{className:"yoast_help"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{className:"manage-column"},(0,t.createElement)("span",{"data-label":n,className:"yoast-tooltip yoast-tooltip-n yoast-tooltip-alt"},(0,t.createElement)("span",{className:"yoast-column-seo-score yoast-column-header-has-tooltip"},(0,t.createElement)("span",{className:"screen-reader-text"},n)))),(0,t.createElement)("th",{className:"manage-column"},(0,t.createElement)("span",{"data-label":s,className:"yoast-tooltip yoast-tooltip-n yoast-tooltip-alt"},(0,t.createElement)("span",{className:"yoast-column-readability yoast-column-header-has-tooltip"},(0,t.createElement)("span",{className:"screen-reader-text"},s)))),(0,t.createElement)("th",null,(0,m.__)("Article","wordpress-seo-premium")),(0,t.createElement)("th",null,(0,m.__)("Action","wordpress-seo-premium")))),(0,t.createElement)("tbody",null,e.slice(0,10).map((function(e){const n=!!e.purge,s=(0,l.useCallback)((()=>{r(q.orphaned,[e],L.orphaned.improveRemove,L.orphaned.update)}),[r,e]),a=(0,l.useCallback)((()=>{window.confirm((0,m.__)("Are you sure you wish to hide this article from search engines?","wordpress-seo-premium"))&&(async function(e){try{const t=await y()({path:"yoast/v1/workouts/noindex",method:"POST",data:{object_id:e.object_id,object_type:e.object_type,object_sub_type:e.object_sub_type}});return await t.json}catch(e){return console.error(e.message),!1}}(e),r(q.orphaned,[e],L.orphaned.improveRemove,L.orphaned.noindexed))}),[r,e]);return(0,t.createElement)("tr",{key:"orphaned-"+e.id},(0,t.createElement)("td",null,(0,t.createElement)(o.SvgIcon,{...w(ee(e.primary_focus_keyword_score/10))})),(0,t.createElement)("td",null,(0,t.createElement)(o.SvgIcon,{...w(ee(e.readability_score/10))})),(0,t.createElement)("td",null,(0,t.createElement)("a",{href:e.permalink,target:"_blank",rel:"noopener noreferrer"},b(e.breadcrumb_title),(0,t.createElement)(u,null))),!n&&(0,t.createElement)("td",null,(0,t.createElement)(o.Button,{onClick:s},(0,m.__)("Improve","wordpress-seo-premium")),(0,t.createElement)(Z,{indexable:e,moveIndexables:r}),(0,t.createElement)(o.Button,{onClick:a},(0,m.__)("Hide from search engines","wordpress-seo-premium"))),n&&(0,t.createElement)("td",null,(0,t.createElement)("em",null,(e=>{switch(e){case L.orphaned.removed:return(0,m.__)("You've removed this article.","wordpress-seo-premium");case L.orphaned.noindexed:return(0,m.__)("You've hidden this article from search engines.","wordpress-seo-premium");case L.orphaned.update:return(0,m.__)("You've moved this article to the next step.","wordpress-seo-premium");default:return""}})(e.movedTo))))})))):(0,t.createElement)("p",null,(0,t.createElement)("em",null,(0,m.__)("Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!","wordpress-seo-premium")))};te.propTypes={indexables:a().arrayOf(a().object).isRequired,moveIndexables:a().func.isRequired};const{seoDataOptimizationNeeded:re,orphanedGuide:ne,orphanedUpdateContent:oe}=window.wpseoPremiumWorkoutsData;function se({toggleStep:e,toggleWorkout:r,isWorkoutFinished:n,isStepFinished:s,moveIndexables:a,clearIndexablesInSteps:i,getIndexablesByStep:c}){const{toolsPageUrl:p}=window.wpseoWorkoutsData,k=L.orphaned,_=(0,l.useCallback)((()=>e(q.orphaned,k.improveRemove)),[e]),y=(0,l.useCallback)((()=>e(q.orphaned,k.update)),[e]),E=(0,l.useCallback)((()=>e(q.orphaned,k.addLinks)),[e]),b=(0,l.useCallback)((()=>r(q.orphaned)),[r]),w=(0,l.useCallback)((()=>i(q.orphaned,["removed","noindexed","improved","skipped"])),[i]),g=(0,l.useCallback)((e=>{a(q.orphaned,[e],L.orphaned.addLinks,L.orphaned.improved)}),[a]),f=(0,l.useCallback)((e=>{a(q.orphaned,[e],L.orphaned.addLinks,L.orphaned.skipped)}),[a]),v=c(q.orphaned,L.orphaned.improved),x=c(q.orphaned,L.orphaned.removed),C=c(q.orphaned,L.orphaned.noindexed),R=c(q.orphaned,L.orphaned.skipped);return(0,t.createElement)("div",{className:"card"},(0,t.createElement)("h2",null,(0,m.__)("Orphaned content","wordpress-seo-premium")),(0,t.createElement)("h3",null,(0,m.__)("Clean up your unlinked content to make sure people can find it","wordpress-seo-premium")),"1"===re&&(0,t.createElement)(h,{url:p}),(0,t.createElement)("p",null,(0,m.__)("You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!","wordpress-seo-premium")),(0,t.createElement)("p",null,(0,l.createInterpolateElement)((0,m.sprintf)( +// translators: %1$s and %6$s are emphasis tags, %2$s and %5$s are anchor tags, %3$s and %4$s expand to an icon tag. %7$s is Yoast SEO Premium. +// translators: %1$s and %6$s are emphasis tags, %2$s and %5$s are anchor tags, %3$s and %4$s expand to an icon tag. %7$s is Yoast SEO Premium. +(0,m.__)("%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s","wordpress-seo-premium"),"","","","","","","Yoast SEO Premium"),{icon:(0,t.createElement)(u,null),a:(0,t.createElement)("a",{href:ne,target:"_blank",rel:"noopener noreferrer"}),em:(0,t.createElement)("em",null)})),(0,t.createElement)("hr",null),(0,t.createElement)("ol",{className:"workflow yoast"},(0,t.createElement)("li",{className:"step"+(s(q.orphaned,k.improveRemove)?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Start: Love it or leave it?","wordpress-seo-premium")),(0,t.createElement)("div",{className:"workflow__grid"},(0,t.createElement)("div",null,(0,t.createElement)("p",null,(0,m.__)("Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?","wordpress-seo-premium"))),(0,t.createElement)("div",null,(0,t.createElement)("img",{className:"workflow__image",src:"https://yoast.com/shared-assets/images/wpseo_workouts/17-9/motivated_bubble_woman_2_optim.svg",width:"100",height:"100",alt:""}))),(0,t.createElement)(te,{indexables:c(q.orphaned,L.orphaned.improveRemove),moveIndexables:a}),(0,t.createElement)("br",null),(0,t.createElement)(d,{onClick:_,isFinished:s(q.orphaned,k.improveRemove)})),(0,t.createElement)("li",{className:"step"+(s(q.orphaned,k.update)?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Should you update your article?","wordpress-seo-premium")),(0,t.createElement)("p",null,(0,l.createInterpolateElement)((0,m.sprintf)( +// translators: %1$s and %2$s are anchor tags. +// translators: %1$s and %2$s are anchor tags. +(0,m.__)("Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).","wordpress-seo-premium"),"",""),{a:(0,t.createElement)("a",{href:oe,target:"_blank",rel:"noopener noreferrer"})})),(0,t.createElement)(V,{indexables:c(q.orphaned,L.orphaned.update),moveIndexables:a}),(0,t.createElement)("br",null),(0,t.createElement)(d,{onClick:y,isFinished:s(q.orphaned,k.update)})),(0,t.createElement)("li",{className:"step"+(s(q.orphaned,k.addLinks)?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Add internal links towards your orphaned articles.","wordpress-seo-premium")),(0,t.createElement)("p",null,(0,m.__)("Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.","wordpress-seo-premium")),(0,t.createElement)(P,{indexables:c(q.orphaned,L.orphaned.addLinks),finish:g,skip:f,minimumLinks:2}),(0,t.createElement)("br",null),(0,t.createElement)(d,{onClick:E,isFinished:s(q.orphaned,k.addLinks)})),(0,t.createElement)("li",{className:"step"+(n?" finished faded":"")},(0,t.createElement)("h4",null,(0,m.__)("Well done!","wordpress-seo-premium")),(0,t.createElement)("div",{className:"workflow__grid"},(0,t.createElement)("div",null,(0,t.createElement)("p",null,(0,m.__)("You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!","wordpress-seo-premium"))),(0,t.createElement)("div",null,(0,t.createElement)("img",{className:"workflow__image",src:"https://yoast.com/shared-assets/images/wpseo_workouts/17-9/fit_bubble_woman_2_optim.svg",width:"120",height:"120",alt:"",style:{maxWidth:"120px",maxHeight:"120px"}}))),(0,t.createElement)(X,{improved:v,removed:x,noindexed:C,skipped:R}),(0,t.createElement)("br",null),(0,t.createElement)(o.Button,{className:"yoast-button yoast-button--primary orphaned-summary",onClick:b},n?(0,m.__)("Reset this workout","wordpress-seo-premium"):(0,m.__)("I've finished this workout","wordpress-seo-premium"))," ",(v.length>0||x.length>0||C.length>0||R.length>0)&&(0,t.createElement)(o.Button,{className:"yoast-button orphaned-summary",onClick:w},(0,m.__)("Clear summary","wordpress-seo-premium")))))}se.propTypes={toggleStep:a().func.isRequired,toggleWorkout:a().func.isRequired,isStepFinished:a().func.isRequired,isWorkoutFinished:a().bool.isRequired,getIndexablesByStep:a().func.isRequired,moveIndexables:a().func.isRequired,clearIndexablesInSteps:a().func.isRequired};const ae=(0,c.compose)([(0,i.withSelect)((e=>{const t=e("yoast-seo/workouts").getWorkouts(),r=e("yoast-seo/workouts").getFinishedWorkouts(),n=r.includes(q.orphaned);return{finishedWorkouts:r,isStepFinished:(e,r)=>t[e].finishedSteps.includes(r),isWorkoutFinished:n,getIndexablesByStep:e("yoast-seo/workouts").getIndexablesByStep}})),(0,i.withDispatch)((e=>{const{toggleStep:t,toggleWorkout:r,moveIndexables:n,clearIndexablesInSteps:o}=e("yoast-seo/workouts");return{toggleStep:t,toggleWorkout:r,moveIndexables:n,clearIndexablesInSteps:o}}))])(se),{setTextdomainL10n:le}=window.yoast.editorModules.helpers.i18n;le("wordpress-seo-premium","wpseoPremiumJSL10n");const ie=window.yoast.adminModules.components.workouts.CornerstoneWorkoutCard,ce=window.yoast.adminModules.components.workouts.OrphanedWorkoutCard;n()((()=>{window.wpseoWorkoutsData.registerWorkout("cornerstone",20,(()=>(0,t.createElement)(ie,{workout:G,badges:[(0,t.createElement)(o.PremiumBadge,{key:"premium-badge-cornerstone-workout"})]}))),window.wpseoWorkoutsData.registerWorkout("orphaned",30,(()=>(0,t.createElement)(ce,{workout:ae,badges:[(0,t.createElement)(o.PremiumBadge,{key:"premium-badge-orphaned-workout"})]})))}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-admin-redirects-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-admin-redirects-2290.min.js new file mode 100644 index 00000000..6ae448e2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-admin-redirects-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var i in r)e.o(r,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:r[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.apiFetch;var r=e.n(t);const i=[410,451];const o=function(e){this.form=e};o.prototype.getOriginField=function(){return this.form.find("input[name=wpseo_redirects_origin]")},o.prototype.getTargetField=function(){return this.form.find("input[name=wpseo_redirects_target]")},o.prototype.getTypeField=function(){return this.form.find("select[name=wpseo_redirects_type]")},o.prototype.clearErrorMessage=function(){this.form.find(".wpseo_redirect_form .form_error").remove()},o.prototype.setErrorMessage=function(e){this.form.find(".wpseo_redirect_form").prepend('

      '+e+"

      ")},o.prototype.removeRowHighlights=function(){this.form.find(".redirect_form_row").removeClass("field_error")},o.prototype.highLightRowErrors=function(e){for(let t=0;t-1&&(e.target=""),e};const a=s,d=function(){this.row=null,this.quickEditRow=null,this.templateQuickEdit=wp.template("redirects-inline-edit")};d.prototype.setup=function(e,t){this.row=e,this.quickEditRow=jQuery(this.templateQuickEdit({origin:_.unescape(t.origin.html()),target:_.unescape(t.target.html()),type:parseInt(t.type.html(),10),suffix:jQuery("#the-list").find("tr").index(e)}))},d.prototype.getRow=function(){return this.row},d.prototype.getForm=function(){return this.quickEditRow},d.prototype.show=function(){this.row.addClass("hidden"),this.quickEditRow.insertAfter(this.row).show(400,(function(){jQuery(this).find(":input").first().trigger("focus")}))},d.prototype.remove=function(){this.row.removeClass("hidden"),this.quickEditRow.remove()};const l=d;!function(e){const t=window.wpseoAdminRedirect.homeUrl||"",o=function(e){return e&&"/"===e.charAt(0)?e.slice(1):e},s=new l;e.widget("ui.dialog",e.ui.dialog,{_createOverlay:function(){this._super(),this.options.modal&&this._on(this.overlay,{click:function(e){this.close(e)}})}}),e.fn.wpseoRedirects=function(d){const l=this,c=d.replace("table-","");let p,u=!1,h=null;const g=function(){u=!1,p=null},f=(e,t=null)=>{const{buttonValue:r,className:i="button"}=e;return{text:r,class:i,click:function(){null!==t&&t(),jQuery(this).dialog("close")}}};this.getButtons=function(e){return"default"===e?[f({buttonValue:wpseoPremiumStrings.button_ok})]:[f({buttonValue:wpseoPremiumStrings.button_cancel},(()=>{g()})),f({buttonValue:wpseoPremiumStrings.button_save_anyway,className:"button-primary"},(()=>{u=!0,p(),g()}))]},this.rowCells=function(e){const t=e.find(".val");return{origin:t.eq(1),target:t.eq(2),type:t.eq(0)}},this.dialog=function(t,r,i){void 0!==i&&"error"!==i||(i="default");const o=this.getButtons(i);e("#YoastRedirectDialogText").html(r),e("#YoastRedirectDialog").dialog({title:t,width:500,draggable:!1,resizable:!1,position:{at:"center center",my:"center center",of:window},buttons:o,modal:!0,close:function(){h&&h.trigger("focus")}})},this.openDialog=function(e){this.dialog(e.title,e.message)},this.post=function(t,r){e.post(ajaxurl,t,r,"json")},this.editRow=function(t){e("#the-list").find("#inline-edit").length>0?this.dialog(wpseoPremiumStrings.edit_redirect,wpseoPremiumStrings.editing_redirect):(s.setup(t,this.rowCells(t)),s.show(),new n(s.quickEditRow).getTypeField().trigger("change"))},this.prepareNewUrl=function(r,i){const n=["val"];if(i.isTargetRelative&&"/"!==r||n.push("remove-slashes"),i.hasTrailingSlash&&n.push("has-trailing-slash"),r){let s=r;return i.isTargetRelative&&(s=t+s),e("").addClass(n.join(" ")).attr({href:_.escape(o(s)),target:"_blank"}).html(_.escape(r))}return e("
      ").addClass("val remove-slashes")},this.createRedirectRow=function(r,i,n,s){const a=e("#the-list tr").length+1;return e("").append(e("").addClass("check-column").attr("scope","row").append(e("
      ").addClass("val type").html(_.escape(n))).append(e("
      ").addClass("row-actions").append(e("").addClass("edit").append(e("").attr({href:"#",role:"button",class:"redirect-edit"}).html(wpseoPremiumStrings.editAction)).append(" | ")).append(e("").addClass("trash").append(e("").attr({href:"#",role:"button",class:"redirect-delete"}).html(wpseoPremiumStrings.deleteAction))))).append(e("").addClass("column-old").append("regex"===c?e("
      ").addClass("val remove-slashes").html(_.escape(r)):e("").addClass("val").attr({href:_.escape(t+o(r)),target:"_blank"}).html(_.escape(r)))).append(e("").addClass("column-new").append(this.prepareNewUrl(i,s)))},this.handleError=function(e,t){e.addValidationError(t.message,t.fields),"warning"===t.type&&l.dialog(wpseoPremiumStrings.error_saving_redirect,t.message,t.type)},this.addRedirect=function(){const t=new n(e(".wpseo-new-redirect-form")),r=new a(t,c);if(!1===r.validate())return!1;const i=r.getFormValues();return l.post({action:"wpseo_add_redirect_"+c,ajax_nonce:e(".wpseo_redirects_ajax_nonce").val(),redirect:{origin:encodeURIComponent(i.origin),target:encodeURIComponent(i.target),type:i.type},ignore_warning:u},(function(i){if(i.error)return l.handleError(r,i.error),!0;t.getOriginField().val(""),t.getTargetField().val(""),l.find(".no-items").remove();const o=l.createRedirectRow(i.origin,i.target,i.type,i.info);e("form#"+c).find("#the-list").prepend(o),l.openDialog(wpseoPremiumStrings.redirect_added)})),!0},this.updateRedirect=function(){const r=new n(s.getForm()),i=new a(r,c);if(!1===i.validate())return!1;const d=i.getFormValues(),p=s.getRow(),h=this.rowCells(p);return l.post({action:"wpseo_update_redirect_"+c,ajax_nonce:e(".wpseo_redirects_ajax_nonce").val(),old_redirect:{origin:encodeURIComponent(h.origin.html()),target:encodeURIComponent(h.target.html()),type:encodeURIComponent(h.type.html())},new_redirect:{origin:encodeURIComponent(d.origin),target:encodeURIComponent(d.target),type:encodeURIComponent(d.type)},ignore_warning:u},(function(r){if(r.error)return l.handleError(i,r.error),!0;if(h.origin.html(_.escape(r.origin)),"regex"!==c&&h.origin.attr("href",_.escape(t+r.origin)),h.target.html(_.escape(r.target)),410===r.type||451===r.type)h.target.replaceWith(e("
      ").addClass("val remove-slashes"));else{const i="/"===r.target?"val remove-slashes":"val";h.target.replaceWith(e("").addClass(i).attr({href:_.escape(t+o(r.target)),target:"_blank"}).html(_.escape(r.target)))}h.type.html(_.escape(r.type)),s.remove(),l.openDialog(wpseoPremiumStrings.redirect_updated)})),!0},this.deleteRedirect=function(t){const i=this.rowCells(t);(function(e,t,i,o="plain"){return r()({method:"POST",url:wpApiSettings.root+"yoast/v1/redirects/delete",headers:{"X-WP-Nonce":wpApiSettings.nonce},data:{origin:e,target:t,type:i,format:o}})})(i.origin.text(),i.target.text(),i.type.html(),c).then((r=>{t.fadeTo("fast",0).slideUp((function(){e(this).remove()})),l.openDialog(r)})).catch((e=>{this.dialog(e.title,e.message,"error")}))},this.setup=function(){let t;e("body").append('
      '),e(window).on("beforeunload",(function(){if(e("#the-list").find("#inline-edit").length>0)return wpseoPremiumStrings.unsaved_redirects})),e(".redirect-table-tab").on("change","select[name=wpseo_redirects_type]",(t=>{const r=parseInt(e(t.target).val(),10),o=e(t.target).closest(".wpseo_redirect_form").find(".wpseo_redirect_target_holder");jQuery.inArray(r,i)>-1?e(o).hide():e(o).show()})),e(".wpseo-new-redirect-form").on("click",".button-primary",(function(){return p=function(){l.addRedirect()},l.addRedirect(),h=e(this),!1})).on("keypress","input",(function(e){13===e.which&&(p=function(){l.addRedirect()},e.preventDefault(),l.addRedirect())})),e(".wp-list-table").on("click",".redirect-edit",(function(r){t=e(r.target).closest("tr"),r.preventDefault(),l.editRow(t),h=e(this)})).on("click",".redirect-delete",(function(r){t=e(r.target).closest("tr"),r.preventDefault(),l.deleteRedirect(t),h=e("#cb-select-all-1")})).on("keypress","input",(function(e){13===e.which&&(p=function(){l.updateRedirect()},e.preventDefault(),l.updateRedirect())})).on("click",".save",(function(){p=function(){l.updateRedirect()},p()})).on("click",".cancel",(function(){p=null,s.remove(),t.find(".redirect-edit").trigger("focus")}))},l.setup()},e((function(){e.each(e(".redirect-table-tab"),(function(t,r){e(r).wpseoRedirects(e(r).attr("id"))}))}))}(jQuery)})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-custom-fields-plugin-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-custom-fields-plugin-2290.min.js new file mode 100644 index 00000000..36116258 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-custom-fields-plugin-2290.min.js @@ -0,0 +1 @@ +(()=>{var t;(t=function(){YoastSEO.app.registerPlugin("YoastCustomFieldsPlugin",{status:"loading"}),this.customFields={},this.updateCustomFields(),this.declareReady()}).prototype.declareReady=function(){YoastSEO.app.pluginReady("YoastCustomFieldsPlugin"),YoastSEO.app.registerModification("content",this.addCustomFields.bind(this),"YoastCustomFieldsPlugin")},t.prototype.declareReloaded=function(){YoastSEO.app.pluginReloaded("YoastCustomFieldsPlugin")},t.prototype.addCustomFields=function(t){return Object.values(this.customFields).reduce(((t,e)=>t+" "+e),t)},t.prototype.updateCustomFields=function(){var t={};jQuery("#the-list > tr:visible").each((function(e,s){var o=jQuery("#"+s.id+"-key").val();-1!==YoastCustomFieldsPluginL10.custom_field_names.indexOf(o)&&(t[o]=jQuery("#"+s.id+"-value").val())})),this.customFields=t,this.declareReloaded(),this.bindCustomFields()},t.prototype.bindCustomFields=function(){var t=_.debounce(this.updateCustomFields.bind(this),500,!0);jQuery("#the-list .button + .update_meta").off("click.wpseoCustomFields").on("click.wpseoCustomFields",t),jQuery("#the-list").off("wpListDelEnd.wpseoCustomFields").on("wpListDelEnd.wpseoCustomFields",t),jQuery("#the-list").off("wpListAddEnd.wpseoCustomFields").on("wpListAddEnd.wpseoCustomFields",t),jQuery("#the-list textarea").off("input.wpseoCustomFields").on("input.wpseoCustomFields",t)},"undefined"!=typeof YoastSEO&&void 0!==YoastSEO.app?new t:jQuery(window).on("YoastSEO:ready",(function(){new t}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-draft-js-plugins-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-draft-js-plugins-2290.min.js new file mode 100644 index 00000000..3bf0a17f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-draft-js-plugins-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:t=>{var o=t&&t.__esModule?()=>t.default:()=>t;return e.d(o,{a:o}),o},d:(t,o)=>{for(var i in o)e.o(o,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:o[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,o=window.wp.components,i=window.wp.element,s=window.wp.hooks,n=window.yoast.propTypes;var a=e.n(n);const m=({pluginList:e,fieldId:s})=>{if(window.yoast.draftJsEmoji){window.yoast.draftJsEmoji.defaultTheme.customClassesSet||(window.yoast.draftJsEmoji.defaultTheme.emojiSelectButton="emoji-select-button",window.yoast.draftJsEmoji.defaultTheme.emojiSelectButtonPressed="emoji-select-button emoji-select-button-pressed",window.yoast.draftJsEmoji.defaultTheme.emojiSelectPopover+=" emoji-select-popover",window.yoast.draftJsEmoji.defaultTheme.emojiSelectPopoverNav+=" emoji-select-popover-nav",window.yoast.draftJsEmoji.defaultTheme.emojiSuggestionsEntry+=" emoji-suggestion-item-wrapper",window.yoast.draftJsEmoji.defaultTheme.emojiSuggestionsEntryFocused+=" emoji-suggestion-item-wrapper",window.yoast.draftJsEmoji.defaultTheme.emojiSuggestionsEntryText+=" emoji-suggestion-item-text",window.yoast.draftJsEmoji.defaultTheme.emojiSelectPopoverGroupItem+=" single-emoji",window.yoast.draftJsEmoji.defaultTheme.emojiSuggestions+=" emoji-suggestions",window.yoast.draftJsEmoji.defaultTheme.customClassesSet=!0);const{EmojiSelect:n,EmojiSuggestions:a}=e.emojiPlugin;return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(o.Fill,{name:`PluginComponent-${s}`},(0,t.createElement)(n,{closeOnEmojiSelect:!0})),(0,t.createElement)(a,null))}return(0,t.createElement)(i.Fragment,null)};m.propTypes={pluginList:a().object.isRequired,fieldId:a().string.isRequired};const r=()=>(0,t.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"1.5"},(0,t.createElement)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.828 14.828a4 4 0 01-5.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"}));(0,s.addFilter)("yoast.replacementVariableEditor.additionalPlugins","yoast/yoast-seo-premium/EmojiSelect",((e,o,i)=>(0,t.createElement)(m,{key:`${i}-emoji`,pluginList:o,fieldId:i})),Number.MAX_SAFE_INTEGER),(0,s.addFilter)("yoast.replacementVariableEditor.pluginList","yoast/yoast-seo-premium/EmojiSelectLoad",(e=>(window.yoast.draftJsEmoji&&!e.emojiPlugin&&(e.emojiPlugin=window.yoast.draftJsEmoji.createEmojiPlugin({selectButtonContent:(0,t.createElement)(r,null),useNativeArt:!0,theme:window.yoast.draftJsEmoji.defaultTheme})),e)),Number.MAX_SAFE_INTEGER)})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-elementor-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-elementor-2290.min.js new file mode 100644 index 00000000..a03c861d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-elementor-2290.min.js @@ -0,0 +1,90 @@ +(()=>{"use strict";var e={865:(e,t,s)=>{var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=a(s(609)),n=a(s(848)),i=a(s(812));function a(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function c(e,t){var s,i,a,d,u,p,m,y,g=[],h={};for(p=0;p "+l);if("componentClose"===u.type)throw new Error("Missing opening component token: `"+u.value+"`");if("componentOpen"===u.type){s=t[u.value],a=p;break}g.push(t[u.value])}else g.push(u.value);return s&&(d=function(e,t){var s,r,o=t[e],n=0;for(r=e+1;r{function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},848:(e,t,s)=>{var r=s(609),o="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,n=s(650),i=s(163),a=s(759),l=".",c=":",d="function"==typeof Symbol&&Symbol.iterator,u="@@iterator";function p(e,t){return e&&"object"==typeof e&&null!=e.key?(s=e.key,r={"=":"=0",":":"=2"},"$"+(""+s).replace(/[=:]/g,(function(e){return r[e]}))):t.toString(36);var s,r}function m(e,t,s,r){var n,a=typeof e;if("undefined"!==a&&"boolean"!==a||(e=null),null===e||"string"===a||"number"===a||"object"===a&&e.$$typeof===o)return s(r,e,""===t?l+p(e,0):t),1;var y=0,g=""===t?l:t+c;if(Array.isArray(e))for(var h=0;h{function t(e){return function(){return e}}var s=function(){};s.thatReturns=t,s.thatReturnsFalse=t(!1),s.thatReturnsTrue=t(!0),s.thatReturnsNull=t(null),s.thatReturnsThis=function(){return this},s.thatReturnsArgument=function(e){return e},e.exports=s},163:e=>{e.exports=function(e,t,s,r,o,n,i,a){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[s,r,o,n,i,a],d=0;(l=new Error(t.replace(/%s/g,(function(){return c[d++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},759:(e,t,s)=>{var r=s(650);e.exports=r},609:e=>{e.exports=window.React}},t={};function s(r){var o=t[r];if(void 0!==o)return o.exports;var n=t[r]={exports:{}};return e[r](n,n.exports,s),n.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={};s.r(e),s.d(e,{ADD_RELATED_KEYWORD:()=>K,CHANGE_RELATED_KEYWORD:()=>M,CLOSE_REDIRECT_NOTIFICATION:()=>ss,LOAD_LINK_SUGGESTIONS:()=>c,LOAD_MORPHOLOGY_DATA:()=>Jt,LOAD_MORPHOLOGY_DATA_ERROR:()=>Qt,REMOVE_RELATED_KEYWORD:()=>F,SET_LINK_SUGGESTIONS:()=>d,SET_LINK_SUGGESTIONS_ERROR:()=>u,SET_MESSAGE_DATA:()=>p,SET_PROMINENT_WORDS:()=>zt,SET_REDIRECT_NOTIFICATION:()=>ts,SET_RELATED_KEYWORDS:()=>D,SET_RELATED_KEYWORD_RESULTS:()=>I,SET_RELATED_KEYWORD_SYNONYMS:()=>N,SET_SYNONYMS:()=>ns,SET_TEXT_FORMALITY_LEVEL:()=>Gt,SET_WORDS_FOR_LINKING:()=>m,addRelatedKeyword:()=>U,changeRelatedKeyword:()=>C,closeRedirectNotification:()=>os,loadLinkSuggestions:()=>y,loadMorphologyData:()=>Zt,removeRelatedKeyword:()=>W,setLinkSuggestions:()=>g,setLinkSuggestionsError:()=>h,setLoadMorphologyDataError:()=>es,setMessageData:()=>w,setProminentWords:()=>Ht,setRedirectNotification:()=>rs,setRelatedKeywordResults:()=>Y,setRelatedKeywordSynonyms:()=>q,setRelatedKeywords:()=>j,setSynonyms:()=>is,setTextFormalityLevel:()=>Xt,setWordsForLinking:()=>f});var t={};s.r(t),s.d(t,{insights:()=>as,linkSuggestions:()=>cs,metaboxWarning:()=>us,preferences:()=>ps,redirectNotification:()=>ys,relatedKeywords:()=>ks,synonyms:()=>bs});var r={};s.r(r),s.d(r,{getFirstAvailableKey:()=>Us,getIsRedirectNotificationOpen:()=>Fs,getKeywordData:()=>Is,getKeywords:()=>Ns,getLinkSuggestions:()=>Rs,getLinkSuggestionsMessageData:()=>xs,getMetaboxWarning:()=>As,getMetaboxWarningIsLoading:()=>Os,getPreference:()=>Ks,getPreferences:()=>Ds,getProminentWords:()=>vs,getRedirectData:()=>Ms,getSynonyms:()=>Cs,getTextFormalityLevel:()=>Ss,getWordsForLinking:()=>Ts,linkSuggestionsAreLoading:()=>Ls,linkSuggestionsAreUnindexed:()=>Ps});const o=window.wp.data,n=window.wp.hooks,i=window.yoast.featureFlag,a=window.lodash;function l(){return window.wpseoPremiumMetaboxData.data.restApi.available&&window.wpseoPremiumMetaboxData.data.restApi.contentEndpointsAvailable&&"enabled"===window.wpseoPremiumMetaboxData.data.linkSuggestionsEnabled&&window.wpseoPremiumMetaboxData.data.linkSuggestionsAvailable}const c="LOAD_LINK_SUGGESTIONS",d="SET_LINK_SUGGESTIONS",u="SET_LINK_SUGGESTIONS_ERROR",p="SET_MESSAGE_DATA",m="SET_WORDS_FOR_LINKING";function y(){return{type:c}}function g(e,t){return{type:d,linkSuggestions:e,showUnindexedWarning:t}}function h(e){return{type:u,message:e}}function w(e){return{type:p,messageData:e}}function f(e){return{type:m,wordsForLinking:e}}function k(e){const t={};return e.forEach((function(e){t[e.getStem()]=e.getOccurrences()})),t}const b=class{constructor({dispatch:e,rootUrl:t,nonce:s,showUnindexedWarning:r,currentObjectId:o,currentObjectType:n,maxWordsToSave:i}){this.dispatch=e,this._rootUrl=t,this._nonce=s,this._showUnindexedWarning=r,this._currentObjectId=o,this._currentObjectType=n,this._maxWordsToSave=i,this.wordsForLinking=[],this.linkSuggestions=!1,this.linkSuggestionsRequest=!1,this.update=this.update.bind(this)}subscribe(){this.update(),jQuery(window).on("YoastSEO:numericScore",this.update)}unsubscribe(){jQuery(window).off("YoastSEO:numericScore",this.update)}update(){YoastSEO.analysis.worker.runResearch("getProminentWordsForInternalLinking").then((({result:e})=>this.setWordsForLinkingOnStore(e))).then((e=>this.retrieveLinkSuggestions(e))).then((e=>this.formatLinkSuggestions(e))).then((e=>this.setLinkingSuggestionsOnStore(e))),this.updateUsedLinks()}setWordsForLinkingOnStore(e){const t=e.prominentWords.slice(0,this._maxWordsToSave);return this.dispatchMessageData(e),this.dispatchWordsForLinking(t),t}dispatchMessageData(e){this.dispatch(w(e))}dispatchWordsForLinking(e){this.dispatch(f(e))}dispatchLinkSuggestions(e,t){this.dispatch(g(e,t))}formatLinkSuggestions(e){return this.linkSuggestions=e,e=this.markUsedLinks(e),this.constructor.mapSuggestionsForStore(e)}setLinkingSuggestionsOnStore(e){this.dispatchLinkSuggestions(e,this._showUnindexedWarning)}retrieveLinkSuggestions(e){return(0,a.isEqual)([],e)?Promise.resolve([]):this.linkSuggestions&&(0,a.isEqual)(e,this.wordsForLinking)?Promise.resolve(this.linkSuggestions):(this.linkSuggestionsRequest&&(0,a.isEqual)(e,this.wordsForLinking)||(this.wordsForLinking=e,this.linkSuggestionsRequest=new Promise(((t,s)=>{const r={prominent_words:k(e),object_id:this._currentObjectId,object_type:this._currentObjectType};jQuery.ajax({type:"GET",url:this._rootUrl+"yoast/v1/link_suggestions?"+jQuery.param(r),beforeSend:e=>{e.setRequestHeader("X-WP-Nonce",this._nonce)},dataType:"json",success:e=>{t(e)},error:e=>{s(e)},complete:()=>{this.linkSuggestionsRequest=!1}})}))),this.linkSuggestionsRequest)}static mapSuggestionsForStore(e){return e.map((e=>({value:e.title,url:e.link,isActive:e.active,labels:e.labels})))}updateUsedLinks(){YoastSEO.analysis.worker.runResearch("getLinks").then((({result:e})=>{if(this.usedLinks=e,this.linkSuggestions&&this.linkSuggestions.length>0){const e=this.formatLinkSuggestions(this.linkSuggestions);this.setLinkingSuggestionsOnStore(e)}}))}markUsedLinks(e){const t=this.usedLinks||[];return e.forEach((e=>{e.active=t.includes(e.link)})),e}},E=l(),v=window.yoast.analysis;var S=s(609),_=s(865);const R=window.wp.i18n,L=window.yoast.helpers;function P(){window.location.reload()}class T{constructor({siteUrl:e,setError:t,language:s,pluginVersion:r="22.9"}){this._siteUrl=e,this._setError=t,this._requestUrl=function(e){const t={en:"v5",de:"v10",es:"v10",fr:"v11",it:"v10",nl:"v9",ru:"v10",id:"v9",pt:"v9",pl:"v9",ar:"v9",sv:"v1",he:"v1",hu:"v2",nb:"v1",tr:"v1",cs:"v1",sk:"v1",el:"v1",ja:"v1"};return!!Object.keys(t).includes(e)&&`https://my.yoast.com/api/downloads/file/morphology-${e}-${t[e]}`}(s),this._pluginVersion=r}injectMorphologyData(){this.retrieveData(this._requestUrl,this._siteUrl,this._pluginVersion).then((e=>{YoastSEO.analysis.worker.initialize({researchData:{morphology:e}}).then((()=>{(0,o.dispatch)("yoast-seo/editor").runAnalysis()}))})).catch((e=>{if(403===e.status){const e=(0,L.makeOutboundLink)(),t=(0 +/* Translators: {{activateLink}}: Link start tag to a Yoast.com article, {{/activateLink}}: Link closing tag, + {{reloadButton}}: Button start tag to reload the page, {{/reloadButton}} Button closing tag. */,_.A)({mixedString:(0,R.__)("An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.","wordpress-seo-premium"),components:{activateLink:(0,S.createElement)(e,{href:wpseoAdminL10n["shortlinks.activate_premium_info"]}),reloadButton:(0,S.createElement)("button",{type:"button",className:"button-link",onClick:P})}});this._setError(t)}}))}retrieveData(e,t,s){return new Promise(((r,o)=>{jQuery.ajax({type:"GET",url:e,data:{plugin_version:s,site:t},dataType:"json",success:e=>{r(e)},error:e=>{o(e)}})}))}}const x=window.yoast.editorModules.analysis.getContentLocale,O=e=>{(0,o.dispatch)("yoast-seo-premium/editor").setLoadMorphologyDataError(e)};function A(e){const t=e.getResponseHeader("x-yoast-redirect-created");if(t){const e=t.split(";").map((e=>e.split("=").map((e=>e.trim())))).reduce(((e,t)=>{const s=t[0],r=t[1]||!0;return e[s]=r,e}),{});(0,o.dispatch)("yoast-seo-premium/editor").setRedirectNotification(e)}}const K="ADD_RELATED_KEYWORD",D="SET_RELATED_KEYWORDS",M="CHANGE_RELATED_KEYWORD",F="REMOVE_RELATED_KEYWORD",I="SET_RELATED_KEYWORD_RESULTS",N="SET_RELATED_KEYWORD_SYNONYMS";function U(e){return{type:K,keyword:e}}function C(e,t){return{type:M,key:e,keyword:t}}function W(e){return{type:F,key:e}}function j(e){return{type:D,keywords:e}}function Y(e,t,s,r){return{type:I,key:e,keyword:t,results:s,score:r}}function q(e,t){return{type:N,key:e,synonyms:t}}const{refreshDelay:B}=window.yoast.editorModules.analysis.constants,{sortResultsByIdentifier:$}=window.yoast.editorModules.analysis.refreshAnalysis;class V{constructor(){this.analyze=(0,a.debounce)(this.analyze,B)}static getAnalysis(){return YoastSEO.analysis}static getRelevantData(e){const t={};return(0,a.forEach)(e.relatedKeywords.keywords,(({keyword:e,synonyms:s},r)=>{(0,a.isString)(s)||(s=""),t[r]={keyword:e,synonyms:s}})),t}static shouldAnalyze(e,t){return!(0,a.isEqual)(e,t)}analyze(e,t){const{worker:s,collectData:r,applyMarks:o}=V.getAnalysis();let n=r();n instanceof v.Paper==0&&(n=v.Paper.parse(n));const i=V.getRelevantData(e);s.analyzeRelatedKeywords(n,i).then((({result:{seo:e}})=>{e&&(0,a.forEach)(e,(({results:e,score:s},r)=>{""!==r&&void 0!==i[r]&&void 0!==i[r].keyword&&(e=$(e),(0,a.forEach)(e,(e=>{e.getMarker=()=>()=>o(n,e.marks)})),t(Y(r,i[r].keyword,e,s)))}))})).catch((e=>console.warn(e)))}}class z{static get relatedKeyphrasesElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_focuskeywords":"hidden_wpseo_focuskeywords")}static get synonymsElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_keywordsynonyms":"hidden_wpseo_keywordsynonyms")}static get relatedKeyphrases(){return z.relatedKeyphrasesElement.value}static set relatedKeyphrases(e){z.relatedKeyphrasesElement.value=e}static set synonyms(e){z.synonymsElement.value=e}static get synonyms(){return z.synonymsElement.value}}const G=function(e,t=[]){try{return JSON.parse(e)}catch(e){return t}};const H=window.wp.components,X=window.wp.element,J=window.yoast.styledComponents;var Q=s.n(J);const Z=Q().span` + color: #a4286a; + font-weight: 600; +`,ee=()=>{const e=(0,o.useSelect)((e=>e("yoast-seo-premium/editor").getTextFormalityLevel()),[]),t=v.languageProcessing.sanitizeString((0,o.useSelect)((e=>e("yoast-seo/editor").getTextLength()),[]).text),s=(0,X.useMemo)((()=>(0,X.createInterpolateElement)((0,R.sprintf)( +/* translators: %1$s expands to a starting `span` tag, %2$s expands to a closing `span` tag, + %3$s expands to the formality level (either formal or informal). */ +/* translators: %1$s expands to a starting `span` tag, %2$s expands to a closing `span` tag, + %3$s expands to the formality level (either formal or informal). */ +(0,R.__)("Overall, your text appears to be %1$s%3$s%2$s.","wordpress-seo-premium"),"","",e),{span:(0,S.createElement)(Z,null)})),[e]);return(0,S.createElement)("div",null,t.length<50&&(0,S.createElement)("div",null,(0,S.createElement)("p",null,(0,R.__)("Once you add a bit more copy, we'll be able to tell you the formality level of your text.","wordpress-seo-premium"))),t.length>=50&&(0,S.createElement)("div",null,(0,S.createElement)("p",null,s)))},te=window.wp.a11y,se=window.wp.url,re=window.yoast.propTypes;var oe=s.n(re);const ne=window.yoast.componentsNew,ie=window.yoast.styleGuide,ae=Q().div` + display: flex; + align-items: normal; + min-height: 40px; + margin: 10px 0 5px; +`,le=(0,L.createSvgIconComponent)({copy:{viewbox:"0 0 448 512",path:"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"},check:{viewbox:"0 0 512 512",path:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"}}),ce=Q().div` + background-color: #e5e5e5; + width: 100%; + height: 1px; +`,de=Q().button` + box-sizing: border-box; + flex: 0 0 30px; + height: 30px; + width: 30px; + background-color: ${e=>e.iconBackground}; + border-radius: 5px; + cursor: pointer; + outline: none; + border: 1px solid ${e=>e.iconBorder}; + margin-left: 3px; + + &:focus { + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); + } +`;de.props={iconBackground:oe().string,iconBorder:oe().string},de.defaultProps={iconBackground:ie.colors.$color_button,iconBorder:ie.colors.$color_button_border};const ue=Q().div` + flex: auto; +`,pe=(0,L.makeOutboundLink)(Q().a` + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + /* -webkit-box-orient: vertical; */ + /* -moz-box-orient: vertical; */ + max-height: 40px; + margin-bottom: 4px; + -webkit-box-orient: vertical; + overflow: hidden; + padding: 0 0 4px; +`),me=Q().div` + flex-wrap: wrap; + display: flex; + flex-direction: row; + justify-content: unset; + margin-top: 4px; +`,ye=Q().span` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + padding: 3px 8px; + font-size: 0.85em; + background-color: #f3f4f5; + border-radius: 2px; + margin-bottom: 4px; + margin-right: 4px; + text-transform: lowercase; +`,ge=({badges:e})=>(0,S.createElement)(me,null,e.map(((e,t)=>(0,S.createElement)(ye,{key:t},e))));ge.propTypes={badges:oe().array.isRequired};const he=({value:e,url:t,isActive:s,labels:r})=>{const o=(0,R.__)("Copy link","wordpress-seo-premium"),n=(0,R.sprintf)(/* translators: Hidden accessibility text; %s expands to the link value */ /* translators: Hidden accessibility text; %s expands to the link value */ +(0,R.__)("Copy link to suggested article: %s","wordpress-seo-premium"),e),i=(0,X.useCallback)((e=>{e.nativeEvent.target.setAttribute("aria-label",n),e.nativeEvent.target.setAttribute("data-label",o)}),[n,o]);let a="copy",l=ie.colors.$color_black,c=ie.colors.$color_button,d="#979797";return s&&(a="check",l=ie.colors.$color_alert_success_text,c=ie.colors.$color_alert_success_background,d=ie.colors.$color_alert_success_background),(0,S.createElement)("div",null,(0,S.createElement)(ce,null),(0,S.createElement)(ae,{className:"yoast-link-suggestion__wrapper"},(0,S.createElement)(ue,{className:"yoast-link-suggestion__container"},(0,S.createElement)(pe,{href:t},e),(0,S.createElement)(ge,{badges:r})),(0,S.createElement)(de,{type:"button",className:"yoast-link-suggestion__copy yoast-tooltip yoast-tooltip-alt yoast-tooltip-s",onBlur:i,"data-clipboard-text":t,"aria-label":n,"data-label":o,iconBackground:c,iconBorder:d},(0,S.createElement)(le,{icon:a,color:l}),(0,S.createElement)(ne.ScreenReaderText,null,o))))};he.propTypes={value:oe().string.isRequired,url:oe().string.isRequired,isActive:oe().bool,labels:oe().array.isRequired},he.defaultProps={isActive:!1};const we=he,fe=Q().div` + display: table-cell; +`,ke=(0,R.__)("We could not find any relevant articles on your website that you could link to from your post.","wordpress-seo-premium"),be=(0,R.__)("To improve your site structure, consider linking to other relevant posts or pages on your website.","wordpress-seo-premium");let Ee;const ve=e=>{const t=(0,R.__)("Copied!","wordpress-seo-premium");e.trigger.focus(),e.trigger.setAttribute("aria-label",t),e.trigger.setAttribute("data-label",t),(0,te.speak)(t,"assertive")},Se=e=>{const t=(0,R.__)("Not supported!","wordpress-seo-premium");e.trigger.el.setAttribute("aria-label",t),e.trigger.setAttribute("data-label",t),(0,te.speak)(t,"assertive")},_e=({suggestions:e,maxSuggestions:t,customMessages:s,location:r})=>{const o=function(e){const t=(0,L.makeOutboundLink)(),s=(0,se.addQueryArgs)(wpseoAdminL10n["shortlinks.site_structure_metabox"],{context:e});return(0,_.A)({ +// Translators: Text between {{a}} and {{/a}} will be a link to an article about site structure. +mixedString:(0,R.__)("{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.","wordpress-seo-premium"),components:{a:(0,S.createElement)(t,{href:s})}})}(r);if(0===e.length){let e=s.lengthMessage;return e=""===e?ke:e,(0,S.createElement)("div",null,(0,S.createElement)("p",null,e),(0,S.createElement)("p",null,s.metaMessage),(0,S.createElement)("p",null,o))}return e.length>t&&(e.length=t),(0,S.createElement)(fe,null,(0,S.createElement)("p",null,be," ",o),(0,S.createElement)("p",null,s.metaMessage),e.map(((e,t)=>(0,S.createElement)(we,{key:t,...e}))))};_e.propTypes={suggestions:oe().array.isRequired,maxSuggestions:oe().number,customMessages:oe().object,location:oe().string},_e.defaultProps={maxSuggestions:10,customMessages:{lengthMessage:"",metaMessage:""},location:""};const Re=()=>{window.open("admin.php?page=wpseo_tools&start-indexation=true","yoastSeoAnalyzeProminentWords")},Le=e=>{if((0,X.useEffect)((()=>(e.suggester.subscribe(),()=>{e.suggester.unsubscribe()})),[]),e.isLoading)return(0,S.createElement)("div",{className:"yoast-link-suggestions"},(0,S.createElement)("p",null,(0,R.__)("It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.","wordpress-seo-premium")));Ee||(Ee=new ClipboardJS(".yoast-link-suggestion__copy"),Ee.on("success",ve),Ee.on("error",Se));let t=null;e.showUnindexedWarning&&(t=(()=>{ +/* translators: 1: link to yoast.com post about internal linking suggestion. 2: is anchor closing. + 3: button to the recalculation option. 4: closing button */ +let e=(0,R.__)("We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s","wordpress-seo-premium");return e=e.replace("%1$s","{{a}}"),e=e.replace("%2$s","{{/a}}"),e=e.replace("%3$s","{{startAnalysis}}"),e=e.replace("%4$s","{{/startAnalysis}}"),e=e.replace("\n\n","{{br /}}{{br /}}"),e=(0,_.A)({mixedString:e,components:{a:(0,S.createElement)("a",{href:wpseoAdminL10n["shortlinks.notification_internal_link"],target:"_blank"}),startAnalysis:(0,S.createElement)("button",{type:"button",className:"button",onClick:Re}),br:(0,S.createElement)("br",null)}}),(0,S.createElement)("div",{className:"notice notice-warning notice-alt wpseo-notice-breakout-inside yoast-links-suggestions-notice"},(0,S.createElement)("p",null,e))})());const s=(e=>{let t="";e.hasWordsForLinking||(t=(0,R.__)("Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.","wordpress-seo-premium"));const s=((e,t,s)=>{switch(!0){case s&&!t&&""===e:return(0,R.__)("Add a title to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&t&&""===e:return(0,R.__)("Add a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&!t&&""===e:return(0,R.__)("Add a title and a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case s&&!t&&""!==e:return(0,R.__)("Also, add a title to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&t&&""!==e:return(0,R.__)("Also, add a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&!t&&""!==e:return(0,R.__)("Also, add a title and a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium")}})(t,e.hasTitle,e.hasMetaDescription);return{lengthMessage:t,metaMessage:s}})({...e.messageData,hasWordsForLinking:Array.isArray(e.wordsForLinking)&&e.wordsForLinking.length>0});return(0,S.createElement)("div",{className:"yoast-link-suggestions"},t,(0,S.createElement)(_e,{suggestions:e.suggestions,customMessages:s,location:e.location}))};Le.propTypes={suggester:oe().object,suggestions:oe().array.isRequired,wordsForLinking:oe().array,messageData:oe().object,isLoading:oe().bool.isRequired,showUnindexedWarning:oe().bool,location:oe().string},Le.defaultProps={suggester:null,showUnindexedWarning:!1,messageData:{hasMetaDescription:!1,hasTitle:!1},wordsForLinking:[],location:""};const Pe=Le,Te=(0,o.withSelect)((e=>{const{getLinkSuggestions:t,getWordsForLinking:s,getLinkSuggestionsMessageData:r,linkSuggestionsAreLoading:o,linkSuggestionsAreUnindexed:n}=e("yoast-seo-premium/editor");return{suggestions:t(),wordsForLinking:s(),messageData:r(),isLoading:o(),showUnindexedWarning:n()}}))(Pe),xe=window.wp.compose,Oe=e=>(0,S.createElement)(ne.NewButton,{variant:"secondary",small:!0,buttonRef:e.buttonRef,onClick:e.onAdd,disabled:e.disabled},(0,R.__)("Add as related keyphrase","wordpress-seo-premium"));Oe.propTypes={buttonRef:oe().object,onAdd:oe().func.isRequired,disabled:oe().bool},Oe.defaultProps={buttonRef:null,disabled:!1};const Ae=Oe,Ke=(0,X.forwardRef)(((e,t)=>(0,S.createElement)("button",{ref:t,className:"yoast-remove",onClick:e.onRemove},(0,R.__)("Remove","wordpress-seo-premium"))));class De extends X.Component{constructor(e){super(e),this.addButtonRef=(0,X.createRef)(),this.removeLinkRef=(0,X.createRef)(),this.addKeyphraseToList=this.addKeyphraseToList.bind(this),this.removeKeyphraseFromList=this.removeKeyphraseFromList.bind(this)}getAssociatedKeyphraseKey(e,t){const s=(0,a.find)(e,{keyword:t});return(0,a.isUndefined)(s)?"":s.key}keyphraseExists(e,t){return!(0,a.isUndefined)((0,a.find)(e,{keyword:t}))}relatedKeyphrasesLimitReached(){return this.props.relatedKeyphrases.length>=4}addKeyphraseToList(){""===this.getAssociatedKeyphraseKey(this.props.relatedKeyphrases,this.props.relatedKeyphrase)&&this.props.addKeyphrase(this.props.relatedKeyphrase)}removeKeyphraseFromList(){const e=this.getAssociatedKeyphraseKey(this.props.relatedKeyphrases,this.props.relatedKeyphrase);""!==e&&this.props.removeKeyphrase(e)}componentDidUpdate(e){const t=this.keyphraseExists(this.props.relatedKeyphrases,this.props.relatedKeyphrase),s=this.keyphraseExists(e.relatedKeyphrases,e.relatedKeyphrase);t&&!s&&this.removeLinkRef.current.focus(),!t&&s&&this.addButtonRef.current.focus()}render(){const e=this.props.relatedKeyphrase,t=this.props.relatedKeyphrases;return t&&this.keyphraseExists(t,e)?(0,S.createElement)(X.Fragment,null,(0,S.createElement)("span",{className:"yoast-modal__settings-saved"},(0,R.__)("Added!","wordpress-seo-premium")),(0,S.createElement)(Ke,{ref:this.removeLinkRef,onRemove:this.removeKeyphraseFromList})):(0,S.createElement)(Ae,{buttonRef:this.addButtonRef,disabled:this.relatedKeyphrasesLimitReached(),onAdd:this.addKeyphraseToList})}}De.propTypes={relatedKeyphrase:oe().string,relatedKeyphrases:oe().array,addKeyphrase:oe().func.isRequired,removeKeyphrase:oe().func.isRequired},De.defaultProps={relatedKeyphrase:"",relatedKeyphrases:[]};const Me=(0,o.withDispatch)((e=>{const{addRelatedKeyword:t,removeRelatedKeyword:s}=e("yoast-seo-premium/editor");return{addKeyphrase:t,removeKeyphrase:s}}))(De),Fe=window.yoast.editorModules.containers.SEMrushRelatedKeyphrases,Ie=(0,xe.compose)([(0,o.withSelect)((e=>({keyphrase:e("yoast-seo/editor").getFocusKeyphrase(),relatedKeyphrases:e("yoast-seo-premium/editor").getKeywords(),renderAction:(e,t)=>(0,S.createElement)(Me,{relatedKeyphrase:e,relatedKeyphrases:t})})))])(Fe);class Ne extends X.Component{render(){return this.props.isLoading||this.props.warning.length<1?null:(0,S.createElement)(ne.Warning,{message:[this.props.warning]})}}Ne.propTypes={warning:oe().array,isLoading:oe().bool},Ne.defaultProps={warning:[],isLoading:!1};const Ue=Ne,Ce=(0,o.withSelect)((e=>{const{getMetaboxWarningIsLoading:t,getMetaboxWarning:s}=e("yoast-seo-premium/editor");return{isLoading:t(),warning:s()}}))(Ue),We=(0,window.yoast.editorModules.components.higherorder.withYoastSidebarPriority)((({theme:e})=>(0,S.createElement)(J.ThemeProvider,{theme:e},(0,S.createElement)(Ce,null)))),je=window.yoast.editorModules.analysis.getIndicatorForScore,Ye=window.yoast.editorModules.components.HelpLink,{getIconForScore:qe}=window.yoast.editorModules.components.contentAnalysis.mapResults,Be=window.yoast.editorModules.containers.Results,{LocationConsumer:$e}=window.yoast.editorModules.components.contexts.location,Ve=window.yoast.editorModules.components.SidebarCollapsible,ze=window.yoast.editorModules.components.MetaboxCollapsible,Ge=window.yoast.editorModules.components.contentAnalysis.KeywordInput,He=Q().strong` + font-size: 1em; + font-weight: bold; + margin-bottom: 0.5em; + display: block; +`;function Xe({keyword:e,onChange:t,analysis:s,score:r,isAddKeyword:o,synonyms:n,onChangeSynonyms:i,onFocusKeyword:a,onBlurKeyword:l,onFocusSynonym:c,onBlurSynonym:d,onRemoveKeyword:u,marksButtonStatus:p,keywordKey:m}){const y=je(r);let g=(0,R.__)("Related keyphrase","wordpress-seo-premium"),h=e,w=qe(y.className);o&&(g=(0,R.__)("Add related keyphrase","wordpress-seo-premium"),h="",w={icon:"plus",color:ie.colors.$color_grey_medium_dark}),""===e&&(y.className="na",y.screenReaderReadabilityText=(0,R.__)("Enter a related keyphrase to calculate the SEO score","wordpress-seo-premium"));const f=function(e){const t=[];return e&&e.includes(",")&&t.push((0,R.__)("Are you trying to use multiple related keyphrases? You should add them separately.","wordpress-seo-premium")),e&&e.length>191&&t.push((0,R.__)("Your keyphrase is too long. It can be a maximum of 191 characters.","wordpress-seo-premium")),t}(e),k=(0,S.createElement)(Ye,{href:wpseoAdminL10n["shortlinks.focus_keyword_info"],className:"dashicons"},(0,S.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,R.__)("Help on choosing the perfect keyphrase","wordpress-seo-premium"))),b=(0,S.createElement)(Ye,{href:wpseoAdminL10n["shortlinks.keyword_synonyms_info"],className:"dashicons"},(0,S.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,R.__)("Help on keyphrase synonyms","wordpress-seo-premium")));return(0,S.createElement)($e,null,(r=>{const y="metabox"===r?ze:Ve;return(0,S.createElement)(y,{title:g,subTitle:h,prefixIcon:w,prefixIconCollapsed:w,id:`yoast-additional-keyphrase-collapsible-${m}-${r}`},(0,S.createElement)(Ge,{id:o?`yoast-keyword-input-add-${r}`:`yoast-keyword-input-${m}-${r}`,keyword:e,onChange:t,onFocusKeyword:a,onRemoveKeyword:o?null:u,onBlurKeyword:l,label:(0,R.__)("Keyphrase","wordpress-seo-premium"),helpLink:k,hasError:f.length>0,errorMessages:f}),!o&&(0,S.createElement)(X.Fragment,null,(0,S.createElement)(ne.SynonymsInput,{id:`yoast-synonyms-input-${m}-${r}`,showLabel:!0,label:(0,R.__)("Synonyms","wordpress-seo-premium"),onChange:i,onBlur:d,onFocus:c,value:n,helpLink:b}),(0,S.createElement)(He,null,(0,R.__)("Analysis results","wordpress-seo-premium")),(0,S.createElement)(Be,{showLanguageNotice:!1,marksButtonClassName:"yoast-tooltip yoast-tooltip-w",editButtonClassName:"yoast-tooltip yoast-tooltip-w",marksButtonStatus:p,results:s,keywordKey:m,location:r})))}))}Xe.propTypes={keyword:oe().string.isRequired,onChange:oe().func.isRequired,synonyms:oe().string,onChangeSynonyms:oe().func,onRemoveKeyword:oe().func.isRequired,onFocusKeyword:oe().func.isRequired,onBlurKeyword:oe().func.isRequired,onBlurSynonym:oe().func.isRequired,onFocusSynonym:oe().func.isRequired,analysis:oe().array,isAddKeyword:oe().bool,score:oe().number,marksButtonStatus:oe().string,keywordKey:oe().string.isRequired},Xe.defaultProps={synonyms:"",onChangeSynonyms:a.noop,analysis:[],isAddKeyword:!1,score:0,marksButtonStatus:"enabled"};const Je=(0,xe.compose)([(0,o.withSelect)(((e,t)=>{const{keywordKey:s}=t,{getKeywordData:r}=e("yoast-seo-premium/editor");return{keyword:r(s).keyword,analysis:r(s).results,score:r(s).score,synonyms:r(s).synonyms}})),(0,o.withDispatch)(((e,t)=>{const{isAddKeyword:s,keywordKey:r}=t,{setMarkerPauseStatus:o}=e("yoast-seo/editor"),{addRelatedKeyword:n,changeRelatedKeyword:i,setRelatedKeywordSynonyms:a,removeRelatedKeyword:l}=e("yoast-seo-premium/editor");return{onChange(e){s?n(e):i(r,e)},onFocusKeyword(){o(!0)},onRemoveKeyword(){l(r)},onBlurKeyword(e){o(!1),""===e.target.value&&l(r)},onChangeSynonyms(e){const t=e.target.value;a(r,t)},onFocusSynonym(){o(!0)},onBlurSynonym(){o(!1)}}}))])(Xe);function Qe({relatedKeywords:e,firstAvailableKey:t,marksButtonStatus:s}){const r=e.length<4,o=[...e];return r&&o.push({key:t,isAddKeyword:!0}),(0,S.createElement)("div",null,o.map((e=>{const t=e.isAddKeyword||!1;return(0,S.createElement)(Je,{key:e.key,keywordKey:e.key,isAddKeyword:t,marksButtonStatus:s})})))}Qe.propTypes={relatedKeywords:oe().array.isRequired,firstAvailableKey:oe().string.isRequired,marksButtonStatus:oe().string},Qe.defaultProps={marksButtonStatus:"enabled"};const Ze=(0,xe.compose)([(0,o.withSelect)((e=>{const{getActiveMarker:t,getMarkButtonStatus:s}=e("yoast-seo/editor"),{getKeywords:r,getFirstAvailableKey:o}=e("yoast-seo-premium/editor");return{relatedKeywords:r(),firstAvailableKey:o(),activeMarker:t(),marksButtonStatus:s()}})),(0,o.withDispatch)((e=>{const{setActiveMarker:t}=e("yoast-seo/editor");return{setActiveMarker:t}}))])(Qe),et=window.yoast.editorModules.components.higherorder.withYoastSidebarPriority,tt=window.yoast.editorModules.components.TopLevelProviders,st=et((({store:e,theme:t,location:s})=>(0,S.createElement)(tt,{store:e,theme:t,location:s},(0,S.createElement)(Ze,null))));st.propTypes={store:oe().object.isRequired,theme:oe().object.isRequired,renderPriority:oe().number.isRequired};const rt=st,ot=window.wp.apiFetch;var nt=s.n(ot);const it=window.yoast.editorModules.components.Modal,at=(0,L.makeOutboundLink)(),lt=e=>{const{href:t,children:s}=e;return(0,S.createElement)(at,{href:t},s)};lt.propTypes={href:oe().string.isRequired,children:oe().string},lt.defaultProps={children:null};class ct extends X.Component{constructor(){super(),this.state={loading:!1},this.close=this.close.bind(this),this.undoRedirect=this.undoRedirect.bind(this)}render(){return this.props.redirectNotificationOpen?(0,S.createElement)(it,{title:(0,R.__)("Redirect created","wordpress-seo-premium"),onRequestClose:this.close},(0,S.createElement)("p",null,(0,R.sprintf)(/* translators: %s expands to Yoast SEO Premium */ /* translators: %s expands to Yoast SEO Premium */ +(0,R.__)("%s just created a redirect from the old URL to the new URL.","wordpress-seo-premium"),"Yoast SEO Premium")),(0,S.createElement)("p",{className:"yoast-redirect-notification-modal-url"},(0,_.A)({mixedString:(0,R.sprintf)(/* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ /* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ +(0,R.__)("Old URL: {{link}}%s{{/link}}","wordpress-seo-premium"),`${window.location.origin}/${this.props.redirectData.origin}`),components:{link:(0,S.createElement)(lt,{href:"/"+this.props.redirectData.origin})}})),(0,S.createElement)("p",{className:"yoast-redirect-notification-modal-url"},(0,_.A)({mixedString:(0,R.sprintf)(/* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ /* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ +(0,R.__)("New URL: {{link}}%s{{/link}}","wordpress-seo-premium"),`${window.location.origin}/${this.props.redirectData.target}`),components:{link:(0,S.createElement)(lt,{href:"/"+this.props.redirectData.target})}})),(0,S.createElement)("div",{className:"yoast-redirect-notification-modal-buttons"},(0,S.createElement)(ne.NewButton,{variant:"primary",onClick:this.close,disabled:this.state.loading},(0,R.__)("OK","wordpress-seo-premium")),(0,S.createElement)(ne.NewButton,{onClick:this.undoRedirect,variant:"remove"},(0,R.__)("Undo","wordpress-seo-premium")))):null}undoRedirect(){const{objectId:e,objectType:t}=this.props.redirectData;this.setState({loading:!0},(()=>{(function(e,t){return nt()({method:"POST",url:wpApiSettings.root+"yoast/v1/redirects/undo-for-object",headers:{"X-WP-Nonce":wpApiSettings.nonce},data:{obj_id:e,obj_type:t}})})(e,t).then((()=>{this.close()}))}))}close(){this.props.closeRedirectNotification(),this.setState({loading:!1})}}ct.propTypes={redirectData:oe().object.isRequired,redirectNotificationOpen:oe().bool.isRequired,closeRedirectNotification:oe().func.isRequired};const dt=(0,xe.compose)([(0,o.withSelect)((e=>{const{getRedirectData:t,getIsRedirectNotificationOpen:s}=e("yoast-seo-premium/editor");return{redirectNotificationOpen:s(),redirectData:t()}})),(0,o.withDispatch)((e=>{const{closeRedirectNotification:t}=e("yoast-seo-premium/editor");return{closeRedirectNotification:t}}))])(ct),ut=(0,xe.compose)([(0,o.withSelect)((e=>{const{getSynonyms:t}=e("yoast-seo-premium/editor");return{value:t()}})),(0,o.withDispatch)((e=>{const{setMarkerPauseStatus:t}=e("yoast-seo/editor"),{setSynonyms:s}=e("yoast-seo-premium/editor");return{onChange(e){s(e.target.value)},onFocus(){t(!0)},onBlur(){t(!1)}}}))])(ne.SynonymsInput),pt=window.yoast.editorModules.components.HelpLink,mt=({theme:e})=>{const t=(0,S.createElement)(pt,{href:window.wpseoAdminL10n["shortlinks.keyword_synonyms_info"],className:"dashicons"},(0,S.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,R.__)("Help on keyphrase synonyms","wordpress-seo-premium")));return(0,S.createElement)(J.ThemeProvider,{theme:e},(0,S.createElement)(X.Fragment,null,(0,S.createElement)(H.Fill,{name:"yoast-synonyms-metabox"},(0,S.createElement)(ut,{id:"synonyms-input-metabox",label:(0,R.__)("Keyphrase synonyms","wordpress-seo-premium"),helpLink:t})),(0,S.createElement)(H.Fill,{name:"yoast-synonyms-sidebar"},(0,S.createElement)(ut,{id:"synonyms-input-sidebar",label:(0,R.__)("Keyphrase synonyms","wordpress-seo-premium"),helpLink:t}))))};mt.propTypes={theme:oe().object.isRequired};const yt=mt,gt=({link:e})=>(0,S.createElement)(H.Fill,{name:"YoastAfterCornerstoneToggle"},(0,S.createElement)("hr",{style:{borderTop:"0"}}),(0,S.createElement)("p",{style:{color:"#767676"}},(0,S.createElement)("em",null,(0,X.createInterpolateElement)((0,R.sprintf)( +/* translators: %1$s and %2$s expand to an opening and closing anchor tag, respectively, + that links to the cornerstone workout. */ +/* translators: %1$s and %2$s expand to an opening and closing anchor tag, respectively, + that links to the cornerstone workout. */ +(0,R.__)("Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s","wordpress-seo-premium"),"
      ",""),{a:(0,S.createElement)("a",{href:e,target:"_blank"})}))));gt.propTypes={link:oe().string.isRequired};const ht=gt,wt=window.yoast.editorModules.analysis.getL10nObject,ft=window.yoast.editorModules.components.SidebarCollapsible,kt=window.yoast.editorModules.components.SidebarItem,bt=window.yoast.editorModules.components.TopLevelProviders,Et=l(),vt=window.yoast["social-metadata-previews"],St=e=>{const{applyReplaceUsingPlugin:t,recommendedReplacementVariables:s,replacementVariables:r,description:o,descriptionInputPlaceholder:n,title:i,titleInputPlaceholder:a,onSelectImageClick:l,onRemoveImageClick:c,onDescriptionChange:d,onTitleChange:u,imageWarnings:p,imageUrl:m,imageFallbackUrl:y,isPremium:g,siteUrl:h,descriptionPreviewFallback:w,titlePreviewFallback:f,location:k,alt:b}=e,E=(0,R.__)("Social share preview","wordpress-seo-premium");return(0,S.createElement)(vt.SocialPreviewEditor,{socialMediumName:"Social",isPremium:g,recommendedReplacementVariables:s,replacementVariables:r,description:o,descriptionInputPlaceholder:n,descriptionPreviewFallback:w,title:i,titleInputPlaceholder:a,titlePreviewFallback:f,onSelectImageClick:l,onRemoveImageClick:c,onDescriptionChange:d,onTitleChange:u,imageWarnings:p,imageUrl:m,imageFallbackUrl:y,siteUrl:h,applyReplacementVariables:t,socialPreviewLabel:E,idSuffix:k,alt:b})};St.propTypes={applyReplaceUsingPlugin:oe().func.isRequired,recommendedReplacementVariables:oe().array.isRequired,replacementVariables:oe().array.isRequired,description:oe().string,title:oe().string,onSelectImageClick:oe().func.isRequired,onRemoveImageClick:oe().func.isRequired,onDescriptionChange:oe().func.isRequired,onTitleChange:oe().func.isRequired,imageWarnings:oe().array,imageUrl:oe().string.isRequired,imageFallbackUrl:oe().string.isRequired,isPremium:oe().bool.isRequired,siteUrl:oe().string,descriptionInputPlaceholder:oe().string,titleInputPlaceholder:oe().string,descriptionPreviewFallback:oe().string,titlePreviewFallback:oe().string,location:oe().string,alt:oe().string},St.defaultProps={imageWarnings:[],title:null,titleInputPlaceholder:"",description:null,descriptionInputPlaceholder:"",descriptionPreviewFallback:"",titlePreviewFallback:"",siteUrl:"",location:"",alt:""};const _t=St,Rt=e=>{const{applyReplaceUsingPlugin:t,recommendedReplacementVariables:s,replacementVariables:r,description:o,descriptionInputPlaceholder:n,title:i,titleInputPlaceholder:a,onSelectImageClick:l,onRemoveImageClick:c,onDescriptionChange:d,onTitleChange:u,imageWarnings:p,imageUrl:m,imageFallbackUrl:y,isPremium:g,isLarge:h,siteUrl:w,descriptionPreviewFallback:f,titlePreviewFallback:k,location:b,alt:E}=e,v=(0,R.__)("X share preview","wordpress-seo-premium");return(0,S.createElement)(vt.SocialPreviewEditor,{initialIsOpen:!1,socialMediumName:"X",isPremium:g,recommendedReplacementVariables:s,replacementVariables:r,description:o,descriptionInputPlaceholder:n,descriptionPreviewFallback:f,title:i,titleInputPlaceholder:a,titlePreviewFallback:k,onSelectImageClick:l,onRemoveImageClick:c,onDescriptionChange:d,onTitleChange:u,imageWarnings:p,imageUrl:m,imageFallbackUrl:y,isLarge:h,siteUrl:w,applyReplacementVariables:t,socialPreviewLabel:v,idSuffix:b,alt:E})};Rt.propTypes={applyReplaceUsingPlugin:oe().func.isRequired,recommendedReplacementVariables:oe().array.isRequired,replacementVariables:oe().array.isRequired,description:oe().string,title:oe().string,onSelectImageClick:oe().func.isRequired,onRemoveImageClick:oe().func.isRequired,onDescriptionChange:oe().func.isRequired,onTitleChange:oe().func.isRequired,imageWarnings:oe().array,imageUrl:oe().string,imageFallbackUrl:oe().string,isPremium:oe().bool.isRequired,isLarge:oe().bool,siteUrl:oe().string,descriptionInputPlaceholder:oe().string,titleInputPlaceholder:oe().string,descriptionPreviewFallback:oe().string,titlePreviewFallback:oe().string,location:oe().string,alt:oe().string},Rt.defaultProps={imageWarnings:[],title:null,description:null,isLarge:!0,siteUrl:"",descriptionInputPlaceholder:"",descriptionPreviewFallback:"",titleInputPlaceholder:"",titlePreviewFallback:"",imageUrl:"",imageFallbackUrl:"",location:"",alt:""};const Lt=Rt,{stripHTMLTags:Pt}=L.strings;function Tt(e){const t=window.YoastSEO.applyModifications;return{url:e.url,title:Pt(t("data_page_title",e.title)),description:Pt(t("data_meta_desc",e.description))}}function xt(){return(0,S.createElement)(X.Fragment,null,(0,S.createElement)(H.Fill,{name:"YoastFacebookPremiumModal"},(e=>(0,S.createElement)(_t,{applyReplaceUsingPlugin:Tt,...e}))),(0,S.createElement)(H.Fill,{name:"YoastTwitterPremiumModal"},(e=>(0,S.createElement)(Lt,{applyReplaceUsingPlugin:Tt,...e}))))}const Ot=()=>{if((()=>{const{getPreference:e}=(0,o.select)("yoast-seo/editor");return!!e&&e("isInsightsEnabled",!1)})()&&(0,o.select)("yoast-seo-premium/editor").getPreference("isProminentWordsAvailable",!1))return(0,o.subscribe)((0,a.debounce)((()=>{const{getEditorDataContent:e}=(0,o.select)("yoast-seo/editor"),t=(0,a.get)(window,"yoast.editorModules.helpers.createWatcher",a.noop),s=(()=>{const{setProminentWords:e,setTextFormalityLevel:t}=(0,o.dispatch)("yoast-seo-premium/editor"),s=(0,a.get)(window,"YoastSEO.analysis.worker.runResearch",a.noop),r=(0,a.get)(window,"YoastSEO.analysis.collectData",!1);return()=>{const o=r?v.Paper.parse(r()):null;s("getProminentWordsForInsights",o).then((({result:e})=>(0,a.reduce)(e,((e,t)=>[...e,{word:t.getWord(),occurrence:t.getOccurrences()}]),[]))).then((t=>e(t))),(0,i.isFeatureEnabled)("TEXT_FORMALITY")&&s("textFormality",o).then((e=>{e.result&&t(e.result)}))}})();return setTimeout(s,1500),t(e,s)})(),1500,{maxWait:3e3}))},At=window.yoast.reduxJsToolkit,Kt="adminUrl",Dt=(0,At.createSlice)({name:Kt,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),Mt=(Dt.getInitialState,{selectAdminUrl:e=>(0,a.get)(e,Kt,"")});Mt.selectAdminLink=(0,At.createSelector)([Mt.selectAdminUrl,(e,t)=>t],((e,t)=>{try{return new URL(t,e).href}catch(t){return e}})),Dt.actions,Dt.reducer;const Ft="hasConsent",It=(0,At.createSlice)({name:Ft,initialState:!1,reducers:{giveAiGeneratorConsent:(e,{payload:t})=>t}}),Nt=(It.getInitialState,It.actions,It.reducer,"pluginUrl"),Ut=(0,At.createSlice)({name:Nt,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),Ct=(Ut.getInitialState,{selectPluginUrl:e=>(0,a.get)(e,Nt,"")});Ct.selectImageLink=(0,At.createSelector)([Ct.selectPluginUrl,(e,t,s="assets/images")=>s,(e,t)=>t],((e,t,s)=>[(0,a.trimEnd)(e,"/"),(0,a.trim)(t,"/"),(0,a.trimStart)(s,"/")].join("/")));const Wt=Ut.actions,jt=Ut.reducer,Yt="linkParams",qt=(0,At.createSlice)({name:Yt,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),Bt=(qt.getInitialState,{selectLinkParam:(e,t,s={})=>(0,a.get)(e,`${Yt}.${t}`,s),selectLinkParams:e=>(0,a.get)(e,Yt,{})});Bt.selectLink=(0,At.createSelector)([Bt.selectLinkParams,(e,t)=>t],((e,t)=>(0,se.addQueryArgs)(t,e))),qt.actions,qt.reducer;const $t="wistiaEmbedPermission",Vt=(0,At.createSlice)({name:$t,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${$t}/request`,(e=>{e.status="loading"})),e.addCase(`${$t}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${$t}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,a.get)(t,"error.code",500),message:(0,a.get)(t,"error.message","Unknown")}}))}}),zt=(Vt.getInitialState,Vt.actions,Vt.reducer,"SET_PROMINENT_WORDS"),Gt="SET_TEXT_FORMALITY_LEVEL",Ht=e=>({type:zt,payload:e}),Xt=e=>({type:Gt,payload:e}),Jt="LOAD_MORPHOLOGY_DATA",Qt="LOAD_MORPHOLOGY_DATA_ERROR";function Zt(){return{type:Jt}}function es(e){return{type:Qt,message:e}}const ts="SET_REDIRECT_NOTIFICATION",ss="CLOSE_REDIRECT_NOTIFICATION";function rs(e){return{type:ts,redirectData:e}}function os(){return{type:ss}}const ns="SET_SYNONYMS";function is(e){return{type:ns,synonyms:e}}const as=(0,o.combineReducers)({prominentWords:(e=[],{type:t,payload:s})=>t===zt?s:e,textFormalityLevel:(e=null,{type:t,payload:s})=>t===Gt?s:e}),ls={suggestions:[],messageData:{hasMetaDescription:!1,hasTitle:!1},wordsForLinking:null,isLoading:!0,showUnindexedWarning:!1},cs=function(e=ls,t){switch(t.type){case c:return Object.assign({},e,{isLoading:!0});case d:return Object.assign({},e,{suggestions:t.linkSuggestions||[],isLoading:!1,showUnindexedWarning:t.showUnindexedWarning});case p:return Object.assign({},e,{messageData:{hasMetaDescription:t.messageData.hasMetaDescription,hasTitle:t.messageData.hasTitle},wordsForLinking:t.messageData.prominentWords});case m:return Object.assign({},e,{wordsForLinking:t.wordsForLinking});default:return e}},ds={isLoading:!1,warning:[]},us=function(e=ds,t){switch(t.type){case Jt:return Object.assign({},e,{isLoading:!0});case Qt:return Object.assign({},e,{isLoading:!1,warning:t.message});default:return e}},ps=(e=(()=>({isProminentWordsAvailable:(0,a.get)(window,"wpseoPremiumMetaboxData.data.isProminentWordsAvailable",!1)}))())=>e,ms={isOpen:!1,redirectData:{}},ys=function(e=ms,t){switch(t.type){case ts:return{...e,redirectData:t.redirectData,isOpen:!0};case ss:return{...e,redirectData:{},isOpen:!1};default:return e}},gs={},hs=["a","b","c","d"];function ws(e=hs,t){let s;switch(t.type){case D:return s=hs.length-t.keywords.length,(0,a.takeRight)(e,s);case K:return(0,a.tail)(e);case F:return[t.key,...e]}return e}function fs(e=gs,t,s){switch(t.type){case D:return(0,a.fromPairs)(t.keywords.map(((e,t)=>{const s=hs[t];return[s,{...e,key:s}]})));case K:return{...e,[s]:{key:s,keyword:t.keyword}};case F:return(0,a.pickBy)(e,(e=>e.key!==t.key));case M:return{...e,[t.key]:{...e[t.key],keyword:t.keyword}};case I:return e[t.key]&&e[t.key].keyword===t.keyword?{...e,[t.key]:{...e[t.key],results:t.results,score:t.score}}:e;case N:return{...e,[t.key]:{...e[t.key],synonyms:t.synonyms}}}return e}function ks(e={},t){return{availableKeys:ws(e.availableKeys,t),keywords:fs(e.keywords,t,(0,a.head)(e.availableKeys))}}function bs(e="",t){return t.type===ns?t.synonyms:e}const Es=[],vs=e=>(0,a.get)(e,"insights.prominentWords",Es),Ss=e=>(0,a.get)(e,"insights.textFormalityLevel",null),_s=[];function Rs(e){return(0,a.get)(e,["linkSuggestions","suggestions"],_s)}function Ls(e){return(0,a.get)(e,["linkSuggestions","isLoading"],!0)}function Ps(e){return(0,a.get)(e,["linkSuggestions","showUnindexedWarning"],!1)}function Ts(e){return(0,a.get)(e,["linkSuggestions","wordsForLinking"],null)}function xs(e){return(0,a.get)(e,["linkSuggestions","messageData"],{hasMetaDescription:!1,hasTitle:!1})}function Os(e){return(0,a.get)(e,"metaboxWarning.isLoading",!0)}function As(e){return(0,a.get)(e,"metaboxWarning.warning","")}const Ks=(e,t,s=null)=>(0,a.get)(e,`preferences.${t}`,s),Ds=e=>e.preferences;function Ms(e){return(0,a.get)(e,"redirectNotification.redirectData",{})}function Fs(e){return(0,a.get)(e,"redirectNotification.isOpen",!1)}function Is(e,t){return(0,a.get)(e,["relatedKeywords","keywords",t],{keyword:"",analysis:[],score:0,synonyms:""})}function Ns(e){return Object.values((0,a.get)(e,["relatedKeywords","keywords"],{}))}function Us(e){return(0,a.head)((0,a.get)(e,["relatedKeywords","availableKeys"],[]))||""}function Cs(e){return(0,a.get)(e,["synonyms"],"")}class Ws{constructor(){this.previous={relatedKeywords:[]};const e=wpseoScriptData.isPost?"yoast_wpseo":"hidden_wpseo";this._relatedKeywordsField=document.getElementById(e+"_focuskeywords"),this._synonymsField=document.getElementById(e+"_keywordsynonyms"),this._wordsForLinking=document.getElementById(e+"_words_for_linking")}persist(e){this.persistRelatedKeywords(e),this.persistSynonyms(e),this.persistWordsForLinking(e),this.saveCurrentValues(e)}saveCurrentValues(e){this.previous.relatedKeywords=e.relatedKeywords.keywords,this.previous.synonyms=e.synonyms,this.previous.wordsForLinking=e.linkSuggestions.wordsForLinking}persistRelatedKeywords(e){this.previous.relatedKeywords!==e.relatedKeywords.keywords&&(this._relatedKeywordsField.value=JSON.stringify(Object.values(e.relatedKeywords.keywords).map((e=>({keyword:e.keyword,score:e.score})))))}persistSynonyms(e){if(this.previous.relatedKeywords===e.relatedKeywords.keywords&&this.previous.synonyms===e.synonyms)return;const t=e.synonyms;this._synonymsField.value=JSON.stringify([t,...Object.values(e.relatedKeywords.keywords).map((e=>e.synonyms||""))])}persistWordsForLinking(e){const t=e.linkSuggestions.wordsForLinking;if(null===t||t===this.previous.wordsForLinking)return;const s={};t.forEach((e=>{"object"==typeof e&&"function"==typeof e.getStem&&(s[e.getStem()]=e.getOccurrences())})),this._wordsForLinking.value=JSON.stringify(s)}}function js(){return window.elementor.documents.getCurrent().$element.find(".elementor-widget-container")}const Ys="yoastmark";function qs(e){js().each(((e,t)=>{-1!==t.innerHTML.indexOf("<"+Ys)&&(t.innerHTML=v.markers.removeMarks(t.innerHTML))})),0!==e.length&&(e.some((e=>e.hasPosition()))?function(e){const t=js();let s=0;t.each(((t,r)=>{let o=r.innerHTML.replace(/[\n\t]/g,"").trim();const n=s+o.length;e.filter((e=>e.getPositionStart()>=s&&e.getPositionEnd()t.getPositionStart()-e.getPositionStart())).forEach((e=>{const t=e.getPositionStart(),r=e.getPositionEnd();e.setPositionStart(t-s),e.setPositionEnd(r-s),o=e.applyWithPosition(o),e.setPositionStart(t),e.setPositionEnd(r)})),r.innerHTML=o,s=n}))}(e):function(e){const t=js();e.forEach((e=>{t.each(((t,s)=>{const r=s.innerHTML.replace(/[\n\t]/g,"").replace(/ /g," ").trim();e._properties.marked=v.languageProcessing.normalizeHTML(e._properties.marked),e._properties.original=v.languageProcessing.normalizeHTML(e._properties.original),r.includes(e.getOriginal())&&(s.innerHTML=e.applyWithReplace(r))}))}))}(e))}const{setTextdomainL10n:Bs}=window.yoast.editorModules.helpers.i18n;Bs("wordpress-seo-premium","wpseoPremiumJSL10n");const $s=function(){const s=(0,o.registerStore)("yoast-seo-premium/editor",{reducer:(0,o.combineReducers)({...t,[Nt]:jt}),actions:{...(0,a.pickBy)(e,a.isFunction),...Wt},selectors:{...r,...Ct}});s.dispatch(Wt.setPluginUrl((0,a.get)(window,"wpseoPremiumMetaboxData.data.pluginUrl","")));const l=function(e){if(!E)return null;const t=e.dispatch.bind(e);return t(y()),new b({dispatch:t,rootUrl:(0,a.get)(window,"wpseoPremiumMetaboxData.data.restApi.root",""),nonce:(0,a.get)(window,"wpseoPremiumMetaboxData.data.restApi.nonce",""),currentObjectId:(0,a.get)(window,"wpseoPremiumMetaboxData.data.currentObjectId",0),currentObjectType:(0,a.get)(window,"wpseoPremiumMetaboxData.data.currentObjectType","post"),showUnindexedWarning:(0,a.get)(window,"wpseoPremiumMetaboxData.data.linkSuggestionsUnindexed",!1),maxWordsToSave:(0,a.get)(window,"wpseoPremiumMetaboxData.data.perIndexableLimit",20)})}(s);!function(e){const{getFocusKeyphrase:t,getResultsForKeyword:s,getReadabilityResults:r,getIsKeywordAnalysisActive:n}=(0,o.select)("yoast-seo/editor");let i;n()&&(i=new V);let a=s(t()).overallScore,l=r().overallScore;(0,o.subscribe)((()=>{const o=s(t()).overallScore,n=r().overallScore;o===a&&n===l||(i&&i.analyze(e.getState(),e.dispatch),a=o,l=n)}))}(s),function(e){!function(){const{setRelatedKeywords:e,setSynonyms:t}=(0,o.dispatch)("yoast-seo-premium/editor"),s=G(z.relatedKeyphrases),r=G(z.synonyms),n=r.shift()||"";e(s.map(((e,t)=>{const s=r[t];return{keyword:e.keyword,score:e.score,synonyms:s}}))),t(n)}(),(0,n.addFilter)("yoast.analysis.data","yoast/yoast-seo-premium/addSynonyms",(t=>({...t,synonyms:e.getState().synonyms})));const t=new V,s=e.getState();let r=s.synonyms,i=V.getRelevantData(s);e.subscribe((()=>{const s=e.getState();r!==s.synonyms&&(r=s.synonyms,(0,o.dispatch)("yoast-seo/editor").runAnalysis());const n=V.getRelevantData(s);V.shouldAnalyze(n,i)&&(i=n,t.analyze(s,e.dispatch))}))}(s),(0,n.addAction)("yoast.elementor.save.success","yoast/yoast-seo-premium/redirectNotifications",A),function(e,t){const s=wt(),r=window.wpseoPremiumMetaboxData.data,n={isRtl:s.isRtl},a=(0,o.select)("yoast-seo/editor").getIsKeywordAnalysisActive();window.YoastSEO._registerReactComponent("yoast-seo-premium",(()=>(0,S.createElement)(X.Fragment,null,(0,S.createElement)(H.Fill,{name:"YoastElementor"},(0,S.createElement)(We,{key:"metabox-warning",renderPriority:1,store:e,theme:n}),a&&(0,S.createElement)(rt,{key:"related-keywords",renderPriority:22,store:e,theme:n,location:"sidebar"}),Et&&(0,S.createElement)(kt,{key:"link-suggestions",renderPriority:24},(0,S.createElement)(bt,{store:e,theme:n,location:"sidebar"},(0,S.createElement)(ft,{id:"yoast-linking-suggestions-collapsible-sidebar",title:(0,R.__)("Internal linking suggestions","wordpress-seo-premium")},(0,S.createElement)(Te,{suggester:t,location:"elementor-sidebar"}))))),(0,S.createElement)(yt,{store:e,theme:n}),(0,S.createElement)(H.Fill,{name:"YoastRelatedKeyphrases"},(0,S.createElement)(Ie,null)),(0,i.isFeatureEnabled)("TEXT_FORMALITY")&&(0,S.createElement)(H.Fill,{name:"YoastTextFormalitySidebar"},(0,S.createElement)(ee,null)),!!r.workoutsUrl&&(0,S.createElement)(ht,{link:r.workoutsUrl}),(0,S.createElement)(dt,null))))}(s,l),function(){const e=x().split("_")[0],t=(0,a.get)(window,"wpseoPremiumMetaboxData.data.licensedURL","");if(!v.helpers.getLanguagesWithWordFormSupport().includes(e))return;if(""===t)return;const s=new T({siteUrl:t,language:e,setError:O});(0,o.dispatch)("yoast-seo-premium/editor").loadMorphologyData(),s.injectMorphologyData()}(),window.YoastSEO._registerReactComponent("yoast-seo-premium-social-previews",xt),Ot();const c=new Ws;s.subscribe((()=>{c.persist(s.getState())}))},Vs=function(){var e,t;if((0,o.dispatch)("yoast-seo/editor"))try{(0,i.enableFeatures)(window.wpseoFeaturesL10n),$s(),e=window.wpseoPremiumJSL10n,window.YoastSEO.analysis.worker.initialize({translations:e}),(0,i.isFeatureEnabled)("TEXT_FORMALITY")&&(t=window.wpseoPremiumMetaboxData.data.textFormalityScriptUrl,"undefined"!=typeof YoastSEO&&void 0!==YoastSEO.analysis&&void 0!==YoastSEO.analysis.worker&&YoastSEO.analysis.worker.loadScript(t).then((0,o.dispatch)("yoast-seo/editor").runAnalysis)),function(e,t={}){if("undefined"==typeof YoastSEO||void 0===YoastSEO.analysis||void 0===YoastSEO.analysis.worker)return;const s=YoastSEO.analysis.worker;s.loadScript(e).then((()=>s.sendMessage("initialize",{options:t},"YoastSEOPremium")))}(window.wpseoPremiumMetaboxData.data.premiumAssessmentsScriptUrl,{isTitleAssessmentAvailable:!0,isTextAlignmentAssessmentAvailable:!1,language:(0,window.yoast.editorModules.analysis.getContentLocale)().split("_")[0]}),(0,n.addAction)("yoast.analysis.applyMarks","yoast/yoast-seo-premium/applyMarksElementor",qs)}catch(e){console.error(e)}else setTimeout(Vs,100)};(0,n.addAction)("yoast.elementor.loaded","yoast/yoast-seo-premium/initializeElementorIntegration",Vs)})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-metabox-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-metabox-2290.min.js new file mode 100644 index 00000000..3929b7d6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-metabox-2290.min.js @@ -0,0 +1,87 @@ +(()=>{"use strict";var e={865:(e,t,s)=>{var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=a(s(609)),o=a(s(848)),i=a(s(812));function a(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function c(e,t){var s,i,a,d,u,p,y,m,g=[],h={};for(p=0;p "+l);if("componentClose"===u.type)throw new Error("Missing opening component token: `"+u.value+"`");if("componentOpen"===u.type){s=t[u.value],a=p;break}g.push(t[u.value])}else g.push(u.value);return s&&(d=function(e,t){var s,n,r=t[e],o=0;for(n=e+1;n{function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},848:(e,t,s)=>{var n=s(609),r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,o=s(650),i=s(163),a=s(759),l=".",c=":",d="function"==typeof Symbol&&Symbol.iterator,u="@@iterator";function p(e,t){return e&&"object"==typeof e&&null!=e.key?(s=e.key,n={"=":"=0",":":"=2"},"$"+(""+s).replace(/[=:]/g,(function(e){return n[e]}))):t.toString(36);var s,n}function y(e,t,s,n){var o,a=typeof e;if("undefined"!==a&&"boolean"!==a||(e=null),null===e||"string"===a||"number"===a||"object"===a&&e.$$typeof===r)return s(n,e,""===t?l+p(e,0):t),1;var m=0,g=""===t?l:t+c;if(Array.isArray(e))for(var h=0;h{function t(e){return function(){return e}}var s=function(){};s.thatReturns=t,s.thatReturnsFalse=t(!1),s.thatReturnsTrue=t(!0),s.thatReturnsNull=t(null),s.thatReturnsThis=function(){return this},s.thatReturnsArgument=function(e){return e},e.exports=s},163:e=>{e.exports=function(e,t,s,n,r,o,i,a){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[s,n,r,o,i,a],d=0;(l=new Error(t.replace(/%s/g,(function(){return c[d++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},759:(e,t,s)=>{var n=s(650);e.exports=n},609:e=>{e.exports=window.React}},t={};function s(n){var r=t[n];if(void 0!==r)return r.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,s),o.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={};s.r(e),s.d(e,{ADD_RELATED_KEYWORD:()=>W,CHANGE_RELATED_KEYWORD:()=>j,CLOSE_REDIRECT_NOTIFICATION:()=>wt,LOAD_LINK_SUGGESTIONS:()=>v,LOAD_MORPHOLOGY_DATA:()=>M,LOAD_MORPHOLOGY_DATA_ERROR:()=>F,REMOVE_RELATED_KEYWORD:()=>Y,SET_LINK_SUGGESTIONS:()=>_,SET_LINK_SUGGESTIONS_ERROR:()=>R,SET_MESSAGE_DATA:()=>L,SET_PROMINENT_WORDS:()=>pt,SET_REDIRECT_NOTIFICATION:()=>ht,SET_RELATED_KEYWORDS:()=>N,SET_RELATED_KEYWORD_RESULTS:()=>C,SET_RELATED_KEYWORD_SYNONYMS:()=>U,SET_SYNONYMS:()=>Q,SET_TEXT_FORMALITY_LEVEL:()=>yt,SET_WORDS_FOR_LINKING:()=>x,addRelatedKeyword:()=>B,changeRelatedKeyword:()=>$,closeRedirectNotification:()=>ft,loadLinkSuggestions:()=>O,loadMorphologyData:()=>P,removeRelatedKeyword:()=>q,setLinkSuggestions:()=>A,setLinkSuggestionsError:()=>T,setLoadMorphologyDataError:()=>I,setMessageData:()=>K,setProminentWords:()=>mt,setRedirectNotification:()=>kt,setRelatedKeywordResults:()=>G,setRelatedKeywordSynonyms:()=>V,setRelatedKeywords:()=>z,setSynonyms:()=>H,setTextFormalityLevel:()=>gt,setWordsForLinking:()=>D});var t={};s.r(t),s.d(t,{insights:()=>Et,linkSuggestions:()=>St,metaboxWarning:()=>_t,preferences:()=>Rt,redirectNotification:()=>xt,relatedKeywords:()=>Dt,synonyms:()=>Mt});var n={};s.r(n),s.d(n,{getFirstAvailableKey:()=>Jt,getIsRedirectNotificationOpen:()=>Vt,getKeywordData:()=>Qt,getKeywords:()=>Ht,getLinkSuggestions:()=>Nt,getLinkSuggestionsMessageData:()=>Ut,getMetaboxWarning:()=>$t,getMetaboxWarningIsLoading:()=>Bt,getPreference:()=>qt,getPreferences:()=>zt,getProminentWords:()=>Pt,getRedirectData:()=>Gt,getSynonyms:()=>Xt,getTextFormalityLevel:()=>It,getWordsForLinking:()=>Ct,linkSuggestionsAreLoading:()=>jt,linkSuggestionsAreUnindexed:()=>Yt});var r=s(609);const o=window.wp.components,i=window.wp.element,a=window.wp.i18n,l=window.yoast.featureFlag,c=window.lodash,d=window.yoast.propTypes;var u=s.n(d);const p=window.yoast.styledComponents;var y=s.n(p);const m=({link:e})=>(0,r.createElement)(o.Fill,{name:"YoastAfterCornerstoneToggle"},(0,r.createElement)("hr",{style:{borderTop:"0"}}),(0,r.createElement)("p",{style:{color:"#767676"}},(0,r.createElement)("em",null,(0,i.createInterpolateElement)((0,a.sprintf)( +/* translators: %1$s and %2$s expand to an opening and closing anchor tag, respectively, + that links to the cornerstone workout. */ +/* translators: %1$s and %2$s expand to an opening and closing anchor tag, respectively, + that links to the cornerstone workout. */ +(0,a.__)("Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s","wordpress-seo-premium"),"",""),{a:(0,r.createElement)("a",{href:e,target:"_blank"})}))));m.propTypes={link:u().string.isRequired};const g=m;function h(){return window.wpseoPremiumMetaboxData.data.restApi.available&&window.wpseoPremiumMetaboxData.data.restApi.contentEndpointsAvailable&&"enabled"===window.wpseoPremiumMetaboxData.data.linkSuggestionsEnabled&&window.wpseoPremiumMetaboxData.data.linkSuggestionsAvailable}function w(){return(0,window.yoast.editorModules.analysis.getContentLocale)().split("_")[0]}const k=window.wp.data,f=window.yoast.analysis,E=()=>{if((()=>{const{getPreference:e}=(0,k.select)("yoast-seo/editor");return!!e&&e("isInsightsEnabled",!1)})()&&(0,k.select)("yoast-seo-premium/editor").getPreference("isProminentWordsAvailable",!1))return(0,k.subscribe)((0,c.debounce)((()=>{const{getEditorDataContent:e}=(0,k.select)("yoast-seo/editor"),t=(0,c.get)(window,"yoast.editorModules.helpers.createWatcher",c.noop),s=(()=>{const{setProminentWords:e,setTextFormalityLevel:t}=(0,k.dispatch)("yoast-seo-premium/editor"),s=(0,c.get)(window,"YoastSEO.analysis.worker.runResearch",c.noop),n=(0,c.get)(window,"YoastSEO.analysis.collectData",!1);return()=>{const r=n?f.Paper.parse(n()):null;s("getProminentWordsForInsights",r).then((({result:e})=>(0,c.reduce)(e,((e,t)=>[...e,{word:t.getWord(),occurrence:t.getOccurrences()}]),[]))).then((t=>e(t))),(0,l.isFeatureEnabled)("TEXT_FORMALITY")&&s("textFormality",r).then((e=>{e.result&&t(e.result)}))}})();return setTimeout(s,1500),t(e,s)})(),1500,{maxWait:3e3}))},b=y().span` + color: #a4286a; + font-weight: 600; +`,S=()=>{const e=(0,k.useSelect)((e=>e("yoast-seo-premium/editor").getTextFormalityLevel()),[]),t=f.languageProcessing.sanitizeString((0,k.useSelect)((e=>e("yoast-seo/editor").getTextLength()),[]).text),s=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,a.sprintf)( +/* translators: %1$s expands to a starting `span` tag, %2$s expands to a closing `span` tag, + %3$s expands to the formality level (either formal or informal). */ +/* translators: %1$s expands to a starting `span` tag, %2$s expands to a closing `span` tag, + %3$s expands to the formality level (either formal or informal). */ +(0,a.__)("Overall, your text appears to be %1$s%3$s%2$s.","wordpress-seo-premium"),"","",e),{span:(0,r.createElement)(b,null)})),[e]);return(0,r.createElement)("div",null,t.length<50&&(0,r.createElement)("div",null,(0,r.createElement)("p",null,(0,a.__)("Once you add a bit more copy, we'll be able to tell you the formality level of your text.","wordpress-seo-premium"))),t.length>=50&&(0,r.createElement)("div",null,(0,r.createElement)("p",null,s)))},v="LOAD_LINK_SUGGESTIONS",_="SET_LINK_SUGGESTIONS",R="SET_LINK_SUGGESTIONS_ERROR",L="SET_MESSAGE_DATA",x="SET_WORDS_FOR_LINKING";function O(){return{type:v}}function A(e,t){return{type:_,linkSuggestions:e,showUnindexedWarning:t}}function T(e){return{type:R,message:e}}function K(e){return{type:L,messageData:e}}function D(e){return{type:x,wordsForLinking:e}}const M="LOAD_MORPHOLOGY_DATA",F="LOAD_MORPHOLOGY_DATA_ERROR";function P(){return{type:M}}function I(e){return{type:F,message:e}}const W="ADD_RELATED_KEYWORD",N="SET_RELATED_KEYWORDS",j="CHANGE_RELATED_KEYWORD",Y="REMOVE_RELATED_KEYWORD",C="SET_RELATED_KEYWORD_RESULTS",U="SET_RELATED_KEYWORD_SYNONYMS";function B(e){return{type:W,keyword:e}}function $(e,t){return{type:j,key:e,keyword:t}}function q(e){return{type:Y,key:e}}function z(e){return{type:N,keywords:e}}function G(e,t,s,n){return{type:C,key:e,keyword:t,results:s,score:n}}function V(e,t){return{type:U,key:e,synonyms:t}}const Q="SET_SYNONYMS";function H(e){return{type:Q,synonyms:e}}const J=window.wp.a11y,X=window.wp.url,Z=window.yoast.helpers;var ee=s(865);const te=window.yoast.componentsNew,se=window.yoast.styleGuide,ne=y().div` + display: flex; + align-items: normal; + min-height: 40px; + margin: 10px 0 5px; +`,re=(0,Z.createSvgIconComponent)({copy:{viewbox:"0 0 448 512",path:"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"},check:{viewbox:"0 0 512 512",path:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"}}),oe=y().div` + background-color: #e5e5e5; + width: 100%; + height: 1px; +`,ie=y().button` + box-sizing: border-box; + flex: 0 0 30px; + height: 30px; + width: 30px; + background-color: ${e=>e.iconBackground}; + border-radius: 5px; + cursor: pointer; + outline: none; + border: 1px solid ${e=>e.iconBorder}; + margin-left: 3px; + + &:focus { + box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); + } +`;ie.props={iconBackground:u().string,iconBorder:u().string},ie.defaultProps={iconBackground:se.colors.$color_button,iconBorder:se.colors.$color_button_border};const ae=y().div` + flex: auto; +`,le=(0,Z.makeOutboundLink)(y().a` + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + /* -webkit-box-orient: vertical; */ + /* -moz-box-orient: vertical; */ + max-height: 40px; + margin-bottom: 4px; + -webkit-box-orient: vertical; + overflow: hidden; + padding: 0 0 4px; +`),ce=y().div` + flex-wrap: wrap; + display: flex; + flex-direction: row; + justify-content: unset; + margin-top: 4px; +`,de=y().span` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + padding: 3px 8px; + font-size: 0.85em; + background-color: #f3f4f5; + border-radius: 2px; + margin-bottom: 4px; + margin-right: 4px; + text-transform: lowercase; +`,ue=({badges:e})=>(0,r.createElement)(ce,null,e.map(((e,t)=>(0,r.createElement)(de,{key:t},e))));ue.propTypes={badges:u().array.isRequired};const pe=({value:e,url:t,isActive:s,labels:n})=>{const o=(0,a.__)("Copy link","wordpress-seo-premium"),l=(0,a.sprintf)(/* translators: Hidden accessibility text; %s expands to the link value */ /* translators: Hidden accessibility text; %s expands to the link value */ +(0,a.__)("Copy link to suggested article: %s","wordpress-seo-premium"),e),c=(0,i.useCallback)((e=>{e.nativeEvent.target.setAttribute("aria-label",l),e.nativeEvent.target.setAttribute("data-label",o)}),[l,o]);let d="copy",u=se.colors.$color_black,p=se.colors.$color_button,y="#979797";return s&&(d="check",u=se.colors.$color_alert_success_text,p=se.colors.$color_alert_success_background,y=se.colors.$color_alert_success_background),(0,r.createElement)("div",null,(0,r.createElement)(oe,null),(0,r.createElement)(ne,{className:"yoast-link-suggestion__wrapper"},(0,r.createElement)(ae,{className:"yoast-link-suggestion__container"},(0,r.createElement)(le,{href:t},e),(0,r.createElement)(ue,{badges:n})),(0,r.createElement)(ie,{type:"button",className:"yoast-link-suggestion__copy yoast-tooltip yoast-tooltip-alt yoast-tooltip-s",onBlur:c,"data-clipboard-text":t,"aria-label":l,"data-label":o,iconBackground:p,iconBorder:y},(0,r.createElement)(re,{icon:d,color:u}),(0,r.createElement)(te.ScreenReaderText,null,o))))};pe.propTypes={value:u().string.isRequired,url:u().string.isRequired,isActive:u().bool,labels:u().array.isRequired},pe.defaultProps={isActive:!1};const ye=pe,me=y().div` + display: table-cell; +`,ge=(0,a.__)("We could not find any relevant articles on your website that you could link to from your post.","wordpress-seo-premium"),he=(0,a.__)("To improve your site structure, consider linking to other relevant posts or pages on your website.","wordpress-seo-premium");let we;const ke=e=>{const t=(0,a.__)("Copied!","wordpress-seo-premium");e.trigger.focus(),e.trigger.setAttribute("aria-label",t),e.trigger.setAttribute("data-label",t),(0,J.speak)(t,"assertive")},fe=e=>{const t=(0,a.__)("Not supported!","wordpress-seo-premium");e.trigger.el.setAttribute("aria-label",t),e.trigger.setAttribute("data-label",t),(0,J.speak)(t,"assertive")},Ee=({suggestions:e,maxSuggestions:t,customMessages:s,location:n})=>{const o=function(e){const t=(0,Z.makeOutboundLink)(),s=(0,X.addQueryArgs)(wpseoAdminL10n["shortlinks.site_structure_metabox"],{context:e});return(0,ee.A)({ +// Translators: Text between {{a}} and {{/a}} will be a link to an article about site structure. +mixedString:(0,a.__)("{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.","wordpress-seo-premium"),components:{a:(0,r.createElement)(t,{href:s})}})}(n);if(0===e.length){let e=s.lengthMessage;return e=""===e?ge:e,(0,r.createElement)("div",null,(0,r.createElement)("p",null,e),(0,r.createElement)("p",null,s.metaMessage),(0,r.createElement)("p",null,o))}return e.length>t&&(e.length=t),(0,r.createElement)(me,null,(0,r.createElement)("p",null,he," ",o),(0,r.createElement)("p",null,s.metaMessage),e.map(((e,t)=>(0,r.createElement)(ye,{key:t,...e}))))};Ee.propTypes={suggestions:u().array.isRequired,maxSuggestions:u().number,customMessages:u().object,location:u().string},Ee.defaultProps={maxSuggestions:10,customMessages:{lengthMessage:"",metaMessage:""},location:""};const be=()=>{window.open("admin.php?page=wpseo_tools&start-indexation=true","yoastSeoAnalyzeProminentWords")},Se=e=>{if((0,i.useEffect)((()=>(e.suggester.subscribe(),()=>{e.suggester.unsubscribe()})),[]),e.isLoading)return(0,r.createElement)("div",{className:"yoast-link-suggestions"},(0,r.createElement)("p",null,(0,a.__)("It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.","wordpress-seo-premium")));we||(we=new ClipboardJS(".yoast-link-suggestion__copy"),we.on("success",ke),we.on("error",fe));let t=null;e.showUnindexedWarning&&(t=(()=>{ +/* translators: 1: link to yoast.com post about internal linking suggestion. 2: is anchor closing. + 3: button to the recalculation option. 4: closing button */ +let e=(0,a.__)("We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s","wordpress-seo-premium");return e=e.replace("%1$s","{{a}}"),e=e.replace("%2$s","{{/a}}"),e=e.replace("%3$s","{{startAnalysis}}"),e=e.replace("%4$s","{{/startAnalysis}}"),e=e.replace("\n\n","{{br /}}{{br /}}"),e=(0,ee.A)({mixedString:e,components:{a:(0,r.createElement)("a",{href:wpseoAdminL10n["shortlinks.notification_internal_link"],target:"_blank"}),startAnalysis:(0,r.createElement)("button",{type:"button",className:"button",onClick:be}),br:(0,r.createElement)("br",null)}}),(0,r.createElement)("div",{className:"notice notice-warning notice-alt wpseo-notice-breakout-inside yoast-links-suggestions-notice"},(0,r.createElement)("p",null,e))})());const s=(e=>{let t="";e.hasWordsForLinking||(t=(0,a.__)("Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.","wordpress-seo-premium"));const s=((e,t,s)=>{switch(!0){case s&&!t&&""===e:return(0,a.__)("Add a title to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&t&&""===e:return(0,a.__)("Add a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&!t&&""===e:return(0,a.__)("Add a title and a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case s&&!t&&""!==e:return(0,a.__)("Also, add a title to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&t&&""!==e:return(0,a.__)("Also, add a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium");case!s&&!t&&""!==e:return(0,a.__)("Also, add a title and a metadescription to your post for the best internal linking suggestions.","wordpress-seo-premium")}})(t,e.hasTitle,e.hasMetaDescription);return{lengthMessage:t,metaMessage:s}})({...e.messageData,hasWordsForLinking:Array.isArray(e.wordsForLinking)&&e.wordsForLinking.length>0});return(0,r.createElement)("div",{className:"yoast-link-suggestions"},t,(0,r.createElement)(Ee,{suggestions:e.suggestions,customMessages:s,location:e.location}))};Se.propTypes={suggester:u().object,suggestions:u().array.isRequired,wordsForLinking:u().array,messageData:u().object,isLoading:u().bool.isRequired,showUnindexedWarning:u().bool,location:u().string},Se.defaultProps={suggester:null,showUnindexedWarning:!1,messageData:{hasMetaDescription:!1,hasTitle:!1},wordsForLinking:[],location:""};const ve=Se,_e=(0,k.withSelect)((e=>{const{getLinkSuggestions:t,getWordsForLinking:s,getLinkSuggestionsMessageData:n,linkSuggestionsAreLoading:r,linkSuggestionsAreUnindexed:o}=e("yoast-seo-premium/editor");return{suggestions:t(),wordsForLinking:s(),messageData:n(),isLoading:r(),showUnindexedWarning:o()}}))(ve);class Re extends i.Component{render(){return this.props.isLoading||this.props.warning.length<1?null:(0,r.createElement)(te.Warning,{message:[this.props.warning]})}}Re.propTypes={warning:u().array,isLoading:u().bool},Re.defaultProps={warning:[],isLoading:!1};const Le=Re,xe=(0,k.withSelect)((e=>{const{getMetaboxWarningIsLoading:t,getMetaboxWarning:s}=e("yoast-seo-premium/editor");return{isLoading:t(),warning:s()}}))(Le),Oe=window.wp.compose,Ae=window.yoast.editorModules.analysis.getIndicatorForScore,Te=window.yoast.editorModules.components.HelpLink,{getIconForScore:Ke}=window.yoast.editorModules.components.contentAnalysis.mapResults,De=window.yoast.editorModules.containers.Results,{LocationConsumer:Me}=window.yoast.editorModules.components.contexts.location,Fe=window.yoast.editorModules.components.SidebarCollapsible,Pe=window.yoast.editorModules.components.MetaboxCollapsible,Ie=window.yoast.editorModules.components.contentAnalysis.KeywordInput,We=y().strong` + font-size: 1em; + font-weight: bold; + margin-bottom: 0.5em; + display: block; +`;function Ne({keyword:e,onChange:t,analysis:s,score:n,isAddKeyword:o,synonyms:l,onChangeSynonyms:c,onFocusKeyword:d,onBlurKeyword:u,onFocusSynonym:p,onBlurSynonym:y,onRemoveKeyword:m,marksButtonStatus:g,keywordKey:h}){const w=Ae(n);let k=(0,a.__)("Related keyphrase","wordpress-seo-premium"),f=e,E=Ke(w.className);o&&(k=(0,a.__)("Add related keyphrase","wordpress-seo-premium"),f="",E={icon:"plus",color:se.colors.$color_grey_medium_dark}),""===e&&(w.className="na",w.screenReaderReadabilityText=(0,a.__)("Enter a related keyphrase to calculate the SEO score","wordpress-seo-premium"));const b=function(e){const t=[];return e&&e.includes(",")&&t.push((0,a.__)("Are you trying to use multiple related keyphrases? You should add them separately.","wordpress-seo-premium")),e&&e.length>191&&t.push((0,a.__)("Your keyphrase is too long. It can be a maximum of 191 characters.","wordpress-seo-premium")),t}(e),S=(0,r.createElement)(Te,{href:wpseoAdminL10n["shortlinks.focus_keyword_info"],className:"dashicons"},(0,r.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,a.__)("Help on choosing the perfect keyphrase","wordpress-seo-premium"))),v=(0,r.createElement)(Te,{href:wpseoAdminL10n["shortlinks.keyword_synonyms_info"],className:"dashicons"},(0,r.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,a.__)("Help on keyphrase synonyms","wordpress-seo-premium")));return(0,r.createElement)(Me,null,(n=>{const w="metabox"===n?Pe:Fe;return(0,r.createElement)(w,{title:k,subTitle:f,prefixIcon:E,prefixIconCollapsed:E,id:`yoast-additional-keyphrase-collapsible-${h}-${n}`},(0,r.createElement)(Ie,{id:o?`yoast-keyword-input-add-${n}`:`yoast-keyword-input-${h}-${n}`,keyword:e,onChange:t,onFocusKeyword:d,onRemoveKeyword:o?null:m,onBlurKeyword:u,label:(0,a.__)("Keyphrase","wordpress-seo-premium"),helpLink:S,hasError:b.length>0,errorMessages:b}),!o&&(0,r.createElement)(i.Fragment,null,(0,r.createElement)(te.SynonymsInput,{id:`yoast-synonyms-input-${h}-${n}`,showLabel:!0,label:(0,a.__)("Synonyms","wordpress-seo-premium"),onChange:c,onBlur:y,onFocus:p,value:l,helpLink:v}),(0,r.createElement)(We,null,(0,a.__)("Analysis results","wordpress-seo-premium")),(0,r.createElement)(De,{showLanguageNotice:!1,marksButtonClassName:"yoast-tooltip yoast-tooltip-w",editButtonClassName:"yoast-tooltip yoast-tooltip-w",marksButtonStatus:g,results:s,keywordKey:h,location:n})))}))}Ne.propTypes={keyword:u().string.isRequired,onChange:u().func.isRequired,synonyms:u().string,onChangeSynonyms:u().func,onRemoveKeyword:u().func.isRequired,onFocusKeyword:u().func.isRequired,onBlurKeyword:u().func.isRequired,onBlurSynonym:u().func.isRequired,onFocusSynonym:u().func.isRequired,analysis:u().array,isAddKeyword:u().bool,score:u().number,marksButtonStatus:u().string,keywordKey:u().string.isRequired},Ne.defaultProps={synonyms:"",onChangeSynonyms:c.noop,analysis:[],isAddKeyword:!1,score:0,marksButtonStatus:"enabled"};const je=(0,Oe.compose)([(0,k.withSelect)(((e,t)=>{const{keywordKey:s}=t,{getKeywordData:n}=e("yoast-seo-premium/editor");return{keyword:n(s).keyword,analysis:n(s).results,score:n(s).score,synonyms:n(s).synonyms}})),(0,k.withDispatch)(((e,t)=>{const{isAddKeyword:s,keywordKey:n}=t,{setMarkerPauseStatus:r}=e("yoast-seo/editor"),{addRelatedKeyword:o,changeRelatedKeyword:i,setRelatedKeywordSynonyms:a,removeRelatedKeyword:l}=e("yoast-seo-premium/editor");return{onChange(e){s?o(e):i(n,e)},onFocusKeyword(){r(!0)},onRemoveKeyword(){l(n)},onBlurKeyword(e){r(!1),""===e.target.value&&l(n)},onChangeSynonyms(e){const t=e.target.value;a(n,t)},onFocusSynonym(){r(!0)},onBlurSynonym(){r(!1)}}}))])(Ne);function Ye({relatedKeywords:e,firstAvailableKey:t,marksButtonStatus:s}){const n=e.length<4,o=[...e];return n&&o.push({key:t,isAddKeyword:!0}),(0,r.createElement)("div",null,o.map((e=>{const t=e.isAddKeyword||!1;return(0,r.createElement)(je,{key:e.key,keywordKey:e.key,isAddKeyword:t,marksButtonStatus:s})})))}Ye.propTypes={relatedKeywords:u().array.isRequired,firstAvailableKey:u().string.isRequired,marksButtonStatus:u().string},Ye.defaultProps={marksButtonStatus:"enabled"};const Ce=(0,Oe.compose)([(0,k.withSelect)((e=>{const{getActiveMarker:t,getMarkButtonStatus:s}=e("yoast-seo/editor"),{getKeywords:n,getFirstAvailableKey:r}=e("yoast-seo-premium/editor");return{relatedKeywords:n(),firstAvailableKey:r(),activeMarker:t(),marksButtonStatus:s()}})),(0,k.withDispatch)((e=>{const{setActiveMarker:t}=e("yoast-seo/editor");return{setActiveMarker:t}}))])(Ye),Ue=e=>(0,r.createElement)(te.NewButton,{variant:"secondary",small:!0,buttonRef:e.buttonRef,onClick:e.onAdd,disabled:e.disabled},(0,a.__)("Add as related keyphrase","wordpress-seo-premium"));Ue.propTypes={buttonRef:u().object,onAdd:u().func.isRequired,disabled:u().bool},Ue.defaultProps={buttonRef:null,disabled:!1};const Be=Ue,$e=(0,i.forwardRef)(((e,t)=>(0,r.createElement)("button",{ref:t,className:"yoast-remove",onClick:e.onRemove},(0,a.__)("Remove","wordpress-seo-premium"))));class qe extends i.Component{constructor(e){super(e),this.addButtonRef=(0,i.createRef)(),this.removeLinkRef=(0,i.createRef)(),this.addKeyphraseToList=this.addKeyphraseToList.bind(this),this.removeKeyphraseFromList=this.removeKeyphraseFromList.bind(this)}getAssociatedKeyphraseKey(e,t){const s=(0,c.find)(e,{keyword:t});return(0,c.isUndefined)(s)?"":s.key}keyphraseExists(e,t){return!(0,c.isUndefined)((0,c.find)(e,{keyword:t}))}relatedKeyphrasesLimitReached(){return this.props.relatedKeyphrases.length>=4}addKeyphraseToList(){""===this.getAssociatedKeyphraseKey(this.props.relatedKeyphrases,this.props.relatedKeyphrase)&&this.props.addKeyphrase(this.props.relatedKeyphrase)}removeKeyphraseFromList(){const e=this.getAssociatedKeyphraseKey(this.props.relatedKeyphrases,this.props.relatedKeyphrase);""!==e&&this.props.removeKeyphrase(e)}componentDidUpdate(e){const t=this.keyphraseExists(this.props.relatedKeyphrases,this.props.relatedKeyphrase),s=this.keyphraseExists(e.relatedKeyphrases,e.relatedKeyphrase);t&&!s&&this.removeLinkRef.current.focus(),!t&&s&&this.addButtonRef.current.focus()}render(){const e=this.props.relatedKeyphrase,t=this.props.relatedKeyphrases;return t&&this.keyphraseExists(t,e)?(0,r.createElement)(i.Fragment,null,(0,r.createElement)("span",{className:"yoast-modal__settings-saved"},(0,a.__)("Added!","wordpress-seo-premium")),(0,r.createElement)($e,{ref:this.removeLinkRef,onRemove:this.removeKeyphraseFromList})):(0,r.createElement)(Be,{buttonRef:this.addButtonRef,disabled:this.relatedKeyphrasesLimitReached(),onAdd:this.addKeyphraseToList})}}qe.propTypes={relatedKeyphrase:u().string,relatedKeyphrases:u().array,addKeyphrase:u().func.isRequired,removeKeyphrase:u().func.isRequired},qe.defaultProps={relatedKeyphrase:"",relatedKeyphrases:[]};const ze=(0,k.withDispatch)((e=>{const{addRelatedKeyword:t,removeRelatedKeyword:s}=e("yoast-seo-premium/editor");return{addKeyphrase:t,removeKeyphrase:s}}))(qe),Ge=window.yoast.editorModules.containers.SEMrushRelatedKeyphrases,Ve=(0,Oe.compose)([(0,k.withSelect)((e=>({keyphrase:e("yoast-seo/editor").getFocusKeyphrase(),relatedKeyphrases:e("yoast-seo-premium/editor").getKeywords(),renderAction:(e,t)=>(0,r.createElement)(ze,{relatedKeyphrase:e,relatedKeyphrases:t})})))])(Ge),Qe=(0,Oe.compose)([(0,k.withSelect)((e=>{const{getSynonyms:t}=e("yoast-seo-premium/editor");return{value:t()}})),(0,k.withDispatch)((e=>{const{setMarkerPauseStatus:t}=e("yoast-seo/editor"),{setSynonyms:s}=e("yoast-seo-premium/editor");return{onChange(e){s(e.target.value)},onFocus(){t(!0)},onBlur(){t(!1)}}}))])(te.SynonymsInput),He=window.yoast.reduxJsToolkit,Je="adminUrl",Xe=(0,He.createSlice)({name:Je,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),Ze=(Xe.getInitialState,{selectAdminUrl:e=>(0,c.get)(e,Je,"")});Ze.selectAdminLink=(0,He.createSelector)([Ze.selectAdminUrl,(e,t)=>t],((e,t)=>{try{return new URL(t,e).href}catch(t){return e}})),Xe.actions,Xe.reducer,window.wp.apiFetch;const et="hasConsent",tt=(0,He.createSlice)({name:et,initialState:!1,reducers:{giveAiGeneratorConsent:(e,{payload:t})=>t}}),st=(tt.getInitialState,tt.actions,tt.reducer,"pluginUrl"),nt=(0,He.createSlice)({name:st,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),rt=(nt.getInitialState,{selectPluginUrl:e=>(0,c.get)(e,st,"")});rt.selectImageLink=(0,He.createSelector)([rt.selectPluginUrl,(e,t,s="assets/images")=>s,(e,t)=>t],((e,t,s)=>[(0,c.trimEnd)(e,"/"),(0,c.trim)(t,"/"),(0,c.trimStart)(s,"/")].join("/")));const ot=nt.actions,it=nt.reducer,at="linkParams",lt=(0,He.createSlice)({name:at,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),ct=(lt.getInitialState,{selectLinkParam:(e,t,s={})=>(0,c.get)(e,`${at}.${t}`,s),selectLinkParams:e=>(0,c.get)(e,at,{})});ct.selectLink=(0,He.createSelector)([ct.selectLinkParams,(e,t)=>t],((e,t)=>(0,X.addQueryArgs)(t,e))),lt.actions,lt.reducer;const dt="wistiaEmbedPermission",ut=(0,He.createSlice)({name:dt,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${dt}/request`,(e=>{e.status="loading"})),e.addCase(`${dt}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${dt}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,c.get)(t,"error.code",500),message:(0,c.get)(t,"error.message","Unknown")}}))}}),pt=(ut.getInitialState,ut.actions,ut.reducer,"SET_PROMINENT_WORDS"),yt="SET_TEXT_FORMALITY_LEVEL",mt=e=>({type:pt,payload:e}),gt=e=>({type:yt,payload:e}),ht="SET_REDIRECT_NOTIFICATION",wt="CLOSE_REDIRECT_NOTIFICATION";function kt(e){return{type:ht,redirectData:e}}function ft(){return{type:wt}}const Et=(0,k.combineReducers)({prominentWords:(e=[],{type:t,payload:s})=>t===pt?s:e,textFormalityLevel:(e=null,{type:t,payload:s})=>t===yt?s:e}),bt={suggestions:[],messageData:{hasMetaDescription:!1,hasTitle:!1},wordsForLinking:null,isLoading:!0,showUnindexedWarning:!1},St=function(e=bt,t){switch(t.type){case v:return Object.assign({},e,{isLoading:!0});case _:return Object.assign({},e,{suggestions:t.linkSuggestions||[],isLoading:!1,showUnindexedWarning:t.showUnindexedWarning});case L:return Object.assign({},e,{messageData:{hasMetaDescription:t.messageData.hasMetaDescription,hasTitle:t.messageData.hasTitle},wordsForLinking:t.messageData.prominentWords});case x:return Object.assign({},e,{wordsForLinking:t.wordsForLinking});default:return e}},vt={isLoading:!1,warning:[]},_t=function(e=vt,t){switch(t.type){case M:return Object.assign({},e,{isLoading:!0});case F:return Object.assign({},e,{isLoading:!1,warning:t.message});default:return e}},Rt=(e=(()=>({isProminentWordsAvailable:(0,c.get)(window,"wpseoPremiumMetaboxData.data.isProminentWordsAvailable",!1)}))())=>e,Lt={isOpen:!1,redirectData:{}},xt=function(e=Lt,t){switch(t.type){case ht:return{...e,redirectData:t.redirectData,isOpen:!0};case wt:return{...e,redirectData:{},isOpen:!1};default:return e}},Ot={},At=["a","b","c","d"];function Tt(e=At,t){let s;switch(t.type){case N:return s=At.length-t.keywords.length,(0,c.takeRight)(e,s);case W:return(0,c.tail)(e);case Y:return[t.key,...e]}return e}function Kt(e=Ot,t,s){switch(t.type){case N:return(0,c.fromPairs)(t.keywords.map(((e,t)=>{const s=At[t];return[s,{...e,key:s}]})));case W:return{...e,[s]:{key:s,keyword:t.keyword}};case Y:return(0,c.pickBy)(e,(e=>e.key!==t.key));case j:return{...e,[t.key]:{...e[t.key],keyword:t.keyword}};case C:return e[t.key]&&e[t.key].keyword===t.keyword?{...e,[t.key]:{...e[t.key],results:t.results,score:t.score}}:e;case U:return{...e,[t.key]:{...e[t.key],synonyms:t.synonyms}}}return e}function Dt(e={},t){return{availableKeys:Tt(e.availableKeys,t),keywords:Kt(e.keywords,t,(0,c.head)(e.availableKeys))}}function Mt(e="",t){return t.type===Q?t.synonyms:e}const Ft=[],Pt=e=>(0,c.get)(e,"insights.prominentWords",Ft),It=e=>(0,c.get)(e,"insights.textFormalityLevel",null),Wt=[];function Nt(e){return(0,c.get)(e,["linkSuggestions","suggestions"],Wt)}function jt(e){return(0,c.get)(e,["linkSuggestions","isLoading"],!0)}function Yt(e){return(0,c.get)(e,["linkSuggestions","showUnindexedWarning"],!1)}function Ct(e){return(0,c.get)(e,["linkSuggestions","wordsForLinking"],null)}function Ut(e){return(0,c.get)(e,["linkSuggestions","messageData"],{hasMetaDescription:!1,hasTitle:!1})}function Bt(e){return(0,c.get)(e,"metaboxWarning.isLoading",!0)}function $t(e){return(0,c.get)(e,"metaboxWarning.warning","")}const qt=(e,t,s=null)=>(0,c.get)(e,`preferences.${t}`,s),zt=e=>e.preferences;function Gt(e){return(0,c.get)(e,"redirectNotification.redirectData",{})}function Vt(e){return(0,c.get)(e,"redirectNotification.isOpen",!1)}function Qt(e,t){return(0,c.get)(e,["relatedKeywords","keywords",t],{keyword:"",analysis:[],score:0,synonyms:""})}function Ht(e){return Object.values((0,c.get)(e,["relatedKeywords","keywords"],{}))}function Jt(e){return(0,c.head)((0,c.get)(e,["relatedKeywords","availableKeys"],[]))||""}function Xt(e){return(0,c.get)(e,["synonyms"],"")}class Zt{constructor(){this.previous={relatedKeywords:[]};const e=wpseoScriptData.isPost?"yoast_wpseo":"hidden_wpseo";this._relatedKeywordsField=document.getElementById(e+"_focuskeywords"),this._synonymsField=document.getElementById(e+"_keywordsynonyms"),this._wordsForLinking=document.getElementById(e+"_words_for_linking")}persist(e){this.persistRelatedKeywords(e),this.persistSynonyms(e),this.persistWordsForLinking(e),this.saveCurrentValues(e)}saveCurrentValues(e){this.previous.relatedKeywords=e.relatedKeywords.keywords,this.previous.synonyms=e.synonyms,this.previous.wordsForLinking=e.linkSuggestions.wordsForLinking}persistRelatedKeywords(e){this.previous.relatedKeywords!==e.relatedKeywords.keywords&&(this._relatedKeywordsField.value=JSON.stringify(Object.values(e.relatedKeywords.keywords).map((e=>({keyword:e.keyword,score:e.score})))))}persistSynonyms(e){if(this.previous.relatedKeywords===e.relatedKeywords.keywords&&this.previous.synonyms===e.synonyms)return;const t=e.synonyms;this._synonymsField.value=JSON.stringify([t,...Object.values(e.relatedKeywords.keywords).map((e=>e.synonyms||""))])}persistWordsForLinking(e){const t=e.linkSuggestions.wordsForLinking;if(null===t||t===this.previous.wordsForLinking)return;const s={};t.forEach((e=>{"object"==typeof e&&"function"==typeof e.getStem&&(s[e.getStem()]=e.getOccurrences())})),this._wordsForLinking.value=JSON.stringify(s)}}function es(e){const t={};return e.forEach((function(e){t[e.getStem()]=e.getOccurrences()})),t}const ts=class{constructor({dispatch:e,rootUrl:t,nonce:s,showUnindexedWarning:n,currentObjectId:r,currentObjectType:o,maxWordsToSave:i}){this.dispatch=e,this._rootUrl=t,this._nonce=s,this._showUnindexedWarning=n,this._currentObjectId=r,this._currentObjectType=o,this._maxWordsToSave=i,this.wordsForLinking=[],this.linkSuggestions=!1,this.linkSuggestionsRequest=!1,this.update=this.update.bind(this)}subscribe(){this.update(),jQuery(window).on("YoastSEO:numericScore",this.update)}unsubscribe(){jQuery(window).off("YoastSEO:numericScore",this.update)}update(){YoastSEO.analysis.worker.runResearch("getProminentWordsForInternalLinking").then((({result:e})=>this.setWordsForLinkingOnStore(e))).then((e=>this.retrieveLinkSuggestions(e))).then((e=>this.formatLinkSuggestions(e))).then((e=>this.setLinkingSuggestionsOnStore(e))),this.updateUsedLinks()}setWordsForLinkingOnStore(e){const t=e.prominentWords.slice(0,this._maxWordsToSave);return this.dispatchMessageData(e),this.dispatchWordsForLinking(t),t}dispatchMessageData(e){this.dispatch(K(e))}dispatchWordsForLinking(e){this.dispatch(D(e))}dispatchLinkSuggestions(e,t){this.dispatch(A(e,t))}formatLinkSuggestions(e){return this.linkSuggestions=e,e=this.markUsedLinks(e),this.constructor.mapSuggestionsForStore(e)}setLinkingSuggestionsOnStore(e){this.dispatchLinkSuggestions(e,this._showUnindexedWarning)}retrieveLinkSuggestions(e){return(0,c.isEqual)([],e)?Promise.resolve([]):this.linkSuggestions&&(0,c.isEqual)(e,this.wordsForLinking)?Promise.resolve(this.linkSuggestions):(this.linkSuggestionsRequest&&(0,c.isEqual)(e,this.wordsForLinking)||(this.wordsForLinking=e,this.linkSuggestionsRequest=new Promise(((t,s)=>{const n={prominent_words:es(e),object_id:this._currentObjectId,object_type:this._currentObjectType};jQuery.ajax({type:"GET",url:this._rootUrl+"yoast/v1/link_suggestions?"+jQuery.param(n),beforeSend:e=>{e.setRequestHeader("X-WP-Nonce",this._nonce)},dataType:"json",success:e=>{t(e)},error:e=>{s(e)},complete:()=>{this.linkSuggestionsRequest=!1}})}))),this.linkSuggestionsRequest)}static mapSuggestionsForStore(e){return e.map((e=>({value:e.title,url:e.link,isActive:e.active,labels:e.labels})))}updateUsedLinks(){YoastSEO.analysis.worker.runResearch("getLinks").then((({result:e})=>{if(this.usedLinks=e,this.linkSuggestions&&this.linkSuggestions.length>0){const e=this.formatLinkSuggestions(this.linkSuggestions);this.setLinkingSuggestionsOnStore(e)}}))}markUsedLinks(e){const t=this.usedLinks||[];return e.forEach((e=>{e.active=t.includes(e.link)})),e}};function ss(){window.location.reload()}class ns{constructor({siteUrl:e,setError:t,language:s,pluginVersion:n="22.9"}){this._siteUrl=e,this._setError=t,this._requestUrl=function(e){const t={en:"v5",de:"v10",es:"v10",fr:"v11",it:"v10",nl:"v9",ru:"v10",id:"v9",pt:"v9",pl:"v9",ar:"v9",sv:"v1",he:"v1",hu:"v2",nb:"v1",tr:"v1",cs:"v1",sk:"v1",el:"v1",ja:"v1"};return!!Object.keys(t).includes(e)&&`https://my.yoast.com/api/downloads/file/morphology-${e}-${t[e]}`}(s),this._pluginVersion=n}injectMorphologyData(){this.retrieveData(this._requestUrl,this._siteUrl,this._pluginVersion).then((e=>{YoastSEO.analysis.worker.initialize({researchData:{morphology:e}}).then((()=>{YoastSEO.app.refresh()}))})).catch((e=>{if(403===e.status){const e=(0,Z.makeOutboundLink)(),t=(0 +/* Translators: {{activateLink}}: Link start tag to a Yoast.com article, {{/activateLink}}: Link closing tag, + {{reloadButton}}: Button start tag to reload the page, {{/reloadButton}} Button closing tag. */,ee.A)({mixedString:(0,a.__)("An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.","wordpress-seo-premium"),components:{activateLink:(0,r.createElement)(e,{href:wpseoAdminL10n["shortlinks.activate_premium_info"]}),reloadButton:(0,r.createElement)("button",{type:"button",className:"button-link",onClick:ss})}});this._setError(t)}}))}retrieveData(e,t,s){return new Promise(((n,r)=>{jQuery.ajax({type:"GET",url:e,data:{plugin_version:s,site:t},dataType:"json",success:e=>{n(e)},error:e=>{r(e)}})}))}}const{refreshDelay:rs}=window.yoast.editorModules.analysis.constants,{sortResultsByIdentifier:os}=window.yoast.editorModules.analysis.refreshAnalysis;class is{constructor(){this.analyze=(0,c.debounce)(this.analyze,rs)}static getAnalysis(){return YoastSEO.analysis}static getRelevantData(e){const t={};return(0,c.forEach)(e.relatedKeywords.keywords,(({keyword:e,synonyms:s},n)=>{(0,c.isString)(s)||(s=""),t[n]={keyword:e,synonyms:s}})),t}static shouldAnalyze(e,t){return!(0,c.isEqual)(e,t)}analyze(e,t){const{worker:s,collectData:n,applyMarks:r}=is.getAnalysis();let o=n();o instanceof f.Paper==0&&(o=f.Paper.parse(o));const i=is.getRelevantData(e);s.analyzeRelatedKeywords(o,i).then((({result:{seo:e}})=>{e&&(0,c.forEach)(e,(({results:e,score:s},n)=>{""!==n&&void 0!==i[n]&&void 0!==i[n].keyword&&(e=os(e),(0,c.forEach)(e,(e=>{e.getMarker=()=>()=>r(o,e.marks)})),t(G(n,i[n].keyword,e,s)))}))})).catch((e=>console.warn(e)))}}const as=window.yoast.editorModules.helpers.isBlockEditor,{setTextdomainL10n:ls}=window.yoast.editorModules.helpers.i18n,cs=window.yoast.editorModules.components.SidebarItem,ds=window.yoast.editorModules.components.higherorder.withYoastSidebarPriority,us=window.yoast.editorModules.analysis.getL10nObject,ps=window.yoast.editorModules.components.HelpLink,ys=window.yoast.editorModules.components.TopLevelProviders,ms=window.yoast.editorModules.components.SidebarCollapsible,gs=window.yoast.editorModules.components.MetaboxCollapsible,hs=(0,c.get)(window,"wpseoPremiumMetaboxData.data",{});ls("wordpress-seo-premium","wpseoPremiumJSL10n");const ws=function(){return!!wpseoScriptData.isTerm},ks=function(){return hs.seoAnalysisEnabled},fs=function(e,t=[]){try{return JSON.parse(e)}catch(e){return t}},Es=ds((({store:e,theme:t,location:s})=>(0,r.createElement)(ys,{store:e,theme:t,location:s},(0,r.createElement)(Ce,null))));Es.propTypes={store:u().object.isRequired,theme:u().object.isRequired,renderPriority:u().number.isRequired};const bs=({theme:e})=>{const t=(0,r.createElement)(ps,{href:wpseoAdminL10n["shortlinks.keyword_synonyms_info"],className:"dashicons"},(0,r.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ /* translators: Hidden accessibility text. */ +(0,a.__)("Help on keyphrase synonyms","wordpress-seo-premium")));return(0,r.createElement)(p.ThemeProvider,{theme:e},(0,r.createElement)(i.Fragment,null,(0,r.createElement)(o.Fill,{name:"yoast-synonyms-metabox"},(0,r.createElement)(Qe,{id:"synonyms-input-metabox",label:(0,a.__)("Keyphrase synonyms","wordpress-seo-premium"),helpLink:t})),(0,r.createElement)(o.Fill,{name:"yoast-synonyms-sidebar"},(0,r.createElement)(Qe,{id:"synonyms-input-sidebar",label:(0,a.__)("Keyphrase synonyms","wordpress-seo-premium"),helpLink:t}))))};bs.propTypes={theme:u().object.isRequired};const Ss=ds((({theme:e})=>(0,r.createElement)(p.ThemeProvider,{theme:e},(0,r.createElement)(xe,null)))),vs=function(){const s=(0,k.registerStore)("yoast-seo-premium/editor",{reducer:(0,k.combineReducers)({...t,[st]:it}),actions:{...(0,c.pickBy)(e,c.isFunction),...ot},selectors:{...n,...rt}});s.dispatch(ot.setPluginUrl((0,c.get)(window,"wpseoPremiumMetaboxData.data.pluginUrl",""))),function(e){const t=e.dispatch,s=ws()?"hidden_wpseo":"yoast_wpseo",n=document.getElementById(s+"_focuskeywords"),r=document.getElementById(s+"_keywordsynonyms"),o=fs(n.value),i=fs(r.value),a=i.shift()||"";t(z(o.map(((e,t)=>{const s=i[t];return{keyword:e.keyword,score:e.score,synonyms:s}})))),t(H(a))}(s);const d=s.getState();let p=d.synonyms,y=is.getRelevantData(d);E();let m=null;h()&&(m=function(e){const t=e.dispatch.bind(e);t(O());const s=new ts({dispatch:t,rootUrl:(0,c.get)(hs,"restApi.root",""),nonce:(0,c.get)(hs,"restApi.nonce",""),currentObjectId:hs.currentObjectId,currentObjectType:hs.currentObjectType,showUnindexedWarning:hs.linkSuggestionsUnindexed,maxWordsToSave:hs.perIndexableLimit});return YoastSEO.analysis.linkSuggester=s,(e=>{const t=document.getElementById("yoast_internal_linking");if(!t)return;jQuery(t).addClass("closed");const s=({children:e})=>{const[s,n]=(0,i.useState)(jQuery(t).hasClass("closed"));return(0,i.useEffect)((()=>{const e=()=>{n(jQuery(t).hasClass("closed"))};return jQuery(t).find("div.postbox-header").on("click",e),()=>{jQuery(t).find("div.postbox-header").off("click",e)}}),[]),jQuery(t).find("button.handlediv").on("click",(()=>{n(jQuery(t).hasClass("closed"))})),(0,r.createElement)(i.Fragment,null,!s&&e)};s.propTypes={children:u().node.isRequired},(0,i.render)((0,r.createElement)(s,null,(0,r.createElement)(_e,{suggester:e,location:"classic-sidebar"})),t.getElementsByClassName("inside")[0])})(s),s}(s));const f=new Zt,b=new is;ks()&&jQuery(window).on("YoastSEO:numericScore",(()=>{b.analyze(s.getState(),s.dispatch)})),s.subscribe((()=>{const e=s.getState();p!==e.synonyms&&(p=e.synonyms,YoastSEO.app.refresh()),f.persist(e);const t=is.getRelevantData(e);is.shouldAnalyze(t,y)&&(y=t,b.analyze(e,s.dispatch))})),YoastSEO.app.registerCustomDataCallback((()=>({synonyms:s.getState().synonyms}))),function(e,t){const s={isRtl:us().isRtl};if(as()){const{registerPlugin:n}=wp.plugins;n("yoast-seo-premium",{render:()=>(0,r.createElement)(i.Fragment,null,(0,r.createElement)(o.Fill,{name:"YoastSidebar"},(0,r.createElement)(Ss,{key:"warning-premium",renderPriority:1,store:e,theme:s}),ks()&&(0,r.createElement)(Es,{key:"related-keywords",renderPriority:22,store:e,theme:s,location:"sidebar"}),h()&&t&&(0,r.createElement)(cs,{key:"link-suggestions",renderPriority:24},(0,r.createElement)(ys,{store:e,theme:s,location:"sidebar"},(0,r.createElement)(ms,{id:"yoast-linking-suggestions-collapsible-sidebar",title:(0,a.__)("Internal linking suggestions","wordpress-seo-premium")},(0,r.createElement)(_e,{suggester:t,location:"block-sidebar"}))))),(0,r.createElement)(o.Fill,{name:"YoastMetabox"},ks()&&(0,r.createElement)(Es,{key:"related-keywords",renderPriority:21,store:e,theme:s,location:"metabox"}),(0,r.createElement)(Ss,{renderPriority:1,store:e,theme:s}),h()&&t&&(0,r.createElement)(cs,{key:"link-suggestions",renderPriority:25},(0,r.createElement)(ys,{store:e,theme:s,location:"metabox"},(0,r.createElement)(gs,{id:"yoast-linking-suggestions-collapsible-metabox",title:(0,a.__)("Internal linking suggestions","wordpress-seo-premium")},(0,r.createElement)(_e,{suggester:t,location:"block-metabox"}))))),(0,r.createElement)(bs,{store:e,theme:s}),(0,r.createElement)(o.Fill,{name:"YoastRelatedKeyphrases"},(0,r.createElement)(Ve,null)),(0,l.isFeatureEnabled)("TEXT_FORMALITY")&&(0,r.createElement)(o.Fill,{name:"YoastTextFormalityMetabox"},(0,r.createElement)(S,null)),(0,l.isFeatureEnabled)("TEXT_FORMALITY")&&(0,r.createElement)(o.Fill,{name:"YoastTextFormalitySidebar"},(0,r.createElement)(S,null)),!!hs.workoutsUrl&&(0,r.createElement)(g,{link:hs.workoutsUrl}))})}else YoastSEO._registerReactComponent("yoast-seo-premium",(()=>(0,r.createElement)(i.Fragment,null,(0,r.createElement)(o.Fill,{name:"YoastMetabox"},ks()&&(0,r.createElement)(Es,{key:"related-keywords",renderPriority:21,store:e,theme:s,location:"metabox"}),(0,r.createElement)(Ss,{key:"warning-premium",renderPriority:1,store:e,theme:s}),h()&&t&&!ws()&&(0,r.createElement)(cs,{key:"link-suggestions",renderPriority:25},(0,r.createElement)(ys,{store:e,theme:s,location:"metabox"},(0,r.createElement)(gs,{id:"yoast-linking-suggestions-collapsible-classic-metabox",title:(0,a.__)("Internal linking suggestions","wordpress-seo-premium")},(0,r.createElement)(_e,{suggester:t,location:"classic-metabox"}))))),(0,r.createElement)(bs,{store:e,theme:s}),(0,r.createElement)(o.Fill,{name:"YoastRelatedKeyphrases"},(0,r.createElement)(Ve,{store:e})),(0,l.isFeatureEnabled)("TEXT_FORMALITY")&&(0,r.createElement)(o.Fill,{name:"YoastTextFormalityMetabox"},(0,r.createElement)(S,null)),!!hs.workoutsUrl&&(0,r.createElement)(g,{link:hs.workoutsUrl}))))}(s,m),function(e){const t=w();if(!yoast.analysis.helpers.getLanguagesWithWordFormSupport().includes(t))return;const s=e.dispatch.bind(e);s(P()),new ns({siteUrl:hs.licensedURL,language:t,setError:e=>{s(I(e))}}).injectMorphologyData()}(s),YoastSEO.app.refresh()};window.jQuery((function(){window.jQuery(window).on("YoastSEO:ready",(()=>{var e,t;if(window.wpseoPremiumMetaboxData)try{vs(),e=window.wpseoPremiumJSL10n,YoastSEO.analysis.worker.initialize({translations:e}),(0,l.isFeatureEnabled)("TEXT_FORMALITY")&&(t=window.wpseoPremiumMetaboxData.data.textFormalityScriptUrl,"undefined"!=typeof YoastSEO&&void 0!==YoastSEO.analysis&&void 0!==YoastSEO.analysis.worker&&YoastSEO.analysis.worker.loadScript(t).then((0,k.dispatch)("yoast-seo/editor").runAnalysis)),function(e,t={}){if("undefined"==typeof YoastSEO||void 0===YoastSEO.analysis||void 0===YoastSEO.analysis.worker)return;const s=YoastSEO.analysis.worker;s.loadScript(e).then((()=>s.sendMessage("initialize",{options:t},"YoastSEOPremium")))}(window.wpseoPremiumMetaboxData.data.premiumAssessmentsScriptUrl,{isTitleAssessmentAvailable:window.wpseoPremiumMetaboxData.data.isTitleAssessmentAvailable,isTextAlignmentAssessmentAvailable:as(),language:w()})}catch(e){console.error(e)}}))}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-quickedit-notification-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-quickedit-notification-2290.min.js new file mode 100644 index 00000000..29cd3b3e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-quickedit-notification-2290.min.js @@ -0,0 +1 @@ +(()=>{var e={368:(e,t,r)=>{"use strict";r.r(t),r.d(t,{ALLOW_EMPTY_TARGET:()=>i,wpseoCreateRedirect:()=>u,wpseoDeleteRedirect:()=>a,wpseoRemoveNotification:()=>s,wpseoUndoRedirect:()=>c,wpseoUndoRedirectByObjectId:()=>p,wpseoUndoRedirectForObject:()=>d});var o=r(455),n=r.n(o);const i=[410,451];function a(e,t,r,o="plain"){return n()({method:"POST",url:wpApiSettings.root+"yoast/v1/redirects/delete",headers:{"X-WP-Nonce":wpApiSettings.nonce},data:{origin:e,target:t,type:r,format:o}})}function d(e,t){return n()({method:"POST",url:wpApiSettings.root+"yoast/v1/redirects/undo-for-object",headers:{"X-WP-Nonce":wpApiSettings.nonce},data:{obj_id:e,obj_type:t}})}function s(e){jQuery(e).closest(".yoast-notification").fadeOut("slow")}function c(e,t,r,o,n){a(e,t,r).then((e=>{!0===e.success&&s(n)}))}function p(e,t,r){d(e,t).then((e=>{!0===e.success&&s(r)}))}function u(e,t,r,o){var n="";410===parseInt(t,10)||""!==(n=window.prompt(wpseoPremiumStrings.enter_new_url.replace("%s",e)))?jQuery.post(ajaxurl,{action:"wpseo_add_redirect_plain",ajax_nonce:r,redirect:{origin:e,target:n,type:t}},(function(e){var r=jQuery(o).closest(".yoast-notification");if(jQuery(r).removeClass("updated").removeClass("error"),jQuery(r).find(".redirect_error").remove(),e.error)jQuery(r).addClass("error").prepend('

      '+e.error.message+"

      ");else{var n="";n=(n=410===parseInt(t,10)?_.escape(wpseoPremiumStrings.redirect_saved_no_target):wpseoPremiumStrings.redirect_saved.replace("%2$s",""+_.escape(e.target)+"")).replace("%1$s",""+_.escape(e.origin)+""),jQuery(r).addClass("updated").html("

      "+n+"

      ")}}),"json"):window.alert(wpseoPremiumStrings.error_new_url)}},455:e=>{"use strict";e.exports=window.wp.apiFetch}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e=r(368),t=0;function o(){jQuery.post(ajaxurl,{action:"yoast_get_notifications"},(function(e){if(""!==e){var r=jQuery(".wrap").children().eq(0);jQuery(e).insertAfter(r),t=0}t<20&&""===e&&(t++,setTimeout(o,500))}))}function n(){return jQuery(location).attr("pathname").split("/").pop()}function i(e){return"edit-tags.php"===(e=e||n())?"slug":"post_name"}function a(){return jQuery("tr.inline-editor")}function d(){var e=a();return 0===e.length||""===e?"":e.attr("id").replace("edit-","")}function s(){var e=d(),t=i();return jQuery("#inline_"+e).find("."+t).html()}function c(){var e=a(),t=i();return s()!==e.find("input[name="+t+"]").val()}function p(e){13===e.which&&c()&&o()}function u(e){"save-order"!==jQuery(e.target).attr("id")&&c()&&o()}window.wpseoShowNotification=o,window.wpseoGetCurrentPage=n,window.wpseoGetActiveEditor=a,window.wpseoGetItemId=d,window.wpseoGetCurrentSlug=s,window.wpseoSlugChanged=c,window.wpseoHandleKeyEvents=p,window.wpseoHandleButtonEvents=u,window.wpseoUndoRedirect=e.wpseoUndoRedirect,window.wpseoUndoRedirectByObjectId=e.wpseoUndoRedirectByObjectId,window.wpseoCreateRedirect=e.wpseoCreateRedirect,window.wpseoRemoveNotification=e.wpseoRemoveNotification,jQuery((function(){var e=n();["edit.php","edit-tags.php"].includes(e)&&(jQuery("#inline-edit input").on("keydown",(function(e){p(e)})),jQuery(".button-primary").on("click",(function(e){u(e)}))),"edit-tags.php"===e&&jQuery(document).on("ajaxComplete",(function(e,t,r){"string"==typeof r.data&&r.data.indexOf("action=delete-tag")>-1&&o()}))}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-2290.min.js new file mode 100644 index 00000000..e538607c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return e.d(t,{a:t}),t},d:(r,t)=>{for(var o in t)e.o(t,o)&&!e.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:t[o]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r)};const r=window.wp.apiFetch;var t=e.n(r);function o(e,r,o,n="plain"){return t()({method:"POST",url:wpApiSettings.root+"yoast/v1/redirects/delete",headers:{"X-WP-Nonce":wpApiSettings.nonce},data:{origin:e,target:r,type:o,format:n}})}function n(e){jQuery(e).closest(".yoast-notification").fadeOut("slow")}window.wpseoUndoRedirect=function(e,r,t,i,s){o(e,r,t).then((e=>{!0===e.success&&n(s)}))},window.wpseoUndoRedirectByObjectId=function(e,r,o){(function(e,r){return t()({method:"POST",url:wpApiSettings.root+"yoast/v1/redirects/undo-for-object",headers:{"X-WP-Nonce":wpApiSettings.nonce},data:{obj_id:e,obj_type:r}})})(e,r).then((e=>{!0===e.success&&n(o)}))},window.wpseoCreateRedirect=function(e,r,t,o){var n="";410===parseInt(r,10)||""!==(n=window.prompt(wpseoPremiumStrings.enter_new_url.replace("%s",e)))?jQuery.post(ajaxurl,{action:"wpseo_add_redirect_plain",ajax_nonce:t,redirect:{origin:e,target:n,type:r}},(function(e){var t=jQuery(o).closest(".yoast-notification");if(jQuery(t).removeClass("updated").removeClass("error"),jQuery(t).find(".redirect_error").remove(),e.error)jQuery(t).addClass("error").prepend('

      '+e.error.message+"

      ");else{var n="";n=(n=410===parseInt(r,10)?_.escape(wpseoPremiumStrings.redirect_saved_no_target):wpseoPremiumStrings.redirect_saved.replace("%2$s",""+_.escape(e.target)+"")).replace("%1$s",""+_.escape(e.origin)+""),jQuery(t).addClass("updated").html("

      "+n+"

      ")}}),"json"):window.alert(wpseoPremiumStrings.error_new_url)},window.wpseoDeleteRedirect=o,window.wpseoRemoveNotification=n})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-gutenberg-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-gutenberg-2290.min.js new file mode 100644 index 00000000..deee13ba --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/wp-seo-premium-redirect-notifications-gutenberg-2290.min.js @@ -0,0 +1,4 @@ +(()=>{"use strict";var e={865:(e,t,n)=>{var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=a(n(609)),i=a(n(848)),s=a(n(812));function a(e){return e&&e.__esModule?e:{default:e}}var c=void 0;function l(e,t){var n,s,a,u,p,d,f,h,m=[],v={};for(d=0;d "+c);if("componentClose"===p.type)throw new Error("Missing opening component token: `"+p.value+"`");if("componentOpen"===p.type){n=t[p.value],a=d;break}m.push(t[p.value])}else m.push(p.value);return n&&(u=function(e,t){var n,o,r=t[e],i=0;for(o=e+1;o{function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},848:(e,t,n)=>{var o=n(609),r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,i=n(650),s=n(163),a=n(759),c=".",l=":",u="function"==typeof Symbol&&Symbol.iterator,p="@@iterator";function d(e,t){return e&&"object"==typeof e&&null!=e.key?(n=e.key,o={"=":"=0",":":"=2"},"$"+(""+n).replace(/[=:]/g,(function(e){return o[e]}))):t.toString(36);var n,o}function f(e,t,n,o){var i,a=typeof e;if("undefined"!==a&&"boolean"!==a||(e=null),null===e||"string"===a||"number"===a||"object"===a&&e.$$typeof===r)return n(o,e,""===t?c+d(e,0):t),1;var h=0,m=""===t?c:t+l;if(Array.isArray(e))for(var v=0;v{function t(e){return function(){return e}}var n=function(){};n.thatReturns=t,n.thatReturnsFalse=t(!1),n.thatReturnsTrue=t(!0),n.thatReturnsNull=t(null),n.thatReturnsThis=function(){return this},n.thatReturnsArgument=function(e){return e},e.exports=n},163:e=>{e.exports=function(e,t,n,o,r,i,s,a){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,o,r,i,s,a],u=0;(c=new Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},759:(e,t,n)=>{var o=n(650);e.exports=o},609:e=>{e.exports=window.React}},t={};function n(o){var r=t[o];if(void 0!==r)return r.exports;var i=t[o]={exports:{}};return e[o](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e=n(609);const t=window.wp.components,o=window.wp.element,r=window.wp.i18n,i=window.yoast.helpers;var s=n(865);const a=window.yoast.propTypes;var c=n.n(a);const l=window.wp.apiFetch;var u=n.n(l);function p(e){return(t,n)=>{if(void 0===t.method||"GET"===t.method)return n(t);const o=void 0===t.parse||t.parse;return n({...t,parse:!1}).then((t=>{let n=null;return t.headers&&"function"==typeof t.headers.get&&(n=t.headers.get("X-Yoast-Redirect-Created")),n&&e(n),t.json&&o?t.json():t})).catch((e=>function(e,t=!0){if(!t)throw e;return(e=>{const t={code:"invalid_json",message:(0,r.__)("The response is not a valid JSON response.")};if(!e||!e.json)throw t;return e.json().catch((()=>{throw t}))})(e).then((e=>{const t={code:"unknown_error",message:(0,r.__)("An unknown error occurred.")};throw e||t}))}(e,o)))}}const d=[];let f=!1;function h(e){var t;t=e.split(";").map((e=>e.split("=").map((e=>e.trim())))).reduce(((e,t)=>{const n=t[0],o=t[1]||!0;return e[n]=o,e}),{}),d.forEach((e=>e(t)))}const m=(0,i.makeOutboundLink)(),v=({href:t,children:n})=>(0,e.createElement)(m,{href:t},n);v.defaultProps={children:""},v.propTypes={href:c().string.isRequired,children:c().string};class y extends o.Component{constructor(){super(),this.state={open:!1,loading:!1,parsedHeader:null},this.close=this.close.bind(this),this.undoRedirect=this.undoRedirect.bind(this)}render(){return this.state.open?(0,e.createElement)(t.Modal,{title:(0,r.__)("Redirect created","wordpress-seo-premium"),onRequestClose:this.close,className:"yoast-redirect-notification-modal"},(0,e.createElement)("p",null,(0,r.sprintf)(/* translators: %s expands to Yoast SEO Premium */ /* translators: %s expands to Yoast SEO Premium */ +(0,r.__)("%s just created a redirect from the old URL to the new URL.","wordpress-seo-premium"),"Yoast SEO Premium")),(0,e.createElement)("p",{className:"yoast-redirect-notification-modal-url"},(0,s.A)({mixedString:(0,r.sprintf)(/* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ /* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ +(0,r.__)("Old URL: {{link}}%s{{/link}}","wordpress-seo-premium"),`${window.location.origin}/${this.state.parsedHeader.origin}`),components:{link:(0,e.createElement)(v,{href:"/"+this.state.parsedHeader.origin})}})),(0,e.createElement)("p",{className:"yoast-redirect-notification-modal-url"},(0,s.A)({mixedString:(0,r.sprintf)(/* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ /* translators: {{link}}%s{{/link}} expands to a URL surrounded by anchor tags */ +(0,r.__)("New URL: {{link}}%s{{/link}}","wordpress-seo-premium"),`${window.location.origin}/${this.state.parsedHeader.target}`),components:{link:(0,e.createElement)(v,{href:"/"+this.state.parsedHeader.target})}})),(0,e.createElement)("div",{className:"yoast-redirect-notification-modal-buttons"},(0,e.createElement)(t.Button,{className:"yoast-redirect-notification-modal-button",onClick:this.close,isPrimary:!0,disabled:this.state.loading},(0,r.__)("OK","wordpress-seo-premium")),(0,e.createElement)(t.Button,{className:"yoast-redirect-notification-modal-button",onClick:this.undoRedirect,isLink:!0,isDestructive:!0,isBusy:this.state.loading,disabled:this.state.loading},(0,r.__)("Undo","wordpress-seo-premium")))):null}undoRedirect(){const{objectId:e,objectType:t}=this.state.parsedHeader;this.setState({loading:!0},(()=>{(function(e,t){return u()({method:"POST",url:wpApiSettings.root+"yoast/v1/redirects/undo-for-object",headers:{"X-WP-Nonce":wpApiSettings.nonce},data:{obj_id:e,obj_type:t}})})(e,t).then((()=>{this.close()}))}))}close(){this.setState({open:!1,loading:!1,parsedHeader:null})}componentDidMount(){!function(e){if(!f){const e=p(h);u().use(e),f=!0}d.push(e)}((e=>{this.setState({open:!0,parsedHeader:e})}))}}const g=y;wp.plugins.registerPlugin("yoast-redirect-notification",{render:g})})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-prominent-words-indexation-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-prominent-words-indexation-2290.min.js new file mode 100644 index 00000000..76ab79e0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-prominent-words-indexation-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";const e=window.lodash,n=window.yoast.analysis,t=class{static create(e){return new window.yoast.Researcher.default(e)}},o="22.9",{doAjaxRequest:i}=window.yoast.editorModules.helpers.ajaxHelper;let r=!1;function s(){return r}function a(e,o){const r=[];return e.forEach((e=>{const i=function(e,n){const o=t.create(e),i=s();return i&&o.addResearchData("morphology",i),function(e){const n={};return e.forEach((function(e){n[e.getStem()]=e.getOccurrences()})),n}(o.getResearch("getProminentWordsForInternalLinking").prominentWords.slice(0,void 0))}(new n.Paper(e.content,{keyword:e.meta.primary_focus_keyword||"",synonyms:e.meta.keyphrase_synonyms||"",title:e.meta.title||"",description:e.meta.description||"",locale:o.locale||"en_US"}));r.push({object_id:e.object_id,object_type:e.object_type,prominent_words:i})})),i("POST",`${o.restApi.root}${o.prominentWords.endpoint}`,o.restApi.nonce,{data:r})}async function c(n){let t=s();if(t||!n.morphologySupported)return Promise.resolve();const a=function(e){const n={en:"v5",de:"v10",es:"v10",fr:"v11",it:"v10",nl:"v9",ru:"v10",id:"v9",pt:"v9",pl:"v9",ar:"v9",sv:"v1",he:"v1",hu:"v2",nb:"v1",tr:"v1",cs:"v1",sk:"v1",el:"v1",ja:"v1"};return!!Object.keys(n).includes(e)&&`https://my.yoast.com/api/downloads/file/morphology-${e}-${n[e]}`}(n.language||"en");if(!1===a)return Promise.resolve();const c=(0,e.get)(window,"wpseoPremiumIndexationData.licensedURL","");return t=await i("GET",a,null,{plugin_version:o,site:c}),function(e){r=e}(t),Promise.resolve(t)}jQuery((()=>{window.yoast=window.yoast||{},window.yoast.indexing=window.yoast.indexing||{},"function"==typeof window.yoast.indexing.registerPreIndexingAction&&window.yoast.indexing.registerPreIndexingAction("get_content",c),"function"==typeof window.yoast.indexing.registerIndexingAction&&window.yoast.indexing.registerIndexingAction("get_content",a)}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-social-metadata-previews-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-social-metadata-previews-2290.min.js new file mode 100644 index 00000000..a3574421 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast-premium-social-metadata-previews-2290.min.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:i=>{var a=i&&i.__esModule?()=>i.default:()=>i;return e.d(a,{a}),a},d:(i,a)=>{for(var l in a)e.o(a,l)&&!e.o(i,l)&&Object.defineProperty(i,l,{enumerable:!0,get:a[l]})},o:(e,i)=>Object.prototype.hasOwnProperty.call(e,i)};const i=window.React,a=window.wp.plugins,l=window.wp.components,r=window.wp.element,t=window.wp.i18n,n=window.yoast["social-metadata-previews"],o=window.yoast.propTypes;var c=e.n(o);const{applyReplaceUsingPlugin:s}=window.yoast.editorModules.helpers.replacementVariableHelpers,m=e=>{const{recommendedReplacementVariables:a,replacementVariables:l,description:r,descriptionInputPlaceholder:o,title:c,titleInputPlaceholder:m,onSelectImageClick:p,onRemoveImageClick:d,onDescriptionChange:g,onTitleChange:u,onReplacementVariableSearchChange:b,imageWarnings:w,imageUrl:P,imageFallbackUrl:h,isPremium:R,siteUrl:v,descriptionPreviewFallback:k,titlePreviewFallback:C,location:I,activeMetaTabId:F,alt:y}=e,U=(0,t.__)("Social share preview","wordpress-seo-premium");return(0,i.createElement)(n.SocialPreviewEditor,{socialMediumName:"Social",isPremium:R,recommendedReplacementVariables:a,replacementVariables:l,description:r,descriptionInputPlaceholder:o,descriptionPreviewFallback:k,title:c,titleInputPlaceholder:m,titlePreviewFallback:C,onSelectImageClick:p,onRemoveImageClick:d,onDescriptionChange:g,onTitleChange:u,imageWarnings:w,imageUrl:P,imageFallbackUrl:h,siteUrl:v,applyReplacementVariables:s,onReplacementVariableSearchChange:b,socialPreviewLabel:U,idSuffix:I,activeMetaTabId:F,alt:y})};m.propTypes={recommendedReplacementVariables:c().array.isRequired,replacementVariables:c().array.isRequired,description:c().string,title:c().string,onSelectImageClick:c().func.isRequired,onRemoveImageClick:c().func.isRequired,onDescriptionChange:c().func.isRequired,onTitleChange:c().func.isRequired,onReplacementVariableSearchChange:c().func,imageWarnings:c().array,imageUrl:c().string.isRequired,imageFallbackUrl:c().string.isRequired,isPremium:c().bool.isRequired,siteUrl:c().string,descriptionInputPlaceholder:c().string,titleInputPlaceholder:c().string,descriptionPreviewFallback:c().string,titlePreviewFallback:c().string,location:c().string,activeMetaTabId:c().string,alt:c().string},m.defaultProps={imageWarnings:[],title:null,titleInputPlaceholder:"",description:null,descriptionInputPlaceholder:"",descriptionPreviewFallback:"",titlePreviewFallback:"",siteUrl:"",location:"",activeMetaTabId:"",alt:"",onReplacementVariableSearchChange:null};const p=m,{applyReplaceUsingPlugin:d}=window.yoast.editorModules.helpers.replacementVariableHelpers,g=e=>{const{recommendedReplacementVariables:a,replacementVariables:l,description:r,descriptionInputPlaceholder:o,title:c,titleInputPlaceholder:s,onSelectImageClick:m,onRemoveImageClick:p,onDescriptionChange:g,onTitleChange:u,onReplacementVariableSearchChange:b,imageWarnings:w,imageUrl:P,imageFallbackUrl:h,isPremium:R,isLarge:v,siteUrl:k,descriptionPreviewFallback:C,titlePreviewFallback:I,location:F,alt:y}=e,U=(0,t.__)("X share preview","wordpress-seo-premium");return(0,i.createElement)(n.SocialPreviewEditor,{socialMediumName:"X",isPremium:R,recommendedReplacementVariables:a,replacementVariables:l,description:r,descriptionInputPlaceholder:o,descriptionPreviewFallback:C,title:c,titleInputPlaceholder:s,titlePreviewFallback:I,onSelectImageClick:m,onRemoveImageClick:p,onDescriptionChange:g,onTitleChange:u,onReplacementVariableSearchChange:b,imageWarnings:w,imageUrl:P,imageFallbackUrl:h,isLarge:v,siteUrl:k,applyReplacementVariables:d,socialPreviewLabel:U,idSuffix:F,alt:y})};g.propTypes={recommendedReplacementVariables:c().array.isRequired,replacementVariables:c().array.isRequired,description:c().string,title:c().string,onSelectImageClick:c().func.isRequired,onRemoveImageClick:c().func.isRequired,onDescriptionChange:c().func.isRequired,onTitleChange:c().func.isRequired,onReplacementVariableSearchChange:c().func,imageWarnings:c().array,imageUrl:c().string,imageFallbackUrl:c().string,isPremium:c().bool.isRequired,isLarge:c().bool,siteUrl:c().string,descriptionInputPlaceholder:c().string,titleInputPlaceholder:c().string,descriptionPreviewFallback:c().string,titlePreviewFallback:c().string,location:c().string,alt:c().string},g.defaultProps={imageWarnings:[],title:null,description:null,isLarge:!0,siteUrl:"",descriptionInputPlaceholder:"",descriptionPreviewFallback:"",titleInputPlaceholder:"",titlePreviewFallback:"",imageUrl:"",imageFallbackUrl:"",location:"",alt:"",onReplacementVariableSearchChange:null};const u=g,b=window.yoast.editorModules.helpers.isBlockEditor,w=()=>(0,i.createElement)(r.Fragment,null,(0,i.createElement)(l.Fill,{name:"YoastFacebookPremiumMetabox"},(e=>(0,i.createElement)(p,{...e}))),(0,i.createElement)(l.Fill,{name:"YoastFacebookPremiumModal"},(e=>(0,i.createElement)(p,{...e}))),(0,i.createElement)(l.Fill,{name:"YoastTwitterPremiumMetabox"},(e=>(0,i.createElement)(u,{...e}))),(0,i.createElement)(l.Fill,{name:"YoastTwitterPremiumModal"},(e=>(0,i.createElement)(u,{...e}))));jQuery(window).on("YoastSEO:ready",(()=>{b()?(0,a.registerPlugin)("yoast-seo-premium-social-previews",{render:w}):YoastSEO._registerReactComponent("yoast-seo-premium-social-previews",w)}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast/social-metadata-previews-2290.min.js b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast/social-metadata-previews-2290.min.js new file mode 100644 index 00000000..1a3961db --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/assets/js/dist/yoast/social-metadata-previews-2290.min.js @@ -0,0 +1,211 @@ +(()=>{"use strict";var e={140:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.logOnce=t.createObjectWrapper=void 0;var o=i(87);const a={};t.logOnce=(e,t,{log:i=console.warn}={})=>{a[e]||(a[e]=!0,i(t))},t.createObjectWrapper=(e,t=o.noop)=>{const i={};for(const o in e)Object.hasOwn(e,o)&&Object.defineProperty(i,o,{set:i=>{e[o]=i,t("set",o,i)},get:()=>(t("get",o),e[o])});return i}},897:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TWITTER_IMAGE_SIZES=t.FACEBOOK_IMAGE_SIZES=void 0,t.determineFacebookImageMode=function(e){(0,o.logOnce)("@yoast/social-metadata-previews/determineFacebookImageMode","[@yoast/social-metadata-previews] 'determineFacebookImageMode' is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.");const{largeThreshold:t}=a;return e.height>e.width?"portrait":e.width(0,o.logOnce)(`@yoast/social-metadata-previews/TWITTER_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "TWITTER_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`)));const a=t.FACEBOOK_IMAGE_SIZES=(0,o.createObjectWrapper)({squareWidth:158,squareHeight:158,landscapeWidth:527,landscapeHeight:273,portraitWidth:158,portraitHeight:237,aspectRatio:52.2,largeThreshold:{width:446,height:233}},((e,t)=>(0,o.logOnce)(`@yoast/social-metadata-previews/FACEBOOK_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "FACEBOOK_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`)))},442:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(554),a=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=u(t);if(i&&i.has(e))return i.get(e);var o={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var n=a?Object.getOwnPropertyDescriptor(e,r):null;n&&(n.get||n.set)?Object.defineProperty(o,r,n):o[r]=e[r]}return o.default=e,i&&i.set(e,o),o}(i(609)),r=c(i(802)),n=i(379),s=c(i(751)),l=c(i(333)),d=i(547);function c(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(u=function(e){return e?i:t})(e)}class p extends a.Component{constructor(e){super(e),this.state={activeField:"",hoveredField:""},this.SocialPreview="Social"===e.socialMediumName?s.default:l.default,this.setHoveredField=this.setHoveredField.bind(this),this.setActiveField=this.setActiveField.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.setEditorFocus=this.setEditorFocus.bind(this)}setHoveredField(e){e!==this.state.hoveredField&&this.setState({hoveredField:e})}setActiveField(e){e!==this.state.activeField&&this.setState({activeField:e},(()=>this.setEditorFocus(e)))}setEditorFocus(e){switch(e){case"title":this.titleEditorRef.focus();break;case"description":this.descriptionEditorRef.focus()}}setEditorRef(e,t){switch(e){case"title":this.titleEditorRef=t;break;case"description":this.descriptionEditorRef=t}}render(){const{onDescriptionChange:e,onTitleChange:t,onSelectImageClick:i,onRemoveImageClick:r,socialMediumName:s,imageWarnings:l,siteUrl:d,description:c,descriptionInputPlaceholder:u,descriptionPreviewFallback:p,imageUrl:f,imageFallbackUrl:h,alt:g,title:m,titleInputPlaceholder:b,titlePreviewFallback:v,replacementVariables:w,recommendedReplacementVariables:E,applyReplacementVariables:M,onReplacementVariableSearchChange:x,isPremium:_,isLarge:I,socialPreviewLabel:y,idSuffix:S,activeMetaTabId:O}=this.props,k=M({title:m||v,description:c||p});return a.default.createElement(a.default.Fragment,null,y&&a.default.createElement(o.SimulatedLabel,null,y),a.default.createElement(this.SocialPreview,{onMouseHover:this.setHoveredField,onSelect:this.setActiveField,onImageClick:i,siteUrl:d,title:k.title,description:k.description,imageUrl:f,imageFallbackUrl:h,alt:g,isLarge:I,activeMetaTabId:O}),a.default.createElement(n.SocialMetadataPreviewForm,{onDescriptionChange:e,socialMediumName:s,title:m,titleInputPlaceholder:b,onRemoveImageClick:r,imageSelected:!!f,imageUrl:f,onTitleChange:t,onSelectImageClick:i,description:c,descriptionInputPlaceholder:u,imageWarnings:l,replacementVariables:w,recommendedReplacementVariables:E,onReplacementVariableSearchChange:x,onMouseHover:this.setHoveredField,hoveredField:this.state.hoveredField,onSelect:this.setActiveField,activeField:this.state.activeField,isPremium:_,setEditorRef:this.setEditorRef,idSuffix:S}))}}p.propTypes={title:r.default.string.isRequired,onTitleChange:r.default.func.isRequired,description:r.default.string.isRequired,onDescriptionChange:r.default.func.isRequired,imageUrl:r.default.string.isRequired,imageFallbackUrl:r.default.string.isRequired,onSelectImageClick:r.default.func.isRequired,onRemoveImageClick:r.default.func.isRequired,socialMediumName:r.default.string.isRequired,alt:r.default.string,isPremium:r.default.bool,imageWarnings:r.default.array,isLarge:r.default.bool,siteUrl:r.default.string,descriptionInputPlaceholder:r.default.string,titleInputPlaceholder:r.default.string,descriptionPreviewFallback:r.default.string,titlePreviewFallback:r.default.string,replacementVariables:d.replacementVariablesShape,recommendedReplacementVariables:d.recommendedReplacementVariablesShape,applyReplacementVariables:r.default.func,onReplacementVariableSearchChange:r.default.func,socialPreviewLabel:r.default.string,idSuffix:r.default.string,activeMetaTabId:r.default.string},p.defaultProps={imageWarnings:[],recommendedReplacementVariables:[],replacementVariables:[],isPremium:!1,isLarge:!0,siteUrl:"",descriptionInputPlaceholder:"",titleInputPlaceholder:"",descriptionPreviewFallback:"",titlePreviewFallback:"",alt:"",applyReplacementVariables:e=>e,onReplacementVariableSearchChange:null,socialPreviewLabel:"",idSuffix:"",activeMetaTabId:""},t.default=p},553:(e,t,i)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const a=((o=i(679))&&o.__esModule?o:{default:o}).default.p` + line-height: ${16}px; + min-height : ${16}px; + color: #606770; + font-size: 14px; + padding: 0; + text-overflow: ellipsis; + margin: 3px 0 0 0; + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; + + @media all and ( max-width: ${e=>e.maxWidth} ) { + display: none; + } +`;t.default=a},2:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=f(t);if(i&&i.has(e))return i.get(e);var o={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var n=a?Object.getOwnPropertyDescriptor(e,r):null;n&&(n.get||n.set)?Object.defineProperty(o,r,n):o[r]=e[r]}return o.default=e,i&&i.set(e,o),o}(i(609)),a=p(i(679)),r=p(i(802)),n=i(723),s=i(87),l=i(379),d=i(495),c=i(566),u=i(737);function p(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(f=function(e){return e?i:t})(e)}const h=a.default.div` + position: relative; + ${e=>"landscape"===e.mode?`max-width: ${e.dimensions.width}`:`min-width: ${e.dimensions.width}; height: ${e.dimensions.height}`}; + overflow: hidden; + background-color: ${d.colors.$color_white}; +`,g=a.default.div` + box-sizing: border-box; + max-width: ${l.FACEBOOK_IMAGE_SIZES.landscapeWidth}px; + height: ${l.FACEBOOK_IMAGE_SIZES.landscapeHeight}px; + background-color: ${d.colors.$color_grey}; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + display: flex; + justify-content: center; + align-items: center; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class m extends o.Component{constructor(e){super(e),this.state={imageProperties:null,status:"loading"},this.socialMedium="Facebook",this.handleFacebookImage=this.handleFacebookImage.bind(this),this.setState=this.setState.bind(this)}async handleFacebookImage(){try{const e=await(0,u.handleImage)(this.props.src,this.socialMedium);this.setState(e),this.props.onImageLoaded(e.imageProperties.mode||"landscape")}catch(e){this.setState(e),this.props.onImageLoaded("landscape")}}componentDidUpdate(e){e.src!==this.props.src&&this.handleFacebookImage()}componentDidMount(){this.handleFacebookImage()}retrieveContainerDimensions(e){switch(e){case"square":return{height:l.FACEBOOK_IMAGE_SIZES.squareHeight+"px",width:l.FACEBOOK_IMAGE_SIZES.squareWidth+"px"};case"portrait":return{height:l.FACEBOOK_IMAGE_SIZES.portraitHeight+"px",width:l.FACEBOOK_IMAGE_SIZES.portraitWidth+"px"};case"landscape":return{height:l.FACEBOOK_IMAGE_SIZES.landscapeHeight+"px",width:l.FACEBOOK_IMAGE_SIZES.landscapeWidth+"px"}}}render(){const{imageProperties:e,status:t}=this.state;if("loading"===t||""===this.props.src||"errored"===t)return o.default.createElement(g,{onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,n.__)("Select image","wordpress-seo"));const i=this.retrieveContainerDimensions(e.mode);return o.default.createElement(h,{mode:e.mode,dimensions:i,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave,onClick:this.props.onImageClick},o.default.createElement(c.SocialImage,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:l.FACEBOOK_IMAGE_SIZES.aspectRatio},width:e.width,height:e.height,imageMode:e.mode}))}}m.propTypes={src:r.default.string,alt:r.default.string,onImageLoaded:r.default.func,onImageClick:r.default.func,onMouseEnter:r.default.func,onMouseLeave:r.default.func},m.defaultProps={src:"",alt:"",onImageLoaded:s.noop,onImageClick:s.noop,onMouseEnter:s.noop,onMouseLeave:s.noop},t.default=m},751:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=p(i(609)),a=c(i(802)),r=c(i(679)),n=c(i(887)),s=c(i(2)),l=p(i(741)),d=c(i(553));function c(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(u=function(e){return e?i:t})(e)}function p(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=u(t);if(i&&i.has(e))return i.get(e);var o={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var n=a?Object.getOwnPropertyDescriptor(e,r):null;n&&(n.get||n.set)?Object.defineProperty(o,r,n):o[r]=e[r]}return o.default=e,i&&i.set(e,o),o}const f=e=>{switch(e){case"landscape":return"527px";case"square":case"portrait":return"369px";default:return"476px"}},h=r.default.div` + box-sizing: border-box; + display: flex; + flex-direction: ${e=>"landscape"===e.mode?"column":"row"}; + background-color: #f2f3f5; + max-width: 527px; +`,g=r.default.div` + box-sizing: border-box; + background-color: #f2f3f5; + margin: 0; + padding: 10px 12px; + position: relative; + border-bottom: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-top: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-right: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border: ${e=>"landscape"===e.mode?"1px solid #dddfe2":""}; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: ${e=>"landscape"===e.mode?"flex-start":"center"}; + font-size: 12px; + overflow: hidden; +`;class m extends o.Component{constructor(e){super(e),this.state={imageMode:null,maxLineCount:0,descriptionLineCount:0},this.facebookTitleRef=o.default.createRef(),this.onImageLoaded=this.onImageLoaded.bind(this),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}onImageLoaded(e){this.setState({imageMode:e})}getTitleLineCount(){return this.facebookTitleRef.current.offsetHeight/l.facebookTitleLineHeight}maybeSetMaxLineCount(){const{imageMode:e,maxLineCount:t}=this.state,i="landscape"===e?2:5;i!==t&&this.setState({maxLineCount:i})}maybeSetDescriptionLineCount(){const{descriptionLineCount:e,maxLineCount:t,imageMode:i}=this.state,o=this.getTitleLineCount();let a=t-o;"portrait"===i&&(a=5===o?0:4),a!==e&&this.setState({descriptionLineCount:a})}componentDidUpdate(){this.maybeSetMaxLineCount(),this.maybeSetDescriptionLineCount()}render(){const{imageMode:e,maxLineCount:t,descriptionLineCount:i}=this.state;return o.default.createElement(h,{id:"facebookPreview",mode:e},o.default.createElement(s.default,{src:this.props.imageUrl||this.props.imageFallbackUrl,alt:this.props.alt,onImageLoaded:this.onImageLoaded,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),o.default.createElement(g,{mode:e},o.default.createElement(n.default,{siteUrl:this.props.siteUrl,mode:e}),o.default.createElement(l.default,{ref:this.facebookTitleRef,onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle,lineCount:t},this.props.title),i>0&&o.default.createElement(d.default,{maxWidth:f(e),onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription,lineCount:i},this.props.description)))}}m.propTypes={siteUrl:a.default.string.isRequired,title:a.default.string.isRequired,description:a.default.string,imageUrl:a.default.string,imageFallbackUrl:a.default.string,alt:a.default.string,onSelect:a.default.func,onImageClick:a.default.func,onMouseHover:a.default.func},m.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{}},t.default=m},887:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=s(t);if(i&&i.has(e))return i.get(e);var o={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var n=a?Object.getOwnPropertyDescriptor(e,r):null;n&&(n.get||n.set)?Object.defineProperty(o,r,n):o[r]=e[r]}return o.default=e,i&&i.set(e,o),o}(i(609)),a=n(i(679)),r=n(i(802));function n(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(s=function(e){return e?i:t})(e)}const l=a.default.p` + color: #606770; + flex-shrink: 0; + font-size: 12px; + line-height: 16px; + overflow: hidden; + padding: 0; + text-overflow: ellipsis; + text-transform: uppercase; + white-space: nowrap; + margin: 0; + position: ${e=>"landscape"===e.mode?"relative":"static"}; +`,d=e=>{const{siteUrl:t}=e;return o.default.createElement(o.Fragment,null,o.default.createElement("span",{className:"screen-reader-text"},t),o.default.createElement(l,{"aria-hidden":"true"},o.default.createElement("span",null,t)))};d.propTypes={siteUrl:r.default.string.isRequired},t.default=d},741:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.facebookTitleLineHeight=t.default=void 0;var o,a=(o=i(679))&&o.__esModule?o:{default:o};const r=t.facebookTitleLineHeight=20,n=a.default.span` + line-height: ${r}px; + min-height : ${r}px; + color: #1d2129; + font-weight: 600; + overflow: hidden; + font-size: 16px; + margin: 3px 0 0; + letter-spacing: normal; + white-space: normal; + flex-shrink: 0; + cursor: pointer; + display: -webkit-box; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; +`;t.default=n},737:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateImageDimensions=s,t.calculateImageRatios=r,t.calculateLargestDimensions=n,t.determineImageProperties=l,t.handleImage=async function(e,t,i=!1){try{return{imageProperties:await l(e,t,i),status:"loaded"}}catch(e){return{imageProperties:null,status:"errored"}}},t.retrieveExpectedDimensions=a;var o=i(379);function a(e){return"Twitter"===e?o.TWITTER_IMAGE_SIZES:o.FACEBOOK_IMAGE_SIZES}function r(e,t,i){return"landscape"===i?{widthRatio:t.width/e.landscapeWidth,heightRatio:t.height/e.landscapeHeight}:"portrait"===i?{widthRatio:t.width/e.portraitWidth,heightRatio:t.height/e.portraitHeight}:{widthRatio:t.width/e.squareWidth,heightRatio:t.height/e.squareHeight}}function n(e,t){return t.widthRatio<=t.heightRatio?{width:Math.round(e.width/t.widthRatio),height:Math.round(e.height/t.widthRatio)}:{width:Math.round(e.width/t.heightRatio),height:Math.round(e.height/t.heightRatio)}}function s(e,t,i){return"square"===i&&t.width===t.height?{width:e.squareWidth,height:e.squareHeight}:n(t,r(e,t,i))}async function l(e,t,i=!1){const r=await function(e){return new Promise(((t,i)=>{const o=new Image;o.onload=()=>{t({width:o.width,height:o.height})},o.onerror=i,o.src=e}))}(e);let n=i?"landscape":"square";"Facebook"===t&&(n=(0,o.determineFacebookImageMode)(r));const l=s(a(t),r,n);return{mode:n,height:l.height,width:l.width}}},566:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SocialImage=void 0;var o=n(i(802)),a=n(i(609)),r=n(i(679));function n(e){return e&&e.__esModule?e:{default:e}}const s=r.default.img` + && { + max-width: ${e=>e.width}px; + height: ${e=>e.height}px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + max-width: none; + } +`,l=r.default.img` + &&{ + height: 100%; + position: absolute; + width: 100%; + object-fit: cover; + } +`,d=r.default.div` + padding-bottom: ${e=>e.aspectRatio}%; +`,c=e=>{const{imageProps:t,width:i,height:o,imageMode:r}=e;return"landscape"===r?a.default.createElement(d,{aspectRatio:t.aspectRatio},a.default.createElement(l,{src:t.src,alt:t.alt})):a.default.createElement(s,{src:t.src,alt:t.alt,width:i,height:o,imageProperties:t})};t.SocialImage=c,c.propTypes={imageProps:o.default.shape({src:o.default.string.isRequired,alt:o.default.string.isRequired,aspectRatio:o.default.number.isRequired}).isRequired,width:o.default.number.isRequired,height:o.default.number.isRequired,imageMode:o.default.string},c.defaultProps={imageMode:"landscape"}},903:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o,a=i(379);const r=((o=i(679))&&o.__esModule?o:{default:o}).default.p` + max-height: 55px; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(83, 100, 113); + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + + @media all and ( max-width: ${a.TWITTER_IMAGE_SIZES.landscapeWidth}px ) { + display: none; + } +`;t.default=r},248:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(723),a=i(379),r=i(87),n=u(i(802)),s=u(i(609)),l=u(i(679)),d=i(737),c=i(566);function u(e){return e&&e.__esModule?e:{default:e}}const p=(e,t=!0)=>e?`\n\t\t\tmax-width: ${a.TWITTER_IMAGE_SIZES.landscapeWidth}px;\n\t\t\t${t?"border-bottom: 1px solid #E1E8ED;":""}\n\t\t\tborder-radius: 14px 14px 0 0;\n\t\t\t`:`\n\t\twidth: ${a.TWITTER_IMAGE_SIZES.squareWidth}px;\n\t\t${t?"border-right: 1px solid #E1E8ED;":""}\n\t\tborder-radius: 14px 0 0 14px;\n\t\t`,f=l.default.div` + position: relative; + box-sizing: content-box; + overflow: hidden; + background-color: #e1e8ed; + flex-shrink: 0; + ${e=>p(e.isLarge)} +`,h=l.default.div` + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + max-width: 100%; + margin: 0; + padding: 1em; + text-align: center; + font-size: 1rem; + ${e=>p(e.isLarge,!1)} +`,g=(0,l.default)(h)` + ${e=>e.isLarge&&`height: ${a.TWITTER_IMAGE_SIZES.landscapeHeight}px;`} + border-top-left-radius: 14px; + ${e=>e.isLarge?"border-top-right-radius":"border-bottom-left-radius"}: 14px; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class m extends s.default.Component{constructor(e){super(e),this.state={status:"loading"},this.socialMedium="Twitter",this.handleTwitterImage=this.handleTwitterImage.bind(this),this.setState=this.setState.bind(this)}async handleTwitterImage(){if(null===this.props.src)return;const e=await(0,d.handleImage)(this.props.src,this.socialMedium,this.props.isLarge);this.setState(e)}componentDidUpdate(e){e.src!==this.props.src&&this.handleTwitterImage()}componentDidMount(){this.handleTwitterImage()}render(){const{status:e,imageProperties:t}=this.state;return"loading"===e||""===this.props.src||"errored"===e?s.default.createElement(g,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,o.__)("Select image","wordpress-seo")):s.default.createElement(f,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},s.default.createElement(c.SocialImage,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:a.TWITTER_IMAGE_SIZES.aspectRatio},width:t.width,height:t.height,imageMode:t.mode}))}}t.default=m,m.propTypes={isLarge:n.default.bool.isRequired,src:n.default.string,alt:n.default.string,onImageClick:n.default.func,onMouseEnter:n.default.func,onMouseLeave:n.default.func},m.defaultProps={src:"",alt:"",onMouseEnter:r.noop,onImageClick:r.noop,onMouseLeave:r.noop}},333:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=p(t);if(i&&i.has(e))return i.get(e);var o={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var n=a?Object.getOwnPropertyDescriptor(e,r):null;n&&(n.get||n.set)?Object.defineProperty(o,r,n):o[r]=e[r]}return o.default=e,i&&i.set(e,o),o}(i(609)),a=u(i(802)),r=u(i(679)),n=u(i(801)),s=u(i(248)),l=u(i(715)),d=u(i(311)),c=u(i(903));function u(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(p=function(e){return e?i:t})(e)}const f=r.default.div` + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", sans-serif; + font-size: 15px; + font-weight: 400; + line-height: 20px; + max-width: 507px; + border: 1px solid #E1E8ED; + box-sizing: border-box; + border-radius: 14px; + color: #292F33; + background: #FFFFFF; + text-overflow: ellipsis; + display: flex; + + &:hover { + background: #f5f8fa; + border: 1px solid rgba(136,153,166,.5); + } +`,h=(0,r.default)(f)` + flex-direction: column; + max-height: 370px; +`,g=(0,r.default)(f)` + flex-direction: row; + height: 125px; +`;class m extends o.Component{constructor(e){super(e),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}render(){const{isLarge:e,imageUrl:t,imageFallbackUrl:i,alt:a,title:r,description:u,siteUrl:p}=this.props,f=e?h:g;return o.default.createElement(f,{id:"twitterPreview"},o.default.createElement(s.default,{src:t||i,alt:a,isLarge:e,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),o.default.createElement(l.default,null,o.default.createElement(n.default,{siteUrl:p}),o.default.createElement(d.default,{onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle},r),o.default.createElement(c.default,{onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription},u)))}}m.propTypes={siteUrl:a.default.string.isRequired,title:a.default.string.isRequired,description:a.default.string,isLarge:a.default.bool,imageUrl:a.default.string,imageFallbackUrl:a.default.string,alt:a.default.string,onSelect:a.default.func,onImageClick:a.default.func,onMouseHover:a.default.func},m.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{},isLarge:!0},t.default=m},801:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(i(609)),a=n(i(679)),r=n(i(802));function n(e){return e&&e.__esModule?e:{default:e}}const s=a.default.div` + text-transform: lowercase; + color: rgb(83, 100, 113); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + fill: currentcolor; + display: flex; + flex-direction: row; + align-items: flex-end; +`,l=e=>o.default.createElement(s,null,o.default.createElement("span",null,e.siteUrl));l.propTypes={siteUrl:r.default.string.isRequired},t.default=l},715:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(i(609)),a=n(i(679)),r=n(i(802));function n(e){return e&&e.__esModule?e:{default:e}}const s=a.default.div` + display: flex; + flex-direction: column; + padding: 12px; + justify-content: center; + margin: 0; + box-sizing: border-box; + flex: auto; + min-width: 0px; + gap:2px; + > * { + line-height:20px; + min-height:20px; + font-size:15px; + } +`,l=e=>o.default.createElement(s,null,e.children);l.propTypes={children:r.default.array.isRequired},t.default=l},311:(e,t,i)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const a=((o=i(679))&&o.__esModule?o:{default:o}).default.p` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(15, 20, 25); + cursor: pointer; +`;t.default=a},609:e=>{e.exports=window.React},87:e=>{e.exports=window.lodash},723:e=>{e.exports=window.wp.i18n},554:e=>{e.exports=window.yoast.componentsNew},802:e=>{e.exports=window.yoast.propTypes},547:e=>{e.exports=window.yoast.replacementVariableEditor},379:e=>{e.exports=window.yoast.socialMetadataForms},495:e=>{e.exports=window.yoast.styleGuide},679:e=>{e.exports=window.yoast.styledComponents}},t={};function i(o){var a=t[o];if(void 0!==a)return a.exports;var r=t[o]={exports:{}};return e[o](r,r.exports,i),r.exports}var o={};(()=>{var e=o;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"FACEBOOK_IMAGE_SIZES",{enumerable:!0,get:function(){return n.FACEBOOK_IMAGE_SIZES}}),Object.defineProperty(e,"FacebookPreview",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"SocialPreviewEditor",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"TWITTER_IMAGE_SIZES",{enumerable:!0,get:function(){return n.TWITTER_IMAGE_SIZES}}),Object.defineProperty(e,"TwitterPreview",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"determineFacebookImageMode",{enumerable:!0,get:function(){return n.determineFacebookImageMode}});var t=s(i(751)),a=s(i(333)),r=s(i(442)),n=i(897);function s(e){return e&&e.__esModule?e:{default:e}}})(),(window.yoast=window.yoast||{})["social-metadata-previews"]=o})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/changelog.txt b/wp/wp-content/plugins/wordpress-seo-premium/changelog.txt new file mode 100644 index 00000000..e4ac7c68 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/changelog.txt @@ -0,0 +1,9 @@ +*** Yoast SEO premium Changelog *** + + +2024-06-18 - version 22.9 +* add - Converts the _Siblings_ and _Subpages_ blocks to the V3 API. +* add - Converts the _Siblings_ and _Subpages_ blocks to the V3 API. +* fix - Fixes a bug where a fatal error would occur when clicking `Click here to remove the redirect` after reverting the trashing of a post. +* update - Bumps the minimum required version of Yoast SEO to 22.9. + diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/siblings-block.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/siblings-block.php new file mode 100644 index 00000000..a479a9b6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/siblings-block.php @@ -0,0 +1,86 @@ +indexable_repository = $indexable_repository; + + $this->base_path = \WPSEO_PREMIUM_PATH . 'assets/blocks/dynamic-blocks/'; + } + + /** + * Presents the block output. + * + * @param array $attributes The block attributes. + * + * @return string The block output. + */ + public function present( $attributes ) { + $post_parent_id = \wp_get_post_parent_id( null ); + if ( $post_parent_id === false || $post_parent_id === 0 ) { + return ''; + } + $indexables = $this->indexable_repository->get_subpages_by_post_parent( + $post_parent_id, + [ \get_the_ID() ] + ); + + $links = \array_map( + static function ( Indexable $indexable ) { + return [ + 'title' => $indexable->breadcrumb_title, + 'permalink' => $indexable->permalink, + ]; + }, + $indexables + ); + + if ( empty( $links ) ) { + return ''; + } + + $class_name = 'yoast-url-list'; + if ( ! empty( $attributes['className'] ) ) { + $class_name .= ' ' . \esc_attr( $attributes['className'] ); + } + + $presenter = new Url_List_Presenter( $links, $class_name ); + + return $presenter->present(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/subpages-block.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/subpages-block.php new file mode 100644 index 00000000..9a17362a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/blocks/subpages-block.php @@ -0,0 +1,79 @@ +indexable_repository = $indexable_repository; + + $this->base_path = \WPSEO_PREMIUM_PATH . 'assets/blocks/dynamic-blocks/'; + } + + /** + * Presents the block output. + * + * @param array $attributes The block attributes. + * + * @return string The block output. + */ + public function present( $attributes ) { + $indexables = $this->indexable_repository->get_subpages_by_post_parent( \get_the_ID() ); + + $links = \array_map( + static function ( Indexable $indexable ) { + return [ + 'title' => $indexable->breadcrumb_title, + 'permalink' => $indexable->permalink, + ]; + }, + $indexables + ); + + if ( empty( $links ) ) { + return ''; + } + + $class_name = 'yoast-url-list'; + if ( ! empty( $attributes['className'] ) ) { + $class_name .= ' ' . \esc_attr( $attributes['className'] ); + } + + $presenter = new Url_List_Presenter( $links, $class_name ); + + return $presenter->present(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/custom-fields-plugin.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/custom-fields-plugin.php new file mode 100644 index 00000000..bc02110e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/custom-fields-plugin.php @@ -0,0 +1,115 @@ +localize_script() ); + } + + /** + * Loads the custom fields translations. + * + * @return array The fields to localize. + */ + public function localize_script() { + return [ + 'custom_field_names' => $this->get_custom_field_names(), + ]; + } + + /** + * Retrieve all custom field names set in SEO -> + * + * @return array The custom field names. + */ + protected function get_custom_field_names() { + $custom_field_names = []; + + $post = $this->get_post(); + + if ( ! is_object( $post ) ) { + return $custom_field_names; + } + + $options = $this->get_titles_from_options(); + $target_option = 'page-analyse-extra-' . $post->post_type; + + if ( array_key_exists( $target_option, $options ) ) { + $custom_field_names = explode( ',', $options[ $target_option ] ); + } + + return $custom_field_names; + } + + /** + * Retrieves post data given a post ID or the global. + * + * @codeCoverageIgnore Method relies on dependencies. + * + * @return WP_Post|array|null Returns a post if found, otherwise returns an empty array. + */ + protected function get_post() { + // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Reason: We are not controlling the request. + if ( isset( $_GET['post'] ) && is_string( $_GET['post'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are casting the unsafe value to an integer. + $post_id = (int) wp_unslash( $_GET['post'] ); + if ( $post_id > 0 ) { + return get_post( $post_id ); + } + } + // phpcs:enable WordPress.Security.NonceVerification.Recommended + + if ( isset( $GLOBALS['post'] ) ) { + return $GLOBALS['post']; + } + + return []; + } + + /** + * Retrieves the value of the WPSEO_Titles option. + * + * @codeCoverageIgnore Method relies on the options. + * + * @return array The value from WPSEO_Titles option. + */ + protected function get_titles_from_options() { + $option_name = WPSEO_Options::get_option_instance( 'wpseo_titles' )->option_name; + + return get_option( $option_name, [] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-csv.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-csv.php new file mode 100644 index 00000000..e50c0965 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-csv.php @@ -0,0 +1,228 @@ +columns = array_filter( $columns, 'is_string' ); + } + + /** + * Echoes the CSV headers + * + * @return void + */ + public function print_headers() { + // phpcs:ignore WordPress.Security.EscapeOutput -- Correctly escaped in get_headers() method below. + echo $this->get_headers(); + } + + /** + * Echoes a formatted row. + * + * @param array $row Row to add to the export. + * + * @return void + */ + public function print_row( $row ) { + echo $this->format( $row ); + } + + /** + * Returns the CSV headers based on the queried columns. + * + * @return string The headers in CSV format. + */ + protected function get_headers() { + $header_columns = [ + 'title' => esc_html__( 'title', 'wordpress-seo-premium' ), + 'url' => esc_html__( 'url', 'wordpress-seo-premium' ), + 'readability_score' => esc_html__( 'readability score', 'wordpress-seo-premium' ), + 'keywords' => esc_html__( 'keyphrase', 'wordpress-seo-premium' ), + 'keywords_score' => esc_html__( 'keyphrase score', 'wordpress-seo-premium' ), + 'seo_title' => esc_html__( 'seo title', 'wordpress-seo-premium' ), + 'meta_description' => esc_html__( 'meta description', 'wordpress-seo-premium' ), + ]; + + $csv = $this->sanitize_csv_column( esc_html__( 'ID', 'wordpress-seo-premium' ) ); + $csv .= ',' . $this->sanitize_csv_column( esc_html_x( 'type', 'post_type of a post or the taxonomy of a term', 'wordpress-seo-premium' ) ); + + foreach ( $this->columns as $column ) { + if ( array_key_exists( $column, $header_columns ) ) { + $csv .= ',' . $this->sanitize_csv_column( $header_columns[ $column ] ); + } + } + + return $csv . PHP_EOL; + } + + /** + * Formats a WPSEO_Export_Keywords_Query result as a CSV line. + * In case of multiple keywords it will return multiple lines. + * + * @param array $result A result as returned from WPSEO_Export_Keywords_Query::get_data. + * + * @return string A line of CSV, beginning with EOL. + */ + protected function format( array $result ) { + // If our input is malformed return an empty string. + if ( ! array_key_exists( 'ID', $result ) || ! array_key_exists( 'type', $result ) ) { + return ''; + } + + // Ensure we have arrays in the keywords. + $result['keywords'] = $this->get_array_from_result( $result, 'keywords' ); + $result['keywords_score'] = $this->get_array_from_result( $result, 'keywords_score' ); + + $csv = ''; + + // Add at least one row plus additional ones if we have more keywords. + $keywords = max( 1, count( $result['keywords'] ) ); + for ( $keywords_index = 0; $keywords_index < $keywords; $keywords_index++ ) { + // Add static columns. + $csv .= $this->sanitize_csv_column( $result['ID'] ); + $csv .= ',' . $this->sanitize_csv_column( $result['type'] ); + + // Add dynamic columns. + foreach ( $this->columns as $column ) { + $csv .= $this->get_csv_column_from_result( $result, $column, $keywords_index ); + } + + $csv .= PHP_EOL; + } + + return $csv; + } + + /** + * Returns a CSV column, including comma, from the result object based on the specified key + * + * @param array $result The result object. + * @param string $key The key of the value to get the CSV column for. + * @param int $keywords_index The number keyword to output. + * + * @return string CSV formatted column. + */ + protected function get_csv_column_from_result( array $result, $key, $keywords_index ) { + if ( in_array( $key, [ 'title', 'url', 'seo_title', 'meta_description', 'readability_score' ], true ) ) { + return $this->get_csv_string_column_from_result( $result, $key ); + } + + if ( in_array( $key, [ 'keywords', 'keywords_score' ], true ) ) { + return $this->get_csv_array_column_from_result( $result, $key, $keywords_index ); + } + + return ''; + } + + /** + * Returns an array from the result object. + * + * @param array $result The result object. + * @param string $key The key of the array to retrieve. + * + * @return array Contents of the key in the object. + */ + protected function get_array_from_result( array $result, $key ) { + if ( array_key_exists( $key, $result ) && is_array( $result[ $key ] ) ) { + return $result[ $key ]; + } + + return []; + } + + /** + * Returns a CSV column, including comma, from the result object by the specified key. + * Expects the value to be a string. + * + * @param array $result The result object to get the CSV column from. + * @param string $key The key of the value to get the CSV column for. + * + * @return string A CSV formatted column. + */ + protected function get_csv_string_column_from_result( array $result, $key ) { + if ( array_key_exists( $key, $result ) ) { + return ',' . $this->sanitize_csv_column( $result[ $key ] ); + } + + return ','; + } + + /** + * Returns a CSV column, including comma, from the result object by the specified key. + * Expects the value to be inside an array. + * + * @param array $result The result object to get the CSV column from. + * @param string $key The key of the array to get the CSV column for. + * @param int $index The index of the value in the array. + * + * @return string A CSV formatted column. + */ + protected function get_csv_array_column_from_result( array $result, $key, $index ) { + // If the array has an element at $index. + if ( $index < count( $result[ $key ] ) ) { + return ',' . $this->sanitize_csv_column( $result[ $key ][ $index ] ); + } + + return ','; + } + + /** + * Sanitizes a value to be output as a CSV value. + * + * @param string $value The value to sanitize. + * + * @return string The sanitized value. + */ + protected function sanitize_csv_column( $value ) { + // Return an empty string if value is null. + if ( $value === null ) { + return ''; + } + + // Convert non-string values to strings. + if ( ! is_string( $value ) ) { + $value = var_export( $value, true ); + } + + // Replace all whitespace with spaces because Excel can't deal with newlines and tabs even if escaped. + $value = preg_replace( '/\s/', ' ', $value ); + + // Escape double quotes. + $value = str_replace( '"', '""', $value ); + + // Return the value enclosed in double quotes. + return '"' . $value . '"'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-presenter.php new file mode 100644 index 00000000..f415c2d5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-presenter.php @@ -0,0 +1,230 @@ +columns = array_filter( $columns, 'is_string' ); + } + + /** + * Creates a presentable result by modifying and adding the requested fields. + * + * @param array $result The result to modify. + * + * @return array The modified result or an empty array if the result is considered invalid. + */ + public function present( array $result ) { + if ( ! $this->validate_result( $result ) ) { + return []; + } + + foreach ( $this->columns as $column ) { + $result = $this->prepare_column_result( $result, $column ); + } + + $result['type'] = $result['post_type']; + unset( $result['post_type'] ); + + return $result; + } + + /** + * Prepares the passed result to make it more presentable. + * + * @param array $result The result to modify. + * @param string $column The requested column. + * + * @return array The prepared result. + */ + protected function prepare_column_result( array $result, $column ) { + switch ( $column ) { + case 'title': + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Using WP native filter. + $result['title'] = apply_filters( 'the_title', $result['post_title'], $result['ID'] ); + unset( $result['post_title'] ); + break; + case 'url': + $result['url'] = get_permalink( $result['ID'] ); + break; + case 'readability_score': + $result['readability_score'] = WPSEO_Rank::from_numeric_score( (int) $result['readability_score'] )->get_label(); + break; + case 'keywords': + $result = $this->convert_result_keywords( $result ); + break; + } + + return $result; + } + + /** + * Returns whether a result to present is a valid result. + * + * @param array $result The result to validate. + * + * @return bool True for a value valid result. + */ + protected function validate_result( array $result ) { + // If there is no ID then it's not valid. + if ( ! array_key_exists( 'ID', $result ) ) { + return false; + } + + // If a title is requested but not present then it's not valid. + if ( $this->column_is_present( 'title' ) && $this->has_title( $result ) === false ) { + return false; + } + + return true; + } + + /** + * Determines if the result contains a valid title. + * + * @param array $result The result array to check for a title. + * + * @return bool Whether or not a title is valid. + */ + protected function has_title( $result ) { + if ( ! is_array( $result ) || ! array_key_exists( 'post_title', $result ) ) { + return false; + } + + return is_string( $result['post_title'] ); + } + + /** + * Determines if the wanted column exists within the $this->columns class variable. + * + * @param string $column The column to search for. + * + * @return bool Whether or not the column exists. + */ + protected function column_is_present( $column ) { + if ( ! is_string( $column ) ) { + return false; + } + + return in_array( $column, $this->columns, true ); + } + + /** + * Converts the results of the query from strings and JSON string to keyword arrays. + * + * @param array $result The result to convert. + * + * @return array The converted result. + */ + protected function convert_result_keywords( array $result ) { + $result['keywords'] = []; + + if ( $this->column_is_present( 'keywords_score' ) ) { + $result['keywords_score'] = []; + } + + if ( $this->has_primary_keyword( $result ) ) { + $result['keywords'][] = $result['primary_keyword']; + + // Convert multiple keywords from the Premium plugin from json to string arrays. + $keywords = $this->parse_result_keywords_json( $result, 'other_keywords' ); + + $other_keywords = wp_list_pluck( $keywords, 'keyword' ); + $result['keywords'] = array_merge( $result['keywords'], $other_keywords ); + + if ( $this->column_is_present( 'keywords_score' ) ) { + $result['keywords_score'] = $this->get_result_keywords_scores( $result, $keywords ); + } + } + + // Unset all old variables, if they do not exist nothing will happen. + unset( $result['primary_keyword'], $result['primary_keyword_score'], $result['other_keywords'] ); + + return $result; + } + + /** + * Determines whether there's a valid primary keyword present in the result array. + * + * @param array $result The result array to check for the primary_keyword key. + * + * @return bool Whether or not a valid primary keyword is present. + */ + protected function has_primary_keyword( $result ) { + if ( ! is_array( $result ) || ! array_key_exists( 'primary_keyword', $result ) ) { + return false; + } + + return is_string( $result['primary_keyword'] ) && ! empty( $result['primary_keyword'] ); + } + + /** + * Parses then keywords JSON string in the result object for the specified key. + * + * @param array $result The result object. + * @param string $key The key containing the JSON. + * + * @return array The parsed keywords. + */ + protected function parse_result_keywords_json( array $result, $key ) { + if ( empty( $result[ $key ] ) ) { + return []; + } + + $parsed = json_decode( $result[ $key ], true ); + + if ( ! $parsed ) { + return []; + } + + return $parsed; + } + + /** + * Returns an array of all scores from the result object and the parsed keywords JSON. + * + * @param array $result The result object. + * @param array $keywords The parsed keywords. + * + * @return array The keyword scores. + */ + protected function get_result_keywords_scores( array $result, $keywords ) { + $scores = []; + + $rank = WPSEO_Rank::from_numeric_score( (int) $result['primary_keyword_score'] ); + $scores[] = $rank->get_label(); + + foreach ( $keywords as $keyword ) { + if ( isset( $keyword['score'] ) ) { + $rank = new WPSEO_Rank( $keyword['score'] ); + $scores[] = $rank->get_label(); + } + } + + return $scores; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-query.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-query.php new file mode 100644 index 00000000..c1dfabd7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-post-query.php @@ -0,0 +1,183 @@ +page_size = max( 1, (int) $page_size ); + + $this->set_columns( $columns ); + } + + /** + * Constructs the query and executes it, returning an array of objects containing the columns this object was + * constructed with. Every object will always contain the ID column. + * + * @param int $page Paginated page to retrieve. + * + * @return array An array of associative arrays containing the keys as requested in the constructor. + */ + public function get_data( $page = 1 ) { + global $wpdb; + + if ( $this->columns === [] ) { + return []; + } + + $post_types = WPSEO_Post_Type::get_accessible_post_types(); + if ( empty( $post_types ) ) { + return []; + } + + // Pages have a starting index of 1, we need to convert to a 0 based offset. + $offset_multiplier = max( 0, ( $page - 1 ) ); + + $replacements = []; + $replacements[] = $wpdb->posts; + $replacements[] = 'post_status'; + $replacements[] = 'post_type'; + $replacements = array_merge( $replacements, $post_types ); + $replacements[] = $this->page_size; + $replacements[] = ( $offset_multiplier * $this->page_size ); + + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQLPlaceholders.UnsupportedPlaceholder,WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Already prepared, and no cache applicable. + return $wpdb->get_results( + $wpdb->prepare( + 'SELECT ' . implode( ', ', $this->selects ) + . ' FROM %i AS posts ' + . implode( ' ', $this->joins ) + . ' WHERE posts.%i = "publish" AND posts.%i IN (' + . implode( ',', array_fill( 0, count( $post_types ), '%s' ) ) . ')' + . ' LIMIT %d OFFSET %d', + $replacements + ), + ARRAY_A + ); + // phpcs:enable + } + + /** + * Prepares the necessary selects and joins to get all data in a single query. + * + * @param array $columns The columns we want our query to return. + * + * @return void + */ + public function set_columns( array $columns ) { + $this->columns = $columns; + + $this->joins = []; + $this->selects = [ 'posts.ID', 'posts.post_type' ]; + + if ( in_array( 'title', $this->columns, true ) ) { + $this->selects[] = 'posts.post_title'; + } + + // If we're selecting keywords_score then we always want the keywords as well. + if ( in_array( 'keywords', $this->columns, true ) || in_array( 'keywords_score', $this->columns, true ) ) { + $this->add_meta_join( 'primary_keyword', WPSEO_Meta::$meta_prefix . 'focuskw' ); + $this->add_meta_join( 'other_keywords', WPSEO_Meta::$meta_prefix . 'focuskeywords' ); + } + + if ( in_array( 'readability_score', $this->columns, true ) ) { + $this->add_meta_join( 'readability_score', WPSEO_Meta::$meta_prefix . 'content_score' ); + } + + if ( in_array( 'keywords_score', $this->columns, true ) ) { + // Score for other keywords is already in the other_keywords select so only join for the primary_keyword_score. + $this->add_meta_join( 'primary_keyword_score', WPSEO_Meta::$meta_prefix . 'linkdex' ); + } + + if ( in_array( 'seo_title', $this->columns, true ) ) { + $this->add_meta_join( 'seo_title', WPSEO_Meta::$meta_prefix . 'title' ); + } + + if ( in_array( 'meta_description', $this->columns, true ) ) { + $this->add_meta_join( 'meta_description', WPSEO_Meta::$meta_prefix . 'metadesc' ); + } + } + + /** + * Returns the page size for the query. + * + * @return int Page size that is being used. + */ + public function get_page_size() { + return $this->page_size; + } + + /** + * Adds an aliased join to the $wpdb->postmeta table so that multiple meta values can be selected in a single row. + * + * While this function should never be used with user input, + * all non-word non-digit characters are removed from both params for increased robustness. + * + * @param string $alias The alias to use in our query output. + * @param string $key The meta_key to select. + * + * @return void + */ + protected function add_meta_join( $alias, $key ) { + global $wpdb; + $alias = preg_replace( '/[^\w\d]/', '', $alias ); + $key = preg_replace( '/[^\w\d]/', '', $key ); + + $this->selects[] = $alias . '_join.meta_value AS ' . $alias; + $this->joins[] = 'LEFT OUTER JOIN ' . $wpdb->prefix . 'postmeta AS ' . $alias . '_join ' + . 'ON ' . $alias . '_join.post_id = posts.ID ' + . 'AND ' . $alias . '_join.meta_key = "' . $key . '"'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-presenter-interface.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-presenter-interface.php new file mode 100644 index 00000000..9d1e1865 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-presenter-interface.php @@ -0,0 +1,33 @@ +columns = array_filter( $columns, 'is_string' ); + } + + /** + * Creates a presentable result by modifying and adding the requested fields. + * + * @param array $result The result to modify. + * + * @return array The modified result or an empty array if the result is considered invalid. + */ + public function present( array $result ) { + if ( ! $this->validate_result( $result ) ) { + return []; + } + + $result['ID'] = (int) $result['term_id']; + unset( $result['term_id'] ); + + foreach ( $this->columns as $column ) { + $result = $this->prepare_column_result( $result, $column ); + } + + $result['type'] = $result['taxonomy']; + unset( $result['taxonomy'] ); + + return $result; + } + + /** + * Prepares the passed result to make it more presentable. + * + * @param array $result The result to modify. + * @param string $column The requested column. + * + * @return array The prepared result. + */ + protected function prepare_column_result( array $result, $column ) { + switch ( $column ) { + case 'keywords': + $result['keywords'] = $this->get_result_keywords( $result ); + break; + case 'keywords_score': + $result['keywords_score'] = $this->get_result_keywords_score( $result ); + break; + case 'url': + $result['url'] = get_term_link( $result['ID'], $result['taxonomy'] ); + break; + case 'title': + $result['title'] = $result['name']; + unset( $result['name'] ); + break; + case 'seo_title': + $result['seo_title'] = WPSEO_Taxonomy_Meta::get_term_meta( $result['ID'], $result['taxonomy'], 'title' ); + break; + case 'meta_description': + $result['meta_description'] = WPSEO_Taxonomy_Meta::get_term_meta( $result['ID'], $result['taxonomy'], 'desc' ); + break; + case 'readability_score': + $content_score = WPSEO_Taxonomy_Meta::get_term_meta( $result['ID'], $result['taxonomy'], 'content_score' ); + $result['readability_score'] = WPSEO_Rank::from_numeric_score( (int) $content_score )->get_label(); + break; + } + + return $result; + } + + /** + * Returns whether a result to present is a valid result. + * + * @param array $result The result to validate. + * + * @return bool True if the result is validated. + */ + protected function validate_result( array $result ) { + // If there is no ID then it's not valid. + if ( ! array_key_exists( 'term_id', $result ) ) { + return false; + } + + // If a title is requested but not present then it's not valid. + if ( $this->column_is_present( 'title' ) && $this->has_title( $result ) === false ) { + return false; + } + + return true; + } + + /** + * Determines if the result contains a valid title. + * + * @param array $result The result array to check for a title. + * + * @return bool Whether or not a title is valid. + */ + protected function has_title( $result ) { + if ( ! is_array( $result ) || ! array_key_exists( 'name', $result ) ) { + return false; + } + + return is_string( $result['name'] ); + } + + /** + * Determines if the wanted column exists within the $this->columns class variable. + * + * @param string $column The column to search for. + * + * @return bool Whether or not the column exists. + */ + protected function column_is_present( $column ) { + if ( ! is_string( $column ) ) { + return false; + } + + return in_array( $column, $this->columns, true ); + } + + /** + * Gets the result keywords from WPSEO_Taxonomy_Meta. + * + * @param array $result The result to get the keywords for. + * + * @return array The keywords. + */ + protected function get_result_keywords( array $result ) { + $keyword = WPSEO_Taxonomy_Meta::get_term_meta( $result['ID'], $result['taxonomy'], 'focuskw' ); + + if ( $keyword === false || empty( $keyword ) ) { + return []; + } + + return [ (string) $keyword ]; + } + + /** + * Gets the result keyword scores from WPSEO_Taxonomy_Meta. + * + * @param array $result The result to get the keyword scores for. + * + * @return array The keyword scores. + */ + protected function get_result_keywords_score( array $result ) { + $keyword_score = WPSEO_Taxonomy_Meta::get_term_meta( $result['ID'], $result['taxonomy'], 'linkdex' ); + + if ( $keyword_score === false || empty( $keyword_score ) ) { + return []; + } + + $keyword_score_label = WPSEO_Rank::from_numeric_score( (int) $keyword_score )->get_label(); + + return [ $keyword_score_label ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-term-query.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-term-query.php new file mode 100644 index 00000000..8377a01f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/export/export-keywords-term-query.php @@ -0,0 +1,132 @@ +page_size = max( 1, (int) $page_size ); + $this->set_columns( $columns ); + } + + /** + * Returns the page size for the query. + * + * @return int Page size that is being used. + */ + public function get_page_size() { + return $this->page_size; + } + + /** + * Constructs the query and executes it, returning an array of objects containing the columns this object was constructed with. + * Every object will always contain the ID column. + * + * @param int $page Paginated page to retrieve. + * + * @return array An array of associative arrays containing the keys as requested in the constructor. + */ + public function get_data( $page = 1 ) { + + global $wpdb; + + if ( $this->columns === [] ) { + return []; + } + + $taxonomies = get_taxonomies( + [ + 'public' => true, + 'show_ui' => true, + ], + 'names' + ); + + if ( empty( $taxonomies ) ) { + return []; + } + + // Pages have a starting index of 1, we need to convert to a 0 based offset. + $offset_multiplier = max( 0, ( $page - 1 ) ); + + $replacements = []; + $replacements[] = $wpdb->terms; + $replacements[] = $wpdb->term_taxonomy; + $replacements[] = 'term_id'; + $replacements[] = 'term_id'; + $replacements[] = 'taxonomy'; + $replacements = array_merge( $replacements, $taxonomies ); + $replacements[] = $this->page_size; + $replacements[] = ( $offset_multiplier * $this->page_size ); + + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQLPlaceholders.UnsupportedPlaceholder,WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Already prepared, and no cache applicable. + return $wpdb->get_results( + $wpdb->prepare( + 'SELECT ' . implode( ', ', $this->selects ) + . ' FROM %i AS terms' + . ' INNER JOIN %i AS taxonomies' + . ' ON terms.%i = taxonomies.%i AND taxonomies.%i IN (' + . implode( ',', array_fill( 0, count( $taxonomies ), '%s' ) ) . ')' + . ' LIMIT %d OFFSET %d', + $replacements + ), + ARRAY_A + ); + // phpcs:enable + } + + /** + * Prepares the necessary selects and joins to get all data in a single query. + * + * @param array $columns The columns we want our query to return. + * + * @return void + */ + public function set_columns( array $columns ) { + $this->columns = $columns; + + $this->selects = [ 'terms.term_id', 'taxonomies.taxonomy' ]; + + if ( in_array( 'title', $this->columns, true ) ) { + $this->selects[] = 'terms.name'; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/metabox-link-suggestions.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/metabox-link-suggestions.php new file mode 100644 index 00000000..1b6d1d03 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/metabox-link-suggestions.php @@ -0,0 +1,115 @@ +is_block_editor() ) { + return; + } + + $post_types = $this->get_post_types(); + + array_map( [ $this, 'add_meta_box' ], $post_types ); + } + + /** + * Returns whether the link suggestions are available for the given post type. + * + * @param string $post_type The post type for which to check if the link suggestions are available. + * + * @return bool Whether the link suggestions are available for the given post type. + */ + public function is_available( $post_type ) { + $allowed_post_types = $this->get_post_types(); + + return in_array( $post_type, $allowed_post_types, true ); + } + + /** + * Renders the content for the metabox. We leave this empty because we render with React. + * + * @return void + */ + public function render_metabox_content() { + echo ''; + } + + /** + * Returns all the public post types. + * + * @return array The supported post types. + */ + protected function get_post_types() { + $prominent_words_support = new WPSEO_Premium_Prominent_Words_Support(); + + return $prominent_words_support->get_supported_post_types(); + } + + /** + * Returns whether or not the Link Suggestions are enabled. + * + * @return bool Whether or not the link suggestions are enabled. + */ + public function is_enabled() { + return WPSEO_Options::get( 'enable_link_suggestions', false ); + } + + /** + * Adds a meta box for the given post type. + * + * @param string $post_type The post type to add a meta box for. + * + * @return void + */ + protected function add_meta_box( $post_type ) { + if ( ! $this->is_available( $post_type ) || ! $this->is_enabled() ) { + return; + } + + if ( ! WPSEO_Premium_Metabox::are_content_endpoints_available() ) { + return; + } + + add_meta_box( + 'yoast_internal_linking', + sprintf( + /* translators: %s expands to Yoast */ + __( '%s internal linking', 'wordpress-seo-premium' ), + 'Yoast' + ), + [ $this, 'render_metabox_content' ], + $post_type, + 'side', + 'low', + [ + '__block_editor_compatible_meta_box' => true, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/multi-keyword.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/multi-keyword.php new file mode 100644 index 00000000..1b9d7d74 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/multi-keyword.php @@ -0,0 +1,118 @@ + 'hidden', + 'title' => 'focuskeywords', + ]; + } + + return $field_defs; + } + + /** + * Add field in which we can save multiple keyword synonyms. + * + * @param array $field_defs The current fields definitions. + * + * @return array Field definitions with our added field. + */ + public function add_keyword_synonyms_input( $field_defs ) { + if ( is_array( $field_defs ) ) { + $field_defs['keywordsynonyms'] = [ + 'type' => 'hidden', + 'title' => 'keywordsynonyms', + ]; + } + + return $field_defs; + } + + /** + * Adds a field to the taxonomy metabox in which we can save multiple keywords. + * + * @param array $fields The current fields. + * + * @return array Fields including our added field. + */ + public function add_focus_keywords_taxonomy_input( $fields ) { + if ( is_array( $fields ) ) { + $fields['focuskeywords'] = [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + ]; + } + + return $fields; + } + + /** + * Adds a field in which we can save multiple keyword synonyms. + * + * @param array $fields The current fields. + * + * @return array Fields including our added field. + */ + public function add_keyword_synonyms_taxonomy_input( $fields ) { + if ( is_array( $fields ) ) { + $fields['keywordsynonyms'] = [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + ]; + } + + return $fields; + } + + /** + * Extends the taxonomy defaults. + * + * @param array $defaults The defaults to extend. + * + * @return array The extended defaults. + */ + public function register_taxonomy_metafields( $defaults ) { + $defaults['wpseo_focuskeywords'] = ''; + $defaults['wpseo_keywordsynonyms'] = ''; + + return $defaults; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/post-watcher.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/post-watcher.php new file mode 100644 index 00000000..156d342d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/post-watcher.php @@ -0,0 +1,600 @@ +is_rest_request() && ! $this->post_redirect_can_be_made( $pagenow ) ) { + return; + } + + // Detect a post slug change. + add_action( 'post_updated', [ $this, 'detect_slug_change' ], 12, 3 ); + + // Detect a post trash. + add_action( 'wp_trash_post', [ $this, 'detect_post_trash' ] ); + + // Detect a post untrash. + add_action( 'untrashed_post', [ $this, 'detect_post_untrash' ] ); + + // Detect a post delete. + add_action( 'before_delete_post', [ $this, 'detect_post_delete' ] ); + } + + /** + * Registers the page scripts. + * + * @codeCoverageIgnore Method used WordPress functions. + * + * @param string $current_page The page that is opened at the moment. + * + * @return void + */ + public function page_scripts( $current_page ) { + // Register the scripts. + parent::page_scripts( $current_page ); + + /** + * If in Gutenberg, always load these scripts. + */ + if ( WPSEO_Metabox::is_post_edit( $current_page ) && wp_script_is( 'wp-editor', 'enqueued' ) ) { + /** + * Filter: 'Yoast\WP\SEO\show_post_redirect_slug_change_notification' - Allows to suppress the block editor notification + * about automatic redirect creation when the post slug is changed. + * + * The middleware used to intercept the redirect creation and trigger the notice can interfere with the API + * call since it passes the full response on instead of its content. Using this filter, it can be disabled. + * Notice that this doesn't prevent the actual redirect from being created. + * + * @since 21.9 + * + * @param bool $show_notification Determines if the notification should be displayed. + */ + $show_notification = apply_filters( 'Yoast\WP\SEO\show_post_redirect_slug_change_notification', true ); + + if ( $show_notification ) { + wp_enqueue_script( 'wp-seo-premium-redirect-notifications' ); + wp_enqueue_script( 'wp-seo-premium-redirect-notifications-gutenberg' ); + } + return; + } + + if ( ! $this->post_redirect_can_be_made( $current_page ) ) { + return; + } + + if ( WPSEO_Metabox::is_post_overview( $current_page ) ) { + wp_enqueue_script( 'wp-seo-premium-quickedit-notification' ); + } + + if ( WPSEO_Metabox::is_post_edit( $current_page ) ) { + wp_enqueue_script( 'wp-seo-premium-redirect-notifications' ); + } + } + + /** + * Detect if the slug changed, hooked into 'post_updated'. + * + * @param int $post_id The ID of the post. + * @param WP_Post $post The post with the new values. + * @param WP_Post $post_before The post with the previous values. + * + * @return bool + */ + public function detect_slug_change( $post_id, $post, $post_before ) { + // Bail if this is a multisite installation and the site has been switched. + if ( is_multisite() && ms_is_switched() ) { + return false; + } + + if ( ! $this->is_redirect_relevant( $post, $post_before ) ) { + return false; + } + + $this->remove_colliding_redirect( $post, $post_before ); + + /** + * Filter: 'Yoast\WP\SEO\post_redirect_slug_change' - Check if a redirect should be created + * on post slug change. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param bool $create_redirect Determines if a redirect should be created for this post slug change. + * @param int $post_id The ID of the post. + * @param WP_Post $post The current post object. + * @param WP_Post $previous_post The previous post object. + */ + $create_redirect = apply_filters( 'Yoast\WP\SEO\post_redirect_slug_change', false, $post_id, $post, $post_before ); + + if ( $create_redirect === true ) { + return true; + } + + $old_url = $this->get_target_url( $post_before ); + if ( ! $old_url ) { + return false; + } + + // If the post URL wasn't public before, or isn't public now, don't even check if we have to redirect. + if ( ! $this->check_public_post_status( $post_before ) || ! $this->check_public_post_status( $post ) ) { + return false; + } + + // Get the new URL. + $new_url = $this->get_target_url( $post_id ); + + // Maybe we can undo the created redirect. + $created_redirect = $this->notify_undo_slug_redirect( $old_url, $new_url, $post_id, 'post' ); + + if ( $created_redirect ) { + $redirect_info = [ + 'origin' => $created_redirect->get_origin(), + 'target' => $created_redirect->get_target(), + 'type' => $created_redirect->get_type(), + 'format' => $created_redirect->get_format(), + ]; + update_post_meta( $post_id, '_yoast_post_redirect_info', $redirect_info ); + } + } + + /** + * Removes a colliding redirect if it is found. + * + * @param WP_Post $post The post with the new values. + * @param WP_Post $post_before The post with the previous values. + * + * @return void + */ + protected function remove_colliding_redirect( $post, $post_before ) { + $redirect = $this->get_redirect_manager()->get_redirect( $this->get_target_url( $post ) ); + if ( $redirect === false ) { + return; + } + + if ( $redirect->get_target() !== trim( $this->get_target_url( $post_before ), '/' ) ) { + return; + } + + $this->get_redirect_manager()->delete_redirects( [ $redirect ] ); + } + + /** + * Determines if redirect is relevant for the provided post. + * + * @param WP_Post $post The post with the new values. + * @param WP_Post $post_before The post with the previous values. + * + * @return bool True if a redirect might be relevant. + */ + protected function is_redirect_relevant( $post, $post_before ) { + // Check if the post type is enabled for redirects. + $post_type = get_post_type( $post ); + + /** + * Filter: 'Yoast\WP\SEO\redirect_post_type' - Check if a redirect should be created + * on post slug change for specified post type. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param bool $create_redirect Determines if a redirect should be created for this post type. + * @param string $post_type The post type that is being checked for. + */ + $post_type_accessible = apply_filters( 'Yoast\WP\SEO\redirect_post_type', WPSEO_Post_Type::is_post_type_accessible( $post_type ), $post_type ); + + if ( ! $post_type_accessible ) { + return false; + } + + // If post is a revision do not create redirect. + if ( wp_is_post_revision( $post_before ) !== false && wp_is_post_revision( $post ) !== false ) { + return false; + } + + // There is no slug change. + if ( $this->get_target_url( $post ) === $this->get_target_url( $post_before ) ) { + return false; + } + + return true; + } + + /** + * Checks whether the given post is public or not. + * + * @param int|WP_Post $post Post ID or post object. + * + * @return bool + */ + private function check_public_post_status( $post ) { + $public_post_statuses = [ + 'publish', + 'static', + 'private', + ]; + + // Need to set $post_id for backward compatibility with the filter, as $post can also be an object now. + if ( is_int( $post ) ) { + $post_id = $post; + } + else { + $post_id = $post->ID; + } + + /** + * Filter: 'Yoast\WP\SEO\public_post_statuses' - Allow changing the statuses that are expected + * to have caused a URL to be public. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param array $published_post_statuses The statuses that'll be treated as published. + * @param object $post The post object we're doing the published check for. + */ + $public_post_statuses = apply_filters( 'Yoast\WP\SEO\public_post_statuses', $public_post_statuses, $post_id ); + + return ( in_array( get_post_status( $post ), $public_post_statuses, true ) ); + } + + /** + * Offer to create a redirect from the post that is about to get trashed. + * + * @param int $post_id The current post ID. + * + * @return void + */ + public function detect_post_trash( $post_id ) { + + $url = $this->check_if_redirect_needed( $post_id ); + if ( ! empty( $url ) ) { + + $id = 'wpseo_redirect_' . md5( $url ); + + // Format the message. + $message = sprintf( + /* translators: %1$s: Yoast SEO Premium, %2$s: List with actions, %3$s: , %4$s: , %5$s: Slug to post */ + __( '%1$s detected that you moved a post (%5$s) to the trash. You can either: %2$s Don\'t know what to do? %3$sRead this post%4$s.', 'wordpress-seo-premium' ), + 'Yoast SEO Premium', + $this->get_delete_action_list( $url, $id ), + '', + '', + '' . $url . '' + ); + + $this->create_notification( $message, 'trash' ); + } + } + + /** + * Offer to create a redirect from the post that is about to get restored from the trash. + * + * @param int $post_id The current post ID. + * + * @return void + */ + public function detect_post_untrash( $post_id ) { + $redirect = $this->check_if_redirect_needed( $post_id, true ); + + if ( $redirect ) { + // Format the message. + $message = sprintf( + /* translators: %1$s: Yoast SEO Premium, %2$s: , %3$s: , %4$s: Slug to post */ + __( '%1$s detected that you restored a post (%4$s) from the trash, for which a redirect was created. %2$sClick here to remove the redirect%3$s', 'wordpress-seo-premium' ), + 'Yoast SEO Premium', + '', + '', + '' . $redirect->get_origin() . '' + ); + + $this->create_notification( $message, 'untrash' ); + } + } + + /** + * Offer to create a redirect from the post that is about to get deleted. + * + * @param int $post_id The current post ID. + * + * @return void + */ + public function detect_post_delete( $post_id ) { + + // We don't want to redirect menu items. + if ( is_nav_menu_item( $post_id ) ) { + return; + } + + // When the post comes from the trash or if the post is a revision then skip further execution. + if ( get_post_status( $post_id ) === 'trash' || wp_is_post_revision( $post_id ) ) { + return; + } + + // Is a redirect needed. + $url = $this->check_if_redirect_needed( $post_id ); + if ( ! empty( $url ) ) { + $this->set_delete_notification( $url ); + } + } + + /** + * Look up if URL does exists in the current redirects. + * + * @param string $url URL to search for. + * + * @return bool + */ + protected function get_redirect( $url ) { + return $this->get_redirect_manager()->get_redirect( $url ); + } + + /** + * This method checks if a redirect is needed. + * + * This method will check if URL as redirect already exists. + * + * @param int $post_id The current post ID. + * @param bool $should_exist Boolean to determine if the URL should be exist as a redirect. + * + * @return WPSEO_Redirect|string|bool + */ + protected function check_if_redirect_needed( $post_id, $should_exist = false ) { + // If the post type is not public, don't redirect. + $post_type = get_post_type_object( get_post_type( $post_id ) ); + + if ( ! $post_type ) { + return false; + } + + if ( ! in_array( $post_type->name, $this->get_included_automatic_redirection_post_types(), true ) ) { + return false; + } + + // The post types should be a public one. + if ( $this->check_public_post_status( $post_id ) ) { + // Get the right URL. + $url = $this->get_target_url( $post_id ); + + // If $url is not a single /, there may be the option to create a redirect. + if ( $url !== '/' ) { + // Message should only be shown if there isn't already a redirect. + $redirect = $this->get_redirect( $url ); + + if ( is_a( $redirect, 'WPSEO_Redirect' ) && $should_exist ) { + return $redirect; + } + if ( ! is_a( $redirect, 'WPSEO_Redirect' ) && ! $should_exist ) { + return $url; + } + } + } + return false; + } + + /** + * Retrieves the post types to create automatic redirects for. + * + * @return array Post types to include to create automatic redirects for. + */ + protected function get_included_automatic_redirection_post_types() { + $post_types = WPSEO_Post_Type::get_accessible_post_types(); + + /** + * Filter: 'Yoast\WP\SEO\automatic_redirection_post_types' - Post types to create + * automatic redirects for. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param array $included_post_types Array with the post type names to include to automatic redirection. + */ + $included_post_types = apply_filters( 'Yoast\WP\SEO\automatic_redirection_post_types', $post_types ); + + if ( ! is_array( $included_post_types ) ) { + $included_post_types = []; + } + + return $included_post_types; + } + + /** + * Retrieves the path of the URL for the supplied post. + * + * @param int|WP_Post $post The current post ID. + * + * @return string The URL for the supplied post. + */ + protected function get_target_url( $post ) { + // Use the correct URL path. + $url = wp_parse_url( get_permalink( $post ) ); + if ( is_array( $url ) && isset( $url['path'] ) ) { + return $url['path']; + } + + return ''; + } + + /** + * Get the old URL. + * + * @param object $post The post object with the new values. + * @param object $post_before The post object with the old values. + * + * @return bool|string + */ + protected function get_old_url( $post, $post_before ) { + $wpseo_old_post_url = $this->get_post_old_post_url(); + + if ( ! empty( $wpseo_old_post_url ) ) { + return $wpseo_old_post_url; + } + + // Check if request is inline action and new slug is not old slug, if so set wpseo_post_old_url. + $action = $this->get_post_action(); + + $url_before = $this->get_target_url( $post_before ); + if ( ! empty( $action ) && $action === 'inline-save' && $this->get_target_url( $post ) !== $url_before ) { + return $url_before; + } + + return false; + } + + /** + * Determines whether we're dealing with a REST request or not. + * + * @return bool Whether or not the current request is a REST request. + */ + private function is_rest_request() { + return defined( 'REST_REQUEST' ) && REST_REQUEST === true; + } + + /** + * Returns the undo message for the post. + * + * @return string + */ + protected function get_undo_slug_notification() { + /* translators: %1$s: Yoast SEO Premium, %2$s and %3$s expand to a link to the admin page. */ + return __( + '%1$s created a %2$sredirect%3$s from the old post URL to the new post URL.', + 'wordpress-seo-premium' + ); + } + + /** + * Returns the delete message for the post. + * + * @return string + */ + protected function get_delete_notification() { + /* translators: %1$s: Yoast SEO Premium, %2$s: List with actions, %3$s: , %4$s: , %5%s: The removed url. */ + return __( + '%1$s detected that you deleted a post (%5$s). You can either: %2$s Don\'t know what to do? %3$sRead this post %4$s.', + 'wordpress-seo-premium' + ); + } + + /** + * Is the current page valid to make a redirect from. + * + * @param string $current_page The currently opened page. + * + * @return bool True when a redirect can be made on this page. + */ + protected function post_redirect_can_be_made( $current_page ) { + return $this->is_post_page( $current_page ) || $this->is_action_inline_save() || $this->is_nested_pages( $current_page ); + } + + /** + * Is the current page related to a post (edit/overview). + * + * @param string $current_page The current opened page. + * + * @return bool True when page is a post edit/overview page. + */ + protected function is_post_page( $current_page ) { + return ( in_array( $current_page, [ 'edit.php', 'post.php' ], true ) ); + } + + /** + * Is the page in an AJAX-request and is the action "inline save". + * + * @return bool True when in an AJAX-request and the action is inline-save. + */ + protected function is_action_inline_save() { + return ( wp_doing_ajax() && $this->get_post_action() === 'inline-save' ); + } + + /** + * Checks if current page is loaded by nested pages. + * + * @param string $current_page The current page. + * + * @return bool True when the current page is nested pages. + */ + protected function is_nested_pages( $current_page ) { + // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Reason: We are not controlling the request. + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are strictly comparing only. + return ( $current_page === 'admin.php' && isset( $_GET['page'] ) && is_string( $_GET['page'] ) && wp_unslash( $_GET['page'] ) === 'nestedpages' ); + // phpcs:enable WordPress.Security.NonceVerification.Recommended. + } + + /** + * Retrieves wpseo_old_post_url field from the post. + * + * @return string|bool + */ + protected function get_post_old_post_url() { + // phpcs:disable WordPress.Security.NonceVerification.Missing -- Reason: Seems to be only used in tests. + if ( isset( $_POST['wpseo_old_post_url'] ) && is_string( $_POST['wpseo_old_post_url'] ) ) { + return sanitize_text_field( wp_unslash( $_POST['wpseo_old_post_url'] ) ); + } + // phpcs:enable WordPress.Security.NonceVerification.Missing. + return false; + } + + /** + * Retrieves action field from the post. + * + * @return string|bool + */ + protected function get_post_action() { + // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Reason: We are not controlling the request. + if ( isset( $_POST['action'] ) && is_string( $_POST['action'] ) ) { + return sanitize_text_field( wp_unslash( $_POST['action'] ) ); + } + // phpcs:enable WordPress.Security.NonceVerification.Recommended. + return false; + } + + /** + * Display the undo redirect notification + * + * @param WPSEO_Redirect $redirect The old URL to the post. + * @param int $object_id The post or term ID. + * @param string $object_type The object type: post or term. + * + * @return void + */ + protected function set_undo_slug_notification( WPSEO_Redirect $redirect, $object_id, $object_type ) { + + if ( ! $this->is_rest_request() && ! wp_doing_ajax() ) { + parent::set_undo_slug_notification( $redirect, $object_id, $object_type ); + + return; + } + + header( 'X-Yoast-Redirect-Created: 1; origin=' . $redirect->get_origin() . '; target=' . $redirect->get_target() . '; type=' . $redirect->get_type() . '; objectId=' . $object_id . '; objectType=' . $object_type ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-asset-js-l10n.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-asset-js-l10n.php new file mode 100644 index 00000000..f5a63afb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-asset-js-l10n.php @@ -0,0 +1,47 @@ + $this->get_translations( 'wordpress-seo-premiumjs' ), + ]; + wp_localize_script( $script_handle, 'wpseoPremiumJSL10n', $translations ); + } + + /** + * Returns translations necessary for JS files. + * + * @param string $component The component to retrieve the translations for. + * @return object|null The translations in a Jed format for JS files or null + * if the translation file could not be found. + */ + protected function get_translations( $component ) { + $locale = get_user_locale(); + + $file = plugin_dir_path( WPSEO_PREMIUM_FILE ) . '/languages/' . $component . '-' . $locale . '.json'; + if ( file_exists( $file ) ) { + $file = file_get_contents( $file ); + if ( is_string( $file ) && $file !== '' ) { + return json_decode( $file, true ); + } + } + + return null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-assets.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-assets.php new file mode 100644 index 00000000..c9ef489c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-assets.php @@ -0,0 +1,479 @@ +get_version(); + $scripts = $this->get_scripts( $version ); + $styles = $this->get_styles( $version ); + + array_walk( $scripts, [ $this, 'register_script' ] ); + array_walk( $styles, [ $this, 'register_style' ] ); + } + + /** + * Registers the assets for premium. + * + * @return void + */ + public function register_frontend_assets() { + $version = $this->get_version(); + $scripts = $this->get_frontend_scripts( $version ); + + array_walk( $scripts, [ $this, 'register_script' ] ); + } + + /** + * Retrieves a flatten version. + * + * @codeCoverageIgnore Method uses a dependency. + * + * @return string The flatten version. + */ + protected function get_version() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + + return $asset_manager->flatten_version( WPSEO_PREMIUM_VERSION ); + } + + /** + * Retrieves an array of script to register. + * + * @codeCoverageIgnore Returns a simple dataset. + * + * @param string $version Current version number. + * + * @return array The scripts. + */ + protected function get_frontend_scripts( $version ) { + return [ + [ + 'name' => 'yoast-seo-premium-frontend-inspector', + 'path' => 'assets/js/dist/', + 'filename' => 'frontend-inspector-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'lodash', + 'react', + 'react-dom', + 'wp-data', + 'wp-dom-ready', + 'wp-element', + 'wp-i18n', + WPSEO_Admin_Asset_Manager::PREFIX . 'frontend-inspector-resources', + WPSEO_Admin_Asset_Manager::PREFIX . 'prop-types-package', + WPSEO_Admin_Asset_Manager::PREFIX . 'style-guide', + WPSEO_Admin_Asset_Manager::PREFIX . 'yoast-components', + ], + 'in_footer' => true, + ], + ]; + } + + /** + * Retrieves an array of script to register. + * + * @codeCoverageIgnore Returns a simple dataset. + * + * @param string $version Current version number. + * + * @return array The scripts. + */ + protected function get_scripts( $version ) { + return [ + [ + 'name' => 'yoast-seo-premium-metabox', + 'path' => 'assets/js/dist/', + 'filename' => 'wp-seo-premium-metabox-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'clipboard', + 'jquery', + 'regenerator-runtime', + 'underscore', + 'wp-api-fetch', + 'wp-components', + 'wp-data', + 'wp-element', + 'wp-i18n', + 'wp-util', + WPSEO_Admin_Asset_Manager::PREFIX . 'analysis', + WPSEO_Admin_Asset_Manager::PREFIX . 'editor-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'help-scout-beacon', + WPSEO_Admin_Asset_Manager::PREFIX . 'search-metadata-previews', + WPSEO_Admin_Asset_Manager::PREFIX . 'social-metadata-forms', + WPSEO_Admin_Asset_Manager::PREFIX . 'social-metadata-previews-package', + WPSEO_Admin_Asset_Manager::PREFIX . 'yoast-components', + ], + ], + [ + 'name' => 'yoast-seo-premium-draft-js-plugins', + 'path' => 'assets/js/dist/', + 'filename' => 'wp-seo-premium-draft-js-plugins-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'in_footer' => true, + 'dependencies' => [ + WPSEO_Admin_Asset_Manager::PREFIX . 'search-metadata-previews', + ], + ], + [ + 'name' => 'yoast-seo-premium-workouts', + 'path' => 'assets/js/dist/', + 'filename' => 'workouts-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'clipboard', + 'lodash', + 'regenerator-runtime', + 'wp-api-fetch', + 'wp-a11y', + 'wp-components', + 'wp-compose', + 'wp-data', + 'wp-dom-ready', + 'wp-element', + 'wp-i18n', + WPSEO_Admin_Asset_Manager::PREFIX . 'analysis', + WPSEO_Admin_Asset_Manager::PREFIX . 'admin-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'react-select', + WPSEO_Admin_Asset_Manager::PREFIX . 'yoast-components', + ], + ], + [ + 'name' => 'yoast-seo-social-metadata-previews-package', + 'path' => 'assets/js/dist/yoast/', + 'filename' => 'social-metadata-previews-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'in_footer' => true, + 'dependencies' => [ + 'lodash', + 'wp-a11y', + 'wp-components', + 'wp-element', + 'wp-i18n', + WPSEO_Admin_Asset_Manager::PREFIX . 'analysis', + WPSEO_Admin_Asset_Manager::PREFIX . 'draft-js', + WPSEO_Admin_Asset_Manager::PREFIX . 'editor-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'helpers', + WPSEO_Admin_Asset_Manager::PREFIX . 'replacement-variable-editor', + WPSEO_Admin_Asset_Manager::PREFIX . 'social-metadata-forms', + WPSEO_Admin_Asset_Manager::PREFIX . 'style-guide', + WPSEO_Admin_Asset_Manager::PREFIX . 'styled-components', + WPSEO_Admin_Asset_Manager::PREFIX . 'yoast-components', + ], + ], + [ + 'name' => 'yoast-social-metadata-previews', + 'path' => 'assets/js/dist/', + 'filename' => 'yoast-premium-social-metadata-previews-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'in_footer' => true, + 'dependencies' => [ + 'wp-components', + 'wp-element', + 'wp-plugins', + WPSEO_Admin_Asset_Manager::PREFIX . 'editor-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'search-metadata-previews', + WPSEO_Admin_Asset_Manager::PREFIX . 'social-metadata-previews-package', + ], + ], + [ + 'name' => 'wp-seo-premium-custom-fields-plugin', + 'path' => 'assets/js/dist/', + 'filename' => 'wp-seo-premium-custom-fields-plugin-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'jquery', + ], + ], + [ + 'name' => 'wp-seo-premium-quickedit-notification', + 'path' => 'assets/js/dist/', + 'filename' => 'wp-seo-premium-quickedit-notification-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'jquery', + 'wp-api', + 'wp-api-fetch', + ], + ], + [ + 'name' => 'wp-seo-premium-redirect-notifications', + 'path' => 'assets/js/dist/', + 'filename' => 'wp-seo-premium-redirect-notifications-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'jquery', + 'wp-api', + 'wp-api-fetch', + ], + ], + [ + 'name' => 'wp-seo-premium-redirect-notifications-gutenberg', + 'path' => 'assets/js/dist/', + 'filename' => 'wp-seo-premium-redirect-notifications-gutenberg-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'wp-api-fetch', + 'wp-components', + 'wp-element', + 'wp-i18n', + 'wp-plugins', + WPSEO_Admin_Asset_Manager::PREFIX . 'yoast-components', + ], + ], + [ + 'name' => 'wp-seo-premium-dynamic-blocks', + 'path' => 'assets/js/dist/', + 'filename' => 'dynamic-blocks-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'lodash', + 'wp-blocks', + 'wp-data', + 'wp-dom-ready', + 'wp-hooks', + 'wp-server-side-render', + ], + ], + [ + 'name' => 'wp-seo-premium-blocks', + 'path' => 'assets/js/dist/', + 'filename' => 'blocks-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'wp-block-editor', + 'wp-blocks', + 'wp-components', + 'wp-data', + 'wp-dom-ready', + 'wp-element', + 'wp-i18n', + 'yoast-seo-premium-metabox', + WPSEO_Admin_Asset_Manager::PREFIX . 'editor-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'yoast-components', + ], + ], + [ + 'name' => 'yoast-premium-prominent-words-indexation', + 'path' => 'assets/js/dist/', + 'filename' => 'yoast-premium-prominent-words-indexation-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'regenerator-runtime', + WPSEO_Admin_Asset_Manager::PREFIX . 'analysis', + WPSEO_Admin_Asset_Manager::PREFIX . 'editor-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'indexation', + ], + ], + [ + 'name' => 'elementor-premium', + 'path' => 'assets/js/dist/', + 'filename' => 'wp-seo-premium-elementor-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'clipboard', + 'jquery', + 'regenerator-runtime', + 'underscore', + 'wp-api-fetch', + 'wp-components', + 'wp-data', + 'wp-element', + 'wp-hooks', + 'wp-i18n', + 'wp-util', + WPSEO_Admin_Asset_Manager::PREFIX . 'analysis', + WPSEO_Admin_Asset_Manager::PREFIX . 'editor-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'help-scout-beacon', + WPSEO_Admin_Asset_Manager::PREFIX . 'search-metadata-previews', + WPSEO_Admin_Asset_Manager::PREFIX . 'social-metadata-forms', + WPSEO_Admin_Asset_Manager::PREFIX . 'social-metadata-previews-package', + WPSEO_Admin_Asset_Manager::PREFIX . 'yoast-components', + ], + 'footer' => true, + ], + [ + 'name' => 'wp-seo-premium-ai-generator', + 'path' => 'assets/js/dist/', + 'filename' => 'ai-generator-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'lodash', + 'regenerator-runtime', + 'wp-api-fetch', + 'wp-components', + 'wp-data', + 'wp-dom-ready', + 'wp-element', + 'wp-hooks', + 'wp-i18n', + WPSEO_Admin_Asset_Manager::PREFIX . 'analysis', + WPSEO_Admin_Asset_Manager::PREFIX . 'editor-modules', + WPSEO_Admin_Asset_Manager::PREFIX . 'ui-library-package', + WPSEO_Admin_Asset_Manager::PREFIX . 'react-helmet-package', + ], + ], + [ + 'name' => 'wp-seo-premium-manage-ai-consent-button', + 'path' => 'assets/js/dist/', + 'filename' => 'manage-ai-consent-button-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'lodash', + 'regenerator-runtime', + 'wp-api-fetch', + 'wp-components', + 'wp-data', + 'wp-dom-ready', + 'wp-element', + 'wp-hooks', + 'wp-i18n', + WPSEO_Admin_Asset_Manager::PREFIX . 'ui-library-package', + WPSEO_Admin_Asset_Manager::PREFIX . 'react-helmet-package', + ], + ], + [ + 'name' => 'wp-seo-premium-introductions', + 'path' => 'assets/js/dist/', + 'filename' => 'introductions-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + 'dependencies' => [ + 'lodash', + 'regenerator-runtime', + 'wp-api-fetch', + 'wp-components', + 'wp-data', + 'wp-dom-ready', + 'wp-element', + 'wp-hooks', + 'wp-i18n', + WPSEO_Admin_Asset_Manager::PREFIX . 'introductions', + WPSEO_Admin_Asset_Manager::PREFIX . 'ui-library-package', + WPSEO_Admin_Asset_Manager::PREFIX . 'react-helmet-package', + ], + ], + ]; + } + + /** + * Retrieves an array of styles to register. + * + * @codeCoverageIgnore Returns a simple dataset. + * + * @param string $version Current version number. + * + * @return array The styles. + */ + protected function get_styles( $version ) { + $rtl_suffix = ( is_rtl() ) ? '-rtl' : ''; + + return [ + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-metabox', + 'source' => 'assets/css/dist/premium-metabox-' . $version . '.css', + 'dependencies' => [], + ], + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-workouts', + 'source' => 'assets/css/dist/premium-workouts-' . $version . '.css', + 'dependencies' => [ + 'wp-components', + ], + ], + [ + 'name' => 'elementor-premium', + 'source' => 'assets/css/dist/premium-elementor-' . $version . '.css', + 'dependencies' => [ + WPSEO_Admin_Asset_Manager::PREFIX . 'premium-metabox', + ], + ], + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-draft-js-plugins', + 'source' => 'assets/css/dist/premium-draft-js-plugins-' . $version . '.css', + 'dependencies' => [], + ], + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-thank-you', + 'source' => 'assets/css/dist/premium-thank-you-' . $version . '.css', + 'dependencies' => [], + ], + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-settings', + 'source' => 'assets/css/dist/premium-settings-' . $version . '.css', + 'dependencies' => [], + ], + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-post-overview', + 'source' => 'assets/css/dist/premium-post-overview-' . $version . '.css', + 'dependencies' => [], + ], + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-tailwind', + 'source' => 'assets/css/dist/premium-tailwind-' . $version . $rtl_suffix . '.css', + 'dependencies' => [], + ], + [ + 'name' => WPSEO_Admin_Asset_Manager::PREFIX . 'premium-ai-generator', + 'source' => 'assets/css/dist/premium-ai-generator-' . $version . $rtl_suffix . '.css', + 'dependencies' => [ + WPSEO_Admin_Asset_Manager::PREFIX . 'premium-tailwind', + WPSEO_Admin_Asset_Manager::PREFIX . 'monorepo', + ], + ], + ]; + } + + /** + * Registers the given script to WordPress. + * + * @codeCoverageIgnore Method calls a WordPress function. + * + * @param array $script The script to register. + * + * @return void + */ + protected function register_script( $script ) { + $url = plugin_dir_url( WPSEO_PREMIUM_FILE ) . $script['path'] . $script['filename']; + + if ( defined( 'YOAST_SEO_PREMIUM_DEV_SERVER' ) && YOAST_SEO_PREMIUM_DEV_SERVER ) { + $url = 'http://localhost:8081/' . $script['filename']; + } + + $in_footer = ( $script['in_footer'] ?? false ); + + wp_register_script( + $script['name'], + $url, + $script['dependencies'], + WPSEO_PREMIUM_VERSION, + $in_footer + ); + } + + /** + * Registers the given style to WordPress. + * + * @codeCoverageIgnore Method calls a WordPress function. + * + * @param array $style The style to register. + * + * @return void + */ + protected function register_style( $style ) { + wp_register_style( + $style['name'], + plugin_dir_url( WPSEO_PREMIUM_FILE ) . $style['source'], + $style['dependencies'], + WPSEO_PREMIUM_VERSION + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-expose-shortlinks.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-expose-shortlinks.php new file mode 100644 index 00000000..2f2a2f2d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-expose-shortlinks.php @@ -0,0 +1,36 @@ + '', + 'success' => false, + 'status' => null, + ]; + } + + $this->import = $import; + $this->htaccess_import(); + $this->do_plugin_imports(); + $this->do_csv_imports(); + + return $this->import; + } + + /** + * Outputs a tab header for the htaccess import block. + * + * @return void + */ + public function redirects_import_header() { + /* translators: %s: '.htaccess' file name */ + echo '' . esc_html__( 'Import redirects', 'wordpress-seo-premium' ) . ''; + } + + /** + * Adding the import block for redirects. + * + * @return void + */ + public function add_redirect_import_block() { + $import = $this->import; + + // Display the forms. + require WPSEO_PREMIUM_PATH . 'classes/views/import-redirects.php'; + } + + /** + * Do .htaccess file import. + * + * @return void + */ + protected function htaccess_import() { + $htaccess = $this->get_posted_htaccess(); + + if ( ! $htaccess || $htaccess === '' ) { + return; + } + + try { + $loader = new WPSEO_Redirect_HTAccess_Loader( $htaccess ); + $result = $this->import_redirects_from_loader( $loader ); + + $this->set_import_success( $result ); + } + catch ( WPSEO_Redirect_Import_Exception $e ) { + $this->set_import_message( $e->getMessage() ); + } + } + + /** + * Handles plugin imports. + * + * @return void + */ + protected function do_plugin_imports() { + $import_plugin = $this->get_posted_import_plugin(); + + if ( ! $import_plugin ) { + return; + } + + try { + $loader = $this->get_plugin_loader( $import_plugin ); + $result = $this->import_redirects_from_loader( $loader ); + + $this->set_import_success( $result ); + } + catch ( WPSEO_Redirect_Import_Exception $e ) { + $this->set_import_message( $e->getMessage() ); + } + } + + /** + * Processes a CSV import. + * + * @return void + */ + protected function do_csv_imports() { + $redirects_csv_file = $this->get_posted_csv_file(); + + if ( ! $redirects_csv_file ) { + return; + } + + try { + $this->validate_uploaded_csv_file( $redirects_csv_file ); + + // Load the redirects from the uploaded file. + $loader = new WPSEO_Redirect_CSV_Loader( $redirects_csv_file['tmp_name'] ); + $result = $this->import_redirects_from_loader( $loader ); + + $this->set_import_success( $result ); + } + catch ( WPSEO_Redirect_Import_Exception $e ) { + $this->set_import_message( $e->getMessage() ); + } + } + + /** + * Sets the import message. + * + * @param string $import_message The message. + * + * @return void + */ + protected function set_import_message( $import_message ) { + $this->import->msg .= $import_message; + } + + /** + * Sets the import success state to true. + * + * @param array $result The import result. + * + * @return void + */ + protected function set_import_success( array $result ) { + $this->import->success = true; + + $this->set_import_message( + $this->get_success_message( $result['total_imported'], $result['total_redirects'] ) + ); + } + + /** + * Retrieves the success message when import has been successful. + * + * @param int $total_imported The number of imported redirects. + * @param int $total_redirects The total amount of redirects. + * + * @return string The generated message. + */ + protected function get_success_message( $total_imported, $total_redirects ) { + if ( $total_imported === $total_redirects ) { + return sprintf( + /* translators: 1: link to redirects overview, 2: closing link tag */ + __( 'All redirects have been imported successfully. Go to the %1$sredirects overview%2$s to see the imported redirects.', 'wordpress-seo-premium' ), + '', + '' + ); + } + + if ( $total_imported === 0 ) { + return sprintf( + /* translators: 1: link to redirects overview, 2: closing link tag */ + __( 'No redirects have been imported. Probably they already exist as a redirect. Go to the %1$sredirects overview%2$s to see the existing redirects.', 'wordpress-seo-premium' ), + '', + '' + ); + } + + return sprintf( + /* translators: 1: amount of imported redirects, 2: total amount of redirects, 3: link to redirects overview, 4: closing link tag */ + _n( + 'Imported %1$s/%2$s redirects successfully. Go to the %3$sredirects overview%4$s to see the imported redirect.', + 'Imported %1$s/%2$s redirects successfully. Go to the %3$sredirects overview%4$s to see the imported redirects.', + $total_imported, + 'wordpress-seo-premium' + ), + $total_imported, + $total_redirects, + '', + '' + ); + } + + /** + * Returns a loader for the given plugin. + * + * @codeCoverageIgnore + * + * @param string $plugin_name The plugin we want to load redirects from. + * + * @return bool|WPSEO_Redirect_Abstract_Loader The redirect loader. + * + * @throws WPSEO_Redirect_Import_Exception When the plugin is not installed or activated. + */ + protected function get_plugin_loader( $plugin_name ) { + global $wpdb; + + switch ( $plugin_name ) { + case 'redirection': + // Only do import if Redirections is active. + if ( ! defined( 'REDIRECTION_VERSION' ) ) { + throw new WPSEO_Redirect_Import_Exception( + __( 'Redirect import failed: the Redirection plugin is not installed or activated.', 'wordpress-seo-premium' ) + ); + } + return new WPSEO_Redirect_Redirection_Loader( $wpdb ); + case 'safe_redirect_manager': + return new WPSEO_Redirect_Safe_Redirect_Loader(); + case 'simple-301-redirects': + return new WPSEO_Redirect_Simple_301_Redirect_Loader(); + default: + throw new WPSEO_Redirect_Import_Exception( + __( 'Redirect import failed: the selected redirect plugin is not installed or activated.', 'wordpress-seo-premium' ) + ); + } + } + + /** + * Validates an uploaded CSV file. + * + * @param array $csv_file The file to upload, from the $_FILES object. + * + * @return void + * + * @throws WPSEO_Redirect_Import_Exception When the given file is invalid. + */ + protected function validate_uploaded_csv_file( $csv_file ) { + + // If no file is selected. + if ( array_key_exists( 'name', $csv_file ) && $csv_file['name'] === '' ) { + $error_message = __( 'CSV import failed: No file selected.', 'wordpress-seo-premium' ); + throw new WPSEO_Redirect_Import_Exception( $error_message ); + } + + // If the file upload failed for any other reason. + if ( array_key_exists( 'error', $csv_file ) && $csv_file['error'] !== UPLOAD_ERR_OK ) { + $error_message = __( 'CSV import failed: the provided file could not be parsed using a CSV parser.', 'wordpress-seo-premium' ); + throw new WPSEO_Redirect_Import_Exception( $error_message ); + } + + // If somehow the file is larger than it should be. + if ( $csv_file['size'] > wp_max_upload_size() ) { + $max_size_formatted = size_format( wp_max_upload_size() ); + /* translators: 1: The maximum file size */ + $error_message = sprintf( __( 'CSV import failed: the provided file is larger than %1$s.', 'wordpress-seo-premium' ), $max_size_formatted ); + throw new WPSEO_Redirect_Import_Exception( $error_message ); + } + + // If it's not a CSV file (send the csv mimetype along for multisite installations). + $filetype = wp_check_filetype( $csv_file['name'], [ 'csv' => 'text/csv' ] ); + if ( strtolower( $filetype['ext'] ) !== 'csv' ) { + $error_message = __( 'CSV import failed: the provided file is not a CSV file.', 'wordpress-seo-premium' ); + throw new WPSEO_Redirect_Import_Exception( $error_message ); + } + } + + /** + * Imports all redirects from the loader. + * + * @codeCoverageIgnore + * + * @param WPSEO_Redirect_Loader $loader The loader to import redirects from. + * + * @return array The result of the import. + * + * @throws WPSEO_Redirect_Import_Exception When there is no loader given or when there are no redirects. + */ + protected function import_redirects_from_loader( WPSEO_Redirect_Loader $loader ) { + if ( ! $loader ) { + throw new WPSEO_Redirect_Import_Exception( + __( 'Redirect import failed: we can\'t recognize this type of import.', 'wordpress-seo-premium' ) + ); + } + + $redirects = $loader->load(); + + if ( count( $redirects ) === 0 ) { + throw new WPSEO_Redirect_Import_Exception( + __( 'Redirect import failed: no redirects found.', 'wordpress-seo-premium' ) + ); + } + + $importer = new WPSEO_Redirect_Importer(); + return $importer->import( $redirects ); + } + + /** + * Retrieves the posted htaccess. + * + * @codeCoverageIgnore + * + * @return string The posted htaccess. + */ + protected function get_posted_htaccess() { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are validating a nonce here. + if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'wpseo-import' ) + && isset( $_POST['htaccess'] ) && is_string( $_POST['htaccess'] ) ) { + return sanitize_text_field( wp_unslash( $_POST['htaccess'] ) ); + } + + return ''; + } + + /** + * Retrieves the posted import plugin. + * + * @codeCoverageIgnore + * + * @return string|null The posted import plugin. + */ + protected function get_posted_import_plugin() { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are validating a nonce here. + if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'wpseo-import' ) + && isset( $_POST['wpseo'] ) && is_array( $_POST['wpseo'] ) + && isset( $_POST['wpseo']['import_plugin'] ) && is_string( $_POST['wpseo']['import_plugin'] ) ) { + return sanitize_text_field( wp_unslash( $_POST['wpseo']['import_plugin'] ) ); + } + + return null; + } + + /** + * Retrieves the posted CSV file. + * + * @codeCoverageIgnore + * + * @return array|null The posted CSV file. + */ + protected function get_posted_csv_file() { + if ( ! isset( $_FILES['redirects_csv_file'] ) ) { + return null; + } + + return $_FILES['redirects_csv_file']; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-javascript-strings.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-javascript-strings.php new file mode 100644 index 00000000..62878a0c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-javascript-strings.php @@ -0,0 +1,80 @@ + __( 'You can\'t redirect a URL to itself.', 'wordpress-seo-premium' ), + 'error_old_url' => __( 'The old URL field can\'t be empty.', 'wordpress-seo-premium' ), + 'error_regex' => __( 'The Regular Expression field can\'t be empty.', 'wordpress-seo-premium' ), + 'error_new_url' => __( 'The new URL field can\'t be empty.', 'wordpress-seo-premium' ), + 'error_saving_redirect' => __( 'Error while saving this redirect', 'wordpress-seo-premium' ), + 'error_new_type' => __( 'New type can\'t be empty.', 'wordpress-seo-premium' ), + 'unsaved_redirects' => __( 'You have unsaved redirects, are you sure you want to leave?', 'wordpress-seo-premium' ), + + /* translators: %s is replaced with the URL that will be deleted. */ + 'enter_new_url' => __( 'Please enter the new URL for %s', 'wordpress-seo-premium' ), + /* translators: variables will be replaced with from and to URLs. */ + 'redirect_saved' => __( 'Redirect created from %1$s to %2$s!', 'wordpress-seo-premium' ), + /* translators: %1$s will be replaced with the from URL. */ + 'redirect_saved_no_target' => __( '410 Redirect created from %1$s!', 'wordpress-seo-premium' ), + + 'redirect_added' => [ + 'title' => __( 'Redirect added.', 'wordpress-seo-premium' ), + 'message' => __( 'The redirect was added successfully.', 'wordpress-seo-premium' ), + ], + 'redirect_updated' => [ + 'title' => __( 'Redirect updated.', 'wordpress-seo-premium' ), + 'message' => __( 'The redirect was updated successfully.', 'wordpress-seo-premium' ), + ], + 'redirect_deleted' => [ + 'title' => __( 'Redirect deleted.', 'wordpress-seo-premium' ), + 'message' => __( 'The redirect was deleted successfully.', 'wordpress-seo-premium' ), + ], + + 'button_ok' => __( 'OK', 'wordpress-seo-premium' ), + 'button_cancel' => __( 'Cancel', 'wordpress-seo-premium' ), + 'button_save' => __( 'Save', 'wordpress-seo-premium' ), + 'button_save_anyway' => __( 'Save anyway', 'wordpress-seo-premium' ), + + 'edit_redirect' => __( 'Edit redirect', 'wordpress-seo-premium' ), + 'editing_redirect' => __( 'You are already editing a redirect, please finish this one first', 'wordpress-seo-premium' ), + + 'editAction' => __( 'Edit', 'wordpress-seo-premium' ), + 'deleteAction' => __( 'Delete', 'wordpress-seo-premium' ), + ]; + } + + /** + * Returns an array with all the translated strings. + * + * @return string[] + */ + public static function strings() { + if ( self::$strings === null ) { + self::fill(); + } + + return self::$strings; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-keyword-export-manager.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-keyword-export-manager.php new file mode 100644 index 00000000..e766f6b1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-keyword-export-manager.php @@ -0,0 +1,209 @@ +' + . esc_html__( 'Export keyphrases', 'wordpress-seo-premium' ) + . ''; + } + } + + /** + * Adds the export block for CSV. Makes it able to export redirects to CSV. + * + * @return void + */ + public function add_keyword_export_tab_block() { + // Display the forms. + if ( current_user_can( 'export' ) ) { + $yform = Yoast_Form::get_instance(); + require WPSEO_PREMIUM_PATH . 'classes/views/export-keywords.php'; + } + } + + /** + * Hooks into the request and returns a CSV file if we're on the right page with the right method and the right capabilities. + * + * @return void + */ + public function keywords_csv_export() { + + if ( ! $this->is_valid_csv_export_request() || ! current_user_can( 'export' ) ) { + return; + } + + // Check if we have a valid nonce. + check_admin_referer( 'wpseo-export' ); + + // Clean any content that has been already outputted, for example by other plugins or faulty PHP files. + if ( ob_get_contents() ) { + ob_clean(); + } + + // Make sure we don't time out during the collection of items. + set_time_limit( 0 ); + + // Set CSV headers and content. + $this->set_csv_headers(); + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- This is controlled output. + echo $this->get_csv_contents(); + + // And exit so we don't start appending HTML to our CSV file. + // NOTE: this makes this entire class untestable as it will exit all tests but WordPress seems to have no elegant way of handling this. + exit; + } + + /** + * Returns whether this is a POST request for a CSV export of posts and keywords. + * + * @return bool True if this is a valid CSV export request. + */ + protected function is_valid_csv_export_request() { + // phpcs:disable WordPress.Security.NonceVerification -- Reason: Nonce is checked in export. + // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are strictly comparing only or ignoring the value. + return ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) && wp_unslash( $_GET['page'] ) === 'wpseo_tools' ) + && ( isset( $_GET['tool'] ) && is_string( $_GET['tool'] ) && wp_unslash( $_GET['tool'] ) === 'import-export' ) + && ( isset( $_POST['export-posts'] ) && ! empty( $_POST['export-posts'] ) ); + // phpcs:enable + } + + /** + * Sets the headers to trigger a CSV download in the browser. + * + * @return void + */ + protected function set_csv_headers() { + header( 'Content-type: text/csv' ); + header( 'Content-Disposition: attachment; filename=' . gmdate( 'Y-m-d' ) . '-yoast-seo-keywords.csv' ); + header( 'Pragma: no-cache' ); + header( 'Expires: 0' ); + } + + /** + * Generates the CSV to be exported. + * + * @return void + */ + protected function get_csv_contents() { + $columns = [ 'keywords' ]; + + $post_wpseo = filter_input( INPUT_POST, 'wpseo', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + + if ( is_array( $post_wpseo ) ) { + $columns = array_merge( $columns, $this->get_export_columns( $post_wpseo ) ); + } + + $builder = new WPSEO_Export_Keywords_CSV( $columns ); + $builder->print_headers(); + $this->prepare_export( $builder, $columns ); + } + + /** + * Returns an array of the requested columns. + * + * @param array $post_object An associative array with the post data. + * + * @return array List of export columns. + */ + protected function get_export_columns( array $post_object ) { + $exportable_columns = [ + 'export-keywords-score' => 'keywords_score', + 'export-url' => 'url', + 'export-title' => 'title', + 'export-seo-title' => 'seo_title', + 'export-meta-description' => 'meta_description', + 'export-readability-score' => 'readability_score', + ]; + + // Need to call array_values to ensure that we get a numerical key back. + return array_values( array_intersect_key( $exportable_columns, $post_object ) ); + } + + /** + * Feeds post and term items to the CSV builder. + * + * @param WPSEO_Export_Keywords_CSV $builder The builder to use. + * @param array $columns The columns that need to be exported. + * + * @return void + */ + protected function prepare_export( WPSEO_Export_Keywords_CSV $builder, array $columns ) { + $this->feed_to_builder( + $builder, + new WPSEO_Export_Keywords_Post_Query( $columns, 1000 ), + new WPSEO_Export_Keywords_Post_Presenter( $columns ) + ); + + $this->feed_to_builder( + $builder, + new WPSEO_Export_Keywords_Term_Query( $columns, 1000 ), + new WPSEO_Export_Keywords_Term_Presenter( $columns ) + ); + } + + /** + * Fetches the items and feeds them to the builder. + * + * @param WPSEO_Export_Keywords_CSV $builder Builder to feed the items to. + * @param WPSEO_Export_Keywords_Query $export_query Query to use to get the items. + * @param WPSEO_Export_Keywords_Presenter $presenter Presenter to present the items in the builder format. + * + * @return void + */ + protected function feed_to_builder( WPSEO_Export_Keywords_CSV $builder, WPSEO_Export_Keywords_Query $export_query, WPSEO_Export_Keywords_Presenter $presenter ) { + $page_size = $export_query->get_page_size(); + + $page = 1; + do { + $results = $export_query->get_data( $page ); + + if ( ! is_array( $results ) ) { + break; + } + + $result_count = count( $results ); + + // Present the result. + $presented = array_map( [ $presenter, 'present' ], $results ); + + // Feed presented item to the builder. + array_walk( $presented, [ $builder, 'print_row' ] ); + + ++$page; + + // If we have the number of items per page, there will be more items ahead. + } while ( $result_count === $page_size ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-metabox.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-metabox.php new file mode 100644 index 00000000..9acc95b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-metabox.php @@ -0,0 +1,388 @@ +prominent_words_helper = $prominent_words_helper; + $this->current_page_helper = $current_page_helper; + $this->link_suggestions = $link_suggestions; + } + + /** + * Registers relevant hooks to WordPress. + * + * @codeCoverageIgnore Method uses dependencies. + * + * @return void + */ + public function register_hooks() { + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + add_action( 'admin_init', [ $this, 'initialize' ] ); + + $this->link_suggestions->register_hooks(); + } + + /** + * Checks if the content endpoints are available. + * + * @return bool Returns true if the content endpoints are available + */ + public static function are_content_endpoints_available() { + if ( function_exists( 'rest_get_server' ) ) { + $namespaces = rest_get_server()->get_namespaces(); + + return in_array( 'wp/v2', $namespaces, true ); + } + + return false; + } + + /** + * Initializes the metabox by loading the register_hooks for the dependencies. + * + * @return void + */ + public function initialize() { + if ( ! $this->load_metabox( $this->get_current_page() ) ) { + return; + } + + foreach ( $this->get_metabox_integrations() as $integration ) { + $integration->register_hooks(); + } + } + + /** + * Enqueues assets when relevant. + * + * @codeCoverageIgnore Method uses dependencies. + * + * @return void + */ + public function enqueue_assets() { + if ( ! $this->load_metabox( $this->get_current_page() ) ) { + return; + } + + wp_enqueue_script( WPSEO_Admin_Asset_Manager::PREFIX . 'premium-metabox' ); + wp_enqueue_style( WPSEO_Admin_Asset_Manager::PREFIX . 'premium-metabox' ); + + $premium_localization = new WPSEO_Premium_Asset_JS_L10n(); + $premium_localization->localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'premium-metabox' ); + + $this->send_data_to_assets(); + } + + /** + * Send data to assets by using wp_localize_script. + * Also localizes the Table of Contents heading title to the wp-seo-premium-blocks asset. + * + * @return void + */ + public function send_data_to_assets() { + $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $content_analysis = new WPSEO_Metabox_Analysis_Readability(); + $assets_manager = new WPSEO_Admin_Asset_Manager(); + + /** + * Filters the parameter to disable Table of Content block. + * + * Note: Used to prevent auto-generation of HTML anchors for headings when TOC block is registered. + * + * @since 21.5 + * + * @param bool $disable_table_of_content The value of the `autoload` parameter. Default: false. + * + * @return bool The filtered value of the `disable_table_of_content` parameter. + */ + $disable_table_of_content = apply_filters( 'Yoast\WP\SEO\disable_table_of_content_block', false ); + + $data = [ + 'restApi' => $this->get_rest_api_config(), + 'seoAnalysisEnabled' => $analysis_seo->is_enabled(), + 'contentAnalysisEnabled' => $content_analysis->is_enabled(), + 'licensedURL' => WPSEO_Utils::get_home_url(), + 'settingsPageUrl' => admin_url( 'admin.php?page=wpseo_page_settings#/site-features#card-wpseo-enable_link_suggestions' ), + 'integrationsTabURL' => admin_url( 'admin.php?page=wpseo_integrations' ), + 'premiumAssessmentsScriptUrl' => plugins_url( + 'assets/js/dist/register-premium-assessments-' . $assets_manager->flatten_version( WPSEO_PREMIUM_VERSION ) . WPSEO_CSSJS_SUFFIX . '.js', + WPSEO_PREMIUM_FILE + ), + 'pluginUrl' => plugins_url( '', WPSEO_PREMIUM_FILE ), + ]; + + if ( defined( 'YOAST_SEO_TEXT_FORMALITY' ) && YOAST_SEO_TEXT_FORMALITY === true ) { + $data['textFormalityScriptUrl'] = plugins_url( + 'assets/js/dist/register-text-formality-' . $assets_manager->flatten_version( WPSEO_PREMIUM_VERSION ) . WPSEO_CSSJS_SUFFIX . '.js', + WPSEO_PREMIUM_FILE + ); + } + + if ( WPSEO_Metabox::is_post_edit( $this->get_current_page() ) ) { + $data = array_merge( $data, $this->get_post_metabox_config() ); + } + elseif ( WPSEO_Taxonomy::is_term_edit( $this->get_current_page() ) ) { + $data = array_merge( $data, $this->get_term_metabox_config() ); + } + + if ( current_user_can( 'edit_others_posts' ) ) { + $data['workoutsUrl'] = admin_url( 'admin.php?page=wpseo_workouts' ); + } + + // Use an extra level in the array to preserve booleans. WordPress sanitizes scalar values in the first level of the array. + wp_localize_script( 'yoast-seo-premium-metabox', 'wpseoPremiumMetaboxData', [ 'data' => $data ] ); + + // Localize the title of the Table of Contents block: the translation needs to be based on the site language instead of the user language. + wp_localize_script( + 'wp-seo-premium-blocks', + 'wpseoTOCData', + [ + 'data' => [ + 'TOCTitle' => __( 'Table of contents', 'wordpress-seo-premium' ), + 'disableTableOfContents' => $disable_table_of_content, + ], + ] + ); + } + + /** + * Retrieves the metabox config for a post. + * + * @return array The config. + */ + protected function get_post_metabox_config() { + $link_suggestions_enabled = WPSEO_Options::get( 'enable_link_suggestions', false ); + + $post = $this->get_post(); + + $prominent_words_support = new WPSEO_Premium_Prominent_Words_Support(); + $is_prominent_words_available = $prominent_words_support->is_post_type_supported( $post->post_type ); + + $site_locale = get_locale(); + $language = WPSEO_Language_Utils::get_language( $site_locale ); + + return [ + 'currentObjectId' => $this->get_post_ID(), + 'currentObjectType' => 'post', + 'linkSuggestionsEnabled' => ( $link_suggestions_enabled ) ? 'enabled' : 'disabled', + 'linkSuggestionsAvailable' => $is_prominent_words_available, + 'linkSuggestionsUnindexed' => ! $this->is_prominent_words_indexing_completed() && WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ), + 'perIndexableLimit' => $this->per_indexable_limit( $language ), + 'isProminentWordsAvailable' => $is_prominent_words_available, + 'isTitleAssessmentAvailable' => true, + ]; + } + + /** + * Retrieves the metabox config for a term. + * + * @return array The config. + */ + protected function get_term_metabox_config() { + $term = null; + if ( isset( $GLOBALS['tag_ID'], $GLOBALS['taxonomy'] ) ) { + $term = get_term( $GLOBALS['tag_ID'], $GLOBALS['taxonomy'] ); + } + + if ( $term === null || is_wp_error( $term ) ) { + return [ + 'insightsEnabled' => 'disabled', + 'linkSuggestionsEnabled' => 'disabled', + 'linkSuggestionsAvailable' => false, + 'linkSuggestionsUnindexed' => false, + ]; + } + + $link_suggestions_enabled = WPSEO_Options::get( 'enable_link_suggestions', false ); + + $prominent_words_support = new WPSEO_Premium_Prominent_Words_Support(); + $is_prominent_words_available = $prominent_words_support->is_taxonomy_supported( $term->taxonomy ); + + $site_locale = get_locale(); + $language = WPSEO_Language_Utils::get_language( $site_locale ); + + return [ + 'currentObjectId' => $term->term_id, + 'currentObjectType' => 'term', + 'linkSuggestionsEnabled' => ( $link_suggestions_enabled ) ? 'enabled' : 'disabled', + 'linkSuggestionsAvailable' => $is_prominent_words_available, + 'linkSuggestionsUnindexed' => ! $this->is_prominent_words_indexing_completed() && WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ), + 'perIndexableLimit' => $this->per_indexable_limit( $language ), + 'isProminentWordsAvailable' => $is_prominent_words_available, + 'isTitleAssessmentAvailable' => false, + ]; + } + + /** + * Retrieves the REST API configuration. + * + * @return array The configuration. + */ + protected function get_rest_api_config() { + return [ + 'available' => WPSEO_Utils::is_api_available(), + 'contentEndpointsAvailable' => self::are_content_endpoints_available(), + 'root' => esc_url_raw( rest_url() ), + 'nonce' => wp_create_nonce( 'wp_rest' ), + ]; + } + + /** + * Returns the post for the current admin page. + * + * @codeCoverageIgnore + * + * @return WP_Post The post for the current admin page. + */ + protected function get_post() { + return get_post( $this->get_post_ID() ); + } + + /** + * Retrieves the post ID from the globals. + * + * @codeCoverageIgnore + * + * @return int The post ID. + */ + protected function get_post_ID() { + if ( ! isset( $GLOBALS['post_ID'] ) ) { + return 0; + } + + return $GLOBALS['post_ID']; + } + + /** + * Retrieves the metabox specific integrations. + * + * @codeCoverageIgnore + * + * @return WPSEO_WordPress_Integration[] The metabox integrations. + */ + protected function get_metabox_integrations() { + return [ + 'social-previews' => new WPSEO_Social_Previews(), + + // Add custom fields plugin to post and page edit pages. + 'premium-custom-fields' => new WPSEO_Custom_Fields_Plugin(), + ]; + } + + /** + * Checks whether or not the metabox related scripts should be loaded. + * + * @codeCoverageIgnore + * + * @param string $current_page The page we are on. + * + * @return bool True when it should be loaded. + */ + protected function load_metabox( $current_page ) { + // When the current page is a term related one. + if ( WPSEO_Taxonomy::is_term_edit( $current_page ) || WPSEO_Taxonomy::is_term_overview( $current_page ) ) { + return WPSEO_Options::get( 'display-metabox-tax-' . $this->current_page_helper->get_current_taxonomy() ); + } + + // When the current page isn't a post related one. + if ( WPSEO_Metabox::is_post_edit( $current_page ) || WPSEO_Metabox::is_post_overview( $current_page ) ) { + return WPSEO_Post_Type::has_metabox_enabled( $this->current_page_helper->get_current_post_type() ); + } + + // Make sure ajax integrations are loaded. + return wp_doing_ajax(); + } + + /** + * Retrieves the value of the pagenow variable. + * + * @codeCoverageIgnore + * + * @return string The value of pagenow. + */ + private function get_current_page() { + global $pagenow; + + return $pagenow; + } + + /** + * Returns whether or not we need to index more posts for correct link suggestion functionality. + * + * @return bool Whether or not we need to index more posts. + */ + protected function is_prominent_words_indexing_completed() { + $is_indexing_completed = $this->prominent_words_helper->is_indexing_completed(); + if ( $is_indexing_completed === null ) { + $indexation_integration = YoastSEOPremium()->classes->get( Indexing_Integration::class ); + $is_indexing_completed = $indexation_integration->get_unindexed_count( 0 ) === 0; + + $this->prominent_words_helper->set_indexing_completed( $is_indexing_completed ); + } + + return $is_indexing_completed; + } + + /** + * Returns the number of prominent words to store for content written in the given language. + * + * @param string $language The current language. + * + * @return int The number of words to store. + */ + protected function per_indexable_limit( $language ) { + if ( YoastSEO()->helpers->language->has_function_word_support( $language ) ) { + return Indexing_Integration::PER_INDEXABLE_LIMIT; + } + + return Indexing_Integration::PER_INDEXABLE_LIMIT_NO_FUNCTION_WORD_SUPPORT; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-option.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-option.php new file mode 100644 index 00000000..217e57a0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-option.php @@ -0,0 +1,102 @@ +get_defaults();}} + * + * @var array + */ + protected $defaults = [ + // Form fields. + 'prominent_words_indexing_completed' => null, + 'workouts' => [ 'cornerstone' => [ 'finishedSteps' => [] ] ], + 'should_redirect_after_install' => false, + 'activation_redirect_timestamp' => 0, + 'dismiss_update_premium_notification' => '0', + ]; + + /** + * Registers the option to the WPSEO Options framework. + * + * @return void + */ + public static function register_option() { + WPSEO_Options::register_option( static::get_instance() ); + } + + /** + * Get the singleton instance of this class. + * + * @return static Returns instance of itself. + */ + public static function get_instance() { + if ( ! ( static::$instance instanceof static ) ) { + static::$instance = new static(); + } + + return static::$instance; + } + + /** + * All concrete classes must contain a validate_option() method which validates all + * values within the option. + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array The clean option value. + */ + protected function validate_option( $dirty, $clean, $old ) { + foreach ( $clean as $key => $value ) { + switch ( $key ) { + case 'prominent_words_indexing_completed': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== null ) { + $clean[ $key ] = WPSEO_Utils::validate_bool( $dirty[ $key ] ); + } + + break; + case 'workouts': + if ( isset( $dirty[ $key ] ) && is_array( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + case 'should_redirect_after_install': + if ( isset( $dirty[ $key ] ) && is_bool( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + case 'activation_redirect_timestamp': + if ( isset( $dirty[ $key ] ) && is_int( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + case 'dismiss_update_premium_notification': + if ( isset( $dirty[ $key ] ) && is_string( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + } + } + + return $clean; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-support.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-support.php new file mode 100644 index 00000000..85e96a3a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-support.php @@ -0,0 +1,47 @@ +get_supported_post_types(), true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-utils.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-utils.php new file mode 100644 index 00000000..804acaf2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-content-utils.php @@ -0,0 +1,44 @@ +classes->get( Migration_Status::class )->is_version( 'free', WPSEO_VERSION ) ) { + return false; + } + + return WPSEO_Options::get( 'enable_text_link_counter', false ); + } + + /** + * Checks if there are unprocessed objects. + * + * @return bool True when there are unprocessed objects. + */ + public static function has_unprocessed_content() { + static $has_unprocessed_posts; + + if ( $has_unprocessed_posts === null ) { + $post_link_action = YoastSEO()->classes->get( Post_Link_Indexing_Action::class ); + $has_unprocessed_posts = $post_link_action->get_total_unindexed(); + } + + return $has_unprocessed_posts; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-filter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-filter.php new file mode 100644 index 00000000..77924772 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-filter.php @@ -0,0 +1,204 @@ +classes->get( Migration_Status::class )->is_version( 'free', WPSEO_VERSION ) ) { + return; + } + + if ( WPSEO_Premium_Orphaned_Content_Utils::is_feature_enabled() ) { + parent::register_hooks(); + } + } + + /** + * Returns a text explaining this filter. + * + * @return string|null The explanation or null if the current post stype is unknown. + */ + protected function get_explanation() { + $post_type_object = get_post_type_object( $this->get_current_post_type() ); + + if ( $post_type_object === null ) { + return null; + } + + $unprocessed = WPSEO_Premium_Orphaned_Content_Utils::has_unprocessed_content(); + $can_recalculate = WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ); + + $learn_more = sprintf( + /* translators: %1$s expands to the link to an article to read more about orphaned content, %2$s expands to */ + __( '%1$sLearn more about orphaned content%2$s.', 'wordpress-seo-premium' ), + '', + '' + ); + + if ( $unprocessed && ! $can_recalculate ) { + return sprintf( + /* translators: %1$s: plural form of the current post type, %2$s: a Learn more about link */ + __( 'Ask your SEO Manager or Site Administrator to count links in all texts, so we can identify orphaned %1$s. %2$s', 'wordpress-seo-premium' ), + strtolower( $post_type_object->labels->name ), + $learn_more + ); + } + + if ( $unprocessed ) { + return sprintf( + /* translators: %1$s expands to link to the recalculation option, %2$s: anchor closing, %3$s: plural form of the current post type, %4$s: a Learn more about link */ + __( '%1$sClick here%2$s to index your links, so we can identify orphaned %3$s. %4$s', 'wordpress-seo-premium' ), + '', + '', + strtolower( $post_type_object->labels->name ), + $learn_more + ); + } + + return sprintf( + /* translators: %1$s: plural form of the current post type, %2$s: a Learn more about link */ + __( '\'Orphaned content\' refers to %1$s that have no inbound links, consider adding links towards these %1$s. %2$s', 'wordpress-seo-premium' ), + strtolower( $post_type_object->labels->name ), + $learn_more + ); + } + + /** + * Modifies the query based on the seo_filter variable in $_GET. + * + * @param string $where Query variables. + * + * @return string The modified query. + */ + public function filter_posts( $where ) { + if ( $this->is_filter_active() ) { + $where .= $this->get_where_filter(); + $where .= $this->filter_published_posts(); + } + + return $where; + } + + /** + * Returns the where clause to use. + * + * @return string The where clause. + */ + protected function get_where_filter() { + global $wpdb; + + if ( WPSEO_Premium_Orphaned_Content_Utils::has_unprocessed_content() ) { + // Hide all posts, because we cannot tell anything for certain. + return 'AND 1 = 0'; + } + + $subquery = WPSEO_Premium_Orphaned_Post_Query::get_orphaned_content_query(); + + return ' AND ' . $wpdb->posts . '.ID IN ( ' . $subquery . ' ) '; + } + + /** + * Adds a published posts filter so we don't show unpublished posts in the orphaned pages results. + * + * @return string A published posts filter. + */ + protected function filter_published_posts() { + global $wpdb; + + return " AND {$wpdb->posts}.post_status = 'publish' AND {$wpdb->posts}.post_password = ''"; + } + + /** + * Returns the label for this filter. + * + * @return string The label for this filter. + */ + protected function get_label() { + static $label; + + if ( $label === null ) { + $label = __( 'Orphaned content', 'wordpress-seo-premium' ); + } + + return $label; + } + + /** + * Returns the total amount of articles that are orphaned content. + * + * @return int + */ + protected function get_post_total() { + global $wpdb; + $post_type = $this->get_current_post_type(); + $cache_key = 'orphaned_count_' . $post_type; + $count = wp_cache_get( $cache_key, 'orphaned_counts' ); + + if ( WPSEO_Premium_Orphaned_Content_Utils::has_unprocessed_content() ) { + return '?'; + } + + // phpcs:disable WordPress.DB.PreparedSQLPlaceholders.UnsupportedPlaceholder -- Reason: Will be supported in the next WPcs version. + if ( $count === false ) { + $subquery = WPSEO_Premium_Orphaned_Post_Query::get_orphaned_content_query(); + $count = $wpdb->get_var( + $wpdb->prepare( + "SELECT COUNT(ID) + FROM %i + WHERE ID IN ( $subquery ) + AND %i = 'publish' + AND %i = '' + AND %i = %s", + $wpdb->posts, + 'post_status', + 'post_password', + 'post_type', + $post_type + ) + ); + + $count = (int) $count; + + $expiry = ( wp_using_ext_object_cache() && wp_cache_supports( 'flush_group' ) ) ? DAY_IN_SECONDS : MINUTE_IN_SECONDS; + wp_cache_set( $cache_key, $count, 'orphaned_counts', $expiry ); + } + + // phpcs:enable + + return $count; + } + + /** + * Returns the post types to which this filter should be added. + * + * @return array The post types to which this filter should be added. + */ + protected function get_post_types() { + $orphaned_content_support = new WPSEO_Premium_Orphaned_Content_Support(); + + return $orphaned_content_support->get_supported_post_types(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-query.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-query.php new file mode 100644 index 00000000..3ef7397b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-orphaned-post-query.php @@ -0,0 +1,122 @@ +classes->get( Indexable_Repository::class ); + $query = $repository->query() + ->select( 'object_id' ) + ->where( 'object_type', 'post' ) + ->where_any_is( + [ + [ 'incoming_link_count' => 0 ], + [ 'incoming_link_count' => null ], + ] + ); + + $frontpage_id = self::get_frontpage_id(); + if ( $frontpage_id ) { + $query = $query->where_not_equal( 'object_id', $frontpage_id ); + } + + $query = sprintf( $query->get_sql(), '\'post\'', 0, $frontpage_id ); + } + + return $query; + } + + /** + * Returns all the object ids from the records with an incoming link count of 0. + * + * @return array Array with the object ids. + */ + public static function get_orphaned_object_ids() { + $repository = YoastSEO()->classes->get( Indexable_Repository::class ); + $results = $repository->query() + ->select( 'object_id' ) + ->where( 'object_type', 'post' ) + ->where( 'incoming_link_count', 0 ) + ->find_array(); + + $object_ids = wp_list_pluck( $results, 'object_id' ); + $object_ids = self::remove_frontpage_id( $object_ids ); + + return $object_ids; + } + + /** + * Removes the frontpage id from orphaned id's when the frontpage is a static page. + * + * @param array $object_ids The orphaned object ids. + * + * @return array The orphaned object ids, without frontpage id. + */ + protected static function remove_frontpage_id( $object_ids ) { + // When the frontpage is a static page, remove it from the object ids. + if ( get_option( 'show_on_front' ) !== 'page' ) { + return $object_ids; + } + + $frontpage_id = get_option( 'page_on_front' ); + + // If the frontpage ID exists in the list, remove it. + $object_id_key = array_search( $frontpage_id, $object_ids, true ); + if ( $object_id_key !== false ) { + unset( $object_ids[ $object_id_key ] ); + } + + return $object_ids; + } + + /** + * Retrieves the frontpage id when set, otherwise null. + * + * @return int|null The frontpage id when set. + */ + protected static function get_frontpage_id() { + if ( get_option( 'show_on_front' ) !== 'page' ) { + return null; + } + + $page_on_front = get_option( 'page_on_front', null ); + if ( empty( $page_on_front ) ) { + return null; + } + + return (int) $page_on_front; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-support.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-support.php new file mode 100644 index 00000000..f41e3897 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-support.php @@ -0,0 +1,113 @@ + `post` + * `page` => `page` + * ] + * + * This can result in problems downstream when trying to array_merge this twice. + * array_values prevents this issue by ensuring numeric keys. + */ + $prominent_words_post_types = array_values( $prominent_words_post_types ); + + return $prominent_words_post_types; + } + + /** + * Checks if the post type is supported. + * + * @param string $post_type The post type to look up. + * + * @return bool True when post type is supported. + */ + public function is_post_type_supported( $post_type ) { + return in_array( $post_type, $this->get_supported_post_types(), true ); + } + + /** + * Retrieves a list of taxonomies that are public, viewable and have the metabox enabled. + * + * @return array The supported taxonomies. + */ + public function get_supported_taxonomies() { + $taxonomies = get_taxonomies( [ 'public' => true ] ); + $taxonomies = array_filter( $taxonomies, 'is_taxonomy_viewable' ); + + /** + * Filter: 'Yoast\WP\SEO\prominent_words_taxonomies' - Allows to filter from which taxonomies terms are eligible for generating prominent words. + * + * Note: This is a Premium plugin-only hook. + * + * @since 14.7.0 + * + * @param array $taxonomies The accessible taxonomies. + */ + $prominent_words_taxonomies = apply_filters( + 'Yoast\WP\SEO\prominent_words_taxonomies', + $taxonomies + ); + + if ( ! is_array( $prominent_words_taxonomies ) || empty( $prominent_words_taxonomies ) ) { + return []; + } + + $prominent_words_taxonomies = array_filter( + $prominent_words_taxonomies, + static function ( $taxonomy ) { + return (bool) WPSEO_Options::get( 'display-metabox-tax-' . $taxonomy, true ); + } + ); + + return array_values( $prominent_words_taxonomies ); + } + + /** + * Checks if the taxonomy is supported. + * + * @param string $taxonomy The taxonomy to look up. + * + * @return bool True when taxonomy is supported. + */ + public function is_taxonomy_supported( $taxonomy ) { + return in_array( $taxonomy, $this->get_supported_taxonomies(), true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-unindexed-post-query.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-unindexed-post-query.php new file mode 100644 index 00000000..d2ef0d96 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-unindexed-post-query.php @@ -0,0 +1,190 @@ +get_unindexed_post_ids( $this->get_post_types(), ( $limit + 1 ) ); + return count( $unindexed_post_ids ) > $limit; + } + + /** + * Returns the total unindexed posts for given post type. + * + * @since 4.6.0 + * + * @param string $post_type The posttype to fetch. + * + * @return int The total amount of unindexed posts. + */ + public function get_total( $post_type ) { + if ( ! array_key_exists( $post_type, $this->totals ) ) { + $totals = $this->get_totals( $this->get_post_types() ); + + foreach ( $totals as $total_post_type => $total ) { + $this->totals[ $total_post_type ] = $total; + } + } + + if ( ! array_key_exists( $post_type, $this->totals ) ) { + $this->totals[ $post_type ] = 0; + } + + return $this->totals[ $post_type ]; + } + + /** + * Returns the totals for each posttype by counting them. + * + * @since 4.6.0 + * + * @param array $post_types The posttype to limit the resultset for. + * + * @return array Array with the totals for the requested posttypes. + */ + public function get_totals( $post_types ) { + global $wpdb; + + if ( $post_types === [] ) { + return $post_types; + } + + $replacements = [ + WPSEO_Premium_Prominent_Words_Versioning::POST_META_NAME, + WPSEO_Premium_Prominent_Words_Versioning::get_version_number(), + ]; + $replacements = array_merge( $replacements, $post_types ); + + $results = $wpdb->get_results( + $wpdb->prepare( + ' + SELECT COUNT( ID ) as total, post_type + FROM ' . $wpdb->posts . ' + WHERE ID NOT IN( SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE meta_key = %s AND meta_value = %s ) + AND post_status IN( "future", "draft", "pending", "private", "publish" ) + AND post_type IN( ' . implode( ',', array_fill( 0, count( $post_types ), '%s' ) ) . ' ) + GROUP BY post_type + ', + $replacements + ) + ); + + $totals = []; + + foreach ( $results as $result ) { + $totals[ $this->determine_rest_endpoint_for_post_type( $result->post_type ) ] = (int) $result->total; + } + + return $totals; + } + + /** + * Determines the REST endpoint for the given post type. + * + * @param string $post_type The post type to determine the endpoint for. + * + * @return string The endpoint. Returns empty string if post type doesn't exist. + */ + protected function determine_rest_endpoint_for_post_type( $post_type ) { + $post_type_object = get_post_type_object( $post_type ); + + if ( is_null( $post_type_object ) ) { + return ''; + } + + if ( isset( $post_type_object->rest_base ) && ! empty( $post_type_object->rest_base ) ) { + return $post_type_object->rest_base; + } + + return $post_type_object->name; + } + + /** + * Returns the array with supported posttypes. + * + * @return array The supported posttypes. + */ + protected function get_post_types() { + $prominent_words_support = new WPSEO_Premium_Prominent_Words_Support(); + + return array_filter( $prominent_words_support->get_supported_post_types(), [ 'WPSEO_Post_Type', 'is_rest_enabled' ] ); + } + + /** + * Gets the Post IDs of un-indexed objects. + * + * @param array|string $post_types The post type(s) to fetch. + * @param int $limit Limit the number of results. + * + * @return int[] Post IDs found which are un-indexed. + */ + public function get_unindexed_post_ids( $post_types, $limit ) { + global $wpdb; + + if ( is_string( $post_types ) ) { + $post_types = (array) $post_types; + } + + if ( $post_types === [] ) { + return $post_types; + } + + $replacements = [ + WPSEO_Premium_Prominent_Words_Versioning::POST_META_NAME, + WPSEO_Premium_Prominent_Words_Versioning::get_version_number(), + ]; + $replacements = array_merge( $replacements, $post_types ); + $replacements[] = $limit; + + $results = $wpdb->get_results( + $wpdb->prepare( + ' + SELECT ID + FROM ' . $wpdb->posts . ' + WHERE ID NOT IN( SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE meta_key = %s AND meta_value = %s ) + AND post_status IN( "future", "draft", "pending", "private", "publish" ) + AND post_type IN( ' . implode( ',', array_fill( 0, count( $post_types ), '%s' ) ) . ' ) + LIMIT %d', + $replacements + ), + ARRAY_A + ); + + // Make sure we return a list of IDs. + $results = wp_list_pluck( $results, 'ID' ); + + return $results; + } + + /** + * Returns the array with supported post statuses. + * + * @return string[] The supported post statuses. + */ + public function get_supported_post_statuses() { + return [ 'future', 'draft', 'pending', 'private', 'publish' ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-versioning.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-versioning.php new file mode 100644 index 00000000..00a0a59e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-prominent-words-versioning.php @@ -0,0 +1,67 @@ +query( + $wpdb->prepare( + 'UPDATE ' . $wpdb->postmeta . ' SET meta_key = %s WHERE meta_key = "yst_prominent_words_version"', + self::POST_META_NAME + ) + ); + } + + /** + * Removes the meta key for the prominent words version for the unsupported languages that might have this value + * set. + * + * @return void + */ + public static function upgrade_4_8() { + $supported_languages = [ 'en', 'de', 'nl', 'es', 'fr', 'it', 'pt', 'ru', 'pl', 'sv', 'id' ]; + + if ( in_array( WPSEO_Language_Utils::get_language( get_locale() ), $supported_languages, true ) ) { + return; + } + + global $wpdb; + + // The remove all post metas. + $wpdb->query( + $wpdb->prepare( + 'DELETE FROM ' . $wpdb->postmeta . ' WHERE meta_key = %s', + self::POST_META_NAME + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-endpoint.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-endpoint.php new file mode 100644 index 00000000..002f35b6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-endpoint.php @@ -0,0 +1,120 @@ +service = $service; + } + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + add_action( 'rest_api_init', [ $this, 'register' ] ); + } + + /** + * Register the REST endpoint to WordPress. + * + * @return void + */ + public function register() { + $args = [ + 'origin' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The origin to redirect', + ], + 'target' => [ + 'required' => false, + 'type' => 'string', + 'description' => 'The redirect target', + ], + 'type' => [ + 'required' => true, + 'type' => 'integer', + 'description' => 'The redirect type', + ], + ]; + + register_rest_route( + self::REST_NAMESPACE, + self::ENDPOINT_QUERY, + [ + 'methods' => 'POST', + 'args' => $args, + 'callback' => [ + $this->service, + 'save', + ], + 'permission_callback' => [ + $this, + 'can_save_data', + ], + ] + ); + + register_rest_route( + self::REST_NAMESPACE, + self::ENDPOINT_UNDO, + [ + 'methods' => 'POST', + 'args' => array_merge( + $args, + [ + 'type' => [ + 'required' => false, + 'type' => 'string', + 'description' => 'The redirect format', + ], + ] + ), + 'callback' => [ + $this->service, + 'delete', + ], + 'permission_callback' => [ + $this, + 'can_save_data', + ], + ] + ); + } + + /** + * Determines if the current user is allowed to use this endpoint. + * + * @return bool True user is allowed to use this endpoint. + */ + public function can_save_data() { + return current_user_can( self::CAPABILITY_STORE ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-export-manager.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-export-manager.php new file mode 100644 index 00000000..ae6a0757 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-export-manager.php @@ -0,0 +1,116 @@ +' + . esc_html__( 'Export redirects', 'wordpress-seo-premium' ) + . ''; + } + } + + /** + * Adding the export block for CSV. Makes it able to export redirects to CSV. + * + * @return void + */ + public function add_redirect_export_block() { + // Display the forms. + if ( current_user_can( 'export' ) ) { + require WPSEO_PREMIUM_PATH . 'classes/views/export-redirects.php'; + } + } + + /** + * Hijacks the request and returns a CSV file if we're on the right page with the right method and the right capabilities. + * + * @return void + */ + public function redirects_csv_export() { + if ( $this->is_valid_csv_export_request() && current_user_can( 'export' ) ) { + // Check if we have a valid nonce. + check_admin_referer( 'wpseo-export' ); + + // Clean any content that has been already outputted, for example by other plugins or faulty PHP files. + if ( ob_get_contents() ) { + ob_clean(); + } + + // Set CSV headers and content. + $this->set_csv_headers(); + echo $this->get_csv_contents(); + + // And exit so we don't start appending HTML to our CSV file. + // NOTE: this makes this entire class untestable as it will exit all tests but WordPress seems to have no elegant way of handling this. + exit(); + } + } + + /** + * Are we on the wpseo_tools page in the import-export tool and have we received an export post request? + * + * @return bool + */ + protected function is_valid_csv_export_request() { + // phpcs:disable WordPress.Security.NonceVerification -- Reason: Nonce is checked in export. + // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are strictly comparing only or ignoring the value. + return ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) && wp_unslash( $_GET['page'] ) === 'wpseo_tools' ) + && ( isset( $_GET['tool'] ) && is_string( $_GET['tool'] ) && wp_unslash( $_GET['tool'] ) === 'import-export' ) + && ( isset( $_POST['export'] ) && ! empty( $_POST['export'] ) ); + // phpcs:enable + } + + /** + * Sets the headers to trigger an CSV download in the browser. + * + * @return void + */ + protected function set_csv_headers() { + header( 'Content-type: text/csv' ); + header( 'Content-Disposition: attachment; filename=wordpress-seo-redirects.csv' ); + header( 'Pragma: no-cache' ); + header( 'Expires: 0' ); + } + + /** + * Generates CSV from all redirects. + * + * @return string + */ + protected function get_csv_contents() { + // Grab all our redirects. + $redirect_manager = new WPSEO_Redirect_Manager(); + $redirects = $redirect_manager->get_all_redirects(); + + $csv_exporter = new WPSEO_Redirect_CSV_Exporter(); + return $csv_exporter->export( $redirects ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-option.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-option.php new file mode 100644 index 00000000..e7efff38 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-option.php @@ -0,0 +1,80 @@ +get_defaults();}} + * + * @var array + */ + protected $defaults = [ + // Form fields. + 'disable_php_redirect' => 'off', + 'separate_file' => 'off', + ]; + + /** + * Registers the option to the WPSEO Options framework. + * + * @return void + */ + public static function register_option() { + WPSEO_Options::register_option( static::get_instance() ); + } + + /** + * Get the singleton instance of this class. + * + * @return static Returns instance of itself. + */ + public static function get_instance() { + if ( ! ( static::$instance instanceof static ) ) { + static::$instance = new static(); + } + + return static::$instance; + } + + /** + * All concrete classes must contain a validate_option() method which validates all + * values within the option. + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array The clean option with the saved value. + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + case 'disable_php_redirect': + case 'separate_file': + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], [ 'on', 'off' ], true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + } + } + + return $clean; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-service.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-service.php new file mode 100644 index 00000000..1af790f0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-redirect-service.php @@ -0,0 +1,94 @@ +map_request_to_redirect( $request ); + + if ( $this->get_redirect_manager()->create_redirect( $redirect ) ) { + return new WP_REST_Response( 'true' ); + } + + return new WP_REST_Response( 'false' ); + } + + /** + * Deletes the redirect from the redirects. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response The response to send back. + */ + public function delete( WP_REST_Request $request ) { + $redirect = $this->map_request_to_redirect( $request ); + $redirects = [ $redirect ]; + + $redirect_format = $request->get_param( 'format' ); + if ( ! $redirect_format ) { + $redirect_format = WPSEO_Redirect_Formats::PLAIN; + } + + if ( $this->get_redirect_manager( $redirect_format )->delete_redirects( $redirects ) ) { + return new WP_REST_Response( + [ + 'title' => __( 'Redirect deleted.', 'wordpress-seo-premium' ), + 'message' => __( 'The redirect was deleted successfully.', 'wordpress-seo-premium' ), + 'success' => true, + ] + ); + } + + return new WP_REST_Response( + [ + 'title' => __( 'Redirect not deleted.', 'wordpress-seo-premium' ), + 'message' => __( 'Something went wrong when deleting this redirect.', 'wordpress-seo-premium' ), + 'success' => false, + ], + 400 + ); + } + + /** + * Creates and returns an instance of the redirect manager. + * + * @param string $format The redirect format. + * + * @return WPSEO_Redirect_Manager The redirect maanger. + */ + protected function get_redirect_manager( $format = WPSEO_Redirect_Formats::PLAIN ) { + return new WPSEO_Redirect_Manager( $format ); + } + + /** + * Maps the given request to an instance of the WPSEO_Redirect. + * + * @param WP_REST_Request $request The request object. + * + * @return WPSEO_Redirect Redirect instance. + */ + protected function map_request_to_redirect( WP_REST_Request $request ) { + $origin = $request->get_param( 'origin' ); + $target = $request->get_param( 'target' ); + $type = $request->get_param( 'type' ); + $format = $request->get_param( 'format' ); + + return new WPSEO_Redirect( $origin, $target, $type, $format ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-register-capabilities.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-register-capabilities.php new file mode 100644 index 00000000..8a901828 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-register-capabilities.php @@ -0,0 +1,32 @@ +register( 'wpseo_manage_redirects', [ 'administrator', 'editor', 'wpseo_editor', 'wpseo_manager' ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-stale-cornerstone-content-filter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-stale-cornerstone-content-filter.php new file mode 100644 index 00000000..313b3678 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/premium-stale-cornerstone-content-filter.php @@ -0,0 +1,130 @@ +is_filter_active() ) { + return $where; + } + + global $wpdb; + + $where .= sprintf( + ' AND ' . $wpdb->posts . '.ID IN( SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE meta_key = "%s" AND meta_value = "1" ) AND ' . $wpdb->posts . '.post_modified < "%s" ', + WPSEO_Meta::$meta_prefix . 'is_cornerstone', + $this->date_threshold() + ); + + return $where; + } + + /** + * Returns the label for this filter. + * + * @return string The label for this filter. + */ + protected function get_label() { + return __( 'Stale cornerstone content', 'wordpress-seo-premium' ); + } + + /** + * Returns a text explaining this filter. + * + * @return string|null The explanation for this filter. + */ + protected function get_explanation() { + $post_type_object = get_post_type_object( $this->get_current_post_type() ); + + if ( $post_type_object === null ) { + return null; + } + + return sprintf( + /* translators: %1$s expands to dynamic post type label, %2$s expands anchor to blog post about cornerstone content, %3$s expands to */ + __( 'Stale cornerstone content refers to cornerstone content that hasn’t been updated in the last 6 months. Make sure to keep these %1$s up-to-date. %2$sLearn more about cornerstone content%3$s.', 'wordpress-seo-premium' ), + strtolower( $post_type_object->labels->name ), + '', + '' + ); + } + + /** + * Returns the total amount of stale cornerstone content. + * + * @return int The total amount of stale cornerstone content. + */ + protected function get_post_total() { + global $wpdb; + + $post_type = $this->get_current_post_type(); + $cache_key = 'stale_cornerstone_count_' . $post_type; + $count = wp_cache_get( $cache_key, 'stale_cornerstone_counts' ); + + if ( $count === false ) { + $count = (int) $wpdb->get_var( + $wpdb->prepare( + ' + SELECT COUNT( 1 ) + FROM ' . $wpdb->postmeta . ' + WHERE post_id IN( SELECT ID FROM ' . $wpdb->posts . ' WHERE post_type = %s && post_modified < %s ) && + meta_value = "1" AND meta_key = %s + ', + $post_type, + $this->date_threshold(), + WPSEO_Meta::$meta_prefix . 'is_cornerstone' + ) + ); + wp_cache_set( $cache_key, $count, 'stale_cornerstone_counts', DAY_IN_SECONDS ); + } + + return $count; + } + + /** + * Returns the post types to which this filter should be added. + * + * @return array The post types to which this filter should be added. + */ + protected function get_post_types() { + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Using YoastSEO hook. + $post_types = apply_filters( 'wpseo_cornerstone_post_types', parent::get_post_types() ); + if ( ! is_array( $post_types ) ) { + return []; + } + + return $post_types; + } + + /** + * Returns the date 6 months ago. + * + * @return string The formatted date. + */ + protected function date_threshold() { + return gmdate( 'Y-m-d', strtotime( '-6months' ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/product-premium.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/product-premium.php new file mode 100644 index 00000000..682f4262 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/product-premium.php @@ -0,0 +1,60 @@ +set_extension_url( 'https://my.yoast.com/licenses/' ); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect-undo-endpoint.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect-undo-endpoint.php new file mode 100644 index 00000000..4c9a3cbd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect-undo-endpoint.php @@ -0,0 +1,176 @@ +manager = $manager; + } + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + add_action( 'rest_api_init', [ $this, 'register' ] ); + } + + /** + * Register the REST endpoint to WordPress. + * + * @return void + */ + public function register() { + register_rest_route( + self::REST_NAMESPACE, + self::ENDPOINT_UNDO, + [ + 'methods' => 'POST', + 'args' => [ + 'obj_id' => [ + 'required' => true, + 'type' => 'int', + 'description' => 'The id of the post or term', + ], + 'obj_type' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The object type: post or term', + ], + ], + 'callback' => [ $this, 'undo_redirect' ], + 'permission_callback' => [ $this, 'can_save_data' ], + ] + ); + } + + /** + * Deletes the latest redirect to the post or term referenced in the request. + * + * @param WP_REST_Request $request The request. + * + * @return WP_REST_Response The response. + */ + public function undo_redirect( WP_REST_Request $request ) { + $object_id = $request->get_param( 'obj_id' ); + $object_type = $request->get_param( 'obj_type' ); + + $redirect_info = $this->retrieve_post_or_term_redirect_info( $object_type, $object_id ); + $redirect = $this->map_redirect_info_to_redirect( $redirect_info ); + + if ( ! $redirect->get_origin() ) { + return new WP_REST_Response( + [ + 'title' => __( 'Redirect not deleted.', 'wordpress-seo-premium' ), + 'message' => __( 'Something went wrong when deleting this redirect.', 'wordpress-seo-premium' ), + 'success' => false, + ], + 400 + ); + } + + if ( $this->manager->delete_redirects( [ $redirect ] ) ) { + return new WP_REST_Response( + [ + 'title' => __( 'Redirect deleted.', 'wordpress-seo-premium' ), + 'message' => __( 'The redirect was deleted successfully.', 'wordpress-seo-premium' ), + 'success' => true, + ] + ); + } + + return new WP_REST_Response( + [ + 'title' => __( 'Redirect not deleted.', 'wordpress-seo-premium' ), + 'message' => __( 'Something went wrong when deleting this redirect.', 'wordpress-seo-premium' ), + 'success' => false, + ], + 400 + ); + } + + /** + * Maps the given redirect info to an instance of the WPSEO_Redirect. + * + * @param array $redirect_info The redirect info array. + * + * @return WPSEO_Redirect Redirect instance. + */ + protected function map_redirect_info_to_redirect( $redirect_info ) { + $origin = ( $redirect_info['origin'] ?? null ); + $target = ( $redirect_info['target'] ?? null ); + $type = ( $redirect_info['type'] ?? null ); + $format = ( $redirect_info['format'] ?? null ); + + return new WPSEO_Redirect( $origin, $target, $type, $format ); + } + + /** + * Retrieve the redirect info from the meta for the specified object and id. + * + * @param string $object_type The type of object: post or term. + * @param int $object_id The post or term ID. + * + * @return array + */ + private function retrieve_post_or_term_redirect_info( $object_type, $object_id ) { + if ( $object_type === 'post' ) { + $redirect_info = get_post_meta( $object_id, '_yoast_post_redirect_info', true ); + delete_post_meta( $object_id, '_yoast_post_redirect_info' ); + return $redirect_info; + } + + if ( $object_type === 'term' ) { + $redirect_info = get_term_meta( $object_id, '_yoast_term_redirect_info', true ); + delete_term_meta( $object_id, '_yoast_term_redirect_info' ); + return $redirect_info; + } + + return []; + } + + /** + * Determines if the current user is allowed to use this endpoint. + * + * @param WP_REST_Request $request The request. + * + * @return bool True user is allowed to use this endpoint. + */ + public function can_save_data( WP_REST_Request $request ) { + $object_id = $request->get_param( 'obj_id' ); + $object_type = $request->get_param( 'obj_type' ); + + if ( $object_type === 'post' ) { + return current_user_can( 'edit_post', $object_id ); + } + + if ( $object_type === 'term' ) { + return current_user_can( 'edit_term', $object_id ); + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/executable-redirect.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/executable-redirect.php new file mode 100644 index 00000000..0afcccb6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/executable-redirect.php @@ -0,0 +1,104 @@ +origin = $origin; + $this->target = $target; + $this->type = $type; + $this->format = $format; + } + + /** + * Creates an instance based on the given data. + * + * @param array $data The redirect data. + * + * @return WPSEO_Executable_Redirect The created object. + */ + public static function from_array( $data ) { + return new self( $data['origin'], $data['target'], $data['type'], $data['format'] ); + } + + /** + * Retrieves the origin. + * + * @return string The origin. + */ + public function get_origin() { + return $this->origin; + } + + /** + * Retrieves the target. + * + * @return string The target. + */ + public function get_target() { + return $this->target; + } + + /** + * Retrieves the type. + * + * @return int The redirect type. + */ + public function get_type() { + return $this->type; + } + + /** + * Retrieves the redirect format. + * + * @return string The redirect format. + */ + public function get_format() { + return $this->format; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-apache-exporter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-apache-exporter.php new file mode 100644 index 00000000..382c71a1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-apache-exporter.php @@ -0,0 +1,138 @@ +get_type() ); + if ( $redirect_type >= 400 && $redirect_type < 500 ) { + return $this->format_non_target( $redirect ); + } + + $origin = $redirect->get_origin(); + + if ( $redirect->get_format() === WPSEO_Redirect_Formats::PLAIN ) { + $origin = $this->format_url( $redirect->get_origin() ); + } + + return sprintf( + $this->get_format( $redirect->get_format() ), + $origin, + $this->format_url( $redirect->get_target() ), + $redirect->get_type() + ); + } + + /** + * Format the URL before it is added to the redirects. + * + * @param string $url The URL. + * + * @return string Formatted URL. + */ + protected function format_url( $url ) { + return $this->add_url_slash( $url ); + } + + /** + * Build the redirect output for non-target status codes (4xx) + * + * @param WPSEO_Redirect $redirect The redirect data. + * + * @return string + */ + public function format_non_target( WPSEO_Redirect $redirect ) { + + $target = $redirect->get_origin(); + if ( $redirect->get_format() === WPSEO_Redirect_Formats::PLAIN ) { + $target = $this->add_url_slash( $target ); + } + + return sprintf( + $this->get_non_target_format( $redirect->get_format() ), + $target, + $redirect->get_type() + ); + } + + /** + * Get the format the redirect needs to output + * + * @param string $redirect_format The format of the redirect. + * + * @return string + */ + public function get_non_target_format( $redirect_format ) { + if ( $redirect_format === WPSEO_Redirect_Formats::PLAIN ) { + return $this->url_non_target_format; + } + + return $this->regex_non_target_format; + } + + /** + * Check if first character is a slash, adds a slash if it ain't so + * + * @param string $url The URL add the slashes to. + * + * @return string mixed + */ + private function add_url_slash( $url ) { + $scheme = wp_parse_url( $url, PHP_URL_SCHEME ); + if ( substr( $url, 0, 1 ) !== '/' && empty( $scheme ) ) { + $url = '/' . $url; + } + + return $url; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-csv-exporter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-csv-exporter.php new file mode 100644 index 00000000..6c2299d4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-csv-exporter.php @@ -0,0 +1,93 @@ +get_headers(); + + if ( ! empty( $redirects ) ) { + foreach ( $redirects as $redirect ) { + if ( $redirect instanceof WPSEO_Redirect ) { + $csv .= PHP_EOL . $this->format( $redirect ); + } + } + } + + return $csv; + } + + /** + * Formats a redirect for use in the export, returns a line of CSV. + * + * @param WPSEO_Redirect $redirect The redirect to format. + * + * @return string CSV line of the redirect for format. + */ + public function format( WPSEO_Redirect $redirect ) { + $target = $redirect->get_target(); + if ( WPSEO_Redirect_Util::is_relative_url( $target ) ) { + $target = '/' . $target; + } + if ( WPSEO_Redirect_Util::requires_trailing_slash( $target ) ) { + $target = trailingslashit( $target ); + } + + $origin = $redirect->get_origin(); + if ( $redirect->get_format() === WPSEO_Redirect_Formats::PLAIN && WPSEO_Redirect_Util::is_relative_url( $origin ) ) { + $origin = '/' . $origin; + } + + $redirect_details = [ + $this->format_csv_column( $origin ), + $this->format_csv_column( $target ), + $this->format_csv_column( $redirect->get_type() ), + $this->format_csv_column( $redirect->get_format() ), + ]; + + return implode( ',', $redirect_details ); + } + + /** + * Returns the headers to add to the first line of the generated CSV. + * + * @return string CSV line of the headers. + */ + protected function get_headers() { + $headers = [ + __( 'Origin', 'wordpress-seo-premium' ), + __( 'Target', 'wordpress-seo-premium' ), + __( 'Type', 'wordpress-seo-premium' ), + __( 'Format', 'wordpress-seo-premium' ), + ]; + + return implode( ',', $headers ); + } + + /** + * Surrounds a value with double quotes and escapes existing double quotes. + * + * @param string $value The value to sanitize. + * + * @return string The sanitized value. + */ + protected function format_csv_column( $value ) { + return '"' . str_replace( '"', '""', (string) $value ) . '"'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-exporter-interface.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-exporter-interface.php new file mode 100644 index 00000000..8c7e712b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-exporter-interface.php @@ -0,0 +1,28 @@ +format( $redirect ) . PHP_EOL; + } + } + // Check if the file content isset. + return $this->save( $file_content ); + } + + /** + * Formats a redirect for use in the export. + * + * @param WPSEO_Redirect $redirect The redirect to format. + * + * @return string + */ + public function format( WPSEO_Redirect $redirect ) { + return sprintf( + $this->get_format( $redirect->get_format() ), + $redirect->get_origin(), + $redirect->get_target(), + $redirect->get_type() + ); + } + + /** + * Returns the needed format for the redirect. + * + * @param string $redirect_format The format of the redirect. + * + * @return string + */ + protected function get_format( $redirect_format ) { + if ( $redirect_format === WPSEO_Redirect_Formats::PLAIN ) { + return $this->url_format; + } + + return $this->regex_format; + } + + /** + * Save the redirect file. + * + * @param string $file_content The file content that will be saved. + * + * @return bool + */ + protected function save( $file_content ) { + // Save the actual file. + if ( is_writable( WPSEO_Redirect_File_Util::get_file_path() ) ) { + WPSEO_Redirect_File_Util::write_file( WPSEO_Redirect_File_Util::get_file_path(), $file_content ); + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-htaccess-exporter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-htaccess-exporter.php new file mode 100644 index 00000000..40ab6048 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-htaccess-exporter.php @@ -0,0 +1,101 @@ +get_htaccess_content( $file_path, $file_content ); + $return = (bool) WPSEO_Redirect_File_Util::write_file( $file_path, $htaccess ); + + // Make sure defines are created. + WP_Filesystem(); + chmod( $file_path, FS_CHMOD_FILE ); + + return $return; + } + + return false; + } + + /** + * Getting the content from current .htaccess + * + * @param string $file_path The location of the htaccess file. + * @param string $file_content THe content to save in the htaccess file. + * + * @return string + */ + private function get_htaccess_content( $file_path, $file_content ) { + // Read current htaccess. + $htaccess = ''; + if ( file_exists( $file_path ) ) { + $htaccess = file_get_contents( $file_path ); + } + + $htaccess = preg_replace( '`# BEGIN YOAST REDIRECTS.*# END YOAST REDIRECTS' . PHP_EOL . '`is', '', $htaccess ); + + // Only add redirect code when redirects are present. + if ( ! empty( $file_content ) ) { + $file_content = '# BEGIN YOAST REDIRECTS' . PHP_EOL . '' . PHP_EOL . 'RewriteEngine On' . PHP_EOL . $file_content . '' . PHP_EOL . '# END YOAST REDIRECTS' . PHP_EOL; + + // Prepend our redirects to htaccess file. + $htaccess = $file_content . $htaccess; + } + + return $htaccess; + } + + /** + * Escape special characters in the URL that will cause problems in .htaccess. + * + * Overrides WPSEO_Redirect_Apache_Exporter::format_url. + * + * @param string $url The URL. + * + * @return string The escaped URL. + */ + protected function format_url( $url ) { + $url = parent::format_url( $url ); + + return $this->sanitize( $url ); + } + + /** + * Escape special characters that will cause problems in .htaccess. + * + * @param string $unsanitized The unsanitized value. + * + * @return string The sanitized value. + */ + private function sanitize( $unsanitized ) { + return str_replace( + [ + '\\', + '"', + ], + [ + '/', + '\"', + ], + $unsanitized + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-nginx-exporter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-nginx-exporter.php new file mode 100644 index 00000000..d303d529 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-nginx-exporter.php @@ -0,0 +1,72 @@ +get_format( $redirect->get_format() ), + $redirect->get_origin(), + $redirect->get_target(), + $redirect->get_type(), + $this->add_x_redirect_header() + ); + } + + /** + * Adds an X-Redirect-By header if allowed by the filter. + * + * @return string + */ + private function add_x_redirect_header() { + /** + * Filter: 'Yoast\WP\SEO\add_x_redirect' - can be used to remove the X-Redirect-By header + * Yoast SEO Premium creates (defaults to true, which is adding it) + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param bool $add_xredirect + */ + if ( apply_filters( 'Yoast\WP\SEO\add_x_redirect', true ) === true ) { + return 'add_header X-Redirect-By "Yoast SEO Premium";'; + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-option-exporter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-option-exporter.php new file mode 100644 index 00000000..4f8a89f9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/exporters/redirect-option-exporter.php @@ -0,0 +1,66 @@ + [], + WPSEO_Redirect_Formats::REGEX => [], + ]; + + foreach ( $redirects as $redirect ) { + $formatted_redirects[ $redirect->get_format() ][ $redirect->get_origin() ] = $this->format( $redirect ); + } + + /** + * Filters the parameter to save the redirect options as autoloaded. + * + * Note that the `autoload` value in the database will change only if the option value changes (i.e. a redirect is added, edited or deleted). + * Otherwise you will need to change the `autoload` value directly in the DB. + * + * @since 20.13 + * + * @param bool $autoload The value of the `autoload` parameter. Default: true. + * @param string $type The type of redirects, either `plain` or `regex`. + * @param array $formatted_redirects The redirects to be written in the options, already formatted. + * + * @return bool The filtered value of the `autoload` parameter. + */ + $autoload_options_plain = apply_filters( 'Yoast\WP\SEO\redirects_options_autoload', true, 'plain', $formatted_redirects ); + $autoload_options_regex = apply_filters( 'Yoast\WP\SEO\redirects_options_autoload', true, 'regex', $formatted_redirects ); + + update_option( WPSEO_Redirect_Option::OPTION_PLAIN, $formatted_redirects[ WPSEO_Redirect_Formats::PLAIN ], $autoload_options_plain ); + update_option( WPSEO_Redirect_Option::OPTION_REGEX, $formatted_redirects[ WPSEO_Redirect_Formats::REGEX ], $autoload_options_regex ); + + return true; + } + + /** + * Formats a redirect for use in the export. + * + * @param WPSEO_Redirect $redirect The redirect to format. + * + * @return array + */ + public function format( WPSEO_Redirect $redirect ) { + return [ + 'url' => $redirect->get_target(), + 'type' => $redirect->get_type(), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-abstract-loader.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-abstract-loader.php new file mode 100644 index 00000000..872b2b23 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-abstract-loader.php @@ -0,0 +1,45 @@ +has( $status_code ); + } + + /** + * Validates if the given value is a redirect format. + * + * @param string $format The format to validate. + * + * @return bool Whether or not the format is valid. + */ + protected function validate_format( $format ) { + $redirect_formats = new WPSEO_Redirect_Formats(); + + return $redirect_formats->has( $format ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-csv-loader.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-csv-loader.php new file mode 100644 index 00000000..f11b5aac --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-csv-loader.php @@ -0,0 +1,78 @@ +csv_file = $csv_file; + } + + /** + * Loads all redirects from the CSV file. + * + * @return WPSEO_Redirect[] The redirects loaded from the CSV file. + */ + public function load() { + $handle = fopen( $this->csv_file, 'r' ); + + if ( ! $handle ) { + return []; + } + + $redirects = []; + while ( $item = fgetcsv( $handle, 10000 ) ) { + if ( ! $this->validate_item( $item ) ) { + continue; + } + + $redirects[] = new WPSEO_Redirect( $item[0], $item[1], $item[2], $item[3] ); + } + + return $redirects; + } + + /** + * Checks if a parsed CSV row is has a valid redirect format. + * It should have exactly 4 values. + * The third value should be a http status code. + * The last value should be a redirect format. + * + * @param array $item The parsed CSV row. + * + * @return bool Whether or not the parsed CSV row is valid. + */ + protected function validate_item( $item ) { + if ( count( $item ) !== 4 ) { + return false; + } + + if ( ! $this->validate_status_code( $item[2] ) ) { + return false; + } + + if ( ! $this->validate_format( $item[3] ) ) { + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-htaccess-loader.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-htaccess-loader.php new file mode 100644 index 00000000..d945b126 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-htaccess-loader.php @@ -0,0 +1,145 @@ +htaccess = $htaccess; + } + + /** + * Loads redirects as WPSEO_Redirects from the .htaccess file given to the constructor. + * + * @return WPSEO_Redirect[] The loaded redirects. + */ + public function load() { + $redirects = []; + + // Loop through patterns. + foreach ( self::regex_patterns() as $regex ) { + $matches = $this->match_redirects( $regex['pattern'] ); + + if ( is_array( $matches ) ) { + $redirects = array_merge( $redirects, $this->convert_redirects_from_matches( $matches, $regex['type'] ) ); + } + } + + return $redirects; + } + + /** + * Matches the string (containing redirects) for the given regex. + * + * @param string $pattern The regular expression to match redirects. + * + * @return array[] + */ + protected function match_redirects( $pattern ) { + preg_match_all( $pattern, $this->htaccess, $matches, PREG_SET_ORDER ); + + return $matches; + } + + /** + * Converts matches to WPSEO_Redirect objects. + * + * @param array[] $matches The redirects to save. + * @param string $format The format for the redirects. + * + * @return WPSEO_Redirect[] The redirects. + */ + protected function convert_redirects_from_matches( $matches, $format ) { + $redirects = []; + + foreach ( $matches as $match ) { + $type = trim( $match[1] ); + $source = trim( $match[2] ); + $target = $this->parse_target( $type, $match ); + + if ( $target === false || $source === '' || ! $this->validate_status_code( $type ) ) { + continue; + } + + $redirects[] = new WPSEO_Redirect( $source, $target, $type, $format ); + } + + return $redirects; + } + + /** + * Parses the target from a match. + * + * @param string $type The status code of the redirect. + * @param string[] $matched The match. + * + * @return bool|string The status code, false if no status code could be parsed. + */ + protected function parse_target( $type, $matched ) { + // If it's a gone status code that doesn't need a target. + if ( $type === '410' ) { + return ''; + } + + $target = trim( $matched[3] ); + + // There is no target, skip it. + if ( $target === '' ) { + return false; + } + + return $target; + } + + /** + * Returns regex patterns to match redirects in .htaccess files. + * + * @return array[] The regex patterns to test against. + */ + protected static function regex_patterns() { + return [ + [ + 'type' => WPSEO_Redirect_Formats::PLAIN, + 'pattern' => '`^Redirect ([0-9]{3}) ([^"\s]+) ([a-z0-9-_+/.:%&?=#\][]+)`im', + ], + [ + 'type' => WPSEO_Redirect_Formats::PLAIN, + 'pattern' => '`^Redirect ([0-9]{3}) "([^"]+)" ([a-z0-9-_+/.:%&?=#\][]+)`im', + ], + [ + 'type' => WPSEO_Redirect_Formats::PLAIN, + 'pattern' => '`^Redirect (410) ([^"\s]+)`im', // Matches a redirect without a target. + ], + [ + 'type' => WPSEO_Redirect_Formats::PLAIN, + 'pattern' => '`^Redirect (410) "([^"]+)"`im', // Matches a redirect without a target. + ], + [ + 'type' => WPSEO_Redirect_Formats::REGEX, + 'pattern' => '`^RedirectMatch ([0-9]{3}) ([^"\s]+) ([^\s]+)`im', + ], + [ + 'type' => WPSEO_Redirect_Formats::REGEX, + 'pattern' => '`^RedirectMatch ([0-9]{3}) "([^"]+)" ([^\s]+)`im', + ], + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-loader-interface.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-loader-interface.php new file mode 100644 index 00000000..de118c69 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-loader-interface.php @@ -0,0 +1,19 @@ +wpdb = $wpdb; + } + + /** + * Loads redirects as WPSEO_Redirects from the Redirection plugin. + * + * @return WPSEO_Redirect[] The loaded redirects. + */ + public function load() { + // Get redirects. + // phpcs:disable WordPress.DB.PreparedSQLPlaceholders.UnsupportedPlaceholder,WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber,WordPress.DB.PreparedSQL.NotPrepared + $items = $this->wpdb->get_results( + $this->wpdb->prepare( + "SELECT `url`, `action_data`, `regex`, `action_code` + FROM %i + WHERE %i = 'enabled' AND %i = 'url'", + $this->wpdb->prefix . 'redirection_items', + 'status', + 'action_type' + ) + ); + // phpcs:enable + + $redirects = []; + + foreach ( $items as $item ) { + $format = WPSEO_Redirect_Formats::PLAIN; + if ( (int) $item->regex === 1 ) { + $format = WPSEO_Redirect_Formats::REGEX; + } + + if ( ! $this->validate_status_code( $item->action_code ) ) { + continue; + } + + $redirects[] = new WPSEO_Redirect( $item->url, $item->action_data, $item->action_code, $format ); + } + + return $redirects; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-safe-redirect-loader.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-safe-redirect-loader.php new file mode 100644 index 00000000..7b3060df --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-safe-redirect-loader.php @@ -0,0 +1,83 @@ +convert_wildcards( $item ); + + $format = WPSEO_Redirect_Formats::PLAIN; + if ( (int) $item['enable_regex'] === 1 ) { + $format = WPSEO_Redirect_Formats::REGEX; + } + + $status_code = $this->convert_status_code( $item['status_code'] ); + + if ( ! $this->validate_status_code( $status_code ) ) { + continue; + } + + $redirects[] = new WPSEO_Redirect( $item['redirect_from'], $item['redirect_to'], $status_code, $format ); + } + + return $redirects; + } + + /** + * Converts unsupported 404 and 403 status codes to a 410 status code. + * Also converts unsupported 303 status codes to a 302 status code. + * + * @param int $status_code The original status code. + * + * @return int A status code Yoast supports. + */ + protected function convert_status_code( $status_code ) { + switch ( $status_code ) { + case 303: + return 302; + case 403: + case 404: + return 410; + default: + return (int) $status_code; + } + } + + /** + * Converts unsupported wildcard format to supported regex format. + * + * @param array $item A Safe Redirect Manager redirect. + * + * @return array A converted redirect. + */ + protected function convert_wildcards( $item ) { + if ( substr( $item['redirect_from'], -1, 1 ) === '*' ) { + $item['redirect_from'] = preg_replace( '/(\*)$/', '.*', $item['redirect_from'] ); + $item['enable_regex'] = 1; + } + + return $item; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-simple-301-redirect-loader.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-simple-301-redirect-loader.php new file mode 100644 index 00000000..ab410087 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/loaders/redirect-simple-301-redirect-loader.php @@ -0,0 +1,44 @@ + $target ) { + $format = WPSEO_Redirect_Formats::PLAIN; + + // If wildcard redirects had been used, and this is one, flip it. + if ( $uses_wildcards && strpos( $origin, '*' ) !== false ) { + $format = WPSEO_Redirect_Formats::REGEX; + $origin = str_replace( '*', '(.*)', $origin ); + $target = str_replace( '*', '$1', $target ); + } + + $redirects[] = new WPSEO_Redirect( $origin, $target, 301, $format ); + } + + return $redirects; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-form-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-form-presenter.php new file mode 100644 index 00000000..f8d00d5a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-form-presenter.php @@ -0,0 +1,57 @@ +view_vars = $view_vars; + + $this->view_vars['redirect_types'] = $this->get_redirect_types(); + } + + /** + * Display the form. + * + * @param array $display Additional display variables. + * + * @return void + */ + public function display( array $display = [] ) { + $display_vars = $this->view_vars; + if ( ! empty( $display ) ) { + $display_vars = array_merge_recursive( $display_vars, $display ); + } + + require WPSEO_PREMIUM_PATH . 'classes/redirect/views/redirects-form.php'; + } + + /** + * Getting array with the available redirect types. + * + * @return array Array with the redirect types. + */ + private function get_redirect_types() { + $types = new WPSEO_Redirect_Types(); + + return $types->get(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-page-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-page-presenter.php new file mode 100644 index 00000000..856592ef --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-page-presenter.php @@ -0,0 +1,89 @@ +get_tab_presenter( $current_tab ); + $redirect_tabs = $this->navigation_tabs( $current_tab ); + + include WPSEO_PREMIUM_PATH . 'classes/redirect/views/redirects.php'; + } + + /** + * Returns a tab presenter. + * + * @param string $tab_to_display The tab that will be shown. + * + * @return WPSEO_Redirect_Tab_Presenter|null Tab presenter instance, or null if invalid tab given. + */ + private function get_tab_presenter( $tab_to_display ) { + $tab_presenter = null; + switch ( $tab_to_display ) { + case WPSEO_Redirect_Formats::PLAIN: + case WPSEO_Redirect_Formats::REGEX: + $tab_presenter = new WPSEO_Redirect_Table_Presenter( $tab_to_display ); + break; + case 'settings': + if ( current_user_can( 'wpseo_manage_options' ) ) { + $tab_presenter = new WPSEO_Redirect_Settings_Presenter( $tab_to_display ); + } + break; + } + + return $tab_presenter; + } + + /** + * Returning the anchors html for the tabs + * + * @param string $current_tab The tab that will be active. + * + * @return array { + * Associative array of navigation tabs data. + * + * @type array $tabs Array of $tab_slug => $tab_label pairs. + * @type string $current_tab The currently active tab slug. + * @type string $page_url Base URL of the current page, to append the tab slug to. + * } + */ + private function navigation_tabs( $current_tab ) { + $tabs = $this->get_redirect_formats(); + + if ( current_user_can( 'wpseo_manage_options' ) ) { + $tabs['settings'] = __( 'Settings', 'wordpress-seo-premium' ); + } + + return [ + 'tabs' => $tabs, + 'current_tab' => $current_tab, + 'page_url' => admin_url( 'admin.php?page=wpseo_redirects&tab=' ), + ]; + } + + /** + * Gets the available redirect formats. + * + * @return array Redirect formats as $slug => $label pairs. + */ + protected function get_redirect_formats() { + $redirect_formats = new WPSEO_Redirect_Formats(); + + return $redirect_formats->get(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-presenter-interface.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-presenter-interface.php new file mode 100644 index 00000000..6bb03324 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-presenter-interface.php @@ -0,0 +1,21 @@ + WPSEO_Redirect_File_Util::get_file_path(), + 'redirect_file' => $this->writable_redirect_file(), + ] + ); + } + + /** + * Check if it is possible to write to the files + * + * @return false|string + */ + private function writable_redirect_file() { + if ( WPSEO_Options::get( 'disable_php_redirect' ) !== 'on' ) { + return false; + } + + // Do file checks. + $file_exists = file_exists( WPSEO_Redirect_File_Util::get_file_path() ); + + if ( WPSEO_Utils::is_apache() ) { + $separate_file = ( WPSEO_Options::get( 'separate_file' ) === 'on' ); + + if ( $separate_file && $file_exists ) { + return 'apache_include_file'; + } + + if ( ! $separate_file ) { + // Everything is as expected. + if ( is_writable( WPSEO_Redirect_Htaccess_Util::get_htaccess_file_path() ) ) { + return false; + } + } + + return 'cannot_write_htaccess'; + } + + if ( WPSEO_Utils::is_nginx() ) { + if ( $file_exists ) { + return 'nginx_include_file'; + } + + return 'cannot_write_file'; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-tab-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-tab-presenter.php new file mode 100644 index 00000000..a7d489a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-tab-presenter.php @@ -0,0 +1,51 @@ +view = $view; + } + + /** + * Displaying the table URL or regex. Depends on the current active tab. + * + * @param array $display Contextual display data. + * + * @return void + */ + public function display( array $display = [] ) { + $view_vars = $this->get_view_vars( $display ); + include WPSEO_PREMIUM_PATH . 'classes/redirect/views/redirects-tab-' . $this->view . '.php'; + } + + /** + * The method to get the variables for the view. This method should return an array, because this will be extracted. + * + * @param array $passed_vars Optional. View data manually passed. Default empty array. + * + * @return array Contextual variables to pass to the view. + */ + abstract protected function get_view_vars( array $passed_vars = [] ); +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-table-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-table-presenter.php new file mode 100644 index 00000000..79fd6700 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/presenters/redirect-table-presenter.php @@ -0,0 +1,73 @@ +view ); + + return array_merge( + $passed_vars, + [ + 'redirect_table' => new WPSEO_Redirect_Table( + $this->view, + $this->get_first_column_value(), + $redirect_manager->get_redirects() + ), + 'origin_from_url' => $this->get_old_url(), + 'quick_edit_table' => new WPSEO_Redirect_Quick_Edit_Presenter(), + 'form_presenter' => new WPSEO_Redirect_Form_Presenter( + [ + 'origin_label_value' => $this->get_first_column_value(), + ] + ), + ] + ); + } + + /** + * Get the old URL from the URL. + * + * @return string The old URL. + */ + private function get_old_url() { + if ( isset( $_GET['old_url'] ) && is_string( $_GET['old_url'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We decode it before sanitization to keep encoded characters. + $old_url = sanitize_text_field( rawurldecode( wp_unslash( $_GET['old_url'] ) ) ); + if ( ! empty( $old_url ) ) { + check_admin_referer( 'wpseo_redirects-old-url', 'wpseo_premium_redirects_nonce' ); + + return esc_attr( $old_url ); + } + } + + return ''; + } + + /** + * Return the value of the first column based on the table type. + * + * @return string The value of the first column. + */ + private function get_first_column_value() { + if ( $this->view === 'regex' ) { + return __( 'Regular Expression', 'wordpress-seo-premium' ); + } + + return __( 'Old URL', 'wordpress-seo-premium' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-ajax.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-ajax.php new file mode 100644 index 00000000..ff3d264f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-ajax.php @@ -0,0 +1,218 @@ +redirect_manager = new WPSEO_Redirect_Manager( $redirect_format ); + $this->redirect_format = $redirect_format; + + $this->set_hooks( $redirect_format ); + } + + /** + * Function that handles the AJAX 'wpseo_add_redirect' action. + * + * @return void + */ + public function ajax_add_redirect() { + $this->valid_ajax_check(); + + // Save the redirect. + $redirect = $this->get_redirect_from_post( 'redirect' ); + $this->validate( $redirect ); + + // The method always returns the added redirect. + if ( $this->redirect_manager->create_redirect( $redirect ) ) { + $response = [ + 'origin' => $redirect->get_origin(), + 'target' => $redirect->get_target(), + 'type' => $redirect->get_type(), + 'info' => [ + 'hasTrailingSlash' => WPSEO_Redirect_Util::requires_trailing_slash( $redirect->get_target() ), + 'isTargetRelative' => WPSEO_Redirect_Util::is_relative_url( $redirect->get_target() ), + ], + ]; + } + else { + // Set the value error. + $error = [ + 'type' => 'error', + 'message' => __( 'Unknown error. Failed to create redirect.', 'wordpress-seo-premium' ), + ]; + + $response = [ 'error' => $error ]; + } + + // Response. + // phpcs:ignore WordPress.Security.EscapeOutput -- WPCS bug/methods can't be whitelisted yet. + wp_die( WPSEO_Utils::format_json_encode( $response ) ); + } + + /** + * Function that handles the AJAX 'wpseo_update_redirect' action. + * + * @return void + */ + public function ajax_update_redirect() { + + $this->valid_ajax_check(); + + $current_redirect = $this->get_redirect_from_post( 'old_redirect' ); + $new_redirect = $this->get_redirect_from_post( 'new_redirect' ); + $this->validate( $new_redirect, $current_redirect ); + + // The method always returns the added redirect. + if ( $this->redirect_manager->update_redirect( $current_redirect, $new_redirect ) ) { + $response = [ + 'origin' => $new_redirect->get_origin(), + 'target' => $new_redirect->get_target(), + 'type' => $new_redirect->get_type(), + ]; + } + else { + // Set the value error. + $error = [ + 'type' => 'error', + 'message' => __( 'Unknown error. Failed to update redirect.', 'wordpress-seo-premium' ), + ]; + + $response = [ 'error' => $error ]; + } + + // Response. + // phpcs:ignore WordPress.Security.EscapeOutput -- WPCS bug/methods can't be whitelisted yet. + wp_die( WPSEO_Utils::format_json_encode( $response ) ); + } + + /** + * Run the validation. + * + * @param WPSEO_Redirect $redirect The redirect to save. + * @param WPSEO_Redirect|null $current_redirect The current redirect. + * + * @return void + */ + private function validate( WPSEO_Redirect $redirect, ?WPSEO_Redirect $current_redirect = null ) { + $validator = new WPSEO_Redirect_Validator(); + + if ( $validator->validate( $redirect, $current_redirect ) === true ) { + return; + } + + $ignore_warning = filter_input( INPUT_POST, 'ignore_warning' ); + + $error = $validator->get_error(); + + if ( $error->get_type() === 'error' || ( $error->get_type() === 'warning' && $ignore_warning === 'false' ) ) { + wp_die( + // phpcs:ignore WordPress.Security.EscapeOutput -- WPCS bug/methods can't be whitelisted yet. + WPSEO_Utils::format_json_encode( [ 'error' => $error->to_array() ] ) + ); + } + } + + /** + * Setting the AJAX hooks. + * + * @param string $hook_suffix The piece that will be stitched after the hooknames. + * + * @return void + */ + private function set_hooks( $hook_suffix ) { + // Add the new redirect. + add_action( 'wp_ajax_wpseo_add_redirect_' . $hook_suffix, [ $this, 'ajax_add_redirect' ] ); + + // Update an existing redirect. + add_action( 'wp_ajax_wpseo_update_redirect_' . $hook_suffix, [ $this, 'ajax_update_redirect' ] ); + + // Add URL response code check AJAX. + if ( ! has_action( 'wp_ajax_wpseo_check_url' ) ) { + add_action( 'wp_ajax_wpseo_check_url', [ $this, 'ajax_check_url' ] ); + } + } + + /** + * Check if the posted nonce is valid and if the user has the needed rights. + * + * @return void + */ + private function valid_ajax_check() { + // Check nonce. + check_ajax_referer( 'wpseo-redirects-ajax-security', 'ajax_nonce' ); + + $this->permission_check(); + } + + /** + * Checks whether the current user is allowed to do what he's doing. + * + * @return void + */ + private function permission_check() { + if ( ! current_user_can( 'edit_posts' ) ) { + wp_die( '0' ); + } + } + + /** + * Get the redirect from the post values. + * + * @param string $post_value The key where the post values are located in the $_POST. + * + * @return WPSEO_Redirect + */ + private function get_redirect_from_post( $post_value ) { + // phpcs:ignore WordPress.Security.NonceVerification -- Reason: nonce is verified in ajax_update_redirect and ajax_add_redirect. + if ( isset( $_POST[ $post_value ] ) && is_array( $_POST[ $post_value ] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification -- Reason: we want to stick to sanitize_url function, while the nonce has been already checked. + $post_values = wp_unslash( $_POST[ $post_value ] ); + + return new WPSEO_Redirect( + $this->sanitize_url( $post_values['origin'] ), + $this->sanitize_url( $post_values['target'] ), + urldecode( $post_values['type'] ), + $this->redirect_format + ); + } + + return new WPSEO_Redirect( '', '', '', '' ); + } + + /** + * Sanitize the URL for displaying on the window. + * + * @param string $url The URL to sanitize. + * + * @return string + */ + private function sanitize_url( $url ) { + return trim( htmlspecialchars_decode( rawurldecode( $url ) ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-file-util.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-file-util.php new file mode 100644 index 00000000..537a896d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-file-util.php @@ -0,0 +1,122 @@ +add_notification( + new Yoast_Notification( + /* translators: %s expands to the file path that we tried to write to */ + sprintf( __( "We're unable to create the directory %s", 'wordpress-seo-premium' ), $basedir ), + [ 'type' => 'error' ] + ) + ); + + return; + } + + // Create the .htaccess file. + if ( ! file_exists( $basedir . '/.htaccess' ) ) { + self::write_file( $basedir . '/.htaccess', "Options -Indexes\ndeny from all" ); + } + + // Create an empty index.php file. + if ( ! file_exists( $basedir . '/index.php' ) ) { + self::write_file( $basedir . '/index.php', 'add_notification( + new Yoast_Notification( + /* translators: %s expands to the file path that we tried to write to */ + sprintf( __( "We're unable to write data to the file %s", 'wordpress-seo-premium' ), $file_path ), + [ 'type' => 'error' ] + ) + ); + + return false; + } + + return true; + } + + /** + * Getting the object which will save the redirects file + * + * @param string $separate_file Saving the redirects in an separate apache file. + * + * @return WPSEO_Redirect_File_Exporter|null + */ + public static function get_file_exporter( $separate_file ) { + // Create the correct file object. + if ( WPSEO_Utils::is_apache() ) { + if ( $separate_file === 'on' ) { + return new WPSEO_Redirect_Apache_Exporter(); + } + + return new WPSEO_Redirect_Htaccess_Exporter(); + } + + if ( WPSEO_Utils::is_nginx() ) { + return new WPSEO_Redirect_Nginx_Exporter(); + } + + return null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formats.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formats.php new file mode 100644 index 00000000..04f910ad --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formats.php @@ -0,0 +1,40 @@ + __( 'Redirects', 'wordpress-seo-premium' ), + self::REGEX => __( 'Regex Redirects', 'wordpress-seo-premium' ), + ]; + } + + /** + * Checks whether the given value is a valid redirect format. + * + * @param string $value Value to check. + * + * @return bool True if a redirect format, false otherwise. + */ + public function has( $value ) { + $formats = $this->get(); + + return isset( $formats[ $value ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formatter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formatter.php new file mode 100644 index 00000000..6b78d0f8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-formatter.php @@ -0,0 +1,28 @@ +get_origin(), + $redirect->get_target(), + $redirect->get_type(), + $redirect->get_format() + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-htaccess-util.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-htaccess-util.php new file mode 100644 index 00000000..e43201f9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-htaccess-util.php @@ -0,0 +1,46 @@ +redirect_option = $redirect_option; + } + + /** + * Imports the redirects and retrieves the import statistics. + * + * @param WPSEO_Redirect[] $redirects The redirects to import. + * + * @return int[] The import statistics. + */ + public function import( array $redirects ) { + array_walk( $redirects, [ $this, 'add_redirect' ] ); + + if ( $this->total_imported > 0 ) { + $this->save_import(); + } + + return [ + 'total_redirects' => count( $redirects ), + 'total_imported' => $this->total_imported, + ]; + } + + /** + * Saves the redirects to the database and exports them to the necessary configuration file. + * + * @codeCoverageIgnore Because it contains dependencies + * + * @return void + */ + protected function save_import() { + $this->redirect_option->save(); + + // Export the redirects to .htaccess, Apache or NGinx configuration files depending on plugin settings. + $redirect_manager = new WPSEO_Redirect_Manager(); + $redirect_manager->export_redirects(); + } + + /** + * Adds a redirect to the option. + * + * @param WPSEO_Redirect $redirect The redirect to add. + * + * @return void + */ + protected function add_redirect( $redirect ) { + if ( ! $this->redirect_option->add( $redirect ) ) { + return; + } + + ++$this->total_imported; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-manager.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-manager.php new file mode 100644 index 00000000..5c57d168 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-manager.php @@ -0,0 +1,197 @@ +redirect_option = $option; + $this->redirect_format = $redirect_format; + $this->exporters = $exporters; + } + + /** + * Get the redirects. + * + * @return WPSEO_Redirect[] + */ + public function get_redirects() { + // Filter the redirect for the current format. + return array_filter( $this->redirect_option->get_all(), [ $this, 'filter_redirects_by_format' ] ); + } + + /** + * Returns all redirects. + * + * @return WPSEO_Redirect[] + */ + public function get_all_redirects() { + return $this->redirect_option->get_all(); + } + + /** + * Export the redirects to the specified sources. + * + * @return void + */ + public function export_redirects() { + $redirects = $this->redirect_option->get_all(); + $exporters = $this->exporters; + + if ( ! $exporters ) { + $exporters = self::default_exporters(); + } + + foreach ( $exporters as $exporter ) { + $exporter->export( $redirects ); + } + } + + /** + * Create a new redirect. + * + * @param WPSEO_Redirect $redirect The redirect object to add. + * + * @return bool + */ + public function create_redirect( WPSEO_Redirect $redirect ) { + if ( $this->redirect_option->add( $redirect ) ) { + $this->save_redirects(); + + return true; + } + + return false; + } + + /** + * Save the redirect. + * + * @param WPSEO_Redirect $current_redirect The old redirect, the value is a key in the redirects array. + * @param WPSEO_Redirect $redirect New redirect object. + * + * @return bool + */ + public function update_redirect( WPSEO_Redirect $current_redirect, WPSEO_Redirect $redirect ) { + if ( $this->redirect_option->update( $current_redirect, $redirect ) ) { + $this->save_redirects(); + + return true; + } + + return false; + } + + /** + * Delete the redirects. + * + * @param WPSEO_Redirect[] $delete_redirects Array with the redirects to remove. + * + * @return bool + */ + public function delete_redirects( $delete_redirects ) { + $deleted = false; + foreach ( $delete_redirects as $delete_redirect ) { + if ( $this->redirect_option->delete( $delete_redirect ) ) { + $deleted = true; + } + } + + if ( $deleted === true ) { + $this->save_redirects(); + } + + return $deleted; + } + + /** + * Returns the redirect when it's found, otherwise it will return false. + * + * @param string $origin The origin to search for. + * + * @return bool|WPSEO_Redirect + */ + public function get_redirect( $origin ) { + return $this->redirect_option->get( $origin ); + } + + /** + * This method will save the redirect option and if necessary the redirect file. + * + * @return void + */ + public function save_redirects() { + // Update the database option. + $this->redirect_option->save(); + + // Save the redirect file. + $this->export_redirects(); + } + + /** + * Filter the redirects that don't match the needed format. + * + * @param WPSEO_Redirect $redirect The redirect to filter. + * + * @return bool + */ + private function filter_redirects_by_format( WPSEO_Redirect $redirect ) { + return $redirect->get_format() === $this->redirect_format; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-option.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-option.php new file mode 100644 index 00000000..ffad7751 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-option.php @@ -0,0 +1,278 @@ +redirects = $this->get_all(); + } + } + + /** + * Getting the array with all the redirects. + * + * @return WPSEO_Redirect[] + */ + public function get_all() { + $redirects = $this->get_from_option(); + + array_walk( $redirects, [ $this, 'map_option_to_object' ] ); + + return $redirects; + } + + /** + * Check if the old redirect doesn't exist already, if not it will be added. + * + * @param WPSEO_Redirect $redirect The redirect object to save. + * + * @return bool + */ + public function add( WPSEO_Redirect $redirect ) { + if ( $this->search( $redirect->get_origin() ) === false ) { + $this->run_redirects_modified_action( $redirect ); + + $this->redirects[] = $redirect; + + return true; + } + + return false; + } + + /** + * Check if the $current_redirect exists and remove it if so. + * + * @param WPSEO_Redirect $current_redirect The current redirect value. + * @param WPSEO_Redirect $redirect The redirect object to save. + * + * @return bool + */ + public function update( WPSEO_Redirect $current_redirect, WPSEO_Redirect $redirect ) { + $found = $this->search( $current_redirect->get_origin() ); + if ( $found !== false ) { + $this->run_redirects_modified_action( $redirect ); + + $this->redirects[ $found ] = $redirect; + + return true; + } + + return false; + } + + /** + * Deletes the given redirect from the array. + * + * @param WPSEO_Redirect $current_redirect The redirect that will be removed. + * + * @return bool + */ + public function delete( WPSEO_Redirect $current_redirect ) { + $found = $this->search( $current_redirect->get_origin() ); + if ( $found !== false ) { + $this->run_redirects_modified_action( $current_redirect ); + + unset( $this->redirects[ $found ] ); + + return true; + } + + return false; + } + + /** + * Get a redirect from the array. + * + * @param string $origin The redirects origin to search for. + * + * @return WPSEO_Redirect|bool + */ + public function get( $origin ) { + $found = $this->search( $origin ); + if ( $found !== false ) { + return $this->redirects[ $found ]; + } + + return false; + } + + /** + * Check if the $origin already exists as a key in the array. + * + * @param string $origin The redirect to search for. + * + * @return int|bool + */ + public function search( $origin ) { + foreach ( $this->redirects as $redirect_key => $redirect ) { + if ( $redirect->origin_is( $origin ) ) { + return $redirect_key; + } + } + + return false; + } + + /** + * Saving the redirects. + * + * @param bool $retry_upgrade Whether or not to retry the 3.1 upgrade. Used to prevent infinite recursion. + * + * @return void + */ + public function save( $retry_upgrade = true ) { + $redirects = $this->redirects; + + // Retry the 3.1 upgrade routine to make sure we're always dealing with valid redirects. + $upgrade_manager = new WPSEO_Upgrade_Manager(); + if ( $retry_upgrade && $upgrade_manager->should_retry_upgrade_31() ) { + $upgrade_manager->retry_upgrade_31( true ); + $redirects = array_merge( $redirects, $this->get_all() ); + } + + array_walk( $redirects, [ $this, 'map_object_to_option' ] ); + + /** + * Filter: 'Yoast\WP\SEO\save_redirects' - can be used to filter the redirects before saving. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param array $redirects + */ + $redirects = apply_filters( 'Yoast\WP\SEO\save_redirects', $redirects ); + + // Update the database option. + update_option( self::OPTION, $redirects, false ); + } + + /** + * Setting the redirects property. + * + * @param string $option_name The target option name. + * + * @return array + */ + public function get_from_option( $option_name = self::OPTION ) { + $redirects = get_option( $option_name ); + + /** + * Filter: 'Yoast\WP\SEO\get_redirects' - can be used to filter the redirects on option retrieval. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param array $redirects + */ + $redirects = apply_filters( 'Yoast\WP\SEO\get_redirects', $redirects ); + + if ( ! is_array( $redirects ) ) { + $redirects = []; + } + + return $redirects; + } + + /** + * Runs the redirects modified hook with the altered redirect as input. + * + * @param WPSEO_Redirect $redirect The redirect that has been altered. + * + * @return void + */ + protected function run_redirects_modified_action( WPSEO_Redirect $redirect ) { + /** + * Filter: Yoast\WP\SEO\redirects_modified - Allow developers to run actions when the redirects are modified. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param string $origin The redirect origin. + * @param string $target The redirect target. + * @param int $type The redirect type (301, 404, 410, etc). + */ + do_action( 'Yoast\WP\SEO\redirects_modified', $redirect->get_origin(), $redirect->get_target(), $redirect->get_type() ); + } + + /** + * Maps the array values to a redirect object. + * + * @param array $redirect_values The data for the redirect option. + * + * @return void + */ + private function map_option_to_object( array &$redirect_values ) { + $redirect_values = new WPSEO_Redirect( $redirect_values['origin'], $redirect_values['url'], $redirect_values['type'], $redirect_values['format'] ); + } + + /** + * Maps a redirect object to an array option. + * + * @param WPSEO_Redirect $redirect The redirect to map. + * + * @return void + */ + private function map_object_to_option( WPSEO_Redirect &$redirect ) { + $redirect = [ + 'origin' => $redirect->get_origin(), + 'url' => $redirect->get_target(), + 'type' => $redirect->get_type(), + 'format' => $redirect->get_format(), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-page.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-page.php new file mode 100644 index 00000000..377445b5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-page.php @@ -0,0 +1,354 @@ +initialize_admin(); + } + + // Only initialize the ajax for all tabs except settings. + if ( wp_doing_ajax() ) { + $this->initialize_ajax(); + } + } + + /** + * Display the presenter. + * + * @return void + */ + public function display() { + $display_args = [ 'current_tab' => $this->get_current_tab() ]; + + $redirect_presenter = new WPSEO_Redirect_Page_Presenter(); + $redirect_presenter->display( $display_args ); + } + + /** + * Catches possible posted filter values and redirects it to a GET-request. + * + * It catches: + * A search post. + * A redirect-type filter. + * + * @return void + */ + public function list_table_search() { + if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { + return; + } + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Variable is used in a strict comparison and sanitized by wp_safe_redirect anyway. + $url = wp_unslash( $_SERVER['REQUEST_URI'] ); + $new_url = $this->extract_redirect_type_from_url( $url ); + $new_url = $this->extract_search_string_from_url( $new_url ); + + if ( $url !== $new_url ) { + // Do the redirect. + wp_safe_redirect( $new_url ); + exit; + } + } + + /** + * Extracts the redirect type from the passed URL. + * + * @param string $url The URL to try and extract the redirect type from. + * + * @return string The newly formatted URL. Returns original URL if filter is null. + */ + protected function extract_redirect_type_from_url( $url ) { + if ( ( ! isset( $_POST['redirect-type'] ) ) || ( ! is_string( $_POST['redirect-type'] ) ) + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized in wp_verify_none. + || ! isset( $_POST['wpseo_redirects_ajax_nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['wpseo_redirects_ajax_nonce'] ), 'wpseo-redirects-ajax-security' ) ) { + return $url; + } + + $filter = sanitize_text_field( wp_unslash( $_POST['redirect-type'] ) ); + + $new_url = remove_query_arg( 'redirect-type', $url ); + + if ( $filter !== '0' ) { + $new_url = add_query_arg( 'redirect-type', rawurlencode( $filter ), $new_url ); + } + + return $new_url; + } + + /** + * Extracts the search string from the passed URL. + * + * @param string $url The URL to try and extract the search string from. + * + * @return string The newly formatted URL. Returns original URL if search string is null. + */ + protected function extract_search_string_from_url( $url ) { + if ( ( ! isset( $_POST['s'] ) ) || ( ! is_string( $_POST['s'] ) ) + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized in wp_verify_none. + || ! isset( $_POST['wpseo_redirects_ajax_nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['wpseo_redirects_ajax_nonce'] ), 'wpseo-redirects-ajax-security' ) ) { + return $url; + } + + $search_string = sanitize_text_field( wp_unslash( $_POST['s'] ) ); + + $new_url = remove_query_arg( 's', $url ); + + if ( $search_string !== '' ) { + $new_url = add_query_arg( 's', rawurlencode( $search_string ), $new_url ); + } + + return $new_url; + } + + /** + * Load the admin redirects scripts. + * + * @return void + */ + public function enqueue_assets() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $version = $asset_manager->flatten_version( WPSEO_PREMIUM_VERSION ); + + $dependencies = [ + 'jquery', + 'jquery-ui-dialog', + 'wp-util', + 'underscore', + 'wp-api', + 'wp-api-fetch', + ]; + + wp_enqueue_script( + 'wp-seo-premium-admin-redirects', + plugin_dir_url( WPSEO_PREMIUM_FILE ) + . 'assets/js/dist/wp-seo-premium-admin-redirects-' . $version . WPSEO_CSSJS_SUFFIX . '.js', + $dependencies, + WPSEO_PREMIUM_VERSION, + true + ); + wp_localize_script( 'wp-seo-premium-admin-redirects', 'wpseoPremiumStrings', WPSEO_Premium_Javascript_Strings::strings() ); + wp_localize_script( 'wp-seo-premium-admin-redirects', 'wpseoUserLocale', [ 'code' => substr( get_user_locale(), 0, 2 ) ] ); + wp_localize_script( 'wp-seo-premium-admin-redirects', 'wpseoAdminRedirect', [ 'homeUrl' => home_url( '/' ) ] ); + wp_enqueue_style( 'wpseo-premium-redirects', plugin_dir_url( WPSEO_PREMIUM_FILE ) . 'assets/css/dist/premium-redirects-' . $version . '.css', [], WPSEO_PREMIUM_VERSION ); + + wp_enqueue_style( 'wp-jquery-ui-dialog' ); + + $screen_option_args = [ + 'label' => __( 'Redirects per page', 'wordpress-seo-premium' ), + 'default' => 25, + 'option' => 'redirects_per_page', + ]; + add_screen_option( 'per_page', $screen_option_args ); + } + + /** + * Catch redirects_per_page. + * + * @param string|false $status The value to save instead of the option value. + * Default false (to skip saving the current option). + * @param string $option The option name where the value is set for. + * @param string $value The new value for the screen option. + * + * @return string|false + */ + public function set_screen_option( $status, $option, $value ) { + if ( $option === 'redirects_per_page' ) { + return $value; + } + + return $status; + } + + /** + * Hook that runs after the 'wpseo_redirect' option is updated. + * + * @param array $old_value Unused. + * @param array $value The new saved values. + * + * @return void + */ + public function save_redirect_files( $old_value, $value ) { + + $is_php = ( empty( $value['disable_php_redirect'] ) || $value['disable_php_redirect'] !== 'on' ); + + $was_separate_file = ( ! empty( $old_value['separate_file'] ) && $old_value['separate_file'] === 'on' ); + $is_separate_file = ( ! empty( $value['separate_file'] ) && $value['separate_file'] === 'on' ); + + // Check if the 'disable_php_redirect' option set to true/on. + if ( ! $is_php ) { + // The 'disable_php_redirect' option is set to true(on) so we need to generate a file. + // The Redirect Manager will figure out what file needs to be created. + $redirect_manager = new WPSEO_Redirect_Manager(); + $redirect_manager->export_redirects(); + } + + // Check if we need to remove the .htaccess redirect entries. + if ( WPSEO_Utils::is_apache() ) { + if ( $is_php || ( ! $was_separate_file && $is_separate_file ) ) { + // Remove the apache redirect entries. + WPSEO_Redirect_Htaccess_Util::clear_htaccess_entries(); + } + + if ( $is_php || ( $was_separate_file && ! $is_separate_file ) ) { + // Remove the apache separate file redirect entries. + WPSEO_Redirect_File_Util::write_file( WPSEO_Redirect_File_Util::get_file_path(), '' ); + } + } + + if ( WPSEO_Utils::is_nginx() && $is_php ) { + // Remove the nginx redirect entries. + $this->clear_nginx_redirects(); + } + } + + /** + * The server should always be apache. And the php redirects have to be enabled or in case of a separate + * file it should be disabled. + * + * @param bool $disable_php_redirect Are the php redirects disabled. + * @param bool $separate_file Value of the separate file. + * + * @return bool + */ + private function remove_htaccess_entries( $disable_php_redirect, $separate_file ) { + return ( WPSEO_Utils::is_apache() && ( ! $disable_php_redirect || ( $disable_php_redirect && $separate_file ) ) ); + } + + /** + * Clears the redirects from the nginx config. + * + * @return void + */ + private function clear_nginx_redirects() { + $redirect_file = WPSEO_Redirect_File_Util::get_file_path(); + if ( is_writable( $redirect_file ) ) { + WPSEO_Redirect_File_Util::write_file( $redirect_file, '' ); + } + } + + /** + * Initialize admin hooks. + * + * @return void + */ + private function initialize_admin() { + $this->fetch_bulk_action(); + + // Check if we need to save files after updating options. + add_action( 'update_option_wpseo_redirect', [ $this, 'save_redirect_files' ], 10, 2 ); + + // Convert post into get on search and loading the page scripts. + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Recommended -- We're not manipulating the value. + if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) && wp_unslash( $_GET['page'] ) === 'wpseo_redirects' ) { + $upgrade_manager = new WPSEO_Upgrade_Manager(); + $upgrade_manager->retry_upgrade_31(); + + add_action( 'admin_init', [ $this, 'list_table_search' ] ); + + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + add_filter( 'set-screen-option', [ $this, 'set_screen_option' ], 11, 3 ); + } + } + + /** + * Initialize the AJAX redirect files. + * + * @return void + */ + private function initialize_ajax() { + // Normal Redirect AJAX. + new WPSEO_Redirect_Ajax( WPSEO_Redirect_Formats::PLAIN ); + + // Regex Redirect AJAX. + new WPSEO_Redirect_Ajax( WPSEO_Redirect_Formats::REGEX ); + } + + /** + * Getting the current active tab. + * + * @return string + */ + private function get_current_tab() { + static $current_tab; + + if ( $current_tab === null ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- We're not manipulating the value. + if ( isset( $_GET['tab'] ) && is_string( $_GET['tab'] ) + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Recommended -- value sanitized in the if body, regex filters unwanted values. + && in_array( wp_unslash( $_GET['tab'] ), [ WPSEO_Redirect_Formats::PLAIN, WPSEO_Redirect_Formats::REGEX, 'settings' ], true ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- the regex takes care of filtering out unwanted values. + $current_tab = sanitize_text_field( wp_unslash( $_GET['tab'] ) ); + } + else { + $current_tab = WPSEO_Redirect_Formats::PLAIN; + } + } + + return $current_tab; + } + + /** + * Setting redirect manager, based on the current active tab. + * + * @return WPSEO_Redirect_Manager + */ + private function get_redirect_manager() { + static $redirect_manager; + + if ( $redirect_manager === null ) { + $redirects_format = WPSEO_Redirect_Formats::PLAIN; + if ( $this->get_current_tab() === WPSEO_Redirect_Formats::REGEX ) { + $redirects_format = WPSEO_Redirect_Formats::REGEX; + } + + $redirect_manager = new WPSEO_Redirect_Manager( $redirects_format ); + } + + return $redirect_manager; + } + + /** + * Fetches the bulk action for removing redirects. + * + * @return void + */ + private function fetch_bulk_action() { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized in wp_verify_none. + if ( ! isset( $_POST['wpseo_redirects_ajax_nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['wpseo_redirects_ajax_nonce'] ), 'wpseo-redirects-ajax-security' ) ) { + return; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We're just strictly comparing the value. + if ( ( ! isset( $_POST['action'] ) || ! is_string( $_POST['action'] ) || ! wp_unslash( $_POST['action'] ) === 'delete' ) + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We're just strictly comparing the value. + && ( ! isset( $_POST['action2'] ) || ! is_string( $_POST['action2'] ) || ! wp_unslash( $_POST['action2'] ) === 'delete' ) ) { + return; + } + + if ( ! isset( $_POST['wpseo_redirects_bulk_delete'] ) || ! is_array( $_POST['wpseo_redirects_bulk_delete'] ) ) { + return; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Array elements are sanitized one by one in the foreach loop. + $bulk_delete = wp_unslash( $_POST['wpseo_redirects_bulk_delete'] ); + $redirects = []; + foreach ( $bulk_delete as $origin ) { + $redirect = $this->get_redirect_manager()->get_redirect( $origin ); + if ( $redirect !== false ) { + $redirects[] = $redirect; + } + } + $this->get_redirect_manager()->delete_redirects( $redirects ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-sitemap-filter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-sitemap-filter.php new file mode 100644 index 00000000..58b974ce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-sitemap-filter.php @@ -0,0 +1,85 @@ +home_url = $home_url; + } + + /** + * Registers the hooks. + * + * @return void + */ + public function register_hooks() { + add_filter( 'wpseo_sitemap_entry', [ $this, 'filter_sitemap_entry' ] ); + add_action( 'Yoast\WP\SEO\redirects_modified', [ $this, 'clear_sitemap_cache' ] ); + } + + /** + * Prevents a redirected URL from being added to the sitemap. + * + * @param array $url The url data. + * + * @return bool|array False when entry will be redirected. + */ + public function filter_sitemap_entry( $url ) { + if ( empty( $url['loc'] ) ) { + return $url; + } + + $entry_location = str_replace( $this->home_url, '', $url['loc'] ); + + if ( $this->is_redirect( $entry_location ) !== false ) { + return false; + } + + return $url; + } + + /** + * Clears the sitemap cache. + * + * @return void + */ + public function clear_sitemap_cache() { + WPSEO_Sitemaps_Cache::clear(); + } + + /** + * Checks if the given entry location already exists as a redirect. + * + * @param string $entry_location The entry location. + * + * @return bool Whether the entry location exists as a redirect. + */ + protected function is_redirect( $entry_location ) { + static $redirects = null; + + if ( $redirects === null ) { + $redirects = new WPSEO_Redirect_Option(); + } + + return $redirects->search( $entry_location ) !== false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-table.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-table.php new file mode 100644 index 00000000..32cc2a75 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-table.php @@ -0,0 +1,496 @@ + null, + 'search_string' => null, + ]; + + /** + * The name of the first column. + * + * @var string + */ + private $current_column; + + /** + * The primary column. + * + * @var string + */ + private $primary_column = 'type'; + + /** + * Caches the WPSEO_Redirect_Types::get() result. + * + * @var string[] + */ + private $redirect_types; + + /** + * Holds the orderby. + * + * @var string + */ + private $orderby = 'old'; + + /** + * Holds the order. + * + * @var string + */ + private $order = 'asc'; + + /** + * WPSEO_Redirect_Table constructor. + * + * @param array|string $type Type of the redirects that is opened. + * @param string $current_column The value of the first column. + * @param WPSEO_Redirect[] $redirects The redirects. + */ + public function __construct( $type, $current_column, $redirects ) { + parent::__construct( [ 'plural' => $type ] ); + + $this->current_column = $current_column; + + // Cache used in filter_items and extra_tablenav. + $wpseo_redirect_types = new WPSEO_Redirect_Types(); + $this->redirect_types = $wpseo_redirect_types->get(); + + $this->set_items( $redirects ); + + add_filter( 'list_table_primary_column', [ $this, 'redirect_list_table_primary_column' ], 10, 2 ); + } + + /** + * Renders the extra table navigation. + * + * @param string $which Which tablenav is called. + * + * @return void + */ + public function extra_tablenav( $which ) { + if ( $which !== 'top' ) { + return; + } + + $selected = $this->filter['redirect_type']; + if ( $selected === null ) { + $selected = 0; + } + ?> +
      + + + 'post-query-submit' ] ); ?> +
      + '', + 'type' => _x( 'Type', 'noun', 'wordpress-seo-premium' ), + 'old' => $this->current_column, + 'new' => __( 'New URL', 'wordpress-seo-premium' ), + ]; + } + + /** + * Counts the total columns for the table. + * + * @return int The total amount of columns. + */ + public function count_columns() { + return count( $this->get_columns() ); + } + + /** + * Filter for setting the primary table column. + * + * @param string $column The current column. + * @param string $screen The current opened window. + * + * @return string The primary table column. + */ + public function redirect_list_table_primary_column( $column, $screen ) { + if ( $screen === 'seo_page_wpseo_redirects' ) { + $column = $this->primary_column; + } + + return $column; + } + + /** + * Sets up the table variables, fetch the items from the database, search, sort and format the items. + * Sets the items as the WPSEO_Redirect_Table items variable. + * + * @return void + */ + public function prepare_items() { + // Setup the columns. + $this->_column_headers = [ $this->get_columns(), [], $this->get_sortable_columns() ]; + + // Get variables needed for pagination. + $per_page = $this->get_items_per_page( 'redirects_per_page', 25 ); + $total_items = count( $this->items ); + $pagination_args = [ + 'total_items' => $total_items, + 'total_pages' => ceil( $total_items / $per_page ), + 'per_page' => $per_page, + ]; + + // Set pagination. + $this->set_pagination_args( $pagination_args ); + + $current_page = $this->get_pagenum(); + + // Setting the starting point. If starting point is below 1, overwrite it with value 0, otherwise it will be sliced of at the back. + $slice_start = ( $current_page - 1 ); + if ( $slice_start < 0 ) { + $slice_start = 0; + } + + // Apply 'pagination'. + $formatted_items = array_slice( $this->items, ( $slice_start * $per_page ), $per_page ); + + // Set items. + $this->items = $formatted_items; + } + + /** + * Returns the columns that are sortable. + * + * @return array[] An array containing the sortable columns. + */ + public function get_sortable_columns() { + return [ + 'old' => [ 'old', false ], + 'new' => [ 'new', false ], + 'type' => [ 'type', false ], + ]; + } + + /** + * Reorders the items based on user input. + * + * @param array $a The current sort direction. + * @param array $b The new sort direction. + * + * @return int The order that should be used. + */ + public function do_reorder( $a, $b ) { + // Determine sort order. + $result = strcmp( $a[ $this->orderby ], $b[ $this->orderby ] ); + + // Send final sort direction to usort. + return ( $this->order === 'asc' ) ? $result : ( -$result ); + } + + /** + * Creates a column for a checkbox. + * + * @param array $item Array with the row data. + * + * @return string The column with a checkbox. + */ + public function column_cb( $item ) { + return sprintf( + ' ', + esc_attr( $item['old'] ), + $item['row_number'], + /* translators: Hidden accessibility text. */ + esc_html( __( 'Select this redirect', 'wordpress-seo-premium' ) ) + ); + } + + /** + * Displays a default column. + * + * @param array $item Array with the row data. + * @param string $column_name The name of the needed column. + * + * @return string The default column. + */ + public function column_default( $item, $column_name ) { + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $is_regex = isset( $_GET['tab'] ) && is_string( $_GET['tab'] ) && sanitize_text_field( wp_unslash( $_GET['tab'] ) ) === 'regex'; + $row_actions = $this->get_row_actions( $column_name ); + + switch ( $column_name ) { + case 'new': + $classes = [ 'val' ]; + $new_url = $item['new']; + $new_full_url = $new_url; + if ( ! $is_regex && WPSEO_Redirect_Util::requires_trailing_slash( $new_url ) ) { + $classes[] = 'has-trailing-slash'; + } + if ( WPSEO_Redirect_Util::is_relative_url( $new_url ) ) { + $new_full_url = home_url( $new_url ); + } + + if ( + $new_url === '' + || $new_url === '/' + || ! WPSEO_Redirect_Util::is_relative_url( $new_url ) + ) { + + $classes[] = 'remove-slashes'; + } + + if ( $new_url ) { + return '' . esc_html( $new_url ) . '' . $row_actions; + } + return '
      ' . $row_actions; + + case 'old': + $classes = ''; + $old_full_url = home_url( $item['old'] ); + if ( $is_regex === true ) { + return '
      ' . esc_html( $item['old'] ) . '
      ' . $row_actions; + } + + return '' . esc_html( $item['old'] ) . '' . $row_actions; + + case 'type': + return '
      ' . esc_html( $item['type'] ) . '
      ' . $row_actions; + + default: + return $item[ $column_name ]; + } + } + + /** + * Returns the available bulk actions. + * + * @return string[] Array containing the available bulk actions. + */ + public function get_bulk_actions() { + return [ + 'delete' => __( 'Delete', 'wordpress-seo-premium' ), + ]; + } + + /** + * Sets the items and orders them. + * + * @param array $items The data that will be showed. + * + * @return void + */ + private function set_items( $items ) { + // Getting the items. + $this->items = $this->filter_items( $items ); + + $this->format_items(); + + // Sort the results. + if ( count( $this->items ) > 0 ) { + $this->orderby = $this->get_orderby(); + $this->order = $this->get_order(); + usort( $this->items, [ $this, 'do_reorder' ] ); + } + } + + /** + * Filters the given items. + * + * @param WPSEO_Redirect[] $items The items to filter. + * + * @return array The filtered items. + */ + private function filter_items( array $items ) { + $search_string = ''; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We come from our own redirect in a simple search form, let's not overcomplicate. + if ( isset( $_GET['s'] ) && is_string( $_GET['s'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: Same as above. + $search_string = trim( sanitize_text_field( wp_unslash( $_GET['s'] ) ), '/' ); + } + if ( $search_string !== '' ) { + $this->filter['search_string'] = $search_string; + + $items = array_filter( $items, [ $this, 'filter_by_search_string' ] ); + } + + $redirect_type = 0; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We come from our own redirect in a simple filter form, let's not overcomplicate. + if ( isset( $_GET['redirect-type'] ) && is_string( $_GET['redirect-type'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: Cast to an integer and strictly compared against known keys. + $redirect_type = (int) wp_unslash( $_GET['redirect-type'] ); + $redirect_type = array_key_exists( $redirect_type, $this->redirect_types ) ? $redirect_type : 0; + } + if ( $redirect_type !== 0 ) { + $this->filter['redirect_type'] = $redirect_type; + + $items = array_filter( $items, [ $this, 'filter_by_type' ] ); + } + + return $items; + } + + /** + * Formats the items. + * + * @return void + */ + private function format_items() { + // Format the data. + $formatted_items = []; + + $counter = 1; + + foreach ( $this->items as $redirect ) { + $formatted_items[] = [ + 'old' => $redirect->get_origin(), + 'new' => $redirect->get_target(), + 'type' => $redirect->get_type(), + 'row_number' => $counter, + ]; + + ++$counter; + } + + $this->items = $formatted_items; + } + + /** + * Filters the redirect by entered search string. + * + * @param WPSEO_Redirect $redirect The redirect to filter. + * + * @return bool True when the search strings match. + */ + private function filter_by_search_string( WPSEO_Redirect $redirect ) { + return ( stripos( $redirect->get_origin(), $this->filter['search_string'] ) !== false || stripos( $redirect->get_target(), $this->filter['search_string'] ) !== false ); + } + + /** + * Filters the redirect by redirect type. + * + * @param WPSEO_Redirect $redirect The redirect to filter. + * + * @return bool True when type matches redirect type. + */ + private function filter_by_type( WPSEO_Redirect $redirect ) { + return $redirect->get_type() === $this->filter['redirect_type']; + } + + /** + * The old column actions. + * + * @param string $column The column name to verify. + * + * @return string + */ + private function get_row_actions( $column ) { + if ( $column === $this->primary_column ) { + $actions = [ + 'edit' => '' . __( 'Edit', 'wordpress-seo-premium' ) . '', + 'trash' => '' . __( 'Delete', 'wordpress-seo-premium' ) . '', + ]; + + return $this->row_actions( $actions ); + } + + return ''; + } + + /** + * Generates and display row actions links for the list table. + * + * We override the parent class method to avoid doubled buttons to be printed out. + * + * @param object $item The item being acted upon. + * @param string $column_name Current column name. + * @param string $primary Primary column name. + * + * @return string Empty string. + */ + protected function handle_row_actions( $item, $column_name, $primary ) { + return ''; + } + + /** + * Retrieves the orderby from the request. + * + * @return string The orderby value. + */ + private function get_orderby() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: WP list table is not using a nonce. + if ( isset( $_GET['orderby'] ) && is_string( $_GET['orderby'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: same as above and we are strictly comparing the values. + $orderby = wp_unslash( $_GET['orderby'] ); + if ( array_key_exists( $orderby, $this->get_sortable_columns() ) ) { + return $orderby; + } + } + + return 'old'; + } + + /** + * Retrieves the order from the request. + * + * @return string The order value. + */ + private function get_order() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: WP list table is not using a nonce. + if ( isset( $_GET['order'] ) && is_string( $_GET['order'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: same as above and we are strictly comparing the values. + $order = wp_unslash( $_GET['order'] ); + if ( in_array( $order, [ 'asc', 'desc' ], true ) ) { + return $order; + } + } + + return 'asc'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-types.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-types.php new file mode 100644 index 00000000..840d8935 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-types.php @@ -0,0 +1,57 @@ + __( '301 Moved Permanently', 'wordpress-seo-premium' ), + '302' => __( '302 Found', 'wordpress-seo-premium' ), + '307' => __( '307 Temporary Redirect', 'wordpress-seo-premium' ), + '410' => __( '410 Content Deleted', 'wordpress-seo-premium' ), + '451' => __( '451 Unavailable For Legal Reasons', 'wordpress-seo-premium' ), + ]; + + /** + * Filter: 'Yoast\WP\SEO\redirect_types' - can be used to filter the redirect types. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param array $redirect_types + */ + return apply_filters( 'Yoast\WP\SEO\redirect_types', $redirect_types ); + } + + /** + * Checks whether the given value is a valid redirect type. + * + * @param string $value Value to check. + * + * @return bool True if a redirect type, false otherwise. + */ + public function has( $value ) { + $types = $this->get(); + + return isset( $types[ $value ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-upgrade.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-upgrade.php new file mode 100644 index 00000000..14f37084 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-upgrade.php @@ -0,0 +1,147 @@ + WPSEO_Redirect_Formats::PLAIN, + WPSEO_Redirect_Option::OLD_OPTION_REGEX => WPSEO_Redirect_Formats::REGEX, + ]; + + /** + * Upgrade routine from Yoast SEO premium 1.2.0. + * + * @return void + */ + public static function upgrade_1_2_0() { + $redirect_option = self::get_redirect_option(); + $redirects = []; + + foreach ( self::$redirect_option_names as $redirect_option_name => $redirect_format ) { + $old_redirects = $redirect_option->get_from_option( $redirect_option_name ); + + foreach ( $old_redirects as $origin => $redirect ) { + // Check if the redirect is not an array yet. + if ( ! is_array( $redirect ) ) { + $redirects[] = new WPSEO_Redirect( $origin, $redirect['url'], $redirect['type'], $redirect_format ); + } + } + } + + self::import_redirects( $redirects ); + } + + /** + * Check if redirects should be imported from the free version. + * + * @since 2.3 + * + * @return void + */ + public static function import_redirects_2_3() { + // phpcs:ignore WordPress.DB.SlowDBQuery -- Upgrade routine, so rarely used, therefore not an issue. + $wp_query = new WP_Query( 'post_type=any&meta_key=_yoast_wpseo_redirect&order=ASC' ); + + if ( ! empty( $wp_query->posts ) ) { + $redirects = []; + + foreach ( $wp_query->posts as $post ) { + + $old_url = '/' . $post->post_name . '/'; + $new_url = get_post_meta( $post->ID, '_yoast_wpseo_redirect', true ); + + // Create redirect. + $redirects[] = new WPSEO_Redirect( $old_url, $new_url, 301, WPSEO_Redirect_Formats::PLAIN ); + + // Remove post meta value. + delete_post_meta( $post->ID, '_yoast_wpseo_redirect' ); + } + + self::import_redirects( $redirects ); + } + } + + /** + * Upgrade routine to merge plain and regex redirects in a single option. + * + * @return void + */ + public static function upgrade_3_1() { + $redirects = []; + + foreach ( self::$redirect_option_names as $redirect_option_name => $redirect_format ) { + $old_redirects = get_option( $redirect_option_name, [] ); + + foreach ( $old_redirects as $origin => $redirect ) { + // Only when URL and type is set. + if ( array_key_exists( 'url', $redirect ) && array_key_exists( 'type', $redirect ) ) { + $redirects[] = new WPSEO_Redirect( $origin, $redirect['url'], $redirect['type'], $redirect_format ); + } + } + } + + // Saving the redirects to the option. + self::import_redirects( $redirects, [ new WPSEO_Redirect_Option_Exporter() ] ); + } + + /** + * Exports the redirects to htaccess or nginx file if needed. + * + * @return void + */ + public static function upgrade_13_0() { + $redirect_manager = new WPSEO_Redirect_Manager(); + $redirect_manager->export_redirects(); + } + + /** + * Imports an array of redirect objects. + * + * @param WPSEO_Redirect[] $redirects The redirects. + * @param WPSEO_Redirect_Exporter[]|null $exporters The exporters. + * + * @return void + */ + private static function import_redirects( $redirects, $exporters = null ) { + if ( empty( $redirects ) ) { + return; + } + + $redirect_option = self::get_redirect_option(); + $redirect_manager = new WPSEO_Redirect_Manager( null, $exporters, $redirect_option ); + + foreach ( $redirects as $redirect ) { + $redirect_option->add( $redirect ); + } + + $redirect_option->save( false ); + $redirect_manager->export_redirects(); + } + + /** + * Gets and caches the redirect option. + * + * @return WPSEO_Redirect_Option + */ + private static function get_redirect_option() { + static $redirect_option; + + if ( empty( $redirect_option ) ) { + $redirect_option = new WPSEO_Redirect_Option( false ); + } + + return $redirect_option; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-url-formatter.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-url-formatter.php new file mode 100644 index 00000000..b7f56538 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-url-formatter.php @@ -0,0 +1,76 @@ +url = $this->sanitize_url( $url ); + } + + /** + * We want to strip the subdirectory from the redirect url. + * + * @param string $home_url The URL to use as the base. + * + * @return string + */ + public function format_without_subdirectory( $home_url ) { + $subdirectory = $this->get_subdirectory( $home_url ); + + if ( ! empty( $subdirectory ) ) { + $subdirectory = trailingslashit( $subdirectory ); + $path_position = strpos( $this->url, $subdirectory ); + if ( $path_position === 0 ) { + return '/' . $this->sanitize_url( substr( $this->url, strlen( $subdirectory ) ) ); + } + } + + return '/' . $this->url; + } + + /** + * Removes the slashes at the beginning of an url. + * + * @param string $url The URL to sanitize. + * + * @return string + */ + protected function sanitize_url( $url ) { + return ltrim( $url, '/' ); + } + + /** + * Returns the subdirectory from the given URL. + * + * @param string $url The URL to get the subdirectory for. + * + * @return string + */ + protected function get_subdirectory( $url ) { + $path = wp_parse_url( $url, PHP_URL_PATH ); + if ( is_string( $path ) ) { + return $this->sanitize_url( $path ); + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-util.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-util.php new file mode 100644 index 00000000..832ad3a8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect-util.php @@ -0,0 +1,131 @@ + [ + 'validation_class' => 'WPSEO_Redirect_Relative_Origin_Validation', + 'exclude_types' => [], + 'exclude_format' => [ WPSEO_Redirect_Formats::REGEX ], + ], + 'self-redirect' => [ + 'validation_class' => 'WPSEO_Redirect_Self_Redirect_Validation', + 'exclude_types' => [], + 'exclude_format' => [ WPSEO_Redirect_Formats::REGEX ], + ], + 'uniqueness' => [ + 'validation_class' => 'WPSEO_Redirect_Uniqueness_Validation', + 'exclude_types' => [], + 'exclude_format' => [], + ], + 'presence' => [ + 'validation_class' => 'WPSEO_Redirect_Presence_Validation', + 'exclude_types' => [], + 'exclude_format' => [], + ], + 'subdirectory-presence' => [ + 'validation_class' => 'WPSEO_Redirect_Subdirectory_Validation', + 'exclude_types' => [], + 'exclude_format' => [], + ], + 'accessible' => [ + 'validation_class' => 'WPSEO_Redirect_Accessible_Validation', + 'exclude_types' => [ WPSEO_Redirect_Types::DELETED, WPSEO_Redirect_Types::UNAVAILABLE ], + 'exclude_format' => [ WPSEO_Redirect_Formats::REGEX ], + ], + 'endpoint' => [ + 'validation_class' => 'WPSEO_Redirect_Endpoint_Validation', + 'exclude_types' => [ WPSEO_Redirect_Types::DELETED, WPSEO_Redirect_Types::UNAVAILABLE ], + 'exclude_format' => [ WPSEO_Redirect_Formats::REGEX ], + ], + ]; + + /** + * A string holding a possible redirect validation error. + * + * @var bool|string The validation error. + */ + protected $validation_error = false; + + /** + * Validates the old and the new URL. + * + * @param WPSEO_Redirect $redirect The redirect that will be saved. + * @param WPSEO_Redirect|null $current_redirect Redirect that will be used for comparison. + * + * @return bool|string + */ + public function validate( WPSEO_Redirect $redirect, ?WPSEO_Redirect $current_redirect = null ) { + + $validators = $this->get_validations( $this->get_filtered_validation_rules( $this->validation_rules, $redirect ) ); + $redirects = $this->get_redirects( $redirect->get_format() ); + + $this->validation_error = ''; + foreach ( $validators as $validator ) { + if ( ! $validator->run( $redirect, $current_redirect, $redirects ) ) { + $this->validation_error = $validator->get_error(); + + return false; + } + } + + return true; + } + + /** + * Returns the validation error. + * + * @return WPSEO_Validation_Result + */ + public function get_error() { + return $this->validation_error; + } + + /** + * Removes a rule from the validations. + * + * @param array $validations Array with the validations. + * @param string $rule_to_remove The rule that will be removed. + * + * @return void + */ + protected function remove_rule( &$validations, $rule_to_remove ) { + if ( array_key_exists( $rule_to_remove, $validations ) ) { + unset( $validations[ $rule_to_remove ] ); + } + } + + /** + * Filters the validation rules. + * + * @param array $validations Array with validation rules. + * @param WPSEO_Redirect $redirect The redirect that will be saved. + * + * @return array + */ + protected function get_filtered_validation_rules( array $validations, WPSEO_Redirect $redirect ) { + foreach ( $validations as $validation => $validation_rules ) { + $exclude_format = in_array( $redirect->get_format(), $validation_rules['exclude_format'], true ); + $exclude_type = in_array( $redirect->get_type(), $validation_rules['exclude_types'], true ); + + if ( $exclude_format || $exclude_type ) { + $this->remove_rule( $validations, $validation ); + } + } + + return $validations; + } + + /** + * Getting the validations based on the set validation rules. + * + * @param array $validation_rules The rules for the validations that will be run. + * + * @return WPSEO_Redirect_Validation[] + */ + protected function get_validations( $validation_rules ) { + $validations = []; + foreach ( $validation_rules as $validation_rule ) { + $validations[] = new $validation_rule['validation_class'](); + } + + return $validations; + } + + /** + * Fill the redirect property. + * + * @param string $format The format for the redirects. + * + * @return array + */ + protected function get_redirects( $format ) { + $redirect_manager = new WPSEO_Redirect_Manager( $format ); + + // Format the redirects. + $redirects = []; + foreach ( $redirect_manager->get_all_redirects() as $redirect ) { + $redirects[ $redirect->get_origin() ] = $redirect->get_target(); + } + + return $redirects; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect.php new file mode 100644 index 00000000..fd89423a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/redirect.php @@ -0,0 +1,349 @@ +origin = ( $format === WPSEO_Redirect_Formats::PLAIN ) ? $this->sanitize_origin_url( $origin ) : $origin; + $this->target = $this->sanitize_target_url( $target ); + $this->format = $format; + $this->type = (int) $type; + } + + /** + * Returns the origin. + * + * @return string The set origin. + */ + public function get_origin() { + return $this->origin; + } + + /** + * Returns the target + * + * @return string The set target. + */ + public function get_target() { + return $this->target; + } + + /** + * Returns the type + * + * @return int The set type. + */ + public function get_type() { + return $this->type; + } + + /** + * Returns the format + * + * @return string The set format. + */ + public function get_format() { + return $this->format; + } + + /** + * Whether a offset exists. + * + * @link http://php.net/manual/en/arrayaccess.offsetexists.php + * + * @param string $offset An offset to check for. + * + * @return bool True on success or false on failure. + * The return value will be cast to boolean if non-boolean was returned. + */ + #[ReturnTypeWillChange] + public function offsetExists( $offset ) { + return in_array( $offset, [ 'url', 'type' ], true ); + } + + /** + * Offset to retrieve. + * + * @link http://php.net/manual/en/arrayaccess.offsetget.php + * + * @param string $offset The offset to retrieve. + * + * @return mixed Can return all value types. + */ + #[ReturnTypeWillChange] + public function offsetGet( $offset ) { + switch ( $offset ) { + case 'old': + return $this->origin; + + case 'url': + return $this->target; + + case 'type': + return $this->type; + } + + return null; + } + + /** + * Offset to set. + * + * @link http://php.net/manual/en/arrayaccess.offsetset.php + * + * @param string $offset The offset to assign the value to. + * @param string $value The value to set. + * + * @return void + */ + #[ReturnTypeWillChange] + public function offsetSet( $offset, $value ) { + switch ( $offset ) { + case 'url': + $this->target = $value; + break; + case 'type': + $this->type = $value; + break; + } + } + + /** + * Offset to unset. + * + * @link http://php.net/manual/en/arrayaccess.offsetunset.php + * + * @codeCoverageIgnore + * + * @param string $offset The offset to unset. + * + * @return void + */ + #[ReturnTypeWillChange] + public function offsetUnset( $offset ) { + } + + /** + * Compares an URL with the origin of the redirect. + * + * @param string $url The URL to compare. + * + * @return bool True when url matches the origin. + */ + public function origin_is( $url ) { + // Sanitize the slash in case of plain redirect. + if ( $this->format === WPSEO_Redirect_Formats::PLAIN ) { + $url = $this->sanitize_slash( $url, $this->parse_url( $url ) ); + } + + return (string) $this->origin === (string) $url; + } + + /** + * Strip the trailing slashes for relative URLs. + * + * @param string $url_to_sanitize The URL to sanitize. + * @param array $url_pieces The url pieces. + * + * @return string The sanitized url. + */ + private function sanitize_slash( $url_to_sanitize, array $url_pieces = [] ) { + $url = $url_to_sanitize; + if ( $url !== '/' && ! isset( $url_pieces['scheme'] ) ) { + return trim( $url_to_sanitize, '/' ); + } + + return $url; + } + + /** + * Strip the protocol from the URL. + * + * @param string $scheme The scheme to strip. + * @param string $url The URL to remove the scheme from. + * + * @return string The url without the scheme. + */ + private function strip_scheme_from_url( $scheme, $url ) { + return str_replace( $scheme . '://', '', $url ); + } + + /** + * Remove the home URL from the redirect to ensure that relative URLs are created. + * + * @param string $url The URL to sanitize. + * + * @return string The sanitized url. + */ + private function sanitize_origin_url( $url ) { + $home_url = static::$home_url->get(); + $home_url_pieces = static::$home_url->get_parsed(); + $url_pieces = $this->parse_url( $url ); + + if ( $this->match_home_url( $home_url_pieces, $url_pieces ) ) { + $url = substr( + $this->strip_scheme_from_url( $url_pieces['scheme'], $url ), + strlen( $this->strip_scheme_from_url( $home_url_pieces['scheme'], $home_url ) ) + ); + + $url_pieces['scheme'] = null; + } + + return $this->sanitize_slash( $url, $url_pieces ); + } + + /** + * Sanitizes the target url. + * + * @param string $url The url to sanitize. + * + * @return string The sanitized url. + */ + private function sanitize_target_url( $url ) { + $home_url_pieces = static::$home_url->get_parsed(); + $url_pieces = $this->parse_url( $url ); + + if ( $this->match_home_url( $home_url_pieces, $url_pieces ) ) { + $url = substr( + $this->strip_scheme_from_url( $url_pieces['scheme'], $url ), + strlen( $home_url_pieces['host'] ) + ); + + $url_pieces['scheme'] = null; + } + + return $this->sanitize_slash( $url, $url_pieces ); + } + + /** + * Checks if the URL matches the home URL. + * + * @param array $home_url_pieces The pieces (wp_parse_url) from the home_url. + * @param array $url_pieces The pieces (wp_parse_url) from the url to match. + * + * @return bool True when the URL matches the home URL. + */ + private function match_home_url( $home_url_pieces, $url_pieces ) { + if ( ! isset( $url_pieces['scheme'] ) ) { + return false; + } + + if ( ! isset( $url_pieces['host'] ) || ! $this->match_home_url_host( $home_url_pieces['host'], $url_pieces['host'] ) ) { + return false; + } + + if ( ! isset( $home_url_pieces['path'] ) ) { + return true; + } + + return isset( $url_pieces['path'] ) && $this->match_home_url_path( $home_url_pieces['path'], $url_pieces['path'] ); + } + + /** + * Checks if the URL matches the home URL by comparing their host. + * + * @param string $home_url_host The home URL host. + * @param string $url_host The URL host. + * + * @return bool True when both hosts are equal. + */ + private function match_home_url_host( $home_url_host, $url_host ) { + return $url_host === $home_url_host; + } + + /** + * Checks if the URL matches the home URL by comparing their path. + * + * @param string $home_url_path The home URL path. + * @param string $url_path The URL path. + * + * @return bool True when the home URL path is empty or when the URL path begins with the home URL path. + */ + private function match_home_url_path( $home_url_path, $url_path ) { + $home_url_path = trim( $home_url_path, '/' ); + if ( empty( $home_url_path ) ) { + return true; + } + + return strpos( trim( $url_path, '/' ), $home_url_path ) === 0; + } + + /** + * Parses the URL into separate pieces. + * + * @param string $url The URL string. + * + * @return array Array of URL pieces. + */ + private function parse_url( $url ) { + $parsed_url = wp_parse_url( $url ); + if ( is_array( $parsed_url ) ) { + return $parsed_url; + } + + return []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-abstract-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-abstract-validation.php new file mode 100644 index 00000000..607e91fc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-abstract-validation.php @@ -0,0 +1,39 @@ +error; + } + + /** + * Sets the validation error. + * + * @param WPSEO_Validation_Result $error Validation error or warning. + * + * @return void + */ + protected function set_error( WPSEO_Validation_Result $error ) { + $this->error = $error; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-accessible-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-accessible-validation.php new file mode 100644 index 00000000..77d8a4ad --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-accessible-validation.php @@ -0,0 +1,138 @@ +parse_target( $redirect->get_target() ); + $decoded_url = rawurldecode( $target ); + $response = $this->remote_head( $decoded_url, [ 'sslverify' => false ] ); + + if ( is_wp_error( $response ) ) { + $error = __( 'The URL you entered could not be resolved.', 'wordpress-seo-premium' ); + $this->set_error( new WPSEO_Validation_Warning( $error, 'target' ) ); + + return false; + } + + $response_code = $this->retrieve_response_code( $response ); + + // Check if the target is a temporary location. + if ( $this->is_temporary( $response_code ) ) { + /* translators: %1$s expands to the returned http code */ + $error = __( 'The URL you are redirecting to seems to return a %1$s status. You might want to check if the target can be reached manually before saving.', 'wordpress-seo-premium' ); + $error = sprintf( $error, $response_code ); + $this->set_error( new WPSEO_Validation_Warning( $error, 'target' ) ); + + return false; + } + + // Check if the response code is 301. + if ( $response_code === 301 ) { + $error = __( 'You\'re redirecting to a target that returns a 301 HTTP code (permanently moved). Make sure the target you specify is directly reachable.', 'wordpress-seo-premium' ); + $this->set_error( new WPSEO_Validation_Warning( $error, 'target' ) ); + + return false; + } + + if ( $response_code !== 200 ) { + /* translators: %1$s expands to the returned http code */ + $error = __( 'The URL you entered returned a HTTP code different than 200(OK). The received HTTP code is %1$s.', 'wordpress-seo-premium' ); + $error = sprintf( $error, $response_code ); + $this->set_error( new WPSEO_Validation_Warning( $error, 'target' ) ); + + return false; + } + + return true; + } + + /** + * Retrieves the response code from the response array. + * + * @param array $response The response. + * + * @return int The response code. + */ + protected function retrieve_response_code( $response ) { + return wp_remote_retrieve_response_code( $response ); + } + + /** + * Sends a HEAD request to the passed remote URL. + * + * @param string $url The URL to send the request to. + * @param array $options The options to send along with the request. + * + * @return array|WP_Error The response or WP_Error if something goes wrong. + */ + protected function remote_head( $url, $options = [] ) { + return wp_remote_head( $url, $options ); + } + + /** + * Check if the given response code is a temporary one. + * + * @param int $response_code The response code to check. + * + * @return bool + */ + protected function is_temporary( $response_code ) { + return in_array( $response_code, [ 302, 307 ], true ) || in_array( substr( $response_code, 0, 2 ), [ '40', '50' ], true ); + } + + /** + * Check if the target is relative, if so just parse a full URL. + * + * @param string $target The target to parse. + * + * @return string + */ + protected function parse_target( $target ) { + $scheme = wp_parse_url( $target, PHP_URL_SCHEME ); + + // If we have an absolute url return it. + if ( ! empty( $scheme ) ) { + return $target; + } + + // Removes the installation directory if present. + $target = WPSEO_Redirect_Util::strip_base_url_path_from_url( $this->get_home_url(), $target ); + + // If we have a relative url make it absolute. + $absolute = get_home_url( null, $target ); + + // If the path does not end with an extension then add a trailing slash. + if ( WPSEO_Redirect_Util::requires_trailing_slash( $target ) ) { + return trailingslashit( $absolute ); + } + + return $absolute; + } + + /** + * Returns the home url. + * + * @return string The home url. + */ + protected function get_home_url() { + return home_url(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-endpoint-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-endpoint-validation.php new file mode 100644 index 00000000..4c03f5da --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-endpoint-validation.php @@ -0,0 +1,99 @@ +redirects = $redirects; + + $origin = $redirect->get_origin(); + $target = $redirect->get_target(); + $endpoint = $this->search_end_point( $target, $origin ); + + // Check for a redirect loop. + if ( is_string( $endpoint ) && in_array( $endpoint, [ $origin, $target ], true ) ) { + $error = __( 'The redirect you are trying to save will create a redirect loop. This means there probably already exists a redirect that points to the origin of the redirect you are trying to save', 'wordpress-seo-premium' ); + $this->set_error( new WPSEO_Validation_Error( $error, [ 'origin', 'target' ] ) ); + + return false; + } + + if ( is_string( $endpoint ) && $target !== $endpoint ) { + /* translators: %1$s: will be the target, %2$s: will be the found endpoint. */ + $error = __( '%1$s will be redirected to %2$s. Maybe it\'s worth considering to create a direct redirect to %2$s.', 'wordpress-seo-premium' ); + $error = sprintf( $error, $target, $endpoint ); + $this->set_error( new WPSEO_Validation_Warning( $error, 'target' ) ); + + return false; + } + + return true; + } + + /** + * Will check if the $new_url is redirected also and follows the trace of this redirect + * + * @param string $new_url The new URL to search for. + * @param string $old_url The current URL that is redirected. + * + * @return bool|string + */ + private function search_end_point( $new_url, $old_url ) { + $new_target = $this->find_url( $new_url ); + if ( $new_target !== false ) { + // Unset the redirects, because it was found already. + unset( $this->redirects[ $new_url ] ); + + if ( $new_url !== $old_url ) { + $traced_target = $this->search_end_point( $new_target, $old_url ); + if ( $traced_target !== false ) { + return $traced_target; + } + } + + return $new_target; + } + + return false; + } + + /** + * Search for the given $url and returns it target + * + * @param string $url The URL to search for. + * + * @return bool + */ + private function find_url( $url ) { + if ( ! empty( $this->redirects[ $url ] ) ) { + return $this->redirects[ $url ]; + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-presence-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-presence-validation.php new file mode 100644 index 00000000..9d40097b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-presence-validation.php @@ -0,0 +1,52 @@ +allow_empty_target( $redirect->get_type() ) && $redirect->get_origin() !== '' ) { + return true; + } + + if ( ( $redirect->get_origin() !== '' && $redirect->get_target() !== '' && $redirect->get_type() !== '' ) ) { + return true; + } + + $error = __( 'Not all the required fields are filled.', 'wordpress-seo-premium' ); + $this->set_error( new WPSEO_Validation_Error( $error ) ); + + return false; + } + + /** + * Allows an empty target when the given redirect type matches one of the values in the array. + * + * @param string $redirect_type The type to match. + * + * @return bool + */ + private function allow_empty_target( $redirect_type ) { + $allowed_redirect_types = [ WPSEO_Redirect_Types::DELETED, WPSEO_Redirect_Types::UNAVAILABLE ]; + + return in_array( (int) $redirect_type, $allowed_redirect_types, true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-relative-origin-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-relative-origin-validation.php new file mode 100644 index 00000000..359ca9e7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-relative-origin-validation.php @@ -0,0 +1,31 @@ +get_origin() ) ) { + return true; + } + + $error = __( 'The old URL for your redirect is not relative. Only the new URL is allowed to be absolute. Make sure to provide a relative old URL.', 'wordpress-seo-premium' ); + $this->set_error( new WPSEO_Validation_Warning( $error, 'origin' ) ); + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-self-redirect-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-self-redirect-validation.php new file mode 100644 index 00000000..491c29f7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-self-redirect-validation.php @@ -0,0 +1,33 @@ +get_origin() === $redirect->get_target() ) { + $error = __( 'You are attempting to redirect to the same URL as the origin. Please choose a different URL to redirect to.', 'wordpress-seo-premium' ); + $this->set_error( new WPSEO_Validation_Error( $error, 'origin' ) ); + + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-subdirectory-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-subdirectory-validation.php new file mode 100644 index 00000000..3cdf9c46 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-subdirectory-validation.php @@ -0,0 +1,82 @@ +get_subdirectory(); + + // When there is no subdirectory, there is nothing to validate. + if ( $subdirectory === '' ) { + return true; + } + + // When the origin starts with subdirectory, it is okay. + if ( $this->origin_starts_with_subdirectory( $subdirectory, $redirect->get_origin() ) ) { + return true; + } + + /* translators: %1$s expands to the subdirectory WordPress is installed. */ + $error = __( 'Your redirect is missing the subdirectory where WordPress is installed in. This will result in a redirect that won\'t work. Make sure the redirect starts with %1$s', 'wordpress-seo-premium' ); + $error = sprintf( $error, '' . $subdirectory . '' ); + $this->set_error( new WPSEO_Validation_Warning( $error, 'origin' ) ); + + return false; + } + + /** + * Returns the subdirectory if applicable. + * + * Calculates the difference between the home and site url. It strips of the site_url from the home_url and returns + * the part that remains. + * + * @return string + */ + protected function get_subdirectory() { + $home_url = untrailingslashit( home_url() ); + $site_url = untrailingslashit( site_url() ); + if ( $home_url === $site_url ) { + return ''; + } + + // Strips the site_url from the home_url. substr is used because we want it from the start. + $encoding = get_bloginfo( 'charset' ); + return mb_substr( $home_url, mb_strlen( $site_url, $encoding ), null, $encoding ); + } + + /** + * Checks if the origin starts with the given subdirectory. If so, the origin must start with the subdirectory. + * + * @param string $subdirectory The subdirectory that should be present. + * @param string $origin The origin to check for. + * + * @return bool + */ + protected function origin_starts_with_subdirectory( $subdirectory, $origin ) { + // Strip slashes at the beginning because the origin doesn't start with a slash. + $subdirectory = ltrim( $subdirectory, '/' ); + + if ( strstr( $origin, $subdirectory ) ) { + return substr( $origin, 0, strlen( $subdirectory ) ) === $subdirectory; + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-uniqueness-validation.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-uniqueness-validation.php new file mode 100644 index 00000000..df4bb77e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-uniqueness-validation.php @@ -0,0 +1,42 @@ +get_origin() === $old_redirect->get_origin() ) { + return true; + } + + if ( array_key_exists( $redirect->get_origin(), $redirects ) ) { + $this->set_error( + new WPSEO_Validation_Error( + __( 'The old URL already exists as a redirect.', 'wordpress-seo-premium' ), + 'origin' + ) + ); + + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-validation-interface.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-validation-interface.php new file mode 100644 index 00000000..76e44b47 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/validation/redirect-validation-interface.php @@ -0,0 +1,30 @@ + +
      + + +
      + +

      + ', + '' + ); + ?> +

      + +
      + + ' value='' /> +
      +
      + +
      + + ' value='' /> +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-quick-edit.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-quick-edit.php new file mode 100644 index 00000000..a6dc5a79 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-quick-edit.php @@ -0,0 +1,47 @@ + + diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-plain.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-plain.php new file mode 100644 index 00000000..0adc9137 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-plain.php @@ -0,0 +1,65 @@ + + +
      +' . esc_html__( 'Plain redirects', 'wordpress-seo-premium' ) . '

      '; ?> + +
      +display( + [ + 'input_suffix' => '', + 'values' => [ + 'origin' => $yoast_seo_origin_from_url, + 'target' => '', + 'type' => '', + ], + ] +); +?> + + +
      + + +

       

      + + display( + [ + 'form_presenter' => $yoast_seo_form_presenter, + 'total_columns' => $yoast_seo_redirect_table->count_columns(), + ] + ); + ?> + +
      + + prepare_items(); + $yoast_seo_redirect_table->search_box( __( 'Search', 'wordpress-seo-premium' ), 'wpseo-redirect-search' ); + $yoast_seo_redirect_table->display(); + ?> +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-regex.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-regex.php new file mode 100644 index 00000000..e3d03709 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-regex.php @@ -0,0 +1,76 @@ + + +
      +' . esc_html__( 'Regular Expression redirects', 'wordpress-seo-premium' ) . '

      '; ?> +

      + ', + '' + ); + ?> +

      + +
      +
      +display( + [ + 'input_suffix' => '', + 'values' => [ + 'origin' => $yoast_seo_origin_from_url, + 'target' => '', + 'type' => '', + ], + ] +); +?> + + +
      +
      + +

       

      + + display( + [ + 'form_presenter' => $yoast_seo_form_presenter, + 'total_columns' => $yoast_seo_redirect_table->count_columns(), + ] + ); + ?> + +
      + + prepare_items(); + $yoast_seo_redirect_table->search_box( __( 'Search', 'wordpress-seo-premium' ), 'wpseo-redirect-search' ); + $yoast_seo_redirect_table->display(); + ?> +
      + diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-settings.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-settings.php new file mode 100644 index 00000000..4e382c0b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects-tab-settings.php @@ -0,0 +1,125 @@ + +
      +

      + +
      Include +

      +
      + +
      +

      + .htaccess' + ); + ?> +

      +
      + + +
      +

      + +
      include +

      +
      + +
      +

      + +

      +
      + + +
      +' . esc_html__( 'Redirects settings', 'wordpress-seo-premium' ) . ''; ?> + +' + . esc_html__( 'Read more about why web server redirect methods have been disabled on a multisite.', 'wordpress-seo-premium' ) + . ''; + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in Alert_Presenter. + echo new Alert_Presenter( $yoast_seo_disable_htaccess_message, 'info' ); +} +?> + +
      + set_option( 'wpseo_redirect' ); + + $yoast_seo_toggle_values = [ + 'off' => 'PHP', + 'on' => ( WPSEO_Utils::is_apache() ) ? '.htaccess' : __( 'Web server', 'wordpress-seo-premium' ), + ]; + $yoast_seo_form->toggle_switch( 'disable_php_redirect', $yoast_seo_toggle_values, __( 'Redirect method', 'wordpress-seo-premium' ), '', [ 'disabled' => $yoast_seo_disable_toggles ] ); + + $yoast_seo_opening_p = ( $yoast_seo_disable_toggles ) ? '

      ' : '

      '; + + if ( WPSEO_Utils::is_apache() ) { + /* translators: 1: '.htaccess' file name */ + echo $yoast_seo_opening_p . sprintf( esc_html__( 'Write redirects to the %1$s file. Make sure the %1$s file is writable.', 'wordpress-seo-premium' ), '.htaccess' ) . '

      '; + + $yoast_seo_form->light_switch( 'separate_file', __( 'Generate a separate redirect file', 'wordpress-seo-premium' ), [], true, '', false, [ 'disabled' => $yoast_seo_disable_toggles ] ); + + /* translators: %s: '.htaccess' file name */ + echo $yoast_seo_opening_p . sprintf( esc_html__( 'By default we write the redirects to your %s file, check this if you want the redirects written to a separate file. Only check this option if you know what you are doing!', 'wordpress-seo-premium' ), '.htaccess' ) . '

      '; + } + else { + /* translators: %s: 'Yoast SEO Premium' */ + echo $yoast_seo_opening_p . sprintf( esc_html__( '%s can generate redirect files that can be included in your website web server configuration. If you choose this option the PHP redirects will be disabled. Only check this option if you know what you are doing!', 'wordpress-seo-premium' ), 'Yoast SEO Premium' ) . '

      '; + } + ?> +

      + +

      +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects.php new file mode 100644 index 00000000..3696e7e0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/redirect/views/redirects.php @@ -0,0 +1,36 @@ +admin_header( false, 'wpseo_redirects', false, 'yoast_wpseo_redirects_options' ); +?> + + + display( + [ + 'nonce' => wp_create_nonce( 'wpseo-redirects-ajax-security' ), + ] + ); + } + ?> + +
      +admin_footer( false ); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/social-previews.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/social-previews.php new file mode 100644 index 00000000..69f1fbd2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/social-previews.php @@ -0,0 +1,34 @@ +term_redirect_can_be_made( $pagenow ) ) { + return; + } + + add_action( 'admin_enqueue_scripts', [ $this, 'page_scripts' ] ); + + // Get all taxonomies. + $taxonomies = get_taxonomies(); + + // Loop through all taxonomies. + if ( count( $taxonomies ) > 0 ) { + foreach ( $taxonomies as $taxonomy ) { + // Add old URL field to term edit screen. + add_action( $taxonomy . '_edit_form_fields', [ $this, 'old_url_field' ], 10, 2 ); + } + } + + add_action( 'wp_ajax_inline-save-tax', [ $this, 'set_old_url_quick_edit' ], 1 ); + + // Detect the term slug change. + add_action( 'edited_term', [ $this, 'detect_slug_change' ], 10, 3 ); + + // Detect a term delete. + add_action( 'delete_term_taxonomy', [ $this, 'detect_term_delete' ] ); + } + + /** + * Registers the page scripts. + * + * @param string $current_page The page that is opened at the moment. + * + * @return void + */ + public function page_scripts( $current_page ) { + if ( ! $this->term_redirect_can_be_made( $current_page ) ) { + return; + } + + parent::page_scripts( $current_page ); + + if ( $current_page === 'edit-tags.php' ) { + wp_enqueue_script( 'wp-seo-premium-quickedit-notification' ); + } + if ( $current_page === 'term.php' ) { + wp_enqueue_script( 'wp-seo-premium-redirect-notifications' ); + } + } + + /** + * Add an extra field to term edit screen. + * + * @param string $tag The current tag name. + * @param string $taxonomy The name of the current taxonomy. + * + * @return void + */ + public function old_url_field( $tag, $taxonomy ) { + $url = $this->get_target_url( $tag, $taxonomy ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Correctly escaped in parse_url_field() method. + echo $this->parse_url_field( $url, 'term' ); + } + + /** + * Set old URL when the quick edit is used for taxonomies. + * + * @return void + */ + public function set_old_url_quick_edit() { + check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' ); + + $permalink = $this->get_taxonomy_permalink(); + + if ( ! is_wp_error( $permalink ) ) { + $this->old_url = str_replace( home_url(), '', $permalink ); + } + } + + /** + * Detect if the slug changed, hooked into 'post_updated'. + * + * @param int $term_id The term id. + * @param int $tt_id The term taxonomy id. + * @param stdClass $taxonomy Object with the values of the taxonomy. + * + * @return bool + */ + public function detect_slug_change( $term_id, $tt_id, $taxonomy ) { + /** + * Filter: 'Yoast\WP\SEO\term_redirect_slug_change' - Check if a redirect should be created + * on term slug change. + * + * Note: This is a Premium plugin-only hook. + * + * @since 12.9.0 + * + * @param bool $create_redirect Whether a redirect should be created. + */ + if ( apply_filters( 'Yoast\WP\SEO\term_redirect_slug_change', false ) === true ) { + return true; + } + + /** + * Certain plugins use multisite context switching when saving terms. This can lead to incorrect redirects being + * created. + * + * See https://github.com/Yoast/bugreports/issues/437. + */ + if ( is_multisite() && ms_is_switched() ) { + return false; + } + + $old_url = $this->get_old_url(); + + if ( ! $old_url ) { + return false; + } + + // Get the new URL. + $new_url = $this->get_target_url( $term_id, $taxonomy ); + + // Maybe we can undo the created redirect. + $created_redirect = $this->notify_undo_slug_redirect( $old_url, $new_url, $term_id, 'term' ); + + if ( $created_redirect ) { + $redirect_info = [ + 'origin' => $created_redirect->get_origin(), + 'target' => $created_redirect->get_target(), + 'type' => $created_redirect->get_type(), + 'format' => $created_redirect->get_format(), + ]; + update_term_meta( $term_id, '_yoast_term_redirect_info', $redirect_info ); + } + } + + /** + * Offer to create a redirect from the term that is about to get deleted. + * + * @param int $term_taxonomy_id The term taxonomy id that will be deleted. + * + * @return void + */ + public function detect_term_delete( $term_taxonomy_id ) { + $term = get_term_by( 'term_taxonomy_id', (int) $term_taxonomy_id ); + + if ( ! $term || is_wp_error( $term ) ) { + return; + } + + $url = $this->get_target_url( $term, $term->taxonomy ); + if ( $this->is_redirect_needed( $term, $url ) ) { + $this->set_delete_notification( $url ); + } + } + + /** + * Checks if a redirect is needed for the term with the given ID. + * + * @param WP_Term $term The term to check. + * @param string $url The target url. + * + * @return bool If a redirect is needed. + */ + protected function is_redirect_needed( $term, $url ) { + $redirect_manager = new WPSEO_Redirect_Manager( 'plain' ); + $redirect = $redirect_manager->get_redirect( $url ); + return ! $redirect || ( ! is_nav_menu( $term->term_id ) && is_taxonomy_viewable( $term->taxonomy ) ); + } + + /** + * Parses the hidden field with the old URL to show in the form. + * + * @param string $url The old URL. + * @param string $type The type of the URL. + * + * @return string The parsed hidden input field. + */ + protected function parse_url_field( $url, $type ) { + + // Output the hidden field. + return ''; + } + + /** + * Gets the URL to the term and returns its path. + * + * @param string $tag The current tag name. + * @param string $taxonomy The name of the current taxonomy. + * + * @return string + */ + protected function get_target_url( $tag, $taxonomy ) { + // Get the term link. + $term_link = get_term_link( $tag, $taxonomy ); + + // Return early if the term link is not a string, i.e. a WP_Error Object. + if ( ! is_string( $term_link ) ) { + return ''; + } + + // Use the correct URL path. + $url = wp_parse_url( $term_link ); + if ( is_array( $url ) && isset( $url['path'] ) ) { + return $url['path']; + } + + return ''; + } + + /** + * Get permalink for taxonomy. + * + * @return string|WP_Error + */ + protected function get_taxonomy_permalink() { + // phpcs:disable WordPress.Security.NonceVerification.Missing -- Reason: We verify the nonce before coming here. + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We do sanitize by casting to int. + $term_id = isset( $_POST['tax_ID'] ) ? (int) wp_unslash( $_POST['tax_ID'] ) : 0; + $taxonomy = isset( $_POST['taxonomy'] ) ? sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ) : null; + // phpcs:enable + + return get_term_link( get_term( $term_id, $taxonomy ), $taxonomy ); + } + + /** + * Get the old URL. + * + * @return bool|string + */ + protected function get_old_url() { + // phpcs:disable WordPress.Security.NonceVerification.Missing -- Reason: This is used while hooked in an action thus we don't control the nonce creation. + // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: This data looks like it's being used only with WP functions later on. + $wpseo_old_term_url = isset( $_POST['wpseo_old_term_url'] ) ? wp_unslash( $_POST['wpseo_old_term_url'] ) : null; + // phpcs:enable + + if ( empty( $wpseo_old_term_url ) ) { + if ( ! empty( $this->old_url ) ) { + return $this->old_url; + } + + return false; + } + return $wpseo_old_term_url; + } + + /** + * Returns the undo message for the term. + * + * @return string + */ + protected function get_undo_slug_notification() { + /* translators: %1$s: Yoast SEO Premium, %2$s and %3$s expand to a link to the admin page. */ + return __( + '%1$s created a %2$sredirect%3$s from the old term URL to the new term URL.', + 'wordpress-seo-premium' + ); + } + + /** + * Returns the delete message for the term. + * + * @return string + */ + protected function get_delete_notification() { + /* translators: %1$s: Yoast SEO Premium, %2$s: List with actions, %3$s: , %4$s: , %5%s: The removed url. */ + return __( + '%1$s detected that you deleted a term (%5$s). You can either: %2$s Don\'t know what to do? %3$sRead this post %4$s.', + 'wordpress-seo-premium' + ); + } + + /** + * Is the current page valid to make a redirect from. + * + * @param string $current_page The currently opened page. + * + * @return bool True when a redirect can be made on this page. + */ + protected function term_redirect_can_be_made( $current_page ) { + return $this->is_term_page( $current_page ) || $this->is_action_inline_save_tax() || $this->is_action_delete_tag(); + } + + /** + * Is the current page related to a term (edit/overview). + * + * @param string $current_page The current opened page. + * + * @return bool True when page is a term edit/overview page. + */ + protected function is_term_page( $current_page ) { + return ( in_array( $current_page, [ 'edit-tags.php', 'term.php' ], true ) ); + } + + /** + * Is the page in an AJAX-request and is the action "inline save". + * + * @return bool True when in an AJAX-request and the action is inline-save. + */ + protected function is_action_inline_save_tax() { + if ( ! wp_doing_ajax() ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We don't control the nonce creation. + $action = isset( $_POST['action'] ) ? sanitize_text_field( wp_unslash( $_POST['action'] ) ) : null; + return $action === 'inline-save-tax'; + } + + /** + * Is the page in an AJAX-request and is the action "delete-tag". + * + * @return bool True when in an AJAX-request and the action is delete-tag. + */ + protected function is_action_delete_tag() { + if ( ! wp_doing_ajax() ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We don't control the nonce creation. + $action = isset( $_POST['action'] ) ? sanitize_text_field( wp_unslash( $_POST['action'] ) ) : null; + return $action === 'delete-tag'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/upgrade-manager.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/upgrade-manager.php new file mode 100644 index 00000000..44bd142f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/upgrade-manager.php @@ -0,0 +1,387 @@ +check_update( $saved_version ); + + update_option( self::VERSION_OPTION_KEY, $current_version ); + + add_action( 'shutdown', 'flush_rewrite_rules' ); + } + } + + /** + * Runs the specific updates when it is necessary. + * + * @param string $version_number The version number that will be compared. + * + * @return void + */ + public function check_update( $version_number ) { + // Get current version. + $current_version = get_site_option( WPSEO_Premium::OPTION_CURRENT_VERSION, 1 ); + + // Check if update is required. + if ( WPSEO_Premium::PLUGIN_VERSION_CODE > $current_version ) { + + // Do update. + $this->do_update( $current_version ); + + // Update version code. + $this->update_current_version_code(); + } + + if ( version_compare( $version_number, '2.3', '<' ) ) { + add_action( 'wp', [ 'WPSEO_Redirect_Upgrade', 'import_redirects_2_3' ], 11 ); + add_action( 'admin_head', [ 'WPSEO_Redirect_Upgrade', 'import_redirects_2_3' ], 11 ); + } + + if ( version_compare( $version_number, '3.1', '<' ) ) { + add_action( 'wp', [ 'WPSEO_Redirect_Upgrade', 'upgrade_3_1' ], 12 ); + add_action( 'admin_head', [ 'WPSEO_Redirect_Upgrade', 'upgrade_3_1' ], 12 ); + } + + if ( version_compare( $version_number, '4.7', '<' ) ) { + add_action( 'wp', [ 'WPSEO_Premium_Prominent_Words_Versioning', 'upgrade_4_7' ], 12 ); + add_action( 'admin_head', [ 'WPSEO_Premium_Prominent_Words_Versioning', 'upgrade_4_7' ], 12 ); + } + + if ( version_compare( $version_number, '4.8', '<' ) ) { + add_action( 'wp', [ 'WPSEO_Premium_Prominent_Words_Versioning', 'upgrade_4_8' ], 12 ); + add_action( 'admin_head', [ 'WPSEO_Premium_Prominent_Words_Versioning', 'upgrade_4_8' ], 12 ); + } + + if ( version_compare( $version_number, '9.8-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_9_8' ], 12 ); + } + + if ( version_compare( $version_number, '10.3', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_11' ], 12 ); + } + + if ( version_compare( $version_number, '13.0-RC0', '<' ) ) { + add_action( 'init', [ 'WPSEO_Redirect_Upgrade', 'upgrade_13_0' ], 12 ); + } + + if ( version_compare( $version_number, '15.3-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_15_3' ], 12 ); + } + + if ( version_compare( $version_number, '16.2-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_16_2' ], 12 ); + } + + if ( version_compare( $version_number, '16.3-beta2', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_16_3' ], 12 ); + } + + if ( version_compare( $version_number, '17.2-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_17_2' ], 12 ); + } + + if ( version_compare( $version_number, '17.3-RC4', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_17_3' ], 12 ); + } + + if ( version_compare( $version_number, '17.4-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_17_4' ], 12 ); + } + + if ( version_compare( $version_number, '17.7-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_17_7' ], 12 ); + } + + if ( version_compare( $version_number, '19.3-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_19_3' ], 12 ); + } + + if ( version_compare( $version_number, '21.6-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_21_6' ], 12 ); + } + + if ( version_compare( $version_number, '22.6-RC0', '<' ) ) { + add_action( 'init', [ $this, 'upgrade_22_6' ], 12 ); + } + } + + /** + * Enables the AI feature if it was not enabled before. + * + * @return void + */ + public function upgrade_21_6() { + + if ( ! empty( WPSEO_Options::get( 'activation_redirect_timestamp' ) ) ) { + $is_ai_enabled = WPSEO_Options::get( 'enable_ai_generator' ); + + if ( $is_ai_enabled ) { + WPSEO_Options::set( 'ai_enabled_pre_default', true ); + + return; + } + WPSEO_Options::set( 'enable_ai_generator', true ); + } + } + + /** + * Removes the inclusive language feature notification from the Notification center. + * + * @return void + */ + public function upgrade_19_3() { + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-inclusive-language-notice' ); + } + + /** + * Make sure our options autoload. + * + * @return void + */ + public function upgrade_17_7() { + global $wpdb; + + foreach ( [ WPSEO_Redirect_Option::OPTION_PLAIN, WPSEO_Redirect_Option::OPTION_REGEX ] as $option ) { + // phpcs:ignore WordPress.DB.DirectDatabaseQuery -- Normal methods only work if the option value has changed. + $wpdb->update( $wpdb->options, [ 'autoload' => 'yes' ], [ 'option_name' => $option ] ); + } + + // Make sure we don't autoload the non-exported option. + $wpdb->update( $wpdb->options, [ 'autoload' => 'no' ], [ 'option_name' => WPSEO_Redirect_Option::OPTION ] ); + } + + /** + * Schedules the cleanup integration if it's no already scheduled. + * + * @return void + */ + public function upgrade_17_4() { + $this->retrigger_cleanup(); + } + + /** + * Clears the first step of the orphaned workout. + * + * @return void + */ + public function upgrade_17_3() { + $workouts_option = WPSEO_Options::get( 'workouts' ); + + if ( isset( $workouts_option['orphaned'] ) + && isset( $workouts_option['orphaned']['indexablesByStep'] ) + && is_array( $workouts_option['orphaned']['indexablesByStep'] ) + ) { + $workouts_option['orphaned']['indexablesByStep']['improveRemove'] = []; + WPSEO_Options::set( 'workouts', $workouts_option ); + } + } + + /** + * Schedules the cleanup integration if it's no already scheduled. + * + * @return void + */ + public function upgrade_17_2() { + $this->retrigger_cleanup(); + } + + /** + * Re-triggers the cleanup of old things from the database. + * + * @return void + */ + protected function retrigger_cleanup() { + // If Yoast SEO hasn't been upgraded to 17.2 the cleanup integration has not been implemented in the current way. + if ( ! defined( '\Yoast\WP\SEO\Integrations\Cleanup_Integration::START_HOOK' ) ) { + return; + } + // If Yoast SEO premium was upgraded after Yoast SEO, reschedule the task to clean out orphaned prominent words. + if ( ! wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + wp_schedule_single_event( ( time() + ( MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + + /** + * Runs the language pack upgrader to migrate to TranslationsPress. + * + * @return void + */ + public function upgrade_16_3() { + require_once ABSPATH . 'wp-admin/includes/admin.php'; + require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new WP_Upgrader(); + $upgrader->skin = new Automatic_Upgrader_Skin(); + Language_Pack_Upgrader::async_upgrade( $upgrader ); + } + + /** + * Makes sure the Premium capabilities exist. + * + * @return void + */ + public function upgrade_16_2() { + do_action( 'wpseo_register_capabilities_premium' ); + WPSEO_Capability_Manager_Factory::get( 'premium' )->add(); + } + + /** + * Renames the `prominent_words_indexation_completed` option. + * + * @return void + */ + public function upgrade_15_3() { + $old_value = WPSEO_Options::get( 'prominent_words_indexation_completed' ); + WPSEO_Options::set( 'prominent_words_indexing_completed', $old_value ); + } + + /** + * Removes the orphaned content notification. + * + * @return void + */ + public function upgrade_11() { + $orphaned_content_support = new WPSEO_Premium_Orphaned_Content_Support(); + $notification_manager = Yoast_Notification_Center::get(); + + foreach ( $orphaned_content_support->get_supported_post_types() as $post_type ) { + // We need to remove the dismissal first, to clean up better but also as otherwise the remove won't work. + delete_metadata( 'user', false, 'wpseo-premium-orphaned-content-' . $post_type, '', true ); + $notification_manager->remove_notification_by_id( 'wpseo-premium-orphaned-content-' . $post_type, true ); + } + + // Remove the cronjob if present. + wp_clear_scheduled_hook( 'wpseo-premium-orphaned-content' ); + } + + /** + * Removes the stale cornerstone content beta notification. + * + * @return void + */ + public function upgrade_9_8() { + $notification_manager = Yoast_Notification_Center::get(); + $notification_manager->remove_notification_by_id( 'wpseo-stale-content-notification' ); + + // Delete the user meta data that tracks whether the user has seen the notification. + delete_metadata( 'user', false, 'wp_wpseo-stale-content-notification', '', true ); + } + + /** + * Returns whether or not we should retry the 31 upgrade. + * + * @return bool + */ + public function should_retry_upgrade_31() { + $retry = false; + + $new_redirects = get_option( WPSEO_Redirect_Option::OPTION, null ); + if ( $new_redirects === null ) { + $old_plain_redirects = get_option( WPSEO_Redirect_Option::OLD_OPTION_PLAIN, [] ); + $old_regex_redirects = get_option( WPSEO_Redirect_Option::OLD_OPTION_REGEX, [] ); + + if ( ! empty( $old_plain_redirects ) || ! empty( $old_regex_redirects ) ) { + $retry = true; + } + } + + return $retry; + } + + /** + * Validates if the 31 upgrade routine has correctly run and if not retries to run it + * + * @param bool $immediately Whether to do the upgrade immediately when this function is called. + * + * @return void + */ + public function retry_upgrade_31( $immediately = false ) { + /* + * If we detect that the new redirect option doesn't exist but there are redirects in the old option we try the + * upgrade routine again. This brings the redirects back for people if the upgrade routine failed the first + * time. + */ + if ( $this->should_retry_upgrade_31() ) { + if ( $immediately ) { + WPSEO_Redirect_Upgrade::upgrade_3_1(); + + return; + } + add_action( 'wp', [ 'WPSEO_Redirect_Upgrade', 'upgrade_3_1' ], 12 ); + add_action( 'admin_head', [ 'WPSEO_Redirect_Upgrade', 'upgrade_3_1' ], 12 ); + } + } + + /** + * An update is required, do it + * + * @param string $current_version The current version number of the installation. + * + * @return void + */ + private function do_update( $current_version ) { + // Upgrade to version 1.2.0. + if ( $current_version < 15 ) { + /** + * Upgrade redirects + */ + add_action( 'wp', [ 'WPSEO_Redirect_Upgrade', 'upgrade_1_2_0' ], 10 ); + add_action( 'admin_head', [ 'WPSEO_Redirect_Upgrade', 'upgrade_1_2_0' ], 10 ); + } + } + + /** + * Update the current version code + * + * @return void + */ + private function update_current_version_code() { + update_site_option( WPSEO_Premium::OPTION_CURRENT_VERSION, WPSEO_Premium::PLUGIN_VERSION_CODE ); + } + + /** + * Performs the 22.6 upgrade routine. + * Schedules another cleanup scheduled action, but starting from the last cleanup action we just added (if there aren't any running cleanups already). + * + * @return void + */ + public function upgrade_22_6() { + // If Yoast SEO hasn't been upgraded to 17.2 the cleanup integration has not been implemented in the current way. + if ( ! class_exists( Cleanup_Integration::class ) ) { + return; + } + + if ( get_option( Cleanup_Integration::CURRENT_TASK_OPTION ) === false ) { + $cleanup_integration = YoastSEO()->classes->get( Cleanup_Integration::class ); + $cleanup_integration->start_cron_job( 'clean_selected_empty_usermeta' ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/validation-error.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/validation-error.php new file mode 100644 index 00000000..70a2ddca --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/validation-error.php @@ -0,0 +1,21 @@ +message = $message; + $this->set_fields( $fields ); + } + + /** + * Gets the validation result message. + * + * @return string + */ + public function get_message() { + return $this->message; + } + + /** + * Returns an Array representation of the validation result. + * + * @return array + */ + public function to_array() { + return [ + 'type' => $this->get_type(), + 'message' => $this->message, + 'fields' => $this->fields, + ]; + } + + /** + * Setting the fields with errors. + * + * @param string $fields The fields with errors on it. + * + * @return void + */ + protected function set_fields( $fields = '' ) { + if ( ! is_array( $fields ) && is_string( $fields ) ) { + $fields = [ $fields ]; + } + + $this->fields = $fields; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/validation-warning.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/validation-warning.php new file mode 100644 index 00000000..3f5ba361 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/validation-warning.php @@ -0,0 +1,21 @@ +%s', esc_html( $yoast_seo_button_label ) ) +); + +?> +
      +

      +

      +

      + +
      + __( 'Export keyphrase scores', 'wordpress-seo-premium' ), + 'export-url' => __( 'Export URL', 'wordpress-seo-premium' ), + 'export-title' => __( 'Export title', 'wordpress-seo-premium' ), + 'export-seo-title' => __( 'Export SEO title', 'wordpress-seo-premium' ), + 'export-meta-description' => __( 'Export meta description', 'wordpress-seo-premium' ), + 'export-readability-score' => __( 'Export readability score', 'wordpress-seo-premium' ), + ]; + + foreach ( $yoast_seo_export_fields as $yoast_seo_export_field_name => $yoast_seo_export_field_label ) { + echo ''; + $yform->label( esc_html( $yoast_seo_export_field_label ), [ 'for' => $yoast_seo_export_field_name ] ); + echo '
      '; + } + + ?> +
      + +
      + +

      +
        +
      • +
      • +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/views/export-redirects.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/views/export-redirects.php new file mode 100644 index 00000000..331b020f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/views/export-redirects.php @@ -0,0 +1,17 @@ + +
      +

      +

      +

      +
      + + +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/views/import-redirects.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/views/import-redirects.php new file mode 100644 index 00000000..1c4c1c6d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/views/import-redirects.php @@ -0,0 +1,82 @@ +.htaccess' +); + +$yoast_seo_i18n_import_redirects_explain = sprintf( + /* translators: %1$s: '.htaccess' file name, %2$s: plugin name */ + __( 'You can copy the contents of any %1$s file in here, and it will import the redirects into %2$s.', 'wordpress-seo-premium' ), + '.htaccess', + 'Yoast SEO Premium' +); + +// The plugins we have import functions for. +$yoast_seo_plugins = [ + 'redirection' => __( 'Redirection', 'wordpress-seo-premium' ) . '
      ', + 'safe_redirect_manager' => __( 'Safe Redirect Manager', 'wordpress-seo-premium' ) . '
      ', + 'simple-301-redirects' => __( 'Simple 301 Redirects', 'wordpress-seo-premium' ) . '
      ', +]; + +?> +
      +
      + msg ) ) : ?> +
      +

      msg; ?>

      +
      + +

      +
      + + radio( 'import_plugin', $yoast_seo_plugins, __( 'Import from:', 'wordpress-seo-premium' ) ); + ?> +
      + +
      +
      + +
      + +
      +

      +
      + +

      +
      + +

      + +
      +
      + +
      + +
      +

      [] ] ); ?>

      +

      + [] ] ); ?> +

      +
      + + +
      + +
      +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/views/thank-you.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/views/thank-you.php new file mode 100644 index 00000000..31e62342 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/views/thank-you.php @@ -0,0 +1,107 @@ + + +

      +

      + +

      +
      +
      +

      + +

      + Cornerstone +

      + , %2$s: */ + esc_html__( + '%1$sCornerstone content%2$s is the content on your site that’s most important. You want to rank highest in Google with these articles. Make sure your internal linking structure reflects what pages are most important. Want to know how?', + 'wordpress-seo-premium' + ), + '', + '' + ); + ?> +

      + + + +
      +
      +

      + +

      + Analysis +

      + , %2$s: */ + esc_html__( + 'Different people search with different search terms. With our %1$spremium analysis%2$s, you are free to use variations and synonyms of your keywords in your content, which will make your writing style far more natural.', + 'wordpress-seo-premium' + ), + '', + '' + ); + ?> +

      + + + +
      +
      +

      + +

      + redirect-manager +

      + , %3$s: */ + esc_html__( + 'The %1$s %2$sRedirect Manager%3$s automatically prevents visitors from reaching a dead end whenever you move or delete content. It also makes managing your existing redirects easy.', + 'wordpress-seo-premium' + ), + 'Yoast SEO', + '', + '' + ); + ?> +

      + + + +
      +
      +

      + +

      + Academy +

      + , %3$s: Yoast SEO, %4$s: */ + esc_html__( + '%1$s grants you direct access to %2$sall premium %3$s academy courses%4$s. Learn all the ins and outs of holistic SEO from industry experts.', + 'wordpress-seo-premium' + ), + 'Yoast SEO Premium', + '', + 'Yoast SEO', + '' + ); + ?> + +

      + + + +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo-premium/classes/watcher.php b/wp/wp-content/plugins/wordpress-seo-premium/classes/watcher.php new file mode 100644 index 00000000..979aaf65 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/classes/watcher.php @@ -0,0 +1,314 @@ +watch_type . '_' . $notification_type, + $show_notification + ); + + if ( $show_notification ) { + // Add the message to the notifications center. + $arguments = [ 'type' => 'updated' ]; + if ( ! empty( $id ) ) { + $arguments['id'] = $id; + } + + Yoast_Notification_Center::get()->add_notification( new Yoast_Notification( $message, $arguments ) ); + } + } + + /** + * Display the delete notification. + * + * @param string $url The redirect that will be deleted. + * + * @return void + */ + protected function set_delete_notification( $url ) { + $id = 'wpseo_delete_redirect_' . md5( $url ); + + // Format the message. + $message = sprintf( + $this->get_delete_notification(), + 'Yoast SEO Premium', + $this->get_delete_action_list( $url, $id ), + '', + '', + '' . esc_url( trim( $url ) ) . '' + ); + + $this->create_notification( $message, 'delete' ); + } + + /** + * Returns the string to the javascript method from where the added redirect can be undone + * + * @param int $object_id The post or term ID. + * @param string $object_type The object type: post or term. + * + * @return string + */ + protected function javascript_undo_redirect( $object_id, $object_type ) { + return sprintf( + 'wpseoUndoRedirectByObjectId( "%1$s", "%2$s", this );return false;', + esc_js( $object_id ), + esc_js( $object_type ) + ); + } + + /** + * Opens the redirect manager and create the redirect + * + * @param string $old_url The URL that will be redirected. + * @param string $new_url The URL where the old_url redirects to. + * @param int $header_code The redirect type. + * + * @return WPSEO_Redirect + */ + protected function create_redirect( $old_url, $new_url, $header_code = 301 ) { + // The URL redirect manager. + $redirect = new WPSEO_Redirect( $old_url, $new_url, $header_code ); + + // Create the redirect. + $this->get_redirect_manager()->create_redirect( $redirect ); + + return $redirect; + } + + /** + * Returns the string to the javascript method from where a new redirect can be added + * + * @param string $url The URL that can be redirected. + * @param string $id ID of the notice that is displayed. + * @param int $type The redirect type. Default is 301. + * + * @return string + */ + protected function javascript_create_redirect( $url, $id, $type = WPSEO_Redirect_Types::PERMANENT ) { + return sprintf( + 'wpseoCreateRedirect( "%1$s", "%2$s", "%3$s", this );', + esc_js( $url ), + $type, + wp_create_nonce( 'wpseo-redirects-ajax-security' ) + ); + } + + /** + * Return the URL to the admin page where the just added redirect can be found + * + * @param string $old_url String that filters the wpseo_redirect table to the just added redirect. + * + * @return string + */ + protected function admin_redirect_url( $old_url ) { + return admin_url( 'admin.php?page=wpseo_redirects&s=' . urlencode( $old_url ) ); + } + + /** + * There might be the possibility to undo the redirect, if it is so, we have to notify the user. + * + * @param string $old_url The origin URL. + * @param string $new_url The target URL. + * @param int $object_id The post or term ID. + * @param string $object_type The object type: post or term. + * + * @return WPSEO_Redirect|null The created redirect. + */ + protected function notify_undo_slug_redirect( $old_url, $new_url, $object_id, $object_type ) { + // Check if we should create a redirect. + if ( $this->should_create_redirect( $old_url, $new_url ) ) { + $redirect = $this->create_redirect( $old_url, $new_url ); + + $this->set_undo_slug_notification( $redirect, $object_id, $object_type ); + + return $redirect; + } + } + + /** + * Display the undo notification + * + * @param WPSEO_Redirect $redirect The old URL to the post. + * @param int $object_id The post or term ID. + * @param string $object_type The object type: post or term. + * + * @return void + */ + protected function set_undo_slug_notification( WPSEO_Redirect $redirect, $object_id, $object_type ) { + $old_url = $this->format_redirect_url( $redirect->get_origin() ); + $new_url = $this->format_redirect_url( $redirect->get_target() ); + + // Format the message. + $message = sprintf( + $this->get_undo_slug_notification(), + 'Yoast SEO Premium', + '', + '' + ); + + $message .= '
      '; + $message .= esc_html__( 'Old URL:', 'wordpress-seo-premium' ) . ' ' . $this->create_hyperlink_from_url( $old_url ); + $message .= '
      '; + $message .= esc_html__( 'New URL:', 'wordpress-seo-premium' ) . ' ' . $this->create_hyperlink_from_url( $new_url ); + $message .= '

      '; + + $message .= sprintf( + '', + esc_html__( 'Ok', 'wordpress-seo-premium' ) + ); + + $message .= sprintf( + '%2$s', + $this->javascript_undo_redirect( $object_id, $object_type ), + esc_html__( 'Undo', 'wordpress-seo-premium' ) + ); + + // Only set notification when the slug change was not saved through quick edit. + $this->create_notification( $message, 'slug_change' ); + } + + /** + * Returns a list with the actions that the user can do on deleting a post/term + * + * @param string $url The URL that will be redirected. + * @param string $id The ID of the element. + * + * @return string + */ + protected function get_delete_action_list( $url, $id ) { + return sprintf( + '
        %1$s %2$s
      ', + '
    • ', + '
    • ' + ); + } + + /** + * Returns the passed url in hyperlink form. Both the target and the text of the hyperlink is the passed url. + * + * @param string $url The url in string form to convert to a hyperlink. + * + * @return string + */ + protected function create_hyperlink_from_url( $url ) { + return '' . esc_html( $url ) . ''; + } + + /** + * Formats the redirect url. + * + * @param string $url The url to format. + * + * @return string + */ + protected function format_redirect_url( $url ) { + $redirect_url_format = new WPSEO_Redirect_Url_Formatter( $url ); + + return home_url( $redirect_url_format->format_without_subdirectory( get_home_url() ) ); + } + + /** + * Retrieves an instance of the redirect manager. + * + * @return WPSEO_Redirect_Manager The redirect manager. + */ + protected function get_redirect_manager() { + static $redirect_manager; + + if ( $redirect_manager === null ) { + $redirect_manager = new WPSEO_Redirect_Manager(); + } + + return $redirect_manager; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-premium-requirement.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-premium-requirement.php new file mode 100644 index 00000000..8a0ab3c1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-premium-requirement.php @@ -0,0 +1,29 @@ +helpers->product->is_premium() ) { + return; + } + + // No premium commands allowed. + WP_CLI::error( + 'This command can only be run with an active Yoast SEO Premium license.' + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-base-command.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-base-command.php new file mode 100644 index 00000000..da490e03 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-base-command.php @@ -0,0 +1,152 @@ +redirect_manager = new WPSEO_Redirect_Manager(); + } + + /** + * Creates a new redirect. + * + * @param string $origin Origin of the redirect. + * @param string $target Target of the redirect. + * @param string $type Type of the redirect. + * @param string $format Format of the redirect. + * + * @return bool Whether creation was successful. + */ + protected function create_redirect( $origin, $target, $type, $format ) { + $redirect = new WPSEO_Redirect( $origin, $target, $type, $format ); + + return $this->redirect_manager->create_redirect( $redirect ); + } + + /** + * Updates an existing redirect. + * + * @param string $old_origin Origin of the redirect. + * @param string $new_origin Origin of the redirect. + * @param string $target Target of the redirect. + * @param string $type Type of the redirect. + * @param string $format Format of the redirect. + * + * @return bool Whether updating was successful. + */ + protected function update_redirect( $old_origin, $new_origin, $target, $type, $format ) { + $old_redirect = new WPSEO_Redirect( $old_origin ); + $new_redirect = new WPSEO_Redirect( $new_origin, $target, $type, $format ); + + return $this->redirect_manager->update_redirect( $old_redirect, $new_redirect ); + } + + /** + * Deletes an existing redirect. + * + * @param string $origin Origin of the redirect. + * + * @return bool Whether deletion was successful. + */ + protected function delete_redirect( $origin ) { + $redirect = new WPSEO_Redirect( $origin ); + + return $this->redirect_manager->delete_redirects( [ $redirect ] ); + } + + /** + * Gets the redirect for a given origin. + * + * @param string $origin Origin to check for. + * + * @return WPSEO_Redirect|false Redirect value object, or false if not found. + */ + protected function get_redirect( $origin ) { + return $this->redirect_manager->get_redirect( $origin ); + } + + /** + * Checks whether a redirect for a given origin already exists. + * + * @param string $origin Origin to check for. + * + * @return bool Whether a redirect for the given origin was found. + */ + protected function has_redirect( $origin ) { + return $this->get_redirect( $origin ) !== false; + } + + /** + * Checks whether a given redirect is valid. + * + * @param string $new_origin New origin of the redirect. + * @param string $target Target of the redirect. + * @param int $type Type of the redirect. + * @param string $format Format of the redirect. + * @param string|null $old_origin Optional. Old origin of the redirect to update. + * + * @return void + */ + protected function validate( $new_origin, $target, $type, $format, $old_origin = null ) { + $new_redirect = new WPSEO_Redirect( $new_origin, $target, $type, $format ); + + $old_redirect = null; + + if ( $old_origin !== null ) { + $old_redirect = $this->get_redirect( $old_origin ); + } + + $validator = new WPSEO_Redirect_Validator(); + + if ( $validator->validate( $new_redirect, $old_redirect ) === true ) { + return; + } + + $error = $validator->get_error(); + + $message = sprintf( + 'Failed to validate redirect \'%s\' => \'%s\': %s', + $new_redirect->get_origin(), + $new_redirect->get_target(), + $this->reformat_error( $error->get_message() ) + ); + + if ( $error->get_type() === 'warning' ) { + WP_CLI::warning( $message ); + } + + if ( $error->get_type() === 'error' ) { + WP_CLI::error( $message ); + } + } + + /** + * Reformats error messages by removing excessive whitespace. + * + * @param string $message Error message to reformat. + * + * @return string Reformatted error message. + */ + protected function reformat_error( $message ) { + $message = preg_replace( '/\s+/', ' ', $message ); + return trim( $message ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-command-namespace.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-command-namespace.php new file mode 100644 index 00000000..cbe5d455 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-command-namespace.php @@ -0,0 +1,16 @@ + + * : Origin of the redirect. + * + * + * : Target of the redirect. + * + * [--type=] + * : Type of the redirect. + * --- + * default: 301 + * options: + * - 301 + * - 302 + * - 307 + * - 410 + * - 451 + * --- + * + * [--format=] + * : Format of the redirect. + * --- + * default: plain + * options: + * - plain + * - regex + * --- + * + * [--force] + * : Force creation of the redirect, bypassing any validation. + * --- + * default: false + * --- + * + * @param array $args Array of positional arguments. + * @param array $assoc_args Associative array of associative arguments. + * + * @return void + */ + public function __invoke( $args, $assoc_args ) { + list( $origin, $target ) = $args; + + $type = (int) Utils\get_flag_value( $assoc_args, 'type', '301' ); + $format = Utils\get_flag_value( $assoc_args, 'format', 'plain' ); + $force = Utils\get_flag_value( $assoc_args, 'force', false ); + + $exists = $this->has_redirect( $origin ); + + if ( $exists && ! $force ) { + WP_CLI::error( "Redirect already exists for '{$origin}'." ); + } + + if ( ! $force ) { + $this->validate( $origin, $target, $type, $format ); + } + + if ( $exists ) { + $success = $this->update_redirect( $origin, $origin, $target, $type, $format ); + } + + if ( ! $exists ) { + $success = $this->create_redirect( $origin, $target, $type, $format ); + } + + if ( ! $success ) { + WP_CLI::error( "Could not create redirect: '{$origin}' => '{$target}'." ); + } + + WP_CLI::success( "Redirect created: '{$origin}' => '{$target}'." ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-delete-command.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-delete-command.php new file mode 100644 index 00000000..561ea9e2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-delete-command.php @@ -0,0 +1,41 @@ + + * : Origin of the redirect. + * + * @param array $args Array of positional arguments. + * @param array $assoc_args Associative array of associative arguments. + * + * @return void + */ + public function __invoke( $args, $assoc_args ) { + list( $origin ) = $args; + + if ( ! $this->has_redirect( $origin ) ) { + WP_CLI::error( "Redirect does not exist for '{$origin}'." ); + } + + $success = $this->delete_redirect( $origin ); + + if ( ! $success ) { + WP_CLI::error( "Could not delete redirect: '{$origin}'." ); + } + + WP_CLI::success( "Redirect delete: '{$origin}'." ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-follow-command.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-follow-command.php new file mode 100644 index 00000000..722f0f9b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-follow-command.php @@ -0,0 +1,118 @@ + + * : Origin of the redirect. + * + * [--trace] + * : Show a trace of all intermediary steps. + * + * [--limit=] + * : Limit the number of jumps to follow the redirect chain. '0' means unlimited. + * --- + * default: 0 + * --- + * + * @param array $args Array of positional arguments. + * @param array $assoc_args Associative array of associative arguments. + * + * @return void + */ + public function __invoke( $args, $assoc_args ) { + list( $origin ) = $args; + $trace = (bool) Utils\get_flag_value( $assoc_args, 'trace', false ); + $limit = (int) Utils\get_flag_value( $assoc_args, 'limit', '0' ); + + $redirect = $this->get_redirect( $origin ); + + if ( $redirect === false ) { + WP_CLI::error( "Redirect does not exist for '{$origin}'." ); + } + + $stack = $this->get_stack( $redirect, $limit ); + + if ( ! $trace ) { + $stack = (array) array_pop( $stack ); + } + + array_map( 'WP_CLI::line', $stack ); + + if ( $this->detected_loop ) { + WP_CLI::error( "Detected redirect loop for redirect: '{$origin}'." ); + } + } + + /** + * Gets the stack of redirect targets for a given starting redirect. + * + * @param WPSEO_Redirect $redirect Redirect to get the stack for. + * @param int $limit Number of steps to limit the stack to. + * + * @return array Array of target URL steps. + */ + private function get_stack( WPSEO_Redirect $redirect, $limit ) { + $steps = 0; + + while ( ! $this->detected_loop && $redirect !== false ) { + ++$steps; + if ( $limit > 0 && $steps >= $limit ) { + break; + } + + $target = $redirect->get_target(); + + $this->add_to_stack( $target ); + + $redirect = $this->get_redirect( $target ); + } + + return array_keys( $this->stack ); + } + + /** + * Adds a new target to the stack. + * + * @param string $target Target to add to the stack. + * + * @return void + */ + private function add_to_stack( $target ) { + if ( array_key_exists( $target, $this->stack ) ) { + $this->detected_loop = true; + + return; + } + + $this->stack[ $target ] = true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-has-command.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-has-command.php new file mode 100644 index 00000000..15a1131d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-has-command.php @@ -0,0 +1,31 @@ + + * : Origin of the redirect. + * + * @param array $args Array of positional arguments. + * @param array $assoc_args Associative array of associative arguments. + * + * @return void + */ + public function __invoke( $args, $assoc_args ) { + list( $origin ) = $args; + + exit( $this->has_redirect( $origin ) ? 0 : 1 ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-list-command.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-list-command.php new file mode 100644 index 00000000..034bccae --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-list-command.php @@ -0,0 +1,185 @@ +=] + * : Filter the list to only show specific values for a given field. + * + * [--field=] + * : Prints the value of a single field for each redirect. + * + * [--fields=] + * : Limit the output to specific object fields. + * --- + * default: origin,target,type,format + * --- + * + * [--output=] + * : Render output in a particular format. + * --- + * default: table + * options: + * - table + * - csv + * - json + * - yaml + * - count + * --- + * + * ## AVAILABLE FIELDS + * + * These fields will be displayed by default for each redirect: + * + * * origin + * * target + * * type + * * format + * + * @param array $args Array of positional arguments. + * @param array $assoc_args Associative array of associative arguments. + * + * @return void + */ + public function __invoke( $args, $assoc_args ) { + $this->filter = $this->get_filter( $assoc_args ); + + /* + * By default, WP-CLI uses `--format=` to define the output + * format for lists. As we also have a `format` field here and want to + * be able to easily filter the list by a given format, we use + * `--output=` to define the format. + * We need to rename it back again here to be able to use the default + * format handling provided by WP-CLI. + */ + $assoc_args['format'] = $assoc_args['output']; + + $formatter = new Formatter( + $assoc_args, + $this->get_fields( $assoc_args ) + ); + + $redirects = array_filter( + $this->get_redirects(), + [ $this, 'filter_redirect' ] + ); + + $formatter->display_items( $redirects ); + } + + /** + * Gets the filtered list of redirects. + * + * @return array Associative array of redirects. + */ + private function get_redirects() { + $redirect_objects = $this->redirect_manager->get_all_redirects(); + + return array_map( + [ $this, 'adapt_redirect_data' ], + $redirect_objects + ); + } + + /** + * Filters the redirects based on whether they match the provided filter + * array. + * + * @param array $redirect Array data for an individual redirect. + * + * @return bool Whether to include the redirect or not. + */ + private function filter_redirect( $redirect ) { + foreach ( $this->filter as $key => $value ) { + /* + * Loose comparison to ignore type, as CLI arguments are always + * strings. + */ + if ( $value != $redirect[ $key ] ) { + return false; + } + } + + return true; + } + + /** + * Adapts redirect data fetched from the redirect manager to fit WP_CLI + * requirements. + * + * @param WPSEO_Redirect $redirect Redirection value object. + * + * @return array Associative array of redirects. + */ + private function adapt_redirect_data( $redirect ) { + return [ + 'origin' => $redirect->get_origin(), + 'target' => $redirect->get_target(), + 'type' => $redirect->get_type(), + 'format' => $redirect->get_format(), + ]; + } + + /** + * Gets the array of field names to use for formatting the table columns. + * + * @param array $assoc_args Parameters passed to command. Determines + * formatting. + * + * @return array Array of fields to use. + */ + private function get_fields( $assoc_args ) { + if ( empty( $assoc_args['fields'] ) ) { + return explode( ',', self::ALL_FIELDS ); + } + + if ( is_string( $assoc_args['fields'] ) ) { + return explode( ',', $assoc_args['fields'] ); + } + + return $assoc_args['fields']; + } + + /** + * Gets the filter array to filter values against. + * + * @param array $assoc_args Parameters passed to command. Determines + * formatting. + * + * @return array Associative array of filter values. + */ + private function get_filter( $assoc_args ) { + $filter = []; + + foreach ( [ 'origin', 'target', 'type', 'format' ] as $type ) { + if ( isset( $assoc_args[ $type ] ) ) { + $filter[ $type ] = $assoc_args[ $type ]; + } + } + + return $filter; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-update-command.php b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-update-command.php new file mode 100644 index 00000000..584f1d92 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/cli/cli-redirect-update-command.php @@ -0,0 +1,86 @@ + + * : Origin of the redirect to update. + * + * + * : New origin of the redirect. + * + * + * : Target of the redirect. + * + * [--type=] + * : Type of the redirect. + * --- + * default: 301 + * options: + * - 301 + * - 302 + * - 307 + * - 410 + * - 451 + * --- + * + * [--format=] + * : Format of the redirect. + * --- + * default: plain + * options: + * - plain + * - regex + * --- + * + * [--force] + * : Force updating of the redirect, bypassing any validation. + * --- + * default: false + * --- + * + * @param array $args Array of positional arguments. + * @param array $assoc_args Associative array of associative arguments. + * + * @return void + */ + public function __invoke( $args, $assoc_args ) { + list( $origin, $new_origin, $target ) = $args; + + $type = (int) Utils\get_flag_value( $assoc_args, 'type', '301' ); + $format = Utils\get_flag_value( $assoc_args, 'format', 'plain' ); + $force = Utils\get_flag_value( $assoc_args, 'force', false ); + + $exists = $this->has_redirect( $origin ); + + if ( ! $exists && ! $force ) { + WP_CLI::error( "Redirect does not exist for '{$origin}'." ); + } + + if ( ! $force ) { + $this->validate( $new_origin, $target, $type, $format, $origin ); + } + + $success = $this->update_redirect( $origin, $new_origin, $target, $type, $format ); + + if ( ! $success ) { + WP_CLI::error( "Could not update redirect: '{$new_origin}' => '{$target}'." ); + } + + WP_CLI::success( "Redirect updated: '{$new_origin}' => '{$target}'." ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/index.php b/wp/wp-content/plugins/wordpress-seo-premium/index.php new file mode 100644 index 00000000..e94d9a42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/index.php @@ -0,0 +1,4 @@ +=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;","lang":"ar"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["عاد الطلب بالخطأ التالي: \"%s\""],"X share preview":["معاينة مشاركة X"],"AI X title generator":["ذكاء اصطناعي X مولد العنوان"],"AI X description generator":["ذكاء اصطناعي X مولد الوصÙ"],"X preview":["معاينة X"],"Please enter a valid focus keyphrase.":["الرجاء إدخال عبارة رئيسية Ù…ÙØªØ§Ø­ÙŠØ© صالحة."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["لاستخدام هذه الميزة، يجب أن يكون موقعك متاحًا للعامة. ينطبق هذا على كل من مواقع الاختبار والحالات التي تكون Ùيها REST واجهة برمجة التطبيقات (API) لديك محمية بكلمة مرور. يرجى التأكد من أن موقعك متاح للعامة ثم حاول مرة أخرى. إذا استمرت المشكلة، يرجى %1$s الاتصال Ø¨ÙØ±ÙŠÙ‚ الدعم %2$s."],"Yoast AI cannot reach your site":["لا يمكن لـ Yoast AI الوصول إلى موقعك"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["للوصول إلى هذه الميزة، تحتاج إلى اشتراكات %2$s Ùˆ%3$s نشطة. يرجى %5$s تنشيط الاشتراكاتك خلال %1$s%6$s أو %7$sاحصل على %4$s%8$s جديد. بعد ذلك، يرجى تحديث هذه Ø§Ù„ØµÙØ­Ø© حتى تعمل الميزة بشكل صحيح، الأمر الذي قد يستغرق ما يصل إلى 30 ثانية."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["يتطلب منشئ عنوان AI تمكين تحليل تحسين محركات البحث (SEO) قبل الاستخدام. لتمكينه، يرجى الانتقال إلى ميزات الموقع %2$s لـ %1$s%3$sØŒ وتشغيل تحليل تحسين محركات البحث (SEO)ØŒ ثم النقر Ùوق \"Ø­ÙØ¸ التغييرات\". إذا تم تعطيل تحليل تحسين محركات البحث (SEO) ÙÙŠ المل٠الشخصي لمستخدم WordPress الخاص بك، ÙØ§Ø¯Ø®Ù„ إلى ملÙÙƒ الشخصي وقم بتمكينه هناك. يرجى الاتصال بالمسؤول الخاص بك إذا لم تتمكن من الدخول إلى هذه الإعدادات."],"Social share preview":["معاينة المشاركة الاجتماعية"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["لمواصلة استخدام ميزة الذكاء الاصطناعي Ù„YoastØŒ يرجى تقليل تكرار طلباتك. ØªÙˆÙØ± %1$sمقالة المساعدة%2$s الخاصة بنا إرشادات حول التخطيط Ø§Ù„ÙØ¹Ø§Ù„ لطلباتك وتنظيمها من أجل سير عمل محسّن."],"You've reached the Yoast AI rate limit.":["لقد وصلت إلى الحد الأقصى لمعدل الذكاء الاصطناعي Ù„Yoast."],"Allow":["سماح"],"Deny":["Ø±ÙØ¶"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["لمشاهدة هذا الÙيديو ØŒ تحتاج إلى السماح لـ %1$s بتحميل مقاطع الÙيديو المضمنة من %2$s."],"Text generated by AI may be offensive or inaccurate.":["قد يكون النص الناتج عن الذكاء الاصطناعي مسيئًا أو غير دقيق."],"(Opens in a new browser tab)":["(ÙŠÙØªØ­ ÙÙŠ علامة تبويب Ù…ØªØµÙØ­ جديدة)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["قم بتسريع سير عملك باستخدام الذكاء الاصطناعي التوليدي. احصل على اقتراحات عالية الجودة للعناوين والوص٠لبحثك ومظهرك الاجتماعي. %1$sتعر٠على المزيد%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["قم بإنشاء العناوين والأوصا٠باستخدام الذكاء الاصطناعي Ù„Yoast!"],"New to %1$s":["جديد ÙÙŠ %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["أواÙÙ‚ على %1$sشروط الخدمة%2$s Ùˆ%3$sسياسة الخصوصية%4$s لخدمة الذكاء الاصطناعي Ù„Yoast. يتضمن ذلك المواÙقة على جمع البيانات واستخدامها لتحسين تجربة المستخدم."],"Start generating":["ابدأ بالتوليد"],"Yes, revoke consent":["نعم، إلغاء المواÙقة"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["من خلال إلغاء مواÙقتك، لن تتمكن بعد الآن من الوصول إلى ميزات الذكاء الاصطناعي Ù„Yoast. هل أنت متأكد أنك تريد إلغاء مواÙقتك؟"],"Something went wrong, please try again later.":["حدث خطأ ما، يرجى المحاولة ÙÙ‰ وقت لاحق."],"Revoke AI consent":["إلغاء مواÙقة الذكاء الاصطناعي"],"AI title generator":["مولد عنوان الذكاء الاصطناعي"],"AI description generator":["مولد وص٠الذكاء الاصطناعي"],"AI social title generator":["مولد الذكاء الاصطناعي للعنوان الاجتماعي"],"AI social description generator":["مولد الذكاء الاصطناعي للوص٠الاجتماعي"],"Dismiss":["تجاهÙÙ„"],"Don’t show again":["لا تظهر مرة أخرى"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sنصيحة%2$s: قم بتحسين دقة مولد الذكاء الاصطناعي لعناوينك عن طريق كتابة المزيد من المحتوى ÙÙŠ ØµÙØ­ØªÙƒ."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sنصيحة%2$s: قم بتحسين دقة أوصا٠مولد الذكاء الاصطناعي عن طريق كتابة المزيد من المحتوى ÙÙŠ ØµÙØ­ØªÙƒ."],"Try again":["حاول مجدداً"],"Social preview":["معاينة اجتماعية"],"Desktop result":["نتيجة سطح المكتب"],"Mobile result":["نتيجة الجوال"],"Apply %s description":[],"Apply %s title":[],"Next":["التالي"],"Previous":["السابق"],"Generate 5 more":["توليد 5 آخرين"],"Google preview":["معاينة Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["نظرًا لإرشادات OpenAI الأخلاقية الصارمة Ùˆ %1$sسياسات الاستخدام%2$sØŒ لا يمكننا توليد عناوين تحسين محركات البحث(SEO) Ù„ØµÙØ­ØªÙƒ. إذا كنت تنوي استخدام الذكاء الاصطناعي، Ùيرجى تجنب استخدام محتوى العن٠الصريح أو الجنسي الصريح. %3$sاقرأ المزيد حول كيÙية تكوين ØµÙØ­ØªÙƒ للتأكد من حصولك على Ø£ÙØ¶Ù„ النتائج باستخدام الذكاء الاصطناعي%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["نظرًا لإرشادات OpenAI الأخلاقية الصارمة Ùˆ%1$sسياسات الاستخدام%2$sØŒ لا يمكننا توليد أوصا٠تعريÙية Ù„ØµÙØ­ØªÙƒ. إذا كنت تنوي استخدام الذكاء الاصطناعي، Ùيرجى تجنب استخدام محتوى العن٠الصريح أو الجنسي الصريح. %3$sاقرأ المزيد حول كيÙية تكوين ØµÙØ­ØªÙƒ للتأكد من حصولك على Ø£ÙØ¶Ù„ النتائج باستخدام الذكاء الاصطناعي %4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["للوصول إلى هذه الميزة، تحتاج إلى اشتراك %1$s نشط. يرجى %3$sتنشيط اشتراكك خلال %2$s%4$s أو %5$sاحصل على %1$s اشتراك جديد%6$s. بعد ذلك، انقر على الزر لتحديث هذه Ø§Ù„ØµÙØ­Ø© حتى تعمل الميزة بشكل صحيح والذي قد يستغرق ما يصل إلى 30 ثانية."],"Refresh page":["بتحديث Ø§Ù„ØµÙØ­Ø©"],"Not enough content":["محتوى غير كاÙÙŠ"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["الرجاء اعادة المحاولة ÙÙŠ وقت لاحق. إذا استمرت المشكلة، يرجى %1$sالاتصال Ø¨ÙØ±ÙŠÙ‚ الدعم%2$s!"],"Something went wrong":["هناك خطأ ما"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["يبدو أن مهلة الاتصال قد انتهت. يرجى التحقق من اتصالك بالإنترنت والمحاولة مرة أخرى لاحقًا. إذا استمرت المشكلة، يرجى %1$sالاتصال Ø¨ÙØ±ÙŠÙ‚ الدعم%2$s"],"Connection timeout":["انتهى الاتصال"],"Use AI":["استخدم الذكاء الاصطناعي"],"Close modal":["اغلاق الوسائط"],"Learn more about AI (Opens in a new browser tab)":["تعر٠على المزيد حول الذكاء الاصطناعي (ÙŠÙØªØ­ ÙÙŠ علامة تبويب Ù…ØªØµÙØ­ جديدة)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sالعنوان%3$s: ØµÙØ­ØªÙƒ ليس لها عنوان حتى الآن. %2$sأض٠عنوانا%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sالعنوان%2$s: ØµÙØ­ØªÙƒ لها عنوان. أحسنت!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sتوزيع العبارة الرئيسية%3$s: %2$sقم بتضمين العبارة الرئيسية أو Ù…Ø±Ø§Ø¯ÙØ§ØªÙ‡Ø§ ÙÙŠ النص حتى نتمكن من التحقق من توزيع العبارة الرئيسية%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sتوزيع العبارة الرئيسية%2$s: عمل جيد!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$s توزيع العبارة الرئيسية%3$s: غير متساو. لا تحتوي بعض أجزاء النص الخاص بك على العبارة الرئيسية أو Ù…Ø±Ø§Ø¯ÙØ§ØªÙ‡Ø§. %2$s وزعهم بشكل متساوÙ%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sتوزيع العبارة الرئيسية%3$s: غير متساو٠للغاية. لا تحتوي الأجزاء الكبيرة من النص على العبارة الرئيسية أو Ù…Ø±Ø§Ø¯ÙØ§ØªÙ‡Ø§. %2$sوزعهم بشكل متساوÙ%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: أنت لا تستخدم الكثير من الكلمات المعقدة ØŒ مما يجعل نصك سهل القراءة. أحسنت!"],"Word complexity":["تعقيد الكلمات"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s من الكلمات ÙÙŠ النص الخاص بك تعتبر معقدة. %3$s حاول استخدام كلمات أقصر وأكثر شيوعًا لتحسين سهولة القراءة %4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$s محاذاة %3$s: هناك قسم طويل من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليسار%3$s.","%1$s محاذاة %3$s: هناك قسم طويل من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليسار%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليسار%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليسار%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليسار%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليسار%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$s محاذاة %3$s: هناك قسم طويل من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليمين%3$s.","%1$s محاذاة %3$s: هناك قسم طويل من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليمين%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليمين%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليمين%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليمين%3$s.","%1$s محاذاة %3$s: هناك %4$s أقسام من النص المحاذي للوسط. %2$s نوصي بجعله محاذيًا إلى اليمين%3$s."],"Select image":["تحديد صورة"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["ربما لا تعر٠ذلك، ولكن قد تكون هناك ØµÙØ­Ø§Øª على موقعك لا تحتوي على أي روابط. هذه مشكلة تتعلق بتحسين محركات البحث (SEO)ØŒ لأنه من الصعب على محركات البحث العثور على Ø§Ù„ØµÙØ­Ø§Øª التي لا تحتوي على أي روابط. لذلك، من الصعب عليهم الترتيب. نحن نسمي هذه Ø§Ù„ØµÙØ­Ø§Øª بالمحتوى اليتيم. ÙÙŠ هذا التمرين، نعثر على المحتوى اليتيم على موقعك ونرشدك إلى Ø¥Ø¶Ø§ÙØ© روابط إليه بسرعة، حتى تحصل على ÙØ±ØµØ© للترتيب!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["حان الوقت Ù„Ø¥Ø¶Ø§ÙØ© بعض الروابط! أدناه، ترى قائمة بمقالاتك اليتيمة. يوجد أسÙÙ„ كل ØµÙØ­Ø© اقتراحات Ù„Ù„ØµÙØ­Ø§Øª ذات الصلة التي يمكنك Ø¥Ø¶Ø§ÙØ© رابط منها. عند Ø¥Ø¶Ø§ÙØ© الرابط، تأكد من إدراجه ÙÙŠ جملة ذات صلة بمقالتك اليتيمة. استمر ÙÙŠ Ø¥Ø¶Ø§ÙØ© الروابط إلى كل مقالة من المقالات المعزولة حتى تشعر بالرضا عن كمية الروابط التي تشير إليها."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["حان الوقت Ù„Ø¥Ø¶Ø§ÙØ© بعض الروابط! أدناه ØŒ ترى قائمة بالأساسي الخاصة بك. تحت كل أساسي ØŒ توجد اقتراحات لمقالات يمكنك Ø¥Ø¶Ø§ÙØ© رابط منها. عند Ø¥Ø¶Ø§ÙØ© الارتباط ØŒ تأكد من إدراجه ÙÙŠ الجملة ذات الصلة المتعلقة بالمقال الأساسي الخاص بك. استمر ÙÙŠ Ø¥Ø¶Ø§ÙØ© روابط من أي عدد تريده من المقالات ذات الصلة ØŒ حتى تحتوي أساسيات الخاصة بك على معظم الروابط الداخلية التي تشير إليها."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["بعض المقالات على موقعك%1$s هي الأكثر أهمية%2$s. يجيبون على أسئلة الناس ويحلون مشاكلهم. لذا Ùهم يستحقون أن يكونوا ÙÙŠ مرتبة جيدة! ÙÙŠ%3$s ØŒ نطلق على هذه المقالات الأساسية. تتمثل إحدى طرق الحصول على ترتيب جيد لهم هي بتوجيه روابط كاÙية اليهم. تشير المزيد من الروابط لمحركات البحث إلى أن هذه المقالات مهمة وقيمة. ÙÙŠ هذا التمرين ØŒ سنساعدك ÙÙŠ Ø¥Ø¶Ø§ÙØ© روابط إلى مقالاتك الأساسية!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["بمجرد Ø¥Ø¶Ø§ÙØ© المزيد من المحتوى ØŒ سنتمكن من إخبارك بالمستوى الشكلي للنص الخاص بك."],"Overall, your text appears to be %1$s%3$s%2$s.":["بشكل عام ØŒ يبدو أن النص الخاص بك هو%1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["ستتم إزالة تكامل Zapier من %1$s ÙÙŠ 20.7 (تاريخ الإصدار ÙÙŠ 9 مايو). إذا كانت لديك أي أسئلة، يرجى التواصل مع %2$s."],"Maximum heading level":["الحد الأقصى لمستوى العنوان"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["لقد قمت بتعطيل اقتراحات الارتباط ØŒ وهو أمر ضروري حتى تعمل الارتباطات ذات الصلة. إذا كنت تريد Ø¥Ø¶Ø§ÙØ© الارتباطات ذات الصلة ØŒ ÙØ§Ù„رجاء الانتقال إلى ميزات الموقع ÙˆØªÙØ¹ÙŠÙ„ اقتراحات الارتباط."],"Schema":["مخطط Schema"],"Meta tags":["الوسوم الوصÙية"],"Not available":["غير Ù…ØªÙˆÙØ±"],"Checks":["Ø§Ù„ÙØ­ÙˆØµØ§Øª"],"Focus Keyphrase":["التركيز على العبارة الرئيسية"],"Good":["جيدة"],"No index":["لا يوجد Ùهرس"],"Front-end SEO inspector":["Ù…ÙØªØ´ SEO للواجهة الأمامية"],"Focus keyphrase not set":["لم يتم تعيين تركيز العبارة الرئيسية."],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["بمجرد نشر Zap الخاص بك ÙÙŠ لوحة معلومات %s ØŒ يمكنك التحقق مما إذا كان نشطًا ومتصلاً بموقعك."],"Reset API key":["إعادة تعيين Ù…ÙØªØ§Ø­ API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["أنت متصل حاليًا بـ %s باستخدام Ù…ÙØªØ§Ø­ API التالي. إذا كنت ترغب ÙÙŠ إعادة الاتصال Ø¨Ù…ÙØªØ§Ø­ API مختل٠، يمكنك إعادة تعيين Ù…ÙØªØ§Ø­Ùƒ أدناه."],"Your API key":["Ù…ÙØªØ§Ø­ API الخاص بك"],"Go to your %s dashboard":["انتقل إلى لوحة المعلومات %s الخاصة بك"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["لقد نجحت ÙÙŠ الاتصال بـ %1$s! لإدارة Zap الخاص بك ØŒ يرجى زيارة لوحة المعلومات%2$s."],"Your %s dashboard":["لوحة المعلومات %s الخاصة بك"],"Verify connection":["تحقق من الاتصال"],"Verify your connection":["تحقق من اتصالك"],"Create a Zap":["قم بإنشاء Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["قم بتسجيل الدخول إلى حساب %1$s وابدأ ÙÙŠ إنشاء أول Zap الخاص بك! لاحظ أنه يمكنك Ùقط إنشاء 1 Zap مع حدث تشغيل من %2$s. ضمن هذا Zap يمكنك اختيار إجراء واحد أو أكثر."],"%s API key":["Ù…ÙØªØ§Ø­ API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["ستحتاج إلى Ù…ÙØªØ§Ø­ API هذا لاحقًا ÙÙŠ %s عندما تقوم بإعداد Zap."],"Copy your API key":["انسخ Ù…ÙØªØ§Ø­ API الخاص بك"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["لإعداد اتصال ØŒ تأكد من نسخ Ù…ÙØªØ§Ø­ API المحدد أدناه واستخدمه لإنشاء وتشغيل Zap داخل الحساب %s الخاص بك."],"Manage %s settings":["إدارة إعدادات %s"],"Connect to %s":["اتصل بـ %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["يرجى ملاحظة: لكي يعمل هذا التمرين بشكل جيد ØŒ تحتاج إلى تشغيل أداة تحسين بيانات تحسين محركات البحث (SEO). يمكن للمسؤولين تشغيل هذا ضمن%1$s تحسين محركات البحث (SEO)> الأدوات%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["لقد Ø£Ø¶ÙØª روابط إلى مقالاتك المعزولة ØŒ وأزلت تلك التي لم تعد ذات صلة. عمل عظيم! ألق نظرة على الملخص أدناه واحتÙÙ„ بما أنجزته!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["قم Ø¨ÙØ­Øµ المحتوى ÙÙŠ هذه القائمة بشكل نقدي وقم بإجراء التحديثات اللازمة. إذا كنت بحاجة إلى مساعدة ÙÙŠ التحديث ØŒ Ùلدينا%1$s مقالة مدونة Ù…Ùيد للغاية يمكنها إرشادك طوال الطريق%2$s (انقر Ù„ÙØªØ­Ù‡ ÙÙŠ علامة تبويب جديدة)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$s هل تحتاج إلى مزيد من الإرشادات؟ لقد تناولنا كل خطوة بمزيد من Ø§Ù„ØªÙØµÙŠÙ„ ÙÙŠ الدليل التالي:%2$s كيÙية استخدام تمرين%7$s للمحتوى المعزول %3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["لقد جعلت للتو Ø£ÙØ¶Ù„ محتوى لديك من السهل العثور عليه ØŒ ويزيد احتمال ترتيبه! أحسنت! من وقت لآخر ØŒ تذكر أن تتحقق مما إذا كانت أحجار الزاوية لديك تحصل على روابط كاÙية!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["ألق نظرة على القائمة أدناه. هل أحجار الزاوية الخاصة بك (المميزة بـ%1$s) تحتوي على معظم الارتباطات الداخلية التي تشير إليها؟ انقر Ùوق الزر تحسين (Optimize) إذا كنت تعتقد أن حجر الأساس يحتاج إلى مزيد من الروابط. سيؤدي ذلك إلى نقل المقالة إلى الخطوة التالية."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["هل كل من الأساسات الخاصة بك لها علامة خضراء؟ للحصول على Ø£ÙØ¶Ù„ النتائج، Ùكر ÙÙŠ تحرير تلك التي ليست كذلك!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["ما هي المقالات التي تريد أن تحتل المرتبة الأولى Ùيها؟ أي منها سيجد جمهورك أكثر ÙØ§Ø¦Ø¯Ø© واكتمالًا؟ انقر Ùوق السهم الذي يشير لأسÙÙ„ وابحث عن المقالات التي تناسب تلك المعايير. سنقوم تلقائيًا بوضع علامة على المقالات التي تحددها من القائمة كحجر زاوية."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$s هل تحتاج إلى مزيد من الإرشادات؟ لقد تناولنا كل خطوة بمزيد من Ø§Ù„ØªÙØµÙŠÙ„ ÙÙŠ: %2$s كيÙية استخدام تمرين حجر الزاوية %7$s %3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["جدول المحتويات Yoast"],"Yoast Related Links":["روابط ذات صلة بYoast"],"Finish optimizing":["أتمم التحسين"],"You've finished adding links to this article.":["لقد أتممت Ø¥Ø¶Ø§ÙØ© الروابط إلى هذا المقال"],"Optimize":["تحسين "],"Added to next step":["تمت Ø§Ù„Ø¥Ø¶Ø§ÙØ© للخطوة التالية"],"Choose cornerstone articles...":["اختر المقالات الأساس..."],"Loading data...":["جار٠تحميل البيانات ..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["لم تقم بتنظي٠أو تحديث أي مقالات حتى الآن باستخدام هذا التدريب. بمجرد القيام بذلك ØŒ سيظهر هنا ملخص لعملك."],"Skipped":["تم تخطي"],"Hidden from search engines.":["مخÙية عن محركات البحث."],"Removed":["تمت الإزالة"],"Improved":["محسّن"],"Resolution":["القرار"],"Loading redirect options...":["جار٠تحميل خيارات إعادة التوجيه ..."],"Remove and redirect":["إزالة وإعادة التوجيه"],"Custom url:":["رابط مخصص:"],"Related article:":["مقالة ذات صلة:"],"Home page:":["Ø§Ù„ØµÙØ­Ø© الرئيسية:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["أنت على وشك إزالة%1$s%2$s%3$s. لمنع ظهور أخطاء 404 على موقعك، يجب إعادة توجيهها إلى ØµÙØ­Ø© أخرى على موقعك. إلى أين تريد إعادة توجيهها؟"],"SEO Workout: Remove article":["تدريب تحسين محركات البحث: إزالة المقالة"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["كل شيء يبدو على ما يرام! لم نعثر على أي مقالات على موقعك مضى عليها أكثر من ستة أشهر ولا تتلقى سوى عدد قليل جدًا من الروابط على موقعك. تحقق مرة أخرى هنا لاحقًا للحصول على اقتراحات تنظي٠جديدة!"],"Hide from search engines":["Ø¥Ø®ÙØ§Ø¡ من محركات البحث"],"Improve":["حسن"],"Are you sure you wish to hide this article from search engines?":["هل أنت متأكد أنك ترغب ÙÙŠ Ø¥Ø®ÙØ§Ø¡ هذه المقالة من محركات البحث؟"],"Action":["إجراء"],"You've hidden this article from search engines.":["لقد قمت Ø¨Ø¥Ø®ÙØ§Ø¡ هذه المقالة من محركات البحث."],"You've removed this article.":["لقد قمت بإزالة هذه المقالة."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["لم تقم حاليًا بتحديد أي مقالات لتحسينها. حدد بعض المقالات ÙÙŠ الخطوات السابقة Ù„Ø¥Ø¶Ø§ÙØ© روابط إليها وسنعرض لك هنا مقترحات الارتباط."],"Loading link suggestions...":["جار٠تحميل اقتراحات الارتباط ..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["لم نعثر على أي اقتراحات لهذه المقالة، ولكن بالطبع لا يزال بإمكانك Ø¥Ø¶Ø§ÙØ© روابط إلى المقالات التي تعتقد أنها ذات صلة."],"Skip":["تخطي"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["لم تقم بتحديد أي مقالات لهذه الخطوة حتى الآن. يمكنك القيام بذلك ÙÙŠ الخطوة السابقة."],"Is it up-to-date?":["هل هو محدث؟"],"Last Updated":["التحديث الاخير"],"You've moved this article to the next step.":["لقد قمت بنقل هذه المقالة إلى الخطوة التالية."],"Unknown":["غير معروÙ"],"Clear summary":["ملخص واضح"],"Add internal links towards your orphaned articles.":["أض٠روابط داخلية لمقالاتك المعزولة."],"Should you update your article?":["هل يجب عليك تحديث مقالتك؟"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["غالبًا ما يحتوي موقعك على الكثير من المحتوى الذي تم إنشاؤه مرة واحدة ولم يتم الرجوع إليه بعد ذلك. من المهم المراجعة واسأل Ù†ÙØ³Ùƒ ما إذا كان هذا المحتوى لا يزال ذو صلة بموقعك. هل يجب علي تحسينه أم إزالته؟"],"Start: Love it or leave it?":["ابدأ: أحبها أم اتركها؟"],"Clean up your unlinked content to make sure people can find it":["نظ٠المحتوى غير المرتبط حتى يتمكن المستخدمون من العثور عليه"],"I've finished this workout":["لقد أنهيت هذا التمرين"],"Reset this workout":["إعادة تعيين هذا التمرين"],"Well done!":["أحسنت!"],"Add internal links towards your cornerstones":["أض٠روابط داخلية نحو الأساس الخاصة بك"],"Check the number of incoming internal links of your cornerstones":["تحقق من عدد الروابط الداخلية الواردة للأساس الخاص بك"],"Start: Choose your cornerstones!":["ابدأ: اختر الأساس الخاص بك!"],"The cornerstone approach":["نهج الأساس"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["يرجى ملاحظة: لكي يعمل هذا التمرين بشكل جيد ولتقديم اقتراحات ربط لك، تحتاج إلى تشغيل أداة تحسين بيانات تحسين محركات البحث (SEO). يمكن المديرين تشغيل هذا ضمن تحسين محركات البحث SEO > أدوات Tools ."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["يرجى ملاحظة ما يلي: قام المدير بتعطيل Ø§Ù„ÙˆØ¸ÙŠÙØ© الأساسية ÙÙŠ إعدادات تحسين محركات البحث (SEO). إذا كنت ترغب ÙÙŠ استخدام هذا التمرين، Ùيجب تمكينه."],"I've finished this step":["لقد انتهيت من هذه الخطوة"],"Revise this step":["تعديل هذه الخطوة"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["لم نتمكن من العثور على روابط داخلية على ØµÙØ­Ø§ØªÙƒ. إما أنك لم تقم Ø¨Ø¥Ø¶Ø§ÙØ© أي روابط داخلية إلى المحتوى الخاص بك حتى الآن، أو أن Yoast SEO لم يقم بÙهرستها. يمكنك Ù„ Yoast SEO Ùهرسة الروابط الخاصة بك عن طريق تشغيل تحسين بيانات SEO ضمن SEO تحسين محرك البحث > أدوات Tools."],"Incoming links":["روابط واردة"],"Edit to add link":["تحرير Ù„Ø¥Ø¶Ø§ÙØ© ارتباط"],"%s incoming link":["%s رابط وارد","%s رابط وارد","%s رابطان واردان","%s روابط واردة","%s روابط واردة","%s روابط واردة"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["ليس لديك حاليا أي مقالات وضعت لها علامة كأساس. عندما تضع علامة على مقالاتك كأساس، سو٠يظهرون هنا."],"Focus keyphrase":["عبارة رئيسية Ù…ÙØªØ§Ø­ÙŠØ©"],"Article":["مقالة"],"Readability score":["درجة قابلية القراءة"],"SEO score":["نتيجة SEO"],"Copy failed":["ÙØ´Ù„ النسخ"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["حسÙّن ØªØµÙ†ÙŠÙØ§Øª جميع الأساس لديك باستخدام هذا التمرين%1$sخطوة بخطوة!%2$s"],"Rank with articles you want to rank with":["احتل مراتب جيدة مع المقالات التي تريد الترتيب لها"],"Descriptive text":["النص الوصÙÙŠ"],"Show the descriptive text":["عرض النص الوصÙÙŠ"],"Show icon":["عرض الايقونة"],"Yoast Estimated Reading Time":["وقت القراءة المقدر من قبل yoast"],"Shows an estimated reading time based on the content length.":["يظهر وقت القراءة المقدرة بناء على طول المحتوى"],"reading time":["وقت القراءة"],"content length":["طول المحتوى"],"Estimated reading time:":["الوقت المقدر للقراءة"],"minute":["دقيقة","دقيقة","دقائق","دقائق","دقائق","دقائق"],"Settings":["الإعدادات"],"OK":["مقبولة"],"Close":["إغلاق"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["أول حل حقيقي شامل الكل ÙÙŠ واحد لتحسين محركات البحث SEO لووردبريس، بما ÙÙŠ ذلك تحليل المحتوى على Ø§Ù„ØµÙØ­Ø© وخرائط مواقع XML وغير ذلك الكثير."],"Type":["نوع"],"Team Yoast":["ÙØ±ÙŠÙ‚ Yoast"],"Orphaned content":["محتوى خص بالايتام"],"Synonyms":["Ù…Ø±Ø§Ø¯ÙØ§Øª"],"Internal linking suggestions":["اقتراحات الربط الداخلية"],"Enter a related keyphrase to calculate the SEO score":["ادخل عبارة Ù…ÙØªØ§Ø­ÙŠØ© ذات صلة لحساب نقاط SEO"],"Related keyphrase":["عبارة رئيسية ذات صلة"],"Add related keyphrase":["إدخال كلمات دليلية ذات صلة"],"Analysis results":["نتائج التحليل"],"Help on choosing the perfect keyphrase":["المساعدة ÙÙŠ اختيار Ø§ÙØ¶Ù„ عبارة Ù…ÙØªØ§Ø­ÙŠØ©"],"Help on keyphrase synonyms":["مساعدة ÙÙŠ Ù…Ø±Ø§Ø¯ÙØ§Øª العبارة Ø§Ù„Ù…ÙØªØ§Ø­ÙŠØ©"],"Keyphrase":["العبارة الرئيسية"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO بريميوم"],"New URL: {{link}}%s{{/link}}":["URL جديد: {{link}}%s{{/link}}"],"Undo":["تراجع"],"Redirect created":["تم انشاء التحويل"],"%s just created a redirect from the old URL to the new URL.":["%s تم انشاء تحويل من URL قديم الى URL جديد"],"Old URL: {{link}}%s{{/link}}":["URL قديم: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Ù…Ø±Ø§Ø¯ÙØ§Øª الكلمة الرئيسية"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["حدث خطأ: تحليل Premium SEO لا يعمل كما هو متوقع. يرجى {{activateLink}}ØªÙØ¹ÙŠÙ„ اشتراكك ÙÙŠ MyYoast{{/activateLink}} ثم {{reloadButton}}إعادة تحميل هذه Ø§Ù„ØµÙØ­Ø©{{/reloadButton}} حتى تعمل بشكل صحيح."],"seo":["seo"],"internal linking":["الروابط الداخلية"],"site structure":["بنية الموقع"],"We could not find any relevant articles on your website that you could link to from your post.":["لم نتمكن من العثور على أي مقالات ذات صلة على موقع الويب الخاص بك والتي يمكنك الارتباط بها من مقالتك."],"Load suggestions":["تحميل اقتراحات"],"Refresh suggestions":["تحديث الاقتراحات"],"Write list…":["قائمة الكتابة ..."],"Adds a list of links related to this page.":["يضي٠قائمة الروابط المتعلقة بهذه Ø§Ù„ØµÙØ­Ø©."],"related posts":["المقالات ذات الصلة"],"related pages":["Ø§Ù„ØµÙØ­Ø§Øª ذات الصلة"],"Adds a table of contents to this page.":["يضي٠جدول المحتويات إلى هذه Ø§Ù„ØµÙØ­Ø©."],"links":["روابط"],"toc":["جدول المحتويات"],"Copy link":["نسخ الرابط"],"Copy link to suggested article: %s":["نسخ رابط المقالة المقترحة: %s"],"Add a title to your post for the best internal linking suggestions.":["أض٠عنوانًا إلى مشاركتك للحصول على Ø£ÙØ¶Ù„ اقتراحات الارتباط الداخلية."],"Add a metadescription to your post for the best internal linking suggestions.":["أض٠وصÙًا تعريÙيًا لمنشورك للحصول على Ø£ÙØ¶Ù„ اقتراحات الارتباط الداخلية"],"Add a title and a metadescription to your post for the best internal linking suggestions.":["أض٠عنوانًا ووصÙًا تعريÙيًا لمنشورك للحصول على Ø£ÙØ¶Ù„ اقتراحات الارتباط الداخلية."],"Also, add a title to your post for the best internal linking suggestions.":["أض٠أيضًا عنوانًا إلى مشاركتك للحصول على Ø£ÙØ¶Ù„ اقتراحات الارتباط الداخلية."],"Also, add a metadescription to your post for the best internal linking suggestions.":["أض٠أيضًا وصÙًا تعريÙيًا لمنشورك للحصول على Ø£ÙØ¶Ù„ اقتراحات الارتباط الداخلية."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["أض٠أيضًا عنوانًا ووصÙًا تعريÙيًا لمنشورك للحصول على Ø£ÙØ¶Ù„ اقتراحات الارتباط الداخلية"],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["بمجرد Ø¥Ø¶Ø§ÙØ© نسخة أكثر قليلاً ØŒ سنقدم لك قائمة بالمحتوى ذي الصلة هنا والذي يمكنك الارتباط به ÙÙŠ منشورك."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["لتحسين هيكل موقعك ØŒ ضع ÙÙŠ اعتبارك إنشاء روابط إلى منشورات أو ØµÙØ­Ø§Øª أخرى ذات صلة على موقعك على الويب."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["يستغرق الأمر بضع ثوان٠لتظهر لك قائمة بالمحتوى ذي الصلة الذي يمكنك الارتباط به. سيتم عرض الاقتراحات هنا بمجرد الحصول عليها."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}} اقرأ دليلنا حول الربط الداخلي لتحسين محركات البحث {{/a}} Ù„Ù…Ø¹Ø±ÙØ© المزيد."],"Copied!":["تم النسخ!"],"Not supported!":["غير مدعوم!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["هل تحاول استخدام جمل Ù…ÙØ§ØªÙŠØ­ متعددة ذات صلة؟ يجب عليك Ø¥Ø¶Ø§ÙØªÙ‡Ù… بشكل Ù…Ù†ÙØµÙ„"],"Your keyphrase is too long. It can be a maximum of 191 characters.":["العبارة الرئيسية الخاصة بك طويلة جدًا. يمكن أن يكون الحد الأقصى لعدد الأحر٠191 حرÙًا."],"Add as related keyphrase":["أض٠عبارة Ù…ÙØªØ§Ø­ ذات صلة"],"Added!":["تمت Ø§Ø¶Ø§ÙØªÙ‡!"],"Remove":["حذÙ"],"Table of contents":["جدول المحتويات"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["نحتاج إلى تحسين بيانات SEO ÙÙŠ موقعك حتى نتمكن من تقديم Ø£ÙØ¶Ù„ %1$sربط للاقتراحات%2$s.\n%3$sابدأ تحسين بيانات SEO%4$s"],"Create a Zap in %s":["انشاء zap ÙÙŠ %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-bn_BD.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-bn_BD.json new file mode 100644 index 00000000..3647366a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-bn_BD.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"bn_BD"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":[],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":[],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":[],"Social preview":[],"Desktop result":[],"Mobile result":[],"Apply %s description":[],"Apply %s title":[],"Next":[],"Previous":[],"Generate 5 more":[],"Google preview":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":[],"%1$sKeyphrase distribution%2$s: Good job!":[],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":[],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":[],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":[],"Meta tags":[],"Not available":[],"Checks":[],"Focus Keyphrase":[],"Good":[],"No index":[],"Front-end SEO inspector":[],"Focus keyphrase not set":[],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":[],"Reset API key":[],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[],"Your API key":[],"Go to your %s dashboard":[],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[],"Your %s dashboard":[],"Verify connection":[],"Verify your connection":[],"Create a Zap":[],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[],"%s API key":[],"You'll need this API key later on in %s when you're setting up your Zap.":[],"Copy your API key":[],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[],"Manage %s settings":[],"Connect to %s":[],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":[],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":[],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":[],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":[],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":[],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":[],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":[],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":[],"Yoast Table of Contents":[],"Yoast Related Links":[],"Finish optimizing":[],"You've finished adding links to this article.":[],"Optimize":[],"Added to next step":[],"Choose cornerstone articles...":[],"Loading data...":[],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":[],"Skipped":[],"Hidden from search engines.":[],"Removed":[],"Improved":[],"Resolution":[],"Loading redirect options...":[],"Remove and redirect":[],"Custom url:":[],"Related article:":[],"Home page:":[],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":[],"SEO Workout: Remove article":[],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":[],"Hide from search engines":[],"Improve":[],"Are you sure you wish to hide this article from search engines?":[],"Action":[],"You've hidden this article from search engines.":[],"You've removed this article.":[],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":[],"Loading link suggestions...":[],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":[],"Skip":[],"You haven't selected any articles for this step yet. You can do so in the previous step.":[],"Is it up-to-date?":[],"Last Updated":[],"You've moved this article to the next step.":[],"Unknown":[],"Clear summary":[],"Add internal links towards your orphaned articles.":[],"Should you update your article?":[],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":[],"Start: Love it or leave it?":[],"Clean up your unlinked content to make sure people can find it":[],"I've finished this workout":[],"Reset this workout":[],"Well done!":[],"Add internal links towards your cornerstones":[],"Check the number of incoming internal links of your cornerstones":[],"Start: Choose your cornerstones!":[],"The cornerstone approach":[],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":[],"Revise this step":[],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":[],"Incoming links":[],"Edit to add link":[],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":[],"Focus keyphrase":[],"Article":[],"Readability score":[],"SEO score":[],"Copy failed":[],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":[],"Rank with articles you want to rank with":[],"Descriptive text":["বরà§à¦£à¦¨à¦¾à¦®à§‚লক লেখা"],"Show the descriptive text":["বরà§à¦£à¦¨à¦¾à¦®à§‚লক লেখা পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করà§à¦¨"],"Show icon":["আইকন দেখান"],"Yoast Estimated Reading Time":["Yoast আনà§à¦®à¦¾à¦¨à¦¿à¦• পড়ার সময়"],"Shows an estimated reading time based on the content length.":["লেখার দৈরà§à¦˜à§à¦¯à§‡à¦° ওপর ভিতà§à¦¤à¦¿ করে à¦à¦•টি আনà§à¦®à¦¾à¦¨à¦¿à¦• পড়ার সময় দেখান।"],"reading time":["পড়তে সময় লাগবে"],"content length":["লেখার দৈরà§à¦˜à§à¦¯"],"Estimated reading time:":["আনà§à¦®à¦¾à¦¨à¦¿à¦• সময় লাগবে পড়তে:"],"minute":["মিনিট","মিনিট"],"Settings":["সেটিংস "],"OK":["ঠিক আছে"],"Close":["বনà§à¦§"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["সতà§à¦¯à¦¿à¦•ারের পà§à¦°à¦¥à¦® ওয়ারà§à¦¡à¦ªà§à¦°à§‡à¦¸à§‡à¦° à¦à¦•ের-মধà§à¦¯à§‡-সব à¦à¦¸à¦‡à¦“ সমাধান, যার মধà§à¦¯à§‡ অনà§à¦¤à¦°à§à¦­à§à¦•à§à¦¤ পৃষà§à¦ à¦¾à¦° বিষয়বসà§à¦¤à§ বিশà§à¦²à§‡à¦·à¦£, à¦à¦•à§à¦¸à¦à¦®à¦à¦² সাইটমà§à¦¯à¦¾à¦ª ও আরও অনেক কিছà§à¥¤"],"Type":["পà§à¦°à¦•ার"],"Team Yoast":["Yoast দল"],"Orphaned content":["সংযোগহীন লেখা"],"Synonyms":["সমারà§à¦¥à¦• শবà§à¦¦"],"Internal linking suggestions":["অভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ লিংক পরামরà§à¦¶"],"Enter a related keyphrase to calculate the SEO score":["à¦à¦¸à¦‡à¦“ সà§à¦•োর হিসাব করতে à¦à¦•টি পà§à¦°à¦¾à¦¸à¦™à§à¦—িক কিফà§à¦°à§‡à¦‡à¦œ দিন।"],"Related keyphrase":["পà§à¦°à¦¾à¦¸à¦™à§à¦—িক মূলশবà§à¦¦"],"Add related keyphrase":["পà§à¦°à¦¾à¦¸à¦™à§à¦—িক কিফà§à¦°à§‡à¦‡à¦œ যà§à¦•à§à¦¤ করà§à¦¨"],"Analysis results":["বিশà§à¦²à§‡à¦·à¦£à§‡à¦° ফলাফল"],"Help on choosing the perfect keyphrase":["যথাযথ কিফà§à¦°à§‡à¦‡à¦œ নিরà§à¦§à¦¾à¦°à¦£ করতে সহায়তা করà§à¦¨"],"Help on keyphrase synonyms":["মূলশবà§à¦¦à§‡à¦° সমারà§à¦¥à¦• শবà§à¦¦à§‡à¦° জনà§à¦¯ সহায়তা করà§à¦¨"],"Keyphrase":["মূলশবà§à¦¦"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast à¦à¦¸à¦‡à¦“ পà§à¦°à¦¿à¦®à¦¿à§Ÿà¦¾à¦®"],"New URL: {{link}}%s{{/link}}":["নতà§à¦¨ ইউআরà¦à¦²: {{link}}%s{{/link}}"],"Undo":["পূরà§à¦¬à¦¾à¦¬à¦¸à§à¦¥à¦¾à§Ÿ নিন"],"Redirect created":["পà§à¦¨à¦ƒà¦¨à¦¿à¦°à§à¦¦à§‡à¦¶ তৈরি করা হয়েছে"],"%s just created a redirect from the old URL to the new URL.":["%s পà§à¦°à¦¨à§‹ ইউআরà¦à¦² থেকে নতà§à¦¨ ইউআরà¦à¦²-à¦à¦° পà§à¦¨à¦ƒà¦¨à¦¿à¦°à§à¦¦à§‡à¦¶ তৈরি করা হয়েছে।"],"Old URL: {{link}}%s{{/link}}":["পà§à¦°à¦¨à§‹ ইউআরà¦à¦²: {{link}}%s{{/link}}"],"Keyphrase synonyms":["মূলশবà§à¦¦à§‡à¦° সমারà§à¦¥à¦• শবà§à¦¦à¦¸à¦®à§‚হ"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["à¦à¦¸à¦‡à¦“"],"internal linking":["অভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ সংযোগ"],"site structure":["সাইট কাঠামো"],"We could not find any relevant articles on your website that you could link to from your post.":["আমরা আপনার ওয়েবসাইটে à¦à¦®à¦¨ কোনো পà§à¦°à¦¾à¦¸à¦™à§à¦—িক লেখা খà§à¦à¦œà§‡ পাইনি যা à¦à¦‡ লেখায় লিংক হিসেবে বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যায়।"],"Load suggestions":["পরামরà§à¦¶à¦¸à¦®à§‚হ চালৠকরà§à¦¨"],"Refresh suggestions":["পরামরà§à¦¶à¦¸à¦®à§‚হ রিফà§à¦°à§‡à¦¶ করà§à¦¨"],"Write list…":["তালিকা তৈরি করà§à¦¨..."],"Adds a list of links related to this page.":["à¦à¦‡ পৃষà§à¦ à¦¾à¦° সাথে সমà§à¦ªà¦°à§à¦•িত লিংকসমূহের তালিকা যোগ করà§à¦¨à¥¤"],"related posts":["à¦à¦‡ সমà§à¦ªà¦°à§à¦•িত লেখাসমূহ"],"related pages":["à¦à¦‡ সমà§à¦ªà¦°à§à¦•িত পৃষà§à¦ à¦¾à¦¸à¦®à§‚হ"],"Adds a table of contents to this page.":["à¦à¦‡ পৃষà§à¦ à¦¾à§Ÿ সূচিপতà§à¦° যোগ করà§à¦¨à¥¤"],"links":["লিংকসমূহ"],"toc":["টিওসি"],"Copy link":["লিংক কপি করà§à¦¨"],"Copy link to suggested article: %s":["পরামরà§à¦¶à¦•ৃত লেখায় সংযোগ কপি করà§à¦¨: %s"],"Add a title to your post for the best internal linking suggestions.":["সবচেয়ে ভালো সংযোগ পরামরà§à¦¶à§‡à¦° জনà§à¦¯ আপনি à¦à¦•টি শিরোনাম আপনার লেখায় যà§à¦•à§à¦¤ করà§à¦¨à¥¤"],"Add a metadescription to your post for the best internal linking suggestions.":["সবচেয়ে ভালো সংযোগ পরামরà§à¦¶à§‡à¦° জনà§à¦¯ আপনি মেটাতথà§à¦¯ আপনার লেখায় যà§à¦•à§à¦¤ করà§à¦¨à¥¤"],"Add a title and a metadescription to your post for the best internal linking suggestions.":["পাশাপাশি, সবচেয়ে ভালো সংযোগ পরামরà§à¦¶à§‡à¦° জনà§à¦¯ আপনি à¦à¦•টি শিরোনাম ও মেটাতথà§à¦¯ আপনার লেখায় যà§à¦•à§à¦¤ করà§à¦¨à¥¤"],"Also, add a title to your post for the best internal linking suggestions.":["পাশাপাশি, সবচেয়ে ভালো সংযোগ পরামরà§à¦¶à§‡à¦° জনà§à¦¯ আপনি à¦à¦•টি শিরোনাম আপনার লেখায় যà§à¦•à§à¦¤ করà§à¦¨à¥¤"],"Also, add a metadescription to your post for the best internal linking suggestions.":["পাশাপাশি, সবচেয়ে ভালো সংযোগ পরামরà§à¦¶à§‡à¦° জনà§à¦¯ আপনি মেটাতথà§à¦¯ আপনার লেখায় যà§à¦•à§à¦¤ করà§à¦¨à¥¤"],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["পাশাপাশি, সবচেয়ে ভালো সংযোগ পরামরà§à¦¶à§‡à¦° জনà§à¦¯ আপনি মেটাতথà§à¦¯ আপনার লেখায় যà§à¦•à§à¦¤ করà§à¦¨à¥¤"],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["আপনি যদি আরও কিছৠঅংশ কপি করেন তাহলে আমরা à¦à¦‡ লেখার সমà§à¦ªà¦°à§à¦•িত অনà§à¦¯à¦¾à¦¨à§à¦¯ লেখার তালিকা দিতে পারবো যা আপনি আপনার লেখায় যà§à¦•à§à¦¤ করতে পারবেন।"],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["আপনার ওয়েবসাইটের কাঠামোর উনà§à¦¨à¦¤à¦¿à¦° জনà§à¦¯ আপনার ওয়েবসাইটের অনà§à¦¯à¦¾à¦¨à§à¦¯ পà§à¦°à¦¾à¦¸à¦™à§à¦—িক লেখা বা পৃষà§à¦ à¦¾à¦•ে সংযà§à¦•à§à¦¤ করà§à¦¨à¥¤"],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["আপনি যেখানে লিংক করেছেন সেখানে পà§à¦°à¦¾à¦¸à¦™à§à¦—িক লেখার তালিকা দেখাতে কয়েক মিনিট সময় লাগতে পারে। যতো দà§à¦°à§à¦¤ সমà§à¦­à¦¬ সà§à¦ªà¦¾à¦°à¦¿à¦¶à¦—à§à¦²à§‹ à¦à¦–ানে দেখানো হবে। "],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ জানার জনà§à¦¯ {{a}}আমাদের à¦à¦¸à¦‡à¦“র অভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ সংযোগ গাইডটি পড়à§à¦¨{{/a}}।"],"Copied!":["কপি করা হয়েছে!"],"Not supported!":["সমরà§à¦¥à¦¨ করে না!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["আপনি কি à¦à¦•াধিক পà§à¦°à¦¾à¦¸à¦™à§à¦—িক কিফà§à¦°à§‡à¦‡à¦œ বà§à¦¯à¦¬à¦¹à¦¾à¦° করতে চেষà§à¦Ÿà¦¾ করছেন? সেগà§à¦²à§‹à¦•ে আলাদা আলাদা করে দেখাতে হবে।"],"Your keyphrase is too long. It can be a maximum of 191 characters.":["আপনার কিফà§à¦°à§‡à¦‡à¦œ অনেক বড়। à¦à¦Ÿà¦¿ সরà§à¦¬à§‹à¦šà§à¦š ১৯১ কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° হবে।"],"Add as related keyphrase":["পà§à¦°à¦¾à¦¸à¦™à§à¦—িক কিফà§à¦°à§‡à¦‡à¦œ হিসেবে যà§à¦•à§à¦¤ করà§à¦¨"],"Added!":["যà§à¦•à§à¦¤ করা হয়েছে!"],"Remove":["মà§à¦›à§à¦¨"],"Table of contents":["সূচিপতà§à¦°"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["আপনাকে সরà§à¦¬à§‹à¦šà§à¦šà¦Ÿà§à¦•ৠসহায়তা করতে আপনার সাইটের à¦à¦¸à¦‡à¦“ তথà§à¦¯ অপটিমাইজ করতে হবে আমাদের। %1$sলিংকের সà§à¦ªà¦¾à¦°à¦¿à¦¶%2$s।\n\n%3$sà¦à¦¸à¦‡à¦“ ডেটা অপটিমাইজেশন শà§à¦°à§ করà§à¦¨%4$s"],"Create a Zap in %s":["%s-à¦à¦¤à§‡ জà§à¦¯à¦¾à¦ª তৈরি করà§à¦¨à¥¤"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ca.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ca.json new file mode 100644 index 00000000..90e9fda3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ca.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"ca"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["La resposta ha tornat amb el següent error: \"%s\""],"X share preview":["Previsualització de la compartició a X"],"AI X title generator":["Generador de títols de X per IA"],"AI X description generator":["Generador de descripcions de X per IA"],"X preview":["Previsualització a Twitter"],"Please enter a valid focus keyphrase.":["Introduïu una frase clau de focus vàlida."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Per utilitzar aquesta característica, el vostre lloc ha de ser accessible públicament. Això s'aplica tant als llocs de prova com a les instàncies on l'API REST està protegida amb contrasenya. Assegureu-vos que el vostre lloc és accessible al públic i torneu-ho a provar. Si el problema persisteix, %1$scontacteu amb el nostre equip de suport%2$s."],"Yoast AI cannot reach your site":["Yoast AI no pot accedir al vostre lloc web"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Per accedir a aquesta funció, necessiteu una subscripció activa a %2$s i %3$s. %5$sActiveu la vostra subscripció a %1$s%6$s o %7$sobtingueu una nova subscripció %4$s%8$s. Després, actualitzeu aquesta pàgina perquè la característica funcioni correctament, la qual cosa pot trigar fins a 30 segons."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["El generador de títols d'IA requereix que l'anàlisi SEO estigui habilitat abans d'utilitzar-lo. Per activar-lo, navegueu a les %2$sfuncions del lloc a %1$s%3$s, habiliteu l'anàlisi SEO i feu clic a \"Desa els canvis\". Si l'anàlisi SEO està desactivat a través del vostre perfil d'usuari, navegueu fins al vostre perfil i activeu-lo allà. Contacteu amb l'administrador si no teniu accés a aquests paràmetres."],"Social share preview":["Vista prèvia de la compartició social"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Per a continuar utilitzant la característica IA del Yoast, reduïu la freqüència de les vostres peticions. El nostre %1$sarticle d'ajuda%2$s proporciona orientació sobre la planificació efectiva i l'ajust de les vostres peticions per a un flux de treball optimitzat."],"You've reached the Yoast AI rate limit.":["Heu arribat al límit de la taxa d'intel·ligència artificial del Yoast."],"Allow":["Permet"],"Deny":["Denega"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Per veure aquest vídeo, heu de permetre que %1$s carregui vídeos incrustats de %2$s."],"Text generated by AI may be offensive or inaccurate.":["El text generat per la IA pot ser ofensiu o inexacte."],"(Opens in a new browser tab)":["(S'obre en una nova pestanya del navegador)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Accelereu el flux de treball amb IA generativa. Obteniu suggeriments de descripció i títol d'alta qualitat per a la vostra cerca i aparença social. %1$sMés informació%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Genera descripcions de títols amb Yoast AI!"],"New to %1$s":["Nou a %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Aprovo les %1$sPolítiques de Servei%2$s %3$sPolítica de Privadesa%4$s del servei d'intel·ligència artificial de Yoast. Això inclou el consentiment per a la recopilació i l'ús de dades per millorar l'experiència de l'usuari."],"Start generating":["Inicia la generació"],"Yes, revoke consent":["Sí, revoca el consentiment"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Revocant el vostre consentiment, ja no tindreu accés a les funcions d'IA del Yoast. Segur que voleu revocar el vostre consentiment?"],"Something went wrong, please try again later.":["Alguna cosa ha anat malament, torneu-ho a provar més tard."],"Revoke AI consent":["Revoca el consentiment de la IA"],"AI title generator":["Generador del títol per IA"],"AI description generator":["Generador de la descripció per IA"],"AI social title generator":["Generador de títols socials per IA"],"AI social description generator":["Generador de la descripció social per IA"],"Dismiss":["Descarta"],"Don’t show again":["No tornis a mostrar"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sRecomanació%2$s: Milloreu la precisió dels títols generats per IA escrivint més contingut a la pàgina."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sRecomanació%2$s: Milloreu la precisió de les descripcions d'IA generades escrivint més contingut a la pàgina."],"Try again":["Prova de nou"],"Social preview":["Previsualització social"],"Desktop result":["Resultat a l'escriptori"],"Mobile result":["Resultat al mòbil"],"Apply %s description":[],"Apply %s title":[],"Next":["Següent"],"Previous":["Anterior"],"Generate 5 more":["Genera 5 més"],"Google preview":["Vista prèvia del Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["A causa de les estrictes directrius ètiques de l'OpenAI i les %1$spolítiques d'ús%2$s, no podem generar títols SEO per a la vostra pàgina. Si teniu la intenció d'utilitzar IA, eviteu l'ús de contingut explícit, violent o sexualment explícit. %3$sLlegiu més sobre com configurar la pàgina per assegurar-vos que obteniu els millors resultats amb la IA%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["A causa de les estrictes directrius ètiques de l'OpenAI i les %1$spolítiques d'ús%2$s, no podem generar metadescripcions per a la vostra pàgina. Si teniu la intenció d'utilitzar IA, eviteu l'ús de contingut explícit, violent o sexualment explícit. %3$sLlegiu més sobre com configurar la pàgina per assegurar-vos que obteniu els millors resultats amb la IA%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Per accedir a aquesta funció, necessiteu una subscripció activa %1$s. %3$sactiveu la vostra subscripció a %2$s%4$s o %5$sobtingueu una nova subscripció %1$s%6$s. Després, feu clic al botó per actualitzar aquesta pàgina perquè la característica funcioni correctament, el qual pot trigar fins a 30 segons."],"Refresh page":["Actualitza la pàgina"],"Not enough content":["No hi ha prou contingut"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Torneu-ho a provar més tard. Si la incidència persisteix, %1$scontacteu el nostre equip de suport%2$s!"],"Something went wrong":["Alguna cosa ha anat malament"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Sembla que s'ha esgotat el temps d'espera de la connexió. Comproveu la connexió a Internet i torneu-ho a provar més tard. Si la incidència persisteix, %1$scontacteu el nostre equip de suport%2$s"],"Connection timeout":["Temps d'espera de la connexió"],"Use AI":["Utilitza la IA"],"Close modal":["Tanca la finestra"],"Learn more about AI (Opens in a new browser tab)":["Més informació sobre la IA (s'obre en una pestanya nova del navegador)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTítol%3$s: La pàgina encara no té títol. %2$sAfegiu-ne un%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTítol%2$s: La pàgina té títol. Ben fet!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribució de la frase clau%3$s %2$sIncloeu la vostra frase clau o sinònims al text de manera que puguem comprovar la distribució de frases clau%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribució de la frase clau%2$s: bona feina!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribució de la frase clau%3$s: Desigual. Algunes parts del text no contenen la frase clau ni els seus sinònims. %2$sDistribuïu-los de manera més uniforme%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribució de frases clau%3$s: Molt desigual. Grans parts del text no contenen la frase clau o els seus sinònims. %2$sDistribuïu-les de manera més uniforme%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: No utilitzeu massa paraules complexes, el qual facilita la lectura del text. Bona feina!"],"Word complexity":["Complexitat de les paraules"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s de les paraules del text es consideren complexes. %3$sFeu servir paraules més curtes i familiars per millorar la llegibilitat%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlineament%3$s: Hi ha una secció llarga amb text centrat. %2$sRecomanem alinear-lo a l'esquerra%3$s.","%1$sAlineament%3$s: Hi ha %4$s seccions llargues amb text centrat. %2$sRecomanem alinear-lo a l'esquerra%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlineament%3$s: Hi ha una secció llarga amb text centrat. %2$sRecomanem alinear-lo a la dreta%3$s.","%1$sAlineament%3$s: Hi ha %4$s seccions llargues amb text centrat. %2$sRecomanem alinear-les a la dreta%3$s."],"Select image":["Seleccioneu una imatge"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Potser ni ho sabeu, però poden haver-hi pàgines al vostre lloc que no tenen cap enllaç. Això és un problema de SEO, però és difícil per als motors de cerca trobar pàgines que no reben cap enllaç. Així, és més complicat que s'indexin correctament. Anomenem aquestes pàgines contingut orfe. En aquest entrenament, trobarem contingut orfe del vostre lloc i us guiarem en com afegir enllaços cap a ell, per tal que tinguen l'oportunitat de ser indexades."],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["És l'hora d'afegir alguns enllaços. A baix, trobareu una llista dels articles orfes. Baix de cadascun, hi ha suggeriments per a pàgines relacionades de les quals podeu afegir enllaços. Quan afegiu l'enllaç, assegureu-vos de fer-ho en una frase rellevant a l'article orfe. Continueu afegint enllaços per a cadascun dels articles orfes fins que estigueu satisfet amb la quantitat d'enllaços que hi apunten."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["És l'hora d'afegir enllaços! Baix podeu veure una llista amb el contingut fonamental. Baix de cada peça de contingut, hi ha suggeriments per a articles dels quals podríeu afegir un enllaç. Quan l'afegiu, assegureu-vos de fer-ho en una frase rellevant a l'article fonamental. Continueu afegint enllaços des de tants articles relacionats com vulgueu, fins que els articles fonamentals tinguen la majoria d'enllaços interns apuntant a ells."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Alguns articles al vostre lloc web són %1$sels%2$smés importants. Responen a les preguntes de la gent i solucionen els seus problemes. Aleshores, mereixen estar ben posicionats! A %3$s, els anomenem articles fonamentals. Una de les maneres de posicionar-los és apuntar-los amb prou enllaços. Més enllaços indiquen als motors de cerca que els articles són importants i valuosos. En aquesta tasca, us ajudarem a afegir articles fonamentals."],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Quan afegiu una mica més de contingut, serem capaços d'informar-vos del nivell de formalitat del text."],"Overall, your text appears to be %1$s%3$s%2$s.":["En resum, el text pareix %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["La integració amb Zappier s'eliminarà de %1$s en la versió 20.7 (data de llançament 9 de maig). Si teniu preguntes, poseu-vos en contacte amb nosaltres a %2$s."],"Maximum heading level":["Nivell màxim de capçalera"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Heu deshabilitat els suggeriments dels enllaços, que és necessari perquè funcionin els enllaços relacionats. Si voleu afegir enllaços relacionats, aneu a Funcionalitats del lloc i habiliteu els suggeriments d'enllaços."],"Schema":["Esquema"],"Meta tags":["Etiquetes meta"],"Not available":["No està disponible"],"Checks":["Comprovacions"],"Focus Keyphrase":["Frase clau objectiu"],"Good":["Bo"],"No index":["No index"],"Front-end SEO inspector":["Inspector SEO de la interfície"],"Focus keyphrase not set":["No s'ha definit la frase clau objectiu"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Una vegada publicat el vostre Zap al tauler de %s, podeu comprovar si està actiu i comprovat al vostre lloc."],"Reset API key":["Reinicia la clau API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Esteu connectat a %s utilitzant la següent clau API. Si voleu reconnectar-vos amb una clau API diferent podeu restablir la clau baix."],"Your API key":["La vostra clau API"],"Go to your %s dashboard":["Aneu al tauler del %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["S'heu connectat correctament amb %1$s. Per gestionar el vostre Zap, visiteu el tauler del %2$s."],"Your %s dashboard":["El vostre tauler del %s"],"Verify connection":["Comproveu la connexió"],"Verify your connection":["Comproveu la connexió"],"Create a Zap":["Crea un Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Identifiqueu-vos al vostre compte del %1$s i comenceu a crear el primer Zap! Tingueu en compte que només podeu crear 1 Zap amb un esdeveniment llançador des del %2$s. Amb aquest Zap podeu triar una o més accions."],"%s API key":["Clau API del %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Necessiteu aquesta clau API després al %s quan estigueu configurant el vostre Zap."],"Copy your API key":["Copieu la clau API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Per a configurar la connexió, assegureu-vos que copieu la clau API mostrada baix i utilitzeu-la per a crear i engegar un Zap al vostre compte de %s."],"Manage %s settings":["Gestioneu els paràmetres del %s"],"Connect to %s":["Connecta al %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Tingueu en compte: Perquè aquest entrenament funcioni bé, heu d'executar l'eina d'optimització de dades SEO. Els administradors poden executar això sota %1$sSEO > Eines%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Heu afegit enllaços als vostres articles orfes i heu netejat els que no eren rellevants. Bona feina! Ara doneu ullada al resum que hi ha a continuació i celebra l'aconseguit!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Examineu de forma crítica el contingut d'aquesta llista i feu les actualitzacions necessàries. Si necessiteu ajuda actualitzant, tenim una %1$sentrada al blog molt útil que pot guiar-vos completament%2$s (feu clic per a obrir-lo en una pestanya nova)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sNecessiteu més orientació? Hem cobert cada pas amb més detalls a la guia %2$sCom utilitzar %7$s per exercicis de contingut orfe%3$s%4$s%5$s%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Acabeu de fer el millor contingut fàcil de trobar, i més probable d'indexar-se bé! Així és! De tant en tant, recordeu comprovar si el vostre contingut fonamental té prou enllaços!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Mireu la llista inferior. Té el vostre contingut fonamental (marcat amb %1$s) la quantitat més gran d'enllaços interns apuntant cap a ell? Feu clic al botó \"Optimitza\" si penseu que algun article necessita més enllaços. Això mourà l'article al pròxim pas."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Tenen la bombeta verda tots els articles de contingut fonamental? Per a obtenir els millors resultats, considereu editar els que no."],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Amb quins articles voleu situar-vos al més alt? Quins són els que la vostra audiència trobarà més complets i útils? Feu clic a la fletxa apuntant cap avall i cerqueu articles que encaixen amb eixe criteri. Marcarem automàticament els articles que seleccioneu com a contingut fonamental."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sNecessiteu més ajuda? Hem cobert cada pas en més detall a %2$sCom utilitzar l'exercici de contingut fonamental del %7$s%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Taula de continguts del Yoast"],"Yoast Related Links":["Enllaços relacionats del Yoast"],"Finish optimizing":["Acabeu l'optimització"],"You've finished adding links to this article.":["Heu acabat d'afegir enllaços a aquest article."],"Optimize":["Optimitza"],"Added to next step":["Afegit al següent pas"],"Choose cornerstone articles...":["Trieu els articles fonamentals..."],"Loading data...":["S'estan carregant les dades..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Encara no heu netejat ni actualitzat cap article utilitzant aquest resum. Un cop ho feu, apareixerà un resum del vostre treball aquí."],"Skipped":["Omesos"],"Hidden from search engines.":["Ocult dels motors de cerca."],"Removed":["Eliminada"],"Improved":["Millorat"],"Resolution":["Resolució"],"Loading redirect options...":["S'estan carregant les opcions de redirecció..."],"Remove and redirect":["Suprimeix i redirecciona"],"Custom url:":["URL personalitzat:"],"Related article:":["Article relacionat:"],"Home page:":["Pàgina d'inici:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Esteu a punt d'eliminar %1$s%2$s%3$s. Per evitar 404 al vostre lloc, heu de redirigir-lo a una altra pàgina. On voleu redirigir-la?"],"SEO Workout: Remove article":["Treball SEO: Elimina l'article"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Tot està molt bé! No hem trobat cap article al vostre lloc que tingui més de sis mesos i que rebi massa pocs enllaços. Torneu aquí més tard per a obtenir suggeriments de neteja nous!"],"Hide from search engines":["Oculta dels motors de cerca"],"Improve":["Millora"],"Are you sure you wish to hide this article from search engines?":["Esteu segur que voleu amagar aquest article dels motors de cerca?"],"Action":["Acció"],"You've hidden this article from search engines.":["Heu amagat aquest article als motors de cerca."],"You've removed this article.":["Heu eliminat aquest article."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Actualment no heu seleccionat cap article per millorar. Seleccioneu alguns articles orfes en els passos anteriors per afegir enllaços i us mostrarem suggeriments d'enllaç aquí."],"Loading link suggestions...":["S'estan carregant els suggeriments d'enllaços..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["No hem trobat cap suggeriment per a aquest article, però, per descomptat, encara podeu afegir enllaços a articles que penseu que estan relacionats."],"Skip":["Salta"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Encara no heu seleccionat cap article per a aquest pas. Pot fer-ho en el pas anterior."],"Is it up-to-date?":["Està actualitzat?"],"Last Updated":["Darrera actualització"],"You've moved this article to the next step.":["Heu mogut aquest article al següent pas."],"Unknown":["Desconegut"],"Clear summary":["Neteja el resum"],"Add internal links towards your orphaned articles.":["Afegiu enllaços interns als vostres articles orfes."],"Should you update your article?":["Hauríeu d'actualitzar el vostre article?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["El vostre lloc pot contenir molts continguts que s'han creat una vegada i mai s'han tornat a mirar des d'aquell moment. És important revisar-los i preguntar-vos si aquest contingut encara és rellevant per al vostre lloc. Hauria de millorar-la o eliminar-la?"],"Start: Love it or leave it?":["Comença: l'estimeu o l'abandoneu?"],"Clean up your unlinked content to make sure people can find it":["Neteja el contingut no enllaçat per assegurar-vos que la gent el pot trobar"],"I've finished this workout":["He acabat la feina"],"Reset this workout":["Restableix aquesta feina"],"Well done!":["Ben fet!"],"Add internal links towards your cornerstones":["Afegeix enllaços interns als articles fonamentals."],"Check the number of incoming internal links of your cornerstones":["Comproveu el nombre d'enllaços interns entrants als articles fonamentals"],"Start: Choose your cornerstones!":["Inici: Trieu el vostre contingut fonamental!"],"The cornerstone approach":["L'enfocament de la pedra angular"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Tingueu en compte: Perquè aquest entrenament funcioni bé i per oferir-vos enllaçar suggeriments, heu d'executar l'eina d'optimització de dades SEO. Els administradors poden executar això sota %1$sSEO > Eines%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Atenció: L'administrador ha desactivat la funcionalitat de contingut fonamental als paràmetres de SEO. Si voleu fer aquest entrenament, s'ha d'activar."],"I've finished this step":["He acabat aquest pas"],"Revise this step":["Revisa aquest pas"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["No hem pogut trobar enllaços interns a les vostres pàgines. O encara no heu afegit cap enllaç intern al vostre contingut, o Yoast SEO no els ha indexat. Podeu fer que Yoast SEO indexi els vostres enllaços executant l'optimització de dades SEO sota les SEO > Eines."],"Incoming links":["Enllaços entrants"],"Edit to add link":["Editeu per afegir un enllaç"],"%s incoming link":["%1$s enllaç entrant","%1$s enllaços entrants"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Actualment no teniu cap article marcat com a fonamental. Quan marqueu els articles com a contingut fonamental, es mostraran aquí."],"Focus keyphrase":["Frase clau objectiu"],"Article":["Article"],"Readability score":["Puntuació de llegibilitat"],"SEO score":["Puntuació SEO"],"Copy failed":["La còpia ha fallat"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Millora la classificació per a tot el contingut fonamental mitjançant l'ús d'aquest %1$stasca gradual!%2$s"],"Rank with articles you want to rank with":["Ordena amb articles amb els quals voleu classificar"],"Descriptive text":["Text descriptiu"],"Show the descriptive text":["Mostra el text descriptiu"],"Show icon":["Mostra la icona"],"Yoast Estimated Reading Time":["Temps de lectura estimat de Yoast"],"Shows an estimated reading time based on the content length.":["Mostra un temps de lectura estimat basat en la longitud del contingut."],"reading time":["temps de lectura"],"content length":["longitud del contingut"],"Estimated reading time:":["Temps de lectura estimat:"],"minute":["minut","minuts"],"Settings":["Paràmetres"],"OK":["D'acord"],"Close":["Tanca"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["La primera solució SEO realment tot en un per a WordPress, incloent-hi anàlisi del contingut de la pàgina, mapes del lloc XML i molt més."],"Type":["Tipus"],"Team Yoast":["Equip Yoast"],"Orphaned content":["Contingut orfe"],"Synonyms":["Sinònims"],"Internal linking suggestions":["suggeriments d'enllaços interns"],"Enter a related keyphrase to calculate the SEO score":["Introduïu una frase clau per a calcular la puntuació SEO"],"Related keyphrase":["Paraula clau relacionada"],"Add related keyphrase":["Afegeix una frase clau relacionada"],"Analysis results":["Resultats de l'anàlisi:"],"Help on choosing the perfect keyphrase":["Ajuda triant la frase clau perfecta"],"Help on keyphrase synonyms":["Ajuda amb els sinònims de frases clau"],"Keyphrase":["Frase clau"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["URL nou:{{link}}%s{{/link}}"],"Undo":["Desfés"],"Redirect created":["S'ha creat una redirecció"],"%s just created a redirect from the old URL to the new URL.":["%s acaba de crear una redirecció des de l'URL vell cap a l'URL nou."],"Old URL: {{link}}%s{{/link}}":["URL vell: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinònims de frases clau"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["S'ha produït un error: l'anàlisi SEO Prèmium no està funcionant com s'esperava. {{activateLink}}activeu la vostra subscripció a MyYoast{{/activateLink}} i després {{reloadButton}}recarregueu aquesta pàgina{{/reloadButton}} per a fer-la funcionar com cal."],"seo":["seo"],"internal linking":["enllaç intern"],"site structure":["estructura del lloc"],"We could not find any relevant articles on your website that you could link to from your post.":["No hem pogut trobar cap article rellevant a la pàgina web que pugui enllaçar des de l'entrada."],"Load suggestions":["Carrega els suggeriments"],"Refresh suggestions":["Refresca els suggeriments"],"Write list…":["Escriviu la llista..."],"Adds a list of links related to this page.":["Afegeix una llista d'enllaços relacionats amb aquesta pàgina."],"related posts":["entrades relacionades"],"related pages":["pàgines relacionades"],"Adds a table of contents to this page.":["Afegeix una taula de continguts a aquesta pàgina."],"links":["enllaços"],"toc":["taula de continguts"],"Copy link":["Copia l'enllaç"],"Copy link to suggested article: %s":["Copia l'enllaç a l'article suggerit: %s"],"Add a title to your post for the best internal linking suggestions.":["Afegiu un títol a la vostra entrada per als millors suggeriments d'enllaços interns."],"Add a metadescription to your post for the best internal linking suggestions.":["Afegiu una descripció de la vostra entrada per als millors suggeriments d'enllaços interns."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Afegiu un títol i una descripció de la vostra entrada per als millors suggeriments d'enllaços interns."],"Also, add a title to your post for the best internal linking suggestions.":["A més, afegiu un títol a la vostra entrada per als millors suggeriments d'enllaços interns."],"Also, add a metadescription to your post for the best internal linking suggestions.":["A més, afegiu una descripció de la vostra entrada per als millors suggeriments d'enllaços interns."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["A més, afegiu un títol i una descripció de la vostra entrada per als millors suggeriments d'enllaços interns."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Una vegada afegiu una mica més de text, us donarem una llista de continguts relacionats als quals podeu enllaçar a la vostra entrada."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Per millorar l'estructura del vostre lloc web, considereu enllaçar altres entrades o pàgines rellevants."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Tarda uns pocs segons a mostrar-vos una llista de contingut relacionat que podríeu enllaçar. Els suggeriments es mostraran aquí tan aviat com els tinguem."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Llegiu la nostra guia sobre els enllaços interns per a SEO{{/a}} per aprendre més."],"Copied!":["S'ha copiat!"],"Not supported!":["No és compatible!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Esteu intentant utilitzar múltiples frases clau relacionades? Heu d'afegir-les per separat."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["La frase clau és massa llarga. Només pot tenir fins a 191 caràcters."],"Add as related keyphrase":["Afegeix com a frase clau relacionada"],"Added!":["S'ha afegit!"],"Remove":["Elimina"],"Table of contents":["Taula de continguts"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Hem d'optimitzar les dades SEO del vostre lloc web per poder oferir-vos els millors %1$ssuggeriments d'enllaços%2$s. %3$sComença l'optimització de dades SEO%4$s"],"Create a Zap in %s":["Crea un Zap a %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-cs_CZ.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-cs_CZ.json new file mode 100644 index 00000000..32dc363d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-cs_CZ.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;","lang":"cs_CZ"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Požadavek se vrátil s následující chybou: \"%s\""],"X share preview":["Náhled sdílení na X"],"AI X title generator":["Generátor AI názvů na X"],"AI X description generator":["Generátor AI popisů na X"],"X preview":["Náhled X"],"Please enter a valid focus keyphrase.":["Zadejte platnou klíÄovou frázi pro zaměření."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Chcete-li tuto funkci používat, musí být váš web veÅ™ejnÄ› přístupný. To platí jak pro testovací weby, tak pro případy, kdy je vaÅ¡e rozhraní REST API chránÄ›no heslem. Zkontrolujte, zda je váš web veÅ™ejnÄ› přístupný, a zkuste to znovu. Pokud problém pÅ™etrvává, obraÅ¥te se na náš tým podpory %1$skontakt%2$s."],"Yoast AI cannot reach your site":["UmÄ›lá inteligence Yoast se na váš web nedostane"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Pro přístup k této funkci potÅ™ebujete aktivní pÅ™edplatné %2$s a %3$s. Prosím %5$saktivujte si pÅ™edplatné v %1$s%6$s nebo %7$szískejte nové %4$s%8$s. Poté obnovte tuto stránku, aby funkce správnÄ› fungovala, což může trvat až 30 sekund."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Generátor názvů AI vyžaduje, aby byla pÅ™ed použitím povolena analýza SEO. Chcete-li ji povolit, pÅ™ejdÄ›te do %2$sFunkce stránky %1$s%3$s, zapnÄ›te SEO analýzu a kliknÄ›te na tlaÄítko \"Uložit zmÄ›ny\". Pokud je SEO analýza ve vaÅ¡em uživatelském profilu ve WordPressu zakázána, pÅ™istupte do svého profilu a povolte ji tam. Pokud nemáte přístup k tÄ›mto nastavením, obraÅ¥te se na svého správce."],"Social share preview":["Náhled sdílení v sociálních sítích"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Chcete-li funkci Yoast AI používat i nadále, snižte frekvenci svých požadavků. Náš Älánek %1$sposkytuje návod%2$s, jak efektivnÄ› plánovat a rozvrhovat požadavky pro optimalizaci pracovního postupu."],"You've reached the Yoast AI rate limit.":["Dosáhli jste limitu rychlosti Yoast AI."],"Allow":["Povolit"],"Deny":["Odmítnout"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Chcete-li zobrazit toto video, musíte povolit %1$s naÄítat vložená videa z %2$s."],"Text generated by AI may be offensive or inaccurate.":["Text generovaný AI může být urážlivý nebo nepÅ™esný."],"(Opens in a new browser tab)":["(OtevÅ™ení v nové záložce)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Zrychlete svůj pracovní postup pomocí generativní AI. Získejte vysoce kvalitní návrhy názvů a popisů pro vyhledávání a vzhled na sociálních sítích. %1$sZjistÄ›te více%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generujte názvy a popisy pomocí Yoast AI!"],"New to %1$s":["Novinka na %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Souhlasím s %1$spodmínky služby%2$s & %3$szásady ochrany osobních údajů%4$s služby Yoast AI. To zahrnuje souhlas se shromažÄováním a používáním údajů za úÄelem zlepÅ¡ení uživatelského komfortu."],"Start generating":["ZaÄnÄ›te generovat"],"Yes, revoke consent":["Ano, odvolání souhlasu"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Odvoláním souhlasu již nebudete mít přístup k funkcím Yoast AI. Jste si jisti, že chcete svůj souhlas odvolat?"],"Something went wrong, please try again later.":["NÄ›co se pokazilo, zkuste to pozdÄ›ji."],"Revoke AI consent":["Odvolání souhlasu AI"],"AI title generator":["Generátor názvů AI"],"AI description generator":["Generátor popisu AI"],"AI social title generator":["Generátor sociálních názvů pÅ™es AI"],"AI social description generator":["Generátor sociálních popisů pÅ™es AI"],"Dismiss":["Zavřít"],"Don’t show again":["Znovu se neukázat"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: ZlepÅ¡ete pÅ™esnost vygenerovaných názvů AI tím, že na stránku napíšete více obsahu."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: ZlepÅ¡ete pÅ™esnost vygenerovaných popisů AI tím, že na stránku napíšete více obsahu."],"Try again":["Zkus to znovu"],"Social preview":["Sociální náhled"],"Desktop result":["na poÄítaÄi"],"Mobile result":["na mobilu"],"Apply %s description":[],"Apply %s title":[],"Next":["Další"],"Previous":["PÅ™edchozí"],"Generate 5 more":["VytvoÅ™it dalších 5"],"Google preview":["Náhled příspÄ›vku v Googlu"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vzhledem k přísným etickým pravidlům a zásadám %1$spoužívání%2$s agentury OpenAI nemůžeme pro vaÅ¡i stránku generovat SEO titulky. Pokud máte v úmyslu používat UI, vyvarujte se používání explicitního, násilného nebo sexuálnÄ› explicitního obsahu. %3$sPÅ™eÄtÄ›te si další informace o tom, jak stránku nakonfigurovat, abyste s AI%4$s dosáhli co nejlepších výsledků."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vzhledem k přísným etickým pravidlům a zásadám %1$spoužívání%2$s agentury OpenAI nemůžeme generovat meta popisy pro vaÅ¡i stránku. Pokud máte v úmyslu používat UI, vyvarujte se používání explicitního, násilného nebo sexuálnÄ› explicitního obsahu. %3$sPÅ™eÄtÄ›te si další informace o tom, jak stránku nakonfigurovat, abyste s AI%4$s dosáhli co nejlepších výsledků."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Pro přístup k této funkci potÅ™ebujete aktivní pÅ™edplatné %1$s. Prosím %3$saktivujte své pÅ™edplatné v %2$s%4$s nebo %5$szískejte nové pÅ™edplatné %1$s%6$s. Poté kliknÄ›te na tlaÄítko pro obnovení této stránky, aby funkce správnÄ› fungovala, což může trvat až 30 sekund."],"Refresh page":["Obnovit stránku"],"Not enough content":["NedostateÄný obsah"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Zkuste to pozdÄ›ji. Pokud problém pÅ™etrvává, %1$skontaktujte náš tým podpory%2$s!"],"Something went wrong":["NÄ›co se pokazilo"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Zdá se, že doÅ¡lo k Äasovému limitu pÅ™ipojení. Zkontrolujte své internetové pÅ™ipojení a zkuste to pozdÄ›ji. Pokud problém pÅ™etrvává, %1$skontaktujte náš tým podpory%2$s"],"Connection timeout":["ÄŒasový limit pÅ™ipojení"],"Use AI":["Použít umÄ›lou inteligneci"],"Close modal":["Zavřít modální"],"Learn more about AI (Opens in a new browser tab)":["Další informace o AI (OtevÅ™e se v nové záložce prohlížeÄe)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sNázev%3$s: VaÅ¡e stránka zatím nemá název. %2$sPÅ™idejte%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sNázev%2$s: VaÅ¡e stránka má název. Dobrá práce!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sVýskyt klíÄových frází%3$s: %2$sVložte vaÅ¡e klíÄové fráze nebo synonyma do textu abychom mohli zkontrolovat Äetnost výskytu fráze%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sRozmístÄ›ní klíÄové fráze%2$s: Dobrá práce!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sRozmístÄ›ní klíÄové fráze%3$s: NerovnomÄ›rné. NÄ›které Äásti textu neobsahují klíÄová slova nebo jejich synonyma. %2$sRozmístÄ›te je rovnomÄ›rnÄ›ji%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sRozmístÄ›ní klíÄové fráze%3$s: Velmi nerovnomÄ›rné. Velké Äásti textu neobsahují klíÄová slova nebo jejich synonyma. %2$sRozmístÄ›te je rovnomÄ›rnÄ›ji%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Nepoužíváte příliÅ¡ mnoho složitých slov, což usnadňuje Ätení textu. Dobrá práce!"],"Word complexity":["Slovní složitost"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s slov ve vaÅ¡em textu jsou považována za složitá. %3$sZkuste používat kratší a známÄ›jší slova ke zlepÅ¡ení Äitelnosti%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sZarovnání%3$s: Je zde dlouhý úsek textu zarovnaného na stÅ™ed. %2$sDoporuÄujeme zarovnat vlevo%3$s.","%1$sZarovnání%3$s: Jsou zde %4$s dlouhé úseky textu zarovnané na stÅ™ed. %2$sDoporuÄujeme je zarovnat vlevo%3$s.","%1$sZarovnání%3$s: Jsou zde %4$s dlouhé úseky textu zarovnané na stÅ™ed. %2$sDoporuÄujeme je zarovnat vlevo%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sZarovnání%3$s: Je zde dlouhý úsek textu zarovnaného na stÅ™ed. %2$sDoporuÄujeme jej zarovnat doprava%3$s.","%1$sZarovnání%3$s: Jsou zde %4$s dlouhé úseky textu zarovnané na stÅ™ed. %2$sDoporuÄujeme je zarovnat doprava%3$s.","%1$sZarovnání%3$s: Jsou zde %4$s dlouhé úseky textu zarovnané na stÅ™ed. %2$sDoporuÄujeme je zarovnat doprava%3$s."],"Select image":["Vybrat obrázek"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Možná o tom ani nevíte, ale na vaÅ¡em webu mohou být stránky, na které nevedou žádné odkazy. To je problém SEO, protože pro vyhledávaÄe je obtížné najít stránky, na které nevedou žádné odkazy. Je tedy pro nÄ› těžší je zaÅ™adit. TÄ›mto stránkám říkáme osiÅ™elý obsah. V tomto tréninku najdeme osiÅ™elý obsah na vaÅ¡em webu a poradíme vám, jak na nÄ›j rychle pÅ™idat odkazy, aby mÄ›l Å¡anci získat pozici!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Je Äas pÅ™idat nÄ›jaké odkazy! Níže vidíte seznam s vaÅ¡imi osiÅ™elými Älánky. Pod každým z nich jsou uvedeny návrhy souvisejících stránek, na které byste mohli pÅ™idat odkaz. PÅ™i pÅ™idávání odkazu se ujistÄ›te, že je vložen do relevantní vÄ›ty související s vaším osiÅ™elým Älánkem. PokraÄujte v pÅ™idávání odkazů na jednotlivé osiÅ™elé Älánky, dokud nebudete spokojeni s množstvím odkazů, které na nÄ› směřují."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Je Äas pÅ™idat nÄ›jaké odkazy! Níže vidíte seznam s vaÅ¡imi základními kameny. Pod každým základním kamenem jsou uvedeny návrhy Älánků, ze kterých byste mohli pÅ™idat odkaz. PÅ™i pÅ™idávání odkazu se ujistÄ›te, že jste ho vložili do relevantní vÄ›ty vztahující se k vaÅ¡emu stěžejnímu Älánku. PÅ™idávejte odkazy z tolika souvisejících Älánků, kolik potÅ™ebujete, dokud na vaÅ¡e základní kameny nebude směřovat co nejvíce interních odkazů."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["NÄ›které Älánky na vaÅ¡em webu jsou %1$snejdůležitÄ›jší%2$s. Odpovídají lidem na otázky a Å™eší jejich problémy. Takže si zaslouží hodnocení! V %3$s nazýváme tyto základní Älánky. Jedním ze způsobů, jak je zaÅ™adit, je umístit na nÄ› dostatek odkazů. Více odkazů signalizuje vyhledávaÄům, že tyto Älánky jsou důležité a cenné. V tomto cviÄení vám pomůžeme pÅ™idat odkazy na vaÅ¡e základní Älánky!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Jakmile pÅ™idáte trochu více kopií, budeme schopni urÄit úroveň formálnosti vaÅ¡eho textu."],"Overall, your text appears to be %1$s%3$s%2$s.":["CelkovÄ› váš text vypadá jako %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Integrace Zapier bude z %1$s odstranÄ›na ve verzi 20.7 (datum vydání 9. kvÄ›tna). V případÄ› jakýchkoli dotazů se obraÅ¥te na %2$s."],"Maximum heading level":["Maximální úroveň smÄ›ru"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Máte zakázané návrhy odkazů, které jsou nutné pro fungování Souvisejících odkazů. Pokud chcete pÅ™idat Související odkazy, pÅ™ejdÄ›te na Funkce webu a povolte Návrhy odkazů."],"Schema":["Schéma"],"Meta tags":["Meta Å¡títky"],"Not available":["Není dostupný"],"Checks":["Kontroly"],"Focus Keyphrase":["Focus Keyphrase"],"Good":["Dobré"],"No index":["Žádný index"],"Front-end SEO inspector":["Front-end SEO inspektor"],"Focus keyphrase not set":["KlíÄová fráze ostÅ™ení není nastavena"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Jakmile svůj Zap publikujete na své %s nástÄ›nce, můžete zkontrolovat, zda je aktivní a pÅ™ipojený k vaÅ¡emu webu."],"Reset API key":["Obnovit klÃ­Ä API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["AktuálnÄ› jste pÅ™ipojeni k %s pomocí následujícího klíÄe API. Pokud se chcete znovu pÅ™ipojit pomocí jiného klíÄe API, můžete svůj klÃ­Ä resetovat níže."],"Your API key":["Váš klÃ­Ä API"],"Go to your %s dashboard":["PÅ™ejdÄ›te na svojí nástÄ›nku %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Jste úspěšnÄ› pÅ™ipojeni k %1$s! Chcete-li spravovat svůj Zap, navÅ¡tivte svojí nástÄ›nku %2$s."],"Your %s dashboard":["Váše nástÄ›nka %s"],"Verify connection":["Ověřte pÅ™ipojení"],"Verify your connection":["Ověřte pÅ™ipojení"],"Create a Zap":["VytvoÅ™te Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["PÅ™ihlaste se ke svému úÄtu %1$s a zaÄnÄ›te vytvářet svůj první Zap! VÅ¡imnÄ›te si, že můžete vytvoÅ™it pouze 1 Zap se spouÅ¡tÄ›cí událostí z %2$s. V rámci tohoto Zapu si můžete vybrat jednu nebo více akcí."],"%s API key":["API klÃ­Ä %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Tento klÃ­Ä API budete potÅ™ebovat pozdÄ›ji v %s, když budete nastavovat Zap."],"Copy your API key":["Zkopírujte svůj klÃ­Ä API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Chcete-li nastavit pÅ™ipojení, zkopírujte níže uvedený klÃ­Ä API a použijte jej k vytvoÅ™ení a zapnutí Zap ve vaÅ¡em úÄtu %s."],"Manage %s settings":["Spravovat nastavení %s"],"Connect to %s":["PÅ™ipojte se k %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Poznámka: Aby toto cviÄení dobÅ™e fungovalo, musíte spustit nástroj pro optimalizaci dat SEO. Správci to mohou spustit pod %1$sSEO > Nástroje%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["PÅ™idali jste odkazy na své osiÅ™elé Älánky a vyÄistili jste ty, které již nebyly relevantní. Dobrá práce! Podívejte se na shrnutí níže a oslavte, co jste dokázali!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Kriticky prozkoumejte obsah tohoto seznamu a proveÄte potÅ™ebné aktualizace. Pokud potÅ™ebujete pomoc s aktualizací, máme velmi %1$sužiteÄný blogový příspÄ›vek, který vás může vést %2$s (kliknutím otevÅ™ete na nové kartÄ›)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sPotÅ™ebujete další pokyny? Každý krok jsme podrobnÄ›ji probrali v následujícím průvodci: %2$sJak používat %7$s cviÄení se osiÅ™elým obsahem%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["PrávÄ› jste usnadnili nalezení svého nejlepšího obsahu a s vyšší pravdÄ›podobností hodnocení! Dobrá práce! ÄŒas od Äasu nezapomeňte zkontrolovat, zda vaÅ¡e základní kameny dostávají dostatek odkazů!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Podívejte se na níže uvedený seznam. Mají vaÅ¡e základní kameny (oznaÄené %1$s) nejvíce interních odkazů, které na nÄ› směřují? Pokud si myslíte, že základní kámen potÅ™ebuje více odkazů, kliknÄ›te na tlaÄítko Optimalizovat. Tím se Älánek posune k dalšímu kroku."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Mají vÅ¡echny vaÅ¡e základní kameny zelené odrážky? Pro dosažení nejlepších výsledků zvažte úpravu tÄ›ch, které ne!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Které Älánky chcete umístit nejvýše? Které z nich by vaÅ¡e publikum považovalo za nejužiteÄnÄ›jší a nejúplnÄ›jší? KliknÄ›te na Å¡ipku směřující dolů a vyhledejte Älánky, které splňují tato kritéria. ÄŒlánky, které vyberete ze seznamu, automaticky oznaÄíme jako základní kámen."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sPotÅ™ebujete další pokyny? Každý krok jsme podrobnÄ›ji probrali v: %2$sJak používat základní cviÄení %7$s%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Obsah Yoast"],"Yoast Related Links":["Yoast související odkazy"],"Finish optimizing":["DokonÄete optimalizaci"],"You've finished adding links to this article.":["DokonÄili jste pÅ™idávání odkazů do tohoto Älánku."],"Optimize":["Optimalizovat"],"Added to next step":["PÅ™idáno k dalšímu kroku"],"Choose cornerstone articles...":["Vyberte základní Älánky..."],"Loading data...":["NaÄítání dat..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Tímto cviÄením jste zatím nevyÄistili ani neaktualizovali žádné Älánky. Jakmile to udÄ›láte, zobrazí se zde souhrn vaší práce."],"Skipped":["PÅ™eskoÄeno"],"Hidden from search engines.":["Skryté pÅ™ed vyhledávaÄi."],"Removed":["OdstranÄ›no"],"Improved":["VylepÅ¡eno"],"Resolution":["ŘeÅ¡ení"],"Loading redirect options...":["NaÄítání možností pÅ™esmÄ›rování..."],"Remove and redirect":["Odebrat a pÅ™esmÄ›rovat"],"Custom url:":["Vlastní adresa URL:"],"Related article:":["Související Älánek:"],"Home page:":["Domovská stránka:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Chystáte se odebrat %1$s%2$s%3$s. Chcete -li zabránit 404 na vaÅ¡em webu, mÄ›li byste jej pÅ™esmÄ›rovat na jinou stránku na vaÅ¡em webu. Kam byste jej chtÄ›li pÅ™esmÄ›rovat?"],"SEO Workout: Remove article":["SEO cviÄení: Odstranit Älánek"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["VÅ¡echno vypadá dobÅ™e! Na vaÅ¡em webu jsme nenaÅ¡li žádné Älánky starší než Å¡est mÄ›síců a neobdrželo na váš web příliÅ¡ málo odkazů. VraÅ¥te se sem pozdÄ›ji a získejte nové návrhy na vyÄiÅ¡tÄ›ní!"],"Hide from search engines":["Skrýt pÅ™ed vyhledávaÄi"],"Improve":["ZlepÅ¡it"],"Are you sure you wish to hide this article from search engines?":["Opravdu chcete skrýt tento Älánek pÅ™ed vyhledávaÄi?"],"Action":["Akce"],"You've hidden this article from search engines.":["Tento Älánek jste skryli pÅ™ed vyhledávaÄi."],"You've removed this article.":["Tento Älánek jste odstranili."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["AktuálnÄ› jste nevybrali žádné Älánky ke zlepÅ¡ení. Vyberte nÄ›kolik osiÅ™elých Älánků v pÅ™edchozích krocích, na které chcete pÅ™idat odkazy, a my vám zde ukážeme návrhy odkazů."],"Loading link suggestions...":["NaÄítání návrhů odkazů..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["K tomuto Älánku jsme nenaÅ¡li žádné návrhy, ale samozÅ™ejmÄ› stále můžete pÅ™idávat odkazy na Älánky, které si myslíte, že spolu souvisejí."],"Skip":["PÅ™eskoÄit"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Pro tento krok jste jeÅ¡tÄ› nevybrali žádné Älánky. Můžete to udÄ›lat v pÅ™edchozím kroku."],"Is it up-to-date?":["Je to aktuální?"],"Last Updated":["Naposledy aktualizováno"],"You've moved this article to the next step.":["Tento Älánek jste pÅ™esunuli na další krok."],"Unknown":["Neznámé"],"Clear summary":["Jasné shrnutí"],"Add internal links towards your orphaned articles.":["PÅ™idejte do svých osiÅ™elých Älánků interní odkazy."],"Should you update your article?":["MÄ›li byste svůj Älánek aktualizovat?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Váš web Äasto obsahuje spoustu obsahu, který je vytvoÅ™en jednou a na který se již potom nikdo neohlíží. Je důležité si je projít a položit si otázku, zda je tento obsah pro váš web stále relevantní. Mám to vylepÅ¡it nebo odstranit?"],"Start: Love it or leave it?":["ZaÄít: Milujete to, nebo toho necháte?"],"Clean up your unlinked content to make sure people can find it":["VyÄistÄ›te svůj nepropojený obsah, aby jej lidé mohli najít"],"I've finished this workout":["I've finished this workout"],"Reset this workout":["Resetujte toto cviÄení"],"Well done!":["VýbornÄ›!"],"Add internal links towards your cornerstones":["PÅ™idejte interní odkazy k základním kamenům"],"Check the number of incoming internal links of your cornerstones":["Zkontrolujte poÄet příchozích interních odkazů vaÅ¡ich základních kamenů"],"Start: Choose your cornerstones!":["ZaÄnÄ›te: Vyberte si základní kameny!"],"The cornerstone approach":["Základní přístup"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["VezmÄ›te prosím na vÄ›domí: Aby toto cviÄení fungovalo dobÅ™e a aby vám nabídlo návrhy propojení, musíte spustit nástroj pro optimalizaci dat SEO. Správci to mohou spustit v Äásti %1$sSEO> Nástroje%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["UpozornÄ›ní: Váš správce zakázal funkci cornerstone v nastavení SEO. Pokud chcete toto cviÄení používat, mÄ›lo by být povoleno."],"I've finished this step":["Tento krok jsem dokonÄil"],"Revise this step":["Zrevidujte tento krok"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["NepodaÅ™ilo se nám najít interní odkazy na vaÅ¡ich stránkách. BuÄ jste dosud nepÅ™idali žádné interní odkazy na svůj obsah, nebo Yoast SEO je neindexoval. Yoast SEO můžete nechat indexovat své odkazy spuÅ¡tÄ›ním optimalizace dat SEO v Äásti SEO> Nástroje."],"Incoming links":["Příchozí odkazy"],"Edit to add link":["Upravit a pÅ™idat odkaz"],"%s incoming link":["%s příchozí odkaz","%s příchozí odkazy","%s příchozí odkazů"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["MomentálnÄ› nemáte žádné Älánky oznaÄené jako základní kámen. Když své Älánky oznaÄíte jako základní kámen, zobrazí se zde."],"Focus keyphrase":["Hlavní klíÄové slovo"],"Article":["ÄŒlánek"],"Readability score":["Skóre Äitelnosti"],"SEO score":["SEO skóre"],"Copy failed":["Kopírování se nezdaÅ™ilo"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["VylepÅ¡ete hodnocení vÅ¡ech svých základních kamenů pomocí tohoto cviÄení %1$skrok za krokem!%2$s"],"Rank with articles you want to rank with":["OhodnoÅ¥te Älánky, které chcete ohodnotit"],"Descriptive text":["Text popisu"],"Show the descriptive text":["Zobrazit text popisný text"],"Show icon":["Zobrazit ikonu"],"Yoast Estimated Reading Time":["PÅ™edpokládaná doba Ätení"],"Shows an estimated reading time based on the content length.":["Zobrazuje odhadovanou dobu Ätení na základÄ› délky obsahu."],"reading time":["Äas na Ätení"],"content length":["délka obsahu"],"Estimated reading time:":["PÅ™edpokládaná doba Ätení:"],"minute":["minuta","minuty","minut"],"Settings":["Nastavení"],"OK":["OK"],"Close":["Zavřít"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["První opravdu plnohodnotné SEO Å™eÅ¡ení pro WordPress, vÄetnÄ› analýzy obsahu stránky, XML map webu a dalších vychytávek."],"Type":["Typ"],"Team Yoast":["Tým Yoast"],"Orphaned content":["Nepropojený obsah"],"Synonyms":["Synonyma"],"Internal linking suggestions":["Návrhy interních odkazů"],"Enter a related keyphrase to calculate the SEO score":["Chcete-li vypoÄítat skóre SEO, zadejte související klíÄovou frázi"],"Related keyphrase":["Související klíÄová fráze"],"Add related keyphrase":["PÅ™idejte souvisící klíÄové slovo/frázi"],"Analysis results":["Výsledky analýzy"],"Help on choosing the perfect keyphrase":["Pomoc pÅ™i hledání té nejlepší klíÄové fráze"],"Help on keyphrase synonyms":["Pomoc pÅ™i hledání synonym klíÄových frází"],"Keyphrase":["KlíÄové slovo"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nová URL: {{link}}%s{{/link}}"],"Undo":["ZpÄ›t"],"Redirect created":["PÅ™esmÄ›rování vytvoÅ™eno"],"%s just created a redirect from the old URL to the new URL.":["%s vytvoÅ™il pÅ™esmÄ›rování ze staré URL na novou."],"Old URL: {{link}}%s{{/link}}":["Stará URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Synonyma klíÄové fráze"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["DoÅ¡lo k chybÄ›: analýza Premium SEO nefunguje podle oÄekávání. Prosím {{activateLink}}aktivujte své pÅ™edplatné v MyYoast{{/activateLink}} a poté {{reloadButton}} znovu naÄtÄ›te tuto stránku{{/reloadButton}}, aby fungovala správnÄ›."],"seo":["seo"],"internal linking":["interní propojení"],"site structure":["struktura stránek"],"We could not find any relevant articles on your website that you could link to from your post.":["Na vaÅ¡em webu jsme nenaÅ¡li žádné relevantní Älánky, na které byste mohli odkazovat z vaÅ¡eho příspÄ›vku."],"Load suggestions":["NaÄíst návrhy"],"Refresh suggestions":["Aktualizovat návrhy"],"Write list…":["Napsat seznam…"],"Adds a list of links related to this page.":["PÅ™idá seznam odkazů souvisejících s touto stránkou."],"related posts":["Související příspÄ›vky"],"related pages":["Související stránky"],"Adds a table of contents to this page.":["PÅ™idá na tuto stránku obsah."],"links":["odkazy"],"toc":["pata"],"Copy link":["Kopírovat odkaz"],"Copy link to suggested article: %s":["Zkopírovat odkaz na navržený Älánek: %s"],"Add a title to your post for the best internal linking suggestions.":["Chcete-li získat nejlepší návrhy interních odkazů, pÅ™idejte do svého příspÄ›vku název."],"Add a metadescription to your post for the best internal linking suggestions.":["Chcete-li získat nejlepší návrhy interních odkazů, pÅ™idejte ke svému příspÄ›vku metapopis."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Chcete-li získat nejlepší návrhy interních odkazů, pÅ™idejte do svého příspÄ›vku nadpis a popis."],"Also, add a title to your post for the best internal linking suggestions.":["K příspÄ›vku také pÅ™idejte nadpis, který obsahuje nejlepší návrhy interních odkazů."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Chcete-li získat nejlepší návrhy interních odkazů, do svého příspÄ›vku také pÅ™idejte popis."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Chcete-li získat nejlepší návrhy interních odkazů, pÅ™idejte do svého příspÄ›vku také nadpis a popis."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Jakmile pÅ™idáte trochu více kopií, dáme vám zde seznam souvisejícího obsahu, na který můžete ve svém příspÄ›vku odkazovat."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Chcete-li vylepÅ¡it strukturu svého webu, zvažte propojení s dalšími relevantními příspÄ›vky nebo stránkami na vaÅ¡em webu."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Zobrazení seznamu souvisejícího obsahu, na který můžete odkazovat, trvá nÄ›kolik sekund. Návrhy se zde zobrazí, jakmile je budeme mít."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}} PÅ™eÄtÄ›te si naÅ¡eho průvodce interním propojováním pro SEO {{/a}} a dozvíte se více."],"Copied!":["Zkopírováno!"],"Not supported!":["Není podpováno!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Pokoušíte se použít více souvisejících frází? MÄ›li byste je pÅ™idat samostatnÄ›."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["KlíÄová fráze je příliÅ¡ dlouhá. Maximum je 191 znaků."],"Add as related keyphrase":["PÅ™idat jako související frázi"],"Added!":["PÅ™idáno!"],"Remove":["Odstranit"],"Table of contents":["Tabule s obsahem"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["PotÅ™ebujeme optimalizovat SEO data vaÅ¡eho webu, abychom vám mohli nabídnout nejlepší %1$súhledné návrhy%2$s. %3$sStart SEO Optimalizace dat%4$s"],"Create a Zap in %s":["VytvoÅ™te zapuntí v %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-da_DK.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-da_DK.json new file mode 100644 index 00000000..84031f5b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-da_DK.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"da_DK"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Anmodningen resulterede i følgende fejl: \"%s\""],"X share preview":["X share forhÃ¥ndsvisning"],"AI X title generator":["AI X titelgenerator"],"AI X description generator":["AI X beskrivelsesgenerator"],"X preview":["X forhÃ¥ndsvisning"],"Please enter a valid focus keyphrase.":["Indtast en gyldig fokusnøglefrase."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["For at bruge denne funktion skal dit websted være offentligt tilgængeligt. Dette gælder bÃ¥de testwebsteder og situationer, hvor dit REST API er beskyttet med en adgangskode. Vær sikker pÃ¥, at dit websted er offentligt tilgængeligt og prøv igen. Hvis problemet fortsætter, sÃ¥ %1$skontakt vores supportteam%2$s."],"Yoast AI cannot reach your site":["Yoast AI kan ikke komme i kontakt med dit websted"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["For at fÃ¥ adgang til denne funktion, sÃ¥ skal du have aktive %2$s og %3$s abennementer. SÃ¥ %5$saktiver venligst dine abonnementer i %1$s%6$s eller %7$sfÃ¥ et nyt %4$s%8$s. Bagefter, sÃ¥ genindlæs venligst denne side for at fÃ¥ denne funktion til at fungere efter hensigten, hvilket kan tage op til 30 sekunder."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["AI-titelgeneratoren kræver, at SEO-analysen er aktiveret før brug. For at aktivere det skal du navigere til %2$swebstedsfunktioner for s%1$s%3$s, slÃ¥ SEO-analysen til og vælge \"Gem ændringer\". Hvis SEO-analysen er deaktiveret i din brugerprofil, skal du gÃ¥ til din profil og aktivere den der. Kontakt din administrator, hvis du ikke har adgang til disse indstillinger."],"Social share preview":["ForhÃ¥ndsvisning af deling pÃ¥ sociale medier"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["For at fortsætte med at bruge Yoast AI-funktionen skal du reducere hyppigheden af dine anmodninger. Vores %1$shjælpeartikel%2$s giver vejledning i, hvordan du effektivt planlægger og fÃ¥r tempo pÃ¥ dine anmodninger om en optimeret arbejdsgang."],"You've reached the Yoast AI rate limit.":["Du har nÃ¥et Yoast AI-grænsen."],"Allow":["Tillad"],"Deny":["Afvis"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["For at se denne video skal du tillade %1$s at indlæse indlejrede videoer fra %2$s."],"Text generated by AI may be offensive or inaccurate.":["Tekst, der genereres af AI, kan være stødende eller unøjagtig."],"(Opens in a new browser tab)":["(Ã…bner i en ny browserfane)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Fremskynd din arbejdsgang med generativ AI. FÃ¥ forslag til titler og beskrivelser af høj kvalitet til din søgning og dit sociale udseende. %1$sFÃ¥ flere oplysninger%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generer titler og beskrivelser med Yoast AI!"],"New to %1$s":["Ny i forhold til %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Jeg godkender %1$sServicevilkÃ¥r%2$s og %3$sFortrolighedspolitik%4$s for Yoast AI-tjenesten. Dette omfatter samtykke til indsamling og brug af data for at forbedre brugeroplevelsen."],"Start generating":["Begynd at generere"],"Yes, revoke consent":["Ja, tilbagekald samtykke"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Ved at tilbagekalde dit samtykke har du ikke længere adgang til Yoast AI-funktioner. Er du sikker pÃ¥, at du vil tilbagekalde dit samtykke?"],"Something went wrong, please try again later.":["Noget gik galt, prøv igen senere."],"Revoke AI consent":["Tilbagekald AI-samtykke"],"AI title generator":["AI titelgenerator"],"AI description generator":["AI beskrivelsesgenerator"],"AI social title generator":["AI social titelgenerator"],"AI social description generator":["AI social beskrivelsesgenerator"],"Dismiss":["Ignorer"],"Don’t show again":["Vis ikke igen"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: Øg nøjagtigheden af dine genererede AI-titler ved at skrive mere indhold pÃ¥ din side."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: Gør dine genererede AI-beskrivelser mere nøjagtige ved at skrive mere indhold pÃ¥ din side."],"Try again":["Prøv igen"],"Social preview":["Social forhÃ¥ndsvisning"],"Desktop result":["Resultat computer"],"Mobile result":["Mobilresultat"],"Apply %s description":[],"Apply %s title":[],"Next":["Næste"],"Previous":["Forrige"],"Generate 5 more":["Generer 5 mere"],"Google preview":["Google forhÃ¥ndsvisning"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["PÃ¥ grund af OpenAIs strenge etiske retningslinjer og %1$sbrugspolitikker%2$s kan vi ikke generere SEO-titler til din side. Hvis du har til hensigt at bruge AI, skal du undgÃ¥ brugen af eksplicit voldeligt eller seksuelt eksplicit indhold. %3$sLæs mere om, hvordan du konfigurerer din side for at sikre, at du fÃ¥r de bedste resultater med AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["PÃ¥ grund af OpenAIs strenge etiske retningslinjer og %1$sbrugspolitikker%2$s kan vi ikke generere metabeskrivelser til din side. Hvis du har til hensigt at bruge AI, skal du undgÃ¥ brugen af eksplicit, voldeligt eller seksuelt eksplicit indhold. %3$sLæs mere om, hvordan du konfigurerer din side for at sikre, at du fÃ¥r de bedste resultater med AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["For at fÃ¥ adgang til denne funktion skal du have et aktivt %1$s abonnement. %3$saktiver dit abonnement i %2$s%4$s eller %5$sfÃ¥ et nyt %1$s abonnement%6$s. Klik derefter pÃ¥ knappen for at opdatere denne side, sÃ¥ funktionen fungerer korrekt, hvilket kan tage op til 30 sekunder."],"Refresh page":["Opdater side"],"Not enough content":["Ikke nok indhold"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Prøv igen senere. Hvis problemet fortsætter, bedes du %1$skontakte vores supportteam%2$s!"],"Something went wrong":["Noget gik galt"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Det ser ud til, at der er opstÃ¥et en timeout for forbindelsen. Kontroller din internetforbindelse, og prøv igen senere. Hvis problemet fortsætter, skal du %1$skontakte vores supportteam%2$s"],"Connection timeout":["Timeout for forbindelse"],"Use AI":["Brug AI"],"Close modal":["Luk modal"],"Learn more about AI (Opens in a new browser tab)":["FÃ¥ mere at vide om AI (Ã¥bner i en ny browserfane)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitel%3$s: Din side har endnu ikke en titel. %2$sTilføj en%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$s Titel%2$s: Din side har en titel. Godt gÃ¥et!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sSøgefrasefordeling%3$s:%2$sInkluder din søgefrase eller dens synonymer i teksten, sÃ¥ vi kan kontrollere søgefrasefordeling%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sSøgefrasefordeling%2$s: Flot arbejde!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sSøgefrasefordeling%3$s: Ujævn. Nogle dele af din tekst indeholder ikke søgefrase eller synonymer. %2$sDistribuer dem mere jævnt%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sSøgefrasefordeling%3$s: Meget ujævn. Store dele af din tekst indeholder ikke søgefrase eller synonymer. %2$sFordel dem mere jævnt%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Du bruger ikke for mange komplekse ord, hvilket gør din tekst let at læse. Godt gÃ¥et!"],"Word complexity":["Ordkompleksitet"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s af ordene i din tekst betragtes som komplekse. %3$s Prøv at bruge kortere og mere velkendte ord for at forbedre læsbarheden%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sJustering%3$s: Der er et langt afsnit med centreret tekst. %2$sVi anbefaler, at du gør den venstrejusteret%3$s.","%1$sJustering%3$s: Der er %4$s lange afsnit med centreret tekst. %2$sVi anbefaler, at du gør dem venstrejusterede%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sJustering%3$s: Der er et langt afsnit med centreret tekst. %2$sVi anbefaler, at du gør den højrejusteret%3$s.","%1$sJustering%3$s: Der er %4$s lange afsnit med centreret tekst. %2$sVi anbefaler, at du gør dem højrejusterede%3$s."],"Select image":["Vælg billede"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Du ved det nok ikke, men der kan være sider pÃ¥ dit websted, der ikke fÃ¥r nogen links. Det er et SEO-problem, fordi det er svært for søgemaskiner at finde sider, der ikke har nogen links. Det er sværere for dem at rangere. Vi kalder disse sider for forældreløst indhold. I denne øvelse, finder vi det forældreløse indhold pÃ¥ dit websted og viser, hvordan du hurtigt kan tilføje links til det, sÃ¥ det fÃ¥r en chance for at blive rangeret!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Til til at tilføje nogle links! Herunder, ser du en liste over dine forældreløse artikler. Under hver af dem er der forslag til relaterede sider, som du kan tilføje links fra. NÃ¥r et link tilføjes, sÃ¥ vær sikker pÃ¥, at indsætte det i en relevant sætning, der har noget at gøre med din forældreløse artikel. Bliv ved med at tilføje links til de forældreløse artikler, indtil du er tilfreds med mængden af links, der peger pÃ¥ dem."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Tid til at tilføje nogle links! Nedenfor ser du en liste med dine hjørnesten. Under hver hjørnesten er der forslag til artikler, du kan tilføje et link fra. NÃ¥r du tilføjer linket, skal du sørge for at indsætte det i en relevant sætning relateret til din hjørnestensartikel. Bliv ved med at tilføje links fra sÃ¥ mange relaterede artikler, som du har brug for, indtil dine hjørnesten har de mest interne links, der peger mod dem."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Nogle artikler pÃ¥ dit websted er de %1$s%2$s vigtigste. De besvarer folks spørgsmÃ¥l og løser deres problemer. SÃ¥ de fortjener at rangere! Hos %3$s kalder vi disse hjørnestensartikler. En af mÃ¥derne at fÃ¥ dem til at rangere er at pege nok links til dem. Flere links signalerer til søgemaskiner, at disse artikler er vigtige og værdifulde. I denne træning hjælper vi dig med at tilføje links til dine hjørnestensartikler!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["NÃ¥r du har tilføjet lidt mere tekst, kan vi fortælle dig formalitetsniveauet for din tekst."],"Overall, your text appears to be %1$s%3$s%2$s.":["Samlet set ser din tekst ud til at være %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Zapier-integrationen vil blive fjernet fra %1$s i 20.7 (udgivelsesdato 9. maj). Hvis du har spørgsmÃ¥l, bedes du kontakte %2$s."],"Maximum heading level":["Maksimalt overskriftsniveau"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Du har deaktiveret funktionen til at foreslÃ¥ link, som er nødvendigt for at relaterede links virker. Hvis du vil tilføje relaterede links, sÃ¥ aktiver venligst funktionen til at foreslÃ¥ links i Webstedsfunktioner."],"Schema":["Skema"],"Meta tags":["Metatags"],"Not available":["Ikke tilgængelig"],"Checks":["Kontrol"],"Focus Keyphrase":["Fokussøgeordsfrase"],"Good":["God"],"No index":["Intet indeks"],"Front-end SEO inspector":["Seo-inspektør i frontend"],"Focus keyphrase not set":["Fokusnøglefrase ikke indstillet"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["NÃ¥r du har offentliggjort din Zap i dit %s kontrolpanel, kan du kontrollere, om den er aktiv og forbundet til dit websted."],"Reset API key":["Nulstil API-nøgle"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Du har i øjeblikket forbindelse til %s ved hjælp af følgende API-nøgle. Hvis du vil oprette forbindelse til en anden API-nøgle, kan du nulstille din nøgle nedenfor."],"Your API key":["Din API-nøgle"],"Go to your %s dashboard":["GÃ¥ til dit %s kontrolpanel"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Du har forbindelse til %1$s! For at administrere din Zap skal du besøge dit %2$s kontrolpanel."],"Your %s dashboard":["Dit %s kontrolpanel"],"Verify connection":["Bekræft forbindelse"],"Verify your connection":["Bekræft din forbindelse"],"Create a Zap":["Opret en Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Log ind pÃ¥ din %1$s-konto, og begynd at oprette din første Zap! Bemærk, at du kun kan oprette 1 Zap med en udløserhændelse fra %2$s. Inden for denne Zap kan du vælge en eller flere handlinger."],"%s API key":["%s API-nøgle"],"You'll need this API key later on in %s when you're setting up your Zap.":["Du skal bruge denne API-nøgle senere i %s, nÃ¥r du konfigurerer din Zap."],"Copy your API key":["Kopier din API-nøgle"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Hvis du vil oprette en forbindelse, skal du sørge for at kopiere den givne API-nøgle nedenfor og bruge den til at oprette og aktivere en Zap pÃ¥ din %s-konto."],"Manage %s settings":["HÃ¥ndter %s indstillinger"],"Connect to %s":["Opret forbindelse til %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Bemærk venligst: For at denne træning skal fungere godt, skal du køre SEO-dataoptimeringsværktøjet. Administratorer kan køre dette under %1$sSEO > Værktøjer%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Du har tilføjet links til dine forældreløse artikler, og du har ryddet op i dem, der ikke længere var relevante. Godt arbejde! Tag et kig pÃ¥ oversigten nedenfor og fejr det, du har opnÃ¥et!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Undersøg kritisk indholdet i denne liste og foretag de nødvendige opdateringer. Hvis du har brug for hjælp til at opdatere, har vi et meget %1$sbrugbart blogindlæg, der kan guide dig hele vejen%2$s (klik for at Ã¥bne i en ny fane)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sHar du brug for mere vejledning? Vi har dækket hvert trin mere detaljeret i den følgende guide: %2$sSÃ¥dan bruger du %7$s forældreløst indhold- træning%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Du har lige gjort dit bedste indhold nemt at finde, og det er mere sandsynligt, at du rangerer! Godt gÃ¥et! Husk fra tid til anden at tjekke, om dine hjørnesten fÃ¥r nok links!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Tag et kig pÃ¥ listen nedenfor. Har dine hjørnesten (markeret med %1$s) de fleste interne links, der peger mod dem? Klik pÃ¥ knappen Optimer, hvis du mener, at en hjørnesten har brug for flere links. Det vil flytte artiklen til næste trin."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Har alle dine hjørnesten grønne kugler? For de bedste resultater, overvej at redigere dem, der ikke gør det!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Hvilke artikler vil du rangere højest med? Hvilke ville dit publikum finde de mest nyttige og komplette? Klik pÃ¥ den nedadgÃ¥ende pil, og se efter artikler, der passer til disse kriterier. Vi markerer automatisk de artikler, du vælger fra listen, som hjørnesten."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sHar du brug for mere vejledning? Vi har dækket hvert trin mere detaljeret i: %2$sSÃ¥dan bruger du %7$s hjørnestenstræning%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast Indholdsfortegnelse"],"Yoast Related Links":["Yoast relaterede links"],"Finish optimizing":["Afslut optimering"],"You've finished adding links to this article.":["Du er færdig med at tilføje links til denne artikel."],"Optimize":["Optimer"],"Added to next step":["Tilføjet til næste trin"],"Choose cornerstone articles...":["Vælg hjørnestensartikler..."],"Loading data...":["Indlæser data..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Du har ikke ryddet op eller opdateret nogen artikler endnu ved hjælp af denne træning. NÃ¥r du gør det, vil en oversigt over dit arbejde dukke op her."],"Skipped":["Sprunget over"],"Hidden from search engines.":["Skjult for søgemaskiner."],"Removed":["Fjernet"],"Improved":["Forbedret"],"Resolution":["Opløsning"],"Loading redirect options...":["Indlæser omdirigeringsindstillinger..."],"Remove and redirect":["Fjerne og omdirigere"],"Custom url:":["Brugerdefineret URL-adresse:"],"Related article:":["Relateret artikel:"],"Home page:":["Forside:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Du er ved at fjerne %1$s%2$s%3$s. Hvis du vil forhindre 404'ere pÃ¥ dit websted, skal du omdirigere det til en anden side pÃ¥ dit websted. Hvor vil du omdirigere den til?"],"SEO Workout: Remove article":["SEO træning: Fjern artikel"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Alt ser godt ud! Vi har ikke fundet nogen artikler pÃ¥ dit websted, der er ældre end seks mÃ¥neder og modtager for fÃ¥ links pÃ¥ dit websted. Vend tilbage her til senere for at finde nye oprydningsforslag!"],"Hide from search engines":["Skjul fra søgemaskiner"],"Improve":["Optimer"],"Are you sure you wish to hide this article from search engines?":["Er du sikker pÃ¥, at du ønsker at skjule denne artikel for søgemaskiner?"],"Action":["Handling"],"You've hidden this article from search engines.":["Du har skjult denne artikel for søgemaskiner."],"You've removed this article.":["Du har fjernet denne artikel."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Du har i øjeblikket ikke valgt nogen artikler, der skal forbedres. Vælg et par artikler i de foregÃ¥ende trin, som du vil føje links til, sÃ¥ viser vi dig linkforslag her."],"Loading link suggestions...":["Indlæser linkforslag..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Vi fandt ikke nogen forslag til denne artikel, men selvfølgelig kan du stadig tilføje links til artikler, som du mener er relaterede."],"Skip":["Spring over"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Du har endnu ikke valgt nogen artikler til dette trin. Det kan du gøre i forrige trin."],"Is it up-to-date?":["Er det up-to-date?"],"Last Updated":["Sidst opdateret"],"You've moved this article to the next step.":["Du har flyttet denne artikel til næste trin."],"Unknown":["Ubekendt"],"Clear summary":["Ryd resume"],"Add internal links towards your orphaned articles.":["Tilføj interne links til dine forældreløse artikler."],"Should you update your article?":["Bør du opdatere din artikel?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Dit websted indeholder ofte masser af indhold, der er oprettet én gang, og som du aldrig er vendt tilbage til. Det er vigtigt at gennemgÃ¥ dette og spørge dig selv, om dette indhold stadig er relevant for dit websted. Skal du forbedre det eller fjerne det?"],"Start: Love it or leave it?":["Start: Er vild med det eller sig farvel til det?"],"Clean up your unlinked content to make sure people can find it":["Ryd op i det indhold, der ikke er sammenkædet, for at sikre, at andre kan finde det"],"I've finished this workout":["Jeg er færdig med denne workout"],"Reset this workout":["Nulstil denne øvelse"],"Well done!":["Godt klaret!"],"Add internal links towards your cornerstones":["Tilføj interne links som henviser til dine cornerstones"],"Check the number of incoming internal links of your cornerstones":["Tjek nummeret af interne links til dine cornerstones"],"Start: Choose your cornerstones!":["Start: Vælg dine hjørnesten!"],"The cornerstone approach":["Hjørnestenstilgang"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Bemærk: For at denne øvelse skal fungere godt og tilbyde dig forslag til links, sÃ¥ skal du køre SEO-dataoptimeringsværktøjet. Administratorer kan køre dette under %1$sSEO > Værktøjer%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Bemærk venligst: Din administrator har deaktiveret hjørnestensfunktionen i SEO-indstillingerne. Hvis du ønsker at bruge denne øvelse, sÃ¥ skal den aktiveres."],"I've finished this step":["Jeg er færdig med dette trin"],"Revise this step":["Revider dette trin"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Vi kunne ikke finde interne links pÃ¥ dine sider. Enten har du ikke tilføjet nogen interne links til dit indhold endnu, eller ogsÃ¥ har Yoast SEO ikke indekseret dem. Du kan fÃ¥ Yoast SEO til at indeksere dine links ved at køre SEO-dataoptimeringen under SEO > Værktøjer."],"Incoming links":["Indkommende links"],"Edit to add link":["Rediger for at tilføje link"],"%s incoming link":["%s indgÃ¥ende link","%s indgÃ¥ende links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Du har i øjeblikket ingen artikler markeret som hjørnesten. NÃ¥r du markerer dine artikler som hjørnesten, vil de dukke op her."],"Focus keyphrase":["Fokus-søgeordsfrase"],"Article":["Artikel"],"Readability score":["Læsbarheds-score"],"SEO score":["SEO-score"],"Copy failed":["Kopiering mislykkedes"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Du kan forbedre placeringen for alle dine hjørnesten ved at bruge denne %1$strin-for-trin øvelse! %2$s"],"Rank with articles you want to rank with":["Ranger med artikler, du vil rangere med"],"Descriptive text":["Beskrivende tekst"],"Show the descriptive text":["Vis den beskrivende tekst"],"Show icon":["Vis ikon"],"Yoast Estimated Reading Time":["Yoast anslÃ¥et læsetid"],"Shows an estimated reading time based on the content length.":["Viser en anslÃ¥et læsetid baseret pÃ¥ indholdslængden."],"reading time":["læsetid"],"content length":["indholdslængde"],"Estimated reading time:":["AnslÃ¥et læsetid:"],"minute":["Minut","Minutter"],"Settings":["Indstillinger"],"OK":["OK"],"Close":["Luk"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Den første rigtige alt-i-en SEO-løsning for WordPress, inklusiv analyse af siders indhold, XML-sitemaps og meget mere."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Forældreløst (orphaned) indhold"],"Synonyms":["Synonymer"],"Internal linking suggestions":["Forslag til interne links"],"Enter a related keyphrase to calculate the SEO score":["Indtast en lignende nøglefrase for at beregne SEO-scoren"],"Related keyphrase":["Relateret søgeordsfrase"],"Add related keyphrase":["Tilføj relateret søgefrase"],"Analysis results":["Analyseresultat:"],"Help on choosing the perfect keyphrase":["Hjælp til at vælge den perfekte nøglefrase"],"Help on keyphrase synonyms":["Hjælp til nøglefrase-synonymer"],"Keyphrase":["Søgefrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Ny URL: {{link}}%s{{/link}}"],"Undo":["Fortryd"],"Redirect created":["redirect oprettet"],"%s just created a redirect from the old URL to the new URL.":["%s har lige oprettet et redirect fra den gamle URL til den nye."],"Old URL: {{link}}%s{{/link}}":["Gammel URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Søgeord synonymer"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["En fejl er opstÃ¥et: Premium SEO-analysen virker ikke som ventet. Vær venlig at {{activateLink}}aktivere dit abonnement i MyYoast{{/activateLink}} og {{reloadButton}}genindlæs denne side{{/reloadButton}} for at fÃ¥ den til at virke ordentligt."],"seo":["seo"],"internal linking":["Interne links"],"site structure":["sidestruktur"],"We could not find any relevant articles on your website that you could link to from your post.":["Vi kunne ikke finde nogen relevante artikler pÃ¥ dit websted, som du kan linke til i dit indlæg."],"Load suggestions":["Indlæs foreslag"],"Refresh suggestions":["Genopfrisk foreslag"],"Write list…":["Skriv liste..."],"Adds a list of links related to this page.":["Tilføjer en liste af links relaterede til denne side."],"related posts":["relaterede indlæg"],"related pages":["relaterede sider"],"Adds a table of contents to this page.":["Tilføjer en indholdsfortegnelse til denne side."],"links":["links"],"toc":["indholdsfortegnelse"],"Copy link":["Kopiér link"],"Copy link to suggested article: %s":["Kopiér link til foreslÃ¥et artikel: %s"],"Add a title to your post for the best internal linking suggestions.":["Føj en titel til dit indlæg for at fÃ¥ de bedste interne linkforslag."],"Add a metadescription to your post for the best internal linking suggestions.":["Tilføj en metabeskrivelse til dit indlæg for at fÃ¥ de bedste interne linkforslag."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Tilføj en titel og en metabeskrivelse til dit indlæg for at fÃ¥ de bedste interne linkforslag."],"Also, add a title to your post for the best internal linking suggestions.":["Tilføj ogsÃ¥ en titel til dit indlæg for at fÃ¥ de bedste interne linkforslag."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Tilføj ogsÃ¥ en metabeskrivelse til dit indlæg for at fÃ¥ de bedste interne linkforslag."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Tilføj ogsÃ¥ en titel og en metabeskrivelse til dit indlæg for at fÃ¥ de bedste interne linkforslag."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["NÃ¥r du har tilføjet lidt mere tekst, giver vi dig en liste over relateret indhold her, som du kan linke til i dit indlæg."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Hvis du vil forbedre din webstedsstruktur, kan du overveje at linke til andre relevante indlæg eller sider pÃ¥ dit websted."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Det tager et par sekunder at vise dig en liste over relateret indhold, som du kan linke til. Forslagene vil blive vist her, sÃ¥ snart vi har dem."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}} Læs vores vejledning om intern linkning for SEO{{/a}} for at fÃ¥ mere at vide."],"Copied!":["Kopieret!"],"Not supported!":["Ikke understøttet!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Forsøger du at bruge flere relaterede søgeord? Du bør tilføje dem separat."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Din søgefrase er for lang. Den kan højst være pÃ¥ 191 tegn."],"Add as related keyphrase":["Tilføj som relateret søgeord"],"Added!":["Tilføjet!"],"Remove":["Fjern"],"Table of contents":["Indholdsfortegnelse"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Vi er nødt til at optimere dit websteds SEO-data, sÃ¥ vi kan tilbyde dig de bedste %1$slinkforslag%2$s.\n\n%3$s Start SEO-dataoptimering%4$s"],"Create a Zap in %s":["Opret en Zap i %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-de_DE.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-de_DE.json new file mode 100644 index 00000000..31456ea3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-de_DE.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"de"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Die Anfrage wurde mit folgenden Fehler beantwortet: „%s“"],"X share preview":["X-Teilen-Vorschau"],"AI X title generator":["KI-X-Titelgenerator"],"AI X description generator":["KI-X-Beschreibungsgenerator"],"X preview":["X-Vorschau"],"Please enter a valid focus keyphrase.":["Bitte gib eine gültige Fokus-Keyphrase ein."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Um diese Funktion benutzen zu können, muss deine Website öffentlich zugänglich sein. Dies gilt sowohl für Websites zum Testen als auch für Instanzen, bei denen deine REST-API passwortgeschützt ist. Bitte stelle sicher, dass deine Website öffentlich zugänglich ist und versuche es erneut. Wenn das Problem weiterhin besteht, %1$skontaktiere bitte unser Support-Team%2$s."],"Yoast AI cannot reach your site":["Yoast AI kann deine Website nicht erreichen"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Um diese Funktion nutzen zu können, benötigst du aktive %2$s und %3$s Abonnements. Bitte %5$saktiviere deine Abonnements in %1$s%6$s oder %7$serhalte ein neues %4$s%8$s. Bitte aktualisiere anschließend diese Seite, damit die Funktion korrekt funktioniert. Dies kann bis zu 30 Sekunden dauern."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Für den KI-Titelgenerator muss die SEO-Analyse vor der Verwendung aktiviert werden. Um sie zu aktivieren, navigiere bitte zu den %2$sWebsite-Funktionen von %1$s%3$s, aktiviere die SEO-Analyse und klicke auf 'Änderungen speichern'. Wenn die SEO-Analyse in deinem WordPress-Benutzerprofil deaktiviert ist, ruf dein Profil auf und aktiviere sie dort. Wende dich bitte an deinen Administrator, wenn du keinen Zugang zu diesen Einstellungen hast."],"Social share preview":["Vorschau für soziale Netzwerke"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Wenn du die KI-Funktion von Yoast weiterhin nutzen möchtest, solltest du die Häufigkeit deiner Anfragen reduzieren. In unserem %1$sHilfe-Artikel%2$s findest du eine Anleitung zur effektiven Planung und Taktung deiner Anfragen für einen optimierten Arbeitsablauf."],"You've reached the Yoast AI rate limit.":["Du hast das Limit der KI-Anfragen in Yoast erreicht."],"Allow":["Zulassen"],"Deny":["Ablehnen"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Um dieses Video anzusehen, musst du %1$s erlauben, eingebettete Videos von %2$s zu laden."],"Text generated by AI may be offensive or inaccurate.":["Von der KI generierter Text kann beleidigend oder unpassend sein."],"(Opens in a new browser tab)":["(Öffnet in einem neuen Browser Tab)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Beschleunige deinen Workflow mit generativer KI. Erhalte hochwertige Titel- und Beschreibungsvorschläge für deine Suche und deinen sozialen Auftritt. %1$sWeitere Informationen%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generiere Titel und Beschreibungen mit Yoast-KI!"],"New to %1$s":["Neu bei %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Ich stimme den %1$sAllgemeinen Geschäftsbedingungen%2$s und den %3$sDatenschutzbestimmungen%4$s des KI-Dienstes von Yoast zu. Dies beinhaltet die Zustimmung zur Sammlung und Verwendung von Daten zur Verbesserung der Benutzererfahrung."],"Start generating":["Mit der Erzeugung beginnen"],"Yes, revoke consent":["Ja, Zustimmung widerrufen"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Wenn du deine Zustimmung widerrufst, hast du keinen Zugriff mehr auf die Funktionen der Yoast-KI. Bist du sicher, dass du deine Zustimmung widerrufen möchtest?"],"Something went wrong, please try again later.":["Etwas ist schiefgelaufen, bitte versuche es später erneut."],"Revoke AI consent":["KI-Zustimmung widerrufen"],"AI title generator":["KI-Titel-Generator"],"AI description generator":["KI-Beschreibungsgenerator"],"AI social title generator":["KI-Generator für soziale Titel"],"AI social description generator":["KI-Generator für soziale Beschreibungen"],"Dismiss":["Verwerfen"],"Don’t show again":["Nicht mehr anzeigen"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTipp%2$s: Verbessere die Genauigkeit der von dir generierten KI-Titel, indem du mehr Inhalt auf deiner Seite schreibst."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTipp%2$s: Verbessere die Genauigkeit der von dir generierten KI-Beschreibungen, indem du mehr Inhalt auf deiner Seite schreibst."],"Try again":["Erneut versuchen"],"Social preview":["Voransicht sozialer Medien"],"Desktop result":["Ergebnis für den Desktop"],"Mobile result":["Ergebnis für die mobilen Geräte"],"Apply %s description":[],"Apply %s title":[],"Next":["Weiter"],"Previous":["Zurück"],"Generate 5 more":["5 weitere generieren"],"Google preview":["Google-Vorschau"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Aufgrund der strengen ethischen Richtlinien und %1$sNutzungsrichtlinien%2$s von OpenAI können wir keine SEO-Titel für deine Seite erstellen. Wenn du beabsichtigst, KI zu nutzen, vermeide bitte die Verwendung von expliziten, gewalttätigen oder sexuell eindeutigen Inhalten. %3$sMehr darüber erfahren, wie du deine Seite konfigurierst, um sicherzustellen, dass du mit KI die besten Ergebnisse erzielst%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Aufgrund der strengen ethischen Richtlinien und %1$sNutzungsrichtlinien%2$s von OpenAI können wir keine Meta-Beschreibungen für deine Seite erstellen. Wenn du beabsichtigst, KI zu nutzen, vermeide bitte die Verwendung von expliziten, gewalttätigen oder sexuell eindeutigen Inhalten. %3$sMehr darüber erfahren, wie du deine Seite konfigurierst, um sicherzustellen, dass du mit KI die besten Ergebnisse erzielst%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Um diese Funktion nutzen zu können, benötigst du ein aktives Abonnement von %1$s. Bitte %3$saktiviere dein Abonnement in %2$s%4$s oder %5$serhalte ein neues %1$s Abonnement%6$s. Klicke anschließend auf den Button zum Aktualisieren dieser Seite, damit die Funktion korrekt funktioniert. Dies kann bis zu 30 Sekunden dauern."],"Refresh page":["Seite aktualisieren"],"Not enough content":["Nicht genug Inhalt"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Bitte versuche es später erneut. Wenn das Problem weiterhin besteht, %1$skontaktiere bitte unser Support-Team%2$s!"],"Something went wrong":["Etwas ist schiefgelaufen"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Es scheint, dass bei der Verbindung eine Zeitüberschreitung aufgetreten ist. Bitte überprüfe deine Internetverbindung und versuche es später erneut. Sollte das Problem weiterhin bestehen, %1$skontaktiere bitte unser Support-Team%2$s"],"Connection timeout":["Zeitüberschreitung der Verbindung"],"Use AI":["KI verwenden"],"Close modal":["Modal schließen"],"Learn more about AI (Opens in a new browser tab)":["Mehr über KI erfahren (Öffnet in einem neuen Browser-Tab)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitel%3$s: Deine Seite hat noch keinen Titel. %2$sFüge einen hinzu%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitel%2$s: Deine Seite hat einen Titel. Gut gemacht!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sVerteilung der Keyphrase%3$s: %2$sVerwende deine Keyphrase oder deren Synonyme im Text, damit wir die Verteilung der Keyphrase prüfen können%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sVerteilung der Keyphrase%2$s: Gut gemacht!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sVerteilung der Keyphrase%3$s: Ungleichmäßig. Einige Textabschnitte enthalten weder die Keyphrase noch deren Synonyme. %2$sVerteile diese gleichmäßiger%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sVerteilung der Keyphrase%3$s: Sehr ungleichmäßig. Viele Textabschnitte enthalten weder die Keyphrase noch deren Synonyme. %2$sVerteile diese gleichmäßiger%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Du nutzt nicht zu viele komplexe Worte, was deinen Text leicht zu lesen macht. Gute Arbeit!"],"Word complexity":["Komplexität der Wörter"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s der Worte in deinem Text werden als komplex eingestuft. %3$sVersuche, kürzere und gebräuchlichere Wörter zu verwenden, um die Lesbarkeit zu erhöhen%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAusrichtung%3$s: Es gibt einen langen Abschnitt mit mittig ausgerichtetem Text. %2$sWir empfehlen, ihn linksbündig auszurichten%3$s.","%1$sAusrichtung%3$s: Es gibt %4$s lange Abschnitte mit mittig ausgerichtetem Text. %2$sWir empfehlen, sie linksbündig auszurichten%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAusrichtung%3$s: Es gibt einen langen Abschnitt mit mittig ausgerichtetem Text. %2$sWir empfehlen, ihn rechtsbündig auszurichten%3$s.","%1$sAusrichtung%3$s: Es gibt %4$s lange Abschnitte mit mittig ausgerichtetem Text. %2$sWir empfehlen, sie rechtsbündig auszurichten.%3$s"],"Select image":["Bild auswählen"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Vielleicht weißt du es gar nicht, aber möglicherweise gibt es Seiten auf deiner Website, die nicht verlinkt sind. Das ist ein SEO-Problem, denn es ist schwierig für Suchmaschinen, Seiten zu finden, die nicht verlinkt sind. Es ist also schwieriger für sie zu ranken. Wir nennen diese Seiten verwaiste Inhalte. In diesem Training finden wir die verwaisten Inhalte auf deiner Website und helfen dir, diese schnell mit Links zu versehen, damit sie eine Chance auf ein gutes Ranking haben!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Zeit, ein paar Links hinzuzufügen! Unten siehst du eine Liste mit deinen verwaisten Artikeln. Unter jedem Artikel findest du Vorschläge für verwandte Seiten, von denen aus du einen Link hinzufügen kannst. Achte beim Hinzufügen des Links darauf, dass du ihn in einen relevanten Satz einfügst, der mit deinem verwaisten Artikel zusammenhängt. Füge so lange Links zu den verwaisten Artikeln hinzu, bis du mit der Anzahl der Links zufrieden bist, die auf diese Artikel verweisen."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Es ist Zeit, ein paar Links hinzuzufügen! Unten siehst du eine Liste mit deinen Cornerstone-Inhalten. Unter jedem Cornerstone-Inhalt findest du Vorschläge für Artikel, von denen aus du einen Link hinzufügen kannst. Wenn du den Link hinzufügst, achte darauf, dass du ihn in einen relevanten Satz einfügst, der mit deinem Cornerstone-Artikel zusammenhängt. Füge so viele Links aus verwandten Artikeln hinzu, bis die meisten internen Links auf deine Cornerstone-Inhalte verweisen."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Einige Artikel auf deiner Website sind %1$sdie%2$s wichtigsten. Sie beantworten die Fragen der Besucher und lösen ihre Probleme. Sie verdienen es also, zu ranken! In %3$s nennen wir diese Cornerstone-Artikel. Eine der Möglichkeiten, sie hoch zu platzieren, besteht darin, dass genügend Links auf sie verweisen. Mehr Links signalisieren den Suchmaschinen, dass diese Artikel wichtig und wertvoll sind. In diesem Training helfen wir dir, deinen Cornerstone-Artikel Links hinzuzufügen!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Sobald du ein wenig mehr Text hinzugefügt hast, können wir den Formalitätsgrad deines Textes bewerten."],"Overall, your text appears to be %1$s%3$s%2$s.":["Insgesamt scheint dein Text %1$s%3$s%2$s zu sein."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Die Zapier-Integration wird in 20.7 (Erscheinungsdatum 9. Mai) aus %1$s entfernt. Wenn du Fragen hast, wende dich bitte an %2$s."],"Maximum heading level":["Maximale Überschriftenebene"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Du hast die Link-Vorschläge deaktiviert, die erforderlich sind, damit Relevante Links funktionieren. Wenn du Relevante Links hinzufügen möchtest, gehe bitte zu Seitenfunktionen und aktiviere Link-Vorschläge."],"Schema":["Schema"],"Meta tags":["Meta-Tags"],"Not available":["Nicht verfügbar"],"Checks":["Prüfungen"],"Focus Keyphrase":["Fokus-Keyphrase"],"Good":["Gut"],"No index":["Nicht indexieren"],"Front-end SEO inspector":["Front-end SEO inspector"],"Focus keyphrase not set":["Fokus-Keyphrase nicht gesetzt"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Sobald du deinen Zap in deinem %s-Dashboard veröffentlicht hast, kannst du überprüfen, ob er aktiv und mit deiner Website verbunden ist."],"Reset API key":["API-Schlüssel zurücksetzen"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Du bist derzeit mit %s mit dem folgenden API-Schlüssel verbunden. Wenn du die Verbindung mit einem anderen API-Schlüssel wiederherstellen möchtest, kannst du deinen Schlüssel unten zurücksetzen."],"Your API key":["Dein API-Schlüssel"],"Go to your %s dashboard":["Zu deinem %s-Dashboard gehen"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Du wurdest erfolgreich mit %1$s verbunden! Um deinen Zap zu verwalten, besuche bitte dein %2$s-Dashboard."],"Your %s dashboard":["Dein %s-Dashboard"],"Verify connection":["Verbindung überprüfen"],"Verify your connection":["Überprüfe deine Verbindung"],"Create a Zap":["Einen Zap erstellen"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Melde dich in deinem %1$s-Konto an und beginne mit der Erstellung deines ersten Zaps! Beachte, dass du nur 1 Zap mit einem Auslöseereignis von %2$s erstellen kannst. In diesem Zap kannst du eine oder mehrere Aktionen auswählen."],"%s API key":["%s-API-Schlüssel"],"You'll need this API key later on in %s when you're setting up your Zap.":["Du brauchst diesen API-Schlüssel später in %s, wenn du deinen Zap einrichtest."],"Copy your API key":["Deinen API-Schlüssel kopieren"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Um eine Verbindung einzurichten, kopiere den unten angegebenen API-Schlüssel und benutze ihn, um einen Zap in deinem %s-Konto zu erstellen und zu aktivieren."],"Manage %s settings":["%s-Einstellungen verwalten"],"Connect to %s":["Verbinden mit %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Bitte beachte: Damit dieses Training gut funktioniert, musst du das SEO-Datenoptimierungstool ausführen. Administratoren können dies ausführen unter %1$sSEO > Werkzeuge%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Du hast Links zu deinen verwaisten Artikeln hinzugefügt und die nicht mehr relevanten Artikel bereinigt. Gute Arbeit! Wirf einen Blick auf die folgende Zusammenfassung und freu dich über das, was du erreicht hast!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Prüfe die Inhalte in dieser Liste kritisch und nimm die notwendigen Aktualisierungen vor. Wenn du Hilfe bei der Aktualisierung benötigst, haben wir einen sehr %1$snützlichen Blogbeitrag, der dich auf dem ganzen Weg begleiten kann%2$s (Anklicken, um ihn in einem neuen Tab zu öffnen)"],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sDu benötigst mehr Unterstützung? Im folgenden Leitfaden haben wir jeden Schritt detailliert beschrieben: %2$sSo benutzt du das %7$s Training für verwaiste Inhalte%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Du hast soeben dafür gesorgt, dass deine besten Inhalte leicht auffindbar sind und mit größerer Wahrscheinlichkeit gefunden werden! Weiter so! Vergiss nicht, von Zeit zu Zeit zu überprüfen, ob deine Cornerstone-Inhalte genügend Links erhalten!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Wirf einen Blick auf die folgende Liste. Haben deine Cornerstone-Inhalte (markiert mit %1$s) die meisten internen Links, die auf sie zeigen? Klicke auf den Button Optimieren, wenn du der Meinung bist, dass ein Cornerstone-Inhalt mehr Links benötigt. Dadurch wird der Beitrag zum nächsten Schritt gebracht."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Haben alle deine Cornerstone-Inhalte grüne Punkte? Um die besten Ergebnisse zu erzielen, solltest du diejenigen bearbeiten, die keine haben!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Welche Artikel möchtest du am höchsten platzieren? Welche würden deine Leser am nützlichsten und vollständigsten finden? Klicke auf den nach unten zeigenden Pfeil und suche nach Artikeln, die diese Kriterien erfüllen. Die von dir ausgewählten Artikel werden von uns automatisch als Cornerstone-Inhalte markiert."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sBenörigst du mehr Unterstützung? Wir haben jeden Schritt detailliert beschrieben: %2$sSo verwendest du das %7$sCornerstone-Training%3$s%4$s%5$s verwenden.%6$s"],"Yoast Table of Contents":["Yoast Inhaltsverzeichnis"],"Yoast Related Links":["Yoast Relevante Links"],"Finish optimizing":["Optimierung abschließen"],"You've finished adding links to this article.":["Sie haben das Hinzufügen von Links zu diesem Artikel abgeschlossen."],"Optimize":["Optimieren"],"Added to next step":["Zum nächsten Schritt hinzugefügt"],"Choose cornerstone articles...":["Wähle die Cornerstone-Artikel ..."],"Loading data...":["Lade Daten …"],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Du hast bisher keine Beiträge innerhalb dieses Workouts aufgeräumt oder aktualisiert. Sobald du das tust, wird hier eine Zusammenfassung deiner Arbeit erscheinen."],"Skipped":["Übersprungen"],"Hidden from search engines.":["Vor Suchmaschinen verborgen."],"Removed":["Entfernt"],"Improved":["Verbessert"],"Resolution":["Auflösung"],"Loading redirect options...":["Umleitungs-Optionen laden..."],"Remove and redirect":["Entfernen und umleiten"],"Custom url:":["Individuelle URL:"],"Related article:":["Verwandter Beitrag:"],"Home page:":["Homepage:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Du bist dabei, %1$s%2$s%3$s zu entfernen. Um 404-Fehler auf deiner Website zu vermeiden, solltest du es auf eine andere Seite deiner Website umleiten. Wohin möchtest du umleiten?"],"SEO Workout: Remove article":["SEO-Workout: Beitrag entfernen"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Das sieht alles gut aus! Wir haben keine Beiträge auf deiner Website gefunden, die älter als 6 Monate sind und zu wenige Links auf deine Website erhalten. Komm später wieder für neue Vorschläge zum Aufräumen!"],"Hide from search engines":["Vor Suchmaschinen verbergen"],"Improve":["Verbessern"],"Are you sure you wish to hide this article from search engines?":["Bist du sicher, dass du diesen Beitrag vor Suchmaschinen verbergen willst?"],"Action":["Aktion"],"You've hidden this article from search engines.":["Du hast diesen Beitrag vor Suchmaschinen verborgen."],"You've removed this article.":["Du hast diesen Beitrag entfernt."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Du hast momentan keine Beiträge zum Verbessern ausgewählt. Wähle in den vorherigen Schritten ein paar verwaiste Beiträge aus, um Links hinzuzufügen und wir werden dir hier Vorschläge für Links anzeigen."],"Loading link suggestions...":["Link-Vorschläge laden..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Wir haben keine Vorschläge für diesen Beitrag gefunden, aber du kannst natürlich trotzdem Links zu Beiträgen hinzufügen, die du für relevant hältst."],"Skip":["Überspringen"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Du hast keine Beiträge für diesem Schritt ausgewählt. Du kannst das im vorherigen Schritt tun."],"Is it up-to-date?":["Ist das der neueste Stand?"],"Last Updated":["Zuletzt aktualisiert"],"You've moved this article to the next step.":["Du hast diesen Beitrag zu dem nächsten Schritt verschoben."],"Unknown":["Unbekannt"],"Clear summary":["Zusammenfassung leeren"],"Add internal links towards your orphaned articles.":["Füge interne Links auf deine verwaisten Beiträge hinzu."],"Should you update your article?":["Solltest du deinen Beitrag aktualisieren?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Ihre Website enthält oft viele Inhalte, die einmal erstellt wurden und auf die du danach nie wieder zurückblickst. Es ist wichtig, dass Sie diese durchgehen und sich fragen, ob diese Inhalte noch relevant für Ihre Website sind. Sollte ich sie verbessern oder entfernen?"],"Start: Love it or leave it?":["Start: Love it or leave it?"],"Clean up your unlinked content to make sure people can find it":["Räume deine nicht verlinkten Inhalte auf, um sicherzustellen, dass jeder sie finden kann"],"I've finished this workout":["Ich habe dieses Training beendet"],"Reset this workout":["Dieses Training zurücksetzen"],"Well done!":["Gut gemacht!"],"Add internal links towards your cornerstones":["Füge interne Links zu deinen Cornerstone-Inhalten hinzu"],"Check the number of incoming internal links of your cornerstones":["Überprüfe die Anzahl der eingehenden internen Links deiner Cornerstone-Inhalte"],"Start: Choose your cornerstones!":["Start: Wähle deine Cornerstone-Inhalte!"],"The cornerstone approach":["Der Cornerstone-Ansatz"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Bitte beachte: Damit dieses Training gut funktioniert und dir Verlinkungsvorschläge anbieten kann, musst du das SEO-Datenoptimierungstool ausführen. Administratoren können dies unter %1$sSEO > Werkzeuge%2$s ausführen."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Bitte beachten: Dein Administrator hat die Cornerstone-Funktion in den SEO-Einstellungen deaktiviert. Wenn du dieses Training nutzen möchtest, sollte sie aktiviert sein."],"I've finished this step":["Ich habe diesen Schritt abgeschlossen"],"Revise this step":["Diesen Schritt überarbeiten"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Wir konnten keine internen Links auf Ihren Seiten finden. Entweder haben Sie noch keine internen Links zu Ihren Inhalten hinzugefügt oder Yoast SEO hat sie nicht indiziert. Sie können Yoast SEO Ihre Links indizieren lassen, indem Sie die SEO-Datenoptimierung unter SEO > Werkzeuge ausführen."],"Incoming links":["Eingehende Links"],"Edit to add link":["Bearbeiten, um Link hinzuzufügen"],"%s incoming link":["%s eingehender Link","%s eingehende Links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Du hast derzeit keine Artikel als Cornerstone-Inhalt markiert. Wenn du deine Artikel als Cornerstone markierst, werden sie hier angezeigt."],"Focus keyphrase":["Fokus-Keyphrase"],"Article":["Artikel"],"Readability score":["Lesbarkeitsbewertung"],"SEO score":["SEO-Wert"],"Copy failed":["Kopieren fehlgeschlagen"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Verbessere die Rankings all deiner Cornerstone-Inhalte mit diesem %1$sSchritt-für-Schritt-Training!%2$s"],"Rank with articles you want to rank with":["Erziele ein gutes Ranking mit Artikeln, mit denen du auch ranken willst"],"Descriptive text":["Beschreibungstext"],"Show the descriptive text":["Beschreibungstext anzeigen"],"Show icon":["Icon anzeigen"],"Yoast Estimated Reading Time":["Yoast Voraussichtliche Lesedauer"],"Shows an estimated reading time based on the content length.":["Zeit die voraussichtliche Lesedauer basierend auf der Länge des Inhalts an."],"reading time":["Lesezeit"],"content length":["Länge des Inhalts"],"Estimated reading time:":["Voraussichtliche Lesedauer:"],"minute":["Minute","Minuten"],"Settings":["Einstellungen"],"OK":["OK"],"Close":["schliessen"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Die erste echte All-in-One-SEO-Lösung für WordPress, einschließlich On-Page Inhaltsanalyse, XML-Sitemaps und vielem mehr."],"Type":["Typ"],"Team Yoast":["Team Yoast"],"Orphaned content":["Verwaister Inhalt"],"Synonyms":["Synonyme"],"Internal linking suggestions":["Vorschläge zur internen Verlinkung"],"Enter a related keyphrase to calculate the SEO score":["Gib eine relevante Keyphrase ein, um den SEO-Wert zu berechnen"],"Related keyphrase":["Ähnliche Keyphrase"],"Add related keyphrase":["Relevante Keyphrase hinzufügen"],"Analysis results":["Analyse-Ergebnisse"],"Help on choosing the perfect keyphrase":["Hilfe bei der Wahl einer perfekten Keyphrase"],"Help on keyphrase synonyms":["Hilfe bei Synonymen zur Keyphrase"],"Keyphrase":["Keyphrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Neue URL: {{link}}%s{{/link}}"],"Undo":["Rückgängig"],"Redirect created":["Umleitung angelegt"],"%s just created a redirect from the old URL to the new URL.":["%s hat gerade eine Umleitung von der alten URL zur neuen URL erstellt."],"Old URL: {{link}}%s{{/link}}":["Alte URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Keyphrase-Synonyme"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Es ist ein Fehler aufgetreten: Die Premium-SEO-Analyse funktioniert nicht wie erwartet. Bitte {{activateLink}}aktiviere dein Abonnement in MyYoast{{/activateLink}} und {{reloadButton}}lade diese Seite neu{{/reloadButton}}, damit sie richtig funktioniert."],"seo":["SEO"],"internal linking":["Interne Verlinkung"],"site structure":["Website-Struktur"],"We could not find any relevant articles on your website that you could link to from your post.":["Wir konnten keine relevanten Beiträge auf deiner Website finden, auf die du von deinem Beitrag aus verlinken könntet."],"Load suggestions":["Vorschläge laden"],"Refresh suggestions":["Vorschläge neu laden"],"Write list…":["Schreibe eine Liste…"],"Adds a list of links related to this page.":["Fügt eine Liste von mit dieser Seite verwandten Links hinzu."],"related posts":["Verwandte Beiträge"],"related pages":["Verwandte Seiten"],"Adds a table of contents to this page.":["Fügt dieser Seite ein Inhaltsverzeichnis hinzu."],"links":["Links"],"toc":["Inhaltsverzeichnis"],"Copy link":["Link kopieren"],"Copy link to suggested article: %s":["Link zum vorgeschlagenen Artikel kopieren: %s"],"Add a title to your post for the best internal linking suggestions.":["Füge deinem Beitrag eine Überschrift hinzu, für die besten internen Link-Vorschläge."],"Add a metadescription to your post for the best internal linking suggestions.":["Füge deinem Beitrag eine Meta-Beschreibung hinzu, für die besten internen Link-Vorschläge."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Füge deinem Beitrag eine Überschrift und eine Meta-Beschreibung hinzu, für die besten internen Link-Vorschläge."],"Also, add a title to your post for the best internal linking suggestions.":["Füge deinem Beitrag auch eine Überschrift hinzu, für die besten internen Link-Vorschläge."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Füge deinem Beitrag auch eine Meta-Beschreibung hinzu, für die besten internen Link-Vorschläge."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Füge deinem Beitrag auch eine Überschrift und eine Meta-Beschreibung hinzu, für die besten internen Link-Vorschläge."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Hast du deiner Seite einmal etwas mehr Inhalt hinzugefügt, werden wir dir hier eine Liste mit verwandten Inhalten anzeigen, die du in deinem Beitrag verlinken kannst."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Um die Struktur deiner Website zu verbessern, denk darüber nach, andere relevante Beiträge oder Seiten auf deiner Website zu verlinken."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Es dauert ein paar Sekunden, um die eine Liste verwandter Inhalte anzuzeigen, die du verlinken kannst. Die Vorschläge werden hier angezeigt, sobald sie uns vorliegen."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Lies unsere Anleitung über interne Verlinkung für SEO{{/a}}, um mehr zu erfahren."],"Copied!":["Kopiert!"],"Not supported!":["Nicht unterstützt!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Versuchst du, mehrere verwandte Keyphrasen zu benutzen? Du solltest sie separat hinzufügen."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Deine Keyphrase ist zu lang. Die Länge kann maximal 191 Zeichen betragen."],"Add as related keyphrase":["Verwandte Keyphrase hinzufügen"],"Added!":["Hinzugefügt!"],"Remove":["Entfernen"],"Table of contents":["Inhaltsverzeichnis"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Wir müssen die SEO-Daten deiner Website optimieren, damit wir die die besten %1$sLink-Vorschläge%2$s anbieten können. %3$sSEO-Datenoptimierung starten%4$s"],"Create a Zap in %s":["Einen Zap in %s erstellen"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-el.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-el.json new file mode 100644 index 00000000..6c83be98 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-el.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"el_GR"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Το αίτημα επέστÏεψε με το ακόλουθο σφάλμα: \"%s\""],"X share preview":["ΠÏοεπισκόπηση διαμοιÏÎ±ÏƒÎ¼Î¿Ï X"],"AI X title generator":["ΓεννήτÏια τίτλου AI X"],"AI X description generator":["ΓεννήτÏια πεÏιγÏαφής AI X"],"X preview":["ΠÏοεπισκόπηση X"],"Please enter a valid focus keyphrase.":["Εισαγάγετε μια έγκυÏη φÏάση-κλειδί εστίασης."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Για να χÏησιμοποιήσετε αυτήν τη δυνατότητα, ο ιστότοπός σας Ï€Ïέπει να είναι δημόσια Ï€Ïοσβάσιμος. Αυτό ισχÏει τόσο για δοκιμαστικοÏÏ‚ ιστότοπους όσο και για πεÏιπτώσεις όπου το REST API σας Ï€ÏοστατεÏεται με κωδικό Ï€Ïόσβασης. Βεβαιωθείτε ότι ο ιστότοπός σας είναι δημόσια Ï€Ïοσβάσιμος και Ï€Ïοσπαθήστε ξανά. Εάν το Ï€Ïόβλημα παÏαμένει, %1$sεπικοινωνήστε με την ομάδα υποστήÏιξης%2$s."],"Yoast AI cannot reach your site":["Το Yoast AI δεν μποÏεί να επικοινωνήσει με τον ιστότοπο σας"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Για να αποκτήσετε Ï€Ïόσβαση σε αυτήν τη δυνατότητα, χÏειάζεστε ενεÏγές συνδÏομές %2$s και %3$s. %5$sαπενεÏγοποιήστε τις συνδÏομές σας στο %1$s%6$s ή %7$s αποκτήστε μια νέα %4$s%8$s. Στη συνέχεια, ανανεώστε αυτήν τη σελίδα για να λειτουÏγεί σωστά η λειτουÏγία, κάτι που μποÏεί να διαÏκέσει έως και 30 δευτεÏόλεπτα."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Η δημιουÏγία τίτλων TN απαιτεί να ενεÏγοποιηθεί η ανάλυση SEO Ï€Ïιν από τη χÏήση. Για να το ενεÏγοποιήσετε, μεταβείτε στις %2$sδυνατότητες του ιστότοπου%1$s%3$s, ενεÏγοποιήστε την ανάλυση SEO και κάντε κλικ στην 'Αποθήκευση αλλαγών'. Εάν η ανάλυση SEO είναι απενεÏγοποιημένη στο Ï€Ïοφίλ χÏήστη του WordPress, αποκτήστε Ï€Ïόσβαση στο Ï€Ïοφίλ σας και ενεÏγοποιήστε το εκεί. Επικοινωνήστε με τον διαχειÏιστή σας εάν δεν έχετε Ï€Ïόσβαση σε αυτές τις Ïυθμίσεις."],"Social share preview":["ΠÏοεπισκόπηση διαμοιÏÎ±ÏƒÎ¼Î¿Ï ÎºÎ¿Î¹Î½Ï‰Î½Î¹ÎºÏŽÎ½ δικτÏων"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Για να συνεχίσετε να χÏησιμοποιείτε τη λειτουÏγία Yoast AI, μειώστε τη συχνότητα των αιτημάτων σας. Το %1$sάÏθÏο βοήθειας%2$s μας παÏέχει οδηγίες για τον αποτελεσματικό σχεδιασμό και τον Ïυθμό των αιτημάτων σας για μια βελτιστοποιημένη Ïοή εÏγασίας."],"You've reached the Yoast AI rate limit.":["Έχετε φτάσει το ÏŒÏιο Ï€Î¿ÏƒÎ¿ÏƒÏ„Î¿Ï Yoast AI."],"Allow":["ΕπιτÏέπεται"],"Deny":["ΆÏνηση"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Για να δείτε το βίντεο, χÏειάζεται να επιτÏέψετε το %1$s να φοÏτώσει τα ενσωματωμένα βίντεο από %2$s."],"Text generated by AI may be offensive or inaccurate.":["Το κείμενο που δημιουÏγείται από AI μποÏεί να είναι Ï€Ïοσβλητικό ή ανακÏιβές."],"(Opens in a new browser tab)":["(Ανοίγει σε νέα καÏτέλα)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["ΕπιταχÏνετε τη Ïοή εÏγασίας σας με τη δημιουÏγική Τεχνητή ÎοημοσÏνη. Αποκτήστε Ï€Ïοτάσεις τίτλων και πεÏιγÏαφών υψηλής ποιότητας για την αναζήτηση και την Ï€Ïοβολή στα κοινωνική δίκτυα. %1$sΜάθετε πεÏισσότεÏα%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["ΔημιουÏγήστε τίτλους και πεÏιγÏαφές με το Yoast AI!"],"New to %1$s":["Îέο στο %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["ΕγκÏίνω τους %1$sÎŒÏους των ΥπηÏεσιών%2$s & %3$sΠολιτική ΑποÏÏήτου%4$s της υπηÏεσίας Yoast AI. Αυτό πεÏιλαμβάνει τη συναίνεση στη συλλογή και χÏήση δεδομένων για τη βελτίωση της εμπειÏίας χÏήστη."],"Start generating":["ΈναÏξη δημιουÏγίας"],"Yes, revoke consent":["Îαι, ανάκληση συγκατάθεσης"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Με την ανάκληση της συγκατάθεσή σας, δεν θα έχετε πλέον Ï€Ïόσβαση στις λειτουÏγίες Yoast AI. Είστε βέβαιοι ότι θέλετε να ανακαλέσετε τη συγκατάθεσή σας;"],"Something went wrong, please try again later.":["Κάτι πήγε στÏαβά, παÏακαλοÏμε δοκιμάστε ξανά αÏγότεÏα."],"Revoke AI consent":["Ανάκληση συγκατάθεσης AI"],"AI title generator":["ΓεννήτÏια τίτλου TN"],"AI description generator":["ΓεννήτÏια πεÏιγÏαφής TN"],"AI social title generator":["ΓεννήτÏια τίτλου AI για κοινωνικά δίκτυα"],"AI social description generator":["ΓεννήτÏια πεÏιγÏαφής AI για κοινωνικά δίκτυα"],"Dismiss":["ΑπόÏÏιψη"],"Don’t show again":["Îα μην εμφανιστεί ξανά"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sΣυμβουλή%2$s: Βελτιώστε την ακÏίβεια των τίτλων AI που δημιουÏγείτε γÏάφοντας πεÏισσότεÏο πεÏιεχόμενο στη σελίδα σας."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sΣυμβουλή%2$s: Βελτιώστε την ακÏίβεια των πεÏιγÏαφών AI που δημιουÏγείτε γÏάφοντας πεÏισσότεÏο πεÏιεχόμενο στη σελίδα σας."],"Try again":["ΠÏοσπαθήστε ξανά"],"Social preview":["ΠÏοεπισκόπηση κοινωνικής δικτÏωσης"],"Desktop result":["Αποτέλεσμα επιτÏαπέζιου"],"Mobile result":["Mobile αποτέλεσμα"],"Apply %s description":[],"Apply %s title":[],"Next":["Επόμενο"],"Previous":["ΠÏοηγοÏμενο"],"Generate 5 more":["ΔημιουÏγήστε άλλα 5"],"Google preview":["ΠÏοεπισκόπηση Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Λόγω των αυστηÏών δεοντολογικών οδηγιών του OpenAI και των %1$sπολιτικών χÏήσης%2$s, δεν μποÏοÏμε να δημιουÏγήσουμε τίτλους SEO για τη σελίδα σας. Εάν σκοπεÏετε να χÏησιμοποιήσετε τεχνητή νοημοσÏνη, αποφÏγετε τη χÏήση άσεμνου, βίαιου ή ÏƒÎµÎ¾Î¿Ï…Î±Î»Î¹ÎºÎ¿Ï Ï€ÎµÏιεχομένου. %3$sΔιαβάστε πεÏισσότεÏα σχετικά με τον Ï„Ïόπο διαμόÏφωσης της σελίδας σας για να βεβαιωθείτε ότι έχετε τα καλÏτεÏα αποτελέσματα με την AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Λόγω των αυστηÏών δεοντολογικών οδηγιών του OpenAI και των %1$sπολιτικών χÏήσης%2$s, δεν μποÏοÏμε να δημιουÏγήσουμε μετα-πεÏιγÏαφές για τη σελίδα σας. Εάν σκοπεÏετε να χÏησιμοποιήσετε τεχνητή νοημοσÏνη, αποφÏγετε τη χÏήση άσεμνου, βίαιου ή ÏƒÎµÎ¾Î¿Ï…Î±Î»Î¹ÎºÎ¿Ï Ï€ÎµÏιεχομένου. %3$sΔιαβάστε πεÏισσότεÏα σχετικά με τον Ï„Ïόπο διαμόÏφωσης της σελίδας σας για να βεβαιωθείτε ότι έχετε τα καλÏτεÏα αποτελέσματα με την AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Για να αποκτήσετε Ï€Ïόσβαση σε αυτήν τη δυνατότητα, χÏειάζεστε μια ενεÏγή συνδÏομή %1$s. %3$sενεÏγοποιήστε τη συνδÏομή σας στο %2$s%4$s ή %5$s αποκτήστε μια νέα συνδÏομή %1$s%6$s. Στη συνέχεια, κάντε κλικ στο κουμπί για να ανανεώσετε αυτήν τη σελίδα για να λειτουÏγήσει σωστά η λειτουÏγία, κάτι που μποÏεί να διαÏκέσει έως και 30 δευτεÏόλεπτα."],"Refresh page":["Ανανέωση σελίδας"],"Not enough content":["ΧωÏίς αÏκετό πεÏιεχόμενο"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["ΠαÏακαλοÏμε δοκιμάστε ξανά αÏγότεÏα. Εάν το Ï€Ïόβλημα παÏαμένει, %1$sεπικοινωνήστε με την ομάδα υποστήÏιξης%2$s!"],"Something went wrong":["ΠαÏουσιάστηκε κάποιο σφάλμα"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Φαίνεται ότι Ï€Ïοέκυψε ένα χÏονικό ÏŒÏιο σÏνδεσης. Ελέγξτε τη σÏνδεσή σας στο διαδίκτυο και δοκιμάστε ξανά αÏγότεÏα. Εάν το Ï€Ïόβλημα παÏαμένει, %1$sεπικοινωνήστε με την ομάδα υποστήÏιξης%2$s"],"Connection timeout":["ΧÏονικό ÏŒÏιο σÏνδεσης"],"Use AI":["ΧÏήση AI"],"Close modal":["Κλείσιμο παÏαθÏÏου"],"Learn more about AI (Opens in a new browser tab)":["Μάθετε πεÏισσότεÏα για την Τεχνητή ÎοημοσÏνη (Ανοίγει σε νέα καÏτέλα του Ï€ÏογÏάμματος πεÏιήγησης)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sΤίτλος%3$s: Η σελίδα σας δεν έχει ακόμη τίτλο. %2$sΠÏοσθέστε έναν%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sΤίτλος%2$s: Η σελίδα σας έχει τίτλο. ΜπÏάβο!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sΚατανομή φÏάσης-κλειδί%3$s: %2$sΣυμπεÏιλάβετε τη φÏάση-κλειδί ή συνώνυμά της στο κείμενο ώστε να αναλÏσουμε την κατανομή της φÏάσης-κλειδί%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sΚατανομή φÏάσης-κλειδιοÏ%2$s: Καλή δουλειά!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sΚατανομή φÏάσης-κλειδιοÏ%3$s: Άνιση. ΟÏισμένα μέÏη του κειμένου σας δεν πεÏιέχουν τη φÏάση-κλειδί ή τα συνώνυμά της. %2$sΚατανείμετε τα πιο ομοιόμοÏφα%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sΚατανομή φÏάσης-κλειδιοÏ%3$s: Î Î¿Î»Ï Î¬Î½Î¹ÏƒÎ·. Μεγάλα μέÏη του κειμένου σας δεν πεÏιέχουν τη φÏάση-κλειδί ή συνώνυμά της. %2$sΚατανείμετε τα πιο ομοιόμοÏφα%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Δεν χÏησιμοποιείτε πάÏα πολλές σÏνθετες λέξεις, γεγονός που καθιστά το κείμενό σας εÏκολο στην ανάγνωση. Καλή δουλειά!"],"Word complexity":["Πολυπλοκότητα λέξεων"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s από τις λέξεις στο κείμενό σας θεωÏοÏνται σÏνθετες. %3$sΠÏοσπαθήστε να χÏησιμοποιήσετε μικÏότεÏες και πιο οικείες λέξεις για να βελτιώσετε την αναγνωσιμότητα%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sΣτοίχιση%3$s: ΥπάÏχει μια μεγάλη ενότητα κειμένου με στοίχιση στο κέντÏο. %2$sΣυνιστοÏμε να την κάνετε με αÏιστεÏή στοίχιση%3$s.","%1$sΣτοίχιση%3$s: ΥπάÏχουν %4$s μεγάλες ενότητες κειμένου με στοίχιση στο κέντÏο. %2$sΣυνιστοÏμε να τις κάνετε αÏιστεÏή στοίχιση%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sΣτοίχιση%3$s: ΥπάÏχει μια μεγάλη ενότητα κειμένου με στοίχιση στο κέντÏο. %2$sΣυνιστοÏμε να την κάνετε δεξιά στοίχιση%3$s.","%1$sΣτοίχιση%3$s: ΥπάÏχουν %4$s μεγάλες ενότητες κειμένου με στοίχιση στο κέντÏο. %2$sΣυνιστοÏμε να τις κάνετε δεξιά στοίχιση%3$s."],"Select image":["Επιλέξτε εικόνα"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["ΜποÏεί να μην το γνωÏίζετε καν, αλλά μποÏεί να υπάÏχουν σελίδες στον ιστότοπό σας που δεν λαμβάνουν συνδέσμους. Αυτό είναι ένα ζήτημα SEO, επειδή είναι δÏσκολο για τις μηχανές αναζήτησης να βÏουν σελίδες που δεν λαμβάνουν συνδέσμους. Έτσι, είναι πιο δÏσκολο για αυτοÏÏ‚ να τις κατατάξουν. Ονομάζουμε αυτές τις σελίδες οÏφανό πεÏιεχόμενο. Σε αυτήν την άσκηση, βÏίσκουμε το οÏφανό πεÏιεχόμενο στον ιστότοπό σας και σας καθοδηγοÏμε στη γÏήγοÏη Ï€Ïοσθήκη συνδέσμων σε αυτό, ώστε να έχει την ευκαιÏία να ταξινομηθεί!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["ÎÏα να Ï€Ïοσθέσετε μεÏικοÏÏ‚ συνδέσμους! ΠαÏακάτω, βλέπετε μια λίστα με τα οÏφανά άÏθÏα σας. Κάτω από κάθε ένα, υπάÏχουν Ï€Ïοτάσεις για τις σχετικές σελίδες από τις οποίες θα μποÏοÏσατε να Ï€Ïοσθέσετε έναν σÏνδεσμο. Κατά την Ï€Ïοσθήκη του συνδέσμου, φÏοντίστε να τον εισάγετε σε σχετική Ï€Ïόταση που σχετίζεται με το οÏφανό άÏθÏο σας. Συνεχίστε να Ï€Ïοσθέτετε συνδέσμους σε κάθε ένα από τα οÏφανά άÏθÏα μέχÏι να είστε ικανοποιημένοι με τον αÏιθμό των συνδέσμων που δείχνουν Ï€Ïος αυτά."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["ÎÏα να Ï€Ïοσθέσετε μεÏικοÏÏ‚ συνδέσμους! ΠαÏακάτω, βλέπετε μια λίστα με βασικό πεÏιεχόμενο σας. Κάτω από κάθε βασικό πεÏιεχόμενο, υπάÏχουν Ï€Ïοτάσεις για άÏθÏα από τα οποία θα μποÏοÏσατε να Ï€Ïοσθέσετε έναν σÏνδεσμο. Κατά την Ï€Ïοσθήκη του συνδέσμου, φÏοντίστε να τον εισαγάγετε σε μια σχετική Ï€Ïόταση που σχετίζεται με το άÏθÏο βασικό πεÏιεχόμενο σας. Συνεχίστε να Ï€Ïοσθέτετε συνδέσμους από όσα σχετικά άÏθÏα χÏειάζεστε, έως ότου τα βασικά σας πεÏιεχόμενα έχουν τους πεÏισσότεÏους εσωτεÏικοÏÏ‚ συνδέσμους που δείχνουν Ï€Ïος αυτά."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["ΟÏισμένα άÏθÏα στον ιστότοπό σας είναι %1$sτα%2$s πιο σημαντικά. ΑπαντοÏν στις εÏωτήσεις των ανθÏώπων και λÏνουν τα Ï€Ïοβλήματά τους. ΆÏα, τους αξίζει η κατάταξη! Στο %3$s, ονομάζουμε αυτά τα άÏθÏα βασικό πεÏιεχόμενο. Ένας από τους Ï„Ïόπους για να τα κατατάξετε είναι να τους υποδείξετε αÏκετοÏÏ‚ συνδέσμους. ΠεÏισσότεÏοι σÏνδεσμοι σηματοδοτοÏν στις μηχανές αναζήτησης ότι αυτά τα άÏθÏα είναι σημαντικά και πολÏτιμα. Σε αυτήν την Ï€Ïοπόνηση, θα σας βοηθήσουμε να Ï€Ïοσθέσετε συνδέσμους στα άÏθÏα με το βασικό σας πεÏιεχόμενο!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Μόλις Ï€Ïοσθέσετε λίγο πεÏισσότεÏο κείμενο, θα μποÏοÏμε να σας ποÏμε το επίπεδο τυπικότητας του κειμένου σας."],"Overall, your text appears to be %1$s%3$s%2$s.":["Συνολικά, το κείμενό σας φαίνεται να είναι %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Η ενσωμάτωση του Zapier θα καταÏγηθεί από το %1$s στην έκδοση 20.7 (ημεÏομηνία κυκλοφοÏίας 9 ΜαÎου). Εάν έχετε εÏωτήσεις, απευθυνθείτε στο %2$s."],"Maximum heading level":["Μέγιστο επίπεδο επικεφαλίδας"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Έχετε απενεÏγοποιήσει τις Ï€Ïοτάσεις συνδέσμων, οι οποίες είναι απαÏαίτητες για να λειτουÏγήσουν οι σχετικοί σÏνδεσμοι. Εάν θέλετε να Ï€Ïοσθέσετε ΣχετικοÏÏ‚ συνδέσμους, μεταβείτε στις ΛειτουÏγίες ιστότοπου και ενεÏγοποιήστε τις Ï€Ïοτάσεις συνδέσμων."],"Schema":["Schema"],"Meta tags":["Μέτα ετικέτες"],"Not available":["Μη διαθέσιμο"],"Checks":["Έλεγχοι"],"Focus Keyphrase":["ΦÏάση-κλειδί εστίασης"],"Good":["Καλό"],"No index":["No index"],"Front-end SEO inspector":["ΕπιθεωÏητής SEO Front-end"],"Focus keyphrase not set":["Δεν έχει οÏιστεί φÏάση-κλειδί εστίασης"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Αφότου δημοσιεÏσετε το Zap σας στον πίνακα ελέγχου %s, μποÏείτε να ελέγξετε εάν είναι ενεÏγό και συνδεδεμένο στον ιστότοπό σας."],"Reset API key":["ΕπαναφοÏά API κλειδιοÏ"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Αυτήν τη στιγμή είστε συνδεδεμένοι στο %s χÏησιμοποιώντας το ακόλουθο κλειδί API. Εάν θέλετε να συνδεθείτε ξανά με διαφοÏετικό κλειδί API, μποÏείτε να επαναφέÏετε το κλειδί σας παÏακάτω."],"Your API key":["Το κλειδί σας API"],"Go to your %s dashboard":["Μεταβείτε στον πίνακα ελέγχου %s σας"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Έχετε συνδεθεί επιτυχώς στο %1$s! Για να διαχειÏιστείτε το Zap σας, επισκεφτείτε τον πίνακα ελέγχου %2$s."],"Your %s dashboard":["Η πίνακας ελέγχου σας %s"],"Verify connection":["Επιβεβαίωση σÏνδεσης"],"Verify your connection":["Επιβεβαιώστε την σÏνδεση σας"],"Create a Zap":["ΔημιουÏγία Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Συνδεθείτε στον λογαÏιασμό σας %1$s και ξεκινήστε να δημιουÏγείτε το Ï€Ïώτο σας Zap! Λάβετε υπόψη ότι μποÏείτε να δημιουÏγήσετε μόνο 1 Zap με ένα συμβάν ενεÏγοποίησης από %2$s. Μέσα σε αυτό το Zap μποÏείτε να επιλέξετε μία ή πεÏισσότεÏες ενέÏγειες."],"%s API key":["Κλειδί API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Θα χÏειαστείτε αυτό το κλειδί API αÏγότεÏα στο %s όταν Ïυθμίζετε το Zap σας."],"Copy your API key":["ΑντιγÏαφή του ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï ÏƒÎ±Ï‚ API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Για να Ïυθμίσετε μια σÏνδεση, βεβαιωθείτε ότι έχετε αντιγÏάψει το συγκεκÏιμένο κλειδί API παÏακάτω και το χÏησιμοποιείτε για να δημιουÏγήσετε και να ενεÏγοποιήσετε ένα Zap στον λογαÏιασμό σας %s."],"Manage %s settings":["ΔιαχείÏιση Ïυθμίσεων %s"],"Connect to %s":["Συνδεθείτε στο %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Σημείωση: Για να λειτουÏγήσει καλά αυτή η άσκηση, Ï€Ïέπει να εκτελέσετε το εÏγαλείο βελτιστοποίησης δεδομένων SEO. Οι διαχειÏιστές μποÏοÏν να το εκτελέσουν κάτω από %1$sSEO > ΕÏγαλεία%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Έχετε Ï€Ïοσθέσει συνδέσμους στα οÏφανά άÏθÏα σας και έχετε καθαÏίσει αυτά που δεν ήταν πλέον σχετικά. Καλή δουλειά! Ρίξτε μια ματιά στην παÏακάτω πεÏίληψη και γιοÏτάστε όσα καταφέÏατε!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Εξετάστε κÏιτικά το πεÏιεχόμενο αυτής της λίστας και κάντε τις απαÏαίτητες ενημεÏώσεις. Εάν χÏειάζεστε βοήθεια για την ενημέÏωση, έχουμε ένα Ï€Î¿Î»Ï %1$sχÏήσιμο άÏθÏο ιστολογίου που μποÏεί να σας καθοδηγήσει σε όλη τη διαδÏομή%2$s (κάντε κλικ για άνοιγμα σε νέα καÏτέλα)"],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sΧÏειάζεστε πεÏισσότεÏη καθοδήγηση; Έχουμε καλÏψει κάθε βήμα με πεÏισσότεÏες λεπτομέÏειες στον ακόλουθο οδηγό: %2$sΠώς να χÏησιμοποιήσετε την άσκηση%7$s οÏÏ†Î±Î½Î¿Ï Ï€ÎµÏιεχομένου%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Μόλις κάνατε το καλÏτεÏο πεÏιεχόμενό σας να είναι εÏκολο να βÏεθεί και πιο πιθανό να ταξινομηθεί! ΜπÏάβο! Από καιÏÏŒ σε καιÏÏŒ, θυμηθείτε να ελέγχετε εάν το βασικό σας πεÏιεχόεμνο λαμβάνει αÏκετοÏÏ‚ συνδέσμους!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Ρίξτε μια ματιά στην παÏακάτω λίστα. Το βασικό σας πεÏιεχόμενο (που επισημαίνονται με %1$s) έχουν τους πεÏισσότεÏους εσωτεÏικοÏÏ‚ συνδέσμους που δείχνουν Ï€Ïος αυτοÏÏ‚; Κάντε κλικ στο κουμπί Βελτιστοποίηση εάν πιστεÏετε ότι ένα βασικό πεÏιεχόμενο χÏειάζεται πεÏισσότεÏους συνδέσμους. Αυτό θα μετακινήσει το άÏθÏο στο επόμενο βήμα."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Έχουν όλα τα βασικά σας πεÏιεχόμενα έχουν Ï€Ïάσινες σφαίÏες; Για καλÏτεÏα αποτελέσματα, σκεφτείτε να επεξεÏγαστείτε αυτά που δεν το έχουν!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Ποια άÏθÏα θέλετε να κατατάξετε την υψηλότεÏη βαθμολογία; Ποια θα έβÏισκε το κοινό σας πιο χÏήσιμα και ολοκληÏωμένα; Κάντε κλικ στο βέλος που δείχνει Ï€Ïος τα κάτω και αναζητήστε άÏθÏα που ταιÏιάζουν σε αυτά τα κÏιτήÏια. Θα επισημάνουμε αυτόματα τα άÏθÏα που επιλέγετε από τη λίστα ως βασικό πεÏιεχόμενο."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sΧÏειάζεστε πεÏισσότεÏη καθοδήγηση; ΚαλÏψαμε κάθε βήμα με πεÏισσότεÏες λεπτομέÏειες στο: %2$sΤÏόπος χÏήσης της άσκησης%7$s Î²Î±ÏƒÎ¹ÎºÎ¿Ï Ï€ÎµÏιεχομένου%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Πίνακας πεÏιεχομένων Yoast"],"Yoast Related Links":["Σχετικοί σÏνδεσμοι με Yoast"],"Finish optimizing":["ΟλοκληÏώστε την βελτιστοποίηση"],"You've finished adding links to this article.":["ΟλοκληÏώσατε την Ï€Ïοσθήκη συνδέσμων σε αυτό το άÏθÏο."],"Optimize":["Βελτιστοποίηση"],"Added to next step":["ΠÏοστέθηκε στο επόμενο βήμα"],"Choose cornerstone articles...":["Επιλέξτε τα ακÏογωνιαία άÏθÏα σας..."],"Loading data...":["ΦόÏτωση δεδομένων..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Δεν έχετε καθαÏίσει ή ενημεÏώσει κάποια άÏθÏα σας ακόμη χÏησιμοποιώντας αυτή την άσκηση. Μόλις το κάνετε, μια σÏνοψη της δουλειάς σας θα εμφανιστεί εδώ."],"Skipped":["ΠαÏακάμφθηκε"],"Hidden from search engines.":["ΚÏυφό από τις μηχανές αναζήτησης."],"Removed":["ΑφαιÏέθηκε"],"Improved":["Βελτιώθηκε"],"Resolution":["Ανάλυση"],"Loading redirect options...":["ΦόÏτωση επιλογών ανακατεÏθυνσης..."],"Remove and redirect":["ΑφαιÏέθηκε και ανακατευθÏνθηκε"],"Custom url:":["ΠÏοσαÏμοσμένο url:"],"Related article:":["Σχετικό άÏθÏο:"],"Home page:":["ΑÏχική σελίδα:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["ΠÏόκειται να αφαιÏέσετε %1$s%2$s%3$s. Για να αποφÏγετε τα 404 στον ιστότοπο σας, θα Ï€Ïέπει να το ανακετευθÏνετε σε άλλη σελίδα του ιστότοπου σας. Που θέλετε να το ανακατευθείνετε;"],"SEO Workout: Remove article":["Εξάσκηση SEO: ΑφαίÏεση άÏθÏου"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Τα πάντα δείχνουν καλά! Δεν βÏήκαμε κάποια άÏθÏα στον ιστότοπο σας τα οποία είναι παλιότεÏα από έξι μήνες και λαμβάνουν λίγους συνδέσμους στον ιστότοπο σας. Επανέλθετε αÏγότεÏα για νέες Ï€Ïοτάσεις βελτίωσης!"],"Hide from search engines":["ΑπόκÏυψη από τις μηχανές αναζήτησης"],"Improve":["Βελτίωση"],"Are you sure you wish to hide this article from search engines?":["Είστε σίγουÏοι ότι θέλετε να κÏÏψετε αυτό το άÏθÏο από τις μηχανές αναζήτησης;"],"Action":["ΕνέÏγεια"],"You've hidden this article from search engines.":["Έχετε κÏÏψει αυτό το άÏθÏο από τις μηχανές αναζήτησης."],"You've removed this article.":["Έχετε αφαιÏέσει αυτό το άÏθÏο."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Δεν έχετε επιλέξει κανένα άÏθÏο για βελτίωση. Επιλέξτε μεÏικά άÏθÏα στα Ï€ÏηγοÏμενα βήματα ώστε να Ï€Ïοσθέσετε συνδέσμους και να σας Ï€Ïοβάλουμε Ï€Ïοτάσεις συνδέσμων εδώ."],"Loading link suggestions...":["ΦόÏτωση Ï€Ïοτάσεων συνδέσμων..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Δεν βÏήκαμε καμία Ï€Ïόταση για αυτό το άÏθÏο, αλλά μποÏείτε να Ï€Ïοσθέσετε συνδέσμους άÏθÏων που πιστεÏετε ότι είναι σχετικά."],"Skip":["ΠαÏάλειψη"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Δεν έχετε επιλέξει κανένα άÏθÏο για αυτό το βήμα ακόμη. ΜποÏεί να το κάνετε στο Ï€ÏοηγοÏμενο βήμα."],"Is it up-to-date?":["Είναι ενημεÏωμένο;"],"Last Updated":["Τελευταία ενημέÏωση"],"You've moved this article to the next step.":["Έχετε μετακινήσεις αυτό το άÏθÏο στο επόμενο βήμα."],"Unknown":["Άγνωστο"],"Clear summary":["ΚαθαÏισμός πεÏίληψης"],"Add internal links towards your orphaned articles.":["ΠÏοσθέστε εσωτεÏικοÏÏ‚ συνδέσμους Ï€Ïος τα οÏφανά άÏθÏα σας"],"Should you update your article?":["ΠÏέπει να ενημεÏώσετε το άÏθÏο σας;"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Ο ιστότοπός σας μποÏεί να πεÏιλαμβάνει αÏκετό πεÏιεχόμενο που δημιουÏγήσατε μια φοÏά και δεν το ξανακοίταξα έκτοτε. Είναι σημαντικό να πεÏάσετε από αυτές τις σελίδες και να αναÏωτηθείτε εάν αυτό το πεÏιεχόμενο εξακολουθεί να είναι σχετικό με τον ιστότοπό σας. Αν Ï€Ïέπει να το βελτιώσετε ή να το αφαιÏέσετε;"],"Start: Love it or leave it?":["ΈναÏξη: Αγάπησε το ή άφησε το"],"Clean up your unlinked content to make sure people can find it":["ΚαθαÏίστε το ασÏνδετο πεÏιεχόμενο σας ώστε να σιγουÏευτείται ότι οι επισκέπτες μποÏοÏν τα το βÏοÏν."],"I've finished this workout":["ΟλοκλήÏωσα αυτή την εξάσκηση"],"Reset this workout":["Κάνε επαναφοÏά της εξάσκησης"],"Well done!":["ΣυγχαÏητήÏια!"],"Add internal links towards your cornerstones":["ΠÏοσθέστε εσωτεÏικοÏÏ‚ συνδέσμους Ï€Ïος τα βασικά άÏθÏα σας"],"Check the number of incoming internal links of your cornerstones":["Ελέγξτε τον αÏιθμό των εισεÏχομένων εσωτεÏικών συνδέσμων των βασικών πεÏιεχομένων άÏθÏων σας"],"Start: Choose your cornerstones!":["Επιλέξτε τα βασικά πεÏιεχόμενα κείμενα σας (cornerstones)!"],"The cornerstone approach":["ΠÏοσέγγιση Î²Î±ÏƒÎ¹ÎºÎ¿Ï Ï€ÎµÏιεχομένου"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["ΠαÏακαλοÏμε λάβετε υπόψιν ότι: για να λειτουÏγήσει σωστά αυτή η άσκηση και να σας Ï€ÏοσφέÏει Ï€Ïοτάσεις συνδέσμων, Ï€Ïέπει Ï€Ïώτα να Ï„Ïέξετε το εÏγαλείο βελτιστοποίησης δεδομένων SEO. Οι διαχειÏιστές μποÏοÏν να το Ï„Ïέξουν στο Î¼ÎµÎ½Î¿Ï %1$sSEO > ΕÏγαλεία%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Σημείωση: Ο διαχειÏιστής έχει απενεÏγοποιήσει τη λειτουÏγία του κυÏίου πεÏιεχομένου στις Ïυθμίσεις SEO. Εάν θέλετε να χÏησιμοποιήσετε αυτήν την άσκηση, θα Ï€Ïέπει να είναι ενεÏγοποιημένη."],"I've finished this step":["Έχω ολοκληÏώσει αυτό το βήμα"],"Revise this step":["ΑναθεωÏείστε αυτό το βήμα"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Δεν μποÏέσαμε να βÏοÏμε εσωτεÏικοÏÏ‚ συνδέσμους στις σελίδες σας. Είτε δεν έχετε Ï€Ïοσθέσει ακόμη κανένα εσωτεÏικό σÏνδεσμο στο πεÏιεχόμενο σας, ή η Yoast SEO δεν τους ενέταξε στο ευÏετήÏιο. ΜποÏείτε να ζητήσετε απο τη Yoast SEO να εντάξει στο ευÏετήÏιο τους συνδέσμους σας, Ï„Ïέχοντας το εÏγαλείο βελτιστοποίησης δεδομένων SEO στο Î¼ÎµÎ½Î¿Ï SEO > ΕÏγαλεία."],"Incoming links":["ΕισεÏχόμενοι σÏνδεσμοι"],"Edit to add link":["ΕπεξεÏγασία για Ï€Ïοσθήκη σÏνδεσμου"],"%s incoming link":["%s εισεÏχόμενος σÏνδεσμος","%s εισεÏχόμενοι σÏνδεσμοι"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Επί του παÏόντος δεν έχετε σημειώσει άÏθÏα ως ÏƒÎ·Î¼Î±Î½Ï„Î¹ÎºÎ¿Ï Ï€ÎµÏιεχομένου. Όταν σημειώσετε τα άÏθÏα που θέλετε ως σημαντικά άÏθÏα, θα εμφανιστοÏν εδώ."],"Focus keyphrase":["ΦÏάση-κλειδί εστίασης"],"Article":["ΆÏθÏο"],"Readability score":["Βαθμολογία αναγνωσιμότητας"],"SEO score":["SEO σκόÏ"],"Copy failed":["Η αντιγÏαφή απέτυχε"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Βελτιώστε την κατάταξη για όλα τα Î²Î±ÏƒÎ¹ÎºÎ¿Ï Ï€ÎµÏιεχομένου άÏθÏα σας, χÏησιμοποιώντας αυτή τη %1$sβήμα-Ï€Ïος-βήμα άσκηση!%2$s"],"Rank with articles you want to rank with":["Ανεβείτε στην κατάταξη με τα άÏθÏα που Ï€Ïαγματικά επιθυμείτε. "],"Descriptive text":["ΠεÏιγÏαφικό κείμενο"],"Show the descriptive text":["Εμφάνισε το πεÏιγÏαφικό κείμενο"],"Show icon":["Εμφάνισε το εικονίδιο"],"Yoast Estimated Reading Time":["Yoast Εκτιμώμενος ΧÏόνος Ανάγνωσης"],"Shows an estimated reading time based on the content length.":["Εμφανίζει έναν εκτιμώμενο χÏόνο ανάγνωσης με βάση το μήκος του πεÏιεχομένου."],"reading time":["χÏόνος ανάγνωσης"],"content length":["μήκος πεÏιεχομένου"],"Estimated reading time:":["Εκτιμώμενος χÏόνος ανάγνωσης:"],"minute":["λεπτό","λεπτά"],"Settings":["Ρυθμίσεις"],"OK":["OK"],"Close":["Κλείσιμο"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Η Ï€Ïώτη Ï€Ïαγματικά όλα-σε-ένα SEO λÏση για WordPress, η οποία πεÏιλαμβάνει ανάλυση πεÏιεχομένου σελίδας, χάÏτες XML και πολλά πεÏισσότεÏα."],"Type":["ΤÏπος"],"Team Yoast":["Ομάδα Yoast"],"Orphaned content":["ΟÏφανό πεÏιεχόμενο"],"Synonyms":["Συνώνυμα"],"Internal linking suggestions":["ΠÏοτάσεις εσωτεÏικών συνδέσεων"],"Enter a related keyphrase to calculate the SEO score":["Εισάγετε μία σχετική φÏάση-κλειδί για να υπολογιστεί η SEO βαθμολογία"],"Related keyphrase":["Σχετική φÏάση-κλειδί"],"Add related keyphrase":["ΠÏοσθέστε σχετική φÏάση-κλειδί"],"Analysis results":["Αποτελέσματα ανάλυσης"],"Help on choosing the perfect keyphrase":["Βοήθεια για την επιλογή της τέλειας φÏάσης-κλειδί"],"Help on keyphrase synonyms":["Βοήθεια για τα συνώνυμα των φÏάσεων-κλειδιών"],"Keyphrase":["ΦÏάση κλειδί"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Îέα διεÏθυνση URL: {{link}}%s{{/link}}"],"Undo":["ΑναίÏεση"],"Redirect created":["ΔημιουÏγήθηκε η ανακατεÏθυνση"],"%s just created a redirect from the old URL to the new URL.":["%s μόλις δημιουÏγήθηκε μια ανακατεÏθυνση από την παλιά διεÏθυνση URL στη νέα διεÏθυνση URL."],"Old URL: {{link}}%s{{/link}}":["Παλιά διεÏθυνση URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Συνώνυμα φÏάσης-κλειδί"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["ΠαÏουσιάστηκε σφάλμα: η ανάλυση Premium SEO δεν λειτουÏγεί όπως αναμενόταν. ΠαÏακαλοÏμε {{activateLink}}ενεÏγοποιήστε τη συνδÏομή σας στο MyYoast{{/activateLink}} και, στη συνέχεια, {{reloadButton}}επαναφοÏτώστε αυτήν τη σελίδα{{/reloadButton}} για να λειτουÏγήσει σωστά."],"seo":["SEO"],"internal linking":["εσωτεÏική σÏνδεση"],"site structure":["Δομή ιστοτόπου"],"We could not find any relevant articles on your website that you could link to from your post.":["Δεν ήταν δυνατή η εÏÏεση σχετικών άÏθÏων στον ιστότοπό σας που θα μποÏοÏσατε να συνδέσετε την ανάÏτηση σας."],"Load suggestions":["ΦόÏτωση Ï€Ïοτάσεων"],"Refresh suggestions":["Ανανέωση Ï€Ïοτάσεων"],"Write list…":["ΕγγÏαφή λίστας..."],"Adds a list of links related to this page.":["ΠÏοσθέτει μία λίστα συνδέσμων σχετικών με αυτή τη σελίδα."],"related posts":["σχετικές δημοσιεÏσεις"],"related pages":["σχετικές σελίδες"],"Adds a table of contents to this page.":["ΠÏοσθέτει ένα πίνακα πεÏιεχομένων σε αυτή τη σελίδα."],"links":["σÏνδεσμοι"],"toc":["πίνακας πεÏιεχομένων"],"Copy link":["ΑντιγÏαφή συνδέσμου"],"Copy link to suggested article: %s":["ΑντιγÏαφή συνδέσμου στο Ï€Ïοτεινόμενο άÏθÏο: %s"],"Add a title to your post for the best internal linking suggestions.":["ΠÏοσθέστε ένα τίτλο στην δημοσίευση σας για να λάβετε τις καλÏτεÏες Ï€Ïοτάσεις εσωτεÏικής σÏνδεσης."],"Add a metadescription to your post for the best internal linking suggestions.":["ΠÏοσθέστε μία μέτα πεÏιγÏαφή στην ανάÏτηση σας για να λάβετε τις καλÏτεÏες Ï€Ïοτάσεις εσωτεÏικής σÏνδεσης."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["ΠÏοσθέστε ένα τίτλο και μία μέτα πεÏιγÏαφή στην ανάÏτηση σας για να λάβετε τις καλÏτεÏες Ï€Ïοτάσεις εσωτεÏικής σÏνδεσης."],"Also, add a title to your post for the best internal linking suggestions.":["Επίσης, Ï€Ïοσθέστε ένα τίτλο στην δημοσίευση σας για να λάβετε τις καλÏτεÏες Ï€Ïοτάσεις εσωτεÏικής σÏνδεσης."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Επίσης, Ï€Ïοσθέστε μία μέτα πεÏιγÏαφή στην δημοσίευση σας για να λάβετε τις καλÏτεÏες Ï€Ïοτάσεις εσωτεÏικής σÏνδεσης."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Επίσης, Ï€Ïοσθέστε ένα τίτλο και μία μέτα πεÏιγÏαφή στην δημοσίευση σας για να λάβετε τις καλÏτεÏες Ï€Ïοτάσεις εσωτεÏικής σÏνδεσης."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Μόλις Ï€Ïοσθέσετε λίγο πεÏισσότεÏο κείμενο, θα σας παÏέχουμε εδώ μία λίστα με σχετικό πεÏιεχόμενο το οποίο θα μποÏοÏσατε να συνδέσετε στην δημοσίευση σας."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Για να βελτιώσετε τη δομή του ιστοτόπου σας, εξετάστε το ενδεχόμενο να χÏησιμοποιήσετε συνδέσεις Ï€Ïος άλλες σχετικές δημοσιεÏσεις ή σελίδες στον ιστότοπο σας."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["ΧÏειάζονται μεÏικά δευτεÏόλεπτα μέχÏι να εμφανιστεί μία λίστα με σχετικό πεÏιεχόμενο με το οποίο θα μποÏοÏσατε να Ï€Ïαγματοποιήσετε σÏνδεση. Οι Ï€Ïοτάσεις θα εμφανιστοÏν εδώ μόλις τις έχουμε."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Διαβάστε τον οδηγό μας σχετικά με την εσωτεÏική σÏνδεση για SEO{{/a}} για να μάθετε πεÏισσότεÏα."],"Copied!":["ΑντιγÏάφηκε!"],"Not supported!":["Δεν υποστηÏίζεται!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Μήπως Ï€Ïοσπαθείτε να χÏησιμοποιήσετε πολλαπλές σχετικές φÏάσεις-κλειδιά; Θα Ï€Ïέπει να τις Ï€Ïοσθέσετε ξεχωÏιστά."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Η φÏάση κλειδί που εισάγατε είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î·. Το ανώτατο επιτÏεπόμενο ÏŒÏιο οÏίζεται έως 191 χαÏακτήÏες."],"Add as related keyphrase":["ΠÏοσθήκη ως σχετική φÏάση-κλειδί"],"Added!":["ΠÏοστέθηκε!"],"Remove":["ΑφαίÏεση"],"Table of contents":["Πίνακας πεÏιεχομένων (TOC)"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["ΠÏέπει να βελτιώσουμε τα δεδομένα SEO του ιστοτόπου σας για να σας Ï€ÏοσφέÏουμε τις καλÏτεÏες %1$sÏ€Ïοτάσεις συνδέσμων%2$s. %3$sΕκκίνηση βελτιστοποιήσης δεδομένων SEO%4$s"],"Create a Zap in %s":["ΔημιουÏγήστε ένα Zap στο %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_AU.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_AU.json new file mode 100644 index 00000000..e7a51f94 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_AU.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_AU"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["The request came back with the following error: \"%s\""],"X share preview":["X share preview"],"AI X title generator":["AI X title generator"],"AI X description generator":["AI X description generator"],"X preview":["X preview"],"Please enter a valid focus keyphrase.":["Please enter a valid focus keyphrase."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s."],"Yoast AI cannot reach your site":["Yoast AI cannot reach your site"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings."],"Social share preview":["Social share preview"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimised workflow."],"You've reached the Yoast AI rate limit.":["You've reached the Yoast AI rate limit."],"Allow":["Allow"],"Deny":["Deny"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["To see this video, you need to allow %1$s to load embedded videos from %2$s."],"Text generated by AI may be offensive or inaccurate.":["Text generated by AI may be offensive or inaccurate."],"(Opens in a new browser tab)":["(Opens in a new browser tab)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generate titles & descriptions with Yoast AI!"],"New to %1$s":["New to %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience."],"Start generating":["Start generating"],"Yes, revoke consent":["Yes, revoke consent"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?"],"Something went wrong, please try again later.":["Something went wrong, please try again later."],"Revoke AI consent":["Revoke AI consent"],"AI title generator":["AI title generator"],"AI description generator":["AI description generator"],"AI social title generator":["AI social title generator"],"AI social description generator":["AI social description generator"],"Dismiss":["Dismiss"],"Don’t show again":["Don’t show again"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page."],"Try again":["Try again"],"Social preview":["Social preview"],"Desktop result":["Desktop result"],"Mobile result":["Mobile result"],"Apply %s description":[],"Apply %s title":[],"Next":["Next"],"Previous":["Previous"],"Generate 5 more":["Generate 5 more"],"Google preview":["Google preview"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, click the button to refresh this page for the feature to function correctly, which may take up to 30 seconds."],"Refresh page":["Refresh page"],"Not enough content":["Not enough content"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Please try again later. If the issue persists, please %1$scontact our support team%2$s!"],"Something went wrong":["Something went wrong"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s"],"Connection timeout":["Connection timeout"],"Use AI":["Use AI"],"Close modal":["Close modal"],"Learn more about AI (Opens in a new browser tab)":["Learn more about AI (Opens in a new browser tab)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitle%2$s: Your page has a title. Well done!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sKeyphrase distribution%2$s: Good job!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: You are not using too many complex words, which makes your text easy to read. Good job!"],"Word complexity":["Word complexity"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlignment%3$s: There is a long section of centre-aligned text. %2$sWe recommend making it left-aligned%3$s.","%1$sAlignment%3$s: There are %4$s long sections of centre-aligned text. %2$sWe recommend making them left-aligned%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlignment%3$s: There is a long section of centre-aligned text. %2$sWe recommend making it right-aligned%3$s.","%1$sAlignment%3$s: There are %4$s long sections of centre-aligned text. %2$sWe recommend making them right-aligned%3$s."],"Select image":["Select image"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["You might not even know it, but there may be pages on your site that do not get any links. That is an SEO issue because it is difficult for search engines to find pages that don't get any links. It is harder for them to rank. We call these pages orphaned content. In this workout, we will find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Time to add some links! Below, you will see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link. When adding the link, make sure to insert it in a relevant sentence, and related to your orphaned article. Keep adding links to each of the orphaned article's until you are satisfied with the amount of links pointing to them."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Once you add a bit more copy, we'll be able to tell you the formality level of your text."],"Overall, your text appears to be %1$s%3$s%2$s.":["Overall, your text appears to be %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s."],"Maximum heading level":["Maximum heading level"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions."],"Schema":["Schema"],"Meta tags":["Meta tags"],"Not available":["Not available"],"Checks":["Checks"],"Focus Keyphrase":["Focus Keyphrase"],"Good":["Good"],"No index":["No index"],"Front-end SEO inspector":["Front-end SEO inspector"],"Focus keyphrase not set":["Focus keyphrase not set"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site."],"Reset API key":["Reset API key"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below."],"Your API key":["Your API key"],"Go to your %s dashboard":["Go to your %s dashboard"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard."],"Your %s dashboard":["Your %s dashboard"],"Verify connection":["Verify connection"],"Verify your connection":["Verify your connection"],"Create a Zap":["Create a Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions."],"%s API key":["%s API key"],"You'll need this API key later on in %s when you're setting up your Zap.":["You'll need this API key later on in %s when you're setting up your Zap."],"Copy your API key":["Copy your API key"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account."],"Manage %s settings":["Manage %s settings"],"Connect to %s":["Connect to %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: For this to work well, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you've accomplished!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["You've just made your best content easy to find, and more likely to rank! Way to go Cobber! From time to time, remember to check if your cornerstones are getting enough links!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimise button if you think a cornerstone needs more links. That will move the article to the next step."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sNeed more help? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast Table of Contents"],"Yoast Related Links":["Yoast Related Links"],"Finish optimizing":["Finish optimising"],"You've finished adding links to this article.":["You've finished adding links to this article."],"Optimize":["Optimise"],"Added to next step":["Added to next step"],"Choose cornerstone articles...":["Choose cornerstone articles…"],"Loading data...":["Loading data…"],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here."],"Skipped":["Skipped"],"Hidden from search engines.":["Hidden from search engines."],"Removed":["Removed"],"Improved":["Improved"],"Resolution":["Resolution"],"Loading redirect options...":["Loading redirect options..."],"Remove and redirect":["Remove and redirect"],"Custom url:":["Custom URL:"],"Related article:":["Related article:"],"Home page:":["Home page:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?"],"SEO Workout: Remove article":["SEO Workout: Remove article"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!"],"Hide from search engines":["Hide from search engines"],"Improve":["Improve"],"Are you sure you wish to hide this article from search engines?":["Are you sure you wish to hide this article from search engines?"],"Action":["Action"],"You've hidden this article from search engines.":["You've hidden this article from search engines."],"You've removed this article.":["You've removed this article."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["You currently haven't selected any articles to improve. Select a few orphaned articles in the previous steps to add links to and we will show you link suggestions here."],"Loading link suggestions...":["Loading link suggestions..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related."],"Skip":["Skip"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["You haven't selected any articles for this step yet. You can do so in the previous step."],"Is it up-to-date?":["Is it up-to-date?"],"Last Updated":["Last Updated"],"You've moved this article to the next step.":["You've moved this article to the next step."],"Unknown":["Unknown"],"Clear summary":["Clear summary"],"Add internal links towards your orphaned articles.":["Add internal links towards your orphaned articles."],"Should you update your article?":["Should you update your article?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Your site often contains lots of content that's created once and never looked back to afterwards. It's important to go through these and ask yourself if this content is still relevant to your site. Should I improve it or remove it?"],"Start: Love it or leave it?":["Start: Love it or leave it?"],"Clean up your unlinked content to make sure people can find it":["Clean up your unlinked content to make sure people can find it"],"I've finished this workout":["I've finished this workout"],"Reset this workout":["Reset this workout"],"Well done!":["Well done!"],"Add internal links towards your cornerstones":["Add internal links towards your cornerstones"],"Check the number of incoming internal links of your cornerstones":["Check the number of incoming internal links of your cornerstones"],"Start: Choose your cornerstones!":["Start: Choose your cornerstones!"],"The cornerstone approach":["The cornerstone approach"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled."],"I've finished this step":["I've finished this step"],"Revise this step":["Revise this step"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["We were unable to find any internal links on your pages. Either you haven't added any, or Yoast SEO failed to index them. However, you can have them indexed by running the SEO data optimization under SEO > Tools."],"Incoming links":["Incoming links"],"Edit to add link":["Edit to add link"],"%s incoming link":["%s incoming link","%s incoming links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here."],"Focus keyphrase":["Focus keyphrase"],"Article":["Article"],"Readability score":["Readability score"],"SEO score":["SEO score"],"Copy failed":["Copy failed"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Improve your cornerstones rankings by using this %1$sstep-by-step workout!%2$s"],"Rank with articles you want to rank with":["Rank with articles you want to rank with"],"Descriptive text":["Descriptive text"],"Show the descriptive text":["Show the descriptive text"],"Show icon":["Show icon"],"Yoast Estimated Reading Time":["Yoast Estimated Reading Time"],"Shows an estimated reading time based on the content length.":["Shows an estimated reading time based on content length"],"reading time":["reading time"],"content length":["content length"],"Estimated reading time:":["Estimated reading time:"],"minute":["minute","minutes"],"Settings":["Settings"],"OK":["OK"],"Close":["Close"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Orphaned content"],"Synonyms":["Synonyms"],"Internal linking suggestions":["Internal linking suggestions"],"Enter a related keyphrase to calculate the SEO score":["Enter a related keyphrase to calculate the SEO score"],"Related keyphrase":["Related keyphrase"],"Add related keyphrase":["Add related keyphrase"],"Analysis results":["Analysis results"],"Help on choosing the perfect keyphrase":["Help on choosing the perfect keyphrase"],"Help on keyphrase synonyms":["Help on keyphrase synonyms"],"Keyphrase":["Keyphrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["New URL: {{link}}%s{{/link}}"],"Undo":["Undo"],"Redirect created":["Redirect created"],"%s just created a redirect from the old URL to the new URL.":["%s just created a redirect from the old URL to the new URL."],"Old URL: {{link}}%s{{/link}}":["Old URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Keyphrase synonyms"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["An error occurred: unfortunately our Morphology feature is not working. Please make sure you {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly."],"seo":["seo"],"internal linking":["internal linking"],"site structure":["site structure"],"We could not find any relevant articles on your website that you could link to from your post.":["We could not find any relevant articles on your website that you could link to from your post."],"Load suggestions":["Load suggestions"],"Refresh suggestions":["Refresh suggestions"],"Write list…":["Write list…"],"Adds a list of links related to this page.":["Adds a list of links related to this page."],"related posts":["related posts"],"related pages":["related pages"],"Adds a table of contents to this page.":["Adds a table of contents to this page."],"links":["links"],"toc":["toc"],"Copy link":["Copy link"],"Copy link to suggested article: %s":["Copy link to suggested article: %s"],"Add a title to your post for the best internal linking suggestions.":["Add a title to your post for the best internal linking suggestions."],"Add a metadescription to your post for the best internal linking suggestions.":["Add a metadescription to your post for the best internal linking suggestions."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Add a title and a metadescription to your post for the best internal linking suggestions."],"Also, add a title to your post for the best internal linking suggestions.":["Also, add a title to your post for the best internal linking suggestions."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Also, add a metadescription to your post for the best internal linking suggestions."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Also, add a title and a metadescription to your post for the best internal linking suggestions."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["To improve your site structure, consider linking to other relevant posts or pages on your website."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["It takes a few seconds to build a list of related content that you could link. suggestions will show here as soon as we have them."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Read our guide on internal linking for SEO{{/a}} to learn more."],"Copied!":["Copied!"],"Not supported!":["Not supported!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["If you trying to use multiple related keyphrases? You should add them separately."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Your keyphrase is too long. It can be a maximum of 191 characters."],"Add as related keyphrase":["Add as related keyphrase"],"Added!":["Added!"],"Remove":["Remove"],"Table of contents":["Table of contents"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["We need to optimise your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimisation%4$s"],"Create a Zap in %s":["Create a Zap in %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_CA.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_CA.json new file mode 100644 index 00000000..a706aa20 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_CA.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":[],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":[],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":[],"Social preview":[],"Desktop result":[],"Mobile result":[],"Apply %s description":[],"Apply %s title":[],"Next":[],"Previous":[],"Generate 5 more":[],"Google preview":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":[],"%1$sKeyphrase distribution%2$s: Good job!":[],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":["Word complexity"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":["Select image"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["You might not even know it, but there may be pages on your site that do not get any links. That is an SEO issue because it is difficult for search engines to find pages that don't get any links. It is harder for them to rank. We call these pages orphaned content. In this workout, we will find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Time to add some links! Below, you will see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link. When adding the link, make sure to insert it in a relevant sentence, and related to your orphaned article. Keep adding links to each of the orphaned article's until you are satisfied with the amount of links pointing to them."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":["Schema"],"Meta tags":["Meta tags"],"Not available":["Unavailable"],"Checks":["Checks"],"Focus Keyphrase":["Focus Keyphrase"],"Good":["Good"],"No index":["No index"],"Front-end SEO inspector":["Front-end SEO inspector"],"Focus keyphrase not set":["Focus keyphrase not set"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site."],"Reset API key":["Reset API key"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below."],"Your API key":["Your API key"],"Go to your %s dashboard":["Go to your %s dashboard"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard."],"Your %s dashboard":["Your %s dashboard"],"Verify connection":["Verify connection"],"Verify your connection":["Verify your connection"],"Create a Zap":["Create a Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions."],"%s API key":["%s API key"],"You'll need this API key later on in %s when you're setting up your Zap.":["You'll need this API key later on in %s when you're setting up your Zap."],"Copy your API key":["Copy your API key"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account."],"Manage %s settings":["Manage %s settings"],"Connect to %s":["Connect to %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: for this workout to work well, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimise button if you think a cornerstone needs more links. That will move the article to the next step."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast table of contents"],"Yoast Related Links":["Yoast related links"],"Finish optimizing":["Finish optimising"],"You've finished adding links to this article.":["You've finished adding links to this article."],"Optimize":["Optimise"],"Added to next step":["Added to next step"],"Choose cornerstone articles...":["Choose cornerstone articles..."],"Loading data...":["Loading data..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here."],"Skipped":["Skipped"],"Hidden from search engines.":["Hidden from search engines."],"Removed":["Removed"],"Improved":["Improved"],"Resolution":["Resolution"],"Loading redirect options...":["Loading redirect options..."],"Remove and redirect":["Remove and redirect"],"Custom url:":["Custom URL:"],"Related article:":["Related article:"],"Home page:":["Homepage:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?"],"SEO Workout: Remove article":["SEO Workout: remove article"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!"],"Hide from search engines":["Hide from search engines"],"Improve":["Improve"],"Are you sure you wish to hide this article from search engines?":["Are you sure you wish to hide this article from search engines?"],"Action":["Action"],"You've hidden this article from search engines.":["You've hidden this article from search engines."],"You've removed this article.":["You've removed this article."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["You currently haven't selected any articles to improve. Select a few articles in the previous steps to which to add links and we will show you link suggestions here."],"Loading link suggestions...":["Loading link suggestions..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["We didn’t find any suggestions for this article, but, of course, you can still add links to articles that you think are related."],"Skip":["Skip"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["You haven't selected any articles for this step yet. You can do so in the previous step."],"Is it up-to-date?":["Is it up to date?"],"Last Updated":["Last Updated"],"You've moved this article to the next step.":["You've moved this article to the next step."],"Unknown":["Unknown"],"Clear summary":["Clear summary"],"Add internal links towards your orphaned articles.":["Add internal links towards your orphaned articles."],"Should you update your article?":["Should you update your article?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?"],"Start: Love it or leave it?":["Start: love it or leave it?"],"Clean up your unlinked content to make sure people can find it":["Clean up your unlinked content to make sure people can find it"],"I've finished this workout":["I've finished this workout"],"Reset this workout":["Reset this workout"],"Well done!":["Well done!"],"Add internal links towards your cornerstones":["Add internal links towards your cornerstones"],"Check the number of incoming internal links of your cornerstones":["Check the number of incoming internal links of your cornerstones"],"Start: Choose your cornerstones!":["Start: choose your cornerstones!"],"The cornerstone approach":["The cornerstone approach"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: for this workout to work well and to offer you linking suggestions, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":["I've finished this step"],"Revise this step":["Revise this step"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimisation under SEO > Tools."],"Incoming links":["Incoming links"],"Edit to add link":["Edit to add link"],"%s incoming link":["%s incoming link","%s incoming links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here."],"Focus keyphrase":["Focus keyphrase"],"Article":["Article"],"Readability score":["Readability score"],"SEO score":["SEO score"],"Copy failed":["Copy failed"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s"],"Rank with articles you want to rank with":["Rank with articles with which you want to rank"],"Descriptive text":["Descriptive text"],"Show the descriptive text":["Show the descriptive text"],"Show icon":["Show icon"],"Yoast Estimated Reading Time":["Yoast Estimated Reading Time"],"Shows an estimated reading time based on the content length.":["Shows an estimated reading time based on the content length."],"reading time":["reading time"],"content length":["content length"],"Estimated reading time:":["Estimated reading time:"],"minute":["minute","minutes"],"Settings":["Settings"],"OK":["OK"],"Close":["Close"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Orphaned content"],"Synonyms":["Synonyms"],"Internal linking suggestions":["Internal linking suggestions"],"Enter a related keyphrase to calculate the SEO score":["Enter a related keyphrase in order to calculate the SEO score"],"Related keyphrase":["Related keyphrase"],"Add related keyphrase":["Add related keyphrase"],"Analysis results":["Analysis results"],"Help on choosing the perfect keyphrase":["Help on choosing the perfect keyphrase"],"Help on keyphrase synonyms":["Help on keyphrase synonyms"],"Keyphrase":["Keyphrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["New URL: {{link}}%s{{/link}}"],"Undo":["Undo"],"Redirect created":["Redirect created"],"%s just created a redirect from the old URL to the new URL.":["%s just created a redirect from the old URL to the new URL."],"Old URL: {{link}}%s{{/link}}":["Old URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Keyphrase synonyms"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["An error occurred: unfortunately our Morphology feature is not working. Please make sure you {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly."],"seo":[],"internal linking":["internal linking"],"site structure":["site structure"],"We could not find any relevant articles on your website that you could link to from your post.":["We could not find any relevant articles on your website that you could link to from your post."],"Load suggestions":["Load suggestions"],"Refresh suggestions":["Refresh suggestions"],"Write list…":["Write list…"],"Adds a list of links related to this page.":["Adds a list of links related to this page."],"related posts":["related posts"],"related pages":["related pages"],"Adds a table of contents to this page.":["Adds a table of contents to this page."],"links":["links"],"toc":["toc"],"Copy link":["Copy link"],"Copy link to suggested article: %s":["Copy link to suggested article: %s"],"Add a title to your post for the best internal linking suggestions.":["Add a title to your post for the best internal linking suggestions."],"Add a metadescription to your post for the best internal linking suggestions.":["Add a meta description to your post for the best internal linking suggestions."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Add a title and a meta description to your post for the best internal linking suggestions."],"Also, add a title to your post for the best internal linking suggestions.":["Also, add a title to your post for the best internal linking suggestions."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Also, add a meta description to your post for the best internal linking suggestions."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Also, add a title and a meta description to your post for the best internal linking suggestions."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["To improve your site structure, consider linking to other relevant posts or pages on your website."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Read our guide on internal linking for SEO{{/a}} to learn more."],"Copied!":["Copied!"],"Not supported!":["Not supported!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Are you trying to use multiple related keyphrases? You should add them separately."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Your keyphrase is too long. It can be a maximum of 191 characters."],"Add as related keyphrase":["Add as related keyphrase"],"Added!":["Added!"],"Remove":["Remove"],"Table of contents":["Table of contents"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["We need to optimise your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimisation%4$s"],"Create a Zap in %s":["Create a Zap in %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_GB.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_GB.json new file mode 100644 index 00000000..e4698240 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_GB.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_GB"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["The request came back with the following error: \"%s\""],"X share preview":["X share preview"],"AI X title generator":["AI X title generator"],"AI X description generator":["AI X description generator"],"X preview":["X preview"],"Please enter a valid focus keyphrase.":["Please enter a valid focus keyphrase."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s."],"Yoast AI cannot reach your site":["Yoast AI cannot reach your site"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings."],"Social share preview":["Social share preview"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimised workflow."],"You've reached the Yoast AI rate limit.":["You've reached the Yoast AI rate limit."],"Allow":["Allow"],"Deny":["Deny"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["To see this video, you need to allow %1$s to load embedded videos from %2$s."],"Text generated by AI may be offensive or inaccurate.":["Text generated by AI may be offensive or inaccurate."],"(Opens in a new browser tab)":["(Opens in a new browser tab)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generate titles & descriptions with Yoast AI!"],"New to %1$s":["New to %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience."],"Start generating":["Start generating"],"Yes, revoke consent":["Yes, revoke consent"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?"],"Something went wrong, please try again later.":["Something went wrong, please try again later."],"Revoke AI consent":["Revoke AI consent"],"AI title generator":["AI title generator"],"AI description generator":["AI description generator"],"AI social title generator":["AI social title generator"],"AI social description generator":["AI social description generator"],"Dismiss":["Dismiss"],"Don’t show again":["Don’t show again"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page."],"Try again":["Try again"],"Social preview":["Social preview"],"Desktop result":["Desktop result"],"Mobile result":["Mobile result"],"Apply %s description":[],"Apply %s title":[],"Next":["Next"],"Previous":["Previous"],"Generate 5 more":["Generate 5 more"],"Google preview":["Google preview"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, click the button to refresh this page for the feature to function correctly, which may take up to 30 seconds."],"Refresh page":["Refresh page"],"Not enough content":["Not enough content"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Please try again later. If the issue persists, please %1$scontact our support team%2$s!"],"Something went wrong":["Something went wrong"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s"],"Connection timeout":["Connection timeout"],"Use AI":["Use AI"],"Close modal":["Close modal"],"Learn more about AI (Opens in a new browser tab)":["Learn more about AI (Opens in a new browser tab)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitle%2$s: Your page has a title. Well done!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sKeyphrase distribution%2$s: Good job!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: You are not using too many complex words, which makes your text easy to read. Good job!"],"Word complexity":["Word complexity"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.","%1$sAlignment%3$s: There are %4$s long sections of center-aligned text. %2$sWe recommend making them left-aligned%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.","%1$sAlignment%3$s: There are %4$s long sections of center-aligned text. %2$sWe recommend making them right-aligned%3$s."],"Select image":["Select image"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["You might not even know it, but there may be pages on your site that do not get any links. That is an SEO issue because it is difficult for search engines to find pages that don't get any links. It is harder for them to rank. We call these pages orphaned content. In this workout, we will find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Time to add some links! Below, you will see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link. When adding the link, make sure to insert it in a relevant sentence, and related to your orphaned article. Keep adding links to each of the orphaned article's until you are satisfied with the amount of links pointing to them."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Once you add a bit more copy, we'll be able to tell you the formality level of your text."],"Overall, your text appears to be %1$s%3$s%2$s.":["Overall, your text appears to be %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s."],"Maximum heading level":["Maximum heading level"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions."],"Schema":["Schema"],"Meta tags":["Meta tags"],"Not available":["Unavailable"],"Checks":["Checks"],"Focus Keyphrase":["Focus Keyphrase"],"Good":["Good"],"No index":["No index"],"Front-end SEO inspector":["Front-end SEO inspector"],"Focus keyphrase not set":["Focus keyphrase not set"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site."],"Reset API key":["Reset API key"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below."],"Your API key":["Your API key"],"Go to your %s dashboard":["Go to your %s dashboard"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard."],"Your %s dashboard":["Your %s dashboard"],"Verify connection":["Verify connection"],"Verify your connection":["Verify your connection"],"Create a Zap":["Create a Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions."],"%s API key":["%s API key"],"You'll need this API key later on in %s when you're setting up your Zap.":["You'll need this API key later on in %s when you're setting up your Zap."],"Copy your API key":["Copy your API key"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account."],"Manage %s settings":["Manage %s settings"],"Connect to %s":["Connect to %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: for this workout to work well, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimise button if you think a cornerstone needs more links. That will move the article to the next step."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast table of contents"],"Yoast Related Links":["Yoast related links"],"Finish optimizing":["Finish optimising"],"You've finished adding links to this article.":["You've finished adding links to this article."],"Optimize":["Optimise"],"Added to next step":["Added to next step"],"Choose cornerstone articles...":["Choose cornerstone articles..."],"Loading data...":["Loading data..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here."],"Skipped":["Skipped"],"Hidden from search engines.":["Hidden from search engines."],"Removed":["Removed"],"Improved":["Improved"],"Resolution":["Resolution"],"Loading redirect options...":["Loading redirect options..."],"Remove and redirect":["Remove and redirect"],"Custom url:":["Custom URL:"],"Related article:":["Related article:"],"Home page:":["Homepage:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?"],"SEO Workout: Remove article":["SEO Workout: remove article"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!"],"Hide from search engines":["Hide from search engines"],"Improve":["Improve"],"Are you sure you wish to hide this article from search engines?":["Are you sure you wish to hide this article from search engines?"],"Action":["Action"],"You've hidden this article from search engines.":["You've hidden this article from search engines."],"You've removed this article.":["You've removed this article."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["You currently haven't selected any articles to improve. Select a few articles in the previous steps to which to add links and we will show you link suggestions here."],"Loading link suggestions...":["Loading link suggestions..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["We didn’t find any suggestions for this article, but, of course, you can still add links to articles that you think are related."],"Skip":["Skip"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["You haven't selected any articles for this step yet. You can do so in the previous step."],"Is it up-to-date?":["Is it up to date?"],"Last Updated":["Last Updated"],"You've moved this article to the next step.":["You've moved this article to the next step."],"Unknown":["Unknown"],"Clear summary":["Clear summary"],"Add internal links towards your orphaned articles.":["Add internal links towards your orphaned articles."],"Should you update your article?":["Should you update your article?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?"],"Start: Love it or leave it?":["Start: love it or leave it?"],"Clean up your unlinked content to make sure people can find it":["Clean up your unlinked content to make sure people can find it"],"I've finished this workout":["I've finished this workout"],"Reset this workout":["Reset this workout"],"Well done!":["Well done!"],"Add internal links towards your cornerstones":["Add internal links towards your cornerstones"],"Check the number of incoming internal links of your cornerstones":["Check the number of incoming internal links of your cornerstones"],"Start: Choose your cornerstones!":["Start: choose your cornerstones!"],"The cornerstone approach":["The cornerstone approach"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: for this workout to work well and to offer you linking suggestions, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled."],"I've finished this step":["I've finished this step"],"Revise this step":["Revise this step"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimisation under SEO > Tools."],"Incoming links":["Incoming links"],"Edit to add link":["Edit to add link"],"%s incoming link":["%s incoming link","%s incoming links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here."],"Focus keyphrase":["Focus keyphrase"],"Article":["Article"],"Readability score":["Readability score"],"SEO score":["SEO score"],"Copy failed":["Copy failed"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s"],"Rank with articles you want to rank with":["Rank with articles with which you want to rank"],"Descriptive text":["Descriptive text"],"Show the descriptive text":["Show the descriptive text"],"Show icon":["Show icon"],"Yoast Estimated Reading Time":["Yoast Estimated Reading Time"],"Shows an estimated reading time based on the content length.":["Shows an estimated reading time based on the content length."],"reading time":["reading time"],"content length":["content length"],"Estimated reading time:":["Estimated reading time:"],"minute":["minute","minutes"],"Settings":["Settings"],"OK":["OK"],"Close":["Close"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Orphaned content"],"Synonyms":["Synonyms "],"Internal linking suggestions":["Internal linking suggestions"],"Enter a related keyphrase to calculate the SEO score":["Enter a related keyphrase in order to calculate the SEO score"],"Related keyphrase":["Related keyphrase"],"Add related keyphrase":["Add related keyphrase"],"Analysis results":["Analysis results"],"Help on choosing the perfect keyphrase":["Help on choosing the perfect keyphrase"],"Help on keyphrase synonyms":["Help on keyphrase synonyms"],"Keyphrase":["Keyphrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["New URL: {{link}}%s{{/link}}"],"Undo":["Undo"],"Redirect created":["Redirect created"],"%s just created a redirect from the old URL to the new URL.":["%s just created a redirect from the old URL to the new URL."],"Old URL: {{link}}%s{{/link}}":["Old URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Keyphrase synonyms"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["An error occurred: unfortunately our Morphology feature is not working. Please make sure you {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly."],"seo":["SEO"],"internal linking":["internal linking"],"site structure":["site structure"],"We could not find any relevant articles on your website that you could link to from your post.":["We could not find any relevant articles on your website that you could link to from your post."],"Load suggestions":["Load suggestions"],"Refresh suggestions":["Refresh suggestions"],"Write list…":["Write list…"],"Adds a list of links related to this page.":["Adds a list of links related to this page."],"related posts":["related posts"],"related pages":["related pages"],"Adds a table of contents to this page.":["Adds a table of contents to this page."],"links":["links"],"toc":["toc"],"Copy link":["Copy link"],"Copy link to suggested article: %s":["Copy link to suggested article: %s"],"Add a title to your post for the best internal linking suggestions.":["Add a title to your post for the best internal linking suggestions."],"Add a metadescription to your post for the best internal linking suggestions.":["Add a meta description to your post for the best internal linking suggestions."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Add a title and a meta description to your post for the best internal linking suggestions."],"Also, add a title to your post for the best internal linking suggestions.":["Also, add a title to your post for the best internal linking suggestions."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Also, add a meta description to your post for the best internal linking suggestions."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Also, add a title and a meta description to your post for the best internal linking suggestions."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["To improve your site structure, consider linking to other relevant posts or pages on your website."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Read our guide on internal linking for SEO{{/a}} to learn more."],"Copied!":["Copied!"],"Not supported!":["Not supported!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Are you trying to use multiple related keyphrases? You should add them separately."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Your keyphrase is too long. It can be a maximum of 191 characters."],"Add as related keyphrase":["Add as related keyphrase"],"Added!":["Added!"],"Remove":["Remove"],"Table of contents":["Table of contents"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["We need to optimise your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimisation%4$s"],"Create a Zap in %s":["Create a Zap in %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_NZ.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_NZ.json new file mode 100644 index 00000000..0943aa42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-en_NZ.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_NZ"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":[],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":["(Opens in a new browser tab)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":["Dismiss"],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":["Try again"],"Social preview":[],"Desktop result":[],"Mobile result":[],"Apply %s description":[],"Apply %s title":[],"Next":["Next"],"Previous":["Previous"],"Generate 5 more":[],"Google preview":["Google preview"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sKeyphrase distribution%2$s: Good job!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: You are not using too many complex words, which makes your text easy to read. Good job!"],"Word complexity":["Word complexity"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":["Select image"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["You might not even know it, but there may be pages on your site that do not get any links. That is an SEO issue because it is difficult for search engines to find pages that don't get any links. It is harder for them to rank. We call these pages orphaned content. In this workout, we will find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Time to add some links! Below, you will see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link. When adding the link, make sure to insert it in a relevant sentence, and related to your orphaned article. Keep adding links to each of the orphaned article's until you are satisfied with the amount of links pointing to them."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions."],"Schema":["Schema"],"Meta tags":["Meta tags"],"Not available":["Not available"],"Checks":["Checks"],"Focus Keyphrase":["Focus Keyphrase"],"Good":["Good"],"No index":["No index"],"Front-end SEO inspector":["Front-end SEO inspector"],"Focus keyphrase not set":["Focus keyphrase not set"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site."],"Reset API key":["Reset API key"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below."],"Your API key":["Your API key"],"Go to your %s dashboard":["Go to your %s dashboard"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard."],"Your %s dashboard":["Your %s dashboard"],"Verify connection":["Verify connection"],"Verify your connection":["Verify your connection"],"Create a Zap":["Create a Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions."],"%s API key":["%s API key"],"You'll need this API key later on in %s when you're setting up your Zap.":["You'll need this API key later on in %s when you're setting up your Zap."],"Copy your API key":["Copy your API key"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account."],"Manage %s settings":["Manage %s settings"],"Connect to %s":["Connect to %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: For this workout to work well, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimise button if you think a cornerstone needs more links. That will move the article to the next step."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast Table of Contents"],"Yoast Related Links":["Yoast Related Links"],"Finish optimizing":["Finish optimising"],"You've finished adding links to this article.":["You've finished adding links to this article."],"Optimize":["Optimise"],"Added to next step":["Added to next step"],"Choose cornerstone articles...":["Choose cornerstone articles..."],"Loading data...":["Loading data..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here."],"Skipped":["Skipped"],"Hidden from search engines.":["Hidden from search engines."],"Removed":["Removed"],"Improved":["Improved"],"Resolution":["Resolution"],"Loading redirect options...":["Loading redirect options..."],"Remove and redirect":["Remove and redirect"],"Custom url:":["Custom url:"],"Related article:":["Related article:"],"Home page:":["Home page:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?"],"SEO Workout: Remove article":["SEO Workout: Remove article"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!"],"Hide from search engines":["Hide from search engines"],"Improve":["Improve"],"Are you sure you wish to hide this article from search engines?":["Are you sure you wish to hide this article from search engines?"],"Action":["Action"],"You've hidden this article from search engines.":["You've hidden this article from search engines."],"You've removed this article.":["You've removed this article."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here."],"Loading link suggestions...":["Loading link suggestions..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related."],"Skip":["Skip"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["You haven't selected any articles for this step yet. You can do so in the previous step."],"Is it up-to-date?":["Is it up-to-date?"],"Last Updated":["Last Updated"],"You've moved this article to the next step.":["You've moved this article to the next step."],"Unknown":["Unknown"],"Clear summary":["Clear summary"],"Add internal links towards your orphaned articles.":["Add internal links towards your orphaned articles."],"Should you update your article?":["Should you update your article?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?"],"Start: Love it or leave it?":["Start: Love it or leave it?"],"Clean up your unlinked content to make sure people can find it":["Clean up your unlinked content to make sure people can find it"],"I've finished this workout":["I've finished this workout"],"Reset this workout":["Reset this workout"],"Well done!":["Well done!"],"Add internal links towards your cornerstones":["Add internal links towards your cornerstones"],"Check the number of incoming internal links of your cornerstones":["Check the number of incoming internal links of your cornerstones"],"Start: Choose your cornerstones!":["Start: Choose your cornerstones!"],"The cornerstone approach":["The cornerstone approach"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":["I've finished this step"],"Revise this step":["Revise this step"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimisation under SEO > Tools."],"Incoming links":["Incoming links"],"Edit to add link":["Edit to add link"],"%s incoming link":["%s incoming link","%s incoming links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here."],"Focus keyphrase":["Focus keyphrase"],"Article":["Article"],"Readability score":["Readability score"],"SEO score":["SEO score"],"Copy failed":["Copy failed"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s"],"Rank with articles you want to rank with":["Rank with articles you want to rank with"],"Descriptive text":["Descriptive text"],"Show the descriptive text":["Show the descriptive text"],"Show icon":["Show icon"],"Yoast Estimated Reading Time":["Yoast Estimated Reading Time"],"Shows an estimated reading time based on the content length.":["Shows an estimated reading time based on the content length."],"reading time":["reading time"],"content length":["content length"],"Estimated reading time:":["Estimated reading time:"],"minute":["minute","minutes"],"Settings":["Settings"],"OK":["OK"],"Close":["Close"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Orphaned content"],"Synonyms":["Synonyms"],"Internal linking suggestions":["Internal linking suggestions"],"Enter a related keyphrase to calculate the SEO score":["Enter a related keyphrase to calculate the SEO score"],"Related keyphrase":["Related keyphrase"],"Add related keyphrase":["Add related keyphrase"],"Analysis results":["Analysis results"],"Help on choosing the perfect keyphrase":["Help on choosing the perfect keyphrase"],"Help on keyphrase synonyms":["Help on keyphrase synonyms"],"Keyphrase":["Keyphrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["New URL: {{link}}%s{{/link}}"],"Undo":["Undo"],"Redirect created":["Redirect created"],"%s just created a redirect from the old URL to the new URL.":["%s just created a redirect from the old URL to the new URL."],"Old URL: {{link}}%s{{/link}}":["Old URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Keyphrase synonyms"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["An error occurred: unfortunately our Morphology feature is not working. Please make sure you {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly."],"seo":["seo"],"internal linking":["internal linking"],"site structure":["site structure"],"We could not find any relevant articles on your website that you could link to from your post.":["We could not find any relevant articles on your website that you could link to from your post."],"Load suggestions":["Load suggestions"],"Refresh suggestions":["Refresh suggestions"],"Write list…":["Write list…"],"Adds a list of links related to this page.":["Adds a list of links related to this page."],"related posts":["related posts"],"related pages":["related pages"],"Adds a table of contents to this page.":["Adds a table of contents to this page."],"links":["links"],"toc":["toc"],"Copy link":["Copy link"],"Copy link to suggested article: %s":["Copy link to suggested article: %s"],"Add a title to your post for the best internal linking suggestions.":["Add a title to your post for the best internal linking suggestions."],"Add a metadescription to your post for the best internal linking suggestions.":["Add a metadescription to your post for the best internal linking suggestions."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Add a title and a metadescription to your post for the best internal linking suggestions."],"Also, add a title to your post for the best internal linking suggestions.":["Also, add a title to your post for the best internal linking suggestions."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Also, add a metadescription to your post for the best internal linking suggestions."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Also, add a title and a metadescription to your post for the best internal linking suggestions."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["To improve your site structure, consider linking to other relevant posts or pages on your website."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Read our guide on internal linking for SEO{{/a}} to learn more."],"Copied!":["Copied!"],"Not supported!":["Not supported!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Are you trying to use multiple related keyphrases? You should add them separately."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Your keyphrase is too long. It can be a maximum of 191 characters."],"Add as related keyphrase":["Add as related keyphrase"],"Added!":["Added!"],"Remove":["Remove"],"Table of contents":["Table of contents"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["We need to optimise your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimisation%4$s"],"Create a Zap in %s":["Create a Zap in %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_ES.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_ES.json new file mode 100644 index 00000000..706c185c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_ES.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"es"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["La solicitud volvió con el siguiente error: \"%s\""],"X share preview":["Vista previa al compartir X"],"AI X title generator":["Generador de títulos para X con IA"],"AI X description generator":["Generador de descripciones para X por IA"],"X preview":["Vista previa en X"],"Please enter a valid focus keyphrase.":["Por favor, introduce una frase clave válida."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Para utilizar esta función, tu sitio debe ser de acceso público. Esto se aplica tanto a los sitios de prueba como a los casos en los que tu REST API está protegida por contraseña. Asegúrate de que tu sitio es accesible al público y vuelva a intentarlo. Si el problema persiste, por favor %1$scontacta con nuestro equipo de soporte%2$s."],"Yoast AI cannot reach your site":["Yoast AI no puede acceder a tu sitio"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para acceder a esta función, necesitas suscripciones activas a %2$s y %3$s. Por favor, %5$sactiva tus suscripciones en %1$s%6$s u %7$sobtén una nueva %4$s%8$s. Después, actualiza esta página para que la función funcione correctamente, lo que puede tardar hasta 30 segundos."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["El generador de títulos AI requiere que el análisis SEO esté activado antes de su uso. Para activarlo, ve a %2$sCaracterísticas del sitio de %1$s%3$s, activa el análisis SEO y haz clic en \"Guardar cambios\". Si el análisis SEO está desactivado en tu perfil de usuario de WordPress, accede a tu perfil y actívalo allí. Ponte en contacto con tu administrador si no tienes acceso a esta configuración."],"Social share preview":["Vista previa para compartir en redes sociales"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Para seguir utilizando la función Yoast AI, reduce la frecuencia de tus solicitudes. Nuestro %1$sartículo de ayuda%2$s proporciona orientación sobre cómo planificar y espaciar eficazmente tus solicitudes para un flujo de trabajo optimizado."],"You've reached the Yoast AI rate limit.":["Has alcanzado el límite de la IA de Yoast."],"Allow":["Permitir"],"Deny":["Denegar"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Para ver este vídeo tienes que permitir a %1$s cargar vídeos incrustados desde %2$s."],"Text generated by AI may be offensive or inaccurate.":["El texto generado por la IA puede ser ofensivo o inexacto."],"(Opens in a new browser tab)":["(Se abre en una nueva pestaña del navegador)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Acelera tu flujo de trabajo con la IA generativa. Consigue sugerencias de título y descripción de alta calidad para tu apariencia social y en el buscador. %1$sSaber más%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["¡Genera títulos y descripciones con la IA de Yoast!"],"New to %1$s":["Nuevo en %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Acepto las %1$sCondiciones del servicio%2$s y la %3$sPolítica de privacidad%4$s del servicio Yoast AI. Esto incluye dar mi consentimiento a la recopilación y uso de datos para mejorar la experiencia del usuario."],"Start generating":["Empieza a generar"],"Yes, revoke consent":["Sí, revoca el consentimiento"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Al revocar tu consentimiento, dejarás de tener acceso a las funciones de la IA de Yoast. ¿Estás seguro de que quieres revocar tu consentimiento?"],"Something went wrong, please try again later.":["Algo salió mal. Vuelve a intentarlo más tarde."],"Revoke AI consent":["Revocar el consentimiento de la IA"],"AI title generator":["Generador de títulos con IA"],"AI description generator":["Generador de descripciones con IA"],"AI social title generator":["Generador de títulos sociales con AI"],"AI social description generator":["Generador de descripciones sociales con IA"],"Dismiss":["Descartar"],"Don’t show again":["No volver a mostrar"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sConsejo%2$s: Mejora la precisión de los títulos generados por la IA escribiendo más contenido en tu página."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sConsejo%2$s: Mejora la precisión de las descripciones generadas por la IA escribiendo más contenido en tu página."],"Try again":["Inténtalo de nuevo"],"Social preview":["Vista previa en medios sociales"],"Desktop result":["Resultado en escritorio"],"Mobile result":["Resultado móvil"],"Apply %s description":[],"Apply %s title":[],"Next":["Siguiente"],"Previous":["Anterior"],"Generate 5 more":["Genera 5 más"],"Google preview":["Vista previa de Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Debido a las estrictas directrices éticas de OpenAI y a sus %1$spolíticas de uso%2$s, no podemos generar títulos SEO para tu página. Si tienes intención de utilizar la IA, por favor, evita el uso de contenido explícito, violento o sexualmente explícito. %3$sLee más sobre cómo configurar tu página para asegurarte de que obtienes los mejores resultados con la IA%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Debido a las estrictas directrices éticas y políticas de uso de %1$sOpenAI%2$s, no podemos generar meta descripciones para tu página. Si tienes intención de utilizar la IA, por favor, evita el uso de contenido explícito, violento o sexualmente explícito. %3$sLee más sobre cómo configurar tu página para asegurarte de que obtienes los mejores resultados con la IA%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para acceder a esta característica, necesitas una suscripción activa de %1$s. Por favor, %3$sactiva tu suscripción en %2$s%4$s u %5$sobtén una nueva suscripción %1$s%6$s. Después, haz clic en el botón para actualizar esta página para que la función funcione correctamente, lo que puede tardar hasta 30 segundos."],"Refresh page":["Recarga la página"],"Not enough content":["Contenido insuficiente"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Vuelve a intentarlo más tarde. Si el problema persiste, ponte %1$sen contacto con nuestro equipo de asistencia%2$s!"],"Something went wrong":["Algo salió mal"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Parece que se ha agotado el tiempo de conexión. Comprueba tu conexión a Internet y vuelve a intentarlo más tarde. Si el problema persiste, ponte %1$sen contacto con nuestro equipo de asistencia%2$s"],"Connection timeout":["Tiempo de espera de conexión"],"Use AI":["Usa la IA"],"Close modal":["Cerrar modal"],"Learn more about AI (Opens in a new browser tab)":["Más información sobre la IA (Se abre en una nueva pestaña del navegador)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTítulo%3$s: Tu página todavía no tiene título. ¡%2$sAñade uno%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTítulo%2$s: Tu página tiene título. ¡Bien hecho!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribución de frase clave%3$s: %2$sIncluye tu frase clave o sus sinónimos en el texto para que podamos comprobar la distribución de la frase clave%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribución de frase clave%2$s: ¡Buen trabajo!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribución de frase clave%3$s: Desigual. Algunas partes de tu texto no contienen la frase clave o sus sinónimos. %2$sDistribúyelas de manera más uniforme%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribución de frase clave%3$s: Muy desigual. Grandes partes de tu texto no contienen la frase clave o sus sinónimos. %2$sDistribúyelas de manera más uniforme%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: No estás usando demasiadas palabras complejas, lo que hace que tu texto sea fácil de leer. ¡Buen trabajo!"],"Word complexity":["Complejidad de palabras"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: El %2$s de las palabras de tu texto se consideran complejas. %3$sIntenta usar palabras más familiares para mejorar la legibilidad%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlineación%3$s: Hay una sección muy larga con texto alineado al centro. %2$sRecomendamos alinearla a la izquierda%3$s.","%1$sAlineación%3$s: Hay %4$s secciones muy largas con texto alineado al centro. %2$sRecomendamos alinearlas a la izquierda%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlineación%3$s: Hay una sección muy larga con texto alineado al centro. %2$sRecomendamos alinearla a la derecha%3$s.","%1$sAlineación%3$s: Hay %4$s secciones muy largas con texto alineado al centro. %2$sRecomendamos alinearlas a la derecha%3$s."],"Select image":["Seleccionar imagen"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Puede que no lo sepas, pero podría haber páginas en tu sitio que no tengan ningún enlace. Eso es un problema de SEO, porque es difícil para los motores de búsqueda encontrar páginas que no tengan ningún enlace. Por lo que es más difícil que las posicionen. Llamamos a estas páginas contenido huérfano. En este ejercicio encontraremos el contenido huérfano de tu sitio y te guiaremos a que le añadas enlaces rápidamente, ¡para que tengan la posibilidad de posicionar!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["¡Es momento de añadir algunos enlaces! Abajo verás una lista de tus artículos huérfanos. Debajo de cada uno hay sugerencias de páginas relacionadas desde las que podrías añadir un enlace. Cuando añadas el enlace asegúrate de insertar una frase relevante relacionada con tu artículo huérfano. Sigue añadiendo enlaces a cada uno de los artículos huérfanos hasta que estés satisfecho con la cantidad de enlaces que les apunten."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["¡Es momento de añadir algunos enlaces! Abajo verás una lista de tus contenidos esenciales. Debajo de cada contenido esencial hay sugerencias de artículos relacionados desde las que podrías añadir un enlace. Cuando añadas el enlace asegúrate de insertar una frase relevante relacionada con tu contenido esencial. Sigue añadiendo enlaces a cada uno de los contenidos esenciales hasta que tus contenidos esenciales tengan la mayoría de los enlaces internos apuntando hacia ellos."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Algunos artículos de tu sitio son %1$slos%2$s más importantes. Responden a preguntas de la gente y resuelven sus problemas. ¡Así que merecen posicionar!. En %3$s los llamamos artículos de contenido esencial. Uno de los métodos para hacer que posicionen es apuntar enlaces hacia ellos. Cuantos más enlaces haya se indica a los motores de búsqueda que esos artículos son importantes y valiosos. ¡En este ejercicio te ayudaremos a añadir enlaces a tus artículos de contenido esencial!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Una vez añadas algo más de texto podremos decirte el nivel de formalidad de tu texto."],"Overall, your text appears to be %1$s%3$s%2$s.":["En conjunto, tu texto parece ser %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["La integración con Zapier se eliminará de %1$s en la versión 20.7 (fecha de lanzamiento 9 de mayo). Si tienes alguna pregunta, por favor, contacta con %2$s."],"Maximum heading level":["Nivel máximo de encabezado"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Has desactivado las sugerencias de enlaces, que son necesarias para que funcionen los enlaces relacionados. Si quieres añadir enlaces relacionados, por favor, ve a características del sitio y activa las sugerencias de enlaces."],"Schema":["Schema"],"Meta tags":["Etiquetas meta"],"Not available":["No disponible"],"Checks":["Comprobaciones"],"Focus Keyphrase":["Frase clave objetivo"],"Good":["Bien"],"No index":["No indexar"],"Front-end SEO inspector":["Inspector SEO en portada"],"Focus keyphrase not set":["La frase clave objetivo no está establecida"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Cuando hayas publicado tu Zap en tu escritorio de %s, puedes comprobar si está activo y conectado a tu sitio."],"Reset API key":["Restablecer clave API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Actualmente estás conectado a %s usando la siguiente clave APi. Si quieres volver a conectar con una clave API diferente puedes restablecer tu clave a continuación."],"Your API key":["Tu clave API"],"Go to your %s dashboard":["Ve a tu escritorio de %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["¡Te has conectado correctamente a %1$s! Para gestionar tu Zap, por favor, visita tu escritorio de %2$s."],"Your %s dashboard":["Tu escritorio de %s"],"Verify connection":["Verificar conexión"],"Verify your connection":["Verifica tu conexión"],"Create a Zap":["Crea un Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["¡Accede a tu cuenta de %1$s y empieza a crear tu primer Zap! Ten en cuenta que solo puedes crear 1 Zap con un evento disparador desde %2$s. Dentro de este Zap puedes elegir una o más acciones."],"%s API key":["Clave API de %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Necesitarás esta clave API más tarde en %s, cuando estés configurando tu Zap."],"Copy your API key":["Copia tu clave API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Para configurar una conexión, asegúrate de que has copiado la clave API indicada abajo y úsala para crear y activar un Zap dentro de tu cuenta de %s."],"Manage %s settings":["Gestionar ajustes de %s"],"Connect to %s":["Conectar a %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Nota: Para que este ejercicio funcione bien tienes que ejecutar la herramienta de optimización de datos SEO. Los administradores pueden ejecutarla en %1$sEsSEO > Herramientas%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Has añadido enlaces a tus artículos huérfanos, y has limpiado los que ya no eran relevantes. ¡Gran trabajo! ¡Echa un vistazo al resumen de abajo y celebra lo que has logrado!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Examina críticamente el contenido de esta lista y haz los cambios necesarios. Si necesitas ayuda tenemos una %1$sentrada de blog muy útil que puede ayudarte en todo el proceso%2$s (clic para abrir en una pestaña nueva)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$s¿Necesitas más orientación? Hemos cubierto cada paso en más detalle en la siguiente guía: %2$sEjercicio de cómo usar el %7$s contenido huérfano%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["¡Has hecho que tu mejor contenido sea fácil de encontrar, y con más posibilidades de posicionar! ¡Bien hecho! ¡De vez en cuando, recuerda revisar si tus contenidos esenciales están recibiendo suficientes enlaces!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Echa un vistazo a la lista de abajo. ¿Tienen tus contenidos esenciales (marcados con %1$s) la mayor parte de enlaces internos apuntando hacia ellos? Haz clic en el botón de optimizar si crees que un contenido esencial necesita más enlaces. Eso moverá el artículo al siguiente paso."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["¿Tienen todos tus contenidos esenciales bolitas verdes? ¡Para obtener los mejores resultados posibles plantéate editar los que no las tengan!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["¿Con qué artículos quieres posicionar más? ¿Cuáles serían los más útiles y completos para tu audiencia? Haz clic en la flecha hacia abajo y busca artículos que coincidan con estos criterios. Marcaremos automáticamente los artículos que selecciones de la lista como esenciales."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$s¿Necesitas más orientación? Hemos cubierto cada paso en más detalle en: %2$sEjercicio de cómo usar el %7$s contenido esencial%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Tabla de contenidos de Yoast"],"Yoast Related Links":["Enlaces relacionados de Yoast"],"Finish optimizing":["Terminar de optimizar"],"You've finished adding links to this article.":["Has terminado de añadir enlaces a este artículo."],"Optimize":["Optimizar"],"Added to next step":["Añadido al siguiente paso"],"Choose cornerstone articles...":["Elige artículos esenciales…"],"Loading data...":["Cargando datos…"],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Todavía no has realizado o actualizado ningún artículo usando este ejercicio. Cuando lo hagas, se mostrará aquí un resumen de tu ejercicio."],"Skipped":["Omitidas"],"Hidden from search engines.":["Oculto de los motores de búsqueda."],"Removed":["Eliminado"],"Improved":["Mejorado"],"Resolution":["Resolución"],"Loading redirect options...":["Cargando las opciones de redirección…"],"Remove and redirect":["Eliminar y redirigir"],"Custom url:":["URL personalizada:"],"Related article:":["Artículo relacionado:"],"Home page:":["Página de inicio:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Estás a punto de eliminar %1$s%2$s%3$s. Para evitar 404s en tu sitio deberías redirigir a otra página en tu sitio. ¿A dónde te gustaría redirigir?"],"SEO Workout: Remove article":["Ejercicio SEO: Eliminar artículo"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["¡Todo parece estar bien! No hemos encontrado ningún artículo en tu sitio de más de seis meses y que reciba demasiados pocos enlaces. ¡Vuelve a comprobar esto más tarde para más sugerencias de limpieza!"],"Hide from search engines":["Ocultar de los motores de búsqueda"],"Improve":["Mejorar"],"Are you sure you wish to hide this article from search engines?":["¿Seguro que quieres ocultar este artículo de los motores de búsqueda?"],"Action":["Acción"],"You've hidden this article from search engines.":["Has ocultado este artículo de los motores de búsqueda."],"You've removed this article.":["Has eliminado este artículo."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["En este momento no has seleccionado ningún artículo para mejorarlo. Selecciona unos cuantos artículos en los pasos anteriores para añadirles enlaces y te mostraremos aquí tus sugerencias de enlaces."],"Loading link suggestions...":["Cargando sugerencias de enlaces…"],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["No hemos encontrado ninguna sugerencia de enlaces para este artículo, pero, por supuesto, todavía puedes añadir enlaces a los artículos que creas que estén relacionados."],"Skip":["Saltar"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Todavía no has seleccionado ningún artículo para este paso. Puedes hacerlo en el paso anterior."],"Is it up-to-date?":["¿Está al día?"],"Last Updated":["Última actualización"],"You've moved this article to the next step.":["Has movido este artículo al siguiente paso."],"Unknown":["Desconocido"],"Clear summary":["Vaciar resumen"],"Add internal links towards your orphaned articles.":["Añade enlaces internos hacia tus artículos huérfanos."],"Should you update your article?":["¿Deberías actualizar tu artículo?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Tu sitio puede que contenga mucho contenido que creaste una vez y nunca volviste a mirar. Es importante revisar esas páginas y preguntarte si ese contenido sigue siendo relevante para tu sitio. ¿Deberías mejorarlo o eliminarlo?"],"Start: Love it or leave it?":["Inicio: ¿Amarlo o dejarlo?"],"Clean up your unlinked content to make sure people can find it":["Actualiza tu contenido sin enlazar para asegurarte de que la gente puede encontrarlo"],"I've finished this workout":["He terminado este ejercicio"],"Reset this workout":["Restablecer este ejercicio"],"Well done!":["¡Bien hecho!"],"Add internal links towards your cornerstones":["Añade enlaces internos hacia tus contenidos esenciales"],"Check the number of incoming internal links of your cornerstones":["Comprueba la cantidad de enlaces internos entrantes de tus contenidos esenciales"],"Start: Choose your cornerstones!":["Empieza: ¡Elige tus contenidos esenciales!"],"The cornerstone approach":["El enfoque en el contenido esencial"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Nota: Para que este ejercicio funcione bien y te ofrezca sugerencias de enlaces, necesitas ejecutar la herramienta de optimización de datos SEO. Los administradores pueden ejecutarla en %1$sEsSEO > Herramientas%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Por favor, ten en cuenta lo siguiente: Tu administrador ha desactivado la funcionalidad de contenido esencial en los ajustes de SEO. Si quieres utilizar este ejercicio debería estar activada."],"I've finished this step":["He terminado este paso"],"Revise this step":["Revisar este paso"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["No hemos sido capaces de encontrar enlaces internos en tus páginas. O no has añadido aún ningún enlace interno a tu contenido o Yoast SEO no los ha indexado. Puedes hacer que Yoast SEO indexe tus enlaces ejecutando la optimización de datos SEO en SEO > Herramientas."],"Incoming links":["Enlaces entrantes"],"Edit to add link":["Editar para añadir enlace"],"%s incoming link":["%s enlace entrantes","%s enlace entrantes"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Actualmente no tienes ningún artículo marcado como esencial. Cuando marques tus artículos como esenciales se mostrarán aquí."],"Focus keyphrase":["Frase clave objetivo"],"Article":["Artículo"],"Readability score":["Puntuación de legibilidad"],"SEO score":["Puntuación SEO"],"Copy failed":["La copia ha fallado"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["¡Mejora el posicionamiento de tus contenidos esenciales usando este %1$sejercicio paso a paso!%2$s"],"Rank with articles you want to rank with":["Posiciona con los artículos con los que quieres posicionar"],"Descriptive text":["Texto descriptivo"],"Show the descriptive text":["Mostrar el texto descriptivo"],"Show icon":["Mostrar icono"],"Yoast Estimated Reading Time":["Tiempo de lectura estimado de Yoast"],"Shows an estimated reading time based on the content length.":["Muestra un tiempo de lectura estimado basado en la longitud del contenido."],"reading time":["tiempo de lectura"],"content length":["longitud del contenido"],"Estimated reading time:":["Tiempo de lectura estimado:"],"minute":["minuto","minutos"],"Settings":["Ajustes"],"OK":["Aceptable"],"Close":["Cerrar"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["La primera verdadera solución SEO todo en uno para WordPress, incluyendo análisis de contenido de páginas, mapas del sitio en XML y mucho más."],"Type":["Tipo"],"Team Yoast":["Equipo Yoast"],"Orphaned content":["Contenido huérfano"],"Synonyms":["Sinónimos"],"Internal linking suggestions":["Sugerencias de enlaces internos"],"Enter a related keyphrase to calculate the SEO score":["Introduce una frase clave relacionada para calcular la puntuación SEO"],"Related keyphrase":["Frase clave relacionada"],"Add related keyphrase":["Añadir frase clave relacionada"],"Analysis results":["Resultados del análisis"],"Help on choosing the perfect keyphrase":["Ayuda sobre cómo elegir la frase clave perfecta"],"Help on keyphrase synonyms":["Ayuda sobre sinónimos de frases clave"],"Keyphrase":["Frase clave"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nueva URL: {{link}}%s{{/link}}"],"Undo":["Deshacer"],"Redirect created":["Redirección creada"],"%s just created a redirect from the old URL to the new URL.":["%s acaba de crear una redirección de la URL antigua a la nueva."],"Old URL: {{link}}%s{{/link}}":["URL antigua: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinónimos de la frase clave"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Ha ocurrido un error: el análisis Premium SEO no está funcionando como se esperaba. Por favor, asegúrate de que has {{activateLink}}activado tu suscripción en MyYoast{{/activateLink}} y luego {{reloadButton}}recarga esta página{{/reloadButton}} para que funcione correctamente."],"seo":["seo"],"internal linking":["enlaces internos"],"site structure":["estructura del sitio"],"We could not find any relevant articles on your website that you could link to from your post.":["No hemos podido encontrar ningún artículo relevante en tu web al que puedas enlazar desde tu entrada."],"Load suggestions":["Cargar sugerencias"],"Refresh suggestions":["Recargar sugerencias"],"Write list…":["Escribe una lista…"],"Adds a list of links related to this page.":["Añade una lista de enlaces relacionados con esta página."],"related posts":["entradas relacionadas"],"related pages":["páginas relacionadas"],"Adds a table of contents to this page.":["Añade una tabla de contenidos a esta página."],"links":["enlaces"],"toc":["toc"],"Copy link":["Copiar enlace"],"Copy link to suggested article: %s":["Copiar enlace al artículo sugerido: %s"],"Add a title to your post for the best internal linking suggestions.":["Añade un título a tu entrada para obtener mejores sugerencias de enlazado interno."],"Add a metadescription to your post for the best internal linking suggestions.":["Añade una metadescription a tu entrada para obtener mejores sugerencias de enlazado interno."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Añade un título y una metadescription a tu entrada para obtener mejores sugerencias de enlazado interno."],"Also, add a title to your post for the best internal linking suggestions.":["También, añade un título a tu entrada para obtener mejores sugerencias de enlazado interno."],"Also, add a metadescription to your post for the best internal linking suggestions.":["También, añade una metadescripción a tu entrada para obtener mejores sugerencias de enlazado interno."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["También, añade un título y una metadescripción a tu entrada para obtener mejores sugerencias de enlazado interno."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["En cuanto añadas algo más de texto te daremos aquí una lista de contenido relacionado con el que podrías enlazar en tu entrada."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Plantéate enlazar a otras entradas o páginas relevantes de tu web para mejorar la estructura de tu sitio ."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Mostrarte una lista de contenido relacionado al cual podrías enlazar tarda unos segundos. Las sugerencias se mostrarán aquí en cuanto las tengamos."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Lee nuestra guía sobre enlazado interno para SEO{{/a}} para aprender más."],"Copied!":["¡Copiado!"],"Not supported!":["¡No compatible!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["¿Estas tratando de usar varias frases claves relacionadas? Deberías añadirlas por separado."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Tu frase clave es demasiado larga. Puede tener un máximo de 191 caracteres."],"Add as related keyphrase":["Añadir como frase clave relacionada"],"Added!":["¡Añadida!"],"Remove":["Quitar"],"Table of contents":["Tabla de contenidos"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Necesitamos optimizar los datos SEO de tu sitio para poder ofrecerte las mejores %1$ssugerencias de enlaces%2$s.\n\n%3$sIniciar la optimización de datos SEO%4$s"],"Create a Zap in %s":["Crear un Zap en %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_MX.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_MX.json new file mode 100644 index 00000000..e62588bb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-es_MX.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"es_MX"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["La solicitud volvió con el siguiente error: \"%s\""],"X share preview":["Vista previa en X"],"AI X title generator":["Generador IA de título para X"],"AI X description generator":["Generador IA de descripción de X"],"X preview":["Vista Previa de X"],"Please enter a valid focus keyphrase.":["Por favor ingresa una frase clave válida"],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Para usar esta característica, tu sitio debe ser de acceso público. Esto aplica para sitios de prueba e instancias donde tu REST API necesite contraseña. Por favor asegúrate sea accesible al público e intenta de nuevo. Si el problema persiste, por favor %1$scontáctanos%2$s."],"Yoast AI cannot reach your site":["La IA de Yoast no puede acceder a tu sitio."],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para acceder a esta función, necesitas suscripciones activas a %2$s y %3$s. Por favor, %5$sactiva tus suscripciones en %1$s%6$s u %7$sobtén una nueva %4$s%8$s. Después, actualiza esta página para que la función funcione correctamente, lo que puede tardar hasta 30 segundos."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["El generador de títulos de IA requiere que el análisis SEO esté activado antes de su uso. Para activarlo, ve a %2$sCaracterísticas del sitio de %1$s%3$s, activa el análisis SEO y haz clic en \"Guardar cambios\". Si el análisis SEO está desactivado en tu perfil de usuario de WordPress, accede a tu perfil y actívalo allí. Ponte en contacto con tu administrador si no tienes acceso a esta configuración."],"Social share preview":["Vista previa para compartir en redes sociales"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Para seguir utilizando la función Yoast AI, reduce la frecuencia de tus solicitudes. Nuestro %1$sartículo de ayuda%2$s proporciona orientación sobre cómo planificar y espaciar eficazmente tus solicitudes para un flujo de trabajo optimizado."],"You've reached the Yoast AI rate limit.":["Has alcanzado el límite de la IA de Yoast."],"Allow":["Permitir"],"Deny":["Denegar"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Para ver este video tienes que permitir a %1$s cargar videos incrustados desde %2$s."],"Text generated by AI may be offensive or inaccurate.":["El texto generado por la IA puede ser ofensivo o inexacto."],"(Opens in a new browser tab)":["Abrir en nueva pestaña de buscador"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Acelera tu flujo de trabajo con la IA generativa. Consigue sugerencias de título y descripción de alta calidad para tu apariencia social y en el buscador. %1$sSaber más%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["¡Genera títulos y descripciones con la IA de Yoast!"],"New to %1$s":["Nuevo en %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Acepto las %1$sCondiciones del servicio%2$s y la %3$sPolítica de privacidad%4$s del servicio Yoast AI. Esto incluye dar mi consentimiento a la recopilación y uso de datos para mejorar la experiencia del usuario."],"Start generating":["Empieza a generar"],"Yes, revoke consent":["Sí, revoca el consentimiento"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Al revocar tu consentimiento, dejarás de tener acceso a las funciones de la IA de Yoast. ¿Estás seguro de que quieres revocar tu consentimiento?"],"Something went wrong, please try again later.":["Algo salió mal. Vuelve a intentarlo más tarde."],"Revoke AI consent":["Revocar el consentimiento de la IA"],"AI title generator":["Generador de títulos con IA"],"AI description generator":["Generador de descripciones con IA"],"AI social title generator":["Generador de títulos sociales con AI"],"AI social description generator":["Generador de descripciones sociales con IA"],"Dismiss":["Descartar"],"Don’t show again":["No volver a mostrar"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sConsejo%2$s: Mejora la precisión de los títulos generados por la IA escribiendo más contenido en tu página."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sConsejo%2$s: Mejora la precisión de las descripciones generadas por la IA escribiendo más contenido en tu página."],"Try again":["Inténtalo de nuevo"],"Social preview":["Vista previa en medios sociales"],"Desktop result":["Resultado en escritorio"],"Mobile result":["Resultado móvil"],"Apply %s description":[],"Apply %s title":[],"Next":["Siguiente"],"Previous":["Anterior"],"Generate 5 more":["Genera 5 más"],"Google preview":["Vista previa de Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Debido a las estrictas directrices éticas de OpenAI y a sus %1$spolíticas de uso%2$s, no podemos generar títulos SEO para tu página. Si tienes intención de utilizar la IA, por favor, evita el uso de contenido explícito, violento o sexualmente explícito. %3$sLee más sobre cómo configurar tu página para asegurarte de que obtienes los mejores resultados con la IA%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Debido a las estrictas directrices éticas y políticas de uso de %1$sOpenAI%2$s, no podemos generar meta descripciones para tu página. Si tienes intención de utilizar la IA, por favor, evita el uso de contenido explícito, violento o sexualmente explícito. %3$sLee más sobre cómo configurar tu página para asegurarte de que obtienes los mejores resultados con la IA%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para acceder a esta característica, necesitas una suscripción activa de %1$s. Por favor, %3$sactiva tu suscripción en %2$s%4$s u %5$sobtén una nueva suscripción %1$s%6$s. Después, haz clic en el botón para actualizar esta página para que la función funcione correctamente, lo que puede tardar hasta 30 segundos."],"Refresh page":["Actualiza la página"],"Not enough content":["Contenido insuficiente"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Vuelve a intentarlo más tarde. Si el problema persiste, %1$sponte en contacto con nuestro equipo de asistencia%2$s"],"Something went wrong":["Algo salió mal"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Parece que se ha agotado el tiempo de conexión. Comprueba tu conexión a Internet y vuelve a intentarlo más tarde. Si el problema persiste, ponte %1$sen contacto con nuestro equipo de asistencia%2$s"],"Connection timeout":["La conexión superó el tiempo de espera"],"Use AI":["Usar la IA"],"Close modal":["Cerrar modal"],"Learn more about AI (Opens in a new browser tab)":["Más información sobre la IA (Se abre en una nueva pestaña del navegador)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTítulo%3$s: Tu página todavía no tiene título. ¡%2$sAñade uno%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTítulo%2$s: Tu página tiene título. ¡Bien hecho!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribución de frase clave%3$s: %2$sIncluye tu frase clave o sus sinónimos en el texto para que podamos checar la distribución de la frase clave%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sLongitud de frase clave%2$s: ¡Buen trabajo!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribución de frase clave%3$s: Desigual. Algunas partes de tu texto no contiene la frase clave o sus sinónimos. %2$sDistribúyelos de manera más equitativa%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribución de frase clave%3$s: Muy desigual. Piezas grandes de su texto no contienen la frase clave o sus sinónimos. %2$sDistribúyelos de manera más equitativa%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: No estás usando demasiadas palabras complejas, lo que hace que tu texto sea fácil de leer. ¡Buen trabajo!"],"Word complexity":["Complejidad de palabras"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: El %2$s de las palabras de tu texto se consideran complejas. %3$sIntenta usar palabras más familiares para mejorar la legibilidad%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlineación%3$s: Hay una sección muy larga con texto alineado al centro. %2$sRecomendamos alinearla a la izquierda%3$s.","%1$sAlineación%3$s: Hay %4$s secciones muy largas con texto alineado al centro. %2$sRecomendamos alinearlas a la izquierda%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlineación%3$s: Hay una sección muy larga con texto alineado al centro. %2$sRecomendamos alinearla a la derecha%3$s.","%1$sAlineación%3$s: Hay %4$s secciones muy largas con texto alineado al centro. %2$sRecomendamos alinearlas a la derecha%3$s."],"Select image":["Seleccionar imagen"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Quizás no lo sepas, pero podría haber páginas en tu sitio que no tengan ningún enlace. Eso es un problema de SEO, porque es difícil para los motores de búsqueda encontrar páginas que no tengan enlaces. Por lo que es más difícil que rankeen. Llamamos a estas páginas \"contenido huérfano\". En este ejercicio encontraremos el contenido huérfano de tu sitio y te guiaremos para que le añadas enlaces rápidamente, ¡y que tengan la posibilidad de posicionar!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["¡Es momento de añadir algunos enlaces! Abajo verás una lista de tus entradas huérfanas. Debajo de cada una hay sugerencias de páginas relacionadas desde las que podrías añadir un enlace. Cuando añadas el enlace asegúrate de insertar una frase relevante relacionada con tu entrada huérfana. Sigue añadiendo enlaces a cada una de las entradas huérfanos hasta que te guste la cantidad de enlaces que les apunten."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["¡Es momento de añadir algunos enlaces! Abajo verás una lista de tus contenidos esenciales. Debajo de cada contenido esencial hay sugerencias de artículos relacionados desde las que podrías añadir un enlace. Cuando añadas el enlace asegúrate de insertar una frase relevante relacionada con tu contenido esencial. Sigue añadiendo enlaces a cada uno de los contenidos esenciales hasta que tus contenidos esenciales tengan la mayoría de los enlaces internos apuntando hacia ellos."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Algunos artículos de tu sitio son %1$slos%2$s más importantes. Responden a preguntas de la gente y resuelven sus problemas. ¡Así que merecen posicionar!. En %3$s los llamamos artículos de contenido esencial. Uno de los métodos para hacer que posicionen es apuntar enlaces hacia ellos. Cuantos más enlaces haya se indica a los motores de búsqueda que esos artículos son importantes y valiosos. ¡En este ejercicio te ayudaremos a añadir enlaces a tus artículos de contenido esencial!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Una vez añadas algo más de texto podremos decirte el nivel de formalidad de tu texto."],"Overall, your text appears to be %1$s%3$s%2$s.":["En conjunto, tu texto parece ser %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["La integración con Zapier será removida de %1$s en 20.7 (fecha de lanzamiento 9 de Mayo). Si tienes otras preguntas, por favor contáctanos en %2$s."],"Maximum heading level":["Nivel máximo de encabezado"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Has desactivado las sugerencias de enlaces, que son necesarias para que funcionen los enlaces relacionados. Si quieres añadir enlaces relacionados, por favor, ve a Características del Sitio y activa las Sugerencias de Enlaces."],"Schema":["Esquema"],"Meta tags":["Etiquetas meta"],"Not available":["No disponible"],"Checks":["Comprobaciones"],"Focus Keyphrase":["Frase clave objetivo"],"Good":["Bueno"],"No index":["No indexar"],"Front-end SEO inspector":["Inspector SEO en portada"],"Focus keyphrase not set":["La frase clave objetivo no está establecida"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Cuando hayas publicado tu Zap en tu escritorio de %s, puedes comprobar si está activo y conectado a tu sitio."],"Reset API key":["Restablecer clave API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Actualmente estás conectado a %s usando la siguiente clave APi. Si quieres volver a conectar con una clave API diferente puedes restablecer tu clave a continuación."],"Your API key":["Tu clave API"],"Go to your %s dashboard":["Ve a tu escritorio de %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["¡Te has conectado correctamente a %1$s! Para gestionar tu Zap, por favor, visita tu escritorio de %2$s."],"Your %s dashboard":["Tu escritorio de %s"],"Verify connection":["Verificar conexión"],"Verify your connection":["Verifica tu conexión"],"Create a Zap":["Crea un Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["¡Accede a tu cuenta de %1$s y empieza a crear tu primer Zap! Ten en cuenta que solo puedes crear 1 Zap con un evento disparador desde %2$s. Dentro de este Zap puedes elegir una o más acciones."],"%s API key":["Clave API de %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Necesitarás esta clave API más tarde en %s, cuando estés configurando tu Zap."],"Copy your API key":["Copia tu clave API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Para configurar una conexión, asegúrate de que has copiado la clave API indicada abajo y úsala para crear y activar un Zap dentro de tu cuenta de %s."],"Manage %s settings":["Gestionar ajustes de %s"],"Connect to %s":["Conectar a %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Nota: Para que este ejercicio funcione bien tienes que ejecutar la herramienta de optimización de datos SEO. Los administradores pueden ejecutarla en %1$sEsSEO > Herramientas%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Has añadido enlaces a tus artículos huérfanos, y has limpiado los que ya no eran relevantes. ¡Gran trabajo! ¡Echa un vistazo al resumen de abajo y celebra lo que has logrado!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Examina críticamente el contenido de esta lista y haz los cambios necesarios. Si necesitas ayuda tenemos una %1$sentrada de blog muy útil que puede ayudarte en todo el proceso%2$s (clic para abrir en una pestaña nueva)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$s¿Necesitas más orientación? Hemos cubierto cada paso en más detalle en la siguiente guía: %2$sEjercicio de cómo usar el %7$s contenido huérfano%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["¡Has hecho que tu mejor contenido sea fácil de encontrar, y con más posibilidades de posicionar! ¡Bien hecho! ¡De vez en cuando, recuerda revisar si tus contenidos esenciales están recibiendo suficientes enlaces!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Echa un vistazo a la lista de abajo. ¿Tienen tus contenidos esenciales (marcados con %1$s) la mayor parte de enlaces internos apuntando hacia ellos? Haz clic en el botón de optimizar si crees que un contenido esencial necesita más enlaces. Eso moverá el artículo al siguiente paso."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["¿Tienen todos tus contenidos esenciales bolitas verdes? ¡Para obtener los mejores resultados posibles plantéate editar los que no las tengan!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["¿Con qué artículos quieres posicionar más? ¿Cuáles serían los más útiles y completos para tu audiencia? Haz clic en la flecha hacia abajo y busca artículos que coincidan con estos criterios. Marcaremos automáticamente los artículos que selecciones de la lista como esenciales."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$s¿Necesitas más orientación? Hemos cubierto cada paso en más detalle en: %2$sEjercicio de cómo usar el %7$s contenido esencial%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Tabla de contenidos de Yoast"],"Yoast Related Links":["Enlaces relacionados de Yoast"],"Finish optimizing":["Terminar de optimizar"],"You've finished adding links to this article.":["Has terminado de agregar enlaces a este artículo."],"Optimize":["Optimizar"],"Added to next step":["Añadido al siguiente paso"],"Choose cornerstone articles...":["Elije artículos fundamentales..."],"Loading data...":["Cargando datos..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Todavía no has realizado o actualizado ningún artículo usando este ejercicio. Cuando lo hagas, se mostrará aquí un resumen de tu ejercicio."],"Skipped":["Omitidas"],"Hidden from search engines.":["Oculto de los motores de búsqueda."],"Removed":["Eliminado"],"Improved":["Mejorado"],"Resolution":["Resolución"],"Loading redirect options...":["Cargando las opciones de redirección…"],"Remove and redirect":["Eliminar y redirigir"],"Custom url:":["URL personalizada:"],"Related article:":["Artículo relacionado:"],"Home page:":["Página de inicio:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Estás a punto de eliminar %1$s%2$s%3$s. Para evitar 404s en tu sitio deberías redirigir a otra página en tu sitio. ¿A dónde te gustaría redirigir?"],"SEO Workout: Remove article":["Ejercicio SEO: Eliminar artículo"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["¡Todo parece estar bien! No hemos encontrado ningún artículo en tu sitio de más de seis meses y que reciba demasiados pocos enlaces. ¡Vuelve a comprobar esto más tarde para más sugerencias de limpieza!"],"Hide from search engines":["Ocultar de los motores de búsqueda"],"Improve":["Mejorar"],"Are you sure you wish to hide this article from search engines?":["¿Seguro que quieres ocultar este artículo de los motores de búsqueda?"],"Action":["Acción"],"You've hidden this article from search engines.":["Has ocultado este artículo de los motores de búsqueda."],"You've removed this article.":["Has eliminado este artículo."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["En este momento no has seleccionado ningún artículo para mejorarlo. Selecciona unos cuantos artículos en los pasos anteriores para añadirles enlaces y te mostraremos aquí tus sugerencias de enlaces."],"Loading link suggestions...":["Cargando sugerencias de enlaces…"],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["No hemos encontrado ninguna sugerencia de enlaces para este artículo, pero, por supuesto, todavía puedes añadir enlaces a los artículos que creas que estén relacionados."],"Skip":["Saltar"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Todavía no has seleccionado ningún artículo para este paso. Puedes hacerlo en el paso anterior."],"Is it up-to-date?":["¿Está al día?"],"Last Updated":["Última actualización"],"You've moved this article to the next step.":["Has movido este artículo al siguiente paso."],"Unknown":["Desconocido"],"Clear summary":["Vaciar resumen"],"Add internal links towards your orphaned articles.":["Añade enlaces internos hacia tus artículos huérfanos."],"Should you update your article?":["¿Deberías actualizar tu artículo?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Tu sitio puede que contenga mucho contenido que creaste una vez y nunca volviste a mirar. Es importante revisar esas páginas y preguntarte si ese contenido sigue siendo relevante para tu sitio. ¿Deberías mejorarlo o eliminarlo?"],"Start: Love it or leave it?":["Inicia: ¿Amarlo o dejarlo?"],"Clean up your unlinked content to make sure people can find it":["Actualiza tu contenido sin enlazar para asegurarte de que la gente puede encontrarlo"],"I've finished this workout":["He terminado este ejercicio"],"Reset this workout":["Restablecer este ejercicio"],"Well done!":["¡Bien hecho!"],"Add internal links towards your cornerstones":["Añade enlaces internos hacia tus contenidos esenciales"],"Check the number of incoming internal links of your cornerstones":["Comprueba la cantidad de enlaces internos entrantes de tus contenidos esenciales"],"Start: Choose your cornerstones!":["Empieza: ¡Elige tus contenidos esenciales!"],"The cornerstone approach":["El enfoque en el contenido esencial"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Nota: Para que este ejercicio funcione bien y te ofrezca sugerencias de enlaces, necesitas ejecutar la herramienta de optimización de datos SEO. Los administradores pueden ejecutarla en %1$sEsSEO > Herramientas%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Por favor toma en cuenta lo siguiente: Tu administrador ha desactivado la funcionalidad de contenido esencial en los ajustes de SEO. Si quieres utilizar este ejercicio debería estar activada."],"I've finished this step":["He terminado este paso"],"Revise this step":["Revisar este paso"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["No hemos sido capaces de encontrar enlaces internos en tus páginas. O no has añadido aún ningún enlace interno a tu contenido o Yoast SEO no los ha indexado. Puedes hacer que Yoast SEO indexe tus enlaces ejecutando la optimización de datos SEO en SEO > Herramientas."],"Incoming links":["Enlaces entrantes"],"Edit to add link":["Editar para añadir enlace"],"%s incoming link":["%s enlace entrante","%s enlaces entrantes"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Actualmente no tienes ningún artículo marcado como esencial. Cuando marques tus artículos como esenciales se mostrarán aquí. "],"Focus keyphrase":["Frase clave de enfoque"],"Article":["Artículo"],"Readability score":["Puntaje de legibilidad"],"SEO score":["Puntuación SEO"],"Copy failed":["La copia ha fallado"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["¡Mejora el posicionamiento de tus contenidos esenciales usando este %1$sejercicio paso a paso!%2$s"],"Rank with articles you want to rank with":["Posiciona con los artículos con los que quieres posicionar"],"Descriptive text":["Texto descriptivo"],"Show the descriptive text":["Mostrar el texto descriptivo"],"Show icon":["Mostrar icono"],"Yoast Estimated Reading Time":["Tiempo de lectura estimado de Yoast"],"Shows an estimated reading time based on the content length.":["Muestra un tiempo de lectura estimado basado en la longitud del contenido."],"reading time":["tiempo de lectura"],"content length":["longitud del contenido"],"Estimated reading time:":["Tiempo de lectura estimado:"],"minute":["minuto","minutos"],"Settings":["Ajustes"],"OK":["Bien"],"Close":["Cerrar"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["La primera verdadera solución all-in-one SEO para WordPress, incluyendo el análisis de páginas de contenidos, mapas de sitio XML y mucho más."],"Type":["Tipo"],"Team Yoast":["Equipo Yoast"],"Orphaned content":["Contenido huérfano"],"Synonyms":["Sinónimos"],"Internal linking suggestions":["Sugerencias de enlaces internos"],"Enter a related keyphrase to calculate the SEO score":["Introduce una frase clave relacionada para calcular la puntuación SEO"],"Related keyphrase":["Frase clave relacionada"],"Add related keyphrase":["Agregar palabra clave relacionada "],"Analysis results":["Resultado del análisis:"],"Help on choosing the perfect keyphrase":["Ayuda sobre cómo elegir la frase clave perfecta"],"Help on keyphrase synonyms":["Ayuda sobre sinónimos de frases clave"],"Keyphrase":["Frase clave"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nueva URL: {{link}}%s{{/link}}"],"Undo":["Deshacer"],"Redirect created":["Redirección creada"],"%s just created a redirect from the old URL to the new URL.":["%s acaba de crear una redirección de la URL antigua a la nueva."],"Old URL: {{link}}%s{{/link}}":["URL antigua: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinónimos de la frase clave"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Ha ocurrido un error: el análisis Premium SEO no está funcionando como se esperaba. Por favor, asegúrate de que has {{activateLink}}activado tu suscripción en MyYoast{{/activateLink}} y luego {{reloadButton}}recarga esta página{{/reloadButton}} para que funcione correctamente."],"seo":["seo"],"internal linking":["enlaces internos"],"site structure":["estructura del sitio"],"We could not find any relevant articles on your website that you could link to from your post.":["No pudimos encontrar ningún artículo relevante en su sitio web que pudiera vincular desde su publicación."],"Load suggestions":["Cargar sugerencias"],"Refresh suggestions":["Recargar sugerencias"],"Write list…":["Escribe una lista…"],"Adds a list of links related to this page.":["Añade una lista de enlaces relacionados con esta página."],"related posts":["entradas relacionadas"],"related pages":["páginas relacionadas"],"Adds a table of contents to this page.":["Añade una tabla de contenidos a esta página."],"links":["enlaces"],"toc":["toc"],"Copy link":["Copiar enlace"],"Copy link to suggested article: %s":["Copiar enlace al artículo sugerido: %s"],"Add a title to your post for the best internal linking suggestions.":["Añade un título a tu entrada para obtener mejores sugerencias de enlazado interno."],"Add a metadescription to your post for the best internal linking suggestions.":["Añade una metadescription a tu entrada para obtener mejores sugerencias de enlazado interno."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Añade un título y una metadescription a tu entrada para obtener mejores sugerencias de enlazado interno."],"Also, add a title to your post for the best internal linking suggestions.":["También, añade un título a tu entrada para obtener mejores sugerencias de enlazado interno."],"Also, add a metadescription to your post for the best internal linking suggestions.":["También, añade una metadescripción a tu entrada para obtener mejores sugerencias de enlazado interno."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["También, añade un título y una metadescripción a tu entrada para obtener mejores sugerencias de enlazado interno."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["En cuanto añadas algo más de texto te daremos aquí una lista de contenido relacionado con el que podrías enlazar en tu entrada."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Plantéate enlazar a otras entradas o páginas relevantes de tu web para mejorar la estructura de tu sitio ."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Mostrarte una lista de contenido relacionado al cual podrías enlazar tarda unos segundos. Las sugerencias se mostrarán aquí en cuanto las tengamos."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Lee nuestra guía sobre enlazado interno para SEO{{/a}} para aprender más."],"Copied!":["Copiado!"],"Not supported!":["No soportado!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["¿Estas tratando de usar varias frases claves relacionadas? Deberías añadirlas por separado."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Tu frase clave es demasiado larga. Puede tener un máximo de 191 caracteres."],"Add as related keyphrase":["Añadir como frase clave relacionada"],"Added!":["¡Añadida!"],"Remove":["Eliminar"],"Table of contents":["Tabla de contenidos"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Necesitamos optimizar los datos SEO de tu sitio para poder ofrecerte las mejores %1$ssugerencias de enlaces%2$s.\n\n%3$sIniciar la optimización de datos SEO%4$s"],"Create a Zap in %s":["Crear un Zap en %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fa_IR.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fa_IR.json new file mode 100644 index 00000000..b232cce1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fa_IR.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=1; plural=0;","lang":"fa"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":[],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":[],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":[],"Social preview":[],"Desktop result":[],"Mobile result":[],"Apply %s description":[],"Apply %s title":[],"Next":["بعدی"],"Previous":["قبلی"],"Generate 5 more":[],"Google preview":["پیش نمایش Ú¯ÙˆÚ¯Ù„"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":[],"%1$sKeyphrase distribution%2$s: Good job!":[],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":[],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":["انتخاب تصویر"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":[],"Meta tags":["برچسب های متا"],"Not available":["در دسترس نیست"],"Checks":["برسی ها"],"Focus Keyphrase":["عبارت کلیدی کانونی"],"Good":["خوب"],"No index":["ایندکس نشده"],"Front-end SEO inspector":["بازرس سئوی ظاهر"],"Focus keyphrase not set":["عبارت کلیدی کانونی تنظیم نشده است"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["هنگامی Ú©Ù‡ Zap خود را در داشبورد %s خود منتشر کردید، Ù…ÛŒ توانید بررسی کنید Ú©Ù‡ آیا Zap ÙØ¹Ø§Ù„ Ùˆ به سایت شما متصل است یا خیر."],"Reset API key":["کلید API را بازنشانی کنید"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["شما در حال حاضر با Ø§Ø³ØªÙØ§Ø¯Ù‡ از کلید API زیر به %s متصل هستید. اگر می‌خواهید دوباره با یک کلید API دیگر وصل شوید، می‌توانید کلید خود را در زیر بازنشانی کنید."],"Your API key":["کلید API شما"],"Go to your %s dashboard":["به داشبورد %s خود بروید"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["شما با موÙقیت به %1$s متصل شدید! برای مدیریت Zap خود، Ù„Ø·ÙØ§Ù‹ از داشبورد %2$s خود بازدید کنید."],"Your %s dashboard":["داشبورد %s شما"],"Verify connection":["تأیید اتصال"],"Verify your connection":["اتصال خود را تأیید کنید"],"Create a Zap":["یک Zap ایجاد کنید"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["به حساب %1$s خود وارد شوید Ùˆ شروع به ایجاد اولین Zap خود کنید! توجه داشته باشید Ú©Ù‡ Ùقط می‌توانید 1 Zap با یک رویداد راه‌اندازی از %2$s ایجاد کنید. در این Zap Ù…ÛŒ توانید یک یا چند عمل را انتخاب کنید."],"%s API key":["کلید API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["وقتی Zap خود را راه‌اندازی می‌کنید، بعداً در %s به این کلید API نیاز خواهید داشت."],"Copy your API key":["کلید API خود را Ú©Ù¾ÛŒ کنید"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["برای راه‌اندازی یک اتصال، مطمئن شوید Ú©Ù‡ کلید API داده شده را در زیر Ú©Ù¾ÛŒ کرده‌اید Ùˆ از آن برای ایجاد Ùˆ روشن کردن Zap در حساب %s خود Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید."],"Manage %s settings":["تنظیمات %s را مدیریت کنید"],"Connect to %s":["به %s متصل شوید"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Ù„Ø·ÙØ§ توجه داشته باشید: برای اینکه این تمرین به خوبی کار کند، باید ابزار بهینه سازی داده سئو را اجرا کنید. مدیران می‌توانند این را در %1$sSEO > Tools%2$s اجرا کنند."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["شما پیوندهایی را به مقالات یتیم خود اضاÙÙ‡ کرده اید، Ùˆ مواردی را Ú©Ù‡ دیگر مرتبط نبودند پاکسازی کرده اید. کارت عالی بود! به خلاصه زیر نگاهی بیندازید Ùˆ آنچه را Ú©Ù‡ به دست آورده اید جشن بگیرید"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["محتوای این لیست را به صورت انتقادی بررسی کنید Ùˆ به روز رسانی های لازم را انجام دهید. اگر برای به روز رسانی به Ú©Ù…Ú© نیاز دارید، ما یک پست وبلاگ بسیار Ù…Ùید %1$s داریم Ú©Ù‡ Ù…ÛŒ تواند شما را راهنمایی%2$s کند (برای باز کردن در یک برگه جدید کلیک کنید)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sبه راهنمایی بیشتری نیاز دارید؟ ما همه مراحل را با جزئیات بیشتری در راهنمای زیر پوشش داده‌ایم: %2$sنحوه Ø§Ø³ØªÙØ§Ø¯Ù‡ از %7$s تمرین محتوای یتیم%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["شما Ùقط پیدا کردن بهترین محتوای خود را آسان کرده‌اید Ùˆ احتمال رتبه‌بندی را Ø§ÙØ²Ø§ÛŒØ´ می‌دهید! موÙÙ‚ باشی! هر از گاهی، به یاد داشته باشید Ú©Ù‡ بررسی کنید Ú©Ù‡ آیا سنگ بنای شما به اندازه کاÙÛŒ لینک Ø¯Ø±ÛŒØ§ÙØª Ù…ÛŒ کند یا خیر!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["به لیست زیر نگاهی بیندازید. آیا سنگ بنای شما (Ú©Ù‡ با %1$s مشخص شده است) بیشترین پیوندهای داخلی را دارند Ú©Ù‡ به سمت آنها اشاره Ù…ÛŒ کنند؟ اگر Ùکر می‌کنید Ú©Ù‡ سنگ بنا به پیوندهای بیشتری نیاز دارد، روی دکمه Optimize کلیک کنید. Ú©Ù‡ مقاله را به مرحله بعدی منتقل Ù…ÛŒ کند."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["آیا همه سنگ بنای شما دارای تیک سبز هستند؟ برای بهترین نتیجه، ویرایش هایی را Ú©Ù‡ انجام نمی دهند در نظر بگیرید"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["کدام مقالات را Ù…ÛŒ خواهید بالاترین رتبه را کسب کنند؟ کدام یک از مخاطبان شما Ù…Ùیدتر Ùˆ کامل تر هستند؟ روی Ùلش رو به پایین کلیک کنید Ùˆ به دنبال مقالاتی بگردید Ú©Ù‡ با این معیارها مطابقت دارند. مقالاتی را Ú©Ù‡ از Ùهرست انتخاب می‌کنید به‌طور خودکار به‌عنوان سنگ بنا علامت‌گذاری می‌کنیم."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sبه راهنمایی بیشتری نیاز دارید؟ ما هر مرحله را با جزئیات بیشتری در این مورد پوشش داده‌ایم: %2$sنحوه Ø§Ø³ØªÙØ§Ø¯Ù‡ از %7$s تمرین سنگ بنای%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Ùهرست محتوای Yoast"],"Yoast Related Links":["پیوندهای مرتبط با Yoast"],"Finish optimizing":["پایان بهینه سازی"],"You've finished adding links to this article.":["شما Ø§ÙØ²ÙˆØ¯Ù† پیوندها به این مقاله را به پایان رسانده اید."],"Optimize":["بهینه سازی"],"Added to next step":["به مرحله بعد اضاÙÙ‡ شد"],"Choose cornerstone articles...":["مقالات سنگ بنا را انتخاب کنید..."],"Loading data...":["در حال بارگذاری..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["با Ø§Ø³ØªÙØ§Ø¯Ù‡ از این تمرین هنوز هیچ مقاله ای را پاک یا به روز نکرده اید. پس از انجام این کار، خلاصه ای از کار شما در اینجا نشان داده Ù…ÛŒ شود."],"Skipped":["صر٠نظر شد"],"Hidden from search engines.":["از موتورهای جستجو مخÙÛŒ شده است"],"Removed":["حذ٠شد"],"Improved":["بهبود ÛŒØ§ÙØª"],"Resolution":["وضوح تصویر"],"Loading redirect options...":["در حال بارگیری گزینه های تغییر مسیر..."],"Remove and redirect":["حذ٠و تغییر مسیر دهید"],"Custom url:":["لینک دلخواه:"],"Related article:":["مقاله های مرتبط:"],"Home page:":["ØµÙØ­Ù‡ اصلی:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["شما در شر٠حذ٠%1$s%2$s%3$s هستید. برای جلوگیری از 404 در سایت خود، باید آن را به ØµÙØ­Ù‡ دیگری در سایت خود هدایت کنید. به کجا Ù…ÛŒ خواهید آن را تغییر مسیر دهید؟"],"SEO Workout: Remove article":["تمرین سئو: حذ٠مقاله"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["همه چیز خوب به نظر Ù…ÛŒ رسد! ما هیچ مقاله ای در سایت شما پیدا نکردیم Ú©Ù‡ بیش از شش ماه قدمت داشته باشد Ùˆ لینک های بسیار Ú©Ù…ÛŒ در سایت شما Ø¯Ø±ÛŒØ§ÙØª کند. برای پیشنهادات پاکسازی جدید بعداً اینجا را بررسی کنید!"],"Hide from search engines":["پنهان کردن از موتورهای جستجو"],"Improve":["بهبود"],"Are you sure you wish to hide this article from search engines?":["آیا مطمئنید میخواهید این مقاله را از موتورهای جستجو مخÙÛŒ کنید؟"],"Action":["اقدام"],"You've hidden this article from search engines.":["شما این مقاله را از موتورهای جستجو پنهان کرده اید."],"You've removed this article.":["شما این مقاله را حذ٠کرده اید."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["شما در حال حاضر هیچ مقاله ای را برای بهبود انتخاب نکرده اید. چند مقاله را در مراحل قبلی برای Ø§ÙØ²ÙˆØ¯Ù† پیوند انتخاب کنید Ùˆ ما پیشنهادات پیوند را در اینجا به شما نشان خواهیم داد."],"Loading link suggestions...":["در حال بارگیری پیشنهادات پیوند..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["ما هیچ پیشنهادی برای این مقاله پیدا نکردیم، اما البته همچنان می‌توانید به مقالاتی Ú©Ù‡ Ùکر می‌کنید مرتبط هستند، پیوند اضاÙÙ‡ کنید."],"Skip":["بیخیال شدن"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["شما هنوز هیچ مقاله ای را برای این مرحله انتخاب نکرده اید. در مرحله قبل Ù…ÛŒ توانید این کار را انجام دهید."],"Is it up-to-date?":["آیا به روز است؟"],"Last Updated":["اخرین به روز رسانی"],"You've moved this article to the next step.":["شما این مقاله را به مرحله بعدی منتقل کرده اید."],"Unknown":["ناشناخته"],"Clear summary":["پاک کردن خلاصه"],"Add internal links towards your orphaned articles.":["پیوندهای داخلی را به مقالات یتیم خود اضاÙÙ‡ کنید."],"Should you update your article?":["آیا باید مقاله خود را به روز کنید؟"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["سایت شما ممکن است حاوی محتوای زیادی باشد Ú©Ù‡ یک بار ایجاد کرده اید Ùˆ از آن زمان به بعد هرگز به آن نگاه نکرده اید. مهم است Ú©Ù‡ از طریق آن ØµÙØ­Ø§Øª مرور کنید Ùˆ از خود بپرسید Ú©Ù‡ آیا آن محتوا همچنان به سایت شما مرتبط است یا خیر. آیا باید آن را بهبود بخشید یا حذ٠کنید؟"],"Start: Love it or leave it?":["شروع کنید: آن را دوست داشته باشید یا ترک کنید؟"],"Clean up your unlinked content to make sure people can find it":["محتوای بدون پیوند خود را پاک کنید تا مطمئن شوید Ø§ÙØ±Ø§Ø¯ Ù…ÛŒ توانند آن را پیدا کنند"],"I've finished this workout":["من این تمرین را تمام کردم"],"Reset this workout":["این تمرین را بازنشانی کنید"],"Well done!":["Ø¢ÙØ±ÛŒÙ†!"],"Add internal links towards your cornerstones":["پیوندهای داخلی را به سنگ بنای خود اضاÙÙ‡ کنید"],"Check the number of incoming internal links of your cornerstones":["تعداد پیوندهای داخلی ورودی سنگ بنای خود را بررسی کنید"],"Start: Choose your cornerstones!":["شروع: سنگ بنای خود را انتخاب کنید!"],"The cornerstone approach":["رویکرد سنگ بنا"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Ù„Ø·ÙØ§Ù‹ توجه داشته باشید: برای اینکه این تمرین به خوبی کار کند Ùˆ به شما پیشنهادهای پیوند ارائه دهد، باید ابزار بهینه سازی داده سئو را اجرا کنید. مدیران می‌توانند این را در %1$sSEO > Tools%2$s اجرا کنند."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":["من این مرحله را تمام کردم"],"Revise this step":["این مرحله را اصلاح کنید"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["ما نتوانستیم پیوندهای داخلی را در ØµÙØ­Ø§Øª شما پیدا کنیم. یا هنوز هیچ لینک داخلی به محتوای خود اضاÙÙ‡ نکرده اید یا Yoast SEO آنها را ایندکس نکرده است. می‌توانید با اجرای بهینه‌سازی داده‌های SEO در زیر SEO > ToolsØŒ پیوندهای خود را Yoast SEO ایندکس کنید."],"Incoming links":["لینک های ورودی"],"Edit to add link":["برای Ø§ÙØ²ÙˆØ¯Ù† پیوند ویرایش کنید"],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["شما در حال حاضر هیچ مقاله ای ندارید Ú©Ù‡ به عنوان سنگ بنا علامت گذاری شده باشد. وقتی مقالات خود را به عنوان سنگ بنا علامت گذاری Ù…ÛŒ کنید، در اینجا نشان داده Ù…ÛŒ شوند."],"Focus keyphrase":["کلیدواژه کانونی"],"Article":["مقاله"],"Readability score":["امتیاز خوانایی"],"SEO score":["امتیاز سئو"],"Copy failed":["Ú©Ù¾ÛŒ ناموÙÙ‚ بود"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["با Ø§Ø³ØªÙØ§Ø¯Ù‡ از این %1$s تمرین گام به گام، رتبه‌بندی همه پایه‌های خود را بهبود بخشید!%2$s"],"Rank with articles you want to rank with":["رتبه با مقالاتی Ú©Ù‡ Ù…ÛŒ خواهید با آنها رتبه بندی کنید"],"Descriptive text":["متن توصیÙÛŒ"],"Show the descriptive text":["متن توصیÙÛŒ را نشان دهید"],"Show icon":["نمایش نماد"],"Yoast Estimated Reading Time":["زمان خواندن تخمینی Yoast"],"Shows an estimated reading time based on the content length.":["زمان تخمینی خواندن را بر اساس طول محتوا نشان Ù…ÛŒ دهد."],"reading time":["زمان خواندن"],"content length":["طول محتوا"],"Estimated reading time:":["زمان تخمینی مطالعه:"],"minute":["دقیقه"],"Settings":["تنظیمات"],"OK":["قابل قبول"],"Close":["بستن"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["اولین راه حل واقعی همه در یک سئو برای وردپرس، از جمله تجزیه Ùˆ تحلیل محتوای روی ØµÙØ­Ù‡ØŒ نقشه های سایت XML Ùˆ موارد دیگر."],"Type":["نوع"],"Team Yoast":["تیم یوست"],"Orphaned content":["محتوای یتیم"],"Synonyms":["متراد٠ها"],"Internal linking suggestions":["پیشنهادات پیوند داخلی"],"Enter a related keyphrase to calculate the SEO score":["یک عبارت کلیدی مرتبط را برای محاسبه امتیاز سئو وارد کنید"],"Related keyphrase":["عبارت کلیدی مرتبط"],"Add related keyphrase":["عبارت کلیدی مرتبط را اضاÙÙ‡ کنید"],"Analysis results":["نتایج آنالیز"],"Help on choosing the perfect keyphrase":["در انتخاب عبارت کلیدی عالی Ú©Ù…Ú© کنید"],"Help on keyphrase synonyms":["Ú©Ù…Ú© به متراد٠عبارات کلیدی"],"Keyphrase":["کلیدواژه"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["یواست سئو پریمیوم"],"New URL: {{link}}%s{{/link}}":["نشانی وب جدید: {{link}}%s{{/link}}"],"Undo":["بازگشت"],"Redirect created":["ریدایرکت ایجاد شد"],"%s just created a redirect from the old URL to the new URL.":["%s Ùقط یک تغییر مسیر از URL قدیمی به URL جدید ایجاد کرد."],"Old URL: {{link}}%s{{/link}}":["آدرس قدیمی: {{link}}%s{{/link}}"],"Keyphrase synonyms":["متراد٠عبارات کلیدی"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["سئو"],"internal linking":["لینک‌های داخلی"],"site structure":["ساختار سایت"],"We could not find any relevant articles on your website that you could link to from your post.":["ما نمی‌توانیم مقالات مرتبط با سایت شما برای پیوند به نوشته پیدا کنیم."],"Load suggestions":["بارگیری پیشنهادات"],"Refresh suggestions":["پیشنهادات را به روز کنید"],"Write list…":["نوشتن لیست…"],"Adds a list of links related to this page.":["لیستی از پیوندهای مربوط به این ØµÙØ­Ù‡ را اضاÙÙ‡ Ù…ÛŒ کند."],"related posts":["نوشته‌های مرتبط"],"related pages":["برگه‌های مرتبط"],"Adds a table of contents to this page.":["Ø§ÙØ²ÙˆØ¯Ù† جدول محتوا به این برگه."],"links":["لینک‌ها"],"toc":["toc"],"Copy link":["Ú©Ù¾ÛŒ لینک"],"Copy link to suggested article: %s":["Ú©Ù¾ÛŒ لینک به مقاله پیشنهادی: %s"],"Add a title to your post for the best internal linking suggestions.":["برای بهترین پیشنهادهای پیوند داخلی، عنوانی را به پست خود اضاÙÙ‡ کنید."],"Add a metadescription to your post for the best internal linking suggestions.":["برای بهترین پیشنهادات پیوند داخلی، یک متا توصی٠به پست خود اضاÙÙ‡ کنید."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["برای بهترین پیشنهادات پیوند داخلی، یک عنوان Ùˆ یک متا توصی٠به پست خود اضاÙÙ‡ کنید."],"Also, add a title to your post for the best internal linking suggestions.":["همچنین، برای بهترین پیشنهادات پیوند داخلی، عنوانی به پست خود اضاÙÙ‡ کنید."],"Also, add a metadescription to your post for the best internal linking suggestions.":["همچنین، برای بهترین پیشنهادات پیوند داخلی، یک متا توصی٠به پست خود اضاÙÙ‡ کنید."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["همچنین، برای بهترین پیشنهادات پیوند داخلی، یک عنوان Ùˆ یک متا توصی٠به پست خود اضاÙÙ‡ کنید."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["هنگامی Ú©Ù‡ Ú©Ù…ÛŒ Ú©Ù¾ÛŒ اضاÙÙ‡ کردید، لیستی از محتوای مرتبط را در اینجا به شما Ù…ÛŒ دهیم Ú©Ù‡ Ù…ÛŒ توانید در پست خود به آن پیوند دهید."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["برای بهبود ساختار سایت خود، پیوند دادن به سایر پست ها یا ØµÙØ­Ø§Øª مرتبط در وب سایت خود را در نظر بگیرید."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["چند ثانیه طول Ù…ÛŒ کشد تا لیستی از محتوای مرتبط را به شما نشان دهد Ú©Ù‡ Ù…ÛŒ توانید به آن پیوند دهید. به محض اینکه پیشنهادات را Ø¯Ø±ÛŒØ§ÙØª کنیم، اینجا نشان داده Ù…ÛŒ شود."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["برای کسب اطلاعات بیشتر، {{a}}راهنمای ما در مورد پیوندهای داخلی برای SEO را بخوانید{{/a}}."],"Copied!":["Ú©Ù¾ÛŒ شد!"],"Not supported!":["پشتیبانی نمی‌شود!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["آیا سعی Ù…ÛŒ کنید از چند عبارت کلیدی مرتبط Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید؟ شما باید آنها را جداگانه اضاÙÙ‡ کنید."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["کلیدواژه شما بسیار طولانی است. بیشترین حد آن Ù…ÛŒ تواند 191 کاراکتر باشد."],"Add as related keyphrase":["عبارت کلیدی مرتبط را اضاÙÙ‡ کنید"],"Added!":["اضاÙÙ‡ شد"],"Remove":["پاک کردن"],"Table of contents":["جدول محتوا"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["ما باید داده‌های SEO سایت شما را بهینه کنیم تا بتوانیم بهترین %1$slinking پیشنهادات%2$s را به شما ارائه دهیم. %3$sبهینه سازی داده های SEO%4$s را شروع کنید"],"Create a Zap in %s":["یک Zap در %s ایجاد کنید"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fi.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fi.json new file mode 100644 index 00000000..ad69085a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fi.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"fi"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":["Salli"],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":["(Avataan uudessa välilehdessä)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":["Yritä uudelleen"],"Social preview":[],"Desktop result":["Tietokonetulokset"],"Mobile result":["Mobiilitulokset"],"Apply %s description":[],"Apply %s title":[],"Next":["Seuraava"],"Previous":["Edellinen"],"Generate 5 more":[],"Google preview":["Google-esikatselu"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sAvainfraasin jakauma%3$s: %2$sSisällytä tekstiin avainfraasisi tai synonyymeja, jotta voimme tarkistaa niiden jakauman%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sAvainfraasin jakauma%2$s: Hyvin toimittu!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sAvainfraasin jakauma%3$s: Epätasainen. Jotkut osat tekstistäsi eivät sisällä avainfraasia tai synonyymeja. %2$sJaa ne tasaisemmin%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sAvainfraasin jakauma%3$s: Hyvin epätasainen. Huomattava osa tekstistäsi eivät sisällä avainfraasia tai synonyymeja. %2$sJaa ne tasaisemmin%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":[],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":[],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":[],"Meta tags":[],"Not available":["Ei saatavilla"],"Checks":[],"Focus Keyphrase":[],"Good":["Hyvä"],"No index":[],"Front-end SEO inspector":[],"Focus keyphrase not set":[],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":[],"Reset API key":[],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[],"Your API key":[],"Go to your %s dashboard":[],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[],"Your %s dashboard":[],"Verify connection":[],"Verify your connection":[],"Create a Zap":[],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[],"%s API key":[],"You'll need this API key later on in %s when you're setting up your Zap.":[],"Copy your API key":[],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[],"Manage %s settings":[],"Connect to %s":[],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":[],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":[],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":[],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":[],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":[],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":[],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":[],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":[],"Yoast Table of Contents":[],"Yoast Related Links":[],"Finish optimizing":["Finish optimising"],"You've finished adding links to this article.":["You've finished adding links to this article."],"Optimize":["Optimise"],"Added to next step":["Added to next step"],"Choose cornerstone articles...":["Choose cornerstone articles..."],"Loading data...":[],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Et ole siivonnut tai päivittänyt yhtään artikkelia tämän harjoitteen aikana. Kun teet niin, yhteenveto toimistasi ilmestyy tänne."],"Skipped":["Ohitettu"],"Hidden from search engines.":["Kätketty hakukoneilta."],"Removed":["Poistettu"],"Improved":["Parannettu"],"Resolution":["Tarkkuus"],"Loading redirect options...":["Ladataan uudelleenohjauksien valintoja..."],"Remove and redirect":["Poista ja edelleenohjaa"],"Custom url:":["Mukautettu URL:"],"Related article:":["Liittyvä artikkeli:"],"Home page:":["Etusivu:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Olet aikeissa poistaa %1$s%2$s%3$s. Estääksesi 404-virheet sivustollasi, sinun kannattaa edelleenohjata se toiselle sivulle sivustollasi. Minne tahtoisit sen ohjata?"],"SEO Workout: Remove article":["SEO-harjoite: poista artikkeli"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Kaikki näyttää hyvältä! Emme löytäneet yhtään artikkelia sivustollasi, joka olisi kuutta kuukautta vanhempi ja jolle osoittaisi liian vähän linkkejä. Palaa tänne uudelleen saadaksesi siivousehdotuksia."],"Hide from search engines":["Kätke hakukoneilta"],"Improve":["Paranna"],"Are you sure you wish to hide this article from search engines?":["Haluatko varmasti kätkeä tämän artikkelin hakukoneilta?"],"Action":["Toiminto"],"You've hidden this article from search engines.":["Tämä artikkeli on kätketty hakukoneilta."],"You've removed this article.":["Olet poistanut tämän artikkelin."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Et ole toistaiseksi merkinnyt yhtään artikkelia parannettavaksi. Valitse jokunen artikkeli ilman viitteitä ja me esitämme sinulle linkkiehdotuksia tässä."],"Loading link suggestions...":["Ladataan linkkiehdotuksia..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Emme löytäneet yhtään ehdotusta tälle artikkelilla, mutta voit toki silti lisätä linkkejä artikkeleihin, joiden katsot liittyvän aiheeseen."],"Skip":["Ohita"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Et ole vielä valinnut yhtään artikkelia tähän vaiheeseen. Voit tehdä sen edellisessä vaiheessa."],"Is it up-to-date?":["Onko se ajan tasalla?"],"Last Updated":["Viimeksi päivitetty"],"You've moved this article to the next step.":["Olet siirtänyt tämän artikkelin seuraavaan vaiheeseen."],"Unknown":["Tuntematon"],"Clear summary":["Pyyhi yhteenveto"],"Add internal links towards your orphaned articles.":["Lisää sisäisiä linkkejä viitteettömiin artikkeleihisi."],"Should you update your article?":["Kannattaisiko sinun päivittää artikkeliasi?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Sivustosi sisältää paljon sisältöä, johon ei koskaan palata sen luomisen jälkeen. On tärkeää käydä näitä läpi ja kysyä itseltäsi vieläkö tämä sisältö on relevanttia sivustollesi. Pitäisikö minun parantaa niitä vai poistaa ne?"],"Start: Love it or leave it?":["Aloita: Rakasta vai hylkää?"],"Clean up your unlinked content to make sure people can find it":["Siivoa linkittämätön sisältösi ja varmista, että se on ihmisten löydettävissä"],"I've finished this workout":["Olen päättänyt tämän harjoitteen"],"Reset this workout":["Nollaa tämä harjoite"],"Well done!":["Hyvin tehty!"],"Add internal links towards your cornerstones":["Lisää sisäisiä linkkejä keskeiseen sisältöösi"],"Check the number of incoming internal links of your cornerstones":["Tarkistaa keskeiseen sisältöösi osoittavien sisäisten linkkien lukumäärä"],"Start: Choose your cornerstones!":["Aloita: valitse kulmakivesi"],"The cornerstone approach":["Kulmakivi-lähestymistapa"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Please note: for this workout to work well and to offer you linking suggestions, you need to run the SEO data optimisation tool. Admins can run this under %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":["Olen käynyt tämän askeleen läpi"],"Revise this step":["Muokkaa tätä askelta"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Emme löytäneet sisäisiä linkkejä sivustoltasi. Joko et ole vielä lisännyt yhtään, tai Yoast SEO ei ole indeksoinut niitä. Voit suorittaa linkkiesi indeksoinnin SEO datan optimointityökalun avulla kohdassa SEO > Työkalut."],"Incoming links":["Sisääntulevat linkit"],"Edit to add link":["Muokkaa lisätäksesi linkki"],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Et ole toistaiseksi merkinnyt yhtään artikkelia kulmakiveksi. Kun olet tehnyt niin, ne näkyvät täällä."],"Focus keyphrase":["Kohdennettu avainfraasi"],"Article":["Artikkeli"],"Readability score":["Luettavuuspisteet"],"SEO score":["SEO-pisteet"],"Copy failed":["Kopiointi epäonnistui"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Paranna kulmakiviesi hakutuloksia tämän %1$sharjoitteen avulla!%2$s"],"Rank with articles you want to rank with":["Erotu artikkeleilla, joilla haluat erottua"],"Descriptive text":["Kuvaava teksti"],"Show the descriptive text":["Näytä kuvaava teksti"],"Show icon":["Näytä kuvake"],"Yoast Estimated Reading Time":["Yoastin arvioitu lukuaika"],"Shows an estimated reading time based on the content length.":["Näyttää arvioidun lukuajan sisällön pituuden perusteella."],"reading time":["lukuaika"],"content length":["sisällön pituus"],"Estimated reading time:":["Arvioitu lukuaika:"],"minute":["minuutti","minuuttia"],"Settings":["Asetukset"],"OK":["OK"],"Close":["Sulje"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Ensimmäinen all-in-one SEO-ratkaisu WordPressiin, sisältäe sisältöanalyysin suoraan sivulla, XML-sitemapit ja paljon muuta."],"Type":["Tyyppi"],"Team Yoast":["Yoast -tiimi"],"Orphaned content":["Hylätty sisältö"],"Synonyms":["Synonyymit"],"Internal linking suggestions":["Sisäisten linkkien ehdotukset"],"Enter a related keyphrase to calculate the SEO score":["Lisää asiaan liittyvä hakulause laskeaksesi SEO-pisteesi"],"Related keyphrase":["Liittyvä avainfraasi"],"Add related keyphrase":["LIsää liittyvä avainfraasi"],"Analysis results":["Analyysin tulokset"],"Help on choosing the perfect keyphrase":["Apua täydellisen hakulauseen valitsemiseen"],"Help on keyphrase synonyms":["Apua hakulauseen synonyymeihin"],"Keyphrase":["Avainfraasi"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Uusi osoite: {{link}}%s{{/link}}"],"Undo":["Kumoa"],"Redirect created":["Uudelleenohjaus luotu"],"%s just created a redirect from the old URL to the new URL.":["%s loi juuri uudelleenohjauksen vanhasta osoitteesta uuteen. "],"Old URL: {{link}}%s{{/link}}":["Vanha osoite: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Hakulauseen synonyymit"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["SEO"],"internal linking":["sisäiset linkit"],"site structure":["sivuston rakenne"],"We could not find any relevant articles on your website that you could link to from your post.":["Emme löytäneet yhtään relevanttia artikkelia sivustollasi johon voisit linkata."],"Load suggestions":["Lataa suosituksia"],"Refresh suggestions":["Päivitä suositukset"],"Write list…":["Kirjoita luettelo..."],"Adds a list of links related to this page.":["Lisää listan linkkejä, jotka liittyvät tähän sivuun."],"related posts":["liittyvät artikkelit"],"related pages":["liittyvät sivut"],"Adds a table of contents to this page.":["Lisää hakemiston tälle sivulle."],"links":["linkit"],"toc":["hakemisto"],"Copy link":["Kopioi linkki"],"Copy link to suggested article: %s":["Kopioi linkki ehdotettuun artikkeliin: %s"],"Add a title to your post for the best internal linking suggestions.":["Lisää otsikko viestiisi, niin saat parhaat sisäiset linkitysehdotukset."],"Add a metadescription to your post for the best internal linking suggestions.":["Lisää metakuvaus viestiisi, jotta saat parhaat sisäiset linkitysehdotukset."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Lisää otsikko ja metakuvaus viestiisi saadaksesi parhaat sisäiset linkitysehdotukset."],"Also, add a title to your post for the best internal linking suggestions.":["Lisää myös viestiisi otsikko, niin saat parhaat sisäiset linkitysehdotukset."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Lisää myös metakuvaus viestiisi, jotta saat parhaat sisäiset linkitysehdotukset."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Lisää myös viestiisi otsikko ja metakuvaus, jotta saat parhaat sisäiset linkitysehdotukset."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Kunhan lisäät hieman tekstisisältöä, tarjoamme sinulle tässä listan liittyvästä sisällöstä, johon voit artikkelissasi linkittää."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Parantaaksesi sivustosi rakennetta, harkitse linkittämistä muihin asiaankuuluviin viesteihin tai sivuihin verkkosivustollasi."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Muutaman sekunnin kuluttua näet luettelon asiaan liittyvästä sisällöstä, johon voit linkittää. Ehdotukset näytetään täällä heti, kun meillä on niitä."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Lue oppaamme sisäisistä linkeistä SEO:n kannalta{{/a}} oppiaksesi lisää."],"Copied!":["Kopioitu!"],"Not supported!":["Ei tuettu!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Yritätkö käyttää useita asiaan liittyviä avainsanoja? Sinun tulisi lisätä ne erikseen."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Avainfraasisi on liian pitkä. Sen enimmäispituus on 191 merkkiä."],"Add as related keyphrase":["LIsää liittyvänä avainfraasina"],"Added!":["Lisätty!"],"Remove":["Poista"],"Table of contents":["Sisällysluettelo"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Meidän on optimoitava sivustosi SEO-data, jotta voimme tarjota sinulle parhaat %1$slinkkisuositukset%2$s. %3$sAloita SEO-datan optimointi%4$s"],"Create a Zap in %s":["Luo Zap %sissa."]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fr_FR.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fr_FR.json new file mode 100644 index 00000000..f6dd7f26 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-fr_FR.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["La demande est revenue avec l‘erreur suivante : « %s »"],"X share preview":["Aperçu du partage sur X"],"AI X title generator":["Générateur IA de titre X"],"AI X description generator":["Générateur IA de description X"],"X preview":["Aperçu X"],"Please enter a valid focus keyphrase.":["Veuillez saisir une requête cible valide."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Pour utiliser cette fonctionnalité, votre site doit être publiquement accessible. Cela s‘applique à la fois aux sites de test et aux instances où votre API REST est protégée par un mot de passe. Veuillez vous assurer que votre site est publiquement accessible et réessayez. Si le problème persiste, veuillez %1$scontacter notre équipe de support%2$s."],"Yoast AI cannot reach your site":["L‘IA de Yoast ne peut pas accéder à votre site"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Pour accéder à cette fonctionnalité, vous devez disposer d‘abonnements %2$s et %3$s activés. Veuillez %5$sactiver vos abonnements dans %1$s%6$s ou %7$sobtenir un nouveau %4$s%8$s. Veuillez ensuite actualiser cette page pour que la fonctionnalité fonctionne correctement, ce qui pourra prendre jusqu‘à 30 secondes."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Le générateur de titres IA nécessite l‘activation de l‘analyse SEO avant d‘être utilisé. Pour l‘activer, veuillez vous rendre dans les %2$sFonctionnalités du site de %1$s%3$s, activer l‘analyse SEO et cliquer sur « Enregistrer les modifications » . Si l‘analyse SEO est désactivée dans votre profil WordPress, accédez à votre profil et activez-la. Veuillez contacter votre administrateur ou administratrice si vous n‘avez pas accès à ces réglages."],"Social share preview":["Aperçu des partages sociaux"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Pour continuer à utiliser la fonctionnalité Yoast IA, veuillez réduire la fréquence de vos demandes. Notre %1$sarticle d’aide%2$s fournit des conseils pour planifier et rythmer efficacement vos demandes afin d’optimiser le flux de travail."],"You've reached the Yoast AI rate limit.":["Vous avez atteint la limite de taux de Yoast IA."],"Allow":["Autoriser"],"Deny":["Refuser"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Pour consulter cette vidéo, vous devez autoriser %1$s à charger des vidéos embarquées depuis %2$s."],"Text generated by AI may be offensive or inaccurate.":["Le texte généré par l’IA peut être offensant ou inexact."],"(Opens in a new browser tab)":["(S’ouvre dans un nouvel onglet)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Accélérez vos processus avec l’IA générative. Obtenez des suggestions qualitatives de titres et descriptions pour vos réglages SEO. %1$sEn savoir plus%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Générez les titres et descriptions avec Yoast AI !"],"New to %1$s":["Vous découvrez %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["J’approuve les %1$sConditions d’utilisation%2$s et la %3$sPolitique de confidentialité%4$s du service Yoast IA. Cela inclut le consentement à la collecte et à l’utilisation des données pour améliorer l’expérience utilisateur."],"Start generating":["Commencer à générer"],"Yes, revoke consent":["Oui, révoquer le consentement"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["En révoquant votre consentement, vous n’aurez plus accès aux fonctionnalités de Yoast IA. Confirmez-vous vouloir révoquer votre consentement ?"],"Something went wrong, please try again later.":["Quelque chose c’est mal passé, veuillez réessayer ultérieurement."],"Revoke AI consent":["Révoquer le consentement à l’IA"],"AI title generator":["Générateur IA de titre"],"AI description generator":["Générateur IA de description"],"AI social title generator":["Générateur IA de titres sociaux"],"AI social description generator":["Générateur IA de descriptions sociales"],"Dismiss":["Ignorer"],"Don’t show again":["Ne plus afficher"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sConseil%2$s : Améliorez la précision des titres générés par l’IA en rédigeant davantage de contenu dans votre page."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sConseil%2$s : Améliorez la précision des descriptions générées par l’IA en rédigeant davantage de contenu dans votre page."],"Try again":["Réessayer"],"Social preview":["Aperçu social"],"Desktop result":["Résultat bureau"],"Mobile result":["Résultat mobile"],"Apply %s description":[],"Apply %s title":[],"Next":["Suivant"],"Previous":["Précédent"],"Generate 5 more":["Générer 5 autres"],"Google preview":["Aperçu Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["En raison des directives éthiques strictes d‘OpenAI et des %1$suspensions d‘utilisation%2$s, nous ne sommes pas en mesure de générer de titre SEO pour votre page. Si vous avez l‘intention d‘utiliser l‘IA, veuillez éviter tout contenu explicite, violent ou sexuellement explicite. %3$sPour en savoir plus sur la manière de configurer votre page afin d‘obtenir les meilleurs résultats avec l‘IA%4$s"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["En raison des directives éthiques strictes de l’OpenAI et des %1$spolitiques d’utilisation%2$s, nous ne sommes pas en mesure de générer des méta-descriptions pour votre page. Si vous avez l’intention d’utiliser l’IA, veuillez éviter tout contenu explicite, violent ou sexuellement explicite. %3$sEn savoir plus sur la manière de configurer votre page afin d’obtenir les meilleurs résultats avec l’IA%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Pour accéder à cette fonctionnalité, vous devez disposer d’un abonnement %1$s actif. Veuillez %3$sactiver votre abonnement dans %2$s%4$s ou %5$ssouscrire un nouvel abonnement %1$s%6$s. Ensuite, cliquez sur le bouton pour actualiser cette page pour que cela fonctionne correctement, ce qui peut prendre jusqu’à 30 secondes."],"Refresh page":["Actualiser la page"],"Not enough content":["Pas assez de contenu"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Veuillez réessayer ultérieurement. Si le problème persiste, veuillez %1$scontacter notre équipe de support%2$s !"],"Something went wrong":["Quelque chose s’est mal passé"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Il semble que le délai de connexion soit dépassé. Veuillez vérifier votre connexion internet et réessayer ultérieurement. Si le problème persiste, veuillez %1$scontacter notre équipe de support%2$s"],"Connection timeout":["Délai de connexion dépassé"],"Use AI":["Utiliser l’IA"],"Close modal":["Fermer la modale"],"Learn more about AI (Opens in a new browser tab)":["En savoir plus sur l’IA (s’ouvre dans un nouvel onglet du navigateur)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitre%3$s : Votre page n’a pas encore de titre. %2$sAjoutez-en un%3$s !"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitre%2$s : Votre page a un titre. Bien joué !"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribution de requête%3$s : %2$sÉcrivez votre requête ou ses synonymes dans le texte afin que nous puissions calculer leur distribution%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribution de la requête%2$s : Bon travail !"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribution de la requête%3$s : inégale. Certaines parties de votre texte ne contiennent ni la requête, ni ses synonymes. %2$sDistribuez-les plus équitablement%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribution de la requête%3$s : très inégale. De grandes parties de votre texte ne contiennent ni votre requête, ni ses synonymes. %2$sDistribuez-les plus équitablement%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s : Vous n’utilisez pas trop de mots complexes, ce qui rend votre texte facilement lisible. Bon travail !"],"Word complexity":["Complexité des mots"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s : %2$s des mots utilisés sont considérés comme complexes. %3$sEssayez d’utilisez des mots moins longs et plus courants pour améliorer la lisibilité%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlignement%3$s : Il y a une longue section de texte alignée au centre. %2$sNous recommandons de l’aligner à gauche%3$s.","%1$sAlignement%3$s : Il y a %4$s longues sections de texte alignées au centre. %2$sNous recommandons de les aligner à gauche%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlignement%3$s : Il y a une longue section de texte aligné au centre. %2$sNous recommandons de l’aligner à droite%3$s.","%1$sAlignement%3$s : Il y a %4$s longues sections de texte alignées au centre. %2$sNous recommandons de les aligner à droite%3$s."],"Select image":["Sélectionner une image"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Vous ne le savez peut-être même pas, mais certaines pages de votre site ne reçoivent aucun lien. C‘est un problème de référencement, car il est difficile pour les moteurs de recherche de trouver des pages qui n‘ont pas de liens. Il est donc plus difficile de les classer. Nous appelons ces pages des contenus orphelins. Dans cette atelier, nous trouvons les contenus orphelins de votre site et nous vous aidons à ajouter rapidement des liens vers ces contenus, afin qu‘ils aient une chance d‘être classé !"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Il est temps d‘ajouter des liens ! Vous trouverez ci-dessous une liste de vos articles orphelins. Sous chacun d‘eux, vous trouverez des suggestions de pages connexes à partir desquelles vous pouvez ajouter un lien. Lorsque vous ajoutez un lien, veillez à ‘'insérer dans une phrase pertinente en rapport avec l‘article orphelin. Continuez à ajouter des liens vers chacun des articles orphelins jusqu‘à ce que vous soyez satisfait du nombre de liens pointant vers eux."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Il est temps d'ajouter des liens ! Vous trouverez ci-dessous une liste de vos piliers. Sous chaque pilier, vous trouverez des suggestions de publications pour lesquels vous pouvez ajouter un lien. Quand vous ajoutez un lien, assurez-vous de l’insérer dans une phrase pertinente et similaire à la publication de votre pilier. Continuez à ajouter des liens à partir d’autant de publications similaires que nécessaire, jusqu'à ce que vos piliers aient le plus grand nombre de liens internes pointant vers eux."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Certaines publications de votre site sont %1$sles%2$s plus importants. Ils répondent aux questions des internautes et résolvent leurs problèmes. Ils méritent donc d’être classés ! Chez %3$s, nous appelons ces articles des piliers. L’un des moyens de les classer est de faire pointer suffisamment de liens vers eux. Un plus grand nombre de liens indique aux moteurs de recherche que ces publications sont importantes et précieuses. Dans cet atelier, nous vous aiderons à ajouter des liens à vos contenus piliers !"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Une fois que vous aurez ajouté un peu plus de texte, nous pourrons vous indiquer le niveau de formalité de votre texte."],"Overall, your text appears to be %1$s%3$s%2$s.":["Dans l'ensemble, votre texte semble être %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["L‘intégration Zapier sera retirée de %1$s dans la version 20.7 (date de sortie le 9 mai). Si vous avez des questions, veuillez contacter %2$s."],"Maximum heading level":["Niveau maximum de titre"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Vous avez désactivé les suggestions de liens, qui sont nécessaires pour que les liens similaires fonctionnent. Si vous souhaitez ajouter des liens similaires, allez dans Fonctionnalités du site et activez les suggestions de liens."],"Schema":["Schéma"],"Meta tags":["Balises méta"],"Not available":["Non disponible"],"Checks":["Vérifications"],"Focus Keyphrase":["Requête cible"],"Good":["Bon"],"No index":["Aucun index"],"Front-end SEO inspector":["Inspecteur SEO de l‘interface publique"],"Focus keyphrase not set":["Requête cible non définie"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Une fois que vous avez publié votre Zap dans votre tableau de bord %s, vous pouvez vérifier s’il est actif et connecté à votre site."],"Reset API key":["Réinitialiser la clé de l’API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["La clé de l’API suivante est utilisée pour vous connecter à %s. Si vous souhaitez vous reconnecter avec une clé de l’API différente, vous pouvez réinitialiser votre clé ci-dessous."],"Your API key":["Votre clé de l’API"],"Go to your %s dashboard":["Aller à votre tableau de bord %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Connexion à %1$s réussie ! Pour gérer votre Zap, veuillez visiter votre tableau de bord %2$s."],"Your %s dashboard":["Votre tableau de bord %s"],"Verify connection":["Vérifier la connexion"],"Verify your connection":["Vérifiez votre connexion"],"Create a Zap":["Créez un Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Connectez-vous à votre compte %1$s et commencez à créer votre premier Zap ! Notez que vous ne pouvez créer qu’un seul Zap avec un évènement déclencheur de %2$s. Dans ce Zap, vous pouvez choisir une ou plusieurs actions."],"%s API key":["Clé de l’API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Vous aurez besoin de cette clé de l’API plus tard dans %s lorsque vous configurerez votre Zap."],"Copy your API key":["Copiez votre clé de l’API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Pour établir une connexion, assurez-vous de copier la clé de l’API donnée ci-dessous et utilisez-la pour créer et activer un Zap dans votre compte %s."],"Manage %s settings":["Gérer les réglages de %s"],"Connect to %s":["Se connecter à %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Veuillez noter : pour que cet atelier fonctionne correctement, vous devez exécuter l’outil d’optimisation des données SEO. Les administrateurs peuvent l’exécuter sous %1$sSEO > Outils%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Vous avez ajouté des liens vers vos articles orphelins, et vous avez nettoyé ceux qui n’étaient plus pertinents. Excellent travail ! Jetez un coup d’œil au résumé ci-dessous et célébrez ce que vous avez accompli !"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Examinez d’un Å“il critique le contenu de cette liste et effectuez les mises à jour nécessaires. Si vous avez besoin d’aide pour effectuer les mises à jour, nous avons un %1$sarticle de blog très utile qui peut vous guider tout au long du processus%2$s (cliquez pour ouvrir un nouvel onglet)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sBesoin de plus d‘aide ? Nous avons détaillé chaque étape plus en détail dans le guide suivant : %2$sComment utiliser l’atelier lié contenu orphelin %7$s %3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Vous venez de rendre votre meilleur contenu facile à trouver, et plus susceptible d’être classé ! Bravo ! De temps en temps, n’oubliez pas de vérifier si vos piliers reçoivent suffisamment de liens !"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Jetez un coup d’œil à la liste ci-dessous. Vos piliers (marquées avec %1$s) ont-elles le plus de liens internes pointant vers elles ? Cliquez sur le bouton Optimiser si vous pensez qu’un contenu pilier a besoin de plus de liens. L’article passera alors à l’étape suivante."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Tous vos contenus piliers ont-ils des puces vertes ? Pour obtenir les meilleurs résultats, pensez à modifier ceux qui n’en ont pas !"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Quels sont les articles que vous voulez classer le plus haut ? Quels sont ceux que votre public trouverait les plus utiles et les plus complets ? Cliquez sur la flèche pointant vers le bas et recherchez les articles qui répondent à ces critères. Nous marquerons automatiquement les articles que vous sélectionnez dans la liste comme pilier."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sBesoin de plus d‘aide ? Nous avons détaillé chaque étape plus en détail dans : %2$sComment utiliser l’atelier des piliers %7$s %3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Table des matières Yoast"],"Yoast Related Links":["Liens en relations Yoast"],"Finish optimizing":["Terminez l‘optimisation"],"You've finished adding links to this article.":["Vous avez fini d'ajouter des liens à cet article"],"Optimize":["Optimiser"],"Added to next step":["Nouvelle étape ajoutée"],"Choose cornerstone articles...":["Choisir vos articles piliers…"],"Loading data...":["Chargement des données..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Vous n’avez pas encore nettoyé ou mis à jour d’articles en utilisant cet atelier. Une fois que vous l’aurez fait, un résumé de votre travail sera affiché ici."],"Skipped":["Ignoré"],"Hidden from search engines.":["Masqué des moteurs de recherche."],"Removed":["Retiré"],"Improved":["Amélioré"],"Resolution":["Résolution"],"Loading redirect options...":["Chargement des options de redirection…"],"Remove and redirect":["Supprimer et rediriger"],"Custom url:":["URL personnalisée :"],"Related article:":["Article similaire :"],"Home page:":["Page d’accueil :"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Vous êtes sur le point de supprimer %1$s%2$s%3$s. Pour éviter les 404 sur votre site, vous devez le rediriger vers une autre page de votre site. Où voulez-vous le rediriger ?"],"SEO Workout: Remove article":["Atelier SEO : Supprimer un article"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Tout semble bon ! Nous n’avons trouvé aucun article sur votre site de plus de six mois recevant trop peu de liens sur votre site. N‘hésitez pas à revenir ici plus tard pour de nouvelles suggestions de nettoyage !"],"Hide from search engines":["Masquer dans les moteurs de recherche"],"Improve":["Améliorer"],"Are you sure you wish to hide this article from search engines?":["Confirmez-vous vouloir masquer cet article aux moteurs de recherche ?"],"Action":["Action"],"You've hidden this article from search engines.":["Vous avez masqué cet article aux moteurs de recherche."],"You've removed this article.":["Vous avez supprimé cet article."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Vous n’avez actuellement sélectionné aucun article à améliorer. Sélectionnez quelques publications dans les étapes précédentes pour y ajouter des liens et nous vous afficherons des suggestions de liens ici."],"Loading link suggestions...":["Chargement des suggestions de liens…"],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Nous n’avons pas trouvé de suggestions pour cet article, mais vous pouvez bien sûr ajouter des liens vers des articles que vous pensez être liés."],"Skip":["Passer"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Vous n’avez pas encore sélectionné d’articles pour cette étape. Vous pouvez le faire dans l’étape précédente."],"Is it up-to-date?":["Est-il à jour ?"],"Last Updated":["Dernière mise à jour"],"You've moved this article to the next step.":["Vous avez passé cet article à l’étape suivante."],"Unknown":["Inconnu"],"Clear summary":["Effacer le résumé"],"Add internal links towards your orphaned articles.":["Ajoutez des liens internes vers vos articles orphelins."],"Should you update your article?":["Devriez-vous mettre à jour votre article ?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Votre site contient souvent beaucoup de contenu créé une fois et auquel on ne revient jamais par la suite. Il est important de les passer en revue et de se demander si ces contenus sont toujours pertinents pour votre site. Devez-vous les améliorer ou les supprimer ?"],"Start: Love it or leave it?":["Commencer : Vous aimez ou vous arrêtez ?"],"Clean up your unlinked content to make sure people can find it":["Nettoyez votre contenu non lié pour vous assurer que les internautes puissent le trouver."],"I've finished this workout":["J’ai terminé cet atelier"],"Reset this workout":["Réinitialiser cet atelier"],"Well done!":["Bien joué !"],"Add internal links towards your cornerstones":["Ajoutez des liens internes vers vos contenus piliers"],"Check the number of incoming internal links of your cornerstones":["Vérifiez le nombre de liens internes entrants de vos contenus piliers"],"Start: Choose your cornerstones!":["Début : Choisissez vos piliers !"],"The cornerstone approach":["L’approche pilier"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Veuillez noter : pour que cet atelier fonctionne correctement et vous propose des suggestions de liens, vous devez exécuter l’outil d’optimisation des données SEO. Les administrateurs peuvent l’exécuter sous %1$sSEO > Outils%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Veuillez noter : votre admin a désactivé la fonctionnalité pilier dans les réglages SEO. Si vous souhaitez utiliser cet atelier, elle doit être activée."],"I've finished this step":["J’ai fini cette étape"],"Revise this step":["Revoir cette étape"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Nous n’avons pas pu trouver de liens internes sur vos pages. Soit vous n’avez pas encore ajouté de liens internes à votre contenu, soit Yoast SEO ne les a pas indexés. Vous pouvez demander à Yoast SEO d’indexer vos liens en exécutant l’optimisation des données SEO sous SEO > Outils."],"Incoming links":["Liens entrants"],"Edit to add link":["Modifier pour ajouter un lien"],"%s incoming link":["%s lien entrant","%s liens entrants"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Vous n’avez actuellement aucun article marqué comme article pilier. Lorsque vous marquerez vos articles en tant qu’articles piliers, ils apparaîtront ici."],"Focus keyphrase":["Requête cible"],"Article":["Article"],"Readability score":["Score de lisibilité"],"SEO score":["Score SEO"],"Copy failed":["La copie a échoué"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Améliorez le classement de tous vos contenus piliers en utilisant cet %1$satelier étape par étape !%2$s"],"Rank with articles you want to rank with":["Soyez visibles avec les articles souhaités"],"Descriptive text":["Texte descriptif"],"Show the descriptive text":["Afficher le texte descriptif"],"Show icon":["Afficher l’icône"],"Yoast Estimated Reading Time":["Temps de lecture estimé par Yoast"],"Shows an estimated reading time based on the content length.":["Affiche une estimation du temps de lecture en fonction de la longueur du contenu."],"reading time":["Temps de lecture"],"content length":["longueur du contenu"],"Estimated reading time:":["Temps de lecture estimé : "],"minute":["minute","minutes"],"Settings":["Réglages"],"OK":["OK"],"Close":["Fermer"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["La première solution SEO tout-en-un pour WordPress, y compris l’analyse des pages de contenu, les plans de site XML et bien plus encore."],"Type":["Type"],"Team Yoast":["L’équipe Yoast"],"Orphaned content":["Contenu orphelin"],"Synonyms":["Synonymes"],"Internal linking suggestions":["Suggestions de liens internes"],"Enter a related keyphrase to calculate the SEO score":["Saisissez une phrase clé associée pour calculer le score de référencement"],"Related keyphrase":["Requête cible liée"],"Add related keyphrase":["Ajouter une variante"],"Analysis results":["Résultats de l’analyse"],"Help on choosing the perfect keyphrase":["Aide sur le choix de la phrase clé idéale"],"Help on keyphrase synonyms":["Aide sur les synonymes de phrase clé"],"Keyphrase":["Requête"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["nouvelle URL:{{link}}%s{{/link}}"],"Undo":["Rétablir"],"Redirect created":["Redirection créée"],"%s just created a redirect from the old URL to the new URL.":["%s vient de créer une redirection de l’ancienne URL vers la nouvelle URL."],"Old URL: {{link}}%s{{/link}}":["Ancienne URL :{{link}}%s{{/link}}"],"Keyphrase synonyms":["Synonymes de la phrase clé"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Une erreur s‘est produite : l‘analyse SEO Premium ne fonctionne pas comme prévu. Veuillez {{activateLink}} activer votre abonnement dans MyYoast{{/activateLink}} puis {{reloadButton}}recharger cette page{{/reloadButton}} pour qu‘elle fonctionne correctement."],"seo":["seo"],"internal linking":["maillage interne"],"site structure":["structure de site"],"We could not find any relevant articles on your website that you could link to from your post.":["Nous n’avons pas trouvé d’article pertinent sur votre site vers lequel vous pourriez faire un lien."],"Load suggestions":["Chargement des suggestions"],"Refresh suggestions":["Rafraîchir les suggestions"],"Write list…":["Rédigez une liste…"],"Adds a list of links related to this page.":["Ajoute une liste de liens en relation avec cette page."],"related posts":["articles en relation"],"related pages":["pages en relation"],"Adds a table of contents to this page.":["Ajoute une table des matières à cette page."],"links":["liens"],"toc":["tdm"],"Copy link":["Copier le lien"],"Copy link to suggested article: %s":["Copier le lien de l’article suggéré : %s"],"Add a title to your post for the best internal linking suggestions.":["Ajoutez un titre à votre article pour obtenir des meilleures suggestions de maillage interne."],"Add a metadescription to your post for the best internal linking suggestions.":["Ajouter une méta-description à votre article pour obtenir de meilleures suggestions de liens."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Ajoutez un titre et une méta-description à votre article pour obtenir de meilleures suggestions de maillage interne."],"Also, add a title to your post for the best internal linking suggestions.":["Ajoutez également un titre à votre article pour obtenir de meilleures suggestions de maillage interne."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Ajoutez également une méta-description à votre article pour obtenir de meilleures suggestions de maillage interne."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Ajoutez également un titre et une méta-description à votre article pour obtenir de meilleures suggestions de maillage interne."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Lorsque vous aurez rédigé plus de contenus, nous vous proposerons une liste d’articles en relation que vous pourrez ajouter en lien dans votre publication."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Pour améliorer la structure de votre site, pensez au maillage interne en ajoutant des liens vers des articles ou pages de votre site."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["L’affichage de la liste des contenus en relation vers lesquels vous pourriez faire des liens prend quelques secondes. Les propositions apparaîtront ici dès que possible."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Lisez notre guide sur le maillage interne en SEO{{/a}} pour en savoir plus."],"Copied!":["Copié !"],"Not supported!":["Non compatible !"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Essayez-vous d’utiliser des requêtes cibles multiples ? Vous devriez les ajouter séparément."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Votre requête cible est trop longue. Elle peut être composée de 191 caractères au maximum."],"Add as related keyphrase":["Ajouter en tant que requête cible"],"Added!":["Ajouté !"],"Remove":["Supprimer"],"Table of contents":["Table des matières"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Nous avons besoin d’optimiser les données SEO pour vous proposer les meilleures %1$ssuggestions de liens%2$s.\n\n%3$sDémarrage de l’optimisation des données SEO%4$s"],"Create a Zap in %s":["Créer un Zap dans %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-he_IL.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-he_IL.json new file mode 100644 index 00000000..4a4c9ec4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-he_IL.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"he_IL"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":["להרשות"],"Deny":["×œ× ×œ×שר"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["כדי לר×ות סרטון ×–×”, עליך ל×פשר ל-%1$s לטעון ×¡×¨×˜×•× ×™× ×ž×•×˜×ž×¢×™× ×ž-%2$s."],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":["(פתח בט×ב חדש בדפדפן)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":["סגור"],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":["לנסות שוב"],"Social preview":[],"Desktop result":["תוצ×ות דסקטופ"],"Mobile result":["תוצ×ות מובייל"],"Apply %s description":[],"Apply %s title":[],"Next":["הב×"],"Previous":["קוד×"],"Generate 5 more":[],"Google preview":["תצוגת גוגל"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sפיזור ביטויי מפתח%3$s: %2$sיש לכלול ביטוי מפתח ×ו ×ת ×”×ž×™×œ×™× ×”× ×¨×“×¤×•×ª שלו בתוכן כדי שנוכל לבדוק ×ת פיזור ביטויי המפתח%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sפיזור ביטויי מפתח%2$s: עבודה טובה!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sפיזור ביטויי מפתח%3$s: ×œ× ×חיד. ×—×œ×§×™× ×ž×¡×•×™×ž×™× ×‘×ª×•×›×Ÿ ××™× × ×ž×›×™×œ×™× ×‘×™×˜×•×™ מפתח ×ו ×ת ×”×ž×™×œ×™× ×”× ×¨×“×¤×•×ª שלו. %2$sיש לפזר ××•×ª× ×‘×ופן שווה יותר%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sפיזור ביטויי מפתח%3$s: מ×וד ×œ× ×חיד. ×—×œ×§×™× ×’×“×•×œ×™× ×‘×ª×•×›×Ÿ ××™× × ×ž×›×™×œ×™× ×‘×™×˜×•×™ מפתח ×ו ×ת ×”×ž×™×œ×™× ×”× ×¨×“×¤×•×ª שלו. %2$sיש לפזר ××•×ª× ×‘×ופן שווה יותר%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: ×ינך משתמש ביותר מדי ×ž×™×œ×™× ×ž×•×¨×›×‘×•×ª, מה שהופך ×ת הטקסט ×œ×§×¨×™× ×™×•×ª×¨. עבודה טובה!"],"Word complexity":["מורכבות מילי×"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s:%2$s ×ž×”×ž×™×œ×™× ×‘× ×•×¡×— נחשבות כמסובכות. %3$s תנסו להשתמש ×‘×ž×™×œ×™× ×§×¦×¨×•×ª יותר, ×ו יותר מוכרות כדי לשפר ×ת רמת הקרי×ות %4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":["בחירת תמונה"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":["סכימה"],"Meta tags":[],"Not available":["×œ× ×–×ž×™×Ÿ"],"Checks":[],"Focus Keyphrase":[],"Good":["טוב"],"No index":[],"Front-end SEO inspector":[],"Focus keyphrase not set":[],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":[],"Reset API key":[],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[],"Your API key":[],"Go to your %s dashboard":[],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[],"Your %s dashboard":[],"Verify connection":[],"Verify your connection":[],"Create a Zap":[],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[],"%s API key":[],"You'll need this API key later on in %s when you're setting up your Zap.":[],"Copy your API key":[],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[],"Manage %s settings":[],"Connect to %s":[],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":[],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":[],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":[],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":[],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":[],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":[],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":[],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":[],"Yoast Table of Contents":[],"Yoast Related Links":[],"Finish optimizing":[],"You've finished adding links to this article.":[],"Optimize":[],"Added to next step":[],"Choose cornerstone articles...":[],"Loading data...":[],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":[],"Skipped":[],"Hidden from search engines.":[],"Removed":["נמחק"],"Improved":[],"Resolution":[],"Loading redirect options...":[],"Remove and redirect":[],"Custom url:":[],"Related article:":[],"Home page:":[],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":[],"SEO Workout: Remove article":[],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":[],"Hide from search engines":[],"Improve":[],"Are you sure you wish to hide this article from search engines?":[],"Action":["פעולה"],"You've hidden this article from search engines.":[],"You've removed this article.":[],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":[],"Loading link suggestions...":[],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":[],"Skip":["דלג"],"You haven't selected any articles for this step yet. You can do so in the previous step.":[],"Is it up-to-date?":[],"Last Updated":["עדכון ×חרון"],"You've moved this article to the next step.":[],"Unknown":["×œ× ×™×“×•×¢"],"Clear summary":[],"Add internal links towards your orphaned articles.":[],"Should you update your article?":[],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":[],"Start: Love it or leave it?":[],"Clean up your unlinked content to make sure people can find it":["× ×§×” ×ת ×”×§×™×©×•×¨×™× ×”×©×‘×•×¨×™× ×›×“×™ להקל על ×”×’×•×œ×©×™× ×œ×ž×¦×•× ×ת התוכן הנדרש."],"I've finished this workout":[],"Reset this workout":[],"Well done!":[],"Add internal links towards your cornerstones":[],"Check the number of incoming internal links of your cornerstones":[],"Start: Choose your cornerstones!":[],"The cornerstone approach":[],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":[],"Revise this step":[],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":[],"Incoming links":[],"Edit to add link":[],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":[],"Focus keyphrase":["ביטוי מפתח למיקוד"],"Article":["מ×מר"],"Readability score":["ציון קרי×ות"],"SEO score":[],"Copy failed":[],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":[],"Rank with articles you want to rank with":[],"Descriptive text":["טקסט תי×ורי"],"Show the descriptive text":["הצג ×ת הטקסט התי×ורי"],"Show icon":["הצג ×ייקון"],"Yoast Estimated Reading Time":["זמן קרי××” משוער על ידי Yoast"],"Shows an estimated reading time based on the content length.":["מציג זמן קרי××” משוער בהתבסס על ×ורך התוכן."],"reading time":["זמן קרי××”"],"content length":["×ורך התוכן"],"Estimated reading time:":["זמן קרי××” משוער:"],"minute":["דקה","דקות"],"Settings":["הגדרות"],"OK":["תקין"],"Close":["סגור"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["פתרון ×”-SEO הכולל הר×שון עבור וורדפרס, הכולל ניתוח עמוד, מפות ×תר ועוד."],"Type":["סוג"],"Team Yoast":["צוות Yoast"],"Orphaned content":["תוכן יתו×"],"Synonyms":["×ž×™×œ×™× × ×¨×“×¤×•×ª"],"Internal linking suggestions":["הצעות לקישור פנימי"],"Enter a related keyphrase to calculate the SEO score":["הזן ביטוי מפתח כדי לחשב ×ת ציון ×”-SEO"],"Related keyphrase":["ביטוי מפתח קשור"],"Add related keyphrase":["הוסף ביטוי מפתח רלוונטיי×"],"Analysis results":["תוצ×ות ניתוח"],"Help on choosing the perfect keyphrase":["עזרה בבחירת ביטוי מפתח מושלמי×"],"Help on keyphrase synonyms":["עזרה על משפטי מפתח נרדפי×"],"Keyphrase":["ביטוי מפתח"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["יו×סט SEO פרימיו×"],"New URL: {{link}}%s{{/link}}":["כתובת חדשה: {{קישור}}%s{{/קישור}}"],"Undo":["בטל"],"Redirect created":["נוצרה הפניה"],"%s just created a redirect from the old URL to the new URL.":["%s יצר הפניה מכתובת ×”×תר הישנה לכתובת ×”×תר החדשה."],"Old URL: {{link}}%s{{/link}}":["כתובת ישנה: {{link}}%s{{/link}}"],"Keyphrase synonyms":["×ž×™×œ×™× × ×¨×“×¤×•×ª לביטויי מפתח"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["seo"],"internal linking":["×§×™×©×•×¨×™× ×¤× ×™×ž×™×™×"],"site structure":["מבנה ×תר"],"We could not find any relevant articles on your website that you could link to from your post.":["×œ× × ×ž×¦×ו מ××ž×¨×™× ×¨×œ×•×•× ×˜×™×™× ×‘×תר ש××œ×™×”× × ×™×ª×Ÿ לקשר מהפוסט."],"Load suggestions":["טען הצעות"],"Refresh suggestions":["רענן הצעות"],"Write list…":["הוספת רשימה…"],"Adds a list of links related to this page.":["מוסיף רשימה של ×§×™×©×•×¨×™× ×”×§×©×•×¨×™× ×œ×¢×ž×•×“ ×–×”."],"related posts":["×¤×•×¡×˜×™× ×§×©×•×¨×™×"],"related pages":["×¢×ž×•×“×™× ×§×©×•×¨×™×"],"Adds a table of contents to this page.":["מוסיף תוכן ×¢× ×™×™× ×™× ×œ×¢×ž×•×“ ×–×”."],"links":["קישורי×"],"toc":["תוכן ×¢× ×™×™× ×™×"],"Copy link":["העתק קישור"],"Copy link to suggested article: %s":["העתק קישור למ×מר מוצע: %s"],"Add a title to your post for the best internal linking suggestions.":["הוסף כותרת לפוסט כדי לקבל ×ת הצעות הטובות ביותר ×œ×§×™×©×•×¨×™× ×¤× ×™×ž×™×™×."],"Add a metadescription to your post for the best internal linking suggestions.":["הוסף תי×ור לפוסט כדי לקבל ×ת ההצעות הטובות ביותר ×œ×§×™×©×•×¨×™× ×¤× ×™×ž×™×™×."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["הוסף כותרת ותי×ור לפוסט כדי לקבל ×ת ההצעות הטובות ביותר ×œ×§×™×©×•×¨×™× ×¤× ×™×ž×™×™×."],"Also, add a title to your post for the best internal linking suggestions.":["כמו כן, הוסף כותרת לפוסט כדי לקבל ×ת ההצעות הטובות ביותר ×œ×§×™×©×•×¨×™× ×¤× ×™×ž×™×™×."],"Also, add a metadescription to your post for the best internal linking suggestions.":["כמו כן, הוסף תי×ור לפוסט כדי לקבל ×ת ההצעות הטובות ביותר ×œ×§×™×©×•×¨×™× ×¤× ×™×ž×™×™×."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["כמו כן, הוסף כותרת ותי×ור לפוסט כדי לקבל ×ת ההצעות הטובות ביותר ×œ×§×™×©×•×¨×™× ×¤× ×™×ž×™×™×."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["ל×חר הוספת תוכן נוסף, תוצג רשימה של תוכן קשור ש×ליו ניתן ×™×”×™×” לקשר מהפוסט ×”×–×”."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["כדי לשפר ×ת מבנה ×”×תר, יש לשקול להוסיף קישור ×œ×¤×•×¡×˜×™× ×ו ×¢×ž×•×“×™× ×¨×œ×•×•× ×˜×™×™× ××—×¨×™× ×‘×תר."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["×–×” ×™×§×— כמה שניות להר×ות רשימה של תוכן קשור ש×ליו ×תה יכול לקשר. ההצעות יוצגו ×›×ן ברגע שנקבל ×ותן."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["למידע נוסף, {{a}}כד××™ ×œ×§×¨×•× ×ת המדריך שלנו ×‘× ×•×©× ×§×™×©×•×¨ פנימי למטרת SEO.\n{{/a}}"],"Copied!":["הועתק!"],"Not supported!":["×œ× × ×ª×ž×š!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["×”×× ×תה מנסה להשתמש בביטויי מפתח ×ž×¨×•×‘×™× ×§×©×•×¨×™×? כד××™ להוסיף ××•×ª× ×‘× ×¤×¨×“."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["ביטוי המפתח שלך ×רוך מדי. ×”×•× ×™×›×•×œ להכיל עד 191 ×ª×•×•×™× ×œ×›×œ היותר."],"Add as related keyphrase":["הוסף כביטוי מפתח רלוונטי"],"Added!":["נוסף!"],"Remove":["הסר"],"Table of contents":["תוכן ×¢× ×™×™× ×™×"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["%2$s%1$sעלינו למטב ×ת נתוני ×”-SEO של ×”×תר כדי שנוכל להציע לך ×ת ×פשרויות הקישור הטובות ביותר.\n\n\n%3$sלהתחלת מיטוב של נתוני SEO %4$s"],"Create a Zap in %s":["צור Zap ב×מצעות %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hi_IN.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hi_IN.json new file mode 100644 index 00000000..e95901e5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hi_IN.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"hi_IN"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["अनà¥à¤°à¥‹à¤§ निमà¥à¤¨ तà¥à¤°à¥à¤Ÿà¤¿ के साथ वापस आया: \"%s\""],"X share preview":["à¤à¤•à¥à¤¸ शेयर पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न"],"AI X title generator":["à¤à¤†à¤ˆ à¤à¤•à¥à¤¸ शीरà¥à¤·à¤• जनरेटर"],"AI X description generator":["à¤à¤†à¤ˆ à¤à¤•à¥à¤¸ विवरण जनरेटर"],"X preview":["à¤à¤•à¥à¤¸ पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न"],"Please enter a valid focus keyphrase.":["कृपया à¤à¤• मानà¥à¤¯ फ़ोकस कीफ़à¥à¤°à¥‡à¤œà¤¼ दरà¥à¤œ करें।"],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["इस सà¥à¤µà¤¿à¤§à¤¾ का उपयोग करने के लिà¤, आपकी साइट सारà¥à¤µà¤œà¤¨à¤¿à¤• रूप से पहà¥à¤‚च योगà¥à¤¯ होनी चाहिà¤à¥¤ यह परीकà¥à¤·à¤£ साइटों और उदाहरणों दोनों पर लागू होता है जहां आपका रेसà¥à¤Ÿ à¤à¤ªà¥€à¤†à¤ˆ पासवरà¥à¤¡ से सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ है। कृपया सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि आपकी साइट जनता के लिठसà¥à¤²à¤­ है और पà¥à¤¨à¤ƒ पà¥à¤°à¤¯à¤¾à¤¸ करें। यदि समसà¥à¤¯à¤¾ बनी रहती है, तो कृपया %1$sहमारी सहायता टीम से संपरà¥à¤• करें%2$s।"],"Yoast AI cannot reach your site":["योसà¥à¤Ÿ à¤à¤†à¤ˆ आपकी साइट तक नहीं पहà¥à¤‚च सकता"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["इस सà¥à¤µà¤¿à¤§à¤¾ तक पहà¥à¤‚चने के लिà¤, आपको सकà¥à¤°à¤¿à¤¯ %2$s और %3$s सदसà¥à¤¯à¤¤à¤¾ की आवशà¥à¤¯à¤•ता है। कृपया %5$sअपनी सदसà¥à¤¯à¤¤à¤¾à¤à¤ %1$s में सकà¥à¤°à¤¿à¤¯ करें%6$s या %7$sनया %4$s पà¥à¤°à¤¾à¤ªà¥à¤¤ करें%8$s। बाद में, सà¥à¤µà¤¿à¤§à¤¾ के सही ढंग से काम करने के लिठकृपया इस पेज को रीफà¥à¤°à¥‡à¤¶ करें, जिसमें 30 सेकंड तक का समय लग सकता है।"],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["à¤à¤†à¤ˆ शीरà¥à¤·à¤• जनरेटर को उपयोग से पहले à¤à¤¸à¤ˆà¤“ विशà¥à¤²à¥‡à¤·à¤£ को सकà¥à¤·à¤® करने की आवशà¥à¤¯à¤•ता होती है। इसे सकà¥à¤·à¤® करने के लिà¤, कृपया %1$s%3$s की %2$sसाइट सà¥à¤µà¤¿à¤§à¤¾à¤“ं पर जाà¤à¤, à¤à¤¸à¤ˆà¤“ विशà¥à¤²à¥‡à¤·à¤£ चालू करें, और 'परिवरà¥à¤¤à¤¨ सहेजें' पर कà¥à¤²à¤¿à¤• करें। यदि आपके वरà¥à¤¡à¤ªà¥à¤°à¥‡à¤¸ उपयोगकरà¥à¤¤à¤¾ पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² में à¤à¤¸à¤ˆà¤“ विशà¥à¤²à¥‡à¤·à¤£ अकà¥à¤·à¤® है, तो अपनी पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² तक पहà¥à¤‚चें और इसे वहां सकà¥à¤·à¤® करें। यदि आपके पास इन सेटिंगà¥à¤¸ तक पहà¥à¤‚च नहीं है तो कृपया अपने वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• से संपरà¥à¤• करें।"],"Social share preview":["सामाजिक शेयर पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["योसà¥à¤Ÿ à¤à¤†à¤ˆ सà¥à¤µà¤¿à¤§à¤¾ का उपयोग जारी रखने के लिà¤, कृपया अपने अनà¥à¤°à¥‹à¤§à¥‹à¤‚ की आवृतà¥à¤¤à¤¿ कम करें। हमारा %1$sसहायता आलेख%2$s à¤à¤• अनà¥à¤•ूलित वरà¥à¤•फ़à¥à¤²à¥‹ के लिठआपके अनà¥à¤°à¥‹à¤§à¥‹à¤‚ को पà¥à¤°à¤­à¤¾à¤µà¥€ ढंग से योजना बनाने और गति देने पर मारà¥à¤—दरà¥à¤¶à¤¨ पà¥à¤°à¤¦à¤¾à¤¨ करता है।"],"You've reached the Yoast AI rate limit.":["आप योसà¥à¤Ÿ à¤à¤†à¤ˆ दर सीमा तक पहà¥à¤‚च गठहैं।"],"Allow":["अनà¥à¤®à¤¤à¤¿ दें"],"Deny":["असà¥à¤µà¥€à¤•ार करना"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["इस वीडियो को देखने के लिà¤, आपको %1$s को %2$s से à¤à¤®à¥à¤¬à¥‡à¤¡ किठगठवीडियो लोड करने की अनà¥à¤®à¤¤à¤¿ देनी होगी।"],"Text generated by AI may be offensive or inaccurate.":["à¤à¤†à¤ˆ दà¥à¤µà¤¾à¤°à¤¾ उतà¥à¤ªà¤¨à¥à¤¨ पाठ आपतà¥à¤¤à¤¿à¤œà¤¨à¤• या गलत हो सकता है।"],"(Opens in a new browser tab)":["(नठबà¥à¤°à¤¾à¤‰à¤œà¤¼à¤° टैब में खà¥à¤²à¤¤à¤¾ है)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["जेनरेटिव à¤à¤†à¤ˆ के साथ अपने वरà¥à¤•फ़à¥à¤²à¥‹ को तेज़ करें। अपनी खोज और सामाजिक उपसà¥à¤¥à¤¿à¤¤à¤¿ के लिठउचà¥à¤š गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾ वाले शीरà¥à¤·à¤• और विवरण सà¥à¤à¤¾à¤µ पà¥à¤°à¤¾à¤ªà¥à¤¤ करें। %1$sऔर अधिक जानें%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["योसà¥à¤Ÿ à¤à¤†à¤ˆ के साथ शीरà¥à¤·à¤• और विवरण तैयार करें!"],"New to %1$s":["%1$s पर नया"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["मैं योसà¥à¤Ÿ à¤à¤†à¤ˆ सेवा की %1$sसेवा की शरà¥à¤¤à¥‹à¤‚%2$s और %3$sगोपनीयता नीति%4$s को मंजूरी देता हूं। इसमें उपयोगकरà¥à¤¤à¤¾ अनà¥à¤­à¤µ को बेहतर बनाने के लिठडेटा के संगà¥à¤°à¤¹ और उपयोग के लिठसहमति शामिल है।"],"Start generating":["उतà¥à¤ªà¤¨à¥à¤¨ करना पà¥à¤°à¤¾à¤°à¤‚भ करें"],"Yes, revoke consent":["हां, सहमति रदà¥à¤¦ करें"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["अपनी सहमति रदà¥à¤¦ करने से, अब आपको योसà¥à¤Ÿ à¤à¤†à¤ˆ सà¥à¤µà¤¿à¤§à¤¾à¤“ं तक पहà¥à¤‚च नहीं मिलेगी। कà¥à¤¯à¤¾ आप वाकई अपनी सहमति रदà¥à¤¦ करना चाहते हैं?"],"Something went wrong, please try again later.":["कà¥à¤› गलत हो गया है। कृपया बाद में दोबारा पà¥à¤°à¤¯à¤¾à¤¸ करें।"],"Revoke AI consent":["à¤à¤†à¤ˆ सहमति रदà¥à¤¦ करें"],"AI title generator":["à¤à¤†à¤ˆ शीरà¥à¤·à¤• जनरेटर"],"AI description generator":["à¤à¤†à¤ˆ विवरण जनरेटर"],"AI social title generator":["à¤à¤†à¤ˆ सामाजिक शीरà¥à¤·à¤• जनरेटर"],"AI social description generator":["à¤à¤†à¤ˆ सामाजिक विवरण जनरेटर"],"Dismiss":["खारिज"],"Don’t show again":["दोबारा मत दिखाओ"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sयà¥à¤•à¥à¤¤à¤¿%2$s: अपने पृषà¥à¤  में अधिक सामगà¥à¤°à¥€ लिखकर अपने जेनरेट किठगठà¤à¤†à¤ˆ शीरà¥à¤·à¤•ों की सटीकता में सà¥à¤§à¤¾à¤° करें।"],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sयà¥à¤•à¥à¤¤à¤¿%2$s: अपने पृषà¥à¤  में अधिक सामगà¥à¤°à¥€ लिखकर अपने जेनरेट किठगठà¤à¤†à¤ˆ विवरणों की सटीकता में सà¥à¤§à¤¾à¤° करें।"],"Try again":["पà¥à¤¨à¤ƒ कोशिश करें"],"Social preview":["सामाजिक पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न"],"Desktop result":["डेसà¥à¤•टॉप परिणाम"],"Mobile result":["मोबाइल परिणाम"],"Apply %s description":[],"Apply %s title":[],"Next":["अगला"],"Previous":["पिछला "],"Generate 5 more":["5 और उतà¥à¤ªà¤¨à¥à¤¨ करें"],"Google preview":["गूगल पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•न"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["OpenAI के सखà¥à¤¤ नैतिक दिशानिरà¥à¤¦à¥‡à¤¶à¥‹à¤‚ और %1$sउपयोग नीतियों%2$s के कारण, हम आपके पेज के लिठSEO शीरà¥à¤·à¤• उतà¥à¤ªà¤¨à¥à¤¨ करने में असमरà¥à¤¥ हैं। यदि आप à¤à¤†à¤ˆ का उपयोग करने का इरादा रखते हैं, तो कृपया सà¥à¤ªà¤·à¥à¤Ÿ, हिंसक या सà¥à¤ªà¤·à¥à¤Ÿ यौन सामगà¥à¤°à¥€ के उपयोग से बचें। %3$sयह सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करने के लिठकि आपको à¤à¤†à¤ˆ के साथ सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® परिणाम पà¥à¤°à¤¾à¤ªà¥à¤¤ हों, अपने पेज को कॉनà¥à¤«à¤¼à¤¿à¤—र करने के तरीके के बारे में और पढ़ें%4$s।"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["OpenAI के सखà¥à¤¤ नैतिक दिशानिरà¥à¤¦à¥‡à¤¶à¥‹à¤‚ और %1$sउपयोग नीतियों%2$s के कारण, हम आपके पेज के लिठमेटा विवरण तैयार करने में असमरà¥à¤¥ हैं। यदि आप à¤à¤†à¤ˆ का उपयोग करने का इरादा रखते हैं, तो कृपया सà¥à¤ªà¤·à¥à¤Ÿ, हिंसक या सà¥à¤ªà¤·à¥à¤Ÿ यौन सामगà¥à¤°à¥€ के उपयोग से बचें। %3$sयह सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करने के लिठकि आपको à¤à¤†à¤ˆ के साथ सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® परिणाम पà¥à¤°à¤¾à¤ªà¥à¤¤ हों, अपने पेज को कॉनà¥à¤«à¤¼à¤¿à¤—र करने के तरीके के बारे में और पढ़ें%4$s।"],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["इस सà¥à¤µà¤¿à¤§à¤¾ तक पहà¥à¤‚चने के लिà¤, आपको à¤à¤• सकà¥à¤°à¤¿à¤¯ %1$s सदसà¥à¤¯à¤¤à¤¾ की आवशà¥à¤¯à¤•ता है। कृपया %3$sअपनी सदसà¥à¤¯à¤¤à¤¾ %2$s%4$s में सकà¥à¤°à¤¿à¤¯ करें या %5$sà¤à¤• नई %1$s सदसà¥à¤¯à¤¤à¤¾ पà¥à¤°à¤¾à¤ªà¥à¤¤ करें%6$s। इसके बाद, सà¥à¤µà¤¿à¤§à¤¾ के सही ढंग से काम करने के लिठइस पेज को रीफà¥à¤°à¥‡à¤¶ करने के लिठबटन पर कà¥à¤²à¤¿à¤• करें, जिसमें 30 सेकंड तक का समय लग सकता है।"],"Refresh page":["Addons रिफà¥à¤°à¥‡à¤¶ करें"],"Not enough content":["परà¥à¤¯à¤¾à¤ªà¥à¤¤ सामगà¥à¤°à¥€ नहीं"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["कृपया बाद में पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ करें। यदि समसà¥à¤¯à¤¾ बनी रहती है, तो कृपया %1$sहमारी सहायता टीम से संपरà¥à¤• करें%2$s!"],"Something went wrong":["कà¥à¤› गलत हो गया"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["à¤à¤¸à¤¾ लगता है कि कनेकà¥à¤¶à¤¨ टाइमआउट हो गया है. कृपया अपना इंटरनेट कनेकà¥à¤¶à¤¨ जांचें और बाद में पà¥à¤¨à¤ƒ पà¥à¤°à¤¯à¤¾à¤¸ करें। यदि समसà¥à¤¯à¤¾ बनी रहती है, तो कृपया %1$sहमारी सहायता टीम से संपरà¥à¤• करें%2$s"],"Connection timeout":["कनेकà¥à¤¶à¤¨ समय समापà¥à¤¤"],"Use AI":["à¤à¤†à¤ˆ का पà¥à¤°à¤¯à¥‹à¤— करें"],"Close modal":["मोडल बंद करें"],"Learn more about AI (Opens in a new browser tab)":["à¤à¤†à¤ˆ के बारे में और जानें (à¤à¤• नठबà¥à¤°à¤¾à¤‰à¤œà¤¼à¤° टैब में खà¥à¤²à¤¤à¤¾ है)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sशीरà¥à¤·à¤•%3$s: आपके पेज का अभी तक कोई शीरà¥à¤·à¤• नहीं है। %2$sà¤à¤• जोड़ें%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sशीरà¥à¤·à¤•%2$s: आपके पृषà¥à¤  का शीरà¥à¤·à¤• है। बहà¥à¤¤ अचà¥à¤›à¤¾!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sकीफà¥à¤°à¥‡à¤œ वितरण%3$s: %2$sपाठ में अपने कीफà¥à¤°à¥‡à¤œ या इसके परà¥à¤¯à¤¾à¤¯à¤µà¤¾à¤šà¥€ को शामिल करें ताकि हम कीफà¥à¤°à¥‡à¤œ वितरण की जांच कर सकें%3$s।"],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sकीफà¥à¤°à¥‡à¤œà¤¼ वितरण%2$s: अचà¥à¤›à¤¾ काम!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sकीफà¥à¤°à¥‡à¤œ वितरण%3$s: असमान। आपके पाठ के कà¥à¤› हिसà¥à¤¸à¥‹à¤‚ में कीफ़à¥à¤°à¥‡à¤œà¤¼ या इसके परà¥à¤¯à¤¾à¤¯à¤µà¤¾à¤šà¥€ शबà¥à¤¦ नहीं हैं। %2$sउनà¥à¤¹à¥‡à¤‚ समान रूप से वितरित करें%3$s।"],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sकीफà¥à¤°à¥‡à¤œà¤¼ वितरण%3$s: बहà¥à¤¤ असमान। आपके पाठ के बड़े हिसà¥à¤¸à¥‡ में कीफ़à¥à¤°à¥‡à¤œà¤¼ या इसके परà¥à¤¯à¤¾à¤¯à¤µà¤¾à¤šà¥€ शबà¥à¤¦ नहीं हैं। %2$sउनà¥à¤¹à¥‡à¤‚ समान रूप से वितरित करें%3$s।"],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: आप बहà¥à¤¤ अधिक जटिल शबà¥à¤¦à¥‹à¤‚ का उपयोग नहीं कर रहे हैं, जिससे आपके पाठ को पढ़ना आसान हो जाता है। अचà¥à¤›à¥€ नौकरी!"],"Word complexity":["शबà¥à¤¦ जटिलता"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: आपके टेकà¥à¤¸à¥à¤Ÿ के %2$s शबà¥à¤¦à¥‹à¤‚ को जटिल माना जाता है। %3$sपठनीयता में सà¥à¤§à¤¾à¤° के लिठछोटे और अधिक परिचित शबà¥à¤¦à¥‹à¤‚ का उपयोग करने का पà¥à¤°à¤¯à¤¾à¤¸ करें%4$s।"],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sसंरेखण%3$s: केंदà¥à¤°-संरेखित पाठ का à¤à¤• लंबा खंड है। %2$sहम अनà¥à¤¶à¤‚सा करते हैं कि इसे वाम-संरेखित करें%3$s।","%1$sसंरेखण%3$s: केंदà¥à¤°-संरेखित पाठ के %4$s लंबे खंड हैं। %2$sहम उनà¥à¤¹à¥‡à¤‚ वाम-संरेखित बनाने की सलाह देते हैं%3$s।"],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sसंरेखण%3$s: केंदà¥à¤°-संरेखित पाठ का à¤à¤• लंबा खंड है। %2$sहम इसे सही-संरेखित करने की सलाह देते हैं%3$s।","%1$sसंरेखण%3$s: केंदà¥à¤°-संरेखित पाठ के %4$s लंबे खंड हैं। %2$sहम उनà¥à¤¹à¥‡à¤‚ सही-संरेखित करने की सलाह देते हैं%3$s।"],"Select image":["छवि चà¥à¤¨à¥‡"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["हो सकता है कि आपको यह पता भी न हो, लेकिन आपकी साइट पर à¤à¤¸à¥‡ पेज हो सकते हैं जिन पर कोई लिंक नहीं है। यह à¤à¤• à¤à¤¸à¤ˆà¤“ मà¥à¤¦à¥à¤¦à¤¾ है, कà¥à¤¯à¥‹à¤‚कि खोज इंजनों के लिठà¤à¤¸à¥‡ पेज ढूंढना मà¥à¤¶à¥à¤•िल है जिनमें कोई लिंक नहीं है। इसलिà¤, उनके लिठरैंक करना कठिन है। हम इन पेजों को अनाथ सामगà¥à¤°à¥€ कहते हैं। इस वरà¥à¤•आउट में, हम आपकी साइट पर अनाथ सामगà¥à¤°à¥€ ढूंढते हैं और इसमें जलà¥à¤¦à¥€ से लिंक जोड़ने में आपका मारà¥à¤—दरà¥à¤¶à¤¨ करते हैं, ताकि इसे रैंक करने का मौका मिल सके!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["कà¥à¤› लिंक जोड़ने का समय! नीचे, आप अपने अनाथ लेखों की à¤à¤• सूची देखते हैं। पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• के अंतरà¥à¤—त, संबंधित पृषà¥à¤ à¥‹à¤‚ के लिठसà¥à¤à¤¾à¤µ हैं जिनमें से आप à¤à¤• लिंक जोड़ सकते हैं। लिंक जोड़ते समय, इसे अपने अनाथ लेख से संबंधित पà¥à¤°à¤¾à¤¸à¤‚गिक वाकà¥à¤¯ में समà¥à¤®à¤¿à¤²à¤¿à¤¤ करना सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें। पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• अनाथ लेख में लिंक तब तक जोड़ते रहें जब तक आप उनकी ओर इशारा करने वाले लिंक की मातà¥à¤°à¤¾ से संतà¥à¤·à¥à¤Ÿ न हो जाà¤à¤à¥¤"],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["कà¥à¤› लिंक जोड़ने का समय! नीचे, आप अपने आधारशिलाओं के साथ à¤à¤• सूची देखते हैं। पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• आधारशिला के नीचे, उन लेखों के लिठसà¥à¤à¤¾à¤µ दिठगठहैं जिनसे आप लिंक जोड़ सकते हैं। लिंक जोड़ते समय, इसे अपने आधारशिला लेख से संबंधित पà¥à¤°à¤¾à¤¸à¤‚गिक वाकà¥à¤¯ में समà¥à¤®à¤¿à¤²à¤¿à¤¤ करना सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें। जब तक आपके कोने के पतà¥à¤¥à¤°à¥‹à¤‚ में सबसे अधिक आंतरिक लिंक उनकी ओर इशारा करते हैं, तब तक जितने आवशà¥à¤¯à¤• हो उतने संबंधित लेखों से लिंक जोड़ते रहें।"],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["आपकी साइट पर कà¥à¤› लेख %1$sसबसे%2$s महतà¥à¤µà¤ªà¥‚रà¥à¤£ हैं। वे लोगों के सवालों का जवाब देते हैं और उनकी समसà¥à¤¯à¤¾à¤“ं का समाधान करते हैं। तो, वे रैंक के पातà¥à¤° हैं! %3$s पर, हम इन आधारशिला लेखों को कहते हैं। उनà¥à¤¹à¥‡à¤‚ रैंक दिलाने का à¤à¤• तरीका यह है कि उनसे परà¥à¤¯à¤¾à¤ªà¥à¤¤ लिंकà¥à¤¸ जोड़े जाà¤à¤‚। अधिक लिंक खोज इंजनों को संकेत देते हैं कि वे लेख महतà¥à¤µà¤ªà¥‚रà¥à¤£ और मूलà¥à¤¯à¤µà¤¾à¤¨ हैं। इस कसरत में, हम आपके आधारशिला लेखों के लिंक जोड़ने में आपकी सहायता करेंगे!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["जब आप थोड़ी और पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ जोड़ देंगे, तो हम आपको आपके पाठ के औपचारिकता सà¥à¤¤à¤° के बारे में बता सकेंगे।"],"Overall, your text appears to be %1$s%3$s%2$s.":["कà¥à¤² मिलाकर, आपका टेकà¥à¤¸à¥à¤Ÿ %1$s%3$s%2$s पà¥à¤°à¤¤à¥€à¤¤ होता है।"],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["जैपियर à¤à¤•ीकरण 20.7 में %1$s से हटा दिया जाà¤à¤—ा (रिलीज़ दिनांक 9 मई)। यदि आपके कोई पà¥à¤°à¤¶à¥à¤¨ हैं, तो कृपया %2$s से संपरà¥à¤• करें।"],"Maximum heading level":["अधिकतम शीरà¥à¤·à¤• सà¥à¤¤à¤°"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["आपने लिंक सà¥à¤à¤¾à¤µà¥‹à¤‚ को अकà¥à¤·à¤® कर दिया है, जो कारà¥à¤¯ करने के लिठसंबंधित लिंक के लिठआवशà¥à¤¯à¤• है। यदि आप संबंधित लिंक जोड़ना चाहते हैं, तो कृपया साइट की विशेषताà¤à¤‚ पर जाà¤à¤‚ और लिंक सà¥à¤à¤¾à¤µà¥‹à¤‚ को सकà¥à¤·à¤® करें।"],"Schema":["सà¥à¤•ीमा"],"Meta tags":["मेटा टैग"],"Not available":["उपलबà¥à¤§ नही है |"],"Checks":["चेक"],"Focus Keyphrase":["फोकस कीफà¥à¤°à¥‡à¤œ"],"Good":["अचà¥à¤›à¤¾"],"No index":["कोई सूचकांक नहीं"],"Front-end SEO inspector":["फà¥à¤°à¤‚ट-à¤à¤‚ड à¤à¤¸à¤ˆà¤“ इंसà¥à¤ªà¥‡à¤•à¥à¤Ÿà¤°"],"Focus keyphrase not set":["फ़ोकस कीफ़à¥à¤°à¥‡à¤œà¤¼ सेट नहीं है"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["à¤à¤• बार जब आप अपने जैप को अपने %s डैशबोरà¥à¤¡ में पà¥à¤°à¤•ाशित कर लेते हैं, तो आप जांच सकते हैं कि यह सकà¥à¤°à¤¿à¤¯ है या आपकी साइट से जà¥à¤¡à¤¼à¤¾ है।"],"Reset API key":["à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी रीसेट करें"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["आप वरà¥à¤¤à¤®à¤¾à¤¨ में निमà¥à¤¨ à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी का उपयोग करके %s से जà¥à¤¡à¤¼à¥‡ हà¥à¤ हैं। यदि आप किसी भिनà¥à¤¨ à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी के साथ पà¥à¤¨: कनेकà¥à¤Ÿ करना चाहते हैं तो आप नीचे अपनी कà¥à¤‚जी रीसेट कर सकते हैं।"],"Your API key":["आपकी à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी"],"Go to your %s dashboard":["अपने %s डैशबोरà¥à¤¡ पर जाà¤à¤"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["आप %1$s से सफलतापूरà¥à¤µà¤• कनेकà¥à¤Ÿ हो गठहैं! अपने जैप को पà¥à¤°à¤¬à¤‚धित करने के लिà¤, कृपया अपने %2$s डैशबोरà¥à¤¡ पर जाà¤à¤‚।"],"Your %s dashboard":["आपका %s डैशबोरà¥à¤¡"],"Verify connection":["कनेकà¥à¤¶à¤¨ सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें"],"Verify your connection":["अपना कनेकà¥à¤¶à¤¨ सतà¥à¤¯à¤¾à¤ªà¤¿à¤¤ करें"],"Create a Zap":["à¤à¤• जैप बनाà¤à¤‚"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["अपने %1$s खाते में लॉग इन करें और अपना पहला जैप बनाना शà¥à¤°à¥‚ करें! धà¥à¤¯à¤¾à¤¨ दें कि आप %2$s के टà¥à¤°à¤¿à¤—र इवेंट के साथ केवल 1 जैप बना सकते हैं। इस जैप के भीतर आप à¤à¤• या अधिक कà¥à¤°à¤¿à¤¯à¤¾à¤“ं को चà¥à¤¨ सकते हैं।"],"%s API key":["%s à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी"],"You'll need this API key later on in %s when you're setting up your Zap.":["जब आप अपना जैप सेट अप कर रहे हों तो आपको बाद में %s में इस à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी की आवशà¥à¤¯à¤•ता होगी।"],"Copy your API key":["अपनी à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी कॉपी करें"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["à¤à¤• कनेकà¥à¤¶à¤¨ सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करने के लिà¤, सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करें कि आप नीचे दी गई à¤à¤ªà¥€à¤†à¤ˆ कà¥à¤‚जी की पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ बनाते हैं और इसका उपयोग अपने %s खाते में जैप बनाने और चालू करने के लिठकरते हैं।"],"Manage %s settings":["%s सेटिंग पà¥à¤°à¤¬à¤‚धित करें"],"Connect to %s":["%s से कनेकà¥à¤Ÿ करें"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["कृपया धà¥à¤¯à¤¾à¤¨ दें: इस कसरत को अचà¥à¤›à¥€ तरह से काम करने के लिà¤, आपको à¤à¤¸à¤ˆà¤“ डेटा ऑपà¥à¤Ÿà¤¿à¤®à¤¾à¤‡à¤œà¥‡à¤¶à¤¨ टूल चलाने की आवशà¥à¤¯à¤•ता है। वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• इसे %1$sà¤à¤¸à¤ˆà¤“ > टूलà¥à¤¸%2$s के अंतरà¥à¤—त चला सकते हैं।"],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["आपने अपने अनाथ लेखों में लिंक जोड़ दिठहैं, और आपने उन लेखों को साफ कर दिया है जो अब पà¥à¤°à¤¾à¤¸à¤‚गिक नहीं थे। अचà¥à¤›à¤¾ काम! नीचे दिठगठसारांश पर à¤à¤• नज़र डालें और जो आपने पूरा किया उसका जशà¥à¤¨ मनाà¤à¤‚!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["इस सूची की सामगà¥à¤°à¥€ का समालोचनातà¥à¤®à¤• परीकà¥à¤·à¤£ करें और आवशà¥à¤¯à¤• अदà¥à¤¯à¤¤à¤¨ करें। यदि आपको अदà¥à¤¯à¤¤à¤¨ करने में सहायता की आवशà¥à¤¯à¤•ता है, तो हमारे पास à¤à¤• बहà¥à¤¤ ही %1$sउपयोगी बà¥à¤²à¥‰à¤— पोसà¥à¤Ÿ है जो आपको हर तरह से मारà¥à¤—दरà¥à¤¶à¤¨ कर सकती है%2$s (नठटैब में खोलने के लिठकà¥à¤²à¤¿à¤• करें)।"],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sअधिक मारà¥à¤—दरà¥à¤¶à¤¨ की आवशà¥à¤¯à¤•ता है? हमने निमà¥à¤¨à¤²à¤¿à¤–ित मारà¥à¤—दरà¥à¤¶à¤¿à¤•ा में पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• चरण को अधिक विसà¥à¤¤à¤¾à¤° से कवर किया है: %2$s %7$s अनाथ सामगà¥à¤°à¥€ कसरत का उपयोग कैसे करें%3$s%4$s%5$s।%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["आपने अभी-अभी अपनी सरà¥à¤µà¤¶à¥à¤°à¥‡à¤·à¥à¤  सामगà¥à¤°à¥€ को ढूंढना आसान बना दिया है, और रैंक करने की अधिक संभावना है! जाने के लिठरासà¥à¤¤à¤¾! समय-समय पर, यह जांचना याद रखें कि कà¥à¤¯à¤¾ आपके कॉरà¥à¤¨à¤°à¤¸à¥à¤Ÿà¥‹à¤¨ को परà¥à¤¯à¤¾à¤ªà¥à¤¤ लिंक मिल रहे हैं!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["नीचे दी गई सूची पर à¤à¤• नज़र डालें। कà¥à¤¯à¤¾ आपके आधारशिला (%1$s के साथ चिहà¥à¤¨à¤¿à¤¤) में सबसे अधिक आंतरिक लिंक हैं जो उनकी ओर इशारा करते हैं? ऑपà¥à¤Ÿà¤¿à¤®à¤¾à¤‡à¤œà¤¼ बटन पर कà¥à¤²à¤¿à¤• करें यदि आपको लगता है कि आधारशिला को अधिक लिंक की आवशà¥à¤¯à¤•ता है। यह लेख को अगले चरण में ले जाà¤à¤—ा।"],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["कà¥à¤¯à¤¾ आपके सभी कोने के पतà¥à¤¥à¤°à¥‹à¤‚ में हरे बà¥à¤²à¥‡à¤Ÿà¥à¤¸ हैं? सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® परिणामों के लिà¤, उन परिणामों को संपादित करने पर विचार करें जो नहीं करते हैं!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["आप किन लेखों को सरà¥à¤µà¥‹à¤šà¥à¤š रैंक देना चाहते हैं? आपके दरà¥à¤¶à¤•ों को कौन सा सबसे उपयोगी और संपूरà¥à¤£ लगेगा? नीचे की ओर इंगित करने वाले तीर पर कà¥à¤²à¤¿à¤• करें और उन मानदंडों को पूरा करने वाले लेखों की तलाश करें। हम सूची से आपके दà¥à¤µà¤¾à¤°à¤¾ चà¥à¤¨à¥‡ गठलेखों को आधारशिला के रूप में सà¥à¤µà¤¤à¤ƒ चिहà¥à¤¨à¤¿à¤¤ कर देंगे।"],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sअधिक मारà¥à¤—दरà¥à¤¶à¤¨ की आवशà¥à¤¯à¤•ता है? हमने पà¥à¤°à¤¤à¥à¤¯à¥‡à¤• चरण को अधिक विसà¥à¤¤à¤¾à¤° से इसमें शामिल किया है: %2$s %7$s आधारशिला कसरत का उपयोग कैसे करें%3$s%4$s%5$s।%6$s"],"Yoast Table of Contents":["योसà¥à¤Ÿ सामगà¥à¤°à¥€ तालिका"],"Yoast Related Links":["योसà¥à¤Ÿ संबंधित कड़ियाà¤"],"Finish optimizing":["अनà¥à¤•ूलन समापà¥à¤¤ करें"],"You've finished adding links to this article.":["आपने इस लेख में लिंक जोड़ना समापà¥à¤¤ कर लिया है।"],"Optimize":["अनà¥à¤•ूलन"],"Added to next step":["अगले चरण में जोड़ा गया"],"Choose cornerstone articles...":["आधारशिला लेख चà¥à¤¨à¥‡à¤‚..."],"Loading data...":["डेटा लोड हो रहा है..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["आपने अभी तक इस कसरत का उपयोग करके किसी भी लेख को साफ़ या अपडेट नहीं किया है। à¤à¤• बार à¤à¤¸à¤¾ करने के बाद, आपके काम का सारांश यहां दिखाई देगा।"],"Skipped":["छोड़ा गया"],"Hidden from search engines.":["सरà¥à¤š इंजन से छिपा हà¥à¤† है।"],"Removed":["निकाला गया"],"Improved":["सà¥à¤§à¤¾à¤°à¤¾ हà¥à¤†"],"Resolution":["सà¥à¤¥à¤¿à¤°à¤¤à¤¾"],"Loading redirect options...":["रीडायरेकà¥à¤Ÿ विकलà¥à¤ª लोड हो रहे हैं..."],"Remove and redirect":["हटाà¤à¤‚ और रीडायरेकà¥à¤Ÿ करें"],"Custom url:":["कसà¥à¤Ÿà¤® यूआरà¤à¤²:"],"Related article:":["संबंधित लेख:"],"Home page:":["मà¥à¤– पृषà¥à¤ :"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["आप %1$s%2$s%3$s को निकालने वाले हैं। अपनी साइट पर 404 को रोकने के लिà¤, आपको इसे अपनी साइट के किसी अनà¥à¤¯ पृषà¥à¤  पर पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤¦à¥‡à¤¶à¤¿à¤¤ करना चाहिà¤à¥¤ आप इसे कहाठपà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤¦à¥‡à¤¶à¤¿à¤¤ करना चाहेंगे?"],"SEO Workout: Remove article":["à¤à¤¸à¤ˆà¤“ वरà¥à¤•आउट: लेख हटाà¤à¤‚"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["सब कà¥à¤› अचà¥à¤›à¤¾ लग रहा है! हमें आपकी साइट पर à¤à¤¸à¤¾ कोई लेख नहीं मिला है जो छह महीने से अधिक पà¥à¤°à¤¾à¤¨à¤¾ हो और आपकी साइट पर बहà¥à¤¤ कम लिंक पà¥à¤°à¤¾à¤ªà¥à¤¤ करता हो। नठसफाई सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठबाद में यहां देखें!"],"Hide from search engines":["सरà¥à¤š इंजन से छà¥à¤ªà¤¾à¤à¤‚"],"Improve":["सà¥à¤§à¤¾à¤°à¥‡à¤‚"],"Are you sure you wish to hide this article from search engines?":["कà¥à¤¯à¤¾ आप वाकई इस लेख को सरà¥à¤š इंजन से छिपाना चाहते हैं?"],"Action":["Aksi"],"You've hidden this article from search engines.":["आपने इस लेख को सरà¥à¤š इंजन से छà¥à¤ªà¤¾à¤¯à¤¾ है।"],"You've removed this article.":["आपने यह लेख हटा दिया है."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["आपने वरà¥à¤¤à¤®à¤¾à¤¨ में सà¥à¤§à¤¾à¤° के लिठकिसी लेख का चयन नहीं किया है। लिंक जोड़ने के लिठपिछले चरणों में कà¥à¤› लेखों का चयन करें और हम आपको यहां लिंक सà¥à¤à¤¾à¤µ दिखाà¤à¤‚गे।"],"Loading link suggestions...":["लिंक सà¥à¤à¤¾à¤µ लोड हो रहे हैं..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["हमें इस लेख के लिठकोई सà¥à¤à¤¾à¤µ नहीं मिला, लेकिन निशà¥à¤šà¤¿à¤¤ रूप से आप अभी भी उन लेखों के लिंक जोड़ सकते हैं जो आपको लगता है कि संबंधित हैं।"],"Skip":["छोड़ें"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["आपने अभी तक इस चरण के लिठकिसी लेख का चयन नहीं किया है। आप इसे पिछले चरण में कर सकते हैं।"],"Is it up-to-date?":["कà¥à¤¯à¤¾ यह अप-टू-डेट है?"],"Last Updated":["अंतिम बार अपडेट"],"You've moved this article to the next step.":["आपने इस लेख को अगले चरण पर ले जाया है।"],"Unknown":["अजà¥à¤žà¤¾à¤¤"],"Clear summary":["सारांश साफ़ करें"],"Add internal links towards your orphaned articles.":["अपने अनाथ लेखों के लिठआंतरिक लिंक जोड़ें।"],"Should you update your article?":["कà¥à¤¯à¤¾ आपको अपना लेख अपडेट करना चाहिà¤?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["आपकी साइट में बहà¥à¤¤ सारी सामगà¥à¤°à¥€ हो सकती है जिसे आपने à¤à¤• बार बनाया था और उसके बाद कभी पीछे मà¥à¤¡à¤¼à¤•र नहीं देखा। उन पृषà¥à¤ à¥‹à¤‚ को देखना और सà¥à¤µà¤¯à¤‚ से पूछना महतà¥à¤µà¤ªà¥‚रà¥à¤£ है कि कà¥à¤¯à¤¾ वह सामगà¥à¤°à¥€ अभी भी आपकी साइट के लिठपà¥à¤°à¤¾à¤¸à¤‚गिक है। कà¥à¤¯à¤¾ आपको इसे सà¥à¤§à¤¾à¤°à¤¨à¤¾ चाहिठया इसे हटा देना चाहिà¤?"],"Start: Love it or leave it?":["पà¥à¤°à¤¾à¤°à¤‚भ करें: इसे पà¥à¤¯à¤¾à¤° करें या छोड़ दें?"],"Clean up your unlinked content to make sure people can find it":["लोगों को यह सà¥à¤¨à¤¿à¤¶à¥à¤šà¤¿à¤¤ करने के लिठअपनी अनलिंक की गई सामगà¥à¤°à¥€ को साफ़ करें"],"I've finished this workout":["मैंने यह कसरत पूरी कर ली है"],"Reset this workout":["इस कसरत को रीसेट करें"],"Well done!":["बहà¥à¤¤ बढ़िया!"],"Add internal links towards your cornerstones":["अपने आधारशिलाओं की ओर आंतरिक लिंक जोड़ें"],"Check the number of incoming internal links of your cornerstones":["अपने आधारशिला के आने वाले आंतरिक लिंक की संखà¥à¤¯à¤¾ की जाà¤à¤š करें"],"Start: Choose your cornerstones!":["पà¥à¤°à¤¾à¤°à¤‚भ करें: अपने आधारशिला चà¥à¤¨à¥‡à¤‚!"],"The cornerstone approach":["कारà¥à¤¨à¤°à¤¸à¥à¤Ÿà¥‹à¤¨ दृषà¥à¤Ÿà¤¿à¤•ोण"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["कृपया धà¥à¤¯à¤¾à¤¨ दें: इस कसरत के लिठअचà¥à¤›à¥€ तरह से काम करने के लिठऔर आपको जोड़ने के सà¥à¤à¤¾à¤µ देने के लिà¤, आपको à¤à¤¸à¤ˆà¤“ डेटा ऑपà¥à¤Ÿà¤¿à¤®à¤¾à¤‡à¤œà¤¼à¥‡à¤¶à¤¨ टूल चलाने की आवशà¥à¤¯à¤•ता है। वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• इसे %1$sà¤à¤¸à¤ˆà¤“ > टूलà¥à¤¸%2$s के अंतरà¥à¤—त चला सकते हैं।"],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["कृपया धà¥à¤¯à¤¾à¤¨ दें: आपके वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ने à¤à¤¸à¤ˆà¤“ सेटिंगà¥à¤¸ में आधारशिला कारà¥à¤¯à¤•à¥à¤·à¤®à¤¤à¤¾ को अकà¥à¤·à¤® कर दिया है। यदि आप इस वरà¥à¤•आउट का उपयोग करना चाहते हैं, तो इसे सकà¥à¤·à¤® किया जाना चाहिà¤à¥¤"],"I've finished this step":["मैंने यह चरण पूरा कर लिया है"],"Revise this step":["इस चरण को संशोधित करें"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["हम आपके पृषà¥à¤ à¥‹à¤‚ पर आंतरिक लिंक नहीं खोज सके। या तो आपने अभी तक अपनी सामगà¥à¤°à¥€ में कोई आंतरिक लिंक नहीं जोड़ा है, या योसà¥à¤Ÿ à¤à¤¸à¤ˆà¤“ ने उनà¥à¤¹à¥‡à¤‚ अनà¥à¤•à¥à¤°à¤®à¤¿à¤¤ नहीं किया है। आप à¤à¤¸à¤ˆà¤“ > टूलà¥à¤¸ के अंतरà¥à¤—त à¤à¤¸à¤ˆà¤“ डेटा ऑपà¥à¤Ÿà¤¿à¤®à¤¾à¤‡à¤œà¥‡à¤¶à¤¨ चलाकर योसà¥à¤Ÿ à¤à¤¸à¤ˆà¤“ को अपने लिंकà¥à¤¸ को इंडेकà¥à¤¸ कर सकते हैं।"],"Incoming links":["आने वाले लिंक"],"Edit to add link":["लिंक जोड़ने के लिठसंपादित करें"],"%s incoming link":["%s इनकमिंग लिंक","%s इनकमिंग लिंक"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["वरà¥à¤¤à¤®à¤¾à¤¨ में आपके पास कारà¥à¤¨à¤°à¤¸à¥à¤Ÿà¥‹à¤¨ के रूप में चिहà¥à¤¨à¤¿à¤¤ कोई लेख नहीं है। जब आप अपने लेखों को कारà¥à¤¨à¤°à¤¸à¥à¤Ÿà¥‹à¤¨ के रूप में चिहà¥à¤¨à¤¿à¤¤ करते हैं, तो वे यहां दिखाई देंगे।"],"Focus keyphrase":["Frasa kunci utama"],"Article":["Artikel"],"Readability score":["Skor keterbacaan"],"SEO score":["Skor SEO"],"Copy failed":["कॉपी विफल"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["इस %1$sचरण-दर-चरण कसरत%2$s का उपयोग करके अपने सभी आधारशिलाओं के लिठरैंकिंग में सà¥à¤§à¤¾à¤° करें!"],"Rank with articles you want to rank with":["उन लेखों के साथ रैंक करें जिनके साथ आप रैंक करना चाहते हैं"],"Descriptive text":["सà¥à¤ªà¤·à¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ"],"Show the descriptive text":["सà¥à¤ªà¤·à¥à¤Ÿ टेकà¥à¤¸à¥à¤Ÿ दिखाà¤à¤‚"],"Show icon":["आइकन दिखाà¤à¤‚"],"Yoast Estimated Reading Time":["योसà¥à¤Ÿ अनà¥à¤®à¤¾à¤¨à¤¿à¤¤ पढ़ने का समय"],"Shows an estimated reading time based on the content length.":["सामगà¥à¤°à¥€ की लंबाई के आधार पर अनà¥à¤®à¤¾à¤¨à¤¿à¤¤ पढ़ने का समय दिखाता है।"],"reading time":["पढ़ने का समय"],"content length":["सामगà¥à¤°à¥€ की लंबाई"],"Estimated reading time:":["अनà¥à¤®à¤¾à¤¨à¤¿à¤¤ पढ़ने का समय:"],"minute":["मिनट","मिनटों"],"Settings":["सेटिंग"],"OK":["OK"],"Close":["पास"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Plugin pertama yang benar-benar memberikan semua solusi SEO untuk WordPress, termasuk analisis konten pada halaman, Peta Situs XML, dan masih banyak lagi."],"Type":["पà¥à¤°à¤•ार"],"Team Yoast":["Tim Yoast"],"Orphaned content":["अनाथ सामगà¥à¤°à¥€"],"Synonyms":["समानारà¥à¤¥à¤• शबà¥à¤¦"],"Internal linking suggestions":["आंतरिक लिंकिंग सà¥à¤à¤¾à¤µ"],"Enter a related keyphrase to calculate the SEO score":["à¤à¤¸à¤ˆà¤“ सà¥à¤•ोर की गणना करने के लिठसंबंधित कीफ़à¥à¤°à¥‡à¤œà¤¼ दरà¥à¤œ करें"],"Related keyphrase":["Frasa kunci terkait"],"Add related keyphrase":["Tambahkan frasa kunci terkait"],"Analysis results":["Hasil analisis"],"Help on choosing the perfect keyphrase":["सही कीफà¥à¤°à¥‡à¤œà¤¼ चà¥à¤¨à¤¨à¥‡ में मदद करें"],"Help on keyphrase synonyms":["कीफà¥à¤°à¥‡à¤œ समानारà¥à¤¥à¥€ शबà¥à¤¦ पर मदद करें"],"Keyphrase":["Frasa-kunci"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["योसà¥à¤Ÿ à¤à¤¸à¤ˆà¤“ पà¥à¤°à¥€à¤®à¤¿à¤¯à¤®"],"New URL: {{link}}%s{{/link}}":["नया यूआरà¤à¤²: {{link}}%s{{/link}}"],"Undo":["पहले जैसा"],"Redirect created":["पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤¦à¥‡à¤¶à¤¿à¤¤ बनाया गया"],"%s just created a redirect from the old URL to the new URL.":["%s ने पà¥à¤°à¤¾à¤¨à¥‡ यूआरà¤à¤² से नठयूआरà¤à¤² पर पà¥à¤¨à¤°à¥à¤¨à¤¿à¤°à¥à¤¦à¥‡à¤¶à¤¿à¤¤ किया।"],"Old URL: {{link}}%s{{/link}}":["पà¥à¤°à¤¾à¤¨à¤¾ यूआरà¤à¤²: {{link}}%s{{/link}}"],"Keyphrase synonyms":["कीफà¥à¤°à¥‡à¤œ परà¥à¤¯à¤¾à¤¯à¤µà¤¾à¤šà¥€"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["à¤à¤• तà¥à¤°à¥à¤Ÿà¤¿ उतà¥à¤ªà¤¨à¥à¤¨ हà¥à¤ˆ: पà¥à¤°à¥€à¤®à¤¿à¤¯à¤® à¤à¤¸à¤ˆà¤“ विशà¥à¤²à¥‡à¤·à¤£ अपेकà¥à¤·à¤¾ के अनà¥à¤°à¥‚प काम नहीं कर रहा है। कृपया {{activateLink}}अपनी सदसà¥à¤¯à¤¤à¤¾ MyYoast में सकà¥à¤°à¤¿à¤¯ करें{/activateLink}} और फिर इसे ठीक से काम करने के लिठ{{reloadButton}}इस पृषà¥à¤  को पà¥à¤¨à¤ƒ लोड करें{{/reloadButton}}।"],"seo":["seo"],"internal linking":["Tautan internal"],"site structure":["struktur situs"],"We could not find any relevant articles on your website that you could link to from your post.":["Kami tidak dapat menemukan artikel yang relevan pada situs web Anda yang bisa dijadikan tautan dari artikel ini."],"Load suggestions":["सà¥à¤à¤¾à¤µ लोड करें"],"Refresh suggestions":["सà¥à¤à¤¾à¤µà¥‹à¤‚ को रिफà¥à¤°à¥‡à¤¶ करें"],"Write list…":["लिसà¥à¤Ÿ लिखें ..."],"Adds a list of links related to this page.":["इस पृषà¥à¤  से संबंधित लिंक की à¤à¤• सूची जोड़ता है।"],"related posts":["संबंधित पोसà¥à¤Ÿ"],"related pages":["संबंधित पृषà¥à¤ "],"Adds a table of contents to this page.":["इस पृषà¥à¤  पर सामगà¥à¤°à¥€ की à¤à¤• तालिका जोड़ता है।"],"links":["लिंक"],"toc":["toc"],"Copy link":["Salin tautan"],"Copy link to suggested article: %s":["Salin tautan ke artikel yang disarankan: %s"],"Add a title to your post for the best internal linking suggestions.":["सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® आंतरिक लिंकिंग सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठअपनी पोसà¥à¤Ÿ में à¤à¤• शीरà¥à¤·à¤• जोड़ें।"],"Add a metadescription to your post for the best internal linking suggestions.":["सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® आंतरिक लिंकिंग सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठअपनी पोसà¥à¤Ÿ में à¤à¤• metadescription जोड़ें।"],"Add a title and a metadescription to your post for the best internal linking suggestions.":["सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® आंतरिक लिंकिंग सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठअपनी पोसà¥à¤Ÿ में à¤à¤• शीरà¥à¤·à¤• और à¤à¤• metadescription जोड़ें।"],"Also, add a title to your post for the best internal linking suggestions.":["इसके अलावा, सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® आंतरिक लिंकिंग सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठअपनी पोसà¥à¤Ÿ में à¤à¤• शीरà¥à¤·à¤• जोड़ें।"],"Also, add a metadescription to your post for the best internal linking suggestions.":["साथ ही, बेहतरीन आंतरिक लिंकिंग सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठअपनी पोसà¥à¤Ÿ में à¤à¤• metadescription जोड़ें।"],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["इसके अलावा, सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® आंतरिक लिंकिंग सà¥à¤à¤¾à¤µà¥‹à¤‚ के लिठअपनी पोसà¥à¤Ÿ में à¤à¤• शीरà¥à¤·à¤• और à¤à¤• metadescription जोड़ें।"],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["à¤à¤• बार जब आप थोड़ी और कॉपी जोड़ लेते हैं, तो हम आपको यहां संबंधित सामगà¥à¤°à¥€ की à¤à¤• सूची देंगे, जिसे आप अपनी पोसà¥à¤Ÿ में लिंक कर सकते हैं।"],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["अपनी साइट संरचना में सà¥à¤§à¤¾à¤° करने के लिà¤, अपनी वेबसाइट पर अनà¥à¤¯ पà¥à¤°à¤¾à¤¸à¤‚गिक पोसà¥à¤Ÿ या पृषà¥à¤  से लिंक करने पर विचार करें।"],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["आपको संबंधित सामगà¥à¤°à¥€ की à¤à¤• सूची दिखाने में कà¥à¤› सेकंड लगते हैं जिससे आप लिंक कर सकते हैं। जैसे ही हम उनके पास होंगे वैसे ही सà¥à¤à¤¾à¤µ यहाठदिखाठजाà¤à¤à¤—े।"],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["अधिक जानने के लिठ{{a}}à¤à¤¸à¤ˆà¤“ के लिठइंटरनल लिंकिंग पर हमारे गाइड को पढ़ें{{/a}}।"],"Copied!":["Disalin!"],"Not supported!":["Tidak didukung!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["कà¥à¤¯à¤¾ आप कई संबंधित कीफ़à¥à¤°à¥‡à¤œà¤¼ का उपयोग करने का पà¥à¤°à¤¯à¤¾à¤¸ कर रहे हैं? आपको उनà¥à¤¹à¥‡à¤‚ अलग से जोड़ना चाहिà¤à¥¤"],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Frasa kunci Anda terlalu panjang. Maksimal 191 karakter."],"Add as related keyphrase":["संबंधित कीफà¥à¤°à¥‡à¤œà¤¼ के रूप में जोड़ें"],"Added!":["जोड़ा गया!"],"Remove":["हटायें"],"Table of contents":["विषयसूची"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["हमें आपकी साइट के à¤à¤¸à¤ˆà¤“ डेटा को अनà¥à¤•ूलित करने की आवशà¥à¤¯à¤•ता है ताकि हम आपको सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® %1$sलिंकिंग सà¥à¤à¤¾à¤µ%2$s दे सकें। %3$sà¤à¤¸à¤ˆà¤“ डेटा अनà¥à¤•ूलन शà¥à¤°à¥‚ करें%4$s"],"Create a Zap in %s":["%s में à¤à¤• Zap बनाà¤à¤"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hu_HU.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hu_HU.json new file mode 100644 index 00000000..35eaeb2d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-hu_HU.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"hu"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":[],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":[],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":[],"Social preview":[],"Desktop result":[],"Mobile result":[],"Apply %s description":[],"Apply %s title":[],"Next":[],"Previous":[],"Generate 5 more":[],"Google preview":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":[],"%1$sKeyphrase distribution%2$s: Good job!":[],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":[],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":[],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":["séma"],"Meta tags":["meta leírás"],"Not available":["Nem támogatott"],"Checks":["EllenÅ‘rzések"],"Focus Keyphrase":["Kapcsolódó kulcsszó"],"Good":["Jó"],"No index":["Nincs index cím"],"Front-end SEO inspector":["Felhasználói SEO ellenÅ‘rzÅ‘"],"Focus keyphrase not set":["Kapcsolódó kulcsszó nincs beállítva"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Miután közzétetted a listád a %s irányítópulton, ellenÅ‘rizheted hogy az aktív-e, és kapcsolódik-e webhelyéhez."],"Reset API key":["API kulcs törlése"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[],"Your API key":[],"Go to your %s dashboard":[],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[],"Your %s dashboard":[],"Verify connection":[],"Verify your connection":[],"Create a Zap":[],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[],"%s API key":[],"You'll need this API key later on in %s when you're setting up your Zap.":[],"Copy your API key":[],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[],"Manage %s settings":[],"Connect to %s":[],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":[],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":[],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":[],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":[],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":[],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":[],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":[],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":[],"Yoast Table of Contents":[],"Yoast Related Links":[],"Finish optimizing":[],"You've finished adding links to this article.":[],"Optimize":[],"Added to next step":[],"Choose cornerstone articles...":[],"Loading data...":[],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":[],"Skipped":[],"Hidden from search engines.":[],"Removed":[],"Improved":[],"Resolution":[],"Loading redirect options...":[],"Remove and redirect":[],"Custom url:":[],"Related article:":[],"Home page:":[],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":[],"SEO Workout: Remove article":[],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":[],"Hide from search engines":[],"Improve":[],"Are you sure you wish to hide this article from search engines?":[],"Action":[],"You've hidden this article from search engines.":[],"You've removed this article.":[],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":[],"Loading link suggestions...":[],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":[],"Skip":[],"You haven't selected any articles for this step yet. You can do so in the previous step.":[],"Is it up-to-date?":[],"Last Updated":[],"You've moved this article to the next step.":[],"Unknown":[],"Clear summary":[],"Add internal links towards your orphaned articles.":[],"Should you update your article?":[],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":[],"Start: Love it or leave it?":[],"Clean up your unlinked content to make sure people can find it":[],"I've finished this workout":[],"Reset this workout":[],"Well done!":[],"Add internal links towards your cornerstones":[],"Check the number of incoming internal links of your cornerstones":[],"Start: Choose your cornerstones!":[],"The cornerstone approach":[],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":[],"Revise this step":[],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":[],"Incoming links":[],"Edit to add link":[],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":[],"Focus keyphrase":[],"Article":[],"Readability score":[],"SEO score":[],"Copy failed":[],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":[],"Rank with articles you want to rank with":[],"Descriptive text":["Descriptive text"],"Show the descriptive text":["Show the descriptive text"],"Show icon":["Show icon"],"Yoast Estimated Reading Time":["Yoast Estimated Reading Time"],"Shows an estimated reading time based on the content length.":["Shows an estimated reading time based on the content length."],"reading time":["reading time"],"content length":["content length"],"Estimated reading time:":["Estimated reading time:"],"minute":["perc","percek"],"Settings":["Beállítások"],"OK":["OK"],"Close":["Bezár"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["A legelsÅ‘ igazi minden-benne-van SEO megoldás WordPresshez, belértve egyoldalas tartalom analízist, XML sitemap-eket és még sok minden mást is."],"Type":["Típus"],"Team Yoast":["Yoast Team"],"Orphaned content":["Elárvult tartalom"],"Synonyms":["Szinonímák:"],"Internal linking suggestions":["BelsÅ‘ linkelési javaslatok"],"Enter a related keyphrase to calculate the SEO score":[],"Related keyphrase":["Kapcsolódó kulcsszó"],"Add related keyphrase":[],"Analysis results":["Elemzési eredmények"],"Help on choosing the perfect keyphrase":[],"Help on keyphrase synonyms":["Segítség egy kulcskifejezés szinonímához"],"Keyphrase":["Kulcskifejezés"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Új URL: {{link}}%s{{/link}}"],"Undo":["Undo"],"Redirect created":["Ãtirányítás létrehozva"],"%s just created a redirect from the old URL to the new URL.":["%s csak egy átirányítást hozott létre a régi URL-rÅ‘l az új URL-re."],"Old URL: {{link}}%s{{/link}}":["Régi URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Kulcs kifejezés szinoníma"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["seo"],"internal linking":["belsÅ‘ hivatkozások"],"site structure":["webhely szerkezete"],"We could not find any relevant articles on your website that you could link to from your post.":[],"Load suggestions":["Javaslatok betöltése"],"Refresh suggestions":["Javaslatok frissítése"],"Write list…":["Lista írás..."],"Adds a list of links related to this page.":["Az oldalhoz kapcsolódó hivatkozások listájának létrehozása."],"related posts":["kapcsolódó bejegyzések"],"related pages":["kapcsolódó oldalak"],"Adds a table of contents to this page.":["Tartalomjegyzék hozzáadása az oldalhoz"],"links":["hivatkozások"],"toc":[],"Copy link":["Hivatkozás másolása"],"Copy link to suggested article: %s":["Kapcsolódó cikk hivatkozás másolása: %s"],"Add a title to your post for the best internal linking suggestions.":["Adjunk címet a bejegyzésnek a pontosabb belsÅ‘ hivatkozási javaslatokhoz."],"Add a metadescription to your post for the best internal linking suggestions.":["Adjunk meta leírást a bejegyzésnek a pontosabb belsÅ‘ hivatkozási javaslatokhoz."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Adjunk címet és meta leírást a bejegyzésnek a pontosabb belsÅ‘ hivatkozási javaslatokhoz."],"Also, add a title to your post for the best internal linking suggestions.":["Továbbá, adjunk címet a bejegyzésnek a pontosabb belsÅ‘ hivatkozási javaslatokhoz."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Továbbá, adjunk meta leírást a bejegyzésnek a pontosabb belsÅ‘ hivatkozási javaslatokhoz."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Továbbá, adjunk címet és meta leírást a bejegyzésnek a pontosabb belsÅ‘ hivatkozási javaslatokhoz."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Ha még többet adunk hozzá, akkor a kapcsolódó tartalmakról kapunk egy listát, amit felhasználhatunk a bejegyzésben."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":[],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":[],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["További információkért {{a}}Olvassuk el a belsÅ‘ hivatkozási útmutatót{{/a}}."],"Copied!":["Másolva!"],"Not supported!":["Nem támogatott"],"Are you trying to use multiple related keyphrases? You should add them separately.":[],"Your keyphrase is too long. It can be a maximum of 191 characters.":[],"Add as related keyphrase":[],"Added!":[],"Remove":[],"Table of contents":["Tartalomjegyzék"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":[],"Create a Zap in %s":["Zap létrehozása %s -ben"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-id_ID.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-id_ID.json new file mode 100644 index 00000000..91cb0596 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-id_ID.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n > 1;","lang":"id"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Permintaan menghasilkan eror sebagai berikut: \"%s\""],"X share preview":["Pratinjau berbagi di X"],"AI X title generator":["AI pembuat judul X"],"AI X description generator":["AI pembuat deskripsi X"],"X preview":["Pratinjau X"],"Please enter a valid focus keyphrase.":["Mohon masukkan frasa kunci utama yang valid."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Untuk menggunakan fitur ini, situs Anda harus dapat diakses publik. Hal ini berlaku untuk situs pengujian dan instance di mana REST API Anda dilindungi kata sandi. Mohon pastikan situs Anda dapat diakses oleh publik dan coba lagi. Jika masalah terus berlanjut, mohon %1$shubungi tim layanan bantuan kami%2$s."],"Yoast AI cannot reach your site":["Yoast AI tidak dapat menjangkau situs Anda"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Untuk mengakses fitur ini, Anda memerlukan langganan %2$s dan %3$s yang aktif. Mohon %5$saktifkan langganan Anda di %1$s%6$s atau %7$sdapatkan langganan baru %4$s%8$s. Setelah itu, mohon segarkan halaman ini agar fitur berfungsi dengan benar, yang mana akan memerlukan waktu hingga 30 detik."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["AI pembuat judul memerlukan analisis SEO yang diaktifkan sebelumnya. Untuk mengaktifkannya, buka %2$sFitur Situs dari %1$s%3$s, aktifkan analisis SEO, dan klik 'Simpan perubahan'. Jika analisis SEO dinonaktifkan di profil pengguna WordPress Anda, akses profil Anda dan aktifkan di sini. Mohon hubungi administrator Anda, jika Anda tidak punya akses ke pengaturan ini."],"Social share preview":["Pratinjau di media sosial"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Untuk melanjutkan menggunakan fitur Yoast AI, harap kurangi frekuensi permintaan Anda. %1$sArtikel bantuan%2$s kami menyediakan panduan tentang merencanakan dan mempertahankan alur kerja yang optimal secara efektif."],"You've reached the Yoast AI rate limit.":["Anda telah melewati batas rasio Yoast AI."],"Allow":["Izinkan"],"Deny":["Abaikan"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Untuk melihat video ini, Anda harus mengizinkan %1$s untuk memuat sematan video dari %2$s."],"Text generated by AI may be offensive or inaccurate.":["Teks yang dihasilkan oleh AI mungkin menyinggung atau tidak akurat."],"(Opens in a new browser tab)":["(Buka di tab peramban baru)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Tingkatkan kecepatan alur kerja Anda dengan AI generatif. Dapatkan judul berkualitas tinggi dan saran deskripsi untuk pencarian dan tampilan di media sosial Anda. %1$sPelajari lebih lanjut%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Buat judul & deskripsi dengan Yoast AI"],"New to %1$s":["Baru di %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Saya menyetujui %1$sKetentuan Layanan%2$s & %3$sKebijakan Privasi%4$s layanan Yoast AI. Hal ini termasuk menyetujui pengumpulan dan penggunaan data untuk meningkatkan pengalaman pengguna."],"Start generating":["Mulai membuat"],"Yes, revoke consent":["Ya, cabut persetujuan"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Dengan mencabut persetujuan Anda, Anda tidak lagi memiliki akses ke fitur Yoast AI. Apakah Anda yakin ingin mencabut persetujuan Anda?"],"Something went wrong, please try again later.":["Terjadi kendala, mohon coba lagi."],"Revoke AI consent":["Cabut persetujuan AI"],"AI title generator":["Pembuat judul AI"],"AI description generator":["AI pembuat deskripsi"],"AI social title generator":["Pembuat judul media sosial AI"],"AI social description generator":["AI pembuat deskripsi media sosial"],"Dismiss":["Tutup"],"Don’t show again":["Jangan tampilkan lagi"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: Tingkatkan akurasi judul AI yang Anda buat dengan menulis lebih banyak konten di halaman Anda."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: Tingkatkan akurasi deskripsi AI yang Anda buat dengan menulis lebih banyak konten di halaman Anda."],"Try again":["Coba lagi"],"Social preview":["Pratinjau sosial"],"Desktop result":["Hasil desktop"],"Mobile result":["Hasil seluler"],"Apply %s description":[],"Apply %s title":[],"Next":["Selanjutnya"],"Previous":["Sebelumnya"],"Generate 5 more":["Buat 5 lagi"],"Google preview":["Pratinjau Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Karena pedoman etika OpenAI yang ketat dan %1$skebijakan penggunaan%2$s, kami tidak dapat membuat judul SEO untuk halaman Anda. Jika Anda berniat menggunakan AI, harap hindari penggunaan konten eksplisit, kekerasan, atau seksual eksplisit. %3$sBaca selengkapnya tentang cara mengonfigurasi halaman Anda untuk memastikan Anda mendapatkan hasil terbaik dengan AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Karena pedoman etika OpenAI yang ketat dan %1$skebijakan penggunaan%2$s, kami tidak dapat membuat deskripsi meta untuk halaman Anda. Jika Anda berniat menggunakan AI, harap hindari penggunaan konten eksplisit, kekerasan, atau seksual eksplisit. %3$sBaca selengkapnya tentang cara mengonfigurasi halaman Anda untuk memastikan Anda mendapatkan hasil terbaik dengan AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Untuk mengakses fitur ini, Anda memerlukan langganan %1$s yang aktif. Mohon %3$saktifkan langganan Anda di %2$s%4$s atau %5$sdapatkan %1$s langganan baru%6$s. Setelah itu, klik tombol untuk menyegarkan halaman ini agar fitur berfungsi dengan benar, yang mana mungkin memerlukan waktu hingga 30 detik."],"Refresh page":["Segarkan halaman"],"Not enough content":["Konten tidak cukup"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Mohon coba lagi nanti. Jika kendala masih terjadi, mohon %1$shubungi tim bantuan kami%2$s!"],"Something went wrong":["Terjadi kendala"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Tampaknya telah terjadi timeout koneksi. Mohon periksa koneksi internet Anda dan coba lagi nanti. Jika masalah terus berlanjut, harap %1$shubungi tim bantuan kami%2$s"],"Connection timeout":["Koneksi timeout"],"Use AI":["Gunakan AI"],"Close modal":["Tutup modal"],"Learn more about AI (Opens in a new browser tab)":["Pelajari lebih lanjut tentang AI (Buka di tab browser baru)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sJudul%3$s: Artikel Anda belum memiliki judul. %2$sTambahkan judul%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sJudul%2$s: Artikel Anda memiliki judul. Bagus!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sSebaran frasa kunci%3$s: %2$sMasukkan frasa kunci atau sinonimnya ke dalam teks, sehingga kami dapat memeriksa sebaran frasa kunci%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sSebaran frasa kunci%2$s: Bagus!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sSebaran frasa kunci%3$s: Tidak merata. Beberapa bagian dari artikel Anda tidak berisi frasa kunci maupun sinonimnya. %2$sLetakkan frasa kunci secara lebih merata%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sSebaran frasa kunci%3$s: Sangat tidak merata. Sebagian besar artikel Anda tidak mengandung frasa kunci maupun sinonimnya. %2$sLetakkan frasa kunci secara lebih merata%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Anda tidak menggunakan terlalu banyak kata kompleks, yang membuat teks Anda mudah dibaca. Kerja yang bagus!"],"Word complexity":["Kompleksitas kata"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s kata dalam teks Anda tergolong kompleks. %3$sCoba gunakan kata-kata yang lebih pendek dan lebih familiar untuk meningkatkan keterbacaan%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sPerataan%3$s: Ada bagian teks yang panjang dengan format rata tengah. %2$sKami sarankan untuk mengubahnya ke rata kiri%3$s.","%1$sPerataan%3$s: Ada %4$s bagian teks yang panjang dengan format rata tengah. %2$sKami sarankan untuk mengubahnya ke rata kiri%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sPerataan%3$s: Ada bagian teks yang panjang dengan format rata tengah. %2$sKami sarankan untuk mengubahnya ke rata kanan%3$s.","%1$sPerataan%3$s: Ada %4$s bagian teks yang panjang dengan format rata tengah. %2$sKami sarankan untuk mengubahnya ke rata kanan%3$s."],"Select image":["Pilih gambar"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Anda mungkin tidak mengetahuinya, namun mungkin ada halaman di situs Anda yang tidak mendapatkan tautan apa pun. Itu masalah SEO, karena sulit bagi mesin pencari menemukan halaman yang tidak mendapatkan link apa pun. Jadi, lebih sulit bagi mesin pencari untuk menentukan peringkat. Kami menyebut halaman-halaman ini sebagai orphaned content. Dalam latihan ini, kami menemukan orphaned content di situs Anda dan memandu Anda dengan cepat menambahkan tautan ke situs tersebut, sehingga dapat memperoleh peluang untuk menentukan peringkat!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Saatnya menambahkan beberapa tautan! Di bawah ini, Anda melihat daftar artikel yang terabaikan Anda. Di bawah masing-masing halaman, terdapat saran untuk halaman terkait yang dapat Anda tambahkan tautannya. Saat menambahkan tautan, pastikan untuk memasukkannya ke dalam kalimat relevan yang terkait dengan artikel yang terabaikan Anda. Terus tambahkan tautan ke setiap artikel yang terabaikan tersebut sampai Anda puas dengan jumlah tautan yang mengarah ke artikel tersebut."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Ayo tambahkan tautan! Berikut daftar landasan Anda. Pada masing-masing landasan, terdapat saran tautan artikel yang dapat Anda pilih. Saat menambahkan tautan, harap tambahkan dalam kalimat yang relevan dengan artikel landasan Anda. Tambahkan terus tautan dari artikel terkait sebanyak yang Anda inginkan, hingga landasan Anda memiliki tautan internal paling banyak yang mengarah ke sana."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Beberapa artikel di situs Anda %1$ssangat%2$s penting. Artikel tersebut memberi solusi dan memecahkan kendala banyak orang. Jadi, artikel tersebut pantas mendapat ranking! Di %3$s, kami menyebutnya sebagai artikel landasan. Salah satu cara untuk menaikkan ranking adalah dengan mengarahkan tautan yang cukup padanya. Lebih banyak tautan memberi sinyal pada mesin pencari bahwa artikel tersebut penting dan bermakna. Pada latihan ini, kami akan membantu Anda menambahkan tautan ke artikel landasan Anda!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Setelah menambahkan lebih banyak kata, kami akan dapat memberi tahu Anda tingkat formalitas teks Anda."],"Overall, your text appears to be %1$s%3$s%2$s.":["Secara umum, teks Anda terlihat %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Integrasi Zapier akan dihapus dari %1$s pada 20.7 (tanggal rilis 9 Mei). Jika Anda punya pertanyaan, mohon hubungi %2$s."],"Maximum heading level":["Level judul maksimum"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Anda telah menonaktifkan Saran Tautan, yang diperlukan untuk Tautan Berhubungan dapat berfungsi. Jika Anda ingin menambahkan Tautan Berhubungan, mohon menuju Fitur situs dan aktifkan Saran Tautan."],"Schema":["Skema"],"Meta tags":["Tag meta"],"Not available":["Tidak tersedia"],"Checks":["Periksa"],"Focus Keyphrase":["Frasa kunci utama"],"Good":["Bagus"],"No index":["No index"],"Front-end SEO inspector":["Inspector Front-end SEO"],"Focus keyphrase not set":["Frasa kunci utama tidak diatur"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Setelah Anda memublikasikan Zap di dasbor %s, Anda dapat memeriksa apakah Zap aktif dan terhubung ke situs Anda."],"Reset API key":["Reset API key"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Saat ini Anda terhubung ke %s menggunakan API key berikut. Jika Anda ingin terhubung kembali dengan API key lainnya, Anda dapat mengatur ulang key Anda di bawah."],"Your API key":["API key Anda"],"Go to your %s dashboard":["Buka dasbor %s Anda"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Anda berhasil terhubung ke %1$s! Untuk mengelola Zap Anda, kunjungi dasbor %2$s Anda."],"Your %s dashboard":["Dasbor %s Anda"],"Verify connection":["Verifikasi koneksi"],"Verify your connection":["Verifikasi koneksi Anda"],"Create a Zap":["Buat Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Login ke akun %1$s Anda dan mulai buat Zap pertama Anda! Perhatikan bahwa Anda hanya dapat membuat 1 Zap dengan trigger event dari %2$s. Dalam Zap berikut Anda dapat memilih satu atau lebih tindakan."],"%s API key":["API key %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Anda akan memerlukan API key ini nanti di %s saat menyiapkan Zap."],"Copy your API key":["Salin API key Anda"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Untuk menyiapkan koneksi, pastikan Anda menyalin API key yang diberikan di bawah ini dan menggunakannya untuk membuat dan mengaktifkan Zap dalam akun %s Anda."],"Manage %s settings":["Kelola pengaturan %s"],"Connect to %s":["Sambungkan ke %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Harap diperhatikan: Agar latihan berikut berfungsi dengan baik, Anda perlu menjalankan alat pengoptimalan data SEO. Admin dapat menjalankannya dari menu %1$sSEO > Alat%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Anda telah menambahkan tautan ke artikel terbengkalai Anda, dan Anda telah membersihkan yang tidak lagi relevan. Kerja bagus! Lihatlah ringkasan berikut dan rayakan apa yang telah Anda capai!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Periksa secara kritis konten dalam daftar ini dan buat pembaruan yang diperlukan. Jika Anda memerlukan bantuan untuk memperbarui, kami memiliki %1$sartikel blog yang sangat berguna yang dapat memandu Anda sepenuhnya%2$s (klik untuk membuka di tab baru)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sPerlu panduan lebih lanjut? Kami telah membahas setiap langkah secara lebih mendetail dalam panduan berikut: %2$sCara menggunakan %7$s latihan konten yang terbengkalai%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Anda baru saja membuat konten terbaik Anda yang mudah ditemukan, dan kemungkinan besar akan mendapat peringkat! Bagus! Ingatlah selalu untuk memeriksa apakah landasan Anda memiliki tautan yang cukup!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Lihatlah daftar berikut. Apakah landasan Anda (ditandai dengan %1$s) memiliki tautan internal paling banyak yang mengarah ke sana? Klik tombol Optimalkan jika menurut Anda landasan membutuhkan lebih banyak tautan. Proses tersebut akan memindahkan artikel ke langkah berikutnya."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Apakah semua landasan Anda mendapatkan bulatan hijau? Untuk hasil terbaik, edit mana yang tidak ada bulatan hijau!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Artikel mana yang ingin Anda targetkan mendapatkan peringkatkan tertinggi? Mana yang menurut audiens Anda paling berguna dan lengkap? Klik panah yang mengarah ke bawah dan cari artikel yang sesuai dengan kriteria tersebut. Kami akan secara otomatis menandai artikel yang Anda pilih sebagai landasan."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sPerlu panduan lebih lanjut? Kami telah membahas setiap langkah secara lebih mendetail di: %2$sCara menggunakan latihan dasar %7$s%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast Table of Contents"],"Yoast Related Links":["Tautan Terkait Yoast"],"Finish optimizing":["Selesaikan pengoptimalan"],"You've finished adding links to this article.":["Anda telah selesai menambahkan tautan ke artikel berikut."],"Optimize":["Optimalkan"],"Added to next step":["Ditambahkan ke langkah selanjutnya"],"Choose cornerstone articles...":["Pilih artikel landasan..."],"Loading data...":["Memuat data..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Anda belum membersihkan atau memperbarui artikel menggunakan latihan ini. Setelah Anda melakukannya, rangkuman kerja Anda akan tampil di sini."],"Skipped":["Dilewati"],"Hidden from search engines.":["Disembunyikan dari mesin pencari."],"Removed":["Dihapus"],"Improved":["Ditingkatkan"],"Resolution":["Resolusi"],"Loading redirect options...":["Memuat pilihan pengalihan..."],"Remove and redirect":["Hapus dan alihkan"],"Custom url:":["Url khusus:"],"Related article:":["Artikel terkait:"],"Home page:":["Halaman beranda:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Anda akan menghapus %1$s%2$s%3$s. Untuk mencegah 404 di situs Anda, Anda harus mengalihkannya ke halaman lain di situs Anda. Ke mana Anda akan mengalihkannya?"],"SEO Workout: Remove article":["Latihan SEO: Hapus artikel"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Semuanya tampak bagus! Kami belum menemukan artikel apa pun di situs Anda lebih lama dari 6 bulan dan kami menemukan situs Anda terdapat terlalu sedikit tautan. Cek lagi nanti untuk saran pembersihan baru!"],"Hide from search engines":["Sembunyikan dari mesin pencari"],"Improve":["Tingkatkan"],"Are you sure you wish to hide this article from search engines?":["Apakah Anda yakin ingin menyembunyikan artikel dari mesin pencari?"],"Action":["Aksi"],"You've hidden this article from search engines.":["Anda telah menyembunyikan artikel ini dari mesin pencari."],"You've removed this article.":["Anda telah menghapus artikel ini."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Anda belum memilih artikel untuk ditingkatkan. Pilih beberapa artikel pada langkah sebelumnya untuk menambahkan tautan dan kami akan menampilkan saran tautan untuk Anda di sini."],"Loading link suggestions...":["Memuat saran tautan..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Kami tidak menemukan saran apa pun untuk artikel ini, namun tentu Anda tetap dapat menambahkan tautan ke artikel yang menurut Anda cocok."],"Skip":["Lewati"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Anda belum memilih artikel mana pun di langkah ini. Anda dapat melakukannya di langkah sebelumnya."],"Is it up-to-date?":["Apakah ini terbaru?"],"Last Updated":["Pembaruan Terakhir"],"You've moved this article to the next step.":["Anda telah memindahkan artikel ini ke langkah selanjutnya."],"Unknown":["Tak dikenal"],"Clear summary":["Hapus ringkasan"],"Add internal links towards your orphaned articles.":["Tambahkan tautan internal ke artikel yang terbengkalai Anda."],"Should you update your article?":["Apakah Anda harus memperbarui artikel Anda?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Situs Anda banyak mengandung konten yang sekali dibuat tidak pernah dilihat kembali setelahnya. Sangat penting untuk mengeceknya dan tanyakan ke diri Anda apakah konten tersebut masih relevan untuk situs Anda. Haruskah Anda meningkatkannya atau menghapusnya?"],"Start: Love it or leave it?":["Mulai: Suka atau tinggalkan?"],"Clean up your unlinked content to make sure people can find it":["Bersihkan konten Anda yang tidak ditautkan supaya dapat ditemukan pengunjung"],"I've finished this workout":["Saya telah menyelesaikan latihan ini"],"Reset this workout":["Reset latihan ini"],"Well done!":["Bagus sekali!"],"Add internal links towards your cornerstones":["Tambahkan tautan internal menuju landasan Anda"],"Check the number of incoming internal links of your cornerstones":["Periksa jumlah tautan internal yang masuk dari landasan Anda"],"Start: Choose your cornerstones!":["Mulai: Pilih landasan Anda!"],"The cornerstone approach":["Pendekatan landasan"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Mohon diperhatikan: Agar latihan ini berfungsi dengan baik dan menawarkan saran penautan, Anda perlu menjalankan alat pengoptimalan data SEO. Admin dapat menjalankan ini di bawah %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Harap diperhatikan: Admin Anda telah menonaktifkan fungsi landasan di pengaturan SEO. Jika Anda ingin menggunakan latihan ini, ini harus diaktifkan."],"I've finished this step":["Saya telah menyelesaikan tahap ini"],"Revise this step":["Perbaiki tahap ini"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Kami tidak dapat menemukan tautan internal di halaman Anda. Mungkin Anda belum menambahkan tautan internal apa pun ke konten Anda, atau Yoast SEO tidak mengindeksnya. Anda dapat meminta Yoast SEO mengindeks tautan Anda dengan menjalankan pengoptimalan data SEO di menu SEO > Peralatan."],"Incoming links":["Tautan masuk"],"Edit to add link":["Edit untuk menambahkan tautan"],"%s incoming link":["%s tautan masuk","%s tautan masuk"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Saat ini Anda tidak memiliki artikel yang ditandai sebagai landasan. Ketika Anda menandai artikel Anda sebagai landasan, mereka akan muncul di sini."],"Focus keyphrase":["Frasa kunci utama"],"Article":["Artikel"],"Readability score":["Skor keterbacaan"],"SEO score":["Skor SEO"],"Copy failed":["Gagal menyalin"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Tingkatkan peringkat untuk semua landasan Anda dengan menggunakan %1$slangkah-demi-langkah latihan!%2$s"],"Rank with articles you want to rank with":["Peringkatkan dengan artikel yang Anda inginkan"],"Descriptive text":["Teks deskriptif"],"Show the descriptive text":["Tampilkan teks deskriptif"],"Show icon":["Tampilkan ikon"],"Yoast Estimated Reading Time":["Estimasi Waktu Baca Yoast"],"Shows an estimated reading time based on the content length.":["Tampilkan estimasi waktu baca berdasarkan panjang konten."],"reading time":["waktu baca"],"content length":["panjang konten"],"Estimated reading time:":["Estimasi waktu baca:"],"minute":["menit","menit"],"Settings":["Pengaturan"],"OK":["OK"],"Close":["Tutup"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Plugin pertama yang benar-benar memberikan semua solusi SEO untuk WordPress, termasuk analisis konten pada halaman, Peta Situs XML, dan masih banyak lagi."],"Type":["Tipe"],"Team Yoast":["Tim Yoast"],"Orphaned content":["Orphaned content"],"Synonyms":["Sinonim"],"Internal linking suggestions":["Saran penautan internal"],"Enter a related keyphrase to calculate the SEO score":["Masukkan frasa kunci terkait untuk menampilkan skor SEO"],"Related keyphrase":["Frasa kunci terkait"],"Add related keyphrase":["Tambahkan frasa kunci terkait"],"Analysis results":["Hasil analisis"],"Help on choosing the perfect keyphrase":["Bantuan memilih frasa kunci yang tepat"],"Help on keyphrase synonyms":["Bantuan memilih sinonim untuk frasa kunci"],"Keyphrase":["Frasa-kunci"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["URL baru: {{link}}%s{{/link}}"],"Undo":["Batalkan"],"Redirect created":["Pengalihan telah dibuat"],"%s just created a redirect from the old URL to the new URL.":["%s baru saja membuat pengalihan dari URL lama ke URL baru."],"Old URL: {{link}}%s{{/link}}":["URL lama: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinonim frasa kunci"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Terjadi eror: analisis SEO Premium tidak berfungsi seperti yang diharapkan. Mohon {{activateLink}}aktifkan langganan Anda di MyYoast{{/activateLink}} lalu {{reloadButton}}muat ulang halaman ini{{/reloadButton}} agar berfungsi dengan baik."],"seo":["seo"],"internal linking":["Tautan internal"],"site structure":["struktur situs"],"We could not find any relevant articles on your website that you could link to from your post.":["Kami tidak dapat menemukan artikel yang relevan pada situs web Anda yang bisa dijadikan tautan dari artikel ini."],"Load suggestions":["Menambahkan daftar link yang terkait dengan halaman ini."],"Refresh suggestions":["Refresh saran"],"Write list…":["Tulis daftar..."],"Adds a list of links related to this page.":["Tambahkan daftar tautan terkait ke halaman ini."],"related posts":["artikel terkait"],"related pages":["halaman terkait"],"Adds a table of contents to this page.":["Tambahkan tabel daftar isi pada halaman ini."],"links":["tautan"],"toc":["toc"],"Copy link":["Salin tautan"],"Copy link to suggested article: %s":["Salin tautan ke artikel yang disarankan: %s"],"Add a title to your post for the best internal linking suggestions.":["Tambahkan judul ke pos untuk saran internal linking terbaik."],"Add a metadescription to your post for the best internal linking suggestions.":["Tambahkan metadescription ke pos Anda untuk saran internal linking terbaik."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Tambahkan judul dan metadescription ke pos Anda untuk saran internal linking terbaik."],"Also, add a title to your post for the best internal linking suggestions.":["Serta, tambahkan judul ke pos Anda untuk saran internal linking terbaik."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Serta, tambahkan metadescription ke pos Anda untuk saran internal linking terbaik Anda."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Serta, tambahkan judul dan metadescription ke pos Anda untuk saran internal linking terbaik."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Ketika Anda menambahkan sejumlah tulisan, kami akan menyajikan daftar konten terkait di sini yang dapat Anda tautkan dalam pos Anda."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Untuk meningkatkan struktur situs, tentukan penautan ke pos atau halaman lain yang relevan pada situs web Anda."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Dibutuhkan beberapa detik untuk menampilkan daftar konten terkait yang mana dapat Anda kaitkan. Saran akan ditampilkan di sini segera setelah ditemukan."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Baca panduan internal linking kami untuk SEO{{/a}} untuk mempelajari selengkapnya."],"Copied!":["Disalin!"],"Not supported!":["Tidak didukung!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Apakah Anda mencoba menggunakan banyak frasa kunci terkait? Anda harus menambahkannya secara terpisah."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Frasa kunci Anda terlalu panjang. Maksimal 191 karakter."],"Add as related keyphrase":["Tambahkan sebagai frasa kunci terkait"],"Added!":["Ditambahkan!"],"Remove":["Hapus"],"Table of contents":["Daftar isi"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Kami perlu mengoptimalkan data SEO Anda supaya kami dapat menawarkan %1$slinking suggestions%2$s. %3$sMulai optimasi Data SEO%4$s"],"Create a Zap in %s":["Buat Zap dalam %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-it_IT.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-it_IT.json new file mode 100644 index 00000000..d3d55669 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-it_IT.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"it"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["La richiesta è tornata indietro con questo errore: \"%s\""],"X share preview":["Anteprima della condivisione su X"],"AI X title generator":["Generatore IA del titolo"],"AI X description generator":["Generatore IA di descrizioni per X"],"X preview":["Anteprima di X"],"Please enter a valid focus keyphrase.":["Inserisci una frase chiave valida."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Per usare questa funzionalità, il sito deve essere accessibile pubblicamente. Questo vale sia per i siti di prova sia per le istanze in cui l'API REST è protetta da password. Assicurati che il sito sia accessibile al pubblico e riprova. Se il problema persiste, %1$scontatta il nostro team di assistenza %2$s."],"Yoast AI cannot reach your site":["L'IA di Yoast non riesce a raggiungere il tuo sito"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Per accedere a questa funzionalità devi attivare gli abbonamenti a %2$s e a %3$s. %5$sAttiva il tuo abbonamento in %1$s%6$s o %7$scomprane un nuovo %4$s%8$s. Dopo, aggiorna la pagina affinché la funzionalità funzioni correttamente. Questo può richiedere fino a 30 secondi."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Prima di potere usare il generatore di titoli con l'IA devi attivare l'analisi SEO. Per attivarla, vai all sezione %2$sCaratteristiche del sito di %1$s%3$s, attiva l'analisi SEO e fai clic su 'Salva le modifiche'. Verifica anche se l'analisi SEO è disattivata nel tuo profilo sul sito. Se non lo è, attivala e salva. Se non hai accesso a queste impostazioni, contatta il tuo amministratore."],"Social share preview":["Anteprima di condivisione sui social"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Per continuare a usare la funzione IA di Yoast, riduci la frequenza delle richieste. Il %1$snostro articolo di supporto%2$s fornisce indicazioni su come pianificare e cadenzare efficacemente le richieste per ottimizzare il flusso di lavoro."],"You've reached the Yoast AI rate limit.":["Hai raggiunto il limite di richieste di Yoast IA."],"Allow":["Permetti"],"Deny":["Rifiuta"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Per vedere questo video, devi permettere a %1$s di caricare video incorporati da %2$s."],"Text generated by AI may be offensive or inaccurate.":["Il testo generato dall'intelligenza artificiale (IA) può essere offensivo o impreciso."],"(Opens in a new browser tab)":["(Si apre in una nuova scheda del browser)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Velocizza il flusso di lavoro con l'intelligenza artificiale generativa. Ottieni suggerimenti per titoli e descrizioni di alta qualità per le tue ricerche e per il modo in cui appari sui social. %1$sMaggiori informazioni%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Genera titoli e descrizioni con l'IA di Yoast!"],"New to %1$s":["Nuovo in %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Approvo i %1$sTermini di servizio%2$s e la %3$sPrivacy Policy%4$s del servizio Yoast IA. Questo include il consenso alla raccolta e all'utilizzo dei dati per migliorare l'esperienza utente."],"Start generating":["Inizia con la generazione"],"Yes, revoke consent":["Sì, revoca il consenso"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Se revochi il consenso non avrai più accesso alle funzioni di Yoast IA. Confermi di voler revocare il tuo consenso?"],"Something went wrong, please try again later.":["Qualcosa è andato storto, riprova più tardi."],"Revoke AI consent":["Revoca il consenso all'IA"],"AI title generator":["Generatore IA di titoli"],"AI description generator":["Generatore IA di descrizioni"],"AI social title generator":["Generatore IA di titoli per i social"],"AI social description generator":["Generatore IA di meta descrizioni per i social"],"Dismiss":["Ignora"],"Don’t show again":["Non mostrare di nuovo"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sSuggerimento%2$s: Migliora l'accuratezza dei titoli IA scrivendo più contenuti nella tua pagina."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sSuggerimento%2$s: Migliora l'accuratezza delle descrizioni IA scrivendo più contenuti nella tua pagina."],"Try again":["Riprova"],"Social preview":["Anteprima social"],"Desktop result":["Risultato per il desktop"],"Mobile result":["Risultato per i dispositivi mobili"],"Apply %s description":[],"Apply %s title":[],"Next":["Successivo"],"Previous":["Precedente"],"Generate 5 more":["Generane altre 5"],"Google preview":["Anteprima di Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["A causa delle rigide linee guida etiche di OpenAI e delle %1$spolitiche di utilizzo%2$s, non possiamo generare titoli SEO per la tua pagina. Se vuoi usare l'intelligenza artificiale, evita i contenuti violenti o sessualmente espliciti. %3$sLeggi qui per saperne di più su come configurare la tua pagina e ottenere i migliori risultati con l'intelligenza artificiale%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["A causa delle rigide linee guida etiche di OpenAI e delle %1$spolitiche di utilizzo%2$s, non possiamo generare descrizioni SEO per la tua pagina. Se vuoi usare l'intelligenza artificiale, evita i contenuti violenti o sessualmente espliciti. %3$sLeggi qui per saperne di più su come configurare la tua pagina e ottenere i migliori risultati con l'intelligenza artificiale%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Per accedere a questa funzione, è necessario un abbonamento %1$s attivo. %3$sAttiva il tuo abbonamento in %2$s%4$s o %5$ssottoscrivi un nuovo abbonamento a %1$s%6$s. Dopo, fai clic sul pulsante per aggiornare la pagina affinché questa caratteristica funzioni correttamente, il che potrebbe richiedere fino a 30 secondi."],"Refresh page":["Aggiorna la pagina"],"Not enough content":["Non c'è abbastanza contenuto"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Riprova più tardi. Se il problema persiste, %1$scontatta il nostro team di supporto%2$s!"],"Something went wrong":["Qualcosa è andato storto"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Sembra che si sia verificato un timeout della connessione. Controlla la connessione a Internet e riprova più tardi. Se il problema persiste, %1$scontratta il nostro team di supporto%2$s."],"Connection timeout":["Timeout della connessione"],"Use AI":["Usa la IA"],"Close modal":["Chiudi modal"],"Learn more about AI (Opens in a new browser tab)":["Per saperne di più sull'IA (apre una nuova scheda del browser)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitolo%3$s: La tua pagina non ha ancora un titolo. %2$sAggiungine uno%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitolo%2$s: La tua pagina ha un titolo, ottimo lavoro!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribuzione della frase chiave%3$s: %2$sincludi la parola chiave o i suoi sinonimi nel testo così è possibile calcolarne la distribuzione%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribuzione della frase chiave%2$s: ottimo lavoro!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribuzione della frase chiave%3$s: irregolare. Alcune parti del tuo testo non contengono la frase chiave o i suoi sinonimi. %2$sTi suggeriamo di distribuirli in modo più regolare%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribuzione della frase chiave%3$s: molto irregolare. Molte parti del tuo testo non contengono la frase chiave o i suoi sinonimi. %2$sTi suggeriamo di distribuirli in modo più regolare%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: non stai usando troppe parole complesse, il che rende il testo facile da leggere. Ottimo lavoro!"],"Word complexity":["Complessità della parola"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s delle parole del testo sono considerate complesse. %3$sProva a usare parole più brevi e familiari per migliorare la leggibilità%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAllineamento%3$s: C'è una lunga sezione di testo allineata al centro. %2$sTi raccomandiamo di allinearla a sinistra%3$s.","%1$sAllineamento%3$s: Ci sono %4$s lunghe sezioni di testo allineate al centro. %2$sTi raccomandiamo di allinearle a sinistra%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAllineamento%3$s: C'è una lunga sezione di testo allineata al centro. %2$sTi raccomandiamo di allinearla a destra.%3$s","%1$sAllineamento%3$s: Ci sono %4$s lunghe sezioni di testo allineate al centro. %2$sTi raccomandiamo di allinearle a destra.%3$s"],"Select image":["Seleziona un'immagine"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Forse non lo sai, ma sul tuo sito potrebbero esserci pagine che non ricevono nemmeno un link. Questo è un problema per la SEO, perché è difficile per i motori di ricerca trovare le pagine che non ricevono link. Di conseguenza, queste pagine avranno più difficoltà a posizionarsi. Sono pagine che vengono chiamate contenuti orfani. In questo workout, troviamo i contenuti orfani sul tuo sito e ti aiutiamo ad aggiungere loro i link, così avranno più probabilità di posizionarsi!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["È ora di aggiungere alcuni link! Di seguito riportiamo un elenco di articoli orfani. Sotto ognuno di essi, trovi suggerimenti per le pagine correlate da cui puoi aggiungere un link. Quando aggiungi il link, assicurati di inserirlo in una frase pertinente all'articolo orfano. Continua ad aggiungere link a ciascuno degli articoli orfani fino a quando la quantità di link che puntano a essi non ti soddisfa."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["È ora di aggiungere alcuni link! Qui di seguito trovi un elenco con i tuoi contenuti centrali (cornerstone). Sotto ognuno di loro, ci sono dei suggerimenti di articoli da cui potresti aggiungere un link. Quando aggiungi il link, inseriscilo in una frase che sia pertinente all'articolo di riferimento. Continua ad aggiungere link da tutti gli articoli correlati di cui hai bisogno, fino a che i tuoi contenuti centrali (cornerstone) non avranno il maggior numero di link interni che puntano verso di loro."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Alcuni articoli del tuo sito sono %1$spiù importanti di altri%2$s: rispondono alle domande delle persone e risolvono i loro problemi. Per questo meritano di posizionarsi nella SERP! Noi di %3$s li chiamiamo articoli cornerstone o articoli centrali. Uno dei modi per farli posizionare bene è quello di puntare su di essi un numero sufficiente di link. La presenza di più link segnala ai motori di ricerca che quegli articoli sono importanti e di valore. In questo workout ti aiutiamo ad aggiungere link ai tuoi articoli centrali!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Una volta che aggiungerai un po' di testo potremo dirti qualcosa sul livello di formalità del tuo testo."],"Overall, your text appears to be %1$s%3$s%2$s.":["Nel complesso, il tuo testo sembra essere %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["L'integrazione Zapier verrà eliminata da %1$s dalla versione 20.7 (data di rilascio 9 maggio). Per qualsiasi domanda, contattaci tramite il %2$s."],"Maximum heading level":["Livello massimo di intestazione"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Hai disattivato i suggerimenti di link, che sono necessari per il funzionamento dei link correlati. Se vuoi aggiungere i link correlati, vai su Funzionalità del sito e attiva la funzione Link suggeriti."],"Schema":["Schema"],"Meta tags":["Meta tag"],"Not available":["Non disponibile"],"Checks":["Controlli"],"Focus Keyphrase":["Frase chiave"],"Good":["Buona"],"No index":["Noindex"],"Front-end SEO inspector":["Tool di ispezione SEO nel front-end"],"Focus keyphrase not set":["La frase chiave non è stata impostata"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Una volta pubblicato lo Zap nella tua bacheca di %s, puoi verificare se è attivo e collegato al tuo sito."],"Reset API key":["Reimposta la chiave API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Al momento la tua connessione a %s usa la seguente chiave API. Se desideri riconnetterti con una chiave API diversa, puoi reimpostare la chiave qui sotto."],"Your API key":["La tua chiave API"],"Go to your %s dashboard":["Vai alla tua bacheca di %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Il collegamento a %1$s è andato bene! Per gestire il tuo Zap, visita la tua bacheca %2$s."],"Your %s dashboard":["La tua bacheca di %s"],"Verify connection":["Verifica la connessione"],"Verify your connection":["Verifica la tua connessione"],"Create a Zap":["Crea uno Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Accedi al tuo account %1$s e inizia a creare il tuo primo Zap! Puoi creare solo 1 Zap con un evento di attivazione da %2$s. All'interno di questo Zap puoi scegliere una o più azioni."],"%s API key":["Chiave API di %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Questa chiave API sarà necessaria più avanti su %s, quando configurerai lo Zap."],"Copy your API key":["Copia la tua chiave API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Per impostare una connessione, copia la chiave API indicata di seguito e usala per creare e attivare uno Zap all'interno del tuo account %s."],"Manage %s settings":["Gestisci le impostazioni %s"],"Connect to %s":["Connetti a %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Nota bene: affinché questo workout funzioni bene, devi eseguire lo strumento di ottimizzazione dei dati SEO. Se sei admin puoi eseguirlo in %1$sYoast SEO > Strumenti%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Hai aggiunto i link agli articoli orfani e hai ripulito quelli che non erano più rilevanti. Ottimo lavoro! Dai un'occhiata al riepilogo qui sotto e festeggia i risultati ottenuti!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Esamina criticamente i contenuti di questo elenco e apporta gli aggiornamenti necessari. Se hai bisogno di aiuto per l'aggiornamento, c'è %1$sun articolo del blog molto utile che può guidarti lungo tutto il percorso%2$s (fai clic per aprire una nuova scheda)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sTi serve una guida? Abbiamo scritto un articolo che ti spiega come fare passo a passo: %2$sCome usare%7$s il workout per i contenuti orfani (in inglese)%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Hai appena reso i tuoi contenuti migliori facili da trovare e con maggiori probabilità di posizionamento: complimenti! Di tanto in tanto, ricordati di controllare se i tuoi contenuti Cornerstone ricevono abbastanza link!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Dai un'occhiata all'elenco qui sotto. I tuoi contenuti Cornerstone (contrassegnati con %1$s) ricevono il maggior numero di link interni? Fai clic sul pulsante Ottimizza se pensi che un contenuto Cornerstone abbia bisogno di più link. L'articolo passerà alla fase successiva."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Tutti i tuoi contenuti Cornerstone hanno il pallino verde? Per ottenere risultati migliori, puoi modificare quelli che non ce l'hanno!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Quali sono gli articoli che vuoi posizionare più in alto? Quali sono quelli che il tuo pubblico troverebbe più utili e completi? Fai clic sulla freccia rivolta verso il basso e cerca gli articoli che corrispondono a questi criteri. Gli articoli selezionati dall'elenco saranno automaticamente classificati come \"Cornerstone\"."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sHai bisogno di una guida più dettagliata? Abbiamo descritto ogni passo in dettaglio nella %2$sguida pratica%7$s al workout dei contenuti Cornerstone%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Blocco per creare un indice di Yoast"],"Yoast Related Links":["Blocco per i Link correlati di Yoast"],"Finish optimizing":["Termina l'ottimizzazione"],"You've finished adding links to this article.":["Hai finito di aggiungere link a questo articolo."],"Optimize":["Ottimizza"],"Added to next step":["Aggiunto alla fase successiva"],"Choose cornerstone articles...":["Scegli gli articoli Cornerstone..."],"Loading data...":["Caricamento dei dati in corso..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Non hai ancora ripulito o aggiornato nessun articolo dopo questo workout. Una volta fatto, qui apparirà un riassunto del tuo lavoro."],"Skipped":["Saltata "],"Hidden from search engines.":["Nascosto ai motori di ricerca."],"Removed":["Rimosso"],"Improved":["Migliorato"],"Resolution":["Risoluzione"],"Loading redirect options...":["Caricamento delle opzioni di reindirizzamento..."],"Remove and redirect":["Rimuovi e reindirizza"],"Custom url:":["URL personalizzato:"],"Related article:":["Articolo correlato:"],"Home page:":["Homapage:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Stai per eliminare %1$s%2$s%3$s. Per evitare i 404 sul tuo sito, dovresti reindirizzarlo a un'altra pagina del tuo sito. Dove vorresti reindirizzarlo?"],"SEO Workout: Remove article":["Workout SEO: Rimuovi l'articolo"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Sembra tutto a posto! Non abbiamo trovato nessun articolo sul tuo sito che sia più vecchio di sei mesi e che riceva troppi pochi link sul tuo sito. Torna più tardi per nuovi suggerimenti di miglioramento!"],"Hide from search engines":["Nascondi ai motori di ricerca"],"Improve":["Migliora"],"Are you sure you wish to hide this article from search engines?":["Confermi di voler nascondere questo articolo ai motori di ricerca?"],"Action":["Azione"],"You've hidden this article from search engines.":["Hai nascosto questo articolo dai motori di ricerca."],"You've removed this article.":["Hai rimosso questo articolo."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Al momento non hai selezionato nessun articolo da migliorare. Seleziona alcuni articoli orfani dei passi precedenti a cui aggiungere link e ti mostreremo dei suggerimenti di link."],"Loading link suggestions...":["Caricamento dei suggerimenti di link..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Non abbiamo trovato nessun suggerimento per questo articolo, ma naturalmente puoi ancora aggiungere link ad articoli che pensi siano correlati."],"Skip":["Salta"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Non hai ancora selezionato nessun articolo per questo passaggio. Puoi farlo nel passaggio precedente."],"Is it up-to-date?":["È aggiornato?"],"Last Updated":["Ultimo aggiornamento"],"You've moved this article to the next step.":["Hai spostato questo articolo al passo successivo."],"Unknown":["Sconosciuto"],"Clear summary":["Cancella il riepilogo"],"Add internal links towards your orphaned articles.":["Aggiungi dei link interni verso i tuoi articoli orfani."],"Should you update your article?":["Dovresti aggiornare il tuo articolo?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Il tuo sito spesso contiene molti contenuti creati una volta e mai più rivisti in seguito. È importante esaminarli e chiederti se questi contenuti sono ancora rilevanti per il tuo sito. Chiediti: dovrei migliorarlo o rimuoverlo?"],"Start: Love it or leave it?":["Inizio: rimuovere o tenere?"],"Clean up your unlinked content to make sure people can find it":["Pulisci il tuo contenuto non collegato per assicurarti che le persone possano trovarlo"],"I've finished this workout":["Ho finito questo workout"],"Reset this workout":["Reimposta questo workout"],"Well done!":["Ottimo!"],"Add internal links towards your cornerstones":["Aggiungi link interni verso i tuoi contenuti Cornerstone"],"Check the number of incoming internal links of your cornerstones":["Verifica il numero di link interni in entrata dei tuoi contenuti Cornerstone"],"Start: Choose your cornerstones!":["Inizia: scegli i tuoi contenuti Cornerstone!"],"The cornerstone approach":["L'approccio Cornerstone"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Nota bene: affinché questo workout funzioni bene e ti offra buoni suggerimenti per i link, devi avviare lo strumento di ottimizzazione dei dati SEO. Gli amministratori possono avviarlo dal menu %1$sYoastSEO > Strumenti%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Nota: L'amministratore ha disabilitato la funzionalità cornerstone nelle impostazioni SEO. Se vuoi seguire questo workout, la funzionalità deve essere abilitata."],"I've finished this step":["Ho terminato questo passaggio"],"Revise this step":["Rivedi questo passaggio"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Non siamo riusciti a trovare i link interni sulle tue pagine. O non hai ancora aggiunto alcun link interno al tuo contenuto, oppure Yoast SEO non li ha indicizzati. Puoi fare in modo che Yoast SEO indicizzi i tuoi link eseguendo l'ottimizzazione dei dati SEO sotto SEO > Strumenti."],"Incoming links":["Link in entrata"],"Edit to add link":["Modifica per aggiungere un link"],"%s incoming link":["%s link in entrata","%s link in entrata"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Al momento non hai articoli contrassegnati come contenuti Cornerstone. Quando contrassegnerai i tuoi articoli come Cornerstone, li troverai elencati qui."],"Focus keyphrase":["Frase chiave"],"Article":["Articolo"],"Readability score":["Punteggio di leggibilità"],"SEO score":["Punteggio SEO"],"Copy failed":["Copia non riuscita"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Migliora il posizionamento di tutti i tuoi contenuti Cornerstone seguendo questi %1$sworkout passo a passo!%2$s"],"Rank with articles you want to rank with":["Posizionati meglio con gli articoli che vuoi che vengano mostrati per primi"],"Descriptive text":["Testo descrittivo"],"Show the descriptive text":["Mostra il testo descrittivo"],"Show icon":["Mostra l'icona"],"Yoast Estimated Reading Time":["Tempo di lettura stimato di Yoast"],"Shows an estimated reading time based on the content length.":["Mostra il tempo di lettura stimato in base alla lunghezza del testo."],"reading time":["tempo di lettura"],"content length":["lunghezza del testo"],"Estimated reading time:":["Tempo di lettura stimato:"],"minute":["% minuto","minuti"],"Settings":["Impostazioni"],"OK":["OK"],"Close":["Chiudi"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["La prima vera soluzione SEO tutto-in-uno per WordPress, compresa l’analisi dei contenuti su ogni pagina, sitemap XML e molto altro."],"Type":["Tipo"],"Team Yoast":["Team Yoast"],"Orphaned content":["Contenuti orfani"],"Synonyms":["Sinonimi:"],"Internal linking suggestions":["Suggerimenti di link interni"],"Enter a related keyphrase to calculate the SEO score":["Inserisci una frase chiave per calcolare il punteggio SEO"],"Related keyphrase":["Frase chiave correlata"],"Add related keyphrase":["Aggiungi una frase chiave correlata"],"Analysis results":["Risultati dell'analisi"],"Help on choosing the perfect keyphrase":["Aiuto per scegliere le frase chiave perfetta"],"Help on keyphrase synonyms":["Aiuto per i sinonimi delle frasi chiave"],"Keyphrase":["Frase chiave"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nuova URL: {{link}}%s{{/link}}"],"Undo":["Annulla"],"Redirect created":["Reindirizzamento creato"],"%s just created a redirect from the old URL to the new URL.":["%s appena creato un reindirizzamento dalla vecchia URL alla nuova URL."],"Old URL: {{link}}%s{{/link}}":["Vecchia URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinonimi della keyphrase"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Si è verificato un errore: l'analisi SEO Premium non sta funzionando. Assicurati {{activateLink}}di aver attivato il tuo abbonamento in MyYoast{{/activateLink}} e poi {{reloadButton}}ricarica questa pagina{{/reloadButton}} in modo che funzioni in modo corretto."],"seo":["seo"],"internal linking":["link interni"],"site structure":["struttura del sito"],"We could not find any relevant articles on your website that you could link to from your post.":["Non troviamo nessun articolo rilevante sul tuo sito che possa essere inserito come link nel tuo articolo."],"Load suggestions":["Carica i suggerimenti"],"Refresh suggestions":["Aggiorna i suggerimenti"],"Write list…":["Scrivi una lista..."],"Adds a list of links related to this page.":["Aggiunge un elenco di link correlati a questa pagina."],"related posts":["articoli correlati"],"related pages":["pagine correlate"],"Adds a table of contents to this page.":["Aggiunge un indice a questa pagina."],"links":["link"],"toc":["Indice"],"Copy link":["Copia il link"],"Copy link to suggested article: %s":["Copia il link all'articolo suggerito: %s"],"Add a title to your post for the best internal linking suggestions.":["Aggiungi un titolo al tuo articolo per ottenere i migliori suggerimenti di collegamenti interni."],"Add a metadescription to your post for the best internal linking suggestions.":["Aggiungi una metadescrizione al tuo articolo per ottenere i migliori suggerimenti di collegamenti interni."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Aggiungi un titolo e una metadescrizione al tuo articolo per ottenere i migliori suggerimenti di collegamenti interni."],"Also, add a title to your post for the best internal linking suggestions.":["Inoltre, aggiungi un titolo al tuo articolo per ottenere i migliori suggerimenti di collegamenti interni."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Inoltre, aggiungi una metadescrizione al tuo articolo per ottenere i migliori suggerimenti di collegamenti interni."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Inoltre, aggiungi un titolo e una metadescrizione al tuo articolo per ottenere i migliori suggerimenti di collegamenti interni."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Una volta che hai aggiunto un po' più di testo, ti daremo qui un elenco di contenuti correlati che puoi inserire nel tuo articolo."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Per migliorare la struttura del tuo sito, prendi in considerazione di aggiungere link ad altri articoli o pagine correlate del tuo sito."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Ci vogliono alcuni secondi per mostrarti un elenco di contenuti correlati a cui puoi collegare i tuoi contenuti. I suggerimenti saranno mostrati qui non appena li avremo individuati."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Leggi la nostra guida sui Link interni per la SEO{{/a}} per saperne di più."],"Copied!":["Copiato!"],"Not supported!":["Non supportato!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Stai cercando di usare più frasi chiave correlate? Dovresti aggiungerle separatamente."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["La tua frase chiave è troppo lunga. Può contenere un massimo di 191 caratteri."],"Add as related keyphrase":["Aggiungi come frase chiave correlata"],"Added!":["Aggiunto!"],"Remove":["Rimuovi"],"Table of contents":["Indice"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Dobbiamo ottimizzare i tuoi dati SEO per offrirti i migliori %1$ssuggerimenti di link%2$s.\n\n%3$sInizia l'ottimizzazione dei tuoi dati SEO%4$s"],"Create a Zap in %s":["Crea uno Zap in %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ja.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ja.json new file mode 100644 index 00000000..0c887f68 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ja.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=1; plural=0;","lang":"ja_JP"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æ¬¡ã®ã‚¨ãƒ©ãƒ¼ã¨ã¨ã‚‚ã«è¿”ã•れã¾ã—ãŸã€‚\"%s\""],"X share preview":["X ã®ã‚·ã‚§ã‚¢ãƒ—レビュー"],"AI X title generator":["AI Xã®ã‚¿ã‚¤ãƒˆãƒ«ã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿ãƒ¼"],"AI X description generator":["AI X ã®èª¬æ˜Žã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿ãƒ¼"],"X preview":["X プレビュー"],"Please enter a valid focus keyphrase.":["有効ãªãƒ•ォーカスキーフレーズを入力ã—ã¦ãã ã•ã„。"],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ã€ã‚µã‚¤ãƒˆãŒãƒ‘ブリックã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã€REST API ãŒãƒ‘スワードã§ä¿è­·ã•れã¦ã„るテストサイトã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®ä¸¡æ–¹ã«é©ç”¨ã•れã¾ã™ã€‚サイトãŒä¸€èˆ¬å…¬é–‹ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ã€ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ã€%1$sサãƒãƒ¼ãƒˆãƒãƒ¼ãƒ ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„%2$s。"],"Yoast AI cannot reach your site":["Yoast AI ãŒã‚µã‚¤ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["ã“ã®æ©Ÿèƒ½ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€æœ‰åŠ¹åŒ–ãª %2$s ãŠã‚ˆã³ %3$s 購読ãŒå¿…è¦ã§ã™ã€‚%5$s %1$s%6$s ã§è³¼èª­ã‚’有効化ã™ã‚‹ã‹ã€%7$sæ–°ã—ã„ %4$s%8$s ã‚’å–å¾—ã—ã¦ãã ã•ã„。ãã®å¾Œã€æ©Ÿèƒ½ãŒæ­£ã—ãæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«ã“ã®ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ã¦ãã ã•ã„。ã“れã«ã¯æœ€å¤§ 30 ç§’ã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚"],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["AI タイトル ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’使用ã™ã‚‹ã«ã¯ã€ä½¿ç”¨å‰ã« SEO 分æžã‚’有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを有効ã«ã™ã‚‹ã«ã¯ã€%2$s%1$s ã®ã‚µã‚¤ãƒˆæ©Ÿèƒ½%3$sã«ç§»å‹•ã—ã€SEO 分æžã‚’オンã«ã—ã¦ã€ã€Œå¤‰æ›´ã‚’ä¿å­˜ã€ã‚’クリックã—ã¦ãã ã•ã„。WordPress ユーザープロファイル㧠SEO 分æžãŒç„¡åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ—ロファイルã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦æœ‰åйã«ã—ã¾ã™ã€‚ã“れらã®è¨­å®šã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã¯ã€ç®¡ç†è€…ã«å•ã„åˆã‚ã›ã¦ãã ã•ã„。"],"Social share preview":["ソーシャルシェアã®ãƒ—レビュー"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Yoast AI 機能を引ãç¶šã使用ã™ã‚‹ã«ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®é »åº¦ã‚’減らã—ã¦ãã ã•ã„。 %1$sヘルプ記事%2$sã§ã¯ã€ãƒ¯ãƒ¼ã‚¯ãƒ•ローを最é©åŒ–ã™ã‚‹ãŸã‚ã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’効果的ã«è¨ˆç”»ã—ã€ãƒšãƒ¼ã‚¹ã‚’調整ã™ã‚‹ãŸã‚ã®ã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ã‚’æä¾›ã—ã¾ã™ã€‚"],"You've reached the Yoast AI rate limit.":["Yoast AI ã®ãƒ¬ãƒ¼ãƒˆåˆ¶é™ã«é”ã—ã¾ã—ãŸã€‚"],"Allow":["許å¯"],"Deny":["æ‹’å¦"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["ã“ã®å‹•画を表示ã™ã‚‹ã«ã¯ã€%1$s ㌠%2$s ã‹ã‚‰åŸ‹ã‚è¾¼ã¿å‹•画を読ã¿è¾¼ã‚るよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"],"Text generated by AI may be offensive or inaccurate.":["AI ã«ã‚ˆã£ã¦ç”Ÿæˆã•れãŸãƒ†ã‚­ã‚¹ãƒˆã¯æ”»æ’ƒçš„ã¾ãŸã¯ä¸æ­£ç¢ºã§ã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚"],"(Opens in a new browser tab)":["(æ–°ã—ã„ブラウザータブã§é–‹ã)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["ç”Ÿæˆ AI ã§ãƒ¯ãƒ¼ã‚¯ãƒ•ローをスピードアップã—ã¾ã™ã€‚ 検索や社会的外観ã«åˆã‚ã›ã¦ã€é«˜å“質ã®ã‚¿ã‚¤ãƒˆãƒ«ã¨èª¬æ˜Žã®ææ¡ˆã‚’å–å¾—ã—ã¾ã™ã€‚ %1$s詳細ã«ã¤ã„ã¦ã¯ã€ã“ã“をクリックã—ã¦ãã ã•ã„%2$s%3$s。"],"Generate titles & descriptions with Yoast AI!":["Yoast AI ã§ã‚¿ã‚¤ãƒˆãƒ«ã¨èª¬æ˜Žã‚’生æˆ!"],"New to %1$s":["%1$s ã¯åˆã‚ã¦ã§ã™"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Yoast AI サービス㮠%1$s利用è¦ç´„%2$s ãŠã‚ˆã³ %3$sプライãƒã‚·ãƒ¼ ãƒãƒªã‚·ãƒ¼%4$s を承èªã—ã¾ã™ã€‚ ã“れã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ エクスペリエンスをå‘上ã•ã›ã‚‹ãŸã‚ã®ãƒ‡ãƒ¼ã‚¿ã®åŽé›†ã¨ä½¿ç”¨ã¸ã®åŒæ„ãŒå«ã¾ã‚Œã¾ã™ã€‚"],"Start generating":["生æˆã‚’é–‹å§‹"],"Yes, revoke consent":["ã¯ã„ã€åŒæ„ã‚’å–り消ã—ã¾ã™"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["åŒæ„ã‚’å–り消ã™ã¨ã€Yoast AI ã®æ©Ÿèƒ½ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããªã‚Šã¾ã™ã€‚ åŒæ„ã‚’å–り消ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹?"],"Something went wrong, please try again later.":["何ã‹ãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。"],"Revoke AI consent":["AI ã®åŒæ„ã‚’å–り消ã™"],"AI title generator":["AI タイトルジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼"],"AI description generator":["AI 説明ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼"],"AI social title generator":["AI ソシアルã®ã‚¿ã‚¤ãƒˆãƒ«ã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿ãƒ¼"],"AI social description generator":["AI ソシアルã®èª¬æ˜Žã‚¸ã‚§ãƒãƒ¬ãƒ¼ã‚¿ãƒ¼"],"Dismiss":["éžè¡¨ç¤º"],"Don’t show again":["二度ã¨è¡¨ç¤ºã—ãªã„ã§"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sヒント%2$s: ページã«ã•らã«å¤šãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を書ã込むã“ã¨ã§ã€ç”Ÿæˆã•れ㟠AI タイトルã®ç²¾åº¦ãŒå‘上ã—ã¾ã™ã€‚"],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sヒント%2$s: ページã«ã•らã«å¤šãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を記述ã™ã‚‹ã“ã¨ã§ã€ç”Ÿæˆã•れ㟠AI ã®èª¬æ˜Žã®ç²¾åº¦ãŒå‘上ã—ã¾ã™ã€‚"],"Try again":["å†è©¦è¡Œ"],"Social preview":["ソーシャルプレビュー"],"Desktop result":["デスクトップã®çµæžœ"],"Mobile result":["モãƒã‚¤ãƒ«ã®çµæžœ"],"Apply %s description":[],"Apply %s title":[],"Next":["次"],"Previous":["å‰"],"Generate 5 more":["ã•ら㫠5 ã¤ç”Ÿæˆã™ã‚‹"],"Google preview":["Google プレビュー"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["OpenAI ã®åŽ³æ ¼ãªå€«ç†ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã¨%1$s使用ãƒãƒªã‚·ãƒ¼%2$sã®ãŸã‚ã€ãƒšãƒ¼ã‚¸ã® SEO タイトルを生æˆã§ãã¾ã›ã‚“。AI を使用ã™ã‚‹å ´åˆã¯ã€éœ²éª¨ã€æš´åŠ›çš„ã€ã¾ãŸã¯æ€§çš„ã«éœ²éª¨ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ä½¿ç”¨ã¯é¿ã‘ã¦ãã ã•ã„。%3$s AI ã§æœ€è‰¯ã®çµæžœã‚’確実ã«å¾—ã‚‹ãŸã‚ã«ãƒšãƒ¼ã‚¸ã‚’æ§‹æˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦è©³ã—ã読んã§ãã ã•ã„%4$s。"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["OpenAI ã®åŽ³æ ¼ãªå€«ç†ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã¨%1$s使用ãƒãƒªã‚·ãƒ¼%2$sã®ãŸã‚ã€ãƒšãƒ¼ã‚¸ã® SEO メタ説明を生æˆã§ãã¾ã›ã‚“。AI を使用ã™ã‚‹å ´åˆã¯ã€éœ²éª¨ã€æš´åŠ›çš„ã€ã¾ãŸã¯æ€§çš„ã«éœ²éª¨ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ä½¿ç”¨ã¯é¿ã‘ã¦ãã ã•ã„。%3$s AI ã§æœ€è‰¯ã®çµæžœã‚’確実ã«å¾—ã‚‹ãŸã‚ã«ãƒšãƒ¼ã‚¸ã‚’æ§‹æˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦è©³ã—ã読んã§ãã ã•ã„%4$s。"],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["ã“ã®æ©Ÿèƒ½ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€æœ‰åŠ¹ãª %1$s 購読ãŒå¿…è¦ã§ã™ã€‚%3$s%2$s ã§è³¼èª­ã‚’有効化ã™ã‚‹%4$sã‹ã€%5$sæ–°ã—ã„ %1$s 購読をå–å¾—ã—ã¦ãã ã•ã„%6$s。ãã®å¾Œã€æ©Ÿèƒ½ãŒæ­£ã—ãæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ã“ã®ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ã¾ã™ã€‚ã“れã«ã¯æœ€å¤§ 30 ç§’ã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚"],"Refresh page":["ãƒšãƒ¼ã‚¸ã®æ›´æ–°"],"Not enough content":["コンテンツãŒä¸å分ã§ã™"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ã€%1$sサãƒãƒ¼ãƒˆ ãƒãƒ¼ãƒ ã«ã”連絡ãã ã•ã„%2$s!"],"Something went wrong":["å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["接続タイムアウトãŒç™ºç”Ÿã—ãŸã‚ˆã†ã§ã™ã€‚ インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã€å¾Œã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。 å•題ãŒè§£æ±ºã—ãªã„å ´åˆã¯ã€%1$sサãƒãƒ¼ãƒˆ ãƒãƒ¼ãƒ ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„%2$s"],"Connection timeout":["接続タイムアウト"],"Use AI":["AIを活用"],"Close modal":["モーダルを閉ã˜ã‚‹"],"Learn more about AI (Opens in a new browser tab)":["AI ã«ã¤ã„ã¦è©³ã—ã見る (æ–°ã—ã„ブラウザー タブã§é–‹ãã¾ã™)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sタイトル%3$s: ページã«ã¯ã¾ã ã‚¿ã‚¤ãƒˆãƒ«ãŒã‚りã¾ã›ã‚“。%2$s1ã¤è¿½åŠ ã—ã¦ãã ã•ã„%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sタイトル%2$s: ページã«ã¯ã‚¿ã‚¤ãƒˆãƒ«ãŒã‚りã¾ã™ã€‚ 素晴らã—ã„ï¼"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sキーフレーズ分布%3$s: %2$sキーフレーズã¾ãŸã¯åŒç¾©èªžã‚’テキストã«å«ã‚€ã¨ã€ã‚­ãƒ¼ãƒ•レーズ分布をãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™%3$s。"],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sキーフレーズ分布%2$s: ã„ã„ã§ã™ã­ !"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sキーフレーズ分布%3$s: å‡ä¸€ã§ã¯ã‚りã¾ã›ã‚“。一部ã®ãƒ†ã‚­ã‚¹ãƒˆã¯ã‚­ãƒ¼ãƒ•レーズやåŒç¾©èªžã‚’å«ã‚“ã§ã„ã¾ã›ã‚“。%2$s分布をå‡ä¸€ã«ã—ã¾ã—ょã†%3$s。"],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sキーフレーズ分布%3$s: ã¨ã¦ã‚‚å‡ä¸€ã¨ã¯è¨€ãˆã¾ã›ã‚“。大部分ã®ãƒ†ã‚­ã‚¹ãƒˆã¯ã‚­ãƒ¼ãƒ•レーズやåŒç¾©èªžã‚’å«ã‚“ã§ã„ã¾ã›ã‚“。%2$s分布をå‡ä¸€ã«ã—ã¾ã—ょã†%3$s。"],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: 複雑ãªå˜èªžã‚’ã‚ã¾ã‚Šä½¿ç”¨ã—ã¦ã„ãªã„ãŸã‚ã€ãƒ†ã‚­ã‚¹ãƒˆãŒèª­ã¿ã‚„ã™ããªã£ã¦ã„ã¾ã™ã€‚ よãã§ããŸï¼"],"Word complexity":["å˜èªžã®è¤‡é›‘ã•"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: テキストã®å˜èªžã®ã†ã¡%2$sã¤ã¯è¤‡é›‘ã¨è¦‹ãªã•れã¾ã™ã€‚ %3$s読ã¿ã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€ã‚ˆã‚ŠçŸ­ãã€ã‚ˆã‚Šè¦ªã—ã¿ã‚„ã™ã„言葉を使用ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„%4$s。"],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sä½ç½®åˆã‚ã›%3$s: %4$s ã®ä¸­å¤®æƒãˆã®ãƒ†ã‚­ã‚¹ãƒˆã®é•·ã„セクションãŒã‚りã¾ã™ã€‚%2$så·¦æƒãˆã«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sä½ç½®åˆã‚ã›%3$s: %4$s ã®ä¸­å¤®æƒãˆã®ãƒ†ã‚­ã‚¹ãƒˆã®é•·ã„セクションãŒã‚りã¾ã™ã€‚%2$s峿ƒãˆã«ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™%3$s."],"Select image":["ç”»åƒã‚’é¸æŠž"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["æ°—ã¥ã„ã¦ã„ãªã„ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ã‚µã‚¤ãƒˆã«ã¯ãƒªãƒ³ã‚¯ãŒã¾ã£ãŸãå–å¾—ã•れã¦ã„ãªã„ページãŒã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚検索エンジンãŒãƒªãƒ³ã‚¯ã®ãªã„ページを見ã¤ã‘ã‚‹ã®ã¯é›£ã—ã„ãŸã‚ã€ã“れ㯠SEO ã®å•題ã§ã™ã€‚ãã®çµæžœã€æ¤œç´¢çµæžœã«è¡¨ç¤ºã•れãªããªã‚Šã¾ã™ã€‚ã“れらã®ãƒšãƒ¼ã‚¸ã‚’孤立コンテンツã¨å‘¼ã³ã¾ã™ã€‚ã“ã®ãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¦ãƒˆã§ã¯ã€ã‚µã‚¤ãƒˆä¸Šã®å­¤ç«‹ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を見ã¤ã‘ã¦ã€ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ãƒªãƒ³ã‚¯ã‚’ã™ãã«è¿½åŠ ã§ãるよã†ã«ã‚¬ã‚¤ãƒ‰ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ©ãƒ³ã‚¯ä»˜ã‘ã®ãƒãƒ£ãƒ³ã‚¹ã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["リンクを追加ã—ã¾ã—ょã†ã€‚以下ã«ã€å­¤ç«‹ã—ãŸæŠ•ç¨¿ã®ãƒªã‚¹ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚å„æŠ•ç¨¿ã®ä¸‹ã«ã¯ã€ãƒªãƒ³ã‚¯ã‚’追加ã§ãã‚‹é–¢é€£ãƒšãƒ¼ã‚¸ã®ææ¡ˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚リンクを追加ã™ã‚‹ã¨ãã¯ã€å­¤ç«‹ã—ãŸæŠ•ç¨¿ã«é–¢é€£ã™ã‚‹é–¢é€£æ–‡ã«ãƒªãƒ³ã‚¯ã‚’挿入ã—ã¾ã™ã€‚孤立ã—ãŸå„投稿ã¸ã®ãƒªãƒ³ã‚¯ã‚’ã€ãã‚Œã‚‰ã®æŠ•ç¨¿ã‚’æŒ‡ã™ãƒªãƒ³ã‚¯ã®æ•°ã«æº€è¶³ã™ã‚‹ã¾ã§è¿½åŠ ã—ç¶šã‘ã¾ã™ã€‚"],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["リンクを追加ã—ã¾ã—ょã†ã€‚以下ã«ã€åŸºç¤Žã¨ãªã‚‹è¦ç´ ã®ãƒªã‚¹ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚å„コーナーストーンコンテンツã®ä¸‹ã«ã¯ã€ãƒªãƒ³ã‚¯ã‚’追加ã§ãã‚‹æŠ•ç¨¿ã®ææ¡ˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚リンクを追加ã™ã‚‹ã¨ãã¯ã€å¿…ãšåŸºç¤ŽæŠ•稿ã«é–¢é€£ã™ã‚‹é–¢é€£æ–‡ã«ãƒªãƒ³ã‚¯ã‚’挿入ã—ã¦ãã ã•ã„。基礎ã¨ãªã‚‹å†…部リンクãŒãã®æŠ•ç¨¿ã«å‘ã‘られるã¾ã§ã€å¿…è¦ãªæ•°ã®é–¢é€£æŠ•稿ã‹ã‚‰ã®ãƒªãƒ³ã‚¯ã‚’追加ã—ç¶šã‘ã¾ã™ã€‚"],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["サイト上ã®ã„ãã¤ã‹ã®æŠ•稿ã¯%1$s最も%2$sé‡è¦ã§ã™ã€‚ ã“ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯äººã€…ã®è³ªå•ã«ç­”ãˆã€å•題を解決ã—ã¾ã™ã€‚ ã—ãŸãŒã£ã¦ã€ã“ã‚Œã‚‰ã®æŠ•ç¨¿ã¯ãƒ©ãƒ³ã‚¯ä»˜ã‘ã«å€¤ã—ã¾ã™ã€‚%3$s ã§ã¯ã€ã“ã‚Œã‚‰ã®æŠ•ç¨¿ã‚’ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¨å‘¼ã³ã¾ã™ã€‚ãれらをランク付ã‘ã™ã‚‹æ–¹æ³•ã® 1 ã¤ã¯ã€ãれらã¸ã®å分ãªãƒªãƒ³ã‚¯ã‚’ãƒã‚¤ãƒ³ãƒˆã™ã‚‹ã“ã¨ã§ã™ã€‚リンクãŒå¢—ãˆã‚‹ã¨ã€ãã‚Œã‚‰ã®æŠ•ç¨¿ãŒé‡è¦ã§ä¾¡å€¤ãŒã‚ã‚‹ã¨ã„ã†ã“ã¨ãŒæ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã«ä¼ã‚りã¾ã™ã€‚ã“ã®ãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¦ãƒˆã§ã¯ã€ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ãƒªãƒ³ã‚¯ã‚’追加ã™ã‚‹ã®ã‚’ãŠæ‰‹ä¼ã„ã—ã¾ã™ã€‚"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["ã‚‚ã†å°‘ã—テキストを追加ã™ã‚‹ã¨ã€ãƒ†ã‚­ã‚¹ãƒˆã®å½¢å¼ãƒ¬ãƒ™ãƒ«ãŒã‚ã‹ã‚Šã¾ã™ã€‚"],"Overall, your text appears to be %1$s%3$s%2$s.":["全体ã¨ã—ã¦ã€ãƒ†ã‚­ã‚¹ãƒˆã¯ %1$s%3$s%2$s ã®ã‚ˆã†ã«è¦‹ãˆã¾ã™ã€‚"],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Zapier çµ±åˆã¯ 20.7 (リリース日 5 月 9 æ—¥) ã§ %1$s ã‹ã‚‰å‰Šé™¤ã•れã¾ã™ã€‚ ã”質å•ãŒã‚ã‚‹å ´åˆã¯ã€%2$s ã¾ã§ãŠå•ã„åˆã‚ã›ãã ã•ã„。"],"Maximum heading level":["最大見出ã—レベル"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["「関連リンクã€ãŒæ©Ÿèƒ½ã™ã‚‹ãŸã‚ã«å¿…è¦ãªã€Œãƒªãƒ³ã‚¯ã®ææ¡ˆã€ãŒç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚関連リンクを追加ã—ãŸã„å ´åˆã¯ã€ã€Œã‚µã‚¤ãƒˆã®æ©Ÿèƒ½ã€ã«ç§»å‹•ã—ã€ã€Œãƒªãƒ³ã‚¯ã®ææ¡ˆã€ã‚’有効ã«ã—ã¦ãã ã•ã„。"],"Schema":["スキーマ"],"Meta tags":["メタタグ"],"Not available":["利用ã§ãã¾ã›ã‚“"],"Checks":["ãƒã‚§ãƒƒã‚¯"],"Focus Keyphrase":["フォーカスキーフレーズ"],"Good":["良好"],"No index":["No index"],"Front-end SEO inspector":["フロントエンド SEO インスペクター"],"Focus keyphrase not set":["フォーカス キーフレーズãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["%s ダッシュボード㧠Zap を公開ã—ãŸã‚‰ã€Zap ãŒæœ‰åŠ¹åŒ–ã§ã‚µã‚¤ãƒˆã«æŽ¥ç¶šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã§ãã¾ã™ã€‚"],"Reset API key":["API キーã®ãƒªã‚»ãƒƒãƒˆ"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["ç¾åœ¨ã€æ¬¡ã® API キーを使用ã—㦠%s ã«æŽ¥ç¶šã—ã¦ã„ã¾ã™ã€‚ 別㮠API キーã§å†æŽ¥ç¶šã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã§ã‚­ãƒ¼ã‚’リセットã§ãã¾ã™ã€‚"],"Your API key":["API キー"],"Go to your %s dashboard":["%s ダッシュボードã«ç§»å‹•ã—ã¾ã™ "],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["%1$s ã«æ­£å¸¸ã«æŽ¥ç¶šã•れã¾ã—ãŸã€‚ Zap を管ç†ã™ã‚‹ã«ã¯ã€%2$s ダッシュボードã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ãã ã•ã„。"],"Your %s dashboard":["%s ダッシュボード"],"Verify connection":["接続を確èª"],"Verify your connection":["接続を確èª"],"Create a Zap":["Zap を作æˆ"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["%1$s アカウントã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã€æœ€åˆã® Zap ã®ä½œæˆã‚’é–‹å§‹ã—ã¦ãã ã•ã„。%2$s ã‹ã‚‰ã®ãƒˆãƒªã‚¬ãƒ¼ イベントã§ä½œæˆã§ãã‚‹ Zap 㯠1 ã¤ã ã‘ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。 ã“ã® Zap 内㧠1 ã¤ä»¥ä¸Šã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã§ãã¾ã™ã€‚"],"%s API key":["%s ã® API キー "],"You'll need this API key later on in %s when you're setting up your Zap.":["ã“ã® API キーã¯ã€å¾Œã§ Zap を設定ã™ã‚‹ã¨ãã« %s ã§å¿…è¦ã«ãªã‚Šã¾ã™ã€‚"],"Copy your API key":["API キーをコピーã—ã¾ã™"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["接続をセットアップã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ç‰¹å®šã® API キーをコピーã—ã€ãれを使用ã—ã¦%s アカウント内㧠Zap を作æˆã—ã¦æœ‰åйã«ã—ã¦ãã ã•ã„。"],"Manage %s settings":["%s 設定ã®ç®¡ç†"],"Connect to %s":["%sã«æŽ¥ç¶šã™ã‚‹"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["注æ„:ã“ã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ãŒã†ã¾ã機能ã—ã€SEO データ最é©åŒ–ツールを実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ 管ç†è€…ã¯ã“れを %1$sSEO > ツール%2$s ã§å®Ÿè¡Œã§ãã¾ã™ã€‚"],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["孤立ã—ãŸæŠ•ç¨¿ã¸ã®ãƒªãƒ³ã‚¯ã‚’追加ã—ã€é–¢é€£æ€§ãŒãªããªã£ãŸæŠ•稿をクリーンアップã—ã¾ã—ãŸã€‚ よãã‚„ã£ãŸï¼ ä»¥ä¸‹ã®æ¦‚è¦ã‚’見ã¦ã€é”æˆã—ãŸã“ã¨ã‚’ç¥ã„ã¾ã—ょã†!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["ã“ã®ãƒªã‚¹ãƒˆã®å†…容を批判的ã«èª¿ã¹ã€å¿…è¦ãªæ›´æ–°ã‚’行ã£ã¦ãã ã•ã„。 æ›´æ–°ã«ã¤ã„ã¦ã‚µãƒãƒ¼ãƒˆãŒå¿…è¦ãªå ´åˆã¯ã€%1$séžå¸¸ã«ä¾¿åˆ©ãªãƒ–ログ投稿をã”利用ãã ã•ã„%2$s。ã™ã¹ã¦ã®æ‰‹é †ã‚’ã”æ¡ˆå†…ã—ã¾ã™ (クリックã—ã¦æ–°ã—ã„タブã§é–‹ãã¾ã™)。"],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sã•らã«ã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ãŒå¿…è¦ã§ã™ã‹? 次ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ã™ã¹ã¦ã®ã‚¹ãƒ†ãƒƒãƒ—ã«ã¤ã„ã¦è©³ã—ã説明ã—ã¦ã„ã¾ã™ã€‚%2$s%7$s ã®å­¤ç«‹ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„トレーニングã®ä½¿ç”¨æ–¹æ³•%3$s%4$s%5$s。%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["最高ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を見ã¤ã‘ã‚„ã™ãã—ã€ãƒ©ãƒ³ã‚¯ä»˜ã‘ã™ã‚‹å¯èƒ½æ€§ã‚’高ã‚ã¾ã—ãŸ! ã¨ãã©ãã€ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ãŒå分ãªãƒªãƒ³ã‚¯ã‚’ç²å¾—ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["以下ã®ãƒªã‚¹ãƒˆã‚’見ã¦ãã ã•ã„。 コーナーストーン (%1$sã§ãƒžãƒ¼ã‚¯ã•れã¦ã„ã‚‹) ã«ã¯ã€ãれらを指ã™å†…éƒ¨ãƒªãƒ³ã‚¯ãŒæœ€ã‚‚多ãã‚りã¾ã™ã‹? コーナーストーンã«ã•らã«ãƒªãƒ³ã‚¯ãŒå¿…è¦ã ã¨æ€ã‚れる場åˆã¯ã€ã€Œæœ€é©åŒ–〠ボタンをクリックã—ã¾ã™ã€‚ ã“れã«ã‚ˆã‚Šã€æŠ•ç¨¿ã¯æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã«é€²ã¿ã¾ã™ã€‚"],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["ã™ã¹ã¦ã®ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã«ç·‘ã®ç®‡æ¡æ›¸ããŒã‚りã¾ã™ã‹? 最良ã®çµæžœã‚’å¾—ã‚‹ã«ã¯ã€ãã†ã§ãªã„ã‚‚ã®ã‚’編集ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["ã©ã®æŠ•稿を最高ã«ãƒ©ãƒ³ã‚¯ä»˜ã‘ã—ãŸã„ã§ã™ã‹?è´è¡†ãŒæœ€ã‚‚有用ã§å®Œå…¨ã ã¨æ€ã†ã‚‚ã®ã¯ã©ã‚Œã§ã™ã‹?下å‘ã矢å°ã‚’クリックã—ã¦ã€ãã®åŸºæº–ã«é©åˆã™ã‚‹ã‚’探ã—ã¾ã™ã€‚リストã‹ã‚‰é¸æŠžã—ãŸæŠ•ç¨¿ã¯è‡ªå‹•çš„ã«ã€Œã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã€ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•れã¾ã™ã€‚"],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sã•らã«ã‚¬ã‚¤ãƒ€ãƒ³ã‚¹ãŒå¿…è¦ã§ã™ã‹? ã™ã¹ã¦ã®ã‚¹ãƒ†ãƒƒãƒ—ã«ã¤ã„ã¦ã¯ã€æ¬¡ã§è©³ã—ã説明ã—ã¦ã„ã¾ã™ã€‚%2$s%7$s コーナーストーントレーニングã®ä½¿ã„æ–¹%3$s%4$s%5$s。%6$s"],"Yoast Table of Contents":["Yoast 目次"],"Yoast Related Links":["Yoast 関連リンク"],"Finish optimizing":["最é©åŒ–を終了"],"You've finished adding links to this article.":["ã“ã®æŠ•ç¨¿ã¸ã®ãƒªãƒ³ã‚¯ã®è¿½åŠ ãŒå®Œäº†ã—ã¾ã—ãŸã€‚"],"Optimize":["最é©åŒ–"],"Added to next step":["次ã®ã‚¹ãƒ†ãƒƒãƒ—ã«è¿½åŠ "],"Choose cornerstone articles...":["コーナーストーン投稿ã®é¸æŠž..."],"Loading data...":["データをロード中"],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["ã“ã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã‚’使用ã—ã¦ã€ã¾ã è¨˜äº‹ã‚’クリーンアップã¾ãŸã¯æ›´æ–°ã—ã¦ã„ã¾ã›ã‚“。実行ã™ã‚‹ã¨ã€ä½œæ¥­ã®æ¦‚è¦ãŒã“ã“ã«è¡¨ç¤ºã•れã¾ã™ã€‚"],"Skipped":["スキップã—ã¾ã—ãŸ"],"Hidden from search engines.":["検索エンジンã‹ã‚‰éš ã•れã¦ã„ã¾ã™ã€‚"],"Removed":["削除"],"Improved":["改善"],"Resolution":[" 解決"],"Loading redirect options...":["リダイレクトオプションを読ã¿è¾¼ã‚“ã§ã„ã¾ã™..."],"Remove and redirect":["削除ã—ã¦ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ"],"Custom url:":["カスタム URL:"],"Related article:":["関連投稿:"],"Home page:":["ホームページ:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":[" %1$s%2$s%3$s を削除ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚サイト㧠404 を防ãã«ã¯ã€ã‚µã‚¤ãƒˆã®åˆ¥ã®ãƒšãƒ¼ã‚¸ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã©ã“ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã‹ï¼Ÿ"],"SEO Workout: Remove article":["SEO トレーニング:投稿を削除"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["ã™ã¹ã¦ãŒã‚ˆã•ãã†ã ï¼6 ã‹æœˆä»¥ä¸ŠçµŒéŽã—ã¦ã„ã¦ã€ã‚µã‚¤ãƒˆä¸Šã®ãƒªãƒ³ã‚¯ãŒå°‘ãªã™ãŽã‚‹è¨˜äº‹ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚æ–°ã—ã„ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—ã®ææ¡ˆã«ã¤ã„ã¦ã¯ã€å¾Œã§ã“ã“ã«æˆ»ã£ã¦ç¢ºèªã—ã¦ãã ã•ã„。"],"Hide from search engines":["検索エンジンã‹ã‚‰éš ã™"],"Improve":["改良ã™ã‚‹"],"Are you sure you wish to hide this article from search engines?":["ã“ã®æŠ•ç¨¿ã‚’æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã‹ã‚‰éš ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"],"Action":["æ“作"],"You've hidden this article from search engines.":["ã“ã®æŠ•ç¨¿ã‚’æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã‹ã‚‰éš ã—ã¾ã—ãŸã€‚"],"You've removed this article.":["ã“ã®æŠ•ç¨¿ã‚’å‰Šé™¤ã—ã¾ã—ãŸã€‚"],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["ç¾åœ¨ã€æ”¹å–„ã™ã‚‹æŠ•ç¨¿ã‚’é¸æŠžã—ã¦ã„ã¾ã›ã‚“。å‰ã®æ‰‹é †ã§æŠ•稿をã„ãã¤ã‹é¸æŠžã—ã¦ãƒªãƒ³ã‚¯ã‚’追加ã™ã‚‹ã¨ã€ã“ã“ã«ãƒªãƒ³ã‚¯ã®ææ¡ˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚"],"Loading link suggestions...":["ãƒªãƒ³ã‚¯ã®ææ¡ˆã‚’èª­ã¿è¾¼ã‚“ã§ã„ã¾ã™..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["ã“ã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹ææ¡ˆã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸãŒã€ã‚‚ã¡ã‚ã‚“ã€é–¢é€£ã—ã¦ã„ã‚‹ã¨æ€ã‚れる投稿ã¸ã®ãƒªãƒ³ã‚¯ã‚’追加ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã€‚"],"Skip":["スキップ"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["ã“ã®ã‚¹ãƒ†ãƒƒãƒ—ã®æŠ•ç¨¿ã¯ã¾ã é¸æŠžã—ã¦ã„ã¾ã›ã‚“。å‰ã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã“れを行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚"],"Is it up-to-date?":["最新ã§ã™ã‹ï¼Ÿ"],"Last Updated":["最終更新日時"],"You've moved this article to the next step.":["ã“ã®æŠ•ç¨¿ã‚’æ¬¡ã®ã‚¹ãƒ†ãƒƒãƒ—ã«ç§»å‹•ã—ã¾ã—ãŸã€‚"],"Unknown":["䏿˜Ž"],"Clear summary":["è¦ç´„をクリアã—ã¾ã™"],"Add internal links towards your orphaned articles.":["孤立ã—ãŸæŠ•ç¨¿ã¸ã®å†…部リンクを追加ã—ã¾ã™ã€‚"],"Should you update your article?":["投稿を更新ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã‹ï¼Ÿ"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["サイトã«ã¯ã€ä¸€åº¦ä½œæˆã—ã¦ä»¥æ¥ã€ä¸€åº¦ã‚‚見ãŸã“ã¨ã®ãªã„多ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã“れらã®ãƒšãƒ¼ã‚¸ã«ç›®ã‚’通ã—ã¦ã€ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒã¾ã ã‚µã‚¤ãƒˆã«é–¢é€£ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’自å•ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚改善ã—ãŸã„ã§ã™ã‹ã€ãれã¨ã‚‚削除ã—ã¾ã™ã‹ï¼Ÿ"],"Start: Love it or leave it?":["開始:ãれを愛ã™ã‚‹ã‹ã€ãれã¨ã‚‚残ã™ã‹ï¼Ÿ"],"Clean up your unlinked content to make sure people can find it":["リンクã•れã¦ã„ãªã„コンテンツをクリーンアップã—ã¦ã€ä»–ã®äººãŒè¦‹ã¤ã‘られるよã†ã«ã—ã¾ã™"],"I've finished this workout":["ã“ã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã‚’終ãˆã¾ã—ãŸ"],"Reset this workout":["トレーニングをリセット"],"Well done!":["よãã‚„ã£ãŸï¼"],"Add internal links towards your cornerstones":["ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã®æŠ•ç¨¿ã¸ã®å†…部リンクを追加"],"Check the number of incoming internal links of your cornerstones":["コーナーストーン投稿ã®å—ä¿¡å†…éƒ¨ãƒªãƒ³ã‚¯ã®æ•°ã‚’確èªã—ã¾ã™"],"Start: Choose your cornerstones!":["é–‹å§‹ï¼šã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã‚’é¸æŠžã—ã¦ã­ï¼"],"The cornerstone approach":["コーナーストーンã®ã‚¢ãƒ—ローãƒ"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["注æ„:ã“ã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ãŒã†ã¾ã機能ã—ã€ãƒªãƒ³ã‚¯ã®ææ¡ˆã‚’æä¾›ã™ã‚‹ã«ã¯ã€SEO データ最é©åŒ–ツールを実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ 管ç†è€…ã¯ã“れを %1$sSEO > ツール%2$sã§å®Ÿè¡Œã§ãã¾ã™ã€‚"],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["注: 管ç†è€…㯠SEO 設定ã®ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³æ©Ÿèƒ½ã‚’無効ã«ã—ã¾ã—ãŸã€‚ ã“ã®ãƒ¯ãƒ¼ã‚¯ã‚¢ã‚¦ãƒˆã‚’使用ã™ã‚‹å ´åˆã¯ã€æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"],"I've finished this step":["ã“ã®ã‚¹ãƒ†ãƒƒãƒ—を終了ã—ã¾ã—ãŸ"],"Revise this step":["ã“ã®ã‚¹ãƒ†ãƒƒãƒ—を修正ã—ã¾ã™"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["ページã«å†…部リンクãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ コンテンツã«å†…部リンクをã¾ã è¿½åŠ ã—ã¦ã„ãªã„ã‹ã€Yoast SEO ãŒãれらをインデックスã«ç™»éŒ²ã—ã¦ã„ã¾ã›ã‚“。SEO > ツール㧠SEO データ最é©åŒ–を実行ã™ã‚‹ã¨ã€Yoast SEO ã«ãƒªãƒ³ã‚¯ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’作æˆã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"],"Incoming links":["ç€ä¿¡ãƒªãƒ³ã‚¯"],"Edit to add link":["リンクを追加ã™ã‚‹ãŸã‚ã«ç·¨é›†"],"%s incoming link":["%s ç€ä¿¡ãƒªãƒ³ã‚¯"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["ç¾åœ¨ã€ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã¨ãƒžãƒ¼ã‚¯ã•ã‚ŒãŸæŠ•ç¨¿ã¯ã‚りã¾ã›ã‚“。 投稿をコーナーストーンã¨ã—ã¦ãƒžãƒ¼ã‚¯ã™ã‚‹ã¨ã€ã“ã“ã«è¡¨ç¤ºã•れã¾ã™ã€‚ "],"Focus keyphrase":["フォーカスキーフレーズ"],"Article":["投稿"],"Readability score":["å¯èª­æ€§ã‚¹ã‚³ã‚¢"],"SEO score":["SEO スコア"],"Copy failed":["コピーã«å¤±æ•—ã—ã¾ã—ãŸ"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["ã“ã®%1$sステップãƒã‚¤ã‚¹ãƒ†ãƒƒãƒ—%2$sã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã‚’使用ã—ã¦ã€ã™ã¹ã¦ã®ã‚³ãƒ¼ãƒŠãƒ¼ã‚¹ãƒˆãƒ¼ãƒ³ã®ãƒ©ãƒ³ã‚­ãƒ³ã‚°ã‚’å‘上ã•ã›ã¦ã­ï¼"],"Rank with articles you want to rank with":["ãŠæ°—ã«å…¥ã‚Šã®æŠ•稿ã§ãƒ©ãƒ³ã‚­ãƒ³ã‚°ã‚’锿ˆ"],"Descriptive text":["説明文"],"Show the descriptive text":["説明テキストを表示"],"Show icon":["アイコンを表示"],"Yoast Estimated Reading Time":["Yoast 推定読書時間"],"Shows an estimated reading time based on the content length.":["コンテンツã®é•·ã•ã«åŸºã¥ã„ãŸæŽ¨å®šèª­ã¿å–り時間を表示ã—ã¾ã™ã€‚"],"reading time":["読書時間"],"content length":["コンテンツã®é•·ã•"],"Estimated reading time:":["推定読書時間:"],"minute":["分"],"Settings":["設定"],"OK":["OK"],"Close":["é–‰ã˜ã‚‹"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["WordPress ã®ã‚ªãƒ¼ãƒ«ã‚¤ãƒ³ãƒ¯ãƒ³åž‹ SEO ソリューションをæä¾›ã—ã¾ã™ã€‚ページコンテンツã®è§£æžã‚„ XML サイトマップãªã©æ§˜ã€…ãªæ©Ÿèƒ½ãŒã‚りã¾ã™ã€‚"],"Type":["タイプ"],"Team Yoast":["ãƒãƒ¼ãƒ  Yoast"],"Orphaned content":["孤立ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„"],"Synonyms":["類義語"],"Internal linking suggestions":["å†…éƒ¨ãƒªãƒ³ã‚¯ã®ææ¡ˆ"],"Enter a related keyphrase to calculate the SEO score":["関連ã™ã‚‹ã‚­ãƒ¼ãƒ•レーズを入力ã—ã¦ã€SEO スコアを計算ã—ã¾ã™"],"Related keyphrase":["関連性ã®ã‚るキーフレーズ"],"Add related keyphrase":["関連キーフレーズを追加"],"Analysis results":["è§£æžçµæžœ"],"Help on choosing the perfect keyphrase":["完璧ãªã‚­ãƒ¼ãƒ•レーズをé¸ã¶ã«ã¯"],"Help on keyphrase synonyms":["キーフレーズã®åŒç¾©èªžã«é–¢ã™ã‚‹ãƒ˜ãƒ«ãƒ—"],"Keyphrase":["キーフレーズ"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["æ–°ã—ã„URL:{{link}}%s{{/link}}"],"Undo":["å…ƒã«æˆ»ã™"],"Redirect created":["リダイレクトãŒä½œæˆã•れã¾ã—ãŸ"],"%s just created a redirect from the old URL to the new URL.":["%sã«ã‚ˆã‚Šã€å¤ã„URLã‹ã‚‰æ–°ã—ã„URLã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãŒä½œæˆã•れã¾ã—ãŸã€‚"],"Old URL: {{link}}%s{{/link}}":["å¤ã„ URL:{{link}}%s{{/link}}"],"Keyphrase synonyms":["キーフレーズã®åŒç¾©èªž"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["An error occurred: unfortunately our Morphology feature is not working. Please make sure you {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly."],"seo":["seo"],"internal linking":["内部リンク"],"site structure":["サイト構造"],"We could not find any relevant articles on your website that you could link to from your post.":["投稿ã‹ã‚‰ãƒªãƒ³ã‚¯ã§ãる関連記事をサイト内ã«è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"],"Load suggestions":["ææ¡ˆã‚’ロード"],"Refresh suggestions":["ææ¡ˆã‚’æ›´æ–°"],"Write list…":["リストを入力..."],"Adds a list of links related to this page.":["ã“ã®ãƒšãƒ¼ã‚¸ã«é–¢é€£ã™ã‚‹ãƒªãƒ³ã‚¯ã®ãƒªã‚¹ãƒˆã‚’追加ã—ã¾ã™ã€‚"],"related posts":["関連投稿"],"related pages":["関連ページ"],"Adds a table of contents to this page.":["ã“ã®ãƒšãƒ¼ã‚¸ã«ç›®æ¬¡ã‚’追加ã—ã¾ã™ã€‚"],"links":["リンク"],"toc":["目次"],"Copy link":["リンクをコピー"],"Copy link to suggested article: %s":["ææ¡ˆè¨˜äº‹ã¸ã®ãƒªãƒ³ã‚¯ã‚’コピー: %s"],"Add a title to your post for the best internal linking suggestions.":["最高ã®å†…éƒ¨ãƒªãƒ³ã‚¯ã®ææ¡ˆã®ãŸã‚ã«ã‚ãªãŸã®æŠ•稿ã«ã‚¿ã‚¤ãƒˆãƒ«ã‚’追加ã—ã¦ãã ã•ã„。"],"Add a metadescription to your post for the best internal linking suggestions.":["最良ã®å†…éƒ¨ãƒªãƒ³ã‚¯ã®ææ¡ˆã®ãŸã‚ã«ã€ãƒ¡ã‚¿èª¬æ˜Žã‚’投稿ã«è¿½åŠ ã—ã¦ãã ã•ã„。"],"Add a title and a metadescription to your post for the best internal linking suggestions.":["最良ã®å†…éƒ¨ãƒªãƒ³ã‚¯ã®ææ¡ˆã®ãŸã‚ã«ã€æŠ•稿ã«ã‚¿ã‚¤ãƒˆãƒ«ã¨ãƒ¡ã‚¿èª¬æ˜Žã‚’追加ã—ã¦ãã ã•ã„。"],"Also, add a title to your post for the best internal linking suggestions.":["ã¾ãŸã€æœ€é«˜ã®å†…éƒ¨ãƒªãƒ³ã‚¯ã®ææ¡ˆã®ãŸã‚ã«æŠ•ç¨¿ã«ã‚¿ã‚¤ãƒˆãƒ«ã‚’追加ã—ã¦ãã ã•ã„。"],"Also, add a metadescription to your post for the best internal linking suggestions.":["ã¾ãŸã€æœ€è‰¯ã®å†…éƒ¨ãƒªãƒ³ã‚¯ã®ææ¡ˆã®ãŸã‚ã«ã€æŠ•稿ã«ãƒ¡ã‚¿èª¬æ˜Žã‚’追加ã—ã¦ãã ã•ã„。"],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["ã¾ãŸã€æœ€é«˜ã®å†…éƒ¨ãƒªãƒ³ã‚¯ã®ææ¡ˆã®ãŸã‚ã«ã€æŠ•稿ã«ã‚¿ã‚¤ãƒˆãƒ«ã¨ãƒ¡ã‚¿èª¬æ˜Žã‚’追加ã—ã¦ãã ã•ã„。"],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["テキストを追加ã™ã‚‹ã¨ã™ãã«ã€æŠ•稿ã«ãƒªãƒ³ã‚¯ã§ãる関連コンテンツã®ãƒªã‚¹ãƒˆãŒè¡¨ç¤ºã•れã¾ã™ã€‚"],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["ã‚µã‚¤ãƒˆã®æ§‹é€ ã‚’改善ã™ã‚‹ã«ã¯ã€ã‚µã‚¤ãƒˆä¸Šã®ä»–ã®é–¢é€£ã™ã‚‹æŠ•稿ã¾ãŸã¯ãƒšãƒ¼ã‚¸ã«ãƒªãƒ³ã‚¯ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。 "],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["リンクã§ãる関連コンテンツã®ãƒªã‚¹ãƒˆãŒè¡¨ç¤ºã•れるã¾ã§ã«æ•°ç§’ã‹ã‹ã‚Šã¾ã™ã€‚ ææ¡ˆãŒã‚り次第ã€ã“ã“ã«è¡¨ç¤ºã•れã¾ã™ã€‚"],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}詳細ã«ã¤ã„ã¦ã¯ã€SEO{{/a}} ã®å†…部リンクã«é–¢ã™ã‚‹ã‚¬ã‚¤ãƒ‰ã‚’ã”覧ãã ã•ã„。"],"Copied!":["コピーã—ã¾ã—ãŸã€‚"],"Not supported!":["サãƒãƒ¼ãƒˆå¯¾è±¡å¤–ã§ã™ã€‚"],"Are you trying to use multiple related keyphrases? You should add them separately.":["関連ã™ã‚‹è¤‡æ•°ã®ã‚­ãƒ¼ãƒ•レーズを使用ã—よã†ã¨ã—ã¦ã„ã¾ã™ã‹ï¼Ÿ 個別ã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"],"Your keyphrase is too long. It can be a maximum of 191 characters.":["キーフレーズãŒé•·ã™ãŽã¾ã™ã€‚最大191文字ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"],"Add as related keyphrase":["関連ã™ã‚‹ã‚­ãƒ¼ãƒ•レーズã¨ã—ã¦è¿½åŠ "],"Added!":["追加!"],"Remove":["削除"],"Table of contents":["目次"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["最é©ãª%1$sãƒªãƒ³ã‚¯ã®ææ¡ˆ%2$sã‚’æä¾›ã§ãるよã†ã«ã€ã‚µã‚¤ãƒˆã®SEOデータを最é©åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚%3$sSEO ãƒ‡ãƒ¼ã‚¿ã®æœ€é©åŒ–ã‚’é–‹å§‹ã™ã‚‹%4$s"],"Create a Zap in %s":["%sã§ Zap を作æˆã™ã‚‹ "]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nb_NO.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nb_NO.json new file mode 100644 index 00000000..da576de6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nb_NO.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"nb_NO"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":[],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":[],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":[],"Social preview":[],"Desktop result":[],"Mobile result":[],"Apply %s description":[],"Apply %s title":[],"Next":[],"Previous":[],"Generate 5 more":[],"Google preview":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":[],"%1$sKeyphrase distribution%2$s: Good job!":[],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":[],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":[],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":[],"Meta tags":[],"Not available":[],"Checks":[],"Focus Keyphrase":[],"Good":[],"No index":[],"Front-end SEO inspector":[],"Focus keyphrase not set":[],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":[],"Reset API key":[],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[],"Your API key":[],"Go to your %s dashboard":[],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[],"Your %s dashboard":[],"Verify connection":[],"Verify your connection":[],"Create a Zap":[],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[],"%s API key":[],"You'll need this API key later on in %s when you're setting up your Zap.":[],"Copy your API key":[],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[],"Manage %s settings":[],"Connect to %s":[],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Merk: For at denne øvelsen skal fungere godt, mÃ¥ du kjøre SEO-dataoptimaliseringsverktøyet. Administratorer kan kjøre dette under %1$sSEO > Tools%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Du har lagt til koblinger til foreldreløse artikler, og du har ryddet opp i de som ikke lenger var relevante. Flott jobb! Ta en titt pÃ¥ sammendraget nedenfor og du kan feire det du har oppnÃ¥dd!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Undersøk innholdet i denne listen nøye, og foreta de nødvendige oppdateringene. Hvis du trenger hjelp med Ã¥ oppdatere, har vi et godt %1$s blogginnlegg som kan veilede deg hele veien%2$s (klikk for Ã¥ Ã¥pne i en ny fane)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$s Trenger du mer veiledning? Vi har dekket hvert eneste trinn detaljert i følgende guide: %2$sHvordan bruke den %7$s foreldreløse-innholdstreningen%3$s%4$s%5$s. %6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Du har nettopp gjort ditt aller beste innhold enkelt Ã¥ finne, og mer sannsynlig Ã¥ rangere høyt! SÃ¥nn skal det gjøres! Fra tid til annen sÃ¥ mÃ¥ du huske Ã¥ sjekke om hjørnesteinene dine fÃ¥r nok lenker!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Ta en titt pÃ¥ listen nedenfor. Har hjørnesteinene dine (merket med %1$s) flest interne koblingene som leder til de? Klikk pÃ¥ Optimaliser-knappen hvis du tror en hjørnestein trenger flere koblinger. Det vil ta artikkelen din til nye høyder."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Har alle hjørnesteinene dine grønne punkter? For Ã¥ oppnÃ¥ det beste resultatet, vurder Ã¥ redigere de som ikke har det!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Hvilke artikler vil du at skal rangere høyest? Hvilke artikler vil publikum finne nyttigst og mest komplette? Klikk pilen som peker nedover, og se etter artikler som oppfyller disse vilkÃ¥rene. Vi merker automatisk de artiklene som du velger fra listen som hjørnesteinsinnhold."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$s Trenger du mer veiledning? Vi har dekket hvert trinn mer detaljert i: %2$sHvordan bruke %7$s hjørnesteinstrening%3$s%4$s%5$s. %6$s"],"Yoast Table of Contents":["Yoast innholdsfortegnelse"],"Yoast Related Links":["Yoast relaterte lenker"],"Finish optimizing":["Fullfør optimalisering"],"You've finished adding links to this article.":["Du er ferdig med Ã¥ legge til lenker i denne artikkelen."],"Optimize":["Optimaliser"],"Added to next step":["Lagt til i neste trinn"],"Choose cornerstone articles...":["Velg hjørnesteinsartikler..."],"Loading data...":["Laster inn data..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Du har ikke ryddet opp eller oppdatert noen artikler ennÃ¥ ved hjelp av denne treningsøkten. NÃ¥r du har gjort det, vises et sammendrag av arbeidet ditt her."],"Skipped":["Hoppet over"],"Hidden from search engines.":["Skjult for søkemotorer."],"Removed":["Fjernet"],"Improved":["Forbedret"],"Resolution":["Oppløsning"],"Loading redirect options...":["Laster inn alternativer for omadressering..."],"Remove and redirect":["Fjern og omadresser"],"Custom url:":["Egendefinert URL-adresse:"],"Related article:":["Relatert artikkel:"],"Home page:":["Hjemmeside:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Du er i ferd med Ã¥ fjerne %1$s%2$s%3$s. For Ã¥ forhindre 404s pÃ¥ nettstedet ditt, bør du omdirigere den til en annen side pÃ¥ nettstedet ditt. Hvor vil du omdirigere den?"],"SEO Workout: Remove article":["SEO-trening: Fjern artikkel"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Alt ser bra ut! Vi har ikke funnet noen artikler pÃ¥ nettstedet ditt som er eldre enn seks mÃ¥neder og mottar for fÃ¥ lenker pÃ¥ nettstedet ditt. Kom tilbake hit senere for nye forslag til opprydding!"],"Hide from search engines":["Skjul fra søkemotorer"],"Improve":["Forbedre"],"Are you sure you wish to hide this article from search engines?":["Er du sikker pÃ¥ at du vil skjule denne artikkelen fra søkemotorer?"],"Action":["Handling"],"You've hidden this article from search engines.":["Du har skjult denne artikkelen for søkemotorer."],"You've removed this article.":["Du har fjernet denne artikkelen."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Du har for øyeblikket ikke valgt noen artikler som skal forbedres. Velg noen artikler i de forrige trinnene for Ã¥ legge til koblinger, sÃ¥ viser vi deg koblingsforslag her."],"Loading link suggestions...":["Laster inn koblingsforslag..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Vi fant ingen forslag til denne artikkelen, men selvfølgelig kan du fortsatt legge til lenker til artikler du tror er relatert."],"Skip":["Hopp over"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Du har ikke valgt noen artikler for dette trinnet ennÃ¥. Du kan gjøre det i forrige trinn."],"Is it up-to-date?":["Er det oppdatert?"],"Last Updated":["Sist oppdatert"],"You've moved this article to the next step.":["Du har flyttet denne artikkelen til neste trinn."],"Unknown":["Ukjent"],"Clear summary":["Fjern sammendrag"],"Add internal links towards your orphaned articles.":["Legg til interne lenker til foreldreløse artikler."],"Should you update your article?":["Bør du oppdatere artikkelen?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Nettsiden kan inneholde mye innhold som du har opprettet én gang, og som du aldri har sett tilbake pÃ¥ siden. Det er viktig Ã¥ gÃ¥ gjennom disse sidene og spørre deg selv om innholdet fortsatt er relevant for nettstedet ditt. Bør du forbedre den eller fjerne den?"],"Start: Love it or leave it?":["Start: Elsk det eller forlat det?"],"Clean up your unlinked content to make sure people can find it":["Rydd opp i innhold uten koblinger for Ã¥ sikre at andre kan finne det"],"I've finished this workout":["Jeg er ferdig med denne treningsøkten"],"Reset this workout":["Tilbakestill denne treningsøkten"],"Well done!":["Godt gjort!"],"Add internal links towards your cornerstones":["Legg til interne koblinger mot hjørnesteinene dine"],"Check the number of incoming internal links of your cornerstones":["Sjekk antall innkommende interne koblinger til hjørnesteinene dine"],"Start: Choose your cornerstones!":["Start: Velg dine hjørnesteiner!"],"The cornerstone approach":["Hjørnestein tilnærming"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Merk: For at denne treningsøkten skal fungere bra og for Ã¥ tilby deg koblingsforslag, mÃ¥ du kjøre SEO-dataoptimaliseringsverktøyet. Administratorer kan kjøre dette under %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":["Jeg er ferdig med dette trinnet"],"Revise this step":["Revider dette trinnet"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Finner ikke interne koblinger pÃ¥ sidene dine. Enten har du ikke lagt til noen interne lenker til innholdet ditt ennÃ¥, eller Yoast SEO indeksert dem ikke. Du kan fÃ¥ Yoast SEO til Ã¥ indeksere koblingene dine ved Ã¥ kjøre SEO-dataoptimalisering under SEO > Tools."],"Incoming links":["Innkommende lenker"],"Edit to add link":["Rediger for Ã¥ legge til kobling"],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Du har for øyeblikket ingen artikler merket som hjørnestein. NÃ¥r du merker artiklene dine som hjørnestein, vil de dukke opp her."],"Focus keyphrase":["Nøkkelfrase for fokus"],"Article":["Artikkel"],"Readability score":["Lesbarhetspoeng"],"SEO score":["Alle SEO-resultater"],"Copy failed":["Kopiering mislyktes"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Forbedre rangeringen for alle hjørnesteinene dine ved Ã¥ bruke denne %1$strinn-for-steg-treningen! %2$s"],"Rank with articles you want to rank with":["Ranger med artikler du vil rangere med"],"Descriptive text":["Beskrivende tekst"],"Show the descriptive text":["Vis den beskrivende teksten"],"Show icon":["Vis ikon"],"Yoast Estimated Reading Time":["Yoast beregnet lesetid"],"Shows an estimated reading time based on the content length.":["Viser en beregnet lesetid basert pÃ¥ innholdslengde."],"reading time":["lesetid"],"content length":["innholdslengde"],"Estimated reading time:":["Bergenet lesetid:"],"minute":["minutt","minutter"],"Settings":["Innstillinger"],"OK":["OK"],"Close":["Lukk"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Den første virkelige allt-i-ett SEO løsning for WordPress, inkluderer innholdsanalyse, XML, sidekart og mye mer."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Foreldreløst innhold"],"Synonyms":["Synonymer"],"Internal linking suggestions":["Forslag til interne lenker"],"Enter a related keyphrase to calculate the SEO score":["Angi en relatert nøkkelfrase for Ã¥ beregne SEO-poengsummen"],"Related keyphrase":["Relatert nøkkelfrase"],"Add related keyphrase":["Legg til beslektet nøkkelfrase"],"Analysis results":["Analyseresultater"],"Help on choosing the perfect keyphrase":["Hjelp til Ã¥ velge den perfekte nøkkelfrasen"],"Help on keyphrase synonyms":["Hjelp for synonymer til nøkkelfrase"],"Keyphrase":["Nøkkelfrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Ny URL: {{link}}%s{{/link}}"],"Undo":["Angre"],"Redirect created":["Omdirigering opprettet"],"%s just created a redirect from the old URL to the new URL.":["%s lagde akkurat en omdirigering fra den gamle URLen til den nye URLen."],"Old URL: {{link}}%s{{/link}}":["Gammel URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Nøkkelord-synonymer"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["seo"],"internal linking":["Internlenking"],"site structure":["nettstedstruktur"],"We could not find any relevant articles on your website that you could link to from your post.":["Vi kunne ikke finne noen relevante artikler pÃ¥ nettstedet ditt som du kan lenke til fra innlegget ditt."],"Load suggestions":["Last forslag"],"Refresh suggestions":["Gjenoppfrisk forslag"],"Write list…":["Skriv liste..."],"Adds a list of links related to this page.":["Legger til en liste over lenker relatert til denne siden."],"related posts":["relaterte innlegg"],"related pages":["relaterte sider"],"Adds a table of contents to this page.":["Legger til en innholdstabell til denne siden."],"links":["lenker"],"toc":["ift"],"Copy link":["Kopier lenke"],"Copy link to suggested article: %s":["Kopier lenke til foreslÃ¥tt artikkel: %s"],"Add a title to your post for the best internal linking suggestions.":["Legg til en tittel til ditt innlegg for Ã¥ fÃ¥ de beste internlenkeforslagene."],"Add a metadescription to your post for the best internal linking suggestions.":["Leg til en metabeskrivelse til ditt innlegg for Ã¥ fÃ¥ de beste forslagene tii interne lenker."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Legg til en tittel og metabeskrivelse til ditt innlegg for Ã¥ fÃ¥ de beste forslagene for interne lenker."],"Also, add a title to your post for the best internal linking suggestions.":["Legg dessuten til en metabeskrivele til ditt innlegg for de beste interne lenkeforslagene."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Legg dessuten til en metabeskrivel for ditt innlegg for de beste interne lenkeforslagene."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Legg dessuten til tittel og en metabeskrivelse for ditt innlegg for Ã¥ fÃ¥ de beste interene lenkeforslagene."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Straks du legger til litt mer brødtekst vil vi her gi deg en liste over relatert innhold som du kan lenke til i ditt innlegg."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Hvis du vil forbedre nettstedstrukturen, kan du vurdere Ã¥ koble til andre relevante innlegg eller sider pÃ¥ nettstedet ditt."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Det tar noen sekunder Ã¥ vise deg en liste over relatert innhold som du kan koble til. Forslagene vil bli vist her sÃ¥ snart vi har dem."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Les vÃ¥r veileder om internlenking for SEO{{/a}} for Ã¥ lære mer."],"Copied!":["Kopiert!"],"Not supported!":["Ikke støttet!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Prøver du Ã¥ bruke flere beslektede nøkkelfraser? Du bør legge dem til separat."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Nøkkelfrasen er for lang. Det kan maksimalt være 191 tegn."],"Add as related keyphrase":["Legg til som beslektet nøkkelfrase"],"Added!":["Lagt til!"],"Remove":["Fjern"],"Table of contents":["Innholdsfortegnelse"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Vi mÃ¥ optimalisere nettstedets SEO-data slik at vi kan tilby deg de beste %1$skoblingsforslag%2$s.\n\n%3$s Start SEO-dataoptimalisering%4$s"],"Create a Zap in %s":["Lag en Zap pÃ¥ %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_BE.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_BE.json new file mode 100644 index 00000000..b28aae5f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_BE.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"nl_BE"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["De aanvraag kwam terug met de volgende fout: \"%s\""],"X share preview":["X deelvoorbeeld"],"AI X title generator":["AI X titelgenerator"],"AI X description generator":["AI X beschrijving generator"],"X preview":["X voorbeeld"],"Please enter a valid focus keyphrase.":["Voer een geldige focus keyphrase in."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Om deze functie te gebruiken, moet je site publiek toegankelijk zijn. Dit geldt zowel voor test websites als voor instanties waar je REST-API is beveiligd met een wachtwoord. Zorg ervoor dat je website toegankelijk is voor het publiek en probeer het opnieuw. Als het probleem zich blijft voordoen, neem dan %1$scontact op met ons ondersteuningsteam%2$s."],"Yoast AI cannot reach your site":["Yoast AI kan je website niet bereiken"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Om toegang te krijgen tot deze functie heb je actieve %2$s en %3$s abonnementen nodig. %5$sActiveer je abonnementen in %1$s%6$s of %7$svraag een nieuwe aan %4$s%8$s. Vernieuw daarna deze pagina zodat de functie correct werkt. Dit kan tot 30 seconden duren."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["De AI titelgenerator vereist dat de SEO analyse is ingeschakeld voor gebruik. Om deze in te schakelen, navigeer je naar %2$sSite functies van %1$s%3$s, schakel je de SEO analyse in en klik je op 'Wijzigingen opslaan'. Als de SEO analyse is uitgeschakeld in je WordPress gebruikersprofiel, ga dan naar je profiel en schakel het daar in. Neem contact op met je beheerder als je geen toegang hebt tot deze instellingen."],"Social share preview":["Voorbeeld social delen"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Om de Yoast AI functie te kunnen blijven gebruiken, aanvragen we je om de frequentie van je aanvragen te verlagen. Ons %1$shulpartikel%2$s biedt richtlijnen voor het effectief abonnementen en abonnementen van je aanvragen voor een geoptimaliseerde workflow."],"You've reached the Yoast AI rate limit.":["Je hebt de Yoast AI rate limiet bereikt."],"Allow":["Toestaan"],"Deny":["Weigeren"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Om deze video te zien, moet je %1$s toestaan om ingesloten video's van %2$s te laden."],"Text generated by AI may be offensive or inaccurate.":["Door AI gegenereerde tekst kan beledigend of onnauwkeurig zijn."],"(Opens in a new browser tab)":["(Opent in een nieuwe browsertab)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Versnel je workflow met generatieve AI. Ontvang titel- en beschrijvingssuggesties van hoge kwaliteit voor je zoekopdracht en sociale uitstraling. %1$sMeer informatie%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Genereer titels en beschrijvingen met Yoast AI!"],"New to %1$s":["Nieuw bij %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Ik ga akkoord met de %1$sDienstvoorwaarden%2$s & %3$s Privacybeleid%4$s van de Yoast AI dienst. Dit houdt ook in dat ik toestemming geef voor het verzamelen en gebruiken van gegevens om de gebruikerservaring te verbeteren."],"Start generating":["Begin met genereren"],"Yes, revoke consent":["Ja, toestemming intrekken"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Als je je toestemming intrekt, heb je geen toegang meer tot de Yoast AI functies. Weet je zeker dat je je toestemming wil intrekken?"],"Something went wrong, please try again later.":["Er is iets misgegaan, probeer het later nog eens."],"Revoke AI consent":["AI toestemming intrekken"],"AI title generator":["AI titel generator"],"AI description generator":["AI beschrijving generator"],"AI social title generator":["AI social titelgenerator"],"AI social description generator":["AI social beschrijving generator"],"Dismiss":["Negeren"],"Don’t show again":["Niet meer laten zien"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: Verbeter de nauwkeurigheid van je gegenereerde AI titels door meer inhoud op je pagina te schrijven."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: Verbeter de nauwkeurigheid van je gegenereerde AI beschrijvingen door meer inhoud te schrijven op je pagina."],"Try again":["Opnieuw proberen"],"Social preview":["Sociaal voorbeeld"],"Desktop result":["Desktop resultaat"],"Mobile result":["Resultaat op mobiel"],"Apply %s description":[],"Apply %s title":[],"Next":["Volgende"],"Previous":["Vorige"],"Generate 5 more":["Genereer nog 5"],"Google preview":["Google voorbeeld"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vanwege de strenge ethische richtlijnen van OpenAI en het %1$sgebruiksbeleid%2$s kunnen we geen SEO titels voor je pagina genereren. Als je van plan bent om AI te gebruiken, vermijd dan het gebruik van expliciete, gewelddadige of seksueel expliciete inhoud. %3$sLees meer over hoe je je pagina kunt configureren om de beste resultaten met AI te behalen%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vanwege de strenge ethische richtlijnen van OpenAI en het beleid voor %1$sgebruik%2$s kunnen we geen metabeschrijvingen voor je pagina genereren. Als je van plan bent AI te gebruiken, vermijd dan expliciete, gewelddadige of seksueel expliciete inhoud. %3$sLees meer over hoe je je pagina kunt configureren om de beste resultaten met AI te behalen%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Om toegang te krijgen tot deze functie heb je een actief %1$s abonnement nodig. Gelieve %3$sje abonnement te activeren in %2$s%4$s of %5$seen nieuw %1$s abonnement te nemen%6$s. Klik daarna op de knop om deze pagina te verversen zodat de functie correct werkt. Dit kan tot 30 seconden duren."],"Refresh page":["Pagina vernieuwen"],"Not enough content":["Niet genoeg inhoud"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Probeer het later nog eens. Als het probleem zich blijft voordoen, neem dan %1$scontact op met ons ondersteuningsteam%2$s!"],"Something went wrong":["Er ging iets mis"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Er lijkt een time-out van de verbinding te zijn opgetreden. Controleer je internetverbinding en probeer het later nog eens. Als het probleem zich blijft voordoen, neem dan %1$scontact op met ons ondersteuningsteam.%2$s"],"Connection timeout":["Time-out verbinding"],"Use AI":["Gebruik AI"],"Close modal":["Modal sluiten"],"Learn more about AI (Opens in a new browser tab)":["Meer informatie over AI (Opent in een nieuw browserscherm)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitle%3$s: je pagina heeft nog geen titel. %2$sVoeg er een toe%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitle%2$s: je pagina heeft een titel. Goed gedaan!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sKeyphrase verdeling%3$s: %2$sGebruik je keyphrases of synoniemen in de tekst zodat we de keyphrase dichtheid kunnen bepalen%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sKeyphrase verdeling%2$s: Goed gedaan!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase verdeling%3$s: Slecht verdeeld. In sommige delen van je tekst komen de keyphrase of synoniemen niet voor. %2$sVerdeel ze beter over de tekst%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase verdeling%3$s: Zeer slecht verdeeld. In sommige delen van je tekst komen de keyphrase of synoniemen niet voor. %2$sVerdeel ze beter over de tekst%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: je gebruikt niet te veel ingewikkelde woorden, waardoor je tekst makkelijk te lezen is. Goed gedaan!"],"Word complexity":["Woord complexiteit"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s van de woorden in je tekst wordt als complex beschouwd. %3$sProbeer om kortere en meer bekende woorden te gebruiken om de leesbaarheid te verbeteren%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sUitlijning%3$s: er is een lange sectie met tekst die uitgelijnd is in het midden. %2$sWe raden aan deze links uit te lijnen%3$s.","%1$sUitlijning%3$s: er zijn %4$s lange secties met tekst die uit het midden zijn uitgelijnd. %2$sWe raden aan deze links uit te lijnen%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sUitlijning%3$s: er is een lange sectie met tekst die uitgelijnd is in het midden. %2$sWe raden aan deze rechts uit te lijnen%3$s.","%1$sUitlijning%3$s: er zijn %4$s lange secties tekst die uit het midden zijn uitgelijnd. %2$sWe raden aan om ze rechts uit te lijnen%3$s."],"Select image":["Selecteer afbeelding"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Misschien weet je het niet eens, maar er kunnen pagina's op je website zijn die geen links krijgen. Dat is een SEO probleem, want het is moeilijk voor zoekmachines om pagina's te vinden die geen links krijgen. Het is dus moeilijker voor ze om te scoren. We noemen deze pagina's verweesde inhoud. In deze training vinden we de verweesde inhoud op je website en helpen we je om er snel links aan toe te voegen, zodat het een kans krijgt om te scoren!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Tijd om links toe te voegen! Hieronder zie je een lijst met je verweesde artikelen. Onder elk artikel staan suggesties voor gerelateerde pagina's waarvan je een link kunt toevoegen. Wanneer je de link toevoegt, zorg er dan voor dat je hem in een relevante zin plaatst die gerelateerd is aan je verweesde artikel. Blijf links toevoegen aan elk van de verweesde artikels tot je tevreden bent met het aantal links dat naar hen verwijst."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Tijd om wat links toe te voegen! Hieronder zie je een lijst met je cornerstone. Onder elke cornerstone staan suggesties voor artikelen waar je een link van zou kunnen toevoegen. Wanneer je de link toevoegt, zorg er dan voor dat je hem in een relevante zin plaatst die gerelateerd is aan je cornerstone artikel. Blijf links toevoegen van zoveel gerelateerde artikelen als je nodig hebt, totdat je cornerstones de meeste interne links hebben die ernaar verwijzen."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Sommige artikelen op je site zijn %1$sde%2$s belangrijkste. Ze beantwoorden vragen van mensen en lossen hun problemen op. Ze verdienen het dus om te worden gerangschikt! Bij %3$s noemen we deze artikelen cornerstones. Een van de manieren om ze te laten scoren is om er voldoende links naar te laten verwijzen. Meer links geven zoekmachines het signaal dat deze artikelen belangrijk en waardevol zijn. In deze training helpen we je om links toe te voegen aan je cornerstone artikelen!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Zodra je wat meer tekst hebt toegevoegd, kunnen we je vertellen wat het formaliteit niveau van je tekst is."],"Overall, your text appears to be %1$s%3$s%2$s.":["Over het algemeen lijkt je tekst %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["De Zapier integratie wordt verwijderd uit %1$s in 20.7 (releasedatum 9 mei). Als je vragen hebt, neem dan contact op met %2$s."],"Maximum heading level":["Maximum koptekst niveau"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Je hebt Link suggesties uitgeschakeld, wat nodig is om gerelateerde links te laten werken. Als je gerelateerde links wil toevoegen, ga dan naar Website eigenschappen en schakel Link suggesties in."],"Schema":["Schema"],"Meta tags":["Meta tags"],"Not available":["Niet beschikbaar"],"Checks":["Checks"],"Focus Keyphrase":["Focus Keyphrase"],"Good":["Goed"],"No index":["Noindex"],"Front-end SEO inspector":["Front-end SEO inspector"],"Focus keyphrase not set":["Focus keyphrase niet ingevuld"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Zodra je je zap hebt gepubliceerd in je %s dashboard, kan je controleren of hij actief is en verbonden met je website."],"Reset API key":["Reset API sleutel"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Je bent momenteel verbonden met %s met de volgende API sleutel. Als je opnieuw verbinding wilt maken met een andere API sleutel, kun je hieronder je sleutel resetten."],"Your API key":["Je API sleutel"],"Go to your %s dashboard":["Ga naar je %s dashboard"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Je bent succesvol verbonden met %1$s! Om je zap te beheren, ga je naar je %2$s dashboard."],"Your %s dashboard":["Je %s dashboard"],"Verify connection":["Controleer verbinding"],"Verify your connection":["Controleer je verbinding"],"Create a Zap":["Maak een zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Log in op je %1$s account en begin met het maken van je eerste zap! Merk op dat je maar 1 zap kunt maken met een trigger event uit %2$s. Binnen deze zap kun je een of meer acties kiezen."],"%s API key":["%s API key"],"You'll need this API key later on in %s when you're setting up your Zap.":["Deze API sleutel heb je later nodig in %s bij het opzetten van je zap."],"Copy your API key":["Kopieer je API sleutel"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Om een verbinding op te zetten, zorg ervoor dat je de gegeven API sleutel hieronder kopieert en gebruikt om een zap te maken en aan te zetten binnen je %s account."],"Manage %s settings":["Beheer %s instellingen"],"Connect to %s":["Maak verbinding met %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Let op: Om deze workout goed te laten werken, moet je je SEO gegevens optimaliseren. Beheerders kunnen dit doen via %1$sSEO > Tools%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Je hebt links toegevoegd naar je verweesde artikelen, en je hebt de artikelen opgeruimd die niet langer relevant waren. Goed gedaan! Bekijk de samenvatting hieronder en vier wat je hebt bereikt!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Kijk kritisch naar de inhoud van deze lijst en breng de nodige updates aan. Als je hulp nodig hebt bij het bijwerken, hebben we een heel %1$snuttig blogbericht dat je helemaal op weg kan helpen%2$s (klik om te openen in een nieuwe tab)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sMeer begeleiding nodig? we hebben elke stap in meer detail behandeld in de volgende gids: %2$sHoe gebruik je de %7$s verweesde inhoud workout%3$s%4$s %5$s .%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Je hebt zojuist je beste inhoud makkelijk vindbaar gemaakt, en meer kans om te scoren! Goed gedaan! Van tijd tot tijd, vergeet niet om te controleren of je cornerstones genoeg links krijgen!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Kijk eens naar de lijst hieronder. Hebben je cornerstones (gemarkeerd met %1$s) de meeste interne links die ernaartoe wijzen? Klik op de optimaliseren knop als je denkt dat een cornerstone meer links nodig heeft. Dat zal het artikel naar de volgende stap brengen."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Hebben al je cornerstones groene kogels? Voor het beste resultaat kun je overwegen degene die dat niet hebben te bewerken!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Met welke artikelen wil je het hoogst ranken? Welke artikelen zou je publiek het meest nuttig en compleet vinden? Klik op het pijltje en selecteer de artikelen die aan die criteria voldoen. De artikelen die je op deze manier selecteert, markeren we automatisch als cornerstone."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sMeer hulp nodig? We lichten elke stap uitgebreid toe in: %2$sHoe gebruik je de %7$s cornerstone workout%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast inhoudsopgave"],"Yoast Related Links":["Yoast gerelateerde links"],"Finish optimizing":["Optimaliseren afronden"],"You've finished adding links to this article.":["Je bent klaar met het toevoegen van links aan dit artikel."],"Optimize":["Optimaliseer"],"Added to next step":["Toegevoegd aan volgende stap"],"Choose cornerstone articles...":["Kies cornerstone artikelen..."],"Loading data...":["Gegevens laden..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Je hebt nog geen artikelen opgeschoond of bijgewerkt met deze workout. Zodra je dit hebt gedaan, wordt hier een samenvatting van je werk weergegeven."],"Skipped":["Overgeslagen"],"Hidden from search engines.":["Verborgen voor zoekmachines."],"Removed":["Verwijderd"],"Improved":["Verbeterd"],"Resolution":["Oplossing"],"Loading redirect options...":["Redirect opties aan het laden ..."],"Remove and redirect":["Verwijder en redirect"],"Custom url:":["Aangepaste URL:"],"Related article:":["Gerelateerd artikel:"],"Home page:":["Homepage:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Je staat op het punt om %1$s%2$s%3$s te verwijderen. Om 404s te voorkomen, zou je het moeten redirecten naar een andere pagina op je site. Waar wil je het naartoe redirecten?"],"SEO Workout: Remove article":["SEO Workout: Verwijder artikel"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Alles ziet er goed uit! We hebben geen artikelen op je website gevonden die ouder zijn dan zes maanden en die te weinig links op je website ontvangen. Kom hier later terug voor nieuwe suggesties!"],"Hide from search engines":["Verberg voor zoekmachines"],"Improve":["Verbeter"],"Are you sure you wish to hide this article from search engines?":["Weet je zeker dat je dit artikel voor zoekmachines wilt verbergen?"],"Action":["Actie"],"You've hidden this article from search engines.":["Je hebt dit artikel verborgen voor zoekmachines."],"You've removed this article.":["Je hebt dit artikel verwijderd."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Je hebt op dit moment nog geen artikelen geselecteerd om te verbeteren. Selecteer een paar artikelen in de vorige stappen om links aan toe te voegen en wij zullen je link suggesties hier laten zien."],"Loading link suggestions...":["Linksuggesties aan het laden ..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["We hebben geen suggesties voor dit artikel gevonden, maar je kan natuurlijk nog steeds links toevoegen naar artikelen waarvan je denkt dat ze gerelateerd zijn."],"Skip":["Overslaan"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Je hebt nog geen artikelen geselecteerd voor deze stap. Dat kan in de vorige stap."],"Is it up-to-date?":["Is het actueel?"],"Last Updated":["Laatst Geüpdatet"],"You've moved this article to the next step.":["Je hebt dit artikel verplaatst naar de volgende stap."],"Unknown":["Onbekend"],"Clear summary":["Samenvatting leegmaken"],"Add internal links towards your orphaned articles.":["Voeg interne links toe naar je orphaned artikelen."],"Should you update your article?":["Moet je je artikel bijwerken?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Je website kan veel inhoud bevatten die je ooit hebt gemaakt en sindsdien nooit meer hebt bekeken. Het is belangrijk om die pagina's door te nemen en je af te vragen of die inhoud nog relevant is voor je website. Moet je het verbeteren of verwijderen?"],"Start: Love it or leave it?":["Start: Houden of laten?"],"Clean up your unlinked content to make sure people can find it":["Ruim je niet-gelinkte inhoud op om ervoor te zorgen dat mensen deze kunnen vinden"],"I've finished this workout":["Ik heb deze workout afgerond"],"Reset this workout":["De workout resetten"],"Well done!":["Goed gedaan! "],"Add internal links towards your cornerstones":["Voeg interne links naar je cornerstones toe"],"Check the number of incoming internal links of your cornerstones":["Controleer het aantal inkomende interne links van je cornerstones"],"Start: Choose your cornerstones!":["Start: kies je cornerstones!"],"The cornerstone approach":["De cornerstone aanpak"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Let op: om deze training goed te laten werken en om je linksuggesties te geven, moet je de SEO-tool voor gegevensoptimalisatie gebruiken. Beheerders kunnen dit uitvoeren onder %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Let op: Je beheerder heeft de cornerstone functionaliteit uitgeschakeld in de SEO instellingen. Als je deze training wil gebruiken, moet deze zijn ingeschakeld."],"I've finished this step":["Ik heb deze stap voltooid"],"Revise this step":["Herzie deze stap"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["We hebben geen interne links op je pagina's kunnen vinden. Of je hebt nog geen interne links aan je inhoud toegevoegd, of Yoast SEO heeft ze niet geïndexeerd. Je kan Yoast SEO je links laten indexeren door de SEO-gegevensoptimalisatie onder SEO > Tools uit te voeren."],"Incoming links":["Inkomende links"],"Edit to add link":["Bewerk om een link toe te voegen"],"%s incoming link":["%s inkomende link","%s inkomende links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Je hebt momenteel geen artikelen gemarkeerd als cornerstone. Wanneer je je artikelen als cornerstone markeert, worden ze hier weergegeven."],"Focus keyphrase":["Focus keyphrase"],"Article":["Artikel"],"Readability score":["Leesbaarheidsscore"],"SEO score":["SEO score"],"Copy failed":["Kopiëren mislukt"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Verbeter je ranking voor al je cornerstones door deze %1$sstapsgewijze workout te gebruiken!%2$s"],"Rank with articles you want to rank with":["Rank met artikelen waarmee je wilt ranken"],"Descriptive text":["Beschrijvende tekst"],"Show the descriptive text":["Laat de beschrijvende tekst zien"],"Show icon":["Toon icoon"],"Yoast Estimated Reading Time":["Yoast geschatte leestijd"],"Shows an estimated reading time based on the content length.":["Toont een geschatte leestijd op basis van de inhoudslengte."],"reading time":["leestijd"],"content length":["inhoudslengte"],"Estimated reading time:":["Geschatte leestijd:"],"minute":["minuut","minuten"],"Settings":["Instellingen"],"OK":["OK"],"Close":["Sluit"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["De eerste echte alles-in-één SEO-oplossing voor WordPress, inclusief inhoudsanalyse per pagina, XML-sitemaps en veel meer."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Verweesde inhoud"],"Synonyms":["Synoniemen"],"Internal linking suggestions":["Interne link suggesties"],"Enter a related keyphrase to calculate the SEO score":["Vul een focus keyphrase in om de SEO score te berekenen"],"Related keyphrase":["Gerelateerde keyphrase"],"Add related keyphrase":["Voeg een gerelateerde keyphrase toe"],"Analysis results":["Analyse-resultaten"],"Help on choosing the perfect keyphrase":["Hulp bij het kiezen van de perfecte focus keyphrase"],"Help on keyphrase synonyms":["Hulp met keyphrase synoniemen"],"Keyphrase":["Keyphrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nieuwe URL: {{link}}%s{{/link}}"],"Undo":["Ongedaan maken"],"Redirect created":["Redirect aangemaakt"],"%s just created a redirect from the old URL to the new URL.":["%s heeft een redirect gemaakt van de oude URL naar de nieuwe URL."],"Old URL: {{link}}%s{{/link}}":["Oude URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Keyphrase synoniemen"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Er is een fout opgetreden: de Premium SEO analyse werkt niet zoals verwacht. Activeer {{activateLink}}je abonnement in MyYoast{{/activateLink}} en vervolgens {{reloadButton}} deze pagina opnieuw te laden{{/reloadButton}} om het goed te laten werken."],"seo":["seo"],"internal linking":["intern linken"],"site structure":["websitestructuur"],"We could not find any relevant articles on your website that you could link to from your post.":["We hebben geen relevante artikelen gevonden op je website waar je naartoe kan linken vanuit je bericht."],"Load suggestions":["Laad suggesties"],"Refresh suggestions":["Ververs suggesties"],"Write list…":["Maak lijst..."],"Adds a list of links related to this page.":["Voegt een lijst met links toe gerelateerd aan deze pagina."],"related posts":["gerelateerde berichten"],"related pages":["gerelateerde pagina's"],"Adds a table of contents to this page.":["Voegt een inhoudsopgave toe aan deze pagina."],"links":["links"],"toc":["toc"],"Copy link":["Link kopieëren"],"Copy link to suggested article: %s":["Kopieer de link naar het voorgestelde artikel: %s"],"Add a title to your post for the best internal linking suggestions.":["Voeg een titel toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Add a metadescription to your post for the best internal linking suggestions.":["Voeg een metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Voeg een titel en een metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Also, add a title to your post for the best internal linking suggestions.":["Voeg ook een titel toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Voeg ook een metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Voeg ook een titel en metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Zodra je wat meer inhoud hebt toegevoegd, geven we je hier een lijst met gerelateerde content waarnaar je zou kunnen linken in je bericht."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Overweeg om naar andere relevante berichten of pagina's op je website te linken om de structuur van je site te verbeteren."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Het duurt een paar seconden om je een lijst met gerelateerde inhoud te tonen waarnaar je kan linken. De suggesties worden hier weergegeven zodra we ze hebben."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Lees onze gids over interne links voor SEO{{/a}} voor meer informatie."],"Copied!":["Gekopieerd!"],"Not supported!":["Niet ondersteund!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Probeer je meerdere gerelateerde keyphrases te gebruiken? Je zou ze apart moeten toevoegen."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Je sleutelzin is te lang. Het kan maximaal 191 tekens lang zijn."],"Add as related keyphrase":["Toevoegen als gerelateerde keyphrase"],"Added!":["Toegevoegd!"],"Remove":["Verwijderen"],"Table of contents":["Inhoudsopgave"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["We moeten de SEO-gegevens van je site optimaliseren, zodat we je de beste %1$sinterne linksuggesties%2$s kunnen tonen. %3$sStart SEO-gegevensoptimalisatie%4$s"],"Create a Zap in %s":["Maak een Zap in %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_NL.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_NL.json new file mode 100644 index 00000000..d5f2d26a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-nl_NL.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"nl"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["De aanvraag kwam terug met de volgende fout: \"%s\""],"X share preview":["X delen voorbeeld"],"AI X title generator":["AI X titelgenerator"],"AI X description generator":["AI X beschrijving generator"],"X preview":["X voorvertoning"],"Please enter a valid focus keyphrase.":["Voer een geldige focus keyphrase in."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Om deze functie te gebruiken, moet je site openbaar toegankelijk zijn. Dit geldt voor zowel testsites als gevallen waar je REST API met een wachtwoord is beveiligd. Zorg ervoor dat je site toegankelijk is voor het publiek en probeer het opnieuw. Als het probleem aanhoudt, neem dan %1$scontact op met ons ondersteuningsteam%2$s."],"Yoast AI cannot reach your site":["Yoast AI kan je site niet bereiken"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Om toegang te krijgen tot deze functie heb je actieve %2$s en %3$s abonnementen nodig. %5$sactiveer je abonnementen in %1$s%6$s of %7$svraag een nieuwe aan%4$s%8$s. Vernieuw daarna deze pagina zodat de functie correct werkt. Dit kan tot 30 seconden duren."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["De AI titelgenerator vereist dat de SEO analyse is ingeschakeld voor gebruik. Om deze in te schakelen, navigeer je naar %2$sSite functies van %1$s%3$s, schakel je de SEO analyse in en klik je op 'Wijzigingen opslaan'. Als de SEO analyse is uitgeschakeld in je WordPress gebruikersprofiel, ga dan naar je profiel en schakel het daar in. Neem contact op met je beheerder als je geen toegang hebt tot deze instellingen."],"Social share preview":["Voorbeeld social delen"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Om de Yoast AI functie te kunnen blijven gebruiken, vragen we je om de frequentie van je aanvragen te verlagen. Ons %1$shulpartikel%2$s biedt richtlijnen voor het effectief plannen en temporiseren van je aanvragen voor een geoptimaliseerde workflow."],"You've reached the Yoast AI rate limit.":["Je hebt de Yoast AI rate limiet bereikt."],"Allow":["Toestaan"],"Deny":["Weigeren"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Om deze video te zien, moet je %1$s toestaan om ingesloten video's van %2$s te laden."],"Text generated by AI may be offensive or inaccurate.":["Door AI gegenereerde tekst kan beledigend of onnauwkeurig zijn."],"(Opens in a new browser tab)":["(Opent in een nieuwe browsertab)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Versnel je workflow met generatieve AI. Krijg hoogwaardige titel en beschrijving suggesties voor je zoekopdracht en sociale weergave. %1$sMeer informatie%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Genereer titels & beschrijvingen met Yoast AI!"],"New to %1$s":["Nieuw bij %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Ik ga akkoord met de %1$sDienstvoorwaarden%2$s & %3$s Privacybeleid%4$s van de Yoast AI dienst. Dit houdt ook in dat ik toestemming geef voor het verzamelen en gebruiken van gegevens om de gebruikerservaring te verbeteren."],"Start generating":["Begin met genereren"],"Yes, revoke consent":["Ja, toestemming intrekken"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Als je je toestemming intrekt, heb je geen toegang meer tot de Yoast AI functies. Weet je zeker dat je je toestemming wil intrekken?"],"Something went wrong, please try again later.":["Er is iets misgegaan, probeer het later nog eens."],"Revoke AI consent":["AI toestemming intrekken"],"AI title generator":["AI titel generator"],"AI description generator":["AI beschrijving generator"],"AI social title generator":["AI social titelgenerator"],"AI social description generator":["AI social beschrijving generator"],"Dismiss":["Negeren"],"Don’t show again":["Niet meer laten zien"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: Verbeter de nauwkeurigheid van je gegenereerde AI titels door meer inhoud op je pagina te schrijven."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: Verbeter de nauwkeurigheid van je gegenereerde AI beschrijvingen door meer inhoud te schrijven op je pagina."],"Try again":["Probeer het opnieuw"],"Social preview":["Sociaal voorbeeld"],"Desktop result":["Desktop resultaat"],"Mobile result":["Resultaat op mobiel"],"Apply %s description":[],"Apply %s title":[],"Next":["Volgende"],"Previous":["Vorige"],"Generate 5 more":["Genereer nog 5"],"Google preview":["Google voorbeeld"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vanwege de strenge ethische richtlijnen van OpenAI en het %1$sgebruiksbeleid%2$s kunnen we geen SEO titels voor je pagina genereren. Als je van plan bent om AI te gebruiken, vermijd dan het gebruik van expliciete, gewelddadige of seksueel expliciete inhoud. %3$sLees meer over hoe je je pagina kunt configureren om de beste resultaten met AI te behalen%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vanwege de strenge ethische richtlijnen van OpenAI en het beleid voor %1$sgebruik%2$s kunnen we geen metabeschrijvingen voor je pagina genereren. Als je van plan bent AI te gebruiken, vermijd dan expliciete, gewelddadige of seksueel expliciete inhoud. %3$sLees meer over hoe je je pagina kunt configureren om de beste resultaten met AI te behalen%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Om toegang te krijgen tot deze functie heb je een actief %1$s abonnement nodig. Gelieve %3$sje abonnement te activeren in %2$s%4$s of %5$seen nieuw %1$s abonnement te nemen%6$s. Klik daarna op de knop om deze pagina te verversen zodat de functie correct werkt. Dit kan tot 30 seconden duren."],"Refresh page":["Pagina vernieuwen"],"Not enough content":["Niet genoeg inhoud"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Probeer het later nog eens. Als het probleem zich blijft voordoen, neem dan %1$scontact op met ons ondersteuningsteam%2$s!"],"Something went wrong":["Er ging iets mis"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Er lijkt een time-out van de verbinding te zijn opgetreden. Controleer je internetverbinding en probeer het later nog eens. Als het probleem zich blijft voordoen, neem dan %1$scontact op met ons ondersteuningsteam.%2$s"],"Connection timeout":["Time-out verbinding"],"Use AI":["Gebruik AI"],"Close modal":["Modal sluiten"],"Learn more about AI (Opens in a new browser tab)":["Meer informatie over AI (Opent in een nieuw browserscherm)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitle%3$s: je pagina heeft nog geen titel. %2$sVoeg er een toe%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitle%2$s: je pagina heeft een titel. Goed gedaan!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sKeyphrase verdeling%3$s: %2$sGebruik je keyphrases of synoniemen in de tekst zodat we de keyphrase dichtheid kunnen bepalen%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sKeyphrase verdeling%2$s: Goed gedaan!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase verdeling%3$s: Slecht verdeeld. In sommige delen van je tekst komen de keyphrase of synoniemen niet voor. %2$sVerdeel ze beter over de tekst%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sKeyphrase verdeling%3$s: Zeer slecht verdeeld. In sommige delen van je tekst komen de keyphrase of synoniemen niet voor. %2$sVerdeel ze beter over de tekst%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: je gebruikt niet te veel moeilijke woorden, waardoor je tekst makkelijk te lezen is. Goed gedaan!"],"Word complexity":["Woord complexiteit"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s van de woorden in je tekst wordt als moeilijk beschouwd. %3$sGebruik kortere en meer bekende woorden om de leesbaarheid te verbeteren%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sUitlijning%3$s: Er is een lange sectie met tekst die uitgelijnd is in het midden. %2$sWe raden aan deze links uit te lijnen%3$s.","%1$sUitlijning%3$s: er zijn %4$s lange secties met tekst die uit het midden zijn uitgelijnd. %2$sWe raden aan deze links uit te lijnen%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sUitlijning%3$s: er is een lange sectie met tekst die uitgelijnd is in het midden. %2$sWe raden aan deze rechts uit te lijnen%3$s.","%1$sUitlijning%3$s: er zijn %4$s lange secties met tekst die uit het midden zijn uitgelijnd. %2$sWe raden aan om ze rechts uit te lijnen%3$s."],"Select image":["Selecteer afbeelding"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Misschien weet je het niet eens, maar er kunnen pagina's op je site zijn die geen links krijgen. Dat is een SEO probleem, want het is moeilijk voor zoekmachines om pagina's te vinden die geen links krijgen. Het is dus moeilijker voor ze om te scoren. We noemen deze pagina's verweesde inhoud. In deze training vinden we de verweesde inhoud op je site en helpen we je om er snel links aan toe te voegen, zodat het een kans krijgt om te scoren!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Tijd om links toe te voegen! Hieronder zie je een lijst met je verweesde artikelen. Onder elk artikel staan suggesties voor gerelateerde pagina's waarvan je een link kunt toevoegen. Wanneer je de link toevoegt, zorg er dan voor dat je hem in een relevante zin plaatst die gerelateerd is aan je verweesde artikel. Blijf links toevoegen aan elk van de verweesde artikels tot je tevreden bent met het aantal links dat naar hen verwijst."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Tijd om wat links toe te voegen! Hieronder zie je een lijst met je cornerstone. Onder elke cornerstone staan suggesties voor artikelen waar je een link van zou kunnen toevoegen. Wanneer je de link toevoegt, zorg er dan voor dat je hem in een relevante zin plaatst die gerelateerd is aan je cornerstone artikel. Blijf links toevoegen van zoveel gerelateerde artikelen als je nodig hebt, totdat je cornerstones de meeste interne links hebben die ernaar verwijzen."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Sommige artikelen op je site zijn %1$sde%2$s belangrijkste. Ze beantwoorden vragen van mensen en lossen hun problemen op. Ze verdienen het dus om te worden gerangschikt! Bij %3$s noemen we deze artikelen cornerstones. Een van de manieren om ze te laten scoren is om er voldoende links naar te laten verwijzen. Meer links geven zoekmachines het signaal dat deze artikelen belangrijk en waardevol zijn. In deze training helpen we je om links toe te voegen aan je cornerstone artikelen!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Zodra je wat meer tekst hebt toegevoegd, kunnen we je vertellen wat het formaliteit niveau van je tekst is."],"Overall, your text appears to be %1$s%3$s%2$s.":["Over het algemeen lijkt je tekst %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["De Zapier integratie wordt verwijderd uit %1$s in 20.7 (releasedatum 9 mei). Als je vragen hebt, neem dan contact op met %2$s."],"Maximum heading level":["Maximum koptekst niveau"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Je hebt Link suggesties uitgeschakeld, wat nodig is om gerelateerde links te laten werken. Als je gerelateerde links wil toevoegen, ga dan naar Site eigenschappen en schakel Link suggesties in."],"Schema":["Schema"],"Meta tags":["Meta tags"],"Not available":["Niet beschikbaar"],"Checks":["Checks"],"Focus Keyphrase":["Focus Keyphrase"],"Good":["Goed"],"No index":["Noindex"],"Front-end SEO inspector":["Front-end SEO inspector"],"Focus keyphrase not set":["Focus keyphrase niet ingevuld"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Zodra je je zap hebt gepubliceerd in je %s dashboard, kan je controleren of hij actief is en verbonden met je site."],"Reset API key":["Reset API sleutel"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Je bent momenteel verbonden met %s met de volgende API-sleutel. Als je opnieuw verbinding wil maken met een andere API-sleutel, kun je hieronder je sleutel resetten."],"Your API key":["Je API-sleutel"],"Go to your %s dashboard":["Ga naar je %s dashboard"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Je bent succesvol verbonden met %1$s! Om je zap te beheren, ga naar je %2$s dashboard."],"Your %s dashboard":["Je %s dashboard"],"Verify connection":["Controleer verbinding"],"Verify your connection":["Controleer je verbinding"],"Create a Zap":["Maak een zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Log in op je %1$s account en begin met het maken van je eerste zap! Merk op dat je maar 1 zap kan aanmaken met een trigger event van %2$s. Binnen deze zap kan je één of meerdere acties kiezen."],"%s API key":["%s API-sleutel"],"You'll need this API key later on in %s when you're setting up your Zap.":["Je hebt deze AP-sleutel later in %s nodig wanneer je je zap instelt."],"Copy your API key":["Kopieer je API-sleutel"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Om een verbinding op te zetten, zorg ervoor dat je de gegeven API-sleutel hieronder kopieert en gebruikt om een zap te maken en aan te zetten binnen je %s account."],"Manage %s settings":["Beheer %s instellingen"],"Connect to %s":["Maak verbinding met %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Let op: Om deze workout goed te laten werken, moet je je SEO-gegevens optimaliseren. Beheerders kunnen dit doen via %1$sSEO > Gereedschap%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Je hebt links toegevoegd naar je verweesde artikelen, en je hebt de artikelen opgeruimd die niet langer relevant waren. Goed gedaan! Bekijk de samenvatting hieronder en vier wat je hebt bereikt!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Kijk kritisch naar de inhoud van deze lijst en breng de nodige updates aan. Als je hulp nodig hebt bij het updaten, hebben we een heel %1$snuttig blogbericht dat je helemaal op weg kan helpen%2$s (klik om te openen in een nieuwe tab)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sMeer begeleiding nodig? we hebben elke stap in meer detail behandeld in de volgende gids: %2$sHoe gebruik je de %7$s verweesde inhoud workout%3$s%4$s %5$s .%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Je hebt zojuist je beste inhoud makkelijk vindbaar gemaakt, en meer kans om te scoren! Goed gedaan! Van tijd tot tijd, vergeet niet om te controleren of je cornerstones genoeg links krijgen!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Bekijk de lijst hieronder. Ontvangen je cornerstones (aangegeven met %1$s) de meeste interne links? Klik op de knop Optimize als je denkt dat een cornerstone meer links nodig heeft. Het artikel wordt dan verplaatst naar de volgende stap. "],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Hebben al je cornerstones groene bolletjes? Voor de beste resultaten kijk je of je de artikelen zonder groene bolletjes nog kunt verbeteren."],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Met welke artikelen wil je het hoogst ranken? Welke artikelen zou je publiek het meest nuttig en compleet vinden? Klik op het pijltje en selecteer de artikelen die aan die criteria voldoen. De artikelen die je op deze manier selecteert, markeren we automatisch als cornerstone."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sMeer hulp nodig? We lichten elke stap uitgebreid toe in: %2$sHoe gebruik je de %7$s cornerstone workout%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast inhoudsopgave"],"Yoast Related Links":["Yoast gerelateerde links"],"Finish optimizing":["Optimaliseren afronden"],"You've finished adding links to this article.":["Je bent klaar met het toevoegen van links aan dit artikel."],"Optimize":["Optimaliseer"],"Added to next step":["Toegevoegd aan volgende stap"],"Choose cornerstone articles...":["Kies cornerstone artikelen..."],"Loading data...":["Gegevens laden..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Je hebt nog geen artikelen opgeschoond of bijgewerkt met deze workout. Zodra je dit hebt gedaan, wordt hier een samenvatting van je werk weergegeven."],"Skipped":["Overgeslagen"],"Hidden from search engines.":["Verborgen voor zoekmachines."],"Removed":["Verwijderd"],"Improved":["Verbeterd"],"Resolution":["Oplossing"],"Loading redirect options...":["Redirect opties aan het laden ..."],"Remove and redirect":["Verwijder en redirect"],"Custom url:":["Aangepaste URL:"],"Related article:":["Gerelateerd artikel:"],"Home page:":["Homepage:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Je staat op het punt om %1$s%2$s%3$s te verwijderen. Om 404s te voorkomen, zou je het moeten redirecten naar een andere pagina op je site. Waar wil je het naartoe redirecten?"],"SEO Workout: Remove article":["SEO Workout: Verwijder artikel"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Alles ziet er goed uit! We hebben geen artikelen op je site gevonden die ouder zijn dan zes maanden en die te weinig links op je site ontvangen. Kom hier later terug voor nieuwe suggesties!"],"Hide from search engines":["Verberg voor zoekmachines"],"Improve":["Verbeter"],"Are you sure you wish to hide this article from search engines?":["Weet je zeker dat je dit artikel voor zoekmachines wilt verbergen?"],"Action":["Actie"],"You've hidden this article from search engines.":["Je hebt dit artikel verborgen voor zoekmachines."],"You've removed this article.":["Je hebt dit artikel verwijderd."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Je hebt op dit moment nog geen artikelen geselecteerd om te verbeteren. Selecteer een paar artikelen in de vorige stappen om links aan toe te voegen en wij zullen je link suggesties hier laten zien."],"Loading link suggestions...":["Linksuggesties aan het laden ..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["We hebben geen suggesties voor dit artikel gevonden, maar je kan natuurlijk nog steeds links toevoegen naar artikelen waarvan je denkt dat ze gerelateerd zijn."],"Skip":["Overslaan"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Je hebt nog geen artikelen geselecteerd voor deze stap. Dat kan in de vorige stap."],"Is it up-to-date?":["Is het actueel?"],"Last Updated":["Laatst bijgewerkt"],"You've moved this article to the next step.":["Je hebt dit artikel verplaatst naar de volgende stap."],"Unknown":["Onbekend"],"Clear summary":["Samenvatting leegmaken"],"Add internal links towards your orphaned articles.":["Voeg interne links toe naar je orphaned artikelen."],"Should you update your article?":["Moet je je artikel bijwerken?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Je site kan veel inhoud bevatten die je ooit hebt gemaakt en sindsdien nooit meer hebt bekeken. Het is belangrijk om die pagina's door te nemen en je af te vragen of die inhoud nog relevant is voor je site. Moet je het verbeteren of verwijderen?"],"Start: Love it or leave it?":["Start: Houden of laten?"],"Clean up your unlinked content to make sure people can find it":["Ruim je niet-gelinkte inhoud op om ervoor te zorgen dat mensen deze kunnen vinden"],"I've finished this workout":["Ik heb deze workout afgerond"],"Reset this workout":["De workout resetten"],"Well done!":["Goed gedaan! "],"Add internal links towards your cornerstones":["Voeg interne links naar je cornerstones toe"],"Check the number of incoming internal links of your cornerstones":["Controleer het aantal inkomende interne links van je cornerstones"],"Start: Choose your cornerstones!":["Begin: kies je cornerstones!"],"The cornerstone approach":["De cornerstone aanpak"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Let op: om deze workout goed te laten werken en je linking suggesties te laten doen, moet je de SEO gegevens optimalisatie tool draaien. Beheerders kunnen deze uitvoeren onder %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Let op: je beheerder heeft de cornerstone functionaliteit uitgeschakeld in de SEO instellingen. Als je deze training wil gebruiken, moet deze zijn ingeschakeld."],"I've finished this step":["Ik heb deze stap voltooid"],"Revise this step":["Herzie deze stap"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["We hebben geen interne links op je pagina's kunnen vinden. Of je hebt nog geen interne links aan je inhoud toegevoegd, of Yoast SEO heeft ze niet geïndexeerd. Je kan Yoast SEO je links laten indexeren door de SEO gegevensoptimalisatie onder SEO > Tools uit te voeren."],"Incoming links":["Inkomende links"],"Edit to add link":["Bewerk om een link toe te voegen"],"%s incoming link":["%s inkomende link","%s inkomende links"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Je hebt momenteel geen artikelen gemarkeerd als cornerstone. Wanneer je je artikelen als cornerstone markeert, worden ze hier weergegeven."],"Focus keyphrase":["Focus keyphrase"],"Article":["Artikel"],"Readability score":["Leesbaarheidsscore"],"SEO score":["SEO score"],"Copy failed":["Kopiëren mislukt"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Verbeter je ranking voor al je cornerstones door deze %1$sstapsgewijze workout te gebruiken!%2$s"],"Rank with articles you want to rank with":["Rank met artikelen waarmee je wilt ranken"],"Descriptive text":["Beschrijvende tekst"],"Show the descriptive text":["Laat de beschrijvende tekst zien"],"Show icon":["Toon icoon"],"Yoast Estimated Reading Time":["Yoast geschatte leestijd"],"Shows an estimated reading time based on the content length.":["Toont een geschatte leestijd op basis van de inhoudslengte."],"reading time":["leestijd"],"content length":["inhoudslengte"],"Estimated reading time:":["Geschatte leestijd:"],"minute":["minuut","minuten"],"Settings":["Instellingen"],"OK":["OK"],"Close":["Sluit"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["De eerste echte alles-in-één SEO-oplossing voor WordPress, inclusief inhoudsanalyse per pagina, XML-sitemaps en veel meer."],"Type":["Type"],"Team Yoast":["Team Yoast"],"Orphaned content":["Verweesde content"],"Synonyms":["Synoniemen"],"Internal linking suggestions":["Interne link suggesties"],"Enter a related keyphrase to calculate the SEO score":["Vul een focus keyphrase in om de SEO score te berekenen"],"Related keyphrase":["Gerelateerde keyphrase"],"Add related keyphrase":["Voeg een gerelateerde keyphrase toe"],"Analysis results":["Analyse-resultaten"],"Help on choosing the perfect keyphrase":["Hulp bij het kiezen van de perfecte focus keyphrase"],"Help on keyphrase synonyms":["Hulp met keyphrase synoniemen"],"Keyphrase":["Keyphrase"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nieuwe URL: {{link}}%s{{/link}}"],"Undo":["Ongedaan maken"],"Redirect created":["Redirect aangemaakt"],"%s just created a redirect from the old URL to the new URL.":["%s heeft een redirect gemaakt van de oude URL naar de nieuwe URL."],"Old URL: {{link}}%s{{/link}}":["Oude URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Keyphrase synoniemen"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Er is een fout opgetreden: de Premium SEO analyse werkt niet zoals verwacht. Activeer je {{activateLink}} abonnement in MyYoast{{/activateLink}} en vervolgens {{reloadButton}} deze pagina opnieuw te laden{{/reloadButton}} om het goed te laten werken."],"seo":["seo"],"internal linking":["intern linken"],"site structure":["sitestructuur"],"We could not find any relevant articles on your website that you could link to from your post.":["We hebben geen relevante artikelen gevonden op je website waar je naartoe kan linken vanuit je bericht."],"Load suggestions":["Laad suggesties"],"Refresh suggestions":["Ververs suggesties"],"Write list…":["Maak lijst..."],"Adds a list of links related to this page.":["Voegt een lijst met links toe gerelateerd aan deze pagina."],"related posts":["gerelateerde berichten"],"related pages":["gerelateerde pagina's"],"Adds a table of contents to this page.":["Voegt een inhoudsopgave toe aan deze pagina."],"links":["links"],"toc":["toc"],"Copy link":["Link kopieëren"],"Copy link to suggested article: %s":["Kopieer de link naar het voorgestelde artikel: %s"],"Add a title to your post for the best internal linking suggestions.":["Voeg een titel toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Add a metadescription to your post for the best internal linking suggestions.":["Voeg een metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Voeg een titel en een metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Also, add a title to your post for the best internal linking suggestions.":["Voeg ook een titel toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Voeg ook een metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Voeg ook een titel en metabeschrijving toe aan je bericht om de beste suggesties voor interne links te krijgen."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Zodra je wat meer inhoud hebt toegevoegd, geven we je hier een lijst met gerelateerde content waarnaar je zou kunnen linken in je bericht."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Overweeg om naar andere relevante berichten of pagina's op je website te linken om de structuur van je site te verbeteren."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Het duurt een paar seconden om je een lijst met gerelateerde inhoud te tonen waarnaar je kan linken. De suggesties worden hier weergegeven zodra we ze hebben."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Lees onze gids over interne links voor SEO{{/a}} voor meer informatie."],"Copied!":["Gekopieerd!"],"Not supported!":["Niet ondersteund!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Probeer je meerdere gerelateerde keyphrases te gebruiken? Je zou ze apart moeten toevoegen."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Je keyphrase is te lang. Het kan maximaal 191 tekens lang zijn."],"Add as related keyphrase":["Toevoegen als gerelateerde keyphrase"],"Added!":["Toegevoegd!"],"Remove":["Verwijderen"],"Table of contents":["Inhoudsopgave"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["We moeten de SEO-gegevens van je site optimaliseren, zodat we je de beste %1$sinterne linksuggesties%2$s kunnen tonen. %3$sStart SEO-gegevensoptimalisatie%4$s"],"Create a Zap in %s":["Maak een Zap in %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pl_PL.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pl_PL.json new file mode 100644 index 00000000..7b4a5dab --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pl_PL.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"pl"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Żądanie wróciÅ‚o z nastÄ™pujÄ…cym błędem: \"%s\""],"X share preview":["PodglÄ…d w X"],"AI X title generator":["Generator tytułów AI X"],"AI X description generator":["Generator opisu AI X"],"X preview":["PodglÄ…d w X"],"Please enter a valid focus keyphrase.":["Wprowadź prawidÅ‚owÄ… frazÄ™ kluczowÄ…."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Aby korzystać z tej funkcji, witryna musi być publicznie dostÄ™pna. Dotyczy to zarówno witryn testowych, jak i instancji, w których interfejs API REST jest chroniony hasÅ‚em. Upewnij siÄ™, że witryna jest publicznie dostÄ™pna i spróbuj ponownie. JeÅ›li problem nie ustÄ…pi, %1$sskontaktuj siÄ™ z naszym zespoÅ‚em pomocy technicznej%2$s."],"Yoast AI cannot reach your site":["Yoast AI nie ma dostÄ™pu do witryny"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Aby uzyskać dostÄ™p do tej funkcji, wymagane sÄ… aktywne subskrypcje %2$s i %3$s. Prosimy o %5$saktywacjÄ™ subskrypcji w %1$s%6$s lub %7$skupienie nowej %4$s%8$s. NastÄ™pnie odÅ›wież tÄ™ stronÄ™, aby funkcja dziaÅ‚aÅ‚a poprawnie, co może potrwać do 30 sekund."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Generator tytułów AI wymaga włączenia analizy SEO. Aby jÄ… włączyć, przejdź do %2$sfunkcji witryny %1$s%3$s, włącz analizÄ™ SEO i kliknij \"zapisz zmiany\". JeÅ›li analiza SEO jest wyłączona w profilu użytkownika WordPress, przejdź do swojego profilu i włącz jÄ… tam. JeÅ›li nie masz dostÄ™pu do tych ustawieÅ„, skontaktuj siÄ™ z administratorem."],"Social share preview":["PodglÄ…d udostÄ™pniania w mediach spoÅ‚ecznoÅ›ciowych"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Aby nadal korzystać z funkcji Yoast AI, uprzejmie prosimy o zmniejszenie czÄ™stotliwoÅ›ci żądaÅ„. Nasz %1$sartykuÅ‚ pomocy%2$s zawiera wskazówki dotyczÄ…ce skutecznego planowania i planowania żądaÅ„ w celu zoptymalizowania przepÅ‚ywu pracy."],"You've reached the Yoast AI rate limit.":["OsiÄ…gnÄ…Å‚eÅ› limit stawki Yoast AI."],"Allow":["Zezwól"],"Deny":["Odrzuć"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Aby zobaczyć ten film, musisz zezwolić %1$s na Å‚adowanie osadzonych filmów z %2$s."],"Text generated by AI may be offensive or inaccurate.":["Tekst generowany przez sztucznÄ… inteligencjÄ™ może być obraźliwy lub niedokÅ‚adny."],"(Opens in a new browser tab)":["(Otworzy siÄ™ w nowej zakÅ‚adce)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Przyspiesz swój przepÅ‚yw pracy dziÄ™ki generatywnej sztucznej inteligencji. Uzyskaj wysokiej jakoÅ›ci sugestie dotyczÄ…ce tytułów i opisów dla wyszukiwania i wyglÄ…du spoÅ‚ecznoÅ›ciowego. %1$sDowiedz siÄ™ wiÄ™cej%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generuj tytuÅ‚y i opisy za pomocÄ… Yoast AI!"],"New to %1$s":["Nowy w %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["AkceptujÄ™ %1$sWarunki korzystania z usÅ‚ugi%2$s i %3$sPolitykÄ™ prywatnoÅ›ci%4$s usÅ‚ugi Yoast AI. Obejmuje to zgodÄ™ na gromadzenie i wykorzystywanie danych w celu poprawy komfortu użytkowania."],"Start generating":["Rozpocznij generowanie"],"Yes, revoke consent":["Tak, cofnij zgodÄ™"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["CofniÄ™cie zgody spowoduje utratÄ™ dostÄ™pu do funkcji Yoast AI. Czy na pewno chcesz cofnąć swojÄ… zgodÄ™?"],"Something went wrong, please try again later.":["CoÅ› poszÅ‚o nie tak, spróbuj ponownie później."],"Revoke AI consent":["CofniÄ™cie zgody AI"],"AI title generator":["Generator tytułów AI"],"AI description generator":["Generator opisów AI"],"AI social title generator":["Generator tytułów spoÅ‚ecznoÅ›ciowych AI"],"AI social description generator":["Generator opisów spoÅ‚ecznoÅ›ciowych AI"],"Dismiss":["Ukryj"],"Don’t show again":["Nie pokazuj tego ponownie"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sWskazówka%2$s: ZwiÄ™ksz dokÅ‚adność generowanych tytułów AI, piszÄ…c wiÄ™cej treÅ›ci na swojej stronie."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sWskazówka%2$s: Popraw dokÅ‚adność wygenerowanych opisów AI, piszÄ…c wiÄ™cej treÅ›ci na swojej stronie."],"Try again":["Spróbuj ponownie"],"Social preview":["PodglÄ…d spoÅ‚ecznoÅ›ciowy"],"Desktop result":["Wynik na komputerze"],"Mobile result":["Wynik na urzÄ…dzeniach mobilnych"],"Apply %s description":[],"Apply %s title":[],"Next":["Dalej"],"Previous":["Poprzedni"],"Generate 5 more":["Wygeneruj 5 kolejnych"],"Google preview":["PodglÄ…d Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Ze wzglÄ™du na Å›cisÅ‚e wytyczne etyczne OpenAI i %1$szasady użytkowania%2$s, nie jesteÅ›my w stanie wygenerować tytułów SEO dla tej strony. JeÅ›li zamierzasz korzystać ze sztucznej inteligencji, uprzejmie unikaj używania treÅ›ci o charakterze jednoznacznym, brutalnym lub seksualnym. %3$sPrzeczytaj wiÄ™cej o tym, jak skonfigurować swojÄ… stronÄ™, aby uzyskać najlepsze wyniki z AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Ze wzglÄ™du na Å›cisÅ‚e wytyczne etyczne OpenAI i %1$szasady użytkowania%2$s, nie jesteÅ›my w stanie wygenerować meta opisów dla tej strony. JeÅ›li zamierzasz korzystać ze sztucznej inteligencji, uprzejmie unikaj używania treÅ›ci o charakterze jednoznacznym, brutalnym lub seksualnym. %3$sPrzeczytaj wiÄ™cej o tym, jak skonfigurować swojÄ… stronÄ™, aby uzyskać najlepsze wyniki z AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Aby uzyskać dostÄ™p do tej funkcji, wymagana jest aktywna subskrypcja %1$s. Należy %3$saktywować subskrypcjÄ™ w %2$s%4$s lub %5$suzyskać nowÄ… %1$s subskrypcjÄ™%6$s. NastÄ™pnie kliknij przycisk, aby odÅ›wieżyć tÄ™ stronÄ™, aby funkcja dziaÅ‚aÅ‚a poprawnie, co może potrwać do 30 sekund."],"Refresh page":["OdÅ›wież stronÄ™"],"Not enough content":["Za maÅ‚o treÅ›ci"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Spróbuj ponownie później. JeÅ›li problem nadal wystÄ™puje, %1$sskontaktuj siÄ™ z naszym zespoÅ‚em pomocy technicznej%2$s!"],"Something went wrong":["Ups... CoÅ› poszlo nie tak"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["WyglÄ…da na to, że wystÄ…piÅ‚ limit czasu połączenia. Sprawdź połączenie internetowe i spróbuj ponownie później. JeÅ›li problem nie ustÄ…pi, %1$sskontaktuj siÄ™ z naszym zespoÅ‚em pomocy technicznej%2$s"],"Connection timeout":["Limit czasu połączenia"],"Use AI":["Użyj AI"],"Close modal":["Zamknij modal"],"Learn more about AI (Opens in a new browser tab)":["Dowiedz siÄ™ wiÄ™cej o sztucznej inteligencji (Otwiera siÄ™ w nowej karcie przeglÄ…darki)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitle%3$s: Twoja strona nie ma jeszcze tytuÅ‚u. %2$sDodaj tytuÅ‚%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTytuÅ‚%2$s: Twoja strona ma tytuÅ‚. Dobra robota!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sRozkÅ‚ad fraz kluczowych%3$s: %2$sUwzglÄ™dnij frazÄ™ kluczowÄ… lub jej synonimy w tekÅ›cie, aby sprawdzić jej rozkÅ‚ad%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sRozkÅ‚ad frazy kluczowej%2$s: Dobra robota!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sRozkÅ‚ad frazy kluczowej%3$s: Nierówny. Niektóre partie tekstu nie zawierajÄ… fraz kluczowych lub ich synonimów. %2$sRozłóż je równomiernie%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sRozkÅ‚ad frazy kluczowej%3$s: Bardzo nierówny. Duże części tekstu nie zawierajÄ… frazy kluczowej lub jej synonimów. %2$sRozłóż je równomiernie%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Nie używasz zbyt wielu skomplikowanych słów, co sprawia, że tekst jest Å‚atwy do odczytania. Dobra robota!"],"Word complexity":["ZÅ‚ożoność słów"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$ssÅ‚owa w tekÅ›cie sÄ… uważane za zÅ‚ożone. %3$sStaraj siÄ™ używać krótszych i bardziej znanych słów, aby poprawić czytelność%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sWyrównanie%3$s: Istnieje dÅ‚uga sekcja tekstu wyrównanego do Å›rodka. %2$sZalecamy wyrównanie do lewej%3$s.","%1$sWyrównanie%3$s: IstniejÄ… %4$s dÅ‚ugie sekcje tekstu wyrównanego do Å›rodka. %2$sZalecamy wyrównanie do lewej%3$s.","%1$sWyrównanie%3$s: Istnieje %4$s dÅ‚ugich sekcji tekstu wyrównanego do Å›rodka. %2$sZalecamy wyrównanie do lewej%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sWyrównanie%3$s: Istnieje dÅ‚uga sekcja tekstu wyrównanego do Å›rodka. %2$sZalecamy wyrównanie do prawej%3$s.","%1$sWyrównanie%3$s: IstniejÄ… %4$s dÅ‚ugie sekcje tekstu wyrównanego do Å›rodka. %2$sZalecamy wyrównanie do prawej%3$s.","%1$sWyrównanie%3$s: Istnieje %4$s dÅ‚ugich sekcji tekstu wyrównanego do Å›rodka. %2$sZalecamy wyrównanie do prawej%3$s."],"Select image":["Wybierz obrazek"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Być może nawet o tym nie wiesz, ale w witrynie mogÄ… znajdować siÄ™ strony, do których nie prowadzÄ… żadne linki. Jest to problem SEO, ponieważ wyszukiwarkom trudno jest znaleźć strony, do których nie prowadzÄ… żadne linki. Dlatego też trudniej jest je pozycjonować. Takie strony nazywamy osieroconÄ… treÅ›ciÄ…. W tym treningu znajdziemy osierocone treÅ›ci w witrynie i poprowadzimy ciÄ™ przez szybkie dodanie do nich linków, aby miaÅ‚y szansÄ™ na ranking!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Czas dodać kilka linków! Poniżej znajduje siÄ™ lista osieroconych artykułów. Pod każdym z nich znajdujÄ… siÄ™ sugestie dotyczÄ…ce powiÄ…zanych stron, do których można dodać link. DodajÄ…c link, pamiÄ™taj, by umieÅ›cić go w odpowiednim zdaniu zwiÄ…zanym z osieroconym artykuÅ‚em. Dodawaj linki do każdego z osieroconych artykułów, aż bÄ™dziesz zadowolony z iloÅ›ci linków do nich prowadzÄ…cych."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Czas dodać kilka linków! Poniżej znajduje siÄ™ lista z kluczowymi treÅ›ciami. Pod każdÄ… z nich znajdujÄ… siÄ™ sugestie dotyczÄ…ce artykułów, do których można dodać link. DodajÄ…c link, upewnij siÄ™, że wstawiasz go w odpowiednim zdaniu zwiÄ…zanym z artykuÅ‚em. Dodawaj linki z tylu powiÄ…zanych artykułów, ile potrzebujesz, aż kluczowe treÅ›ci miaÅ‚y najwiÄ™cej wewnÄ™trznych linków kierujÄ…cych do nich."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Niektóre artykuÅ‚y na sÄ… %1$snajważniejsze%2$s. OdpowiadajÄ… na pytania użytkowników i rozwiÄ…zujÄ… ich problemy. ZasÅ‚ugujÄ… wiÄ™c na wysokie pozycje! W %3$s nazywamy je kluczowymi treÅ›ciami. Jednym ze sposobów na ich pozycje jest skierowanie do nich wystarczajÄ…cej liczby linków. WiÄ™cej linków sygnalizuje wyszukiwarkom, że te artykuÅ‚y sÄ… ważne i wartoÅ›ciowe. W tym treningu pomożemy ci dodać linki do twoich najważniejszych artykułów!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Gdy dodasz nieco wiÄ™cej tekstu, bÄ™dziemy w stanie okreÅ›lić poziom jego formalnoÅ›ci."],"Overall, your text appears to be %1$s%3$s%2$s.":["Ogólnie rzecz biorÄ…c, tekst wyglÄ…da na %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Integracja Zapier zostanie usuniÄ™ta z %1$s w wersji 20.7 (data wydania 9 maja). JeÅ›li masz jakieÅ› pytania, skontaktuj siÄ™ z %2$s."],"Maximum heading level":["Maksymalny poziom nagłówka"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Sugestie linków, które sÄ… niezbÄ™dne do dziaÅ‚ania linków powiÄ…zanych, zostaÅ‚y wyłączone. JeÅ›li chcesz dodać powiÄ…zane linki, przejdź do funkcji witryny i włącz sugestie linków."],"Schema":["Schemat"],"Meta tags":["Meta tagi"],"Not available":["NiedostÄ™pne"],"Checks":["Sprawdzanie"],"Focus Keyphrase":["Fraza kluczowa"],"Good":["Dobre"],"No index":["No index"],"Front-end SEO inspector":["Inspektor SEO front-end"],"Focus keyphrase not set":["Nie ustawiono frazy kluczowej"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Po opublikowaniu Zapa w swoim panelu %s możesz sprawdzić, czy jest on aktywny i połączony z witrynÄ…."],"Reset API key":["Resetuj klucz API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Obecnie połączono z %s używajÄ…c nastÄ™pujÄ…cego klucza API. JeÅ›li chcesz ponownie połączyć siÄ™ z innym kluczem API, możesz zresetować swój klucz poniżej."],"Your API key":["Twój klucz API"],"Go to your %s dashboard":["Przejdź do swojego panelu %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Połączenie z %1$s przebiegÅ‚o pomyÅ›lnie! Aby zarzÄ…dzać swoim Zap, odwiedź swój panel %2$s."],"Your %s dashboard":["Twój panel %s"],"Verify connection":["Zweryfikuj połączenie"],"Verify your connection":["Zweryfikuj swoje połączenie"],"Create a Zap":["Utwórz Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Zaloguj siÄ™ na konto %1$s i utwórz pierwszy Zap! Możesz utworzyć tylko 1 Zap ze zdarzeniem wyzwalajÄ…cym z %2$s. W ramach tego Zapa możesz wybrać jednÄ… lub wiÄ™cej akcji."],"%s API key":["Klucz API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["BÄ™dziesz potrzebować tego klucza API później w %s, podczas konfiguracji Zap."],"Copy your API key":["Skopiuj swój klucz API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Aby skonfigurować połączenie, skopiuj klucz API poniżej i użyj go do utworzenia i włączenia Zap w ramach swojego konta %s."],"Manage %s settings":["ZarzÄ…dzaj ustawieniami %s"],"Connect to %s":["Połącz siÄ™ z %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Uwaga: Aby ten trening dziaÅ‚aÅ‚ dobrze, musisz uruchomić narzÄ™dzie do optymalizacji danych SEO. Administratorzy mogÄ… je uruchomić w zakÅ‚adce %1$sSEO > NarzÄ™dzia%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Dodano linki do osieroconych artykułów i wyczyszczono te, które nie miaÅ‚y już znaczenia. Åšwietna robota! Poniżej znajdziesz podsumowanie."],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Przeanalizuj zawartość tej listy i dokonaj niezbÄ™dnych aktualizacji. JeÅ›li potrzebujesz pomocy w aktualizacji, mamy bardzo %1$sużyteczny wpis na blogu, który może poprowadzić ciÄ™ przez całą drogÄ™%2$s (kliknij, aby otworzyć w nowej karcie)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sPotrzebujesz wiÄ™cej wskazówek? Każdy krok omówiliÅ›my bardziej szczegółowo w poniższym przewodniku: %2$sJak wykorzystać trening %7$s osieroconych treÅ›ci%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["WÅ‚aÅ›nie sprawiÅ‚eÅ›, że twoje najlepsze treÅ›ci sÄ… Å‚atwe do znalezienia i wyżej w rankingu! Brawo! Od czasu do czasu pamiÄ™taj, aby sprawdzić, czy treÅ›ci kluczowe zdobywajÄ… wystarczajÄ…cÄ… ilość linków!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Przyjrzyj siÄ™ poniższej liÅ›cie. Czy treÅ›ci kluczowe (oznaczone symbolem %1$s) majÄ… najwiÄ™cej linków wewnÄ™trznych skierowanych w ich stronÄ™? Kliknij przycisk Optymalizuj, jeÅ›li uważasz, że dana treść kluczowa potrzebuje wiÄ™cej linków. DziÄ™ki temu artykuÅ‚ zostanie przeniesiony do kolejnego kroku."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Czy wszystkie treÅ›ci kluczowe majÄ… zielone oznaczenie? Aby uzyskać najlepsze wyniki, rozważ edycjÄ™ tych, które nie majÄ…!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Które artykuÅ‚y chcesz mieć najwyżej w rankingu? Które z nich odbiorcy uznaliby za najbardziej przydatne i kompletne? Kliknij strzaÅ‚kÄ™ skierowanÄ… w dół i poszukaj artykułów, które speÅ‚niajÄ… te kryteria. ArtykuÅ‚y, które wybierzesz z listy, automatycznie oznaczymy jako treÅ›ci kluczowe."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sPotrzebujesz wiÄ™cej wskazówek? Każdy krok omówiliÅ›my bardziej szczegółowo w: %2$sJak korzystać z treningu %7$s treÅ›ci kluczowe%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Spis TreÅ›ci Yoast"],"Yoast Related Links":["Linki powiÄ…zane Yoast"],"Finish optimizing":["ZakoÅ„cz optymalizacjÄ™"],"You've finished adding links to this article.":["ZakoÅ„czono dodawanie linków do tego artykuÅ‚u."],"Optimize":["Optymalizuj"],"Added to next step":["Dodano do nastÄ™pnego kroku"],"Choose cornerstone articles...":["Wybierz treÅ›ci kluczowe…"],"Loading data...":["Åadowanie danych…"],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Nie wyczyÅ›ciÅ‚eÅ› jeszcze ani nie zaktualizowaÅ‚eÅ› żadnych artykułów za pomocÄ… tego treningu. Kiedy to zrobisz, pojawi siÄ™ tutaj podsumowanie pracy."],"Skipped":["PominiÄ™to"],"Hidden from search engines.":["Ukryte przed wyszukiwarkami."],"Removed":["UsuniÄ™to"],"Improved":["Ulepszone"],"Resolution":["Rozdzielczość"],"Loading redirect options...":["Åadowanie opcji przekierowania..."],"Remove and redirect":["UsuÅ„ i przekieruj"],"Custom url:":["WÅ‚asny adres url:"],"Related article:":["PowiÄ…zany artykuÅ‚:"],"Home page:":["Strona główna:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Zamierzasz usunąć %1$s%2$s%3$s. Aby zapobiec błędom 404 w witrynie, trzeba przekierować go na innÄ… stronÄ™. Gdzie chcesz jÄ… przekierować?"],"SEO Workout: Remove article":["Trening SEO: UsuÅ„ artykuÅ‚"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Wszystko wyglÄ…da dobrze! Nie znaleźliÅ›my żadnych artykułów, które sÄ… starsze niż sześć miesiÄ™cy i otrzymujÄ… zbyt maÅ‚o linków. Wróć tu później po nowe sugestie!"],"Hide from search engines":["Ukryj siÄ™ przed wyszukiwarkami"],"Improve":["Ulepsz"],"Are you sure you wish to hide this article from search engines?":["Czy na pewno chcesz ukryć ten artykuÅ‚ przed wyszukiwarkami?"],"Action":["Akcja"],"You've hidden this article from search engines.":["Ukryto ten artykuÅ‚ przed wyszukiwarkami."],"You've removed this article.":["UsuniÄ™to ten artykuÅ‚."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Nie wybrano jeszcze żadnych artykułów do poprawy. Wybierz kilka artykułów w poprzednich krokach, do których chcesz dodać linki, a my pokażemy propozycje linków."],"Loading link suggestions...":["Åadowanie propozycji linków..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Nie znaleźliÅ›my żadnych sugestii dotyczÄ…cych tego artykuÅ‚u, ale oczywiÅ›cie możesz dodać linki do artykułów, które sÄ… z nim powiÄ…zane."],"Skip":["PomiÅ„"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Nie wybrano jeszcze żadnych artykułów do tego kroku. Możesz to zrobić w poprzednim kroku."],"Is it up-to-date?":["Czy jest on aktualny?"],"Last Updated":["Ostatnia aktualizacja"],"You've moved this article to the next step.":["Przeniesiono ten artykuÅ‚ do nastÄ™pnego kroku."],"Unknown":["Nieznany"],"Clear summary":["Wyczyść podsumowanie"],"Add internal links towards your orphaned articles.":["Dodaj wewnÄ™trzne linki do osieroconych artykułów."],"Should you update your article?":["Czy trzeba zaktualizować artykuÅ‚?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Witryna zawiera wiele treÅ›ci, które zostaÅ‚y stworzone raz i nigdy później do nich nie wracano. Ważne jest, aby przejrzeć je i zadać sobie pytanie, czy te treÅ›ci sÄ… nadal istotne. Czy trzeba jÄ… poprawić, czy usunąć?"],"Start: Love it or leave it?":["Start: Zostawić czy usunąć?"],"Clean up your unlinked content to make sure people can find it":["UporzÄ…dkuj swoje niepowiÄ…zane treÅ›ci, aby upewnić siÄ™, że ludzie mogÄ… je znaleźć"],"I've finished this workout":["SkoÅ„czyÅ‚em ten trening"],"Reset this workout":["Zresetuj ten trening"],"Well done!":["Åšwietnie!"],"Add internal links towards your cornerstones":["Dodaj linki wewnÄ™trzne do kluczowych treÅ›ci"],"Check the number of incoming internal links of your cornerstones":["Sprawdź liczbÄ™ przychodzÄ…cych linków wewnÄ™trznych swoich kluczowych treÅ›ci"],"Start: Choose your cornerstones!":["Zacznij: Wybierz swoje kluczowe treÅ›ci!"],"The cornerstone approach":["PodejÅ›cie oparte na kluczowych treÅ›ciach"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Uwaga: Aby ten trening dziaÅ‚aÅ‚ dobrze i mógÅ‚ zaoferować sugestie dotyczÄ…ce linkowania, musisz uruchomić narzÄ™dzie do optymalizacji danych SEO. Administratorzy mogÄ… je uruchomić w %1$sSEO > NarzÄ™dzia%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Uwaga: Administrator wyłączyÅ‚ funkcjÄ™ artykułów kluczowych w ustawieniach SEO. JeÅ›li chcesz korzystać z tego treningu, należy go włączyć."],"I've finished this step":["Etap zakoÅ„czony"],"Revise this step":["Powtórz ten krok"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Nie udaÅ‚o nam siÄ™ znaleźć linków wewnÄ™trznych. Albo nie dodano jeszcze żadnych linków wewnÄ™trznych do treÅ›ci, albo Yoast SEO ich nie zaindeksowaÅ‚o. Możesz zlecić Yoast SEO indeksowanie linków, uruchamiajÄ…c optymalizacjÄ™ danych SEO w sekcji SEO > NarzÄ™dzia."],"Incoming links":["Linki przychodzÄ…ce"],"Edit to add link":["Edytuj, aby dodać link"],"%s incoming link":["%s link przychodzÄ…cy","%s linki przychodzÄ…ce","%s linków przychodzÄ…cych"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Obecnie nie masz żadnych artykułów oznaczonych jako kluczowe treÅ›ci. Kiedy oznaczysz swoje artykuÅ‚y jako kluczowe treÅ›ci, pojawiÄ… siÄ™ one tutaj."],"Focus keyphrase":["Fraza kluczowa"],"Article":["ArtykuÅ‚"],"Readability score":["Ocena czytelnoÅ›ci"],"SEO score":["Ocena SEO"],"Copy failed":["Kopiowanie nie powiodÅ‚o siÄ™"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Poprawiaj rankingi dla wszystkich swoich kluczowych treÅ›ci, korzystajÄ…c z tego %1$streningu krok po kroku%2$s!"],"Rank with articles you want to rank with":["Pozycjonuj artykuÅ‚y, które sÄ… najważniejsze"],"Descriptive text":["Opis"],"Show the descriptive text":["Pokaż opis"],"Show icon":["Pokaż ikonÄ™"],"Yoast Estimated Reading Time":["Szacowany Czas Czytania Yoast"],"Shows an estimated reading time based on the content length.":["Pokazuje szacowany czas czytania na podstawie dÅ‚ugoÅ›ci zawartoÅ›ci."],"reading time":["czas czytania"],"content length":["dÅ‚ugość zawartoÅ›ci"],"Estimated reading time:":["Szacowany czas czytania:"],"minute":["minuta","minuty","minut"],"Settings":["Ustawienia"],"OK":["OK"],"Close":["Zamknij"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Pierwsze, prawdziwie kompletne rozwiÄ…zanie SEO dla WordPressa, które zawiera analizator podstron, mapy XML i wiele wiÄ™cej."],"Type":["Rodzaj"],"Team Yoast":["Zespół Yoast"],"Orphaned content":["Osierocone treÅ›ci"],"Synonyms":["Synonimy"],"Internal linking suggestions":["Sugestie linkowania wewnÄ™trznego"],"Enter a related keyphrase to calculate the SEO score":["Wprowadź powiÄ…zanÄ… frazÄ™ kluczowÄ… do kalkulacji oceny SEO"],"Related keyphrase":["PowiÄ…zana fraza kluczowa"],"Add related keyphrase":["Dodaj podobnÄ… frazÄ™ kluczowÄ…"],"Analysis results":["Wyniki analizy"],"Help on choosing the perfect keyphrase":["Pomoc w wyborze najlepszej frazy kluczowej"],"Help on keyphrase synonyms":["Pomoc w doborze frazy kluczowej synonimów"],"Keyphrase":["Fraza kluczowa"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nowy URL: {{link}}%s{{/link}}"],"Undo":["Cofnij"],"Redirect created":["Przekierowanie utworzone"],"%s just created a redirect from the old URL to the new URL.":["%s przekierowanie ze starego adresu URL do nowego, zostaÅ‚o utworzone pomyÅ›lnie."],"Old URL: {{link}}%s{{/link}}":["Stary URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Synonimy frazy kluczowej"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["WystÄ…piÅ‚ błąd: analiza SEO Premium nie dziaÅ‚a zgodnie z oczekiwaniami. Prosimy o {{activateLink}}aktywowanie subskrypcji w MyYoast{{/activateLink}}, a nastÄ™pnie {{reloadButton}}ponowne zaÅ‚adowanie tej strony{{/reloadButton}}, aby dziaÅ‚aÅ‚a poprawnie."],"seo":["seo"],"internal linking":["WewnÄ™trzne linkowanie"],"site structure":["Struktura witryny"],"We could not find any relevant articles on your website that you could link to from your post.":["Nie mogliÅ›my znaleźć żadnych istotnych artykułów w twojej witrynie, do których można by byÅ‚o wstawić odnoÅ›niki w tym wpisie."],"Load suggestions":["Sugestie dotyczÄ…ce obciążenia"],"Refresh suggestions":["Sugestie dotyczÄ…ce odÅ›wieżenia"],"Write list…":["Napisz listÄ™..."],"Adds a list of links related to this page.":["Dodaje listÄ™ linków zwiÄ…zanych z tÄ… stronÄ…."],"related posts":["posty powiÄ…zane"],"related pages":["strony powiÄ…zane"],"Adds a table of contents to this page.":["Dodaje spis treÅ›ci do tej strony."],"links":["linki"],"toc":["spis treÅ›ci"],"Copy link":["Skopiuj link"],"Copy link to suggested article: %s":["Skopiuj link do sugerowanego artykuÅ‚u: %s"],"Add a title to your post for the best internal linking suggestions.":["Dodaj tytuÅ‚ do swojego postu, aby uzyskać najlepsze sugestie dotyczÄ…ce linkowania wewnÄ™trznego."],"Add a metadescription to your post for the best internal linking suggestions.":["Dodaj metaopis do swojego postu, aby uzyskać najlepsze sugestie dotyczÄ…ce linkowania wewnÄ™trznego."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Dodaj tytuÅ‚ i metaopis do swojego postu, aby uzyskać najlepsze sugestie dotyczÄ…ce linkowania wewnÄ™trznego."],"Also, add a title to your post for the best internal linking suggestions.":["Dodaj również tytuÅ‚ do swojego postu, aby uzyskać najlepsze sugestie dotyczÄ…ce linkowania wewnÄ™trznego."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Dodaj również metaopis do swojego postu, aby uzyskać najlepsze sugestie dotyczÄ…ce linkowania wewnÄ™trznego."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Dodaj również tytuÅ‚ i opis do swojego postu, aby uzyskać najlepsze sugestie dotyczÄ…ce linkowania wewnÄ™trznego."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Kiedy dodasz nieco wiÄ™cej tekstu, otrzymasz listÄ™ powiÄ…zanych treÅ›ci, do których bÄ™dziesz mógÅ‚ zamieÅ›cić link w swoim poÅ›cie."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Aby poprawić strukturÄ™ swojej witryny, rozważ linkowanie do innych istotnych postów lub stron na swojej stronie."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["To zajmie kilka sekund, aby pokazać Ci listÄ™ powiÄ…zanych treÅ›ci, do których mógÅ‚byÅ› zamieÅ›cić link. Propozycje zostanÄ… wyÅ›wietlone tutaj, jak tylko bÄ™dziemy je mieli."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Przeczytaj nasz przewodnik na temat wewnÄ™trznego linkowania dla celów SEO{{/a}} aby dowiedzieć siÄ™ wiÄ™cej."],"Copied!":["Skopiowano!"],"Not supported!":["Brak wsparcia!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Próbujesz użyć wielu powiÄ…zanych fraz kluczowych? PowinieneÅ› dodać je osobno."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Twoja fraza kluczowa jest za dÅ‚uga. Powinna mieć maksymalnie 191 znaków."],"Add as related keyphrase":["Dodaj jako powiÄ…zanÄ… frazÄ™ kluczowÄ…"],"Added!":["Dodano!"],"Remove":["UsuÅ„"],"Table of contents":["Tabela zawartoÅ›ci"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Musimy zoptymalizować dane SEO Twojej strony, abyÅ›my mogli zaproponować najlepsze %1$spropozycje linkowania%2$s.\n\n%3$sRozpocznij optymalizacjÄ™ danych SEO%4$s"],"Create a Zap in %s":["Utwórz Zap za %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_BR.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_BR.json new file mode 100644 index 00000000..7e47d3bd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_BR.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=(n > 1);","lang":"pt_BR"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["A solicitação retornou com o seguinte erro: \"%s\""],"X share preview":["Pré-visualização do compartilhamento X"],"AI X title generator":["Gerador de títulos AI para X"],"AI X description generator":["Gerador de descrição AI do X"],"X preview":["Pré-visualização X"],"Please enter a valid focus keyphrase.":["Informe uma frase-chave de foco válida."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Para usar esse recurso, seu site deve estar acessível publicamente. Isso se aplica a sites de teste e instâncias em que sua API REST é protegida por senha. Certifique-se de que seu site esteja acessível ao público e tente novamente. Se o problema persistir, %1$sentre em contato com nossa equipe de suporte%2$s."],"Yoast AI cannot reach your site":["Yoast AI não consegue acessar seu site"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para acessar esse recurso, você precisa de assinaturas ativas de %2$s e %3$s. Por favor %5$sative suas assinaturas em %1$s%6$s ou %7$sobtenha um novo %4$s%8$s. Depois, atualize esta página para que o recurso funcione corretamente, o que pode levar até 30 segundos."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["O gerador de títulos de IA requer que a análise de SEO seja habilitada antes do uso. Para habilitá-lo, navegue até %2$sRecursos do site %1$s%3$s, ative a análise de SEO e clique em 'Salvar alterações'. Se a análise SEO estiver desabilitada no seu perfil de usuário do WordPress, acesse o seu perfil e habilite-o lá. Entre em contato com seu administrador se você não tiver acesso a essas configurações."],"Social share preview":["Visualização de compartilhamento social"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Para continuar usando o recurso Yoast AI, reduza a frequência de suas solicitações. Nosso %1$sartigo de ajuda%2$s fornece orientação sobre como planejar e acompanhar com eficiência suas solicitações para um fluxo de trabalho otimizado."],"You've reached the Yoast AI rate limit.":["Você atingiu o limite de taxa do Yoast AI."],"Allow":["Permitir"],"Deny":["Negar"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Para ver este vídeo, você precisa permitir que %1$s carregue vídeos incorporados de %2$s."],"Text generated by AI may be offensive or inaccurate.":["O texto gerado pela IA pode ser ofensivo ou impreciso."],"(Opens in a new browser tab)":["(Abre numa nova aba do navegador)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Acelere seu fluxo de trabalho com IA generativa. Obtenha sugestões de títulos e descrições de alta qualidade para sua pesquisa e aparência social. %1$sSaiba mais%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Gere títulos e descrições com Yoast AI!"],"New to %1$s":["Novo em %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Eu aprovo os %1$stermos de serviço%2$s e a %3$spolítica de privacidade%4$s do serviço Yoast AI. Isto inclui consentir na recolha e utilização de dados para melhorar a experiência do utilizador."],"Start generating":["Comece a gerar"],"Yes, revoke consent":["Sim, revogar o consentimento"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Ao revogar seu consentimento, você não terá mais acesso aos recursos do Yoast AI. Tem certeza de que deseja revogar seu consentimento?"],"Something went wrong, please try again later.":["Algo deu errado. Tente novamente mais tarde."],"Revoke AI consent":["Revogar o consentimento da IA"],"AI title generator":["Gerador de títulos de IA"],"AI description generator":["Gerador de descrição de IA"],"AI social title generator":["Gerador de títulos sociais de IA"],"AI social description generator":["Gerador de descrição social de IA"],"Dismiss":["Ignorar"],"Don’t show again":["Não mostre novamente"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sDica%2$s: melhore a precisão dos títulos de IA gerados escrevendo mais conteúdo em sua página."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sDica%2$s: melhore a precisão das descrições de IA geradas escrevendo mais conteúdo em sua página."],"Try again":["Tentar novamente"],"Social preview":["Visualização social"],"Desktop result":["Resultado para computadores"],"Mobile result":["Resultado para dispositivos móveis"],"Apply %s description":[],"Apply %s title":[],"Next":["Próximo"],"Previous":["Anterior"],"Generate 5 more":["Gere mais 5"],"Google preview":["Pré-visualização no Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Devido às rígidas diretrizes éticas da OpenAI e às %1$spolíticas de uso%2$s, não podemos gerar títulos SEO para sua página. Se você pretende usar IA, evite o uso de conteúdo explícito, violento ou sexualmente explícito. %3$sLeia mais sobre como configurar sua página para garantir os melhores resultados com IA%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Devido às rígidas diretrizes éticas da OpenAI e às %1$spolíticas de uso%2$s, não podemos gerar meta descrições para sua página. Se você pretende usar IA, evite o uso de conteúdo explícito, violento ou sexualmente explícito. %3$sLeia mais sobre como configurar sua página para garantir os melhores resultados com IA%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para acessar esse recurso, você precisa de uma assinatura %1$s ativa. Por favor %3$sative sua assinatura em %2$s%4$s ou %5$sobtenha uma nova assinatura %1$s%6$s. Em seguida, clique no botão para atualizar esta página para que o recurso funcione corretamente, o que pode levar até 30 segundos."],"Refresh page":["Atualizar a página"],"Not enough content":["Conteúdo insuficiente"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Por favor, tente novamente mais tarde. Se o problema persistir, %1$sentre em contato com nossa equipe de suporte%2$s!"],"Something went wrong":["Algo deu errado"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Parece que ocorreu um tempo limite de conexão. Verifique sua conexão com a Internet e tente novamente mais tarde. Se o problema persistir, %1$sentre em contato com nossa equipe de suporte%2$s"],"Connection timeout":["Tempo limite de conexão"],"Use AI":["Usar IA"],"Close modal":["Fechar modal"],"Learn more about AI (Opens in a new browser tab)":["Saiba mais sobre IA (abre em uma nova guia do navegador)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTítulo%3$s: Sua página ainda não tem um título. %2$sAdicione um%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTítulo%2$s: Sua página tem um título. Bom trabalho!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribuição da frase-chave%3$s: %2$sInclua sua frase-chave, ou sinônimos dela, no texto para verificar a distribuição da frase-chave%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribuição de frase-chave%2$s: Bom trabalho!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistruibuição de frase-chave%3$s: Desigual. Algumas partes do seu texto não contém a frase-chave ou algum sinônimo. %2$sMelhore sua distribuição no texto todo%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribuição da frase-chave%3$s: Muito desigual. Boa parte do seu texto não contém a frase-chave ou sinônimos dela. %2$sFaça uma melhor distribuição%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Você não está usando muitas palavras complexas, o que facilita a leitura do seu texto. Bom trabalho!"],"Word complexity":["Complexidade da palavra"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s das palavras em seu texto são consideradas complexas. %3$sTente usar palavras mais curtas e familiares para melhorar a legibilidade%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlinhamento%3$s: Há uma longa seção de texto centralizado. %2$sRecomendamos deixá-lo alinhado à esquerda%3$s.","%1$sAlinhamento%3$s: Há %4$s longas seções de texto alinhado ao centro. %2$sRecomendamos deixá-los alinhados à esquerda%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlinhamento%3$s: Há uma longa seção de texto centralizado. %2$sRecomendamos deixá-lo alinhado à direita%3$s.","%1$sAlinhamento%3$s: Há %4$s longas seções de texto alinhado ao centro. %2$sRecomendamos deixá-los alinhados à direita%3$s."],"Select image":["Selecione a imagem"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Talvez você nem saiba, mas pode haver páginas em seu site que não recebem nenhum link. Isso é um problema de SEO, porque é difícil para os motores de busca encontrar páginas que não recebam links. Portanto, é mais difícil para eles classificarem. Chamamos essas páginas de conteúdo órfão. Neste exercício, encontramos o conteúdo órfão em seu site e orientamos você na adição rápida de links a ele, para que ele tenha a chance de classificação!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Talvez você nem saiba, mas pode haver páginas em seu site que não recebem nenhum link. Isso é um problema de SEO, porque é difícil para os motores de busca encontrar páginas que não recebam links. Portanto, é mais difícil para eles classificarem. Chamamos essas páginas de conteúdo órfão. Neste exercício, encontramos o conteúdo órfão em seu site e orientamos você na adição rápida de links a ele, para que ele tenha a chance de classificação!"],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Hora de adicionar alguns links! Abaixo, você vê uma lista com seus pilares. Sob cada pedra angular, há sugestões de artigos dos quais você pode adicionar um link. Ao adicionar o link, certifique-se de inseri-lo em uma frase relevante relacionada ao seu artigo fundamental. Continue adicionando links de quantos artigos relacionados você precisar, até que seus pilares tenham o máximo de links internos apontando para eles."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Alguns artigos do seu site são %1$sos%2$s mais importantes. Eles respondem às perguntas das pessoas e resolvem seus problemas. Então, eles merecem classificação! Em %3$s, chamamos esses artigos fundamentais. Uma das maneiras de classificá-los é apontar links suficientes para eles. Mais links sinalizam para os mecanismos de pesquisa que esses artigos são importantes e valiosos. Neste exercício, ajudaremos você a adicionar links aos seus artigos fundamentais!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Depois de adicionar um pouco mais de texto, poderemos informar o nível de formalidade do seu texto."],"Overall, your text appears to be %1$s%3$s%2$s.":["No geral, seu texto parece ser %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["A integração do Zapier será removida de %1$s na versão 20.7 (data de lançamento em 9 de maio). Se você tiver alguma dúvida, entre em contato com %2$s."],"Maximum heading level":["Nível máximo de título"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Você desativou as sugestões de links, necessárias para que os links relacionados funcionem. Se você deseja adicionar links relacionados, acesse Recursos do site e ative as sugestões de links."],"Schema":["Esquema"],"Meta tags":["Meta tags"],"Not available":["Indisponível"],"Checks":["Marcações"],"Focus Keyphrase":["Frase-chave de foco"],"Good":["Bom"],"No index":["Não indexar"],"Front-end SEO inspector":["Inspetor SEO"],"Focus keyphrase not set":["Frase-chave em foco não definida."],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Depois de publicar seu Zap no painel do %s, você pode verificar se ele está ativo e conectado ao seu site."],"Reset API key":["Redefinir chave de API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Você está conectado a %s usando a seguinte chave de API. Se você quiser se reconectar com uma chave de API diferente, poderá redefinir sua chave abaixo."],"Your API key":["Sua chave de API"],"Go to your %s dashboard":["Vá para o seu painel %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Você está conectado com sucesso a %1$s! Para gerenciar seu Zap, visite seu painel %2$s."],"Your %s dashboard":["Seu painel %s"],"Verify connection":["Verificar conexão"],"Verify your connection":["Verificar sua conexão"],"Create a Zap":["Crie um Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Faça login na sua conta %1$s e comece a criar seu primeiro Zap! Observe que você só pode criar 1 Zap com um evento de gatilho de %2$s. Dentro deste Zap você pode escolher uma ou mais ações."],"%s API key":["%s chave de API"],"You'll need this API key later on in %s when you're setting up your Zap.":["Você precisará dessa chave de API mais tarde em %s quando estiver configurando seu Zap."],"Copy your API key":["Copie sua chave de API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Para configurar uma conexão, certifique-se de copiar a chave de API fornecida abaixo e usá-la para criar e ativar um Zap em sua conta %s."],"Manage %s settings":["Gerenciar configurações de %s"],"Connect to %s":["Conectar a %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Observação: para que este treino funcione bem, você precisa executar a ferramenta de otimização de dados de SEO. Os administradores podem executar isso em %1$sSEO > Ferramentas%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Você adicionou links aos seus artigos órfãos e limpou os que não eram mais relevantes. Bom trabalho! Dê uma olhada no resumo abaixo e comemore o que você realizou!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sPrecisa de mais orientação? Cobrimos cada etapa com mais detalhes no guia a seguir: %2$sComo usar o %7$s treino de conteúdo órfão%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Você acabou de tornar seu melhor conteúdo fácil de encontrar e com maior probabilidade de classificação! Caminho a percorrer! De tempos em tempos, lembre-se de verificar se seus pilares estão recebendo links suficientes!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Dê uma olhada na lista abaixo. Seus pilares (marcados com %1$s) têm mais links internos apontando para eles? Clique no botão Otimizar se achar que uma base precisa de mais links. Isso moverá o artigo para a próxima etapa."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Todas as suas pedras angulares têm balas verdes? Para obter os melhores resultados, considere editar os que não funcionam!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Quais artigos você deseja classificar mais alto? Quais seriam os mais úteis e completos para o seu público ? Clique na seta apontando para baixo e procure artigos que atendam a esses critérios. Marcaremos automaticamente os artigos que você selecionar na lista como base."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sPrecisa de mais orientação? Cobrimos cada etapa com mais detalhes em: %2$sComo usar o treino básico do %7$s%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Ãndice Yoast"],"Yoast Related Links":["Links Relacionados Yoast"],"Finish optimizing":["Otimização Finalizada"],"You've finished adding links to this article.":["Você terminou de adicionar links a este artigo."],"Optimize":["Otimize"],"Added to next step":["Adicionado ao próximo passo."],"Choose cornerstone articles...":["Escolha os artigos fundamentais..."],"Loading data...":["Carregando dados..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Você ainda não limpou ou atualizou nenhum artigo usando este exercício. Depois de fazer isso, um resumo do seu trabalho aparecerá aqui."],"Skipped":["Pulou"],"Hidden from search engines.":["Oculto nos motores de busca."],"Removed":["Removido"],"Improved":["Aperfeiçoado"],"Resolution":["Resolução"],"Loading redirect options...":["Carregando opções de redirecionamento..."],"Remove and redirect":["Remover e redirecionar"],"Custom url:":["URL personalizado:"],"Related article:":["Artigo relacionado:"],"Home page:":["Pagina inicial:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Você está prestes a remover %1$s%2$s%3$s. Para evitar erros 404 em seu site, você deve redirecioná-lo para outra página em seu site. Para onde você gostaria de redirecioná-lo?"],"SEO Workout: Remove article":["Exercício de SEO: Remover artigo"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Está tudo bem! Não encontramos nenhum artigo em seu site com mais de seis meses e recebemos poucos links em seu site. Volte aqui mais tarde para novas sugestões de limpeza!"],"Hide from search engines":["Esconder dos motores de busca"],"Improve":["Aperfeiçoar"],"Are you sure you wish to hide this article from search engines?":["Tem certeza de que deseja ocultar este artigo dos mecanismos de pesquisa?"],"Action":["Ação"],"You've hidden this article from search engines.":["Você escondeu este artigo dos motores de busca."],"You've removed this article.":["Você removeu este artigo."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["No momento , você não selecionou nenhum artigo para melhorar. Selecione alguns artigos nas etapas anteriores para adicionar links e mostraremos sugestões de links aqui."],"Loading link suggestions...":["Carregando sugestões de links..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Não encontramos nenhuma sugestão para este artigo, mas é claro que você ainda pode adicionar links para artigos que você acha que estão relacionados."],"Skip":["Pular"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Você ainda não selecionou nenhum artigo para esta etapa. Você pode fazer isso na etapa anterior."],"Is it up-to-date?":["Está atualizado?"],"Last Updated":["Última atualização"],"You've moved this article to the next step.":["Você moveu este artigo para a próxima etapa."],"Unknown":["Desconhecido"],"Clear summary":["Resumo claro"],"Add internal links towards your orphaned articles.":["Adicione links internos para seus artigos órfãos."],"Should you update your article?":["Você deve atualizar seu artigo?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Seu site pode conter muito conteúdo que você criou uma vez e nunca mais olhou para ele desde então. É importante passar por essas páginas e se perguntar se esse conteúdo ainda é relevante para o seu site. Você deve melhorá-lo ou removê-lo?"],"Start: Love it or leave it?":["Iniciar: amou ou abandonou?"],"Clean up your unlinked content to make sure people can find it":["Limpe seu conteúdo desvinculado para garantir que as pessoas possam encontrá-lo"],"I've finished this workout":["Eu terminei este treino"],"Reset this workout":["Reinicie este treino"],"Well done!":["Bem feito!"],"Add internal links towards your cornerstones":["Adicione links internos para seus cornerstones"],"Check the number of incoming internal links of your cornerstones":["Verifique o número de links internos de entrada de seus cornerstones"],"Start: Choose your cornerstones!":["Comece: escolha seus cornerstones!"],"The cornerstone approach":["A abordagem da pedra angular"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Observação : para que este treino funcione bem e ofereça sugestões de links, você precisa executar a ferramenta de otimização de dados de SEO . Os administradores podem executar isso em %1$sSEO > Ferramentas%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Observação: seu administrador desativou a funcionalidade fundamental nas configurações de SEO. Se você quiser usar este treino, ele deve estar habilitado."],"I've finished this step":["Eu terminei esta etapa"],"Revise this step":["Revise esta etapa"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Não foi possível encontrar links internos em suas páginas. Ou você ainda não adicionou links internos ao seu conteúdo ou o Yoast SEO não os indexou. Você pode fazer com que o Yoast SEO indexe seus links executando a otimização de dados de SEO em SEO > Ferramentas."],"Incoming links":["Links de entrada"],"Edit to add link":["Edite para adicionar link"],"%s incoming link":["%s link de entrada","%s links de entrada"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["No momento, você não tem artigos marcados como pedra angular. Quando você marca seus artigos como pedra angular, eles aparecerão aqui."],"Focus keyphrase":["Frase-chave de foco"],"Article":["Artigo"],"Readability score":["Pontuação de legibilidade"],"SEO score":["Pontuação de SEO"],"Copy failed":["Cópia falhou"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Melhore as classificações de todos os seus pilares usando este %1$streino passo a passo!%2$s"],"Rank with articles you want to rank with":["Classifique com os artigos que você deseja classificar"],"Descriptive text":["Texto descritivo"],"Show the descriptive text":["Mostra o texto descritivo"],"Show icon":["Mostrar Ãcone"],"Yoast Estimated Reading Time":["Tempo estimado de leitura do Yoast"],"Shows an estimated reading time based on the content length.":["Mostra um tempo estimado de leitura com base no comprimento do conteúdo."],"reading time":["tempo de leitura"],"content length":["Comprimento do conteúdo"],"Estimated reading time:":["Tempo estimado de leitura:"],"minute":["minuto","minutos"],"Settings":["Configurações"],"OK":["OK"],"Close":["Fechar"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["A primeira verdadeira solução completa de SEO para o WordPress, incluindo a análise de conteúdo por página, sitemaps XML e muito mais."],"Type":["Tipo"],"Team Yoast":["Equipe da Yoast"],"Orphaned content":["Conteúdo órfão "],"Synonyms":["Sinônimos"],"Internal linking suggestions":["Sugestão de links internos"],"Enter a related keyphrase to calculate the SEO score":["Digite uma palavra-chave relacionado para calcular a pontuação de SEO"],"Related keyphrase":["Frase-chave relacionada"],"Add related keyphrase":["Adicionar frase-chave relacionada"],"Analysis results":["Resultado da análise"],"Help on choosing the perfect keyphrase":["Ajude a escolher as palavras-chave perfeitas"],"Help on keyphrase synonyms":["Ajude em sinônimos de palavras-chave"],"Keyphrase":["Frase-chave"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nova URL: {{link}}%s{{/link}}"],"Undo":["Desfazer"],"Redirect created":["Redirecionamento criado"],"%s just created a redirect from the old URL to the new URL.":["%s acabou de criar um redirecionamento da URL antigo para uma nova URL."],"Old URL: {{link}}%s{{/link}}":["URL antigo: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinónimos da frase chave"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Ocorreu um erro: a análise SEO Premium não está funcionando conforme o esperado. {{activateLink}}ative sua assinatura no MyYoast{{/activateLink}} e {{reloadButton}}recarregue esta página{{/reloadButton}} para que ela funcione corretamente."],"seo":["SEO"],"internal linking":["linkagem interna"],"site structure":["estrutura do site"],"We could not find any relevant articles on your website that you could link to from your post.":["Não foi possível encontrar nenhum artigo relevante no seu website que você possa vincular a partir de sua postagem."],"Load suggestions":["Carregar sugestões"],"Refresh suggestions":["Atualizar sugestões"],"Write list…":["Escrever lista..."],"Adds a list of links related to this page.":["Adiciona uma lista de links relacionados a essa página"],"related posts":["publicações relacionadas"],"related pages":["páginas relacionads"],"Adds a table of contents to this page.":["Adiciona uma tabela de conteúdo a esta página."],"links":["links"],"toc":["toc"],"Copy link":["Copiar link"],"Copy link to suggested article: %s":["Copiar link para artigos sugeridos: %s"],"Add a title to your post for the best internal linking suggestions.":["Adicione um título ao seu post para obter as melhores sugestões de links internos."],"Add a metadescription to your post for the best internal linking suggestions.":["Adicione uma meta descrição ao seu post para obter as melhores sugestões de links internos."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Adicione um título e uma meta descrição à sua postagem para obter as melhores sugestões de links internos."],"Also, add a title to your post for the best internal linking suggestions.":["Além disso, adicione um título ao seu post para obter as melhores sugestões de links internos."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Além disso, adicione uma meta descrição à sua postagem para obter as melhores sugestões de links internos."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Além disso, adicione um título e uma meta descrição à sua postagem para obter as melhores sugestões de links internos."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Depois de adicionar um pouco mais de cópia, forneceremos uma lista de conteúdo relacionado aqui para o qual você pode criar um link em sua postagem."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Para melhorar a estrutura do seu site, considere linkar para outros posts ou páginas erlevantes no seu website."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Leva alguns segundos para mostrar uma lista de conteúdo relacionado ao qual você pode criar um link. As sugestões serão mostradas aqui assim que as tivermos."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}} Leia nosso guia sobre links internos para SEO {{/ a}} para saber mais."],"Copied!":["Copiado!"],"Not supported!":["Não suportado!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Está tentando usar múltiplas palavras-frase relacionadas? Você deve adicionar elas separadamente."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Sua frase-chave é muito longa. Pode ter no máximo 191 caracteres."],"Add as related keyphrase":["Adicionar como uma palavra chave relacionada"],"Added!":["Adicionado!"],"Remove":["Remover"],"Table of contents":["Tabela de conteúdos"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Precisamos otimizar os dados de SEO do seu site para que possamos oferecer as melhores %1$ssugestões de linking%2$s.\n\n%3$sIniciar otimização de dados SEO%4$s"],"Create a Zap in %s":["Criar um Zap em %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_PT.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_PT.json new file mode 100644 index 00000000..57d58d09 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-pt_PT.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"pt"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["O pedido foi devolvido com o seguinte erro: \"%s\""],"X share preview":["Pré-visualização de partilha no X"],"AI X title generator":["Gerador de títulos do X com IA"],"AI X description generator":["Gerador de descrições do X com IA"],"X preview":["Pré-visualização no X"],"Please enter a valid focus keyphrase.":["Digite uma frase-chave principal válida."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Para utilizar esta funcionalidade, o seu site tem de estar acessível ao público. Isto aplica-se tanto a sites de teste como a instâncias em que a sua REST API está protegida por senha. Certifique-se de que o seu site está acessível ao público e tente de novo. Se o problema persistir, %1$scontacte a nossa equipa de suporte%2$s."],"Yoast AI cannot reach your site":["A IA do Yoast não consegue aceder ao seu site"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para aceder a esta funcionalidade, precisa das subscrições %2$s e %3$s activas. Por favor, %5$sactive as suas subscrições em %1$s%6$s ou %7$sobtenha uma nova %4$s%8$s. De seguida, actualize esta página para que funcione correctamente, o que poderá demorar até 30 segundos."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["O gerador de títulos AI requer que a análise SEO seja activada antes de ser utilizada. Para a activar, navegue até às %2$sFuncionalidades do site de %1$s%3$s, active a análise de SEO e clique em \"Guardar alterações\". Se a análise de SEO estiver desactivada no seu perfil de utilizador do WordPress, aceda ao seu perfil e active-a aí. Contacte o seu administrador se não tiver acesso a estas definições."],"Social share preview":["Pré-visualização de partilha social"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Para continuar a usar a funcionalidade de IA do Yoast, reduza a frequência dos seus pedidos. O nosso %1$sartigo de ajuda%2$s fornece orientações sobre como planear e definir o ritmo dos seus pedidos de forma eficaz para um fluxo de trabalho optimizado."],"You've reached the Yoast AI rate limit.":["Atingiu o limite da taxa de IA do Yoast."],"Allow":["Permitir"],"Deny":["Recusar"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Para ver este vídeo, o %1$s precisa de permissão para carregar vídeos incorporados a partir de %2$s."],"Text generated by AI may be offensive or inaccurate.":["O texto gerado pela IA pode ser ofensivo ou impreciso."],"(Opens in a new browser tab)":["(Abrir num novo separador)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Acelere o seu fluxo de trabalho com IA generativa. Obtenha sugestões de títulos e descrições de alta qualidade para a sua apresentação da pesquisa e nas redes sociais. %1$sSaiba mais%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Gere títulos e descrições com a IA do Yoast!"],"New to %1$s":["Novo no %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Aprovo os %1$sTermos do serviço%2$s e %3$sPolítica de privacidade%4$s do serviço de IA do Yoast. Isto inclui o consentimento para a recolha e utilização de dados para melhorar a experiência do utilizador."],"Start generating":["Começar a gerar"],"Yes, revoke consent":["Sim, revogar o consentimento"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Ao revogar o seu consentimento, deixará de ter acesso às funcionalidades de IA do Yoast. De certeza que quer revogar o seu consentimento?"],"Something went wrong, please try again later.":["Algo correu mal, por favor tente de novo mais tarde."],"Revoke AI consent":["Revogar consentimento da IA"],"AI title generator":["Gerador de títulos de IA"],"AI description generator":["Gerador de descrição de IA"],"AI social title generator":["Gerador de títulos para redes sociais com IA"],"AI social description generator":["Gerador de descrições para redes sociais com IA"],"Dismiss":["Ignorar"],"Don’t show again":["Não mostrar de novo"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sDica%2$s: Melhore a precisão dos seus títulos gerados por IA ao escrever mais conteúdo na sua página."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sDica%2$s: Melhore a precisão das suas descrições geradas por IA ao escrever mais conteúdo na sua página."],"Try again":["Tentar de novo"],"Social preview":["Pré-visualização nas redes sociais"],"Desktop result":["Resultado em computador"],"Mobile result":["Resultado em dispositivos móveis"],"Apply %s description":[],"Apply %s title":[],"Next":["Seguinte"],"Previous":["Anterior"],"Generate 5 more":["Gerar mais 5"],"Google preview":["Pré-visualização do Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Devido às directrizes éticas rigorosas do OpenAI e às %1$spolíticas de utilização%2$s, não nos é possível gerar títulos SEO para a sua página. Se tenciona utilizar a IA, evite a utilização de conteúdos explícitos, violentos ou sexualmente explícitos. %3$sLeia mais sobre como configurar a sua página para garantir que obtém os melhores resultados com a IA%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Devido às directrizes éticas rigorosas do OpenAI e às %1$spolíticas de utilização%2$s, não nos é possível gerar descrições SEO para a sua página. Se tenciona utilizar a IA, evite a utilização de conteúdos explícitos, violentos ou sexualmente explícitos. %3$sLeia mais sobre como configurar a sua página para garantir que obtém os melhores resultados com a IA%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Para aceder a esta funcionalidade é necessária uma subscrição activa de %1$s. Por favor, %3$sactive a sua subscrição em %2$s%4$s ou %5$sobtenha uma nova subscrição de %1$s%6$s. Depois disso, clique no botão para actualizar esta página para que a funcionalidade trabalhe correctamente, o que pode demorar até 30 segundos."],"Refresh page":["Actualizar a página"],"Not enough content":["Conteúdo insuficiente"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Tente de novo mais tarde. Se o problema persistir, %1$scontacte a nossa equipa de suporte%2$s!"],"Something went wrong":["Algo correu mal"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Parece que atingiu o limite de tempo da ligação. Verifique a sua ligação à Internet e tente de novo mais tarde. Se o problema persistir, %1$scontacte a nossa equipa de suporte%2$s"],"Connection timeout":["Tempo limite da ligação"],"Use AI":["Utilizar a IA"],"Close modal":["Fechar janela"],"Learn more about AI (Opens in a new browser tab)":["Saiba mais sobre a IA (abre num novo separador do navegador)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitle%3$s: A sua página ainda não tem um título. %2$sAdicione um%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitle%2$s: A sua página tem um título. Muito bem!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribuição da frase-chave%3$s: %2$sInclua a sua frase-chave, ou sinónimos dela, no texto para ser possível verificar a distribuição da frase-chave%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribuição da frase-chave%2$s: Bom trabalho!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribuição da frase-chave%3$s: Irregular. Algumas partes do seu texto não contém a frase-chave ou qualquer sinónimo. %2$sDistribua-as com maior regularidade%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribuição da frase-chave%3$s: Muito irregular. Grandes partes do seu texto não contém a frase-chave ou qualquer sinónimo. %2$sDistribua-as com maior regularidade%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Não está a usar demasiadas palavras complexas, o que torna o seu texto fácil de ler. Bom trabalho!"],"Word complexity":["Complexidade das palavras"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s das palavras do seu texto são consideradas complexas. %3$sTente usar palavras mais curtas e familiares para melhorar a legibilidade%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAlinhamento%3$s: Existe uma longa secção de texto alinhado ao centro. %2$sRecomendamos que seja alinhado à esquerda%3$s.","%1$sAlinhamento%3$s: Existem %4$s longas secções de texto alinhado ao centro. %2$sRecomendamos que sejam alinhados à esquerda%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAlinhamento%3$s: Existe uma longa secção de texto alinhado ao centro. %2$sRecomendamos que seja alinhado à direita%3$s.","%1$sAlinhamento%3$s: Existem %4$s longas secções de texto alinhado ao centro. %2$sRecomendamos que sejam alinhados à direita%3$s."],"Select image":["Seleccionar imagem"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Pode nem sequer saber, mas pode haver páginas no seu site que não recebem quaisquer ligações. Isso é um problema de SEO, porque é difícil para os motores de pesquisa encontrarem páginas para as quais não há ligações. Por isso, é mais difícil classificá-las. Chamamos a estas páginas conteúdos órfãos. Neste exercício, encontramos os conteúdos órfãos no seu site e ajudamos a adicionar rapidamente ligações para estes conteúdos, para que possam ter uma oportunidade de ser classificados!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["É altura de adicionar algumas ligações! Abaixo verá uma lista com os seus conteúdos órfãos. Por baixo de cada um há sugestões de páginas relacionadas, às quais pode adicionar uma ligação. Quando adicionar a ligação, certifique-se de que a insere numa frase relevante relacionada com o seu conteúdo órfão. Continue a adicionar ligações a cada um dos conteúdos órfãos até ficar que a quantidade de ligações para estes conteúdos seja satisfatória."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Chegou o momento de adicionar algumas ligações! Veja abaixo uma lista dos seus conteúdos principais. Por baixo de cada conteúdo principal, há sugestões de artigos aos quais pode adicionar uma ligação. Ao adicionar a ligação, certifique-se de que a insere numa frase relevante relacionada com o conteúdo principal. Continue a adicionar ligações de tantos conteúdos relacionados quantos forem necessários, até que os seus conteúdos principais tenham o maior número de ligações internas a apontar para si."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Alguns conteúdos do seu site são %1$sos%2$s mais importantes. Respondem às perguntas das pessoas e resolvem os seus problemas. Por isso, merecem ser mostrados nos resultados de pesquisas! Na %3$s, chamamos-lhes conteúdos principais. Uma das formas de fazer com que sejam mostrados nos resultados de pesquisas é apontar para si um número suficiente de ligações. Mais ligações indicam aos motores de pesquisa que esses conteúdos são importantes e valiosos. Neste exercício, vamos ajudar a adicionar ligações aos seus conteúdos principais!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Assim que adicionar um pouco mais de texto, poderemos indicar-lhe o respectivo nível de formalidade."],"Overall, your text appears to be %1$s%3$s%2$s.":["No geral, o seu texto parece ser %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["A integração com o Zapier será removida do %1$s na versão 20.7 (lançamento em 9 de Maio). Se tiver alguma dúvida, entre em contacto através de %2$s."],"Maximum heading level":["Nível máximo de título"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Desactivou as sugestões de ligações, que são necessárias para o funcionamento das ligações relacionadas. Se quiser adicionar ligações relacionadas, vá a Funcionalidades do site e active as sugestões de ligações."],"Schema":["Schema"],"Meta tags":["Elementos meta"],"Not available":["Não disponível"],"Checks":["Verificações"],"Focus Keyphrase":["Frase-chave principal"],"Good":["Bom"],"No index":["Não indexar"],"Front-end SEO inspector":["Inspector de SEO no site"],"Focus keyphrase not set":["Frase-chave principal não definida"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Assim que publicar o seu Zap no painel do %s, pode verificar se está activo e ligado ao seu site."],"Reset API key":["Repor a chave de API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Está ligado ao %s através da seguinte chave de API. Se quiser ligar de novo com uma chave de API diferente pode repor a chave abaixo."],"Your API key":["A sua chave de API"],"Go to your %s dashboard":["Vá ao seu painel do %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Ligou-se ao %1$s com sucesso! Para gerir o seu Zap, por favor visite o seu painel do %2$s."],"Your %s dashboard":["O seu painel do %s"],"Verify connection":["Verificar ligação"],"Verify your connection":["Verifique a sua ligação"],"Create a Zap":["Crie um Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Inicie sessão na sua conta %1$s e comece por criar o seu primeiro Zap! Atenção que apenas pode criar 1 Zap para desencadear eventos do %2$s. Com este Zap pode escolher uma ou mais acções."],"%s API key":["Chave de API do %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Precisará desta chave de API mais tarde no %s, quando configurar o seu Zap."],"Copy your API key":["Copie a sua chave de API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Para configurar uma ligação, certifique-se de que copia a chave de API fornecida abaixo e use-a para criar e activar um Zap na sua conta do %s."],"Manage %s settings":["Gerir opções do %s"],"Connect to %s":["Ligar ao %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Atenção: Para este exercício funcionar bem, tem de executar a ferramenta de optimização de dados de SEO. Os administradores podem executar isto em %1$sSEO > Ferramentas%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Adicionou ligações a conteúdos órfãos, e limpou as que já não eram relevantes. Bom trabalho! Consulte o resumo abaixo e veja o que conseguiu!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Examine cuidadosamente o conteúdo desta lista e faça as correcções necessárias. Se precisar de ajuda na sua correcção, temos um %1$sartigo muito útil que pode guiar do princípio ao fim%2$s (clique para abrir num novo separador)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sPrecisa de mais ajuda? Descrevemos em detalhe todos os passos neste guia: %2$sExercício do %7$s sobre como usar os conteúdos órfãos%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Acabou de tornar o seu melhor conteúdo fácil de encontrar, e mais susceptível de ser classificado! É assim mesmo! De vez em quando, verifique se os conteúdos principais estão a receber ligações suficientes!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Veja a lista abaixo. Os seus conteúdos principais (marcados com %1$s) têm a maioria das ligações a apontar para si? Clique no botão Optimizar se achar que um conteúdo principal precisa de mais ligações, e este será incluído no passo seguinte."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Todos os seus conteúdos principais têm indicadores verdes? Para obter os melhores resultados, considere editar os que ainda não têm!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Quais os conteúdos que pretende que tenham melhor classificação? Quais são os que o seu público considerará mais úteis e completos? Clique na seta para baixo e procure os conteúdos que pretende. Os conteúdos da lista que seleccionar serão automaticamente marcados como principais."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sPrecisa de mais ajuda? Descrevemos em detalhe todos os passos aqui: %2$sExercício do %7$s sobre como usar conteúdos principais%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Ãndice do Yoast"],"Yoast Related Links":["Ligações relacionadas do Yoast"],"Finish optimizing":["Terminar optimização"],"You've finished adding links to this article.":["Terminou o processo de adicionar ligações a este conteúdo."],"Optimize":["Optimizar"],"Added to next step":["Adicionado ao próximo passo"],"Choose cornerstone articles...":["Escolha os seus conteúdos principais..."],"Loading data...":["A carregar dados..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Ainda não limpou ou actualizou nenhum artigo com este exercício. Quando o fizer, será mostrado aqui um resumo do seu trabalho."],"Skipped":["Ignorado"],"Hidden from search engines.":["Escondido dos motores de pesquisa."],"Removed":["Removido"],"Improved":["Melhorado"],"Resolution":["Resolução"],"Loading redirect options...":["A carregar opções de redireccionamento..."],"Remove and redirect":["Remover e redireccionar"],"Custom url:":["URL personalizado:"],"Related article:":["Conteúdo relacionado:"],"Home page:":["Página inicial:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Está prestes a remover %1$s%2$s%3$s. Para evitar erros 404 no seu site, deverá redireccionar para outra página no seu site. Para onde gostaria de redireccionar?"],"SEO Workout: Remove article":["Exercício de SEO: Remover artigo"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Está tudo com bom aspecto! Não encontrámos no seu site quaisquer artigos com mais de seis meses e que recebam muito poucas ligações. Volte aqui mais tarde para novas sugestões de limpeza!"],"Hide from search engines":["Esconder dos motores de pesquisa"],"Improve":["Melhorar"],"Are you sure you wish to hide this article from search engines?":["De certeza que quer esconder este conteúdo dos motores de pesquisa?"],"Action":["Acção"],"You've hidden this article from search engines.":["Escondeu este conteúdo dos motores de pesquisa."],"You've removed this article.":["Removeu este conteúdo."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["De momento não seleccionou nenhum conteúdo a melhorar. Nos passos anteriores, seleccione alguns conteúdos órfãos para os quais deve haver ligações, para que possamos sugeri-las aqui."],"Loading link suggestions...":["A carregar as sugestões de ligações..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Não encontrámos quaisquer sugestões para este conteúdo, mas pode adicionar ligações a conteúdos que considere estarem relacionados."],"Skip":["Saltar"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Ainda não seleccionou nenhum conteúdo para este passo. Pode fazê-lo no passo anterior."],"Is it up-to-date?":["Está actualizado?"],"Last Updated":["Última actualização"],"You've moved this article to the next step.":["Moveu este conteúdo para o passo seguinte."],"Unknown":["Desconhecido"],"Clear summary":["Limpar resumo"],"Add internal links towards your orphaned articles.":["Adicione ligações internas para os seus conteúdos órfãos."],"Should you update your article?":["Deve actualizar o seu conteúdo?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["O seu site pode ter muitos conteúdos que foram criados uma vez e para os quais não voltou a olhar. É importante revê-los e interrogar-se se estes conteúdos ainda são relevantes para o seu site. Devo melhorá-los ou removê-los?"],"Start: Love it or leave it?":["Início: Gosto ou abandono?"],"Clean up your unlinked content to make sure people can find it":["Crie ligações para os seus conteúdos órfãos para garantir que as pessoas os encontram"],"I've finished this workout":["Terminei este exercício"],"Reset this workout":["Recomeçar este exercício"],"Well done!":["Muito bem!"],"Add internal links towards your cornerstones":["Adicione ligações internas para os seus conteúdos principais"],"Check the number of incoming internal links of your cornerstones":["Verifique o número de ligações internas recebidas pelos seus conteúdos principais"],"Start: Choose your cornerstones!":["Início: Marque os seus conteúdos principais!"],"The cornerstone approach":["A abordagem dos conteúdos principais"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Atenção: Para este exercício funcionar bem e para lhe indicar sugestões de ligações, tem de executar a ferramenta de optimização de dados de SEO. Os administradores podem executar isto em %1$sSEO > Ferramentas%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Atenção: O seu administrador desactivou a funcionalidade de conteúdo principal nas definições de SEO. Se pretender fazer este exercício, isto deve estar activado."],"I've finished this step":["Terminei este passo"],"Revise this step":["Rever este passo"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Não foi possível encontrar ligações internas nas suas páginas. Ou não criou nenhuma ligação interna, ou o Yoast SEO não indexou. O Yoast SEO pode indexar as suas ligações ao executar a optimização de dados de SEO em SEO > Ferramentas."],"Incoming links":["Ligações recebidas"],"Edit to add link":["Edite para adicionar ligação"],"%s incoming link":["%s ligação recebida","%s ligações recebidas"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["De momento não tem conteúdos marcados como principais. Os conteúdos marcados como principais são mostrados aqui."],"Focus keyphrase":["Frase-chave principal"],"Article":["Artigo"],"Readability score":["Classificação de legibilidade"],"SEO score":["Classificação de SEO"],"Copy failed":["Falhou ao copiar"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Melhore a classificação de todos os seus conteúdos principais ao usar este %1$sexercício passo-a-passo%2$s!"],"Rank with articles you want to rank with":["Obtenha boa classificação com os conteúdos que quer"],"Descriptive text":["Texto descritivo"],"Show the descriptive text":["Mostrar o texto descritivo"],"Show icon":["Mostrar ícone"],"Yoast Estimated Reading Time":["Tempo estimado de leitura do Yoast"],"Shows an estimated reading time based on the content length.":["Mostra um tempo estimado de leitura com base no tamanho do conteúdo."],"reading time":["tempo de leitura"],"content length":["tamanho do conteúdo"],"Estimated reading time:":["Tempo estimado de leitura:"],"minute":["minuto","minutos"],"Settings":["Definições"],"OK":["Razoável"],"Close":["Fechar"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["A primeira solução integrada de SEO para WordPress, com análise de conteúdo na página, sitemaps XML e muito mais."],"Type":["Tipo"],"Team Yoast":["Team Yoast"],"Orphaned content":["Conteúdo órfão"],"Synonyms":["Sinónimos"],"Internal linking suggestions":["Sugestões de ligações internas"],"Enter a related keyphrase to calculate the SEO score":["Insira uma frase-chave relacionada para calcular a classificação SEO"],"Related keyphrase":["Frase-chave relacionada"],"Add related keyphrase":["Adicionar frase-chave relacionada"],"Analysis results":["Resultados da análise"],"Help on choosing the perfect keyphrase":["Ajuda sobre como escolher a frase-chave perfeita"],"Help on keyphrase synonyms":["Ajuda sobre sinónimos de frases-chave"],"Keyphrase":["Frase-chave"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Novo URL: {{link}}%s{{/link}}"],"Undo":["Anular"],"Redirect created":["Redireccionamento criado"],"%s just created a redirect from the old URL to the new URL.":["O %s criou um redireccionamento do antigo URL para o novo URL."],"Old URL: {{link}}%s{{/link}}":["Antigo URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinónimos da frase-chave"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Ocorreu um erro: A análise SEO Premium não está a funcionar como esperado. Por favor, {{activateLink}}active a sua subscrição em MyYoast{{/activateLink}} e, em seguida, {{reloadButton}}recarregue esta página{{/reloadButton}} para que funcione correctamente."],"seo":["seo"],"internal linking":["ligações internas"],"site structure":["estrutura do site"],"We could not find any relevant articles on your website that you could link to from your post.":["Não foram encontrados artigos relevantes no seu site para os quais possa ligar a partir do seu conteúdo."],"Load suggestions":["Carregar sugestões"],"Refresh suggestions":["Actualizar sugestões"],"Write list…":["Escreva uma lista..."],"Adds a list of links related to this page.":["Adiciona uma lista de ligações relacionadas a esta página."],"related posts":["artigos relacionados"],"related pages":["páginas relacionadas"],"Adds a table of contents to this page.":["Adiciona um índice a esta página."],"links":["ligações"],"toc":["índice"],"Copy link":["Copiar ligação"],"Copy link to suggested article: %s":["Copiar ligação para o artigo sugerido: %s"],"Add a title to your post for the best internal linking suggestions.":["Adicione um título ao seu conteúdo para melhorar as ligações internas."],"Add a metadescription to your post for the best internal linking suggestions.":["Adicione uma descrição ao seu conteúdo para melhorar as ligações internas."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Adicione um título e uma descrição ao seu conteúdo para melhorar as ligações internas."],"Also, add a title to your post for the best internal linking suggestions.":["Adicione também um título ao seu conteúdo para melhorar a sugestão de ligações internas."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Adicione também uma descrição ao seu conteúdo para melhorar a sugestão de ligações internas."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Adicione também um título e uma descrição ao seu conteúdo para melhorar a sugestão de ligações internas."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Ao adicionar mais algum texto, será mostrada aqui uma lista de conteúdos relacionados, para os quais poderá adicionar ligações no seu conteúdo."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Para melhorar a estrutura do seu site, considere criar ligações para outros artigos ou páginas relevantes no seu site."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Demora alguns segundos a mostrar uma lista de conteúdos relacionados a que pode criar ligações. As sugestões serão mostradas assim que forem obtidas."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Leia o nosso guia sobre ligações internas para SEO{{/a}} para saber mais."],"Copied!":["Copiado!"],"Not supported!":["Não suportado!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Está a tentar utilizar múltiplas frases-chave relacionadas? Deverá adicioná-las separadamente."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["A sua frase-chave é demasiado longa. Só pode ter no máximo 191 caracteres."],"Add as related keyphrase":["Adicionar como frase-chave relacionada"],"Added!":["Adicionada!"],"Remove":["Remover"],"Table of contents":["Ãndice"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["É necessário optimizar os dados de SEO do seu site para podermos oferecer as melhores %1$ssugestões de ligações%2$s. %3$sIniciar optimização de dados de SEO%4$s"],"Create a Zap in %s":["Criar Zap no %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ro_RO.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ro_RO.json new file mode 100644 index 00000000..69672d72 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ro_RO.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);","lang":"ro"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Cererea a întors cu următoarea eroare: „%sâ€"],"X share preview":["Previzualizare partajare pe X"],"AI X title generator":["Generator AI de titluri X"],"AI X description generator":["Generator AI de descrieri X"],"X preview":["Previzualizare X"],"Please enter a valid focus keyphrase.":["Te rugăm să introduci o frază cheie validă."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Pentru a utiliza această funcÈ›ionalitate, site-ul tău trebuie să fie accesibil publicului. Acest lucru este valabil atât pentru site-urile de test, cât È™i pentru instanÈ›ele în care API-ul REST este protejat de parolă. Te rugăm să te asiguri că site-ul tău este accesibil publicului È™i să încerci din nou. Dacă problema persistă, te rugăm să %1$scontactezi echipa noastră de asistență%2$s."],"Yoast AI cannot reach your site":["Yoast AI nu poate ajunge la site-ul tău."],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Pentru a accesa această funcÈ›ionalitate, ai nevoie de abonamentele %2$s È™i %3$s active. Te rugăm să-È›i %5$sactivezi abonamentele în %1$s%6$s sau %7$sobÈ›ine un nou %4$s%8$s. După aceea, te rugăm să reîmprospătezi această pagină pentru ca funcÈ›ionalitatea să funcÈ›ioneze corect, ceea ce poate dura până la 30 de secunde."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Generatorul de titluri AI necesită ca analiza SEO să fie activată înainte de utilizare. Pentru a o activa, navighează la %2$sFuncÈ›ionalitățile site-ului %1$s%3$s, activează analiza SEO È™i dă clic pe „Salvează modificăriâ€. Dacă analiza SEO este dezactivată în profilul tău de utilizator WordPress, accesează profilul tău È™i activeaz-o acolo. Te rugăm să contactezi administratorul dacă nu ai acces la aceste setări."],"Social share preview":["Previzualizare partajare socială"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Pentru a continua să utilizezi funcÈ›ia Yoast AI, te rugăm să reduci frecvenÈ›a solicitărilor tale. Articolul nostru %1$sde ajutor%2$s oferă îndrumări privind planificarea È™i ritmul eficient al solicitărilor tale pentru un flux de lucru optimizat."],"You've reached the Yoast AI rate limit.":["Ai atins limit ratei Yoast AI."],"Allow":["Permite"],"Deny":["Refuză"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Pentru a vedea acest video, trebuie să permiÈ›i ca %1$s să încarce videoclipuri înglobate din %2$s."],"Text generated by AI may be offensive or inaccurate.":["Textul generat de AI poate fi ofensator sau inexact."],"(Opens in a new browser tab)":["(Se deschide într-o filă nouă a navigatorului)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["ÃŽÈ›i accelerezi fluxul de lucru cu un AI generativ. PrimeÈ™ti sugestii pentru titluri È™i descrieri de foarte bună calitate pentru Aspect în căutare È™i Social. %1$sAflă mai multe%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Cu Yoast AI, generezi titluri È™i descrieri!"],"New to %1$s":["Nou la %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Aprob %1$sTermenii È™i condiÈ›iile%2$s È™i %3$sPolitica de confidenÈ›ialitate%4$s ale serviciului Yoast AI. Aceasta include consimțământul pentru colectarea È™i utilizarea datelor pentru a îmbunătăți experienÈ›a utilizatorului."],"Start generating":["ÃŽncepe generarea"],"Yes, revoke consent":["Da, revocă consimțământul"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Prin revocarea consimțământului tău, nu vei mai avea acces la funcÈ›ionalitățile Yoast AI. Sigur vrei să-È›i revoci consimțământul?"],"Something went wrong, please try again later.":["Ceva nu a mers bine, te rog reîncearcă mai târziu."],"Revoke AI consent":["Revocă consimțământul AI"],"AI title generator":["Generator AI de titluri"],"AI description generator":["Generator AI de descrieri"],"AI social title generator":["Generator AI de titluri sociale"],"AI social description generator":["Generator AI de descrieri sociale"],"Dismiss":["Respinge"],"Don’t show again":["Nu mai afiÈ™a"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sSfat%2$s: ÃŽmbunătățeÈ™ti acurateÈ›ea titlurilor tale generate AI scriind mai mult conÈ›inut în pagina ta."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sSfat%2$s: ÃŽmbunătățeÈ™ti acurateÈ›ea descrierilor tale generate AI scriind mai mult conÈ›inut în pagina ta."],"Try again":["ÃŽncearcă din nou"],"Social preview":["Previzualizare socială"],"Desktop result":["Rezultat pe desktop"],"Mobile result":["Rezultat pe mobil"],"Apply %s description":[],"Apply %s title":[],"Next":["Următor"],"Previous":["Anterior"],"Generate 5 more":["Generează încă 5"],"Google preview":["Previzualizare Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Din cauza ghidurilor etice stricte ale OpenAI È™i a %1$spoliticilor de utilizare%2$s, nu putem genera titluri SEO pentru pagina ta. Dacă intenÈ›ionezi să foloseÈ™ti AI, te rugăm să eviÈ›i utilizarea conÈ›inutului explicit, violent sau sexual explicit. %3$sCiteÈ™te mai multe despre cum să îți configurezi pagina pentru a te asigura că obÈ›ii cele mai bune rezultate cu AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Din cauza regulilor etice stricte ale OpenAI È™i a %1$spoliticilor de utilizare%2$s, nu putem genera meta descrieri pentru pagina ta. Dacă intenÈ›ionezi să foloseÈ™ti inteligenÈ›a artificială, te rugăm să eviÈ›i utilizarea conÈ›inutului explicit, violent sau sexual explicit. %3$sCiteÈ™te mai multe despre cum să îți configurezi pagina pentru a te asigura că obÈ›ii cele mai bune rezultate cu AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Pentru a accesa această funcÈ›ionalitate, ai nevoie de un abonament activ %1$s. Te rugăm să %3$sactivezi abonamentul în %2$s%4$s sau %5$s obÈ›ine un nou abonament %1$s%6$s. Apoi, dă clic pe buton pentru a reîmprospăta această pagină pentru ca funcÈ›ionalitatea să funcÈ›ioneze corect, ceea ce poate dura până la 30 de secunde."],"Refresh page":["Reîmprospătează pagină"],"Not enough content":["ConÈ›inut insuficient"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Te rog reîncearcă mai târziu. Dacă problema persistă, te rog %1$scontactează echipa noastră de suport%2$s!"],"Something went wrong":["Ceva nu a mers bine"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Se pare că a avut loc o expirare a conexiunii. Te rugăm să îți verifici conexiunea la internet È™i să încerci din nou mai târziu. Dacă problema persistă, %1$scontactează echipa noastră de asistență%2$s"],"Connection timeout":["Timp de conexiune expirat"],"Use AI":["FoloseÈ™ti AI"],"Close modal":["ÃŽnchide modal"],"Learn more about AI (Opens in a new browser tab)":["Află mai multe despre AI (se deschide într-o filă nouă de navigator)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitlu%3$s: Pagina ta încă nu are un titlu. %2$sAdaugă unul%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sTitlu%2$s: Pagina ta are un titlu. Foarte bine!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribuÈ›ie frază cheie%3$s: %2$sinclude fraza cheie sau sinonimele ei în text ca să putem verifica distribuÈ›ia ei (lor)%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribuÈ›ie frază cheie%2$s: foarte bine!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribuÈ›ie frază cheie%3$s: inegală. Unele părÈ›i ale textului nu conÈ›in fraza cheie sau sinonimele ei. %2$sDistribuie fraza cheie uniform%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribuÈ›ie frază cheie%3$s: inegală. PărÈ›i mari de text nu conÈ›in fraza cheie sau sinonimele ei. %2$sDistribuie fraza cheie uniform%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: nu foloseÈ™ti multe cuvinte greu de înÈ›eles, deci textul tău este uÈ™or de citit. Foarte bine!"],"Word complexity":["Complexitatea cuvintelor"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s dintre cuvintele din textul tău sunt considerate greu de înÈ›eles. %3$sÃŽncearcă să foloseÈ™ti cuvinte mai scurte È™i mai familiare pentru a îmbunătăți lizibilitatea%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sAliniere%3$s: există o secÈ›iune lungă cu text aliniat central. %2$sÃŽÈ›i recomandăm să îl aliniezi la stânga%3$s.","%1$sAliniere%3$s: există %4$s secÈ›iuni lungi cu text aliniat central. %2$sÃŽÈ›i recomandăm să le aliniezi la stânga%3$s.","%1$sAliniere%3$s: există %4$s de secÈ›iuni lungi cu text aliniat central. %2$sÃŽÈ›i recomandăm să le aliniezi la stânga%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sAliniere%3$s: există o secÈ›iune lungă cu text aliniat central. %2$sÃŽÈ›i recomandăm să le aliniezi la dreapta%3$s.","%1$sAliniere%3$s: există %4$s secÈ›iuni lungi cu text aliniat central. %2$sÃŽÈ›i recomandăm să le aliniezi la dreapta%3$s.","%1$sAliniere%3$s: există %4$s de secÈ›iuni lungi cu text aliniat central. %2$sÃŽÈ›i recomandăm să le aliniezi la dreapta%3$s."],"Select image":["Selectează o imagine"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["S-ar putea să nu È™tii, dar este posibil să existe pagini pe site-ul tău care nu primesc nicio legătură. Aceasta este o problemă de SEO, deoarece este dificil pentru motoarele de căutare să găsească paginile care nu au nicio legătură. Deci, este mai greu pentru ele să le clasifice. Noi numim aceste pagini „conÈ›inut orfanâ€. ÃŽn acest antrenament, găsim conÈ›inutul orfan de pe site-ul tău È™i te îndrumăm să adaugi rapid legături la acestea, astfel încât să aibă o È™ansă de a se clasifica!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["E timpul să adaugi niÈ™te legături! Mai jos, vezi o listă cu articolele orfane. Sub fiecare dintre ele, există sugestii pentru pagini similare la care ai putea adăuga o legătură. Atunci când adaugi legătura, asigură-te că o inserezi într-o propoziÈ›ie relevantă legată de articolul tău orfan. Continuă să adaugi legături la fiecare dintre articolele orfane până când eÈ™ti mulÈ›umit(ă) de numărul de legături care indică spre ele."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Este timpul să adaugi câteva legături! Mai jos, vezi o listă de conÈ›inut fundamental. Sub fiecare, există sugestii pentru articole de la care ai putea adăuga o legătură. Când adaugi legătura, asigură-te că o inserezi într-o propoziÈ›ie relevantă legată de articolul tău principal. Continuă să adaugi legături de la câte articole similare ai nevoie, până când conÈ›inuturile fundamentale au cele mai multe legături interne îndreptate către ele."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Unele articole de pe site-ul tău sunt %1$scele%2$s mai importante. Ele răspund la întrebările oamenilor È™i le rezolvă problemele. Deci, merită să fie clasate! La %3$s, le numim aceste articole fundamentale. Una dintre modalitățile de a le avea clasate este să ai suficiente legături către ele. Mai multe legături semnalează motoarele de căutare că acele articole sunt importante È™i valoroase. ÃŽn acest antrenament, te vom ajuta să adaugi legături către articolele tale fundamentale!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["După ce adaugi puÈ›in mai multe copii, îți vom putea spune care este nivelul de formalitate al textului tău."],"Overall, your text appears to be %1$s%3$s%2$s.":["ÃŽn general, textul tău pare a fi %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Integrarea Zapier va fi eliminată din %1$s în versiunea 20.7 (data lansării: 9 mai). Dacă ai întrebări, te rugăm să contactezi %2$s."],"Maximum heading level":["Nivel subtitlu maxim"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Ai dezactivat sugestiile de legături, care sunt necesare pentru ca legăturile similare să funcÈ›ioneze. Dacă vrei să adaugi legături similare, accesează FuncÈ›ionalități site È™i activează Legături similare."],"Schema":["Schema"],"Meta tags":["Etichete meta"],"Not available":["Indisponibil"],"Checks":["Verificări"],"Focus Keyphrase":["Focus frază cheie"],"Good":["Bun"],"No index":["Fără indexare"],"Front-end SEO inspector":["Inspector SEO pentru partea din față"],"Focus keyphrase not set":["Focus frază cheie nesetat"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Odată ce È›i-ai publicat Zap-ul în panoul de control %s, poÈ›i verifica dacă este activat È™i conectat la site-ul tău."],"Reset API key":["Resetează cheie API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Momentan eÈ™ti conectat la %s folosind următoarea cheie API. Dacă ai vrea să te reconectezi cu o cheie API diferită îți poÈ›i reseta cheia mai jos."],"Your API key":["Cheia ta API"],"Go to your %s dashboard":["Mergi la panoul tău de control %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Te-ai conectat cu succes la %1$s! Pentru a-È›i gestiona Zap-ul, te rog vizitează-È›i panoul de control %2$s."],"Your %s dashboard":["Panoul tău de control %s"],"Verify connection":["Verificare conexiune"],"Verify your connection":["Verifică-È›i conexiunea"],"Create a Zap":["Creează un Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Autentifică-te în contul tău %1$s È™i începe să-È›i creezi primul Zap! ReÈ›ine că poÈ›i crea doar un Zap cu un eveniment declanÈ™ator din %2$s. Cu acest Zap poÈ›i alege una sau mai multe acÈ›iuni."],"%s API key":["Cheie API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Vei avea nevoie de această cheie API mai târziu în %s când îți vei seta Zap-ul."],"Copy your API key":["Copiază-È›i cheia API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Pentru a seta o conexiune, asigură-te că ai copiat cheia API dată mai jos È™i foloseÈ™te-o pentru a crea È™i a porni un Zap prin intermediul contului tău %s."],"Manage %s settings":["Gestionează setări %s"],"Connect to %s":["Conectează-te la %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Te rog reÈ›ine: pentru ca acest antrenament să funcÈ›ioneze bine, trebuie să rulezi instrumentul de optimizare a datelor SEO. Administratorii îl pot rula sub %1$sSEO > Utile%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Ai adăugat legături către articolele orfane È™i le-ai curățat pe cele care nu mai erau relevante. Bună treabă! Aruncă o privire la rezumatul de mai jos È™i sărbătoreÈ™te ceea ce ai realizat!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Examinează critic conÈ›inutul din această listă È™i fă actualizările necesare. Dacă ai nevoie de ajutor pentru actualizare, avem un %1$sarticol de blog foarte util, care te poate ghida pe tot parcursul%2$s (dă clic pentru a deschide într-o filă nouă)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sAi nevoie de mai mult ajutor? Am acoperit fiecare pas mai detaliat în următorul ghid: %2$sCum să foloseÈ™ti conÈ›inutul orfan de antrenament %7$s%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Tocmai È›i-ai făcut cel mai bun conÈ›inut uÈ™or de găsit È™i mai probabil să fie clasat! Mai departe! Din când în când, nu uita să verifici dacă conÈ›inutul fundamental primeÈ™te suficiente legături!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Aruncă o privire la lista de mai jos. ConÈ›inutul tău fundamental (marcat cu %1$s) are cele mai multe legături interne care îndreaptă către el? Dă clic pe butonul Optimizare dacă crezi că un conÈ›inut fundamental are nevoie de mai multe legături. Acest lucru va muta articolul la pasul următor."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Toate conÈ›inuturile tale fundamentale au buline verzi? Pentru cele mai bune rezultate, ia în considerare editarea celor care nu au!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Ce articole vrei să clasezi cel mai bine? Pe care publicul tău le-ar găsi cele mai utile È™i complete? Dă clic pe săgeata orientată în jos È™i cauză articole care se potrivesc acestor criterii. Vom marca automat articolele pe care le selectezi din listă ca elemente fundamentale de conÈ›inut."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sAi nevoie de mai mult ajutor? Am acoperit fiecare pas mai detaliat în: %2$sCum să foloseÈ™ti conÈ›inutul orfan de antrenament %7$s%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Cuprins Yoast"],"Yoast Related Links":["Legături similare Yoast"],"Finish optimizing":["Termină optimizarea"],"You've finished adding links to this article.":["Ai terminat de adăugat legături la acest articol."],"Optimize":["Optimizează"],"Added to next step":["Adăugat la următorul pas"],"Choose cornerstone articles...":["Alege articolele pietre de temelie..."],"Loading data...":["Se încarcă datele..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["ÃŽncă nu È›i-ai curățat sau actualizat niciun articol folosind acest antrenament. Odată ce o faci, un rezumat al muncii tale va fi afiÈ™at aici."],"Skipped":["Sărit"],"Hidden from search engines.":["Ascuns de motoarele de căutare."],"Removed":["ÃŽnlăturate"],"Improved":["ÃŽmbunătățit"],"Resolution":["RezoluÈ›ie"],"Loading redirect options...":["ÃŽncarcă opÈ›iuni de redirecÈ›ionare..."],"Remove and redirect":["ÃŽnlătură È™i redirecÈ›ionează"],"Custom url:":["URL personalizat:"],"Related article:":["Articol similar:"],"Home page:":["Prima pagină:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["EÈ™ti pe cale să înlături %1$s%2$s%3$s. Pentru a preveni paginile 404 pe site-ul tău, ar trebui să-l redirecÈ›ionezi către altă pagină de pe site-ul tău. Unde ai vrea să-l redirecÈ›ionezi?"],"SEO Workout: Remove article":["Antrenament SEO: ÃŽnlătură articol"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Totul arată bine! Nu am găsit niciun articol pe site-ul tău care să fie mai vechi de È™ase luni È™i care să primească prea puÈ›ine legături pe site-ul tău. Revino mai târziu pentru sugestii noi de curățare!"],"Hide from search engines":["Ascunde de motoarele de căutare"],"Improve":["ÃŽmbunătățeÈ™te"],"Are you sure you wish to hide this article from search engines?":["Sigur vrei să ascunzi acest articol de motoarele de căutare?"],"Action":["AcÈ›iune"],"You've hidden this article from search engines.":["Ai ascuns acest articol de motoarele de căutare."],"You've removed this article.":["Ai înlăturat acest articol."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Momentan nu ai selectat niciun articol pentru îmbunătățire. Selectează câteva articole orfane din paÈ™ii anteriori la care să le adaugi legături È™i îți vom arăta aici sugestii de legături."],"Loading link suggestions...":["Se încarcă sugestiile de legături..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Nu am găsit nicio sugestie pentru acest articol, dar, desigur, poÈ›i adăuga în continuare legături la articole despre care credeÈ›i că sunt similare."],"Skip":["Sari"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["ÃŽncă nu ai selectat niciun articol pentru acest pas. PoÈ›i face asta în pasul anterior."],"Is it up-to-date?":["Este actualizat?"],"Last Updated":["Ultima actualizare"],"You've moved this article to the next step.":["Ai mutat acest articol în pasul următor."],"Unknown":["Necunoscut"],"Clear summary":["Curăță rezumat"],"Add internal links towards your orphaned articles.":["Adaugă legături interne către articolele tale orfane."],"Should you update your article?":["Trebuie să-È›i actualizezi articolul?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Site-ul tău conÈ›ine adesea o mulÈ›ime de conÈ›inut care a fost creat o dată È™i care nu a mai fost revizuit apoi. Este important să-l parcurgi È™i să te întrebi dacă acest conÈ›inut este încă relevant pentru site-ul tău. Ar trebui să-l îmbunătățesc sau să-l înlătur?"],"Start: Love it or leave it?":["ÃŽncepe: îl iubeÈ™ti sau îl părăseÈ™ti?"],"Clean up your unlinked content to make sure people can find it":["Curăță-È›i conÈ›inutul nelegat pentru a te asigura că oamenii îl pot găsi"],"I've finished this workout":["Am terminat acest antrenament"],"Reset this workout":["Resetează acest antrenament"],"Well done!":["Foarte bine!"],"Add internal links towards your cornerstones":["Adaugă legături interne către conÈ›inuturile tale de bază"],"Check the number of incoming internal links of your cornerstones":["Verifică numărul de legături interne de intrare ale conÈ›inuturilor tale de bază"],"Start: Choose your cornerstones!":["ÃŽncepe: alege-È›i conÈ›inutul fundamental"],"The cornerstone approach":["Abordarea pentru conÈ›inutul fundamental"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Te rog reÈ›ine: pentru ca acest antrenament să funcÈ›ioneze È™i să-È›i ofere sugestii de legături, trebuie să rulezi instrumentul de optimizare date SEO. Administratorii pot rula asta în %1$sSEO > Unelte%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Te rugăm reÈ›ine: administratorul tău a dezactivat funcÈ›ionalitatea de conÈ›inut fundamental în setările SEO. Dacă vrei să utilizezi acest antrenament, acesta trebuie să fie activat."],"I've finished this step":["Am terminat acest pas"],"Revise this step":["RevizuieÈ™te acest pas"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Nu am putut găsi legături interne pe paginile tale. Fie nu ai adăugat încă nicio legătură internă la conÈ›inutul tău, fie Yoast SEO nu le-a indexat. PoÈ›i solicita Yoast SEO să îți indexeze legăturile rulând optimizarea datelor SEO în SEO> Unelte."],"Incoming links":["Legături de intrare"],"Edit to add link":["Editează pentru a adăuga legătură"],"%s incoming link":["%s legătură de intrare","%s legături de intrare","%s de legături de intrare"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Momentan nu ai articole marcate ca fiind de bază. Când îți marchezi articolele ca È™i conÈ›inut de bază, vor apărea aici."],"Focus keyphrase":["Frază cheie"],"Article":["Articol"],"Readability score":["Punctaj lizibilitate"],"SEO score":["Punctaj SEO"],"Copy failed":["Copiere eÈ™uată"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["ÃŽmbunătățeÈ™te clasarea pentru toate conÈ›inuturile tale de bază folosind acest %1$santrenament pas cu pas!%2$s"],"Rank with articles you want to rank with":["Propulsează în partea superioară articolele pe care vrei să le evidenÈ›iezi în rezultatele de căutare"],"Descriptive text":["Text descriptiv"],"Show the descriptive text":["Arată textul descriptiv"],"Show icon":["Arată icon"],"Yoast Estimated Reading Time":["Timp de citire estimat Yoast"],"Shows an estimated reading time based on the content length.":["Arată un timp de citire estimat bazat pe lungimea conÈ›inutului."],"reading time":["timp de citire"],"content length":["lungime conÈ›inut"],"Estimated reading time:":["Timp de citire estimat:"],"minute":["minut","minute","de minute"],"Settings":["Setări"],"OK":["OK"],"Close":["ÃŽnchide"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Prima soluÈ›ie SEO viabilă È™i complexă pentru WordPress, inclusiv analiza conÈ›inut pagini, hărÈ›i site XML È™i multe altele."],"Type":["Tip"],"Team Yoast":["Echipa Yoast"],"Orphaned content":["ConÈ›inutul orfan"],"Synonyms":["Sinonime"],"Internal linking suggestions":["Sugestii de legături interne"],"Enter a related keyphrase to calculate the SEO score":["Introdu o frază cheie similară pentru a calcula punctajul SEO"],"Related keyphrase":["Frază cheie similară"],"Add related keyphrase":["Adaugă fraze cheie similare"],"Analysis results":["Rezultate analiză"],"Help on choosing the perfect keyphrase":["Ajutor pentru alegerea frazei cheie perfecte"],"Help on keyphrase synonyms":["Ajutor pentru sinonime frază cheie"],"Keyphrase":["Frază cheie"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["URL nou: {{link}}%s{{/link}}"],"Undo":["Revenire"],"Redirect created":["RedirecÈ›ionarea a fost creată"],"%s just created a redirect from the old URL to the new URL.":["%s tocmai a creat o redirecÈ›ionare de la URL-ul vechi la URL-ul nou."],"Old URL: {{link}}%s{{/link}}":["URL vechi: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Sinonime fraza cheie"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["A apărut o eroare: analiza SEO Premium nu funcÈ›ionează conform aÈ™teptărilor. Te rugăm {{{activateLink}}}activează-È›i abonamentul în MyYoast{{{/activateLink}}} È™i apoi {{reloadButton}}reîncarcă această pagină{{{/reloadButton}}} pentru a o face să funcÈ›ioneze corect."],"seo":["seo"],"internal linking":["legături interne"],"site structure":["structură site"],"We could not find any relevant articles on your website that you could link to from your post.":["Nu am putut găsi niciun articol relevant pe site-ul tău web pe care să-l poÈ›i lega la articolul tău."],"Load suggestions":["ÃŽncarcă sugestii"],"Refresh suggestions":["Reîmprospătează sugestii"],"Write list…":["Scrie lista..."],"Adds a list of links related to this page.":["Adaugă o listă de legături similare la această pagină."],"related posts":["articole similare"],"related pages":["pagini similare"],"Adds a table of contents to this page.":["Adaugă un tabel de conÈ›inut la această pagină."],"links":["legături"],"toc":["cuprins"],"Copy link":["Copiază legătura"],"Copy link to suggested article: %s":["Copiază legătura la articolul sugerat: %s"],"Add a title to your post for the best internal linking suggestions.":["Adaugă un titlu articolului tău pentru cele mai bune sugestii de legături interne."],"Add a metadescription to your post for the best internal linking suggestions.":["Adaugă o descriere meta articolului tău pentru cele mai bune sugestii de legături interne."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Adaugă un titlu È™i o descriere meta articolului tău pentru cele mai bune sugestii de legături interne."],"Also, add a title to your post for the best internal linking suggestions.":["Adaugă È™i un titlu articolului tău pentru cele mai bune sugestii de legături interne."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Adaugă È™i o meta descriere articolului tău pentru cele mai bune sugestii de legături interne."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Adaugă È™i un titlu È™i o meta descriere articolului tău pentru cele mai bune sugestii de legături interne."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["După ce adaugi mai mult text, îți vom oferi aici o listă cu conÈ›inut similar la care ai putea să te legi în articolul tău."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Pentru a-È›i îmbunătăți structura site-ului, consideră legarea site-ului tău web la alte articole sau pagini relevante."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Durează câteva secunde să-È›i arătăm o listă de conÈ›inut similar pe care l-ai putea lega. Sugestiile vor fi afiÈ™ate aici imediat ce le avem."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}CiteÈ™te ghidul nostru despre legături interne pentru SEO{{/a}} pentru a afla mai multe."],"Copied!":["Copiată!"],"Not supported!":["Nesuportată!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["ÃŽncerci să foloseÈ™ti mai multe fraze cheie similare? Ar trebui să le adaugi separat."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Fraza cheie este prea lungă. Ea poate avea maxim 191 de caractere."],"Add as related keyphrase":["Adaugă ca frază cheie similară"],"Added!":["Adăugată!"],"Remove":["ÃŽnlătură"],"Table of contents":["Cuprins"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Trebuie să-È›i optimizăm datele SEO ale site-ului pentru a-È›i oferi cele mai bune %1$ssugestii de legături%2$s. %3$sÃŽncepe optimizarea datelor SEO%4$s"],"Create a Zap in %s":["Creează un Zap în %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ru_RU.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ru_RU.json new file mode 100644 index 00000000..b601d759 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-ru_RU.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"ru"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð±Ñ‹Ð» возвращен Ñо Ñледующей ошибкой: \"%s\""],"X share preview":["ПредпроÑморт ÑовмеÑтного доÑтупа X"],"AI X title generator":["Генератор заголовков X Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ИИ"],"AI X description generator":["Генератор опиÑаний X Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ИИ"],"X preview":["ПредпроÑмотр X"],"Please enter a valid focus keyphrase.":["ПожалуйÑта, введите дейÑтвительную фокуÑную ключевую фразу."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Чтобы воÑпользоватьÑÑ Ñтой функцией, ваш Ñайт должен быть общедоÑтупным. Это отноÑитÑÑ ÐºÐ°Ðº к теÑтовым Ñайтам, так и к тем, где ваш REST API защищен паролем. ПожалуйÑта, убедитеÑÑŒ, что ваш Ñайт общедоÑтупен, и повторите попытку. ЕÑли проблема ÑохранÑетÑÑ, %1$sобратитеÑÑŒ в Ñлужбу поддержки%2$s."],"Yoast AI cannot reach your site":["Yoast AI не может ÑвÑзатьÑÑ Ñ Ð²Ð°ÑˆÐ¸Ð¼ Ñайтом"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Чтобы получить доÑтуп к Ñтой функции, вам нужно активировать подпиÑки на %2$s и %3$s. ПожалуйÑта, %5$sактивируйте ваши подпиÑки в %1$s%6$s или %7$sполучите новую %4$s%8$s. ПоÑле Ñтого обновите Ñтраницу, чтобы Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð»Ð° корректно, Ñто может занÑть до 30 Ñекунд."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Перед иÑпользованием генератора заголовков ИИ необходимо включить SEO-анализ. Чтобы включить его, перейдите в раздел %2$sФункции Ñайта %1$s%3$s, включите SEO-анализ и нажмите \"Сохранить изменениÑ\". ЕÑли SEO-анализ отключен в вашем профиле Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ WordPress, зайдите в Ñвой профиль и включите его там. ЕÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа к Ñтим наÑтройкам, обратитеÑÑŒ к админиÑтратору."],"Social share preview":["Предварительный проÑмотр раÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð² ÑоцÑетÑÑ…"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Чтобы продолжать пользоватьÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÐµÐ¹ ИИ Yoast, пожалуйÑта, уменьшите чаÑтоту запроÑов. Ð’ нашей %1$sÑтатье%2$s приведены рекомендации по Ñффективному планированию и периодичноÑти запроÑов Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ рабочего процеÑÑа."],"You've reached the Yoast AI rate limit.":["Ð’Ñ‹ доÑтигли предела ÑкороÑти ИИ Yoast."],"Allow":["Разрешить"],"Deny":["Отказать"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Чтобы проÑмотреть Ñто видео, вам нужно разрешить %1$s загружать вÑтроенные видео из %2$s."],"Text generated by AI may be offensive or inaccurate.":["ТекÑÑ‚, генерируемый иÑкуÑÑтвенным интеллектом, может быть оÑкорбительным или неточным."],"(Opens in a new browser tab)":["(ОткроетÑÑ Ð² новой вкладке браузера)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["УÑкорьте Ñвой рабочий процеÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ генеративного ИИ. Получите выÑококачеÑтвенные варианты заголовков и опиÑаний Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка и поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð² Ñоциальных ÑетÑÑ…. %1$sПодробнее%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Создавайте заголовки и опиÑÐ°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Yoast ИИ!"],"New to %1$s":["Ðовое в %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Я принимаю %1$sУÑÐ»Ð¾Ð²Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÑлуг%2$s и %3$sПолитику конфиденциальноÑти%4$s ÑервиÑа ИИ Yoast. Это включает в ÑÐµÐ±Ñ ÑоглаÑие на Ñбор и иÑпользование данных Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого опыта."],"Start generating":["ЗапуÑтить генерацию"],"Yes, revoke consent":["Да, отозвать ÑоглаÑие"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Отозвав Ñвое ÑоглаÑие, вы больше не будете иметь доÑтупа к функциÑм ИИ Yoast. Ð’Ñ‹ уверены, что хотите отозвать Ñвое ÑоглаÑие?"],"Something went wrong, please try again later.":["Что-то пошло не так, пожалуйÑта, повторите попытку позже."],"Revoke AI consent":["Отозвать ÑоглаÑие ИИ"],"AI title generator":["Генератор заголовков ИИ"],"AI description generator":["Генератор опиÑаний ИИ"],"AI social title generator":["ИИ-генератор заголовков Ð´Ð»Ñ ÑоцÑетей"],"AI social description generator":["ИИ-генератор опиÑаний Ð´Ð»Ñ ÑоцÑетей"],"Dismiss":["Скрыть"],"Don’t show again":["Больше не показывать"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sСовет%2$s: ПовыÑьте точноÑть генерируемых ИИ заголовков, напиÑав больше Ñодержимого на Ñвоей Ñтранице."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sСовет%2$s: ПовыÑьте точноÑть генерируемых ИИ опиÑаний, напиÑав больше Ñодержимого на Ñвоей Ñтранице."],"Try again":["Попробуйте ещё раз"],"Social preview":["Предварительный проÑмотр ÑоцÑетей"],"Desktop result":["Результат на ПК"],"Mobile result":["Мобильный результат"],"Apply %s description":[],"Apply %s title":[],"Next":["Далее"],"Previous":["Ðазад"],"Generate 5 more":["Сгенерировать ещё 5"],"Google preview":["ПредпроÑмотр Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Ð’ ÑвÑзи Ñ Ñ‚ÐµÐ¼, что OpenAI придерживаетÑÑ Ñтрогих ÑтичеÑких принципов и %1$sполитики иÑпользованиÑ%2$s, мы не можем генерировать SEO-заголовки Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ Ñтраницы. ЕÑли вы планируете пользоватьÑÑ Ð¸ÑкуÑÑтвенным интеллектом, пожалуйÑта, избегайте иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°ÑильÑтвенного или ÑекÑуально откровенного Ñодержимого. %3$sПодробнее о том, как наÑтроить Ñвою Ñтраницу, чтобы добитьÑÑ Ð½Ð°Ð¸Ð»ÑƒÑ‡ÑˆÐ¸Ñ… результатов при иÑпользовании ИИ%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Ð’ ÑвÑзи Ñ Ñ‚ÐµÐ¼, что OpenAI придерживаетÑÑ Ñтрогих ÑтичеÑких принципов и %1$sполитики иÑпользованиÑ%2$s, мы не можем генерировать метаопиÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ Ñтраницы. ЕÑли вы ÑобираетеÑÑŒ пользоватьÑÑ Ð¸ÑкуÑÑтвенным интеллектом, пожалуйÑта, избегайте иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°ÑильÑтвенного или ÑекÑуально откровенного контента. %3$sПодробнее о том, как наÑтроить Ñвою Ñтраницу, чтобы добитьÑÑ Ð½Ð°Ð¸Ð»ÑƒÑ‡ÑˆÐ¸Ñ… результатов при иÑпользовании ИИ%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Чтобы получить доÑтуп к Ñтой функции, необходимо иметь активную подпиÑку %1$s. ПожалуйÑта, %3$sактивируйте подпиÑку в %2$s%4$s или %5$sполучите новую %1$sподпиÑку%6$s. ПоÑле Ñтого нажмите кнопку, чтобы обновить Ñтраницу Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы функции, что может занÑть до 30 Ñекунд."],"Refresh page":["Обновить Ñтраницу"],"Not enough content":["ÐедоÑтаточно Ñодержимого"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["ПожалуйÑта, повторите попытку позже. ЕÑли проблема не решена, %1$sобратитеÑÑŒ в Ñлужбу поддержки%2$s!"],"Something went wrong":["Что-то пошло не так"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Похоже, Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ иÑтекло. ПожалуйÑта, проверьте Ñоединение Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼ и повторите попытку. ЕÑли проблема не решена, пожалуйÑта, %1$sобратитеÑÑŒ в Ñлужбу поддержки%2$s!"],"Connection timeout":["Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ñтекло"],"Use AI":["ИÑпользуйте ИИ"],"Close modal":["Закрыть модальное окно"],"Learn more about AI (Opens in a new browser tab)":["Подробнее о ИИ (Открыть в новой вкладке)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sЗаголовок%3$s: У вашей Ñтраницы пока нет Заголовка. %2$sДобавьте его%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sЗаголовок%2$s: У вашей Ñтраницы еÑть заголовок. ÐžÑ‚Ð»Ð¸Ñ‡Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sРаÑпределение ключевой фразы%3$s: %2$sИÑпользуйте в текÑте вашу ключевую фразу и ее Ñинонимы, чтобы мы могли поÑчитать раÑпределение ключевой фразы%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sРаÑпределение ключевой фразы%2$s: Отлично!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sРаÑпределение ключевой фразы%3$s: Ðеравномерное. Ðекоторые чаÑти вашего текÑта не Ñодержат ключевой фразы или ее Ñинонимов. %2$sРаÑпределите их более равномерно%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sРаÑпределение ключевой фразы%3$s: Очень неравномерное. Большие чаÑти вашего текÑта не Ñодержат ключевой фразы или ее Ñинонимов. %2$sРаÑпределите их более равномерно%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Ð’Ñ‹ не иÑпользуете Ñлишком много Ñложных Ñлов, что делает ваш текÑÑ‚ легким Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°!"],"Word complexity":["СложноÑть Ñлов"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s Ñлов в вашем текÑте ÑчитаютÑÑ Ñложными. %3$sПопробуйте иÑпользовать более короткие и знакомые Ñлова Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ñ‡Ð¸Ñ‚Ð°Ð±ÐµÐ»ÑŒÐ½Ð¾Ñти%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sВыравнивание%3$s: ЕÑть длинный фрагмент текÑта, раÑположенного по центру.%2$sМы рекомендуем Ñделать выравнивание по левому краю.%3$s.","%1$sВыравнивание%3$s: ЕÑть %4$s длинных фрагмента текÑта, раÑположенных по центру. %2$sМы рекомендуем Ñделать выравнивание по левому краю.%3$s.","%1$sВыравнивание%3$s: ЕÑть %4$s длинных фрагментов текÑта, раÑположенных по центру. %2$sМы рекомендуем Ñделать выравнивание по левому краю.%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sВыравнивание%3$s: ЕÑть длинный фрагмент текÑта, раÑположенного по центру.%2$sМы рекомендуем Ñделать выравнивание по правому краю.%3$s.","%1$sВыравнивание%3$s: ЕÑть %4$s длинных фрагмента текÑта, раÑположенных по центру. %2$sМы рекомендуем Ñделать выравнивание по правому краю.%3$s.","%1$sВыравнивание%3$s: ЕÑть %4$s длинных фрагментов текÑта, раÑположенных по центру. %2$sМы рекомендуем Ñделать выравнивание по правому краю.%3$s."],"Select image":["Выберите изображение"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Возможно, вы даже не подозреваете об Ñтом, но на вашем Ñайте могут быть Ñтраницы, на которые нет ÑÑылок. Это проблема SEO, потому что поиÑковым ÑиÑтемам Ñложно найти Ñтраницы, на которые нет ÑÑылок. ПоÑтому их Ñложнее ранжировать. Мы называем такие Ñтраницы \"оÑиротевшим контентом\". Ð’ Ñтом тренажере мы найдем оÑиротевший контент на вашем Ñайте и поможем вам быÑтро добавить на него ÑÑылки, чтобы он получил ÑˆÐ°Ð½Ñ Ð½Ð° ранжирование!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Пора добавить неÑколько ÑÑылок! Ðиже вы видите ÑпиÑок Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ оÑиротевшими ÑтатьÑми. Под каждой из них еÑть Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾ ÑвÑзанных Ñтраницах, на которые вы можете добавить ÑÑылку. ДобавлÑÑ ÑÑылку, не забудьте вÑтавить ее в ÑоответÑтвующее предложение, ÑвÑзанное Ñ Ð²Ð°ÑˆÐµÐ¹ оÑиротевшей Ñтатьей. Продолжайте добавлÑть ÑÑылки на вÑе оÑиротевшие Ñтатьи, пока не будете удовлетворены количеÑтвом ÑÑылок, указывающих на них."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Пора добавить неÑколько ÑÑылок! Ðиже вы видите ÑпиÑок Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ краеугольными камнÑми. Под каждым из них еÑть Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñтатей, на которые вы можете добавить ÑÑылку. При добавлении ÑÑылки убедитеÑÑŒ, что она вÑтавлена в ÑоответÑтвующее предложение, ÑвÑзанное Ñ Ð²Ð°ÑˆÐµÐ¹ краеугольной Ñтатьей. Продолжайте добавлÑть ÑÑылки из Ñтольких Ñтатей, Ñколько вам нужно, пока ваши краеугольные камни не будут иметь наибольшее количеÑтво внутренних ÑÑылок, указывающих на них."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Ðекоторые Ñтатьи на вашем Ñайте %1$sÑамые%2$s важные. Они отвечают на вопроÑÑ‹ людей и решают их проблемы. Значит, они заÑлуживают выÑокого меÑта в рейтинге! Ð’ %3$s мы называем их краеугольными ÑтатьÑми. Один из ÑпоÑобов повыÑить их рейтинг - размеÑтить на них доÑтаточное количеÑтво ÑÑылок. Большее количеÑтво ÑÑылок Ñигнализирует поиÑковым ÑиÑтемам, что Ñти Ñтатьи важны и ценны. Ð’ Ñтом тренажёре мы поможем вам добавить ÑÑылки на ваши краеугольные Ñтатьи!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Когда вы добавите немного больше копий, мы Ñможем определить уровень формальноÑти вашего текÑта."],"Overall, your text appears to be %1$s%3$s%2$s.":["Ð’ целом, ваш текÑÑ‚ выглÑдит, как %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Zapier будет удалена из %1$s верÑии 20.7 (дата выпуÑка -9 маÑ). ЕÑли у Ð²Ð°Ñ ÐµÑть вопроÑÑ‹, пожалуйÑта, обращайтеÑÑŒ к %2$s."],"Maximum heading level":["МакÑимальный уровень заголовка"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["У Ð²Ð°Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹ ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑылок, которые необходимы Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ ÑвÑзанных ÑÑылок. ЕÑли вы хотите добавить ÑвÑзанные ÑÑылки, пожалуйÑта, перейдите на Функции Ñайта и включите ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑылок."],"Schema":["Схема"],"Meta tags":["Метатеги"],"Not available":["ÐедоÑтупно"],"Checks":["Проверки"],"Focus Keyphrase":["ФокуÑÐ½Ð°Ñ ÐºÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°"],"Good":["Хорошо"],"No index":["Без индекÑа"],"Front-end SEO inspector":["Фронт-енд SEO инÑпектор"],"Focus keyphrase not set":["ФокуÑÐ½Ð°Ñ ÐºÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° не уÑтановлена"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["ПоÑле публикации Zap в панели ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ %s можно проверить, активен ли он и подключен ли к вашему Ñайту."],"Reset API key":["СброÑить ключ API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹ подключены к %s, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñледующий ключ API. ЕÑли вы хотите Ñнова подключитьÑÑ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ ключом API, вы можете ÑброÑить Ñвой ключ ниже."],"Your API key":["Ваш ключ API"],"Go to your %s dashboard":["Перейдите к панели инÑтрументов %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Ð’Ñ‹ уÑпешно подключилиÑÑŒ к %1$s! Чтобы управлÑть Zap, поÑетите панель инÑтрументов %2$s."],"Your %s dashboard":["Ваша %s панель инÑтрументов"],"Verify connection":["Проверьте Ñоединение"],"Verify your connection":["Проверьте ваше Ñоединение"],"Create a Zap":["Создайте Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Войдите в Ñвою учетную запиÑÑŒ %1$s и начните Ñоздавать Ñвой первый Zap! Обратите внимание, что вы можете Ñоздать только 1 Zap Ñ Ñ‚Ñ€Ð¸Ð³Ð³ÐµÑ€Ð½Ñ‹Ð¼ Ñобытием от %2$s. Ð’ рамках Ñтого Zap вы можете выбрать одно или неÑколько дейÑтвий."],"%s API key":["Ключ API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Этот ключ API понадобитÑÑ Ð²Ð°Ð¼ позже в %s, когда вы будете наÑтраивать Zap."],"Copy your API key":["Копировать ваш ключ API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Чтобы уÑтановить Ñоединение, Ñкопируйте приведенный ниже ключ API и иÑпользуйте его Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Zap в вашей учетной запиÑи %s."],"Manage %s settings":["УправлÑть наÑтройками %s"],"Connect to %s":["Подключить к %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Обратите внимание: чтобы Ñтот тренажер работал хорошо, необходимо запуÑтить инÑтрумент оптимизации данных SEO. ÐдминиÑтраторы могут запуÑтить его в разделе %1$sSEO > ИнÑтрументы%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Ð’Ñ‹ добавили ÑÑылки на Ñвои оÑиротевшие Ñтатьи и очиÑтили те, которые утратили актуальноÑть. ÐžÑ‚Ð»Ð¸Ñ‡Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°! ПоÑмотрите на Ñводку ниже и порадуйтеÑÑŒ тому, чего вы доÑтигли!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["КритичеÑки изучите Ñодержимое Ñтого ÑпиÑка и Ñделайте необходимые обновлениÑ. ЕÑли вам нужна помощь Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼, у Ð½Ð°Ñ ÐµÑть очень %1$sÐ¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ ÑÑ‚Ð°Ñ‚ÑŒÑ Ð² блоге, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ‚ вам пройти веÑÑŒ путь%2$s (нажмите, чтобы открыть в новой вкладке)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sÐужны дополнительные рекомендации? Мы подробно опиÑали каждый шаг в Ñледующем руководÑтве: %2$sКак иÑпользовать оÑиротевшее Ñодержимое %7$s%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Ð’Ñ‹ только что облегчили поиÑк вашего лучшего контента и повыÑили вероÑтноÑть его ранжированиÑ! Так держать! Ð’Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ времени не забывайте проверÑть, доÑтаточно ли ÑÑылок получают ваши краеугольные камни!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["ВзглÑните на приведенный ниже ÑпиÑок. Имеют ли ваши краеугольные камни (отмеченные %1$s) наибольшее количеÑтво внутренних ÑÑылок, указывающих на них? Ðажмите на кнопку Оптимизировать, еÑли вы Ñчитаете, что краеугольный камень нуждаетÑÑ Ð² большем количеÑтве ÑÑылок. Это переведет Ñтатью на Ñледующий шаг."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Ð’Ñе ли ваши краеугольные камни имеют зеленые значки? Ð”Ð»Ñ Ð´Ð¾ÑÑ‚Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð¸Ð»ÑƒÑ‡ÑˆÐ¸Ñ… результатов отредактируйте те, у которых их нет!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Какие Ñтатьи вы хотите ранжировать выше вÑего? Какие из них ваша Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ñочтет наиболее полезными и полными? Ðажмите на Ñтрелку, указывающую вниз, и найдите Ñтатьи, которые ÑоответÑтвуют Ñтим критериÑм. Мы автоматичеÑки пометим Ñтатьи, которые вы выберете из ÑпиÑка, как краеугольные."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sÐужны дополнительные рекомендации? Мы подробно опиÑали каждый шаг в Ñтатье: %2$sКак иÑпользовать тренажер %7$s по краеугольному Ñодержимому%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Таблица ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ Yoast"],"Yoast Related Links":["СвÑзанные ÑÑылки Yoast"],"Finish optimizing":["Завершить оптимизацию"],"You've finished adding links to this article.":["Ð’Ñ‹ завершили добавление ÑÑылок к Ñтой Ñтатье."],"Optimize":["Оптимизировать"],"Added to next step":["Добавлено к Ñледующему шагу"],"Choose cornerstone articles...":["Выберите краеугольные Ñтатьи..."],"Loading data...":["Загрузка даннных..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Ð’Ñ‹ ещё не очиÑтили или не обновили ни одной Ñтатьи Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñтого тренажёра. Как только вы Ñто Ñделаете, результат вашей работы поÑвитÑÑ Ð·Ð´ÐµÑÑŒ. "],"Skipped":["Пропущено"],"Hidden from search engines.":["Скрыто от поиÑковых ÑиÑтем."],"Removed":["Удалено"],"Improved":["Улучшено"],"Resolution":["Разрешение"],"Loading redirect options...":["Загрузка параметров перенаправлениÑ..."],"Remove and redirect":["Удалить и перенаправить"],"Custom url:":["ПользовательÑкий url:"],"Related article:":["СвÑÐ·Ð°Ð½Ð½Ð°Ñ ÑтатьÑ:"],"Home page:":["ДомашнÑÑ Ñтраница:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Ð’Ñ‹ ÑобираетеÑÑŒ удалить %1$s%2$s%3$s. Чтобы избежать ошибок 404 на вашем Ñайте, вы должны перенаправить его на другую Ñтраницу. Куда бы вы хотели его перенаправить?"],"SEO Workout: Remove article":["Тренажёр SEO: удалить Ñтатью"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Ð’ÑÑ‘ выглÑдит отлично! Мы не нашли на вашем Ñайте ни одной Ñтатьи, Ñтарше 6 меÑÑцев и в которых мало ÑÑылок на ваш Ñайт. ВернитеÑÑŒ Ñюда позже, чтобы узнать о новых предложениÑÑ… по очиÑтке!"],"Hide from search engines":["Скрыть от поиÑковых ÑиÑтем"],"Improve":["Улучшить"],"Are you sure you wish to hide this article from search engines?":["Ð’Ñ‹ уверены, что хотите Ñкрыть Ñту Ñтатью от поиÑковых ÑиÑтем?"],"Action":["ДейÑтвие"],"You've hidden this article from search engines.":["Ð’Ñ‹ Ñкрыли Ñту Ñтатью от поиÑковых ÑиÑтем."],"You've removed this article.":["Ð’Ñ‹ удалили Ñту Ñтатью."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Ðа данный момент вы не выбрали ни одной Ñтатьи Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ. Выберите неÑколько Ñтатей в предыдущем шаге, чтобы добавить ÑÑылки на них, и мы покажем вам Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑылок здеÑÑŒ."],"Loading link suggestions...":["Загрузка предложений по ÑÑылкам..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Мы не нашли предложений по Ñтой Ñтатье, но, конечно же, вы можете добавить ÑÑылки на ÑвÑзанные, по вашему мнению, Ñтатьи."],"Skip":["ПропуÑтить"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Ð’Ñ‹ ещё не выбрали Ñтатьи Ð´Ð»Ñ Ñтого шага. Ð’Ñ‹ можете Ñделать Ñто в предыдущем шаге."],"Is it up-to-date?":["Это актуально?"],"Last Updated":["ПоÑледнее обновление"],"You've moved this article to the next step.":["Ð’Ñ‹ перемеÑтили Ñту Ñтатью в Ñледующий шаг."],"Unknown":["ÐеизвеÑтно"],"Clear summary":["ОчиÑтить результаты"],"Add internal links towards your orphaned articles.":["Добавьте внутренние ÑÑылки на Ñтатьи-Ñироты."],"Should you update your article?":["Ðужно ли обновлÑть Ñтатью?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Ваш Ñайт может Ñодержать множеÑтво Ñозданной когда-то информации, к которой больше никогда не возвращаютÑÑ. Важно проÑмотреть её и решить, ÑвлÑетÑÑ Ð»Ð¸ Ñто Ñодержимое актуальным Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñайта. Улучшить его или удалить?"],"Start: Love it or leave it?":["Ðачать: или так, или никак"],"Clean up your unlinked content to make sure people can find it":["ОчиÑтите неÑвÑзанное Ñодержимое, чтобы люди могли его найти"],"I've finished this workout":["Я закончил тренировку"],"Reset this workout":["СброÑить тренировку"],"Well done!":["Отлично!"],"Add internal links towards your cornerstones":["Добавьте внутренние ÑÑылки на краеугольную информацию"],"Check the number of incoming internal links of your cornerstones":["Проверьте количеÑтво входÑщих внутренних ÑÑылок краеугольной информации"],"Start: Choose your cornerstones!":["Ðачать: выберите краеугольную информацию!"],"The cornerstone approach":["Краеугольный подход"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Обратите внимание: чтобы Ñтот тренажёр работал правильно и предлагал варианты ÑÑылок, вам Ñледует запуÑтить инÑтрумент SEO-оптимизации данных. ÐдминиÑтраторы могут запуÑтить Ñтот инÑтрумент в разделе %1$sSEO > ИнÑтрументы%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Обратите внимание: ваш админиÑтратор отключил функциональноÑть краеугольного ÐºÐ°Ð¼Ð½Ñ Ð² наÑтройках SEO. ЕÑли вы хотите иÑпользовать Ñту разработку, она должна быть включена."],"I've finished this step":["Я завершил Ñтот шаг"],"Revise this step":["ПроÑмотреть шаг"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Ðам не удалоÑÑŒ найти внутренние ÑÑылки на ваших Ñайтах. Либо вы ещё не добавили внутренние ÑÑылки в Ñвое Ñодержимое, либо Yoast SEO не проиндекÑировал их. Чтобы Yoast SEO проиндекÑировал ÑÑылки, запуÑтите SEO-оптимизацию данных в разделе SEO > ИнÑтрументы."],"Incoming links":["ВходÑщие ÑÑылки"],"Edit to add link":["Редактировать, чтобы добавить ÑÑылку"],"%s incoming link":["%s входÑÑ‰Ð°Ñ ÑÑылка","%s входÑщие ÑÑылки","%s входÑщих ÑÑылок"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Ðа данный момент у Ð²Ð°Ñ Ð½ÐµÑ‚ Ñтатей, отмеченных как краеугольные. Когда вы отметите Ñтатьи как краеугольные, мы отобразим их здеÑÑŒ."],"Focus keyphrase":["ФокуÑное ключевое Ñлово"],"Article":["СтатьÑ"],"Readability score":["Оценка читабельноÑти"],"SEO score":["Оценка SEO"],"Copy failed":["Ðе удалоÑÑŒ Ñкопировать"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Улучшите ранжирование Ð´Ð»Ñ Ð²Ñей краеугольной информации Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñтого %1$sпошагового тренажёра!%2$s"],"Rank with articles you want to rank with":["Ранжирование по ÑтатьÑм, по которым вы хотите ранжировать"],"Descriptive text":["ОпиÑательный текÑÑ‚"],"Show the descriptive text":["Отображать опиÑательный текÑÑ‚"],"Show icon":["Отображать иконку"],"Yoast Estimated Reading Time":["Приблизительное Ð²Ñ€ÐµÐ¼Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÑоглаÑно Yoast"],"Shows an estimated reading time based on the content length.":["Отображает приблизительное Ð²Ñ€ÐµÐ¼Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ, оÑновываÑÑÑŒ на размере Ñодержимого."],"reading time":["Ð²Ñ€ÐµÐ¼Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ"],"content length":["длина Ñодержимого"],"Estimated reading time:":["Приблизительное Ð²Ñ€ÐµÐ¼Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ:"],"minute":["минута","минуты","минут"],"Settings":["ÐаÑтройки"],"OK":["OK"],"Close":["Закрыть"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Первое наÑтоÑщее и полноценное решение Ð´Ð»Ñ SEO в WordPress, в которое включен анализ Ñодержимого Ñтраницы, Ñоздание карты Ñайта в формате XML и многое другое."],"Type":["Тип"],"Team Yoast":["Команда Yoast"],"Orphaned content":["БеÑхозный контент"],"Synonyms":["Синонимы"],"Internal linking suggestions":["ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ внутренней компоновке"],"Enter a related keyphrase to calculate the SEO score":["Введите ÑоответÑтвующую ключевую фразу Ð´Ð»Ñ Ñ€Ð°Ñчета оценки SEO"],"Related keyphrase":["СвÑÐ·Ð°Ð½Ð½Ð°Ñ ÐºÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°"],"Add related keyphrase":["Добавить похожее ключевое Ñлово"],"Analysis results":["Результаты анализа"],"Help on choosing the perfect keyphrase":["Помочь подобрать идеальные ключевые фразы"],"Help on keyphrase synonyms":["Справка по Ñинонимам ключевых фраз"],"Keyphrase":["ÐšÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["ÐÐ¾Ð²Ð°Ñ ÑÑылка: {{link}}%s{{/link}}"],"Undo":["Отменить дейÑтвие"],"Redirect created":["Редирект Ñоздан"],"%s just created a redirect from the old URL to the new URL.":["Только что %s Ñоздал редирект Ñо Ñтарой ÑÑылки на новую."],"Old URL: {{link}}%s{{/link}}":["Ð¡Ñ‚Ð°Ñ€Ð°Ñ ÑÑылка: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Синонимы ключевой фразы"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Произошла ошибка: Premium SEO анализ не работает, как Ñледует. ПожалуйÑта, {{activateLink}}активируйте Ñвою подпиÑку в MyYoast{{/activateLink}}, а затем {{reloadButton}}перезагрузите Ñтраницу{{/reloadButton}} Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы."],"seo":["seo"],"internal linking":["внутренние ÑÑылки"],"site structure":["Ñтруктура Ñайта"],"We could not find any relevant articles on your website that you could link to from your post.":["Мы не Ñмогли найти на вашем веб-Ñайте ÑоответÑтвующие Ñтатьи, на которые вы могли бы ÑоÑлатьÑÑ Ð² Ñвоем Ñообщении."],"Load suggestions":["Загрузить предложениÑ"],"Refresh suggestions":["Обновить предложениÑ"],"Write list…":["Ðапишите ÑпиÑок…"],"Adds a list of links related to this page.":["ДобавлÑет ÑпиÑок ÑÑылок, отноÑÑщихÑÑ Ðº Ñтой Ñтранице."],"related posts":["похожие запиÑи"],"related pages":["похожие Ñтраницы"],"Adds a table of contents to this page.":["ДобавлÑет оглавление на Ñту Ñтраницу."],"links":["ÑÑылки"],"toc":["Ñодержание"],"Copy link":["Скопировать ÑÑылку"],"Copy link to suggested article: %s":["Скопировать ÑÑылку в предложенную Ñтатью: %s"],"Add a title to your post for the best internal linking suggestions.":["Добавьте заголовок к Ñвоему поÑту, чтобы улучшить Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ внутренней перелинковке."],"Add a metadescription to your post for the best internal linking suggestions.":["Добавьте метаопиÑание к Ñвоему поÑту, чтобы улучшить Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ внутренней перелинковке."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Добавьте заголовок и метаопиÑание к Ñвоему поÑту, чтобы улучшить Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ внутренней перелинковке."],"Also, add a title to your post for the best internal linking suggestions.":["Еще добавьте заголовок к Ñвоему поÑту, чтобы улучшить Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ внутренним ÑÑылкам."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Еще добавьте метаопиÑание к Ñвоему поÑту, чтобы улучшить Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ внутренним ÑÑылкам."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Еще добавьте заголовок и метаопиÑание к Ñвоему поÑту, чтобы получить лучшие Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ внутренним ÑÑылкам."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Как только вы добавите немного больше копий, мы дадим вам ÑпиÑок ÑвÑзанного контента здеÑÑŒ, на который вы можете ÑÑылатьÑÑ Ð² вашем поÑте."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Чтобы улучшить Ñтруктуру вашего Ñайта, раÑÑмотрите возможноÑть Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑÑылок на другие ÑоответÑтвующие поÑты или Ñтраницы на вашем Ñайте."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Отображение ÑпиÑка ÑвÑзанного контента, на который можно ÑÑылатьÑÑ, займет неÑколько Ñекунд. ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ показаны здеÑÑŒ, как только они будут получены."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Читайте наше руководÑтво по внутренним ÑÑылкам Ð´Ð»Ñ SEO{{a}, чтобы узнать больше."],"Copied!":["Скопировано!"],"Not supported!":["Ðе поддерживаетÑÑ!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Ð’Ñ‹ пытаетеÑÑŒ иÑпользовать неÑколько ÑвÑзанных ключевых фраз? Ð’Ñ‹ должны добавить их отдельно."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Ваша ÐºÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° Ñлишком длиннаÑ. Она может быть макÑимум 191 Ñимвол."],"Add as related keyphrase":["Добавить как ÑвÑзанную ключевую фразу"],"Added!":["Добавлено!"],"Remove":["Убрать"],"Table of contents":["Содержание"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Ðам необходимо оптимизировать SEO-данные вашего Ñайта, чтобы мы могли предложить вам лучшую %1$sперелинковку предложений%2$s.\n\n%3$sÐачать оптимизацию SEO-данных%4$s"],"Create a Zap in %s":["Создать Zap в %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sk_SK.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sk_SK.json new file mode 100644 index 00000000..937a93fb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sk_SK.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;","lang":"sk"},"block keyword\u0004children":["odvodené"],"block keyword\u0004childpages":["odvodené stránky"],"block keyword\u0004subpages":["podstránky"],"block description\u0004Adds a list of internal links to subpages of this page.":["Pridá zoznam interných odkazov na podstránky tejto stránky."],"block title\u0004Yoast Subpages":["Podstránky Yoast"],"block keyword\u0004site structure":["Å¡truktúra webovej stránky"],"block keyword\u0004internal linking":["interné prepojenie"],"block keyword\u0004siblings pages":["príbuzné stránky"],"block keyword\u0004siblings":["príbuzné"],"block keyword\u0004SEO":["SEO"],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":["Pridá zoznam interných odkazov na príbuzné stránky, ktoré majú rovnakú nadradenú stránku."],"block title\u0004Yoast Siblings":["Príbuzné Yoast"],"Generated %s descriptions":["Vygenerované popisy %s"],"Generated %s titles":["Vygenerované názvy %s"],"Meta description length":["Dĺžka meta popisu"],"SEO title width":["Šírka názvu SEO"],"The request came back with the following error: \"%s\"":["Požiadavka sa vrátila s nasledujúcou chybou: \"%s\""],"X share preview":["Náhľad zdieľania X"],"AI X title generator":["Generátor názvu AI X"],"AI X description generator":["Generátor popisu AI X"],"X preview":["X náhľad"],"Please enter a valid focus keyphrase.":["Prosím zadajte platnú kľúÄovú frázu."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Ak chcete používaÅ¥ túto funkciu, vaÅ¡a webová stránka musí byÅ¥ verejne prístupná. To platí pre testovacie webové stránky aj pre prípady, keÄ je vaÅ¡e rozhranie REST API chránené heslom. Uistite sa, že je vaÅ¡a stránka verejne prístupná, a skúste to znova. Ak problém pretrváva, kontaktujte %1$snáš tím podpory%2$s."],"Yoast AI cannot reach your site":["AI Yoast sa nemôže dostaÅ¥ na vaÅ¡u stránku"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Ak chcete získaÅ¥ prístup k tejto funkcii, musíte maÅ¥ aktívne predplatné %2$s a %3$s. Prosím %5$saktivujte svoje predplatné v %1$s%6$s alebo %7$szískajte nové %4$s%8$s. Potom obnovte túto stránku, aby funkcia správne fungovala, Äo môže trvaÅ¥ až 30 sekúnd."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Generátor AI názvov vyžaduje, aby bola pred použitím povolená SEO analýza. Ak ju chcete povoliÅ¥, prejdite do %2$sFunkcie stránky %1$s%3$s, zapnite SEO analýzu a kliknite na tlaÄidlo \"UložiÅ¥ zmeny\". Ak je SEO analýza vo vaÅ¡om používateľskom profile WordPress vypnutá, vstúpte do svojho profilu a povoľte ju tam. Ak nemáte prístup k týmto nastaveniam, obráťte sa na svojho administrátora."],"Social share preview":["Náhľad zdieľania na sociálnych sieÅ¥ach"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Ak chcete naÄalej používaÅ¥ funkciu Yoast AI, znížte frekvenciu svojich požiadaviek. Náš %1$spomocný Älánok%2$s poskytuje návod na efektívne plánovanie a rozvrhnutie vaÅ¡ich požiadaviek pre optimalizáciu pracovného postupu."],"You've reached the Yoast AI rate limit.":["Dosiahli ste limit rýchlosti Yoast AI."],"Allow":["PovoliÅ¥"],"Deny":["OdmietnuÅ¥"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Ak chcete vidieÅ¥ toto video, musíte povoliÅ¥ %1$s na naÄítanie vložených videí z %2$s."],"Text generated by AI may be offensive or inaccurate.":["Text generovaný AI môže byÅ¥ urážlivý alebo nepresný."],"(Opens in a new browser tab)":["(Otvorí sa na novej karte prehliadaÄa)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Zrýchlite svoj pracovný postup pomocou generatívnej AI. Získajte vysokokvalitné návrhy názvov a popisov pre vaÅ¡e vyhľadávanie a vzhľad na sociálnych sieÅ¥ach. %1$sZistite viac%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generujte názvy a popisy pomocou Yoast AI!"],"New to %1$s":["Nové v %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Súhlasím s %1$sPodmienkami používania služby%2$s a %3$sPravidlami ochrany osobných údajov%4$s služby Yoast AI. To zahŕňa súhlas so zhromažÄovaním a používaním údajov na zlepÅ¡enie používateľského zážitku."],"Start generating":["ZaÄaÅ¥ generovaÅ¥"],"Yes, revoke consent":["Ãno, odvolávam súhlas"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Odvolaním súhlasu už nebudete maÅ¥ prístup k funkciám Yoast AI. Ste si istý, že chcete svoj súhlas odvolaÅ¥?"],"Something went wrong, please try again later.":["NieÄo sa pokazilo, skúste to prosím neskôr."],"Revoke AI consent":["Odvolanie AI súhlasu"],"AI title generator":["Generátor AI názvov"],"AI description generator":["Generátor AI popisov"],"AI social title generator":["Generátor AI názvov na sociálnych sieÅ¥ach"],"AI social description generator":["Generátor AI popisov na sociálnych sieÅ¥ach"],"Dismiss":["OdmietnuÅ¥"],"Don’t show again":["Viac nezobrazovaÅ¥"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTip%2$s: ZlepÅ¡ite presnosÅ¥ vygenerovaných AI názvov tým, že na stránku napíšete viac obsahu."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTip%2$s: ZlepÅ¡ite presnosÅ¥ vygenerovaných AI popisov tým, že na stránku napíšete viac obsahu."],"Try again":["Skúste to znova"],"Social preview":["Náhľad na sociálnych sieÅ¥ach"],"Desktop result":["Výsledok na poÄítaÄi"],"Mobile result":["Výsledok v mobile"],"Apply %s description":["PoužiÅ¥ AI popis"],"Apply %s title":["PoužiÅ¥ AI názov"],"Next":["Nasledujúce"],"Previous":["Predchádzajúce"],"Generate 5 more":["Vytvorte Äalších 5"],"Google preview":["Náhľad Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vzhľadom na prísne etické pravidlá a %1$szásady používania%2$s OpenAI nemôžeme pre vaÅ¡u webovú stránku generovaÅ¥ SEO názvy. Ak máte v úmysle používaÅ¥ AI, láskavo sa vyhnite používaniu explicitného, násilného alebo sexuálne explicitného obsahu. %3$sPreÄítajte si viac informácií o tom, ako nakonfigurovaÅ¥ svoju webovú stránku, aby ste si boli istí, že dosiahnete najlepÅ¡ie výsledky s AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Vzhľadom na prísne etické pravidlá a %1$szásady používania%2$s OpenAI nemôžeme pre vaÅ¡u webovú stránku generovaÅ¥ meta popisy. Ak máte v úmysle používaÅ¥ AI, láskavo sa vyhnite používaniu explicitného, násilného alebo sexuálne explicitného obsahu. %3$sPreÄítajte si viac informácií o tom, ako nakonfigurovaÅ¥ svoju webovú stránku, aby ste si boli istí, že s AI dosiahnete najlepÅ¡ie výsledky%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Ak chcete získaÅ¥ prístup k tejto funkcii, musíte maÅ¥ aktívne predplatné %1$s. Prosím %3$saktivujte si predplatné v %2$s%4$s alebo %5$szískajte nové %1$s predplatné%6$s. Potom obnovte túto stránku, aby funkcia správne fungovala, Äo môže trvaÅ¥ až 30 sekúnd."],"Refresh page":["ObnoviÅ¥ stránku"],"Not enough content":["Nedostatok obsahu"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Skúste to prosím neskôr. Ak problém pretrváva, obráťte sa na %1$snáš tím podpory%2$s!"],"Something went wrong":["NieÄo sa pokazilo"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Zdá sa, že doÅ¡lo k prekroÄeniu Äasového limitu pripojenia. Skontrolujte svoje internetové pripojenie a skúste to neskôr. Ak problém pretrváva, obráťte sa na %1$snáš tím podpory%2$s"],"Connection timeout":["ÄŒasový limit pripojenia"],"Use AI":["PoužiÅ¥ AI"],"Close modal":["ZatvoriÅ¥ modalitu"],"Learn more about AI (Opens in a new browser tab)":["ÄŽalÅ¡ie informácie o AI (Otvorí sa na novej karte prehliadaÄa)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sNázov%3$s: VaÅ¡a stránka eÅ¡te nemá názov. %2$sPridajte ho%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sNázov%2$s: VaÅ¡a stránka má názov. Výborne!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sDistribúcia kľúÄovej frázy%3$s: %2$sV texte uveÄte svoju kľúÄovú frázu alebo jej synonymá, aby sme mohli skontrolovaÅ¥ distribúciu kľúÄovej frázy%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sDistribúcia kľúÄovej frázy%2$s: Dobrá práca!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribúcia kľúÄovej frázy%3$s: Nerovnomerná. Niektoré Äasti vášho textu neobsahujú kľúÄovú frázu alebo jej synonymá. %2$sRozdeľte ich rovnomernejÅ¡ie%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sDistribúcia kľúÄovej frázy%3$s: Veľmi nerovnomerná. Veľké Äasti vášho textu neobsahujú kľúÄovú frázu ani jej synonymá. %2$sRozdeľte ich rovnomernejÅ¡ie%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Nepoužívate príliÅ¡ veľa zložitých slov, vÄaka Äomu sa váš text ľahko Äíta. Dobrá práca!"],"Word complexity":["ZložitosÅ¥ slov"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s slov vo vaÅ¡om texte sa považujú za zložité. %3$sPokúste sa používaÅ¥ kratÅ¡ie a známejÅ¡ie slová, aby ste zlepÅ¡ili ÄitateľnosÅ¥%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sZarovnanie%3$s: V texte je dlhý úsek zarovnaný na stred. %2$sOdporúÄame ho zarovnaÅ¥ doľava%3$s.","%1$sZarovnanie%3$s: V texte sú %4$s dlhé úseky zarovnané na stred. %2$sOdporúÄame ich zarovnaÅ¥ doľava%3$s.","%1$sZarovnanie%3$s: V texte je %4$s dlhých úsekov zarovnaných na stred. %2$sOdporúÄame ich zarovnaÅ¥ doľava%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sZarovnanie%3$s: V texte je dlhý úsek zarovnaný na stred. %2$sOdporúÄame ho zarovnaÅ¥ doprava%3$s.","%1$sZarovnanie%3$s: V texte sú %4$s dlhé úseky zarovnané na stred. %2$sOdporúÄame ich zarovnaÅ¥ doprava%3$s.","%1$sZarovnanie%3$s: V texte je %4$s dlhých úsekov zarovnaných na stred. %2$sOdporúÄame ich zarovnaÅ¥ doprava%3$s."],"Select image":["VybraÅ¥ obrázok"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Možno o tom ani neviete, ale na vaÅ¡ej webovej stránke môžu byÅ¥ stránky, ktoré nedostávajú žiadne odkazy. To je problém SEO, pretože pre vyhľadávaÄe je Å¥ažké nájsÅ¥ stránky, na ktoré nevedú žiadne odkazy. Je pre ne Å¥ažšie ich zaradiÅ¥. Tieto stránky nazývame osirelý obsah. Na tomto cviÄení nájdeme osirelý obsah na vaÅ¡ej webovej stránke a poradíme vám, ako naň rýchlo pridaÅ¥ odkazy, aby dostal Å¡ancu na umiestnenie!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Je Äas pridaÅ¥ nejaké odkazy! Nižšie nájdete zoznam s vaÅ¡imi osirelými Älánkami. Pod každým z nich sa nachádzajú návrhy súvisiacich stránok, na ktoré by ste mohli pridaÅ¥ odkaz. Pri pridávaní odkazu dbajte na to, aby ste ho vložili do relevantnej vety a súvisel s vaším osirelým Älánkom. PokraÄujte v pridávaní odkazov na jednotlivé osirelé Älánky, kým nebudete spokojný s množstvom odkazov smerujúcich na ne."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Je Äas pridaÅ¥ nejaké odkazy! Nižšie vidíte zoznam s vaÅ¡imi základnými stránkami. Pod každou základnou stránkou sa nachádzajú návrhy Älánkov, z ktorých by ste mohli pridaÅ¥ odkaz. Pri pridávaní odkazu nezabudnite ho vložiÅ¥ do relevantnej vety súvisiacej s vaÅ¡ou základnou stránkou. PokraÄujte v pridávaní odkazov z toľkých súvisiacich Älánkov, koľko potrebujete, až kým vaÅ¡e základné stránky nebudú maÅ¥ najviac interných odkazov smerujúcich na ne."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Niektoré Älánky na vaÅ¡ej webovej stránke sú %1$snajdôležitejÅ¡ie%2$s. Odpovedajú na otázky ľudí a rieÅ¡ia ich problémy. Preto si zaslúžia umiestnenie na popredných miestach! V %3$s ich nazývame základné Älánky. Jedným zo spôsobov, ako ich maÅ¥ zaradené, je nasmerovaÅ¥ na ne dostatok odkazov. Viac odkazov signalizuje vyhľadávaÄom, že tieto Älánky sú dôležité a hodnotné. V tomto cviÄení vám pomôžeme pridaÅ¥ odkazy na vaÅ¡e základné Älánky!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["KeÄ pridáte trochu viac textu, budeme vám môcÅ¥ urÄiÅ¥ úroveň formálnosti vášho textu."],"Overall, your text appears to be %1$s%3$s%2$s.":["Celkovo sa váš text javí ako %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Integrácia Zapier bude odstránená z %1$s vo verzii 20.7 (dátum vydania 9. mája). Ak máte akékoľvek otázky, obráťte sa na %2$s."],"Maximum heading level":["Maximálna úroveň podnadpisov"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Máte vypnuté Návrhy prepojení, ktoré sú potrebné na fungovanie Súvisiacich odkazov. Ak chcete pridaÅ¥ Súvisiace odkazy, prejdite na Funkcie stránky a povoľte Návrhy odkazov."],"Schema":["Schéma"],"Meta tags":["Meta znaÄky"],"Not available":["Nie je k dispozícii"],"Checks":["Kontroly"],"Focus Keyphrase":["Hlavná kľúÄová fráza"],"Good":["Dobré"],"No index":["Bez indexu"],"Front-end SEO inspector":["Front-end SEO inÅ¡pektor"],"Focus keyphrase not set":["Nie je nastavená hlavná kľúÄová fráza"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Po zverejnení Zap na ovládacom paneli %s môžete skontrolovaÅ¥, Äi je aktívny a pripojený k vášmu webu."],"Reset API key":["Obnovenie kľúÄa API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Momentálne ste pripojení k %s pomocou nasledujúceho kľúÄa API. Ak sa chcete znovu pripojiÅ¥ s iným kľúÄom API, môžete svoj kÄ¾ÃºÄ resetovaÅ¥ nižšie."],"Your API key":["Váš API kľúÄ"],"Go to your %s dashboard":["Prejdite na nástenku %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["ÚspeÅ¡ne ste sa pripojili k %1$s! Ak chcete spravovaÅ¥ svoj Zap, navÅ¡tívte svoju %2$s nástenku."],"Your %s dashboard":["VaÅ¡a %s nástenka"],"Verify connection":["Overenie pripojenia"],"Verify your connection":["Overenie pripojenia"],"Create a Zap":["Vytvorenie Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Prihláste sa do svojho konta %1$s a zaÄnite vytváraÅ¥ svoj prvý Zap! Upozorňujeme, že môžete vytvoriÅ¥ len 1 Zap so spúšťacou udalosÅ¥ou z %2$s. V rámci tohto Zap si môžete vybraÅ¥ jednu alebo viac akcií."],"%s API key":["%s API kľúÄ"],"You'll need this API key later on in %s when you're setting up your Zap.":["Tento kÄ¾ÃºÄ API budete potrebovaÅ¥ neskôr v %s pri nastavovaní Zap."],"Copy your API key":["Skopírujte svoj kÄ¾ÃºÄ API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Ak chcete nastaviÅ¥ pripojenie, skopírujte nižšie uvedený kÄ¾ÃºÄ API a použite ho na vytvorenie a zapnutie Zap v rámci svojho konta %s."],"Manage %s settings":["Správa nastavení %s"],"Connect to %s":["Pripojenie k %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Upozornenie: aby toto cviÄenie fungovalo dobre, musíte spustiÅ¥ nástroj na SEO optimalizáciu údajov. Administrátori ho môžu spustiÅ¥ v Äasti %1$sSEO > Nástroje%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Pridali ste odkazy na osirelé Älánky a vyÄistili ste tie, ktoré už neboli relevantné. Skvelá práca! Pozrite si prehľad nižšie a oslávte, Äo ste dosiahli!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Kriticky preskúmajte obsah tohto zoznamu a vykonajte potrebné aktualizácie. Ak potrebujete pomoc s aktualizáciou, máme pre vás veľmi %1$sužitoÄný Älánok na blogu, ktorý vás môže viesÅ¥ celou cestou%2$s (kliknutím sa otvorí na novej karte)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sPotrebujete ÄalÅ¡ie pokyny? PodrobnejÅ¡ie sme sa každému kroku venovali v nasledujúcej príruÄke: %2$sCviÄenie, ako používaÅ¥ %7$s osirelý obsah%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Práve ste uľahÄili vyhľadávanie svojho najlepÅ¡ieho obsahu a zvýšili pravdepodobnosÅ¥ jeho umiestnenia! Len tak Äalej! Z Äasu na Äas nezabudnite skontrolovaÅ¥, Äi vaÅ¡e základné kamene získavajú dostatok odkazov!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Pozrite si zoznam nižšie. Majú vaÅ¡e základné Älánky (oznaÄené %1$s) najviac interných odkazov, ktoré na ne smerujú? Ak si myslíte, že niektorý základný Älánok potrebuje viac odkazov, kliknite na tlaÄidlo OptimalizovaÅ¥. Tým sa Älánok presunie do ÄalÅ¡ieho kroku."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Majú vÅ¡etky vaÅ¡e základné stránky zelené gule? Pre dosiahnutie najlepších výsledkov zvážte úpravu tých, ktoré ich nemajú!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Ktoré Älánky chcete zaradiÅ¥ najvyššie? Ktoré z nich by vaÅ¡e publikum považovalo za najužitoÄnejÅ¡ie a najkomplexnejÅ¡ie? Kliknite na Å¡ipku smerujúcu nadol a vyhľadajte Älánky, ktoré zodpovedajú týmto kritériám. ÄŒlánky, ktoré vyberiete zo zoznamu, automaticky oznaÄíme ako základné."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sPotrebujete ÄalÅ¡ie pokyny? PodrobnejÅ¡ie sme sa každému kroku venovali v Älánku: %2$sAko používaÅ¥ %7$s základné cviÄenie%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Obsah Yoast"],"Yoast Related Links":["Súvisiace odkazy Yoast"],"Finish optimizing":["DokonÄenie optimalizácie"],"You've finished adding links to this article.":["DokonÄili ste pridávanie odkazov do tohto Älánku."],"Optimize":["Optimalizujte"],"Added to next step":["Pridajte do ÄalÅ¡ieho kroku"],"Choose cornerstone articles...":["Vyberte si základné Älánky..."],"Loading data...":["NaÄítanie údajov..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["EÅ¡te ste nevyÄistili ani neaktualizovali žiadne Älánky pomocou tohto cviÄenia. KeÄ tak urobíte, zobrazí sa tu súhrn vaÅ¡ej práce."],"Skipped":["Vynechané"],"Hidden from search engines.":["Skryté pred vyhľadávaÄmi."],"Removed":["Odstránené"],"Improved":["VylepÅ¡ené"],"Resolution":["Rozlíšenie"],"Loading redirect options...":["NaÄítanie možností presmerovania..."],"Remove and redirect":["Odstránenie a presmerovanie"],"Custom url:":["Vlastná URL adresa:"],"Related article:":["Súvisiaci Älánok:"],"Home page:":["Domovská stránka:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Chystáte sa odstrániÅ¥ %1$s%2$s%3$s. Aby ste zabránili výskytu chyby 404 na vaÅ¡om webe, mali by ste ho presmerovaÅ¥ na inú stránku na vaÅ¡om webe. Kam ju chcete presmerovaÅ¥?"],"SEO Workout: Remove article":["SEO cviÄenie: Odstránenie Älánku"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["VÅ¡etko vyzerá dobre! Na vaÅ¡om webe sme nenaÅ¡li žiadne Älánky starÅ¡ie ako Å¡esÅ¥ mesiacov, ktoré by dostávali príliÅ¡ málo odkazov na vaÅ¡ej webovej stránke. Pre nové návrhy na Äistenie sa sem vráťte neskôr!"],"Hide from search engines":["SkryÅ¥ pred vyhľadávaÄmi"],"Improve":["ZlepÅ¡iÅ¥"],"Are you sure you wish to hide this article from search engines?":["Ste si istí, že chcete tento Älánok skryÅ¥ pred vyhľadávaÄmi?"],"Action":["Akcia"],"You've hidden this article from search engines.":["Tento Älánok ste skryli pred vyhľadávaÄmi."],"You've removed this article.":["Tento Älánok ste odstránili."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Momentálne ste si nevybrali žiadne Älánky, ktoré chcete vylepÅ¡iÅ¥. V predchádzajúcich krokoch vyberte niekoľko Älánkov, ku ktorým chcete pridaÅ¥ odkazy a my vám tu zobrazíme návrhy odkazov."],"Loading link suggestions...":["NaÄítanie návrhov odkazov..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["K tomuto Älánku sme nenaÅ¡li žiadne návrhy, ale samozrejme môžete pridaÅ¥ odkazy na Älánky, ktoré podľa vás súvisia s týmto Älánkom."],"Skip":["VynechaÅ¥"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Pre tento krok ste eÅ¡te nevybrali žiadne Älánky. Môžete tak urobiÅ¥ v predchádzajúcom kroku."],"Is it up-to-date?":["Je aktuálny?"],"Last Updated":["Posledná aktualizácia"],"You've moved this article to the next step.":["Presunuli ste tento Älánok do ÄalÅ¡ieho kroku."],"Unknown":["Neznáme"],"Clear summary":["Jasný prehľad"],"Add internal links towards your orphaned articles.":["Pridajte interné odkazy na osirelé Älánky."],"Should you update your article?":["Mali by ste svoj Älánok aktualizovaÅ¥?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["VaÅ¡a stránka môže obsahovaÅ¥ množstvo obsahu, ktorý ste raz vytvorili a odvtedy ste sa k nemu už nevrátili. Je dôležité, aby ste si tieto stránky preÅ¡li a spýtali sa sami seba, Äi je tento obsah pre vaÅ¡u webovú stránku stále relevantný. Mali by ste ho vylepÅ¡iÅ¥ alebo odstrániÅ¥?"],"Start: Love it or leave it?":["Å tart: MilovaÅ¥ alebo nechaÅ¥ tak?"],"Clean up your unlinked content to make sure people can find it":["VyÄistite neprepojený obsah, aby ho ľudia mohli nájsÅ¥"],"I've finished this workout":["DokonÄil som toto cviÄenie"],"Reset this workout":["Obnovenie tohto cviÄenia"],"Well done!":["Výborne!"],"Add internal links towards your cornerstones":["Pridajte interné odkazy na vaÅ¡e základné stránky"],"Check the number of incoming internal links of your cornerstones":["Skontrolujte poÄet prichádzajúcich interných odkazov vaÅ¡ich základných stránok"],"Start: Choose your cornerstones!":["ZaÄnite: Vyberte si základné stránky!"],"The cornerstone approach":["Prístup základných stránok"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Upozornenie: Aby toto cviÄenie dobre fungovalo a ponúkalo vám návrhy prepojení, musíte spustiÅ¥ nástroj na optimalizáciu údajov SEO. Administrátori ho môžu spustiÅ¥ v Äasti %1$sSEO > Nástroje%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Upozornenie: Váš administrátor zakázal základnú funkciu v nastaveniach SEO. Ak chcete toto cviÄenie používaÅ¥, malo by byÅ¥ povolené."],"I've finished this step":["Tento krok som dokonÄil"],"Revise this step":["Revízia tohto kroku"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Na vaÅ¡ich stránkach sa nám nepodarilo nájsÅ¥ interné prepojenia. BuÄ ste do svojho obsahu eÅ¡te nepridali žiadne interné odkazy, alebo ich aplikácia Yoast SEO neindexovala. Aplikáciu Yoast SEO môžete nechaÅ¥ indexovaÅ¥ vaÅ¡e odkazy spustením optimalizácie údajov SEO v Äasti SEO > Nástroje."],"Incoming links":["Prichádzajúce odkazy"],"Edit to add link":["UpraviÅ¥ pre pridanie odkazu"],"%s incoming link":["%s prichádzajúci odkaz","%s prichádzajúce odkazy","%s prichádzajúcich odkazov"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Momentálne nemáte žiadne Älánky oznaÄené ako základné. KeÄ oznaÄíte svoje Älánky ako základné, zobrazia sa tu."],"Focus keyphrase":["Hlavná kľúÄová fráza"],"Article":["ÄŒlánok"],"Readability score":["Skóre Äitateľnosti"],"SEO score":["Skóre SEO"],"Copy failed":["Kopírovanie zlyhalo"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["ZlepÅ¡ite hodnotenie vÅ¡etkých svojich základných kameňov pomocou tohto cviÄenia %1$skrok za krokom!%2$s"],"Rank with articles you want to rank with":["Umiestnenie Älánkov, ktoré chcete umiestniÅ¥"],"Descriptive text":["Popisný text"],"Show the descriptive text":["ZobraziÅ¥ popisný text"],"Show icon":["ZobraziÅ¥ ikonu"],"Yoast Estimated Reading Time":["Odhadovaný Äas Äítania Yoast"],"Shows an estimated reading time based on the content length.":["Zobrazí odhadovaný Äas Äítania na základe dĺžky obsahu."],"reading time":["Äas Äítania"],"content length":["dĺžka obsahu"],"Estimated reading time:":["Odhadovaný Äas Äítania:"],"minute":["minúta","minúty","minút"],"Settings":["Nastavenia"],"OK":["OK"],"Close":["ZatvoriÅ¥"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Prvé skutoÄné komplexné rieÅ¡enie SEO pre WordPress vrátane analýzy obsahu na stránke, XML mapy webovej stránky a mnohých Äalších funkcií."],"Type":["Typ"],"Team Yoast":["Tím Yoast"],"Orphaned content":["Osirotený obsah"],"Synonyms":["Synonymá"],"Internal linking suggestions":["Návrhy interných prepojení"],"Enter a related keyphrase to calculate the SEO score":["Zadajte súvisiacu kľúÄovú frázu na výpoÄet SEO skóre"],"Related keyphrase":["Súvisiaca kľúÄová fráza"],"Add related keyphrase":["PridaÅ¥ súvisiacu kľúÄovú frázu"],"Analysis results":["Výsledky analýzy"],"Help on choosing the perfect keyphrase":["Pomoc pri výbere ideálnej kľúÄovej frázy"],"Help on keyphrase synonyms":["Pomoc pri synonymách kľúÄovej frázy"],"Keyphrase":["KľúÄová fráza"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Nová URL adresa: {{link}}%s{{/link}}"],"Undo":["Späť"],"Redirect created":["Vytvorené presmerovanie"],"%s just created a redirect from the old URL to the new URL.":["%s práve vytvorilo presmerovanie zo starej URL adresy na novú URL adresu."],"Old URL: {{link}}%s{{/link}}":["Stará URL adresa: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Synonymá kľúÄovej frázy"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Vyskytla sa chyba: Premium SEO analýza nefunguje podľa oÄakávania. Prosím {{activateLink}}aktivujte svoje predplatné v MyYoast{{/activateLink}} a potom {{reloadButton}}naÄítajte túto stránku{{/reloadButton}}, aby fungovala správne."],"seo":["seo"],"internal linking":["interné prepojenie"],"site structure":["Å¡truktúra webovej stránky"],"We could not find any relevant articles on your website that you could link to from your post.":["Na vaÅ¡ej webovej stránke sme nenaÅ¡li žiadne relevantné príspevky, na ktoré by ste mohli odkázaÅ¥ vo svojom Älánku."],"Load suggestions":["Návrhy na naÄítanie"],"Refresh suggestions":["Návrhy na aktualizáciu"],"Write list…":["Napíšte zoznam..."],"Adds a list of links related to this page.":["PridaÅ¥ zoznam odkazov súvisiacich s touto stránkou."],"related posts":["súvisiace Älánky"],"related pages":["súvisiace stránky"],"Adds a table of contents to this page.":["PridaÅ¥ na túto stránku obsah."],"links":["odkazy"],"toc":["toc"],"Copy link":["KopírovaÅ¥ odkaz"],"Copy link to suggested article: %s":["Skopírujte odkaz na navrhovaný Älánok: %s"],"Add a title to your post for the best internal linking suggestions.":["Pridajte k Älánku názov pre najlepÅ¡ie návrhy interného prepojenia."],"Add a metadescription to your post for the best internal linking suggestions.":["Pridajte metapopis k Älánku pre najlepÅ¡ie návrhy interného prepojenia."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Pridajte k Älánku názov a metapopis pre najlepÅ¡ie návrhy interného prepojenia."],"Also, add a title to your post for the best internal linking suggestions.":["Pridajte tiež názov Älánku, aby ste získali najlepÅ¡ie návrhy na interné prepojenie."],"Also, add a metadescription to your post for the best internal linking suggestions.":["K Älánku pridajte aj metapopis, aby ste získali najlepÅ¡ie návrhy na interné prepojenie."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Pre najlepÅ¡ie návrhy interného prepojenia pridajte k Älánku aj názov a metapopis."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["KeÄ pridáte trochu viac textu, poskytneme vám tu zoznam súvisiaceho obsahu, na ktorý môžete vo svojom Älánku odkázaÅ¥."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Ak chcete zlepÅ¡iÅ¥ Å¡truktúru svojej webovej stránky, zvážte prepojenie na iné relevantné Älánky alebo stránky na svojej webovej stránke."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Po niekoľkých sekundách sa zobrazí zoznam súvisiaceho obsahu, na ktorý by ste mohli vytvoriÅ¥ odkaz. Návrhy sa tu zobrazia hneÄ, ako ich budeme maÅ¥ k dispozícii."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}PreÄítajte si naÅ¡u príruÄku o internom prepojení pre SEO{{/a}} a dozviete sa viac."],"Copied!":["Skopírované!"],"Not supported!":["Nie je podporované!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Snažíte sa použiÅ¥ viacero súvisiacich kľúÄových fráz? Mali by ste ich pridaÅ¥ samostatne."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["VaÅ¡a kľúÄová fráza je príliÅ¡ dlhá. Môže maÅ¥ maximálne 191 znakov."],"Add as related keyphrase":["PridaÅ¥ ako súvisiacu kľúÄovú frázu"],"Added!":["Pridané!"],"Remove":["OdstrániÅ¥"],"Table of contents":["Obsah"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Musíme optimalizovaÅ¥ údaje SEO vaÅ¡ej webovej stránky, aby sme vám mohli ponúknuÅ¥ tie najlepÅ¡ie %1$snávrhy odkazov%2$s.↵ ↵ %3$sSpustite optimalizáciu SEO údajov%4$s"],"Create a Zap in %s":["VytvoriÅ¥ Zap v %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sr_RS.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sr_RS.json new file mode 100644 index 00000000..93b40b17 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sr_RS.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"sr_RS"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Захтев Ñе вратио Ñа Ñледећом грешком: \"%s\""],"X share preview":["X преглед дељења"],"AI X title generator":["AI генератор наÑлова за X"],"AI X description generator":["AI генератор опиÑа за X"],"X preview":["X преглед"],"Please enter a valid focus keyphrase.":["Молимо Ð²Ð°Ñ Ð´Ð° унеÑете иÑправну кључну фразу за фокуÑирање."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Да биÑте кориÑтили ову функционалноÑÑ‚ ваше веб меÑто мора бити јавно доÑтупно. То Ñе одноÑи како да веб меÑта за теÑтирање тако и на инÑтанце где је ваш REST API заштићен лозинком. Молимо Ð²Ð°Ñ Ð´Ð° оÑигурате да је ваше веб меÑто јавно доÑтупно и покушајте поново. Уколико проблем и даље поÑтоји, молимо Ð²Ð°Ñ Ð´Ð° %1$sконтактирате наш тим за подршку%2$s."],"Yoast AI cannot reach your site":["Yoast AI не може да приÑтупи вашем веб меÑту."],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Како биÑте приÑтупили овој функционалноÑти, потребне Ñу вам активне %2$s и %3$s претплате. Молимо Ð²Ð°Ñ Ð´Ð° %5$sукључите Ñвоје претплате у %1$s%6$s или %7$sдобијете нову %4$s%8$s. Ðакон тога, молимо Ð²Ð°Ñ Ð´Ð° оÑвежите Ñтраницу како би функционалноÑÑ‚ радила иÑправно, што може потрајати до 30 Ñекунди."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["AI генератор наÑлова захтева омогућену SEO анализу пре употребе. Како биÑте то омогућили, молимо Ð²Ð°Ñ Ð´Ð° одете на %2$sфункционалноÑти веб меÑта %1$s%3$s, укључите SEO анализу и кликнете на â€Ð¡Ð°Ñ‡ÑƒÐ²Ð°Ñ˜Ñ‚е променеâ€. Уколико је SEO анализа онемогућена на вашем Ð’Ð¾Ñ€Ð´Ð¿Ñ€ÐµÑ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñƒ, приÑтупите Ñвом профилу и тамо је омогућите. Молимо Ð²Ð°Ñ Ð´Ð° контактирате Ñвог админиÑтратора уколико немате приÑтуп овим подешавањима."],"Social share preview":["Преглед дељења на друштвеним мрежама"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Како биÑте наÑтавили Ñа коришћењем Yoast AI функције, молимо Ð²Ð°Ñ Ð´Ð° Ñмањите учеÑталоÑÑ‚ ваших захтева. Ðаш %1$sчланак за помоћ%2$s пружа Ñмернице о ефикаÑном планирању и раÑпоређивању ваших захтева за оптимизован ток рада."],"You've reached the Yoast AI rate limit.":["ДоÑтигли Ñте ограничење брзине Yoast AI."],"Allow":["Дозволи"],"Deny":["Одбиј"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Да биÑте видели овај видео, морате дозволити %1$s да учитава уграђене видео Ñнимке Ñа %2$s."],"Text generated by AI may be offensive or inaccurate.":["ТекÑÑ‚ генериÑан од Ñтране вештачке интелигенције може бити увредљив или нетачан."],"(Opens in a new browser tab)":["(Отвара Ñе на новој картици прегледача)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Убрзајте ток рада помоћу генеративне вештачке интелигенције. Добијте виÑококвалитетне предлоге наÑлова и опиÑа за приказ на претраживачима и друштвеним мрежама. %1$sСазнајте више%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Генериши наÑлове и опиÑе кориÑтећи Yoast AI!"],"New to %1$s":["Ðово на %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Дајем одобрење за %1$sУÑлове коришћења%2$s и %3$sПолитику приватноÑти%4$s Yoast AI ÑервиÑа. Ово укључује ÑаглаÑноÑÑ‚ за прикупљање и коришћење података ради унапређења кориÑничког иÑкуÑтва."],"Start generating":["Започни генериÑање"],"Yes, revoke consent":["Да, повуци ÑаглаÑноÑÑ‚"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Повлачењем ÑаглаÑноÑти више нећете имати приÑтуп Yoast AI функционалноÑтима. Да ли Ñте Ñигурни да желите да повучете ÑаглаÑноÑÑ‚?"],"Something went wrong, please try again later.":["Ðешто је пошло наопако, молимо Ð²Ð°Ñ Ð´Ð° покушате каÑније."],"Revoke AI consent":["Повуци ÑаглаÑноÑÑ‚ за AI"],"AI title generator":["AI генератор наÑлова"],"AI description generator":["AI генератор опиÑа"],"AI social title generator":["AI генератор наÑлова за друштвене мреже"],"AI social description generator":["AI генератор опиÑа за друштвене мреже"],"Dismiss":["Одбаци"],"Don’t show again":["Ðе приказуј поново"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sСавет%2$s: Побољшајте тачноÑÑ‚ AI генериÑаних наÑлова тако што ћете напиÑати више Ñадржаја на вашој Ñтраници."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sСавет%2$s: Побољшајте тачноÑÑ‚ AI генериÑаних опиÑа тако што ћете напиÑати више Ñадржаја на вашој Ñтраници."],"Try again":["Покушај поново"],"Social preview":["Преглед на друштвеним мрежама"],"Desktop result":["ДеÑктоп резултат"],"Mobile result":["Мобилни резултат"],"Apply %s description":[],"Apply %s title":[],"Next":["Следећа"],"Previous":["Преtходна"],"Generate 5 more":["Генериши још 5"],"Google preview":["Google-ов преглед"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Због Ñтриктних етичких Ñмерница компаније OpenAI и %1$sправила о коришћењу%2$s, ниÑмо у могућноÑти да генеришемо SEO наÑлове за вашу Ñтраницу. Уколико планирате да кориÑтите вештачку интелигенцију, молимо Ð²Ð°Ñ Ð´Ð° избегавате екÑплицитан, наÑилан или ÑекÑуално екÑплицитан Ñадржај. %3$sПрочитајте више о томе како да подеÑите вашу Ñтраницу како биÑте били Ñигурни да добијате најбоље резултате кориÑтећи вештачку интелигенцију%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Због Ñтриктних етичких Ñмерница компаније OpenAI и %1$sправила о коришћењу%2$s, ниÑмо у могућноÑти да генеришемо мета опиÑе за вашу Ñтраницу. Уколико планирате да кориÑтите вештачку интелигенцију, молимо Ð²Ð°Ñ Ð´Ð° избегавате екÑплицитан, наÑилан или ÑекÑуално екÑплицитан Ñадржај. %3$sПрочитајте више о томе како да подеÑите Ñвоју Ñтраницу како биÑте били Ñигурни да добијате најбоље резултате Ñа вештачком интелигенцијом%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Да биÑте приÑтупили овој функционалноÑти, неопходна вам је активна %1$s претплата. Молимо Ð²Ð°Ñ Ð´Ð° %3$sактивирате вашу претплату у %2$s%4$s или %5$sзатражите нову %1$s претплату%6$s. Затим кликните на дугме за оÑвежавање Ñтранице како биÑте омогућили правилан рад функције, што може трајати и до 30 Ñекунди."],"Refresh page":["ОÑвежи Ñтраницу"],"Not enough content":["Ðема довољно Ñадржаја"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Молимо Ð²Ð°Ñ Ð¿Ð¾ÐºÑƒÑˆÐ°Ñ˜Ñ‚Ðµ каÑније. Уколико Ñе проблем наÑтави, молимо Ð²Ð°Ñ %1$sконтактирајте наш тим за подршку%2$s!"],"Something went wrong":["Ðешто је пошло наопако"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Изгледа да је дошло до прекида у вези. Молимо Ð²Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ‚Ðµ вашу интернет конекцију и покушајте каÑније поново. Уколико Ñе проблем наÑтави, молимо Ð²Ð°Ñ %1$sконтактирајте наш тим за подршку%2$s"],"Connection timeout":["Прекид у вези"],"Use AI":["КориÑти AI"],"Close modal":["Затвори модални прозор"],"Learn more about AI (Opens in a new browser tab)":["Сазнај више о AI (отвара нови језичак за претрагу)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sTitle%3$s: Страница још увек нема наÑлов. %2$sAdd one%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sÐаÑлов%2$s: Ваша Ñтраница има наÑлов. Свака чаÑÑ‚!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sРаÑподела кључних израза%3$s: %2$sУбаците ваше кључне изразе или Ñинониме у текÑÑ‚ како би могли да проверимо раÑподелу иÑтих%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sРаÑподела кључних израза%2$s: Добро одрађено."],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sРаÑподела кључних израза%3$s: Ðеједнака. Ðеки делови вашег текÑта не Ñадрже кључне изразе или Ñинониме. %2$sРаÑподелите их равномерније%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sРаÑподела кључних израза%3$s: Веома неједнака. Велики делови вашег текÑта не Ñадрже кључне изразе или Ñинониме. %2$sРаÑподелите их равномерније%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Ðе кориÑтите превише Ñложених речи, што чини ваш текÑÑ‚ лаким за читање. Добар поÑао!"],"Word complexity":["КомплекÑноÑÑ‚ речи"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s речи у вашем текÑту Ñе Ñматрају Ñложеним. %3$sПокушајте да кориÑтите краће и познатије речи да биÑте побољшали читљивоÑÑ‚%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sПоравнање%3$s: ПоÑтоји дугачак одељак текÑта који је поравнат по Ñредини. %2$sПрепоручујемо да га поравнате по левој Ñтрани%3$s.","%1$sПоравнање%3$s: ПоÑтоје %4$s дугачки одељци текÑта који Ñу поравнати по Ñредини. %2$sПрепоручујемо да их поравнате по левој Ñтрани%3$s.","%1$sПоравнање%3$s: ПоÑтоје %4$s дугачки одељци текÑта који Ñу поравнати по Ñредини. %2$sПрепоручујемо да их поравнате по левој Ñтрани%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sПоравнање%3$s: ПоÑтоји дугачак одељак текÑта који је поравнат по Ñредини. %2$sПрепоручујемо да га поравнате по деÑној Ñтрани%3$s.","%1$sПоравнање%3$s: ПоÑтоје %4$s дугачки одељци текÑта који Ñу поравнати по Ñредини. %2$sWПрепоручујемо да их поравнате по деÑној Ñтрани%3$s.","%1$sПоравнање%3$s: ПоÑтоје %4$s дугачки одељци текÑта који Ñу поравнати по Ñредини. %2$sWПрепоручујемо да их поравнате по деÑној Ñтрани%3$s."],"Select image":["Одабери Ñлику"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Можда чак и не знате, али поÑтоје Ñтранице на вашем веб меÑту које не Ñадрже никакве везе. То је проблем за SEO јер је претраживачима тешко да пронађу Ñтранице које не Ñадрже везе па их је Ñамим тим теже рангирати. То називамо напуштеним Ñадржајем. У овој вежби проналазимо напуштени Ñадржај на вашем веб меÑту и водимо Ð²Ð°Ñ Ñƒ брзо додавање веза како би ваше веб меÑто добило прилику да Ñе рангира!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Време је да додате неке везе! ИÑпод можете видети лиÑту ваших напуштених чланака. ИÑпод Ñваког од њих поÑтоје предлози за Ñродне Ñтранице Ñа којих биÑте могли додати везу. Када додајете везу, уверите Ñе да Ñте је убацили у релевантну реченицу која је повезана Ñа вашим напуштеним чланком. ÐаÑтавите да додајете везе Ñваком од напуштених чланака док не будете задовољни бројем веза који упућују на њих."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Време је да додате неке везе! ИÑпод можете видети лиÑту Ñа вашим кључним Ñадржајем. ИÑпод Ñваког од њих поÑтоје предлози за чланке Ñа којих можете додати везу. Када додајете везу, уверите Ñе да Ñте је убацили у релевантну реченицу која је повезана Ñа вашим кључним Ñадржајем. ÐаÑтавите да додајете везе Ñа што више повезаних чланака док ваш кључни Ñадржај не буде имао највише унутрашњих веза које на њега упућују."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Ðеки чланци на вашем веб меÑту Ñу %1$sнајважнији%2$s. Они одговарају људима на питања и решавају њихове проблеме, што значи да заÑлужују да Ñе рангирају! У %3$s, ми их називамо кључним чланцима. Један од начина да их рангирате јеÑте да имате довољно веза који воде ка њима. Више веза даје Ñигнал претраживачима да Ñу ови чланци важни и вредни. У овој вежби, помажемо вам да додате везе Ñвојим кључним чланцима."],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Када додате још текÑта, моћи ћемо да проценимо ниво формалноÑти вашег текÑта."],"Overall, your text appears to be %1$s%3$s%2$s.":["Све у Ñвему, ваш текÑÑ‚ изгледа као %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Zapier интеграција ће бити уклоњена из %1$s 20.7. (датум објаве 9. мај). Уколико имате неких питања, молимо Ð²Ð°Ñ Ð´Ð° Ñе обратите на %2$s."],"Maximum heading level":["МакÑимални ниво заглавља"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Онемогућили Ñте предлоге веза, што је потребно да би повезане везе функциониÑале. Уколико желите да додате Ñродне везе, идите на Функције веб меÑта и омогућите предлоге веза."],"Schema":["Шема"],"Meta tags":["Мета ознаке"],"Not available":["Ðије доÑтупно"],"Checks":["Провере"],"Focus Keyphrase":["ФокуÑни кључни израз"],"Good":["Добар"],"No index":["Ðема индекÑа"],"Front-end SEO inspector":["Front-end SEO инÑпектор"],"Focus keyphrase not set":["ФокуÑни кључни израз није поÑтављен"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Када објавите Ñвој Zap на %s контролној табли, можете да проверите да ли је активан и повезан Ñа вашим веб меÑтом."],"Reset API key":["РеÑетујте API кључ"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Тренутно Ñте повезани Ñа %s кориÑтећи Ñледећи API кључ. Ðко желите да Ñе поново повежете Ñа другим API кључем, можете реÑетовати Ñвој кључ иÑпод."],"Your API key":["Ваш API кључ"],"Go to your %s dashboard":["Идите на вашу %s контролну таблу"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["УÑпешно Ñте повезани Ñа %1$s! Да биÑте управљали Ñвојим Zap-ом, поÑетите %2$s контролну таблу."],"Your %s dashboard":["Ваша %s контролна табла"],"Verify connection":["Проверите везу"],"Verify your connection":["Проверите вашу везу"],"Create a Zap":["Креирајте Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Пријавите Ñе на Ñвој %1$s налог и почните да правите Ñвој први Zap! Имајте на уму да можете да креирате Ñамо 1 Zap Ñа окидачем %2$s догађаја. У оквиру овог Zap-а можете изабрати једну или више радњи."],"%s API key":["%s API кључ"],"You'll need this API key later on in %s when you're setting up your Zap.":["Овај API кључ ће вам требати каÑније у %s када подешавате Ñвој Zap."],"Copy your API key":["Копирајте ваш API кључ"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Да биÑте уÑпоÑтавили везу, обавезно копирајте дати API кључ у наÑтавку и кориÑтите га за креирање и укључивање Zap-а на вашем %s налогу."],"Manage %s settings":["Управљајте %s подешавањима"],"Connect to %s":["Повежите Ñе Ñа %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Имајте на уму: да би овај тренинг добро функциониÑао, морате покренути алатку за оптимизацију SEO података. ÐдминиÑтратори ово могу покренути под %1$sSEO > Ðлати%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Додали Ñте везе у Ñвоје напуштене чланке и почиÑтили оне који више ниÑу релевантни. Сјајан поÑао! Погледајте резиме иÑпод и проÑлавите оно што Ñте поÑтигли!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Критички прегледајте Ñадржај на овој лиÑти и извршите неопходна ажурирања. Ðко вам је потребна помоћ за ажурирање, имамо веома %1$sкориÑтан чланак на блогу који може да Ð²Ð°Ñ Ñ€ÑƒÐºÐ¾Ð²Ð¾Ð´Ð¸ до краја%2$s (кликните да биÑте отворили у новој картици)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sТреба вам више упутÑтава? Сваки корак Ñмо детаљније покрили у Ñледећем водичу: %2$sвежба Како кориÑтити %7$s напуштени Ñадржај %3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Управо Ñте олакшали проналажење Ñвог најбољег Ñадржаја и обезбедили веће шанÑе за рангирање! Свака чаÑÑ‚! С времена на време, не заборавите да проверите да ли ваш кључни Ñадржај добија довољно веза!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Погледајте лиÑту иÑпод. Да ли ваши кључни Ñадржају (означени Ñа %1$s) имају највише унутрашњих веза које упућују на њих? Кликните на дугме Оптимизуј ако миÑлите да је кључном Ñадржају потребно више веза. То ће померити чланак на Ñледећи корак."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Да ли Ñви ваши кључни Ñадржаји имају зелене Ñтавке? За најбоље резултате размиÑлите о уређивању оних који немају!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Које чланке желите да рангирате највише? Које би ваша публика Ñматрала најкориÑнијим и најпотпунијим? Кликните на Ñтрелицу која показује надоле и потражите чланке који одговарају тим критеријумима. ÐутоматÑки ћемо означити чланке које изаберете Ñа лиÑте као кључни Ñадржај."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sТреба вам више упутÑтава? Детаљније Ñмо покрили Ñваки корак у: %2$sвежба Како кориÑтити %7$s кључни Ñадржај%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast преглед Ñадржаја"],"Yoast Related Links":["Yoast Ñродне везе"],"Finish optimizing":["Завршите оптимизацију"],"You've finished adding links to this article.":["Додали Ñте везе до овог чланка."],"Optimize":["Оптимизујте"],"Added to next step":["Додато у Ñледећи корак"],"Choose cornerstone articles...":["Изаберите кључне чланке"],"Loading data...":["Учитавање података..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Још ниÑте очиÑтили или ажурирали ниједан чланак кориÑтећи ову вежбу. Када то учините, овде ће Ñе појавити кратак преглед вашег рада."],"Skipped":["ПреÑкочено"],"Hidden from search engines.":["Скривено од претраживача."],"Removed":["Уклоњено"],"Improved":["Побољшано"],"Resolution":["Резолуција"],"Loading redirect options...":["Опције преуÑмеравања Ñе учитавају..."],"Remove and redirect":["Уклони и преуÑмери"],"Custom url:":["Прилагођен url:"],"Related article:":["Сродни чланак:"],"Home page:":["Почетна Ñтраница:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Спремате Ñе да уклоните %1$s%2$s%3$s. Да биÑте Ñпречили 404 на вашем веб меÑту, требало би да је преуÑмерите на другу Ñтраницу на вашем веб меÑту. Где желите да га преуÑмерите?"],"SEO Workout: Remove article":["SEO Вежба: Уклоните чланак"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Све изгледа добро! Ðа вашем веб меÑту ниÑмо пронашли чланке Ñтарије од шеÑÑ‚ меÑеци који примају премало веза на вашем веб меÑту. Вратите Ñе каÑније овде за нове предлоге за чишћење!"],"Hide from search engines":["Сакриј од претраживача"],"Improve":["Побољшајте"],"Are you sure you wish to hide this article from search engines?":["ЈеÑте ли Ñигурни да желите да Ñакријете овај чланак од претраживача?"],"Action":["Ðкција"],"You've hidden this article from search engines.":["Сакрили Ñте овај чланак од претраживача."],"You've removed this article.":["Уклонили Ñте овај чланак."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Тренутно ниÑте изабрали ниједан чланак за побољшање. Изаберите неколико чланака у претходним корацима за додавање веза и ми ћемо вам овде показати предлоге веза."],"Loading link suggestions...":["Учитавају Ñе предлози веза..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["ÐиÑмо пронашли никакве предлоге за овај чланак, али наравно да и даље можете да додате везе до чланака за које миÑлите да Ñу Ñродни."],"Skip":["ПреÑкочи"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Још ниÑте изабрали ниједан чланак за овај корак. То можете учинити у претходном кораку."],"Is it up-to-date?":["Да ли је ажурирано?"],"Last Updated":["ПоÑледњи пут ажурирано"],"You've moved this article to the next step.":["ПремеÑтили Ñте овај чланак на Ñледећи корак."],"Unknown":["Ðепознато"],"Clear summary":["ЈаÑан резиме"],"Add internal links towards your orphaned articles.":["Додајте интерне везе до Ñвојих напуштених чланака."],"Should you update your article?":["Да ли треба да ажурирате Ñвој чланак?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Ваше веб меÑто може Ñадржати много Ñадржаја који је једном направљен и на који Ñе никада каÑније није оÑвртано. Важно је да прођете кроз њих и запитате Ñе да ли је овај Ñадржај још увек релевантан за ваше веб меÑто. Да ли треба да га поправим или уклоним?"],"Start: Love it or leave it?":["Почетак: Волите или оÑтавите?"],"Clean up your unlinked content to make sure people can find it":["ОчиÑтите неповезани Ñадржај да биÑте били Ñигурни да га људи могу пронаћи"],"I've finished this workout":["Завршио Ñам овај тренинг"],"Reset this workout":["РеÑетујте овај тренинг"],"Well done!":["Добро урађено!"],"Add internal links towards your cornerstones":["Додајте унутрашње везе ка кључном Ñадржају"],"Check the number of incoming internal links of your cornerstones":["Проверите број долазних интерних веза до ваших кључних чланака"],"Start: Choose your cornerstones!":["Почетак: Одаберите Ñвој кључни Ñадржај!"],"The cornerstone approach":["ПриÑтуп кључног Ñадржаја"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Имајте на уму: да би овај тренинг добро функциониÑао и да би вам понудио предлоге за повезивање, морате покренути алатку за оптимизацију SEO података. ÐдминиÑтратори ово могу покренути под %1$sSEO > Ðлати%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Ðапомена: ваш админиÑтратор је онемогућио оÑновну функционалноÑÑ‚ у SEO подешавањима. Уколико желите да кориÑтите ову опцију, требало би да буде омогућена."],"I've finished this step":["Завршио Ñам овај корак"],"Revise this step":["Ревидирај овај корак"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["ÐиÑмо уÑпели да пронађемо интерне везе на вашим Ñтраницама. Или још ниÑте додали интерне везе Ñвом Ñадржају, или их Yoast SEO није индекÑирао. Yoast SEO може индекÑирати ваше везе покретањем оптимизације SEO података у оквиру SEO > Ðлати."],"Incoming links":["Долазне везе"],"Edit to add link":["Уредите да биÑте додали везу"],"%s incoming link":["%s долазна веза","%s долазне везе","%s долазних веза"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Тренутно немате чланака означених као кључни. Када Ñвоје чланке означите као кључне, они ће Ñе појавити овде."],"Focus keyphrase":["ФокуÑни израз (фраза)"],"Article":["Чланак"],"Readability score":["Резултат читљивоÑти"],"SEO score":["SEO резултат"],"Copy failed":["Копирање није уÑпело"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Побољшајте рангирање за Ñве Ñвој кључни Ñадржај кориÑтећи овај %1$sкорак по корак тренинг!%2$s"],"Rank with articles you want to rank with":["Рангирајте чланке Ñа којима желите да будете рангирани"],"Descriptive text":["ОпиÑни текÑÑ‚"],"Show the descriptive text":["Прикажи опиÑни текÑÑ‚"],"Show icon":["Прикажи иконицу"],"Yoast Estimated Reading Time":["Yoast процењено време читања"],"Shows an estimated reading time based on the content length.":["Приказује процењено време читања на оÑнову дужине Ñадржаја."],"reading time":["време читања"],"content length":["дужина Ñадржаја"],"Estimated reading time:":["Процењено време читања:"],"minute":["минут","минута","минута"],"Settings":["Подешавања"],"OK":["OK"],"Close":["Zatvori"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Прво право Ñве-у једном SEO решење за WordPress, укључујући on-page анализу Ñадржаја, XML мапу веб-меÑта и још много тога. "],"Type":["Тип"],"Team Yoast":["Yoast Тим"],"Orphaned content":["Ðапуштени Ñадржај"],"Synonyms":["Sinonimi"],"Internal linking suggestions":["Предлози за унутрашње повезивање"],"Enter a related keyphrase to calculate the SEO score":["УнеÑите Ñродни кључни израз да биÑте израчунали SEO резултат"],"Related keyphrase":["Сродни кључни израз"],"Add related keyphrase":["Додајте кључни израз"],"Analysis results":["Резултати анализе"],"Help on choosing the perfect keyphrase":["Помоћ при избору Ñавршеног кључног израза"],"Help on keyphrase synonyms":["Помоћ Ñа Ñинонимима кључног израза"],"Keyphrase":["Кључна фраза"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Novi URL: {{link}}%s{{/link}}"],"Undo":["Vrati korak nazad"],"Redirect created":["Redirekcija napravljena"],"%s just created a redirect from the old URL to the new URL.":["%s је управо креирао преуÑмеравање Ñа Ñтарог на нови URL."],"Old URL: {{link}}%s{{/link}}":["Stari URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Синоними кључних израза"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Дошло је до грешке: Премијум SEO анализа не ради како је очекивано. Молимо Ð²Ð°Ñ Ð´Ð° {{activateLink}}активирате Ñвоју претплату у MyYoast{{/activateLink}} и затим {{reloadButton}}поновно учитате Ñтраницу{{/reloadButton}}како би правилно радила."],"seo":["seo"],"internal linking":["интерно повезивање"],"site structure":["Ñтруктура веб меÑта"],"We could not find any relevant articles on your website that you could link to from your post.":["ÐиÑмо могли да нађемо релевантне чланке на вашем веб меÑту ка којима биÑте могли да Ñтавите везу у чланку."],"Load suggestions":["Учитај предлоге"],"Refresh suggestions":["ОÑвежи предлоге"],"Write list…":["Ðапишите ÑпиÑак…"],"Adds a list of links related to this page.":["Додаје лиÑту веза Ñродних Ñа овом Ñтраницом."],"related posts":["Ñродни чланци"],"related pages":["Ñродне Ñтранице"],"Adds a table of contents to this page.":["Додаје преглед Ñадржаја на ову Ñтраницу."],"links":["везе"],"toc":["toc"],"Copy link":["Копирајте везу"],"Copy link to suggested article: %s":["Копирај везу на препорученом чланку: %s"],"Add a title to your post for the best internal linking suggestions.":["Додаје наÑлов вашем чланку за најбоље предлоге интерног повезивања."],"Add a metadescription to your post for the best internal linking suggestions.":["Додаје мета Ð¾Ð¿Ð¸Ñ Ð²Ð°ÑˆÐµÐ¼ чланку за најбоље предлоге интерног повезивања."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Додаје наÑлов и мета Ð¾Ð¿Ð¸Ñ Ð²Ð°ÑˆÐµÐ¼ чланку за најбоље предлоге интерног повезивања."],"Also, add a title to your post for the best internal linking suggestions.":["Такође, додаје наÑлов вашем чланку за најбоље предлоге интерног повезивања."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Такође, додаје мета Ð¾Ð¿Ð¸Ñ Ð²Ð°ÑˆÐµÐ¼ чланку за најбоље предлоге интерног повезивања."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Такође, додаје наÑлов и мета Ð¾Ð¿Ð¸Ñ Ð²Ð°ÑˆÐµÐ¼ чланку за најбоље предлоге интерног повезивања."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Када додате још мало текÑта, овде ћемо вам приказати ÑпиÑак Ñродног Ñадржаја чије везе можете да додате у Ñвом чланку."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Да биÑте побољшали Ñтруктуру веб меÑта, размиÑлите о повезивању Ñа другим релевантним чланцима или Ñтраницама на вашем веб меÑту."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Потребно је неколико Ñекунди да вам Ñе прикаже лиÑта Ñродног Ñадржаја чије везе биÑте могли да додате. Предлози ће Ñе овде приказати чим их добијемо."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Прочитајте наш водич о унутрашњем повезивању за SEO{{/a}} да биÑте Ñазнали више."],"Copied!":["Копирано."],"Not supported!":["Ðије подржано"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Да ли покушавате да кориÑтите више Ñродних кључних израза? Требали биÑте их додати одвојено."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Ваш кључни израз је предугачак. Дозвољено је највише 191 карактер."],"Add as related keyphrase":["Додајте као Ñродни кључни израз"],"Added!":["Додато!"],"Remove":["Уклони"],"Table of contents":["Преглед Ñадржаја"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Морамо да оптимизујемо SEO податке вашег веб меÑта како биÑмо могли понудити најбоље %1$sпредлоге за повезивање%2$s. %3$sЗапочните SEO података%4$s"],"Create a Zap in %s":["Креирајте Zap на %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sv_SE.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sv_SE.json new file mode 100644 index 00000000..80e573c8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-sv_SE.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":["undersidor"],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":["webbplatsstruktur"],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":["SEO"],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["FörfrÃ¥gan gav följande fel: â€%sâ€"],"X share preview":["Förhandsvisning av delning i X"],"AI X title generator":["AI-baserad rubrikgenerator för X"],"AI X description generator":["AI-baserad beskrivningsgenerator för X"],"X preview":["Förhandsvisning för X"],"Please enter a valid focus keyphrase.":["Skriv in en giltig nyckelordsfras."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["För att du ska kunna använda denna funktion mÃ¥ste din webbplats först göras publikt Ã¥tkomlig. Detta gäller bÃ¥de för testwebbplatser och fall där ditt REST API är skyddat med lösenord. Se till att din webbplats är publikt Ã¥tkomlig och försök igen. Om problemet kvarstÃ¥r ber vi dig att %1$skontakta vÃ¥r support%2$s."],"Yoast AI cannot reach your site":["Yoast AI kan inte nÃ¥ din webbplats"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["För att kunna använda denna funktion behöver du ha aktiva abonnemang pÃ¥ %2$s och %3$s. %5$sAktivera ditt abonnemang i %1$s%6$s eller %7$sskaffa en ny %4$s%8$s. Därefter behöver du ladda om denna sida för att funktionen ska aktiveras. Det kan ta upp till 30 sekunder."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["För att den AI-stödda rubrikgeneratorn ska kunna användas mÃ¥ste SEO-analys vara aktiverad. Den aktiverar du under %2$sWebbplatsfunktioner i %1$s%3$s. Aktivera SEO-analys och klicka pÃ¥ â€Spara ändringarâ€. Om SEO-analys är inaktiverad för ditt WordPress-konto gÃ¥r du till profilsidan för att aktivera den där. Kontakta din administratör om du inte har tillgÃ¥ng till dessa inställningar."],"Social share preview":["Förhandsvisning av delning i sociala medier"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Om du vill fortsätta använda Yoast AI-funktionen ber vi dig att minska frekvensen pÃ¥ dina förfrÃ¥gningar. I vÃ¥r %1$shjälpartikel%2$s finns riktlinjer för hur du effektivt planerar och anpassar dina förfrÃ¥gningar för ett optimerat arbetsflöde."],"You've reached the Yoast AI rate limit.":["Du har nÃ¥tt frekvenstaket för Yoast AI."],"Allow":["TillÃ¥t"],"Deny":["Neka"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["För att kunna se denna video mÃ¥ste du tillÃ¥ta %1$s att ladda in inbäddade videor frÃ¥n %2$s."],"Text generated by AI may be offensive or inaccurate.":["Texten som genereras med AI kan vara stötande eller felaktig."],"(Opens in a new browser tab)":["(Öppnas i en ny webbläsarflik)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Snabba upp ditt arbetsflöde med generativ AI. FÃ¥ högkvalitativa förslag pÃ¥ rubriker och beskrivningar för visning i sökningar och sociala medier. %1$sLäs mer%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Generera rubriker och beskrivningar med Yoast AI!"],"New to %1$s":["Om %1$s är nytt för dig"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Jag godkänner %1$sAnvändarvillkoren%2$s och %3$sIntegritetspolicyn%4$s för tjänsten Yoast AI. Detta inkluderar samtycke till insamling och användning av data för att förbättra användarupplevelsen."],"Start generating":["Börja generera"],"Yes, revoke consent":["Ja, Ã¥terkalla samtycke"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["När du Ã¥terkallar samtycket förlorar du Ã¥tkomsten till funktionerna i Yoast AI. Är du säker pÃ¥ att du vill Ã¥terkalla samtycket?"],"Something went wrong, please try again later.":["NÃ¥got gick fel, försök igen senare."],"Revoke AI consent":["Ã…terkalla samtycket avseende AI"],"AI title generator":["AI-generator för rubriker"],"AI description generator":["AI-generator för beskrivningar"],"AI social title generator":["AI-generator för rubriker i sociala nätverk"],"AI social description generator":["AI-generator för beskrivningar i sociala nätverk"],"Dismiss":["Avfärda"],"Don’t show again":["Visa inte igen"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sTips%2$s: Förbättra noggrannheten i dina genererade AI-rubriker genom att skriva in mer innehÃ¥ll pÃ¥ sidan."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sTips%2$s: Förbättra noggrannheten i dina genererade AI-beskrivningar genom att skriva in mer innehÃ¥ll pÃ¥ sidan."],"Try again":["Försök igen"],"Social preview":["Förhandsvisning av utseende i sociala nätverk"],"Desktop result":["Resultat för stationär dator"],"Mobile result":["Mobilt resultat"],"Apply %s description":[],"Apply %s title":[],"Next":["Nästa"],"Previous":["FöregÃ¥ende"],"Generate 5 more":["Generera ytterligare 5"],"Google preview":["Google förhandsgranskning"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["PÃ¥ grund av de strikta etiska riktlinjerna och %1$sanvändningspolicyerna%2$s för OpenAI kan vi inte generera SEO-rubriker för din sida. Om du vill använda AI bör du undvika stötande, vÃ¥ldsamt eller sexuellt innehÃ¥ll. %3$sLäs mer om hur du konfigurerar din sida för fÃ¥ bästa resultat med AI%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["PÃ¥ grund av de strikta etiska riktlinjerna och %1$sanvändningspolicyerna%2$s för OpenAI kan vi inte generera metabeskrivningar för din sida. Om du vill använda AI bör du undvika stötande, vÃ¥ldsamt eller sexuellt innehÃ¥ll. %3$sLäs mer om hur du konfigurerar din sida för fÃ¥ bästa resultat med AI%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["För Ã¥tkomst till denna funktion behöver du en aktiv prenumeration pÃ¥ %1$s. %3$sAktivera din prenumeration i %2$s%4$s eller %5$sstarta en ny %1$s prenumeration%6$s. Klicka sedan pÃ¥ knappen för att ladda om denna sida för att funktionen ska fungera korrekt. Det kan ta upp till 30 sekunder."],"Refresh page":["Uppdatera sida"],"Not enough content":["För lite innehÃ¥ll"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Försök igen senare. Om problemet kvarstÃ¥r ber vi dig %1$skontakta vÃ¥rt supportteam%2$s!"],"Something went wrong":["NÃ¥got gick fel"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["En timeout verkar har inträffat i anslutningen. Kontrollera internetanslutningen och försök igen senare. Om problemet kvarstÃ¥r ber vi dig %1$skontakta vÃ¥rt supportteam%2$s"],"Connection timeout":["Timeout i anslutningen"],"Use AI":["Använd AI"],"Close modal":["Stäng modalfönstret"],"Learn more about AI (Opens in a new browser tab)":["Läs mer om AI (öppnas i en ny flik)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sRubrik%3$s: Din sida har ingen rubrik än. %2$sSkapa en%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sRubrik%2$s: Din sida har en rubrik. Utmärkt!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sFördelning av nyckelordsfras%3$s: %2$sInkludera din nyckelordsfras eller dess synonymer för att vi ska kunna analysera fördelningen%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sFördelning av nyckelordsfras%2$s: Bra jobbat!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sFördelning av nyckelordsfras%3$s: Ojämn. Delar av din text innehÃ¥ller inte nyckelordsfrasen eller dess synonymer. %2$sFördela nyckelordsfrasen mer jämnt%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sFördelning av nyckelordsfras%3$s: Väldigt ojämn. Stora delar av din text innehÃ¥ller inte nyckelordsfrasen eller dess synonymer. %2$sFördela nyckelordsfrasen mer jämnt%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Du använder inte för mÃ¥nga svÃ¥ra ord, vilket gör din text enkel att läsa. Bra jobbat!"],"Word complexity":["Ordkomplexitet"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s av orden i din text bedöms vara komplicerade. %3$sFörsök att använda kortare och vanligare ord för att förbättra läsbarheten%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sTextjustering%3$s: Det finns ett lÃ¥ngt avsnitt med centrerad text. %2$sVi rekommenderar att du vänsterjusterar det%3$s.","%1$sTextjustering%3$s: Det finns %4$s lÃ¥nga avsnitt med centrerad text. %2$sVi rekommenderar att du vänsterjusterar dem%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sTextjustering%3$s: Det finns ett lÃ¥ngt avsnitt med centrerad text. %2$sVi rekommenderar att du högerjusterar det%3$s.","%1$sTextjustering%3$s: Det finns %4$s lÃ¥nga avsnitt med centrerad text. %2$sVi rekommenderar att du högerjusterar dem%3$s."],"Select image":["Välj bild"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Det kanske finns sidor pÃ¥ din webbplats som saknar inkommande länkar utan att du vet om det. Det är ett SEO-problem, eftersom det är svÃ¥rt för sökmotorer att hitta sidor som saknar inkommande länkar. Det är svÃ¥rare för sÃ¥dana sidor att ranka högt. Vi kallar sÃ¥dana sidor för föräldralöst innehÃ¥ll. I det här träningspasset letar vi reda pÃ¥ föräldralöst innehÃ¥ll pÃ¥ din webbplats och vägleder dig till att snabbt lägga till länkar till det, sÃ¥ att det fÃ¥r en chans att ranka bättre!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Nu är det dags att lägga till lite länkar! Nedan ser du en lista med dina â€föräldralösa†artiklar. Under varje artikel fÃ¥r du förslag pÃ¥ relaterade sidor där du skulle kunna lägga in en länk till den föräldralösa sidan. När du lägger till länken, ska du se till att infoga den i en relevant mening som hör samman med ämnet för din föräldralösa artikel. Fortsätt att lägga till länkar till var och en av de föräldralösa artiklarna tills du är nöjd med antalet länkar som leder till dem."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Dags att lägga in lite länkar! Nedan ser du en lista med dina hörnstenar. Under varje hörnstensartikel finns det förslag pÃ¥ artiklar, frÃ¥n vilka du skulle kunna länka till dem. När du lägger till länken, se till att infoga den i en relevant mening som hör samman med hörnstensartikeln. Fortsätt att lägga till länkar frÃ¥n sÃ¥ mÃ¥nga relaterade artiklar som du behöver, tills det är hörnstensartiklarna som har flest inkommande interna länkar."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Vissa artiklar pÃ¥ din webbplats är %1$sallra%2$s viktigast. De svarar pÃ¥ frÃ¥gor människor har och löser deras problem. Därför förtjänar de att ranka väl! Vi pÃ¥ %3$s kallar dessa artiklar för hörnstenar. Ett av sätten att fÃ¥ dem att ranka högt är att peka tillräckligt mÃ¥nga länkar till dem. Fler länkar signalerar till sökmotorerna att artiklarna är viktiga och värdefulla. I det här träningspasset hjälper vi dig att lägga in fler länkar till dina hörnstensartiklar!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["När du har lagt till lite mer text kan vi berätta hur formell din text verkar vara."],"Overall, your text appears to be %1$s%3$s%2$s.":["Överlag verkar din text vara %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Integreringen med Zapier kommer att tas bort ur %1$s i version 20.7 (release-datum är 9 maj). Om du undrar över nÃ¥got ber vi dig att kontakta %2$s."],"Maximum heading level":["Maximal rubriknivÃ¥"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Du har inaktiverat funktionen för länkförslag, som behövs för att relaterade länkar ska fungera. Om du vill lägga till relaterade länkar, ska du gÃ¥ till webbplatsfunktioner och aktivera länkförslag."],"Schema":["Schema"],"Meta tags":["Metataggar"],"Not available":["Inte tillgängligt"],"Checks":["Kontroller"],"Focus Keyphrase":["Fokusnyckelordsfras"],"Good":["Bra"],"No index":["Inget index"],"Front-end SEO inspector":["SEO-kontroll i front-end"],"Focus keyphrase not set":["Ingen nyckelordsfras har valts"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["När du har publicerat din Zap i instrumentpanelen för %s kan du kontrollera om den är aktiv och ansluten till din webbplats."],"Reset API key":["Ã…terställ API-nyckel"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Du är för närvarande ansluten till %s via följande API-nyckel. Om du vill Ã¥teransluta med en annan API-nyckel kan du Ã¥terställa nyckeln nedan."],"Your API key":["Din API-nyckel"],"Go to your %s dashboard":["GÃ¥ till din %s-adminpanel"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Du är nu ansluten till %1$s! För att hantera din Zap gÃ¥r du till din instrumentpanel i %2$s."],"Your %s dashboard":["Din %s-adminpanel"],"Verify connection":["Verifiera anslutning"],"Verify your connection":["Verifiera din anslutning"],"Create a Zap":["Skapa en Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Logga in pÃ¥ ditt %1$s-konto och börja skapa din första Zap! Observera att du bara kan skapa 1 Zap med en utlösande händelse frÃ¥n %2$s. I denna Zap kan du sedan välja en eller flera Ã¥tgärder."],"%s API key":["%s API-nyckel"],"You'll need this API key later on in %s when you're setting up your Zap.":["Du behöver denna API-nyckel senare i %s när du ska konfigurera din Zap."],"Copy your API key":["Kopiera din API-nyckel"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["För att skapa en anslutning, behöver du kopiera API-nyckeln nedan och använda den för att skapa och aktivera en Zap i ditt %s-konto."],"Manage %s settings":["Hantera %s-inställningar"],"Connect to %s":["Anslut till %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Obs! För att detta träningspass ska fungera bra mÃ¥ste du köra optimeringsverktyget för SEO-data. Administratörer kan köra detta via %1$sSEO > verktyg%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Du har skapat länkar till de artiklar som blivit över och rensat bort de som inte längre är relevanta. Bra jobbat! Kolla in sammanfattningen nedan för att fira din bedrift!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Granska kritiskt innehÃ¥llet i denna lista och gör de uppdateringar som behövs. Om du behöver hjälp med uppdateringen har vi ett mycket %1$sanvändbart blogginlägg som kan guida dig hela vägen%2$s (öppnas i en ny flik)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sBehöver du mer vägledning? Vi har diskuterat varje steg mer detaljerat i följande guide: %2$sSÃ¥ använder du träningsprogrammet för artiklar som blivit över i %7$s%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Nu har du gjort det enklare att hitta ditt bästa innehÃ¥ll och ökat chansen att rankas bra. Bra jobbat! Kom ihÃ¥g att dÃ¥ och dÃ¥ kontrollera om dina hörnstensartiklar fÃ¥r tillräckligt med inkommande länkar!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Studera listan nedan. Har dina hörnstensartiklar (markerade med %1$s) störst antal inkommande interna länkar? Klicka pÃ¥ knappen â€Optimera†om du känner att en hörnsten behöver fler länkar. DÃ¥ lyfts artikeln över till nästa steg."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Har alla hörnstensartiklar gröna punkter? För bäst resultat bör du överväga att redigera de artiklar som inte har det!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Vilka artiklar vill du ska ranka bäst? Vilka skulle din publik tycka är mest användbara och kompletta? Klicka pÃ¥ nedÃ¥tpilen och leta efter artiklar som uppfyller dessa kriterier. De artiklar du väljer i listan markerar vi automatiskt som hörnstenar."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sBehöver du mer vägledning? Vi har diskuterat varje steg mer detaljerat i följande guide: %2$sSÃ¥ använder du träningsprogrammet för hörnstensartiklar i %7$s%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Yoast innehÃ¥llsförteckning"],"Yoast Related Links":["Yoast Relaterade länkar"],"Finish optimizing":["Avsluta optimeringen"],"You've finished adding links to this article.":["Du är klar med att skapa länkar till denna artikel."],"Optimize":["Optimera"],"Added to next step":["Tillagd för nästa steg"],"Choose cornerstone articles...":["Välj grundstensartiklar …"],"Loading data...":["Laddar in data …"],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Du har ännu inte städat upp eller uppdaterat nÃ¥gra artiklar med detta träningspass. Efter att du gör det kommer en sammanfattning av ditt arbete att visas här."],"Skipped":["Hoppat över"],"Hidden from search engines.":["Dold för sökmotorer."],"Removed":["Borttagen"],"Improved":["Förbättrad"],"Resolution":["Resultat"],"Loading redirect options...":["Laddar förslag pÃ¥ omdirigeringsmÃ¥l …"],"Remove and redirect":["Ta bort och omdirigera"],"Custom url:":["Anpassad URL:"],"Related article:":["Relaterad artikel:"],"Home page:":["Startsida:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Du är pÃ¥ väg att ta bort %1$s%2$s%3$s. För att inte fÃ¥ felet 404 (saknad sida) pÃ¥ webbplatsen behöver du omdirigera till nÃ¥gon annan sida pÃ¥ din webbplats. Vart vill du omdirigera sidan?"],"SEO Workout: Remove article":["SEO-träningspass: Ta bort artikel"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Allt ser bra ut! Vi hittar inga artiklar pÃ¥ webbplatsen som är äldre än sex mÃ¥nader eller har för fÃ¥ inkommande länkar pÃ¥ din webbplats. Kom tillbaka hit senare för nya förslag pÃ¥ vad som behöver städas upp!"],"Hide from search engines":["Dölj för sökmotorer"],"Improve":["Förbättra"],"Are you sure you wish to hide this article from search engines?":["Är du säker pÃ¥ att du vill dölja denna artikel frÃ¥n sökmotorer?"],"Action":["Ã…tgärd"],"You've hidden this article from search engines.":["Du har dolt denna artikel för sökmotorer."],"You've removed this article.":["Du tog bort denna artikel."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Du har inte valt nÃ¥gra artiklar att förbättra. Välj nÃ¥gra artiklar som behöver fler inkommande länkar i de föregÃ¥ende stegen, sÃ¥ visar vi förslag pÃ¥ länkar här."],"Loading link suggestions...":["Laddar in länkförslag …"],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Vi hittade inga förslag pÃ¥ denna artikel, men du kan naturligtvis fortfarande lägga till länkar till artiklar som du tror är relaterade."],"Skip":["Hoppa över"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Du har inte valt nÃ¥gra artiklar för detta steg än. Du kan göra det i föregÃ¥ende steg."],"Is it up-to-date?":["Är innehÃ¥llet fortfarande aktuellt?"],"Last Updated":["Senast uppdaterat"],"You've moved this article to the next step.":["Du flyttade denna artikel till nästa steg."],"Unknown":["Okänt"],"Clear summary":["Rensa sammanfattning"],"Add internal links towards your orphaned articles.":["Lägg till interna inkommande länkar till dina överblivna artiklar."],"Should you update your article?":["Ska du uppdatera din artikel?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Din webbplats kan innehÃ¥lla mycket innehÃ¥ll som du har skapat en gÃ¥ng i tiden och som du sedan aldrig tittat tillbaka pÃ¥. Det är viktigt att gÃ¥ igenom dessa sidor och tänka över om innehÃ¥llet fortfarande är relevant för webbplatsen. Bör du förbättra dem eller ta bort?"],"Start: Love it or leave it?":["Inledning: Älska det eller röja bort?"],"Clean up your unlinked content to make sure people can find it":["Städa upp innehÃ¥ll som saknar inkommande länkar sÃ¥ att besökare kan hitta det"],"I've finished this workout":["Jag har slutfört detta steg"],"Reset this workout":["Ã…terställ detta steg"],"Well done!":["Bra gjort!"],"Add internal links towards your cornerstones":["Lägg till interna länkar till dina grundstensartiklar"],"Check the number of incoming internal links of your cornerstones":["Kontrollera antalet inkommande interna länkar till dina grundstensartiklar"],"Start: Choose your cornerstones!":["Start: Välj dina grundstenar!"],"The cornerstone approach":["Grundstensmetoden"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Obs: För att detta träningspass ska fungera väl och komma med länkförslag behöver du köra verktyget för optimering av SEO-data. Administratörer kan köra detta via %1$sSEO > Verktyg%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Obs: Din administratör har inaktiverat funktionen för grundstensinnehÃ¥ll i inställningarna för SEO. Om du vill genomföra detta träningspass behöver inställningen aktiveras."],"I've finished this step":["Jag har slutfört detta steg"],"Revise this step":["Revidera detta steg"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Vi hittade inga interna länkar pÃ¥ dina sidor. Antingen har du inte lagt till nÃ¥gra interna länkar till ditt innehÃ¥ll ännu, eller sÃ¥ har Yoast SEO inte indexerat dem. Du kan lÃ¥ta Yoast SEO indexera dina länkar genom att köra optimering av SEO-data under SEO > Verktyg."],"Incoming links":["Inkommande länkar"],"Edit to add link":["Redigera för att lägga till en länk"],"%s incoming link":["%s inkommande länk","%s inkommande länkar"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["För närvarande har du inga artiklar markerade som grundstenar. När du markerar en artikel som grundsten kommer den att visas här."],"Focus keyphrase":["Fokusnyckelordsfras"],"Article":["Artikel"],"Readability score":["Läsbarhetspoäng"],"SEO score":["SEO-poäng"],"Copy failed":["Kopiering misslyckades"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Förbättra rankningen för alla dina grundstenar genom att följa %1$sden här stegvisa träningen!%2$s"],"Rank with articles you want to rank with":["Ranka med artiklar du vill ranka med"],"Descriptive text":["Beskrivande text"],"Show the descriptive text":["Visa den beskrivande texten"],"Show icon":["Visa ikon"],"Yoast Estimated Reading Time":["Yoast beräknad läsningstid"],"Shows an estimated reading time based on the content length.":["Visar en beräknad läsningstid baserat pÃ¥ innehÃ¥llslängden."],"reading time":["läsningstid"],"content length":["innehÃ¥llslängd"],"Estimated reading time:":["Beräknad läsningstid:"],"minute":["minut","minuter"],"Settings":["Inställningar"],"OK":["OK"],"Close":["Stäng"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Den första riktiga allt-i-ett SEO-lösningen för WordPress, inklusive innehÃ¥llsanalys pÃ¥ sidor, XML webbplatskartor och mycket mer."],"Type":["Typ"],"Team Yoast":["Team Yoast"],"Orphaned content":["Föräldralöst innehÃ¥ll"],"Synonyms":["Synonymer"],"Internal linking suggestions":["Interna länkförslag"],"Enter a related keyphrase to calculate the SEO score":["Ange en relaterad nyckelordsfras för att beräkna SEO-poäng"],"Related keyphrase":["Relaterad nyckelordsfras"],"Add related keyphrase":["Lägg till relaterad nyckelordsfras"],"Analysis results":["Analysresultat"],"Help on choosing the perfect keyphrase":["Hjälp med att välja perfekt nyckelordsfras"],"Help on keyphrase synonyms":["Hjälp med synonymer för nyckelordsfras"],"Keyphrase":["Nyckelordsfras"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Ny URL: {{link}}%s{{/link}}"],"Undo":["Ã…ngra"],"Redirect created":["Omdirigering skapad"],"%s just created a redirect from the old URL to the new URL.":["%s skapade precis en omdirigering frÃ¥n den gamla URL:en till den nya URL:en."],"Old URL: {{link}}%s{{/link}}":["Gammal URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Synonymer för nyckelordsfraser"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Ett fel har inträffat: Premium SEO-analysen fungerar inte som den borde. {{activateLink}}Aktivera ditt abonnemang i MyYoast{{/activateLink}} och {{reloadButton}}ladda därefter om denna sida{{/reloadButton}} för att allt ska fungera korrekt."],"seo":["seo"],"internal linking":["intern länkning"],"site structure":["webbplatsstruktur"],"We could not find any relevant articles on your website that you could link to from your post.":["Vi kunde inte hitta nÃ¥gra relevanta artiklar pÃ¥ din webbplats som du kan länka till frÃ¥n ditt inlägg."],"Load suggestions":["Ladda förslag"],"Refresh suggestions":["Uppdatera förslag"],"Write list…":["Skriv lista…"],"Adds a list of links related to this page.":["Lägger till en lista med länkar relaterade till denna sida."],"related posts":["relaterade inlägg"],"related pages":["relaterade sidor"],"Adds a table of contents to this page.":["Lägger till en innehÃ¥llsförteckning pÃ¥ denna sida."],"links":["länkar"],"toc":["reg"],"Copy link":["Kopiera länk"],"Copy link to suggested article: %s":["Kopiera länk till föreslagen artikel: %s"],"Add a title to your post for the best internal linking suggestions.":["Lägg till en rubrik i ditt inlägg för att fÃ¥ de bästa interna länkförslagen."],"Add a metadescription to your post for the best internal linking suggestions.":["Lägg till en metabeskrivning i ditt inlägg för att fÃ¥ de bästa interna länkförslagen."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Lägg till en rubrik och en metabeskrivning i ditt inlägg för att fÃ¥ de bästa interna länkförslagen."],"Also, add a title to your post for the best internal linking suggestions.":["Lägg ocksÃ¥ till en rubrik i ditt inlägg för att fÃ¥ de bästa interna länkförslagen."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Lägg ocksÃ¥ till en metabeskrivning i ditt inlägg för att fÃ¥ de bästa interna länkförslagen."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Lägg ocksÃ¥ till en rubrik och en metabeskrivning i ditt inlägg för att fÃ¥ de bästa interna länkförslagen."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["När du lagt till lite mer text, ger vi dig en lista med relaterat innehÃ¥ll som du kan länka till i ditt inlägg."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["För att förbättra din webbplatsstruktur, överväg att länka till andra relevanta inlägg eller sidor pÃ¥ din webbplats."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Det tar nÃ¥gra sekunder att visa dig en lista med relaterat innehÃ¥ll som du kan länka till. Förslagen visas här sÃ¥ snart vi har dem."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}Läs vÃ¥r guide om intern länkning för SEO{{/a}} för att lära dig mer."],"Copied!":["Kopierad!"],"Not supported!":["Stöds inte!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Försöker du använda flera relaterade nyckelfraser? Du bör lägga till dem separat."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Din nyckelfras är för lÃ¥ng. Den fÃ¥r maximalt vara 191 tecken."],"Add as related keyphrase":["Lägg till som relaterad nyckelfras"],"Added!":["Tillagt!"],"Remove":["Ta bort"],"Table of contents":["InnehÃ¥llsförteckning"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Vi behöver optimera din webbplats SEO-data sÃ¥ att vi kan erbjuda dig de bästa %1$slänkförslagen%2$s.\n\n%3$sStarta SEO-dataoptimering%4$s"],"Create a Zap in %s":["Skapa en Zap i %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-tr_TR.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-tr_TR.json new file mode 100644 index 00000000..174bb63d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-tr_TR.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=2; plural=(n > 1);","lang":"tr"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["İstek aÅŸağıdaki hata ile geri geldi: \"%s\""],"X share preview":["X paylaşım önizlemesi"],"AI X title generator":["YZ X baÅŸlık oluÅŸturucu"],"AI X description generator":["YZ X açıklama oluÅŸturucu"],"X preview":["X önizlemesi"],"Please enter a valid focus keyphrase.":["Lütfen geçerli bir odak anahtar kelime girin."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Bu özelliÄŸi kullanmak için sitenizin genel eriÅŸime açık olması gerekir. Bu, hem test siteleri hem de REST API'nizin parola korumalı olduÄŸu örnekler için geçerlidir. Lütfen sitenizin herkese açık olduÄŸundan emin olun ve tekrar deneyin. Sorun devam ederse lütfen %1$sdestek ekibimizle iletiÅŸime geçin%2$s."],"Yoast AI cannot reach your site":["Yoast AI sitenize ulaÅŸamıyor"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Bu özelliÄŸe eriÅŸmek için aktif %2$s ve %3$s aboneliklerine ihtiyacınız var. Lütfen %5$saboneliklerinizi %1$s%6$s üzerinde etkinleÅŸtirin veya %7$syeni bir %4$s%8$s alın. Daha sonra, özelliÄŸin doÄŸru çalışması için lütfen bu sayfayı yenileyin; bu iÅŸlem 30 saniye kadar sürebilir."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["YZ baÅŸlık oluÅŸturucu, kullanılmadan önce SEO analizinin etkinleÅŸtirilmesini gerektirir. EtkinleÅŸtirmek için lütfen %2$s%1$s site özellikleri%3$s bölümüne gidin, SEO analizini açın ve 'DeÄŸiÅŸiklikleri kaydet'e tıklayın. SEO analizi WordPress kullanıcı profilinizde devre dışı bırakılmışsa, profilinize eriÅŸin ve orada etkinleÅŸtirin. Bu ayarlara eriÅŸiminiz yoksa lütfen yöneticinizle iletiÅŸime geçin."],"Social share preview":["Sosyal paylaşım önizlemesi"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Yoast AI özelliÄŸini kullanmaya devam etmek için lütfen taleplerinizin sıklığını azaltın. %1$sYardım makalemiz%2$s, optimize edilmiÅŸ bir iÅŸ akışı için taleplerinizi etkili bir ÅŸekilde planlama ve hızlandırma konusunda rehberlik saÄŸlar."],"You've reached the Yoast AI rate limit.":["Yoast AI kullanım sınırına ulaÅŸtınız."],"Allow":["İzin ver"],"Deny":["Reddet"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Bu videoyu görmek için %1$s eklentisine %2$s gömülü videolarını yüklemesine izin vermeniz gerekir."],"Text generated by AI may be offensive or inaccurate.":["Yapay zeka tarafından oluÅŸturulan metin saldırgan veya yanlış olabilir."],"(Opens in a new browser tab)":["(Yeni sekmede açılır)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Üretken yapay zeka ile iÅŸ akışınızı hızlandırın. Arama ve sosyal görünümünüz için yüksek kaliteli baÅŸlık ve açıklama önerileri alın. %1$sDaha fazla bilgi edinin%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Yoast AI ile baÅŸlıklar ve açıklamalar oluÅŸturun!"],"New to %1$s":["%1$s yenilikleri"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Yoast AI hizmetinin %1$sHizmet Åžartlarını%2$s ve %3$sGizlilik Politikasını%4$s onaylıyorum. Bu, kullanıcı deneyimini iyileÅŸtirmek için verilerin toplanmasına ve kullanılmasına izin vermeyi de içerir."],"Start generating":["Üretmeye baÅŸlayın"],"Yes, revoke consent":["Evet, onayı iptal et"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Onayınızı iptal ettiÄŸinizde, Yoast AI özelliklerine artık eriÅŸiminiz olmayacaktır. Onayınızı iptal etmek istediÄŸinizden emin misiniz?"],"Something went wrong, please try again later.":["Bir ÅŸeyler ters gitti. Lütfen daha sonra tekrar deneyin."],"Revoke AI consent":["Yapay zeka iznini iptal et"],"AI title generator":["YZ baÅŸlık oluÅŸturucu"],"AI description generator":["YZ açıklama üreteci"],"AI social title generator":["YZ sosyal baÅŸlık oluÅŸturucu"],"AI social description generator":["YZ sosyal açıklama oluÅŸturucu"],"Dismiss":["Kapat"],"Don’t show again":["Bir daha gösterme"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sİpucu%2$s: Sayfanıza daha fazla içerik yazarak oluÅŸturulan YZ baÅŸlıklarınızın doÄŸruluÄŸunu artırın."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sİpucu%2$s: Sayfanıza daha fazla içerik yazarak oluÅŸturulan YZ açıklamalarınızın doÄŸruluÄŸunu artırın."],"Try again":["Tekrar deneyin"],"Social preview":["Sosyal önizleme"],"Desktop result":["Masaüstü sonucu"],"Mobile result":["Mobil sonucu"],"Apply %s description":[],"Apply %s title":[],"Next":["Sonraki"],"Previous":["Önceki"],"Generate 5 more":["5 tane daha üretin"],"Google preview":["Google ön izlemesi"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["OpenAI'nin katı etik kuralları ve %1$skullanım politikaları%2$s nedeniyle, sayfanız için SEO baÅŸlıkları oluÅŸturamıyoruz. YZ kullanmayı düşünüyorsanız, lütfen açık, ÅŸiddet içeren veya cinsel içerikli içerik kullanmaktan kaçının. %3$sYZ ile en iyi sonuçları aldığınızdan emin olmak için sayfanızı nasıl yapılandıracağınız hakkında daha fazla bilgi edinin%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["OpenAI'nin katı etik kuralları ve %1$skullanım politikaları%2$s nedeniyle, sayfanız için meta etiketleri oluÅŸturamıyoruz. YZ kullanmayı düşünüyorsanız, lütfen açık, ÅŸiddet içeren veya cinsel içerikli içerik kullanmaktan kaçının. %3$sYZ ile en iyi sonuçları aldığınızdan emin olmak için sayfanızı nasıl yapılandıracağınız hakkında daha fazla bilgi edinin%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Bu özelliÄŸe eriÅŸmek için etkin bir %1$s aboneliÄŸiniz olması gerekir. Lütfen %3$saboneliÄŸinizi %2$s üzerinden etkinleÅŸtirin%4$s veya %5$syeni bir %1$s aboneliÄŸi satın alın%6$s. Daha sonra, özelliÄŸin doÄŸru çalışması için bu sayfayı yenilemek üzere düğmeye tıklayın; bu iÅŸlem 30 saniye kadar sürebilir."],"Refresh page":["Sayfayı yenile"],"Not enough content":["Yeterli içerik yok"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Lütfen daha sonra tekrar deneyin. Sorun devam ederse, lütfen %1$sdestek ekibimizle%2$s iletiÅŸime geçin!"],"Something went wrong":["Bir terslik çıktı"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Bir baÄŸlantı zaman aşımı meydana gelmiÅŸ gibi görünüyor. Lütfen internet baÄŸlantınızı kontrol edin ve daha sonra tekrar deneyin. Sorun devam ederse, lütfen %1$sdestek ekibimizle iletiÅŸime geçin%2$s"],"Connection timeout":["BaÄŸlantı zaman aşımı"],"Use AI":["YZ kullan"],"Close modal":["Pencereyi kapat"],"Learn more about AI (Opens in a new browser tab)":["YZ hakkında daha fazla bilgi edinin (Yeni bir tarayıcı sekmesinde açılır)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sBaÅŸlık%3$s: Sayfanızın henüz bir baÅŸlığı yok. %2$sBir tane ekleyin%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sBaÅŸlık%2$s: Sayfanızın bir baÅŸlığı var. Tebrikler!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sAnahtar kelime dağılımı%3$s: %2$sAnahtar kelime dağılımınızı kontrol edebilmemiz için metne anahtar kelimeleri veya eÅŸ anlamlılarını ekleyin%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sAnahtar kelime dağılımı%2$s: İyi iÅŸ!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sAnahtar kelime dağılımı%3$s: Düzensiz. Metninizin bazı bölümleri anahtar kelimeleri veya eÅŸ anlamlılarını içermiyor. %2$sKelimeleri daha eÅŸit dağıtın%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sAnahtar kelime dağılımı%3$s: Çok düzensiz. Metninizin büyük bölümleri anahtar kelimeleri veya eÅŸ anlamlılarını içermiyor. %2$sKelimeleri daha eÅŸit dağıtın%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: Çok fazla karmaşık kelime kullanmıyorsunuz, bu da metninizin okunmasını kolaylaÅŸtırıyor. Güzel iÅŸ!"],"Word complexity":["Kelime karmaşıklığı"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: Metninizdeki kelimelerin %2$s kadarı karmaşık olarak tespit edildi. %3$sOkunabilirliÄŸi artırmak için daha kısa ve daha tanıdık kelimeler kullanmaya çalışın%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sHizalama%3$s: Ortaya hizalanmış uzun bir metin bölümü var. %2$sSola hizalı yapmanızı öneririz%3$s.","%1$sHizalama%3$s: Ortaya hizalanmış %4$s uzun metin bölümü var. %2$sSola hizalı yapmanızı öneririz%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sHizalama%3$s: Ortaya hizalanmış uzun bir metin bölümü var. %2$sSaÄŸa hizalı yapmanızı öneririz%3$s.","%1$sHizalama%3$s: Ortaya hizalanmış %4$s uzun metin bölümü var. %2$sSaÄŸa hizalı yapmanızı öneririz%3$s."],"Select image":["FotoÄŸraf seç"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Farkında bile olmayabilirsiniz ama sitenizde hiç baÄŸlantı almayan sayfalar olabilir. Bu bir SEO sorunudur, çünkü arama motorlarının baÄŸlantı almayan sayfaları bulması zordur. Dolayısıyla, sıralamada yer almaları da zordur. Bu sayfalara öksüz içerikler diyoruz. Bu çalışmada, sitenizdeki öksüz içeriÄŸi bulup hızlı bir ÅŸekilde baÄŸlantı eklemeniz için size rehberlik ediyoruz, böylece sıralama ÅŸansı elde edebilirsiniz!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Biraz baÄŸlantı ekleme zamanı! AÅŸağıda, öksüz kalmış makalelerinizi içeren bir liste görüyorsunuz. Her birinin altında, baÄŸlantı ekleyebileceÄŸiniz ilgili sayfalar için öneriler bulunmakta. BaÄŸlantıyı eklerken, öksüz makalenizle ilgili bir cümleye eklediÄŸinizden emin olun. Kendilerine iÅŸaret eden baÄŸlantıların miktarından memnun olana kadar öksüz makalelerin her birine baÄŸlantı eklemeye devam edin."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Biraz baÄŸlantı ekleme zamanı! AÅŸağıda, köşe taşı içeriklerinizi içeren bir liste görüyorsunuz. Her bir köşe taşının altında, bu köşe taşına baÄŸlantı ekleyebileceÄŸiniz makaleler için öneriler bulunmaktadır. BaÄŸlantıyı eklerken, köşe taşı makalenizle ilgili bir cümleyi ilgili makale içine eklediÄŸinizden emin olun. Köşe taÅŸlarınız kendilerini iÅŸaret eden en fazla iç baÄŸlantıya sahip olana kadar, ihtiyaç duyduÄŸunuz sayıda ilgili makaleden baÄŸlantı eklemeye devam edin."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["Sitenizdeki bazı makaleler %1$sen%2$s önemlileridir. İnsanların sorularını yanıtlar ve sorunlarını çözerler. Bu yüzden sıralamada yer almayı hak ederler! %3$s olarak biz bunlara köşe taşı makaleler diyoruz. Sıralamada yer almalarını saÄŸlamanın yollarından biri, onlara yeterince baÄŸlantı yönlendirmektir. Daha fazla baÄŸlantı, arama motorlarına bu makalelerin önemli ve deÄŸerli olduÄŸu sinyalini verir. Bu çalışmada, köşe taşı makalelerinize baÄŸlantı eklemenize yardımcı olacağız!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["Biraz daha metin eklediÄŸinizde, metninizin resmiyet düzeyini size söyleyebileceÄŸiz."],"Overall, your text appears to be %1$s%3$s%2$s.":["Genel olarak, metniniz %1$s%3$s%2$s gibi görünüyor."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Zapier entegrasyonu 20.7'de (çıkış tarihi 9 Mayıs) %1$s eklentisinden kaldırılacaktır. Herhangi bir sorunuz varsa, lütfen %2$s ile iletiÅŸime geçin."],"Maximum heading level":["En fazla baÅŸlık seviyesi"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["BaÄŸlantı önerilerini etkisizleÅŸtirdiniz, fakat bu iliÅŸkili baÄŸlantıların çalışması için gerekli. EÄŸer iliÅŸkili baÄŸlantılar eklemek isterseniz, lütfen Site özellikleri bölümüne gidin ve baÄŸlantı önerilerini etkinleÅŸtirin."],"Schema":["Åžema"],"Meta tags":["Meta etiketleri"],"Not available":["Uygun deÄŸil"],"Checks":["Kontroller"],"Focus Keyphrase":["Odak anahtar ifade"],"Good":["İyi"],"No index":["İndeks yok"],"Front-end SEO inspector":["Ön yüz SEO denetleyicisi"],"Focus keyphrase not set":["Odak anahtar ifade ayarlanmadı"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Zap'ınızı %s panelinizde yayınladıktan sonra, etkin olup olmadığı ve sitenize baÄŸlı olup olmadığını kontrol edebilirsiniz."],"Reset API key":["API anahtarını sıfırla"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Åžu anda %s'e aÅŸağıdaki API anahtarı ile baÄŸlandınız. Farklı bir API anahtarıyla yeniden baÄŸlamak isterseniz anahtarı aÅŸağıda sıfırlayabilirsiniz."],"Your API key":["API anahtarınız"],"Go to your %s dashboard":["%s panelinize gidin"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["%1$s'e baÅŸarıyla baÄŸlandınız! Zapınızı yönetmek için lütfen %2$s panelinizi ziyaret edin."],"Your %s dashboard":["%s paneliniz"],"Verify connection":["BaÄŸlantıyı doÄŸrula"],"Verify your connection":["BaÄŸlantınızı doÄŸrulayın"],"Create a Zap":["Zap oluÅŸtur"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["%1$s hesabınıza giriÅŸ yapın ve ilk zapınızı oluÅŸturmaya baÅŸlayın! %2$s tetikleyici olayı ile yalnızca 1 zap oluÅŸturabileceÄŸinizi unutmayın. Bu zap içinde bir veya daha fazla eylem seçebilirsiniz."],"%s API key":["%s API anahtarı"],"You'll need this API key later on in %s when you're setting up your Zap.":["Zapınızı ayarlarken %s içinde bu API anahtarına daha sonra ihtiyacınız olacaktır."],"Copy your API key":["API anahtarınızı kopyalayın"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["BaÄŸlantı kurmak için aÅŸağıda verilen API anahtarını kopyaladığınızdan ve %s hesabınızda bir zap oluÅŸturmak ve etkinleÅŸtirmek için kullandığınızdan emin olun."],"Manage %s settings":["%s ayarlarını yönet"],"Connect to %s":["%s'e baÄŸlan"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Lütfen dikkat: Bu egzersizin iyi çalışması için SEO veri optimizasyon aracını çalıştırmanız gerekir. Yöneticiler bunu %1$sSEO > Araçları%2$s altında çalıştırabilir."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["BaÄŸlantılanmayan makalelerinize baÄŸlantılar eklediniz ve artık ilgisiz olanları temizlediniz. Harika iÅŸ! AÅŸağıdaki özete bir göz atın ve baÅŸarınızı kutlayın!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Bu listedeki içeriÄŸi dikkatle inceleyin ve gerekli güncellemeleri yapın. Güncelleme konusunda yardıma ihtiyacınız varsa, size %1$stüm yol boyunca rehberlik edebilecek çok kullanışlı bir blog yazımız var%2$s (yeni bir sekmede açmak için tıklayın)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sDaha fazla rehberliÄŸe mi ihtiyacınız var? AÅŸağıdaki kılavuzda her adımı daha ayrıntılı olarak ele aldık: %2$sBaÄŸlantılanmamış içerik egzersizi%7$s nasıl kullanılır%3$s%4$s%5$s. %6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["En iyi içeriÄŸinizi bulmayı kolaylaÅŸtırdınız ve sıralama olasılığınızı artırdınız! Harika iÅŸ çıkardınız! Zaman zaman, köşe taÅŸlarınızın yeterli baÄŸlantı alıp almadığını kontrol etmeyi unutmayın!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["AÅŸağıdaki listeye bir göz atın. Köşe taÅŸlarınız (%1$s ile iÅŸaretlenmiÅŸ) kendisine iÅŸareten eden en çok iç baÄŸlantıya sahip mi? Bir köşe taşının daha fazla baÄŸlantıya ihtiyacı olduÄŸunu düşünüyorsanız Optimize Et düğmesini tıklayın. Bu, makaleyi bir sonraki adıma taşıyacaktır."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Tüm köşe taÅŸlarınızın yeÅŸil iÅŸaretleri var mı? En iyi sonuçlar için, olmayanları düzenlemeyi düşünün!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Hangi makaleleri en üst sıralarda göstermek istiyorsunuz? Hedef kitleniz hangilerini en yararlı ve eksiksiz bulur? AÅŸağıyı gösteren oku tıklatın ve bu ölçütlere uyan makaleleri arayın. Listeden seçtiÄŸiniz makaleleri otomatik olarak köşe taşı olarak iÅŸaretleyeceÄŸiz."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$s Daha fazla rehberliÄŸe mi ihtiyacınız var? Åžurada her adımı daha ayrıntılı olarak ele aldık: %2$s%7$s Köşe taşı egzersizleri nasıl kullanılır%3$s%4$s%5$s. %6$s"],"Yoast Table of Contents":["Yoast içindekiler"],"Yoast Related Links":["Yoast ilgili baÄŸlantılar"],"Finish optimizing":["Optimizasyonu tamamlayın"],"You've finished adding links to this article.":["Bu makaleye baÄŸlantı eklemeyi tamamladınız."],"Optimize":["Optimize et"],"Added to next step":["Sonraki adıma eklendi"],"Choose cornerstone articles...":["Köşe taşı makalelerini seçin..."],"Loading data...":["Veri yükleniyor..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Henüz bu antrenmanı kullanarak herhangi bir makaleyi temizlemediniz veya güncellemediniz. Bunu yaptığınızda, çalışmanızın bir özeti burada görünecektir."],"Skipped":["Atlandı"],"Hidden from search engines.":["Arama motorlarından gizlenmiÅŸ."],"Removed":["Kaldırıldı"],"Improved":["İyileÅŸtirildi"],"Resolution":["Çözüm"],"Loading redirect options...":["Yönlendirme seçenekleri yükleniyor..."],"Remove and redirect":["Kaldır ve yeniden yönlendir"],"Custom url:":["Özel baÄŸlantı:"],"Related article:":["İliÅŸkili makale:"],"Home page:":["Ana sayfa:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["%1$s%2$s%3$s kaldırmak üzeresiniz. 404 hatalarını sitenizde engellemek için baÅŸka bir sayfaya yönlendirmelisiniz. Nereye yönlendirmek istersiniz?"],"SEO Workout: Remove article":["SEO egzersizi: Makaleyi kaldır"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Her ÅŸey iyi görünüyor! Sitenizde altı aydan eski ve sitenizde çok az baÄŸlantı alan makale bulamadık. Yeni temizleme önerileri için burayı daha sonra tekrar kontrol edin!"],"Hide from search engines":["Arama motorlarından gizle"],"Improve":["İyileÅŸtir"],"Are you sure you wish to hide this article from search engines?":["Bu makaleyi arama motorlarından gizlemek istediÄŸinizden emin misiniz?"],"Action":["Eylem"],"You've hidden this article from search engines.":["Bu makaleyi arama motorlarından gizlediniz."],"You've removed this article.":["Bu makaleyi kaldırdınız."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Åžu anda iyileÅŸtirmek için herhangi bir makale seçmediniz. BaÄŸlantı eklemek için önceki adımlarda birkaç makale seçin, size burada baÄŸlantı önerilerini gösterelim."],"Loading link suggestions...":["BaÄŸlantı önerileri yükleniyor..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Bu makale için herhangi bir öneri bulamadık, ancak elbette ilgili olduÄŸunu düşündüğünüz makalelere baÄŸlantılar ekleyebilirsiniz."],"Skip":["Geç"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Bu adım için henüz herhangi bir makale seçmediniz. Bunu önceki adımda yapabilirsiniz."],"Is it up-to-date?":["Güncel mi?"],"Last Updated":["Son güncelleme"],"You've moved this article to the next step.":["Bu makaleyi bir sonraki adıma taşıdınız."],"Unknown":["Bilinmiyor"],"Clear summary":["Özeti temizle"],"Add internal links towards your orphaned articles.":["Yetim kalan makalelerinize dahili baÄŸlantılar ekleyin."],"Should you update your article?":["Makalenizi güncellemeli misiniz?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Siteniz, bir kez oluÅŸturduÄŸunuz ve daha sonra tekrar yüzüne bakmadığınız içeriklere sahip olabilir. Bunları gözden geçirmeniz ve kendinize bu içeriÄŸin hâlâ sitenizle alakalı olup olmadığını sormanız önemlidir. İyileÅŸtirmeli miyim yoksa kaldırmalı mıyım?"],"Start: Love it or leave it?":["BaÅŸlangıç: Sevin ya da terk edin?"],"Clean up your unlinked content to make sure people can find it":["İnsanların bulabileceÄŸinden emin olmak için baÄŸlantısız içeriÄŸinizi temizleyin"],"I've finished this workout":["Bu egzersizi bitirdim"],"Reset this workout":["Bu egzersizi sıfırla"],"Well done!":["Tebrikler!"],"Add internal links towards your cornerstones":["Köşe taÅŸlarınıza dahili baÄŸlantılar ekleyin"],"Check the number of incoming internal links of your cornerstones":["Köşe taÅŸlarınızın gelen dahili baÄŸlantılarının sayısını kontrol edin"],"Start: Choose your cornerstones!":["BaÅŸlayın: Köşe taÅŸlarınızı seçin!"],"The cornerstone approach":["Köşe taşı yaklaşımı"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Lütfen dikkat: Bu egzersizin iyi çalışması ve size baÄŸlantı önerileri sunması için SEO veri optimizasyon aracını çalıştırmanız gerekir. Yöneticiler bunu %1$sSEO > Araçlar%2$s altında çalıştırabilir."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Lütfen dikkat: Yöneticiniz SEO ayarlarında köşe taşı iÅŸlevini devre dışı bırakmıştır. Bu antrenmanı kullanmak istiyorsanız, etkinleÅŸtirilmelidir."],"I've finished this step":["Bu adımı bitirdim"],"Revise this step":["Bu adımı gözden geçirin"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Sayfalarınızda dahili baÄŸlantılar bulamadık. Ya içeriÄŸinize henüz herhangi bir dahili baÄŸlantı eklemediniz ya da Yoast SEO onları dizine eklemedi. SEO > Araçlar altında SEO veri optimizasyonunu çalıştırarak Yoast SEO’nun baÄŸlantılarınızı indekslemesini saÄŸlayabilirsiniz."],"Incoming links":["Gelen baÄŸlantılar"],"Edit to add link":["BaÄŸlantı eklemek için düzenleyin"],"%s incoming link":["%s gelen baÄŸlantı","%s gelen baÄŸlantı"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Åžu anda köşe taşı olarak iÅŸaretlenmiÅŸ makaleniz yok. Makalelerinizi köşe taşı olarak iÅŸaretlediÄŸinizde burada görünürler."],"Focus keyphrase":["Odak anahtar kelime"],"Article":["Makale"],"Readability score":["Okunabilirlik puanı"],"SEO score":["SEO puanı"],"Copy failed":["Kopyalama baÅŸarısız"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Bu %1$sadım adım egzersizi%2$s kullanarak tüm köşe taÅŸlarınız için sıralamaları iyileÅŸtirin!"],"Rank with articles you want to rank with":["Sıralamaya girmek istediÄŸiniz makalelerle sıralayın"],"Descriptive text":["Açıklayıcı metin"],"Show the descriptive text":["Açıklayıcı metni göster"],"Show icon":["Simgeyi göster"],"Yoast Estimated Reading Time":["Yoast tahmini okuma süresi"],"Shows an estimated reading time based on the content length.":["İçerik uzunluÄŸuna göre tahmini bir okuma süresi gösterir."],"reading time":["okuma süresi"],"content length":["içerik uzunluÄŸu"],"Estimated reading time:":["Tahmini okuma süresi"],"minute":["dakika","dakika"],"Settings":["Ayarlar"],"OK":["TAMAM"],"Close":["Kapat"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["WordPress için ilk gerçek hepsi bir arada SEO çözümü, sayfa üzerine içerik analizi, XML site haritaları ve çok daha fazlası."],"Type":["Tip"],"Team Yoast":["Yoast ekibi"],"Orphaned content":["Sahipsiz içerik"],"Synonyms":["EÅŸ Anlamlılar"],"Internal linking suggestions":["İç baÄŸlantı önerileri"],"Enter a related keyphrase to calculate the SEO score":["SEO puanını hesaplamak için ilgili bir anahtar kelime girin."],"Related keyphrase":["İlgili anahtar kelime"],"Add related keyphrase":["İlgili anahtar kelimeyi ekle"],"Analysis results":["Analiz sonuçları"],"Help on choosing the perfect keyphrase":["Mükemmel anahtar kelimeyi seçme konusunda yardım et"],"Help on keyphrase synonyms":["Anahtar kelime eÅŸ anlamlıları konusunda yardım et"],"Keyphrase":["Anahtar kelime"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Yeni URL: {{link}}%s{{/link}}"],"Undo":["Geri al."],"Redirect created":["Yönlendirme oluÅŸturuldu."],"%s just created a redirect from the old URL to the new URL.":["%s eski URL’den yeni URL’ye bir yönlendirme oluÅŸturdu."],"Old URL: {{link}}%s{{/link}}":["Eski URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Anahtar kelime eÅŸ anlamlıları"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["Bir hata oluÅŸtu: Premium SEO analizi beklendiÄŸi gibi çalışmıyor. Lütfen {{activateLink}}MyYoast'ta aboneliÄŸinizi etkinleÅŸtirin{{/activateLink}} ve ardından düzgün çalışması için {{reloadButton}}bu sayfayı yeniden yükleyin{{/reloadButton}}."],"seo":["seo"],"internal linking":["iç baÄŸlantı"],"site structure":["site yapısı"],"We could not find any relevant articles on your website that you could link to from your post.":["Web sitenizde, yazınızdan baÄŸlantı verebileceÄŸiniz alakalı bir makale bulamadık."],"Load suggestions":["Önerileri yükle"],"Refresh suggestions":["Önerileri yenile"],"Write list…":["Yazma Listesi..."],"Adds a list of links related to this page.":["Bu sayfayla ilgili bir baÄŸlantı listesi ekler."],"related posts":["İlgili Mesajlar"],"related pages":["ilgili sayfalar"],"Adds a table of contents to this page.":["Bu sayfaya içindekiler tablosu ekler."],"links":["baÄŸlantılar"],"toc":["toc"],"Copy link":["BaÄŸlantıyı kopyala"],"Copy link to suggested article: %s":["Önerilen makelenin baÄŸlanısını kopyala: %s"],"Add a title to your post for the best internal linking suggestions.":["En iyi dahili baÄŸlantı önerileri için yayınınıza bir baÅŸlık ekleyin."],"Add a metadescription to your post for the best internal linking suggestions.":["En iyi dahili baÄŸlantı önerileri için yayınınıza bir meta açıklama ekleyin."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["En iyi dahili baÄŸlantı önerileri için yayınınıza bir baÅŸlık ve meta açıklama ekleyin."],"Also, add a title to your post for the best internal linking suggestions.":["Ayrıca, en iyi dahili baÄŸlantı önerileri için yayınınıza bir baÅŸlık ekleyin."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Ayrıca, en iyi dahili baÄŸlantı önerileri için yayınınıza bir meta açıklama ekleyin."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Ayrıca, en iyi dahili baÄŸlantı önerileri için gönderinize bir baÅŸlık ve meta açıklama ekleyin."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Biraz daha kopya ekledikten sonra, burada size yayınınızda baÄŸlantı kurabileceÄŸiniz ilgili içeriÄŸin bir listesini vereceÄŸiz."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Site yapınızı iyileÅŸtirmek için, web sitenizdeki diÄŸer ilgili yayınlara veya sayfalara baÄŸlantı vermeyi düşünün."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["BaÄŸlayabileceÄŸiniz ilgili içeriÄŸin bir listesinin size gösterilmesi birkaç saniye sürer. Öneriler, elimize ulaşır ulaÅŸmaz burada gösterilecektir."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["Daha fazla bilgi edinmek için {{a}} SEO için dahili baÄŸlantı oluÅŸturma hakkındaki kılavuzumuzu okuyun {{/ a}}."],"Copied!":["Kopyalandı!"],"Not supported!":["Desteklenmiyor!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Birden çok ilgili anahtar kelime mi kullanmaya çalışıyorsunuz? Bunları ayrı ayrı eklemelisiniz."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Anahtar kelimeniz çok uzun. Azami 191 karakter olabilir."],"Add as related keyphrase":["İlgili anahtar kelime öbeÄŸi olarak ekleyin"],"Added!":["EklenmiÅŸ!"],"Remove":["Kaldır"],"Table of contents":["İçindekiler"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Size en iyi %1$s ÅŸaşırtıcı önerileri %2$s sunabilmemiz için sitenizin SEO verilerini optimize etmemiz gerekiyor.\n\n%3$s SEO Veri optimizasyonunu baÅŸlatın %4$s"],"Create a Zap in %s":["%s içinde bir Zap oluÅŸtur"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-uk.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-uk.json new file mode 100644 index 00000000..77411a7e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-uk.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"uk_UA"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":["Запит повернувÑÑ Ñ–Ð· помилкою: \"%s\""],"X share preview":["Попердній переглÑд Ñпільного доÑтупу X"],"AI X title generator":["Генератор заголовків X ШІ"],"AI X description generator":["Генератор опиÑів X ШІ"],"X preview":["Попередній переглÑд X"],"Please enter a valid focus keyphrase.":["Будь лаÑка, введіть дійÑну фокуÑну ключову фразу."],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":["Щоб ÑкориÑтатиÑÑ Ñ†Ñ–Ñ”ÑŽ функцією, ваш Ñайт повинен бути загальнодоÑтупним. Це ÑтоÑуєтьÑÑ Ñк теÑтових Ñайтів, так Ñ– випадків, коли ваш REST API захищений паролем. Будь лаÑка, переконайтеÑÑ, що ваш Ñайт Ñ” загальнодоÑтупним, Ñ– Ñпробуйте ще раз. Якщо проблема не зникне, будь лаÑка, %1$sзвернітьÑÑ Ð´Ð¾ нашої Ñлужби підтримки%2$s."],"Yoast AI cannot reach your site":["Yoast AI не може отримати доÑтуп до вашого Ñайту"],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Щоб отримати доÑтуп до цієї функції, вам потрібні активні підпиÑки %2$s та %3$s. Будь лаÑка, %5$sактивуйте Ñвої підпиÑки в %1$s%6$s або %7$sотримайте нову %4$s%8$s. ПіÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ оновіть Ñторінку, щоб Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾ працювала. Це може зайнÑти до 30 Ñекунд."],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":["Перш ніж почати кориÑтуватиÑÑ Ð³ÐµÐ½ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ заголовків ÐI, необхідно увімкнути SEO-аналіз. Щоб увімкнути його, перейдіть до %2$sфункцій Ñайту %1$s%3$s, увімкніть SEO-аналіз та натиÑніть \"Зберегти зміни\". Якщо SEO-аналіз вимкнений у вашому кориÑтувацькому профілі WordPress, увійдіть у ваш профіль та ввімкніть його там. Будь лаÑка, звернітьÑÑ Ð´Ð¾ нашого адмініÑтратора, Ñкщо у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” доÑтупу до цих налаштувань."],"Social share preview":["Попередній переглÑд Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð² Ñоцмережах"],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":["Щоб продовжувати кориÑтуватиÑÑ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ”ÑŽ ШІ Yoast, будь лаÑка, зменшіть чаÑтоту ваших запитів. Ðаша %1$sдопоміжна ÑтаттÑ%2$s міÑтить вказівки щодо ефективного Ð¿Ð»Ð°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° розподілу запитів Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— робочого процеÑу."],"You've reached the Yoast AI rate limit.":["Ви доÑÑгли ліміту швидкоÑті ШІ Yoast."],"Allow":["Дозволити"],"Deny":["Відхилити"],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":["Щоб переглÑнути це відео, вам потрібно дозволити %1$s завантажувати вбудовані відео з %2$s."],"Text generated by AI may be offensive or inaccurate.":["Згенерований ШІ текÑÑ‚ може бути образливим чи неточним."],"(Opens in a new browser tab)":["(ВідкриєтьÑÑ Ð² новій вкладці браузера)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["Пришвидшіть робочий Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° допомогою генеративного ШІ. Отримуйте виÑокоÑкіÑні пропозиції заголовків та опиÑів Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑ–Ð² та виглÑді в Ñоцмережах. %1$sДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["Генеруйте заголовки та опиÑи за допомогою ШІ Yoast!"],"New to %1$s":["Ðовачок в %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":["Я приймаю %1$sУмови Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ñлуг%2$s та %3$sПолітику конфіденційноÑті%4$s ÑервіÑу \"ШІ Yoast\". Це включає згоду на збір та викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ Ð¿Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувацького доÑвіду."],"Start generating":["Розпочніть генерацію"],"Yes, revoke consent":["Так, відкликати згоду"],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":["Відкликавши згоду, ви більше не матимете доÑтупу до функцій ШІ Yoast. Ви впевнені, що хочете відкликати згоду?"],"Something went wrong, please try again later.":["ЩоÑÑŒ пішло не так, будь лаÑка, Ñпробуйте пізніше."],"Revoke AI consent":["Відкликати згоду ШІ"],"AI title generator":["Генератор заголовків ШІ"],"AI description generator":["Генератор опиÑів ШІ"],"AI social title generator":["Генератор заголовків Ñоцмереж ШІ"],"AI social description generator":["Генератор опиÑів Ñоцмереж ШІ"],"Dismiss":["Відхилити"],"Don’t show again":["Більше не показувати"],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":["%1$sПорада%2$s: ВдоÑкональте точніÑть згенерованих ШІ заголовків, напиÑавши більше вміÑту на вашу Ñторінку."],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":["%1$sПорада%2$s: ВдоÑкональте точніÑть згенерованих ШІ опиÑів, напиÑавши більше вміÑту на вашій Ñторінці."],"Try again":["Спробуйте ще раз"],"Social preview":["Попередній переглÑд Ñоцмереж"],"Desktop result":["Результат Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿'ютера"],"Mobile result":["Мобільний результат"],"Apply %s description":[],"Apply %s title":[],"Next":["Далі"],"Previous":["Ðазад"],"Generate 5 more":["Згенерувати ще 5"],"Google preview":[" Попередній переглÑд Google"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Через Ñуворі етичні правила OpenAI та %1$sполітику викориÑтаннÑ%2$s, ми не можемо генерувати SEO-заголовки Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— Ñторінки. Якщо ви маєте намір викориÑтовувати ШІ, будь лаÑка, уникайте викориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð°Ñильницького або ÑекÑуально відвертого вміÑту. %3$sДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про те, Ñк налаштувати Ñвою Ñторінку, щоб отримати найкращі результати за допомогою штучного інтелекту%4$s."],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":["Через Ñуворі етичні правила OpenAI та %1$sполітику викориÑтаннÑ%2$s, ми не можемо генерувати метаопиÑи Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— Ñторінки. Якщо ви маєте намір викориÑтовувати ШІ, будь лаÑка, уникайте викориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð°Ñильницького або ÑекÑуально відвертого вміÑту. %3$sДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про те, Ñк налаштувати Ñвою Ñторінку, щоб отримати найкращі результати з ШІ%4$s."],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":["Ð”Ð»Ñ Ð´Ð¾Ñтупу до цієї функції необхідна активна підпиÑка %1$s. Будь лаÑка, %3$sактивуйте Ñвою підпиÑку в %2$s%4$s чи %5$sотримайте нову %1$sпідпиÑку%6$s. ПіÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ натиÑніть на кнопку Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñторінки, щоб Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ð»Ð° коректно. Це займе менше 30 Ñекунд."],"Refresh page":["Оновіть Ñторінку"],"Not enough content":["ÐедоÑтатньо вміÑту"],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":["Будь лаÑка, Ñпробуйте пізніше. Якщо проблема не зникне, %1$sзвернітьÑÑ Ð´Ð¾ нашої Ñлужби підтримки%2$s!"],"Something went wrong":["ЩоÑÑŒ пішло не так"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":["Схоже, ÑкінчивÑÑ Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·'єднаннÑ. Будь лаÑка, перевірте інтернет-з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ‚Ð° Ñпробуйте пізніше. Якщо проблема не зникне, будь лаÑка, %1$sзвернітьÑÑ Ð´Ð¾ нашої Ñлужби підтримки%2$s"],"Connection timeout":["Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ð¸Ð¹ÑˆÐ¾Ð²"],"Use AI":["ВикориÑтайте ШІ"],"Close modal":["Закрити модальне вікно"],"Learn more about AI (Opens in a new browser tab)":["ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про ШІ (ВідкриваєтьÑÑ Ð² новій вкладці)"],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":["%1$sЗаголовок%3$s: У вашої Ñторінки ще немає заголовка. %2$sДодайте його%3$s!"],"%1$sTitle%2$s: Your page has a title. Well done!":["%1$sЗаголовок%2$s: У вашої Ñторінки Ñ” заголовок. Гарна робота!"],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$sÐ Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¾Ñ— фрази%3$s: %2$sВикориÑтовуйте в текÑті вашу ключову фразу Ñ– Ñ—Ñ— Ñиноніми, щоб ми могли порахувати рівномірніÑть Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¾Ñ— фрази%3$s."],"%1$sKeyphrase distribution%2$s: Good job!":["%1$sÐ Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¾Ñ— фрази%2$s: Хороша робота!"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sÐ Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¾Ñ— фрази%3$s: Ðерівномірне. ДеÑкі чаÑтини вашого текÑту не міÑÑ‚Ñть ключової фрази або Ñ—Ñ— Ñинонімів. %2$sРозподіліть Ñ—Ñ… більш рівномірно%3$s."],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$sÐ Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¾Ñ— фрази%3$s: Дуже нерівномірне. Великі чаÑтини вашого текÑту не міÑÑ‚Ñть ключової фрази або Ñ—Ñ— Ñинонімів. %2$sРозподіліть Ñ—Ñ… більш рівномірно%3$s."],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":["%1$s: ви не викориÑтовуєте забагато Ñкладних Ñлів, що робить ваш текÑÑ‚ легким Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ. Хороша робота!"],"Word complexity":["СкладніÑть Ñлова"],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":["%1$s: %2$s Ñлів у вашому текÑті вважаютьÑÑ Ñкладними. %3$sÐамагайтеÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтовувати коротші та більш знайомі Ñлова, щоб покращити читабельніÑть%4$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":["%1$sВирівнюваннÑ%3$s: Є довгий уривок текÑту, вирівнÑний по центру. %2$sМи рекомендуємо вирівнÑти його по лівому краю%3$s.","%1$sВирівнюваннÑ%3$s: Є %4$s довгі уривки текÑту, вирівнÑні по центру. %2$sМи рекомендуємо вирівнÑти Ñ—Ñ… по лівому краю%3$s.","%1$sВирівнюваннÑ%3$s: Є %4$s довгих уривків текÑту, вирівнÑних по центру. %2$sМи рекомендуємо вирівнÑти Ñ—Ñ… по лівому краю%3$s."],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":["%1$sВирівнюваннÑ%3$s: Є довгий уривок текÑту, вирівнÑний по центру. %2$sМи рекомендуємо вирівнÑти його по правому краю%3$s.","%1$sВирівнюваннÑ%3$s: Є %4$s довгі уривки текÑту, вирівнÑні по центру. %2$sМи рекомендуємо вирівнÑти Ñ—Ñ… по правому краю%3$s.","%1$sВирівнюваннÑ%3$s: Є %4$s довгих уривків текÑту, вирівнÑних по центру. %2$sМи рекомендуємо вирівнÑти Ñ—Ñ… по правому краю%3$s."],"Select image":["Виберіть зображеннÑ"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":["Ви можете навіть не знати про це, але на вашому Ñайті можуть бути Ñторінки, Ñкі не отримують жодного поÑиланнÑ. Це проблема SEO, тому що пошуковим ÑиÑтемам важко знайти Ñторінки, на Ñкі немає поÑилань. Отже, їм важче ранжувати Ñ—Ñ…. Ми називаємо такі Ñторінки оÑиротілим контентом. У цьому тренуванні ми знайдемо оÑиротілий контент на вашому Ñайті Ñ– допоможемо вам швидко додати на нього поÑиланнÑ, щоб він отримав ÑˆÐ°Ð½Ñ Ð½Ð° ранжуваннÑ!"],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":["Ð§Ð°Ñ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ кілька поÑилань! Ðижче наведено перелік ваших оÑиротілих Ñтатей. Під кожною з них Ñ” пропозиції пов'Ñзаних Ñторінок, поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· Ñких ви можете додати.Додаючи поÑиланнÑ, перевірте, що вÑтавили його у відповідне реченнÑ, пов'Ñзане з оÑиротілою Ñтаттею. Додавайте поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ кожної оÑиротілої Ñтатті, поки не будете задоволені кількіÑтю поÑилань, що вказують на них."],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":["Ð§Ð°Ñ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ кілька поÑилань! Ðижче ви бачите ÑпиÑок з вашими наріжними каменÑми. Під кожним з них Ñ” пропозиції щодо Ñтатей, з Ñких ви можете додати поÑиланнÑ. Додаючи поÑиланнÑ, переконайтеÑÑ, що ви вÑтавили його в релевантне реченнÑ, пов'Ñзане з вашою наріжною Ñтаттею. Продовжуйте додавати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· Ñкомога більшої кількоÑті пов'Ñзаних Ñтатей, поки ваші наріжні камені не отримають Ñкомога більше внутрішніх поÑилань, що вказують на них."],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":["ДеÑкі Ñтатті на вашому Ñайті %1$sдуже%2$s важливі. Вони дають відповіді на питаннÑ, Ñкі ÑтавлÑть люди, та допомагають вирішувати проблеми. Тому вони заÑлуговують на виÑокий рейтинг! Ð’ %3$s ми називаємо такі Ñтатті наріжними. Один із ÑпоÑобів підвищити їхній рейтинг - це вказати на них доÑтатню кількіÑть поÑилань. Більша кількіÑть поÑилань Ñигналізує пошуковим ÑиÑтемам, що ці Ñтатті Ñ” важливими та цінними. У цьому тренажері ми допоможемо вам додати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ваші наріжні Ñтатті!"],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":["ПіÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾, Ñк ви додаÑте трохи більше інформації, ми зможемо Ñказати вам, наÑкільки формально оформлений ваш текÑÑ‚."],"Overall, your text appears to be %1$s%3$s%2$s.":["Загалом ваш виглÑдає, Ñк %1$s%3$s%2$s."],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":["Ð†Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ñ–Ñ Zapier буде видалена у верÑÑ–Ñ… %1$s 20.7 (дата випуÑку - 9 травнÑ). Якщо у Ð²Ð°Ñ Ñ” запитаннÑ, будь лаÑка, звернітьÑÑ Ð´Ð¾ %2$s."],"Maximum heading level":["МакÑимальний рівень заголовка"],"https://yoa.st/team-yoast-premium":["https://yoa.st/team-yoast-premium"],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":["Ви вимкнули функцію Пропозиції поÑилань, необхідну Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ Пов'Ñзаних поÑилань. Якщо ви хочете додати Пов'Ñзані поÑиланнÑ, будь лаÑка, перейдіть на Функції Ñайту та ввімкніть Пропозиції поÑилань."],"Schema":["Схема"],"Meta tags":["Мета позначка"],"Not available":["ÐедоÑтупний"],"Checks":["Перевірки"],"Focus Keyphrase":["ФокуÑні ключові фрази"],"Good":["Добре"],"No index":["Ðе індекÑувати"],"Front-end SEO inspector":["Фронт-енд SEO інÑпектор"],"Focus keyphrase not set":["ФокуÑна ключова фраза на вÑтановлена"],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":["Опублікувавши Zap на панелі інÑтрументів %s, ви можете перевірити, чи він активний Ñ– підключений до вашого Ñайту."],"Reset API key":["Скинути ключ API"],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":["Зараз ви підключені до %s за допомогою такого ключа API. Якщо ви хочете повторно підключитиÑÑ Ð·Ð° допомогою іншого ключа API, ви можете Ñкинути Ñвій ключ нижче."],"Your API key":["Ваш ключ API"],"Go to your %s dashboard":["Перейдіть до панелі інÑтрументів %s"],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":["Ви уÑпішно підключені до %1$s! Щоб керувати Zap, будь лаÑка, перейдіть до панелі інÑтрументів %2$s."],"Your %s dashboard":["Ваша панель інÑтрументів %s"],"Verify connection":["Перевірте підключеннÑ"],"Verify your connection":["Перевірте ваше підключеннÑ"],"Create a Zap":["Створіть Zap"],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":["Увійдіть у Ñвій обліковий Ð·Ð°Ð¿Ð¸Ñ %1$s та розпочніть ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñвого першого account Zap! Зверніть увагу: ви можете Ñтворити лише 1 Zap за допомогою тригера події з %2$s. Ð’ межах цього Zap ви можете вибрати одну або більше дій."],"%s API key":["Ключ API %s"],"You'll need this API key later on in %s when you're setting up your Zap.":["Цей ключ API вам знадобитьÑÑ Ð¿Ñ–Ð·Ð½Ñ–ÑˆÐµ в %s під Ñ‡Ð°Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Zap."],"Copy your API key":["Копіювати ключ API"],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":["Щоб налаштувати з’єднаннÑ, переконайтеÑÑ, що ви Ñкопіювали вказаний нижче ключ API та викориÑтали його Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð° Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Zap у вашому обліковому запиÑÑ– %s."],"Manage %s settings":["Керувати налаштуваннÑми %s"],"Connect to %s":["Підключити до %s"],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Будь лаÑка, зверніть увагу: щоб цей тренажер працював добре, вам потрібно запуÑтити інÑтрумент, оптимізації даних SEO. ÐдмініÑтратори можуть зробити це в %1$sSEO > ІнÑтрументи%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Ви додали поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° закинуті Ñтатті та очиÑтили ті, що вже не актуальні. Чудова робота! ПоглÑньте на підÑумок нижче та відзначте, чого ви доÑÑгли!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Критично доÑлідіть вміÑÑ‚ у цьому ÑпиÑку та зробіть необхідні оновленнÑ. Якщо вам потрібна допомога з оновленнÑм, у Ð½Ð°Ñ Ñ” %1$sкориÑна ÑÑ‚Ð°Ñ‚Ñ‚Ñ Ð² блозі, що допоможе вам з цим%2$s (натиÑніть, щоб відкрити в новій вкладці)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sПотрібні додаткові вказівки? Ми розглÑнули кожен крок більш детально в цьому поÑібнику: %2$sТренажер з викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°ÐºÐ¸Ð½ÑƒÑ‚Ð¾Ð³Ð¾ вміÑту %7$s %3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Ви щойно зробили так, щоб ваш найкращий вміÑÑ‚ було легше знаходити та підвищувати рейтинг! Так тримати! Ð§Ð°Ñ Ð²Ñ–Ð´ чаÑу не забувайте перевірÑти, чи ваші наріжні камені отримують доÑтатньо поÑилань!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["ПодивітьÑÑ Ð½Ð° ÑпиÑок нижче. Чи ваші наріжні камені (позначені %1$s) мають більшіÑть внутрішніх поÑилань, Ñкі вказують на них? ÐатиÑніть кнопку «Оптимізувати», Ñкщо ви вважаєте, що наріжний камінь потребує більше поÑилань. Це переведе Ñтаттю на наÑтупний крок."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Чи вÑÑ– ваші наріжні камені позначені зеленими позначками? Ð”Ð»Ñ ÐºÑ€Ð°Ñ‰Ð¾Ð³Ð¾ результату відредагуйте непозначені!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Які Ñтатті ви бажаєте бачити найвище в рейтингу? Які ваша Ð°ÑƒÐ´Ð¸Ñ‚Ð¾Ñ€Ñ–Ñ Ð²Ð²Ð°Ð¶Ð°Ñ” найбільш кориÑними та завершеними? ÐатиÑніть на Ñтрілочку, що вказує вниз, та переглÑньте Ñтатті, що відповідають цим критеріÑм. Ми автоматично позначимо вибрані вами зі ÑпиÑку Ñтатті Ñк наріжні."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sПотрібна допомога? Ми детально опиÑали кожен крок у: %2$sЯк кориÑтуватиÑÑ Ñ‚Ñ€ÐµÐ½Ð°Ð¶ÐµÑ€Ð¾Ð¼ %7$s зі ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ñ€Ñ–Ð¶Ð½Ð¾Ñ— інформації%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð¼Ñ–Ñту Yoast"],"Yoast Related Links":["Пов'Ñзані поÑÐ¸Ð»Ð°Ð½Ð½Ñ Yoast"],"Finish optimizing":["Завершити оптимізацію"],"You've finished adding links to this article.":["Ви закінчили додавати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ цієї Ñтатті."],"Optimize":["Оптимізувати"],"Added to next step":["Додано до наÑтупного кроку"],"Choose cornerstone articles...":["Вибрати наріжні Ñтатті..."],"Loading data...":["Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Ви ще не очиÑтили або не оновили Ñтатті за допомогою цього тренуваннÑ. Щойно ви це зробите - результат вашої роботи з'ÑвитьÑÑ Ñ‚ÑƒÑ‚."],"Skipped":["Пропущено"],"Hidden from search engines.":["Приховати від пошукових ÑиÑтем."],"Removed":["Видалено"],"Improved":["Покращено"],"Resolution":["РішеннÑ"],"Loading redirect options...":["Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² перенаправленнÑ..."],"Remove and redirect":["Видалити та перенаправити"],"Custom url:":["КориÑтувацький url:"],"Related article:":["Пов'Ñзані Ñтатті:"],"Home page:":["Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Ви збираєтеÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %1$s%2$s%3$s. Щоб запобігти помилкам 404 на вашому Ñайті, вам Ñлід перенаправлÑти його на іншу Ñторінку Ñвого Ñайту. Куди б ви хотіли перенаправлÑти?"],"SEO Workout: Remove article":["Ð¢Ñ€ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ SEO: видалити Ñтаттю"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["УÑе виглÑдає чудово! Ðа вашому Ñайті ми не знайшли Ñтатей Ñтарших шеÑти міÑÑців з невеликою кількіÑтю поÑилань. Виконайте перевірку пізніше, щоб отримати рекомендації з очищеннÑ!"],"Hide from search engines":["Приховати від пошукових ÑиÑтем"],"Improve":["Покращити"],"Are you sure you wish to hide this article from search engines?":["Ви впевнені, що хочете приховати цю Ñтаттю від пошукових ÑиÑтем?"],"Action":["ДіÑ"],"You've hidden this article from search engines.":["Ви приховали цю Ñтаттю від пошукових ÑиÑтем."],"You've removed this article.":["Ви видалили цю Ñтаттю."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Ðаразі ви не вибрали жодної Ñтатті Ð´Ð»Ñ Ð¿Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð½Ñ. У попередніх кроках виберіть кілька Ñтатей, щоб додати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° них, Ñ– ми покажемо вам пропозиції поÑилань тут. "],"Loading link suggestions...":["Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ð¹ поÑилань..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Ми не знайшли пропозицій Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— Ñтатті, але, безперечно, ви можете додати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñтатті, Ñкі ви вважаєте пов'Ñзаними. "],"Skip":["ПропуÑтити"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Ви не обрали жодної Ñтатті Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кроку. Ви можете зробити це в попередньому кроці."],"Is it up-to-date?":["Це актуально?"],"Last Updated":["ОÑтаннє оновленнÑ"],"You've moved this article to the next step.":["Ви перенеÑли цю Ñтаттю на наÑтупний крок."],"Unknown":["Ðевідомо"],"Clear summary":["ОчиÑтити результати"],"Add internal links towards your orphaned articles.":["Додайте внутрішні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ ваших Ñтатей-Ñиріт."],"Should you update your article?":["Чи треба вам оновлювати Ñтаттю?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Ваш Ñайт можливо міÑтить багато Ñтвореної колиÑÑŒ інформації, до Ñкої ніколи не звертаютьÑÑ. Важливо переглÑнути Ñ—Ñ— та зрозуміти, чи цей вміÑÑ‚ вÑе ще релевантний Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ Ñайту. ВдоÑконалити його чи видалити?"],"Start: Love it or leave it?":["Почати: або так, або ніÑк?"],"Clean up your unlinked content to make sure people can find it":["ОчиÑтіть незв'Ñзаний вміÑÑ‚, щоб переконатиÑÑ, що люди можуть знайти його"],"I've finished this workout":["Я завершив це тренуваннÑ"],"Reset this workout":["Скинути тренуваннÑ"],"Well done!":["Чудова робота!"],"Add internal links towards your cornerstones":["Ð’Ñтавте внутрішні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° наріжну інформацію"],"Check the number of incoming internal links of your cornerstones":["Перевірте кількіÑть вхідних внутрішніх поÑилань наріжної інформації"],"Start: Choose your cornerstones!":["Початок: оберіть Ñвій ключовий вміÑÑ‚!"],"The cornerstone approach":["ЗміÑтовний підхід"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Будь лаÑка, зауважте: Щоб цей тренажер добре працював й надавав пропозиції Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñилань, вам потрібно запуÑтити інÑтрумент Ð´Ð»Ñ SEO-оптимізації даних. ÐдмініÑтратори можуть запуÑтити його в %1$sSEO > ІнÑтрументи%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":["Зверніть увагу: Ваш адмініÑтратор відключив функцію наріжного каменю в налаштуваннÑÑ… SEO. Якщо ви хочете викориÑтовувати це тренажер, його Ñлід увімкнути."],"I've finished this step":["Я завершив цей крок "],"Revise this step":["ПереглÑньте цей крок"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Ми не змогли знайти внутрішні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ваших Ñторінках. Ðбо ви ще не додали жодного внутрішнього поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° вміÑÑ‚, або Yoast SEO не проіндекÑував Ñ—Ñ…. Щоб Yoast SEO проіндекÑував поÑиланнÑ, запуÑтіть SEO-оптимізацію даних у розділі SEO > ІнÑтрументи."],"Incoming links":["Вхідні поÑиланнÑ"],"Edit to add link":["Редагувати, щоб додати поÑиланнÑ"],"%s incoming link":["%s вхідне поÑиланнÑ","%s вхідних поÑилань","%s вхідних поÑилань"],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Ðаразі у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” Ñтатей, позначених Ñк наріжні. Коли ви позначите Ñтатті Ñк наріжні, вони з'ÑвлÑтьÑÑ Ñ‚ÑƒÑ‚."],"Focus keyphrase":["ФокуÑне ключове Ñлово"],"Article":["СтаттÑ"],"Readability score":["Оцінка читабельноÑті"],"SEO score":["Оцінка SEO"],"Copy failed":["Ðе вдалоÑÑ Ñкопіювати"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Покращте Ñ€Ð°Ð½Ð¶ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ñієї наріжної інформації за допомогою цього %1$sпокрокового тренажеру!%2$s"],"Rank with articles you want to rank with":["КлаÑифікуйте Ñтатті, за Ñкими ви хочете оцінити рейтинг"],"Descriptive text":["ОпиÑовий текÑÑ‚"],"Show the descriptive text":["Показати опиÑовий текÑÑ‚"],"Show icon":["Показати іконку"],"Yoast Estimated Reading Time":["Орієнтовний Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Yoast"],"Shows an estimated reading time based on the content length.":["Відображає орієнтовний Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° оÑнові довжини вміÑту."],"reading time":["Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"],"content length":["довжина вміÑту"],"Estimated reading time:":["Орієнтовний Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ:"],"minute":["хвилина","хвилини","хвилин"],"Settings":["ÐалаштуваннÑ"],"OK":["OK"],"Close":["Закрити"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Перше SEO-Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ð´Ð»Ñ WordPress, що Ñ” Ñправжнім вÑе-в-одному пакетом, Ñкий міÑтить вбудований аналіз вміÑту, XML-мапи Ñайту Ñ– багато іншого."],"Type":["Тип"],"Team Yoast":["Команда Yoast"],"Orphaned content":["СирітÑький вміÑÑ‚"],"Synonyms":["Синоніми"],"Internal linking suggestions":["Пропозиції щодо внутрішнього зв'Ñзку"],"Enter a related keyphrase to calculate the SEO score":["Введіть Ñхожу ключову фразу Ð´Ð»Ñ Ð¾Ð±Ñ‡Ð¸ÑÐ»ÐµÐ½Ð½Ñ Ð¾Ñ†Ñ–Ð½ÐºÐ¸ SEO"],"Related keyphrase":["Схожа ключова фраза"],"Add related keyphrase":["Додати Ñхоже ключове Ñлово"],"Analysis results":["Результати аналізу"],"Help on choosing the perfect keyphrase":["Допомога у виборі бездоганної ключової фрази"],"Help on keyphrase synonyms":["Допомога у виборі Ñинонімів ключової фрази"],"Keyphrase":["Ключова фраза"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["Ðовий URL: {{link}}%s{{/link}}"],"Undo":["СкаÑувати"],"Redirect created":["ПереÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ Ñтворено"],"%s just created a redirect from the old URL to the new URL.":["%s щойно Ñтворив переÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ñ– Ñтарого URL на новий."],"Old URL: {{link}}%s{{/link}}":["Старий URL: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Синоніми ключової фрази"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":["СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Premium SEO аналіз не працює, Ñк Ñлід. Будь лаÑка, {{activateLink}}активуйте підпиÑку в MyYoast{{/activateLink}}, а потім {{reloadButton}}перезавантажте Ñторінку{{/reloadButton}} Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ— роботи."],"seo":["seo"],"internal linking":["внутрішні поÑиланнÑ"],"site structure":["Ñтруктура Ñайту"],"We could not find any relevant articles on your website that you could link to from your post.":["Ми не змогли знайти на вашому Ñайті відповідні Ñтатті, на Ñкі ви могли б поÑлатиÑÑ Ð² Ñвоєму запиÑÑ–."],"Load suggestions":["Завантажити пропозиції"],"Refresh suggestions":["Оновити пропозиції"],"Write list…":["СклаÑти ÑпиÑок…"],"Adds a list of links related to this page.":["Додає перелік поÑилань, пов'Ñзаних з цією Ñторінкою."],"related posts":["Ñхожі запиÑи"],"related pages":["Ñхожі Ñторінки"],"Adds a table of contents to this page.":["Додає таблицю вміÑту до цієї Ñторінки."],"links":["поÑиланнÑ"],"toc":["зміÑÑ‚"],"Copy link":["Скопіювати поÑиланнÑ"],"Copy link to suggested article: %s":["Скопіюйте поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð¾ пропонованої Ñтатті: %s"],"Add a title to your post for the best internal linking suggestions.":["Додайте заголовок до запиÑу Ð´Ð»Ñ ÐºÑ€Ð°Ñ‰Ð¸Ñ… пропозицій внутрішніх поÑилань."],"Add a metadescription to your post for the best internal linking suggestions.":["Додайте Ð¼ÐµÑ‚Ð°Ð¾Ð¿Ð¸Ñ Ð´Ð¾ запиÑу Ð´Ð»Ñ ÐºÑ€Ð°Ñ‰Ð¸Ñ… пропозицій внутрішніх поÑилань."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Додайте заголовок та Ð¼ÐµÑ‚Ð°Ð¾Ð¿Ð¸Ñ Ð´Ð¾ запиÑу Ð´Ð»Ñ ÐºÑ€Ð°Ñ‰Ð¸Ñ… пропозицій внутрішніх поÑилань."],"Also, add a title to your post for the best internal linking suggestions.":["Також додайте заголовок до запиÑу Ð´Ð»Ñ ÐºÑ€Ð°Ñ‰Ð¸Ñ… пропозицій внутрішніх поÑилань."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Також додайте Ð¼ÐµÑ‚Ð°Ð¾Ð¿Ð¸Ñ Ð´Ð»Ñ ÐºÑ€Ð°Ñ‰Ð¾Ñ— пропозиції внутрішніх поÑилань."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Також додайте заголовок та Ð¼ÐµÑ‚Ð°Ð¾Ð¿Ð¸Ñ Ð´Ð»Ñ ÐºÑ€Ð°Ñ‰Ð¾Ñ— пропозиції внутрішніх поÑилань."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Щойно ви додаÑте ще трохи копій, ми надамо вам перелік пов'Ñзаного контенту, на Ñкий ви зможете поÑилатиÑÑŒ у ваших запиÑах."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Щоб покращити Ñтруктуру Ñайту, подумайте над релевантними запиÑами чи Ñторінками на вашому Ñайті."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Треба кілька Ñекунд, щоб відобразити перелік пов'Ñзаного вміÑту, на Ñкий ви зможете поÑилатиÑÑ. Пропозиції відображатимутьÑÑ Ñ‚ÑƒÑ‚ щойно ми Ñ—Ñ… отримаємо."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ, {{a}}прочитайте наш поÑібник з внутрішніх поÑилань Ð´Ð»Ñ SEO{{/a}}."],"Copied!":["Скопійовано!"],"Not supported!":["Ðе підтримуєтьÑÑ!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["ÐамагаєтеÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати кілька пов'Ñзаних ключових фраз? Додавайте Ñ—Ñ… окремо."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Ваша ключова фраза задовга. Вона не може перевищувати 191 Ñимвол."],"Add as related keyphrase":["Додати Ñк Ñхожу ключову фразу"],"Added!":["Додано!"],"Remove":["Видалити"],"Table of contents":["ЗміÑÑ‚"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Ðам потрібно оптимізувати дані SEO вашого Ñайту, щоб ми могли запропонувати вам найкращі %1$sпропозиції поÑилань%2$s. %3$sРозпочніть оптимізацію даних SEO%4$s"],"Create a Zap in %s":["Створіть Zap у %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-vi.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-vi.json new file mode 100644 index 00000000..4002ce81 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-vi.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=1; plural=0;","lang":"vi_VN"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":[],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":[],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[],"Generate titles & descriptions with Yoast AI!":[],"New to %1$s":[],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":[],"Social preview":[],"Desktop result":[],"Mobile result":[],"Apply %s description":[],"Apply %s title":[],"Next":[],"Previous":[],"Generate 5 more":[],"Google preview":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":[],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":[],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":[],"%1$sKeyphrase distribution%2$s: Good job!":[],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":[],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":[],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":[],"Meta tags":[],"Not available":[],"Checks":[],"Focus Keyphrase":[],"Good":[],"No index":[],"Front-end SEO inspector":[],"Focus keyphrase not set":[],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":[],"Reset API key":[],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[],"Your API key":[],"Go to your %s dashboard":[],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[],"Your %s dashboard":[],"Verify connection":["Xác nhận kết nối"],"Verify your connection":["Xác nhận kết nối cá»§a bạn"],"Create a Zap":[],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[],"%s API key":[],"You'll need this API key later on in %s when you're setting up your Zap.":[],"Copy your API key":[],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[],"Manage %s settings":[],"Connect to %s":[],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Xin lưu ý: Äối vá»›i bài tập này hoạt động tốt, bạn cần chạy công cụ tối ưu hóa dữ liệu SEO. Quản trị viên có thể chạy theo %1$sSEO > Tools%2$s."],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["Bạn đã thêm các liên kết đến các bài viết mồ côi cá»§a bạn và bạn đã dá»n sạch những thứ không còn phù hợp. Bạn đã làm rất tốt! Hãy xem tóm tắt dưới đây và ăn mừng những gì bạn đã hoàn thành!"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["Kiểm tra nghiêm trá»ng ná»™i dung trong danh sách này và thá»±c hiện các bản cập nhật cần thiết. Nếu bạn cần giúp cập nhật, chúng tôi có rất nhiá»u %1$sBài đăng blog hữu ích có thể hướng dẫn bạn tất cả các cách%2$s (nhấp để mở trong má»™t tab má»›i)."],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$sCần nhiá»u hướng dẫn? Chúng tôi đã bao gồm từng bước chi tiết hÆ¡n trong hướng dẫn sau:%2$s Cách sá»­ dụng bài tập vá» ná»™i dung mồ côi %7$s%3$s%4$s%5$s.%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["Bạn vừa làm cho ná»™i dung tốt nhất cá»§a mình dá»… tìm và có nhiá»u khả năng xếp hạng hÆ¡n! Tốt thôi! Thỉnh thoảng, hãy nhá»› kiểm tra xem ná»n tảng cá»§a bạn có nhận đủ liên kết hay không!"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["Hãy xem danh sách dưới đây. Làm ná»n tảng cá»§a bạn (được đánh dấu bằng%1$s) có nhiá»u liên kết ná»™i bá»™ nhất hướng vá» chúng không? Nhấp vào nút Tối ưu hóa nếu bạn nghÄ© rằng má»™t ná»n tảng cần nhiá»u liên kết hÆ¡n. Äiá»u đó sẽ chuyển bài viết sang bước tiếp theo."],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["Làm tất cả các góc cá»§a bạn có đạn xanh? Äể có kết quả tốt nhất, hãy xem xét chỉnh sá»­a những ngưá»i không!"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["Những bài viết nào bạn muốn xếp hạng cao nhất? Những ngưá»i khán giả cá»§a bạn sẽ tìm thấy sá»± hữu ích và đầy đủ nhất? Nhấp vào mÅ©i tên hướng xuống và tìm các bài viết phù hợp vá»›i các tiêu chí đó. Chúng tôi sẽ tá»± động đánh dấu các bài viết bạn chá»n từ danh sách dưới dạng ná»n tảng."],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$sCần thêm hướng dẫn? Chúng tôi đã trình bày chi tiết hÆ¡n từng bước trong:%2$s. Cách sá»­ dụng bài tập ná»n tảng%7$s%3$s%4$s%5$s.%6$s"],"Yoast Table of Contents":["Mục lục cá»§a Yoast"],"Yoast Related Links":["Liên kết liên quan đến Yoast."],"Finish optimizing":["Hoàn tất tối ưu hóa"],"You've finished adding links to this article.":["Bạn đã hoàn tất việc thêm liên kết vào bài viết này."],"Optimize":["Tối ưu hóa"],"Added to next step":["Äã thêm vào bước tiếp theo"],"Choose cornerstone articles...":["Chá»n các bài viết quan trá»ng..."],"Loading data...":["Äang tải dữ liệu..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["Bạn chưa dá»n dẹp hoặc cập nhật bất kỳ bài viết nào bằng cách sá»­ dụng bài tập này. Sau khi bạn thá»±c hiện, bản tóm tắt công việc cá»§a bạn sẽ hiển thị ở đây."],"Skipped":["Äã bá» qua"],"Hidden from search engines.":["Ẩn khá»i công cụ tìm kiếm."],"Removed":["Äã xóa"],"Improved":["Äã cải thiện"],"Resolution":["Äiá»u quyết định"],"Loading redirect options...":[],"Remove and redirect":["Xóa và chuyển hướng"],"Custom url:":["Url tùy chỉnh:"],"Related article:":["Bài viết liên quan:"],"Home page:":["Trang chá»§:"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["Bạn sắp xóa %1$s%2$s%3$s. Äể ngăn chặn các lá»—i 404 trên trang web cá»§a bạn, bạn nên chuyển hướng nó đến má»™t trang khác trên trang web cá»§a mình. Bạn muốn chuyển hướng nó đến đâu?"],"SEO Workout: Remove article":["Tập luyện SEO: Xóa bài viết"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["Má»i thứ Ä‘á»u tốt! Chúng tôi không tìm thấy bất kỳ bài viết nào trên trang web cá»§a bạn cÅ© hÆ¡n sáu tháng và nhận được quá ít liên kết trên trang web cá»§a bạn. Kiểm tra lại tại đây sau để biết các đỠxuất dá»n dẹp má»›i!"],"Hide from search engines":["Ẩn khá»i công cụ tìm kiếm"],"Improve":["Cải thiện"],"Are you sure you wish to hide this article from search engines?":["Bạn có chắc chắn muốn ẩn bài viết này khá»i các công cụ tìm kiếm không?"],"Action":["Hành động "],"You've hidden this article from search engines.":["Bạn đã ẩn bài viết này khá»i các công cụ tìm kiếm."],"You've removed this article.":["Bạn đã xóa bài viết này."],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["Bạn hiện chưa chá»n bất kỳ bài viết nào để cải thiện. Chá»n má»™t vài bài viết trong các bước trước để thêm liên kết vào và chúng tôi sẽ hiển thị cho bạn các đỠxuất liên kết tại đây."],"Loading link suggestions...":["Äang tải các đỠxuất liên kết ..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["Chúng tôi không tìm thấy bất kỳ đỠxuất nào cho bài viết này, nhưng tất nhiên bạn vẫn có thể thêm liên kết đến các bài viết mà bạn cho là có liên quan."],"Skip":["Bá» qua"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["Bạn chưa chá»n bất kỳ bài viết nào cho bước này. Bạn có thể làm như vậy ở bước trước."],"Is it up-to-date?":["Nó là má»›i nhất phải không?"],"Last Updated":["Cập nhật má»›i nhất"],"You've moved this article to the next step.":["Bạn đã chuyển bài viết này sang bước tiếp theo."],"Unknown":["Không xác định"],"Clear summary":["Tóm tắt rõ ràng"],"Add internal links towards your orphaned articles.":["Thêm liên kết ná»™i bá»™ đến các \"bài viết mồ côi\" cá»§a bạn."],"Should you update your article?":["Có phải bạn nên cập nhật bài viết cá»§a mình?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["Trang web cá»§a bạn thưá»ng chứa nhiá»u ná»™i dung được tạo má»™t lần và không bao giá» nhìn lại sau đó. Äiá»u quan trá»ng là phải xem qua những Ä‘iá»u này và tá»± há»i bản thân xem ná»™i dung này có còn liên quan đến trang web cá»§a bạn hay không. Tôi nên cải thiện hay loại bá» nó?"],"Start: Love it or leave it?":["Bắt đầu: Yêu thích nó hay rá»i bá» nó?"],"Clean up your unlinked content to make sure people can find it":["Dá»n dẹp ná»™i dung không được liên kết cá»§a bạn để đảm bảo má»i ngưá»i có thể tìm thấy nó"],"I've finished this workout":["Tôi đã hoàn thành bài tập này"],"Reset this workout":["Äặt lại bài tập này"],"Well done!":["Tốt lắm!"],"Add internal links towards your cornerstones":["Thêm liên kết ná»™i bá»™ vào ná»n tảng cá»§a bạn"],"Check the number of incoming internal links of your cornerstones":["Kiểm tra số lượng các Liên Kết Ná»™i Bá»™ Äến trên các bài viết quan trá»ng (cornerstones) cá»§a bạn."],"Start: Choose your cornerstones!":["Bắt đầu: Chá»n ná»™i dung quan trá»ng cá»§a bạn!"],"The cornerstone approach":["Phương pháp tiếp cận ná»n tảng"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["Xin lưu ý: Äể bài tập này hoạt động tốt và cung cấp cho bạn các đỠxuất liên kết, bạn cần chạy công cụ tối ưu hóa dữ liệu SEO. Quản trị viên có thể chạy Ä‘iá»u này trong %1$sSEO > Tools%2$s."],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":["Tôi đã hoàn thành bước này"],"Revise this step":["Sá»­a lại bước này"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["Chúng tôi không thể tìm thấy các liên kết ná»™i bá»™ trên các trang cá»§a bạn. Hoặc bạn chưa thêm bất kỳ liên kết ná»™i bá»™ nào vào ná»™i dung cá»§a bạn hoặc Yoast SEO đã không lập chỉ mục chúng. Bạn có thể có chỉ mục Yoast SEO liên kết cá»§a mình bằng cách chạy tối ưu hóa dữ liệu SEO theo SEO> Công cụ."],"Incoming links":["Liên kết đến."],"Edit to add link":["Chỉnh sá»­a để thêm liên kết"],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["Bạn hiện không có bài báo nào được đánh dấu là ná»n tảng. Khi bạn đánh dấu bài viết cá»§a mình là ná»n tảng, chúng sẽ hiển thị ở đây."],"Focus keyphrase":["Bàn phím tập trung"],"Article":["Bài viết"],"Readability score":["Äiểm Ä‘á»c"],"SEO score":["Äiểm SEO"],"Copy failed":["Sao chép thất bại"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["Cải thiện thứ hạng cho tất cả các ná»n tảng cá»§a bạn bằng cách sá»­ dụng bài tập %1$s từng bước này!%2$s"],"Rank with articles you want to rank with":["Xếp hạng vá»›i các bài viết bạn muốn xếp hạng vá»›i"],"Descriptive text":["Äoạn văn mô tả"],"Show the descriptive text":["Hiển thị Ä‘oạn văn mô tả"],"Show icon":["Hiển thị icon"],"Yoast Estimated Reading Time":["Thá»i gian Ä‘á»c do Yoast ước tính"],"Shows an estimated reading time based on the content length.":["Hiển thị thá»i gian Ä‘á»c ước lượng dá»±a trên độ dài ná»™i dung."],"reading time":["thá»i gian Ä‘á»c"],"content length":["độ dài ná»™i dung"],"Estimated reading time:":["Thá»i gian Ä‘á»c ướng tính:"],"minute":["phút"],"Settings":["Thiết đặt"],"OK":["OK"],"Close":["Äóng"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["Giải pháp SEO tất cả trong má»™t chính xác đầu tiên cho Wordpress, bao gồm phân tích ná»™i dung trên trang, bản đồ site XML và nhiá»u hÆ¡n nữa."],"Type":["Loại"],"Team Yoast":["Äá»™i ngÅ© Yoast"],"Orphaned content":["Ná»™i dung đơn lẻ"],"Synonyms":["Từ đồng nghÄ©a"],"Internal linking suggestions":["Äá» xuất liên kết ná»™i bá»™"],"Enter a related keyphrase to calculate the SEO score":["Nhập cụm từ khóa có liên quan để tính Ä‘iểm SEO"],"Related keyphrase":["Cụm từ khóa có liên quan"],"Add related keyphrase":["Thêm cụm từ khóa liên quan"],"Analysis results":["Kết quả phân tích"],"Help on choosing the perfect keyphrase":["Trợ giúp vá» cách chá»n cụm từ khóa hoàn hảo"],"Help on keyphrase synonyms":["Trợ giúp cụm từ khóa đồng nghÄ©a"],"Keyphrase":["Cụm từ khóa"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO Premium"],"New URL: {{link}}%s{{/link}}":["ÄÆ°á»ng dẫn má»›i: {{link}}%s{{/link}}"],"Undo":["khôi phục"],"Redirect created":["ÄÆ°á»ng dẫn đã được tạo"],"%s just created a redirect from the old URL to the new URL.":["%s vừa tạo ra má»™t chuyển hướng từ URL cÅ© đến URL má»›i"],"Old URL: {{link}}%s{{/link}}":["ÄÆ°á»ng dẫn cÅ©: {{link}}%s{{/link}}"],"Keyphrase synonyms":["Từ khóa tương đương"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["seo"],"internal linking":["liên kết ná»™i bá»™"],"site structure":["cấu trúc trang"],"We could not find any relevant articles on your website that you could link to from your post.":["Chúng tôi không thể tìm thấy bất cứ chuyên mục thích hợp nào trên website để bạn có thể liên kết từ bài viết cá»§a bạn."],"Load suggestions":["Tải gợi ý"],"Refresh suggestions":["Làm má»›i các gợi ý"],"Write list…":["Viết danh sách..."],"Adds a list of links related to this page.":["Thêm danh sách những liên kết liên quan đến trang này."],"related posts":["bài viết liên quan"],"related pages":["trang liên quan"],"Adds a table of contents to this page.":["Thêm mục lục vào trang này"],"links":["liên kết"],"toc":["toc"],"Copy link":["Copy link"],"Copy link to suggested article: %s":["Copy link tá»›i chuyên mục được đỠxuất: %s"],"Add a title to your post for the best internal linking suggestions.":["Thêm má»™t tiêu đỠcho bài viết dành cho đỠxuất liên kết liên quan tốt nhất."],"Add a metadescription to your post for the best internal linking suggestions.":["Thêm má»™t mô tả meta cho bài viết cá»§a bạn dành cho đỠxuất liên kết liên quan tốt nhất."],"Add a title and a metadescription to your post for the best internal linking suggestions.":["Thêm má»™t tiêu đỠvà mô tả meta cho bài viết cá»§a bạn dành cho đỠxuất liên kết liên quan tốt nhất."],"Also, add a title to your post for the best internal linking suggestions.":["Äồng thá»i, thêm tiêu đỠvào bài viết cá»§a bạn để có các gợi ý liên kết ná»™i bá»™ tốt nhất."],"Also, add a metadescription to your post for the best internal linking suggestions.":["Äồng thá»i, thêm má»™t mô tả meta vào bài viết cá»§a bạn dành cho các gợi ý liên kết ná»™i bá»™ tốt nhất."],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["Äồng thá»i, thêm má»™t tiêu đỠvà mô tả meta vào bài viết cá»§a bạn dành cho các gợi ý liên kết ná»™i bá»™ tốt nhất."],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["Má»™t khi bạn thêm má»™t lượng copy, chúng tôi sẽ dành cho bạn má»™t danh sách ná»™i dung liên quan tại đây để bạn có thể liên kết vào bài viết."],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["Äể cải thiện cấu trúc website, cân nhắc liên kết đến các bài viết hoặc trang liên quan khác trên website cá»§a bạn."],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["Mất vài giây để hiển thị cho bạn má»™t danh sách ná»™i dung liên quan đến những gì bạn có thể liên kết. Những đỠxuất sẽ được hiển thị tại đây ngay khi chúng tôi có."],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{a}}Äá»c hướng dẫn vá» liên kết ná»™i bá»™ dành cho SEO{{/a}} để tìm hiểu thêm."],"Copied!":["Äã copy!"],"Not supported!":["Không được há»— trợ!"],"Are you trying to use multiple related keyphrases? You should add them separately.":["Có phải bạn Ä‘ang cố sá»­ dụng nhiá»u cụm từ khóa liên quan? Bạn nên thêm chúng riêng biệt."],"Your keyphrase is too long. It can be a maximum of 191 characters.":["Cụm từ khóa cá»§a bạn quá dài. Chỉ nên giá»›i hạn tối Ä‘a 191 ký tá»±."],"Add as related keyphrase":["Thêm như cụm từ liên quan"],"Added!":["Äã thêm!"],"Remove":["Gỡ bá»"],"Table of contents":["Bảng ná»™i dung"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["Chúng tôi cần tối ưu hóa dữ liệu SEO cá»§a trang web cá»§a bạn để có thể cung cấp cho bạn các %1$s đỠxuất liên kết %2$s tốt nhất. %3$s Bắt đầu tối ưu hóa dữ liệu SEO %4$s"],"Create a Zap in %s":["Tạo má»™t Zap trong %s"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-zh_CN.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-zh_CN.json new file mode 100644 index 00000000..5778af2f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs-zh_CN.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium","plural-forms":"nplurals=1; plural=0;","lang":"zh_CN"},"block keyword\u0004children":[],"block keyword\u0004childpages":[],"block keyword\u0004subpages":[],"block description\u0004Adds a list of internal links to subpages of this page.":[],"block title\u0004Yoast Subpages":[],"block keyword\u0004site structure":[],"block keyword\u0004internal linking":[],"block keyword\u0004siblings pages":[],"block keyword\u0004siblings":[],"block keyword\u0004SEO":[],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[],"block title\u0004Yoast Siblings":[],"Generated %s descriptions":[],"Generated %s titles":[],"Meta description length":[],"SEO title width":[],"The request came back with the following error: \"%s\"":[],"X share preview":[],"AI X title generator":[],"AI X description generator":[],"X preview":[],"Please enter a valid focus keyphrase.":[],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[],"Yoast AI cannot reach your site":[],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[],"Social share preview":[],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[],"You've reached the Yoast AI rate limit.":[],"Allow":["å…许"],"Deny":[],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[],"Text generated by AI may be offensive or inaccurate.":[],"(Opens in a new browser tab)":["(在新的æµè§ˆå™¨é€‰é¡¹å¡ä¸­æ‰“开)"],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":["利用生æˆå¼äººå·¥æ™ºèƒ½åŠ å¿«å·¥ä½œæµç¨‹ã€‚为您的æœç´¢å’Œç¤¾äº¤å¤–观获å–高质é‡çš„æ ‡é¢˜å’Œæè¿°å»ºè®®ã€‚%1$s了解更多%2$s%3$s"],"Generate titles & descriptions with Yoast AI!":["使用 Yoast AI ç”Ÿæˆæ ‡é¢˜å’Œæè¿°ï¼"],"New to %1$s":["新加入 %1$s"],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[],"Start generating":[],"Yes, revoke consent":[],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[],"Something went wrong, please try again later.":[],"Revoke AI consent":[],"AI title generator":[],"AI description generator":[],"AI social title generator":[],"AI social description generator":[],"Dismiss":[],"Don’t show again":[],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[],"Try again":["é‡è¯•"],"Social preview":[],"Desktop result":["桌é¢ç»“æžœ"],"Mobile result":["移动结果"],"Apply %s description":[],"Apply %s title":[],"Next":["下页"],"Previous":["上页"],"Generate 5 more":[],"Google preview":["谷歌预览"],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[],"Refresh page":[],"Not enough content":[],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[],"Something went wrong":["出了些问题"],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[],"Connection timeout":[],"Use AI":["使用人工智能"],"Close modal":[],"Learn more about AI (Opens in a new browser tab)":[],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[],"%1$sTitle%2$s: Your page has a title. Well done!":[],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":["%1$s关关键è¯çŸ­è¯­åˆ†å‘%3$s:%2$såœ¨æ–‡æœ¬ä¸­åŒ…å«æ‚¨çš„关关键è¯çŸ­è¯­æˆ–å…¶åŒä¹‰è¯ï¼Œä»¥ä¾¿æˆ‘们检查关关键è¯çŸ­è¯­åˆ†å‘%3$s。"],"%1$sKeyphrase distribution%2$s: Good job!":["%1$s关关键è¯çŸ­è¯­åˆ†å‘%2$s:很好ï¼"],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$s关关键è¯çŸ­è¯­åˆ†å¸ƒ%3$s:éžå¸¸ä¸å‡åŒ€ã€‚文本的大部分ä¸åŒ…å«å…³å…³é”®è¯æˆ–å…¶åŒä¹‰è¯ã€‚%2$sæ›´å‡åŒ€åœ°åˆ†é…它们%3$s。"],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":["%1$s关关键è¯çŸ­è¯­åˆ†å¸ƒ%3$s:éžå¸¸ä¸å‡åŒ€ã€‚文本的大部分ä¸åŒ…å«å…³å…³é”®è¯æˆ–å…¶åŒä¹‰è¯ã€‚%2$sæ›´å‡åŒ€åœ°åˆ†é…它们%3$s。"],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[],"Word complexity":[],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[],"Select image":["选择图åƒ"],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[],"Overall, your text appears to be %1$s%3$s%2$s.":[],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[],"Maximum heading level":[],"https://yoa.st/team-yoast-premium":[],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[],"Schema":[],"Meta tags":[],"Not available":["ä¸å¯ç”¨"],"Checks":[],"Focus Keyphrase":[],"Good":["优良"],"No index":["无索引"],"Front-end SEO inspector":[],"Focus keyphrase not set":[],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":[],"Reset API key":[],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[],"Your API key":[],"Go to your %s dashboard":[],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[],"Your %s dashboard":[],"Verify connection":[],"Verify your connection":[],"Create a Zap":[],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[],"%s API key":[],"You'll need this API key later on in %s when you're setting up your Zap.":[],"Copy your API key":[],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[],"Manage %s settings":[],"Connect to %s":[],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["请注æ„:è¦ä½¿æ­¤é”»ç‚¼æ­£å¸¸å·¥ä½œï¼Œæ‚¨éœ€è¦è¿è¡ŒSEOæ•°æ®ä¼˜åŒ–工具。管ç†å‘˜å¯ä»¥åœ¨%1$sSEO >工具%2$s下è¿è¡Œæ­¤ç¨‹åºã€‚"],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":["æ‚¨å·²ç»æ·»åŠ äº†æŒ‡å‘å­¤ç«‹æ–‡ç« çš„é“¾æŽ¥ï¼Œå¹¶ä¸”å·²ç»æ¸…ç†äº†ä¸å†ç›¸å…³çš„æ–‡ç« ã€‚干得好ï¼çœ‹çœ‹ä¸‹é¢çš„æ‘˜è¦ï¼Œåº†ç¥ä½ å–å¾—çš„æˆå°±ï¼"],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":["严格检查此列表中的内容并进行必è¦çš„æ›´æ–°ã€‚å¦‚æžœæ‚¨éœ€è¦æ›´æ–°å¸®åŠ©ï¼Œæˆ‘ä»¬æœ‰ä¸€ä¸ªéžå¸¸%1$s有用的åšå®¢æ–‡ç« ï¼Œå¯ä»¥æŒ‡å¯¼æ‚¨ä¸€è·¯èµ°æ¥%2$s(å•击以在新选项å¡ä¸­æ‰“开)。"],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":["%1$séœ€è¦æ›´å¤šæŒ‡å¯¼ï¼Ÿæˆ‘们在以下指å—中更详细地介ç»äº†æ¯ä¸ªæ­¥éª¤ï¼š%2$s如何使用%7$s孤立内容锻炼%3$s%4$s%5$s。%6$s"],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":["æ‚¨åªæ˜¯ä½¿æœ€å¥½çš„内容易于查找,并且更有å¯èƒ½æŽ’åï¼å¥½ï¼ä¸æ—¶åœ°ï¼Œè®°å¾—æ£€æŸ¥ä½ çš„åŸºçŸ³æ˜¯å¦æœ‰è¶³å¤Ÿçš„链接ï¼"],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":["看看下é¢çš„列表。你的基石(标有%1$s)是å¦å…·æœ‰æŒ‡å‘å®ƒä»¬çš„å¤§å¤šæ•°å†…éƒ¨é“¾æŽ¥ï¼Ÿå¦‚æžœæ‚¨è®¤ä¸ºåŸºçŸ³éœ€è¦æ›´å¤šé“¾æŽ¥ï¼Œè¯·å•击\"优化\"按钮。这将把文章移到下一步。"],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":["你所有的基石都有绿色的å­å¼¹å—?为了获得最佳效果,请考虑编辑那些没有效果的ï¼"],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":["æ‚¨å¸Œæœ›å“ªäº›æ–‡ç« çš„æŽ’åæœ€é«˜ï¼Ÿæ‚¨çš„å—众会å‘现哪些最有用和最完整?å•击å‘ä¸‹ç®­å¤´ï¼Œç„¶åŽæŸ¥æ‰¾ç¬¦åˆè¿™äº›æ¡ä»¶çš„æ–‡ç« ã€‚我们会自动将您从列表中选择的文章标记为基石。"],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":["%1$séœ€è¦æ›´å¤šæŒ‡å¯¼ï¼Ÿæˆ‘ä»¬åœ¨ä»¥ä¸‹æ–¹é¢æ›´è¯¦ç»†åœ°ä»‹ç»äº†æ¯ä¸ªæ­¥éª¤ï¼š%2$s如何使用%7$s基石锻炼%3$s%4$s%5$s。%6$s"],"Yoast Table of Contents":["Yoast 目录"],"Yoast Related Links":["Yoast相关链接"],"Finish optimizing":["完æˆä¼˜åŒ–"],"You've finished adding links to this article.":["您已完æˆå‘本文添加链接。"],"Optimize":["优化"],"Added to next step":["已添加到下一步"],"Choose cornerstone articles...":["选择基石文章..."],"Loading data...":["æ­£åœ¨èŽ·å–æ•°æ®..."],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":["æ‚¨å°šæœªä½¿ç”¨æ­¤é”»ç‚¼æ¸…ç†æˆ–更新任何文章。完æˆåŽï¼Œæ‚¨çš„工作摘è¦å°†æ˜¾ç¤ºåœ¨æ­¤å¤„。"],"Skipped":["跳过"],"Hidden from search engines.":["对æœç´¢å¼•擎éšè—。"],"Removed":["已移除"],"Improved":["改善"],"Resolution":["分辨率"],"Loading redirect options...":["正在加载é‡å®šå‘选项..."],"Remove and redirect":["删除和é‡å®šå‘"],"Custom url:":["自定义URL"],"Related article:":["相关文章:"],"Home page:":["主页"],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":["您将è¦åˆ é™¤%1$s%2$s%3$s。è¦é˜²æ­¢æ‚¨ç½‘站上出现 404,您应将其é‡å®šå‘到您网站上的其他网页。您想将其é‡å®šå‘到哪里?"],"SEO Workout: Remove article":["SEO 锻炼:删除文章"],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":["一切看起æ¥éƒ½å¾ˆå¥½ï¼æˆ‘们在您的网站上没有å‘现任何超过六个月且在您的网站上收到的链接太少的文章。ç¨åŽå†è¿”回此处查看新的清ç†å»ºè®®ï¼"],"Hide from search engines":["从æœç´¢å¼•擎中éšè—"],"Improve":["改善"],"Are you sure you wish to hide this article from search engines?":["您确定è¦å¯¹æœç´¢å¼•擎éšè—此文章å—?"],"Action":["å¯åЍ"],"You've hidden this article from search engines.":["您已从æœç´¢å¼•擎中éšè—了这篇文章。"],"You've removed this article.":["您已删除此文章。"],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":["您当å‰å°šæœªé€‰æ‹©è¦æ”¹è¿›çš„任何文章。在å‰é¢çš„æ­¥éª¤ä¸­é€‰æ‹©ä¸€äº›æ–‡ç« ä»¥æ·»åŠ é“¾æŽ¥ï¼Œæˆ‘ä»¬å°†åœ¨æ­¤å¤„å‘æ‚¨å±•示链接建议。"],"Loading link suggestions...":["正在加载链接建议..."],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":["我们没有找到有关本文的任何建议,但当然您ä»ç„¶å¯ä»¥æ·»åŠ æŒ‡å‘æ‚¨è®¤ä¸ºç›¸å…³çš„æ–‡ç« çš„链接。"],"Skip":["跳过"],"You haven't selected any articles for this step yet. You can do so in the previous step.":["您尚未为此步骤选择任何文章。您å¯ä»¥åœ¨ä¸Šä¸€æ­¥ä¸­æ‰§è¡Œæ­¤æ“作。"],"Is it up-to-date?":["它是最新的å—?"],"Last Updated":["上次更新"],"You've moved this article to the next step.":["您已将本文移至下一步。"],"Unknown":["未知"],"Clear summary":["清晰的摘è¦"],"Add internal links towards your orphaned articles.":["添加指å‘孤立文章的内部链接。"],"Should you update your article?":["你应该更新你的文章å—?"],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":["您的网站å¯èƒ½åŒ…å«è®¸å¤šæ‚¨æ›¾ç»åˆ›å»ºè¿‡çš„内容,并且从那以åŽå†ä¹Ÿæ²¡æœ‰å›žå¤´çœ‹è¿‡ã€‚请务必æµè§ˆè¿™äº›é¡µé¢å¹¶è¯¢é—®è‡ªå·±è¯¥å†…容是å¦ä»ä¸Žæ‚¨çš„网站相关。你应该改进它还是删除它?"],"Start: Love it or leave it?":["开始:爱它还是离开它?"],"Clean up your unlinked content to make sure people can find it":["æ¸…ç†æœªå…³è”的内容,确ä¿ç”¨æˆ·èƒ½å¤Ÿæ‰¾åˆ°å®ƒ"],"I've finished this workout":["æˆ‘å·²å®Œæˆæ­¤é”»ç‚¼"],"Reset this workout":["é‡ç½®æ­¤ä½“能训练"],"Well done!":["åšå¾—好ï¼"],"Add internal links towards your cornerstones":["添加指å‘基石的内部链接"],"Check the number of incoming internal links of your cornerstones":["检查基石的传入内部链接的数é‡"],"Start: Choose your cornerstones!":["开始:选择你的基石ï¼"],"The cornerstone approach":["基石方法"],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":["请注æ„:为了使此锻炼正常工作并为您æä¾›é“¾æŽ¥å»ºè®®ï¼Œæ‚¨éœ€è¦è¿è¡ŒSEOæ•°æ®ä¼˜åŒ–工具。管ç†å‘˜å¯ä»¥åœ¨%1$sSEO >工具%2$s下è¿è¡Œæ­¤ç¨‹åºã€‚"],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[],"I've finished this step":["æˆ‘å·²å®Œæˆæ­¤æ­¥éª¤"],"Revise this step":["修改此步骤"],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":["我们无法在您的网页上找到内部链接。è¦ä¹ˆæ‚¨å°šæœªå‘内容添加任何内部链接,è¦ä¹ˆYoast SEO尚未将它们编入索引。您å¯ä»¥é€šè¿‡åœ¨SEO>工具下è¿è¡ŒSEOæ•°æ®ä¼˜åŒ–æ¥è®©Yoast SEO索引您的链接。"],"Incoming links":["传入链接"],"Edit to add link":["编辑以添加链接"],"%s incoming link":[],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":["æ‚¨å½“å‰æ²¡æœ‰æ ‡è®°ä¸ºåŸºçŸ³çš„æ–‡ç« ã€‚当您将文章标记为基石时,它们将显示在此处。"],"Focus keyphrase":["焦点关键è¯"],"Article":["文章"],"Readability score":["å¯è¯»æ€§åˆ†æ•°"],"SEO score":["SEO分数"],"Copy failed":["å¤åˆ¶å¤±è´¥"],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":["通过使用这个%1$s逿­¥é”»ç‚¼æ¥æé«˜æ‰€æœ‰åŸºçŸ³çš„æŽ’åï¼%2$s"],"Rank with articles you want to rank with":["ä¸Žæ‚¨æƒ³è¦æŽ’å的文章排å"],"Descriptive text":["æè¿°æ€§æ–‡æœ¬"],"Show the descriptive text":["显示æè¿°æ€§æ–‡æœ¬"],"Show icon":["显示图标"],"Yoast Estimated Reading Time":["Yoast 估计阅读时间"],"Shows an estimated reading time based on the content length.":["显示基于内容长度的估计阅读时间。"],"reading time":["阅读时间"],"content length":["内容长度"],"Estimated reading time:":["预计阅读时间:"],"minute":["分钟"],"Settings":["设置"],"OK":["好"],"Close":["关闭"],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":["第一个真正æ„义上的 WordPress 全能SEO解决方案ï¼åŒ…å«äº†é¡µé¢å†…容分æžã€XML站点地图和更多功能。"],"Type":["类型"],"Team Yoast":["Yoast团队"],"Orphaned content":["孤立内容"],"Synonyms":["åŒä¹‰è¯"],"Internal linking suggestions":["内部链接建议"],"Enter a related keyphrase to calculate the SEO score":["输入相关关键短语以计算SEO分数"],"Related keyphrase":["添加相关短语"],"Add related keyphrase":["添加相关短语"],"Analysis results":["分æžç»“æžœ"],"Help on choosing the perfect keyphrase":["帮助选择完美的关键短语"],"Help on keyphrase synonyms":["关键字段åŒä¹‰è¯å¸®åŠ©"],"Keyphrase":["关键è¯"],"https://yoa.st/2jc":["https://yoa.st/2jc"],"Yoast SEO Premium":["Yoast SEO 高级版"],"New URL: {{link}}%s{{/link}}":["新链接:{{link}}%s{{/link}}"],"Undo":["撤销"],"Redirect created":["é‡å®šå‘已生æˆ"],"%s just created a redirect from the old URL to the new URL.":["%s 生æˆä¸€ä¸ªä»Žæ—§é“¾æŽ¥æŒ‡å‘新链接的é‡å®šå‘"],"Old URL: {{link}}%s{{/link}}":["旧链接:{{link}}%s{{/link}}"],"Keyphrase synonyms":["关键è¯åŠåŒä¹‰è¯"],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[],"seo":["seo"],"internal linking":["内链"],"site structure":["网站结构"],"We could not find any relevant articles on your website that you could link to from your post.":["我们无法在您的网站上找到å¯ä»¥ä»Žæ‚¨çš„æ–‡ç« é“¾æŽ¥åˆ°çš„任何相关文章。"],"Load suggestions":["加载建议"],"Refresh suggestions":["刷新建议"],"Write list…":["写入列表……"],"Adds a list of links related to this page.":["添加此页é¢çš„æœ‰å…³é“¾æŽ¥åˆ—表"],"related posts":["相关文章"],"related pages":["相关页é¢"],"Adds a table of contents to this page.":["添加内容到此页é¢"],"links":["链接"],"toc":["当有许多文章ã€é¡µé¢ã€å®šåˆ¶åŒ–文章类型或分类时,导出数æ®ä¼šèŠ±è´¹å¾ˆé•¿æ—¶é—´"],"Copy link":["å¤åˆ¶é“¾æŽ¥"],"Copy link to suggested article: %s":["将链接å¤åˆ¶åˆ°å»ºè®®æ–‡ç« ï¼š%s"],"Add a title to your post for the best internal linking suggestions.":["添加个标题到你的文章以获得最好的内链建议"],"Add a metadescription to your post for the best internal linking suggestions.":["添加一个æè¿°æ ‡ç­¾åˆ°ä½ çš„æ–‡ç« ä»¥èŽ·å¾—æœ€å¥½çš„å†…é“¾å»ºè®®"],"Add a title and a metadescription to your post for the best internal linking suggestions.":["给你的文章添加一个标题和标签æè¿°ä»¥èŽ·å¾—æœ€å¥½çš„å†…é“¾å»ºè®®"],"Also, add a title to your post for the best internal linking suggestions.":["åŒæ ·çš„,为你的文章添加一个标题以获得得最好的内链建议。"],"Also, add a metadescription to your post for the best internal linking suggestions.":["åŒæ ·çš„,给你的文章添加一个标签æè¿°ä»¥èŽ·å¾—æœ€å¥½çš„å†…é“¾å»ºè®®ã€‚"],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":["åŒæ ·çš„,给你的文章添加一个标题和标签æè¿°ä»¥èŽ·å¾—æœ€å¥½çš„å†…é“¾å»ºè®®ã€‚"],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":["一旦你å†å¢žåŠ ä¸€ç‚¹å‰¯æœ¬ï¼Œæˆ‘ä»¬ä¼šç»™ä½ ä¸€ä»½ç›¸å…³å†…å®¹çš„åˆ—è¡¨ï¼Œä½ å¯ä»¥åœ¨è¿™é‡Œé“¾æŽ¥åˆ°ä½ çš„帖å­ã€‚"],"To improve your site structure, consider linking to other relevant posts or pages on your website.":["è¦æ”¹å–„æ‚¨çš„ç½‘ç«™ç»“æž„ï¼Œè¯·è€ƒè™‘é“¾æŽ¥åˆ°æ‚¨ç½‘ç«™ä¸Šçš„å…¶ä»–ç›¸å…³å¸–å­æˆ–页é¢ã€‚"],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":["åªéœ€å‡ ç§’é’Ÿå³å¯å‘您显示å¯ä»¥é“¾æŽ¥åˆ°çš„相关内容的列表。建议一旦我们收到,就会在这里显示。"],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":["{{a}}阅读我们的SEO内链指å—{{/a}} æ¥äº†è§£æ›´å¤šã€‚"],"Copied!":["å·²å¤åˆ¶ï¼"],"Not supported!":["获å–帮助ï¼"],"Are you trying to use multiple related keyphrases? You should add them separately.":["æ‚¨æ˜¯å¦æ­£åœ¨å°è¯•使用多个相关的关键短语?您应该å•独添加它们。"],"Your keyphrase is too long. It can be a maximum of 191 characters.":["您的关键è¯å¤ªé•¿ã€‚最多å¯ä»¥åŒ…å«191个字符。"],"Add as related keyphrase":["添加为相关关键短语"],"Added!":["已添加ï¼"],"Remove":["移除"],"Table of contents":["内容"],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":["我们需è¦ä¼˜åŒ–您网站的SEOæ•°æ®ï¼Œä»¥ä¾¿ä¸ºæ‚¨æä¾›æœ€ä½³%1$s链接建议%2$s。\n\n%3$s开始 SEO æ•°æ®ä¼˜åŒ–%4$s"],"Create a Zap in %s":["在%s中创建一个Zap"]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs.json b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs.json new file mode 100644 index 00000000..4b9972c3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/languages/wordpress-seo-premiumjs.json @@ -0,0 +1 @@ +{"domain":"wordpress-seo-premium","locale_data":{"wordpress-seo-premium":{"":{"domain":"wordpress-seo-premium"},"Yoast SEO Premium":[""],"https://yoa.st/2jc":[""],"The first true all-in-one SEO solution for WordPress, including on-page content analysis, XML sitemaps and much more.":[""],"Team Yoast":[""],"https://yoa.st/team-yoast-premium":[""],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.":[""],"%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.":[""],"Word complexity":[""],"%1$s: You are not using too many complex words, which makes your text easy to read. Good job!":[""],"%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.":[""],"%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.":[""],"%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[""],"%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.":[""],"%1$sKeyphrase distribution%2$s: Good job!":[""],"%1$sTitle%2$s: Your page has a title. Well done!":[""],"%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!":[""],"Select image":[""],"Close modal":[""],"Use AI":[""],"Learn more about AI (Opens in a new browser tab)":[""],"Something went wrong":[""],"The request came back with the following error: \"%s\"":[""],"Please try again later. If the issue persists, please %1$scontact our support team%2$s!":[""],"Not enough content":[""],"You've reached the Yoast AI rate limit.":[""],"To continue using the Yoast AI feature, kindly reduce the frequency of your requests. Our %1$shelp article%2$s provides guidance on effectively planning and pacing your requests for an optimized workflow.":[""],"The AI title generator requires the SEO analysis to be enabled before use. To enable it, please navigate to the %2$sSite features of %1$s%3$s, turn on the SEO analysis, and click 'Save changes'. If the SEO analysis is disabled in your WordPress user profile, access your profile and enable it there. Please contact your administrator if you don't have access to these settings.":[""],"Close":[""],"Refresh page":[""],"Yoast AI cannot reach your site":[""],"To use this feature, your site must be publicly accessible. This applies to both test sites and instances where your REST API is password-protected. Please ensure your site is accessible to the public and try again. If the issue persists, please %1$scontact our support team%2$s.":[""],"To access this feature, you need an active %1$s subscription. Please %3$sactivate your subscription in %2$s%4$s or %5$sget a new %1$s subscription%6$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[""],"To access this feature, you need active %2$s and %3$s subscriptions. Please %5$sactivate your subscriptions in %1$s%6$s or %7$sget a new %4$s%8$s. Afterward, please refresh this page for the feature to function correctly, which may take up to 30 seconds.":[""],"Connection timeout":[""],"It seems that a connection timeout has occurred. Please check your internet connection and try again later. If the issue persists, please %1$scontact our support team%2$s":[""],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate meta descriptions for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[""],"Due to the OpenAI's strict ethical guidelines and %1$susage policies%2$s, we are unable to generate SEO titles for your page. If you intend to use AI, kindly avoid the use of explicit, violent, or sexually explicit content. %3$sRead more on how to configure your page to make sure you get the best results with AI%4$s.":[""],"Google preview":[""],"SEO title width":[""],"Meta description length":[""],"Generate 5 more":[""],"Text generated by AI may be offensive or inaccurate.":[""],"Previous":[""],"Next":[""],"Mobile result":[""],"Desktop result":[""],"Social preview":[""],"Try again":[""],"%1$sTip%2$s: Improve the accuracy of your generated AI descriptions by writing more content in your page.":[""],"%1$sTip%2$s: Improve the accuracy of your generated AI titles by writing more content in your page.":[""],"Dismiss":[""],"Don’t show again":[""],"X preview":[""],"Apply %s title":[""],"Apply %s description":[""],"Generated %s titles":[""],"Generated %s descriptions":[""],"AI social description generator":[""],"AI social title generator":[""],"AI X description generator":[""],"AI X title generator":[""],"AI description generator":[""],"AI title generator":[""],"Please enter a valid focus keyphrase.":[""],"minute":["","minutes"],"Settings":[""],"Descriptive text":[""],"Show the descriptive text":[""],"Show icon":[""],"Estimated reading time:":[""],"Yoast Estimated Reading Time":[""],"Shows an estimated reading time based on the content length.":[""],"seo":[""],"reading time":[""],"content length":[""],"We could not find any relevant articles on your website that you could link to from your post.":[""],"Once you add a bit more copy, we'll give you a list of related content here to which you could link in your post.":[""],"It takes a few seconds to show you a list of related content to which you could link. The suggestions will be shown here as soon as we have them.":[""],"Load suggestions":[""],"You have disabled Link suggestions, which is needed for Related links to work. If you want to add Related links, please go to Site features and enable Link suggestions.":[""],"Refresh suggestions":[""],"Write list…":[""],"Yoast Related Links":[""],"Adds a list of links related to this page.":[""],"internal linking":[""],"site structure":[""],"related posts":[""],"related pages":[""],"Yoast Table of Contents":[""],"Adds a table of contents to this page.":[""],"links":[""],"toc":[""],"Maximum heading level":[""],"Table of contents":[""],"Improve rankings for all your cornerstones by using this %1$sstep-by-step workout!%2$s":[""],"Copy link":[""],"Copy link to suggested article: %s":[""],"To improve your site structure, consider linking to other relevant posts or pages on your website.":[""],"Copied!":[""],"Not supported!":[""],"{{a}}Read our guide on internal linking for SEO{{/a}} to learn more.":[""],"Add a title to your post for the best internal linking suggestions.":[""],"Add a metadescription to your post for the best internal linking suggestions.":[""],"Add a title and a metadescription to your post for the best internal linking suggestions.":[""],"Also, add a title to your post for the best internal linking suggestions.":[""],"Also, add a metadescription to your post for the best internal linking suggestions.":[""],"Also, add a title and a metadescription to your post for the best internal linking suggestions.":[""],"We need to optimize your site’s SEO data so we can offer you the best %1$slinking suggestions%2$s.\n\n%3$sStart SEO Data optimization%4$s":[""],"Redirect created":[""],"%s just created a redirect from the old URL to the new URL.":[""],"Old URL: {{link}}%s{{/link}}":[""],"New URL: {{link}}%s{{/link}}":[""],"OK":[""],"Undo":[""],"Are you trying to use multiple related keyphrases? You should add them separately.":[""],"Your keyphrase is too long. It can be a maximum of 191 characters.":[""],"Related keyphrase":[""],"Add related keyphrase":[""],"Enter a related keyphrase to calculate the SEO score":[""],"Help on choosing the perfect keyphrase":[""],"Help on keyphrase synonyms":[""],"Keyphrase":[""],"Synonyms":[""],"Analysis results":[""],"Add as related keyphrase":[""],"Added!":[""],"Remove":[""],"Social share preview":[""],"X share preview":[""],"Connect to %s":[""],"Manage %s settings":[""],"The Zapier integration will be removed from %1$s in 20.7 (release date May 9th). If you have any questions, please reach out to %2$s.":[""],"To set up a connection, make sure you copy the given API key below and use it to create and turn on a Zap within your %s account.":[""],"Copy your API key":[""],"You'll need this API key later on in %s when you're setting up your Zap.":[""],"%s API key":[""],"Create a Zap in %s":[""],"Log in to your %1$s account and start creating your first Zap! Note that you can only create 1 Zap with a trigger event from %2$s. Within this Zap you can choose one or more actions.":[""],"Create a Zap":[""],"Verify your connection":[""],"Once you've published your Zap in your %s dashboard, you can check whether it's active and connected to your site.":[""],"Verify connection":[""],"Your %s dashboard":[""],"You're successfully connected to %1$s! To manage your Zap, please visit your %2$s dashboard.":[""],"Go to your %s dashboard":[""],"Your API key":[""],"You're currently connected to %s using the following API key. If you'd like to reconnect with a different API key you can reset your key below.":[""],"Reset API key":[""],"Keyphrase synonyms":[""],"Internal linking suggestions":[""],"Focus keyphrase not set":[""],"Front-end SEO inspector":[""],"No index":[""],"Good":[""],"Focus Keyphrase":[""],"Checks":[""],"SEO score":[""],"Not available":[""],"Readability score":[""],"Meta tags":[""],"Schema":[""],"Overall, your text appears to be %1$s%3$s%2$s.":[""],"Once you add a bit more copy, we'll be able to tell you the formality level of your text.":[""],"Revoke AI consent":[""],"Something went wrong, please try again later.":[""],"By revoking your consent, you will no longer have access to Yoast AI features. Are you sure you want to revoke your consent?":[""],"Yes, revoke consent":[""],"An error occurred: the Premium SEO analysis isn't working as expected. Please {{activateLink}}activate your subscription in MyYoast{{/activateLink}} and then {{reloadButton}}reload this page{{/reloadButton}} to make it work properly.":[""],"I approve the %1$sTerms of Service%2$s & %3$sPrivacy Policy%4$s of the Yoast AI service. This includes consenting to the collection and use of data to improve user experience.":[""],"New to %1$s":[""],"Generate titles & descriptions with Yoast AI!":[""],"Speed up your workflow with generative AI. Get high-quality title and description suggestions for your search and social appearance. %1$sLearn more%2$s%3$s":[""],"Start generating":[""],"(Opens in a new browser tab)":[""],"To see this video, you need to allow %1$s to load embedded videos from %2$s.":[""],"Deny":[""],"Allow":[""],"Copy failed":[""],"The cornerstone approach":[""],"Rank with articles you want to rank with":[""],"Some articles on your site are %1$sthe%2$s most important. They answer people's questions and solve their problems. So, they deserve to rank! At %3$s, we call these cornerstone articles. One of the ways to have them rank is to point enough links to them. More links signal to search engines that those articles are important and valuable. In this workout, we'll help you add links to your cornerstone articles!":[""],"%1$sNeed more guidance? We've covered every step in more detail in: %2$sHow to use the %7$s cornerstone workout%3$s%4$s%5$s.%6$s":[""],"Start: Choose your cornerstones!":[""],"Which articles do you want to rank the highest? Which ones would your audience find the most useful and complete? Click the downward pointing arrow and look for articles that fit those criteria. We'll automatically mark the articles you select from the list as cornerstone.":[""],"Do all of your cornerstones have green bullets? For the best results, consider editing the ones that don't!":[""],"Check the number of incoming internal links of your cornerstones":[""],"Take a look at the list below. Do your cornerstones (marked with %1$s) have the most internal links pointing towards them? Click the Optimize button if you think a cornerstone needs more links. That will move the article to the next step.":[""],"Add internal links towards your cornerstones":[""],"Time to add some links! Below, you see a list with your cornerstones. Under each cornerstone, there are suggestions for articles you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your cornerstone article. Keep adding links from as many related articles as you need, until your cornerstones have the most internal links pointing towards them.":[""],"Well done!":[""],"You just made your best content easy to find, and more likely to rank! Way to go! From time to time, remember to check if your cornerstones are getting enough links!":[""],"Reset this workout":[""],"I've finished this workout":[""],"Please note: Your admin has disabled the cornerstone functionality in the SEO settings. If you want to use this workout, it should be enabled.":[""],"Loading data...":[""],"You currently have no articles marked as cornerstone. When you mark your articles as cornerstone, they will show up here.":[""],"Choose cornerstone articles...":[""],"Article":[""],"Focus keyphrase":[""],"Added to next step":[""],"Optimize":[""],"We were unable to find internal links on your pages. Either you haven't added any internal links to your content yet, or Yoast SEO didn't index them. You can have Yoast SEO index your links by running the SEO data optimization under SEO > Tools.":[""],"Incoming links":[""],"Type":[""],"Action":[""],"Revise this step":[""],"I've finished this step":[""],"Edit to add link":[""],"Loading link suggestions...":[""],"We didn’t find any suggestions for this article, but of course you can still add links to articles that you think are related.":[""],"You've finished adding links to this article.":[""],"Finish optimizing":[""],"Skip":[""],"%s incoming link":["","%s incoming links"],"You currently haven't selected any articles to improve. Select a few articles in the previous steps to add links to and we will show you link suggestions here.":[""],"Orphaned content":[""],"Clean up your unlinked content to make sure people can find it":[""],"You might not even know it, but there may be pages on your site that don't get any links. That’s an SEO issue, because it’s difficult for search engines to find pages that don't get any links. So, it's harder for them to rank. We call these pages orphaned content. In this workout, we find the orphaned content on your site and guide you in quickly adding links to it, so it can get a chance to rank!":[""],"%1$sNeed more guidance? We've covered every step in more detail in the following guide: %2$sHow to use the %7$s orphaned content workout%3$s%4$s%5$s.%6$s":[""],"Start: Love it or leave it?":[""],"Your site may contain lots of content that you created once and never looked back to it since. It's important to go through those pages and ask yourself if that content is still relevant to your site. Should you improve it or remove it?":[""],"Should you update your article?":[""],"Critically examine the content in this list and make the necessary updates. If you need help updating, we have a very %1$suseful blog post that can guide you all the way%2$s (click to open in a new tab).":[""],"Add internal links towards your orphaned articles.":[""],"Time to add some links! Below, you see a list with your orphaned articles. Under each one, there are suggestions for related pages you could add a link from. When adding the link, make sure to insert it in a relevant sentence related to your orphaned article. Keep adding links to each of the orphaned articles until you are satisfied with the amount of links pointing to them.":[""],"You've added links to your orphaned articles, and you’ve cleaned up the ones that were no longer relevant. Great job! Take a look at the summary below and celebrate what you accomplished!":[""],"Clear summary":[""],"Unknown":[""],"You've moved this article to the next step.":[""],"Last Updated":[""],"Is it up-to-date?":[""],"You haven't selected any articles for this step yet. You can do so in the previous step.":[""],"You've removed this article.":[""],"You've hidden this article from search engines.":[""],"Are you sure you wish to hide this article from search engines?":[""],"Improve":[""],"Hide from search engines":[""],"Everything's looking good! We haven't found any articles on your site that are older than six months and receive too few links on your site. Check back here later for new cleanup suggestions!":[""],"SEO Workout: Remove article":[""],"You are about to remove %1$s%2$s%3$s. To prevent 404s on your site, you should redirect it to another page on your site. Where would you like to redirect it?":[""],"Home page:":[""],"Related article:":[""],"Custom url:":[""],"Remove and redirect":[""],"Loading redirect options...":[""],"Resolution":[""],"Improved":[""],"Removed":[""],"Hidden from search engines.":[""],"Skipped":[""],"You haven't cleaned up or updated any articles yet using this workout. Once you do, a summary of your work will show up here.":[""],"Please note: For this workout to work well, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[""],"Please note: For this workout to work well and to offer you linking suggestions, you need to run the SEO data optimization tool. Admins can run this under %1$sSEO > Tools%2$s.":[""],"block title\u0004Yoast Siblings":[""],"block title\u0004Yoast Subpages":[""],"block description\u0004Adds a list of internal links to sibling pages which share the same parent.":[""],"block description\u0004Adds a list of internal links to subpages of this page.":[""],"block keyword\u0004SEO":[""],"block keyword\u0004siblings":[""],"block keyword\u0004siblings pages":[""],"block keyword\u0004internal linking":[""],"block keyword\u0004site structure":[""],"block keyword\u0004subpages":[""],"block keyword\u0004childpages":[""],"block keyword\u0004children":[""]}}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo-premium/license.txt b/wp/wp-content/plugins/wordpress-seo-premium/license.txt new file mode 100644 index 00000000..0ae0def1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/license.txt @@ -0,0 +1,642 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 18. Additional terms + + In the light of Article 7 of the GPL license, the following additional +terms apply: + + a) You are prohibited to make misrepresentations of the origin of that +material, or to require that modified versions of such material be marked +in reasonable ways as different from the original version; + + b) You are limited in the use for publicity purposes of names of +licensors or authors of the material; + + c) You are declined any grant of rights under trademark law for use of +the trade names, trademarks, or service marks of YOAST B.V.; + + d) You are required to indemnify licensors and authors of that material +by anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any liability +that these contractual assumptions directly impose on those licensors and +authors. + +END OF TERMS AND CONDITIONS diff --git a/wp/wp-content/plugins/wordpress-seo-premium/premium.php b/wp/wp-content/plugins/wordpress-seo-premium/premium.php new file mode 100644 index 00000000..884e7d28 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/premium.php @@ -0,0 +1,425 @@ +install_yoast_seo_from_repository(); + + // Load the Redirect File Manager. + require_once WPSEO_PREMIUM_PATH . 'classes/redirect/redirect-file-util.php'; + + // Create the upload directory. + WPSEO_Redirect_File_Util::create_upload_dir(); + + // Enable tracking. + if ( class_exists( WPSEO_Options::class ) ) { + WPSEO_Premium_Option::register_option(); + if ( WPSEO_Options::get( 'toggled_tracking' ) !== true ) { + WPSEO_Options::set( 'tracking', true ); + } + WPSEO_Options::set( 'should_redirect_after_install', true ); + } + + if ( class_exists( WPSEO_Capability_Manager_Factory::class ) ) { + do_action( 'wpseo_register_capabilities_premium' ); + WPSEO_Capability_Manager_Factory::get( 'premium' )->add(); + } + } + + /** + * WPSEO_Premium Constructor + */ + public function __construct() { + $this->integrations = [ + 'premium-metabox' => new WPSEO_Premium_Metabox( + YoastSEOPremium()->helpers->prominent_words, + YoastSEOPremium()->helpers->current_page + ), + 'premium-assets' => new WPSEO_Premium_Assets(), + 'link-suggestions' => new WPSEO_Metabox_Link_Suggestions(), + 'redirects-endpoint' => new WPSEO_Premium_Redirect_EndPoint( new WPSEO_Premium_Redirect_Service() ), + 'redirects-undo-endpoint' => new WPSEO_Premium_Redirect_Undo_EndPoint( new WPSEO_Redirect_Manager() ), + 'redirect-export-manager' => new WPSEO_Premium_Redirect_Export_Manager(), + 'keyword-export-manager' => new WPSEO_Premium_Keyword_Export_Manager(), + 'orphaned-post-filter' => new WPSEO_Premium_Orphaned_Post_Filter(), + 'expose-javascript-shortlinks' => new WPSEO_Premium_Expose_Shortlinks(), + 'multi-keyword' => new WPSEO_Multi_Keyword(), + 'siblings-block' => new Siblings_Block( YoastSEO()->classes->get( Indexable_Repository::class ) ), + 'subpages-block' => new Subpages_Block( YoastSEO()->classes->get( Indexable_Repository::class ) ), + ]; + + if ( WPSEO_Options::get( 'enable_cornerstone_content' ) ) { + $this->integrations['stale-cornerstone-content-filter'] = new WPSEO_Premium_Stale_Cornerstone_Content_Filter(); + } + + $this->setup(); + } + + /** + * Sets up the Yoast SEO premium plugin. + * + * @return void + */ + private function setup() { + $this->load_textdomain(); + + $this->redirect_setup(); + + add_action( 'init', [ 'WPSEO_Premium_Option', 'register_option' ] ); + add_action( 'init', [ 'WPSEO_Premium_Redirect_Option', 'register_option' ] ); + + if ( is_admin() ) { + // Make sure priority is below registration of other implementations of the beacon in News, Video, etc. + add_filter( 'wpseo_helpscout_beacon_settings', [ $this, 'filter_helpscout_beacon' ], 1 ); + + add_filter( 'wpseo_enable_tracking', '__return_true', 1 ); + + // Add Sub Menu page and add redirect page to admin page array. + // This should be possible in one method in the future, see #535. + add_filter( 'wpseo_submenu_pages', [ $this, 'add_submenu_pages' ], 9 ); + + // Add input fields to page meta post types. + add_action( + 'Yoast\WP\SEO\admin_post_types_beforearchive_internal', + [ + $this, + 'admin_page_meta_post_types_checkboxes', + ], + 10, + 2 + ); + // Settings. + add_action( 'admin_init', [ $this, 'register_settings' ] ); + + // Add Premium imports. + $this->integrations[] = new WPSEO_Premium_Import_Manager(); + } + + // Add page analysis fields to variable array key patterns. + add_filter( + 'wpseo_option_titles_variable_array_key_patterns', + [ $this, 'add_variable_array_key_pattern' ] + ); + + // Only activate post and term watcher if permalink structure is enabled. + if ( get_option( 'permalink_structure' ) ) { + add_action( 'admin_init', [ $this, 'init_watchers' ] ); + add_action( 'rest_api_init', [ $this, 'init_watchers' ] ); + } + + if ( ! is_admin() ) { + // Add 404 redirect link to WordPress toolbar. + add_action( 'admin_bar_menu', [ $this, 'admin_bar_menu' ], 96 ); + + add_filter( 'redirect_canonical', [ $this, 'redirect_canonical_fix' ], 1, 2 ); + } + + add_action( 'wpseo_premium_indicator_classes', [ $this, 'change_premium_indicator' ] ); + add_action( 'wpseo_premium_indicator_text', [ $this, 'change_premium_indicator_text' ] ); + + foreach ( $this->integrations as $integration ) { + $integration->register_hooks(); + } + } + + /** + * Checks if the page is a premium page. + * + * @param string $page The page to check. + * + * @return bool + */ + private function is_yoast_seo_premium_page( $page ) { + $premium_pages = [ 'wpseo_redirects' ]; + + return in_array( $page, $premium_pages, true ); + } + + /** + * Sets the autoloader for the redirects and instantiates the redirect page object. + * + * @return void + */ + private function redirect_setup() { + $this->redirects = new WPSEO_Redirect_Page(); + + // Adds integration that filters redirected entries from the sitemap. + $this->integrations['redirect-sitemap-filter'] = new WPSEO_Redirect_Sitemap_Filter( home_url() ); + } + + /** + * Initialize the watchers for the posts and the terms + * + * @return void + */ + public function init_watchers() { + // The Post Watcher. + $post_watcher = new WPSEO_Post_Watcher(); + $post_watcher->register_hooks(); + + // The Term Watcher. + $term_watcher = new WPSEO_Term_Watcher(); + $term_watcher->register_hooks(); + } + + /** + * Hooks into the `redirect_canonical` filter to catch ongoing redirects and move them to the correct spot + * + * @param string $redirect_url The target url where the requested URL will be redirected to. + * @param string $requested_url The current requested URL. + * + * @return string + */ + public function redirect_canonical_fix( $redirect_url, $requested_url ) { + $redirects = new WPSEO_Redirect_Option( false ); + $path = wp_parse_url( $requested_url, PHP_URL_PATH ); + $redirect = $redirects->get( $path ); + if ( $redirect === false ) { + return $redirect_url; + } + + $redirect_url = $redirect->get_origin(); + if ( substr( $redirect_url, 0, 1 ) === '/' ) { + $redirect_url = home_url( $redirect_url ); + } + + wp_redirect( $redirect_url, $redirect->get_type(), 'Yoast SEO Premium' ); + exit; + } + + /** + * Add 'Create Redirect' option to admin bar menu on 404 pages + * + * @return void + */ + public function admin_bar_menu() { + // Prevent function from running if the page is not a 404 page or the user has not the right capabilities to create redirects. + if ( ! is_404() || ! WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { + return; + } + + global $wp, $wp_admin_bar; + + $parsed_url = wp_parse_url( home_url( $wp->request ) ); + + if ( ! is_array( $parsed_url ) || empty( $parsed_url['path'] ) ) { + return; + } + + $old_url = WPSEO_Redirect_Util::strip_base_url_path_from_url( home_url(), $parsed_url['path'] ); + + if ( isset( $parsed_url['query'] ) && $parsed_url['query'] !== '' ) { + $old_url .= '?' . $parsed_url['query']; + } + + $old_url = rawurlencode( $old_url ); + + $node = [ + 'id' => 'wpseo-premium-create-redirect', + 'title' => __( 'Create Redirect', 'wordpress-seo-premium' ), + 'href' => wp_nonce_url( admin_url( 'admin.php?page=wpseo_redirects&old_url=' . $old_url ), 'wpseo_redirects-old-url', 'wpseo_premium_redirects_nonce' ), + ]; + $wp_admin_bar->add_menu( $node ); + } + + /** + * Add page analysis to array with variable array key patterns + * + * @param array $patterns Array with patterns for page analysis. + * + * @return array + */ + public function add_variable_array_key_pattern( $patterns ) { + if ( in_array( 'page-analyse-extra-', $patterns, true ) === false ) { + $patterns[] = 'page-analyse-extra-'; + } + + return $patterns; + } + + /** + * This hook will add an input-field for specifying custom fields for page analysis. + * + * The values will be comma-separated and will target the belonging field in the post_meta. Page analysis will + * use the content of it by sticking it to the post_content. + * + * @param Yoast_Form $yform The Yoast_Form object. + * @param string $name The post type name. + * + * @return void + */ + public function admin_page_meta_post_types_checkboxes( $yform, $name ) { + $custom_fields_help_link = new Help_Link_Presenter( + WPSEO_Shortlinker::get( 'https://yoa.st/4cr' ), + __( 'Learn more about including custom fields in the page analysis', 'wordpress-seo-premium' ) + ); + + echo '
      '; + + $yform->textinput_extra_content( + 'page-analyse-extra-' . $name, + esc_html__( 'Custom fields to include in page analysis', 'wordpress-seo-premium' ), + [ + 'extra_content' => $custom_fields_help_link, + ] + ); + echo '
      '; + } + + /** + * Function adds the premium pages to the Yoast SEO menu + * + * @param array $submenu_pages Array with the configuration for the submenu pages. + * + * @return array + */ + public function add_submenu_pages( $submenu_pages ) { + $submenu_pages[] = [ + 'wpseo_dashboard', + '', + __( 'Redirects', 'wordpress-seo-premium' ) . ' ', + 'wpseo_manage_redirects', + 'wpseo_redirects', + [ $this->redirects, 'display' ], + ]; + + return $submenu_pages; + } + + /** + * Change premium indicator to green when premium is enabled + * + * @param string[] $classes The current classes for the indicator. + * + * @return string[] The new classes for the indicator. + */ + public function change_premium_indicator( $classes ) { + $class_no = array_search( 'wpseo-premium-indicator--no', $classes, true ); + + if ( $class_no !== false ) { + unset( $classes[ $class_no ] ); + + $classes[] = 'wpseo-premium-indicator--yes'; + } + + return $classes; + } + + /** + * Replaces the screen reader text for the premium indicator. + * + * @param string $text The original text. + * + * @return string The new text. + */ + public function change_premium_indicator_text( $text ) { + return __( 'Enabled', 'wordpress-seo-premium' ); + } + + /** + * Register the premium settings + * + * @return void + */ + public function register_settings() { + register_setting( 'yoast_wpseo_redirect_options', 'wpseo_redirect' ); + } + + /** + * Output admin css in admin head + * + * @return void + */ + public function admin_css() { + echo ""; + } + + /** + * Load textdomain + * + * @return void + */ + private function load_textdomain() { + load_plugin_textdomain( 'wordpress-seo-premium', false, dirname( WPSEO_PREMIUM_BASENAME ) . '/languages/' ); + } + + /** + * Initializes the HelpScout support modal for WPSEO settings pages. + * + * @param array $helpscout_settings The helpscout settings. + * + * @return array The HelpScout beacon settings array. + */ + public function filter_helpscout_beacon( $helpscout_settings ) { + $beacon_id = '1ae02e91-5865-4f13-b220-7daed946ba25'; + + $helpscout_settings['products'][] = WPSEO_Addon_Manager::PREMIUM_SLUG; + + // Set the beacon to the premium beacon for all pages. + foreach ( $helpscout_settings['pages_ids'] as $page => $beacon ) { + $helpscout_settings['pages_ids'][ $page ] = $beacon_id; + } + // Add the redirects page. + $helpscout_settings['pages_ids']['wpseo_redirects'] = $beacon_id; + + return $helpscout_settings; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/readme.txt b/wp/wp-content/plugins/wordpress-seo-premium/readme.txt new file mode 100644 index 00000000..11737d08 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/readme.txt @@ -0,0 +1,2 @@ +=== Yoast SEO Premium === +Stable tag: 22.9 diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/actions/ai-generator-action.php b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/ai-generator-action.php new file mode 100644 index 00000000..ec58eeaa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/ai-generator-action.php @@ -0,0 +1,404 @@ +ai_generator_helper = $ai_generator_helper; + $this->options_helper = $options_helper; + $this->user_helper = $user_helper; + $this->addon_manager = $addon_manager; + } + + /** + * Requests a new set of JWT tokens. + * + * Requests a new JWT access and refresh token for a user from the Yoast AI Service and stores it in the database + * under usermeta. The storing of the token happens in a HTTP callback that is triggered by this request. + * + * @param WP_User $user The WP user. + * + * @return void + * + * @throws Bad_Request_Exception Bad_Request_Exception. + * @throws Forbidden_Exception Forbidden_Exception. + * @throws Internal_Server_Error_Exception Internal_Server_Error_Exception. + * @throws Not_Found_Exception Not_Found_Exception. + * @throws Payment_Required_Exception Payment_Required_Exception. + * @throws Request_Timeout_Exception Request_Timeout_Exception. + * @throws Service_Unavailable_Exception Service_Unavailable_Exception. + * @throws Too_Many_Requests_Exception Too_Many_Requests_Exception. + * @throws Unauthorized_Exception Unauthorized_Exception. + */ + public function token_request( WP_User $user ): void { + // Ensure the user has given consent. + if ( $this->user_helper->get_meta( $user->ID, '_yoast_wpseo_ai_consent', true ) !== '1' ) { + throw $this->handle_consent_revoked( $user->ID ); + } + + // Generate a verification code and store it in the database. + $code_verifier = $this->ai_generator_helper->generate_code_verifier( $user ); + $this->ai_generator_helper->set_code_verifier( $user->ID, $code_verifier ); + + $request_body = [ + 'service' => 'openai', + 'code_challenge' => \hash( 'sha256', $code_verifier ), + 'license_site_url' => $this->ai_generator_helper->get_license_url(), + 'user_id' => (string) $user->ID, + 'callback_url' => $this->ai_generator_helper->get_callback_url(), + 'refresh_callback_url' => $this->ai_generator_helper->get_refresh_callback_url(), + ]; + + $this->ai_generator_helper->request( '/token/request', $request_body ); + + // The callback saves the metadata. Because that is in another session, we need to delete the current cache here. Or we may get the old token. + \wp_cache_delete( $user->ID, 'user_meta' ); + } + + /** + * Refreshes the JWT access token. + * + * Refreshes a stored JWT access token for a user with the Yoast AI Service and stores it in the database under + * usermeta. The storing of the token happens in a HTTP callback that is triggered by this request. + * + * @param WP_User $user The WP user. + * + * @return void + * + * @throws Bad_Request_Exception Bad_Request_Exception. + * @throws Forbidden_Exception Forbidden_Exception. + * @throws Internal_Server_Error_Exception Internal_Server_Error_Exception. + * @throws Not_Found_Exception Not_Found_Exception. + * @throws Payment_Required_Exception Payment_Required_Exception. + * @throws Request_Timeout_Exception Request_Timeout_Exception. + * @throws Service_Unavailable_Exception Service_Unavailable_Exception. + * @throws Too_Many_Requests_Exception Too_Many_Requests_Exception. + * @throws Unauthorized_Exception Unauthorized_Exception. + * @throws RuntimeException Unable to retrieve the refresh token. + */ + public function token_refresh( WP_User $user ): void { + $refresh_jwt = $this->ai_generator_helper->get_refresh_token( $user->ID ); + + // Generate a verification code and store it in the database. + $code_verifier = $this->ai_generator_helper->generate_code_verifier( $user ); + $this->ai_generator_helper->set_code_verifier( $user->ID, $code_verifier ); + + $request_body = [ + 'code_challenge' => \hash( 'sha256', $code_verifier ), + ]; + $request_headers = [ + 'Authorization' => "Bearer $refresh_jwt", + ]; + + $this->ai_generator_helper->request( '/token/refresh', $request_body, $request_headers ); + + // The callback saves the metadata. Because that is in another session, we need to delete the current cache here. Or we may get the old token. + \wp_cache_delete( $user->ID, 'user_meta' ); + } + + /** + * Callback function that will be invoked by our API. + * + * @param string $access_jwt The access JWT. + * @param string $refresh_jwt The refresh JWT. + * @param string $code_challenge The verification code. + * @param int $user_id The user ID. + * + * @return string The code verifier. + * + * @throws Unauthorized_Exception Unauthorized_Exception. + */ + public function callback( + string $access_jwt, + string $refresh_jwt, + string $code_challenge, + int $user_id + ): string { + try { + $code_verifier = $this->ai_generator_helper->get_code_verifier( $user_id ); + } catch ( RuntimeException $exception ) { + throw new Unauthorized_Exception( 'Unauthorized' ); + } + + if ( $code_challenge !== \hash( 'sha256', $code_verifier ) ) { + throw new Unauthorized_Exception( 'Unauthorized' ); + } + $this->user_helper->update_meta( $user_id, '_yoast_wpseo_ai_generator_access_jwt', $access_jwt ); + $this->user_helper->update_meta( $user_id, '_yoast_wpseo_ai_generator_refresh_jwt', $refresh_jwt ); + $this->ai_generator_helper->delete_code_verifier( $user_id ); + + return $code_verifier; + } + + // phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber -- PHPCS doesn't take into account exceptions thrown in called methods. + + /** + * Action used to generate suggestions through AI. + * + * @param WP_User $user The WP user. + * @param string $suggestion_type The type of the requested suggestion. + * @param string $prompt_content The excerpt taken from the post. + * @param string $focus_keyphrase The focus keyphrase associated to the post. + * @param string $language The language of the post. + * @param string $platform The platform the post is intended for. + * @param bool $retry_on_unauthorized Whether to retry when unauthorized (mechanism to retry once). + * + * @return array The suggestions. + * + * @throws Bad_Request_Exception Bad_Request_Exception. + * @throws Forbidden_Exception Forbidden_Exception. + * @throws Internal_Server_Error_Exception Internal_Server_Error_Exception. + * @throws Not_Found_Exception Not_Found_Exception. + * @throws Payment_Required_Exception Payment_Required_Exception. + * @throws Request_Timeout_Exception Request_Timeout_Exception. + * @throws Service_Unavailable_Exception Service_Unavailable_Exception. + * @throws Too_Many_Requests_Exception Too_Many_Requests_Exception. + * @throws Unauthorized_Exception Unauthorized_Exception. + * @throws RuntimeException Unable to retrieve the access token. + */ + public function get_suggestions( + WP_User $user, + string $suggestion_type, + string $prompt_content, + string $focus_keyphrase, + string $language, + string $platform, + bool $retry_on_unauthorized = true + ): array { + $token = $this->get_or_request_access_token( $user ); + + $request_body = [ + 'service' => 'openai', + 'user_id' => (string) $user->ID, + 'subject' => [ + 'content' => $prompt_content, + 'focus_keyphrase' => $focus_keyphrase, + 'language' => $language, + 'platform' => $platform, + ], + ]; + $request_headers = [ + 'Authorization' => "Bearer $token", + ]; + + try { + $response = $this->ai_generator_helper->request( "/openai/suggestions/$suggestion_type", $request_body, $request_headers ); + } catch ( Unauthorized_Exception $exception ) { + // Delete the stored JWT tokens, as they appear to be no longer valid. + $this->user_helper->delete_meta( $user->ID, '_yoast_wpseo_ai_generator_access_jwt' ); + $this->user_helper->delete_meta( $user->ID, '_yoast_wpseo_ai_generator_refresh_jwt' ); + + if ( ! $retry_on_unauthorized ) { + throw $exception; + } + + // Try again once more by fetching a new set of tokens and trying the suggestions endpoint again. + return $this->get_suggestions( $user, $suggestion_type, $prompt_content, $focus_keyphrase, $language, $platform, false ); + } catch ( Forbidden_Exception $exception ) { + // Follow the API in the consent being revoked (Use case: user sent an e-mail to revoke?). + throw $this->handle_consent_revoked( $user->ID, $exception->getCode() ); + } + + return $this->ai_generator_helper->build_suggestions_array( $response ); + } + + // phpcs:enable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber + + /** + * Stores the consent given or revoked by the user. + * + * @param int $user_id The user ID. + * @param bool $consent Whether the consent has been given. + * + * @return void + * + * @throws Bad_Request_Exception Bad_Request_Exception. + * @throws Internal_Server_Error_Exception Internal_Server_Error_Exception. + * @throws Not_Found_Exception Not_Found_Exception. + * @throws Payment_Required_Exception Payment_Required_Exception. + * @throws Request_Timeout_Exception Request_Timeout_Exception. + * @throws Service_Unavailable_Exception Service_Unavailable_Exception. + * @throws Too_Many_Requests_Exception Too_Many_Requests_Exception. + * @throws RuntimeException Unable to retrieve the access token. + */ + public function consent( int $user_id, bool $consent ): void { + if ( $consent ) { + // Store the consent at user level. + $this->user_helper->update_meta( $user_id, '_yoast_wpseo_ai_consent', true ); + } + else { + $this->token_invalidate( $user_id ); + + // Delete the consent at user level. + $this->user_helper->delete_meta( $user_id, '_yoast_wpseo_ai_consent' ); + } + } + + /** + * Busts the subscription cache. + * + * @return void + */ + public function bust_subscription_cache(): void { + $this->addon_manager->remove_site_information_transients(); + } + + /** + * Retrieves the access token. + * + * @param WP_User $user The WP user. + * + * @return string The access token. + * + * @throws Bad_Request_Exception Bad_Request_Exception. + * @throws Forbidden_Exception Forbidden_Exception. + * @throws Internal_Server_Error_Exception Internal_Server_Error_Exception. + * @throws Not_Found_Exception Not_Found_Exception. + * @throws Payment_Required_Exception Payment_Required_Exception. + * @throws Request_Timeout_Exception Request_Timeout_Exception. + * @throws Service_Unavailable_Exception Service_Unavailable_Exception. + * @throws Too_Many_Requests_Exception Too_Many_Requests_Exception. + * @throws Unauthorized_Exception Unauthorized_Exception. + * @throws RuntimeException Unable to retrieve the access or refresh token. + */ + private function get_or_request_access_token( WP_User $user ): string { + $access_jwt = $this->user_helper->get_meta( $user->ID, '_yoast_wpseo_ai_generator_access_jwt', true ); + if ( ! \is_string( $access_jwt ) || $access_jwt === '' ) { + $this->token_request( $user ); + $access_jwt = $this->ai_generator_helper->get_access_token( $user->ID ); + } + elseif ( $this->ai_generator_helper->has_token_expired( $access_jwt ) ) { + try { + $this->token_refresh( $user ); + } catch ( Unauthorized_Exception $exception ) { + $this->token_request( $user ); + } catch ( Forbidden_Exception $exception ) { + // Follow the API in the consent being revoked (Use case: user sent an e-mail to revoke?). + throw $this->handle_consent_revoked( $user->ID, $exception->getCode() ); + } + $access_jwt = $this->ai_generator_helper->get_access_token( $user->ID ); + } + + return $access_jwt; + } + + /** + * Invalidates the access token. + * + * @param string $user_id The user ID. + * + * @return void + * + * @throws Bad_Request_Exception Bad_Request_Exception. + * @throws Internal_Server_Error_Exception Internal_Server_Error_Exception. + * @throws Not_Found_Exception Not_Found_Exception. + * @throws Payment_Required_Exception Payment_Required_Exception. + * @throws Request_Timeout_Exception Request_Timeout_Exception. + * @throws Service_Unavailable_Exception Service_Unavailable_Exception. + * @throws Too_Many_Requests_Exception Too_Many_Requests_Exception. + * @throws RuntimeException Unable to retrieve the access token. + */ + private function token_invalidate( string $user_id ): void { + try { + $access_jwt = $this->ai_generator_helper->get_access_token( $user_id ); + } catch ( RuntimeException $e ) { + $access_jwt = ''; + } + + $request_body = [ + 'user_id' => (string) $user_id, + ]; + $request_headers = [ + 'Authorization' => "Bearer $access_jwt", + ]; + + try { + $this->ai_generator_helper->request( '/token/invalidate', $request_body, $request_headers ); + } catch ( Unauthorized_Exception | Forbidden_Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- Reason: Ignored on purpose. + // We do nothing in this case, we trust nonce verification and try to remove the user data anyway. + // I.e. we fallthrough to the same logic as if we got a 200 OK. + } + + // Delete the stored JWT tokens. + $this->user_helper->delete_meta( $user_id, '_yoast_wpseo_ai_generator_access_jwt' ); + $this->user_helper->delete_meta( $user_id, '_yoast_wpseo_ai_generator_refresh_jwt' ); + } + + /** + * Handles consent revoked. + * + * By deleting the consent user metadata from the database. + * And then throwing a Forbidden_Exception. + * + * @param int $user_id The user ID. + * @param int $status_code The status code. Defaults to 403. + * + * @return Forbidden_Exception The Forbidden_Exception. + */ + private function handle_consent_revoked( int $user_id, int $status_code = 403 ): Forbidden_Exception { + $this->user_helper->delete_meta( $user_id, '_yoast_wpseo_ai_consent' ); + + return new Forbidden_Exception( 'CONSENT_REVOKED', $status_code ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/actions/link-suggestions-action.php b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/link-suggestions-action.php new file mode 100644 index 00000000..ccfab88c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/link-suggestions-action.php @@ -0,0 +1,607 @@ +prominent_words_repository = $prominent_words_repository; + $this->indexable_repository = $indexable_repository; + $this->prominent_words_helper = $prominent_words_helper; + $this->prominent_words_support = $prominent_words_support; + $this->links_repository = $links_repository; + } + + /** + * Suggests a list of links, based on the given array of prominent words. + * + * @param array $words_from_request The prominent words as an array mapping words to weights. + * @param int $limit The maximum number of link suggestions to retrieve. + * @param int $object_id The object id for the current indexable. + * @param string $object_type The object type for the current indexable. + * @param bool $include_existing_links Optional. Whether or not to include existing links, defaults to true. + * @param array $post_type Optional. The list of post types where suggestions may come from. + * @param bool $only_include_public Optional. Only include public indexables, defaults to false. + * + * @return array Links for the post that are suggested. + */ + public function get_suggestions( $words_from_request, $limit, $object_id, $object_type, $include_existing_links = true, $post_type = [], $only_include_public = false ) { + $current_indexable_id = null; + $current_indexable = $this->indexable_repository->find_by_id_and_type( $object_id, $object_type ); + if ( $current_indexable ) { + $current_indexable_id = $current_indexable->id; + } + + /* + * Gets best suggestions (returns a sorted array [$indexable_id => score]). + * The indexables are processed in batches of 1000 indexables each. + */ + $suggestions_scores = $this->retrieve_suggested_indexable_ids( $words_from_request, $limit, self::BATCH_SIZE, $current_indexable_id, $include_existing_links, $post_type, $only_include_public ); + + $indexable_ids = \array_keys( $suggestions_scores ); + + // Return the empty list if no suggestions have been found. + if ( empty( $indexable_ids ) ) { + return []; + } + + // Retrieve indexables for suggestions. + $suggestions_indexables = $this->indexable_repository->query()->where_id_in( $indexable_ids )->find_many(); + + /** + * Filter 'wpseo_link_suggestions_indexables' - Allow filtering link suggestions indexable objects. + * + * @param array $suggestions An array of suggestion indexables that can be filtered. + * @param int $object_id The object id for the current indexable. + * @param string $object_type The object type for the current indexable. + */ + $suggestions_indexables = \apply_filters( 'wpseo_link_suggestions_indexables', $suggestions_indexables, $object_id, $object_type ); + + // Create suggestions objects. + return $this->create_suggestions( $suggestions_indexables, $suggestions_scores ); + } + + /** + * Suggests a list of links, based on the given array of prominent words. + * + * @param int $id The object id for the current indexable. + * @param int $limit The maximum number of link suggestions to retrieve. + * @param bool $include_existing_links Optional. Whether or not to include existing links, defaults to true. + * + * @return array Links for the post that are suggested. + */ + public function get_indexable_suggestions_for_indexable( $id, $limit, $include_existing_links = true ) { + $weighted_words = []; + $prominent_words = $this->prominent_words_repository->query() + ->where( 'indexable_id', $id ) + ->find_array(); + foreach ( $prominent_words as $prominent_word ) { + $weighted_words[ $prominent_word['stem'] ] = $prominent_word['weight']; + } + + /* + * Gets best suggestions (returns a sorted array [$indexable_id => score]). + * The indexables are processed in batches of 1000 indexables each. + */ + $suggestions_scores = $this->retrieve_suggested_indexable_ids( $weighted_words, $limit, self::BATCH_SIZE, $id, $include_existing_links ); + + $indexable_ids = \array_keys( $suggestions_scores ); + + // Return the empty list if no suggestions have been found. + if ( empty( $indexable_ids ) ) { + return []; + } + + // Retrieve indexables for suggestions. + return $this->indexable_repository->query()->where_id_in( $indexable_ids )->find_array(); + } + + /** + * Retrieves the titles of the posts with the given IDs. + * + * @param array $post_ids The IDs of the posts to retrieve the titles of. + * + * @return array An array mapping post ID to title. + */ + protected function retrieve_posts( $post_ids ) { + $query = new WP_Query( + [ + 'post_type' => $this->prominent_words_support->get_supported_post_types(), + 'post__in' => $post_ids, + 'posts_per_page' => \count( $post_ids ), + ] + ); + $posts = $query->get_posts(); + + $post_data = []; + + foreach ( $posts as $post ) { + $post_data[ $post->ID ] = [ + 'title' => $post->post_title, + ]; + } + + return $post_data; + } + + /** + * Retrieves the names of the terms with the given IDs. + * + * @param Indexable[] $indexables The indexables to retrieve titles for. + * + * @return array An array mapping term ID to title. + */ + protected function retrieve_terms( $indexables ) { + $data = []; + foreach ( $indexables as $indexable ) { + if ( $indexable->object_type !== 'term' ) { + continue; + } + + $term = \get_term_by( 'term_id', $indexable->object_id, $indexable->object_sub_type ); + + $data[ $indexable->object_id ] = [ + 'title' => $term->name, + ]; + } + + return $data; + } + + /** + * Retrieves the titles of the given array of indexables. + * + * @param Indexable[] $indexables An array of indexables for which to retrieve the titles. + * + * @return array A two-dimensional array mapping object type and object id to title. + */ + protected function retrieve_object_titles( $indexables ) { + $object_ids = []; + + foreach ( $indexables as $indexable ) { + if ( \array_key_exists( $indexable->object_type, $object_ids ) ) { + $object_ids[ $indexable->object_type ][] = $indexable->object_id; + } + else { + $object_ids[ $indexable->object_type ] = [ $indexable->object_id ]; + } + } + + $objects = [ + 'post' => [], + 'term' => [], + ]; + + // At the moment we only support internal linking for posts, so we only need the post titles. + if ( \array_key_exists( 'post', $object_ids ) ) { + $objects['post'] = $this->retrieve_posts( $object_ids['post'] ); + } + + if ( \array_key_exists( 'term', $object_ids ) ) { + $objects['term'] = $this->retrieve_terms( $indexables ); + } + + return $objects; + } + + /** + * Computes, for a given indexable, its raw matching score on the request words to match. + * In general, higher scores mean better matches. + * + * @param array $request_data The words to match, as an array containing stems, weights and dfs. + * @param array $candidate_data The words to match against, as an array of `Prominent_Words` objects. + * + * @return float A raw score of the indexable. + */ + protected function compute_raw_score( $request_data, $candidate_data ) { + $raw_score = 0; + + foreach ( $candidate_data as $stem => $candidate_word_data ) { + if ( ! \array_key_exists( $stem, $request_data ) ) { + continue; + } + + $word_from_request_weight = $request_data[ $stem ]['weight']; + $word_from_request_df = $request_data[ $stem ]['df']; + $candidate_weight = $candidate_word_data['weight']; + $candidate_df = $candidate_word_data['df']; + + $tf_idf_word_from_request = $this->prominent_words_helper->compute_tf_idf_score( $word_from_request_weight, $word_from_request_df ); + $tf_idf_word_from_database = $this->prominent_words_helper->compute_tf_idf_score( $candidate_weight, $candidate_df ); + + // Score on this word is the product of the tf-idf scores. + $raw_score += ( $tf_idf_word_from_request * $tf_idf_word_from_database ); + } + + return $raw_score; + } + + /** + * Combines weight data of the request words to their document frequencies. This is needed to calculate + * vector length of the request data. + * + * @param array $request_words An array mapping words to weights. + * + * @return array An array mapping stems, weights and dfs. + */ + protected function compose_request_data( $request_words ) { + $request_doc_frequencies = $this->prominent_words_repository->count_document_frequencies( \array_keys( $request_words ) ); + $combined_request_data = []; + foreach ( $request_words as $stem => $weight ) { + if ( ! isset( $request_doc_frequencies[ $stem ] ) ) { + continue; + } + + $combined_request_data[ $stem ] = [ + 'weight' => (int) $weight, + 'df' => $request_doc_frequencies[ $stem ], + ]; + } + + return $combined_request_data; + } + + /** + * Transforms the array of prominent words into an array of objects mapping indexable_id to an array + * of prominent words associated with this indexable_id, with each prominent word's stem as a key. + * + * @param array $words The array of prominent words, with indexable_id as one of the keys. + * + * @return array An array mapping indexable IDs to their prominent words. + */ + protected function group_words_by_indexable_id( $words ) { + $candidates_words_by_indexable_ids = []; + foreach ( $words as $word ) { + $indexable_id = $word->indexable_id; + + $candidates_words_by_indexable_ids[ $indexable_id ][ $word->stem ] = [ + 'weight' => (int) $word->weight, + 'df' => (int) $word->df, + ]; + } + + return $candidates_words_by_indexable_ids; + } + + /** + * Calculates a matching score for one candidate indexable. + * + * @param array $request_data An array matching stems from request to their weights and dfs. + * @param float $request_vector_length The vector length of the request words. + * @param array $candidate_data An array matching stems from the candidate to their weights and dfs. + * + * @return float A matching score for an indexable. + */ + protected function calculate_score_for_indexable( $request_data, $request_vector_length, $candidate_data ) { + $raw_score = $this->compute_raw_score( $request_data, $candidate_data ); + $candidate_vector_length = $this->prominent_words_helper->compute_vector_length( $candidate_data ); + return $this->normalize_score( $raw_score, $candidate_vector_length, $request_vector_length ); + } + + /** + * In the prominent words repository, find a $batch_size of all ProminentWord-IndexableID pairs where + * prominent words match the set of stems we are interested in. + * Request prominent words for indexables in the batch (including the iDF of all words) to calculate + * their vector length later. + * + * @param array $stems The stems in the request. + * @param int $batch_size How many indexables to request in one query. + * @param int $page The start of the current batch (in pages). + * @param int[] $excluded_ids The indexable IDs to exclude. + * @param array $post_type The post types that will be searched. + * @param bool $only_include_public If only public indexables are included. + * + * @return array An array of ProminentWords objects, containing their stem, weight, indexable id, + * and document frequency. + */ + protected function get_candidate_words( $stems, $batch_size, $page, $excluded_ids = [], $post_type = [], $only_include_public = false ) { + + return $this->prominent_words_repository->find_by_list_of_ids( + $this->prominent_words_repository->find_ids_by_stems( $stems, $batch_size, $page, $excluded_ids, $post_type, $only_include_public ) + ); + } + + /** + * For each candidate indexable, computes their matching score related to the request set of prominent words. + * The candidate indexables are analyzed in batches. + * After having computed scores for a batch the function saves the best candidates until now. + * + * @param array $request_words The words to match, as an array mapping words to weights. + * @param int $limit The max number of suggestions that should be returned by the function. + * @param int $batch_size The number of indexables that should be analyzed in every batch. + * @param int|null $current_indexable_id The id for the current indexable. + * @param bool $include_existing_links Optional. Whether or not to include existing links, defaults to true. + * @param array $post_type Optional. The list of post types where suggestions may come from. + * @param bool $only_include_public Optional. Only include public indexables, defaults to false. + * + * @return array An array mapping indexable IDs to scores. Higher scores mean better matches. + */ + protected function retrieve_suggested_indexable_ids( $request_words, $limit, $batch_size, $current_indexable_id, $include_existing_links = true, $post_type = [], $only_include_public = false ) { + // Combine stems, weights and DFs from request. + $request_data = $this->compose_request_data( $request_words ); + + // Calculate vector length of the request set (needed for score normalization later). + $request_vector_length = $this->prominent_words_helper->compute_vector_length( $request_data ); + + // Get all links the post already links to, those shouldn't be suggested. + $excluded_indexable_ids = [ $current_indexable_id ]; + if ( ! $include_existing_links && $current_indexable_id ) { + $links = $this->links_repository->query() + ->distinct() + ->select( 'indexable_id' ) + ->where( 'target_indexable_id', $current_indexable_id ) + ->find_many(); + $excluded_indexable_ids = \array_merge( $excluded_indexable_ids, \wp_list_pluck( $links, 'indexable_id' ) ); + } + $excluded_indexable_ids = \array_filter( $excluded_indexable_ids ); + + $request_stems = \array_keys( $request_data ); + $scores = []; + $page = 1; + + do { + // Retrieve the words of all indexables in this batch that share prominent word stems with request. + $candidates_words = $this->get_candidate_words( $request_stems, $batch_size, $page, $excluded_indexable_ids, $post_type, $only_include_public ); + + // Transform the prominent words table so that it is indexed by indexable_ids. + $candidates_words_by_indexable_ids = $this->group_words_by_indexable_id( $candidates_words ); + + $batch_scores_size = 0; + + foreach ( $candidates_words_by_indexable_ids as $id => $candidate_data ) { + $scores[ $id ] = $this->calculate_score_for_indexable( $request_data, $request_vector_length, $candidate_data ); + ++$batch_scores_size; + } + + // Sort the list of scores and keep only the top $limit of the scores. + $scores = $this->get_top_suggestions( $scores, $limit ); + + ++$page; + } while ( $batch_scores_size === $batch_size ); + + return $scores; + } + + /** + * Normalizes the raw score based on the length of the prominent word vectors. + * + * @param float $raw_score The raw (non-normalized) score. + * @param float $vector_length_candidate The vector lengths of the candidate indexable. + * @param float $vector_length_request The vector length of the words from the request. + * + * @return int|float The score, normalized on vector lengths. + */ + protected function normalize_score( $raw_score, $vector_length_candidate, $vector_length_request ) { + $normalizing_factor = ( $vector_length_request * $vector_length_candidate ); + + if ( $normalizing_factor === 0.0 ) { + // We can't divide by 0, so set the score to 0 instead. + return 0; + } + + return ( $raw_score / $normalizing_factor ); + } + + /** + * Sorts the indexable ids based on the score and returns the top N indexable ids based on a specified limit. + * (Returns all indexable ids if there are less indexable ids than specified by the limit.) + * + * @param array $scores The array matching indexable ids to their scores. + * @param int $limit The maximum number of indexables that should be returned. + * + * @return array The top N indexable ids, sorted from highest to lowest score. + */ + protected function get_top_suggestions( $scores, $limit ) { + // Sort the indexables by descending score. + \uasort( + $scores, + static function ( $score_1, $score_2 ) { + if ( $score_1 === $score_2 ) { + return 0; + } + + return ( ( $score_1 < $score_2 ) ? 1 : -1 ); + } + ); + + // Take the top $limit suggestions, while preserving their ids specified in the keys of the array elements. + return \array_slice( $scores, 0, $limit, true ); + } + + /** + * Gets the singular label of the given combination of object type and sub type. + * + * @param string $object_type An object type. For example 'post' or 'term'. + * @param string $object_sub_type An object sub type. For example 'page' or 'category'. + * + * @return string The singular label of the given combination of object type and sub type, + * or the empty string if the singular label does not exist. + */ + protected function get_sub_type_singular_label( $object_type, $object_sub_type ) { + switch ( $object_type ) { + case 'post': + $post_type = \get_post_type_object( $object_sub_type ); + if ( $post_type ) { + return $post_type->labels->singular_name; + } + break; + case 'term': + $taxonomy = \get_taxonomy( $object_sub_type ); + if ( $taxonomy ) { + return $taxonomy->labels->singular_name; + } + break; + } + + return ''; + } + + /** + * Creates link suggestion data based on the indexables that should be suggested and the scores for these + * indexables. + * + * @param Indexable[] $indexables The indexables for which to create linking suggestions. + * @param array $scores The scores for the linking suggestions. + * + * @return array The internal linking suggestions. + */ + protected function create_suggestions( $indexables, $scores ) { + $objects = $this->retrieve_object_titles( $indexables ); + $link_suggestions = []; + + foreach ( $indexables as $indexable ) { + if ( ! \array_key_exists( $indexable->object_type, $objects ) ) { + continue; + } + + // Object tied to this indexable. E.g. post, page, term. + if ( ! \array_key_exists( $indexable->object_id, $objects[ $indexable->object_type ] ) ) { + continue; + } + + $link_suggestions[] = [ + 'object_type' => $indexable->object_type, + 'id' => (int) ( $indexable->object_id ), + 'title' => $objects[ $indexable->object_type ][ $indexable->object_id ]['title'], + 'link' => $indexable->permalink, + 'isCornerstone' => (bool) $indexable->is_cornerstone, + 'labels' => $this->get_labels( $indexable ), + 'score' => \round( (float) ( $scores[ $indexable->id ] ), 2 ), + ]; + } + + /* + * Because the request to the indexables table messes up with the ordering of the suggestions, + * we have to sort again. + */ + $this->sort_suggestions_by_field( $link_suggestions, 'score' ); + + $cornerstone_suggestions = $this->filter_suggestions( $link_suggestions, true ); + $non_cornerstone_suggestions = $this->filter_suggestions( $link_suggestions, false ); + + return \array_merge_recursive( [], $cornerstone_suggestions, $non_cornerstone_suggestions ); + } + + /** + * Retrieves the labels for the link suggestion. + * + * @param Indexable $indexable The indexable to determine the labels for. + * + * @return array The labels. + */ + protected function get_labels( Indexable $indexable ) { + $labels = []; + if ( $indexable->is_cornerstone ) { + $labels[] = 'cornerstone'; + } + + $labels[] = $this->get_sub_type_singular_label( $indexable->object_type, $indexable->object_sub_type ); + + return $labels; + } + + /** + * Sorts the given link suggestion by field. + * + * @param array $link_suggestions The link suggestions to sort. + * @param string $field The field to sort suggestions by. + * + * @return void + */ + protected function sort_suggestions_by_field( array &$link_suggestions, $field ) { + \usort( + $link_suggestions, + static function ( $suggestion_1, $suggestion_2 ) use ( $field ) { + if ( $suggestion_1[ $field ] === $suggestion_2[ $field ] ) { + return 0; + } + + return ( ( $suggestion_1[ $field ] < $suggestion_2[ $field ] ) ? 1 : -1 ); + } + ); + } + + /** + * Filters the suggestions by cornerstone status. + * + * @param array $link_suggestions The suggestions to filter. + * @param bool $cornerstone Whether or not to include the cornerstone suggestions. + * + * @return array The filtered suggestions. + */ + protected function filter_suggestions( $link_suggestions, $cornerstone ) { + return \array_filter( + $link_suggestions, + static function ( $suggestion ) use ( $cornerstone ) { + return (bool) $suggestion['isCornerstone'] === $cornerstone; + } + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/complete-action.php b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/complete-action.php new file mode 100644 index 00000000..5949f4be --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/complete-action.php @@ -0,0 +1,36 @@ +prominent_words_helper = $prominent_words_helper; + } + + /** + * Sets the indexing state to complete. + * + * @return void + */ + public function complete() { + $this->prominent_words_helper->complete_indexing(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/content-action.php b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/content-action.php new file mode 100644 index 00000000..0df22689 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/content-action.php @@ -0,0 +1,331 @@ +prominent_words_support = $prominent_words_support; + $this->indexable_repository = $indexable_repository; + $this->memoizer = $memoizer; + $this->meta = $meta; + } + + /** + * Returns the number of indexables to be indexed for internal linking suggestions in one batch. + * + * @return int The number of indexables to be indexed in one batch. + */ + public function get_limit() { + /** + * Filter 'wpseo_prominent_words_indexation_limit' - Allow filtering the amount of indexables indexed during each indexing pass. + * + * @param int $max The maximum number of indexables indexed. + */ + $limit = \apply_filters( 'wpseo_prominent_words_indexation_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } + + /** + * The total number of indexables without prominent words. + * + * @return int|false The total number of indexables without prominent words. False if the query fails. + */ + public function get_total_unindexed() { + $object_sub_types = $this->get_object_sub_types(); + if ( empty( $object_sub_types ) ) { + return 0; + } + + // This prevents an expensive query. + $total_unindexed = \get_transient( static::TRANSIENT_CACHE_KEY ); + if ( $total_unindexed !== false ) { + return (int) $total_unindexed; + } + + // Try a less expensive query first: check if the indexable table holds any indexables. + // If not, no need to perform a query on the prominent words version and more. + if ( ! $this->at_least_one_indexable() ) { + return 0; + } + + // Run the expensive query to find out the exact number and store it for later use. + $total_unindexed = $this->query()->count(); + \set_transient( static::TRANSIENT_CACHE_KEY, $total_unindexed, \DAY_IN_SECONDS ); + + return $total_unindexed; + } + + /** + * The total number of indexables without prominent words. + * + * @param int $limit Limit the number of unindexed objects that are counted. + * + * @return int|false The total number of indexables without prominent words. False if the query fails. + */ + public function get_limited_unindexed_count( $limit ) { + return $this->get_total_unindexed(); + } + + /** + * Retrieves a batch of indexables, to be indexed for internal linking suggestions. + * + * @return array The indexables data to use for generating prominent words. + */ + public function index() { + $object_sub_types = $this->get_object_sub_types(); + if ( empty( $object_sub_types ) ) { + return []; + } + + $indexables = $this + ->query() + ->limit( $this->get_limit() ) + ->find_many(); + + if ( \count( $indexables ) > 0 ) { + \delete_transient( static::TRANSIENT_CACHE_KEY ); + } + + // If no indexables have been left unindexed, return the empty array. + if ( ! $indexables ) { + return []; + } + + return $this->format_data( $indexables ); + } + + /** + * Creates a query that can find indexables with outdated prominent words. + * + * @return ORM Returns an ORM instance that can be used to execute the query. + */ + protected function query() { + $updated_version = WPSEO_Premium_Prominent_Words_Versioning::get_version_number(); + + return $this->indexable_repository + ->query() + ->where_in( 'object_type', [ 'post', 'term' ] ) + ->where_in( 'object_sub_type', $this->get_object_sub_types() ) + ->where_raw( '(`prominent_words_version` IS NULL OR `prominent_words_version` != ' . $updated_version . ')' ) + ->where_raw( '((`post_status` IS NULL AND `object_type` = \'term\') OR (`post_status` = \'publish\' AND `object_type` = \'post\'))' ); + } + + /** + * Creates a query that checks whether the indexable table holds at least one record. + * + * @return bool true if at the database contains at least one indexable. + */ + protected function at_least_one_indexable() { + return $this->indexable_repository + ->query() + ->select( 'id' ) + ->find_one() !== false; + } + + /** + * Retrieves a list of subtypes to get indexables for. + * + * @return array The array with object subtypes. + */ + protected function get_object_sub_types() { + if ( $this->object_sub_types === null ) { + $this->object_sub_types = \array_merge( + $this->prominent_words_support->get_supported_post_types(), + $this->prominent_words_support->get_supported_taxonomies() + ); + } + + return $this->object_sub_types; + } + + /** + * Formats the data of the given array of indexables, so it can be used to generate prominent words. + * + * @param Indexable[] $indexables The indexables to gather data for. + * + * @return array The data. + */ + protected function format_data( $indexables ) { + $data = []; + foreach ( $indexables as $indexable ) { + // Use the meta context, so we are sure that the data is the same as is output on the frontend. + $context = $this->get_context( $indexable ); + + if ( ! $context ) { + continue; + } + + $data[] = [ + 'object_id' => $indexable->object_id, + 'object_type' => $indexable->object_type, + 'content' => $this->get_content( $context ), + 'meta' => [ + 'primary_focus_keyword' => $context->indexable->primary_focus_keyword, + 'title' => $context->title, + 'description' => $context->description, + 'keyphrase_synonyms' => $this->retrieve_keyphrase_synonyms( $context->indexable ), + ], + ]; + } + + return $data; + } + + /** + * Gets the context for the current indexable. + * + * @param Indexable $indexable The indexable to get context for. + * + * @return Meta_Tags_Context|null The context object. + */ + protected function get_context( $indexable ) { + if ( $indexable->object_type === 'post' ) { + return $this->memoizer->get( $indexable, 'Post_Type' ); + } + + if ( $indexable->object_type === 'term' ) { + return $this->memoizer->get( $indexable, 'Term_Archive' ); + } + + return null; + } + + /** + * Retrieves the keyphrase synonyms for the indexable. + * + * @param Indexable $indexable The indexable to retrieve synonyms for. + * + * @return string[] The keyphrase synonyms. + */ + protected function retrieve_keyphrase_synonyms( $indexable ) { + if ( $indexable->object_type === 'post' ) { + return \json_decode( $this->meta->get_value( 'keywordsynonyms', $indexable->object_id ) ); + } + + if ( $indexable->object_type === 'term' ) { + return \json_decode( $this->meta->get_term_value( $indexable->object_id, $indexable->object_sub_type, 'wpseo_keywordsynonyms' ) ); + } + + return []; + } + + /** + * Determines the content to use. + * + * @param Meta_Tags_Context $context The meta tags context object. + * + * @return string The content associated with the given context. + */ + protected function get_content( Meta_Tags_Context $context ) { + if ( $context->indexable->object_type === 'post' ) { + global $post; + + /* + * Set the global $post to be the post in this iteration. + * This is required for post-specific shortcodes that reference the global post. + */ + + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- To setup the post we need to do this explicitly. + $post = $context->post; + + // Set up WordPress data for this post, outside of "the_loop". + \setup_postdata( $post ); + + // Wraps in output buffering to prevent shortcodes that echo stuff instead of return from breaking things. + \ob_start(); + $content = \do_shortcode( $post->post_content ); + \ob_end_clean(); + + \wp_reset_postdata(); + + return $content; + } + + if ( $context->indexable->object_type === 'term' ) { + $term = \get_term( $context->indexable->object_id, $context->indexable->object_sub_type ); + if ( $term === null || \is_wp_error( $term ) ) { + return ''; + } + + // Wraps in output buffering to prevent shortcodes that echo stuff instead of return from breaking things. + \ob_start(); + $description = \do_shortcode( $term->description ); + \ob_end_clean(); + + return $description; + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/save-action.php b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/save-action.php new file mode 100644 index 00000000..cc3b8b4f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/actions/prominent-words/save-action.php @@ -0,0 +1,212 @@ +prominent_words_repository = $prominent_words_repository; + $this->indexable_repository = $indexable_repository; + $this->prominent_words_helper = $prominent_words_helper; + } + + /** + * Passes to-be-linked prominent words to the link function, together with the object type and object id of the + * indexable to which they will need to be linked. + * + * @param array $data The data to process. This is an array consisting of associative arrays (1 per indexable) with the keys + * 'object_id', 'object_type' and 'prominent_words' (an array with 'stem' => 'weight' mappings). + * + * @return void + */ + public function save( $data ) { + if ( $data ) { + foreach ( $data as $row ) { + $prominent_words = ( $row['prominent_words'] ?? [] ); + + $this->link( $row['object_type'], $row['object_id'], $prominent_words ); + } + } + } + + /** + * Inserts, updates and removes prominent words that are now, or are no longer, associated with an indexable. + * + * @param string $object_type The object type of the indexable (e.g. `post` or `term`). + * @param int $object_id The object id of the indexable. + * @param array $words The words to link, as a `'stem' => weight` map. + * + * @return void + */ + public function link( $object_type, $object_id, $words ) { + $indexable = $this->indexable_repository->find_by_id_and_type( $object_id, $object_type ); + + if ( $indexable ) { + // Set the prominent words version number on the indexable. + $indexable->prominent_words_version = WPSEO_Premium_Prominent_Words_Versioning::get_version_number(); + + /* + * It is correct to save here, because if the indexable didn't exist yet, + * find_by_id_and_type (in the above 'save' function) will have auto-created an indexable object + * with the correct data. So we are not saving an incomplete indexable. + */ + $indexable->save(); + + // Find the prominent words that were already associated with this indexable. + $old_words = $this->prominent_words_repository->find_by_indexable_id( $indexable->id ); + + // Handle these words. + $words = $this->handle_old_words( $indexable->id, $old_words, $words ); + + // Create database entries for all new words that are not yet in the database. + $this->create_words( $indexable->id, $words ); + } + } + + /** + * Deletes outdated prominent words from the database, and otherwise considers + * whether the old words need to have their weights updated. + * + * @param int $indexable_id The id of the indexable which needs to have its + * old words updated. + * @param Prominent_Words[] $old_words An array with prominent words that were already + * present in the database for a given indexable. + * @param array $words The new prominent words for a given indexable. + * + * @return array The words that need to be created. + */ + protected function handle_old_words( $indexable_id, $old_words, $words ) { + // Return early if the indexable didn't already have any prominent words associated with it. + if ( empty( $old_words ) ) { + return $words; + } + + $outdated_stems = []; + + foreach ( $old_words as $old_word ) { + // If an old prominent word is no longer associated with an indexable, + // add it to the array with outdated stems, so that at a later step + // it can be deleted from the database. + if ( ! \array_key_exists( $old_word->stem, $words ) ) { + $outdated_stems[] = $old_word->stem; + + continue; + } + + // If the old word should still be associated with the indexable, + // update its weight if that has changed. + $this->update_weight_if_changed( $old_word, $words[ $old_word->stem ] ); + + // Remove the key from the array with the new prominent words. + unset( $words[ $old_word->stem ] ); + } + + // Delete all the outdated prominent words in one query. + try { + $this->prominent_words_repository->delete_by_indexable_id_and_stems( $indexable_id, $outdated_stems ); + // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- There is nothing to do. + } catch ( Exception $exception ) { + // Do nothing. + } + + return $words; + } + + /** + * Updates the weight of the given prominent word, if the weight has changed significantly. + * + * @param Prominent_Words $word The prominent word of which to update the weight. + * @param float $new_weight The new weight. + * + * @return void + */ + protected function update_weight_if_changed( $word, $new_weight ) { + if ( \abs( $word->weight - $new_weight ) > 0.1 ) { + $word->weight = $new_weight; + $word->save(); + } + } + + /** + * Creates the given words in the database and links them to the indexable with the given id. + * + * @param int $indexable_id The ID of the indexable. + * @param array $words The prominent words to create, as a `'stem'` => weight` map. + * + * @return void + */ + protected function create_words( $indexable_id, $words ) { + // Return early if there are no new words to add to the database. + if ( empty( $words ) ) { + return; + } + + $new_models = []; + + foreach ( $words as $stem => $weight ) { + $new_model = $this->prominent_words_repository->query()->create( + [ + 'indexable_id' => $indexable_id, + 'stem' => $stem, + 'weight' => $weight, + ] + ); + $new_models[] = $new_model; + } + + try { + $this->prominent_words_repository->query()->insert_many( $new_models ); + // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- There is nothing to do. + } catch ( Exception $exception ) { + // Do nothing. + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/addon-installer.php b/wp/wp-content/plugins/wordpress-seo-premium/src/addon-installer.php new file mode 100644 index 00000000..b743e5c9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/addon-installer.php @@ -0,0 +1,451 @@ +base_dir = $base_dir; + } + + /** + * Performs the installer if it hasn't been done yet. + * + * A notice will be shown in the admin if the installer failed. + * + * @return void + */ + public function install_yoast_seo_from_repository() { + \add_action( 'admin_notices', [ $this, 'show_install_yoast_seo_notification' ] ); + \add_action( 'network_admin_notices', [ $this, 'show_install_yoast_seo_notification' ] ); + \add_action( 'plugins_loaded', [ $this, 'validate_installation_status' ] ); + if ( ! $this->get_status() ) { + try { + $this->install(); + } catch ( Exception $e ) { + // Auto installation failed, the notice will be displayed. + return; + } + } + elseif ( $this->get_status() === 'started' ) { + require_once \ABSPATH . 'wp-admin/includes/plugin.php'; + $this->detect_yoast_seo(); + if ( \is_plugin_active( $this->yoast_seo_file ) ) { + // Yoast SEO is active so mark installation as successful. + \update_option( self::OPTION_KEY, 'completed', true ); + // Enable tracking. + if ( \class_exists( WPSEO_Options::class ) ) { + WPSEO_Premium_Option::register_option(); + if ( WPSEO_Options::get( 'toggled_tracking' ) !== true ) { + WPSEO_Options::set( 'tracking', true ); + } + WPSEO_Options::set( 'should_redirect_after_install', true ); + } + + if ( \class_exists( WPSEO_Capability_Manager_Factory::class ) ) { + \do_action( 'wpseo_register_capabilities_premium' ); + WPSEO_Capability_Manager_Factory::get( 'premium' )->add(); + } + } + } + } + + /** + * Performs the installer if it hasn't been done yet. + * Otherwise attempts to load Yoast SEO from the vendor directory. + * + * @deprecated 21.9 + * @codeCoverageIgnore + * + * @return void + */ + public function install_or_load_yoast_seo_from_vendor_directory() { + \_deprecated_function( __METHOD__, 'Yoast SEO Premium 21.9' ); + } + + /** + * Displays a notification to install Yoast SEO. + * + * @return void + */ + public function show_install_yoast_seo_notification() { + if ( ! $this->should_show_notification() ) { + return; + } + + require_once \ABSPATH . 'wp-admin/includes/plugin.php'; + $this->detect_yoast_seo(); + + $action = $this->get_notification_action(); + + if ( ! $action ) { + return; + } + + echo ( + '
      ' + . '

      ' + . \sprintf( + /* translators: %1$s: Yoast SEO, %2$s: The minimum Yoast SEO version required, %3$s: Yoast SEO Premium. */ + \esc_html__( '%1$s %2$s must be installed and activated in order to use %3$s.', 'wordpress-seo-premium' ), + 'Yoast SEO', + \esc_html( self::MINIMUM_YOAST_SEO_VERSION ), + 'Yoast SEO Premium' + ) + . '

      ' + . '

      ' + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output is escaped above. + . $action + . '

      ' + . '
      ' + ); + } + + /** + * Returns the notification action to display. + * + * @return false|string The notification action or false if no action should be taken. + */ + protected function get_notification_action() { + $minimum_version_met = \version_compare( $this->yoast_seo_version, self::MINIMUM_YOAST_SEO_VERSION . '-RC0', '>=' ); + $network_active = \is_plugin_active_for_network( \WPSEO_PREMIUM_BASENAME ); + $yoast_seo_active = ( $network_active ) ? \is_plugin_active_for_network( $this->yoast_seo_file ) : \is_plugin_active( $this->yoast_seo_file ); + + if ( $minimum_version_met && $yoast_seo_active ) { + return false; + } + + if ( $minimum_version_met ) { + $permission = 'activate_plugins'; + } + elseif ( $this->yoast_seo_version !== '0' ) { + $permission = 'update_plugins'; + } + else { + $permission = 'install_plugins'; + } + + if ( \current_user_can( $permission ) ) { + switch ( $permission ) { + case 'activate_plugins': + if ( $network_active ) { + $base_url = \network_admin_url( 'plugins.php?action=activate&plugin=' . $this->yoast_seo_file ); + /* translators: %1$s: Yoast SEO, %2$s: Link start tag, %3$s: Link end tag. */ + $button_content = \__( '%2$sNetwork Activate %1$s now%3$s', 'wordpress-seo-premium' ); + } + else { + $base_url = \self_admin_url( 'plugins.php?action=activate&plugin=' . $this->yoast_seo_file ); + /* translators: %1$s: Yoast SEO, %2$s: Link start tag, %3$s: Link end tag. */ + $button_content = \__( '%2$sActivate %1$s now%3$s', 'wordpress-seo-premium' ); + } + $url = \wp_nonce_url( $base_url, 'activate-plugin_' . $this->yoast_seo_file ); + break; + case 'update_plugins': + $url = \wp_nonce_url( \self_admin_url( 'update.php?action=upgrade-plugin&plugin=' . $this->yoast_seo_file ), 'upgrade-plugin_' . $this->yoast_seo_file ); + /* translators: %1$s: Yoast SEO, %2$s: Link start tag, %3$s: Link end tag. */ + $button_content = \__( '%2$sUpgrade %1$s now%3$s', 'wordpress-seo-premium' ); + break; + case 'install_plugins': + $url = \wp_nonce_url( \self_admin_url( 'update.php?action=install-plugin&plugin=wordpress-seo' ), 'install-plugin_wordpress-seo' ); + /* translators: %1$s: Yoast SEO, %2$s: Link start tag, %3$s: Link end tag. */ + $button_content = \__( '%2$sInstall %1$s now%3$s', 'wordpress-seo-premium' ); + break; + } + return \sprintf( + \esc_html( $button_content ), + 'Yoast SEO', + '', + '' + ); + } + + if ( \is_multisite() ) { + /* translators: %1$s: Yoast SEO, %2$s: The minimum Yoast SEO version required. */ + $message = \__( 'Please contact a network administrator to install %1$s %2$s.', 'wordpress-seo-premium' ); + } + else { + /* translators: %1$s: Yoast SEO, %2$s: The minimum Yoast SEO version required. */ + $message = \__( 'Please contact an administrator to install %1$s %2$s.', 'wordpress-seo-premium' ); + } + return \sprintf( + \esc_html( $message ), + 'Yoast SEO', + \esc_html( self::MINIMUM_YOAST_SEO_VERSION ) + ); + } + + /** + * Checks if Yoast SEO is at a minimum required version. + * + * @return bool True if Yoast SEO is at a minimal required version + */ + public static function is_yoast_seo_up_to_date() { + return ( \defined( 'WPSEO_VERSION' ) && \version_compare( \WPSEO_VERSION, self::MINIMUM_YOAST_SEO_VERSION . '-RC0', '>=' ) ); + } + + /** + * Resets the installation status if Yoast SEO is not installed or outdated. + * + * @return void + */ + public function validate_installation_status() { + if ( ! self::is_yoast_seo_up_to_date() ) { + \delete_option( self::OPTION_KEY ); + } + } + + /** + * Returns the status of the installer. + * + * This uses a separate option from our options framework as it needs to be available + * before Yoast SEO has been loaded. + * + * @return false|string false if the installer hasn't been started. + * "started" if it has but hasn't completed. + * "completed" if it has been completed. + */ + protected function get_status() { + return \get_option( self::OPTION_KEY ); + } + + /** + * Installs to premium as an addon. + * + * @return void + * + * @throws Exception If the installer failed. + */ + protected function install() { + if ( $this->get_status() ) { + return; + } + // Mark the installer as having been started but not completed. + \update_option( self::OPTION_KEY, 'started', true ); + + require_once \ABSPATH . 'wp-admin/includes/plugin.php'; + + $this->detect_yoast_seo(); + // Either the plugin is not installed or is installed and too old. + if ( \version_compare( $this->yoast_seo_version, self::MINIMUM_YOAST_SEO_VERSION . '-RC0', '<' ) ) { + include_once \ABSPATH . 'wp-includes/pluggable.php'; + include_once \ABSPATH . 'wp-admin/includes/file.php'; + include_once \ABSPATH . 'wp-admin/includes/misc.php'; + require_once \ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + + // The class is defined inline to avoid problems with the autoloader when extending a WP class. + $skin = new class() extends Plugin_Installer_Skin { + + /** + * Suppresses the header. + * + * @return void + */ + public function header() { + } + + /** + * Suppresses the footer. + * + * @return void + */ + public function footer() { + } + + /** + * Suppresses the errors. + * + * @phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- Flags unused params which are required via the interface. Invalid. + * + * @param string|WP_Error $errors Errors. + * + * @return void + */ + public function error( $errors ) { + } + + /** + * Suppresses the feedback. + * + * @phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- Flags unused params which are required via the interface. Invalid. + * + * @param string $feedback Message data. + * @param array ...$args Optional text replacements. + * + * @return void + */ + public function feedback( $feedback, ...$args ) { + } + }; + + // Check if the minimum version is available, otherwise we'll download the zip from SVN trunk (which should be the latest RC). + $url = 'https://downloads.wordpress.org/plugin/wordpress-seo.' . self::MINIMUM_YOAST_SEO_VERSION . '.zip'; + $check_result = \wp_remote_retrieve_response_code( \wp_remote_head( $url ) ); + if ( $check_result !== 200 ) { + $url = 'https://downloads.wordpress.org/plugin/wordpress-seo.zip'; + } + + $upgrader = new Plugin_Upgrader( $skin ); + $installed = $upgrader->install( $url ); + if ( \is_wp_error( $installed ) || ! $installed ) { + throw new Exception( 'Could not automatically install Yoast SEO' ); + } + } + + $this->ensure_yoast_seo_is_activated(); + $this->transfer_auto_update_settings(); + // Mark the installer as having been completed. + \update_option( self::OPTION_KEY, 'completed', true ); + } + + /** + * Detects the Yoast SEO plugin file and version. + * + * @return void + */ + protected function detect_yoast_seo() { + // Make sure Yoast SEO isn't already installed in another directory. + foreach ( \get_plugins() as $file => $plugin ) { + // Use text domain to identify the plugin as it's the closest thing to a slug. + if ( + isset( $plugin['TextDomain'] ) && $plugin['TextDomain'] === 'wordpress-seo' + && isset( $plugin['Name'] ) && $plugin['Name'] === 'Yoast SEO' + ) { + $this->yoast_seo_file = $file; + $this->yoast_seo_version = ( $plugin['Version'] ?? '0' ); + $this->yoast_seo_dir = \WP_PLUGIN_DIR . '/' . \dirname( $file ); + } + } + } + + /** + * Activates Yoast SEO. + * + * @return void + * + * @throws Exception If Yoast SEO could not be activated. + */ + protected function ensure_yoast_seo_is_activated() { + if ( ! \is_plugin_active( $this->yoast_seo_file ) ) { + $network_active = \is_plugin_active_for_network( \WPSEO_PREMIUM_BASENAME ); + // If we're not active at all it means we're being activated. + if ( ! $network_active && ! \is_plugin_active( \WPSEO_PREMIUM_BASENAME ) ) { + // So set network active to whether or not we're in the network admin. + $network_active = \is_network_admin(); + } + // Activate Yoast SEO. If Yoast SEO Premium is network active then make sure Yoast SEO is as well. + $activation = \activate_plugin( $this->yoast_seo_file, '', $network_active ); + if ( \is_wp_error( $activation ) ) { + throw new Exception( \esc_html( 'Could not activate Yoast SEO: ' . $activation->get_error_message() ) ); + } + } + } + + /** + * Transfers the auto update settings for Yoast SEO Premium to Yoast SEO. + * + * @return void + */ + protected function transfer_auto_update_settings() { + $auto_updates = (array) \get_site_option( 'auto_update_plugins', [] ); + + if ( \in_array( \WPSEO_PREMIUM_BASENAME, $auto_updates, true ) ) { + $auto_updates[] = $this->yoast_seo_file; + $auto_updates = \array_unique( $auto_updates ); + \update_site_option( 'auto_update_plugins', $auto_updates ); + } + } + + /** + * Wether or not the notification to install Yoast SEO should be shown. + * + * This is copied from the Yoast_Admin_And_Dashboard_Conditional which we can't use as Yoast SEO may not be installed. + * + * @return bool + */ + protected function should_show_notification() { + global $pagenow; + + // Do not output on plugin / theme upgrade pages or when WordPress is upgrading. + if ( ( \defined( 'IFRAME_REQUEST' ) && \IFRAME_REQUEST ) || \wp_installing() ) { + return false; + } + + /* + * IFRAME_REQUEST is not defined on these pages, + * though these action pages do show when upgrading themes or plugins. + */ + $actions = [ 'do-theme-upgrade', 'do-plugin-upgrade', 'do-core-upgrade', 'do-core-reinstall' ]; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['action'] ) && \in_array( $_GET['action'], $actions, true ) ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput -- Reason: We are not processing form information, only a strpos is done in the input. + if ( $pagenow === 'admin.php' && isset( $_GET['page'] ) && \strpos( $_GET['page'], 'wpseo' ) === 0 ) { + return true; + } + + $target_pages = [ + 'index.php', + 'plugins.php', + 'update-core.php', + 'options-permalink.php', + ]; + + return \in_array( $pagenow, $target_pages, true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/ai-editor-conditional.php b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/ai-editor-conditional.php new file mode 100644 index 00000000..6836979d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/ai-editor-conditional.php @@ -0,0 +1,77 @@ +post_conditional = $post_conditional; + $this->current_page_helper = $current_page_helper; + } + + /** + * Returns `true` when the AI editor integration should be active. + * + * @return bool `true` when the AI editor integration should be active. + */ + public function is_met() { + return $this->post_conditional->is_met() || $this->is_term() || $this->is_elementor_editor(); + } + + /** + * Returns `true` when the page is a term page. + * + * @return bool `true` when the page is a term page. + */ + private function is_term() { + return $this->current_page_helper->get_current_admin_page() === 'term.php'; + } + + /** + * Returns `true` when the page is the Elementor editor. + * + * @return bool `true` when the page is the Elementor editor. + */ + private function is_elementor_editor() { + if ( $this->current_page_helper->get_current_admin_page() !== 'post.php' ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['action'] ) && \is_string( $_GET['action'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, We are only strictly comparing. + if ( \wp_unslash( $_GET['action'] ) === 'elementor' ) { + return true; + } + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/algolia-enabled-conditional.php b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/algolia-enabled-conditional.php new file mode 100644 index 00000000..396f9488 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/algolia-enabled-conditional.php @@ -0,0 +1,37 @@ +options_helper = $options_helper; + } + + /** + * Returns whether or not this conditional is met. + * + * @return bool Whether or not the conditional is met. + */ + public function is_met() { + return $this->options_helper->get( 'algolia_integration_active' ) === true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/cornerstone-enabled-conditional.php b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/cornerstone-enabled-conditional.php new file mode 100644 index 00000000..54c9010b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/cornerstone-enabled-conditional.php @@ -0,0 +1,39 @@ +options_helper = $options_helper; + } + + /** + * Returns `true` when the cornerstone content feature is enabled. + * + * @return bool `true` when the cornerstone content feature is enabled. + */ + public function is_met() { + return $this->options_helper->get( 'enable_cornerstone_content' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/edd-conditional.php b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/edd-conditional.php new file mode 100644 index 00000000..b82d48c3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/edd-conditional.php @@ -0,0 +1,20 @@ +is_enabled(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/term-overview-or-ajax-conditional.php b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/term-overview-or-ajax-conditional.php new file mode 100644 index 00000000..90c1dc0e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/conditionals/term-overview-or-ajax-conditional.php @@ -0,0 +1,23 @@ +yoast_admin_conditional = $yoast_admin_conditional; + } + + /** + * Returns whether this conditional is met. + * + * @return bool Whether the conditional is met. + */ + public function is_met() { + if ( $this->yoast_admin_conditional->is_met() ) { + return true; + } + + if ( $this->is_post_request() && $this->is_introductions_rest_request() ) { + return true; + } + + return false; + } + + /** + * Whether the request method is POST. + * + * @return bool + */ + private function is_post_request() { + if ( ! isset( $_SERVER['REQUEST_METHOD'] ) ) { + return false; + } + + return $_SERVER['REQUEST_METHOD'] === 'POST'; + } + + /** + * Whether the request URI starts with the prefix, Yoast API V1 and introductions. + * + * @return bool + */ + private function is_introductions_rest_request() { + if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { + return false; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- Variable is only used in a case-insensitive comparison. + return \stripos( $_SERVER['REQUEST_URI'], '/' . \rest_get_url_prefix() . '/' . Main::API_V1_NAMESPACE . '/introductions/' ) === 0; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/config/badge-group-names.php b/wp/wp-content/plugins/wordpress-seo-premium/src/config/badge-group-names.php new file mode 100644 index 00000000..15ea0281 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/config/badge-group-names.php @@ -0,0 +1,37 @@ + '16.5-beta0', + ]; + + /** + * Badge_Group_Names constructor. + * + * @param string|null $version Optional. The current version number. + */ + public function __construct( $version = null ) { + parent::__construct( $version ); + + if ( ! $version ) { + $version = \WPSEO_PREMIUM_VERSION; + } + $this->version = $version; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20190715101200_WpYoastPremiumImprovedInternalLinking.php b/wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20190715101200_WpYoastPremiumImprovedInternalLinking.php new file mode 100644 index 00000000..346d6c57 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20190715101200_WpYoastPremiumImprovedInternalLinking.php @@ -0,0 +1,97 @@ +get_table_name(); + $adapter = $this->get_adapter(); + + if ( ! $adapter->has_table( $table_name ) ) { + $table = $this->create_table( $table_name ); + + $table->column( + 'stem', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $table->column( + 'indexable_id', + 'integer', + [ + 'unsigned' => true, + 'null' => true, + 'limit' => 11, + ] + ); + $table->column( 'weight', 'float' ); + + $table->finish(); + } + + if ( ! $adapter->has_index( $table_name, 'stem', [ 'name' => 'stem' ] ) ) { + $this->add_index( + $table_name, + [ + 'stem', + ], + [ + 'name' => 'stem', + ] + ); + } + + if ( ! $adapter->has_index( $table_name, 'indexable_id', [ 'name' => 'indexable_id' ] ) ) { + $this->add_index( + $table_name, + [ + 'indexable_id', + ], + [ + 'name' => 'indexable_id', + ] + ); + } + } + + /** + * Migration down. + */ + public function down() { + $table_name = $this->get_table_name(); + if ( $this->get_adapter()->has_table( $table_name ) ) { + $this->drop_table( $table_name ); + } + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Prominent_Words' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20210827093024_AddIndexOnIndexableIdAndStem.php b/wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20210827093024_AddIndexOnIndexableIdAndStem.php new file mode 100644 index 00000000..b42d7d24 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/config/migrations/20210827093024_AddIndexOnIndexableIdAndStem.php @@ -0,0 +1,85 @@ +get_table_name(); + $adapter = $this->get_adapter(); + + if ( ! $adapter->has_table( $table_name ) ) { + return; + } + + // Create the index if it doesn't exist already. + if ( ! $adapter->has_index( $table_name, $this->columns_with_index, [ 'name' => 'indexable_id_and_stem' ] ) ) { + $this->add_index( + $this->get_table_name(), + $this->columns_with_index, + [ 'name' => 'indexable_id_and_stem' ] + ); + } + } + + /** + * Migration down. Removes the combined index on 'indexable_id' and 'stem'. + * + * @return void + */ + public function down() { + $table_name = $this->get_table_name(); + $adapter = $this->get_adapter(); + + if ( ! $adapter->has_table( $table_name ) ) { + return; + } + + // Remove the index if it exists. + if ( $adapter->has_index( $table_name, $this->columns_with_index, [ 'name' => 'indexable_id_and_stem' ] ) ) { + + $this->remove_index( + $this->get_table_name(), + $this->columns_with_index, + [ 'name' => 'indexable_id_and_stem' ] + ); + } + } + + /** + * Retrieves the table name to use for storing prominent words. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Prominent_Words' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/database/migration-runner-premium.php b/wp/wp-content/plugins/wordpress-seo-premium/src/database/migration-runner-premium.php new file mode 100644 index 00000000..11ba8475 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/database/migration-runner-premium.php @@ -0,0 +1,37 @@ +run_premium_migrations(); + + // The below action is used when queries fail, this may happen in a multisite environment when switch_to_blog is used. + \add_action( '_yoast_run_migrations', [ $this, 'run_premium_migrations' ] ); + } + + /** + * Runs the Premium migrations. + * + * @return void + * + * @throws Exception When a migration errored. + */ + public function run_premium_migrations() { + $this->run_migrations( 'premium', \WPSEO_PREMIUM_VERSION ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/forbidden-property-mutation-exception.php b/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/forbidden-property-mutation-exception.php new file mode 100644 index 00000000..84f48592 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/forbidden-property-mutation-exception.php @@ -0,0 +1,34 @@ +missing_licenses = $missing_licenses; + parent::__construct( $message, $code, $error_identifier, $previous ); + } + + /** + * Gets the missing plugin licences. + * + * @return string[] The missing plugin licenses. + */ + public function get_missing_licenses() { + return $this->missing_licenses; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/remote-request-exception.php b/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/remote-request-exception.php new file mode 100644 index 00000000..2c36fe05 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/remote-request-exception.php @@ -0,0 +1,40 @@ +error_identifier = (string) $error_identifier; + } + + /** + * Returns the error identifier. + * + * @return string The error identifier. + */ + public function get_error_identifier(): string { + return $this->error_identifier; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/request-timeout-exception.php b/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/request-timeout-exception.php new file mode 100644 index 00000000..74903c23 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/exceptions/remote-request/request-timeout-exception.php @@ -0,0 +1,10 @@ +load(); + } + } + else { + add_action( 'wpseo_loaded', 'YoastSEOPremium' ); + } + + return $main; +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/draft-js-emoji-picker.php b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/draft-js-emoji-picker.php new file mode 100644 index 00000000..9dd4e4ce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/draft-js-emoji-picker.php @@ -0,0 +1 @@ + array('dependencies' => array('lodash', 'react', 'wp-polyfill', 'yoast-seo-draft-js-package', 'yoast-seo-prop-types-package'), 'version' => 'e941559b9bed6a91096b')); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/externals.php b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/externals.php new file mode 100644 index 00000000..2249b04f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/externals.php @@ -0,0 +1 @@ + array('dependencies' => array('lodash', 'react', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-prop-types-package', 'yoast-seo-replacement-variable-editor-package', 'yoast-seo-social-metadata-forms-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '1c09414490cdc1f8c9ba')); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/plugin.php b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/plugin.php new file mode 100644 index 00000000..3bdd39bc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/assets/plugin.php @@ -0,0 +1 @@ + array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '89fe4fca605dfe56fc36'), 'yoast-premium-social-metadata-previews-2290.min.js' => array('dependencies' => array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-polyfill', 'yoast-seo-prop-types-package', 'yoast-seo-social-metadata-previews-package'), 'version' => 'dbee696f537f6214203b'), 'wp-seo-premium-admin-redirects-2290.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-polyfill'), 'version' => 'e32f0676ce2f298b5fd4'), 'wp-seo-premium-custom-fields-plugin-2290.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '72f2633d565d0505c093'), 'wp-seo-premium-quickedit-notification-2290.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-polyfill'), 'version' => '76c42b45e36bd01437b2'), 'wp-seo-premium-redirect-notifications-2290.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-polyfill'), 'version' => '5a20a9c95c17ef82a10b'), 'wp-seo-premium-redirect-notifications-gutenberg-2290.min.js' => array('dependencies' => array('react', 'wp-api-fetch', 'wp-components', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package'), 'version' => '621e83f3ab96b99b4153'), 'wp-seo-premium-metabox-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-components-new-package', 'yoast-seo-feature-flag-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => 'bd60ab29a268fbdd937a'), 'wp-seo-premium-draft-js-plugins-2290.min.js' => array('dependencies' => array('react', 'wp-components', 'wp-element', 'wp-hooks', 'wp-polyfill', 'yoast-seo-prop-types-package'), 'version' => 'e8a252b259e7e069b8dd'), 'dynamic-blocks-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-server-side-render'), 'version' => '6bcb7d455494ec9dd22a'), 'blocks-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => 'c0c424c6e3234f154748'), 'workouts-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-analysis-package', 'yoast-seo-components-new-package', 'yoast-seo-prop-types-package', 'yoast-seo-react-select', 'yoast-seo-style-guide-package'), 'version' => '764f8fcf7ef81b7d2843'), 'frontend-inspector-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-prop-types-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '7d52f7618584c58a9a39'), 'wp-seo-premium-elementor-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-components-new-package', 'yoast-seo-feature-flag-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-social-metadata-previews-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => 'cd5cef646291e38cd1bc'), 'register-text-formality-2290.min.js' => array('dependencies' => array('wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '3125f027fb4a3bfea429'), 'register-premium-assessments-2290.min.js' => array('dependencies' => array('wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '41297668826d0ed71fc0'), 'ai-generator-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-search-metadata-previews-package', 'yoast-seo-social-metadata-previews-package', 'yoast-seo-ui-library-package'), 'version' => '8c048bad62cdc6a63801'), 'introductions-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-ui-library-package'), 'version' => '6e296bb57144a3ffc9ea'), 'manage-ai-consent-button-2290.min.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-ui-library-package'), 'version' => '7e6104183929e5398b40')); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/generated/container.php b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/container.php new file mode 100644 index 00000000..bbbf5b8d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/generated/container.php @@ -0,0 +1,1762 @@ +services = []; + $this->normalizedIds = [ + 'wpseo_addon_manager' => 'WPSEO_Addon_Manager', + 'wpseo_admin_asset_manager' => 'WPSEO_Admin_Asset_Manager', + 'wpseo_premium_prominent_words_support' => 'WPSEO_Premium_Prominent_Words_Support', + 'wpseo_premium_prominent_words_unindexed_post_query' => 'WPSEO_Premium_Prominent_Words_Unindexed_Post_Query', + 'wpseo_shortlinker' => 'WPSEO_Shortlinker', + 'yoast\\wp\\lib\\migrations\\adapter' => 'Yoast\\WP\\Lib\\Migrations\\Adapter', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_general_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_post_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_post_type_archive_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_term_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action', + 'yoast\\wp\\seo\\builders\\indexable_term_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder', + 'yoast\\wp\\seo\\conditionals\\admin\\post_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\posts_overview_or_ajax_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\yoast_admin_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional', + 'yoast\\wp\\seo\\conditionals\\front_end_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional', + 'yoast\\wp\\seo\\conditionals\\migrations_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional', + 'yoast\\wp\\seo\\conditionals\\open_graph_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional', + 'yoast\\wp\\seo\\conditionals\\robots_txt_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional', + 'yoast\\wp\\seo\\conditionals\\settings_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\elementor_activated_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\elementor_edit_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional', + 'yoast\\wp\\seo\\conditionals\\user_profile_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional', + 'yoast\\wp\\seo\\conditionals\\wincher_enabled_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional', + 'yoast\\wp\\seo\\config\\migration_status' => 'Yoast\\WP\\SEO\\Config\\Migration_Status', + 'yoast\\wp\\seo\\config\\migrations\\wpyoastpremiumimprovedinternallinking' => 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPremiumImprovedInternalLinking', + 'yoast\\wp\\seo\\helpers\\capability_helper' => 'Yoast\\WP\\SEO\\Helpers\\Capability_Helper', + 'yoast\\wp\\seo\\helpers\\current_page_helper' => 'Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper', + 'yoast\\wp\\seo\\helpers\\date_helper' => 'Yoast\\WP\\SEO\\Helpers\\Date_Helper', + 'yoast\\wp\\seo\\helpers\\indexable_helper' => 'Yoast\\WP\\SEO\\Helpers\\Indexable_Helper', + 'yoast\\wp\\seo\\helpers\\indexing_helper' => 'Yoast\\WP\\SEO\\Helpers\\Indexing_Helper', + 'yoast\\wp\\seo\\helpers\\language_helper' => 'Yoast\\WP\\SEO\\Helpers\\Language_Helper', + 'yoast\\wp\\seo\\helpers\\meta_helper' => 'Yoast\\WP\\SEO\\Helpers\\Meta_Helper', + 'yoast\\wp\\seo\\helpers\\options_helper' => 'Yoast\\WP\\SEO\\Helpers\\Options_Helper', + 'yoast\\wp\\seo\\helpers\\post_type_helper' => 'Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper', + 'yoast\\wp\\seo\\helpers\\request_helper' => 'Yoast\\WP\\SEO\\Helpers\\Request_Helper', + 'yoast\\wp\\seo\\helpers\\robots_helper' => 'Yoast\\WP\\SEO\\Helpers\\Robots_Helper', + 'yoast\\wp\\seo\\helpers\\score_icon_helper' => 'Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper', + 'yoast\\wp\\seo\\helpers\\social_profiles_helper' => 'Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper', + 'yoast\\wp\\seo\\helpers\\url_helper' => 'Yoast\\WP\\SEO\\Helpers\\Url_Helper', + 'yoast\\wp\\seo\\helpers\\user_helper' => 'Yoast\\WP\\SEO\\Helpers\\User_Helper', + 'yoast\\wp\\seo\\integrations\\admin\\admin_columns_cache_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration', + 'yoast\\wp\\seo\\integrations\\third_party\\translationspress' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\TranslationsPress', + 'yoast\\wp\\seo\\integrations\\third_party\\wincher_keyphrases' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Keyphrases', + 'yoast\\wp\\seo\\introductions\\infrastructure\\wistia_embed_permission_repository' => 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository', + 'yoast\\wp\\seo\\loader' => 'Yoast\\WP\\SEO\\Loader', + 'yoast\\wp\\seo\\memoizers\\meta_tags_context_memoizer' => 'Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer', + 'yoast\\wp\\seo\\premium\\actions\\ai_generator_action' => 'Yoast\\WP\\SEO\\Premium\\Actions\\AI_Generator_Action', + 'yoast\\wp\\seo\\premium\\actions\\link_suggestions_action' => 'Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action', + 'yoast\\wp\\seo\\premium\\actions\\prominent_words\\complete_action' => 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action', + 'yoast\\wp\\seo\\premium\\actions\\prominent_words\\content_action' => 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action', + 'yoast\\wp\\seo\\premium\\actions\\prominent_words\\save_action' => 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action', + 'yoast\\wp\\seo\\premium\\conditionals\\ai_editor_conditional' => 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Ai_Editor_Conditional', + 'yoast\\wp\\seo\\premium\\conditionals\\algolia_enabled_conditional' => 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Algolia_Enabled_Conditional', + 'yoast\\wp\\seo\\premium\\conditionals\\cornerstone_enabled_conditional' => 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Cornerstone_Enabled_Conditional', + 'yoast\\wp\\seo\\premium\\conditionals\\edd_conditional' => 'Yoast\\WP\\SEO\\Premium\\Conditionals\\EDD_Conditional', + 'yoast\\wp\\seo\\premium\\conditionals\\inclusive_language_enabled_conditional' => 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Inclusive_Language_Enabled_Conditional', + 'yoast\\wp\\seo\\premium\\conditionals\\term_overview_or_ajax_conditional' => 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Term_Overview_Or_Ajax_Conditional', + 'yoast\\wp\\seo\\premium\\conditionals\\yoast_admin_or_introductions_route_conditional' => 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Yoast_Admin_Or_Introductions_Route_Conditional', + 'yoast\\wp\\seo\\premium\\config\\badge_group_names' => 'Yoast\\WP\\SEO\\Premium\\Config\\Badge_Group_Names', + 'yoast\\wp\\seo\\premium\\config\\migrations\\addindexonindexableidandstem' => 'Yoast\\WP\\SEO\\Premium\\Config\\Migrations\\AddIndexOnIndexableIdAndStem', + 'yoast\\wp\\seo\\premium\\database\\migration_runner_premium' => 'Yoast\\WP\\SEO\\Premium\\Database\\Migration_Runner_Premium', + 'yoast\\wp\\seo\\premium\\helpers\\ai_generator_helper' => 'Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper', + 'yoast\\wp\\seo\\premium\\helpers\\current_page_helper' => 'Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper', + 'yoast\\wp\\seo\\premium\\helpers\\prominent_words_helper' => 'Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper', + 'yoast\\wp\\seo\\premium\\helpers\\version_helper' => 'Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper', + 'yoast\\wp\\seo\\premium\\initializers\\index_now_key' => 'Yoast\\WP\\SEO\\Premium\\Initializers\\Index_Now_Key', + 'yoast\\wp\\seo\\premium\\initializers\\introductions_initializer' => 'Yoast\\WP\\SEO\\Premium\\Initializers\\Introductions_Initializer', + 'yoast\\wp\\seo\\premium\\initializers\\plugin' => 'Yoast\\WP\\SEO\\Premium\\Initializers\\Plugin', + 'yoast\\wp\\seo\\premium\\initializers\\redirect_handler' => 'Yoast\\WP\\SEO\\Premium\\Initializers\\Redirect_Handler', + 'yoast\\wp\\seo\\premium\\initializers\\woocommerce' => 'Yoast\\WP\\SEO\\Premium\\Initializers\\Woocommerce', + 'yoast\\wp\\seo\\premium\\initializers\\wp_cli_initializer' => 'Yoast\\WP\\SEO\\Premium\\Initializers\\Wp_Cli_Initializer', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\ai_consent_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Consent_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\ai_generator_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Generator_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\cornerstone_column_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Column_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\cornerstone_taxonomy_column_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Taxonomy_Column_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\inclusive_language_column_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Column_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\inclusive_language_filter_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Filter_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\inclusive_language_taxonomy_column_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Taxonomy_Column_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\keyword_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Keyword_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\metabox_formatter_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Metabox_Formatter_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\plugin_links_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Plugin_Links_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\prominent_words\\indexing_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Indexing_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\prominent_words\\metabox_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Metabox_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\related_keyphrase_filter_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Related_Keyphrase_Filter_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\replacement_variables_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Replacement_Variables_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\settings_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Settings_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\thank_you_page_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Thank_You_Page_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\update_premium_notification' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Update_Premium_Notification', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\user_profile_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\User_Profile_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\admin\\workouts_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Workouts_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\alerts\\ai_generator_tip_notification' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Alerts\\Ai_Generator_Tip_Notification', + 'yoast\\wp\\seo\\premium\\integrations\\blocks\\estimated_reading_time_block' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Estimated_Reading_Time_Block', + 'yoast\\wp\\seo\\premium\\integrations\\blocks\\related_links_block' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Related_Links_Block', + 'yoast\\wp\\seo\\premium\\integrations\\cleanup_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Cleanup_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\front_end\\robots_txt_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Front_End\\Robots_Txt_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\frontend_inspector' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Frontend_Inspector', + 'yoast\\wp\\seo\\premium\\integrations\\index_now_ping' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Index_Now_Ping', + 'yoast\\wp\\seo\\premium\\integrations\\missing_indexables_count_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Missing_Indexables_Count_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\opengraph_author_archive' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Author_Archive', + 'yoast\\wp\\seo\\premium\\integrations\\opengraph_date_archive' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Date_Archive', + 'yoast\\wp\\seo\\premium\\integrations\\opengraph_post_type' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Post_Type', + 'yoast\\wp\\seo\\premium\\integrations\\opengraph_posttype_archive' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_PostType_Archive', + 'yoast\\wp\\seo\\premium\\integrations\\opengraph_term_archive' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Term_Archive', + 'yoast\\wp\\seo\\premium\\integrations\\organization_schema_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Organization_Schema_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\publishing_principles_schema_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Publishing_Principles_Schema_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\routes\\ai_generator_route' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\AI_Generator_Route', + 'yoast\\wp\\seo\\premium\\integrations\\routes\\workouts_routes_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\Workouts_Routes_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\third_party\\algolia' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Algolia', + 'yoast\\wp\\seo\\premium\\integrations\\third_party\\edd' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\EDD', + 'yoast\\wp\\seo\\premium\\integrations\\third_party\\elementor_premium' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Premium', + 'yoast\\wp\\seo\\premium\\integrations\\third_party\\elementor_preview' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Preview', + 'yoast\\wp\\seo\\premium\\integrations\\third_party\\mastodon' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Mastodon', + 'yoast\\wp\\seo\\premium\\integrations\\upgrade_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Upgrade_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\user_profile_integration' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\User_Profile_Integration', + 'yoast\\wp\\seo\\premium\\integrations\\watchers\\prominent_words_watcher' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Prominent_Words_Watcher', + 'yoast\\wp\\seo\\premium\\integrations\\watchers\\stale_cornerstone_content_watcher' => 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Stale_Cornerstone_Content_Watcher', + 'yoast\\wp\\seo\\premium\\introductions\\application\\ai_generate_titles_and_descriptions_introduction' => 'Yoast\\WP\\SEO\\Premium\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction', + 'yoast\\wp\\seo\\premium\\main' => 'Yoast\\WP\\SEO\\Premium\\Main', + 'yoast\\wp\\seo\\premium\\repositories\\prominent_words_repository' => 'Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository', + 'yoast\\wp\\seo\\premium\\routes\\link_suggestions_route' => 'Yoast\\WP\\SEO\\Premium\\Routes\\Link_Suggestions_Route', + 'yoast\\wp\\seo\\premium\\routes\\prominent_words_route' => 'Yoast\\WP\\SEO\\Premium\\Routes\\Prominent_Words_Route', + 'yoast\\wp\\seo\\premium\\routes\\workouts_route' => 'Yoast\\WP\\SEO\\Premium\\Routes\\Workouts_Route', + 'yoast\\wp\\seo\\premium\\surfaces\\helpers_surface' => 'Yoast\\WP\\SEO\\Premium\\Surfaces\\Helpers_Surface', + 'yoast\\wp\\seo\\premium\\user_meta\\framework\\additional_contactmethods\\mastodon' => 'Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon', + 'yoast\\wp\\seo\\premium\\user_meta\\user_interface\\additional_contactmethods_integration' => 'Yoast\\WP\\SEO\\Premium\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration', + 'yoast\\wp\\seo\\repositories\\indexable_cleanup_repository' => 'Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository', + 'yoast\\wp\\seo\\repositories\\indexable_repository' => 'Yoast\\WP\\SEO\\Repositories\\Indexable_Repository', + 'yoast\\wp\\seo\\repositories\\seo_links_repository' => 'Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository', + 'yoast\\wp\\seo\\surfaces\\classes_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Classes_Surface', + 'yoast\\wp\\seo\\surfaces\\helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface', + 'yoast\\wp\\seo\\surfaces\\meta_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Meta_Surface', + 'yoast\\wp\\seo\\surfaces\\open_graph_helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface', + 'yoast\\wp\\seo\\surfaces\\schema_helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface', + 'yoast\\wp\\seo\\surfaces\\twitter_helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface', + 'yoastseo_vendor\\symfony\\component\\dependencyinjection\\containerinterface' => 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface', + ]; + $this->methodMap = [ + 'WPSEO_Addon_Manager' => 'getWPSEOAddonManagerService', + 'WPSEO_Admin_Asset_Manager' => 'getWPSEOAdminAssetManagerService', + 'WPSEO_Premium_Prominent_Words_Support' => 'getWPSEOPremiumProminentWordsSupportService', + 'WPSEO_Premium_Prominent_Words_Unindexed_Post_Query' => 'getWPSEOPremiumProminentWordsUnindexedPostQueryService', + 'WPSEO_Shortlinker' => 'getWPSEOShortlinkerService', + 'Yoast\\WP\\Lib\\Migrations\\Adapter' => 'getAdapterService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action' => 'getIndexableGeneralIndexationActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action' => 'getIndexablePostIndexationActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action' => 'getIndexablePostTypeArchiveIndexationActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action' => 'getIndexableTermIndexationActionService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder' => 'getIndexableTermBuilderService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional' => 'getPostConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional' => 'getPostsOverviewOrAjaxConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional' => 'getYoastAdminConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional' => 'getAdminConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional' => 'getFrontEndConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional' => 'getMigrationsConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional' => 'getOpenGraphConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional' => 'getRobotsTxtConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional' => 'getSettingsConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional' => 'getElementorActivatedConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional' => 'getElementorEditConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional' => 'getUserProfileConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional' => 'getWincherEnabledConditionalService', + 'Yoast\\WP\\SEO\\Config\\Migration_Status' => 'getMigrationStatusService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPremiumImprovedInternalLinking' => 'getWpYoastPremiumImprovedInternalLinkingService', + 'Yoast\\WP\\SEO\\Helpers\\Capability_Helper' => 'getCapabilityHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper' => 'getCurrentPageHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Date_Helper' => 'getDateHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Indexable_Helper' => 'getIndexableHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Indexing_Helper' => 'getIndexingHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Language_Helper' => 'getLanguageHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Meta_Helper' => 'getMetaHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Options_Helper' => 'getOptionsHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper' => 'getPostTypeHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Request_Helper' => 'getRequestHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Robots_Helper' => 'getRobotsHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper' => 'getScoreIconHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper' => 'getSocialProfilesHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Url_Helper' => 'getUrlHelperService', + 'Yoast\\WP\\SEO\\Helpers\\User_Helper' => 'getUserHelperService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration' => 'getAdminColumnsCacheIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\TranslationsPress' => 'getTranslationsPressService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Keyphrases' => 'getWincherKeyphrasesService', + 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository' => 'getWistiaEmbedPermissionRepositoryService', + 'Yoast\\WP\\SEO\\Loader' => 'getLoaderService', + 'Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer' => 'getMetaTagsContextMemoizerService', + 'Yoast\\WP\\SEO\\Premium\\Actions\\AI_Generator_Action' => 'getAIGeneratorActionService', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action' => 'getLinkSuggestionsActionService', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action' => 'getCompleteActionService', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action' => 'getContentActionService', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action' => 'getSaveActionService', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Ai_Editor_Conditional' => 'getAiEditorConditionalService', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Algolia_Enabled_Conditional' => 'getAlgoliaEnabledConditionalService', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Cornerstone_Enabled_Conditional' => 'getCornerstoneEnabledConditionalService', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\EDD_Conditional' => 'getEDDConditionalService', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Inclusive_Language_Enabled_Conditional' => 'getInclusiveLanguageEnabledConditionalService', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Term_Overview_Or_Ajax_Conditional' => 'getTermOverviewOrAjaxConditionalService', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Yoast_Admin_Or_Introductions_Route_Conditional' => 'getYoastAdminOrIntroductionsRouteConditionalService', + 'Yoast\\WP\\SEO\\Premium\\Config\\Badge_Group_Names' => 'getBadgeGroupNamesService', + 'Yoast\\WP\\SEO\\Premium\\Config\\Migrations\\AddIndexOnIndexableIdAndStem' => 'getAddIndexOnIndexableIdAndStemService', + 'Yoast\\WP\\SEO\\Premium\\Database\\Migration_Runner_Premium' => 'getMigrationRunnerPremiumService', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper' => 'getAIGeneratorHelperService', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper' => 'getCurrentPageHelper2Service', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper' => 'getProminentWordsHelperService', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper' => 'getVersionHelperService', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Index_Now_Key' => 'getIndexNowKeyService', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Introductions_Initializer' => 'getIntroductionsInitializerService', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Plugin' => 'getPluginService', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Redirect_Handler' => 'getRedirectHandlerService', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Woocommerce' => 'getWoocommerceService', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Wp_Cli_Initializer' => 'getWpCliInitializerService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Consent_Integration' => 'getAiConsentIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Generator_Integration' => 'getAiGeneratorIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Column_Integration' => 'getCornerstoneColumnIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Taxonomy_Column_Integration' => 'getCornerstoneTaxonomyColumnIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Column_Integration' => 'getInclusiveLanguageColumnIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Filter_Integration' => 'getInclusiveLanguageFilterIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Taxonomy_Column_Integration' => 'getInclusiveLanguageTaxonomyColumnIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Keyword_Integration' => 'getKeywordIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Metabox_Formatter_Integration' => 'getMetaboxFormatterIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Plugin_Links_Integration' => 'getPluginLinksIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Indexing_Integration' => 'getIndexingIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Metabox_Integration' => 'getMetaboxIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Related_Keyphrase_Filter_Integration' => 'getRelatedKeyphraseFilterIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Replacement_Variables_Integration' => 'getReplacementVariablesIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Settings_Integration' => 'getSettingsIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Thank_You_Page_Integration' => 'getThankYouPageIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Update_Premium_Notification' => 'getUpdatePremiumNotificationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\User_Profile_Integration' => 'getUserProfileIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Workouts_Integration' => 'getWorkoutsIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Alerts\\Ai_Generator_Tip_Notification' => 'getAiGeneratorTipNotificationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Estimated_Reading_Time_Block' => 'getEstimatedReadingTimeBlockService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Related_Links_Block' => 'getRelatedLinksBlockService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Cleanup_Integration' => 'getCleanupIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Front_End\\Robots_Txt_Integration' => 'getRobotsTxtIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Frontend_Inspector' => 'getFrontendInspectorService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Index_Now_Ping' => 'getIndexNowPingService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Missing_Indexables_Count_Integration' => 'getMissingIndexablesCountIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Author_Archive' => 'getOpenGraphAuthorArchiveService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Date_Archive' => 'getOpenGraphDateArchiveService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_PostType_Archive' => 'getOpenGraphPostTypeArchiveService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Post_Type' => 'getOpenGraphPostTypeService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Term_Archive' => 'getOpenGraphTermArchiveService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Organization_Schema_Integration' => 'getOrganizationSchemaIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Publishing_Principles_Schema_Integration' => 'getPublishingPrinciplesSchemaIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\AI_Generator_Route' => 'getAIGeneratorRouteService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\Workouts_Routes_Integration' => 'getWorkoutsRoutesIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Algolia' => 'getAlgoliaService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\EDD' => 'getEDDService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Premium' => 'getElementorPremiumService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Preview' => 'getElementorPreviewService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Mastodon' => 'getMastodonService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Upgrade_Integration' => 'getUpgradeIntegrationService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\User_Profile_Integration' => 'getUserProfileIntegration2Service', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Prominent_Words_Watcher' => 'getProminentWordsWatcherService', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Stale_Cornerstone_Content_Watcher' => 'getStaleCornerstoneContentWatcherService', + 'Yoast\\WP\\SEO\\Premium\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction' => 'getAiGenerateTitlesAndDescriptionsIntroductionService', + 'Yoast\\WP\\SEO\\Premium\\Main' => 'getMainService', + 'Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository' => 'getProminentWordsRepositoryService', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Link_Suggestions_Route' => 'getLinkSuggestionsRouteService', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Prominent_Words_Route' => 'getProminentWordsRouteService', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Workouts_Route' => 'getWorkoutsRouteService', + 'Yoast\\WP\\SEO\\Premium\\Surfaces\\Helpers_Surface' => 'getHelpersSurfaceService', + 'Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon' => 'getMastodon2Service', + 'Yoast\\WP\\SEO\\Premium\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration' => 'getAdditionalContactmethodsIntegrationService', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository' => 'getIndexableCleanupRepositoryService', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Repository' => 'getIndexableRepositoryService', + 'Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository' => 'getSEOLinksRepositoryService', + 'Yoast\\WP\\SEO\\Surfaces\\Classes_Surface' => 'getClassesSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface' => 'getHelpersSurface2Service', + 'Yoast\\WP\\SEO\\Surfaces\\Meta_Surface' => 'getMetaSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface' => 'getOpenGraphHelpersSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface' => 'getSchemaHelpersSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface' => 'getTwitterHelpersSurfaceService', + 'wpdb' => 'getWpdbService', + ]; + $this->privates = [ + 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => true, + ]; + $this->aliases = [ + 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => 'service_container', + ]; + } + + public function getRemovedIds() + { + return [ + 'Psr\\Container\\ContainerInterface' => true, + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => true, + 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => true, + 'autowired.Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Introductions_Seen_Repository' => true, + ]; + } + + public function compile() + { + throw new LogicException('You cannot compile a dumped container that was already compiled.'); + } + + public function isCompiled() + { + return true; + } + + public function isFrozen() + { + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), E_USER_DEPRECATED); + + return true; + } + + /** + * Gets the public 'WPSEO_Addon_Manager' shared service. + * + * @return \WPSEO_Addon_Manager + */ + protected function getWPSEOAddonManagerService() + { + return $this->services['WPSEO_Addon_Manager'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'WPSEO_Addon_Manager'); + } + + /** + * Gets the public 'WPSEO_Admin_Asset_Manager' shared service. + * + * @return \WPSEO_Admin_Asset_Manager + */ + protected function getWPSEOAdminAssetManagerService() + { + return $this->services['WPSEO_Admin_Asset_Manager'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'WPSEO_Admin_Asset_Manager'); + } + + /** + * Gets the public 'WPSEO_Premium_Prominent_Words_Support' shared service. + * + * @return \WPSEO_Premium_Prominent_Words_Support + */ + protected function getWPSEOPremiumProminentWordsSupportService() + { + return $this->services['WPSEO_Premium_Prominent_Words_Support'] = \Yoast\WP\SEO\Premium\WordPress\Wrapper::get_prominent_words_support(); + } + + /** + * Gets the public 'WPSEO_Premium_Prominent_Words_Unindexed_Post_Query' shared service. + * + * @return \WPSEO_Premium_Prominent_Words_Unindexed_Post_Query + */ + protected function getWPSEOPremiumProminentWordsUnindexedPostQueryService() + { + return $this->services['WPSEO_Premium_Prominent_Words_Unindexed_Post_Query'] = \Yoast\WP\SEO\Premium\WordPress\Wrapper::get_prominent_words_unindex_post_query(); + } + + /** + * Gets the public 'WPSEO_Shortlinker' shared service. + * + * @return \WPSEO_Shortlinker + */ + protected function getWPSEOShortlinkerService() + { + return $this->services['WPSEO_Shortlinker'] = \Yoast\WP\SEO\Premium\WordPress\Wrapper::get_shortlinker(); + } + + /** + * Gets the public 'Yoast\WP\Lib\Migrations\Adapter' shared service. + * + * @return \Yoast\WP\Lib\Migrations\Adapter + */ + protected function getAdapterService() + { + return $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\Lib\\Migrations\\Adapter'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_General_Indexation_Action' shared service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_General_Indexation_Action + */ + protected function getIndexableGeneralIndexationActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Indexation_Action' shared service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Indexation_Action + */ + protected function getIndexablePostIndexationActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Type_Archive_Indexation_Action' shared service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Type_Archive_Indexation_Action + */ + protected function getIndexablePostTypeArchiveIndexationActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_Term_Indexation_Action' shared service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_Term_Indexation_Action + */ + protected function getIndexableTermIndexationActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Term_Builder' shared service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Term_Builder + */ + protected function getIndexableTermBuilderService() + { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Post_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Post_Conditional + */ + protected function getPostConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Posts_Overview_Or_Ajax_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Posts_Overview_Or_Ajax_Conditional + */ + protected function getPostsOverviewOrAjaxConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Yoast_Admin_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Yoast_Admin_Conditional + */ + protected function getYoastAdminConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin_Conditional + */ + protected function getAdminConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Front_End_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Front_End_Conditional + */ + protected function getFrontEndConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Migrations_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Migrations_Conditional + */ + protected function getMigrationsConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Open_Graph_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Open_Graph_Conditional + */ + protected function getOpenGraphConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Robots_Txt_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Robots_Txt_Conditional + */ + protected function getRobotsTxtConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Settings_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Settings_Conditional + */ + protected function getSettingsConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Activated_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Activated_Conditional + */ + protected function getElementorActivatedConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Edit_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Edit_Conditional + */ + protected function getElementorEditConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\User_Profile_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\User_Profile_Conditional + */ + protected function getUserProfileConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Wincher_Enabled_Conditional' shared service. + * + * @return \Yoast\WP\SEO\Conditionals\Wincher_Enabled_Conditional + */ + protected function getWincherEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migration_Status' shared service. + * + * @return \Yoast\WP\SEO\Config\Migration_Status + */ + protected function getMigrationStatusService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Config\\Migration_Status'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\WpYoastPremiumImprovedInternalLinking' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\WpYoastPremiumImprovedInternalLinking + */ + protected function getWpYoastPremiumImprovedInternalLinkingService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPremiumImprovedInternalLinking'] = new \Yoast\WP\SEO\Config\Migrations\WpYoastPremiumImprovedInternalLinking(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : $this->getAdapterService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Capability_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Capability_Helper + */ + protected function getCapabilityHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Capability_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Current_Page_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Current_Page_Helper + */ + protected function getCurrentPageHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Date_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Date_Helper + */ + protected function getDateHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Date_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Indexable_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Indexable_Helper + */ + protected function getIndexableHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Indexing_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Indexing_Helper + */ + protected function getIndexingHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Language_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Language_Helper + */ + protected function getLanguageHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Language_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Meta_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Meta_Helper + */ + protected function getMetaHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Meta_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Options_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Options_Helper + */ + protected function getOptionsHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Options_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Post_Type_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Post_Type_Helper + */ + protected function getPostTypeHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Request_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Request_Helper + */ + protected function getRequestHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Request_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Robots_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Robots_Helper + */ + protected function getRobotsHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Robots_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Score_Icon_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Score_Icon_Helper + */ + protected function getScoreIconHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Social_Profiles_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Social_Profiles_Helper + */ + protected function getSocialProfilesHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Url_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\Url_Helper + */ + protected function getUrlHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\Url_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\User_Helper' shared service. + * + * @return \Yoast\WP\SEO\Helpers\User_Helper + */ + protected function getUserHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Helpers\\User_Helper'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Admin_Columns_Cache_Integration' shared service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Admin_Columns_Cache_Integration + */ + protected function getAdminColumnsCacheIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\TranslationsPress' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\TranslationsPress + */ + protected function getTranslationsPressService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\TranslationsPress'] = new \Yoast\WP\SEO\Integrations\Third_Party\TranslationsPress(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : $this->getDateHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Wincher_Keyphrases' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Wincher_Keyphrases + */ + protected function getWincherKeyphrasesService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Keyphrases'] = new \Yoast\WP\SEO\Integrations\Third_Party\Wincher_Keyphrases(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository' shared service. + * + * @return \Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository + */ + protected function getWistiaEmbedPermissionRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Loader' shared autowired service. + * + * @return \Yoast\WP\SEO\Loader + */ + protected function getLoaderService() + { + $this->services['Yoast\\WP\\SEO\\Loader'] = $instance = new \Yoast\WP\SEO\Loader($this); + + $instance->register_migration('premium', '20190715101200', 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPremiumImprovedInternalLinking'); + $instance->register_migration('premium', '20210827093024', 'Yoast\\WP\\SEO\\Premium\\Config\\Migrations\\AddIndexOnIndexableIdAndStem'); + $instance->register_initializer('Yoast\\WP\\SEO\\Premium\\Database\\Migration_Runner_Premium'); + $instance->register_initializer('Yoast\\WP\\SEO\\Premium\\Initializers\\Index_Now_Key'); + $instance->register_initializer('Yoast\\WP\\SEO\\Premium\\Initializers\\Introductions_Initializer'); + $instance->register_initializer('Yoast\\WP\\SEO\\Premium\\Initializers\\Plugin'); + $instance->register_initializer('Yoast\\WP\\SEO\\Premium\\Initializers\\Redirect_Handler'); + $instance->register_initializer('Yoast\\WP\\SEO\\Premium\\Initializers\\Woocommerce'); + $instance->register_initializer('Yoast\\WP\\SEO\\Premium\\Initializers\\Wp_Cli_Initializer'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Consent_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Generator_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Column_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Taxonomy_Column_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Column_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Filter_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Taxonomy_Column_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Keyword_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Metabox_Formatter_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Plugin_Links_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Indexing_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Metabox_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Related_Keyphrase_Filter_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Replacement_Variables_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Settings_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Thank_You_Page_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Update_Premium_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\User_Profile_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Workouts_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Alerts\\Ai_Generator_Tip_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Estimated_Reading_Time_Block'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Related_Links_Block'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Cleanup_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Front_End\\Robots_Txt_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Frontend_Inspector'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Index_Now_Ping'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Missing_Indexables_Count_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Author_Archive'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Date_Archive'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Post_Type'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_PostType_Archive'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Term_Archive'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Organization_Schema_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Publishing_Principles_Schema_Integration'); + $instance->register_route('Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\AI_Generator_Route'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\Workouts_Routes_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Algolia'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\EDD'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Premium'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Preview'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Mastodon'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\TranslationsPress'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Keyphrases'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Upgrade_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\User_Profile_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Prominent_Words_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Stale_Cornerstone_Content_Watcher'); + $instance->register_route('Yoast\\WP\\SEO\\Premium\\Routes\\Link_Suggestions_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Premium\\Routes\\Prominent_Words_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Premium\\Routes\\Workouts_Route'); + $instance->register_integration('Yoast\\WP\\SEO\\Premium\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration'); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Memoizers\Meta_Tags_Context_Memoizer' shared service. + * + * @return \Yoast\WP\SEO\Memoizers\Meta_Tags_Context_Memoizer + */ + protected function getMetaTagsContextMemoizerService() + { + return $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Actions\AI_Generator_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Actions\AI_Generator_Action + */ + protected function getAIGeneratorActionService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\AI_Generator_Action'] = new \Yoast\WP\SEO\Premium\Actions\AI_Generator_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper'] : $this->getAIGeneratorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : $this->getUserHelperService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Actions\Link_Suggestions_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Actions\Link_Suggestions_Action + */ + protected function getLinkSuggestionsActionService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action'] = new \Yoast\WP\SEO\Premium\Actions\Link_Suggestions_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository'] = new \Yoast\WP\SEO\Premium\Repositories\Prominent_Words_Repository())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] : $this->getProminentWordsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Premium_Prominent_Words_Support']) ? $this->services['WPSEO_Premium_Prominent_Words_Support'] : $this->getWPSEOPremiumProminentWordsSupportService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'] : $this->getSEOLinksRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Actions\Prominent_Words\Complete_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Actions\Prominent_Words\Complete_Action + */ + protected function getCompleteActionService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action'] = new \Yoast\WP\SEO\Premium\Actions\Prominent_Words\Complete_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] : $this->getProminentWordsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Actions\Prominent_Words\Content_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Actions\Prominent_Words\Content_Action + */ + protected function getContentActionService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action'] = new \Yoast\WP\SEO\Premium\Actions\Prominent_Words\Content_Action(${($_ = isset($this->services['WPSEO_Premium_Prominent_Words_Support']) ? $this->services['WPSEO_Premium_Prominent_Words_Support'] : $this->getWPSEOPremiumProminentWordsSupportService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] : $this->getMetaTagsContextMemoizerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] : $this->getMetaHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Actions\Prominent_Words\Save_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Actions\Prominent_Words\Save_Action + */ + protected function getSaveActionService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action'] = new \Yoast\WP\SEO\Premium\Actions\Prominent_Words\Save_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository'] = new \Yoast\WP\SEO\Premium\Repositories\Prominent_Words_Repository())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] : $this->getProminentWordsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Conditionals\Ai_Editor_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Conditionals\Ai_Editor_Conditional + */ + protected function getAiEditorConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Conditionals\\Ai_Editor_Conditional'] = new \Yoast\WP\SEO\Premium\Conditionals\Ai_Editor_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional'] : $this->getPostConditionalService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Conditionals\Algolia_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Conditionals\Algolia_Enabled_Conditional + */ + protected function getAlgoliaEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Conditionals\\Algolia_Enabled_Conditional'] = new \Yoast\WP\SEO\Premium\Conditionals\Algolia_Enabled_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Conditionals\Cornerstone_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Conditionals\Cornerstone_Enabled_Conditional + */ + protected function getCornerstoneEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Conditionals\\Cornerstone_Enabled_Conditional'] = new \Yoast\WP\SEO\Premium\Conditionals\Cornerstone_Enabled_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Conditionals\EDD_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Conditionals\EDD_Conditional + */ + protected function getEDDConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Conditionals\\EDD_Conditional'] = new \Yoast\WP\SEO\Premium\Conditionals\EDD_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Conditionals\Inclusive_Language_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Conditionals\Inclusive_Language_Enabled_Conditional + */ + protected function getInclusiveLanguageEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Conditionals\\Inclusive_Language_Enabled_Conditional'] = new \Yoast\WP\SEO\Premium\Conditionals\Inclusive_Language_Enabled_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Conditionals\Term_Overview_Or_Ajax_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Conditionals\Term_Overview_Or_Ajax_Conditional + */ + protected function getTermOverviewOrAjaxConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Conditionals\\Term_Overview_Or_Ajax_Conditional'] = new \Yoast\WP\SEO\Premium\Conditionals\Term_Overview_Or_Ajax_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Conditionals\Yoast_Admin_Or_Introductions_Route_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Conditionals\Yoast_Admin_Or_Introductions_Route_Conditional + */ + protected function getYoastAdminOrIntroductionsRouteConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Conditionals\\Yoast_Admin_Or_Introductions_Route_Conditional'] = new \Yoast\WP\SEO\Premium\Conditionals\Yoast_Admin_Or_Introductions_Route_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional'] : $this->getYoastAdminConditionalService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Config\Badge_Group_Names' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Config\Badge_Group_Names + */ + protected function getBadgeGroupNamesService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Config\\Badge_Group_Names'] = new \Yoast\WP\SEO\Premium\Config\Badge_Group_Names(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Config\Migrations\AddIndexOnIndexableIdAndStem' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Config\Migrations\AddIndexOnIndexableIdAndStem + */ + protected function getAddIndexOnIndexableIdAndStemService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Config\\Migrations\\AddIndexOnIndexableIdAndStem'] = new \Yoast\WP\SEO\Premium\Config\Migrations\AddIndexOnIndexableIdAndStem(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : $this->getAdapterService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Database\Migration_Runner_Premium' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Database\Migration_Runner_Premium + */ + protected function getMigrationRunnerPremiumService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Database\\Migration_Runner_Premium'] = new \Yoast\WP\SEO\Premium\Database\Migration_Runner_Premium(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status']) ? $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] : $this->getMigrationStatusService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Loader']) ? $this->services['Yoast\\WP\\SEO\\Loader'] : $this->getLoaderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : $this->getAdapterService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Helpers\AI_Generator_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Helpers\AI_Generator_Helper + */ + protected function getAIGeneratorHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\AI_Generator_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : $this->getUserHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : $this->getDateHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Helpers\Current_Page_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Helpers\Current_Page_Helper + */ + protected function getCurrentPageHelper2Service() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Current_Page_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Helpers\Prominent_Words_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Helpers\Prominent_Words_Helper + */ + protected function getProminentWordsHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Prominent_Words_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Helpers\Version_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Helpers\Version_Helper + */ + protected function getVersionHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Version_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Initializers\Index_Now_Key' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Initializers\Index_Now_Key + */ + protected function getIndexNowKeyService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Initializers\\Index_Now_Key'] = new \Yoast\WP\SEO\Premium\Initializers\Index_Now_Key(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Initializers\Introductions_Initializer' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Initializers\Introductions_Initializer + */ + protected function getIntroductionsInitializerService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Initializers\\Introductions_Initializer'] = new \Yoast\WP\SEO\Premium\Initializers\Introductions_Initializer(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction'] : $this->getAiGenerateTitlesAndDescriptionsIntroductionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Initializers\Plugin' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Initializers\Plugin + */ + protected function getPluginService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Initializers\\Plugin'] = new \Yoast\WP\SEO\Premium\Initializers\Plugin(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Initializers\Redirect_Handler' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Initializers\Redirect_Handler + */ + protected function getRedirectHandlerService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Initializers\\Redirect_Handler'] = new \Yoast\WP\SEO\Premium\Initializers\Redirect_Handler(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Initializers\Woocommerce' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Initializers\Woocommerce + */ + protected function getWoocommerceService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Initializers\\Woocommerce'] = new \Yoast\WP\SEO\Premium\Initializers\Woocommerce(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Initializers\Wp_Cli_Initializer' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Initializers\Wp_Cli_Initializer + */ + protected function getWpCliInitializerService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Initializers\\Wp_Cli_Initializer'] = new \Yoast\WP\SEO\Premium\Initializers\Wp_Cli_Initializer(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Ai_Consent_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Ai_Consent_Integration + */ + protected function getAiConsentIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Consent_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Ai_Consent_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : $this->getUserHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository']) ? $this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository'] : $this->getWistiaEmbedPermissionRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Ai_Generator_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Ai_Generator_Integration + */ + protected function getAiGeneratorIntegrationService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : $this->getUserHelperService()) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Generator_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Ai_Generator_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper'] : $this->getAIGeneratorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Current_Page_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, $a, new \Yoast\WP\SEO\Introductions\Infrastructure\Introductions_Seen_Repository($a)); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Cornerstone_Column_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Cornerstone_Column_Integration + */ + protected function getCornerstoneColumnIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Column_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Cornerstone_Column_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration']) ? $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration'] : $this->getAdminColumnsCacheIntegrationService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Cornerstone_Taxonomy_Column_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Cornerstone_Taxonomy_Column_Integration + */ + protected function getCornerstoneTaxonomyColumnIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Taxonomy_Column_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Cornerstone_Taxonomy_Column_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Current_Page_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Column_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Column_Integration + */ + protected function getInclusiveLanguageColumnIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Column_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Column_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper'] : $this->getScoreIconHelperService()) && false ?: '_'}, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration']) ? $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration'] : $this->getAdminColumnsCacheIntegrationService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Filter_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Filter_Integration + */ + protected function getInclusiveLanguageFilterIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Filter_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Filter_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Taxonomy_Column_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Taxonomy_Column_Integration + */ + protected function getInclusiveLanguageTaxonomyColumnIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Taxonomy_Column_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Inclusive_Language_Taxonomy_Column_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper'] : $this->getScoreIconHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Current_Page_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Keyword_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Keyword_Integration + */ + protected function getKeywordIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Keyword_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Keyword_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Metabox_Formatter_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Metabox_Formatter_Integration + */ + protected function getMetaboxFormatterIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Metabox_Formatter_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Metabox_Formatter_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Plugin_Links_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Plugin_Links_Integration + */ + protected function getPluginLinksIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Plugin_Links_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Plugin_Links_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Prominent_Words\Indexing_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Prominent_Words\Indexing_Integration + */ + protected function getIndexingIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Indexing_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Prominent_Words\Indexing_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action'] : $this->getContentActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] : $this->getIndexablePostIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] : $this->getIndexableTermIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] : $this->getIndexableGeneralIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] : $this->getIndexablePostTypeArchiveIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper'] : $this->getLanguageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : $this->getUrlHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] : $this->getProminentWordsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Prominent_Words\Metabox_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Prominent_Words\Metabox_Integration + */ + protected function getMetaboxIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Metabox_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Prominent_Words\Metabox_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action'] : $this->getSaveActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Related_Keyphrase_Filter_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Related_Keyphrase_Filter_Integration + */ + protected function getRelatedKeyphraseFilterIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Related_Keyphrase_Filter_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Related_Keyphrase_Filter_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Replacement_Variables_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Replacement_Variables_Integration + */ + protected function getReplacementVariablesIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Replacement_Variables_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Replacement_Variables_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Settings_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Settings_Integration + */ + protected function getSettingsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Settings_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Settings_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Thank_You_Page_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Thank_You_Page_Integration + */ + protected function getThankYouPageIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Thank_You_Page_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Thank_You_Page_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Update_Premium_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Update_Premium_Notification + */ + protected function getUpdatePremiumNotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Update_Premium_Notification'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Update_Premium_Notification(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Version_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] : $this->getCapabilityHelperService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\User_Profile_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\User_Profile_Integration + */ + protected function getUserProfileIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\User_Profile_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\User_Profile_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Admin\Workouts_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Admin\Workouts_Integration + */ + protected function getWorkoutsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Workouts_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Admin\Workouts_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Shortlinker']) ? $this->services['WPSEO_Shortlinker'] : $this->getWPSEOShortlinkerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] : $this->getProminentWordsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Alerts\Ai_Generator_Tip_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Alerts\Ai_Generator_Tip_Notification + */ + protected function getAiGeneratorTipNotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Alerts\\Ai_Generator_Tip_Notification'] = new \Yoast\WP\SEO\Premium\Integrations\Alerts\Ai_Generator_Tip_Notification(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Blocks\Estimated_Reading_Time_Block' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Blocks\Estimated_Reading_Time_Block + */ + protected function getEstimatedReadingTimeBlockService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Estimated_Reading_Time_Block'] = new \Yoast\WP\SEO\Premium\Integrations\Blocks\Estimated_Reading_Time_Block(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Blocks\Related_Links_Block' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Blocks\Related_Links_Block + */ + protected function getRelatedLinksBlockService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Related_Links_Block'] = new \Yoast\WP\SEO\Premium\Integrations\Blocks\Related_Links_Block(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Cleanup_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Cleanup_Integration + */ + protected function getCleanupIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Cleanup_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Cleanup_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository'] : $this->getIndexableCleanupRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Front_End\Robots_Txt_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Front_End\Robots_Txt_Integration + */ + protected function getRobotsTxtIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Front_End\\Robots_Txt_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Front_End\Robots_Txt_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Frontend_Inspector' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Frontend_Inspector + */ + protected function getFrontendInspectorService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Frontend_Inspector'] = new \Yoast\WP\SEO\Premium\Integrations\Frontend_Inspector(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper'] : $this->getRobotsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Index_Now_Ping' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Index_Now_Ping + */ + protected function getIndexNowPingService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Index_Now_Ping'] = new \Yoast\WP\SEO\Premium\Integrations\Index_Now_Ping(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] : $this->getRequestHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Missing_Indexables_Count_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Missing_Indexables_Count_Integration + */ + protected function getMissingIndexablesCountIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Missing_Indexables_Count_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Missing_Indexables_Count_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action'] : $this->getContentActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\OpenGraph_Author_Archive' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Author_Archive + */ + protected function getOpenGraphAuthorArchiveService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Author_Archive'] = new \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Author_Archive(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\OpenGraph_Date_Archive' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Date_Archive + */ + protected function getOpenGraphDateArchiveService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Date_Archive'] = new \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Date_Archive(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\OpenGraph_PostType_Archive' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\OpenGraph_PostType_Archive + */ + protected function getOpenGraphPostTypeArchiveService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_PostType_Archive'] = new \Yoast\WP\SEO\Premium\Integrations\OpenGraph_PostType_Archive(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\OpenGraph_Post_Type' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Post_Type + */ + protected function getOpenGraphPostTypeService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Post_Type'] = new \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Post_Type(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\OpenGraph_Term_Archive' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Term_Archive + */ + protected function getOpenGraphTermArchiveService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Term_Archive'] = new \Yoast\WP\SEO\Premium\Integrations\OpenGraph_Term_Archive(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Organization_Schema_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Organization_Schema_Integration + */ + protected function getOrganizationSchemaIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Organization_Schema_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Organization_Schema_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Publishing_Principles_Schema_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Publishing_Principles_Schema_Integration + */ + protected function getPublishingPrinciplesSchemaIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Publishing_Principles_Schema_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Publishing_Principles_Schema_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Routes\AI_Generator_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Routes\AI_Generator_Route + */ + protected function getAIGeneratorRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\AI_Generator_Route'] = new \Yoast\WP\SEO\Premium\Integrations\Routes\AI_Generator_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\AI_Generator_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\AI_Generator_Action'] : $this->getAIGeneratorActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper'] : $this->getAIGeneratorHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Routes\Workouts_Routes_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Routes\Workouts_Routes_Integration + */ + protected function getWorkoutsRoutesIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\Workouts_Routes_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Routes\Workouts_Routes_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action'] : $this->getLinkSuggestionsActionService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Shortlinker']) ? $this->services['WPSEO_Shortlinker'] : $this->getWPSEOShortlinkerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] : $this->getProminentWordsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Third_Party\Algolia' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Third_Party\Algolia + */ + protected function getAlgoliaService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Algolia'] = new \Yoast\WP\SEO\Premium\Integrations\Third_Party\Algolia(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] : $this->getMetaSurfaceService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Third_Party\EDD' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Third_Party\EDD + */ + protected function getEDDService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\EDD'] = new \Yoast\WP\SEO\Premium\Integrations\Third_Party\EDD(${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] : $this->getMetaSurfaceService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Third_Party\Elementor_Premium' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Third_Party\Elementor_Premium + */ + protected function getElementorPremiumService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Premium'] = new \Yoast\WP\SEO\Premium\Integrations\Third_Party\Elementor_Premium(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper'] : $this->getProminentWordsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper'] = new \Yoast\WP\SEO\Premium\Helpers\Current_Page_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Third_Party\Elementor_Preview' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Third_Party\Elementor_Preview + */ + protected function getElementorPreviewService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Preview'] = new \Yoast\WP\SEO\Premium\Integrations\Third_Party\Elementor_Preview(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Third_Party\Mastodon' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Third_Party\Mastodon + */ + protected function getMastodonService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Mastodon'] = new \Yoast\WP\SEO\Premium\Integrations\Third_Party\Mastodon(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper'] : $this->getSocialProfilesHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Upgrade_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Upgrade_Integration + */ + protected function getUpgradeIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Upgrade_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\Upgrade_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\User_Profile_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\User_Profile_Integration + */ + protected function getUserProfileIntegration2Service() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\User_Profile_Integration'] = new \Yoast\WP\SEO\Premium\Integrations\User_Profile_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Watchers\Prominent_Words_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Watchers\Prominent_Words_Watcher + */ + protected function getProminentWordsWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Prominent_Words_Watcher'] = new \Yoast\WP\SEO\Premium\Integrations\Watchers\Prominent_Words_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository'] : ($this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository'] = new \Yoast\WP\SEO\Premium\Repositories\Prominent_Words_Repository())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Integrations\Watchers\Stale_Cornerstone_Content_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Integrations\Watchers\Stale_Cornerstone_Content_Watcher + */ + protected function getStaleCornerstoneContentWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Stale_Cornerstone_Content_Watcher'] = new \Yoast\WP\SEO\Premium\Integrations\Watchers\Stale_Cornerstone_Content_Watcher(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Introductions\Application\Ai_Generate_Titles_And_Descriptions_Introduction' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Introductions\Application\Ai_Generate_Titles_And_Descriptions_Introduction + */ + protected function getAiGenerateTitlesAndDescriptionsIntroductionService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction'] = new \Yoast\WP\SEO\Premium\Introductions\Application\Ai_Generate_Titles_And_Descriptions_Introduction(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : $this->getOptionsHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : $this->getUserHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Main' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Main + */ + protected function getMainService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Main'] = new \Yoast\WP\SEO\Premium\Main(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Repositories\Prominent_Words_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Repositories\Prominent_Words_Repository + */ + protected function getProminentWordsRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository'] = new \Yoast\WP\SEO\Premium\Repositories\Prominent_Words_Repository(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Routes\Link_Suggestions_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Routes\Link_Suggestions_Route + */ + protected function getLinkSuggestionsRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Routes\\Link_Suggestions_Route'] = new \Yoast\WP\SEO\Premium\Routes\Link_Suggestions_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action'] : $this->getLinkSuggestionsActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Routes\Prominent_Words_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Routes\Prominent_Words_Route + */ + protected function getProminentWordsRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Routes\\Prominent_Words_Route'] = new \Yoast\WP\SEO\Premium\Routes\Prominent_Words_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action'] : $this->getContentActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action'] : $this->getSaveActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action'] : $this->getCompleteActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Routes\Workouts_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Routes\Workouts_Route + */ + protected function getWorkoutsRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Routes\\Workouts_Route'] = new \Yoast\WP\SEO\Premium\Routes\Workouts_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action']) ? $this->services['Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action'] : $this->getLinkSuggestionsActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder'] : $this->getIndexableTermBuilderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\Surfaces\Helpers_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\Surfaces\Helpers_Surface + */ + protected function getHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\Surfaces\\Helpers_Surface'] = new \Yoast\WP\SEO\Premium\Surfaces\Helpers_Surface($this); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\User_Meta\Framework\Additional_Contactmethods\Mastodon' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\User_Meta\Framework\Additional_Contactmethods\Mastodon + */ + protected function getMastodon2Service() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon'] = new \Yoast\WP\SEO\Premium\User_Meta\Framework\Additional_Contactmethods\Mastodon(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Premium\User_Meta\User_Interface\Additional_Contactmethods_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Premium\User_Meta\User_Interface\Additional_Contactmethods_Integration + */ + protected function getAdditionalContactmethodsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Premium\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration'] = new \Yoast\WP\SEO\Premium\User_Meta\User_Interface\Additional_Contactmethods_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon']) ? $this->services['Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon'] : ($this->services['Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon'] = new \Yoast\WP\SEO\Premium\User_Meta\Framework\Additional_Contactmethods\Mastodon())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\Indexable_Cleanup_Repository' shared service. + * + * @return \Yoast\WP\SEO\Repositories\Indexable_Cleanup_Repository + */ + protected function getIndexableCleanupRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\Indexable_Repository' shared service. + * + * @return \Yoast\WP\SEO\Repositories\Indexable_Repository + */ + protected function getIndexableRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\SEO_Links_Repository' shared service. + * + * @return \Yoast\WP\SEO\Repositories\SEO_Links_Repository + */ + protected function getSEOLinksRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Classes_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Classes_Surface + */ + protected function getClassesSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Classes_Surface'] = new \Yoast\WP\SEO\Surfaces\Classes_Surface($this); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Helpers_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Helpers_Surface + */ + protected function getHelpersSurface2Service() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Helpers_Surface($this, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface'] : $this->getOpenGraphHelpersSurfaceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface'] : $this->getSchemaHelpersSurfaceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface'] : $this->getTwitterHelpersSurfaceService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Meta_Surface' shared service. + * + * @return \Yoast\WP\SEO\Surfaces\Meta_Surface + */ + protected function getMetaSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Open_Graph_Helpers_Surface' shared service. + * + * @return \Yoast\WP\SEO\Surfaces\Open_Graph_Helpers_Surface + */ + protected function getOpenGraphHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Schema_Helpers_Surface' shared service. + * + * @return \Yoast\WP\SEO\Surfaces\Schema_Helpers_Surface + */ + protected function getSchemaHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface'); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Twitter_Helpers_Surface' shared service. + * + * @return \Yoast\WP\SEO\Surfaces\Twitter_Helpers_Surface + */ + protected function getTwitterHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface'); + } + + /** + * Gets the public 'wpdb' shared service. + * + * @return \wpdb + */ + protected function getWpdbService() + { + return $this->services['wpdb'] = \Yoast\WP\Lib\Dependency_Injection\Container_Registry::get('yoast-seo', 'wpdb'); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/ai-generator-helper.php b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/ai-generator-helper.php new file mode 100644 index 00000000..989be1fd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/ai-generator-helper.php @@ -0,0 +1,404 @@ +options_helper = $options; + $this->user_helper = $user_helper; + $this->date_helper = $date_helper; + } + + /** + * Generates a random code verifier for a user. The code verifier is used in communication with the Yoast AI API + * to ensure that the callback that is sent for both the token and refresh request are handled by the same site that requested the tokens. + * Each code verifier should only be used once. + * This all helps with preventing access tokens from one site to be sent to another and it makes a mitm attack more difficult to execute. + * + * @param WP_User $user The WP user. + * + * @return string The code verifier. + */ + public function generate_code_verifier( WP_User $user ) { + $random_string = \substr( \str_shuffle( '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ), 1, 10 ); + + return \hash( 'sha256', $user->user_email . $random_string ); + } + + /** + * Temporarily stores the code verifier. We expect the callback that consumes this verifier to reach us within a couple of seconds. + * So, we throw away the code after 5 minutes: when we know the callback isn't coming. + * + * @param int $user_id The user ID. + * @param string $code_verifier The code verifier. + * + * @return void + */ + public function set_code_verifier( int $user_id, string $code_verifier ): void { + $this->user_helper->update_meta( + $user_id, + 'yoast_wpseo_ai_generator_code_verifier_for_blog_' . \get_current_blog_id(), + [ + 'code' => $code_verifier, + 'created_at' => $this->date_helper->current_time(), + ] + ); + } + + /** + * Retrieves the code verifier. + * + * @param int $user_id The user ID. + * + * @return string The code verifier. + * + * @throws RuntimeException No valid code verifier could be found. + */ + public function get_code_verifier( int $user_id ): string { + $code_verifier = $this->user_helper->get_meta( $user_id, 'yoast_wpseo_ai_generator_code_verifier_for_blog_' . \get_current_blog_id(), true ); + if ( ! \is_array( $code_verifier ) || ! isset( $code_verifier['code'] ) || $code_verifier['code'] === '' ) { + throw new RuntimeException( 'Unable to retrieve the code verifier.' ); + } + + if ( ! isset( $code_verifier['created_at'] ) || $code_verifier['created_at'] < ( $this->date_helper->current_time() - self::CODE_VERIFIER_VALIDITY_IN_MINUTES * \MINUTE_IN_SECONDS ) ) { + $this->delete_code_verifier( $user_id ); + throw new RuntimeException( 'Code verifier has expired.' ); + } + + return (string) $code_verifier['code']; + } + + /** + * Deletes the code verifier. + * + * @param int $user_id The user ID. + * + * @return void + */ + public function delete_code_verifier( int $user_id ): void { + $this->user_helper->delete_meta( $user_id, 'yoast_wpseo_ai_generator_code_verifier_for_blog_' . \get_current_blog_id() ); + } + + /** + * Gets the licence URL. + * + * @return string The licence URL. + */ + public function get_license_url() { + return WPSEO_Utils::get_home_url(); + } + + /** + * Gets the timeout of the suggestion requests in seconds. + * + * @return int The timeout of the suggestion requests in seconds. + */ + public function get_request_timeout() { + /** + * Filter: 'Yoast\WP\SEO\ai_suggestions_timeout' - Replaces the default timeout with a custom one, for testing purposes. + * + * Note: This is a Premium plugin-only hook. + * + * @since 22.7 + * @internal + * + * @param int $timeout The default timeout in seconds. + */ + return \apply_filters( 'Yoast\WP\SEO\ai_suggestions_timeout', 30 ); + } + + /** + * Gets the callback URL to be used by the API to send back the access token, refresh token and code challenge. + * + * @return string The callbacks URL. + */ + public function get_callback_url() { + return \get_rest_url( null, 'yoast/v1/ai_generator/callback' ); + } + + /** + * Gets the callback URL to be used by the API to send back the refreshed JWTs once they expire. + * + * @return string The callbacks URL. + */ + public function get_refresh_callback_url() { + return \get_rest_url( null, 'yoast/v1/ai_generator/refresh_callback' ); + } + + /** + * Performs the request using WordPress internals. + * + * @param string $action_path The path to the desired action. + * @param array $request_body The request body. + * @param string[] $request_headers The request headers. + * + * @return object The response object. + * + * @throws Bad_Request_Exception When the request fails for any other reason. + * @throws Forbidden_Exception When the response code is 403. + * @throws Internal_Server_Error_Exception When the response code is 500. + * @throws Not_Found_Exception When the response code is 404. + * @throws Payment_Required_Exception When the response code is 402. + * @throws Request_Timeout_Exception When the response code is 408. + * @throws Service_Unavailable_Exception When the response code is 503. + * @throws Too_Many_Requests_Exception When the response code is 429. + * @throws Unauthorized_Exception When the response code is 401. + * @throws WP_Request_Exception When the wp_remote_post() returns an error. + */ + public function request( $action_path, $request_body = [], $request_headers = [] ) { + // Our API expects JSON. + // The request times out after 30 seconds. + $request_headers = \array_merge( $request_headers, [ 'Content-Type' => 'application/json' ] ); + $request_arguments = [ + 'timeout' => $this->get_request_timeout(), + // phpcs:ignore Yoast.Yoast.JsonEncodeAlternative.Found -- Reason: We don't want the debug/pretty possibility. + 'body' => \wp_json_encode( $request_body ), + 'headers' => $request_headers, + ]; + + /** + * Filter: 'Yoast\WP\SEO\ai_api_url' - Replaces the default URL for the AI API with a custom one. + * + * Note: This is a Premium plugin-only hook. + * + * @since 21.0 + * @internal + * + * @param string $url The default URL for the AI API. + */ + $api_url = \apply_filters( 'Yoast\WP\SEO\ai_api_url', $this->base_url ); + $response = \wp_remote_post( $api_url . $action_path, $request_arguments ); + + if ( \is_wp_error( $response ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- false positive. + throw new WP_Request_Exception( $response->get_error_message() ); + } + + [ $response_code, $response_message, $error_code, $missing_licenses ] = $this->parse_response( $response ); + + // phpcs:disable WordPress.Security.EscapeOutput.ExceptionNotEscaped -- false positive. + switch ( $response_code ) { + case 200: + return (object) $response; + case 401: + throw new Unauthorized_Exception( $response_message, $response_code, $error_code ); + case 402: + throw new Payment_Required_Exception( $response_message, $response_code, $error_code, null, $missing_licenses ); + case 403: + throw new Forbidden_Exception( $response_message, $response_code, $error_code ); + case 404: + throw new Not_Found_Exception( $response_message, $response_code, $error_code ); + case 408: + throw new Request_Timeout_Exception( $response_message, $response_code, $error_code ); + case 429: + throw new Too_Many_Requests_Exception( $response_message, $response_code, $error_code ); + case 500: + throw new Internal_Server_Error_Exception( $response_message, $response_code, $error_code ); + case 503: + throw new Service_Unavailable_Exception( $response_message, $response_code, $error_code ); + default: + throw new Bad_Request_Exception( $response_message, $response_code, $error_code ); + } + // phpcs:enable + } + + /** + * Generates the list of 5 suggestions to return. + * + * @param object $response The response from the API. + * + * @return string[] The array of suggestions. + */ + public function build_suggestions_array( $response ): array { + $suggestions = []; + $json = \json_decode( $response->body ); + if ( $json === null || ! isset( $json->choices ) ) { + return $suggestions; + } + foreach ( $json->choices as $suggestion ) { + $suggestions[] = $suggestion->text; + } + + return $suggestions; + } + + /** + * Parses the response from the API. + * + * @param array|WP_Error $response The response from the API. + * + * @return (string|int)[] The response code and message. + */ + public function parse_response( $response ) { + $response_code = ( \wp_remote_retrieve_response_code( $response ) !== '' ) ? \wp_remote_retrieve_response_code( $response ) : 0; + $response_message = \esc_html( \wp_remote_retrieve_response_message( $response ) ); + $error_code = ''; + $missing_licenses = []; + + if ( $response_code !== 200 && $response_code !== 0 ) { + $json_body = \json_decode( \wp_remote_retrieve_body( $response ) ); + if ( $json_body !== null ) { + $response_message = ( $json_body->message ?? $response_message ); + $error_code = ( $json_body->error_code ?? $this->map_message_to_code( $json_body->message ) ); + if ( $response_code === 402 ) { + $missing_licenses = isset( $json_body->missing_licenses ) ? (array) $json_body->missing_licenses : []; + } + } + } + + return [ $response_code, $response_message, $error_code, $missing_licenses ]; + } + + /** + * Checks whether the token has expired. + * + * @param string $jwt The JWT. + * + * @return bool Whether the token has expired. + */ + public function has_token_expired( string $jwt ): bool { + $parts = \explode( '.', $jwt ); + if ( \count( $parts ) !== 3 ) { + // Headers, payload and signature parts are not detected. + return true; + } + + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode -- Reason: Decoding the payload of the JWT. + $payload = \base64_decode( $parts[1] ); + $json = \json_decode( $payload ); + if ( $json === null || ! isset( $json->exp ) ) { + return true; + } + + return $json->exp < \time(); + } + + /** + * Retrieves the access JWT. + * + * @param string $user_id The user ID. + * + * @return string The access JWT. + * + * @throws RuntimeException Unable to retrieve the access token. + */ + public function get_access_token( string $user_id ): string { + $access_jwt = $this->user_helper->get_meta( $user_id, '_yoast_wpseo_ai_generator_access_jwt', true ); + if ( ! \is_string( $access_jwt ) || $access_jwt === '' ) { + throw new RuntimeException( 'Unable to retrieve the access token.' ); + } + + return $access_jwt; + } + + /** + * Retrieves the refresh JWT. + * + * @param string $user_id The user ID. + * + * @return string The access JWT. + * + * @throws RuntimeException Unable to retrieve the refresh token. + */ + public function get_refresh_token( $user_id ) { + $refresh_jwt = $this->user_helper->get_meta( $user_id, '_yoast_wpseo_ai_generator_refresh_jwt', true ); + if ( ! \is_string( $refresh_jwt ) || $refresh_jwt === '' ) { + throw new RuntimeException( 'Unable to retrieve the refresh token.' ); + } + + return $refresh_jwt; + } + + /** + * Checks if the AI Generator feature is active. + * + * @return bool Whether the feature is active. + */ + public function is_ai_generator_enabled() { + return $this->options_helper->get( 'enable_ai_generator', false ); + } + + /** + * Maps the message to a code. + * + * @param string $message The message. + * + * @return string The code. + */ + private function map_message_to_code( $message ) { + if ( \strpos( $message, 'must NOT have fewer than 1 characters' ) !== false ) { + return 'NOT_ENOUGH_CONTENT'; + } + if ( \strpos( $message, 'Client timeout' ) !== false ) { + return 'CLIENT_TIMEOUT'; + } + if ( \strpos( $message, 'Server timeout' ) !== false ) { + return 'SERVER_TIMEOUT'; + } + + return 'UNKNOWN'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/current-page-helper.php b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/current-page-helper.php new file mode 100644 index 00000000..1601c700 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/current-page-helper.php @@ -0,0 +1,107 @@ + 0 ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, We are casting to an integer, also this is a helper function. + return (int) \wp_unslash( $_GET['post'] ); + } + return 0; + } + + /** + * Retrieves the current post type. + * + * @return string The post type. + */ + public function get_current_post_type() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['post_type'] ) && \is_string( $_GET['post_type'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return \sanitize_text_field( \wp_unslash( $_GET['post_type'] ) ); + } + + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: should be done outside the helper function. + if ( isset( $_POST['post_type'] ) && \is_string( $_POST['post_type'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: should be done outside the helper function. + return \sanitize_text_field( \wp_unslash( $_POST['post_type'] ) ); + } + + $post_id = $this->get_current_post_id(); + + if ( $post_id ) { + return \get_post_type( $post_id ); + } + + return 'post'; + } + + /** + * Retrieves the current taxonomy. + * + * @return string The taxonomy. + */ + public function get_current_taxonomy() { + if ( ! isset( $_SERVER['REQUEST_METHOD'] ) || ! \in_array( $_SERVER['REQUEST_METHOD'], [ 'GET', 'POST' ], true ) ) { + return ''; + } + + // phpcs:ignore WordPress.Security.NonceVerification -- Reason: We are not processing form information. + if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: should be done outside the helper function. + if ( isset( $_POST['taxonomy'] ) && \is_string( $_POST['taxonomy'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: should be done outside the helper function. + return \sanitize_text_field( \wp_unslash( $_POST['taxonomy'] ) ); + } + return ''; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['taxonomy'] ) && \is_string( $_GET['taxonomy'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return \sanitize_text_field( \wp_unslash( $_GET['taxonomy'] ) ); + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/prominent-words-helper.php b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/prominent-words-helper.php new file mode 100644 index 00000000..d4efeb5f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/prominent-words-helper.php @@ -0,0 +1,96 @@ +options_helper = $options_helper; + } + + /** + * Computes the tf-idf (term frequency - inverse document frequency) score of a prominent word in a document. + * The document frequency should be 1 or higher, if it is not, it is assumed to be 1. + * + * @param int $term_frequency How many times the word occurs in the document. + * @param int $doc_frequency In how many documents this word occurs. + * + * @return float The tf-idf score of a prominent word. + */ + public function compute_tf_idf_score( $term_frequency, $doc_frequency ) { + // Set doc frequency to a minimum of 1, to avoid division by 0. + $doc_frequency = \max( 1, $doc_frequency ); + + return ( $term_frequency * ( 1 / $doc_frequency ) ); + } + + /** + * Computes the vector length for the given prominent words, applying Pythagoras's Theorem on the weights. + * + * @param array $prominent_words The prominent words, as an array mapping stems to `weight` and `df` (document frequency). + * + * @return float Vector length for the prominent words. + */ + public function compute_vector_length( $prominent_words ) { + $sum_of_squares = 0; + + foreach ( $prominent_words as $stem => $word ) { + $doc_frequency = 1; + if ( \array_key_exists( 'df', $word ) ) { + $doc_frequency = $word['df']; + } + + $tf_idf = $this->compute_tf_idf_score( $word['weight'], $doc_frequency ); + $sum_of_squares += ( $tf_idf ** 2 ); + } + + return \sqrt( $sum_of_squares ); + } + + /** + * Completes the prominent words indexing. + * + * @return void + */ + public function complete_indexing() { + $this->set_indexing_completed( true ); + \set_transient( 'total_unindexed_prominent_words', '0' ); + } + + /** + * Sets the prominent_words_indexing_completed option. + * + * @param bool $indexing_completed Whether or not the prominent words indexing has completed. + * + * @return void + */ + public function set_indexing_completed( $indexing_completed ) { + $this->options_helper->set( 'prominent_words_indexing_completed', $indexing_completed ); + } + + /** + * Gets a boolean that indicates whether the prominent words indexing has completed. + * + * @return bool Whether the prominent words indexing has completed. + */ + public function is_indexing_completed() { + return $this->options_helper->get( 'prominent_words_indexing_completed' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/version-helper.php b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/version-helper.php new file mode 100644 index 00000000..7f61c147 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/helpers/version-helper.php @@ -0,0 +1,30 @@ +' ) ); + } + + /** + * Checks whether a new update is available for Premium. + * + * @return bool + */ + public function is_premium_update_available() { + $plugin_updates = \get_plugin_updates(); + return isset( $plugin_updates[ \WPSEO_PREMIUM_BASENAME ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/index-now-key.php b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/index-now-key.php new file mode 100644 index 00000000..26fab0aa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/index-now-key.php @@ -0,0 +1,123 @@ +options_helper = $options_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function initialize() { + \add_action( 'init', [ $this, 'add_rewrite_rule' ], 1 ); + \add_action( 'plugins_loaded', [ $this, 'load' ], 15 ); + } + + /** + * Loads the integration. + * + * @return void + */ + public function load() { + if ( $this->options_helper->get( 'enable_index_now' ) === false ) { + return; + } + + $this->key = $this->options_helper->get( 'index_now_key' ); + if ( $this->key === '' ) { + $this->generate_key(); + } + \add_action( 'wp', [ $this, 'output_key' ], 0 ); + } + + /** + * Adds the rewrite rule for the IndexNow key txt file. + * + * @return void + */ + public function add_rewrite_rule() { + if ( $this->options_helper->get( 'enable_index_now' ) !== true ) { + return; + } + global $wp; + + $wp->add_query_var( 'yoast_index_now_key' ); + \add_rewrite_rule( '^yoast-index-now-([a-zA-Z0-9-]+)\.txt$', 'index.php?yoast_index_now_key=$matches[1]', 'top' ); + } + + /** + * Outputs the key when it matches the key in the database. + * + * @return void + */ + public function output_key() { + $key_in_url = \get_query_var( 'yoast_index_now_key' ); + if ( empty( $key_in_url ) ) { + return; + } + + if ( $key_in_url === $this->key ) { + // Remove all headers. + \header_remove(); + // Only send plain text header. + \header( 'Content-Type: text/plain;charset=UTF-8' ); + echo \esc_html( $this->key ); + die; + } + + // Trying keys? Good luck. + global $wp_query; + $wp_query->set_404(); + } + + /** + * Generates an IndexNow key. + * + * Adapted from wp_generate_password to include dash (-) and not be filtered. + * + * @return void + */ + private function generate_key() { + $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-'; + + for ( $i = 0; $i < 100; $i++ ) { + $this->key .= \substr( $chars, \wp_rand( 0, ( \strlen( $chars ) - 1 ) ), 1 ); + } + $this->options_helper->set( 'index_now_key', $this->key ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/introductions-initializer.php b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/introductions-initializer.php new file mode 100644 index 00000000..9af0f04d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/introductions-initializer.php @@ -0,0 +1,101 @@ +current_page_helper = $current_page_helper; + $this->introductions = $introductions; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * In this case: when on an admin page. + * + * @return array + */ + public static function get_conditionals() { + return [ Yoast_Admin_Or_Introductions_Route_Conditional::class ]; + } + + /** + * Registers the action to enqueue the needed script(s). + * + * @return void + */ + public function initialize() { + if ( $this->is_on_installation_page() ) { + return; + } + + \add_filter( 'wpseo_introductions', [ $this, 'add_introductions' ] ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Adds the Premium introductions. + * + * @param Introduction_Interface[] $introductions The introductions. + * + * @return array The merged introductions. + */ + public function add_introductions( $introductions ) { + // Safety check and bail. + if ( ! \is_array( $introductions ) ) { + return $introductions; + } + + return \array_merge( $introductions, $this->introductions ); + } + + /** + * Enqueue the workouts app. + * + * @return void + */ + public function enqueue_assets() { + \wp_enqueue_script( self::SCRIPT_HANDLE ); + \wp_localize_script( + self::SCRIPT_HANDLE, + 'wpseoPremiumIntroductions', + [ + 'pluginUrl' => \plugins_url( '', \WPSEO_PREMIUM_FILE ), + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/plugin.php b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/plugin.php new file mode 100644 index 00000000..45550a42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/plugin.php @@ -0,0 +1,70 @@ +options_helper = $options_helper; + } + + /** + * Loads the redirect handler. + * + * @return void + */ + public function initialize() { + \add_action( 'plugins_loaded', [ $this, 'load' ], 15 ); + + $wpseo_premium_capabilities = new WPSEO_Premium_Register_Capabilities(); + $wpseo_premium_capabilities->register_hooks(); + + \register_deactivation_hook( \WPSEO_PREMIUM_FILE, [ $this, 'wpseo_premium_deactivate' ] ); + } + + /** + * The premium setup + * + * @return void + */ + public function load() { + new WPSEO_Premium(); + } + + /** + * Cleans up Premium on deactivation. + * + * @return void + */ + public function wpseo_premium_deactivate() { + \do_action( 'wpseo_register_capabilities_premium' ); + WPSEO_Capability_Manager_Factory::get( 'premium' )->remove(); + if ( $this->options_helper->get( 'toggled_tracking' ) !== true ) { + $this->options_helper->set( 'tracking', false ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/redirect-handler.php b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/redirect-handler.php new file mode 100644 index 00000000..d4130853 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/redirect-handler.php @@ -0,0 +1,675 @@ +load_php_redirects() ) { + return; + } + + if ( ! \function_exists( 'is_plugin_active_for_network' ) ) { + require_once \ABSPATH . 'wp-admin/includes/plugin.php'; + } + // If the plugin is network activated, we wait for the plugins to be loaded before initializing. + if ( \is_plugin_active_for_network( \WPSEO_PREMIUM_BASENAME ) ) { + \add_action( 'plugins_loaded', [ $this, 'handle_redirects' ], 16 ); + } + else { + $this->handle_redirects(); + } + } + + /** + * Handles the 410 status code. + * + * @return void + */ + public function do_410() { + $is_include_hook_set = $this->set_template_include_hook( '410' ); + + if ( ! $is_include_hook_set ) { + $this->set_404(); + } + + $this->status_header( 410 ); + } + + /** + * Handles the 451 status code. + * + * @return void + */ + public function do_451() { + $is_include_hook_set = $this->set_template_include_hook( '451' ); + + if ( ! $is_include_hook_set ) { + $this->set_404(); + } + + $this->status_header( 451, 'Unavailable For Legal Reasons' ); + } + + /** + * Returns the template that should be included. + * + * @param string $template The template that will included before executing hook. + * + * @return string Returns the template that should be included. + */ + public function set_template_include( $template ) { + if ( ! empty( $this->template_file_path ) ) { + return $this->template_file_path; + } + + return $template; + } + + /** + * Replaces the $regex vars with URL matches. + * + * @param string[] $matches Array with the matches from the matching redirect. + * + * @return string The replaced URL. + */ + public function format_regex_redirect_url( $matches ) { + $arr_key = \substr( $matches[0], 1 ); + + if ( isset( $this->url_matches[ $arr_key ] ) ) { + return $this->url_matches[ $arr_key ]; + } + + return ''; + } + + /** + * Sets the wp_query to 404 when this is an object. + * + * @return void + */ + public function set_404() { + $wp_query = $this->get_wp_query(); + $wp_query->is_404 = true; + } + + /** + * Checks if the current URL matches a normal redirect. + * + * @param string $request_url The request url to look for. + * + * @return void + */ + protected function handle_normal_redirects( $request_url ) { + // Setting the redirects. + $redirects = $this->get_redirects( WPSEO_Redirect_Option::OPTION_PLAIN ); + $this->redirects = $this->normalize_redirects( $redirects ); + + $request_url = $this->normalize_url( $request_url ); + + // Get the URL and doing the redirect. + $redirect_url = $this->find_url( $request_url ); + + if ( empty( $redirect_url ) ) { + return; + } + + if ( $this->normalize_url( $redirect_url['url'] ) === $request_url ) { + return; + } + + $this->is_redirected = true; + $this->do_redirect( $redirect_url['url'], $redirect_url['type'] ); + } + + /** + * Normalizes the url by trimming the slashes. If the given URL is a slash only, + * it will do nothing. By normalizing the URL there is a basis for matching multiple + * variants (Like: url, /url, /url/, url/). + * + * @param string $url The URL to normalize. + * + * @return string The modified url. + */ + protected function normalize_url( $url ) { + if ( $url === '/' ) { + return $url; + } + + return \trim( $url, '/' ); + } + + /** + * Checks if the current URL matches a regex. + * + * @return void + */ + protected function handle_regex_redirects() { + // Setting the redirects. + $this->redirects = $this->get_redirects( WPSEO_Redirect_Option::OPTION_REGEX ); + + foreach ( $this->redirects as $regex => $redirect ) { + // Check if the URL matches the $regex. + $this->match_regex_redirect( $regex, $redirect ); + } + } + + /** + * Check if request URL matches one of the regex redirects. + * + * @param string $regex The reqular expression to match. + * @param array $redirect The URL that might be matched with the regex. + * + * @return void + */ + protected function match_regex_redirect( $regex, array $redirect ) { + /* + * Escape the ` because we use ` to delimit the regex to prevent faulty redirects. + * + * Explicitly chosen not to use `preg_quote` because we need to be able to parse + * user provided regular expression syntax. + */ + $regex = \str_replace( '`', '\\`', $regex ); + + // Suppress warning: a faulty redirect will give a warning and not an exception. So we can't catch it. + // See issue: https://github.com/Yoast/wordpress-seo-premium/issues/662. + // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged + if ( @\preg_match( "`{$regex}`", $this->request_url, $this->url_matches ) === 1 ) { + + // Replace the $regex vars with URL matches. + $redirect_url = \preg_replace_callback( + '/\$[0-9]+/', + [ $this, 'format_regex_redirect_url' ], + $redirect['url'] + ); + + $this->do_redirect( $redirect_url, $redirect['type'] ); + } + + // Reset url_matches. + $this->url_matches = []; + } + + /** + * Gets the redirects from the options. + * + * @param string $option The option name that wil be fetched. + * + * @return array Returns the redirects for the given option. + */ + protected function get_redirects( $option ) { + static $redirects; + + if ( ! isset( $redirects[ $option ] ) ) { + $redirects[ $option ] = \get_option( $option, false ); + } + + if ( ! empty( $redirects[ $option ] ) ) { + return $redirects[ $option ]; + } + + return []; + } + + /** + * Performs the redirect. + * + * @param string $redirect_url The target URL. + * @param string $redirect_type The type of the redirect. + * + * @return void + */ + protected function do_redirect( $redirect_url, $redirect_type ) { + $redirect_url = $this->parse_target_url( $redirect_url ); + + // Prevents redirecting to itself. + if ( $this->home_url( $this->request_url ) === $redirect_url ) { + return; + } + + $redirect_types_without_target = [ 410, 451 ]; + if ( \in_array( $redirect_type, $redirect_types_without_target, true ) ) { + $this->handle_redirect_without_target( $redirect_type ); + + return; + } + + $this->redirect( $redirect_url, $redirect_type ); + } + + /** + * Checks if a redirect has been executed. + * + * @return bool Whether a redirect has been executed. + */ + protected function is_redirected() { + return $this->is_redirected === true; + } + + /** + * Checks if we should load the PHP redirects. + * + * If Apache or NginX configuration is selected, don't load PHP redirects. + * + * @return bool True if PHP redirects should be loaded and used. + */ + protected function load_php_redirects() { + + if ( \defined( 'WPSEO_DISABLE_PHP_REDIRECTS' ) && \WPSEO_DISABLE_PHP_REDIRECTS === true ) { + return false; + } + + if ( \defined( 'WP_CLI' ) && \WP_CLI === true ) { + return false; + } + + $options = \get_option( 'wpseo_redirect', false ); + if ( $options === false ) { + // If the option is not set, save it, to prevent a query for a non-existing option on every page load. + \add_action( 'wp_head', [ $this, 'save_default_redirect_options' ] ); + return false; + } + + // If the PHP redirects are disabled intentionally, return false. + if ( ! empty( $options['disable_php_redirect'] ) && $options['disable_php_redirect'] === 'on' ) { + return false; + } + + // PHP redirects are the enabled method of redirecting. + return true; + } + + /** + * Saves the default redirects options to the DB. + * + * @return void + */ + public function save_default_redirect_options() { + $redirect_option = WPSEO_Premium_Redirect_Option::get_instance(); + \update_option( 'wpseo_redirect', $redirect_option->get_defaults(), true ); + } + + /** + * Gets the request URI. + * + * @return string + */ + protected function get_request_uri() { + $request_uri = ''; + + if ( isset( $_SERVER['REQUEST_URI'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We sanitize after decoding. + $request_uri = \sanitize_text_field( \rawurldecode( \wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + } + + return $this->strip_subdirectory( $request_uri ); + } + + /** + * Normalizes the redirects by raw url decoding the origin. + * + * @param array $redirects The redirects to normalize. + * + * @return array The normalized redirects. + */ + protected function normalize_redirects( $redirects ) { + $normalized_redirects = []; + + foreach ( $redirects as $origin => $redirect ) { + $normalized_redirects[ \rawurldecode( $origin ) ] = $redirect; + } + + return $normalized_redirects; + } + + /** + * Sets the request URL and sanitize the slashes for it. + * + * @return void + */ + protected function set_request_url() { + $this->request_url = $this->get_request_uri(); + } + + /** + * Finds the URL in the redirects. + * + * @param string $url The needed URL. + * + * @return bool|string The found url or false if not found. + */ + protected function find_url( $url ) { + $redirect_url = $this->search( $url ); + if ( ! empty( $redirect_url ) ) { + return $redirect_url; + } + + return $this->find_url_fallback( $url ); + } + + /** + * Searches for the given URL in the redirects array. + * + * @param string $url The URL to search for. + * + * @return string|bool The found url or false if not found. + */ + protected function search( $url ) { + if ( ! empty( $this->redirects[ $url ] ) ) { + return $this->redirects[ $url ]; + } + + return false; + } + + /** + * Searches for alternatives with slashes if requested URL isn't found. + * + * This will add a slash if there isn't a slash or it will remove a trailing slash when there isn't one. + * + * @todo Discuss: Maybe we should add slashes to all the values we handle instead of using a fallback. + * + * @param string $url The URL that have to be matched. + * + * @return bool|string The found url or false if not found. + */ + protected function find_url_fallback( $url ) { + $no_trailing_slash = \rtrim( $url, '/' ); + + $checks = [ + 'no_trailing_slash' => $no_trailing_slash, + 'trailing_slash' => $no_trailing_slash . '/', + ]; + + foreach ( $checks as $check ) { + $redirect_url = $this->search( $check ); + if ( ! empty( $redirect_url ) ) { + return $redirect_url; + } + } + + return false; + } + + /** + * Parses the target URL. + * + * @param string $target_url The URL to parse. When there isn't found a scheme, just parse it based on the home URL. + * + * @return string The parsed url. + */ + protected function parse_target_url( $target_url ) { + if ( $this->has_url_scheme( $target_url ) ) { + return $target_url; + } + + $target_url = $this->trailingslashit( $target_url ); + $target_url = $this->format_for_multisite( $target_url ); + + return $this->home_url( $target_url ); + } + + /** + * Checks if given url has a scheme. + * + * @param string $url The url to check. + * + * @return bool True when url has scheme. + */ + protected function has_url_scheme( $url ) { + $scheme = \wp_parse_url( $url, \PHP_URL_SCHEME ); + + return ! empty( $scheme ); + } + + /** + * Determines whether the target URL ends with a slash and adds one if necessary. + * + * @param string $target_url The url to format. + * + * @return string The url with trailing slash. + */ + protected function trailingslashit( $target_url ) { + // Adds slash to target URL when permalink structure ends with a slash. + if ( $this->requires_trailing_slash( $target_url ) ) { + return \trailingslashit( $target_url ); + } + + return $target_url; + } + + /** + * Formats the target url for the multisite if needed. + * + * @param string $target_url The url to format. + * + * @return string The formatted url. + */ + protected function format_for_multisite( $target_url ) { + if ( ! \is_multisite() ) { + return $target_url; + } + + $blog_details = \get_blog_details(); + if ( $blog_details && ! empty( $blog_details->path ) ) { + $blog_path = \ltrim( $blog_details->path, '/' ); + if ( ! empty( $blog_path ) && \strpos( $target_url, $blog_path ) === 0 ) { + $target_url = \substr( $target_url, \strlen( $blog_path ) ); + } + } + + return $target_url; + } + + /** + * Gets the redirect URL by given URL. + * + * @param string $redirect_url The URL that has to be redirected. + * + * @return string The redirect url. + */ + protected function home_url( $redirect_url ) { + $redirect_url = $this->strip_subdirectory( $redirect_url ); + + return \home_url( $redirect_url ); + } + + /** + * Strips the subdirectory from the given url. + * + * @param string $url The url to strip the subdirectory from. + * + * @return string The url with the stripped subdirectory. + */ + protected function strip_subdirectory( $url ) { + return WPSEO_Redirect_Util::strip_base_url_path_from_url( $this->get_home_url(), $url ); + } + + /** + * Returns the URL PATH from the home url. + * + * @return string|null The url path or null if there isn't one. + */ + protected function get_home_url() { + return \home_url(); + } + + /** + * Sets the hook for setting the template include. This is the file that we want to show. + * + * @param string $template_to_set The template to look for. + * + * @return bool True when template should be included. + */ + protected function set_template_include_hook( $template_to_set ) { + $this->template_file_path = $this->get_query_template( $template_to_set ); + if ( ! empty( $this->template_file_path ) ) { + \add_filter( 'template_include', [ $this, 'set_template_include' ] ); + + return true; + } + + return false; + } + + /** + * Wraps the WordPress status_header function. + * + * @param int $code HTTP status code. + * @param string $description Optional. A custom description for the HTTP status. + * + * @return void + */ + protected function status_header( $code, $description = '' ) { + \status_header( $code, $description ); + } + + /** + * Returns instance of WP_Query. + * + * @return WP_Query Instance of WP_Query. + */ + protected function get_wp_query() { + global $wp_query; + + if ( \is_object( $wp_query ) ) { + return $wp_query; + } + + return new WP_Query(); + } + + /** + * Handles the redirects without a target by setting the needed hooks. + * + * @param string $redirect_type The type of the redirect. + * + * @return void + */ + protected function handle_redirect_without_target( $redirect_type ) { + if ( $redirect_type === 410 ) { + \add_action( 'wp', [ $this, 'do_410' ] ); + } + + if ( $redirect_type === 451 ) { + \add_action( 'wp', [ $this, 'do_451' ] ); + } + } + + /** + * Wrapper method for doing the actual redirect. + * + * @param string $location The path to redirect to. + * @param int $status Status code to use. + * + * @return void + */ + protected function redirect( $location, $status = 302 ) { + if ( ! \function_exists( 'wp_redirect' ) ) { + require_once \ABSPATH . 'wp-includes/pluggable.php'; + } + + \wp_redirect( $location, $status, 'Yoast SEO Premium' ); + exit; + } + + /** + * Returns whether or not a target URL requires a trailing slash. + * + * @param string $target_url The target URL to check. + * + * @return bool True when trailing slash is required. + */ + protected function requires_trailing_slash( $target_url ) { + return WPSEO_Redirect_Util::requires_trailing_slash( $target_url ); + } + + /** + * Returns the query template. + * + * @param string $filename Filename without extension. + * + * @return string Full path to template file. + */ + protected function get_query_template( $filename ) { + return \get_query_template( $filename ); + } + + /** + * Actually handles redirects. + * + * @return void + */ + public function handle_redirects() { + // Set the requested URL. + $this->set_request_url(); + + // Check the normal redirects. + $this->handle_normal_redirects( $this->request_url ); + + // Check the regex redirects. + if ( $this->is_redirected() === false ) { + $this->handle_regex_redirects(); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/woocommerce.php b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/woocommerce.php new file mode 100644 index 00000000..66d963e8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/initializers/woocommerce.php @@ -0,0 +1,35 @@ + 'WPSEO_CLI_Premium_Requirement::enforce' ] + ); + + WP_CLI::add_command( + 'yoast redirect create', + 'WPSEO_CLI_Redirect_Create_Command', + [ 'before_invoke' => 'WPSEO_CLI_Premium_Requirement::enforce' ] + ); + + WP_CLI::add_command( + 'yoast redirect update', + 'WPSEO_CLI_Redirect_Update_Command', + [ 'before_invoke' => 'WPSEO_CLI_Premium_Requirement::enforce' ] + ); + + WP_CLI::add_command( + 'yoast redirect delete', + 'WPSEO_CLI_Redirect_Delete_Command', + [ 'before_invoke' => 'WPSEO_CLI_Premium_Requirement::enforce' ] + ); + + WP_CLI::add_command( + 'yoast redirect has', + 'WPSEO_CLI_Redirect_Has_Command', + [ 'before_invoke' => 'WPSEO_CLI_Premium_Requirement::enforce' ] + ); + + WP_CLI::add_command( + 'yoast redirect follow', + 'WPSEO_CLI_Redirect_Follow_Command', + [ 'before_invoke' => 'WPSEO_CLI_Premium_Requirement::enforce' ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/abstract-opengraph-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/abstract-opengraph-integration.php new file mode 100644 index 00000000..a30c581c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/abstract-opengraph-integration.php @@ -0,0 +1,206 @@ +options = $options; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Open_Graph_Conditional::class ]; + } + + /** + * Retrieves the relevant social title from the options. + * + * @param string $title The default title. + * + * @return mixed|string The filtered value. + */ + public function filter_title( $title ) { + $social_title = $this->options->get( $this::OPTION_TITLES_KEY_TITLE ); + + if ( ! empty( $social_title ) ) { + $title = $social_title; + } + + return $title; + } + + /** + * Retrieves the relevant social description from the options. + * + * @param string $description The default description. + * + * @return mixed|string The filtered value. + */ + public function filter_description( $description ) { + $social_description = $this->options->get( $this::OPTION_TITLES_KEY_DESCRIPTION ); + + if ( ! empty( $social_description ) ) { + $description = $social_description; + } + + return $description; + } + + /** + * Retrieves the relevant social image ID from the options. + * + * @param int $id The default image ID. + * + * @return mixed|int The filtered value. + */ + public function filter_image_id( $id ) { + $social_id = $this->options->get( $this::OPTION_TITLES_KEY_IMAGE_ID ); + + if ( ! empty( $social_id ) ) { + $id = $social_id; + } + + return $id; + } + + /** + * Retrieves the relevant social image URL from the options. + * + * @param string $url The default image URL. + * + * @return mixed|int The filtered value. + */ + public function filter_image( $url ) { + $social_url = $this->options->get( $this::OPTION_TITLES_KEY_IMAGE ); + + if ( ! empty( $social_url ) ) { + $url = $social_url; + } + + return $url; + } + + /** + * Retrieves the relevant social title for the subtype from the options. + * + * @param string $title The default title. + * @param string $object_subtype The subtype of the current indexable. + * + * @return mixed|string The filtered value. + */ + public function filter_title_for_subtype( $title, $object_subtype ) { + $social_title = $this->options->get( $this::OPTION_TITLES_KEY_TITLE . $object_subtype ); + + if ( ! empty( $social_title ) ) { + $title = $social_title; + } + + return $title; + } + + /** + * Retrieves the relevant social description for the subtype from the options. + * + * @param string $description The default description. + * @param string $object_subtype The subtype of the current indexable. + * + * @return mixed|string The filtered value. + */ + public function filter_description_for_subtype( $description, $object_subtype ) { + $social_description = $this->options->get( $this::OPTION_TITLES_KEY_DESCRIPTION . $object_subtype ); + + if ( ! empty( $social_description ) ) { + $description = $social_description; + } + + return $description; + } + + /** + * Retrieves the relevant social image ID for the subtype from the options. + * + * @param int $id The default image ID. + * @param string $object_subtype The subtype of the current indexable. + * + * @return mixed|string The filtered value. + */ + public function filter_image_id_for_subtype( $id, $object_subtype ) { + $social_id = $this->options->get( $this::OPTION_TITLES_KEY_IMAGE_ID . $object_subtype ); + + if ( ! empty( $social_id ) ) { + $id = $social_id; + } + + return $id; + } + + /** + * Retrieves the relevant social image URL for the subtype from the options. + * + * @param string $url The default image URL. + * @param string $object_subtype The subtype of the current indexable. + * + * @return mixed|string The filtered value. + */ + public function filter_image_for_subtype( $url, $object_subtype ) { + $social_url = $this->options->get( $this::OPTION_TITLES_KEY_IMAGE . $object_subtype ); + + if ( ! empty( $social_url ) ) { + $url = $social_url; + } + + return $url; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-consent-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-consent-integration.php new file mode 100644 index 00000000..fdfe0108 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-consent-integration.php @@ -0,0 +1,134 @@ +asset_manager = $asset_manager; + $this->addon_manager = $addon_manager; + $this->options_helper = $options_helper; + $this->user_helper = $user_helper; + $this->wistia_embed_permission_repository = $wistia_embed_permission_repository; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Hide AI feature option in user profile if the user is not allowed to use it. + if ( \current_user_can( 'edit_posts' ) ) { + \add_action( 'wpseo_user_profile_additions', [ $this, 'render_user_profile' ], 12 ); + } + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ], 11 ); + } + + /** + * Enqueues the required assets. + * + * @return void + */ + public function enqueue_assets() { + $this->asset_manager->enqueue_style( 'premium-ai-generator' ); + + \wp_enqueue_script( 'wp-seo-premium-manage-ai-consent-button' ); + $user_id = $this->user_helper->get_current_user_id(); + \wp_localize_script( + 'wp-seo-premium-manage-ai-consent-button', + 'wpseoPremiumManageAiConsentButton', + [ + 'hasConsent' => $this->user_helper->get_meta( $user_id, '_yoast_wpseo_ai_consent', true ), + // Note: this is passing the Free plugin URL! As the image is located in there. + 'pluginUrl' => \plugins_url( '', \WPSEO_FILE ), + 'wistiaEmbedPermission' => $this->wistia_embed_permission_repository->get_value_for_user( $user_id ), + ] + ); + } + + /** + * Renders the AI consent button for the user profile. + * + * @return void + */ + public function render_user_profile() { + echo '', + ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-generator-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-generator-integration.php new file mode 100644 index 00000000..3f85e7cd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/ai-generator-integration.php @@ -0,0 +1,202 @@ + + */ + public static function get_conditionals() { + return [ Ai_Editor_Conditional::class ]; + } + + /** + * Constructs the class. + * + * @param WPSEO_Admin_Asset_Manager $asset_manager The admin asset manager. + * @param WPSEO_Addon_Manager $addon_manager The addon manager. + * @param AI_Generator_Helper $ai_generator_helper The AI generator helper. + * @param Current_Page_Helper $current_page_helper The current page helper. + * @param Options_Helper $options_helper The options helper. + * @param User_Helper $user_helper The user helper. + * @param Introductions_Seen_Repository $introductions_seen_repository The introductions seen repository. + */ + public function __construct( + WPSEO_Admin_Asset_Manager $asset_manager, + WPSEO_Addon_Manager $addon_manager, + AI_Generator_Helper $ai_generator_helper, + Current_Page_Helper $current_page_helper, + Options_Helper $options_helper, + User_Helper $user_helper, + Introductions_Seen_Repository $introductions_seen_repository + ) { + $this->asset_manager = $asset_manager; + $this->addon_manager = $addon_manager; + $this->ai_generator_helper = $ai_generator_helper; + $this->current_page_helper = $current_page_helper; + $this->options_helper = $options_helper; + $this->user_helper = $user_helper; + $this->introductions_seen_repository = $introductions_seen_repository; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + if ( ! $this->options_helper->get( 'enable_ai_generator', false ) ) { + return; + } + + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + // Enqueue after Elementor_Premium integration, which re-registers the assets. + \add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'enqueue_assets' ], 11 ); + } + + /** + * Gets the subscription status for Yoast SEO Premium and Yoast WooCommerce SEO. + * + * @return array + */ + public function get_product_subscriptions() { + return [ + 'premiumSubscription' => $this->addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ), + 'wooCommerceSubscription' => $this->addon_manager->has_valid_subscription( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ), + ]; + } + + /** + * Enqueues the required assets. + * + * @return void + */ + public function enqueue_assets() { + $user_id = $this->user_helper->get_current_user_id(); + + \wp_enqueue_script( 'wp-seo-premium-ai-generator' ); + \wp_localize_script( + 'wp-seo-premium-ai-generator', + 'wpseoPremiumAiGenerator', + [ + 'adminUrl' => \admin_url( 'admin.php' ), + 'hasConsent' => $this->user_helper->get_meta( $user_id, '_yoast_wpseo_ai_consent', true ), + 'productSubscriptions' => $this->get_product_subscriptions(), + 'hasSeenIntroduction' => $this->introductions_seen_repository->is_introduction_seen( $user_id, Ai_Generate_Titles_And_Descriptions_Introduction::ID ), + 'pluginUrl' => \plugins_url( '', \WPSEO_PREMIUM_FILE ), + 'postType' => $this->get_post_type(), + 'contentType' => $this->get_content_type(), + 'requestTimeout' => $this->ai_generator_helper->get_request_timeout(), + ] + ); + $this->asset_manager->enqueue_style( 'premium-ai-generator' ); + } + + /** + * Returns the post type of the currently edited object. + * In case this object is a term, returns the taxonomy. + * + * @return string + */ + private function get_post_type() { + // The order of checking is important here: terms have an empty post_type parameter in their GET request. + $taxonomy = $this->current_page_helper->get_current_taxonomy(); + if ( $taxonomy !== '' ) { + return $taxonomy; + } + + $post_type = $this->current_page_helper->get_current_post_type(); + if ( $post_type ) { + return $post_type; + } + + return ''; + } + + /** + * Returns the content type (i.e., 'post' or 'term') of the currently edited object. + * + * @return string + */ + private function get_content_type() { + $taxonomy = $this->current_page_helper->get_current_taxonomy(); + if ( $taxonomy !== '' ) { + return 'term'; + } + + $post_type = $this->current_page_helper->get_current_post_type(); + if ( $post_type ) { + return 'post'; + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-column-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-column-integration.php new file mode 100644 index 00000000..ddaf933e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-column-integration.php @@ -0,0 +1,230 @@ +post_type_helper = $post_type_helper; + $this->wpdb = $wpdb; + $this->admin_columns_cache = $admin_columns_cache; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'posts_clauses', [ $this, 'order_by_cornerstone' ], 1, 2 ); + \add_action( 'admin_init', [ $this, 'register_init_hooks' ] ); + + // Adds a filter to exclude the attachments from the cornerstone column. + \add_filter( 'wpseo_cornerstone_column_post_types', [ 'WPSEO_Post_Type', 'filter_attachment_post_type' ] ); + + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Register hooks that need to be registered after `init` due to all post types not yet being registered. + * + * @return void + */ + public function register_init_hooks() { + $public_post_types = \apply_filters( 'wpseo_cornerstone_column_post_types', $this->post_type_helper->get_accessible_post_types() ); + + if ( ! \is_array( $public_post_types ) || empty( $public_post_types ) ) { + return; + } + + foreach ( $public_post_types as $post_type ) { + \add_filter( 'manage_' . $post_type . '_posts_columns', [ $this, 'add_cornerstone_column' ] ); + \add_action( 'manage_' . $post_type . '_posts_custom_column', [ $this, 'column_content' ], 10, 2 ); + \add_filter( 'manage_edit-' . $post_type . '_sortable_columns', [ $this, 'column_sort' ] ); + } + } + + /** + * Enqueues the assets needed for the integration to work. + * + * @return void + */ + public function enqueue_assets() { + \wp_enqueue_style( WPSEO_Admin_Asset_Manager::PREFIX . 'premium-post-overview' ); + } + + /** + * Adds the columns for the post overview. + * + * @param array $columns Array with columns. + * + * @return array The extended array with columns. + */ + public function add_cornerstone_column( $columns ) { + if ( ! \is_array( $columns ) ) { + return $columns; + } + + $columns[ self::CORNERSTONE_COLUMN_NAME ] = \sprintf( + '%2$s', + \esc_attr__( 'Is this cornerstone content?', 'wordpress-seo-premium' ), + /* translators: Hidden accessibility text. */ + \esc_html__( 'Cornerstone content', 'wordpress-seo-premium' ) + ); + + return $columns; + } + + /** + * Modifies the query pieces to allow ordering column by cornerstone. + * + * @param array $pieces Array of Query pieces. + * @param WP_Query $query The Query on which to apply. + * + * @return array + */ + public function order_by_cornerstone( $pieces, $query ) { + if ( $query->get( 'orderby' ) !== self::CORNERSTONE_COLUMN_NAME ) { + return $pieces; + } + + return $this->build_sort_query_pieces( $pieces, $query ); + } + + /** + * Builds the pieces for a sorting query. + * + * @param array $pieces Array of Query pieces. + * @param WP_Query $query The Query on which to apply. + * + * @return array Modified Query pieces. + */ + protected function build_sort_query_pieces( $pieces, $query ) { + // We only want our code to run in the main WP query. + if ( ! $query->is_main_query() ) { + return $pieces; + } + + // Get the order query variable - ASC or DESC. + $order = \strtoupper( $query->get( 'order' ) ); + + // Make sure the order setting qualifies. If not, set default as ASC. + if ( ! \in_array( $order, [ 'ASC', 'DESC' ], true ) ) { + $order = 'ASC'; + } + + $table = Model::get_table_name( 'Indexable' ); + + $pieces['join'] .= " LEFT JOIN $table AS yoast_indexable ON yoast_indexable.object_id = {$this->wpdb->posts}.ID AND yoast_indexable.object_type = 'post' "; + $pieces['orderby'] = "yoast_indexable.is_cornerstone $order, FIELD( {$this->wpdb->posts}.post_status, 'publish' ) $order, {$pieces['orderby']}"; + + return $pieces; + } + + /** + * Displays the column content for the given column. + * + * @param string $column_name Column to display the content for. + * @param int $post_id Post to display the column content for. + * + * @return void + */ + public function column_content( $column_name, $post_id ) { + $indexable = $this->admin_columns_cache->get_indexable( $post_id ); + // Nothing to output if we don't have the value. + if ( empty( $indexable ) ) { + return; + } + + // phpcs:disable WordPress.Security.EscapeOutput -- Reason: The Icons contains safe svg. + if ( $column_name === self::CORNERSTONE_COLUMN_NAME ) { + if ( $indexable->is_cornerstone === true ) { + echo new Checkmark_Icon_Presenter( 20 ); + + return; + } + + echo new Cross_Icon_Presenter( 20 ); + } + // phpcs:enable + } + + /** + * Sets the sortable columns. + * + * @param array $columns Array with sortable columns. + * + * @return array The extended array with sortable columns. + */ + public function column_sort( $columns ) { + $columns[ self::CORNERSTONE_COLUMN_NAME ] = self::CORNERSTONE_COLUMN_NAME; + + return $columns; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-taxonomy-column-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-taxonomy-column-integration.php new file mode 100644 index 00000000..28572a89 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/cornerstone-taxonomy-column-integration.php @@ -0,0 +1,141 @@ +current_page_helper = $current_page_helper; + } + + /** + * {@inheritDoc} + */ + public static function get_conditionals() { + return [ + Admin_Conditional::class, + Term_Overview_Or_Ajax_Conditional::class, + Cornerstone_Enabled_Conditional::class, + ]; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'register_init_hooks' ] ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Register hooks that need to be registered after `init` due to all post types not yet being registered. + * + * @return void + */ + public function register_init_hooks() { + $taxonomy = $this->current_page_helper->get_current_taxonomy(); + $is_product = $this->current_page_helper->get_current_post_type() === 'product'; + $is_product_cat = $taxonomy === 'product_cat'; + $is_product_tag = $taxonomy === 'product_tag'; + + if ( ( $is_product && ( $is_product_cat || $is_product_tag ) ) || ( ! $is_product && $taxonomy ) ) { + \add_filter( 'manage_edit-' . $taxonomy . '_columns', [ $this, 'add_cornerstone_column' ] ); + \add_filter( 'manage_' . $taxonomy . '_custom_column', [ $this, 'column_content' ], 10, 3 ); + } + } + + /** + * Enqueues the assets needed for the integration to work. + * + * @return void + */ + public function enqueue_assets() { + \wp_enqueue_style( WPSEO_Admin_Asset_Manager::PREFIX . 'premium-post-overview' ); + } + + /** + * Adds the cornerstone column for the term overview. + * + * @param array $columns Array with columns. + * + * @return array The extended array with columns. + */ + public function add_cornerstone_column( $columns ) { + if ( ! \is_array( $columns ) ) { + return $columns; + } + + $columns[ self::CORNERSTONE_COLUMN_NAME ] = \sprintf( + ' + + %2$s + + ', + \esc_attr__( 'Is this cornerstone content?', 'wordpress-seo-premium' ), + /* translators: Hidden accessibility text. */ + \esc_html__( 'Cornerstone content', 'wordpress-seo-premium' ) + ); + + return $columns; + } + + /** + * Displays the column content for the given column. + * + * @param string $content The current content of the column. + * @param string $column_name The name of the column. + * @param int $term_id ID of requested taxonomy. + * + * @return string + */ + public function column_content( $content, $column_name, $term_id ) { + $is_cornerstone = (int) WPSEO_Taxonomy_Meta::get_term_meta( $term_id, $this->current_page_helper->get_current_taxonomy(), 'is_cornerstone' ); + + if ( $column_name === self::CORNERSTONE_COLUMN_NAME ) { + if ( $is_cornerstone ) { + // phpcs:disable WordPress.Security.EscapeOutput -- Reason: The Icons contains safe svg. + echo new Checkmark_Icon_Presenter( 20 ); + + return; + } + + echo new Cross_Icon_Presenter( 20 ); + } + + return $content; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-column-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-column-integration.php new file mode 100644 index 00000000..f5846448 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-column-integration.php @@ -0,0 +1,233 @@ +post_type_helper = $post_type_helper; + $this->score_icon_helper = $score_icon_helper; + $this->wpdb = $wpdb; + $this->admin_columns_cache = $admin_columns_cache; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'posts_clauses', [ $this, 'order_by_inclusive_language_score' ], 1, 2 ); + \add_action( 'admin_init', [ $this, 'register_init_hooks' ] ); + + // Adds a filter to exclude the attachments from the inclusive language column. + \add_filter( 'wpseo_inclusive_language_column_post_types', [ 'WPSEO_Post_Type', 'filter_attachment_post_type' ] ); + + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Register hooks that need to be registered after `init` due to all post types not yet being registered. + * + * @return void + */ + public function register_init_hooks() { + $public_post_types = \apply_filters( 'wpseo_inclusive_language_column_post_types', $this->post_type_helper->get_accessible_post_types() ); + + if ( ! \is_array( $public_post_types ) || empty( $public_post_types ) ) { + return; + } + + foreach ( $public_post_types as $post_type ) { + \add_filter( 'manage_' . $post_type . '_posts_columns', [ $this, 'add_inclusive_language_column' ] ); + \add_action( 'manage_' . $post_type . '_posts_custom_column', [ $this, 'column_content' ], 10, 2 ); + \add_filter( 'manage_edit-' . $post_type . '_sortable_columns', [ $this, 'column_sort' ] ); + } + } + + /** + * Enqueues the assets needed for the integration to work. + * + * @return void + */ + public function enqueue_assets() { + \wp_enqueue_style( WPSEO_Admin_Asset_Manager::PREFIX . 'premium-post-overview' ); + } + + /** + * Adds the inclusive language column for the post overview. + * + * @param array $columns Array with columns. + * + * @return array The extended array with columns. + */ + public function add_inclusive_language_column( $columns ) { + if ( ! \is_array( $columns ) ) { + return $columns; + } + + $columns[ self::INCLUSIVE_LANGUAGE_COLUMN_NAME ] = \sprintf( + '%2$s', + \esc_attr__( 'Inclusive language score', 'wordpress-seo-premium' ), + \esc_html__( 'Inclusive language score', 'wordpress-seo-premium' ) + ); + + return $columns; + } + + /** + * Modifies the query pieces to allow ordering column by inclusive language score. + * + * @param array $pieces Array of Query pieces. + * @param WP_Query $query The Query on which to apply. + * + * @return array + */ + public function order_by_inclusive_language_score( $pieces, $query ) { + if ( $query->get( 'orderby' ) !== self::INCLUSIVE_LANGUAGE_COLUMN_NAME ) { + return $pieces; + } + + return $this->build_sort_query_pieces( $pieces, $query ); + } + + /** + * Builds the pieces for a sorting query. + * + * @param array $pieces Array of Query pieces. + * @param WP_Query $query The Query on which to apply. + * + * @return array Modified Query pieces. + */ + protected function build_sort_query_pieces( $pieces, $query ) { + // We only want our code to run in the main WP query. + if ( ! $query->is_main_query() ) { + return $pieces; + } + + // Get the order query variable - ASC or DESC. + $order = \strtoupper( $query->get( 'order' ) ); + + // Make sure the order setting qualifies. If not, set default as ASC. + if ( ! \in_array( $order, [ 'ASC', 'DESC' ], true ) ) { + $order = 'ASC'; + } + + $table = Model::get_table_name( 'Indexable' ); + + $pieces['join'] .= " LEFT JOIN $table AS yoast_indexable ON yoast_indexable.object_id = {$this->wpdb->posts}.ID AND yoast_indexable.object_type = 'post' "; + $pieces['orderby'] = "yoast_indexable.inclusive_language_score $order, {$pieces['orderby']}"; + + return $pieces; + } + + /** + * Displays the column content for the given column. + * + * @param string $column_name Column to display the content for. + * @param int $post_id Post to display the column content for. + * + * @return void + */ + public function column_content( $column_name, $post_id ) { + $indexable = $this->admin_columns_cache->get_indexable( $post_id ); + // Nothing to output if we don't have the value. + if ( empty( $indexable ) ) { + return; + } + + if ( $column_name === self::INCLUSIVE_LANGUAGE_COLUMN_NAME ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped through the Score_Icon_Helper. + echo $this->score_icon_helper->for_inclusive_language( $indexable->inclusive_language_score ); + } + } + + /** + * Sets the sortable columns. + * + * @param array $columns Array with sortable columns. + * + * @return array The extended array with sortable columns. + */ + public function column_sort( $columns ) { + $columns[ self::INCLUSIVE_LANGUAGE_COLUMN_NAME ] = self::INCLUSIVE_LANGUAGE_COLUMN_NAME; + + return $columns; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-filter-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-filter-integration.php new file mode 100644 index 00000000..d0da7057 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-filter-integration.php @@ -0,0 +1,165 @@ +' + /* translators: Hidden accessibility text. */ + . \esc_html__( 'Filter by Inclusive Language Score', 'wordpress-seo-premium' ) + . ''; + echo ''; + } + + /** + * Generates an '; + } + + /** + * Retrieves the current inclusive language score filter value from the $_GET variable. + * + * @return string|null The sanitized inclusive language score filter value or null when the variable is not set in $_GET. + */ + public function get_current_inclusive_language_filter() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['inclusive_language_filter'] ) && \is_string( $_GET['inclusive_language_filter'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return \sanitize_text_field( \wp_unslash( $_GET['inclusive_language_filter'] ) ); + } + return null; + } + + /** + * Determines the inclusive language score filter to the meta query, based on the passed inclusive language filter. + * + * @param string $inclusive_language_filter The inclusive language filter to use to determine what further filter to apply. + * + * @return array The inclusive language score filter. + */ + public function determine_inclusive_language_filters( $inclusive_language_filter ) { + $rank = new WPSEO_Rank( $inclusive_language_filter ); + + return $this->create_inclusive_language_score_filter( $rank->get_starting_score(), $rank->get_end_score() ); + } + + /** + * Creates an inclusive language score filter. + * + * @param number $low The lower boundary of the score. + * @param number $high The higher boundary of the score. + * + * @return array The inclusive language score filter. + */ + protected function create_inclusive_language_score_filter( $low, $high ) { + return [ + [ + 'key' => WPSEO_Meta::$meta_prefix . 'inclusive_language_score', + 'value' => [ $low, $high ], + 'type' => 'numeric', + 'compare' => 'BETWEEN', + ], + ]; + } + + /** + * Adds the inclusive language filter to the list of active filters -- if it has been used for filtering. + * + * @param array $active_filters The currently active filters. + * @return array The active filters, including the inclusive language filter -- if it has been used for filtering. + */ + public function add_inclusive_language_filter( $active_filters ) { + $inclusive_language_filter = $this->get_current_inclusive_language_filter(); + + if ( \is_string( $inclusive_language_filter ) && $inclusive_language_filter !== '' ) { + $active_filters = \array_merge( + $active_filters, + $this->determine_inclusive_language_filters( $inclusive_language_filter ) + ); + } + + return $active_filters; + } + + /** + * Adds the inclusive language score field to the order by part of the query -- if it has been selected during filtering. + * + * @param array $order_by The current order by statement. + * @param string $order_by_column The column to use for ordering. + * @return array The order by. + */ + public function add_inclusive_language_order_by( $order_by, $order_by_column = '' ) { + if ( $order_by === [] && $order_by_column === Inclusive_Language_Column_Integration::INCLUSIVE_LANGUAGE_COLUMN_NAME ) { + return [ + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. + 'meta_key' => WPSEO_Meta::$meta_prefix . 'inclusive_language_score', + 'orderby' => 'meta_value_num', + ]; + } + + return $order_by; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-taxonomy-column-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-taxonomy-column-integration.php new file mode 100644 index 00000000..b5cc79f1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/inclusive-language-taxonomy-column-integration.php @@ -0,0 +1,144 @@ +score_icon_helper = $score_icon_helper; + $this->current_page_helper = $current_page_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'register_init_hooks' ] ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Register hooks that need to be registered after `init` due to all post types not yet being registered. + * + * @return void + */ + public function register_init_hooks() { + $taxonomy = $this->current_page_helper->get_current_taxonomy(); + $is_product = $this->current_page_helper->get_current_post_type() === 'product'; + $is_product_cat = $taxonomy === 'product_cat'; + $is_product_tag = $taxonomy === 'product_tag'; + + if ( ( $is_product && ( $is_product_cat || $is_product_tag ) ) || ( ! $is_product && $taxonomy ) ) { + \add_filter( 'manage_edit-' . $taxonomy . '_columns', [ $this, 'add_inclusive_language_column' ] ); + \add_filter( 'manage_' . $taxonomy . '_custom_column', [ $this, 'column_content' ], 10, 3 ); + } + } + + /** + * Enqueues the assets needed for the integration to work. + * + * @return void + */ + public function enqueue_assets() { + \wp_enqueue_style( WPSEO_Admin_Asset_Manager::PREFIX . 'premium-post-overview' ); + } + + /** + * Adds the inclusive language column for the term overview. + * + * @param array $columns Array with columns. + * + * @return array The extended array with columns. + */ + public function add_inclusive_language_column( $columns ) { + if ( ! \is_array( $columns ) ) { + return $columns; + } + + $columns[ self::INCLUSIVE_LANGUAGE_COLUMN_NAME ] = \sprintf( + ' + + %2$s + + ', + \esc_attr__( 'Inclusive language score', 'wordpress-seo-premium' ), + \esc_html__( 'Inclusive language score', 'wordpress-seo-premium' ) + ); + + return $columns; + } + + /** + * Displays the column content for the given column. + * + * @param string $content The current content of the column. + * @param string $column_name The name of the column. + * @param int $term_id ID of requested taxonomy. + * + * @return string + */ + public function column_content( $content, $column_name, $term_id ) { + $score = (int) WPSEO_Taxonomy_Meta::get_term_meta( $term_id, $this->current_page_helper->get_current_taxonomy(), 'inclusive_language_score' ); + + if ( $column_name === self::INCLUSIVE_LANGUAGE_COLUMN_NAME ) { + return $this->score_icon_helper->for_inclusive_language( $score ); + } + + return $content; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/keyword-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/keyword-integration.php new file mode 100644 index 00000000..ce482f59 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/keyword-integration.php @@ -0,0 +1,89 @@ + [ + [ + 'key' => '_yoast_wpseo_focuskeywords', + 'value' => \sprintf( '"keyword":"%s"', $keyword ), + 'compare' => 'LIKE', + ], + ], + 'post__not_in' => [ $post_id ], + 'fields' => 'ids', + 'post_type' => 'any', + + /* + * We only need to return zero, one or two results: + * - Zero: keyword hasn't been used before + * - One: Keyword has been used once before + * - Two or more: Keyword has been used twice or more before + */ + 'posts_per_page' => 2, + ]; + $get_posts = new WP_Query( $query ); + return \array_merge( $post_ids, $get_posts->posts ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/metabox-formatter-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/metabox-formatter-integration.php new file mode 100644 index 00000000..29d6d045 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/metabox-formatter-integration.php @@ -0,0 +1,61 @@ +get_upgrade_link(); + return \array_filter( + $links, + static function ( $link ) use ( $link_to_remove ) { + return $link !== $link_to_remove; + } + ); + } + + /** + * Adds the upgrade link to the premium actions. + * + * @param string[] $links The action links. + * + * @return string[] The action link with the upgrade link added. + */ + public function add_yoast_seo_premium_action_link( $links ) { + $addon_manager = new WPSEO_Addon_Manager(); + + if ( ! $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ) ) { + \array_unshift( $links, $this->get_upgrade_link() ); + } + + return $links; + } + + /** + * Returns the upgrade link. + * + * @return string The upgrade link. + */ + protected function get_upgrade_link() { + // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch -- Reason: text is originally from Yoast SEO. + return '' . \__( 'Activate your subscription', 'wordpress-seo' ) . ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/indexing-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/indexing-integration.php new file mode 100644 index 00000000..bef533f8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/indexing-integration.php @@ -0,0 +1,243 @@ +language_helper = $language_helper; + $this->url_helper = $url_helper; + $this->prominent_words_helper = $prominent_words_helper; + + // Indexation actions are used to calculate the number of unindexed objects. + $this->indexing_actions = [ + // Get the number of indexables that haven't had their prominent words indexed yet. + $content_indexation_action, + + // Take posts and terms into account that do not have indexables yet. + // These need to be counted again here (in addition to being counted in Free) because them being unindexed + // means that the above prominent words unindexed count couldn't detect these posts/terms for prominent words indexing. + $post_indexation_action, + $term_indexation_action, + $general_indexation_action, + $post_type_archive_indexation_action, + ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); + + \add_filter( 'wpseo_indexing_data', [ $this, 'adapt_indexing_data' ] ); + \add_filter( 'wpseo_indexing_get_unindexed_count', [ $this, 'get_unindexed_count' ] ); + \add_filter( 'wpseo_indexing_get_limited_unindexed_count', [ $this, 'get_limited_unindexed_count' ], 10, 2 ); + \add_filter( 'wpseo_indexing_endpoints', [ $this, 'add_endpoints' ] ); + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ + Admin_Conditional::class, + Migrations_Conditional::class, + ]; + } + + /** + * Retrieves the endpoints to call. + * + * @param array $endpoints The endpoints to extend. + * + * @return array The endpoints. + */ + public function add_endpoints( $endpoints ) { + $endpoints['get_content'] = Prominent_Words_Route::FULL_GET_CONTENT_ROUTE; + $endpoints['complete_words'] = Prominent_Words_Route::FULL_COMPLETE_ROUTE; + + return $endpoints; + } + + /** + * Adapts the indexing data as sent to the JavaScript side of the + * indexing process. + * + * Adds the appropriate prominent words endpoints and other settings. + * + * @param array $data The data to be adapted. + * + * @return array The adapted indexing data. + */ + public function adapt_indexing_data( $data ) { + $site_locale = \get_locale(); + $language = WPSEO_Language_Utils::get_language( $site_locale ); + + $data['locale'] = $site_locale; + $data['language'] = $language; + + $data['morphologySupported'] = $this->language_helper->is_word_form_recognition_active( $language ); + + $per_indexable_limit = self::PER_INDEXABLE_LIMIT_NO_FUNCTION_WORD_SUPPORT; + if ( $this->language_helper->has_function_word_support( $language ) ) { + $per_indexable_limit = self::PER_INDEXABLE_LIMIT; + } + + $data['prominentWords'] = [ + 'endpoint' => Prominent_Words_Route::FULL_SAVE_ROUTE, + 'perIndexableLimit' => $per_indexable_limit, + ]; + + return $data; + } + + /** + * Enqueues the required scripts. + * + * @return void + */ + public function enqueue_scripts() { + if ( ! isset( $_GET['page'] ) + || ( $_GET['page'] !== 'wpseo_tools' && $_GET['page'] !== 'wpseo_workouts' && $_GET['page'] !== 'wpseo_dashboard' ) + || ( $_GET['page'] === 'wpseo_tools' && isset( $_GET['tool'] ) ) + ) { + return; + } + + $is_completed = ( (int) $this->get_unindexed_count( 0 ) === 0 ); + $this->prominent_words_helper->set_indexing_completed( $is_completed ); + + \wp_enqueue_script( 'yoast-premium-prominent-words-indexation' ); + \wp_localize_script( 'yoast-premium-prominent-words-indexation', 'wpseoPremiumIndexationData', [ 'licensedURL' => $this->url_helper->network_safe_home_url() ] ); + } + + /** + * Returns the total number of unindexed objects. + * + * @param int $unindexed_count The unindexed count. + * + * @return int The total number of indexables to recalculate. + */ + public function get_unindexed_count( $unindexed_count ) { + foreach ( $this->indexing_actions as $indexing_action ) { + $unindexed_count += $indexing_action->get_total_unindexed(); + } + return $unindexed_count; + } + + /** + * Returns a limited number of unindexed objects. + * + * @param int $unindexed_count The unindexed count. + * @param int $limit Limit the number of unindexed objects that are counted. + * + * @return int The total number of unindexed objects. + */ + public function get_limited_unindexed_count( $unindexed_count, $limit ) { + foreach ( $this->indexing_actions as $indexing_action ) { + $unindexed_count += $indexing_action->get_limited_unindexed_count( $limit - $unindexed_count + 1 ); + if ( $unindexed_count > $limit ) { + return $unindexed_count; + } + } + + return $unindexed_count; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/metabox-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/metabox-integration.php new file mode 100644 index 00000000..8b947ea1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/prominent-words/metabox-integration.php @@ -0,0 +1,119 @@ +save_action = $save_action; + } + + /** + * Implements the register_hooks function of the Integration interface. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_metabox_entries_general', [ $this, 'add_words_for_linking_hidden_field' ] ); + \add_filter( 'update_post_metadata', [ $this, 'save_prominent_words_for_post' ], 10, 4 ); + + \add_filter( 'wpseo_taxonomy_content_fields', [ $this, 'add_words_for_linking_hidden_field' ] ); + \add_action( 'edit_term', [ $this, 'save_prominent_words_for_term' ] ); + } + + /** + * Adds a hidden field for the prominent words to the metabox. + * + * @param array $field_defs The definitions for the input fields. + * + * @return array The definitions for the input fields. + */ + public function add_words_for_linking_hidden_field( $field_defs ) { + if ( \is_array( $field_defs ) ) { + $field_defs['words_for_linking'] = [ + 'type' => 'hidden', + 'title' => 'words_for_linking', + 'label' => '', + 'options' => '', + ]; + } + + return $field_defs; + } + + /** + * Saves the value of the _yoast_wpseo_words_for_linking hidden field to the prominent_words table, not postmeta. + * Added to the 'update_post_metadata' filter. + * + * @param false|null $check Whether to allow updating metadata for the given type. + * @param int $object_id The post id. + * @param string $meta_key The key of the metadata. + * @param mixed $meta_value The value of the metadata. + * + * @return false|null Non-null value if meta data should not be updated. + * Null if the metadata should be updated as normal. + */ + public function save_prominent_words_for_post( $check, $object_id, $meta_key, $meta_value ) { + if ( $meta_key !== '_yoast_wpseo_words_for_linking' ) { + return $check; + } + + // If the save was triggered with an empty meta value, don't update the prominent words. + if ( empty( $meta_value ) ) { + return false; + } + + // 1. Decode from stringified JSON. + $words_for_linking = \json_decode( $meta_value, true ); + // 2. Save prominent words using the existing functionality. + $this->save_action->link( 'post', $object_id, $words_for_linking ); + + // 3. Return non-null value so we don't save prominent words to the `post_meta` table. + return false; + } + + /** + * Saves the prominent words for a term. + * + * @param int $term_id The term id to save the words for. + * + * @return void + */ + public function save_prominent_words_for_term( $term_id ) { + // phpcs:disable WordPress.Security.NonceVerification.Missing -- The nonce is already validated. + if ( ! isset( $_POST['wpseo_words_for_linking'] ) ) { + return; + } + + $words_for_linking = []; + if ( ! empty( $_POST['wpseo_words_for_linking'] ) ) { + $prominent_words = \sanitize_text_field( \wp_unslash( $_POST['wpseo_words_for_linking'] ) ); + // phpcs:enable + $words_for_linking = \json_decode( $prominent_words, true ); + } + + $this->save_action->link( 'term', $term_id, $words_for_linking ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/related-keyphrase-filter-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/related-keyphrase-filter-integration.php new file mode 100644 index 00000000..7729af47 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/related-keyphrase-filter-integration.php @@ -0,0 +1,66 @@ + 'OR', + $keyphrase_filter, + $this->get_related_keyphrase_filter( $keyphrase ), + ]; + } + + /** + * Returns the filter to use within the WP Meta Query to filter + * on related keyphrase. + * + * @param string $focus_keyphrase The focus keyphrase to filter on. + * + * @return array The filter. + */ + private function get_related_keyphrase_filter( $focus_keyphrase ) { + return [ + 'post_type' => \get_query_var( 'post_type', 'post' ), + 'key' => WPSEO_Meta::$meta_prefix . 'focuskeywords', + 'value' => '"keyword":"' . \sanitize_text_field( $focus_keyphrase ) . '"', + 'compare' => 'LIKE', + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/replacement-variables-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/replacement-variables-integration.php new file mode 100644 index 00000000..ed3a6cf6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/replacement-variables-integration.php @@ -0,0 +1,129 @@ +load_metabox( $this->get_current_page() ) ) { + return; + } + + \wp_enqueue_script( 'yoast-seo-premium-draft-js-plugins' ); + + \wp_enqueue_style( 'yoast-seo-premium-draft-js-plugins' ); + + $draft_js_external_script_location = 'https://yoast.com/shared-assets/scripts/wp-seo-premium-draft-js-plugins-source-2.0.0.min.js'; + + if ( \file_exists( \WPSEO_PREMIUM_PATH . 'assets/js/external/draft-js-emoji-picker.min.js' ) ) { + $draft_js_external_script_location = \plugins_url( 'wordpress-seo-premium/assets/js/external/draft-js-emoji-picker.min.js' ); + } + + \wp_enqueue_script( + 'yoast-seo-premium-draft-js-plugins-external', + $draft_js_external_script_location, + [ + WPSEO_Admin_Asset_Manager::PREFIX . 'search-metadata-previews', + ], + \WPSEO_PREMIUM_VERSION, + false + ); + } + + /** + * Checks whether or not the metabox related scripts should be loaded. + * + * @codeCoverageIgnore + * + * @param string $current_page The page we are on. + * + * @return bool True when it should be loaded. + */ + protected function load_metabox( $current_page ) { + $page_helper = new Current_Page_Helper(); + // When the current page is a term related one. + if ( WPSEO_Taxonomy::is_term_edit( $current_page ) || WPSEO_Taxonomy::is_term_overview( $current_page ) ) { + return WPSEO_Options::get( 'display-metabox-tax-' . $page_helper->get_current_taxonomy() ); + } + + // When the current page isn't a post related one. + if ( WPSEO_Metabox::is_post_edit( $current_page ) || WPSEO_Metabox::is_post_overview( $current_page ) ) { + return WPSEO_Post_Type::has_metabox_enabled( $page_helper->get_current_post_type() ); + } + + // Make sure ajax integrations are loaded. + return \wp_doing_ajax(); + } + + /** + * Retrieves the value of the pagenow variable. + * + * @codeCoverageIgnore + * + * @return string The value of pagenow. + */ + private function get_current_page() { + global $pagenow; + + return $pagenow; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/settings-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/settings-integration.php new file mode 100644 index 00000000..0c761146 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/settings-integration.php @@ -0,0 +1,71 @@ +asset_manager = $asset_manager; + $this->current_page_helper = $current_page_helper; + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Settings_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Are we on the settings page? + if ( $this->current_page_helper->get_current_yoast_seo_page() === 'wpseo_page_settings' ) { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + } + + /** + * Enqueues the assets. + * + * @return void + */ + public function enqueue_assets() { + $this->asset_manager->enqueue_style( 'premium-settings' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/thank-you-page-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/thank-you-page-integration.php new file mode 100644 index 00000000..9d269cec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/thank-you-page-integration.php @@ -0,0 +1,114 @@ +options_helper = $options_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'admin_menu', [ $this, 'add_submenu_page' ], 9 ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + \add_action( 'admin_init', [ $this, 'maybe_redirect' ] ); + } + + /** + * Redirects to the installation success page if an installation has just occured. + * + * @return void + */ + public function maybe_redirect() { + if ( ! $this->options_helper->get( 'should_redirect_after_install' ) ) { + return; + } + $this->options_helper->set( 'should_redirect_after_install', false ); + + if ( ! empty( $this->options_helper->get( 'activation_redirect_timestamp' ) ) ) { + return; + } + $this->options_helper->set( 'activation_redirect_timestamp', \time() ); + + \wp_safe_redirect( \admin_url( 'admin.php?page=wpseo_installation_successful' ), 302, 'Yoast SEO Premium' ); + exit; + } + + /** + * Adds the workouts submenu page. + * + * @param array $submenu_pages The Yoast SEO submenu pages. + * + * @return array the filtered submenu pages. + */ + public function add_submenu_page( $submenu_pages ) { + \add_submenu_page( + '', + \__( 'Installation Successful', 'wordpress-seo-premium' ), + '', + 'manage_options', + 'wpseo_installation_successful', + [ $this, 'render_page' ] + ); + + return $submenu_pages; + } + + /** + * Enqueue assets on the Thank you page. + * + * @return void + */ + public function enqueue_assets() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpseo_installation_successful' ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'monorepo' ); + \wp_enqueue_style( 'yoast-seo-premium-thank-you' ); + } + + /** + * Renders the thank you page. + * + * @return void + */ + public function render_page() { + require \WPSEO_PREMIUM_PATH . 'classes/views/thank-you.php'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/update-premium-notification.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/update-premium-notification.php new file mode 100644 index 00000000..a4f49214 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/update-premium-notification.php @@ -0,0 +1,177 @@ +options_helper = $options_helper; + $this->version_helper = $version_helper; + $this->capability_helper = $capability_helper; + $this->admin_asset_manager = $admin_asset_manager; + $this->current_page_helper = $current_page_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'admin_notices', [ $this, 'maybe_display_notification' ] ); + \add_action( 'wp_ajax_dismiss_update_premium_notification', [ $this, 'dismiss_update_premium_notification' ] ); + } + + /** + * Shows a notice if Free is newer than the minimum required version and Premium has an update available. + * + * @return void + */ + public function maybe_display_notification() { + if ( $this->current_page_helper->get_current_admin_page() === 'update.php' ) { + return; + } + + if ( $this->notice_was_dismissed_on_current_premium_version() ) { + return; + } + + if ( ! $this->capability_helper->current_user_can( 'wpseo_manage_options' ) ) { + return; + } + + // Check whether Free is set to a version later than the minimum required and a Premium update is a available. + if ( $this->version_helper->is_free_upgraded() && $this->version_helper->is_premium_update_available() ) { + $this->admin_asset_manager->enqueue_style( 'monorepo' ); + + $is_plugins_page = $this->current_page_helper->get_current_admin_page() === 'plugins.php'; + $content = \sprintf( + /* translators: 1: Yoast SEO Premium, 2 and 3: opening and closing anchor tag. */ + \esc_html__( 'Please %2$supdate %1$s to the latest version%3$s to ensure you can fully use all Premium settings and features.', 'wordpress-seo-premium' ), + 'Yoast SEO Premium', + ( $is_plugins_page ) ? '' : '', + ( $is_plugins_page ) ? '' : '' + ); + // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Output of the title escaped in the Notice_Presenter. + echo new Notice_Presenter( + /* translators: 1: Yoast SEO Premium */ + \sprintf( \__( 'Update to the latest version of %1$s!', 'wordpress-seo-premium' ), 'Yoast SEO Premium' ), + $content, + null, + null, + true, + 'yoast-update-premium-notification' + ); + // phpcs:enable + + // Enable permanently dismissing the notice. + echo ""; + } + } + + /** + * Dismisses the old premium notice. + * + * @return bool + */ + public function dismiss_update_premium_notification() { + return $this->options_helper->set( 'dismiss_update_premium_notification', \WPSEO_PREMIUM_VERSION ); + } + + /** + * Returns whether the notification was dismissed in the current Premium version. + * + * @return bool Whether the notification was dismissed in the current Premium version. + */ + protected function notice_was_dismissed_on_current_premium_version() { + $dismissed_notification_version = $this->options_helper->get( 'dismiss_update_premium_notification', '' ); + if ( ! empty( $dismissed_notification_version ) ) { + return \version_compare( $dismissed_notification_version, \WPSEO_PREMIUM_VERSION, '>=' ); + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/user-profile-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/user-profile-integration.php new file mode 100644 index 00000000..2e253c3f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/user-profile-integration.php @@ -0,0 +1,238 @@ +set_fields(); + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'show_user_profile', [ $this, 'user_profile' ], 5 ); + \add_action( 'edit_user_profile', [ $this, 'user_profile' ], 5 ); + + \add_action( 'personal_options_update', [ $this, 'process_user_option_update' ] ); + \add_action( 'edit_user_profile_update', [ $this, 'process_user_option_update' ] ); + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Sets the fields and their labels and descriptions. + * + * @return void + */ + private function set_fields() { + $this->fields = [ + 'basicInfo' => [ + 'label' => \__( 'Basic information', 'wordpress-seo-premium' ), + 'type' => 'group', + ], + 'honorificPrefix' => [ + 'label' => \__( 'Honorific prefix', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'E.g. %1$sDr%2$s, %1$sMs%2$s, %1$sMr%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'string', + ], + 'honorificSuffix' => [ + 'label' => \__( 'Honorific suffix', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'E.g. %1$sMD%2$s, %1$sPhD%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'string', + ], + 'birthDate' => [ + 'label' => \__( 'Birth date', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'Use format: %1$sYYYY-MM-DD%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'date', + ], + 'gender' => [ + 'label' => \__( 'Gender', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'E.g. %1$sfemale%2$s, %1$smale%2$s, %1$snon-binary%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'string', + ], + 'extraInfo' => [ + 'label' => \__( 'Extra information', 'wordpress-seo-premium' ), + 'type' => 'group', + ], + 'award' => [ + 'label' => \__( 'Awards', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'Comma separated, e.g. %1$sMost likely to succeed - 1991, Smartest in class - 1990%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'array', + ], + 'knowsAbout' => [ + 'label' => \__( 'Expertise in', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'Comma separated, e.g. %1$sPHP, JavaScript, 90\'s rock music%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'array', + ], + 'knowsLanguage' => [ + 'label' => \__( 'Language(s) spoken', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'Comma separated, e.g. %1$sEnglish, French, Dutch%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'array', + ], + 'jobInfo' => [ + 'label' => \__( 'Employer information', 'wordpress-seo-premium' ), + 'type' => 'group', + ], + 'jobTitle' => [ + 'label' => \__( 'Job title', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'E.g. %1$ssoftware engineer%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'string', + ], + 'worksFor' => [ + 'label' => \__( 'Employer name', 'wordpress-seo-premium' ), + /* translators: %1$s is replaced by ``, %2$s by ``. */ + 'description' => \sprintf( \esc_html__( 'E.g. %1$sAcme inc%2$s', 'wordpress-seo-premium' ), '', '' ), + 'type' => 'string', + ], + ]; + } + + /** + * Shows a form to add Schema fields to a user. + * + * @param WP_User $user The current page's user. + * + * @return void + */ + public function user_profile( $user ) { + \wp_nonce_field( self::NONCE_FIELD_ACTION, self::NONCE_FIELD_NAME ); + + echo '

      ', \esc_html__( 'Yoast SEO Schema enhancements', 'wordpress-seo-premium' ), '

      '; + echo '

      ', \esc_html__( 'The info you add below is added to the data Yoast SEO outputs in its schema.org output, for instance when you\'re the author of a page. Please only add the info you feel good sharing publicly.', 'wordpress-seo-premium' ), '

      '; + + $user_schema = \get_user_meta( $user->ID, 'wpseo_user_schema', true ); + + echo '
      '; + foreach ( $this->fields as $key => $field ) { + if ( $field['type'] === 'group' ) { + echo '

      ', \esc_html( $field['label'] ), '

      '; + continue; + } + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- False positive, $key is set in the code above, not by a user. + echo ''; + $val = ''; + if ( isset( $user_schema[ $key ] ) ) { + $val = $user_schema[ $key ]; + } + if ( $field['type'] === 'array' && \is_array( $val ) ) { + $val = \implode( ', ', $val ); + } + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- False positive, $key is set in the code above, not by a user. + echo ''; + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- False positive, $field['description'] is set in the code above, not by a user. + echo '

      ', $field['description'], '

      '; + } + echo '
      '; + } + + /** + * Updates the user metas that (might) have been set on the user profile page. + * + * @param int $user_id User ID of the updated user. + * + * @return void + */ + public function process_user_option_update( $user_id ) { + // I'm keeping this to conform to the original logic. + if ( ! isset( $_POST[ self::NONCE_FIELD_NAME ] ) || ! \is_string( $_POST[ self::NONCE_FIELD_NAME ] ) ) { + return; + } + + \check_admin_referer( self::NONCE_FIELD_ACTION, self::NONCE_FIELD_NAME ); + + \update_user_meta( $user_id, 'wpseo_user_schema', $this->get_posted_user_fields() ); + } + + /** + * Gets the posted user fields and sanitizes them. + * + * As we output these values straight from the database both on frontend and backend, this sanitization is quite important. + * + * @return array The posted user fields, restricted to allowed fields. + */ + private function get_posted_user_fields() { + $user_schema = []; + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce is verified in process_user_option_update. + if ( isset( $_POST['wpseo_user_schema'] ) && \is_array( $_POST['wpseo_user_schema'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce is verified in process_user_option_update. + $user_schema = \array_map( 'sanitize_text_field', \wp_unslash( $_POST['wpseo_user_schema'] ) ); + } + + foreach ( $this->fields as $key => $object ) { + switch ( $object['type'] ) { + case 'array': + $user_schema[ $key ] = \explode( ',', $user_schema[ $key ] ); + // Trim each item in the comma separated array. + foreach ( $user_schema[ $key ] as $index => $item ) { + $user_schema[ $key ][ $index ] = \trim( $item ); + } + // Remove empty items. + $user_schema[ $key ] = \array_filter( $user_schema[ $key ] ); + + if ( $user_schema[ $key ] === [] || $user_schema[ $key ][0] === '' ) { + unset( $user_schema[ $key ] ); + } + break; + case 'date': + $date = \explode( '-', $user_schema[ $key ] ); + if ( \count( $date ) !== 3 || ! \checkdate( (int) $date[1], (int) $date[2], (int) $date[0] ) ) { + unset( $user_schema[ $key ] ); + } + break; + default: + if ( empty( $user_schema[ $key ] ) ) { + unset( $user_schema[ $key ] ); + } + // Nothing further to be done for strings. + break; + } + } + + return $user_schema; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/workouts-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/workouts-integration.php new file mode 100644 index 00000000..05b021ab --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/admin/workouts-integration.php @@ -0,0 +1,182 @@ +indexable_repository = $indexable_repository; + $this->shortlinker = $shortlinker; + $this->options_helper = $options_helper; + $this->prominent_words_helper = $prominent_words_helper; + $this->post_type_helper = $post_type_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Enqueue the workouts app. + * + * @return void + */ + public function enqueue_assets() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpseo_workouts' ) { + return; + } + + $workouts_option = $this->options_helper->get( 'workouts' ); + + $indexable_ids_in_workouts = [ 0 ]; + if ( isset( $workouts_option['orphaned']['indexablesByStep'] ) + && \is_array( $workouts_option['orphaned']['indexablesByStep'] ) + && isset( $workouts_option['cornerstone']['indexablesByStep'] ) + && \is_array( $workouts_option['cornerstone']['indexablesByStep'] ) + ) { + foreach ( [ 'orphaned', 'cornerstone' ] as $workout ) { + foreach ( $workouts_option[ $workout ]['indexablesByStep'] as $step => $indexables ) { + if ( $step === 'removed' ) { + continue; + } + foreach ( $indexables as $indexable_id ) { + $indexable_ids_in_workouts[] = $indexable_id; + } + } + } + } + + $orphaned = $this->get_orphaned( $indexable_ids_in_workouts ); + + $premium_localization = new WPSEO_Premium_Asset_JS_L10n(); + $premium_localization->localize_script( 'yoast-seo-premium-workouts' ); + \wp_enqueue_script( 'yoast-seo-premium-workouts' ); + \wp_localize_script( + 'yoast-seo-premium-workouts', + 'wpseoPremiumWorkoutsData', + [ + 'cornerstoneGuide' => $this->shortlinker->build_shortlink( 'https://yoa.st/4el' ), + 'orphanedGuide' => $this->shortlinker->build_shortlink( 'https://yoa.st/4fa' ), + 'orphanedUpdateContent' => $this->shortlinker->build_shortlink( 'https://yoa.st/4h9' ), + 'cornerstoneOn' => $this->options_helper->get( 'enable_cornerstone_content' ), + 'seoDataOptimizationNeeded' => ! $this->prominent_words_helper->is_indexing_completed(), + 'orphaned' => $orphaned, + ] + ); + } + + /** + * Retrieves the public indexable sub types. + * + * @return array The sub types. + */ + protected function get_public_sub_types() { + $object_sub_types = \array_values( + \array_merge( + $this->post_type_helper->get_public_post_types(), + \get_taxonomies( [ 'public' => true ] ) + ) + ); + + $excluded_post_types = \apply_filters( 'wpseo_indexable_excluded_post_types', [ 'attachment' ] ); + $object_sub_types = \array_diff( $object_sub_types, $excluded_post_types ); + return $object_sub_types; + } + + /** + * Gets the orphaned indexables. + * + * @param array $indexable_ids_in_orphaned_workout The orphaned indexable ids. + * @param int $limit The limit. + * + * @return array The orphaned indexables. + */ + protected function get_orphaned( array $indexable_ids_in_orphaned_workout, $limit = 10 ) { + $orphaned = $this->indexable_repository->query() + ->where_raw( '( incoming_link_count is NULL OR incoming_link_count < 3 )' ) + ->where_raw( '( post_status = \'publish\' OR post_status IS NULL )' ) + ->where_raw( '( is_robots_noindex = FALSE OR is_robots_noindex IS NULL )' ) + ->where_raw( 'NOT ( object_sub_type = \'page\' AND permalink = %s )', [ \home_url( '/' ) ] ) + ->where_in( 'object_sub_type', $this->get_public_sub_types() ) + ->where_in( 'object_type', [ 'post' ] ) + ->where_not_in( 'id', $indexable_ids_in_orphaned_workout ) + ->order_by_asc( 'created_at' ) + ->limit( $limit ) + ->find_many(); + $orphaned = \array_map( [ $this->indexable_repository, 'ensure_permalink' ], $orphaned ); + return $orphaned; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/alerts/ai-generator-tip-notification.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/alerts/ai-generator-tip-notification.php new file mode 100644 index 00000000..8f1cb9f5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/alerts/ai-generator-tip-notification.php @@ -0,0 +1,20 @@ +'; + + /** + * The editor script for the block. + * + * @var string + */ + protected $script = 'wp-seo-premium-dynamic-blocks'; + + /** + * Registers the block. + * + * @return void + */ + public function register_block() { + \register_block_type( + 'yoast-seo/' . $this->block_name, + [ + 'editor_script' => $this->script, + 'render_callback' => [ $this, 'present' ], + 'attributes' => [ + 'className' => [ + 'default' => '', + 'type' => 'string', + ], + 'estimatedReadingTime' => [ + 'type' => 'number', + 'default' => 0, + ], + 'descriptiveText' => [ + 'type' => 'string', + 'default' => \__( 'Estimated reading time:', 'wordpress-seo-premium' ) . ' ', + ], + 'showDescriptiveText' => [ + 'type' => 'boolean', + 'default' => true, + ], + 'showIcon' => [ + 'type' => 'boolean', + 'default' => true, + ], + ], + ] + ); + } + + /** + * Presents the block output. + * + * @param array $attributes The block attributes. + * @param string $content The content. + * + * @return string The block output. + */ + public function present( $attributes, $content = '' ) { + + $content = \preg_replace( + '/.*<\/span>/', + ' ' . \sprintf( \_n( 'minute', 'minutes', $attributes['estimatedReadingTime'], 'wordpress-seo-premium' ), $attributes['estimatedReadingTime'] ) . '', + $content, + 1 + ); + if ( $attributes['showIcon'] ) { + // Replace 15.7 icon placeholder. + $content = \preg_replace( + '/ICON_PLACEHOLDER/', + $this->clock_icon, + $content, + 1 + ); + + // Replace the 15.8+ icon placeholder. + return \preg_replace( + '/<\/span>/', + $this->clock_icon, + $content, + 1 + ); + } + + return $content; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/blocks/related-links-block.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/blocks/related-links-block.php new file mode 100644 index 00000000..7eef61f9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/blocks/related-links-block.php @@ -0,0 +1,25 @@ + 'wp-seo-premium-blocks' ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/cleanup-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/cleanup-integration.php new file mode 100644 index 00000000..1d0c2599 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/cleanup-integration.php @@ -0,0 +1,255 @@ +indexable_cleanup_repository = $indexable_cleanup_repository; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return []; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_cleanup_tasks', [ $this, 'add_cleanup_tasks' ] ); + \add_action( 'wpseo_add_cleanup_counts_to_indexable_bucket', [ $this, 'add_cleanup_counts' ] ); + } + + /** + * Adds cleanup tasks for the cleanup integration. + * + * @param array $tasks Array of tasks to be added. + * + * @return array An associative array of tasks to be added to the cleanup integration. + */ + public function add_cleanup_tasks( $tasks ) { + return \array_merge( + $tasks, + [ + 'clean_orphaned_indexables_prominent_words' => function ( $limit ) { + return $this->cleanup_orphaned_from_table( 'Prominent_Words', 'indexable_id', $limit ); + }, + 'clean_old_prominent_word_entries' => function ( $limit ) { + return $this->cleanup_old_prominent_words( $limit ); + }, + 'clean_old_prominent_word_version_numbers' => function ( $limit ) { + return $this->cleanup_old_prominent_word_version_numbers( $limit ); + }, + ] + ); + } + + /** + * Adds cleanup counts to the data bucket object. + * + * @param To_Be_Cleaned_Indexable_Bucket $to_be_cleaned_indexable_bucket The bucket with current indexable count data. + * + * @return void + */ + public function add_cleanup_counts( To_Be_Cleaned_Indexable_Bucket $to_be_cleaned_indexable_bucket ): void { + $to_be_cleaned_indexable_bucket->add_to_be_cleaned_indexable_count( new To_Be_Cleaned_Indexable_Count( 'orphaned_indexables_prominent_words', $this->indexable_cleanup_repository->count_orphaned_from_table( 'Prominent_Words', 'indexable_id' ) ) ); + $to_be_cleaned_indexable_bucket->add_to_be_cleaned_indexable_count( new To_Be_Cleaned_Indexable_Count( 'orphaned_prominent_word_entries', $this->count_old_prominent_words() ) ); + $to_be_cleaned_indexable_bucket->add_to_be_cleaned_indexable_count( new To_Be_Cleaned_Indexable_Count( 'orphaned_prominent_word_version_numbers', $this->count_old_prominent_word_version_numbers() ) ); + } + + /** + * Cleans orphaned rows from a yoast table. + * + * @param string $table The table to cleanup. + * @param string $column The table column the cleanup will rely on. + * @param int $limit The limit we'll apply to the queries. + * + * @return int The number of deleted rows. + */ + public function cleanup_orphaned_from_table( $table, $column, $limit ) { + global $wpdb; + + $table = Model::get_table_name( $table ); + $indexable_table = Model::get_table_name( 'Indexable' ); + + // Warning: If this query is changed, make sure to update the query in cleanup_orphaned_from_table in Free as well. + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + " + SELECT table_to_clean.{$column} + FROM {$table} table_to_clean + LEFT JOIN {$indexable_table} AS indexable_table + ON table_to_clean.{$column} = indexable_table.id + WHERE indexable_table.id IS NULL + AND table_to_clean.{$column} IS NOT NULL + LIMIT %d", + $limit + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + $orphans = $wpdb->get_col( $query ); + + if ( empty( $orphans ) ) { + return 0; + } + + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return \intval( $wpdb->query( "DELETE FROM $table WHERE {$column} IN( " . \implode( ',', $orphans ) . ' ) ' ) ); + } + + /** + * Cleans up old style prominent words from the database. + * + * @param int $limit The maximum amount of old prominent words to clean up in one go. Defaults to 1000. + * + * @return int The number of deleted rows. + */ + public function cleanup_old_prominent_words( $limit = 1000 ) { + global $wpdb; + + $taxonomy_ids = $this->retrieve_prominent_word_taxonomies( $wpdb, $limit ); + + if ( \count( $taxonomy_ids ) === 0 ) { + return 0; + } + + $nr_of_deleted_rows = $this->delete_prominent_word_taxonomies_and_terms( $wpdb, $taxonomy_ids ); + + if ( $nr_of_deleted_rows === false ) { + // Failed query. + return 0; + } + + return $nr_of_deleted_rows; + } + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching + + /** + * Count up old style prominent words from the database. + * + * @return int The number of old prominent word rows. + */ + public function count_old_prominent_words() { + global $wpdb; + + $query = $wpdb->prepare( + "SELECT count(term_taxonomy_id) FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s", + [ 'yst_prominent_words' ] + ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->get_col( $query )[0]; + } + + /** + * Retrieve a list of prominent word taxonomy IDs. + * + * @param wpdb $wpdb The WordPress database object. + * @param int $limit The maximum amount of prominent word taxonomies to retrieve. + * + * @return string[] A list of prominent word taxonomy IDs (of size 'limit'). + */ + protected function retrieve_prominent_word_taxonomies( $wpdb, $limit ) { + return $wpdb->get_col( + $wpdb->prepare( + "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s LIMIT %d", + [ 'yst_prominent_words', $limit ] + ) + ); + } + + /** + * Deletes the given list of taxonomies and their terms. + * + * @param wpdb $wpdb The WordPress database object. + * @param string[] $taxonomy_ids The IDs of the taxonomies to remove and their corresponding terms. + * + * @return bool|int `false` if the query failed, the amount of rows deleted otherwise. + */ + protected function delete_prominent_word_taxonomies_and_terms( $wpdb, $taxonomy_ids ) { + return $wpdb->query( + $wpdb->prepare( + "DELETE t, tr, tt FROM {$wpdb->term_taxonomy} tt + LEFT JOIN {$wpdb->terms} t ON tt.term_id = t.term_id + LEFT JOIN {$wpdb->term_relationships} tr ON tt.term_taxonomy_id = tr.term_taxonomy_id + WHERE tt.term_taxonomy_id IN ( " . \implode( ', ', \array_fill( 0, \count( $taxonomy_ids ), '%s' ) ) . ' )', + $taxonomy_ids + ) + ); + } + + /** + * Cleans up the old prominent word versions from the postmeta table in the database. + * + * @param int $limit The maximum number of prominent word version numbers to clean in one go. + * + * @return bool|int The number of cleaned up prominent word version numbers, or `false` if the query failed. + */ + protected function cleanup_old_prominent_word_version_numbers( $limit ) { + global $wpdb; + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s LIMIT %d", + [ '_yst_prominent_words_version', $limit ] + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->query( $query ); + } + + /** + * Counts up the old prominent word versions from the postmeta table in the database. + * + * @return bool|int The number of prominent word version numbers. + */ + protected function count_old_prominent_word_version_numbers() { + global $wpdb; + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + "SELECT count(*) FROM {$wpdb->postmeta} WHERE meta_key = %s", + [ '_yst_prominent_words_version' ] + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->get_col( $query )[0]; + } + + // phpcs:enable +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/front-end/robots-txt-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/front-end/robots-txt-integration.php new file mode 100644 index 00000000..9b0d3ede --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/front-end/robots-txt-integration.php @@ -0,0 +1,95 @@ +options_helper = $options_helper; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Robots_Txt_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + if ( \is_multisite() ) { + return; + } + + if ( $this->options_helper->get( 'deny_ccbot_crawling' ) ) { + \add_action( 'Yoast\WP\SEO\register_robots_rules', [ $this, 'add_disallow_ccbot' ], 10, 1 ); + } + if ( $this->options_helper->get( 'deny_google_extended_crawling' ) ) { + \add_action( 'Yoast\WP\SEO\register_robots_rules', [ $this, 'add_disallow_google_extended_bot' ], 10, 1 ); + } + if ( $this->options_helper->get( 'deny_gptbot_crawling' ) ) { + \add_action( 'Yoast\WP\SEO\register_robots_rules', [ $this, 'add_disallow_gptbot' ], 10, 1 ); + } + } + + /** + * Add a disallow rule for Common Crawl CCBot agents to `robots.txt`. + * + * @param Robots_Txt_Helper $robots_txt_helper The Robots_Txt_Helper. + * + * @return void + */ + public function add_disallow_ccbot( Robots_Txt_Helper $robots_txt_helper ) { + $robots_txt_helper->add_disallow( 'CCBot', '/' ); + } + + /** + * Add a disallow rule for Google-Extended agents to `robots.txt`. + * + * @param Robots_Txt_Helper $robots_txt_helper The Robots_Txt_Helper. + * + * @return void + */ + public function add_disallow_google_extended_bot( Robots_Txt_Helper $robots_txt_helper ) { + $robots_txt_helper->add_disallow( 'Google-Extended', '/' ); + } + + /** + * Add a disallow rule for OpenAI GPTBot agents to `robots.txt`. + * + * @param Robots_Txt_Helper $robots_txt_helper The Robots_Txt_Helper. + * + * @return void + */ + public function add_disallow_gptbot( Robots_Txt_Helper $robots_txt_helper ) { + $robots_txt_helper->add_disallow( 'GPTBot', '/' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/frontend-inspector.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/frontend-inspector.php new file mode 100644 index 00000000..6fcd9b38 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/frontend-inspector.php @@ -0,0 +1,153 @@ +robots_helper = $robots_helper; + } + + /** + * {@inheritDoc} + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_assets' ], 11 ); + \add_action( 'wpseo_add_adminbar_submenu', [ $this, 'add_frontend_inspector_submenu' ], 10, 2 ); + } + + /** + * Adds the frontend inspector submenu. + * + * @param WP_Admin_Bar $wp_admin_bar The admin bar. + * @param string $menu_identifier The menu identifier. + * + * @return void + */ + public function add_frontend_inspector_submenu( WP_Admin_Bar $wp_admin_bar, $menu_identifier ) { + if ( ! \is_admin() ) { + $menu_args = [ + 'parent' => $menu_identifier, + 'id' => self::FRONTEND_INSPECTOR_SUBMENU_IDENTIFIER, + 'title' => \sprintf( + '%1$s %2$s', + \__( 'Front-end SEO inspector', 'wordpress-seo-premium' ), + \__( 'Beta', 'wordpress-seo-premium' ) + ), + 'href' => '#wpseo-frontend-inspector', + 'meta' => [ + 'tabindex' => '0', + ], + ]; + $wp_admin_bar->add_menu( $menu_args ); + } + } + + /** + * Enqueue the workouts app. + * + * @return void + */ + public function enqueue_assets() { + if ( ! \is_admin_bar_showing() || ! WPSEO_Options::get( 'enable_admin_bar_menu' ) ) { + return; + } + + // If the current user can't write posts, this is all of no use, so let's not output an admin menu. + if ( ! \current_user_can( 'edit_posts' ) ) { + return; + } + + $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + $current_page_meta = \YoastSEO()->meta->for_current_page(); + $indexable = $current_page_meta->indexable; + $page_type = $current_page_meta->page_type; + + $is_seo_analysis_active = $analysis_seo->is_enabled(); + $is_readability_analysis_active = $analysis_readability->is_enabled(); + $display_metabox = true; + + switch ( $page_type ) { + case 'Home_Page': + case 'Post_Type_Archive': + case 'Date_Archive': + case 'Error_Page': + case 'Fallback': + case 'Search_Result_Page': + break; + case 'Static_Home_Page': + case 'Static_Posts_Page': + case 'Post_Type': + $display_metabox = WPSEO_Options::get( 'display-metabox-pt-' . $indexable->object_sub_type ); + break; + case 'Term_Archive': + $display_metabox = WPSEO_Options::get( 'display-metabox-tax-' . $indexable->object_sub_type ); + break; + case 'Author_Archive': + $display_metabox = false; + break; + } + + if ( ! $display_metabox ) { + $is_seo_analysis_active = false; + $is_readability_analysis_active = false; + } + + \wp_enqueue_script( 'yoast-seo-premium-frontend-inspector' ); + \wp_localize_script( + 'yoast-seo-premium-frontend-inspector', + 'wpseoScriptData', + [ + 'frontendInspector' => [ + 'isIndexable' => $this->robots_helper->is_indexable( $indexable ), + 'indexable' => [ + 'is_robots_noindex' => $indexable->is_robots_noindex, + 'primary_focus_keyword' => $indexable->primary_focus_keyword, + 'primary_focus_keyword_score' => $indexable->primary_focus_keyword_score, + 'readability_score' => $indexable->readability_score, + ], + 'contentAnalysisActive' => $is_readability_analysis_active, + 'keywordAnalysisActive' => $is_seo_analysis_active, + ], + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/index-now-ping.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/index-now-ping.php new file mode 100644 index 00000000..0b96aa42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/index-now-ping.php @@ -0,0 +1,191 @@ +options_helper = $options_helper; + $this->request_helper = $request_helper; + $this->post_type_helper = $post_type_helper; + + /** + * Filter: 'Yoast\WP\SEO\indexnow_endpoint' - Allow changing the Indexnow endpoint. + * + * Note: This is a Premium plugin-only hook. + * + * @since 18.8 + * + * @param string $endpoint The IndexNow endpoint URL. + */ + $this->endpoint = \apply_filters( 'Yoast\WP\SEO\indexnow_endpoint', 'https://api.indexnow.org/indexnow' ); + } + + /** + * Registers the hooks this integration acts on. + * + * @return void + */ + public function register_hooks() { + if ( $this->options_helper->get( 'enable_index_now' ) === false ) { + return; + } + + if ( \wp_get_environment_type() !== 'production' ) { + return; + } + + /** + * Please note that the name transition_post_status is misleading. + * The hook does not only fire on a post status transition but also when a post is updated + * while the status is not changed from one to another at all. + */ + \add_action( 'transition_post_status', [ $this, 'ping_index_now' ], 10, 3 ); + } + + /** + * Pings IndexNow for changes. + * + * @param string $new_status The new status for the post. + * @param string $old_status The old status for the post. + * @param WP_Post $post The post. + * + * @return void + */ + public function ping_index_now( $new_status, $old_status, $post ) { + if ( $new_status !== 'publish' && $old_status !== 'publish' ) { + // If we're not transitioning to or from a published status, do nothing. + return; + } + + // The block editor saves published posts twice, we want to ping only on the first request. + if ( $new_status === 'publish' && $this->request_helper->is_rest_request() ) { + return; + } + + if ( ! $post instanceof WP_Post ) { + return; + } + + if ( ! \in_array( $post->post_type, $this->post_type_helper->get_accessible_post_types(), true ) + || ! $this->post_type_helper->is_indexable( $post->post_type ) ) { + return; + } + + // Bail out if last ping was less than two minutes ago. + $indexnow_last_ping = \get_post_meta( $post->ID, '_yoast_indexnow_last_ping', true ); + if ( \is_numeric( $indexnow_last_ping ) && \abs( \time() - ( (int) $indexnow_last_ping ) ) < 120 ) { + return; + } + + $key = $this->options_helper->get( 'index_now_key' ); + $permalink = $this->get_permalink( $post ); + $urls = [ $permalink ]; + + if ( $post->post_type === 'post' ) { + $urls[] = \get_home_url(); + } + + if ( ! empty( \get_option( 'permalink_structure' ) ) ) { + $key_location = \trailingslashit( \get_home_url() ) . 'yoast-index-now-' . $key . '.txt'; + } + else { + $key_location = \add_query_arg( 'yoast_index_now_key', $key, \trailingslashit( \get_home_url() ) ); + } + + $content = (object) [ + 'host' => \wp_parse_url( \get_home_url(), \PHP_URL_HOST ), + 'key' => $key, + 'keyLocation' => $key_location, + 'urlList' => $urls, + ]; + + // Set a 'content-type' header of 'application/json' and an identifying source header. + // The "false" on the end of the x-source-info header determines whether this is a manual submission or not. + $request_args = [ + 'headers' => [ + 'content-type' => 'application/json; charset=utf-8', + 'x-source-info' => 'https://yoast.com/wordpress/plugins/seo-premium/' . \WPSEO_PREMIUM_VERSION . '/false', + ], + ]; + + $request = new WPSEO_Remote_Request( $this->endpoint, $request_args ); + // phpcs:ignore Yoast.Yoast.JsonEncodeAlternative.Found -- This is being sent to an API, not displayed. + $request->set_body( \wp_json_encode( $content ) ); + $request->send(); + + \update_post_meta( $post->ID, '_yoast_indexnow_last_ping', \time() ); + } + + /** + * Determines the (former) permalink for a post. + * + * @param WP_Post $post Post object. + * + * @return string Permalink. + */ + private function get_permalink( WP_Post $post ) { + if ( \in_array( $post->post_status, [ 'trash', 'draft', 'pending', 'future' ], true ) ) { + if ( $post->post_status === 'trash' ) { + // Fix the post_name. + $post->post_name = \preg_replace( '/__trashed$/', '', $post->post_name ); + } + // Force post_status to publish briefly, so we get the correct URL. + $post->post_status = 'publish'; + } + + return \get_permalink( $post ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/missing-indexables-count-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/missing-indexables-count-integration.php new file mode 100644 index 00000000..576278a0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/missing-indexables-count-integration.php @@ -0,0 +1,54 @@ +content_action = $content_action; + } + + /** + * Registers hooks with WordPress. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_indexable_collector_add_indexation_actions', [ $this, 'add_index_action' ] ); + } + + /** + * Adds the Content_Action to the indexable collector. + * + * @param array $indexation_actions The current indexation actions. + * @return array + */ + public function add_index_action( $indexation_actions ) { + $indexation_actions[] = $this->content_action; + return $indexation_actions; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-author-archive.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-author-archive.php new file mode 100644 index 00000000..afbc0b60 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/opengraph-author-archive.php @@ -0,0 +1,51 @@ + 'description', + 'org-email' => 'email', + 'org-phone' => 'telephone', + 'org-legal-name' => 'legalName', + 'org-founding-date' => 'foundingDate', + 'org-number-employees' => 'numberOfEmployees', + 'org-vat-id' => 'vatID', + 'org-tax-id' => 'taxID', + 'org-iso' => 'iso6523Code', + 'org-duns' => 'duns', + 'org-leicode' => 'leiCode', + 'org-naics' => 'naics', + ]; + + /** + * The options helper. + * + * @var Options_Helper + */ + private $options_helper; + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array The conditionals to check. + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Organization_Schema_Integration constructor. + * + * @param Options_Helper $options_helper The options helper. + */ + public function __construct( + Options_Helper $options_helper + ) { + $this->options_helper = $options_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_schema_organization', [ $this, 'filter_organization_schema' ] ); + } + + /** + * Filters the organization schema. + * + * @param array> $profiles The organization schema data. + * @return array> The filtered organization schema data. + */ + public function filter_organization_schema( $profiles ) { + $options = []; + $exclude = [ 'org-number-employees' ]; + if ( \defined( 'WPSEO_LOCAL_FILE' ) ) { + \array_push( $exclude, 'org-vat-id', 'org-tax-id', 'org-phone', 'org-email' ); + } + foreach ( self::ORGANIZATION_DETAILS_MAPPING as $option_name => $schema_name ) { + $options[ $option_name ] = $this->options_helper->get( $option_name ); + if ( $options[ $option_name ] && ! \in_array( $option_name, $exclude, true ) ) { + $profiles[ $schema_name ] = $options[ $option_name ]; + } + } + + $profiles = $this->add_employees_number( $profiles, $options['org-number-employees'] ); + + return $profiles; + } + + /** + * Adds employees number to the organization schema tree. + * + * @param array> $profiles The organization schema tree. + * @param array> $employees The option for employees number. + * @return array> The modified organization schema tree. + */ + public function add_employees_number( $profiles, $employees ) { + if ( ! $employees ) { + return $profiles; + } + + $profiles['numberOfEmployees'] = [ + '@type' => 'QuantitativeValue', + ]; + + $range = \explode( '-', $employees ); + + if ( \count( $range ) === 2 ) { + $profiles['numberOfEmployees']['minValue'] = $range[0]; + $profiles['numberOfEmployees']['maxValue'] = $range[1]; + } + else { + $profiles['numberOfEmployees']['value'] = $employees; + } + + return $profiles; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/publishing-principles-schema-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/publishing-principles-schema-integration.php new file mode 100644 index 00000000..0bc2d9cc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/publishing-principles-schema-integration.php @@ -0,0 +1,199 @@ +options_helper = $options_helper; + $this->indexable_repository = $indexable_repository; + $this->indexable_helper = $indexable_helper; + $this->post_type_helper = $post_type_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_schema_organization', [ $this, 'filter_organization_schema' ] ); + } + + /** + * Make sure the Organization policies are added to the schema output. + * + * @param array $data The organization schema. + * + * @return array + */ + public function filter_organization_schema( $data ) { + $policy_indexables = $this->get_indexables_for_publishing_principle_pages( + self::PRINCIPLES_MAPPING + ); + + foreach ( $policy_indexables as $policy_data ) { + $data = $this->add_schema_piece( $data, $policy_data ); + } + + return $data; + } + + /** + * Adds the data to the schema array. + * + * @param array $schema_graph The current schema graph. + * @param array $policy_data The data present for a policy. + * + * @return array The new schema graph. + */ + private function add_schema_piece( $schema_graph, $policy_data ): array { + if ( ! \is_null( $policy_data['permalink'] ) ) { + $schema_graph[ $policy_data['schema'] ] = $policy_data['permalink']; + } + + return $schema_graph; + } + + /** + * Finds the indexables for all the given principles if they are set. + * + * @param array $principles_data The data for all the principles. + * + * @return array + */ + private function get_indexables_for_publishing_principle_pages( $principles_data ): array { + $principle_ids = []; + $policies = []; + $ids = []; + foreach ( $principles_data as $principle ) { + $option_value = $this->options_helper->get( $principle[0], false ); + if ( $option_value ) { + $principle_ids[ $principle[0] ] = [ + 'value' => $option_value, + 'schema' => $principle[1], + ]; + $ids[] = $option_value; + } + } + + if ( \count( $ids ) === 0 ) { + // Early return to not run an empty query. + return []; + } + + if ( $this->indexable_helper->should_index_indexables() && $this->post_type_helper->is_of_indexable_post_type( 'page' ) ) { + $indexables = $this->indexable_repository->find_by_multiple_ids_and_type( \array_unique( $ids ), 'post' ); + + foreach ( $principle_ids as $key => $principle_id ) { + foreach ( $indexables as $indexable ) { + if ( $indexable && $principle_id['value'] === $indexable->object_id ) { + if ( $indexable->post_status === 'publish' && $indexable->is_protected === false ) { + $policies[ $key ] = [ + 'permalink' => $indexable->permalink, + 'schema' => $principle_id['schema'], + ]; + } + break; + } + } + } + + return $policies; + } + + foreach ( $principle_ids as $key => $principle_id ) { + foreach ( $ids as $post_id ) { + $post = \get_post( (int) $post_id ); + if ( \is_object( $post ) ) { + if ( (int) $principle_id['value'] === (int) $post_id && \get_post_status( $post_id ) === 'publish' && $post->post_password === '' ) { + $policies[ $key ] = [ + 'permalink' => \get_permalink( $post_id ), + 'schema' => $principle_id['schema'], + ]; + break; + } + } + } + } + + return $policies; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/ai-generator-route.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/ai-generator-route.php new file mode 100644 index 00000000..93cfc9a4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/ai-generator-route.php @@ -0,0 +1,316 @@ +ai_generator_action = $ai_generator_action; + $this->ai_generator_helper = $ai_generator_helper; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + \register_rest_route( + Main::API_V1_NAMESPACE, + self::CONSENT_ROUTE, + [ + 'methods' => 'POST', + 'args' => [ + 'consent' => [ + 'required' => true, + 'type' => 'boolean', + 'description' => 'Whether the consent to use AI-based services has been given by the user.', + ], + ], + 'callback' => [ $this, 'consent' ], + 'permission_callback' => [ $this, 'check_permissions' ], + ] + ); + + // Avoid registering the other routes if the feature is not enabled. + if ( ! $this->ai_generator_helper->is_ai_generator_enabled() ) { + return; + } + + $callback_route_args = [ + 'methods' => 'POST', + 'args' => [ + 'access_jwt' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The access JWT.', + ], + 'refresh_jwt' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The JWT to be used when the access JWT needs to be refreshed.', + ], + 'code_challenge' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The SHA266 of the verification code used to check the authenticity of a callback call.', + ], + 'user_id' => [ + 'required' => true, + 'type' => 'integer', + 'description' => 'The id of the user associated to the code verifier.', + ], + ], + 'callback' => [ $this, 'callback' ], + 'permission_callback' => '__return_true', + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::CALLBACK_ROUTE, $callback_route_args ); + \register_rest_route( Main::API_V1_NAMESPACE, self::REFRESH_CALLBACK_ROUTE, $callback_route_args ); + + \register_rest_route( + Main::API_V1_NAMESPACE, + self::GET_SUGGESTIONS_ROUTE, + [ + 'methods' => 'POST', + 'args' => [ + 'type' => [ + 'required' => true, + 'type' => 'string', + 'enum' => [ + 'seo-title', + 'meta-description', + 'product-seo-title', + 'product-meta-description', + 'taxonomy-seo-title', + 'taxonomy-meta-description', + ], + 'description' => 'The type of suggestion requested.', + ], + 'prompt_content' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The content needed by the prompt to ask for suggestions.', + ], + 'focus_keyphrase' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The focus keyphrase associated to the post.', + ], + 'language' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The language the post is written in.', + ], + 'platform' => [ + 'required' => true, + 'type' => 'string', + 'enum' => [ + 'Google', + 'Facebook', + 'Twitter', + ], + 'description' => 'The platform the post is intended for.', + ], + ], + 'callback' => [ $this, 'get_suggestions' ], + 'permission_callback' => [ $this, 'check_permissions' ], + ] + ); + + \register_rest_route( + Main::API_V1_NAMESPACE, + self::BUST_SUBSCRIPTION_CACHE_ROUTE, + [ + 'methods' => 'POST', + 'args' => [], + 'callback' => [ $this, 'bust_subscription_cache' ], + 'permission_callback' => [ $this, 'check_permissions' ], + ] + ); + } + + /** + * Runs the callback to store connection credentials and the tokens locally. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response The response of the callback action. + */ + public function callback( WP_REST_Request $request ) { + try { + $code_verifier = $this->ai_generator_action->callback( $request['access_jwt'], $request['refresh_jwt'], $request['code_challenge'], $request['user_id'] ); + } catch ( Unauthorized_Exception $e ) { + return new WP_REST_Response( 'Unauthorized.', 401 ); + } + + return new WP_REST_Response( + [ + 'message' => 'Tokens successfully stored.', + 'code_verifier' => $code_verifier, + ] + ); + } + + /** + * Runs the callback to get ai-generated suggestions. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response The response of the get_suggestions action. + */ + public function get_suggestions( WP_REST_Request $request ) { + try { + $user = \wp_get_current_user(); + $data = $this->ai_generator_action->get_suggestions( $user, $request['type'], $request['prompt_content'], $request['focus_keyphrase'], $request['language'], $request['platform'] ); + } catch ( Remote_Request_Exception $e ) { + $message = [ + 'message' => $e->getMessage(), + 'errorIdentifier' => $e->get_error_identifier(), + ]; + if ( $e instanceof Payment_Required_Exception ) { + $message['missingLicenses'] = $e->get_missing_licenses(); + } + return new WP_REST_Response( + $message, + $e->getCode() + ); + } catch ( RuntimeException $e ) { + return new WP_REST_Response( 'Failed to get suggestions.', 500 ); + } + + return new WP_REST_Response( $data ); + } + + /** + * Runs the callback to store the consent given by the user to use AI-based services. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response The response of the callback action. + */ + public function consent( WP_REST_Request $request ) { + $user_id = \get_current_user_id(); + $consent = \boolval( $request['consent'] ); + + try { + $this->ai_generator_action->consent( $user_id, $consent ); + } catch ( Bad_Request_Exception | Forbidden_Exception | Internal_Server_Error_Exception | Not_Found_Exception | Payment_Required_Exception | Request_Timeout_Exception | Service_Unavailable_Exception | Too_Many_Requests_Exception | RuntimeException $e ) { + return new WP_REST_Response( ( $consent ) ? 'Failed to store consent.' : 'Failed to revoke consent.', 500 ); + } + + return new WP_REST_Response( ( $consent ) ? 'Consent successfully stored.' : 'Consent successfully revoked.' ); + } + + /** + * Runs the callback that busts the subscription cache. + * + * @return WP_REST_Response The response of the callback action. + */ + public function bust_subscription_cache() { + $this->ai_generator_action->bust_subscription_cache(); + + return new WP_REST_Response( 'Subscription cache successfully busted.' ); + } + + /** + * Checks: + * - if the user is logged + * - if the user can edit posts + * + * @return bool Whether the user is logged in, can edit posts and the feature is active. + */ + public function check_permissions() { + $user = \wp_get_current_user(); + if ( $user === null || $user->ID < 1 ) { + return false; + } + + return \user_can( $user, 'edit_posts' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/workouts-routes-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/workouts-routes-integration.php new file mode 100644 index 00000000..44690ba6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/routes/workouts-routes-integration.php @@ -0,0 +1,311 @@ + + */ + public const ALLOWED_CORNERSTONE_STEPS = [ + 'chooseCornerstones', + 'checkLinks', + 'addLinks', + 'improved', + 'skipped', + ]; + + /** + * Allowed orphaned steps. + * + * @var array + */ + public const ALLOWED_ORPHANED_STEPS = [ + 'improveRemove', + 'update', + 'addLinks', + 'removed', + 'noindexed', + 'improved', + 'skipped', + ]; + + /** + * The indexable repository. + * + * @var Indexable_Repository The indexable repository. + */ + private $indexable_repository; + + /** + * The link suggestions action. + * + * @var Link_Suggestions_Action The action. + */ + private $link_suggestions_action; + + /** + * The admin asset manager. + * + * @var WPSEO_Admin_Asset_Manager + */ + private $admin_asset_manager; + + /** + * The shortlinker. + * + * @var WPSEO_Shortlinker + */ + private $shortlinker; + + /** + * The options helper. + * + * @var Options_Helper + */ + private $options_helper; + + /** + * The prominent words helper. + * + * @var Prominent_Words_Helper + */ + private $prominent_words_helper; + + /** + * The post type helper. + * + * @var Post_Type_Helper + */ + private $post_type_helper; + + /** + * Workouts_Integration constructor. + * + * @param Indexable_Repository $indexable_repository The indexables repository. + * @param Link_Suggestions_Action $link_suggestions_action The link suggestions action. + * @param WPSEO_Admin_Asset_Manager $admin_asset_manager The admin asset manager. + * @param WPSEO_Shortlinker $shortlinker The shortlinker. + * @param Options_Helper $options_helper The options helper. + * @param Prominent_Words_Helper $prominent_words_helper The prominent words helper. + * @param Post_Type_Helper $post_type_helper The post type helper. + */ + public function __construct( + Indexable_Repository $indexable_repository, + Link_Suggestions_Action $link_suggestions_action, + WPSEO_Admin_Asset_Manager $admin_asset_manager, + WPSEO_Shortlinker $shortlinker, + Options_Helper $options_helper, + Prominent_Words_Helper $prominent_words_helper, + Post_Type_Helper $post_type_helper + ) { + $this->indexable_repository = $indexable_repository; + $this->link_suggestions_action = $link_suggestions_action; + $this->admin_asset_manager = $admin_asset_manager; + $this->shortlinker = $shortlinker; + $this->options_helper = $options_helper; + $this->prominent_words_helper = $prominent_words_helper; + $this->post_type_helper = $post_type_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'Yoast\WP\SEO\workouts_route_args', [ $this, 'add_args_to_set_workouts_route' ] ); + \add_filter( 'Yoast\WP\SEO\workouts_route_save', [ $this, 'save_workouts_data' ], 10, 2 ); + \add_filter( 'Yoast\WP\SEO\workouts_options', [ $this, 'get_options' ] ); + } + + /** + * Adds arguments to `set_workouts` route registration. + * + * @param array $args_array The existing array of arguments. + * + * @return array + */ + public function add_args_to_set_workouts_route( $args_array ) { + $premium_args_array = [ + 'cornerstone' => [ + 'validate_callback' => [ $this, 'cornerstone_is_allowed' ], + 'required' => true, + ], + 'orphaned' => [ + 'validate_callback' => [ $this, 'orphaned_is_allowed' ], + 'required' => true, + ], + ]; + + return \array_merge( $args_array, $premium_args_array ); + } + + /** + * Validates the cornerstone attribute. + * + * @param array $workout The cornerstone workout. + * @return bool If the payload is valid or not. + */ + public function cornerstone_is_allowed( $workout ) { + return $this->is_allowed( $workout, self::ALLOWED_CORNERSTONE_STEPS ); + } + + /** + * Validates the orphaned attribute. + * + * @param array $workout The orphaned workout. + * @return bool If the payload is valid or not. + */ + public function orphaned_is_allowed( $workout ) { + return $this->is_allowed( $workout, self::ALLOWED_ORPHANED_STEPS ); + } + + /** + * Validates a workout. + * + * @param array $workout The workout. + * @param array $allowed_steps The allowed steps for this workout. + * @return bool If the payload is valid or not. + */ + public function is_allowed( $workout, $allowed_steps ) { + // Only 3 properties are allowed, the below validated finishedSteps property. + if ( \count( $workout ) !== 3 ) { + return false; + } + + if ( isset( $workout['finishedSteps'] ) && \is_array( $workout['finishedSteps'] ) ) { + foreach ( $workout['finishedSteps'] as $step ) { + if ( ! \in_array( $step, $allowed_steps, true ) ) { + return false; + } + } + return true; + } + return false; + } + + /** + * Saves the Premium workouts data to the database. + * + * @param mixed|null $result The result of the previous save operations. + * @param array $workouts_data The complete workouts data. + * + * @return mixed|null + */ + public function save_workouts_data( $result, $workouts_data ) { + $premium_workouts_data = []; + $premium_workouts_data['cornerstone'] = $workouts_data['cornerstone']; + $premium_workouts_data['orphaned'] = $workouts_data['orphaned']; + + foreach ( $premium_workouts_data as $workout => $data ) { + if ( isset( $data['indexablesByStep'] ) && \is_array( $data['indexablesByStep'] ) ) { + foreach ( $data['indexablesByStep'] as $step => $indexables ) { + if ( $step === 'removed' ) { + continue; + } + $premium_workouts_data[ $workout ]['indexablesByStep'][ $step ] = \wp_list_pluck( $indexables, 'id' ); + } + } + } + + return $this->options_helper->set( 'workouts', $premium_workouts_data ); + } + + /** + * Retrieves the Premium workouts options from the database and adds it to the global array of workouts options. + * + * @param array $workouts_option The previous content of the workouts options. + * + * @return array The workouts options updated with the addition of the Premium workouts data. + */ + public function get_options( $workouts_option ) { + $premium_option = $this->options_helper->get( 'workouts' ); + + if ( ! ( isset( $premium_option['orphaned']['indexablesByStep'] ) + && \is_array( $premium_option['orphaned']['indexablesByStep'] ) + && isset( $premium_option['cornerstone']['indexablesByStep'] ) + && \is_array( $premium_option['cornerstone']['indexablesByStep'] ) ) + ) { + return \array_merge( $workouts_option, $premium_option ); + } + + // Get all indexable ids from all workouts and all steps. + $indexable_ids_in_workouts = [ 0 ]; + foreach ( [ 'orphaned', 'cornerstone' ] as $workout ) { + foreach ( $premium_option[ $workout ]['indexablesByStep'] as $step => $indexables ) { + if ( $step === 'removed' ) { + continue; + } + foreach ( $indexables as $indexable_id ) { + $indexable_ids_in_workouts[] = $indexable_id; + } + } + } + + // Get all indexables corresponding to the indexable ids. + $indexables_in_workouts = $this->indexable_repository->find_by_ids( $indexable_ids_in_workouts ); + + // Extend the workouts option with the indexables data. + foreach ( [ 'orphaned', 'cornerstone' ] as $workout ) { + // Don't add indexables for steps that are not allowed. + $premium_option[ $workout ]['finishedSteps'] = \array_values( + \array_intersect( + $premium_option[ $workout ]['finishedSteps'], + [ + 'orphaned' => self::ALLOWED_ORPHANED_STEPS, + 'cornerstone' => self::ALLOWED_CORNERSTONE_STEPS, + ][ $workout ] + ) + ); + + // Don't add indexables that are not published or are no-indexed. + foreach ( $premium_option[ $workout ]['indexablesByStep'] as $step => $indexables ) { + if ( $step === 'removed' ) { + continue; + } + $premium_option[ $workout ]['indexablesByStep'][ $step ] = \array_values( + \array_filter( + \array_map( + static function ( $indexable_id ) use ( $indexables_in_workouts ) { + foreach ( $indexables_in_workouts as $updated_indexable ) { + if ( \is_array( $indexable_id ) ) { + $indexable_id = $indexable_id['id']; + } + if ( (int) $indexable_id === $updated_indexable->id ) { + if ( $updated_indexable->post_status !== 'publish' && $updated_indexable->post_status !== null ) { + return false; + } + if ( $updated_indexable->is_robots_noindex ) { + return false; + } + return $updated_indexable; + } + } + return false; + }, + $indexables + ) + ) + ); + } + } + + return \array_merge( $workouts_option, $premium_option ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/algolia.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/algolia.php new file mode 100644 index 00000000..6d269007 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/algolia.php @@ -0,0 +1,191 @@ +options = $options; + $this->meta = $meta; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ + Algolia_Enabled_Conditional::class, + ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'algolia_searchable_post_shared_attributes', [ $this, 'add_attributes_post' ], 10, 2 ); + \add_filter( 'algolia_term_record', [ $this, 'add_attributes_term' ] ); + \add_filter( 'algolia_user_record', [ $this, 'add_attributes_user' ] ); + \add_filter( 'algolia_should_index_searchable_post', [ $this, 'blacklist_no_index_posts' ], 10, 2 ); + \add_filter( 'algolia_should_index_term', [ $this, 'blacklist_no_index_terms' ], 10, 2 ); + \add_filter( 'algolia_should_index_user', [ $this, 'blacklist_no_index_users' ], 10, 2 ); + } + + /** + * Adds the search result priority and the number of internal links to an article to Algolia's index. + * + * @param array $attributes The attributes Algolia should index. + * @param WP_Post $post The post object that is being indexed. + * + * @return array The attributes Algolia should index. + */ + public function add_attributes_post( $attributes, $post ) { + $meta = $this->meta->for_post( $post->ID ); + + return $this->add_attributes( $attributes, $meta ); + } + + /** + * Adds the attributes for a term. + * + * @param array $attributes The recorded attributes. + * + * @return array The recorded attributes. + */ + public function add_attributes_term( $attributes ) { + $meta = $this->meta->for_term( $attributes['objectID'] ); + + return $this->add_attributes( $attributes, $meta ); + } + + /** + * Adds the attributes for a term. + * + * @param array $attributes The recorded attributes. + * + * @return array The recorded attributes. + */ + public function add_attributes_user( $attributes ) { + $meta = $this->meta->for_author( $attributes['objectID'] ); + + return $this->add_attributes( $attributes, $meta ); + } + + /** + * Adds the attributes for a searchable object. + * + * @param array $attributes Attributes to update. + * @param Meta $meta Meta value object for the current object. + * + * @return array Attributes for the searchable object. + */ + private function add_attributes( array $attributes, Meta $meta ) { + $attributes['yoast_seo_links'] = (int) $meta->indexable->incoming_link_count; + $attributes['yoast_seo_metadesc'] = $meta->meta_description; + + return $this->add_social_image( $attributes, $meta->open_graph_images ); + } + + /** + * Adds the social image to an attributes array if we have one. + * + * @param array $attributes The array of search attributes for a record. + * @param array $og_images The social images for the current item. + * + * @return array The array of search attributes for a record. + */ + private function add_social_image( $attributes, $og_images ) { + if ( \is_array( $og_images ) && \count( $og_images ) > 0 ) { + $attributes['images']['social'] = \reset( $og_images ); + } + + return $attributes; + } + + /** + * Checks whether a post should be indexed, taking the Yoast SEO no-index state into account. + * + * @param bool $should_index Whether Algolia should index the post or not. + * @param WP_Post $post The post object. + * + * @return bool Whether Algolia should index the post or not. + */ + public function blacklist_no_index_posts( $should_index, $post ) { + if ( $this->meta->for_post( $post->ID )->robots['index'] === 'noindex' ) { + return false; + } + + return $should_index; + } + + /** + * Checks whether a term should be indexed, taking the Yoast SEO no-index state into account. + * + * @param bool $should_index Whether Algolia should index the term or not. + * @param WP_Term $term The term object. + * + * @return bool Whether Algolia should index the term or not. + */ + public function blacklist_no_index_terms( $should_index, $term ) { + if ( $this->meta->for_term( $term->term_id )->robots['index'] === 'noindex' ) { + return false; + } + + return $should_index; + } + + /** + * Checks whether a user should be indexed, taking the Yoast SEO no-index state into account. + * + * @param bool $should_index Whether Algolia should index the user or not. + * @param WP_User $user The user object. + * + * @return bool Whether Algolia should index the user or not. + */ + public function blacklist_no_index_users( $should_index, $user ) { + if ( $this->meta->for_author( $user->ID )->robots['index'] === 'noindex' ) { + return false; + } + + return $should_index; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/edd.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/edd.php new file mode 100644 index 00000000..3ffabbc3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/edd.php @@ -0,0 +1,147 @@ +meta = $meta; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'edd_generate_download_structured_data', [ $this, 'filter_download_schema' ] ); + \add_filter( 'wpseo_schema_organization', [ $this, 'filter_organization_schema' ] ); + \add_filter( 'wpseo_schema_webpage', [ $this, 'filter_webpage_schema' ], 10, 2 ); + } + + /** + * Make sure the Organization is classified as a Brand too. + * + * @param array $data The organization schema. + * + * @return array + */ + public function filter_organization_schema( $data ) { + if ( \is_singular( 'download' ) ) { + $data['@type'] = [ 'Organization', 'Brand' ]; + } + + return $data; + } + + /** + * Make sure the WebPage schema contains reference to the product. + * + * @param array $data The schema Webpage data. + * @param WPSEO_Schema_Context $context Context object. + * + * @return array + */ + public function filter_webpage_schema( $data, $context ) { + if ( \is_singular( [ 'download' ] ) ) { + $data['about'] = [ '@id' => $context->canonical . '#/schema/edd-product/' . \get_the_ID() ]; + $data['mainEntity'] = [ '@id' => $context->canonical . '#/schema/edd-product/' . \get_the_ID() ]; + } + + return $data; + } + + /** + * Filter the structured data output for a download to tie into Yoast SEO's output. + * + * @param array $data Structured data for a download. + * + * @return array + */ + public function filter_download_schema( $data ) { + + $data['@id'] = $this->meta->for_current_page()->canonical . '#/schema/edd-product/' . \get_the_ID(); + $data['sku'] = (string) $data['sku']; + $data['brand'] = $this->return_organization_node(); + $data['offers'] = $this->clean_up_offer( $data['offers'] ); + + if ( ! isset( $data['description'] ) ) { + $data['description'] = $this->meta->for_current_page()->open_graph_description; + } + + return $data; + } + + /** + * Cleans up EDD generated Offers. + * + * @param array $offer The schema array. + * + * @return array + */ + private function clean_up_offer( $offer ) { + // Checking for not isset @type makes sure there are multiple offers in the offer list. It is always an array. + if ( ! isset( $offer['@type'] ) ) { + foreach ( $offer as $key => $o ) { + if ( \array_key_exists( 'priceValidUntil', $o ) && $o['priceValidUntil'] === null ) { + unset( $offer[ $key ]['priceValidUntil'] ); + } + $offer[ $key ]['seller'] = $this->return_organization_node(); + } + } + else { + if ( \array_key_exists( 'priceValidUntil', $offer ) && $offer['priceValidUntil'] === null ) { + unset( $offer['priceValidUntil'] ); + } + $offer['seller'] = $this->return_organization_node(); + } + + return $offer; + } + + /** + * Returns a Schema node for the current site's Organization. + * + * @return string[] + */ + private function return_organization_node() { + return [ + '@type' => [ 'Organization', 'Brand' ], + '@id' => $this->meta->for_home_page()->canonical . '#organization', + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-premium.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-premium.php new file mode 100644 index 00000000..2924ee8b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-premium.php @@ -0,0 +1,328 @@ +prominent_words_helper = $prominent_words_helper; + $this->post_watcher = new WPSEO_Post_Watcher(); + $this->current_page_helper = $current_page_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'enqueue' ] ); + \add_action( 'post_updated', [ $this->post_watcher, 'detect_slug_change' ], 12, 3 ); + } + + /** + * Enqueues all the needed JS and CSS. + * + * @return void + */ + public function enqueue() { + // Check if we should load. + if ( ! $this->load_metabox() ) { + return; + } + + // Re-register assets as Elementor unregister everything. + $asset_manager = new WPSEO_Premium_Assets(); + $asset_manager->register_assets(); + + // Initialize Elementor (replaces premium-metabox). + $this->enqueue_assets(); + + /* + * Re-enqueue the integrations as `admin_enqueue_scripts` is undone. + * Note the register_hooks were not even called (because it doesn't work anyway). + */ + $social_previews = new WPSEO_Social_Previews(); + $social_previews->enqueue_assets(); + $custom_fields = new WPSEO_Custom_Fields_Plugin(); + $custom_fields->enqueue(); + + $replacement_variables = new Replacement_Variables_Integration(); + $replacement_variables->enqueue_assets(); + } + + // Below is mostly copied from `premium-metabox.php`. + + /** + * Enqueues assets when relevant. + * + * @codeCoverageIgnore Method uses dependencies. + * + * @return void + */ + public function enqueue_assets() { + \wp_enqueue_script( static::SCRIPT_HANDLE ); + \wp_enqueue_style( static::SCRIPT_HANDLE ); + + $premium_localization = new WPSEO_Premium_Asset_JS_L10n(); + $premium_localization->localize_script( static::SCRIPT_HANDLE ); + + $this->send_data_to_assets(); + } + + /** + * Send data to assets by using wp_localize_script. + * + * @return void + */ + public function send_data_to_assets() { + $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $assets_manager = new WPSEO_Admin_Asset_Manager(); + + $data = [ + 'restApi' => $this->get_rest_api_config(), + 'seoAnalysisEnabled' => $analysis_seo->is_enabled(), + 'licensedURL' => WPSEO_Utils::get_home_url(), + 'settingsPageUrl' => \admin_url( 'admin.php?page=wpseo_page_settings#/site-features#card-wpseo-enable_link_suggestions' ), + 'integrationsTabURL' => \admin_url( 'admin.php?page=wpseo_integrations' ), + 'premiumAssessmentsScriptUrl' => \plugins_url( + 'assets/js/dist/register-premium-assessments-' . $assets_manager->flatten_version( \WPSEO_PREMIUM_VERSION ) . \WPSEO_CSSJS_SUFFIX . '.js', + \WPSEO_PREMIUM_FILE + ), + 'pluginUrl' => \plugins_url( '', \WPSEO_PREMIUM_FILE ), + ]; + if ( \defined( 'YOAST_SEO_TEXT_FORMALITY' ) && \YOAST_SEO_TEXT_FORMALITY === true ) { + $data['textFormalityScriptUrl'] = \plugins_url( + 'assets/js/dist/register-text-formality-' . $assets_manager->flatten_version( \WPSEO_PREMIUM_VERSION ) . \WPSEO_CSSJS_SUFFIX . '.js', + \WPSEO_PREMIUM_FILE + ); + } + $data = \array_merge( $data, $this->get_post_metabox_config() ); + + if ( \current_user_can( 'edit_others_posts' ) ) { + $data['workoutsUrl'] = \admin_url( 'admin.php?page=wpseo_workouts' ); + } + + // Use an extra level in the array to preserve booleans. WordPress sanitizes scalar values in the first level of the array. + \wp_localize_script( static::SCRIPT_HANDLE, 'wpseoPremiumMetaboxData', [ 'data' => $data ] ); + } + + /** + * Retrieves the metabox config for a post. + * + * @return array The config. + */ + protected function get_post_metabox_config() { + $link_suggestions_enabled = WPSEO_Options::get( 'enable_link_suggestions', false ); + + $prominent_words_support = new WPSEO_Premium_Prominent_Words_Support(); + $is_prominent_words_available = $prominent_words_support->is_post_type_supported( $this->get_metabox_post()->post_type ); + + $site_locale = \get_locale(); + $language = WPSEO_Language_Utils::get_language( $site_locale ); + + return [ + 'currentObjectId' => $this->get_metabox_post()->ID, + 'currentObjectType' => 'post', + 'linkSuggestionsEnabled' => ( $link_suggestions_enabled ) ? 'enabled' : 'disabled', + 'linkSuggestionsAvailable' => $is_prominent_words_available, + 'linkSuggestionsUnindexed' => ! $this->is_prominent_words_indexing_completed() && WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ), + 'perIndexableLimit' => $this->per_indexable_limit( $language ), + 'isProminentWordsAvailable' => $is_prominent_words_available, + ]; + } + + /** + * Checks if the content endpoints are available. + * + * @return bool Returns true if the content endpoints are available + */ + public static function are_content_endpoints_available() { + if ( \function_exists( 'rest_get_server' ) ) { + $namespaces = \rest_get_server()->get_namespaces(); + return \in_array( 'wp/v2', $namespaces, true ); + } + return false; + } + + /** + * Retrieves the REST API configuration. + * + * @return array The configuration. + */ + protected function get_rest_api_config() { + return [ + 'available' => WPSEO_Utils::is_api_available(), + 'contentEndpointsAvailable' => self::are_content_endpoints_available(), + 'root' => \esc_url_raw( \rest_url() ), + 'nonce' => \wp_create_nonce( 'wp_rest' ), + ]; + } + + /** + * Returns the post for the current admin page. + * + * @codeCoverageIgnore + * + * @return WP_Post|null The post for the current admin page. + */ + protected function get_metabox_post() { + if ( $this->post !== null ) { + return $this->post; + } + + $post_id = $this->current_page_helper->get_current_post_id(); + + if ( $post_id ) { + + $this->post = \get_post( $post_id ); + + return $this->post; + } + + if ( isset( $GLOBALS['post'] ) ) { + $this->post = $GLOBALS['post']; + + return $this->post; + } + + return null; + } + + /** + * Checks whether or not the metabox related scripts should be loaded. + * + * @return bool True when it should be loaded. + */ + protected function load_metabox() { + // When the current page isn't a post related one. + if ( WPSEO_Metabox::is_post_edit( $this->get_current_page() ) ) { + return WPSEO_Post_Type::has_metabox_enabled( $this->current_page_helper->get_current_post_type() ); + } + + // Make sure ajax integrations are loaded. + return \wp_doing_ajax(); + } + + /** + * Retrieves the value of the pagenow variable. + * + * @codeCoverageIgnore + * + * @return string The value of pagenow. + */ + protected function get_current_page() { + global $pagenow; + + return $pagenow; + } + + /** + * Returns whether or not we need to index more posts for correct link suggestion functionality. + * + * @return bool Whether or not we need to index more posts. + */ + protected function is_prominent_words_indexing_completed() { + $is_indexing_completed = $this->prominent_words_helper->is_indexing_completed(); + if ( $is_indexing_completed === null ) { + $indexation_integration = \YoastSEOPremium()->classes->get( Indexing_Integration::class ); + $is_indexing_completed = $indexation_integration->get_unindexed_count( 0 ) === 0; + + $this->prominent_words_helper->set_indexing_completed( $is_indexing_completed ); + } + + return $is_indexing_completed; + } + + /** + * Returns the number of prominent words to store for content written in the given language. + * + * @param string $language The current language. + * + * @return int The number of words to store. + */ + protected function per_indexable_limit( $language ) { + if ( \YoastSEO()->helpers->language->has_function_word_support( $language ) ) { + return Indexing_Integration::PER_INDEXABLE_LIMIT; + } + + return Indexing_Integration::PER_INDEXABLE_LIMIT_NO_FUNCTION_WORD_SUPPORT; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-preview.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-preview.php new file mode 100644 index 00000000..863188d3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/elementor-preview.php @@ -0,0 +1,61 @@ +asset_manager = $asset_manager; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return string[] + */ + public static function get_conditionals() { + return [ Elementor_Activated_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'elementor/preview/enqueue_styles', [ $this, 'add_preview_styles' ] ); + } + + /** + * Adds CSS specifically for the Elementor preview. + * + * @return void + */ + public function add_preview_styles() { + $this->asset_manager->register_assets(); + $this->asset_manager->enqueue_style( 'inside-editor' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/mastodon.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/mastodon.php new file mode 100644 index 00000000..17a97422 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/mastodon.php @@ -0,0 +1,179 @@ +options_helper = $options_helper; + $this->social_profiles_helper = $social_profiles_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_frontend_presenter_classes', [ $this, 'add_social_link_tags' ], 10, 2 ); + \add_filter( 'wpseo_person_social_profile_fields', [ $this, 'add_mastodon_to_person_social_profile_fields' ], 11, 1 ); + \add_filter( 'wpseo_organization_social_profile_fields', [ $this, 'add_mastodon_to_organization_social_profile_fields' ], 11, 1 ); + \add_filter( 'wpseo_schema_person_social_profiles', [ $this, 'add_mastodon_to_person_schema' ], 10 ); + \add_filter( 'wpseo_mastodon_active', [ $this, 'check_mastodon_active' ], 10 ); + } + + /** + * Adds the social profiles presenter to the list of presenters to use. + * + * @param array $presenters The list of presenters. + * @param string $page_type The page type for which the presenters have been collected. + * + * @return array + */ + public function add_social_link_tags( $presenters, $page_type ) { + // Bail out early if something's wrong with the presenters, let's not add any more confusion there. + if ( ! \is_array( $presenters ) ) { + return $presenters; + } + + if ( \in_array( $page_type, [ 'Static_Home_Page', 'Home_Page' ], true ) ) { + $presenters = \array_merge( $presenters, [ 'Yoast\WP\SEO\Premium\Presenters\Mastodon_Link_Presenter' ] ); + } + + return $presenters; + } + + /** + * Adds Mastodon to the list of social profiles. + * + * @param array $social_profile_fields The social profiles array. + * + * @return array The updated social profiles array. + */ + public function add_mastodon_to_person_social_profile_fields( $social_profile_fields ) { + // Bail out early if something's wrong with the social profiles, let's not add any more confusion there. + if ( ! \is_array( $social_profile_fields ) ) { + return $social_profile_fields; + } + $social_profile_fields['mastodon'] = 'get_non_valid_url'; + + return $social_profile_fields; + } + + /** + * Adds Mastodon to the list of social profiles. + * + * @param array $social_profile_fields The social profiles array. + * + * @return array The updated social profiles array. + */ + public function add_mastodon_to_organization_social_profile_fields( $social_profile_fields ) { + // Bail out early if something's wrong with the social profiles, let's not add any more confusion there. + if ( ! \is_array( $social_profile_fields ) ) { + return $social_profile_fields; + } + $social_profile_fields['mastodon_url'] = 'get_non_valid_url'; + + return $social_profile_fields; + } + + /** + * Adds Mastodon to the list of social profiles to add to a Person's Schema. + * + * @param array $social_profiles The social profiles array. + * + * @return array + */ + public function add_mastodon_to_person_schema( $social_profiles ) { + // Bail out early if something's wrong with the social profiles, let's not add any more confusion there. + if ( ! \is_array( $social_profiles ) ) { + return $social_profiles; + } + $social_profiles[] = 'mastodon'; + + return $social_profiles; + } + + /** + * Adds Mastodon to the list of contact methods for persons. + * + * @deprecated 22.6 + * @codeCoverageIgnore + * + * @param array $contactmethods Currently set contactmethods. + * + * @return array + */ + public function add_mastodon_to_user_contactmethods( $contactmethods ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.6' ); + + // Bail out early if something's wrong with the contact methods, let's not add any more confusion there. + if ( ! \is_array( $contactmethods ) ) { + return $contactmethods; + } + + $contactmethods['mastodon'] = \__( 'Mastodon profile URL', 'wordpress-seo-premium' ); + + return $contactmethods; + } + + /** + * Checks if the Mastodon field is filled in. + * + * @param bool $state The current state of the integration. + * + * @return bool + */ + public function check_mastodon_active( $state ) { + switch ( $this->options_helper->get( 'company_or_person', false ) ) { + case 'company': + $social_profiles = $this->social_profiles_helper->get_organization_social_profiles(); + if ( ! empty( $social_profiles['mastodon_url'] ) ) { + return true; + } + break; + + case 'person': + $company_or_person_id = $this->options_helper->get( 'company_or_person_user_id', 0 ); + $social_profiles = $this->social_profiles_helper->get_person_social_profiles( $company_or_person_id ); + if ( ! empty( $social_profiles['mastodon'] ) ) { + return true; + } + break; + } + + return $state; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/translationspress.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/translationspress.php new file mode 100644 index 00000000..d8f34d8f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/translationspress.php @@ -0,0 +1,208 @@ +transient_key = 'yoast_translations_' . $this->slug; + $this->api_url = 'https://packages.translationspress.com/yoast/' . $this->slug . '/packages.json'; + $this->date_helper = $date_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'init', [ $this, 'register_clean_translations_cache' ], \PHP_INT_MAX ); + \add_filter( 'translations_api', [ $this, 'translations_api' ], 10, 3 ); + \add_filter( 'site_transient_update_plugins', [ $this, 'site_transient_update_plugins' ] ); + } + + /** + * Short-circuits translations API requests for private projects. + * + * @param bool|array $result The result object. Default false. + * @param string $requested_type The type of translations being requested. + * @param object $args Translation API arguments. + * + * @return bool|array The translations array. False by default. + */ + public function translations_api( $result, $requested_type, $args ) { + if ( $requested_type === 'plugins' && $args['slug'] === $this->slug ) { + return $this->get_translations(); + } + + return $result; + } + + /** + * Filters the translations transients to include the private plugin or theme. + * Caches our own return value to prevent heavy overhead. + * + * @param bool|object $value The transient value. + * + * @return object The filtered transient value. + */ + public function site_transient_update_plugins( $value ) { + if ( ! $value ) { + $value = new stdClass(); + } + + if ( ! isset( $value->translations ) ) { + $value->translations = []; + } + + if ( \is_array( $this->cached_translations ) ) { + $value->translations = \array_merge( $value->translations, $this->cached_translations ); + return $value; + } + + $this->cached_translations = []; + + $translations = $this->get_translations(); + if ( empty( $translations[ $this->slug ]['translations'] ) ) { + return $value; + } + + // The following call is the reason we need to cache the results of this method. + $installed_translations = \wp_get_installed_translations( 'plugins' ); + $available_languages = \get_available_languages(); + foreach ( $translations[ $this->slug ]['translations'] as $translation ) { + if ( ! \in_array( $translation['language'], $available_languages, true ) ) { + continue; + } + + if ( isset( $installed_translations[ $this->slug ][ $translation['language'] ] ) && $translation['updated'] ) { + $local = new DateTime( $installed_translations[ $this->slug ][ $translation['language'] ]['PO-Revision-Date'] ); + $remote = new DateTime( $translation['updated'] ); + + if ( $local >= $remote ) { + continue; + } + } + + $translation['type'] = 'plugin'; + $translation['slug'] = $this->slug; + $translation['autoupdate'] = true; + $value->translations[] = $translation; + $this->cached_translations[] = $translation; + } + + return $value; + } + + /** + * Registers actions for clearing translation caches. + * + * @return void + */ + public function register_clean_translations_cache() { + \add_action( 'set_site_transient_update_plugins', [ $this, 'clean_translations_cache' ] ); + \add_action( 'delete_site_transient_update_plugins', [ $this, 'clean_translations_cache' ] ); + } + + /** + * Clears existing translation cache. + * + * @return void + */ + public function clean_translations_cache() { + $translations = \get_site_transient( $this->transient_key ); + if ( ! \is_array( $translations ) ) { + return; + } + + $cache_lifespan = \DAY_IN_SECONDS; + $time_not_changed = isset( $translations['_last_checked'] ) && ( $this->date_helper->current_time() - $translations['_last_checked'] ) > $cache_lifespan; + + if ( ! $time_not_changed ) { + return; + } + + \delete_site_transient( $this->transient_key ); + } + + /** + * Gets the translations for a given project. + * + * @return array The translation data. + */ + public function get_translations() { + $translations = \get_site_transient( $this->transient_key ); + if ( $translations !== false && \is_array( $translations ) ) { + return $translations; + } + + $translations = []; + + $result = \json_decode( \wp_remote_retrieve_body( \wp_remote_get( $this->api_url ) ), true ); + + // Nothing found. + if ( ! \is_array( $result ) ) { + $result = []; + } + + $translations[ $this->slug ] = $result; + $translations['_last_checked'] = $this->date_helper->current_time(); + + \set_site_transient( $this->transient_key, $translations ); + + return $translations; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/wincher-keyphrases.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/wincher-keyphrases.php new file mode 100644 index 00000000..f6a4e30f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/third-party/wincher-keyphrases.php @@ -0,0 +1,91 @@ +get_results( + $wpdb->prepare( + " + SELECT meta_value + FROM %i pm + JOIN %i p ON p.id = pm.post_id + WHERE %i = %s AND %i != 'trash' + ", + $wpdb->postmeta, + $wpdb->posts, + 'meta_key', + $meta_key, + 'post_status' + ) + ); + + if ( $results ) { + foreach ( $results as $row ) { + $additional_keywords = \json_decode( $row->meta_value, true ); + if ( $additional_keywords !== null ) { + $additional_keywords = \array_column( $additional_keywords, 'keyword' ); + $keyphrases = \array_merge( $keyphrases, $additional_keywords ); + } + } + } + + return $keyphrases; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/upgrade-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/upgrade-integration.php new file mode 100644 index 00000000..369cb863 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/upgrade-integration.php @@ -0,0 +1,36 @@ +run_upgrade( \WPSEO_PREMIUM_VERSION ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/user-profile-integration.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/user-profile-integration.php new file mode 100644 index 00000000..9e84c344 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/user-profile-integration.php @@ -0,0 +1,50 @@ +prominent_words_repository = $prominent_words_repository; + } + + /** + * Registers the action that triggers when an indexable is deleted. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wpseo_indexable_deleted', [ $this, 'remove_prominent_words_for_indexable' ] ); + } + + /** + * Removes all prominent words for indexables if they are present. + * + * @param Indexable $indexable The indexable that got deleted. + * + * @return void + */ + public function remove_prominent_words_for_indexable( $indexable ) { + + $prominent_words = $this->prominent_words_repository->find_by_indexable_id( $indexable->id ); + + if ( \count( $prominent_words ) > 0 ) { + $this->prominent_words_repository->delete_by_indexable_id( $indexable->id ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/watchers/stale-cornerstone-content-watcher.php b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/watchers/stale-cornerstone-content-watcher.php new file mode 100644 index 00000000..1a470990 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/integrations/watchers/stale-cornerstone-content-watcher.php @@ -0,0 +1,65 @@ +is_cornerstone === false ) { + return; + } + + \wp_cache_delete( 'stale_cornerstone_count_' . $indexable->object_sub_type, 'stale_cornerstone_counts' ); + } + + /** + * Invalidates the cache for the stale cornerstone content when content gets un-cornerstoned. + * + * @param Indexable $indexable The indexable that got deleted. + * @param Indexable $indexable_before The indexable before it got saved. + * + * @return void + */ + public function maybe_invalidate_cache( $indexable, $indexable_before ) { + if ( ( $indexable->is_cornerstone === false ) && ( $indexable_before->is_cornerstone === false ) ) { + return; + } + + \wp_cache_delete( 'stale_cornerstone_count_' . $indexable->object_sub_type, 'stale_cornerstone_counts' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/introductions/application/ai-generate-titles-and-descriptions-introduction.php b/wp/wp-content/plugins/wordpress-seo-premium/src/introductions/application/ai-generate-titles-and-descriptions-introduction.php new file mode 100644 index 00000000..cde34f43 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/introductions/application/ai-generate-titles-and-descriptions-introduction.php @@ -0,0 +1,106 @@ +options_helper = $options_helper; + $this->user_helper = $user_helper; + } + + /** + * Returns the ID. + * + * @return string + */ + public function get_id() { + return self::ID; + } + + /** + * Returns the unique name. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @return string + */ + public function get_name() { + \_deprecated_function( __METHOD__, 'Yoast SEO Premium 21.6', 'Please use get_id() instead' ); + + return self::ID; + } + + /** + * Returns the requested pagination priority. Lower means earlier. + * + * @return int + */ + public function get_priority() { + return 10; + } + + /** + * Returns whether this introduction should show. + * + * @return bool + */ + public function should_show() { + // Feature was already enabled, no need to introduce it again. + if ( $this->options_helper->get( 'ai_enabled_pre_default', false ) ) { + return false; + } + + // Get the current user ID, if no user is logged in we bail as this is needed for the next checks. + $current_user_id = $this->user_helper->get_current_user_id(); + if ( $current_user_id === 0 ) { + return false; + } + + // Consent was already given, no need to ask again. + if ( $this->user_helper->get_meta( $current_user_id, '_yoast_wpseo_ai_consent', true ) ) { + return false; + } + + if ( ! $this->is_user_allowed( [ 'edit_posts' ] ) ) { + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/main.php b/wp/wp-content/plugins/wordpress-seo-premium/src/main.php new file mode 100644 index 00000000..ec8cb5fb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/main.php @@ -0,0 +1,63 @@ +is_development() + && \class_exists( '\Yoast\WP\SEO\Dependency_Injection\Container_Compiler' ) + && \file_exists( __DIR__ . '/../config/dependency-injection/services.php' ) + ) { + // Exception here is unhandled as it will only occur in development. + Container_Compiler::compile( + $this->is_development(), + __DIR__ . '/generated/container.php', + __DIR__ . '/../config/dependency-injection/services.php', + __DIR__ . '/../vendor/composer/autoload_classmap.php', + 'Yoast\WP\SEO\Premium\Generated' + ); + } + + if ( \file_exists( __DIR__ . '/generated/container.php' ) ) { + require_once __DIR__ . '/generated/container.php'; + + return new Cached_Container(); + } + + return null; + } + + /** + * @inheritDoc + */ + protected function get_surfaces() { + return [ + 'classes' => Classes_Surface::class, + 'helpers' => Helpers_Surface::class, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/models/prominent-words.php b/wp/wp-content/plugins/wordpress-seo-premium/src/models/prominent-words.php new file mode 100644 index 00000000..2958042e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/models/prominent-words.php @@ -0,0 +1,25 @@ +"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/cross-icon-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/cross-icon-presenter.php new file mode 100644 index 00000000..40dc25c1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/cross-icon-presenter.php @@ -0,0 +1,18 @@ +"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/icon-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/icon-presenter.php new file mode 100644 index 00000000..39cc53bc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/icons/icon-presenter.php @@ -0,0 +1,77 @@ +"; + + /** + * The default height and width of an icon in pixels. + */ + public const SIZE_DEFAULT = 24; + + /** + * The size of the icon in pixels. + * + * @var int + */ + protected $size; + + /** + * Creates a new icon. + * + * @codeCoverageIgnore + * + * @param int $size The size of the icon. + */ + public function __construct( $size ) { + $this->size = $size; + } + + /** + * Generates the SVG based on the given path. + * + * @param string $path The path to generate SVG icon for. + * @param int $svg_size The height and width of the SVG icon. + * + * @return string The generated icon svg. + */ + private static function svg( $path, $svg_size = self::SIZE_DEFAULT ) { + $start = \str_replace( '%SIZE%', $svg_size, self::SVG_START_TAG ); + return $start . $path . ''; + } + + /** + * Returns the icon as a string. + * + * @return string The icon. + */ + public function present() { + return self::svg( $this->get_path(), $this->get_size() ); + } + + /** + * Returns the size of the icon. + * + * @return int The size of the icon. + */ + public function get_size() { + return $this->size; + } + + /** + * Returns the path of the icon. + * + * @return string The path of the icon. + */ + abstract public function get_path(); +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/mastodon-link-presenter.php b/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/mastodon-link-presenter.php new file mode 100644 index 00000000..61ee41d2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/presenters/mastodon-link-presenter.php @@ -0,0 +1,84 @@ +` element. + */ + return \apply_filters( 'wpseo_mastodon_link', $output ); + } + + return ''; + } + + /** + * Returns the URL to be presented in the tag. + * + * @return string The URL to be presented in the tag. + */ + public function get() { + switch ( $this->helpers->options->get( 'company_or_person', false ) ) { + case 'company': + $social_profiles = $this->helpers->social_profiles->get_organization_social_profiles(); + break; + + case 'person': + $company_or_person_id = $this->helpers->options->get( 'company_or_person_user_id', 0 ); + $social_profiles = $this->helpers->social_profiles->get_person_social_profiles( $company_or_person_id ); + break; + default: + $social_profiles = []; + } + + // Person case. + if ( ! empty( $social_profiles['mastodon'] ) ) { + return $social_profiles['mastodon']; + } + + // Organization case. + if ( ! empty( $social_profiles['mastodon_url'] ) ) { + return $social_profiles['mastodon_url']; + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/repositories/prominent-words-repository.php b/wp/wp-content/plugins/wordpress-seo-premium/src/repositories/prominent-words-repository.php new file mode 100644 index 00000000..1d8dbaff --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/repositories/prominent-words-repository.php @@ -0,0 +1,206 @@ +query()->where( 'indexable_id', $indexable_id )->find_many(); + } + + /** + * Finds the prominent words based on a list of indexable ids. + * The method also computes the document frequency of each word and adds it as a separate property on the objects. + * + * @param int[] $ids The ids of indexables to get prominent words for. + * + * @return array The list of prominent words items found by indexable ids. + */ + public function find_by_list_of_ids( $ids ) { + if ( empty( $ids ) ) { + return []; + } + + $prominent_words = $this->query()->where_in( 'indexable_id', $ids )->find_many(); + $prominent_stems = \wp_list_pluck( $prominent_words, 'stem' ); + $document_freqs = $this->query() + ->select( 'stem' ) + ->select_expr( 'COUNT(id)', 'count' ) + ->where_in( 'stem', $prominent_stems ) + ->group_by( 'stem' ) + ->find_array(); + + $stem_counts = []; + foreach ( $document_freqs as $document_freq ) { + $stem_counts[ $document_freq['stem'] ] = $document_freq['count']; + } + foreach ( $prominent_words as $prominent_word ) { + if ( ! \array_key_exists( $prominent_word->stem, $stem_counts ) ) { + continue; + } + $prominent_word->df = (int) $stem_counts[ $prominent_word->stem ]; + } + + return $prominent_words; + } + + /** + * Finds all indexable ids which have prominent words with stems from the list. + * + * @param array $stems The stems of prominent words to search for. + * @param int $limit The number of indexable ids to return in 1 call. + * @param int $page From which page (batch) to begin. + * @param int[] $excluded_ids The indexable IDs to exclude. + * @param array $post_type Optional. The list of post types where suggestions may come from. + * @param bool $only_include_public Optional. Only include public indexables, defaults to false. + * + * @return array The list of indexable ids. + */ + public function find_ids_by_stems( $stems, $limit, $page, $excluded_ids = [], $post_type = [], $only_include_public = false ) { + if ( empty( $stems ) ) { + return []; + } + + $offset = ( ( $page - 1 ) * $limit ); + + $stem_placeholders = \implode( ', ', \array_fill( 0, \count( $stems ), '%s' ) ); + + $query = Model::of_type( 'Indexable' ) + ->table_alias( 'i' ) + ->select( 'id' ) + ->where_raw( + 'i.id IN ( SELECT DISTINCT pw.indexable_id FROM ' . Model::get_table_name( 'Prominent_Words' ) . ' pw WHERE pw.stem IN (' . $stem_placeholders . ') )', + $stems + ) + ->where_raw( '( i.post_status NOT IN ( \'draft\', \'auto-draft\', \'trash\' ) OR i.post_status IS NULL )' ) + ->limit( $limit ) + ->offset( $offset ); + + if ( ! empty( $excluded_ids ) ) { + $query = $query->where_not_in( 'id', $excluded_ids ); + } + + if ( ! empty( $post_type ) && \is_array( $post_type ) ) { + $query = $query->where_in( 'object_sub_type', $post_type ); + } + + if ( $only_include_public ) { + $query = $query->where_raw( '(i.is_public = 1 OR i.is_public is null)' ); + } + + $results = $query->find_array(); + + return \wp_list_pluck( $results, 'id' ); + } + + /** + * Deletes multiple prominent words from the database in one query. + * + * @param int $indexable_id The id of the indexable which needs to have + * some of its prominent words deleted. + * @param array $outdated_stems The array with to-be-deleted prominent word stems. + * + * @return bool Whether the delete was successful. + */ + public function delete_by_indexable_id_and_stems( $indexable_id, $outdated_stems ) { + // Check if the data are of the right format. + if ( ( ! $indexable_id ) || empty( $outdated_stems ) || ! \is_array( $outdated_stems ) ) { + return false; + } + + return $this->query() + ->where( 'indexable_id', $indexable_id ) + ->where_in( 'stem', $outdated_stems ) + ->delete_many(); + } + + /** + * Deletes all prominent words for an indexable + * + * @param int $indexable_id The id of the indexable which needs to have + * some of its prominent words deleted. + * + * @return bool Whether the deletion was successful. + */ + public function delete_by_indexable_id( $indexable_id ) { + if ( ! $indexable_id ) { + return false; + } + + return $this->query() + ->where( 'indexable_id', $indexable_id ) + ->delete_many(); + } + + /** + * Counts the number of documents in which each of the given stems occurs. + * + * @param string[] $stems The stems of the words for which to find the document frequencies. + * + * @return array The list of stems and their respective document frequencies. Each entry has a 'stem' and a + * 'document_frequency' parameter. + */ + public function count_document_frequencies( $stems ) { + if ( empty( $stems ) ) { + return []; + } + + /* + * Count in how many documents each stem occurs by querying the database. + * Returns "Prominent_Words" with two properties: 'stem' and 'document_frequency'. + */ + $raw_doc_frequencies = $this->query() + ->select( 'stem' ) + ->select_expr( 'COUNT( stem )', 'document_frequency' ) + ->where_in( 'stem', $stems ) + ->group_by( 'stem' ) + ->find_many(); + + // We want to change the raw document frequencies into a map mapping stems to document frequency. + $stems = \array_map( + static function ( $item ) { + return $item->stem; + }, + $raw_doc_frequencies + ); + + $doc_frequencies = \array_fill_keys( $stems, 0 ); + foreach ( $raw_doc_frequencies as $raw_doc_frequency ) { + $doc_frequencies[ $raw_doc_frequency->stem ] = (int) $raw_doc_frequency->document_frequency; + } + + return $doc_frequencies; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/routes/link-suggestions-route.php b/wp/wp-content/plugins/wordpress-seo-premium/src/routes/link-suggestions-route.php new file mode 100644 index 00000000..fa5eb36e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/routes/link-suggestions-route.php @@ -0,0 +1,113 @@ +link_suggestions_action = $link_suggestions_action; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $route_args = [ + 'methods' => 'GET', + 'args' => [ + 'prominent_words' => [ + 'required' => true, + 'type' => 'object', + 'description' => 'Stems of prominent words and their term frequencies we want link suggestions based on', + ], + 'object_id' => [ + 'required' => true, + 'type' => 'integer', + 'description' => 'The object id of the current indexable.', + ], + 'object_type' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The object type of the current indexable.', + ], + 'limit' => [ + 'required' => false, + 'default' => 5, + 'type' => 'integer', + 'description' => 'The maximum number of link suggestions to retrieve', + ], + ], + 'callback' => [ $this, 'run_get_suggestions_action' ], + 'permission_callback' => [ $this, 'can_retrieve_data' ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::ENDPOINT_QUERY, $route_args ); + } + + /** + * Runs the get suggestions action.. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response The response for the query of link suggestions. + */ + public function run_get_suggestions_action( WP_REST_Request $request ) { + $prominent_words = $request->get_param( 'prominent_words' ); + $limit = $request->get_param( 'limit' ); + $object_id = $request->get_param( 'object_id' ); + $object_type = $request->get_param( 'object_type' ); + $post_type = $request->get_param( 'post_type' ); + + return new WP_REST_Response( + $this->link_suggestions_action->get_suggestions( + $prominent_words, + $limit, + $object_id, + $object_type, + true, + $post_type + ) + ); + } + + /** + * Determines if the current user is allowed to use this endpoint. + * + * @return bool + */ + public function can_retrieve_data() { + return \current_user_can( 'edit_posts' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/routes/prominent-words-route.php b/wp/wp-content/plugins/wordpress-seo-premium/src/routes/prominent-words-route.php new file mode 100644 index 00000000..1940af20 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/routes/prominent-words-route.php @@ -0,0 +1,245 @@ +content_action = $content_action; + $this->save_action = $save_action; + $this->complete_action = $complete_action; + $this->indexing_helper = $indexing_helper; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + \register_rest_route( + Main::API_V1_NAMESPACE, + self::GET_CONTENT_ROUTE, + [ + 'methods' => 'POST', + 'callback' => [ $this, 'run_content_action' ], + 'permission_callback' => [ $this, 'can_retrieve_data' ], + ] + ); + + \register_rest_route( + Main::API_V1_NAMESPACE, + self::COMPLETE_ROUTE, + [ + 'methods' => 'POST', + 'callback' => [ $this, 'run_complete_action' ], + 'permission_callback' => [ $this, 'can_retrieve_data' ], + ] + ); + + $route_args = [ + 'methods' => 'POST', + 'args' => [ + 'data' => [ + 'type' => 'array', + 'required' => false, + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'object_id' => [ + 'type' => 'number', + 'required' => true, + ], + 'prominent_words' => [ + 'type' => 'object', + 'required' => false, + ], + ], + ], + ], + ], + 'callback' => [ $this, 'run_save_action' ], + 'permission_callback' => [ $this, 'can_retrieve_data' ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::SAVE_ROUTE, $route_args ); + } + + /** + * Retrieves the content that needs to be analyzed for prominent words. + * + * @return WP_REST_Response Response with the content that needs to be analyzed for prominent words. + */ + public function run_content_action() { + return $this->run_indexation_action( $this->content_action, self::FULL_GET_CONTENT_ROUTE ); + } + + /** + * Marks the indexing of prominent words as completed. + * + * @return WP_REST_Response Response with empty data. + */ + public function run_complete_action() { + $this->complete_action->complete(); + + return $this->respond_with( [], false ); + } + + /** + * Saves the prominent words for the indexables. + * + * The request should have the parameters: + * - **data**: The data array containing: + * - **object_id**: The ID of the object (post-id, term-id, etc.). + * - **prominent_words**: The map of `'stem' => weight` key-value pairs, + * e.g. the stems of the prominent words and their weights. + * Leave this out when the indexable has no prominent words. + * + * @param WP_REST_Request $request The request to handle. + * + * @return WP_REST_Response The response to give. + */ + public function run_save_action( WP_REST_Request $request ) { + $this->save_action->save( $request->get_param( 'data' ) ); + + return new WP_REST_Response( + [ 'message' => 'The words have been successfully saved for the given indexables.' ] + ); + } + + /** + * Determines if the current user is allowed to use this endpoint. + * + * @return bool + */ + public function can_retrieve_data() { + return \current_user_can( 'edit_posts' ); + } + + /** + * Runs an indexing action and returns the response. + * + * @param Indexation_Action_Interface $indexation_action The indexing action. + * @param string $url The url of the indexing route. + * + * @return WP_REST_Response|WP_Error The response, or an error when running the indexing action failed. + */ + protected function run_indexation_action( Indexation_Action_Interface $indexation_action, $url ) { + try { + return parent::run_indexation_action( $indexation_action, $url ); + } catch ( Exception $exception ) { + $this->indexing_helper->set_reason( Indexing_Reasons::REASON_INDEXING_FAILED ); + + return new WP_Error( 'wpseo_error_indexing', $exception->getMessage() ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/routes/workouts-route.php b/wp/wp-content/plugins/wordpress-seo-premium/src/routes/workouts-route.php new file mode 100644 index 00000000..878f2745 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/routes/workouts-route.php @@ -0,0 +1,465 @@ +indexable_repository = $indexable_repository; + $this->link_suggestions_action = $link_suggestions_action; + $this->indexable_term_builder = $indexable_term_builder; + $this->post_type_helper = $post_type_helper; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $edit_others_posts = static function () { + return \current_user_can( 'edit_others_posts' ); + }; + + $noindex_route = [ + [ + 'methods' => 'POST', + 'callback' => [ $this, 'noindex' ], + 'permission_callback' => $edit_others_posts, + 'args' => [ + 'object_id' => [ + 'type' => 'integer', + 'required' => true, + ], + 'object_type' => [ + 'type' => 'string', + 'required' => true, + ], + 'object_sub_type' => [ + 'type' => 'string', + 'required' => true, + ], + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, Base_Workouts_Route::WORKOUTS_ROUTE . self::NOINDEX_ROUTE, $noindex_route ); + + $remove_redirect_route = [ + [ + 'methods' => 'POST', + 'callback' => [ $this, 'remove_redirect' ], + 'permission_callback' => $edit_others_posts, + 'args' => [ + 'object_id' => [ + 'type' => 'integer', + 'required' => true, + ], + 'object_type' => [ + 'type' => 'string', + 'required' => true, + ], + 'object_sub_type' => [ + 'type' => 'string', + 'required' => true, + ], + 'permalink' => [ + 'type' => 'string', + 'required' => true, + ], + 'redirect_url' => [ + 'type' => 'string', + 'required' => true, + ], + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, Base_Workouts_Route::WORKOUTS_ROUTE . self::REMOVE_REDIRECT_ROUTE, $remove_redirect_route ); + + $suggestions_route = [ + [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_link_suggestions' ], + 'permission_callback' => $edit_others_posts, + 'args' => [ + 'indexableId' => [ + 'type' => 'integer', + 'required' => true, + ], + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, Base_Workouts_Route::WORKOUTS_ROUTE . self::LINK_SUGGESTIONS_ROUTE, $suggestions_route ); + + $last_updated_route = [ + [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_last_updated' ], + 'permission_callback' => $edit_others_posts, + 'args' => [ + 'postId' => [ + 'type' => 'integer', + 'required' => true, + ], + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, Base_Workouts_Route::WORKOUTS_ROUTE . self::LAST_UPDATED_ROUTE, $last_updated_route ); + + $cornerstone_data_route = [ + [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_cornerstone_data' ], + 'permission_callback' => $edit_others_posts, + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, Base_Workouts_Route::WORKOUTS_ROUTE . self::CORNERSTONE_DATA_ROUTE, $cornerstone_data_route ); + + $enable_cornerstone_route = [ + [ + 'methods' => 'POST', + 'callback' => [ $this, 'enable_cornerstone' ], + 'permission_callback' => $edit_others_posts, + 'args' => [ + 'object_id' => [ + 'type' => 'integer', + 'required' => true, + ], + 'object_type' => [ + 'type' => 'string', + 'required' => true, + ], + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, Base_Workouts_Route::WORKOUTS_ROUTE . self::ENABLE_CORNERSTONE, $enable_cornerstone_route ); + } + + /** + * Sets noindex on an indexable. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function noindex( $request ) { + if ( $request['object_type'] === 'post' ) { + WPSEO_Meta::set_value( 'meta-robots-noindex', 1, $request['object_id'] ); + } + elseif ( $request['object_type'] === 'term' ) { + WPSEO_Taxonomy_Meta::set_value( $request['object_id'], $request['object_sub_type'], 'noindex', 'noindex' ); + // Rebuild the indexable as WPSEO_Taxonomy_Meta does not trigger any actions on which term indexables are rebuild. + $indexable = $this->indexable_term_builder->build( $request['object_id'], $this->indexable_repository->find_by_id_and_type( $request['object_id'], $request['object_type'] ) ); + if ( \is_a( $indexable, Indexable::class ) ) { + $indexable->save(); + } + else { + return new WP_REST_Response( + [ 'json' => false ] + ); + } + } + + return new WP_REST_Response( + [ 'json' => true ] + ); + } + + /** + * Enables cornerstone on an indexable. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function enable_cornerstone( $request ) { + if ( $request['object_type'] === 'post' ) { + WPSEO_Meta::set_value( 'is_cornerstone', 1, $request['object_id'] ); + } + elseif ( $request['object_type'] === 'term' ) { + $term = \get_term( $request['object_id'] ); + WPSEO_Taxonomy_Meta::set_value( $request['object_id'], $term->taxonomy, 'is_cornerstone', '1' ); + // Rebuild the indexable as WPSEO_Taxonomy_Meta does not trigger any actions on which term indexables are rebuild. + $indexable = $this->indexable_term_builder->build( $request['object_id'], $this->indexable_repository->find_by_id_and_type( $request['object_id'], $request['object_type'] ) ); + if ( \is_a( $indexable, Indexable::class ) ) { + $indexable->save(); + } + else { + return new WP_REST_Response( + [ 'json' => false ] + ); + } + } + + return new WP_REST_Response( + [ 'json' => true ] + ); + } + + /** + * Removes an indexable and redirects it. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function remove_redirect( $request ) { + if ( $request['object_type'] === 'post' ) { + \add_filter( 'Yoast\WP\SEO\enable_notification_post_trash', '__return_false' ); + \wp_trash_post( $request['object_id'] ); + \remove_filter( 'Yoast\WP\SEO\enable_notification_post_trash', '__return_false' ); + } + elseif ( $request['object_type'] === 'term' ) { + \add_filter( 'Yoast\WP\SEO\enable_notification_term_delete', '__return_false' ); + \wp_delete_term( $request['object_id'], $request['object_sub_type'] ); + \remove_filter( 'Yoast\WP\SEO\enable_notification_term_delete', '__return_false' ); + } + else { + return new WP_REST_Response( + [ 'json' => false ] + ); + } + + $redirect = new WPSEO_Redirect( + $request['permalink'], + $request['redirect_url'], + '301', + 'plain' + ); + $redirect_manager = new WPSEO_Redirect_Manager( 'plain' ); + $redirect_manager->create_redirect( $redirect ); + return new WP_REST_Response( + [ 'json' => true ] + ); + } + + /** + * Sets noindex on an indexable. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function get_link_suggestions( $request ) { + $suggestions = $this->link_suggestions_action->get_indexable_suggestions_for_indexable( + $request['indexableId'], + 5, + false + ); + + foreach ( $suggestions as $index => $suggestion ) { + $suggestions[ $index ]['edit_link'] = ( $suggestion['object_type'] === 'post' ) ? \get_edit_post_link( $suggestion['object_id'] ) : \get_edit_term_link( $suggestion['object_id'] ); + } + + return new WP_REST_Response( + [ 'json' => $suggestions ] + ); + } + + /** + * Gets the cornerstone indexables + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function get_cornerstone_data() { + $cornerstones = $this->indexable_repository->query() + ->where_raw( '( post_status= \'publish\' OR post_status IS NULL ) AND is_cornerstone = 1' ) + ->where_in( 'object_type', [ 'term', 'post' ] ) + ->where_in( 'object_sub_type', $this->get_public_sub_types() ) + ->order_by_asc( 'breadcrumb_title' ) + ->find_many(); + + $cornerstones = \array_map( [ $this->indexable_repository, 'ensure_permalink' ], $cornerstones ); + $cornerstones = \array_map( [ $this, 'map_subtypes_to_singular_name' ], $cornerstones ); + + $most_linked = $this->indexable_repository->query() + ->where_gt( 'incoming_link_count', 0 ) + ->where_not_null( 'incoming_link_count' ) + ->where_raw( '( post_status = \'publish\' OR post_status IS NULL )' ) + ->where_in( 'object_sub_type', $this->get_public_sub_types() ) + ->where_in( 'object_type', [ 'term', 'post' ] ) + ->where_raw( '( is_robots_noindex = 0 OR is_robots_noindex IS NULL )' ) + ->order_by_desc( 'incoming_link_count' ) + ->limit( 20 ) + ->find_many(); + $most_linked = \array_map( [ $this->indexable_repository, 'ensure_permalink' ], $most_linked ); + $most_linked = \array_map( [ $this, 'map_subtypes_to_singular_name' ], $most_linked ); + + return new WP_REST_Response( + [ + 'json' => [ + 'cornerstones' => $cornerstones, + 'mostLinked' => $most_linked, + ], + ] + ); + } + + /** + * Gets the last updated for a particular post Id. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function get_last_updated( $request ) { + $post = \get_post( $request['postId'] ); + + return new WP_REST_Response( + [ 'json' => $post->post_modified ] + ); + } + + /** + * Maps an array of indexables and replaces the object_sub_type with the singular name of that type. + * + * @param Indexable $indexable An Indexable. + * + * @return Indexable The new Indexable with the edited object_sub_type. + */ + public function map_subtypes_to_singular_name( Indexable $indexable ) { + if ( $indexable->object_type === 'post' ) { + $post_type_labels = \get_post_type_labels( \get_post_type_object( \get_post_type( $indexable->object_id ) ) ); + $indexable->object_sub_type = $post_type_labels->singular_name; + } + else { + $taxonomy_labels = \get_taxonomy_labels( \get_taxonomy( $indexable->object_sub_type ) ); + $indexable->object_sub_type = $taxonomy_labels->singular_name; + } + return $indexable; + } + + /** + * Get public sub types. + * + * @return array The subtypes. + */ + protected function get_public_sub_types() { + $object_sub_types = \array_values( + \array_merge( + $this->post_type_helper->get_public_post_types(), + \get_taxonomies( [ 'public' => true ] ) + ) + ); + + $excluded_post_types = \apply_filters( 'wpseo_indexable_excluded_post_types', [ 'attachment' ] ); + $object_sub_types = \array_diff( $object_sub_types, $excluded_post_types ); + return $object_sub_types; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/surfaces/helpers-surface.php b/wp/wp-content/plugins/wordpress-seo-premium/src/surfaces/helpers-surface.php new file mode 100644 index 00000000..3a61ab58 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/surfaces/helpers-surface.php @@ -0,0 +1,96 @@ +container = $container; + } + + /** + * Magic getter for getting helper classes. + * + * @param string $helper The helper to get. + * + * @return mixed The helper class. + */ + public function __get( $helper ) { + return $this->container->get( $this->get_helper_class( $helper ) ); + } + + /** + * Magic isset for ensuring helper exists. + * + * @param string $helper The helper to get. + * + * @return bool Whether the helper exists. + */ + public function __isset( $helper ) { + return $this->container->has( $this->get_helper_class( $helper ) ); + } + + /** + * Prevents setting dynamic properties. + * + * @param string $name The property name. + * @param mixed $value The property value. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. + */ + public function __set( $name, $value ) { + throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); + } + + /** + * Prevents unsetting dynamic properties. + * + * @param string $name The property name. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. + */ + public function __unset( $name ) { + throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); + } + + /** + * Gets the classname for a premium helper. + * + * @param string $helper The name of the helper. + * + * @return string The classname of the helper + */ + protected function get_helper_class( $helper ) { + $helper = \implode( '_', \array_map( 'ucfirst', \explode( '_', $helper ) ) ); + + return "Yoast\WP\SEO\Premium\Helpers\\{$helper}_Helper"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/user-meta/framework/additional-contactmethods/mastodon.php b/wp/wp-content/plugins/wordpress-seo-premium/src/user-meta/framework/additional-contactmethods/mastodon.php new file mode 100644 index 00000000..e9d3a4c5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/user-meta/framework/additional-contactmethods/mastodon.php @@ -0,0 +1,30 @@ +mastodon = $mastodon; + } + + /** + * Registers action hook. + * + * @return void + */ + public function register_hooks(): void { + \add_filter( 'wpseo_additional_contactmethods', [ $this, 'add_contactmethods' ] ); + } + + /** + * Adds to the contactmethods the Premium contactmethods. + * + * @param array $contactmethods Currently set contactmethods. + * + * @return array Contactmethods with added Premium contactmethods. + */ + public function add_contactmethods( $contactmethods ) { + $premium_contactmethod = []; + $premium_contactmethod[] = $this->mastodon; + + return \array_merge( $contactmethods, $premium_contactmethod ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/src/wordpress/wrapper.php b/wp/wp-content/plugins/wordpress-seo-premium/src/wordpress/wrapper.php new file mode 100644 index 00000000..373dfae9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/src/wordpress/wrapper.php @@ -0,0 +1,76 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/InstalledVersions.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..01581949 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/InstalledVersions.php @@ -0,0 +1,357 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/LICENSE b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_classmap.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..db1843a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_classmap.php @@ -0,0 +1,240 @@ + $vendorDir . '/composer/InstalledVersions.php', + 'WPSEO_CLI_Premium_Requirement' => $baseDir . '/cli/cli-premium-requirement.php', + 'WPSEO_CLI_Redirect_Base_Command' => $baseDir . '/cli/cli-redirect-base-command.php', + 'WPSEO_CLI_Redirect_Command_Namespace' => $baseDir . '/cli/cli-redirect-command-namespace.php', + 'WPSEO_CLI_Redirect_Create_Command' => $baseDir . '/cli/cli-redirect-create-command.php', + 'WPSEO_CLI_Redirect_Delete_Command' => $baseDir . '/cli/cli-redirect-delete-command.php', + 'WPSEO_CLI_Redirect_Follow_Command' => $baseDir . '/cli/cli-redirect-follow-command.php', + 'WPSEO_CLI_Redirect_Has_Command' => $baseDir . '/cli/cli-redirect-has-command.php', + 'WPSEO_CLI_Redirect_List_Command' => $baseDir . '/cli/cli-redirect-list-command.php', + 'WPSEO_CLI_Redirect_Update_Command' => $baseDir . '/cli/cli-redirect-update-command.php', + 'WPSEO_Custom_Fields_Plugin' => $baseDir . '/classes/custom-fields-plugin.php', + 'WPSEO_Executable_Redirect' => $baseDir . '/classes/redirect/executable-redirect.php', + 'WPSEO_Export_Keywords_CSV' => $baseDir . '/classes/export/export-keywords-csv.php', + 'WPSEO_Export_Keywords_Post_Presenter' => $baseDir . '/classes/export/export-keywords-post-presenter.php', + 'WPSEO_Export_Keywords_Post_Query' => $baseDir . '/classes/export/export-keywords-post-query.php', + 'WPSEO_Export_Keywords_Presenter' => $baseDir . '/classes/export/export-keywords-presenter-interface.php', + 'WPSEO_Export_Keywords_Query' => $baseDir . '/classes/export/export-keywords-query-interface.php', + 'WPSEO_Export_Keywords_Term_Presenter' => $baseDir . '/classes/export/export-keywords-term-presenter.php', + 'WPSEO_Export_Keywords_Term_Query' => $baseDir . '/classes/export/export-keywords-term-query.php', + 'WPSEO_Metabox_Link_Suggestions' => $baseDir . '/classes/metabox-link-suggestions.php', + 'WPSEO_Multi_Keyword' => $baseDir . '/classes/multi-keyword.php', + 'WPSEO_Post_Watcher' => $baseDir . '/classes/post-watcher.php', + 'WPSEO_Premium' => $baseDir . '/premium.php', + 'WPSEO_Premium_Asset_JS_L10n' => $baseDir . '/classes/premium-asset-js-l10n.php', + 'WPSEO_Premium_Assets' => $baseDir . '/classes/premium-assets.php', + 'WPSEO_Premium_Expose_Shortlinks' => $baseDir . '/classes/premium-expose-shortlinks.php', + 'WPSEO_Premium_Import_Manager' => $baseDir . '/classes/premium-import-manager.php', + 'WPSEO_Premium_Javascript_Strings' => $baseDir . '/classes/premium-javascript-strings.php', + 'WPSEO_Premium_Keyword_Export_Manager' => $baseDir . '/classes/premium-keyword-export-manager.php', + 'WPSEO_Premium_Metabox' => $baseDir . '/classes/premium-metabox.php', + 'WPSEO_Premium_Option' => $baseDir . '/classes/premium-option.php', + 'WPSEO_Premium_Orphaned_Content_Support' => $baseDir . '/classes/premium-orphaned-content-support.php', + 'WPSEO_Premium_Orphaned_Content_Utils' => $baseDir . '/classes/premium-orphaned-content-utils.php', + 'WPSEO_Premium_Orphaned_Post_Filter' => $baseDir . '/classes/premium-orphaned-post-filter.php', + 'WPSEO_Premium_Orphaned_Post_Query' => $baseDir . '/classes/premium-orphaned-post-query.php', + 'WPSEO_Premium_Prominent_Words_Support' => $baseDir . '/classes/premium-prominent-words-support.php', + 'WPSEO_Premium_Prominent_Words_Unindexed_Post_Query' => $baseDir . '/classes/premium-prominent-words-unindexed-post-query.php', + 'WPSEO_Premium_Prominent_Words_Versioning' => $baseDir . '/classes/premium-prominent-words-versioning.php', + 'WPSEO_Premium_Redirect_EndPoint' => $baseDir . '/classes/premium-redirect-endpoint.php', + 'WPSEO_Premium_Redirect_Export_Manager' => $baseDir . '/classes/premium-redirect-export-manager.php', + 'WPSEO_Premium_Redirect_Option' => $baseDir . '/classes/premium-redirect-option.php', + 'WPSEO_Premium_Redirect_Service' => $baseDir . '/classes/premium-redirect-service.php', + 'WPSEO_Premium_Redirect_Undo_EndPoint' => $baseDir . '/classes/redirect-undo-endpoint.php', + 'WPSEO_Premium_Register_Capabilities' => $baseDir . '/classes/premium-register-capabilities.php', + 'WPSEO_Premium_Stale_Cornerstone_Content_Filter' => $baseDir . '/classes/premium-stale-cornerstone-content-filter.php', + 'WPSEO_Product_Premium' => $baseDir . '/classes/product-premium.php', + 'WPSEO_Redirect' => $baseDir . '/classes/redirect/redirect.php', + 'WPSEO_Redirect_Abstract_Loader' => $baseDir . '/classes/redirect/loaders/redirect-abstract-loader.php', + 'WPSEO_Redirect_Abstract_Validation' => $baseDir . '/classes/redirect/validation/redirect-abstract-validation.php', + 'WPSEO_Redirect_Accessible_Validation' => $baseDir . '/classes/redirect/validation/redirect-accessible-validation.php', + 'WPSEO_Redirect_Ajax' => $baseDir . '/classes/redirect/redirect-ajax.php', + 'WPSEO_Redirect_Apache_Exporter' => $baseDir . '/classes/redirect/exporters/redirect-apache-exporter.php', + 'WPSEO_Redirect_CSV_Exporter' => $baseDir . '/classes/redirect/exporters/redirect-csv-exporter.php', + 'WPSEO_Redirect_CSV_Loader' => $baseDir . '/classes/redirect/loaders/redirect-csv-loader.php', + 'WPSEO_Redirect_Endpoint_Validation' => $baseDir . '/classes/redirect/validation/redirect-endpoint-validation.php', + 'WPSEO_Redirect_Exporter' => $baseDir . '/classes/redirect/exporters/redirect-exporter-interface.php', + 'WPSEO_Redirect_File_Exporter' => $baseDir . '/classes/redirect/exporters/redirect-file-exporter.php', + 'WPSEO_Redirect_File_Util' => $baseDir . '/classes/redirect/redirect-file-util.php', + 'WPSEO_Redirect_Form_Presenter' => $baseDir . '/classes/redirect/presenters/redirect-form-presenter.php', + 'WPSEO_Redirect_Formats' => $baseDir . '/classes/redirect/redirect-formats.php', + 'WPSEO_Redirect_Formatter' => $baseDir . '/classes/redirect/redirect-formatter.php', + 'WPSEO_Redirect_HTAccess_Loader' => $baseDir . '/classes/redirect/loaders/redirect-htaccess-loader.php', + 'WPSEO_Redirect_Htaccess_Exporter' => $baseDir . '/classes/redirect/exporters/redirect-htaccess-exporter.php', + 'WPSEO_Redirect_Htaccess_Util' => $baseDir . '/classes/redirect/redirect-htaccess-util.php', + 'WPSEO_Redirect_Import_Exception' => $baseDir . '/classes/redirect/redirect-import-exception.php', + 'WPSEO_Redirect_Importer' => $baseDir . '/classes/redirect/redirect-importer.php', + 'WPSEO_Redirect_Loader' => $baseDir . '/classes/redirect/loaders/redirect-loader-interface.php', + 'WPSEO_Redirect_Manager' => $baseDir . '/classes/redirect/redirect-manager.php', + 'WPSEO_Redirect_Nginx_Exporter' => $baseDir . '/classes/redirect/exporters/redirect-nginx-exporter.php', + 'WPSEO_Redirect_Option' => $baseDir . '/classes/redirect/redirect-option.php', + 'WPSEO_Redirect_Option_Exporter' => $baseDir . '/classes/redirect/exporters/redirect-option-exporter.php', + 'WPSEO_Redirect_Page' => $baseDir . '/classes/redirect/redirect-page.php', + 'WPSEO_Redirect_Page_Presenter' => $baseDir . '/classes/redirect/presenters/redirect-page-presenter.php', + 'WPSEO_Redirect_Presence_Validation' => $baseDir . '/classes/redirect/validation/redirect-presence-validation.php', + 'WPSEO_Redirect_Presenter' => $baseDir . '/classes/redirect/presenters/redirect-presenter-interface.php', + 'WPSEO_Redirect_Quick_Edit_Presenter' => $baseDir . '/classes/redirect/presenters/redirect-quick-edit-presenter.php', + 'WPSEO_Redirect_Redirection_Loader' => $baseDir . '/classes/redirect/loaders/redirect-redirection-loader.php', + 'WPSEO_Redirect_Relative_Origin_Validation' => $baseDir . '/classes/redirect/validation/redirect-relative-origin-validation.php', + 'WPSEO_Redirect_Safe_Redirect_Loader' => $baseDir . '/classes/redirect/loaders/redirect-safe-redirect-loader.php', + 'WPSEO_Redirect_Self_Redirect_Validation' => $baseDir . '/classes/redirect/validation/redirect-self-redirect-validation.php', + 'WPSEO_Redirect_Settings_Presenter' => $baseDir . '/classes/redirect/presenters/redirect-settings-presenter.php', + 'WPSEO_Redirect_Simple_301_Redirect_Loader' => $baseDir . '/classes/redirect/loaders/redirect-simple-301-redirect-loader.php', + 'WPSEO_Redirect_Sitemap_Filter' => $baseDir . '/classes/redirect/redirect-sitemap-filter.php', + 'WPSEO_Redirect_Subdirectory_Validation' => $baseDir . '/classes/redirect/validation/redirect-subdirectory-validation.php', + 'WPSEO_Redirect_Tab_Presenter' => $baseDir . '/classes/redirect/presenters/redirect-tab-presenter.php', + 'WPSEO_Redirect_Table' => $baseDir . '/classes/redirect/redirect-table.php', + 'WPSEO_Redirect_Table_Presenter' => $baseDir . '/classes/redirect/presenters/redirect-table-presenter.php', + 'WPSEO_Redirect_Types' => $baseDir . '/classes/redirect/redirect-types.php', + 'WPSEO_Redirect_Uniqueness_Validation' => $baseDir . '/classes/redirect/validation/redirect-uniqueness-validation.php', + 'WPSEO_Redirect_Upgrade' => $baseDir . '/classes/redirect/redirect-upgrade.php', + 'WPSEO_Redirect_Url_Formatter' => $baseDir . '/classes/redirect/redirect-url-formatter.php', + 'WPSEO_Redirect_Util' => $baseDir . '/classes/redirect/redirect-util.php', + 'WPSEO_Redirect_Validation' => $baseDir . '/classes/redirect/validation/redirect-validation-interface.php', + 'WPSEO_Redirect_Validator' => $baseDir . '/classes/redirect/redirect-validator.php', + 'WPSEO_Social_Previews' => $baseDir . '/classes/social-previews.php', + 'WPSEO_Term_Watcher' => $baseDir . '/classes/term-watcher.php', + 'WPSEO_Upgrade_Manager' => $baseDir . '/classes/upgrade-manager.php', + 'WPSEO_Validation_Error' => $baseDir . '/classes/validation-error.php', + 'WPSEO_Validation_Result' => $baseDir . '/classes/validation-result.php', + 'WPSEO_Validation_Warning' => $baseDir . '/classes/validation-warning.php', + 'WPSEO_Watcher' => $baseDir . '/classes/watcher.php', + 'Yoast\\WHIPv2\\Configuration' => $vendorDir . '/yoast/whip/src/Configuration.php', + 'Yoast\\WHIPv2\\Exceptions\\EmptyProperty' => $vendorDir . '/yoast/whip/src/Exceptions/EmptyProperty.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidOperatorType' => $vendorDir . '/yoast/whip/src/Exceptions/InvalidOperatorType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidType' => $vendorDir . '/yoast/whip/src/Exceptions/InvalidType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidVersionComparisonString' => $vendorDir . '/yoast/whip/src/Exceptions/InvalidVersionComparisonString.php', + 'Yoast\\WHIPv2\\Host' => $vendorDir . '/yoast/whip/src/Host.php', + 'Yoast\\WHIPv2\\Interfaces\\DismissStorage' => $vendorDir . '/yoast/whip/src/Interfaces/DismissStorage.php', + 'Yoast\\WHIPv2\\Interfaces\\Listener' => $vendorDir . '/yoast/whip/src/Interfaces/Listener.php', + 'Yoast\\WHIPv2\\Interfaces\\Message' => $vendorDir . '/yoast/whip/src/Interfaces/Message.php', + 'Yoast\\WHIPv2\\Interfaces\\MessagePresenter' => $vendorDir . '/yoast/whip/src/Interfaces/MessagePresenter.php', + 'Yoast\\WHIPv2\\Interfaces\\Requirement' => $vendorDir . '/yoast/whip/src/Interfaces/Requirement.php', + 'Yoast\\WHIPv2\\Interfaces\\VersionDetector' => $vendorDir . '/yoast/whip/src/Interfaces/VersionDetector.php', + 'Yoast\\WHIPv2\\MessageDismisser' => $vendorDir . '/yoast/whip/src/MessageDismisser.php', + 'Yoast\\WHIPv2\\MessageFormatter' => $vendorDir . '/yoast/whip/src/MessageFormatter.php', + 'Yoast\\WHIPv2\\MessagesManager' => $vendorDir . '/yoast/whip/src/MessagesManager.php', + 'Yoast\\WHIPv2\\Messages\\BasicMessage' => $vendorDir . '/yoast/whip/src/Messages/BasicMessage.php', + 'Yoast\\WHIPv2\\Messages\\HostMessage' => $vendorDir . '/yoast/whip/src/Messages/HostMessage.php', + 'Yoast\\WHIPv2\\Messages\\InvalidVersionRequirementMessage' => $vendorDir . '/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php', + 'Yoast\\WHIPv2\\Messages\\NullMessage' => $vendorDir . '/yoast/whip/src/Messages/NullMessage.php', + 'Yoast\\WHIPv2\\Messages\\UpgradePhpMessage' => $vendorDir . '/yoast/whip/src/Messages/UpgradePhpMessage.php', + 'Yoast\\WHIPv2\\Presenters\\WPMessagePresenter' => $vendorDir . '/yoast/whip/src/Presenters/WPMessagePresenter.php', + 'Yoast\\WHIPv2\\RequirementsChecker' => $vendorDir . '/yoast/whip/src/RequirementsChecker.php', + 'Yoast\\WHIPv2\\VersionRequirement' => $vendorDir . '/yoast/whip/src/VersionRequirement.php', + 'Yoast\\WHIPv2\\WPDismissOption' => $vendorDir . '/yoast/whip/src/WPDismissOption.php', + 'Yoast\\WHIPv2\\WPMessageDismissListener' => $vendorDir . '/yoast/whip/src/WPMessageDismissListener.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPremiumImprovedInternalLinking' => $baseDir . '/src/config/migrations/20190715101200_WpYoastPremiumImprovedInternalLinking.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Siblings_Block' => $baseDir . '/classes/blocks/siblings-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Subpages_Block' => $baseDir . '/classes/blocks/subpages-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\TranslationsPress' => $baseDir . '/src/integrations/third-party/translationspress.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Keyphrases' => $baseDir . '/src/integrations/third-party/wincher-keyphrases.php', + 'Yoast\\WP\\SEO\\Models\\Prominent_Words' => $baseDir . '/src/models/prominent-words.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\AI_Generator_Action' => $baseDir . '/src/actions/ai-generator-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action' => $baseDir . '/src/actions/link-suggestions-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action' => $baseDir . '/src/actions/prominent-words/complete-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action' => $baseDir . '/src/actions/prominent-words/content-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action' => $baseDir . '/src/actions/prominent-words/save-action.php', + 'Yoast\\WP\\SEO\\Premium\\Addon_Installer' => $baseDir . '/src/addon-installer.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Ai_Editor_Conditional' => $baseDir . '/src/conditionals/ai-editor-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Algolia_Enabled_Conditional' => $baseDir . '/src/conditionals/algolia-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Cornerstone_Enabled_Conditional' => $baseDir . '/src/conditionals/cornerstone-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\EDD_Conditional' => $baseDir . '/src/conditionals/edd-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Inclusive_Language_Enabled_Conditional' => $baseDir . '/src/conditionals/inclusive-language-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Term_Overview_Or_Ajax_Conditional' => $baseDir . '/src/conditionals/term-overview-or-ajax-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Yoast_Admin_Or_Introductions_Route_Conditional' => $baseDir . '/src/conditionals/yoast-admin-or-introductions-route-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Config\\Badge_Group_Names' => $baseDir . '/src/config/badge-group-names.php', + 'Yoast\\WP\\SEO\\Premium\\Config\\Migrations\\AddIndexOnIndexableIdAndStem' => $baseDir . '/src/config/migrations/20210827093024_AddIndexOnIndexableIdAndStem.php', + 'Yoast\\WP\\SEO\\Premium\\Database\\Migration_Runner_Premium' => $baseDir . '/src/database/migration-runner-premium.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Forbidden_Property_Mutation_Exception' => $baseDir . '/src/exceptions/forbidden-property-mutation-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Bad_Request_Exception' => $baseDir . '/src/exceptions/remote-request/bad-request-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Forbidden_Exception' => $baseDir . '/src/exceptions/remote-request/forbidden-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Internal_Server_Error_Exception' => $baseDir . '/src/exceptions/remote-request/internal-server-error-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Not_Found_Exception' => $baseDir . '/src/exceptions/remote-request/not-found-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Payment_Required_Exception' => $baseDir . '/src/exceptions/remote-request/payment-required-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Remote_Request_Exception' => $baseDir . '/src/exceptions/remote-request/remote-request-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Request_Timeout_Exception' => $baseDir . '/src/exceptions/remote-request/request-timeout-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Service_Unavailable_Exception' => $baseDir . '/src/exceptions/remote-request/service-unavailable-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Too_Many_Requests_Exception' => $baseDir . '/src/exceptions/remote-request/too-many-requests-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Unauthorized_Exception' => $baseDir . '/src/exceptions/remote-request/unauthorized-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\WP_Request_Exception' => $baseDir . '/src/exceptions/remote-request/wp-request-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Generated\\Cached_Container' => $baseDir . '/src/generated/container.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper' => $baseDir . '/src/helpers/ai-generator-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper' => $baseDir . '/src/helpers/current-page-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper' => $baseDir . '/src/helpers/prominent-words-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper' => $baseDir . '/src/helpers/version-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Index_Now_Key' => $baseDir . '/src/initializers/index-now-key.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Introductions_Initializer' => $baseDir . '/src/initializers/introductions-initializer.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Plugin' => $baseDir . '/src/initializers/plugin.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Redirect_Handler' => $baseDir . '/src/initializers/redirect-handler.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Woocommerce' => $baseDir . '/src/initializers/woocommerce.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Wp_Cli_Initializer' => $baseDir . '/src/initializers/wp-cli-initializer.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Abstract_OpenGraph_Integration' => $baseDir . '/src/integrations/abstract-opengraph-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Consent_Integration' => $baseDir . '/src/integrations/admin/ai-consent-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Generator_Integration' => $baseDir . '/src/integrations/admin/ai-generator-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Column_Integration' => $baseDir . '/src/integrations/admin/cornerstone-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Taxonomy_Column_Integration' => $baseDir . '/src/integrations/admin/cornerstone-taxonomy-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Column_Integration' => $baseDir . '/src/integrations/admin/inclusive-language-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Filter_Integration' => $baseDir . '/src/integrations/admin/inclusive-language-filter-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Taxonomy_Column_Integration' => $baseDir . '/src/integrations/admin/inclusive-language-taxonomy-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Keyword_Integration' => $baseDir . '/src/integrations/admin/keyword-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Metabox_Formatter_Integration' => $baseDir . '/src/integrations/admin/metabox-formatter-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Plugin_Links_Integration' => $baseDir . '/src/integrations/admin/plugin-links-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Indexing_Integration' => $baseDir . '/src/integrations/admin/prominent-words/indexing-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Metabox_Integration' => $baseDir . '/src/integrations/admin/prominent-words/metabox-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Related_Keyphrase_Filter_Integration' => $baseDir . '/src/integrations/admin/related-keyphrase-filter-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Replacement_Variables_Integration' => $baseDir . '/src/integrations/admin/replacement-variables-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Settings_Integration' => $baseDir . '/src/integrations/admin/settings-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Thank_You_Page_Integration' => $baseDir . '/src/integrations/admin/thank-you-page-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Update_Premium_Notification' => $baseDir . '/src/integrations/admin/update-premium-notification.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\User_Profile_Integration' => $baseDir . '/src/integrations/admin/user-profile-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Workouts_Integration' => $baseDir . '/src/integrations/admin/workouts-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Alerts\\Ai_Generator_Tip_Notification' => $baseDir . '/src/integrations/alerts/ai-generator-tip-notification.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Estimated_Reading_Time_Block' => $baseDir . '/src/integrations/blocks/estimated-reading-time-block.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Related_Links_Block' => $baseDir . '/src/integrations/blocks/related-links-block.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Cleanup_Integration' => $baseDir . '/src/integrations/cleanup-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Front_End\\Robots_Txt_Integration' => $baseDir . '/src/integrations/front-end/robots-txt-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Frontend_Inspector' => $baseDir . '/src/integrations/frontend-inspector.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Index_Now_Ping' => $baseDir . '/src/integrations/index-now-ping.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Missing_Indexables_Count_Integration' => $baseDir . '/src/integrations/missing-indexables-count-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Author_Archive' => $baseDir . '/src/integrations/opengraph-author-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Date_Archive' => $baseDir . '/src/integrations/opengraph-date-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_PostType_Archive' => $baseDir . '/src/integrations/opengraph-posttype-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Post_Type' => $baseDir . '/src/integrations/opengraph-post-type.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Term_Archive' => $baseDir . '/src/integrations/opengraph-term-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Organization_Schema_Integration' => $baseDir . '/src/integrations/organization-schema-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Publishing_Principles_Schema_Integration' => $baseDir . '/src/integrations/publishing-principles-schema-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\AI_Generator_Route' => $baseDir . '/src/integrations/routes/ai-generator-route.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\Workouts_Routes_Integration' => $baseDir . '/src/integrations/routes/workouts-routes-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Algolia' => $baseDir . '/src/integrations/third-party/algolia.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\EDD' => $baseDir . '/src/integrations/third-party/edd.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Premium' => $baseDir . '/src/integrations/third-party/elementor-premium.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Preview' => $baseDir . '/src/integrations/third-party/elementor-preview.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Mastodon' => $baseDir . '/src/integrations/third-party/mastodon.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Upgrade_Integration' => $baseDir . '/src/integrations/upgrade-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\User_Profile_Integration' => $baseDir . '/src/integrations/user-profile-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Prominent_Words_Watcher' => $baseDir . '/src/integrations/watchers/prominent-words-watcher.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Stale_Cornerstone_Content_Watcher' => $baseDir . '/src/integrations/watchers/stale-cornerstone-content-watcher.php', + 'Yoast\\WP\\SEO\\Premium\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction' => $baseDir . '/src/introductions/application/ai-generate-titles-and-descriptions-introduction.php', + 'Yoast\\WP\\SEO\\Premium\\Main' => $baseDir . '/src/main.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Icons\\Checkmark_Icon_Presenter' => $baseDir . '/src/presenters/icons/checkmark-icon-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Icons\\Cross_Icon_Presenter' => $baseDir . '/src/presenters/icons/cross-icon-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Icons\\Icon_Presenter' => $baseDir . '/src/presenters/icons/icon-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Mastodon_Link_Presenter' => $baseDir . '/src/presenters/mastodon-link-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository' => $baseDir . '/src/repositories/prominent-words-repository.php', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Link_Suggestions_Route' => $baseDir . '/src/routes/link-suggestions-route.php', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Prominent_Words_Route' => $baseDir . '/src/routes/prominent-words-route.php', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Workouts_Route' => $baseDir . '/src/routes/workouts-route.php', + 'Yoast\\WP\\SEO\\Premium\\Surfaces\\Helpers_Surface' => $baseDir . '/src/surfaces/helpers-surface.php', + 'Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon' => $baseDir . '/src/user-meta/framework/additional-contactmethods/mastodon.php', + 'Yoast\\WP\\SEO\\Premium\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration' => $baseDir . '/src/user-meta/user-interface/additional-contactmethods-integration.php', + 'Yoast\\WP\\SEO\\Premium\\WordPress\\Wrapper' => $baseDir . '/src/wordpress/wrapper.php', +); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_files.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_files.php new file mode 100644 index 00000000..6f7dfd5c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_files.php @@ -0,0 +1,10 @@ + $vendorDir . '/yoast/whip/src/Facades/wordpress.php', +); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_namespaces.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_namespaces.php new file mode 100644 index 00000000..b7fc0125 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/yoast/whip/src'), + 'Composer\\Installers\\' => array($vendorDir . '/composer/installers/src/Composer/Installers'), +); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_real.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_real.php new file mode 100644 index 00000000..ee523b30 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_real.php @@ -0,0 +1,71 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit6a21570359fb0970a74d26d7d2ed77bc::getInitializer($loader)); + } else { + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->setClassMapAuthoritative(true); + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit6a21570359fb0970a74d26d7d2ed77bc::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire6a21570359fb0970a74d26d7d2ed77bc($fileIdentifier, $file); + } + + return $loader; + } +} + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequire6a21570359fb0970a74d26d7d2ed77bc($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_static.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_static.php new file mode 100644 index 00000000..84e74dee --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/autoload_static.php @@ -0,0 +1,278 @@ + __DIR__ . '/..' . '/yoast/whip/src/Facades/wordpress.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'Y' => + array ( + 'Yoast\\WHIPv2\\' => 13, + ), + 'C' => + array ( + 'Composer\\Installers\\' => 20, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Yoast\\WHIPv2\\' => + array ( + 0 => __DIR__ . '/..' . '/yoast/whip/src', + ), + 'Composer\\Installers\\' => + array ( + 0 => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'WPSEO_CLI_Premium_Requirement' => __DIR__ . '/../..' . '/cli/cli-premium-requirement.php', + 'WPSEO_CLI_Redirect_Base_Command' => __DIR__ . '/../..' . '/cli/cli-redirect-base-command.php', + 'WPSEO_CLI_Redirect_Command_Namespace' => __DIR__ . '/../..' . '/cli/cli-redirect-command-namespace.php', + 'WPSEO_CLI_Redirect_Create_Command' => __DIR__ . '/../..' . '/cli/cli-redirect-create-command.php', + 'WPSEO_CLI_Redirect_Delete_Command' => __DIR__ . '/../..' . '/cli/cli-redirect-delete-command.php', + 'WPSEO_CLI_Redirect_Follow_Command' => __DIR__ . '/../..' . '/cli/cli-redirect-follow-command.php', + 'WPSEO_CLI_Redirect_Has_Command' => __DIR__ . '/../..' . '/cli/cli-redirect-has-command.php', + 'WPSEO_CLI_Redirect_List_Command' => __DIR__ . '/../..' . '/cli/cli-redirect-list-command.php', + 'WPSEO_CLI_Redirect_Update_Command' => __DIR__ . '/../..' . '/cli/cli-redirect-update-command.php', + 'WPSEO_Custom_Fields_Plugin' => __DIR__ . '/../..' . '/classes/custom-fields-plugin.php', + 'WPSEO_Executable_Redirect' => __DIR__ . '/../..' . '/classes/redirect/executable-redirect.php', + 'WPSEO_Export_Keywords_CSV' => __DIR__ . '/../..' . '/classes/export/export-keywords-csv.php', + 'WPSEO_Export_Keywords_Post_Presenter' => __DIR__ . '/../..' . '/classes/export/export-keywords-post-presenter.php', + 'WPSEO_Export_Keywords_Post_Query' => __DIR__ . '/../..' . '/classes/export/export-keywords-post-query.php', + 'WPSEO_Export_Keywords_Presenter' => __DIR__ . '/../..' . '/classes/export/export-keywords-presenter-interface.php', + 'WPSEO_Export_Keywords_Query' => __DIR__ . '/../..' . '/classes/export/export-keywords-query-interface.php', + 'WPSEO_Export_Keywords_Term_Presenter' => __DIR__ . '/../..' . '/classes/export/export-keywords-term-presenter.php', + 'WPSEO_Export_Keywords_Term_Query' => __DIR__ . '/../..' . '/classes/export/export-keywords-term-query.php', + 'WPSEO_Metabox_Link_Suggestions' => __DIR__ . '/../..' . '/classes/metabox-link-suggestions.php', + 'WPSEO_Multi_Keyword' => __DIR__ . '/../..' . '/classes/multi-keyword.php', + 'WPSEO_Post_Watcher' => __DIR__ . '/../..' . '/classes/post-watcher.php', + 'WPSEO_Premium' => __DIR__ . '/../..' . '/premium.php', + 'WPSEO_Premium_Asset_JS_L10n' => __DIR__ . '/../..' . '/classes/premium-asset-js-l10n.php', + 'WPSEO_Premium_Assets' => __DIR__ . '/../..' . '/classes/premium-assets.php', + 'WPSEO_Premium_Expose_Shortlinks' => __DIR__ . '/../..' . '/classes/premium-expose-shortlinks.php', + 'WPSEO_Premium_Import_Manager' => __DIR__ . '/../..' . '/classes/premium-import-manager.php', + 'WPSEO_Premium_Javascript_Strings' => __DIR__ . '/../..' . '/classes/premium-javascript-strings.php', + 'WPSEO_Premium_Keyword_Export_Manager' => __DIR__ . '/../..' . '/classes/premium-keyword-export-manager.php', + 'WPSEO_Premium_Metabox' => __DIR__ . '/../..' . '/classes/premium-metabox.php', + 'WPSEO_Premium_Option' => __DIR__ . '/../..' . '/classes/premium-option.php', + 'WPSEO_Premium_Orphaned_Content_Support' => __DIR__ . '/../..' . '/classes/premium-orphaned-content-support.php', + 'WPSEO_Premium_Orphaned_Content_Utils' => __DIR__ . '/../..' . '/classes/premium-orphaned-content-utils.php', + 'WPSEO_Premium_Orphaned_Post_Filter' => __DIR__ . '/../..' . '/classes/premium-orphaned-post-filter.php', + 'WPSEO_Premium_Orphaned_Post_Query' => __DIR__ . '/../..' . '/classes/premium-orphaned-post-query.php', + 'WPSEO_Premium_Prominent_Words_Support' => __DIR__ . '/../..' . '/classes/premium-prominent-words-support.php', + 'WPSEO_Premium_Prominent_Words_Unindexed_Post_Query' => __DIR__ . '/../..' . '/classes/premium-prominent-words-unindexed-post-query.php', + 'WPSEO_Premium_Prominent_Words_Versioning' => __DIR__ . '/../..' . '/classes/premium-prominent-words-versioning.php', + 'WPSEO_Premium_Redirect_EndPoint' => __DIR__ . '/../..' . '/classes/premium-redirect-endpoint.php', + 'WPSEO_Premium_Redirect_Export_Manager' => __DIR__ . '/../..' . '/classes/premium-redirect-export-manager.php', + 'WPSEO_Premium_Redirect_Option' => __DIR__ . '/../..' . '/classes/premium-redirect-option.php', + 'WPSEO_Premium_Redirect_Service' => __DIR__ . '/../..' . '/classes/premium-redirect-service.php', + 'WPSEO_Premium_Redirect_Undo_EndPoint' => __DIR__ . '/../..' . '/classes/redirect-undo-endpoint.php', + 'WPSEO_Premium_Register_Capabilities' => __DIR__ . '/../..' . '/classes/premium-register-capabilities.php', + 'WPSEO_Premium_Stale_Cornerstone_Content_Filter' => __DIR__ . '/../..' . '/classes/premium-stale-cornerstone-content-filter.php', + 'WPSEO_Product_Premium' => __DIR__ . '/../..' . '/classes/product-premium.php', + 'WPSEO_Redirect' => __DIR__ . '/../..' . '/classes/redirect/redirect.php', + 'WPSEO_Redirect_Abstract_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-abstract-loader.php', + 'WPSEO_Redirect_Abstract_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-abstract-validation.php', + 'WPSEO_Redirect_Accessible_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-accessible-validation.php', + 'WPSEO_Redirect_Ajax' => __DIR__ . '/../..' . '/classes/redirect/redirect-ajax.php', + 'WPSEO_Redirect_Apache_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-apache-exporter.php', + 'WPSEO_Redirect_CSV_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-csv-exporter.php', + 'WPSEO_Redirect_CSV_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-csv-loader.php', + 'WPSEO_Redirect_Endpoint_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-endpoint-validation.php', + 'WPSEO_Redirect_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-exporter-interface.php', + 'WPSEO_Redirect_File_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-file-exporter.php', + 'WPSEO_Redirect_File_Util' => __DIR__ . '/../..' . '/classes/redirect/redirect-file-util.php', + 'WPSEO_Redirect_Form_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-form-presenter.php', + 'WPSEO_Redirect_Formats' => __DIR__ . '/../..' . '/classes/redirect/redirect-formats.php', + 'WPSEO_Redirect_Formatter' => __DIR__ . '/../..' . '/classes/redirect/redirect-formatter.php', + 'WPSEO_Redirect_HTAccess_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-htaccess-loader.php', + 'WPSEO_Redirect_Htaccess_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-htaccess-exporter.php', + 'WPSEO_Redirect_Htaccess_Util' => __DIR__ . '/../..' . '/classes/redirect/redirect-htaccess-util.php', + 'WPSEO_Redirect_Import_Exception' => __DIR__ . '/../..' . '/classes/redirect/redirect-import-exception.php', + 'WPSEO_Redirect_Importer' => __DIR__ . '/../..' . '/classes/redirect/redirect-importer.php', + 'WPSEO_Redirect_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-loader-interface.php', + 'WPSEO_Redirect_Manager' => __DIR__ . '/../..' . '/classes/redirect/redirect-manager.php', + 'WPSEO_Redirect_Nginx_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-nginx-exporter.php', + 'WPSEO_Redirect_Option' => __DIR__ . '/../..' . '/classes/redirect/redirect-option.php', + 'WPSEO_Redirect_Option_Exporter' => __DIR__ . '/../..' . '/classes/redirect/exporters/redirect-option-exporter.php', + 'WPSEO_Redirect_Page' => __DIR__ . '/../..' . '/classes/redirect/redirect-page.php', + 'WPSEO_Redirect_Page_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-page-presenter.php', + 'WPSEO_Redirect_Presence_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-presence-validation.php', + 'WPSEO_Redirect_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-presenter-interface.php', + 'WPSEO_Redirect_Quick_Edit_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-quick-edit-presenter.php', + 'WPSEO_Redirect_Redirection_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-redirection-loader.php', + 'WPSEO_Redirect_Relative_Origin_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-relative-origin-validation.php', + 'WPSEO_Redirect_Safe_Redirect_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-safe-redirect-loader.php', + 'WPSEO_Redirect_Self_Redirect_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-self-redirect-validation.php', + 'WPSEO_Redirect_Settings_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-settings-presenter.php', + 'WPSEO_Redirect_Simple_301_Redirect_Loader' => __DIR__ . '/../..' . '/classes/redirect/loaders/redirect-simple-301-redirect-loader.php', + 'WPSEO_Redirect_Sitemap_Filter' => __DIR__ . '/../..' . '/classes/redirect/redirect-sitemap-filter.php', + 'WPSEO_Redirect_Subdirectory_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-subdirectory-validation.php', + 'WPSEO_Redirect_Tab_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-tab-presenter.php', + 'WPSEO_Redirect_Table' => __DIR__ . '/../..' . '/classes/redirect/redirect-table.php', + 'WPSEO_Redirect_Table_Presenter' => __DIR__ . '/../..' . '/classes/redirect/presenters/redirect-table-presenter.php', + 'WPSEO_Redirect_Types' => __DIR__ . '/../..' . '/classes/redirect/redirect-types.php', + 'WPSEO_Redirect_Uniqueness_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-uniqueness-validation.php', + 'WPSEO_Redirect_Upgrade' => __DIR__ . '/../..' . '/classes/redirect/redirect-upgrade.php', + 'WPSEO_Redirect_Url_Formatter' => __DIR__ . '/../..' . '/classes/redirect/redirect-url-formatter.php', + 'WPSEO_Redirect_Util' => __DIR__ . '/../..' . '/classes/redirect/redirect-util.php', + 'WPSEO_Redirect_Validation' => __DIR__ . '/../..' . '/classes/redirect/validation/redirect-validation-interface.php', + 'WPSEO_Redirect_Validator' => __DIR__ . '/../..' . '/classes/redirect/redirect-validator.php', + 'WPSEO_Social_Previews' => __DIR__ . '/../..' . '/classes/social-previews.php', + 'WPSEO_Term_Watcher' => __DIR__ . '/../..' . '/classes/term-watcher.php', + 'WPSEO_Upgrade_Manager' => __DIR__ . '/../..' . '/classes/upgrade-manager.php', + 'WPSEO_Validation_Error' => __DIR__ . '/../..' . '/classes/validation-error.php', + 'WPSEO_Validation_Result' => __DIR__ . '/../..' . '/classes/validation-result.php', + 'WPSEO_Validation_Warning' => __DIR__ . '/../..' . '/classes/validation-warning.php', + 'WPSEO_Watcher' => __DIR__ . '/../..' . '/classes/watcher.php', + 'Yoast\\WHIPv2\\Configuration' => __DIR__ . '/..' . '/yoast/whip/src/Configuration.php', + 'Yoast\\WHIPv2\\Exceptions\\EmptyProperty' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/EmptyProperty.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidOperatorType' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/InvalidOperatorType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidType' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/InvalidType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidVersionComparisonString' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/InvalidVersionComparisonString.php', + 'Yoast\\WHIPv2\\Host' => __DIR__ . '/..' . '/yoast/whip/src/Host.php', + 'Yoast\\WHIPv2\\Interfaces\\DismissStorage' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/DismissStorage.php', + 'Yoast\\WHIPv2\\Interfaces\\Listener' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/Listener.php', + 'Yoast\\WHIPv2\\Interfaces\\Message' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/Message.php', + 'Yoast\\WHIPv2\\Interfaces\\MessagePresenter' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/MessagePresenter.php', + 'Yoast\\WHIPv2\\Interfaces\\Requirement' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/Requirement.php', + 'Yoast\\WHIPv2\\Interfaces\\VersionDetector' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/VersionDetector.php', + 'Yoast\\WHIPv2\\MessageDismisser' => __DIR__ . '/..' . '/yoast/whip/src/MessageDismisser.php', + 'Yoast\\WHIPv2\\MessageFormatter' => __DIR__ . '/..' . '/yoast/whip/src/MessageFormatter.php', + 'Yoast\\WHIPv2\\MessagesManager' => __DIR__ . '/..' . '/yoast/whip/src/MessagesManager.php', + 'Yoast\\WHIPv2\\Messages\\BasicMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/BasicMessage.php', + 'Yoast\\WHIPv2\\Messages\\HostMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/HostMessage.php', + 'Yoast\\WHIPv2\\Messages\\InvalidVersionRequirementMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php', + 'Yoast\\WHIPv2\\Messages\\NullMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/NullMessage.php', + 'Yoast\\WHIPv2\\Messages\\UpgradePhpMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/UpgradePhpMessage.php', + 'Yoast\\WHIPv2\\Presenters\\WPMessagePresenter' => __DIR__ . '/..' . '/yoast/whip/src/Presenters/WPMessagePresenter.php', + 'Yoast\\WHIPv2\\RequirementsChecker' => __DIR__ . '/..' . '/yoast/whip/src/RequirementsChecker.php', + 'Yoast\\WHIPv2\\VersionRequirement' => __DIR__ . '/..' . '/yoast/whip/src/VersionRequirement.php', + 'Yoast\\WHIPv2\\WPDismissOption' => __DIR__ . '/..' . '/yoast/whip/src/WPDismissOption.php', + 'Yoast\\WHIPv2\\WPMessageDismissListener' => __DIR__ . '/..' . '/yoast/whip/src/WPMessageDismissListener.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPremiumImprovedInternalLinking' => __DIR__ . '/../..' . '/src/config/migrations/20190715101200_WpYoastPremiumImprovedInternalLinking.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Siblings_Block' => __DIR__ . '/../..' . '/classes/blocks/siblings-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Subpages_Block' => __DIR__ . '/../..' . '/classes/blocks/subpages-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\TranslationsPress' => __DIR__ . '/../..' . '/src/integrations/third-party/translationspress.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Keyphrases' => __DIR__ . '/../..' . '/src/integrations/third-party/wincher-keyphrases.php', + 'Yoast\\WP\\SEO\\Models\\Prominent_Words' => __DIR__ . '/../..' . '/src/models/prominent-words.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\AI_Generator_Action' => __DIR__ . '/../..' . '/src/actions/ai-generator-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Link_Suggestions_Action' => __DIR__ . '/../..' . '/src/actions/link-suggestions-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Complete_Action' => __DIR__ . '/../..' . '/src/actions/prominent-words/complete-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Content_Action' => __DIR__ . '/../..' . '/src/actions/prominent-words/content-action.php', + 'Yoast\\WP\\SEO\\Premium\\Actions\\Prominent_Words\\Save_Action' => __DIR__ . '/../..' . '/src/actions/prominent-words/save-action.php', + 'Yoast\\WP\\SEO\\Premium\\Addon_Installer' => __DIR__ . '/../..' . '/src/addon-installer.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Ai_Editor_Conditional' => __DIR__ . '/../..' . '/src/conditionals/ai-editor-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Algolia_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/algolia-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Cornerstone_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/cornerstone-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\EDD_Conditional' => __DIR__ . '/../..' . '/src/conditionals/edd-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Inclusive_Language_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/inclusive-language-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Term_Overview_Or_Ajax_Conditional' => __DIR__ . '/../..' . '/src/conditionals/term-overview-or-ajax-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Conditionals\\Yoast_Admin_Or_Introductions_Route_Conditional' => __DIR__ . '/../..' . '/src/conditionals/yoast-admin-or-introductions-route-conditional.php', + 'Yoast\\WP\\SEO\\Premium\\Config\\Badge_Group_Names' => __DIR__ . '/../..' . '/src/config/badge-group-names.php', + 'Yoast\\WP\\SEO\\Premium\\Config\\Migrations\\AddIndexOnIndexableIdAndStem' => __DIR__ . '/../..' . '/src/config/migrations/20210827093024_AddIndexOnIndexableIdAndStem.php', + 'Yoast\\WP\\SEO\\Premium\\Database\\Migration_Runner_Premium' => __DIR__ . '/../..' . '/src/database/migration-runner-premium.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Forbidden_Property_Mutation_Exception' => __DIR__ . '/../..' . '/src/exceptions/forbidden-property-mutation-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Bad_Request_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/bad-request-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Forbidden_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/forbidden-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Internal_Server_Error_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/internal-server-error-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Not_Found_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/not-found-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Payment_Required_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/payment-required-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Remote_Request_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/remote-request-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Request_Timeout_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/request-timeout-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Service_Unavailable_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/service-unavailable-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Too_Many_Requests_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/too-many-requests-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\Unauthorized_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/unauthorized-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Exceptions\\Remote_Request\\WP_Request_Exception' => __DIR__ . '/../..' . '/src/exceptions/remote-request/wp-request-exception.php', + 'Yoast\\WP\\SEO\\Premium\\Generated\\Cached_Container' => __DIR__ . '/../..' . '/src/generated/container.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\AI_Generator_Helper' => __DIR__ . '/../..' . '/src/helpers/ai-generator-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Current_Page_Helper' => __DIR__ . '/../..' . '/src/helpers/current-page-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Prominent_Words_Helper' => __DIR__ . '/../..' . '/src/helpers/prominent-words-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Helpers\\Version_Helper' => __DIR__ . '/../..' . '/src/helpers/version-helper.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Index_Now_Key' => __DIR__ . '/../..' . '/src/initializers/index-now-key.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Introductions_Initializer' => __DIR__ . '/../..' . '/src/initializers/introductions-initializer.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Plugin' => __DIR__ . '/../..' . '/src/initializers/plugin.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Redirect_Handler' => __DIR__ . '/../..' . '/src/initializers/redirect-handler.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Woocommerce' => __DIR__ . '/../..' . '/src/initializers/woocommerce.php', + 'Yoast\\WP\\SEO\\Premium\\Initializers\\Wp_Cli_Initializer' => __DIR__ . '/../..' . '/src/initializers/wp-cli-initializer.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Abstract_OpenGraph_Integration' => __DIR__ . '/../..' . '/src/integrations/abstract-opengraph-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Consent_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/ai-consent-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Ai_Generator_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/ai-generator-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Column_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/cornerstone-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Cornerstone_Taxonomy_Column_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/cornerstone-taxonomy-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Column_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/inclusive-language-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Filter_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/inclusive-language-filter-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Inclusive_Language_Taxonomy_Column_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/inclusive-language-taxonomy-column-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Keyword_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/keyword-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Metabox_Formatter_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/metabox-formatter-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Plugin_Links_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/plugin-links-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Indexing_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/prominent-words/indexing-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Prominent_Words\\Metabox_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/prominent-words/metabox-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Related_Keyphrase_Filter_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/related-keyphrase-filter-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Replacement_Variables_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/replacement-variables-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Settings_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/settings-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Thank_You_Page_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/thank-you-page-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Update_Premium_Notification' => __DIR__ . '/../..' . '/src/integrations/admin/update-premium-notification.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\User_Profile_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/user-profile-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Admin\\Workouts_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/workouts-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Alerts\\Ai_Generator_Tip_Notification' => __DIR__ . '/../..' . '/src/integrations/alerts/ai-generator-tip-notification.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Estimated_Reading_Time_Block' => __DIR__ . '/../..' . '/src/integrations/blocks/estimated-reading-time-block.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Blocks\\Related_Links_Block' => __DIR__ . '/../..' . '/src/integrations/blocks/related-links-block.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Cleanup_Integration' => __DIR__ . '/../..' . '/src/integrations/cleanup-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Front_End\\Robots_Txt_Integration' => __DIR__ . '/../..' . '/src/integrations/front-end/robots-txt-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Frontend_Inspector' => __DIR__ . '/../..' . '/src/integrations/frontend-inspector.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Index_Now_Ping' => __DIR__ . '/../..' . '/src/integrations/index-now-ping.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Missing_Indexables_Count_Integration' => __DIR__ . '/../..' . '/src/integrations/missing-indexables-count-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Author_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-author-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Date_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-date-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_PostType_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-posttype-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Post_Type' => __DIR__ . '/../..' . '/src/integrations/opengraph-post-type.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\OpenGraph_Term_Archive' => __DIR__ . '/../..' . '/src/integrations/opengraph-term-archive.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Organization_Schema_Integration' => __DIR__ . '/../..' . '/src/integrations/organization-schema-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Publishing_Principles_Schema_Integration' => __DIR__ . '/../..' . '/src/integrations/publishing-principles-schema-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\AI_Generator_Route' => __DIR__ . '/../..' . '/src/integrations/routes/ai-generator-route.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Routes\\Workouts_Routes_Integration' => __DIR__ . '/../..' . '/src/integrations/routes/workouts-routes-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Algolia' => __DIR__ . '/../..' . '/src/integrations/third-party/algolia.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\EDD' => __DIR__ . '/../..' . '/src/integrations/third-party/edd.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Premium' => __DIR__ . '/../..' . '/src/integrations/third-party/elementor-premium.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Elementor_Preview' => __DIR__ . '/../..' . '/src/integrations/third-party/elementor-preview.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Third_Party\\Mastodon' => __DIR__ . '/../..' . '/src/integrations/third-party/mastodon.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Upgrade_Integration' => __DIR__ . '/../..' . '/src/integrations/upgrade-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\User_Profile_Integration' => __DIR__ . '/../..' . '/src/integrations/user-profile-integration.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Prominent_Words_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/prominent-words-watcher.php', + 'Yoast\\WP\\SEO\\Premium\\Integrations\\Watchers\\Stale_Cornerstone_Content_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/stale-cornerstone-content-watcher.php', + 'Yoast\\WP\\SEO\\Premium\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction' => __DIR__ . '/../..' . '/src/introductions/application/ai-generate-titles-and-descriptions-introduction.php', + 'Yoast\\WP\\SEO\\Premium\\Main' => __DIR__ . '/../..' . '/src/main.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Icons\\Checkmark_Icon_Presenter' => __DIR__ . '/../..' . '/src/presenters/icons/checkmark-icon-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Icons\\Cross_Icon_Presenter' => __DIR__ . '/../..' . '/src/presenters/icons/cross-icon-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Icons\\Icon_Presenter' => __DIR__ . '/../..' . '/src/presenters/icons/icon-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Presenters\\Mastodon_Link_Presenter' => __DIR__ . '/../..' . '/src/presenters/mastodon-link-presenter.php', + 'Yoast\\WP\\SEO\\Premium\\Repositories\\Prominent_Words_Repository' => __DIR__ . '/../..' . '/src/repositories/prominent-words-repository.php', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Link_Suggestions_Route' => __DIR__ . '/../..' . '/src/routes/link-suggestions-route.php', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Prominent_Words_Route' => __DIR__ . '/../..' . '/src/routes/prominent-words-route.php', + 'Yoast\\WP\\SEO\\Premium\\Routes\\Workouts_Route' => __DIR__ . '/../..' . '/src/routes/workouts-route.php', + 'Yoast\\WP\\SEO\\Premium\\Surfaces\\Helpers_Surface' => __DIR__ . '/../..' . '/src/surfaces/helpers-surface.php', + 'Yoast\\WP\\SEO\\Premium\\User_Meta\\Framework\\Additional_Contactmethods\\Mastodon' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/mastodon.php', + 'Yoast\\WP\\SEO\\Premium\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration' => __DIR__ . '/../..' . '/src/user-meta/user-interface/additional-contactmethods-integration.php', + 'Yoast\\WP\\SEO\\Premium\\WordPress\\Wrapper' => __DIR__ . '/../..' . '/src/wordpress/wrapper.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit6a21570359fb0970a74d26d7d2ed77bc::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit6a21570359fb0970a74d26d7d2ed77bc::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit6a21570359fb0970a74d26d7d2ed77bc::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/installed.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/installed.php new file mode 100644 index 00000000..33ffc1b6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/installed.php @@ -0,0 +1,605 @@ + array( + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => '871a7e723bab02fbf59e0969adc85cd94d6f0203', + 'name' => 'yoast/wordpress-seo-premium', + 'dev' => true, + ), + 'versions' => array( + 'antecedent/patchwork' => array( + 'pretty_version' => '2.1.28', + 'version' => '2.1.28.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../antecedent/patchwork', + 'aliases' => array(), + 'reference' => '6b30aff81ebadf0f2feb9268d3e08385cebcc08d', + 'dev_requirement' => true, + ), + 'automattic/vipwpcs' => array( + 'pretty_version' => '3.0.0', + 'version' => '3.0.0.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../automattic/vipwpcs', + 'aliases' => array(), + 'reference' => '1b8960ebff9ea3eb482258a906ece4d1ee1e25fd', + 'dev_requirement' => true, + ), + 'brain/monkey' => array( + 'pretty_version' => '2.6.1', + 'version' => '2.6.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../brain/monkey', + 'aliases' => array(), + 'reference' => 'a31c84515bb0d49be9310f52ef1733980ea8ffbb', + 'dev_requirement' => true, + ), + 'composer/installers' => array( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'type' => 'composer-plugin', + 'install_path' => __DIR__ . '/./installers', + 'aliases' => array(), + 'reference' => 'c29dc4b93137acb82734f672c37e029dfbd95b35', + 'dev_requirement' => false, + ), + 'cordoval/hamcrest-php' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'davedevelopment/hamcrest-php' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'dealerdirect/phpcodesniffer-composer-installer' => array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'composer-plugin', + 'install_path' => __DIR__ . '/../dealerdirect/phpcodesniffer-composer-installer', + 'aliases' => array(), + 'reference' => '4be43904336affa5c2f70744a348312336afd0da', + 'dev_requirement' => true, + ), + 'doctrine/instantiator' => array( + 'pretty_version' => '1.5.0', + 'version' => '1.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/instantiator', + 'aliases' => array(), + 'reference' => '0a0fa9780f5d4e507415a065172d26a98d02047b', + 'dev_requirement' => true, + ), + 'eftec/bladeone' => array( + 'pretty_version' => '3.52', + 'version' => '3.52.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../eftec/bladeone', + 'aliases' => array(), + 'reference' => 'a19bf66917de0b29836983db87a455a4f6e32148', + 'dev_requirement' => true, + ), + 'gettext/gettext' => array( + 'pretty_version' => 'v4.8.11', + 'version' => '4.8.11.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../gettext/gettext', + 'aliases' => array(), + 'reference' => 'b632aaf5e4579d0b2ae8bc61785e238bff4c5156', + 'dev_requirement' => true, + ), + 'gettext/languages' => array( + 'pretty_version' => '2.10.0', + 'version' => '2.10.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../gettext/languages', + 'aliases' => array(), + 'reference' => '4d61d67fe83a2ad85959fe6133d6d9ba7dddd1ab', + 'dev_requirement' => true, + ), + 'grogy/php-parallel-lint' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'hamcrest/hamcrest-php' => array( + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../hamcrest/hamcrest-php', + 'aliases' => array(), + 'reference' => '8c3d0a3f6af734494ad8f6fbbee0ba92422859f3', + 'dev_requirement' => true, + ), + 'jakub-onderka/php-console-color' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'jakub-onderka/php-console-highlighter' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'jakub-onderka/php-parallel-lint' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'kodova/hamcrest-php' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'mck89/peast' => array( + 'pretty_version' => 'v1.16.2', + 'version' => '1.16.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../mck89/peast', + 'aliases' => array(), + 'reference' => '2791b08ffcc1862fe18eef85675da3aa58c406fe', + 'dev_requirement' => true, + ), + 'mockery/mockery' => array( + 'pretty_version' => '1.3.6', + 'version' => '1.3.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../mockery/mockery', + 'aliases' => array(), + 'reference' => 'dc206df4fa314a50bbb81cf72239a305c5bbd5c0', + 'dev_requirement' => true, + ), + 'mustache/mustache' => array( + 'pretty_version' => 'v2.14.2', + 'version' => '2.14.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../mustache/mustache', + 'aliases' => array(), + 'reference' => 'e62b7c3849d22ec55f3ec425507bf7968193a6cb', + 'dev_requirement' => true, + ), + 'myclabs/deep-copy' => array( + 'pretty_version' => '1.11.1', + 'version' => '1.11.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../myclabs/deep-copy', + 'aliases' => array(), + 'reference' => '7284c22080590fb39f2ffa3e9057f10a4ddd0e0c', + 'dev_requirement' => true, + ), + 'phar-io/manifest' => array( + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phar-io/manifest', + 'aliases' => array(), + 'reference' => '54750ef60c58e43759730615a392c31c80e23176', + 'dev_requirement' => true, + ), + 'phar-io/version' => array( + 'pretty_version' => '3.2.1', + 'version' => '3.2.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phar-io/version', + 'aliases' => array(), + 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74', + 'dev_requirement' => true, + ), + 'php-parallel-lint/php-console-color' => array( + 'pretty_version' => 'v1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-parallel-lint/php-console-color', + 'aliases' => array(), + 'reference' => '7adfefd530aa2d7570ba87100a99e2483a543b88', + 'dev_requirement' => true, + ), + 'php-parallel-lint/php-console-highlighter' => array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-parallel-lint/php-console-highlighter', + 'aliases' => array(), + 'reference' => '5b4803384d3303cf8e84141039ef56c8a123138d', + 'dev_requirement' => true, + ), + 'php-parallel-lint/php-parallel-lint' => array( + 'pretty_version' => 'v1.4.0', + 'version' => '1.4.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-parallel-lint/php-parallel-lint', + 'aliases' => array(), + 'reference' => '6db563514f27e19595a19f45a4bf757b6401194e', + 'dev_requirement' => true, + ), + 'phpcompatibility/php-compatibility' => array( + 'pretty_version' => '9.3.5', + 'version' => '9.3.5.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../phpcompatibility/php-compatibility', + 'aliases' => array(), + 'reference' => '9fb324479acf6f39452e0655d2429cc0d3914243', + 'dev_requirement' => true, + ), + 'phpcompatibility/phpcompatibility-paragonie' => array( + 'pretty_version' => '1.3.2', + 'version' => '1.3.2.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../phpcompatibility/phpcompatibility-paragonie', + 'aliases' => array(), + 'reference' => 'bba5a9dfec7fcfbd679cfaf611d86b4d3759da26', + 'dev_requirement' => true, + ), + 'phpcompatibility/phpcompatibility-wp' => array( + 'pretty_version' => '2.1.4', + 'version' => '2.1.4.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../phpcompatibility/phpcompatibility-wp', + 'aliases' => array(), + 'reference' => 'b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5', + 'dev_requirement' => true, + ), + 'phpcsstandards/phpcsextra' => array( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../phpcsstandards/phpcsextra', + 'aliases' => array(), + 'reference' => '11d387c6642b6e4acaf0bd9bf5203b8cca1ec489', + 'dev_requirement' => true, + ), + 'phpcsstandards/phpcsutils' => array( + 'pretty_version' => '1.0.10', + 'version' => '1.0.10.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../phpcsstandards/phpcsutils', + 'aliases' => array(), + 'reference' => '51609a5b89f928e0c463d6df80eb38eff1eaf544', + 'dev_requirement' => true, + ), + 'phpstan/phpdoc-parser' => array( + 'pretty_version' => '1.28.0', + 'version' => '1.28.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', + 'aliases' => array(), + 'reference' => 'cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb', + 'dev_requirement' => true, + ), + 'phpunit/php-code-coverage' => array( + 'pretty_version' => '7.0.17', + 'version' => '7.0.17.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-code-coverage', + 'aliases' => array(), + 'reference' => '40a4ed114a4aea5afd6df8d0f0c9cd3033097f66', + 'dev_requirement' => true, + ), + 'phpunit/php-file-iterator' => array( + 'pretty_version' => '2.0.6', + 'version' => '2.0.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-file-iterator', + 'aliases' => array(), + 'reference' => '69deeb8664f611f156a924154985fbd4911eb36b', + 'dev_requirement' => true, + ), + 'phpunit/php-text-template' => array( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-text-template', + 'aliases' => array(), + 'reference' => '31f8b717e51d9a2afca6c9f046f5d69fc27c8686', + 'dev_requirement' => true, + ), + 'phpunit/php-timer' => array( + 'pretty_version' => '2.1.4', + 'version' => '2.1.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-timer', + 'aliases' => array(), + 'reference' => 'a691211e94ff39a34811abd521c31bd5b305b0bb', + 'dev_requirement' => true, + ), + 'phpunit/php-token-stream' => array( + 'pretty_version' => '3.1.3', + 'version' => '3.1.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-token-stream', + 'aliases' => array(), + 'reference' => '9c1da83261628cb24b6a6df371b6e312b3954768', + 'dev_requirement' => true, + ), + 'phpunit/phpunit' => array( + 'pretty_version' => '8.5.38', + 'version' => '8.5.38.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/phpunit', + 'aliases' => array(), + 'reference' => '1ecad678646c817a29e55a32c930f3601c3f5a8c', + 'dev_requirement' => true, + ), + 'sebastian/code-unit-reverse-lookup' => array( + 'pretty_version' => '1.0.3', + 'version' => '1.0.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup', + 'aliases' => array(), + 'reference' => '92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54', + 'dev_requirement' => true, + ), + 'sebastian/comparator' => array( + 'pretty_version' => '3.0.5', + 'version' => '3.0.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/comparator', + 'aliases' => array(), + 'reference' => '1dc7ceb4a24aede938c7af2a9ed1de09609ca770', + 'dev_requirement' => true, + ), + 'sebastian/diff' => array( + 'pretty_version' => '3.0.6', + 'version' => '3.0.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/diff', + 'aliases' => array(), + 'reference' => '98ff311ca519c3aa73ccd3de053bdb377171d7b6', + 'dev_requirement' => true, + ), + 'sebastian/environment' => array( + 'pretty_version' => '4.2.5', + 'version' => '4.2.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/environment', + 'aliases' => array(), + 'reference' => '56932f6049a0482853056ffd617c91ffcc754205', + 'dev_requirement' => true, + ), + 'sebastian/exporter' => array( + 'pretty_version' => '3.1.6', + 'version' => '3.1.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/exporter', + 'aliases' => array(), + 'reference' => '1939bc8fd1d39adcfa88c5b35335910869214c56', + 'dev_requirement' => true, + ), + 'sebastian/global-state' => array( + 'pretty_version' => '3.0.5', + 'version' => '3.0.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/global-state', + 'aliases' => array(), + 'reference' => '91c7c47047a971f02de57ed6f040087ef110c5d9', + 'dev_requirement' => true, + ), + 'sebastian/object-enumerator' => array( + 'pretty_version' => '3.0.5', + 'version' => '3.0.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/object-enumerator', + 'aliases' => array(), + 'reference' => 'ac5b293dba925751b808e02923399fb44ff0d541', + 'dev_requirement' => true, + ), + 'sebastian/object-reflector' => array( + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/object-reflector', + 'aliases' => array(), + 'reference' => '1d439c229e61f244ff1f211e5c99737f90c67def', + 'dev_requirement' => true, + ), + 'sebastian/recursion-context' => array( + 'pretty_version' => '3.0.2', + 'version' => '3.0.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/recursion-context', + 'aliases' => array(), + 'reference' => '9bfd3c6f1f08c026f542032dfb42813544f7d64c', + 'dev_requirement' => true, + ), + 'sebastian/resource-operations' => array( + 'pretty_version' => '2.0.3', + 'version' => '2.0.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/resource-operations', + 'aliases' => array(), + 'reference' => '72a7f7674d053d548003b16ff5a106e7e0e06eee', + 'dev_requirement' => true, + ), + 'sebastian/type' => array( + 'pretty_version' => '1.1.5', + 'version' => '1.1.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/type', + 'aliases' => array(), + 'reference' => '18f071c3a29892b037d35e6b20ddf3ea39b42874', + 'dev_requirement' => true, + ), + 'sebastian/version' => array( + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/version', + 'aliases' => array(), + 'reference' => '99732be0ddb3361e16ad77b68ba41efc8e979019', + 'dev_requirement' => true, + ), + 'sirbrillig/phpcs-variable-analysis' => array( + 'pretty_version' => 'v2.11.17', + 'version' => '2.11.17.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../sirbrillig/phpcs-variable-analysis', + 'aliases' => array(), + 'reference' => '3b71162a6bf0cde2bff1752e40a1788d8273d049', + 'dev_requirement' => true, + ), + 'slevomat/coding-standard' => array( + 'pretty_version' => '8.15.0', + 'version' => '8.15.0.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../slevomat/coding-standard', + 'aliases' => array(), + 'reference' => '7d1d957421618a3803b593ec31ace470177d7817', + 'dev_requirement' => true, + ), + 'squizlabs/php_codesniffer' => array( + 'pretty_version' => '3.9.1', + 'version' => '3.9.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../squizlabs/php_codesniffer', + 'aliases' => array(), + 'reference' => '267a4405fff1d9c847134db3a3c92f1ab7f77909', + 'dev_requirement' => true, + ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v2.5.3', + 'version' => '2.5.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'reference' => '80d075412b557d41002320b96a096ca65aa2c98d', + 'dev_requirement' => true, + ), + 'symfony/finder' => array( + 'pretty_version' => 'v5.4.35', + 'version' => '5.4.35.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/finder', + 'aliases' => array(), + 'reference' => 'abe6d6f77d9465fed3cd2d029b29d03b56b56435', + 'dev_requirement' => true, + ), + 'symfony/polyfill-php80' => array( + 'pretty_version' => 'v1.29.0', + 'version' => '1.29.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php80', + 'aliases' => array(), + 'reference' => '87b68208d5c1188808dd7839ee1e6c8ec3b02f1b', + 'dev_requirement' => true, + ), + 'theseer/tokenizer' => array( + 'pretty_version' => '1.2.3', + 'version' => '1.2.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../theseer/tokenizer', + 'aliases' => array(), + 'reference' => '737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2', + 'dev_requirement' => true, + ), + 'wp-cli/i18n-command' => array( + 'pretty_version' => '2.6.1', + 'version' => '2.6.1.0', + 'type' => 'wp-cli-package', + 'install_path' => __DIR__ . '/../wp-cli/i18n-command', + 'aliases' => array(), + 'reference' => '7538d684d4f06b0e10c8a0166ce4e6d9e1687aa1', + 'dev_requirement' => true, + ), + 'wp-cli/mustangostang-spyc' => array( + 'pretty_version' => '0.6.3', + 'version' => '0.6.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../wp-cli/mustangostang-spyc', + 'aliases' => array(), + 'reference' => '6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7', + 'dev_requirement' => true, + ), + 'wp-cli/php-cli-tools' => array( + 'pretty_version' => 'v0.11.22', + 'version' => '0.11.22.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../wp-cli/php-cli-tools', + 'aliases' => array(), + 'reference' => 'a6bb94664ca36d0962f9c2ff25591c315a550c51', + 'dev_requirement' => true, + ), + 'wp-cli/wp-cli' => array( + 'pretty_version' => 'v2.10.0', + 'version' => '2.10.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../wp-cli/wp-cli', + 'aliases' => array(), + 'reference' => 'a339dca576df73c31af4b4d8054efc2dab9a0685', + 'dev_requirement' => true, + ), + 'wp-coding-standards/wpcs' => array( + 'pretty_version' => '3.1.0', + 'version' => '3.1.0.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../wp-coding-standards/wpcs', + 'aliases' => array(), + 'reference' => '9333efcbff231f10dfd9c56bb7b65818b4733ca7', + 'dev_requirement' => true, + ), + 'yoast/phpunit-polyfills' => array( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../yoast/phpunit-polyfills', + 'aliases' => array(), + 'reference' => 'a0f7d708794a738f328d7b6c94380fd1d6c40446', + 'dev_requirement' => true, + ), + 'yoast/whip' => array( + 'pretty_version' => '2.0.0', + 'version' => '2.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../yoast/whip', + 'aliases' => array(), + 'reference' => '5cfd9c3b433774548ec231fe896d5e85d17ed0d1', + 'dev_requirement' => false, + ), + 'yoast/wordpress-seo' => array( + 'pretty_version' => '22.9', + 'version' => '22.9.0.0', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../yoast/wordpress-seo', + 'aliases' => array(), + 'reference' => 'bc74e92e863eda4a7a74a70a783331a7a9bd4a6f', + 'dev_requirement' => false, + ), + 'yoast/wordpress-seo-premium' => array( + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => '871a7e723bab02fbf59e0969adc85cd94d6f0203', + 'dev_requirement' => false, + ), + 'yoast/wp-test-utils' => array( + 'pretty_version' => '1.2.0', + 'version' => '1.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../yoast/wp-test-utils', + 'aliases' => array(), + 'reference' => '2e0f62e0281e4859707c5f13b7da1422aa1c8f7b', + 'dev_requirement' => true, + ), + 'yoast/yoastcs' => array( + 'pretty_version' => '3.1.0', + 'version' => '3.1.0.0', + 'type' => 'phpcodesniffer-standard', + 'install_path' => __DIR__ . '/../yoast/yoastcs', + 'aliases' => array(), + 'reference' => '533b74e4ce234fb6ff1b02c87f84f227b5a95554', + 'dev_requirement' => true, + ), + ), +); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/platform_check.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/platform_check.php new file mode 100644 index 00000000..a8b98d5c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70205)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/LICENSE b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/LICENSE new file mode 100644 index 00000000..95846861 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Yoast + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/default.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/default.php new file mode 100644 index 00000000..0a94ef66 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/default.php @@ -0,0 +1,10 @@ + PHP_VERSION, +); diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/version.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/version.php new file mode 100644 index 00000000..553e4299 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Configs/version.php @@ -0,0 +1,8 @@ + + */ + private $configuration; + + /** + * Configuration constructor. + * + * @param array $configuration The configuration to use. + * + * @throws InvalidType When the $configuration parameter is not of the expected type. + */ + public function __construct( $configuration = array() ) { + if ( ! \is_array( $configuration ) ) { + throw new InvalidType( 'Configuration', $configuration, 'array' ); + } + + $this->configuration = $configuration; + } + + /** + * Retrieves the configured version of a particular requirement. + * + * @param Requirement $requirement The requirement to check. + * + * @return string|int The version of the passed requirement that was detected as a string. + * If the requirement does not exist, this returns int -1. + */ + public function configuredVersion( Requirement $requirement ) { + if ( ! $this->hasRequirementConfigured( $requirement ) ) { + return -1; + } + + return $this->configuration[ $requirement->component() ]; + } + + /** + * Determines whether the passed requirement is present in the configuration. + * + * @param Requirement $requirement The requirement to check. + * + * @return bool Whether or not the requirement is present in the configuration. + */ + public function hasRequirementConfigured( Requirement $requirement ) { + return \array_key_exists( $requirement->component(), $this->configuration ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/EmptyProperty.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/EmptyProperty.php new file mode 100644 index 00000000..844372b1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/EmptyProperty.php @@ -0,0 +1,20 @@ +', '<=', '>=' ) ) { + parent::__construct( + \sprintf( + 'Invalid operator of %s used. Please use one of the following operators: %s', + $value, + \implode( ', ', $validOperators ) + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/InvalidType.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/InvalidType.php new file mode 100644 index 00000000..6ed1dafb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Exceptions/InvalidType.php @@ -0,0 +1,22 @@ +=5.3. Passed version comparison string: %s', + $value + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Facades/wordpress.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Facades/wordpress.php new file mode 100644 index 00000000..dbb1df9b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Facades/wordpress.php @@ -0,0 +1,60 @@ + $requirements The requirements to check. + * + * @return void + */ + function whip_wp_check_versions( $requirements ) { + // Only show for admin users. + if ( ! is_array( $requirements ) ) { + return; + } + + $config = include __DIR__ . '/../Configs/default.php'; + $checker = new RequirementsChecker( $config ); + + foreach ( $requirements as $component => $versionComparison ) { + $checker->addRequirement( VersionRequirement::fromCompareString( $component, $versionComparison ) ); + } + + $checker->check(); + + if ( ! $checker->hasMessages() ) { + return; + } + + $dismissThreshold = ( WEEK_IN_SECONDS * 4 ); + $dismissMessage = __( 'Remind me again in 4 weeks.', 'default' ); + + $dismisser = new MessageDismisser( time(), $dismissThreshold, new WPDismissOption() ); + + $presenter = new WPMessagePresenter( $checker->getMostRecentMessage(), $dismisser, $dismissMessage ); + + // Prevent duplicate notices across multiple implementing plugins. + if ( ! has_action( 'whip_register_hooks' ) ) { + add_action( 'whip_register_hooks', array( $presenter, 'registerHooks' ) ); + } + + /** + * Fires during hooks registration for the message presenter. + * + * @param WPMessagePresenter $presenter Message presenter instance. + */ + do_action( 'whip_register_hooks', $presenter ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Host.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Host.php new file mode 100644 index 00000000..fce2013b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Host.php @@ -0,0 +1,107 @@ +currentTime = $currentTime; + $this->threshold = $threshold; + $this->storage = $storage; + } + + /** + * Saves the version number to the storage to indicate the message as being dismissed. + * + * @return void + */ + public function dismiss() { + $this->storage->set( $this->currentTime ); + } + + /** + * Checks if the current time is lower than the stored time extended by the threshold. + * + * @return bool True when current time is lower than stored value + threshold. + */ + public function isDismissed() { + return ( $this->currentTime <= ( $this->storage->get() + $this->threshold ) ); + } + + /** + * Checks the nonce. + * + * @param string $nonce The nonce to check. + * @param string $action The action to check. + * + * @return bool True when the nonce is valid. + */ + public function verifyNonce( $nonce, $action ) { + return (bool) \wp_verify_nonce( $nonce, $action ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessageFormatter.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessageFormatter.php new file mode 100644 index 00000000..b94d9531 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessageFormatter.php @@ -0,0 +1,42 @@ +' . $toWrap . ''; + } + + /** + * Wraps a piece of text in HTML p tags. + * + * @param string $toWrap The text to wrap. + * + * @return string The wrapped text. + */ + public static function paragraph( $toWrap ) { + return '

      ' . $toWrap . '

      '; + } + + /** + * Wraps a piece of text in HTML p and strong tags. + * + * @param string $toWrap The text to wrap. + * + * @return string The wrapped text. + */ + public static function strongParagraph( $toWrap ) { + return self::paragraph( self::strong( $toWrap ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/BasicMessage.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/BasicMessage.php new file mode 100644 index 00000000..41205b02 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/BasicMessage.php @@ -0,0 +1,60 @@ +validateParameters( $body ); + + $this->body = $body; + } + + /** + * Retrieves the message body. + * + * @return string Message. + */ + public function body() { + return $this->body; + } + + /** + * Validates the parameters passed to the constructor of this class. + * + * @param string $body Message body. + * + * @return void + * + * @throws EmptyProperty When the $body parameter is empty. + * @throws InvalidType When the $body parameter is not of the expected type. + */ + private function validateParameters( $body ) { + if ( empty( $body ) ) { + throw new EmptyProperty( 'Message body' ); + } + + if ( ! \is_string( $body ) ) { + throw new InvalidType( 'Message body', $body, 'string' ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/HostMessage.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/HostMessage.php new file mode 100644 index 00000000..90ad2906 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/HostMessage.php @@ -0,0 +1,62 @@ +textdomain = $textdomain; + $this->messageKey = $messageKey; + } + + /** + * Retrieves the message body. + * + * @return string The message body. + */ + public function body() { + $message = array(); + + $message[] = MessageFormatter::strong( $this->title() ) . '
      '; + $message[] = MessageFormatter::paragraph( Host::message( $this->messageKey ) ); + + return \implode( "\n", $message ); + } + + /** + * Renders the message title. + * + * @return string The message title. + */ + public function title() { + /* translators: 1: name. */ + return \sprintf( \__( 'A message from %1$s', $this->textdomain ), Host::name() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php new file mode 100644 index 00000000..f3e49595 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php @@ -0,0 +1,53 @@ +requirement = $requirement; + $this->detected = $detected; + } + + /** + * Retrieves the message body. + * + * @return string Message. + */ + public function body() { + return \sprintf( + 'Invalid version detected for %s. Found %s but expected %s.', + $this->requirement->component(), + $this->detected, + $this->requirement->version() + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/NullMessage.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/NullMessage.php new file mode 100644 index 00000000..bbb364c7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Messages/NullMessage.php @@ -0,0 +1,20 @@ +textdomain = $textdomain; + } + + /** + * Retrieves the message body to display. + * + * @return string The message to display. + */ + public function body() { + $textdomain = $this->textdomain; + + $message = array(); + + $message[] = MessageFormatter::strongParagraph( \__( 'Your site could be faster and more secure with a newer PHP version.', $textdomain ) ) . '
      '; + $message[] = MessageFormatter::paragraph( \__( 'Hey, we\'ve noticed that you\'re running an outdated version of PHP. PHP is the programming language that WordPress and all its plugins and themes are built on. The version that is currently used for your site is no longer supported. Newer versions of PHP are both faster and more secure. In fact, your version of PHP no longer receives security updates, which is why we\'re sending you to this notice.', $textdomain ) ); + $message[] = MessageFormatter::paragraph( \__( 'Hosts have the ability to update your PHP version, but sometimes they don\'t dare to do that because they\'re afraid they\'ll break your site.', $textdomain ) ); + $message[] = MessageFormatter::strongParagraph( \__( 'To which version should I update?', $textdomain ) ) . '
      '; + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: link open tag; 2: link close tag. */ + \__( 'You should update your PHP version to either 5.6 or to 7.0 or 7.1. On a normal WordPress site, switching to PHP 5.6 should never cause issues. We would however actually recommend you switch to PHP7. There are some plugins that are not ready for PHP7 though, so do some testing first. We have an article on how to test whether that\'s an option for you %1$shere%2$s. PHP7 is much faster than PHP 5.6. It\'s also the only PHP version still in active development and therefore the better option for your site in the long run.', $textdomain ), + '', + '' + ) + ); + + if ( Host::name() !== '' ) { + $hostMessage = new HostMessage( 'WHIP_MESSAGE_FROM_HOST_ABOUT_PHP', $textdomain ); + $message[] = $hostMessage->body(); + } + + $hostingPageUrl = Host::hostingPageUrl(); + + $message[] = MessageFormatter::strongParagraph( \__( 'Can\'t update? Ask your host!', $textdomain ) ) . '
      '; + + if ( \function_exists( 'apply_filters' ) && \apply_filters( Host::HOSTING_PAGE_FILTER_KEY, false ) ) { + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: link open tag; 2: link close tag; 3: link open tag. */ + \__( 'If you cannot upgrade your PHP version yourself, you can send an email to your host. We have %1$sexamples here%2$s. If they don\'t want to upgrade your PHP version, we would suggest you switch hosts. Have a look at one of the recommended %3$sWordPress hosting partners%2$s.', $textdomain ), + '', + '', + \sprintf( '', \esc_url( $hostingPageUrl ) ) + ) + ); + } + else { + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: link open tag; 2: link close tag; 3: link open tag. */ + \__( 'If you cannot upgrade your PHP version yourself, you can send an email to your host. We have %1$sexamples here%2$s. If they don\'t want to upgrade your PHP version, we would suggest you switch hosts. Have a look at one of our recommended %3$sWordPress hosting partners%2$s, they\'ve all been vetted by the Yoast support team and provide all the features a modern host should provide.', $textdomain ), + '', + '', + \sprintf( '', \esc_url( $hostingPageUrl ) ) + ) + ); + } + + return \implode( "\n", $message ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessagesManager.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessagesManager.php new file mode 100644 index 00000000..eee0abbe --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/MessagesManager.php @@ -0,0 +1,91 @@ + 0; + } + + /** + * Lists the messages that are currently available. + * + * @return array The messages that are currently set. + */ + public function listMessages() { + return $GLOBALS['whip_messages']; + } + + /** + * Deletes all messages. + * + * @return void + */ + public function deleteMessages() { + unset( $GLOBALS['whip_messages'] ); + } + + /** + * Gets the latest message. + * + * @return Message The message. Returns a NullMessage if none is found. + */ + public function getLatestMessage() { + if ( ! $this->hasMessages() ) { + return new NullMessage(); + } + + $messages = $this->sortByVersion( $this->listMessages() ); + + $this->deleteMessages(); + + return \array_pop( $messages ); + } + + /** + * Sorts the list of messages based on the version number. + * + * @param array $messages The list of messages to sort. + * + * @return array The sorted list of messages. + */ + private function sortByVersion( array $messages ) { + \uksort( $messages, 'version_compare' ); + + return $messages; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php new file mode 100644 index 00000000..aa071f66 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php @@ -0,0 +1,112 @@ +message = $message; + $this->dismisser = $dismisser; + $this->dismissMessage = $dismissMessage; + } + + /** + * Registers hooks to WordPress. + * + * This is a separate function so you can control when the hooks are registered. + * + * @return void + */ + public function registerHooks() { + \add_action( 'admin_notices', array( $this, 'renderMessage' ) ); + } + + /** + * Renders the messages present in the global to notices. + * + * @return void + */ + public function renderMessage() { + $dismissListener = new WPMessageDismissListener( $this->dismisser ); + $dismissListener->listen(); + + if ( $this->dismisser->isDismissed() ) { + return; + } + + $dismissButton = \sprintf( + '%1$s', + \esc_html( $this->dismissMessage ), + \esc_url( $dismissListener->getDismissURL() ) + ); + + // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- output correctly escaped directly above and in the `kses()` method. + \printf( + '

      %1$s

      %2$s

      ', + $this->kses( $this->message->body() ), + $dismissButton + ); + // phpcs:enable + } + + /** + * Removes content from the message that we don't want to show. + * + * @param string $message The message to clean. + * + * @return string The cleaned message. + */ + public function kses( $message ) { + return \wp_kses( + $message, + array( + 'a' => array( + 'href' => true, + 'target' => true, + ), + 'strong' => true, + 'p' => true, + 'ul' => true, + 'li' => true, + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/RequirementsChecker.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/RequirementsChecker.php new file mode 100644 index 00000000..9dbc8909 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/RequirementsChecker.php @@ -0,0 +1,181 @@ + + */ + private $requirements; + + /** + * The configuration to check. + * + * @var Configuration + */ + private $configuration; + + /** + * Message Manager. + * + * @var MessagesManager + */ + private $messageManager; + + /** + * The text domain to use for translations. + * + * @var string + */ + private $textdomain; + + /** + * RequirementsChecker constructor. + * + * @param array $configuration The configuration to check. + * @param string $textdomain The text domain to use for translations. + * + * @throws InvalidType When the $configuration parameter is not of the expected type. + */ + public function __construct( $configuration = array(), $textdomain = 'default' ) { + $this->requirements = array(); + $this->configuration = new Configuration( $configuration ); + $this->messageManager = new MessagesManager(); + $this->textdomain = $textdomain; + } + + /** + * Adds a requirement to the list of requirements if it doesn't already exist. + * + * @param Requirement $requirement The requirement to add. + * + * @return void + */ + public function addRequirement( Requirement $requirement ) { + // Only allow unique entries to ensure we're not checking specific combinations multiple times. + if ( $this->requirementExistsForComponent( $requirement->component() ) ) { + return; + } + + $this->requirements[] = $requirement; + } + + /** + * Determines whether or not there are requirements available. + * + * @return bool Whether or not there are requirements. + */ + public function hasRequirements() { + return $this->totalRequirements() > 0; + } + + /** + * Gets the total amount of requirements. + * + * @return int The total amount of requirements. + */ + public function totalRequirements() { + return \count( $this->requirements ); + } + + /** + * Determines whether or not a requirement exists for a particular component. + * + * @param string $component The component to check for. + * + * @return bool Whether or not the component has a requirement defined. + */ + public function requirementExistsForComponent( $component ) { + foreach ( $this->requirements as $requirement ) { + if ( $requirement->component() === $component ) { + return true; + } + } + + return false; + } + + /** + * Determines whether a requirement has been fulfilled. + * + * @param Requirement $requirement The requirement to check. + * + * @return bool Whether or not the requirement is fulfilled. + */ + private function requirementIsFulfilled( Requirement $requirement ) { + $availableVersion = $this->configuration->configuredVersion( $requirement ); + $requiredVersion = $requirement->version(); + + if ( \in_array( $requirement->operator(), array( '=', '==', '===' ), true ) ) { + return \version_compare( $availableVersion, $requiredVersion, '>=' ); + } + + return \version_compare( $availableVersion, $requiredVersion, $requirement->operator() ); + } + + /** + * Checks if all requirements are fulfilled and adds a message to the message manager if necessary. + * + * @return void + */ + public function check() { + foreach ( $this->requirements as $requirement ) { + // Match against config. + $requirementFulfilled = $this->requirementIsFulfilled( $requirement ); + + if ( $requirementFulfilled ) { + continue; + } + + $this->addMissingRequirementMessage( $requirement ); + } + } + + /** + * Adds a message to the message manager for requirements that cannot be fulfilled. + * + * @param Requirement $requirement The requirement that cannot be fulfilled. + * + * @return void + */ + private function addMissingRequirementMessage( Requirement $requirement ) { + switch ( $requirement->component() ) { + case 'php': + $this->messageManager->addMessage( new UpgradePhpMessage( $this->textdomain ) ); + break; + default: + $this->messageManager->addMessage( new InvalidVersionRequirementMessage( $requirement, $this->configuration->configuredVersion( $requirement ) ) ); + break; + } + } + + /** + * Determines whether or not there are messages available. + * + * @return bool Whether or not there are messages to display. + */ + public function hasMessages() { + return $this->messageManager->hasMessages(); + } + + /** + * Gets the most recent message from the message manager. + * + * @return Message The latest message. + */ + public function getMostRecentMessage() { + return $this->messageManager->getLatestMessage(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/VersionRequirement.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/VersionRequirement.php new file mode 100644 index 00000000..f29c6418 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/VersionRequirement.php @@ -0,0 +1,153 @@ +validateParameters( $component, $version, $operator ); + + $this->component = $component; + $this->version = $version; + $this->operator = $operator; + } + + /** + * Retrieves the component name defined for the requirement. + * + * @return string The component name. + */ + public function component() { + return $this->component; + } + + /** + * Gets the components version defined for the requirement. + * + * @return string + */ + public function version() { + return $this->version; + } + + /** + * Gets the operator to use when comparing version numbers. + * + * @return string The comparison operator. + */ + public function operator() { + return $this->operator; + } + + /** + * Creates a new version requirement from a comparison string. + * + * @param string $component The component for this version requirement. + * @param string $comparisonString The comparison string for this version requirement. + * + * @return VersionRequirement The parsed version requirement. + * + * @throws InvalidVersionComparisonString When an invalid version comparison string is passed. + */ + public static function fromCompareString( $component, $comparisonString ) { + + $matcher = '` + ( + >=? # Matches >= and >. + | + <=? # Matches <= and <. + ) + ([^>=<\s]+) # Matches anything except >, <, =, and whitespace. + `x'; + + if ( ! \preg_match( $matcher, $comparisonString, $match ) ) { + throw new InvalidVersionComparisonString( $comparisonString ); + } + + $version = $match[2]; + $operator = $match[1]; + + return new VersionRequirement( $component, $version, $operator ); + } + + /** + * Validates the parameters passed to the requirement. + * + * @param string $component The component name. + * @param string $version The component version. + * @param string $operator The operator to use when comparing version. + * + * @return void + * + * @throws EmptyProperty When any of the parameters is empty. + * @throws InvalidOperatorType When the $operator parameter is invalid. + * @throws InvalidType When any of the parameters is not of the expected type. + */ + private function validateParameters( $component, $version, $operator ) { + if ( empty( $component ) ) { + throw new EmptyProperty( 'Component' ); + } + + if ( ! \is_string( $component ) ) { + throw new InvalidType( 'Component', $component, 'string' ); + } + + if ( empty( $version ) ) { + throw new EmptyProperty( 'Version' ); + } + + if ( ! \is_string( $version ) ) { + throw new InvalidType( 'Version', $version, 'string' ); + } + + if ( empty( $operator ) ) { + throw new EmptyProperty( 'Operator' ); + } + + if ( ! \is_string( $operator ) ) { + throw new InvalidType( 'Operator', $operator, 'string' ); + } + + $validOperators = array( '=', '==', '===', '<', '>', '<=', '>=' ); + if ( ! \in_array( $operator, $validOperators, true ) ) { + throw new InvalidOperatorType( $operator, $validOperators ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPDismissOption.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPDismissOption.php new file mode 100644 index 00000000..aecd9dff --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPDismissOption.php @@ -0,0 +1,45 @@ +optionName, $dismissedValue ); + } + + /** + * Returns the value of the whip_dismissed option. + * + * @return int Returns the value of the option or an empty string when not set. + */ + public function get() { + $dismissedOption = \get_option( $this->optionName ); + if ( ! $dismissedOption ) { + return 0; + } + + return (int) $dismissedOption; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPMessageDismissListener.php b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPMessageDismissListener.php new file mode 100644 index 00000000..b3d0bda6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/vendor/yoast/whip/src/WPMessageDismissListener.php @@ -0,0 +1,66 @@ +dismisser = $dismisser; + } + + /** + * Listens to a GET request to fetch the required attributes. + * + * @return void + */ + public function listen() { + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified in the dismisser. + $action = ( isset( $_GET['action'] ) && \is_string( $_GET['action'] ) ) ? \sanitize_text_field( \wp_unslash( $_GET['action'] ) ) : null; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified in the dismisser. + $nonce = ( isset( $_GET['nonce'] ) && \is_string( $_GET['nonce'] ) ) ? \sanitize_text_field( \wp_unslash( $_GET['nonce'] ) ) : ''; + + if ( $action === self::ACTION_NAME && $this->dismisser->verifyNonce( $nonce, self::ACTION_NAME ) ) { + $this->dismisser->dismiss(); + } + } + + /** + * Creates an url for dismissing the notice. + * + * @return string The url for dismissing the message. + */ + public function getDismissURL() { + return \sprintf( + \admin_url( 'index.php?action=%1$s&nonce=%2$s' ), + self::ACTION_NAME, + \wp_create_nonce( self::ACTION_NAME ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo-premium/wp-seo-premium.php b/wp/wp-content/plugins/wordpress-seo-premium/wp-seo-premium.php new file mode 100644 index 00000000..6341ac35 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo-premium/wp-seo-premium.php @@ -0,0 +1,80 @@ +. + */ + +use Yoast\WP\SEO\Premium\Addon_Installer; + +if ( ! defined( 'WPSEO_PREMIUM_FILE' ) ) { + define( 'WPSEO_PREMIUM_FILE', __FILE__ ); +} + +if ( ! defined( 'WPSEO_PREMIUM_PATH' ) ) { + define( 'WPSEO_PREMIUM_PATH', plugin_dir_path( WPSEO_PREMIUM_FILE ) ); +} + +if ( ! defined( 'WPSEO_PREMIUM_BASENAME' ) ) { + define( 'WPSEO_PREMIUM_BASENAME', plugin_basename( WPSEO_PREMIUM_FILE ) ); +} + +/** + * {@internal Nobody should be able to overrule the real version number as this can cause + * serious issues with the options, so no if ( ! defined() ).}} + */ +define( 'WPSEO_PREMIUM_VERSION', '22.9' ); + +// Initialize Premium autoloader. +$wpseo_premium_dir = WPSEO_PREMIUM_PATH; +$yoast_seo_premium_autoload_file = $wpseo_premium_dir . 'vendor/autoload.php'; + +if ( is_readable( $yoast_seo_premium_autoload_file ) ) { + require $yoast_seo_premium_autoload_file; +} + +// This class has to exist outside of the container as the container requires Yoast SEO to exist. +$wpseo_addon_installer = new Addon_Installer( __DIR__ ); +$wpseo_addon_installer->install_yoast_seo_from_repository(); + +// Load the container. +if ( ! wp_installing() ) { + require_once __DIR__ . '/src/functions.php'; + YoastSEOPremium(); +} + +register_activation_hook( WPSEO_PREMIUM_FILE, [ 'WPSEO_Premium', 'install' ] ); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/admin-settings-changed-listener.php b/wp/wp-content/plugins/wordpress-seo/admin/admin-settings-changed-listener.php new file mode 100644 index 00000000..712c5445 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/admin-settings-changed-listener.php @@ -0,0 +1,89 @@ +helpers->current_page->is_yoast_seo_page() ) { + return; + } + + // Variable name is the same as the global that is set by get_settings_errors. + $wp_settings_errors = get_settings_errors(); + + foreach ( $wp_settings_errors as $key => $wp_settings_error ) { + if ( ! $this->is_settings_updated_notification( $wp_settings_error ) ) { + continue; + } + + self::$settings_saved = true; + unset( $wp_settings_errors[ $key ] ); + // phpcs:ignore WordPress.WP.GlobalVariablesOverride -- Overwrite the global with the list excluding the Changed saved message. + $GLOBALS['wp_settings_errors'] = $wp_settings_errors; + break; + } + } + + /** + * Checks whether the settings notification is a settings_updated notification. + * + * @param array $wp_settings_error The settings object. + * + * @return bool Whether this is a settings updated settings notification. + */ + public function is_settings_updated_notification( $wp_settings_error ) { + return ! empty( $wp_settings_error['code'] ) && $wp_settings_error['code'] === 'settings_updated'; + } + + /** + * Get whether the settings have successfully been saved + * + * @return bool Whether the settings have successfully been saved. + */ + public function have_settings_been_saved() { + return self::$settings_saved; + } + + /** + * Renders a success message if the Yoast SEO settings have been saved. + * + * @return void + */ + public function show_success_message() { + if ( $this->have_settings_been_saved() ) { + echo '

      ', + esc_html__( 'Settings saved.', 'wordpress-seo' ), + '

      '; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/ajax.php b/wp/wp-content/plugins/wordpress-seo/admin/ajax.php new file mode 100644 index 00000000..34a6f886 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/ajax.php @@ -0,0 +1,419 @@ + 'success', + 'post_id' => $post_id, + "new_{$return_key}" => $sanitized_new_meta_value, + "original_{$return_key}" => $orig_meta_value, + ]; + + $the_post = get_post( $post_id ); + if ( empty( $the_post ) ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = __( 'Post doesn\'t exist.', 'wordpress-seo' ); + + return $upsert_results; + } + + $post_type_object = get_post_type_object( $the_post->post_type ); + if ( ! $post_type_object ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = sprintf( + /* translators: %s expands to post type. */ + __( 'Post has an invalid Content Type: %s.', 'wordpress-seo' ), + $the_post->post_type + ); + + return $upsert_results; + } + + if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = sprintf( + /* translators: %s expands to post type name. */ + __( 'You can\'t edit %s.', 'wordpress-seo' ), + $post_type_object->label + ); + + return $upsert_results; + } + + if ( ! current_user_can( $post_type_object->cap->edit_others_posts ) && (int) $the_post->post_author !== get_current_user_id() ) { + + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = sprintf( + /* translators: %s expands to the name of a post type (plural). */ + __( 'You can\'t edit %s that aren\'t yours.', 'wordpress-seo' ), + $post_type_object->label + ); + + return $upsert_results; + } + + if ( $sanitized_new_meta_value === $orig_meta_value && $sanitized_new_meta_value !== $new_meta_value ) { + $upsert_results['status'] = 'failure'; + $upsert_results['results'] = __( 'You have used HTML in your value which is not allowed.', 'wordpress-seo' ); + + return $upsert_results; + } + + $res = update_post_meta( $post_id, $meta_key, $sanitized_new_meta_value ); + + $upsert_results['status'] = ( $res !== false ) ? 'success' : 'failure'; + $upsert_results['results'] = $res; + + return $upsert_results; +} + +/** + * Save all titles sent from the Bulk Editor. + * + * @return void + */ +function wpseo_save_all_titles() { + wpseo_save_all( 'title' ); +} + +add_action( 'wp_ajax_wpseo_save_all_titles', 'wpseo_save_all_titles' ); + +/** + * Save all description sent from the Bulk Editor. + * + * @return void + */ +function wpseo_save_all_descriptions() { + wpseo_save_all( 'metadesc' ); +} + +add_action( 'wp_ajax_wpseo_save_all_descriptions', 'wpseo_save_all_descriptions' ); + +/** + * Utility function to save values. + * + * @param string $what Type of item so save. + * + * @return void + */ +function wpseo_save_all( $what ) { + check_ajax_referer( 'wpseo-bulk-editor' ); + + $results = []; + if ( ! isset( $_POST['items'], $_POST['existingItems'] ) ) { + wpseo_ajax_json_echo_die( $results ); + } + + $new_values = array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], wp_unslash( (array) $_POST['items'] ) ); + $original_values = array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], wp_unslash( (array) $_POST['existingItems'] ) ); + + foreach ( $new_values as $post_id => $new_value ) { + $original_value = $original_values[ $post_id ]; + $results[] = wpseo_upsert_new( $what, $post_id, $new_value, $original_value ); + } + + wpseo_ajax_json_echo_die( $results ); +} + +/** + * Insert a new value. + * + * @param string $what Item type (such as title). + * @param int $post_id Post ID. + * @param string $new_value New value to record. + * @param string $original Original value. + * + * @return string + */ +function wpseo_upsert_new( $what, $post_id, $new_value, $original ) { + $meta_key = WPSEO_Meta::$meta_prefix . $what; + + return wpseo_upsert_meta( $post_id, $new_value, $original, $meta_key, $what ); +} + +/** + * Retrieves the post ids where the keyword is used before as well as the types of those posts. + * + * @return void + */ +function ajax_get_keyword_usage_and_post_types() { + check_ajax_referer( 'wpseo-keyword-usage-and-post-types', 'nonce' ); + + if ( ! isset( $_POST['post_id'], $_POST['keyword'] ) || ! is_string( $_POST['keyword'] ) ) { + die( '-1' ); + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We are casting to an integer. + $post_id = (int) wp_unslash( $_POST['post_id'] ); + + if ( $post_id === 0 || ! current_user_can( 'edit_post', $post_id ) ) { + die( '-1' ); + } + + $keyword = sanitize_text_field( wp_unslash( $_POST['keyword'] ) ); + + $post_ids = WPSEO_Meta::keyword_usage( $keyword, $post_id ); + + if ( ! empty( $post_ids ) ) { + $post_types = WPSEO_Meta::post_types_for_ids( $post_ids ); + } + else { + $post_types = []; + } + + $return_object = [ + 'keyword_usage' => $post_ids, + 'post_types' => $post_types, + ]; + + wp_die( + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. + WPSEO_Utils::format_json_encode( $return_object ) + ); +} + +add_action( 'wp_ajax_get_focus_keyword_usage_and_post_types', 'ajax_get_keyword_usage_and_post_types' ); + + +/** + * Retrieves the keyword for the keyword doubles of the termpages. + * + * @return void + */ +function ajax_get_term_keyword_usage() { + check_ajax_referer( 'wpseo-keyword-usage', 'nonce' ); + + if ( ! isset( $_POST['post_id'], $_POST['keyword'], $_POST['taxonomy'] ) || ! is_string( $_POST['keyword'] ) || ! is_string( $_POST['taxonomy'] ) ) { + wp_die( -1 ); + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are casting the unsafe input to an integer. + $post_id = (int) wp_unslash( $_POST['post_id'] ); + + if ( $post_id === 0 ) { + wp_die( -1 ); + } + + $keyword = sanitize_text_field( wp_unslash( $_POST['keyword'] ) ); + $taxonomy_name = sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ); + + $taxonomy = get_taxonomy( $taxonomy_name ); + + if ( ! $taxonomy ) { + wp_die( 0 ); + } + + if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) { + wp_die( -1 ); + } + + $usage = WPSEO_Taxonomy_Meta::get_keyword_usage( $keyword, $post_id, $taxonomy_name ); + + // Normalize the result so it is the same as the post keyword usage AJAX request. + $usage = $usage[ $keyword ]; + + wp_die( + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. + WPSEO_Utils::format_json_encode( $usage ) + ); +} + +add_action( 'wp_ajax_get_term_keyword_usage', 'ajax_get_term_keyword_usage' ); + +/** + * Registers hooks for all AJAX integrations. + * + * @return void + */ +function wpseo_register_ajax_integrations() { + $integrations = [ new Yoast_Network_Admin() ]; + + foreach ( $integrations as $integration ) { + $integration->register_ajax_hooks(); + } +} + +wpseo_register_ajax_integrations(); + +new WPSEO_Shortcode_Filter(); + +new WPSEO_Taxonomy_Columns(); + +/* ********************* DEPRECATED FUNCTIONS ********************* */ + +/** + * Retrieves the keyword for the keyword doubles. + * + * @return void + */ +function ajax_get_keyword_usage() { + _deprecated_function( __METHOD__, 'WPSEO 20.4' ); + check_ajax_referer( 'wpseo-keyword-usage', 'nonce' ); + + if ( ! isset( $_POST['post_id'], $_POST['keyword'] ) || ! is_string( $_POST['keyword'] ) ) { + die( '-1' ); + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We are casting to an integer. + $post_id = (int) wp_unslash( $_POST['post_id'] ); + + if ( $post_id === 0 || ! current_user_can( 'edit_post', $post_id ) ) { + die( '-1' ); + } + + $keyword = sanitize_text_field( wp_unslash( $_POST['keyword'] ) ); + + wp_die( + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. + WPSEO_Utils::format_json_encode( WPSEO_Meta::keyword_usage( $keyword, $post_id ) ) + ); +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php b/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php new file mode 100644 index 00000000..c9f5f3db --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-shortcode-filter.php @@ -0,0 +1,54 @@ + $shortcode, + 'output' => do_shortcode( $shortcode ), + ]; + } + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: WPSEO_Utils::format_json_encode is considered safe. + wp_die( WPSEO_Utils::format_json_encode( $parsed_shortcodes ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php b/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php new file mode 100644 index 00000000..c847ba62 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-dismissable-notice.php @@ -0,0 +1,95 @@ +notice_name = $notice_name; + $this->notice_type = $notice_type; + + add_action( 'wp_ajax_wpseo_dismiss_' . $notice_name, [ $this, 'dismiss_notice' ] ); + } + + /** + * Handles the dismiss notice request. + * + * @return void + */ + public function dismiss_notice() { + check_ajax_referer( 'wpseo-dismiss-' . $this->notice_name ); + + $this->save_dismissed(); + + wp_die( 'true' ); + } + + /** + * Storing the dismissed value in the database. The target location is based on the set notification type. + * + * @return void + */ + private function save_dismissed() { + if ( $this->notice_type === self::FOR_SITE ) { + update_option( 'wpseo_dismiss_' . $this->notice_name, 1 ); + + return; + } + + if ( $this->notice_type === self::FOR_NETWORK ) { + update_site_option( 'wpseo_dismiss_' . $this->notice_name, 1 ); + + return; + } + + update_user_meta( get_current_user_id(), 'wpseo_dismiss_' . $this->notice_name, 1 ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php b/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php new file mode 100644 index 00000000..9778c5e7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/ajax/class-yoast-plugin-conflict-ajax.php @@ -0,0 +1,130 @@ + sanitize_text_field( $conflict_data['section'] ), + 'plugins' => sanitize_text_field( $conflict_data['plugins'] ), + ]; + + $this->dismissed_conflicts = $this->get_dismissed_conflicts( $conflict_data['section'] ); + + $this->compare_plugins( $conflict_data['plugins'] ); + + $this->save_dismissed_conflicts( $conflict_data['section'] ); + + wp_die( 'true' ); + } + + /** + * Getting the user option from the database. + * + * @return bool|array + */ + private function get_dismissed_option() { + return get_user_meta( get_current_user_id(), $this->option_name, true ); + } + + /** + * Getting the dismissed conflicts from the database + * + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + * + * @return array + */ + private function get_dismissed_conflicts( $plugin_section ) { + $dismissed_conflicts = $this->get_dismissed_option(); + + if ( is_array( $dismissed_conflicts ) && array_key_exists( $plugin_section, $dismissed_conflicts ) ) { + return $dismissed_conflicts[ $plugin_section ]; + } + + return []; + } + + /** + * Storing the conflicting plugins as an user option in the database. + * + * @param string $plugin_section Plugin conflict type (such as Open Graph or sitemap). + * + * @return void + */ + private function save_dismissed_conflicts( $plugin_section ) { + $dismissed_conflicts = $this->get_dismissed_option(); + + $dismissed_conflicts[ $plugin_section ] = $this->dismissed_conflicts; + + update_user_meta( get_current_user_id(), $this->option_name, $dismissed_conflicts ); + } + + /** + * Loop through the plugins to compare them with the already stored dismissed plugin conflicts. + * + * @param array $posted_plugins Plugin set to check. + * + * @return void + */ + public function compare_plugins( array $posted_plugins ) { + foreach ( $posted_plugins as $posted_plugin ) { + $this->compare_plugin( $posted_plugin ); + } + } + + /** + * Check if plugin is already dismissed, if not store it in the array that will be saved later. + * + * @param string $posted_plugin Plugin to check against dismissed conflicts. + * + * @return void + */ + private function compare_plugin( $posted_plugin ) { + if ( ! in_array( $posted_plugin, $this->dismissed_conflicts, true ) ) { + $this->dismissed_conflicts[] = $posted_plugin; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-abstract-capability-manager.php b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-abstract-capability-manager.php new file mode 100644 index 00000000..8f290d81 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-abstract-capability-manager.php @@ -0,0 +1,91 @@ +capabilities[ $capability ] ) ) { + $this->capabilities[ $capability ] = $roles; + + return; + } + + // Combine configurations. + $this->capabilities[ $capability ] = array_merge( $roles, $this->capabilities[ $capability ] ); + + // Remove doubles. + $this->capabilities[ $capability ] = array_unique( $this->capabilities[ $capability ] ); + } + + /** + * Returns the list of registered capabilitities. + * + * @return string[] Registered capabilities. + */ + public function get_capabilities() { + return array_keys( $this->capabilities ); + } + + /** + * Returns a list of WP_Role roles. + * + * The string array of role names are converted to actual WP_Role objects. + * These are needed to be able to use the API on them. + * + * @param array $roles Roles to retrieve the objects for. + * + * @return WP_Role[] List of WP_Role objects. + */ + protected function get_wp_roles( array $roles ) { + $wp_roles = array_map( 'get_role', $roles ); + + return array_filter( $wp_roles ); + } + + /** + * Filter capability roles. + * + * @param string $capability Capability to filter roles for. + * @param array $roles List of roles which can be filtered. + * + * @return array Filtered list of roles for the capability. + */ + protected function filter_roles( $capability, array $roles ) { + /** + * Filter: Allow changing roles that a capability is added to. + * + * @param array $roles The default roles to be filtered. + */ + $filtered = apply_filters( $capability . '_roles', $roles ); + + // Make sure we have the expected type. + if ( ! is_array( $filtered ) ) { + return []; + } + + return $filtered; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-factory.php b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-factory.php new file mode 100644 index 00000000..e265bee1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-factory.php @@ -0,0 +1,35 @@ +manager = $manager; + } + + /** + * Registers the hooks. + * + * @return void + */ + public function register_hooks() { + add_filter( 'members_get_capabilities', [ $this, 'get_capabilities' ] ); + add_action( 'members_register_cap_groups', [ $this, 'action_members_register_cap_group' ] ); + + add_filter( 'ure_capabilities_groups_tree', [ $this, 'filter_ure_capabilities_groups_tree' ] ); + add_filter( 'ure_custom_capability_groups', [ $this, 'filter_ure_custom_capability_groups' ], 10, 2 ); + } + + /** + * Get the Yoast SEO capabilities. + * Optionally append them to an existing array. + * + * @param array $caps Optional existing capability list. + * @return array + */ + public function get_capabilities( array $caps = [] ) { + if ( ! did_action( 'wpseo_register_capabilities' ) ) { + do_action( 'wpseo_register_capabilities' ); + } + + return array_merge( $caps, $this->manager->get_capabilities() ); + } + + /** + * Add capabilities to its own group in the Members plugin. + * + * @see members_register_cap_group() + * + * @return void + */ + public function action_members_register_cap_group() { + if ( ! function_exists( 'members_register_cap_group' ) ) { + return; + } + + // Register the yoast group. + $args = [ + 'label' => esc_html__( 'Yoast SEO', 'wordpress-seo' ), + 'caps' => $this->get_capabilities(), + 'icon' => 'dashicons-admin-plugins', + 'diff_added' => true, + ]; + members_register_cap_group( 'wordpress-seo', $args ); + } + + /** + * Adds Yoast SEO capability group in the User Role Editor plugin. + * + * @see URE_Capabilities_Groups_Manager::get_groups_tree() + * + * @param array $groups Current groups. + * + * @return array Filtered list of capabilty groups. + */ + public function filter_ure_capabilities_groups_tree( $groups = [] ) { + $groups = (array) $groups; + + $groups['wordpress-seo'] = [ + 'caption' => 'Yoast SEO', + 'parent' => 'custom', + 'level' => 3, + ]; + + return $groups; + } + + /** + * Adds capabilities to the Yoast SEO group in the User Role Editor plugin. + * + * @see URE_Capabilities_Groups_Manager::get_cap_groups() + * + * @param array $groups Current capability groups. + * @param string $cap_id Capability identifier. + * + * @return array List of filtered groups. + */ + public function filter_ure_custom_capability_groups( $groups = [], $cap_id = '' ) { + if ( in_array( $cap_id, $this->get_capabilities(), true ) ) { + $groups = (array) $groups; + $groups[] = 'wordpress-seo'; + } + + return $groups; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-vip.php b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-vip.php new file mode 100644 index 00000000..4f56e8e4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-vip.php @@ -0,0 +1,73 @@ +capabilities as $capability => $roles ) { + $role_capabilities = $this->get_role_capabilities( $role_capabilities, $capability, $roles ); + } + + foreach ( $role_capabilities as $role => $capabilities ) { + wpcom_vip_add_role_caps( $role, $capabilities ); + } + } + + /** + * Removes the registered capabilities from the system + * + * @return void + */ + public function remove() { + // Remove from any role it has been added to. + $roles = wp_roles()->get_names(); + $roles = array_keys( $roles ); + + $role_capabilities = []; + foreach ( array_keys( $this->capabilities ) as $capability ) { + // Allow filtering of roles. + $role_capabilities = $this->get_role_capabilities( $role_capabilities, $capability, $roles ); + } + + foreach ( $role_capabilities as $role => $capabilities ) { + wpcom_vip_remove_role_caps( $role, $capabilities ); + } + } + + /** + * Returns the roles which the capability is registered on. + * + * @param array $role_capabilities List of all roles with their capabilities. + * @param string $capability Capability to filter roles for. + * @param array $roles List of default roles. + * + * @return array List of capabilities. + */ + protected function get_role_capabilities( $role_capabilities, $capability, $roles ) { + // Allow filtering of roles. + $filtered_roles = $this->filter_roles( $capability, $roles ); + + foreach ( $filtered_roles as $role ) { + if ( ! isset( $add_role_caps[ $role ] ) ) { + $role_capabilities[ $role ] = []; + } + + $role_capabilities[ $role ][] = $capability; + } + + return $role_capabilities; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-wp.php b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-wp.php new file mode 100644 index 00000000..18309567 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager-wp.php @@ -0,0 +1,51 @@ +capabilities as $capability => $roles ) { + $filtered_roles = $this->filter_roles( $capability, $roles ); + + $wp_roles = $this->get_wp_roles( $filtered_roles ); + foreach ( $wp_roles as $wp_role ) { + $wp_role->add_cap( $capability ); + } + } + } + + /** + * Unregisters the capabilities from the system. + * + * @return void + */ + public function remove() { + // Remove from any roles it has been added to. + $roles = wp_roles()->get_names(); + $roles = array_keys( $roles ); + + foreach ( $this->capabilities as $capability => $_roles ) { + $registered_roles = array_unique( array_merge( $roles, $this->capabilities[ $capability ] ) ); + + // Allow filtering of roles. + $filtered_roles = $this->filter_roles( $capability, $registered_roles ); + + $wp_roles = $this->get_wp_roles( $filtered_roles ); + foreach ( $wp_roles as $wp_role ) { + $wp_role->remove_cap( $capability ); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager.php b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager.php new file mode 100644 index 00000000..63f6962d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-capability-manager.php @@ -0,0 +1,38 @@ + $applicable_roles ] ); + } + + /** + * Retrieves the roles that have the specified capability. + * + * @param string $capability The name of the capability. + * + * @return array The names of the roles that have the capability. + */ + public static function get_applicable_roles( $capability ) { + $roles = wp_roles(); + $role_names = $roles->get_names(); + + $applicable_roles = []; + foreach ( array_keys( $role_names ) as $role_name ) { + $role = $roles->get_role( $role_name ); + + if ( ! $role ) { + continue; + } + + // Add role if it has the capability. + if ( array_key_exists( $capability, $role->capabilities ) && $role->capabilities[ $capability ] === true ) { + $applicable_roles[] = $role_name; + } + } + + return $applicable_roles; + } + + /** + * Checks if the current user has at least one of the supplied capabilities. + * + * @param array $capabilities Capabilities to check against. + * + * @return bool True if the user has at least one capability. + */ + protected static function has_any( array $capabilities ) { + foreach ( $capabilities as $capability ) { + if ( self::has( $capability ) ) { + return true; + } + } + + return false; + } + + /** + * Checks if the user has a certain capability. + * + * @param string $capability Capability to check against. + * + * @return bool True if the user has the capability. + */ + protected static function has( $capability ) { + return current_user_can( $capability ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-register-capabilities.php b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-register-capabilities.php new file mode 100644 index 00000000..6cf248d8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/capabilities/class-register-capabilities.php @@ -0,0 +1,111 @@ +register( 'wpseo_bulk_edit', [ 'editor', 'wpseo_editor', 'wpseo_manager' ] ); + $manager->register( 'wpseo_edit_advanced_metadata', [ 'editor', 'wpseo_editor', 'wpseo_manager' ] ); + + $manager->register( 'wpseo_manage_options', [ 'administrator', 'wpseo_manager' ] ); + $manager->register( 'view_site_health_checks', [ 'wpseo_manager' ] ); + } + + /** + * Revokes the 'wpseo_manage_options' capability from administrator users if it should + * only be granted to network administrators. + * + * @param array $allcaps An array of all the user's capabilities. + * @param array $caps Actual capabilities being checked. + * @param array $args Optional parameters passed to has_cap(), typically object ID. + * @param WP_User $user The user object. + * + * @return array Possibly modified array of the user's capabilities. + */ + public function filter_user_has_wpseo_manage_options_cap( $allcaps, $caps, $args, $user ) { + + // We only need to do something if 'wpseo_manage_options' is being checked. + if ( ! in_array( 'wpseo_manage_options', $caps, true ) ) { + return $allcaps; + } + + // If the user does not have 'wpseo_manage_options' anyway, we don't need to revoke access. + if ( empty( $allcaps['wpseo_manage_options'] ) ) { + return $allcaps; + } + + // If the user does not have 'delete_users', they are not an administrator. + if ( empty( $allcaps['delete_users'] ) ) { + return $allcaps; + } + + $options = WPSEO_Options::get_instance(); + + if ( $options->get( 'access' ) === 'superadmin' && ! is_super_admin( $user->ID ) ) { + unset( $allcaps['wpseo_manage_options'] ); + } + + return $allcaps; + } + + /** + * Maybe add manage_privacy_options capability for wpseo_manager user role. + * + * @param string[] $caps Primitive capabilities required of the user. + * @param string[] $cap Capability being checked. + * + * @return string[] Filtered primitive capabilities required of the user. + */ + public function map_meta_cap_for_seo_manager( $caps, $cap ) { + $user = wp_get_current_user(); + + // No multisite support. + if ( is_multisite() ) { + return $caps; + } + + // User must be of role wpseo_manager. + if ( ! in_array( 'wpseo_manager', $user->roles, true ) ) { + return $caps; + } + + // Remove manage_options cap requirement if requested cap is manage_privacy_options. + if ( $cap === 'manage_privacy_options' ) { + return array_diff( $caps, [ 'manage_options' ] ); + } + + return $caps; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-analysis-worker-location.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-analysis-worker-location.php new file mode 100644 index 00000000..cb980ad1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-analysis-worker-location.php @@ -0,0 +1,75 @@ +flatten_version( WPSEO_VERSION ); + } + + $analysis_worker = $name . '-' . $flat_version . '.js'; + + $this->asset_location = WPSEO_Admin_Asset_Manager::create_default_location(); + $this->asset = new WPSEO_Admin_Asset( + [ + 'name' => $name, + 'src' => $analysis_worker, + ] + ); + } + + /** + * Retrieves the analysis worker asset. + * + * @return WPSEO_Admin_Asset The analysis worker asset. + */ + public function get_asset() { + return $this->asset; + } + + /** + * Determines the URL of the asset on the dev server. + * + * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. + * @param string $type The type of asset. Usually JS or CSS. + * + * @return string The URL of the asset. + */ + public function get_url( WPSEO_Admin_Asset $asset, $type ) { + $scheme = wp_parse_url( $asset->get_src(), PHP_URL_SCHEME ); + if ( in_array( $scheme, [ 'http', 'https' ], true ) ) { + return $asset->get_src(); + } + + return $this->asset_location->get_url( $asset, $type ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-dev-server-location.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-dev-server-location.php new file mode 100644 index 00000000..cf67ae74 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-dev-server-location.php @@ -0,0 +1,71 @@ +url = $url; + } + + /** + * Determines the URL of the asset on the dev server. + * + * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. + * @param string $type The type of asset. Usually JS or CSS. + * + * @return string The URL of the asset. + */ + public function get_url( WPSEO_Admin_Asset $asset, $type ) { + if ( $type === WPSEO_Admin_Asset::TYPE_CSS ) { + return $this->get_default_url( $asset, $type ); + } + + $path = sprintf( 'js/dist/%s%s.js', $asset->get_src(), $asset->get_suffix() ); + + return trailingslashit( $this->url ) . $path; + } + + /** + * Determines the URL of the asset not using the dev server. + * + * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. + * @param string $type The type of asset. + * + * @return string The URL of the asset file. + */ + public function get_default_url( WPSEO_Admin_Asset $asset, $type ) { + $default_location = new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE ); + + return $default_location->get_url( $asset, $type ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-location.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-location.php new file mode 100644 index 00000000..7d1c8c35 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-location.php @@ -0,0 +1,22 @@ +asset_location = $asset_location; + $this->prefix = $prefix; + } + + /** + * Enqueues scripts. + * + * @param string $script The name of the script to enqueue. + * + * @return void + */ + public function enqueue_script( $script ) { + wp_enqueue_script( $this->prefix . $script ); + } + + /** + * Enqueues styles. + * + * @param string $style The name of the style to enqueue. + * + * @return void + */ + public function enqueue_style( $style ) { + wp_enqueue_style( $this->prefix . $style ); + } + + /** + * Enqueues the appropriate language for the user. + * + * @return void + */ + public function enqueue_user_language_script() { + $this->enqueue_script( 'language-' . YoastSEO()->helpers->language->get_researcher_language() ); + } + + /** + * Registers scripts based on it's parameters. + * + * @param WPSEO_Admin_Asset $script The script to register. + * + * @return void + */ + public function register_script( WPSEO_Admin_Asset $script ) { + $url = $script->get_src() ? $this->get_url( $script, WPSEO_Admin_Asset::TYPE_JS ) : false; + + wp_register_script( + $this->prefix . $script->get_name(), + $url, + $script->get_deps(), + $script->get_version(), + $script->is_in_footer() + ); + + if ( in_array( 'wp-i18n', $script->get_deps(), true ) ) { + wp_set_script_translations( $this->prefix . $script->get_name(), 'wordpress-seo' ); + } + } + + /** + * Registers styles based on it's parameters. + * + * @param WPSEO_Admin_Asset $style The style to register. + * + * @return void + */ + public function register_style( WPSEO_Admin_Asset $style ) { + wp_register_style( + $this->prefix . $style->get_name(), + $this->get_url( $style, WPSEO_Admin_Asset::TYPE_CSS ), + $style->get_deps(), + $style->get_version(), + $style->get_media() + ); + } + + /** + * Calls the functions that register scripts and styles with the scripts and styles to be registered as arguments. + * + * @return void + */ + public function register_assets() { + $this->register_scripts( $this->scripts_to_be_registered() ); + $this->register_styles( $this->styles_to_be_registered() ); + } + + /** + * Registers all the scripts passed to it. + * + * @param array $scripts The scripts passed to it. + * + * @return void + */ + public function register_scripts( $scripts ) { + foreach ( $scripts as $script ) { + $script = new WPSEO_Admin_Asset( $script ); + $this->register_script( $script ); + } + } + + /** + * Registers all the styles it receives. + * + * @param array $styles Styles that need to be registered. + * + * @return void + */ + public function register_styles( $styles ) { + foreach ( $styles as $style ) { + $style = new WPSEO_Admin_Asset( $style ); + $this->register_style( $style ); + } + } + + /** + * Localizes the script. + * + * @param string $handle The script handle. + * @param string $object_name The object name. + * @param array $data The l10n data. + * + * @return void + */ + public function localize_script( $handle, $object_name, $data ) { + wp_localize_script( $this->prefix . $handle, $object_name, $data ); + } + + /** + * Adds an inline script. + * + * @param string $handle The script handle. + * @param string $data The l10n data. + * @param string $position Optional. Whether to add the inline script before the handle or after. + * + * @return void + */ + public function add_inline_script( $handle, $data, $position = 'after' ) { + wp_add_inline_script( $this->prefix . $handle, $data, $position ); + } + + /** + * A list of styles that shouldn't be registered but are needed in other locations in the plugin. + * + * @return array + */ + public function special_styles() { + $flat_version = $this->flatten_version( WPSEO_VERSION ); + $asset_args = [ + 'name' => 'inside-editor', + 'src' => 'inside-editor-' . $flat_version, + ]; + + return [ 'inside-editor' => new WPSEO_Admin_Asset( $asset_args ) ]; + } + + /** + * Flattens a version number for use in a filename. + * + * @param string $version The original version number. + * + * @return string The flattened version number. + */ + public function flatten_version( $version ) { + $parts = explode( '.', $version ); + + if ( count( $parts ) === 2 && preg_match( '/^\d+$/', $parts[1] ) === 1 ) { + $parts[] = '0'; + } + + return implode( '', $parts ); + } + + /** + * Creates a default location object for use in the admin asset manager. + * + * @return WPSEO_Admin_Asset_Location The location to use in the asset manager. + */ + public static function create_default_location() { + if ( defined( 'YOAST_SEO_DEV_SERVER' ) && YOAST_SEO_DEV_SERVER ) { + $url = defined( 'YOAST_SEO_DEV_SERVER_URL' ) ? YOAST_SEO_DEV_SERVER_URL : WPSEO_Admin_Asset_Dev_Server_Location::DEFAULT_URL; + + return new WPSEO_Admin_Asset_Dev_Server_Location( $url ); + } + + return new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE, false ); + } + + /** + * Checks if the given script is enqueued. + * + * @param string $script The script to check. + * + * @return bool True when the script is enqueued. + */ + public function is_script_enqueued( $script ) { + return wp_script_is( $this->prefix . $script ); + } + + /** + * Returns the scripts that need to be registered. + * + * @todo Data format is not self-documenting. Needs explanation inline. R. + * + * @return array The scripts that need to be registered. + */ + protected function scripts_to_be_registered() { + $header_scripts = [ + 'admin-global', + 'block-editor', + 'classic-editor', + 'post-edit', + 'help-scout-beacon', + 'redirect-old-features-tab', + ]; + $additional_dependencies = [ + 'analysis-worker' => [ self::PREFIX . 'analysis-package' ], + 'api-client' => [ 'wp-api' ], + 'crawl-settings' => [ 'jquery' ], + 'dashboard-widget' => [ self::PREFIX . 'api-client' ], + 'wincher-dashboard-widget' => [ self::PREFIX . 'api-client' ], + 'editor-modules' => [ 'jquery' ], + 'elementor' => [ + self::PREFIX . 'api-client', + self::PREFIX . 'externals-components', + self::PREFIX . 'externals-contexts', + self::PREFIX . 'externals-redux', + ], + 'indexation' => [ + 'jquery-ui-core', + 'jquery-ui-progressbar', + ], + 'first-time-configuration' => [ + self::PREFIX . 'api-client', + self::PREFIX . 'externals-components', + self::PREFIX . 'externals-contexts', + self::PREFIX . 'externals-redux', + ], + 'integrations-page' => [ + self::PREFIX . 'api-client', + self::PREFIX . 'externals-components', + self::PREFIX . 'externals-contexts', + self::PREFIX . 'externals-redux', + ], + 'post-edit' => [ + self::PREFIX . 'api-client', + self::PREFIX . 'block-editor', + self::PREFIX . 'externals-components', + self::PREFIX . 'externals-contexts', + self::PREFIX . 'externals-redux', + ], + 'reindex-links' => [ + 'jquery-ui-core', + 'jquery-ui-progressbar', + ], + 'settings' => [ + 'jquery-ui-core', + 'jquery-ui-progressbar', + self::PREFIX . 'api-client', + self::PREFIX . 'externals-components', + self::PREFIX . 'externals-contexts', + self::PREFIX . 'externals-redux', + ], + 'term-edit' => [ + self::PREFIX . 'api-client', + self::PREFIX . 'classic-editor', + self::PREFIX . 'externals-components', + self::PREFIX . 'externals-contexts', + self::PREFIX . 'externals-redux', + ], + ]; + + $plugin_scripts = $this->load_generated_asset_file( + [ + 'asset_file' => __DIR__ . '/../src/generated/assets/plugin.php', + 'ext_length' => 3, + 'additional_deps' => $additional_dependencies, + 'header_scripts' => $header_scripts, + ] + ); + $external_scripts = $this->load_generated_asset_file( + [ + 'asset_file' => __DIR__ . '/../src/generated/assets/externals.php', + 'ext_length' => 3, + 'suffix' => '-package', + 'base_dir' => 'externals/', + 'additional_deps' => $additional_dependencies, + 'header_scripts' => $header_scripts, + ] + ); + $language_scripts = $this->load_generated_asset_file( + [ + 'asset_file' => __DIR__ . '/../src/generated/assets/languages.php', + 'ext_length' => 3, + 'suffix' => '-language', + 'base_dir' => 'languages/', + 'additional_deps' => $additional_dependencies, + 'header_scripts' => $header_scripts, + ] + ); + $renamed_scripts = $this->load_renamed_scripts(); + + $scripts = array_merge( + $plugin_scripts, + $external_scripts, + $language_scripts, + $renamed_scripts + ); + + $scripts['installation-success'] = [ + 'name' => 'installation-success', + 'src' => 'installation-success.js', + 'deps' => [ + 'wp-a11y', + 'wp-dom-ready', + 'wp-components', + 'wp-element', + 'wp-i18n', + self::PREFIX . 'components-new-package', + self::PREFIX . 'externals-components', + ], + 'version' => $scripts['installation-success']['version'], + ]; + + $scripts['post-edit-classic'] = [ + 'name' => 'post-edit-classic', + 'src' => $scripts['post-edit']['src'], + 'deps' => array_map( + static function ( $dep ) { + if ( $dep === self::PREFIX . 'block-editor' ) { + return self::PREFIX . 'classic-editor'; + } + return $dep; + }, + $scripts['post-edit']['deps'] + ), + 'in_footer' => ! in_array( 'post-edit-classic', $header_scripts, true ), + 'version' => $scripts['post-edit']['version'], + ]; + + $scripts['workouts'] = [ + 'name' => 'workouts', + 'src' => 'workouts.js', + 'deps' => [ + 'clipboard', + 'lodash', + 'wp-api-fetch', + 'wp-a11y', + 'wp-components', + 'wp-compose', + 'wp-data', + 'wp-dom-ready', + 'wp-element', + 'wp-i18n', + self::PREFIX . 'externals-components', + self::PREFIX . 'externals-contexts', + self::PREFIX . 'externals-redux', + self::PREFIX . 'analysis', + self::PREFIX . 'react-select', + self::PREFIX . 'components-new-package', + ], + 'version' => $scripts['workouts']['version'], + ]; + + // Add the current language to every script that requires the analysis package. + foreach ( $scripts as $name => $script ) { + if ( substr( $name, -8 ) === 'language' ) { + continue; + } + if ( in_array( self::PREFIX . 'analysis-package', $script['deps'], true ) ) { + $scripts[ $name ]['deps'][] = self::PREFIX . YoastSEO()->helpers->language->get_researcher_language() . '-language'; + } + } + + return $scripts; + } + + /** + * Loads a generated asset file. + * + * @param array $args { + * The arguments. + * + * @type string $asset_file The asset file to load. + * @type int $ext_length The length of the extension, including suffix, of the filename. + * @type string $suffix Optional. The suffix of the asset name. + * @type array $additional_deps Optional. The additional dependencies assets may have. + * @type string $base_dir Optional. The base directory of the asset. + * @type string[] $header_scripts Optional. The script names that should be in the header. + * } + * + * @return array { + * The scripts to be registered. + * + * @type string $name The name of the asset. + * @type string $src The src of the asset. + * @type string[] $deps The dependenies of the asset. + * @type bool $in_footer Whether or not the asset should be in the footer. + * } + */ + protected function load_generated_asset_file( $args ) { + $args = wp_parse_args( + $args, + [ + 'suffix' => '', + 'additional_deps' => [], + 'base_dir' => '', + 'header_scripts' => [], + ] + ); + $scripts = []; + $assets = require $args['asset_file']; + foreach ( $assets as $file => $data ) { + $name = substr( $file, 0, -$args['ext_length'] ); + $name = strtolower( preg_replace( '/([A-Z])/', '-$1', $name ) ); + $name .= $args['suffix']; + + $deps = $data['dependencies']; + if ( isset( $args['additional_deps'][ $name ] ) ) { + $deps = array_merge( $deps, $args['additional_deps'][ $name ] ); + } + + $scripts[ $name ] = [ + 'name' => $name, + 'src' => $args['base_dir'] . $file, + 'deps' => $deps, + 'in_footer' => ! in_array( $name, $args['header_scripts'], true ), + 'version' => $data['version'], + ]; + } + + return $scripts; + } + + /** + * Loads the scripts that should be renamed for BC. + * + * @return array { + * The scripts to be registered. + * + * @type string $name The name of the asset. + * @type string $src The src of the asset. + * @type string[] $deps The dependenies of the asset. + * @type bool $in_footer Whether or not the asset should be in the footer. + * } + */ + protected function load_renamed_scripts() { + $scripts = []; + $renamed_scripts = [ + 'admin-global-script' => 'admin-global', + 'analysis' => 'analysis-package', + 'analysis-report' => 'analysis-report-package', + 'api' => 'api-client', + 'commons' => 'commons-package', + 'edit-page' => 'edit-page-script', + 'draft-js' => 'draft-js-package', + 'feature-flag' => 'feature-flag-package', + 'helpers' => 'helpers-package', + 'jed' => 'jed-package', + 'chart.js' => 'chart.js-package', + 'network-admin-script' => 'network-admin', + 'redux' => 'redux-package', + 'replacement-variable-editor' => 'replacement-variable-editor-package', + 'search-metadata-previews' => 'search-metadata-previews-package', + 'social-metadata-forms' => 'social-metadata-forms-package', + 'styled-components' => 'styled-components-package', + 'style-guide' => 'style-guide-package', + 'yoast-components' => 'components-new-package', + ]; + + foreach ( $renamed_scripts as $original => $replacement ) { + $scripts[] = [ + 'name' => $original, + 'src' => false, + 'deps' => [ self::PREFIX . $replacement ], + ]; + } + + return $scripts; + } + + /** + * Returns the styles that need to be registered. + * + * @todo Data format is not self-documenting. Needs explanation inline. R. + * + * @return array Styles that need to be registered. + */ + protected function styles_to_be_registered() { + $flat_version = $this->flatten_version( WPSEO_VERSION ); + + return [ + [ + 'name' => 'admin-css', + 'src' => 'yst_plugin_tools-' . $flat_version, + 'deps' => [ self::PREFIX . 'toggle-switch' ], + ], + [ + 'name' => 'toggle-switch', + 'src' => 'toggle-switch-' . $flat_version, + ], + [ + 'name' => 'dismissible', + 'src' => 'wpseo-dismissible-' . $flat_version, + ], + [ + 'name' => 'notifications', + 'src' => 'notifications-' . $flat_version, + ], + [ + 'name' => 'alert', + 'src' => 'alerts-' . $flat_version, + ], + [ + 'name' => 'edit-page', + 'src' => 'edit-page-' . $flat_version, + ], + [ + 'name' => 'featured-image', + 'src' => 'featured-image-' . $flat_version, + ], + [ + 'name' => 'metabox-css', + 'src' => 'metabox-' . $flat_version, + 'deps' => [ + self::PREFIX . 'admin-css', + self::PREFIX . 'tailwind', + 'wp-components', + ], + ], + [ + 'name' => 'ai-generator', + 'src' => 'ai-generator-' . $flat_version, + 'deps' => [ + self::PREFIX . 'tailwind', + self::PREFIX . 'introductions', + ], + ], + [ + 'name' => 'ai-fix-assessments', + 'src' => 'ai-fix-assessments-' . $flat_version, + ], + [ + 'name' => 'introductions', + 'src' => 'introductions-' . $flat_version, + 'deps' => [ self::PREFIX . 'tailwind' ], + ], + [ + 'name' => 'wp-dashboard', + 'src' => 'dashboard-' . $flat_version, + ], + [ + 'name' => 'scoring', + 'src' => 'yst_seo_score-' . $flat_version, + ], + [ + 'name' => 'adminbar', + 'src' => 'adminbar-' . $flat_version, + 'deps' => [ + 'admin-bar', + ], + ], + [ + 'name' => 'primary-category', + 'src' => 'metabox-primary-category-' . $flat_version, + ], + [ + 'name' => 'admin-global', + 'src' => 'admin-global-' . $flat_version, + ], + [ + 'name' => 'extensions', + 'src' => 'yoast-extensions-' . $flat_version, + 'deps' => [ + 'wp-components', + ], + ], + [ + 'name' => 'filter-explanation', + 'src' => 'filter-explanation-' . $flat_version, + ], + [ + 'name' => 'monorepo', + 'src' => 'monorepo-' . $flat_version, + ], + [ + 'name' => 'structured-data-blocks', + 'src' => 'structured-data-blocks-' . $flat_version, + 'deps' => [ + 'dashicons', + 'forms', + 'wp-edit-blocks', + ], + ], + [ + 'name' => 'elementor', + 'src' => 'elementor-' . $flat_version, + ], + [ + 'name' => 'tailwind', + 'src' => 'tailwind-' . $flat_version, + ], + [ + 'name' => 'new-settings', + 'src' => 'new-settings-' . $flat_version, + 'deps' => [ self::PREFIX . 'tailwind' ], + ], + [ + 'name' => 'black-friday-banner', + 'src' => 'black-friday-banner-' . $flat_version, + 'deps' => [ self::PREFIX . 'tailwind' ], + ], + [ + 'name' => 'academy', + 'src' => 'academy-' . $flat_version, + 'deps' => [ self::PREFIX . 'tailwind' ], + ], + [ + 'name' => 'support', + 'src' => 'support-' . $flat_version, + 'deps' => [ self::PREFIX . 'tailwind' ], + ], + [ + 'name' => 'workouts', + 'src' => 'workouts-' . $flat_version, + 'deps' => [ + self::PREFIX . 'monorepo', + ], + ], + [ + 'name' => 'first-time-configuration', + 'src' => 'first-time-configuration-' . $flat_version, + 'deps' => [ self::PREFIX . 'tailwind' ], + ], + [ + 'name' => 'inside-editor', + 'src' => 'inside-editor-' . $flat_version, + ], + ]; + } + + /** + * Determines the URL of the asset. + * + * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. + * @param string $type The type of asset. Usually JS or CSS. + * + * @return string The URL of the asset. + */ + protected function get_url( WPSEO_Admin_Asset $asset, $type ) { + $scheme = wp_parse_url( $asset->get_src(), PHP_URL_SCHEME ); + if ( in_array( $scheme, [ 'http', 'https' ], true ) ) { + return $asset->get_src(); + } + + return $this->asset_location->get_url( $asset, $type ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-seo-location.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-seo-location.php new file mode 100644 index 00000000..6774ebd6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-asset-seo-location.php @@ -0,0 +1,86 @@ +plugin_file = $plugin_file; + $this->add_suffix = $add_suffix; + } + + /** + * Determines the URL of the asset on the dev server. + * + * @param WPSEO_Admin_Asset $asset The asset to determine the URL for. + * @param string $type The type of asset. Usually JS or CSS. + * + * @return string The URL of the asset. + */ + public function get_url( WPSEO_Admin_Asset $asset, $type ) { + $path = $this->get_path( $asset, $type ); + if ( empty( $path ) ) { + return ''; + } + + return plugins_url( $path, $this->plugin_file ); + } + + /** + * Determines the path relative to the plugin folder of an asset. + * + * @param WPSEO_Admin_Asset $asset The asset to determine the path for. + * @param string $type The type of asset. + * + * @return string The path to the asset file. + */ + protected function get_path( WPSEO_Admin_Asset $asset, $type ) { + $relative_path = ''; + $rtl_suffix = ''; + + switch ( $type ) { + case WPSEO_Admin_Asset::TYPE_JS: + $relative_path = 'js/dist/' . $asset->get_src(); + if ( $this->add_suffix ) { + $relative_path .= $asset->get_suffix() . '.js'; + } + break; + + case WPSEO_Admin_Asset::TYPE_CSS: + // Path and suffix for RTL stylesheets. + if ( is_rtl() && $asset->has_rtl() ) { + $rtl_suffix = '-rtl'; + } + $relative_path = 'css/dist/' . $asset->get_src() . $rtl_suffix . $asset->get_suffix() . '.css'; + break; + } + + return $relative_path; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-editor-specific-replace-vars.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-editor-specific-replace-vars.php new file mode 100644 index 00000000..781ce099 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-editor-specific-replace-vars.php @@ -0,0 +1,227 @@ + [ 'id', 'pt_single', 'pt_plural', 'parent_title' ], + 'post' => [ 'id', 'term404', 'pt_single', 'pt_plural' ], + // Custom post type. + 'custom_post_type' => [ 'id', 'term404', 'pt_single', 'pt_plural', 'parent_title' ], + // Settings - archive pages. + 'custom-post-type_archive' => [ 'pt_single', 'pt_plural' ], + + // Taxonomies. + 'category' => [ 'term_title', 'term_description', 'category_description', 'parent_title', 'term_hierarchy' ], + 'post_tag' => [ 'term_title', 'term_description', 'tag_description' ], + 'post_format' => [ 'term_title' ], + // Custom taxonomy. + 'term-in-custom-taxonomy' => [ 'term_title', 'term_description', 'category_description', 'parent_title', 'term_hierarchy' ], + + // Settings - special pages. + 'search' => [ 'searchphrase' ], + ]; + + /** + * WPSEO_Admin_Editor_Specific_Replace_Vars constructor. + */ + public function __construct() { + $this->add_for_page_types( + [ 'page', 'post', 'custom_post_type' ], + WPSEO_Custom_Fields::get_custom_fields() + ); + + $this->add_for_page_types( + [ 'post', 'term-in-custom-taxonomy' ], + WPSEO_Custom_Taxonomies::get_custom_taxonomies() + ); + } + + /** + * Retrieves the editor specific replacement variables. + * + * @return array The editor specific replacement variables. + */ + public function get() { + /** + * Filter: Adds the possibility to add extra editor specific replacement variables. + * + * @param array $replacement_variables Array of editor specific replace vars. + */ + $replacement_variables = apply_filters( + 'wpseo_editor_specific_replace_vars', + $this->replacement_variables + ); + + if ( ! is_array( $replacement_variables ) ) { + $replacement_variables = $this->replacement_variables; + } + + return array_filter( $replacement_variables, 'is_array' ); + } + + /** + * Retrieves the generic replacement variable names. + * + * Which are the replacement variables without the editor specific ones. + * + * @param array $replacement_variables Possibly generic replacement variables. + * + * @return array The generic replacement variable names. + */ + public function get_generic( $replacement_variables ) { + $shared_variables = array_diff( + $this->extract_names( $replacement_variables ), + $this->get_unique_replacement_variables() + ); + + return array_values( $shared_variables ); + } + + /** + * Determines the page type of the current term. + * + * @param string $taxonomy The taxonomy name. + * + * @return string The page type. + */ + public function determine_for_term( $taxonomy ) { + $replacement_variables = $this->get(); + if ( array_key_exists( $taxonomy, $replacement_variables ) ) { + return $taxonomy; + } + + return 'term-in-custom-taxonomy'; + } + + /** + * Determines the page type of the current post. + * + * @param WP_Post $post A WordPress post instance. + * + * @return string The page type. + */ + public function determine_for_post( $post ) { + if ( $post instanceof WP_Post === false ) { + return 'post'; + } + + $replacement_variables = $this->get(); + if ( array_key_exists( $post->post_type, $replacement_variables ) ) { + return $post->post_type; + } + + return 'custom_post_type'; + } + + /** + * Determines the page type for a post type. + * + * @param string $post_type The name of the post_type. + * @param string $fallback The page type to fall back to. + * + * @return string The page type. + */ + public function determine_for_post_type( $post_type, $fallback = 'custom_post_type' ) { + if ( ! $this->has_for_page_type( $post_type ) ) { + return $fallback; + } + + return $post_type; + } + + /** + * Determines the page type for an archive page. + * + * @param string $name The name of the archive. + * @param string $fallback The page type to fall back to. + * + * @return string The page type. + */ + public function determine_for_archive( $name, $fallback = 'custom-post-type_archive' ) { + $page_type = $name . '_archive'; + + if ( ! $this->has_for_page_type( $page_type ) ) { + return $fallback; + } + + return $page_type; + } + + /** + * Adds the replavement variables for the given page types. + * + * @param array $page_types Page types to add variables for. + * @param array $replacement_variables_to_add The variables to add. + * + * @return void + */ + protected function add_for_page_types( array $page_types, array $replacement_variables_to_add ) { + if ( empty( $replacement_variables_to_add ) ) { + return; + } + + $replacement_variables_to_add = array_fill_keys( $page_types, $replacement_variables_to_add ); + $replacement_variables = $this->replacement_variables; + + $this->replacement_variables = array_merge_recursive( $replacement_variables, $replacement_variables_to_add ); + } + + /** + * Extracts the names from the given replacements variables. + * + * @param array $replacement_variables Replacement variables to extract the name from. + * + * @return array Extracted names. + */ + protected function extract_names( $replacement_variables ) { + $extracted_names = []; + + foreach ( $replacement_variables as $replacement_variable ) { + if ( empty( $replacement_variable['name'] ) ) { + continue; + } + + $extracted_names[] = $replacement_variable['name']; + } + + return $extracted_names; + } + + /** + * Returns whether the given page type has editor specific replace vars. + * + * @param string $page_type The page type to check. + * + * @return bool True if there are associated editor specific replace vars. + */ + protected function has_for_page_type( $page_type ) { + $replacement_variables = $this->get(); + + return ( ! empty( $replacement_variables[ $page_type ] ) && is_array( $replacement_variables[ $page_type ] ) ); + } + + /** + * Merges all editor specific replacement variables into one array and removes duplicates. + * + * @return array The list of unique editor specific replacement variables. + */ + protected function get_unique_replacement_variables() { + $merged_replacement_variables = call_user_func_array( 'array_merge', array_values( $this->get() ) ); + + return array_unique( $merged_replacement_variables ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-gutenberg-compatibility-notification.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-gutenberg-compatibility-notification.php new file mode 100644 index 00000000..8f521de3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-gutenberg-compatibility-notification.php @@ -0,0 +1,105 @@ +compatibility_checker = new WPSEO_Gutenberg_Compatibility(); + $this->notification_center = Yoast_Notification_Center::get(); + } + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + add_action( 'admin_init', [ $this, 'manage_notification' ] ); + } + + /** + * Manages if the notification should be shown or removed. + * + * @return void + */ + public function manage_notification() { + /** + * Filter: 'yoast_display_gutenberg_compat_notification' - Allows developer to disable the Gutenberg compatibility + * notification. + * + * @param bool $display_notification + */ + $display_notification = apply_filters( 'yoast_display_gutenberg_compat_notification', true ); + + if ( + ! $this->compatibility_checker->is_installed() + || $this->compatibility_checker->is_fully_compatible() + || ! $display_notification + ) { + $this->notification_center->remove_notification_by_id( $this->notification_id ); + + return; + } + + $this->add_notification(); + } + + /** + * Adds the notification to the notificaton center. + * + * @return void + */ + protected function add_notification() { + $level = $this->compatibility_checker->is_below_minimum() ? Yoast_Notification::ERROR : Yoast_Notification::WARNING; + + $message = sprintf( + /* translators: %1$s expands to Yoast SEO, %2$s expands to the installed version, %3$s expands to Gutenberg */ + __( '%1$s detected you are using version %2$s of %3$s, please update to the latest version to prevent compatibility issues.', 'wordpress-seo' ), + 'Yoast SEO', + $this->compatibility_checker->get_installed_version(), + 'Gutenberg' + ); + + $notification = new Yoast_Notification( + $message, + [ + 'id' => $this->notification_id, + 'type' => $level, + 'priority' => 1, + ] + ); + + $this->notification_center->add_notification( $notification ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php new file mode 100644 index 00000000..6fdb6c2f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-help-panel.php @@ -0,0 +1,104 @@ +id = $id; + $this->help_button_text = $help_button_text; + $this->help_content = $help_content; + $this->wrapper = $wrapper; + } + + /** + * Returns the html for the Help Button. + * + * @return string + */ + public function get_button_html() { + + if ( ! $this->id || ! $this->help_button_text || ! $this->help_content ) { + return ''; + } + + return sprintf( + ' ', + esc_attr( $this->id ), + $this->help_button_text + ); + } + + /** + * Returns the html for the Help Panel. + * + * @return string + */ + public function get_panel_html() { + + if ( ! $this->id || ! $this->help_button_text || ! $this->help_content ) { + return ''; + } + + $wrapper_start = ''; + $wrapper_end = ''; + + if ( $this->wrapper === 'has-wrapper' ) { + $wrapper_start = '
      '; + $wrapper_end = '
      '; + } + + return sprintf( + '%1$s

      %3$s

      %4$s', + $wrapper_start, + esc_attr( $this->id ), + $this->help_content, + $wrapper_end + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-init.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-init.php new file mode 100644 index 00000000..168e789a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-init.php @@ -0,0 +1,379 @@ +pagenow = $GLOBALS['pagenow']; + + $this->asset_manager = new WPSEO_Admin_Asset_Manager(); + + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_dismissible' ] ); + add_action( 'admin_init', [ $this, 'unsupported_php_notice' ], 15 ); + add_action( 'admin_init', [ $this, 'remove_translations_notification' ], 15 ); + add_action( 'admin_init', [ $this->asset_manager, 'register_assets' ] ); + add_action( 'admin_init', [ $this, 'show_hook_deprecation_warnings' ] ); + add_action( 'admin_init', [ 'WPSEO_Plugin_Conflict', 'hook_check_for_plugin_conflicts' ] ); + add_action( 'admin_notices', [ $this, 'permalink_settings_notice' ] ); + add_action( 'post_submitbox_misc_actions', [ $this, 'add_publish_box_section' ] ); + + $this->load_meta_boxes(); + $this->load_taxonomy_class(); + $this->load_admin_page_class(); + $this->load_admin_user_class(); + $this->load_xml_sitemaps_admin(); + $this->load_plugin_suggestions(); + } + + /** + * Enqueue our styling for dismissible yoast notifications. + * + * @return void + */ + public function enqueue_dismissible() { + $this->asset_manager->enqueue_style( 'dismissible' ); + } + + /** + * Removes any notification for incomplete translations. + * + * @return void + */ + public function remove_translations_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification_by_id( 'i18nModuleTranslationAssistance' ); + } + + /** + * Creates an unsupported PHP version notification in the notification center. + * + * @return void + */ + public function unsupported_php_notice() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification_by_id( 'wpseo-dismiss-unsupported-php' ); + } + + /** + * Gets the latest released major WordPress version from the WordPress stable-check api. + * + * @return float|int The latest released major WordPress version. 0 when the stable-check API doesn't respond. + */ + private function get_latest_major_wordpress_version() { + $core_updates = get_core_updates( [ 'dismissed' => true ] ); + + if ( $core_updates === false ) { + return 0; + } + + $wp_version_latest = get_bloginfo( 'version' ); + foreach ( $core_updates as $update ) { + if ( $update->response === 'upgrade' && version_compare( $update->version, $wp_version_latest, '>' ) ) { + $wp_version_latest = $update->version; + } + } + + // Strip the patch version and convert to a float. + return (float) $wp_version_latest; + } + + /** + * Helper to verify if the user is currently visiting one of our admin pages. + * + * @return bool + */ + private function on_wpseo_admin_page() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( ! isset( $_GET['page'] ) || ! is_string( $_GET['page'] ) ) { + return false; + } + + if ( $this->pagenow !== 'admin.php' ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $current_page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); + return strpos( $current_page, 'wpseo' ) === 0; + } + + /** + * Whether we should load the meta box classes. + * + * @return bool true if we should load the meta box classes, false otherwise. + */ + private function should_load_meta_boxes() { + /** + * Filter: 'wpseo_always_register_metaboxes_on_admin' - Allow developers to change whether + * the WPSEO metaboxes are only registered on the typical pages (lean loading) or always + * registered when in admin. + * + * @param bool $register_metaboxes Whether to always register the metaboxes or not. Defaults to false. + */ + if ( apply_filters( 'wpseo_always_register_metaboxes_on_admin', false ) ) { + return true; + } + + // If we are in a post editor. + if ( WPSEO_Metabox::is_post_overview( $this->pagenow ) || WPSEO_Metabox::is_post_edit( $this->pagenow ) ) { + return true; + } + + // If we are doing an inline save. + if ( check_ajax_referer( 'inlineeditnonce', '_inline_edit', false ) && isset( $_POST['action'] ) && sanitize_text_field( wp_unslash( $_POST['action'] ) ) === 'inline-save' ) { + return true; + } + + return false; + } + + /** + * Determine whether we should load the meta box class and if so, load it. + * + * @return void + */ + private function load_meta_boxes() { + if ( $this->should_load_meta_boxes() ) { + $GLOBALS['wpseo_metabox'] = new WPSEO_Metabox(); + $GLOBALS['wpseo_meta_columns'] = new WPSEO_Meta_Columns(); + } + } + + /** + * Determine if we should load our taxonomy edit class and if so, load it. + * + * @return void + */ + private function load_taxonomy_class() { + if ( + WPSEO_Taxonomy::is_term_edit( $this->pagenow ) + || WPSEO_Taxonomy::is_term_overview( $this->pagenow ) + ) { + new WPSEO_Taxonomy(); + } + } + + /** + * Determine if we should load our admin pages class and if so, load it. + * + * Loads admin page class for all admin pages starting with `wpseo_`. + * + * @return void + */ + private function load_admin_user_class() { + if ( in_array( $this->pagenow, [ 'user-edit.php', 'profile.php' ], true ) + && current_user_can( 'edit_users' ) + ) { + new WPSEO_Admin_User_Profile(); + } + } + + /** + * Determine if we should load our admin pages class and if so, load it. + * + * Loads admin page class for all admin pages starting with `wpseo_`. + * + * @return void + */ + private function load_admin_page_class() { + + if ( $this->on_wpseo_admin_page() ) { + // For backwards compatabilty, this still needs a global, for now... + $GLOBALS['wpseo_admin_pages'] = new WPSEO_Admin_Pages(); + + $page = null; + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); + } + + // Only renders Yoast SEO Premium upsells when the page is a Yoast SEO page. + if ( $page !== null && WPSEO_Utils::is_yoast_seo_free_page( $page ) ) { + $this->register_premium_upsell_admin_block(); + } + } + } + + /** + * Loads the plugin suggestions. + * + * @return void + */ + private function load_plugin_suggestions() { + $suggestions = new WPSEO_Suggested_Plugins( new WPSEO_Plugin_Availability(), Yoast_Notification_Center::get() ); + $suggestions->register_hooks(); + } + + /** + * Registers the Premium Upsell Admin Block. + * + * @return void + */ + private function register_premium_upsell_admin_block() { + if ( ! YoastSEO()->helpers->product->is_premium() ) { + $upsell_block = new WPSEO_Premium_Upsell_Admin_Block( 'wpseo_admin_promo_footer' ); + $upsell_block->register_hooks(); + } + } + + /** + * See if we should start our XML Sitemaps Admin class. + * + * @return void + */ + private function load_xml_sitemaps_admin() { + if ( WPSEO_Options::get( 'enable_xml_sitemap', false ) ) { + new WPSEO_Sitemaps_Admin(); + } + } + + /** + * Shows deprecation warnings to the user if a plugin has registered a filter we have deprecated. + * + * @return void + */ + public function show_hook_deprecation_warnings() { + global $wp_filter; + + if ( wp_doing_ajax() ) { + return; + } + + // WordPress hooks that have been deprecated since a Yoast SEO version. + $deprecated_filters = [ + 'wpseo_genesis_force_adjacent_rel_home' => [ + 'version' => '9.4', + 'alternative' => null, + ], + 'wpseo_opengraph' => [ + 'version' => '14.0', + 'alternative' => null, + ], + 'wpseo_twitter' => [ + 'version' => '14.0', + 'alternative' => null, + ], + 'wpseo_twitter_taxonomy_image' => [ + 'version' => '14.0', + 'alternative' => null, + ], + 'wpseo_twitter_metatag_key' => [ + 'version' => '14.0', + 'alternative' => null, + ], + 'wp_seo_get_bc_ancestors' => [ + 'version' => '14.0', + 'alternative' => 'wpseo_breadcrumb_links', + ], + 'validate_facebook_app_id_api_response_code' => [ + 'version' => '15.5', + 'alternative' => null, + ], + 'validate_facebook_app_id_api_response_body' => [ + 'version' => '15.5', + 'alternative' => null, + ], + ]; + + // Determine which filters have been registered. + $deprecated_notices = array_intersect( + array_keys( $deprecated_filters ), + array_keys( $wp_filter ) + ); + + // Show notice for each deprecated filter or action that has been registered. + foreach ( $deprecated_notices as $deprecated_filter ) { + $deprecation_info = $deprecated_filters[ $deprecated_filter ]; + // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Only uses the hardcoded values from above. + _deprecated_hook( + $deprecated_filter, + 'WPSEO ' . $deprecation_info['version'], + $deprecation_info['alternative'] + ); + // phpcs:enable + } + } + + /** + * Check if the permalink uses %postname%. + * + * @return bool + */ + private function has_postname_in_permalink() { + return ( strpos( get_option( 'permalink_structure' ), '%postname%' ) !== false ); + } + + /** + * Shows a notice on the permalink settings page. + * + * @return void + */ + public function permalink_settings_notice() { + global $pagenow; + + if ( $pagenow === 'options-permalink.php' ) { + printf( + '

      %1$s
      %2$s
      %4$s

      ', + esc_html__( 'WARNING:', 'wordpress-seo' ), + sprintf( + /* translators: %1$s and %2$s expand to items to emphasize the word in the middle. */ + esc_html__( 'Changing your permalinks settings can seriously impact your search engine visibility. It should almost %1$s never %2$s be done on a live website.', 'wordpress-seo' ), + '', + '' + ), + esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/why-permalinks/' ) ), + // The link's content. + esc_html__( 'Learn about why permalinks are important for SEO.', 'wordpress-seo' ) + ); + } + } + + /** + * Adds a custom Yoast section within the Classic Editor publish box. + * + * @param WP_Post $post The current post object. + * + * @return void + */ + public function add_publish_box_section( $post ) { + if ( in_array( $this->pagenow, [ 'post.php', 'post-new.php' ], true ) ) { + ?> +
      + [ 'sitename', 'title', 'sep', 'primary_category' ], + 'post' => [ 'sitename', 'title', 'sep', 'primary_category' ], + // Homepage. + 'homepage' => [ 'sitename', 'sitedesc', 'sep' ], + // Custom post type. + 'custom_post_type' => [ 'sitename', 'title', 'sep' ], + + // Taxonomies. + 'category' => [ 'sitename', 'term_title', 'sep', 'term_hierarchy' ], + 'post_tag' => [ 'sitename', 'term_title', 'sep' ], + 'post_format' => [ 'sitename', 'term_title', 'sep', 'page' ], + + // Custom taxonomy. + 'term-in-custom-taxonomy' => [ 'sitename', 'term_title', 'sep', 'term_hierarchy' ], + + // Settings - archive pages. + 'author_archive' => [ 'sitename', 'title', 'sep', 'page' ], + 'date_archive' => [ 'sitename', 'sep', 'date', 'page' ], + 'custom-post-type_archive' => [ 'sitename', 'title', 'sep', 'page' ], + + // Settings - special pages. + 'search' => [ 'sitename', 'searchphrase', 'sep', 'page' ], + '404' => [ 'sitename', 'sep' ], + ]; + + /** + * Determines the page type of the current term. + * + * @param string $taxonomy The taxonomy name. + * + * @return string The page type. + */ + public function determine_for_term( $taxonomy ) { + $recommended_replace_vars = $this->get_recommended_replacevars(); + if ( array_key_exists( $taxonomy, $recommended_replace_vars ) ) { + return $taxonomy; + } + + return 'term-in-custom-taxonomy'; + } + + /** + * Determines the page type of the current post. + * + * @param WP_Post $post A WordPress post instance. + * + * @return string The page type. + */ + public function determine_for_post( $post ) { + if ( $post instanceof WP_Post === false ) { + return 'post'; + } + + if ( $post->post_type === 'page' && $this->is_homepage( $post ) ) { + return 'homepage'; + } + + $recommended_replace_vars = $this->get_recommended_replacevars(); + if ( array_key_exists( $post->post_type, $recommended_replace_vars ) ) { + return $post->post_type; + } + + return 'custom_post_type'; + } + + /** + * Determines the page type for a post type. + * + * @param string $post_type The name of the post_type. + * @param string $fallback The page type to fall back to. + * + * @return string The page type. + */ + public function determine_for_post_type( $post_type, $fallback = 'custom_post_type' ) { + $page_type = $post_type; + $recommended_replace_vars = $this->get_recommended_replacevars(); + $has_recommended_replacevars = $this->has_recommended_replace_vars( $recommended_replace_vars, $page_type ); + + if ( ! $has_recommended_replacevars ) { + return $fallback; + } + + return $page_type; + } + + /** + * Determines the page type for an archive page. + * + * @param string $name The name of the archive. + * @param string $fallback The page type to fall back to. + * + * @return string The page type. + */ + public function determine_for_archive( $name, $fallback = 'custom-post-type_archive' ) { + $page_type = $name . '_archive'; + $recommended_replace_vars = $this->get_recommended_replacevars(); + $has_recommended_replacevars = $this->has_recommended_replace_vars( $recommended_replace_vars, $page_type ); + + if ( ! $has_recommended_replacevars ) { + return $fallback; + } + + return $page_type; + } + + /** + * Retrieves the recommended replacement variables for the given page type. + * + * @param string $page_type The page type. + * + * @return array The recommended replacement variables. + */ + public function get_recommended_replacevars_for( $page_type ) { + $recommended_replace_vars = $this->get_recommended_replacevars(); + $has_recommended_replace_vars = $this->has_recommended_replace_vars( $recommended_replace_vars, $page_type ); + + if ( ! $has_recommended_replace_vars ) { + return []; + } + + return $recommended_replace_vars[ $page_type ]; + } + + /** + * Retrieves the recommended replacement variables. + * + * @return array The recommended replacement variables. + */ + public function get_recommended_replacevars() { + /** + * Filter: Adds the possibility to add extra recommended replacement variables. + * + * @param array $additional_replace_vars Empty array to add the replacevars to. + */ + $recommended_replace_vars = apply_filters( 'wpseo_recommended_replace_vars', $this->recommended_replace_vars ); + + if ( ! is_array( $recommended_replace_vars ) ) { + return $this->recommended_replace_vars; + } + + return $recommended_replace_vars; + } + + /** + * Returns whether the given page type has recommended replace vars. + * + * @param array $recommended_replace_vars The recommended replace vars + * to check in. + * @param string $page_type The page type to check. + * + * @return bool True if there are associated recommended replace vars. + */ + private function has_recommended_replace_vars( $recommended_replace_vars, $page_type ) { + if ( ! isset( $recommended_replace_vars[ $page_type ] ) ) { + return false; + } + + if ( ! is_array( $recommended_replace_vars[ $page_type ] ) ) { + return false; + } + + return true; + } + + /** + * Determines whether or not a post is the homepage. + * + * @param WP_Post $post The WordPress global post object. + * + * @return bool True if the given post is the homepage. + */ + private function is_homepage( $post ) { + if ( $post instanceof WP_Post === false ) { + return false; + } + + /* + * The page on front returns a string with normal WordPress interaction, while the post ID is an int. + * This way we make sure we always compare strings. + */ + $post_id = (int) $post->ID; + $page_on_front = (int) get_option( 'page_on_front' ); + + return get_option( 'show_on_front' ) === 'page' && $page_on_front === $post_id; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php new file mode 100644 index 00000000..52fe8fc9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin-user-profile.php @@ -0,0 +1,88 @@ +%s', + $install_url, + $plugin['title'] + ); + } + + /** + * Gets a visually hidden accessible message for links that open in a new browser tab. + * + * @return string The visually hidden accessible message. + */ + public static function get_new_tab_message() { + return sprintf( + '%s', + /* translators: Hidden accessibility text. */ + esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-admin.php b/wp/wp-content/plugins/wordpress-seo/admin/class-admin.php new file mode 100644 index 00000000..a5d09b29 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-admin.php @@ -0,0 +1,403 @@ +register_hooks(); + + if ( is_multisite() ) { + WPSEO_Options::maybe_set_multisite_defaults( false ); + } + + if ( WPSEO_Options::get( 'stripcategorybase' ) === true ) { + add_action( 'created_category', [ $this, 'schedule_rewrite_flush' ] ); + add_action( 'edited_category', [ $this, 'schedule_rewrite_flush' ] ); + add_action( 'delete_category', [ $this, 'schedule_rewrite_flush' ] ); + } + + if ( WPSEO_Options::get( 'disable-attachment' ) === true ) { + add_filter( 'wpseo_accessible_post_types', [ 'WPSEO_Post_Type', 'filter_attachment_post_type' ] ); + } + + add_filter( 'plugin_action_links_' . WPSEO_BASENAME, [ $this, 'add_action_link' ], 10, 2 ); + add_filter( 'network_admin_plugin_action_links_' . WPSEO_BASENAME, [ $this, 'add_action_link' ], 10, 2 ); + + add_action( 'admin_enqueue_scripts', [ $this, 'config_page_scripts' ] ); + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_global_style' ] ); + + add_action( 'after_switch_theme', [ $this, 'switch_theme' ] ); + add_action( 'switch_theme', [ $this, 'switch_theme' ] ); + + add_filter( 'set-screen-option', [ $this, 'save_bulk_edit_options' ], 10, 3 ); + + add_action( 'admin_init', [ 'WPSEO_Plugin_Conflict', 'hook_check_for_plugin_conflicts' ], 10, 1 ); + + add_action( 'admin_init', [ $this, 'map_manage_options_cap' ] ); + + WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'wpseo' ); + WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'home' ); + + if ( YoastSEO()->helpers->current_page->is_yoast_seo_page() ) { + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + $this->set_upsell_notice(); + + $this->initialize_cornerstone_content(); + + if ( WPSEO_Utils::is_plugin_network_active() ) { + $integrations[] = new Yoast_Network_Admin(); + } + + $this->admin_features = [ + 'dashboard_widget' => new Yoast_Dashboard_Widget(), + 'wincher_dashboard_widget' => new Wincher_Dashboard_Widget(), + ]; + + if ( WPSEO_Metabox::is_post_overview( $pagenow ) || WPSEO_Metabox::is_post_edit( $pagenow ) ) { + $this->admin_features['primary_category'] = new WPSEO_Primary_Term_Admin(); + } + + $integrations[] = new WPSEO_Yoast_Columns(); + $integrations[] = new WPSEO_Statistic_Integration(); + $integrations[] = new WPSEO_Capability_Manager_Integration( WPSEO_Capability_Manager_Factory::get() ); + $integrations[] = new WPSEO_Admin_Gutenberg_Compatibility_Notification(); + $integrations[] = new WPSEO_Expose_Shortlinks(); + $integrations[] = new WPSEO_MyYoast_Proxy(); + $integrations[] = new WPSEO_Schema_Person_Upgrade_Notification(); + $integrations[] = new WPSEO_Tracking( 'https://tracking.yoast.com/stats', ( WEEK_IN_SECONDS * 2 ) ); + $integrations[] = new WPSEO_Admin_Settings_Changed_Listener(); + + $integrations = array_merge( + $integrations, + $this->get_admin_features(), + $this->initialize_cornerstone_content() + ); + + foreach ( $integrations as $integration ) { + $integration->register_hooks(); + } + } + + /** + * Schedules a rewrite flush to happen at shutdown. + * + * @return void + */ + public function schedule_rewrite_flush() { + // Bail if this is a multisite installation and the site has been switched. + if ( is_multisite() && ms_is_switched() ) { + return; + } + + add_action( 'shutdown', 'flush_rewrite_rules' ); + } + + /** + * Returns all the classes for the admin features. + * + * @return array + */ + public function get_admin_features() { + return $this->admin_features; + } + + /** + * Register assets needed on admin pages. + * + * @return void + */ + public function enqueue_assets() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form data. + $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; + if ( $page === 'wpseo_licenses' ) { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'extensions' ); + } + } + + /** + * Returns the manage_options capability. + * + * @return string The capability to use. + */ + public function get_manage_options_cap() { + /** + * Filter: 'wpseo_manage_options_capability' - Allow changing the capability users need to view the settings pages. + * + * @param string $capability The capability. + */ + return apply_filters( 'wpseo_manage_options_capability', 'wpseo_manage_options' ); + } + + /** + * Maps the manage_options cap on saving an options page to wpseo_manage_options. + * + * @return void + */ + public function map_manage_options_cap() { + // phpcs:ignore WordPress.Security -- The variable is only used in strpos and thus safe to not unslash or sanitize. + $option_page = ! empty( $_POST['option_page'] ) ? $_POST['option_page'] : ''; + + if ( strpos( $option_page, 'yoast_wpseo' ) === 0 || strpos( $option_page, Settings_Integration::PAGE ) === 0 ) { + add_filter( 'option_page_capability_' . $option_page, [ $this, 'get_manage_options_cap' ] ); + } + } + + /** + * Adds the ability to choose how many posts are displayed per page + * on the bulk edit pages. + * + * @return void + */ + public function bulk_edit_options() { + $option = 'per_page'; + $args = [ + 'label' => __( 'Posts', 'wordpress-seo' ), + 'default' => 10, + 'option' => 'wpseo_posts_per_page', + ]; + add_screen_option( $option, $args ); + } + + /** + * Saves the posts per page limit for bulk edit pages. + * + * @param int $status Status value to pass through. + * @param string $option Option name. + * @param int $value Count value to check. + * + * @return int + */ + public function save_bulk_edit_options( $status, $option, $value ) { + if ( $option && ( $value > 0 && $value < 1000 ) === 'wpseo_posts_per_page' ) { + return $value; + } + + return $status; + } + + /** + * Adds links to Premium Support and FAQ under the plugin in the plugin overview page. + * + * @param array $links Array of links for the plugins, adapted when the current plugin is found. + * @param string $file The filename for the current plugin, which the filter loops through. + * + * @return array + */ + public function add_action_link( $links, $file ) { + $first_time_configuration_notice_helper = YoastSEO()->helpers->first_time_configuration_notice; + + if ( $file === WPSEO_BASENAME && WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { + if ( is_network_admin() ) { + $settings_url = network_admin_url( 'admin.php?page=' . self::PAGE_IDENTIFIER ); + } + else { + $settings_url = admin_url( 'admin.php?page=' . self::PAGE_IDENTIFIER ); + } + $settings_link = '' . __( 'Settings', 'wordpress-seo' ) . ''; + array_unshift( $links, $settings_link ); + } + + // Add link to docs. + $faq_link = '' . __( 'FAQ', 'wordpress-seo' ) . ''; + array_unshift( $links, $faq_link ); + + if ( $first_time_configuration_notice_helper->first_time_configuration_not_finished() && ! is_network_admin() ) { + $configuration_title = ( ! $first_time_configuration_notice_helper->should_show_alternate_message() ) ? 'first-time configuration' : 'SEO configuration'; + /* translators: CTA to finish the first time configuration. %s: Either first-time SEO configuration or SEO configuration. */ + $message = sprintf( __( 'Finish your %s', 'wordpress-seo' ), $configuration_title ); + $ftc_link = '' . $message . ''; + array_unshift( $links, $ftc_link ); + } + + $addon_manager = new WPSEO_Addon_Manager(); + if ( YoastSEO()->helpers->product->is_premium() ) { + + // Remove Free 'deactivate' link if Premium is active as well. We don't want users to deactivate Free when Premium is active. + unset( $links['deactivate'] ); + $no_deactivation_explanation = '' . sprintf( + /* translators: %s expands to Yoast SEO Premium. */ + __( 'Required by %s', 'wordpress-seo' ), + 'Yoast SEO Premium' + ) . ''; + + array_unshift( $links, $no_deactivation_explanation ); + + if ( $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ) ) { + return $links; + } + + // Add link to where premium can be activated. + $activation_link = '' . __( 'Activate your subscription', 'wordpress-seo' ) . ''; + array_unshift( $links, $activation_link ); + + return $links; + } + + // Add link to premium landing page. + $premium_link = '' . __( 'Get Premium', 'wordpress-seo' ) . ''; + array_unshift( $links, $premium_link ); + + return $links; + } + + /** + * Enqueues the (tiny) global JS needed for the plugin. + * + * @return void + */ + public function config_page_scripts() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_script( 'admin-global' ); + $asset_manager->localize_script( 'admin-global', 'wpseoAdminGlobalL10n', $this->localize_admin_global_script() ); + } + + /** + * Enqueues the (tiny) global stylesheet needed for the plugin. + * + * @return void + */ + public function enqueue_global_style() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'admin-global' ); + } + + /** + * Filter the $contactmethods array and add a set of social profiles. + * + * These are used with the Facebook author, rel="author" and Twitter cards implementation. + * + * @deprecated 22.6 + * @codeCoverageIgnore + * + * @param array $contactmethods Currently set contactmethods. + * + * @return array Contactmethods with added contactmethods. + */ + public function update_contactmethods( $contactmethods ) { + _deprecated_function( __METHOD__, 'Yoast SEO 22.6' ); + + $contactmethods['facebook'] = __( 'Facebook profile URL', 'wordpress-seo' ); + $contactmethods['instagram'] = __( 'Instagram profile URL', 'wordpress-seo' ); + $contactmethods['linkedin'] = __( 'LinkedIn profile URL', 'wordpress-seo' ); + $contactmethods['myspace'] = __( 'MySpace profile URL', 'wordpress-seo' ); + $contactmethods['pinterest'] = __( 'Pinterest profile URL', 'wordpress-seo' ); + $contactmethods['soundcloud'] = __( 'SoundCloud profile URL', 'wordpress-seo' ); + $contactmethods['tumblr'] = __( 'Tumblr profile URL', 'wordpress-seo' ); + $contactmethods['twitter'] = __( 'X username (without @)', 'wordpress-seo' ); + $contactmethods['youtube'] = __( 'YouTube profile URL', 'wordpress-seo' ); + $contactmethods['wikipedia'] = __( 'Wikipedia page about you', 'wordpress-seo' ) . '
      ' . __( '(if one exists)', 'wordpress-seo' ) . ''; + + return $contactmethods; + } + + /** + * Log the updated timestamp for user profiles when theme is changed. + * + * @return void + */ + public function switch_theme() { + + $users = get_users( [ 'capability' => [ 'edit_posts' ] ] ); + + if ( is_array( $users ) && $users !== [] ) { + foreach ( $users as $user ) { + update_user_meta( $user->ID, '_yoast_wpseo_profile_updated', time() ); + } + } + } + + /** + * Localization for the dismiss urls. + * + * @return array + */ + private function localize_admin_global_script() { + return array_merge( + [ + 'isRtl' => is_rtl(), + 'variable_warning' => sprintf( + /* translators: %1$s: '%%term_title%%' variable used in titles and meta's template that's not compatible with the given template, %2$s: expands to 'HelpScout beacon' */ + __( 'Warning: the variable %1$s cannot be used in this template. See the %2$s for more info.', 'wordpress-seo' ), + '%s', + 'HelpScout beacon' + ), + /* translators: %s: expends to Yoast SEO */ + 'help_video_iframe_title' => sprintf( __( '%s video tutorial', 'wordpress-seo' ), 'Yoast SEO' ), + 'scrollable_table_hint' => __( 'Scroll to see the table content.', 'wordpress-seo' ), + 'wincher_is_logged_in' => WPSEO_Options::get( 'wincher_integration_active', true ) ? YoastSEO()->helpers->wincher->login_status() : false, + ], + YoastSEO()->helpers->wincher->get_admin_global_links() + ); + } + + /** + * Sets the upsell notice. + * + * @return void + */ + protected function set_upsell_notice() { + $upsell = new WPSEO_Product_Upsell_Notice(); + $upsell->dismiss_notice_listener(); + $upsell->initialize(); + } + + /** + * Whether we are on the admin dashboard page. + * + * @return bool + */ + protected function on_dashboard_page() { + return $GLOBALS['pagenow'] === 'index.php'; + } + + /** + * Loads the cornerstone filter. + * + * @return WPSEO_WordPress_Integration[] The integrations to initialize. + */ + protected function initialize_cornerstone_content() { + if ( ! WPSEO_Options::get( 'enable_cornerstone_content' ) ) { + return []; + } + + return [ + 'cornerstone_filter' => new WPSEO_Cornerstone_Filter(), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-asset.php b/wp/wp-content/plugins/wordpress-seo/admin/class-asset.php new file mode 100644 index 00000000..8cbf0c1f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-asset.php @@ -0,0 +1,255 @@ + [], + 'in_footer' => true, + 'rtl' => true, + 'media' => 'all', + 'version' => '', + 'suffix' => '', + ]; + + /** + * Constructs an instance of the WPSEO_Admin_Asset class. + * + * @param array $args The arguments for this asset. + * + * @throws InvalidArgumentException Throws when no name or src has been provided. + */ + public function __construct( array $args ) { + if ( ! isset( $args['name'] ) ) { + throw new InvalidArgumentException( 'name is a required argument' ); + } + + if ( ! isset( $args['src'] ) ) { + throw new InvalidArgumentException( 'src is a required argument' ); + } + + $args = array_merge( $this->defaults, $args ); + + $this->name = $args['name']; + $this->src = $args['src']; + $this->deps = $args['deps']; + $this->version = $args['version']; + $this->media = $args['media']; + $this->in_footer = $args['in_footer']; + $this->rtl = $args['rtl']; + $this->suffix = $args['suffix']; + } + + /** + * Returns the asset identifier. + * + * @return string + */ + public function get_name() { + return $this->name; + } + + /** + * Returns the path to the asset. + * + * @return string + */ + public function get_src() { + return $this->src; + } + + /** + * Returns the asset dependencies. + * + * @return array|string + */ + public function get_deps() { + return $this->deps; + } + + /** + * Returns the asset version. + * + * @return string|null + */ + public function get_version() { + if ( ! empty( $this->version ) ) { + return $this->version; + } + + return null; + } + + /** + * Returns the media type for CSS assets. + * + * @return string + */ + public function get_media() { + return $this->media; + } + + /** + * Returns whether a script asset should be loaded in the footer of the page. + * + * @return bool + */ + public function is_in_footer() { + return $this->in_footer; + } + + /** + * Returns whether this CSS has a RTL counterpart. + * + * @return bool + */ + public function has_rtl() { + return $this->rtl; + } + + /** + * Returns the file suffix. + * + * @return string + */ + public function get_suffix() { + return $this->suffix; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php b/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php new file mode 100644 index 00000000..3b65304b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-description-editor-list-table.php @@ -0,0 +1,80 @@ + 'wpseo_bulk_description', + 'plural' => 'wpseo_bulk_descriptions', + 'ajax' => true, + ]; + + /** + * The field in the database where meta field is saved. + * + * @var string + */ + protected $target_db_field = 'metadesc'; + + /** + * The columns shown on the table. + * + * @return array + */ + public function get_columns() { + $columns = [ + 'col_existing_yoast_seo_metadesc' => __( 'Existing Yoast Meta Description', 'wordpress-seo' ), + 'col_new_yoast_seo_metadesc' => __( 'New Yoast Meta Description', 'wordpress-seo' ), + ]; + + return $this->merge_columns( $columns ); + } + + /** + * Parse the metadescription. + * + * @param string $column_name Column name. + * @param object $record Data object. + * @param string $attributes HTML attributes. + * + * @return string + */ + protected function parse_page_specific_column( $column_name, $record, $attributes ) { + switch ( $column_name ) { + case 'col_new_yoast_seo_metadesc': + return sprintf( + '', + esc_attr( 'wpseo-new-metadesc-' . $record->ID ), + esc_attr( $record->ID ) + ); + + case 'col_existing_yoast_seo_metadesc': + // @todo Inconsistent return/echo behavior R. + // I traced the escaping of the attributes to WPSEO_Bulk_List_Table::column_attributes. Alexander. + // The output of WPSEO_Bulk_List_Table::parse_meta_data_field is properly escaped. + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + echo $this->parse_meta_data_field( $record->ID, $attributes ); + break; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php b/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php new file mode 100644 index 00000000..6c5b0798 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-editor-list-table.php @@ -0,0 +1,1049 @@ +page_type) there will be constructed an url part, for subpages and + * navigation. + * + * @var string + */ + protected $page_url; + + /** + * The settings which will be used in the __construct. + * + * @var array + */ + protected $settings; + + /** + * Holds the pagination config. + * + * @var array + */ + protected $pagination = []; + + /** + * Holds the sanitized data from the user input. + * + * @var array + */ + protected $input_fields = []; + + /** + * The field in the database where meta field is saved. + * + * Should be set in the child class. + * + * @var string + */ + protected $target_db_field = ''; + + /** + * Class constructor. + * + * @param array $args The arguments. + */ + public function __construct( $args = [] ) { + parent::__construct( $this->settings ); + + $args = wp_parse_args( + $args, + [ + 'nonce' => '', + 'input_fields' => [], + ] + ); + + $this->input_fields = $args['input_fields']; + if ( isset( $_SERVER['REQUEST_URI'] ) ) { + $this->request_url = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ); + } + + $this->current_page = ( ! empty( $this->input_fields['paged'] ) ) ? $this->input_fields['paged'] : 1; + $this->current_filter = ( ! empty( $this->input_fields['post_type_filter'] ) ) ? $this->input_fields['post_type_filter'] : 1; + $this->current_status = ( ! empty( $this->input_fields['post_status'] ) ) ? $this->input_fields['post_status'] : 1; + $this->current_order = [ + 'order' => ( ! empty( $this->input_fields['order'] ) ) ? $this->input_fields['order'] : 'asc', + 'orderby' => ( ! empty( $this->input_fields['orderby'] ) ) ? $this->input_fields['orderby'] : 'post_title', + ]; + + $this->nonce = $args['nonce']; + $this->page_url = "&nonce={$this->nonce}&type={$this->page_type}#top#{$this->page_type}"; + + $this->populate_editable_post_types(); + } + + /** + * Prepares the data and renders the page. + * + * @return void + */ + public function show_page() { + $this->prepare_page_navigation(); + $this->prepare_items(); + + $this->views(); + $this->display(); + } + + /** + * Used in the constructor to build a reference list of post types the current user can edit. + * + * @return void + */ + protected function populate_editable_post_types() { + $post_types = get_post_types( + [ + 'public' => true, + 'exclude_from_search' => false, + ], + 'object' + ); + + $this->all_posts = []; + $this->own_posts = []; + + if ( is_array( $post_types ) && $post_types !== [] ) { + foreach ( $post_types as $post_type ) { + if ( ! current_user_can( $post_type->cap->edit_posts ) ) { + continue; + } + + if ( current_user_can( $post_type->cap->edit_others_posts ) ) { + $this->all_posts[] = esc_sql( $post_type->name ); + } + else { + $this->own_posts[] = esc_sql( $post_type->name ); + } + } + } + } + + /** + * Will show the navigation for the table like page navigation and page filter. + * + * @param string $which Table nav location (such as top). + * + * @return void + */ + public function display_tablenav( $which ) { + // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $post_status = isset( $_GET['post_status'] ) && is_string( $_GET['post_status'] ) ? sanitize_text_field( wp_unslash( $_GET['post_status'] ) ) : ''; + $order_by = isset( $_GET['orderby'] ) && is_string( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : ''; + $order = isset( $_GET['order'] ) && is_string( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : ''; + $post_type_filter = isset( $_GET['post_type_filter'] ) && is_string( $_GET['post_type_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['post_type_filter'] ) ) : ''; + // phpcs:enable WordPress.Security.NonceVerification.Recommended; + ?> +
      + + +
      + + + + + + + + + + + + + extra_tablenav( $which ); + $this->pagination( $which ); + ?> + +
      + +
      + +
      + + prepare(), + * passing the current user_id in as the first parameter. + */ + public function get_base_subquery() { + global $wpdb; + + $all_posts_string = "'" . implode( "', '", $this->all_posts ) . "'"; + $own_posts_string = "'" . implode( "', '", $this->own_posts ) . "'"; + + $post_author = esc_sql( (int) get_current_user_id() ); + + $subquery = "( + SELECT * + FROM {$wpdb->posts} + WHERE post_type IN ({$all_posts_string}) + UNION ALL + SELECT * + FROM {$wpdb->posts} + WHERE post_type IN ({$own_posts_string}) AND post_author = {$post_author} + ) sub_base"; + + return $subquery; + } + + /** + * Gets the views. + * + * @return array The views. + */ + public function get_views() { + global $wpdb; + + $status_links = []; + + $states = get_post_stati( [ 'show_in_admin_all_list' => true ] ); + $subquery = $this->get_base_subquery(); + + $total_posts = $wpdb->get_var( + $wpdb->prepare( + "SELECT COUNT(ID) FROM {$subquery} + WHERE post_status IN (" + . implode( ', ', array_fill( 0, count( $states ), '%s' ) ) + . ')', + $states + ) + ); + + $post_status = isset( $_GET['post_status'] ) && is_string( $_GET['post_status'] ) ? sanitize_text_field( wp_unslash( $_GET['post_status'] ) ) : ''; + $current_link_attributes = empty( $post_status ) ? ' class="current" aria-current="page"' : ''; + $localized_text = sprintf( + /* translators: %s expands to the number of posts in localized format. */ + _nx( 'All (%s)', 'All (%s)', $total_posts, 'posts', 'wordpress-seo' ), + number_format_i18n( $total_posts ) + ); + + $status_links['all'] = '' . $localized_text . ''; + + $post_stati = get_post_stati( [ 'show_in_admin_all_list' => true ], 'objects' ); + if ( is_array( $post_stati ) && $post_stati !== [] ) { + foreach ( $post_stati as $status ) { + + $status_name = esc_sql( $status->name ); + + $total = (int) $wpdb->get_var( + $wpdb->prepare( + " + SELECT COUNT(ID) FROM {$subquery} + WHERE post_status = %s + ", + $status_name + ) + ); + + if ( $total === 0 ) { + continue; + } + + $current_link_attributes = ''; + if ( $status_name === $post_status ) { + $current_link_attributes = ' class="current" aria-current="page"'; + } + + $status_links[ $status_name ] = '' . sprintf( translate_nooped_plural( $status->label_count, $total ), number_format_i18n( $total ) ) . ''; + } + } + unset( $post_stati, $status, $status_name, $total, $current_link_attributes ); + + $trashed_posts = $wpdb->get_var( + "SELECT COUNT(ID) FROM {$subquery} + WHERE post_status IN ('trash') + " + ); + + $current_link_attributes = ''; + if ( $post_status === 'trash' ) { + $current_link_attributes = 'class="current" aria-current="page"'; + } + + $localized_text = sprintf( + /* translators: %s expands to the number of trashed posts in localized format. */ + _nx( 'Trash (%s)', 'Trash (%s)', $trashed_posts, 'posts', 'wordpress-seo' ), + number_format_i18n( $trashed_posts ) + ); + + $status_links['trash'] = '' . $localized_text . ''; + + return $status_links; + } + + /** + * Outputs extra table navigation. + * + * @param string $which Table nav location (such as top). + * + * @return void + */ + public function extra_tablenav( $which ) { + + if ( $which === 'top' ) { + $post_types = get_post_types( + [ + 'public' => true, + 'exclude_from_search' => false, + ] + ); + + $instance_type = esc_attr( $this->page_type ); + + if ( is_array( $post_types ) && $post_types !== [] ) { + global $wpdb; + + echo '
      '; + + $post_types = esc_sql( $post_types ); + $post_types = "'" . implode( "', '", $post_types ) . "'"; + + $states = get_post_stati( [ 'show_in_admin_all_list' => true ] ); + $states['trash'] = 'trash'; + + $subquery = $this->get_base_subquery(); + + $post_types = $wpdb->get_results( + $wpdb->prepare( + "SELECT DISTINCT post_type FROM {$subquery} + WHERE post_status IN (" + . implode( ', ', array_fill( 0, count( $states ), '%s' ) ) + . ') ORDER BY post_type ASC', + $states + ) + ); + + $post_type_filter = isset( $_GET['post_type_filter'] ) && is_string( $_GET['post_type_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['post_type_filter'] ) ) : ''; + $selected = ( ! empty( $post_type_filter ) ) ? $post_type_filter : '-1'; + + $options = ''; + + if ( is_array( $post_types ) && $post_types !== [] ) { + foreach ( $post_types as $post_type ) { + $obj = get_post_type_object( $post_type->post_type ); + $options .= sprintf( + '', + esc_html( $obj->labels->name ), + esc_attr( $post_type->post_type ), + selected( $selected, $post_type->post_type, false ) + ); + } + } + + printf( + '', + esc_attr( 'post-type-filter-' . $instance_type ), + /* translators: Hidden accessibility text. */ + esc_html__( 'Filter by content type', 'wordpress-seo' ) + ); + printf( + '', + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $options is properly escaped above. + $options, + esc_attr( 'post-type-filter-' . $instance_type ) + ); + + submit_button( esc_html__( 'Filter', 'wordpress-seo' ), 'button', false, false, [ 'id' => 'post-query-submit' ] ); + echo '
      '; + } + } + } + + /** + * Gets a list of sortable columns. + * + * The format is: 'internal-name' => array( 'orderby', bool ). + * + * @return array + */ + public function get_sortable_columns() { + return [ + 'col_page_title' => [ 'post_title', true ], + 'col_post_type' => [ 'post_type', false ], + 'col_post_date' => [ 'post_date', false ], + ]; + } + + /** + * Sets the correct pagenumber and pageurl for the navigation. + * + * @return void + */ + public function prepare_page_navigation() { + + $request_url = $this->request_url . $this->page_url; + + $current_page = $this->current_page; + $current_filter = $this->current_filter; + $current_status = $this->current_status; + $current_order = $this->current_order; + + /* + * If current type doesn't compare with objects page_type, then we have to unset + * some vars in the requested url (which will be used for internal table urls). + */ + if ( isset( $this->input_fields['type'] ) && $this->input_fields['type'] !== $this->page_type ) { + $request_url = remove_query_arg( 'paged', $request_url ); // Page will be set with value 1 below. + $request_url = remove_query_arg( 'post_type_filter', $request_url ); + $request_url = remove_query_arg( 'post_status', $request_url ); + $request_url = remove_query_arg( 'orderby', $request_url ); + $request_url = remove_query_arg( 'order', $request_url ); + $request_url = add_query_arg( 'pages', 1, $request_url ); + + $current_page = 1; + $current_filter = '-1'; + $current_status = ''; + $current_order = [ + 'orderby' => 'post_title', + 'order' => 'asc', + ]; + } + + $_SERVER['REQUEST_URI'] = $request_url; + + $_GET['paged'] = $current_page; + $_REQUEST['paged'] = $current_page; + $_REQUEST['post_type_filter'] = $current_filter; + $_GET['post_type_filter'] = $current_filter; + $_GET['post_status'] = $current_status; + $_GET['orderby'] = $current_order['orderby']; + $_GET['order'] = $current_order['order']; + } + + /** + * Preparing the requested pagerows and setting the needed variables. + * + * @return void + */ + public function prepare_items() { + + $post_type_clause = $this->get_post_type_clause(); + $all_states = $this->get_all_states(); + $subquery = $this->get_base_subquery(); + + // Setting the column headers. + $this->set_column_headers(); + + // Count the total number of needed items and setting pagination given $total_items. + $total_items = $this->count_items( $subquery, $all_states, $post_type_clause ); + $this->set_pagination( $total_items ); + + // Getting items given $query. + $query = $this->parse_item_query( $subquery, $all_states, $post_type_clause ); + $this->get_items( $query ); + + // Get the metadata for the current items ($this->items). + $this->get_meta_data(); + } + + /** + * Getting the columns for first row. + * + * @return array + */ + public function get_columns() { + return $this->merge_columns(); + } + + /** + * Setting the column headers. + * + * @return void + */ + protected function set_column_headers() { + $columns = $this->get_columns(); + $hidden = []; + $sortable = $this->get_sortable_columns(); + $this->_column_headers = [ $columns, $hidden, $sortable ]; + } + + /** + * Counting total items. + * + * @param string $subquery SQL FROM part. + * @param string $all_states SQL IN part. + * @param string $post_type_clause SQL post type part. + * + * @return mixed + */ + protected function count_items( $subquery, $all_states, $post_type_clause ) { + global $wpdb; + + return (int) $wpdb->get_var( + "SELECT COUNT(ID) FROM {$subquery} + WHERE post_status IN ({$all_states}) + {$post_type_clause} + " + ); + } + + /** + * Getting the post_type_clause filter. + * + * @return string + */ + protected function get_post_type_clause() { + // Filter Block. + $post_type_clause = ''; + $post_type_filter = isset( $_GET['post_type_filter'] ) && is_string( $_GET['post_type_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['post_type_filter'] ) ) : ''; + + if ( ! empty( $post_type_filter ) && get_post_type_object( $post_type_filter ) ) { + $post_types = esc_sql( $post_type_filter ); + $post_type_clause = "AND post_type IN ('{$post_types}')"; + } + + return $post_type_clause; + } + + /** + * Setting the pagination. + * + * Total items is the number of all visible items. + * + * @param int $total_items Total items counts. + * + * @return void + */ + protected function set_pagination( $total_items ) { + // Calculate items per page. + $per_page = $this->get_items_per_page( 'wpseo_posts_per_page', 10 ); + $paged = isset( $_GET['paged'] ) && is_string( $_GET['paged'] ) ? esc_sql( sanitize_text_field( wp_unslash( $_GET['paged'] ) ) ) : ''; + + if ( empty( $paged ) || ! is_numeric( $paged ) ) { + $paged = 1; + } + else { + $paged = (int) $paged; + } + + if ( $paged <= 0 ) { + $paged = 1; + } + + $this->set_pagination_args( + [ + 'total_items' => $total_items, + 'total_pages' => ceil( $total_items / $per_page ), + 'per_page' => $per_page, + ] + ); + + $this->pagination = [ + 'per_page' => $per_page, + 'offset' => ( ( $paged - 1 ) * $per_page ), + ]; + } + + /** + * Parse the query to get items from database. + * + * Based on given parameters there will be parse a query which will get all the pages/posts and other post_types + * from the database. + * + * @param string $subquery SQL FROM part. + * @param string $all_states SQL IN part. + * @param string $post_type_clause SQL post type part. + * + * @return string + */ + protected function parse_item_query( $subquery, $all_states, $post_type_clause ) { + // Order By block. + $orderby = isset( $_GET['orderby'] ) && is_string( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : ''; + + $orderby = ! empty( $orderby ) ? esc_sql( $orderby ) : 'post_title'; + $orderby = $this->sanitize_orderby( $orderby ); + + // Order clause. + $order = isset( $_GET['order'] ) && is_string( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : ''; + $order = ! empty( $order ) ? esc_sql( strtoupper( $order ) ) : 'ASC'; + $order = $this->sanitize_order( $order ); + + // Get all needed results. + $query = " + SELECT ID, post_title, post_type, post_status, post_modified, post_date + FROM {$subquery} + WHERE post_status IN ({$all_states}) $post_type_clause + ORDER BY {$orderby} {$order} + LIMIT %d,%d + "; + + return $query; + } + + /** + * Heavily restricts the possible columns by which a user can order the table + * in the bulk editor, thereby preventing a possible CSRF vulnerability. + * + * @param string $orderby The column by which we want to order. + * + * @return string + */ + protected function sanitize_orderby( $orderby ) { + $valid_column_names = [ + 'post_title', + 'post_type', + 'post_date', + ]; + + if ( in_array( $orderby, $valid_column_names, true ) ) { + return $orderby; + } + + return 'post_title'; + } + + /** + * Makes sure the order clause is always ASC or DESC for the bulk editor table, + * thereby preventing a possible CSRF vulnerability. + * + * @param string $order Whether we want to sort ascending or descending. + * + * @return string SQL order string (ASC, DESC). + */ + protected function sanitize_order( $order ) { + if ( in_array( strtoupper( $order ), [ 'ASC', 'DESC' ], true ) ) { + return $order; + } + + return 'ASC'; + } + + /** + * Getting all the items. + * + * @param string $query SQL query to use. + * + * @return void + */ + protected function get_items( $query ) { + global $wpdb; + + $this->items = $wpdb->get_results( + $wpdb->prepare( + $query, + $this->pagination['offset'], + $this->pagination['per_page'] + ) + ); + } + + /** + * Getting all the states. + * + * @return string + */ + protected function get_all_states() { + global $wpdb; + + $states = get_post_stati( [ 'show_in_admin_all_list' => true ] ); + $states['trash'] = 'trash'; + + if ( ! empty( $this->input_fields['post_status'] ) ) { + $requested_state = $this->input_fields['post_status']; + if ( in_array( $requested_state, $states, true ) ) { + $states = [ $requested_state ]; + } + + if ( $requested_state !== 'trash' ) { + unset( $states['trash'] ); + } + } + + return $wpdb->prepare( + implode( ', ', array_fill( 0, count( $states ), '%s' ) ), + $states + ); + } + + /** + * Based on $this->items and the defined columns, the table rows will be displayed. + * + * @return void + */ + public function display_rows() { + + $records = $this->items; + + list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); + + if ( ( is_array( $records ) && $records !== [] ) && ( is_array( $columns ) && $columns !== [] ) ) { + + foreach ( $records as $record ) { + + echo ''; + + foreach ( $columns as $column_name => $column_display_name ) { + + $classes = ''; + if ( $primary === $column_name ) { + $classes .= ' has-row-actions column-primary'; + } + + $attributes = $this->column_attributes( $column_name, $hidden, $classes, $column_display_name ); + + $column_value = $this->parse_column( $column_name, $record ); + + if ( method_exists( $this, 'parse_page_specific_column' ) && empty( $column_value ) ) { + $column_value = $this->parse_page_specific_column( $column_name, $record, $attributes ); + } + + if ( ! empty( $column_value ) ) { + printf( '%1$s', $column_value, $attributes ); + } + } + + echo ''; + } + } + } + + /** + * Getting the attributes for each table cell. + * + * @param string $column_name Column name string. + * @param array $hidden Set of hidden columns. + * @param string $classes Additional CSS classes. + * @param string $column_display_name Column display name string. + * + * @return string + */ + protected function column_attributes( $column_name, $hidden, $classes, $column_display_name ) { + + $attributes = ''; + $class = [ $column_name, "column-$column_name$classes" ]; + + if ( in_array( $column_name, $hidden, true ) ) { + $class[] = 'hidden'; + } + + if ( ! empty( $class ) ) { + $attributes = 'class="' . esc_attr( implode( ' ', $class ) ) . '"'; + } + + $attributes .= ' data-colname="' . esc_attr( $column_display_name ) . '"'; + + return $attributes; + } + + /** + * Parsing the title. + * + * @param WP_Post $rec Post object. + * + * @return string + */ + protected function parse_page_title_column( $rec ) { + + $title = empty( $rec->post_title ) ? __( '(no title)', 'wordpress-seo' ) : $rec->post_title; + + $return = sprintf( '%1$s', stripslashes( wp_strip_all_tags( $title ) ) ); + + $post_type_object = get_post_type_object( $rec->post_type ); + $can_edit_post = current_user_can( $post_type_object->cap->edit_post, $rec->ID ); + + $actions = []; + + if ( $can_edit_post && $rec->post_status !== 'trash' ) { + $actions['edit'] = sprintf( + '%s', + esc_url( get_edit_post_link( $rec->ID, true ) ), + /* translators: Hidden accessibility text; %s: post title. */ + esc_attr( sprintf( __( 'Edit “%s”', 'wordpress-seo' ), $title ) ), + __( 'Edit', 'wordpress-seo' ) + ); + } + + if ( $post_type_object->public ) { + if ( in_array( $rec->post_status, [ 'pending', 'draft', 'future' ], true ) ) { + if ( $can_edit_post ) { + $actions['view'] = sprintf( + '%s', + esc_url( add_query_arg( 'preview', 'true', get_permalink( $rec->ID ) ) ), + /* translators: Hidden accessibility text; %s: post title. */ + esc_attr( sprintf( __( 'Preview “%s”', 'wordpress-seo' ), $title ) ), + __( 'Preview', 'wordpress-seo' ) + ); + } + } + elseif ( $rec->post_status !== 'trash' ) { + $actions['view'] = sprintf( + '%s', + esc_url( get_permalink( $rec->ID ) ), + /* translators: Hidden accessibility text; %s: post title. */ + esc_attr( sprintf( __( 'View “%s”', 'wordpress-seo' ), $title ) ), + __( 'View', 'wordpress-seo' ) + ); + } + } + + $return .= $this->row_actions( $actions ); + + return $return; + } + + /** + * Parsing the column based on the $column_name. + * + * @param string $column_name Column name. + * @param WP_Post $rec Post object. + * + * @return string + */ + protected function parse_column( $column_name, $rec ) { + + static $date_format; + + if ( ! isset( $date_format ) ) { + $date_format = get_option( 'date_format' ); + } + + switch ( $column_name ) { + case 'col_page_title': + $column_value = $this->parse_page_title_column( $rec ); + break; + + case 'col_page_slug': + $permalink = get_permalink( $rec->ID ); + $display_slug = str_replace( get_bloginfo( 'url' ), '', $permalink ); + $column_value = sprintf( '%1$s', stripslashes( rawurldecode( $display_slug ) ), esc_url( $permalink ) ); + break; + + case 'col_post_type': + $post_type = get_post_type_object( $rec->post_type ); + $column_value = $post_type->labels->singular_name; + break; + + case 'col_post_status': + $post_status = get_post_status_object( $rec->post_status ); + $column_value = $post_status->label; + break; + + case 'col_post_date': + $column_value = date_i18n( $date_format, strtotime( $rec->post_date ) ); + break; + + case 'col_row_action': + $column_value = sprintf( + '%2$s %3$s', + $rec->ID, + esc_html__( 'Save', 'wordpress-seo' ), + esc_html__( 'Save all', 'wordpress-seo' ) + ); + break; + } + + if ( ! empty( $column_value ) ) { + return $column_value; + } + } + + /** + * Parse the field where the existing meta-data value is displayed. + * + * @param int $record_id Record ID. + * @param string $attributes HTML attributes. + * @param bool|array $values Optional values data array. + * + * @return string + */ + protected function parse_meta_data_field( $record_id, $attributes, $values = false ) { + + // Fill meta data if exists in $this->meta_data. + $meta_data = ( ! empty( $this->meta_data[ $record_id ] ) ) ? $this->meta_data[ $record_id ] : []; + $meta_key = WPSEO_Meta::$meta_prefix . $this->target_db_field; + $meta_value = ( ! empty( $meta_data[ $meta_key ] ) ) ? $meta_data[ $meta_key ] : ''; + + if ( ! empty( $values ) ) { + $meta_value = $values[ $meta_value ]; + } + + $id = "wpseo-existing-$this->target_db_field-$record_id"; + + // $attributes correctly escaped, verified by Alexander. See WPSEO_Bulk_Description_List_Table::parse_page_specific_column. + return sprintf( '%1$s', esc_html( $meta_value ), $attributes, esc_attr( $id ) ); + } + + /** + * Method for setting the meta data, which belongs to the records that will be shown on the current page. + * + * This method will loop through the current items ($this->items) for getting the post_id. With this data + * ($needed_ids) the method will query the meta-data table for getting the title. + * + * @return void + */ + protected function get_meta_data() { + + $post_ids = $this->get_post_ids(); + $meta_data = $this->get_meta_data_result( $post_ids ); + + $this->parse_meta_data( $meta_data ); + + // Little housekeeping. + unset( $post_ids, $meta_data ); + } + + /** + * Getting all post_ids from to $this->items. + * + * @return array + */ + protected function get_post_ids() { + $post_ids = []; + foreach ( $this->items as $item ) { + $post_ids[] = $item->ID; + } + + return $post_ids; + } + + /** + * Getting the meta_data from database. + * + * @param array $post_ids Post IDs for SQL IN part. + * + * @return mixed + */ + protected function get_meta_data_result( array $post_ids ) { + global $wpdb; + + $where = $wpdb->prepare( + 'post_id IN (' . implode( ', ', array_fill( 0, count( $post_ids ), '%d' ) ) . ')', + $post_ids + ); + + $where .= $wpdb->prepare( ' AND meta_key = %s', WPSEO_Meta::$meta_prefix . $this->target_db_field ); + + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- They are prepared on the lines above. + return $wpdb->get_results( "SELECT * FROM {$wpdb->postmeta} WHERE {$where}" ); + } + + /** + * Setting $this->meta_data. + * + * @param array $meta_data Meta data set. + * + * @return void + */ + protected function parse_meta_data( $meta_data ) { + + foreach ( $meta_data as $row ) { + $this->meta_data[ $row->post_id ][ $row->meta_key ] = $row->meta_value; + } + } + + /** + * This method will merge general array with given parameter $columns. + * + * @param array $columns Optional columns set. + * + * @return array + */ + protected function merge_columns( $columns = [] ) { + $columns = array_merge( + [ + 'col_page_title' => __( 'WP Page Title', 'wordpress-seo' ), + 'col_post_type' => __( 'Content Type', 'wordpress-seo' ), + 'col_post_status' => __( 'Post Status', 'wordpress-seo' ), + 'col_post_date' => __( 'Publication date', 'wordpress-seo' ), + 'col_page_slug' => __( 'Page URL/Slug', 'wordpress-seo' ), + ], + $columns + ); + + $columns['col_row_action'] = __( 'Action', 'wordpress-seo' ); + + return $columns; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php b/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php new file mode 100644 index 00000000..5314fdb5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-bulk-title-editor-list-table.php @@ -0,0 +1,89 @@ + 'wpseo_bulk_title', + 'plural' => 'wpseo_bulk_titles', + 'ajax' => true, + ]; + + /** + * The field in the database where meta field is saved. + * + * @var string + */ + protected $target_db_field = 'title'; + + /** + * The columns shown on the table. + * + * @return array + */ + public function get_columns() { + + $columns = [ + /* translators: %1$s expands to Yoast SEO */ + 'col_existing_yoast_seo_title' => sprintf( __( 'Existing %1$s Title', 'wordpress-seo' ), 'Yoast SEO' ), + /* translators: %1$s expands to Yoast SEO */ + 'col_new_yoast_seo_title' => sprintf( __( 'New %1$s Title', 'wordpress-seo' ), 'Yoast SEO' ), + ]; + + return $this->merge_columns( $columns ); + } + + /** + * Parse the title columns. + * + * @param string $column_name Column name. + * @param object $record Data object. + * @param string $attributes HTML attributes. + * + * @return string + */ + protected function parse_page_specific_column( $column_name, $record, $attributes ) { + + // Fill meta data if exists in $this->meta_data. + $meta_data = ( ! empty( $this->meta_data[ $record->ID ] ) ) ? $this->meta_data[ $record->ID ] : []; + + switch ( $column_name ) { + case 'col_existing_yoast_seo_title': + // @todo Inconsistent return/echo behavior R. + // I traced the escaping of the attributes to WPSEO_Bulk_List_Table::column_attributes. + // The output of WPSEO_Bulk_List_Table::parse_meta_data_field is properly escaped. + // phpcs:ignore WordPress.Security.EscapeOutput + echo $this->parse_meta_data_field( $record->ID, $attributes ); + break; + + case 'col_new_yoast_seo_title': + return sprintf( + '', + 'wpseo-new-title-' . $record->ID, + $record->ID + ); + } + + unset( $meta_data ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-collector.php b/wp/wp-content/plugins/wordpress-seo/admin/class-collector.php new file mode 100644 index 00000000..e49e872c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-collector.php @@ -0,0 +1,54 @@ +collections[] = $collection; + } + + /** + * Collects the data from the collection objects. + * + * @return array The collected data. + */ + public function collect() { + $data = []; + + foreach ( $this->collections as $collection ) { + $data = array_merge( $data, $collection->get() ); + } + + return $data; + } + + /** + * Returns the collected data as a JSON encoded string. + * + * @return false|string The encode string. + */ + public function get_as_json() { + return WPSEO_Utils::format_json_encode( $this->collect() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-config.php b/wp/wp-content/plugins/wordpress-seo/admin/class-config.php new file mode 100644 index 00000000..ca9b2b6a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-config.php @@ -0,0 +1,160 @@ +asset_manager = new WPSEO_Admin_Asset_Manager(); + } + + /** + * Make sure the needed scripts are loaded for admin pages. + * + * @return void + */ + public function init() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; + if ( in_array( $page, [ Settings_Integration::PAGE, Academy_Integration::PAGE, Support_Integration::PAGE ], true ) ) { + // Bail, this is managed in the applicable integration. + return; + } + + add_action( 'admin_enqueue_scripts', [ $this, 'config_page_scripts' ] ); + add_action( 'admin_enqueue_scripts', [ $this, 'config_page_styles' ] ); + } + + /** + * Loads the required styles for the config page. + * + * @return void + */ + public function config_page_styles() { + wp_enqueue_style( 'dashboard' ); + wp_enqueue_style( 'thickbox' ); + wp_enqueue_style( 'global' ); + wp_enqueue_style( 'wp-admin' ); + $this->asset_manager->enqueue_style( 'admin-css' ); + $this->asset_manager->enqueue_style( 'monorepo' ); + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; + if ( $page === 'wpseo_licenses' ) { + $this->asset_manager->enqueue_style( 'tailwind' ); + } + } + + /** + * Loads the required scripts for the config page. + * + * @return void + */ + public function config_page_scripts() { + $this->asset_manager->enqueue_script( 'settings' ); + wp_enqueue_script( 'dashboard' ); + wp_enqueue_script( 'thickbox' ); + + $alert_dismissal_action = YoastSEO()->classes->get( Alert_Dismissal_Action::class ); + $dismissed_alerts = $alert_dismissal_action->all_dismissed(); + $woocommerce_conditional = new WooCommerce_Conditional(); + + $script_data = [ + 'userLanguageCode' => WPSEO_Language_Utils::get_language( get_user_locale() ), + 'dismissedAlerts' => $dismissed_alerts, + 'isRtl' => is_rtl(), + 'isPremium' => YoastSEO()->helpers->product->is_premium(), + 'isWooCommerceActive' => $woocommerce_conditional->is_met(), + 'currentPromotions' => YoastSEO()->classes->get( Promotion_Manager::class )->get_current_promotions(), + 'webinarIntroSettingsUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-settings' ), + 'webinarIntroFirstTimeConfigUrl' => $this->get_webinar_shortlink(), + 'linkParams' => WPSEO_Shortlinker::get_query_params(), + 'pluginUrl' => plugins_url( '', WPSEO_FILE ), + ]; + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; + + if ( in_array( $page, [ WPSEO_Admin::PAGE_IDENTIFIER, 'wpseo_workouts' ], true ) ) { + wp_enqueue_media(); + + $script_data['media'] = [ + 'choose_image' => __( 'Use Image', 'wordpress-seo' ), + ]; + + $script_data['userEditUrl'] = add_query_arg( 'user_id', '{user_id}', admin_url( 'user-edit.php' ) ); + } + + if ( $page === 'wpseo_tools' ) { + $this->enqueue_tools_scripts(); + } + + $this->asset_manager->localize_script( 'settings', 'wpseoScriptData', $script_data ); + $this->asset_manager->enqueue_user_language_script(); + } + + /** + * Enqueues and handles all the tool dependencies. + * + * @return void + */ + private function enqueue_tools_scripts() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $tool = isset( $_GET['tool'] ) && is_string( $_GET['tool'] ) ? sanitize_text_field( wp_unslash( $_GET['tool'] ) ) : ''; + + if ( empty( $tool ) ) { + $this->asset_manager->enqueue_script( 'yoast-seo' ); + } + + if ( $tool === 'bulk-editor' ) { + $this->asset_manager->enqueue_script( 'bulk-editor' ); + } + } + + /** + * Returns the appropriate shortlink for the Webinar. + * + * @return string The shortlink for the Webinar. + */ + private function get_webinar_shortlink() { + if ( YoastSEO()->helpers->product->is_premium() ) { + return WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-first-time-config-premium' ); + } + + return WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-first-time-config' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-database-proxy.php b/wp/wp-content/plugins/wordpress-seo/admin/class-database-proxy.php new file mode 100644 index 00000000..89ec64d3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-database-proxy.php @@ -0,0 +1,309 @@ +table_name = $table_name; + $this->suppress_errors = (bool) $suppress_errors; + $this->is_multisite_table = (bool) $is_multisite_table; + $this->database = $database; + + // If the table prefix was provided, strip it as it's handled automatically. + $table_prefix = $this->get_table_prefix(); + if ( ! empty( $table_prefix ) && strpos( $this->table_name, $table_prefix ) === 0 ) { + $this->table_prefix = substr( $this->table_name, strlen( $table_prefix ) ); + } + + if ( ! $this->is_table_registered() ) { + $this->register_table(); + } + } + + /** + * Inserts data into the database. + * + * @param array $data Data to insert. + * @param array|string|null $format Formats for the data. + * + * @return false|int Total amount of inserted rows or false on error. + */ + public function insert( array $data, $format = null ) { + $this->pre_execution(); + + $result = $this->database->insert( $this->get_table_name(), $data, $format ); + + $this->post_execution(); + + return $result; + } + + /** + * Updates data in the database. + * + * @param array $data Data to update on the table. + * @param array $where Where condition as key => value array. + * @param array|string|null $format Optional. Data prepare format. + * @param array|string|null $where_format Optional. Where prepare format. + * + * @return false|int False when the update request is invalid, int on number of rows changed. + */ + public function update( array $data, array $where, $format = null, $where_format = null ) { + $this->pre_execution(); + + $result = $this->database->update( $this->get_table_name(), $data, $where, $format, $where_format ); + + $this->post_execution(); + + return $result; + } + + /** + * Upserts data in the database. + * + * Performs an insert into and if key is duplicate it will update the existing record. + * + * @param array $data Data to update on the table. + * @param array|null $where Unused. Where condition as key => value array. + * @param array|string|null $format Optional. Data prepare format. + * @param array|string|null $where_format Optional. Where prepare format. + * + * @return false|int False when the upsert request is invalid, int on number of rows changed. + */ + public function upsert( array $data, ?array $where = null, $format = null, $where_format = null ) { + if ( $where_format !== null ) { + _deprecated_argument( __METHOD__, '7.7.0', 'The where_format argument is deprecated' ); + } + + $this->pre_execution(); + + $update = []; + $keys = []; + $columns = array_keys( $data ); + foreach ( $columns as $column ) { + $keys[] = '`' . $column . '`'; + $update[] = sprintf( '`%1$s` = VALUES(`%1$s`)', $column ); + } + + $query = sprintf( + 'INSERT INTO `%1$s` (%2$s) VALUES ( %3$s ) ON DUPLICATE KEY UPDATE %4$s', + $this->get_table_name(), + implode( ', ', $keys ), + implode( ', ', array_fill( 0, count( $data ), '%s' ) ), + implode( ', ', $update ) + ); + + $result = $this->database->query( + $this->database->prepare( + $query, + array_values( $data ) + ) + ); + + $this->post_execution(); + + return $result; + } + + /** + * Deletes a record from the database. + * + * @param array $where Where clauses for the query. + * @param array|string|null $format Formats for the data. + * + * @return false|int + */ + public function delete( array $where, $format = null ) { + $this->pre_execution(); + + $result = $this->database->delete( $this->get_table_name(), $where, $format ); + + $this->post_execution(); + + return $result; + } + + /** + * Executes the given query and returns the results. + * + * @param string $query The query to execute. + * + * @return array|object|null The resultset + */ + public function get_results( $query ) { + $this->pre_execution(); + + $results = $this->database->get_results( $query ); + + $this->post_execution(); + + return $results; + } + + /** + * Creates a table to the database. + * + * @param array $columns The columns to create. + * @param array $indexes The indexes to use. + * + * @return bool True when creation is successful. + */ + public function create_table( array $columns, array $indexes = [] ) { + $create_table = sprintf( + 'CREATE TABLE IF NOT EXISTS %1$s ( %2$s ) %3$s', + $this->get_table_name(), + implode( ',', array_merge( $columns, $indexes ) ), + $this->database->get_charset_collate() + ); + + $this->pre_execution(); + + $is_created = (bool) $this->database->query( $create_table ); + + $this->post_execution(); + + return $is_created; + } + + /** + * Checks if there is an error. + * + * @return bool Returns true when there is an error. + */ + public function has_error() { + return ( $this->database->last_error !== '' ); + } + + /** + * Executed before a query will be ran. + * + * @return void + */ + protected function pre_execution() { + if ( $this->suppress_errors ) { + $this->last_suppressed_state = $this->database->suppress_errors(); + } + } + + /** + * Executed after a query has been ran. + * + * @return void + */ + protected function post_execution() { + if ( $this->suppress_errors ) { + $this->database->suppress_errors( $this->last_suppressed_state ); + } + } + + /** + * Returns the full table name. + * + * @return string Full table name including prefix. + */ + public function get_table_name() { + return $this->get_table_prefix() . $this->table_name; + } + + /** + * Returns the prefix to use for the table. + * + * @return string The table prefix depending on the database context. + */ + protected function get_table_prefix() { + if ( $this->is_multisite_table ) { + return $this->database->base_prefix; + } + + return $this->database->get_blog_prefix(); + } + + /** + * Registers the table with WordPress. + * + * @return void + */ + protected function register_table() { + $table_name = $this->table_name; + $full_table_name = $this->get_table_name(); + + $this->database->$table_name = $full_table_name; + + if ( $this->is_multisite_table ) { + $this->database->ms_global_tables[] = $table_name; + return; + } + + $this->database->tables[] = $table_name; + } + + /** + * Checks if the table has been registered with WordPress. + * + * @return bool True if the table is registered, false otherwise. + */ + protected function is_table_registered() { + if ( $this->is_multisite_table ) { + return in_array( $this->table_name, $this->database->ms_global_tables, true ); + } + + return in_array( $this->table_name, $this->database->tables, true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-export.php b/wp/wp-content/plugins/wordpress-seo/admin/class-export.php new file mode 100644 index 00000000..6e769b04 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-export.php @@ -0,0 +1,164 @@ +export_settings(); + $this->output(); + } + + /** + * Outputs the export. + * + * @return void + */ + public function output() { + if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { + esc_html_e( 'You do not have the required rights to export settings.', 'wordpress-seo' ); + return; + } + + echo '

      '; + printf( + /* translators: %1$s expands to Import settings */ + esc_html__( + 'Copy all these settings to another site\'s %1$s tab and click "%1$s" there.', + 'wordpress-seo' + ), + esc_html__( + 'Import settings', + 'wordpress-seo' + ) + ); + echo '

      '; + /* translators: %1$s expands to Yoast SEO */ + echo '
      '; + echo ''; + } + + /** + * Exports the current site's WP SEO settings. + * + * @return void + */ + private function export_settings() { + $this->export_header(); + + foreach ( WPSEO_Options::get_option_names() as $opt_group ) { + $this->write_opt_group( $opt_group ); + } + } + + /** + * Writes the header of the export. + * + * @return void + */ + private function export_header() { + $header = sprintf( + /* translators: %1$s expands to Yoast SEO, %2$s expands to Yoast.com */ + esc_html__( 'These are settings for the %1$s plugin by %2$s', 'wordpress-seo' ), + 'Yoast SEO', + 'Yoast.com' + ); + $this->write_line( '; ' . $header ); + } + + /** + * Writes a line to the export. + * + * @param string $line Line string. + * @param bool $newline_first Boolean flag whether to prepend with new line. + * + * @return void + */ + private function write_line( $line, $newline_first = false ) { + if ( $newline_first ) { + $this->export .= PHP_EOL; + } + $this->export .= $line . PHP_EOL; + } + + /** + * Writes an entire option group to the export. + * + * @param string $opt_group Option group name. + * + * @return void + */ + private function write_opt_group( $opt_group ) { + + $this->write_line( '[' . $opt_group . ']', true ); + + $options = get_option( $opt_group ); + + if ( ! is_array( $options ) ) { + return; + } + + foreach ( $options as $key => $elem ) { + if ( is_array( $elem ) ) { + $count = count( $elem ); + for ( $i = 0; $i < $count; $i++ ) { + $elem_check = ( $elem[ $i ] ?? null ); + $this->write_setting( $key . '[]', $elem_check ); + } + } + else { + $this->write_setting( $key, $elem ); + } + } + } + + /** + * Writes a settings line to the export. + * + * @param string $key Key string. + * @param string $val Value string. + * + * @return void + */ + private function write_setting( $key, $val ) { + if ( is_string( $val ) ) { + $val = '"' . $val . '"'; + } + $this->write_line( $key . ' = ' . $val ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-expose-shortlinks.php b/wp/wp-content/plugins/wordpress-seo/admin/class-expose-shortlinks.php new file mode 100644 index 00000000..e6a589b6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-expose-shortlinks.php @@ -0,0 +1,143 @@ + 'https://yoa.st/allow-search-engines', + 'shortlinks.advanced.follow_links' => 'https://yoa.st/follow-links', + 'shortlinks.advanced.meta_robots' => 'https://yoa.st/meta-robots-advanced', + 'shortlinks.advanced.breadcrumbs_title' => 'https://yoa.st/breadcrumbs-title', + 'shortlinks.metabox.schema.explanation' => 'https://yoa.st/400', + 'shortlinks.metabox.schema.page_type' => 'https://yoa.st/402', + 'shortlinks.sidebar.schema.explanation' => 'https://yoa.st/401', + 'shortlinks.sidebar.schema.page_type' => 'https://yoa.st/403', + 'shortlinks.focus_keyword_info' => 'https://yoa.st/focus-keyword', + 'shortlinks.nofollow_sponsored' => 'https://yoa.st/nofollow-sponsored', + 'shortlinks.snippet_preview_info' => 'https://yoa.st/snippet-preview', + 'shortlinks.cornerstone_content_info' => 'https://yoa.st/1i9', + 'shortlinks.upsell.social_preview.social' => 'https://yoa.st/social-preview-facebook', + 'shortlinks.upsell.social_preview.x' => 'https://yoa.st/social-preview-twitter', + 'shortlinks.upsell.sidebar.news' => 'https://yoa.st/get-news-sidebar', + 'shortlinks.upsell.sidebar.focus_keyword_synonyms_button' => 'https://yoa.st/keyword-synonyms-popup-sidebar', + 'shortlinks.upsell.sidebar.premium_seo_analysis_button' => 'https://yoa.st/premium-seo-analysis-sidebar', + 'shortlinks.upsell.sidebar.focus_keyword_additional_button' => 'https://yoa.st/add-keywords-popup-sidebar', + 'shortlinks.upsell.sidebar.additional_link' => 'https://yoa.st/textlink-keywords-sidebar', + 'shortlinks.upsell.sidebar.additional_button' => 'https://yoa.st/add-keywords-sidebar', + 'shortlinks.upsell.sidebar.keyphrase_distribution' => 'https://yoa.st/keyphrase-distribution-sidebar', + 'shortlinks.upsell.sidebar.word_complexity' => 'https://yoa.st/word-complexity-sidebar', + 'shortlinks.upsell.sidebar.internal_linking_suggestions' => 'https://yoa.st/internal-linking-suggestions-sidebar', + 'shortlinks.upsell.sidebar.highlighting_seo_analysis' => 'https://yoa.st/highlighting-seo-analysis', + 'shortlinks.upsell.sidebar.highlighting_readability_analysis' => 'https://yoa.st/highlighting-readability-analysis', + 'shortlinks.upsell.sidebar.highlighting_inclusive_analysis' => 'https://yoa.st/highlighting-inclusive-analysis', + 'shortlinks.upsell.metabox.news' => 'https://yoa.st/get-news-metabox', + 'shortlinks.upsell.metabox.go_premium' => 'https://yoa.st/pe-premium-page', + 'shortlinks.upsell.metabox.focus_keyword_synonyms_button' => 'https://yoa.st/keyword-synonyms-popup', + 'shortlinks.upsell.metabox.premium_seo_analysis_button' => 'https://yoa.st/premium-seo-analysis-metabox', + 'shortlinks.upsell.metabox.focus_keyword_additional_button' => 'https://yoa.st/add-keywords-popup', + 'shortlinks.upsell.metabox.additional_link' => 'https://yoa.st/textlink-keywords-metabox', + 'shortlinks.upsell.metabox.additional_button' => 'https://yoa.st/add-keywords-metabox', + 'shortlinks.upsell.metabox.keyphrase_distribution' => 'https://yoa.st/keyphrase-distribution-metabox', + 'shortlinks.upsell.metabox.word_complexity' => 'https://yoa.st/word-complexity-metabox', + 'shortlinks.upsell.metabox.internal_linking_suggestions' => 'https://yoa.st/internal-linking-suggestions-metabox', + 'shortlinks.upsell.gsc.create_redirect_button' => 'https://yoa.st/redirects', + 'shortlinks.readability_analysis_info' => 'https://yoa.st/readability-analysis', + 'shortlinks.inclusive_language_analysis_info' => 'https://yoa.st/inclusive-language-analysis', + 'shortlinks.activate_premium_info' => 'https://yoa.st/activate-subscription', + 'shortlinks.upsell.sidebar.morphology_upsell_metabox' => 'https://yoa.st/morphology-upsell-metabox', + 'shortlinks.upsell.sidebar.morphology_upsell_sidebar' => 'https://yoa.st/morphology-upsell-sidebar', + 'shortlinks.semrush.volume_help' => 'https://yoa.st/3-v', + 'shortlinks.semrush.trend_help' => 'https://yoa.st/3-v', + 'shortlinks.semrush.prices' => 'https://yoa.st/semrush-prices', + 'shortlinks.semrush.premium_landing_page' => 'https://yoa.st/413', + 'shortlinks.wincher.seo_performance' => 'https://yoa.st/wincher-integration', + 'shortlinks-insights-estimated_reading_time' => 'https://yoa.st/4fd', + 'shortlinks-insights-flesch_reading_ease' => 'https://yoa.st/34r', + 'shortlinks-insights-flesch_reading_ease_sidebar' => 'https://yoa.st/4mf', + 'shortlinks-insights-flesch_reading_ease_metabox' => 'https://yoa.st/4mg', + 'shortlinks-insights-flesch_reading_ease_article' => 'https://yoa.st/34s', + 'shortlinks-insights-keyword_research_link' => 'https://yoa.st/keyword-research-metabox', + 'shortlinks-insights-upsell-sidebar-prominent_words' => 'https://yoa.st/prominent-words-upsell-sidebar', + 'shortlinks-insights-upsell-metabox-prominent_words' => 'https://yoa.st/prominent-words-upsell-metabox', + 'shortlinks-insights-upsell-elementor-prominent_words' => 'https://yoa.st/prominent-words-upsell-elementor', + 'shortlinks-insights-word_count' => 'https://yoa.st/word-count', + 'shortlinks-insights-upsell-sidebar-text_formality' => 'https://yoa.st/formality-upsell-sidebar', + 'shortlinks-insights-upsell-metabox-text_formality' => 'https://yoa.st/formality-upsell-metabox', + 'shortlinks-insights-upsell-elementor-text_formality' => 'https://yoa.st/formality-upsell-elementor', + 'shortlinks-insights-text_formality_info_free' => 'https://yoa.st/formality-free', + 'shortlinks-insights-text_formality_info_premium' => 'https://yoa.st/formality', + ]; + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + add_filter( 'wpseo_admin_l10n', [ $this, 'expose_shortlinks' ] ); + } + + /** + * Adds shortlinks to the passed array. + * + * @param array $input The array to add shortlinks to. + * + * @return array The passed array with the additional shortlinks. + */ + public function expose_shortlinks( $input ) { + foreach ( $this->get_shortlinks() as $key => $shortlink ) { + $input[ $key ] = WPSEO_Shortlinker::get( $shortlink ); + } + + $input['default_query_params'] = WPSEO_Shortlinker::get_query_params(); + + return $input; + } + + /** + * Retrieves the shortlinks. + * + * @return array The shortlinks. + */ + private function get_shortlinks() { + if ( ! $this->is_term_edit() ) { + return $this->shortlinks; + } + + $shortlinks = $this->shortlinks; + + $shortlinks['shortlinks.upsell.metabox.focus_keyword_synonyms_button'] = 'https://yoa.st/keyword-synonyms-popup-term'; + $shortlinks['shortlinks.upsell.metabox.focus_keyword_additional_button'] = 'https://yoa.st/add-keywords-popup-term'; + $shortlinks['shortlinks.upsell.metabox.additional_link'] = 'https://yoa.st/textlink-keywords-metabox-term'; + $shortlinks['shortlinks.upsell.metabox.additional_button'] = 'https://yoa.st/add-keywords-metabox-term'; + $shortlinks['shortlinks.upsell.sidebar.morphology_upsell_metabox'] = 'https://yoa.st/morphology-upsell-metabox-term'; + $shortlinks['shortlinks.upsell.metabox.keyphrase_distribution'] = 'https://yoa.st/keyphrase-distribution-metabox-term'; + $shortlinks['shortlinks.upsell.metabox.word_complexity'] = 'https://yoa.st/word-complexity-metabox-term'; + $shortlinks['shortlinks.upsell.metabox.internal_linking_suggestions'] = 'https://yoa.st/internal-linking-suggestions-metabox-term'; + + return $shortlinks; + } + + /** + * Checks if the current page is a term edit page. + * + * @return bool True when page is term edit. + */ + private function is_term_edit() { + global $pagenow; + + return WPSEO_Taxonomy::is_term_edit( $pagenow ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-gutenberg-compatibility.php b/wp/wp-content/plugins/wordpress-seo/admin/class-gutenberg-compatibility.php new file mode 100644 index 00000000..6160f1a2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-gutenberg-compatibility.php @@ -0,0 +1,107 @@ +current_version = $this->detect_installed_gutenberg_version(); + } + + /** + * Determines whether or not Gutenberg is installed. + * + * @return bool Whether or not Gutenberg is installed. + */ + public function is_installed() { + return $this->current_version !== ''; + } + + /** + * Determines whether or not the currently installed version of Gutenberg is below the minimum supported version. + * + * @return bool True if the currently installed version is below the minimum supported version. False otherwise. + */ + public function is_below_minimum() { + return version_compare( $this->current_version, $this->get_minimum_supported_version(), '<' ); + } + + /** + * Gets the currently installed version. + * + * @return string The currently installed version. + */ + public function get_installed_version() { + return $this->current_version; + } + + /** + * Determines whether or not the currently installed version of Gutenberg is the latest, fully compatible version. + * + * @return bool Whether or not the currently installed version is fully compatible. + */ + public function is_fully_compatible() { + return version_compare( $this->current_version, $this->get_latest_release(), '>=' ); + } + + /** + * Gets the latest released version of Gutenberg. + * + * @return string The latest release. + */ + protected function get_latest_release() { + return self::CURRENT_RELEASE; + } + + /** + * Gets the minimum supported version of Gutenberg. + * + * @return string The minumum supported release. + */ + protected function get_minimum_supported_version() { + return self::MINIMUM_SUPPORTED; + } + + /** + * Detects the currently installed Gutenberg version. + * + * @return string The currently installed Gutenberg version. Empty if the version couldn't be detected. + */ + protected function detect_installed_gutenberg_version() { + if ( defined( 'GUTENBERG_VERSION' ) ) { + return GUTENBERG_VERSION; + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-meta-columns.php b/wp/wp-content/plugins/wordpress-seo/admin/class-meta-columns.php new file mode 100644 index 00000000..7b2108fb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-meta-columns.php @@ -0,0 +1,839 @@ +analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + $this->admin_columns_cache = YoastSEO()->classes->get( Admin_Columns_Cache_Integration::class ); + $this->score_icon_helper = YoastSEO()->helpers->score_icon; + } + + /** + * Sets up up the hooks. + * + * @return void + */ + public function setup_hooks() { + $this->set_post_type_hooks(); + + if ( $this->analysis_seo->is_enabled() ) { + add_action( 'restrict_manage_posts', [ $this, 'posts_filter_dropdown' ] ); + } + + if ( $this->analysis_readability->is_enabled() ) { + add_action( 'restrict_manage_posts', [ $this, 'posts_filter_dropdown_readability' ] ); + } + + add_filter( 'request', [ $this, 'column_sort_orderby' ] ); + add_filter( 'default_hidden_columns', [ $this, 'column_hidden' ], 10, 1 ); + } + + /** + * Adds the column headings for the SEO plugin for edit posts / pages overview. + * + * @param array $columns Already existing columns. + * + * @return array Array containing the column headings. + */ + public function column_heading( $columns ) { + if ( $this->display_metabox() === false ) { + return $columns; + } + + $added_columns = []; + + if ( $this->analysis_seo->is_enabled() ) { + $added_columns['wpseo-score'] = '' + . __( 'SEO score', 'wordpress-seo' ) + . ''; + } + + if ( $this->analysis_readability->is_enabled() ) { + $added_columns['wpseo-score-readability'] = '' + . __( 'Readability score', 'wordpress-seo' ) + . ''; + } + + $added_columns['wpseo-title'] = __( 'SEO Title', 'wordpress-seo' ); + $added_columns['wpseo-metadesc'] = __( 'Meta Desc.', 'wordpress-seo' ); + + if ( $this->analysis_seo->is_enabled() ) { + $added_columns['wpseo-focuskw'] = __( 'Keyphrase', 'wordpress-seo' ); + } + + return array_merge( $columns, $added_columns ); + } + + /** + * Displays the column content for the given column. + * + * @param string $column_name Column to display the content for. + * @param int $post_id Post to display the column content for. + * + * @return void + */ + public function column_content( $column_name, $post_id ) { + if ( $this->display_metabox() === false ) { + return; + } + + switch ( $column_name ) { + case 'wpseo-score': + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in render_score_indicator() method. + echo $this->parse_column_score( $post_id ); + + return; + + case 'wpseo-score-readability': + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in render_score_indicator() method. + echo $this->parse_column_score_readability( $post_id ); + + return; + + case 'wpseo-title': + $meta = $this->get_meta( $post_id ); + if ( $meta ) { + echo esc_html( $meta->title ); + } + + return; + + case 'wpseo-metadesc': + $metadesc_val = ''; + $meta = $this->get_meta( $post_id ); + if ( $meta ) { + $metadesc_val = $meta->meta_description; + } + if ( $metadesc_val === '' ) { + echo '', + /* translators: Hidden accessibility text. */ + esc_html__( 'Meta description not set.', 'wordpress-seo' ), + ''; + + return; + } + + echo esc_html( $metadesc_val ); + + return; + + case 'wpseo-focuskw': + $focuskw_val = WPSEO_Meta::get_value( 'focuskw', $post_id ); + + if ( $focuskw_val === '' ) { + echo '', + /* translators: Hidden accessibility text. */ + esc_html__( 'Focus keyphrase not set.', 'wordpress-seo' ), + ''; + + return; + } + + echo esc_html( $focuskw_val ); + + return; + } + } + + /** + * Indicates which of the SEO columns are sortable. + * + * @param array $columns Appended with their orderby variable. + * + * @return array Array containing the sortable columns. + */ + public function column_sort( $columns ) { + if ( $this->display_metabox() === false ) { + return $columns; + } + + $columns['wpseo-metadesc'] = 'wpseo-metadesc'; + + if ( $this->analysis_seo->is_enabled() ) { + $columns['wpseo-focuskw'] = 'wpseo-focuskw'; + $columns['wpseo-score'] = 'wpseo-score'; + } + + if ( $this->analysis_readability->is_enabled() ) { + $columns['wpseo-score-readability'] = 'wpseo-score-readability'; + } + + return $columns; + } + + /** + * Hides the SEO title, meta description and focus keyword columns if the user hasn't chosen which columns to hide. + * + * @param array $hidden The hidden columns. + * + * @return array Array containing the columns to hide. + */ + public function column_hidden( $hidden ) { + if ( ! is_array( $hidden ) ) { + $hidden = []; + } + + array_push( $hidden, 'wpseo-title', 'wpseo-metadesc' ); + + if ( $this->analysis_seo->is_enabled() ) { + $hidden[] = 'wpseo-focuskw'; + } + + return $hidden; + } + + /** + * Adds a dropdown that allows filtering on the posts SEO Quality. + * + * @return void + */ + public function posts_filter_dropdown() { + if ( ! $this->can_display_filter() ) { + return; + } + + $ranks = WPSEO_Rank::get_all_ranks(); + + /* translators: Hidden accessibility text. */ + echo ''; + echo ''; + } + + /** + * Adds a dropdown that allows filtering on the posts Readability Quality. + * + * @return void + */ + public function posts_filter_dropdown_readability() { + if ( ! $this->can_display_filter() ) { + return; + } + + $ranks = WPSEO_Rank::get_all_readability_ranks(); + + /* translators: Hidden accessibility text. */ + echo ''; + echo ''; + } + + /** + * Generates an '; + } + + /** + * Returns the meta object for a given post ID. + * + * @param int $post_id The post ID. + * + * @return Meta The meta object. + */ + protected function get_meta( $post_id ) { + $indexable = $this->admin_columns_cache->get_indexable( $post_id ); + + return YoastSEO()->meta->for_indexable( $indexable, 'Post_Type' ); + } + + /** + * Determines the SEO score filter to be later used in the meta query, based on the passed SEO filter. + * + * @param string $seo_filter The SEO filter to use to determine what further filter to apply. + * + * @return array The SEO score filter. + */ + protected function determine_seo_filters( $seo_filter ) { + if ( $seo_filter === WPSEO_Rank::NO_FOCUS ) { + return $this->create_no_focus_keyword_filter(); + } + + if ( $seo_filter === WPSEO_Rank::NO_INDEX ) { + return $this->create_no_index_filter(); + } + + $rank = new WPSEO_Rank( $seo_filter ); + + return $this->create_seo_score_filter( $rank->get_starting_score(), $rank->get_end_score() ); + } + + /** + * Determines the Readability score filter to the meta query, based on the passed Readability filter. + * + * @param string $readability_filter The Readability filter to use to determine what further filter to apply. + * + * @return array The Readability score filter. + */ + protected function determine_readability_filters( $readability_filter ) { + $rank = new WPSEO_Rank( $readability_filter ); + + return $this->create_readability_score_filter( $rank->get_starting_score(), $rank->get_end_score() ); + } + + /** + * Creates a keyword filter for the meta query, based on the passed Keyword filter. + * + * @param string $keyword_filter The keyword filter to use. + * + * @return array The keyword filter. + */ + protected function get_keyword_filter( $keyword_filter ) { + return [ + 'post_type' => get_query_var( 'post_type', 'post' ), + 'key' => WPSEO_Meta::$meta_prefix . 'focuskw', + 'value' => sanitize_text_field( $keyword_filter ), + ]; + } + + /** + * Determines whether the passed filter is considered to be valid. + * + * @param mixed $filter The filter to check against. + * + * @return bool Whether the filter is considered valid. + */ + protected function is_valid_filter( $filter ) { + return ! empty( $filter ) && is_string( $filter ); + } + + /** + * Collects the filters and merges them into a single array. + * + * @return array Array containing all the applicable filters. + */ + protected function collect_filters() { + $active_filters = []; + + $seo_filter = $this->get_current_seo_filter(); + $readability_filter = $this->get_current_readability_filter(); + $current_keyword_filter = $this->get_current_keyword_filter(); + + if ( $this->is_valid_filter( $seo_filter ) ) { + $active_filters = array_merge( + $active_filters, + $this->determine_seo_filters( $seo_filter ) + ); + } + + if ( $this->is_valid_filter( $readability_filter ) ) { + $active_filters = array_merge( + $active_filters, + $this->determine_readability_filters( $readability_filter ) + ); + } + + if ( $this->is_valid_filter( $current_keyword_filter ) ) { + /** + * Adapt the meta query used to filter the post overview on keyphrase. + * + * @internal + * + * @param array $keyphrase The keyphrase used in the filter. + * @param array $keyword_filter The current keyword filter. + */ + $keyphrase_filter = apply_filters( + 'wpseo_change_keyphrase_filter_in_request', + $this->get_keyword_filter( $current_keyword_filter ), + $current_keyword_filter + ); + + if ( is_array( $keyphrase_filter ) ) { + $active_filters = array_merge( + $active_filters, + [ $keyphrase_filter ] + ); + } + } + + /** + * Adapt the active applicable filters on the posts overview. + * + * @internal + * + * @param array $active_filters The current applicable filters. + */ + return apply_filters( 'wpseo_change_applicable_filters', $active_filters ); + } + + /** + * Modify the query based on the filters that are being passed. + * + * @param array $vars Query variables that need to be modified based on the filters. + * + * @return array Array containing the meta query to use for filtering the posts overview. + */ + public function column_sort_orderby( $vars ) { + $collected_filters = $this->collect_filters(); + + $order_by_column = $vars['orderby']; + if ( isset( $order_by_column ) ) { + // Based on the selected column, create a meta query. + $order_by = $this->filter_order_by( $order_by_column ); + + /** + * Adapt the order by part of the query on the posts overview. + * + * @internal + * + * @param array $order_by The current order by. + * @param string $order_by_column The current order by column. + */ + $order_by = apply_filters( 'wpseo_change_order_by', $order_by, $order_by_column ); + + $vars = array_merge( $vars, $order_by ); + } + + return $this->build_filter_query( $vars, $collected_filters ); + } + + /** + * Retrieves the meta robots query values to be used within the meta query. + * + * @return array Array containing the query parameters regarding meta robots. + */ + protected function get_meta_robots_query_values() { + return [ + 'relation' => 'OR', + [ + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'compare' => 'NOT EXISTS', + ], + [ + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'value' => '1', + 'compare' => '!=', + ], + ]; + } + + /** + * Determines the score filters to be used. If more than one is passed, it created an AND statement for the query. + * + * @param array $score_filters Array containing the score filters. + * + * @return array Array containing the score filters that need to be applied to the meta query. + */ + protected function determine_score_filters( $score_filters ) { + if ( count( $score_filters ) > 1 ) { + return array_merge( [ 'relation' => 'AND' ], $score_filters ); + } + + return $score_filters; + } + + /** + * Retrieves the post type from the $_GET variable. + * + * @return string|null The sanitized current post type or null when the variable is not set in $_GET. + */ + public function get_current_post_type() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['post_type'] ) && is_string( $_GET['post_type'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); + } + return null; + } + + /** + * Retrieves the SEO filter from the $_GET variable. + * + * @return string|null The sanitized seo filter or null when the variable is not set in $_GET. + */ + public function get_current_seo_filter() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['seo_filter'] ) && is_string( $_GET['seo_filter'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET['seo_filter'] ) ); + } + return null; + } + + /** + * Retrieves the Readability filter from the $_GET variable. + * + * @return string|null The sanitized readability filter or null when the variable is not set in $_GET. + */ + public function get_current_readability_filter() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['readability_filter'] ) && is_string( $_GET['readability_filter'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET['readability_filter'] ) ); + } + return null; + } + + /** + * Retrieves the keyword filter from the $_GET variable. + * + * @return string|null The sanitized seo keyword filter or null when the variable is not set in $_GET. + */ + public function get_current_keyword_filter() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['seo_kw_filter'] ) && is_string( $_GET['seo_kw_filter'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET['seo_kw_filter'] ) ); + } + return null; + } + + /** + * Uses the vars to create a complete filter query that can later be executed to filter out posts. + * + * @param array $vars Array containing the variables that will be used in the meta query. + * @param array $filters Array containing the filters that we need to apply in the meta query. + * + * @return array Array containing the complete filter query. + */ + protected function build_filter_query( $vars, $filters ) { + // If no filters were applied, just return everything. + if ( count( $filters ) === 0 ) { + return $vars; + } + + $result = [ 'meta_query' => [] ]; + $result['meta_query'] = array_merge( $result['meta_query'], [ $this->determine_score_filters( $filters ) ] ); + + $current_seo_filter = $this->get_current_seo_filter(); + + // This only applies for the SEO score filter because it can because the SEO score can be altered by the no-index option. + if ( $this->is_valid_filter( $current_seo_filter ) && ! in_array( $current_seo_filter, [ WPSEO_Rank::NO_INDEX, WPSEO_Rank::NO_FOCUS ], true ) ) { + $result['meta_query'] = array_merge( $result['meta_query'], [ $this->get_meta_robots_query_values() ] ); + } + + return array_merge( $vars, $result ); + } + + /** + * Creates a Readability score filter. + * + * @param number $low The lower boundary of the score. + * @param number $high The higher boundary of the score. + * + * @return array The Readability Score filter. + */ + protected function create_readability_score_filter( $low, $high ) { + return [ + [ + 'key' => WPSEO_Meta::$meta_prefix . 'content_score', + 'value' => [ $low, $high ], + 'type' => 'numeric', + 'compare' => 'BETWEEN', + ], + ]; + } + + /** + * Creates an SEO score filter. + * + * @param number $low The lower boundary of the score. + * @param number $high The higher boundary of the score. + * + * @return array The SEO score filter. + */ + protected function create_seo_score_filter( $low, $high ) { + return [ + [ + 'key' => WPSEO_Meta::$meta_prefix . 'linkdex', + 'value' => [ $low, $high ], + 'type' => 'numeric', + 'compare' => 'BETWEEN', + ], + ]; + } + + /** + * Creates a filter to retrieve posts that were set to no-index. + * + * @return array Array containin the no-index filter. + */ + protected function create_no_index_filter() { + return [ + [ + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'value' => '1', + 'compare' => '=', + ], + ]; + } + + /** + * Creates a filter to retrieve posts that have no keyword set. + * + * @return array Array containing the no focus keyword filter. + */ + protected function create_no_focus_keyword_filter() { + return [ + [ + 'key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'value' => 'needs-a-value-anyway', + 'compare' => 'NOT EXISTS', + ], + [ + 'key' => WPSEO_Meta::$meta_prefix . 'linkdex', + 'value' => 'needs-a-value-anyway', + 'compare' => 'NOT EXISTS', + ], + ]; + } + + /** + * Determines whether a particular post_id is of an indexable post type. + * + * @param string $post_id The post ID to check. + * + * @return bool Whether or not it is indexable. + */ + protected function is_indexable( $post_id ) { + if ( ! empty( $post_id ) && ! $this->uses_default_indexing( $post_id ) ) { + return WPSEO_Meta::get_value( 'meta-robots-noindex', $post_id ) === '2'; + } + + $post = get_post( $post_id ); + + if ( is_object( $post ) ) { + // If the option is false, this means we want to index it. + return WPSEO_Options::get( 'noindex-' . $post->post_type, false ) === false; + } + + return true; + } + + /** + * Determines whether the given post ID uses the default indexing settings. + * + * @param int $post_id The post ID to check. + * + * @return bool Whether or not the default indexing is being used for the post. + */ + protected function uses_default_indexing( $post_id ) { + return WPSEO_Meta::get_value( 'meta-robots-noindex', $post_id ) === '0'; + } + + /** + * Returns filters when $order_by is matched in the if-statement. + * + * @param string $order_by The ID of the column by which to order the posts. + * + * @return array Array containing the order filters. + */ + private function filter_order_by( $order_by ) { + switch ( $order_by ) { + case 'wpseo-metadesc': + return [ + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. + 'meta_key' => WPSEO_Meta::$meta_prefix . 'metadesc', + 'orderby' => 'meta_value', + ]; + + case 'wpseo-focuskw': + return [ + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. + 'meta_key' => WPSEO_Meta::$meta_prefix . 'focuskw', + 'orderby' => 'meta_value', + ]; + + case 'wpseo-score': + return [ + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. + 'meta_key' => WPSEO_Meta::$meta_prefix . 'linkdex', + 'orderby' => 'meta_value_num', + ]; + + case 'wpseo-score-readability': + return [ + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: Only used when user requests sorting. + 'meta_key' => WPSEO_Meta::$meta_prefix . 'content_score', + 'orderby' => 'meta_value_num', + ]; + } + + return []; + } + + /** + * Parses the score column. + * + * @param int $post_id The ID of the post for which to show the score. + * + * @return string The HTML for the SEO score indicator. + */ + private function parse_column_score( $post_id ) { + $meta = $this->get_meta( $post_id ); + + if ( $meta ) { + return $this->score_icon_helper->for_seo( $meta->indexable, '', __( 'Post is set to noindex.', 'wordpress-seo' ) ); + } + } + + /** + * Parsing the readability score column. + * + * @param int $post_id The ID of the post for which to show the readability score. + * + * @return string The HTML for the readability score indicator. + */ + private function parse_column_score_readability( $post_id ) { + $meta = $this->get_meta( $post_id ); + if ( $meta ) { + return $this->score_icon_helper->for_readability( $meta->indexable->readability_score ); + } + } + + /** + * Sets up the hooks for the post_types. + * + * @return void + */ + private function set_post_type_hooks() { + $post_types = WPSEO_Post_Type::get_accessible_post_types(); + + if ( ! is_array( $post_types ) || $post_types === [] ) { + return; + } + + foreach ( $post_types as $post_type ) { + if ( $this->display_metabox( $post_type ) === false ) { + continue; + } + + add_filter( 'manage_' . $post_type . '_posts_columns', [ $this, 'column_heading' ], 10, 1 ); + add_action( 'manage_' . $post_type . '_posts_custom_column', [ $this, 'column_content' ], 10, 2 ); + add_action( 'manage_edit-' . $post_type . '_sortable_columns', [ $this, 'column_sort' ], 10, 2 ); + } + + unset( $post_type ); + } + + /** + * Wraps the WPSEO_Metabox check to determine whether the metabox should be displayed either by + * choice of the admin or because the post type is not a public post type. + * + * @since 7.0 + * + * @param string|null $post_type Optional. The post type to test, defaults to the current post post_type. + * + * @return bool Whether or not the meta box (and associated columns etc) should be hidden. + */ + private function display_metabox( $post_type = null ) { + $current_post_type = $this->get_current_post_type(); + + if ( ! isset( $post_type ) && ! empty( $current_post_type ) ) { + $post_type = $current_post_type; + } + + return WPSEO_Utils::is_metabox_active( $post_type, 'post_type' ); + } + + /** + * Determines whether or not filter dropdowns should be displayed. + * + * @return bool Whether or the current page can display the filter drop downs. + */ + public function can_display_filter() { + if ( $GLOBALS['pagenow'] === 'upload.php' ) { + return false; + } + + if ( $this->display_metabox() === false ) { + return false; + } + + $screen = get_current_screen(); + if ( $screen === null ) { + return false; + } + + return WPSEO_Post_Type::is_post_type_accessible( $screen->post_type ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-my-yoast-proxy.php b/wp/wp-content/plugins/wordpress-seo/admin/class-my-yoast-proxy.php new file mode 100644 index 00000000..53659c12 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-my-yoast-proxy.php @@ -0,0 +1,219 @@ +is_proxy_page() ) { + return; + } + + // Register the page for the proxy. + add_action( 'admin_menu', [ $this, 'add_proxy_page' ] ); + add_action( 'admin_init', [ $this, 'handle_proxy_page' ] ); + } + + /** + * Registers the proxy page. It does not actually add a link to the dashboard. + * + * @codeCoverageIgnore + * + * @return void + */ + public function add_proxy_page() { + add_dashboard_page( '', '', 'read', self::PAGE_IDENTIFIER, '' ); + } + + /** + * Renders the requested proxy page and exits to prevent the WordPress UI from loading. + * + * @codeCoverageIgnore + * + * @return void + */ + public function handle_proxy_page() { + $this->render_proxy_page(); + + // Prevent the WordPress UI from loading. + exit; + } + + /** + * Renders the requested proxy page. + * + * This is separated from the exits to be able to test it. + * + * @return void + */ + public function render_proxy_page() { + $proxy_options = $this->determine_proxy_options(); + if ( $proxy_options === [] ) { + // Do not accept any other file than implemented. + $this->set_header( 'HTTP/1.0 501 Requested file not implemented' ); + return; + } + + // Set the headers before serving the remote file. + $this->set_header( 'Content-Type: ' . $proxy_options['content_type'] ); + $this->set_header( 'Cache-Control: max-age=' . self::CACHE_CONTROL_MAX_AGE ); + + try { + echo $this->get_remote_url_body( $proxy_options['url'] ); + } + catch ( Exception $e ) { + /* + * Reset the file headers because the loading failed. + * + * Note: Due to supporting PHP 5.2 `header_remove` can not be used here. + * Overwrite the headers instead. + */ + $this->set_header( 'Content-Type: text/plain' ); + $this->set_header( 'Cache-Control: max-age=0' ); + + $this->set_header( 'HTTP/1.0 500 ' . $e->getMessage() ); + } + } + + /** + * Tries to load the given url via `wp_remote_get`. + * + * @codeCoverageIgnore + * + * @param string $url The url to load. + * + * @return string The body of the response. + * + * @throws Exception When `wp_remote_get` returned an error. + * @throws Exception When the response code is not 200. + */ + protected function get_remote_url_body( $url ) { + $response = wp_remote_get( $url ); + + if ( $response instanceof WP_Error ) { + throw new Exception( 'Unable to retrieve file from MyYoast' ); + } + + if ( wp_remote_retrieve_response_code( $response ) !== 200 ) { + throw new Exception( 'Received unexpected response from MyYoast' ); + } + + return wp_remote_retrieve_body( $response ); + } + + /** + * Determines the proxy options based on the file and plugin version arguments. + * + * When the file is known it returns an array like this: + * + * $array = array( + * 'content_type' => 'the content type' + * 'url' => 'the url, possibly with the plugin version' + * ) + * + * + * @return array Empty for an unknown file. See format above for known files. + */ + protected function determine_proxy_options() { + if ( $this->get_proxy_file() === 'research-webworker' ) { + return [ + 'content_type' => 'text/javascript; charset=UTF-8', + 'url' => 'https://my.yoast.com/api/downloads/file/analysis-worker?plugin_version=' . $this->get_plugin_version(), + ]; + } + + return []; + } + + /** + * Checks if the current page is the MyYoast proxy page. + * + * @codeCoverageIgnore + * + * @return bool True when the page request parameter equals the proxy page. + */ + protected function is_proxy_page() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $page = isset( $_GET['page'] ) && is_string( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; + return $page === self::PAGE_IDENTIFIER; + } + + /** + * Returns the proxy file from the HTTP request parameters. + * + * @codeCoverageIgnore + * + * @return string The sanitized file request parameter or an empty string if it does not exist. + */ + protected function get_proxy_file() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['file'] ) && is_string( $_GET['file'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET['file'] ) ); + } + return ''; + } + + /** + * Returns the plugin version from the HTTP request parameters. + * + * @codeCoverageIgnore + * + * @return string The sanitized plugin_version request parameter or an empty string if it does not exist. + */ + protected function get_plugin_version() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['plugin_version'] ) && is_string( $_GET['plugin_version'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $plugin_version = sanitize_text_field( wp_unslash( $_GET['plugin_version'] ) ); + // Replace slashes to secure against requiring a file from another path. + return str_replace( [ '/', '\\' ], '_', $plugin_version ); + } + return ''; + } + + /** + * Sets the HTTP header. + * + * This is a tiny helper function to enable better testing. + * + * @codeCoverageIgnore + * + * @param string $header The header to set. + * + * @return void + */ + protected function set_header( $header ) { + header( $header ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-option-tab.php b/wp/wp-content/plugins/wordpress-seo/admin/class-option-tab.php new file mode 100644 index 00000000..4a231258 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-option-tab.php @@ -0,0 +1,112 @@ +name = sanitize_title( $name ); + $this->label = $label; + $this->arguments = $arguments; + } + + /** + * Gets the name. + * + * @return string The name. + */ + public function get_name() { + return $this->name; + } + + /** + * Gets the label. + * + * @return string The label. + */ + public function get_label() { + return $this->label; + } + + /** + * Retrieves whether the tab needs a save button. + * + * @return bool True whether the tabs needs a save button. + */ + public function has_save_button() { + return (bool) $this->get_argument( 'save_button', true ); + } + + /** + * Retrieves whether the tab hosts beta functionalities. + * + * @return bool True whether the tab hosts beta functionalities. + */ + public function is_beta() { + return (bool) $this->get_argument( 'beta', false ); + } + + /** + * Retrieves whether the tab hosts premium functionalities. + * + * @return bool True whether the tab hosts premium functionalities. + */ + public function is_premium() { + return (bool) $this->get_argument( 'premium', false ); + } + + /** + * Gets the option group. + * + * @return string The option group. + */ + public function get_opt_group() { + return $this->get_argument( 'opt_group' ); + } + + /** + * Retrieves the variable from the supplied arguments. + * + * @param string $variable Variable to retrieve. + * @param string|mixed $default_value Default to use when variable not found. + * + * @return mixed|string The retrieved variable. + */ + protected function get_argument( $variable, $default_value = '' ) { + return array_key_exists( $variable, $this->arguments ) ? $this->arguments[ $variable ] : $default_value; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php b/wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php new file mode 100644 index 00000000..5a54266f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs-formatter.php @@ -0,0 +1,93 @@ +get_base() . '/' . $tab->get_name() . '.php'; + } + + /** + * Outputs the option tabs. + * + * @param WPSEO_Option_Tabs $option_tabs Option Tabs to get tabs from. + * + * @return void + */ + public function run( WPSEO_Option_Tabs $option_tabs ) { + + echo ''; + + foreach ( $option_tabs->get_tabs() as $tab ) { + $identifier = $tab->get_name(); + + $class = 'wpseotab ' . ( $tab->has_save_button() ? 'save' : 'nosave' ); + printf( '
      ', esc_attr( $identifier ), esc_attr( $class ) ); + + $tab_filter_name = sprintf( '%s_%s', $option_tabs->get_base(), $tab->get_name() ); + + /** + * Allows to override the content that is display on the specific option tab. + * + * @internal For internal Yoast SEO use only. + * + * @param string|null $tab_contents The content that should be displayed for this tab. Leave empty for default behaviour. + * @param WPSEO_Option_Tabs $option_tabs The registered option tabs. + * @param WPSEO_Option_Tab $tab The tab that is being displayed. + */ + $option_tab_content = apply_filters( 'wpseo_option_tab-' . $tab_filter_name, null, $option_tabs, $tab ); + if ( ! empty( $option_tab_content ) ) { + echo wp_kses_post( $option_tab_content ); + } + + if ( empty( $option_tab_content ) ) { + // Output the settings view for all tabs. + $tab_view = $this->get_tab_view( $option_tabs, $tab ); + + if ( is_file( $tab_view ) ) { + $yform = Yoast_Form::get_instance(); + require $tab_view; + } + } + + echo '
      '; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs.php b/wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs.php new file mode 100644 index 00000000..fb0c4512 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-option-tabs.php @@ -0,0 +1,124 @@ +base = sanitize_title( $base ); + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $tab = isset( $_GET['tab'] ) && is_string( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : ''; + $this->active_tab = empty( $tab ) ? $active_tab : $tab; + } + + /** + * Get the base. + * + * @return string + */ + public function get_base() { + return $this->base; + } + + /** + * Add a tab. + * + * @param WPSEO_Option_Tab $tab Tab to add. + * + * @return $this + */ + public function add_tab( WPSEO_Option_Tab $tab ) { + $this->tabs[] = $tab; + + return $this; + } + + /** + * Get active tab. + * + * @return WPSEO_Option_Tab|null Get the active tab. + */ + public function get_active_tab() { + if ( empty( $this->active_tab ) ) { + return null; + } + + $active_tabs = array_filter( $this->tabs, [ $this, 'is_active_tab' ] ); + if ( ! empty( $active_tabs ) ) { + $active_tabs = array_values( $active_tabs ); + if ( count( $active_tabs ) === 1 ) { + return $active_tabs[0]; + } + } + + return null; + } + + /** + * Is the tab the active tab. + * + * @param WPSEO_Option_Tab $tab Tab to check for active tab. + * + * @return bool + */ + public function is_active_tab( WPSEO_Option_Tab $tab ) { + return ( $tab->get_name() === $this->active_tab ); + } + + /** + * Get all tabs. + * + * @return WPSEO_Option_Tab[] + */ + public function get_tabs() { + return $this->tabs; + } + + /** + * Display the tabs. + * + * @param Yoast_Form $yform Yoast Form needed in the views. + * + * @return void + */ + public function display( Yoast_Form $yform ) { + $formatter = new WPSEO_Option_Tabs_Formatter(); + $formatter->run( $this, $yform ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-paper-presenter.php b/wp/wp-content/plugins/wordpress-seo/admin/class-paper-presenter.php new file mode 100644 index 00000000..99550e4a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-paper-presenter.php @@ -0,0 +1,141 @@ + null, + 'paper_id_prefix' => 'wpseo-', + 'collapsible' => false, + 'collapsible_header_class' => '', + 'expanded' => false, + 'help_text' => '', + 'title_after' => '', + 'class' => '', + 'content' => '', + 'view_data' => [], + ]; + + $this->settings = wp_parse_args( $settings, $defaults ); + $this->title = $title; + $this->view_file = $view_file; + } + + /** + * Renders the collapsible paper and returns it as a string. + * + * @return string The rendered paper. + */ + public function get_output() { + $view_variables = $this->get_view_variables(); + + extract( $view_variables, EXTR_SKIP ); + + $content = $this->settings['content']; + + if ( $this->view_file !== null ) { + ob_start(); + require $this->view_file; + $content = ob_get_clean(); + } + + ob_start(); + require WPSEO_PATH . 'admin/views/paper-collapsible.php'; + $rendered_output = ob_get_clean(); + + return $rendered_output; + } + + /** + * Retrieves the view variables. + * + * @return array The view variables. + */ + private function get_view_variables() { + if ( $this->settings['help_text'] instanceof WPSEO_Admin_Help_Panel === false ) { + $this->settings['help_text'] = new WPSEO_Admin_Help_Panel( '', '', '' ); + } + + $view_variables = [ + 'class' => $this->settings['class'], + 'collapsible' => $this->settings['collapsible'], + 'collapsible_config' => $this->collapsible_config(), + 'collapsible_header_class' => $this->settings['collapsible_header_class'], + 'title_after' => $this->settings['title_after'], + 'help_text' => $this->settings['help_text'], + 'view_file' => $this->view_file, + 'title' => $this->title, + 'paper_id' => $this->settings['paper_id'], + 'paper_id_prefix' => $this->settings['paper_id_prefix'], + 'yform' => Yoast_Form::get_instance(), + ]; + + return array_merge( $this->settings['view_data'], $view_variables ); + } + + /** + * Retrieves the collapsible config based on the settings. + * + * @return array The config. + */ + protected function collapsible_config() { + if ( empty( $this->settings['collapsible'] ) ) { + return [ + 'toggle_icon' => '', + 'class' => '', + 'expanded' => '', + ]; + } + + if ( ! empty( $this->settings['expanded'] ) ) { + return [ + 'toggle_icon' => 'dashicons-arrow-up-alt2', + 'class' => 'toggleable-container', + 'expanded' => 'true', + ]; + } + + return [ + 'toggle_icon' => 'dashicons-arrow-down-alt2', + 'class' => 'toggleable-container toggleable-container-hidden', + 'expanded' => 'false', + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php b/wp/wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php new file mode 100644 index 00000000..9f8c5eb4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-plugin-availability.php @@ -0,0 +1,355 @@ +register_yoast_plugins(); + $this->register_yoast_plugins_status(); + } + + /** + * Registers all the available Yoast SEO plugins. + * + * @return void + */ + protected function register_yoast_plugins() { + $this->plugins = [ + 'yoast-seo-premium' => [ + 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y7' ), + 'title' => 'Yoast SEO Premium', + 'description' => sprintf( + /* translators: %1$s expands to Yoast SEO */ + __( 'The premium version of %1$s with more features & support.', 'wordpress-seo' ), + 'Yoast SEO' + ), + 'installed' => false, + 'slug' => 'wordpress-seo-premium/wp-seo-premium.php', + 'version_sync' => true, + 'premium' => true, + ], + + 'video-seo-for-wordpress-seo-by-yoast' => [ + 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y8' ), + 'title' => 'Video SEO', + 'description' => __( 'Optimize your videos to show them off in search results and get more clicks!', 'wordpress-seo' ), + 'installed' => false, + 'slug' => 'wpseo-video/video-seo.php', + 'version_sync' => true, + 'premium' => true, + ], + + 'yoast-news-seo' => [ + 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1y9' ), + 'title' => 'News SEO', + 'description' => __( 'Are you in Google News? Increase your traffic from Google News by optimizing for it!', 'wordpress-seo' ), + 'installed' => false, + 'slug' => 'wpseo-news/wpseo-news.php', + 'version_sync' => true, + 'premium' => true, + ], + + 'local-seo-for-yoast-seo' => [ + 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1ya' ), + 'title' => 'Local SEO', + 'description' => __( 'Rank better locally and in Google Maps, without breaking a sweat!', 'wordpress-seo' ), + 'installed' => false, + 'slug' => 'wordpress-seo-local/local-seo.php', + 'version_sync' => true, + 'premium' => true, + ], + + 'yoast-woocommerce-seo' => [ + 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/1o0' ), + 'title' => 'Yoast WooCommerce SEO', + 'description' => sprintf( + /* translators: %1$s expands to Yoast SEO */ + __( 'Seamlessly integrate WooCommerce with %1$s and get extra features!', 'wordpress-seo' ), + 'Yoast SEO' + ), + '_dependencies' => [ + 'WooCommerce' => [ + 'slug' => 'woocommerce/woocommerce.php', // Kept for backwards compatibility, in case external code uses get_dependencies(). Deprecated in 22.4. + 'conditional' => new WooCommerce_Conditional(), + ], + ], + 'installed' => false, + 'slug' => 'wpseo-woocommerce/wpseo-woocommerce.php', + 'version_sync' => true, + 'premium' => true, + ], + ]; + } + + /** + * Sets certain plugin properties based on WordPress' status. + * + * @return void + */ + protected function register_yoast_plugins_status() { + + foreach ( $this->plugins as $name => $plugin ) { + + $plugin_slug = $plugin['slug']; + $plugin_path = WP_PLUGIN_DIR . '/' . $plugin_slug; + + if ( file_exists( $plugin_path ) ) { + $plugin_data = get_plugin_data( $plugin_path, false, false ); + $this->plugins[ $name ]['installed'] = true; + $this->plugins[ $name ]['version'] = $plugin_data['Version']; + $this->plugins[ $name ]['active'] = is_plugin_active( $plugin_slug ); + } + } + } + + /** + * Checks if there are dependencies available for the plugin. + * + * @param array $plugin The information available about the plugin. + * + * @return bool Whether there is a dependency present. + */ + public function has_dependencies( $plugin ) { + return ( isset( $plugin['_dependencies'] ) && ! empty( $plugin['_dependencies'] ) ); + } + + /** + * Gets the dependencies for the plugin. + * + * @param array $plugin The information available about the plugin. + * + * @return array Array containing all the dependencies associated with the plugin. + */ + public function get_dependencies( $plugin ) { + if ( ! $this->has_dependencies( $plugin ) ) { + return []; + } + + return $plugin['_dependencies']; + } + + /** + * Checks if all dependencies are satisfied. + * + * @param array $plugin The information available about the plugin. + * + * @return bool Whether or not the dependencies are satisfied. + */ + public function dependencies_are_satisfied( $plugin ) { + if ( ! $this->has_dependencies( $plugin ) ) { + return true; + } + + $dependencies = $this->get_dependencies( $plugin ); + $active_dependencies = array_filter( $dependencies, [ $this, 'is_dependency_active' ] ); + + return count( $active_dependencies ) === count( $dependencies ); + } + + /** + * Checks whether or not one of the plugins is properly installed and usable. + * + * @param array $plugin The information available about the plugin. + * + * @return bool Whether or not the plugin is properly installed. + */ + public function is_installed( $plugin ) { + if ( empty( $plugin ) ) { + return false; + } + + return $this->is_available( $plugin ); + } + + /** + * Checks for the availability of the plugin. + * + * @param array $plugin The information available about the plugin. + * + * @return bool Whether or not the plugin is available. + */ + public function is_available( $plugin ) { + return isset( $plugin['installed'] ) && $plugin['installed'] === true; + } + + /** + * Checks whether a dependency is active. + * + * @param array $dependency The information about the dependency to look for. + * + * @return bool Whether or not the dependency is active. + */ + public function is_dependency_active( $dependency ) { + return $dependency['conditional']->is_met(); + } + + /** + * Gets an array of plugins that have defined dependencies. + * + * @return array Array of the plugins that have dependencies. + */ + public function get_plugins_with_dependencies() { + return array_filter( $this->plugins, [ $this, 'has_dependencies' ] ); + } + + /** + * Determines whether or not a plugin is active. + * + * @param string $plugin The plugin slug to check. + * + * @return bool Whether or not the plugin is active. + * + * @deprecated 23.4 + * @codeCoverageIgnore + */ + public function is_active( $plugin ) { + _deprecated_function( __METHOD__, 'Yoast SEO 23.4', 'is_plugin_active' ); + + return is_plugin_active( $plugin ); + } + + /** + * Gets all the possibly available plugins. + * + * @return array Array containing the information about the plugins. + * + * @deprecated 23.4 + * @codeCoverageIgnore + */ + public function get_plugins() { + _deprecated_function( __METHOD__, 'Yoast SEO 23.4', 'WPSEO_Addon_Manager::get_addon_filenames' ); + + return $this->plugins; + } + + /** + * Gets a specific plugin. Returns an empty array if it cannot be found. + * + * @param string $plugin The plugin to search for. + * + * @return array The plugin properties. + * + * @deprecated 23.4 + * @codeCoverageIgnore + */ + public function get_plugin( $plugin ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found, VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- needed for BC reasons + _deprecated_function( __METHOD__, 'Yoast SEO 23.4', 'WPSEO_Addon_Manager::get_plugin_file' ); + if ( ! isset( $this->plugins[ $plugin ] ) ) { + return []; + } + + return $this->plugins[ $plugin ]; + } + + /** + * Gets the version of the plugin. + * + * @param array $plugin The information available about the plugin. + * + * @return string The version associated with the plugin. + * + * @deprecated 23.4 + * @codeCoverageIgnore + */ + public function get_version( $plugin ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found, VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- needed for BC reasons + _deprecated_function( __METHOD__, 'Yoast SEO 23.4', 'WPSEO_Addon_Manager::get_installed_addons_versions' ); + if ( ! isset( $plugin['version'] ) ) { + return ''; + } + + return $plugin['version']; + } + + /** + * Checks whether a dependency is available. + * + * @param array $dependency The information about the dependency to look for. + * + * @return bool Whether or not the dependency is available. + * @deprecated 22.4 + * @codeCoverageIgnore + */ + public function is_dependency_available( $dependency ) { + _deprecated_function( __METHOD__, 'Yoast SEO 22.4' ); + + return isset( get_plugins()[ $dependency['slug'] ] ); + } + + /** + * Gets the names of the dependencies. + * + * @param array $plugin The plugin to get the dependency names from. + * + * @return array Array containing the names of the associated dependencies. + * @deprecated 23.4 + * @codeCoverageIgnore + */ + public function get_dependency_names( $plugin ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found, VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- needed for BC reasons + _deprecated_function( __METHOD__, 'Yoast SEO 23.4' ); + if ( ! $this->has_dependencies( $plugin ) ) { + return []; + } + + return array_keys( $plugin['_dependencies'] ); + } + + /** + * Determines whether or not a plugin is a Premium product. + * + * @param array $plugin The plugin to check. + * + * @return bool Whether or not the plugin is a Premium product. + * + * @deprecated 23.4 + * @codeCoverageIgnore + */ + public function is_premium( $plugin ) { + _deprecated_function( __METHOD__, 'Yoast SEO 23.4' ); + + return isset( $plugin['premium'] ) && $plugin['premium'] === true; + } + + /** + * Gets all installed plugins. + * + * @return array The installed plugins. + * + * @deprecated 23.4 + * @codeCoverageIgnore + */ + public function get_installed_plugins() { + + _deprecated_function( __METHOD__, 'Yoast SEO 23.4', 'WPSEO_Addon_Manager::get_installed_addons_versions' ); + $installed = []; + + foreach ( $this->plugins as $plugin_key => $plugin ) { + if ( $this->is_installed( $plugin ) ) { + $installed[ $plugin_key ] = $plugin; + } + } + + return $installed; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php b/wp/wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php new file mode 100644 index 00000000..a90e8acd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-plugin-conflict.php @@ -0,0 +1,94 @@ +> + */ + protected $plugins = [ + // The plugin which are writing OG metadata. + 'open_graph' => Conflicting_Plugins::OPEN_GRAPH_PLUGINS, + 'xml_sitemaps' => Conflicting_Plugins::XML_SITEMAPS_PLUGINS, + 'cloaking' => Conflicting_Plugins::CLOAKING_PLUGINS, + 'seo' => Conflicting_Plugins::SEO_PLUGINS, + ]; + + /** + * Overrides instance to set with this class as class. + * + * @param string $class_name Optional class name. + * + * @return Yoast_Plugin_Conflict + */ + public static function get_instance( $class_name = self::class ) { + return parent::get_instance( $class_name ); + } + + /** + * After activating any plugin, this method will be executed by a hook. + * + * If the activated plugin is conflicting with ours a notice will be shown. + * + * @param string|bool $plugin Optional plugin basename to check. + * + * @return void + */ + public static function hook_check_for_plugin_conflicts( $plugin = false ) { + // The instance of the plugin. + $instance = self::get_instance(); + + // Only add the plugin as an active plugin if $plugin isn't false. + if ( $plugin && is_string( $plugin ) ) { + $instance->add_active_plugin( $instance->find_plugin_category( $plugin ), $plugin ); + } + + $plugin_sections = []; + + // Only check for open graph problems when they are enabled. + if ( WPSEO_Options::get( 'opengraph' ) ) { + /* translators: %1$s expands to Yoast SEO, %2$s: 'Facebook' plugin name of possibly conflicting plugin with regard to creating OpenGraph output. */ + $plugin_sections['open_graph'] = __( 'Both %1$s and %2$s create Open Graph output, which might make Facebook, X, LinkedIn and other social networks use the wrong texts and images when your pages are being shared.', 'wordpress-seo' ) + . '

      ' + . '' + /* translators: %1$s expands to Yoast SEO. */ + . sprintf( __( 'Configure %1$s\'s Open Graph settings', 'wordpress-seo' ), 'Yoast SEO' ) + . ''; + } + + // Only check for XML conflicts if sitemaps are enabled. + if ( WPSEO_Options::get( 'enable_xml_sitemap' ) ) { + /* translators: %1$s expands to Yoast SEO, %2$s: 'Google XML Sitemaps' plugin name of possibly conflicting plugin with regard to the creation of sitemaps. */ + $plugin_sections['xml_sitemaps'] = __( 'Both %1$s and %2$s can create XML sitemaps. Having two XML sitemaps is not beneficial for search engines and might slow down your site.', 'wordpress-seo' ) + . '

      ' + . '' + /* translators: %1$s expands to Yoast SEO. */ + . sprintf( __( 'Toggle %1$s\'s XML Sitemap', 'wordpress-seo' ), 'Yoast SEO' ) + . ''; + } + + /* translators: %2$s expands to 'RS Head Cleaner' plugin name of possibly conflicting plugin with regard to differentiating output between search engines and normal users. */ + $plugin_sections['cloaking'] = __( 'The plugin %2$s changes your site\'s output and in doing that differentiates between search engines and normal users, a process that\'s called cloaking. We highly recommend that you disable it.', 'wordpress-seo' ); + + /* translators: %1$s expands to Yoast SEO, %2$s: 'SEO' plugin name of possibly conflicting plugin with regard to the creation of duplicate SEO meta. */ + $plugin_sections['seo'] = __( 'Both %1$s and %2$s manage the SEO of your site. Running two SEO plugins at the same time is detrimental.', 'wordpress-seo' ); + + $instance->check_plugin_conflicts( $plugin_sections ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-premium-popup.php b/wp/wp-content/plugins/wordpress-seo/admin/class-premium-popup.php new file mode 100644 index 00000000..00887694 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-premium-popup.php @@ -0,0 +1,105 @@ +identifier = $identifier; + $this->heading_level = $heading_level; + $this->title = $title; + $this->content = $content; + $this->url = $url; + } + + /** + * Returns the premium popup as an HTML string. + * + * @param bool $popup Show this message as a popup show it straight away. + * + * @return string + */ + public function get_premium_message( $popup = true ) { + // Don't show in Premium. + if ( defined( 'WPSEO_PREMIUM_FILE' ) ) { + return ''; + } + + $assets_uri = trailingslashit( plugin_dir_url( WPSEO_FILE ) ); + + /* translators: %s expands to Yoast SEO Premium */ + $cta_text = esc_html( sprintf( __( 'Get %s', 'wordpress-seo' ), 'Yoast SEO Premium' ) ); + /* translators: Hidden accessibility text. */ + $new_tab_message = '' . esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) . ''; + $caret_icon = ''; + $classes = ''; + if ( $popup ) { + $classes = ' hidden'; + } + $micro_copy = __( '1 year free support and updates included!', 'wordpress-seo' ); + + $popup = << + Yoast SEO + <{$this->heading_level} id="wpseo-contact-support-popup-title" class="wpseo-premium-popup-title">{$this->title}heading_level}> + {$this->content} + + {$cta_text} {$new_tab_message} {$caret_icon} +
      + {$micro_copy} + +EO_POPUP; + + return $popup; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-premium-upsell-admin-block.php b/wp/wp-content/plugins/wordpress-seo/admin/class-premium-upsell-admin-block.php new file mode 100644 index 00000000..143d08be --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-premium-upsell-admin-block.php @@ -0,0 +1,165 @@ +hook = $hook; + } + + /** + * Registers WordPress hooks. + * + * @return void + */ + public function register_hooks() { + add_action( $this->hook, [ $this, 'render' ] ); + } + + /** + * Renders the upsell block. + * + * @return void + */ + public function render() { + $url = WPSEO_Shortlinker::get( 'https://yoa.st/17h' ); + + $arguments = [ + sprintf( + /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ + esc_html__( '%1$sAI%2$s: Better SEO titles and meta descriptions, faster.', 'wordpress-seo' ), + '', + '' + ), + sprintf( + /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ + esc_html__( '%1$sMultiple keywords%2$s: Rank higher for more searches.', 'wordpress-seo' ), + '', + '' + ), + sprintf( + /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ + esc_html__( '%1$sSuper fast%2$s internal linking suggestions.', 'wordpress-seo' ), + '', + '' + ), + sprintf( + /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ + esc_html__( '%1$sNo more broken links%2$s: Automatic redirect manager.', 'wordpress-seo' ), + '', + '' + ), + sprintf( + /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ + esc_html__( '%1$sAppealing social previews%2$s people actually want to click on.', 'wordpress-seo' ), + '', + '' + ), + sprintf( + /* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ + esc_html__( '%1$s24/7 support%2$s: Also on evenings and weekends.', 'wordpress-seo' ), + '', + '' + ), + '' . esc_html__( 'No ads!', 'wordpress-seo' ) . '', + ]; + + $arguments_html = implode( '', array_map( [ $this, 'get_argument_html' ], $arguments ) ); + + $class = $this->get_html_class(); + + /* translators: %s expands to Yoast SEO Premium */ + $button_text = YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ? esc_html__( 'Claim your 30% off now!', 'wordpress-seo' ) : sprintf( esc_html__( 'Explore %s now!', 'wordpress-seo' ), 'Yoast SEO Premium' ); + /* translators: Hidden accessibility text. */ + $button_text .= '' . esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) . '' + . ''; + + $upgrade_button = sprintf( + '%3$s', + esc_attr( 'wpseo-' . $this->identifier . '-popup-button' ), + esc_url( $url ), + $button_text + ); + + echo '
      '; + + if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { + $bf_label = esc_html__( 'BLACK FRIDAY', 'wordpress-seo' ); + $sale_label = esc_html__( '30% OFF', 'wordpress-seo' ); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Already escaped above. + echo "
      $bf_label $sale_label
      "; + } + + echo '
      '; + echo '

      ' + . sprintf( + /* translators: %s expands to Yoast SEO Premium */ + esc_html__( 'Upgrade to %s', 'wordpress-seo' ), + 'Yoast SEO Premium' + ) + . '

      '; + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in $this->get_argument_html() method. + echo '
        ' . $arguments_html . '
      '; + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Correctly escaped in $upgrade_button and $button_text above. + echo '

      ' . $upgrade_button . '

      '; + echo '
      '; + + echo '
      '; + } + + /** + * Formats the argument to a HTML list item. + * + * @param string $argument The argument to format. + * + * @return string Formatted argument in HTML. + */ + protected function get_argument_html( $argument ) { + $class = $this->get_html_class(); + + return sprintf( + '
    • %2$s
    • ', + esc_attr( $class . '--argument' ), + $argument + ); + } + + /** + * Returns the HTML base class to use. + * + * @return string The HTML base class. + */ + protected function get_html_class() { + return 'yoast_' . $this->identifier; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php b/wp/wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php new file mode 100644 index 00000000..85c0c888 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-primary-term-admin.php @@ -0,0 +1,274 @@ +get_primary_term_taxonomies(); + + foreach ( $taxonomies as $taxonomy ) { + $content .= $this->primary_term_field( $taxonomy->name ); + $content .= wp_nonce_field( 'save-primary-term', WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_nonce', false, false ); + } + return $content; + } + + /** + * Generates the HTML for a hidden field for a primary taxonomy. + * + * @param string $taxonomy_name The taxonomy's slug. + * + * @return string The HTML for a hidden primary taxonomy field. + */ + protected function primary_term_field( $taxonomy_name ) { + return sprintf( + '', + esc_attr( $this->generate_field_id( $taxonomy_name ) ), + esc_attr( $this->generate_field_name( $taxonomy_name ) ), + esc_attr( $this->get_primary_term( $taxonomy_name ) ) + ); + } + + /** + * Generates an id for a primary taxonomy's hidden field. + * + * @param string $taxonomy_name The taxonomy's slug. + * + * @return string The field id. + */ + protected function generate_field_id( $taxonomy_name ) { + return 'yoast-wpseo-primary-' . $taxonomy_name; + } + + /** + * Generates a name for a primary taxonomy's hidden field. + * + * @param string $taxonomy_name The taxonomy's slug. + * + * @return string The field id. + */ + protected function generate_field_name( $taxonomy_name ) { + return WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy_name . '_term'; + } + + /** + * Adds primary term templates. + * + * @return void + */ + public function wp_footer() { + $taxonomies = $this->get_primary_term_taxonomies(); + + if ( ! empty( $taxonomies ) ) { + $this->include_js_templates(); + } + } + + /** + * Enqueues all the assets needed for the primary term interface. + * + * @return void + */ + public function enqueue_assets() { + global $pagenow; + + if ( ! WPSEO_Metabox::is_post_edit( $pagenow ) ) { + return; + } + + $taxonomies = $this->get_primary_term_taxonomies(); + + // Only enqueue if there are taxonomies that need a primary term. + if ( empty( $taxonomies ) ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'primary-category' ); + + $mapped_taxonomies = $this->get_mapped_taxonomies_for_js( $taxonomies ); + + $data = [ + 'taxonomies' => $mapped_taxonomies, + ]; + + $asset_manager->localize_script( 'post-edit', 'wpseoPrimaryCategoryL10n', $data ); + $asset_manager->localize_script( 'post-edit-classic', 'wpseoPrimaryCategoryL10n', $data ); + } + + /** + * Gets the id of the primary term. + * + * @param string $taxonomy_name Taxonomy name for the term. + * + * @return int primary term id + */ + protected function get_primary_term( $taxonomy_name ) { + $primary_term = new WPSEO_Primary_Term( $taxonomy_name, $this->get_current_id() ); + + return $primary_term->get_primary_term(); + } + + /** + * Returns all the taxonomies for which the primary term selection is enabled. + * + * @param int|null $post_id Default current post ID. + * @return array + */ + protected function get_primary_term_taxonomies( $post_id = null ) { + if ( $post_id === null ) { + $post_id = $this->get_current_id(); + } + + $taxonomies = wp_cache_get( 'primary_term_taxonomies_' . $post_id, 'wpseo' ); + if ( $taxonomies !== false ) { + return $taxonomies; + } + + $taxonomies = $this->generate_primary_term_taxonomies( $post_id ); + + wp_cache_set( 'primary_term_taxonomies_' . $post_id, $taxonomies, 'wpseo' ); + + return $taxonomies; + } + + /** + * Includes templates file. + * + * @return void + */ + protected function include_js_templates() { + include_once WPSEO_PATH . 'admin/views/js-templates-primary-term.php'; + } + + /** + * Generates the primary term taxonomies. + * + * @param int $post_id ID of the post. + * + * @return array + */ + protected function generate_primary_term_taxonomies( $post_id ) { + $post_type = get_post_type( $post_id ); + $all_taxonomies = get_object_taxonomies( $post_type, 'objects' ); + $all_taxonomies = array_filter( $all_taxonomies, [ $this, 'filter_hierarchical_taxonomies' ] ); + + /** + * Filters which taxonomies for which the user can choose the primary term. + * + * @param array $taxonomies An array of taxonomy objects that are primary_term enabled. + * @param string $post_type The post type for which to filter the taxonomies. + * @param array $all_taxonomies All taxonomies for this post types, even ones that don't have primary term + * enabled. + */ + $taxonomies = (array) apply_filters( 'wpseo_primary_term_taxonomies', $all_taxonomies, $post_type, $all_taxonomies ); + + return $taxonomies; + } + + /** + * Creates a map of taxonomies for localization. + * + * @param array $taxonomies The taxononmies that should be mapped. + * + * @return array The mapped taxonomies. + */ + protected function get_mapped_taxonomies_for_js( $taxonomies ) { + return array_map( [ $this, 'map_taxonomies_for_js' ], $taxonomies ); + } + + /** + * Returns an array suitable for use in the javascript. + * + * @param stdClass $taxonomy The taxonomy to map. + * + * @return array The mapped taxonomy. + */ + private function map_taxonomies_for_js( $taxonomy ) { + $primary_term = $this->get_primary_term( $taxonomy->name ); + + if ( empty( $primary_term ) ) { + $primary_term = ''; + } + + $terms = get_terms( + [ + 'taxonomy' => $taxonomy->name, + 'update_term_meta_cache' => false, + 'fields' => 'id=>name', + ] + ); + + $mapped_terms_for_js = []; + foreach ( $terms as $id => $name ) { + $mapped_terms_for_js[] = [ + 'id' => $id, + 'name' => $name, + ]; + } + + return [ + 'title' => $taxonomy->labels->singular_name, + 'name' => $taxonomy->name, + 'primary' => $primary_term, + 'singularLabel' => $taxonomy->labels->singular_name, + 'fieldId' => $this->generate_field_id( $taxonomy->name ), + 'restBase' => ( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name, + 'terms' => $mapped_terms_for_js, + ]; + } + + /** + * Returns whether or not a taxonomy is hierarchical. + * + * @param stdClass $taxonomy Taxonomy object. + * + * @return bool + */ + private function filter_hierarchical_taxonomies( $taxonomy ) { + return (bool) $taxonomy->hierarchical; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php b/wp/wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php new file mode 100644 index 00000000..e5149c17 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-product-upsell-notice.php @@ -0,0 +1,231 @@ +options = $this->get_options(); + } + + /** + * Checks if the notice should be added or removed. + * + * @return void + */ + public function initialize() { + $this->remove_notification(); + } + + /** + * Sets the upgrade notice. + * + * @return void + */ + public function set_upgrade_notice() { + + if ( $this->has_first_activated_on() ) { + return; + } + + $this->set_first_activated_on(); + $this->add_notification(); + } + + /** + * Listener for the upsell notice. + * + * @return void + */ + public function dismiss_notice_listener() { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are validating a nonce here. + if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'dismiss-5star-upsell' ) ) { + return; + } + + $dismiss_upsell = isset( $_GET['yoast_dismiss'] ) && is_string( $_GET['yoast_dismiss'] ) ? sanitize_text_field( wp_unslash( $_GET['yoast_dismiss'] ) ) : ''; + + if ( $dismiss_upsell !== 'upsell' ) { + return; + } + + $this->dismiss_notice(); + + if ( wp_safe_redirect( admin_url( 'admin.php?page=wpseo_dashboard' ) ) ) { + exit; + } + } + + /** + * When the notice should be shown. + * + * @return bool + */ + protected function should_add_notification() { + return ( $this->options['first_activated_on'] < strtotime( '-2weeks' ) ); + } + + /** + * Checks if the options has a first activated on date value. + * + * @return bool + */ + protected function has_first_activated_on() { + return $this->options['first_activated_on'] !== false; + } + + /** + * Sets the first activated on. + * + * @return void + */ + protected function set_first_activated_on() { + $this->options['first_activated_on'] = strtotime( '-2weeks' ); + + $this->save_options(); + } + + /** + * Adds a notification to the notification center. + * + * @return void + */ + protected function add_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->add_notification( $this->get_notification() ); + } + + /** + * Removes a notification to the notification center. + * + * @return void + */ + protected function remove_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification( $this->get_notification() ); + } + + /** + * Returns a premium upsell section if using the free plugin. + * + * @return string + */ + protected function get_premium_upsell_section() { + if ( ! YoastSEO()->helpers->product->is_premium() ) { + return sprintf( + /* translators: %1$s expands anchor to premium plugin page, %2$s expands to */ + __( 'By the way, did you know we also have a %1$sPremium plugin%2$s? It offers advanced features, like a redirect manager and support for multiple keyphrases. It also comes with 24/7 personal support.', 'wordpress-seo' ), + "", + '' + ); + } + + return ''; + } + + /** + * Gets the notification value. + * + * @return Yoast_Notification + */ + protected function get_notification() { + $message = sprintf( + /* translators: %1$s expands to Yoast SEO, %2$s is a link start tag to the plugin page on WordPress.org, %3$s is the link closing tag. */ + __( 'We\'ve noticed you\'ve been using %1$s for some time now; we hope you love it! We\'d be thrilled if you could %2$sgive us a 5 stars rating on WordPress.org%3$s!', 'wordpress-seo' ), + 'Yoast SEO', + '', + '' + ) . "\n\n"; + + $message .= sprintf( + /* translators: %1$s is a link start tag to the bugreport guidelines on the Yoast help center, %2$s is the link closing tag. */ + __( 'If you are experiencing issues, %1$splease file a bug report%2$s and we\'ll do our best to help you out.', 'wordpress-seo' ), + '', + '' + ) . "\n\n"; + + $message .= $this->get_premium_upsell_section() . "\n\n"; + + $message .= '' . __( 'Please don\'t show me this notification anymore', 'wordpress-seo' ) . ''; + + $notification = new Yoast_Notification( + $message, + [ + 'type' => Yoast_Notification::WARNING, + 'id' => 'wpseo-upsell-notice', + 'capabilities' => 'wpseo_manage_options', + 'priority' => 0.8, + ] + ); + + return $notification; + } + + /** + * Dismisses the notice. + * + * @return bool + */ + protected function is_notice_dismissed() { + return get_user_meta( get_current_user_id(), self::USER_META_DISMISSED, true ) === '1'; + } + + /** + * Dismisses the notice. + * + * @return void + */ + protected function dismiss_notice() { + update_user_meta( get_current_user_id(), self::USER_META_DISMISSED, true ); + } + + /** + * Returns the set options. + * + * @return mixed + */ + protected function get_options() { + return get_option( self::OPTION_NAME ); + } + + /** + * Saves the options to the database. + * + * @return void + */ + protected function save_options() { + update_option( self::OPTION_NAME, $this->options ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-remote-request.php b/wp/wp-content/plugins/wordpress-seo/admin/class-remote-request.php new file mode 100644 index 00000000..e54757a7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-remote-request.php @@ -0,0 +1,158 @@ + false, + 'timeout' => 2, + ]; + + /** + * Holds the response error. + * + * @var WP_Error|null + */ + protected $response_error; + + /** + * Holds the response body. + * + * @var mixed + */ + protected $response_body; + + /** + * Sets the endpoint and arguments. + * + * @param string $endpoint The endpoint to send the request to. + * @param array $args The arguments to use in this request. + */ + public function __construct( $endpoint, array $args = [] ) { + $this->endpoint = $endpoint; + $this->args = wp_parse_args( $this->args, $args ); + } + + /** + * Sets the request body. + * + * @param mixed $body The body to set. + * + * @return void + */ + public function set_body( $body ) { + $this->args['body'] = $body; + } + + /** + * Sends the data to the given endpoint. + * + * @param string $method The type of request to send. + * + * @return bool True when sending data has been successful. + */ + public function send( $method = self::METHOD_POST ) { + switch ( $method ) { + case self::METHOD_POST: + $response = $this->post(); + break; + case self::METHOD_GET: + $response = $this->get(); + break; + default: + /* translators: %1$s expands to the request method */ + $response = new WP_Error( 1, sprintf( __( 'Request method %1$s is not valid.', 'wordpress-seo' ), $method ) ); + break; + } + + return $this->process_response( $response ); + } + + /** + * Returns the value of the response error. + * + * @return WP_Error|null The response error. + */ + public function get_response_error() { + return $this->response_error; + } + + /** + * Returns the response body. + * + * @return mixed The response body. + */ + public function get_response_body() { + return $this->response_body; + } + + /** + * Processes the given response. + * + * @param mixed $response The response to process. + * + * @return bool True when response is valid. + */ + protected function process_response( $response ) { + if ( $response instanceof WP_Error ) { + $this->response_error = $response; + + return false; + } + + $this->response_body = wp_remote_retrieve_body( $response ); + + return ( wp_remote_retrieve_response_code( $response ) === 200 ); + } + + /** + * Performs a post request to the specified endpoint with set arguments. + * + * @return WP_Error|array The response or WP_Error on failure. + */ + protected function post() { + return wp_remote_post( $this->endpoint, $this->args ); + } + + /** + * Performs a post request to the specified endpoint with set arguments. + * + * @return WP_Error|array The response or WP_Error on failure. + */ + protected function get() { + return wp_remote_get( $this->endpoint, $this->args ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-schema-person-upgrade-notification.php b/wp/wp-content/plugins/wordpress-seo/admin/class-schema-person-upgrade-notification.php new file mode 100644 index 00000000..c2332c4e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-schema-person-upgrade-notification.php @@ -0,0 +1,83 @@ +add_notification(); + return; + } + + $this->remove_notification(); + } + + /** + * Adds a notification to the notification center. + * + * @return void + */ + protected function add_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->add_notification( $this->get_notification() ); + } + + /** + * Removes a notification to the notification center. + * + * @return void + */ + protected function remove_notification() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification( $this->get_notification() ); + } + + /** + * Gets the notification object. + * + * @return Yoast_Notification + */ + protected function get_notification() { + $message = sprintf( + /* translators: %1$s is a link start tag to the Search Appearance settings, %2$s is the link closing tag. */ + __( 'You have previously set your site to represent a person. We’ve improved our functionality around Schema and the Knowledge Graph, so you should go in and %1$scomplete those settings%2$s.', 'wordpress-seo' ), + '', + '' + ); + + $notification = new Yoast_Notification( + $message, + [ + 'type' => Yoast_Notification::WARNING, + 'id' => 'wpseo-schema-person-upgrade', + 'capabilities' => 'wpseo_manage_options', + 'priority' => 0.8, + ] + ); + + return $notification; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-suggested-plugins.php b/wp/wp-content/plugins/wordpress-seo/admin/class-suggested-plugins.php new file mode 100644 index 00000000..2d937be1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-suggested-plugins.php @@ -0,0 +1,140 @@ +availability_checker = $availability_checker; + $this->notification_center = $notification_center; + } + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + add_action( 'admin_init', [ $this->availability_checker, 'register' ] ); + add_action( 'admin_init', [ $this, 'add_notifications' ] ); + } + + /** + * Adds notifications (when necessary). + * + * @return void + */ + public function add_notifications() { + $checker = $this->availability_checker; + + // Get all Yoast plugins that have dependencies. + $plugins = $checker->get_plugins_with_dependencies(); + + foreach ( $plugins as $plugin_name => $plugin ) { + $notification_id = 'wpseo-suggested-plugin-' . $plugin_name; + + if ( ! $checker->dependencies_are_satisfied( $plugin ) ) { + $this->notification_center->remove_notification_by_id( $notification_id ); + + continue; + } + + if ( ! $checker->is_installed( $plugin ) ) { + $notification = $this->get_yoast_seo_suggested_plugins_notification( $notification_id, $plugin ); + $this->notification_center->add_notification( $notification ); + + continue; + } + + $this->notification_center->remove_notification_by_id( $notification_id ); + } + } + + /** + * Build Yoast SEO suggested plugins notification. + * + * @param string $notification_id The id of the notification to be created. + * @param array> $plugin The plugin to retrieve the data from. + * + * @return Yoast_Notification The notification containing the suggested plugin. + */ + protected function get_yoast_seo_suggested_plugins_notification( $notification_id, $plugin ) { + $message = $this->create_install_suggested_plugin_message( $plugin ); + + return new Yoast_Notification( + $message, + [ + 'id' => $notification_id, + 'type' => Yoast_Notification::WARNING, + 'capabilities' => [ 'install_plugins' ], + ] + ); + } + + /** + * Creates a message to suggest the installation of a particular plugin. + * + * @param array $suggested_plugin The suggested plugin. + * + * @return string The install suggested plugin message. + */ + protected function create_install_suggested_plugin_message( $suggested_plugin ) { + /* translators: %1$s expands to an opening strong tag, %2$s expands to the dependency name, %3$s expands to a closing strong tag, %4$s expands to an opening anchor tag, %5$s expands to a closing anchor tag. */ + $message = __( 'It looks like you aren\'t using our %1$s%2$s addon%3$s. %4$sUpgrade today%5$s to unlock more tools and SEO features to make your products stand out in search results.', 'wordpress-seo' ); + $install_link = WPSEO_Admin_Utils::get_install_link( $suggested_plugin ); + + return sprintf( + $message, + '', + $install_link, + '', + $this->create_more_information_link( $suggested_plugin['url'], $suggested_plugin['title'] ), + '' + ); + } + + /** + * Creates a more information link that directs the user to WordPress.org Plugin repository. + * + * @param string $url The URL to the plugin's page. + * @param string $name The name of the plugin. + * + * @return string The more information link. + */ + protected function create_more_information_link( $url, $name ) { + return sprintf( + '', + $url, + /* translators: Hidden accessibility text; %1$s expands to the dependency name */ + sprintf( __( 'More information about %1$s', 'wordpress-seo' ), $name ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-wincher-dashboard-widget.php b/wp/wp-content/plugins/wordpress-seo/admin/class-wincher-dashboard-widget.php new file mode 100644 index 00000000..5f9c793b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-wincher-dashboard-widget.php @@ -0,0 +1,136 @@ +asset_manager = new WPSEO_Admin_Asset_Manager(); + } + + /** + * Register WordPress hooks. + * + * @return void + */ + public function register_hooks() { + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_wincher_dashboard_assets' ] ); + add_action( 'admin_init', [ $this, 'queue_wincher_dashboard_widget' ] ); + } + + /** + * Adds the Wincher dashboard widget if it should be shown. + * + * @return void + */ + public function queue_wincher_dashboard_widget() { + if ( $this->show_widget() ) { + add_action( 'wp_dashboard_setup', [ $this, 'add_wincher_dashboard_widget' ] ); + } + } + + /** + * Adds the Wincher dashboard widget to WordPress. + * + * @return void + */ + public function add_wincher_dashboard_widget() { + add_filter( 'postbox_classes_dashboard_wpseo-wincher-dashboard-overview', [ $this, 'wpseo_wincher_dashboard_overview_class' ] ); + wp_add_dashboard_widget( + 'wpseo-wincher-dashboard-overview', + /* translators: %1$s expands to Yoast SEO, %2$s to Wincher */ + sprintf( __( '%1$s / %2$s: Top Keyphrases', 'wordpress-seo' ), 'Yoast SEO', 'Wincher' ), + [ $this, 'display_wincher_dashboard_widget' ] + ); + } + + /** + * Adds CSS classes to the dashboard widget. + * + * @param array $classes An array of postbox CSS classes. + * + * @return array + */ + public function wpseo_wincher_dashboard_overview_class( $classes ) { + $classes[] = 'yoast wpseo-wincherdashboard-overview'; + return $classes; + } + + /** + * Displays the Wincher dashboard widget. + * + * @return void + */ + public function display_wincher_dashboard_widget() { + echo '
      '; + } + + /** + * Enqueues assets for the dashboard if the current page is the dashboard. + * + * @return void + */ + public function enqueue_wincher_dashboard_assets() { + if ( ! $this->is_dashboard_screen() ) { + return; + } + + $this->asset_manager->localize_script( 'wincher-dashboard-widget', 'wpseoWincherDashboardWidgetL10n', $this->localize_wincher_dashboard_script() ); + $this->asset_manager->enqueue_script( 'wincher-dashboard-widget' ); + $this->asset_manager->enqueue_style( 'wp-dashboard' ); + $this->asset_manager->enqueue_style( 'monorepo' ); + } + + /** + * Translates strings used in the Wincher dashboard widget. + * + * @return array The translated strings. + */ + public function localize_wincher_dashboard_script() { + + return [ + 'wincher_is_logged_in' => YoastSEO()->helpers->wincher->login_status(), + 'wincher_website_id' => WPSEO_Options::get( 'wincher_website_id', '' ), + ]; + } + + /** + * Checks if the current screen is the dashboard screen. + * + * @return bool Whether or not this is the dashboard screen. + */ + private function is_dashboard_screen() { + $current_screen = get_current_screen(); + + return ( $current_screen instanceof WP_Screen && $current_screen->id === 'dashboard' ); + } + + /** + * Returns true when the Wincher dashboard widget should be shown. + * + * @return bool + */ + private function show_widget() { + $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $user_can_edit = $analysis_seo->is_enabled() && current_user_can( 'edit_posts' ); + $is_wincher_active = YoastSEO()->helpers->wincher->is_active(); + + return $user_can_edit && $is_wincher_active; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-columns.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-columns.php new file mode 100644 index 00000000..989f87b8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-columns.php @@ -0,0 +1,117 @@ +display_links(); + $meta_columns_present = $this->display_meta_columns(); + if ( ! ( $link_columns_present || $meta_columns_present ) ) { + return; + } + + $help_tab_content = sprintf( + /* translators: %1$s: Yoast SEO */ + __( '%1$s adds several columns to this page.', 'wordpress-seo' ), + 'Yoast SEO' + ); + + if ( $meta_columns_present ) { + $help_tab_content .= ' ' . sprintf( + /* translators: %1$s: Link to article about content analysis, %2$s: Anchor closing */ + __( 'We\'ve written an article about %1$show to use the SEO score and Readability score%2$s.', 'wordpress-seo' ), + '
      ', + '' + ); + } + + if ( $link_columns_present ) { + $help_tab_content .= ' ' . sprintf( + /* translators: %1$s: Link to article about text links, %2$s: Anchor closing tag, %3$s: Emphasis open tag, %4$s: Emphasis close tag */ + __( 'The links columns show the number of articles on this site linking %3$sto%4$s this article and the number of URLs linked %3$sfrom%4$s this article. Learn more about %1$show to use these features to improve your internal linking%2$s, which greatly enhances your SEO.', 'wordpress-seo' ), + '', + '', + '', + '' + ); + } + + $screen = get_current_screen(); + $screen->add_help_tab( + [ + /* translators: %s expands to Yoast */ + 'title' => sprintf( __( '%s Columns', 'wordpress-seo' ), 'Yoast' ), + 'id' => 'yst-columns', + 'content' => '

      ' . $help_tab_content . '

      ', + 'priority' => 15, + ] + ); + } + + /** + * Retrieves the post type from the $_GET variable. + * + * @return string The current post type. + */ + private function get_current_post_type() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['post_type'] ) && is_string( $_GET['post_type'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); + } + return ''; + } + + /** + * Whether we are showing link columns on this overview page. + * This depends on the post being accessible or not. + * + * @return bool Whether the linking columns are shown + */ + private function display_links() { + $current_post_type = $this->get_current_post_type(); + + if ( empty( $current_post_type ) ) { + return false; + } + + return WPSEO_Post_Type::is_post_type_accessible( $current_post_type ); + } + + /** + * Wraps the WPSEO_Metabox check to determine whether the metabox should be displayed either by + * choice of the admin or because the post type is not a public post type. + * + * @return bool Whether the meta box (and associated columns etc) should be hidden. + */ + private function display_meta_columns() { + $current_post_type = $this->get_current_post_type(); + + if ( empty( $current_post_type ) ) { + return false; + } + + return WPSEO_Utils::is_metabox_active( $current_post_type, 'post_type' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php new file mode 100644 index 00000000..7b07fd99 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-dashboard-widget.php @@ -0,0 +1,160 @@ +statistics = $statistics; + $this->asset_manager = new WPSEO_Admin_Asset_Manager(); + } + + /** + * Register WordPress hooks. + * + * @return void + */ + public function register_hooks() { + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_dashboard_assets' ] ); + add_action( 'admin_init', [ $this, 'queue_dashboard_widget' ] ); + } + + /** + * Adds the dashboard widget if it should be shown. + * + * @return void + */ + public function queue_dashboard_widget() { + if ( $this->show_widget() ) { + add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widget' ] ); + } + } + + /** + * Adds dashboard widget to WordPress. + * + * @return void + */ + public function add_dashboard_widget() { + add_filter( 'postbox_classes_dashboard_wpseo-dashboard-overview', [ $this, 'wpseo_dashboard_overview_class' ] ); + wp_add_dashboard_widget( + 'wpseo-dashboard-overview', + /* translators: %s is the plugin name */ + sprintf( __( '%s Posts Overview', 'wordpress-seo' ), 'Yoast SEO' ), + [ $this, 'display_dashboard_widget' ] + ); + } + + /** + * Adds CSS classes to the dashboard widget. + * + * @param array $classes An array of postbox CSS classes. + * + * @return array + */ + public function wpseo_dashboard_overview_class( $classes ) { + $classes[] = 'yoast wpseo-dashboard-overview'; + return $classes; + } + + /** + * Displays the dashboard widget. + * + * @return void + */ + public function display_dashboard_widget() { + echo '
      '; + } + + /** + * Enqueues assets for the dashboard if the current page is the dashboard. + * + * @return void + */ + public function enqueue_dashboard_assets() { + if ( ! $this->is_dashboard_screen() ) { + return; + } + + $this->asset_manager->localize_script( 'dashboard-widget', 'wpseoDashboardWidgetL10n', $this->localize_dashboard_script() ); + $this->asset_manager->enqueue_script( 'dashboard-widget' ); + $this->asset_manager->enqueue_style( 'wp-dashboard' ); + $this->asset_manager->enqueue_style( 'monorepo' ); + } + + /** + * Translates strings used in the dashboard widget. + * + * @return array The translated strings. + */ + public function localize_dashboard_script() { + return [ + 'feed_header' => sprintf( + /* translators: %1$s resolves to Yoast.com */ + __( 'Latest blog posts on %1$s', 'wordpress-seo' ), + 'Yoast.com' + ), + 'feed_footer' => __( 'Read more like this on our SEO blog', 'wordpress-seo' ), + 'wp_version' => substr( $GLOBALS['wp_version'], 0, 3 ) . '-' . ( is_plugin_active( 'classic-editor/classic-editor.php' ) ? '1' : '0' ), + 'php_version' => PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION, + ]; + } + + /** + * Checks if the current screen is the dashboard screen. + * + * @return bool Whether or not this is the dashboard screen. + */ + private function is_dashboard_screen() { + $current_screen = get_current_screen(); + + return ( $current_screen instanceof WP_Screen && $current_screen->id === 'dashboard' ); + } + + /** + * Returns true when the dashboard widget should be shown. + * + * @return bool + */ + private function show_widget() { + $analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + + return $analysis_seo->is_enabled() && current_user_can( 'edit_posts' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-form.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-form.php new file mode 100644 index 00000000..3694ef56 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-form.php @@ -0,0 +1,1116 @@ + +
      + +

      +
      +
      +
      + meets_requirements() ) { + $action_url = network_admin_url( 'settings.php' ); + $hidden_fields_cb = [ $network_admin, 'settings_fields' ]; + } + else { + $action_url = admin_url( 'options.php' ); + $hidden_fields_cb = 'settings_fields'; + } + + echo '
      '; + call_user_func( $hidden_fields_cb, $option_long_name ); + } + $this->set_option( $option ); + } + + /** + * Set the option used in output for form elements. + * + * @since 2.0 + * + * @param string $option_name Option key. + * + * @return void + */ + public function set_option( $option_name ) { + $this->option_name = $option_name; + + $this->option_instance = WPSEO_Options::get_option_instance( $option_name ); + if ( ! $this->option_instance ) { + $this->option_instance = null; + } + } + + /** + * Generates the footer for admin pages. + * + * @since 2.0 + * + * @param bool $submit Whether or not a submit button and form end tag should be shown. + * @param bool $show_sidebar Whether or not to show the banner sidebar - used by premium plugins to disable it. + * + * @return void + */ + public function admin_footer( $submit = true, $show_sidebar = true ) { + if ( $submit ) { + $settings_changed_listener = new WPSEO_Admin_Settings_Changed_Listener(); + echo '
      '; + + echo '
      '; + submit_button( __( 'Save changes', 'wordpress-seo' ) ); + $settings_changed_listener->show_success_message(); + echo '
      '; + + echo ''; + + echo '
      '; + + echo ' +
      '; + } + + /** + * Apply general admin_footer hooks. + */ + do_action( 'wpseo_admin_footer', $this ); + + /** + * Run possibly set actions to add for example an i18n box. + */ + do_action( 'wpseo_admin_promo_footer' ); + + echo ' +
      '; + + if ( $show_sidebar ) { + $this->admin_sidebar(); + } + + echo '
      '; + + do_action( 'wpseo_admin_below_content', $this ); + + echo ' +
      '; + } + + /** + * Generates the sidebar for admin pages. + * + * @since 2.0 + * + * @return void + */ + public function admin_sidebar() { + // No banners in Premium. + $addon_manager = new WPSEO_Addon_Manager(); + if ( YoastSEO()->helpers->product->is_premium() && $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ) ) { + return; + } + + $sidebar_presenter = new Sidebar_Presenter(); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in presenter. + echo $sidebar_presenter->present(); + } + + /** + * Output a label element. + * + * @since 2.0 + * + * @param string $text Label text string, which can contain escaped html. + * @param array $attr HTML attributes set. + * + * @return void + */ + public function label( $text, $attr ) { + $defaults = [ + 'class' => 'checkbox', + 'close' => true, + 'for' => '', + 'aria_label' => '', + ]; + + $attr = wp_parse_args( $attr, $defaults ); + $aria_label = ''; + if ( $attr['aria_label'] !== '' ) { + $aria_label = ' aria-label="' . esc_attr( $attr['aria_label'] ) . '"'; + } + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. Specifically, the $text variable can contain escaped html. + echo "'; + } + } + + /** + * Output a legend element. + * + * @since 3.4 + * + * @param string $text Legend text string. + * @param array $attr HTML attributes set. + * + * @return void + */ + public function legend( $text, $attr ) { + $defaults = [ + 'id' => '', + 'class' => '', + ]; + $attr = wp_parse_args( $attr, $defaults ); + + $id = ( $attr['id'] === '' ) ? '' : ' id="' . esc_attr( $attr['id'] ) . '"'; + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + echo '' . $text . ''; + } + + /** + * Create a Checkbox input field. + * + * @since 2.0 + * + * @param string $variable The variable within the option to create the checkbox for. + * @param string $label The label to show for the variable. + * @param bool $label_left Whether the label should be left (true) or right (false). + * @param array $attr Extra attributes to add to the checkbox. + * + * @return void + */ + public function checkbox( $variable, $label, $label_left = false, $attr = [] ) { + $val = $this->get_field_value( $variable, false ); + + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + if ( $val === true ) { + $val = 'on'; + } + + $class = ''; + if ( $label_left !== false ) { + $this->label( $label_left, [ 'for' => $variable ] ); + } + else { + $class = 'double'; + } + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. + echo ''; + + if ( ! empty( $label ) ) { + $this->label( $label, [ 'for' => $variable ] ); + } + + echo '
      '; + } + + /** + * Creates a Checkbox input field list. + * + * @since 12.8 + * + * @param string $variable The variables within the option to create the checkbox list for. + * @param string $labels The labels to show for the variable. + * @param array $attr Extra attributes to add to the checkbox list. + * + * @return void + */ + public function checkbox_list( $variable, $labels, $attr = [] ) { + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + $values = $this->get_field_value( $variable, [] ); + + foreach ( $labels as $name => $label ) { + printf( + '', + esc_attr( $variable . '-' . $name ), + esc_attr( $this->option_name . '[' . $variable . '][' . $name . ']' ), + checked( ! empty( $values[ $name ] ), true, false ), + esc_attr( $name ), + disabled( ( isset( $attr['disabled'] ) && $attr['disabled'] ), true, false ) + ); + + printf( + '', + esc_attr( $variable . '-' . $name ), // #1 + esc_html( $label ) + ); + echo '
      '; + } + } + + /** + * Create a light switch input field using a single checkbox. + * + * @since 3.1 + * + * @param string $variable The variable within the option to create the checkbox for. + * @param string $label The visual label text for the toggle. + * @param array $buttons Array of two visual labels for the buttons (defaults Disabled/Enabled). + * @param bool $reverse Reverse order of buttons (default true). + * @param string $help Inline Help that will be printed out before the toggle. + * @param bool $strong Whether the visual label is displayed in strong text. Default is false. + * Starting from Yoast SEO 16.5, the visual label is forced to bold via CSS. + * @param array $attr Extra attributes to add to the light switch. + * + * @return void + */ + public function light_switch( $variable, $label, $buttons = [], $reverse = true, $help = '', $strong = false, $attr = [] ) { + $val = $this->get_field_value( $variable, false ); + + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + if ( $val === true ) { + $val = 'on'; + } + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + $output = new Light_Switch_Presenter( + $variable, + $label, + $buttons, + $this->option_name . '[' . $variable . ']', + $val, + $reverse, + $help, + $strong, + $disabled_attribute + ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: All output is properly escaped or hardcoded in the presenter. + echo $output; + } + + /** + * Create a Text input field. + * + * @since 2.0 + * @since 2.1 Introduced the `$attr` parameter. + * + * @param string $variable The variable within the option to create the text input field for. + * @param string $label The label to show for the variable. + * @param array|string $attr Extra attributes to add to the input field. Can be class, disabled, autocomplete. + * + * @return void + */ + public function textinput( $variable, $label, $attr = [] ) { + $type = 'text'; + if ( ! is_array( $attr ) ) { + $attr = [ + 'class' => $attr, + 'disabled' => false, + ]; + } + + $defaults = [ + 'placeholder' => '', + 'class' => '', + ]; + $attr = wp_parse_args( $attr, $defaults ); + $val = $this->get_field_value( $variable, '' ); + if ( isset( $attr['type'] ) && $attr['type'] === 'url' ) { + $val = urldecode( $val ); + $type = 'url'; + } + $attributes = isset( $attr['autocomplete'] ) ? ' autocomplete="' . esc_attr( $attr['autocomplete'] ) . '"' : ''; + + $this->label( + $label, + [ + 'for' => $variable, + 'class' => 'textinput', + ] + ); + + $aria_attributes = Yoast_Input_Validation::get_the_aria_invalid_attribute( $variable ); + + $aria_attributes .= Yoast_Input_Validation::get_the_aria_describedby_attribute( $variable ); + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. + echo '', '
      '; + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in getter. + echo Yoast_Input_Validation::get_the_error_description( $variable ); + } + + /** + * Create a Number input field. + * + * @param string $variable The variable within the option to create the text input field for. + * @param string $label The label to show for the variable. + * @param array|string $attr Extra attributes to add to the input field. Can be class, disabled, autocomplete. + * + * @return void + */ + public function number( $variable, $label, $attr = [] ) { + $type = 'number'; + $defaults = [ + 'placeholder' => '', + 'class' => 'number', + 'disabled' => false, + 'min' => 0, + 'max' => 100, + ]; + $attr = wp_parse_args( $attr, $defaults ); + $val = $this->get_field_value( $variable, 0 ); + + $this->label( + $label, + [ + 'for' => $variable, + 'class' => 'textinput ' . $attr['class'], + ] + ); + + $aria_attributes = Yoast_Input_Validation::get_the_aria_invalid_attribute( $variable ); + $aria_attributes .= Yoast_Input_Validation::get_the_aria_describedby_attribute( $variable ); + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. + echo '', '
      '; + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in getter. + echo Yoast_Input_Validation::get_the_error_description( $variable ); + } + + /** + * Creates a text input field with with the ability to add content after the label. + * + * @param string $variable The variable within the option to create the text input field for. + * @param string $label The label to show for the variable. + * @param array $attr Extra attributes to add to the input field. + * + * @return void + */ + public function textinput_extra_content( $variable, $label, $attr = [] ) { + $type = 'text'; + + $defaults = [ + 'class' => 'yoast-field-group__inputfield', + 'disabled' => false, + ]; + + $attr = wp_parse_args( $attr, $defaults ); + $val = $this->get_field_value( $variable, '' ); + + if ( isset( $attr['type'] ) && $attr['type'] === 'url' ) { + $val = urldecode( $val ); + $type = 'url'; + } + + echo '
      '; + $this->label( + $label, + [ + 'for' => $variable, + 'class' => $attr['class'] . '--label', + ] + ); + + if ( isset( $attr['extra_content'] ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: may contain HTML that should not be escaped. + echo $attr['extra_content']; + } + echo '
      '; + + $aria_attributes = Yoast_Input_Validation::get_the_aria_invalid_attribute( $variable ); + $aria_attributes .= Yoast_Input_Validation::get_the_aria_describedby_attribute( $variable ); + + // phpcs:disable WordPress.Security.EscapeOutput -- Reason: output is properly escaped or hardcoded. + printf( + '', + $type, + esc_attr( $this->option_name . '[' . $variable . ']' ), + esc_attr( $variable ), + esc_attr( $attr['class'] ), + isset( $attr['placeholder'] ) ? ' placeholder="' . esc_attr( $attr['placeholder'] ) . '"' : '', + isset( $attr['autocomplete'] ) ? ' autocomplete="' . esc_attr( $attr['autocomplete'] ) . '"' : '', + $aria_attributes, + esc_attr( $val ), + $this->get_disabled_attribute( $variable, $attr ) + ); + // phpcs:enable + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: output is properly escaped. + echo Yoast_Input_Validation::get_the_error_description( $variable ); + } + + /** + * Create a textarea. + * + * @since 2.0 + * + * @param string $variable The variable within the option to create the textarea for. + * @param string $label The label to show for the variable. + * @param string|array $attr The CSS class or an array of attributes to assign to the textarea. + * + * @return void + */ + public function textarea( $variable, $label, $attr = [] ) { + if ( ! is_array( $attr ) ) { + $attr = [ + 'class' => $attr, + ]; + } + + $defaults = [ + 'cols' => '', + 'rows' => '', + 'class' => '', + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + $val = $this->get_field_value( $variable, '' ); + + $this->label( + $label, + [ + 'for' => $variable, + 'class' => 'textinput', + ] + ); + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. + echo '
      '; + } + + /** + * Create a hidden input field. + * + * @since 2.0 + * + * @param string $variable The variable within the option to create the hidden input for. + * @param string $id The ID of the element. + * @param mixed $val Optional. The value to set in the input field. Otherwise the value from the options will be used. + * + * @return void + */ + public function hidden( $variable, $id = '', $val = null ) { + if ( is_null( $val ) ) { + $val = $this->get_field_value( $variable, '' ); + } + + if ( is_bool( $val ) ) { + $val = ( $val === true ) ? 'true' : 'false'; + } + + if ( $id === '' ) { + $id = 'hidden_' . $variable; + } + + echo ''; + } + + /** + * Create a Select Box. + * + * @since 2.0 + * + * @param string $variable The variable within the option to create the select for. + * @param string $label The label to show for the variable. + * @param array $select_options The select options to choose from. + * @param string $styled The select style. Use 'styled' to get a styled select. Default 'unstyled'. + * @param bool $show_label Whether or not to show the label, if not, it will be applied as an aria-label. + * @param array $attr Extra attributes to add to the select. + * @param string $help Optional. Inline Help HTML that will be printed after the label. Default is empty. + * + * @return void + */ + public function select( $variable, $label, array $select_options, $styled = 'unstyled', $show_label = true, $attr = [], $help = '' ) { + if ( empty( $select_options ) ) { + return; + } + + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + if ( $show_label ) { + $this->label( + $label, + [ + 'for' => $variable, + 'class' => 'select', + ] + ); + echo $help; // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: The help contains HTML. + } + + $select_name = esc_attr( $this->option_name ) . '[' . esc_attr( $variable ) . ']'; + $active_option = $this->get_field_value( $variable, '' ); + $wrapper_start_tag = ''; + $wrapper_end_tag = ''; + + $select = new Yoast_Input_Select( $variable, $select_name, $select_options, $active_option ); + $select->add_attribute( 'class', 'select' ); + + if ( $this->is_control_disabled( $variable ) + || ( isset( $attr['disabled'] ) && $attr['disabled'] ) ) { + $select->add_attribute( 'disabled', 'disabled' ); + } + + if ( ! $show_label ) { + $select->add_attribute( 'aria-label', $label ); + } + + if ( $styled === 'styled' ) { + $wrapper_start_tag = ''; + $wrapper_end_tag = ''; + } + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + echo $wrapper_start_tag; + $select->output_html(); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + echo $wrapper_end_tag; + echo '
      '; + } + + /** + * Create a File upload field. + * + * @since 2.0 + * + * @param string $variable The variable within the option to create the file upload field for. + * @param string $label The label to show for the variable. + * @param array $attr Extra attributes to add to the file upload input. + * + * @return void + */ + public function file_upload( $variable, $label, $attr = [] ) { + $val = $this->get_field_value( $variable, '' ); + if ( is_array( $val ) ) { + $val = $val['url']; + } + + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + $var_esc = esc_attr( $variable ); + $this->label( + $label, + [ + 'for' => $variable, + 'class' => 'select', + ] + ); + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. + echo ''; + + // Need to save separate array items in hidden inputs, because empty file inputs type will be deleted by settings API. + if ( ! empty( $val ) ) { + $this->hidden( 'file', $this->option_name . '_file' ); + $this->hidden( 'url', $this->option_name . '_url' ); + $this->hidden( 'type', $this->option_name . '_type' ); + } + echo '
      '; + } + + /** + * Media input. + * + * @since 2.0 + * + * @param string $variable Option name. + * @param string $label Label message. + * @param array $attr Extra attributes to add to the media input and buttons. + * + * @return void + */ + public function media_input( $variable, $label, $attr = [] ) { + $val = $this->get_field_value( $variable, '' ); + $id_value = $this->get_field_value( $variable . '_id', '' ); + + $var_esc = esc_attr( $variable ); + + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + $this->label( + $label, + [ + 'for' => 'wpseo_' . $variable, + 'class' => 'select', + ] + ); + + $id_field_id = 'wpseo_' . $var_esc . '_id'; + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + echo ''; + echo ' '; + echo ' '; + echo ''; + echo ''; + echo ''; + echo '
      '; + } + + /** + * Create a Radio input field. + * + * @since 2.0 + * + * @param string $variable The variable within the option to create the radio button for. + * @param array $values The radio options to choose from. + * @param string $legend Optional. The legend to show for the field set, if any. + * @param array $legend_attr Optional. The attributes for the legend, if any. + * @param array $attr Extra attributes to add to the radio button. + * + * @return void + */ + public function radio( $variable, $values, $legend = '', $legend_attr = [], $attr = [] ) { + if ( ! is_array( $values ) || $values === [] ) { + return; + } + $val = $this->get_field_value( $variable, false ); + + $var_esc = esc_attr( $variable ); + + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + echo '
      '; + + if ( is_string( $legend ) && $legend !== '' ) { + + $legend_defaults = [ + 'id' => '', + 'class' => 'radiogroup', + ]; + + $legend_attr = wp_parse_args( $legend_attr, $legend_defaults ); + + $this->legend( $legend, $legend_attr ); + } + + foreach ( $values as $key => $value ) { + $label = $value; + $aria_label = ''; + + if ( is_array( $value ) ) { + $label = ( $value['label'] ?? '' ); + $aria_label = ( $value['aria_label'] ?? '' ); + } + + $key_esc = esc_attr( $key ); + + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. + echo ''; + $this->label( + $label, + [ + 'for' => $var_esc . '-' . $key_esc, + 'class' => 'radio', + 'aria_label' => $aria_label, + ] + ); + } + echo '
      '; + } + + /** + * Create a toggle switch input field using two radio buttons. + * + * @since 3.1 + * + * @param string $variable The variable within the option to create the radio buttons for. + * @param array $values Associative array of on/off keys and their values to be used as + * the label elements text for the radio buttons. Optionally, each + * value can be an array of visible label text and screen reader text. + * @param string $label The visual label for the radio buttons group, used as the fieldset legend. + * @param string $help Inline Help that will be printed out before the visible toggles text. + * @param array $attr Extra attributes to add to the toggle switch. + * + * @return void + */ + public function toggle_switch( $variable, $values, $label, $help = '', $attr = [] ) { + if ( ! is_array( $values ) || $values === [] ) { + return; + } + + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + if ( isset( $attr['preserve_disabled_value'] ) && $attr['preserve_disabled_value'] ) { + $this->hidden( $variable ); + $variable .= '_disabled'; + } + + $val = $this->get_field_value( $variable, false ); + if ( $val === true ) { + $val = 'on'; + } + if ( $val === false ) { + $val = 'off'; + } + + $help_class = ! empty( $help ) ? ' switch-container__has-help' : ''; + + $has_premium_upsell = ( isset( $attr['show_premium_upsell'] ) && $attr['show_premium_upsell'] && isset( $attr['premium_upsell_url'] ) && ! empty( $attr['premium_upsell_url'] ) ); + $upsell_class = ( $has_premium_upsell ) ? ' premium-upsell' : ''; + + $var_esc = esc_attr( $variable ); + + printf( '
      ', esc_attr( 'switch-container' . $help_class . $upsell_class ) ); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + echo '
      ', $label, '', $help; + + // Show disabled note if attribute does not exists or does exist and is set to true. + if ( ! isset( $attr['show_disabled_note'] ) || ( $attr['show_disabled_note'] === true ) ) { + if ( isset( $attr['note_when_disabled'] ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + echo $this->get_disabled_note( $variable, $attr['note_when_disabled'] ); + } + else { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + echo $this->get_disabled_note( $variable ); + } + } + + echo '
      '; + + foreach ( $values as $key => $value ) { + $screen_reader_text_html = ''; + + if ( is_array( $value ) ) { + $screen_reader_text = $value['screen_reader_text']; + $screen_reader_text_html = ' ' . esc_html( $screen_reader_text ) . ''; + $value = $value['text']; + } + + $key_esc = esc_attr( $key ); + $for = $var_esc . '-' . $key_esc; + $disabled_attribute = $this->get_disabled_attribute( $variable, $attr ); + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: $disabled_attribute output is hardcoded and all other output is properly escaped. + echo '', + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output escaped before. + ''; + } + + $upsell_button = ''; + if ( $has_premium_upsell ) { + $upsell_button = '' + . esc_html__( 'Unlock with Premium!', 'wordpress-seo' ) + /* translators: Hidden accessibility text. */ + . '' . esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) . '' + . ''; + } + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- All variable output is escaped above. + echo '
      ' . $upsell_button . '
      ' . PHP_EOL . PHP_EOL; + } + + /** + * Creates a toggle switch to define whether an indexable should be indexed or not. + * + * @param string $variable The variable within the option to create the radio buttons for. + * @param string $label The visual label for the radio buttons group, used as the fieldset legend. + * @param string $help Inline Help that will be printed out before the visible toggles text. + * @param array $attr Extra attributes to add to the index switch. + * + * @return void + */ + public function index_switch( $variable, $label, $help = '', $attr = [] ) { + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + $index_switch_values = [ + 'off' => __( 'On', 'wordpress-seo' ), + 'on' => __( 'Off', 'wordpress-seo' ), + ]; + + $is_disabled = ( isset( $attr['disabled'] ) && $attr['disabled'] ); + + $this->toggle_switch( + $variable, + $index_switch_values, + sprintf( + /* translators: %s expands to an indexable object's name, like a post type or taxonomy */ + esc_html__( 'Show %s in search results?', 'wordpress-seo' ), + $label + ), + $help, + [ 'disabled' => $is_disabled ] + ); + } + + /** + * Creates a toggle switch to show hide certain options. + * + * @param string $variable The variable within the option to create the radio buttons for. + * @param string $label The visual label for the radio buttons group, used as the fieldset legend. + * @param bool $inverse_keys Whether or not the option keys need to be inverted to support older functions. + * @param string $help Inline Help that will be printed out before the visible toggles text. + * @param array $attr Extra attributes to add to the show-hide switch. + * + * @return void + */ + public function show_hide_switch( $variable, $label, $inverse_keys = false, $help = '', $attr = [] ) { + $defaults = [ + 'disabled' => false, + ]; + $attr = wp_parse_args( $attr, $defaults ); + + $on_key = ( $inverse_keys ) ? 'off' : 'on'; + $off_key = ( $inverse_keys ) ? 'on' : 'off'; + + $show_hide_switch = [ + $on_key => __( 'On', 'wordpress-seo' ), + $off_key => __( 'Off', 'wordpress-seo' ), + ]; + + $is_disabled = ( isset( $attr['disabled'] ) && $attr['disabled'] ); + + $this->toggle_switch( + $variable, + $show_hide_switch, + $label, + $help, + [ 'disabled' => $is_disabled ] + ); + } + + /** + * Retrieves the value for the form field. + * + * @param string $field_name The field name to retrieve the value for. + * @param string|null $default_value The default value, when field has no value. + * + * @return mixed|null The retrieved value. + */ + protected function get_field_value( $field_name, $default_value = null ) { + // On multisite subsites, the Usage tracking feature should always be set to Off. + if ( $this->is_tracking_on_subsite( $field_name ) ) { + return false; + } + + return WPSEO_Options::get( $field_name, $default_value ); + } + + /** + * Checks whether a given control should be disabled. + * + * @param string $variable The variable within the option to check whether its control should be disabled. + * + * @return bool True if control should be disabled, false otherwise. + */ + protected function is_control_disabled( $variable ) { + if ( $this->option_instance === null ) { + return false; + } + + // Disable the Usage tracking feature for multisite subsites. + if ( $this->is_tracking_on_subsite( $variable ) ) { + return true; + } + + return $this->option_instance->is_disabled( $variable ); + } + + /** + * Gets the explanation note to print if a given control is disabled. + * + * @param string $variable The variable within the option to print a disabled note for. + * @param string $custom_note An optional custom note to print instead. + * + * @return string Explanation note HTML string, or empty string if no note necessary. + */ + protected function get_disabled_note( $variable, $custom_note = '' ) { + if ( $custom_note === '' && ! $this->is_control_disabled( $variable ) ) { + return ''; + } + $disabled_message = esc_html__( 'This feature has been disabled by the network admin.', 'wordpress-seo' ); + + // The explanation to show when disabling the Usage tracking feature for multisite subsites. + if ( $this->is_tracking_on_subsite( $variable ) ) { + $disabled_message = esc_html__( 'This feature has been disabled since subsites never send tracking data.', 'wordpress-seo' ); + } + + if ( $custom_note ) { + $disabled_message = esc_html( $custom_note ); + } + + return '

      ' . $disabled_message . '

      '; + } + + /** + * Determines whether we are dealing with the Usage tracking feature on a multisite subsite. + * This feature requires specific behavior for the toggle switch. + * + * @param string $feature_setting The feature setting. + * + * @return bool True if we are dealing with the Usage tracking feature on a multisite subsite. + */ + protected function is_tracking_on_subsite( $feature_setting ) { + return ( $feature_setting === 'tracking' && ! is_network_admin() && ! is_main_site() ); + } + + /** + * Returns the disabled attribute HTML. + * + * @param string $variable The variable within the option of the related form element. + * @param array $attr Extra attributes added to the form element. + * + * @return string The disabled attribute HTML. + */ + protected function get_disabled_attribute( $variable, $attr ) { + if ( $this->is_control_disabled( $variable ) || ( isset( $attr['disabled'] ) && $attr['disabled'] ) ) { + return ' disabled'; + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-input-validation.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-input-validation.php new file mode 100644 index 00000000..b034ae40 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-input-validation.php @@ -0,0 +1,256 @@ + + */ + private static $error_descriptions = []; + + /** + * Check whether an option group is a Yoast SEO setting. + * + * The normal pattern is 'yoast' . $option_name . 'options'. + * + * @since 12.0 + * + * @param string $group_name The option group name. + * + * @return bool Whether or not it's an Yoast SEO option group. + */ + public static function is_yoast_option_group_name( $group_name ) { + return ( strpos( $group_name, 'yoast' ) !== false ); + } + + /** + * Adds an error message to the document title when submitting a settings + * form and errors are returned. + * + * Uses the WordPress `admin_title` filter in the WPSEO_Option subclasses. + * + * @since 12.0 + * + * @param string $admin_title The page title, with extra context added. + * + * @return string The modified or original admin title. + */ + public static function add_yoast_admin_document_title_errors( $admin_title ) { + $errors = get_settings_errors(); + $error_count = 0; + + foreach ( $errors as $error ) { + // For now, filter the admin title only in the Yoast SEO settings pages. + if ( self::is_yoast_option_group_name( $error['setting'] ) && $error['code'] !== 'settings_updated' ) { + ++$error_count; + } + } + + if ( $error_count > 0 ) { + return sprintf( + /* translators: %1$s: amount of errors, %2$s: the admin page title */ + _n( 'The form contains %1$s error. %2$s', 'The form contains %1$s errors. %2$s', $error_count, 'wordpress-seo' ), + number_format_i18n( $error_count ), + $admin_title + ); + } + + return $admin_title; + } + + /** + * Checks whether a specific form input field was submitted with an invalid value. + * + * @since 12.1 + * + * @param string $error_code Must be the same slug-name used for the field variable and for `add_settings_error()`. + * + * @return bool Whether or not the submitted input field contained an invalid value. + */ + public static function yoast_form_control_has_error( $error_code ) { + $errors = get_settings_errors(); + + foreach ( $errors as $error ) { + if ( $error['code'] === $error_code ) { + return true; + } + } + + return false; + } + + /** + * Sets the error descriptions. + * + * @since 12.1 + * + * @param array $descriptions An associative array of error descriptions. + * For each entry, the key must be the setting variable. + * + * @return void + * + * @deprecated 23.3 + * @codeCoverageIgnore + */ + public static function set_error_descriptions( $descriptions = [] ) { // @phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable, Generic.CodeAnalysis.UnusedFunctionParameter.Found -- Needed for BC. + _deprecated_function( __METHOD__, 'Yoast SEO 23.3' ); + } + + /** + * Gets all the error descriptions. + * + * @since 12.1 + * + * @deprecated 23.3 + * @codeCoverageIgnore + * + * @return array An associative array of error descriptions. + */ + public static function get_error_descriptions() { + _deprecated_function( __METHOD__, 'Yoast SEO 23.3' ); + return []; + } + + /** + * Gets a specific error description. + * + * @since 12.1 + * + * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. + * + * @return string|null The error description. + */ + public static function get_error_description( $error_code ) { + if ( ! isset( self::$error_descriptions[ $error_code ] ) ) { + return null; + } + + return self::$error_descriptions[ $error_code ]; + } + + /** + * Gets the aria-invalid HTML attribute based on the submitted invalid value. + * + * @since 12.1 + * + * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. + * + * @return string The aria-invalid HTML attribute or empty string. + */ + public static function get_the_aria_invalid_attribute( $error_code ) { + if ( self::yoast_form_control_has_error( $error_code ) ) { + return ' aria-invalid="true"'; + } + + return ''; + } + + /** + * Gets the aria-describedby HTML attribute based on the submitted invalid value. + * + * @since 12.1 + * + * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. + * + * @return string The aria-describedby HTML attribute or empty string. + */ + public static function get_the_aria_describedby_attribute( $error_code ) { + if ( self::yoast_form_control_has_error( $error_code ) && self::get_error_description( $error_code ) ) { + return ' aria-describedby="' . esc_attr( $error_code ) . '-error-description"'; + } + + return ''; + } + + /** + * Gets the error description wrapped in a HTML paragraph. + * + * @since 12.1 + * + * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. + * + * @return string The error description HTML or empty string. + */ + public static function get_the_error_description( $error_code ) { + $error_description = self::get_error_description( $error_code ); + + if ( self::yoast_form_control_has_error( $error_code ) && $error_description ) { + return '

      ' . $error_description . '

      '; + } + + return ''; + } + + /** + * Adds the submitted invalid value to the WordPress `$wp_settings_errors` global. + * + * @since 12.1 + * + * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. + * @param string $dirty_value The submitted invalid value. + * + * @return void + */ + public static function add_dirty_value_to_settings_errors( $error_code, $dirty_value ) { + global $wp_settings_errors; + + if ( ! is_array( $wp_settings_errors ) ) { + return; + } + + foreach ( $wp_settings_errors as $index => $error ) { + if ( $error['code'] === $error_code ) { + // phpcs:ignore WordPress.WP.GlobalVariablesOverride -- This is a deliberate action. + $wp_settings_errors[ $index ]['yoast_dirty_value'] = $dirty_value; + } + } + } + + /** + * Gets an invalid submitted value. + * + * @since 12.1 + * + * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. + * + * @return string The submitted invalid input field value. + * + * @deprecated 23.3 + * @codeCoverageIgnore + */ + public static function get_dirty_value( $error_code ) { // @phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable, Generic.CodeAnalysis.UnusedFunctionParameter.Found -- Needed for BC. + _deprecated_function( __METHOD__, 'Yoast SEO 23.3' ); + return ''; + } + + /** + * Gets a specific invalid value message. + * + * @since 12.1 + * + * @param string $error_code Code of the error set via `add_settings_error()`, normally the variable name. + * + * @return string The error invalid value message or empty string. + * + * @deprecated 23.3 + * @codeCoverageIgnore + */ + public static function get_dirty_value_message( $error_code ) { // @phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable, Generic.CodeAnalysis.UnusedFunctionParameter.Found -- Needed for BC. + _deprecated_function( __METHOD__, 'Yoast SEO 23.3' ); + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-admin.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-admin.php new file mode 100644 index 00000000..01f8f2f3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-admin.php @@ -0,0 +1,334 @@ + $site_label pairs. + */ + public function get_site_choices( $include_empty = false, $show_title = false ) { + $choices = []; + + if ( $include_empty ) { + $choices['-'] = __( 'None', 'wordpress-seo' ); + } + + $criteria = [ + 'deleted' => 0, + 'network_id' => get_current_network_id(), + ]; + $sites = get_sites( $criteria ); + + foreach ( $sites as $site ) { + $site_name = $site->domain . $site->path; + if ( $show_title ) { + $site_name = $site->blogname . ' (' . $site->domain . $site->path . ')'; + } + $choices[ $site->blog_id ] = $site->blog_id . ': ' . $site_name; + + $site_states = $this->get_site_states( $site ); + if ( ! empty( $site_states ) ) { + $choices[ $site->blog_id ] .= ' [' . implode( ', ', $site_states ) . ']'; + } + } + + return $choices; + } + + /** + * Gets the states of a site. + * + * @param WP_Site $site Site object. + * + * @return array Array of $state_slug => $state_label pairs. + */ + public function get_site_states( $site ) { + $available_states = [ + 'public' => __( 'public', 'wordpress-seo' ), + 'archived' => __( 'archived', 'wordpress-seo' ), + 'mature' => __( 'mature', 'wordpress-seo' ), + 'spam' => __( 'spam', 'wordpress-seo' ), + 'deleted' => __( 'deleted', 'wordpress-seo' ), + ]; + + $site_states = []; + foreach ( $available_states as $state_slug => $state_label ) { + if ( $site->$state_slug === '1' ) { + $site_states[ $state_slug ] = $state_label; + } + } + + return $site_states; + } + + /** + * Handles a request to update plugin network options. + * + * This method works similar to how option updates are handled in `wp-admin/options.php` and + * `wp-admin/network/settings.php`. + * + * @return void + */ + public function handle_update_options_request() { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: Nonce verification will happen in verify_request below. + if ( ! isset( $_POST['network_option_group'] ) || ! is_string( $_POST['network_option_group'] ) ) { + return; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: Nonce verification will happen in verify_request below. + $option_group = sanitize_text_field( wp_unslash( $_POST['network_option_group'] ) ); + + if ( empty( $option_group ) ) { + return; + } + + $this->verify_request( "{$option_group}-network-options" ); + + $whitelist_options = Yoast_Network_Settings_API::get()->get_whitelist_options( $option_group ); + + if ( empty( $whitelist_options ) ) { + add_settings_error( $option_group, 'settings_updated', __( 'You are not allowed to modify unregistered network settings.', 'wordpress-seo' ), 'error' ); + + $this->terminate_request(); + return; + } + + // phpcs:disable WordPress.Security.NonceVerification -- Nonce verified via `verify_request()` above. + foreach ( $whitelist_options as $option_name ) { + $value = null; + if ( isset( $_POST[ $option_name ] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: Adding sanitize_text_field around this will break the saving of settings because it expects a string: https://github.com/Yoast/wordpress-seo/issues/12440. + $value = wp_unslash( $_POST[ $option_name ] ); + } + + WPSEO_Options::update_site_option( $option_name, $value ); + } + // phpcs:enable WordPress.Security.NonceVerification + + $settings_errors = get_settings_errors(); + if ( empty( $settings_errors ) ) { + add_settings_error( $option_group, 'settings_updated', __( 'Settings Updated.', 'wordpress-seo' ), 'updated' ); + } + + $this->terminate_request(); + } + + /** + * Handles a request to restore a site's default settings. + * + * @return void + */ + public function handle_restore_site_request() { + $this->verify_request( 'wpseo-network-restore', 'restore_site_nonce' ); + + $option_group = 'wpseo_ms'; + + // phpcs:ignore WordPress.Security.NonceVerification -- Nonce verified via `verify_request()` above. + $site_id = ! empty( $_POST[ $option_group ]['site_id'] ) ? (int) $_POST[ $option_group ]['site_id'] : 0; + if ( ! $site_id ) { + add_settings_error( $option_group, 'settings_updated', __( 'No site has been selected to restore.', 'wordpress-seo' ), 'error' ); + + $this->terminate_request(); + return; + } + + $site = get_site( $site_id ); + if ( ! $site ) { + /* translators: %s expands to the ID of a site within a multisite network. */ + add_settings_error( $option_group, 'settings_updated', sprintf( __( 'Site with ID %d not found.', 'wordpress-seo' ), $site_id ), 'error' ); + } + else { + WPSEO_Options::reset_ms_blog( $site_id ); + + /* translators: %s expands to the name of a site within a multisite network. */ + add_settings_error( $option_group, 'settings_updated', sprintf( __( '%s restored to default SEO settings.', 'wordpress-seo' ), esc_html( $site->blogname ) ), 'updated' ); + } + + $this->terminate_request(); + } + + /** + * Outputs nonce, action and option group fields for a network settings page in the plugin. + * + * @param string $option_group Option group name for the current page. + * + * @return void + */ + public function settings_fields( $option_group ) { + ?> + + + enqueue_script( 'network-admin' ); + + $translations = [ + /* translators: %s: success message */ + 'success_prefix' => __( 'Success: %s', 'wordpress-seo' ), + /* translators: %s: error message */ + 'error_prefix' => __( 'Error: %s', 'wordpress-seo' ), + ]; + $asset_manager->localize_script( + 'network-admin', + 'wpseoNetworkAdminGlobalL10n', + $translations + ); + } + + /** + * Hooks in the necessary actions and filters. + * + * @return void + */ + public function register_hooks() { + + if ( ! $this->meets_requirements() ) { + return; + } + + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + + add_action( 'admin_action_' . self::UPDATE_OPTIONS_ACTION, [ $this, 'handle_update_options_request' ] ); + add_action( 'admin_action_' . self::RESTORE_SITE_ACTION, [ $this, 'handle_restore_site_request' ] ); + } + + /** + * Hooks in the necessary AJAX actions. + * + * @return void + */ + public function register_ajax_hooks() { + add_action( 'wp_ajax_' . self::UPDATE_OPTIONS_ACTION, [ $this, 'handle_update_options_request' ] ); + add_action( 'wp_ajax_' . self::RESTORE_SITE_ACTION, [ $this, 'handle_restore_site_request' ] ); + } + + /** + * Checks whether the requirements to use this class are met. + * + * @return bool True if requirements are met, false otherwise. + */ + public function meets_requirements() { + return is_multisite() && is_network_admin(); + } + + /** + * Verifies that the current request is valid. + * + * @param string $action Nonce action. + * @param string $query_arg Optional. Nonce query argument. Default '_wpnonce'. + * + * @return void + */ + public function verify_request( $action, $query_arg = '_wpnonce' ) { + $has_access = current_user_can( 'wpseo_manage_network_options' ); + + if ( wp_doing_ajax() ) { + check_ajax_referer( $action, $query_arg ); + + if ( ! $has_access ) { + wp_die( -1, 403 ); + } + return; + } + + check_admin_referer( $action, $query_arg ); + + if ( ! $has_access ) { + wp_die( esc_html__( 'You are not allowed to perform this action.', 'wordpress-seo' ) ); + } + } + + /** + * Terminates the current request by either redirecting back or sending an AJAX response. + * + * @return void + */ + public function terminate_request() { + if ( wp_doing_ajax() ) { + $settings_errors = get_settings_errors(); + + if ( ! empty( $settings_errors ) && $settings_errors[0]['type'] === 'updated' ) { + wp_send_json_success( $settings_errors, 200 ); + } + + wp_send_json_error( $settings_errors, 400 ); + } + + $this->persist_settings_errors(); + $this->redirect_back( [ 'settings-updated' => 'true' ] ); + } + + /** + * Persists settings errors. + * + * Settings errors are stored in a transient for 30 seconds so that this transient + * can be retrieved on the next page load. + * + * @return void + */ + protected function persist_settings_errors() { + /* + * A regular transient is used here, since it is automatically cleared right after the redirect. + * A network transient would be cleaner, but would require a lot of copied code from core for + * just a minor adjustment when displaying settings errors. + */ + set_transient( 'settings_errors', get_settings_errors(), 30 ); + } + + /** + * Redirects back to the referer URL, with optional query arguments. + * + * @param array $query_args Optional. Query arguments to add to the redirect URL. Default none. + * + * @return void + */ + protected function redirect_back( $query_args = [] ) { + $sendback = wp_get_referer(); + + if ( ! empty( $query_args ) ) { + $sendback = add_query_arg( $query_args, $sendback ); + } + + wp_safe_redirect( $sendback ); + exit; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-settings-api.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-settings-api.php new file mode 100644 index 00000000..990f78ad --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-network-settings-api.php @@ -0,0 +1,164 @@ + $option_group, + 'sanitize_callback' => null, + ]; + $args = wp_parse_args( $args, $defaults ); + + if ( ! isset( $this->whitelist_options[ $option_group ] ) ) { + $this->whitelist_options[ $option_group ] = []; + } + + $this->whitelist_options[ $option_group ][] = $option_name; + + if ( ! empty( $args['sanitize_callback'] ) ) { + add_filter( "sanitize_option_{$option_name}", [ $this, 'filter_sanitize_option' ], 10, 2 ); + } + + if ( array_key_exists( 'default', $args ) ) { + add_filter( "default_site_option_{$option_name}", [ $this, 'filter_default_option' ], 10, 2 ); + } + + $this->registered_settings[ $option_name ] = $args; + } + + /** + * Gets the registered settings and their data. + * + * @return array Array of $option_name => $data pairs. + */ + public function get_registered_settings() { + return $this->registered_settings; + } + + /** + * Gets the whitelisted options for a given option group. + * + * @param string $option_group Option group. + * + * @return array List of option names, or empty array if unknown option group. + */ + public function get_whitelist_options( $option_group ) { + if ( ! isset( $this->whitelist_options[ $option_group ] ) ) { + return []; + } + + return $this->whitelist_options[ $option_group ]; + } + + /** + * Filters sanitization for a network option value. + * + * This method is added as a filter to `sanitize_option_{$option}` for network options that are + * registered with a sanitize callback. + * + * @param string $value The sanitized option value. + * @param string $option The option name. + * + * @return string The filtered sanitized option value. + */ + public function filter_sanitize_option( $value, $option ) { + + if ( empty( $this->registered_settings[ $option ] ) ) { + return $value; + } + + return call_user_func( $this->registered_settings[ $option ]['sanitize_callback'], $value ); + } + + /** + * Filters the default value for a network option. + * + * This function is added as a filter to `default_site_option_{$option}` for network options that + * are registered with a default. + * + * @param mixed $default_value Existing default value to return. + * @param string $option The option name. + * + * @return mixed The filtered default value. + */ + public function filter_default_option( $default_value, $option ) { + + // If a default value was manually passed to the function, allow it to override. + if ( $default_value !== false ) { + return $default_value; + } + + if ( empty( $this->registered_settings[ $option ] ) ) { + return $default_value; + } + + return $this->registered_settings[ $option ]['default']; + } + + /** + * Checks whether the requirements to use this class are met. + * + * @return bool True if requirements are met, false otherwise. + */ + public function meets_requirements() { + return is_multisite(); + } + + /** + * Gets the singleton instance of this class. + * + * @return Yoast_Network_Settings_API The singleton instance. + */ + public static function get() { + + if ( self::$instance === null ) { + self::$instance = new self(); + } + + return self::$instance; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php new file mode 100644 index 00000000..fcbc734d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification-center.php @@ -0,0 +1,954 @@ +get_notification_by_id( $notification_id ); + if ( ( $notification instanceof Yoast_Notification ) === false ) { + + // Permit legacy. + $options = [ + 'id' => $notification_id, + 'dismissal_key' => $notification_id, + ]; + $notification = new Yoast_Notification( '', $options ); + } + + if ( self::maybe_dismiss_notification( $notification ) ) { + die( '1' ); + } + + die( '-1' ); + } + + /** + * Check if the user has dismissed a notification. + * + * @param Yoast_Notification $notification The notification to check for dismissal. + * @param int|null $user_id User ID to check on. + * + * @return bool + */ + public static function is_notification_dismissed( Yoast_Notification $notification, $user_id = null ) { + + $user_id = self::get_user_id( $user_id ); + $dismissal_key = $notification->get_dismissal_key(); + + // This checks both the site-specific user option and the meta value. + $current_value = get_user_option( $dismissal_key, $user_id ); + + // Migrate old user meta to user option on-the-fly. + if ( ! empty( $current_value ) + && metadata_exists( 'user', $user_id, $dismissal_key ) + && update_user_option( $user_id, $dismissal_key, $current_value ) ) { + delete_user_meta( $user_id, $dismissal_key ); + } + + return ! empty( $current_value ); + } + + /** + * Checks if the notification is being dismissed. + * + * @param Yoast_Notification $notification Notification to check dismissal of. + * @param string $meta_value Value to set the meta value to if dismissed. + * + * @return bool True if dismissed. + */ + public static function maybe_dismiss_notification( Yoast_Notification $notification, $meta_value = 'seen' ) { + + // Only persistent notifications are dismissible. + if ( ! $notification->is_persistent() ) { + return false; + } + + // If notification is already dismissed, we're done. + if ( self::is_notification_dismissed( $notification ) ) { + return true; + } + + $dismissal_key = $notification->get_dismissal_key(); + $notification_id = $notification->get_id(); + + $is_dismissing = ( $dismissal_key === self::get_user_input( 'notification' ) ); + if ( ! $is_dismissing ) { + $is_dismissing = ( $notification_id === self::get_user_input( 'notification' ) ); + } + + // Fallback to ?dismissal_key=1&nonce=bla when JavaScript fails. + if ( ! $is_dismissing ) { + $is_dismissing = ( self::get_user_input( $dismissal_key ) === '1' ); + } + + if ( ! $is_dismissing ) { + return false; + } + + $user_nonce = self::get_user_input( 'nonce' ); + if ( wp_verify_nonce( $user_nonce, $notification_id ) === false ) { + return false; + } + + return self::dismiss_notification( $notification, $meta_value ); + } + + /** + * Dismisses a notification. + * + * @param Yoast_Notification $notification Notification to dismiss. + * @param string $meta_value Value to save in the dismissal. + * + * @return bool True if dismissed, false otherwise. + */ + public static function dismiss_notification( Yoast_Notification $notification, $meta_value = 'seen' ) { + // Dismiss notification. + return update_user_option( get_current_user_id(), $notification->get_dismissal_key(), $meta_value ) !== false; + } + + /** + * Restores a notification. + * + * @param Yoast_Notification $notification Notification to restore. + * + * @return bool True if restored, false otherwise. + */ + public static function restore_notification( Yoast_Notification $notification ) { + + $user_id = get_current_user_id(); + $dismissal_key = $notification->get_dismissal_key(); + + // Restore notification. + $restored = delete_user_option( $user_id, $dismissal_key ); + + // Delete unprefixed user meta too for backward-compatibility. + if ( metadata_exists( 'user', $user_id, $dismissal_key ) ) { + $restored = delete_user_meta( $user_id, $dismissal_key ) && $restored; + } + + return $restored; + } + + /** + * Clear dismissal information for the specified Notification. + * + * When a cause is resolved, the next time it is present we want to show + * the message again. + * + * @param string|Yoast_Notification $notification Notification to clear the dismissal of. + * + * @return bool + */ + public function clear_dismissal( $notification ) { + + global $wpdb; + + if ( $notification instanceof Yoast_Notification ) { + $dismissal_key = $notification->get_dismissal_key(); + } + + if ( is_string( $notification ) ) { + $dismissal_key = $notification; + } + + if ( empty( $dismissal_key ) ) { + return false; + } + + // Remove notification dismissal for all users. + $deleted = delete_metadata( 'user', 0, $wpdb->get_blog_prefix() . $dismissal_key, '', true ); + + // Delete unprefixed user meta too for backward-compatibility. + $deleted = delete_metadata( 'user', 0, $dismissal_key, '', true ) || $deleted; + + return $deleted; + } + + /** + * Retrieves notifications from the storage and merges in previous notification changes. + * + * The current user in WordPress is not loaded shortly before the 'init' hook, but the plugin + * sometimes needs to add or remove notifications before that. In such cases, the transactions + * are not actually executed, but added to a queue. That queue is then handled in this method, + * after notifications for the current user have been set up. + * + * @return void + */ + public function setup_current_notifications() { + $this->retrieve_notifications_from_storage( get_current_user_id() ); + + foreach ( $this->queued_transactions as $transaction ) { + list( $callback, $args ) = $transaction; + + call_user_func_array( $callback, $args ); + } + + $this->queued_transactions = []; + } + + /** + * Add notification to the cookie. + * + * @param Yoast_Notification $notification Notification object instance. + * + * @return void + */ + public function add_notification( Yoast_Notification $notification ) { + + $callback = [ $this, __FUNCTION__ ]; + $args = func_get_args(); + if ( $this->queue_transaction( $callback, $args ) ) { + return; + } + + // Don't add if the user can't see it. + if ( ! $notification->display_for_current_user() ) { + return; + } + + $notification_id = $notification->get_id(); + $user_id = $notification->get_user_id(); + + // Empty notifications are always added. + if ( $notification_id !== '' ) { + + // If notification ID exists in notifications, don't add again. + $present_notification = $this->get_notification_by_id( $notification_id, $user_id ); + if ( ! is_null( $present_notification ) ) { + $this->remove_notification( $present_notification, false ); + } + + if ( is_null( $present_notification ) ) { + $this->new[] = $notification_id; + } + } + + // Add to list. + $this->notifications[ $user_id ][] = $notification; + + $this->notifications_need_storage = true; + } + + /** + * Get the notification by ID and user ID. + * + * @param string $notification_id The ID of the notification to search for. + * @param int|null $user_id The ID of the user. + * + * @return Yoast_Notification|null + */ + public function get_notification_by_id( $notification_id, $user_id = null ) { + $user_id = self::get_user_id( $user_id ); + + $notifications = $this->get_notifications_for_user( $user_id ); + + foreach ( $notifications as $notification ) { + if ( $notification_id === $notification->get_id() ) { + return $notification; + } + } + + return null; + } + + /** + * Display the notifications. + * + * @param bool $echo_as_json True when notifications should be printed directly. + * + * @return void + */ + public function display_notifications( $echo_as_json = false ) { + + // Never display notifications for network admin. + if ( is_network_admin() ) { + return; + } + + $sorted_notifications = $this->get_sorted_notifications(); + $notifications = array_filter( $sorted_notifications, [ $this, 'is_notification_persistent' ] ); + + if ( empty( $notifications ) ) { + return; + } + + array_walk( $notifications, [ $this, 'remove_notification' ] ); + + $notifications = array_unique( $notifications ); + if ( $echo_as_json ) { + $notification_json = []; + + foreach ( $notifications as $notification ) { + $notification_json[] = $notification->render(); + } + + // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. + echo WPSEO_Utils::format_json_encode( $notification_json ); + + return; + } + + foreach ( $notifications as $notification ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Temporarily disabled, see: https://github.com/Yoast/wordpress-seo-premium/issues/2510 and https://github.com/Yoast/wordpress-seo-premium/issues/2511. + echo $notification; + } + } + + /** + * Remove notification after it has been displayed. + * + * @param Yoast_Notification $notification Notification to remove. + * @param bool $resolve Resolve as fixed. + * + * @return void + */ + public function remove_notification( Yoast_Notification $notification, $resolve = true ) { + + $callback = [ $this, __FUNCTION__ ]; + $args = func_get_args(); + if ( $this->queue_transaction( $callback, $args ) ) { + return; + } + + $index = false; + + // ID of the user to show the notification for, defaults to current user id. + $user_id = $notification->get_user_id(); + $notifications = $this->get_notifications_for_user( $user_id ); + + // Match persistent Notifications by ID, non persistent by item in the array. + if ( $notification->is_persistent() ) { + foreach ( $notifications as $current_index => $present_notification ) { + if ( $present_notification->get_id() === $notification->get_id() ) { + $index = $current_index; + break; + } + } + } + else { + $index = array_search( $notification, $notifications, true ); + } + + if ( $index === false ) { + return; + } + + if ( $notification->is_persistent() && $resolve ) { + ++$this->resolved; + $this->clear_dismissal( $notification ); + } + + unset( $notifications[ $index ] ); + $this->notifications[ $user_id ] = array_values( $notifications ); + + $this->notifications_need_storage = true; + } + + /** + * Removes a notification by its ID. + * + * @param string $notification_id The notification id. + * @param bool $resolve Resolve as fixed. + * + * @return void + */ + public function remove_notification_by_id( $notification_id, $resolve = true ) { + $notification = $this->get_notification_by_id( $notification_id ); + + if ( $notification === null ) { + return; + } + + $this->remove_notification( $notification, $resolve ); + $this->notifications_need_storage = true; + } + + /** + * Get the notification count. + * + * @param bool $dismissed Count dismissed notifications. + * + * @return int Number of notifications + */ + public function get_notification_count( $dismissed = false ) { + + $notifications = $this->get_notifications_for_user( get_current_user_id() ); + $notifications = array_filter( $notifications, [ $this, 'filter_persistent_notifications' ] ); + + if ( ! $dismissed ) { + $notifications = array_filter( $notifications, [ $this, 'filter_dismissed_notifications' ] ); + } + + return count( $notifications ); + } + + /** + * Get the number of notifications resolved this execution. + * + * These notifications have been resolved and should be counted when active again. + * + * @return int + */ + public function get_resolved_notification_count() { + + return $this->resolved; + } + + /** + * Return the notifications sorted on type and priority. + * + * @return array|Yoast_Notification[] Sorted Notifications + */ + public function get_sorted_notifications() { + $notifications = $this->get_notifications_for_user( get_current_user_id() ); + if ( empty( $notifications ) ) { + return []; + } + + // Sort by severity, error first. + usort( $notifications, [ $this, 'sort_notifications' ] ); + + return $notifications; + } + + /** + * AJAX display notifications. + * + * @return void + */ + public function ajax_get_notifications() { + $echo = false; + // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form data. + if ( isset( $_POST['version'] ) && is_string( $_POST['version'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only comparing the variable in a condition. + $echo = wp_unslash( $_POST['version'] ) === '2'; + } + + // Display the notices. + $this->display_notifications( $echo ); + + // AJAX die. + exit; + } + + /** + * Remove storage when the plugin is deactivated. + * + * @return void + */ + public function deactivate_hook() { + + $this->clear_notifications(); + } + + /** + * Returns the given user ID if it exists. + * Otherwise, this function returns the ID of the current user. + * + * @param int $user_id The user ID to check. + * + * @return int The user ID to use. + */ + private static function get_user_id( $user_id ) { + if ( $user_id ) { + return $user_id; + } + return get_current_user_id(); + } + + /** + * Splits the notifications on user ID. + * + * In other terms, it returns an associative array, + * mapping user ID to a list of notifications for this user. + * + * @param array|Yoast_Notification[] $notifications The notifications to split. + * + * @return array The notifications, split on user ID. + */ + private function split_on_user_id( $notifications ) { + $split_notifications = []; + foreach ( $notifications as $notification ) { + $split_notifications[ $notification->get_user_id() ][] = $notification; + } + return $split_notifications; + } + + /** + * Save persistent notifications to storage. + * + * We need to be able to retrieve these so they can be dismissed at any time during the execution. + * + * @since 3.2 + * + * @return void + */ + public function update_storage() { + + $notifications = $this->notifications; + + /** + * One array of Yoast_Notifications, merged from multiple arrays. + * + * @var Yoast_Notification[] $merged_notifications + */ + $merged_notifications = []; + if ( ! empty( $notifications ) ) { + $merged_notifications = array_merge( ...$notifications ); + } + + /** + * Filter: 'yoast_notifications_before_storage' - Allows developer to filter notifications before saving them. + * + * @param Yoast_Notification[] $notifications + */ + $filtered_merged_notifications = apply_filters( 'yoast_notifications_before_storage', $merged_notifications ); + + // The notifications were filtered and therefore need to be stored. + if ( $merged_notifications !== $filtered_merged_notifications ) { + $merged_notifications = $filtered_merged_notifications; + $this->notifications_need_storage = true; + } + + $notifications = $this->split_on_user_id( $merged_notifications ); + + // No notifications to store, clear storage if it was previously present. + if ( empty( $notifications ) ) { + $this->remove_storage(); + + return; + } + + // Only store notifications if changes are made. + if ( $this->notifications_need_storage ) { + array_walk( $notifications, [ $this, 'store_notifications_for_user' ] ); + } + } + + /** + * Stores the notifications to its respective user's storage. + * + * @param array|Yoast_Notification[] $notifications The notifications to store. + * @param int $user_id The ID of the user for which to store the notifications. + * + * @return void + */ + private function store_notifications_for_user( $notifications, $user_id ) { + $notifications_as_arrays = array_map( [ $this, 'notification_to_array' ], $notifications ); + update_user_option( $user_id, self::STORAGE_KEY, $notifications_as_arrays ); + } + + /** + * Provide a way to verify present notifications. + * + * @return array|Yoast_Notification[] Registered notifications. + */ + public function get_notifications() { + if ( ! $this->notifications ) { + return []; + } + return array_merge( ...$this->notifications ); + } + + /** + * Returns the notifications for the given user. + * + * @param int $user_id The id of the user to check. + * + * @return Yoast_Notification[] The notifications for the user with the given ID. + */ + public function get_notifications_for_user( $user_id ) { + if ( array_key_exists( $user_id, $this->notifications ) ) { + return $this->notifications[ $user_id ]; + } + return []; + } + + /** + * Get newly added notifications. + * + * @return array + */ + public function get_new_notifications() { + + return array_map( [ $this, 'get_notification_by_id' ], $this->new ); + } + + /** + * Get information from the User input. + * + * Note that this function does not handle nonce verification. + * + * @param string $key Key to retrieve. + * + * @return string non-sanitized value of key if set, an empty string otherwise. + */ + private static function get_user_input( $key ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information and only using this variable in a comparison. + $request_method = isset( $_SERVER['REQUEST_METHOD'] ) && is_string( $_SERVER['REQUEST_METHOD'] ) ? strtoupper( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) : ''; + // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: This function does not sanitize variables. + // phpcs:disable WordPress.Security.NonceVerification.Recommended,WordPress.Security.NonceVerification.Missing -- Reason: This function does not verify a nonce. + if ( $request_method === 'POST' ) { + if ( isset( $_POST[ $key ] ) && is_string( $_POST[ $key ] ) ) { + return wp_unslash( $_POST[ $key ] ); + } + } + elseif ( isset( $_GET[ $key ] ) && is_string( $_GET[ $key ] ) ) { + return wp_unslash( $_GET[ $key ] ); + } + // phpcs:enable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + return ''; + } + + /** + * Retrieve the notifications from storage and fill the relevant property. + * + * @param int $user_id The ID of the user to retrieve notifications for. + * + * @return void + */ + private function retrieve_notifications_from_storage( $user_id ) { + if ( $this->notifications_retrieved ) { + return; + } + + $this->notifications_retrieved = true; + + $stored_notifications = get_user_option( self::STORAGE_KEY, $user_id ); + + // Check if notifications are stored. + if ( empty( $stored_notifications ) ) { + return; + } + + if ( is_array( $stored_notifications ) ) { + $notifications = array_map( [ $this, 'array_to_notification' ], $stored_notifications ); + + // Apply array_values to ensure we get a 0-indexed array. + $notifications = array_values( array_filter( $notifications, [ $this, 'filter_notification_current_user' ] ) ); + + $this->notifications[ $user_id ] = $notifications; + } + } + + /** + * Sort on type then priority. + * + * @param Yoast_Notification $a Compare with B. + * @param Yoast_Notification $b Compare with A. + * + * @return int 1, 0 or -1 for sorting offset. + */ + private function sort_notifications( Yoast_Notification $a, Yoast_Notification $b ) { + + $a_type = $a->get_type(); + $b_type = $b->get_type(); + + if ( $a_type === $b_type ) { + return WPSEO_Utils::calc( $b->get_priority(), 'compare', $a->get_priority() ); + } + + if ( $a_type === 'error' ) { + return -1; + } + + if ( $b_type === 'error' ) { + return 1; + } + + return 0; + } + + /** + * Clear local stored notifications. + * + * @return void + */ + private function clear_notifications() { + + $this->notifications = []; + $this->notifications_retrieved = false; + } + + /** + * Filter out non-persistent notifications. + * + * @since 3.2 + * + * @param Yoast_Notification $notification Notification to test for persistent. + * + * @return bool + */ + private function filter_persistent_notifications( Yoast_Notification $notification ) { + + return $notification->is_persistent(); + } + + /** + * Filter out dismissed notifications. + * + * @param Yoast_Notification $notification Notification to check. + * + * @return bool + */ + private function filter_dismissed_notifications( Yoast_Notification $notification ) { + + return ! self::maybe_dismiss_notification( $notification ); + } + + /** + * Convert Notification to array representation. + * + * @since 3.2 + * + * @param Yoast_Notification $notification Notification to convert. + * + * @return array + */ + private function notification_to_array( Yoast_Notification $notification ) { + + $notification_data = $notification->to_array(); + + if ( isset( $notification_data['nonce'] ) ) { + unset( $notification_data['nonce'] ); + } + + return $notification_data; + } + + /** + * Convert stored array to Notification. + * + * @param array $notification_data Array to convert to Notification. + * + * @return Yoast_Notification + */ + private function array_to_notification( $notification_data ) { + + if ( isset( $notification_data['options']['nonce'] ) ) { + unset( $notification_data['options']['nonce'] ); + } + + if ( isset( $notification_data['message'] ) + && is_subclass_of( $notification_data['message'], Abstract_Presenter::class, false ) + ) { + $notification_data['message'] = $notification_data['message']->present(); + } + + if ( isset( $notification_data['options']['user'] ) ) { + $notification_data['options']['user_id'] = $notification_data['options']['user']->ID; + unset( $notification_data['options']['user'] ); + + $this->notifications_need_storage = true; + } + + return new Yoast_Notification( + $notification_data['message'], + $notification_data['options'] + ); + } + + /** + * Filter notifications that should not be displayed for the current user. + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private function filter_notification_current_user( Yoast_Notification $notification ) { + return $notification->display_for_current_user(); + } + + /** + * Checks if given notification is persistent. + * + * @param Yoast_Notification $notification The notification to check. + * + * @return bool True when notification is not persistent. + */ + private function is_notification_persistent( Yoast_Notification $notification ) { + return ! $notification->is_persistent(); + } + + /** + * Queues a notification transaction for later execution if notifications are not yet set up. + * + * @param callable $callback Callback that performs the transaction. + * @param array $args Arguments to pass to the callback. + * + * @return bool True if transaction was queued, false if it can be performed immediately. + */ + private function queue_transaction( $callback, $args ) { + if ( $this->notifications_retrieved ) { + return false; + } + + $this->add_transaction_to_queue( $callback, $args ); + + return true; + } + + /** + * Adds a notification transaction to the queue for later execution. + * + * @param callable $callback Callback that performs the transaction. + * @param array $args Arguments to pass to the callback. + * + * @return void + */ + private function add_transaction_to_queue( $callback, $args ) { + $this->queued_transactions[] = [ $callback, $args ]; + } + + /** + * Removes all notifications from storage. + * + * @return bool True when notifications got removed. + */ + protected function remove_storage() { + if ( ! $this->has_stored_notifications() ) { + return false; + } + + delete_user_option( get_current_user_id(), self::STORAGE_KEY ); + return true; + } + + /** + * Checks if there are stored notifications. + * + * @return bool True when there are stored notifications. + */ + protected function has_stored_notifications() { + $stored_notifications = $this->get_stored_notifications(); + + return ! empty( $stored_notifications ); + } + + /** + * Retrieves the stored notifications. + * + * @codeCoverageIgnore + * + * @return array|false Array with notifications or false when not set. + */ + protected function get_stored_notifications() { + return get_user_option( self::STORAGE_KEY, get_current_user_id() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php new file mode 100644 index 00000000..3191827b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notification.php @@ -0,0 +1,429 @@ + self::UPDATED, + 'id' => '', + 'user_id' => null, + 'nonce' => null, + 'priority' => 0.5, + 'data_json' => [], + 'dismissal_key' => null, + 'capabilities' => [], + 'capability_check' => self::MATCH_ALL, + 'yoast_branding' => false, + ]; + + /** + * The message for the notification. + * + * @var string + */ + private $message; + + /** + * Notification class constructor. + * + * @param string $message Message string. + * @param array $options Set of options. + */ + public function __construct( $message, $options = [] ) { + $this->message = $message; + $this->options = $this->normalize_options( $options ); + } + + /** + * Retrieve notification ID string. + * + * @return string + */ + public function get_id() { + return $this->options['id']; + } + + /** + * Retrieve the user to show the notification for. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @return WP_User The user to show this notification for. + */ + public function get_user() { + _deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + return null; + } + + /** + * Retrieve the id of the user to show the notification for. + * + * Returns the id of the current user if not user has been sent. + * + * @return int The user id + */ + public function get_user_id() { + return ( $this->options['user_id'] ?? get_current_user_id() ); + } + + /** + * Retrieve nonce identifier. + * + * @return string|null Nonce for this Notification. + */ + public function get_nonce() { + if ( $this->options['id'] && empty( $this->options['nonce'] ) ) { + $this->options['nonce'] = wp_create_nonce( $this->options['id'] ); + } + + return $this->options['nonce']; + } + + /** + * Make sure the nonce is up to date. + * + * @return void + */ + public function refresh_nonce() { + if ( $this->options['id'] ) { + $this->options['nonce'] = wp_create_nonce( $this->options['id'] ); + } + } + + /** + * Get the type of the notification. + * + * @return string + */ + public function get_type() { + return $this->options['type']; + } + + /** + * Priority of the notification. + * + * Relative to the type. + * + * @return float Returns the priority between 0 and 1. + */ + public function get_priority() { + return $this->options['priority']; + } + + /** + * Get the User Meta key to check for dismissal of notification. + * + * @return string User Meta Option key that registers dismissal. + */ + public function get_dismissal_key() { + if ( empty( $this->options['dismissal_key'] ) ) { + return $this->options['id']; + } + + return $this->options['dismissal_key']; + } + + /** + * Is this Notification persistent. + * + * @return bool True if persistent, False if fire and forget. + */ + public function is_persistent() { + $id = $this->get_id(); + + return ! empty( $id ); + } + + /** + * Check if the notification is relevant for the current user. + * + * @return bool True if a user needs to see this notification, false if not. + */ + public function display_for_current_user() { + // If the notification is for the current page only, always show. + if ( ! $this->is_persistent() ) { + return true; + } + + // If the current user doesn't match capabilities. + return $this->match_capabilities(); + } + + /** + * Does the current user match required capabilities. + * + * @return bool + */ + public function match_capabilities() { + // Super Admin can do anything. + if ( is_multisite() && is_super_admin( $this->options['user_id'] ) ) { + return true; + } + + /** + * Filter capabilities that enable the displaying of this notification. + * + * @param array $capabilities The capabilities that must be present for this notification. + * @param Yoast_Notification $notification The notification object. + * + * @return array Array of capabilities or empty for no restrictions. + * + * @since 3.2 + */ + $capabilities = apply_filters( 'wpseo_notification_capabilities', $this->options['capabilities'], $this ); + + // Should be an array. + if ( ! is_array( $capabilities ) ) { + $capabilities = (array) $capabilities; + } + + /** + * Filter capability check to enable all or any capabilities. + * + * @param string $capability_check The type of check that will be used to determine if an capability is present. + * @param Yoast_Notification $notification The notification object. + * + * @return string self::MATCH_ALL or self::MATCH_ANY. + * + * @since 3.2 + */ + $capability_check = apply_filters( 'wpseo_notification_capability_check', $this->options['capability_check'], $this ); + + if ( ! in_array( $capability_check, [ self::MATCH_ALL, self::MATCH_ANY ], true ) ) { + $capability_check = self::MATCH_ALL; + } + + if ( ! empty( $capabilities ) ) { + + $has_capabilities = array_filter( $capabilities, [ $this, 'has_capability' ] ); + + switch ( $capability_check ) { + case self::MATCH_ALL: + return $has_capabilities === $capabilities; + case self::MATCH_ANY: + return ! empty( $has_capabilities ); + } + } + + return true; + } + + /** + * Array filter function to find matched capabilities. + * + * @param string $capability Capability to test. + * + * @return bool + */ + private function has_capability( $capability ) { + $user_id = $this->options['user_id']; + if ( ! is_numeric( $user_id ) ) { + return false; + } + $user = get_user_by( 'id', $user_id ); + if ( ! $user ) { + return false; + } + + return $user->has_cap( $capability ); + } + + /** + * Return the object properties as an array. + * + * @return array + */ + public function to_array() { + return [ + 'message' => $this->message, + 'options' => $this->options, + ]; + } + + /** + * Adds string (view) behaviour to the notification. + * + * @return string + */ + public function __toString() { + return $this->render(); + } + + /** + * Renders the notification as a string. + * + * @return string The rendered notification. + */ + public function render() { + $attributes = []; + + // Default notification classes. + $classes = [ + 'yoast-notification', + ]; + + // Maintain WordPress visualisation of notifications when they are not persistent. + if ( ! $this->is_persistent() ) { + $classes[] = 'notice'; + $classes[] = $this->get_type(); + } + + if ( ! empty( $classes ) ) { + $attributes['class'] = implode( ' ', $classes ); + } + + // Combined attribute key and value into a string. + array_walk( $attributes, [ $this, 'parse_attributes' ] ); + + $message = null; + if ( $this->options['yoast_branding'] ) { + $message = $this->wrap_yoast_seo_icon( $this->message ); + } + + if ( $message === null ) { + $message = wpautop( $this->message ); + } + + // Build the output DIV. + return '
      ' . $message . '
      ' . PHP_EOL; + } + + /** + * Wraps the message with a Yoast SEO icon. + * + * @param string $message The message to wrap. + * + * @return string The wrapped message. + */ + private function wrap_yoast_seo_icon( $message ) { + $out = sprintf( + '', + esc_url( plugin_dir_url( WPSEO_FILE ) . 'packages/js/images/Yoast_SEO_Icon.svg' ), + 60, + 60 + ); + $out .= '
      '; + $out .= $message; + $out .= '
      '; + + return $out; + } + + /** + * Get the JSON if provided. + * + * @return false|string + */ + public function get_json() { + if ( empty( $this->options['data_json'] ) ) { + return ''; + } + + return WPSEO_Utils::format_json_encode( $this->options['data_json'] ); + } + + /** + * Make sure we only have values that we can work with. + * + * @param array $options Options to normalize. + * + * @return array + */ + private function normalize_options( $options ) { + $options = wp_parse_args( $options, $this->defaults ); + + // Should not exceed 0 or 1. + $options['priority'] = min( 1, max( 0, $options['priority'] ) ); + + // Set default capabilities when not supplied. + if ( empty( $options['capabilities'] ) || $options['capabilities'] === [] ) { + $options['capabilities'] = [ 'wpseo_manage_options' ]; + } + + // Set to the id of the current user if not supplied. + if ( $options['user_id'] === null ) { + $options['user_id'] = get_current_user_id(); + } + + return $options; + } + + /** + * Format HTML element attributes. + * + * @param string $value Attribute value. + * @param string $key Attribute name. + * + * @return void + */ + private function parse_attributes( &$value, $key ) { + $value = sprintf( '%s="%s"', sanitize_key( $key ), esc_attr( $value ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notifications.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notifications.php new file mode 100644 index 00000000..c3847e01 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-notifications.php @@ -0,0 +1,319 @@ +add_hooks(); + } + + /** + * Add hooks + * + * @return void + */ + private function add_hooks() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); + if ( $page === self::ADMIN_PAGE ) { + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + } + + // Needed for adminbar and Notifications page. + add_action( 'admin_init', [ self::class, 'collect_notifications' ], 99 ); + + // Add AJAX hooks. + add_action( 'wp_ajax_yoast_dismiss_notification', [ $this, 'ajax_dismiss_notification' ] ); + add_action( 'wp_ajax_yoast_restore_notification', [ $this, 'ajax_restore_notification' ] ); + } + + /** + * Enqueue assets. + * + * @return void + */ + public function enqueue_assets() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + + $asset_manager->enqueue_style( 'notifications' ); + } + + /** + * Handle ajax request to dismiss a notification. + * + * @return void + */ + public function ajax_dismiss_notification() { + + $notification = $this->get_notification_from_ajax_request(); + if ( $notification ) { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->maybe_dismiss_notification( $notification ); + + $this->output_ajax_response( $notification->get_type() ); + } + + wp_die(); + } + + /** + * Handle ajax request to restore a notification. + * + * @return void + */ + public function ajax_restore_notification() { + + $notification = $this->get_notification_from_ajax_request(); + if ( $notification ) { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->restore_notification( $notification ); + + $this->output_ajax_response( $notification->get_type() ); + } + + wp_die(); + } + + /** + * Create AJAX response data. + * + * @param string $type Notification type. + * + * @return void + */ + private function output_ajax_response( $type ) { + + $html = $this->get_view_html( $type ); + // phpcs:disable WordPress.Security.EscapeOutput -- Reason: WPSEO_Utils::format_json_encode is safe. + echo WPSEO_Utils::format_json_encode( + [ + 'html' => $html, + 'total' => self::get_active_notification_count(), + ] + ); + // phpcs:enable -- Reason: WPSEO_Utils::format_json_encode is safe. + } + + /** + * Get the HTML to return in the AJAX request. + * + * @param string $type Notification type. + * + * @return bool|string + */ + private function get_view_html( $type ) { + + switch ( $type ) { + case 'error': + $view = 'errors'; + break; + + case 'warning': + default: + $view = 'warnings'; + break; + } + + // Re-collect notifications. + self::collect_notifications(); + + /** + * Stops PHPStorm from nagging about this variable being unused. The variable is used in the view. + * + * @noinspection PhpUnusedLocalVariableInspection + */ + $notifications_data = self::get_template_variables(); + + ob_start(); + include WPSEO_PATH . 'admin/views/partial-notifications-' . $view . '.php'; + $html = ob_get_clean(); + + return $html; + } + + /** + * Extract the Yoast Notification from the AJAX request. + * + * This function does not handle nonce verification. + * + * @return Yoast_Notification|null A Yoast_Notification on success, null on failure. + */ + private function get_notification_from_ajax_request() { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: This function does not handle nonce verification. + if ( ! isset( $_POST['notification'] ) || ! is_string( $_POST['notification'] ) ) { + return null; + } + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: This function does not handle nonce verification. + $notification_id = sanitize_text_field( wp_unslash( $_POST['notification'] ) ); + + if ( empty( $notification_id ) ) { + return null; + } + $notification_center = Yoast_Notification_Center::get(); + return $notification_center->get_notification_by_id( $notification_id ); + } + + /** + * Collect the notifications and group them together. + * + * @return void + */ + public static function collect_notifications() { + + $notification_center = Yoast_Notification_Center::get(); + + $notifications = $notification_center->get_sorted_notifications(); + self::$notification_count = count( $notifications ); + + self::$errors = array_filter( $notifications, [ self::class, 'filter_error_notifications' ] ); + self::$dismissed_errors = array_filter( self::$errors, [ self::class, 'filter_dismissed_notifications' ] ); + self::$active_errors = array_diff( self::$errors, self::$dismissed_errors ); + + self::$warnings = array_filter( $notifications, [ self::class, 'filter_warning_notifications' ] ); + self::$dismissed_warnings = array_filter( self::$warnings, [ self::class, 'filter_dismissed_notifications' ] ); + self::$active_warnings = array_diff( self::$warnings, self::$dismissed_warnings ); + } + + /** + * Get the variables needed in the views. + * + * @return array + */ + public static function get_template_variables() { + + return [ + 'metrics' => [ + 'total' => self::$notification_count, + 'active' => self::get_active_notification_count(), + 'errors' => count( self::$errors ), + 'warnings' => count( self::$warnings ), + ], + 'errors' => [ + 'dismissed' => self::$dismissed_errors, + 'active' => self::$active_errors, + ], + 'warnings' => [ + 'dismissed' => self::$dismissed_warnings, + 'active' => self::$active_warnings, + ], + ]; + } + + /** + * Get the number of active notifications. + * + * @return int + */ + public static function get_active_notification_count() { + + return ( count( self::$active_errors ) + count( self::$active_warnings ) ); + } + + /** + * Filter out any non-errors. + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private static function filter_error_notifications( Yoast_Notification $notification ) { + + return $notification->get_type() === 'error'; + } + + /** + * Filter out any non-warnings. + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private static function filter_warning_notifications( Yoast_Notification $notification ) { + + return $notification->get_type() !== 'error'; + } + + /** + * Filter out any dismissed notifications. + * + * @param Yoast_Notification $notification Notification to test. + * + * @return bool + */ + private static function filter_dismissed_notifications( Yoast_Notification $notification ) { + + return Yoast_Notification_Center::is_notification_dismissed( $notification ); + } +} + +class_alias( Yoast_Notifications::class, 'Yoast_Alerts' ); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php new file mode 100644 index 00000000..302cd495 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/class-yoast-plugin-conflict.php @@ -0,0 +1,342 @@ +plugins the active plugins will be stored in this + * property. + * + * @var array + */ + protected $active_conflicting_plugins = []; + + /** + * Property for holding instance of itself. + * + * @var Yoast_Plugin_Conflict + */ + protected static $instance; + + /** + * For the use of singleton pattern. Create instance of itself and return this instance. + * + * @param string $class_name Give the classname to initialize. If classname is + * false (empty) it will use it's own __CLASS__. + * + * @return Yoast_Plugin_Conflict + */ + public static function get_instance( $class_name = '' ) { + + if ( is_null( self::$instance ) ) { + if ( ! is_string( $class_name ) || $class_name === '' ) { + $class_name = self::class; + } + + self::$instance = new $class_name(); + } + + return self::$instance; + } + + /** + * Setting instance, all active plugins and search for active plugins. + * + * Protected constructor to prevent creating a new instance of the + * *Singleton* via the `new` operator from outside this class. + */ + protected function __construct() { + // Set active plugins. + $this->all_active_plugins = get_option( 'active_plugins' ); + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['action'] ) && is_string( $_GET['action'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information and only comparing the variable in a condition. + $action = wp_unslash( $_GET['action'] ); + if ( $action === 'deactivate' ) { + $this->remove_deactivated_plugin(); + } + } + + // Search for active plugins. + $this->search_active_plugins(); + } + + /** + * Check if there are conflicting plugins for given $plugin_section. + * + * @param string $plugin_section Type of plugin conflict (such as Open Graph or sitemap). + * + * @return bool + */ + public function check_for_conflicts( $plugin_section ) { + + static $sections_checked; + + // Return early if there are no active conflicting plugins at all. + if ( empty( $this->active_conflicting_plugins ) ) { + return false; + } + + if ( $sections_checked === null ) { + $sections_checked = []; + } + + if ( ! in_array( $plugin_section, $sections_checked, true ) ) { + $sections_checked[] = $plugin_section; + return ( ! empty( $this->active_conflicting_plugins[ $plugin_section ] ) ); + } + + return false; + } + + /** + * Checks for given $plugin_sections for conflicts. + * + * @param array $plugin_sections Set of sections. + * + * @return void + */ + public function check_plugin_conflicts( $plugin_sections ) { + foreach ( $plugin_sections as $plugin_section => $readable_plugin_section ) { + // Check for conflicting plugins and show error if there are conflicts. + if ( $this->check_for_conflicts( $plugin_section ) ) { + $this->set_error( $plugin_section, $readable_plugin_section ); + } + } + + // List of all active sections. + $sections = array_keys( $plugin_sections ); + // List of all sections. + $all_plugin_sections = array_keys( $this->plugins ); + + /* + * Get all sections that are inactive. + * These plugins need to be cleared. + * + * This happens when Sitemaps or OpenGraph implementations toggle active/disabled. + */ + $inactive_sections = array_diff( $all_plugin_sections, $sections ); + if ( ! empty( $inactive_sections ) ) { + foreach ( $inactive_sections as $section ) { + array_walk( $this->plugins[ $section ], [ $this, 'clear_error' ] ); + } + } + + // For active sections clear errors for inactive plugins. + foreach ( $sections as $section ) { + // By default, clear errors for all plugins of the section. + $inactive_plugins = $this->plugins[ $section ]; + + // If there are active plugins, filter them from being cleared. + if ( isset( $this->active_conflicting_plugins[ $section ] ) ) { + $inactive_plugins = array_diff( $this->plugins[ $section ], $this->active_conflicting_plugins[ $section ] ); + } + + array_walk( $inactive_plugins, [ $this, 'clear_error' ] ); + } + } + + /** + * Setting an error on the screen. + * + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + * @param string $readable_plugin_section This is the value for the translation. + * + * @return void + */ + protected function set_error( $plugin_section, $readable_plugin_section ) { + + $notification_center = Yoast_Notification_Center::get(); + + foreach ( $this->active_conflicting_plugins[ $plugin_section ] as $plugin_file ) { + + $plugin_name = $this->get_plugin_name( $plugin_file ); + + $error_message = ''; + /* translators: %1$s: 'Facebook & Open Graph' plugin name(s) of possibly conflicting plugin(s), %2$s to Yoast SEO */ + $error_message .= '

      ' . sprintf( __( 'The %1$s plugin might cause issues when used in conjunction with %2$s.', 'wordpress-seo' ), '' . $plugin_name . '', 'Yoast SEO' ) . '

      '; + $error_message .= '

      ' . sprintf( $readable_plugin_section, 'Yoast SEO', $plugin_name ) . '

      '; + + /* translators: %s: 'Facebook' plugin name of possibly conflicting plugin */ + $error_message .= '' . sprintf( __( 'Deactivate %s', 'wordpress-seo' ), $this->get_plugin_name( $plugin_file ) ) . ' '; + + $identifier = $this->get_notification_identifier( $plugin_file ); + + // Add the message to the notifications center. + $notification_center->add_notification( + new Yoast_Notification( + $error_message, + [ + 'type' => Yoast_Notification::ERROR, + 'id' => 'wpseo-conflict-' . $identifier, + ] + ) + ); + } + } + + /** + * Clear the notification for a plugin. + * + * @param string $plugin_file Clear the optional notification for this plugin. + * + * @return void + */ + public function clear_error( $plugin_file ) { + $identifier = $this->get_notification_identifier( $plugin_file ); + + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification_by_id( 'wpseo-conflict-' . $identifier ); + } + + /** + * Loop through the $this->plugins to check if one of the plugins is active. + * + * This method will store the active plugins in $this->active_plugins. + * + * @return void + */ + protected function search_active_plugins() { + foreach ( $this->plugins as $plugin_section => $plugins ) { + $this->check_plugins_active( $plugins, $plugin_section ); + } + } + + /** + * Loop through plugins and check if each plugin is active. + * + * @param array $plugins Set of plugins. + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + * + * @return void + */ + protected function check_plugins_active( $plugins, $plugin_section ) { + foreach ( $plugins as $plugin ) { + if ( $this->check_plugin_is_active( $plugin ) ) { + $this->add_active_plugin( $plugin_section, $plugin ); + } + } + } + + /** + * Check if given plugin exists in array with all_active_plugins. + * + * @param string $plugin Plugin basename string. + * + * @return bool + */ + protected function check_plugin_is_active( $plugin ) { + return in_array( $plugin, $this->all_active_plugins, true ); + } + + /** + * Add plugin to the list of active plugins. + * + * This method will check first if key $plugin_section exists, if not it will create an empty array + * If $plugin itself doesn't exist it will be added. + * + * @param string $plugin_section Type of conflict group (such as Open Graph or sitemap). + * @param string $plugin Plugin basename string. + * + * @return void + */ + protected function add_active_plugin( $plugin_section, $plugin ) { + if ( ! array_key_exists( $plugin_section, $this->active_conflicting_plugins ) ) { + $this->active_conflicting_plugins[ $plugin_section ] = []; + } + + if ( ! in_array( $plugin, $this->active_conflicting_plugins[ $plugin_section ], true ) ) { + $this->active_conflicting_plugins[ $plugin_section ][] = $plugin; + } + } + + /** + * Search in $this->plugins for the given $plugin. + * + * If there is a result it will return the plugin category. + * + * @param string $plugin Plugin basename string. + * + * @return int|string + */ + protected function find_plugin_category( $plugin ) { + foreach ( $this->plugins as $plugin_section => $plugins ) { + if ( in_array( $plugin, $plugins, true ) ) { + return $plugin_section; + } + } + } + + /** + * Get plugin name from file. + * + * @param string $plugin Plugin path relative to plugins directory. + * + * @return string|bool Plugin name or false when no name is set. + */ + protected function get_plugin_name( $plugin ) { + $plugin_details = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + + if ( $plugin_details['Name'] !== '' ) { + return $plugin_details['Name']; + } + + return false; + } + + /** + * When being in the deactivation process the currently deactivated plugin has to be removed. + * + * @return void + */ + private function remove_deactivated_plugin() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: On the deactivation screen the nonce is already checked by WordPress itself. + if ( ! isset( $_GET['plugin'] ) || ! is_string( $_GET['plugin'] ) ) { + return; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: On the deactivation screen the nonce is already checked by WordPress itself. + $deactivated_plugin = sanitize_text_field( wp_unslash( $_GET['plugin'] ) ); + $key_to_remove = array_search( $deactivated_plugin, $this->all_active_plugins, true ); + + if ( $key_to_remove !== false ) { + unset( $this->all_active_plugins[ $key_to_remove ] ); + } + } + + /** + * Get the identifier from the plugin file. + * + * @param string $plugin_file Plugin file to get Identifier from. + * + * @return string + */ + private function get_notification_identifier( $plugin_file ) { + return md5( $plugin_file ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-file-size.php b/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-file-size.php new file mode 100644 index 00000000..9f2bec07 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-file-size.php @@ -0,0 +1,85 @@ +service = $service; + } + + /** + * Registers the routes for the endpoints. + * + * @return void + */ + public function register() { + $route_args = [ + 'methods' => 'GET', + 'args' => [ + 'url' => [ + 'required' => true, + 'type' => 'string', + 'description' => 'The url to retrieve', + ], + ], + 'callback' => [ + $this->service, + 'get', + ], + 'permission_callback' => [ + $this, + 'can_retrieve_data', + ], + ]; + register_rest_route( self::REST_NAMESPACE, self::ENDPOINT_SINGULAR, $route_args ); + } + + /** + * Determines whether or not data can be retrieved for the registered endpoints. + * + * @return bool Whether or not data can be retrieved. + */ + public function can_retrieve_data() { + return current_user_can( self::CAPABILITY_RETRIEVE ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-statistics.php b/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-statistics.php new file mode 100644 index 00000000..392d1c13 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint-statistics.php @@ -0,0 +1,73 @@ +service = $service; + } + + /** + * Registers the REST routes that are available on the endpoint. + * + * @return void + */ + public function register() { + // Register fetch config. + $route_args = [ + 'methods' => 'GET', + 'callback' => [ $this->service, 'get_statistics' ], + 'permission_callback' => [ $this, 'can_retrieve_data' ], + ]; + register_rest_route( self::REST_NAMESPACE, self::ENDPOINT_RETRIEVE, $route_args ); + } + + /** + * Determines whether or not data can be retrieved for the registered endpoints. + * + * @return bool Whether or not data can be retrieved. + */ + public function can_retrieve_data() { + return current_user_can( self::CAPABILITY_RETRIEVE ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint.php b/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint.php new file mode 100644 index 00000000..abbc9d0e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/endpoints/class-endpoint.php @@ -0,0 +1,26 @@ +is_filter_active() ) { + add_action( 'restrict_manage_posts', [ $this, 'render_hidden_input' ] ); + } + + if ( $this->is_filter_active() && $this->get_explanation() !== null ) { + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_explanation_assets' ] ); + } + } + + /** + * Adds the filter links to the view_edit screens to give the user a filter link. + * + * @return void + */ + public function add_filter_links() { + foreach ( $this->get_post_types() as $post_type ) { + add_filter( 'views_edit-' . $post_type, [ $this, 'add_filter_link' ] ); + } + } + + /** + * Enqueues the necessary assets to display a filter explanation. + * + * @return void + */ + public function enqueue_explanation_assets() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_script( 'filter-explanation' ); + $asset_manager->enqueue_style( 'filter-explanation' ); + $asset_manager->localize_script( + 'filter-explanation', + 'yoastFilterExplanation', + [ 'text' => $this->get_explanation() ] + ); + } + + /** + * Adds a filter link to the views. + * + * @param array $views Array with the views. + * + * @return array Array of views including the added view. + */ + public function add_filter_link( $views ) { + $views[ 'yoast_' . $this->get_query_val() ] = sprintf( + '%3$s (%4$s)', + esc_url( $this->get_filter_url() ), + ( $this->is_filter_active() ) ? ' class="current" aria-current="page"' : '', + $this->get_label(), + $this->get_post_total() + ); + + return $views; + } + + /** + * Returns a text explaining this filter. Null if no explanation is necessary. + * + * @return string|null The explanation or null. + */ + protected function get_explanation() { + return null; + } + + /** + * Renders a hidden input to preserve this filter's state when using sub-filters. + * + * @return void + */ + public function render_hidden_input() { + echo ''; + } + + /** + * Returns an url to edit.php with post_type and this filter as the query arguments. + * + * @return string The url to activate this filter. + */ + protected function get_filter_url() { + $query_args = [ + self::FILTER_QUERY_ARG => $this->get_query_val(), + 'post_type' => $this->get_current_post_type(), + ]; + + return add_query_arg( $query_args, 'edit.php' ); + } + + /** + * Returns true when the filter is active. + * + * @return bool Whether the filter is active. + */ + protected function is_filter_active() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET[ self::FILTER_QUERY_ARG ] ) && is_string( $_GET[ self::FILTER_QUERY_ARG ] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET[ self::FILTER_QUERY_ARG ] ) ) === $this->get_query_val(); + } + return false; + } + + /** + * Returns the current post type. + * + * @return string The current post type. + */ + protected function get_current_post_type() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['post_type'] ) && is_string( $_GET['post_type'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $post_type = sanitize_text_field( wp_unslash( $_GET['post_type'] ) ); + if ( ! empty( $post_type ) ) { + return $post_type; + } + } + return 'post'; + } + + /** + * Returns the post types to which this filter should be added. + * + * @return array The post types to which this filter should be added. + */ + protected function get_post_types() { + return WPSEO_Post_Type::get_accessible_post_types(); + } + + /** + * Checks if the post type is supported. + * + * @param string $post_type Post type to check against. + * + * @return bool True when it is supported. + */ + protected function is_supported_post_type( $post_type ) { + return in_array( $post_type, $this->get_post_types(), true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/filters/class-cornerstone-filter.php b/wp/wp-content/plugins/wordpress-seo/admin/filters/class-cornerstone-filter.php new file mode 100644 index 00000000..19831289 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/filters/class-cornerstone-filter.php @@ -0,0 +1,150 @@ +is_filter_active() ) { + global $wpdb; + + $where .= $wpdb->prepare( + " AND {$wpdb->posts}.ID IN ( SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value = '1' ) ", + WPSEO_Meta::$meta_prefix . self::META_NAME + ); + } + + return $where; + } + + /** + * Filters the post types that have the metabox disabled. + * + * @param array $post_types The post types to filter. + * + * @return array The filtered post types. + */ + public function filter_metabox_disabled( $post_types ) { + $filtered_post_types = []; + foreach ( $post_types as $post_type_key => $post_type ) { + if ( ! WPSEO_Post_Type::has_metabox_enabled( $post_type_key ) ) { + continue; + } + + $filtered_post_types[ $post_type_key ] = $post_type; + } + + return $filtered_post_types; + } + + /** + * Returns the label for this filter. + * + * @return string The label for this filter. + */ + protected function get_label() { + return __( 'Cornerstone content', 'wordpress-seo' ); + } + + /** + * Returns a text explaining this filter. + * + * @return string|null The explanation. + */ + protected function get_explanation() { + $post_type_object = get_post_type_object( $this->get_current_post_type() ); + + if ( $post_type_object === null ) { + return null; + } + + return sprintf( + /* translators: %1$s expands to the posttype label, %2$s expands anchor to blog post about cornerstone content, %3$s expands to */ + __( 'Mark the most important %1$s as \'cornerstone content\' to improve your site structure. %2$sLearn more about cornerstone content%3$s.', 'wordpress-seo' ), + strtolower( $post_type_object->labels->name ), + '', + '' + ); + } + + /** + * Returns the total amount of articles marked as cornerstone content. + * + * @return int + */ + protected function get_post_total() { + global $wpdb; + + return (int) $wpdb->get_var( + $wpdb->prepare( + "SELECT COUNT( 1 ) + FROM {$wpdb->postmeta} + WHERE post_id IN( SELECT ID FROM {$wpdb->posts} WHERE post_type = %s ) AND + meta_key = %s AND meta_value = '1' + ", + $this->get_current_post_type(), + WPSEO_Meta::$meta_prefix . self::META_NAME + ) + ); + } + + /** + * Returns the post types to which this filter should be added. + * + * @return array The post types to which this filter should be added. + */ + protected function get_post_types() { + /** + * Filter: 'wpseo_cornerstone_post_types' - Filters post types to exclude the cornerstone feature for. + * + * @param array $post_types The accessible post types to filter. + */ + $post_types = apply_filters( 'wpseo_cornerstone_post_types', parent::get_post_types() ); + if ( ! is_array( $post_types ) ) { + return []; + } + + return $post_types; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php b/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php new file mode 100644 index 00000000..cee32bf2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-metabox-formatter.php @@ -0,0 +1,206 @@ +formatter = $formatter; + } + + /** + * Returns the values. + * + * @return array|bool|int> + */ + public function get_values() { + $defaults = $this->get_defaults(); + $values = $this->formatter->get_values(); + + return ( $values + $defaults ); + } + + /** + * Returns array with all the values always needed by a scraper object. + * + * @return array|bool|int> Default settings for the metabox. + */ + private function get_defaults() { + $schema_types = new Schema_Types(); + $host = YoastSEO()->helpers->url->get_url_host( get_site_url() ); + + $defaults = [ + 'author_name' => get_the_author_meta( 'display_name' ), + 'sitewide_social_image' => WPSEO_Options::get( 'og_default_image' ), + 'translations' => $this->get_translations(), + 'keyword_usage' => [], + 'title_template' => '', + 'metadesc_template' => '', + 'showSocial' => [ + 'facebook' => WPSEO_Options::get( 'opengraph', false ), + 'twitter' => WPSEO_Options::get( 'twitter', false ), + ], + 'schema' => [ + 'displayFooter' => WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ), + 'pageTypeOptions' => $schema_types->get_page_type_options(), + 'articleTypeOptions' => $schema_types->get_article_type_options(), + ], + 'twitterCardType' => 'summary_large_image', + 'publish_box' => [ + 'labels' => [ + 'keyword' => [ + 'na' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ + __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Not available', 'wordpress-seo' ) . '' + ), + 'bad' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ + __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Needs improvement', 'wordpress-seo' ) . '' + ), + 'ok' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ + __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'OK', 'wordpress-seo' ) . '' + ), + 'good' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */ + __( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Good', 'wordpress-seo' ) . '' + ), + ], + 'content' => [ + 'na' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ + __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Not available', 'wordpress-seo' ) . '' + ), + 'bad' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ + __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Needs improvement', 'wordpress-seo' ) . '' + ), + 'ok' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ + __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'OK', 'wordpress-seo' ) . '' + ), + 'good' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */ + __( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Good', 'wordpress-seo' ) . '' + ), + ], + 'inclusive-language' => [ + 'na' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ + __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Not available', 'wordpress-seo' ) . '' + ), + 'bad' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ + __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Needs improvement', 'wordpress-seo' ) . '' + ), + 'ok' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ + __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Potentially non-inclusive', 'wordpress-seo' ) . '' + ), + 'good' => sprintf( + /* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */ + __( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ), + '', + '', + '' . __( 'Good', 'wordpress-seo' ) . '' + ), + ], + ], + ], + /** + * Filter to determine if the markers should be enabled or not. + * + * @param bool $showMarkers Should the markers being enabled. Default = true. + */ + 'show_markers' => apply_filters( 'wpseo_enable_assessment_markers', true ), + 'getJetpackBoostPrePublishLink' => WPSEO_Shortlinker::get( 'https://yoa.st/jetpack-boost-get-prepublish?domain=' . $host ), + 'upgradeJetpackBoostPrePublishLink' => WPSEO_Shortlinker::get( 'https://yoa.st/jetpack-boost-upgrade-prepublish?domain=' . $host ), + 'woocommerceUpsellSchemaLink' => WPSEO_Shortlinker::get( 'https://yoa.st/product-schema-metabox' ), + 'woocommerceUpsellGooglePreviewLink' => WPSEO_Shortlinker::get( 'https://yoa.st/product-google-preview-metabox' ), + ]; + + $integration_information_repo = YoastSEO()->classes->get( Integration_Information_Repository::class ); + + $enabled_integrations = $integration_information_repo->get_integration_information(); + $defaults = array_merge( $defaults, $enabled_integrations ); + $enabled_features_repo = YoastSEO()->classes->get( Enabled_Analysis_Features_Repository::class ); + + $enabled_features = $enabled_features_repo->get_enabled_features()->parse_to_legacy_array(); + return array_merge( $defaults, $enabled_features ); + } + + /** + * Returns Jed compatible YoastSEO.js translations. + * + * @return string[] + */ + private function get_translations() { + $locale = get_user_locale(); + + $file = WPSEO_PATH . 'languages/wordpress-seo-' . $locale . '.json'; + if ( file_exists( $file ) ) { + // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Retrieving a local file. + $file = file_get_contents( $file ); + if ( is_string( $file ) && $file !== '' ) { + return json_decode( $file, true ); + } + } + + return []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php b/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php new file mode 100644 index 00000000..a9d3e0d0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-post-metabox-formatter.php @@ -0,0 +1,93 @@ +post = $post; + $this->permalink = $structure; + } + + /** + * Determines whether the social templates should be used. + * + * @deprecated 23.1 + * @codeCoverageIgnore + */ + public function use_social_templates() { + _deprecated_function( __METHOD__, 'Yoast SEO 23.1' ); + } + + /** + * Returns the translated values. + * + * @return array + */ + public function get_values() { + + $values = [ + 'metaDescriptionDate' => '', + ]; + + if ( $this->post instanceof WP_Post ) { + + /** @var Post_Seo_Information_Repository $repo */ + $repo = YoastSEO()->classes->get( Post_Seo_Information_Repository::class ); + $repo->set_post( $this->post ); + + $values_to_set = [ + 'isInsightsEnabled' => $this->is_insights_enabled(), + ]; + + $values = ( $values_to_set + $values ); + $values = ( $repo->get_seo_data() + $values ); + } + + /** + * Filter: 'wpseo_post_edit_values' - Allows changing the values Yoast SEO uses inside the post editor. + * + * @param array $values The key-value map Yoast SEO uses inside the post editor. + * @param WP_Post $post The post opened in the editor. + */ + return apply_filters( 'wpseo_post_edit_values', $values, $this->post ); + } + + /** + * Determines whether the insights feature is enabled for this post. + * + * @return bool + */ + protected function is_insights_enabled() { + return WPSEO_Options::get( 'enable_metabox_insights', false ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php b/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php new file mode 100644 index 00000000..29218d38 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/formatter/class-term-metabox-formatter.php @@ -0,0 +1,98 @@ +taxonomy = $taxonomy; + $this->term = $term; + + $this->use_social_templates = $this->use_social_templates(); + } + + /** + * Determines whether the social templates should be used. + * + * @return bool Whether the social templates should be used. + */ + public function use_social_templates() { + return WPSEO_Options::get( 'opengraph', false ) === true; + } + + /** + * Returns the translated values. + * + * @return array + */ + public function get_values() { + $values = []; + + // Todo: a column needs to be added on the termpages to add a filter for the keyword, so this can be used in the focus keyphrase doubles. + if ( is_object( $this->term ) && property_exists( $this->term, 'taxonomy' ) ) { + $values = [ + 'taxonomy' => $this->term->taxonomy, + 'semrushIntegrationActive' => 0, + 'wincherIntegrationActive' => 0, + 'isInsightsEnabled' => $this->is_insights_enabled(), + ]; + + $repo = YoastSEO()->classes->get( Term_Seo_Information_Repository::class ); + $repo->set_term( $this->term ); + $values = ( $repo->get_seo_data() + $values ); + } + + return $values; + } + + /** + * Determines whether the insights feature is enabled for this taxonomy. + * + * @return bool + */ + protected function is_insights_enabled() { + return WPSEO_Options::get( 'enable_metabox_insights', false ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php b/wp/wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php new file mode 100644 index 00000000..8c220480 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/formatter/interface-metabox-formatter.php @@ -0,0 +1,19 @@ +admin_header( false, 'wpseo-gsc', false, 'yoast_wpseo_gsc_options' ); + +// GSC Error notification. +$gsc_url = 'https://search.google.com/search-console/index'; +$gsc_post_url = 'https://yoa.st/google-search-console-deprecated'; +$gsc_style_alert = ' + display: flex; + align-items: baseline; + position: relative; + padding: 16px; + border: 1px solid rgba(0, 0, 0, 0.2); + font-size: 14px; + font-weight: 400; + line-height: 1.5; + margin: 16px 0; + color: #450c11; + background: #f8d7da; +'; +$gsc_style_alert_icon = 'display: block; margin-right: 8px;'; +$gsc_style_alert_content = 'max-width: 600px;'; +$gsc_style_alert_link = 'color: #004973;'; +$gsc_notification = sprintf( + /* Translators: %1$s: expands to opening anchor tag, %2$s expands to closing anchor tag. */ + __( 'Google has discontinued its Crawl Errors API. Therefore, any possible crawl errors you might have cannot be displayed here anymore. %1$sRead our statement on this for further information%2$s.', 'wordpress-seo' ), + '', + WPSEO_Admin_Utils::get_new_tab_message() . '' +); +$gsc_notification .= '

      '; +$gsc_notification .= sprintf( + /* Translators: %1$s: expands to opening anchor tag, %2$s expands to closing anchor tag. */ + __( 'To view your current crawl errors, %1$splease visit Google Search Console%2$s.', 'wordpress-seo' ), + '', + WPSEO_Admin_Utils::get_new_tab_message() . '' +); +?> +
      + + + + +
      +'; +printf( + /* Translators: %s: expands to Yoast SEO Premium */ + esc_html__( 'Creating redirects is a %s feature', 'wordpress-seo' ), + 'Yoast SEO Premium' +); +echo ''; +echo '

      '; +printf( + /* Translators: %1$s: expands to 'Yoast SEO Premium', %2$s: links to Yoast SEO Premium plugin page. */ + esc_html__( 'To be able to create a redirect and fix this issue, you need %1$s. You can buy the plugin, including one year of support and updates, on %2$s.', 'wordpress-seo' ), + 'Yoast SEO Premium', + 'yoast.com' +); +echo '

      '; +echo ''; diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-detector.php b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-detector.php new file mode 100644 index 00000000..48d31cc1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-detector.php @@ -0,0 +1,36 @@ +status->status ) { + $this->needs_import[ $importer_class ] = $importer->get_plugin_name(); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-plugin.php b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-plugin.php new file mode 100644 index 00000000..d71fff83 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-plugin.php @@ -0,0 +1,63 @@ +importer = $importer; + + switch ( $action ) { + case 'cleanup': + $this->status = $this->importer->run_cleanup(); + break; + case 'import': + $this->status = $this->importer->run_import(); + break; + case 'detect': + default: + $this->status = $this->importer->run_detect(); + } + + $this->status->set_msg( $this->complete_msg( $this->status->get_msg() ) ); + } + + /** + * Convenience function to replace %s with plugin name in import message. + * + * @param string $msg Message string. + * + * @return string Returns message with plugin name instead of replacement variables. + */ + protected function complete_msg( $msg ) { + return sprintf( $msg, $this->importer->get_plugin_name() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-settings.php b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-settings.php new file mode 100644 index 00000000..3bec4c8f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-settings.php @@ -0,0 +1,127 @@ +status = new WPSEO_Import_Status( 'import', false ); + } + + /** + * Imports the data submitted by the user. + * + * @return void + */ + public function import() { + check_admin_referer( self::NONCE_ACTION ); + + if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { + return; + } + + if ( ! isset( $_POST['settings_import'] ) || ! is_string( $_POST['settings_import'] ) ) { + return; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: The raw content will be parsed afterwards. + $content = wp_unslash( $_POST['settings_import'] ); + + if ( empty( $content ) ) { + return; + } + + $this->parse_options( $content ); + } + + /** + * Parse the options. + * + * @param string $raw_options The content to parse. + * + * @return void + */ + protected function parse_options( $raw_options ) { + $options = parse_ini_string( $raw_options, true, INI_SCANNER_RAW ); + + if ( is_array( $options ) && $options !== [] ) { + $this->import_options( $options ); + + return; + } + + $this->status->set_msg( __( 'Settings could not be imported:', 'wordpress-seo' ) . ' ' . __( 'No settings found.', 'wordpress-seo' ) ); + } + + /** + * Parse the option group and import it. + * + * @param string $name Name string. + * @param array $option_group Option group data. + * @param array $options Options data. + * + * @return void + */ + protected function parse_option_group( $name, $option_group, $options ) { + // Make sure that the imported options are cleaned/converted on import. + $option_instance = WPSEO_Options::get_option_instance( $name ); + if ( is_object( $option_instance ) && method_exists( $option_instance, 'import' ) ) { + $option_instance->import( $option_group, $this->old_wpseo_version, $options ); + } + } + + /** + * Imports the options if found. + * + * @param array $options The options parsed from the provided settings. + * + * @return void + */ + protected function import_options( $options ) { + if ( isset( $options['wpseo']['version'] ) && $options['wpseo']['version'] !== '' ) { + $this->old_wpseo_version = $options['wpseo']['version']; + } + + foreach ( $options as $name => $option_group ) { + $this->parse_option_group( $name, $option_group, $options ); + } + + $this->status->set_msg( __( 'Settings successfully imported.', 'wordpress-seo' ) ); + $this->status->set_status( true ); + + // Reset the cached option values. + WPSEO_Options::clear_cache(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-status.php b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-status.php new file mode 100644 index 00000000..c105d4a7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/class-import-status.php @@ -0,0 +1,131 @@ +action = $action; + $this->status = $status; + $this->msg = $msg; + } + + /** + * Get the import message. + * + * @return string Message about current status. + */ + public function get_msg() { + if ( $this->msg !== '' ) { + return $this->msg; + } + + if ( $this->status === false ) { + /* translators: %s is replaced with the name of the plugin we're trying to find data from. */ + return __( '%s data not found.', 'wordpress-seo' ); + } + + return $this->get_default_success_message(); + } + + /** + * Get the import action. + * + * @return string Import action type. + */ + public function get_action() { + return $this->action; + } + + /** + * Set the import action, set status to false. + * + * @param string $action The type of action to set as import action. + * + * @return void + */ + public function set_action( $action ) { + $this->action = $action; + $this->status = false; + } + + /** + * Sets the importer status message. + * + * @param string $msg The message to set. + * + * @return void + */ + public function set_msg( $msg ) { + $this->msg = $msg; + } + + /** + * Sets the importer status. + * + * @param bool $status The status to set. + * + * @return WPSEO_Import_Status The current object. + */ + public function set_status( $status ) { + $this->status = (bool) $status; + + return $this; + } + + /** + * Returns a success message depending on the action. + * + * @return string Returns a success message for the current action. + */ + private function get_default_success_message() { + switch ( $this->action ) { + case 'import': + /* translators: %s is replaced with the name of the plugin we're importing data from. */ + return __( '%s data successfully imported.', 'wordpress-seo' ); + case 'cleanup': + /* translators: %s is replaced with the name of the plugin we're removing data from. */ + return __( '%s data successfully removed.', 'wordpress-seo' ); + case 'detect': + default: + /* translators: %s is replaced with the name of the plugin we've found data from. */ + return __( '%s data found.', 'wordpress-seo' ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-abstract-plugin-importer.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-abstract-plugin-importer.php new file mode 100644 index 00000000..6f5674f2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-abstract-plugin-importer.php @@ -0,0 +1,329 @@ +plugin_name; + } + + /** + * Imports the settings and post meta data from another SEO plugin. + * + * @return WPSEO_Import_Status Import status object. + */ + public function run_import() { + $this->status = new WPSEO_Import_Status( 'import', false ); + + if ( ! $this->detect() ) { + return $this->status; + } + + $this->status->set_status( $this->import() ); + + // Flush the entire cache, as we no longer know what's valid and what's not. + wp_cache_flush(); + + return $this->status; + } + + /** + * Handles post meta data to import. + * + * @return bool Import success status. + */ + protected function import() { + return $this->meta_keys_clone( $this->clone_keys ); + } + + /** + * Removes the plugin data from the database. + * + * @return WPSEO_Import_Status Import status object. + */ + public function run_cleanup() { + $this->status = new WPSEO_Import_Status( 'cleanup', false ); + + if ( ! $this->detect() ) { + return $this->status; + } + + return $this->status->set_status( $this->cleanup() ); + } + + /** + * Removes the plugin data from the database. + * + * @return bool Cleanup status. + */ + protected function cleanup() { + global $wpdb; + if ( empty( $this->meta_key ) ) { + return true; + } + $wpdb->query( + $wpdb->prepare( + "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE %s", + $this->meta_key + ) + ); + $result = $wpdb->__get( 'result' ); + if ( ! $result ) { + $this->cleanup_error_msg(); + } + + return $result; + } + + /** + * Sets the status message for when a cleanup has gone bad. + * + * @return void + */ + protected function cleanup_error_msg() { + /* translators: %s is replaced with the plugin's name. */ + $this->status->set_msg( sprintf( __( 'Cleanup of %s data failed.', 'wordpress-seo' ), $this->plugin_name ) ); + } + + /** + * Detects whether an import for this plugin is needed. + * + * @return WPSEO_Import_Status Import status object. + */ + public function run_detect() { + $this->status = new WPSEO_Import_Status( 'detect', false ); + + if ( ! $this->detect() ) { + return $this->status; + } + + return $this->status->set_status( true ); + } + + /** + * Detects whether there is post meta data to import. + * + * @return bool Boolean indicating whether there is something to import. + */ + protected function detect() { + global $wpdb; + + $meta_keys = wp_list_pluck( $this->clone_keys, 'old_key' ); + $result = $wpdb->get_var( + $wpdb->prepare( + "SELECT COUNT(*) AS `count` + FROM {$wpdb->postmeta} + WHERE meta_key IN ( " . implode( ', ', array_fill( 0, count( $meta_keys ), '%s' ) ) . ' )', + $meta_keys + ) + ); + + if ( $result === '0' ) { + return false; + } + + return true; + } + + /** + * Helper function to clone meta keys and (optionally) change their values in bulk. + * + * @param string $old_key The existing meta key. + * @param string $new_key The new meta key. + * @param array $replace_values An array, keys old value, values new values. + * + * @return bool Clone status. + */ + protected function meta_key_clone( $old_key, $new_key, $replace_values = [] ) { + global $wpdb; + + // First we create a temp table with all the values for meta_key. + $result = $wpdb->query( + $wpdb->prepare( + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange -- This is intentional + temporary. + "CREATE TEMPORARY TABLE tmp_meta_table SELECT * FROM {$wpdb->postmeta} WHERE meta_key = %s", + $old_key + ) + ); + if ( $result === false ) { + $this->set_missing_db_rights_status(); + return false; + } + + // Delete all the values in our temp table for posts that already have data for $new_key. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM tmp_meta_table WHERE post_id IN ( SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = %s )", + WPSEO_Meta::$meta_prefix . $new_key + ) + ); + + /* + * We set meta_id to NULL so on re-insert into the postmeta table, MYSQL can set + * new meta_id's and we don't get duplicates. + */ + $wpdb->query( 'UPDATE tmp_meta_table SET meta_id = NULL' ); + + // Now we rename the meta_key. + $wpdb->query( + $wpdb->prepare( + 'UPDATE tmp_meta_table SET meta_key = %s', + WPSEO_Meta::$meta_prefix . $new_key + ) + ); + + $this->meta_key_clone_replace( $replace_values ); + + // With everything done, we insert all our newly cloned lines into the postmeta table. + $wpdb->query( "INSERT INTO {$wpdb->postmeta} SELECT * FROM tmp_meta_table" ); + + // Now we drop our temporary table. + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.SchemaChange -- This is intentional + a temporary table. + $wpdb->query( 'DROP TEMPORARY TABLE IF EXISTS tmp_meta_table' ); + + return true; + } + + /** + * Clones multiple meta keys. + * + * @param array $clone_keys The keys to clone. + * + * @return bool Success status. + */ + protected function meta_keys_clone( $clone_keys ) { + foreach ( $clone_keys as $clone_key ) { + $result = $this->meta_key_clone( $clone_key['old_key'], $clone_key['new_key'], ( $clone_key['convert'] ?? [] ) ); + if ( ! $result ) { + return false; + } + } + return true; + } + + /** + * Sets the import status to false and returns a message about why it failed. + * + * @return void + */ + protected function set_missing_db_rights_status() { + $this->status->set_status( false ); + /* translators: %s is replaced with Yoast SEO. */ + $this->status->set_msg( sprintf( __( 'The %s importer functionality uses temporary database tables. It seems your WordPress install does not have the capability to do this, please consult your hosting provider.', 'wordpress-seo' ), 'Yoast SEO' ) ); + } + + /** + * Helper function to search for a key in an array and maybe save it as a meta field. + * + * @param string $plugin_key The key in the $data array to check. + * @param string $yoast_key The identifier we use in our meta settings. + * @param array $data The array of data for this post to sift through. + * @param int $post_id The post ID. + * + * @return void + */ + protected function import_meta_helper( $plugin_key, $yoast_key, $data, $post_id ) { + if ( ! empty( $data[ $plugin_key ] ) ) { + $this->maybe_save_post_meta( $yoast_key, $data[ $plugin_key ], $post_id ); + } + } + + /** + * Saves a post meta value if it doesn't already exist. + * + * @param string $new_key The key to save. + * @param mixed $value The value to set the key to. + * @param int $post_id The Post to save the meta for. + * + * @return void + */ + protected function maybe_save_post_meta( $new_key, $value, $post_id ) { + // Big. Fat. Sigh. Mostly used for _yst_is_cornerstone, but might be useful for other hidden meta's. + $key = WPSEO_Meta::$meta_prefix . $new_key; + $wpseo_meta = true; + if ( substr( $new_key, 0, 1 ) === '_' ) { + $key = $new_key; + $wpseo_meta = false; + } + + $existing_value = get_post_meta( $post_id, $key, true ); + if ( empty( $existing_value ) ) { + if ( $wpseo_meta ) { + WPSEO_Meta::set_value( $new_key, $value, $post_id ); + return; + } + update_post_meta( $post_id, $new_key, $value ); + } + } + + /** + * Replaces values in our temporary table according to our settings. + * + * @param array $replace_values Key value pair of values to replace with other values. + * + * @return void + */ + protected function meta_key_clone_replace( $replace_values ) { + global $wpdb; + + // Now we replace values if needed. + if ( is_array( $replace_values ) && $replace_values !== [] ) { + foreach ( $replace_values as $old_value => $new_value ) { + $wpdb->query( + $wpdb->prepare( + 'UPDATE tmp_meta_table SET meta_value = %s WHERE meta_value = %s', + $new_value, + $old_value + ) + ); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo-v4.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo-v4.php new file mode 100644 index 00000000..122ce46d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo-v4.php @@ -0,0 +1,241 @@ + '_aioseo_title', + 'new_key' => 'title', + ], + [ + 'old_key' => '_aioseo_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_aioseo_og_title', + 'new_key' => 'opengraph-title', + ], + [ + 'old_key' => '_aioseo_og_description', + 'new_key' => 'opengraph-description', + ], + [ + 'old_key' => '_aioseo_twitter_title', + 'new_key' => 'twitter-title', + ], + [ + 'old_key' => '_aioseo_twitter_description', + 'new_key' => 'twitter-description', + ], + ]; + + /** + * Mapping between the AiOSEO replace vars and the Yoast replace vars. + * + * @var array + * + * @see https://yoast.com/help/list-available-snippet-variables-yoast-seo/ + */ + protected $replace_vars = [ + // They key is the AiOSEO replace var, the value is the Yoast replace var (see class-wpseo-replace-vars). + '#author_first_name' => '%%author_first_name%%', + '#author_last_name' => '%%author_last_name%%', + '#author_name' => '%%name%%', + '#categories' => '%%category%%', + '#current_date' => '%%currentdate%%', + '#current_day' => '%%currentday%%', + '#current_month' => '%%currentmonth%%', + '#current_year' => '%%currentyear%%', + '#permalink' => '%%permalink%%', + '#post_content' => '%%post_content%%', + '#post_date' => '%%date%%', + '#post_day' => '%%post_day%%', + '#post_month' => '%%post_month%%', + '#post_title' => '%%title%%', + '#post_year' => '%%post_year%%', + '#post_excerpt_only' => '%%excerpt_only%%', + '#post_excerpt' => '%%excerpt%%', + '#separator_sa' => '%%sep%%', + '#site_title' => '%%sitename%%', + '#tagline' => '%%sitedesc%%', + '#taxonomy_title' => '%%category_title%%', + ]; + + /** + * Replaces the AiOSEO variables in our temporary table with Yoast variables (replace vars). + * + * @param array $replace_values Key value pair of values to replace with other values. This is only used in the base class but not here. + * That is because this class doesn't have any `convert` keys in `$clone_keys`. + * For that reason, we're overwriting the base class' `meta_key_clone_replace()` function without executing that base functionality. + * + * @return void + */ + protected function meta_key_clone_replace( $replace_values ) { + global $wpdb; + + // At this point we're already looping through all the $clone_keys (this happens in meta_keys_clone() in the abstract class). + // Now, we'll also loop through the replace_vars array, which holds the mappings between the AiOSEO variables and the Yoast variables. + // We'll replace all the AiOSEO variables in the temporary table with their Yoast equivalents. + foreach ( $this->replace_vars as $aioseo_variable => $yoast_variable ) { + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: We need this query and this is done at many other places as well, for example class-import-rankmath. + $wpdb->query( + $wpdb->prepare( + 'UPDATE tmp_meta_table SET meta_value = REPLACE( meta_value, %s, %s )', + $aioseo_variable, + $yoast_variable + ) + ); + } + + // The AiOSEO custom fields take the form of `#custom_field-myfield`. + // These should be mapped to %%cf_myfield%%. + $meta_values_with_custom_fields = $this->get_meta_values_with_custom_field_or_taxonomy( $wpdb, 'custom_field' ); + $unique_custom_fields = $this->get_unique_custom_fields_or_taxonomies( $meta_values_with_custom_fields, 'custom_field' ); + $this->replace_custom_field_or_taxonomy_replace_vars( $unique_custom_fields, $wpdb, 'custom_field', 'cf' ); + + // Map `#tax_name-{tax-slug}` to `%%ct_{tax-slug}%%``. + $meta_values_with_custom_taxonomies = $this->get_meta_values_with_custom_field_or_taxonomy( $wpdb, 'tax_name' ); + $unique_custom_taxonomies = $this->get_unique_custom_fields_or_taxonomies( $meta_values_with_custom_taxonomies, 'tax_name' ); + $this->replace_custom_field_or_taxonomy_replace_vars( $unique_custom_taxonomies, $wpdb, 'tax_name', 'ct' ); + } + + /** + * Filters out all unique custom fields/taxonomies/etc. used in an AiOSEO replace var. + * + * @param string[] $meta_values An array of all the meta values that + * contain one or more AIOSEO custom field replace vars + * (in the form `#custom_field-xyz`). + * @param string $aioseo_prefix The AiOSEO prefix to use + * (e.g. `custom-field` for custom fields or `tax_name` for custom taxonomies). + * + * @return string[] An array of all the unique custom fields/taxonomies/etc. used in the replace vars. + * E.g. `xyz` in the above example. + */ + protected function get_unique_custom_fields_or_taxonomies( $meta_values, $aioseo_prefix ) { + $unique_custom_fields_or_taxonomies = []; + + foreach ( $meta_values as $meta_value ) { + // Find all custom field replace vars, store them in `$matches`. + preg_match_all( + "/#$aioseo_prefix-([\w-]+)/", + $meta_value, + $matches + ); + + /* + * `$matches[1]` contain the captured matches of the + * first capturing group (the `([\w-]+)` in the regex above). + */ + $custom_fields_or_taxonomies = $matches[1]; + + foreach ( $custom_fields_or_taxonomies as $custom_field_or_taxonomy ) { + $unique_custom_fields_or_taxonomies[ trim( $custom_field_or_taxonomy ) ] = 1; + } + } + + return array_keys( $unique_custom_fields_or_taxonomies ); + } + + /** + * Replaces every AIOSEO custom field/taxonomy/etc. replace var with the Yoast version. + * + * E.g. `#custom_field-xyz` becomes `%%cf_xyz%%`. + * + * @param string[] $unique_custom_fields_or_taxonomies An array of unique custom fields to replace the replace vars of. + * @param wpdb $wpdb The WordPress database object. + * @param string $aioseo_prefix The AiOSEO prefix to use + * (e.g. `custom-field` for custom fields or `tax_name` for custom taxonomies). + * @param string $yoast_prefix The Yoast prefix to use (e.g. `cf` for custom fields). + * + * @return void + */ + protected function replace_custom_field_or_taxonomy_replace_vars( $unique_custom_fields_or_taxonomies, $wpdb, $aioseo_prefix, $yoast_prefix ) { + foreach ( $unique_custom_fields_or_taxonomies as $unique_custom_field_or_taxonomy ) { + $aioseo_variable = "#{$aioseo_prefix}-{$unique_custom_field_or_taxonomy}"; + $yoast_variable = "%%{$yoast_prefix}_{$unique_custom_field_or_taxonomy}%%"; + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching + $wpdb->query( + $wpdb->prepare( + 'UPDATE tmp_meta_table SET meta_value = REPLACE( meta_value, %s, %s )', + $aioseo_variable, + $yoast_variable + ) + ); + } + } + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching + + /** + * Retrieve all the meta values from the temporary meta table that contain + * at least one AiOSEO custom field replace var. + * + * @param wpdb $wpdb The WordPress database object. + * @param string $aioseo_prefix The AiOSEO prefix to use + * (e.g. `custom-field` for custom fields or `tax_name` for custom taxonomies). + * + * @return string[] All meta values that contain at least one AioSEO custom field replace var. + */ + protected function get_meta_values_with_custom_field_or_taxonomy( $wpdb, $aioseo_prefix ) { + return $wpdb->get_col( + $wpdb->prepare( + 'SELECT meta_value FROM tmp_meta_table WHERE meta_value LIKE %s', + "%#$aioseo_prefix-%" + ) + ); + } + + // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching + + /** + * Detects whether there is AIOSEO data to import by looking whether the AIOSEO data have been cleaned up. + * + * @return bool Boolean indicating whether there is something to import. + */ + protected function detect() { + $aioseo_cleanup_action = YoastSEO()->classes->get( Aioseo_Cleanup_Action::class ); + return ( $aioseo_cleanup_action->get_total_unindexed() > 0 ); + } + + /** + * Import AIOSEO post data from their custom indexable table. Not currently used. + * + * @return void + */ + protected function import() { + // This is overriden from the import.js and never run. + $aioseo_posts_import_action = YoastSEO()->classes->get( Aioseo_Posts_Importing_Action::class ); + $aioseo_posts_import_action->index(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo.php new file mode 100644 index 00000000..cf7ab491 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-aioseo.php @@ -0,0 +1,110 @@ + 'opengraph-title', + 'aioseop_opengraph_settings_desc' => 'opengraph-description', + 'aioseop_opengraph_settings_customimg' => 'opengraph-image', + 'aioseop_opengraph_settings_customimg_twitter' => 'twitter-image', + ]; + + /** + * Array of meta keys to detect and import. + * + * @var array + */ + protected $clone_keys = [ + [ + 'old_key' => '_aioseop_title', + 'new_key' => 'title', + ], + [ + 'old_key' => '_aioseop_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_aioseop_noindex', + 'new_key' => 'meta-robots-noindex', + 'convert' => [ 'on' => 1 ], + ], + [ + 'old_key' => '_aioseop_nofollow', + 'new_key' => 'meta-robots-nofollow', + 'convert' => [ 'on' => 1 ], + ], + ]; + + /** + * Import All In One SEO meta values. + * + * @return bool Import success status. + */ + protected function import() { + $status = parent::import(); + if ( $status ) { + $this->import_opengraph(); + } + return $status; + } + + /** + * Imports the OpenGraph and Twitter settings for all posts. + * + * @return bool + */ + protected function import_opengraph() { + $query_posts = new WP_Query( 'post_type=any&meta_key=_aioseop_opengraph_settings&order=ASC&fields=ids&nopaging=true' ); + + if ( ! empty( $query_posts->posts ) ) { + foreach ( array_values( $query_posts->posts ) as $post_id ) { + $this->import_post_opengraph( $post_id ); + } + } + + return true; + } + + /** + * Imports the OpenGraph and Twitter settings for a single post. + * + * @param int $post_id Post ID. + * + * @return void + */ + private function import_post_opengraph( $post_id ) { + $meta = get_post_meta( $post_id, '_aioseop_opengraph_settings', true ); + $meta = maybe_unserialize( $meta ); + + foreach ( $this->import_keys as $old_key => $new_key ) { + $this->maybe_save_post_meta( $new_key, $meta[ $old_key ], $post_id ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-greg-high-performance-seo.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-greg-high-performance-seo.php new file mode 100644 index 00000000..8925421f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-greg-high-performance-seo.php @@ -0,0 +1,42 @@ + '_ghpseo_alternative_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_ghpseo_secondary_title', + 'new_key' => 'title', + ], + ]; +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-headspace.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-headspace.php new file mode 100644 index 00000000..3a43d169 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-headspace.php @@ -0,0 +1,54 @@ + '_headspace_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_headspace_page_title', + 'new_key' => 'title', + ], + [ + 'old_key' => '_headspace_noindex', + 'new_key' => 'meta-robots-noindex', + 'convert' => [ 'on' => 1 ], + ], + [ + 'old_key' => '_headspace_nofollow', + 'new_key' => 'meta-robots-nofollow', + 'convert' => [ 'on' => 1 ], + ], + ]; +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-jetpack.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-jetpack.php new file mode 100644 index 00000000..5f57d816 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-jetpack.php @@ -0,0 +1,40 @@ + 'advanced_seo_description', + 'new_key' => 'metadesc', + ], + ]; +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-platinum-seo-pack.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-platinum-seo-pack.php new file mode 100644 index 00000000..16a5ce9e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-platinum-seo-pack.php @@ -0,0 +1,138 @@ + 'description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => 'title', + 'new_key' => 'title', + ], + ]; + + /** + * Runs the import of post meta keys stored by Platinum SEO Pack. + * + * @return bool + */ + protected function import() { + $return = parent::import(); + if ( $return ) { + $this->import_robots_meta(); + } + + return $return; + } + + /** + * Cleans up all the meta values Platinum SEO pack creates. + * + * @return bool + */ + protected function cleanup() { + $this->meta_key = 'title'; + parent::cleanup(); + + $this->meta_key = 'description'; + parent::cleanup(); + + $this->meta_key = 'metarobots'; + parent::cleanup(); + + return true; + } + + /** + * Finds all the robotsmeta fields to import and deals with them. + * + * There are four potential values that Platinum SEO stores: + * - index,folllow + * - index,nofollow + * - noindex,follow + * - noindex,nofollow + * + * We only have to deal with the latter 3, the first is our default. + * + * @return void + */ + protected function import_robots_meta() { + $this->import_by_meta_robots( 'index,nofollow', [ 'nofollow' ] ); + $this->import_by_meta_robots( 'noindex,follow', [ 'noindex' ] ); + $this->import_by_meta_robots( 'noindex,nofollow', [ 'noindex', 'nofollow' ] ); + } + + /** + * Imports the values for all index, nofollow posts. + * + * @param string $value The meta robots value to find posts for. + * @param array $metas The meta field(s) to save. + * + * @return void + */ + protected function import_by_meta_robots( $value, $metas ) { + $posts = $this->find_posts_by_robots_meta( $value ); + if ( ! $posts ) { + return; + } + + foreach ( $posts as $post_id ) { + foreach ( $metas as $meta ) { + $this->maybe_save_post_meta( 'meta-robots-' . $meta, 1, $post_id ); + } + } + } + + /** + * Finds posts by a given meta robots value. + * + * @param string $meta_value Robots meta value. + * + * @return array|bool Array of Post IDs on success, false on failure. + */ + protected function find_posts_by_robots_meta( $meta_value ) { + $posts = get_posts( + [ + 'post_type' => 'any', + 'meta_key' => 'robotsmeta', + 'meta_value' => $meta_value, + 'order' => 'ASC', + 'fields' => 'ids', + 'nopaging' => true, + ] + ); + if ( empty( $posts ) ) { + return false; + } + return $posts; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-premium-seo-pack.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-premium-seo-pack.php new file mode 100644 index 00000000..bd93b91e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-premium-seo-pack.php @@ -0,0 +1,39 @@ +table_name = $wpdb->prefix . 'psp'; + $this->meta_key = ''; + } + + /** + * Returns the query to return an identifier for the posts to import. + * + * @return string + */ + protected function retrieve_posts_query() { + return "SELECT URL AS identifier FROM {$this->table_name} WHERE blog_id = %d"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-rankmath.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-rankmath.php new file mode 100644 index 00000000..68e7c0c1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-rankmath.php @@ -0,0 +1,179 @@ + 'rank_math_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => 'rank_math_title', + 'new_key' => 'title', + ], + [ + 'old_key' => 'rank_math_canonical_url', + 'new_key' => 'canonical', + ], + [ + 'old_key' => 'rank_math_primary_category', + 'new_key' => 'primary_category', + ], + [ + 'old_key' => 'rank_math_facebook_title', + 'new_key' => 'opengraph-title', + ], + [ + 'old_key' => 'rank_math_facebook_description', + 'new_key' => 'opengraph-description', + ], + [ + 'old_key' => 'rank_math_facebook_image', + 'new_key' => 'opengraph-image', + ], + [ + 'old_key' => 'rank_math_facebook_image_id', + 'new_key' => 'opengraph-image-id', + ], + [ + 'old_key' => 'rank_math_twitter_title', + 'new_key' => 'twitter-title', + ], + [ + 'old_key' => 'rank_math_twitter_description', + 'new_key' => 'twitter-description', + ], + [ + 'old_key' => 'rank_math_twitter_image', + 'new_key' => 'twitter-image', + ], + [ + 'old_key' => 'rank_math_twitter_image_id', + 'new_key' => 'twitter-image-id', + ], + [ + 'old_key' => 'rank_math_focus_keyword', + 'new_key' => 'focuskw', + ], + ]; + + /** + * Handles post meta data to import. + * + * @return bool Import success status. + */ + protected function import() { + global $wpdb; + // Replace % with %% as their variables are the same except for that. + $wpdb->query( "UPDATE $wpdb->postmeta SET meta_value = REPLACE( meta_value, '%', '%%' ) WHERE meta_key IN ( 'rank_math_description', 'rank_math_title' )" ); + + $this->import_meta_robots(); + $return = $this->meta_keys_clone( $this->clone_keys ); + + // Return %% to % so our import is non-destructive. + $wpdb->query( "UPDATE $wpdb->postmeta SET meta_value = REPLACE( meta_value, '%%', '%' ) WHERE meta_key IN ( 'rank_math_description', 'rank_math_title' )" ); + + if ( $return ) { + $this->import_settings(); + } + + return $return; + } + + /** + * RankMath stores robots meta quite differently, so we have to parse it out. + * + * @return void + */ + private function import_meta_robots() { + global $wpdb; + $post_metas = $wpdb->get_results( "SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = 'rank_math_robots'" ); + foreach ( $post_metas as $post_meta ) { + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- Reason: We can't control the form in which Rankmath sends the data. + $robots_values = unserialize( $post_meta->meta_value ); + foreach ( [ 'noindex', 'nofollow' ] as $directive ) { + $directive_key = array_search( $directive, $robots_values, true ); + if ( $directive_key !== false ) { + update_post_meta( $post_meta->post_id, '_yoast_wpseo_meta-robots-' . $directive, 1 ); + unset( $robots_values[ $directive_key ] ); + } + } + if ( count( $robots_values ) > 0 ) { + $value = implode( ',', $robots_values ); + update_post_meta( $post_meta->post_id, '_yoast_wpseo_meta-robots-adv', $value ); + } + } + } + + /** + * Imports some of the RankMath settings. + * + * @return void + */ + private function import_settings() { + $settings = [ + 'title_separator' => 'separator', + 'homepage_title' => 'title-home-wpseo', + 'homepage_description' => 'metadesc-home-wpseo', + 'author_archive_title' => 'title-author-wpseo', + 'date_archive_title' => 'title-archive-wpseo', + 'search_title' => 'title-search-wpseo', + '404_title' => 'title-404-wpseo', + 'pt_post_title' => 'title-post', + 'pt_page_title' => 'title-page', + ]; + $options = get_option( 'rank-math-options-titles' ); + + foreach ( $settings as $import_setting_key => $setting_key ) { + if ( ! empty( $options[ $import_setting_key ] ) ) { + $value = $options[ $import_setting_key ]; + // Make sure replace vars work. + $value = str_replace( '%', '%%', $value ); + WPSEO_Options::set( $setting_key, $value ); + } + } + } + + /** + * Removes the plugin data from the database. + * + * @return bool Cleanup status. + */ + protected function cleanup() { + $return = parent::cleanup(); + if ( $return ) { + global $wpdb; + $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE 'rank-math-%'" ); + $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '%rank_math%'" ); + } + + return $return; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seo-framework.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seo-framework.php new file mode 100644 index 00000000..8a8ac9e1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seo-framework.php @@ -0,0 +1,94 @@ + '_genesis_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_genesis_title', + 'new_key' => 'title', + ], + [ + 'old_key' => '_genesis_noindex', + 'new_key' => 'meta-robots-noindex', + ], + [ + 'old_key' => '_genesis_nofollow', + 'new_key' => 'meta-robots-nofollow', + ], + [ + 'old_key' => '_genesis_canonical_uri', + 'new_key' => 'canonical', + ], + [ + 'old_key' => '_open_graph_title', + 'new_key' => 'opengraph-title', + ], + [ + 'old_key' => '_open_graph_description', + 'new_key' => 'opengraph-description', + ], + [ + 'old_key' => '_social_image_url', + 'new_key' => 'opengraph-image', + ], + [ + 'old_key' => '_twitter_title', + 'new_key' => 'twitter-title', + ], + [ + 'old_key' => '_twitter_description', + 'new_key' => 'twitter-description', + ], + ]; + + /** + * Removes all the metadata set by the SEO Framework plugin. + * + * @return bool + */ + protected function cleanup() { + $set1 = parent::cleanup(); + + $this->meta_key = '_social_image_%'; + $set2 = parent::cleanup(); + + $this->meta_key = '_twitter_%'; + $set3 = parent::cleanup(); + + $this->meta_key = '_open_graph_%'; + $set4 = parent::cleanup(); + + return ( $set1 || $set2 || $set3 || $set4 ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seopressor.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seopressor.php new file mode 100644 index 00000000..4009c798 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-seopressor.php @@ -0,0 +1,175 @@ + '_seop_settings', + ], + ]; + + /** + * Imports the post meta values to Yoast SEO. + * + * @return bool Import success status. + */ + protected function import() { + // Query for all the posts that have an _seop_settings meta set. + $query_posts = new WP_Query( 'post_type=any&meta_key=_seop_settings&order=ASC&fields=ids&nopaging=true' ); + foreach ( $query_posts->posts as $post_id ) { + $this->import_post_focus_keywords( $post_id ); + $this->import_seopressor_post_settings( $post_id ); + } + + return true; + } + + /** + * Removes all the post meta fields SEOpressor creates. + * + * @return bool Cleanup status. + */ + protected function cleanup() { + global $wpdb; + + // If we get to replace the data, let's do some proper cleanup. + return $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '_seop_%'" ); + } + + /** + * Imports the data. SEOpressor stores most of the data in one post array, this loops over it. + * + * @param int $post_id Post ID. + * + * @return void + */ + private function import_seopressor_post_settings( $post_id ) { + $settings = get_post_meta( $post_id, '_seop_settings', true ); + + foreach ( + [ + 'fb_description' => 'opengraph-description', + 'fb_title' => 'opengraph-title', + 'fb_type' => 'og_type', + 'fb_img' => 'opengraph-image', + 'meta_title' => 'title', + 'meta_description' => 'metadesc', + 'meta_canonical' => 'canonical', + 'tw_description' => 'twitter-description', + 'tw_title' => 'twitter-title', + 'tw_image' => 'twitter-image', + ] as $seopressor_key => $yoast_key ) { + $this->import_meta_helper( $seopressor_key, $yoast_key, $settings, $post_id ); + } + + if ( isset( $settings['meta_rules'] ) ) { + $this->import_post_robots( $settings['meta_rules'], $post_id ); + } + } + + /** + * Imports the focus keywords, and stores them for later use. + * + * @param int $post_id Post ID. + * + * @return void + */ + private function import_post_focus_keywords( $post_id ) { + // Import the focus keyword. + $focuskw = trim( get_post_meta( $post_id, '_seop_kw_1', true ) ); + $this->maybe_save_post_meta( 'focuskw', $focuskw, $post_id ); + + // Import additional focus keywords for use in premium. + $focuskw2 = trim( get_post_meta( $post_id, '_seop_kw_2', true ) ); + $focuskw3 = trim( get_post_meta( $post_id, '_seop_kw_3', true ) ); + + $focus_keywords = []; + if ( ! empty( $focuskw2 ) ) { + $focus_keywords[] = $focuskw2; + } + if ( ! empty( $focuskw3 ) ) { + $focus_keywords[] = $focuskw3; + } + + if ( $focus_keywords !== [] ) { + $this->maybe_save_post_meta( 'focuskeywords', WPSEO_Utils::format_json_encode( $focus_keywords ), $post_id ); + } + } + + /** + * Retrieves the SEOpressor robot value and map this to Yoast SEO values. + * + * @param string $meta_rules The meta rules taken from the SEOpressor settings array. + * @param int $post_id The post id of the current post. + * + * @return void + */ + private function import_post_robots( $meta_rules, $post_id ) { + $seopressor_robots = explode( '#|#|#', $meta_rules ); + $robot_value = $this->get_robot_value( $seopressor_robots ); + + // Saving the new meta values for Yoast SEO. + $this->maybe_save_post_meta( 'meta-robots-noindex', $robot_value['index'], $post_id ); + $this->maybe_save_post_meta( 'meta-robots-nofollow', $robot_value['follow'], $post_id ); + $this->maybe_save_post_meta( 'meta-robots-adv', $robot_value['advanced'], $post_id ); + } + + /** + * Gets the robot config by given SEOpressor robots value. + * + * @param array $seopressor_robots The value in SEOpressor that needs to be converted to the Yoast format. + * + * @return array The robots values in Yoast format. + */ + private function get_robot_value( $seopressor_robots ) { + $return = [ + 'index' => 2, + 'follow' => 0, + 'advanced' => '', + ]; + + if ( in_array( 'noindex', $seopressor_robots, true ) ) { + $return['index'] = 1; + } + if ( in_array( 'nofollow', $seopressor_robots, true ) ) { + $return['follow'] = 1; + } + foreach ( [ 'noarchive', 'nosnippet', 'noimageindex' ] as $needle ) { + if ( in_array( $needle, $seopressor_robots, true ) ) { + $return['advanced'] .= $needle . ','; + } + } + $return['advanced'] = rtrim( $return['advanced'], ',' ); + + return $return; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-smartcrawl.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-smartcrawl.php new file mode 100644 index 00000000..507120c6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-smartcrawl.php @@ -0,0 +1,151 @@ + '_wds_metadesc', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_wds_title', + 'new_key' => 'title', + ], + [ + 'old_key' => '_wds_canonical', + 'new_key' => 'canonical', + ], + [ + 'old_key' => '_wds_focus-keywords', + 'new_key' => 'focuskw', + ], + [ + 'old_key' => '_wds_meta-robots-noindex', + 'new_key' => 'meta-robots-noindex', + ], + [ + 'old_key' => '_wds_meta-robots-nofollow', + 'new_key' => 'meta-robots-nofollow', + ], + ]; + + /** + * Used for importing Twitter and Facebook meta's. + * + * @var array + */ + protected $social_keys = []; + + /** + * Handles post meta data to import. + * + * @return bool Import success status. + */ + protected function import() { + $return = parent::import(); + if ( $return ) { + $this->import_opengraph(); + $this->import_twitter(); + } + + return $return; + } + + /** + * Imports the OpenGraph meta keys saved by Smartcrawl. + * + * @return bool Import status. + */ + protected function import_opengraph() { + $this->social_keys = [ + 'title' => 'opengraph-title', + 'description' => 'opengraph-description', + 'images' => 'opengraph-image', + ]; + return $this->post_find_import( '_wds_opengraph' ); + } + + /** + * Imports the Twitter meta keys saved by Smartcrawl. + * + * @return bool Import status. + */ + protected function import_twitter() { + $this->social_keys = [ + 'title' => 'twitter-title', + 'description' => 'twitter-description', + ]; + return $this->post_find_import( '_wds_twitter' ); + } + + /** + * Imports a post's serialized post meta values. + * + * @param int $post_id Post ID. + * @param string $key The meta key to import. + * + * @return void + */ + protected function import_serialized_post_meta( $post_id, $key ) { + $data = get_post_meta( $post_id, $key, true ); + $data = maybe_unserialize( $data ); + foreach ( $this->social_keys as $key => $meta_key ) { + if ( ! isset( $data[ $key ] ) ) { + return; + } + $value = $data[ $key ]; + if ( is_array( $value ) ) { + $value = $value[0]; + } + $this->maybe_save_post_meta( $meta_key, $value, $post_id ); + } + } + + /** + * Finds all the posts with a certain meta key and imports its values. + * + * @param string $key The meta key to search for. + * + * @return bool Import status. + */ + protected function post_find_import( $key ) { + $query_posts = new WP_Query( 'post_type=any&meta_key=' . $key . '&order=ASC&fields=ids&nopaging=true' ); + + if ( empty( $query_posts->posts ) ) { + return false; + } + + foreach ( array_values( $query_posts->posts ) as $post_id ) { + $this->import_serialized_post_meta( $post_id, $key ); + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-squirrly.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-squirrly.php new file mode 100644 index 00000000..2c088e26 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-squirrly.php @@ -0,0 +1,224 @@ + 'meta-robots-noindex', + 'nofollow' => 'meta-robots-nofollow', + 'title' => 'title', + 'description' => 'metadesc', + 'canonical' => 'canonical', + 'cornerstone' => '_yst_is_cornerstone', + 'tw_media' => 'twitter-image', + 'tw_title' => 'twitter-title', + 'tw_description' => 'twitter-description', + 'og_title' => 'opengraph-title', + 'og_description' => 'opengraph-description', + 'og_media' => 'opengraph-image', + 'focuskw' => 'focuskw', + ]; + + /** + * WPSEO_Import_Squirrly constructor. + */ + public function __construct() { + parent::__construct(); + + global $wpdb; + $this->table_name = $wpdb->prefix . 'qss'; + } + + /** + * Imports the post meta values to Yoast SEO. + * + * @return bool Import success status. + */ + protected function import() { + $results = $this->retrieve_posts(); + foreach ( $results as $post ) { + $return = $this->import_post_values( $post->identifier ); + if ( ! $return ) { + return false; + } + } + + return true; + } + + /** + * Retrieve the posts from the Squirrly Database. + * + * @return array Array of post IDs from the DB. + */ + protected function retrieve_posts() { + global $wpdb; + return $wpdb->get_results( + $wpdb->prepare( + $this->retrieve_posts_query(), + get_current_blog_id() + ) + ); + } + + /** + * Returns the query to return an identifier for the posts to import. + * + * @return string Query to get post ID's from the DB. + */ + protected function retrieve_posts_query() { + return "SELECT post_id AS identifier FROM {$this->table_name} WHERE blog_id = %d"; + } + + /** + * Removes the DB table and the post meta field Squirrly creates. + * + * @return bool Cleanup status. + */ + protected function cleanup() { + global $wpdb; + + // If we can clean, let's clean. + $wpdb->query( "DROP TABLE {$this->table_name}" ); + + // This removes the post meta field for the focus keyword from the DB. + parent::cleanup(); + + // If we can still see the table, something went wrong. + if ( $this->detect() ) { + $this->cleanup_error_msg(); + return false; + } + + return true; + } + + /** + * Detects whether there is post meta data to import. + * + * @return bool Boolean indicating whether there is something to import. + */ + protected function detect() { + global $wpdb; + + $result = $wpdb->get_var( "SHOW TABLES LIKE '{$this->table_name}'" ); + if ( is_wp_error( $result ) || is_null( $result ) ) { + return false; + } + + return true; + } + + /** + * Imports the data of a post out of Squirrly's DB table. + * + * @param mixed $post_identifier Post identifier, can be ID or string. + * + * @return bool Import status. + */ + private function import_post_values( $post_identifier ) { + $data = $this->retrieve_post_data( $post_identifier ); + if ( ! $data ) { + return false; + } + + if ( ! is_numeric( $post_identifier ) ) { + $post_id = url_to_postid( $post_identifier ); + } + + if ( is_numeric( $post_identifier ) ) { + $post_id = (int) $post_identifier; + $data['focuskw'] = $this->maybe_add_focus_kw( $post_identifier ); + } + + foreach ( $this->seo_field_keys as $squirrly_key => $yoast_key ) { + $this->import_meta_helper( $squirrly_key, $yoast_key, $data, $post_id ); + } + return true; + } + + /** + * Retrieves the Squirrly SEO data for a post from the DB. + * + * @param int $post_identifier Post ID. + * + * @return array|bool Array of data or false. + */ + private function retrieve_post_data( $post_identifier ) { + global $wpdb; + + if ( is_numeric( $post_identifier ) ) { + $post_identifier = (int) $post_identifier; + $query_where = 'post_id = %d'; + } + if ( ! is_numeric( $post_identifier ) ) { + $query_where = 'URL = %s'; + } + + $replacements = [ + get_current_blog_id(), + $post_identifier, + ]; + + $data = $wpdb->get_var( + $wpdb->prepare( + "SELECT seo FROM {$this->table_name} WHERE blog_id = %d AND " . $query_where, + $replacements + ) + ); + if ( ! $data || is_wp_error( $data ) ) { + return false; + } + $data = maybe_unserialize( $data ); + return $data; + } + + /** + * Squirrly stores the focus keyword in post meta. + * + * @param int $post_id Post ID. + * + * @return string The focus keyword. + */ + private function maybe_add_focus_kw( $post_id ) { + $focuskw = get_post_meta( $post_id, '_sq_post_keyword', true ); + if ( $focuskw ) { + $focuskw = json_decode( $focuskw ); + return $focuskw->keyword; + } + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-ultimate-seo.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-ultimate-seo.php new file mode 100644 index 00000000..a5113650 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-ultimate-seo.php @@ -0,0 +1,64 @@ + '_su_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_su_title', + 'new_key' => 'title', + ], + [ + 'old_key' => '_su_og_title', + 'new_key' => 'opengraph-title', + ], + [ + 'old_key' => '_su_og_description', + 'new_key' => 'opengraph-description', + ], + [ + 'old_key' => '_su_og_image', + 'new_key' => 'opengraph-image', + ], + [ + 'old_key' => '_su_meta_robots_noindex', + 'new_key' => 'meta-robots-noindex', + 'convert' => [ 'on' => 1 ], + ], + [ + 'old_key' => '_su_meta_robots_nofollow', + 'new_key' => 'meta-robots-nofollow', + 'convert' => [ 'on' => 1 ], + ], + ]; +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-woothemes-seo.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-woothemes-seo.php new file mode 100644 index 00000000..5ee943c3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-woothemes-seo.php @@ -0,0 +1,138 @@ + 'seo_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => 'seo_title', + 'new_key' => 'title', + ], + [ + 'old_key' => 'seo_noindex', + 'new_key' => 'meta-robots-noindex', + ], + [ + 'old_key' => 'seo_follow', + 'new_key' => 'meta-robots-nofollow', + ], + ]; + + /** + * Holds the meta fields we can delete after import. + * + * @var array + */ + protected $cleanup_metas = [ + 'seo_follow', + 'seo_noindex', + 'seo_title', + 'seo_description', + 'seo_keywords', + ]; + + /** + * Holds the options we can delete after import. + * + * @var array + */ + protected $cleanup_options = [ + 'seo_woo_archive_layout', + 'seo_woo_single_layout', + 'seo_woo_page_layout', + 'seo_woo_wp_title', + 'seo_woo_meta_single_desc', + 'seo_woo_meta_single_key', + 'seo_woo_home_layout', + ]; + + /** + * Cleans up the WooThemes SEO settings. + * + * @return bool Cleanup status. + */ + protected function cleanup() { + $result = $this->cleanup_meta(); + if ( $result ) { + $this->cleanup_options(); + } + return $result; + } + + /** + * Removes the Woo Options from the database. + * + * @return void + */ + private function cleanup_options() { + foreach ( $this->cleanup_options as $option ) { + delete_option( $option ); + } + } + + /** + * Removes the post meta fields from the database. + * + * @return bool Cleanup status. + */ + private function cleanup_meta() { + foreach ( $this->cleanup_metas as $key ) { + $result = $this->cleanup_meta_key( $key ); + if ( ! $result ) { + return false; + } + } + return true; + } + + /** + * Removes a single meta field from the postmeta table in the database. + * + * @param string $key The meta_key to delete. + * + * @return bool Cleanup status. + */ + private function cleanup_meta_key( $key ) { + global $wpdb; + + $wpdb->query( + $wpdb->prepare( + "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", + $key + ) + ); + return $wpdb->__get( 'result' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wp-meta-seo.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wp-meta-seo.php new file mode 100644 index 00000000..e6a55efb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wp-meta-seo.php @@ -0,0 +1,82 @@ + '_metaseo_metadesc', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_metaseo_metatitle', + 'new_key' => 'title', + ], + [ + 'old_key' => '_metaseo_metaopengraph-title', + 'new_key' => 'opengraph-title', + ], + [ + 'old_key' => '_metaseo_metaopengraph-desc', + 'new_key' => 'opengraph-description', + ], + [ + 'old_key' => '_metaseo_metaopengraph-image', + 'new_key' => 'opengraph-image', + ], + [ + 'old_key' => '_metaseo_metatwitter-title', + 'new_key' => 'twitter-title', + ], + [ + 'old_key' => '_metaseo_metatwitter-desc', + 'new_key' => 'twitter-description', + ], + [ + 'old_key' => '_metaseo_metatwitter-image', + 'new_key' => 'twitter-image', + ], + [ + 'old_key' => '_metaseo_metaindex', + 'new_key' => 'meta-robots-noindex', + 'convert' => [ + 'index' => 0, + 'noindex' => 1, + ], + ], + [ + 'old_key' => '_metaseo_metafollow', + 'new_key' => 'meta-robots-nofollow', + 'convert' => [ + 'follow' => 0, + 'nofollow' => 1, + ], + ], + ]; +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wpseo.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wpseo.php new file mode 100644 index 00000000..0d138f2b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-import-wpseo.php @@ -0,0 +1,310 @@ + '_wpseo_edit_description', + 'new_key' => 'metadesc', + ], + [ + 'old_key' => '_wpseo_edit_title', + 'new_key' => 'title', + ], + [ + 'old_key' => '_wpseo_edit_canonical', + 'new_key' => 'canonical', + ], + [ + 'old_key' => '_wpseo_edit_og_title', + 'new_key' => 'opengraph-title', + ], + [ + 'old_key' => '_wpseo_edit_og_description', + 'new_key' => 'opengraph-description', + ], + [ + 'old_key' => '_wpseo_edit_og_image', + 'new_key' => 'opengraph-image', + ], + [ + 'old_key' => '_wpseo_edit_twittercard_title', + 'new_key' => 'twitter-title', + ], + [ + 'old_key' => '_wpseo_edit_twittercard_description', + 'new_key' => 'twitter-description', + ], + [ + 'old_key' => '_wpseo_edit_twittercard_image', + 'new_key' => 'twitter-image', + ], + ]; + + /** + * The values 1 - 6 are the configured values from wpSEO. This array will map the values of wpSEO to our values. + * + * There are some double array like 1-6 and 3-4. The reason is they only set the index value. The follow value is + * the default we use in the cases there isn't a follow value present. + * + * @var array + */ + private $robot_values = [ + // In wpSEO: index, follow. + 1 => [ + 'index' => 2, + 'follow' => 0, + ], + // In wpSEO: index, nofollow. + 2 => [ + 'index' => 2, + 'follow' => 1, + ], + // In wpSEO: noindex. + 3 => [ + 'index' => 1, + 'follow' => 0, + ], + // In wpSEO: noindex, follow. + 4 => [ + 'index' => 1, + 'follow' => 0, + ], + // In wpSEO: noindex, nofollow. + 5 => [ + 'index' => 1, + 'follow' => 1, + ], + // In wpSEO: index. + 6 => [ + 'index' => 2, + 'follow' => 0, + ], + ]; + + /** + * Imports wpSEO settings. + * + * @return bool Import success status. + */ + protected function import() { + $status = parent::import(); + if ( $status ) { + $this->import_post_robots(); + $this->import_taxonomy_metas(); + } + + return $status; + } + + /** + * Removes wpseo.de post meta's. + * + * @return bool Cleanup status. + */ + protected function cleanup() { + $this->cleanup_term_meta(); + $result = $this->cleanup_post_meta(); + return $result; + } + + /** + * Detects whether there is post meta data to import. + * + * @return bool Boolean indicating whether there is something to import. + */ + protected function detect() { + if ( parent::detect() ) { + return true; + } + + global $wpdb; + $count = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->options} WHERE option_name LIKE 'wpseo_category_%'" ); + if ( $count !== '0' ) { + return true; + } + + return false; + } + + /** + * Imports the robot values from WPSEO plugin. These have to be converted to the Yoast format. + * + * @return void + */ + private function import_post_robots() { + $query_posts = new WP_Query( 'post_type=any&meta_key=_wpseo_edit_robots&order=ASC&fields=ids&nopaging=true' ); + + if ( ! empty( $query_posts->posts ) ) { + foreach ( array_values( $query_posts->posts ) as $post_id ) { + $this->import_post_robot( $post_id ); + } + } + } + + /** + * Gets the wpSEO robot value and map this to Yoast SEO values. + * + * @param int $post_id The post id of the current post. + * + * @return void + */ + private function import_post_robot( $post_id ) { + $wpseo_robots = get_post_meta( $post_id, '_wpseo_edit_robots', true ); + $robot_value = $this->get_robot_value( $wpseo_robots ); + + // Saving the new meta values for Yoast SEO. + $this->maybe_save_post_meta( 'meta-robots-noindex', $robot_value['index'], $post_id ); + $this->maybe_save_post_meta( 'meta-robots-nofollow', $robot_value['follow'], $post_id ); + } + + /** + * Imports the taxonomy metas from wpSEO. + * + * @return void + */ + private function import_taxonomy_metas() { + $terms = get_terms( + [ + 'taxonomy' => get_taxonomies(), + 'hide_empty' => false, + ] + ); + $tax_meta = get_option( 'wpseo_taxonomy_meta' ); + + foreach ( $terms as $term ) { + $this->import_taxonomy_description( $tax_meta, $term->taxonomy, $term->term_id ); + $this->import_taxonomy_robots( $tax_meta, $term->taxonomy, $term->term_id ); + } + + update_option( 'wpseo_taxonomy_meta', $tax_meta ); + } + + /** + * Imports the meta description to Yoast SEO. + * + * @param array $tax_meta The array with the current metadata. + * @param string $taxonomy String with the name of the taxonomy. + * @param string $term_id The ID of the current term. + * + * @return void + */ + private function import_taxonomy_description( &$tax_meta, $taxonomy, $term_id ) { + $description = get_option( 'wpseo_' . $taxonomy . '_' . $term_id, false ); + if ( $description !== false ) { + // Import description. + $tax_meta[ $taxonomy ][ $term_id ]['wpseo_desc'] = $description; + } + } + + /** + * Imports the robot value to Yoast SEO. + * + * @param array $tax_meta The array with the current metadata. + * @param string $taxonomy String with the name of the taxonomy. + * @param string $term_id The ID of the current term. + * + * @return void + */ + private function import_taxonomy_robots( &$tax_meta, $taxonomy, $term_id ) { + $wpseo_robots = get_option( 'wpseo_' . $taxonomy . '_' . $term_id . '_robots', false ); + if ( $wpseo_robots === false ) { + return; + } + // The value 1, 2 and 6 are the index values in wpSEO. + $new_robot_value = 'noindex'; + + if ( in_array( (int) $wpseo_robots, [ 1, 2, 6 ], true ) ) { + $new_robot_value = 'index'; + } + + $tax_meta[ $taxonomy ][ $term_id ]['wpseo_noindex'] = $new_robot_value; + } + + /** + * Deletes the wpSEO taxonomy meta data. + * + * @param string $taxonomy String with the name of the taxonomy. + * @param string $term_id The ID of the current term. + * + * @return void + */ + private function delete_taxonomy_metas( $taxonomy, $term_id ) { + delete_option( 'wpseo_' . $taxonomy . '_' . $term_id ); + delete_option( 'wpseo_' . $taxonomy . '_' . $term_id . '_robots' ); + } + + /** + * Gets the robot config by given wpSEO robots value. + * + * @param string $wpseo_robots The value in wpSEO that needs to be converted to the Yoast format. + * + * @return string The correct robot value. + */ + private function get_robot_value( $wpseo_robots ) { + if ( array_key_exists( $wpseo_robots, $this->robot_values ) ) { + return $this->robot_values[ $wpseo_robots ]; + } + + return $this->robot_values[1]; + } + + /** + * Deletes wpSEO postmeta from the database. + * + * @return bool Cleanup status. + */ + private function cleanup_post_meta() { + global $wpdb; + + // If we get to replace the data, let's do some proper cleanup. + return $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '_wpseo_edit_%'" ); + } + + /** + * Cleans up the wpSEO term meta. + * + * @return void + */ + private function cleanup_term_meta() { + $terms = get_terms( + [ + 'taxonomy' => get_taxonomies(), + 'hide_empty' => false, + ] + ); + + foreach ( $terms as $term ) { + $this->delete_taxonomy_metas( $term->taxonomy, $term->term_id ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-importers.php b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-importers.php new file mode 100644 index 00000000..d2336ecd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/import/plugins/class-importers.php @@ -0,0 +1,47 @@ +get_manage_capability(); + $page_identifier = $this->get_page_identifier(); + $admin_page_callback = $this->get_admin_page_callback(); + + // Get all submenu pages. + $submenu_pages = $this->get_submenu_pages(); + + foreach ( $submenu_pages as $submenu_page ) { + if ( WPSEO_Capability_Utils::current_user_can( $submenu_page[3] ) ) { + $manage_capability = $submenu_page[3]; + $page_identifier = $submenu_page[4]; + $admin_page_callback = $submenu_page[5]; + break; + } + } + + foreach ( $submenu_pages as $index => $submenu_page ) { + $submenu_pages[ $index ][0] = $page_identifier; + } + + /* + * The current user has the capability to control anything. + * This means that all submenus and dashboard can be shown. + */ + global $admin_page_hooks; + + add_menu_page( + 'Yoast SEO: ' . __( 'Dashboard', 'wordpress-seo' ), + 'Yoast SEO ' . $this->get_notification_counter(), + $manage_capability, + $page_identifier, + $admin_page_callback, + $this->get_icon_svg(), + 99 + ); + + // Wipe notification bits from hooks. + // phpcs:ignore WordPress.WP.GlobalVariablesOverride -- This is a deliberate action. + $admin_page_hooks[ $page_identifier ] = 'seo'; + + // Add submenu items to the main menu if possible. + $this->register_submenu_pages( $submenu_pages ); + } + + /** + * Returns the list of registered submenu pages. + * + * @return array List of registered submenu pages. + */ + public function get_submenu_pages() { + global $wpseo_admin; + + $search_console_callback = null; + + // Account for when the available submenu pages are requested from outside the admin. + if ( isset( $wpseo_admin ) ) { + $google_search_console = new WPSEO_GSC(); + $search_console_callback = [ $google_search_console, 'display' ]; + } + + // Submenu pages. + $submenu_pages = [ + $this->get_submenu_page( __( 'General', 'wordpress-seo' ), $this->get_page_identifier() ), + $this->get_submenu_page( + __( 'Search Console', 'wordpress-seo' ), + 'wpseo_search_console', + $search_console_callback + ), + $this->get_submenu_page( __( 'Tools', 'wordpress-seo' ), 'wpseo_tools' ), + $this->get_submenu_page( $this->get_license_page_title(), 'wpseo_licenses' ), + ]; + + /** + * Filter: 'wpseo_submenu_pages' - Collects all submenus that need to be shown. + * + * @param array $submenu_pages List with all submenu pages. + */ + return (array) apply_filters( 'wpseo_submenu_pages', $submenu_pages ); + } + + /** + * Returns the notification count in HTML format. + * + * @return string The notification count in HTML format. + */ + protected function get_notification_counter() { + $notification_center = Yoast_Notification_Center::get(); + $notification_count = $notification_center->get_notification_count(); + + // Add main page. + /* translators: Hidden accessibility text; %s: number of notifications. */ + $notifications = sprintf( _n( '%s notification', '%s notifications', $notification_count, 'wordpress-seo' ), number_format_i18n( $notification_count ) ); + + return sprintf( '%2$s', $notification_count, $notifications ); + } + + /** + * Returns the capability that is required to manage all options. + * + * @return string Capability to check against. + */ + protected function get_manage_capability() { + return 'wpseo_manage_options'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/menu/class-base-menu.php b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-base-menu.php new file mode 100644 index 00000000..1d91eaa8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-base-menu.php @@ -0,0 +1,287 @@ +menu = $menu; + } + + /** + * Returns the list of registered submenu pages. + * + * @return array List of registered submenu pages. + */ + abstract public function get_submenu_pages(); + + /** + * Creates a submenu formatted array. + * + * @param string $page_title Page title to use. + * @param string $page_slug Page slug to use. + * @param callable|null $callback Optional. Callback which handles the page request. + * @param callable[]|null $hook Optional. Hook to trigger when the page is registered. + * + * @return array Formatted submenu. + */ + protected function get_submenu_page( $page_title, $page_slug, $callback = null, $hook = null ) { + if ( $callback === null ) { + $callback = $this->get_admin_page_callback(); + } + + return [ + $this->get_page_identifier(), + '', + $page_title, + $this->get_manage_capability(), + $page_slug, + $callback, + $hook, + ]; + } + + /** + * Registers submenu pages as menu pages. + * + * This method should only be used if the user does not have the required capabilities + * to access the parent menu page. + * + * @param array $submenu_pages List of submenu pages to register. + * + * @return void + */ + protected function register_menu_pages( $submenu_pages ) { + if ( ! is_array( $submenu_pages ) || empty( $submenu_pages ) ) { + return; + } + + // Loop through submenu pages and add them. + array_walk( $submenu_pages, [ $this, 'register_menu_page' ] ); + } + + /** + * Registers submenu pages. + * + * @param array $submenu_pages List of submenu pages to register. + * + * @return void + */ + protected function register_submenu_pages( $submenu_pages ) { + if ( ! is_array( $submenu_pages ) || empty( $submenu_pages ) ) { + return; + } + + // Loop through submenu pages and add them. + array_walk( $submenu_pages, [ $this, 'register_submenu_page' ] ); + } + + /** + * Registers a submenu page as a menu page. + * + * This method should only be used if the user does not have the required capabilities + * to access the parent menu page. + * + * @param array $submenu_page { + * Submenu page definition. + * + * @type string $0 Parent menu page slug. + * @type string $1 Page title, currently unused. + * @type string $2 Title to display in the menu. + * @type string $3 Required capability to access the page. + * @type string $4 Page slug. + * @type callable $5 Callback to run when the page is rendered. + * @type array $6 Optional. List of callbacks to run when the page is loaded. + * } + * + * @return void + */ + protected function register_menu_page( $submenu_page ) { + + // If the submenu page requires the general manage capability, it must be added as an actual submenu page. + if ( $submenu_page[3] === $this->get_manage_capability() ) { + return; + } + + $page_title = 'Yoast SEO: ' . $submenu_page[2]; + + // Register submenu page as menu page. + $hook_suffix = add_menu_page( + $page_title, + $submenu_page[2], + $submenu_page[3], + $submenu_page[4], + $submenu_page[5], + $this->get_icon_svg(), + 99 + ); + + // If necessary, add hooks for the submenu page. + if ( isset( $submenu_page[6] ) && ( is_array( $submenu_page[6] ) ) ) { + $this->add_page_hooks( $hook_suffix, $submenu_page[6] ); + } + } + + /** + * Registers a submenu page. + * + * This method will override the capability of the page to automatically use the + * general manage capability. Use the `register_menu_page()` method if the submenu + * page should actually use a different capability. + * + * @param array $submenu_page { + * Submenu page definition. + * + * @type string $0 Parent menu page slug. + * @type string $1 Page title, currently unused. + * @type string $2 Title to display in the menu. + * @type string $3 Required capability to access the page. + * @type string $4 Page slug. + * @type callable $5 Callback to run when the page is rendered. + * @type array $6 Optional. List of callbacks to run when the page is loaded. + * } + * + * @return void + */ + protected function register_submenu_page( $submenu_page ) { + $page_title = $submenu_page[2]; + + // We cannot use $submenu_page[1] because add-ons define that, so hard-code this value. + if ( $submenu_page[4] === 'wpseo_licenses' ) { + $page_title = $this->get_license_page_title(); + } + + /* + * Handle the Google Search Console special case by passing a fake parent + * page slug. This way, the sub-page is stil registered and can be accessed + * directly. Its menu item won't be displayed. + */ + if ( $submenu_page[4] === 'wpseo_search_console' ) { + // Set the parent page slug to a non-existing one. + $submenu_page[0] = 'wpseo_fake_menu_parent_page_slug'; + } + + $page_title .= ' - Yoast SEO'; + + // Register submenu page. + $hook_suffix = add_submenu_page( + $submenu_page[0], + $page_title, + $submenu_page[2], + $submenu_page[3], + $submenu_page[4], + $submenu_page[5] + ); + + // If necessary, add hooks for the submenu page. + if ( isset( $submenu_page[6] ) && ( is_array( $submenu_page[6] ) ) ) { + $this->add_page_hooks( $hook_suffix, $submenu_page[6] ); + } + } + + /** + * Adds hook callbacks for a given admin page hook suffix. + * + * @param string $hook_suffix Admin page hook suffix, as returned by `add_menu_page()` + * or `add_submenu_page()`. + * @param array $callbacks Callbacks to add. + * + * @return void + */ + protected function add_page_hooks( $hook_suffix, array $callbacks ) { + foreach ( $callbacks as $callback ) { + add_action( 'load-' . $hook_suffix, $callback ); + } + } + + /** + * Gets the main admin page identifier. + * + * @return string Admin page identifier. + */ + protected function get_page_identifier() { + return $this->menu->get_page_identifier(); + } + + /** + * Checks whether the current user has capabilities to manage all options. + * + * @return bool True if capabilities are sufficient, false otherwise. + */ + protected function check_manage_capability() { + return WPSEO_Capability_Utils::current_user_can( $this->get_manage_capability() ); + } + + /** + * Returns the capability that is required to manage all options. + * + * @return string Capability to check against. + */ + abstract protected function get_manage_capability(); + + /** + * Returns the page handler callback. + * + * @return array Callback page handler. + */ + protected function get_admin_page_callback() { + return [ $this->menu, 'load_page' ]; + } + + /** + * Returns the page title to use for the licenses page. + * + * @return string The title for the license page. + */ + protected function get_license_page_title() { + static $title = null; + + if ( $title === null ) { + $title = __( 'Upgrades', 'wordpress-seo' ); + } + + if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) && ! YoastSEO()->helpers->product->is_premium() ) { + $title = __( 'Upgrades', 'wordpress-seo' ) . '' . __( '30% OFF', 'wordpress-seo' ) . ''; + } + + return $title; + } + + /** + * Returns a base64 URL for the svg for use in the menu. + * + * @param bool $base64 Whether or not to return base64'd output. + * + * @return string SVG icon. + */ + public function get_icon_svg( $base64 = true ) { + $svg = ''; + + if ( $base64 ) { + //phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode -- This encoding is intended. + return 'data:image/svg+xml;base64,' . base64_encode( $svg ); + } + + return $svg; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/menu/class-menu.php b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-menu.php new file mode 100644 index 00000000..bc3ab3e0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-menu.php @@ -0,0 +1,96 @@ +register_hooks(); + + if ( WPSEO_Utils::is_plugin_network_active() ) { + $network_admin_menu = new WPSEO_Network_Admin_Menu( $this ); + $network_admin_menu->register_hooks(); + } + + $capability_normalizer = new WPSEO_Submenu_Capability_Normalize(); + $capability_normalizer->register_hooks(); + } + + /** + * Returns the main menu page identifier. + * + * @return string Page identifier to use. + */ + public function get_page_identifier() { + return self::PAGE_IDENTIFIER; + } + + /** + * Loads the requested admin settings page. + * + * @return void + */ + public function load_page() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $page = sanitize_text_field( wp_unslash( $_GET['page'] ) ); + $this->show_page( $page ); + } + } + + /** + * Shows an admin settings page. + * + * @param string $page Page to display. + * + * @return void + */ + protected function show_page( $page ) { + switch ( $page ) { + case 'wpseo_tools': + require_once WPSEO_PATH . 'admin/pages/tools.php'; + break; + + case 'wpseo_licenses': + require_once WPSEO_PATH . 'admin/pages/licenses.php'; + break; + + case 'wpseo_files': + require_once WPSEO_PATH . 'admin/views/tool-file-editor.php'; + break; + + default: + require_once WPSEO_PATH . 'admin/pages/dashboard.php'; + break; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/menu/class-network-admin-menu.php b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-network-admin-menu.php new file mode 100644 index 00000000..b440cc10 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-network-admin-menu.php @@ -0,0 +1,97 @@ +check_manage_capability() ) { + return; + } + + add_menu_page( + __( 'Network Settings', 'wordpress-seo' ) . ' - Yoast SEO', + 'Yoast SEO', + $this->get_manage_capability(), + $this->get_page_identifier(), + [ $this, 'network_config_page' ], + $this->get_icon_svg() + ); + + $submenu_pages = $this->get_submenu_pages(); + $this->register_submenu_pages( $submenu_pages ); + } + + /** + * Returns the list of registered submenu pages. + * + * @return array List of registered submenu pages. + */ + public function get_submenu_pages() { + + // Submenu pages. + $submenu_pages = [ + $this->get_submenu_page( + __( 'General', 'wordpress-seo' ), + $this->get_page_identifier(), + [ $this, 'network_config_page' ] + ), + ]; + + if ( WPSEO_Utils::allow_system_file_edit() === true ) { + $submenu_pages[] = $this->get_submenu_page( __( 'Edit Files', 'wordpress-seo' ), 'wpseo_files' ); + } + + $submenu_pages[] = $this->get_submenu_page( __( 'Extensions', 'wordpress-seo' ), 'wpseo_licenses' ); + + return $submenu_pages; + } + + /** + * Loads the form for the network configuration page. + * + * @return void + */ + public function network_config_page() { + require_once WPSEO_PATH . 'admin/pages/network.php'; + } + + /** + * Checks whether the current user has capabilities to manage all options. + * + * @return bool True if capabilities are sufficient, false otherwise. + */ + protected function check_manage_capability() { + return current_user_can( $this->get_manage_capability() ); + } + + /** + * Returns the capability that is required to manage all options. + * + * @return string Capability to check against. + */ + protected function get_manage_capability() { + return 'wpseo_manage_network_options'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-editor.php b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-editor.php new file mode 100644 index 00000000..7f3b8201 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-editor.php @@ -0,0 +1,159 @@ + true, + 'label_title' => '', + 'label_description' => '', + 'description_placeholder' => '', + 'has_new_badge' => false, + 'is_disabled' => false, + 'has_premium_badge' => false, + ] + ); + + $this->validate_arguments( $arguments ); + + $this->yform = $yform; + $this->arguments = [ + 'title' => (string) $arguments['title'], + 'description' => (string) $arguments['description'], + 'page_type_recommended' => (string) $arguments['page_type_recommended'], + 'page_type_specific' => (string) $arguments['page_type_specific'], + 'paper_style' => (bool) $arguments['paper_style'], + 'label_title' => (string) $arguments['label_title'], + 'label_description' => (string) $arguments['label_description'], + 'description_placeholder' => (string) $arguments['description_placeholder'], + 'has_new_badge' => (bool) $arguments['has_new_badge'], + 'is_disabled' => (bool) $arguments['is_disabled'], + 'has_premium_badge' => (bool) $arguments['has_premium_badge'], + ]; + } + + /** + * Renders a div for the react application to mount to, and hidden inputs where + * the app should store it's value so they will be properly saved when the form + * is submitted. + * + * @return void + */ + public function render() { + $this->yform->hidden( $this->arguments['title'], $this->arguments['title'] ); + $this->yform->hidden( $this->arguments['description'], $this->arguments['description'] ); + + printf( + '
      ', + esc_attr( $this->arguments['title'] ), + esc_attr( $this->arguments['description'] ), + esc_attr( $this->arguments['page_type_recommended'] ), + esc_attr( $this->arguments['page_type_specific'] ), + esc_attr( $this->arguments['paper_style'] ), + esc_attr( $this->arguments['label_title'] ), + esc_attr( $this->arguments['label_description'] ), + esc_attr( $this->arguments['description_placeholder'] ), + esc_attr( $this->arguments['has_new_badge'] ), + esc_attr( $this->arguments['is_disabled'] ), + esc_attr( $this->arguments['has_premium_badge'] ) + ); + } + + /** + * Validates the replacement variable editor arguments. + * + * @param array $arguments The arguments to validate. + * + * @throws InvalidArgumentException Thrown when not all required arguments are present. + * + * @return void + */ + protected function validate_arguments( array $arguments ) { + $required_arguments = [ + 'title', + 'description', + 'page_type_recommended', + 'page_type_specific', + 'paper_style', + ]; + + foreach ( $required_arguments as $field_name ) { + if ( ! array_key_exists( $field_name, $arguments ) ) { + throw new InvalidArgumentException( + sprintf( + /* translators: %1$s expands to the missing field name. */ + __( 'Not all required fields are given. Missing field %1$s', 'wordpress-seo' ), + $field_name + ) + ); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-field.php b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-field.php new file mode 100644 index 00000000..e94d2c73 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-replacevar-field.php @@ -0,0 +1,88 @@ +yform = $yform; + $this->field_id = $field_id; + $this->label = $label; + $this->page_type_recommended = $page_type_recommended; + $this->page_type_specific = $page_type_specific; + } + + /** + * Renders a div for the react application to mount to, and hidden inputs where + * the app should store it's value so they will be properly saved when the form + * is submitted. + * + * @return void + */ + public function render() { + $this->yform->hidden( $this->field_id, $this->field_id ); + + printf( + '
      ', + esc_attr( $this->field_id ), + esc_attr( $this->label ), + esc_attr( $this->page_type_recommended ), + esc_attr( $this->page_type_specific ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/menu/class-submenu-capability-normalize.php b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-submenu-capability-normalize.php new file mode 100644 index 00000000..6e35718f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/menu/class-submenu-capability-normalize.php @@ -0,0 +1,41 @@ + $submenu_page ) { + if ( $submenu_page[3] === 'manage_options' ) { + $submenu_pages[ $index ][3] = 'wpseo_manage_options'; + } + } + + return $submenu_pages; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-abstract-sectioned-metabox-tab.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-abstract-sectioned-metabox-tab.php new file mode 100644 index 00000000..29ec6e90 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-abstract-sectioned-metabox-tab.php @@ -0,0 +1,97 @@ + '', + 'link_class' => '', + 'link_aria_label' => '', + ]; + + $options = array_merge( $default_options, $options ); + + $this->name = $name; + + $this->link_content = $link_content; + $this->link_title = $options['link_title']; + $this->link_class = $options['link_class']; + $this->link_aria_label = $options['link_aria_label']; + } + + /** + * Outputs the section link if any section has been added. + * + * @return void + */ + public function display_link() { + if ( $this->has_sections() ) { + printf( + '
    • %5$s
    • ', + esc_attr( $this->name ), + esc_attr( $this->link_class ), + ( $this->link_title !== '' ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '', + ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', + $this->link_content + ); + } + } + + /** + * Checks whether the tab has any sections. + * + * @return bool Whether the tab has any sections + */ + abstract protected function has_sections(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-inclusive-language.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-inclusive-language.php new file mode 100644 index 00000000..1fe2a1fd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-inclusive-language.php @@ -0,0 +1,58 @@ +is_globally_enabled() && $this->is_user_enabled() && $this->is_current_version_supported() + && YoastSEO()->helpers->language->has_inclusive_language_support( WPSEO_Language_Utils::get_language( get_locale() ) ); + } + + /** + * Whether or not this analysis is enabled by the user. + * + * @return bool Whether or not this analysis is enabled by the user. + */ + public function is_user_enabled() { + return ! get_the_author_meta( 'wpseo_inclusive_language_analysis_disable', get_current_user_id() ); + } + + /** + * Whether or not this analysis is enabled globally. + * + * @return bool Whether or not this analysis is enabled globally. + */ + public function is_globally_enabled() { + return WPSEO_Options::get( 'inclusive_language_analysis_active', false ); + } + + /** + * Whether the inclusive language analysis should be loaded in Free. + * + * It should always be loaded when Premium is not active. If Premium is active, it depends on the version. Some Premium + * versions also have inclusive language code (when it was still a Premium only feature) which would result in rendering + * the analysis twice. In those cases, the analysis should be only loaded from the Premium side. + * + * @return bool Whether or not the inclusive language analysis should be loaded. + */ + private function is_current_version_supported() { + $is_premium = YoastSEO()->helpers->product->is_premium(); + $premium_version = YoastSEO()->helpers->product->get_premium_version(); + + return ! $is_premium + || version_compare( $premium_version, '19.6-RC0', '>=' ) + || version_compare( $premium_version, '19.2', '==' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-readability.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-readability.php new file mode 100644 index 00000000..65345c48 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-readability.php @@ -0,0 +1,39 @@ +is_globally_enabled() && $this->is_user_enabled(); + } + + /** + * Whether or not this analysis is enabled by the user. + * + * @return bool Whether or not this analysis is enabled by the user. + */ + public function is_user_enabled() { + return ! get_the_author_meta( 'wpseo_content_analysis_disable', get_current_user_id() ); + } + + /** + * Whether or not this analysis is enabled globally. + * + * @return bool Whether or not this analysis is enabled globally. + */ + public function is_globally_enabled() { + return WPSEO_Options::get( 'content_analysis_active', true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php new file mode 100644 index 00000000..8225defb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-analysis-seo.php @@ -0,0 +1,39 @@ +is_globally_enabled() && $this->is_user_enabled(); + } + + /** + * Whether or not this analysis is enabled by the user. + * + * @return bool Whether or not this analysis is enabled by the user. + */ + public function is_user_enabled() { + return ! get_the_author_meta( 'wpseo_keyword_analysis_disable', get_current_user_id() ); + } + + /** + * Whether or not this analysis is enabled globally. + * + * @return bool Whether or not this analysis is enabled globally. + */ + public function is_globally_enabled() { + return WPSEO_Options::get( 'keyword_analysis_active', true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsible.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsible.php new file mode 100644 index 00000000..c5d378cd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsible.php @@ -0,0 +1,84 @@ +name = $name; + $this->content = $content; + $this->link_content = $link_content; + } + + /** + * Returns the html for the tab link. + * + * @return string + */ + public function link() { + return $this->link_content; + } + + /** + * Returns the html for the tab content. + * + * @return string + */ + public function content() { + $collapsible_paper = new WPSEO_Paper_Presenter( + $this->link(), + null, + [ + 'content' => $this->content, + 'collapsible' => true, + 'class' => 'metabox wpseo-form wpseo-collapsible-container', + 'paper_id' => 'collapsible-' . $this->name, + ] + ); + + return $collapsible_paper->get_output(); + } + + /** + * Returns the collapsible's unique identifier. + * + * @return string + */ + public function get_name() { + return $this->name; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsibles-section.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsibles-section.php new file mode 100644 index 00000000..14e8638e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-collapsibles-section.php @@ -0,0 +1,65 @@ +collapsibles = $collapsibles; + } + + /** + * Outputs the section content if any tab has been added. + * + * @return void + */ + public function display_content() { + if ( $this->has_sections() ) { + printf( '
      ', esc_attr( 'wpseo-meta-section-' . $this->name ) ); + echo '
      '; + + add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); + add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); + foreach ( $this->collapsibles as $collapsible ) { + echo wp_kses_post( $collapsible->content() ); + } + remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); + remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); + + echo '
      '; + } + } + + /** + * Checks whether the tab has any sections. + * + * @return bool Whether the tab has any sections + */ + protected function has_sections() { + return ! empty( $this->collapsibles ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php new file mode 100644 index 00000000..4d689177 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-editor.php @@ -0,0 +1,85 @@ +special_styles(); + $inside_editor = $styles['inside-editor']; + + $asset_location = new WPSEO_Admin_Asset_SEO_Location( WPSEO_FILE ); + $url = $asset_location->get_url( $inside_editor, WPSEO_Admin_Asset::TYPE_CSS ); + + if ( $css_files === '' ) { + $css_files = $url; + } + else { + $css_files .= ',' . $url; + } + + return $css_files; + } + + /** + * Enqueues the CSS to use in the TinyMCE editor. + * + * @return void + */ + public function add_editor_styles() { + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'inside-editor' ); + } + + /** + * Adds a custom element to the tinyMCE editor that we need for marking the content. + * + * @param array $tinymce_config The tinyMCE config as configured by WordPress. + * + * @return array The new tinyMCE config with our added custom elements. + */ + public function add_custom_element( $tinymce_config ) { + if ( ! empty( $tinymce_config['custom_elements'] ) ) { + $custom_elements = $tinymce_config['custom_elements']; + + $custom_elements .= ',~yoastmark'; + } + else { + $custom_elements = '~yoastmark'; + } + + $tinymce_config['custom_elements'] = $custom_elements; + + return $tinymce_config; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php new file mode 100644 index 00000000..df39f8b0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-form-tab.php @@ -0,0 +1,135 @@ + '', + 'link_class' => '', + 'link_title' => '', + 'link_aria_label' => '', + 'single' => false, + ]; + + $options = array_merge( $default_options, $options ); + + $this->name = $name; + $this->content = $content; + $this->link_content = $link_content; + $this->tab_class = $options['tab_class']; + $this->link_class = $options['link_class']; + $this->link_title = $options['link_title']; + $this->link_aria_label = $options['link_aria_label']; + $this->single = $options['single']; + } + + /** + * Returns the html for the tab link. + * + * @return string + */ + public function link() { + + $html = '
    • %6$s
    • '; + + if ( $this->single ) { + $html = '
    • %6$s
    • '; + } + + return sprintf( + $html, + esc_attr( $this->name ), + ( $this->tab_class !== '' ) ? ' ' . esc_attr( $this->tab_class ) : '', + ( $this->link_class !== '' ) ? ' ' . esc_attr( $this->link_class ) : '', + ( $this->link_title !== '' ) ? ' title="' . esc_attr( $this->link_title ) . '"' : '', + ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', + $this->link_content + ); + } + + /** + * Returns the html for the tab content. + * + * @return string + */ + public function content() { + return sprintf( + '
      %3$s
      ', + esc_attr( 'wpseo_' . $this->name ), + esc_attr( $this->name ), + $this->content + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-null-tab.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-null-tab.php new file mode 100644 index 00000000..1e31fd2b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-null-tab.php @@ -0,0 +1,30 @@ +name = $name; + $this->content = $content; + $default_options = [ + 'link_class' => '', + 'link_aria_label' => '', + 'content_class' => 'wpseo-form', + ]; + $options = wp_parse_args( $options, $default_options ); + $this->link_content = $link_content; + $this->link_class = $options['link_class']; + $this->link_aria_label = $options['link_aria_label']; + $this->content_class = $options['content_class']; + } + + /** + * Outputs the section link. + * + * @return void + */ + public function display_link() { + printf( + '
    • %4$s
    • ', + esc_attr( $this->name ), + esc_attr( $this->link_class ), + ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', + $this->link_content + ); + } + + /** + * Outputs the section content. + * + * @return void + */ + public function display_content() { + $html = sprintf( + '
      ', + esc_attr( $this->name ), + esc_attr( $this->content_class ) + ); + $html .= $this->content; + $html .= '
      '; + echo $html; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-inclusive-language.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-inclusive-language.php new file mode 100644 index 00000000..1fddff4a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-inclusive-language.php @@ -0,0 +1,46 @@ + +
      %2$s
      ', + esc_attr( $this->name ), + esc_html__( 'Inclusive language', 'wordpress-seo' ) + ); + } + + /** + * Outputs the section content. + * + * @return void + */ + public function display_content() { + printf( + '
      ', + esc_attr( $this->name ) + ); + echo '
      ', '
      '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-react.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-react.php new file mode 100644 index 00000000..70906599 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-react.php @@ -0,0 +1,118 @@ +name = $name; + $this->content = $content; + + $default_options = [ + 'link_class' => '', + 'link_aria_label' => '', + 'html_after' => '', + ]; + + $options = wp_parse_args( $options, $default_options ); + + $this->link_content = $link_content; + $this->link_class = $options['link_class']; + $this->link_aria_label = $options['link_aria_label']; + $this->html_after = $options['html_after']; + } + + /** + * Outputs the section link. + * + * @return void + */ + public function display_link() { + printf( + '
    • %4$s
    • ', + esc_attr( $this->name ), + esc_attr( $this->link_class ), + ( $this->link_aria_label !== '' ) ? ' aria-label="' . esc_attr( $this->link_aria_label ) . '"' : '', + wp_kses_post( $this->link_content ) + ); + } + + /** + * Outputs the section content. + * + * @return void + */ + public function display_content() { + add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); + add_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); + + printf( + '
      ', + esc_attr( $this->name ) + ); + echo wp_kses_post( $this->content ); + echo '
      '; + echo wp_kses_post( $this->html_after ); + echo '
      '; + + remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_forms' ] ); + remove_filter( 'wp_kses_allowed_html', [ 'WPSEO_Utils', 'extend_kses_post_with_a11y' ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-readability.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-readability.php new file mode 100644 index 00000000..cbfea907 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox-section-readability.php @@ -0,0 +1,46 @@ + +
      %2$s
      ', + esc_attr( $this->name ), + esc_html__( 'Readability', 'wordpress-seo' ) + ); + } + + /** + * Outputs the section content. + * + * @return void + */ + public function display_content() { + printf( + '
      ', + esc_attr( $this->name ) + ); + echo '
      ', '
      '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php new file mode 100644 index 00000000..3f105b79 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/class-metabox.php @@ -0,0 +1,1214 @@ +is_internet_explorer() ) { + add_action( 'add_meta_boxes', [ $this, 'internet_explorer_metabox' ] ); + + return; + } + + add_action( 'add_meta_boxes', [ $this, 'add_meta_box' ] ); + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); + add_action( 'wp_insert_post', [ $this, 'save_postdata' ] ); + add_action( 'edit_attachment', [ $this, 'save_postdata' ] ); + add_action( 'add_attachment', [ $this, 'save_postdata' ] ); + add_action( 'admin_init', [ $this, 'translate_meta_boxes' ] ); + + $this->editor = new WPSEO_Metabox_Editor(); + $this->editor->register_hooks(); + + $this->social_is_enabled = WPSEO_Options::get( 'opengraph', false ) || WPSEO_Options::get( 'twitter', false ); + $this->is_advanced_metadata_enabled = WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) || WPSEO_Options::get( 'disableadvanced_meta' ) === false; + + $this->seo_analysis = new WPSEO_Metabox_Analysis_SEO(); + $this->readability_analysis = new WPSEO_Metabox_Analysis_Readability(); + $this->inclusive_language_analysis = new WPSEO_Metabox_Analysis_Inclusive_Language(); + } + + /** + * Checks whether the request comes from an IE 11 browser. + * + * @return bool Whether the request comes from an IE 11 browser. + */ + public static function is_internet_explorer() { + if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { + return false; + } + + $user_agent = sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ); + + if ( stripos( $user_agent, 'Trident/7.0' ) === false ) { + return false; + } + + return true; + } + + /** + * Adds an alternative metabox for internet explorer users. + * + * @return void + */ + public function internet_explorer_metabox() { + $post_types = WPSEO_Post_Type::get_accessible_post_types(); + $post_types = array_filter( $post_types, [ $this, 'display_metabox' ] ); + + if ( ! is_array( $post_types ) || $post_types === [] ) { + return; + } + + $product_title = $this->get_product_title(); + + foreach ( $post_types as $post_type ) { + add_filter( "postbox_classes_{$post_type}_wpseo_meta", [ $this, 'wpseo_metabox_class' ] ); + + add_meta_box( + 'wpseo_meta', + $product_title, + [ $this, 'render_internet_explorer_notice' ], + $post_type, + 'normal', + apply_filters( 'wpseo_metabox_prio', 'high' ), + [ '__block_editor_compatible_meta_box' => true ] + ); + } + } + + /** + * Renders the content for the internet explorer metabox. + * + * @return void + */ + public function render_internet_explorer_notice() { + $content = sprintf( + /* translators: 1: Link start tag to the Firefox website, 2: Link start tag to the Chrome website, 3: Link start tag to the Edge website, 4: Link closing tag. */ + esc_html__( 'The browser you are currently using is unfortunately rather dated. Since we strive to give you the best experience possible, we no longer support this browser. Instead, please use %1$sFirefox%4$s, %2$sChrome%4$s or %3$sMicrosoft Edge%4$s.', 'wordpress-seo' ), + '', + '', + '', + '' + ); + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped above. + echo new Alert_Presenter( $content ); + } + + /** + * Translates text strings for use in the meta box. + * + * IMPORTANT: if you want to add a new string (option) somewhere, make sure you add that array key to + * the main meta box definition array in the class WPSEO_Meta() as well!!!! + * + * @return void + */ + public static function translate_meta_boxes() { + WPSEO_Meta::$meta_fields['general']['title']['title'] = __( 'SEO title', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['general']['metadesc']['title'] = __( 'Meta description', 'wordpress-seo' ); + + /* translators: %s expands to the post type name. */ + WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['title'] = __( 'Allow search engines to show this %s in search results?', 'wordpress-seo' ); + if ( (string) get_option( 'blog_public' ) === '0' ) { + WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['description'] = '' . __( 'Warning: even though you can set the meta robots setting here, the entire site is set to noindex in the sitewide privacy settings, so these settings won\'t have an effect.', 'wordpress-seo' ) . ''; + } + /* translators: %1$s expands to Yes or No, %2$s expands to the post type name.*/ + WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['options']['0'] = __( 'Default for %2$s, currently: %1$s', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['options']['2'] = __( 'Yes', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-noindex']['options']['1'] = __( 'No', 'wordpress-seo' ); + + /* translators: %1$s expands to the post type name.*/ + WPSEO_Meta::$meta_fields['advanced']['meta-robots-nofollow']['title'] = __( 'Should search engines follow links on this %1$s?', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-nofollow']['options']['0'] = __( 'Yes', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-nofollow']['options']['1'] = __( 'No', 'wordpress-seo' ); + + WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['title'] = __( 'Meta robots advanced', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['description'] = __( 'If you want to apply advanced meta robots settings for this page, please define them in the following field.', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['options']['noimageindex'] = __( 'No Image Index', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['options']['noarchive'] = __( 'No Archive', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['meta-robots-adv']['options']['nosnippet'] = __( 'No Snippet', 'wordpress-seo' ); + + WPSEO_Meta::$meta_fields['advanced']['bctitle']['title'] = __( 'Breadcrumbs Title', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['bctitle']['description'] = __( 'Title to use for this page in breadcrumb paths', 'wordpress-seo' ); + + WPSEO_Meta::$meta_fields['advanced']['canonical']['title'] = __( 'Canonical URL', 'wordpress-seo' ); + + WPSEO_Meta::$meta_fields['advanced']['canonical']['description'] = sprintf( + /* translators: 1: link open tag; 2: link close tag. */ + __( 'The canonical URL that this page should point to. Leave empty to default to permalink. %1$sCross domain canonical%2$s supported too.', 'wordpress-seo' ), + '', + WPSEO_Admin_Utils::get_new_tab_message() . '' + ); + + WPSEO_Meta::$meta_fields['advanced']['redirect']['title'] = __( '301 Redirect', 'wordpress-seo' ); + WPSEO_Meta::$meta_fields['advanced']['redirect']['description'] = __( 'The URL that this page should redirect to.', 'wordpress-seo' ); + + do_action( 'wpseo_tab_translate' ); + } + + /** + * Determines whether the metabox should be shown for the passed identifier. + * + * By default the check is done for post types, but can also be used for taxonomies. + * + * @param string|null $identifier The identifier to check. + * @param string $type The type of object to check. Defaults to post_type. + * + * @return bool Whether or not the metabox should be displayed. + */ + public function display_metabox( $identifier = null, $type = 'post_type' ) { + return WPSEO_Utils::is_metabox_active( $identifier, $type ); + } + + /** + * Adds the Yoast SEO meta box to the edit boxes in the edit post, page, + * attachment, and custom post types pages. + * + * @return void + */ + public function add_meta_box() { + $post_types = WPSEO_Post_Type::get_accessible_post_types(); + $post_types = array_filter( $post_types, [ $this, 'display_metabox' ] ); + + if ( ! is_array( $post_types ) || $post_types === [] ) { + return; + } + + $product_title = $this->get_product_title(); + + foreach ( $post_types as $post_type ) { + add_filter( "postbox_classes_{$post_type}_wpseo_meta", [ $this, 'wpseo_metabox_class' ] ); + + add_meta_box( + 'wpseo_meta', + $product_title, + [ $this, 'meta_box' ], + $post_type, + 'normal', + apply_filters( 'wpseo_metabox_prio', 'high' ), + [ '__block_editor_compatible_meta_box' => true ] + ); + } + } + + /** + * Adds CSS classes to the meta box. + * + * @param string[] $classes An array of postbox CSS classes. + * + * @return string[] List of classes that will be applied to the editbox container. + */ + public function wpseo_metabox_class( $classes ) { + $classes[] = 'yoast wpseo-metabox'; + + return $classes; + } + + /** + * Passes variables to js for use with the post-scraper. + * + * @return array|bool|int> + */ + public function get_metabox_script_data() { + $permalink = $this->get_permalink(); + + $post_formatter = new WPSEO_Metabox_Formatter( + new WPSEO_Post_Metabox_Formatter( $this->get_metabox_post(), [], $permalink ) + ); + + $values = $post_formatter->get_values(); + /** This filter is documented in admin/filters/class-cornerstone-filter.php. */ + $post_types = apply_filters( 'wpseo_cornerstone_post_types', WPSEO_Post_Type::get_accessible_post_types() ); + if ( $values['cornerstoneActive'] && ! in_array( $this->get_metabox_post()->post_type, $post_types, true ) ) { + $values['cornerstoneActive'] = false; + } + + if ( $values['semrushIntegrationActive'] && $this->post->post_type === 'attachment' ) { + $values['semrushIntegrationActive'] = 0; + } + + if ( $values['wincherIntegrationActive'] && $this->post->post_type === 'attachment' ) { + $values['wincherIntegrationActive'] = 0; + } + + return $values; + } + + /** + * Determines whether or not the current post type has registered taxonomies. + * + * @return bool Whether the current post type has taxonomies. + */ + private function current_post_type_has_taxonomies() { + $post_taxonomies = get_object_taxonomies( get_post_type() ); + + return ! empty( $post_taxonomies ); + } + + /** + * Determines the scope based on the post type. + * This can be used by the replacevar plugin to determine if a replacement needs to be executed. + * + * @return string String describing the current scope. + */ + private function determine_scope() { + if ( $this->get_metabox_post()->post_type === 'page' ) { + return 'page'; + } + + return 'post'; + } + + /** + * Outputs the meta box. + * + * @return void + */ + public function meta_box() { + $this->render_hidden_fields(); + $this->render_tabs(); + } + + /** + * Renders the metabox hidden fields. + * + * @return void + */ + protected function render_hidden_fields() { + wp_nonce_field( 'yoast_free_metabox', 'yoast_free_metabox_nonce' ); + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'general' ); + + if ( $this->is_advanced_metadata_enabled ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'advanced' ); + } + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'schema', $this->get_metabox_post()->post_type ); + + if ( $this->social_is_enabled ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in class. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'social' ); + } + + /** + * Filter: 'wpseo_content_meta_section_content' - Allow filtering the metabox content before outputting. + * + * @param string $post_content The metabox content string. + */ + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output should be escaped in the filter. + echo apply_filters( 'wpseo_content_meta_section_content', '' ); + } + + /** + * Renders the metabox tabs. + * + * @return void + */ + protected function render_tabs() { + echo '
      '; + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $this->get_product_title() returns a hard-coded string. + printf( '
        ', $this->get_product_title() ); + + $tabs = $this->get_tabs(); + + foreach ( $tabs as $tab ) { + if ( $tab->name === 'premium' ) { + continue; + } + + $tab->display_link(); + } + + echo '
      '; + + foreach ( $tabs as $tab ) { + $tab->display_content(); + } + + echo '
      '; + } + + /** + * Returns the relevant metabox tabs for the current view. + * + * @return WPSEO_Metabox_Section[] + */ + private function get_tabs() { + $tabs = []; + + $label = __( 'SEO', 'wordpress-seo' ); + if ( $this->seo_analysis->is_enabled() ) { + $label = '' . $label; + } + $tabs[] = new WPSEO_Metabox_Section_React( 'content', $label ); + + if ( $this->readability_analysis->is_enabled() ) { + $tabs[] = new WPSEO_Metabox_Section_Readability(); + } + + if ( $this->inclusive_language_analysis->is_enabled() ) { + $tabs[] = new WPSEO_Metabox_Section_Inclusive_Language(); + } + + if ( $this->is_advanced_metadata_enabled ) { + $tabs[] = new WPSEO_Metabox_Section_React( + 'schema', + '' . __( 'Schema', 'wordpress-seo' ), + '' + ); + } + + if ( $this->social_is_enabled ) { + $tabs[] = new WPSEO_Metabox_Section_React( + 'social', + '' . __( 'Social', 'wordpress-seo' ), + '', + [ + 'html_after' => '
      ', + ] + ); + } + + $tabs = array_merge( $tabs, $this->get_additional_tabs() ); + + return $tabs; + } + + /** + * Returns the metabox tabs that have been added by other plugins. + * + * @return WPSEO_Metabox_Section_Additional[] + */ + protected function get_additional_tabs() { + $tabs = []; + + /** + * Private filter: 'yoast_free_additional_metabox_sections'. + * + * Meant for internal use only. Allows adding additional tabs to the Yoast SEO metabox. + * + * @since 11.9 + * + * @param array[] $tabs { + * An array of arrays with tab specifications. + * + * @type array $tab { + * A tab specification. + * + * @type string $name The name of the tab. Used in the HTML IDs, href and aria properties. + * @type string $link_content The content of the tab link. + * @type string $content The content of the tab. + * @type array $options { + * Optional. Extra options. + * + * @type string $link_class Optional. The class for the tab link. + * @type string $link_aria_label Optional. The aria label of the tab link. + * } + * } + * } + */ + $requested_tabs = apply_filters( 'yoast_free_additional_metabox_sections', [] ); + + foreach ( $requested_tabs as $tab ) { + if ( is_array( $tab ) && array_key_exists( 'name', $tab ) && array_key_exists( 'link_content', $tab ) && array_key_exists( 'content', $tab ) ) { + $options = array_key_exists( 'options', $tab ) ? $tab['options'] : []; + $tabs[] = new WPSEO_Metabox_Section_Additional( + $tab['name'], + $tab['link_content'], + $tab['content'], + $options + ); + } + } + + return $tabs; + } + + /** + * Adds a line in the meta box. + * + * @todo [JRF] Check if $class is added appropriately everywhere. + * + * @param string[] $meta_field_def Contains the vars based on which output is generated. + * @param string $key Internal key (without prefix). + * + * @return string + */ + public function do_meta_box( $meta_field_def, $key = '' ) { + $content = ''; + $esc_form_key = esc_attr( WPSEO_Meta::$form_prefix . $key ); + $meta_value = WPSEO_Meta::get_value( $key, $this->get_metabox_post()->ID ); + + $class = ''; + if ( isset( $meta_field_def['class'] ) && $meta_field_def['class'] !== '' ) { + $class = ' ' . $meta_field_def['class']; + } + + $placeholder = ''; + if ( isset( $meta_field_def['placeholder'] ) && $meta_field_def['placeholder'] !== '' ) { + $placeholder = $meta_field_def['placeholder']; + } + + $aria_describedby = ''; + $description = ''; + if ( isset( $meta_field_def['description'] ) ) { + $aria_describedby = ' aria-describedby="' . $esc_form_key . '-desc"'; + $description = '

      ' . $meta_field_def['description'] . '

      '; + } + + // Add a hide_on_pages option that returns nothing when the field is rendered on a page. + if ( isset( $meta_field_def['hide_on_pages'] ) && $meta_field_def['hide_on_pages'] && get_post_type() === 'page' ) { + return ''; + } + + switch ( $meta_field_def['type'] ) { + case 'text': + $ac = ''; + if ( isset( $meta_field_def['autocomplete'] ) && $meta_field_def['autocomplete'] === false ) { + $ac = 'autocomplete="off" '; + } + if ( $placeholder !== '' ) { + $placeholder = ' placeholder="' . esc_attr( $placeholder ) . '"'; + } + $content .= ''; + break; + + case 'url': + if ( $placeholder !== '' ) { + $placeholder = ' placeholder="' . esc_attr( $placeholder ) . '"'; + } + $content .= ''; + break; + + case 'textarea': + $rows = 3; + if ( isset( $meta_field_def['rows'] ) && $meta_field_def['rows'] > 0 ) { + $rows = $meta_field_def['rows']; + } + $content .= ''; + break; + + case 'hidden': + $default = ''; + if ( isset( $meta_field_def['default'] ) ) { + $default = sprintf( ' data-default="%s"', esc_attr( $meta_field_def['default'] ) ); + } + $content .= '' . "\n"; + break; + case 'select': + if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== [] ) { + $content .= ''; + } + break; + + case 'multiselect': + if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== [] ) { + + // Set $meta_value as $selected_arr. + $selected_arr = $meta_value; + + // If the multiselect field is 'meta-robots-adv' we should explode on ,. + if ( $key === 'meta-robots-adv' ) { + $selected_arr = explode( ',', $meta_value ); + } + + if ( ! is_array( $selected_arr ) ) { + $selected_arr = (array) $selected_arr; + } + + $options_count = count( $meta_field_def['options'] ); + + $content .= ''; + unset( $val, $option, $selected, $selected_arr, $options_count ); + } + break; + + case 'checkbox': + $checked = checked( $meta_value, 'on', false ); + $expl = ( isset( $meta_field_def['expl'] ) ) ? esc_html( $meta_field_def['expl'] ) : ''; + $content .= ' '; + unset( $checked, $expl ); + break; + + case 'radio': + if ( isset( $meta_field_def['options'] ) && is_array( $meta_field_def['options'] ) && $meta_field_def['options'] !== [] ) { + foreach ( $meta_field_def['options'] as $val => $option ) { + $checked = checked( $meta_value, $val, false ); + $content .= ' '; + } + unset( $val, $option, $checked ); + } + break; + + case 'upload': + $content .= ' '; + $content .= ' '; + $content .= ''; + break; + } + + $html = ''; + if ( $content === '' ) { + $content = apply_filters( 'wpseo_do_meta_box_field_' . $key, $content, $meta_value, $esc_form_key, $meta_field_def, $key ); + } + + if ( $content !== '' ) { + + $title = esc_html( $meta_field_def['title'] ); + + // By default, use the field title as a label element. + $label = ''; + + // Set the inline help and help panel, if any. + $help_button = ''; + $help_panel = ''; + if ( isset( $meta_field_def['help'] ) && $meta_field_def['help'] !== '' ) { + $help = new WPSEO_Admin_Help_Panel( $key, $meta_field_def['help-button'], $meta_field_def['help'] ); + $help_button = $help->get_button_html(); + $help_panel = $help->get_panel_html(); + } + + // If it's a set of radio buttons, output proper fieldset and legend. + if ( $meta_field_def['type'] === 'radio' ) { + return '
      ' . $title . '' . $help_button . $help_panel . $content . $description . '
      '; + } + + // If it's a single checkbox, ignore the title. + if ( $meta_field_def['type'] === 'checkbox' ) { + $label = ''; + } + + // Other meta box content or form fields. + if ( $meta_field_def['type'] === 'hidden' ) { + $html = $content; + } + else { + $html = $label . $description . $help_button . $help_panel . $content; + } + } + + return $html; + } + + /** + * Saves the WP SEO metadata for posts. + * + * {@internal $_POST parameters are validated via sanitize_post_meta().}} + * + * @param int $post_id Post ID. + * + * @return bool|void Boolean false if invalid save post request. + */ + public function save_postdata( $post_id ) { + // Bail if this is a multisite installation and the site has been switched. + if ( is_multisite() && ms_is_switched() ) { + return false; + } + + if ( $post_id === null ) { + return false; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized in wp_verify_none. + if ( ! isset( $_POST['yoast_free_metabox_nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['yoast_free_metabox_nonce'] ), 'yoast_free_metabox' ) ) { + return false; + } + + if ( wp_is_post_revision( $post_id ) ) { + $post_id = wp_is_post_revision( $post_id ); + } + + /** + * Determine we're not accidentally updating a different post. + * We can't use filter_input here as the ID isn't available at this point, other than in the $_POST data. + */ + if ( ! isset( $_POST['ID'] ) || $post_id !== (int) $_POST['ID'] ) { + return false; + } + + clean_post_cache( $post_id ); + $post = get_post( $post_id ); + + if ( ! is_object( $post ) ) { + // Non-existent post. + return false; + } + + do_action( 'wpseo_save_compare_data', $post ); + + $social_fields = []; + if ( $this->social_is_enabled ) { + $social_fields = WPSEO_Meta::get_meta_field_defs( 'social' ); + } + + $meta_boxes = apply_filters( 'wpseo_save_metaboxes', [] ); + $meta_boxes = array_merge( + $meta_boxes, + WPSEO_Meta::get_meta_field_defs( 'general', $post->post_type ), + WPSEO_Meta::get_meta_field_defs( 'advanced' ), + $social_fields, + WPSEO_Meta::get_meta_field_defs( 'schema', $post->post_type ) + ); + + foreach ( $meta_boxes as $key => $meta_box ) { + + // If analysis is disabled remove that analysis score value from the DB. + if ( $this->is_meta_value_disabled( $key ) ) { + WPSEO_Meta::delete( $key, $post_id ); + continue; + } + + $data = null; + $field_name = WPSEO_Meta::$form_prefix . $key; + + if ( $meta_box['type'] === 'checkbox' ) { + $data = isset( $_POST[ $field_name ] ) ? 'on' : 'off'; + } + else { + if ( isset( $_POST[ $field_name ] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We're preparing to do just that. + $data = wp_unslash( $_POST[ $field_name ] ); + + // For multi-select. + if ( is_array( $data ) ) { + $data = array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], $data ); + } + + if ( is_string( $data ) ) { + $data = ( $key !== 'canonical' ) ? WPSEO_Utils::sanitize_text_field( $data ) : WPSEO_Utils::sanitize_url( $data ); + } + } + + // Reset options when no entry is present with multiselect - only applies to `meta-robots-adv` currently. + if ( ! isset( $_POST[ $field_name ] ) && ( $meta_box['type'] === 'multiselect' ) ) { + $data = []; + } + } + + if ( $data !== null ) { + WPSEO_Meta::set_value( $key, $data, $post_id ); + } + } + + do_action( 'wpseo_saved_postdata' ); + } + + /** + * Determines if the given meta value key is disabled. + * + * @param string $key The key of the meta value. + * + * @return bool Whether the given meta value key is disabled. + */ + public function is_meta_value_disabled( $key ) { + if ( $key === 'linkdex' && ! $this->seo_analysis->is_enabled() ) { + return true; + } + + if ( $key === 'content_score' && ! $this->readability_analysis->is_enabled() ) { + return true; + } + + if ( $key === 'inclusive_language_score' && ! $this->inclusive_language_analysis->is_enabled() ) { + return true; + } + + return false; + } + + /** + * Enqueues all the needed JS and CSS. + * + * @todo [JRF => whomever] Create css/metabox-mp6.css file and add it to the below allowed colors array when done. + * + * @return void + */ + public function enqueue() { + global $pagenow; + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + + $is_editor = self::is_post_overview( $pagenow ) || self::is_post_edit( $pagenow ); + + if ( self::is_post_overview( $pagenow ) ) { + $asset_manager->enqueue_style( 'edit-page' ); + $asset_manager->enqueue_script( 'edit-page' ); + + return; + } + + /* Filter 'wpseo_always_register_metaboxes_on_admin' documented in wpseo-main.php */ + if ( ( $is_editor === false && apply_filters( 'wpseo_always_register_metaboxes_on_admin', false ) === false ) || $this->display_metabox() === false ) { + return; + } + + $post_id = get_queried_object_id(); + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( empty( $post_id ) && isset( $_GET['post'] ) && is_string( $_GET['post'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $post_id = sanitize_text_field( wp_unslash( $_GET['post'] ) ); + } + + if ( $post_id !== 0 ) { + // Enqueue files needed for upload functionality. + wp_enqueue_media( [ 'post' => $post_id ] ); + } + + $asset_manager->enqueue_style( 'metabox-css' ); + $asset_manager->enqueue_style( 'scoring' ); + $asset_manager->enqueue_style( 'monorepo' ); + $asset_manager->enqueue_style( 'ai-generator' ); + $asset_manager->enqueue_style( 'ai-fix-assessments' ); + + $is_block_editor = WP_Screen::get()->is_block_editor(); + $post_edit_handle = 'post-edit'; + if ( ! $is_block_editor ) { + $post_edit_handle = 'post-edit-classic'; + } + $asset_manager->enqueue_script( $post_edit_handle ); + $asset_manager->enqueue_style( 'admin-css' ); + + /** + * Removes the emoji script as it is incompatible with both React and any + * contenteditable fields. + */ + remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + + $asset_manager->localize_script( $post_edit_handle, 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() ); + + $plugins_script_data = [ + 'replaceVars' => [ + 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), + 'replace_vars' => $this->get_replace_vars(), + 'hidden_replace_vars' => $this->get_hidden_replace_vars(), + 'recommended_replace_vars' => $this->get_recommended_replace_vars(), + 'scope' => $this->determine_scope(), + 'has_taxonomies' => $this->current_post_type_has_taxonomies(), + ], + 'shortcodes' => [ + 'wpseo_shortcode_tags' => $this->get_valid_shortcode_tags(), + 'wpseo_filter_shortcodes_nonce' => wp_create_nonce( 'wpseo-filter-shortcodes' ), + ], + ]; + + $worker_script_data = [ + 'url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-analysis-worker' ), + 'dependencies' => YoastSEO()->helpers->asset->get_dependency_urls_by_handle( 'yoast-seo-analysis-worker' ), + 'keywords_assessment_url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-used-keywords-assessment' ), + 'log_level' => WPSEO_Utils::get_analysis_worker_log_level(), + ]; + + $woocommerce_conditional = new WooCommerce_Conditional(); + $woocommerce_active = $woocommerce_conditional->is_met(); + $addon_manager = new WPSEO_Addon_Manager(); + $woocommerce_seo_active = is_plugin_active( $addon_manager->get_plugin_file( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ) ); + + $script_data = [ + // @todo replace this translation with JavaScript translations. + 'media' => [ 'choose_image' => __( 'Use Image', 'wordpress-seo' ) ], + 'metabox' => $this->get_metabox_script_data(), + 'userLanguageCode' => WPSEO_Language_Utils::get_language( get_user_locale() ), + 'isPost' => true, + 'isBlockEditor' => $is_block_editor, + 'postId' => $post_id, + 'postStatus' => get_post_status( $post_id ), + 'postType' => get_post_type( $post_id ), + 'usedKeywordsNonce' => wp_create_nonce( 'wpseo-keyword-usage-and-post-types' ), + 'analysis' => [ + 'plugins' => $plugins_script_data, + 'worker' => $worker_script_data, + ], + 'isJetpackBoostActive' => ( $is_block_editor ) ? YoastSEO()->classes->get( Jetpack_Boost_Active_Conditional::class )->is_met() : false, + 'isJetpackBoostNotPremium' => ( $is_block_editor ) ? YoastSEO()->classes->get( Jetpack_Boost_Not_Premium_Conditional::class )->is_met() : false, + 'isWooCommerceSeoActive' => $woocommerce_seo_active, + 'isWooCommerceActive' => $woocommerce_active, + 'woocommerceUpsell' => get_post_type( $post_id ) === 'product' && ! $woocommerce_seo_active && $woocommerce_active, + ]; + + /** + * The website information repository. + * + * @var $repo Website_Information_Repository + */ + $repo = YoastSEO()->classes->get( Website_Information_Repository::class ); + $site_information = $repo->get_post_site_information(); + $site_information->set_permalink( $this->get_permalink() ); + $script_data = array_merge_recursive( $site_information->get_legacy_site_information(), $script_data ); + + if ( post_type_supports( get_post_type(), 'thumbnail' ) ) { + $asset_manager->enqueue_style( 'featured-image' ); + + // @todo replace this translation with JavaScript translations. + $script_data['featuredImage'] = [ + 'featured_image_notice' => __( 'SEO issue: The featured image should be at least 200 by 200 pixels to be picked up by Facebook and other social media sites.', 'wordpress-seo' ), + ]; + } + + $asset_manager->localize_script( $post_edit_handle, 'wpseoScriptData', $script_data ); + $asset_manager->enqueue_user_language_script(); + } + + /** + * Returns post in metabox context. + * + * @return WP_Post|array + */ + protected function get_metabox_post() { + if ( $this->post !== null ) { + return $this->post; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['post'] ) && is_string( $_GET['post'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, Sanitization happens in the validate_int function. + $post_id = (int) WPSEO_Utils::validate_int( wp_unslash( $_GET['post'] ) ); + + $this->post = get_post( $post_id ); + + return $this->post; + } + + if ( isset( $GLOBALS['post'] ) ) { + $this->post = $GLOBALS['post']; + + return $this->post; + } + + return []; + } + + /** + * Returns an array with shortcode tags for all registered shortcodes. + * + * @return string[] + */ + private function get_valid_shortcode_tags() { + $shortcode_tags = []; + + foreach ( $GLOBALS['shortcode_tags'] as $tag => $description ) { + $shortcode_tags[] = $tag; + } + + return $shortcode_tags; + } + + /** + * Prepares the replace vars for localization. + * + * @return string[] Replace vars. + */ + private function get_replace_vars() { + $cached_replacement_vars = []; + + $vars_to_cache = [ + 'date', + 'id', + 'sitename', + 'sitedesc', + 'sep', + 'page', + 'currentdate', + 'currentyear', + 'currentmonth', + 'currentday', + 'post_year', + 'post_month', + 'post_day', + 'name', + 'author_first_name', + 'author_last_name', + 'permalink', + 'post_content', + 'category_title', + 'tag', + 'category', + ]; + + foreach ( $vars_to_cache as $var ) { + $cached_replacement_vars[ $var ] = wpseo_replace_vars( '%%' . $var . '%%', $this->get_metabox_post() ); + } + + // Merge custom replace variables with the WordPress ones. + return array_merge( $cached_replacement_vars, $this->get_custom_replace_vars( $this->get_metabox_post() ) ); + } + + /** + * Returns the list of replace vars that should be hidden inside the editor. + * + * @return string[] The hidden replace vars. + */ + protected function get_hidden_replace_vars() { + return ( new WPSEO_Replace_Vars() )->get_hidden_replace_vars(); + } + + /** + * Prepares the recommended replace vars for localization. + * + * @return array Recommended replacement variables. + */ + private function get_recommended_replace_vars() { + $recommended_replace_vars = new WPSEO_Admin_Recommended_Replace_Vars(); + + // What is recommended depends on the current context. + $post_type = $recommended_replace_vars->determine_for_post( $this->get_metabox_post() ); + + return $recommended_replace_vars->get_recommended_replacevars_for( $post_type ); + } + + /** + * Gets the custom replace variables for custom taxonomies and fields. + * + * @param WP_Post $post The post to check for custom taxonomies and fields. + * + * @return array Array containing all the replacement variables. + */ + private function get_custom_replace_vars( $post ) { + return [ + 'custom_fields' => $this->get_custom_fields_replace_vars( $post ), + 'custom_taxonomies' => $this->get_custom_taxonomies_replace_vars( $post ), + ]; + } + + /** + * Gets the custom replace variables for custom taxonomies. + * + * @param WP_Post $post The post to check for custom taxonomies. + * + * @return array Array containing all the replacement variables. + */ + private function get_custom_taxonomies_replace_vars( $post ) { + $taxonomies = get_object_taxonomies( $post, 'objects' ); + $custom_replace_vars = []; + + foreach ( $taxonomies as $taxonomy_name => $taxonomy ) { + + if ( is_string( $taxonomy ) ) { // If attachment, see https://core.trac.wordpress.org/ticket/37368 . + $taxonomy_name = $taxonomy; + $taxonomy = get_taxonomy( $taxonomy_name ); + } + + if ( $taxonomy->_builtin && $taxonomy->public ) { + continue; + } + + $custom_replace_vars[ $taxonomy_name ] = [ + 'name' => $taxonomy->name, + 'description' => $taxonomy->description, + ]; + } + + return $custom_replace_vars; + } + + /** + * Gets the custom replace variables for custom fields. + * + * @param WP_Post $post The post to check for custom fields. + * + * @return array Array containing all the replacement variables. + */ + private function get_custom_fields_replace_vars( $post ) { + $custom_replace_vars = []; + + // If no post object is passed, return the empty custom_replace_vars array. + if ( ! is_object( $post ) ) { + return $custom_replace_vars; + } + + $custom_fields = get_post_custom( $post->ID ); + + // If $custom_fields is an empty string or generally not an array, return early. + if ( ! is_array( $custom_fields ) ) { + return $custom_replace_vars; + } + + $meta = YoastSEO()->meta->for_post( $post->ID ); + + if ( ! $meta ) { + return $custom_replace_vars; + } + + // Simply concatenate all fields containing replace vars so we can handle them all with a single regex find. + $replace_vars_fields = implode( + ' ', + [ + $meta->presentation->title, + $meta->presentation->meta_description, + ] + ); + + preg_match_all( '/%%cf_([A-Za-z0-9_]+)%%/', $replace_vars_fields, $matches ); + $fields_to_include = $matches[1]; + foreach ( $custom_fields as $custom_field_name => $custom_field ) { + // Skip private custom fields. + if ( substr( $custom_field_name, 0, 1 ) === '_' ) { + continue; + } + + // Skip custom fields that are not used, new ones will be fetched dynamically. + if ( ! in_array( $custom_field_name, $fields_to_include, true ) ) { + continue; + } + + // Skip custom field values that are serialized. + if ( is_serialized( $custom_field[0] ) ) { + continue; + } + + $custom_replace_vars[ $custom_field_name ] = $custom_field[0]; + } + + return $custom_replace_vars; + } + + /** + * Checks if the page is the post overview page. + * + * @param string $page The page to check for the post overview page. + * + * @return bool Whether or not the given page is the post overview page. + */ + public static function is_post_overview( $page ) { + return $page === 'edit.php'; + } + + /** + * Checks if the page is the post edit page. + * + * @param string $page The page to check for the post edit page. + * + * @return bool Whether or not the given page is the post edit page. + */ + public static function is_post_edit( $page ) { + return $page === 'post.php' + || $page === 'post-new.php'; + } + + /** + * Retrieves the product title. + * + * @return string The product title. + */ + protected function get_product_title() { + return YoastSEO()->helpers->product->get_product_name(); + } + + /** + * Gets the permalink. + * + * @return string + */ + protected function get_permalink() { + $permalink = ''; + + if ( is_object( $this->get_metabox_post() ) ) { + $permalink = get_sample_permalink( $this->get_metabox_post()->ID ); + $permalink = $permalink[0]; + } + + return $permalink; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php b/wp/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php new file mode 100644 index 00000000..756ca97d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/metabox/interface-metabox-analysis.php @@ -0,0 +1,33 @@ +get_listener_value() !== $this->notification_identifier ) { + return; + } + + $this->dismiss(); + } + + /** + * Adds the notification if applicable, otherwise removes it. + * + * @param Yoast_Notification_Center $notification_center The notification center object. + * + * @return void + */ + public function handle( Yoast_Notification_Center $notification_center ) { + if ( $this->is_applicable() ) { + $notification = $this->get_notification(); + $notification_center->add_notification( $notification ); + + return; + } + + $notification_center->remove_notification_by_id( 'wpseo-' . $this->notification_identifier ); + } + + /** + * Listens to an argument in the request URL and triggers an action. + * + * @return void + */ + protected function dismiss() { + $this->set_dismissal_state(); + $this->redirect_to_dashboard(); + } + + /** + * Checks if a notice is applicable. + * + * @return bool Whether a notice should be shown or not. + */ + protected function is_applicable() { + return $this->is_notice_dismissed() === false; + } + + /** + * Checks whether the notification has been dismissed. + * + * @codeCoverageIgnore + * + * @return bool True when notification is dismissed. + */ + protected function is_notice_dismissed() { + return get_user_meta( get_current_user_id(), 'wpseo-remove-' . $this->notification_identifier, true ) === '1'; + } + + /** + * Retrieves the value where listener is listening for. + * + * @codeCoverageIgnore + * + * @return string|null The listener value or null if not set. + */ + protected function get_listener_value() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: Normally we would need to check for a nonce here but this class is not used anymore. + if ( isset( $_GET['yoast_dismiss'] ) && is_string( $_GET['yoast_dismiss'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: Normally we would need to check for a nonce here but this class is not used anymore. + return sanitize_text_field( wp_unslash( $_GET['yoast_dismiss'] ) ); + } + return null; + } + + /** + * Dismisses the notification. + * + * @codeCoverageIgnore + * + * @return void + */ + protected function set_dismissal_state() { + update_user_meta( get_current_user_id(), 'wpseo-remove-' . $this->notification_identifier, true ); + } + + /** + * Redirects the user back to the dashboard. + * + * @codeCoverageIgnore + * + * @return void + */ + protected function redirect_to_dashboard() { + wp_safe_redirect( admin_url( 'admin.php?page=wpseo_dashboard' ) ); + exit; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/notifiers/interface-notification-handler.php b/wp/wp-content/plugins/wordpress-seo/admin/notifiers/interface-notification-handler.php new file mode 100644 index 00000000..f798a586 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/notifiers/interface-notification-handler.php @@ -0,0 +1,21 @@ +admin_header( true, 'wpseo' ); + +do_action( 'wpseo_all_admin_notices' ); + +$dashboard_tabs = new WPSEO_Option_Tabs( 'dashboard' ); +$dashboard_tabs->add_tab( + new WPSEO_Option_Tab( + 'dashboard', + __( 'Dashboard', 'wordpress-seo' ), + [ + 'save_button' => false, + ] + ) +); + +/** + * Allows the addition of tabs to the dashboard by calling $dashboard_tabs->add_tab(). + */ +do_action( 'wpseo_settings_tabs_dashboard', $dashboard_tabs ); + +$dashboard_tabs->display( $yform ); + +do_action( 'wpseo_dashboard' ); + +$yform->admin_footer(); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/pages/licenses.php b/wp/wp-content/plugins/wordpress-seo/admin/pages/licenses.php new file mode 100644 index 00000000..fb713cdc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/pages/licenses.php @@ -0,0 +1,15 @@ +admin_header( true, 'wpseo_ms' ); + +$network_tabs = new WPSEO_Option_Tabs( 'network' ); +$network_tabs->add_tab( new WPSEO_Option_Tab( 'general', __( 'General', 'wordpress-seo' ) ) ); +$network_tabs->add_tab( new WPSEO_Option_Tab( 'features', __( 'Features', 'wordpress-seo' ) ) ); +$network_tabs->add_tab( new WPSEO_Option_Tab( 'integrations', __( 'Integrations', 'wordpress-seo' ) ) ); + +$network_tabs->add_tab( + new WPSEO_Option_Tab( + 'crawl-settings', + __( 'Crawl settings', 'wordpress-seo' ), + [ + 'save_button' => true, + ] + ) +); +$network_tabs->add_tab( new WPSEO_Option_Tab( 'restore-site', __( 'Restore Site', 'wordpress-seo' ), [ 'save_button' => false ] ) ); +$network_tabs->display( $yform ); + +$yform->admin_footer(); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/pages/redirects.php b/wp/wp-content/plugins/wordpress-seo/admin/pages/redirects.php new file mode 100644 index 00000000..52acbc33 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/pages/redirects.php @@ -0,0 +1,15 @@ +admin_header( false ); + +if ( $tool_page === '' ) { + + $tools = []; + + $tools['import-export'] = [ + 'title' => __( 'Import and Export', 'wordpress-seo' ), + 'desc' => __( 'Import settings from other SEO plugins and export your settings for re-use on (another) site.', 'wordpress-seo' ), + ]; + + if ( WPSEO_Utils::allow_system_file_edit() === true && ! is_multisite() ) { + $tools['file-editor'] = [ + 'title' => __( 'File editor', 'wordpress-seo' ), + 'desc' => __( 'This tool allows you to quickly change important files for your SEO, like your robots.txt and, if you have one, your .htaccess file.', 'wordpress-seo' ), + ]; + } + + $tools['bulk-editor'] = [ + 'title' => __( 'Bulk editor', 'wordpress-seo' ), + 'desc' => __( 'This tool allows you to quickly change titles and descriptions of your posts and pages without having to go into the editor for each page.', 'wordpress-seo' ), + ]; + + echo '

      '; + printf( + /* translators: %1$s expands to Yoast SEO */ + esc_html__( '%1$s comes with some very powerful built-in tools:', 'wordpress-seo' ), + 'Yoast SEO' + ); + echo '

      '; + + echo '
        '; + + $admin_url = admin_url( 'admin.php?page=wpseo_tools' ); + + foreach ( $tools as $slug => $tool ) { + $href = ( ! empty( $tool['href'] ) ) ? $admin_url . $tool['href'] : add_query_arg( [ 'tool' => $slug ], $admin_url ); + $attr = ( ! empty( $tool['attr'] ) ) ? $tool['attr'] : ''; + + echo '
      • '; + echo '', esc_html( $tool['title'] ), '
        '; + echo esc_html( $tool['desc'] ); + echo '
      • '; + } + + /** + * WARNING: This hook is intended for internal use only. + * Don't use it in your code as it will be removed shortly. + */ + do_action( 'wpseo_tools_overview_list_items_internal' ); + + echo '
      '; +} +else { + echo '', esc_html__( '« Back to Tools page', 'wordpress-seo' ), ''; + + $tool_pages = [ 'bulk-editor', 'import-export' ]; + + if ( WPSEO_Utils::allow_system_file_edit() === true && ! is_multisite() ) { + $tool_pages[] = 'file-editor'; + } + + if ( in_array( $tool_page, $tool_pages, true ) ) { + require_once WPSEO_PATH . 'admin/views/tool-' . $tool_page . '.php'; + } +} + +$yform->admin_footer( false ); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/roles/class-abstract-role-manager.php b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-abstract-role-manager.php new file mode 100644 index 00000000..39edad49 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-abstract-role-manager.php @@ -0,0 +1,149 @@ +roles[ $role ] = (object) [ + 'display_name' => $display_name, + 'template' => $template, + ]; + } + + /** + * Returns the list of registered roles. + * + * @return string[] List or registered roles. + */ + public function get_roles() { + return array_keys( $this->roles ); + } + + /** + * Adds the registered roles. + * + * @return void + */ + public function add() { + foreach ( $this->roles as $role => $data ) { + $capabilities = $this->get_capabilities( $data->template ); + $capabilities = $this->filter_existing_capabilties( $role, $capabilities ); + + $this->add_role( $role, $data->display_name, $capabilities ); + } + } + + /** + * Removes the registered roles. + * + * @return void + */ + public function remove() { + $roles = array_keys( $this->roles ); + array_map( [ $this, 'remove_role' ], $roles ); + } + + /** + * Returns the capabilities for the specified role. + * + * @param string $role Role to fetch capabilities from. + * + * @return array List of capabilities. + */ + protected function get_capabilities( $role ) { + if ( ! is_string( $role ) || empty( $role ) ) { + return []; + } + + $wp_role = get_role( $role ); + if ( ! $wp_role ) { + return []; + } + + return $wp_role->capabilities; + } + + /** + * Returns true if the capability exists on the role. + * + * @param WP_Role $role Role to check capability against. + * @param string $capability Capability to check. + * + * @return bool True if the capability is defined for the role. + */ + protected function capability_exists( WP_Role $role, $capability ) { + return ! array_key_exists( $capability, $role->capabilities ); + } + + /** + * Filters out capabilities that are already set for the role. + * + * This makes sure we don't override configurations that have been previously set. + * + * @param string $role The role to check against. + * @param array $capabilities The capabilities that should be set. + * + * @return array Capabilties that can be safely set. + */ + protected function filter_existing_capabilties( $role, array $capabilities ) { + if ( $capabilities === [] ) { + return $capabilities; + } + + $wp_role = get_role( $role ); + if ( ! $wp_role ) { + return $capabilities; + } + + foreach ( $capabilities as $capability => $grant ) { + if ( $this->capability_exists( $wp_role, $capability ) ) { + unset( $capabilities[ $capability ] ); + } + } + + return $capabilities; + } + + /** + * Adds a role to the system. + * + * @param string $role Role to add. + * @param string $display_name Name to display for the role. + * @param array $capabilities Capabilities to add to the role. + * + * @return void + */ + abstract protected function add_role( $role, $display_name, array $capabilities = [] ); + + /** + * Removes a role from the system. + * + * @param string $role Role to remove. + * + * @return void + */ + abstract protected function remove_role( $role ); +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/roles/class-register-roles.php b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-register-roles.php new file mode 100644 index 00000000..9636237e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-register-roles.php @@ -0,0 +1,33 @@ +register( 'wpseo_manager', 'SEO Manager', 'editor' ); + $role_manager->register( 'wpseo_editor', 'SEO Editor', 'editor' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager-factory.php b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager-factory.php new file mode 100644 index 00000000..d22753a2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager-factory.php @@ -0,0 +1,27 @@ + $grant ) { + $wp_role->add_cap( $capability, $grant ); + } + + return; + } + + add_role( $role, $display_name, $capabilities ); + } + + /** + * Removes a role from the system. + * + * @param string $role Role to remove. + * + * @return void + */ + protected function remove_role( $role ) { + remove_role( $role ); + } + + /** + * Formats the capabilities to the required format. + * + * @param array $capabilities Capabilities to format. + * @param bool $enabled Whether these capabilities should be enabled or not. + * + * @return array Formatted capabilities. + */ + protected function format_capabilities( array $capabilities, $enabled = true ) { + // Flip keys and values. + $capabilities = array_flip( $capabilities ); + + // Set all values to $enabled. + return array_fill_keys( array_keys( $capabilities ), $enabled ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager.php b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager.php new file mode 100644 index 00000000..7f9d82bb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/roles/class-role-manager.php @@ -0,0 +1,44 @@ +get_file_url( $request ); + + return new WP_REST_Response( + [ + 'type' => 'success', + 'size_in_bytes' => $this->get_file_size( $file_url ), + ], + 200 + ); + } + catch ( WPSEO_File_Size_Exception $exception ) { + return new WP_REST_Response( + [ + 'type' => 'failure', + 'response' => $exception->getMessage(), + ], + 404 + ); + } + } + + /** + * Retrieves the file url. + * + * @param WP_REST_Request $request The request to retrieve file url from. + * + * @return string The file url. + * @throws WPSEO_File_Size_Exception The file is hosted externally. + */ + protected function get_file_url( WP_REST_Request $request ) { + $file_url = rawurldecode( $request->get_param( 'url' ) ); + + if ( ! $this->is_externally_hosted( $file_url ) ) { + return $file_url; + } + + throw WPSEO_File_Size_Exception::externally_hosted( $file_url ); + } + + /** + * Checks if the file is hosted externally. + * + * @param string $file_url The file url. + * + * @return bool True if it is hosted externally. + */ + protected function is_externally_hosted( $file_url ) { + return wp_parse_url( home_url(), PHP_URL_HOST ) !== wp_parse_url( $file_url, PHP_URL_HOST ); + } + + /** + * Returns the file size. + * + * @param string $file_url The file url to get the size for. + * + * @return int The file size. + * @throws WPSEO_File_Size_Exception Retrieval of file size went wrong for unknown reasons. + */ + protected function get_file_size( $file_url ) { + $file_config = wp_upload_dir(); + $file_url = str_replace( $file_config['baseurl'], '', $file_url ); + $file_size = $this->calculate_file_size( $file_url ); + + if ( ! $file_size ) { + throw WPSEO_File_Size_Exception::unknown_error( $file_url ); + } + + return $file_size; + } + + /** + * Calculates the file size using the Utils class. + * + * @param string $file_url The file to retrieve the size for. + * + * @return int|bool The file size or False if it could not be retrieved. + */ + protected function calculate_file_size( $file_url ) { + return WPSEO_Image_Utils::get_file_size( + [ + 'path' => $file_url, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/statistics/class-statistics-integration.php b/wp/wp-content/plugins/wordpress-seo/admin/statistics/class-statistics-integration.php new file mode 100644 index 00000000..756f314c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/statistics/class-statistics-integration.php @@ -0,0 +1,36 @@ +statistics = $statistics; + } + + /** + * Fetches statistics by REST request. + * + * @return WP_REST_Response The response object. + */ + public function get_statistics() { + // Switch to the user locale with fallback to the site locale. + switch_to_locale( get_user_locale() ); + + $this->labels = $this->labels(); + $statistics = $this->statistic_items(); + + $data = [ + 'header' => $this->get_header_from_statistics( $statistics ), + 'seo_scores' => $statistics['scores'], + ]; + + return new WP_REST_Response( $data ); + } + + /** + * Gets a header summarizing the given statistics results. + * + * @param array $statistics The statistics results. + * + * @return string The header summing up the statistics results. + */ + private function get_header_from_statistics( array $statistics ) { + // Personal interpretation to allow release, should be looked at later. + if ( $statistics['division'] === false ) { + return __( 'You don\'t have any published posts, your SEO scores will appear here once you make your first post!', 'wordpress-seo' ); + } + + if ( $statistics['division']['good'] > 0.66 ) { + return __( 'Hey, your SEO is doing pretty well! Check out the stats:', 'wordpress-seo' ); + } + + return __( 'Below are your published posts\' SEO scores. Now is as good a time as any to start improving some of your posts!', 'wordpress-seo' ); + } + + /** + * An array representing items to be added to the At a Glance dashboard widget. + * + * @return array The statistics for the current user. + */ + private function statistic_items() { + $transient = $this->get_transient(); + $user_id = get_current_user_id(); + + if ( isset( $transient[ $user_id ] ) ) { + return $transient[ $user_id ]; + } + + return $this->set_statistic_items_for_user( $transient, $user_id ); + } + + /** + * Gets the statistics transient value. Returns array if transient wasn't set. + * + * @return array|mixed Returns the transient or an empty array if the transient doesn't exist. + */ + private function get_transient() { + $transient = get_transient( self::CACHE_TRANSIENT_KEY ); + + if ( $transient === false ) { + return []; + } + + return $transient; + } + + /** + * Set the statistics transient cache for a specific user. + * + * @param array $transient The current stored transient with the cached data. + * @param int $user The user's ID to assign the retrieved values to. + * + * @return array The statistics transient for the user. + */ + private function set_statistic_items_for_user( $transient, $user ) { + $scores = $this->get_seo_scores_with_post_count(); + $division = $this->get_seo_score_division( $scores ); + + $transient[ $user ] = [ + // Use array_values because array_filter may return non-zero indexed arrays. + 'scores' => array_values( array_filter( $scores, [ $this, 'filter_items' ] ) ), + 'division' => $division, + ]; + + set_transient( self::CACHE_TRANSIENT_KEY, $transient, DAY_IN_SECONDS ); + + return $transient[ $user ]; + } + + /** + * Gets the division of SEO scores. + * + * @param array $scores The SEO scores. + * + * @return array|bool The division of SEO scores, false if there are no posts. + */ + private function get_seo_score_division( array $scores ) { + $total = 0; + $division = []; + + foreach ( $scores as $score ) { + $total += $score['count']; + } + + if ( $total === 0 ) { + return false; + } + + foreach ( $scores as $score ) { + $division[ $score['seo_rank'] ] = ( $score['count'] / $total ); + } + + return $division; + } + + /** + * Get all SEO ranks and data associated with them. + * + * @return array An array of SEO scores and associated data. + */ + private function get_seo_scores_with_post_count() { + $ranks = WPSEO_Rank::get_all_ranks(); + + return array_map( [ $this, 'map_rank_to_widget' ], $ranks ); + } + + /** + * Converts a rank to data usable in the dashboard widget. + * + * @param WPSEO_Rank $rank The rank to map. + * + * @return array The mapped rank. + */ + private function map_rank_to_widget( WPSEO_Rank $rank ) { + return [ + 'seo_rank' => $rank->get_rank(), + 'label' => $this->get_label_for_rank( $rank ), + 'count' => $this->statistics->get_post_count( $rank ), + 'link' => $this->get_link_for_rank( $rank ), + ]; + } + + /** + * Returns a dashboard widget label to use for a certain rank. + * + * @param WPSEO_Rank $rank The rank to return a label for. + * + * @return string The label for the rank. + */ + private function get_label_for_rank( WPSEO_Rank $rank ) { + return $this->labels[ $rank->get_rank() ]; + } + + /** + * Determines the labels for the various scoring ranks that are known within Yoast SEO. + * + * @return array Array containing the translatable labels. + */ + private function labels() { + return [ + WPSEO_Rank::NO_FOCUS => sprintf( + /* translators: %1$s expands to an opening strong tag, %2$s expands to a closing strong tag */ + __( 'Posts %1$swithout%2$s a focus keyphrase', 'wordpress-seo' ), + '', + '' + ), + WPSEO_Rank::BAD => sprintf( + /* translators: %s expands to the score */ + __( 'Posts with the SEO score: %s', 'wordpress-seo' ), + '' . __( 'Needs improvement', 'wordpress-seo' ) . '' + ), + WPSEO_Rank::OK => sprintf( + /* translators: %s expands to the score */ + __( 'Posts with the SEO score: %s', 'wordpress-seo' ), + '' . __( 'OK', 'wordpress-seo' ) . '' + ), + WPSEO_Rank::GOOD => sprintf( + /* translators: %s expands to the score */ + __( 'Posts with the SEO score: %s', 'wordpress-seo' ), + '' . __( 'Good', 'wordpress-seo' ) . '' + ), + WPSEO_Rank::NO_INDEX => __( 'Posts that should not show up in search results', 'wordpress-seo' ), + ]; + } + + /** + * Filter items if they have a count of zero. + * + * @param array $item The item to potentially filter out. + * + * @return bool Whether or not the count is zero. + */ + private function filter_items( $item ) { + return $item['count'] !== 0; + } + + /** + * Returns a link for the overview of posts of a certain rank. + * + * @param WPSEO_Rank $rank The rank to return a link for. + * + * @return string The link that shows an overview of posts with that rank. + */ + private function get_link_for_rank( WPSEO_Rank $rank ) { + if ( current_user_can( 'edit_others_posts' ) === false ) { + return esc_url( admin_url( 'edit.php?post_status=publish&post_type=post&seo_filter=' . $rank->get_rank() . '&author=' . get_current_user_id() ) ); + } + + return esc_url( admin_url( 'edit.php?post_status=publish&post_type=post&seo_filter=' . $rank->get_rank() ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php new file mode 100644 index 00000000..fda2f19c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-columns.php @@ -0,0 +1,231 @@ +taxonomy = $this->get_taxonomy(); + + if ( ! empty( $this->taxonomy ) ) { + add_filter( 'manage_edit-' . $this->taxonomy . '_columns', [ $this, 'add_columns' ] ); + add_filter( 'manage_' . $this->taxonomy . '_custom_column', [ $this, 'parse_column' ], 10, 3 ); + } + + $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + $this->indexable_repository = YoastSEO()->classes->get( Indexable_Repository::class ); + $this->score_icon_helper = YoastSEO()->helpers->score_icon; + } + + /** + * Adds an SEO score column to the terms table, right after the description column. + * + * @param array $columns Current set columns. + * + * @return array + */ + public function add_columns( array $columns ) { + if ( $this->display_metabox( $this->taxonomy ) === false ) { + return $columns; + } + + $new_columns = []; + + foreach ( $columns as $column_name => $column_value ) { + $new_columns[ $column_name ] = $column_value; + + if ( $column_name === 'description' && $this->analysis_seo->is_enabled() ) { + $new_columns['wpseo-score'] = '' + . __( 'SEO score', 'wordpress-seo' ) . ''; + } + + if ( $column_name === 'description' && $this->analysis_readability->is_enabled() ) { + $new_columns['wpseo-score-readability'] = '' + . __( 'Readability score', 'wordpress-seo' ) . ''; + } + } + + return $new_columns; + } + + /** + * Parses the column. + * + * @param string $content The current content of the column. + * @param string $column_name The name of the column. + * @param int $term_id ID of requested taxonomy. + * + * @return string + */ + public function parse_column( $content, $column_name, $term_id ) { + + switch ( $column_name ) { + case 'wpseo-score': + return $this->get_score_value( $term_id ); + + case 'wpseo-score-readability': + return $this->get_score_readability_value( $term_id ); + } + + return $content; + } + + /** + * Retrieves the taxonomy from the $_GET or $_POST variable. + * + * @return string|null The current taxonomy or null when it is not set. + */ + public function get_current_taxonomy() { + // phpcs:disable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( ! empty( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) { + if ( isset( $_POST['taxonomy'] ) && is_string( $_POST['taxonomy'] ) ) { + return sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ); + } + } + elseif ( isset( $_GET['taxonomy'] ) && is_string( $_GET['taxonomy'] ) ) { + return sanitize_text_field( wp_unslash( $_GET['taxonomy'] ) ); + } + // phpcs:enable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended + return null; + } + + /** + * Returns the posted/get taxonomy value if it is set. + * + * @return string|null + */ + private function get_taxonomy() { + // phpcs:disable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( wp_doing_ajax() ) { + if ( isset( $_POST['taxonomy'] ) && is_string( $_POST['taxonomy'] ) ) { + return sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ); + } + } + elseif ( isset( $_GET['taxonomy'] ) && is_string( $_GET['taxonomy'] ) ) { + return sanitize_text_field( wp_unslash( $_GET['taxonomy'] ) ); + } + // phpcs:enable WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended + return null; + } + + /** + * Parses the value for the score column. + * + * @param int $term_id ID of requested term. + * + * @return string + */ + private function get_score_value( $term_id ) { + $indexable = $this->indexable_repository->find_by_id_and_type( (int) $term_id, 'term' ); + + return $this->score_icon_helper->for_seo( $indexable, '', __( 'Term is set to noindex.', 'wordpress-seo' ) ); + } + + /** + * Parses the value for the readability score column. + * + * @param int $term_id ID of the requested term. + * + * @return string The HTML for the readability score indicator. + */ + private function get_score_readability_value( $term_id ) { + $score = (int) WPSEO_Taxonomy_Meta::get_term_meta( $term_id, $this->taxonomy, 'content_score' ); + + return $this->score_icon_helper->for_readability( $score ); + } + + /** + * Check if the taxonomy is indexable. + * + * @param mixed $term The current term. + * + * @return bool Whether the term is indexable. + */ + private function is_indexable( $term ) { + // When the no_index value is not empty and not default, check if its value is index. + $no_index = WPSEO_Taxonomy_Meta::get_term_meta( $term->term_id, $this->taxonomy, 'noindex' ); + + // Check if the default for taxonomy is empty (this will be index). + if ( ! empty( $no_index ) && $no_index !== 'default' ) { + return ( $no_index === 'index' ); + } + + if ( is_object( $term ) ) { + $no_index_key = 'noindex-tax-' . $term->taxonomy; + + // If the option is false, this means we want to index it. + return WPSEO_Options::get( $no_index_key, false ) === false; + } + + return true; + } + + /** + * Wraps the WPSEO_Metabox check to determine whether the metabox should be displayed either by + * choice of the admin or because the taxonomy is not public. + * + * @since 7.0 + * + * @param string|null $taxonomy Optional. The taxonomy to test, defaults to the current taxonomy. + * + * @return bool Whether the meta box (and associated columns etc) should be hidden. + */ + private function display_metabox( $taxonomy = null ) { + $current_taxonomy = $this->get_current_taxonomy(); + + if ( ! isset( $taxonomy ) && ! empty( $current_taxonomy ) ) { + $taxonomy = $current_taxonomy; + } + + return WPSEO_Utils::is_metabox_active( $taxonomy, 'taxonomy' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php new file mode 100644 index 00000000..9ab28b0c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields-presenter.php @@ -0,0 +1,221 @@ +tax_meta = WPSEO_Taxonomy_Meta::get_term_meta( (int) $term->term_id, $term->taxonomy ); + } + + /** + * Displaying the form fields. + * + * @param array $fields Array with the fields that will be displayed. + * + * @return string + */ + public function html( array $fields ) { + $content = ''; + foreach ( $fields as $field_name => $field_configuration ) { + $content .= $this->form_row( 'wpseo_' . $field_name, $field_configuration ); + } + return $content; + } + + /** + * Create a row in the form table. + * + * @param string $field_name Variable the row controls. + * @param array $field_configuration Array with the field configuration. + * + * @return string + */ + private function form_row( $field_name, array $field_configuration ) { + $esc_field_name = esc_attr( $field_name ); + + $options = (array) $field_configuration['options']; + + if ( ! empty( $field_configuration['description'] ) ) { + $options['description'] = $field_configuration['description']; + } + + $label = $this->get_label( $field_configuration['label'], $esc_field_name ); + $field = $this->get_field( $field_configuration['type'], $esc_field_name, $this->get_field_value( $field_name ), $options ); + $help_content = ( $field_configuration['options']['help'] ?? '' ); + $help_button_text = ( $field_configuration['options']['help-button'] ?? '' ); + $help = new WPSEO_Admin_Help_Panel( $field_name, $help_button_text, $help_content ); + + return $this->parse_row( $label, $help, $field ); + } + + /** + * Generates the html for the given field config. + * + * @param string $field_type The fieldtype, e.g: text, checkbox, etc. + * @param string $field_name The name of the field. + * @param string $field_value The value of the field. + * @param array $options Array with additional options. + * + * @return string + */ + private function get_field( $field_type, $field_name, $field_value, array $options ) { + + $class = $this->get_class( $options ); + $field = ''; + $description = ''; + $aria_describedby = ''; + + if ( ! empty( $options['description'] ) ) { + $aria_describedby = ' aria-describedby="' . $field_name . '-desc"'; + $description = '

      ' . $options['description'] . '

      '; + } + + switch ( $field_type ) { + case 'div': + $field .= '
      '; + break; + case 'url': + $field .= ''; + break; + case 'text': + $field .= ''; + break; + case 'checkbox': + $field .= ''; + break; + case 'textarea': + $rows = 3; + if ( ! empty( $options['rows'] ) ) { + $rows = $options['rows']; + } + $field .= ''; + break; + case 'upload': + $field .= ' '; + $field .= ' '; + $field .= ''; + break; + case 'select': + if ( is_array( $options ) && $options !== [] ) { + $field .= ''; + } + break; + case 'hidden': + $field .= ''; + break; + } + + return $field . $description; + } + + /** + * Getting the value for given field_name. + * + * @param string $field_name The fieldname to get the value for. + * + * @return string + */ + private function get_field_value( $field_name ) { + if ( isset( $this->tax_meta[ $field_name ] ) && $this->tax_meta[ $field_name ] !== '' ) { + return $this->tax_meta[ $field_name ]; + } + + return ''; + } + + /** + * Getting the class attributes if $options contains a class key. + * + * @param array $options The array with field options. + * + * @return string + */ + private function get_class( array $options ) { + if ( ! empty( $options['class'] ) ) { + return ' class="' . esc_attr( $options['class'] ) . '"'; + } + + return ''; + } + + /** + * Getting the label HTML. + * + * @param string $label The label value. + * @param string $field_name The target field. + * + * @return string + */ + private function get_label( $label, $field_name ) { + if ( $label !== '' ) { + return ''; + } + + return ''; + } + + /** + * Returns the HTML for the row which contains label, help and the field. + * + * @param string $label The html for the label if there was a label set. + * @param WPSEO_Admin_Help_Panel $help The help panel to render in this row. + * @param string $field The html for the field. + * + * @return string + */ + private function parse_row( $label, WPSEO_Admin_Help_Panel $help, $field ) { + if ( $label !== '' || $help !== '' ) { + return $label . $help->get_button_html() . $help->get_panel_html() . $field; + } + + return $field; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php new file mode 100644 index 00000000..9da698ef --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-fields.php @@ -0,0 +1,235 @@ +get_content_fields(); + break; + case 'settings': + $fields = $this->get_settings_fields(); + break; + case 'social': + $fields = $this->get_social_fields(); + break; + } + + return $this->filter_hidden_fields( $fields ); + } + + /** + * Returns array with the fields for the general tab. + * + * @return array + */ + protected function get_content_fields() { + $fields = [ + 'title' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'desc' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'linkdex' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'content_score' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'inclusive_language_score' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'focuskw' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'is_cornerstone' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + ]; + + /** + * Filter: 'wpseo_taxonomy_content_fields' - Adds the possibility to register additional content fields. + * + * @param array $additional_fields The additional fields. + */ + $additional_fields = apply_filters( 'wpseo_taxonomy_content_fields', [] ); + + return array_merge( $fields, $additional_fields ); + } + + /** + * Returns array with the fields for the settings tab. + * + * @return array + */ + protected function get_settings_fields() { + return [ + 'noindex' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'bctitle' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => ( WPSEO_Options::get( 'breadcrumbs-enable' ) !== true ), + ], + 'canonical' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + ]; + } + + /** + * Returning the fields for the social media tab. + * + * @return array + */ + protected function get_social_fields() { + $fields = []; + + if ( WPSEO_Options::get( 'opengraph', false ) === true ) { + $fields = [ + 'opengraph-title' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'opengraph-description' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'opengraph-image' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'opengraph-image-id' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + ]; + } + + if ( WPSEO_Options::get( 'twitter', false ) === true ) { + $fields = array_merge( + $fields, + [ + 'twitter-title' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'twitter-description' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'twitter-image' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + 'twitter-image-id' => [ + 'label' => '', + 'description' => '', + 'type' => 'hidden', + 'options' => '', + 'hide' => false, + ], + ] + ); + } + + return $fields; + } + + /** + * Filter the hidden fields. + * + * @param array $fields Array with the form fields that has will be filtered. + * + * @return array + */ + protected function filter_hidden_fields( array $fields ) { + foreach ( $fields as $field_name => $field_options ) { + if ( ! empty( $field_options['hide'] ) ) { + unset( $fields[ $field_name ] ); + } + } + + return $fields; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php new file mode 100644 index 00000000..d7b1fff6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy-metabox.php @@ -0,0 +1,229 @@ +term = $term; + $this->taxonomy = $taxonomy; + $this->is_social_enabled = WPSEO_Options::get( 'opengraph', false ) || WPSEO_Options::get( 'twitter', false ); + + $this->seo_analysis = new WPSEO_Metabox_Analysis_SEO(); + $this->readability_analysis = new WPSEO_Metabox_Analysis_Readability(); + $this->inclusive_language_analysis = new WPSEO_Metabox_Analysis_Inclusive_Language(); + } + + /** + * Shows the Yoast SEO metabox for the term. + * + * @return void + */ + public function display() { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $this->get_product_title() returns a hard-coded string. + printf( '

      %1$s

      ', $this->get_product_title() ); + + echo '
      '; + echo '
      '; + + $this->render_hidden_fields(); + $this->render_tabs(); + + echo '
      '; + echo '
      '; + } + + /** + * Renders the metabox hidden fields. + * + * @return void + */ + protected function render_hidden_fields() { + $fields_presenter = new WPSEO_Taxonomy_Fields_Presenter( $this->term ); + $field_definitions = new WPSEO_Taxonomy_Fields(); + + echo $fields_presenter->html( $field_definitions->get( 'content' ) ); + if ( WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) || WPSEO_Options::get( 'disableadvanced_meta' ) === false ) { + echo $fields_presenter->html( $field_definitions->get( 'settings' ) ); + } + + if ( $this->is_social_enabled ) { + echo $fields_presenter->html( $field_definitions->get( 'social' ) ); + } + } + + /** + * Renders the metabox tabs. + * + * @return void + */ + protected function render_tabs() { + echo '
      '; + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $this->get_product_title() returns a hard-coded string. + printf( '
        ', $this->get_product_title() ); + + $tabs = $this->get_tabs(); + + foreach ( $tabs as $tab ) { + $tab->display_link(); + } + + echo '
      '; + + foreach ( $tabs as $tab ) { + $tab->display_content(); + } + + echo '
      '; + } + + /** + * Returns the relevant metabox sections for the current view. + * + * @return WPSEO_Metabox_Section[] + */ + private function get_tabs() { + $tabs = []; + + $label = __( 'SEO', 'wordpress-seo' ); + if ( $this->seo_analysis->is_enabled() ) { + $label = '' . $label; + } + + $tabs[] = new WPSEO_Metabox_Section_React( 'content', $label ); + + if ( $this->readability_analysis->is_enabled() ) { + $tabs[] = new WPSEO_Metabox_Section_Readability(); + } + + if ( $this->inclusive_language_analysis->is_enabled() ) { + $tabs[] = new WPSEO_Metabox_Section_Inclusive_Language(); + } + + if ( $this->is_social_enabled ) { + $tabs[] = new WPSEO_Metabox_Section_React( + 'social', + '' . __( 'Social', 'wordpress-seo' ), + '', + [ + 'html_after' => '
      ', + ] + ); + } + + $tabs = array_merge( $tabs, $this->get_additional_tabs() ); + + return $tabs; + } + + /** + * Returns the metabox tabs that have been added by other plugins. + * + * @return WPSEO_Metabox_Section_Additional[] + */ + protected function get_additional_tabs() { + $tabs = []; + + /** + * Private filter: 'yoast_free_additional_taxonomy_metabox_sections'. + * + * Meant for internal use only. Allows adding additional tabs to the Yoast SEO metabox for taxonomies. + * + * @param array[] $tabs { + * An array of arrays with tab specifications. + * + * @type array $tab { + * A tab specification. + * + * @type string $name The name of the tab. Used in the HTML IDs, href and aria properties. + * @type string $link_content The content of the tab link. + * @type string $content The content of the tab. + * @type array $options { + * Optional. Extra options. + * + * @type string $link_class Optional. The class for the tab link. + * @type string $link_aria_label Optional. The aria label of the tab link. + * } + * } + * } + */ + $requested_tabs = apply_filters( 'yoast_free_additional_taxonomy_metabox_sections', [] ); + + foreach ( $requested_tabs as $tab ) { + if ( is_array( $tab ) && array_key_exists( 'name', $tab ) && array_key_exists( 'link_content', $tab ) && array_key_exists( 'content', $tab ) ) { + $options = array_key_exists( 'options', $tab ) ? $tab['options'] : []; + $tabs[] = new WPSEO_Metabox_Section_Additional( + $tab['name'], + $tab['link_content'], + $tab['content'], + $options + ); + } + } + + return $tabs; + } + + /** + * Retrieves the product title. + * + * @return string The product title. + */ + protected function get_product_title() { + return YoastSEO()->helpers->product->get_product_name(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php new file mode 100644 index 00000000..41edb10c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/taxonomy/class-taxonomy.php @@ -0,0 +1,492 @@ +taxonomy = $this::get_taxonomy(); + + add_action( 'edit_term', [ $this, 'update_term' ], 99, 3 ); + add_action( 'init', [ $this, 'custom_category_descriptions_allow_html' ] ); + add_action( 'admin_init', [ $this, 'admin_init' ] ); + + if ( self::is_term_overview( $GLOBALS['pagenow'] ) ) { + new WPSEO_Taxonomy_Columns(); + } + $this->analysis_seo = new WPSEO_Metabox_Analysis_SEO(); + $this->analysis_readability = new WPSEO_Metabox_Analysis_Readability(); + $this->analysis_inclusive_language = new WPSEO_Metabox_Analysis_Inclusive_Language(); + } + + /** + * Add hooks late enough for taxonomy object to be available for checks. + * + * @return void + */ + public function admin_init() { + + $taxonomy = get_taxonomy( $this->taxonomy ); + + if ( empty( $taxonomy ) || empty( $taxonomy->public ) || ! $this->show_metabox() ) { + return; + } + + // Adds custom category description editor. Needs a hook that runs before the description field. + add_action( "{$this->taxonomy}_term_edit_form_top", [ $this, 'custom_category_description_editor' ] ); + + add_action( sanitize_text_field( $this->taxonomy ) . '_edit_form', [ $this, 'term_metabox' ], 90, 1 ); + add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] ); + } + + /** + * Show the SEO inputs for term. + * + * @param stdClass|WP_Term $term Term to show the edit boxes for. + * + * @return void + */ + public function term_metabox( $term ) { + if ( WPSEO_Metabox::is_internet_explorer() ) { + $this->show_internet_explorer_notice(); + return; + } + + $metabox = new WPSEO_Taxonomy_Metabox( $this->taxonomy, $term ); + $metabox->display(); + } + + /** + * Renders the content for the internet explorer metabox. + * + * @return void + */ + private function show_internet_explorer_notice() { + $product_title = YoastSEO()->helpers->product->get_product_name(); + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $product_title is hardcoded. + printf( '

      %1$s

      ', $product_title ); + echo '
      '; + + $content = sprintf( + /* translators: 1: Link start tag to the Firefox website, 2: Link start tag to the Chrome website, 3: Link start tag to the Edge website, 4: Link closing tag. */ + esc_html__( 'The browser you are currently using is unfortunately rather dated. Since we strive to give you the best experience possible, we no longer support this browser. Instead, please use %1$sFirefox%4$s, %2$sChrome%4$s or %3$sMicrosoft Edge%4$s.', 'wordpress-seo' ), + '', + '', + '', + '' + ); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped above. + echo new Alert_Presenter( $content ); + + echo '
      '; + } + + /** + * Queue assets for taxonomy screens. + * + * @since 1.5.0 + * + * @return void + */ + public function admin_enqueue_scripts() { + + $pagenow = $GLOBALS['pagenow']; + + if ( ! ( self::is_term_edit( $pagenow ) || self::is_term_overview( $pagenow ) ) ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_style( 'scoring' ); + $asset_manager->enqueue_style( 'monorepo' ); + + $tag_id = $this::get_tag_id(); + + if ( + self::is_term_edit( $pagenow ) + && ! is_null( $tag_id ) + ) { + wp_enqueue_media(); // Enqueue files needed for upload functionality. + + $asset_manager->enqueue_style( 'metabox-css' ); + $asset_manager->enqueue_style( 'ai-generator' ); + $asset_manager->enqueue_script( 'term-edit' ); + + /** + * Remove the emoji script as it is incompatible with both React and any + * contenteditable fields. + */ + remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + + $asset_manager->localize_script( 'term-edit', 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() ); + + $script_data = [ + 'analysis' => [ + 'plugins' => [ + 'replaceVars' => [ + 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), + 'replace_vars' => $this->get_replace_vars(), + 'recommended_replace_vars' => $this->get_recommended_replace_vars(), + 'scope' => $this->determine_scope(), + ], + 'shortcodes' => [ + 'wpseo_shortcode_tags' => $this->get_valid_shortcode_tags(), + 'wpseo_filter_shortcodes_nonce' => wp_create_nonce( 'wpseo-filter-shortcodes' ), + ], + ], + 'worker' => [ + 'url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-analysis-worker' ), + 'dependencies' => YoastSEO()->helpers->asset->get_dependency_urls_by_handle( 'yoast-seo-analysis-worker' ), + 'keywords_assessment_url' => YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-used-keywords-assessment' ), + 'log_level' => WPSEO_Utils::get_analysis_worker_log_level(), + ], + ], + 'media' => [ + // @todo replace this translation with JavaScript translations. + 'choose_image' => __( 'Use Image', 'wordpress-seo' ), + ], + 'metabox' => $this->localize_term_scraper_script( $tag_id ), + 'userLanguageCode' => WPSEO_Language_Utils::get_language( get_user_locale() ), + 'isTerm' => true, + 'postId' => $tag_id, + 'termType' => $this->get_taxonomy(), + 'usedKeywordsNonce' => wp_create_nonce( 'wpseo-keyword-usage' ), + ]; + + /** + * The website information repository. + * + * @var $repo Website_Information_Repository + */ + $repo = YoastSEO()->classes->get( Website_Information_Repository::class ); + $term_information = $repo->get_term_site_information(); + $term_information->set_term( get_term_by( 'id', $tag_id, $this::get_taxonomy() ) ); + $script_data = array_merge_recursive( $term_information->get_legacy_site_information(), $script_data ); + + $asset_manager->localize_script( 'term-edit', 'wpseoScriptData', $script_data ); + $asset_manager->enqueue_user_language_script(); + } + + if ( self::is_term_overview( $pagenow ) ) { + $asset_manager->enqueue_script( 'edit-page' ); + } + } + + /** + * Update the taxonomy meta data on save. + * + * @param int $term_id ID of the term to save data for. + * @param int $tt_id The taxonomy_term_id for the term. + * @param string $taxonomy The taxonomy the term belongs to. + * + * @return void + */ + public function update_term( $term_id, $tt_id, $taxonomy ) { + // Bail if this is a multisite installation and the site has been switched. + if ( is_multisite() && ms_is_switched() ) { + return; + } + + /* Create post array with only our values. */ + $new_meta_data = []; + foreach ( WPSEO_Taxonomy_Meta::$defaults_per_term as $key => $default ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: Nonce is already checked by WordPress before executing this action. + if ( isset( $_POST[ $key ] ) && is_string( $_POST[ $key ] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: $data is getting sanitized later. + $data = wp_unslash( $_POST[ $key ] ); + $new_meta_data[ $key ] = ( $key !== 'wpseo_canonical' ) ? WPSEO_Utils::sanitize_text_field( $data ) : WPSEO_Utils::sanitize_url( $data ); + } + + // If analysis is disabled remove that analysis score value from the DB. + if ( $this->is_meta_value_disabled( $key ) ) { + $new_meta_data[ $key ] = ''; + } + } + + // Saving the values. + WPSEO_Taxonomy_Meta::set_values( $term_id, $taxonomy, $new_meta_data ); + } + + /** + * Determines if the given meta value key is disabled. + * + * @param string $key The key of the meta value. + * @return bool Whether the given meta value key is disabled. + */ + public function is_meta_value_disabled( $key ) { + if ( $key === 'wpseo_linkdex' && ! $this->analysis_seo->is_enabled() ) { + return true; + } + + if ( $key === 'wpseo_content_score' && ! $this->analysis_readability->is_enabled() ) { + return true; + } + + if ( $key === 'wpseo_inclusive_language_score' && ! $this->analysis_inclusive_language->is_enabled() ) { + return true; + } + + return false; + } + + /** + * Allows post-kses-filtered HTML in term descriptions. + * + * @return void + */ + public function custom_category_descriptions_allow_html() { + remove_filter( 'term_description', 'wp_kses_data' ); + remove_filter( 'pre_term_description', 'wp_filter_kses' ); + add_filter( 'term_description', 'wp_kses_post' ); + add_filter( 'pre_term_description', 'wp_filter_post_kses' ); + } + + /** + * Output the WordPress editor. + * + * @return void + */ + public function custom_category_description_editor() { + wp_editor( '', 'description' ); + } + + /** + * Pass variables to js for use with the term-scraper. + * + * @param int $term_id The ID of the term to localize the script for. + * + * @return array + */ + public function localize_term_scraper_script( $term_id ) { + $term = get_term_by( 'id', $term_id, $this::get_taxonomy() ); + $taxonomy = get_taxonomy( $term->taxonomy ); + + $term_formatter = new WPSEO_Metabox_Formatter( + new WPSEO_Term_Metabox_Formatter( $taxonomy, $term ) + ); + + return $term_formatter->get_values(); + } + + /** + * Pass some variables to js for replacing variables. + * + * @return array + */ + public function localize_replace_vars_script() { + return [ + 'no_parent_text' => __( '(no parent)', 'wordpress-seo' ), + 'replace_vars' => $this->get_replace_vars(), + 'recommended_replace_vars' => $this->get_recommended_replace_vars(), + 'scope' => $this->determine_scope(), + ]; + } + + /** + * Determines the scope based on the current taxonomy. + * This can be used by the replacevar plugin to determine if a replacement needs to be executed. + * + * @return string String decribing the current scope. + */ + private function determine_scope() { + $taxonomy = $this::get_taxonomy(); + + if ( $taxonomy === 'category' ) { + return 'category'; + } + + if ( $taxonomy === 'post_tag' ) { + return 'tag'; + } + + return 'term'; + } + + /** + * Determines if a given page is the term overview page. + * + * @param string $page The string to check for the term overview page. + * + * @return bool + */ + public static function is_term_overview( $page ) { + return $page === 'edit-tags.php'; + } + + /** + * Determines if a given page is the term edit page. + * + * @param string $page The string to check for the term edit page. + * + * @return bool + */ + public static function is_term_edit( $page ) { + return $page === 'term.php'; + } + + /** + * Function to get the labels for the current taxonomy. + * + * @return object|null Labels for the current taxonomy or null if the taxonomy is not set. + */ + public static function get_labels() { + $term = self::get_taxonomy(); + if ( $term !== '' ) { + $taxonomy = get_taxonomy( $term ); + return $taxonomy->labels; + } + return null; + } + + /** + * Retrieves a template. + * Check if metabox for current taxonomy should be displayed. + * + * @return bool + */ + private function show_metabox() { + $option_key = 'display-metabox-tax-' . $this->taxonomy; + + return WPSEO_Options::get( $option_key ); + } + + /** + * Getting the taxonomy from the URL. + * + * @return string + */ + private static function get_taxonomy() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['taxonomy'] ) && is_string( $_GET['taxonomy'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return sanitize_text_field( wp_unslash( $_GET['taxonomy'] ) ); + } + return ''; + } + + /** + * Get the current tag ID from the GET parameters. + * + * @return int|null the tag ID if it exists, null otherwise. + */ + private static function get_tag_id() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['tag_ID'] ) && is_string( $_GET['tag_ID'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, We are casting to an integer. + $tag_id = (int) wp_unslash( $_GET['tag_ID'] ); + if ( $tag_id > 0 ) { + return $tag_id; + } + } + return null; + } + + /** + * Prepares the replace vars for localization. + * + * @return array The replacement variables. + */ + private function get_replace_vars() { + $term_id = $this::get_tag_id(); + $term = get_term_by( 'id', $term_id, $this::get_taxonomy() ); + + $cached_replacement_vars = []; + + $vars_to_cache = [ + 'date', + 'id', + 'sitename', + 'sitedesc', + 'sep', + 'page', + 'term_title', + 'term_description', + 'term_hierarchy', + 'category_description', + 'tag_description', + 'searchphrase', + 'currentyear', + ]; + + foreach ( $vars_to_cache as $var ) { + $cached_replacement_vars[ $var ] = wpseo_replace_vars( '%%' . $var . '%%', $term ); + } + + return $cached_replacement_vars; + } + + /** + * Prepares the recommended replace vars for localization. + * + * @return array The recommended replacement variables. + */ + private function get_recommended_replace_vars() { + $recommended_replace_vars = new WPSEO_Admin_Recommended_Replace_Vars(); + $taxonomy = $this::get_taxonomy(); + + if ( $taxonomy === '' ) { + return []; + } + + // What is recommended depends on the current context. + $page_type = $recommended_replace_vars->determine_for_term( $taxonomy ); + + return $recommended_replace_vars->get_recommended_replacevars_for( $page_type ); + } + + /** + * Returns an array with shortcode tags for all registered shortcodes. + * + * @return array Array with shortcode tags. + */ + private function get_valid_shortcode_tags() { + $shortcode_tags = []; + + foreach ( $GLOBALS['shortcode_tags'] as $tag => $description ) { + $shortcode_tags[] = $tag; + } + + return $shortcode_tags; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-addon-data.php b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-addon-data.php new file mode 100644 index 00000000..0cbc27c7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-addon-data.php @@ -0,0 +1,126 @@ +is_installed( WPSEO_Addon_Manager::LOCAL_SLUG ) ) { + $addon_settings = $this->get_local_addon_settings( $addon_settings, 'wpseo_local', WPSEO_Addon_Manager::LOCAL_SLUG, $this->local_include_list ); + } + + if ( $addon_manager->is_installed( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ) ) { + $addon_settings = $this->get_addon_settings( $addon_settings, 'wpseo_woo', WPSEO_Addon_Manager::WOOCOMMERCE_SLUG, $this->woo_include_list ); + } + + if ( $addon_manager->is_installed( WPSEO_Addon_Manager::NEWS_SLUG ) ) { + $addon_settings = $this->get_addon_settings( $addon_settings, 'wpseo_news', WPSEO_Addon_Manager::NEWS_SLUG, $this->news_include_list ); + } + + if ( $addon_manager->is_installed( WPSEO_Addon_Manager::VIDEO_SLUG ) ) { + $addon_settings = $this->get_addon_settings( $addon_settings, 'wpseo_video', WPSEO_Addon_Manager::VIDEO_SLUG, $this->video_include_list ); + } + + return $addon_settings; + } + + /** + * Gets the tracked options from the addon + * + * @param array $addon_settings The current list of addon settings. + * @param string $source_name The option key of the addon. + * @param string $slug The addon slug. + * @param array $option_include_list All the options to be included in tracking. + * + * @return array + */ + public function get_addon_settings( array $addon_settings, $source_name, $slug, $option_include_list ) { + $source_options = get_option( $source_name, [] ); + if ( ! is_array( $source_options ) || empty( $source_options ) ) { + return $addon_settings; + } + $addon_settings[ $slug ] = array_intersect_key( $source_options, array_flip( $option_include_list ) ); + + return $addon_settings; + } + + /** + * Filter business_type in local addon settings. + * + * Remove the business_type setting when 'multiple_locations_shared_business_info' setting is turned off. + * + * @param array $addon_settings The current list of addon settings. + * @param string $source_name The option key of the addon. + * @param string $slug The addon slug. + * @param array $option_include_list All the options to be included in tracking. + * + * @return array + */ + public function get_local_addon_settings( array $addon_settings, $source_name, $slug, $option_include_list ) { + $source_options = get_option( $source_name, [] ); + if ( ! is_array( $source_options ) || empty( $source_options ) ) { + return $addon_settings; + } + $addon_settings[ $slug ] = array_intersect_key( $source_options, array_flip( $option_include_list ) ); + + if ( array_key_exists( 'use_multiple_locations', $source_options ) && array_key_exists( 'business_type', $addon_settings[ $slug ] ) && $source_options['use_multiple_locations'] === 'on' && $source_options['multiple_locations_shared_business_info'] === 'off' ) { + $addon_settings[ $slug ]['business_type'] = 'multiple_locations'; + } + + if ( ! ( new WooCommerce_Conditional() )->is_met() ) { + unset( $addon_settings[ $slug ]['woocommerce_local_pickup_setting'] ); + } + + return $addon_settings; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-default-data.php b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-default-data.php new file mode 100644 index 00000000..498e7d08 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-default-data.php @@ -0,0 +1,60 @@ + get_option( 'blogname' ), + '@timestamp' => (int) gmdate( 'Uv' ), + 'wpVersion' => $this->get_wordpress_version(), + 'homeURL' => home_url(), + 'adminURL' => admin_url(), + 'isMultisite' => is_multisite(), + 'siteLanguage' => get_bloginfo( 'language' ), + 'gmt_offset' => get_option( 'gmt_offset' ), + 'timezoneString' => get_option( 'timezone_string' ), + 'migrationStatus' => get_option( 'yoast_migrations_free' ), + 'countPosts' => $this->get_post_count( 'post' ), + 'countPages' => $this->get_post_count( 'page' ), + ]; + } + + /** + * Returns the number of posts of a certain type. + * + * @param string $post_type The post type return the count for. + * + * @return int The count for this post type. + */ + protected function get_post_count( $post_type ) { + $count = wp_count_posts( $post_type ); + if ( isset( $count->publish ) ) { + return $count->publish; + } + return 0; + } + + /** + * Returns the WordPress version. + * + * @return string The version. + */ + protected function get_wordpress_version() { + global $wp_version; + + return $wp_version; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-plugin-data.php b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-plugin-data.php new file mode 100644 index 00000000..2c585e1d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-plugin-data.php @@ -0,0 +1,90 @@ + $this->get_plugin_data(), + ]; + } + + /** + * Returns all plugins. + * + * @return array The formatted plugins. + */ + protected function get_plugin_data() { + + if ( ! function_exists( 'get_plugin_data' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + $plugins = wp_get_active_and_valid_plugins(); + + $plugins = array_map( 'get_plugin_data', $plugins ); + $this->set_auto_update_plugin_list(); + $plugins = array_map( [ $this, 'format_plugin' ], $plugins ); + + $plugin_data = []; + foreach ( $plugins as $plugin ) { + $plugin_key = sanitize_title( $plugin['name'] ); + $plugin_data[ $plugin_key ] = $plugin; + } + + return $plugin_data; + } + + /** + * Sets all auto updating plugin data so it can be used in the tracking list. + * + * @return void + */ + public function set_auto_update_plugin_list() { + + $auto_update_plugins = []; + $auto_update_plugin_files = get_option( 'auto_update_plugins' ); + if ( $auto_update_plugin_files ) { + foreach ( $auto_update_plugin_files as $auto_update_plugin ) { + $data = get_plugin_data( WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $auto_update_plugin ); + $auto_update_plugins[ $data['Name'] ] = $data; + } + } + + $this->auto_update_plugin_list = $auto_update_plugins; + } + + /** + * Formats the plugin array. + * + * @param array $plugin The plugin details. + * + * @return array The formatted array. + */ + protected function format_plugin( array $plugin ) { + + return [ + 'name' => $plugin['Name'], + 'version' => $plugin['Version'], + 'auto_updating' => array_key_exists( $plugin['Name'], $this->auto_update_plugin_list ), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-server-data.php b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-server-data.php new file mode 100644 index 00000000..220753f1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-server-data.php @@ -0,0 +1,85 @@ + $this->get_server_data(), + ]; + } + + /** + * Returns the values with server details. + * + * @return array Array with the value. + */ + protected function get_server_data() { + $server_data = []; + + // Validate if the server address is a valid IP-address. + $ipaddress = isset( $_SERVER['SERVER_ADDR'] ) ? filter_var( wp_unslash( $_SERVER['SERVER_ADDR'] ), FILTER_VALIDATE_IP ) : ''; + if ( $ipaddress ) { + $server_data['ip'] = $ipaddress; + $server_data['Hostname'] = gethostbyaddr( $ipaddress ); + } + + $server_data['os'] = function_exists( 'php_uname' ) ? php_uname() : PHP_OS; + $server_data['PhpVersion'] = PHP_VERSION; + $server_data['CurlVersion'] = $this->get_curl_info(); + $server_data['PhpExtensions'] = $this->get_php_extensions(); + + return $server_data; + } + + /** + * Returns details about the curl version. + * + * @return array|null The curl info. Or null when curl isn't available.. + */ + protected function get_curl_info() { + if ( ! function_exists( 'curl_version' ) ) { + return null; + } + + $curl = curl_version(); + + $ssl_support = true; + if ( ! $curl['features'] && CURL_VERSION_SSL ) { + $ssl_support = false; + } + + return [ + 'version' => $curl['version'], + 'sslSupport' => $ssl_support, + ]; + } + + /** + * Returns a list with php extensions. + * + * @return array Returns the state of the php extensions. + */ + protected function get_php_extensions() { + return [ + 'imagick' => extension_loaded( 'imagick' ), + 'filter' => extension_loaded( 'filter' ), + 'bcmath' => extension_loaded( 'bcmath' ), + 'pcre' => extension_loaded( 'pcre' ), + 'xml' => extension_loaded( 'xml' ), + 'pdo_mysql' => extension_loaded( 'pdo_mysql' ), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-settings-data.php b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-settings-data.php new file mode 100644 index 00000000..86e896ed --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-settings-data.php @@ -0,0 +1,274 @@ +include_list = apply_filters( 'wpseo_tracking_settings_include_list', $this->include_list ); + + $options = WPSEO_Options::get_all(); + // Returns the settings of which the keys intersect with the values of the include list. + $options = array_intersect_key( $options, array_flip( $this->include_list ) ); + + return [ + 'settings' => $this->anonymize_settings( $options ), + ]; + } + + /** + * Anonimizes the WPSEO_Options array by replacing all $anonymous_settings values to 'used'. + * + * @param array $settings The settings. + * + * @return array The anonymized settings. + */ + private function anonymize_settings( $settings ) { + foreach ( $this->anonymous_settings as $setting ) { + if ( ! empty( $settings[ $setting ] ) ) { + $settings[ $setting ] = 'used'; + } + } + + return $settings; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-theme-data.php b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-theme-data.php new file mode 100644 index 00000000..e2225950 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking-theme-data.php @@ -0,0 +1,51 @@ + [ + 'name' => $theme->get( 'Name' ), + 'url' => $theme->get( 'ThemeURI' ), + 'version' => $theme->get( 'Version' ), + 'author' => [ + 'name' => $theme->get( 'Author' ), + 'url' => $theme->get( 'AuthorURI' ), + ], + 'parentTheme' => $this->get_parent_theme( $theme ), + 'blockTemplateSupport' => current_theme_supports( 'block-templates' ), + 'isBlockTheme' => function_exists( 'wp_is_block_theme' ) && wp_is_block_theme(), + ], + ]; + } + + /** + * Returns the name of the parent theme. + * + * @param WP_Theme $theme The theme object. + * + * @return string|null The name of the parent theme or null. + */ + private function get_parent_theme( WP_Theme $theme ) { + if ( is_child_theme() ) { + return $theme->get( 'Template' ); + } + + return null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking.php b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking.php new file mode 100644 index 00000000..58bfdff3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/tracking/class-tracking.php @@ -0,0 +1,240 @@ +tracking_enabled() ) { + return; + } + + $this->endpoint = $endpoint; + $this->threshold = $threshold; + $this->current_time = time(); + } + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + if ( ! $this->tracking_enabled() ) { + return; + } + + // Send tracking data on `admin_init`. + add_action( 'admin_init', [ $this, 'send' ], 1 ); + + // Add an action hook that will be triggered at the specified time by `wp_schedule_single_event()`. + add_action( 'wpseo_send_tracking_data_after_core_update', [ $this, 'send' ] ); + // Call `wp_schedule_single_event()` after a WordPress core update. + add_action( 'upgrader_process_complete', [ $this, 'schedule_tracking_data_sending' ], 10, 2 ); + } + + /** + * Schedules a new sending of the tracking data after a WordPress core update. + * + * @param bool|WP_Upgrader $upgrader Optional. WP_Upgrader instance or false. + * Depending on context, it might be a Theme_Upgrader, + * Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader. + * instance. Default false. + * @param array $data Array of update data. + * + * @return void + */ + public function schedule_tracking_data_sending( $upgrader = false, $data = [] ) { + // Return if it's not a WordPress core update. + if ( ! $upgrader || ! isset( $data['type'] ) || $data['type'] !== 'core' ) { + return; + } + + /* + * To uniquely identify the scheduled cron event, `wp_next_scheduled()` + * needs to receive the same arguments as those used when originally + * scheduling the event otherwise it will always return false. + */ + if ( ! wp_next_scheduled( 'wpseo_send_tracking_data_after_core_update', [ true ] ) ) { + /* + * Schedule sending of data tracking 6 hours after a WordPress core + * update. Pass a `true` parameter for the callback `$force` argument. + */ + wp_schedule_single_event( ( time() + ( HOUR_IN_SECONDS * 6 ) ), 'wpseo_send_tracking_data_after_core_update', [ true ] ); + } + } + + /** + * Sends the tracking data. + * + * @param bool $force Whether to send the tracking data ignoring the two + * weeks time threshold. Default false. + * + * @return void + */ + public function send( $force = false ) { + if ( ! $this->should_send_tracking( $force ) ) { + return; + } + + // Set a 'content-type' header of 'application/json'. + $tracking_request_args = [ + 'headers' => [ + 'content-type:' => 'application/json', + ], + ]; + + $collector = $this->get_collector(); + + $request = new WPSEO_Remote_Request( $this->endpoint, $tracking_request_args ); + $request->set_body( $collector->get_as_json() ); + $request->send(); + + update_option( $this->option_name, $this->current_time, 'yes' ); + } + + /** + * Determines whether to send the tracking data. + * + * Returns false if tracking is disabled or the current page is one of the + * admin plugins pages. Returns true when there's no tracking data stored or + * the data was sent more than two weeks ago. The two weeks interval is set + * when instantiating the class. + * + * @param bool $ignore_time_treshhold Whether to send the tracking data ignoring + * the two weeks time treshhold. Default false. + * + * @return bool True when tracking data should be sent. + */ + protected function should_send_tracking( $ignore_time_treshhold = false ) { + global $pagenow; + + // Only send tracking on the main site of a multi-site instance. This returns true on non-multisite installs. + if ( is_network_admin() || ! is_main_site() ) { + return false; + } + + // Because we don't want to possibly block plugin actions with our routines. + if ( in_array( $pagenow, [ 'plugins.php', 'plugin-install.php', 'plugin-editor.php' ], true ) ) { + return false; + } + + $last_time = get_option( $this->option_name ); + + // When tracking data haven't been sent yet or when sending data is forced. + if ( ! $last_time || $ignore_time_treshhold ) { + return true; + } + + return $this->exceeds_treshhold( $this->current_time - $last_time ); + } + + /** + * Checks if the given amount of seconds exceeds the set threshold. + * + * @param int $seconds The amount of seconds to check. + * + * @return bool True when seconds is bigger than threshold. + */ + protected function exceeds_treshhold( $seconds ) { + return ( $seconds > $this->threshold ); + } + + /** + * Returns the collector for collecting the data. + * + * @return WPSEO_Collector The instance of the collector. + */ + public function get_collector() { + $collector = new WPSEO_Collector(); + $collector->add_collection( new WPSEO_Tracking_Default_Data() ); + $collector->add_collection( new WPSEO_Tracking_Server_Data() ); + $collector->add_collection( new WPSEO_Tracking_Theme_Data() ); + $collector->add_collection( new WPSEO_Tracking_Plugin_Data() ); + $collector->add_collection( new WPSEO_Tracking_Settings_Data() ); + $collector->add_collection( new WPSEO_Tracking_Addon_Data() ); + $collector->add_collection( YoastSEO()->classes->get( Missing_Indexables_Collector::class ) ); + $collector->add_collection( YoastSEO()->classes->get( To_Be_Cleaned_Indexables_Collector::class ) ); + + return $collector; + } + + /** + * See if we should run tracking at all. + * + * @return bool True when we can track, false when we can't. + */ + private function tracking_enabled() { + // Check if we're allowing tracking. + $tracking = WPSEO_Options::get( 'tracking' ); + + if ( $tracking === false ) { + return false; + } + + // Save this state. + if ( $tracking === null ) { + /** + * Filter: 'wpseo_enable_tracking' - Enables the data tracking of Yoast SEO Premium and add-ons. + * + * @param string $is_enabled The enabled state. Default is false. + */ + $tracking = apply_filters( 'wpseo_enable_tracking', false ); + + WPSEO_Options::set( 'tracking', $tracking ); + } + + if ( $tracking === false ) { + return false; + } + + if ( ! YoastSEO()->helpers->environment->is_production_mode() ) { + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggle.php b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggle.php new file mode 100644 index 00000000..ea61a73b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggle.php @@ -0,0 +1,206 @@ + $value ) { + if ( property_exists( $this, $key ) ) { + $this->$key = $value; + } + } + } + + /** + * Magic isset-er. + * + * @param string $key Key to check whether a value for it is set. + * + * @return bool True if set, false otherwise. + */ + public function __isset( $key ) { + return isset( $this->$key ); + } + + /** + * Magic getter. + * + * @param string $key Key to get the value for. + * + * @return mixed Value for the key, or null if not set. + */ + public function __get( $key ) { + if ( isset( $this->$key ) ) { + return $this->$key; + } + + return null; + } + + /** + * Checks whether the feature for this toggle is enabled. + * + * @return bool True if the feature is enabled, false otherwise. + */ + public function is_enabled() { + return (bool) WPSEO_Options::get( $this->setting ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggles.php b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggles.php new file mode 100644 index 00000000..a4efc0d5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-feature-toggles.php @@ -0,0 +1,284 @@ +toggles === null ) { + $this->toggles = $this->load_toggles(); + } + + return $this->toggles; + } + + /** + * Loads the available feature toggles. + * + * Also ensures that the toggles are all Yoast_Feature_Toggle instances and sorted by their order value. + * + * @return array List of sorted Yoast_Feature_Toggle instances. + */ + protected function load_toggles() { + $xml_sitemap_extra = false; + if ( WPSEO_Options::get( 'enable_xml_sitemap' ) ) { + $xml_sitemap_extra = '' . esc_html__( 'See the XML sitemap.', 'wordpress-seo' ) . ''; + } + + $feature_toggles = [ + (object) [ + 'name' => __( 'SEO analysis', 'wordpress-seo' ), + 'setting' => 'keyword_analysis_active', + 'label' => __( 'The SEO analysis offers suggestions to improve the SEO of your text.', 'wordpress-seo' ), + 'read_more_label' => __( 'Learn how the SEO analysis can help you rank.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/2ak', + 'order' => 10, + ], + (object) [ + 'name' => __( 'Readability analysis', 'wordpress-seo' ), + 'setting' => 'content_analysis_active', + 'label' => __( 'The readability analysis offers suggestions to improve the structure and style of your text.', 'wordpress-seo' ), + 'read_more_label' => __( 'Discover why readability is important for SEO.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/2ao', + 'order' => 20, + ], + (object) [ + 'name' => __( 'Inclusive language analysis', 'wordpress-seo' ), + 'supported_languages' => Language_Helper::$languages_with_inclusive_language_support, + 'setting' => 'inclusive_language_analysis_active', + 'label' => __( 'The inclusive language analysis offers suggestions to write more inclusive copy.', 'wordpress-seo' ), + 'read_more_label' => __( 'Discover why inclusive language is important for SEO.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/inclusive-language-features-free', + 'order' => 25, + ], + (object) [ + 'name' => __( 'Cornerstone content', 'wordpress-seo' ), + 'setting' => 'enable_cornerstone_content', + 'label' => __( 'The cornerstone content feature lets you to mark and filter cornerstone content on your website.', 'wordpress-seo' ), + 'read_more_label' => __( 'Find out how cornerstone content can help you improve your site structure.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/dashboard-help-cornerstone', + 'order' => 30, + ], + (object) [ + 'name' => __( 'Text link counter', 'wordpress-seo' ), + 'setting' => 'enable_text_link_counter', + 'label' => __( 'The text link counter helps you improve your site structure.', 'wordpress-seo' ), + 'read_more_label' => __( 'Find out how the text link counter can enhance your SEO.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/2aj', + 'order' => 40, + ], + (object) [ + 'name' => __( 'Insights', 'wordpress-seo' ), + 'setting' => 'enable_metabox_insights', + 'label' => __( 'Find relevant data about your content right in the Insights section in the Yoast SEO metabox. You’ll see what words you use most often and if they’re a match with your keywords! ', 'wordpress-seo' ), + 'read_more_label' => __( 'Find out how Insights can help you improve your content.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/4ew', + 'premium_url' => 'https://yoa.st/2ai', + 'order' => 41, + ], + (object) [ + 'name' => __( 'Link suggestions', 'wordpress-seo' ), + 'premium' => true, + 'setting' => 'enable_link_suggestions', + 'label' => __( 'Get relevant internal linking suggestions — while you’re writing! The link suggestions metabox shows a list of posts on your blog with similar content that might be interesting to link to. ', 'wordpress-seo' ), + 'read_more_label' => __( 'Read more about how internal linking can improve your site structure.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/4ev', + 'premium_url' => 'https://yoa.st/17g', + 'premium_upsell_url' => 'https://yoa.st/get-link-suggestions', + 'order' => 42, + ], + (object) [ + 'name' => __( 'XML sitemaps', 'wordpress-seo' ), + 'setting' => 'enable_xml_sitemap', + /* translators: %s: Yoast SEO */ + 'label' => sprintf( __( 'Enable the XML sitemaps that %s generates.', 'wordpress-seo' ), 'Yoast SEO' ), + 'read_more_label' => __( 'Read why XML Sitemaps are important for your site.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/2a-', + 'extra' => $xml_sitemap_extra, + 'after' => $this->sitemaps_toggle_after(), + 'order' => 60, + ], + (object) [ + 'name' => __( 'Admin bar menu', 'wordpress-seo' ), + 'setting' => 'enable_admin_bar_menu', + /* translators: 1: Yoast SEO */ + 'label' => sprintf( __( 'The %1$s admin bar menu contains useful links to third-party tools for analyzing pages and makes it easy to see if you have new notifications.', 'wordpress-seo' ), 'Yoast SEO' ), + 'order' => 80, + ], + (object) [ + 'name' => __( 'Security: no advanced or schema settings for authors', 'wordpress-seo' ), + 'setting' => 'disableadvanced_meta', + 'label' => sprintf( + /* translators: 1: Yoast SEO, 2: translated version of "Off" */ + __( 'The advanced section of the %1$s meta box allows a user to remove posts from the search results or change the canonical. The settings in the schema tab allows a user to change schema meta data for a post. These are things you might not want any author to do. That\'s why, by default, only editors and administrators can do this. Setting to "%2$s" allows all users to change these settings.', 'wordpress-seo' ), + 'Yoast SEO', + __( 'Off', 'wordpress-seo' ) + ), + 'order' => 90, + ], + (object) [ + 'name' => __( 'Usage tracking', 'wordpress-seo' ), + 'label' => __( 'Usage tracking', 'wordpress-seo' ), + 'setting' => 'tracking', + 'read_more_label' => sprintf( + /* translators: 1: Yoast SEO */ + __( 'Allow us to track some data about your site to improve our plugin.', 'wordpress-seo' ), + 'Yoast SEO' + ), + 'read_more_url' => 'https://yoa.st/usage-tracking-2', + 'order' => 95, + ], + (object) [ + 'name' => __( 'REST API: Head endpoint', 'wordpress-seo' ), + 'setting' => 'enable_headless_rest_endpoints', + 'label' => sprintf( + /* translators: 1: Yoast SEO */ + __( 'This %1$s REST API endpoint gives you all the metadata you need for a specific URL. This will make it very easy for headless WordPress sites to use %1$s for all their SEO meta output.', 'wordpress-seo' ), + 'Yoast SEO' + ), + 'order' => 100, + ], + (object) [ + 'name' => __( 'Enhanced Slack sharing', 'wordpress-seo' ), + 'setting' => 'enable_enhanced_slack_sharing', + 'label' => __( 'This adds an author byline and reading time estimate to the article’s snippet when shared on Slack.', 'wordpress-seo' ), + 'read_more_label' => __( 'Find out how a rich snippet can improve visibility and click-through-rate.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/help-slack-share', + 'order' => 105, + ], + (object) [ + 'name' => __( 'IndexNow', 'wordpress-seo' ), + 'premium' => true, + 'setting' => 'enable_index_now', + 'label' => __( 'Automatically ping search engines like Bing and Yandex whenever you publish, update or delete a post.', 'wordpress-seo' ), + 'read_more_label' => __( 'Find out how IndexNow can help your site.', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/index-now-read-more', + 'premium_url' => 'https://yoa.st/index-now-feature', + 'premium_upsell_url' => 'https://yoa.st/get-indexnow', + 'order' => 110, + ], + (object) [ + 'name' => __( 'AI title & description generator', 'wordpress-seo' ), + 'premium' => true, + 'setting' => 'enable_ai_generator', + 'label' => __( 'Use the power of Yoast AI to automatically generate compelling titles and descriptions for your posts and pages.', 'wordpress-seo' ), + 'read_more_label' => __( 'Learn more', 'wordpress-seo' ), + 'read_more_url' => 'https://yoa.st/ai-generator-read-more', + 'premium_url' => 'https://yoa.st/ai-generator-feature', + 'premium_upsell_url' => 'https://yoa.st/get-ai-generator', + 'order' => 115, + ], + ]; + + /** + * Filter to add feature toggles from add-ons. + * + * @param array $feature_toggles Array with feature toggle objects where each object + * should have a `name`, `setting` and `label` property. + */ + $feature_toggles = apply_filters( 'wpseo_feature_toggles', $feature_toggles ); + + $feature_toggles = array_map( [ $this, 'ensure_toggle' ], $feature_toggles ); + usort( $feature_toggles, [ $this, 'sort_toggles_callback' ] ); + + return $feature_toggles; + } + + /** + * Returns html for a warning that core sitemaps are enabled when yoast seo sitemaps are disabled. + * + * @return string HTML string for the warning. + */ + protected function sitemaps_toggle_after() { + $out = ''; + + return $out; + } + + /** + * Ensures that the passed value is a Yoast_Feature_Toggle. + * + * @param Yoast_Feature_Toggle|object|array $toggle_data Feature toggle instance, or raw object or array + * containing feature toggle data. + * @return Yoast_Feature_Toggle Feature toggle instance based on $toggle_data. + */ + protected function ensure_toggle( $toggle_data ) { + if ( $toggle_data instanceof Yoast_Feature_Toggle ) { + return $toggle_data; + } + + if ( is_object( $toggle_data ) ) { + $toggle_data = get_object_vars( $toggle_data ); + } + + return new Yoast_Feature_Toggle( $toggle_data ); + } + + /** + * Callback for sorting feature toggles by their order. + * + * {@internal Once the minimum PHP version goes up to PHP 7.0, the logic in the function + * can be replaced with the spaceship operator `<=>`.} + * + * @param Yoast_Feature_Toggle $feature_a Feature A. + * @param Yoast_Feature_Toggle $feature_b Feature B. + * + * @return int An integer less than, equal to, or greater than zero indicating respectively + * that feature A is considered to be less than, equal to, or greater than feature B. + */ + protected function sort_toggles_callback( Yoast_Feature_Toggle $feature_a, Yoast_Feature_Toggle $feature_b ) { + return ( $feature_a->order - $feature_b->order ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php new file mode 100644 index 00000000..1f2a1735 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-input-select.php @@ -0,0 +1,146 @@ +select_id = $select_id; + $this->select_name = $select_name; + $this->select_options = $select_options; + $this->selected_option = $selected_option; + } + + /** + * Print the rendered view. + * + * @return void + */ + public function output_html() { + // Extract it, because we want each value accessible via a variable instead of accessing it as an array. + extract( $this->get_select_values() ); + + require WPSEO_PATH . 'admin/views/form/select.php'; + } + + /** + * Return the rendered view. + * + * @return string + */ + public function get_html() { + ob_start(); + + $this->output_html(); + + $rendered_output = ob_get_contents(); + ob_end_clean(); + + return $rendered_output; + } + + /** + * Add an attribute to the attributes property. + * + * @param string $attribute The name of the attribute to add. + * @param string $value The value of the attribute. + * + * @return void + */ + public function add_attribute( $attribute, $value ) { + $this->select_attributes[ $attribute ] = $value; + } + + /** + * Return the set fields for the select. + * + * @return array + */ + private function get_select_values() { + return [ + 'id' => $this->select_id, + 'name' => $this->select_name, + 'attributes' => $this->get_attributes(), + 'options' => $this->select_options, + 'selected' => $this->selected_option, + ]; + } + + /** + * Return the attribute string, when there are attributes set. + * + * @return string + */ + private function get_attributes() { + $attributes = $this->select_attributes; + + if ( ! empty( $attributes ) ) { + array_walk( $attributes, [ $this, 'parse_attribute' ] ); + + return implode( ' ', $attributes ) . ' '; + } + + return ''; + } + + /** + * Get an attribute from the attributes. + * + * @param string $value The value of the attribute. + * @param string $attribute The attribute to look for. + * + * @return void + */ + private function parse_attribute( &$value, $attribute ) { + $value = sprintf( '%s="%s"', sanitize_key( $attribute ), esc_attr( $value ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-integration-toggles.php b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-integration-toggles.php new file mode 100644 index 00000000..ac66ee0f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/class-yoast-integration-toggles.php @@ -0,0 +1,139 @@ +toggles === null ) { + $this->toggles = $this->load_toggles(); + } + + return $this->toggles; + } + + /** + * Loads the available integration toggles. + * + * Also ensures that the toggles are all Yoast_Feature_Toggle instances and sorted by their order value. + * + * @return array List of sorted Yoast_Feature_Toggle instances. + */ + protected function load_toggles() { + $integration_toggles = [ + (object) [ + /* translators: %s: 'Semrush' */ + 'name' => sprintf( __( '%s integration', 'wordpress-seo' ), 'Semrush' ), + 'setting' => 'semrush_integration_active', + 'label' => sprintf( + /* translators: %s: 'Semrush' */ + __( 'The %s integration offers suggestions and insights for keywords related to the entered focus keyphrase.', 'wordpress-seo' ), + 'Semrush' + ), + 'order' => 10, + ], + (object) [ + /* translators: %s: Algolia. */ + 'name' => sprintf( esc_html__( '%s integration', 'wordpress-seo' ), 'Algolia' ), + 'premium' => true, + 'setting' => 'algolia_integration_active', + 'label' => __( 'Improve the quality of your site search! Automatically helps your users find your cornerstone and most important content in your internal search results. It also removes noindexed posts & pages from your site’s search results.', 'wordpress-seo' ), + /* translators: %s: Algolia. */ + 'read_more_label' => sprintf( __( 'Find out more about our %s integration.', 'wordpress-seo' ), 'Algolia' ), + 'read_more_url' => 'https://yoa.st/4eu', + 'premium_url' => 'https://yoa.st/4ex', + 'premium_upsell_url' => 'https://yoa.st/get-algolia-integration', + 'order' => 25, + ], + ]; + + /** + * Filter to add integration toggles from add-ons. + * + * @param array $integration_toggles Array with integration toggle objects where each object + * should have a `name`, `setting` and `label` property. + */ + $integration_toggles = apply_filters( 'wpseo_integration_toggles', $integration_toggles ); + + $integration_toggles = array_map( [ $this, 'ensure_toggle' ], $integration_toggles ); + usort( $integration_toggles, [ $this, 'sort_toggles_callback' ] ); + + return $integration_toggles; + } + + /** + * Ensures that the passed value is a Yoast_Feature_Toggle. + * + * @param Yoast_Feature_Toggle|object|array $toggle_data Feature toggle instance, or raw object or array + * containing integration toggle data. + * @return Yoast_Feature_Toggle Feature toggle instance based on $toggle_data. + */ + protected function ensure_toggle( $toggle_data ) { + if ( $toggle_data instanceof Yoast_Feature_Toggle ) { + return $toggle_data; + } + + if ( is_object( $toggle_data ) ) { + $toggle_data = get_object_vars( $toggle_data ); + } + + return new Yoast_Feature_Toggle( $toggle_data ); + } + + /** + * Callback for sorting integration toggles by their order. + * + * {@internal Once the minimum PHP version goes up to PHP 7.0, the logic in the function + * can be replaced with the spaceship operator `<=>`.} + * + * @param Yoast_Feature_Toggle $feature_a Feature A. + * @param Yoast_Feature_Toggle $feature_b Feature B. + * + * @return int An integer less than, equal to, or greater than zero indicating respectively + * that feature A is considered to be less than, equal to, or greater than feature B. + */ + protected function sort_toggles_callback( Yoast_Feature_Toggle $feature_a, Yoast_Feature_Toggle $feature_b ) { + return ( $feature_a->order - $feature_b->order ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/form/select.php b/wp/wp-content/plugins/wordpress-seo/admin/views/form/select.php new file mode 100644 index 00000000..8f3a846c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/form/select.php @@ -0,0 +1,26 @@ + + + diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php b/wp/wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php new file mode 100644 index 00000000..24a8ccb3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/interface-yoast-form-element.php @@ -0,0 +1,19 @@ + + + + + diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/licenses.php b/wp/wp-content/plugins/wordpress-seo/admin/views/licenses.php new file mode 100644 index 00000000..69618cbe --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/licenses.php @@ -0,0 +1,395 @@ + WPSEO_Shortlinker::get( 'https://yoa.st/zz' ), + 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zy' ), + 'title' => 'Yoast SEO Premium', + /* translators: %1$s expands to Yoast SEO */ + 'desc' => sprintf( __( 'The premium version of %1$s with more features & support.', 'wordpress-seo' ), 'Yoast SEO' ), + 'image' => plugin_dir_url( WPSEO_FILE ) . 'packages/js/images/Yoast_SEO_Icon.svg', + 'benefits' => [], +]; + +$extensions = [ + WPSEO_Addon_Manager::LOCAL_SLUG => [ + 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zt' ), + 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zs' ), + 'title' => 'Local SEO', + 'display_title' => __( 'Stand out for local searches', 'wordpress-seo' ), + 'desc' => __( 'Rank better locally and in Google Maps, without breaking a sweat!', 'wordpress-seo' ), + 'image' => plugins_url( 'images/local_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), + 'benefits' => [ + __( 'Attract more customers to your site and physical store', 'wordpress-seo' ), + __( 'Automatically get technical SEO best practices for local businesses', 'wordpress-seo' ), + __( 'Easily add maps, address finders, and opening hours to your content', 'wordpress-seo' ), + __( 'Optimize your business for multiple locations', 'wordpress-seo' ), + ], + ], + WPSEO_Addon_Manager::VIDEO_SLUG => [ + 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zx/' ), + 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zw/' ), + 'title' => 'Video SEO', + 'display_title' => __( 'Drive more views to your videos', 'wordpress-seo' ), + 'desc' => __( 'Optimize your videos to show them off in search results and get more clicks!', 'wordpress-seo' ), + 'image' => plugins_url( 'images/video_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), + 'benefits' => [ + __( 'Automatically get technical SEO best practices for video content', 'wordpress-seo' ), + __( 'Make sure your videos load quickly for users', 'wordpress-seo' ), + __( 'Make your videos responsive for all screen sizes', 'wordpress-seo' ), + __( 'Optimize your video previews & thumbnails', 'wordpress-seo' ), + ], + ], + WPSEO_Addon_Manager::NEWS_SLUG => [ + 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zv/' ), + 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zu/' ), + 'title' => 'News SEO', + 'display_title' => __( 'Rank higher in Google\'s news carousel', 'wordpress-seo' ), + 'desc' => __( 'Are you in Google News? Increase your traffic from Google News by optimizing for it!', 'wordpress-seo' ), + 'image' => plugins_url( 'images/news_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), + 'benefits' => [ + __( 'Optimize your site for Google News', 'wordpress-seo' ), + __( 'Ping Google on the publication of a new post', 'wordpress-seo' ), + __( 'Add all necessary schema.org markup', 'wordpress-seo' ), + __( 'Get XML sitemaps', 'wordpress-seo' ), + ], + ], +]; + +// Add Yoast WooCommerce SEO when WooCommerce is active. +if ( YoastSEO()->helpers->woocommerce->is_active() ) { + $extensions[ WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ] = [ + 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zr' ), + 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/zq' ), + 'title' => 'Yoast WooCommerce SEO', + 'display_title' => __( 'Drive more traffic to your online store', 'wordpress-seo' ), + /* translators: %1$s expands to Yoast SEO */ + 'desc' => sprintf( __( 'Seamlessly integrate WooCommerce with %1$s and get extra features!', 'wordpress-seo' ), 'Yoast SEO' ), + 'image' => plugins_url( 'images/woo_plugin_assistant.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), + 'benefits' => [ + __( 'Write product pages that rank using the SEO analysis', 'wordpress-seo' ), + __( 'Increase Google clicks with rich results', 'wordpress-seo' ), + __( 'Add global identifiers for variable products', 'wordpress-seo' ), + /* translators: %1$s expands to Yoast SEO, %2$s expands to WooCommerce */ + sprintf( __( 'Seamless integration between %1$s and %2$s', 'wordpress-seo' ), 'Yoast SEO', 'WooCommerce' ), + __( 'Turn more visitors into customers!', 'wordpress-seo' ), + ], + 'buy_button' => 'WooCommerce SEO', + ]; +} + +// The total number of plugins to consider is the length of the array + 1 for Premium. +// @phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound +$number_plugins_total = ( count( $extensions ) + 1 ); +// @phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound +$number_plugins_active = 0; + +$extensions['yoast-seo-plugin-subscription'] = [ + 'buyUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/premium-page-bundle-buy' ), + 'infoUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/premium-page-bundle-info' ), + /* translators: used in phrases such as "More information about all the Yoast plugins" */ + 'title' => __( 'all the Yoast plugins', 'wordpress-seo' ), + 'display_title' => __( 'Cover all your SEO bases', 'wordpress-seo' ), + 'desc' => '', + 'image' => plugins_url( 'images/plugin_subscription.svg?v=' . WPSEO_VERSION, WPSEO_FILE ), + 'benefits' => [ + __( 'Get all 5 Yoast plugins for WordPress at a big discount', 'wordpress-seo' ), + __( 'Reach new customers who live near your business', 'wordpress-seo' ), + __( 'Drive more views to your videos', 'wordpress-seo' ), + __( 'Rank higher in Google\'s news carousel', 'wordpress-seo' ), + __( 'Drive more traffic to your online store', 'wordpress-seo' ), + + ], + /* translators: used in phrases such as "Buy all the Yoast plugins" */ + 'buy_button' => __( 'all the Yoast plugins', 'wordpress-seo' ), +]; + +$addon_manager = new WPSEO_Addon_Manager(); +$has_valid_premium_subscription = YoastSEO()->helpers->product->is_premium() && $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ); + +/* translators: %1$s expands to Yoast SEO. */ +$wpseo_extensions_header = sprintf( __( '%1$s Extensions', 'wordpress-seo' ), 'Yoast SEO' ); +$new_tab_message = sprintf( + '%1$s', + /* translators: Hidden accessibility text. */ + esc_html__( '(Opens in a new browser tab)', 'wordpress-seo' ) +); + +$sale_badge = ''; +$premium_sale_badge = ''; + +if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { + /* translators: %1$s expands to opening span, %2$s expands to closing span */ + $sale_badge_span = sprintf( esc_html__( '%1$sSALE 30%% OFF!%2$s', 'wordpress-seo' ), '', '' ); + + $sale_badge = '
      ' . $sale_badge_span . '
      '; + + $premium_sale_badge = ( $has_valid_premium_subscription ) ? '' : $sale_badge; +} + +?> + +
      + +

      + +
      +
      + +

      + + +

      + +
        +
      • + ', + '' + ); + ?> +
      • +
      • + ', + '' + ); + ?> +
      • +
      • + ', + '' + ); + ?> +
      • +
      • + ', + '' + ); + ?> +
      • +
      • + ', + '' + ); + ?> +
      • +
      • + ', + '' + ); + ?> +
      • +
      + + is_installed( WPSEO_Addon_Manager::PREMIUM_SLUG ) ) : ?> +
      + + +
      + + + + +
      + + + + + + + + + '; + ?> + + + + + + + +

      + +

      + +
      + + + +
      +

      + ', + '', + 'Yoast SEO' + ); + ?> +

      + + $extension ) : + + // Skip the "All the plugins" card if the user has already all the plugins active. + if ( $slug === 'yoast-seo-plugin-subscription' && $number_plugins_active === $number_plugins_total ) { + continue; + } + ?> +
      + has_valid_subscription( $slug ) || ! $addon_manager->is_installed( $slug ) ) : ?> + + +

      + + +

      +
        + +
      • + +
      + +
      + is_installed( $slug ) ) : ?> +
      + + has_valid_subscription( $slug ) ) : + ++$number_plugins_active; + ?> +
      + + + + +
      + + + + + + + '; + ?> + + +

      + +

      + + + + + +
      +
      + +
      +
      + +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/paper-collapsible.php b/wp/wp-content/plugins/wordpress-seo/admin/views/paper-collapsible.php new file mode 100644 index 00000000..e8e3fea4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/paper-collapsible.php @@ -0,0 +1,79 @@ + +
      > + + %4$s%5$s ', + esc_attr( 'collapsible-header ' . $collapsible_header_class ), + // phpcs:ignore WordPress.Security.EscapeOutput -- $button_id_attr is escaped above. + $button_id_attr, + esc_attr( $collapsible_config['expanded'] ), + // phpcs:ignore WordPress.Security.EscapeOutput -- $help_text is an instance of WPSEO_Admin_Help_Panel, which escapes it's own output. + $help_text->get_button_html(), + esc_html( $title ) . wp_kses_post( $title_after ), + wp_kses_post( $collapsible_config['toggle_icon'] ) + ); + } + else { + echo '

      ', + esc_html( $title ), + wp_kses_post( $title_after ), + // phpcs:ignore WordPress.Security.EscapeOutput -- $help_text is an instance of WPSEO_Admin_Help_Panel, which escapes it's own output. + $help_text->get_button_html(), + '

      '; + } + } + ?> + get_panel_html(); + + $container_id_attr = ''; + if ( ! empty( $paper_id ) ) { + $container_id_attr = sprintf( ' id="%s"', esc_attr( $paper_id_prefix . $paper_id . '-container' ) ); + } + + printf( + '%3$s
      ', + // phpcs:ignore WordPress.Security.EscapeOutput -- $container_id_attr is escaped above. + $container_id_attr, + esc_attr( 'paper-container ' . $collapsible_config['class'] ), + $content + ); + ?> + + diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-errors.php b/wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-errors.php new file mode 100644 index 00000000..3db05a04 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-errors.php @@ -0,0 +1,29 @@ +%1$s', + /* translators: Hidden accessibility text. */ + esc_html__( 'Hide this item.', 'wordpress-seo' ) + ); + break; + + case 'dismissed': + $button = sprintf( + '', + /* translators: Hidden accessibility text. */ + esc_html__( 'Show this item.', 'wordpress-seo' ) + ); + break; + } + + $notifications .= sprintf( + '
      %4$s%5$s
      ', + esc_attr( $notification->get_id() ), + esc_attr( $notification->get_nonce() ), + esc_attr( $notification->get_json() ), + // This needs to be fixed in https://github.com/Yoast/wordpress-seo-premium/issues/2548. + $notification, + // Note: $button is properly escaped above. + $button + ); + } + + return $notifications; + } +} + +$wpseo_i18n_summary = $yoast_seo_i18n_issues; +if ( ! $yoast_seo_active ) { + $yoast_seo_dashicon = 'yes'; + $wpseo_i18n_summary = $yoast_seo_i18n_no_issues; +} + +?> +

      + + () +

      + +
      + + +

      + +
      + +
      + + esc_attr( $yoast_seo_type . '-dismissed' ), + 'paper_id_prefix' => 'yoast-', + 'class' => 'yoast-notifications-dismissed', + 'content' => _yoast_display_notifications( $yoast_seo_dismissed, 'dismissed' ), + 'collapsible' => true, + 'collapsible_header_class' => 'yoast-notification', + ] + ); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: get_output() output is properly escaped. + echo $dismissed_paper->get_output(); + } + ?> + + + +

      + + +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-warnings.php b/wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-warnings.php new file mode 100644 index 00000000..e960d6ae --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/partial-notifications-warnings.php @@ -0,0 +1,29 @@ + +
      +

      +
      +
      + + + +
      +
      + + +
      +

      + +

      +
      +
      +
      + + + + + + + + +
      + +

      + ', + '' + ); + ?> +

      + + +
      +
      + +
      + + +
      +
      + + +
      +
      +

       

      +
      + + +
      + +
      + + +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + + + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php new file mode 100644 index 00000000..262a37d3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/dashboard.php @@ -0,0 +1,44 @@ + + +
      +
      + +
      + +
      + +
      + +
      + +
      +
      + +
      +

      +

      + +

      +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/first-time-configuration.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/first-time-configuration.php new file mode 100644 index 00000000..f15c4bb5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/first-time-configuration.php @@ -0,0 +1,14 @@ +'; diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php new file mode 100644 index 00000000..b45c40ec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/dashboard/site-analysis.php @@ -0,0 +1,20 @@ +get_all(); + +?> +

      +
      + '; + printf( + /* translators: %1$s opens the link to the Yoast.com article about Crawl settings, %2$s closes the link, */ + esc_html__( '%1$sLearn more about crawl settings.%2$s', 'wordpress-seo' ), + '', + '' + ); + echo '

      '; + + /** + * Fires when displaying the crawl cleanup network tab. + * + * @param Yoast_Form $yform The yoast form object. + */ + do_action( 'wpseo_settings_tab_crawl_cleanup_network', $yform ); + ?> +
      +hidden( 'show_onboarding_notice', 'wpseo_show_onboarding_notice' ); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/features.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/features.php new file mode 100644 index 00000000..05ac5bbf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/features.php @@ -0,0 +1,115 @@ +get_all(); + +?> +

      +
      + helpers->product->is_premium(); + $premium_version = YoastSEO()->helpers->product->get_premium_version(); + + if ( $feature->premium && $feature->premium_version ) { + $not_supported_in_current_premium_version = $is_premium && version_compare( $premium_version, $feature->premium_version, '<' ); + + if ( $not_supported_in_current_premium_version ) { + continue; + } + } + + $help_text = esc_html( $feature->label ); + if ( ! empty( $feature->extra ) ) { + $help_text .= ' ' . $feature->extra; + } + if ( ! empty( $feature->read_more_label ) ) { + $url = $feature->read_more_url; + if ( ! empty( $feature->premium ) && $feature->premium === true ) { + $url = $feature->premium_url; + } + $help_text .= sprintf( + '%2$s', + esc_url( WPSEO_Shortlinker::get( $url ) ), + esc_html( $feature->read_more_label ) + ); + } + + $feature_help = new WPSEO_Admin_Help_Panel( + WPSEO_Option::ALLOW_KEY_PREFIX . $feature->setting, + /* translators: Hidden accessibility text; %s expands to a feature's name. */ + sprintf( esc_html__( 'Help on: %s', 'wordpress-seo' ), esc_html( $feature->name ) ), + $help_text + ); + + $name = $feature->name; + if ( ! empty( $feature->premium ) && $feature->premium === true ) { + $name .= ' ' . new Premium_Badge_Presenter( $feature->name ); + } + + if ( ! empty( $feature->in_beta ) && $feature->in_beta === true ) { + $name .= ' ' . new Beta_Badge_Presenter( $feature->name ); + } + + $disabled = false; + $show_premium_upsell = false; + $premium_upsell_url = ''; + $note_when_disabled = ''; + + if ( $feature->premium === true && YoastSEO()->helpers->product->is_premium() === false ) { + $disabled = true; + $show_premium_upsell = true; + $premium_upsell_url = WPSEO_Shortlinker::get( $feature->premium_upsell_url ); + } + + $preserve_disabled_value = false; + if ( $disabled ) { + $preserve_disabled_value = true; + } + + $yform->toggle_switch( + WPSEO_Option::ALLOW_KEY_PREFIX . $feature->setting, + [ + 'on' => __( 'Allow Control', 'wordpress-seo' ), + 'off' => __( 'Disable', 'wordpress-seo' ), + ], + $name, + $feature_help->get_button_html() . $feature_help->get_panel_html(), + [ + 'disabled' => $disabled, + 'preserve_disabled_value' => $preserve_disabled_value, + 'show_premium_upsell' => $show_premium_upsell, + 'premium_upsell_url' => $premium_upsell_url, + 'note_when_disabled' => $note_when_disabled, + ] + ); + } + ?> +
      +hidden( 'show_onboarding_notice', 'wpseo_show_onboarding_notice' ); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/general.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/general.php new file mode 100644 index 00000000..a73c722b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/general.php @@ -0,0 +1,56 @@ +'; + +/* + * {@internal Important: Make sure the options added to the array here are in line with the + * options set in the WPSEO_Option_MS::$allowed_access_options property.}} + */ +$yform->select( + 'access', + /* translators: %1$s expands to Yoast SEO */ + sprintf( __( 'Who should have access to the %1$s settings', 'wordpress-seo' ), 'Yoast SEO' ), + [ + 'admin' => __( 'Site Admins (default)', 'wordpress-seo' ), + 'superadmin' => __( 'Super Admins only', 'wordpress-seo' ), + ] +); + +if ( get_blog_count() <= 100 ) { + $network_admin = new Yoast_Network_Admin(); + + $yform->select( + 'defaultblog', + __( 'New sites in the network inherit their SEO settings from this site', 'wordpress-seo' ), + $network_admin->get_site_choices( true, true ) + ); + echo '

      ' . esc_html__( 'Choose the site whose settings you want to use as default for all sites that are added to your network. If you choose \'None\', the normal plugin defaults will be used.', 'wordpress-seo' ) . '

      '; +} +else { + $yform->textinput( 'defaultblog', __( 'New sites in the network inherit their SEO settings from this site', 'wordpress-seo' ) ); + echo '

      '; + printf( + /* translators: 1: link open tag; 2: link close tag. */ + esc_html__( 'Enter the %1$sSite ID%2$s for the site whose settings you want to use as default for all sites that are added to your network. Leave empty for none (i.e. the normal plugin defaults will be used).', 'wordpress-seo' ), + '', + '' + ); + echo '

      '; +} + +echo '

      ' . esc_html__( 'Take note:', 'wordpress-seo' ) . ' ' . esc_html__( 'Privacy sensitive (FB admins and such), theme specific (title rewrite) and a few very site specific settings will not be imported to new sites.', 'wordpress-seo' ) . '

      '; + +echo ''; diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/integrations.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/integrations.php new file mode 100644 index 00000000..be635eec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/integrations.php @@ -0,0 +1,103 @@ +get_all(); + +?> +

      +
      + label ); + + if ( ! empty( $integration->extra ) ) { + $help_text .= ' ' . $integration->extra; + } + + if ( ! empty( $integration->read_more_label ) ) { + $help_text .= ' '; + $help_text .= sprintf( + '%2$s', + esc_url( WPSEO_Shortlinker::get( $integration->read_more_url ) ), + esc_html( $integration->read_more_label ) + ); + } + + $feature_help = new WPSEO_Admin_Help_Panel( + WPSEO_Option::ALLOW_KEY_PREFIX . $integration->setting, + /* translators: Hidden accessibility text; %s expands to an integration's name. */ + sprintf( esc_html__( 'Help on: %s', 'wordpress-seo' ), esc_html( $integration->name ) ), + $help_text + ); + + $name = $integration->name; + if ( ! empty( $integration->premium ) && $integration->premium === true ) { + $name .= ' ' . new Premium_Badge_Presenter( $integration->name ); + } + + if ( ! empty( $integration->new ) && $integration->new === true ) { + $name .= ' ' . new Badge_Presenter( $integration->name ); + } + + $disabled = $integration->disabled; + $show_premium_upsell = false; + $premium_upsell_url = ''; + + if ( $integration->premium === true && YoastSEO()->helpers->product->is_premium() === false ) { + $disabled = true; + $show_premium_upsell = true; + $premium_upsell_url = WPSEO_Shortlinker::get( $integration->premium_upsell_url ); + } + + $preserve_disabled_value = false; + if ( $disabled ) { + $preserve_disabled_value = true; + } + + $yform->toggle_switch( + WPSEO_Option::ALLOW_KEY_PREFIX . $integration->setting, + [ + 'on' => __( 'Allow Control', 'wordpress-seo' ), + 'off' => __( 'Disable', 'wordpress-seo' ), + ], + $name, + $feature_help->get_button_html() . $feature_help->get_panel_html(), + [ + 'disabled' => $disabled, + 'preserve_disabled_value' => $preserve_disabled_value, + 'show_premium_upsell' => $show_premium_upsell, + 'premium_upsell_url' => $premium_upsell_url, + ] + ); + + do_action( 'Yoast\WP\SEO\admin_network_integration_after', $integration ); + } + ?> +
      +hidden( 'show_onboarding_notice', 'wpseo_show_onboarding_notice' ); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/restore-site.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/restore-site.php new file mode 100644 index 00000000..ce6701a9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/network/restore-site.php @@ -0,0 +1,32 @@ +' . esc_html__( 'Using this form you can reset a site to the default SEO settings.', 'wordpress-seo' ) . '

      '; + +if ( get_blog_count() <= 100 ) { + $network_admin = new Yoast_Network_Admin(); + + $yform->select( + 'site_id', + __( 'Site ID', 'wordpress-seo' ), + $network_admin->get_site_choices( false, true ) + ); +} +else { + $yform->textinput( 'site_id', __( 'Site ID', 'wordpress-seo' ) ); +} + +wp_nonce_field( 'wpseo-network-restore', 'restore_site_nonce', false ); +echo ''; diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php new file mode 100644 index 00000000..9cac6366 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/import-seo.php @@ -0,0 +1,127 @@ +detect(); +if ( count( $import_check->needs_import ) === 0 ) { + echo '

      ', esc_html__( 'Import from other SEO plugins', 'wordpress-seo' ), '

      '; + echo '

      '; + printf( + /* translators: %s expands to Yoast SEO */ + esc_html__( '%s did not detect any plugin data from plugins it can import from.', 'wordpress-seo' ), + 'Yoast SEO' + ); + echo '

      '; + + return; +} + +/** + * Creates a select box given a name and plugins array. + * + * @param string $name Name field for the select field. + * @param array $plugins An array of plugins and classes. + * + * @return void + */ +function wpseo_import_external_select( $name, $plugins ) { + esc_html_e( 'Plugin: ', 'wordpress-seo' ); + echo ''; +} + +?> +

      +

      + +

      + +
      +

      +

      + +

      +
      + +
      +

      +

      + +

      +
      + needs_import ); + ?> + + +
      +
      + +
      +

      +

      + +

      +
      + +
      +

      +

      + ', + '' + ); + ?> +

      +
      + +
      +

      +

      + +

      +
      + needs_import ); + ?> + +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php new file mode 100644 index 00000000..d0a41961 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-export.php @@ -0,0 +1,39 @@ +export(); + return; +} + +$wpseo_export_phrase = sprintf( + /* translators: %1$s expands to Yoast SEO */ + __( 'Export your %1$s settings here, to copy them on another site.', 'wordpress-seo' ), + 'Yoast SEO' +); +?> + +

      +
      + + + +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php new file mode 100644 index 00000000..18a5bfe9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tabs/tool/wpseo-import.php @@ -0,0 +1,46 @@ + +

      + +

      + +
      + +
      +
      + +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php new file mode 100644 index 00000000..354ba376 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tool-bulk-editor.php @@ -0,0 +1,120 @@ + $yoast_free_input_fields, + 'nonce' => wp_create_nonce( 'bulk-editor-table' ), +]; + +$wpseo_bulk_titles_table = new WPSEO_Bulk_Title_Editor_List_Table( $yoast_bulk_editor_arguments ); +$wpseo_bulk_description_table = new WPSEO_Bulk_Description_List_Table( $yoast_bulk_editor_arguments ); + +$yoast_free_screen_reader_content = [ + 'heading_views' => __( 'Filter posts list', 'wordpress-seo' ), + 'heading_pagination' => __( 'Posts list navigation', 'wordpress-seo' ), + 'heading_list' => __( 'Posts list', 'wordpress-seo' ), +]; +get_current_screen()->set_screen_reader_content( $yoast_free_screen_reader_content ); + +if ( ! empty( $_REQUEST['_wp_http_referer'] ) && isset( $_SERVER['REQUEST_URI'] ) ) { + $request_uri = sanitize_file_name( wp_unslash( $_SERVER['REQUEST_URI'] ) ); + + wp_redirect( + remove_query_arg( + [ '_wp_http_referer', '_wpnonce' ], + $request_uri + ) + ); + exit; +} + +/** + * Renders a bulk editor tab. + * + * @param WPSEO_Bulk_List_Table $table The table to render. + * @param string $id The id for the tab. + * + * @return void + */ +function wpseo_get_rendered_tab( $table, $id ) { + ?> +
      + show_page(); + ?> +
      + + + +

      + +
      + + + +
      + + +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php new file mode 100644 index 00000000..d28b5bf7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tool-file-editor.php @@ -0,0 +1,244 @@ +admin_header( false, 'wpseo_ms' ); +} +else { + $action_url = admin_url( 'admin.php?page=wpseo_tools&tool=file-editor' ); +} + +if ( isset( $msg ) && ! empty( $msg ) ) { + echo '

      ', esc_html( $msg ), '

      '; +} + +// N.B.: "robots.txt" is a fixed file name and should not be translatable. +echo '

      robots.txt

      '; + +if ( ! file_exists( $robots_file ) ) { + if ( is_writable( $home_path ) ) { + echo '
      '; + wp_nonce_field( 'wpseo_create_robots', '_wpnonce', true, true ); + echo '

      '; + printf( + /* translators: %s expands to robots.txt. */ + esc_html__( 'You don\'t have a %s file, create one here:', 'wordpress-seo' ), + 'robots.txt' + ); + echo '

      '; + + printf( + '', + sprintf( + /* translators: %s expands to robots.txt. */ + esc_attr__( 'Create %s file', 'wordpress-seo' ), + 'robots.txt' + ) + ); + echo '
      '; + } + else { + echo '

      '; + printf( + /* translators: %s expands to robots.txt. */ + esc_html__( 'If you had a %s file and it was editable, you could edit it from here.', 'wordpress-seo' ), + 'robots.txt' + ); + echo '

      '; + } +} +else { + $f = fopen( $robots_file, 'r' ); + + $content = ''; + if ( filesize( $robots_file ) > 0 ) { + $content = fread( $f, filesize( $robots_file ) ); + } + + if ( ! is_writable( $robots_file ) ) { + echo '

      '; + printf( + /* translators: %s expands to robots.txt. */ + esc_html__( 'If your %s were writable, you could edit it from here.', 'wordpress-seo' ), + 'robots.txt' + ); + echo '

      '; + echo '
      '; + } + else { + echo '
      '; + wp_nonce_field( 'wpseo-robotstxt', '_wpnonce', true, true ); + echo ''; + echo '
      '; + printf( + '
      ', + sprintf( + /* translators: %s expands to robots.txt. */ + esc_attr__( 'Save changes to %s', 'wordpress-seo' ), + 'robots.txt' + ) + ); + echo '
      '; + } +} +if ( ! WPSEO_Utils::is_nginx() ) { + + echo '

      '; + printf( + /* translators: %s expands to ".htaccess". */ + esc_html__( '%s file', 'wordpress-seo' ), + '.htaccess' + ); + echo '

      '; + + if ( file_exists( $ht_access_file ) ) { + $f = fopen( $ht_access_file, 'r' ); + + $contentht = ''; + if ( filesize( $ht_access_file ) > 0 ) { + $contentht = fread( $f, filesize( $ht_access_file ) ); + } + + if ( ! is_writable( $ht_access_file ) ) { + echo '

      '; + printf( + /* translators: %s expands to ".htaccess". */ + esc_html__( 'If your %s were writable, you could edit it from here.', 'wordpress-seo' ), + '.htaccess' + ); + echo '

      '; + echo '
      '; + } + else { + echo '
      '; + wp_nonce_field( 'wpseo-htaccess', '_wpnonce', true, true ); + echo ''; + echo '
      '; + printf( + '
      ', + sprintf( + /* translators: %s expands to ".htaccess". */ + esc_attr__( 'Save changes to %s', 'wordpress-seo' ), + '.htaccess' + ) + ); + echo '
      '; + } + } + else { + echo '

      '; + printf( + /* translators: %s expands to ".htaccess". */ + esc_html__( 'If you had a %s file and it was editable, you could edit it from here.', 'wordpress-seo' ), + '.htaccess' + ); + echo '

      '; + } +} + +if ( is_multisite() ) { + $yform->admin_footer( false ); +} diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php b/wp/wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php new file mode 100644 index 00000000..d2e0fd84 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/tool-import-export.php @@ -0,0 +1,123 @@ +import(); +} + +/** + * Allow custom import actions. + * + * @param WPSEO_Import_Status $yoast_seo_import Contains info about the handled import. + */ +$yoast_seo_import = apply_filters( 'wpseo_handle_import', $yoast_seo_import ); + +if ( $yoast_seo_import ) { + + $yoast_seo_message = ''; + if ( $yoast_seo_import->status instanceof WPSEO_Import_Status ) { + $yoast_seo_message = $yoast_seo_import->status->get_msg(); + } + + /** + * Allow customization of import/export message. + * + * @param string $yoast_seo_msg The message. + */ + $yoast_seo_msg = apply_filters( 'wpseo_import_message', $yoast_seo_message ); + + if ( ! empty( $yoast_seo_msg ) ) { + $yoast_seo_status = 'error'; + if ( $yoast_seo_import->status->status ) { + $yoast_seo_status = 'updated'; + } + + $yoast_seo_class = 'message ' . $yoast_seo_status; + + echo '

      ', esc_html( $yoast_seo_msg ), '

      '; + } +} + +$yoast_seo_tabs = [ + 'wpseo-import' => [ + 'label' => __( 'Import settings', 'wordpress-seo' ), + ], + 'wpseo-export' => [ + 'label' => __( 'Export settings', 'wordpress-seo' ), + ], + 'import-seo' => [ + 'label' => __( 'Import from other SEO plugins', 'wordpress-seo' ), + ], +]; + +?> +

      + + + + $tab ) { + printf( '
      ', esc_attr( $identifier ) ); + require_once WPSEO_PATH . 'admin/views/tabs/tool/' . $identifier . '.php'; + echo '
      '; +} + +/** + * Allow adding a custom import tab. + */ +do_action( 'wpseo_import_tab_content' ); diff --git a/wp/wp-content/plugins/wordpress-seo/admin/views/user-profile.php b/wp/wp-content/plugins/wordpress-seo/admin/views/user-profile.php new file mode 100644 index 00000000..2f4fb102 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/views/user-profile.php @@ -0,0 +1,79 @@ + + +
      + +

      + + + +
      + + +
      + + ID ) === 'on' ) ? 'checked' : ''; ?> /> +
      + + + + ID ) === 'on' ) ? 'checked' : ''; ?> /> + +
      +

      + +

      + + + + ID ) === 'on' ) ? 'checked' : ''; ?> /> + +
      +

      + +

      + + + + ID ) === 'on' ) ? 'checked' : ''; ?> /> + +
      +

      + +

      + + + +
      diff --git a/wp/wp-content/plugins/wordpress-seo/admin/watchers/class-slug-change-watcher.php b/wp/wp-content/plugins/wordpress-seo/admin/watchers/class-slug-change-watcher.php new file mode 100644 index 00000000..68d18616 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/admin/watchers/class-slug-change-watcher.php @@ -0,0 +1,256 @@ +helpers->product->is_premium() ) { + return; + } + + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + + // Detect a post trash. + add_action( 'wp_trash_post', [ $this, 'detect_post_trash' ] ); + + // Detect a post delete. + add_action( 'before_delete_post', [ $this, 'detect_post_delete' ] ); + + // Detects deletion of a term. + add_action( 'delete_term_taxonomy', [ $this, 'detect_term_delete' ] ); + } + + /** + * Enqueues the quick edit handler. + * + * @return void + */ + public function enqueue_assets() { + global $pagenow; + + if ( ! in_array( $pagenow, [ 'edit.php', 'edit-tags.php' ], true ) ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_script( 'quick-edit-handler' ); + } + + /** + * Shows a message when a post is about to get trashed. + * + * @param int $post_id The current post ID. + * + * @return void + */ + public function detect_post_trash( $post_id ) { + if ( ! $this->is_post_viewable( $post_id ) ) { + return; + } + + $post_label = $this->get_post_type_label( get_post_type( $post_id ) ); + + /* translators: %1$s expands to the translated name of the post type. */ + $first_sentence = sprintf( __( 'You just trashed a %1$s.', 'wordpress-seo' ), $post_label ); + $second_sentence = __( 'Search engines and other websites can still send traffic to your trashed content.', 'wordpress-seo' ); + $message = $this->get_message( $first_sentence, $second_sentence ); + + $this->add_notification( $message ); + } + + /** + * Shows a message when a post is about to get trashed. + * + * @param int $post_id The current post ID. + * + * @return void + */ + public function detect_post_delete( $post_id ) { + if ( ! $this->is_post_viewable( $post_id ) ) { + return; + } + + $post_label = $this->get_post_type_label( get_post_type( $post_id ) ); + + /* translators: %1$s expands to the translated name of the post type. */ + $first_sentence = sprintf( __( 'You just deleted a %1$s.', 'wordpress-seo' ), $post_label ); + $second_sentence = __( 'Search engines and other websites can still send traffic to your deleted content.', 'wordpress-seo' ); + $message = $this->get_message( $first_sentence, $second_sentence ); + + $this->add_notification( $message ); + } + + /** + * Shows a message when a term is about to get deleted. + * + * @param int $term_taxonomy_id The term taxonomy ID that will be deleted. + * + * @return void + */ + public function detect_term_delete( $term_taxonomy_id ) { + if ( ! $this->is_term_viewable( $term_taxonomy_id ) ) { + return; + } + + $term = get_term_by( 'term_taxonomy_id', (int) $term_taxonomy_id ); + $term_label = $this->get_taxonomy_label_for_term( $term->term_id ); + + /* translators: %1$s expands to the translated name of the term. */ + $first_sentence = sprintf( __( 'You just deleted a %1$s.', 'wordpress-seo' ), $term_label ); + $second_sentence = __( 'Search engines and other websites can still send traffic to your deleted content.', 'wordpress-seo' ); + $message = $this->get_message( $first_sentence, $second_sentence ); + + $this->add_notification( $message ); + } + + /** + * Checks if the post is viewable. + * + * @param string $post_id The post id to check. + * + * @return bool Whether the post is viewable or not. + */ + protected function is_post_viewable( $post_id ) { + $post_type = get_post_type( $post_id ); + if ( ! WPSEO_Post_Type::is_post_type_accessible( $post_type ) ) { + return false; + } + + $post_status = get_post_status( $post_id ); + if ( ! $this->check_visible_post_status( $post_status ) ) { + return false; + } + + return true; + } + + /** + * Checks if the term is viewable. + * + * @param int $term_taxonomy_id The term taxonomy ID to check. + * + * @return bool Whether the term is viewable or not. + */ + protected function is_term_viewable( $term_taxonomy_id ) { + $term = get_term_by( 'term_taxonomy_id', (int) $term_taxonomy_id ); + + if ( ! $term || is_wp_error( $term ) ) { + return false; + } + + $taxonomy = get_taxonomy( $term->taxonomy ); + if ( ! $taxonomy ) { + return false; + } + + return $taxonomy->publicly_queryable || $taxonomy->public; + } + + /** + * Gets the taxonomy label to use for a term. + * + * @param int $term_id The term ID. + * + * @return string The taxonomy's singular label. + */ + protected function get_taxonomy_label_for_term( $term_id ) { + $term = get_term( $term_id ); + $taxonomy = get_taxonomy( $term->taxonomy ); + + return $taxonomy->labels->singular_name; + } + + /** + * Retrieves the singular post type label. + * + * @param string $post_type Post type to retrieve label from. + * + * @return string The singular post type name. + */ + protected function get_post_type_label( $post_type ) { + $post_type_object = get_post_type_object( $post_type ); + + // If the post type of this post wasn't registered default back to post. + if ( $post_type_object === null ) { + $post_type_object = get_post_type_object( 'post' ); + } + + return $post_type_object->labels->singular_name; + } + + /** + * Checks whether the given post status is visible or not. + * + * @param string $post_status The post status to check. + * + * @return bool Whether or not the post is visible. + */ + protected function check_visible_post_status( $post_status ) { + $visible_post_statuses = [ + 'publish', + 'static', + 'private', + ]; + + return in_array( $post_status, $visible_post_statuses, true ); + } + + /** + * Returns the message around changed URLs. + * + * @param string $first_sentence The first sentence of the notification. + * @param string $second_sentence The second sentence of the notification. + * + * @return string The full notification. + */ + protected function get_message( $first_sentence, $second_sentence ) { + return '

      ' . __( 'Make sure you don\'t miss out on traffic!', 'wordpress-seo' ) . '

      ' + . '

      ' + . $first_sentence + . ' ' . $second_sentence + . ' ' . __( 'You should create a redirect to ensure your visitors do not get a 404 error when they click on the no longer working URL.', 'wordpress-seo' ) + /* translators: %s expands to Yoast SEO Premium */ + . ' ' . sprintf( __( 'With %s, you can easily create such redirects.', 'wordpress-seo' ), 'Yoast SEO Premium' ) + . '

      ' + . '

      ' + /* translators: %s expands to Yoast SEO Premium */ + . sprintf( __( 'Get %s', 'wordpress-seo' ), 'Yoast SEO Premium' ) + /* translators: Hidden accessibility text. */ + . '' . __( '(Opens in a new browser tab)', 'wordpress-seo' ) . '' + . '' + . '

      '; + } + + /** + * Adds a notification to be shown on the next page request since posts are updated in an ajax request. + * + * @param string $message The message to add to the notification. + * + * @return void + */ + protected function add_notification( $message ) { + $notification = new Yoast_Notification( + $message, + [ + 'type' => 'notice-warning is-dismissible', + 'yoast_branding' => true, + ] + ); + + $notification_center = Yoast_Notification_Center::get(); + $notification_center->add_notification( $notification ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/blocks/dynamic-blocks/breadcrumbs/block.json b/wp/wp-content/plugins/wordpress-seo/blocks/dynamic-blocks/breadcrumbs/block.json new file mode 100644 index 00000000..33ecb48c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/blocks/dynamic-blocks/breadcrumbs/block.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "version": "22.8", + "name": "yoast-seo/breadcrumbs", + "title": "Yoast Breadcrumbs", + "description": "Adds the Yoast SEO breadcrumbs to your template or content.", + "category": "yoast-internal-linking-blocks", + "icon": "admin-links", + "keywords": [ + "SEO", + "breadcrumbs", + "internal linking", + "site structure" + ], + "textdomain": "wordpress-seo", + "attributes": { + "className": { + "type": "string" + } + }, + "example": { + "attributes": {} + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/faq/block.json b/wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/faq/block.json new file mode 100644 index 00000000..649f1226 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/faq/block.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "version": "22.7", + "name": "yoast/faq-block", + "title": "Yoast FAQ", + "description": "List your Frequently Asked Questions in an SEO-friendly way.", + "category": "yoast-structured-data-blocks", + "icon": "editor-ul", + "keywords": [ + "FAQ", + "Frequently Asked Questions", + "Schema", + "SEO", + "Structured Data" + ], + "textdomain": "wordpress-seo", + "attributes": { + "questions": { + "type": "array" + }, + "additionalListCssClasses": { + "type": "string" + } + }, + "example": { + "attributes": { + "steps": [ + { + "id": "faq-question-1", + "question": [ ], + "answer": [ ] + }, + { + "id": "faq-question-2", + "question": [ ], + "answer": [ ] + } + ] + } + }, + "editorScript": "yoast-seo-faq-block", + "editorStyle": "yoast-seo-structured-data-blocks" +} diff --git a/wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/how-to/block.json b/wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/how-to/block.json new file mode 100644 index 00000000..7a1cfe5e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/blocks/structured-data-blocks/how-to/block.json @@ -0,0 +1,76 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "version": "22.7", + "name": "yoast/how-to-block", + "title": "Yoast How-to", + "description": "Create a How-to guide in an SEO-friendly way. You can only use one How-to block per post.", + "category": "yoast-structured-data-blocks", + "icon": "editor-ol", + "keywords": [ + "How-to", + "How to", + "Schema", + "SEO", + "Structured Data" + ], + "supports": { + "multiple": false + }, + "textdomain": "wordpress-seo", + "attributes": { + "hasDuration": { + "type": "boolean" + }, + "days": { + "type": "string" + }, + "hours": { + "type": "string" + }, + "minutes": { + "type": "string" + }, + "description": { + "type": "string", + "source": "html", + "selector": ".schema-how-to-description" + }, + "jsonDescription": { + "type": "string" + }, + "steps": { + "type": "array" + }, + "additionalListCssClasses": { + "type": "string" + }, + "unorderedList": { + "type": "boolean" + }, + "durationText": { + "type": "string" + }, + "defaultDurationText": { + "type": "string" + } + }, + "example": { + "attributes": { + "steps": [ + { + "id": "how-to-step-example-1", + "name": [ ], + "text": [ ] + }, + { + "id": "how-to-step-example-2", + "name": [ ], + "text": [ ] + } + ] + } + }, + "editorScript": "yoast-seo-how-to-block", + "editorStyle": "yoast-seo-structured-data-blocks" +} diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340-rtl.css new file mode 100644 index 00000000..752312db --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340-rtl.css @@ -0,0 +1 @@ +.seo_page_wpseo_page_academy{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));z-index:-1}.seo_page_wpseo_page_academy #wpcontent{padding-right:0!important}.seo_page_wpseo_page_academy #wpfooter{padding-left:1rem}@media (min-width:768px){.seo_page_wpseo_page_academy #wpfooter{padding-right:17rem;padding-left:2rem}}@media screen and (max-width:782px){.seo_page_wpseo_page_academy .wp-responsive-open #wpbody{left:-190px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340.css new file mode 100644 index 00000000..6d15e7ef --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/academy-2340.css @@ -0,0 +1 @@ +.seo_page_wpseo_page_academy{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));z-index:-1}.seo_page_wpseo_page_academy #wpcontent{padding-left:0!important}.seo_page_wpseo_page_academy #wpfooter{padding-right:1rem}@media (min-width:768px){.seo_page_wpseo_page_academy #wpfooter{padding-left:17rem;padding-right:2rem}}@media screen and (max-width:782px){.seo_page_wpseo_page_academy .wp-responsive-open #wpbody{right:-190px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340-rtl.css new file mode 100644 index 00000000..4103d80d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{word-wrap:break-word;-webkit-font-smoothing:subpixel-antialiased;background:#000c;border-radius:3px;color:#fff;content:attr(aria-label);display:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;letter-spacing:normal;opacity:0;padding:6px 8px 5px;pointer-events:none;position:absolute;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;white-space:pre;z-index:1000000}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{border:5px solid #0000;color:#000c;content:"\00a0";display:none;height:0;opacity:0;pointer-events:none;position:absolute;width:0;z-index:1000001}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{animation-duration:.1s;animation-fill-mode:forwards;animation-name:yoast-tooltip-appear;animation-timing-function:ease-in;display:inline-block;text-decoration:none}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{animation:none;opacity:1}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{margin-top:5px;left:50%;top:100%}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{border-bottom-color:#000c;bottom:-5px;margin-left:-5px;left:50%;top:auto}.yoast-tooltip-se:after{right:50%;margin-right:-15px;left:auto}.yoast-tooltip-sw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{bottom:100%;margin-bottom:5px;left:50%}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{border-top-color:#000c;bottom:auto;margin-left:-5px;left:50%;top:-5px}.yoast-tooltip-ne:after{right:50%;margin-right:-15px;left:auto}.yoast-tooltip-nw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{transform:translateX(-50%)}.yoast-tooltip-w:after{bottom:50%;margin-left:5px;left:100%;transform:translateY(50%)}.yoast-tooltip-w:before{border-right-color:#000c;bottom:50%;right:-5px;margin-top:-5px;top:50%}.yoast-tooltip-e:after{bottom:50%;right:100%;margin-right:5px;transform:translateY(50%)}.yoast-tooltip-e:before{border-left-color:#000c;bottom:50%;margin-top:-5px;left:-5px;top:50%}.yoast-tooltip-multiline:after{word-wrap:normal;border-collapse:initial;max-width:250px;white-space:pre-line;width:250px;width:max-content;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{right:50%;left:auto;transform:translateX(50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{left:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.yoast-tooltip-w:after{margin-left:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.rtl .yst-icon-rtl{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.wpseo-premium-indicator{display:inline-block;height:1px;width:1px}#adminmenu .wpseo-premium-indicator{color:inherit;margin:-2px 2px -3px 0}.wpseo-premium-indicator svg{display:none;height:100%;width:auto}.yoast-measure{max-width:600px}.yoast-measure.padded{max-width:632px}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{font-size:14px;font-weight:600;margin:0 0 0 10px}.wpseo-premium-popup-title{font-size:1.3em!important;font-weight:600!important;margin:1em 0!important;padding:0!important}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{height:auto;max-width:100%}.yoast-label-strong{font-weight:600}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{height:0;overflow:hidden;padding-bottom:56.25%;position:relative}.yoast-video-container iframe{height:100%;right:0;position:absolute;top:0;width:100%}.yoast-settings{margin-bottom:2em;padding-right:220px}.yoast-settings h2{margin-bottom:0;margin-right:-220px}.yoast-settings label{color:#23282d;display:inline-block;font-size:14px;font-weight:600;line-height:1.3;margin-right:-220px;margin-left:6px;padding-left:10px;padding-top:4px;vertical-align:top;width:200px}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio,.yoast-settings fieldset,.yoast-settings input[type=text],.yoast-settings label,.yoast-settings select,.yoast-settings textarea{margin-bottom:.5em;margin-top:2em}.yoast-settings__textarea--medium{max-width:600px;width:100%}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{position:relative;top:1px;vertical-align:top}.yoast-settings__group--checkbox,.yoast-settings__group--radio{padding-top:1em}.yoast-settings__group--checkbox .yoast-settings__checkbox,.yoast-settings__group--radio .yoast-settings__radio{margin:0 0 10px 4px}.yoast-settings__checkbox+label,.yoast-settings__radio+label{margin-right:0;margin-left:0;max-width:calc(100% - 25px);padding:0;width:auto}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{font-weight:400;margin-bottom:10px;margin-top:0}.yoast-settings legend{color:#23282d;font-size:14px;font-weight:600}.yoast-settings .description{font-size:14px;margin-top:0}td .wpseo-score-icon{background:#888;border-radius:50%;display:inline-block;height:12px;line-height:16px;margin-right:5px;margin-top:3px;width:12px}.fixed th.column-wpseo-linked,.fixed th.column-wpseo-links,.fixed th.column-wpseo-score,.fixed th.column-wpseo-score-readability{padding:0;width:3em}.fixed th.column-wpseo-score-readability.sortable,.fixed th.column-wpseo-score-readability.sorted,.fixed th.column-wpseo-score.sortable,.fixed th.column-wpseo-score.sorted{width:3.5em}th.column-wpseo-linked a,th.column-wpseo-links a,th.column-wpseo-score .yoast-tooltip,th.column-wpseo-score-readability .yoast-tooltip{display:inline-block;overflow:visible;padding:8px 0;vertical-align:middle}th.column-wpseo-score .yoast-tooltip,th.column-wpseo-score-readability .yoast-tooltip{padding:8px 11px}th.column-wpseo-score-readability.sortable .yoast-tooltip,th.column-wpseo-score-readability.sorted .yoast-tooltip,th.column-wpseo-score.sortable .yoast-tooltip,th.column-wpseo-score.sorted .yoast-tooltip{padding-left:0}.column-wpseo-links .yoast-tooltip-multiline:after{max-width:160px}.column-wpseo-linked .yoast-tooltip-multiline:after{max-width:170px}.yoast-column-header-has-tooltip{position:relative}.manage-column .yoast-column-header-has-tooltip:before{color:#444;content:"";display:inline-block;height:20px;padding:0;text-decoration:none!important;vertical-align:top;width:20px}.manage-column .yoast-linked-to:before{background:#0000 url(../../images/link-out-icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-linked-from:before{background:#0000 url(../../images/link-in-icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-column-seo-score:before{background:#0000 url(../../images/Yoast_SEO_negative_icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-column-readability:before{background:#0000 url(../../images/readability-icon.svg) no-repeat 100% 0;background-size:20px}td.column-wpseo-linked,td.column-wpseo-links{word-wrap:normal}@media screen and (max-width:782px){.yoast-settings{padding-right:0}.yoast-settings h2{margin-right:0}.yoast-settings label{margin-right:0;margin-left:0;padding:0;width:auto}.yoast .yoast-settings__radio,.yoast-settings__radio+label{margin-bottom:1em}.yoast-settings__checkbox+label,.yoast-settings__radio+label{max-width:calc(100% - 35px);padding-top:8px}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{padding-top:4px}.yoast-settings input[type=text],.yoast-settings select,.yoast-settings textarea{box-sizing:border-box;display:block;line-height:1.5;margin-bottom:0;margin-top:0;max-width:none;padding:7px 10px;width:100%}.screen-reader-text.wpseo-score-text{-webkit-clip-path:none;clip-path:none;height:auto;margin:0;position:static!important;width:auto}}.react-tabs__tab-panel{margin:0 auto;max-width:900px}.react-tabs__tab-panel li{max-width:none!important}.contact-premium-support{text-align:center}.contact-premium-support__content{font-size:.9375rem;line-height:1.4;margin:0 auto 1.5em}.contact-premium-support__content:nth-child(2){max-width:610px}.contact-premium-support__content:nth-child(3){max-width:560px}.contact-premium-support .contact-premium-support__button{margin-bottom:48px}.wpseo-premium-description{margin-top:.5em}.wpseo-premium-advantages-list{list-style:disc;padding-right:1.5em}.yoast_help.yoast-help-button,.yoast_help.yoast-help-link{background:#0000;border:0;box-shadow:none;color:#72777c;cursor:pointer;height:20px;margin:0;outline:none;padding:0;position:relative;vertical-align:top;width:20px}.yoast-section .yoast_help.yoast-help-button{float:left}.help-button-inline .yoast_help.yoast-help-button{margin-top:-4px}.yoast-section .yoast_help.yoast-help-button{margin-top:-44px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-left:6px}.yoast_help .yoast-help-icon:before{content:"\f223";right:0;padding:4px;position:absolute;top:0}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover,.yoast_help.yoast-help-link:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus .yoast-help-icon:before,.yoast_help.yoast-help-link:focus .yoast-help-icon:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc}.yoast-help-panel{clear:both;display:none;font-weight:400;max-width:30em!important;padding:0 0 1em;white-space:normal}.wpseo-admin-page .yoast-help-panel{max-width:600px!important}.copy-home-meta-description{margin-top:1em}.copy-home-meta-description .yoast-help-panel{max-width:400px!important}.yoast-modal_is-open{overflow:hidden}.yoast-notification .yoast-seo-icon{float:right;margin:20px 10px}.yoast-notification .yoast-seo-icon-wrap{margin:0 85px 0 0}.yoast-button-upsell{align-items:center;background-color:#fec228;border-radius:4px;box-shadow:inset 0 -4px 0 #0003;box-sizing:border-box;color:#000;display:inline-flex;filter:drop-shadow(0 2px 4px rgba(0,0,0,.2));font-family:Arial,sans-serif;font-size:16px;justify-content:center;line-height:1.5;min-height:48px;padding:8px 1em;text-decoration:none}.yoast-button-upsell:active,.yoast-button-upsell:focus,.yoast-button-upsell:hover{background-color:#f2ae01;color:#000}.yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 #0003,0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc}.yoast-button-upsell:active{box-shadow:none;filter:none;transform:translateY(1px)}.yoast-button-upsell#wpseo-premium-button{color:#000}.yoast-button-upsell__caret{background:#0000 var(--yoast-svg-icon-caret-right) center no-repeat;flex-shrink:0;height:16px;margin:0 6px 0 -2px;width:8px}.rtl .yoast-button-upsell__caret{background-image:var(--yoast-svg-icon-caret-left)}body.folded .wpseo-admin-submit-fixed{right:36px}@media screen and (max-width:782px){body.folded .wpseo-admin-submit-fixed{right:0}}.wpseo-admin-submit{align-items:baseline;display:flex;justify-content:flex-start;margin:0;padding:16px 0;z-index:5}.wpseo-admin-submit.wpseo-admin-submit-fixed{background-color:#fff;bottom:0;box-shadow:0 1px 8px 1px #00000080;padding:16px;position:fixed;width:600px}@media screen and (max-width:782px){.wpseo-admin-submit.wpseo-admin-submit-fixed{right:0;width:782px}}.wpseo-admin-submit p.submit{margin:0;padding:0}.wpseo-admin-submit p.wpseo-message{color:#008a00;margin:0 0 0 16px;padding:0}.yoast-site-health__signature{color:#707070;display:flex;font-size:12px;line-height:20px;margin-top:2em}.yoast-site-health__inline-button.fetch-status,.yoast-site-health__signature-icon{margin-left:8px}#wpadminbar .yoast-badge,.yoast-badge{border-radius:8px;display:inline-block;font-weight:600;line-height:1.6;padding:0 8px}.yoast-badge{font-size:10px;min-height:16px}.yoast-badge--sale{background-color:#a4286a;border-radius:999px!important;color:#fff;font-size:12px!important;margin-top:-24px;position:absolute;left:30px;transform:rotate(-14deg)}@media (max-width:1024px){.yoast-badge--sale{display:inline-block;position:unset;vertical-align:top}}.yoast-badge__is-link:focus,.yoast-badge__is-link:hover{background-color:#004973;box-shadow:none;color:#fff;outline:none}#wpadminbar .yoast-badge,.wp-submenu .yoast-badge{font-size:9px;min-height:14px}.yoast-new-badge{background-color:#cce5ff;color:#004973}.yoast-premium-badge{background-color:#fff3cd;color:#674e00}.yoast-beta-badge{background-color:#cce5ff;color:#004973}.yoast-badge__is-link{text-decoration:none}.switch-container .yoast-badge{vertical-align:-1em}.switch-container legend .yoast-badge{vertical-align:0}.yoast_help+.yoast-badge{vertical-align:bottom}.yoast #crawl-settings fieldset[id$=_disabled],.yoast #crawl-settings p.disabled,.yoast label[for=clean_permalinks_extra_variables_free],.yoast label[for=search_character_limit_free],.yoast p.yoast-extra-variables-label-free{opacity:.5}.yoast #crawl-settings fieldset[id$=_disabled] .switch-toggle.switch-yoast-seo input:disabled~a{background:#a4286a;border:1px solid #b5b5b5}.yoast label[for^=search_character_limit]{font-weight:600;margin-bottom:10px!important;padding-right:2px;width:320px!important}.yoast input[id^=search_character_limit]{width:70px!important}.yoast label[for^=clean_permalinks_extra_variables]{font-weight:600;padding-right:2px;width:240px!important}.yoast input[id^=clean_permalinks_extra_variables]{width:358px!important}.yoast .yoast-crawl-single-setting{margin-top:18px}.yoast p[class*=yoast-extra-variables-label]{padding-right:243px!important}@media screen and (max-width:782px){.yoast p[class*=yoast-extra-variables-label]{margin-top:-20px!important;padding-right:0!important}}.yoast .yoast-crawl-settings-help{font-style:italic}.notice-yoast{background:#fff;border:1px solid #c3c4c7;border-right:4px solid var(--yoast-color-primary);box-shadow:0 1px 1px #0000000a;margin:20px 0 15px;padding:1px 12px}#black-friday-2023-product-editor-checklist .notice-yoast__container{padding:0 5px}.notice-yoast.is-dismissible{padding-left:38px;position:relative}.notice-yoast__container{padding:10px 0 5px}.notice-yoast__container,.notice-yoast__header{align-items:center;display:flex;flex-direction:row}.notice-yoast__header{box-sizing:border-box;justify-content:left;margin-bottom:8px;padding:0;width:100%}.notice-yoast__header .notice-yoast__header-heading{line-height:1.2;margin:0;padding:0}.notice-yoast__header h2.notice-yoast__header-heading{color:var(--yoast-color-primary);font-size:14px;font-weight:600;line-height:1;margin:0}.notice-yoast__header .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:14px;margin-left:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:14px}.notice-yoast__content{display:flex;padding:0}.notice-yoast .notice-yoast__container>svg{height:60px;line-height:1;margin-right:10px;width:auto}.notice-yoast img{height:60px;line-height:1;margin-bottom:5px;margin-right:16px;width:auto}.notice-yoast p{font-size:13px;font-weight:400;line-height:19px;max-width:600px}.notice-yoast .yoast-button--small{min-height:unset}.notice-yoast .notice-dismiss{background:none;border:none;color:#787c82;cursor:pointer;margin:0;padding:9px;position:absolute;left:1px;top:0}.notice-yoast .notice-dismiss:before{speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:none;color:#787c82;content:"\f153";display:block;font:normal 16px/20px dashicons;height:20px;text-align:center;width:20px}.notice-yoast .notice-dismiss:hover:before{color:#d63638}.privacy-settings .notice-yoast{margin:0 20px}.yoast .yoast-crawl-settings-explanation-free,.yoast .yoast-crawl-settings-help-free{opacity:.5}.yoast h3.yoast-crawl-settings,.yoast h3.yoast-crawl-settings-free{margin:2em 0 .5em}.yoast .yoast-crawl-settings-disabled,.yoast h3.yoast-crawl-settings-free{opacity:.5}.yoast .indexables-indexing-error p{margin-bottom:13px}.yoast .indexables-indexing-error strong{font-weight:500}.yoast .indexables-indexing-error summary{font-weight:700}.yoast-dashicons-notice{color:#dba617}#black-friday-2023-promotion-sidebar.notice-yoast{background:#fff;border-color:#fcd34d;border-radius:8px;border-width:2px;margin:20px 0 15px;padding:1px 12px}#black-friday-2023-promotion-sidebar .notice-yoast__header{margin-bottom:2px}#black-friday-2023-promotion-metabox.notice-yoast{background:#fff;border-color:#fcd34d;border-radius:8px;border-width:2px;margin:20px}#black-friday-2023-promotion-metabox h2.notice-yoast__header-heading{padding:0}#black-friday-2023-promotion-metabox .notice-yoast__container{padding-bottom:0}#black-friday-2023-promotion-metabox .notice-yoast__container p{display:inline}#black-friday-2023-promotion-metabox .notice-yoast__header{margin-bottom:8px}#black-friday-2023-promotion-metabox .notice-yoast__header a{font-weight:400;margin-right:13px}.yoast-bf-sale-badge{display:block;right:12px;position:absolute;top:-10px}.yoast-bf-sale-badge,.yoast-menu-bf-sale-badge{background-color:#1f2937;border-radius:8px;color:#fcd34d;font-size:10px;font-weight:600;line-height:normal;padding:2px 8px}.yoast-menu-bf-sale-badge{border:1px solid #fcd34d;margin-right:5px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340.css new file mode 100644 index 00000000..41fa18ef --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2340.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{word-wrap:break-word;-webkit-font-smoothing:subpixel-antialiased;background:#000c;border-radius:3px;color:#fff;content:attr(aria-label);display:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;letter-spacing:normal;opacity:0;padding:6px 8px 5px;pointer-events:none;position:absolute;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;white-space:pre;z-index:1000000}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{border:5px solid #0000;color:#000c;content:"\00a0";display:none;height:0;opacity:0;pointer-events:none;position:absolute;width:0;z-index:1000001}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{animation-duration:.1s;animation-fill-mode:forwards;animation-name:yoast-tooltip-appear;animation-timing-function:ease-in;display:inline-block;text-decoration:none}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{animation:none;opacity:1}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{margin-top:5px;right:50%;top:100%}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{border-bottom-color:#000c;bottom:-5px;margin-right:-5px;right:50%;top:auto}.yoast-tooltip-se:after{left:50%;margin-left:-15px;right:auto}.yoast-tooltip-sw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{bottom:100%;margin-bottom:5px;right:50%}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{border-top-color:#000c;bottom:auto;margin-right:-5px;right:50%;top:-5px}.yoast-tooltip-ne:after{left:50%;margin-left:-15px;right:auto}.yoast-tooltip-nw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{transform:translateX(50%)}.yoast-tooltip-w:after{bottom:50%;margin-right:5px;right:100%;transform:translateY(50%)}.yoast-tooltip-w:before{border-left-color:#000c;bottom:50%;left:-5px;margin-top:-5px;top:50%}.yoast-tooltip-e:after{bottom:50%;left:100%;margin-left:5px;transform:translateY(50%)}.yoast-tooltip-e:before{border-right-color:#000c;bottom:50%;margin-top:-5px;right:-5px;top:50%}.yoast-tooltip-multiline:after{word-wrap:normal;border-collapse:initial;max-width:250px;white-space:pre-line;width:250px;width:max-content;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{left:50%;right:auto;transform:translateX(-50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{right:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.yoast-tooltip-w:after{margin-right:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.rtl .yst-icon-rtl{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.wpseo-premium-indicator{display:inline-block;height:1px;width:1px}#adminmenu .wpseo-premium-indicator{color:inherit;margin:-2px 0 -3px 2px}.wpseo-premium-indicator svg{display:none;height:100%;width:auto}.yoast-measure{max-width:600px}.yoast-measure.padded{max-width:632px}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{font-size:14px;font-weight:600;margin:0 10px 0 0}.wpseo-premium-popup-title{font-size:1.3em!important;font-weight:600!important;margin:1em 0!important;padding:0!important}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{height:auto;max-width:100%}.yoast-label-strong{font-weight:600}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{height:0;overflow:hidden;padding-bottom:56.25%;position:relative}.yoast-video-container iframe{height:100%;left:0;position:absolute;top:0;width:100%}.yoast-settings{margin-bottom:2em;padding-left:220px}.yoast-settings h2{margin-bottom:0;margin-left:-220px}.yoast-settings label{color:#23282d;display:inline-block;font-size:14px;font-weight:600;line-height:1.3;margin-left:-220px;margin-right:6px;padding-right:10px;padding-top:4px;vertical-align:top;width:200px}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio,.yoast-settings fieldset,.yoast-settings input[type=text],.yoast-settings label,.yoast-settings select,.yoast-settings textarea{margin-bottom:.5em;margin-top:2em}.yoast-settings__textarea--medium{max-width:600px;width:100%}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{position:relative;top:1px;vertical-align:top}.yoast-settings__group--checkbox,.yoast-settings__group--radio{padding-top:1em}.yoast-settings__group--checkbox .yoast-settings__checkbox,.yoast-settings__group--radio .yoast-settings__radio{margin:0 4px 10px 0}.yoast-settings__checkbox+label,.yoast-settings__radio+label{margin-left:0;margin-right:0;max-width:calc(100% - 25px);padding:0;width:auto}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{font-weight:400;margin-bottom:10px;margin-top:0}.yoast-settings legend{color:#23282d;font-size:14px;font-weight:600}.yoast-settings .description{font-size:14px;margin-top:0}td .wpseo-score-icon{background:#888;border-radius:50%;display:inline-block;height:12px;line-height:16px;margin-left:5px;margin-top:3px;width:12px}.fixed th.column-wpseo-linked,.fixed th.column-wpseo-links,.fixed th.column-wpseo-score,.fixed th.column-wpseo-score-readability{padding:0;width:3em}.fixed th.column-wpseo-score-readability.sortable,.fixed th.column-wpseo-score-readability.sorted,.fixed th.column-wpseo-score.sortable,.fixed th.column-wpseo-score.sorted{width:3.5em}th.column-wpseo-linked a,th.column-wpseo-links a,th.column-wpseo-score .yoast-tooltip,th.column-wpseo-score-readability .yoast-tooltip{display:inline-block;overflow:visible;padding:8px 0;vertical-align:middle}th.column-wpseo-score .yoast-tooltip,th.column-wpseo-score-readability .yoast-tooltip{padding:8px 11px}th.column-wpseo-score-readability.sortable .yoast-tooltip,th.column-wpseo-score-readability.sorted .yoast-tooltip,th.column-wpseo-score.sortable .yoast-tooltip,th.column-wpseo-score.sorted .yoast-tooltip{padding-right:0}.column-wpseo-links .yoast-tooltip-multiline:after{max-width:160px}.column-wpseo-linked .yoast-tooltip-multiline:after{max-width:170px}.yoast-column-header-has-tooltip{position:relative}.manage-column .yoast-column-header-has-tooltip:before{color:#444;content:"";display:inline-block;height:20px;padding:0;text-decoration:none!important;vertical-align:top;width:20px}.manage-column .yoast-linked-to:before{background:#0000 url(../../images/link-out-icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-linked-from:before{background:#0000 url(../../images/link-in-icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-column-seo-score:before{background:#0000 url(../../images/Yoast_SEO_negative_icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-column-readability:before{background:#0000 url(../../images/readability-icon.svg) no-repeat 0 0;background-size:20px}td.column-wpseo-linked,td.column-wpseo-links{word-wrap:normal}@media screen and (max-width:782px){.yoast-settings{padding-left:0}.yoast-settings h2{margin-left:0}.yoast-settings label{margin-left:0;margin-right:0;padding:0;width:auto}.yoast .yoast-settings__radio,.yoast-settings__radio+label{margin-bottom:1em}.yoast-settings__checkbox+label,.yoast-settings__radio+label{max-width:calc(100% - 35px);padding-top:8px}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{padding-top:4px}.yoast-settings input[type=text],.yoast-settings select,.yoast-settings textarea{box-sizing:border-box;display:block;line-height:1.5;margin-bottom:0;margin-top:0;max-width:none;padding:7px 10px;width:100%}.screen-reader-text.wpseo-score-text{-webkit-clip-path:none;clip-path:none;height:auto;margin:0;position:static!important;width:auto}}.react-tabs__tab-panel{margin:0 auto;max-width:900px}.react-tabs__tab-panel li{max-width:none!important}.contact-premium-support{text-align:center}.contact-premium-support__content{font-size:.9375rem;line-height:1.4;margin:0 auto 1.5em}.contact-premium-support__content:nth-child(2){max-width:610px}.contact-premium-support__content:nth-child(3){max-width:560px}.contact-premium-support .contact-premium-support__button{margin-bottom:48px}.wpseo-premium-description{margin-top:.5em}.wpseo-premium-advantages-list{list-style:disc;padding-left:1.5em}.yoast_help.yoast-help-button,.yoast_help.yoast-help-link{background:#0000;border:0;box-shadow:none;color:#72777c;cursor:pointer;height:20px;margin:0;outline:none;padding:0;position:relative;vertical-align:top;width:20px}.yoast-section .yoast_help.yoast-help-button{float:right}.help-button-inline .yoast_help.yoast-help-button{margin-top:-4px}.yoast-section .yoast_help.yoast-help-button{margin-top:-44px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-right:6px}.yoast_help .yoast-help-icon:before{content:"\f223";left:0;padding:4px;position:absolute;top:0}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover,.yoast_help.yoast-help-link:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus .yoast-help-icon:before,.yoast_help.yoast-help-link:focus .yoast-help-icon:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc}.yoast-help-panel{clear:both;display:none;font-weight:400;max-width:30em!important;padding:0 0 1em;white-space:normal}.wpseo-admin-page .yoast-help-panel{max-width:600px!important}.copy-home-meta-description{margin-top:1em}.copy-home-meta-description .yoast-help-panel{max-width:400px!important}.yoast-modal_is-open{overflow:hidden}.yoast-notification .yoast-seo-icon{float:left;margin:20px 10px}.yoast-notification .yoast-seo-icon-wrap{margin:0 0 0 85px}.yoast-button-upsell{align-items:center;background-color:#fec228;border-radius:4px;box-shadow:inset 0 -4px 0 #0003;box-sizing:border-box;color:#000;display:inline-flex;filter:drop-shadow(0 2px 4px rgba(0,0,0,.2));font-family:Arial,sans-serif;font-size:16px;justify-content:center;line-height:1.5;min-height:48px;padding:8px 1em;text-decoration:none}.yoast-button-upsell:active,.yoast-button-upsell:focus,.yoast-button-upsell:hover{background-color:#f2ae01;color:#000}.yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 #0003,0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc}.yoast-button-upsell:active{box-shadow:none;filter:none;transform:translateY(1px)}.yoast-button-upsell#wpseo-premium-button{color:#000}.yoast-button-upsell__caret{background:#0000 var(--yoast-svg-icon-caret-right) center no-repeat;flex-shrink:0;height:16px;margin:0 -2px 0 6px;width:8px}.rtl .yoast-button-upsell__caret{background-image:var(--yoast-svg-icon-caret-left)}body.folded .wpseo-admin-submit-fixed{left:36px}@media screen and (max-width:782px){body.folded .wpseo-admin-submit-fixed{left:0}}.wpseo-admin-submit{align-items:baseline;display:flex;justify-content:flex-start;margin:0;padding:16px 0;z-index:5}.wpseo-admin-submit.wpseo-admin-submit-fixed{background-color:#fff;bottom:0;box-shadow:0 1px 8px 1px #00000080;padding:16px;position:fixed;width:600px}@media screen and (max-width:782px){.wpseo-admin-submit.wpseo-admin-submit-fixed{left:0;width:782px}}.wpseo-admin-submit p.submit{margin:0;padding:0}.wpseo-admin-submit p.wpseo-message{color:#008a00;margin:0 16px 0 0;padding:0}.yoast-site-health__signature{color:#707070;display:flex;font-size:12px;line-height:20px;margin-top:2em}.yoast-site-health__inline-button.fetch-status,.yoast-site-health__signature-icon{margin-right:8px}#wpadminbar .yoast-badge,.yoast-badge{border-radius:8px;display:inline-block;font-weight:600;line-height:1.6;padding:0 8px}.yoast-badge{font-size:10px;min-height:16px}.yoast-badge--sale{background-color:#a4286a;border-radius:999px!important;color:#fff;font-size:12px!important;margin-top:-24px;position:absolute;right:30px;transform:rotate(14deg)}@media (max-width:1024px){.yoast-badge--sale{display:inline-block;position:unset;vertical-align:top}}.yoast-badge__is-link:focus,.yoast-badge__is-link:hover{background-color:#004973;box-shadow:none;color:#fff;outline:none}#wpadminbar .yoast-badge,.wp-submenu .yoast-badge{font-size:9px;min-height:14px}.yoast-new-badge{background-color:#cce5ff;color:#004973}.yoast-premium-badge{background-color:#fff3cd;color:#674e00}.yoast-beta-badge{background-color:#cce5ff;color:#004973}.yoast-badge__is-link{text-decoration:none}.switch-container .yoast-badge{vertical-align:-1em}.switch-container legend .yoast-badge{vertical-align:0}.yoast_help+.yoast-badge{vertical-align:bottom}.yoast #crawl-settings fieldset[id$=_disabled],.yoast #crawl-settings p.disabled,.yoast label[for=clean_permalinks_extra_variables_free],.yoast label[for=search_character_limit_free],.yoast p.yoast-extra-variables-label-free{opacity:.5}.yoast #crawl-settings fieldset[id$=_disabled] .switch-toggle.switch-yoast-seo input:disabled~a{background:#a4286a;border:1px solid #b5b5b5}.yoast label[for^=search_character_limit]{font-weight:600;margin-bottom:10px!important;padding-left:2px;width:320px!important}.yoast input[id^=search_character_limit]{width:70px!important}.yoast label[for^=clean_permalinks_extra_variables]{font-weight:600;padding-left:2px;width:240px!important}.yoast input[id^=clean_permalinks_extra_variables]{width:358px!important}.yoast .yoast-crawl-single-setting{margin-top:18px}.yoast p[class*=yoast-extra-variables-label]{padding-left:243px!important}@media screen and (max-width:782px){.yoast p[class*=yoast-extra-variables-label]{margin-top:-20px!important;padding-left:0!important}}.yoast .yoast-crawl-settings-help{font-style:italic}.notice-yoast{background:#fff;border:1px solid #c3c4c7;border-left:4px solid var(--yoast-color-primary);box-shadow:0 1px 1px #0000000a;margin:20px 0 15px;padding:1px 12px}#black-friday-2023-product-editor-checklist .notice-yoast__container{padding:0 5px}.notice-yoast.is-dismissible{padding-right:38px;position:relative}.notice-yoast__container{padding:10px 0 5px}.notice-yoast__container,.notice-yoast__header{align-items:center;display:flex;flex-direction:row}.notice-yoast__header{box-sizing:border-box;justify-content:left;margin-bottom:8px;padding:0;width:100%}.notice-yoast__header .notice-yoast__header-heading{line-height:1.2;margin:0;padding:0}.notice-yoast__header h2.notice-yoast__header-heading{color:var(--yoast-color-primary);font-size:14px;font-weight:600;line-height:1;margin:0}.notice-yoast__header .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:14px;margin-right:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:14px}.notice-yoast__content{display:flex;padding:0}.notice-yoast .notice-yoast__container>svg{height:60px;line-height:1;margin-left:10px;width:auto}.notice-yoast img{height:60px;line-height:1;margin-bottom:5px;margin-left:16px;width:auto}.notice-yoast p{font-size:13px;font-weight:400;line-height:19px;max-width:600px}.notice-yoast .yoast-button--small{min-height:unset}.notice-yoast .notice-dismiss{background:none;border:none;color:#787c82;cursor:pointer;margin:0;padding:9px;position:absolute;right:1px;top:0}.notice-yoast .notice-dismiss:before{speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:none;color:#787c82;content:"\f153";display:block;font:normal 16px/20px dashicons;height:20px;text-align:center;width:20px}.notice-yoast .notice-dismiss:hover:before{color:#d63638}.privacy-settings .notice-yoast{margin:0 20px}.yoast .yoast-crawl-settings-explanation-free,.yoast .yoast-crawl-settings-help-free{opacity:.5}.yoast h3.yoast-crawl-settings,.yoast h3.yoast-crawl-settings-free{margin:2em 0 .5em}.yoast .yoast-crawl-settings-disabled,.yoast h3.yoast-crawl-settings-free{opacity:.5}.yoast .indexables-indexing-error p{margin-bottom:13px}.yoast .indexables-indexing-error strong{font-weight:500}.yoast .indexables-indexing-error summary{font-weight:700}.yoast-dashicons-notice{color:#dba617}#black-friday-2023-promotion-sidebar.notice-yoast{background:#fff;border-color:#fcd34d;border-radius:8px;border-width:2px;margin:20px 0 15px;padding:1px 12px}#black-friday-2023-promotion-sidebar .notice-yoast__header{margin-bottom:2px}#black-friday-2023-promotion-metabox.notice-yoast{background:#fff;border-color:#fcd34d;border-radius:8px;border-width:2px;margin:20px}#black-friday-2023-promotion-metabox h2.notice-yoast__header-heading{padding:0}#black-friday-2023-promotion-metabox .notice-yoast__container{padding-bottom:0}#black-friday-2023-promotion-metabox .notice-yoast__container p{display:inline}#black-friday-2023-promotion-metabox .notice-yoast__header{margin-bottom:8px}#black-friday-2023-promotion-metabox .notice-yoast__header a{font-weight:400;margin-left:13px}.yoast-bf-sale-badge{display:block;left:12px;position:absolute;top:-10px}.yoast-bf-sale-badge,.yoast-menu-bf-sale-badge{background-color:#1f2937;border-radius:8px;color:#fcd34d;font-size:10px;font-weight:600;line-height:normal;padding:2px 8px}.yoast-menu-bf-sale-badge{border:1px solid #fcd34d;margin-left:5px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340-rtl.css new file mode 100644 index 00000000..ebbe7da7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340-rtl.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 3px 0 10px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}#wp-admin-bar-wpseo-menu .wpseo-score-icon{margin:10px 4px 0 0!important}#wp-admin-bar-wpseo-menu .wpseo-score-icon.adminbar-sub-menu-score{margin:11px 4px 0 0!important}#wp-admin-bar-wpseo-menu-default .ab-item{line-height:2.46153846!important}#wp-admin-bar-wpseo-menu .ab-submenu{margin-bottom:5px}#wpadminbar .quicklinks #wp-admin-bar-wpseo-menu #wp-admin-bar-wpseo-menu-default li#wp-admin-bar-wpseo-get-premium a{color:#fff!important;font-weight:700!important}#wpadminbar .quicklinks #wp-admin-bar-wpseo-menu #wp-admin-bar-wpseo-menu-default li#wp-admin-bar-wpseo-get-premium span{background:#1f2937;border:1px solid #fcd34d;border-radius:14px;color:#fcd34d;font-size:13px;font-weight:600;padding:1px 4px}#wpadminbar .yoast-menu-bf-sale-badge{background-color:#1f2937;border:1px solid #fcd34d;border-radius:8px;color:#fcd34d;font-size:10px;font-weight:600;line-height:normal;margin-right:5px;padding:2px 8px}#wpadminbar .quicklinks #wp-admin-bar-wpseo-menu .wpseo-focus-keyword{display:inline-block!important;max-width:100px!important;overflow:hidden;text-overflow:ellipsis!important;vertical-align:bottom;white-space:nowrap}#wpadminbar .yoast-badge{border-radius:8px;display:inline-block;font-weight:600;line-height:1.6;margin-right:4px;padding:0 8px}#wpadminbar .yoast-beta-badge{background-color:#cce5ff;color:#004973}#wpadminbar .yoast-premium-badge{background-color:#fff3cd;color:#674e00}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{background-color:#a4286a;border-radius:10px 0 10px 10px;box-shadow:-1px 1px 1px 1px grey;color:#fff;right:0;padding:2px 12px;position:absolute;top:32px;white-space:nowrap}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{background-color:#d63638;border-radius:9px;color:#fff;display:inline;padding:1px 6px 1px 7px!important}#wpadminbar .yoast-logo.svg{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJmaWxsOiM4Mjg3OGMiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48cGF0aCBkPSJNMjAzLjYgMzk1YzYuOC0xNy40IDYuOC0zNi42IDAtNTRsLTc5LjQtMjA0aDcwLjlsNDcuNyAxNDkuNCA3NC44LTIwNy42SDExNi40Yy00MS44IDAtNzYgMzQuMi03NiA3NlYzNTdjMCA0MS44IDM0LjIgNzYgNzYgNzZIMTczYzE2LTguOSAyNC42LTIyLjcgMzAuNi0zOHpNNDcxLjYgMTU0LjhjMC00MS44LTM0LjItNzYtNzYtNzZoLTNMMjg1LjcgMzY1Yy05LjYgMjYuNy0xOS40IDQ5LjMtMzAuMyA2OGgyMTYuMlYxNTQuOHoiLz48cGF0aCBkPSJtMzM4IDEuMy05My4zIDI1OS4xLTQyLjEtMTMxLjloLTg5LjFsODMuOCAyMTUuMmM2IDE1LjUgNiAzMi41IDAgNDgtNy40IDE5LTE5IDM3LjMtNTMgNDEuOWwtNy4yIDF2NzZoOC4zYzgxLjcgMCAxMTguOS01Ny4yIDE0OS42LTE0Mi45TDQzMS42IDEuM0gzMzh6TTI3OS40IDM2MmMtMzIuOSA5Mi02Ny42IDEyOC43LTEyNS43IDEzMS44di00NWMzNy41LTcuNSA1MS4zLTMxIDU5LjEtNTEuMSA3LjUtMTkuMyA3LjUtNDAuNyAwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMgMTY2LjggMTA1LjktMjk0aDU4LjFMMjc5LjQgMzYyeiIvPjwvc3ZnPg==");background-position:100% 6px;background-repeat:no-repeat;background-size:20px;float:right;height:30px;width:26px}#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item{color:#f18500}@media screen and (max-width:782px){#wp-admin-bar-wpseo-menu .wpseo-score-icon{margin:16px 2px 0 10px!important}#wpadminbar #wp-admin-bar-wpseo-menu{display:block;position:static}#wpadminbar .yoast-logo.svg{background-position:50% 8px;background-size:30px;height:46px;width:52px}#wpadminbar .yoast-logo+.yoast-issue-counter{margin-right:-5px;margin-left:10px}#wpadminbar .ab-sub-wrapper .yoast-issue-counter{position:relative;top:-5px;vertical-align:text-top}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{line-height:1.8;top:46px;white-space:normal}#wp-admin-bar-wpseo-menu.menupop .ab-sub-wrapper #wp-admin-bar-wpseo-kwresearch,#wp-admin-bar-wpseo-menu.menupop .ab-sub-wrapper #wp-admin-bar-wpseo-settings{display:none}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340.css new file mode 100644 index 00000000..5d8fc6f3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2340.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 10px 0 3px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}#wp-admin-bar-wpseo-menu .wpseo-score-icon{margin:10px 0 0 4px!important}#wp-admin-bar-wpseo-menu .wpseo-score-icon.adminbar-sub-menu-score{margin:11px 0 0 4px!important}#wp-admin-bar-wpseo-menu-default .ab-item{line-height:2.46153846!important}#wp-admin-bar-wpseo-menu .ab-submenu{margin-bottom:5px}#wpadminbar .quicklinks #wp-admin-bar-wpseo-menu #wp-admin-bar-wpseo-menu-default li#wp-admin-bar-wpseo-get-premium a{color:#fff!important;font-weight:700!important}#wpadminbar .quicklinks #wp-admin-bar-wpseo-menu #wp-admin-bar-wpseo-menu-default li#wp-admin-bar-wpseo-get-premium span{background:#1f2937;border:1px solid #fcd34d;border-radius:14px;color:#fcd34d;font-size:13px;font-weight:600;padding:1px 4px}#wpadminbar .yoast-menu-bf-sale-badge{background-color:#1f2937;border:1px solid #fcd34d;border-radius:8px;color:#fcd34d;font-size:10px;font-weight:600;line-height:normal;margin-left:5px;padding:2px 8px}#wpadminbar .quicklinks #wp-admin-bar-wpseo-menu .wpseo-focus-keyword{display:inline-block!important;max-width:100px!important;overflow:hidden;text-overflow:ellipsis!important;vertical-align:bottom;white-space:nowrap}#wpadminbar .yoast-badge{border-radius:8px;display:inline-block;font-weight:600;line-height:1.6;margin-left:4px;padding:0 8px}#wpadminbar .yoast-beta-badge{background-color:#cce5ff;color:#004973}#wpadminbar .yoast-premium-badge{background-color:#fff3cd;color:#674e00}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{background-color:#a4286a;border-radius:0 10px 10px 10px;box-shadow:1px 1px 1px 1px grey;color:#fff;left:0;padding:2px 12px;position:absolute;top:32px;white-space:nowrap}#wpadminbar .yoast-issue-added{display:none}#wpadminbar .yoast-issue-counter{background-color:#d63638;border-radius:9px;color:#fff;display:inline;padding:1px 7px 1px 6px!important}#wpadminbar .yoast-logo.svg{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJmaWxsOiM4Mjg3OGMiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48cGF0aCBkPSJNMjAzLjYgMzk1YzYuOC0xNy40IDYuOC0zNi42IDAtNTRsLTc5LjQtMjA0aDcwLjlsNDcuNyAxNDkuNCA3NC44LTIwNy42SDExNi40Yy00MS44IDAtNzYgMzQuMi03NiA3NlYzNTdjMCA0MS44IDM0LjIgNzYgNzYgNzZIMTczYzE2LTguOSAyNC42LTIyLjcgMzAuNi0zOHpNNDcxLjYgMTU0LjhjMC00MS44LTM0LjItNzYtNzYtNzZoLTNMMjg1LjcgMzY1Yy05LjYgMjYuNy0xOS40IDQ5LjMtMzAuMyA2OGgyMTYuMlYxNTQuOHoiLz48cGF0aCBkPSJtMzM4IDEuMy05My4zIDI1OS4xLTQyLjEtMTMxLjloLTg5LjFsODMuOCAyMTUuMmM2IDE1LjUgNiAzMi41IDAgNDgtNy40IDE5LTE5IDM3LjMtNTMgNDEuOWwtNy4yIDF2NzZoOC4zYzgxLjcgMCAxMTguOS01Ny4yIDE0OS42LTE0Mi45TDQzMS42IDEuM0gzMzh6TTI3OS40IDM2MmMtMzIuOSA5Mi02Ny42IDEyOC43LTEyNS43IDEzMS44di00NWMzNy41LTcuNSA1MS4zLTMxIDU5LjEtNTEuMSA3LjUtMTkuMyA3LjUtNDAuNyAwLTYwbC03NS0xOTIuN2g1Mi44bDUzLjMgMTY2LjggMTA1LjktMjk0aDU4LjFMMjc5LjQgMzYyeiIvPjwvc3ZnPg==");background-position:0 6px;background-repeat:no-repeat;background-size:20px;float:left;height:30px;width:26px}#wpadminbar #wp-admin-bar-wpseo-licenses .ab-item{color:#f18500}@media screen and (max-width:782px){#wp-admin-bar-wpseo-menu .wpseo-score-icon{margin:16px 10px 0 2px!important}#wpadminbar #wp-admin-bar-wpseo-menu{display:block;position:static}#wpadminbar .yoast-logo.svg{background-position:50% 8px;background-size:30px;height:46px;width:52px}#wpadminbar .yoast-logo+.yoast-issue-counter{margin-left:-5px;margin-right:10px}#wpadminbar .ab-sub-wrapper .yoast-issue-counter{position:relative;top:-5px;vertical-align:text-top}#wpadminbar .yoast-issue-added,#wpadminbar .yoast-issue-added:hover{line-height:1.8;top:46px;white-space:normal}#wp-admin-bar-wpseo-menu.menupop .ab-sub-wrapper #wp-admin-bar-wpseo-kwresearch,#wp-admin-bar-wpseo-menu.menupop .ab-sub-wrapper #wp-admin-bar-wpseo-settings{display:none}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340-rtl.css new file mode 100644 index 00000000..6520677a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340-rtl.css @@ -0,0 +1 @@ +.yst-fixes-button__lock-icon{background-color:#fde68a;border-radius:50%;height:14px;padding:1px 2px;position:absolute;left:-6px;top:-6px;width:14px}.ai-button:disabled{pointer-events:auto} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340.css new file mode 100644 index 00000000..066f8ebd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-fix-assessments-2340.css @@ -0,0 +1 @@ +.yst-fixes-button__lock-icon{background-color:#fde68a;border-radius:50%;height:14px;padding:1px 2px;position:absolute;right:-6px;top:-6px;width:14px}.ai-button:disabled{pointer-events:auto} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340-rtl.css new file mode 100644 index 00000000..e8f6cee9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340-rtl.css @@ -0,0 +1 @@ +.yst-replacevar__use-ai-button-upsell{align-items:center;background-color:#f7f7f7;border:1px solid #dbdbdb;border-radius:4px;box-shadow:inset 0 -2px 0 0 #0000001a;box-sizing:border-box;color:#303030;cursor:pointer;display:flex;min-height:32px;padding:0 .5em;transition:var(--yoast-transition-default)}.yst-replacevar__use-ai-button-upsell:hover{background-color:#fff;border-color:var(--yoast-color-border--default);color:#000} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340.css new file mode 100644 index 00000000..e8f6cee9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2340.css @@ -0,0 +1 @@ +.yst-replacevar__use-ai-button-upsell{align-items:center;background-color:#f7f7f7;border:1px solid #dbdbdb;border-radius:4px;box-shadow:inset 0 -2px 0 0 #0000001a;box-sizing:border-box;color:#303030;cursor:pointer;display:flex;min-height:32px;padding:0 .5em;transition:var(--yoast-transition-default)}.yst-replacevar__use-ai-button-upsell:hover{background-color:#fff;border-color:var(--yoast-color-border--default);color:#000} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340-rtl.css new file mode 100644 index 00000000..273a5d84 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340-rtl.css @@ -0,0 +1 @@ +.yoast-alert{align-items:flex-start;border:1px solid #0003;display:flex;font-size:13px;line-height:1.5;margin:16px 0;padding:16px}.yoast-alert--error{background:#f9dcdc;color:#8f1919}.yoast-alert--info{background:#cce5ff;color:#00468f}.yoast-alert--success{background:#e2f2cc;color:#395315}.yoast-alert--warning{background:#fff3cd;color:#674e00}.yoast-alert__icon.yoast-alert__icon{display:block;height:16px;margin-left:8px;margin-top:.1rem;max-width:none;width:16px}.yoast-alert a{color:#004973} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340.css new file mode 100644 index 00000000..275d7f75 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2340.css @@ -0,0 +1 @@ +.yoast-alert{align-items:flex-start;border:1px solid #0003;display:flex;font-size:13px;line-height:1.5;margin:16px 0;padding:16px}.yoast-alert--error{background:#f9dcdc;color:#8f1919}.yoast-alert--info{background:#cce5ff;color:#00468f}.yoast-alert--success{background:#e2f2cc;color:#395315}.yoast-alert--warning{background:#fff3cd;color:#674e00}.yoast-alert__icon.yoast-alert__icon{display:block;height:16px;margin-right:8px;margin-top:.1rem;max-width:none;width:16px}.yoast-alert a{color:#004973} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340-rtl.css new file mode 100644 index 00000000..97ab5580 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340-rtl.css @@ -0,0 +1 @@ +.sidebar__sale_banner_container .sidebar__sale_banner{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity));box-shadow:0 -1px 4px 0 #fcd34d,0 1px 4px 0 #fcd34d,0 -1px 0 0 #fcd34d,0 1px 0 0 #fcd34d;color:#fcd34d;font-size:1.125rem;font-weight:700;letter-spacing:.5px;line-height:30px;margin-bottom:10px;margin-right:-30px;margin-top:1.25rem;padding:.25rem 0;text-align:center;transform:rotate(5deg);width:calc(100% + 60px)}.sidebar__sale_banner_container .sidebar__sale_banner .banner_text{display:inline-block;margin:0 35px}.sidebar__sale_banner_container{margin-bottom:-25px;margin-right:-24px;margin-top:-25px;overflow:hidden;padding-bottom:10px;width:calc(100% + 48px)} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340.css new file mode 100644 index 00000000..fc2c025b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2340.css @@ -0,0 +1 @@ +.sidebar__sale_banner_container .sidebar__sale_banner{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity));box-shadow:0 -1px 4px 0 #fcd34d,0 1px 4px 0 #fcd34d,0 -1px 0 0 #fcd34d,0 1px 0 0 #fcd34d;color:#fcd34d;font-size:1.125rem;font-weight:700;letter-spacing:.5px;line-height:30px;margin-bottom:10px;margin-left:-30px;margin-top:1.25rem;padding:.25rem 0;text-align:center;transform:rotate(-5deg);width:calc(100% + 60px)}.sidebar__sale_banner_container .sidebar__sale_banner .banner_text{display:inline-block;margin:0 35px}.sidebar__sale_banner_container{margin-bottom:-25px;margin-left:-24px;margin-top:-25px;overflow:hidden;padding-bottom:10px;width:calc(100% + 48px)} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340-rtl.css new file mode 100644 index 00000000..51f5b707 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340-rtl.css @@ -0,0 +1 @@ +#yoast-seo-dashboard-widget h3{font-weight:700}#yoast-seo-dashboard-widget .assessments,#yoast-seo-dashboard-widget .score-assessments{padding-right:0}#yoast-seo-dashboard-widget .wordpress-feed{border-top:1px solid #eee;margin:16px -12px 0;padding:12px 12px 0}#yoast-seo-dashboard-widget .wordpress-feed .wordpress-feed__post{margin-top:12px}#yoast-seo-dashboard-widget .wordpress-feed .wordpress-feed__footer{border-top:1px solid #eee;margin:0 -12px;padding:4px 12px 0}#yoast-seo-dashboard-widget:empty:before,#yoast-seo-wincher-dashboard-widget:empty:before{animation:rotate 2s linear infinite;background-image:url(../../packages/js/images/Yoast_SEO_Icon.svg);content:"";display:block;height:40px;margin:25px auto;width:40px}@keyframes rotate{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(0deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(0deg) rotateY(-1turn);-webkit-transform:perspective(120px) rotateX(0deg) rotateY(-1turn)}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340.css new file mode 100644 index 00000000..c9a82129 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2340.css @@ -0,0 +1 @@ +#yoast-seo-dashboard-widget h3{font-weight:700}#yoast-seo-dashboard-widget .assessments,#yoast-seo-dashboard-widget .score-assessments{padding-left:0}#yoast-seo-dashboard-widget .wordpress-feed{border-top:1px solid #eee;margin:16px -12px 0;padding:12px 12px 0}#yoast-seo-dashboard-widget .wordpress-feed .wordpress-feed__post{margin-top:12px}#yoast-seo-dashboard-widget .wordpress-feed .wordpress-feed__footer{border-top:1px solid #eee;margin:0 -12px;padding:4px 12px 0}#yoast-seo-dashboard-widget:empty:before,#yoast-seo-wincher-dashboard-widget:empty:before{animation:rotate 2s linear infinite;background-image:url(../../packages/js/images/Yoast_SEO_Icon.svg);content:"";display:block;height:40px;margin:25px auto;width:40px}@keyframes rotate{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(0deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(0deg) rotateY(1turn);-webkit-transform:perspective(120px) rotateX(0deg) rotateY(1turn)}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340-rtl.css new file mode 100644 index 00000000..63cce966 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340-rtl.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 3px 0 10px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}@media screen and (max-width:782px){.column-wpseo-focuskw,.column-wpseo-metadesc,.column-wpseo-score,.column-wpseo-title{display:none}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340.css new file mode 100644 index 00000000..eb516235 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2340.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 10px 0 3px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}@media screen and (max-width:782px){.column-wpseo-focuskw,.column-wpseo-metadesc,.column-wpseo-score,.column-wpseo-title{display:none}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340-rtl.css new file mode 100644 index 00000000..a7418238 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-elementor-color-paragraph:#555d66}.yoast,.yoast h2,.yoast h3{font-family:var(--yoast-font-family)!important}.yoast h2{color:var(--yoast-color-dark);font-size:1.3em;font-weight:var(--yoast-font-weight-bold);margin-bottom:1em}.yoast input,.yoast input:focus,.yoast label,.yoast select:focus,.yoast select:not(:focus){background-color:#0000;border-color:var(--yoast-color-secondary-darker);color:var(--yoast-color-font-default)}.yoast label{color:var(--yoast-color-label)}.yoast input[disabled]{background-color:var(--yoast-color-inactive-grey-light)}.yoast.components-panel__body .yoast-title{font-weight:500}.yoast-field-group__title b{font-weight:var(--yoast-font-weight-bold)}.yoast h3 span>span{font-weight:400}.elementor-tab-control-yoast-seo-tab span:before,.yoast-element-menu-icon:before{background-color:currentColor;content:" ";height:16px;margin:0 auto;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:16px}.yoast-element-menu-icon{display:inline-flex}.yoast-element-menu-icon:before{height:19px;width:19px}.yoast-elementor-panel__fills{-webkit-font-smoothing:subpixel-antialiased;background-color:var(--yoast-color-white);color:var(--yoast-color-dark)}.yoast li,.yoast p,.yoast small{line-height:1.5;margin-bottom:6px}.yoast p,.yoast small,.yoast ul[role=list] li{color:var(--yoast-elementor-color-paragraph)}.button-link,.yoast a,.yoast a p,.yoast-elementor-panel__fills p a{color:var(--yoast-color-link);text-decoration:underline}.yoast a.dashicons{color:var(--yoast-color-inactive-text);height:24px;vertical-align:text-bottom;width:24px}.button-link{background:none;border:none;cursor:pointer;font-size:1em;line-height:1.5}.yoast .yoast-button-upsell,.yoast-elementor-panel__fills .UpsellLinkButton{color:var(--yoast-color-label);line-height:1.4em;text-decoration:none}.yoast-elementor-panel__fills h3>button{background:none;border:none;box-shadow:none}.yoast-gutenberg-modal .yoast-notice-container>hr{border-top-color:#ddd;border-top-style:solid}.yoast-gutenberg-modal input[type=radio]{-webkit-appearance:none;-moz-appearance:none;border:var(--yoast-border-default);border-radius:50%;box-shadow:inset 0 2px 4px #0000001a;cursor:pointer;height:18px;margin:0 0 0 8px;overflow:hidden;padding:2px;position:relative;transition:all .15s ease-out 0s;vertical-align:text-bottom;width:18px}.yoast-gutenberg-modal input[type=radio]:checked{background-color:inherit;border-color:var(--yoast-color-primary)}.yoast-gutenberg-modal input[type=radio]:checked:after{background:var(--yoast-color-primary);border-radius:50%;content:"";display:block;height:10px;right:3px;position:absolute;top:3px;width:10px}.yoast-post-settings-modal .yoast-notice-container{bottom:auto}.yoast-gutenberg-modal .components-popover.components-tooltip{right:unset!important;position:relative;left:40px;top:15px!important}.yoast div:focus,div.yoast:focus{outline:0}.yoast .button-link:focus,.yoast a:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;color:#124964;outline:1px solid #0000}.yoast a.dashicons:focus{color:#1e8cbe}.yoast input[type=radio]:checked:focus{border-color:#fff;box-shadow:var(--yoast-color-focus)}.yoast .yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 #0003,0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;color:#000}.yoast-elementor-introduction{background-color:#fff;box-shadow:var(--yoast-shadow-default);padding:20px;position:absolute!important;text-align:right;z-index:1}#yoast-introduction{border-radius:3px;right:41px!important;top:5px!important}#yoast-introduction-editor-v2{border:1px solid #000;border-radius:8px}.yoast-elementor-introduction:before{border:solid #0000;content:"";position:absolute}#yoast-introduction:before{border-bottom-color:#fff;border-width:7px 5px;right:-12px;top:8px;transform:rotate(90deg)}#yoast-introduction-editor-v2:before{border-bottom-color:#000;border-width:10px 8px;right:var(--yoast-elementor-introduction-arrow,28%);top:-20px}.yoast-elementor-introduction>div{color:var(--yoast-color-default)}.yoast-elementor-introduction>.dialog-header{font-weight:var(--yoast-font-weight-bold);line-height:1.3}.yoast-elementor-introduction>.dialog-message{margin-top:.5em}.yoast-elementor-introduction>.dialog-buttons-wrapper{display:flex;justify-content:flex-end;margin-top:12px}#yoast-introduction .dialog-button,#yoast-introduction-editor-v2 .dialog-button{background-color:var(--yoast-color-primary);font-size:12px;padding:7px 17px}@media(hover:hover){.button-link:hover,.yoast a:hover,.yoast a:hover p,.yoast-elementor-panel__fills p a:hover{color:var(--yoast-color-primary-darker)}.yoast a.dashicons:hover{color:var(--yoast-color-link)}.yoast .yoast-button-upsell:hover,.yoast-elementor-panel__fills .UpsellLinkButton:hover{color:var(--yoast-color-label)}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340.css new file mode 100644 index 00000000..1a584f89 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2340.css @@ -0,0 +1 @@ +:root{--yoast-elementor-color-paragraph:#555d66}.yoast,.yoast h2,.yoast h3{font-family:var(--yoast-font-family)!important}.yoast h2{color:var(--yoast-color-dark);font-size:1.3em;font-weight:var(--yoast-font-weight-bold);margin-bottom:1em}.yoast input,.yoast input:focus,.yoast label,.yoast select:focus,.yoast select:not(:focus){background-color:#0000;border-color:var(--yoast-color-secondary-darker);color:var(--yoast-color-font-default)}.yoast label{color:var(--yoast-color-label)}.yoast input[disabled]{background-color:var(--yoast-color-inactive-grey-light)}.yoast.components-panel__body .yoast-title{font-weight:500}.yoast-field-group__title b{font-weight:var(--yoast-font-weight-bold)}.yoast h3 span>span{font-weight:400}.elementor-tab-control-yoast-seo-tab span:before,.yoast-element-menu-icon:before{background-color:currentColor;content:" ";height:16px;margin:0 auto;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:16px}.yoast-element-menu-icon{display:inline-flex}.yoast-element-menu-icon:before{height:19px;width:19px}.yoast-elementor-panel__fills{-webkit-font-smoothing:subpixel-antialiased;background-color:var(--yoast-color-white);color:var(--yoast-color-dark)}.yoast li,.yoast p,.yoast small{line-height:1.5;margin-bottom:6px}.yoast p,.yoast small,.yoast ul[role=list] li{color:var(--yoast-elementor-color-paragraph)}.button-link,.yoast a,.yoast a p,.yoast-elementor-panel__fills p a{color:var(--yoast-color-link);text-decoration:underline}.yoast a.dashicons{color:var(--yoast-color-inactive-text);height:24px;vertical-align:text-bottom;width:24px}.button-link{background:none;border:none;cursor:pointer;font-size:1em;line-height:1.5}.yoast .yoast-button-upsell,.yoast-elementor-panel__fills .UpsellLinkButton{color:var(--yoast-color-label);line-height:1.4em;text-decoration:none}.yoast-elementor-panel__fills h3>button{background:none;border:none;box-shadow:none}.yoast-gutenberg-modal .yoast-notice-container>hr{border-top-color:#ddd;border-top-style:solid}.yoast-gutenberg-modal input[type=radio]{-webkit-appearance:none;-moz-appearance:none;border:var(--yoast-border-default);border-radius:50%;box-shadow:inset 0 2px 4px #0000001a;cursor:pointer;height:18px;margin:0 8px 0 0;overflow:hidden;padding:2px;position:relative;transition:all .15s ease-out 0s;vertical-align:text-bottom;width:18px}.yoast-gutenberg-modal input[type=radio]:checked{background-color:inherit;border-color:var(--yoast-color-primary)}.yoast-gutenberg-modal input[type=radio]:checked:after{background:var(--yoast-color-primary);border-radius:50%;content:"";display:block;height:10px;left:3px;position:absolute;top:3px;width:10px}.yoast-post-settings-modal .yoast-notice-container{bottom:auto}.yoast-gutenberg-modal .components-popover.components-tooltip{left:unset!important;position:relative;right:40px;top:15px!important}.yoast div:focus,div.yoast:focus{outline:0}.yoast .button-link:focus,.yoast a:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;color:#124964;outline:1px solid #0000}.yoast a.dashicons:focus{color:#1e8cbe}.yoast input[type=radio]:checked:focus{border-color:#fff;box-shadow:var(--yoast-color-focus)}.yoast .yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 #0003,0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;color:#000}.yoast-elementor-introduction{background-color:#fff;box-shadow:var(--yoast-shadow-default);padding:20px;position:absolute!important;text-align:left;z-index:1}#yoast-introduction{border-radius:3px;left:41px!important;top:5px!important}#yoast-introduction-editor-v2{border:1px solid #000;border-radius:8px}.yoast-elementor-introduction:before{border:solid #0000;content:"";position:absolute}#yoast-introduction:before{border-bottom-color:#fff;border-width:7px 5px;left:-12px;top:8px;transform:rotate(-90deg)}#yoast-introduction-editor-v2:before{border-bottom-color:#000;border-width:10px 8px;left:var(--yoast-elementor-introduction-arrow,28%);top:-20px}.yoast-elementor-introduction>div{color:var(--yoast-color-default)}.yoast-elementor-introduction>.dialog-header{font-weight:var(--yoast-font-weight-bold);line-height:1.3}.yoast-elementor-introduction>.dialog-message{margin-top:.5em}.yoast-elementor-introduction>.dialog-buttons-wrapper{display:flex;justify-content:flex-end;margin-top:12px}#yoast-introduction .dialog-button,#yoast-introduction-editor-v2 .dialog-button{background-color:var(--yoast-color-primary);font-size:12px;padding:7px 17px}@media(hover:hover){.button-link:hover,.yoast a:hover,.yoast a:hover p,.yoast-elementor-panel__fills p a:hover{color:var(--yoast-color-primary-darker)}.yoast a.dashicons:hover{color:var(--yoast-color-link)}.yoast .yoast-button-upsell:hover,.yoast-elementor-panel__fills .UpsellLinkButton:hover{color:var(--yoast-color-label)}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340-rtl.css new file mode 100644 index 00000000..336c6100 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340-rtl.css @@ -0,0 +1 @@ +#yst_opengraph_image_warning{margin-top:0}.yoast-opengraph-image-notice #set-post-thumbnail>img{box-shadow:0 0 0 2px #fff,0 0 0 5px #dc3232} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340.css new file mode 100644 index 00000000..336c6100 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2340.css @@ -0,0 +1 @@ +#yst_opengraph_image_warning{margin-top:0}.yoast-opengraph-image-notice #set-post-thumbnail>img{box-shadow:0 0 0 2px #fff,0 0 0 5px #dc3232} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340-rtl.css new file mode 100644 index 00000000..bd1b36eb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340-rtl.css @@ -0,0 +1 @@ +#posts-filter .wpseo-filter-explanation{clear:both;margin:10px 1px 5px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340.css new file mode 100644 index 00000000..bd1b36eb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2340.css @@ -0,0 +1 @@ +#posts-filter .wpseo-filter-explanation{clear:both;margin:10px 1px 5px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340-rtl.css new file mode 100644 index 00000000..f6a2d2cc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340-rtl.css @@ -0,0 +1 @@ +#wpseo-first-time-configuration .yst-root .yst-input{--tw-bg-opacity:1!important;--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important;border-radius:.375rem!important;border-width:1px!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important;font-size:.8125rem!important;padding:.5rem .75rem!important}#wpseo-first-time-configuration .yst-root .yst-radio{align-items:center!important;display:flex!important}#wpseo-first-time-configuration .yst-root .yst-radio__input{--tw-border-opacity:1!important;--tw-text-opacity:1!important;--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;-webkit-appearance:none!important;appearance:none!important;border-color:rgb(209 213 219/var(--tw-border-opacity))!important;border-radius:9999px!important;border-width:1px!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important;color:rgb(166 30 105/var(--tw-text-opacity))!important;height:1rem!important;margin:0!important;transition-property:none!important;width:1rem!important}#wpseo-first-time-configuration .yst-root .yst-radio__input:before{content:var(--tw-content)!important;display:none!important}#wpseo-first-time-configuration .yst-root .yst-radio__input:checked{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important;border-width:5px!important}#wpseo-first-time-configuration .yst-root .yst-radio__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important;--tw-ring-offset-width:2px!important;--tw-ring-offset-color:#fff!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important;outline:2px solid #0000!important;outline-offset:2px!important}#wpseo-first-time-configuration .yst-root .yst-radio__label{--tw-text-opacity:1!important;color:rgb(55 65 81/var(--tw-text-opacity))!important;font-weight:500!important;margin-right:.75rem!important}#wpseo-first-time-configuration .yst-root .yst-radio-group__label{margin-bottom:.25rem!important}#wpseo-first-time-configuration .yst-root .yst-radio-group__options{display:flex!important;flex-direction:column!important;gap:.5rem!important}#wpseo-first-time-configuration .yst-root .yst-radio-group__description{margin-bottom:1rem!important}#wpseo-first-time-configuration .yst-root .yst-checkbox__input:before{--tw-content:none!important;content:var(--tw-content)!important} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340.css new file mode 100644 index 00000000..04d8c25b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2340.css @@ -0,0 +1 @@ +#wpseo-first-time-configuration .yst-root .yst-input{--tw-bg-opacity:1!important;--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important;border-radius:.375rem!important;border-width:1px!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important;font-size:.8125rem!important;padding:.5rem .75rem!important}#wpseo-first-time-configuration .yst-root .yst-radio{align-items:center!important;display:flex!important}#wpseo-first-time-configuration .yst-root .yst-radio__input{--tw-border-opacity:1!important;--tw-text-opacity:1!important;--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;-webkit-appearance:none!important;appearance:none!important;border-color:rgb(209 213 219/var(--tw-border-opacity))!important;border-radius:9999px!important;border-width:1px!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important;color:rgb(166 30 105/var(--tw-text-opacity))!important;height:1rem!important;margin:0!important;transition-property:none!important;width:1rem!important}#wpseo-first-time-configuration .yst-root .yst-radio__input:before{content:var(--tw-content)!important;display:none!important}#wpseo-first-time-configuration .yst-root .yst-radio__input:checked{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important;border-width:5px!important}#wpseo-first-time-configuration .yst-root .yst-radio__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important;--tw-ring-offset-width:2px!important;--tw-ring-offset-color:#fff!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important;outline:2px solid #0000!important;outline-offset:2px!important}#wpseo-first-time-configuration .yst-root .yst-radio__label{--tw-text-opacity:1!important;color:rgb(55 65 81/var(--tw-text-opacity))!important;font-weight:500!important;margin-left:.75rem!important}#wpseo-first-time-configuration .yst-root .yst-radio-group__label{margin-bottom:.25rem!important}#wpseo-first-time-configuration .yst-root .yst-radio-group__options{display:flex!important;flex-direction:column!important;gap:.5rem!important}#wpseo-first-time-configuration .yst-root .yst-radio-group__description{margin-bottom:1rem!important}#wpseo-first-time-configuration .yst-root .yst-checkbox__input:before{--tw-content:none!important;content:var(--tw-content)!important} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340-rtl.css new file mode 100644 index 00000000..e8929ee9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340.css new file mode 100644 index 00000000..e8929ee9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/icons-2340.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340-rtl.css new file mode 100644 index 00000000..c7e4aab5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340-rtl.css @@ -0,0 +1 @@ +.yoast-text-mark{background-color:#e1bee7}.yoast-text-mark__highlight{background-color:#4a148c;color:#fff} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340.css new file mode 100644 index 00000000..c7e4aab5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2340.css @@ -0,0 +1 @@ +.yoast-text-mark{background-color:#e1bee7}.yoast-text-mark__highlight{background-color:#4a148c;color:#fff} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340-rtl.css new file mode 100644 index 00000000..7cb43907 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-color-default:#404040;--yoast-color-default-darker:#303030;--yoast-color-primary:#a4286a;--yoast-color-secondary:#f7f7f7;--yoast-color-white:#fff;--yoast-color-green:#6ea029;--yoast-color-primary-darker:#7b1e50;--yoast-color-primary-lighter:#f5d6e6;--yoast-color-secondary-darker:#d9d9d9;--yoast-color-button-upsell:#fec228;--yoast-color-button-upsell-hover:#f2ae01;--yoast-color-dark:#303030;--yoast-color-sale:#fec228;--yoast-color-sale-darker:#feb601;--yoast-color-border:#0003;--yoast-color-label:#303030;--yoast-color-label-help:#707070;--yoast-color-active:#6ea029;--yoast-color-inactive:#dc3232;--yoast-color-inactive-text:#707070;--yoast-color-inactive-grey:#9e9e9e;--yoast-color-inactive-grey-light:#f1f1f1;--yoast-color-active-light:#b6cf94;--yoast-transition-default:all 150ms ease-out;--yoast-color-link:#006dac;--yoast-color-border--default:#0003;--yoast-color-focus:0 0 0 2px #007fff,0 0 0 5px #bfdfff}.yst-root .yst-introduction-modal .yst-modal__close-button{--tw-text-opacity:1;background-color:initial;color:rgb(107 114 128/var(--tw-text-opacity))}.yst-root .yst-introduction-modal .yst-modal__close-button:focus{--tw-ring-offset-width:0px;outline:2px solid #0000;outline-offset:2px}.yst-root .yst-introduction-gradient{background:linear-gradient(-180deg,#a61e6940 10%,#fff0 80%)}.yst-root .yst-introduction-modal-uppercase{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity));letter-spacing:.8px;text-transform:uppercase}.yst-root .yst-logo-icon{background-color:var(--yoast-color-primary);height:17px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:17px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340.css new file mode 100644 index 00000000..6001f965 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2340.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-color-default:#404040;--yoast-color-default-darker:#303030;--yoast-color-primary:#a4286a;--yoast-color-secondary:#f7f7f7;--yoast-color-white:#fff;--yoast-color-green:#6ea029;--yoast-color-primary-darker:#7b1e50;--yoast-color-primary-lighter:#f5d6e6;--yoast-color-secondary-darker:#d9d9d9;--yoast-color-button-upsell:#fec228;--yoast-color-button-upsell-hover:#f2ae01;--yoast-color-dark:#303030;--yoast-color-sale:#fec228;--yoast-color-sale-darker:#feb601;--yoast-color-border:#0003;--yoast-color-label:#303030;--yoast-color-label-help:#707070;--yoast-color-active:#6ea029;--yoast-color-inactive:#dc3232;--yoast-color-inactive-text:#707070;--yoast-color-inactive-grey:#9e9e9e;--yoast-color-inactive-grey-light:#f1f1f1;--yoast-color-active-light:#b6cf94;--yoast-transition-default:all 150ms ease-out;--yoast-color-link:#006dac;--yoast-color-border--default:#0003;--yoast-color-focus:0 0 0 2px #007fff,0 0 0 5px #bfdfff}.yst-root .yst-introduction-modal .yst-modal__close-button{--tw-text-opacity:1;background-color:initial;color:rgb(107 114 128/var(--tw-text-opacity))}.yst-root .yst-introduction-modal .yst-modal__close-button:focus{--tw-ring-offset-width:0px;outline:2px solid #0000;outline-offset:2px}.yst-root .yst-introduction-gradient{background:linear-gradient(180deg,#a61e6940 10%,#fff0 80%)}.yst-root .yst-introduction-modal-uppercase{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity));letter-spacing:.8px;text-transform:uppercase}.yst-root .yst-logo-icon{background-color:var(--yoast-color-primary);height:17px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:17px} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340-rtl.css new file mode 100644 index 00000000..53d37d39 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.yoast-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#a4286a99;bottom:0;right:0;position:fixed;left:0;top:0;z-index:100000}.yoast-modal{background:#fff;bottom:48px;display:flex;flex-direction:column;height:calc(100% - 96px);right:calc(50% - 440px);max-width:880px;overflow:hidden;position:fixed;top:48px;width:100%}.yoast-gutenberg-modal .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-left:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-columns:280px 1fr;grid-template-rows:72px 1fr 88px}.yoast-modal__heading{align-items:center;background:var(--yoast-color-white);border-bottom:var(--yoast-border-default);box-sizing:border-box;display:flex;grid-area:heading;min-height:72px;padding:0 24px}.yoast-modal__heading .yoast-close{position:absolute;left:16px}.yoast-gutenberg-modal__box.components-modal__frame{box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}@media (min-width:600px){.yoast-gutenberg-modal__box.components-modal__frame{border-radius:8px;max-height:calc(100% - 48px)}}.yoast-gutenberg-modal__no-padding .components-modal__content{padding:0}.yoast-gutenberg-modal .components-modal__header-heading,.yoast-modal__heading h1{color:var(--yoast-color-primary);font-size:20px;font-weight:400;line-height:1.2;margin:0}.yoast-gutenberg-modal .components-modal__content .components-modal__header{border-bottom:1px solid #e2e8f0!important}.yoast-gutenberg-modal .components-modal__icon-container{display:inline-flex}.yoast-gutenberg-modal .components-modal__icon-container svg,.yoast-modal__heading-icon{fill:var(--yoast-color-primary);flex-shrink:0;height:20px;margin-left:16px;width:19px}.yoast-modal__menu{border-left:var(--yoast-border-default);grid-area:menu;overflow-y:auto}.yoast-modal__menu ul{list-style:none;margin:0;padding:0}.yoast-modal__menu li{border-bottom:var(--yoast-border-default);color:var(--yoast-color-default);cursor:pointer;display:block;font-size:16px;padding:12px 16px 11px;text-decoration:none}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--yoast-color-primary);border-bottom:var(--yoast-border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{display:flex;flex-direction:column;flex-grow:1;grid-area:content;overflow-y:auto;position:relative}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{background:var(--yoast-color-white);padding:24px 24px 0;position:sticky;top:0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--yoast-border-default);padding-bottom:24px}.yoast-modal__footer{align-items:center;align-self:flex-end;background:var(--yoast-color-white);border-top:var(--yoast-border-default);bottom:0;box-sizing:border-box;display:flex;grid-area:footer;justify-content:flex-end;margin:0 24px;min-height:88px;padding:0;position:sticky;width:calc(100% - 48px);z-index:10}.yoast-modal__settings-saved{align-items:center;display:inline-flex;margin-left:16px;position:relative}.yoast-modal__settings-saved:before{background:var(--yoast-checkmark--green) no-repeat center;content:"";display:inline-block;height:13px;margin-left:8px;width:14px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{flex-grow:1;padding:24px}@media screen and (max-width:880px){.yoast-modal{bottom:0;height:auto;right:0;left:0;top:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial}.yoast-modal.yoast-modal-collapsible{padding-bottom:72px}.yoast-tabs .yoast-modal__content{grid-template-rows:48px 1fr 72px}.yoast-modal__heading{min-height:48px;padding:0 16px;position:fixed;top:0;width:100%;z-index:11}.yoast-modal__heading h1{font-size:var(--yoast-font-size-default)}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-left:8px}.yoast .yoast-close{left:3px}.yoast-modal__heading .yoast-h2{font-size:var(--yoast-font-size-default)}.yoast-modal__section{flex-grow:0;overflow:initial}.yoast-modal__section-content{margin:0 16px;padding:24px 0}.yoast-modal__section:first-of-type{margin-top:48px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{margin:0;padding:0;position:sticky;top:48px}.yoast-modal__section-open .yoast-modal__section-header{margin-right:16px;margin-left:16px;padding-right:0;padding-left:0}.yoast-modal__section-open{border-bottom:var(--yoast-border-default)}.yoast-modal__footer{margin:0;min-height:72px;padding:0 16px;position:fixed;width:100%;z-index:11}.yoast-modal-collapsible .yoast-modal__footer{min-height:72px}.yoast-modal-collapsible .yoast-modal__section-content{border-bottom:var(--yoast-border-default);margin:0;padding:24px 16px}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{background:#fff;border:none;border-bottom:var(--yoast-border-default);color:var(--yoast-color-primary);cursor:pointer;font-size:var(--yoast-font-size-default);justify-content:space-between;padding:16px;text-align:right;width:100%}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(-180deg)}.yoast-collapsible__trigger[aria-expanded=true]{margin:0 16px;padding:16px 0;width:calc(100% - 32px)}.yoast-collapsible__icon{background-color:var(--yoast-color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0 6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;border:none;display:block;float:left;height:19px;width:19px}.yoast-collapsible-block{margin-top:48px;width:100%}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}.yoast-post-settings-modal{height:100%;max-height:calc(100% - 96px);max-width:calc(100% - 96px);overflow:hidden;width:880px}.yoast-modal-content{padding:16px}@media (min-width:782px){.yoast-modal-content--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}}.yoast-post-settings-modal__button-container{border-bottom:1px solid #0003;display:flex;flex-direction:column;padding:16px}.yoast-post-settings-modal .components-modal__content{display:flex;flex-direction:column;padding:0}.yoast-post-settings-modal .components-modal__header{border-bottom:var(--yoast-border-default);flex-shrink:0;margin:0}.yoast-post-settings-modal .yoast-notice-container{bottom:0;right:0;margin-top:auto;position:sticky;width:100%;z-index:1}.yoast-post-settings-modal .components-modal__content>div:not([class]):not([class=""]){display:flex;flex-direction:column;overflow:hidden}.yoast-post-settings-modal .yoast-notice-container>hr{margin-bottom:0;margin-top:-1px}.yoast-post-settings-modal .yoast-content-container{flex-grow:1;overflow-y:auto}.yoast-post-settings-modal .yoast-button-container{display:flex;flex-direction:row;justify-content:flex-end;margin:0;padding:24px}.yoast-post-settings-modal .yoast-button-container p{align-self:center;color:var(--yoast-color-label-help);padding-left:24px}.yoast-post-settings-modal .yoast-button-container button{align-self:center;flex-shrink:0;max-height:45px}@media only screen and (max-width:600px){.yoast-post-settings-modal{max-height:100%;max-width:100%}.yoast-post-settings-modal .yoast-button-container{justify-content:space-between;padding:16px}.yoast-post-settings-modal .yoast-button-container p{padding-left:0}}.yoast-related-keyphrases-modal,.yoast-wincher-seo-performance-modal{max-width:712px}.yoast-wincher-seo-performance-modal__content{padding:25px 32px 32px}#yoast-get-related-keyphrases-metabox,#yoast-get-related-keyphrases-sidebar{margin-top:8px}.yoast-gutenberg-modal .yoast-related-keyphrases-modal__content{min-height:66vh;position:relative}#yoast-semrush-country-selector{border:none;position:relative}.yoast-related-keyphrases-modal__chart{display:block}.m6zwb4v,.m6zwb4v:visited{background:#e6f3ff;border-radius:2px;color:#575f67;cursor:pointer;display:inline-block;padding-right:2px;padding-left:2px;-webkit-text-decoration:none;text-decoration:none}.m6zwb4v:focus,.m6zwb4v:hover{background:#edf5fd;color:#677584;outline:0}.m6zwb4v:active{background:#455261;color:#222}.mnw6qvm{background:#fff;border:1px solid #eee;border-radius:2px;box-shadow:0 4px 30px 0 #dcdcdc;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;max-width:440px;min-width:220px;padding-bottom:8px;padding-top:8px;position:absolute;transform:scale(0);z-index:2}.m1ymsnxd{opacity:0;transition:opacity .25s cubic-bezier(.3,1.2,.2,1)}.m126ak5t{opacity:1}.mtiwdxc{padding:7px 10px 3px;transition:background-color .4s cubic-bezier(.27,1.27,.48,.56)}.mtiwdxc:active{background-color:#cce7ff}.myz2dw1{background-color:#e6f3ff;padding:7px 10px 3px;transition:background-color .4s cubic-bezier(.27,1.27,.48,.56)}.myz2dw1:active{background-color:#cce7ff}.mpqdcgq{font-size:.9em;margin-bottom:.2em;margin-right:8px;max-width:368px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m1mfvffo,.mpqdcgq{display:inline-block}.m1mfvffo{border-radius:12px;height:24px;width:24px}.DraftEditor-editorContainer,.DraftEditor-root,.public-DraftEditor-content{height:inherit;text-align:initial}.public-DraftEditor-content[contenteditable=true]{-webkit-user-modify:read-write-plaintext-only}.DraftEditor-root{position:relative}.DraftEditor-editorContainer{background-color:#fff0;border-left:.1px solid #0000;position:relative;z-index:1}.public-DraftEditor-block{position:relative}.DraftEditor-alignLeft .public-DraftStyleDefault-block{text-align:left}.DraftEditor-alignLeft .public-DraftEditorPlaceholder-root{left:0;text-align:left}.DraftEditor-alignCenter .public-DraftStyleDefault-block{text-align:center}.DraftEditor-alignCenter .public-DraftEditorPlaceholder-root{margin:0 auto;text-align:center;width:100%}.DraftEditor-alignRight .public-DraftStyleDefault-block{text-align:right}.DraftEditor-alignRight .public-DraftEditorPlaceholder-root{right:0;text-align:right}.public-DraftEditorPlaceholder-root{color:#9197a3;position:absolute;width:100%;z-index:1}.public-DraftEditorPlaceholder-hasFocus{color:#bdc1c9}.DraftEditorPlaceholder-hidden{display:none}.public-DraftStyleDefault-block{position:relative;white-space:pre-wrap}.public-DraftStyleDefault-ltr{direction:ltr;text-align:left}.public-DraftStyleDefault-rtl{direction:rtl;text-align:right}.public-DraftStyleDefault-listLTR{direction:ltr}.public-DraftStyleDefault-listRTL{direction:rtl}.public-DraftStyleDefault-ol,.public-DraftStyleDefault-ul{margin:16px 0;padding:0}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listLTR{margin-left:1.5em}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listRTL{margin-right:1.5em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listLTR{margin-left:3em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listRTL{margin-right:3em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listLTR{margin-left:4.5em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listRTL{margin-right:4.5em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listLTR{margin-left:6em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listRTL{margin-right:6em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listLTR{margin-left:7.5em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listRTL{margin-right:7.5em}.public-DraftStyleDefault-unorderedListItem{list-style-type:square;position:relative}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth0{list-style-type:disc}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth1{list-style-type:circle}.public-DraftStyleDefault-orderedListItem{list-style-type:none;position:relative}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listLTR:before{left:-36px;position:absolute;text-align:right;width:30px}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listRTL:before{position:absolute;right:-36px;text-align:left;width:30px}.public-DraftStyleDefault-orderedListItem:before{content:counter(ol0) ". ";counter-increment:ol0}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth1:before{content:counter(ol1,lower-alpha) ". ";counter-increment:ol1}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth2:before{content:counter(ol2,lower-roman) ". ";counter-increment:ol2}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth3:before{content:counter(ol3) ". ";counter-increment:ol3}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth4:before{content:counter(ol4,lower-alpha) ". ";counter-increment:ol4}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-reset{counter-reset:ol0}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-reset{counter-reset:ol1}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-reset{counter-reset:ol2}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-reset{counter-reset:ol3}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-reset{counter-reset:ol4}#wpseo_meta{box-sizing:border-box}#wpseo_meta *,#wpseo_meta :after,#wpseo_meta :before{box-sizing:inherit}.DraftEditor-root [data-block]{margin:0}#edittag>#wp-description-wrap{display:none}#wp-description-wrap .wp-editor-area{border:0}.term-description-wrap td>textarea#description{min-height:530px}.wpseo-meta-section,.wpseo-meta-section-react{border:1px solid #0003;display:none;height:auto;max-width:600px;min-height:100%;vertical-align:top;width:100%}.wpseo-meta-section-react.active,.wpseo-meta-section.active{background:#fff;position:relative;z-index:12}.wpseo-meta-section.active{display:inline-block}.wpseo-meta-section-react.active{display:block;margin-bottom:10px}.wpseo-meta-section-content{padding:16px}.wpseo-metabox-content{max-width:800px;padding-top:16px}.edit-post-meta-boxes-area__container .wpseo-metabox .postbox-header{border-bottom:1px solid #ddd}.edit-post-meta-boxes-area__container .wpseo-metabox .inside{background-color:#f1f5f9}.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-metabox-content{max-width:none;padding:32px 8px 8px}.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-meta-section,.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-metabox-menu{margin:0 auto}.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-meta-section.active{display:block}.wpseo-metabox-menu{max-width:600px;padding:0}.wpseo-metabox-menu ul{align-items:flex-end;display:flex;flex-wrap:wrap;flex-flow:wrap-reverse;margin:0 0 0 1px;padding:0 16px 0 0}.wpseo-metabox-menu ul li:first-child{z-index:10}.wpseo-metabox-menu ul li:nth-child(2){z-index:9}.wpseo-metabox-menu ul li:nth-child(3){z-index:8}.wpseo-metabox-menu ul li:nth-child(4){z-index:7}.wpseo-metabox-menu ul li:nth-child(5){z-index:6}.wpseo-metabox-menu ul li:nth-child(6){z-index:5}.wpseo-metabox-menu ul li{background-color:#f8f8f8;box-shadow:0 0 4px 0 #0000001a;height:32px;margin-bottom:-1px;margin-right:-1px;position:relative;text-align:center}.wpseo-metabox-menu ul li a{align-items:center;border:1px solid #0003;border-bottom:2px #0000;color:#0073aa;display:flex}.wpseo-metabox-menu ul li a:focus{box-shadow:inherit}.wpseo-metabox-menu ul li .yst-traffic-light{height:20px;margin-right:4px;margin-left:10px;width:auto}.wpseo-metabox-menu ul li span.dashicons{margin-left:8px}.wpseo-metabox-menu ul li span.wpseo-buy-premium{color:#a4286a}.wpseo-metabox-menu ul li span.wpseo-buy-premium:hover{color:#832055}.wpseo-metabox-menu ul li.active{background-color:#fff;border-bottom:2px #0000;box-shadow:none;height:36px;margin-top:-4px;z-index:13}.wpseo-metabox-menu ul li.active a{color:#444;height:36px}.wpseo-metabox-menu ul li.active span.wpseo-buy-premium{border-color:#a4286a;color:#a4286a}.wpseo-metabox-menu ul li.active span.wpseo-buy-premium:hover{border-color:#832055;color:#832055}.wpseo-metabox-menu a{height:32px;padding:0 8px;text-decoration:none}.wpseotab{background-color:#fdfdfd;border:1px solid #ddd;display:none;padding:16px}.wpseotab .wpseo-cornerstone-checkbox{margin-left:.5em}.wpseotab.content{padding:20px 15px}.wpseotab.active{display:block}.wpseo-metabox-sidebar .dashicons{font-size:30px;height:30px;width:30px}#wpseo_meta .inside{margin:0}#wpseo_meta .inside:after{clear:both;content:"";display:table}#wpseo_meta .postbox .inside .wpseotab{font-size:13px!important}.wpseo-form input,.wpseo-form label,.wpseo-form p.error-message,.wpseo-form textarea{max-width:600px}.wpseo-form fieldset{padding-top:5px}.wpseo-form legend{font-weight:600}.wpseo-form label{display:block;font-weight:600}.wpseo-form input[type=checkbox]+label,.wpseo-form input[type=radio]+label{display:inline-block;font-weight:400}.wpseo-form fieldset,.wpseo-form label{margin-bottom:.5em;margin-top:2em}.wpseo-form input[type=checkbox],.wpseo-form input[type=checkbox]+label{font-size:1em;margin-bottom:0;margin-top:2em}.wpseo-form fieldset:first-child,.wpseo-form input[type=checkbox]:first-child,.wpseo-form input[type=checkbox]:first-child+label,.wpseo-form label:first-child{margin-top:10px}.wpseo-form input[type=radio]{margin-top:0}.wpseo-form input[type=radio]+label{margin:0 0 0 1em}.wpseo-form p.error-message{margin:.5em 0}.wpseo-form select[multiple]{margin-top:0}.yoast-metabox__description{margin:.5em 0;max-width:600px}.wpseo_image_upload_button{margin-right:3px}.good,.warn,.wrong{font-weight:600}.good{color:green}.warn{color:maroon}.wrong{color:#dc3232}#current_seo_title span{background-color:#ffffe0;padding:2px 5px}#focuskwresults ul{margin:0}#focuskwresults li,#focuskwresults p{font-size:13px}#focuskwresults li{list-style-type:disc;margin:0 20px 0 0}.wpseo_hidden{display:none}.wpseo_msg{background-color:#ffffe0;border:1px solid #e6db55;margin:5px 0 10px;padding:0 5px}.snippet-editor__button.snippet-editor__edit-button:focus{background-color:#fafafa;border-color:#5b9dd9;box-shadow:0 0 3px #0073aacc;color:#23282d;outline:none}.wpseo-admin-page .subsubsub li{display:inline;max-width:none}.yoast-seo-help-container{float:right;max-width:none;width:100%}.yoast-seo-help-container .yoast-help-panel{margin:.5em 0!important}.wpseo_content_wrapper p.search-box{margin:10px 0 5px}#wpseotab .ui-widget-content .ui-state-hover{background:#f1f1f1;border:1px solid #dfdfdf;color:#333}.yst-traffic-light{height:30px;margin:0 5px 0 0;width:19px}.yst-traffic-light .traffic-light-color{display:none}.yst-traffic-light.bad .traffic-light-red,.yst-traffic-light.good .traffic-light-green,.yst-traffic-light.init .traffic-light-init,.yst-traffic-light.na .traffic-light-empty,.yst-traffic-light.ok .traffic-light-orange{display:inline}.yoast-seo-score .yoast-logo.svg{background:var(--yoast-svg-icon-yoast) no-repeat;background-size:18px;flex-shrink:0;float:right;height:18px;margin-left:7px;width:18px}.yoast-seo-score .yoast-logo.svg.good{background-image:var(--yoast-svg-icon-yoast-good)}.yoast-seo-score .yoast-logo.svg.ok{background-image:var(--yoast-svg-icon-yoast-ok)}.yoast-seo-score .yoast-logo.svg.bad{background-image:var(--yoast-svg-icon-yoast-bad)}.yoast-seo-score .yoast-logo.svg.na,.yoast-seo-score .yoast-logo.svg.noindex{background-image:var(--yoast-svg-icon-yoast)}.term-php .wpseo-taxonomy-metabox-postbox>h2{border-bottom:1px solid #eee;font-size:14px;line-height:1.4;margin:0;padding:8px 12px}#TB_window #TB_ajaxContent p{margin:5px 0 0;padding:5px 0 0}#TB_window #TB_ajaxContent ul{margin:5px 0 10px}#TB_window #TB_ajaxContent li{list-style:none;margin:5px 0 0}#TB_window #TB_ajaxContent li:before{content:"+";font-weight:700;margin:0 0 0 10px}.yoast-section__heading-icon-list{background-image:var(--yoast-svg-icon-list)}.yoast-section__heading-icon-key{background-image:var(--yoast-svg-icon-key)}.yoast-section__heading-icon-edit{background-image:var(--yoast-svg-icon-edit)}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.screen-reader-text.wpseo-generic-tab-textual-score,.screen-reader-text.wpseo-keyword-tab-textual-score{display:block}.yoast-notice-go-premium{background:#f1f1f1;border-right-color:#a4286a;margin:0}.editor-styles-wrapper mark.annotation-text-yoast{background-color:#e1bee7}@media screen and (max-width:782px){.wpseo-metabox-buy-premium .wpseo-buy-premium{display:inline-block;height:20px;margin-left:5px;padding:0;width:20px}.yoast-help-panel{max-width:none!important}#wpseo-crawl-issues-table-form .subsubsub{float:none;max-width:calc(100vw - 20px)}#wpseo-crawl-issues-table-form .yoast-help-button{margin-top:3px}.wpseotab select[multiple]{height:auto!important}}@media screen and (max-width:600px){.wpseotab.content{padding:16px 0}}.wpseo-score-icon-container{align-items:center;display:flex;height:20px;justify-content:center;margin-left:8px;width:20px}.yoast-seo-sidebar-panel .yoast-analysis-check{display:flex}.yoast-seo-sidebar-panel .yoast-analysis-check svg{margin-left:5px;margin-top:6px}.yoast-seo-sidebar-panel .yoast-analysis-check span{line-height:1.5;margin-top:3px}.yoast-seo-sidebar-panel div{line-height:2}.yoast-seo-sidebar-panel div svg{vertical-align:middle}ul.yoast-seo-social-share-buttons li{display:inline-block;margin-left:24px}ul.yoast-seo-social-share-buttons li .x-share svg{fill:#000;height:30px;width:30px}ul.yoast-seo-social-share-buttons svg{height:32px;margin-bottom:8px;width:32px}ul.yoast-seo-social-share-buttons a{align-items:center;display:flex;flex-direction:column}.yoast-field-group.yoast-wincher-post-publish{margin-bottom:10px}.edit-post-pinned-plugins button.components-button:not(.is-compact)[aria-label="Yoast SEO Premium"]>svg,.edit-post-pinned-plugins button.components-button:not(.is-compact)[aria-label="Yoast SEO"]>svg,div.interface-pinned-items button.components-button:not(.is-compact)[aria-label="Yoast SEO Premium"]>svg,div.interface-pinned-items button.components-button:not(.is-compact)[aria-label="Yoast SEO"]>svg{height:28px;max-height:28px;max-width:28px;width:28px}div.interface-pinned-items button.components-button.is-pressed[aria-label="Yoast SEO Premium"]>svg path,div.interface-pinned-items button.components-button.is-pressed[aria-label="Yoast SEO"]>svg path{fill:#fff}.wpseo-schema-icon{align-items:center;background-image:var(--yoast-svg-icon-schema);background-size:cover;display:flex;height:16px;justify-content:center;margin-left:8px;width:16px}.wpseo-metabox-menu ul li.active a .wpseo-schema-icon{background-image:var(--yoast-svg-icon-schema-active)}.yoast-icon-span svg{fill:inherit;margin-left:8px}.yoast.components-panel__body{border-top:0}.components-button>.yoast-title-container{flex-grow:1;line-height:normal;overflow-x:hidden}.yoast-title-container>.yoast-subtitle,.yoast-title-container>.yoast-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yoast-title-container>.yoast-subtitle{font-size:.8125rem;font-weight:300;margin-top:2px}.yoast.components-panel__body .yoast-chevron{background-color:#1e1e1e;display:inline-block;height:24px;-webkit-mask-image:var(--yoast-svg-icon-chevron-down);mask-image:var(--yoast-svg-icon-chevron-down);-webkit-mask-size:100% 100%;mask-size:100% 100%;width:24px}.yoast.components-panel__body.is-opened .yoast-chevron{-webkit-mask-image:var(--yoast-svg-icon-chevron-up);mask-image:var(--yoast-svg-icon-chevron-up)}.yoast .components-panel__body-toggle{padding-left:16px}.yoast .components-form-token-field__remove-token.components-button,.yoast .components-form-token-field__token-text{background-color:var(--yoast-color-primary);color:var(--yoast-color-white)}.yoast .yoast-insights{color:#404040}.yoast .yoast-insights .yoast-field-group__title>b{color:var(--yoast-color-primary);font-size:16px;font-weight:var(--yoast-font-weight-default);line-height:1.2em}.yoast .yoast-insights-card__score{color:var(--yoast-color-primary);margin-block:0}.yoast .yoast-insights-card__description{line-height:1.4em}.yoast .yoast-prominent-words p,.yoast .yoast-prominent-words ul,.yoast .yoast-text-formality p{margin-block:1.2em}.yoast #wpseo-metabox-root .yoast-prominent-words{border-bottom:1px solid #0000001a;margin-bottom:24px;padding-bottom:24px}.yoast .yoast-insights .yoast-data-model--upsell li{color:#bbb}.yoast .yoast-insights .yoast-data-model--upsell li:after{background:#fdf4f8} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340.css new file mode 100644 index 00000000..e01e4791 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2340.css @@ -0,0 +1,3 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.yoast-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#a4286a99;bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000}.yoast-modal{background:#fff;bottom:48px;display:flex;flex-direction:column;height:calc(100% - 96px);left:calc(50% - 440px);max-width:880px;overflow:hidden;position:fixed;top:48px;width:100%}.yoast-gutenberg-modal .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-right:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-columns:280px 1fr;grid-template-rows:72px 1fr 88px}.yoast-modal__heading{align-items:center;background:var(--yoast-color-white);border-bottom:var(--yoast-border-default);box-sizing:border-box;display:flex;grid-area:heading;min-height:72px;padding:0 24px}.yoast-modal__heading .yoast-close{position:absolute;right:16px}.yoast-gutenberg-modal__box.components-modal__frame{box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}@media (min-width:600px){.yoast-gutenberg-modal__box.components-modal__frame{border-radius:8px;max-height:calc(100% - 48px)}}.yoast-gutenberg-modal__no-padding .components-modal__content{padding:0}.yoast-gutenberg-modal .components-modal__header-heading,.yoast-modal__heading h1{color:var(--yoast-color-primary);font-size:20px;font-weight:400;line-height:1.2;margin:0}.yoast-gutenberg-modal .components-modal__content .components-modal__header{border-bottom:1px solid #e2e8f0!important}.yoast-gutenberg-modal .components-modal__icon-container{display:inline-flex}.yoast-gutenberg-modal .components-modal__icon-container svg,.yoast-modal__heading-icon{fill:var(--yoast-color-primary);flex-shrink:0;height:20px;margin-right:16px;width:19px}.yoast-modal__menu{border-right:var(--yoast-border-default);grid-area:menu;overflow-y:auto}.yoast-modal__menu ul{list-style:none;margin:0;padding:0}.yoast-modal__menu li{border-bottom:var(--yoast-border-default);color:var(--yoast-color-default);cursor:pointer;display:block;font-size:16px;padding:12px 16px 11px;text-decoration:none}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--yoast-color-primary);border-bottom:var(--yoast-border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{display:flex;flex-direction:column;flex-grow:1;grid-area:content;overflow-y:auto;position:relative}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{background:var(--yoast-color-white);padding:24px 24px 0;position:sticky;top:0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--yoast-border-default);padding-bottom:24px}.yoast-modal__footer{align-items:center;align-self:flex-end;background:var(--yoast-color-white);border-top:var(--yoast-border-default);bottom:0;box-sizing:border-box;display:flex;grid-area:footer;justify-content:flex-end;margin:0 24px;min-height:88px;padding:0;position:sticky;width:calc(100% - 48px);z-index:10}.yoast-modal__settings-saved{align-items:center;display:inline-flex;margin-right:16px;position:relative}.yoast-modal__settings-saved:before{background:var(--yoast-checkmark--green) no-repeat center;content:"";display:inline-block;height:13px;margin-right:8px;width:14px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{flex-grow:1;padding:24px}@media screen and (max-width:880px){.yoast-modal{bottom:0;height:auto;left:0;right:0;top:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial}.yoast-modal.yoast-modal-collapsible{padding-bottom:72px}.yoast-tabs .yoast-modal__content{grid-template-rows:48px 1fr 72px}.yoast-modal__heading{min-height:48px;padding:0 16px;position:fixed;top:0;width:100%;z-index:11}.yoast-modal__heading h1{font-size:var(--yoast-font-size-default)}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-right:8px}.yoast .yoast-close{right:3px}.yoast-modal__heading .yoast-h2{font-size:var(--yoast-font-size-default)}.yoast-modal__section{flex-grow:0;overflow:initial}.yoast-modal__section-content{margin:0 16px;padding:24px 0}.yoast-modal__section:first-of-type{margin-top:48px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{margin:0;padding:0;position:sticky;top:48px}.yoast-modal__section-open .yoast-modal__section-header{margin-left:16px;margin-right:16px;padding-left:0;padding-right:0}.yoast-modal__section-open{border-bottom:var(--yoast-border-default)}.yoast-modal__footer{margin:0;min-height:72px;padding:0 16px;position:fixed;width:100%;z-index:11}.yoast-modal-collapsible .yoast-modal__footer{min-height:72px}.yoast-modal-collapsible .yoast-modal__section-content{border-bottom:var(--yoast-border-default);margin:0;padding:24px 16px}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{background:#fff;border:none;border-bottom:var(--yoast-border-default);color:var(--yoast-color-primary);cursor:pointer;font-size:var(--yoast-font-size-default);justify-content:space-between;padding:16px;text-align:left;width:100%}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(180deg)}.yoast-collapsible__trigger[aria-expanded=true]{margin:0 16px;padding:16px 0;width:calc(100% - 32px)}.yoast-collapsible__icon{background-color:var(--yoast-color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0 6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;border:none;display:block;float:right;height:19px;width:19px}.yoast-collapsible-block{margin-top:48px;width:100%}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}.yoast-post-settings-modal{height:100%;max-height:calc(100% - 96px);max-width:calc(100% - 96px);overflow:hidden;width:880px}.yoast-modal-content{padding:16px}@media (min-width:782px){.yoast-modal-content--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}}.yoast-post-settings-modal__button-container{border-bottom:1px solid #0003;display:flex;flex-direction:column;padding:16px}.yoast-post-settings-modal .components-modal__content{display:flex;flex-direction:column;padding:0}.yoast-post-settings-modal .components-modal__header{border-bottom:var(--yoast-border-default);flex-shrink:0;margin:0}.yoast-post-settings-modal .yoast-notice-container{bottom:0;left:0;margin-top:auto;position:sticky;width:100%;z-index:1}.yoast-post-settings-modal .components-modal__content>div:not([class]):not([class=""]){display:flex;flex-direction:column;overflow:hidden}.yoast-post-settings-modal .yoast-notice-container>hr{margin-bottom:0;margin-top:-1px}.yoast-post-settings-modal .yoast-content-container{flex-grow:1;overflow-y:auto}.yoast-post-settings-modal .yoast-button-container{display:flex;flex-direction:row;justify-content:flex-end;margin:0;padding:24px}.yoast-post-settings-modal .yoast-button-container p{align-self:center;color:var(--yoast-color-label-help);padding-right:24px}.yoast-post-settings-modal .yoast-button-container button{align-self:center;flex-shrink:0;max-height:45px}@media only screen and (max-width:600px){.yoast-post-settings-modal{max-height:100%;max-width:100%}.yoast-post-settings-modal .yoast-button-container{justify-content:space-between;padding:16px}.yoast-post-settings-modal .yoast-button-container p{padding-right:0}}.yoast-related-keyphrases-modal,.yoast-wincher-seo-performance-modal{max-width:712px}.yoast-wincher-seo-performance-modal__content{padding:25px 32px 32px}#yoast-get-related-keyphrases-metabox,#yoast-get-related-keyphrases-sidebar{margin-top:8px}.yoast-gutenberg-modal .yoast-related-keyphrases-modal__content{min-height:66vh;position:relative}#yoast-semrush-country-selector{border:none;position:relative}.yoast-related-keyphrases-modal__chart{display:block}.m6zwb4v,.m6zwb4v:visited{background:#e6f3ff;border-radius:2px;color:#575f67;cursor:pointer;display:inline-block;padding-left:2px;padding-right:2px;-webkit-text-decoration:none;text-decoration:none}.m6zwb4v:focus,.m6zwb4v:hover{background:#edf5fd;color:#677584;outline:0}.m6zwb4v:active{background:#455261;color:#222}.mnw6qvm{background:#fff;border:1px solid #eee;border-radius:2px;box-shadow:0 4px 30px 0 #dcdcdc;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;max-width:440px;min-width:220px;padding-bottom:8px;padding-top:8px;position:absolute;transform:scale(0);z-index:2}.m1ymsnxd{opacity:0;transition:opacity .25s cubic-bezier(.3,1.2,.2,1)}.m126ak5t{opacity:1}.mtiwdxc{padding:7px 10px 3px;transition:background-color .4s cubic-bezier(.27,1.27,.48,.56)}.mtiwdxc:active{background-color:#cce7ff}.myz2dw1{background-color:#e6f3ff;padding:7px 10px 3px;transition:background-color .4s cubic-bezier(.27,1.27,.48,.56)}.myz2dw1:active{background-color:#cce7ff}.mpqdcgq{font-size:.9em;margin-bottom:.2em;margin-left:8px;max-width:368px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m1mfvffo,.mpqdcgq{display:inline-block}.m1mfvffo{border-radius:12px;height:24px;width:24px} +/*!rtl:begin:ignore*/.DraftEditor-editorContainer,.DraftEditor-root,.public-DraftEditor-content{height:inherit;text-align:initial}.public-DraftEditor-content[contenteditable=true]{-webkit-user-modify:read-write-plaintext-only}.DraftEditor-root{position:relative}.DraftEditor-editorContainer{background-color:#fff0;border-left:.1px solid #0000;position:relative;z-index:1}.public-DraftEditor-block{position:relative}.DraftEditor-alignLeft .public-DraftStyleDefault-block{text-align:left}.DraftEditor-alignLeft .public-DraftEditorPlaceholder-root{left:0;text-align:left}.DraftEditor-alignCenter .public-DraftStyleDefault-block{text-align:center}.DraftEditor-alignCenter .public-DraftEditorPlaceholder-root{margin:0 auto;text-align:center;width:100%}.DraftEditor-alignRight .public-DraftStyleDefault-block{text-align:right}.DraftEditor-alignRight .public-DraftEditorPlaceholder-root{right:0;text-align:right}.public-DraftEditorPlaceholder-root{color:#9197a3;position:absolute;width:100%;z-index:1}.public-DraftEditorPlaceholder-hasFocus{color:#bdc1c9}.DraftEditorPlaceholder-hidden{display:none}.public-DraftStyleDefault-block{position:relative;white-space:pre-wrap}.public-DraftStyleDefault-ltr{direction:ltr;text-align:left}.public-DraftStyleDefault-rtl{direction:rtl;text-align:right}.public-DraftStyleDefault-listLTR{direction:ltr}.public-DraftStyleDefault-listRTL{direction:rtl}.public-DraftStyleDefault-ol,.public-DraftStyleDefault-ul{margin:16px 0;padding:0}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listLTR{margin-left:1.5em}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listRTL{margin-right:1.5em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listLTR{margin-left:3em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listRTL{margin-right:3em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listLTR{margin-left:4.5em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listRTL{margin-right:4.5em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listLTR{margin-left:6em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listRTL{margin-right:6em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listLTR{margin-left:7.5em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listRTL{margin-right:7.5em}.public-DraftStyleDefault-unorderedListItem{list-style-type:square;position:relative}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth0{list-style-type:disc}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth1{list-style-type:circle}.public-DraftStyleDefault-orderedListItem{list-style-type:none;position:relative}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listLTR:before{left:-36px;position:absolute;text-align:right;width:30px}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listRTL:before{position:absolute;right:-36px;text-align:left;width:30px}.public-DraftStyleDefault-orderedListItem:before{content:counter(ol0) ". ";counter-increment:ol0}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth1:before{content:counter(ol1,lower-alpha) ". ";counter-increment:ol1}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth2:before{content:counter(ol2,lower-roman) ". ";counter-increment:ol2}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth3:before{content:counter(ol3) ". ";counter-increment:ol3}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth4:before{content:counter(ol4,lower-alpha) ". ";counter-increment:ol4}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-reset{counter-reset:ol0}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-reset{counter-reset:ol1}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-reset{counter-reset:ol2}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-reset{counter-reset:ol3}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-reset{counter-reset:ol4} +/*!rtl:end:ignore*/#wpseo_meta{box-sizing:border-box}#wpseo_meta *,#wpseo_meta :after,#wpseo_meta :before{box-sizing:inherit}.DraftEditor-root [data-block]{margin:0}#edittag>#wp-description-wrap{display:none}#wp-description-wrap .wp-editor-area{border:0}.term-description-wrap td>textarea#description{min-height:530px}.wpseo-meta-section,.wpseo-meta-section-react{border:1px solid #0003;display:none;height:auto;max-width:600px;min-height:100%;vertical-align:top;width:100%}.wpseo-meta-section-react.active,.wpseo-meta-section.active{background:#fff;position:relative;z-index:12}.wpseo-meta-section.active{display:inline-block}.wpseo-meta-section-react.active{display:block;margin-bottom:10px}.wpseo-meta-section-content{padding:16px}.wpseo-metabox-content{max-width:800px;padding-top:16px}.edit-post-meta-boxes-area__container .wpseo-metabox .postbox-header{border-bottom:1px solid #ddd}.edit-post-meta-boxes-area__container .wpseo-metabox .inside{background-color:#f1f5f9}.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-metabox-content{max-width:none;padding:32px 8px 8px}.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-meta-section,.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-metabox-menu{margin:0 auto}.edit-post-meta-boxes-area__container .wpseo-metabox .wpseo-meta-section.active{display:block}.wpseo-metabox-menu{max-width:600px;padding:0}.wpseo-metabox-menu ul{align-items:flex-end;display:flex;flex-wrap:wrap;flex-flow:wrap-reverse;margin:0 1px 0 0;padding:0 0 0 16px}.wpseo-metabox-menu ul li:first-child{z-index:10}.wpseo-metabox-menu ul li:nth-child(2){z-index:9}.wpseo-metabox-menu ul li:nth-child(3){z-index:8}.wpseo-metabox-menu ul li:nth-child(4){z-index:7}.wpseo-metabox-menu ul li:nth-child(5){z-index:6}.wpseo-metabox-menu ul li:nth-child(6){z-index:5}.wpseo-metabox-menu ul li{background-color:#f8f8f8;box-shadow:0 0 4px 0 #0000001a;height:32px;margin-bottom:-1px;margin-left:-1px;position:relative;text-align:center}.wpseo-metabox-menu ul li a{align-items:center;border:1px solid #0003;border-bottom:2px #0000;color:#0073aa;display:flex}.wpseo-metabox-menu ul li a:focus{box-shadow:inherit}.wpseo-metabox-menu ul li .yst-traffic-light{height:20px;margin-left:4px;margin-right:10px;width:auto}.wpseo-metabox-menu ul li span.dashicons{margin-right:8px}.wpseo-metabox-menu ul li span.wpseo-buy-premium{color:#a4286a}.wpseo-metabox-menu ul li span.wpseo-buy-premium:hover{color:#832055}.wpseo-metabox-menu ul li.active{background-color:#fff;border-bottom:2px #0000;box-shadow:none;height:36px;margin-top:-4px;z-index:13}.wpseo-metabox-menu ul li.active a{color:#444;height:36px}.wpseo-metabox-menu ul li.active span.wpseo-buy-premium{border-color:#a4286a;color:#a4286a}.wpseo-metabox-menu ul li.active span.wpseo-buy-premium:hover{border-color:#832055;color:#832055}.wpseo-metabox-menu a{height:32px;padding:0 8px;text-decoration:none}.wpseotab{background-color:#fdfdfd;border:1px solid #ddd;display:none;padding:16px}.wpseotab .wpseo-cornerstone-checkbox{margin-right:.5em}.wpseotab.content{padding:20px 15px}.wpseotab.active{display:block}.wpseo-metabox-sidebar .dashicons{font-size:30px;height:30px;width:30px}#wpseo_meta .inside{margin:0}#wpseo_meta .inside:after{clear:both;content:"";display:table}#wpseo_meta .postbox .inside .wpseotab{font-size:13px!important}.wpseo-form input,.wpseo-form label,.wpseo-form p.error-message,.wpseo-form textarea{max-width:600px}.wpseo-form fieldset{padding-top:5px}.wpseo-form legend{font-weight:600}.wpseo-form label{display:block;font-weight:600}.wpseo-form input[type=checkbox]+label,.wpseo-form input[type=radio]+label{display:inline-block;font-weight:400}.wpseo-form fieldset,.wpseo-form label{margin-bottom:.5em;margin-top:2em}.wpseo-form input[type=checkbox],.wpseo-form input[type=checkbox]+label{font-size:1em;margin-bottom:0;margin-top:2em}.wpseo-form fieldset:first-child,.wpseo-form input[type=checkbox]:first-child,.wpseo-form input[type=checkbox]:first-child+label,.wpseo-form label:first-child{margin-top:10px}.wpseo-form input[type=radio]{margin-top:0}.wpseo-form input[type=radio]+label{margin:0 1em 0 0}.wpseo-form p.error-message{margin:.5em 0}.wpseo-form select[multiple]{margin-top:0}.yoast-metabox__description{margin:.5em 0;max-width:600px}.wpseo_image_upload_button{margin-left:3px}.good,.warn,.wrong{font-weight:600}.good{color:green}.warn{color:maroon}.wrong{color:#dc3232}#current_seo_title span{background-color:#ffffe0;padding:2px 5px}#focuskwresults ul{margin:0}#focuskwresults li,#focuskwresults p{font-size:13px}#focuskwresults li{list-style-type:disc;margin:0 0 0 20px}.wpseo_hidden{display:none}.wpseo_msg{background-color:#ffffe0;border:1px solid #e6db55;margin:5px 0 10px;padding:0 5px}.snippet-editor__button.snippet-editor__edit-button:focus{background-color:#fafafa;border-color:#5b9dd9;box-shadow:0 0 3px #0073aacc;color:#23282d;outline:none}.wpseo-admin-page .subsubsub li{display:inline;max-width:none}.yoast-seo-help-container{float:left;max-width:none;width:100%}.yoast-seo-help-container .yoast-help-panel{margin:.5em 0!important}.wpseo_content_wrapper p.search-box{margin:10px 0 5px}#wpseotab .ui-widget-content .ui-state-hover{background:#f1f1f1;border:1px solid #dfdfdf;color:#333}.yst-traffic-light{height:30px;margin:0 0 0 5px;width:19px}.yst-traffic-light .traffic-light-color{display:none}.yst-traffic-light.bad .traffic-light-red,.yst-traffic-light.good .traffic-light-green,.yst-traffic-light.init .traffic-light-init,.yst-traffic-light.na .traffic-light-empty,.yst-traffic-light.ok .traffic-light-orange{display:inline}.yoast-seo-score .yoast-logo.svg{background:var(--yoast-svg-icon-yoast) no-repeat;background-size:18px;flex-shrink:0;float:left;height:18px;margin-right:7px;width:18px}.yoast-seo-score .yoast-logo.svg.good{background-image:var(--yoast-svg-icon-yoast-good)}.yoast-seo-score .yoast-logo.svg.ok{background-image:var(--yoast-svg-icon-yoast-ok)}.yoast-seo-score .yoast-logo.svg.bad{background-image:var(--yoast-svg-icon-yoast-bad)}.yoast-seo-score .yoast-logo.svg.na,.yoast-seo-score .yoast-logo.svg.noindex{background-image:var(--yoast-svg-icon-yoast)}.term-php .wpseo-taxonomy-metabox-postbox>h2{border-bottom:1px solid #eee;font-size:14px;line-height:1.4;margin:0;padding:8px 12px}#TB_window #TB_ajaxContent p{margin:5px 0 0;padding:5px 0 0}#TB_window #TB_ajaxContent ul{margin:5px 0 10px}#TB_window #TB_ajaxContent li{list-style:none;margin:5px 0 0}#TB_window #TB_ajaxContent li:before{content:"+";font-weight:700;margin:0 10px 0 0}.yoast-section__heading-icon-list{background-image:var(--yoast-svg-icon-list)}.yoast-section__heading-icon-key{background-image:var(--yoast-svg-icon-key)}.yoast-section__heading-icon-edit{background-image:var(--yoast-svg-icon-edit)}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.screen-reader-text.wpseo-generic-tab-textual-score,.screen-reader-text.wpseo-keyword-tab-textual-score{display:block}.yoast-notice-go-premium{background:#f1f1f1;border-left-color:#a4286a;margin:0}.editor-styles-wrapper mark.annotation-text-yoast{background-color:#e1bee7}@media screen and (max-width:782px){.wpseo-metabox-buy-premium .wpseo-buy-premium{display:inline-block;height:20px;margin-right:5px;padding:0;width:20px}.yoast-help-panel{max-width:none!important}#wpseo-crawl-issues-table-form .subsubsub{float:none;max-width:calc(100vw - 20px)}#wpseo-crawl-issues-table-form .yoast-help-button{margin-top:3px}.wpseotab select[multiple]{height:auto!important}}@media screen and (max-width:600px){.wpseotab.content{padding:16px 0}}.wpseo-score-icon-container{align-items:center;display:flex;height:20px;justify-content:center;margin-right:8px;width:20px}.yoast-seo-sidebar-panel .yoast-analysis-check{display:flex}.yoast-seo-sidebar-panel .yoast-analysis-check svg{margin-right:5px;margin-top:6px}.yoast-seo-sidebar-panel .yoast-analysis-check span{line-height:1.5;margin-top:3px}.yoast-seo-sidebar-panel div{line-height:2}.yoast-seo-sidebar-panel div svg{vertical-align:middle}ul.yoast-seo-social-share-buttons li{display:inline-block;margin-right:24px}ul.yoast-seo-social-share-buttons li .x-share svg{fill:#000;height:30px;width:30px}ul.yoast-seo-social-share-buttons svg{height:32px;margin-bottom:8px;width:32px}ul.yoast-seo-social-share-buttons a{align-items:center;display:flex;flex-direction:column}.yoast-field-group.yoast-wincher-post-publish{margin-bottom:10px}.edit-post-pinned-plugins button.components-button:not(.is-compact)[aria-label="Yoast SEO Premium"]>svg,.edit-post-pinned-plugins button.components-button:not(.is-compact)[aria-label="Yoast SEO"]>svg,div.interface-pinned-items button.components-button:not(.is-compact)[aria-label="Yoast SEO Premium"]>svg,div.interface-pinned-items button.components-button:not(.is-compact)[aria-label="Yoast SEO"]>svg{height:28px;max-height:28px;max-width:28px;width:28px}div.interface-pinned-items button.components-button.is-pressed[aria-label="Yoast SEO Premium"]>svg path,div.interface-pinned-items button.components-button.is-pressed[aria-label="Yoast SEO"]>svg path{fill:#fff}.wpseo-schema-icon{align-items:center;background-image:var(--yoast-svg-icon-schema);background-size:cover;display:flex;height:16px;justify-content:center;margin-right:8px;width:16px}.wpseo-metabox-menu ul li.active a .wpseo-schema-icon{background-image:var(--yoast-svg-icon-schema-active)}.yoast-icon-span svg{fill:inherit;margin-right:8px}.yoast.components-panel__body{border-top:0}.components-button>.yoast-title-container{flex-grow:1;line-height:normal;overflow-x:hidden}.yoast-title-container>.yoast-subtitle,.yoast-title-container>.yoast-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yoast-title-container>.yoast-subtitle{font-size:.8125rem;font-weight:300;margin-top:2px}.yoast.components-panel__body .yoast-chevron{background-color:#1e1e1e;display:inline-block;height:24px;-webkit-mask-image:var(--yoast-svg-icon-chevron-down);mask-image:var(--yoast-svg-icon-chevron-down);-webkit-mask-size:100% 100%;mask-size:100% 100%;width:24px}.yoast.components-panel__body.is-opened .yoast-chevron{-webkit-mask-image:var(--yoast-svg-icon-chevron-up);mask-image:var(--yoast-svg-icon-chevron-up)}.yoast .components-panel__body-toggle{padding-right:16px}.yoast .components-form-token-field__remove-token.components-button,.yoast .components-form-token-field__token-text{background-color:var(--yoast-color-primary);color:var(--yoast-color-white)}.yoast .yoast-insights{color:#404040}.yoast .yoast-insights .yoast-field-group__title>b{color:var(--yoast-color-primary);font-size:16px;font-weight:var(--yoast-font-weight-default);line-height:1.2em}.yoast .yoast-insights-card__score{color:var(--yoast-color-primary);margin-block:0}.yoast .yoast-insights-card__description{line-height:1.4em}.yoast .yoast-prominent-words p,.yoast .yoast-prominent-words ul,.yoast .yoast-text-formality p{margin-block:1.2em}.yoast #wpseo-metabox-root .yoast-prominent-words{border-bottom:1px solid #0000001a;margin-bottom:24px;padding-bottom:24px}.yoast .yoast-insights .yoast-data-model--upsell li{color:#bbb}.yoast .yoast-insights .yoast-data-model--upsell li:after{background:#fdf4f8} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340-rtl.css new file mode 100644 index 00000000..6070b13b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340-rtl.css @@ -0,0 +1 @@ +.wpseo-is-primary-term,.wpseo-primary-term>label{font-weight:600}.wpseo-non-primary-term>.wpseo-is-primary-term,.wpseo-primary-term>.wpseo-make-primary-term,.wpseo-term-unchecked>.wpseo-is-primary-term,.wpseo-term-unchecked>.wpseo-make-primary-term{display:none}.wpseo-is-primary-term,.wpseo-make-primary-term{float:left}.wpseo-non-primary-term:after,.wpseo-non-primary-term:before,.wpseo-primary-term:after,.wpseo-primary-term:before{content:"";display:table}.wpseo-non-primary-term:after,.wpseo-primary-term:after{clear:both}.wpseo-make-primary-term{background:none;border:none;color:#0073aa;cursor:pointer;margin:4px 0 0;padding:0;text-decoration:underline}.wpseo-make-primary-term:hover{color:#00a0d2} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340.css new file mode 100644 index 00000000..32b768ce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2340.css @@ -0,0 +1 @@ +.wpseo-is-primary-term,.wpseo-primary-term>label{font-weight:600}.wpseo-non-primary-term>.wpseo-is-primary-term,.wpseo-primary-term>.wpseo-make-primary-term,.wpseo-term-unchecked>.wpseo-is-primary-term,.wpseo-term-unchecked>.wpseo-make-primary-term{display:none}.wpseo-is-primary-term,.wpseo-make-primary-term{float:right}.wpseo-non-primary-term:after,.wpseo-non-primary-term:before,.wpseo-primary-term:after,.wpseo-primary-term:before{content:"";display:table}.wpseo-non-primary-term:after,.wpseo-primary-term:after{clear:both}.wpseo-make-primary-term{background:none;border:none;color:#0073aa;cursor:pointer;margin:4px 0 0;padding:0;text-decoration:underline}.wpseo-make-primary-term:hover{color:#00a0d2} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340-rtl.css new file mode 100644 index 00000000..9737503e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340-rtl.css @@ -0,0 +1 @@ +.yoast-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#a4286a99;bottom:0;right:0;position:fixed;left:0;top:0;z-index:100000}.yoast-modal{background:#fff;bottom:48px;display:flex;flex-direction:column;height:calc(100% - 96px);right:calc(50% - 440px);max-width:880px;overflow:hidden;position:fixed;top:48px;width:100%}.yoast-gutenberg-modal .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-left:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-columns:280px 1fr;grid-template-rows:72px 1fr 88px}.yoast-modal__heading{align-items:center;background:var(--yoast-color-white);border-bottom:var(--yoast-border-default);box-sizing:border-box;display:flex;grid-area:heading;min-height:72px;padding:0 24px}.yoast-modal__heading .yoast-close{position:absolute;left:16px}.yoast-gutenberg-modal__box.components-modal__frame{box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}@media (min-width:600px){.yoast-gutenberg-modal__box.components-modal__frame{border-radius:8px;max-height:calc(100% - 48px)}}.yoast-gutenberg-modal__no-padding .components-modal__content{padding:0}.yoast-gutenberg-modal .components-modal__header-heading,.yoast-modal__heading h1{color:var(--yoast-color-primary);font-size:20px;font-weight:400;line-height:1.2;margin:0}.yoast-gutenberg-modal .components-modal__content .components-modal__header{border-bottom:1px solid #e2e8f0!important}.yoast-gutenberg-modal .components-modal__icon-container{display:inline-flex}.yoast-gutenberg-modal .components-modal__icon-container svg,.yoast-modal__heading-icon{fill:var(--yoast-color-primary);flex-shrink:0;height:20px;margin-left:16px;width:19px}.yoast-modal__menu{border-left:var(--yoast-border-default);grid-area:menu;overflow-y:auto}.yoast-modal__menu ul{list-style:none;margin:0;padding:0}.yoast-modal__menu li{border-bottom:var(--yoast-border-default);color:var(--yoast-color-default);cursor:pointer;display:block;font-size:16px;padding:12px 16px 11px;text-decoration:none}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--yoast-color-primary);border-bottom:var(--yoast-border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{display:flex;flex-direction:column;flex-grow:1;grid-area:content;overflow-y:auto;position:relative}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{background:var(--yoast-color-white);padding:24px 24px 0;position:sticky;top:0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--yoast-border-default);padding-bottom:24px}.yoast-modal__footer{align-items:center;align-self:flex-end;background:var(--yoast-color-white);border-top:var(--yoast-border-default);bottom:0;box-sizing:border-box;display:flex;grid-area:footer;justify-content:flex-end;margin:0 24px;min-height:88px;padding:0;position:sticky;width:calc(100% - 48px);z-index:10}.yoast-modal__settings-saved{align-items:center;display:inline-flex;margin-left:16px;position:relative}.yoast-modal__settings-saved:before{background:var(--yoast-checkmark--green) no-repeat center;content:"";display:inline-block;height:13px;margin-left:8px;width:14px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{flex-grow:1;padding:24px}@media screen and (max-width:880px){.yoast-modal{bottom:0;height:auto;right:0;left:0;top:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial}.yoast-modal.yoast-modal-collapsible{padding-bottom:72px}.yoast-tabs .yoast-modal__content{grid-template-rows:48px 1fr 72px}.yoast-modal__heading{min-height:48px;padding:0 16px;position:fixed;top:0;width:100%;z-index:11}.yoast-modal__heading h1{font-size:var(--yoast-font-size-default)}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-left:8px}.yoast .yoast-close{left:3px}.yoast-modal__heading .yoast-h2{font-size:var(--yoast-font-size-default)}.yoast-modal__section{flex-grow:0;overflow:initial}.yoast-modal__section-content{margin:0 16px;padding:24px 0}.yoast-modal__section:first-of-type{margin-top:48px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{margin:0;padding:0;position:sticky;top:48px}.yoast-modal__section-open .yoast-modal__section-header{margin-right:16px;margin-left:16px;padding-right:0;padding-left:0}.yoast-modal__section-open{border-bottom:var(--yoast-border-default)}.yoast-modal__footer{margin:0;min-height:72px;padding:0 16px;position:fixed;width:100%;z-index:11}.yoast-modal-collapsible .yoast-modal__footer{min-height:72px}.yoast-modal-collapsible .yoast-modal__section-content{border-bottom:var(--yoast-border-default);margin:0;padding:24px 16px}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{background:#fff;border:none;border-bottom:var(--yoast-border-default);color:var(--yoast-color-primary);cursor:pointer;font-size:var(--yoast-font-size-default);justify-content:space-between;padding:16px;text-align:right;width:100%}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(-180deg)}.yoast-collapsible__trigger[aria-expanded=true]{margin:0 16px;padding:16px 0;width:calc(100% - 32px)}.yoast-collapsible__icon{background-color:var(--yoast-color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0 6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;border:none;display:block;float:left;height:19px;width:19px}.yoast-collapsible-block{margin-top:48px;width:100%}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}.yoast-post-settings-modal{height:100%;max-height:calc(100% - 96px);max-width:calc(100% - 96px);overflow:hidden;width:880px}.yoast-modal-content{padding:16px}@media (min-width:782px){.yoast-modal-content--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}}.yoast-post-settings-modal__button-container{border-bottom:1px solid #0003;display:flex;flex-direction:column;padding:16px}.yoast-post-settings-modal .components-modal__content{display:flex;flex-direction:column;padding:0}.yoast-post-settings-modal .components-modal__header{border-bottom:var(--yoast-border-default);flex-shrink:0;margin:0}.yoast-post-settings-modal .yoast-notice-container{bottom:0;right:0;margin-top:auto;position:sticky;width:100%;z-index:1}.yoast-post-settings-modal .components-modal__content>div:not([class]):not([class=""]){display:flex;flex-direction:column;overflow:hidden}.yoast-post-settings-modal .yoast-notice-container>hr{margin-bottom:0;margin-top:-1px}.yoast-post-settings-modal .yoast-content-container{flex-grow:1;overflow-y:auto}.yoast-post-settings-modal .yoast-button-container{display:flex;flex-direction:row;justify-content:flex-end;margin:0;padding:24px}.yoast-post-settings-modal .yoast-button-container p{align-self:center;color:var(--yoast-color-label-help);padding-left:24px}.yoast-post-settings-modal .yoast-button-container button{align-self:center;flex-shrink:0;max-height:45px}@media only screen and (max-width:600px){.yoast-post-settings-modal{max-height:100%;max-width:100%}.yoast-post-settings-modal .yoast-button-container{justify-content:space-between;padding:16px}.yoast-post-settings-modal .yoast-button-container p{padding-left:0}}.yoast-related-keyphrases-modal,.yoast-wincher-seo-performance-modal{max-width:712px}.yoast-wincher-seo-performance-modal__content{padding:25px 32px 32px}#yoast-get-related-keyphrases-metabox,#yoast-get-related-keyphrases-sidebar{margin-top:8px}.yoast-gutenberg-modal .yoast-related-keyphrases-modal__content{min-height:66vh;position:relative}#yoast-semrush-country-selector{border:none;position:relative}.yoast-related-keyphrases-modal__chart{display:block} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340.css new file mode 100644 index 00000000..b4af6b4f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/modal-2340.css @@ -0,0 +1 @@ +.yoast-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#a4286a99;bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000}.yoast-modal{background:#fff;bottom:48px;display:flex;flex-direction:column;height:calc(100% - 96px);left:calc(50% - 440px);max-width:880px;overflow:hidden;position:fixed;top:48px;width:100%}.yoast-gutenberg-modal .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-right:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-columns:280px 1fr;grid-template-rows:72px 1fr 88px}.yoast-modal__heading{align-items:center;background:var(--yoast-color-white);border-bottom:var(--yoast-border-default);box-sizing:border-box;display:flex;grid-area:heading;min-height:72px;padding:0 24px}.yoast-modal__heading .yoast-close{position:absolute;right:16px}.yoast-gutenberg-modal__box.components-modal__frame{box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}@media (min-width:600px){.yoast-gutenberg-modal__box.components-modal__frame{border-radius:8px;max-height:calc(100% - 48px)}}.yoast-gutenberg-modal__no-padding .components-modal__content{padding:0}.yoast-gutenberg-modal .components-modal__header-heading,.yoast-modal__heading h1{color:var(--yoast-color-primary);font-size:20px;font-weight:400;line-height:1.2;margin:0}.yoast-gutenberg-modal .components-modal__content .components-modal__header{border-bottom:1px solid #e2e8f0!important}.yoast-gutenberg-modal .components-modal__icon-container{display:inline-flex}.yoast-gutenberg-modal .components-modal__icon-container svg,.yoast-modal__heading-icon{fill:var(--yoast-color-primary);flex-shrink:0;height:20px;margin-right:16px;width:19px}.yoast-modal__menu{border-right:var(--yoast-border-default);grid-area:menu;overflow-y:auto}.yoast-modal__menu ul{list-style:none;margin:0;padding:0}.yoast-modal__menu li{border-bottom:var(--yoast-border-default);color:var(--yoast-color-default);cursor:pointer;display:block;font-size:16px;padding:12px 16px 11px;text-decoration:none}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--yoast-color-primary);border-bottom:var(--yoast-border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{display:flex;flex-direction:column;flex-grow:1;grid-area:content;overflow-y:auto;position:relative}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{background:var(--yoast-color-white);padding:24px 24px 0;position:sticky;top:0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--yoast-border-default);padding-bottom:24px}.yoast-modal__footer{align-items:center;align-self:flex-end;background:var(--yoast-color-white);border-top:var(--yoast-border-default);bottom:0;box-sizing:border-box;display:flex;grid-area:footer;justify-content:flex-end;margin:0 24px;min-height:88px;padding:0;position:sticky;width:calc(100% - 48px);z-index:10}.yoast-modal__settings-saved{align-items:center;display:inline-flex;margin-right:16px;position:relative}.yoast-modal__settings-saved:before{background:var(--yoast-checkmark--green) no-repeat center;content:"";display:inline-block;height:13px;margin-right:8px;width:14px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{flex-grow:1;padding:24px}@media screen and (max-width:880px){.yoast-modal{bottom:0;height:auto;left:0;right:0;top:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial}.yoast-modal.yoast-modal-collapsible{padding-bottom:72px}.yoast-tabs .yoast-modal__content{grid-template-rows:48px 1fr 72px}.yoast-modal__heading{min-height:48px;padding:0 16px;position:fixed;top:0;width:100%;z-index:11}.yoast-modal__heading h1{font-size:var(--yoast-font-size-default)}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-right:8px}.yoast .yoast-close{right:3px}.yoast-modal__heading .yoast-h2{font-size:var(--yoast-font-size-default)}.yoast-modal__section{flex-grow:0;overflow:initial}.yoast-modal__section-content{margin:0 16px;padding:24px 0}.yoast-modal__section:first-of-type{margin-top:48px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{margin:0;padding:0;position:sticky;top:48px}.yoast-modal__section-open .yoast-modal__section-header{margin-left:16px;margin-right:16px;padding-left:0;padding-right:0}.yoast-modal__section-open{border-bottom:var(--yoast-border-default)}.yoast-modal__footer{margin:0;min-height:72px;padding:0 16px;position:fixed;width:100%;z-index:11}.yoast-modal-collapsible .yoast-modal__footer{min-height:72px}.yoast-modal-collapsible .yoast-modal__section-content{border-bottom:var(--yoast-border-default);margin:0;padding:24px 16px}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{background:#fff;border:none;border-bottom:var(--yoast-border-default);color:var(--yoast-color-primary);cursor:pointer;font-size:var(--yoast-font-size-default);justify-content:space-between;padding:16px;text-align:left;width:100%}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(180deg)}.yoast-collapsible__trigger[aria-expanded=true]{margin:0 16px;padding:16px 0;width:calc(100% - 32px)}.yoast-collapsible__icon{background-color:var(--yoast-color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0 6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;border:none;display:block;float:right;height:19px;width:19px}.yoast-collapsible-block{margin-top:48px;width:100%}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}.yoast-post-settings-modal{height:100%;max-height:calc(100% - 96px);max-width:calc(100% - 96px);overflow:hidden;width:880px}.yoast-modal-content{padding:16px}@media (min-width:782px){.yoast-modal-content--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}}.yoast-post-settings-modal__button-container{border-bottom:1px solid #0003;display:flex;flex-direction:column;padding:16px}.yoast-post-settings-modal .components-modal__content{display:flex;flex-direction:column;padding:0}.yoast-post-settings-modal .components-modal__header{border-bottom:var(--yoast-border-default);flex-shrink:0;margin:0}.yoast-post-settings-modal .yoast-notice-container{bottom:0;left:0;margin-top:auto;position:sticky;width:100%;z-index:1}.yoast-post-settings-modal .components-modal__content>div:not([class]):not([class=""]){display:flex;flex-direction:column;overflow:hidden}.yoast-post-settings-modal .yoast-notice-container>hr{margin-bottom:0;margin-top:-1px}.yoast-post-settings-modal .yoast-content-container{flex-grow:1;overflow-y:auto}.yoast-post-settings-modal .yoast-button-container{display:flex;flex-direction:row;justify-content:flex-end;margin:0;padding:24px}.yoast-post-settings-modal .yoast-button-container p{align-self:center;color:var(--yoast-color-label-help);padding-right:24px}.yoast-post-settings-modal .yoast-button-container button{align-self:center;flex-shrink:0;max-height:45px}@media only screen and (max-width:600px){.yoast-post-settings-modal{max-height:100%;max-width:100%}.yoast-post-settings-modal .yoast-button-container{justify-content:space-between;padding:16px}.yoast-post-settings-modal .yoast-button-container p{padding-right:0}}.yoast-related-keyphrases-modal,.yoast-wincher-seo-performance-modal{max-width:712px}.yoast-wincher-seo-performance-modal__content{padding:25px 32px 32px}#yoast-get-related-keyphrases-metabox,#yoast-get-related-keyphrases-sidebar{margin-top:8px}.yoast-gutenberg-modal .yoast-related-keyphrases-modal__content{min-height:66vh;position:relative}#yoast-semrush-country-selector{border:none;position:relative}.yoast-related-keyphrases-modal__chart{display:block} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340-rtl.css new file mode 100644 index 00000000..6ca7bccf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-border-default:1px solid #0003;--yoast-color-default:#404040;--yoast-color-default-darker:#303030;--yoast-color-primary:#a4286a;--yoast-color-secondary:#f7f7f7;--yoast-color-white:#fff;--yoast-color-green:#6ea029;--yoast-color-primary-darker:#7b1e50;--yoast-color-primary-lighter:#f5d6e6;--yoast-color-secondary-darker:#d9d9d9;--yoast-color-button-upsell:#fec228;--yoast-color-button-upsell-hover:#f2ae01;--yoast-color-dark:#303030;--yoast-color-sale:#fec228;--yoast-color-sale-darker:#feb601;--yoast-color-border:#0003;--yoast-color-label:#303030;--yoast-color-label-help:#707070;--yoast-color-active:#6ea029;--yoast-color-inactive:#dc3232;--yoast-color-inactive-text:#707070;--yoast-color-inactive-grey:#9e9e9e;--yoast-color-inactive-grey-light:#f1f1f1;--yoast-color-active-light:#b6cf94;--yoast-transition-default:all 150ms ease-out;--yoast-color-link:#006dac;--yoast-color-border--default:#0003;--yoast-color-focus:0 0 0 2px #007fff,0 0 0 5px #bfdfff;--yoast-svg-icon-chevron-down:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-chevron-up:url('data:image/svg+xml;charset=utf-8,');--yoast-checkmark--white:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23FFF' viewBox='0 0 512 512'%3E%3Cpath d='m173.898 439.404-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001'/%3E%3C/svg%3E");--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23m-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23m640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' viewBox='0 0 1792 1792'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' aria-hidden='true' viewBox='0 0 192 512'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960M944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34m848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136m0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136m1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5M384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136m1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5m0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5'/%3E%3C/svg%3E");--yoast-svg-icon-key:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-edit:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url('data:image/svg+xml;charset=utf-8,');--yoast-checkmark--green:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%236EA029' viewBox='0 0 512 512'%3E%3Cpath d='m173.898 439.404-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001'/%3E%3C/svg%3E");--yoast-exclamation-mark:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23DC3232' viewBox='0 0 512 512'%3E%3Cpath d='M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248m-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46m-43.673-165.346 7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654'/%3E%3C/svg%3E");--yoast-svg-icon-schema:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24m181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24m-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24M0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24m386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24m0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24M181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24'/%3E%3C/svg%3E");--yoast-svg-icon-schema-active:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' aria-hidden='true'%3E%3Cpath fill='D4444' d='M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24m181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24m-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24M0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24m386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24m0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24M181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24'/%3E%3C/svg%3E");--yoast-svg-icon-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23707070' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m4 16 4.586-4.586a2 2 0 0 1 2.828 0L16 16m-2-2 1.586-1.586a2 2 0 0 1 2.828 0L20 14m-6-6h.01M6 20h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2'/%3E%3C/svg%3E");--yoast-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--yoast-font-size-default:14px;--yoast-font-weight-default:400;--yoast-font-weight-bold:600;--yoast-color-font-default:#404040;--yoast-shadow-default:0px 3px 6px #00000026}.yoast-h1,.yoast-h2,.yoast-h3{color:var(--yoast-color-primary);font-weight:400;line-height:1.2;margin:0}.yoast-h1 a,.yoast-h2 a,.yoast-h3 a{color:var(--yoast-color-primary);text-decoration:none}.yoast-h1{font-size:24px}.yoast-h2{font-size:20px}.yoast-h3{font-size:16px}.yoast-paragraph{font-size:var(--yoast-font-size-default);margin-top:0}.screen-reader-text{clip:rect(1px,1px,1px,1px);word-wrap:normal!important;border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);margin:-1px;padding:0}.screen-reader-text,.visually-hidden{height:1px;overflow:hidden;position:absolute;width:1px}.visually-hidden{clip:rect(1px,1px,1px,1px);word-wrap:normal;white-space:nowrap}@media (max-width:782px){.yoast-show-on-mobile{display:initial!important}}@media (min-width:782px){.yoast-hide-on-desktop{display:none}}.yoast-field-group__title-separator{display:flex;flex-wrap:wrap}.yoast-field-group__title-separator label{align-items:center;border:var(--yoast-border-default);box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;height:42px;justify-content:center;margin:0 0 6px 6px;width:42px}.yoast-field-group__title-separator input[type=radio]:checked+label{border:3px solid var(--yoast-color-primary)}.yoast .yoast-button{align-items:center;border:1px solid #0003;border-radius:4px;box-shadow:inset 0 -2px 0 #0000001a;cursor:pointer;display:inline-flex;font-size:14px;justify-content:center;line-height:1.2;padding:10px 12px 12px;position:relative;text-decoration:none;transition:background-color .15s ease-out 0s}.yoast .yoast-button:focus,.yoast-close:focus,.yoast-hide:focus,.yoast-remove:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast .yoast-button::-moz-focus-inner,.yoast-close::-moz-focus-inner,.yoast-hide::-moz-focus-inner,.yoast-remove::-moz-focus-inner{border:0}.yoast .yoast-button:not(:disabled):active{box-shadow:none;top:2px}.yoast .yoast-button:disabled{cursor:default;opacity:.5}.yoast .yoast-button--primary{background-color:var(--yoast-color-primary)}.yoast .yoast-button--primary,.yoast .yoast-button--primary:visited{border:1px solid #0003;color:var(--yoast-color-white)}.yoast .yoast-button--primary:active,.yoast .yoast-button--primary:not(:disabled):hover{background-color:var(--yoast-color-primary-darker);border:1px solid #0003;color:var(--yoast-color-white)}.yoast .yoast-button--primary:focus{background-color:var(--yoast-color-primary);color:var(--yoast-color-white)}.yoast .yoast-button--secondary{background-color:var(--yoast-color-secondary);box-shadow:inset 0 -2px 0 #0000001a;color:var(--yoast-color-dark)}.yoast .yoast-button--secondary:visited{color:var(--yoast-color-dark)}.yoast .yoast-button--secondary:active,.yoast .yoast-button--secondary:not(:disabled):hover{background-color:var(--yoast-color-secondary-darker);border:1px solid #0003;color:var(--yoast-color-dark)}.yoast .yoast-button--buy{background-color:var(--yoast-color-sale)}.yoast .yoast-button--buy,.yoast .yoast-button--buy:visited{color:var(--yoast-color-dark)}.yoast .yoast-button--buy:active,.yoast .yoast-button--buy:not(:disabled):hover{background-color:var(--yoast-color-sale-darker);color:var(--yoast-color-dark)}.yoast .yoast-button--buy__caret{height:16px;margin:0 6px 0 -2px;-webkit-mask-image:var(--yoast-svg-icon-caret-right);mask-image:var(--yoast-svg-icon-caret-right);width:6px}.yoast .yoast-button--buy__caret,.yoast .yoast-button--edit{background-color:currentColor;display:inline-block;flex-shrink:0}.yoast .yoast-button--edit{height:18px;margin-left:8px;-webkit-mask-image:var(--yoast-svg-icon-edit);mask-image:var(--yoast-svg-icon-edit);width:20.25px}html[dir=rtl] .yoast .yoast-button--edit{margin-right:8px;margin-left:0}html[dir=rtl] .yoast .yoast-button--buy{flex-direction:row-reverse}.yoast .yoast-button--small{font-size:13px;padding:5px 8px 8px}.yoast .yoast-button--small .yoast-button--buy__caret{height:10px;width:4px}.yoast-hide,.yoast-remove{background-color:initial;border:none;color:#dc3232;cursor:pointer;font-size:14px;padding:0;text-decoration:underline}.yoast-hide{color:var(--yoast-color-link)}.yoast-field-group__upload .yoast-button{margin-left:24px}.yoast-close{align-items:center;background:none;border:none;box-shadow:none;cursor:pointer;display:flex;height:44px;justify-content:center;padding:0;width:44px}.yoast-close svg{fill:var(--yoast-color-default);width:14px}@media screen and (max-width:782px){.yoast-close svg{width:10px}}.yoast-field-group__checkbox{align-items:center;display:flex}.yoast-field-group__checkbox:not(.yoast-field-group__checkbox--horizontal)+.yoast-field-group__checkbox{margin-top:4px}.yoast-field-group__checkbox label{cursor:pointer}.yoast-field-group__checkbox input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;border:var(--yoast-border-default);border-radius:2px;box-shadow:inset 0 2px 4px #0000001a;cursor:pointer;height:18px;margin:2px 0 0 8px;overflow:hidden;padding:2px;position:relative;transition:background-color .15s ease-out 0s;width:18px}.yoast-field-group__checkbox input[type=checkbox]:checked:focus,.yoast-field-group__checkbox input[type=checkbox]:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast label+input[type=checkbox]{margin-right:16px}.yoast-field-group__checkbox input[type=checkbox]:checked{background:var(--yoast-checkmark--white) var(--yoast-color-primary) no-repeat center /13px;border:1px solid var(--yoast-color-primary);box-shadow:none}.yoast-field-group__checkbox input[type=checkbox]:checked:before{content:""}.yoast-field-group{border:none;margin:0 0 24px;padding:0;position:relative}.yoast-field-group__title{align-items:center;color:var(--yoast-color-label);display:flex;font-size:var(--yoast-font-size-default);font-weight:var(--yoast-font-weight-bold);line-height:1.5;margin:0 0 8px;padding:0}.yoast-field-group__title.yoast-field-group__title--light{font-weight:var(--yoast-font-weight-default)}.yoast-field-group .field-group-description{margin:0 0 1em}.yoast-field-group__inline{align-items:center;display:flex}.yoast-field-group__inline .yoast-field-group__inputfield{margin-left:8px}.yoast-field-group__inline .yoast-button{flex-shrink:0}.yoast-field-group .components-form-token-field__label{display:none}@media screen and (max-width:782px){.yoast-field-group__inline{display:block}.yoast-field-group__inline .yoast-field-group__inputfield{margin-bottom:8px;margin-left:0}}.yoast-help{margin-right:4px}.yoast-help__icon svg{fill:var(--yoast-color-inactive-text);height:12px;transition:var(--yoast-transition-default);width:12px}.yoast-help:focus svg,.yoast-help:hover svg{fill:var(--yoast-color-link)}.yoast-data-model{list-style:none;padding:0}.yoast-data-model li{font-weight:var(--yoast-font-weight-bold);line-height:1.4;padding:0 8px;position:relative;z-index:2}.yoast-data-model span{float:left;font-weight:var(--yoast-font-weight-default)}.yoast-data-model li+li{margin-top:9px}.yoast-data-model li:after{background:#f5d6e6;content:"";height:20px;right:0;position:absolute;width:var(--yoast-width);z-index:-1}.yoast-image-select__preview{align-items:center;background-color:initial;border:1px solid #0003;display:flex;justify-content:center;max-height:200px;max-width:100%;min-height:165px;overflow:hidden;padding:0;width:300px}.yoast-image-select__preview--no-preview{background:var(--yoast-color-inactive-grey-light) var(--yoast-svg-icon-image) no-repeat center center /64px 64px}.yoast-image-select__preview.yoast-image-select__preview-has-warnings{margin-bottom:16px}.yoast-image-select__preview .yoast-image-select__preview--image{height:100%;max-width:100%;object-fit:contain}.yoast-image-select .yoast-field-group__inputfield{margin-bottom:1em}.yoast-image-select .yoast-button{margin-left:1.5em}.yoast-image-select{margin-bottom:1.7em;margin-top:1.7em}.yoast-image-select .yoast-image-select-buttons button{margin-top:1em}#organization-image-select .yoast-image-select{margin-top:0}:root{--yoast-color-placeholder:#707070}.yoast .yoast-field-group__inputfield,.yoast .yoast-field-group__textarea{background:var(--yoast-color-white);border:var(--yoast-border-default);border-radius:0;box-shadow:inset 0 2px 4px #0000001a;box-sizing:border-box;font-size:var(--yoast-font-size-default);padding:8px;width:100%}.yoast .yoast-field-group__inputfield:focus,.yoast .yoast-field-group__textarea:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast-field-group__upload .yoast-field-group__inputfield{margin-bottom:8px}.yoast-field-group__inputfield{height:40px}.yoast-field-group__textarea{min-height:200px}.yoast input+.description,.yoast-field-group .description+.yoast-field-group__inputfield,.yoast-field-group .description+input,.yoast-field-group__inputfield+.description{margin-bottom:24px;margin-top:8px}.yoast .yoast-field-group__inputfield:disabled,.yoast .yoast-field-group__inputfield:read-only,.yoast .yoast-field-group__inputfield[aria-disabled=true]{background:var(--yoast-color-inactive-grey-light)}.yoast .duration-inputs__wrapper{display:flex;flex-direction:row}.yoast .duration-inputs__input-wrapper{display:flex;flex-direction:column}.yoast .duration-inputs__input{margin:0 0 0 8px;width:4em}::placeholder{color:var(--yoast-color-placeholder);opacity:1}.yoast-insights-row:not(:last-of-type){border-bottom:1px solid #0000001a;margin-bottom:24px;padding-bottom:24px}.yoast-insights-row--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}@media(min-width:782px){.yoast-modal-content .yoast-insights-row{border-bottom:1px solid #0000001a;margin-bottom:24px;padding-bottom:24px}}.yoast-insights-card__content{display:flex}.yoast-insights-card__score{flex-shrink:0;font-size:16px;margin-left:2em}.yoast-insights-card__amount{display:block;font-size:3.5em;line-height:1}.yoast-field-group__radiobutton{align-items:center;display:flex}.yoast-field-group__radiobutton--vertical:not(:last-of-type){margin-bottom:8px}.yoast-field-group__radiobutton label{cursor:pointer;margin-left:16px}.yoast-field-group__radiobutton input[type=radio]{-webkit-appearance:none;-moz-appearance:none;border:var(--yoast-border-default);border-radius:50%;box-shadow:inset 0 2px 4px #0000001a;cursor:pointer;height:18px;margin:0 0 0 8px;overflow:hidden;padding:2px;position:relative;transition:border-color .15s ease-out 0s;width:18px}.yoast-field-group__radiobutton input[type=radio]:checked:focus,.yoast-field-group__radiobutton input[type=radio]:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast-field-group__radiobutton input[type=radio]:checked{background-color:inherit;border-color:var(--yoast-color-primary)}.yoast-field-group__radiobutton input[type=radio]:checked:before{content:none}.yoast-field-group__radiobutton input[type=radio]:after{background-color:initial;border-radius:50%;content:"";display:block;height:10px;right:3px;position:absolute;top:3px;transition:background-color .15s ease-out 0s;width:10px}.yoast-field-group__radiobutton input[type=radio]:checked:after{background-color:var(--yoast-color-primary)}.yoast-field-group__select{align-items:center;cursor:pointer;display:flex}.yoast-select__indicator-separator{display:none}.yoast-select-container{background-color:#fff;border:var(--yoast-border-default);border-radius:0;box-shadow:inset 0 2px 4px #0000001a;display:block;min-height:2.85em;padding:0;position:relative;width:100%}.yoast-select-container .yoast-select__control--is-focused{box-shadow:var(--yoast-color-focus);outline:none}.yoast-select-container .yoast-select__indicator>svg{color:#212121}.yoast-select-container .yoast-select__menu{margin:0;z-index:2}.yoast-select-container .yoast-select__multi-value__label{align-items:center;box-sizing:border-box;color:inherit;display:flex;font-size:14px;padding:0}.yoast-select-container .yoast-select__multi-value{background-color:var(--yoast-color-primary);border:0;border-radius:12px;color:var(--yoast-color-white);display:flex;flex-direction:row-reverse;font-weight:500;line-height:1.5;margin-bottom:3px;margin-left:8px;margin-top:3px;padding:1px 10px 2px}.yoast-select-container .yoast-select__menu-list{padding:0}.yoast-select-container .yoast-select__multi-value__remove{-webkit-box-align:center;align-items:center;border-radius:2px;box-sizing:border-box;display:flex;margin-left:6px;padding:2px 0 0}.yoast-select-container .yoast-select__multi-value__remove:hover{background-color:inherit;color:var(--yoast-color-white);cursor:pointer}.yoast-select-container .yoast-select__control{background-color:initial;border:none;border-radius:0}.yoast-select-container .yoast-select__option{box-sizing:border-box;color:inherit;cursor:default;display:block;padding:8px 12px;-webkit-user-select:none;user-select:none;width:100%}.yoast-select-container .yoast-select__option--is-focused{background-color:var(--yoast-color-primary-lighter);color:var(--yoast-color-font-default)}.yoast-select-container .yoast-select__option.yoast-select__option--is-selected{background-color:var(--yoast-color-primary);color:var(--yoast-color-white)}.yoast-select-container input[type=text]:focus{box-shadow:none}.yoast-field-group select,.yoast-field-group__select select{-webkit-appearance:none;-moz-appearance:none;background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,');background-position:left 15px center;background-repeat:no-repeat;background-size:13px auto;border:var(--yoast-border-default);border-radius:0;box-shadow:inset 0 2px 4px #0000001a;display:block;font-size:var(--yoast-font-size-default);max-width:300px;min-height:2.85em;padding:5px 8px;position:relative;width:100%}.yoast-field-group .yoast-select__value-container{padding:0 8px!important}.yoast-field-group select:focus,.yoast-field-group__select select:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast-field-group select,.yoast-field-group__select select{line-height:1.9;padding-left:40px}.yoast-field-group select.yoast-select--inline{display:inline-block}.yoast-field-group--inline{display:inline-block;margin-left:8px;max-width:300px;width:100%}.yoast-star-rating{display:inline-block;height:12px;width:65px}.yoast-star-rating span{background-repeat:repeat-x;background-size:13px 12px;height:100%;width:100%}.yoast-star-rating__placeholder{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAmCAQAAAAYCMGrAAAA+klEQVR4AcWV4cbtMBBFF0MIVUopoVSrhDDv/3gf/RFRpzdNOty1HiBO99mzeYWgCMZMKCPGrCgrxiSUhCkDeukxJKCXAUMiehkxw6FZhxEzmp0x4kCzByYISqlYdal0supS6WrVpdLEK0YSamJiJOPY0c/uOG4s6CcXfuKJaJcRzyNCQJsNiF1sRTR1hP11NNJ8RCrONOPRf+r7J+TZgQ5CNfMOYvW/2YxDqzqA/57+gVY9eiakrnyZEGXDsaE3p/4JScwPX3rtnZATDxnPWT7X16XAHaH8HWNrlxJD9TyGti5tCM84zpZe+RxNjeX9tZqLaGoMxN/P/wHP5Vw+8ZxnEQAAAABJRU5ErkJggg==);display:inline-block;overflow:hidden;position:relative}.yoast-star-rating__fill{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAmBAMAAABALxQTAAAAFVBMVEVMaXH4twP4twP4twP4twP4twP4twP7w8S/AAAAB3RSTlMAFv5uPpvQloUsTQAAAMFJREFUeAGE0TEOgzAMQFEXoDNiYC6/wFxxAsTADDkB5f6HqNRENXUi8TYiRfnY8lNXkjBOkuBWSeAhsYJOYiW9xO4MEqshkTbCSyIH7GLdgFasHHgmwkikZQD6OROZRG4Hxju8o/TNhbNhCqkOxaZDVKdxNnq/EjUS/A2o0PuXpyVeb9bjDWY9QSWXDQfBbtbjtWY9bM4sqfx+5yYt8wNcAFEzrGGkk5668KsFrKewPtQ3aFqh8WOnYZ+lIBQkgykAWk8rlAqcHfQAAAAASUVORK5CYII=);display:block}.yoast-table{border:var(--yoast-border-default);border-bottom:0;border-spacing:0;color:var(--yoast-color-default);font-size:var(--yoast-font-size-default);line-height:1.2;width:100%}.yoast-table tbody tr:nth-child(odd){background-color:#f9f9f9}.yoast-table th{color:var(--yoast-color-dark);font-weight:var(--yoast-font-weight-bold);text-align:right;white-space:nowrap}.yoast-table td,.yoast-table th{border-bottom:var(--yoast-border-default);padding:18px 12px}.yoast-table td:first-child,.yoast-table th:first-child{padding-right:16px}.yoast-table td:last-child,.yoast-table th:last-child{padding-left:16px}td.yoast-table__button,td.yoast-table__image{padding:10px 18px 9px}.yoast-table.yoast-table--nobreak td,td.yoast-table--nobreak,tr.yoast-table--nobreak td{white-space:nowrap}th.yoast-table--primary{width:100%}td.yoast-table--nopadding{padding:0 12px}.yoast-badge{border-radius:8px;display:inline-block;font-size:10px;font-weight:600;line-height:1.6;min-height:16px;padding:0 8px}.yoast-badge__in-label{margin-right:8px;vertical-align:text-top}.yoast-new-badge{background-color:#cce5ff;color:#004973}.yoast-premium-badge{background-color:#fff3cd;color:#674e00}.yoast-beta-badge{background-color:#cce5ff;color:#004973;margin:0 0 0 2px}.yoast-feature{margin-left:150px;max-width:600px}.yoast-toggle__item{border-bottom:1px solid var(--yoast-color-border);display:flex;justify-content:space-between;margin-bottom:16px;padding-bottom:16px}.yoast-toggle__item-disabled{position:relative}.yoast-toggle__item-disabled .yoast-button.yoast-button--buy{right:100%;margin-right:32px;position:absolute;white-space:nowrap}.yoast-toggle__item-disabled .yoast-toggle,.yoast-toggle__item-disabled .yoast-toggle__item-title{opacity:.5}.yoast-toggle__item-title{align-items:center;display:flex;font-weight:700}input[type=checkbox].yoast-toggle__checkbox{-webkit-appearance:none;-moz-appearance:none;background-color:initial;border:0;box-shadow:none;height:23px;margin-right:8px;overflow:hidden;position:absolute;width:34px;z-index:1}input[type=checkbox].yoast-toggle__checkbox:checked:before{content:none}.yoast-toggle__switch{background-color:var(--yoast-color-inactive-grey);border-radius:8px;display:inline-block;height:14px;margin-right:8px;margin-left:8px;position:relative;width:34px}.yoast-toggle__checkbox:focus~.yoast-toggle__switch:before{box-shadow:var(--yoast-color-focus)}.yoast-toggle__switch:before{background-color:var(--yoast-color-inactive-grey-light);border:.5px solid #0000001a;border-radius:50%;box-shadow:0 1px 2px 0 #0006;box-sizing:border-box;content:"";height:20px;right:0;position:absolute;top:-3px;width:20px}.yoast-toggle,.yoast-toggle--inverse{align-items:center;display:grid;grid-template:1fr/repeat(3,auto);position:relative}.yoast-toggle--inverse>*,.yoast-toggle>*{grid-row:1}.yoast-toggle--inactive,.yoast-toggle--inverse .yoast-toggle--active{grid-column:1}.yoast-toggle__checkbox,.yoast-toggle__switch{grid-column:2}.yoast-toggle--active,.yoast-toggle--inverse .yoast-toggle--inactive{grid-column:3}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle__switch,.yoast-toggle--inverse .yoast-toggle__checkbox:not(:checked)~.yoast-toggle__switch{background-color:var(--yoast-color-active-light)}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle__switch:before,.yoast-toggle--inverse .yoast-toggle__checkbox:not(:checked)~.yoast-toggle__switch:before{background-color:var(--yoast-color-active);right:auto;left:0}.yoast-toggle--inverse .yoast-toggle__checkbox:checked~.yoast-toggle__switch:before{right:0;left:auto}.yoast-toggle .yoast-toggle__checkbox~.yoast-toggle--inactive,.yoast-toggle--inverse .yoast-toggle__checkbox~.yoast-toggle--inactive{color:var(--yoast-color-default-darker)}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle--inactive,.yoast-toggle .yoast-toggle__checkbox~.yoast-toggle--active,.yoast-toggle--inverse .yoast-toggle__checkbox:checked~.yoast-toggle--inactive,.yoast-toggle--inverse .yoast-toggle__checkbox~.yoast-toggle--active{color:var(--yoast-color-inactive-text)}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle--active,.yoast-toggle--inverse .yoast-toggle__checkbox:checked~.yoast-toggle--active{color:var(--yoast-color-default-darker)}@media(max-width:400px){.yoast-feature{margin-left:0}.yoast-toggle__item-disabled{flex-wrap:wrap}.yoast-toggle__item-disabled .yoast-button.yoast-button--buy{margin-right:0;margin-top:8px;position:static}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340.css new file mode 100644 index 00000000..d03eebb3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2340.css @@ -0,0 +1 @@ +:root{--yoast-border-default:1px solid #0003;--yoast-color-default:#404040;--yoast-color-default-darker:#303030;--yoast-color-primary:#a4286a;--yoast-color-secondary:#f7f7f7;--yoast-color-white:#fff;--yoast-color-green:#6ea029;--yoast-color-primary-darker:#7b1e50;--yoast-color-primary-lighter:#f5d6e6;--yoast-color-secondary-darker:#d9d9d9;--yoast-color-button-upsell:#fec228;--yoast-color-button-upsell-hover:#f2ae01;--yoast-color-dark:#303030;--yoast-color-sale:#fec228;--yoast-color-sale-darker:#feb601;--yoast-color-border:#0003;--yoast-color-label:#303030;--yoast-color-label-help:#707070;--yoast-color-active:#6ea029;--yoast-color-inactive:#dc3232;--yoast-color-inactive-text:#707070;--yoast-color-inactive-grey:#9e9e9e;--yoast-color-inactive-grey-light:#f1f1f1;--yoast-color-active-light:#b6cf94;--yoast-transition-default:all 150ms ease-out;--yoast-color-link:#006dac;--yoast-color-border--default:#0003;--yoast-color-focus:0 0 0 2px #007fff,0 0 0 5px #bfdfff;--yoast-svg-icon-chevron-down:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-chevron-up:url('data:image/svg+xml;charset=utf-8,');--yoast-checkmark--white:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23FFF' viewBox='0 0 512 512'%3E%3Cpath d='m173.898 439.404-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001'/%3E%3C/svg%3E");--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23m-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23m640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' viewBox='0 0 1792 1792'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' aria-hidden='true' viewBox='0 0 192 512'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960M944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34m848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136m0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136m1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5M384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136m1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5m0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5'/%3E%3C/svg%3E");--yoast-svg-icon-key:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-edit:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1792' height='1792' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218M1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url('data:image/svg+xml;charset=utf-8,');--yoast-checkmark--green:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%236EA029' viewBox='0 0 512 512'%3E%3Cpath d='m173.898 439.404-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001'/%3E%3C/svg%3E");--yoast-exclamation-mark:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23DC3232' viewBox='0 0 512 512'%3E%3Cpath d='M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248m-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46m-43.673-165.346 7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654'/%3E%3C/svg%3E");--yoast-svg-icon-schema:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24m181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24m-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24M0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24m386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24m0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24M181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24'/%3E%3C/svg%3E");--yoast-svg-icon-schema-active:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' aria-hidden='true'%3E%3Cpath fill='D4444' d='M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24m181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24m-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24m-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24M0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24m386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24m0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24M181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24'/%3E%3C/svg%3E");--yoast-svg-icon-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23707070' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m4 16 4.586-4.586a2 2 0 0 1 2.828 0L16 16m-2-2 1.586-1.586a2 2 0 0 1 2.828 0L20 14m-6-6h.01M6 20h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2'/%3E%3C/svg%3E");--yoast-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--yoast-font-size-default:14px;--yoast-font-weight-default:400;--yoast-font-weight-bold:600;--yoast-color-font-default:#404040;--yoast-shadow-default:0px 3px 6px #00000026}.yoast-h1,.yoast-h2,.yoast-h3{color:var(--yoast-color-primary);font-weight:400;line-height:1.2;margin:0}.yoast-h1 a,.yoast-h2 a,.yoast-h3 a{color:var(--yoast-color-primary);text-decoration:none}.yoast-h1{font-size:24px}.yoast-h2{font-size:20px}.yoast-h3{font-size:16px}.yoast-paragraph{font-size:var(--yoast-font-size-default);margin-top:0}.screen-reader-text{clip:rect(1px,1px,1px,1px);word-wrap:normal!important;border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);margin:-1px;padding:0}.screen-reader-text,.visually-hidden{height:1px;overflow:hidden;position:absolute;width:1px}.visually-hidden{clip:rect(1px,1px,1px,1px);word-wrap:normal;white-space:nowrap}@media (max-width:782px){.yoast-show-on-mobile{display:initial!important}}@media (min-width:782px){.yoast-hide-on-desktop{display:none}}.yoast-field-group__title-separator{display:flex;flex-wrap:wrap}.yoast-field-group__title-separator label{align-items:center;border:var(--yoast-border-default);box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;height:42px;justify-content:center;margin:0 6px 6px 0;width:42px}.yoast-field-group__title-separator input[type=radio]:checked+label{border:3px solid var(--yoast-color-primary)}.yoast .yoast-button{align-items:center;border:1px solid #0003;border-radius:4px;box-shadow:inset 0 -2px 0 #0000001a;cursor:pointer;display:inline-flex;font-size:14px;justify-content:center;line-height:1.2;padding:10px 12px 12px;position:relative;text-decoration:none;transition:background-color .15s ease-out 0s}.yoast .yoast-button:focus,.yoast-close:focus,.yoast-hide:focus,.yoast-remove:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast .yoast-button::-moz-focus-inner,.yoast-close::-moz-focus-inner,.yoast-hide::-moz-focus-inner,.yoast-remove::-moz-focus-inner{border:0}.yoast .yoast-button:not(:disabled):active{box-shadow:none;top:2px}.yoast .yoast-button:disabled{cursor:default;opacity:.5}.yoast .yoast-button--primary{background-color:var(--yoast-color-primary)}.yoast .yoast-button--primary,.yoast .yoast-button--primary:visited{border:1px solid #0003;color:var(--yoast-color-white)}.yoast .yoast-button--primary:active,.yoast .yoast-button--primary:not(:disabled):hover{background-color:var(--yoast-color-primary-darker);border:1px solid #0003;color:var(--yoast-color-white)}.yoast .yoast-button--primary:focus{background-color:var(--yoast-color-primary);color:var(--yoast-color-white)}.yoast .yoast-button--secondary{background-color:var(--yoast-color-secondary);box-shadow:inset 0 -2px 0 #0000001a;color:var(--yoast-color-dark)}.yoast .yoast-button--secondary:visited{color:var(--yoast-color-dark)}.yoast .yoast-button--secondary:active,.yoast .yoast-button--secondary:not(:disabled):hover{background-color:var(--yoast-color-secondary-darker);border:1px solid #0003;color:var(--yoast-color-dark)}.yoast .yoast-button--buy{background-color:var(--yoast-color-sale)}.yoast .yoast-button--buy,.yoast .yoast-button--buy:visited{color:var(--yoast-color-dark)}.yoast .yoast-button--buy:active,.yoast .yoast-button--buy:not(:disabled):hover{background-color:var(--yoast-color-sale-darker);color:var(--yoast-color-dark)}.yoast .yoast-button--buy__caret{height:16px;margin:0 -2px 0 6px;-webkit-mask-image:var(--yoast-svg-icon-caret-right);mask-image:var(--yoast-svg-icon-caret-right);width:6px}.yoast .yoast-button--buy__caret,.yoast .yoast-button--edit{background-color:currentColor;display:inline-block;flex-shrink:0}.yoast .yoast-button--edit{height:18px;margin-right:8px;-webkit-mask-image:var(--yoast-svg-icon-edit);mask-image:var(--yoast-svg-icon-edit);width:20.25px}html[dir=rtl] .yoast .yoast-button--edit{margin-left:8px;margin-right:0}html[dir=rtl] .yoast .yoast-button--buy{flex-direction:row-reverse}.yoast .yoast-button--small{font-size:13px;padding:5px 8px 8px}.yoast .yoast-button--small .yoast-button--buy__caret{height:10px;width:4px}.yoast-hide,.yoast-remove{background-color:initial;border:none;color:#dc3232;cursor:pointer;font-size:14px;padding:0;text-decoration:underline}.yoast-hide{color:var(--yoast-color-link)}.yoast-field-group__upload .yoast-button{margin-right:24px}.yoast-close{align-items:center;background:none;border:none;box-shadow:none;cursor:pointer;display:flex;height:44px;justify-content:center;padding:0;width:44px}.yoast-close svg{fill:var(--yoast-color-default);width:14px}@media screen and (max-width:782px){.yoast-close svg{width:10px}}.yoast-field-group__checkbox{align-items:center;display:flex}.yoast-field-group__checkbox:not(.yoast-field-group__checkbox--horizontal)+.yoast-field-group__checkbox{margin-top:4px}.yoast-field-group__checkbox label{cursor:pointer}.yoast-field-group__checkbox input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;border:var(--yoast-border-default);border-radius:2px;box-shadow:inset 0 2px 4px #0000001a;cursor:pointer;height:18px;margin:2px 8px 0 0;overflow:hidden;padding:2px;position:relative;transition:background-color .15s ease-out 0s;width:18px}.yoast-field-group__checkbox input[type=checkbox]:checked:focus,.yoast-field-group__checkbox input[type=checkbox]:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast label+input[type=checkbox]{margin-left:16px}.yoast-field-group__checkbox input[type=checkbox]:checked{background:var(--yoast-checkmark--white) var(--yoast-color-primary) no-repeat center /13px;border:1px solid var(--yoast-color-primary);box-shadow:none}.yoast-field-group__checkbox input[type=checkbox]:checked:before{content:""}.yoast-field-group{border:none;margin:0 0 24px;padding:0;position:relative}.yoast-field-group__title{align-items:center;color:var(--yoast-color-label);display:flex;font-size:var(--yoast-font-size-default);font-weight:var(--yoast-font-weight-bold);line-height:1.5;margin:0 0 8px;padding:0}.yoast-field-group__title.yoast-field-group__title--light{font-weight:var(--yoast-font-weight-default)}.yoast-field-group .field-group-description{margin:0 0 1em}.yoast-field-group__inline{align-items:center;display:flex}.yoast-field-group__inline .yoast-field-group__inputfield{margin-right:8px}.yoast-field-group__inline .yoast-button{flex-shrink:0}.yoast-field-group .components-form-token-field__label{display:none}@media screen and (max-width:782px){.yoast-field-group__inline{display:block}.yoast-field-group__inline .yoast-field-group__inputfield{margin-bottom:8px;margin-right:0}}.yoast-help{margin-left:4px}.yoast-help__icon svg{fill:var(--yoast-color-inactive-text);height:12px;transition:var(--yoast-transition-default);width:12px}.yoast-help:focus svg,.yoast-help:hover svg{fill:var(--yoast-color-link)}.yoast-data-model{list-style:none;padding:0}.yoast-data-model li{font-weight:var(--yoast-font-weight-bold);line-height:1.4;padding:0 8px;position:relative;z-index:2}.yoast-data-model span{float:right;font-weight:var(--yoast-font-weight-default)}.yoast-data-model li+li{margin-top:9px}.yoast-data-model li:after{background:#f5d6e6;content:"";height:20px;left:0;position:absolute;width:var(--yoast-width);z-index:-1}.yoast-image-select__preview{align-items:center;background-color:initial;border:1px solid #0003;display:flex;justify-content:center;max-height:200px;max-width:100%;min-height:165px;overflow:hidden;padding:0;width:300px}.yoast-image-select__preview--no-preview{background:var(--yoast-color-inactive-grey-light) var(--yoast-svg-icon-image) no-repeat center center /64px 64px}.yoast-image-select__preview.yoast-image-select__preview-has-warnings{margin-bottom:16px}.yoast-image-select__preview .yoast-image-select__preview--image{height:100%;max-width:100%;object-fit:contain}.yoast-image-select .yoast-field-group__inputfield{margin-bottom:1em}.yoast-image-select .yoast-button{margin-right:1.5em}.yoast-image-select{margin-bottom:1.7em;margin-top:1.7em}.yoast-image-select .yoast-image-select-buttons button{margin-top:1em}#organization-image-select .yoast-image-select{margin-top:0}:root{--yoast-color-placeholder:#707070}.yoast .yoast-field-group__inputfield,.yoast .yoast-field-group__textarea{background:var(--yoast-color-white);border:var(--yoast-border-default);border-radius:0;box-shadow:inset 0 2px 4px #0000001a;box-sizing:border-box;font-size:var(--yoast-font-size-default);padding:8px;width:100%}.yoast .yoast-field-group__inputfield:focus,.yoast .yoast-field-group__textarea:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast-field-group__upload .yoast-field-group__inputfield{margin-bottom:8px}.yoast-field-group__inputfield{height:40px}.yoast-field-group__textarea{min-height:200px}.yoast input+.description,.yoast-field-group .description+.yoast-field-group__inputfield,.yoast-field-group .description+input,.yoast-field-group__inputfield+.description{margin-bottom:24px;margin-top:8px}.yoast .yoast-field-group__inputfield:disabled,.yoast .yoast-field-group__inputfield:read-only,.yoast .yoast-field-group__inputfield[aria-disabled=true]{background:var(--yoast-color-inactive-grey-light)}.yoast .duration-inputs__wrapper{display:flex;flex-direction:row}.yoast .duration-inputs__input-wrapper{display:flex;flex-direction:column}.yoast .duration-inputs__input{margin:0 8px 0 0;width:4em}::placeholder{color:var(--yoast-color-placeholder);opacity:1}.yoast-insights-row:not(:last-of-type){border-bottom:1px solid #0000001a;margin-bottom:24px;padding-bottom:24px}.yoast-insights-row--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}@media(min-width:782px){.yoast-modal-content .yoast-insights-row{border-bottom:1px solid #0000001a;margin-bottom:24px;padding-bottom:24px}}.yoast-insights-card__content{display:flex}.yoast-insights-card__score{flex-shrink:0;font-size:16px;margin-right:2em}.yoast-insights-card__amount{display:block;font-size:3.5em;line-height:1}.yoast-field-group__radiobutton{align-items:center;display:flex}.yoast-field-group__radiobutton--vertical:not(:last-of-type){margin-bottom:8px}.yoast-field-group__radiobutton label{cursor:pointer;margin-right:16px}.yoast-field-group__radiobutton input[type=radio]{-webkit-appearance:none;-moz-appearance:none;border:var(--yoast-border-default);border-radius:50%;box-shadow:inset 0 2px 4px #0000001a;cursor:pointer;height:18px;margin:0 8px 0 0;overflow:hidden;padding:2px;position:relative;transition:border-color .15s ease-out 0s;width:18px}.yoast-field-group__radiobutton input[type=radio]:checked:focus,.yoast-field-group__radiobutton input[type=radio]:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast-field-group__radiobutton input[type=radio]:checked{background-color:inherit;border-color:var(--yoast-color-primary)}.yoast-field-group__radiobutton input[type=radio]:checked:before{content:none}.yoast-field-group__radiobutton input[type=radio]:after{background-color:initial;border-radius:50%;content:"";display:block;height:10px;left:3px;position:absolute;top:3px;transition:background-color .15s ease-out 0s;width:10px}.yoast-field-group__radiobutton input[type=radio]:checked:after{background-color:var(--yoast-color-primary)}.yoast-field-group__select{align-items:center;cursor:pointer;display:flex}.yoast-select__indicator-separator{display:none}.yoast-select-container{background-color:#fff;border:var(--yoast-border-default);border-radius:0;box-shadow:inset 0 2px 4px #0000001a;display:block;min-height:2.85em;padding:0;position:relative;width:100%}.yoast-select-container .yoast-select__control--is-focused{box-shadow:var(--yoast-color-focus);outline:none}.yoast-select-container .yoast-select__indicator>svg{color:#212121}.yoast-select-container .yoast-select__menu{margin:0;z-index:2}.yoast-select-container .yoast-select__multi-value__label{align-items:center;box-sizing:border-box;color:inherit;display:flex;font-size:14px;padding:0}.yoast-select-container .yoast-select__multi-value{background-color:var(--yoast-color-primary);border:0;border-radius:12px;color:var(--yoast-color-white);display:flex;flex-direction:row-reverse;font-weight:500;line-height:1.5;margin-bottom:3px;margin-right:8px;margin-top:3px;padding:1px 10px 2px}.yoast-select-container .yoast-select__menu-list{padding:0}.yoast-select-container .yoast-select__multi-value__remove{-webkit-box-align:center;align-items:center;border-radius:2px;box-sizing:border-box;display:flex;margin-right:6px;padding:2px 0 0}.yoast-select-container .yoast-select__multi-value__remove:hover{background-color:inherit;color:var(--yoast-color-white);cursor:pointer}.yoast-select-container .yoast-select__control{background-color:initial;border:none;border-radius:0}.yoast-select-container .yoast-select__option{box-sizing:border-box;color:inherit;cursor:default;display:block;padding:8px 12px;-webkit-user-select:none;user-select:none;width:100%}.yoast-select-container .yoast-select__option--is-focused{background-color:var(--yoast-color-primary-lighter);color:var(--yoast-color-font-default)}.yoast-select-container .yoast-select__option.yoast-select__option--is-selected{background-color:var(--yoast-color-primary);color:var(--yoast-color-white)}.yoast-select-container input[type=text]:focus{box-shadow:none}.yoast-field-group select,.yoast-field-group__select select{-webkit-appearance:none;-moz-appearance:none;background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,');background-position:right 15px center;background-repeat:no-repeat;background-size:13px auto;border:var(--yoast-border-default);border-radius:0;box-shadow:inset 0 2px 4px #0000001a;display:block;font-size:var(--yoast-font-size-default);max-width:300px;min-height:2.85em;padding:5px 8px;position:relative;width:100%}.yoast-field-group .yoast-select__value-container{padding:0 8px!important}.yoast-field-group select:focus,.yoast-field-group__select select:focus{box-shadow:var(--yoast-color-focus);outline:none}.yoast-field-group select,.yoast-field-group__select select{line-height:1.9;padding-right:40px}.yoast-field-group select.yoast-select--inline{display:inline-block}.yoast-field-group--inline{display:inline-block;margin-right:8px;max-width:300px;width:100%}.yoast-star-rating{display:inline-block;height:12px;width:65px}.yoast-star-rating span{background-repeat:repeat-x;background-size:13px 12px;height:100%;width:100%}.yoast-star-rating__placeholder{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAmCAQAAAAYCMGrAAAA+klEQVR4AcWV4cbtMBBFF0MIVUopoVSrhDDv/3gf/RFRpzdNOty1HiBO99mzeYWgCMZMKCPGrCgrxiSUhCkDeukxJKCXAUMiehkxw6FZhxEzmp0x4kCzByYISqlYdal0supS6WrVpdLEK0YSamJiJOPY0c/uOG4s6CcXfuKJaJcRzyNCQJsNiF1sRTR1hP11NNJ8RCrONOPRf+r7J+TZgQ5CNfMOYvW/2YxDqzqA/57+gVY9eiakrnyZEGXDsaE3p/4JScwPX3rtnZATDxnPWT7X16XAHaH8HWNrlxJD9TyGti5tCM84zpZe+RxNjeX9tZqLaGoMxN/P/wHP5Vw+8ZxnEQAAAABJRU5ErkJggg==);display:inline-block;overflow:hidden;position:relative}.yoast-star-rating__fill{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAmBAMAAABALxQTAAAAFVBMVEVMaXH4twP4twP4twP4twP4twP4twP7w8S/AAAAB3RSTlMAFv5uPpvQloUsTQAAAMFJREFUeAGE0TEOgzAMQFEXoDNiYC6/wFxxAsTADDkB5f6HqNRENXUi8TYiRfnY8lNXkjBOkuBWSeAhsYJOYiW9xO4MEqshkTbCSyIH7GLdgFasHHgmwkikZQD6OROZRG4Hxju8o/TNhbNhCqkOxaZDVKdxNnq/EjUS/A2o0PuXpyVeb9bjDWY9QSWXDQfBbtbjtWY9bM4sqfx+5yYt8wNcAFEzrGGkk5668KsFrKewPtQ3aFqh8WOnYZ+lIBQkgykAWk8rlAqcHfQAAAAASUVORK5CYII=);display:block}.yoast-table{border:var(--yoast-border-default);border-bottom:0;border-spacing:0;color:var(--yoast-color-default);font-size:var(--yoast-font-size-default);line-height:1.2;width:100%}.yoast-table tbody tr:nth-child(odd){background-color:#f9f9f9}.yoast-table th{color:var(--yoast-color-dark);font-weight:var(--yoast-font-weight-bold);text-align:left;white-space:nowrap}.yoast-table td,.yoast-table th{border-bottom:var(--yoast-border-default);padding:18px 12px}.yoast-table td:first-child,.yoast-table th:first-child{padding-left:16px}.yoast-table td:last-child,.yoast-table th:last-child{padding-right:16px}td.yoast-table__button,td.yoast-table__image{padding:10px 18px 9px}.yoast-table.yoast-table--nobreak td,td.yoast-table--nobreak,tr.yoast-table--nobreak td{white-space:nowrap}th.yoast-table--primary{width:100%}td.yoast-table--nopadding{padding:0 12px}.yoast-badge{border-radius:8px;display:inline-block;font-size:10px;font-weight:600;line-height:1.6;min-height:16px;padding:0 8px}.yoast-badge__in-label{margin-left:8px;vertical-align:text-top}.yoast-new-badge{background-color:#cce5ff;color:#004973}.yoast-premium-badge{background-color:#fff3cd;color:#674e00}.yoast-beta-badge{background-color:#cce5ff;color:#004973;margin:0 2px 0 0}.yoast-feature{margin-right:150px;max-width:600px}.yoast-toggle__item{border-bottom:1px solid var(--yoast-color-border);display:flex;justify-content:space-between;margin-bottom:16px;padding-bottom:16px}.yoast-toggle__item-disabled{position:relative}.yoast-toggle__item-disabled .yoast-button.yoast-button--buy{left:100%;margin-left:32px;position:absolute;white-space:nowrap}.yoast-toggle__item-disabled .yoast-toggle,.yoast-toggle__item-disabled .yoast-toggle__item-title{opacity:.5}.yoast-toggle__item-title{align-items:center;display:flex;font-weight:700}input[type=checkbox].yoast-toggle__checkbox{-webkit-appearance:none;-moz-appearance:none;background-color:initial;border:0;box-shadow:none;height:23px;margin-left:8px;overflow:hidden;position:absolute;width:34px;z-index:1}input[type=checkbox].yoast-toggle__checkbox:checked:before{content:none}.yoast-toggle__switch{background-color:var(--yoast-color-inactive-grey);border-radius:8px;display:inline-block;height:14px;margin-left:8px;margin-right:8px;position:relative;width:34px}.yoast-toggle__checkbox:focus~.yoast-toggle__switch:before{box-shadow:var(--yoast-color-focus)}.yoast-toggle__switch:before{background-color:var(--yoast-color-inactive-grey-light);border:.5px solid #0000001a;border-radius:50%;box-shadow:0 1px 2px 0 #0006;box-sizing:border-box;content:"";height:20px;left:0;position:absolute;top:-3px;width:20px}.yoast-toggle,.yoast-toggle--inverse{align-items:center;display:grid;grid-template:1fr/repeat(3,auto);position:relative}.yoast-toggle--inverse>*,.yoast-toggle>*{grid-row:1}.yoast-toggle--inactive,.yoast-toggle--inverse .yoast-toggle--active{grid-column:1}.yoast-toggle__checkbox,.yoast-toggle__switch{grid-column:2}.yoast-toggle--active,.yoast-toggle--inverse .yoast-toggle--inactive{grid-column:3}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle__switch,.yoast-toggle--inverse .yoast-toggle__checkbox:not(:checked)~.yoast-toggle__switch{background-color:var(--yoast-color-active-light)}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle__switch:before,.yoast-toggle--inverse .yoast-toggle__checkbox:not(:checked)~.yoast-toggle__switch:before{background-color:var(--yoast-color-active);left:auto;right:0}.yoast-toggle--inverse .yoast-toggle__checkbox:checked~.yoast-toggle__switch:before{left:0;right:auto}.yoast-toggle .yoast-toggle__checkbox~.yoast-toggle--inactive,.yoast-toggle--inverse .yoast-toggle__checkbox~.yoast-toggle--inactive{color:var(--yoast-color-default-darker)}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle--inactive,.yoast-toggle .yoast-toggle__checkbox~.yoast-toggle--active,.yoast-toggle--inverse .yoast-toggle__checkbox:checked~.yoast-toggle--inactive,.yoast-toggle--inverse .yoast-toggle__checkbox~.yoast-toggle--active{color:var(--yoast-color-inactive-text)}.yoast-toggle .yoast-toggle__checkbox:checked~.yoast-toggle--active,.yoast-toggle--inverse .yoast-toggle__checkbox:checked~.yoast-toggle--active{color:var(--yoast-color-default-darker)}@media(max-width:400px){.yoast-feature{margin-right:0}.yoast-toggle__item-disabled{flex-wrap:wrap}.yoast-toggle__item-disabled .yoast-button.yoast-button--buy{margin-left:0;margin-top:8px;position:static}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340-rtl.css new file mode 100644 index 00000000..013822f3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340-rtl.css @@ -0,0 +1 @@ +body.seo_page_wpseo_page_settings{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));z-index:-1}body.seo_page_wpseo_page_settings #wpcontent{padding-right:0!important}body.seo_page_wpseo_page_settings #wpfooter{padding-left:1rem}@media (min-width:768px){body.seo_page_wpseo_page_settings #wpfooter{padding-right:17rem;padding-left:2rem}}@media screen and (max-width:782px){body.seo_page_wpseo_page_settings .wp-responsive-open #wpbody{left:-190px}}body.seo_page_wpseo_page_settings #modal-search .yst-modal__close{margin-top:-.25rem}@media (min-width:783px) and (max-width:962px){body.seo_page_wpseo_page_settings.sticky-menu .yst-root .yst-notifications--bottom-left{right:calc(160px + 2rem)}}@media (min-width:783px) and (max-width:963px){body.seo_page_wpseo_page_settings.sticky-menu.auto-fold .yst-root .yst-notifications--bottom-left,body.seo_page_wpseo_page_settings.sticky-menu.folded .yst-root .yst-notifications--bottom-left{right:calc(32px + 2rem)}}@media (min-width:962px){body.seo_page_wpseo_page_settings.sticky-menu.folded .yst-root .yst-notifications--bottom-left{right:calc(32px + 2rem)}}@media (max-width:783px){body.seo_page_wpseo_page_settings:not(.sticky-menu) .wp-responsive-open .yst-root .yst-notifications--bottom-left{right:calc(190px + 2rem)}}body.seo_page_wpseo_page_settings .yst-root .yst-notifications{max-height:calc(100% - 4rem - 32px)}@media (max-width:782px){body.seo_page_wpseo_page_settings .yst-root .yst-notifications{max-height:calc(100% - 4rem - 48px)}}body.seo_page_wpseo_page_settings .yst-root .yst-notifications--bottom-left{z-index:9991}@media (min-width:783px){body.seo_page_wpseo_page_settings .yst-root .yst-notifications--bottom-left{right:calc(160px + 2rem)}}@media (min-width:601px) and (max-width:768px){body.seo_page_wpseo_page_settings .yst-root .yst-mobile-navigation__top{top:46px}}@media (min-width:783px){body.seo_page_wpseo_page_settings .yst-root .yst-mobile-navigation__top{display:none}}body.seo_page_wpseo_page_settings .yst-root .yst-mobile-navigation__dialog{z-index:99999}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar{position:relative}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar .emoji-select-popover{right:0;left:auto;z-index:20}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .emoji-select-button,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__editor,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__label{opacity:.5}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .emoji-select-button,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__button-insert,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__editor,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__label{cursor:not-allowed}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .emoji-select-button{pointer-events:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__label{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:flex;font-size:.8125rem;font-weight:500;margin-bottom:.5rem}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__buttons{display:inline-flex;gap:.375rem}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);align-items:center;border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;line-height:1rem;margin-bottom:.5rem;padding:.5rem .75rem;-webkit-text-decoration-line:none;text-decoration-line:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert:disabled{cursor:not-allowed;opacity:.5;pointer-events:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;line-height:1.5rem;padding:.5rem .75rem;width:100%}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor:focus-within{--tw-border-opacity:0;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);padding-bottom:.25rem;padding-top:.25rem;width:14rem;z-index:20}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden]:focus{outline:2px solid #0000;outline-offset:2px}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden] div>div{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));cursor:pointer;display:block;font-size:.8125rem;padding:.5rem 1rem;-webkit-text-decoration-line:none;text-decoration-line:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden] div>div:hover,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden] div>div[aria-selected]{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(15 23 42/var(--tw-text-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--description .yst-replacevar__editor{min-height:5rem}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__mention{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;color:rgb(15 23 42/var(--tw-text-opacity));display:inline-block;font-size:.75rem;font-weight:500;line-height:1.25;margin-right:.125rem;margin-left:.125rem;padding:.125rem .5rem}body.seo_page_wpseo_page_settings.rtl .yst-root .yst-replacevar .emoji-select-popover{right:0;left:auto} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340.css new file mode 100644 index 00000000..36009a8b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2340.css @@ -0,0 +1 @@ +body.seo_page_wpseo_page_settings{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));z-index:-1}body.seo_page_wpseo_page_settings #wpcontent{padding-left:0!important}body.seo_page_wpseo_page_settings #wpfooter{padding-right:1rem}@media (min-width:768px){body.seo_page_wpseo_page_settings #wpfooter{padding-left:17rem;padding-right:2rem}}@media screen and (max-width:782px){body.seo_page_wpseo_page_settings .wp-responsive-open #wpbody{right:-190px}}body.seo_page_wpseo_page_settings #modal-search .yst-modal__close{margin-top:-.25rem}@media (min-width:783px) and (max-width:962px){body.seo_page_wpseo_page_settings.sticky-menu .yst-root .yst-notifications--bottom-left{left:calc(160px + 2rem)}}@media (min-width:783px) and (max-width:963px){body.seo_page_wpseo_page_settings.sticky-menu.auto-fold .yst-root .yst-notifications--bottom-left,body.seo_page_wpseo_page_settings.sticky-menu.folded .yst-root .yst-notifications--bottom-left{left:calc(32px + 2rem)}}@media (min-width:962px){body.seo_page_wpseo_page_settings.sticky-menu.folded .yst-root .yst-notifications--bottom-left{left:calc(32px + 2rem)}}@media (max-width:783px){body.seo_page_wpseo_page_settings:not(.sticky-menu) .wp-responsive-open .yst-root .yst-notifications--bottom-left{left:calc(190px + 2rem)}}body.seo_page_wpseo_page_settings .yst-root .yst-notifications{max-height:calc(100% - 4rem - 32px)}@media (max-width:782px){body.seo_page_wpseo_page_settings .yst-root .yst-notifications{max-height:calc(100% - 4rem - 48px)}}body.seo_page_wpseo_page_settings .yst-root .yst-notifications--bottom-left{z-index:9991}@media (min-width:783px){body.seo_page_wpseo_page_settings .yst-root .yst-notifications--bottom-left{left:calc(160px + 2rem)}}@media (min-width:601px) and (max-width:768px){body.seo_page_wpseo_page_settings .yst-root .yst-mobile-navigation__top{top:46px}}@media (min-width:783px){body.seo_page_wpseo_page_settings .yst-root .yst-mobile-navigation__top{display:none}}body.seo_page_wpseo_page_settings .yst-root .yst-mobile-navigation__dialog{z-index:99999}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar{position:relative}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar .emoji-select-popover{left:0;right:auto;z-index:20}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .emoji-select-button,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__editor,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__label{opacity:.5}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .emoji-select-button,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__button-insert,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__editor,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .yst-replacevar__label{cursor:not-allowed}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--disabled .emoji-select-button{pointer-events:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__label{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:flex;font-size:.8125rem;font-weight:500;margin-bottom:.5rem}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__buttons{display:inline-flex;gap:.375rem}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);align-items:center;border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;line-height:1rem;margin-bottom:.5rem;padding:.5rem .75rem;-webkit-text-decoration-line:none;text-decoration-line:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert:disabled{cursor:not-allowed;opacity:.5;pointer-events:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__button-insert:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;line-height:1.5rem;padding:.5rem .75rem;width:100%}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor:focus-within{--tw-border-opacity:0;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden]{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);padding-bottom:.25rem;padding-top:.25rem;width:14rem;z-index:20}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden]:focus{outline:2px solid #0000;outline-offset:2px}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden] div>div{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));cursor:pointer;display:block;font-size:.8125rem;padding:.5rem 1rem;-webkit-text-decoration-line:none;text-decoration-line:none}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden] div>div:hover,body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__editor [data-popper-reference-hidden] div>div[aria-selected]{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(15 23 42/var(--tw-text-opacity))}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar--description .yst-replacevar__editor{min-height:5rem}body.seo_page_wpseo_page_settings .yst-root .yst-replacevar__mention{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;color:rgb(15 23 42/var(--tw-text-opacity));display:inline-block;font-size:.75rem;font-weight:500;line-height:1.25;margin-left:.125rem;margin-right:.125rem;padding:.125rem .5rem}body.seo_page_wpseo_page_settings.rtl .yst-root .yst-replacevar .emoji-select-popover{left:0;right:auto} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340-rtl.css new file mode 100644 index 00000000..64fdf1dc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.screen-reader-text{clip:rect(1px,1px,1px,1px);word-wrap:normal!important;border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute!important;width:1px}.yoast-notification{background:#fff;border-right:4px solid #fff;box-shadow:0 1px 2px #0003;padding:0 12px}.yoast-container{background-color:#fdfdfd;border:1px solid #e5e5e5;box-shadow:0 1px 1px #0000000a;margin:20px 0 1px;max-width:1280px;padding:20px 20px 0;position:relative}.yoast-notifications>h2:first-child{font-size:23px;font-weight:400;line-height:29px;margin:0;padding:9px 0 4px}.yoast-notifications .yoast-container h3{background-color:#fdfdfd;border-bottom:1px solid #ccc;font-size:1.4em;margin:-20px -20px 0;padding:1em}.yoast-container .container{max-width:980px}.yoast-container .yoast-notification-holder{display:flex;position:relative}.dismiss .dashicons,.restore .dashicons{font-size:20px;height:20px;width:20px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-notifications .button.dismiss,.yoast-notifications .button.restore{background:#0000;border:none;border-radius:0;box-shadow:none;cursor:pointer;height:100%;line-height:inherit;outline:none;padding:0;position:absolute;left:0;width:52px}.yoast-notifications .button.dismiss:focus,.yoast-notifications .button.dismiss:hover,.yoast-notifications .button.restore:focus,.yoast-notifications .button.restore:hover{background:#0000}.yoast-notifications .button.dismiss:focus:before,.yoast-notifications .button.restore:focus:before{border-radius:50%;box-shadow:0 0 0 1px #007cba;content:"";display:block;height:32px;right:50%;outline:2px solid #0000;position:absolute;top:50%;transform:translate(50%,-50%);width:32px}.yoast-container .separator{border-top:1px solid #ddd;margin-bottom:1em;margin-top:1em}.yoast-container .dashicons-yes{color:#77b227}.yoast-container-disabled{background-color:#e8e8e8b3;border-radius:4px;bottom:0;display:table-cell;right:0;position:absolute;left:0;top:0}.yoast-no-issues{color:#666;padding:1em 16px 1em 1em}.yoast-muted-title{font-style:italic;font-weight:600;overflow:hidden}.yoast-muted-title:after{border-top:1px solid #ddd;content:"";display:inline-block;height:.5em;margin-right:10px;margin-left:-100%;vertical-align:bottom;width:100%}.yoast-notifications-active .yoast-notification,.yoast-notifications-dismissed .yoast-notification{flex:1;padding-left:52px}.yoast-notifications-active .yoast-notification-holder{margin-bottom:20px}.yoast-notifications-dismissed.paper.tab-block{margin:20px 0}.yoast-notifications-dismissed.paper.tab-block .paper-container.toggleable-container{padding:0}.yoast-notifications-dismissed.paper.tab-block .paper-container.toggleable-container .yoast-notification-holder:nth-child(odd){background-color:#f7f7f7}.yoast-notifications-dismissed.paper.tab-block .paper-container.toggleable-container .yoast-notification-holder:nth-child(odd) .yoast-notification{background-color:initial}.yoast-notifications-dismissed .yoast-svg-icon-eye{background:#0000 var(--yoast-svg-icon-eye) no-repeat 100% 0;background-size:20px}#yoast-errors-header .dashicons{color:#dc3232}#yoast-errors-active .yoast-notification{border-right-color:#dc3232}#yoast-errors-dismissed .yoast-notification{border-right-color:#d93f69}#yoast-warnings-header .dashicons{color:#5d237a}#yoast-warnings-active .yoast-notification{border-right-color:#5d237a}#yoast-warnings-dismissed .yoast-notification{border-right-color:#0075b3} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340.css new file mode 100644 index 00000000..f95e57c4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2340.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.screen-reader-text{clip:rect(1px,1px,1px,1px);word-wrap:normal!important;border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute!important;width:1px}.yoast-notification{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 2px #0003;padding:0 12px}.yoast-container{background-color:#fdfdfd;border:1px solid #e5e5e5;box-shadow:0 1px 1px #0000000a;margin:20px 0 1px;max-width:1280px;padding:20px 20px 0;position:relative}.yoast-notifications>h2:first-child{font-size:23px;font-weight:400;line-height:29px;margin:0;padding:9px 0 4px}.yoast-notifications .yoast-container h3{background-color:#fdfdfd;border-bottom:1px solid #ccc;font-size:1.4em;margin:-20px -20px 0;padding:1em}.yoast-container .container{max-width:980px}.yoast-container .yoast-notification-holder{display:flex;position:relative}.dismiss .dashicons,.restore .dashicons{font-size:20px;height:20px;width:20px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-notifications .button.dismiss,.yoast-notifications .button.restore{background:#0000;border:none;border-radius:0;box-shadow:none;cursor:pointer;height:100%;line-height:inherit;outline:none;padding:0;position:absolute;right:0;width:52px}.yoast-notifications .button.dismiss:focus,.yoast-notifications .button.dismiss:hover,.yoast-notifications .button.restore:focus,.yoast-notifications .button.restore:hover{background:#0000}.yoast-notifications .button.dismiss:focus:before,.yoast-notifications .button.restore:focus:before{border-radius:50%;box-shadow:0 0 0 1px #007cba;content:"";display:block;height:32px;left:50%;outline:2px solid #0000;position:absolute;top:50%;transform:translate(-50%,-50%);width:32px}.yoast-container .separator{border-top:1px solid #ddd;margin-bottom:1em;margin-top:1em}.yoast-container .dashicons-yes{color:#77b227}.yoast-container-disabled{background-color:#e8e8e8b3;border-radius:4px;bottom:0;display:table-cell;left:0;position:absolute;right:0;top:0}.yoast-no-issues{color:#666;padding:1em 1em 1em 16px}.yoast-muted-title{font-style:italic;font-weight:600;overflow:hidden}.yoast-muted-title:after{border-top:1px solid #ddd;content:"";display:inline-block;height:.5em;margin-left:10px;margin-right:-100%;vertical-align:bottom;width:100%}.yoast-notifications-active .yoast-notification,.yoast-notifications-dismissed .yoast-notification{flex:1;padding-right:52px}.yoast-notifications-active .yoast-notification-holder{margin-bottom:20px}.yoast-notifications-dismissed.paper.tab-block{margin:20px 0}.yoast-notifications-dismissed.paper.tab-block .paper-container.toggleable-container{padding:0}.yoast-notifications-dismissed.paper.tab-block .paper-container.toggleable-container .yoast-notification-holder:nth-child(odd){background-color:#f7f7f7}.yoast-notifications-dismissed.paper.tab-block .paper-container.toggleable-container .yoast-notification-holder:nth-child(odd) .yoast-notification{background-color:initial}.yoast-notifications-dismissed .yoast-svg-icon-eye{background:#0000 var(--yoast-svg-icon-eye) no-repeat 0 0;background-size:20px}#yoast-errors-header .dashicons{color:#dc3232}#yoast-errors-active .yoast-notification{border-left-color:#dc3232}#yoast-errors-dismissed .yoast-notification{border-left-color:#d93f69}#yoast-warnings-header .dashicons{color:#5d237a}#yoast-warnings-active .yoast-notification{border-left-color:#5d237a}#yoast-warnings-dismissed .yoast-notification{border-left-color:#0075b3} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340-rtl.css new file mode 100644 index 00000000..23fa8c61 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340-rtl.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 3px 0 10px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340.css new file mode 100644 index 00000000..b6193eec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2340.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 10px 0 3px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340-rtl.css new file mode 100644 index 00000000..a5c8cd08 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340-rtl.css @@ -0,0 +1 @@ +.schema-faq-section,.schema-how-to-step{border:1px solid #9197a240;list-style-type:none;margin:4px 0;padding:8px 32px 8px 4px;position:relative}.schema-faq-buttons,.schema-how-to-buttons{display:flex;justify-content:center}.schema-faq-buttons button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover,.schema-how-to-buttons button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover{box-shadow:none;color:#007cba}.schema-faq-section-mover,.schema-how-to-step-mover{display:inline-block}.schema-faq-section-mover .editor-block-mover__control,.schema-how-to-step-mover .editor-block-mover__control{display:inline-flex;height:36px;width:36px}.schema-faq-question,.schema-how-to-step-name{font-weight:600}.schema-faq .schema-faq-answer,.schema-faq .schema-faq-question,.schema-how-to .schema-how-to-description,.schema-how-to .schema-how-to-step-name,.schema-how-to .schema-how-to-step-text,.schema-how-to .schema-how-to-steps{line-height:inherit;margin:0}.schema-how-to .schema-how-to-steps{padding-top:0}.schema-faq-section-button-container,.schema-how-to-step-button-container{display:inline-flex;text-align:left}.schema-faq-section-button-container button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover,.schema-how-to-step-button-container button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover{box-shadow:none;color:#007cba}.schema-faq-section-controls-container,.schema-how-to-step-controls-container{margin-right:-28px;text-align:left}.schema-faq-section-controls-container .dashicons-arrow-up-alt2,.schema-how-to-step-controls-container .dashicons-arrow-up-alt2{position:relative;top:-1px}.faq-section-add-media .dashicon,.how-to-step-add-media .dashicon,.schema-faq-add-question .dashicon,.schema-how-to-add-step .dashicon,.schema-how-to-duration-button .dashicon{margin-left:4px}.schema-how-to{padding-top:4px}.schema-how-to-step-number{right:4px;position:absolute;text-align:left;width:24px}.schema-how-to-duration{border:0;margin:0;padding:0}.schema-how-to-duration-flex-container{align-items:center;display:flex}.schema-how-to-duration-time-input{align-items:center;display:inline-flex;flex-wrap:nowrap}legend.schema-how-to-duration-legend{margin-left:4px}#schema-how-to-duration-days{margin-left:8px}.schema-how-to-duration .schema-how-to-duration-input[type=number]{-moz-appearance:textfield;margin:0 2px;padding:6px 4px;text-align:center;width:40px}.schema-how-to-duration .schema-how-to-duration-input[type=number]::-webkit-inner-spin-button,.schema-how-to-duration .schema-how-to-duration-input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.schema-how-to-duration-button.components-icon-button{margin-right:-8px;vertical-align:top}.schema-how-to-duration-button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover{box-shadow:none;color:#007cba}.schema-how-to-description{margin:8px 0}body.is-dark-theme .schema-faq-section-mover button.components-button,body.is-dark-theme .schema-how-to-step-mover button.components-button,body.is-dark-theme button.components-button.schema-faq-add-question,body.is-dark-theme button.components-button.schema-faq-section-button,body.is-dark-theme button.components-button.schema-how-to-add-step,body.is-dark-theme button.components-button.schema-how-to-duration-button,body.is-dark-theme button.components-button.schema-how-to-step-button{color:#e8eaed} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340.css new file mode 100644 index 00000000..23f0f862 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2340.css @@ -0,0 +1 @@ +.schema-faq-section,.schema-how-to-step{border:1px solid #9197a240;list-style-type:none;margin:4px 0;padding:8px 4px 8px 32px;position:relative}.schema-faq-buttons,.schema-how-to-buttons{display:flex;justify-content:center}.schema-faq-buttons button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover,.schema-how-to-buttons button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover{box-shadow:none;color:#007cba}.schema-faq-section-mover,.schema-how-to-step-mover{display:inline-block}.schema-faq-section-mover .editor-block-mover__control,.schema-how-to-step-mover .editor-block-mover__control{display:inline-flex;height:36px;width:36px}.schema-faq-question,.schema-how-to-step-name{font-weight:600}.schema-faq .schema-faq-answer,.schema-faq .schema-faq-question,.schema-how-to .schema-how-to-description,.schema-how-to .schema-how-to-step-name,.schema-how-to .schema-how-to-step-text,.schema-how-to .schema-how-to-steps{line-height:inherit;margin:0}.schema-how-to .schema-how-to-steps{padding-top:0}.schema-faq-section-button-container,.schema-how-to-step-button-container{display:inline-flex;text-align:right}.schema-faq-section-button-container button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover,.schema-how-to-step-button-container button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover{box-shadow:none;color:#007cba}.schema-faq-section-controls-container,.schema-how-to-step-controls-container{margin-left:-28px;text-align:right}.schema-faq-section-controls-container .dashicons-arrow-up-alt2,.schema-how-to-step-controls-container .dashicons-arrow-up-alt2{position:relative;top:-1px}.faq-section-add-media .dashicon,.how-to-step-add-media .dashicon,.schema-faq-add-question .dashicon,.schema-how-to-add-step .dashicon,.schema-how-to-duration-button .dashicon{margin-right:4px}.schema-how-to{padding-top:4px}.schema-how-to-step-number{left:4px;position:absolute;text-align:right;width:24px}.schema-how-to-duration{border:0;margin:0;padding:0}.schema-how-to-duration-flex-container{align-items:center;display:flex}.schema-how-to-duration-time-input{align-items:center;display:inline-flex;flex-wrap:nowrap}legend.schema-how-to-duration-legend{margin-right:4px}#schema-how-to-duration-days{margin-right:8px}.schema-how-to-duration .schema-how-to-duration-input[type=number]{-moz-appearance:textfield;margin:0 2px;padding:6px 4px;text-align:center;width:40px}.schema-how-to-duration .schema-how-to-duration-input[type=number]::-webkit-inner-spin-button,.schema-how-to-duration .schema-how-to-duration-input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.schema-how-to-duration-button.components-icon-button{margin-left:-8px;vertical-align:top}.schema-how-to-duration-button.components-icon-button:not(:disabled):not([aria-disabled=true]):not(.is-default):hover{box-shadow:none;color:#007cba}.schema-how-to-description{margin:8px 0}body.is-dark-theme .schema-faq-section-mover button.components-button,body.is-dark-theme .schema-how-to-step-mover button.components-button,body.is-dark-theme button.components-button.schema-faq-add-question,body.is-dark-theme button.components-button.schema-faq-section-button,body.is-dark-theme button.components-button.schema-how-to-add-step,body.is-dark-theme button.components-button.schema-how-to-duration-button,body.is-dark-theme button.components-button.schema-how-to-step-button{color:#e8eaed} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/support-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/support-2340-rtl.css new file mode 100644 index 00000000..44a1ca14 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/support-2340-rtl.css @@ -0,0 +1 @@ +.seo_page_wpseo_page_support{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));z-index:-1}.seo_page_wpseo_page_support #wpcontent{padding-right:0!important}.seo_page_wpseo_page_support #wpfooter{padding-left:1rem}@media (min-width:768px){.seo_page_wpseo_page_support #wpfooter{padding-right:17rem;padding-left:2rem}}@media screen and (max-width:782px){.seo_page_wpseo_page_support .wp-responsive-open #wpbody{left:-190px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/support-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/support-2340.css new file mode 100644 index 00000000..fa1284bb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/support-2340.css @@ -0,0 +1 @@ +.seo_page_wpseo_page_support{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));z-index:-1}.seo_page_wpseo_page_support #wpcontent{padding-left:0!important}.seo_page_wpseo_page_support #wpfooter{padding-right:1rem}@media (min-width:768px){.seo_page_wpseo_page_support #wpfooter{padding-left:17rem;padding-right:2rem}}@media screen and (max-width:782px){.seo_page_wpseo_page_support .wp-responsive-open #wpbody{right:-190px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340-rtl.css new file mode 100644 index 00000000..bfd38599 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340-rtl.css @@ -0,0 +1 @@ +.yst-root *,.yst-root :after,.yst-root :before{border:0 solid #e5e7eb;box-sizing:border-box}.yst-root :after,.yst-root :before{--tw-content:""}.yst-root{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;margin:0;tab-size:4}.yst-root hr{border-top-width:1px;color:inherit;height:0}.yst-root abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6{font-size:inherit;font-weight:inherit}.yst-root a{color:inherit;text-decoration:inherit}.yst-root b,.yst-root strong{font-weight:bolder}.yst-root code,.yst-root kbd,.yst-root pre,.yst-root samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}.yst-root small{font-size:80%}.yst-root sub,.yst-root sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}.yst-root sub{bottom:-.25em}.yst-root sup{top:-.5em}.yst-root table{border-collapse:collapse;border-color:inherit;text-indent:0}.yst-root button,.yst-root input,.yst-root optgroup,.yst-root select,.yst-root textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}.yst-root button,.yst-root select{text-transform:none}.yst-root [type=button],.yst-root [type=reset],.yst-root [type=submit],.yst-root button{-webkit-appearance:button;background-color:initial;background-image:none}.yst-root :-moz-focusring{outline:auto}.yst-root :-moz-ui-invalid{box-shadow:none}.yst-root progress{vertical-align:initial}.yst-root ::-webkit-inner-spin-button,.yst-root ::-webkit-outer-spin-button{height:auto}.yst-root [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.yst-root ::-webkit-search-decoration{-webkit-appearance:none}.yst-root ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.yst-root summary{display:list-item}.yst-root blockquote,.yst-root dd,.yst-root dl,.yst-root figure,.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6,.yst-root hr,.yst-root p,.yst-root pre{margin:0}.yst-root fieldset{margin:0;padding:0}.yst-root legend{padding:0}.yst-root menu,.yst-root ol,.yst-root ul{list-style:none;margin:0;padding:0}.yst-root textarea{resize:vertical}.yst-root input::placeholder,.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root [role=button],.yst-root button{cursor:pointer}.yst-root :disabled{cursor:default}.yst-root audio,.yst-root canvas,.yst-root embed,.yst-root iframe,.yst-root img,.yst-root object,.yst-root svg,.yst-root video{display:block;vertical-align:middle}.yst-root img,.yst-root video{height:auto;max-width:100%}.yst-root [type=date],.yst-root [type=datetime-local],.yst-root [type=email],.yst-root [type=month],.yst-root [type=number],.yst-root [type=password],.yst-root [type=search],.yst-root [type=tel],.yst-root [type=text],.yst-root [type=time],.yst-root [type=url],.yst-root [type=week]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root [type=date]:focus,.yst-root [type=datetime-local]:focus,.yst-root [type=email]:focus,.yst-root [type=month]:focus,.yst-root [type=number]:focus,.yst-root [type=password]:focus,.yst-root [type=search]:focus,.yst-root [type=tel]:focus,.yst-root [type=text]:focus,.yst-root [type=time]:focus,.yst-root [type=url]:focus,.yst-root [type=week]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder{color:#6b7280;opacity:1}.yst-root [type=date]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=datetime-local]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=email]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=month]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=number]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=password]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=search]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=tel]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=text]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=time]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=url]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=week]::-webkit-datetime-edit-fields-wrapper{padding:0}.yst-root [type=date]::-webkit-date-and-time-value,.yst-root [type=datetime-local]::-webkit-date-and-time-value,.yst-root [type=email]::-webkit-date-and-time-value,.yst-root [type=month]::-webkit-date-and-time-value,.yst-root [type=number]::-webkit-date-and-time-value,.yst-root [type=password]::-webkit-date-and-time-value,.yst-root [type=search]::-webkit-date-and-time-value,.yst-root [type=tel]::-webkit-date-and-time-value,.yst-root [type=text]::-webkit-date-and-time-value,.yst-root [type=time]::-webkit-date-and-time-value,.yst-root [type=url]::-webkit-date-and-time-value,.yst-root [type=week]::-webkit-date-and-time-value{min-height:1.5em}.yst-root [type=date]::-webkit-datetime-edit,.yst-root [type=date]::-webkit-datetime-edit-day-field,.yst-root [type=date]::-webkit-datetime-edit-hour-field,.yst-root [type=date]::-webkit-datetime-edit-meridiem-field,.yst-root [type=date]::-webkit-datetime-edit-millisecond-field,.yst-root [type=date]::-webkit-datetime-edit-minute-field,.yst-root [type=date]::-webkit-datetime-edit-month-field,.yst-root [type=date]::-webkit-datetime-edit-second-field,.yst-root [type=date]::-webkit-datetime-edit-year-field,.yst-root [type=datetime-local]::-webkit-datetime-edit,.yst-root [type=datetime-local]::-webkit-datetime-edit-day-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-hour-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-meridiem-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-millisecond-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-minute-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-month-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-second-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-year-field,.yst-root [type=email]::-webkit-datetime-edit,.yst-root [type=email]::-webkit-datetime-edit-day-field,.yst-root [type=email]::-webkit-datetime-edit-hour-field,.yst-root [type=email]::-webkit-datetime-edit-meridiem-field,.yst-root [type=email]::-webkit-datetime-edit-millisecond-field,.yst-root [type=email]::-webkit-datetime-edit-minute-field,.yst-root [type=email]::-webkit-datetime-edit-month-field,.yst-root [type=email]::-webkit-datetime-edit-second-field,.yst-root [type=email]::-webkit-datetime-edit-year-field,.yst-root [type=month]::-webkit-datetime-edit,.yst-root [type=month]::-webkit-datetime-edit-day-field,.yst-root [type=month]::-webkit-datetime-edit-hour-field,.yst-root [type=month]::-webkit-datetime-edit-meridiem-field,.yst-root [type=month]::-webkit-datetime-edit-millisecond-field,.yst-root [type=month]::-webkit-datetime-edit-minute-field,.yst-root [type=month]::-webkit-datetime-edit-month-field,.yst-root [type=month]::-webkit-datetime-edit-second-field,.yst-root [type=month]::-webkit-datetime-edit-year-field,.yst-root [type=number]::-webkit-datetime-edit,.yst-root [type=number]::-webkit-datetime-edit-day-field,.yst-root [type=number]::-webkit-datetime-edit-hour-field,.yst-root [type=number]::-webkit-datetime-edit-meridiem-field,.yst-root [type=number]::-webkit-datetime-edit-millisecond-field,.yst-root [type=number]::-webkit-datetime-edit-minute-field,.yst-root [type=number]::-webkit-datetime-edit-month-field,.yst-root [type=number]::-webkit-datetime-edit-second-field,.yst-root [type=number]::-webkit-datetime-edit-year-field,.yst-root [type=password]::-webkit-datetime-edit,.yst-root [type=password]::-webkit-datetime-edit-day-field,.yst-root [type=password]::-webkit-datetime-edit-hour-field,.yst-root [type=password]::-webkit-datetime-edit-meridiem-field,.yst-root [type=password]::-webkit-datetime-edit-millisecond-field,.yst-root [type=password]::-webkit-datetime-edit-minute-field,.yst-root [type=password]::-webkit-datetime-edit-month-field,.yst-root [type=password]::-webkit-datetime-edit-second-field,.yst-root [type=password]::-webkit-datetime-edit-year-field,.yst-root [type=search]::-webkit-datetime-edit,.yst-root [type=search]::-webkit-datetime-edit-day-field,.yst-root [type=search]::-webkit-datetime-edit-hour-field,.yst-root [type=search]::-webkit-datetime-edit-meridiem-field,.yst-root [type=search]::-webkit-datetime-edit-millisecond-field,.yst-root [type=search]::-webkit-datetime-edit-minute-field,.yst-root [type=search]::-webkit-datetime-edit-month-field,.yst-root [type=search]::-webkit-datetime-edit-second-field,.yst-root [type=search]::-webkit-datetime-edit-year-field,.yst-root [type=tel]::-webkit-datetime-edit,.yst-root [type=tel]::-webkit-datetime-edit-day-field,.yst-root [type=tel]::-webkit-datetime-edit-hour-field,.yst-root [type=tel]::-webkit-datetime-edit-meridiem-field,.yst-root [type=tel]::-webkit-datetime-edit-millisecond-field,.yst-root [type=tel]::-webkit-datetime-edit-minute-field,.yst-root [type=tel]::-webkit-datetime-edit-month-field,.yst-root [type=tel]::-webkit-datetime-edit-second-field,.yst-root [type=tel]::-webkit-datetime-edit-year-field,.yst-root [type=text]::-webkit-datetime-edit,.yst-root [type=text]::-webkit-datetime-edit-day-field,.yst-root [type=text]::-webkit-datetime-edit-hour-field,.yst-root [type=text]::-webkit-datetime-edit-meridiem-field,.yst-root [type=text]::-webkit-datetime-edit-millisecond-field,.yst-root [type=text]::-webkit-datetime-edit-minute-field,.yst-root [type=text]::-webkit-datetime-edit-month-field,.yst-root [type=text]::-webkit-datetime-edit-second-field,.yst-root [type=text]::-webkit-datetime-edit-year-field,.yst-root [type=time]::-webkit-datetime-edit,.yst-root [type=time]::-webkit-datetime-edit-day-field,.yst-root [type=time]::-webkit-datetime-edit-hour-field,.yst-root [type=time]::-webkit-datetime-edit-meridiem-field,.yst-root [type=time]::-webkit-datetime-edit-millisecond-field,.yst-root [type=time]::-webkit-datetime-edit-minute-field,.yst-root [type=time]::-webkit-datetime-edit-month-field,.yst-root [type=time]::-webkit-datetime-edit-second-field,.yst-root [type=time]::-webkit-datetime-edit-year-field,.yst-root [type=url]::-webkit-datetime-edit,.yst-root [type=url]::-webkit-datetime-edit-day-field,.yst-root [type=url]::-webkit-datetime-edit-hour-field,.yst-root [type=url]::-webkit-datetime-edit-meridiem-field,.yst-root [type=url]::-webkit-datetime-edit-millisecond-field,.yst-root [type=url]::-webkit-datetime-edit-minute-field,.yst-root [type=url]::-webkit-datetime-edit-month-field,.yst-root [type=url]::-webkit-datetime-edit-second-field,.yst-root [type=url]::-webkit-datetime-edit-year-field,.yst-root [type=week]::-webkit-datetime-edit,.yst-root [type=week]::-webkit-datetime-edit-day-field,.yst-root [type=week]::-webkit-datetime-edit-hour-field,.yst-root [type=week]::-webkit-datetime-edit-meridiem-field,.yst-root [type=week]::-webkit-datetime-edit-millisecond-field,.yst-root [type=week]::-webkit-datetime-edit-minute-field,.yst-root [type=week]::-webkit-datetime-edit-month-field,.yst-root [type=week]::-webkit-datetime-edit-second-field,.yst-root [type=week]::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}.yst-root textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root select{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:left .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-left:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.yst-root select[multiple]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select[multiple]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:0;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=checkbox]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:checked,.yst-root [type=checkbox]:checked:focus,.yst-root [type=checkbox]:checked:hover,.yst-root [type=checkbox]:indeterminate{background-color:currentColor;border-color:#0000}.yst-root [type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:indeterminate:focus,.yst-root [type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}.yst-root [type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:100%;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=radio]:checked,.yst-root [type=radio]:checked:focus,.yst-root [type=radio]:checked:hover{background-color:currentColor;border-color:#0000}.yst-root{--tw-text-opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:rgb(71 85 105/var(--tw-text-opacity));font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.8125rem;font-weight:400;line-height:1.5}.yst-root a{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root a:visited{color:#a61e69}.yst-root a:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root a:hover:visited{color:#b94986}.yst-root a:focus{--tw-text-opacity:1;border-radius:.125rem;color:rgb(99 102 241/var(--tw-text-opacity));outline-color:#4f46e5;outline-offset:1px;outline-style:solid}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder,.yst-root textarea::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root svg path{stroke-width:inherit}.yst-root .yst-radio__input,.yst-root a:focus{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-radio__input{transition-property:none}.yst-root .yst-radio__input:checked:before{content:var(--tw-content);display:none}.yst-root .yst-modal{z-index:100000!important}.yst-root dd,.yst-root li{margin-bottom:0}.yst-root input[type=date],.yst-root input[type=datetime-local],.yst-root input[type=datetime],.yst-root input[type=email],.yst-root input[type=month],.yst-root input[type=number],.yst-root input[type=password],.yst-root input[type=search],.yst-root input[type=tel],.yst-root input[type=text],.yst-root input[type=time],.yst-root input[type=url],.yst-root input[type=week]{min-height:0}.yst-root input[type=checkbox]{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);min-height:0;min-width:0;transition-property:none}.yst-root input[type=checkbox]:before{--tw-content:none;content:var(--tw-content)}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.yst-root .yst-alert{border-radius:.375rem;display:flex;gap:.75rem;padding:1rem}.yst-root .yst-alert--info{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.yst-root .yst-alert--info .yst-alert__message{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.yst-root .yst-alert--warning{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.yst-root .yst-alert--warning .yst-alert__message{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.yst-root .yst-alert--success{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.yst-root .yst-alert--success .yst-alert__message{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.yst-root .yst-alert--error{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.yst-root .yst-alert--error .yst-alert__message{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.yst-root .yst-alert__icon{flex-grow:0;flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-autocomplete{position:relative}.yst-root .yst-autocomplete--error .yst-autocomplete__button{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.yst-root .yst-autocomplete--error .yst-autocomplete__button:focus{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity));border-color:rgb(239 68 68/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete--error .yst-autocomplete__input::placeholder{--tw-placeholder-opacity:1;color:rgb(252 165 165/var(--tw-placeholder-opacity))}.yst-root .yst-autocomplete--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-autocomplete--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;padding-right:.75rem;padding-left:.75rem;width:100%}.yst-root .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;left:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-autocomplete__input{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem 0 .5rem 2.5rem;width:100%}.yst-root .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:20}.yst-root .yst-autocomplete__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-autocomplete__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-autocomplete__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-autocomplete__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-badge{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(219 234 254/var(--tw-bg-opacity));border-radius:9999px;color:rgb(30 64 175/var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;line-height:1.25;padding:.125rem .5rem;vertical-align:middle;white-space:nowrap}.yst-root .yst-badge--info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity));color:rgb(30 58 138/var(--tw-text-opacity))}.yst-root .yst-badge--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-badge--plain{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(15 23 42/var(--tw-text-opacity))}.yst-root .yst-badge--small{font-size:.675rem}.yst-root .yst-badge--large{font-size:1rem;padding-right:.75rem;padding-left:.75rem}.yst-root .yst-button{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:#0000;align-items:center;border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;justify-content:center;line-height:1.25rem;padding:.5rem .75rem;text-align:center;-webkit-text-decoration-line:none;text-decoration-line:none}.yst-root .yst-button:focus{outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root a.yst-button:focus{border-radius:.375rem}.yst-root .yst-button--primary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:#0000;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:visited{color:#fff}.yst-root .yst-button--primary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(143 15 87/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:hover:visited{color:#fff}.yst-root .yst-button--primary:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--secondary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:visited{color:#1e293b}.yst-root .yst-button--secondary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:hover:visited{color:#1e293b}.yst-root .yst-button--secondary:focus{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--tertiary{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:initial;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:visited{color:#83084e}.yst-root .yst-button--tertiary:hover{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:hover:visited{color:#83084e}.yst-root .yst-button--tertiary:focus{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--error{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity));border-color:#0000;color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:visited{color:#fff}.yst-root .yst-button--error:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:hover:visited{color:#fff}.yst-root .yst-button--error:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#dc2626}.yst-root .yst-button--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity));border-color:#0000;color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:visited{color:#78350f}.yst-root .yst-button--upsell:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:hover:visited{color:#78350f}.yst-root .yst-button--upsell:focus{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity));outline-color:#fbbf24}.yst-root .yst-button--large{font-size:.875rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-button--extra-large{font-size:1rem;line-height:1.5rem;padding:.625rem .875rem}.yst-root .yst-button--small{font-size:.75rem;line-height:1rem;padding:.375rem .625rem}.yst-root .yst-button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-button--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-checkbox{align-items:center;display:flex}.yst-root .yst-checkbox--disabled .yst-checkbox__input,.yst-root .yst-checkbox--disabled .yst-checkbox__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.25rem;color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-checkbox__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-checkbox__label{margin-right:.75rem}.yst-root .yst-code{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(15 23 42/var(--tw-text-opacity));display:inline-block;font-size:.75rem;line-height:1.25;margin:0;padding:.25rem}.yst-root .yst-code--block{display:block;margin-bottom:.5rem;margin-top:.5rem;max-width:100%;overflow-x:auto;padding:.25rem .5rem;white-space:nowrap}.yst-root .yst-file-input{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border:2px dashed rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;padding:1.25rem 1.5rem 1.5rem;text-align:center;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:100%}.yst-root .yst-file-input.yst-is-drag-over{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 243 247/var(--tw-bg-opacity));border-color:rgb(205 130 171/var(--tw-border-opacity))}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__content{pointer-events:none}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__icon{--tw-translate-y:-0.5rem;--tw-text-opacity:1;color:rgb(185 73 134/var(--tw-text-opacity));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-file-input.yst-is-disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-file-input.yst-is-disabled .yst-file-input__select-label{cursor:not-allowed}.yst-root .yst-file-input__content{align-items:center;display:inline-flex;flex-direction:column;max-width:20rem}.yst-root .yst-file-input__content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-input__content{text-align:center}.yst-root .yst-file-input__icon{stroke-width:1;--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:3rem;margin-right:auto;margin-left:auto;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:3rem}.yst-root .yst-file-input__icon>path{stroke-width:1}.yst-root .yst-file-input__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-file-input__input:focus+.yst-file-input__select-label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-input__labels{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:inline-block;font-weight:400}.yst-root .yst-file-input__select-label{border-radius:.375rem;font-weight:500}[dir=rtl] .yst-root .yst-file-input__labels{flex-direction:row-reverse}.yst-root .yst-label{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;font-weight:500}.yst-root .yst-link{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));cursor:pointer;-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root .yst-link:visited{color:#a61e69}.yst-root .yst-link:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root .yst-link:hover:visited{color:#b94986}.yst-root .yst-link:focus{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity));--tw-ring-offset-width:1px;--tw-ring-offset-color:#0000;border-radius:.125rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(99 102 241/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-link--primary{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus,.yst-root .yst-link--primary:hover{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(154 22 96/var(--tw-ring-opacity))}.yst-root .yst-link--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-link--error:focus,.yst-root .yst-link--error:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-link--error:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.yst-root .yst-paper{--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:flex;flex-direction:column}.yst-root .yst-paper__header{border-bottom-width:1px;padding:2rem}.yst-root .yst-paper__content{flex-grow:1;padding:2rem}.yst-root .yst-progress-bar{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;display:block;overflow:hidden;width:100%}.yst-root .yst-progress-bar__progress{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));border-radius:9999px;display:block;height:.375rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}.yst-root .yst-radio{align-items:center;display:flex}.yst-root .yst-radio--disabled .yst-radio__check,.yst-root .yst-radio--disabled .yst-radio__input,.yst-root .yst-radio--disabled .yst-radio__label{cursor:not-allowed;opacity:.5}.yst-root .yst-radio--disabled .yst-radio__check:focus,.yst-root .yst-radio--disabled .yst-radio__input:focus,.yst-root .yst-radio--disabled .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block{display:inline-flex}.yst-root .yst-radio--inline-block .yst-radio__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:#0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__check{visibility:visible}.yst-root .yst-radio--inline-block .yst-radio__input:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-offset-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__content{position:relative}.yst-root .yst-radio--inline-block .yst-radio__label{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer;display:flex;font-size:1rem;height:3.5rem;justify-content:center;margin-right:0;width:3.5rem}.yst-root .yst-radio--inline-block .yst-radio__label:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.yst-root .yst-radio--inline-block .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio--inline-block .yst-radio__check{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity));height:1.25rem;position:absolute;left:.125rem;top:.125rem;visibility:hidden;width:1.25rem}.yst-root .yst-radio__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-radio__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-radio__label{margin-right:.75rem}.yst-root .yst-select{position:relative}.yst-root .yst-select--disabled .yst-select__button,.yst-root .yst-select--disabled .yst-select__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select__button{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;line-height:1.5rem;padding:.5rem .75rem;position:relative;text-align:right;width:100%}.yst-root .yst-select__button:focus{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;left:.625rem;top:.625rem;width:1.25rem}.yst-root .yst-select__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:10}.yst-root .yst-select__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-select__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-select__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(154 22 96/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__button-label,.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-select__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-skeleton-loader{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;display:block;height:auto;overflow:hidden;position:relative;width:-moz-fit-content;width:fit-content}.yst-root .yst-skeleton-loader:after{--tw-translate-x:-100%;animation:wave 2.5s linear .5s infinite;background:linear-gradient(-90deg,#0000,#00000012,#0000);bottom:0;content:"";right:0;position:absolute;left:0;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes wave{0%{transform:translateX(100%)}50%,to{transform:translateX(-100%)}}.yst-root .yst-tag-input{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(30 41 59/var(--tw-text-opacity));display:flex;flex-wrap:wrap;font-size:.8125rem;gap:.375rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-tag-input::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root .yst-tag-input{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-tag-input,.yst-root .yst-tag-input:focus-within{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-tag-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-input--disabled:focus-within{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:rgb(203 213 225/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus,.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(148 163 184/var(--tw-text-opacity))}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__input{cursor:not-allowed}.yst-root .yst-tag-input__tag{cursor:pointer;gap:.125rem;min-height:20px;padding-inline-end:.125rem}.yst-root .yst-tag-input__tag:hover{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input__tag:focus,.yst-root .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__remove-tag{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1rem;justify-content:center;width:1rem}.yst-root .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__input{border-style:none;display:inline-flex;flex:1 1 0%;font-size:.8125rem;margin:0;padding:0}.yst-root .yst-tag-input__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-text-input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-text-input--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-text-input--read-only{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;background-color:rgb(248 250 252/var(--tw-bg-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(100 116 139/var(--tw-text-opacity));cursor:default}.yst-root .yst-textarea{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-textarea:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-textarea--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-textarea--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-title{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity));font-weight:500;line-height:1.25}.yst-root .yst-title--1{font-size:1.5rem}.yst-root .yst-title--2{font-size:1.125rem}.yst-root .yst-title--3{font-size:.875rem}.yst-root .yst-title--4{font-size:1rem}.yst-root .yst-title--5{font-size:.8125rem}.yst-root .yst-toast{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);max-width:100%;overflow-y:auto;padding:1rem;pointer-events:auto;width:20rem;z-index:20}.yst-root .yst-toast--large{width:24rem}.yst-root .yst-toggle{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));border-color:#0000;border-radius:9999px;border-width:2px;cursor:pointer;display:inline-flex;flex-shrink:0;height:1.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2.75rem}.yst-root .yst-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-toggle--checked{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-toggle--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-toggle--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-toggle__handle{--tw-translate-x:0px;--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:9999px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;height:1.25rem;justify-content:center;pointer-events:none;position:relative;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1.25rem}.yst-root .yst-toggle__icon{stroke:currentColor;stroke-width:2;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-grow:0;flex-shrink:0;height:.625rem;transition-duration:.1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:.625rem}.yst-root .yst-toggle__icon--check{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-toggle__icon--x{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}[dir=rtl] .yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity));border-radius:.5rem;color:rgb(255 255 255/var(--tw-text-opacity));display:inline-block;font-size:.75rem;max-width:24rem;padding:.5rem .625rem;position:absolute;white-space:normal;width:max-content;z-index:10}.yst-root .yst-tooltip--top{--tw-translate-x:-50%;--tw-translate-y:-100%;right:50%;margin-top:-.75rem;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--top:before{--tw-translate-x:-50%;--tw-translate-y:0px;--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-right-color:#0000;border-left-color:#0000;border-top-color:rgb(31 41 55/var(--tw-border-opacity));border-width:8px;content:var(--tw-content);position:absolute}.yst-root .yst-tooltip--bottom,.yst-root .yst-tooltip--top:before{right:50%;top:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--bottom{--tw-translate-x:-50%;--tw-translate-y:-0px;margin-top:.75rem}.yst-root .yst-tooltip--bottom:before{--tw-translate-x:-50%;--tw-border-opacity:1;--tw-content:"";border-bottom-color:rgb(31 41 55/var(--tw-border-opacity));border-right-color:#0000;border-left-color:#0000;border-top-color:#0000;border-width:8px;bottom:100%;content:var(--tw-content);right:50%;position:absolute;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right{--tw-translate-x:-0px;right:100%;margin-right:.75rem}.yst-root .yst-tooltip--right,.yst-root .yst-tooltip--right:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-right-color:#0000;border-left-color:rgb(31 41 55/var(--tw-border-opacity));border-top-color:#0000;border-width:8px;content:var(--tw-content);position:absolute;left:100%}.yst-root .yst-tooltip--left{margin-left:.75rem;left:100%}.yst-root .yst-tooltip--left,.yst-root .yst-tooltip--left:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--left:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-right-color:rgb(31 41 55/var(--tw-border-opacity));border-left-color:#0000;border-top-color:#0000;border-width:8px;content:var(--tw-content);right:100%;position:absolute}.yst-root .yst-validation-icon{pointer-events:none}.yst-root .yst-validation-icon--success{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.yst-root .yst-validation-icon--info{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.yst-root .yst-validation-icon--warning{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.yst-root .yst-validation-icon--error{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-validation-input{position:relative}.yst-root .yst-validation-input--success .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--success .yst-validation-input__input:focus,.yst-root .yst-validation-input--success .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.yst-root .yst-validation-input--info .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--info .yst-validation-input__input:focus,.yst-root .yst-validation-input--info .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.yst-root .yst-validation-input--warning .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--warning .yst-validation-input__input:focus,.yst-root .yst-validation-input--warning .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.yst-root .yst-validation-input--error .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity));padding-left:2.5rem}.yst-root .yst-validation-input--error .yst-validation-input__input:focus,.yst-root .yst-validation-input--error .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.yst-root .yst-validation-input__input:focus,.yst-root .yst-validation-input__input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-validation-input__icon{height:1.25rem;position:absolute;left:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-validation-message a{color:inherit;font-weight:500}.yst-root .yst-validation-message a:visited:hover{color:inherit}.yst-root .yst-validation-message a:focus{--tw-ring-color:currentColor}.yst-root .yst-validation-message--success{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.yst-root .yst-validation-message--info{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.yst-root .yst-validation-message--warning{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.yst-root .yst-validation-message--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-autocomplete-field__description,.yst-root .yst-autocomplete-field__validation{margin-top:.5rem}.yst-root .yst-card{display:flex;flex-direction:column;position:relative}.yst-root .yst-card>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-card{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);overflow:hidden;padding:1.5rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-card__header{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 244 246/var(--tw-bg-opacity));display:flex;height:6rem;justify-content:center;margin-right:-1.5rem;margin-left:-1.5rem;margin-top:-1.5rem;padding:1.5rem;position:relative}.yst-root .yst-card__content{flex-grow:1}.yst-root .yst-card__footer{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity));border-top-width:1px;padding-top:1.5rem}.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__description,.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox-group__label{margin-bottom:.5rem}.yst-root .yst-checkbox-group__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-checkbox-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-feature-upsell{position:relative}.yst-root .yst-feature-upsell--default{--tw-grayscale:grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.yst-root .yst-feature-upsell--card{padding:1.5rem}.yst-root .yst-file-import>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-import__feedback{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding:1rem}.yst-root .yst-file-import__feedback-header{align-items:flex-start;display:flex}.yst-root .yst-file-import__feedback-header>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-left:calc(1rem*var(--tw-space-x-reverse))}.yst-root .yst-file-import__feedback-figure{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 229 237/var(--tw-bg-opacity));border-radius:9999px;display:flex;height:2rem;justify-content:center;width:2rem}.yst-root .yst-file-import__feedback-figure>svg{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity));height:1.25rem;width:1.25rem}.yst-root .yst-file-import__feedback-title{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:block;font-weight:500;margin-bottom:.125rem;overflow-wrap:break-word}.yst-root .yst-file-import__feedback-description{display:block;font-size:.75rem;font-weight:500}.yst-root .yst-file-import__abort-button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(241 245 249/var(--tw-bg-opacity));border-radius:9999px;color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1.25rem;justify-content:center;width:1.25rem}.yst-root .yst-file-import__abort-button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(71 85 105/var(--tw-text-opacity))}.yst-root .yst-file-import__abort-button:focus{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-import__abort-button>svg{height:.75rem;width:.75rem}.yst-root .yst-file-import__abort-button>svg>path{stroke-width:3}.yst-root .yst-modal{bottom:0;right:0;padding:1rem;position:fixed;left:0;top:0;z-index:10}@media (min-width:640px){.yst-root .yst-modal{padding:2rem}}@media (min-width:768px){.yst-root .yst-modal{padding:5rem}}.yst-root .yst-modal__layout{display:flex;min-height:100%}.yst-root .yst-modal--center .yst-modal__layout{align-items:center;justify-content:center}.yst-root .yst-modal--top-center .yst-modal__layout{align-items:flex-start;justify-content:center}.yst-root .yst-modal__overlay{--tw-bg-opacity:0.75;background-color:rgb(100 116 139/var(--tw-bg-opacity));bottom:0;right:0;position:fixed;left:0;top:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-modal__panel{--tw-bg-opacity:1;--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);max-width:36rem;overflow:hidden;padding:1.5rem;position:relative;width:100%}.yst-root .yst-modal__close{display:block;position:absolute;left:1rem;top:1rem}.yst-root .yst-modal__close-button{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(148 163 184/var(--tw-text-opacity));position:relative;z-index:10}.yst-root .yst-modal__close-button:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-modal__close-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-modal__container{display:flex;flex-direction:column;max-height:calc(100vh - 2rem)}@media (min-width:640px){.yst-root .yst-modal__container{max-height:calc(100vh - 4rem)}}@media (min-width:768px){.yst-root .yst-modal__container{max-height:calc(100vh - 10rem)}}.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 5rem)}@media (min-width:640px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 7rem)}}@media (min-width:768px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 13rem)}}.yst-root .yst-modal__container-footer,.yst-root .yst-modal__container-header{flex-shrink:0}.yst-root .yst-modal__container-content{overflow:auto}.yst-root .yst-modal__panel .yst-modal__container-content{margin-right:-1.5rem;margin-left:-1.5rem;padding-right:1.5rem;padding-left:1.5rem}.yst-root .yst-notifications{display:flex;flex-direction:column;max-height:calc(100vh - 4rem);max-width:calc(100vw - 4rem);pointer-events:none;position:fixed;width:100%;z-index:20}.yst-root .yst-notifications>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-notifications--bottom-center{align-items:center;bottom:2rem}.yst-root .yst-notifications--bottom-left{bottom:2rem;right:2rem}.yst-root .yst-notifications--top-center{align-items:center;top:2rem}.yst-root .yst-notification--large{width:24rem}.yst-root .yst-notification__icon{height:1.25rem;width:1.25rem}.yst-root .yst-pagination{display:inline-flex;isolation:isolate}.yst-root .yst-pagination>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-left:calc(-1px*var(--tw-space-x-reverse))}.yst-root .yst-pagination{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-pagination-display__text{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));font-weight:400;padding:.5rem .75rem}.yst-root .yst-pagination-display__current-text{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity));font-weight:600}.yst-root .yst-pagination-display__truncated{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));align-self:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;font-size:.8125rem;font-weight:600;padding:.5rem 1rem}.yst-root .yst-pagination__button{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;padding:.5rem;position:relative}.yst-root .yst-pagination__button:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.yst-root .yst-pagination__button:focus{outline-color:#a61e69;outline-offset:0;z-index:20}.yst-root .yst-pagination__button--active{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:rgb(166 30 105/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(255 255 255/var(--tw-text-opacity));font-size:.8125rem;font-weight:600;z-index:10}.yst-root .yst-pagination__button--active:hover{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-pagination__button--active:focus{z-index:20}.yst-root .yst-pagination__button--active:focus-visible{border-radius:.125rem;outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root .yst-pagination__button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-pagination__button--disabled:hover{background-color:initial}.yst-root .yst-pagination__button--disabled:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio-group--inline-block .yst-radio-group__options{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.yst-root .yst-radio-group--disabled .yst-radio-group__description,.yst-root .yst-radio-group--disabled .yst-radio-group__label{opacity:.5}.yst-root .yst-radio-group--disabled .yst-radio-group__label{cursor:not-allowed}.yst-root .yst-radio-group__label{margin-bottom:.5rem}.yst-root .yst-radio-group__options{display:flex;flex-direction:column;gap:.5rem}.yst-root .yst-radio-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-select-field--disabled .yst-select-field__description,.yst-root .yst-select-field--disabled .yst-select-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select-field__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-select-field__description,.yst-root .yst-select-field__validation{margin-top:.5rem}.yst-root .yst-mobile-navigation__top{position:sticky;top:0;width:100%;z-index:50}.yst-root .yst-mobile-navigation__dialog{bottom:0;display:flex;right:0;position:fixed;left:0;top:0;z-index:50}.yst-root .yst-tag-field--disabled .yst-tag-field__description,.yst-root .yst-tag-field--disabled .yst-tag-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-field__description,.yst-root .yst-tag-field__validation{margin-top:.5rem}.yst-root .yst-text-field--disabled .yst-text-field__description,.yst-root .yst-text-field--disabled .yst-text-field__label{opacity:.5}.yst-root .yst-text-field--disabled .yst-text-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-text-field__label{cursor:default}.yst-root .yst-text-field__description,.yst-root .yst-text-field__validation{margin-top:.5rem}.yst-root .yst-textarea-field--disabled .yst-textarea-field__description,.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{opacity:.5}.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-textarea-field__label{cursor:default}.yst-root .yst-textarea-field__description,.yst-root .yst-textarea-field__validation{margin-top:.5rem}.yst-root .yst-toggle-field{display:flex;flex-direction:column;gap:.25rem}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{opacity:.5}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{cursor:not-allowed}.yst-root .yst-toggle-field__header{align-items:center;display:flex;flex-direction:row;gap:1.5rem;justify-content:space-between}.yst-root .yst-toggle-field__label-wrapper{align-items:center;display:flex;gap:.25rem}.yst-root .yst-toggle-field__description{margin-left:4.25rem}.yst-sr-only{clip:rect(0,0,0,0)!important;border-width:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.yst-pointer-events-none{pointer-events:none!important}.yst-invisible{visibility:hidden!important}.yst-fixed{position:fixed!important}.yst-absolute{position:absolute!important}.yst-relative{position:relative!important}.yst-sticky{position:sticky!important}.yst-inset-0{bottom:0!important;top:0!important}.yst-inset-0,.yst-inset-x-0{right:0!important;left:0!important}.yst-inset-y-0{bottom:0!important;top:0!important}.yst--left-3{right:-.75rem!important}.yst-top-0{top:0!important}.yst-right-0{left:0!important}.yst-bottom-12{bottom:3rem!important}.yst-top-2{top:.5rem!important}.yst-right-2{left:.5rem!important}.yst-bottom-0{bottom:0!important}.yst-top-1\/2{top:50%!important}.yst--right-\[6\.5px\]{left:-6.5px!important}.yst--top-\[6\.5px\]{top:-6.5px!important}.yst-left-4{right:1rem!important}.yst--bottom-6{bottom:-1.5rem!important}.yst-top-8{top:2rem!important}.yst-top-3\.5{top:.875rem!important}.yst-top-3{top:.75rem!important}.yst-left-0{right:0!important}.yst-z-30{z-index:30!important}.yst-z-40{z-index:40!important}.yst-z-10{z-index:10!important}.yst-z-20{z-index:20!important}.yst-order-last{order:9999!important}.yst-col-span-1{grid-column:span 1/span 1!important}.yst-m-0{margin:0!important}.yst--m-\[16px\]{margin:-16px!important}.yst--m-6{margin:-1.5rem!important}.yst-my-auto{margin-bottom:auto!important;margin-top:auto!important}.yst-mx-auto{margin-right:auto!important;margin-left:auto!important}.yst-my-4{margin-bottom:1rem!important;margin-top:1rem!important}.yst-my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.yst-my-6{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.yst-my-12{margin-bottom:3rem!important;margin-top:3rem!important}.yst-my-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.yst-my-8{margin-bottom:2rem!important;margin-top:2rem!important}.yst--mx-6{margin-right:-1.5rem!important;margin-left:-1.5rem!important}.yst-mx-1\.5{margin-right:.375rem!important;margin-left:.375rem!important}.yst-mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.yst-mx-0{margin-right:0!important;margin-left:0!important}.yst-mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.yst-my-0{margin-bottom:0!important;margin-top:0!important}.yst-my-16{margin-bottom:4rem!important;margin-top:4rem!important}.yst--ml-1{margin-right:-.25rem!important}.yst-mt-6{margin-top:1.5rem!important}.yst-mt-1\.5{margin-top:.375rem!important}.yst-mt-1{margin-top:.25rem!important}.yst-ml-8{margin-right:2rem!important}.yst--mr-14{margin-left:-3.5rem!important}.yst-mb-2{margin-bottom:.5rem!important}.yst-mr-4{margin-left:1rem!important}.yst-mr-2{margin-left:.5rem!important}.yst-mb-px{margin-bottom:1px!important}.yst-ml-4{margin-right:1rem!important}.yst-mb-16{margin-bottom:4rem!important}.yst-mt-auto{margin-top:auto!important}.yst-ml-3{margin-right:.75rem!important}.yst-mr-1{margin-left:.25rem!important}.yst-mr-5{margin-left:1.25rem!important}.yst-mb-8{margin-bottom:2rem!important}.yst-mt-3{margin-top:.75rem!important}.yst-ml-1{margin-right:.25rem!important}.yst--mr-1{margin-left:-.25rem!important}.yst--mb-\[1em\]{margin-bottom:-1em!important}.yst--ml-0\.5{margin-right:-.125rem!important}.yst--ml-0{margin-right:0!important}.yst-ml-auto{margin-right:auto!important}.yst-mt-2{margin-top:.5rem!important}.yst-mt-4{margin-top:1rem!important}.yst-mb-5{margin-bottom:1.25rem!important}.yst-mb-6{margin-bottom:1.5rem!important}.yst-mt-8{margin-top:2rem!important}.yst-mt-12{margin-top:3rem!important}.yst-mb-3{margin-bottom:.75rem!important}.yst-ml-1\.5{margin-right:.375rem!important}.yst-mr-6{margin-left:1.5rem!important}.yst--ml-px{margin-right:-1px!important}.yst-ml-12{margin-right:3rem!important}.yst-mb-0{margin-bottom:0!important}.yst--mt-6{margin-top:-1.5rem!important}.yst-mb-4{margin-bottom:1rem!important}.yst-ml-2{margin-right:.5rem!important}.yst-mr-3{margin-left:.75rem!important}.yst-mt-7{margin-top:1.75rem!important}.yst-mt-10{margin-top:2.5rem!important}.yst-mt-\[-2\.6rem\]{margin-top:-2.6rem!important}.yst-mt-\[18px\]{margin-top:18px!important}.yst-mb-1{margin-bottom:.25rem!important}.yst-mr-8{margin-left:2rem!important}.yst--mt-4{margin-top:-1rem!important}.yst-mb-24{margin-bottom:6rem!important}.yst-mt-\[27\.5px\]{margin-top:27.5px!important}.yst-mt-5{margin-top:1.25rem!important}.yst-mt-0{margin-top:0!important}.yst-block{display:block!important}.yst-inline-block{display:inline-block!important}.yst-inline{display:inline!important}.yst-flex{display:flex!important}.yst-inline-flex{display:inline-flex!important}.yst-grid{display:grid!important}.yst-hidden{display:none!important}.yst-h-5{height:1.25rem!important}.yst-h-6{height:1.5rem!important}.yst-h-4{height:1rem!important}.yst-h-12{height:3rem!important}.yst-h-0{height:0!important}.yst-h-full{height:100%!important}.yst-h-16{height:4rem!important}.yst-h-7{height:1.75rem!important}.yst-h-3{height:.75rem!important}.yst-h-8{height:2rem!important}.yst-h-\[90vh\]{height:90vh!important}.yst-h-4\/5{height:80%!important}.yst-h-20{height:5rem!important}.yst-h-\[120px\]{height:120px!important}.yst-h-auto{height:auto!important}.yst-h-9{height:2.25rem!important}.yst-h-2\.5{height:.625rem!important}.yst-h-2{height:.5rem!important}.yst-h-24{height:6rem!important}.yst-h-48{height:12rem!important}.yst-h-96{height:24rem!important}.yst-h-\[45px\]{height:45px!important}.yst-h-14{height:3.5rem!important}.yst-h-28{height:7rem!important}.yst-max-h-\[calc\(90vh-10rem\)\]{max-height:calc(90vh - 10rem)!important}.yst-max-h-60{max-height:15rem!important}.yst-min-h-full{min-height:100%!important}.yst-w-5{width:1.25rem!important}.yst-w-6{width:1.5rem!important}.yst-w-0{width:0!important}.yst-w-full{width:100%!important}.yst-w-4{width:1rem!important}.yst-w-12{width:3rem!important}.yst-w-2{width:.5rem!important}.yst-w-3{width:.75rem!important}.yst-w-8{width:2rem!important}.yst-w-\[350px\]{width:350px!important}.yst-w-20{width:5rem!important}.yst-w-\[150px\]{width:150px!important}.yst-w-\[3px\]{width:3px!important}.yst-w-40{width:10rem!important}.yst-w-56{width:14rem!important}.yst-w-2\.5{width:.625rem!important}.yst-w-0\.5{width:.125rem!important}.yst-w-48{width:12rem!important}.yst-w-96{width:24rem!important}.yst-w-3\/5{width:60%!important}.yst-w-16{width:4rem!important}.yst-w-14{width:3.5rem!important}.yst-w-\[463px\]{width:463px!important}.yst-w-24{width:6rem!important}.yst-min-w-full{min-width:100%!important}.yst-min-w-0{min-width:0!important}.yst-max-w-xs{max-width:20rem!important}.yst-max-w-sm{max-width:24rem!important}.yst-max-w-screen-sm{max-width:640px!important}.yst-max-w-6xl{max-width:72rem!important}.yst-max-w-lg{max-width:32rem!important}.yst-max-w-\[715px\]{max-width:715px!important}.yst-max-w-none{max-width:none!important}.yst-max-w-full{max-width:100%!important}.yst-max-w-5xl{max-width:64rem!important}.yst-max-w-2xl{max-width:42rem!important}.yst-max-w-\[500px\]{max-width:500px!important}.yst-flex-1{flex:1 1 0%!important}.yst-flex-none{flex:none!important}.yst-flex-shrink-0,.yst-shrink-0{flex-shrink:0!important}.yst-flex-grow,.yst-grow{flex-grow:1!important}.yst-origin-top{transform-origin:top!important}.yst-translate-y-4{--tw-translate-y:1rem!important}.yst-translate-y-0,.yst-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-translate-y-0{--tw-translate-y:0px!important}.yst-translate-y-full{--tw-translate-y:100%!important}.yst--translate-y-full,.yst-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst--translate-y-full{--tw-translate-y:-100%!important}.yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.yst-scale-100,.yst-scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important}.yst-scale-y-0{--tw-scale-y:0!important}.yst-scale-y-0,.yst-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@keyframes yst-spin{to{transform:rotate(-1turn)}}.yst-animate-spin{animation:yst-spin 1s linear infinite!important}.yst-cursor-wait{cursor:wait!important}.yst-cursor-not-allowed{cursor:not-allowed!important}.yst-cursor-default{cursor:default!important}.yst-select-none{-webkit-user-select:none!important;user-select:none!important}.yst-scroll-pt-11{scroll-padding-top:2.75rem!important}.yst-scroll-pb-2{scroll-padding-bottom:.5rem!important}.yst-list-outside{list-style-position:outside!important}.yst-list-disc{list-style-type:disc!important}.yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.yst-flex-row{flex-direction:row!important}.yst-flex-col{flex-direction:column!important}.yst-flex-wrap{flex-wrap:wrap!important}.yst-content-between{align-content:space-between!important}.yst-items-start{align-items:flex-start!important}.yst-items-center{align-items:center!important}.yst-justify-center{justify-content:center!important}.yst-justify-between{justify-content:space-between!important}.yst-gap-2{gap:.5rem!important}.yst-gap-3{gap:.75rem!important}.yst-gap-8{gap:2rem!important}.yst-gap-6{gap:1.5rem!important}.yst-gap-1\.5{gap:.375rem!important}.yst-gap-1{gap:.25rem!important}.yst-gap-4{gap:1rem!important}.yst-gap-x-6{column-gap:1.5rem!important}.yst-gap-y-2{row-gap:.5rem!important}.yst-gap-x-4{column-gap:1rem!important}.yst-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-right:calc(2rem*(1 - var(--tw-space-x-reverse)))!important;margin-left:calc(2rem*var(--tw-space-x-reverse))!important}.yst-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(2rem*var(--tw-space-y-reverse))!important;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.25rem*var(--tw-space-y-reverse))!important;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-right:calc(.5rem*(1 - var(--tw-space-x-reverse)))!important;margin-left:calc(.5rem*var(--tw-space-x-reverse))!important}.yst-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.75rem*var(--tw-space-y-reverse))!important;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-right:calc(.75rem*(1 - var(--tw-space-x-reverse)))!important;margin-left:calc(.75rem*var(--tw-space-x-reverse))!important}.yst-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1rem*var(--tw-space-y-reverse))!important;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))!important}.yst-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.yst-divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(229 231 235/var(--tw-divide-opacity))!important}.yst-divide-slate-300>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(203 213 225/var(--tw-divide-opacity))!important}.yst-self-start{align-self:flex-start!important}.yst-self-end{align-self:flex-end!important}.yst-self-center{align-self:center!important}.yst-overflow-auto{overflow:auto!important}.yst-overflow-hidden{overflow:hidden!important}.yst-overflow-y-auto{overflow-y:auto!important}.yst-overflow-x-scroll{overflow-x:scroll!important}.yst-truncate{overflow:hidden!important;white-space:nowrap!important}.yst-overflow-ellipsis,.yst-text-ellipsis,.yst-truncate{text-overflow:ellipsis!important}.yst-whitespace-nowrap{white-space:nowrap!important}.yst-whitespace-pre-line{white-space:pre-line!important}.yst-rounded-md{border-radius:.375rem!important}.yst-rounded-full{border-radius:9999px!important}.yst-rounded-lg{border-radius:.5rem!important}.yst-rounded-3xl{border-radius:1.5rem!important}.yst-rounded-none{border-radius:0!important}.yst-rounded-xl{border-radius:.75rem!important}.yst-rounded-l-md{border-bottom-right-radius:.375rem!important;border-top-right-radius:.375rem!important}.yst-rounded-r-md{border-bottom-left-radius:.375rem!important;border-top-left-radius:.375rem!important}.yst-rounded-t-lg{border-top-right-radius:.5rem!important;border-top-left-radius:.5rem!important}.yst-rounded-b-lg{border-bottom-right-radius:.5rem!important;border-bottom-left-radius:.5rem!important}.yst-rounded-br-none{border-bottom-left-radius:0!important}.yst-border{border-width:1px!important}.yst-border-2{border-width:2px!important}.yst-border-0{border-width:0!important}.yst-border-y{border-bottom-width:1px!important;border-top-width:1px!important}.yst-border-x-0{border-right-width:0!important;border-left-width:0!important}.yst-border-l{border-right-width:1px!important}.yst-border-b{border-bottom-width:1px!important}.yst-border-r{border-left-width:1px!important}.yst-border-t,.yst-border-t-\[1px\]{border-top-width:1px!important}.yst-border-solid{border-style:solid!important}.yst-border-dashed{border-style:dashed!important}.yst-border-none{border-style:none!important}.yst-border-slate-200{--tw-border-opacity:1!important;border-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-border-transparent{border-color:#0000!important}.yst-border-white{--tw-border-opacity:1!important;border-color:rgb(255 255 255/var(--tw-border-opacity))!important}.yst-border-amber-300{--tw-border-opacity:1!important;border-color:rgb(252 211 77/var(--tw-border-opacity))!important}.yst-border-slate-300{--tw-border-opacity:1!important;border-color:rgb(203 213 225/var(--tw-border-opacity))!important}.yst-border-primary-500{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.yst-border-slate-100{--tw-border-opacity:1!important;border-color:rgb(241 245 249/var(--tw-border-opacity))!important}.yst-border-primary-300{--tw-border-opacity:1!important;border-color:rgb(205 130 171/var(--tw-border-opacity))!important}.yst-border-red-300{--tw-border-opacity:1!important;border-color:rgb(252 165 165/var(--tw-border-opacity))!important}.yst-border-red-500{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity))!important}.yst-border-emerald-600{--tw-border-opacity:1!important;border-color:rgb(5 150 105/var(--tw-border-opacity))!important}.yst-border-r-slate-200{--tw-border-opacity:1!important;border-left-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-border-t-\[rgb\(0\,0\,0\,0\.2\)\]{border-top-color:#0003!important}.yst-bg-slate-600{--tw-bg-opacity:1!important;background-color:rgb(71 85 105/var(--tw-bg-opacity))!important}.yst-bg-slate-100{--tw-bg-opacity:1!important;background-color:rgb(241 245 249/var(--tw-bg-opacity))!important}.yst-bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.yst-bg-slate-200{--tw-bg-opacity:1!important;background-color:rgb(226 232 240/var(--tw-bg-opacity))!important}.yst-bg-slate-50{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.yst-bg-transparent{background-color:initial!important}.yst-bg-green-100{--tw-bg-opacity:1!important;background-color:rgb(220 252 231/var(--tw-bg-opacity))!important}.yst-bg-primary-500{--tw-bg-opacity:1!important;background-color:rgb(166 30 105/var(--tw-bg-opacity))!important}.yst-bg-black{--tw-bg-opacity:1!important;background-color:rgb(0 0 0/var(--tw-bg-opacity))!important}.yst-bg-slate-300{--tw-bg-opacity:1!important;background-color:rgb(203 213 225/var(--tw-bg-opacity))!important}.yst-bg-red-100{--tw-bg-opacity:1!important;background-color:rgb(254 226 226/var(--tw-bg-opacity))!important}.yst-bg-primary-600{--tw-bg-opacity:1!important;background-color:rgb(154 22 96/var(--tw-bg-opacity))!important}.yst-bg-blue-100{--tw-bg-opacity:1!important;background-color:rgb(219 234 254/var(--tw-bg-opacity))!important}.yst-bg-yellow-100{--tw-bg-opacity:1!important;background-color:rgb(254 249 195/var(--tw-bg-opacity))!important}.yst-bg-primary-200{--tw-bg-opacity:1!important;background-color:rgb(224 179 204/var(--tw-bg-opacity))!important}.yst-bg-opacity-75{--tw-bg-opacity:0.75!important}.yst-stroke-3{stroke-width:3px!important}.yst-stroke-1{stroke-width:1!important}.yst-object-contain{object-fit:contain!important}.yst-object-cover{object-fit:cover!important}.yst-object-center{object-position:center!important}.yst-p-1{padding:.25rem!important}.yst-p-6{padding:1.5rem!important}.yst-p-4{padding:1rem!important}.yst-p-8{padding:2rem!important}.yst-p-0{padding:0!important}.yst-p-2\.5{padding:.625rem!important}.yst-p-2{padding:.5rem!important}.yst-p-3{padding:.75rem!important}.yst-px-4{padding-right:1rem!important;padding-left:1rem!important}.yst-px-3{padding-right:.75rem!important;padding-left:.75rem!important}.yst-py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.yst-py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.yst-px-2{padding-right:.5rem!important;padding-left:.5rem!important}.yst-py-4{padding-bottom:1rem!important;padding-top:1rem!important}.yst-px-6{padding-right:1.5rem!important;padding-left:1.5rem!important}.yst-py-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.yst-px-2\.5{padding-right:.625rem!important;padding-left:.625rem!important}.yst-py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.yst-px-0\.5{padding-right:.125rem!important;padding-left:.125rem!important}.yst-px-0{padding-right:0!important;padding-left:0!important}.yst-px-\[3px\]{padding-right:3px!important;padding-left:3px!important}.yst-py-\[3px\]{padding-bottom:3px!important;padding-top:3px!important}.yst-px-8{padding-right:2rem!important;padding-left:2rem!important}.yst-py-12{padding-bottom:3rem!important;padding-top:3rem!important}.yst-py-1\.5{padding-bottom:.375rem!important;padding-top:.375rem!important}.yst-px-11{padding-right:2.75rem!important;padding-left:2.75rem!important}.yst-px-10{padding-right:2.5rem!important;padding-left:2.5rem!important}.yst-pb-10{padding-bottom:2.5rem!important}.yst-pb-1{padding-bottom:.25rem!important}.yst-pt-1{padding-top:.25rem!important}.yst-pt-4{padding-top:1rem!important}.yst-pb-4{padding-bottom:1rem!important}.yst-pr-4{padding-left:1rem!important}.yst-pl-6{padding-right:1.5rem!important}.yst-pt-2{padding-top:.5rem!important}.yst-pl-\[1em\]{padding-right:1em!important}.yst-pb-6{padding-bottom:1.5rem!important}.yst-pb-8{padding-bottom:2rem!important}.yst-pt-6{padding-top:1.5rem!important}.yst-pl-2{padding-right:.5rem!important}.yst-pr-3{padding-left:.75rem!important}.yst-pb-2{padding-bottom:.5rem!important}.yst-pt-10{padding-top:2.5rem!important}.yst-pt-\[56\.25\%\]{padding-top:56.25%!important}.yst-pl-3{padding-right:.75rem!important}.yst-pr-2{padding-left:.5rem!important}.yst-pl-0{padding-right:0!important}.yst-pr-10{padding-left:2.5rem!important}.yst-pr-9{padding-left:2.25rem!important}.yst-text-left{text-align:right!important}.yst-text-center{text-align:center!important}.yst-align-middle{vertical-align:middle!important}.yst-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.yst-font-wp{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif!important}.yst-text-sm{font-size:.8125rem!important}.yst-text-4xl{font-size:2.25rem!important}.yst-text-2xl{font-size:1.5rem!important}.yst-text-base{font-size:1rem!important}.yst-text-tiny{font-size:.875rem!important}.yst-text-lg{font-size:1.125rem!important}.yst-text-xs{font-size:.75rem!important}.yst-text-xl{font-size:1.25rem!important}.yst-text-\[10px\]{font-size:10px!important}.yst-text-xxs{font-size:.675rem!important}.yst-font-medium{font-weight:500!important}.yst-font-semibold{font-weight:600!important}.yst-font-extrabold{font-weight:800!important}.yst-font-bold{font-weight:700!important}.yst-font-\[650\]{font-weight:650!important}.yst-font-light{font-weight:300!important}.yst-font-normal{font-weight:400!important}.yst-uppercase{text-transform:uppercase!important}.yst-italic{font-style:italic!important}.yst-leading-10{line-height:2.5rem!important}.yst-leading-6{line-height:1.5rem!important}.yst-leading-8{line-height:2rem!important}.yst-leading-5{line-height:1.25rem!important}.yst-leading-normal{line-height:1.5!important}.yst-leading-\[normal\]{line-height:normal!important}.yst-leading-tight{line-height:1.25!important}.yst-leading-4{line-height:1rem!important}.yst-tracking-tight{letter-spacing:-.025em!important}.yst-tracking-wide{letter-spacing:.025em!important}.yst-text-slate-800{--tw-text-opacity:1!important;color:rgb(30 41 59/var(--tw-text-opacity))!important}.yst-text-slate-400{--tw-text-opacity:1!important;color:rgb(148 163 184/var(--tw-text-opacity))!important}.yst-text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.yst-text-slate-900{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.yst-text-slate-600{--tw-text-opacity:1!important;color:rgb(71 85 105/var(--tw-text-opacity))!important}.yst-text-primary-500{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.yst-text-gray-900{--tw-text-opacity:1!important;color:rgb(17 24 39/var(--tw-text-opacity))!important}.yst-text-gray-500{--tw-text-opacity:1!important;color:rgb(107 114 128/var(--tw-text-opacity))!important}.yst-text-green-600{--tw-text-opacity:1!important;color:rgb(22 163 74/var(--tw-text-opacity))!important}.yst-text-gray-400{--tw-text-opacity:1!important;color:rgb(156 163 175/var(--tw-text-opacity))!important}.yst-text-indigo-600{--tw-text-opacity:1!important;color:rgb(79 70 229/var(--tw-text-opacity))!important}.yst-text-\[\#555\]{--tw-text-opacity:1!important;color:rgb(85 85 85/var(--tw-text-opacity))!important}.yst-text-amber-300{--tw-text-opacity:1!important;color:rgb(252 211 77/var(--tw-text-opacity))!important}.yst-text-slate-700{--tw-text-opacity:1!important;color:rgb(51 65 85/var(--tw-text-opacity))!important}.yst-text-red-500{--tw-text-opacity:1!important;color:rgb(239 68 68/var(--tw-text-opacity))!important}.yst-text-green-400{--tw-text-opacity:1!important;color:rgb(74 222 128/var(--tw-text-opacity))!important}.yst-text-\[\#111827\]{--tw-text-opacity:1!important;color:rgb(17 24 39/var(--tw-text-opacity))!important}.yst-text-yellow-900{--tw-text-opacity:1!important;color:rgb(113 63 18/var(--tw-text-opacity))!important}.yst-text-amber-500{--tw-text-opacity:1!important;color:rgb(245 158 11/var(--tw-text-opacity))!important}.yst-text-amber-900{--tw-text-opacity:1!important;color:rgb(120 53 15/var(--tw-text-opacity))!important}.yst-text-red-600{--tw-text-opacity:1!important;color:rgb(220 38 38/var(--tw-text-opacity))!important}.yst-text-blue-500{--tw-text-opacity:1!important;color:rgb(59 130 246/var(--tw-text-opacity))!important}.yst-text-blue-800{--tw-text-opacity:1!important;color:rgb(30 64 175/var(--tw-text-opacity))!important}.yst-text-yellow-500{--tw-text-opacity:1!important;color:rgb(234 179 8/var(--tw-text-opacity))!important}.yst-text-yellow-800{--tw-text-opacity:1!important;color:rgb(133 77 14/var(--tw-text-opacity))!important}.yst-text-red-800{--tw-text-opacity:1!important;color:rgb(153 27 27/var(--tw-text-opacity))!important}.yst-text-emerald-600{--tw-text-opacity:1!important;color:rgb(5 150 105/var(--tw-text-opacity))!important}.yst-text-green-800{--tw-text-opacity:1!important;color:rgb(22 101 52/var(--tw-text-opacity))!important}.yst-text-red-900{--tw-text-opacity:1!important;color:rgb(127 29 29/var(--tw-text-opacity))!important}.yst-underline{-webkit-text-decoration-line:underline!important;text-decoration-line:underline!important}.yst-line-through{-webkit-text-decoration-line:line-through!important;text-decoration-line:line-through!important}.yst-no-underline{-webkit-text-decoration-line:none!important;text-decoration-line:none!important}.yst-subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}.yst-placeholder-slate-500::placeholder{--tw-placeholder-opacity:1!important;color:rgb(100 116 139/var(--tw-placeholder-opacity))!important}.yst-opacity-0{opacity:0!important}.yst-opacity-100{opacity:1!important}.yst-opacity-25{opacity:.25!important}.yst-opacity-75{opacity:.75!important}.yst-opacity-50{opacity:.5!important}.yst-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important}.yst-shadow,.yst-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important}.yst-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a!important;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)!important}.yst-shadow-md,.yst-shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a!important;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)!important}.yst-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}.yst-shadow-none,.yst-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important}.yst-shadow-amber-700\/30{--tw-shadow-color:#b453094d!important;--tw-shadow:var(--tw-shadow-colored)!important}.yst-outline-none{outline:2px solid #0000!important;outline-offset:2px!important}.yst-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.yst-ring-gray-200{--tw-ring-opacity:1!important;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))!important}.yst-ring-black{--tw-ring-opacity:1!important;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))!important}.yst-ring-opacity-5{--tw-ring-opacity:0.05!important}.yst-ring-offset-2{--tw-ring-offset-width:2px!important}.yst-ring-offset-primary-500{--tw-ring-offset-color:#a61e69!important}.yst-drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f)!important}.yst-drop-shadow-md,.yst-grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.yst-grayscale{--tw-grayscale:grayscale(100%)!important}.yst-filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.yst-transition-opacity{transition-duration:.15s!important;transition-property:opacity!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-all{transition-duration:.15s!important;transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-colors{transition-duration:.15s!important;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-transform{transition-duration:.15s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-\[width\]{transition-duration:.15s!important;transition-property:width!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-delay-200{transition-delay:.2s!important}.yst-delay-\[900ms\]{transition-delay:.9s!important}.yst-delay-100{transition-delay:.1s!important}.yst-duration-1000{transition-duration:1s!important}.yst-duration-200{transition-duration:.2s!important}.yst-duration-300{transition-duration:.3s!important}.yst-duration-100{transition-duration:.1s!important}.yst-duration-75{transition-duration:75ms!important}.yst-duration-150{transition-duration:.15s!important}.yst-duration-500{transition-duration:.5s!important}.yst-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.yst-ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}.yst-ease-linear{transition-timing-function:linear!important}.odd\:yst-bg-white:nth-child(odd){--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.even\:yst-bg-slate-50:nth-child(2n){--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.focus-within\:yst-border-primary-500:focus-within{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.focus-within\:yst-outline-none:focus-within{outline:2px solid #0000!important;outline-offset:2px!important}.focus-within\:yst-ring-1:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.focus-within\:yst-ring-primary-500:focus-within{--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important}.hover\:yst-bg-slate-50:hover{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.hover\:yst-bg-gray-50:hover{--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}.hover\:yst-bg-\[\#f0f0f0\]:hover{--tw-bg-opacity:1!important;background-color:rgb(240 240 240/var(--tw-bg-opacity))!important}.hover\:yst-bg-white:hover{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.hover\:yst-bg-primary-600:hover{--tw-bg-opacity:1!important;background-color:rgb(154 22 96/var(--tw-bg-opacity))!important}.hover\:yst-text-slate-900:hover{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.hover\:yst-text-slate-500:hover{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.hover\:yst-text-slate-800:hover{--tw-text-opacity:1!important;color:rgb(30 41 59/var(--tw-text-opacity))!important}.hover\:yst-text-white:hover{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.hover\:yst-text-primary-500:hover{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.hover\:yst-underline:hover{-webkit-text-decoration-line:underline!important;text-decoration-line:underline!important}.focus\:yst-border-primary-500:focus{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.focus\:yst-border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity))!important}.focus\:yst-border-emerald-600:focus{--tw-border-opacity:1!important;border-color:rgb(5 150 105/var(--tw-border-opacity))!important}.focus\:yst-bg-primary-600:focus{--tw-bg-opacity:1!important;background-color:rgb(154 22 96/var(--tw-bg-opacity))!important}.focus\:yst-text-white:focus{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.focus\:yst-text-primary-500:focus{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.focus\:yst-shadow-\[0_0_3px_rgba\(8\2c 74\2c 103\2c 0\.8\)\]:focus{--tw-shadow:0 0 3px #084a67cc!important;--tw-shadow-colored:0 0 3px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.focus\:yst-outline-none:focus{outline:2px solid #0000!important;outline-offset:2px!important}.focus\:yst-outline:focus{outline-style:solid!important}.focus\:yst-outline-\[1px\]:focus{outline-width:1px!important}.focus\:-yst-outline-offset-1:focus{outline-offset:-1px!important}.focus\:yst-outline-\[color\:\#0066cd\]:focus{outline-color:#0066cd!important}.focus\:yst-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-1:focus,.focus\:yst-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.focus\:yst-ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-inset:focus{--tw-ring-inset:inset!important}.focus\:yst-ring-primary-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important}.focus\:yst-ring-white:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))!important}.focus\:yst-ring-red-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))!important}.focus\:yst-ring-emerald-600:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(5 150 105/var(--tw-ring-opacity))!important}.focus\:yst-ring-offset-1:focus{--tw-ring-offset-width:1px!important}.focus\:yst-ring-offset-2:focus{--tw-ring-offset-width:2px!important}.focus\:yst-ring-offset-transparent:focus{--tw-ring-offset-color:#0000!important}.focus\:yst-ring-offset-primary-500:focus{--tw-ring-offset-color:#a61e69!important}.yst-group:hover .group-hover\:yst-bg-primary-500{--tw-bg-opacity:1!important;background-color:rgb(166 30 105/var(--tw-bg-opacity))!important}.yst-group:hover .group-hover\:yst-bg-primary-200{--tw-bg-opacity:1!important;background-color:rgb(224 179 204/var(--tw-bg-opacity))!important}.yst-group:hover .group-hover\:yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.yst-group:hover .group-hover\:yst-text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.yst-group:hover .group-hover\:yst-text-primary-800{--tw-text-opacity:1!important;color:rgb(131 8 78/var(--tw-text-opacity))!important}[dir=rtl] .rtl\:yst-rotate-180{--tw-rotate:180deg!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media not all and (min-width:640px){.max-sm\:yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}}@media (min-width:640px){.sm\:yst-mx-0{margin-right:0!important;margin-left:0!important}.sm\:yst-mb-0{margin-bottom:0!important}.sm\:yst-ml-3{margin-right:.75rem!important}.sm\:yst-mt-0{margin-top:0!important}.sm\:yst-ml-4{margin-right:1rem!important}.sm\:yst-flex{display:flex!important}.sm\:yst-h-10{height:2.5rem!important}.sm\:yst-w-auto{width:auto!important}.sm\:yst-w-10{width:2.5rem!important}.sm\:yst-translate-y-0{--tw-translate-y:0px!important}.sm\:yst-scale-95,.sm\:yst-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.sm\:yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.sm\:yst-flex-row-reverse{flex-direction:row-reverse!important}.sm\:yst-items-start{align-items:flex-start!important}.sm\:yst-text-left{text-align:right!important}.sm\:yst-text-sm{font-size:.8125rem!important}}@media (min-width:768px){.md\:yst-absolute{position:absolute!important}.md\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.md\:yst-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.md\:yst-flex-row{flex-direction:row!important}}@media (min-width:783px){.min-\[783px\]\:yst-block{display:block!important}.min-\[783px\]\:yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.min-\[783px\]\:yst-p-8{padding:2rem!important}}@media (min-width:1024px){.lg\:yst-col-span-2{grid-column:span 2/span 2!important}.lg\:yst-mt-0{margin-top:0!important}.lg\:yst-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.lg\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.lg\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.lg\:yst-gap-12{gap:3rem!important}}@media (min-width:1280px){.xl\:yst-fixed{position:fixed!important}.xl\:yst-right-8{left:2rem!important}.xl\:yst-col-span-2{grid-column:span 2/span 2!important}.xl\:yst-mb-0{margin-bottom:0!important}.xl\:yst-mt-0{margin-top:0!important}.xl\:yst-w-\[16rem\]{width:16rem!important}.xl\:yst-max-w-3xl{max-width:48rem!important}.xl\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.xl\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.xl\:yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.xl\:yst-gap-12{gap:3rem!important}.xl\:yst-pr-\[17\.5rem\]{padding-left:17.5rem!important}}@media (min-width:1536px){.\32xl\:yst-col-span-2{grid-column:span 2/span 2!important}.\32xl\:yst-mt-0{margin-top:0!important}.\32xl\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.\32xl\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.\32xl\:yst-gap-12{gap:3rem!important}}@media (min-width:1800px){.min-\[1800px\]\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340.css new file mode 100644 index 00000000..5eb2cf82 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2340.css @@ -0,0 +1 @@ +.yst-root *,.yst-root :after,.yst-root :before{border:0 solid #e5e7eb;box-sizing:border-box}.yst-root :after,.yst-root :before{--tw-content:""}.yst-root{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;margin:0;tab-size:4}.yst-root hr{border-top-width:1px;color:inherit;height:0}.yst-root abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6{font-size:inherit;font-weight:inherit}.yst-root a{color:inherit;text-decoration:inherit}.yst-root b,.yst-root strong{font-weight:bolder}.yst-root code,.yst-root kbd,.yst-root pre,.yst-root samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}.yst-root small{font-size:80%}.yst-root sub,.yst-root sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}.yst-root sub{bottom:-.25em}.yst-root sup{top:-.5em}.yst-root table{border-collapse:collapse;border-color:inherit;text-indent:0}.yst-root button,.yst-root input,.yst-root optgroup,.yst-root select,.yst-root textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}.yst-root button,.yst-root select{text-transform:none}.yst-root [type=button],.yst-root [type=reset],.yst-root [type=submit],.yst-root button{-webkit-appearance:button;background-color:initial;background-image:none}.yst-root :-moz-focusring{outline:auto}.yst-root :-moz-ui-invalid{box-shadow:none}.yst-root progress{vertical-align:initial}.yst-root ::-webkit-inner-spin-button,.yst-root ::-webkit-outer-spin-button{height:auto}.yst-root [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.yst-root ::-webkit-search-decoration{-webkit-appearance:none}.yst-root ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.yst-root summary{display:list-item}.yst-root blockquote,.yst-root dd,.yst-root dl,.yst-root figure,.yst-root h1,.yst-root h2,.yst-root h3,.yst-root h4,.yst-root h5,.yst-root h6,.yst-root hr,.yst-root p,.yst-root pre{margin:0}.yst-root fieldset{margin:0;padding:0}.yst-root legend{padding:0}.yst-root menu,.yst-root ol,.yst-root ul{list-style:none;margin:0;padding:0}.yst-root textarea{resize:vertical}.yst-root input::placeholder,.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root [role=button],.yst-root button{cursor:pointer}.yst-root :disabled{cursor:default}.yst-root audio,.yst-root canvas,.yst-root embed,.yst-root iframe,.yst-root img,.yst-root object,.yst-root svg,.yst-root video{display:block;vertical-align:middle}.yst-root img,.yst-root video{height:auto;max-width:100%}.yst-root [type=date],.yst-root [type=datetime-local],.yst-root [type=email],.yst-root [type=month],.yst-root [type=number],.yst-root [type=password],.yst-root [type=search],.yst-root [type=tel],.yst-root [type=text],.yst-root [type=time],.yst-root [type=url],.yst-root [type=week]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root [type=date]:focus,.yst-root [type=datetime-local]:focus,.yst-root [type=email]:focus,.yst-root [type=month]:focus,.yst-root [type=number]:focus,.yst-root [type=password]:focus,.yst-root [type=search]:focus,.yst-root [type=tel]:focus,.yst-root [type=text]:focus,.yst-root [type=time]:focus,.yst-root [type=url]:focus,.yst-root [type=week]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder{color:#6b7280;opacity:1}.yst-root [type=date]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=datetime-local]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=email]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=month]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=number]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=password]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=search]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=tel]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=text]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=time]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=url]::-webkit-datetime-edit-fields-wrapper,.yst-root [type=week]::-webkit-datetime-edit-fields-wrapper{padding:0}.yst-root [type=date]::-webkit-date-and-time-value,.yst-root [type=datetime-local]::-webkit-date-and-time-value,.yst-root [type=email]::-webkit-date-and-time-value,.yst-root [type=month]::-webkit-date-and-time-value,.yst-root [type=number]::-webkit-date-and-time-value,.yst-root [type=password]::-webkit-date-and-time-value,.yst-root [type=search]::-webkit-date-and-time-value,.yst-root [type=tel]::-webkit-date-and-time-value,.yst-root [type=text]::-webkit-date-and-time-value,.yst-root [type=time]::-webkit-date-and-time-value,.yst-root [type=url]::-webkit-date-and-time-value,.yst-root [type=week]::-webkit-date-and-time-value{min-height:1.5em}.yst-root [type=date]::-webkit-datetime-edit,.yst-root [type=date]::-webkit-datetime-edit-day-field,.yst-root [type=date]::-webkit-datetime-edit-hour-field,.yst-root [type=date]::-webkit-datetime-edit-meridiem-field,.yst-root [type=date]::-webkit-datetime-edit-millisecond-field,.yst-root [type=date]::-webkit-datetime-edit-minute-field,.yst-root [type=date]::-webkit-datetime-edit-month-field,.yst-root [type=date]::-webkit-datetime-edit-second-field,.yst-root [type=date]::-webkit-datetime-edit-year-field,.yst-root [type=datetime-local]::-webkit-datetime-edit,.yst-root [type=datetime-local]::-webkit-datetime-edit-day-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-hour-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-meridiem-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-millisecond-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-minute-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-month-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-second-field,.yst-root [type=datetime-local]::-webkit-datetime-edit-year-field,.yst-root [type=email]::-webkit-datetime-edit,.yst-root [type=email]::-webkit-datetime-edit-day-field,.yst-root [type=email]::-webkit-datetime-edit-hour-field,.yst-root [type=email]::-webkit-datetime-edit-meridiem-field,.yst-root [type=email]::-webkit-datetime-edit-millisecond-field,.yst-root [type=email]::-webkit-datetime-edit-minute-field,.yst-root [type=email]::-webkit-datetime-edit-month-field,.yst-root [type=email]::-webkit-datetime-edit-second-field,.yst-root [type=email]::-webkit-datetime-edit-year-field,.yst-root [type=month]::-webkit-datetime-edit,.yst-root [type=month]::-webkit-datetime-edit-day-field,.yst-root [type=month]::-webkit-datetime-edit-hour-field,.yst-root [type=month]::-webkit-datetime-edit-meridiem-field,.yst-root [type=month]::-webkit-datetime-edit-millisecond-field,.yst-root [type=month]::-webkit-datetime-edit-minute-field,.yst-root [type=month]::-webkit-datetime-edit-month-field,.yst-root [type=month]::-webkit-datetime-edit-second-field,.yst-root [type=month]::-webkit-datetime-edit-year-field,.yst-root [type=number]::-webkit-datetime-edit,.yst-root [type=number]::-webkit-datetime-edit-day-field,.yst-root [type=number]::-webkit-datetime-edit-hour-field,.yst-root [type=number]::-webkit-datetime-edit-meridiem-field,.yst-root [type=number]::-webkit-datetime-edit-millisecond-field,.yst-root [type=number]::-webkit-datetime-edit-minute-field,.yst-root [type=number]::-webkit-datetime-edit-month-field,.yst-root [type=number]::-webkit-datetime-edit-second-field,.yst-root [type=number]::-webkit-datetime-edit-year-field,.yst-root [type=password]::-webkit-datetime-edit,.yst-root [type=password]::-webkit-datetime-edit-day-field,.yst-root [type=password]::-webkit-datetime-edit-hour-field,.yst-root [type=password]::-webkit-datetime-edit-meridiem-field,.yst-root [type=password]::-webkit-datetime-edit-millisecond-field,.yst-root [type=password]::-webkit-datetime-edit-minute-field,.yst-root [type=password]::-webkit-datetime-edit-month-field,.yst-root [type=password]::-webkit-datetime-edit-second-field,.yst-root [type=password]::-webkit-datetime-edit-year-field,.yst-root [type=search]::-webkit-datetime-edit,.yst-root [type=search]::-webkit-datetime-edit-day-field,.yst-root [type=search]::-webkit-datetime-edit-hour-field,.yst-root [type=search]::-webkit-datetime-edit-meridiem-field,.yst-root [type=search]::-webkit-datetime-edit-millisecond-field,.yst-root [type=search]::-webkit-datetime-edit-minute-field,.yst-root [type=search]::-webkit-datetime-edit-month-field,.yst-root [type=search]::-webkit-datetime-edit-second-field,.yst-root [type=search]::-webkit-datetime-edit-year-field,.yst-root [type=tel]::-webkit-datetime-edit,.yst-root [type=tel]::-webkit-datetime-edit-day-field,.yst-root [type=tel]::-webkit-datetime-edit-hour-field,.yst-root [type=tel]::-webkit-datetime-edit-meridiem-field,.yst-root [type=tel]::-webkit-datetime-edit-millisecond-field,.yst-root [type=tel]::-webkit-datetime-edit-minute-field,.yst-root [type=tel]::-webkit-datetime-edit-month-field,.yst-root [type=tel]::-webkit-datetime-edit-second-field,.yst-root [type=tel]::-webkit-datetime-edit-year-field,.yst-root [type=text]::-webkit-datetime-edit,.yst-root [type=text]::-webkit-datetime-edit-day-field,.yst-root [type=text]::-webkit-datetime-edit-hour-field,.yst-root [type=text]::-webkit-datetime-edit-meridiem-field,.yst-root [type=text]::-webkit-datetime-edit-millisecond-field,.yst-root [type=text]::-webkit-datetime-edit-minute-field,.yst-root [type=text]::-webkit-datetime-edit-month-field,.yst-root [type=text]::-webkit-datetime-edit-second-field,.yst-root [type=text]::-webkit-datetime-edit-year-field,.yst-root [type=time]::-webkit-datetime-edit,.yst-root [type=time]::-webkit-datetime-edit-day-field,.yst-root [type=time]::-webkit-datetime-edit-hour-field,.yst-root [type=time]::-webkit-datetime-edit-meridiem-field,.yst-root [type=time]::-webkit-datetime-edit-millisecond-field,.yst-root [type=time]::-webkit-datetime-edit-minute-field,.yst-root [type=time]::-webkit-datetime-edit-month-field,.yst-root [type=time]::-webkit-datetime-edit-second-field,.yst-root [type=time]::-webkit-datetime-edit-year-field,.yst-root [type=url]::-webkit-datetime-edit,.yst-root [type=url]::-webkit-datetime-edit-day-field,.yst-root [type=url]::-webkit-datetime-edit-hour-field,.yst-root [type=url]::-webkit-datetime-edit-meridiem-field,.yst-root [type=url]::-webkit-datetime-edit-millisecond-field,.yst-root [type=url]::-webkit-datetime-edit-minute-field,.yst-root [type=url]::-webkit-datetime-edit-month-field,.yst-root [type=url]::-webkit-datetime-edit-second-field,.yst-root [type=url]::-webkit-datetime-edit-year-field,.yst-root [type=week]::-webkit-datetime-edit,.yst-root [type=week]::-webkit-datetime-edit-day-field,.yst-root [type=week]::-webkit-datetime-edit-hour-field,.yst-root [type=week]::-webkit-datetime-edit-meridiem-field,.yst-root [type=week]::-webkit-datetime-edit-millisecond-field,.yst-root [type=week]::-webkit-datetime-edit-minute-field,.yst-root [type=week]::-webkit-datetime-edit-month-field,.yst-root [type=week]::-webkit-datetime-edit-second-field,.yst-root [type=week]::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}.yst-root textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root textarea::placeholder{color:#6b7280;opacity:1}.yst-root select{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.yst-root select[multiple]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root select[multiple]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:0;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=checkbox]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:checked,.yst-root [type=checkbox]:checked:focus,.yst-root [type=checkbox]:checked:hover,.yst-root [type=checkbox]:indeterminate{background-color:currentColor;border-color:#0000}.yst-root [type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=checkbox]:indeterminate:focus,.yst-root [type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}.yst-root [type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-radius:100%;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}.yst-root [type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.yst-root [type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}.yst-root [type=radio]:checked,.yst-root [type=radio]:checked:focus,.yst-root [type=radio]:checked:hover{background-color:currentColor;border-color:#0000}.yst-root{--tw-text-opacity:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:rgb(71 85 105/var(--tw-text-opacity));font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.8125rem;font-weight:400;line-height:1.5}.yst-root a{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root a:visited{color:#a61e69}.yst-root a:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root a:hover:visited{color:#b94986}.yst-root a:focus{--tw-text-opacity:1;border-radius:.125rem;color:rgb(99 102 241/var(--tw-text-opacity));outline-color:#4f46e5;outline-offset:1px;outline-style:solid}.yst-root [type=date]::placeholder,.yst-root [type=datetime-local]::placeholder,.yst-root [type=email]::placeholder,.yst-root [type=month]::placeholder,.yst-root [type=number]::placeholder,.yst-root [type=password]::placeholder,.yst-root [type=search]::placeholder,.yst-root [type=tel]::placeholder,.yst-root [type=text]::placeholder,.yst-root [type=time]::placeholder,.yst-root [type=url]::placeholder,.yst-root [type=week]::placeholder,.yst-root textarea::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root svg path{stroke-width:inherit}.yst-root .yst-radio__input,.yst-root a:focus{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-radio__input{transition-property:none}.yst-root .yst-radio__input:checked:before{content:var(--tw-content);display:none}.yst-root .yst-modal{z-index:100000!important}.yst-root dd,.yst-root li{margin-bottom:0}.yst-root input[type=date],.yst-root input[type=datetime-local],.yst-root input[type=datetime],.yst-root input[type=email],.yst-root input[type=month],.yst-root input[type=number],.yst-root input[type=password],.yst-root input[type=search],.yst-root input[type=tel],.yst-root input[type=text],.yst-root input[type=time],.yst-root input[type=url],.yst-root input[type=week]{min-height:0}.yst-root input[type=checkbox]{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);min-height:0;min-width:0;transition-property:none}.yst-root input[type=checkbox]:before{--tw-content:none;content:var(--tw-content)}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.yst-root .yst-alert{border-radius:.375rem;display:flex;gap:.75rem;padding:1rem}.yst-root .yst-alert--info{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.yst-root .yst-alert--info .yst-alert__message{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.yst-root .yst-alert--warning{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.yst-root .yst-alert--warning .yst-alert__message{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.yst-root .yst-alert--success{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.yst-root .yst-alert--success .yst-alert__message{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.yst-root .yst-alert--error{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.yst-root .yst-alert--error .yst-alert__message{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.yst-root .yst-alert__icon{flex-grow:0;flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-autocomplete{position:relative}.yst-root .yst-autocomplete--error .yst-autocomplete__button{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity))}.yst-root .yst-autocomplete--error .yst-autocomplete__button:focus{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity));border-color:rgb(239 68 68/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete--error .yst-autocomplete__input::placeholder{--tw-placeholder-opacity:1;color:rgb(252 165 165/var(--tw-placeholder-opacity))}.yst-root .yst-autocomplete--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-autocomplete--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button{cursor:not-allowed}.yst-root .yst-autocomplete--disabled .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;padding-left:.75rem;padding-right:.75rem;width:100%}.yst-root .yst-autocomplete__button:focus-within{--tw-border-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;right:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-autocomplete__input{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem 2.5rem .5rem 0;width:100%}.yst-root .yst-autocomplete__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-autocomplete__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:20}.yst-root .yst-autocomplete__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-autocomplete__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-autocomplete__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-autocomplete__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-autocomplete__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-badge{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(219 234 254/var(--tw-bg-opacity));border-radius:9999px;color:rgb(30 64 175/var(--tw-text-opacity));display:inline-flex;font-size:.75rem;font-weight:500;line-height:1.25;padding:.125rem .5rem;vertical-align:middle;white-space:nowrap}.yst-root .yst-badge--info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity));color:rgb(30 58 138/var(--tw-text-opacity))}.yst-root .yst-badge--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-badge--plain{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(15 23 42/var(--tw-text-opacity))}.yst-root .yst-badge--small{font-size:.675rem}.yst-root .yst-badge--large{font-size:1rem;padding-left:.75rem;padding-right:.75rem}.yst-root .yst-button{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-color:#0000;align-items:center;border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);cursor:pointer;display:inline-flex;font-size:.8125rem;font-weight:500;justify-content:center;line-height:1.25rem;padding:.5rem .75rem;text-align:center;-webkit-text-decoration-line:none;text-decoration-line:none}.yst-root .yst-button:focus{outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root a.yst-button:focus{border-radius:.375rem}.yst-root .yst-button--primary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-color:#0000;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:visited{color:#fff}.yst-root .yst-button--primary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(143 15 87/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--primary:hover:visited{color:#fff}.yst-root .yst-button--primary:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--secondary{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:visited{color:#1e293b}.yst-root .yst-button--secondary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity));color:rgb(30 41 59/var(--tw-text-opacity))}.yst-root .yst-button--secondary:hover:visited{color:#1e293b}.yst-root .yst-button--secondary:focus{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--tertiary{--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:initial;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:visited{color:#83084e}.yst-root .yst-button--tertiary:hover{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity))}.yst-root .yst-button--tertiary:hover:visited{color:#83084e}.yst-root .yst-button--tertiary:focus{--tw-text-opacity:1;color:rgb(131 8 78/var(--tw-text-opacity));outline-color:#8f0f57}.yst-root .yst-button--error{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity));border-color:#0000;color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:visited{color:#fff}.yst-root .yst-button--error:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-button--error:hover:visited{color:#fff}.yst-root .yst-button--error:focus{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));outline-color:#dc2626}.yst-root .yst-button--upsell{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity));border-color:#0000;color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:visited{color:#78350f}.yst-root .yst-button--upsell:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity));color:rgb(120 53 15/var(--tw-text-opacity))}.yst-root .yst-button--upsell:hover:visited{color:#78350f}.yst-root .yst-button--upsell:focus{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity));outline-color:#fbbf24}.yst-root .yst-button--large{font-size:.875rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-button--extra-large{font-size:1rem;line-height:1.5rem;padding:.625rem .875rem}.yst-root .yst-button--small{font-size:.75rem;line-height:1rem;padding:.375rem .625rem}.yst-root .yst-button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-button--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-checkbox{align-items:center;display:flex}.yst-root .yst-checkbox--disabled .yst-checkbox__input,.yst-root .yst-checkbox--disabled .yst-checkbox__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.25rem;color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-checkbox__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-checkbox__label{margin-left:.75rem}.yst-root .yst-code{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;color:rgb(15 23 42/var(--tw-text-opacity));display:inline-block;font-size:.75rem;line-height:1.25;margin:0;padding:.25rem}.yst-root .yst-code--block{display:block;margin-bottom:.5rem;margin-top:.5rem;max-width:100%;overflow-x:auto;padding:.25rem .5rem;white-space:nowrap}.yst-root .yst-file-input{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border:2px dashed rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;padding:1.25rem 1.5rem 1.5rem;text-align:center;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:100%}.yst-root .yst-file-input.yst-is-drag-over{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(250 243 247/var(--tw-bg-opacity));border-color:rgb(205 130 171/var(--tw-border-opacity))}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__content{pointer-events:none}.yst-root .yst-file-input.yst-is-drag-over .yst-file-input__icon{--tw-translate-y:-0.5rem;--tw-text-opacity:1;color:rgb(185 73 134/var(--tw-text-opacity));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-file-input.yst-is-disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-file-input.yst-is-disabled .yst-file-input__select-label{cursor:not-allowed}.yst-root .yst-file-input__content{align-items:center;display:inline-flex;flex-direction:column;max-width:20rem}.yst-root .yst-file-input__content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-input__content{text-align:center}.yst-root .yst-file-input__icon{stroke-width:1;--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:3rem;margin-left:auto;margin-right:auto;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:3rem}.yst-root .yst-file-input__icon>path{stroke-width:1}.yst-root .yst-file-input__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-file-input__input:focus+.yst-file-input__select-label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-input__labels{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:inline-block;font-weight:400}.yst-root .yst-file-input__select-label{border-radius:.375rem;font-weight:500}[dir=rtl] .yst-root .yst-file-input__labels{flex-direction:row-reverse}.yst-root .yst-label{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;font-weight:500}.yst-root .yst-link{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity));cursor:pointer;-webkit-text-decoration-line:underline;text-decoration-line:underline}.yst-root .yst-link:visited{color:#a61e69}.yst-root .yst-link:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.yst-root .yst-link:hover:visited{color:#b94986}.yst-root .yst-link:focus{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity));--tw-ring-offset-width:1px;--tw-ring-offset-color:#0000;border-radius:.125rem;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(99 102 241/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-link--primary{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus,.yst-root .yst-link--primary:hover{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-link--primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(154 22 96/var(--tw-ring-opacity))}.yst-root .yst-link--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-link--error:focus,.yst-root .yst-link--error:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-link--error:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity))}.yst-root .yst-paper{--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:flex;flex-direction:column}.yst-root .yst-paper__header{border-bottom-width:1px;padding:2rem}.yst-root .yst-paper__content{flex-grow:1;padding:2rem}.yst-root .yst-progress-bar{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;display:block;overflow:hidden;width:100%}.yst-root .yst-progress-bar__progress{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));border-radius:9999px;display:block;height:.375rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:linear}.yst-root .yst-radio{align-items:center;display:flex}.yst-root .yst-radio--disabled .yst-radio__check,.yst-root .yst-radio--disabled .yst-radio__input,.yst-root .yst-radio--disabled .yst-radio__label{cursor:not-allowed;opacity:.5}.yst-root .yst-radio--disabled .yst-radio__check:focus,.yst-root .yst-radio--disabled .yst-radio__input:focus,.yst-root .yst-radio--disabled .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block{display:inline-flex}.yst-root .yst-radio--inline-block .yst-radio__input{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:#0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked+.yst-radio__content .yst-radio__check{visibility:visible}.yst-root .yst-radio--inline-block .yst-radio__input:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__input:checked:focus+.yst-radio__content .yst-radio__label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-offset-width:1px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-radio--inline-block .yst-radio__content{position:relative}.yst-root .yst-radio--inline-block .yst-radio__label{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer;display:flex;font-size:1rem;height:3.5rem;justify-content:center;margin-left:0;width:3.5rem}.yst-root .yst-radio--inline-block .yst-radio__label:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.yst-root .yst-radio--inline-block .yst-radio__label:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio--inline-block .yst-radio__check{--tw-text-opacity:1;color:rgb(154 22 96/var(--tw-text-opacity));height:1.25rem;position:absolute;right:.125rem;top:.125rem;visibility:hidden;width:1.25rem}.yst-root .yst-radio__input{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity));color:rgb(166 30 105/var(--tw-text-opacity));height:1rem;width:1rem}.yst-root .yst-radio__input:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-radio__label{margin-left:.75rem}.yst-root .yst-select{position:relative}.yst-root .yst-select--disabled .yst-select__button,.yst-root .yst-select--disabled .yst-select__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select__button{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;line-height:1.5rem;padding:.5rem .75rem;position:relative;text-align:left;width:100%}.yst-root .yst-select__button:focus{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__button-icon{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity));height:1.25rem;pointer-events:none;position:absolute;right:.625rem;top:.625rem;width:1.25rem}.yst-root .yst-select__options{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);font-size:.8125rem;margin-top:.25rem;max-height:15rem;overflow:auto;position:absolute;width:100%;z-index:10}.yst-root .yst-select__options:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-select__option{--tw-text-opacity:1;align-items:center;color:rgb(51 65 85/var(--tw-text-opacity));cursor:default;display:flex;justify-content:space-between;padding:.5rem .75rem;position:relative;-webkit-user-select:none;user-select:none}.yst-root .yst-select__option--active{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.yst-root .yst-select__option--selected{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(154 22 96/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.yst-root .yst-select__button-label,.yst-root .yst-select__option-label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yst-root .yst-select__option-check{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-shrink:0;height:1.25rem;width:1.25rem}.yst-root .yst-skeleton-loader{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:.25rem;display:block;height:auto;overflow:hidden;position:relative;width:-moz-fit-content;width:fit-content}.yst-root .yst-skeleton-loader:after{--tw-translate-x:-100%;animation:wave 2.5s linear .5s infinite;background:linear-gradient(90deg,#0000,#00000012,#0000);bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes wave{0%{transform:translateX(-100%)}50%,to{transform:translateX(100%)}}.yst-root .yst-tag-input{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(30 41 59/var(--tw-text-opacity));display:flex;flex-wrap:wrap;font-size:.8125rem;gap:.375rem;line-height:1.5rem;padding:.5rem .75rem}.yst-root .yst-tag-input::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.yst-root .yst-tag-input{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-tag-input,.yst-root .yst-tag-input:focus-within{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))}.yst-root .yst-tag-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-input--disabled:focus-within{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:rgb(203 213 225/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus,.yst-root .yst-tag-input--disabled .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag{cursor:not-allowed}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(148 163 184/var(--tw-text-opacity))}.yst-root .yst-tag-input--disabled .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input--disabled .yst-tag-input__input{cursor:not-allowed}.yst-root .yst-tag-input__tag{cursor:pointer;gap:.125rem;min-height:20px;padding-inline-end:.125rem}.yst-root .yst-tag-input__tag:hover{--tw-border-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));border-color:rgb(166 30 105/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-tag-input__tag:focus,.yst-root .yst-tag-input__tag:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__remove-tag{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(226 232 240/var(--tw-bg-opacity));border-radius:9999px;color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1rem;justify-content:center;width:1rem}.yst-root .yst-tag-input__remove-tag:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-tag-input__remove-tag:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-tag-input__input{border-style:none;display:inline-flex;flex:1 1 0%;font-size:.8125rem;margin:0;padding:0}.yst-root .yst-tag-input__input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-text-input:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-text-input--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-text-input--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-text-input--read-only{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;background-color:rgb(248 250 252/var(--tw-bg-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(100 116 139/var(--tw-text-opacity));cursor:default}.yst-root .yst-textarea{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;border-width:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(30 41 59/var(--tw-text-opacity));font-size:.8125rem;padding:.5rem .75rem;width:100%}.yst-root .yst-textarea:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-textarea--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-textarea--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-title{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity));font-weight:500;line-height:1.25}.yst-root .yst-title--1{font-size:1.5rem}.yst-root .yst-title--2{font-size:1.125rem}.yst-root .yst-title--3{font-size:.875rem}.yst-root .yst-title--4{font-size:1rem}.yst-root .yst-title--5{font-size:.8125rem}.yst-root .yst-toast{--tw-bg-opacity:1;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);max-width:100%;overflow-y:auto;padding:1rem;pointer-events:auto;width:20rem;z-index:20}.yst-root .yst-toast--large{width:24rem}.yst-root .yst-toggle{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity));border-color:#0000;border-radius:9999px;border-width:2px;cursor:pointer;display:inline-flex;flex-shrink:0;height:1.5rem;position:relative;transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2.75rem}.yst-root .yst-toggle:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-toggle--checked{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-toggle--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-toggle--disabled:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-toggle__handle{--tw-translate-x:0px;--tw-bg-opacity:1;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);align-items:center;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:9999px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;height:1.25rem;justify-content:center;pointer-events:none;position:relative;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.2s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);width:1.25rem}.yst-root .yst-toggle__icon{stroke:currentColor;stroke-width:2;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));flex-grow:0;flex-shrink:0;height:.625rem;transition-duration:.1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);width:.625rem}.yst-root .yst-toggle__icon--check{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity))}.yst-root .yst-toggle__icon--x{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}[dir=rtl] .yst-root .yst-toggle--checked .yst-toggle__handle{--tw-translate-x:-1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity));border-radius:.5rem;color:rgb(255 255 255/var(--tw-text-opacity));display:inline-block;font-size:.75rem;max-width:24rem;padding:.5rem .625rem;position:absolute;white-space:normal;width:max-content;z-index:10}.yst-root .yst-tooltip--top{--tw-translate-x:-50%;--tw-translate-y:-100%;left:50%;margin-top:-.75rem;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--top:before{--tw-translate-x:-50%;--tw-translate-y:0px;--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-left-color:#0000;border-right-color:#0000;border-top-color:rgb(31 41 55/var(--tw-border-opacity));border-width:8px;content:var(--tw-content);position:absolute}.yst-root .yst-tooltip--bottom,.yst-root .yst-tooltip--top:before{left:50%;top:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--bottom{--tw-translate-x:-50%;--tw-translate-y:-0px;margin-top:.75rem}.yst-root .yst-tooltip--bottom:before{--tw-translate-x:-50%;--tw-border-opacity:1;--tw-content:"";border-bottom-color:rgb(31 41 55/var(--tw-border-opacity));border-left-color:#0000;border-right-color:#0000;border-top-color:#0000;border-width:8px;bottom:100%;content:var(--tw-content);left:50%;position:absolute;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right{--tw-translate-x:-0px;left:100%;margin-left:.75rem}.yst-root .yst-tooltip--right,.yst-root .yst-tooltip--right:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--right:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-left-color:#0000;border-right-color:rgb(31 41 55/var(--tw-border-opacity));border-top-color:#0000;border-width:8px;content:var(--tw-content);position:absolute;right:100%}.yst-root .yst-tooltip--left{margin-right:.75rem;right:100%}.yst-root .yst-tooltip--left,.yst-root .yst-tooltip--left:before{--tw-translate-y:-50%;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.yst-root .yst-tooltip--left:before{--tw-border-opacity:1;--tw-content:"";border-bottom-color:#0000;border-left-color:rgb(31 41 55/var(--tw-border-opacity));border-right-color:#0000;border-top-color:#0000;border-width:8px;content:var(--tw-content);left:100%;position:absolute}.yst-root .yst-validation-icon{pointer-events:none}.yst-root .yst-validation-icon--success{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.yst-root .yst-validation-icon--info{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.yst-root .yst-validation-icon--warning{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.yst-root .yst-validation-icon--error{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.yst-root .yst-validation-input{position:relative}.yst-root .yst-validation-input--success .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--success .yst-validation-input__input:focus,.yst-root .yst-validation-input--success .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.yst-root .yst-validation-input--info .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--info .yst-validation-input__input:focus,.yst-root .yst-validation-input--info .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.yst-root .yst-validation-input--warning .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--warning .yst-validation-input__input:focus,.yst-root .yst-validation-input--warning .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity))}.yst-root .yst-validation-input--error .yst-validation-input__input{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity));padding-right:2.5rem}.yst-root .yst-validation-input--error .yst-validation-input__input:focus,.yst-root .yst-validation-input--error .yst-validation-input__input:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.yst-root .yst-validation-input__input:focus,.yst-root .yst-validation-input__input:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.yst-root .yst-validation-input__icon{height:1.25rem;position:absolute;right:.625rem;top:.6875rem;width:1.25rem}.yst-root .yst-validation-message a{color:inherit;font-weight:500}.yst-root .yst-validation-message a:visited:hover{color:inherit}.yst-root .yst-validation-message a:focus{--tw-ring-color:currentColor}.yst-root .yst-validation-message--success{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.yst-root .yst-validation-message--info{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.yst-root .yst-validation-message--warning{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity))}.yst-root .yst-validation-message--error{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.yst-root .yst-autocomplete-field__description,.yst-root .yst-autocomplete-field__validation{margin-top:.5rem}.yst-root .yst-card{display:flex;flex-direction:column;position:relative}.yst-root .yst-card>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-card{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);overflow:hidden;padding:1.5rem;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-card__header{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 244 246/var(--tw-bg-opacity));display:flex;height:6rem;justify-content:center;margin-left:-1.5rem;margin-right:-1.5rem;margin-top:-1.5rem;padding:1.5rem;position:relative}.yst-root .yst-card__content{flex-grow:1}.yst-root .yst-card__footer{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity));border-top-width:1px;padding-top:1.5rem}.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__description,.yst-root .yst-checkbox-group--disabled .yst-checkbox-group__label{cursor:not-allowed;opacity:.5}.yst-root .yst-checkbox-group__label{margin-bottom:.5rem}.yst-root .yst-checkbox-group__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-checkbox-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-feature-upsell{position:relative}.yst-root .yst-feature-upsell--default{--tw-grayscale:grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.yst-root .yst-feature-upsell--card{padding:1.5rem}.yst-root .yst-file-import>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-file-import__feedback{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(203 213 225/var(--tw-border-opacity));border-radius:.375rem;border-width:1px;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding:1rem}.yst-root .yst-file-import__feedback-header{align-items:flex-start;display:flex}.yst-root .yst-file-import__feedback-header>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.yst-root .yst-file-import__feedback-figure{--tw-bg-opacity:1;align-items:center;background-color:rgb(243 229 237/var(--tw-bg-opacity));border-radius:9999px;display:flex;height:2rem;justify-content:center;width:2rem}.yst-root .yst-file-import__feedback-figure>svg{--tw-text-opacity:1;color:rgb(166 30 105/var(--tw-text-opacity));height:1.25rem;width:1.25rem}.yst-root .yst-file-import__feedback-title{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity));display:block;font-weight:500;margin-bottom:.125rem;overflow-wrap:break-word}.yst-root .yst-file-import__feedback-description{display:block;font-size:.75rem;font-weight:500}.yst-root .yst-file-import__abort-button{--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgb(241 245 249/var(--tw-bg-opacity));border-radius:9999px;color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;flex-shrink:0;height:1.25rem;justify-content:center;width:1.25rem}.yst-root .yst-file-import__abort-button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));color:rgb(71 85 105/var(--tw-text-opacity))}.yst-root .yst-file-import__abort-button:focus{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px}.yst-root .yst-file-import__abort-button>svg{height:.75rem;width:.75rem}.yst-root .yst-file-import__abort-button>svg>path{stroke-width:3}.yst-root .yst-modal{bottom:0;left:0;padding:1rem;position:fixed;right:0;top:0;z-index:10}@media (min-width:640px){.yst-root .yst-modal{padding:2rem}}@media (min-width:768px){.yst-root .yst-modal{padding:5rem}}.yst-root .yst-modal__layout{display:flex;min-height:100%}.yst-root .yst-modal--center .yst-modal__layout{align-items:center;justify-content:center}.yst-root .yst-modal--top-center .yst-modal__layout{align-items:flex-start;justify-content:center}.yst-root .yst-modal__overlay{--tw-bg-opacity:0.75;background-color:rgb(100 116 139/var(--tw-bg-opacity));bottom:0;left:0;position:fixed;right:0;top:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.yst-root .yst-modal__panel{--tw-bg-opacity:1;--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);max-width:36rem;overflow:hidden;padding:1.5rem;position:relative;width:100%}.yst-root .yst-modal__close{display:block;position:absolute;right:1rem;top:1rem}.yst-root .yst-modal__close-button{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));border-radius:.375rem;color:rgb(148 163 184/var(--tw-text-opacity));position:relative;z-index:10}.yst-root .yst-modal__close-button:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.yst-root .yst-modal__close-button:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity));--tw-ring-offset-width:2px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline:2px solid #0000;outline-offset:2px}.yst-root .yst-modal__container{display:flex;flex-direction:column;max-height:calc(100vh - 2rem)}@media (min-width:640px){.yst-root .yst-modal__container{max-height:calc(100vh - 4rem)}}@media (min-width:768px){.yst-root .yst-modal__container{max-height:calc(100vh - 10rem)}}.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 5rem)}@media (min-width:640px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 7rem)}}@media (min-width:768px){.yst-root .yst-modal__panel .yst-modal__container{max-height:calc(100vh - 13rem)}}.yst-root .yst-modal__container-footer,.yst-root .yst-modal__container-header{flex-shrink:0}.yst-root .yst-modal__container-content{overflow:auto}.yst-root .yst-modal__panel .yst-modal__container-content{margin-left:-1.5rem;margin-right:-1.5rem;padding-left:1.5rem;padding-right:1.5rem}.yst-root .yst-notifications{display:flex;flex-direction:column;max-height:calc(100vh - 4rem);max-width:calc(100vw - 4rem);pointer-events:none;position:fixed;width:100%;z-index:20}.yst-root .yst-notifications>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.yst-root .yst-notifications--bottom-center{align-items:center;bottom:2rem}.yst-root .yst-notifications--bottom-left{bottom:2rem;left:2rem}.yst-root .yst-notifications--top-center{align-items:center;top:2rem}.yst-root .yst-notification--large{width:24rem}.yst-root .yst-notification__icon{height:1.25rem;width:1.25rem}.yst-root .yst-pagination{display:inline-flex;isolation:isolate}.yst-root .yst-pagination>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-right:calc(-1px*var(--tw-space-x-reverse))}.yst-root .yst-pagination{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.yst-root .yst-pagination-display__text{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));font-weight:400;padding:.5rem .75rem}.yst-root .yst-pagination-display__current-text{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity));font-weight:600}.yst-root .yst-pagination-display__truncated{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity));align-self:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(100 116 139/var(--tw-text-opacity));display:inline-flex;font-size:.8125rem;font-weight:600;padding:.5rem 1rem}.yst-root .yst-pagination__button{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-inset:inset;--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity));align-items:center;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(148 163 184/var(--tw-text-opacity));display:inline-flex;padding:.5rem;position:relative}.yst-root .yst-pagination__button:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.yst-root .yst-pagination__button:focus{outline-color:#a61e69;outline-offset:0;z-index:20}.yst-root .yst-pagination__button--active{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:rgb(166 30 105/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgb(255 255 255/var(--tw-text-opacity));font-size:.8125rem;font-weight:600;z-index:10}.yst-root .yst-pagination__button--active:hover{--tw-bg-opacity:1;background-color:rgb(166 30 105/var(--tw-bg-opacity))}.yst-root .yst-pagination__button--active:focus{z-index:20}.yst-root .yst-pagination__button--active:focus-visible{border-radius:.125rem;outline-color:#a61e69;outline-offset:2px;outline-style:solid;outline-width:2px}.yst-root .yst-pagination__button--disabled{cursor:not-allowed;opacity:.5}.yst-root .yst-pagination__button--disabled:hover{background-color:initial}.yst-root .yst-pagination__button--disabled:focus{outline:2px solid #0000;outline-offset:2px}.yst-root .yst-radio-group--inline-block .yst-radio-group__options{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.yst-root .yst-radio-group--disabled .yst-radio-group__description,.yst-root .yst-radio-group--disabled .yst-radio-group__label{opacity:.5}.yst-root .yst-radio-group--disabled .yst-radio-group__label{cursor:not-allowed}.yst-root .yst-radio-group__label{margin-bottom:.5rem}.yst-root .yst-radio-group__options{display:flex;flex-direction:column;gap:.5rem}.yst-root .yst-radio-group__description{margin-bottom:1rem;margin-top:-.5rem}.yst-root .yst-select-field--disabled .yst-select-field__description,.yst-root .yst-select-field--disabled .yst-select-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-select-field__options{display:flex;flex-direction:column;gap:.75rem}.yst-root .yst-select-field__description,.yst-root .yst-select-field__validation{margin-top:.5rem}.yst-root .yst-mobile-navigation__top{position:sticky;top:0;width:100%;z-index:50}.yst-root .yst-mobile-navigation__dialog{bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:50}.yst-root .yst-tag-field--disabled .yst-tag-field__description,.yst-root .yst-tag-field--disabled .yst-tag-field__label{cursor:not-allowed;opacity:.5}.yst-root .yst-tag-field__description,.yst-root .yst-tag-field__validation{margin-top:.5rem}.yst-root .yst-text-field--disabled .yst-text-field__description,.yst-root .yst-text-field--disabled .yst-text-field__label{opacity:.5}.yst-root .yst-text-field--disabled .yst-text-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-text-field__label{cursor:default}.yst-root .yst-text-field__description,.yst-root .yst-text-field__validation{margin-top:.5rem}.yst-root .yst-textarea-field--disabled .yst-textarea-field__description,.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{opacity:.5}.yst-root .yst-textarea-field--disabled .yst-textarea-field__label{cursor:not-allowed}.yst-root .yst-text-field--read-only .yst-textarea-field__label{cursor:default}.yst-root .yst-textarea-field__description,.yst-root .yst-textarea-field__validation{margin-top:.5rem}.yst-root .yst-toggle-field{display:flex;flex-direction:column;gap:.25rem}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{opacity:.5}.yst-root .yst-toggle-field--disabled .yst-toggle-field__description,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label,.yst-root .yst-toggle-field--disabled .yst-toggle-field__label-wrapper{cursor:not-allowed}.yst-root .yst-toggle-field__header{align-items:center;display:flex;flex-direction:row;gap:1.5rem;justify-content:space-between}.yst-root .yst-toggle-field__label-wrapper{align-items:center;display:flex;gap:.25rem}.yst-root .yst-toggle-field__description{margin-right:4.25rem}.yst-sr-only{clip:rect(0,0,0,0)!important;border-width:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.yst-pointer-events-none{pointer-events:none!important}.yst-invisible{visibility:hidden!important}.yst-fixed{position:fixed!important}.yst-absolute{position:absolute!important}.yst-relative{position:relative!important}.yst-sticky{position:sticky!important}.yst-inset-0{bottom:0!important;top:0!important}.yst-inset-0,.yst-inset-x-0{left:0!important;right:0!important}.yst-inset-y-0{bottom:0!important;top:0!important}.yst--left-3{left:-.75rem!important}.yst-top-0{top:0!important}.yst-right-0{right:0!important}.yst-bottom-12{bottom:3rem!important}.yst-top-2{top:.5rem!important}.yst-right-2{right:.5rem!important}.yst-bottom-0{bottom:0!important}.yst-top-1\/2{top:50%!important}.yst--right-\[6\.5px\]{right:-6.5px!important}.yst--top-\[6\.5px\]{top:-6.5px!important}.yst-left-4{left:1rem!important}.yst--bottom-6{bottom:-1.5rem!important}.yst-top-8{top:2rem!important}.yst-top-3\.5{top:.875rem!important}.yst-top-3{top:.75rem!important}.yst-left-0{left:0!important}.yst-z-30{z-index:30!important}.yst-z-40{z-index:40!important}.yst-z-10{z-index:10!important}.yst-z-20{z-index:20!important}.yst-order-last{order:9999!important}.yst-col-span-1{grid-column:span 1/span 1!important}.yst-m-0{margin:0!important}.yst--m-\[16px\]{margin:-16px!important}.yst--m-6{margin:-1.5rem!important}.yst-my-auto{margin-bottom:auto!important;margin-top:auto!important}.yst-mx-auto{margin-left:auto!important;margin-right:auto!important}.yst-my-4{margin-bottom:1rem!important;margin-top:1rem!important}.yst-my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.yst-my-6{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.yst-my-12{margin-bottom:3rem!important;margin-top:3rem!important}.yst-my-3{margin-bottom:.75rem!important;margin-top:.75rem!important}.yst-my-8{margin-bottom:2rem!important;margin-top:2rem!important}.yst--mx-6{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.yst-mx-1\.5{margin-left:.375rem!important;margin-right:.375rem!important}.yst-mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.yst-mx-0{margin-left:0!important;margin-right:0!important}.yst-mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.yst-my-0{margin-bottom:0!important;margin-top:0!important}.yst-my-16{margin-bottom:4rem!important;margin-top:4rem!important}.yst--ml-1{margin-left:-.25rem!important}.yst-mt-6{margin-top:1.5rem!important}.yst-mt-1\.5{margin-top:.375rem!important}.yst-mt-1{margin-top:.25rem!important}.yst-ml-8{margin-left:2rem!important}.yst--mr-14{margin-right:-3.5rem!important}.yst-mb-2{margin-bottom:.5rem!important}.yst-mr-4{margin-right:1rem!important}.yst-mr-2{margin-right:.5rem!important}.yst-mb-px{margin-bottom:1px!important}.yst-ml-4{margin-left:1rem!important}.yst-mb-16{margin-bottom:4rem!important}.yst-mt-auto{margin-top:auto!important}.yst-ml-3{margin-left:.75rem!important}.yst-mr-1{margin-right:.25rem!important}.yst-mr-5{margin-right:1.25rem!important}.yst-mb-8{margin-bottom:2rem!important}.yst-mt-3{margin-top:.75rem!important}.yst-ml-1{margin-left:.25rem!important}.yst--mr-1{margin-right:-.25rem!important}.yst--mb-\[1em\]{margin-bottom:-1em!important}.yst--ml-0\.5{margin-left:-.125rem!important}.yst--ml-0{margin-left:0!important}.yst-ml-auto{margin-left:auto!important}.yst-mt-2{margin-top:.5rem!important}.yst-mt-4{margin-top:1rem!important}.yst-mb-5{margin-bottom:1.25rem!important}.yst-mb-6{margin-bottom:1.5rem!important}.yst-mt-8{margin-top:2rem!important}.yst-mt-12{margin-top:3rem!important}.yst-mb-3{margin-bottom:.75rem!important}.yst-ml-1\.5{margin-left:.375rem!important}.yst-mr-6{margin-right:1.5rem!important}.yst--ml-px{margin-left:-1px!important}.yst-ml-12{margin-left:3rem!important}.yst-mb-0{margin-bottom:0!important}.yst--mt-6{margin-top:-1.5rem!important}.yst-mb-4{margin-bottom:1rem!important}.yst-ml-2{margin-left:.5rem!important}.yst-mr-3{margin-right:.75rem!important}.yst-mt-7{margin-top:1.75rem!important}.yst-mt-10{margin-top:2.5rem!important}.yst-mt-\[-2\.6rem\]{margin-top:-2.6rem!important}.yst-mt-\[18px\]{margin-top:18px!important}.yst-mb-1{margin-bottom:.25rem!important}.yst-mr-8{margin-right:2rem!important}.yst--mt-4{margin-top:-1rem!important}.yst-mb-24{margin-bottom:6rem!important}.yst-mt-\[27\.5px\]{margin-top:27.5px!important}.yst-mt-5{margin-top:1.25rem!important}.yst-mt-0{margin-top:0!important}.yst-block{display:block!important}.yst-inline-block{display:inline-block!important}.yst-inline{display:inline!important}.yst-flex{display:flex!important}.yst-inline-flex{display:inline-flex!important}.yst-grid{display:grid!important}.yst-hidden{display:none!important}.yst-h-5{height:1.25rem!important}.yst-h-6{height:1.5rem!important}.yst-h-4{height:1rem!important}.yst-h-12{height:3rem!important}.yst-h-0{height:0!important}.yst-h-full{height:100%!important}.yst-h-16{height:4rem!important}.yst-h-7{height:1.75rem!important}.yst-h-3{height:.75rem!important}.yst-h-8{height:2rem!important}.yst-h-\[90vh\]{height:90vh!important}.yst-h-4\/5{height:80%!important}.yst-h-20{height:5rem!important}.yst-h-\[120px\]{height:120px!important}.yst-h-auto{height:auto!important}.yst-h-9{height:2.25rem!important}.yst-h-2\.5{height:.625rem!important}.yst-h-2{height:.5rem!important}.yst-h-24{height:6rem!important}.yst-h-48{height:12rem!important}.yst-h-96{height:24rem!important}.yst-h-\[45px\]{height:45px!important}.yst-h-14{height:3.5rem!important}.yst-h-28{height:7rem!important}.yst-max-h-\[calc\(90vh-10rem\)\]{max-height:calc(90vh - 10rem)!important}.yst-max-h-60{max-height:15rem!important}.yst-min-h-full{min-height:100%!important}.yst-w-5{width:1.25rem!important}.yst-w-6{width:1.5rem!important}.yst-w-0{width:0!important}.yst-w-full{width:100%!important}.yst-w-4{width:1rem!important}.yst-w-12{width:3rem!important}.yst-w-2{width:.5rem!important}.yst-w-3{width:.75rem!important}.yst-w-8{width:2rem!important}.yst-w-\[350px\]{width:350px!important}.yst-w-20{width:5rem!important}.yst-w-\[150px\]{width:150px!important}.yst-w-\[3px\]{width:3px!important}.yst-w-40{width:10rem!important}.yst-w-56{width:14rem!important}.yst-w-2\.5{width:.625rem!important}.yst-w-0\.5{width:.125rem!important}.yst-w-48{width:12rem!important}.yst-w-96{width:24rem!important}.yst-w-3\/5{width:60%!important}.yst-w-16{width:4rem!important}.yst-w-14{width:3.5rem!important}.yst-w-\[463px\]{width:463px!important}.yst-w-24{width:6rem!important}.yst-min-w-full{min-width:100%!important}.yst-min-w-0{min-width:0!important}.yst-max-w-xs{max-width:20rem!important}.yst-max-w-sm{max-width:24rem!important}.yst-max-w-screen-sm{max-width:640px!important}.yst-max-w-6xl{max-width:72rem!important}.yst-max-w-lg{max-width:32rem!important}.yst-max-w-\[715px\]{max-width:715px!important}.yst-max-w-none{max-width:none!important}.yst-max-w-full{max-width:100%!important}.yst-max-w-5xl{max-width:64rem!important}.yst-max-w-2xl{max-width:42rem!important}.yst-max-w-\[500px\]{max-width:500px!important}.yst-flex-1{flex:1 1 0%!important}.yst-flex-none{flex:none!important}.yst-flex-shrink-0,.yst-shrink-0{flex-shrink:0!important}.yst-flex-grow,.yst-grow{flex-grow:1!important}.yst-origin-top{transform-origin:top!important}.yst-translate-y-4{--tw-translate-y:1rem!important}.yst-translate-y-0,.yst-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-translate-y-0{--tw-translate-y:0px!important}.yst-translate-y-full{--tw-translate-y:100%!important}.yst--translate-y-full,.yst-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst--translate-y-full{--tw-translate-y:-100%!important}.yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.yst-scale-100,.yst-scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important}.yst-scale-y-0{--tw-scale-y:0!important}.yst-scale-y-0,.yst-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@keyframes yst-spin{to{transform:rotate(1turn)}}.yst-animate-spin{animation:yst-spin 1s linear infinite!important}.yst-cursor-wait{cursor:wait!important}.yst-cursor-not-allowed{cursor:not-allowed!important}.yst-cursor-default{cursor:default!important}.yst-select-none{-webkit-user-select:none!important;user-select:none!important}.yst-scroll-pt-11{scroll-padding-top:2.75rem!important}.yst-scroll-pb-2{scroll-padding-bottom:.5rem!important}.yst-list-outside{list-style-position:outside!important}.yst-list-disc{list-style-type:disc!important}.yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.yst-flex-row{flex-direction:row!important}.yst-flex-col{flex-direction:column!important}.yst-flex-wrap{flex-wrap:wrap!important}.yst-content-between{align-content:space-between!important}.yst-items-start{align-items:flex-start!important}.yst-items-center{align-items:center!important}.yst-justify-center{justify-content:center!important}.yst-justify-between{justify-content:space-between!important}.yst-gap-2{gap:.5rem!important}.yst-gap-3{gap:.75rem!important}.yst-gap-8{gap:2rem!important}.yst-gap-6{gap:1.5rem!important}.yst-gap-1\.5{gap:.375rem!important}.yst-gap-1{gap:.25rem!important}.yst-gap-4{gap:1rem!important}.yst-gap-x-6{column-gap:1.5rem!important}.yst-gap-y-2{row-gap:.5rem!important}.yst-gap-x-4{column-gap:1rem!important}.yst-space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(2rem*var(--tw-space-x-reverse))!important}.yst-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(2rem*var(--tw-space-y-reverse))!important;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.25rem*var(--tw-space-y-reverse))!important;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.5rem*var(--tw-space-x-reverse))!important}.yst-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.75rem*var(--tw-space-y-reverse))!important;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0!important;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))!important;margin-right:calc(.75rem*var(--tw-space-x-reverse))!important}.yst-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(.5rem*var(--tw-space-y-reverse))!important;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))!important}.yst-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0!important;margin-bottom:calc(1rem*var(--tw-space-y-reverse))!important;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))!important}.yst-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0!important;border-bottom-width:calc(1px*var(--tw-divide-y-reverse))!important;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))!important}.yst-divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(229 231 235/var(--tw-divide-opacity))!important}.yst-divide-slate-300>:not([hidden])~:not([hidden]){--tw-divide-opacity:1!important;border-color:rgb(203 213 225/var(--tw-divide-opacity))!important}.yst-self-start{align-self:flex-start!important}.yst-self-end{align-self:flex-end!important}.yst-self-center{align-self:center!important}.yst-overflow-auto{overflow:auto!important}.yst-overflow-hidden{overflow:hidden!important}.yst-overflow-y-auto{overflow-y:auto!important}.yst-overflow-x-scroll{overflow-x:scroll!important}.yst-truncate{overflow:hidden!important;white-space:nowrap!important}.yst-overflow-ellipsis,.yst-text-ellipsis,.yst-truncate{text-overflow:ellipsis!important}.yst-whitespace-nowrap{white-space:nowrap!important}.yst-whitespace-pre-line{white-space:pre-line!important}.yst-rounded-md{border-radius:.375rem!important}.yst-rounded-full{border-radius:9999px!important}.yst-rounded-lg{border-radius:.5rem!important}.yst-rounded-3xl{border-radius:1.5rem!important}.yst-rounded-none{border-radius:0!important}.yst-rounded-xl{border-radius:.75rem!important}.yst-rounded-l-md{border-bottom-left-radius:.375rem!important;border-top-left-radius:.375rem!important}.yst-rounded-r-md{border-bottom-right-radius:.375rem!important;border-top-right-radius:.375rem!important}.yst-rounded-t-lg{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.yst-rounded-b-lg{border-bottom-left-radius:.5rem!important;border-bottom-right-radius:.5rem!important}.yst-rounded-br-none{border-bottom-right-radius:0!important}.yst-border{border-width:1px!important}.yst-border-2{border-width:2px!important}.yst-border-0{border-width:0!important}.yst-border-y{border-bottom-width:1px!important;border-top-width:1px!important}.yst-border-x-0{border-left-width:0!important;border-right-width:0!important}.yst-border-l{border-left-width:1px!important}.yst-border-b{border-bottom-width:1px!important}.yst-border-r{border-right-width:1px!important}.yst-border-t,.yst-border-t-\[1px\]{border-top-width:1px!important}.yst-border-solid{border-style:solid!important}.yst-border-dashed{border-style:dashed!important}.yst-border-none{border-style:none!important}.yst-border-slate-200{--tw-border-opacity:1!important;border-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-border-transparent{border-color:#0000!important}.yst-border-white{--tw-border-opacity:1!important;border-color:rgb(255 255 255/var(--tw-border-opacity))!important}.yst-border-amber-300{--tw-border-opacity:1!important;border-color:rgb(252 211 77/var(--tw-border-opacity))!important}.yst-border-slate-300{--tw-border-opacity:1!important;border-color:rgb(203 213 225/var(--tw-border-opacity))!important}.yst-border-primary-500{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.yst-border-slate-100{--tw-border-opacity:1!important;border-color:rgb(241 245 249/var(--tw-border-opacity))!important}.yst-border-primary-300{--tw-border-opacity:1!important;border-color:rgb(205 130 171/var(--tw-border-opacity))!important}.yst-border-red-300{--tw-border-opacity:1!important;border-color:rgb(252 165 165/var(--tw-border-opacity))!important}.yst-border-red-500{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity))!important}.yst-border-emerald-600{--tw-border-opacity:1!important;border-color:rgb(5 150 105/var(--tw-border-opacity))!important}.yst-border-r-slate-200{--tw-border-opacity:1!important;border-right-color:rgb(226 232 240/var(--tw-border-opacity))!important}.yst-border-t-\[rgb\(0\,0\,0\,0\.2\)\]{border-top-color:#0003!important}.yst-bg-slate-600{--tw-bg-opacity:1!important;background-color:rgb(71 85 105/var(--tw-bg-opacity))!important}.yst-bg-slate-100{--tw-bg-opacity:1!important;background-color:rgb(241 245 249/var(--tw-bg-opacity))!important}.yst-bg-white{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.yst-bg-slate-200{--tw-bg-opacity:1!important;background-color:rgb(226 232 240/var(--tw-bg-opacity))!important}.yst-bg-slate-50{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.yst-bg-transparent{background-color:initial!important}.yst-bg-green-100{--tw-bg-opacity:1!important;background-color:rgb(220 252 231/var(--tw-bg-opacity))!important}.yst-bg-primary-500{--tw-bg-opacity:1!important;background-color:rgb(166 30 105/var(--tw-bg-opacity))!important}.yst-bg-black{--tw-bg-opacity:1!important;background-color:rgb(0 0 0/var(--tw-bg-opacity))!important}.yst-bg-slate-300{--tw-bg-opacity:1!important;background-color:rgb(203 213 225/var(--tw-bg-opacity))!important}.yst-bg-red-100{--tw-bg-opacity:1!important;background-color:rgb(254 226 226/var(--tw-bg-opacity))!important}.yst-bg-primary-600{--tw-bg-opacity:1!important;background-color:rgb(154 22 96/var(--tw-bg-opacity))!important}.yst-bg-blue-100{--tw-bg-opacity:1!important;background-color:rgb(219 234 254/var(--tw-bg-opacity))!important}.yst-bg-yellow-100{--tw-bg-opacity:1!important;background-color:rgb(254 249 195/var(--tw-bg-opacity))!important}.yst-bg-primary-200{--tw-bg-opacity:1!important;background-color:rgb(224 179 204/var(--tw-bg-opacity))!important}.yst-bg-opacity-75{--tw-bg-opacity:0.75!important}.yst-stroke-3{stroke-width:3px!important}.yst-stroke-1{stroke-width:1!important}.yst-object-contain{object-fit:contain!important}.yst-object-cover{object-fit:cover!important}.yst-object-center{object-position:center!important}.yst-p-1{padding:.25rem!important}.yst-p-6{padding:1.5rem!important}.yst-p-4{padding:1rem!important}.yst-p-8{padding:2rem!important}.yst-p-0{padding:0!important}.yst-p-2\.5{padding:.625rem!important}.yst-p-2{padding:.5rem!important}.yst-p-3{padding:.75rem!important}.yst-px-4{padding-left:1rem!important;padding-right:1rem!important}.yst-px-3{padding-left:.75rem!important;padding-right:.75rem!important}.yst-py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.yst-py-6{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.yst-px-2{padding-left:.5rem!important;padding-right:.5rem!important}.yst-py-4{padding-bottom:1rem!important;padding-top:1rem!important}.yst-px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.yst-py-3{padding-bottom:.75rem!important;padding-top:.75rem!important}.yst-px-2\.5{padding-left:.625rem!important;padding-right:.625rem!important}.yst-py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.yst-px-0\.5{padding-left:.125rem!important;padding-right:.125rem!important}.yst-px-0{padding-left:0!important;padding-right:0!important}.yst-px-\[3px\]{padding-left:3px!important;padding-right:3px!important}.yst-py-\[3px\]{padding-bottom:3px!important;padding-top:3px!important}.yst-px-8{padding-left:2rem!important;padding-right:2rem!important}.yst-py-12{padding-bottom:3rem!important;padding-top:3rem!important}.yst-py-1\.5{padding-bottom:.375rem!important;padding-top:.375rem!important}.yst-px-11{padding-left:2.75rem!important;padding-right:2.75rem!important}.yst-px-10{padding-left:2.5rem!important;padding-right:2.5rem!important}.yst-pb-10{padding-bottom:2.5rem!important}.yst-pb-1{padding-bottom:.25rem!important}.yst-pt-1{padding-top:.25rem!important}.yst-pt-4{padding-top:1rem!important}.yst-pb-4{padding-bottom:1rem!important}.yst-pr-4{padding-right:1rem!important}.yst-pl-6{padding-left:1.5rem!important}.yst-pt-2{padding-top:.5rem!important}.yst-pl-\[1em\]{padding-left:1em!important}.yst-pb-6{padding-bottom:1.5rem!important}.yst-pb-8{padding-bottom:2rem!important}.yst-pt-6{padding-top:1.5rem!important}.yst-pl-2{padding-left:.5rem!important}.yst-pr-3{padding-right:.75rem!important}.yst-pb-2{padding-bottom:.5rem!important}.yst-pt-10{padding-top:2.5rem!important}.yst-pt-\[56\.25\%\]{padding-top:56.25%!important}.yst-pl-3{padding-left:.75rem!important}.yst-pr-2{padding-right:.5rem!important}.yst-pl-0{padding-left:0!important}.yst-pr-10{padding-right:2.5rem!important}.yst-pr-9{padding-right:2.25rem!important}.yst-text-left{text-align:left!important}.yst-text-center{text-align:center!important}.yst-align-middle{vertical-align:middle!important}.yst-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.yst-font-wp{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif!important}.yst-text-sm{font-size:.8125rem!important}.yst-text-4xl{font-size:2.25rem!important}.yst-text-2xl{font-size:1.5rem!important}.yst-text-base{font-size:1rem!important}.yst-text-tiny{font-size:.875rem!important}.yst-text-lg{font-size:1.125rem!important}.yst-text-xs{font-size:.75rem!important}.yst-text-xl{font-size:1.25rem!important}.yst-text-\[10px\]{font-size:10px!important}.yst-text-xxs{font-size:.675rem!important}.yst-font-medium{font-weight:500!important}.yst-font-semibold{font-weight:600!important}.yst-font-extrabold{font-weight:800!important}.yst-font-bold{font-weight:700!important}.yst-font-\[650\]{font-weight:650!important}.yst-font-light{font-weight:300!important}.yst-font-normal{font-weight:400!important}.yst-uppercase{text-transform:uppercase!important}.yst-italic{font-style:italic!important}.yst-leading-10{line-height:2.5rem!important}.yst-leading-6{line-height:1.5rem!important}.yst-leading-8{line-height:2rem!important}.yst-leading-5{line-height:1.25rem!important}.yst-leading-normal{line-height:1.5!important}.yst-leading-\[normal\]{line-height:normal!important}.yst-leading-tight{line-height:1.25!important}.yst-leading-4{line-height:1rem!important}.yst-tracking-tight{letter-spacing:-.025em!important}.yst-tracking-wide{letter-spacing:.025em!important}.yst-text-slate-800{--tw-text-opacity:1!important;color:rgb(30 41 59/var(--tw-text-opacity))!important}.yst-text-slate-400{--tw-text-opacity:1!important;color:rgb(148 163 184/var(--tw-text-opacity))!important}.yst-text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.yst-text-slate-900{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.yst-text-slate-600{--tw-text-opacity:1!important;color:rgb(71 85 105/var(--tw-text-opacity))!important}.yst-text-primary-500{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.yst-text-gray-900{--tw-text-opacity:1!important;color:rgb(17 24 39/var(--tw-text-opacity))!important}.yst-text-gray-500{--tw-text-opacity:1!important;color:rgb(107 114 128/var(--tw-text-opacity))!important}.yst-text-green-600{--tw-text-opacity:1!important;color:rgb(22 163 74/var(--tw-text-opacity))!important}.yst-text-gray-400{--tw-text-opacity:1!important;color:rgb(156 163 175/var(--tw-text-opacity))!important}.yst-text-indigo-600{--tw-text-opacity:1!important;color:rgb(79 70 229/var(--tw-text-opacity))!important}.yst-text-\[\#555\]{--tw-text-opacity:1!important;color:rgb(85 85 85/var(--tw-text-opacity))!important}.yst-text-amber-300{--tw-text-opacity:1!important;color:rgb(252 211 77/var(--tw-text-opacity))!important}.yst-text-slate-700{--tw-text-opacity:1!important;color:rgb(51 65 85/var(--tw-text-opacity))!important}.yst-text-red-500{--tw-text-opacity:1!important;color:rgb(239 68 68/var(--tw-text-opacity))!important}.yst-text-green-400{--tw-text-opacity:1!important;color:rgb(74 222 128/var(--tw-text-opacity))!important}.yst-text-\[\#111827\]{--tw-text-opacity:1!important;color:rgb(17 24 39/var(--tw-text-opacity))!important}.yst-text-yellow-900{--tw-text-opacity:1!important;color:rgb(113 63 18/var(--tw-text-opacity))!important}.yst-text-amber-500{--tw-text-opacity:1!important;color:rgb(245 158 11/var(--tw-text-opacity))!important}.yst-text-amber-900{--tw-text-opacity:1!important;color:rgb(120 53 15/var(--tw-text-opacity))!important}.yst-text-red-600{--tw-text-opacity:1!important;color:rgb(220 38 38/var(--tw-text-opacity))!important}.yst-text-blue-500{--tw-text-opacity:1!important;color:rgb(59 130 246/var(--tw-text-opacity))!important}.yst-text-blue-800{--tw-text-opacity:1!important;color:rgb(30 64 175/var(--tw-text-opacity))!important}.yst-text-yellow-500{--tw-text-opacity:1!important;color:rgb(234 179 8/var(--tw-text-opacity))!important}.yst-text-yellow-800{--tw-text-opacity:1!important;color:rgb(133 77 14/var(--tw-text-opacity))!important}.yst-text-red-800{--tw-text-opacity:1!important;color:rgb(153 27 27/var(--tw-text-opacity))!important}.yst-text-emerald-600{--tw-text-opacity:1!important;color:rgb(5 150 105/var(--tw-text-opacity))!important}.yst-text-green-800{--tw-text-opacity:1!important;color:rgb(22 101 52/var(--tw-text-opacity))!important}.yst-text-red-900{--tw-text-opacity:1!important;color:rgb(127 29 29/var(--tw-text-opacity))!important}.yst-underline{-webkit-text-decoration-line:underline!important;text-decoration-line:underline!important}.yst-line-through{-webkit-text-decoration-line:line-through!important;text-decoration-line:line-through!important}.yst-no-underline{-webkit-text-decoration-line:none!important;text-decoration-line:none!important}.yst-subpixel-antialiased{-webkit-font-smoothing:auto!important;-moz-osx-font-smoothing:auto!important}.yst-placeholder-slate-500::placeholder{--tw-placeholder-opacity:1!important;color:rgb(100 116 139/var(--tw-placeholder-opacity))!important}.yst-opacity-0{opacity:0!important}.yst-opacity-100{opacity:1!important}.yst-opacity-25{opacity:.25!important}.yst-opacity-75{opacity:.75!important}.yst-opacity-50{opacity:.5!important}.yst-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a!important;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)!important}.yst-shadow,.yst-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important}.yst-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a!important;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)!important}.yst-shadow-md,.yst-shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a!important;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)!important}.yst-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}.yst-shadow-none,.yst-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.yst-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important}.yst-shadow-amber-700\/30{--tw-shadow-color:#b453094d!important;--tw-shadow:var(--tw-shadow-colored)!important}.yst-outline-none{outline:2px solid #0000!important;outline-offset:2px!important}.yst-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.yst-ring-gray-200{--tw-ring-opacity:1!important;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))!important}.yst-ring-black{--tw-ring-opacity:1!important;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))!important}.yst-ring-opacity-5{--tw-ring-opacity:0.05!important}.yst-ring-offset-2{--tw-ring-offset-width:2px!important}.yst-ring-offset-primary-500{--tw-ring-offset-color:#a61e69!important}.yst-drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f)!important}.yst-drop-shadow-md,.yst-grayscale{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.yst-grayscale{--tw-grayscale:grayscale(100%)!important}.yst-filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.yst-transition-opacity{transition-duration:.15s!important;transition-property:opacity!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition{transition-duration:.15s!important;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-all{transition-duration:.15s!important;transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-colors{transition-duration:.15s!important;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-transform{transition-duration:.15s!important;transition-property:transform!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-transition-\[width\]{transition-duration:.15s!important;transition-property:width!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-delay-200{transition-delay:.2s!important}.yst-delay-\[900ms\]{transition-delay:.9s!important}.yst-delay-100{transition-delay:.1s!important}.yst-duration-1000{transition-duration:1s!important}.yst-duration-200{transition-duration:.2s!important}.yst-duration-300{transition-duration:.3s!important}.yst-duration-100{transition-duration:.1s!important}.yst-duration-75{transition-duration:75ms!important}.yst-duration-150{transition-duration:.15s!important}.yst-duration-500{transition-duration:.5s!important}.yst-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.yst-ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.yst-ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)!important}.yst-ease-linear{transition-timing-function:linear!important}.odd\:yst-bg-white:nth-child(odd){--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.even\:yst-bg-slate-50:nth-child(2n){--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.focus-within\:yst-border-primary-500:focus-within{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.focus-within\:yst-outline-none:focus-within{outline:2px solid #0000!important;outline-offset:2px!important}.focus-within\:yst-ring-1:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.focus-within\:yst-ring-primary-500:focus-within{--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important}.hover\:yst-bg-slate-50:hover{--tw-bg-opacity:1!important;background-color:rgb(248 250 252/var(--tw-bg-opacity))!important}.hover\:yst-bg-gray-50:hover{--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}.hover\:yst-bg-\[\#f0f0f0\]:hover{--tw-bg-opacity:1!important;background-color:rgb(240 240 240/var(--tw-bg-opacity))!important}.hover\:yst-bg-white:hover{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.hover\:yst-bg-primary-600:hover{--tw-bg-opacity:1!important;background-color:rgb(154 22 96/var(--tw-bg-opacity))!important}.hover\:yst-text-slate-900:hover{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.hover\:yst-text-slate-500:hover{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.hover\:yst-text-slate-800:hover{--tw-text-opacity:1!important;color:rgb(30 41 59/var(--tw-text-opacity))!important}.hover\:yst-text-white:hover{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.hover\:yst-text-primary-500:hover{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.hover\:yst-underline:hover{-webkit-text-decoration-line:underline!important;text-decoration-line:underline!important}.focus\:yst-border-primary-500:focus{--tw-border-opacity:1!important;border-color:rgb(166 30 105/var(--tw-border-opacity))!important}.focus\:yst-border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity))!important}.focus\:yst-border-emerald-600:focus{--tw-border-opacity:1!important;border-color:rgb(5 150 105/var(--tw-border-opacity))!important}.focus\:yst-bg-primary-600:focus{--tw-bg-opacity:1!important;background-color:rgb(154 22 96/var(--tw-bg-opacity))!important}.focus\:yst-text-white:focus{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.focus\:yst-text-primary-500:focus{--tw-text-opacity:1!important;color:rgb(166 30 105/var(--tw-text-opacity))!important}.focus\:yst-shadow-\[0_0_3px_rgba\(8\2c 74\2c 103\2c 0\.8\)\]:focus{--tw-shadow:0 0 3px #084a67cc!important;--tw-shadow-colored:0 0 3px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.focus\:yst-outline-none:focus{outline:2px solid #0000!important;outline-offset:2px!important}.focus\:yst-outline:focus{outline-style:solid!important}.focus\:yst-outline-\[1px\]:focus{outline-width:1px!important}.focus\:-yst-outline-offset-1:focus{outline-offset:-1px!important}.focus\:yst-outline-\[color\:\#0066cd\]:focus{outline-color:#0066cd!important}.focus\:yst-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-1:focus,.focus\:yst-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.focus\:yst-ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important}.focus\:yst-ring-inset:focus{--tw-ring-inset:inset!important}.focus\:yst-ring-primary-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(166 30 105/var(--tw-ring-opacity))!important}.focus\:yst-ring-white:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))!important}.focus\:yst-ring-red-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))!important}.focus\:yst-ring-emerald-600:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(5 150 105/var(--tw-ring-opacity))!important}.focus\:yst-ring-offset-1:focus{--tw-ring-offset-width:1px!important}.focus\:yst-ring-offset-2:focus{--tw-ring-offset-width:2px!important}.focus\:yst-ring-offset-transparent:focus{--tw-ring-offset-color:#0000!important}.focus\:yst-ring-offset-primary-500:focus{--tw-ring-offset-color:#a61e69!important}.yst-group:hover .group-hover\:yst-bg-primary-500{--tw-bg-opacity:1!important;background-color:rgb(166 30 105/var(--tw-bg-opacity))!important}.yst-group:hover .group-hover\:yst-bg-primary-200{--tw-bg-opacity:1!important;background-color:rgb(224 179 204/var(--tw-bg-opacity))!important}.yst-group:hover .group-hover\:yst-text-slate-500{--tw-text-opacity:1!important;color:rgb(100 116 139/var(--tw-text-opacity))!important}.yst-group:hover .group-hover\:yst-text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.yst-group:hover .group-hover\:yst-text-primary-800{--tw-text-opacity:1!important;color:rgb(131 8 78/var(--tw-text-opacity))!important}[dir=rtl] .rtl\:yst-rotate-180{--tw-rotate:180deg!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media not all and (min-width:640px){.max-sm\:yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}}@media (min-width:640px){.sm\:yst-mx-0{margin-left:0!important;margin-right:0!important}.sm\:yst-mb-0{margin-bottom:0!important}.sm\:yst-ml-3{margin-left:.75rem!important}.sm\:yst-mt-0{margin-top:0!important}.sm\:yst-ml-4{margin-left:1rem!important}.sm\:yst-flex{display:flex!important}.sm\:yst-h-10{height:2.5rem!important}.sm\:yst-w-auto{width:auto!important}.sm\:yst-w-10{width:2.5rem!important}.sm\:yst-translate-y-0{--tw-translate-y:0px!important}.sm\:yst-scale-95,.sm\:yst-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-scale-95{--tw-scale-x:.95!important;--tw-scale-y:.95!important}.sm\:yst-scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:yst-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.sm\:yst-flex-row-reverse{flex-direction:row-reverse!important}.sm\:yst-items-start{align-items:flex-start!important}.sm\:yst-text-left{text-align:left!important}.sm\:yst-text-sm{font-size:.8125rem!important}}@media (min-width:768px){.md\:yst-absolute{position:absolute!important}.md\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.md\:yst-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.md\:yst-flex-row{flex-direction:row!important}}@media (min-width:783px){.min-\[783px\]\:yst-block{display:block!important}.min-\[783px\]\:yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.min-\[783px\]\:yst-p-8{padding:2rem!important}}@media (min-width:1024px){.lg\:yst-col-span-2{grid-column:span 2/span 2!important}.lg\:yst-mt-0{margin-top:0!important}.lg\:yst-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.lg\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.lg\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.lg\:yst-gap-12{gap:3rem!important}}@media (min-width:1280px){.xl\:yst-fixed{position:fixed!important}.xl\:yst-right-8{right:2rem!important}.xl\:yst-col-span-2{grid-column:span 2/span 2!important}.xl\:yst-mb-0{margin-bottom:0!important}.xl\:yst-mt-0{margin-top:0!important}.xl\:yst-w-\[16rem\]{width:16rem!important}.xl\:yst-max-w-3xl{max-width:48rem!important}.xl\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.xl\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.xl\:yst-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.xl\:yst-gap-12{gap:3rem!important}.xl\:yst-pr-\[17\.5rem\]{padding-right:17.5rem!important}}@media (min-width:1536px){.\32xl\:yst-col-span-2{grid-column:span 2/span 2!important}.\32xl\:yst-mt-0{margin-top:0!important}.\32xl\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.\32xl\:yst-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.\32xl\:yst-gap-12{gap:3rem!important}}@media (min-width:1800px){.min-\[1800px\]\:yst-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340-rtl.css new file mode 100644 index 00000000..24fb5bb5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340-rtl.css @@ -0,0 +1 @@ +.switch-light span span,.switch-toggle a{display:none}@media only screen{.switch-light,.switch-toggle{display:block;padding:0!important;position:relative}.switch-light:after,.switch-toggle:after{clear:both;content:"";display:table}.switch-light *,.switch-light :after,.switch-light :before,.switch-toggle *,.switch-toggle :after,.switch-toggle :before{box-sizing:border-box}.switch-light a,.switch-toggle a{display:block;transition:all .2s ease-out}.switch-light label,.switch-light-visual-label,.switch-light>span,.switch-toggle label,.switch-toggle>span{line-height:2;vertical-align:middle}.switch-light input{opacity:0;position:absolute;z-index:3}.switch-light input[type=checkbox].disabled,.switch-light input[type=checkbox].disabled:checked:before,.switch-light input[type=checkbox]:disabled,.switch-light input[type=checkbox]:disabled:checked:before{opacity:0}.switch-light input:checked~span a{left:0}.switch-light strong{font-weight:inherit}.switch-light>span{min-height:2em;padding:0;position:relative;text-align:right}.switch-light span span{display:block;float:right;position:relative;text-align:center;-webkit-user-select:none;user-select:none;width:50%;z-index:2}.switch-light a{display:block;height:100%;padding:0;position:absolute;left:50%;top:0;width:50%;z-index:1}.switch-toggle input{right:0;opacity:0;position:absolute}.switch-toggle input[type=radio].disabled,.switch-toggle input[type=radio].disabled:checked:before,.switch-toggle input[type=radio]:disabled,.switch-toggle input[type=radio]:disabled:checked:before{opacity:0}.switch-toggle input+label{float:right;margin:0;padding:0 .5em;text-align:center}.switch-toggle input:checked+label{position:relative;z-index:2}.switch-toggle a{height:100%;right:0;padding:0;position:absolute;top:0;width:10px;z-index:1}.switch-toggle .yoast-button-upsell{right:20px;position:relative}.switch-toggle label:nth-child(2):nth-last-child(4),.switch-toggle label:nth-child(2):nth-last-child(4)~a,.switch-toggle label:nth-child(2):nth-last-child(4)~label{width:50%}.switch-toggle label:nth-child(2):nth-last-child(4)~input:checked:nth-child(3)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(6),.switch-toggle label:nth-child(2):nth-last-child(6)~a,.switch-toggle label:nth-child(2):nth-last-child(6)~label{width:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(3)+label~a{right:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(5)+label~a{right:66.66%}.switch-toggle label:nth-child(2):nth-last-child(8),.switch-toggle label:nth-child(2):nth-last-child(8)~a,.switch-toggle label:nth-child(2):nth-last-child(8)~label{width:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(3)+label~a{right:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(5)+label~a{right:50%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(7)+label~a{right:75%}.switch-toggle label:nth-child(2):nth-last-child(10),.switch-toggle label:nth-child(2):nth-last-child(10)~a,.switch-toggle label:nth-child(2):nth-last-child(10)~label{width:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(3)+label~a{right:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(5)+label~a{right:40%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(7)+label~a{right:60%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(9)+label~a{right:80%}.switch-toggle label:nth-child(2):nth-last-child(12),.switch-toggle label:nth-child(2):nth-last-child(12)~a,.switch-toggle label:nth-child(2):nth-last-child(12)~label{width:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(3)+label~a{right:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(5)+label~a{right:33.2%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(7)+label~a{right:49.8%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(9)+label~a{right:66.4%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(11)+label~a{right:83%}.switch-candy a{box-shadow:0 1px 1px #0003,inset 0 1px 1px #ffffff73}}@media only screen and (-webkit-max-device-pixel-ratio:2) and (max-device-width:80em){.switch-light,.switch-toggle{-webkit-animation:webkitSiblingBugfix 1s infinite}}.fieldset-switch-toggle{width:400px}.fieldset-switch-toggle label{float:none}.fieldset-switch-toggle .yoast-button-upsell{background-color:green;height:16px;overflow:hidden;width:20px}@media only screen{.fieldset-switch-toggle legend{box-sizing:border-box;float:right;font-weight:600;line-height:2;margin:8px 0;min-width:200px;padding-left:16px;vertical-align:middle}.fieldset-switch-toggle .disabled-note{clear:both}.switch-container__has-help .switch-light-visual-label,.switch-container__has-help legend{float:right;min-width:0;padding-left:0}.switch-container__has-help .yoast_help.yoast-help-button{margin:8px 2px 0 0}.switch-light.switch-yoast-seo>span,.switch-toggle.switch-yoast-seo{background-color:#dcdcdc;border:1px solid #ccc;border-radius:.5em;box-shadow:inset 0 2px 4px #00000026;width:250px}.switch-light.switch-yoast-seo,.switch-toggle.switch-yoast-seo{clear:both;float:right}.switch-light.switch-yoast-seo>span{display:inline-block;overflow:visible}.switch-light.switch-yoast-seo a,.switch-toggle.switch-yoast-seo a{background:#a4286a;border:1px solid #b5b5b5;border-radius:.5em}.switch-light.switch-yoast-seo input.disabled+span a,.switch-light.switch-yoast-seo input.disabled:checked+span a,.switch-light.switch-yoast-seo input:disabled+span a,.switch-light.switch-yoast-seo input:disabled:checked+span a,.switch-toggle.switch-yoast-seo input.disabled+a,.switch-toggle.switch-yoast-seo input.disabled~a,.switch-toggle.switch-yoast-seo input:disabled+a,.switch-toggle.switch-yoast-seo input:disabled~a{background:#9b9b9b;border:0}.switch-light.switch-yoast-seo input:focus+label,.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus+label,.switch-toggle.switch-yoast-seo input:focus~span a{outline:none}.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus~a{border-color:#5b9dd9!important;box-shadow:0 0 2px #0073aacc!important}.switch-light.switch-yoast-seo input:checked~span a,.switch-toggle.switch-yoast-seo input:checked~span a{background:#a4286a;border:1px solid #b5b5b5}.switch-light.switch-yoast-seo input:checked~span span:first-child,.switch-light.switch-yoast-seo span span,.switch-toggle.switch-yoast-seo label{color:#333;font-weight:inherit;text-shadow:none}.switch-candy.switch-yoast-seo input:checked+label,.switch-candy.switch-yoast-seo input:checked~span span:nth-child(2),.switch-candy.switch-yoast-seo input~span span:first-child{color:#fff;text-shadow:none}.switch-candy.switch-yoast-seo input+label:after{content:"";display:block;height:100%;right:0;position:absolute;top:0;width:100%;z-index:3}.switch-candy.switch-yoast-seo input:checked+label:after{content:none}.switch-light.switch-yoast-seo-reverse input:checked~span a{right:0}.switch-light.switch-yoast-seo-reverse a{right:50%}.switch-light.switch-yoast-seo-reverse span span{float:left}.switch-toggle.switch-yoast-seo label,label.switch-light.switch-yoast-seo{cursor:pointer;margin-right:0}.switch-light.switch-yoast-seo input.disabled+span,.switch-light.switch-yoast-seo input:disabled+span,.switch-toggle.switch-yoast-seo input.disabled+label,.switch-toggle.switch-yoast-seo input:disabled+label{cursor:not-allowed}.switch-yoast-seo .switch-yoast-seo-jaws-a11y{display:block;height:1px;margin-bottom:-1px;overflow:hidden}.switch-light.switch-yoast-seo label code,.switch-toggle.switch-yoast-seo label code{background-color:inherit;vertical-align:top}.switch-light-visual-label{display:block;font-weight:600;line-height:2;margin:8px 0}.switch-light-visual-label__strong{font-weight:600}.switch-container{clear:both;margin:0 0 .8em}.switch-container.premium-upsell .clear{display:none}.switch-container.premium-upsell{align-items:end;clear:both;display:grid;grid-template-columns:280px 1fr;margin:0 0 .8em}.switch-container.premium-upsell .yoast-help-panel{width:520px}@media screen and (max-width:600px){.switch-container.premium-upsell{clear:both;display:grid;grid-template-columns:1fr;margin:0 0 .8em}.switch-container.premium-upsell .yoast-help-panel{width:unset}}.switch-container.premium-upsell .yoast-button{clear:both;margin-top:8px;width:-moz-fit-content;width:fit-content}.switch-container+.switch-container{margin-top:8px}.switch-container+p{margin:0 0 16px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340.css new file mode 100644 index 00000000..c2154611 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2340.css @@ -0,0 +1 @@ +.switch-light span span,.switch-toggle a{display:none}@media only screen{.switch-light,.switch-toggle{display:block;padding:0!important;position:relative}.switch-light:after,.switch-toggle:after{clear:both;content:"";display:table}.switch-light *,.switch-light :after,.switch-light :before,.switch-toggle *,.switch-toggle :after,.switch-toggle :before{box-sizing:border-box}.switch-light a,.switch-toggle a{display:block;transition:all .2s ease-out}.switch-light label,.switch-light-visual-label,.switch-light>span,.switch-toggle label,.switch-toggle>span{line-height:2;vertical-align:middle}.switch-light input{opacity:0;position:absolute;z-index:3}.switch-light input[type=checkbox].disabled,.switch-light input[type=checkbox].disabled:checked:before,.switch-light input[type=checkbox]:disabled,.switch-light input[type=checkbox]:disabled:checked:before{opacity:0}.switch-light input:checked~span a{right:0}.switch-light strong{font-weight:inherit}.switch-light>span{min-height:2em;padding:0;position:relative;text-align:left}.switch-light span span{display:block;float:left;position:relative;text-align:center;-webkit-user-select:none;user-select:none;width:50%;z-index:2}.switch-light a{display:block;height:100%;padding:0;position:absolute;right:50%;top:0;width:50%;z-index:1}.switch-toggle input{left:0;opacity:0;position:absolute}.switch-toggle input[type=radio].disabled,.switch-toggle input[type=radio].disabled:checked:before,.switch-toggle input[type=radio]:disabled,.switch-toggle input[type=radio]:disabled:checked:before{opacity:0}.switch-toggle input+label{float:left;margin:0;padding:0 .5em;text-align:center}.switch-toggle input:checked+label{position:relative;z-index:2}.switch-toggle a{height:100%;left:0;padding:0;position:absolute;top:0;width:10px;z-index:1}.switch-toggle .yoast-button-upsell{left:20px;position:relative}.switch-toggle label:nth-child(2):nth-last-child(4),.switch-toggle label:nth-child(2):nth-last-child(4)~a,.switch-toggle label:nth-child(2):nth-last-child(4)~label{width:50%}.switch-toggle label:nth-child(2):nth-last-child(4)~input:checked:nth-child(3)+label~a{left:50%}.switch-toggle label:nth-child(2):nth-last-child(6),.switch-toggle label:nth-child(2):nth-last-child(6)~a,.switch-toggle label:nth-child(2):nth-last-child(6)~label{width:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(3)+label~a{left:33.33%}.switch-toggle label:nth-child(2):nth-last-child(6)~input:checked:nth-child(5)+label~a{left:66.66%}.switch-toggle label:nth-child(2):nth-last-child(8),.switch-toggle label:nth-child(2):nth-last-child(8)~a,.switch-toggle label:nth-child(2):nth-last-child(8)~label{width:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(3)+label~a{left:25%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(5)+label~a{left:50%}.switch-toggle label:nth-child(2):nth-last-child(8)~input:checked:nth-child(7)+label~a{left:75%}.switch-toggle label:nth-child(2):nth-last-child(10),.switch-toggle label:nth-child(2):nth-last-child(10)~a,.switch-toggle label:nth-child(2):nth-last-child(10)~label{width:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(3)+label~a{left:20%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(5)+label~a{left:40%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(7)+label~a{left:60%}.switch-toggle label:nth-child(2):nth-last-child(10)~input:checked:nth-child(9)+label~a{left:80%}.switch-toggle label:nth-child(2):nth-last-child(12),.switch-toggle label:nth-child(2):nth-last-child(12)~a,.switch-toggle label:nth-child(2):nth-last-child(12)~label{width:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(3)+label~a{left:16.6%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(5)+label~a{left:33.2%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(7)+label~a{left:49.8%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(9)+label~a{left:66.4%}.switch-toggle label:nth-child(2):nth-last-child(12)~input:checked:nth-child(11)+label~a{left:83%}.switch-candy a{box-shadow:0 1px 1px #0003,inset 0 1px 1px #ffffff73}}@media only screen and (-webkit-max-device-pixel-ratio:2) and (max-device-width:80em){.switch-light,.switch-toggle{-webkit-animation:webkitSiblingBugfix 1s infinite}}.fieldset-switch-toggle{width:400px}.fieldset-switch-toggle label{float:none}.fieldset-switch-toggle .yoast-button-upsell{background-color:green;height:16px;overflow:hidden;width:20px}@media only screen{.fieldset-switch-toggle legend{box-sizing:border-box;float:left;font-weight:600;line-height:2;margin:8px 0;min-width:200px;padding-right:16px;vertical-align:middle}.fieldset-switch-toggle .disabled-note{clear:both}.switch-container__has-help .switch-light-visual-label,.switch-container__has-help legend{float:left;min-width:0;padding-right:0}.switch-container__has-help .yoast_help.yoast-help-button{margin:8px 0 0 2px}.switch-light.switch-yoast-seo>span,.switch-toggle.switch-yoast-seo{background-color:#dcdcdc;border:1px solid #ccc;border-radius:.5em;box-shadow:inset 0 2px 4px #00000026;width:250px}.switch-light.switch-yoast-seo,.switch-toggle.switch-yoast-seo{clear:both;float:left}.switch-light.switch-yoast-seo>span{display:inline-block;overflow:visible}.switch-light.switch-yoast-seo a,.switch-toggle.switch-yoast-seo a{background:#a4286a;border:1px solid #b5b5b5;border-radius:.5em}.switch-light.switch-yoast-seo input.disabled+span a,.switch-light.switch-yoast-seo input.disabled:checked+span a,.switch-light.switch-yoast-seo input:disabled+span a,.switch-light.switch-yoast-seo input:disabled:checked+span a,.switch-toggle.switch-yoast-seo input.disabled+a,.switch-toggle.switch-yoast-seo input.disabled~a,.switch-toggle.switch-yoast-seo input:disabled+a,.switch-toggle.switch-yoast-seo input:disabled~a{background:#9b9b9b;border:0}.switch-light.switch-yoast-seo input:focus+label,.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus+label,.switch-toggle.switch-yoast-seo input:focus~span a{outline:none}.switch-light.switch-yoast-seo input:focus~span a,.switch-toggle.switch-yoast-seo input:focus~a{border-color:#5b9dd9!important;box-shadow:0 0 2px #0073aacc!important}.switch-light.switch-yoast-seo input:checked~span a,.switch-toggle.switch-yoast-seo input:checked~span a{background:#a4286a;border:1px solid #b5b5b5}.switch-light.switch-yoast-seo input:checked~span span:first-child,.switch-light.switch-yoast-seo span span,.switch-toggle.switch-yoast-seo label{color:#333;font-weight:inherit;text-shadow:none}.switch-candy.switch-yoast-seo input:checked+label,.switch-candy.switch-yoast-seo input:checked~span span:nth-child(2),.switch-candy.switch-yoast-seo input~span span:first-child{color:#fff;text-shadow:none}.switch-candy.switch-yoast-seo input+label:after{content:"";display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:3}.switch-candy.switch-yoast-seo input:checked+label:after{content:none}.switch-light.switch-yoast-seo-reverse input:checked~span a{left:0}.switch-light.switch-yoast-seo-reverse a{left:50%}.switch-light.switch-yoast-seo-reverse span span{float:right}.switch-toggle.switch-yoast-seo label,label.switch-light.switch-yoast-seo{cursor:pointer;margin-left:0}.switch-light.switch-yoast-seo input.disabled+span,.switch-light.switch-yoast-seo input:disabled+span,.switch-toggle.switch-yoast-seo input.disabled+label,.switch-toggle.switch-yoast-seo input:disabled+label{cursor:not-allowed}.switch-yoast-seo .switch-yoast-seo-jaws-a11y{display:block;height:1px;margin-bottom:-1px;overflow:hidden}.switch-light.switch-yoast-seo label code,.switch-toggle.switch-yoast-seo label code{background-color:inherit;vertical-align:top}.switch-light-visual-label{display:block;font-weight:600;line-height:2;margin:8px 0}.switch-light-visual-label__strong{font-weight:600}.switch-container{clear:both;margin:0 0 .8em}.switch-container.premium-upsell .clear{display:none}.switch-container.premium-upsell{align-items:end;clear:both;display:grid;grid-template-columns:280px 1fr;margin:0 0 .8em}.switch-container.premium-upsell .yoast-help-panel{width:520px}@media screen and (max-width:600px){.switch-container.premium-upsell{clear:both;display:grid;grid-template-columns:1fr;margin:0 0 .8em}.switch-container.premium-upsell .yoast-help-panel{width:unset}}.switch-container.premium-upsell .yoast-button{clear:both;margin-top:8px;width:-moz-fit-content;width:fit-content}.switch-container+.switch-container{margin-top:8px}.switch-container+p{margin:0 0 16px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340-rtl.css new file mode 100644 index 00000000..de072300 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340-rtl.css @@ -0,0 +1 @@ +.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{word-wrap:break-word;-webkit-font-smoothing:subpixel-antialiased;background:#000c;border-radius:3px;color:#fff;content:attr(aria-label);display:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;letter-spacing:normal;opacity:0;padding:6px 8px 5px;pointer-events:none;position:absolute;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;white-space:pre;z-index:1000000}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{border:5px solid #0000;color:#000c;content:"\00a0";display:none;height:0;opacity:0;pointer-events:none;position:absolute;width:0;z-index:1000001}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{animation-duration:.1s;animation-fill-mode:forwards;animation-name:yoast-tooltip-appear;animation-timing-function:ease-in;display:inline-block;text-decoration:none}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{animation:none;opacity:1}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{margin-top:5px;left:50%;top:100%}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{border-bottom-color:#000c;bottom:-5px;margin-left:-5px;left:50%;top:auto}.yoast-tooltip-se:after{right:50%;margin-right:-15px;left:auto}.yoast-tooltip-sw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{bottom:100%;margin-bottom:5px;left:50%}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{border-top-color:#000c;bottom:auto;margin-left:-5px;left:50%;top:-5px}.yoast-tooltip-ne:after{right:50%;margin-right:-15px;left:auto}.yoast-tooltip-nw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{transform:translateX(-50%)}.yoast-tooltip-w:after{bottom:50%;margin-left:5px;left:100%;transform:translateY(50%)}.yoast-tooltip-w:before{border-right-color:#000c;bottom:50%;right:-5px;margin-top:-5px;top:50%}.yoast-tooltip-e:after{bottom:50%;right:100%;margin-right:5px;transform:translateY(50%)}.yoast-tooltip-e:before{border-left-color:#000c;bottom:50%;margin-top:-5px;left:-5px;top:50%}.yoast-tooltip-multiline:after{word-wrap:normal;border-collapse:initial;max-width:250px;white-space:pre-line;width:250px;width:max-content;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{right:50%;left:auto;transform:translateX(50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{left:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.yoast-tooltip-w:after{margin-left:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340.css new file mode 100644 index 00000000..9023ed33 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2340.css @@ -0,0 +1 @@ +.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{word-wrap:break-word;-webkit-font-smoothing:subpixel-antialiased;background:#000c;border-radius:3px;color:#fff;content:attr(aria-label);display:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;letter-spacing:normal;opacity:0;padding:6px 8px 5px;pointer-events:none;position:absolute;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;white-space:pre;z-index:1000000}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{border:5px solid #0000;color:#000c;content:"\00a0";display:none;height:0;opacity:0;pointer-events:none;position:absolute;width:0;z-index:1000001}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{animation-duration:.1s;animation-fill-mode:forwards;animation-name:yoast-tooltip-appear;animation-timing-function:ease-in;display:inline-block;text-decoration:none}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{animation:none;opacity:1}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{margin-top:5px;right:50%;top:100%}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{border-bottom-color:#000c;bottom:-5px;margin-right:-5px;right:50%;top:auto}.yoast-tooltip-se:after{left:50%;margin-left:-15px;right:auto}.yoast-tooltip-sw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{bottom:100%;margin-bottom:5px;right:50%}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{border-top-color:#000c;bottom:auto;margin-right:-5px;right:50%;top:-5px}.yoast-tooltip-ne:after{left:50%;margin-left:-15px;right:auto}.yoast-tooltip-nw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{transform:translateX(50%)}.yoast-tooltip-w:after{bottom:50%;margin-right:5px;right:100%;transform:translateY(50%)}.yoast-tooltip-w:before{border-left-color:#000c;bottom:50%;left:-5px;margin-top:-5px;top:50%}.yoast-tooltip-e:after{bottom:50%;left:100%;margin-left:5px;transform:translateY(50%)}.yoast-tooltip-e:before{border-right-color:#000c;bottom:50%;margin-top:-5px;right:-5px;top:50%}.yoast-tooltip-multiline:after{word-wrap:normal;border-collapse:initial;max-width:250px;white-space:pre-line;width:250px;width:max-content;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{left:50%;right:auto;transform:translateX(-50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{right:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.yoast-tooltip-w:after{margin-right:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340-rtl.css new file mode 100644 index 00000000..7b0376b4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340-rtl.css @@ -0,0 +1 @@ +#wpseo-workouts-container-free h1,#wpseo-workouts-container-free h3{color:#a4286a;font-weight:500}#wpseo-workouts-container-free h3{font-size:18px;line-height:24px}.card.card-small h3{min-height:48px}#wpseo-workouts-container-free h2{font-size:12px;text-transform:uppercase}#wpseo-workouts-container-free #workouts-page-description{font-size:16px;max-width:600px}.workflow tr.cornerstone{font-weight:700}#wpseo-workouts-container-free hr{margin-bottom:24px;margin-top:8px}#wpseo-workouts-container-free progress{margin:16px 0 8px}#wpseo-workouts-container-free div.card{border-color:#0003;border-radius:8px;border-width:1px;box-shadow:0 1px 3px 0 #0000001a,0 1px 2px 0 #0000000f;max-width:720px;padding:24px;width:100%}#wpseo-workouts-container-free div.card>h2{margin:0}#wpseo-workouts-container-free div.card.card-small{display:flex;flex-direction:column;max-width:320px}#wpseo-workouts-container-free div.card.card-small svg{height:146px;width:204px}#wpseo-workouts-container-free div.card.card-small svg *{height:100%;width:100%}#wpseo-workouts-container-free div.card.card-small>span{margin-top:auto}#wpseo-workouts-container-free table button{margin:2px}.workflow{counter-reset:line-number;list-style:none;margin-right:48px}.workflow li li{counter-increment:none;line-height:19px;margin-bottom:8px}.workflow li.step{counter-increment:line-number;padding-bottom:16px;position:relative}.workflow .yoast-button.yoast-button--finished{opacity:.5}.workflow .finish-button-section .finish-button-saved{color:#6ea029;grid-column-end:3;grid-column-start:3;margin-right:10px;position:relative}.workflow .finish-button-section .finish-button-saved:before{background:var(--yoast-svg-icon-check);background-size:18px 13px;content:"";height:13px;right:-18px;position:absolute;top:2px;width:18px}.workflow li.step>.yoast-button.orphaned-summary{display:initial;margin:0}.yoast .yoast-button--arrow-down{display:inline-block;flex-shrink:0;height:16px;margin:0 6px 0 -2px;width:16px}.workflow>li.step:before{background:#a4286a;bottom:-20px;content:"";right:-33px;position:absolute;top:0;width:2px}.workflow .extra-list-content{position:relative}.workflow>li.step:last-of-type:before{display:none}.workflow>li.step:after{background:#fff;border:2px solid #a4286a;border-radius:100%;color:#a4286a;content:counter(line-number);display:block;height:28px;right:-48px;line-height:28px;position:absolute;text-align:center;top:-8px;width:28px}.workflow li.step.finished:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' fill='none' stroke='%23FFF' height='24' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 13 4 4L19 7'/%3E%3C/svg%3E") #a4286a;background-position:50%;background-repeat:no-repeat;background-size:20px 20px;content:""}.workflow li.step.finished.faded p,.workflow li.step.finished.faded table{opacity:.5}.workflow li.step img{max-width:100%}.workflow li.step img.workflow__image{max-height:100px;max-width:100px}.workflow li.step.yoast-fadeout:before{background:linear-gradient(-180deg,#a4286a,#fff 75%);display:block}.workflow li.step #react-select-2-input{box-shadow:none!important}.workflows__index{display:flex;flex-wrap:wrap;gap:16px}.workflows__index .yoast-button{width:100%}table.yoast_help.yoast_link_suggestions thead td{padding:16px 8px}table.yoast_help.yoast_link_suggestions td{vertical-align:middle}table.yoast_help th.divider{text-align:center}.workflow table.yoast_help td{vertical-align:middle}.workflow table.yoast_help.yoast_link_suggestions td div{display:inline-block}.workflow table.yoast_help.yoast_link_suggestions td strong{display:inline-block;margin-left:8px}.components-modal__header{height:72px;padding:0 24px}.components-modal__header .components-modal__header-heading{color:#a4286a;font-size:20px;font-weight:400;line-height:1.2;margin:0}.components-modal__header .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-left:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.components-modal__content{padding:0 24px 24px}.components-modal__content input[type=text]{max-width:400px;width:100%}.components-modal__frame.yoast__workout{max-width:720px}.yoast__redirect-suggestions{line-height:2}.components-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#00000059;bottom:0;right:0;position:fixed;left:0;top:0;z-index:100000}@media (prefers-reduced-motion:reduce){.components-modal__screen-overlay{animation-delay:0s;animation-duration:1ms}}.components-modal__frame{background:#fff;border-radius:2px;bottom:0;box-shadow:0 10px 10px #00000040;box-sizing:border-box;right:0;margin:0;overflow:auto;position:absolute;left:0;top:0}@media (min-width:600px){.components-modal__frame{animation:components-modal__appear-animation .1s ease-out;animation-fill-mode:forwards;bottom:auto;right:50%;max-height:90%;max-width:calc(100% - 32px);min-width:360px;left:auto;top:50%;transform:translate(50%,-50%)}}@media (min-width:600px) and (prefers-reduced-motion:reduce){.components-modal__frame{animation-delay:0s;animation-duration:1ms}}@keyframes components-modal__appear-animation{0%{margin-top:32px}to{margin-top:0}}.components-modal__header{align-items:center;background:#fff;border-bottom:1px solid #ddd;box-sizing:border-box;display:flex;flex-direction:row;height:60px;justify-content:space-between;margin:0 -32px 24px;padding:0 32px;position:relative;position:sticky;top:0;z-index:10}@supports (-ms-ime-align:auto){.components-modal__header{position:fixed;width:100%}}.components-modal__header .components-modal__header-heading{font-size:1rem;font-weight:600}.components-modal__header h1{line-height:1;margin:0}.components-modal__header .components-button{right:8px;position:relative}.components-modal__header-heading-container{align-items:center;display:flex;flex-direction:row;flex-grow:1;justify-content:left}.components-modal__header-icon-container{display:inline-block}.components-modal__header-icon-container svg{max-height:36px;max-width:36px;padding:8px}.components-modal__content{box-sizing:border-box;height:100%;padding:0 32px 24px}@supports (-ms-ime-align:auto){.components-modal__content{padding-top:60px}}.workflow li.step h4{font-size:14px;font-weight:600;margin:24px 0 0}.workflow .yoast-social-profiles-input-fields{margin:10px 0 20px}.workflow .tracking-radiobuttons{line-height:19px;margin:0 0 20px}.workflow .yoast-tracking{list-style-position:inside;list-style-type:disc;padding:inherit}.yoast-list--usp{margin-bottom:16px;padding-right:24px}.yoast-list--usp li{margin-bottom:16px;position:relative}.yoast-list--usp li:before{background:var(--yoast-svg-icon-check);background-size:18px 13px;content:"";height:13px;right:-24px;position:absolute;top:3px;width:18px}.workout-card-content-flex{display:flex}.card.card-small .yoast-button-upsell{box-shadow:inset 0 -2px 0 #0003;filter:none;font-family:inherit;min-height:40px}.card.card-small button{box-shadow:inset 0 -2px 0 #0000004d;filter:none;min-height:40px}.card.card-small button.yoast-button--secondary{box-shadow:inset 0 -2px 0 #0000001a}.workout-card-content-flex ul{margin-left:8px}.workout-card-content-flex img{max-width:120px}.workout-card-upsell-button{opacity:1}#wpseo-workouts-container-free div.card.card-small.card-disabled{background-color:#ffffff80}#wpseo-workouts-container-free div.card.card-small.card-disabled .workout-card-content-flex,#wpseo-workouts-container-free div.card.card-small.card-disabled .workout-card-progress,#wpseo-workouts-container-free div.card.card-small.card-disabled h2,#wpseo-workouts-container-free div.card.card-small.card-disabled h3{opacity:.5}.workflow__grid{display:grid;gap:8px;grid-template-columns:auto 100px}.workflow__grid>div:last-of-type{display:flex;flex-wrap:wrap;justify-content:flex-end}@media screen and (max-width:768px){#wpseo-workouts-container-free #workouts-page-description{max-width:320px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340.css new file mode 100644 index 00000000..8047eede --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2340.css @@ -0,0 +1 @@ +#wpseo-workouts-container-free h1,#wpseo-workouts-container-free h3{color:#a4286a;font-weight:500}#wpseo-workouts-container-free h3{font-size:18px;line-height:24px}.card.card-small h3{min-height:48px}#wpseo-workouts-container-free h2{font-size:12px;text-transform:uppercase}#wpseo-workouts-container-free #workouts-page-description{font-size:16px;max-width:600px}.workflow tr.cornerstone{font-weight:700}#wpseo-workouts-container-free hr{margin-bottom:24px;margin-top:8px}#wpseo-workouts-container-free progress{margin:16px 0 8px}#wpseo-workouts-container-free div.card{border-color:#0003;border-radius:8px;border-width:1px;box-shadow:0 1px 3px 0 #0000001a,0 1px 2px 0 #0000000f;max-width:720px;padding:24px;width:100%}#wpseo-workouts-container-free div.card>h2{margin:0}#wpseo-workouts-container-free div.card.card-small{display:flex;flex-direction:column;max-width:320px}#wpseo-workouts-container-free div.card.card-small svg{height:146px;width:204px}#wpseo-workouts-container-free div.card.card-small svg *{height:100%;width:100%}#wpseo-workouts-container-free div.card.card-small>span{margin-top:auto}#wpseo-workouts-container-free table button{margin:2px}.workflow{counter-reset:line-number;list-style:none;margin-left:48px}.workflow li li{counter-increment:none;line-height:19px;margin-bottom:8px}.workflow li.step{counter-increment:line-number;padding-bottom:16px;position:relative}.workflow .yoast-button.yoast-button--finished{opacity:.5}.workflow .finish-button-section .finish-button-saved{color:#6ea029;grid-column-end:3;grid-column-start:3;margin-left:10px;position:relative}.workflow .finish-button-section .finish-button-saved:before{background:var(--yoast-svg-icon-check);background-size:18px 13px;content:"";height:13px;left:-18px;position:absolute;top:2px;width:18px}.workflow li.step>.yoast-button.orphaned-summary{display:initial;margin:0}.yoast .yoast-button--arrow-down{display:inline-block;flex-shrink:0;height:16px;margin:0 -2px 0 6px;width:16px}.workflow>li.step:before{background:#a4286a;bottom:-20px;content:"";left:-33px;position:absolute;top:0;width:2px}.workflow .extra-list-content{position:relative}.workflow>li.step:last-of-type:before{display:none}.workflow>li.step:after{background:#fff;border:2px solid #a4286a;border-radius:100%;color:#a4286a;content:counter(line-number);display:block;height:28px;left:-48px;line-height:28px;position:absolute;text-align:center;top:-8px;width:28px}.workflow li.step.finished:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' fill='none' stroke='%23FFF' height='24' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 13 4 4L19 7'/%3E%3C/svg%3E") #a4286a;background-position:50%;background-repeat:no-repeat;background-size:20px 20px;content:""}.workflow li.step.finished.faded p,.workflow li.step.finished.faded table{opacity:.5}.workflow li.step img{max-width:100%}.workflow li.step img.workflow__image{max-height:100px;max-width:100px}.workflow li.step.yoast-fadeout:before{background:linear-gradient(180deg,#a4286a,#fff 75%);display:block}.workflow li.step #react-select-2-input{box-shadow:none!important}.workflows__index{display:flex;flex-wrap:wrap;gap:16px}.workflows__index .yoast-button{width:100%}table.yoast_help.yoast_link_suggestions thead td{padding:16px 8px}table.yoast_help.yoast_link_suggestions td{vertical-align:middle}table.yoast_help th.divider{text-align:center}.workflow table.yoast_help td{vertical-align:middle}.workflow table.yoast_help.yoast_link_suggestions td div{display:inline-block}.workflow table.yoast_help.yoast_link_suggestions td strong{display:inline-block;margin-right:8px}.components-modal__header{height:72px;padding:0 24px}.components-modal__header .components-modal__header-heading{color:#a4286a;font-size:20px;font-weight:400;line-height:1.2;margin:0}.components-modal__header .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-right:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.components-modal__content{padding:0 24px 24px}.components-modal__content input[type=text]{max-width:400px;width:100%}.components-modal__frame.yoast__workout{max-width:720px}.yoast__redirect-suggestions{line-height:2}.components-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#00000059;bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000}@media (prefers-reduced-motion:reduce){.components-modal__screen-overlay{animation-delay:0s;animation-duration:1ms}}.components-modal__frame{background:#fff;border-radius:2px;bottom:0;box-shadow:0 10px 10px #00000040;box-sizing:border-box;left:0;margin:0;overflow:auto;position:absolute;right:0;top:0}@media (min-width:600px){.components-modal__frame{animation:components-modal__appear-animation .1s ease-out;animation-fill-mode:forwards;bottom:auto;left:50%;max-height:90%;max-width:calc(100% - 32px);min-width:360px;right:auto;top:50%;transform:translate(-50%,-50%)}}@media (min-width:600px) and (prefers-reduced-motion:reduce){.components-modal__frame{animation-delay:0s;animation-duration:1ms}}@keyframes components-modal__appear-animation{0%{margin-top:32px}to{margin-top:0}}.components-modal__header{align-items:center;background:#fff;border-bottom:1px solid #ddd;box-sizing:border-box;display:flex;flex-direction:row;height:60px;justify-content:space-between;margin:0 -32px 24px;padding:0 32px;position:relative;position:sticky;top:0;z-index:10}@supports (-ms-ime-align:auto){.components-modal__header{position:fixed;width:100%}}.components-modal__header .components-modal__header-heading{font-size:1rem;font-weight:600}.components-modal__header h1{line-height:1;margin:0}.components-modal__header .components-button{left:8px;position:relative}.components-modal__header-heading-container{align-items:center;display:flex;flex-direction:row;flex-grow:1;justify-content:left}.components-modal__header-icon-container{display:inline-block}.components-modal__header-icon-container svg{max-height:36px;max-width:36px;padding:8px}.components-modal__content{box-sizing:border-box;height:100%;padding:0 32px 24px}@supports (-ms-ime-align:auto){.components-modal__content{padding-top:60px}}.workflow li.step h4{font-size:14px;font-weight:600;margin:24px 0 0}.workflow .yoast-social-profiles-input-fields{margin:10px 0 20px}.workflow .tracking-radiobuttons{line-height:19px;margin:0 0 20px}.workflow .yoast-tracking{list-style-position:inside;list-style-type:disc;padding:inherit}.yoast-list--usp{margin-bottom:16px;padding-left:24px}.yoast-list--usp li{margin-bottom:16px;position:relative}.yoast-list--usp li:before{background:var(--yoast-svg-icon-check);background-size:18px 13px;content:"";height:13px;left:-24px;position:absolute;top:3px;width:18px}.workout-card-content-flex{display:flex}.card.card-small .yoast-button-upsell{box-shadow:inset 0 -2px 0 #0003;filter:none;font-family:inherit;min-height:40px}.card.card-small button{box-shadow:inset 0 -2px 0 #0000004d;filter:none;min-height:40px}.card.card-small button.yoast-button--secondary{box-shadow:inset 0 -2px 0 #0000001a}.workout-card-content-flex ul{margin-right:8px}.workout-card-content-flex img{max-width:120px}.workout-card-upsell-button{opacity:1}#wpseo-workouts-container-free div.card.card-small.card-disabled{background-color:#ffffff80}#wpseo-workouts-container-free div.card.card-small.card-disabled .workout-card-content-flex,#wpseo-workouts-container-free div.card.card-small.card-disabled .workout-card-progress,#wpseo-workouts-container-free div.card.card-small.card-disabled h2,#wpseo-workouts-container-free div.card.card-small.card-disabled h3{opacity:.5}.workflow__grid{display:grid;gap:8px;grid-template-columns:auto 100px}.workflow__grid>div:last-of-type{display:flex;flex-wrap:wrap;justify-content:flex-end}@media screen and (max-width:768px){#wpseo-workouts-container-free #workouts-page-description{max-width:320px}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340-rtl.css new file mode 100644 index 00000000..09bca881 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340-rtl.css @@ -0,0 +1 @@ +.yoast-notice-dismiss:before{-webkit-font-smoothing:antialiased!important;speak:none;background:none;color:#b4b9be;content:"\f153";display:block!important;font:normal 16px/1 dashicons;height:20px;text-align:center;width:20px}.yoast-notice-dismiss{background:none;border:none;color:#b4b9be;cursor:pointer;margin:0;padding:9px;position:absolute;left:1px;top:0}.yoast-notice-dismiss:before{right:0;line-height:20px;position:relative;top:0}.yoast-notice-dismiss:active:before,.yoast-notice-dismiss:focus:before,.yoast-notice-dismiss:hover:before{color:#c00}.yoast-notice-dismiss:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;color:#c00;outline:none}.yoast-notice.is-dismissible{position:relative}.yoast-notice-dismiss{text-decoration:none} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340.css new file mode 100644 index 00000000..78506d9f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2340.css @@ -0,0 +1 @@ +.yoast-notice-dismiss:before{-webkit-font-smoothing:antialiased!important;speak:none;background:none;color:#b4b9be;content:"\f153";display:block!important;font:normal 16px/1 dashicons;height:20px;text-align:center;width:20px}.yoast-notice-dismiss{background:none;border:none;color:#b4b9be;cursor:pointer;margin:0;padding:9px;position:absolute;right:1px;top:0}.yoast-notice-dismiss:before{left:0;line-height:20px;position:relative;top:0}.yoast-notice-dismiss:active:before,.yoast-notice-dismiss:focus:before,.yoast-notice-dismiss:hover:before{color:#c00}.yoast-notice-dismiss:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc;color:#c00;outline:none}.yoast-notice.is-dismissible{position:relative}.yoast-notice-dismiss{text-decoration:none} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340-rtl.css new file mode 100644 index 00000000..cb74c8cc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340-rtl.css @@ -0,0 +1 @@ +.yoast-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#a4286a99;bottom:0;right:0;position:fixed;left:0;top:0;z-index:100000}.yoast-modal{background:#fff;bottom:48px;display:flex;flex-direction:column;height:calc(100% - 96px);right:calc(50% - 440px);max-width:880px;overflow:hidden;position:fixed;top:48px;width:100%}.yoast-gutenberg-modal .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-left:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-columns:280px 1fr;grid-template-rows:72px 1fr 88px}.yoast-modal__heading{align-items:center;background:var(--yoast-color-white);border-bottom:var(--yoast-border-default);box-sizing:border-box;display:flex;grid-area:heading;min-height:72px;padding:0 24px}.yoast-modal__heading .yoast-close{position:absolute;left:16px}.yoast-gutenberg-modal__box.components-modal__frame{box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}@media (min-width:600px){.yoast-gutenberg-modal__box.components-modal__frame{border-radius:8px;max-height:calc(100% - 48px)}}.yoast-gutenberg-modal__no-padding .components-modal__content{padding:0}.yoast-gutenberg-modal .components-modal__header-heading,.yoast-modal__heading h1{color:var(--yoast-color-primary);font-size:20px;font-weight:400;line-height:1.2;margin:0}.yoast-gutenberg-modal .components-modal__content .components-modal__header{border-bottom:1px solid #e2e8f0!important}.yoast-gutenberg-modal .components-modal__icon-container{display:inline-flex}.yoast-gutenberg-modal .components-modal__icon-container svg,.yoast-modal__heading-icon{fill:var(--yoast-color-primary);flex-shrink:0;height:20px;margin-left:16px;width:19px}.yoast-modal__menu{border-left:var(--yoast-border-default);grid-area:menu;overflow-y:auto}.yoast-modal__menu ul{list-style:none;margin:0;padding:0}.yoast-modal__menu li{border-bottom:var(--yoast-border-default);color:var(--yoast-color-default);cursor:pointer;display:block;font-size:16px;padding:12px 16px 11px;text-decoration:none}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--yoast-color-primary);border-bottom:var(--yoast-border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{display:flex;flex-direction:column;flex-grow:1;grid-area:content;overflow-y:auto;position:relative}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{background:var(--yoast-color-white);padding:24px 24px 0;position:sticky;top:0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--yoast-border-default);padding-bottom:24px}.yoast-modal__footer{align-items:center;align-self:flex-end;background:var(--yoast-color-white);border-top:var(--yoast-border-default);bottom:0;box-sizing:border-box;display:flex;grid-area:footer;justify-content:flex-end;margin:0 24px;min-height:88px;padding:0;position:sticky;width:calc(100% - 48px);z-index:10}.yoast-modal__settings-saved{align-items:center;display:inline-flex;margin-left:16px;position:relative}.yoast-modal__settings-saved:before{background:var(--yoast-checkmark--green) no-repeat center;content:"";display:inline-block;height:13px;margin-left:8px;width:14px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{flex-grow:1;padding:24px}@media screen and (max-width:880px){.yoast-modal{bottom:0;height:auto;right:0;left:0;top:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial}.yoast-modal.yoast-modal-collapsible{padding-bottom:72px}.yoast-tabs .yoast-modal__content{grid-template-rows:48px 1fr 72px}.yoast-modal__heading{min-height:48px;padding:0 16px;position:fixed;top:0;width:100%;z-index:11}.yoast-modal__heading h1{font-size:var(--yoast-font-size-default)}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-left:8px}.yoast .yoast-close{left:3px}.yoast-modal__heading .yoast-h2{font-size:var(--yoast-font-size-default)}.yoast-modal__section{flex-grow:0;overflow:initial}.yoast-modal__section-content{margin:0 16px;padding:24px 0}.yoast-modal__section:first-of-type{margin-top:48px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{margin:0;padding:0;position:sticky;top:48px}.yoast-modal__section-open .yoast-modal__section-header{margin-right:16px;margin-left:16px;padding-right:0;padding-left:0}.yoast-modal__section-open{border-bottom:var(--yoast-border-default)}.yoast-modal__footer{margin:0;min-height:72px;padding:0 16px;position:fixed;width:100%;z-index:11}.yoast-modal-collapsible .yoast-modal__footer{min-height:72px}.yoast-modal-collapsible .yoast-modal__section-content{border-bottom:var(--yoast-border-default);margin:0;padding:24px 16px}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{background:#fff;border:none;border-bottom:var(--yoast-border-default);color:var(--yoast-color-primary);cursor:pointer;font-size:var(--yoast-font-size-default);justify-content:space-between;padding:16px;text-align:right;width:100%}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(-180deg)}.yoast-collapsible__trigger[aria-expanded=true]{margin:0 16px;padding:16px 0;width:calc(100% - 32px)}.yoast-collapsible__icon{background-color:var(--yoast-color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0 6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;border:none;display:block;float:left;height:19px;width:19px}.yoast-collapsible-block{margin-top:48px;width:100%}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}.yoast-post-settings-modal{height:100%;max-height:calc(100% - 96px);max-width:calc(100% - 96px);overflow:hidden;width:880px}.yoast-modal-content{padding:16px}@media (min-width:782px){.yoast-modal-content--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}}.yoast-post-settings-modal__button-container{border-bottom:1px solid #0003;display:flex;flex-direction:column;padding:16px}.yoast-post-settings-modal .components-modal__content{display:flex;flex-direction:column;padding:0}.yoast-post-settings-modal .components-modal__header{border-bottom:var(--yoast-border-default);flex-shrink:0;margin:0}.yoast-post-settings-modal .yoast-notice-container{bottom:0;right:0;margin-top:auto;position:sticky;width:100%;z-index:1}.yoast-post-settings-modal .components-modal__content>div:not([class]):not([class=""]){display:flex;flex-direction:column;overflow:hidden}.yoast-post-settings-modal .yoast-notice-container>hr{margin-bottom:0;margin-top:-1px}.yoast-post-settings-modal .yoast-content-container{flex-grow:1;overflow-y:auto}.yoast-post-settings-modal .yoast-button-container{display:flex;flex-direction:row;justify-content:flex-end;margin:0;padding:24px}.yoast-post-settings-modal .yoast-button-container p{align-self:center;color:var(--yoast-color-label-help);padding-left:24px}.yoast-post-settings-modal .yoast-button-container button{align-self:center;flex-shrink:0;max-height:45px}@media only screen and (max-width:600px){.yoast-post-settings-modal{max-height:100%;max-width:100%}.yoast-post-settings-modal .yoast-button-container{justify-content:space-between;padding:16px}.yoast-post-settings-modal .yoast-button-container p{padding-left:0}}.yoast-related-keyphrases-modal,.yoast-wincher-seo-performance-modal{max-width:712px}.yoast-wincher-seo-performance-modal__content{padding:25px 32px 32px}#yoast-get-related-keyphrases-metabox,#yoast-get-related-keyphrases-sidebar{margin-top:8px}.yoast-gutenberg-modal .yoast-related-keyphrases-modal__content{min-height:66vh;position:relative}#yoast-semrush-country-selector{border:none;position:relative}.yoast-related-keyphrases-modal__chart{display:block}:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.yoast-list--usp{font-family:Arial,sans-serif;margin-bottom:2rem;padding:0}.yoast-list--usp li{list-style:none!important;padding-right:1.2533333333rem;position:relative}.yoast-list--usp li:before{color:#77b227;content:"\f00c\0020";font-family:FontAwesome,Open Sans,Arial,sans-serif;right:0;position:absolute;top:0}.yoast .h1,.yoast .h2,.yoast .h3,.yoast .h4,.yoast .h5,.yoast .h6,.yoast h1,.yoast h2,.yoast h3,.yoast h4,.yoast h5,.yoast h6{display:block;font-family:Arial,sans-serif;font-weight:300;margin-top:0}.yoast .h1,.yoast h1{font-size:2.5em;letter-spacing:normal;line-height:3.68rem;margin-bottom:1.35rem}@media only screen and (min-width:30rem){.yoast .h1,.yoast h1{font-size:2.75em}}.yoast .h2,.yoast h2{font-size:1.88em;line-height:2.5rem;margin-bottom:1.2rem}.yoast .h2.tight,.yoast h2.tight{margin-bottom:.6rem}.yoast .h3,.yoast h3{font-size:1.25em;line-height:1.88rem;margin-bottom:.8rem}.yoast .h3.tight,.yoast h3.tight{margin-bottom:.4rem}@media only screen and (min-width:30rem){.yoast .h3,.yoast h3{font-size:1.375em}}@media only screen and (min-width:50rem){.yoast .h3,.yoast h3{font-size:1.5em}}.yoast .h4,.yoast .h5,.yoast .h6,.yoast h4,.yoast h5,.yoast h6{font-size:1.13em;font-weight:400;line-height:1.88rem;margin-bottom:.2rem}.yoast-button{background-color:initial;background-color:#dc5c04;border:0;color:#dc5c04;cursor:pointer;display:inline-block;font-family:Arial,sans-serif;font-size:1.1em;padding:.345em 1em .345em 1.5em;position:relative;text-decoration:none;width:100%}@media only screen and (min-width:30rem){.yoast-button{margin-left:1.36rem;max-height:2.86rem;width:auto}.yoast-button:after{border-bottom:1.44rem solid #0000;border-right:1.43rem solid #dc5c04;border-left:0;border-top:1.43rem solid #0000;content:"";height:0;position:absolute;left:-1.36rem;top:0;width:0}.yoast-button.left{margin-right:1.36rem;margin-left:0}.yoast-button.left:after{content:none}.yoast-button.left:before{border-bottom:1.44rem solid #0000;border-right:0;border-left:1.43rem solid #dc5c04;border-top:1.43rem solid #0000;content:"";height:0;right:-1.36rem;position:absolute;top:0;width:0}}.yoast-button.alignleft{margin:1rem 0 0 2.5rem!important}.yoast-button .arrow{display:none}.yoast-button+.yoast-button{margin-right:1.88rem;margin-top:1em}.yoast-button--full{width:100%}.yoast-button--full:after{content:none}.yoast-button.default{background-color:#dc5c04;color:#fff}.yoast-button.default:after{border-right-color:#dc5c04}.yoast-button.default:before{border-left-color:#dc5c04}.yoast-button a:focus,.yoast-button:hover{background-color:#f58223;color:#fff;text-decoration:underline}.yoast-button a:focus:after,.yoast-button:hover:after{border-right-color:#f58223}.yoast-button a:focus:before,.yoast-button:hover:before{border-left-color:#f58223}.yoast-button.academy{background-color:#5d237a;color:#fff}.yoast-button.academy:after{border-right-color:#5d237a}.yoast-button.academy:before{border-left-color:#5d237a}@media only screen and (max-width:20rem){.yoast-button.academy{background-color:#5d237a}}.yoast-button.academy--secondary{background-color:#a4286a;color:#fff}.yoast-button.academy--secondary:after{border-right-color:#a4286a}.yoast-button.academy--secondary:before{border-left-color:#a4286a}@media only screen and (max-width:20rem){.yoast-button.academy--secondary{background-color:#a4286a}}.yoast-button.software{background-color:#0075b3;color:#fff}.yoast-button.software:after{border-right-color:#0075b3}.yoast-button.software:before{border-left-color:#0075b3}.yoast-button.review{background-color:#009288;color:#fff}.yoast-button.review:after{border-right-color:#009288}.yoast-button.review:before{border-left-color:#009288}.yoast-button.about{background-color:#d93f69;color:#fff}.yoast-button.about:after{border-right-color:#d93f69}.yoast-button.about:before{border-left-color:#d93f69}.yoast_academy .yoast-button{background-color:#d93f69;color:#fff}.yoast_academy .yoast-button:after{border-right-color:#d93f69}.yoast_academy .yoast-button:before{border-left-color:#d93f69}.yoast_academy .yoast-button a:focus,.yoast_academy .yoast-button:hover{background-color:#d42a59;color:#fff;text-decoration:underline}.yoast_academy .yoast-button a:focus:after,.yoast_academy .yoast-button:hover:after{border-right-color:#d42a59}.yoast_academy .yoast-button a:focus:before,.yoast_academy .yoast-button:hover:before{border-left-color:#d42a59}.yoast_academy .yoast-button.dimmed,body .yoast-button.dimmed{background-color:#dcdcdc;color:#646464}.yoast_academy .yoast-button.dimmed:after,body .yoast-button.dimmed:after{border-right-color:#dcdcdc}.yoast_academy .yoast-button.dimmed:before,body .yoast-button.dimmed:before{border-left-color:#dcdcdc}.yoast_academy .yoast-button.dimmed a:focus,.yoast_academy .yoast-button.dimmed:hover,body .yoast-button.dimmed a:focus,body .yoast-button.dimmed:hover{background-color:#cdcdcd;color:#646464;text-decoration:underline}.yoast_academy .yoast-button.dimmed a:focus:after,.yoast_academy .yoast-button.dimmed:hover:after,body .yoast-button.dimmed a:focus:after,body .yoast-button.dimmed:hover:after{border-right-color:#cdcdcd}.yoast_academy .yoast-button.dimmed a:focus:before,.yoast_academy .yoast-button.dimmed:hover:before,body .yoast-button.dimmed a:focus:before,body .yoast-button.dimmed:hover:before{border-left-color:#cdcdcd}.yoast-button--noarrow:after{content:none}.yoast-button--naked{background-color:initial;border:none;padding:0}.yoast-button--naked:after{content:none}.yoast-button i.fa{font-size:140%;margin:4px 0 0 10px}.yoast-promoblock{border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin-bottom:1.88rem;padding:16px}.yoast-promoblock p{color:#000}.yoast-promoblock p:last-of-type{margin-bottom:0}.yoast-promoblock i.blockicon{bottom:10px;font-size:2.25em;padding:0 .5em 0 0;position:absolute;left:10px}.yoast-promoblock a img{border:1px solid #dcdcdc}.yoast-promoblock p a{font-weight:600!important;text-decoration:underline}.yoast-promoblock form a{font-weight:400!important;text-decoration:none}.yoast-promoblock .h4,.yoast-promoblock h4{margin-bottom:.7rem}.yoast-promoblock.link{border-color:#dc5c04}.yoast-promoblock.link a,.yoast-promoblock.link a:hover{color:#dc5c04}.yoast-promoblock--white{border-color:#fff!important}.product .yoast-promoblock{overflow:hidden}.yoast-promoblock--hometitle{background-color:#d93f6940;border-color:#fff!important;display:flex;font-size:16px;font-size:1rem;height:11em;line-height:1;margin:1rem auto 2rem;max-width:16em}@media only screen and (max-width:30rem){.yoast-promoblock--hometitle:after{content:none!important}}.yoast-promoblock--imageholder{margin-bottom:0;padding:0}.yoast-promoblock--imageholdersmall{position:absolute}.yoast-promoblock--imageholdersmall:first-child{right:4rem}.yoast-promoblock--imageholdersmall:last-child{top:4rem}@media only screen and (max-width:50rem){.yoast-promoblock h2{margin-bottom:0}}a.promoblock{color:#000}a.promoblock,a.promoblock:hover{text-decoration:none}.promoblockimage__holder{height:295px;position:relative;width:240px}.yoast{color:#000;font-family:Open Sans,Arial,sans-serif;font-size:1rem;letter-spacing:.01em;line-height:1.88}.yoast *,.yoast :after,.yoast :before{box-sizing:border-box}.yoast-hr{border:0;margin:0;padding-bottom:1.88rem;position:relative}.yoast-list--usp li:before{background:var(--yoast-svg-icon-check) no-repeat;background-position:right .3em;background-size:contain;content:"";height:100%;width:1em}.yoast-button--purple{background-color:#5d237a}.yoast-button-go-to:after{border:none;content:" \00BB";height:auto;position:static;left:auto;top:auto;width:auto}.yoast-button--extension{color:#fff;padding-right:.8em;padding-left:.8em;text-transform:uppercase}.yoast-button--extension+.yoast-button--extension-activated,.yoast-button--extension+.yoast-button--extension-not-activated{margin-right:0}.yoast-button--extension-activated:hover,.yoast-button--extension-installed:hover,.yoast-button--extension-not-activated:hover{text-decoration:none}.yoast-button--extension-installed{margin-left:.2rem}.yoast-button--extension-installed,.yoast-button--extension-installed:hover{background-color:#008a00}.yoast-button--extension-not-activated,.yoast-button--extension-not-activated:hover{background-color:#dc3232}.yoast-button--extension-activated,.yoast-button--extension-activated:hover{background-color:#008a00}.yoast-button-upsell{margin-bottom:1em;width:100%}@media only screen and (min-width:30rem){.yoast-button-upsell{margin-left:1.36rem;width:auto}}.yoast-promo-extensions{display:flex;flex-wrap:wrap;margin-right:-24px}.yoast-promo-extensions>h2{margin-bottom:32px;margin-right:32px;width:100%}.yoast-promo-extension{background-color:#fff;display:flex;flex-direction:column;margin-right:32px;max-width:340px}.yoast-promo-extension:first-child{margin-right:0}.yoast-promo-extension img{float:left;height:100px;margin-bottom:.8rem;width:100px}@media screen and (max-width:900px){.yoast-promo-extension img{display:none}}.yoast-promo-extension .yoast-button-container{margin-top:auto}.yoast-promo-extension .yoast-button-container div.yoast-button--extension{cursor:default}.yoast-promo-extension .yoast-button{font-size:.9rem;max-height:none;width:100%}.yoast-promo-extension .yoast-button--installed{color:#fff}.yoast-promo-extension .yoast-button--extension{font-size:.9rem;margin-top:0;text-align:center}.yoast-promo-extension .yoast-button--extension-installed{margin:0 0 0 2%;width:48%}.yoast-promo-extension .yoast-button--extension-activated,.yoast-promo-extension .yoast-button--extension-not-activated{margin-right:0;margin-left:0;width:48%}.yoast-promo-extension .yoast-button-upsell{width:100%}.yoast-promo-extension h3{color:#a4286a}@media screen and (max-width:900px){.yoast-promo-extension{max-width:none;width:100%}}.yoast-seo-premium-extension-sale-badge{margin-top:-30px}.yoast-seo-premium-extension-sale-badge span{background:#1f2937;border-radius:14px;color:#fcd34d;font-size:14px;font-weight:600;padding:6px 12px}.yoast-seo-premium-extension{background:#fff;border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin:2em .5em 1.5em;max-width:712px;padding:16px}.yoast-seo-premium-extension h2{color:#a61e69;display:flex;font-size:1.5rem;justify-content:space-between;margin-top:16px}.yoast-seo-premium-extension img{margin-right:1rem}@media screen and (max-width:900px){.yoast-seo-premium-extension{max-width:none;width:calc(100% - 8px)}.yoast-seo-premium-extension img{display:none}}.yoast-seo-premium-extension:after,.yoast-seo-premium-extension:before{content:"";display:table}.yoast-seo-premium-extension:after{clear:both}.yoast-seo-premium-benefits__item{font-size:.9rem;font-weight:400;line-height:24px;margin-bottom:8px}.yoast-seo-premium-benefits__item span{color:#404040}.yoast-seo-premium-benefits__title{font-size:.9rem;font-weight:700;line-height:24px}.yoast-seo-premium-benefits__description{font-size:.9rem;font-weight:400;line-height:24px}.yoast-link--license,.yoast-link--more-info{color:#a4286a;font-weight:600}.yoast-link--license{margin:1em 0 0}.yoast-promo-extension .yoast-link--license{display:block;margin:1em 0 0}.yoast-link--license:after{content:" \00BB"}.yoast-link--more-info{background:var(--yoast-svg-icon-info);background-position:100%;background-repeat:no-repeat;background-size:1em;padding-right:calc(1em + 5px)}.yoast-link--more-info:after{content:" \00BB"}.yoast-promo-extension .yoast-link--more-info{background-position:100%;display:block;margin:0}.yoast-heading-highlight{color:#a4286a;font-weight:600}.yoast-money-back-guarantee{font-size:1.1em;font-style:italic}.yoast-license-status-active{background:#008a00;color:#fff;padding:3px 6px}.yoast-license-status-inactive{background:#dc3232;color:#fff;padding:3px 6px}.yoast-promoblock.secondary.yoast-promo-extension .yoast-button-container .yoast-subscription-discount{color:#64748b;font-size:12px;margin-bottom:8px;margin-top:-8px;text-align:center} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340.css new file mode 100644 index 00000000..252ed924 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2340.css @@ -0,0 +1 @@ +.yoast-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#a4286a99;bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000}.yoast-modal{background:#fff;bottom:48px;display:flex;flex-direction:column;height:calc(100% - 96px);left:calc(50% - 440px);max-width:880px;overflow:hidden;position:fixed;top:48px;width:100%}.yoast-gutenberg-modal .yoast-icon{background-color:var(--yoast-color-primary);display:inline-block;height:20px;margin-right:8px;mask-image:var(--yoast-svg-icon-yoast);-webkit-mask-image:var(--yoast-svg-icon-yoast);mask-size:100% 100%;-webkit-mask-size:100% 100%;width:20px}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-columns:280px 1fr;grid-template-rows:72px 1fr 88px}.yoast-modal__heading{align-items:center;background:var(--yoast-color-white);border-bottom:var(--yoast-border-default);box-sizing:border-box;display:flex;grid-area:heading;min-height:72px;padding:0 24px}.yoast-modal__heading .yoast-close{position:absolute;right:16px}.yoast-gutenberg-modal__box.components-modal__frame{box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}@media (min-width:600px){.yoast-gutenberg-modal__box.components-modal__frame{border-radius:8px;max-height:calc(100% - 48px)}}.yoast-gutenberg-modal__no-padding .components-modal__content{padding:0}.yoast-gutenberg-modal .components-modal__header-heading,.yoast-modal__heading h1{color:var(--yoast-color-primary);font-size:20px;font-weight:400;line-height:1.2;margin:0}.yoast-gutenberg-modal .components-modal__content .components-modal__header{border-bottom:1px solid #e2e8f0!important}.yoast-gutenberg-modal .components-modal__icon-container{display:inline-flex}.yoast-gutenberg-modal .components-modal__icon-container svg,.yoast-modal__heading-icon{fill:var(--yoast-color-primary);flex-shrink:0;height:20px;margin-right:16px;width:19px}.yoast-modal__menu{border-right:var(--yoast-border-default);grid-area:menu;overflow-y:auto}.yoast-modal__menu ul{list-style:none;margin:0;padding:0}.yoast-modal__menu li{border-bottom:var(--yoast-border-default);color:var(--yoast-color-default);cursor:pointer;display:block;font-size:16px;padding:12px 16px 11px;text-decoration:none}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--yoast-color-primary);border-bottom:var(--yoast-border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{display:flex;flex-direction:column;flex-grow:1;grid-area:content;overflow-y:auto;position:relative}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{background:var(--yoast-color-white);padding:24px 24px 0;position:sticky;top:0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--yoast-border-default);padding-bottom:24px}.yoast-modal__footer{align-items:center;align-self:flex-end;background:var(--yoast-color-white);border-top:var(--yoast-border-default);bottom:0;box-sizing:border-box;display:flex;grid-area:footer;justify-content:flex-end;margin:0 24px;min-height:88px;padding:0;position:sticky;width:calc(100% - 48px);z-index:10}.yoast-modal__settings-saved{align-items:center;display:inline-flex;margin-right:16px;position:relative}.yoast-modal__settings-saved:before{background:var(--yoast-checkmark--green) no-repeat center;content:"";display:inline-block;height:13px;margin-right:8px;width:14px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{flex-grow:1;padding:24px}@media screen and (max-width:880px){.yoast-modal{bottom:0;height:auto;left:0;right:0;top:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial}.yoast-modal.yoast-modal-collapsible{padding-bottom:72px}.yoast-tabs .yoast-modal__content{grid-template-rows:48px 1fr 72px}.yoast-modal__heading{min-height:48px;padding:0 16px;position:fixed;top:0;width:100%;z-index:11}.yoast-modal__heading h1{font-size:var(--yoast-font-size-default)}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-right:8px}.yoast .yoast-close{right:3px}.yoast-modal__heading .yoast-h2{font-size:var(--yoast-font-size-default)}.yoast-modal__section{flex-grow:0;overflow:initial}.yoast-modal__section-content{margin:0 16px;padding:24px 0}.yoast-modal__section:first-of-type{margin-top:48px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{margin:0;padding:0;position:sticky;top:48px}.yoast-modal__section-open .yoast-modal__section-header{margin-left:16px;margin-right:16px;padding-left:0;padding-right:0}.yoast-modal__section-open{border-bottom:var(--yoast-border-default)}.yoast-modal__footer{margin:0;min-height:72px;padding:0 16px;position:fixed;width:100%;z-index:11}.yoast-modal-collapsible .yoast-modal__footer{min-height:72px}.yoast-modal-collapsible .yoast-modal__section-content{border-bottom:var(--yoast-border-default);margin:0;padding:24px 16px}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{background:#fff;border:none;border-bottom:var(--yoast-border-default);color:var(--yoast-color-primary);cursor:pointer;font-size:var(--yoast-font-size-default);justify-content:space-between;padding:16px;text-align:left;width:100%}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(180deg)}.yoast-collapsible__trigger[aria-expanded=true]{margin:0 16px;padding:16px 0;width:calc(100% - 32px)}.yoast-collapsible__icon{background-color:var(--yoast-color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0 6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;border:none;display:block;float:right;height:19px;width:19px}.yoast-collapsible-block{margin-top:48px;width:100%}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}.yoast-post-settings-modal{height:100%;max-height:calc(100% - 96px);max-width:calc(100% - 96px);overflow:hidden;width:880px}.yoast-modal-content{padding:16px}@media (min-width:782px){.yoast-modal-content--columns{grid-gap:24px;display:grid;grid-template-columns:1fr 1fr}}.yoast-post-settings-modal__button-container{border-bottom:1px solid #0003;display:flex;flex-direction:column;padding:16px}.yoast-post-settings-modal .components-modal__content{display:flex;flex-direction:column;padding:0}.yoast-post-settings-modal .components-modal__header{border-bottom:var(--yoast-border-default);flex-shrink:0;margin:0}.yoast-post-settings-modal .yoast-notice-container{bottom:0;left:0;margin-top:auto;position:sticky;width:100%;z-index:1}.yoast-post-settings-modal .components-modal__content>div:not([class]):not([class=""]){display:flex;flex-direction:column;overflow:hidden}.yoast-post-settings-modal .yoast-notice-container>hr{margin-bottom:0;margin-top:-1px}.yoast-post-settings-modal .yoast-content-container{flex-grow:1;overflow-y:auto}.yoast-post-settings-modal .yoast-button-container{display:flex;flex-direction:row;justify-content:flex-end;margin:0;padding:24px}.yoast-post-settings-modal .yoast-button-container p{align-self:center;color:var(--yoast-color-label-help);padding-right:24px}.yoast-post-settings-modal .yoast-button-container button{align-self:center;flex-shrink:0;max-height:45px}@media only screen and (max-width:600px){.yoast-post-settings-modal{max-height:100%;max-width:100%}.yoast-post-settings-modal .yoast-button-container{justify-content:space-between;padding:16px}.yoast-post-settings-modal .yoast-button-container p{padding-right:0}}.yoast-related-keyphrases-modal,.yoast-wincher-seo-performance-modal{max-width:712px}.yoast-wincher-seo-performance-modal__content{padding:25px 32px 32px}#yoast-get-related-keyphrases-metabox,#yoast-get-related-keyphrases-sidebar{margin-top:8px}.yoast-gutenberg-modal .yoast-related-keyphrases-modal__content{min-height:66vh;position:relative}#yoast-semrush-country-selector{border:none;position:relative}.yoast-related-keyphrases-modal__chart{display:block}:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.yoast-list--usp{font-family:Arial,sans-serif;margin-bottom:2rem;padding:0}.yoast-list--usp li{list-style:none!important;padding-left:1.2533333333rem;position:relative}.yoast-list--usp li:before{color:#77b227;content:"\f00c\0020";font-family:FontAwesome,Open Sans,Arial,sans-serif;left:0;position:absolute;top:0}.yoast .h1,.yoast .h2,.yoast .h3,.yoast .h4,.yoast .h5,.yoast .h6,.yoast h1,.yoast h2,.yoast h3,.yoast h4,.yoast h5,.yoast h6{display:block;font-family:Arial,sans-serif;font-weight:300;margin-top:0}.yoast .h1,.yoast h1{font-size:2.5em;letter-spacing:normal;line-height:3.68rem;margin-bottom:1.35rem}@media only screen and (min-width:30rem){.yoast .h1,.yoast h1{font-size:2.75em}}.yoast .h2,.yoast h2{font-size:1.88em;line-height:2.5rem;margin-bottom:1.2rem}.yoast .h2.tight,.yoast h2.tight{margin-bottom:.6rem}.yoast .h3,.yoast h3{font-size:1.25em;line-height:1.88rem;margin-bottom:.8rem}.yoast .h3.tight,.yoast h3.tight{margin-bottom:.4rem}@media only screen and (min-width:30rem){.yoast .h3,.yoast h3{font-size:1.375em}}@media only screen and (min-width:50rem){.yoast .h3,.yoast h3{font-size:1.5em}}.yoast .h4,.yoast .h5,.yoast .h6,.yoast h4,.yoast h5,.yoast h6{font-size:1.13em;font-weight:400;line-height:1.88rem;margin-bottom:.2rem}.yoast-button{background-color:initial;background-color:#dc5c04;border:0;color:#dc5c04;cursor:pointer;display:inline-block;font-family:Arial,sans-serif;font-size:1.1em;padding:.345em 1.5em .345em 1em;position:relative;text-decoration:none;width:100%}@media only screen and (min-width:30rem){.yoast-button{margin-right:1.36rem;max-height:2.86rem;width:auto}.yoast-button:after{border-bottom:1.44rem solid #0000;border-left:1.43rem solid #dc5c04;border-right:0;border-top:1.43rem solid #0000;content:"";height:0;position:absolute;right:-1.36rem;top:0;width:0}.yoast-button.left{margin-left:1.36rem;margin-right:0}.yoast-button.left:after{content:none}.yoast-button.left:before{border-bottom:1.44rem solid #0000;border-left:0;border-right:1.43rem solid #dc5c04;border-top:1.43rem solid #0000;content:"";height:0;left:-1.36rem;position:absolute;top:0;width:0}}.yoast-button.alignleft{margin:1rem 2.5rem 0 0!important}.yoast-button .arrow{display:none}.yoast-button+.yoast-button{margin-left:1.88rem;margin-top:1em}.yoast-button--full{width:100%}.yoast-button--full:after{content:none}.yoast-button.default{background-color:#dc5c04;color:#fff}.yoast-button.default:after{border-left-color:#dc5c04}.yoast-button.default:before{border-right-color:#dc5c04}.yoast-button a:focus,.yoast-button:hover{background-color:#f58223;color:#fff;text-decoration:underline}.yoast-button a:focus:after,.yoast-button:hover:after{border-left-color:#f58223}.yoast-button a:focus:before,.yoast-button:hover:before{border-right-color:#f58223}.yoast-button.academy{background-color:#5d237a;color:#fff}.yoast-button.academy:after{border-left-color:#5d237a}.yoast-button.academy:before{border-right-color:#5d237a}@media only screen and (max-width:20rem){.yoast-button.academy{background-color:#5d237a}}.yoast-button.academy--secondary{background-color:#a4286a;color:#fff}.yoast-button.academy--secondary:after{border-left-color:#a4286a}.yoast-button.academy--secondary:before{border-right-color:#a4286a}@media only screen and (max-width:20rem){.yoast-button.academy--secondary{background-color:#a4286a}}.yoast-button.software{background-color:#0075b3;color:#fff}.yoast-button.software:after{border-left-color:#0075b3}.yoast-button.software:before{border-right-color:#0075b3}.yoast-button.review{background-color:#009288;color:#fff}.yoast-button.review:after{border-left-color:#009288}.yoast-button.review:before{border-right-color:#009288}.yoast-button.about{background-color:#d93f69;color:#fff}.yoast-button.about:after{border-left-color:#d93f69}.yoast-button.about:before{border-right-color:#d93f69}.yoast_academy .yoast-button{background-color:#d93f69;color:#fff}.yoast_academy .yoast-button:after{border-left-color:#d93f69}.yoast_academy .yoast-button:before{border-right-color:#d93f69}.yoast_academy .yoast-button a:focus,.yoast_academy .yoast-button:hover{background-color:#d42a59;color:#fff;text-decoration:underline}.yoast_academy .yoast-button a:focus:after,.yoast_academy .yoast-button:hover:after{border-left-color:#d42a59}.yoast_academy .yoast-button a:focus:before,.yoast_academy .yoast-button:hover:before{border-right-color:#d42a59}.yoast_academy .yoast-button.dimmed,body .yoast-button.dimmed{background-color:#dcdcdc;color:#646464}.yoast_academy .yoast-button.dimmed:after,body .yoast-button.dimmed:after{border-left-color:#dcdcdc}.yoast_academy .yoast-button.dimmed:before,body .yoast-button.dimmed:before{border-right-color:#dcdcdc}.yoast_academy .yoast-button.dimmed a:focus,.yoast_academy .yoast-button.dimmed:hover,body .yoast-button.dimmed a:focus,body .yoast-button.dimmed:hover{background-color:#cdcdcd;color:#646464;text-decoration:underline}.yoast_academy .yoast-button.dimmed a:focus:after,.yoast_academy .yoast-button.dimmed:hover:after,body .yoast-button.dimmed a:focus:after,body .yoast-button.dimmed:hover:after{border-left-color:#cdcdcd}.yoast_academy .yoast-button.dimmed a:focus:before,.yoast_academy .yoast-button.dimmed:hover:before,body .yoast-button.dimmed a:focus:before,body .yoast-button.dimmed:hover:before{border-right-color:#cdcdcd}.yoast-button--noarrow:after{content:none}.yoast-button--naked{background-color:initial;border:none;padding:0}.yoast-button--naked:after{content:none}.yoast-button i.fa{font-size:140%;margin:4px 10px 0 0}.yoast-promoblock{border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin-bottom:1.88rem;padding:16px}.yoast-promoblock p{color:#000}.yoast-promoblock p:last-of-type{margin-bottom:0}.yoast-promoblock i.blockicon{bottom:10px;font-size:2.25em;padding:0 0 0 .5em;position:absolute;right:10px}.yoast-promoblock a img{border:1px solid #dcdcdc}.yoast-promoblock p a{font-weight:600!important;text-decoration:underline}.yoast-promoblock form a{font-weight:400!important;text-decoration:none}.yoast-promoblock .h4,.yoast-promoblock h4{margin-bottom:.7rem}.yoast-promoblock.link{border-color:#dc5c04}.yoast-promoblock.link a,.yoast-promoblock.link a:hover{color:#dc5c04}.yoast-promoblock--white{border-color:#fff!important}.product .yoast-promoblock{overflow:hidden}.yoast-promoblock--hometitle{background-color:#d93f6940;border-color:#fff!important;display:flex;font-size:16px;font-size:1rem;height:11em;line-height:1;margin:1rem auto 2rem;max-width:16em}@media only screen and (max-width:30rem){.yoast-promoblock--hometitle:after{content:none!important}}.yoast-promoblock--imageholder{margin-bottom:0;padding:0}.yoast-promoblock--imageholdersmall{position:absolute}.yoast-promoblock--imageholdersmall:first-child{left:4rem}.yoast-promoblock--imageholdersmall:last-child{top:4rem}@media only screen and (max-width:50rem){.yoast-promoblock h2{margin-bottom:0}}a.promoblock{color:#000}a.promoblock,a.promoblock:hover{text-decoration:none}.promoblockimage__holder{height:295px;position:relative;width:240px}.yoast{color:#000;font-family:Open Sans,Arial,sans-serif;font-size:1rem;letter-spacing:.01em;line-height:1.88}.yoast *,.yoast :after,.yoast :before{box-sizing:border-box}.yoast-hr{border:0;margin:0;padding-bottom:1.88rem;position:relative}.yoast-list--usp li:before{background:var(--yoast-svg-icon-check) no-repeat;background-position:left .3em;background-size:contain;content:"";height:100%;width:1em}.yoast-button--purple{background-color:#5d237a}.yoast-button-go-to:after{border:none;content:" \00BB";height:auto;position:static;right:auto;top:auto;width:auto}.yoast-button--extension{color:#fff;padding-left:.8em;padding-right:.8em;text-transform:uppercase}.yoast-button--extension+.yoast-button--extension-activated,.yoast-button--extension+.yoast-button--extension-not-activated{margin-left:0}.yoast-button--extension-activated:hover,.yoast-button--extension-installed:hover,.yoast-button--extension-not-activated:hover{text-decoration:none}.yoast-button--extension-installed{margin-right:.2rem}.yoast-button--extension-installed,.yoast-button--extension-installed:hover{background-color:#008a00}.yoast-button--extension-not-activated,.yoast-button--extension-not-activated:hover{background-color:#dc3232}.yoast-button--extension-activated,.yoast-button--extension-activated:hover{background-color:#008a00}.yoast-button-upsell{margin-bottom:1em;width:100%}@media only screen and (min-width:30rem){.yoast-button-upsell{margin-right:1.36rem;width:auto}}.yoast-promo-extensions{display:flex;flex-wrap:wrap;margin-left:-24px}.yoast-promo-extensions>h2{margin-bottom:32px;margin-left:32px;width:100%}.yoast-promo-extension{background-color:#fff;display:flex;flex-direction:column;margin-left:32px;max-width:340px}.yoast-promo-extension:first-child{margin-left:0}.yoast-promo-extension img{float:right;height:100px;margin-bottom:.8rem;width:100px}@media screen and (max-width:900px){.yoast-promo-extension img{display:none}}.yoast-promo-extension .yoast-button-container{margin-top:auto}.yoast-promo-extension .yoast-button-container div.yoast-button--extension{cursor:default}.yoast-promo-extension .yoast-button{font-size:.9rem;max-height:none;width:100%}.yoast-promo-extension .yoast-button--installed{color:#fff}.yoast-promo-extension .yoast-button--extension{font-size:.9rem;margin-top:0;text-align:center}.yoast-promo-extension .yoast-button--extension-installed{margin:0 2% 0 0;width:48%}.yoast-promo-extension .yoast-button--extension-activated,.yoast-promo-extension .yoast-button--extension-not-activated{margin-left:0;margin-right:0;width:48%}.yoast-promo-extension .yoast-button-upsell{width:100%}.yoast-promo-extension h3{color:#a4286a}@media screen and (max-width:900px){.yoast-promo-extension{max-width:none;width:100%}}.yoast-seo-premium-extension-sale-badge{margin-top:-30px}.yoast-seo-premium-extension-sale-badge span{background:#1f2937;border-radius:14px;color:#fcd34d;font-size:14px;font-weight:600;padding:6px 12px}.yoast-seo-premium-extension{background:#fff;border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin:2em .5em 1.5em;max-width:712px;padding:16px}.yoast-seo-premium-extension h2{color:#a61e69;display:flex;font-size:1.5rem;justify-content:space-between;margin-top:16px}.yoast-seo-premium-extension img{margin-left:1rem}@media screen and (max-width:900px){.yoast-seo-premium-extension{max-width:none;width:calc(100% - 8px)}.yoast-seo-premium-extension img{display:none}}.yoast-seo-premium-extension:after,.yoast-seo-premium-extension:before{content:"";display:table}.yoast-seo-premium-extension:after{clear:both}.yoast-seo-premium-benefits__item{font-size:.9rem;font-weight:400;line-height:24px;margin-bottom:8px}.yoast-seo-premium-benefits__item span{color:#404040}.yoast-seo-premium-benefits__title{font-size:.9rem;font-weight:700;line-height:24px}.yoast-seo-premium-benefits__description{font-size:.9rem;font-weight:400;line-height:24px}.yoast-link--license,.yoast-link--more-info{color:#a4286a;font-weight:600}.yoast-link--license{margin:1em 0 0}.yoast-promo-extension .yoast-link--license{display:block;margin:1em 0 0}.yoast-link--license:after{content:" \00BB"}.yoast-link--more-info{background:var(--yoast-svg-icon-info);background-position:0;background-repeat:no-repeat;background-size:1em;padding-left:calc(1em + 5px)}.yoast-link--more-info:after{content:" \00BB"}.yoast-promo-extension .yoast-link--more-info{background-position:0;display:block;margin:0}.yoast-heading-highlight{color:#a4286a;font-weight:600}.yoast-money-back-guarantee{font-size:1.1em;font-style:italic}.yoast-license-status-active{background:#008a00;color:#fff;padding:3px 6px}.yoast-license-status-inactive{background:#dc3232;color:#fff;padding:3px 6px}.yoast-promoblock.secondary.yoast-promo-extension .yoast-button-container .yoast-subscription-discount{color:#64748b;font-size:12px;margin-bottom:8px;margin-top:-8px;text-align:center} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340-rtl.css new file mode 100644 index 00000000..743427bd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340-rtl.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.wpseo_content_wrapper{display:table;table-layout:fixed;width:100%}.wpseo_content_cell{display:table-cell;height:500px;margin:0;padding:0;vertical-align:top}#wpseo_content_top{width:100%}tr.yst_row{margin:5px 0 0;padding:5px 0 0}#sidebar-container{padding-right:20px;width:300px}tr.yst_row.even{background-color:#f6f6f6}.wpseo_content_wrapper label.select,.wpseo_content_wrapper label.textinput{word-wrap:break-word;float:right;margin:5px 0;width:200px}.wpseo_content_wrapper label.select.error,.wpseo_content_wrapper label.textinput.error{color:#dc3232;font-weight:700}.wpseo_content_wrapper .yoast-inline-label{display:inline-block;float:none;margin:0 0 8px}.wpseo_content_wrapper input.textinput,.wpseo_content_wrapper select,.wpseo_content_wrapper textarea{width:400px}.wpseo_content_wrapper input.number{width:100px}.wpseo_content_wrapper input.large-text,.wpseo_content_wrapper textarea.large-text{width:99%}.wpseo_content_wrapper .select2-container,.wpseo_content_wrapper input.textinput,.wpseo_content_wrapper select.select,.wpseo_content_wrapper textarea.textinput{margin:0 0 15px}.wpseo_content_wrapper input.textinput[aria-invalid=true]{background:#f9dcdc url(../../images/error-icon.svg) no-repeat calc(100% - (100% - 6px));background-size:12px;border:1px solid #dc3232;color:#000;padding-left:24px}.wpseo_content_wrapper input.textinput[aria-invalid=true][aria-describedby]{margin-bottom:.5rem}.wpseo_content_wrapper .yoast-input-validation__error-description{color:#8f1919;margin:0 0 1rem;padding-right:200px;width:400px}.wpseo_content_wrapper input.checkbox,.wpseo_content_wrapper input.checkbox.double,.wpseo_content_wrapper input.radio{margin:6px 0 6px 10px}.wpseo_content_wrapper .textinput.metadesc{height:50px}.wpseo_content_wrapper textarea.import{height:100px;width:500px}.wpseo_content_wrapper p.desc{margin:6px 0 10px;padding:0 25px 8px 0}.wpseo_content_wrapper div.desc.label,.wpseo_content_wrapper p.desc.label{margin:0 0 20px;padding:0 200px 10px 0}.wpseo_content_wrapper h4{clear:both;margin:1.2em 0 .5em}.wpseo_content_wrapper .postbox{margin:10px 0 0 10px}.wpseo_content_wrapper .postbox form{line-height:150%}.wpseo_content_wrapper .text{width:250px}.wpseo_content_wrapper .correct{background-color:green;color:#fff;padding:5px}.wpseo_content_wrapper .wrong{background-color:#dc3232;color:#fff;padding:5px}.wpseo_content_wrapper .wrong code{color:#000;padding:3px 8px}.wpseo_content_wrapper .button.fixit{float:left;margin:0 5px}.wpseo_content_wrapper .button.checkit{float:left;margin:0 5px;padding:5px 8px}.wpseo_content_wrapper .disabled-note{color:#888;margin:0 0 8px}.wpseo_content_wrapper #separator{margin:1em 0 0}.wpseo_content_wrapper #separator input.radio{height:1px;right:-9999em;position:absolute;width:1px}.wpseo_content_wrapper #separator input.radio+label{border:1px solid #ccc;cursor:pointer;float:right;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;margin:.5em 0 0 5px!important;padding:9px 6px;text-align:center;width:30px!important}.wpseo_content_wrapper #separator input.radio:checked+label{background-color:#fff;border:3px solid #a4286a;padding:7px 4px}.wpseo_content_wrapper #separator input.radio:focus+label{outline:2px solid #5b9dd9}.wpseo_content_wrapper .svg-container{text-align:center}.wpseo_content_wrapper .svg-container .dashicons{font-size:100px;height:100px;width:200px}.wpseo_content_wrapper .paper.tab-block button.toggleable-container-trigger{font-size:1.0625rem;padding:16px;width:100%}.wpseo_content_wrapper .paper.tab-block button.toggleable-container-trigger:focus{box-shadow:0 0 3px #084a67cc;outline:1px solid #0066cd;outline-offset:-1px}.wpseo_content_wrapper .paper.tab-block button.toggleable-container-trigger:active{box-shadow:none}.wpseo_content_wrapper .paper.tab-block h2.collapsible-header{margin:0!important;padding:0!important}.wpseo_content_wrapper .paper.tab-block.metabox button.toggleable-container-trigger{color:#555}.wpseo_content_wrapper .paper.tab-block.metabox.wpseotab{border:0;padding:0}.wpseo_content_wrapper .paper.tab-block .paper-container{padding:16px}.wpseo_content_wrapper .paper.tab-block.has-paper-container-no-top-padding .paper-container{padding-top:0}.wpseo_content_wrapper .paper.tab-block .paper-container:first-child{margin-top:0}.wpseo_content_wrapper .paper.tab-block .paper-title{padding:16px}.wpseo_content_wrapper .paper.tab-block .paper-title h2{margin:0}.wpseo_content_wrapper .paper.tab-block .tab-block:first-child{margin-top:0}.wpseo_content_wrapper .wpseo-collapsible-container{background-color:#fff;border-bottom:1px solid #e2e4e7;border-top:1px solid #e2e4e7;margin-top:-1px}.wpseo_content_wrapper .toggleable-container-trigger{background:none;border:0;cursor:pointer;padding:0;text-align:right;width:100%}.wpseo_content_wrapper .toggleable-container-icon{float:left;height:20px;position:relative;width:20px}.wpseo_content_wrapper .toggleable-container-trigger .toggleable-container-icon:after{content:"";display:block;right:-4px;padding:14px;position:absolute;top:-4px}.wpseo_content_wrapper .toggleable-container-hidden{display:none}.wpseo_content_wrapper h3{font-size:1.15em;margin:1em 0 .5em}.wpseo_content_wrapper h3.h2{font-size:1.3em}.wpseo_content_wrapper li,.wpseo_content_wrapper p{max-width:600px}.wpseo_content_wrapper .notice p,.yoast .search-box,.yoast-container .container,.yoast-notification p{max-width:none}table.wpseo th{text-align:right}#wpseo-tabs+.notice{margin-top:1.5em}.wpseo-variable-warning-element{border:1px solid #c62d2d!important}.wpseo-variable-warning{clear:both;color:#c62d2d;margin:5px 0 0;padding:5px}.wpseo-variable-warning code{color:#b02828}.wpseo-variable-warning a{color:#c62d2d}.wpseo_content_wrapper h1.wpseo-redirect-url-title{font-size:1.3em;margin:1em 0 .5em}table.yoast_help{border-collapse:collapse;width:100%}table.yoast_help,table.yoast_help td,table.yoast_help th{border:1px solid #ddd;color:#444}table.yoast_help td,table.yoast_help th{padding:5px 10px;text-align:right;vertical-align:top}table.yoast_help tr{background-color:#f1f1f1}table.yoast_help tr:nth-child(2n){background-color:#fbfbfe}table.yoast_help tr:hover{background-color:#ddd}table.yoast_help thead tr,table.yoast_help thead tr:hover{background-color:#fff}table.yoast_help .yoast-variable-name{font-weight:600;white-space:nowrap}table.yoast_help .yoast-variable-desc{min-width:300px}.yoast-notice-blocking-files code{color:#000;line-height:2}.yoast-notice-blocking-files .button{margin:.5em 0}.wpseo_content_wrapper .yoast-blocking-files-error p{max-width:none}.wpseotab{display:none}.wpseotab.active{display:block}.wpseotab p.expl{margin-right:6px}.wpseotab .tab-block{display:block;margin:30px 0}.wpseotab p.expl strong{font-size:115%}#wpseo-debug-info{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px #0000000a;clear:both;margin:20px 0 0;padding:20px 20px 0}#wpseo-debug-info h2{cursor:auto;margin:0}#wpseo-debug-info .wpseo-debug-heading{font-size:1em}#wpseo-debug-info .wpseo-debug{color:#c00;display:inline-block;padding-right:20px}input.wpseo-new-title,textarea.wpseo-new-metadesc{max-width:100%;width:100%}body.toplevel_page_wpseo_dashboard .wp-badge{background:#0000 url(../../packages/js/images/Yoast_SEO_Icon.svg) no-repeat 50% 10px;background-size:140px 140px;box-shadow:none}#wpseo_progressbar{border:1px solid #006691;height:25px}#wpseo_progressbar .ui-progressbar-value{background:#006691;height:25px}.wpseo-progressbar-wrapper{display:inline;width:100%}.wpseo-progressbar{border:1px solid #006691;display:block;height:25px;width:100%}.wpseo-progressbar .ui-progressbar-value{background:#006691;height:25px}.yoast-sidebar__title{border-bottom:1px solid #a4286a;box-sizing:border-box;color:#a4286a;line-height:19px;margin:5px 0;padding:10px 0;text-align:right;width:100%}.yoast-sidebar__product{background:#a61e69;border-radius:8px;color:#fff;margin-top:34px;padding:24px}.yoast-sidebar__product h2{color:#fff;font-size:22px;font-weight:700}.yoast-get-premium-title{line-height:27px;margin-bottom:12px;margin-top:0}.yoast-get-premium-title span{white-space:nowrap}.yoast-sidebar__product .product-image{margin:-50px auto 16px;max-height:75px;max-width:75px;position:relative;z-index:2}.yoast-sidebar__product .product-image img{border:1px solid #fff;border-radius:12px 12px 12px 0;overflow:hidden}.yoast-sidebar__product p{font-size:1rem;margin-bottom:12px;margin-top:0}.yoast-sidebar__product .yoast-price-micro-copy{font-size:12px;font-weight:300;line-height:20px;margin-bottom:16px;text-align:center}.yoast-sidebar__product .yoast-upsell-hr{border-color:#cd82ab;border-top:1px;margin-bottom:16px}.yoast-sidebar__product .plugin-buy-button .yoast-button-upsell{width:100%}.yoast-sidebar__product .review-container{margin-top:16px}.yoast-sidebar__product .review-container a{color:#fff;text-decoration:none}.yoast-sidebar__product .review-container a .claim{color:#fff;display:block;margin-bottom:12px}.yoast-sidebar__product .review-container .title{color:#fff;font-weight:500;margin-bottom:8px}.yoast-sidebar__product .review-container .title:hover{text-decoration:underline}.yoast-sidebar__product .review-container .rating{display:flex;gap:5px}.yoast-sidebar__product .review-container .rating img{max-height:22px;max-width:22px}.yoast-sidebar__product .review-container .rating .rating-text{font-size:16px;font-weight:600}.yoast-sidebar__product .sidebar__sale_banner_container{margin-right:-24px;margin-top:-40px;overflow-x:hidden;overflow-y:initial;width:calc(100% + 48px)}.yoast-sidebar__product .sidebar__sale_banner_container .sidebar__sale_banner{background:#000;box-shadow:0 -1px 4px 0 #fcd34d,0 1px 4px 0 #fcd34d,0 -1px 0 0 #fcd34d,0 1px 0 0 #fcd34d;color:#fcd34d;font-size:20px;font-weight:500;letter-spacing:.5px;line-height:30px;margin-bottom:20px;margin-right:-30px;margin-top:20px;padding:7px 0;text-align:center;transform:rotate(5deg);width:calc(100% + 60px);z-index:1}.yoast-sidebar__product .sidebar__sale_banner_container .sidebar__sale_banner .banner_text{display:inline-block;margin:0 40px}.yoast-sidebar__product .sidebar__sale_text{border-top:1px solid #fff;font-style:italic;text-align:center}.yoast-sidebar__product .sidebar__sale_text p{font-size:12.5px;margin:12.5px 0}.yoast-sidebar__section{background-color:#fff;border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin:10px 0 20px;padding:16px}.yoast-sidebar__section h2{color:#a4286a;margin-top:0}.yoast-sidebar__section a{color:#0085ba}.yoast-sidebar__section ul{position:relative}.yoast-sidebar__section li{list-style:none;margin-right:20px}.yoast-sidebar__section li:before{content:"+";font-weight:700;right:0;position:absolute}.yoast-sidebar__section div{margin:10px 0 20px;position:relative}.yoast-sidebar__section div img{float:left;height:70px;margin:0 10px 0 0;width:70px}.yoast-sidebar__section div img.alignleft{float:right;margin:0 0 0 10px}.yoast-sidebar__section div p{float:right;margin:0;width:100%}.yoast_premium_upsell{background-color:#fff;border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin-top:2em;max-width:715px;overflow:hidden}.yoast_premium_upsell--container{padding:16px}.black-friday-container{background-color:#1f2937;border-bottom:2px solid #fcd34d;display:flex;padding:8px 16px}.black-friday-container span{color:#fcd34d;font-size:1.2rem;font-weight:600}.yoast_premium_upsell--header{color:#a4286a;font-size:1.7em;font-weight:700;margin-top:.3em}.yoast_premium_upsell--motivation{display:flex;flex-wrap:wrap}.yoast_premium_upsell--motivation li{flex:0 0 50%;list-style:none}.yoast_premium_upsell--argument{padding:0 20px 0 8px}.yoast_premium_upsell--argument:before{content:"+";font-weight:700;right:-16px;margin-left:-10px;position:relative;top:-1px}@media screen and (max-width:480px){.yoast_premium_upsell--motivation{display:block}}.yoast-variable-desc{min-width:300px}.yoast-table-scrollable,.yoast-table-scrollable td,.yoast-table-scrollable th{box-sizing:border-box}.yoast-table-scrollable__container.yoast-has-scroll{overflow:hidden;position:relative}.yoast-table-scrollable__container.yoast-has-scroll:after{border-radius:0 10px 10px 0/0 50% 50% 0;box-shadow:5px 0 10px #00000040;content:"";height:calc(100% - 16px);right:100%;position:absolute;top:0;width:50px}.yoast-table-scrollable__container.yoast-has-scroll .yoast-table-scrollable__inner{overflow-x:scroll;padding-bottom:16px}.yoast-table-scrollable__hintwrapper{display:none}.yoast-table-scrollable__hintwrapper.yoast-has-scroll{display:block;margin:1em 0;text-align:center}.yoast-has-scroll .yoast-table-scrollable__hint{display:inline-block}.yoast-has-scroll .yoast-table-scrollable__hint:before{content:"\21c4";display:inline-block;font-size:20px;line-height:inherit;margin-left:10px;vertical-align:text-top}.yoast-styled-select{align-items:center;display:inline-flex;margin-bottom:1em;position:relative}.yoast-styled-select:after,.yoast-styled-select:before{bottom:0;content:"";pointer-events:none;position:absolute;top:0}.yoast-styled-select:before{left:0;width:28px}.yoast-styled-select:after{border-top:4px solid #0000;border-color:#555 #0000 #0000;border-style:solid;border-width:5px 4px 0;height:0;margin:auto;left:6px;width:0;z-index:1}.yoast-styled-select select{-webkit-appearance:none;appearance:none;background:#0000;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;color:#32373c;height:28px;line-height:1;margin:0;max-width:100%;padding:4px 8px 4px 32px}.yoast-styled-select select.error{border-color:#dc3232;border-width:2px}.wpseo_content_wrapper .yoast-styled-select select.select{margin:0}.yoast-styled-select select:focus{border-color:#5b9dd9}.yoast-styled-select select:-moz-focusring{color:#0000;text-shadow:0 0 0 #32373c}.yoast-styled-select select[disabled]{opacity:.75}.yoast-styled-select select::-ms-expand{display:none}@media screen and (max-width:1024px){.wpseo_content_cell,.wpseo_content_wrapper{display:block;height:auto}#wpseo_content_top{width:auto}#sidebar-container{display:flex;gap:.7rem;padding:0;width:auto}.yoast-sidebar__product .sidebar__sale_banner_container{overflow-y:hidden}#sidebar-container .yoast-sidebar__section{margin-top:5rem}.yoast-sidebar__product-list{border-bottom:1px solid #ddd;display:flex}.yoast-sidebar__product-list div p{word-wrap:break-word;width:calc(100% - 50px)}.yoast-sidebar__product-list .yoast-sidebar__section{border-bottom:none}.yoast-sidebar__product-list .yoast-sidebar__section:first-child{margin-left:40px}}@media screen and (max-width:782px){.wpseo_content_wrapper label.select,.wpseo_content_wrapper label.textinput{display:inline-block;float:none;width:auto}.wpseo_content_wrapper input.textinput,.wpseo_content_wrapper textarea,.wpseo_content_wrapper textarea.textinput{display:block;width:100%}.wpseo_content_wrapper .select2-container,.wpseo_content_wrapper select,.wpseo_content_wrapper select.select{display:block;margin:0 0 5px;max-width:100%}.wpseo_content_wrapper div.desc.label,.wpseo_content_wrapper p.desc.label{padding-right:0}.wpseo_content_wrapper .textinput[aria-invalid=true][aria-describedby]+br{display:none}.wpseo_content_wrapper .yoast-input-validation__error-description{padding-right:0;width:auto}}@media screen and (max-width:600px){.yoast-sidebar__product-list{border-bottom:none;display:block}.yoast-sidebar__product-list .yoast-sidebar__section{border-bottom:1px solid #ddd}.yoast-sidebar__product-list .yoast-sidebar__section p{word-wrap:break-word;padding-right:50px;width:calc(100% - 50px)}}@media screen and (max-width:500px){.yoast-sidebar__product .sidebar__sale_banner_container .sidebar__sale_banner{transform:rotate(4deg)}#sidebar-container{display:block}#sidebar-container .yoast-sidebar__section{margin-top:20px}body.toplevel_page_wpseo_dashboard .wp-badge{background-color:#a4286a;background-size:100px 100px;box-shadow:0 1px 3px #0003;padding-top:80px}}.wpseo-checkmark-ok-icon{background:var(--yoast-svg-icon-check-ok) no-repeat;background-size:18px;float:right;height:18px;margin-left:5px;vertical-align:top;width:18px}.yoast-settings-section:not(:last-child){margin-bottom:40px}.yoast-settings-section .yoast-field-group__title .yoast_help.yoast-help-link{margin:-6px 2px 0 0}#yoast-og-default-image-select .yoast-field-group__title{display:none}.yoast-settings-section.yoast-settings-section-disabled{border:1px solid #ccc;padding:16px;position:relative}.yoast-settings-section.yoast-settings-section-disabled>*{opacity:.5}.yoast-settings-section.yoast-settings-section-disabled .yoast-settings-section-upsell{align-items:center;bottom:0;display:flex;justify-content:center;right:0;opacity:1;position:absolute;left:0;top:0}@keyframes yoast-spin{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340.css new file mode 100644 index 00000000..75d3bd5d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2340.css @@ -0,0 +1 @@ +:root{--yoast-svg-icon-info:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23A4286A' d='M1152 1376v-160q0-14-9-23t-23-9h-96V672q0-14-9-23t-23-9H672q-14 0-23 9t-9 23v160q0 14 9 23t23 9h96v320h-96q-14 0-23 9t-9 23v160q0 14 9 23t23 9h448q14 0 23-9t9-23zm-128-896V320q0-14-9-23t-23-9H800q-14 0-23 9t-9 23v160q0 14 9 23t23 9h192q14 0 23-9t9-23zm640 416q0 209-103 385.5T1281.5 1561 896 1664t-385.5-103T231 1281.5 128 896t103-385.5T510.5 231 896 128t385.5 103T1561 510.5 1664 896z'/%3E%3C/svg%3E");--yoast-svg-icon-check:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-check-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%2377B227' d='M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-right:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662Z'/%3E%3C/svg%3E");--yoast-svg-icon-caret-left:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 192 512' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z'/%3E%3C/svg%3E");--yoast-svg-icon-eye:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5T896 1280t-316.5-131.5T448 832q0-121 61-225-229 117-381 353 133 205 333.5 326.5T896 1408t434.5-121.5T1664 960zM944 576q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5T896 1536t-499.5-139T20 1029Q0 994 0 960t20-69q140-229 376.5-368T896 384t499.5 139T1772 891q20 35 20 69z'/%3E%3C/svg%3E");--yoast-svg-icon-list:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56T0 896t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 1504v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zM384 384q0 80-56 136t-136 56-136-56T0 384t56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5H544q-13 0-22.5-9.5T512 992V800q0-13 9.5-22.5T544 768h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5T1760 512H544q-13 0-22.5-9.5T512 480V288q0-13 9.5-22.5T544 256h1216q13 0 22.5 9.5t9.5 22.5z'/%3E%3C/svg%3E");--yoast-svg-icon-key:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5T0 784q0-160 95-313t248-248 313-95q163 0 265.5 102.5T1024 496q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z'/%3E%3C/svg%3E");--yoast-svg-icon-edit:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23555' d='m491 1536 91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192 416 416-832 832H128v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z'/%3E%3C/svg%3E");--yoast-svg-icon-lock:url('data:image/svg+xml;charset=utf-8,');--yoast-svg-icon-yoast:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23999' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-good:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%237ad03a' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-ok:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23ee7c1b' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-bad:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%23dc3232' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E");--yoast-svg-icon-yoast-noindex:url("data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'%3E%3Cpath fill='%231e8cbe' d='M403 218h691l-26 72H403q-110 0-188.5 79T136 558v771q0 95 60.5 169.5T350 1592q23 5 98 5v72h-45q-140 0-239.5-100T64 1329V558q0-140 99.5-240T403 218zM1254 0h247l-482 1294q-23 61-40.5 103.5t-45 98-54 93.5-64.5 78.5-79.5 65-95.5 41-116 18.5v-195q163-26 220-182 20-52 20-105 0-54-20-106L459 471h228l187 585zm474 558v1111H933q37-55 45-73h678V558q0-85-49.5-155T1477 304l25-67q101 34 163.5 123.5T1728 558z'/%3E%3C/svg%3E")}.wpseo_content_wrapper{display:table;table-layout:fixed;width:100%}.wpseo_content_cell{display:table-cell;height:500px;margin:0;padding:0;vertical-align:top}#wpseo_content_top{width:100%}tr.yst_row{margin:5px 0 0;padding:5px 0 0}#sidebar-container{padding-left:20px;width:300px}tr.yst_row.even{background-color:#f6f6f6}.wpseo_content_wrapper label.select,.wpseo_content_wrapper label.textinput{word-wrap:break-word;float:left;margin:5px 0;width:200px}.wpseo_content_wrapper label.select.error,.wpseo_content_wrapper label.textinput.error{color:#dc3232;font-weight:700}.wpseo_content_wrapper .yoast-inline-label{display:inline-block;float:none;margin:0 0 8px}.wpseo_content_wrapper input.textinput,.wpseo_content_wrapper select,.wpseo_content_wrapper textarea{width:400px}.wpseo_content_wrapper input.number{width:100px}.wpseo_content_wrapper input.large-text,.wpseo_content_wrapper textarea.large-text{width:99%}.wpseo_content_wrapper .select2-container,.wpseo_content_wrapper input.textinput,.wpseo_content_wrapper select.select,.wpseo_content_wrapper textarea.textinput{margin:0 0 15px}.wpseo_content_wrapper input.textinput[aria-invalid=true]{background:#f9dcdc url(../../images/error-icon.svg) no-repeat calc(100% - 6px);background-size:12px;border:1px solid #dc3232;color:#000;padding-right:24px}.wpseo_content_wrapper input.textinput[aria-invalid=true][aria-describedby]{margin-bottom:.5rem}.wpseo_content_wrapper .yoast-input-validation__error-description{color:#8f1919;margin:0 0 1rem;padding-left:200px;width:400px}.wpseo_content_wrapper input.checkbox,.wpseo_content_wrapper input.checkbox.double,.wpseo_content_wrapper input.radio{margin:6px 10px 6px 0}.wpseo_content_wrapper .textinput.metadesc{height:50px}.wpseo_content_wrapper textarea.import{height:100px;width:500px}.wpseo_content_wrapper p.desc{margin:6px 0 10px;padding:0 0 8px 25px}.wpseo_content_wrapper div.desc.label,.wpseo_content_wrapper p.desc.label{margin:0 0 20px;padding:0 0 10px 200px}.wpseo_content_wrapper h4{clear:both;margin:1.2em 0 .5em}.wpseo_content_wrapper .postbox{margin:10px 10px 0 0}.wpseo_content_wrapper .postbox form{line-height:150%}.wpseo_content_wrapper .text{width:250px}.wpseo_content_wrapper .correct{background-color:green;color:#fff;padding:5px}.wpseo_content_wrapper .wrong{background-color:#dc3232;color:#fff;padding:5px}.wpseo_content_wrapper .wrong code{color:#000;padding:3px 8px}.wpseo_content_wrapper .button.fixit{float:right;margin:0 5px}.wpseo_content_wrapper .button.checkit{float:right;margin:0 5px;padding:5px 8px}.wpseo_content_wrapper .disabled-note{color:#888;margin:0 0 8px}.wpseo_content_wrapper #separator{margin:1em 0 0}.wpseo_content_wrapper #separator input.radio{height:1px;left:-9999em;position:absolute;width:1px}.wpseo_content_wrapper #separator input.radio+label{border:1px solid #ccc;cursor:pointer;float:left;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;margin:.5em 5px 0 0!important;padding:9px 6px;text-align:center;width:30px!important}.wpseo_content_wrapper #separator input.radio:checked+label{background-color:#fff;border:3px solid #a4286a;padding:7px 4px}.wpseo_content_wrapper #separator input.radio:focus+label{outline:2px solid #5b9dd9}.wpseo_content_wrapper .svg-container{text-align:center}.wpseo_content_wrapper .svg-container .dashicons{font-size:100px;height:100px;width:200px}.wpseo_content_wrapper .paper.tab-block button.toggleable-container-trigger{font-size:1.0625rem;padding:16px;width:100%}.wpseo_content_wrapper .paper.tab-block button.toggleable-container-trigger:focus{box-shadow:0 0 3px #084a67cc;outline:1px solid #0066cd;outline-offset:-1px}.wpseo_content_wrapper .paper.tab-block button.toggleable-container-trigger:active{box-shadow:none}.wpseo_content_wrapper .paper.tab-block h2.collapsible-header{margin:0!important;padding:0!important}.wpseo_content_wrapper .paper.tab-block.metabox button.toggleable-container-trigger{color:#555}.wpseo_content_wrapper .paper.tab-block.metabox.wpseotab{border:0;padding:0}.wpseo_content_wrapper .paper.tab-block .paper-container{padding:16px}.wpseo_content_wrapper .paper.tab-block.has-paper-container-no-top-padding .paper-container{padding-top:0}.wpseo_content_wrapper .paper.tab-block .paper-container:first-child{margin-top:0}.wpseo_content_wrapper .paper.tab-block .paper-title{padding:16px}.wpseo_content_wrapper .paper.tab-block .paper-title h2{margin:0}.wpseo_content_wrapper .paper.tab-block .tab-block:first-child{margin-top:0}.wpseo_content_wrapper .wpseo-collapsible-container{background-color:#fff;border-bottom:1px solid #e2e4e7;border-top:1px solid #e2e4e7;margin-top:-1px}.wpseo_content_wrapper .toggleable-container-trigger{background:none;border:0;cursor:pointer;padding:0;text-align:left;width:100%}.wpseo_content_wrapper .toggleable-container-icon{float:right;height:20px;position:relative;width:20px}.wpseo_content_wrapper .toggleable-container-trigger .toggleable-container-icon:after{content:"";display:block;left:-4px;padding:14px;position:absolute;top:-4px}.wpseo_content_wrapper .toggleable-container-hidden{display:none}.wpseo_content_wrapper h3{font-size:1.15em;margin:1em 0 .5em}.wpseo_content_wrapper h3.h2{font-size:1.3em}.wpseo_content_wrapper li,.wpseo_content_wrapper p{max-width:600px}.wpseo_content_wrapper .notice p,.yoast .search-box,.yoast-container .container,.yoast-notification p{max-width:none}table.wpseo th{text-align:left}#wpseo-tabs+.notice{margin-top:1.5em}.wpseo-variable-warning-element{border:1px solid #c62d2d!important}.wpseo-variable-warning{clear:both;color:#c62d2d;margin:5px 0 0;padding:5px}.wpseo-variable-warning code{color:#b02828}.wpseo-variable-warning a{color:#c62d2d}.wpseo_content_wrapper h1.wpseo-redirect-url-title{font-size:1.3em;margin:1em 0 .5em}table.yoast_help{border-collapse:collapse;width:100%}table.yoast_help,table.yoast_help td,table.yoast_help th{border:1px solid #ddd;color:#444}table.yoast_help td,table.yoast_help th{padding:5px 10px;text-align:left;vertical-align:top}table.yoast_help tr{background-color:#f1f1f1}table.yoast_help tr:nth-child(2n){background-color:#fbfbfe}table.yoast_help tr:hover{background-color:#ddd}table.yoast_help thead tr,table.yoast_help thead tr:hover{background-color:#fff}table.yoast_help .yoast-variable-name{font-weight:600;white-space:nowrap}table.yoast_help .yoast-variable-desc{min-width:300px}.yoast-notice-blocking-files code{color:#000;line-height:2}.yoast-notice-blocking-files .button{margin:.5em 0}.wpseo_content_wrapper .yoast-blocking-files-error p{max-width:none}.wpseotab{display:none}.wpseotab.active{display:block}.wpseotab p.expl{margin-left:6px}.wpseotab .tab-block{display:block;margin:30px 0}.wpseotab p.expl strong{font-size:115%}#wpseo-debug-info{background-color:#fff;border:1px solid #e5e5e5;box-shadow:0 1px 1px #0000000a;clear:both;margin:20px 0 0;padding:20px 20px 0}#wpseo-debug-info h2{cursor:auto;margin:0}#wpseo-debug-info .wpseo-debug-heading{font-size:1em}#wpseo-debug-info .wpseo-debug{color:#c00;display:inline-block;padding-left:20px}input.wpseo-new-title,textarea.wpseo-new-metadesc{max-width:100%;width:100%}body.toplevel_page_wpseo_dashboard .wp-badge{background:#0000 url(../../packages/js/images/Yoast_SEO_Icon.svg) no-repeat 50% 10px;background-size:140px 140px;box-shadow:none}#wpseo_progressbar{border:1px solid #006691;height:25px}#wpseo_progressbar .ui-progressbar-value{background:#006691;height:25px}.wpseo-progressbar-wrapper{display:inline;width:100%}.wpseo-progressbar{border:1px solid #006691;display:block;height:25px;width:100%}.wpseo-progressbar .ui-progressbar-value{background:#006691;height:25px}.yoast-sidebar__title{border-bottom:1px solid #a4286a;box-sizing:border-box;color:#a4286a;line-height:19px;margin:5px 0;padding:10px 0;text-align:left;width:100%}.yoast-sidebar__product{background:#a61e69;border-radius:8px;color:#fff;margin-top:34px;padding:24px}.yoast-sidebar__product h2{color:#fff;font-size:22px;font-weight:700}.yoast-get-premium-title{line-height:27px;margin-bottom:12px;margin-top:0}.yoast-get-premium-title span{white-space:nowrap}.yoast-sidebar__product .product-image{margin:-50px auto 16px;max-height:75px;max-width:75px;position:relative;z-index:2}.yoast-sidebar__product .product-image img{border:1px solid #fff;border-radius:12px 12px 0 12px;overflow:hidden}.yoast-sidebar__product p{font-size:1rem;margin-bottom:12px;margin-top:0}.yoast-sidebar__product .yoast-price-micro-copy{font-size:12px;font-weight:300;line-height:20px;margin-bottom:16px;text-align:center}.yoast-sidebar__product .yoast-upsell-hr{border-color:#cd82ab;border-top:1px;margin-bottom:16px}.yoast-sidebar__product .plugin-buy-button .yoast-button-upsell{width:100%}.yoast-sidebar__product .review-container{margin-top:16px}.yoast-sidebar__product .review-container a{color:#fff;text-decoration:none}.yoast-sidebar__product .review-container a .claim{color:#fff;display:block;margin-bottom:12px}.yoast-sidebar__product .review-container .title{color:#fff;font-weight:500;margin-bottom:8px}.yoast-sidebar__product .review-container .title:hover{text-decoration:underline}.yoast-sidebar__product .review-container .rating{display:flex;gap:5px}.yoast-sidebar__product .review-container .rating img{max-height:22px;max-width:22px}.yoast-sidebar__product .review-container .rating .rating-text{font-size:16px;font-weight:600}.yoast-sidebar__product .sidebar__sale_banner_container{margin-left:-24px;margin-top:-40px;overflow-x:hidden;overflow-y:initial;width:calc(100% + 48px)}.yoast-sidebar__product .sidebar__sale_banner_container .sidebar__sale_banner{background:#000;box-shadow:0 -1px 4px 0 #fcd34d,0 1px 4px 0 #fcd34d,0 -1px 0 0 #fcd34d,0 1px 0 0 #fcd34d;color:#fcd34d;font-size:20px;font-weight:500;letter-spacing:.5px;line-height:30px;margin-bottom:20px;margin-left:-30px;margin-top:20px;padding:7px 0;text-align:center;transform:rotate(-5deg);width:calc(100% + 60px);z-index:1}.yoast-sidebar__product .sidebar__sale_banner_container .sidebar__sale_banner .banner_text{display:inline-block;margin:0 40px}.yoast-sidebar__product .sidebar__sale_text{border-top:1px solid #fff;font-style:italic;text-align:center}.yoast-sidebar__product .sidebar__sale_text p{font-size:12.5px;margin:12.5px 0}.yoast-sidebar__section{background-color:#fff;border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin:10px 0 20px;padding:16px}.yoast-sidebar__section h2{color:#a4286a;margin-top:0}.yoast-sidebar__section a{color:#0085ba}.yoast-sidebar__section ul{position:relative}.yoast-sidebar__section li{list-style:none;margin-left:20px}.yoast-sidebar__section li:before{content:"+";font-weight:700;left:0;position:absolute}.yoast-sidebar__section div{margin:10px 0 20px;position:relative}.yoast-sidebar__section div img{float:right;height:70px;margin:0 0 0 10px;width:70px}.yoast-sidebar__section div img.alignleft{float:left;margin:0 10px 0 0}.yoast-sidebar__section div p{float:left;margin:0;width:100%}.yoast_premium_upsell{background-color:#fff;border:1px solid #dcdcdc;box-shadow:0 1px 6px 0 #0000004d;margin-top:2em;max-width:715px;overflow:hidden}.yoast_premium_upsell--container{padding:16px}.black-friday-container{background-color:#1f2937;border-bottom:2px solid #fcd34d;display:flex;padding:8px 16px}.black-friday-container span{color:#fcd34d;font-size:1.2rem;font-weight:600}.yoast_premium_upsell--header{color:#a4286a;font-size:1.7em;font-weight:700;margin-top:.3em}.yoast_premium_upsell--motivation{display:flex;flex-wrap:wrap}.yoast_premium_upsell--motivation li{flex:0 0 50%;list-style:none}.yoast_premium_upsell--argument{padding:0 8px 0 20px}.yoast_premium_upsell--argument:before{content:"+";font-weight:700;left:-16px;margin-right:-10px;position:relative;top:-1px}@media screen and (max-width:480px){.yoast_premium_upsell--motivation{display:block}}.yoast-variable-desc{min-width:300px}.yoast-table-scrollable,.yoast-table-scrollable td,.yoast-table-scrollable th{box-sizing:border-box}.yoast-table-scrollable__container.yoast-has-scroll{overflow:hidden;position:relative}.yoast-table-scrollable__container.yoast-has-scroll:after{border-radius:10px 0 0 10px/50% 0 0 50%;box-shadow:-5px 0 10px #00000040;content:"";height:calc(100% - 16px);left:100%;position:absolute;top:0;width:50px}.yoast-table-scrollable__container.yoast-has-scroll .yoast-table-scrollable__inner{overflow-x:scroll;padding-bottom:16px}.yoast-table-scrollable__hintwrapper{display:none}.yoast-table-scrollable__hintwrapper.yoast-has-scroll{display:block;margin:1em 0;text-align:center}.yoast-has-scroll .yoast-table-scrollable__hint{display:inline-block}.yoast-has-scroll .yoast-table-scrollable__hint:before{content:"\21c4";display:inline-block;font-size:20px;line-height:inherit;margin-right:10px;vertical-align:text-top}.yoast-styled-select{align-items:center;display:inline-flex;margin-bottom:1em;position:relative}.yoast-styled-select:after,.yoast-styled-select:before{bottom:0;content:"";pointer-events:none;position:absolute;top:0}.yoast-styled-select:before{right:0;width:28px}.yoast-styled-select:after{border-top:4px solid #0000;border-color:#555 #0000 #0000;border-style:solid;border-width:5px 4px 0;height:0;margin:auto;right:6px;width:0;z-index:1}.yoast-styled-select select{-webkit-appearance:none;appearance:none;background:#0000;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;color:#32373c;height:28px;line-height:1;margin:0;max-width:100%;padding:4px 32px 4px 8px}.yoast-styled-select select.error{border-color:#dc3232;border-width:2px}.wpseo_content_wrapper .yoast-styled-select select.select{margin:0}.yoast-styled-select select:focus{border-color:#5b9dd9}.yoast-styled-select select:-moz-focusring{color:#0000;text-shadow:0 0 0 #32373c}.yoast-styled-select select[disabled]{opacity:.75}.yoast-styled-select select::-ms-expand{display:none}@media screen and (max-width:1024px){.wpseo_content_cell,.wpseo_content_wrapper{display:block;height:auto}#wpseo_content_top{width:auto}#sidebar-container{display:flex;gap:.7rem;padding:0;width:auto}.yoast-sidebar__product .sidebar__sale_banner_container{overflow-y:hidden}#sidebar-container .yoast-sidebar__section{margin-top:5rem}.yoast-sidebar__product-list{border-bottom:1px solid #ddd;display:flex}.yoast-sidebar__product-list div p{word-wrap:break-word;width:calc(100% - 50px)}.yoast-sidebar__product-list .yoast-sidebar__section{border-bottom:none}.yoast-sidebar__product-list .yoast-sidebar__section:first-child{margin-right:40px}}@media screen and (max-width:782px){.wpseo_content_wrapper label.select,.wpseo_content_wrapper label.textinput{display:inline-block;float:none;width:auto}.wpseo_content_wrapper input.textinput,.wpseo_content_wrapper textarea,.wpseo_content_wrapper textarea.textinput{display:block;width:100%}.wpseo_content_wrapper .select2-container,.wpseo_content_wrapper select,.wpseo_content_wrapper select.select{display:block;margin:0 0 5px;max-width:100%}.wpseo_content_wrapper div.desc.label,.wpseo_content_wrapper p.desc.label{padding-left:0}.wpseo_content_wrapper .textinput[aria-invalid=true][aria-describedby]+br{display:none}.wpseo_content_wrapper .yoast-input-validation__error-description{padding-left:0;width:auto}}@media screen and (max-width:600px){.yoast-sidebar__product-list{border-bottom:none;display:block}.yoast-sidebar__product-list .yoast-sidebar__section{border-bottom:1px solid #ddd}.yoast-sidebar__product-list .yoast-sidebar__section p{word-wrap:break-word;padding-left:50px;width:calc(100% - 50px)}}@media screen and (max-width:500px){.yoast-sidebar__product .sidebar__sale_banner_container .sidebar__sale_banner{transform:rotate(-4deg)}#sidebar-container{display:block}#sidebar-container .yoast-sidebar__section{margin-top:20px}body.toplevel_page_wpseo_dashboard .wp-badge{background-color:#a4286a;background-size:100px 100px;box-shadow:0 1px 3px #0003;padding-top:80px}}.wpseo-checkmark-ok-icon{background:var(--yoast-svg-icon-check-ok) no-repeat;background-size:18px;float:left;height:18px;margin-right:5px;vertical-align:top;width:18px}.yoast-settings-section:not(:last-child){margin-bottom:40px}.yoast-settings-section .yoast-field-group__title .yoast_help.yoast-help-link{margin:-6px 0 0 2px}#yoast-og-default-image-select .yoast-field-group__title{display:none}.yoast-settings-section.yoast-settings-section-disabled{border:1px solid #ccc;padding:16px;position:relative}.yoast-settings-section.yoast-settings-section-disabled>*{opacity:.5}.yoast-settings-section.yoast-settings-section-disabled .yoast-settings-section-upsell{align-items:center;bottom:0;display:flex;justify-content:center;left:0;opacity:1;position:absolute;right:0;top:0}@keyframes yoast-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340-rtl.css b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340-rtl.css new file mode 100644 index 00000000..5b462a4c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340-rtl.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 3px 0 10px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}.wpseo-score-title{font-weight:600}#taxonomy_overall{margin-right:87.5%;position:absolute;top:0} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340.css b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340.css new file mode 100644 index 00000000..53b23fd2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2340.css @@ -0,0 +1 @@ +.wpseo-score-icon{background:#888;border-radius:50%!important;display:inline-block!important;height:12px!important;margin:3px 10px 0 3px;vertical-align:top;width:12px!important}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#888}.wpseo-score-icon.noindex{background-color:#1e8cbe}.wpseo-score-title{font-weight:600}#taxonomy_overall{margin-left:87.5%;position:absolute;top:0} \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl b/wp/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl new file mode 100644 index 00000000..b6e0ad17 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl @@ -0,0 +1,145 @@ + + + + + + + XML Sitemap + + + + +
      +

      XML Sitemap

      +

      + Generated by Yoast SEO, this is an XML Sitemap, meant for consumption by search engines.
      + You can find more information about XML sitemaps on sitemaps.org. +

      + +

      + This XML Sitemap Index file contains sitemaps. +

      + + + + + + + + + + + + + + + + + + +
      SitemapLast Modified
      + + + +
      +
      + +

      + This XML Sitemap contains URLs. +

      + + + + + + + + + + + + + + + + + + + +
      URLImagesLast Mod.
      + + + + + + + + + + +
      +
      +
      + + +
      +
      diff --git a/wp/wp-content/plugins/wordpress-seo/images/Yoast_SEO_negative_icon.svg b/wp/wp-content/plugins/wordpress-seo/images/Yoast_SEO_negative_icon.svg new file mode 100644 index 00000000..ad6a6b3e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/Yoast_SEO_negative_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/ai_for_seo_icon_my_yoast.png b/wp/wp-content/plugins/wordpress-seo/images/academy/ai_for_seo_icon_my_yoast.png new file mode 100644 index 0000000000000000000000000000000000000000..4e27c6e221478162e63d589e706f13892b31eec2 GIT binary patch literal 16291 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

      >eqK(e^1UX zoAxo@Bk|UTl7(~CS4vVwBS>DW;92)^BtL5rn(3M_yLb9R!aBlS+k!{D#=nlof1EL% zh7fWGxBpr1vi9Uhw_z@0Eusc-THpNvrgY_5tX|IGV53CG3&R~LjqYC(G+E01+g`XL zF=vI-w7Bn0{+=e57-C1|z0REd5qL6X*(H_LhUmVbHE9D`nbB=JkJ=|W`_q5!yS=;o zn+_x)e){6aBx<;x)E)6%x|GRz?1~PRZ;3$?eJnjLa$~T;7RM?)4^A@~c5qOO9>?t@ zIdv_KYgU7^e`!?Dh!2g~B~T1G3nzG2wt3^+Rs zmJGsTmFIc{VP(I*S7{L1UO0x9?pfI6z<^1yToKXrk)cneV!9q0-b(G|MAo`Rd!Vh6 zT}OM^xhoYIff3T+)!EO?h97q77~UG|ma(*q@x@lCceH$ia;Y8U*=3aF(@IL}9O+gZ zJ;U5t_2hSaA$ba$$LLTM!qXZAy9y)eYn{q{K%V`pg2a=PR30@&!kdCe&cc?D8r;1( z>h|DW`mu2261E2lc-jUUf(X5Zkd?qq_m%{UMLM<&cvir&i6&uma`&6EAvtp>YZyvf zP$mo+l2*YsaD(&u*^eENbx%^>cjLcsex>?ylwR)nm4vF{VqK6_6dQ|(s}FigJYN=j zd*Qmdl&|+-c`ct9HGLRMNi}mHbN}7f@ZdTSx>`aE5&tby>7$jUrUv%xxsemCEfqYj zQaEmsJ0y)ti61XoTCqdF98k9iaD8#v-dJUzZmlPSBvqEb2MdQO z$DBP2tf3irvIDoYl3Z)qzy~s6MV8da^X&30I(cg-=g9%}>a~lCxG?qnl|sg(ii;RK zqM0Bt)Mq2d`@80=H?F%mCC4{UA zQfa}P?nHjeL+LdfEn>S{Cw1$t0_$carIHGE-#B?8122c=vwSJUvsv&$_7m-nyH^*9 zK>E!D$4kATXU4pKmW}^jRE}K0ak zS&Q7*i+3G@LvAXCjetspKem@srT+e7$IuX6(eT+B)?z78M5JFRW6IRX7~(UQ&LI^C z{jTL_aWY>K{@*P!v%RiF(v1}Z>7vmOCs`V19{LPiaQmOY`TK?NS#aA{o8rANw2)f# z!Aj}9DWvjCeUSz0)rx_&!xjiopZwx43vJ7QKTcJ5J^s_vKk;@e4m>JRYS!>gj{6&b zGJ|rR`XZ?aU#^V^qd*y~shlI7zQ1N{Zdl$ z(zND^ypQm-_Tb? z*>7^_(!b7(k#`SG3Vv>v$M-nqafAqmwx@DVZC={rZb&ET$8WXycF{~3#Ktd^&gbQo z=iZcDJp<*Lu#w;VC@vzFw7K#XB@N7Vpp!Xa{TEIeMEF*aO)3v}8A!jyo>k_AU`FHW zuanMm!b$-aIVxE0O8;dOlOgGJ1H%z4@9vKaWon1tp-)QR6HO>PgSq&lSU1BRQck3B zIi>rnol;-ruSXvx)K5Q(3F>9^lWN6TM2#FcjJhRd$zG&eP&mW=P%$+__}dA1s=DI; zy;SVB>lID*yl%czELp?hXn81LP?qRRcGc3i^^IaOc_3Y*wA^Kj5&Fu6fpL@1`bH|) ze-3bThk}Ur)WTT(;X`r$BK>CD!S{~mnAv8VqH^ehJG6_} z>uop#*NUac_wRyl9=&TF3#~s?8&KlO>KUO6zcIoY-D`j7ZaHABt3OP)GV*F@c-GKv zrB{wZN&9@D}1nXYxgc!w$|&r<~-?zjlyBtr~|>A zL((4(q`rT9m9hPX>HCf%b&6dqzqK~g2#9i~xPx#&L`lJ3S zrsm%Dj7ET`xXVK04w zU*;*Ecj76YwU;SftVJlWt6B#}eA1&ac_zL^KbIVA1y?4St!v z*dz&rhGGz9+>fnA!O8lOEb({nD@{4d3-UM@C@$%S7&nsKNi?R$xS3+A7u zFvGa%Y`C%`pHKOyOgta)vaiDSnZ!TDjq9gBYV4dUpOD;ragh5pY9hMxjEgI-S(>YACDzk{4b&2b?VrP8FpCwMBqD zq^OeR;ezSYv0G-zC|%cbhXeWdu?AfO51Xw8a+`CWvJBN7$WQ_@THx`yzD>Mk0M*MG zKvt;u$^~ND-!uH*MR$dJupkN@M-I1gb{}L;XM-5)>e`G#6tr?gxSBPS(F7**SqV}K z3f(tG=ybu{X1!+X-fxuy#)leo7lJ4GK*c7XV|HVZ31&VOUd)zZKQGT33n&39gxoUf z2G{{#8D;RRGpZE9Z5{@Tm4dQqZy_tL=Zc0~W4z6u8F~SnJmlm3$?C4Yf}3Gaz-ybv$0(; z!S@);^K{K?4WuR{%C7$|>{zh=@=$>`xhY2z2fREvA8w?4R^Ko?Sm^;ax!i%z$VGyy zdVe7~J`4X;e56e;wBA!g@D8xTgD_Xy3i>nV9=}oM>#CuvdXZU$zUY$RwF3%Bt1bu2y?4oCEX1M;aQc=n3hwWMa$Xw zPcyMkk}PCLGBcQYKIo)P7k0Hf0$KU`e25`KWl?uVlN4YjS9`li8w$y>9St;Eo}?Ueo)-OU+6jq?E0t3ri4Jv=+n>tI@q1FoTL`9mlWga2 z+J;SSIAg1EjjN{p`b_jVV2i3>$ZF(XR8Hph8wvG-`i+f>{KwwIy=}4c8+3p7J~GVG zR5*+hnDZ{bdhs;C%Ov-hZVY9I*tX?$^V|85n z^Y^-Bh_+#~zww4It(S_FCX}#6Ejqvne^SlO)DRB{zW(vtr~i>>zdDBDBx8bSK2f4J z#mwKck&KW3_2>Z|azdV&j2oywmw`8;rYj~gk$3rO*CtouihO$BM#x+fS6K|bv);Pc zmse8ny0AbuNsNTc7^JKr`vTyF362VzsdKxYiKB+LD_3Y=gCNOrz9S^AsU==es!d$f zL)dN)l}Kjc<*wbmrg81DQ+<+RS9pX5)~5gKP`RCxCONJto6{IfqA#yJcU_GEIps0W2iVkacOvOv`({3SpoN7l_|Cw|>?K z-ybJR2*+_v`i|}IB7e)2Y?D^VpC0L~AhCA5yC22OnuE)125w471mcq)8J<7B{Z~x{ zx%1mpc&;;k-kWkZjS?hj?plY$?I(?BScA~^_)+%HnfqgrYkpUVIDUPrHpmGz73qk9L6V0&}XJSM1 zgkFE-_U|Q?w2(!)a*&U%IbZW$HK5;fo2ffO=2yd7Hje=lzH`|D>}^yAcg~n28STnL zlw6a3**mTO*^U1GS%9#<_1fMlGj&XDVLmp+CW9hy3D@>$ZzQA1`%(qvH@C0GVm?s= z9IPc+j`HlTC5LTccFIC)Ar|VMj(l@pztSE%wZ|^lt;kqT?P{vcc6DBT-cLWzundMU zbeA~+n3Z+bB|N0yt+f(35$H2`WCr(EtAj72yCim^``NqdrLC<`?z0oJy;t}5+**@F zwv8GrueQ$#RP}Q5J4V>s+j~#G=i6HjdiPrJ>K95Ng7v7g2DZ^}Tn2E$TH)v=k-W+~ zzq%Z^a;5HK6fQr2?&b_fVrf*DPLw?FNccfWE;Ok{bB41xeQ(QQKFQYLxKIk4T>J|- zT;y*TQrlC6;@67M*mlRqO^q8uwwll`nfTxaS8c|Q` z^D9eC_32>t!msT0P3;g*^Gb}EeC?H)buA%MGTr$G^z7cHw4R&X9YrY+Q!{@lF4~NZ zMg-=45Rk?(v*wFli}+yI&slbzA?KiC6|NQ;n%>29DR(HX4xL{gGBkaB0w?yoy>-pD zmjk(EI99AG{(y2yVAPOE{UrGzCiqU*a0RMV*7}?=dWv(J!-Xh??YF)OEAS zAesjyqPy+{a*;PJJyfw(4l@QSN=f!ytQq+6UlVP7shd4lVTStZHkeW4c$GKePaKT< zZZ-hi!0$VV!{v6??HMtZKHncingw~CTiU*&lfIV=a+u-i6oooJ&m6lk&Nnk@rn`S* zsR*Sm?lb+v*+L!{N+W#-#-t4OE+{^>82_x?!g%chx%EqBjp)NuL)jA9PR}n?_}0XY zOHMD`$s!dfWJaUY|788eV3zM>ZQ7w`7QgjJP%D%T!Kr~7!MUB4JV_TPhbu&g%adAr z>Hy^&&(w(egPLI?uQH{(&`l&tAeZWIND*c-R)h-106ow|1w|8vczOaeE_3}au? zUJY(lEr4gOdRCaWcSwvagS&toP4@76Mu30qEw~R>`_$U35l~BL2Z+(ARHrX zT>Z3>+O73=oddAk1Z;?}Y)hXLzTc9nf6OOS2Hd*F3wZG#_hhf;HY@FX@9oZ?&KhQK zavpP}2K0wlphH4Ry_(Gm+1V{j%uvEOD+Bnb>1D?j45I5tM4rOW3J0$K^DA7@UD=BM zAa4$*Zh^U!g;uIa1<*}>A*&I1u89SJJ#wBGk8_ebAr zxQF)YQOWghRyOkfJii3E;z^JWq%+c3qo1+l@)_&#H0&pzXKU};)RIE1us?OLx%@D> z>H3$a*zr-H$`aRlgkNP+Q`^0UbmbQ%Ir;e=&)Nq}eUQgN9XRs|Q2yYd0L>+5_Dg5Z zqs%&rnfX>2vOrj`QR;L(B8w!}d#tc^?KFY|-7Yy$gN*iA90*a!ZrsIPeQcl+xZOPN z|F%v4L9&slj5vy*yYn5h}vo zFTy@)nRFAmyU9+TNb;=P{Hx|2as(v*4@@}Is3eZWt=^brPELof4BDQ>G7p1HJ?XG~ zC7^tnSl9qjw!HTQZg|gfb(pz@i_@b$hi=P-Y^^cX{jf5ewl+TI9WVz{O%QT59w?}dJ$q_A|M zIOV9tTgo!cpN@ioaBY>Nv!jyywOPicNd-U+x3NAz@NacRuQRXc(Li6+rZV32yLz$* z3&AGpt7<|qqwd5u@BmR-m9Us=0jf)wd(ipb-n?s)OoV!x1z9q00*o4i*gOK=joF@iO>?40eiNM4!U(s32nb*Qn)(gxg%V#or1k_tg= z3yV&`y?)z!-OYDBO^wEe`YtfQQaM$NYCk5daho4`B57|H04^T(SHVN4EB8e z&jt_K^Qr*j=Ei^aQ0h&NxX1r2VjG-y2E(9wC`ivyV#-ABP>HKLC~CspzlX*?gRxmU zofZb#^I*$E-$cv)eKaWk-^ZaZ)!M1*@?b@71OTF$nfPQpDA1Cpxb+#0MqP%&p0U0? z*a-jc@zKAW80Ql>ofdqsn!xj?^WdJ-k1Z(H)eh8<>pfJP|Hy$RM^t?e?(_X}xG~M6 z;PK%<3M?wuyT#Q%4mHr3?G$oOJj)07FgB7uIcHrDT1ElZ?8Z)=3edk#}5Exo#&@BqbT$6$cPN4ycKv;Asa=<>nJF zT7)3nhkd)Skyzw&C)x(%L%oD&Z`=&=3S`h|w!GBsqImeFw-B*?5+vTL;3t6B08xS`=wJYj7X;HX^3- z2??0T{KnS>cZ&7=yL7(A#bqaU@PH!+u5?jp((Q4G_m(*Zt89Wfizy{ zkRkTupjZ*OnzTE*z**@u66hjHVa>AIliJ=2Eo$FZzO`^3M;vNh8%o+J0nf;#&iVU92M7DoA7#$Iidk;+icu)cjxNFo%hDut}e;d z=%*e}ACC9e5P1n&*Ru3ulQ8Pk0?Va=Qpm!xiJ>9N9gF5mdHJJP3VPf#N<7D3({K)! z+a=~8T8;G;%6Pz)VJ*uthnT+(kG5%`v8FXx%FENH0;`L*;(Q#(B>s+FTo0ZoKqQNW zm4QZJ5XGE}v%q(ix()qMLi1Ffz6FM2<2xnOSCiV^d$POTfbh)W0v>KBpJ9yAoH z(z9(85l4O0&V0hu>`#xu>_+k!4PFq*qX3^U`s@Ky0v74wghsrBY<^~@#kPNN7T(_y z=yPYPbRx~<)dH``5P$z_lb+5>ofv&rhG_WXt!-2!de`MXR>a%0uEYF^d4bK5ztO6f zJ2UX#fj`(UO@T1r`PrkL2$v$l@yR#$8c6%ZE>hk?Pd1a~=0vME=|zLW!vZ7rOD_vy z9^xFR*nL-hz>Kjnfv)fF%)qP)=weX@WYyoM^3KGbpc$G}@cLM8xL(S4Tm?(f%ZSSzS6fpV&MsUuoHH=S9$OcRF z^DdczGM1yxN_q9Qz!~GubFIh7UX5>001UAY{Ke%l9sX6pJ*Bt5zrYxUPp~OiTi2o( zwy)X+IPch6?M^C_iD=!5iDt!qOdc$PexYZIQR(JRwDAcWL=xQ++o^zUQ2*YJ>0+FT zTy*OCp}F{T^kaS9^vGxSG5;m{NL)JH^%X|sOHrmLAO`Q-?OUc6p!+mO4E5ary&Q(N zBhto;0+FWzwrseDU$(V+_a~dC*3@nJ7Yfnetyw%{;xmxuio-8kX?<8}5M#ky`No|< zBjM)DJj8f1$ZTB@WnbxImyoj`jE=$21`Zqx)%*TKZPR@9*|DL0up5Ia=S-wAsNT{7 zIsnrJAum+R!=E(p2erR($6{xLi9>$9oaO}X2J%qq{?KaYwI*#$7gQziUTMY1J9arS z57mALy+we%iy1orTL^f^IT=EgWh(M!td4#OAZe({`(~ z=jETXeX8G^5i#|ciH6J#(Uo!6U`Bj*w#WTVq{asuM2(GSM?gJU@C=1&OtzO5TmG6|p7G2~>{YKP%&Aai zSJ?fD_0uG28+(`g5HvvT*&Xfq=6)}WDJKCf@jPkZk`Oq$jwL$L__7S@QPW>42ZRgn z6{pR25Pnx+&#|-8576%Q8FW2JoSXihvou*pfz35FL5=a1N&Og*`bjP%5duv#?_>^8 zi^9-?!8IioRkcH+0RmuAvD@vpmH36g@F%x6$9Jk@VDwLwm5(=5(m9LiK5uBSWc=pm z;CAIOP_k%-Fpk}jK6BoXh3hzC(0qRz8(Pr1skO!@)m&kexpXg!5f4 zmoaIEGdICh-rT#7+(+J>7Q<=&8J9UU`_mI~U%AGLyvl#f`tO^+t6Ljs14MqePfD$u z9vGN05dpy#1*|1o>C;^!zSMYbbw4onOYXSFPy%Y_PcC8fBWVNkidZTnnB`H+jd*PF z=@X>d*SGQG=RVEdHdLRTJ1Gdfxd=fk3n5wz?02Fw$EC9uxL_N{#YPzAsH~!2^SmUd z@#ZWR8LTi?fx)=`j9IVb&X`rb3iL0<(A=U1vLvwld{~)*1@M$YG1AzALgv{;6{v7L`J@`=+X_ygRhARDsIdGBxDAR}qV@7J7;39X z+ltetTJH#!`hKsy5*qqd!9wU@`ViH~(OsK5sLb7fD}j9eBU!^xL8gxO<1@DSQ5rW{_XnQQLGCJU|Z9{;232sO)8tU|xB^`=6NqbbZeWCXIn! z>&u7m!tFohK{0z^7YhMMaxb6`0O;;J0$uxe7sYtx5SH-1sy+jK$A3hJRp{!{ctJz5 z);wtRLnDlsG zfF>BTc5GPY+}j;>5eZ2st8>Wf#eQwcaKh!6?=MLGYa&&~)s^FQ zdE#f2%}^*y=`xD|DO(>~rJ}kpU7m2&%Xd-7&#G|F%jmYw`53HxpILD`Q)kaNt8p$j zXY-?@JSg`&N1VGWy-Y71{=_)vX=^xD>2 zhX2SlzqJ!Of9qZBJ})LH_R%5+Wr+#hS~32COnn@Af-f9bG<5O0Y$QQgW%<)D_DK!_ z4A$GpsqpRK;#g1q#1S}sIz1D{Y*kyxWt;M?mmMP_!PQ=!AUV(;Q zPA)K5M)OM(R22O%(YZ=swepUXPh)^JfA_uOq1QJs_&k%|#_ zyGk%^&deBam9oeIMb7$nn#fJ!=N5zf+89CiE>diCiWUOF2SdaI9pC zc!E%PVzTaNjH0!yq^mZJU%};OV14A@kGG+DP@XKjnBBE_`bkn*sGV-}yB)bWA|P{h<}NfagvYQO6y(FM-c((HbW+ z!kAL@!Z4kCZI17JP}Ukt3#PRSzrd5@=3uP%03o{hbVDMR3FNn-wlO@m@hP%xO#;q0 z6~SVpPgOB)#YDc@igVEK7ygsgk;CES z3yil&y;OKlwUBzZjWr1~g_e8r@86Qs#|5QDnnh5PTY~nq&U?**_J1_Qc55oObHNyb zx-|p#Q%}L$#V6_zCZ)eL`bYvCV0TWWeC09~l~tYe2j!}fGsABs!d_^(lux#qfsVjK zQMNlzx7w&YAdMYlNd58e7rXf?84Xy*&SIK_ckYLcnAT4sc(=8l@5d(KNFVIdj*DL_ z;5qx?K8RR9YQkP7-W>V$QV{d>7MM2InA;u%-6;dOofU`!q$Bxrql8jz{jeiJ-awKc_ zo#YPjjnP8RVTsFg#tMmf1nKKjL#ggUBcrnE*Ur2{-q~r1G-Z@=pr!L(PV_GkAk-0a z#%er_$wh14_EDu1voRbco?#^MHaS)q5^8KaS3s`+ZL@bxu2@QFV+2Hv{WP?An{L;i z*g>PjaFU#s`BDDF#YA+8=eAxCqj1gEN4Sr-*=oaJZo{{fzUd>vi-j*o{!EZerE)n(0nu&)PA!W+QvrxHs*Y@qNeTE__~aQjE+kxuY-LLH_G$=Pq<36-Fk_6=FE|9!K$w`PlBE z9K2qwpi<9S$g%=DyJmZQPjrX<9?%cS!o;z{hN z$Vk~+$PcMCtLk3MQ*8!%u#P_BxxCv!(F0vh^No4_+njp>m6S%CsRF#djz@dehZ+hc zpA)zXS01?-{?zewe1Fp3nyI(EbfB)s_lQ~tdv^&cl1K_Ogs$C&A~ zV5MaOTGp*mYD0$jJZwa5(vJP-=8MZ)4AybA5-O|t4kiR#J!bqKJt)d{I&f`mMK)X` zaSKVC|K2C+mWAJFt@OBk1;4rVJ>s*M(n2;~u<*9mRM3E*X>H#IUnNfhA>JqXw&zN} zTdLIU+=^uA{AdNw{`#zrAb1yy)_&otK6v@X0$`K$Z#TqXMbaZ4=On-Ag{3g;aWS%I z;&)P!Vzg1C6K`0IVEd!7rh{wE+2n;k`MkTlk3#4`$Q}iwN#oGj#WI?k|&K15>^koq>43h_9i%OB>D{ zNXPqO^$+7Wb%?+MeR)PF>k!*~rt?SxsK6ip40w*tmTz`~b7v&Vy2#6k+MZS(|ZL3k-i@SwkIm)0Jh%4u!D zqJyf#cTa#b5p4;&=0}9NM;}2Q>A4hig={sC0hgevwL@I3zBShaXbXor$hE8w4RaZW zZ`BYTt(lN!+nZg=wN6boCO@@i8!mQ9=|i><{si8SagcGd?DD(9F6-D3CDesXdz6E; zo%s&=NGC=)b;3ojg$Z_G{#*LRGUfZ-XI5lgT@rrl`J=FpO0K?CnICS=h(}Xuqm~&p zgFvm)Y7CZcu$#=HM&RJ$3}!HFS% z51%7@P3lJ8vX$T^GE56EEAP^Qeob%v6jlQEn?jBRF|}tRSI8xLolHKMiEC>PC(cQPPS?YIQPVX3-WmkkG7o7h7C9MU<{}eoV-+ih#Eb_547jL>^-seKh z!>b%5$#Se0ZDRkN3Fougy0HiWKHf-lVS>Bks3l3S`_~_?t-6|PVCEhy^odH_v!)35 zmb@nt^spQVLUN? zG!~R<2aZ*|QRd*|+LTN~hPz!{_0@y4VIJxwE!3Hc!;oqVv{%(}Ml54r4)AeRuS~i1 zI1_&F<6oy{|9dGFs*uY*gBK8riYiF>m8A$8y-=}d3N7R>1PkcBTwmHuyr4F+!fSg> zFVw{=jgXp^QQZq+Yo2hle<;~y$%mmBb<{az@XuP|=AO|3kUg1GE9~LuL?r9V3BOSC zO1}@iCBg4)&GabpSF3t8L@}@FpcdSP+cF?%d0MiJ#(sZwr7uiPbOCxnxJezWpRo(x zQV0Rzk9Va}T`|4S>&x@Fde7m^1*th;{`~rV&&0N{EZIfmj)Tn#c#AY3&WT3(zBSWT znHSZ`u1KKhX-G>@^CzNi-V%u3YD^j0 zePh+J9meOAVpN6SqAX16C#f@m(fLi~=a;MOgKkepTjWgJx2;uxj_hvfFN(|#FgmMI zaU2+JdVr7k7|W-C1I}W*j5v5tdRlE`;zW=f|DlOF#bIa4X#?3Iz?Ail7?cz I-6wwk59{%sbN~PV literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/all_around_seo.png b/wp/wp-content/plugins/wordpress-seo/images/academy/all_around_seo.png new file mode 100644 index 0000000000000000000000000000000000000000..c63aa729a87a3f7bbfec66c97a014d8f23820a5f GIT binary patch literal 8249 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 rkQ~%PbLBDd!>+of;2IR7t^@T#yTTlNB1)69O literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/block_editor.png b/wp/wp-content/plugins/wordpress-seo/images/academy/block_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..bb47a94a4db9793e36f25c6cb056ea69ebfd095d GIT binary patch literal 1441 zcmeAS@N?(olHy`uVBq!ia0y~yV1CKK!1$Ge87Q(h!@mVcEe-Gqah-q5KY2%u|JrW1 zDW$=aqOB%2S8fYcpT3fz@igFYSb;in+wu@Cv5lgR? zib+wcYfD=av0zogf>~+(^%1T0-jmk)F03kA7**Tukes9HF(oy9if=)KWlUv|SNAdN zj?{?mki;72kOE8h_L#_N6JpxR0;)@$x(g$k=h>BSQlDOsQJ8Jf6PwWGoR;t5P?%&@ zTx%@xkvp7$fn~d=i(^Oym^rm91aTv^?Ewqqcb5FD-SBDu$)ZUhGr&G-Ly;7L+)=Y`EkI z#Ehtd5D6qfglf1TvJqfGR3kuUHlv%1#WI*H;O1KFhv-@+68+97;(kin#6`9Re)A*W zxZO_4i`~tRaQp&x6wUv9yf;?wp7Kh!d24g)w}l{oKlZk-3}5Yi|H`|y*BHa!6JvdV z6^36CHiCkSSifR~;eryFa~~RM!b2ZRC>@x>z5Pz=hJ7c`D7jWYm}9s3M(?(hcXs9R zgMu6**g+BcFV&hkcV>6l>s&3g1hPe>+Nx%wtj-p3Mqq%7P5)=>Fz8bNBnk@ZmVG)n z?cgmncQ&v1HJ_Ouyn==qM!;T}7s|iwBe(nA+gILwJ^#~mM&7cp-vKd)er@_Lcjrv% zp{v#)Eg0Gm@c~bJ7=b&5kBG>pRt8!o^7^p&Z8c+lySN8(bLw8+o>Db`@;zoyy2YC4 z8a0pJdi+8DYks4!POa#HtJVcf=y?#sX|N;+_cD3uz0vmY{S8`=1upZ0(wnENpUXO@ GgeCwt5*sc6 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/copywriting.png b/wp/wp-content/plugins/wordpress-seo/images/academy/copywriting.png new file mode 100644 index 0000000000000000000000000000000000000000..50812e745a89a1bfd2be005b09abcc9f58e14326 GIT binary patch literal 5630 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/crawlability.png b/wp/wp-content/plugins/wordpress-seo/images/academy/crawlability.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7c573f20fd408a9a44591e848a6fc84218e02d GIT binary patch literal 9760 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/ecommerce.png b/wp/wp-content/plugins/wordpress-seo/images/academy/ecommerce.png new file mode 100644 index 0000000000000000000000000000000000000000..26af3317a481f8f968143a5b0c0b4e899de1e0c1 GIT binary patch literal 6167 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 Wy#D!yAovF{Oxl`yH_FuS2mKElolY$P literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/keyword_research.png b/wp/wp-content/plugins/wordpress-seo/images/academy/keyword_research.png new file mode 100644 index 0000000000000000000000000000000000000000..75d5d451770c9a348a2b5ecc4787eb985b3cf498 GIT binary patch literal 4934 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/local.png b/wp/wp-content/plugins/wordpress-seo/images/academy/local.png new file mode 100644 index 0000000000000000000000000000000000000000..6916755fea9f3127d84529db09d5a36cd38f6df3 GIT binary patch literal 8257 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/seo_for_beginners.png b/wp/wp-content/plugins/wordpress-seo/images/academy/seo_for_beginners.png new file mode 100644 index 0000000000000000000000000000000000000000..4c932b2f8d9dcd8c462980b6fa4d7672ec123170 GIT binary patch literal 4337 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 Qe`Uao_09DvQCIK$4@M0(fB*mh literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/academy/seo_for_wp.png b/wp/wp-content/plugins/wordpress-seo/images/academy/seo_for_wp.png new file mode 100644 index 0000000000000000000000000000000000000000..363417eeb25452f37268ba212cfead7b76fb85f4 GIT binary patch literal 7855 zcmX|mc_5Tg7x!3aN|vl;@6DR6lx$%pB)hV&BN7?ALCx4njjba4HpreqS!WuwAPHmN z$x=qPFt%azJ>K{GzW<&%_uPB#IrrS(J-;&;GZQ`5v;1d4AP}qmU7h8R1Dx zb}`JBD0=S_29F%60v$6@BQ$&MIVjqd0Ks8z_hrk_kY|op!!6Kd9-`dp8`*r`x z?O!h={*Eh|w);YUy>s+uYKvGk=eB+@cSzeE*?iwVvzGMj{ygQ|^4@UMBAU$|gKDx$ zAF|+g^%q3*wWA?%ih9Qu=u3FLRd*tKC6B@~(ly|N9|CP=p8-E5-JynrR{vM>*6o+Pk#7p1a2; zv-d;tR+EV81BQ$GV=7MOA2wrTYT`X&>b<%=-n{xMq~qUXyYbKNk%;NZnbIR~PrAdf z&G|!QkcOpint@@@Ki?7yyAnGFScHs~VGm-}Ez2t`>}m1WSa%M}(?)zjyA*L07Sy(Auq9Bb9f|7H<%sTM)pRBfrvx}0`{KTmS+Q;Y+k2WR_icdLbSde41 z3d*;Qj)Q{2a)wo0Dikajuc2ckmMILxMD*=yj@N(~i6U=x<~;7&h_HJ+c!(Yo-M|G9$iGZT>Q3?ZNV%f!9EF4JJJDPQ&S*rIV-C)rj;K2@w)=e>wASnJRcx1DzTNAvNbn@IHf$1Pu1__Gb(JS2Z!|=Vw}=F;<_I$Ug~;O+YH-0kQz`H%TDm$&OW2B zrPk0+&q!P-*73c$upF9l{>a~kgbfLML+;s1Xz0Gf@avhS^OihL&MihAf2|1PsrBF+vy&)@)46s*vL%T;Sa%mTw`W%5 zt0ObY&Ai=k`RI!Cr{uO#_oFvQfkpnkm=IYrlKH+kHT)gDza^|a>6CO@twSXNn6ITm$=HktF39i?oXM^EI z%8Sbm{`b>6hdHr!AuVYG^q%Q1JOd9qb>gzeN1p0fA{cuSL|5XlM=3bl9C7}TY^Xy%EnqBzP zxCu!1JAqZ{ddwoctyzWyxA}ODk+@N)qip}d5j$rX$G{Tm3rlV*m8c0g$f=;xJGKab zWxs8WrFSDrSt#n=luz_?_OB8UmZ?LnvD-_HP6t>zW8n@@etsdm_C3E#ar~1O(4wt)oD)<^0gH1N`0A_UW;h9YTf4Mbp9|B&)mYj7cT4iPUIsc z=krz@a;fmw`#lBBMFGoiZ7!3|Y+@H{EZt!u(<`pzA{)X*2n-Gd0P4yBPrNY($k6Ex z4Q@nY=$$yGCruB=Y)N|YQYe9S!4nTb2r5Xu%<1D|4NvM^_`LM_FC=C2Giuzo(;V`E zeDu6iXmM;Gdhtp9b=dRURs8b@h+Y*4)w@V>`_`mw1S2mblQ09>yopRoNieQohRwSe-@^u0 zFrB4SNE!J8cQ8zf!Lr9AUH-eSRP40C>P5avHUs3yPt58{NRQqL3)0E&Zz9%u5R2GP zFVzV-PpQ)JJ?=Q_wYZ}XyR>weh9V~*09-C%r#{r4E6xML7A;>Y6E){OuH@N6#k#L& z!H=XzFYKRth83Cc`MFr5QQY`eWgz{5#YY>$n+4gwMC>zbxwVdl>;aj_$@quO0tbYw z@2N)f=P3rw4QOk4QPsQ3(#A*4gxza^M_1V(=)89V+Xo2Gcn-_9^ar6^g0(iqclHyp zo6qbB))aC4ApT?{J3YMq!{;ofR=y`TuHVv*8l_$IA_N@!P3!Iueha`h!TeH|AvQ%a zv&O==Bnv}duZ*9GY*+rSHZPCcHNGU?k%VNAOVMvzVPkB)oF9j7Ds+z@U=Io*8UCV8!Z`~MFupn6 z$_OT~ot=>LRY*4q=l77V2DZs`K`M<`VPMyNF?!5v(LQTZoyCarxMSNYGen@#_`xp` zF`BezRG)&{0+_fOwm!RMR)h#2q>XxwEwmRh9WxVCP)-Ev_zdzDneEG84w%&B)P@t) zh59e90jmb_Ynf10wthM}9C*>q!D>*#QkF7KMXPJ%ITdy|)*J`>qB6WkZCHOQJ;1{> zm5@Mq)sg+VnCTdR@YSp1GYjJQ`yUD;mT!gkF;q{(NHR`i8@qsTH2L90UD;8JOh|k4 z@K$qh4Pa};N^B_XZEhF5B?i0s^f<6SNb(OFEj3`{aX`8rWT)(HQo+?EfndFzfN`A(JT1QiH`~vMEd(Niz zd`vPl5fLO(FoR05@428=fLtzK!o{+y{k}F=9;NII1%lhcN2^n}eC z9qZ7+ndB5SuO=DNr84HPWmdV4)3F|Zb$kcLg484fhAMa9E1o|&9S2Ig`p)zs>tvDi&jxsNh^hRA2e_bxL1P*wLg zyQ*35$QHA%rZB)`P!zaXZexDn5v2m#BpA8%hGB5E5^7(dsxRC8z_3kK2lsv8O+MTE zo*a7dNPcud0XTdf_&jbkM8LB%Cak-(d_sPyR~C>GHUez-?-$9)Vg`SjSid{eIy!qn z>%O(jx@U^L=kfS`Nt&(JWLB|aW*4@}p?bzXA2__Fi5*?mSgrcMA|)_Vd}h0&#hVS4|V*`N>TQT>1^rIU9UBjTZEaNZ73 zFY2(N#DfAVZtU6?$*ghTr6$eM=Ow8~U4W~}?{yPq4Ux2#i@LqPm6qLkPfsAB0p070 z+0a@E*nJ-=!Ya0aQE7i-UJ$6NWxSc6uubtbGctuDF84if zhUYfruBO5^dEkVQFB#;sJ)F~v7`d}o!!@{Zou2a|E`w6u@4djVvCs?|bKrtyUC2go zk_IGMe)y1N9)EgJOQ1f_oc*guo2g(beQ;})`}jX&yW-RwTDjJ?YS%k3(avk#DG9*L zwVH$o5fizq;*0h~65XiPFsI{#;!ELSx9Z#1z+p`!TE=Qs(}0q3;k_RfZh4+xJw?6A+`18e#(d7q-3>GX0h#Ypg>n z41hh&^J#t13ZkCalp?=&2?}R|JijNuQ&$kDimdIkm331G4guF6llI?4Rrl*-PFCTQ z7`C~#RC-~pBLh|E+jlJy`%WqLb6+WXNB9_a5z9+jTI%)fp zD*WB|l}}os2ZViaM2Jh2G9Lx!vOa6DZ6G62RA3v4MSy!LlrFgXR+UmDw#uhs?GNyr z-rPD~$N=ikKbUJuyB!UCUX}ozRNl>HD7mt8ujtAMkeUKn-%REuaMG56CQ^Leg5?|+ZZV-ixs8p|4`v1);$ut3hphhZ;4|o&%~->xa2C8 zoa17gjC0BUtU_kj9*l5-|5zZ}jle{8G*H=BSlHP)IXOwE8C2oB%;};v@43YpP)5>z zRRbQ@%j~@nPL#>#BOL^U_sAlbknEn5VH4z)U#7U&2 z1UQan{XG|rs}=a5<16nS-)DsZXt!exUyTmj5%I$5srJ#6D^QZL-2GFE%;fEJb^aow z<6{K_fFk?c_0JKPxD|t4t-t(+EWn!8_fOC+5-U?5ok6ZzRV1^oD^}#;`t7nE> zR3%p;F~z?K0Aubb>j!khakZ9~s{1koHwFl*BM{Rn-YR4hiFL0)%ME075Q?>P=tRjv z1>)3rM!!%`y66*Eg0LZFBrY_mI;36a{d%1aJmab+kdOb&I^dXAu_(d1Ctz6r&uSew z4?7NEwQ<|kA%Go|rkSeqd>e3|l!y!P4^PJEU=e>Q97Ay`%0?%P_rw2e4Xe>}Aayab zUM~=Qi%T7Muk!=5XgVc)>*YVzRSv%oLBkhFczO)&mCFa%|Xv8+x?*-UIZIC#szNOaw{Y^^jiL;D(aVZGkon3W#!cdaPF%l6^ z9~O;x>JJ=;rtP0r9p4v*rrqq0ErMrQ{EU^76rrAPme{DpdA#khStf~TM{X(ecJD_w zK(I}G8>V%o9@?+?E!3F@poq(h)BD=o2!)MbG9q$NlH^mrR-PvAE6ZFPwLmyc7mhU( zCIal=Ne5^iPVfR(l}GzhOa>xLRRq3t;RXW-#c{dV&58zaO!*67mgo%%AMMh?b)$X# z^umu%h^Ov#(2it#KE*c}9?n((NjA?*6rvU`t%~)$(0cJI;421hD>GQN} zfphi2jTrfeXOR~+=FSMINt4!Jmp=)#@bu>9~R13r~YXlsI4iz`psd# zMm8SWmN5o+$ww%hR64AF_%Be4bqOrb&4jW7+Eh;ZLC@XdMG^(vEL^|mRNN-PNVEu2 z1FQ{bWdzP|Ji2mfVGCxO)OjBlv9YB)PfxRgs6p^Y?5H`9H%kJ1*-1OEi=h4I)Sx7E z#R8@3w)Cdfeu>0#OHa#X;EK@;q2`RZD4&vCc0$X0o_0oEjKuoN;69YU**@I}1t4~K zdI)N22t0Fx$J}Lu8SmmP#^?xmP;-El>9+Ps)t4CaYNF;;IG6*Ov%_XS=i%*XQvI@R zNnzB7`Eh2QAN@E5-p~EMDD1ZJwMo@4 z#Y{j|B5^j%+{pZ?rS3hfyDESln__3za5IQJ`YqlI*XELf{QGahdjPBTI;eP_f8AOYh&fv6>H=IyZbMLf5%^eP!sY| z12~6f87I4A#b7u#u#kz7I9M&NJKS6UU9r0(sqwU+XLNiWkXM;C8h3Ju*R4nNrcPW=$4MNpcOsaQxkm`|%6OLE<1r`Eo zr%p`D$44qAiZkbKg#&3ftC;+*2O-~?oS@|R96%QE;&;!*-M4enchm{3eE{;*yX4xY zTeEIZI1T~$T^Sks#xo2aY=CTNY=R1|wiRdHN^S!?btp6c%g0|&UyA4P*XmL`@;?2nWW}u_Ps8O)jc&4mHqEGPjRahRX%*0ypFLZX9vn<^vtxieQ z|4vu&qs-E`a8QtAUu)lY%L_(dBGckA#VyBeib;zMr+VrdT>by@3?IC7=lvFgEvwGQ zkoQN0^SJ_RfF3o0higb7{L#OSzdNrzgt!6${h_`_%o_V1+@wEQcbAxOiKFvTJ*lJ@5!dn$$V6T z{dB8z!AM9y@}~U}`u-ojs39VaZH}g&{jB3>gBtsW z6=r5?Sg!IEwo(70(2GZ6qAwpthaBb2+%VQUc~Q1vRknkZ0~MO?Jwl^hU0pTK^l{Na zG*Dw=!JtAdj!2Sg$YLodR+#Xdo&&We%n~UU{E`vM*+QU)UZ}POb5MimL_d4Bs*c56iFl zAt$%;ZF_LxLz#m%c;Rf={6sddT)&31IjEmg`u>cCxSWTQWt6I&twCr=n0eLX^)t>ag>5#2 zm3@=+Hn+(N=?!@158MVGc}M{ffq@BI06OXG?t zUJjE!Pfvktzhl4=Yq4JJWdXGg2do)TkVV(e@IuL^H1xxd zvsIH?EexT?yNV&HZfd%YpP4wQ@evtDht5f33!pYJovM5}uGzlz6D&h)YmqB{Sv*E5 zMvDw8l&s>hY8IfufZVHa@?R2qx0OL~6Qw+?rUbI;sr63e$Fhl1_!?4lH?mAdctOud ztf3aWem`y3z4m^xap3<|RnEWwBQ@ppn)Qj>-6Pxok}#z1+oJ-))D0Tu4XB#EV)QoGSU_olAsSgjo{eO|zjx{P>q~iVFh%Nd z;`tD2RaW+(1F`uW_=xR|>;|F=>}LgnL>Q>cida?1If<4{7%96A^|GvqMT5+a9?vr#rVG?mkA*^*-s zGa(E)ZX*<9jBWSU=li%Hzx)3E9`|4O{@CNX-mmBL^?JUZulM`<=eklH>@4_?oIJwC z#l>%BX?C59i<`p5wQutK-~4i&(4|A?OnPTEV*vD>(BP)yMYd9!>fX?P2U#ArgzmOZvV;TiW~+ zwltrzLNWh@HmF6YXFNL>8g%K7i?FtqyrrIMLadUr<$)u->>f1(TvPHMd_ffp9z7Th zJimo@`SIGep~$;`upgi!@wL#h;EAPM;$0b0K2(~?7{V?#&dwn<&~6mZFCl86DpHYZ zU7etZEdcn&-XPaq-|l(1w}54Ck!~(dZxFJWEY>>iE`!DLzkZgvySc|=?J=2jCbKYH zYlq3)nRr8EGPaluDucmT{l39q{ATQFm*l7VURr1D0k6uc$RAsqe80N4H#0M{vbXnZ zZ})<#>hj)hTtWiw(=3p2D$tC<>U!C?otxA5Cr{o7mLXq$bs&7;Qz8!J)(j*c>? zPJN+mBHz99^z`hZQGfsb-L*wcgSd5WQ9HJ%(2k}>QeXSlM%&f~Wo>PFjo7-mzWN1% z-Q2)zuD4Lvo2h@^Z~QJTD{G?uDV-Raov4}FSg7CljokQc66ag9z9yljtQX-`wZ0mM z`e2?Mj96dwN=dpN6?x*c)ayU1@&;OEe^%0m`ZaBBihlnRmX>-?o-g>lZ0_R?jETxy zTfUQ*Q#$`MYi+5xIXiuoLhJzdtgno|aY}qziLrf;9uUtUyDD{`W;r3HY5aw^eugK1-b<&4dca8$45IC_g4` zrhJE-Ys5Wett_sK`l?Ug9U6I%+Ms*rjRA$cHE+*oBe=!o-)zs?yRWWp)M(XRCd;Z; z;G1lCuCSi*ZIpp3U*oXZ1iMBn4zq4%W8@5GvGVRo7YY zot;=7usrM5SE~R+xqo`(f9G@f_zv$}Z)s-~MJ%DBo4oaLZE8zlPw-wPbX_x``}Jeq zxjvN+aVd#}3O^~0ju!j3j`^q}U+to%nTNCS`_BiH0*DWh& zkpdQK6wNU+xsorfZ%ly2@Cnt3ZDURKjN&U9XTHQ4DX3^6+%Su)rO* zHb}+5vx~*pTdjD5<IXbvm~X8fS$8PXQG;AhHzH)4GQ4gPAN{(f8}}IxGCzQ>if)69Y}+SLU5}>( zR=fMa8VS5}6??xs6DsU?|0MYq8Z3W4dlcf#{h}1yIQjiYM{Dr|OqBt>HrZUOajAo% zkk+*$3>gVZt>~6PPiCHRbl+lbwaACJqyZPAyua{AqD z43}z_zj`cV(T#*_Xu`EJK8N&-7X|Q<2pzaj*Guy6=LYTP`!Dv(`yT-eldvv(^qwo z`mTu7Rnn@BvklE}u9L7-Wo-2S)A>ARf%vC6G;m_Gxpv~Egn@z2DKr(M`t?lXGl`L! z(8ZnB&e;V!?PjeJoxc0_rJC;@=nVS>x0rWIc@SLdtldQDs%Q+TQC|D#!NF^#%}E6X zvJF31n5^krPhTkbE>zE&X;nwx?wZ>k4<{_wC>yHn8XD{2a?ZJk^=yE)pBLMPySbP} zKXKU+zhrrpD0zqq6?~rBZ~AHv}2+eXuIY@Zj zOqtY8TQj$GZu-tTAC8o#u58=x`QcLtP%BUlqBAxggsk~Aq`EIeSb&^#!RA=bLut`- z>0Ctu5;l^fu*>EZ_Hs#)Z&{S`?*y%ohf~eCVR(M;=w@(Yn=5>03vkdi%K%=C+ut75 z?6`Dstueo;86DgGehdUu#a??z#=jX0iJLh?DN z;g(aTlbH?+Wj2|5Rv^9_V;V7Me8aP9ty(ar^Z>?eJom#ockj>m!ukW87GT(+6c>sdTe1aWQdO*Sy-|CC^|Y9 z+vgYNIA;BpEztnHt#AqlGoSqxsH933Bi^{);b`n!5fkAU<#jMc4O2z^Vk-6aV(ndJ zm{Y}WgkynNtn=Q|w|1{Up`(FH!fb^Q;<4s|y*QENRKu6|QF(X8i8qv-I2}RIRh(rt zR8_3^!>ZpWrgeY}S*q(-S{M_5e{{4uPbi>O_yf8bq#$}^fOTk1rH)!^(z$oVdat{*V;HX<376gS&pJ)Q=xjnqP#Bcxn^MaQ*f?4 z0rRRI5}=OR^iwp>d#mKl>|++S9!s3B)fiO8%DI*VGll*>b^R1Ju80V zLU3K_Z&g;*7TiMB%4JZlRpCC$Wqf=p%7M~pxMt-NA_r-1REhp0d47Jr6IVehwha0vw(9u$9G+HF1}lZ^6;We_D8T2%g0KvPQC+z7k?&Rmm$Ifx z)rqD&&&y?;%aT-7q_axz%0aY!QArVZc=W-?=|xoH3CfC9yFPdiI%!vw1PcrdEPYXG zA=j#}LzG`pzeJ2T!eKBmR?z|})PG4!thm$rA6ThxXq0eP83tH!s|5Fd=74reBQDlAn$gNOVT+pSoI;xeL(6_wDyZaS* z7Vljs=Nk~OmoW3V62yM)UzGCUL8NY>%;k$E#jMaN%8R914*Wx#`#sU*haP*-Y#|$; zHefOq>}!}Wpw2xs?Zms9cChyenb}tI9=x+IT=yAVCYsN@CeQ}_-9DS!_IQ^7?{%rY zIV^}E9ZH~BCGMi!pu5TDO|9e2PgKlErFG9b-TCK|+ysYM@t>$S)wB3yst?cx{3qN^ z&z0M>O>XKnH7TaagoapMuOn?<$`2IF?|<_}_8arn31Wb#H7`(L^^yxUe7V|mN46Ur zxE!t_Qt2V{!|OnPf0gCI)eJ}8Rh4C{GvKc4@5}3e&0g*J%(xzn@IpO%XV=F}sWKkh zQ9F#ZNYcWX*+u4cHdvxcE2M8jn79!xp&2l~_w0zN4)3y3gW2}_of=*s#`su1vS>@{ zg56I&U6V5?jQ{ac$H3V;NRou+rCV$slLCbq}0I@JbBp06TP3l{tIU3fZh2PxWDy@N)UOXDM;1t z_~-QzDC*<6V+%asS4j5#v#9l@AM{YWl>?|GvMPy;6QH#_%J9+x$)$=)Fg;e-izp= zt0gb)P*4I+p6G~qz2#}+trU}B5}wl^rgZJcdu_qq+oy$>_5sP~3x)MW9vQzuwSoB+ z=f|dnAL}N$ndCut1-kly!!ug{BrgC;-XxPtqhwWNMz4iHDdW7EAl$XXtCFFd@umSW z5v?bu)-`V$*d&e7l}2n~y=X6vV=L4pv%Y$zwi2O=Cs@EZK5}Jh<5qreky}V=4Nqk0 zH^^g?4+r=^Tx|6`d9R){*7`3}B?{{|fQ9U~drWm?-QtZiQaJyzDtXxQ0s|%BiSB2& zeFhcwI0wJL5Agu-Pl8W|ni{99`&YklAuI>yvg=Y!{4*J5Y|#E(wvoFJ2$VDmGu~v` zFGM?FyYsuAasuVaBh|+gd4pz;{(TR4fy9m#@6yo#@WQ)=y{5t~~5ro7VOLUZcBr@73Gm(<0GeEDj z4kp!#O6Xidg$-s%eiK_}DfA)E3P1au4`Kr}{sl<#-7v}1Gd%f4jLZouQKvjhg%P55 zQ2+C*0rc(nYKwgZYU3xrG4321=xQ(sJ6lhvIlAM)%aq=Mx=i}wFRN1MgY^%lP z_0uNbAmY1^%^k^IQq2Vg%O+Sw9@|;{(4`yyHsA!|LdG9I{g~24a!sVnfqDvi?N7rD z?(WtXI-7`Ug{bNo#%SI}vpn8Z>Cm2W+<3E5`z&z96wOx3TV9Ss)hhU#wY z?d{mgQdy%heTeE4s_h&FDSE%1MB=^ZmIDm8xJMLfw9K&T-$ST2pz4nHuVBG07FFB* z!`>u7QTEWh>1nm4HiDY9QDa!)bIBW5KL=-qy`rfkjuZ=oyWkILbLRDf`)|{SS9r$r)5% zSuWl@7*y&}gYs`+8QQ@BPVw6ZH)=0Vvd@ulFVsJ%9A>a6Ow`u0UB1hiYadkA1dMCO+xND$^3M5LX@%sS)S~J} zt``1c3F;L+JLH%~*ef<@i_Tqxh*FNuj;!wxdz6AewB14@N?r4fGcw|Qh{P`Tl|l}^Je?rD`d_^4o9 z*xFQUQpV9u7R{vy;8eoiix+{)QqV(@28r0XN7;$pPfq9vuJ&zIS6d*C2)@#CRu~ks zO`;qk&p4SVd`ygM|I)Rsz&rz^vXj836~Ff?6Htar{hPCB1jTkLpH6}*tpSUyNa_VezXA{1^6llt?@i!*6+$1@5F z3aozPZLKXVcN~1Y2j-RuzV^L+dha85KODV!DcdSd_m1XW04C=9>tBTqQq`cD-N`!E zo3#G?;)kTKgV%Ee6epWH>+lP*G)Cd^(OK zJrZ?k^T=cjKBF2h^ZI&Dpm-TLyA4Q$>WK{wtX1*QI-u_E?#9}=ijyivl(WjFzC4lBoRE_fpg{mWaZqv6Cs9SP#e!1EKrrfLBTF1qZ&CU22bV$3YSr3ifTDDp6igDp*s9z z8!&t-6JY%h{PsabMvb>JII4${zziCN;ost0+ggnirz}I3uc4h1bVIMQgS5>@7&%EY ztL1ye?Q#ses2--}@vQYVG$4Tx?};+WOCr+35^zCs3madcm{@#KQBlp8Ybk^a`*WC5 zP+|09=5A_eFiTYX)-9+Dc?ya&F^njdTz1eY0~Z;9*nHZlc+ra}jNO4cd~3fGSz-Ch zAJv>dp)%@P5t7prcW5x}W0eGPvfsYcU-teGOj`y%aR4Rei{^0Go+Y(Y*pZi!wlmtQm{ngA7pmb>bB3De)KMo%p*;yi)Ll(*FP4(BG5CYihAalZKy?Lgb zF7soG$g?K)9E77|cF$>`Jev98w+|>XblFq-CQFlf|3N=vza-6>92y+tqVuC(9L{as zOd)msbtgd!Wh4AZkZxas*VV=RsBb;MiIV*|(VkWeNXR$mnQF-DPo&P;ua&tccQ`u= zAtTP-Qu;j)2-Pn=W{LQin7s9mZxy8+&;SoLkMdsA)#ev=4S?8`Fc~V`W_L_M=5NKJ zzd0G%6~m{o9W8=%!Xx9YD89cTM*QWQ<;wyshW59FLxUrAWWEv zOW*U$0pHqxC{h@Gxg&0Z<9-eHz8;EQYPiBl=pstFy}kIJ+Fydqs)jp9!-a}rMV`pv zo!^Hs^VU+FGC$}3?doyE(!x)q2@7DTpnR2W_6q&QACB2Ua&NEgl(81I?m~|6X?1N9(PX=>NhyArOB1npO(p-oH~di~vw%jZ7f zn(8m3$~Ml}c;Eby#-=4@qQ{N^r=b3)XI`2_m|Z2dP4Ypk(h^rVoSPy;zG4tD?wP0}(6W{d z#VA~U@eoh?@ZpZ+{2C`{ImNn3d-d0}kf7kar?VxPau{WnYa&R+lxBCjT;)P8G+kxXMz%%a2TH%CeQ9H$Igdg8 zduw$*0Bw|?Kuh;cKg)3BJ?||FGeZAw*6Hr4?{)a_B%*~}t;QU=`Y+W-!^_blwy=FfPF*zZF?6b?J-PDQo zk?Pbac`yV?*??s%-F77r(`k-So=BPtS=9B%b)!@VwtbUuQ&+p#V2?6C?+z^#s0C*tb6JWAY-G3Ou9Fima|%LI zIem!3$+P8&bg{b$XKBiVaq*Qo>4frp4Y~J}Gpjp_!!4ox;NVE7r`OTz-DkwhZ>@I^ zV7YB9D3-vJg)P6ru`!X}^Cx3K{41#Ai8H+Q_4R#y$|To!eV!TZeYOw@@0-8;E?`tW zNUtONLp|Vp->W{~)9nv;F0K4COfJr1)kW+|P1o$QPKXoveMCH?Grm3Y5Nq>3Cv{m0 z0bRTPPi5F%9dK}ZD_%p4$Q!==sxF%~E8J9TQTl`uSRmjY_wXc^^`{wUPGiU%Jw*Gw z{;n5f`L(OigRAlRhk+NJ$M_H!qz=O`euDK49IX1YPcsO+Co^F>eR(Eg3?#rD^g^rY zu{zpaw`WK}eTO1uHmCQkAcQo7qSl^OgBMk>=0tQ)d(?Xj@8h7_+j9B z_o2vqfng8W)P{w$i~Mmu-5btXD|+K9Jo)b$kfUes!7liD{$m^Yyb|HWDCZeYKCDbs zgXx6`#>S6c)&3OCw;YXf-x{0Qek?Flt`i^J97H$yP!_bR4cwgPir^Zf8!`yiywV`*Jssf<4N&{ki3CAqOa;Mwt{(2uKtvkF^C;6qzIpYY`#i!2?~UT zD**AJya8U06jG1bo*_6(vF4ZIADSHjXT>wnQ;kSbze*B z@sthuT~?2Uln!02Z)ISzE5* zlQ;h6y-@f zZ{02&rQX8e@ow5qE7v&Z1iQcRJ^)WR(E2Qta%ryq{KvKOBC6{k zAd%wGTK+Wn*4CBkr$hI`9mT~qUH`a>zq{JUqV`M5zr_GCY;aX`s+=LiED9 zg}jr45&>Nx*I&kV4{~_k87n z2Pt8Ko~M8nGB;&``zSA)62Muj4z04lireFsE+%w0ZfQ$V$|Lx5aF+DV@&Dm6&{w|o zAIgUDQ>qb%B4~y-4JUACv6uCaQQS?krIW!n5|l@l%?(-q?Xtx(KFk!opKu|dLRof_ za20)oAXS}>e8OQ^Te4pLU$MV1h9_GzTc{=>H#4rOAq$xRPFkw)OXYCn7+r#t@xPfk z^^j*cng2#^$#K$K!jw%b{1X2{A*;vOTq?I&gTbKF4(Q|YERIx%9O(em&I;xj>02wo5A>AYJ)q6hbNdS|JCd>wT{Y5*$frinas zS~?<5u`j7K#||G+klOsE zbh(?k`v`02#Q`;K$02D$dZPnLZba}oq)-llcR6r9N2Vw4xeR&qTwo!bA0DP3hl~eo zQIFK7;DR7k<>2@2JiKDb=5~uT7VvGyJ8!?zg#g8p$?X>Ai538V zEd2pnZoqWCK=-GBC3|*glIO#k>E^@@n<9em&(d(i>40iDfTA8hpo0Yf10Bz}uvKk9 zX|?U|Go}&!xQ24DNc>d&(;&w=W_`oCl4x3O5`zrZl2{2p*K1wRph%5Tr+l0!0 zkl4<%OiB%>nY!Cpewh<8E;5SI{qBq-wD>qzpZjR>&u=PS^JQ&LGyS}Cr&cI)4 y=A^S(p8o|SW8z51?PF&scPu3QvCv-HxM)PKFusJ~O(vd*Ao{aDkXV2dzrro!9N@{LJ z4h9ymX?gQq|C>U$eS)gdz@?<8%dl6Mckh(;zKo)I@)o49juJk1Er+cuVKYpx6%`c)1qGized_D$!{KlhOvg(H zt=4zHQ^#O%1V@z&SEH*Qw^b2&kde=WjUB!?wi2Be&Cs|wNk+lr;X_J1845t37Z z-}gGl;BOY-rSNAMBkIpo|C#V_0k+|yq>dYEr*~BHts7OM$?Ikhb$MpeEUk_k`;)i& zF%6FSdF-gUg>l1mwnkb}i4de+HTu(UK0U2I18g;FcFd{7Q%8apk+6K5lN(>K-4KL` z8a@~0=tEQ|0{5yO&esWHC+Jcwog;dbGU2ORkoK_tJWUeT_L+GCti(Ug76^B>sgt;t z7vQ4Btyq~0E9KH~Q?>y#;DqEZ{_beg-3CqW0ZVE_j`p6eqOE$+z-EN5oM#OU-HzQu zt#xAyoC^w0{K0sejm1mUs}g^9nSpzaYS=IZDP4T-wKZ;S=0{MGnR24cS~T{28xkG` z=cZh}fg2KPkld(9x%e$_1$P)jZ75m9JJm3rZJ4(YP0Z-d?1J6lWMfxR{s&!#_hE;*KbpLRj2->|h{>U&nT zP?O7opWocMs{7Ytp39|sSIfu~6=U;U5Iyt&uJyWP;m{fl5_Sf*GVM5Y%u_|?zM^6# z#=+*jA24(-tjO$O*=S1hKk58@zw`OY1kj-3{M4hCm4#cSS+=>qk6=}gNvr-58GqQ^ zQm4biLMAN;`(^s~70%p55Rvy{P4~8Pw|+|ecB##R`Lg+~{l`7myjMc%Vzrl~r?Ua$ zPKKoeW>U(u`dgOus`py73qvZ?mxJ0}y5>*q47iqx?5tn%Z8R7M$Ot9)4VG`Bhi<0t zSK=G$pu0{80 zs?uO$O;1t)5H7GIY}Cc8vW-(0grpLw_S)D^!g$Hqm1ocK;A@y2 z4xR8=5VBDnupeKXTLkuH>f&fJvO{<4^#^ZxxAg%rOJ?y6xOHi~*!-33@aGDdCoQ&V&ymbQ3rL;x6=U*B+A^gXGj+yqc7Mdd1Uc@-rgLNj7X|athr!E9 z*v$JhL+Y#=mMLsXJ`D=t@i$X_C=@U|t1`WmW{g1K&?f5aLiSLeeIjfx$8BgbkWN+% zt1Mz-6F_v;m?@=?mr4Ba`c(j;2Q842Zm)-WkSsLC_5dKmLS5WVM%=^}U_xoQ=Bm{E zqYjE(^UA^t@M!JXtZR`&YlDYc<1u=%IlnJX!C+7y4%Ts^wsM z-x)MW|COF_A@>rb#2j6iHi2|bAcdO^Sf9;XvHX3=n;-*FT)O^55fbxXn3BN|n?mda z7^IdVC4zq*+Fy`?wn0zYn1=Y2_T#O{E0s(IYE7KOSHPg{Z;`ct>3^g$fP|+7Z#09{ zNv|F3vtrv-G8fOmpCe2b>Apgi{ToeLj?&iumY9#>8ldB5@!&b}z%Qd=lN8K1_XM~X zC;)-qXa-jIDEM^!X{PnF#KjA8)=ifmPh03zf%lP!S*K$lH%TWh0t7W z^A+|tIih@pPF6{^7RBXi^dnQ~HzOwZ%o4~DQLUOzgE)C%)52sGJa*=xa@8VK7wFD& z@(icfl&Ijt1_(dGshn|W%H#vtWqdN3s6|p2pOwbi&>~#6z)g$DJQS0X>V|txM7F^O zq1Eq!pJa!-DWr$ujDX7PYrZJ&4|1!FGIi73K|-gI;JWCv_s?a1BM+5HmlvUr&k|Fb z*G`Y(eyCc+6 zlO@BFM%B6|?d!s70@d}qqW5F4;3pU0$h;TE8Z6orP+Aj!HWD+^XtUCA{s!NS4PL9W zdOAgDWusGX!8mgVZdztJ`pgzu5nZvBcyUXU6(G)t66iww;3yxM=%#z&+R2DL6wjEh zG`FU>{!pb4jUWAUGBl;6K~xfjm{flbEkEhTpo?YPvY{9^o8xrt7KeT|8t?%x+&fUxKYYp<9h)B+z7QR{7);Bqc?H)fS5>K^vHYT$me75HS?;ckfx15A#HsK< z)>8q-DnWC7&8ekO&~oIEsHg66Z{0rh{krxIge#|bb}2aPzIP)NvAI+Dk#@6zAZ8&q zay`YfB07OqKkU6`R-b^V9+){d@%b%bcv^%^USw>lw9P5?85Gqvn-6#}BRoYE_;mos zdiroyd=-ScP3+R}nl9gdJ##AJPKQ#_n*%1^vpf6G;s-0xm?_50cr2CrTf z?YMC%U2@={nxsQ#BF9cpC|QMkw1d+dwU>lF`cz-Cw!MiFbZblRSTbL-H4v{TzpnC0 z>LWd~WKj)lTpMuancSc_eXU{(anA*d*)hUIVDVthoh7h`95hq*saOROVrk*CWlE4Q zn`frhNb%f)Te$#uh}LwtbmQ-1t>2 z-sI?xqj9Rgh@E9WBrW)e5}G&FRu(e5tT)h|T1?>0(4ht33iXK4Y7VH7s{)x&(APcf*eY@Z3g@*Rr_k9ONa(YzUdhLQsW&u7Gx zzg*2%I`v}wvDB?w#!pR$$w$+gj)cI6IzO%HY{;^T;&7 zzL(`Z#Oa=X_yUkG$Y<&}nO^`0!+)L=3F!wD|r$JzSdx3R=`1S(~3aJ`o|`=Ci@iM7HFDWHAnhL!nU1 z%gfc()jfS<_gT+gHGbTEAjJIl1jln}J^{t|SYwGwGTMBrcKg!m0Z~lXPqevJT@>fnEWc8-_xpp|HNNIomcay^Y8zh z7u7C~ixvh2OEcq>F)Cs~#uQ8I^J5Q~OPH+{ETt;KBi?dpIJ0wT@tryv^)!489Tf>Np6JA$|v0TDyM zLr4UdLuJMY;^hB}$xcHEw_GD+I_qn=KNQ3*{s0Ws17ZOmb36$F0&x28+rcjt6G%Rw`5&h1A ze@%rCJhi8*^^=&+tC=Y^x&5{h$02nMp;0| zji6z-%eFM4HLXyRJ}bFo=ZJ~tCGzeFV#nI#!q8r^Xs?f*{w#j^%%fCzbaP9vg$TEKti#>sby9^H(P z3n=3%MEI6}DubpU$aj?_%-mkXl<#7v#9;rS{1f-VDz1X4L;5c`G|HFDfs?e`(#*sU zVXsu!K;=oXWz)~{uQUe$Q2%16!J?c*#5@a&3yP6VE8wvCQ8Jn@1qvTVx z>mX-GY^!zQ-}dqJkyz&%gXwwW?sS1!sGtX`dOI-AXE2@jGE*|0a)sD5T_SYB7%FzC z@z=}A^5(PmA-Fi(oj(13`4|1Y20;dIuP8$ICs#J8Rcax)%J*o#O{&;tB4q6el?7{5 zF*ixlEc{b=Vr%0%Nje3u!u4g9yxak9bN%Bm<+)2GH^7~tYx>Tn`12%3dukuq)6pal zT)>FV$LAz;zPTHxg^1h_5CztA=B!*{#=n)s1T$H#`~IOG8(%PSC~H<}RB;~)!Bl10 zE+0R$HjX7vXi1eEH+#)@;4p%w6s*Aw%+CTh_tY>0-0Bq9q}l`TvZ+WO%+n!75+ag* z04xcBeFZG*^AZHoC6^W#fCPHI)w3uw5-{jyPa4Y80VnGk=aVcF(a8q*=U2fL%#|`d zEo8au(KeARlDDqx{W&a<=2jWHGs)IMGTI@&YSEnb706Zq@*BK?{EVnE1K5TwA;Aa< zq?C;-c|Uv#Y~EDmY4-aAd4iSMlbW+PfZqqta)*HSz$b($8L(3A%0UFPEA)zaaX;Wr zs1zJ}>jdPGMY&>o3A*t-4T4)SC%CmT-!S=`i*N1!17wL}(sG?}Jqp29QvlfgZQU1O zU%~Rff&JTLZ`{%ps&mwoyBsLHH1Tx4O~_uFiI@}Oe3xDuAQYumOBqVZt&$S!Dn3(? zzl!)N8Je-6pxiK-iF_6mAM>>z&b$L<0_N9FV?Ztyf6to6dtyNUJ}aM@2zm^3;l{R1 zTsR~huX^jp-Iz>Su=_^=u3rVr)Vjtm`DN1ET;o+kp#N8A{L-Os`ha3u=!!f8RK!F) z6mMx5^rJnP%vkn{J@Nd;6yAuA=W60MgG!o`&c8->s_Svg_j)(X<7`#34s5y{X+U;a zyXnYsqg*;Mv9K{*-O03qK~;wcg18JV)9ziSc8r2OPNrfPte)FWt7=iJkpLIRpyJl_ z$hCIZWTshF`P-Y?Jv5^kX;-af{k8T;Pb0GKx7`G>yA4D2w#!v%?UGgJIbP3t=Uml! zICV%`38fj$?bj&6V`Y#FMT{;s177%7rKbAsunS_h(WS})oDI>qk#)<7YgU6JDdB1qBcUc;)M;BOmxmolTx{ zMZU_Nm6+;jk7vAwWK2XHh{J~$1B@2GtBpAu@^y5XObvY>{)M2`W5(qdwfnBDQ}}3A zaQ3un^qh?vH~a>pDuqGq&c0N##-HM;T^gw+YN}`N^}q6J^M~ZA9Cr{WMwj9^(Va3j zhc*~;`s-4Stc8ZS^{s9m2sLGWC?bV+Xm_^V;BV|BgCH~odw80geC&sw-{m-`wU_3! zEY=b#7;vUxhbUY2j8Ehqm^_pgydw4Z;?Qfqq1*G1jWu#)X&oaLz}w&u+M^vkzUw=) zlrW}Pc!L%=({)1`h~T}jPjJF_4RFVVoehP{5B$!8Lh948^g|9)9y_k`(5jX2#t&>@ zV8p+WRWILpFWAJ7ca*qwIQh@Hy}u6lEgqPEP6VKr-Hp=P@gv)PTB+6 zaX`~2jZteNbi`t}BEBz7v*rV2Zy4kPlV+$ptUG{8!(b3QCmX%p zZ}+yk$I*f`mN1@}sM}tz7?6Y8?Yp6pgrh_SeK9qT?@<_*Q_i~*;8xUL_c+X}fL(>{ zo2;vDs2_Sd`;t@a-XRp^oz~!`gOvE97@@7k^;DOv~79hBr;F? zk(K?#I~{f&SvCLlM!2Yt^!bx&`*lP($FD)XVX2AH*RqI$Zs^|a8Bj!TGkiK=w|DyX zT9eQbHND=q=Fng&bwM=Vbr*o~<_kAv08W}D^jy4_e(B%9?py*DJo;Qo4@fqo!4&J@G&56@CRr$piK(U%}pxspEM(%?weBuUJz1`-2^0`}6xZJIkO+!hNC2W+K~DonaPxRD!E10pf=5AZ zs@m|4FUHFj^TMzVnv!Qn`XK(-ohx$j_ZPOO^xZuHeRL{a>fp6Tj~(Y5K`uC+Nw*ro z>Q85hWH7F7NcP&n#T!G+rJ>432PAe2Aq&npnnUdt|aeLwJ&@D#x|0 z_&spj0ekRIh(Hk^Iu7c)B@|Wg@XJ7FIQ``cC-xxA4;ZV79Tr}k04~~AjM8k8h^I~O zwEV9PSwz}nI;`;bbsb*-m$&s=On`i_rM;FAG*4Gfk|nuGyDkDHBeeJX&jWg1PhIk9 zPRr2?0yKQ)OAg(O1%cq-w**nPRMOLwtlaOFK*abx$iL!4$?@94y|V~cz0bGl%i9Xx z$r!Fe<>UvI-sn}0QTyY_Vo&#$ zXPIB(3l_Yb7c#<_lZ~sR4YUXpy*hQhzha@MmKcWl*okiV1|J?s##uk>%YXN)wqT{L zXt}@U2fkviy?Qh|vm@>8Xk}TMhWk*kEy2QV`?L9C;q9#trVADBZEg>TUflor#*2Z! zyV+{ji+C^?4&VN2Q}rzGi_;SWRQBt@+YE-*JEvT*XGG;O#r9DS`s)n~4`WMll@=0M_RU+7kcTW~}% zI#d_^s(`F!fNgdNh|;_jQILp-)m=wzb^6&RoY@%8DJ6Q`j+J~EQ(W{c*DXV_jZb!k zQaSl9qvo(;D*k$VSGZfQbOyVsT|&Y4*jK#*XCsRYu%h~fXHDx`{EH(BvJa@`@LeWw zpPL=7E5*HkkXBl%W>a)f*(dvLz4xo$&g!6o;&PZ@?fuBavUf(&`B)AWw`e8!yR#j) z;gwc_cjIKuP}$4|TV~ny^JL#KCg%&lTq8gM7SFFa}s*Qs!6i13yx~j84;6-*=B0Csz2Cw0@cR z9qpH1-`Sr_=qUZtmss6;C!^LVuI$72@ua3scmV-jOz_RE5%bGz>K(4_8M*2jefxIQ zmHUYZgJ<{5!pxAFTjv4LC1kD`>tD5cvTvcEW8cT~Y;5_Sd!1$HZGev)Ww>PD7XUWw zKbsU3%W8Pw^nbSeav&-Jh=M@>cVjJx<^5j`#QxX*#}57=^nZY`pI70N7RZfe6&w9X z-6~I^YZV7h3x^lS8N(>4{!Hq2-r^j-?fL6nI%zGDUmZB3nQRK=uU>f1h`DxA>Nt$^ z(aGCrM``!(hs7SgyJUYWELU|doVV`cJ4V8_?}f*pq`~~}foF`tMOQ5M9tqL)Yh-dr z`*tcN{`e?)fQ#PEh0wE{Qr{cPBJbv#9h?Z;b-nf>JmIc)ynK-KYfX?AEaXCfcA9Y( z62^(&!ZH+yXDV-gOD7#I9f-Ckq9AYFZk!_)Zk@}RyxxQ!FO#9xq;5ln`1Bm)d7@`uZ_;_QKn(BNu%%GV4 zkuEz0*~;sSmNv~{;ukB(SBlU{gkci2@YDX4w6%~QyBirGOj{Fq*R3n#_&ik2<$J9jC)`^^%QHRLy{*tal9!U{ITxvw z2AyMuH(%z*FP?&)>S{9E`n(^b%=rwt*VF8%p`PICdunOF7Af`43|0N|vBwLwU2o1O z*Qf!M^AR6r&jYZo?hVeo=~qf+_P6X~<_jm?QAJOVw5r(6z180*MN`?$M2#C8H{q6_1^X7TuKi$Sj1c1ylJ z6vTfzBrtG?^m{K9J{S88U=!-7RrM*E4A!ns%AFfbaOH>oFgAJowz#9fdQS-1#Rda~ z=Br?+>eru~+qn~M8qRyj(O?R@b$G`kjBD>DbgYBKQ)(mwdbk?Eb<+)!r49b+Ms4{ zp38j?3!&AgR~udRB%mL8g7SVC$G)!3RxiM^OHFAV~_n-b5^M8`Qyrd zIx-T#?+No>jNLInAK*{zT^kS1t?m8Zk#M`tfq=dAa!hs4X8)ygewW%!roUj+ZzR>4Ecbj$ z*oY)p04j*a2$Ccthl}?+>X>wc`+GYjUFSEO7oFg?!surK5!p8`W?+PLWQ;_gz9r2H zOjjJo=mF0VCa6zdZ3O9i!fnNr*MVb`*6;t)jNwcxVSGL#b+qX?`e#hj>ZiJ`P)OK6 z>M$QQ3+dMvxm{ipzNr}TV87eser4+Q`ItwzZ-!a`^3Wu=aNeH?@&pcewy625*7|3$ zM*l43W}K#7qR>SL-;7ynpy-))YSxxJCSMR8XX?g<(QAUX{P~*hjEjVCj%_SJG>sQd z7Wp(~0|<)e^8UV}cV7(k{+>p5eK+)&(b^341b%bjX%JZCV}H{k<>tTZY4e*WJue+l z-SI4V_?plplLe%?iz;x+JJ(#$JwmOqYMI<@{-3UU^j_kO-xv+sseS`E%5$R zlVtiYNX1j09h5W7M|#QPkl1b?(f_4s=V?pxECyppk_Y&PQhJ9+;PsqdH;YBliD)34BzYvqlBSh)?di2^1Eo_H?lKl(3F-LK%e7vMZBLo{@*K z;3rlTJ5D`wT%7mJ|NFJ1e++dkpA(dMh~dn)fj<6i5bPVA2ik;ZPMIltY{sLqE) zj}hu_dFpWwHkR;#FO~-h+of4SvNzY6M>)QHw?S*IUf$)$5V&*fDV5PULFJJRJs+EM zvh(Y5FixgcarB{ndFA%ymlIek9Z!ilb`oxI=VVZ;b$g}T)|-nA(+8@AkZCvIxrA$V zi}Nw9{v4{E-ed`TV9lST1k%rsY*fvlmbUs+?I+RcM+6^aXG_&r17E}~<^%7w9?uWwibFyIIG5|_uwWMxv9uPflArpVyEof%ZS#Q`LpcYm1fyq=783q(pLwo*&e)fa>^Ti zaJKafWARLn}6NYq_KuCz{?5^S1i64h?6Jv<76fBPcoDT-xW%hwdyT`JSi`cn1$p z=%8-HiUJoP!8d$0;h8GPHHojV;J#e#2rS;1^TdO=*Fz8f(b`8Ki8$pwNjyZYIvjNE z?4uz}!bq?GF&L-KhbazgSE7EQr97lv<>ka%0j1xiw{f>CwnDrQi8)lyaJW4n=3-iMx@uec{)jg084`ITjCe~p~h0j`Kn(Kptrs565Colr3Yf7}Fv2LNYn@>)C zm&~B(xy(&~mS&`Zt8F^!ZaMXIWv!GIg@n`jZ_qL7i}Yb(r#y`gi7oh+BE0tNs|nY` z7{Y<%K;Rm_ojzqWPtzzP@nqF%z=U8ZE*a)X7?bP|MHbOCc1h`qdXv$loX`$!MsHl) z`P)ecTK!vx+Qre4*9#9kuYa=S`+Zar&?$e0f9S`)zyCOHR9-k@LZ^3BGe z+@=(HF`s?*d=QDdrp|U{8~apoejjv}A05H`QcO4^b{;1>oH*dxyi1U{{)RF~)40Hh z6xM6hjve?HE`nmiKfjT?=XK-7> zzZ)ST7Q9�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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/acf-logo.png b/wp/wp-content/plugins/wordpress-seo/images/acf-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..829a7023d1536562c83e80e9c641b7877684e398 GIT binary patch literal 3774 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 Kw%YpAt^Wh%=%%~? literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/admin_bar.png b/wp/wp-content/plugins/wordpress-seo/images/admin_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..54b086ff61e8b80c05f25a4042a744529fe46e4b GIT binary patch literal 21035 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 Hu0mjfr9J}R literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/ai-fix-assessments-thumbnail.png b/wp/wp-content/plugins/wordpress-seo/images/ai-fix-assessments-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7a4acea2b675695f4534369e55d974cc850eca GIT binary patch literal 46609 zcmb3iaCdhvUXJ4K4yCvsR@@65P@q7e_yI)}Hc}l9faqEoE#B3Jf?nIBZoFfF2wiA`A`=K>!W$zn03I;k5q>GaU^B#rOC3 zrKKe;Ev@^1k2iO(JI_ZaCudJPI~&lgk>jb^@yYU`o0yHPuAc6u+Ofr)*3z2l1;42H z^e_Iwf%d^kMHXfbE>40#XFUVG8oG}hhJtc(@&O-M892lawv9*r!-5FZ)6#!0EuD{t z3BbX1+N%QO39yPt@3wgQ@k;EwNBUyj^~MNCl(gG8zPmxygmXjP+Gd(?oqSrgsi9k%nDHMh zW|%T6^u)*I`SjB?Eeg~(t#R3S;=^|yp{TdfvdNM%x0!z|C)SBA_ zgS_qxZx2!WKZ4yCQy=son{A+h@HsDzC-kmP#}!SUwpt}xDFc8xEu)2WK=to2(KCLE z3X$y8(Xkk>S9d!xC94Yt(y+kx$<7BUS1tub&V|u1U8m0a&Rt$!I^Lf)cqC{;eec2C z#^i@9(A#y(ch}v&Ph`_3wf46oy0iMZA`A6V9Rk!s^NQ?dRtaG9aOcdFwd8`MS0C9* z0YV%WH5kpif|14S-vR?0qw82&&CAxc4B@E=-u5uyt(tcl*YGOQ~sUfN8q8~vil(k`Y#T;h+Q3#+I5m86Dl zd9L`*VA;jZY37r3`ew4qD;9xZp{>L6Mg8TCYbysXVvgpYdcozMkMs!uyW~E^fnALd zDf9bUX~2^BW*%LdLwB0XpRE*nCV@anc}E$$^zHF#__TEiFfDp%!uMGc8$>XwbFyy^Z_P3V$EYO1F>zU_t-@8v+d?v zpFR~C)==-np0r6$DxrQc&-lb>@f(RhbKd<)itj${$KBj{#X$FI(r96V3Q1 z-<&^}I3<2#zmzn-ONQeO&bq6p5Fx0;rd_^}Uxu5%{o-Vb;>cvz(JS-tk*C^!xA3}m z&hd+Es8(Q)?`UPA#HDGZdS~rioBY_n-0uQ{OS)>gr?D6zcGSpg&}u&?Kc7sL?gXm! z1|d*89s`IJze=WOkDz4d(|z~qc@tT^q=IYSAKDmVj`hEdi4Hp=a_ozpx5G@jgXWLL zhC81=!#*~QD`WKpUH^t#UMs4%@X&FnnOpPhoXQELK;yd6&r{drgpJ|MGn)#h2qeE7W_>)a}#`u*yIF)t= zE{$}OU(>uwITRH z>BN4$ehs*3 z&%N~jEHU~zunxX(J7oo3d|uRzhw z5i{ETNnQDVAK+E(RJ7^zjl-#u`v;@M)0HwBi=sA zc#K*7LjAhEjh!5phA(jfAnpR-nIY72{tHUf`xLkTaJD3MYr2aHN(&%;0;Dm_z7$KwZ4l@kxDf!T0HXOfJ=1%cofLD?O`$G?&(@nVaBRad|SjTq5EC6`!5u zwDW89y0Zk7YfD&Ukx_*~U-rXTBoF*@_waN_-Daj}BZhU}MvN8$PsNz}@Cj+9k%wT$ z?l7E0td<{d<1<{145((R&g8GOrQ$~vHIA1v8$L^%x0O{}+A^iL#tP+4KlLX|!loaw z!v^2KC6SM0>%9Jj^u)pXGPFL3s$FE@1lbBD(<9l_e$-Xkh@nZJ^B@#2J!(9YM~%>6 zA|MK~@}e##1&Jv?Z$M~0Is(y(3)l=_S<9`D(dn#zG-r+mpP%6c$;kN7`0cE6M`mE$ z%PHfQ(^`B?dwHWSrrwbi495@J?ZVPo>EB+6Sk!1p_y~5g2ygG<+{M!Dtz7v>xsADJ1@jiON0p0K2DhxBXu<)8 zr-u<2YYmwEZBQMI6ok0b^Y6Gl4~6&|5fTYK`7PRU?3xTCgf!03KLUV@ZrUyd2PFw< zU2fOC`U$|yT8l)hcUfQ(AQusmsrpfw*$2?1+zSVWp2*`&yPs=V&#iNdXz)KACf|~#6Jdf`IvWRz&r%C4~m>Axk9~&sTCMt=YaV1 z)gXBFlP&TK&qkZ9P;+#7h|Z>eXd2DX!Ues zXYurzFAYg=O!yn4Gx}U>`^~3R?~IQtl!;;HDaiob`kXbp^;6FUMu<;!UDSc2;~ymAPV#;#meIA;7H(Y>WkfSLTjq z4`UGj)N+S#^e8IEb*?7USAn@m&%>uJIy#3*1t))>lokq-!yg&tqiT1IjT?4MXUpgk zV^GJqN`#>aejo0>KhQ@!$N-+U(ltv!Y;B|7y8FKeD3)=|M`>9uw0!rW3(APaW-=3O z#LSJeq%ta^>oEkj!l$p@08+A(1G4e~7!EO4l`gYG9r zB)!=VFhqxL>=ol{rM-*nRW$_&@r~0ZzPm1OHED>75PYZ0VEuwK`Zu#C!e>j6yd=yB z*pip1cNPtMBaQ3e8)zA87Qw;)!#!TZ%P5+dU!-1;msjN{jz_(O70fQYP~Oa9Cn{}T zW-@oBY|BvUk)PN;%)n(O9F=zrmWd4b7FSc8@WLf}^wns6~HRL7J4x zs!#{$3}qhWUWGO>^`)0+g=rw>)z>8wWjn=qRXp1Sb)Rq{1K}IK3_?Z>eNAGC$!fE4 zdXbsG2dE&{;?tQ)3j$H;FF4o{s_sGHI{r@v#Ffc>?sW%0Yso?sjr5`!y5T`QH*`W& zk=T)!m9~1GyjOaVT(x#o(1IE}`!&u8CZtEpcO@RmE>2L!V|nH)v|J#(u>mP(h&WdQ zhVhBX?bq2eeT4GVWT+blZyu+@fb}pL3$y$BKmX0ImLe{D15gN~N*I6}P(;}9q?|VD z%8pngH;=on_Q)D}jtwPL86Y1-#v4AnK=H#z8vUf;TRRvbwlj+j5&8|V0pz)7crRk9 znI3%VTzT$-8}c}&szo!m{9Btq=)?oWocrgMNED|c+I?6y!%0nM!nyj#50AwSZH!84 z^jN-7BHEgJYq0_1{-340ve(b-I;<@=dA;19v47SQ#SNU(R4^?@=(!BNpT*-1J|Z1j zT0MQ}{lnxdxJxhnHq~NV=BAo3dAUs6bTqlm1tQzkchQ)c{Lb*9(kR2 zfOMpnbC7+Kc;3eVh6CV&T~P7FF3=bifCw;zKDCJFq~DM9d<$c*BFm)m33;CF%U1KA zmAH?;GO98QvO{lW?q;}_b;(f57!`eXzUf*;8DTwJAAX(q#*+k^BR~lW!(;azx*GES zASC-3nLVZiH>Di6R8WK*@%!xS1)%%}|xS=yf&``wi;OP!(7+}w$1PNu9aV*lb7vxK{6#YiOc0G#I&K{>|P3jZO zFiI*h1&&BBsc2#Oks5a**3OS0>rJ$TB#2sMOBVOPQZ2}5}0K#8EVPsv*bX|-zfm_t&5 zY1edgg+Is$i|R(8z#eEN^=Hk#z^3D^C~_&8i~~W87wQsbte%RGeASJEgq~t!d!J`g zcSE0AjIT|qZ$h64;udR_(3qa8+exf>C^_P$kO_*lQpeyQcV6F#p|P!!^vNY-Y)?l_ zra%^2VvSG;a&k$cEhHZUbh1M{!2wnRMaX;;u1rv_u7#MQZuyC zYn0$S_$W%&7tJJRhHjj@j7nIRZ}Lu?k(b1^ZL&bCF)+=|!x}gHuk)dsd5R$WQxv-& zRhIrsv*gPxFCbVoJ+TbrzF&Vd<_B)@H<)zr9PfAM@Z##G_KS+LQ1@oQb6Ju$E)8ZW z=!XQcexFeGrKzw^eElZK{yL+*jQU9@47pVWc+dWHIHnbeRipYS1-@w7sa~42&{*z# za>R6gHiR51(xe4O!oq4m6{&2jL!V7Xi^)X~1O3@^==A*L+IqM5Dq{U_< zPFoxaCHfHT{XGd;5KlAAW0|>6PX`iCFJ64UR1b6F0oACBFoH|*`%{e^sC2hC}C00|e{&*kT_;aS_`EyGR0{HcX7=;LRf9hGr+5QIq zOVO&4g9`a`$VO zES<+>d)0aI%E2Jq=G|Ut%=d>(HUzaV<%*G<`ZnDYTH~QPZ@u#Fsf6lo`y|5ul)edm ze_IND;X$A_Z^xy*mYS1@n)Lo#7EL*j(#-*)KR}raXQ+ri|4jeRJ(pOMSnK0XrNJFl z0$Fu!W1gNSvl^`E_EW;8pNo!C`POjSN%#HYuDJJIY%L}lwMDeTIMhFV$N0?VlT1Yg zthLt@+Kd5KLWQ@7aY$UfHcI?T`zWeK5*`e&4NQ~Y*Ma{n%$8_Z0C{~sAc&^{?r9hmnh%`L%C=Zaw(kB0toKI?6 zt5N8k?ERq3qmj}*p38><#y^2@1|SMIKy=>Fm!HE5y*BegDI~=z((lN&@-THinvygtIIZDu-KAV3>(TZpaTb= zr0Gb_4k6@kHLRR{pGbk7vUEabX1e&nFllGhY|;qhWVTySu&fjYbJx~rRs1xb=@KH( zN!{c1;=^87iWB1SPl)ywP_M@d+~H6OM|r!01@p;AjwQasK5}xx zKTqu>yM-y-WOysBZ>;fS5q$k2PkeS$F6HPoIUIA&*5M1jcZ!dKo&^>v&i~v{pY|rR zs*jF-5h~nv#3^;x^cF+(Ev@+C;yM52NIkDwF#WB=cP(2c+GTWs&KBZe0z`~}Tn@4# zY7BuKJMb_}aa9f*`tMBoDaR#8cT4>U#RsHz_M_-9W8`}};WA3OogX!x*J2g+GrCO2 zW*hKQM%_XYRW4+UWAqqc8Vw}PMdd!!4gBO8y}z({QaO|ASO?% z?v08UL&Qrkfd+QtvwMKbdYT(jL+7KXa{cVN#9M_*ifd986$NKnQh5eIN!}v4Q;b@&tb@ zR{ZX8@exSroc)ctgHuUj0*NR}`r=vUkjwkD^@B%Ihh}JRky`3wJl_~9BKid$wF?2Y zM@6g)JfO4!Y)B+>fIHxD&Qt}5g2?7X+E)F=#++3|{5R9MFMz#QAEHV!R~P6{$;ypY z9$ROVV3vB-iI-GuQ@`J7v&{KPjBw8`c@T4U`@#{fT(4H$cB4-j*zID*m+Pjuyg)R? zZ&!u_(X{x4k+r$F8t29Ibg>2)P)n!Aw9~^qf}r%Wmtm9l#P8v;uC9W361u6uH$l{6 z=)Hk5kZJvdb59O%M~~)hM1lY{{Yo;qrCKyw*pw#?<|i6Ps}!Vlc0yCJ-#R~|Ihs$d z%Z8ALc+L%O;kXfCbGpu7$W!*(K@2p^T?w96MeQun)hgMb;8;#y7J}?u0N%9FCr_vR z=VhyvA{q)WLMdfhx>XiL0F(`!jUcAg)CiN~GW>vx)J}7}2;do>ZI>9Jd!6M;LhsfX zB1PBIy83-Sc?TNFO!s|TkpuF4#YIls{_h*!fhM$LF|=~)33F)}@x;moDVrtC6sD>A z41h}K%=kzo;gH7v6fWW8sz$BU+$W~di~Y4Aw3Kc^p-;l#K$D1tg?R*d*^Jd`kdV%+ zUlCxreL8FFSCb@R*{!YI-5`m1j6 zi`NztjSYz`om54#Ul~}VCRnRkB;N?*1axVFc6(R=B38oW-U<-MA&r3-+hb1aleYdz zmULzldyF?ETFcMBj@s^$fwwzd8oylI-KeQUQC>x?2zP{@3SdVFzAnB+Zb{LryY;k? z&S@G@@KJNc{EKrpI@7rI_l!k07=l~~i{<3; zpbzeWc|zFGb`d%!H%Q6+!%#<}^iS6^*fk8k)1OV;5YZpsBZ&}GG3UtpK>;FnOEzyE z)kqYoc>5BLfgip_-M`UC1Ei77(@^lj+q%P-+WWgTYnYVw&i1Vlh7H0MN%R!H88zaL zg%L<>fBJixGCcG7syBG4m~?{gvtbJQ?+O<2gx--z(w?b*5k#6G>;H5)8#3g^Caw-O z98Jf?J_Ie*+zDy88slER-KPb9xx&w53ETi;MOHqkzD;A`Mmfy(r5ohC+wr2I(%(>j zG;%0eP)b}Zl0?Jeb&KVv0IA6N#syO7sjXa0ytro%>IjlkfIM<5j&<0=8!Pzh)?^cY z!j3E1YE2Er9{|B%-Dgc9tPphL!8>ZpgD?hpYgekxav10Q&f9;dP7b)n66Avc85MWd z1qO0^uJ-@89%PobseNC1p$h&@apyV#WmPbhR@*M5g!q6@>wU`E_0OA---J!aSH5|D zB_Bwrz~Ksz&Sn(k|7>n>^Ke|C-K$8_-CI|YEc7owyApBU5L5ku)&mv6v7d#AEmh-w z87FZ=kK25TtCT4M+)(YcnXh=>P>F_^7McoQUl;`yR zrTM{GvJ<)~k}8VX)(Bb5LzjjQ35BQ77K|C6F`K3yy{cgM{T1n+M^+>DzA&rGJiOvB zg-S=@;P~@>#%fYzoOftFjD&Ne3fAfOQ4w`>7A60J?kPbynkvAF*<)Sv)(oO-+Gj(u zBeD$nU3He|oob@2%>Cv zRZnWOhCm>8D$HT!Amg=-|G0O=srw&dK2I%=JI8-mBtA#Ga*C*|)Q1+`MnLk%?hr50 zo=+j9{60fA=t{(FmFx_Q?bc^0z2~dss0^zIvLcx#zjhLlJQT-fM3r+^v^OGZH5{xs zp6GP#1?hrrJ`gVI0fB(itTM*AEX{La2x_6e$)vPahaph%qonyKe8q~k-%uUkic8W) zJXu!~H}CzqpLU+(VG5pw}aUw`; z={fAUJXgHCzBgWG6B&LIXCu5FB$bVkv8P>*HTa(aMQHN^dxs!h@sgqxE-oQm8*tdmli`5N@xm9Jobx*ku_I%?@{|AxNBFK@F$dO0uv*d zI27YQF@7~nlkQb;;dm-@A3O+1>jWX9$omSf#!B}9+6b^ftg;K!AL4(fyzC>zt&Jt5 zp;sfle_VQHcWo&nLbZ&x~d_31~U9Yp{ve0M%F%PuBn1o{kHg~C`Orj}&n)vmB zK7$?J)N2_q2I^~J$?(+vC6|@^Q)nLv;u`Q3tIrP``JhUyg_v=74yj(sD0y;WB5 zY80^7TYr+us|aBR9d+JG1fNBM8(*sNJ^HLiZg^SeO0?@r)5AFP0(hmyf-EBi=G_L8 zk80N4ARf5%I=d=Uf}XEd>Z)~*BK_q&>A!4W;`7pK&iKmnr||0?S6lxWc1ab7$-MHM zl~bbFK9yc2JTOX?DvvbZCFoKQ+9?DrKU@u3!kAu(*!~3voR>bq3+vaJ zH&p!JU{{uRscxIb#qHlEFH?H_aYV=a*WV{Vnf|K@69LJz8b?pgO!6OiO9j0i&!30I zemw^$@XcS!d8d5Fi-Ao`?caD)x!7&E$+|Yt&_pE5T{L7;;9#72-ihqmmX2LkPGwKZ zY&9jUhUgk903}X-YOol8=(B%to%jC&3@UOtLpgMHL>0M-aJ`^*upE_%}n5 zziqR!xp}F6R*G5G@w7N)C`QHr2vv*h_dj|YhneGKFOC-F7D0ayJAlMSlB?>@X(8agR^CT;O z(YM7Za@2md&ok1ou%yk9Fpk5bo^lwNI)@t?0gwIk~1 z9bv}{^~7CUM;V&}JE1;3XaIL>uuA7oQbD_Ts(Hp?90lkhi=OP>6iG???8WBP=!MVC zU+vYUT$4_#`OR$(Q=lA*hjh#~MPKl0CB>%&A1%0Y6V9pRGZXWnSSQHc`ZvRS(~@n8 zYp})29zl{*h5_jVqXIJ1^1}lL>ggk!L6-yFis*P^P;mYTgwGg14JhIBsR_hp7zt9p zX;ZYg)_NRr(LJQtt_-KFDld%5HW|k*DcwI0KeY^X+vg_4#=>I2N{B*xeA~Q{le%(m z=(_*j0X@ICdTABB^4LhT7xcF$>Otsg-?~^CF;?hZSMWV$aOnbbw5YxOr&&vk1P>S1 zvde>dQ=-ZmeV>qhh%rzu{IY9#w5(;3?M~K}fR~6h2H6!DmAlLlI1zULlnBl%O&l34 zl{Lx}%U63kj0`?lZs+U<4zVkEox<>uL2lx+U-Y@1K{|64Wk}mbsFPy*clpi=#by;V zc2X7gYkYN#h#@D&H$qz6bU|kWdwXt#U$ez3NGIqn|K$75I1k|nD(0mBVfnEu*mWZzUr;jd@UrP15X;(O1rTC3CrbH+Nbl<|9wxk z1tyqN*LOo^9{W0kjt9-oVo9^y`R0wzBn}2tQQ}Kq2d)eVGsTFro)P!XR87-2EbYP< zyA_&>{?q_^e}DYxKgXkrzbswA8&B=9%uI zexH{>v~x`EeQJM?D#sKoS%FA1hmRY@J8UPuc;^`W8&R4h8>5hL2C1KhCU+hS*omM5 zB6XuB3~=Cxh)cgPLi7dndfo2`PiErbJC;z>!RDWYxc4SH;=cPO8)pt1nyX!`DJkXt zNBIc+3&uPZX@{zTIB7j-z5un{5(yh!9GluHWN2-;U*kykmv!E$n~iKcGNe3(zjba| zYNG+`ri`?^HBcV+--qX}uyWJ2N0wa59rcqq7(D?1iNMk*alV4#qjt6G#{tIxQhzDo ztMydj(PS#U_ZB7mDMY`@-2?Gir!VDwRqJ-K)w~)lLO{X2n3RnmmoJNa?5QlDrvS7^ zlf-z%aq+$(Uc^CE(OV^~qlUp}S` zo!$(POgP(Yn)D1@=@z}-&MQ37d0qmJT)A~U4sUr|JE#~bOnN^`tY|%9L#1qdKoh+J zK1jE9o8$yrg_b~y4Fv=WbO2hj(Lb0;c`>#MR8&|4eqfJEQG8MnZ?p*{P|`PAOi3!J zo1cfqxS11%!hQur6HRNM#bqKhfm1nawP3mG*zx;bB22lIunf9acD78niXrTEYs&Vf zI$#*?=M_5vEqTf%p>i7re}8H$G+q3Z8FX}?7?$Li?VuW$<9cIie<;35=4oES#)MAz z3@lRmGTs~KQ0z>sy~K;zTQ|U92b+iU@l2F17>KL=k&$Vpv86cxoKx zk3Od3Cx=#(1%shYWqRKT8g@%Gns^OXFC276yjwbVxbd~Ihyzi9R(2BLh0TOC@9lB- zxNiUn4J9LR#kwMGRIwa`9sz}Mw-M@cL}&0fnmu|5@u7-$>q%P~gE{l(jkT7W9XkBE z#B<(9IaK8|*?-6o#AR!JrTfK+Cl{&>ebeu=TVfQ*i-vQ>oFnr7(&L3aE38BX@~*52 zjEf?I1M{OEQSEUVvoY>Bd9cJks|!#>EkOFuLlJV%+OV7w#eF3p zig#<8#h9$p;Sf$E7rcb12&lsPQky~58Axb4*seam=J-t!nGWm>M(qWv-Zlt8=#hi2 z1k)KIAGqP(uC(L3kN;hHpOqDI3WzUrT9mlZZ0k_sT15F0L#I?|+R zWRt!GVNvu)6@6!&&4*;8%icu6luAcN#l($RLCBU0A0H40t)MN;JLn5z)3iz;+>d8v->t91CGY8b;d8?p@G!9v}n%8U1B-iT79 z!7FyVE68s>P9+UM;?Yi|*}#)3Y)LD;*PIVJ(n7#NgYwMgoLh)H^Y@<_qoKSH&O@7X z&#$iLi^)T+z@%L`%ml@9>Y%B-c5^z2b3!|wFIQkJ?4(LUa7fLUMVwl(a&#VwC$RAQ zf}vsow!m)p$;`wV_<6sT_5OUmKLf_Y1O2x;UtC!%Abv6^$>V&hmYwadex`vXkLL!m zuZw2$mg3`rx=ymH-&1KHzaGy^9ecYKi71Ow#2-3Qsm5JmomD2tlhjKq(BJ#1+>SaG z^>>kvy%Lp@lD|Tn)+KR_MOwnhUzm*weL}qHAG zcDv^01o^R^i(txolulCygq}V;$yL+hWgMW%(zJj?*#2D|{Cbpv+4Kc}F0BX<|W##d+7OfR~iCm8e+JLk4gFiR)o7K$*zK)Rs4WGM?cU`bE^{Ub|7*J}cjKs5e`1EVdT!##uDXbwkC_Ke4TeF4fW81=6< z5%T^rq!66gd2W7j3?BQ#YV(toU!ouGKN%xTnKyVGxR$^_>tVEIw%1-RkCA=;fNiH?Qee z2l|AcwQR*a5Esb2t-YiS^9sVgWz8d-~0ahDZBEgpg+z~nfbECs84op zrJGIszLo>B!~OG91@alN{oWG-jd{EJt|y*T7}640a+V6d4AFK135^Ai=7M7~rRc-~ zv&@IEUY8gvc13?ldN5t*hI|!MIH73#OCD^L`?0mDyjk^jHMQOPAZ2Dh&I-`gCBuR) z01*qrG|lhFtX4>pfKVrHL=tmw33M=h%i2m3Z#Dd_#FJp#=&?L+iokUj2a7k8V9*)W zK7N=~>Pdk!9_zoA1Y`MyG=qK0+QZ7eM0uWW)Vkyo z{Ld5{U(E_rVTq%}yGiqQ1NbTBaVf6hExrk&kG^0AN?vX_9s%ix!wEmQP~~CV4dKX-VZOGeA-5y%(wqp_*3@@ zu;dH}p*^B**?gs0@iw|3EE{`K_WMzsH$Wpk3mu#E>tF6%61=^xdZ>wGav*W`3<{y5 zy6VxIJsX>F7{iSk`19awTh+ZA{GXG+;4&nfLbT$IHvs8fBC<4AVVLc?0^1r*w{#}_ z?>FwhSH=lVIpH~iIT}@9tO3j?(GkU>%s1(TxSz@@v{05q9wM^RtkFn68M@V6@u1EY2+ztW+-&MD0-HJ zlQQkO6dqm-Rqf?AJO)nIj(+{51qn~XldjoH+e9zbyDU81MDZ&;xKJqK-kp8Lo=gT>ihEi+`ox6l?zo7J0zQ;p0(Y_(q_rs`=R+rHc)->q6(6D4mUxE z1(LiA0CE#yc0&W)HOQ8^-C972*_#K|gm8wp$)t%~LTJq=1hMh4L@kU? zT}u>sSVCBw`lU~ahv3zV3;O6+`Yvr?7$#Y9gE-I}e1#4Pe<6ovQM>guxjeCh7Uo9l z6B01@v93))hwW(MA(<&JNO!(M6Ax;uq>i_mx6ThoDKpx4;qZ`bfyZX%r$=A%&^NQV zDuxPSihCzER4IDk4UJ7rty<_vfSs}_|^;vM6ZbP))O~MsjQIgW`ek-B5(r- zc}KeyaUkfyPw(se)GVwYIkw09FYUNE{9PKAKk4pZWjV}66 zFwYt7mlHD%@n0=k*5>|Yp6Z-#JDw6m-fU|_XZ$B0wC*5`jyOs zMLM}$&!&GDG|lj&hFMDQO>9%<@#MC6@)o%FS*kgl4HARI41;2{Kv_+2xB~k%QQDQi z@LTV6v1W&91+l0%(0t8jJV5p$S9HeqCUs)dVReZ|Z|#M8-S{N3@EO`v2XW>dqX!3t zMF$lWp}Rq1W-tq4YSYGp+)F`tEPf|Zm;&$^jD$YBdYKB#!{L8n31Sv+c=^KTK>|Fbdk`$3*H5-e! zV+Tca5S2&-H#O#uU^hcj5c?A;m9Oy+K4K!3E-L%oB3}N;-J{vPV;*pS!;^D8sC&T< zug(TPf9BNn^7-BWq@vb7c@-Zz<(=)}o~r+$R@74eDG@*B**iXWysDKntF=U)DFd;; zhyIM_P`ayRw$5HHfZGUe{G}r{?rdh^TY{(ly#q1+R6s~5i$3&et@@C6?H3M1ECvR; z?=aWKjynZk^SYQ1H8qcNm(baBZ)G}%KO2Xfq+yYtC?t~0M>vfBX;A%_IA*p8i1gR6 zpZune1;F?Pl(D$=1;>;4?GWvwF)n|qhEl60PsnXEz)RSfm1#hNBavnf%hYZxPT8`y z-&ZvufHUhz&aN;z5zV5U;7jGt=OCSw=0~9p!dAuOLB-oCCr8lD?lfAW-(O0I<7hKs zqVnd7-+g7hc}@M;@w|+4?hbV(Cx0R1d&1hl{ZN`vWdaR+Mkck+q#KY`vd-Q54?=EN z-+}e&Gk{2bhb^v=kwId%Q6kfgNq)JwoN|VUv_Yp8ER;&pI|`A-ULIxrnGBO%4LC2O zEZ;SYf%BK5H{sp67T;BE2HXRhM1@6Up&_%y9@3WG8)+1bnZ--pqJl0+jR`oazzI=h z?S#ShVS&BrSpR2B3D!^Jln97&)Y6l&(#7VwqQw zlrxQ&(F1x3lYdC>I#LM+{ruzsX0oUe_F z5huZ#_(l{Yhxt>sX;MZi(5a6F7nR!zQHPmbb~76_(7Mh0PJyJNDu3U?g?se#AMopca=Z38aVOd; z?mX#S%1(BdNj&{FqOu>~ALpbG8|CWi-=*5^D>q%U{yi!jKgs1RJZ&fevc#gT#jkm5 z00GMldedG{NX6+?vk%2UP_}&-(ZE#id)kT2F8hMKLMCuynnOfjewzdzGDY2cLvOZMaU6G;6usyYADc+l6^8*bG*^A?N` zWhR9@TPJSt6+C^#_xsSQ$su4?>Bl@`PYQ9>r8kqI_EImoh+a0p6#Rkznv|6#ix-C9 zPr^uHn=GN={PqhW+ensE98yFt`-1|y9^-K*2OO49qItn!1b@9^R_LJdP@hON+_#y1 zF@p@<49vHz*X^-`j1_;D68De#8$LyCFcA>}5S~$YKy|Y(TEO6q#0>)2btQ6BR|Tv1 zCg7s86bIX1@sK}*1Y!xgEu`BTbCUDx9>eS-pdRZeh7ryrS>e(8=E(1VHB!`8s8^R2 z6b3w-_N|pBNDCG;FR0$WG0#xHp_H3acN{4KX@vL{Stao}%x+c|*{)n{H9Sei|1H9i6z3UH!Xu6 zPkIo297S0igNInyve@4T-Twkq3ek>QQsV15bI$+3Q~e&se)S={SGraEDlhH*XYe18 z=!~)$DqMtvxk)Tlq0<9@-dTh5%B0GeQ$ot=8xeYS5tTUuC=D>WMeu$RV9n`Ze`*C8 z=*rdqA$aEjYusT1NLP2NH+n&+DMp!gA=g5IxQ~&0Z= zM91ZS=pFLkM#DC$lz!%O{zi+mg#71W0Am)FAA|1D{p$x!hMRQ#G*p+z3z0*^k6}x& z*?5=ARb5azJ|~bEm^sSGfBHu~{m3yFY;&7-r^1&e+^hrp74CT3eFCsB>n`2qnrkM5 zqHBhFPs6_LH9E64-aS|pVEGPl&CRBqhn*q+NZBB{cp>X|e=B@_dLKhGwk0)iv4Nt%R6;mEdPq(+k1VnBBm3fj~;|JgW zY6Up8eZl(A$&1~38K5L`G|{w1)jv%orG=!D*U9cT17Vz#Qf@w^qP9=lIAT{e9^-3p zmJ3OVXMU4XHZDx&HGjvt-4O#1^FR5$o)ARd?33hfrC8mIfw?nPCUVxskhWwFVSZ~T zH1@J?ZaxOploj^l5bcz-Y@W#TAIKLe!-`@TsnmyH|LJdG#YS(D-!W4BxY{M|z5YP? z@=C^G60rP(owJ}(7+o^Bjj}9#)#%W?{v5CF+;&;ZY^*LA>8bqqoGi)E|F>m0VvzYU zEE7`0KrU~tzaGb_TdiZpZPeh2qi-g50Hcvm|0DJEM+9TEAO6y}0o<(Ir^1B(A-k2I z-#v{#@>9qz$l%%fTU8GOCbJTK+G@!Z8lJV(piN zVwp(qzyyU(8;VmJV`vLl_V--~qk#iz34)^Qo%yR9JzsfXR=`y8(;SS z5Ok-3tgyaIaR5X++5%H^xH^`Gb6!NRo`CSG2nliu?i?Pr;`q43}> zlAFD#zS@~5qi=5Cf1yHi0W$PK>e}-4lb%mp;bAT8Wh#pF3);{XO-0SueJ`2|vZ3II&OBEzrR$OK z#}Ho8GjoH`NVl{5wFej~g;jA2ijJ8s1VgB$!=T?qb zm(zFnoyL7x4X=09GeJhzXt(es-5U1{uEqzBt35jhP!XRiE3i|Z=EP`A2s*YFG#~6Y zVTJ=M&dqvpSbyAQoP;{1rLh0GIi)Er5jXVIkP?+mS;Yp0B5FDfk|S#@Yx3F_HM$R) z*Z=EUDk$)}+*_?&RQ+?5Hj_8iET#Yraj$OIPG0-=#xF%rwu|BUU$)7=ZEJnP)9z6k zF69*8lB~lyXjoiRtGaAF*%q&tawAe%@=&dQ-N>Ta%}nTBMm4H@5;OIlHlVqM2VCtF z@ZO~xTiNN)-3G#%eGX{g=Tmq%S}CbLj>kw3g0vY`5S#NOW(G@bZ!_g^#kE2WAOReO zEwqnKD_563SDD_|Ojnc_x?E1xOS%EZAtA|FX$yxu}Q6uVXNQ%4E*N)9>r(*0V!hvM3x3{Z8um+Td|gC`arp7bCehw@<3eADmnlV80ylsLsesm_XWz<1v9&^=_&f@`%Q_S(~@P zWaSkUq2aihojrRCxwV?r>kwDaDvR%{>U7=Wl_ef7RTx~ zyO<2+3w3||`x=*_{29_WcJ0jE5_i3`gzrT0*WblJ8D{mF(P^SOdDm$7#!g>!$Wd>8 zNEy>)BPU^)DB}(wk8K3i>4<)5{#BXSEe}sicVlkRRGO6R!q|ACcq6K}4cXV)c;h<# zTO?Ar>BQDih2ofhSB)5|_P68*SYy^Iv=_m+~J;Pg90JsD6`B z*f#8GDpjp;7(OFHq!>>>a}-nFyppe!pvA&#he7LFX*EdFAv7v-f-6gE1<5T#CLHIV zUlVpFyf~om#v?hlv%hJ@M!6`6n~;XZPi=sZ3qtD6)!{aw39BPc6BQqt5`A*xl5|fy z5=6zUGUUML%=<}h0EAc!gb~UC)yHKZO?phX^VW_V`l6d-DAhoz#~r$HcFC$kP$XwW zSht|tvIPA5V!0KsMORLS>AR}xZ_-yV%}2?=XyV$=x6M}g=zD|~)$Vl$UBgkeMpn|} zXVd?#A8xc&Fg-V8F_2lBdso2C5#XQ#dD~U1RQ>guBp8FCbz>*2IBRh@?(l?`|Bm? z%*PEpBIsE9aRe6@K5-c0{oJ_Sw3#Kdz6_N{;S*b7k+c!9+6J(&RyL)A&Hwrc`hfny zd%_V@bR&_?U6V5EJvjZLi!t+$m_GG6e{uZZ9{AcFz-=%ieX8!VO90f^vQEo(G=ZAri^A-g50a&_Rc)Z73rm zH;Sx{J1^_YrXymF#Zr|uh5nM)}%9@bVjA15>?SO#lfQVgA?gY4%V}b zjEPgaPtHb>52JHan^s{-zeP5u>9Q9@zC;RF)D0I7>Zv$#w2NX{b;I}Do=y_(xVFt%jWCvIE>_yCtKR^}-`dR@sl3LOZ?f|Eop5$w z)rX5PfrDMAba!#$huI(TF`zURAEg_nt1~~zXgG%4)r;C|j)#Zkl$6vj-1qEGv z(zQ)lRGGM5z0un3_OQ&3(BonKBzN^3sGAx572bWPEiuCAZ?>825|xdiqQh`KIxT8DIKeSEiM?v-ACo(0$+Qb~Q_qF?Lqr ziS47q2edhfqQFRKc3{i;Nz2^-UmD5H0g=rD0rZ8>RjPAuGB*f|z)b}5! zlep8o3B}A{?Z#K)SJAs6vyKGBCpM`B0V3$Yulha{e{lJ_qJR3FRDtqp^~W?F)Ys*5 zZTPPg9Zns%=@BB0TsR)S7EeB6`tvR%s(Q!9(|<$7nc}E!f+9MC7uh^D5#4&)80KHF zXhJ%}S-!3mrK`~W7jDb7s3*87^g!TLGz&Tw(&PI9Glmz|PvZe&X)`HxDm@bboMm2k zXJ6*a4%erzf1H-a`S*Q<{0loK>B7GWr)5)yulS zHNazA@*|s88-U+=sF*hJ(?OoE37|GbfB3f`X5gUDjS$LeE5P6`@wkpRz+@koJ|HKg4 zeO`l9ekD-y!eMlEzskLtWA(IXtgx`}D_>x;i(JWZxG_M=BqSDxcUR|-cQ%P=Bzb4LKTR<`Y zgi8l?{PU|GK+NRwN(gM(>ShMd54BQLDFQ-kGV1EEVWmVH1bU>$hJ`T8WZJyes1{d6tQaLkdLp0YH%1ESmI=TLv*3A|Py{v5YoxyNo$XUbWW3Qf zBXE?uj@`&K#Qw>KW;BM@a-PzL#O!4rw}ZOpzedA`5DliN6Zv{W5`nMU;xseY z*Awopv#E)rV%a|B5qyR1nR9VUQ?v-(p?h8f6xP=N_n;NrQ|l9^V)Ir({X}TP8t@nU0`B@>z1CAX42S--<8XD?iZm z(GpRV+Pqe~H&0ktBE$#5oAE(YzD$Okmt)r!U1`+@O*Q>cR#?5ho)TSJ_KWg@)F-lx z;?}Z^_BJ``(LLNW+@(i+reSg;dcezWu=iovw6!lcuArM30`4B+cT%q%)<#HIgI#RU z9Anr1L)hhN2t2z%)=6tB-_Izh%|Hq9MCPYG=82p!hW>H^NHgD@pbLDB2AmT1&);!*Yl$tGV%pjFf7yi77TTrH?ksSi zZBOJCa3@-mcW{Llc}ilNT7MoWvZbaJYz`%B|5!GPS4E1Dq?1_Rq}7+h9W(-zl^cos zQ1?D>q2@INV)NzM5~E1M4D0f>d&ez;y=Q)XSxqEiFh!sb67v>1y$%6Oh87AkXM0hg5)1zGT#pi)WyI^bI<9MRfKMf3NhX7v`*5$jF2aLrpFec+?whuN5Kn^br#1ig zF9y09Qyk-?ac1&iJY{*ZpHp_wNgTUl>nVJP&5n8zAC?EXH!0VE#2L*heFFfeqiQm^VMDIZ)O`Oq!x*Eg_71jT>1tmH{e(vO8aDyoRabCwq3 z`I3I|-^M^Y%*K^ng5}|^rsmpX@g0rYvm1mn)b)^-5z*flS(9r zwez_P%T0AlP}E-Jef{b2q&(T<-R_RIz~i?P&!Z}pPK=>RJ=@dVN!u*(Pv3k#CS>O< zdUlm~@x*%g+J*ilQlKI^d?SCdKlpO@j6uo2MMOrB5TL&6xjWC-Hy!@5@*6tK)%F&k z$#Pz;|E^()lJE`u7E^eW$D8Mxgdf*F?@!~qnH1ywbA4N;d;&c|I!I{G-tOdDF87d2 z$!8tmd%!;}Mf==mow)Y>e$W$*k9GSRKR`wUnNCYG8e|@D^K1gf`F<8OIoV^}qWD8e zI+_w7ZeQ97mHwWzoMBi8!aS@tqxwjrbxwTI`w3h4uE-V=HC|M5GwdnLJX{%psfnUE zpJm^8EXO<<<$ahne0h?*(i-y4FiPJ@R68R^E0C^v6-t#%ahfGZg^khB@H6~Zub zgwcYd{(y}s;*#o(9)&)=M-xsAU_Bj{4Kln?pyK`hd-O{=c^)@ zo5yd6OU^i(Z+RBG%gR>rF8KO+o@oQ`^ww#N4c98ZiVYsmwYn%e;TCSa(^URlY1jAm zX5+GEQb3W^s4Mb~{B@r_DYv%Hfb|_QQ@!5TSPEw`**l-)62M&lA2pI!|0-Uoh2gVz z_4_1PinG;*`yEE_A(EBJHX9*Pa(GUp-D0<6QW|Vqw6YlCZF0K3XmJdPf9cP`7rsd* zfa2NS>+Z5*7}hIgbcqG#O?K+o0pQES_4h-QTy66^wttw&6C^Iz%v;_rd+ut#hsNyc z0)`1J6CZm4@}t2 zW2&J{po;0myJoAn>EsVJ!x)ibXfUFFDFJ!7`^2C3#xop;r*A9ibdxQ23TDPxH$@Pp|0qy5DB=(Viiv}i*lnrQ9;K2p zSDI6GL%yQ{mYI8Avfj=@8$Ss5*()nU8+u-uTZY%2U+5##?uslCGmH4ppE&SULlmz- zRf5Z?D<$1Bw{JBapa&x@R+F@9d0)JZ+SBuH3)*LYbq4a1hD;*e$G6h`Qj7vLBZ>zK zA7DPXJjtRS6x%;N#H$-Ioc+;zcYmUnoXm6nN$onx2~n&10hgs*tnqNjJ-=F#c;$`~ z>@}tnO^Ud=-_qVk>+}^ez9IeP(b-H|mxJ)kN&QZ~m|i#}Hd=$0Pd+9=hFUF;KSb?O z_$GH1ALSKx2FaQM6nL9IHGCIa!W|UmY_+xncmyiEziPpuFU9I{FHfcVC0Zt%cT&?o zOS>UYQeU(o{buNgPi)(@J$pj*Cw2KWaqZOv8mM{R8_OJla_>pa(=bC!QKb9#Cw#9+ z1`6E1$U|YKY)tMEKW3Eeu{LcTos%_odEe*O)@{6?DXH=MNEl`2=5o58SH31?jsHRD zZ3hYr=9>NCpRVdMR5H-M^Ht38h-R?TU(t=Ora101U)k(1MB>F-9+JY3VHWlFMLy;} z)!*=Mj67D=?VdQv$E!67H58Q>+^8*Ha(oOF-47|&tCk~=X})c?#n_N+cmKiOD9u$$ zFgC638sQsq63!i5;h>f5{bqIEoLq74LX2g?L;gSxx_7V-s-!pm-V%8&Ai7}_CPjZdg~j{ zh0BQxpud7jbf9oBP+uM-qaK$E4Oe zf1CdU3M>CP7o32Ku_3e~Ikzvj$bV8zMYbU04B*JN^wx-JYMQ78U21lQbLKZ*}A)oqVoLy-6mLMyVb%zS>DtVY-~l}t<2+vX{(m?T22^$5i~JWD zAS`w7g4c}zaROQbq%=r_qo!y~*}(#{p8o`O@+5-{cWGR)YBGo;iQABqjHmv69B_E`8n3|GT@>F2m+m>0bmdHsn1@-xBUk?+&?-w?$2w~WpYkwHfP71_C} z^0223-V)}=&XcUm{v~Y$BSbwU+?PkncL>(=^}qjX`OFc#&E&FIUS39<0M!&Rp891% z_bhkKIZEXpG%a!{Ik|v^84s5iWm8fw#aww&j+^hT7g%F-&0@dF)>IvH}pD5Ev zXZ7V71!Vtx+7kapcjP99oFg7H7gYg9+gjN3$o#u@2$bP78rkoX)+t-U7VXzmAUalu zgdPp+!8rZ>+_=aVP7W}>gOhzw+8qujsy=FwzT8->0(V! z&KjQzIP|{l<>~(NOC7NF&*?LpOh4K9A)$l{ftD^Lzp!gGys3x>#{RaM*)W){&PCJH zYYr%zCiY^MO%UvNZO+~j_IsVPsta2zA^d0(&6l!G@A;A;-T1quc=n5_hbpQ=L`1~>oE5RssTxmI{ z!Lt7NTI2$!9vkkXvI~-@_#~JShjki5o^+f21`1?^6b zmkf31pK?v5B{9sKo*b0b(Nu0PLpNVOwKEXZg3kcGUuUzw-A9mEo5EkPOHo zJz6YikNIx;OyxS6sI`y*WAaXpz`HWlnFP)37~LJXdJmwRV4VNGcV()mO_bip1R@(nlHZG$tcG1m7gekkUUm)xd27?Ld7#AWP z{oK!Cl7bL#$p^>n?eMv(X(}$6CLAAi_g4rV)iOJ2s9eqqo@ebzZj$JN!$E=f5Y@Ag z{bF3a%WUr8p?V#@7322IxgK-HQLd&nJYV<# zUW?j!=taXh%op9&A3fFgQ+m36RRiC;|ai=)eYR z?%OJcaIygUw^1APvJSJ54<}21MdNmB-_~}TXi}^6zoGY0t<-zF?hXC0{w%t&>&`mS%bkBTyHs~ zIw3gsBirS1uQ@uE6W*SGb%Aj4wC~wg)_5*Q8UB&KQ({C`g~oHV*Ykt)23fNpL7%B7 z?Kc)=+!@Ke#HZJ8uXG!?CZat-ed5E2a{igt=?H;%;mMMx_7iAjvVV@79yn8cv6wBm zMm=C#<#uTR#);Mvbnh64uneBeZ1>sgVtU9-iE;kkf${u;?G2u6Yu26nQwia~xKluRnOM&<;$j$b+(| zk>!Hh!?aBo-ztCdy?(`1G8D!@#vPaW-|27Bl1MnRp?>p}N%Ib+!IxH8SCYfQ9Znd3 zCL-HJ6{e_R;?&u{v}ey;>)%KGu$BX6chjrZ`>h38y3m=CFWx`y<$+*4AEAFu;U`dB z(!8DCy}I@VSVW1$)OpeKDOjq0h$94#jIX3~bP}24t_fZ_8Gt@X3Ko-J2|52FGhntY z`@kN)Ec2#hv63X=4gWhw&2){O#Q|(dUTvbUSv>_^uH)Ao!PM?I?C4_N(&Fi;9@CP& zQo*;Gu6eI`R?uB2BTTRx8(LT+zTlp4a?)FuJLbQN z<>v?Lcd$Bfj-ZIU@T7*}x|tBc9ET4AI{Pc&hn-dkIi}9Q$?@+QBa$t?DdRvR#ZX}c z&JP8O&|W6~Mo(YCcd+bhw zaD@q%9;aH9B!n?)Tu4qYJbmq=9^(O1UmW!tWxHK|yX-(wE+}LleK*el=;ZTngg_yE zOD^AZtw6q3c8!;n+1~+RX+DgfmrlOBzEvX@ad@Qo)?;jzD8P*K%>L|e_hW_Il~@A8S14t4B1{d|epzD{IS2TOJrU?H~B->zTdFIRPi&p?4bOJ@-*%I1;juQ)B&W z>+T}7X4I*4O_NGg{GTGv2GbfT2MunGe)Slar7Gc;B7)+*%;oLEuq9l;+s5Tgkle9; z@YyIlcB8_enw-RXQII##a032L-^do`$}zFZUS#Mfz-6%}@EqxebICY_h)&=al`Io>?DekUSYpS=g_^~+ptZ9_mly$+AAF# zt*Cu1FaxKORSu(AnOSuo?wsH)5F@;tFsZ}NKZurCVf7N0Jlg9u0FN(npKf$7SUf1p zTww?wd+@yM%VNp|C$eS;r zD&=nlDOK--zW|A8-pv9(4#MwsH6&s@Htgl+Vf=EAx>eE{6}ZNKgI*rDIMgAvi-I^J z%8q_pjF&IZeSzxIzy=qLW7cE)CG`(C)N=FJcO<78_E62=b(yKNl14@p1mdPw8;OM7 zS{Vm7pJdrSv_AvoTTtbuDCG9XzPs<8-8g1EqS)`bqEtup_|Mu(5{*BlAH^Eu#3Xxe z2;>)$mg>W>D~=9d)W=OuK}T;Ot|F6gsuOEPAt%>9$)G3E9)vO`)Cnh;C7bLo+SSXc#uzi0ERgwrr%NBU|gOwLQ8H4Gp~{!6x4Z19`B3CT{{k6PPIh3z3E0RGN0qK zJn_F*i3gwyJs?3NVF}1NSRn#Gij@ulXfxZPPL`kgD;~r0;)0FO>2GdOS_s+`+`#ST zSJBh6@s4>UMq3MTE*r6;UL&Lc1R+G=}-%CQ-Iu=h9`Ng8k8|Uv-p2#=7|2JL*-R*7S5`z-tO>2IeCl z+ANeyH*?YW`a()uo!|mE@m$COe*{n+N&s6sV!W;?Vd=?ld&x*Nm4ZIM!}_K)gFguW zw(u`^Qw&4g{zL@$dS95qS33%{;^c2NR){R?bXuvwJH`wN0I#kqolH%kU%iBz`yfw0z5be zTcdBe(scHYDaPHtir#;c{~(Y;S)!?gkXYJ*asSR4Fa5DDE=Kz*s^ZSJf6DPl`2q6l zw(P0Y>gVctNx9(MTWQ<&nu<}+hC${og|njRSYF?NOUUK4DT=aw1_u2$_zv?8^1j52 zOTM}1dPV_2Om9r--vx8elB|>3HRJNfz9z%4pvlw)OJ!Fk-i-Dl>!oecV(gp`Ei^&x z(`yoh0~o(8K`2{s(kG=v+{+?0`ue&LXtj%XRhD7Onf4+q0a<3HTJc)f(2y?ifnP%e z%6X3Q3;m<>wtGFNh6WF%QS$Jom0VNs~-)*xx3w43JnE{%Xql z%dgw1lbWoGXS#bZ(ekdCG>yOFL_>~&&nPW0OZN~($oK8?kGao3wfJ(R4lR<`SV{BK zM5s!Kel}#c-gQ+K!QJ?Ex*X*E)6qLw+Oux=)vqpj_rqXzEc?sdIVN9QV9pBvE)bpf zZR6}6(yTgyjRYwq8dKdd;oRC7Ur1|J0x5AD&n0#5h>GeJDY&}}u4ZnUKFQ%OX1J5g z|NSf20nxiU5J@T4(s~I*?ClsizCD;TnU2^Vj6ujJl-0A#jWP0^)T4f|Obd;X&;tC4 zH;agnMp?-hFw%r04^b?oepT~c!5O}@o5kYlys)RQ) zJ;1Hv3=DpDWKWiwbs4$G8i!|w6&4+`20zc`dMn4bq*+3vdh;SZHfb*Gq#FI#GD>Cp zLBMmR#?mmpB#F;#KMgufR**n!BVLy&Tmt&9fd-H)B0p!I1|+{s$(GYDA13d8WFYH) zRdLH&uj9(_%jfXa9n_ZJg8CuOK)VUH#IWUoj`51}chsi)seH2W@}EDV9}QP(9B>NC z30NB{SArn=wfg-}^5amwX$l?;aAlHM6_dAqk==pUxXSnuc!}KF?)Iw)29{_L|9@Xa zE0}Q?E}gJ#Xa!tJT$UDG7hEVmN3$jUvY$tos``^mhg>y++$SrB&y4O~5)B|aVDX&N zNngoM5192vdxqN({5R12`tkj0(uv*lHzm5n5YGCm89sqRTVPlC6&QU*5b5;H(aRx+ z`h`W^12to+0**e*t}Xhn2e&Bs4Ewqdxq+EW|VWw#)G(Q78QB?bF$G3+g z(=Yrh`d>IJW>+PJQb{r@kZ^>WV0r6Wh+v64?@K0~LSNIJ|Gc}}PIs{!m!46isrQ*6 z*8vM>SN@y|#DFtF{TDi$_E`D`Vy6YBwwu}^+r7GG*hIsnqEVs3kHJ7RiY`0c98KFh zNfJ@V2>0C8z=D%=??>|?_+Y(Y!(U~+6`2`vb8%=ef(T4=c*K1zySxF@nW4aU6Jp8% z7G62}KK?wi^K^bQGZ5?(nxwf;+2^(V9%?1ka5GAq*|7YpaL4q&NBxaFrMqm5!T`__ zbVM?ma)Oo9;k~JExx03#SY9&eJK!`OU(g(qmwi^SJpC1r;uB&E@ z=3v%26sQ-O>KqM)aO#rP1}oggjqXWO&;_+5OL)KfM~iR;^pgtU`A0ufm%0k8kQ$kZ zarPxx!d51g=5u>V0se9FXJnr@M-8NI+>RJ;yTs$LJC>^Za_KwfB%wMmMbyjhSb^CY9_8^Y zPR~n|N-M%K#kae4keE#an4pNdOgn^z0NZCt+zy~Ta zP<@}aR1OJ&rUf2~U4p|$yR)v~HVOjVndPCG#Vea}LpEtsSX;Ft5J<%`UX!w8Hm1^szSTgSs_8 z`v>}L3}kIf2TMt>>)3pK3aM!;io--{=)1 z-3t%#)l)zCu>E?GkgX*N?m|L@b1Ox7(o=1UOV3Q~w_o*p0&|86E_>FMF=ed*0Bj9+ ze@!*mTy;UE_D&URyLZK^i*;%n+fGf9i|4T^PF8b-qLX4B$6iHAAcuhr#@7KwS7wq z5_JFM%xH-c0J(a5>@F&zP1!Y8|9iN|bMFvi`$_n!3l+i=_2l{Hb~y9+QElks;$p7=)GORr~55Lb$I#WJ;6pLqM< zNJF*25v|{v*Wk4-4bdKBH}0#JKB=H>x^`Ur19S#1F<+iQ?)H%!eNGzgOrBx`MW2!e~j+HGr3%_|BhV3cMlaJa+ z+NV}xivg4~=SVyPO5|GnR=5LL*17n-dm-DMUD^~zeO^!KM|^oWjB*QmnbbUMwU8Gw z^_M(|7-rb{1lHe?3ZQv!u**j(8o>A{WvjG`Y=pf#!JAsr%<%60@B%(OJp8ghAr|^jlkzT*6es4*J1C^hw4%mE~j8`U^Jv zntb9~nN0MwTxhyL@|WR;H&4DE>ch@yh$Ss&8HppXCneEt#jmMmE<%TnJTY26#sP2`=v+J(fuorSO zdf7;Qt*zLwewQ_zwRW<4iX@@;xNAH{t}DGiAt}PRFa!%hD_XOSR_sRYx18g%ZZP0o z@3jy@{WH-x;@;r%=LAIMMP9V#9YQ(AdO?F_8Rj25lkmeBaf6bGG316SHueaCAz%6+ z4_yXju(d>d1P*=w%a|Y2t7HMp9sE&0#~*W_M7mj;{+Ni2b8MVt;?}_&xeyViNcZrC ze8LJ~y~zBjbmAP~X^oGM4m~53^}S9J8BIJ;YWe+(4i?BTN1F3INmyiI^&P(L!=riv zG-h_3R?q?Q7EGu0+G%js`!yLm7%?88kw%5>6RuRWt<4)q^BOILVVGrN6DP>_%?($` z^H^4La+-oAV6P0F>N5gwu&z8Y={v+Hd-vKD)H++ii&Sg2w$N3Mh;t7vBsi?KK9SVr z7i-lhqr~Zd;+X&hE#)M`)`CUn1Yc1_Wi20e>I1@=(XBuef9Sh*#l4r7W9wKWQ$Nz@ zaPtsVCD_r!=O%+Ymc9CNg0@za9QzVur_@Zhrh7R!d5JLP!UQQu4oBdTa^b0+Og8R6 zI|ACy_;Q=J72g4oVnpMROeT5Ub(Y*e6w~RCF&&E_8HupH>R~th9v&!E=lIGdaldf$ zh0;ka@xOKP-1`~`*Mm}?rB+y{+#Z<(2@*)-59oW)1b5c1=D+>J)BJhm7cO1b&X`)? z6oFd92jtt4A@567D#4}D9+>Pf zqi|8D%+B+Bu;XAc`E!&pMJv@R-}K54m7zYP9-LTeNBWZVyevG%{|MJVV^uK!utM`E za$_Nkbv%=?_CxNp-ThLR6to~M%QbwS8Er*biO2;Ghl~@!p7f!aah<4kY` zdwiprihFiSkz^6hJQK+AL0^!-_)3P~%8%lq1$}oP>x!K|!#Ho2vd5Smst-<2%V&Dw zc%vXlAXT~WZVBbf@l1>1f5MuOq4*3<)8B1!7@N@kRL06T{3DGDdOvv5lB_=S&Y6?d zrc}Bg0jn(`r)ISIx+Y6ohW$3Io9{oz&@N24VYRcBdaUyE4M>L7wO?52Y;OwCO!w~3z-y7)#+H^j2{{OtKY9k zZ2PRZzf9P{xWoea{mUdiAv19uI1h$MFof&jFednIOeLF$pD$q;{A|3FGLV{a2kDBb zgYV8r1XdaeS5JOJPM<(dC6l9di*^-xMiB8Ap~mwMw8=2+5L=ezJY9`L{qI}`I?M;1 z@vND4E6)9BpPmv#ZPE5oPOV&+4j-cAE;&xiYXHmI?o_t|)88%2FELfeG-?+unSy^J zdf{gyv5x#)&{A9powyLb0o?}qL&xpEUILr6?s-aM*7<4hwzipKobRdc5J{xZQS*L2 z_Z~i0S5GANlKL4*Vvh{V7cucrjDe7eUib~F9EJeKFV3D5x|@pwxR5&r@*KQuhB=VB zM|&qST2wJ@QfqkV2fAfqtNA-Se)?xQueW>7gmUb)(*Ic?!J=}g_Ilw==Pu3PeYg{aZxjrj!{i3y&J( zX`AmGKA@1#JBmQYN=<8vcTB(N+-tqx)%#k3Z!zUgd*KT~)G=PoC~}OJDkU}*Bq3S* zh)+1dAnZ)2&87g)1H)WFx!fLcT^zNac?}8QL(q)88MtwuecJB1dhFSZM$~`WLtY%9 z?IFy&OHiEFBI_Ma8#G7b0Sj8*zr6i?yiX3}%~%_<3MqCvW-!~TR?GM#wN`?H**7^W zP3Xqm-`piRZ+V&Dceti=pp{SjjjL3aq#ww?r}7 zdzCp~Z__!891OZs=&k-7{Q~^I$;jE8|9Y+Ypnvda$T|rJ1kC9-AHQZzgk#)KI}cD~ zQmhp^PVzx35E536Q@f>xJO0H>jHIymXUlvao3Gx;ECC$u7)6}SM?viQmyO-JW@+~m zZns7SK1(nNJ>b1stUs#VT2^HO?vNkSF5ZWZ!)Ql`YASY%|FooH3T(fy<55YSoqa1d z8y{p?Rl*|0eb;@cKk*HhfOR2KbE4EX7E4L5a&1#nRIFt|bIFz= z=H-0TYO3+G#dNkJby6S(hlVsSnk*a2efdh2#x`684)JTf9! z3LE)dJR+Qq`WV6N?NH{#H3FX;~9ohHngsD4lsBTmJiUNes`$ihvg)s=62 zw`v-@yc2G6>@YgEVl>>FSMJ^3o`m2?Rt+`gFe&>uTO(-t`m2y`@oK%-TCa&)3KQc` z(gEt9kL$~xo_$A^e^-@qCo2cOTx719eI4#~x)n<&^*vNgf3X3c2#tFJrpB&`{2a@q z1*2<}^zgaMM>6M*U3PCmfE8bJS(izYarQ&-4N zj#k*%S6IJhpW7)3nM_=+gmU(6N)ia<(ucV#+Jd}0MdBQ<7}~<^Bki;SjGXQP@*Hg_ z0@EWZfBGEypJaaSfm zXV3vl?!(MKSs2||fRBbq>T6}Yi%hI|z*}%JOgWTzDLcCTWxW&C%~%VOV7Gc$Q{H|> zf_`eB&8f07^?ROmBL3?TGGv?J-8gC|%8fYx=GJbi$dk5Z+{TOLrzNd;l17ms<)JXu z;JA`639KV!YdlAPw{7F|LxcyHJ`fxj=3n|dz(!fx+lcy3qsH2{kIGX0k3{j*kcFwW zvtp#&4y#-w$LcpaWie}f>RWotfdKx-u<+*Hfm!*h{jxYceLaB z{L4ZidqaQhcgUIXhhd4rkq{zFy#4xu$+)o!?h2Xon9Jft=jNk*ES+CXAvLVw>a45bx zQ;oS$tR$i6%U&kFyX~i@wSCIl@kK$_hazS4DBTyD|0c51;lM88bX7Xy6t0qP+d$IcBUG#Z#57Kd*`u2+}_K5KD^d>@dL^+ zGjy{%LM{9(7zK6Is=3khrzrF&9M+?!Cs{1ouZ&Y!GxE^CA*fB@E#YL{U{JDZ%q;qYflWBVpJ*k899U5 zK~GE8-jKR6JX-S8&{P@GUBhO3R6x>+e4{dK|7d@yTk5{@Sf-KAR{L6mo9zFaJG^W@ zFRz&9+bJ-B8$4Gpgf_l-yP`h{g?NmiK{;8oKKxKN6#vq;yFi!W&Y6v5n$U``-k`Cd-(P`8bYq~iS+0<$1m5S%PPc-Vj`<&#vhIR#VR^O{J-_cTVRb7Ta>ghwLFi%_jmyai$)pU_q5#&Ftj+*H^?}IB zp2v_mahL8{)()^Q`^wk_9dsjlhU^5_c&6M5z>fzyqueRo6m$WfgV0~g*PS_CtFzN< zUj#CE->Nu?8QoA^25?4YYNbx=Z^w1rrAo6gUwQ+>T=*A8(yzvTb^nNTG}w6JELbE@2e<* zdlE&Zhm)fR>4iTew0Nspgt=raJ)(C_-0v(Ccb%suf!e)$)m1L7A!=f+82;Jx&o^cNJ z*7egn$bT`q0^P={-X>=Cn~cutINI1{|5l0-2QeRTLHqM$EGP2E>FANs{j<^OwU^1X zh{%v2^$oT-q*4uxel3F3d10V?k*YvsMi*??`-Dj@0q82sO9&1Rn3iQZ%RqllhU38K z8B7oTT9*T)S7LPh8N(O0?!HKv%w{fE-?~Q{=dZA$&dzb(U{Jo!?D+{9-8p>=XQsjF zj`634I;-fMk%<|dDIAV5VEJ`*!{8O5gJX%&wda}4$FO2eYUL6 zDWiY3PyY=1r#iYLvDJEvAq!x~o&fZ2>HXKxt|*4pJqTA%%h7^5-q)077CL=mQ`9@7 zXE3_*>73rjDB$%8V6&Sa5*b}@ur*@luGU30%K1>Xq^UBr&SgGGWy5J3H8k`{-5==b z(Sql4D(T@!md7$WXH;b$STeUiwPzgS#f5XKOz3=ijSEBnx{h8~2L7Vg(nj!%)Bb#$ z?l3+Iw(db_s{TsMJog$r4H_MaN;3(;M|R|6@y#lRaRzvo=^mJtu~@289m0P#{>y zFq04|_k-;n0nb)<`*PGcBu=)P(kni_(H+il|LYr9;-MCx8x3TBf!?=bv`g#)=vRtq z)G~%ptk+d9b6N-sMR6ZtJ=ZJ07fLe5eGsU_Q!!_bCSVsA5!EJR`y3dZF^Uf7X}E-L z`71}$Ie|lDbbNT*?!5lwg_g~o?fe` zIaN7GEX8`|7*g@>j0U3&X7nAv+F}m-#>Il6kYG)&Bw~^~Y2ESwtNXdj45vspm`9YS zCuj7{!5(0aj7%kN-ETjlpQrl)9Z2t{E~7*|m;cB+*VV>#C<+H;Z-+v0(t*$r`u?wZ zYDZ$tIv-LqL&r{SS(Udg?vKLilD76G|3*e=H^?JVi&u%cqaGiR5nBr%XEiKU8v@Z( z_U{mMwf+r&=NGXcwA+CvNa?+&O%|E&!>dJi4f!u2sJHylAIh(^eymqNUz5&#lg{FK z7sbZSnpXvu( z%Qzm<>9V4U^-ISAH7bbWXat@d^QihzfUb~waz*k)}$Wf*DB_&i!v9@b3@AbUkd zS4nn_-WQC6(RUQ?d63x*2>naTI72-!53%(0vn=F&Uk=Kr*a_zO72LaPUa)51XIj66 z_0-8dRT#ZO4NvCQESE&LmALK*1IrZYbZZfhZ+qwN?&y8d#zmq_`pfBbdd)xwsiOen zE2nQDc**F7d}L9xVOFGU(A^q0@5t6*$Pd3M55YY0B2YR>S|5?to1`8auyvm*Vcw^J zF3yrHrp>F}8QC4NAy1dv?RGh7>kfn>Ys-_RYa*m|psuH1^N;kQFdNjyIse<^T_N1O zR$R{ppH#_4*r6UUj6nc;fvdI!@}n292QxSf`DRH$U||=xS*$zCLvE@FJ8`;A<>U4? zjx8>4&2iP*_$QLHWO8{7;i?$XhXgnoUd*d^lBjWjA5e#vxzHVs_h5xjTcz=i|5Y+&so{iWdi<1{*k33a7QKeV^)tNk139yq2(0Pq+Hn2NUxRcTQsYWI9+VNK=^k3uHMlJhXw%#q9 z08NJH-J1ksbbH4gqU3Se!D$!3TuhRj@Ey&Ld+6gDgq~`g{&0yW5A;s0d-Z-TMb!ir ziubKEx*+bBaj%zI>wbBifbOnoLy_9l{Y1sUXnma9;qIn+5j)}~+?(LZl78+Ur_|m%1wHA58w9Y!AC*840*!J~WQM!xL z<&Ta`Ee8iKweWCX(R=;Vyl^U!rZSz0xf@w9ExKVF-fE85(hYGr59|8Is{=k6b*l*> z+}5xxcTSIGoLYXjjI#)^a7c$~+@=}bZR6;ssyvHgbaD6(D$u*B3&y8xKjLUA*@LlQ1-4H^kF3c;`PA+wW?W=#9DLUhc)|+&(=je- zb*x90xHTuk^U6ETEsflHc?v8F)faACmNOeNjG7#geFQ{vQ2~_2P`)C&K*xXzLEe`k{1ftX&3lm&113 zm`0-b8M=8Aw42aDz5nH{nQ7Xww6brvlG-9K(qlpExL6k7x2lyOEPFdw&CfN9f-SUi$*p3rs>sgQ9)?C>*RqD@ zJ+yRLpvLlyUUzEgWdz$u%apdebB7gdFxGS69v$WID4qxJjpLet=M=BWeNtE#YB8Xm zRwM(pgaCaD?KE=F5(u8B_p|`g!lhXGjLsvvss%ef7|eCAwi814FtF(la<38akFxp8 z^}2@co$7K&EdDRxTpk*<7gjSEBq>~+ZLD7LWl;&i8#92vM9n|_Os&j%hv|yGvi|_weTTO*q(ipDJ ztr6x$?$Eyp*(Nm8DRMTR+5f!%Yg=~@F@vjgpjHmSh}0}auAn=#u?LGIA9^+KTKv3_6JYeZ32Z35 zOtE&i9E)iO*;GFp`RmGEUuSeOdKWx1599TEJ?DvYk&owdjMK95JRZ;UU@m23 z{FJWqYg&H)C7K@dZ#$3aKl09Q*HIV-!j%j*$_>h8-v33H7^9Ij8!EQiL&b4X028?T zItf4Hb2k}1u8~nc7~eAhdQh#6xsPQ~i3L0gTK<;+%9_4nBlPrX9x@#B)oQA7H_nnK z4NT*Hm!hX|)cMW0t5bD*r|8!9FmZ4_)Vp-(MXIko8I&HGbzhY& zb;7oj9$B>Dn;*PUi*D>d!4Sh_g0r#qKpvT~l?(;}fm6)Fm2We;J_u{HjbMxrT#egBgA`u23~qoQ>@1qc&sEv8m#Wo5*6aOL71j`i&Jb zqPq^St$AnjBR$nKu@hHI1Z%Ce<;8U$y3OTTShGPj*L?ucEar;jpeR#D8SDcn5KiNN zOuVzczXwzQ1!n!KIlA%`eIAx-5wQN)5O$uJ1ru~AdK$Wa<`Ojk-8n2h4pB8L9b|NA z;58zcZ>@N~;b32T6DO7}whl?pmxe(2Ip4CM9 zMzfkD#nsgqcWh;%Qx6ZU#;!8wTh2Y<=GW^bAnI?Mb#(uD z=~6cm@71ji>?#G$C8h=fo$sl~Tys^meJYAjfGg@bHk=8;xz~)}_EeM~G9Nt)f30ht zqhqUTgP$oHHW=s^L}IjU`{r)jH>PCtS-OBng2s03e&6IZ%8 zV1gy3D1h!*Aia|U&=@WzI<4ajGT|9*UQhIRj}LW!szg^mx(#mPNDq*o=+nK<0a%AM zj%vUrHRFmvePeZrG6r2DX>}Uo!R=JWa(g9Mm)p%MGf)_uadfl3L{5s=AL)Y=a2uz!6#pA3VaMjjr0qdT?JGrDV|0=odyH=Q4s_X6n^==3e zhXSw%2Rke1r~*p@eJwK1I>_;q$}+3m>sOA$10+^8kg&kUP7sdiq>10H>zJjPaht%x>FU{Sgc623`z8Zf4egQ=O#Kj`O&+ipiI*w5vgEd z_L}#Cg&}Tf7!9`2+ZE2(JT=0L7B2|Knq;aUDN<&*2XtUv1^OJ~ZIY)-KDN_Tfn_hc zxX}?Ax2>K`!F6Yl3lZQ+lB?Ry6UP|XV$iQ;J~X-!D=u1gMzNk|qC1y|^zG5C%4{(N zHfxVgNvdRuvkv3vGTo@IJB;p9*FF7oPr+Rp6XbbFtHPW}%DvJ|27Vd;P1ej~)2sT| z@)B^kzyPOiw>bKpd{#e@l>M+h#Va6OVSCO9Nqc?ATV?1YOckPnQOz#Qy97}`Ob%?he5Jp%GdC}Br z2Y_qWmIU8I_C&~fTb){pMOsTx_|_y|=45HAF+`-Z)xE@D2d8>h443=9wEd*I)@aSz zCj*|^Fcr7V4ksyTi#ByIvB_IAg9wil;l|oLc-F2)K0NYrUe|qAMJ*00(J>FLqX!Mp z)3s^xqA{*Z;98n#(UP=A#!O5LDLD|CcT**h1Fg7-_y$8gY$D;+Wp3CP z<+()2_h4n2X^L&9{u;RE6+hW~O z*c~9BsXI@WYSO61H3oKkeSd%d_5S(|Kqo3&vF_wWAAi1AiT?in0rU=kOSbmX7~1nMc8-r@Y{Oy( z8D6L4q-Wh)Oi#W4DZN#)ODt@RB;*ZC0zCU_E1K^Le2sNq%w9uXcQi;x5!j=Dx-(b@ zD~kRjg}h+-o5HC-+|K9u(O- z2EqcPc&0s-OtbkoUEiKb*X#JtRbYYi z@UV$Fj=*k*m*}LUYwFrde7V0!z)V-xfnD|iKWB(0ZIcD&%&uFioP!Gbm@vr zTvgD;jh>>J^>GIihtH$S^=$`Apq}TWgYey6%!X8=<8au3nW39OKHL`gAJJlQ{C+dX z{rpZf<5Fz5mA9%;Hy}2)I0`?ORTaG_^ve*5kA)!Y06arnQq-h>q6?(yYWhNuCmdno z$@I1lO`H0oUkKwdjHwf>pQcrdN_2SGzP)^Z`G$a*NBSn0XG!>887k4~m^4=IY0e7{ zto}>YI7YCG0iNnhh++VuhM zxM|giy!ToG4_@^)^miaq^H)?c$17}xGZ!2K=8(O>eH<9%I;~d@cScmhy6WtD_oVdH zX3|zRjUinndfh%T?DAzo%M*3kiTqN7W63W1H)1LM**xw)KkrC$7O zxgQ-D;^H;+sOLif&+lUs*t4Q7vK|mlB4Fgc{GQ{!jo$VpzpJBTXg0bKcTL86cpZH( z$Iygy?Y*X5(wj5HVP&j>g&QBV`C3em1HH03ctUb7hqcQIly+5gdebP%eFLZ)2m0k7 z3QxqeA(C3ew+5)6qkqF7VCM=m+jVr9;&-SC-ODx8(F3sp-CzV0Qhc6EW;Qu6;wgg# z=%fI6jgOfxS!p=pV}GE(k~a$U@vcM{_ZmgUEjCR)g&Vz&VFr9Lx8(ves-s(0Bd+W% z$<=4hfM$gAjfK3#txHh~HR7f9V6k{ofFgFa%rSC31AGSjPm6%{=7Fvq9E|*HZg8$? zrmCGH*j-)e0dpxOC9RlRk8KCw!3A#Vaa`5PuKkfQf=ln$O^~kMx40u=bv|*QWbh>x z1{d(09&U&9|5Ks^>TGc@73yS)qd_pYBR6p9=KlvF(j_pCjB%=vE2CI;FS{7pnY8LF z_`o~tZdoNb@sdl@nP#!DgjY2l2zT+730U<}{vq!v+7q@5&szt&V=QH_xq(iYz6Nq> zvbbIxva>d+PY^FUIE!yq(j96$cx;&0s*oIECxV}jIIFcTOJlPInGUW!(7*gZ65T<@ zQ0F97gC*|hom%Pu%8>%#o|k*xMr8+O-AOP@uKB8oPWvm7Lrn`l;~((AqV3SV$1StK z#~Lh=&~miPWxg9GQ+*|&1L^3QL?7ym9uDDKi*fYGIKfBNX9VlgHhD#;7wr4`)19Gh zDz$ObJQXk&lT;~ECMy-o=;aA~gB5r7%PGcV^GhX1x{2eJEK+@J*u6HD=~JxkM2LXZ z?&wB2Eq0FVwP9X0t3@SxSyswRiuv70z>ZBU?g)n?lmo$HtBWh}Ip6T(Qr2CfV`!mg z^Bcn8M6!v1o|BCa0R2H7-8;Jv^lo}wqO*=}j>tH30XxR2BI5>0X;Et&Bs$yOJLc^g zHPh<{x2|~rXzmp<3PYwb2~V`SYQUvRYeDHy47B}*4R+5_mMu`CD|oj zxljIpM4!5{#J+Z2cQ<}^d>H6}x%$xyH*heGbjRWN*=t^hdEN6Si<-OEWLR9C!hs+c z6wiuoc^6V3!LH^@t4wiT->2kGwP5aU6u9s3jUeyjXtZ|9^CY>*$W_ z&}K6lWp_d;u^nEIZVXO%)b+}TPiy$$9G!`HpW#CFXBFLA{50g^UPq6M?l*WL-95Ow z(^RLDK3{eJKaNHR+F&;1@!6Ha%)4WISFvB};ec}B8-bwb5NG%RU5z$?=O_0f(lpGi zvf3k52dT_?T!yccVIFH|IqyV0k%>D?=T_M{P;^#Xucx-x!Y5`%N0M%h?)Fwo8a*7< zGF9}r824ANw3G{ya=4EP-JWUq{ycPa{8YzdHXl~sKNi2kvLWuMnT-HI&noF{xTzs+ zmo92I-U`L*HfqbxJn{^m&vGtQd$oI&xX{{ia8%K4nov2Jqwf^Ef89u5?s!5vPK=(M zr5aIZcEl0@hIRQDB10wHyE!RbCr7Mh!x)j*#dSEiz;R?}7xnx{L67VuBU_tv+1!o! zHlm%YqO6k12Ktzthsn+iXzztiaBgtRfZcREmDMXsa^0M|DY{VVW`93NPut&1I)x9$ z-Qp{-EYea5mFd#AdK> ziVn*_ud2?ewrcoq81rzlg8l?1H)kHJtU1YfCt8O@27R)a45tiR)L~+sCYXE*^s=nK z*KKsDIW3-d;C-7UU3+;skSRR6`$qqMWn7STU~Qwn5B&!B=Ia0bVw*Rk>wW8Z8km&1 zO&8;m13mXH&7z`&EBXpL6umd28s_O7T@G;0)Rb^m(A7~_2RKa~#a*bJ-$#e0L(Uh= zOMQy&H2oJ>yL(U#b(F_VUTQhGoPNok`uyGVxEGG*Gi&R(y6|dZvJI0%l40iO2z{O| zy6aSYpcx&O+FsG|=*|is*RP;gfQ}qpr@%Z5I#c<`c`wvNM5lsnCiadF#yFFFYabnL zXDtq}<0RFaD7vNRvm70yH^1s$J`!Ip67=l-hx0u5ARo-ff;n`=d{z$A!hhPk8s5fn z9O^sSw8w+gjspY%g8u)%xfVm=m3_k*`lKMlYcAkT!duu>PW5|V8$Ev#n=t~A=S$1_{lJeYaCPTuV-uB9}{H4fk5H^v$Fw4TQkg@OdiQDqr8 zQ-*}xcF=FKypw;E=xVRiDaViOB9drj?s3lJ#wEjcdpr)ww%5=wiLRac#{CiSWU2_bBK*`Wy(<;yNH(VtFg`95ZvWr=&PAp)6LtDjq-W@L%!}g1LIaj z7o_KmV#7MRi!cLO4v9{2-S0r{w<5o0)H_f!{EgutQ0yJYtM*diof;FPMj`HQ*16RsFN9?gFT1 z(i=r%pP96axbBh~3NRA~o~Q!!zWAgnBb+gfilsF>!XX8(;oAyW*(S&KxabZxhB_*0 zP)|T>3HJ=SU4R~M**z}NB_Snv%xKnXC;MyU=*~9xAn-&$?TRjK;E-`_bg%gX@HqH; z(0lBYA)dAK(h}oH+!Mx0Q>XBd-w$AV7f`&C5(Cmi-$65^rPE1DV{6EcxFn^z`cYWPX~I>K!;`T zE{V>8Ct!B>ST_wF)pjwTK6%VIoTp&v4ir~l)^)KW@2vsTG#M4|ulei?)Epp&o!Z$B z&*3J}MR>+%f!y#?aIZgR-0}EeC@EIa5nP5$?t3|h~+gOVb>Pf@oHy~BeCw9WPk_J!d$F$YkKyvyX$hbE!?JR z2?UQB%}`b;Hsq!^(!C+AnIB0)3-|N&UDKIDNv)8`HI7VjEYaD(7U<`SB2J$?;+(>c z%GDe~&O6SaCo;EjKSTGKBDU@;c!=yW9$S=<3?R?67~4;EtGiFVIvWp*d0Sb7^=f&X4sniEigq z0d}^$S03!3?O(~%=wlFX#Gg{_uZHyNQGs4@5ZHC7=`}SSe1UD&(a|r3K^Dk$;1?fE zz;-U}kl0?1dq!$6%Mm+@N@@fBVvXmLSk=E2=tI3wqBF|j0Sl-@nk$26%St*2cJ~tf zl98T)J`9Vn+`i(jbXK(iUlf>23-#pBrit=oS+_a9<%a-ZSD;1eIz|}5j!o2g2V(Cf zIj(Z$&etY$jF}{Ks%0NBW`OgG?^4Z=i!XCBfgbAU?OMdTke1F;o5z4=6v(yTYA0~p z%YeAk*)zlXIm0^zTWO*dK|9gHK7zjJ^AzgVD9{0Pc8nvdyHZ70wQQUW<^V~A^}|JR zemP)!Eu{9HO`%3bdP#0?VFT}aj zi$h8IwL7Fa;=op#$@O*XF0c)hbWL=4t)DK}%XEOl%*wpmqqFBcOsIClQMhM61|A@H z3?mx_RCi+tzy2CVeT2}5k0N+l@mzYbnm$MkS{h19%-n4{D1j~`W)`^LIg=;=p}N*yoV zHL^PdI)u8CR5T6k7~Qdp z?uf2rS_7_`;^;AaH8Q)-)F>UQk*!s;%*IqC6ySpamgv^YKI=BuYwbko9?e`94~sVB z=_wiz$<=a+PB6FR>Ej&^`_R!%oYNJHUP;fH?p|xxY>;!{4jkUChMX6VTNDn|d>oZg z4wfs%y$2|GjL|SCIJLf1hD*SQq~NQco(SsJK@zJJiv=MII364Rpf0v3w|<6mzYulR)oyUdTHR1B`BM3uZitr2a0FJHHwd z9WdwXR2Ay+sg{kqztnkXH$a7fA{TXKUQ&m~mCRvhc4dvZ}M+E6?Pub3qS@bD$IzI(f&O z^mLm8fsP6PdR~RM(-UU6nFLF;HwN)oN5?VMMiN|R@CVP1?rG}*WMmtFU6T=c#@!F__KS7%IC>o8+T+;Ynrs|<#IaLM ze0?gPRij~Yj7h+5&>H|v@Kz+&Wt)q3mgp2TuE_J2^z&VabGEv}64!jblquLp2dzRw zCtKTJPNnmBjT{D!0klb$lNTI#)Qo&ccOzrK^U!j6E>9a`l2rj+`1D$8+J@ZXczdTYgtiE$iDbT*|6+QA)b9LYVQff7mTcyA3HW&`e!&k@$+kgpqF zpfB-t7t2NWETYRC-Sbm@z94=3gzM&999Tqx1;|5V+{)B-z;l6)PGO;Gg-!)(($&!i z|1?H6GEj|*<2@z{{c5jc8u&uus*PhG5?vEn-4*3?!6Lodi+5a7s?;g4@v$c)l<4b% zHYkYgYMFI(@~mMb^Jy2Wd?F;13`ak*M>jjPqlE&@@{^|P2X8~{JwOl5?kddPdGx9= z8Mhl(cQ4e<94En*s!M_1f_s4!2Y$)N6+DS^6acw6c}-EB3t0yxSNT14p&4LFux8D#FvZg*-urr=r zr$5;i9AlwqGvx3Z#D|mM21V`SrMeNI??t?T*FrG7Rh4}C=`~@j`$H|{0}GIEmQqRH zVFpp-SfalTlGyCtt}W6GFW5<<^P!bc59g4OS#Oga}o!8 z0=u$=Zt`CT+|hESun;Xw(gGG)E$)1p#W<4h z-Y_Q)-X8FU3I7FHfLmd3CyXgCUoM{I-q)M26zKX$ux|IZxIK8qu|)S)cg^Mn%OV|G zdb{4u^qSlCUnDxA7hT$*9$;@X35 z^r0rg0L|NoV%{vqISF)-i|C$sb8R;cGX`@|1EV`6x-+}y#rq)Z2>x0J?V32P>)@3j z>MM(QB|~XKofeqtfMp1Fz#g48(fhB1$GZ;OvRS)&vkd1f(M zEt<&e4w*jmfcmQsxzyBTklO&sXAB_g!@KN|#*pfT4K~uKN4)zh#5|ufFT5|)PpAok zx#Ap17rmy%$Yd5>nhbfq7m1#%DE{s(E=k9^79ibZdOyt6b*;2Hx3{{aluIrCmU7nT zKT7q(FVxI4)pvYx9rU4!K3N|Opk2Fh&Q>o;jeBwul$NxZ$#u9Szm+KDL`R!z5a$#v z4uw7Y2>0ChOVa&`^p8+~8}6jH{8+XJBgk4TOD>~YGyT>F6&iOX&id?vI*|T}lHDB_ zGJ)tK)jf!Gx;j}nn3OlW--LQ!5Oq4APt!DxQ)b>k)A>A&Z=T9KWtf%1{6NoFC-N`*qama~{zBW=u|lf8NT+ z=g$N8HeKE?rK!(!%^k|Vm5JrCAEY07$dBd2+;d}Y`OS*CoT;>smnVD}p2MgEmaIb3 z304||HxD%RS?SHn;6bJ7pp_<_QT`(rMjz0@JuX?1Gf{u&Gj*DNh4S2V^tS95e~JK` zI51?|_|m;{7I$3M5}4zDb$th!WmF3kFH3m?OMF^x2b-rO|VAK8t5<=pj<=mIUB{a>3fiWGEo(1r!N;hipF z3zT#N`!5yf89|2goJuv#LiPPLO*8h#TXD+rU76D~DvKt7t`n^TbEXj!jj<7B^o7a# zmAk%QC+#)LKhwDKexd0!x67Akfp4{6h!=7bKXA1)fuIjae~E(j)8+a;uj#Ls%XBzj zFXP<4D$>p~GqWd?Pp4b+JQ~m^>zI)TI$cZuJa76iVVpF`5eNRS)K1L6lr^WMRnw$YtHr{n148Ml3r z4z$y~On`Yeo@X?AEnWXF&kOXvSJB$fbxEfgY44e?Q(oL(GJDY_b%tPWjEcI_RPFwv zypmh>Pc}*C6=s5ZFy?Q-i?j4b!%KAh07I^QTyD>^^EaK#8#6mkIqR>(7hcN`KK-Ea z3o#CPZb=J8xsl<#cSv{SuUCYIZVKx@U=E4SJ8Ytb3p3N3-0KU>i>BVs7|X&>p^~9) zid2@vhO_>nxX>l>*${qKKq;<971=uVl0h`x(0KMhS70eB6`>b>5kQ~&FZSYzbo7rv zzvTBZG1nJs>qlL+R7fkdCqwu&59r6_W}g28^e0iD9|vmXEQ1C8x-HxLf^sDa>7I~C zPbcLZ?(Vx-x$`~gM%^?^v7Dw)GQG>l8RwCiGB|Fk1j0ris!Nb&V47giGFQVpOgNfWmhi_xt${+fn{}lZLpBAL@A7RtD00000 LNkvXXu0mjfeACMTjLAtw?5a|X%ngI^oFtjo>%us>?g3{8` zAO7yTf82Mi@4oBa?^|omI%hw*pW6F8XV3fB8j3{twD@RfXhh0Na@uHUSRfi2#%Ck!M5R|Y-T)%hSx_7tPh-%lg;jx&DTvOV_O?-l5wH_hmj7!WwEW@r=|0XReseG12b z9by3wKs3ka|2=9wT6kOL+6(vpg}$9oU#&oN>f|_FQ8x6H4-9XwmZq}8zw~R!e+UgC zR&~z2P%5y#BS1})V!$TM<(sRk5w}#Za;B4>?B7)}O{BUy9U&dF+GPdoKy385zN5c7 z$?@-uC5ky>)huSxjmH&UCZtoZOiJWt+Ou7xV4rGql1rE5yV9H)w$(%ei{!U{SQV`1x?+vX*5Zm?GY5A`axy!xUbSg8K&HlfDvxB%-$SG^+sjW$)g z?$>Q;YVSB_N;k#QC!Q}y{-EBvErU#9O-@T}o>`fGjjWs<6Ou*W`i}@Uf0&D_`(TuR z`cfja!!AOw^Y+wv8pA7Te!)1H)<0s`zDNkB!bir<>rU{w>7iqQ zyM)Y_)EL$_C%I7n~lm{Q3 z+Q`61-dX)zoZWrfvRaSIE|&L3f_Cfj3qjEH{)WB}OuS?@s6c=Ha_^Fu!NEVU$sKO{ zsn@@)E;bC!XN#Xo8XbjAvQ}^hR{vp!y}KFoJ@aN%#j%HGy&-XIE!6AmNK8wrub;gz ztAP72sN*(gsNbvcHj6a9+3BDo3+_1Pjc8uzT=6?-irIj4jP@68fKRjXe{YOSGFqLe zkwTZB!PqZfw>s{mM$h33PZgzyWpj7!#$?=WUnYGaH=3oWm?Kga`9>C1|EGSbz4+76 zG7j9oAl6=~#{`WfLBCXzNT$0)bLNe&4<{tgf9#!6r07v+TBkVAv; zAox2Hk_GTL)o28FH;$?QeewO@mF)k*<+%Y;vKEq{qiW$Q+p8M}y!Lnkm`W}&AE zS#;{Z_C7>P;{ZKqj$f-c!pC#gs#c}(z~HU;jkO9XoGN?ynalU3n#KAH{mj@qD!5g; zL?lJ#tQB5S2WJ>C0&~(VUiW5$Xp?4739w|#u0QaBGwFiB&v1^$T@@L>VtM%o;4NJ` zCEzov-p9je%bU>p%mkX}Mc$DJFwjha?wM-G47NP*b}W6nM4!N1*WBl&#&W!ZCId^@ z8E4?nezo6IMOnXszF1GAQ9?~{s#XqfKL`rk+zc%*9Ux3|TsHF={&t9O*5sVB45oaG z>PzJ4E$hNWS+~#`OL%Y^x>N@U#dI=1i|}J{S!XO8;QhEmn13(<&zRsTDkJ{#y20BC(>n@g&=8)7KTY}amJw^CW9wH!?q?NE zxJ)Bg7eiXtVE;KO1}X|vIs)A@cxm&*#PAMLSs@PL7THlv~5)AsVbOizLHF)dg30@NQ2V`W6~O~{`~k@ z3-jJ=G{<%(PGfsR*v&*5EXYrp{WM|*r?G}X|Iy{wt@6A59=|zEf*bw+AJS>Yt2g`G z@X5wSMA4h*5|o#Y%+y>dsy}A4C?~wB=o}Ay>kwh`6_e50zaK0;oe2u;sSyq`SH2NS zJUDz`B1))Q-BKrHm~k>KceNl+6eX-YrFAoFqCM?b8B9xTB$GdMe(n*}{Zb`^Vi~3Q z(U=4V<`2tp1&d98tj8uDyPPpn?B{qZ6Y*zQP%5{Yq)Ln}c3s|!_Ko-06;JBeJ3Ifd znvVQZ(UTBRD9hUc;voxw2BD} z3?YSGM|X#A_(Q81y^ek*_G}&&J@4Iq|Hb$9A)0E65PbS1IeB=(9O*$DJ2&|C*LCo( z>6zf|`;D!v?bve12R!o>G$DfMIW}D#t`Cc7G_wO5I?%k2jx9_UQ|XUfu+!raFV`xS z%bY)ReiOET?Pz4%@GHt$z@NL^l2%*!!h4Ot`Q_J|B6FEAidn~<=0-bi?bD*=sMPzV_pRM$}BU7u?Ysbu2*T^9YyWTY`wYVt# z0%(N+a1nO&S*OTuAtqNV_z$?*{E(IbWxC1f9yT_+O@X=)*4GWj*;zWSKfZFKgrzRG z&NA}J5XNxX&-eioC!zu8b2;T?(dgHYg%+03)kjy*MeO}!RLR%#?#M{K+f=bxbt|xD zb$&nV#MH}R@LZBw#yatnefjgTQnpz%=j%PHpETl`D%=3Ir5A@VaKeCk^^(oYrQA%6 zG_jTfb}A9z1!4hprfRnT;29qB_ zy?7GJWDg!VI$>TMiWPTzF)85Ua@%}eC888uvKsMTK-(Fq0G+5*I-&$Ry$)KvO&KHy z6ah$<47iN0|7%*vcW$`1BVp8IO7aX~2S{tDJ>7TfriGB(3t!GaJXGavWq8`n^A;U8 zzLSdK%3gQj!rA!;V0*ex2HhC{*B86Spf>t6U+bGUG03a;cAc1*fI7VwQ9K~-D1GkNfspG5l4R{*JG@2Ex( zFnRYyLqtC1VdI~8ddD}t+sBD788+&d2Apt9BfVM+0v1{@9a~w1P1QA8qSA=2av#8+ z{;IbU5rLSuo%&%T1W}JR;sqR406|IDzm$Pq-6fX3Z<-}j1+9|{)fxP_-}tW5_`vYf zN32@fbH|*~55+9OI@y#Zhb)NA(v6FBsHl`Op|BU#f_)V< z|1=?7m?N)OSaTL6+V&XOe<`EhOC|H$VDIEJ$)(@Ljj>S=BX9zmmYCf>Iz0A2?KF+S z0?r9k6Yl!%q&Uo*vI85%x(Z~j_8(9t9XMVd{grO~CJ8APMu*(@3{{f82n zUj6f{Q;imE)eEJxsv`8A6fp27y*d>p(4&fP;GE_q34XJG_AZHQO4u;;lm_SIr9hHW9&v=qj-L1-v;=tVG=LC>a91~$MLU2^>+xRyqk9Sz18M)A47Qc*r*{C>l7 z1G*VWwd307tVeZ1l%tYkywbb(toN7hwqz{WHkL8OkmDjJ`@`WMHWH-e9(Cc?IQ4pQR0I4P0Kbq zOyoZgE7%d|_n=8jFKm4|sk(bRy6Q3xN<8W?zq_6?i@=9-$vJCkAbLpr3eJ zLNo>{VCPwG&K9AezK53t-dKZ|^dh3b6em8okFI~LXj$%7$w@ptsrm|E2>WTm28Eyf zPn&go{f`<-@|Ncax6@=rx}-)XK3YvBHtmWfE&Xp=#Eiuh>xUyOX;bi~G%7ha z`sCOMu@B5#n1J)RFhC{U3mpl3V%eJM_HrRN-!!1UNN-4lB`Xd5$&(YBo6sryq!p z9L>`b6Vcfi+Q`_SUFLb@Ct96NTOwHRU(2u9N-QRj|deCDC7I!dUytv&#n*9<3MzhZxAaqryNy|=B?P| zt}m6@RwyzDd}C7YuUF)KJv2$htG0nE)3A_$mA+A{Z??ID-!J-B_P@{#)F7KiqBIw= zIgG$FD$_2DmV-?NCx5UqTQ5VLRg`E*qwEv0eci{&=m42`s+A-T?@h9&Or>$+^@Cj^3mm*fTBVA-tX#9AQcdM2mM?_6EuK~1fJN~-M zFD4LUC*O+zwpy1|mnx9Z#|>_#^2)$fDw*N2Ep7oWiMREDAxNq1vZUJD0u@iy`px{J z6u{>JmT>{9%|Hz9)VRmaoZo%6QV!2NYku!0Ly_R4Gqr`Rz0nonFt6cu>~s=&?X-3+ z0eqR-DDM7nO=w=;nSnJQF|>BphG4w1+=D&+p@izatlwC&|dKN`dp?cMQsf)6&5R)%-L{V;`Q$5ToK(VsdO?S97A!iXvP` z&byaj{JFi5ME&6g2Y;9_7od821dHW)qf~OM3FhuG8cY``azFR3-h%xJK79<>mlhAx zX9=V2Xyv2J^cQA zd_R`YABRb>)2ov4V0CdmLnUfKx334UJoUwHy5R6OaMcQ?OHQEUCt|R~CWOL(ab0|iMCQ;y#Lo2dMO5yP!sF7C zKfEW)qDm#Sskg1(d_5T4cFo_zgsT=38~w_*Din@Uk9WqBZVIm}d>LtA^0}PVP02|l zCNdn69t8`cSZB?`lhkn9%NU#!iieW8&~goyn7SEC2CUhwU_U)S=z zm@$OKuq`zzTC#Y7Qd-0O=PgbT2avLbbF?KIA4$3Rd{?&(w<7k`zscg&2qakYQwC7N zN~P+ommUzL>(CC=X^(2m?>)Gx=XbKL#DiT;p3B_Tdebg(H(4T8)%>3eSmfYPIaPur3SsCR4 ziWAD!-n;=(3O;}IE_8;y;`57(N(%!IiyaeHOc+PZZ^#!-z%D|bna<})(5UF&0) z{ml8nfFKQiLg|a-{-HPYsBL=yUuekRDt@Ys%+KMsh`rKBD`)n))(CF%Wd;39E`1Kx; zeZvKb6xm+gSEjJuJ}U`?_M5uN-JDZcH6SF;Jy#C={b@#lDA2zG6~O7CawG99i7w_1G1(G~_Lc-L#{I)Kzzm zlp8HdY%|p?oHK4;_O|wW9Mumz{$s9aQAia4t^4*P#sag!+?&|;>QB<*x~*~ z4Y{iG>Dfue?cU+4ZXWog**7v7e`4e1<0txWc`sa}KKzLWo-oN3z%%RjAv84VQYh2W zc&*k?u~8ZB1=J1oDa{rOJkD}N{98Na#j#DaG&)!|>Udf_uXs2Vn|O(v=q<`jvlnA17OmSbOZ=MDC3YZgYGnx_qe)C5a8{<$3gTN zDG}EHaD&_Z7Hx$8a6k|M$uPgiQC5+}Z3z6s{htU6#;NQ4t&hVw+K&F!;)c-T=4d!% z>;QtgQ-U0%$v(WdMm_jRx)~QbCHEn1uq0!uTLy*esxtqZ^L3TLT=NRVquRJ>ffign z>k$j_uOtKbIkKT+DZbb+>8~#2{KoHFLKV*ELs;$7*ZTkF;J}qS$;|lmgrS2LZC}(a z60+HDHDF^}oiG3RU1+{b6B;<=LRoKf+SJkiWUJfHvAJj&#IN&lOYK_wJfIk+xzmA- z*X1|zuI-PE=&&dLAOOK_Q-(ZB;A131#7VEXpC7uNvwo&n+4Fyu|HBF3Q#OAxSm+2}~YwGq@KJ1)pW7&GoGvDtmL?MbAVc_jk@a<1p;z zarw#ARKjOK;qXY}yupt-Qf@@?PD_&M0m|(vFbD`R(6J&M(D#Vw>zO z(1V@vDG^dD6po(4Kip?%Ql1=ok@M&hW%?}p&uqVfVZ^399gAuuj}uuiL@ubDRVJC( zNiEH1R_m?UN-W3y)PqfE))UkN`-e4va)ap$dLf|&oMkffs-f0Sr)&|;EzrI`fcnMH zG5&_j`Jd1!7<)Bf7*V0F^NE+JfpEC`+L4g;eWhmLcX}$NH+75iCA@37XA_=^O896G zuG8-Q=QG$B6Gx)AIo5gg!2V3rdmJk2#`2(l`Ao^f88iE*9Zuu!6fwu{3fdb1zZ{~v zpFgR0BM!*%E}YM69h@*|$Vj7-lD4TVTRN&nv@UfF+J>=mtIuQ48EPJ%EESd2M#EzS z7L!TqBA-Xl0Rn&;Swgk?UNkwA55q<9@nc|zn5ds5R;^+A;aeoOIEFsmDL?Q8|5UIv z4{r^YI^$l4i~2r_P9;Sg{r+W!nu0YNx2lrTYx9BdsJL&&{Y2ewEnVfJnQdEeAh|wi zbjHD$`n=F4O~$Y&dp@Ru^rtL*y!8)gYhR5$20mdh!y{t~D0V%DaM_4}Ag)4M@FD+; zKMy#Qmf_HMU+Bq4ci~4lw(7E6SOEXmn55#qv+W0fx7O6sTGt;hWeae!|Hv#%ejy3R zMi_{NXYWO9^xzOUkNZJzsuW8FKU5&D(IDyhsqe;G!i$F-nxwJf*k#U}p$oqPP}e~q zeyCUApsXGJ864xu=V=+7birn|TH*bn=~JD;P^7|RY)9uRPI@+_mp8)}gv-wqtx1Pf zsp(7ms?H5y(lxZ;x8Xi!aEQfhA*a_V2mg548*`>#&Hbj78x(C+^5$a4fRC# z@$-_yWTDnN?xvSGxE`)WTl4=va=O!Rybb zYkMzo**@-ewrDHD-BogyP@jf=JRd&#lth!&_RWPWv%jowW2sE`ZE6KT*-=?sU z^DOK0Qdyt)Gk+p|7svq-Aho|ea!1j8FJUbM52rlB_hn{!Z@KZLnuz2w{HYzB>r&{z z9}BOj{m)th)_7Pdxtp;qrLbNYdKE;1x~A-Jwp3uK9we-Ypyd?^q9wbJ zx%lM;w?SK0Xje9fA=|d6Zle0VCfG*zo|b)#iQrUrRB?Fiax&emGiO!9a3GHKaG@TU zZ0}1At2ZI;o7Zi{-l1U>cjTsHi;jK_i>S`S zPr1L`GKSvnIs9exk@ZB{e>++C-*M)7D^Pj%GdR*(lQKI{=R!c9+pD`a1Ra+0_-8;A z28zm~?+PpoWrYTb1Ldpn_YZmKu%^I4Q}`v||D#Gr=v^SXD!iQq54a)&v0#X_dkQ=N z1GS+9zaK-;cidV2jnhND#Q!tCr=|bT__Pe(PI1rS5xRkYPcIJFmib3c53P7}FHiy( zFuE5oj-Kw0{Xd{RSg_+z;RndV_Vr~m_nwyxuW)VYkD4TAL+{|>0VA$4>puPD&rg6Z z78}(Tpn znJZO3!jW3cK9;j|%Qv?DgPY%xWxd)TLcNH=T!>U|y%w#lbc<&)TLsN@Q_kR5%$o1+ zzAaztw{Ncy6;SkOpVJe5puykC^Ue>{HGoTC0=ztOS1Owlc+C;rDcCb<8a7?CC)%O} z-$v;*4n~gmgYz)bw=?k}fw4M+9{*Y53`bEx2>BEgw zXX!$N{IYi7!Wajy&Dxbs^nH5q&Wd`En_tmWh>iVg_9-mxsz=W9aEA zG(mrc0{y3zG=6z}Xm(BRUTn#g3cIKw8uu_RFr>45vKMRJTV%0=-eBw;?ke_opWLWX zpb&?k+W_fcq{rv75iwBqDP}z2S4HI})}wLmD2|-Uk;#&Sw?TT&&rfu=6y}tC-nQV1 z-A$}4oQPBk1>{og*bp>(bq;z9>3h!uFL&b;h}SH?jTsJy@@^-(VYFA@Hc#~6@4nv~ z&C2ChW(#f~!u0gf6D57z84rS5s@nt$W;GVYOQ~52{ zqB`BeG8Xu2*r0!fE<}sNrQ}!ZO%r^9CMDcFUnrGIjk%#FK{G1aXue);=Z!`XL}l3) z>wc1Sb5|Q~eO=hQO#_kBiI{#0qJ4BNOVjGy5V5qe1Lyd@|80jGyJ{jj`un+no_k4pORX+1!@zEg|+JF75_l33qKt0%w0a1-W@&TCM z&qeM(KoH>|FeJ=_-`bVDf~w=|QaO)pJ|E)xjlGYi`cmYnh~^_x^{67>a%@!%3Gk@H zMmxs>`}`PWXK{n`qwoM@zCdoh*j|4Th`9bo`Xw8sXGT0gfb0jjtOnw;#|#$%3Iko? zQMr2B8<;p%4pQmrPrRTBRn#0>e_SF@zO*o%@fP4eMXM@&)cH};c-^nkUF%ceex3Up zg*MLgaCoc|=5HRWHfi)Y|09k*zPZOhGd;rOA!Jn)NeNA`!3A+}!J0$hqbn_pp?B@% zya)~W!V1?Z*{ypXdcwq$IP$Eyih4BdgWFb}J5HRSq5Y@d{+QjnG#QJ$i-E|<-elq@ zLQ(UX^p>mo4>aYb=+Aukdi$y;RM1dGtJH+Tk%@iwgB7mtrD&*l0J|*<*f+2i0}(h2 zJ;kN`K993eZWNuCvA>Co-fq^XeS@wDbU-&E2Or{1J5a!O9mFfI=XxD*9K^N5j6P7* zwB$SucW3U4I+M$*UQ5Do8^Hw(`5#@#X;6_tll<2MaUGd5&Zo%_i`-s?VppaY(#P&S zRNJVTw`yZ;j_pmJDQ`v!jIfUhb>c(%QTH=QH@RpuoO+e-6Y|AU&wis{d@AqZn#bi+ zm=Y_G+h0sj?Wz2_#pg3}y^1mF9I3FVATVd$QK|2$q3-plx6)rNAe!RSd>L|vzV+` z!u5(qTFN^$o}}WN(b|#?H9md>e?6qYp`rqgO!MmuUYwLaDv7Z9IZ>5Kp}wtCT0DA7 z@??*zb}u62yvT@_;16%yBYcjG5=(>nXTF%08sU+2a0N`^)pVTTPGZQqRs`}O5JHZp z*)J6F3e8&MeY2%th9r&uP*jtL6H5n8?EF#mo1&XZ@n*)s?B?Y>(HFTjeb%g$`(N|w zw-MyA?%PYAZREc~YOoN~(5_)QnTEyjMD$04%Qp|;?XZA??z>j9|9Fy^k|i+9t>yau zlrxQi;7C2G)oKRDD-!A7LET`}J()vS@3&3}(@T1%<2V6-90avJ zC-YdZcHVbGW{}!~DPDJTARUzP$5WD|D;5Q2mk_Sh*>+v(DZ8vYIt?fa7 zOvECMVUy@0IF>30&po_g5}Wb6{2m!_nAS403@3=JRO1*wgj}Goo%jiK8+5I40fE!@&Db z+xR4CdPjIh#sSF_Z0NO-5Y!}n=cWQs$0)qt^?gdeumN*B}k3t?wh^J)lw)3(p zf{?WSkNB`)>Xcr0v&D|C0U(hUW(vpWHeJx`v&5FIQE4HxPY5((#nxQ@7Mm)B(p!Cz z^Xoclr_yt%&7?TZm92PutdMKVot;A`h8SKy!_}J>#;{&73XP$&|%I!zvNeB?=qdmaUY6<7-hXyE1ikw0BS_ z*xBe0;M@plG`d<=)sa;;Lk-?i-A+Ca6}Dfj2zq*|7BOVEwqXt?Nhc|)noxN$@~2nd zJy<3Iv;+}Hl5HbsC;@~bT2-q-@cgKsh(ADrO)MH`lcq&O+xT4ip?FwRS4K^_qFwq7 z$WXx=hJ9N0-Z&~DVaS45;0AX?=D81a!C^2CgQqUM>xcv@FSJJOJ-tD?dYa9-^c)Q` z=cTUoDSN!7xljQrFRYP&&`TPuDHUqHeE~>?r49ah(AhbH&aWv_Yehw;D>G{n-^5=} zR7=Ei+GiNBz!0kDkO^3P-D&lGc?2fZOqfg?T227Xd%W*axYpx*Qc8H9nGQ0v&r%Ix25 zn2xT33>Fcp-acpuTp$a^<^P31udTT1_61bNT;b5DdU2K686U8{ z>BujAA_6)ahW)wx!D}1v?Tiyk@c7s2w@(_zrYxl%0?(N=20GE=3h=816Rqop7gu4_ zT{cg1s>q8=O>dEw@lii2GKGezt1tq|Sd0OXUegqp10b6>JSd7`FMFwc~;suG* zo&yV>u>X=?M1dPddUYg8fPk}NAL&^f4$pvtCt94BrN3RShwZfsi-Z|A_+Th}Qs*?U zvKD72#}r&V(0TfBwM#lbe{`)okG1w!SL})8`H#AvN5KK3oh^x(%Q}UNB?F93_1RMa z4CVCDE!H#kqb%s-V_Cv`QP2h1_aYs-&j609PK4zJA&NgyzVw?DMmlfe;D$&dQmpg~ zPhAYRq(5Zy!Cl9kbY;6_(&AdM1o&e8)!0*E2Xr1E1qbPI12Vu$wW}zA4tFlhdaGsZ z97-5;=^2xKa7sW<`sBIAZUUvTA|A9>49Pl%+b? zS6W)*X0kHX^qDuAhwI`5%h!0aLmE}A*5Bryh3cm{b&Pf>UidaXqW`7kiX8V%@)O;& zD(f5&eKni%>1v?I-MjxYPL%;j*sz?d6020vts5b>oNxK$=ykUTD$JuIm~-KFe%pBQ zam<&F-aPVzeTw9VEiLbZLw-}$1`Wu`sMH*U6k&pkW$+NbO(Un3qL%p{>H2Ra>OJH) zPB)cbNYLXfD}1n2g~s2UDAYQ-aiDf)t&TN`P%)v_+Qld2bw10_$IU(pb-P#xrHOTg zpO%{q-<%poQI6(saS|Dd>&TiDEXde8g!RG-#$EZ3fzf2{hk6EXCP* z46i>CEffY0&{3apRPXmO)!pF`dr%q!a-2~vi21!$)@Ix~ZzC`8^SOH0b@*`o-83}l z0ib_+DNG+grFZ6&DcdBv!scX!V|##p9&&9fi_#EvZGB#GchD=qC=4)SP)^YLs@EeN z8TWfyMiLH1-sgifLNbOB62C8ga}Kty=&IKN;79vOXb>0B>QE~<-PE1N&CL9{Lo`&_ zC>RYmGoyu_V>sr+{z{Ddd}uN~%#qrZOq33>;Hx0*I31^XpNCnp;QyXy#O4`EeIGNK z`9QS|TnIi-eG%Q%s9zk<(^7~sK6oCN&=-A@Nni8mrR)t``Dr`jC76L;a3agwz;hl| zs5I{xiQzEm`pj%qE~E6p?ad=>B2++_*Y#}Y>)^_tIM9SNE*>K%o%pHW>Rcsj*u+0v zxOPY5%SZ^m&V*|v2N$PKbn}jWo%j31YJ#b(`m;{2&aL+C^C6oT3Z<{bhn$}mMVE%K0<2O4;s<9;{xUIEZa5IeKvzK`Y;*BJ%E@Pu?OQdv3FjwF|mWX6y@5p z>7Mm$&Q#wgMRSlgvPerkF*Jga!xyZEmUxEvOqi@%->b-o->c;dWL2u4h=!F|Y3x~} zsJ~h3m%8(+fJq}_$#@>hX*D11OeeGC+DiT$a}4=^3gb*qaV!0lP}utX=}cXCb2V8r zuX&Zl)23mGqyjV8&&b2r_9nG_lEjVQ#SV zk=G=l73MxQj5hW$0DqRa4NcfbKXTc&!p84MI#oZXUK7oZ9Yg#uiLegj0=z4AarKLz zaElk2j2-NP+$9?D#YuCnRJkm*Okq_>MViz*o;(6jE$Pqp-}l;*)cip6(bNFVvo^=M z0CP*#97=V*ZAzGJIeh^>9wI;`m__GfRCWz_w>c)Qxx<*xw5<`WRlL=Sr zz@RLGmxHHsub@-MM|Dx+&u`X?V5 z-`~Gh4`$w&!&~~AM9Ff9A;)jI33CIQ?q5efMn9~BPgOxTqMJP6NcT)6)``osnllC> zbkO3T{0VGFONQsDVz(jp2X~}7j|i)XzQwX05ySpI?2PCEvAJC%&Z9hOAR_h==Zj+w z(cuw3;@bS-J`S?)_8$Ttz7Wx7oM1pHw!WfbH_YBW{33HxoBM4728025S0QnOLN3Gg0a6?&u$q($}y0 zkDeW1KkyzpM!t2Zp@!Lf=)$9O*^b{-wH(0Z!2N)CTxd&J!S3jF-7R&tw`wQu`S#1N z;SK0wLYzjlCzr9XhiCh$@P*XvgB#7GlpgGkh1;f$X~w^PW<;p>fltA+yV=+;yF}0% zeVr6xpa&ON-DIqD%r$^>CC1$M9jN!6UeV9`idA3wqTc^o|Mlb}ytw`$<|yvlk)5vI zY+6ySd;d)_+#{{!BktQ6s6E*I;a`vPA2QN^WXrwo@k@`0Q0!kwAv*Uo{#1z@Y$3nT}QU zJHE_IjP+C)9bscBEll&{kK&&z#de_dJ@D-7<=>XE>sp*Rc)M3~_iwXG7a|Bx&wD$t z@t+-Lib8|`Nc~vqU4|Tml8$2)Av8<&5KdPKjenu zdE0;7KWx{fI1WxhmowwTeBu)#9>mp-6u;ZOa0&^7_2B`tte=jpl`j^m|;=qz-(@)^+ClwN!N)OJ5N z09MFRw$I_n3#WBnZu!#s*07`4x&5A~yb&s|8O`r2?Oa!4nb{|U>j<%z(LNLhQii%x zul_a$>eBtuxSk95`dk3>C4wmjExMNl_UrzFiW}}H%bn)H{e7itXz9q`KDXqAeE0YgEDLDy`56Xw)Tii`e#9 zPghe5ewQVQUs{g;jZ+u{GEJdc*=+)js#Wy0>OA}oKp z9pf>)WIWri9n>;Q!1UFQY7^#4^(eD9|80VlJ*)}AI$U-gmP!P)b=WjBo` z$>l6@0`{IjAHUy2yM4rr$+q-M#zUY``4jWF%=f-n2rZ0pCjzc1R$>YvG^!y}Ny^F> zFUBhMc_fWi30n%d$;@8Z^1{S9(08~YiZ2MJ`=>&b*B-HC+))F9k)X#X>}q>9S@Gzo zz~6xrrssARganH!mqnz%(7?z~A7uAWDXwoSRVWN5J5_M`@{M213MBn_#xm45qDR)Z zFJF=y;33vP?;SarW|jIBqS;>*%^-EokY4p=#|4?RJ$t?{xS@?OoQFrcn6RYwT4ZiRQif`Z6R8wi4Z2@+y`!0 zLK^G%<)oB6OWB#3=ODe3RC2-Vu>EC8U17Yc2^L6HbZfcg8COHKoQVNoH2a=Mpsq?o zEaAd1>K!LJo@sf*wiPdAV4#y5R@u)4wxV%GiigSp=HG*9GSMkjDnA`^g?4{6s*v3+ zH78YI=nDsYUW=mvorl-_*9nWV=o^|9bw43oeXT0I;L06 zV)sl7SI*+_QD@S@LdXSr9+pL#u*R*0zM`F<;D^kT(J!!>Til?fo5{8$|1F`1ZZySu zMEXZ<$hy6$6M~g;j4tCpMt>d9?q`rBw*G>*cC4eSlb(BE4K_?TN`b0mX6c!Hw@GE( zS#nttgh;i1qjFE~SCG8?`s7R3 zsL8s@l@}ycIf$s=#^o(slsm>YIHCuUf9b@!$}{VNsRrCh2rQq$vL@r2F!8;K(RM#( z4`{txWuQbjZkF*^jgvs#(BGbUO@W)AeqFq^5J$US#7A%MewGx8hV$J8fO+)I*3&R?!>j)624KeqNmOTkAW{C$_cb74ya3N8_*GTWyfG4?}!Ol=Y_tHnLs5GE=s zwkLg4;`G80v6JrKN!_*-#tnbscRtGW zsM98_uUHU8ji4ekfx*=!s5ND}7M`{%mZ}z#A+~Vhs9|T+w-aiuMUvQ18*O`L86U6m z@$d>_q}hlj5J2~(rgQpmmK!EN)RR3L+*)mzm7s2A!9%8mO&@%yTq9VvMmoxLj4ZniL}jxtE|@>Z2&I8=5G*q9?X1Z=DuAL60Qh)fMFMY~TPhfcf| z7&PeLOJXk_>~YK~X4a4!-rFB~m>(nGHuiB)L4Ld~mx^m6grALpTT#bFkcHfq_9A$t_?mBM zpp4G0&nf!v8;Yd4ATOxqFvGN!xm3~%`qqznefb}PCSA!;5dP!GVg*FiXtUpMpFblv zpNgFCoTzussed1h{x2XOuyQQhedpBQ0FeL>XsFhz#GpUEb z*v+MSD4%u@^Pi7CCfFeWZ8Tx>sdpj+Lw&TpM;F7Y`iT?XhLk7|P$5oBV&x}JU^Ai~ z%#Rd?D8#ARRy4w_b3P2b%_FotmnGOy2Be37hHAZ05>@PuJTWEQkidBHc-PdE5&$28bs+KFizmr z!H1&1^$QQ|gkajjRXI}h|LFQ(@$fl7zZzHMC4>d$V%kOuhu zxiJ{4(Z4v5RVkfyy7LT*UNsfp6ew}KA;rf)U%_JwGZB&|#H0jy!>qZ19S&)9M{+$& zh4wE_$@WDZ960xg@DgN|Y)=mHZyU#f@XsoAdYM*|L!wG8iCZB^g4vHK4ULGe& z8ra;yLAZ!*3uEGS=EqQE-~$t3#AiFJl=*pwDiQI^hZ0M=ZZvM^0WmuriDPu1FMLgnEY>5}Miq1X@~ z49a_keXRe<05j`7!nnL#e8648$7jzByV^JvC0aD$Hn{Jz=T31UiWn#_Y}n^}PN<19 zTmm1s4*(M99{@%RoQIf%ILjn+I5WdIx^9b_=lXnBw%Y%ThWjazgAV|>J3EvV4BgP+ z3EwDrujIk{(5rJBQ=c4= zJk(EYLA_D8I^+19prMx9jEOX5P^S{QeKsYOy!d87# zHj{X6=(v+z>&4553R-_y<+W66)uzr6?^|Dg8!}nd{T+84Du1U8XM&<5^8R<3U<0-j zR8;Q!SMW8RRxwh$QA^*~(5W-K9&)+nv6Az8)1xtQW+G6U3iTMg&j(S5U-;7zrGLLt z(eSY20*CH*a_r)Pg9y1!paCB+r#Sv? z9by2E8f|uL`w3?4Sl#AUTc`UFIQi`4=Xqw6Jk-bx!-@AA;fzSaGio5&!lb2i^tV%wM>G#NKh`Lx2c6wx`0#1*{+Cr+S?%2uijgse)GekK%>l z824Fg^102dcRTgGc;tDiWcLRxNe=UbIRSk{&BJ@sw+RR1mu+AUBjPYg-LKp zH=CfWU){{6!1_5~-txrV_FTq~L2$DU-qn98o?1xh*#*b-k0!I* zJSgksUa>VTgcZn#^89!Aoh>Ny%m4rICj((xY*Ifc`>}r1kEh=LCk}spdnQaytS~*A n245$(PBl6Xek5;sfw9MfyUuUqC1M$Nre4@r-q3>0(kxx*y4e{H zHg>j@2d_e^nv<;TZryPjBX5`@Gd;6pDg*UnJ}Tz+ocr$1!OUTc*Jh{I{L6+w43;fm z#tx6z{>-p>OI|wp%l<32n#Q-)6U%8adiV5AF++; z9CCB?3fBR~0d%x0wnZ^hLwa-O&Ij>(t=}s3%+=}W;mtWsN58O;kXaYZo%T@&fI~W zIDfZ*-7k+5qRIXHHyg%XulWu6^ARit`Eyv92;$`qmw9#l>(h~R4C^~(&egZuHO>78+Th9 zFL%QyWB8Z=^LPEW!4~t(uYkW?zl?WQ&W<*?--NYpMGvKW-}Lcof$=aC3fHR@*`y=6 z*;r4oPRD45HBn@8DUrOt%)g&Uecr8IKl3ZoaeoW(&BXi>+nn*lKW5W4a^hNWAtmGC zsI`2Y3e+E@cA2f-Rrs}gYdhkE>ZK30ho7y5@w zHz`_Yx7=ngi?qEJu9MwI!z+E~1$AKDgI~Dqz9dEpUq3QOS?%YrnlpJFQl-@Ifk6l% zvbV1hIQ;K&Z6`iid;cUx)Tq+x!}5yN$o0D~?mvFWJNtAVwuXhQgHzsh$O?A%|(dRil85?P82bD|y+m_h3U=oNo87r0^OAE76l7ZK3n z;{h0%>`oeaOq))fZ(4vMYm}iTx@*7L=Tv@Cs`Mf`!v~PLbHFQ)KlTLq8Zm~=TYY%-<;aXT8JoVir^ur zDg#gUCx}k>W|OS^$JqLjJwQGKu`Sg3x5Tj-F-CIT8}FnS_((#=nh=@@&ux{t6#sjk zXlxumjwp`gkLHt%4LFVJ2C%-+SCPW)#@FQD@RQV>Y4mqyXpXesv;*IEP5l?cG)}8B zVO`Y)Zyu7T4G^p7$k78H9$cv+_6VE=lDGnC`u7+)%hbifOI9A|j{=>?m(H(CpgE$G zi&Od@pstZ9st&whVjg>841ammplUu7U!>ev_lmF5nlug{fkpB^~_J^GoZ&{a6rdcU}(tq5$7 z1#eZvvrn3eRax6!N4#mcZG#qAg%S{l(H!q8C}Ev|>^VeeK(w=~W{s2YBxJT;@6O1G zwWExvSYc1Ts#(Fr3tn72_*2c=OGCJa&NV1X?j#b5?XdY*_So0-ygnWvMl5muWo_#BKL&_{;pu0s|mBSmQQ+TS1oC4T& zfa2%rPXr6GCwrB;y6=EoDWy3J*0$+1yNPxL@jL_X_j&H%CD9Ckn9CLVUxq`|7sx5I zf0KtJqI<_>p`V%Ws#@>-gF*Y=|63K4WmxKCbPezmji#I;eTT<(B4lD>!2uIGPd{a) zDX!-5J5$cX!^0Q-Fjx5yk@X;Ew?0hz`f>W_FJibkHz3xuSWAB=Xx#3mG9wuW%;!je z`QtZY+{)mb7xh0~4z&#k>96KYkl2V;suOvTbY)I>{U^m1+D%FfoX&0IBjo@ z%;AH@OeS}54&5f~&gRo4e1L2B6?z5Mj-j=3j_>K-A|RB}9_d^u4d3G_3au831oege zpb`a)(go-QxXV##5#INP-}!F@?s}fwTKG$lAh3wFvg$lFRI$uwhaDfIp8$3bb3E|1A3yv`l)tjC+R-3uLY7funk#rb+lQt4wflNF~yG^Ej^TZ6_8Q{rviGkGx7&^ zBHLY5h6E$JXOi>|t`XjwayB(BJC5vAUz1PfCl>yCnb<(;I{0n<*KIDS3d~F4GBW>1kFY^cxzRp<30u__%p_WKccC0BKuFei-A=+d%PY)E||AfQTttMc|veLYzFH4erbc`L;`lydAJV)dZ1+`Y_&AV!Xa|ykiL) z2<`b61#=X@mHFL|A?)0qY2ki9Mkx1w9y z3f50PMBam!hTjHiTTej!|HY(!ej#{ z?sOOf1vM77JUG9deq0iG{TWADSiVb{w8BG+K+8sPIi?ul;h+q(0}&5GKJDs=bV)=; zC9$H_H0xW7`@m^b_z0r2T-Ruo`bqq^0EzUh7M`C5UM>XxOXufV~*=Xqi2VYq0Y9L8MlEk(gkO7WYa5n+#23q94b~uZxEZBod^T$v3K;i+ZjEUovBg* zqrG5}QeDL1TQl2im2fdiu5 zvjMR%yz zd*AGUUu5Z%uM$z8>+Kjx^#^Sv+YE#uy{68#=; zMCO*9#xPG3itPncxOl+M5Y5qX{+M*X!4F_n8Yp=`2vYG0OCEv6i1cQwkH9)s{E&jo z9Who74H*>KYD!X*JE$j(H>T{x+?VQo%57l{RYmQ}5zat4j3`t&{g^hO@)g}^Fxg;N zGA*Xb!m!bv{yaX}tLhaweS~^V+4xx#S>F^OZtd^F`V+`XPeo zlqlhV0OL%e8ERgguTRKUKj@Yxn5@n|Nr#SAZlD`)?Vi@<(?9a_WL>flXtio{*N%3r zvCtf-3M0eFo&lwWvx4ZoF&54g)~Vfj-}7^=mUb7t@gatPRSbQCjfbM(RHoLXtBBdJ zz>Y_*mYjwvMG$Y8uvmyC@rE`3UQ>qb-!5%64N5v8tQaJ#6L#)R-T>>*pu!;*{_izS z+`N%|)PlBhZ!Z|x2k8pThWRM;A72wlJ`PEuC7%uqUX@DqPfd{$cRN2%^k$_`w!c}Y z$-?AxF+c87xtka3H#DnTJ&%(1g67QBN|JJijbs$Yfre6LkFm#^B3uavN^%Se@Gn|*K@fIu5z?nR*=*S; zhiQ-bT?p6!*bY!__#SmWZ(AJ#W0}?qO*97-Mo%R9ckq(5I*uVCiC1Vbr;OZukY_fM zUCYe8V5RRH#14Xd0LX(hAG#vCPy)?4yv9!=zUm6on)VxxSqeKHkN0@eCvLP}aKL>OKtc6a5c=TnSzZzr=l|HXi2tute}zT^UdAdgr!n!wlO?T5Fha1}|yZXgP?^fFFbkGI@`G zsogRYphB#neE?xf0oTSVXpMmsEAE5MK1fn@Ox2CQuOgV}-3RIWX&W(@8o^74CJjZ@ zDQ89(I(Os2UkjLNrb{J&ECM6T5@81fh&rXRL;*D>r%vgHBMUhs(FeCqV}#|{my*Hz zg&^6MhdD_{TPE#q#DdYT@8BDsZqcgl6O?74{2&jL%x*qtjrt6qA4WHtEiChsg5#vd zOlZ>FRY8w`qrn5OHLhpkE(_wZb-D{2XkaVDt<_e#$H&cE8NQrFm5=^sFhCzYS|DS0YPfhe;iAQmr&h2e3_lT=U)9BmRW@RMD{l?e-)pZ~b`)<(q2-I@Y`*?t&-rOg>bn^dy&a$D zLoBL}(r-AD-b25C-nno6G;aSfUcL`r`1^aE4(-#zpFHOd%rK?e*lZKaiW~4vcWa7GC3gKVQyR76R|pV<3~u0GMICy>ZYnm^}PO-m`wcm1+B-_X9t4d zt)d0I^Vq$Un~cNdmV7Uq)^57qzuK|+<Bl{5kWn5a6cQ-&#}Hb;&8Gd$QqPK^PEzq-pT zgJmRhp-~OvNA>+dav>YzZz>I1#>LpYfEw7dJ&xNcr}-PktvJT1SQr$4kEODax(OXo z-9zQ609WpEKdbnOpHC>pJe79zVpEeKIGUeKSS&kmN}s^5@P!Mr}0Y%aac3bsSVOZ@tA zRDLklIyU-;O!2Qa)sJ>|Ffboy_dr%GjGw)O2e24!sJZQf$61yylriJHMt!t7Y0c=* z?>`}|W8yx#9mW7#r|q$xAnF9hJ_JnRa;|ivkK2Qin+NLo%u8h+RV;aa+1Q&t30)(4nyG;wO!J4OBJ;gP;+30PYh;{;Cb~wuG#qPuBcy_7NvjqlcA`%dOl92*wCHygu2HLq#mpp zr_!=R%&R{=SbJ?hrV}Fq-4bPFyRsg#$%W;B`We$L@tZ1O^2RM&y(??W#ai4AqvSl6 z{vkyC4ff(^9JKCDW;-0E?_6#I6=cJUT5gz>RXCMdHUvg1i=!^YwMWb`F%}xP%k$3) zEG_Siluqc}d2V>T`1tYHCokY%sU>ds5b+viBWvzZOiY_waWON z_@`(;)P8;RVKAr7;2xClc0%(hbqQ~wyZKoL*WANpS9X>M-?f@IzptKOQ8{L&my+q@ z%Zey3m0-lp>qr)>Qs6!n1Tt#m)j8VQ#%nw9> z4KNs>KYa*KU&Bs@xezoAyY9C}oueP@?Mwn}P}I8ot3w#tn?%xBa>*6?_5c&_a}t>O zD8xaF`Fr>bR%OTze{3*x8xG-#(%!HS&OH#F^6TM=13Rr`3|nDm3f3iz^j#(xEU$T@_nQ#Y)1-yrbE72T$QY*)unD4uuf#lsB4Kf|ls zaJZvLb#YE*$Wml5_e;w%#rT*Lm;vWX$DW(oOE$3v(v-*-A>Z|52=Il*E!Q&3YHLN; zVzdBCRaa-;^cZarj`FiRN@*hB$?`8bgj1q>T1u_UuT2KSC#+@u6HaTC+wh z2d$oW;~Z`23>Y+5Y&wFPk3w3YBk;_lm_ifBb3opE^9DtH?v&G)9diaRz2+`@t}Oq( z{TkLXSY0Kq-X09HQZy-?`S-!FnJbFf+!PyEqB6=B5iI+b?%IDVTo|i?E^V_UJk>JOaGvV!kCXl@K>D!zDsc9 zE`6x4N1t zUzv<3Gh23`$E0fObZo6hz45Kan+W%ne;QLXTTp*7OA19EqpiYG6WF)i^Ta}@doN{e z8(!hF!y04}d|--DnQrMZeUEI{Ns5u#3;GB)>TR;Ejk-a+?ebR(KI`(8P>`r9mxncP z`5Pv5ymoYjTw)fG=2!cMvPp#*t7PO3AQ6{GftK17|dW=g` z^H z*Ph3|;^2KTkgiO&4vv+YvXyzt>fmntY}wBv^6Tq^Qg?rxr^8V9R*4Vf*Yrb1r0^W) z7prI+iaWeO%OTu}Id-U(uj=TS2DFI7iM89vO(&a+%&WcmR5x^%b7fot$_J7yA790V zg{9{(cOyZHIp^K8@w8?!qA#g^A~W!1vAEKj0DI6_Q?%4vZHR(}jcpmRJDCeq;lvCl za`}jWwTh!=J-h#sDgq@}!nS0;`3#z?hD9r%H~sC;Pa4rA_>ag)PPSH$|L7T1WUO}! zoAj9v*N}c}2tYIVj?zLD*xoxo&Un9i9ej3W#H}*1n{lfDL;VZ!`*noYgWnJDM{?3s zu5$B#ll1kn4c=D)tbjilkG;h;tfOC;4|>v5oI5p$stD~Z-V)fc0oi1u#9B2&|H;Ks zB}no03D#``i6s|s{OAh9Ahq!Hq;G9Q!qRN|?8SA6_IPWhw|UnLeb|fNeVUyO?Nyld zYfqyo09WG@xXu*yiY=X(59Fb_C*IdR<`z6OcssYKom+BcTL8t%wwK14|LVW~lECK% zvqXMgUic>8U{)c^$j~##Cct z`BHeTR|~N^vE)Ob2xa>q@khS6>6?(NF;P*J`uNwn)dB`R3lV!@wRh86U--YT6=&(En` z2#&Q00Z;Igs_>0MlqUFC92d0^pPku%X@q`-J2kY+q2-+6&f?fl;m@;0|NbU2+a0k_ zZ{`3ljONUeE1AFCi+bjnUa7Qx86Iwau)QyLIEcmA`jy?%PYT<&HLkAx)_+ZkiTrJ( z+Elf6-D31Fy+Nng2&sfWhF24&G!+|jpQG{NH-wgZt!YyO1g_yR;rct0O>4iYCvw?v z^7}hCrJ$qoeNHQJkJvCAK&ccka=UVJ!q-STiFYn8W1AQ3GcRombJ@)si};zi)-W^f zO12T!VGUtRRsw&XXI1y;8(_b3Y1{^~T z(b`LZdG86c)oj;UZhY@({tX-vKoURF4j$q;@U7k>*k4O%CegB0`>+L>!%l|{o zMo3vmyjFbc6>?R1W@cdFAM5z!{U`hs&z(wVCl(IagA{Dd{!!>ugx%4gkIo){ny4$& zR-Bi$=gvfN(yGoGB(*Zb7_RkBtFDzX0p#&D`D4J^yQDo^Gnd>LxRD^xj$6OeDy_;*(hHCt7AA_-L4v2Wy zH(qiU(_zXsfYX!u5^mD^d4T$ikhitE^j!7yh;D4YLHVUFuLC=mUd;v7ovq)8gPgl2 zt&`M>v6`<8u-w(N7&oC>{D6OjEqyAAm6q4Ezce3}B+soEkBE728#la3VT-y@eD2yp zsyJX{8b0CBB2LH)B})ut3JWMtG`GP~9oZ9;+-n_269ul5-KJwGD&fkvC_hl3dSddg z^kk{>+G<Y?!2Yl>J`iMbykTHmJv^a!hcNl67YOLYeVZt{#_ zTbmCSy(TU9s(*bFA1cERt^`Wu%_d`SH=GQ6QL`QyetK4f@?thJ*XFsn+t<9^re74F z;*f0j2TJs>S97=$GOmL`8M+K*uhoHh7PDsepiqv<2WTbMhm;rgmQ99wrac8T6I3~ky*xCz zwmG0F+*SCsCtXy>)#(UtrIajFzgeHRiL26mp$9Y9bAEp)vv2vaXAS<+*C$p(o+1bJ3VYXXcC9fMF z{gjaulmtqKndfMaKdoM$9N+kFpt6GxsvE{iVMd<%OT}j(qc3&`eq=IggL8vQsh zt67G${nqHlc|UgeD{OzE;;3IJqLiHl45Xt_=258raa`?(9+7!s|8#`dtVVcd$i0@b z-6PI-=Ar~b^G6~b$gwJY6ph;Ao?vE6Ir7GWN1*Sl;XKo0W~-!-?o~xDo6LUba6Pc$oj9hhEV|D(xdEeXZ5Y-eZj2R zTk(nhX1`w^;Xs6u4oc-({lNa=a;yt@k0Cj$l)bGl^}tfPvn4iK{-%I5llA^AUh`t& z#@XVokB7m9>Mk-dr)cQ)N~WELbyq^+eG#zfVDCHTK+!L_HJqO9@}z!l-*>ZW&9%E^ zvs})Cn69_~{Le_4(&gR8Sl3Yd5(7rf($iDm zUbkAGRw~r9VVF3t6}$f1_5o4N=cZHz08i91gxmq%HxFmuDgG+mt$+=Rs=&k3GdXaGW zE?n_8kO29ifmYMJ0u=WC6viE}|NNjEVUVQ42@GIAFqeI$^|MFp|0qIN+G40&M(>jX z2{p6kG?|goS1tPl@s0T%IA1Y^{@}unzH?GE$r-SQ_&%Pt08)fWYKM1wd2y}p$d5rj zDz}PIHrhT7tYW-;3i-j_m=E@RO`-OYr0F_Ejl}rRchCo6pMIN}0u>!u*iwlk8`H&0 z0=ZeU1;b%FB?rw)a4+8iwVPJIqe|3H6>K|61k*z}2&=4X6PJqDTq8zq(?*prr}&HK z2r)%2iF3BVbI~)*K_lRe7H_e&YC>e|#*7kU?G>8tO&ks-OKQ5%Uf%sF552-Dhyy?7 zfn(?Le8yCVqtMO`;6w@=lMCy=HuC6(>THVtmNQ!InK}er_<(R&B?D~!*vS75$G9m_ zj6nKq|3dfjC}7Z)Y&?inS;n{^^YSUmW3YHR>^vrGOqEAJIJv}|%5@s*=aQb91WI(h z^?8#A^O`by({XN8@L19?o(+;Dl~#@#NuqL7E;O8mcH9(-`W*I#n7TPRFXAcV6I3%n zVuKwxX!x4~rIaf-{RjR{o`!DRq}gc%G=z&XpUz17J}vP0TZcU(E2})(B3!&EU={E( zHPsI~rAtIKE;bi7E#yndK}{fo<sJ?q?;AF?E&nw#K#>F=~{#37S zZrBBa?ad4hp5i|$=z|jPsRPYaH^6MCV;Li6IFG4lnnAQM!`}IO)=SAr8@%@;n!+;% z9;DAO^~yxNUeCg5D?XxB$`<Y-g#azKI%iF*1`EMt0;<#kn51L=Yl|0{EQ-n_!bq zW+W>wplZH(DiU;4=23nx6BNgG%$}8`7~YV67El)frb@y(tlkA9aTmDOWR>wcax3Ei|0DW#+gdJ|5u{E}fO zEnLjSTTHp9im63U;uZ?piEiW7RJn=O;%!j)oB@~)Me64XvZki-M2NveO4reg|B(*D>~N7%WndZK)l3Zq5em$j-q zFzC2eTKc3=uj(Fw4c{w7st}^UpMW-@8I;hqpJ_9!Noc=ISUs`R=Qa()tKl_~Ht@hi zpajd|&bn)&F%xpBE+o|d>aW`YjRyu_AGW6E!M)lp;a&qc#Qi$~Z6Eavl$bbS z`)CBZ-7F~{$@}gxn7^c%=!Aih)g?pe4#rc6v1cCegM|d7;S`6a>t)1)dbfK7NwLeR zFt6%tEJu=59YebP{D*hko~2QXIs+xC=z%KRo#RR1@kMQ(!C&awNcr1IpsMXw{+SmW ztGnl}(Jl-`vBEU0930dtkQe`)Q~tyR8VjaWiG0AO7`TMyY_Q%i>=+?cN3IxZ(M^FR zPq%Gn9_vR-1|n}woGB2{#3$%dYsB-!RD&PU)g5<GB8g z3TUcBm1aZlI&h!w)YtPG+ig@65kC(t9D>vB0uVg<>Qyl~VUqb7$yfn~k9_#GOKAGU zzYm3P5r;eUNB-4;^;6+&TSa%q6bHSi|Dd>+M=vBv=^Z%{3;iTyrf?Mq1GLqYZmgZ` z2nI&(!&+ns1F4)`V5$d(i(g+4$yui71f=jrdF*RzEd|qqB?yXVilw~+QmwQegO5in zmZ%W4(m%TfRqWc)$zO{YUE#UCbyduG3tT-qM#+wL9(U;$gfO6%ykGym54gr)kyF22r`8g{N}=S|gsL$(Q>bJtC5c950o< z1SGj*!7INEM@9wp2Nhm4tmwVrFCcZfl!;J+Wc4w;w zwuwv6J9wvA>DRMkNiMX_;1iEi(P|z9=lsR`m`r$# zu3+vhD%Z6zRSWd2DeWv)IQru|lgh=U_R)|kX4q+Cpj^T+n-enF+fQZOB24)S6)n0B zb#tedaObFQ6g_kyJk^AHFj(;(PlIcDTN0+oiidN#@BP&qDjCFjRb&mmj@);_=S?U|$S2!bB5)9kv!1{C?X>epUGCrCV85;7i!x1e)B%TUGv>|GukC61DAZ z27hq~z5kmZkkk9fvkA zPK9UhV+cOoTorjGa%ZtC8)mdC>obC+`&QQaJy|}CFW(V|hjF4$v$&Qn(vA_vZ_A>d zfOf{X@CyWsThSgT!!G@NL>RYC28A7g9=sTV*vp6LL$gS@Z*#IgH`(=DX|p+Csw^E9 z07dAd)k59^P)O{D2#Wv<)`f~W2Vib}@Z_8;;kNs4>chvZ_3C8MO6n|BHc6%KJBQdZ zckR$e&}PtAi3x%9Q(w;JzMZc?TOxqTP&?pq!t?ZY!#d62${vvm+h(wl25FZ{;b_9! zrhGPIAn29K7z68*2dehC^Fut5p_+t{zK{eB)qzn}%)bN@K~?wTMw2#Qitjg)aSl4a znh(K6<|hnX7r>#}f?gR&|l#)cX$dsMhh`4LEP{4eq{KaaXh@ zdVxnX@G4>D8Eiz02bW{A=8idw8hD7QVaNJdBI6Ig?lGoiX*}Lc_4krt&|Wm#cz13D zWa0$-+|AAfegaWjZdq9%98U$J35^|XnblV_mjCFa);~?kU_~Gr^p+-M7KC_3vOF$8 zI6N+H>kx3ud+rPILLccEMA$@85VxHMenIxXDoXO-uo6OCk8*nEQ+ho@(OEVa3F(i= z`T#0~g0_!c<}*ORHy($vG|r#Io=u<}tb(c|Ia!JU=p@%ewnUqZhpqRxQkE!nH(0gG zbnoKs4g2z(43i(9r(j;!1rZrwN&Mu$r@X~!f8}OR_HA4ii9f6aSLHs7Q9KVNid`1d zN*aD5ydZH>^v+Y|k*2#RHH}%JPfQ(V_}TJqSxhJ~zS7^JqGsaB;`ecd(cwR{=OZh07SgIsuZWF*5gW zC`m%>rCd_gl;FY+rTYxNQVezvGWQ7nBLAF7`}-R33jYj0VQ6%w7$OoLW}}J3(}7PlZt&*$P(1!%98x zOFx1TGL|mwR(h57d6DiE)I11!3Qj~wbzrS3LFs^39M4FW@KWAl0~zQEa1Qw;OzG&>C6){_q*?w39j5u_D zG(ojV#^WpsDQXNT+&w7-sjyYSlxu&V6oIoZrGp7CPCW;`;e_H&|93yf&_0d1pf_0q z)pUh+aPrhwh3Q~%$<~PAGO_9*i|fea$)ImG=^|R3FZvKdB&~}D;dX$hO%BFB5avis zQIV)r_(&jJ`F{XilTvRekD0y& z=qq8A*IZ2T#|e2CRZM~jk{<7B;ua>q`=ga=&f+@2m-@o2o&bHqkG3ty1~Gkg7Ujuq z@4Bf&xFJm#a3ma52p&qQPwHgJ&zgdJpdAG)1g z&�K6j5HN9iQc$`%Ry=zl*nGPnsJ8P?b4{@il z!Rbc{y$bjqUfj#nywI`cmaQ;s6ZhnShv0%w&^!Tr@JgDipGp=+98Mk%j@DWwZFGFx zLZ_cmFz9>^|9|mmUoD8pPO5_*^MYiP>YLxv;vDRj!>O;o@^?Jh9$eFV-BFdFT0h2v$bC|9h_>%~ zU~Zximh9@M$~vO&@}oMW(SAzVD!lp@ff7hqjGf(I4BD7DFJqz*jT8+hCT~AEbLMBO zLCO#ux&BIu7j5fst(2FP<$cR9 zi+*bs=^YkL_?J>|B42a1#Ctz}Y9pg6Kk{O+-`WDkF%&+gkzb)!QEF9kYu2po{@(|b!+;J6RZYTM_ekkd$idGxy0^sv4O=TNfJ|9CCsqfl5Ug(zK z4?a0WE{{YGk&lw|%e77e@n_YN!Gxu2%s$7y?}J5PJ$Z-}czd(i4tnTJSwOFFFunBg znf+FG4@N}i*g+tP4z zA7IgKF5|+K)$t{bV>kb_nuYG`mLF?b&qX6Y(_&79)=@H=^xIwogn(_vGjNbzyHtmP z;by+9{*8jc502uoqscjSVCcY;?+Y)MUJoKnvt`!DrY^@CI_V5Q8L5U(mI~q?B0h;} zRiktZVxT8my^mc?loeMQ+9ofyO-*cp`6mwAc~(fXynu;)#>~yMqvzun=f6tAYk|A*WRZ z-4f1bUidRmBCUwYYHewOILUjNK=v-m@G~ml4bx9GkmWS4#RJK#8%5V>Rh|=10NedT zQ)~*Md;*B$AZhNlw@lJ0o}XjFIB)r}#T0CtpB&`qdT*)$#f%=~oGl*zWtSIH_cPyj z+-MfQ5%@cXIs7ktQv3-3(JXnt5s)vc6^^ev30kd?tYAkVhqkY3hPPz@x*2P>u=F60 zcuP%=0}_TYc(-#v`e;3ddcj*K?jmXs3T;WPy^)4vAD8`_=G@ rJ|e;n**j|$^O#8f@6Yr9-)G(MA4=X}&EQ+?f6Eqd8(94n_s9PSCw=Lb literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/alert-error-icon.svg b/wp/wp-content/plugins/wordpress-seo/images/alert-error-icon.svg new file mode 100644 index 00000000..80fa0626 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/alert-error-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/alert-info-icon.svg b/wp/wp-content/plugins/wordpress-seo/images/alert-info-icon.svg new file mode 100644 index 00000000..332d7af5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/alert-info-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/alert-success-icon.svg b/wp/wp-content/plugins/wordpress-seo/images/alert-success-icon.svg new file mode 100644 index 00000000..30519e54 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/alert-success-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/alert-warning-icon.svg b/wp/wp-content/plugins/wordpress-seo/images/alert-warning-icon.svg new file mode 100644 index 00000000..f52df867 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/alert-warning-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/cornerstone_content.png b/wp/wp-content/plugins/wordpress-seo/images/cornerstone_content.png new file mode 100644 index 0000000000000000000000000000000000000000..8e007575fde8de64581621fcdb1304a933de8ed0 GIT binary patch literal 16450 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%0ALvdy^owvNZ<>*HTW$}7-*vGr-LKUcNQ4n< z0<_kNZtlyMaGRZg(V>zgESh`nO#43Zjpld~q%~BkHNRisv3yPXU`GtED>m|C%6;l` zbK6o^#++x{)0=$HNt@3!8RE3zh4VwC^fS7-0xa3C8es_&(c>+&?|1R2T6`E;YMA@d zW{C{Hs1%<{%&={u!01omG>4?_!ZQE*b$M8vytM$ixvKLzoifq&Z;QukiiKaAFIk>8 zMS2BNBmF}1v6)}wui>H2rHY`W&J;8691w;XJ>)^gQ6Akx64)*YW@nm9Z@ANTEH(0| z1O3dY=uj_S@$XT0>h=|m=#_j>;(PEHceSh3d_h+sZOMcSb@F~3M29U_JJ?;VQ=9?s zH@xYYVH&v9F%4j--j-UCFL+;l{3ekXK|WD-dibVHy}>pwsX{8fOIW~%c%CI*CefEu z_q(`?J!{hSA!D3croVMx&N?JgT-FiGOr>d*BE;Kk#2T#RTOa!!Og5EvYA2k1@BxH? zF`f?qcpI!*?U2^9s?H}1*SDN|zX>=06c%;1R^c6K*U>fy z)0da<`H}pBHl~Nv5%i!%bew#p{YO9Erj&jTzrVwI&|7!8hpO(B7a$e&pFeT6a*1l} z&$#Gm`5q74$PsE3E#l6>s9NiFuG;_k{IipxH20lrngQ&kx<;B1#9nM~m9+Er@y^y& z9xAQ3>8h^!gNQ)IJev|CkPMykSto61O-5Rjj0#x!g($UxYT)bQ*~sOi3FX_9hS!HB z#9{v7;R*EU)5M-@%c?tm*T7+^JHFXIg+7rrR`lX_;pR5tFGKY0sf*IQJmuv-HkY}q z?NOfwXDe{ud?5Ijs=qY6VbiH##f&4;BP>GKqj5-RApP^kK0L6{yAthl?4U-@k}72y z5AP--XaZW3#twJ2^bR!(3BFo~dY87%*yhB4W3K5c8e5F(zA4vImK}`XK&N!v8r@WE zuX2uc-V(L^_?xpAuT_D$@#dTQdx-eWSr7GAK3O3+H*b${m#3X9D%ZOyxC#lUKfYyE zsTl84fu4sthF%>F`!Vi1Rk zNKj?<&ZWjNGyf||+3I4a?D^sBGT@Qi1pR%9rOUX~!#BsF9}22pV{bDpre_3bQc+^G zS>KHCs2y0_AZhT`I{mv1I*3>U%G5FtuY;a>7$!vM2>iW-MRi9lWA3`9lsBKmT}Fs2 zld{tQ9)MMl|6Y+W+%o(p#IaN)|7ra1j{np6KOO%o`G2MVHAay)3Nbwto@DX;cdNd( Mx&f&1i9_^%0VNcts{jB1 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/error-icon.svg b/wp/wp-content/plugins/wordpress-seo/images/error-icon.svg new file mode 100644 index 00000000..43e859de --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/error-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/inclusive_language_analysis.png b/wp/wp-content/plugins/wordpress-seo/images/inclusive_language_analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..21fc79eb4c7226f446c9b49514bab8b8eda8db90 GIT binary patch literal 20788 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/index.php b/wp/wp-content/plugins/wordpress-seo/images/index.php new file mode 100644 index 00000000..e94d9a42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/index.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/indexnow.png b/wp/wp-content/plugins/wordpress-seo/images/indexnow.png new file mode 100644 index 0000000000000000000000000000000000000000..e86fb02227028befff2b97ebf28321d36ef61cf1 GIT binary patch literal 13613 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/insights.png b/wp/wp-content/plugins/wordpress-seo/images/insights.png new file mode 100644 index 0000000000000000000000000000000000000000..9af1fbf5115c864acf43ab1f753858f78e5fb72f GIT binary patch literal 30697 zcmX6?cQ~8x_l~{yY>BN}dls=*?a|VrR;{8wc8F1%TD7(IidEWDIuN_GHi^9wMM+{r zk&4mq^Syq5z1Q`=*L%)=&biNdp67njtSk%}Xm8U3000JKBmGAJ02u}VAi-0U-MlG2 zCGg)o)UC{H4A`5SLsde{7-ff<@7|S>qo$;GwskHDOX{s?@(Ih_7(*C|DNdwEFnW51 zf{d%Itv;7@ZB?fe_i)R>-roV~(EtF%+gM-6Cfs?y+$mre#B6Z+i7>G=#f87VUgX)_ z)Jr8xx<6kx5&4dB#`r0X)M4weh2~Wsb>pz#5FiUM!&_0ulJ#XUC@ua!t#2D&1fAuF zT&eZATl=GIrTbis94Ur|$2a0$mrC*{iKTB(L(_y^&&S{V9)7?(Qi2(avVEdIyv~aB zF<$miP2XOxr!tm2*2m-?kwN#Ezq>=XI-W_x8k>6JF?<*`JLg@9TT#QP!kaDy>shk| zY6~OY3YKzCy6-F_JgK;NK7;#qy^ll7)25m*7E#9Ar4!3MBJqWQgD^xg=tMnUKWyFE z3QScC&q*z*G%ZJ+p||l1RtJXAO%J za-`PD1ZlcjIni;qyW{|9IQ`M zdaQCJH7fS*!De+8EzI(Kxe?qeo}MzSPfbSDG42k&UF7vD)$k3oijItotMvGatZdgI zSFI!wx1L~#c1E%5P#fkO=fa#TwHO>#eoRLG0xH2GCPGh9tZy0H`s-L*M&y19(W-15 z(xXHHM*KC!Ka=QO*|}DK7k5Bmn~*31c&Gpu--_(bbUQPwBF=wRsjTKI2wq}yI1>GfR=MHnwcbnd#4AeKNA`**)n(&J2WafY> z569A4y;lh{ZuBiGj9nO*4&F$y@7aZ0I!>Udk-A@jTIfHq!FcG|t+szg~S#lOh-EMJEG43%gY{oW}JE`DlEm}3=zJ|8jYb+BN&bgDzqa_q#E+Qx_{?7B& ztO=p8bkljpS4i7iL8ioaeMOEimUTPm0f zh~;-GiOsQN0~S^u@S>jHM*(t7LkA+xW3rCejQaN?anRLkJ-j`1-C;Ep;c0X$cdoJ4 zVtdOmPw_H=E(TZLA*ug%v9uxhR@uEFvl=x2I^5 zmyc-_0yUeVqg{e@SK7l?4YJjMHU|--qv3PHNQ3sJ;xwN*iy_H!v%{=6GsG3J2jXz6 z1LNAV3}MC7qQa?GbV&`ebIkF7O-aE*Koq8s9UBGeKZYA5+iFD4Hn&l{xxH` zT}c8FhnrBQf0^HjpZ|OW%^D1k{LSDz44dHPB9hf!=@xPAegtzleKA!Aq;Hl&U@FoV zfJdhbFCT2DJ(9ivon84q9=2>T$nlP;@pfrJ`X2p;%FyELwz4w#_)r%nyS)`Mn333Y zva&#g7$8UMzm6@-A{r6TYgo_IuJ&IP2VEJAe@ZG@){eY>GIT}7obA7@PxKy84R=7$ zJinigQxVvzVZ#shf_+#pKsr7bDH(uC_x0Q_bO)xD7(>;AHS|a71=dBl0lU9qjObz> zfQJi_TD^}ul+D*e8_V9q^~x)Vz)1~+HOIdsOjgTJhG{Nb=9t@&(QYS7mSbG)kLxsX zBS&i{J@DUO%ybyMlyyAL?)4o&XQaZPup+(R<*UAS96&7r*j71S`%z^~9=X1*I;WeR zQjb?*DcV%vMNs$I@;z7vt^?D-k3r^7zcLx%{F{(#_IIT`T68Kmp}fWXat>F>dZ%*)xiuan;Q1LXAj-Elq|f`}?!Yad4p@qY*o|40 zZXotlze>W_sVn?D`Fml*!CP&Tm%=EBYF1YoF1)r>odrYuZ$I^Z5yO3Ix_|06#**6a zDdM{WYT2Ux_dRjd!BX*+Rn}iT2(V3G4jz~| zOuITU`z#(A9eD`#s#qo4QxWiV!hcbn9<1$5U~3#_AG9@Fbhg@jnVBkP06_p#-m9TJ zeK$~O9bwwG-_h5dRfk;#*bBY-dmFLnwGW?IU8F(nD8Jta&J~z1?`OeCZVV`buS;h9 zebz}{fs)vH5$3cP+VEK0|N1-4cc#x?FH1E4GsWLwiEyBs{eFxH3e<^(dA|Y%FsmMa z^8*J`KKdSwSS5X61V~z$+heB*oQ*E&{kz?G-3syV%G%UsFHh+iFO)AVJHL(v>XyGE z=cO_-t%)myVQb!69DlLl;_?*T!gPjhYiri%)^HwUY*hcVT{N&EG;M1}A)3+>I+B$med#e<-D znAe~Ah`h+TU}1KHY!|6Wz0@UspY+E2xWMl*6HZ-o;_P!8@L@IQM3N^Y&F#KB;khVQ zskG)VV)gVxqg`vn_gz8E*J56r4%2JufH+ma-Og{tO*z^~x~)__+26WQ+Z-iH|4OiB zcMURZa=`Fu;Y<-HzJUYy$%>ZdQB!p&Lt|%LmcU#&fDSSECYV5bk3Vz^#E6NS6dV}N z<*&4t6)l)ew@|)Ci6pV1`E5Yego%2mxE#Z~^IWA+hq2Wy@%l)_J8nI)ymR`lM0+)nA-j-xc z(5)N{`$=hVXLHmKMo6%!)6BOx|D%_Uoo9r6{|=4#M`{)pLZI~wMr{Y+#>w3^5g4gt zQI?kq$p|p;rQ_WyTiLWulQ*-c?`L6ecC-TiIQr$|OghziUGUU2KeYd2J*k#Qhfq}% z8G2V3P}u>5&1d7t859@ix>3KVV&5J3+ehh~=%)I&qj9=z=gtTs(3M(X45|l(kS9$y zsuyJUU+w5@m~$1K7pCuUFpdBgc${yK{fx3-DKFt6f*^~!xU2w9C%0HJs|33=zqsj@ zM4M2#$XCp94WG;(@APLdSl2bG0Vb0jTg-TB^4M~c)|bO9Nq;M9g^7k3URX2!Y-Ji? zh!czxl}+c%<#IZF7P?RQhhZ8EvNR zq_7A87#@_6uof!>lhA0}LTB~cUl4(^@(jcV)SBp9D;q>>M@+nY!@{<|Bh`+Q7CV9= z+7pKEw>?Y@o}xe#g=BP|bMMHB8a@E8SdPGYwtr{Y1ZhU{QzfMS!q?j(JUd6!(U(iiCnDOe-16XQ|#hq{kCB8H?1Lkea}2D!zIng!E7 z*Y?Wno;H9e&Q(r@xC^355a-@6gPv1b*{4}toRxL(sKgqzK`tn(_H@>^(Cn5#yR_z@?=B|zl~79vlI{7d z@hd8XHI=m8VJ3j;-!N3H%~wIV+=XfF-GT$+A-j|D2ZQWY1F^x!1}$hz+7#*eW<|&h zGLOxZ)9C5r#Z;|fs^|1|SF2xt4XN&)P#$GHUq& zE!ZFaweIqvO6B1WA9GgfR2wFy5VLuS<&rIxR_OtJH9GYE>C*)dtJ!|=U3&J%OxjDF zzg?V|MP6qqX6|N|SiAzTeBn=L9A|JWVm3LW2zDb8S6qHJmZs^`rQHRV*gQ4+{$Q2S zegY}gpU=e_-J`^K2S%RD1?@72?#;CvMqir(WLV%50`nF#h0yg+)5ofGfu#zB)A^^% zpVM)ubm`&~r4o$Jbrz;T2mgoe?&30)!zE4`SV>AU^f4F`iv32TG@H%Wd@C!Q8JYXv z)T0^#{oM>)L5n`uZ-Zez#3WvpOjkerIL=w{UX6u+7|)%m-%s~FS-+L=9b|-vw3QlI zs-$30JD#ETaD2JtOE~luzQD{cj%+kZm@Y5&Ic%w&Jp&I`vsBJ% z?jwtPnjixU`d)@n5r7?&IC_RSCf8b&pn5Fw6HQ>N7Od?>e2Elzb=_!YCksIkyfnO) zlcbmhsQW7f;WhiX(RO^%*XZyGGGwXm&P8q!pPNodN~88&4(y#s!()1-yl}K5pwYAc zFJ8^CLVvhcErCCfOb9A#qhEFsFM}%VEW^Apvz;iu9DS+v95hs@*nTLxf-6kIz?x5YNW!G~4z@zLly(4MBN}@|B zV$7LHk9q0i7@yz1(}V?;7V7_ILrA@w7EmEmOl=nq3+DuiVN=$)^jR+$oBKCo6`<`0 z_Yvn=vrW!ESMG=V-yD)drCvT*D9iKH;Z#Et*F$AKrO_Acc(p6ud&za{mf!5}opJWI z+>kxwk1=G2%p+u{#1v5o>1DM=%zkfBO5#H(aZYoglGC&RGw3K(rZcXH_5X=7*U~P> zZWoD^~sp&?VDDt3AC&lU7{7)bDUL;{C+?6ZE@*Zpq7v{hqdg{jT65(-oVL>}@^ zUtMp`e;WixWLgo{gr=Li3#0(PDkUtp@;+Bi3qZ z^)Ae@CRER{RzTm_MEIOG&7xM6R*3PLSUvw20Uw_CR}V8RXt;=e3yV*GHn!`IHG2rS%&!uB7*Tr96w@{(+u-!=%e_0W}QlU*Y9o z*0W6Wf;_Nh5jmjAVh84MHmspmG(m{jh|u6{xcHh|n=2YBcT|gs1N_l@xvNbqw`Y~|DG&G*1g6NnF3wh#A_ zlxLUbS~iBEcgHCeztfvVB6(_*0>1R_xNp2o^@s{*(escDSo-+Xd;NVNgdJhdZ;+iW2CC$6Qc>^H0Ss@J`@;@~@MQmWxHLax zk*yim;q+dYfoseplYg%1!341(>O?>}{!sk1Y9=1|x=_u#9YwaTxT4@Y-q*30Q!7A{ z|N6-$Rb*{|B&<&Q#qY0dTsF|(d{wEhm>(tYtIjZKZ#EnTHR@a@v{~x_1VqyTMUu}4 zOl&mof&T0(ff9CJTaeMRkcfnx(^FaHv!yP5W=DSNGSZ^d4Y1TZ2Frt5b|OuG*KFk5 zap`g;B*0!V$uCz^pS)Fu6n`G(@as@*W& zXe>LOapnqNwy)$wRV z9Syge0gb`6HXpIvefU`Iv8?3nL+7siCG&$A!12F)=&ArLB=ReY_m*^)0OQDG!Ov-! zdY`l;=PzH+{eSP?z4z3Jq@)bHXvBP~rPDE||C3b8se1ASWWO;?OJKQM7wbHHLAM=g z>MYJ$dspP1umZyT0~Or}2$4yi7K$J#=mXGyB5f{OUWS)S1{detMf7Dq_>U+QP4)GX z#AtP9KNiz{3*B9|hcKwr2g!D(m{YTUS+yyNPexn5h!3w)OR$TpW!X;0T;AmDTdCOM zKMugz>W6gPTy*%CgYi_p4r$OKdo+*>7{)bMFej}5dXSAT#+*GsFl7;gGAjm1ie*}e z_8X!LYb(VVn&TJH8(HWB(!GcIu07ZW*#UH_<^OeAxP+e|1z%*WWjH{}|Jg4)$VZEV z0-c;|G{iwmWY6w^ya@w2d001r%D5c^I)*IhDTukZAPIjybLL83&Jy;Evs(Ud^ zQxoPy9y*gDdXq%WdV0l_qFDRLw==z=^_ zLRd1T#en>PyHXr?>&2?UiD>!8lw|voQurenxC)<_5(_3B3MTGD^TWi344okPb^{IsD2TF9yP=JWdu^Z` zn)2ut^TRH)q*Oy##+9~m7Sg1OF1MN47SU??zaShKVq!ZJOpzymhdf`P$nYGdb&iv8k$#C+@Lt604YBMyBizJX4biwaqR zgR_4yd({Xc#)TnG#soQYgT;b`jH^`i{SNwCCR&JKC=2GO#(B*`UrSx zuLQO^9t3xVIbP%de!s>CDlUoFuBJW(BOJTN-JwyjGW`K1*>HdD5f$KB_m=b8Mnrtr zN^f|;SrSHURedHtM^jss6prqS?!o-x06e$TkCfG&-OfvRGkyEHm`p-YC~hd=hARKE zGp1%we{|*iJCWVVMft~gx3Ouv#dXF}wY7KX;giBC5>!~q%S!eEyxK(N&W-w?ul42P zL=-=gUrdP;-1Qv!UsKe`)CXuj*u}>1eoM#KVNFt>Z*lM{%EPcXT8s&JtV*O#aqCk@ z-(>BuN=!{)c%0`?CN7)E34I#?jgKgN1A17CjtR##DU`;b!e851pwSmWT0XEg&U(o3Al1c2#DIZv9;_U*`{q(1 z7x&}xv_7Tt>`}4w`}#o%LNoKdobK*Bjv^QT{Dkd`{Rt&}-P<_T-VALmbuUqiY((U0 zd$$=^%Nl%*ehr0F)(KpPywL_{fUiSayffoc24by0 zt={}E)7*hw)Hs}^v&HdYox20bjj-v9dBQe2Gi|%oMOm1~e@SN^_0B6L^Kr<^OwiT9 z^TX~0{*fsdX)|oVQN~gG0IMfj;OBc}#D0xRgNr|(Hr^RA;k|^B_j|f1L}(nRWfY%_ zI81MzdHqnk(TTW=bhsP(n15)Wxu9KWjnlIhE-vBzMYtAB{9aGj4IaXKFpqiRM{x)f z9xWU_sQ~K9l^%yB2NSUyB*mA{Ba z9!P(6s)Q$#)F6bdd4oy{*ErFCe%A-^8}A1*I02T=S)b52qWJC@{H>2>m(~|+Yq03( z=y2}#GO}M?5XPND1Bd;|Rn!S#j&jk7g9Xu&zdzqpL+$=4@7=3-UjD&Q>-2&c-T|d_ z|9(4s7y8#5#}2AM0Km8$a;DnIAu>txL}~3Ie#e58xWtT}5blW`*CFf4DgK z_J=p>&p$hDh{d82e?^FP@8_6+A&CqzVPb<>KykJiukMUAkmR>fHgB2k!k^~cX-sZ* zjQbqICXZXd-Y<6JPoT3RAbn4VVmX9mi+=EM@+9%JZ@(P*w#JAtsePH+Gr=*;@9$;b z-c%L&Hq*1kI9~`Q*sHQF`eJjB+JLq$r1uW?LC>AJ!BV?Eiv3?}XIBt^RP0)(gt_Qe zA#;B1FunH19n9PhaUlZsTtzT9oxXzdHK7AKc|pwrcsjK zH1_XapIMrML zc)P&95FFL`l4nmj)V+1F>-y#K)j&?La?U{6r3f}}8y7BweR(WBD1sDGx~pK!RG`Y> zt+RL$bJq=}FDM|O%i2#PLIi2A7k~+ePcAxuBb}?K#JsDM9pG!9WcG>9uDLt#dHm@u z%v{u8X9Y<%2G8I#ld8l&%b{+9^i}r_uphNkwJ%T~2JLUm*!ga$h{5{_2}`d|dpJh) zv=2drcz&e7aFLtxPF13u*0ZRX0-T-N&az>@acA;B&z}RLKuk0$3<%}|i}i3lJLXZJ zcU=1sv4^C4#rVVN!NjEMJ^`l{fHHq18h>^ES0cW-xnDPeZ&-(D1Qg+c=f?8|!#%$- ze&+;NZIlt0s@;Wph7}Pf*$RiY(JJWGyyp4U+Pij~0@=*|vE?VRkl}DbrSc)ar1mvO zJSSeHdgwFRec2YF*Xcg8Xm6OZwSp?GH8&F8#efrbqDeRsMU=N?NZ&fn4AOnAv>FTv{ z{1RB($5g)4TPiZ!L;}CkO!G5qc%ctd(N>rzSw$MBo1=zb7Ju`K2Lk`HTY3mhQpt3V_RrNfrL(q1PJFcptC3iAKe~t zBI#>LbC+*GgWS4q<4==53If~L>Hcy@LFPWJFUWbJp6rpJh$)koR4h?K=55q_%QnVU zR8&L<6!6@E5yUdDbI1TbM0ApX4z$Xrr%`mzQI^YfE@ka`xVpJl_?gLd4hwag>u@xS zzcmF3@*BSx_6PfcrDH3t3A-zpyu2?+kp1=Hz;Cv*SCAG#PyCjW_@nbJ1(^it9^^PL z?Tmqd*X~RUWe=BtC=#~h1)*$Y4ZCCaE-egxm zw{h%zR}HB~EscsRALZ{soNnV_G*k&!P%Yw=>TGcj%XPygRA$C+v-$RMrp+eZDF0#M z?n}#WSbh)v?pa4Ad1EmxFFl5zA_vE95P~)SSOC}=^oM1MWJHImhZb%v?tLkK+gNK^ zV4q{i&lHxAd#6=+ng{8*j^V}x9OF>+eNmlJ%sIp%0c%l&M=(w=K;Sm4UjpSMVKkuP zSN309T>Ojf1!F+!{j^K^8szl{5uou*1fOx=ZTyoNhnWDGd|ba4-!FIdas~MM9W2ta z2qH`0qiwu;0Y|b9pE_p^7Q-g(u3@T0ytW zW0P1?u>2M*BPywNP5cNusdyK_L)xZBi?@jV-kmQu25e#%2F}nKxdr~)9|cnZ-CKxj zUF}uwD2g9x;C99snF&hFR%K?NOEE;ygB}%h=YIhGj0xJf)puI&um*Pf|FVy9KsDvV z!~YPXw{=dOyn9+)IBx3}|9LkH4Q6Yg$__m}$D5UqRL_)xH?Of2h$zMNpOPkys~KQ0mp=M+zy-oSY9 z_`0S;OO)1KJ*E%H*Q8sFSKqZ`H6Sg%D>$=*sQ3`R<0w>BL~GjSt5(VEjO1E6i-_-G zLA_Ggn<{33iZh}Jl*WrwMz+0L5mc8X3C8gfGoD#%K=6NwSzc8`xKxHm|P5xM6cFS2r{{Jc_#SU2*Bvwx^jm7oMS z=E92_Qz0A-1MAm_FW~K#OJ!hgtV0{lgG;7x&H-WyGK8ybUy8Yo+9kUPIK`N6_`)6j zX6v?vt^8^CcoIO9$XvatzHYi$LcEjikPjA&jO2w#AI1dXs?_5BO0UX7x$s(&{U8j| z-?#yU30S?qHH`VM``9Mu8Tb34+jvlCzVV!WJEkfGsI)ReBV1R6Brj@t#~#FB99S33HIMPV2~dYJks@ z@mv`bi7>9n0O`DBym}n+=^1t{<%3XS6l7gd`1g4UKI7y-Woi|V{;+<|z1Na#ip zwswB%%B`EKb1Q{A!H8d1G7H;D3sWO3+zfz|!{u6+?K1wmSm)nc6z~i#EsBey+E~EI zuUDG>?L78z&Gt}Koc~Xa1ZTnAO8YQ*{s>Wk73J1#j!&9ADWP!JhmH@S$q;4u^kS_G z!$pWOp|kk#O(LowZ#X{Y%oTQ&c3EQ=co_&cuTs`-m=Mowy)#3msyttervu_;%i9>{ z1J3H3IN-=mWfW4ULEB=b)}<_fX);`Z5DlN#*0P%c;vq&LW3RP6$^utMPoyZ72Fzr- zw)9bm|BMryj1A+Fno&gujnBHlGTB{DX@equCL#W3esR;6REN`Kos%k8{#E=h3s9a_ z{1wB|HYYkCYghYMi_(TwmltyGTjrRQ^We>9=E*r#F~2;Hs>w%G;+;KT$Pd|Sx9{$) zA$6!Ig2xnbw42{Vkr@R6rm$v!d9WC!JU*tQHueLkkSCXE{9W7-nz{+!bn>K8WOhWA zikdPp(q!v-w#>qy1P!B{NUYTp-UP23PQ-L9ytMn}bJL#j9d8G&gdv6pg?L<7?K(YP zucs>!rHV0hu6sQ{cl7*Mx{-|T_X=;U;fdzho#${bwW;Z%T>pa(LI0OofAVW%qKQIp z2H{j8xW_%z7Y(cNZscNQ!~&nS`KqXhKQZh#%|C!bYAf4XxnSaYenx-g7!_Ns>9=YK z-+!YnCp)Tm=;AWAODSe|Te;yxj<|u;&KBA%>th7n&8Qld(PM1Ul{bM1c*j!VNJ5c)s!eAUqcRAZwibmB5dV%XuElvoQQtP)9%a8 zRK7c&E^XsU1IwY0e|GyNm7pv5K!^UXb3G~&2=1nal`X+se)hb<>t)Rz+SG+LDqcPp z?Q++FoMhExULIJ;f2%UQ6FQ+|O9l)A|E{L&aUqZP-`Zjx_*MHrFf-70v!N=56nvgy zcM~5&obt_XLuCCCc&poo4yGK3%ZvGsRjihWP!*VyP)hJXHn@YyfJci^XbnmENv-6W zeP-XCnR^d*t>K+Cuuob?^!uJ`H(BBzLFV}pg0FRgy>1(Z!n1S0R-8_1MqFUiSr)nz z3$wkEhNm{0{JE$jNp1zEp8P(_&S&c+)WRQL*4I^C zLP{a)G?C~kegQ21oYJC&C}sAjjqLDN+JG!Ml@kM4P&<4XB0yCxe6Axl(^xABraqri zK^1C?Z5zO&DtPeY9ctLs^`@bNP`H{*z#JhG(zZ9Jqm=~yv*0G}v#swYCjX{wn(+A% zRk6h)JI%V0(0j#$DSEK%N)>}^E!$l6$7l9&KCRClBHDHOD4$DjUBPPAuouu;x@D=n z-jg_U9ynxrIQkE&=v2+fYG|pPX%fIX|JaxYtUEuW60A)FJ2F(kEYv14!j>=V^Zb;H z&NU1g3WPu9%qGN$;+#DTdkN=n)&6H}yo(0|zDXK>te%`=c(g{=Jf{&ub8#c_bQe%hFy7bHYuCb&b%{`!k92M~q-V|0pXgTSdx$C=z=?2Gm4TNr66xeyr1PZ|7%?Hi^K&Z znLO0N9~>~09C`44N}aJF`RlFNgehhQ$5lz4<5_L0#D*Zhxnvq01x;g(2&foN1& zb2;FKq=#?tXy3b}4EV=0#(Y#4&F39VyE6-~gKlwB3ObWH*-ND}$j&KQe2KI^fP9I# z;Pk53(LI67SWPM@qJY1}G4at~$rs8l>oA2?ed1W)dHCk4LE3!fFFs2s7#$N=+df5n zE1hR8|G-<5wAeka^PXAW!SPhpES*Z$ilDRl zlA$i1IoXE%jWGCU>g#*l`A{)*K&{X z5VicJE2!6HW?*$?K362A-@cpJOaXdJ0~VzH_hSE!;EqSf`_eg*nptfom)wX#|5QQ& z1w8sl-+t)R&f0V^ENrslun;WTI#ZFD>Oy&OAB$v!`&0$wTorzdirH2Zwc6R>&O66k zF!O>7{>8JJPPsZRRQbY0Z^^TL^!VbnJc-!F zgPI>_x&`SvNssYX(jz*U=P5cAx2Wgq*Yk<_ty9C-S}NvBmqtp~fHvM*x(k*F-t)UE z)AZ`2)DPBy$uH#;>Oyf+yCbb&__&a~0ToF&?3x|CPAC&+)|0~U{UENpjDR_=#!eW53Lh=At&XKDaenANNAVxbh zLJfD#%h7{yVa{gPE@$BAKh;?CK@`((oe6eRwE{K60;@ZHF< zJG#8lTZr5M-Ajqg>Vg#Y%@<}y1!P{*QC!@@6#DgsM#X-J2#`ihYP>p3j^TH-QNtKA zeNPzDYd0zsG`c6#nbNbu{Yh%y3X~)s3fE!ZGGdmHO^NqoW+rzVc3DgO?>0Pt`&Su3 zVE5L=h5;#&9-Ij`@6?RTHiR9nWzhZWf%9kI$8Y8OZ)L;d_$r4~)$OUGtB)LmSo4NP ztV(VK5u2CkaToVN~`7Q>=bhNm!hfNDNcnycuA4zNfl$+A>*m+@uuD+ZiLUQNeL}_Or z=H1Tam5mg4$8xuZGH!*AnZ^0e|2VjB;l+cT41<`63E3w*ha69;-LD>wS_`bWn!@u$ zHc{dSbN#1+{B$af>c(eUOv{2Z^|f1L`ic#js#mvf!PsZs;4e&zhcY*B!_h&!{eOov zh~zDwb+yQls_TYMSRAyM6}$OnbWA>aWZhS-x5cr%d9g!Yw%+1Tm^zIGC>pJDZ{^twG@ARb+@$r5?U$V_eharSh(Dqc<;8gl#?k` zPDZ$#EVAZa#ytRYIEJ;7qKOTt$lB_=h8+2y@^`fMcW8$u51P+PmV-$BHbEzKA*71X98-iYL;i}QH1SMJp0rs}Zh7d3|#ETDzUz-dG z&zi^;I4%iUxZI)k!&Lp|G0LDyW^C7vB|(ef`vRBDAK3=#!*pDZ<_?mt{=i$Z-)USb z{Hf8YJk@PqdHo48ll!-aLBpg~o*-J&G&W=KBbcAGOFKnZMhGZOCqOSbo%5L%lt8A@ zD9;vwxhq_Lk3IzY*`ca$WMeUevprMZ_T=5DKUP`Ldr}M$eS#W&oz?yW&bVxZB@f6=#FXd zf@vN2x)7m2o%BOh4UI1WSYRj}^}pf#9tw5UE#~@vOwOOWtg^fX3)nrpw`k2Uo8P?) zfioFiMD0FVU?Vn7xK8jW&CEt%E+v5<&1HFDzVQN2+;h+4^27}I7QzlEnr(6!)yv(b zrd_H-w5kJC#B5Quy2yJ@!bm;BINk}~0y2RpnOo^gV`2wrt_C<|d~rV45iAeO-bGQf!D zrS^62FMivb)lpW1e3(H}4U~0ZudL;_kcD9n&E3lG=RK6fXSInQR}5O<>)Rm*`GZoA z0e>@ohE>r${KD$F*ED)py#?Ina5 zwhLXt6};r_!Pm>^_+~DA)6c%d7?GK;LAIE-)3^(pqb6+clZPQE_cQhr3@+~AeJ(_1 z1~?ALdu5rvRMBm3t9}V!(%0YlcW{ubKup5bMeS2$ptp&Wmz-cfRC_jTc(lrLWnh}= zU2*$FMrOO$p{6&+@@iIcq?*snh26BDX%7RfzLpLyayeb0FC_Rle)RQ%z z|F2^7EW_WQ{T7&KwGLbU@GZj~=mZaZSX3R|KR+)w{vj7Z3m$_z!S7^RU|C8ZL+jiIj}rjO48IQI6HPZ(ULmS z)OZ_9zsc?(*z=ixpd=*GS$gJ;>gK%V#$Gc}ou^PP-h7T^p;>M2ma`svqJJ(9L~xEu zUuz*VE6)H^Ii&)gx2aEGt?yhMk#(MYxMbOV{7!<{Gb6(Y<4UehK)t=eO{$?ed)4Wj zy)xJp3}?~@1!oI)LYO|WII=~~sg?`2Khc!^Rb8r|vCx^e2Z!Bjm;5&ZO#rjfJ<-f-(h|5D#(CoNhc6z;SoUHC6# zGs*rgheQY!vWVySB6W@W*ArbrJg(Z13aB@&2MC(hHgfMJ*I+KB3SNPC9!7*QhVbQ7 zk52O^ZDle(#j3h93sMy}V7M%@5{4 z(t=emEMFf7{z@@9jM~`#<%Ai1f{njlWx8Fa_bl1jsF0uLm*m*p?39a2%wj$({2yDeAprQ5UP5TQm%2r3UAS?24c|`R6TN zMOEXH{vV#N_Vi}fS;9jh zlVdyd{Y%0>L@a_)IV&Y#KYL?wT5rf-UsD;$#%v2=6P_zuQs5nbcIh$PfKuoVyN z?L_v_L(B(whAvFt*!pYbj4!}2>xXouX9`zxuK{iL!+U;uT36|KVlHE-f6pbwsJ^#c zw(QRB^UCecxA2SVjvye&L*#|FSDXU4xZ0ErW+km|OX11^o8Wpt;?r{qBl3>eE9sVd zd&!R7Z@jC;c#%wfg^H>6{2k*bi%yQ{Mk)ITR!inh{CDt@1I7%sGA59L`yQb0gLTA( zZZW_nH^8Eyv^Kdvc9fm;ns91nYFwA zE`Gv`84(U3bf>i@X@0MeDjnE~N~D~F-%>x*Px-+9@HH(ErcZ!B6zh(|q$;*<&{{jnYvIsHAiIEEiTKT{snglBxVxprLwmflf-N4=X8 zqeIevg40EYzjWtjtBg>_(D0!sQR3jPaNolLHn4?uUjWV7#s_oGNR@5Y5v?p@>REwA zDB48Nwk|5<1Wx$Jx#DU^prZ?I7;q}SwaW8z;sj1cB6~&^5@1|idW$`>jqmb2olajz6bF}oy}j2LC@yK)}_f#G6p7~hMF>ZedaWS1fHVAsoAEN zF`xOng2oq+a9^b=1xIx+PV7oZ3nkL^UC8JHPFNWIcF$L?a)Rwd@R{Yka9M?jRB@t1 zT6uQFe?4U8QJTt>3gH3I0k1!94n$xmdzdJ>InPE)IPps74h#Fk{$(L$an8QExM?(r zeYq99aMv+|12rccR$-q&aO(y0^Bn44k_2;q7re8bPV(AJq9u00*OQ5-bhWC#JsV&H zFjFz?qec#e>$MKPc&hbif5fb|O~nYHQaP=EbFT$Q{$6J)z}oD932M6>q$4VQ(sF%G zlXVLH-Nka`C7!#@WCAl8otB4j*8%&un@v?|ob>k7YNkrRqJI<`?MCbIJ8)PJV29y{a}Ynnd9y)0Ynwt6=G(adNKg3t%NDSmxXX? z8F~d)FyaJFBRVH9_msk7W>x!8v@#WM7VGB}&aANttlD<0->i>WI%(G|6j*>D?rR;TNhu+z{g^+Qaz3wO@Gb-e8WF$Ex z;q2^i&Yp*eJL@RNS;y}_-{1eQ*Yo*!JfDx}V-FI~ROLhMw4sR%qSJ3@$X(kNkD|e_ zGx`Vkv4$2!^+pB1&Vxq^nVXw1U!PK-B=6zCys#jkz%@sh@8b^w-)4$DwDmmLh4CJ8 zFnqYGY1QPU&ol&fm5Ign{fPSYRi_}WYXPVi(!M@I?taF*G$xS^-^P+84D>HVImv2w zy9}mA76VuVN`PKn&-^bq&}jECLa+?izg0(yT}iouC1}3!sS97YjOYV|Wn2UacL)kh zR$Ar73*oY5H32Ch`~O%ETp}MEg!|<@@nsuL3Zod&rlL@8w1{7?zUooeu+6eO>9ZcZ z1O>LKjPRjjvcp6XiZr`ypM}qOpI=g$l7iX95>LoDq`8opGtTeX@hF4GhHxc z&#m8FU4GZE`V`-<5~9Z2AZdF$Jun3H{YlZFnl<{{M>GuoKI?aph6|Dt4*G;I;w{g7 z;=IvEw>UWZTy^78m5FhY?DO8HMTXP!`g#|=2p-jTV2+zFqxA{n=JDr#R|F6|?SfEX z)yyc-ilcc<`W|{}DkA!x_(py#h98}&GQzKh+S<~%AS9hPeTtaT&DT4)@D0B{#eVA` z^y8i#vN}%eP~_cjd4SxRetxu-nyGPi*(UbA8$LzbVa5UfYq&`lsu+|eVO8o^gK~7g z{Af80A1ekM)PS~?E{JuHYd1LfJ=c&j*XL#gj9VWsd-K08vcyqs~`6eO2Ts8YBq`KrP|Lc^({#Y|lG=UmUsNW6!N=(K*6+r4_qRW9cS_RVE5j6lv;jcn733mV(yZjgeQG zc2j~XS~lm7c}T-xGQFfGjZ++mrt`z7~}up|ocZ!Tu@Hgcz4N=-|N9aMf19+ANW>I|^=7nbIxRtVV1 zw!6?pXU-=Lo{IrOR2u$}w#k2xb8abs#|-%Ecy5wdO+MDlHqVO=G~9hkP>WL-Cx7Dk?4nL=fCVoXo15hOJ+`brBE0(>Q$t znhxD23q2|?nig5SS0C4u9Q1J^&j(wf7NhWFI(p%XNLH=aO!{wJlm^r-+TWImI2*tJ z_nHEJ7I4ktUIO{?m;ID|vAscTvZ}38VY;x1$ggxe?Rc{8*p_YxGpYV{G;Y0x26jCt zZ5EykFAwjE09fHw3G|?=q(OcH{m(Y_@g2=SH(w}Lhbo>nRLpyr0z0&6qJChz4%eET zT@fMsSc{?Gv3xHB50e5JbgmK(LC{UVXyn+lKkEwN4;Eug)c-6T35}GgqiP`yP}(Cn zui~4R>W%$jNxGbXqqIOUXSq;Ugm|~)^Zc!qxy#z@xQEy#UF(zPpbri1OEq zeu(*8^E0OaUx1aLF%xY59Z<5*2{S(6j6LRuZf;fDpmR>Ge{pUeJ={1D*kA-WfuM$8 zuuY!+z>|qEy8skj4IA%Rm)P3Vf)La*$RIXpz|ncr2JIf~U2<0Sy^U}d{j$IFrnpKo zuU?}S;gwcT@4RJ&nrq-g0~$a+vwZD?=?+x>VHp17Lf=dtR)TUM)0+G%($qm#pOTSg zbYiI6u&^hl8UpC}PffWXiFZE)A>1wH$F>U%7nkK69J<$}pvQS{aZ@K%p30hCel?WV z#*U@Csf8F8z$u?3PPOU8P);{h)sTR=6m1OpOlTM z=jF}LAAUtRx&=o!Xj@P+IAGRAAvsy*fQf0wX8yo5K4EFv$K}Qw2x&1UsYh+wEx^6^ zacy56Fy7YT%EOT=yw7s429VlR@nvWG?KYc7RvYvW`A%l?1BY;{%6}O$wva;sML?P> z<)w~=S5ZRgSJwhD?*TJPgm_DC!WYuy5b#gvKvu-ySHk@IQs(012UO&QWIhbnn|pKJ ze_(5h<&T#v!tlFXy2R(QnDX|&93@nfoVKPWvx)f7dasvYj`#)k@TyU~Jt7`vDcR~g zO%q%=HXm6r-!4S~nwLhhKxbRi6~oq{e{Jhf`%r&dmEo7F246(DZB(ai5MwQLqH=W3 z@5Q(gj~6%5DqpwG4Oh4=zP_=jXgJSskz9~&Re~PiX#?fQW4fD4zim@BzyY8UE1Yg;tz37iO_4PFBMMoGbsI??mzlXQT(9Qrwl?iSCRVeVIS8VmP-^Zg&cCpVn zs~1D2=3bb$>oq+0pUyTuv0c9|aQf^Y#|BCgsx_*I1{yxt?t48vlCxnmZ1rSB(OQ)i z*VXp1^pSFh9~{Gi4O-EBG^>Puk>)t+>QW?pW&HA=a#weSEmC08Z%PKn>O@*@jM=&^NSwvoJiu-`2)PO$FFW^D)oKpEx%+eVtG)gJte8lr*y)rce|fd}fG3bjw4| zT?3AKGtK?ZeKxKRUGtS{@VI*3*{0Dt6zo>6oRg zuXBd0|7TX|F$xj?TZ=pPis>?mlF@sc8~5#s}%NcVrw@} zGfCXLHghiJ<^OaFZ^dx8zUR-gXt>Yu{Ks|TPG;J6tk{)T0y=Gt9QjC7c0#+7{IJ2; z@DoMj?T?yq1)t9{jyf(sy=-*)V}tfDizF@6p=EeDvs%fkro5I0rSWH|_9i=xcv++A z3;HOb*W6q|TUfl*g)E_$8C#mSFYWnjg^zVVYzZs&=tVrV)FNDv3Vv@7poM# zl)oqA6&XM4OB|mJ27s09o28;C*S6i(dT~Ey=G%pps~L*Qdu0iW9Oz)W{7kKW zCkStRv(>ZXUCj;c+X_1i$tAm$eM-9V1$-U~9BtZ-!OoFim&6vLKiWPB{Su_W7Nnx^ zm?*uQD*vMmYHqTA)JSxegC1|am&#(b}en(Pz^Zy32Td+WM zfQm|ggcn$1QI|+I*m_xl!&ypZ|GR3(K%oza@*Z``JMI^YkbfX1aYi+VkR7?l!xKZ< z03+*I7lX))uq*0Tre zQD?WXbpBr53nQzSu=0##!ili}#<*7BBr8YH6=15%+YW_rD|P#JVvYG8_rHXs}*ExyXtJ z@CJ1jTY0=O&+^@G910SEGJO4s=RoFB1~RoeJ0Q9GaHK3)A$W8H@wH?XK%s2Ti}-oU zy?C}K=BQHLMeia@5$q}d)%$6@q^_q-L78~QM~Dr4)Neg20le zbq1B?3YOVeO(=ytz3ti_7IIDVZe*%0U?R^ZNQZ0!=Snq>`2*>0XF7@VzMaRgzAFmG ztE0S}-0wd}DV^}=tFT36ke)Hwu&rxKn`K}lh&*{Y@bY!V7&qM!r2+K!4UBUjn# zY>^oB=OP{H>)K6P&w&+;Bp-k4jH$)$jSWK~fhpHp6`xhI#ctq*g`oTyuIoe}r1Vn} z3GkI^58lmMekeb>Vbmu<9-OM*fYkft42{Lmj)_Sxa$=`V(XC$BS=J&?Q`PY!PzHih zDsTVy2NU(&BrSf;c9jeTL~`AY{kM5N60?nq<}C@z^i)VCVcN|`=tpA;wDVTpyI+s* zZ^)wPtB_ewQ`1=*ZC)^Hk{bwTUdeeqsTcg2oF@-wrqb6L-{eDQ{s5xrj6Foi_nw?{ zMtDrG{z#)At#9D;tN=Spkf}Wn^)&*#>|A=m_{Ih}5>}R11Ex*WWH&(;7$)5ZPNvlj#l}|2HjcGxW#0*mNvC)bU>D zlG66M(uR}iY4Pi0AqI3BI7u#2hVTZbu*}i8{%1q$CuoTots?$`^eSe6$cvigV2-o8 zG0ICBF+Q*$6Fr1H3IUW~Tm<*WN=tucGspOEzNZC~Hj?_-|ZIlVFBY0(j zuaChEV&NGPEK?ESCm8uF>1c$z&_@+~@v7wX5tetwBdJ7LPPG zyPPu`Ic%J>p)c7>XP8KxB!>9KxQK+5K@M}J?VF-mppGv>g&$|g_m#(r!GHLOBBqhg z<_=rv@F*1yvxfJVoJ)f@&Bos;4Ii{b2HDXJ^Tj$N#v|YcRb+zF zKiyGw(jS>NPU>!$M7mwM(oVx^FX4!4Gpbx|llu2yRi@@5+GVV|!+-&8&J4XCC)P0s zcnH81jiw4jDqx&1DB=ENxEs_6+^GKj>R+5dTFT23g=|u#!uMdmvD<8g7C=qf(Y;>S zb)d6Fjs7Vk7H24$YMia;3hLgf=Ez%<3Ks&*z&2qGW5<`uX}jG`rej@Lmn5BSYy4juW^1Ya*QS0jQEYP|QXv~UaNNs)-jlq*O2>%- zUiy1Buj+(0O*!}dxCAvmdCZ^v`J0$p24g|+iv&|>%}MAY?n*%_sWdZMAK~Yr9$;-gzuA$3}8i2{8_@l0(fnH^WP}OV=JHi2)M(_K6$xQB5VyB~L$boHRa* zPC~%-;bO4ghHph{l<1!bH1Ge1OB6OUxKfj{AL-$=VgnkDqxr6lqn^QhxelZ#^x=S#`SWWL}62!TK;0Sfv3{}yp8a8PM5X?0Pm)5f39G(>pJxrvz0)TU>%0C!;?I37jZ)eQ)JorY z)SE8ca@T$KR%Gq{T~agV4XLXfB2D;tM%lA|;Vaaf9w(;Ye_I5Z&xWpEUdS6jMlh4! zWpaDLwS1h)y5?c?ob8>#v6v~%`h~__dQwgthro1w{qiT|JXtlQDsH$+{R)O5{1833 ze9esgp{U=2==RH!^k*Q|rPmMza!sv1(v@Cq;kS}M921RbPUCz92?EsEv0A>2bTV+Q zzdR!`-pETbMp2@6uit7QR;R`hY4fo^;9PWIq@O^~aZ8(?_=Ic2ueinM;cetcsUDE` zQt;^IyF~idlw+5a=39d_B(hFBOtn^OBFN`DR@p)I_eoFFqI33tzZ`LN)}GA|io-8c zz8d+Z(}b&p482Q7*Q+ZM&1p#P+=S~?zo^tykSLWweO+E~<96?Z7<`FH@puUIU1O-( z`6TGU74xruD7RPes8f;wCJIU`1o?y$j%NuLDEiT8?A9O7!6!-#X+o zO#&ee>I9&Z*4qxu`P>V}2K7}AB?9+HPMFwdT8TQM@O{WhkA9{LJ0uP8xyE%(jyUo> zQti1A5P{?rmhux6Mw4%v&TRHzRlW@%8VtrD*1&^w}8+@@Vj)9vi35Q@M zX6oL8rrQ)&K^Ru#yb3{e;~YStyzP#g0hcEESDO4AoZZ;7+4RzSKeLX4& zFUVvl5_?eBZu7EYXSDIOt2+7;RI}%j!_^cx(VGeFz!eBY)bncp^|q`W7aR*OBvp{Jl6d zFWoNNyd7-8HDZ9imF>M$4iUf?(rLn2p(}MIz?uWF>rBjceWSd_O5M9((>5;e2%>}q zj!7eJ@JMnX{JZHYM}V+r|IG)CnjgT~C0p}OMj=-SxgpY#opRF!lfSuTgGN7j6^E)| z*{Lj3_HkSDe}cxzUw@t=9f4?P^j-5z5O$g$`d)dkH9~UgxLBoi$YxH!5Gy%QG@~hs zcP`^4-B~}Kqk79O?hXN4vpkOI!e4Dx478OYy%Tzx7e!CejqXoXBWeds?GZM5!giEE zu=aQ(OQWwfg4MtgzAs5o5+}{j;fRvEf&}lX52HuJd5bt=Hspj=q8?gI+Wa`Gb#G>T zR7d;NTXp^PE^)$qhan3!A66g+ZgN_D*AN z0&p=-AevHN+k8tvSDl~QR|{|iAdtY-bK05a8O7BCJv1#Ff!7E@rZl8~jSog9#Q8{j zcFAF+3bfzVq;k9Ny;hV8|L3?cNPn@&*+>Qj-|e+K?MRs=eLcp3@4d#=BXs{$jY@8oH%l@-nH7+ zaWI?48{&c?MJW+f`)jkHexD9*|4&3+6ZPf9CRoiUI)AlkLm%2>M`l{jtz)zaw!61n zxk)5u$>-+fv05olENL|l4<@c?lxY394X9*Aw^LYoNa%+N=^l`$F3IlA(^+k0ohY9#&A9Te(?+$&5&@nkD&~SDFD4S8AP!{g2gk9X7g(xvMkr0(VigV* z_tOOl;|e8($dE*`)|Xw^NM1tON~ANE-7)Kb_rMAr1ot@@qjhY-t(@R#n$Ps%ulY=& zd3TJnVDsEy4}I*G(~7$DMcIsV00?Uz7ihCaExZW?j~vv#FKOsVV{i^D(D74@OY3zr zX_$LSL&XvFC6LrS(guV+X}d#!RS$#-Lh~5HhXxp|+7tL^Dv(>GH_)xW2&8bf;K0fU zI8`!c?mSp+2a*zyX??I{xaYTLWDu7^Z4nn68_byG*+&#^S9{$uTN%*yL z<$YbF1w1+yga_3wi9y>@%xIbq5BwXee}>H}sSJOg(ELE|qaW_1i?oZe?LP!i`@V4a z6*X>z-6l}akeXYX8+cLXdoqWVMz6*`Yoc-{dt?L+sp$M8d#o?IlB32JJbnAhRC<t8|w_hL?A!EZX6!HGS(nn6rz=fGI4t*xRW$ zUMF2?QfkGl;dLm_f;ohMw&fTq~!?bIuuA zeS;7=CUQxKGo7au(Ie=|{C|g{e{R9A@?%ey^(!u*Yy&9Z zR@Q!c+~Ql1zJOQhT~O>!o31Spgxzmyw8}}gOp1=gCT+n{6=Y{vK{o92O1Rt!DdeGLv>0wj{-^1h#cMs5L~ z?7(x+c;`XJZ;~eRl&Vj{6VbXdP2#uJwl?~DIyq-Py)MMKq;q1J5zb42Z< zcirssBtIptt2Qom3j9wgj{PXnf@*v(IhF1cQy;c34oS z61Rvs4#(2Of^;6tpA^_TjgRudd?%?(5YGfvF4(%6J)@Nzb*DA=ZVs~Hw$z2 zYZfIki92v~h>!@aq$T#r1~f7fY=HSCA`aNwcs~I$Vlp+KXm*KCn{Y>ZE=yJx#rVK;1(>UKU z2!P1}a9RMu6nlRCX}NdfV4qP?q~Lg(&MuKfO_t0aD+X$~NzZp}?1LZoV>Qml))?DZ zP!QI>HH0CW4@(dAE%%+q+Bc7Y1w>2?(X73}Jk2!DfG~POpBW5giyT~2ely^l8aV!W zVggQ&m%(qDgn;Rw#V(A_nYTDBo)DZ~ZbT+82EJOS|NW`f8mn!JY#&!CcJ>+#+o;BS ze^HEYuTMO9{83NoU%m;{9L=wieXtujrjH!d#qM@CeN`f@+*I5DC0f`=UFENnQAJ!d zv4VqAr%cu`Yz)n5V(5=QJ4O^OfRsGP2H`egn*H127YmX{2ebWCJ~k$bk^P z_$T_2B*x*OYJi0g`KQW<^O5wZ)x<)EW$Da>fsr3v&0QKT6Ov;zLoX&jtK`{oW2f>j zvQ=C;(e9%>3M)3VMgjqCqaJRNS)i2{#NydVU6#I{{88H0%DD4IE6uV87B9!K%CzDA z{^s@I=~r~)+pBe*m;Q5r8_X0e(LsmR!i7l%2tTOiWE_XzNFoxyh*oOkZ)HQbfc>(x zv?F6D&k70tyo4fVbn5pS`G($y=9P$Q+I$BB!6be^z4t(r{P%|!VW*hsC)kLkGp#j4Vqaf$8x;t%fY=52S}BBq zVytMtQnT(+c=nw?c6MI8fWEQIl>Ai$7#^Hbvu7eyQ7ZW+Z2*HUD;FXV`Y1WiUb_VKrJsPz%3C3R&#o)8e#+=2OU&_jL6 z;ptuY5UoRP)HhL(SkTDv4;}5TP-_Sfb6}42W+c%m&;3(y-ui|#r9H`|Qc+_$H#j|% z5=e8__%hQ-x!|57rQtw1J}8;zB%^xCr5&7n0meBYM|C-`^hbDsx-&{q1tYTe2$V@X`YfSxykW|ML z0VLT{XEC=FJRxYFW-<+9-LRY+S$?P98lN=G#|wigbVm>PLtu4Oe`lj z^O8R8sV{jhWWiC)FM}Dr0Boe3EnHn)%X!wzkY6b^8i^p>`xH?6GOb zt9KSuM!pjQ6V(BQ7TV4cR~^rm;BkwVW@kMt>ysoK$qGo|-lKLE6$<*`Ruwc=(#J zxHz=tD@_SOUY#wqY*G`u>Slj{Pxxvz^*W%pc$sJxuAWS%?7)K5ra*UaB_Z@tFMoBd zK~GLNW>oa*z7+9757!p^#pBU{06M}A(|hCk`_F!%eH;8evWRsm`EOZ7nnqU`V$Yuz zse`9mVPdIaAIoPwpJsn>QHCyR;5hAPGL!GIgbMmHh_dR~>RV?npq|gZ9Z?t^<|noV zi(g^G?aQlGt6=Xj<6OC*vu4|iF>&W~UwB+FSX~=ky^D`3;;KwLS=Z!?<%)uyYQ*0| zS{5(yfGvyHWw&`YUq#6#MF>MR4VYPk%hXC5>BD2j7r=k_uD5>M1)ko>J+DPdB79%w%HUbF!}bd&{^A zXE@g@{SUsi9G829E8hVv+Ykq3fapeM(pqS8;^!Z$ca8s>CS-cTs~zPRqO!DFgKB{+ z^5N7vTB07AT(-%JnKtr%_*rpNgFs99c(*5bs_cj8n7rR45Y9Gn#dKI5-GF-|<*NC_ zav0?3VD2+b99mH`s?b+}oge=~4yNe{#ESL407*FqHZ_+v^o&@4Qlhx=h?gXuz}9%G zezs0b2x8t&vP%=ipze@-=^+2=2i5tPrK_3H+n#N`TEd6#B{lABzhAs3rao$CSG07& z6U5dKfcj(;yJDu9X@2BZm!!_16UndqN7(_xfL%L^EmFU?%>?CwzBbq%@NWyYUDnmB z_9xy!FAZb_236#e^S^RGY?DqcYn%Ob*bbZywZ#u9-TOGjrWD|-Qw(yEFDUpY!AE5pe6Qs!zsjGAKk4Gc7u@V4gne!>3f*% z_7N1`_OyylnbCtTr~7kp7ufv|hm90lftx!9v=-v81(+`4)ws7`ii7YpK6(X8Q8ieY2; zAKdD)Okx{Ey%2{e=oT#@0Y9>`=qVy#eU-o>+G#G2gPE-P>iCyA~Do%_Zw^YBe)7J81<~)?< z@|&V&WFe^kT$lXYk#@PJ@OX|1og-DE2e5m`732b8ZVu|t$Q4|5LoN+Q z%EwZb{f&P$g+D2o{urNor^P%&>;o!`&wIL4OCn5x&=EwX?jTYzS+<@qa_%HTET{Vo3a+4c6YLpLv;l zZvShA)Y$3A>H7L21RfB-G#FSSn*rAc% zQ!qEfT^IhtVLLOdcgte3cGn&O)M=c1Q%P>f1WUkBAcz6O2XhL#znNiHFPX;MFD49S z=)S&U8nTSo>4vYG*^B&`h^z)`Y|Eu?@n9z%Xh8xc@zEx#6*@ka|_u$`X<&BM`5!%`hm)sTglvOavyU+M?`WCjbkz^S0 zi@)^xJEMv+!c5ZAMDbvk19Xg{eTbSO`(+(s{m&n3`u~%!hyQS9GueanjbOxAXf48t7bk63631B?i?C6}o zv^J_1Uu;J~qK_B@PNI{T`W;2BQst2zUz{;l0kxi=yIc5CLOLGIYQY0d;+Xt7Q2+-Y zmLZ`}^5ie4A1XM*^V0?=BdY)uagr0^qf zX)KJvSwg9}p?Z)BCOsyoC!U#q8-uK6<0uz8Svbt zn}|U!2~PKeK?QXn2^WBw)VcDF|n`Nw6!dkI&=-a-9~CY0e4m;Gso6??wU*P}4{ zM~l*stF;K$4%Y9!j+paH9iFR5I)Lk&CO%tHXWo&6#KmJ|jA$V}x>@+?JB%TK~)-7%yWYd4Y=($dGBqsFdcLi`HW{^`Y|!k7u?XQVnpm2 z@Sb+_Rr8L79Gyc~&%h_$-2VM6MV7T43L$P!^8-CssT0Y5&dp2dP}2e*#b5a+IEx68 zNt~4ZQaYAwSuH^RO8)FiN3<}q1qfiDNqxB%H=RpJ8~xI8{M!(4c@S(Z?_b!S8kt@Kj2FheZU%!2DD%r{H`u!=5R>JGe0 z6RX;+R??SfoHDzZ2c9;IGe6?VOyPVCYH`)^7lmGGRq5j^P?C+$;m5@B()zAL*45Zs3xbcBJ7c!IdmzT`T0p?t4Z+cj`t$K+YXP^DHnhi}=j%c|ixq_WLcr%dE2F!Iu z>4_I|6Znm=oC5XA@%xeM3zyXZx%cawmR_lu=yA@Z6n%Of$g7XJ)2%+KDc)rK5ioH% z1hvp*a^GTHnRk@T8s06({oiEGJUHAkr?AlxxXIpL0c#>z*UyWJa0_gv(3iz|wd zh1u?{XO0Bk54`28BYE_$sNl#%xZv9?Q)T-{T(h(-RBB#- zvR{0+I92S-6uauB02+8ON@hQ~GCO9v$Z#*|Ofos!02?>7wtOo_x3?u@LZy79$+;$5 z#yaeB!cq7SV{$3NSa`oYx&Jg?TbLqQJa{t>5A*R)t^mk2SF(_0r~Bu-b8mrk({lkY z-der4o3RWS9`XnSKZFReuehJdcCSr;>FX(KSB2KUiDo3|XE@dZHIm8`A~CM`$ke*a zLx)*+0^*67u<;DplNI3u&OwBY$HYGM+GPBgHL{DcYr@yyOezWufLO68k&(g6?U`857 zO8$Lt-dNh~j9S(GWuflr>eIjejdmg4Z?`l?Bjzopvskc50}h0&ZxeK7p_kLjPa6boRiR;DF4{t-sF*`bo)0mIzh z>*ldpZOHQ5R?#7g;YyFO*}opi-c))rFP0d;lhm)D+N4+h#&_$EM;vC6StChYbP?h> zLx;v(D!5eN`Ap1+XLL_fBdiYQ#ro$bpC;1rO`OMHZ1i89zR%|~`}ee@R(I9nuzKW6 ze~KMcl*h6S2@P+=up9B)RDMnArXnnn0^kJSPOHLEI!drf5d8(POUt; zQGGAbHt?=Yw1}Fp$4YkuKlIhE*jgoP@cYj&nUi$b`F)ep0LRo3^^{F@Z;kr_76L$v z*|M#+9w9j69`O;T3Q^>TBGBZQ2S47``6yQ)?W#zuuJy-J{k~ zVswW}Bu^w++=VQ^Ek3)k8(*-obB87hU!SKI%5~I4UJYyN%lG;*qaeSmBYFh= z4Hwb;wF9LF^l2!tW<|5qF4>SXea$D-5u$I_-@w1@{}L4Z9A|M!tiM#CsSuUK^nyQx zi$vHH(dk=%>c6TgwF^X@`r+q3FQ?LKrH4XW4z9Uf3l~Of+mJ}AR0QC0q1<)sUH1HV vHqnZ7v6mUuhZYXg0+4Rlhoi^KW*CG)xWvX%TwaQM#epdXcC|7An5GSHtloGdS} zesKiq$z6HD$>D!A&?HyROJC=TXZLfw_$5+ux$q?uFhPVD8kM{))Z3mb$ar`1!qZ~h zy6j)1SxOe1mKMIy4sw%~T5SK#oq|AjZkxjg%v|dQfK2x#++Y`9cYB_g><0Ai#XOK{ ze?461@$S8$?`ge~8;juZm*%@<;sfGbig6-oP|3e~!IL4=DWW1ISUj sp{E+}S!$VU%2)j~O%+wuT=bt|W_Z*-ncS)z;As&Ip00i_>zopr0CtXc#sB~S literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/local_plugin_assistant.svg b/wp/wp-content/plugins/wordpress-seo/images/local_plugin_assistant.svg new file mode 100644 index 00000000..44e32643 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/local_plugin_assistant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_man_1_optim.svg b/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_man_1_optim.svg new file mode 100644 index 00000000..187e6c45 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_man_1_optim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_1_optim.svg b/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_1_optim.svg new file mode 100644 index 00000000..4d5a2480 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_1_optim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_2_optim.svg b/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_2_optim.svg new file mode 100644 index 00000000..801c69a0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/mirrored_fit_bubble_woman_2_optim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/new-to-configuration-notice.svg b/wp/wp-content/plugins/wordpress-seo/images/new-to-configuration-notice.svg new file mode 100644 index 00000000..2343c570 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/new-to-configuration-notice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/news_plugin_assistant.svg b/wp/wp-content/plugins/wordpress-seo/images/news_plugin_assistant.svg new file mode 100644 index 00000000..f178f9c2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/images/news_plugin_assistant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/images/open_graph.png b/wp/wp-content/plugins/wordpress-seo/images/open_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cb53dc2b3304047aedb255272728dff5dec9e265 GIT binary patch literal 22912 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

      Cm<)*{M*i7IH^I0Ju2btdqdKB)wB^|NmKkZU zdKio3xoqS>_x4!XqcSS(dX`AmS$;s1)f8LYP&bzuU0s-3r+uf3!o$lJ3~?B@X`jMUxw z9Uz~@FMzX$ydMqBHnZ?7)eWyap7XDENyAbBRl~5@ais>e3+=? zg6L9g^X1OcTNFWgB+_dD+9TItyCd#_B@ZZO7}b#B>3jhF8h1e#VXJHd>~Bx}hR!eN z^7B?!;=HE&66z9ioUoGN9IKASQ?^#_e%fZTcmM{X&X~YG@nQTVa%^bZ?Lo5gMQm9p zCDX6kdS|O{AXow=^)TG>hB&un#oF4P<8`+yZk%Lmc#HS4zC7x=1yg=~$Q7rfGGhFM zZsNeBbBMLptvd&l;d7q@&om0~Gv-6liHzz=yx!U``)}ktfhR-yy+bqk2h@)C&AJYj zW}$%>WuUMehL@^O!|Kj6e21U%;BMNRTdKWm?><|n7|}f6 zxtZHFxxVrX*%(KpbMzv5S(b9i&~$zl?bQ_Dym6Q*=Q-yz!BMXuST8x;DftTq8XYRi zVxBcka7IQ){d96u=k?FN6JIbhaTB4yf+e-5hCVf_OYE6b8+r(CK3SQnJjNT^CWdm67!JE4=yoPg{_ zyBXrx{mZCY=e(VrWa4JT8;E;zWk_1-TvD(c0`1un4T}&JDva-ndNN7UJ^8R2k+%Gb z-2Bhk;?=O$Jsfk(m%wjt9V)xL4Tw%xxNT5hj~W#N9{Co9$n5>h@nTCi&=!ByHBAQr ztdfIZkDBylb54d)zCxk>h}&nVS&R%xB>Iz6v2hhmh}j$63XdY-T2=fec3RYeLPEp9 zq@d^rj5jT4SNHF4if@QYHT?(R80#2II}_VemC{u>Wc=MiSCp|Y%ymA4R8BF4(7yH( z*7WIKyY}-mCCBGUL6;r!mnKQs$@Ym76Vu7ApB#cpU*WOV&IQ;$ex$Lb3^+Xnh<>ml z+VxW}&y(+Smji9LgeU5kAOE?%UAa(~*6<_d`jLnS`F zyhzemr6b^Ov)-ZK9$!y(7$$Bmm) zbHRBVU-?ZKB}N`CBK!m_YfiD+a6PV=+fY0H**GdoWsW0sDPr7&HcSiLE6(kqQmMJQ zT#FmyC4ZYE^!z>#qBY1K>o1E9Ei7v$WvRkk{WiC(i(Uoios=CHmIJ$8z=&`5_DJ1edY7gU6ZqChtT;!^a8klkGXfz&kh3uyEY9u3=hr7|esFebMN!QC_YpTtZ_Gde zL8ScgKDv46$EgLG9XVIpoPB;!IEm|uqr}a22kShEOdiK~##BDrl%s%~@#qcH4gAw# zNQri)=LSyukk2K>^hBCsCP~!IeA>LV|5&Aa=%^(gLwo4J4DwJwftNX}XKcLflM8cC{%NBKP2iuD&dN|(< R|KDGKI$DOBHR^97{|{fxz}Wx* literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/images/stale-cornerstone-content-in-yoast-seo.png b/wp/wp-content/plugins/wordpress-seo/images/stale-cornerstone-content-in-yoast-seo.png new file mode 100644 index 0000000000000000000000000000000000000000..581509a3a09492fa467a978aa6123db8f33f6c5e GIT binary patch literal 24197 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 IEN-RzA4B!&=l}o! literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-addon-manager.php b/wp/wp-content/plugins/wordpress-seo/inc/class-addon-manager.php new file mode 100644 index 00000000..aa73685a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-addon-manager.php @@ -0,0 +1,878 @@ + self::PREMIUM_SLUG, + 'wpseo-news.php' => self::NEWS_SLUG, + 'video-seo.php' => self::VIDEO_SLUG, + 'wpseo-woocommerce.php' => self::WOOCOMMERCE_SLUG, + 'local-seo.php' => self::LOCAL_SLUG, + ]; + + /** + * The addon data for the shortlinks. + * + * @var array + */ + private $addon_details = [ + self::PREMIUM_SLUG => [ + 'name' => 'Yoast SEO Premium', + 'short_link_activation' => 'https://yoa.st/13j', + 'short_link_renewal' => 'https://yoa.st/4ey', + ], + self::NEWS_SLUG => [ + 'name' => 'Yoast News SEO', + 'short_link_activation' => 'https://yoa.st/4xq', + 'short_link_renewal' => 'https://yoa.st/4xv', + ], + self::WOOCOMMERCE_SLUG => [ + 'name' => 'Yoast WooCommerce SEO', + 'short_link_activation' => 'https://yoa.st/4xs', + 'short_link_renewal' => 'https://yoa.st/4xx', + ], + self::VIDEO_SLUG => [ + 'name' => 'Yoast Video SEO', + 'short_link_activation' => 'https://yoa.st/4xr', + 'short_link_renewal' => 'https://yoa.st/4xw', + ], + self::LOCAL_SLUG => [ + 'name' => 'Yoast Local SEO', + 'short_link_activation' => 'https://yoa.st/4xp', + 'short_link_renewal' => 'https://yoa.st/4xu', + ], + ]; + + /** + * Holds the site information data. + * + * @var stdClass + */ + private $site_information; + + /** + * Hooks into WordPress. + * + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + add_action( 'admin_init', [ $this, 'validate_addons' ], 15 ); + add_filter( 'pre_set_site_transient_update_plugins', [ $this, 'check_for_updates' ] ); + add_filter( 'plugins_api', [ $this, 'get_plugin_information' ], 10, 3 ); + add_action( 'plugins_loaded', [ $this, 'register_expired_messages' ], 10 ); + } + + /** + * Registers "expired subscription" warnings to the update messages of our addons. + * + * @return void + */ + public function register_expired_messages() { + foreach ( array_keys( $this->get_installed_addons() ) as $plugin_file ) { + add_action( 'in_plugin_update_message-' . $plugin_file, [ $this, 'expired_subscription_warning' ], 10, 2 ); + } + } + + /** + * Gets the subscriptions for current site. + * + * @return stdClass The subscriptions. + */ + public function get_subscriptions() { + return $this->get_site_information()->subscriptions; + } + + /** + * Provides a list of addon filenames. + * + * @return string[] List of addon filenames with their slugs. + */ + public function get_addon_filenames() { + return self::$addons; + } + + /** + * Finds the plugin file. + * + * @param string $plugin_slug The plugin slug to search. + * + * @return bool|string Plugin file when installed, False when plugin isn't installed. + */ + public function get_plugin_file( $plugin_slug ) { + $plugins = $this->get_plugins(); + $plugin_files = array_keys( $plugins ); + $target_plugin_file = array_search( $plugin_slug, $this->get_addon_filenames(), true ); + + if ( ! $target_plugin_file ) { + return false; + } + + foreach ( $plugin_files as $plugin_file ) { + if ( strpos( $plugin_file, $target_plugin_file ) !== false ) { + return $plugin_file; + } + } + + return false; + } + + /** + * Retrieves the subscription for the given slug. + * + * @param string $slug The plugin slug to retrieve. + * + * @return stdClass|false Subscription data when found, false when not found. + */ + public function get_subscription( $slug ) { + foreach ( $this->get_subscriptions() as $subscription ) { + if ( $subscription->product->slug === $slug ) { + return $subscription; + } + } + + return false; + } + + /** + * Retrieves a list of (subscription) slugs by the active addons. + * + * @return array The slugs. + */ + public function get_subscriptions_for_active_addons() { + $active_addons = array_keys( $this->get_active_addons() ); + $subscription_slugs = array_map( [ $this, 'get_slug_by_plugin_file' ], $active_addons ); + $subscriptions = []; + foreach ( $subscription_slugs as $subscription_slug ) { + $subscriptions[ $subscription_slug ] = $this->get_subscription( $subscription_slug ); + } + + return $subscriptions; + } + + /** + * Retrieves a list of versions for each addon. + * + * @return array The addon versions. + */ + public function get_installed_addons_versions() { + $addon_versions = []; + foreach ( $this->get_installed_addons() as $plugin_file => $installed_addon ) { + $addon_versions[ $this->get_slug_by_plugin_file( $plugin_file ) ] = $installed_addon['Version']; + } + + return $addon_versions; + } + + /** + * Retrieves the plugin information from the subscriptions. + * + * @param stdClass|false $data The result object. Default false. + * @param string $action The type of information being requested from the Plugin Installation API. + * @param stdClass $args Plugin API arguments. + * + * @return object Extended plugin data. + */ + public function get_plugin_information( $data, $action, $args ) { + if ( $action !== 'plugin_information' ) { + return $data; + } + + if ( ! isset( $args->slug ) ) { + return $data; + } + + $subscription = $this->get_subscription( $args->slug ); + if ( ! $subscription ) { + return $data; + } + + $data = $this->convert_subscription_to_plugin( $subscription, null, true ); + + if ( $this->has_subscription_expired( $subscription ) ) { + unset( $data->package, $data->download_link ); + } + + return $data; + } + + /** + * Retrieves information from MyYoast about which addons are connected to the current site. + * + * @return stdClass The list of addons activated for this site. + */ + public function get_myyoast_site_information() { + if ( $this->site_information === null ) { + $this->site_information = $this->get_site_information_transient(); + } + + if ( $this->site_information ) { + return $this->site_information; + } + + $this->site_information = $this->request_current_sites(); + if ( $this->site_information ) { + $this->site_information = $this->map_site_information( $this->site_information ); + + $this->set_site_information_transient( $this->site_information ); + + return $this->site_information; + } + + return $this->get_site_information_default(); + } + + /** + * Checks if the subscription for the given slug is valid. + * + * @param string $slug The plugin slug to retrieve. + * + * @return bool True when the subscription is valid. + */ + public function has_valid_subscription( $slug ) { + $subscription = $this->get_subscription( $slug ); + + // An non-existing subscription is never valid. + if ( ! $subscription ) { + return false; + } + + return ! $this->has_subscription_expired( $subscription ); + } + + /** + * Checks if there are addon updates. + * + * @param stdClass|mixed $data The current data for update_plugins. + * + * @return stdClass Extended data for update_plugins. + */ + public function check_for_updates( $data ) { + global $wp_version; + + if ( empty( $data ) ) { + return $data; + } + + // We have to figure out if we're safe to upgrade the add-ons, based on what the latest Yoast Free requirements for the WP version is. + $yoast_free_data = $this->extract_yoast_data( $data ); + + foreach ( $this->get_installed_addons() as $plugin_file => $installed_plugin ) { + $subscription_slug = $this->get_slug_by_plugin_file( $plugin_file ); + $subscription = $this->get_subscription( $subscription_slug ); + + if ( ! $subscription ) { + continue; + } + + $plugin_data = $this->convert_subscription_to_plugin( $subscription, $yoast_free_data, false, $plugin_file ); + + // Let's assume for now that it will get added in the 'no_update' key that we'll return to the WP API. + $is_no_update = true; + + // If the add-on's version is the latest, we have to do no further checks. + if ( version_compare( $installed_plugin['Version'], $plugin_data->new_version, '<' ) ) { + // If we haven't retrieved the Yoast Free requirements for the WP version yet, do nothing. The next run will probably get us that information. + if ( is_null( $plugin_data->requires ) ) { + continue; + } + + if ( version_compare( $plugin_data->requires, $wp_version, '<=' ) ) { + // The add-on has an available update *and* the Yoast Free requirements for the WP version are also met, so go ahead and show the upgrade info to the user. + $is_no_update = false; + $data->response[ $plugin_file ] = $plugin_data; + + if ( $this->has_subscription_expired( $subscription ) ) { + unset( $data->response[ $plugin_file ]->package, $data->response[ $plugin_file ]->download_link ); + } + } + } + + if ( $is_no_update ) { + // Still convert subscription when no updates is available. + $data->no_update[ $plugin_file ] = $plugin_data; + + if ( $this->has_subscription_expired( $subscription ) ) { + unset( $data->no_update[ $plugin_file ]->package, $data->no_update[ $plugin_file ]->download_link ); + } + } + } + + return $data; + } + + /** + * Extracts Yoast SEO Free's data from the wp.org API response. + * + * @param object $data The wp.org API response. + * + * @return object Yoast Free's data from wp.org. + */ + protected function extract_yoast_data( $data ) { + if ( isset( $data->response[ WPSEO_BASENAME ] ) ) { + return $data->response[ WPSEO_BASENAME ]; + } + + if ( isset( $data->no_update[ WPSEO_BASENAME ] ) ) { + return $data->no_update[ WPSEO_BASENAME ]; + } + + return (object) []; + } + + /** + * If the plugin is lacking an active subscription, throw a warning. + * + * @param array $plugin_data The data for the plugin in this row. + * + * @return void + */ + public function expired_subscription_warning( $plugin_data ) { + $subscription = $this->get_subscription( $plugin_data['slug'] ); + if ( $subscription && $this->has_subscription_expired( $subscription ) ) { + $addon_link = ( isset( $this->addon_details[ $plugin_data['slug'] ] ) ) ? $this->addon_details[ $plugin_data['slug'] ]['short_link_renewal'] : $this->addon_details[ self::PREMIUM_SLUG ]['short_link_renewal']; + + $sale_copy = ''; + if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { + $sale_copy = sprintf( + /* translators: %1$s is a
      tag. */ + esc_html__( '%1$s Now with 30%% Black Friday Discount!', 'wordpress-seo' ), + '
      ' + ); + } + echo '

      '; + echo ' ' + . sprintf( + /* translators: %1$s is the plugin name, %2$s and %3$s are a link. */ + esc_html__( '%1$s can\'t be updated because your product subscription is expired. %2$sRenew your product subscription%3$s to get updates again and use all the features of %1$s.', 'wordpress-seo' ), + esc_html( $plugin_data['name'] ), + '
      ', + '' + ) + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output is escaped above. + . $sale_copy + . ''; + } + } + + /** + * Checks if there are any installed addons. + * + * @return bool True when there are installed Yoast addons. + */ + public function has_installed_addons() { + $installed_addons = $this->get_installed_addons(); + + return ! empty( $installed_addons ); + } + + /** + * Checks if the plugin is installed and activated in WordPress. + * + * @param string $slug The class' slug. + * + * @return bool True when installed and activated. + */ + public function is_installed( $slug ) { + $slug_to_class_map = [ + static::PREMIUM_SLUG => 'WPSEO_Premium', + static::NEWS_SLUG => 'WPSEO_News', + static::WOOCOMMERCE_SLUG => 'Yoast_WooCommerce_SEO', + static::VIDEO_SLUG => 'WPSEO_Video_Sitemap', + static::LOCAL_SLUG => 'WPSEO_Local_Core', + ]; + + if ( ! isset( $slug_to_class_map[ $slug ] ) ) { + return false; + } + + return class_exists( $slug_to_class_map[ $slug ] ); + } + + /** + * Validates the addons and show a notice for the ones that are invalid. + * + * @return void + */ + public function validate_addons() { + $notification_center = Yoast_Notification_Center::get(); + + if ( $notification_center === null ) { + return; + } + + foreach ( $this->addon_details as $slug => $addon_info ) { + $notification = $this->create_notification( $addon_info['name'], $addon_info['short_link_activation'] ); + + // Add a notification when the installed plugin isn't activated in My Yoast. + if ( $this->is_installed( $slug ) && ! $this->has_valid_subscription( $slug ) ) { + $notification_center->add_notification( $notification ); + + continue; + } + + $notification_center->remove_notification( $notification ); + } + } + + /** + * Removes the site information transients. + * + * @codeCoverageIgnore + * + * @return void + */ + public function remove_site_information_transients() { + delete_transient( self::SITE_INFORMATION_TRANSIENT ); + delete_transient( self::SITE_INFORMATION_TRANSIENT_QUICK ); + } + + /** + * Creates an instance of Yoast_Notification. + * + * @param string $product_name The product to create the notification for. + * @param string $short_link The short link for the addon notification. + * + * @return Yoast_Notification The created notification. + */ + protected function create_notification( $product_name, $short_link ) { + $notification_options = [ + 'type' => Yoast_Notification::ERROR, + 'id' => 'wpseo-dismiss-' . sanitize_title_with_dashes( $product_name, null, 'save' ), + 'capabilities' => 'wpseo_manage_options', + ]; + + return new Yoast_Notification( + sprintf( + /* translators: %1$s expands to a strong tag, %2$s expands to the product name, %3$s expands to a closing strong tag, %4$s expands to an a tag. %5$s expands to MyYoast, %6$s expands to a closing a tag, %7$s expands to the product name */ + __( '%1$s %2$s isn\'t working as expected %3$s and you are not receiving updates or support! Make sure to %4$s activate your product subscription in %5$s%6$s to unlock all the features of %7$s.', 'wordpress-seo' ), + '', + $product_name, + '', + '', + 'MyYoast', + '', + $product_name + ), + $notification_options + ); + } + + /** + * Checks whether a plugin expiry date has been passed. + * + * @param stdClass $subscription Plugin subscription. + * + * @return bool Has the plugin expired. + */ + protected function has_subscription_expired( $subscription ) { + return ( strtotime( $subscription->expiry_date ) - time() ) < 0; + } + + /** + * Converts a subscription to plugin based format. + * + * @param stdClass $subscription The subscription to convert. + * @param stdClass|null $yoast_free_data The Yoast Free's data. + * @param bool $plugin_info Whether we're in the plugin information modal. + * @param string $plugin_file The plugin filename. + * + * @return stdClass The converted subscription. + */ + protected function convert_subscription_to_plugin( $subscription, $yoast_free_data = null, $plugin_info = false, $plugin_file = '' ) { + $changelog = ''; + if ( isset( $subscription->product->changelog ) ) { + // We need to replace h2's and h3's with h4's because the styling expects that. + $changelog = str_replace( 'product->changelog ) ); + $changelog = str_replace( ' ( $plugin_info ) ? YOAST_SEO_WP_REQUIRED : null, + ]; + + return (object) [ + 'new_version' => ( $subscription->product->version ?? '' ), + 'name' => $subscription->product->name, + 'slug' => $subscription->product->slug, + 'plugin' => $plugin_file, + 'url' => $subscription->product->store_url, + 'last_update' => $subscription->product->last_updated, + 'homepage' => $subscription->product->store_url, + 'download_link' => $subscription->product->download, + 'package' => $subscription->product->download, + 'sections' => [ + 'changelog' => $changelog, + 'support' => $this->get_support_section(), + ], + 'icons' => [ + '2x' => $this->get_icon( $subscription->product->slug ), + ], + 'update_supported' => true, + 'banners' => $this->get_banners( $subscription->product->slug ), + // If we have extracted Yoast Free's data before, use that. If not, resort to the defaults. + 'tested' => YOAST_SEO_WP_TESTED, + 'requires' => ( $yoast_free_data->requires ?? $defaults['requires'] ), + 'requires_php' => YOAST_SEO_PHP_REQUIRED, + ]; + } + + /** + * Returns the plugin's icon URL. + * + * @param string $slug The plugin slug. + * + * @return string The icon URL for this plugin. + */ + protected function get_icon( $slug ) { + switch ( $slug ) { + case self::LOCAL_SLUG: + return 'https://yoa.st/local-seo-icon'; + case self::NEWS_SLUG: + return 'https://yoa.st/news-seo-icon'; + case self::PREMIUM_SLUG: + return 'https://yoa.st/yoast-seo-icon'; + case self::VIDEO_SLUG: + return 'https://yoa.st/video-seo-icon'; + case self::WOOCOMMERCE_SLUG: + return 'https://yoa.st/woo-seo-icon'; + } + } + + /** + * Return an array of plugin banner URLs. + * + * @param string $slug The plugin slug. + * + * @return string[] + */ + protected function get_banners( $slug ) { + switch ( $slug ) { + case self::LOCAL_SLUG: + return [ + 'high' => 'https://yoa.st/yoast-seo-banner-local', + 'low' => 'https://yoa.st/yoast-seo-banner-low-local', + ]; + case self::NEWS_SLUG: + return [ + 'high' => 'https://yoa.st/yoast-seo-banner-news', + 'low' => 'https://yoa.st/yoast-seo-banner-low-news', + ]; + case self::PREMIUM_SLUG: + return [ + 'high' => 'https://yoa.st/yoast-seo-banner-premium', + 'low' => 'https://yoa.st/yoast-seo-banner-low-premium', + ]; + case self::VIDEO_SLUG: + return [ + 'high' => 'https://yoa.st/yoast-seo-banner-video', + 'low' => 'https://yoa.st/yoast-seo-banner-low-video', + ]; + case self::WOOCOMMERCE_SLUG: + return [ + 'high' => 'https://yoa.st/yoast-seo-banner-woo', + 'low' => 'https://yoa.st/yoast-seo-banner-low-woo', + ]; + } + } + + /** + * Checks if the given plugin_file belongs to a Yoast addon. + * + * @param string $plugin_file Path to the plugin. + * + * @return bool True when plugin file is for a Yoast addon. + */ + protected function is_yoast_addon( $plugin_file ) { + return $this->get_slug_by_plugin_file( $plugin_file ) !== ''; + } + + /** + * Retrieves the addon slug by given plugin file path. + * + * @param string $plugin_file The file path to the plugin. + * + * @return string The slug when found or empty string when not. + */ + protected function get_slug_by_plugin_file( $plugin_file ) { + $addons = self::$addons; + + // Yoast SEO Free isn't an addon, but we needed it in Premium to fetch translations. + if ( YoastSEO()->helpers->product->is_premium() ) { + $addons['wp-seo.php'] = self::FREE_SLUG; + } + + foreach ( $addons as $addon => $addon_slug ) { + if ( strpos( $plugin_file, $addon ) !== false ) { + return $addon_slug; + } + } + + return ''; + } + + /** + * Retrieves the installed Yoast addons. + * + * @return array The installed plugins. + */ + protected function get_installed_addons() { + return array_filter( $this->get_plugins(), [ $this, 'is_yoast_addon' ], ARRAY_FILTER_USE_KEY ); + } + + /** + * Retrieves a list of active addons. + * + * @return array The active addons. + */ + protected function get_active_addons() { + return array_filter( $this->get_installed_addons(), [ $this, 'is_plugin_active' ], ARRAY_FILTER_USE_KEY ); + } + + /** + * Retrieves the current sites from the API. + * + * @codeCoverageIgnore + * + * @return bool|stdClass Object when request is successful. False if not. + */ + protected function request_current_sites() { + $api_request = new WPSEO_MyYoast_Api_Request( 'sites/current' ); + if ( $api_request->fire() ) { + return $api_request->get_response(); + } + + return $this->get_site_information_default(); + } + + /** + * Retrieves the transient value with the site information. + * + * @codeCoverageIgnore + * + * @return stdClass|false The transient value. + */ + protected function get_site_information_transient() { + global $pagenow; + + // Force re-check on license & dashboard pages. + $current_page = null; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, We are only strictly comparing and thus no need to sanitize. + $current_page = wp_unslash( $_GET['page'] ); + } + + // Check whether the licenses are valid or whether we need to show notifications. + $quick = ( $current_page === 'wpseo_licenses' || $current_page === 'wpseo_dashboard' ); + + // Also do a fresh request on Plugins & Core Update pages. + $quick = $quick || $pagenow === 'plugins.php'; + $quick = $quick || $pagenow === 'update-core.php'; + + if ( $quick ) { + return get_transient( self::SITE_INFORMATION_TRANSIENT_QUICK ); + } + + return get_transient( self::SITE_INFORMATION_TRANSIENT ); + } + + /** + * Sets the site information transient. + * + * @codeCoverageIgnore + * + * @param stdClass $site_information The site information to save. + * + * @return void + */ + protected function set_site_information_transient( $site_information ) { + set_transient( self::SITE_INFORMATION_TRANSIENT, $site_information, DAY_IN_SECONDS ); + set_transient( self::SITE_INFORMATION_TRANSIENT_QUICK, $site_information, 60 ); + } + + /** + * Retrieves all installed WordPress plugins. + * + * @codeCoverageIgnore + * + * @return array The plugins. + */ + protected function get_plugins() { + if ( ! function_exists( 'get_plugins' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + + return get_plugins(); + } + + /** + * Checks if the given plugin file belongs to an active plugin. + * + * @codeCoverageIgnore + * + * @param string $plugin_file The file path to the plugin. + * + * @return bool True when plugin is active. + */ + protected function is_plugin_active( $plugin_file ) { + return is_plugin_active( $plugin_file ); + } + + /** + * Returns an object with no subscriptions. + * + * @codeCoverageIgnore + * + * @return stdClass Site information. + */ + protected function get_site_information_default() { + return (object) [ + 'url' => WPSEO_Utils::get_home_url(), + 'subscriptions' => [], + ]; + } + + /** + * Maps the plugin API response. + * + * @param object $site_information Site information as received from the API. + * + * @return stdClass Mapped site information. + */ + protected function map_site_information( $site_information ) { + return (object) [ + 'url' => $site_information->url, + 'subscriptions' => array_map( [ $this, 'map_subscription' ], $site_information->subscriptions ), + ]; + } + + /** + * Maps a plugin subscription. + * + * @param object $subscription Subscription information as received from the API. + * + * @return stdClass Mapped subscription. + */ + protected function map_subscription( $subscription ) { + // phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase -- Not our properties. + return (object) [ + 'renewal_url' => $subscription->renewalUrl, + 'expiry_date' => $subscription->expiryDate, + 'product' => (object) [ + 'version' => $subscription->product->version, + 'name' => $subscription->product->name, + 'slug' => $subscription->product->slug, + 'last_updated' => $subscription->product->lastUpdated, + 'store_url' => $subscription->product->storeUrl, + // Ternary operator is necessary because download can be undefined. + 'download' => ( $subscription->product->download ?? null ), + 'changelog' => $subscription->product->changelog, + ], + ]; + // phpcs:enable + } + + /** + * Retrieves the site information. + * + * @return stdClass The site information. + */ + private function get_site_information() { + if ( ! $this->has_installed_addons() ) { + return $this->get_site_information_default(); + } + + return $this->get_myyoast_site_information(); + } + + /** + * Retrieves the contents for the support section. + * + * @return string The support section content. + */ + protected function get_support_section() { + return '

      ' . __( 'Need support?', 'wordpress-seo' ) . '

      ' + . '

      ' + /* translators: 1: expands to that refers to the help page, 2: closing tag. */ + . sprintf( __( 'You can probably find an answer to your question in our %1$shelp center%2$s.', 'wordpress-seo' ), '', '' ) + . ' ' + /* translators: %s expands to a mailto support link. */ + . sprintf( __( 'If you still need support and have an active subscription for this product, please email %s.', 'wordpress-seo' ), 'support@yoast.com' ) + . '

      '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-my-yoast-api-request.php b/wp/wp-content/plugins/wordpress-seo/inc/class-my-yoast-api-request.php new file mode 100644 index 00000000..48d365c7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-my-yoast-api-request.php @@ -0,0 +1,207 @@ + 'GET', + 'timeout' => 5, + 'headers' => [ + 'Accept-Encoding' => '*', + 'Expect' => '', + ], + ]; + + /** + * Contains the fetched response. + * + * @var stdClass + */ + protected $response; + + /** + * Contains the error message when request went wrong. + * + * @var string + */ + protected $error_message = ''; + + /** + * Constructor. + * + * @codeCoverageIgnore + * + * @param string $url The request url. + * @param array $args The request arguments. + */ + public function __construct( $url, array $args = [] ) { + $this->url = 'https://my.yoast.com/api/' . $url; + $this->args = wp_parse_args( $args, $this->args ); + } + + /** + * Fires the request. + * + * @return bool True when request is successful. + */ + public function fire() { + try { + $response = $this->do_request( $this->url, $this->args ); + $this->response = $this->decode_response( $response ); + + return true; + } + catch ( WPSEO_MyYoast_Bad_Request_Exception $bad_request_exception ) { + $this->error_message = $bad_request_exception->getMessage(); + + return false; + } + } + + /** + * Retrieves the error message. + * + * @return string The set error message. + */ + public function get_error_message() { + return $this->error_message; + } + + /** + * Retrieves the response. + * + * @return stdClass The response object. + */ + public function get_response() { + return $this->response; + } + + /** + * Performs the request using WordPress internals. + * + * @codeCoverageIgnore + * + * @param string $url The request URL. + * @param array $request_arguments The request arguments. + * + * @return string The retrieved body. + * @throws WPSEO_MyYoast_Bad_Request_Exception When request is invalid. + */ + protected function do_request( $url, $request_arguments ) { + $request_arguments = $this->enrich_request_arguments( $request_arguments ); + $response = wp_remote_request( $url, $request_arguments ); + + if ( is_wp_error( $response ) ) { + throw new WPSEO_MyYoast_Bad_Request_Exception( $response->get_error_message() ); + } + + $response_code = wp_remote_retrieve_response_code( $response ); + $response_message = wp_remote_retrieve_response_message( $response ); + + // Do nothing, response code is okay. + if ( $response_code === 200 || strpos( $response_code, '200' ) !== false ) { + return wp_remote_retrieve_body( $response ); + } + + throw new WPSEO_MyYoast_Bad_Request_Exception( esc_html( $response_message ), (int) $response_code ); + } + + /** + * Decodes the JSON encoded response. + * + * @param string $response The response to decode. + * + * @return stdClass The json decoded response. + * @throws WPSEO_MyYoast_Invalid_JSON_Exception When decoded string is not a JSON object. + */ + protected function decode_response( $response ) { + $response = json_decode( $response ); + + if ( ! is_object( $response ) ) { + throw new WPSEO_MyYoast_Invalid_JSON_Exception( + esc_html__( 'No JSON object was returned.', 'wordpress-seo' ) + ); + } + + return $response; + } + + /** + * Checks if MyYoast tokens are allowed and adds the token to the request body. + * + * When tokens are disallowed it will add the url to the request body. + * + * @param array $request_arguments The arguments to enrich. + * + * @return array The enriched arguments. + */ + protected function enrich_request_arguments( array $request_arguments ) { + $request_arguments = wp_parse_args( $request_arguments, [ 'headers' => [] ] ); + $addon_version_headers = $this->get_installed_addon_versions(); + + foreach ( $addon_version_headers as $addon => $version ) { + $request_arguments['headers'][ $addon . '-version' ] = $version; + } + + $request_body = $this->get_request_body(); + if ( $request_body !== [] ) { + $request_arguments['body'] = $request_body; + } + + return $request_arguments; + } + + /** + * Retrieves the request body based on URL or access token support. + * + * @codeCoverageIgnore + * + * @return array The request body. + */ + public function get_request_body() { + return [ 'url' => WPSEO_Utils::get_home_url() ]; + } + + /** + * Wraps the get current user id function. + * + * @codeCoverageIgnore + * + * @return int The user id. + */ + protected function get_current_user_id() { + return get_current_user_id(); + } + + /** + * Retrieves the installed addons as http headers. + * + * @codeCoverageIgnore + * + * @return array The installed addon versions. + */ + protected function get_installed_addon_versions() { + $addon_manager = new WPSEO_Addon_Manager(); + + return $addon_manager->get_installed_addons_versions(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-post-type.php b/wp/wp-content/plugins/wordpress-seo/inc/class-post-type.php new file mode 100644 index 00000000..54085d58 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-post-type.php @@ -0,0 +1,131 @@ +helpers->post_type->get_accessible_post_types(); + } + + /** + * Returns whether the passed post type is considered accessible. + * + * @param string $post_type The post type to check. + * + * @return bool Whether or not the post type is considered accessible. + */ + public static function is_post_type_accessible( $post_type ) { + return in_array( $post_type, self::get_accessible_post_types(), true ); + } + + /** + * Checks if the request post type is public and indexable. + * + * @param string $post_type_name The name of the post type to lookup. + * + * @return bool True when post type is set to index. + */ + public static function is_post_type_indexable( $post_type_name ) { + return YoastSEO()->helpers->post_type->is_indexable( $post_type_name ); + } + + /** + * Filters the attachment post type from an array with post_types. + * + * @param array $post_types The array to filter the attachment post type from. + * + * @return array The filtered array. + */ + public static function filter_attachment_post_type( array $post_types ) { + unset( $post_types['attachment'] ); + + return $post_types; + } + + /** + * Checks if the post type is enabled in the REST API. + * + * @param string $post_type The post type to check. + * + * @return bool Whether or not the post type is available in the REST API. + */ + public static function is_rest_enabled( $post_type ) { + $post_type_object = get_post_type_object( $post_type ); + + if ( $post_type_object === null ) { + return false; + } + + return $post_type_object->show_in_rest === true; + } + + /** + * Checks if the current post type has an archive. + * + * Context: The has_archive value can be a string or a boolean. In most case it will be a boolean, + * but it can be defined as a string. When it is a string the archive_slug will be overwritten to + * define another endpoint. + * + * @param WP_Post_Type $post_type The post type object. + * + * @return bool True whether the post type has an archive. + */ + public static function has_archive( $post_type ) { + return YoastSEO()->helpers->post_type->has_archive( $post_type ); + } + + /** + * Checks if the Yoast Metabox has been enabled for the post type. + * + * @param string $post_type The post type name. + * + * @return bool True whether the metabox is enabled. + */ + public static function has_metabox_enabled( $post_type ) { + return WPSEO_Options::get( 'display-metabox-pt-' . $post_type, false ); + } + + /* ********************* DEPRECATED METHODS ********************* */ + + /** + * Removes the notification related to the post types which have been made public. + * + * @deprecated 20.10 + * @codeCoverageIgnore + * + * @return void + */ + public static function remove_post_types_made_public_notification() { + _deprecated_function( __METHOD__, 'Yoast SEO 20.10', 'Content_Type_Visibility_Dismiss_Notifications::dismiss_notifications' ); + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification_by_id( 'post-types-made-public' ); + } + + /** + * Removes the notification related to the taxonomies which have been made public. + * + * @deprecated 20.10 + * @codeCoverageIgnore + * + * @return void + */ + public static function remove_taxonomies_made_public_notification() { + _deprecated_function( __METHOD__, 'Yoast SEO 20.10', 'Content_Type_Visibility_Dismiss_Notifications::dismiss_notifications' ); + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification_by_id( 'taxonomies-made-public' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-rewrite.php b/wp/wp-content/plugins/wordpress-seo/inc/class-rewrite.php new file mode 100644 index 00000000..82ed1206 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-rewrite.php @@ -0,0 +1,231 @@ + $query_vars Main query vars to filter. + * + * @return array The query vars. + */ + public function query_vars( $query_vars ) { + if ( WPSEO_Options::get( 'stripcategorybase' ) === true ) { + $query_vars[] = 'wpseo_category_redirect'; + } + + return $query_vars; + } + + /** + * Checks whether the redirect needs to be created. + * + * @param array $query_vars Query vars to check for existence of redirect var. + * + * @return array The query vars. + */ + public function request( $query_vars ) { + if ( ! isset( $query_vars['wpseo_category_redirect'] ) ) { + return $query_vars; + } + + $this->redirect( $query_vars['wpseo_category_redirect'] ); + return []; + } + + /** + * This function taken and only slightly adapted from WP No Category Base plugin by Saurabh Gupta. + * + * @return array The category rewrite rules. + */ + public function category_rewrite_rules() { + global $wp_rewrite; + + $category_rewrite = []; + + $taxonomy = get_taxonomy( 'category' ); + $permalink_structure = get_option( 'permalink_structure' ); + + $blog_prefix = ''; + if ( strpos( $permalink_structure, '/blog/' ) === 0 ) { + if ( ( is_multisite() && ! is_subdomain_install() ) || is_main_site() || is_main_network() ) { + $blog_prefix = 'blog/'; + } + } + + $categories = get_categories( [ 'hide_empty' => false ] ); + if ( is_array( $categories ) && $categories !== [] ) { + foreach ( $categories as $category ) { + $category_nicename = $category->slug; + if ( $category->parent === $category->cat_ID ) { + // Recursive recursion. + $category->parent = 0; + } + elseif ( $taxonomy->rewrite['hierarchical'] !== false && $category->parent !== 0 ) { + $parents = get_category_parents( $category->parent, false, '/', true ); + if ( ! is_wp_error( $parents ) ) { + $category_nicename = $parents . $category_nicename; + } + unset( $parents ); + } + + $category_rewrite = $this->add_category_rewrites( $category_rewrite, $category_nicename, $blog_prefix, $wp_rewrite->pagination_base ); + + // Adds rules for the uppercase encoded URIs. + $category_nicename_filtered = $this->convert_encoded_to_upper( $category_nicename ); + + if ( $category_nicename_filtered !== $category_nicename ) { + $category_rewrite = $this->add_category_rewrites( $category_rewrite, $category_nicename_filtered, $blog_prefix, $wp_rewrite->pagination_base ); + } + } + unset( $categories, $category, $category_nicename, $category_nicename_filtered ); + } + + // Redirect support from Old Category Base. + $old_base = $wp_rewrite->get_category_permastruct(); + $old_base = str_replace( '%category%', '(.+)', $old_base ); + $old_base = trim( $old_base, '/' ); + $category_rewrite[ $old_base . '$' ] = 'index.php?wpseo_category_redirect=$matches[1]'; + + return $category_rewrite; + } + + /** + * Adds required category rewrites rules. + * + * @param array $rewrites The current set of rules. + * @param string $category_name Category nicename. + * @param string $blog_prefix Multisite blog prefix. + * @param string $pagination_base WP_Query pagination base. + * + * @return array The added set of rules. + */ + protected function add_category_rewrites( $rewrites, $category_name, $blog_prefix, $pagination_base ) { + $rewrite_name = $blog_prefix . '(' . $category_name . ')'; + + global $wp_rewrite; + $feed_regex = '(' . implode( '|', $wp_rewrite->feeds ) . ')'; + + $rewrites[ $rewrite_name . '/(?:feed/)?' . $feed_regex . '/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; + $rewrites[ $rewrite_name . '/' . $pagination_base . '/?([0-9]{1,})/?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[2]'; + $rewrites[ $rewrite_name . '/?$' ] = 'index.php?category_name=$matches[1]'; + + return $rewrites; + } + + /** + * Walks through category nicename and convert encoded parts + * into uppercase using $this->encode_to_upper(). + * + * @param string $name The encoded category URI string. + * + * @return string The convered URI string. + */ + protected function convert_encoded_to_upper( $name ) { + // Checks if name has any encoding in it. + if ( strpos( $name, '%' ) === false ) { + return $name; + } + + $names = explode( '/', $name ); + $names = array_map( [ $this, 'encode_to_upper' ], $names ); + + return implode( '/', $names ); + } + + /** + * Converts the encoded URI string to uppercase. + * + * @param string $encoded The encoded string. + * + * @return string The uppercased string. + */ + public function encode_to_upper( $encoded ) { + if ( strpos( $encoded, '%' ) === false ) { + return $encoded; + } + + return strtoupper( $encoded ); + } + + /** + * Redirect the "old" category URL to the new one. + * + * @codeCoverageIgnore + * + * @param string $category_redirect The category page to redirect to. + * @return void + */ + protected function redirect( $category_redirect ) { + $catlink = trailingslashit( get_option( 'home' ) ) . user_trailingslashit( $category_redirect, 'category' ); + + wp_safe_redirect( $catlink, 301, 'Yoast SEO' ); + exit; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-upgrade-history.php b/wp/wp-content/plugins/wordpress-seo/inc/class-upgrade-history.php new file mode 100644 index 00000000..a72db83d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-upgrade-history.php @@ -0,0 +1,136 @@ +option_name = $option_name; + } + } + + /** + * Retrieves the content of the history items currently stored. + * + * @return array> The contents of the history option. + */ + public function get() { + $data = get_option( $this->get_option_name(), [] ); + if ( ! is_array( $data ) ) { + return []; + } + + return $data; + } + + /** + * Adds a new history entry in the storage. + * + * @param string $old_version The version we are upgrading from. + * @param string $new_version The version we are upgrading to. + * @param array $option_names The options that need to be stored. + * + * @return void + */ + public function add( $old_version, $new_version, array $option_names ) { + $option_data = []; + if ( $option_names !== [] ) { + $option_data = $this->get_options_data( $option_names ); + } + + // Retrieve current history. + $data = $this->get(); + + // Add new entry. + $data[ time() ] = [ + 'options' => $option_data, + 'old_version' => $old_version, + 'new_version' => $new_version, + ]; + + // Store the data. + $this->set( $data ); + } + + /** + * Retrieves the data for the specified option names from the database. + * + * @param array $option_names The option names to retrieve. + * + * @return array> The retrieved data. + */ + protected function get_options_data( array $option_names ) { + $wpdb = $this->get_wpdb(); + + $results = $wpdb->get_results( + $wpdb->prepare( + ' + SELECT %i, %i FROM ' . $wpdb->options . ' WHERE + %i IN ( ' . implode( ',', array_fill( 0, count( $option_names ), '%s' ) ) . ' ) + ', + array_merge( [ 'option_value', 'option_name', 'option_name' ], $option_names ) + ), + ARRAY_A + ); + + $data = []; + foreach ( $results as $result ) { + $data[ $result['option_name'] ] = maybe_unserialize( $result['option_value'] ); + } + + return $data; + } + + /** + * Stores the new history state. + * + * @param array> $data The data to store. + * + * @return void + */ + protected function set( array $data ) { + // This should not be autoloaded! + update_option( $this->get_option_name(), $data, false ); + } + + /** + * Retrieves the WPDB object. + * + * @return wpdb The WPDB object to use. + */ + protected function get_wpdb() { + global $wpdb; + + return $wpdb; + } + + /** + * Retrieves the option name to store the history in. + * + * @return string The option name to store the history in. + */ + protected function get_option_name() { + return $this->option_name; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-upgrade.php b/wp/wp-content/plugins/wordpress-seo/inc/class-upgrade.php new file mode 100644 index 00000000..25936b54 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-upgrade.php @@ -0,0 +1,1831 @@ +taxonomy_helper = YoastSEO()->helpers->taxonomy; + + $version = WPSEO_Options::get( 'version' ); + + WPSEO_Options::maybe_set_multisite_defaults( false ); + + $routines = [ + '1.5.0' => 'upgrade_15', + '2.0' => 'upgrade_20', + '2.1' => 'upgrade_21', + '2.2' => 'upgrade_22', + '2.3' => 'upgrade_23', + '3.0' => 'upgrade_30', + '3.3' => 'upgrade_33', + '3.6' => 'upgrade_36', + '4.0' => 'upgrade_40', + '4.4' => 'upgrade_44', + '4.7' => 'upgrade_47', + '4.9' => 'upgrade_49', + '5.0' => 'upgrade_50', + '5.5' => 'upgrade_55', + '6.3' => 'upgrade_63', + '7.0-RC0' => 'upgrade_70', + '7.1-RC0' => 'upgrade_71', + '7.3-RC0' => 'upgrade_73', + '7.4-RC0' => 'upgrade_74', + '7.5.3' => 'upgrade_753', + '7.7-RC0' => 'upgrade_77', + '7.7.2-RC0' => 'upgrade_772', + '9.0-RC0' => 'upgrade_90', + '10.0-RC0' => 'upgrade_100', + '11.1-RC0' => 'upgrade_111', + // Reset notifications because we removed the AMP Glue plugin notification. + '12.1-RC0' => 'clean_all_notifications', + '12.3-RC0' => 'upgrade_123', + '12.4-RC0' => 'upgrade_124', + '12.8-RC0' => 'upgrade_128', + '13.2-RC0' => 'upgrade_132', + '14.0.3-RC0' => 'upgrade_1403', + '14.1-RC0' => 'upgrade_141', + '14.2-RC0' => 'upgrade_142', + '14.5-RC0' => 'upgrade_145', + '14.9-RC0' => 'upgrade_149', + '15.1-RC0' => 'upgrade_151', + '15.3-RC0' => 'upgrade_153', + '15.5-RC0' => 'upgrade_155', + '15.7-RC0' => 'upgrade_157', + '15.9.1-RC0' => 'upgrade_1591', + '16.2-RC0' => 'upgrade_162', + '16.5-RC0' => 'upgrade_165', + '17.2-RC0' => 'upgrade_172', + '17.7.1-RC0' => 'upgrade_1771', + '17.9-RC0' => 'upgrade_179', + '18.3-RC3' => 'upgrade_183', + '18.6-RC0' => 'upgrade_186', + '18.9-RC0' => 'upgrade_189', + '19.1-RC0' => 'upgrade_191', + '19.3-RC0' => 'upgrade_193', + '19.6-RC0' => 'upgrade_196', + '19.11-RC0' => 'upgrade_1911', + '20.2-RC0' => 'upgrade_202', + '20.5-RC0' => 'upgrade_205', + '20.7-RC0' => 'upgrade_207', + '20.8-RC0' => 'upgrade_208', + '22.6-RC0' => 'upgrade_226', + ]; + + array_walk( $routines, [ $this, 'run_upgrade_routine' ], $version ); + if ( version_compare( $version, '12.5-RC0', '<' ) ) { + /* + * We have to run this by hook, because otherwise: + * - the theme support check isn't available. + * - the notification center notifications are not filled yet. + */ + add_action( 'init', [ $this, 'upgrade_125' ] ); + } + + // Since 3.7. + $upsell_notice = new WPSEO_Product_Upsell_Notice(); + $upsell_notice->set_upgrade_notice(); + + /** + * Filter: 'wpseo_run_upgrade' - Runs the upgrade hook which are dependent on Yoast SEO. + * + * @param string $version The current version of Yoast SEO + */ + do_action( 'wpseo_run_upgrade', $version ); + + $this->finish_up( $version ); + } + + /** + * Runs the upgrade routine. + * + * @param string $routine The method to call. + * @param string $version The new version. + * @param string $current_version The current set version. + * + * @return void + */ + protected function run_upgrade_routine( $routine, $version, $current_version ) { + if ( version_compare( $current_version, $version, '<' ) ) { + $this->$routine( $current_version ); + } + } + + /** + * Adds a new upgrade history entry. + * + * @param string $current_version The old version from which we are upgrading. + * @param string $new_version The version we are upgrading to. + * + * @return void + */ + protected function add_upgrade_history( $current_version, $new_version ) { + $upgrade_history = new WPSEO_Upgrade_History(); + $upgrade_history->add( $current_version, $new_version, array_keys( WPSEO_Options::$options ) ); + } + + /** + * Runs the needed cleanup after an update, setting the DB version to latest version, flushing caches etc. + * + * @param string|null $previous_version The previous version. + * + * @return void + */ + protected function finish_up( $previous_version = null ) { + if ( $previous_version ) { + WPSEO_Options::set( 'previous_version', $previous_version ); + } + WPSEO_Options::set( 'version', WPSEO_VERSION ); + + // Just flush rewrites, always, to at least make them work after an upgrade. + add_action( 'shutdown', 'flush_rewrite_rules' ); + + // Flush the sitemap cache. + WPSEO_Sitemaps_Cache::clear(); + + // Make sure all our options always exist - issue #1245. + WPSEO_Options::ensure_options_exist(); + } + + /** + * Run the Yoast SEO 1.5 upgrade routine. + * + * @param string $version Current plugin version. + * + * @return void + */ + private function upgrade_15( $version ) { + // Clean up options and meta. + WPSEO_Options::clean_up( null, $version ); + WPSEO_Meta::clean_up(); + } + + /** + * Moves options that moved position in WPSEO 2.0. + * + * @return void + */ + private function upgrade_20() { + /** + * Clean up stray wpseo_ms options from the options table, option should only exist in the sitemeta table. + * This could have been caused in many version of Yoast SEO, so deleting it for everything below 2.0. + */ + delete_option( 'wpseo_ms' ); + + $wpseo = $this->get_option_from_database( 'wpseo' ); + $this->save_option_setting( $wpseo, 'pinterestverify' ); + + // Re-save option to trigger sanitization. + $this->cleanup_option_data( 'wpseo' ); + } + + /** + * Detects if taxonomy terms were split and updates the corresponding taxonomy meta's accordingly. + * + * @return void + */ + private function upgrade_21() { + $taxonomies = get_option( 'wpseo_taxonomy_meta', [] ); + + if ( ! empty( $taxonomies ) ) { + foreach ( $taxonomies as $taxonomy => $tax_metas ) { + foreach ( $tax_metas as $term_id => $tax_meta ) { + if ( function_exists( 'wp_get_split_term' ) ) { + $new_term_id = wp_get_split_term( $term_id, $taxonomy ); + if ( $new_term_id !== false ) { + $taxonomies[ $taxonomy ][ $new_term_id ] = $taxonomies[ $taxonomy ][ $term_id ]; + unset( $taxonomies[ $taxonomy ][ $term_id ] ); + } + } + } + } + + update_option( 'wpseo_taxonomy_meta', $taxonomies ); + } + } + + /** + * Performs upgrade functions to Yoast SEO 2.2. + * + * @return void + */ + private function upgrade_22() { + // Unschedule our tracking. + wp_clear_scheduled_hook( 'yoast_tracking' ); + + $this->cleanup_option_data( 'wpseo' ); + } + + /** + * Schedules upgrade function to Yoast SEO 2.3. + * + * @return void + */ + private function upgrade_23() { + add_action( 'wp', [ $this, 'upgrade_23_query' ], 90 ); + add_action( 'admin_head', [ $this, 'upgrade_23_query' ], 90 ); + } + + /** + * Performs upgrade query to Yoast SEO 2.3. + * + * @return void + */ + public function upgrade_23_query() { + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Reason: executed only during the upgrade routine. + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value -- Reason: executed only during the upgrade routine. + $wp_query = new WP_Query( 'post_type=any&meta_key=_yoast_wpseo_sitemap-include&meta_value=never&order=ASC' ); + + if ( ! empty( $wp_query->posts ) ) { + $options = get_option( 'wpseo_xml' ); + + $excluded_posts = []; + if ( $options['excluded-posts'] !== '' ) { + $excluded_posts = explode( ',', $options['excluded-posts'] ); + } + + foreach ( $wp_query->posts as $post ) { + if ( ! in_array( (string) $post->ID, $excluded_posts, true ) ) { + $excluded_posts[] = $post->ID; + } + } + + // Updates the meta value. + $options['excluded-posts'] = implode( ',', $excluded_posts ); + + // Update the option. + update_option( 'wpseo_xml', $options ); + } + + // Remove the meta fields. + delete_post_meta_by_key( '_yoast_wpseo_sitemap-include' ); + } + + /** + * Performs upgrade functions to Yoast SEO 3.0. + * + * @return void + */ + private function upgrade_30() { + // Remove the meta fields for sitemap prio. + delete_post_meta_by_key( '_yoast_wpseo_sitemap-prio' ); + } + + /** + * Performs upgrade functions to Yoast SEO 3.3. + * + * @return void + */ + private function upgrade_33() { + // Notification dismissals have been moved to User Meta instead of global option. + delete_option( Yoast_Notification_Center::STORAGE_KEY ); + } + + /** + * Performs upgrade functions to Yoast SEO 3.6. + * + * @return void + */ + protected function upgrade_36() { + global $wpdb; + + // Between 3.2 and 3.4 the sitemap options were saved with autoloading enabled. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + 'DELETE FROM %i WHERE %i LIKE %s AND autoload IN ("on", "yes")', + [ $wpdb->options, 'option_name', 'wpseo_sitemap_%' ] + ) + ); + } + + /** + * Removes the about notice when its still in the database. + * + * @return void + */ + private function upgrade_40() { + $center = Yoast_Notification_Center::get(); + $center->remove_notification_by_id( 'wpseo-dismiss-about' ); + } + + /** + * Moves the content-analysis-active and keyword-analysis-acive options from wpseo-titles to wpseo. + * + * @return void + */ + private function upgrade_44() { + $wpseo_titles = $this->get_option_from_database( 'wpseo_titles' ); + + $this->save_option_setting( $wpseo_titles, 'content-analysis-active', 'content_analysis_active' ); + $this->save_option_setting( $wpseo_titles, 'keyword-analysis-active', 'keyword_analysis_active' ); + + // Remove irrelevant content from the option. + $this->cleanup_option_data( 'wpseo_titles' ); + } + + /** + * Renames the meta name for the cornerstone content. It was a public meta field and it has to be private. + * + * @return void + */ + private function upgrade_47() { + global $wpdb; + + // The meta key has to be private, so prefix it. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + 'UPDATE ' . $wpdb->postmeta . ' SET meta_key = %s WHERE meta_key = "yst_is_cornerstone"', + WPSEO_Cornerstone_Filter::META_NAME + ) + ); + } + + /** + * Removes the 'wpseo-dismiss-about' notice for every user that still has it. + * + * @return void + */ + protected function upgrade_49() { + global $wpdb; + + /* + * Using a filter to remove the notification for the current logged in user. The notification center is + * initializing the notifications before the upgrade routine has been executedd and is saving the stored + * notifications on shutdown. This causes the returning notification. By adding this filter the shutdown + * routine on the notification center will remove the notification. + */ + add_filter( 'yoast_notifications_before_storage', [ $this, 'remove_about_notice' ] ); + + $meta_key = $wpdb->get_blog_prefix() . Yoast_Notification_Center::STORAGE_KEY; + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $usermetas = $wpdb->get_results( + $wpdb->prepare( + ' + SELECT %i, %i + FROM %i + WHERE %i = %s AND %i LIKE %s + ', + [ 'user_id', 'meta_value', $wpdb->usermeta, 'meta_key', $meta_key, 'meta_value', '%wpseo-dismiss-about%' ] + ), + ARRAY_A + ); + + if ( empty( $usermetas ) ) { + return; + } + + foreach ( $usermetas as $usermeta ) { + $notifications = maybe_unserialize( $usermeta['meta_value'] ); + + foreach ( $notifications as $notification_key => $notification ) { + if ( ! empty( $notification['options']['id'] ) && $notification['options']['id'] === 'wpseo-dismiss-about' ) { + unset( $notifications[ $notification_key ] ); + } + } + + update_user_option( $usermeta['user_id'], Yoast_Notification_Center::STORAGE_KEY, array_values( $notifications ) ); + } + } + + /** + * Removes the wpseo-dismiss-about notice from a list of notifications. + * + * @param Yoast_Notification[] $notifications The notifications to filter. + * + * @return Yoast_Notification[] The filtered list of notifications. Excluding the wpseo-dismiss-about notification. + */ + public function remove_about_notice( $notifications ) { + foreach ( $notifications as $notification_key => $notification ) { + if ( $notification->get_id() === 'wpseo-dismiss-about' ) { + unset( $notifications[ $notification_key ] ); + } + } + + return $notifications; + } + + /** + * Adds the yoast_seo_links table to the database. + * + * @return void + */ + protected function upgrade_50() { + global $wpdb; + + // Deletes the post meta value, which might created in the RC. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i + WHERE %i = '_yst_content_links_processed'", + [ $wpdb->postmeta, 'meta_key' ] + ) + ); + } + + /** + * Register new capabilities and roles. + * + * @return void + */ + private function upgrade_55() { + // Register roles. + do_action( 'wpseo_register_roles' ); + WPSEO_Role_Manager_Factory::get()->add(); + + // Register capabilities. + do_action( 'wpseo_register_capabilities' ); + WPSEO_Capability_Manager_Factory::get()->add(); + } + + /** + * Removes some no longer used options for noindexing subpages and for meta keywords and its associated templates. + * + * @return void + */ + private function upgrade_63() { + $this->cleanup_option_data( 'wpseo_titles' ); + } + + /** + * Perform the 7.0 upgrade, moves settings around, deletes several options. + * + * @return void + */ + private function upgrade_70() { + + $wpseo_permalinks = $this->get_option_from_database( 'wpseo_permalinks' ); + $wpseo_xml = $this->get_option_from_database( 'wpseo_xml' ); + $wpseo_rss = $this->get_option_from_database( 'wpseo_rss' ); + $wpseo = $this->get_option_from_database( 'wpseo' ); + $wpseo_internallinks = $this->get_option_from_database( 'wpseo_internallinks' ); + + // Move some permalink settings, then delete the option. + $this->save_option_setting( $wpseo_permalinks, 'redirectattachment', 'disable-attachment' ); + $this->save_option_setting( $wpseo_permalinks, 'stripcategorybase' ); + + // Move one XML sitemap setting, then delete the option. + $this->save_option_setting( $wpseo_xml, 'enablexmlsitemap', 'enable_xml_sitemap' ); + + // Move the RSS settings to the search appearance settings, then delete the RSS option. + $this->save_option_setting( $wpseo_rss, 'rssbefore' ); + $this->save_option_setting( $wpseo_rss, 'rssafter' ); + + $this->save_option_setting( $wpseo, 'company_logo' ); + $this->save_option_setting( $wpseo, 'company_name' ); + $this->save_option_setting( $wpseo, 'company_or_person' ); + $this->save_option_setting( $wpseo, 'person_name' ); + + // Remove the website name and altername name as we no longer need them. + $this->cleanup_option_data( 'wpseo' ); + + // All the breadcrumbs settings have moved to the search appearance settings. + foreach ( array_keys( $wpseo_internallinks ) as $key ) { + $this->save_option_setting( $wpseo_internallinks, $key ); + } + + // Convert hidden metabox options to display metabox options. + $title_options = get_option( 'wpseo_titles' ); + + foreach ( $title_options as $key => $value ) { + if ( strpos( $key, 'hideeditbox-tax-' ) === 0 ) { + $taxonomy = substr( $key, strlen( 'hideeditbox-tax-' ) ); + WPSEO_Options::set( 'display-metabox-tax-' . $taxonomy, ! $value ); + continue; + } + + if ( strpos( $key, 'hideeditbox-' ) === 0 ) { + $post_type = substr( $key, strlen( 'hideeditbox-' ) ); + WPSEO_Options::set( 'display-metabox-pt-' . $post_type, ! $value ); + continue; + } + } + + // Cleanup removed options. + delete_option( 'wpseo_xml' ); + delete_option( 'wpseo_permalinks' ); + delete_option( 'wpseo_rss' ); + delete_option( 'wpseo_internallinks' ); + + // Remove possibly present plugin conflict notice for plugin that was removed from the list of conflicting plugins. + $yoast_plugin_conflict = WPSEO_Plugin_Conflict::get_instance(); + $yoast_plugin_conflict->clear_error( 'header-footer/plugin.php' ); + + // Moves the user meta for excluding from the XML sitemap to a noindex. + global $wpdb; + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( "UPDATE $wpdb->usermeta SET meta_key = 'wpseo_noindex_author' WHERE meta_key = 'wpseo_excludeauthorsitemap'" ); + } + + /** + * Perform the 7.1 upgrade. + * + * @return void + */ + private function upgrade_71() { + $this->cleanup_option_data( 'wpseo_social' ); + + // Move the breadcrumbs setting and invert it. + $title_options = $this->get_option_from_database( 'wpseo_titles' ); + + if ( array_key_exists( 'breadcrumbs-blog-remove', $title_options ) ) { + WPSEO_Options::set( 'breadcrumbs-display-blog-page', ! $title_options['breadcrumbs-blog-remove'] ); + + $this->cleanup_option_data( 'wpseo_titles' ); + } + } + + /** + * Perform the 7.3 upgrade. + * + * @return void + */ + private function upgrade_73() { + global $wpdb; + // We've moved the cornerstone checkbox to our proper namespace. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = '_yoast_wpseo_is_cornerstone' WHERE meta_key = '_yst_is_cornerstone'" ); + + // Remove the previous Whip dismissed message, as this is a new one regarding PHP 5.2. + delete_option( 'whip_dismiss_timestamp' ); + } + + /** + * Performs the 7.4 upgrade. + * + * @return void + */ + protected function upgrade_74() { + $this->remove_sitemap_validators(); + } + + /** + * Performs the 7.5.3 upgrade. + * + * When upgrading purging media is potentially relevant. + * + * @return void + */ + private function upgrade_753() { + // Only when attachments are not disabled. + if ( WPSEO_Options::get( 'disable-attachment' ) === true ) { + return; + } + + // Only when attachments are not no-indexed. + if ( WPSEO_Options::get( 'noindex-attachment' ) === true ) { + return; + } + + // Set purging relevancy. + WPSEO_Options::set( 'is-media-purge-relevant', true ); + } + + /** + * Performs the 7.7 upgrade. + * + * @return void + */ + private function upgrade_77() { + // Remove all OpenGraph content image cache. + $this->delete_post_meta( '_yoast_wpseo_post_image_cache' ); + } + + /** + * Performs the 7.7.2 upgrade. + * + * @return void + */ + private function upgrade_772() { + if ( YoastSEO()->helpers->woocommerce->is_active() ) { + $this->migrate_woocommerce_archive_setting_to_shop_page(); + } + } + + /** + * Performs the 9.0 upgrade. + * + * @return void + */ + protected function upgrade_90() { + global $wpdb; + + // Invalidate all sitemap cache transients. + WPSEO_Sitemaps_Cache_Validator::cleanup_database(); + + // Removes all scheduled tasks for hitting the sitemap index. + wp_clear_scheduled_hook( 'wpseo_hit_sitemap_index' ); + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + 'DELETE FROM %i + WHERE %i LIKE %s', + [ $wpdb->options, 'option_name', 'wpseo_sitemap_%' ] + ) + ); + } + + /** + * Performs the 10.0 upgrade. + * + * @return void + */ + private function upgrade_100() { + // Removes recalibration notifications. + $this->clean_all_notifications(); + + // Removes recalibration options. + WPSEO_Options::clean_up( 'wpseo' ); + delete_option( 'wpseo_recalibration_beta_mailinglist_subscription' ); + } + + /** + * Performs the 11.1 upgrade. + * + * @return void + */ + private function upgrade_111() { + // Set company_or_person to company when it's an invalid value. + $company_or_person = WPSEO_Options::get( 'company_or_person', '' ); + + if ( ! in_array( $company_or_person, [ 'company', 'person' ], true ) ) { + WPSEO_Options::set( 'company_or_person', 'company' ); + } + } + + /** + * Performs the 12.3 upgrade. + * + * Removes the about notice when its still in the database. + * + * @return void + */ + private function upgrade_123() { + $plugins = [ + 'yoast-seo-premium', + 'video-seo-for-wordpress-seo-by-yoast', + 'yoast-news-seo', + 'local-seo-for-yoast-seo', + 'yoast-woocommerce-seo', + 'yoast-acf-analysis', + ]; + + $center = Yoast_Notification_Center::get(); + foreach ( $plugins as $plugin ) { + $center->remove_notification_by_id( 'wpseo-outdated-yoast-seo-plugin-' . $plugin ); + } + } + + /** + * Performs the 12.4 upgrade. + * + * Removes the Google plus defaults from the database. + * + * @return void + */ + private function upgrade_124() { + $this->cleanup_option_data( 'wpseo_social' ); + } + + /** + * Performs the 12.5 upgrade. + * + * @return void + */ + public function upgrade_125() { + // Disables the force rewrite title when the theme supports it through WordPress. + if ( WPSEO_Options::get( 'forcerewritetitle', false ) && current_theme_supports( 'title-tag' ) ) { + WPSEO_Options::set( 'forcerewritetitle', false ); + } + + global $wpdb; + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + 'DELETE FROM %i + WHERE %i = %s', + [ $wpdb->usermeta, 'meta_key', 'wp_yoast_promo_hide_premium_upsell_admin_block' ] + ) + ); + + // Removes the WordPress update notification, because it is no longer necessary when WordPress 5.3 is released. + $center = Yoast_Notification_Center::get(); + $center->remove_notification_by_id( 'wpseo-dismiss-wordpress-upgrade' ); + } + + /** + * Performs the 12.8 upgrade. + * + * @return void + */ + private function upgrade_128() { + // Re-save wpseo to make sure bf_banner_2019_dismissed key is gone. + $this->cleanup_option_data( 'wpseo' ); + + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-dismiss-page_comments-notice' ); + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-dismiss-wordpress-upgrade' ); + } + + /** + * Performs the 13.2 upgrade. + * + * @return void + */ + private function upgrade_132() { + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-dismiss-tagline-notice' ); + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-dismiss-permalink-notice' ); + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-dismiss-onpageorg' ); + + // Transfers the onpage option value to the ryte option. + $ryte_option = get_option( 'wpseo_ryte' ); + $onpage_option = get_option( 'wpseo_onpage' ); + if ( ! $ryte_option && $onpage_option ) { + update_option( 'wpseo_ryte', $onpage_option ); + delete_option( 'wpseo_onpage' ); + } + + // Changes onpage_indexability to ryte_indexability. + $wpseo_option = get_option( 'wpseo' ); + if ( isset( $wpseo_option['onpage_indexability'] ) && ! isset( $wpseo_option['ryte_indexability'] ) ) { + $wpseo_option['ryte_indexability'] = $wpseo_option['onpage_indexability']; + unset( $wpseo_option['onpage_indexability'] ); + update_option( 'wpseo', $wpseo_option ); + } + + if ( wp_next_scheduled( 'wpseo_ryte_fetch' ) ) { + wp_clear_scheduled_hook( 'wpseo_ryte_fetch' ); + } + + /* + * Re-register capabilities to add the new `view_site_health_checks` + * capability to the SEO Manager role. + */ + do_action( 'wpseo_register_capabilities' ); + WPSEO_Capability_Manager_Factory::get()->add(); + } + + /** + * Perform the 14.0.3 upgrade. + * + * @return void + */ + private function upgrade_1403() { + WPSEO_Options::set( 'ignore_indexation_warning', false ); + } + + /** + * Performs the 14.1 upgrade. + * + * @return void + */ + private function upgrade_141() { + /* + * These notifications are retrieved from storage on the `init` hook with + * priority 1. We need to remove them after they're retrieved. + */ + add_action( 'init', [ $this, 'remove_notifications_for_141' ] ); + add_action( 'init', [ $this, 'clean_up_private_taxonomies_for_141' ] ); + + $this->reset_permalinks_of_attachments_for_141(); + } + + /** + * Performs the 14.2 upgrade. + * + * Removes the yoast-acf-analysis notice when it's still in the database. + * + * @return void + */ + private function upgrade_142() { + add_action( 'init', [ $this, 'remove_acf_notification_for_142' ] ); + } + + /** + * Performs the 14.5 upgrade. + * + * @return void + */ + private function upgrade_145() { + add_action( 'init', [ $this, 'set_indexation_completed_option_for_145' ] ); + } + + /** + * Performs the 14.9 upgrade. + * + * @return void + */ + private function upgrade_149() { + $version = get_option( 'wpseo_license_server_version', 2 ); + WPSEO_Options::set( 'license_server_version', $version ); + delete_option( 'wpseo_license_server_version' ); + } + + /** + * Performs the 15.1 upgrade. + * + * @return void + */ + private function upgrade_151() { + $this->set_home_url_for_151(); + $this->move_indexables_indexation_reason_for_151(); + + add_action( 'init', [ $this, 'set_permalink_structure_option_for_151' ] ); + add_action( 'init', [ $this, 'store_custom_taxonomy_slugs_for_151' ] ); + } + + /** + * Performs the 15.3 upgrade. + * + * @return void + */ + private function upgrade_153() { + WPSEO_Options::set( 'category_base_url', get_option( 'category_base' ) ); + WPSEO_Options::set( 'tag_base_url', get_option( 'tag_base' ) ); + + // Rename a couple of options. + $indexation_started_value = WPSEO_Options::get( 'indexation_started' ); + WPSEO_Options::set( 'indexing_started', $indexation_started_value ); + + $indexables_indexing_completed_value = WPSEO_Options::get( 'indexables_indexation_completed' ); + WPSEO_Options::set( 'indexables_indexing_completed', $indexables_indexing_completed_value ); + } + + /** + * Performs the 15.5 upgrade. + * + * @return void + */ + private function upgrade_155() { + // Unset the fbadminapp value in the wpseo_social option. + $wpseo_social_option = get_option( 'wpseo_social' ); + + if ( isset( $wpseo_social_option['fbadminapp'] ) ) { + unset( $wpseo_social_option['fbadminapp'] ); + update_option( 'wpseo_social', $wpseo_social_option ); + } + } + + /** + * Performs the 15.7 upgrade. + * + * @return void + */ + private function upgrade_157() { + add_action( 'init', [ $this, 'remove_plugin_updated_notification_for_157' ] ); + } + + /** + * Performs the 15.9.1 upgrade routine. + * + * @return void + */ + private function upgrade_1591() { + $enabled_auto_updates = get_option( 'auto_update_plugins' ); + $addon_update_watcher = YoastSEO()->classes->get( Addon_Update_Watcher::class ); + $addon_update_watcher->toggle_auto_updates_for_add_ons( 'auto_update_plugins', [], $enabled_auto_updates ); + } + + /** + * Performs the 16.2 upgrade routine. + * + * @return void + */ + private function upgrade_162() { + $enabled_auto_updates = get_site_option( 'auto_update_plugins' ); + $addon_update_watcher = YoastSEO()->classes->get( Addon_Update_Watcher::class ); + $addon_update_watcher->toggle_auto_updates_for_add_ons( 'auto_update_plugins', $enabled_auto_updates, [] ); + } + + /** + * Performs the 16.5 upgrade. + * + * @return void + */ + private function upgrade_165() { + add_action( 'init', [ $this, 'copy_og_settings_from_social_to_titles' ], 99 ); + + // Run after the WPSEO_Options::enrich_defaults method which has priority 99. + add_action( 'init', [ $this, 'reset_og_settings_to_default_values' ], 100 ); + } + + /** + * Performs the 17.2 upgrade. Cleans out any unnecessary indexables. See $cleanup_integration->get_cleanup_tasks() to see what will be cleaned out. + * + * @return void + */ + private function upgrade_172() { + wp_unschedule_hook( 'wpseo_cleanup_orphaned_indexables' ); + wp_unschedule_hook( 'wpseo_cleanup_indexables' ); + + if ( ! wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + wp_schedule_single_event( ( time() + ( MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + + /** + * Performs the 17.7.1 upgrade routine. + * + * @return void + */ + private function upgrade_1771() { + $enabled_auto_updates = get_site_option( 'auto_update_plugins' ); + $addon_update_watcher = YoastSEO()->classes->get( Addon_Update_Watcher::class ); + $addon_update_watcher->toggle_auto_updates_for_add_ons( 'auto_update_plugins', $enabled_auto_updates, [] ); + } + + /** + * Performs the 17.9 upgrade routine. + * + * @return void + */ + private function upgrade_179() { + WPSEO_Options::set( 'wincher_integration_active', true ); + } + + /** + * Performs the 18.3 upgrade routine. + * + * @return void + */ + private function upgrade_183() { + $this->delete_post_meta( 'yoast-structured-data-blocks-images-cache' ); + } + + /** + * Performs the 18.6 upgrade routine. + * + * @return void + */ + private function upgrade_186() { + if ( is_multisite() ) { + WPSEO_Options::set( 'allow_wincher_integration_active', false ); + } + } + + /** + * Performs the 18.9 upgrade routine. + * + * @return void + */ + private function upgrade_189() { + // Make old users not get the Installation Success page after upgrading. + WPSEO_Options::set( 'should_redirect_after_install_free', false ); + // We're adding a hardcoded time here, so that in the future we can be able to identify whether the user did see the Installation Success page or not. + // If they did, they wouldn't have this hardcoded value in that option, but rather (roughly) the timestamp of the moment they saw it. + WPSEO_Options::set( 'activation_redirect_timestamp_free', 1652258756 ); + + // Transfer the Social URLs. + $other = []; + $other[] = WPSEO_Options::get( 'instagram_url' ); + $other[] = WPSEO_Options::get( 'linkedin_url' ); + $other[] = WPSEO_Options::get( 'myspace_url' ); + $other[] = WPSEO_Options::get( 'pinterest_url' ); + $other[] = WPSEO_Options::get( 'youtube_url' ); + $other[] = WPSEO_Options::get( 'wikipedia_url' ); + + WPSEO_Options::set( 'other_social_urls', array_values( array_unique( array_filter( $other ) ) ) ); + + // Transfer the progress of the old Configuration Workout. + $workout_data = WPSEO_Options::get( 'workouts_data' ); + $old_conf_progress = ( $workout_data['configuration']['finishedSteps'] ?? [] ); + + if ( in_array( 'optimizeSeoData', $old_conf_progress, true ) && in_array( 'siteRepresentation', $old_conf_progress, true ) ) { + // If completed ‘SEO optimization’ and ‘Site representation’ step, we assume the workout was completed. + $configuration_finished_steps = [ + 'siteRepresentation', + 'socialProfiles', + 'personalPreferences', + ]; + WPSEO_Options::set( 'configuration_finished_steps', $configuration_finished_steps ); + } + } + + /** + * Performs the 19.1 upgrade routine. + * + * @return void + */ + private function upgrade_191() { + if ( is_multisite() ) { + WPSEO_Options::set( 'allow_remove_feed_post_comments', true ); + } + } + + /** + * Performs the 19.3 upgrade routine. + * + * @return void + */ + private function upgrade_193() { + if ( empty( get_option( 'wpseo_premium', [] ) ) ) { + WPSEO_Options::set( 'enable_index_now', true ); + WPSEO_Options::set( 'enable_link_suggestions', true ); + } + } + + /** + * Performs the 19.6 upgrade routine. + * + * @return void + */ + private function upgrade_196() { + WPSEO_Options::set( 'ryte_indexability', false ); + WPSEO_Options::set( 'allow_ryte_indexability', false ); + wp_clear_scheduled_hook( 'wpseo_ryte_fetch' ); + } + + /** + * Performs the 19.11 upgrade routine. + * + * @return void + */ + private function upgrade_1911() { + add_action( 'shutdown', [ $this, 'remove_indexable_rows_for_non_public_post_types' ] ); + add_action( 'shutdown', [ $this, 'remove_indexable_rows_for_non_public_taxonomies' ] ); + $this->deduplicate_unindexed_indexable_rows(); + $this->remove_indexable_rows_for_disabled_authors_archive(); + if ( ! wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + wp_schedule_single_event( ( time() + ( MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + + /** + * Performs the 20.2 upgrade routine. + * + * @return void + */ + private function upgrade_202() { + if ( WPSEO_Options::get( 'disable-attachment', true ) ) { + $attachment_cleanup_helper = YoastSEO()->helpers->attachment_cleanup; + + $attachment_cleanup_helper->remove_attachment_indexables( true ); + $attachment_cleanup_helper->clean_attachment_links_from_target_indexable_ids( true ); + } + + $this->clean_unindexed_indexable_rows_with_no_object_id(); + + if ( ! wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + // This schedules the cleanup routine cron again, since in combination of premium cleans up the prominent words table. We also want to cleanup possible orphaned hierarchies from the above cleanups. + wp_schedule_single_event( ( time() + ( MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + + /** + * Performs the 20.5 upgrade routine. + * + * @return void + */ + private function upgrade_205() { + if ( ! wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + wp_schedule_single_event( ( time() + ( MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + + /** + * Performs the 20.7 upgrade routine. + * Removes the metadata related to the settings page introduction modal for all the users. + * Also, schedules another cleanup scheduled action. + * + * @return void + */ + private function upgrade_207() { + add_action( 'shutdown', [ $this, 'delete_user_introduction_meta' ] ); + } + + /** + * Performs the 20.8 upgrade routine. + * Schedules another cleanup scheduled action. + * + * @return void + */ + private function upgrade_208() { + if ( ! wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + wp_schedule_single_event( ( time() + ( MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + + /** + * Performs the 22.6 upgrade routine. + * Schedules another cleanup scheduled action, but starting from the last cleanup action we just added (if there aren't any running cleanups already). + * + * @return void + */ + private function upgrade_226() { + if ( get_option( Cleanup_Integration::CURRENT_TASK_OPTION ) === false ) { + $cleanup_integration = YoastSEO()->classes->get( Cleanup_Integration::class ); + $cleanup_integration->start_cron_job( 'clean_selected_empty_usermeta', DAY_IN_SECONDS ); + } + } + + /** + * Sets the home_url option for the 15.1 upgrade routine. + * + * @return void + */ + protected function set_home_url_for_151() { + $home_url = WPSEO_Options::get( 'home_url' ); + + if ( empty( $home_url ) ) { + WPSEO_Options::set( 'home_url', get_home_url() ); + } + } + + /** + * Moves the `indexables_indexation_reason` option to the + * renamed `indexing_reason` option. + * + * @return void + */ + protected function move_indexables_indexation_reason_for_151() { + $reason = WPSEO_Options::get( 'indexables_indexation_reason', '' ); + WPSEO_Options::set( 'indexing_reason', $reason ); + } + + /** + * Checks if the indexable indexation is completed. + * If so, sets the `indexables_indexation_completed` option to `true`, + * else to `false`. + * + * @return void + */ + public function set_indexation_completed_option_for_145() { + WPSEO_Options::set( 'indexables_indexation_completed', YoastSEO()->helpers->indexing->get_limited_filtered_unindexed_count( 1 ) === 0 ); + } + + /** + * Cleans up the private taxonomies from the indexables table for the upgrade routine to 14.1. + * + * @return void + */ + public function clean_up_private_taxonomies_for_141() { + global $wpdb; + + // If migrations haven't been completed successfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + + // Clean up indexables of private taxonomies. + $private_taxonomies = get_taxonomies( [ 'public' => false ], 'names' ); + + if ( empty( $private_taxonomies ) ) { + return; + } + + $replacements = array_merge( [ Model::get_table_name( 'Indexable' ), 'object_type', 'object_sub_type' ], $private_taxonomies ); + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i + WHERE %i = 'term' + AND %i IN (" + . implode( ', ', array_fill( 0, count( $private_taxonomies ), '%s' ) ) + . ')', + $replacements + ) + ); + + $wpdb->show_errors = $show_errors; + } + + /** + * Resets the permalinks of attachments to `null` in the indexable table for the upgrade routine to 14.1. + * + * @return void + */ + private function reset_permalinks_of_attachments_for_141() { + global $wpdb; + + // If migrations haven't been completed succesfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + + // Reset the permalinks of the attachments in the indexable table. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "UPDATE %i SET %i = NULL WHERE %i = 'post' AND %i = 'attachment'", + [ Model::get_table_name( 'Indexable' ), 'permalink', 'object_type', 'object_sub_type' ] + ) + ); + + $wpdb->show_errors = $show_errors; + } + + /** + * Removes notifications from the Notification center for the 14.1 upgrade. + * + * @return void + */ + public function remove_notifications_for_141() { + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-dismiss-recalculate' ); + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-dismiss-blog-public-notice' ); + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-links-table-not-accessible' ); + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-post-type-archive-notification' ); + } + + /** + * Removes the wpseo-suggested-plugin-yoast-acf-analysis notification from the Notification center for the 14.2 upgrade. + * + * @return void + */ + public function remove_acf_notification_for_142() { + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-suggested-plugin-yoast-acf-analysis' ); + } + + /** + * Removes the wpseo-plugin-updated notification from the Notification center for the 15.7 upgrade. + * + * @return void + */ + public function remove_plugin_updated_notification_for_157() { + Yoast_Notification_Center::get()->remove_notification_by_id( 'wpseo-plugin-updated' ); + } + + /** + * Removes all notifications saved in the database under 'wp_yoast_notifications'. + * + * @return void + */ + private function clean_all_notifications() { + global $wpdb; + delete_metadata( 'user', 0, $wpdb->get_blog_prefix() . Yoast_Notification_Center::STORAGE_KEY, '', true ); + } + + /** + * Removes the post meta fields for a given meta key. + * + * @param string $meta_key The meta key. + * + * @return void + */ + private function delete_post_meta( $meta_key ) { + global $wpdb; + $deleted = $wpdb->delete( $wpdb->postmeta, [ 'meta_key' => $meta_key ], [ '%s' ] ); + + if ( $deleted ) { + wp_cache_set( 'last_changed', microtime(), 'posts' ); + } + } + + /** + * Removes all sitemap validators. + * + * This should be executed on every upgrade routine until we have removed the sitemap caching in the database. + * + * @return void + */ + private function remove_sitemap_validators() { + global $wpdb; + + // Remove all sitemap validators. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + 'DELETE FROM %i WHERE %i LIKE %s', + [ $wpdb->options, 'option_name', 'wpseo_sitemap%validator%' ] + ) + ); + } + + /** + * Retrieves the option value directly from the database. + * + * @param string $option_name Option to retrieve. + * + * @return int|string|bool|float|array The content of the option if exists, otherwise an empty array. + */ + protected function get_option_from_database( $option_name ) { + global $wpdb; + + // Load option directly from the database, to avoid filtering and sanitization. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $results = $wpdb->get_results( + $wpdb->prepare( + 'SELECT %i FROM %i WHERE %i = %s', + [ 'option_value', $wpdb->options, 'option_name', $option_name ] + ), + ARRAY_A + ); + + if ( ! empty( $results ) ) { + return maybe_unserialize( $results[0]['option_value'] ); + } + + return []; + } + + /** + * Cleans the option to make sure only relevant settings are there. + * + * @param string $option_name Option name save. + * + * @return void + */ + protected function cleanup_option_data( $option_name ) { + $data = get_option( $option_name, [] ); + if ( ! is_array( $data ) || $data === [] ) { + return; + } + + /* + * Clean up the option by re-saving it. + * + * The option framework will remove any settings that are not configured + * for this option, removing any migrated settings. + */ + update_option( $option_name, $data ); + } + + /** + * Saves an option setting to where it should be stored. + * + * @param int|string|bool|float|array $source_data The option containing the value to be migrated. + * @param string $source_setting Name of the key in the "from" option. + * @param string|null $target_setting Name of the key in the "to" option. + * + * @return void + */ + protected function save_option_setting( $source_data, $source_setting, $target_setting = null ) { + if ( $target_setting === null ) { + $target_setting = $source_setting; + } + + if ( isset( $source_data[ $source_setting ] ) ) { + WPSEO_Options::set( $target_setting, $source_data[ $source_setting ] ); + } + } + + /** + * Migrates WooCommerce archive settings to the WooCommerce Shop page meta-data settings. + * + * If no Shop page is defined, nothing will be migrated. + * + * @return void + */ + private function migrate_woocommerce_archive_setting_to_shop_page() { + $shop_page_id = wc_get_page_id( 'shop' ); + + if ( $shop_page_id === -1 ) { + return; + } + + $title = WPSEO_Meta::get_value( 'title', $shop_page_id ); + + if ( empty( $title ) ) { + $option_title = WPSEO_Options::get( 'title-ptarchive-product' ); + + WPSEO_Meta::set_value( + 'title', + $option_title, + $shop_page_id + ); + + WPSEO_Options::set( 'title-ptarchive-product', '' ); + } + + $meta_description = WPSEO_Meta::get_value( 'metadesc', $shop_page_id ); + + if ( empty( $meta_description ) ) { + $option_metadesc = WPSEO_Options::get( 'metadesc-ptarchive-product' ); + + WPSEO_Meta::set_value( + 'metadesc', + $option_metadesc, + $shop_page_id + ); + + WPSEO_Options::set( 'metadesc-ptarchive-product', '' ); + } + + $bc_title = WPSEO_Meta::get_value( 'bctitle', $shop_page_id ); + + if ( empty( $bc_title ) ) { + $option_bctitle = WPSEO_Options::get( 'bctitle-ptarchive-product' ); + + WPSEO_Meta::set_value( + 'bctitle', + $option_bctitle, + $shop_page_id + ); + + WPSEO_Options::set( 'bctitle-ptarchive-product', '' ); + } + + $noindex = WPSEO_Meta::get_value( 'meta-robots-noindex', $shop_page_id ); + + if ( $noindex === '0' ) { + $option_noindex = WPSEO_Options::get( 'noindex-ptarchive-product' ); + + WPSEO_Meta::set_value( + 'meta-robots-noindex', + $option_noindex, + $shop_page_id + ); + + WPSEO_Options::set( 'noindex-ptarchive-product', false ); + } + } + + /** + * Stores the initial `permalink_structure` option. + * + * @return void + */ + public function set_permalink_structure_option_for_151() { + WPSEO_Options::set( 'permalink_structure', get_option( 'permalink_structure' ) ); + } + + /** + * Stores the initial slugs of custom taxonomies. + * + * @return void + */ + public function store_custom_taxonomy_slugs_for_151() { + $taxonomies = $this->taxonomy_helper->get_custom_taxonomies(); + + $custom_taxonomies = []; + + foreach ( $taxonomies as $taxonomy ) { + $slug = $this->taxonomy_helper->get_taxonomy_slug( $taxonomy ); + + $custom_taxonomies[ $taxonomy ] = $slug; + } + + WPSEO_Options::set( 'custom_taxonomy_slugs', $custom_taxonomies ); + } + + /** + * Copies the frontpage social settings to the titles options. + * + * @return void + */ + public function copy_og_settings_from_social_to_titles() { + $wpseo_social = get_option( 'wpseo_social' ); + $wpseo_titles = get_option( 'wpseo_titles' ); + + $copied_options = []; + // Reset to the correct default value. + $copied_options['open_graph_frontpage_title'] = '%%sitename%%'; + + $options = [ + 'og_frontpage_title' => 'open_graph_frontpage_title', + 'og_frontpage_desc' => 'open_graph_frontpage_desc', + 'og_frontpage_image' => 'open_graph_frontpage_image', + 'og_frontpage_image_id' => 'open_graph_frontpage_image_id', + ]; + + foreach ( $options as $social_option => $titles_option ) { + if ( ! empty( $wpseo_social[ $social_option ] ) ) { + $copied_options[ $titles_option ] = $wpseo_social[ $social_option ]; + } + } + + $wpseo_titles = array_merge( $wpseo_titles, $copied_options ); + + update_option( 'wpseo_titles', $wpseo_titles ); + } + + /** + * Reset the social options with the correct default values. + * + * @return void + */ + public function reset_og_settings_to_default_values() { + $wpseo_titles = get_option( 'wpseo_titles' ); + $updated_options = []; + + $updated_options['social-title-author-wpseo'] = '%%name%%'; + $updated_options['social-title-archive-wpseo'] = '%%date%%'; + + /* translators: %s expands to the name of a post type (plural). */ + $post_type_archive_default = sprintf( __( '%s Archive', 'wordpress-seo' ), '%%pt_plural%%' ); + + /* translators: %s expands to the variable used for term title. */ + $term_archive_default = sprintf( __( '%s Archives', 'wordpress-seo' ), '%%term_title%%' ); + + $post_type_objects = get_post_types( [ 'public' => true ], 'objects' ); + + if ( $post_type_objects ) { + foreach ( $post_type_objects as $pt ) { + // Post types. + if ( isset( $wpseo_titles[ 'social-title-' . $pt->name ] ) ) { + $updated_options[ 'social-title-' . $pt->name ] = '%%title%%'; + } + // Post type archives. + if ( isset( $wpseo_titles[ 'social-title-ptarchive-' . $pt->name ] ) ) { + $updated_options[ 'social-title-ptarchive-' . $pt->name ] = $post_type_archive_default; + } + } + } + + $taxonomy_objects = get_taxonomies( [ 'public' => true ], 'object' ); + + if ( $taxonomy_objects ) { + foreach ( $taxonomy_objects as $tax ) { + if ( isset( $wpseo_titles[ 'social-title-tax-' . $tax->name ] ) ) { + $updated_options[ 'social-title-tax-' . $tax->name ] = $term_archive_default; + } + } + } + + $wpseo_titles = array_merge( $wpseo_titles, $updated_options ); + + update_option( 'wpseo_titles', $wpseo_titles ); + } + + /** + * Removes all indexables for posts that are not publicly viewable. + * This method should be called after init, because post_types can still be registered. + * + * @return void + */ + public function remove_indexable_rows_for_non_public_post_types() { + global $wpdb; + + // If migrations haven't been completed successfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + + $indexable_table = Model::get_table_name( 'Indexable' ); + + $included_post_types = YoastSEO()->helpers->post_type->get_indexable_post_types(); + + if ( empty( $included_post_types ) ) { + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i + WHERE %i = 'post' + AND %i IS NOT NULL", + [ $indexable_table, 'object_type', 'object_sub_type' ] + ) + ); + } + else { + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i + WHERE %i = 'post' + AND %i IS NOT NULL + AND %i NOT IN ( " . implode( ', ', array_fill( 0, count( $included_post_types ), '%s' ) ) . ' )', + array_merge( [ $indexable_table, 'object_type', 'object_sub_type', 'object_sub_type' ], $included_post_types ) + ) + ); + } + + $wpdb->show_errors = $show_errors; + } + + /** + * Removes all indexables for terms that are not publicly viewable. + * This method should be called after init, because taxonomies can still be registered. + * + * @return void + */ + public function remove_indexable_rows_for_non_public_taxonomies() { + global $wpdb; + + // If migrations haven't been completed successfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + + $indexable_table = Model::get_table_name( 'Indexable' ); + + $included_taxonomies = YoastSEO()->helpers->taxonomy->get_indexable_taxonomies(); + + if ( empty( $included_taxonomies ) ) { + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i + WHERE %i = 'term' + AND %i IS NOT NULL", + [ $indexable_table, 'object_type', 'object_sub_type' ] + ) + ); + } + else { + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i + WHERE %i = 'term' + AND %i IS NOT NULL + AND %i NOT IN ( " . implode( ', ', array_fill( 0, count( $included_taxonomies ), '%s' ) ) . ' )', + array_merge( [ $indexable_table, 'object_type', 'object_sub_type', 'object_sub_type' ], $included_taxonomies ) + ) + ); + } + + $wpdb->show_errors = $show_errors; + } + + /** + * De-duplicates indexables that have more than one "unindexed" rows for the same object. Keeps the newest indexable. + * + * @return void + */ + protected function deduplicate_unindexed_indexable_rows() { + global $wpdb; + + // If migrations haven't been completed successfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $duplicates = $wpdb->get_results( + $wpdb->prepare( + " + SELECT + MAX(id) as newest_id, + object_id, + object_type + FROM + %i + WHERE + post_status = 'unindexed' + AND object_type IN ( 'term', 'post', 'user' ) + GROUP BY + object_id, + object_type + HAVING + count(*) > 1", + [ Model::get_table_name( 'Indexable' ) ] + ), + ARRAY_A + ); + + if ( empty( $duplicates ) ) { + $wpdb->show_errors = $show_errors; + + return; + } + + // Users, terms and posts may share the same object_id. So delete them in separate, more performant, queries. + $delete_queries = [ + $this->get_indexable_deduplication_query_for_type( 'post', $duplicates, $wpdb ), + $this->get_indexable_deduplication_query_for_type( 'term', $duplicates, $wpdb ), + $this->get_indexable_deduplication_query_for_type( 'user', $duplicates, $wpdb ), + ]; + + foreach ( $delete_queries as $delete_query ) { + if ( ! empty( $delete_query ) ) { + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + $wpdb->query( $delete_query ); + // phpcs:enable + } + } + + $wpdb->show_errors = $show_errors; + } + + /** + * Cleans up "unindexed" indexable rows when appropriate, aka when there's no object ID even though it should. + * + * @return void + */ + protected function clean_unindexed_indexable_rows_with_no_object_id() { + global $wpdb; + + // If migrations haven't been completed successfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i + WHERE %i = 'unindexed' + AND %i NOT IN ( 'home-page', 'date-archive', 'post-type-archive', 'system-page' ) + AND %i IS NULL", + [ Model::get_table_name( 'Indexable' ), 'post_status', 'object_type', 'object_id' ] + ) + ); + + $wpdb->show_errors = $show_errors; + } + + /** + * Removes all user indexable rows when the author archive is disabled. + * + * @return void + */ + protected function remove_indexable_rows_for_disabled_authors_archive() { + global $wpdb; + + if ( ! YoastSEO()->helpers->author_archive->are_disabled() ) { + return; + } + + // If migrations haven't been completed successfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + $wpdb->query( + $wpdb->prepare( + "DELETE FROM %i WHERE %i = 'user'", + [ Model::get_table_name( 'Indexable' ), 'object_type' ] + ) + ); + + $wpdb->show_errors = $show_errors; + } + + /** + * Creates a query for de-duplicating indexables for a particular type. + * + * @param string $object_type The object type to deduplicate. + * @param string|array> $duplicates The result of the duplicate query. + * @param wpdb $wpdb The wpdb object. + * + * @return string The query that removes all but one duplicate for each object of the object type. + */ + protected function get_indexable_deduplication_query_for_type( $object_type, $duplicates, $wpdb ) { + $filtered_duplicates = array_filter( + $duplicates, + static function ( $duplicate ) use ( $object_type ) { + return $duplicate['object_type'] === $object_type; + } + ); + + if ( empty( $filtered_duplicates ) ) { + return ''; + } + + $object_ids = wp_list_pluck( $filtered_duplicates, 'object_id' ); + $newest_indexable_ids = wp_list_pluck( $filtered_duplicates, 'newest_id' ); + + $replacements = array_merge( [ Model::get_table_name( 'Indexable' ), 'object_id' ], array_values( $object_ids ), array_values( $newest_indexable_ids ) ); + $replacements[] = $object_type; + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + return $wpdb->prepare( + 'DELETE FROM + %i + WHERE + %i IN ( ' . implode( ', ', array_fill( 0, count( $filtered_duplicates ), '%d' ) ) . ' ) + AND id NOT IN ( ' . implode( ', ', array_fill( 0, count( $filtered_duplicates ), '%d' ) ) . ' ) + AND object_type = %s', + $replacements + ); + } + + /** + * Removes the settings' introduction modal data for users. + * + * @return void + */ + public function delete_user_introduction_meta() { + delete_metadata( 'user', 0, '_yoast_settings_introduction', '', true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-admin-bar-menu.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-admin-bar-menu.php new file mode 100644 index 00000000..e8c6f455 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-admin-bar-menu.php @@ -0,0 +1,926 @@ +classes->get( Indexable_Repository::class ); + } + if ( ! $score_icon_helper ) { + $score_icon_helper = YoastSEO()->helpers->score_icon; + } + if ( ! $product_helper ) { + $product_helper = YoastSEO()->helpers->product; + } + if ( ! $shortlinker ) { + $shortlinker = new WPSEO_Shortlinker(); + } + + $this->product_helper = $product_helper; + $this->asset_manager = $asset_manager; + $this->indexable_repository = $indexable_repository; + $this->score_icon_helper = $score_icon_helper; + $this->shortlinker = $shortlinker; + } + + /** + * Gets whether SEO score is enabled, with cache applied. + * + * @return bool True if SEO score is enabled, false otherwise. + */ + protected function get_is_seo_enabled() { + if ( is_null( $this->is_seo_enabled ) ) { + $this->is_seo_enabled = ( new WPSEO_Metabox_Analysis_SEO() )->is_enabled(); + } + + return $this->is_seo_enabled; + } + + /** + * Gets whether readability is enabled, with cache applied. + * + * @return bool True if readability is enabled, false otherwise. + */ + protected function get_is_readability_enabled() { + if ( is_null( $this->is_readability_enabled ) ) { + $this->is_readability_enabled = ( new WPSEO_Metabox_Analysis_Readability() )->is_enabled(); + } + + return $this->is_readability_enabled; + } + + /** + * Returns the indexable for the current WordPress page, with cache applied. + * + * @return bool|Indexable The indexable, false if none could be found. + */ + protected function get_current_indexable() { + if ( is_null( $this->current_indexable ) ) { + $this->current_indexable = $this->indexable_repository->for_current_page(); + } + + return $this->current_indexable; + } + + /** + * Adds the admin bar menu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + public function add_menu( WP_Admin_Bar $wp_admin_bar ) { + // On block editor pages, the admin bar only shows on mobile, where having this menu icon is not very helpful. + if ( is_admin() ) { + $screen = get_current_screen(); + if ( isset( $screen ) && $screen->is_block_editor() ) { + return; + } + } + + // If the current user can't write posts, this is all of no use, so let's not output an admin menu. + if ( ! current_user_can( 'edit_posts' ) ) { + return; + } + + $this->add_root_menu( $wp_admin_bar ); + + /** + * Adds a submenu item in the top of the adminbar. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * @param string $menu_identifier The menu identifier. + */ + do_action( 'wpseo_add_adminbar_submenu', $wp_admin_bar, self::MENU_IDENTIFIER ); + + if ( ! is_admin() ) { + + if ( is_singular() || is_tag() || is_tax() || is_category() ) { + $is_seo_enabled = $this->get_is_seo_enabled(); + $is_readability_enabled = $this->get_is_readability_enabled(); + + $indexable = $this->get_current_indexable(); + + if ( $is_seo_enabled ) { + $focus_keyword = ( ! is_a( $indexable, 'Yoast\WP\SEO\Models\Indexable' ) || is_null( $indexable->primary_focus_keyword ) ) ? __( 'not set', 'wordpress-seo' ) : $indexable->primary_focus_keyword; + + $wp_admin_bar->add_menu( + [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-seo-focus-keyword', + 'title' => __( 'Focus keyphrase: ', 'wordpress-seo' ) . '' . $focus_keyword . '', + 'meta' => [ 'tabindex' => '0' ], + ] + ); + $wp_admin_bar->add_menu( + [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-seo-score', + 'title' => __( 'SEO score', 'wordpress-seo' ) . ': ' . $this->score_icon_helper->for_seo( $indexable, 'adminbar-sub-menu-score' ) + ->present(), + 'meta' => [ 'tabindex' => '0' ], + ] + ); + } + + if ( $is_readability_enabled ) { + $wp_admin_bar->add_menu( + [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-readability-score', + 'title' => __( 'Readability', 'wordpress-seo' ) . ': ' . $this->score_icon_helper->for_readability( $indexable->readability_score, 'adminbar-sub-menu-score' ) + ->present(), + 'meta' => [ 'tabindex' => '0' ], + ] + ); + } + + if ( ! $this->product_helper->is_premium() ) { + $wp_admin_bar->add_menu( + [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-frontend-inspector', + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-frontend-inspector' ), + 'title' => __( 'Front-end SEO inspector', 'wordpress-seo' ) . new Premium_Badge_Presenter( 'wpseo-frontend-inspector-badge' ), + 'meta' => [ + 'tabindex' => '0', + 'target' => '_blank', + ], + ] + ); + } + } + $this->add_analysis_submenu( $wp_admin_bar ); + $this->add_seo_tools_submenu( $wp_admin_bar ); + $this->add_how_to_submenu( $wp_admin_bar ); + $this->add_get_help_submenu( $wp_admin_bar ); + } + + if ( ! is_admin() || is_blog_admin() ) { + $this->add_settings_submenu( $wp_admin_bar ); + } + elseif ( is_network_admin() ) { + $this->add_network_settings_submenu( $wp_admin_bar ); + } + + if ( ! $this->product_helper->is_premium() ) { + $this->add_premium_link( $wp_admin_bar ); + } + } + + /** + * Enqueues admin bar assets. + * + * @return void + */ + public function enqueue_assets() { + if ( ! is_admin_bar_showing() ) { + return; + } + + // If the current user can't write posts, this is all of no use, so let's not output an admin menu. + if ( ! current_user_can( 'edit_posts' ) ) { + return; + } + + $this->asset_manager->register_assets(); + $this->asset_manager->enqueue_style( 'adminbar' ); + } + + /** + * Registers the hooks. + * + * @return void + */ + public function register_hooks() { + if ( ! $this->meets_requirements() ) { + return; + } + + add_action( 'admin_bar_menu', [ $this, 'add_menu' ], 95 ); + + add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Checks whether the requirements to use this class are met. + * + * @return bool True if requirements are met, false otherwise. + */ + public function meets_requirements() { + if ( is_network_admin() ) { + return WPSEO_Utils::is_plugin_network_active(); + } + + if ( WPSEO_Options::get( 'enable_admin_bar_menu' ) !== true ) { + return false; + } + + return ! is_admin() || is_blog_admin(); + } + + /** + * Adds the admin bar root menu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_root_menu( WP_Admin_Bar $wp_admin_bar ) { + $title = $this->get_title(); + + $score = ''; + $settings_url = ''; + $counter = ''; + $notification_popup = ''; + + $post = $this->get_singular_post(); + if ( $post ) { + $score = $this->get_post_score( $post ); + } + + $term = $this->get_singular_term(); + if ( $term ) { + $score = $this->get_term_score( $term ); + } + + $can_manage_options = $this->can_manage_options(); + + if ( $can_manage_options ) { + $settings_url = $this->get_settings_page_url(); + } + + if ( empty( $score ) && ! is_network_admin() && $can_manage_options ) { + $counter = $this->get_notification_counter(); + $notification_popup = $this->get_notification_popup(); + } + + $admin_bar_menu_args = [ + 'id' => self::MENU_IDENTIFIER, + 'title' => $title . $score . $counter . $notification_popup, + 'href' => $settings_url, + 'meta' => [ 'tabindex' => ! empty( $settings_url ) ? false : '0' ], + ]; + $wp_admin_bar->add_menu( $admin_bar_menu_args ); + + if ( ! empty( $counter ) ) { + $admin_bar_menu_args = [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-notifications', + 'title' => __( 'Notifications', 'wordpress-seo' ) . $counter, + 'href' => $settings_url, + 'meta' => [ 'tabindex' => ! empty( $settings_url ) ? false : '0' ], + ]; + $wp_admin_bar->add_menu( $admin_bar_menu_args ); + } + } + + /** + * Adds the admin bar analysis submenu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_analysis_submenu( WP_Admin_Bar $wp_admin_bar ) { + try { + $url = YoastSEO()->meta->for_current_page()->canonical; + } catch ( Exception $e ) { + // This is not the type of error we can handle here. + return; + } + + if ( ! $url ) { + return; + } + + $menu_args = [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => self::ANALYSIS_SUBMENU_IDENTIFIER, + 'title' => __( 'Analyze this page', 'wordpress-seo' ), + 'meta' => [ 'tabindex' => '0' ], + ]; + $wp_admin_bar->add_menu( $menu_args ); + + $encoded_url = rawurlencode( $url ); + $submenu_items = [ + [ + 'id' => 'wpseo-inlinks', + 'title' => __( 'Check links to this URL', 'wordpress-seo' ), + 'href' => 'https://search.google.com/search-console/links/drilldown?resource_id=' . rawurlencode( get_option( 'siteurl' ) ) . '&type=EXTERNAL&target=' . $encoded_url . '&domain=', + ], + [ + 'id' => 'wpseo-structureddata', + 'title' => __( 'Google Rich Results Test', 'wordpress-seo' ), + 'href' => 'https://search.google.com/test/rich-results?url=' . $encoded_url, + ], + [ + 'id' => 'wpseo-facebookdebug', + 'title' => __( 'Facebook Debugger', 'wordpress-seo' ), + 'href' => '//developers.facebook.com/tools/debug/?q=' . $encoded_url, + ], + [ + 'id' => 'wpseo-pagespeed', + 'title' => __( 'Google Page Speed Test', 'wordpress-seo' ), + 'href' => '//developers.google.com/speed/pagespeed/insights/?url=' . $encoded_url, + ], + ]; + + $this->add_submenu_items( $submenu_items, $wp_admin_bar, self::ANALYSIS_SUBMENU_IDENTIFIER ); + } + + /** + * Adds the admin bar tools submenu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_seo_tools_submenu( WP_Admin_Bar $wp_admin_bar ) { + $menu_args = [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-sub-tools', + 'title' => __( 'SEO Tools', 'wordpress-seo' ), + 'meta' => [ 'tabindex' => '0' ], + ]; + $wp_admin_bar->add_menu( $menu_args ); + + $submenu_items = [ + [ + 'id' => 'wpseo-semrush', + 'title' => 'Semrush', + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-semrush' ), + ], + [ + 'id' => 'wpseo-wincher', + 'title' => 'Wincher', + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-wincher' ), + ], + [ + 'id' => 'wpseo-google-trends', + 'title' => 'Google trends', + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-gtrends' ), + ], + ]; + + $this->add_submenu_items( $submenu_items, $wp_admin_bar, 'wpseo-sub-tools' ); + } + + /** + * Adds the admin bar How To submenu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_how_to_submenu( WP_Admin_Bar $wp_admin_bar ) { + $menu_args = [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-sub-howto', + 'title' => __( 'How to', 'wordpress-seo' ), + 'meta' => [ 'tabindex' => '0' ], + ]; + $wp_admin_bar->add_menu( $menu_args ); + + $submenu_items = [ + [ + 'id' => 'wpseo-learn-seo', + 'title' => __( 'Learn more SEO', 'wordpress-seo' ), + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-learn-more-seo' ), + ], + [ + 'id' => 'wpseo-improve-blogpost', + 'title' => __( 'Improve your blog post', 'wordpress-seo' ), + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-improve-blog-post' ), + ], + [ + 'id' => 'wpseo-write-better-content', + 'title' => __( 'Write better content', 'wordpress-seo' ), + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-write-better' ), + ], + ]; + + $this->add_submenu_items( $submenu_items, $wp_admin_bar, 'wpseo-sub-howto' ); + } + + /** + * Adds the admin bar How To submenu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_get_help_submenu( WP_Admin_Bar $wp_admin_bar ) { + $menu_args = [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-sub-get-help', + 'title' => __( 'Help', 'wordpress-seo' ), + 'meta' => [ 'tabindex' => '0' ], + ]; + + if ( current_user_can( Support_Integration::CAPABILITY ) ) { + $menu_args['href'] = admin_url( 'admin.php?page=' . Support_Integration::PAGE ); + $wp_admin_bar->add_menu( $menu_args ); + + return; + } + $wp_admin_bar->add_menu( $menu_args ); + + $submenu_items = [ + [ + 'id' => 'wpseo-yoast-help', + 'title' => __( 'Yoast.com help section', 'wordpress-seo' ), + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-yoast-help' ), + ], + [ + 'id' => 'wpseo-premium-support', + 'title' => __( 'Yoast Premium support', 'wordpress-seo' ), + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-premium-support' ), + ], + [ + 'id' => 'wpseo-wp-support-forums', + 'title' => __( 'WordPress.org support forums', 'wordpress-seo' ), + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-wp-support-forums' ), + ], + [ + 'id' => 'wpseo-learn-seo-2', + 'title' => __( 'Learn more SEO', 'wordpress-seo' ), + 'href' => $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-learn-more-seo-help' ), + ], + ]; + + $this->add_submenu_items( $submenu_items, $wp_admin_bar, 'wpseo-sub-get-help' ); + } + + /** + * Adds the admin bar How To submenu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_premium_link( WP_Admin_Bar $wp_admin_bar ) { + $sale_percentage = ''; + if ( YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { + $sale_percentage = sprintf( + '%1$s', + esc_html__( '-30%', 'wordpress-seo' ) + ); + } + $wp_admin_bar->add_menu( + [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => 'wpseo-get-premium', + // Circumvent an issue in the WP admin bar API in order to pass `data` attributes. See https://core.trac.wordpress.org/ticket/38636. + 'title' => sprintf( + '%2$s » %3$s', + esc_url( $this->shortlinker->build_shortlink( 'https://yoa.st/admin-bar-get-premium' ) ), + esc_html__( 'Get Yoast SEO Premium', 'wordpress-seo' ), + $sale_percentage + ), + 'meta' => [ + 'tabindex' => '0', + ], + ] + ); + } + + /** + * Adds the admin bar settings submenu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_settings_submenu( WP_Admin_Bar $wp_admin_bar ) { + if ( ! $this->can_manage_options() ) { + return; + } + + $admin_menu = new WPSEO_Admin_Menu( new WPSEO_Menu() ); + $submenu_pages = $admin_menu->get_submenu_pages(); + + $menu_args = [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => self::SETTINGS_SUBMENU_IDENTIFIER, + 'title' => __( 'SEO Settings', 'wordpress-seo' ), + 'meta' => [ 'tabindex' => '0' ], + ]; + $wp_admin_bar->add_menu( $menu_args ); + + foreach ( $submenu_pages as $submenu_page ) { + if ( ! current_user_can( $submenu_page[3] ) ) { + continue; + } + + // Don't add the Google Search Console menu item. + if ( $submenu_page[4] === 'wpseo_search_console' ) { + continue; + } + + $id = 'wpseo-' . str_replace( '_', '-', str_replace( 'wpseo_', '', $submenu_page[4] ) ); + if ( $id === 'wpseo-dashboard' ) { + $id = 'wpseo-general'; + } + + $menu_args = [ + 'parent' => self::SETTINGS_SUBMENU_IDENTIFIER, + 'id' => $id, + 'title' => $submenu_page[2], + 'href' => admin_url( 'admin.php?page=' . rawurlencode( $submenu_page[4] ) ), + ]; + $wp_admin_bar->add_menu( $menu_args ); + } + } + + /** + * Adds the admin bar network settings submenu. + * + * @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to. + * + * @return void + */ + protected function add_network_settings_submenu( WP_Admin_Bar $wp_admin_bar ) { + if ( ! $this->can_manage_options() ) { + return; + } + + $network_admin_menu = new WPSEO_Network_Admin_Menu( new WPSEO_Menu() ); + $submenu_pages = $network_admin_menu->get_submenu_pages(); + + $menu_args = [ + 'parent' => self::MENU_IDENTIFIER, + 'id' => self::NETWORK_SETTINGS_SUBMENU_IDENTIFIER, + 'title' => __( 'SEO Settings', 'wordpress-seo' ), + 'meta' => [ 'tabindex' => '0' ], + ]; + $wp_admin_bar->add_menu( $menu_args ); + + foreach ( $submenu_pages as $submenu_page ) { + if ( ! current_user_can( $submenu_page[3] ) ) { + continue; + } + + $id = 'wpseo-' . str_replace( '_', '-', str_replace( 'wpseo_', '', $submenu_page[4] ) ); + if ( $id === 'wpseo-dashboard' ) { + $id = 'wpseo-general'; + } + + $menu_args = [ + 'parent' => self::NETWORK_SETTINGS_SUBMENU_IDENTIFIER, + 'id' => $id, + 'title' => $submenu_page[2], + 'href' => network_admin_url( 'admin.php?page=' . rawurlencode( $submenu_page[4] ) ), + ]; + $wp_admin_bar->add_menu( $menu_args ); + } + } + + /** + * Gets the menu title markup. + * + * @return string Admin bar title markup. + */ + protected function get_title() { + return ''; + } + + /** + * Gets the current post if in a singular post context. + * + * @global string $pagenow Current page identifier. + * @global WP_Post|null $post Current post object, or null if none available. + * + * @return WP_Post|null Post object, or null if not in singular context. + */ + protected function get_singular_post() { + global $pagenow, $post; + + if ( ! is_singular() && ( ! is_blog_admin() || ! WPSEO_Metabox::is_post_edit( $pagenow ) ) ) { + return null; + } + + if ( ! isset( $post ) || ! is_object( $post ) || ! $post instanceof WP_Post ) { + return null; + } + + return $post; + } + + /** + * Gets the focus keyword for a given post. + * + * @param WP_Post $post Post object to get its focus keyword. + * + * @return string Focus keyword, or empty string if none available. + */ + protected function get_post_focus_keyword( $post ) { + if ( ! is_object( $post ) || ! property_exists( $post, 'ID' ) ) { + return ''; + } + + /** + * Filter: 'wpseo_use_page_analysis' Determines if the analysis should be enabled. + * + * @param bool $enabled Determines if the analysis should be enabled. + */ + if ( apply_filters( 'wpseo_use_page_analysis', true ) !== true ) { + return ''; + } + + return WPSEO_Meta::get_value( 'focuskw', $post->ID ); + } + + /** + * Gets the score for a given post. + * + * @param WP_Post $post Post object to get its score. + * + * @return string Score markup, or empty string if none available. + */ + protected function get_post_score( $post ) { + if ( ! is_object( $post ) || ! property_exists( $post, 'ID' ) ) { + return ''; + } + + if ( apply_filters( 'wpseo_use_page_analysis', true ) !== true ) { + return ''; + } + + return $this->get_score_icon(); + } + + /** + * Gets the current term if in a singular term context. + * + * @global string $pagenow Current page identifier. + * @global WP_Query $wp_query Current query object. + * @global WP_Term|null $tag Current term object, or null if none available. + * + * @return WP_Term|null Term object, or null if not in singular context. + */ + protected function get_singular_term() { + global $pagenow, $wp_query, $tag; + + if ( is_category() || is_tag() || is_tax() ) { + return $wp_query->get_queried_object(); + } + + if ( WPSEO_Taxonomy::is_term_edit( $pagenow ) && ! WPSEO_Taxonomy::is_term_overview( $pagenow ) && isset( $tag ) && is_object( $tag ) && ! is_wp_error( $tag ) ) { + return get_term( $tag->term_id ); + } + + return null; + } + + /** + * Gets the score for a given term. + * + * @param WP_Term $term Term object to get its score. + * + * @return string Score markup, or empty string if none available. + */ + protected function get_term_score( $term ) { + if ( ! is_object( $term ) || ! property_exists( $term, 'term_id' ) || ! property_exists( $term, 'taxonomy' ) ) { + return ''; + } + + return $this->get_score_icon(); + } + + /** + * Create the score icon. + * + * @return string The score icon, or empty string. + */ + protected function get_score_icon() { + $is_seo_enabled = $this->get_is_seo_enabled(); + $is_readability_enabled = $this->get_is_readability_enabled(); + + $indexable = $this->get_current_indexable(); + + if ( $is_seo_enabled ) { + return $this->score_icon_helper->for_seo( $indexable, 'adminbar-seo-score' )->present(); + } + + if ( $is_readability_enabled ) { + return $this->score_icon_helper->for_readability( $indexable->readability_score, 'adminbar-seo-score' ) + ->present(); + } + + return ''; + } + + /** + * Gets the URL to the main admin settings page. + * + * @return string Admin settings page URL. + */ + protected function get_settings_page_url() { + return self_admin_url( 'admin.php?page=' . WPSEO_Admin::PAGE_IDENTIFIER ); + } + + /** + * Gets the notification counter if in a valid context. + * + * @return string Notification counter markup, or empty string if not available. + */ + protected function get_notification_counter() { + $notification_center = Yoast_Notification_Center::get(); + $notification_count = $notification_center->get_notification_count(); + + if ( ! $notification_count ) { + return ''; + } + + /* translators: Hidden accessibility text; %s: number of notifications. */ + $counter_screen_reader_text = sprintf( _n( '%s notification', '%s notifications', $notification_count, 'wordpress-seo' ), number_format_i18n( $notification_count ) ); + + return sprintf( '
      %s
      ', $notification_count, $counter_screen_reader_text ); + } + + /** + * Gets the notification popup if in a valid context. + * + * @return string Notification popup markup, or empty string if not available. + */ + protected function get_notification_popup() { + $notification_center = Yoast_Notification_Center::get(); + $new_notifications = $notification_center->get_new_notifications(); + $new_notifications_count = count( $new_notifications ); + + if ( ! $new_notifications_count ) { + return ''; + } + + $notification = sprintf( + _n( + 'There is a new notification.', + 'There are new notifications.', + $new_notifications_count, + 'wordpress-seo' + ), + $new_notifications_count + ); + + return '
      ' . $notification . '
      '; + } + + /** + * Checks whether the current user can manage options in the current context. + * + * @return bool True if capabilities are sufficient, false otherwise. + */ + protected function can_manage_options() { + return ( is_network_admin() && current_user_can( 'wpseo_manage_network_options' ) ) + || ( ! is_network_admin() && WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ); + } + + /** + * Add submenu items to a menu item. + * + * @param array $submenu_items Submenu items array. + * @param WP_Admin_Bar $wp_admin_bar Admin bar object. + * @param string $parent_id Parent menu item ID. + * + * @return void + */ + protected function add_submenu_items( array $submenu_items, WP_Admin_Bar $wp_admin_bar, $parent_id ) { + foreach ( $submenu_items as $menu_item ) { + $menu_args = [ + 'parent' => $parent_id, + 'id' => $menu_item['id'], + 'title' => $menu_item['title'], + 'href' => $menu_item['href'], + 'meta' => [ 'target' => '_blank' ], + ]; + $wp_admin_bar->add_menu( $menu_args ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-content-images.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-content-images.php new file mode 100644 index 00000000..6218c004 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-content-images.php @@ -0,0 +1,112 @@ +get_images_from_content( $this->get_post_content( $post_id, $post ) ); + } + + /** + * Grabs the images from the content. + * + * @param string $content The post content string. + * + * @return array An array of image URLs. + */ + public function get_images_from_content( $content ) { + if ( ! is_string( $content ) ) { + return []; + } + + $content_images = $this->get_img_tags_from_content( $content ); + $images = array_map( [ $this, 'get_img_tag_source' ], $content_images ); + $images = array_filter( $images ); + $images = array_unique( $images ); + $images = array_values( $images ); // Reset the array keys. + + return $images; + } + + /** + * Gets the image tags from a given content string. + * + * @param string $content The content to search for image tags. + * + * @return array An array of `` tags. + */ + private function get_img_tags_from_content( $content ) { + if ( strpos( $content, ']+>`', $content, $matches ); + if ( isset( $matches[0] ) ) { + return $matches[0]; + } + + return []; + } + + /** + * Retrieves the image URL from an image tag. + * + * @param string $image Image HTML element. + * + * @return string|bool The image URL on success, false on failure. + */ + private function get_img_tag_source( $image ) { + preg_match( '`src=(["\'])(.*?)\1`', $image, $matches ); + if ( isset( $matches[2] ) && filter_var( $matches[2], FILTER_VALIDATE_URL ) ) { + return $matches[2]; + } + return false; + } + + /** + * Retrieves the post content we want to work with. + * + * @param int $post_id The post ID. + * @param WP_Post|array|null $post The post. + * + * @return string The content of the supplied post. + */ + private function get_post_content( $post_id, $post ) { + if ( $post === null ) { + $post = get_post( $post_id ); + } + + if ( $post === null ) { + return ''; + } + + /** + * Filter: 'wpseo_pre_analysis_post_content' - Allow filtering the content before analysis. + * + * @param string $post_content The Post content string. + * @param WP_Post $post The current post. + */ + $content = apply_filters( 'wpseo_pre_analysis_post_content', $post->post_content, $post ); + + if ( ! is_string( $content ) ) { + $content = ''; + } + + return $content; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-fields.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-fields.php new file mode 100644 index 00000000..07771ccb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-fields.php @@ -0,0 +1,75 @@ +postmeta + WHERE meta_key NOT BETWEEN '_' AND '_z' AND SUBSTRING(meta_key, 1, 1) != '_' + LIMIT %d"; + $fields = $wpdb->get_col( $wpdb->prepare( $sql, $limit ) ); + + /** + * Filters the custom fields that are auto-completed and replaced as replacement variables + * in the meta box and sidebar. + * + * @param string[] $fields The custom field names. + */ + $fields = apply_filters( 'wpseo_replacement_variables_custom_fields', $fields ); + + if ( is_array( $fields ) ) { + self::$custom_fields = array_map( [ 'WPSEO_Custom_Fields', 'add_custom_field_prefix' ], $fields ); + } + + return self::$custom_fields; + } + + /** + * Adds the cf_ prefix to a field. + * + * @param string $field The field to prefix. + * + * @return string The prefixed field. + */ + private static function add_custom_field_prefix( $field ) { + return 'cf_' . $field; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-taxonomies.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-taxonomies.php new file mode 100644 index 00000000..40b8ba23 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-custom-taxonomies.php @@ -0,0 +1,72 @@ + true, + '_builtin' => false, + ]; + $custom_taxonomies = get_taxonomies( $args, 'names', 'and' ); + + if ( is_array( $custom_taxonomies ) ) { + foreach ( $custom_taxonomies as $custom_taxonomy ) { + array_push( + self::$custom_taxonomies, + self::add_custom_taxonomies_prefix( $custom_taxonomy ), + self::add_custom_taxonomies_description_prefix( $custom_taxonomy ) + ); + } + } + + return self::$custom_taxonomies; + } + + /** + * Adds the ct_ prefix to a taxonomy. + * + * @param string $taxonomy The taxonomy to prefix. + * + * @return string The prefixed taxonomy. + */ + private static function add_custom_taxonomies_prefix( $taxonomy ) { + return 'ct_' . $taxonomy; + } + + /** + * Adds the ct_desc_ prefix to a taxonomy. + * + * @param string $taxonomy The taxonomy to prefix. + * + * @return string The prefixed taxonomy. + */ + private static function add_custom_taxonomies_description_prefix( $taxonomy ) { + return 'ct_desc_' . $taxonomy; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-image-utils.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-image-utils.php new file mode 100644 index 00000000..4b606130 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-image-utils.php @@ -0,0 +1,537 @@ + $sizes The array of image sizes to loop through. + */ + return apply_filters( 'wpseo_image_sizes', [ 'full', 'large', 'medium_large' ] ); + } + + /** + * Grabs an image alt text. + * + * @param int $attachment_id The attachment ID. + * + * @return string The image alt text. + */ + public static function get_alt_tag( $attachment_id ) { + return (string) get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ); + } + + /** + * Checks whether an img sizes up to the parameters. + * + * @param array $dimensions The image values. + * @param array $usable_dimensions The parameters to check against. + * + * @return bool True if the image has usable measurements, false if not. + */ + private static function has_usable_dimensions( $dimensions, $usable_dimensions ) { + foreach ( [ 'width', 'height' ] as $param ) { + $minimum = $usable_dimensions[ 'min_' . $param ]; + $maximum = $usable_dimensions[ 'max_' . $param ]; + + $current = $dimensions[ $param ]; + if ( ( $current < $minimum ) || ( $current > $maximum ) ) { + return false; + } + } + + return true; + } + + /** + * Gets the post's first usable content image. Null if none is available. + * + * @param int|null $post_id The post id. + * + * @return string|null The image URL. + */ + public static function get_first_usable_content_image_for_post( $post_id = null ) { + $post = get_post( $post_id ); + + // We know get_post() returns the post or null. + if ( ! $post ) { + return null; + } + + $image_finder = new WPSEO_Content_Images(); + $images = $image_finder->get_images( $post->ID, $post ); + + return self::get_first_image( $images ); + } + + /** + * Gets the term's first usable content image. Null if none is available. + * + * @param int $term_id The term id. + * + * @return string|null The image URL. + */ + public static function get_first_content_image_for_term( $term_id ) { + $term_description = term_description( $term_id ); + + // We know term_description() returns a string which may be empty. + if ( $term_description === '' ) { + return null; + } + + $image_finder = new WPSEO_Content_Images(); + $images = $image_finder->get_images_from_content( $term_description ); + + return self::get_first_image( $images ); + } + + /** + * Retrieves an attachment ID for an image uploaded in the settings. + * + * Due to self::get_attachment_by_url returning 0 instead of false. + * 0 is also a possibility when no ID is available. + * + * @param string $setting The setting the image is stored in. + * + * @return int|bool The attachment id, or false or 0 if no ID is available. + */ + public static function get_attachment_id_from_settings( $setting ) { + $image_id = WPSEO_Options::get( $setting . '_id', false ); + if ( $image_id ) { + return $image_id; + } + + $image = WPSEO_Options::get( $setting, false ); + if ( $image ) { + // There is not an option to put a URL in an image field in the settings anymore, only to upload it through the media manager. + // This means an attachment always exists, so doing this is only needed once. + $image_id = self::get_attachment_by_url( $image ); + } + + // Only store a new ID if it is not 0, to prevent an update loop. + if ( $image_id ) { + WPSEO_Options::set( $setting . '_id', $image_id ); + } + + return $image_id; + } + + /** + * Retrieves the first possible image url from an array of images. + * + * @param array $images The array to extract image url from. + * + * @return string|null The extracted image url when found, null when not found. + */ + protected static function get_first_image( $images ) { + if ( ! is_array( $images ) ) { + return null; + } + + $images = array_filter( $images ); + if ( empty( $images ) ) { + return null; + } + + return reset( $images ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php new file mode 100644 index 00000000..71f6a1a9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-installation.php @@ -0,0 +1,48 @@ +is_first_install(); + + if ( $is_first_install && WPSEO_Utils::is_api_available() ) { + add_action( 'wpseo_activate', [ $this, 'set_first_install_options' ] ); + } + } + + /** + * When the option doesn't exist, it should be a new install. + * + * @return bool + */ + private function is_first_install() { + return ( get_option( 'wpseo' ) === false ); + } + + /** + * Sets the options on first install for showing the installation notice and disabling of the settings pages. + * + * @return void + */ + public function set_first_install_options() { + $options = get_option( 'wpseo' ); + + $options['show_onboarding_notice'] = true; + $options['first_activated_on'] = time(); + + update_option( 'wpseo', $options ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php new file mode 100644 index 00000000..54d6dc91 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-meta.php @@ -0,0 +1,1086 @@ + (string) field type. i.e. text / textarea / checkbox / + * radio / select / multiselect / upload etc. + * (required) 'title' => (string) table row title. + * (recommended) 'default_value' => (string|array) default value for the field. + * IMPORTANT: + * - if the field has options, the default has to be the + * key of one of the options. + * - if the field is a text field, the default **has** to be + * an empty string as otherwise the user can't save + * an empty value/delete the meta value. + * - if the field is a checkbox, the only valid values + * are 'on' or 'off'. + * (semi-required) 'options' => (array) options for used with (multi-)select and radio + * fields, required if that's the field type. + * key = (string) value which will be saved to db. + * value = (string) text label for the option. + * (optional) 'autocomplete' => (bool) whether autocomplete is on for text fields, + * defaults to true. + * (optional) 'class' => (string) classname(s) to add to the actual tag. + * (optional) 'description' => (string) description to show underneath the field. + * (optional) 'expl' => (string) label for a checkbox. + * (optional) 'help' => (string) help text to show on mouse over ? image. + * (optional) 'rows' => (int) number of rows for a textarea, defaults to 3. + * (optional) 'placeholder' => (string) Currently only used by add-on plugins. + * (optional) 'serialized' => (bool) whether the value is expected to be serialized, + * i.e. an array or object, defaults to false. + * Currently only used by add-on plugins. + */ + public static $meta_fields = [ + 'general' => [ + 'focuskw' => [ + 'type' => 'hidden', + 'title' => '', + ], + 'title' => [ + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + 'help' => '', // Translation added later. + ], + 'metadesc' => [ + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '', + 'class' => 'metadesc', + 'rows' => 2, + 'description' => '', // Translation added later. + 'help' => '', // Translation added later. + ], + 'linkdex' => [ + 'type' => 'hidden', + 'title' => 'linkdex', + 'default_value' => '0', + 'description' => '', + ], + 'content_score' => [ + 'type' => 'hidden', + 'title' => 'content_score', + 'default_value' => '0', + 'description' => '', + ], + 'inclusive_language_score' => [ + 'type' => 'hidden', + 'title' => 'inclusive_language_score', + 'default_value' => '0', + 'description' => '', + ], + 'is_cornerstone' => [ + 'type' => 'hidden', + 'title' => 'is_cornerstone', + 'default_value' => 'false', + 'description' => '', + ], + ], + 'advanced' => [ + 'meta-robots-noindex' => [ + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '0', // = post-type default. + 'options' => [ + '0' => '', // Post type default - translation added later. + '2' => '', // Index - translation added later. + '1' => '', // No-index - translation added later. + ], + ], + 'meta-robots-nofollow' => [ + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '0', // = follow. + 'options' => [ + '0' => '', // Follow - translation added later. + '1' => '', // No-follow - translation added later. + ], + ], + 'meta-robots-adv' => [ + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + 'options' => [ + 'noimageindex' => '', // Translation added later. + 'noarchive' => '', // Translation added later. + 'nosnippet' => '', // Translation added later. + ], + ], + 'bctitle' => [ + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ], + 'canonical' => [ + 'type' => 'hidden', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ], + 'redirect' => [ + 'type' => 'url', + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ], + ], + 'social' => [], + 'schema' => [ + 'schema_page_type' => [ + 'type' => 'hidden', + 'title' => '', + 'options' => Schema_Types::PAGE_TYPES, + ], + 'schema_article_type' => [ + 'type' => 'hidden', + 'title' => '', + 'hide_on_pages' => true, + 'options' => Schema_Types::ARTICLE_TYPES, + ], + ], + /* Fields we should validate & save, but not show on any form. */ + 'non_form' => [ + 'linkdex' => [ + 'type' => null, + 'default_value' => '0', + ], + ], + ]; + + /** + * Helper property - reverse index of the definition array. + * + * Format: [full meta key including prefix] => array + * ['subset'] => (string) primary index + * ['key'] => (string) internal key + * + * @var array + */ + public static $fields_index = []; + + /** + * Helper property - array containing only the defaults in the format: + * [full meta key including prefix] => (string) default value + * + * @var array + */ + public static $defaults = []; + + /** + * Helper property to define the social network meta field definitions - networks. + * + * @var array + */ + private static $social_networks = [ + 'opengraph' => 'opengraph', + 'twitter' => 'twitter', + ]; + + /** + * Helper property to define the social network meta field definitions - fields and their type. + * + * @var array + */ + private static $social_fields = [ + 'title' => 'hidden', + 'description' => 'hidden', + 'image' => 'hidden', + 'image-id' => 'hidden', + ]; + + /** + * Register our actions and filters. + * + * @return void + */ + public static function init() { + foreach ( self::$social_networks as $option => $network ) { + if ( WPSEO_Options::get( $option, false ) === true ) { + foreach ( self::$social_fields as $box => $type ) { + self::$meta_fields['social'][ $network . '-' . $box ] = [ + 'type' => $type, + 'title' => '', // Translation added later. + 'default_value' => '', + 'description' => '', // Translation added later. + ]; + } + } + } + unset( $option, $network, $box, $type ); + + /** + * Allow add-on plugins to register their meta fields for management by this class. + * Calls to add_filter() must be made before plugins_loaded prio 14. + */ + $extra_fields = apply_filters( 'add_extra_wpseo_meta_fields', [] ); + if ( is_array( $extra_fields ) ) { + self::$meta_fields = self::array_merge_recursive_distinct( $extra_fields, self::$meta_fields ); + } + unset( $extra_fields ); + + foreach ( self::$meta_fields as $subset => $field_group ) { + foreach ( $field_group as $key => $field_def ) { + + register_meta( + 'post', + self::$meta_prefix . $key, + [ 'sanitize_callback' => [ self::class, 'sanitize_post_meta' ] ] + ); + + // Set the $fields_index property for efficiency. + self::$fields_index[ self::$meta_prefix . $key ] = [ + 'subset' => $subset, + 'key' => $key, + ]; + + // Set the $defaults property for efficiency. + if ( isset( $field_def['default_value'] ) ) { + self::$defaults[ self::$meta_prefix . $key ] = $field_def['default_value']; + } + else { + // Meta will always be a string, so let's make the meta meta default also a string. + self::$defaults[ self::$meta_prefix . $key ] = ''; + } + } + } + unset( $subset, $field_group, $key, $field_def ); + + self::filter_schema_article_types(); + + add_filter( 'update_post_metadata', [ self::class, 'remove_meta_if_default' ], 10, 5 ); + add_filter( 'add_post_metadata', [ self::class, 'dont_save_meta_if_default' ], 10, 4 ); + } + + /** + * Retrieve the meta box form field definitions for the given tab and post type. + * + * @param string $tab Tab for which to retrieve the field definitions. + * @param string $post_type Post type of the current post. + * + * @return array Array containing the meta box field definitions. + */ + public static function get_meta_field_defs( $tab, $post_type = 'post' ) { + if ( ! isset( self::$meta_fields[ $tab ] ) ) { + return []; + } + + $field_defs = self::$meta_fields[ $tab ]; + + switch ( $tab ) { + case 'non-form': + // Prevent non-form fields from being passed to forms. + $field_defs = []; + break; + + case 'advanced': + global $post; + + if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) && WPSEO_Options::get( 'disableadvanced_meta' ) ) { + return []; + } + + $post_type = ''; + if ( isset( $post->post_type ) ) { + $post_type = $post->post_type; + } + elseif ( ! isset( $post->post_type ) && isset( $_GET['post_type'] ) ) { + $post_type = sanitize_text_field( $_GET['post_type'] ); + } + + if ( $post_type === '' ) { + return []; + } + + /* Adjust the no-index text strings based on the post type. */ + $post_type_object = get_post_type_object( $post_type ); + + $field_defs['meta-robots-noindex']['title'] = sprintf( $field_defs['meta-robots-noindex']['title'], $post_type_object->labels->singular_name ); + $field_defs['meta-robots-noindex']['options']['0'] = sprintf( $field_defs['meta-robots-noindex']['options']['0'], ( ( WPSEO_Options::get( 'noindex-' . $post_type, false ) === true ) ? $field_defs['meta-robots-noindex']['options']['1'] : $field_defs['meta-robots-noindex']['options']['2'] ), $post_type_object->label ); + $field_defs['meta-robots-nofollow']['title'] = sprintf( $field_defs['meta-robots-nofollow']['title'], $post_type_object->labels->singular_name ); + + /* Don't show the breadcrumb title field if breadcrumbs aren't enabled. */ + if ( WPSEO_Options::get( 'breadcrumbs-enable', false ) !== true && ! current_theme_supports( 'yoast-seo-breadcrumbs' ) ) { + unset( $field_defs['bctitle'] ); + } + + if ( empty( $post->ID ) || ( ! empty( $post->ID ) && self::get_value( 'redirect', $post->ID ) === '' ) ) { + unset( $field_defs['redirect'] ); + } + break; + + case 'schema': + if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) && WPSEO_Options::get( 'disableadvanced_meta' ) ) { + return []; + } + + $field_defs['schema_page_type']['default'] = WPSEO_Options::get( 'schema-page-type-' . $post_type ); + + $article_helper = new Article_Helper(); + if ( $article_helper->is_article_post_type( $post_type ) ) { + $default_schema_article_type = WPSEO_Options::get( 'schema-article-type-' . $post_type ); + + /** This filter is documented in inc/options/class-wpseo-option-titles.php */ + $allowed_article_types = apply_filters( 'wpseo_schema_article_types', Schema_Types::ARTICLE_TYPES ); + + if ( ! array_key_exists( $default_schema_article_type, $allowed_article_types ) ) { + $default_schema_article_type = WPSEO_Options::get_default( 'wpseo_titles', 'schema-article-type-' . $post_type ); + } + $field_defs['schema_article_type']['default'] = $default_schema_article_type; + } + else { + unset( $field_defs['schema_article_type'] ); + } + + break; + } + + /** + * Filter the WPSEO metabox form field definitions for a tab. + * {tab} can be 'general', 'advanced' or 'social'. + * + * @param array $field_defs Metabox form field definitions. + * @param string $post_type Post type of the post the metabox is for, defaults to 'post'. + * + * @return array + */ + return apply_filters( 'wpseo_metabox_entries_' . $tab, $field_defs, $post_type ); + } + + /** + * Validate the post meta values. + * + * @param mixed $meta_value The new value. + * @param string $meta_key The full meta key (including prefix). + * + * @return string Validated meta value. + */ + public static function sanitize_post_meta( $meta_value, $meta_key ) { + $field_def = self::$meta_fields[ self::$fields_index[ $meta_key ]['subset'] ][ self::$fields_index[ $meta_key ]['key'] ]; + $clean = self::$defaults[ $meta_key ]; + + switch ( true ) { + case ( $meta_key === self::$meta_prefix . 'linkdex' ): + $int = WPSEO_Utils::validate_int( $meta_value ); + if ( $int !== false && $int >= 0 ) { + $clean = strval( $int ); // Convert to string to make sure default check works. + } + break; + + case ( $field_def['type'] === 'checkbox' ): + // Only allow value if it's one of the predefined options. + if ( in_array( $meta_value, [ 'on', 'off' ], true ) ) { + $clean = $meta_value; + } + break; + + case ( $field_def['type'] === 'select' || $field_def['type'] === 'radio' ): + // Only allow value if it's one of the predefined options. + if ( isset( $field_def['options'][ $meta_value ] ) ) { + $clean = $meta_value; + } + break; + + case ( $field_def['type'] === 'hidden' && $meta_key === self::$meta_prefix . 'meta-robots-adv' ): + $clean = self::validate_meta_robots_adv( $meta_value ); + break; + + case ( $field_def['type'] === 'url' || $meta_key === self::$meta_prefix . 'canonical' ): + // Validate as url(-part). + $url = WPSEO_Utils::sanitize_url( $meta_value ); + if ( $url !== '' ) { + $clean = $url; + } + break; + + case ( $field_def['type'] === 'upload' && in_array( $meta_key, [ self::$meta_prefix . 'opengraph-image', self::$meta_prefix . 'twitter-image' ], true ) ): + // Validate as url. + $url = WPSEO_Utils::sanitize_url( $meta_value, [ 'http', 'https', 'ftp', 'ftps' ] ); + if ( $url !== '' ) { + $clean = $url; + } + break; + + case ( $field_def['type'] === 'hidden' && $meta_key === self::$meta_prefix . 'is_cornerstone' ): + $clean = $meta_value; + + /* + * This used to be a checkbox, then became a hidden input. + * To make sure the value remains consistent, we cast 'true' to '1'. + */ + if ( $meta_value === 'true' ) { + $clean = '1'; + } + break; + + case ( $field_def['type'] === 'hidden' && isset( $field_def['options'] ) ): + // Only allow value if it's one of the predefined options. + if ( isset( $field_def['options'][ $meta_value ] ) ) { + $clean = $meta_value; + } + break; + + case ( $field_def['type'] === 'textarea' ): + if ( is_string( $meta_value ) ) { + // Remove line breaks and tabs. + // @todo [JRF => Yoast] Verify that line breaks and the likes aren't allowed/recommended in meta header fields. + $meta_value = str_replace( [ "\n", "\r", "\t", ' ' ], ' ', $meta_value ); + $clean = WPSEO_Utils::sanitize_text_field( trim( $meta_value ) ); + } + break; + + case ( $field_def['type'] === 'multiselect' ): + $clean = $meta_value; + break; + + case ( $field_def['type'] === 'text' ): + default: + if ( is_string( $meta_value ) ) { + $clean = WPSEO_Utils::sanitize_text_field( trim( $meta_value ) ); + } + + break; + } + + $clean = apply_filters( 'wpseo_sanitize_post_meta_' . $meta_key, $clean, $meta_value, $field_def, $meta_key ); + + return $clean; + } + + /** + * Validate a meta-robots-adv meta value. + * + * @todo [JRF => Yoast] Verify that this logic for the prioritisation is correct. + * + * @param array|string $meta_value The value to validate. + * + * @return string Clean value. + */ + public static function validate_meta_robots_adv( $meta_value ) { + $clean = self::$meta_fields['advanced']['meta-robots-adv']['default_value']; + $options = self::$meta_fields['advanced']['meta-robots-adv']['options']; + + if ( is_string( $meta_value ) ) { + $meta_value = explode( ',', $meta_value ); + } + + if ( is_array( $meta_value ) && $meta_value !== [] ) { + $meta_value = array_map( 'trim', $meta_value ); + + // Individual selected entries. + $cleaning = []; + foreach ( $meta_value as $value ) { + if ( isset( $options[ $value ] ) ) { + $cleaning[] = $value; + } + } + + if ( $cleaning !== [] ) { + $clean = implode( ',', $cleaning ); + } + unset( $cleaning, $value ); + } + + return $clean; + } + + /** + * Prevent saving of default values and remove potential old value from the database if replaced by a default. + * + * @param bool $check The current status to allow updating metadata for the given type. + * @param int $object_id ID of the current object for which the meta is being updated. + * @param string $meta_key The full meta key (including prefix). + * @param string $meta_value New meta value. + * @param string $prev_value The old meta value. + * + * @return bool|null True = stop saving, null = continue saving. + */ + public static function remove_meta_if_default( $check, $object_id, $meta_key, $meta_value, $prev_value = '' ) { + /* If it's one of our meta fields, check against default. */ + if ( isset( self::$fields_index[ $meta_key ] ) && self::meta_value_is_default( $meta_key, $meta_value ) === true ) { + if ( $prev_value !== '' ) { + delete_post_meta( $object_id, $meta_key, $prev_value ); + } + else { + delete_post_meta( $object_id, $meta_key ); + } + + return true; // Stop saving the value. + } + + return $check; // Go on with the normal execution (update) in meta.php. + } + + /** + * Prevent adding of default values to the database. + * + * @param bool $check The current status to allow adding metadata for the given type. + * @param int $object_id ID of the current object for which the meta is being added. + * @param string $meta_key The full meta key (including prefix). + * @param string $meta_value New meta value. + * + * @return bool|null True = stop saving, null = continue saving. + */ + public static function dont_save_meta_if_default( $check, $object_id, $meta_key, $meta_value ) { + /* If it's one of our meta fields, check against default. */ + if ( isset( self::$fields_index[ $meta_key ] ) && self::meta_value_is_default( $meta_key, $meta_value ) === true ) { + return true; // Stop saving the value. + } + + return $check; // Go on with the normal execution (add) in meta.php. + } + + /** + * Is the given meta value the same as the default value ? + * + * @param string $meta_key The full meta key (including prefix). + * @param mixed $meta_value The value to check. + * + * @return bool + */ + public static function meta_value_is_default( $meta_key, $meta_value ) { + return ( isset( self::$defaults[ $meta_key ] ) && $meta_value === self::$defaults[ $meta_key ] ); + } + + /** + * Get a custom post meta value. + * + * Returns the default value if the meta value has not been set. + * + * {@internal Unfortunately there isn't a filter available to hook into before returning + * the results for get_post_meta(), get_post_custom() and the likes. That + * would have been the preferred solution.}} + * + * @param string $key Internal key of the value to get (without prefix). + * @param int $postid Post ID of the post to get the value for. + * + * @return string All 'normal' values returned from get_post_meta() are strings. + * Objects and arrays are possible, but not used by this plugin + * and therefore discarted (except when the special 'serialized' field def + * value is set to true - only used by add-on plugins for now). + * Will return the default value if no value was found. + * Will return empty string if no default was found (not one of our keys) or + * if the post does not exist. + */ + public static function get_value( $key, $postid = 0 ) { + global $post; + + $postid = absint( $postid ); + if ( $postid === 0 ) { + if ( ( isset( $post ) && is_object( $post ) ) && ( isset( $post->post_status ) && $post->post_status !== 'auto-draft' ) ) { + $postid = $post->ID; + } + else { + return ''; + } + } + + $custom = get_post_custom( $postid ); // Array of strings or empty array. + $table_key = self::$meta_prefix . $key; + + // Populate the field_def using the field_index lookup array. + $field_def = []; + if ( isset( self::$fields_index[ $table_key ] ) ) { + $field_def = self::$meta_fields[ self::$fields_index[ $table_key ]['subset'] ][ self::$fields_index[ $table_key ]['key'] ]; + } + + // Check if we have a custom post meta entry. + if ( isset( $custom[ $table_key ][0] ) ) { + $unserialized = maybe_unserialize( $custom[ $table_key ][0] ); + + // Check if it is already unserialized. + if ( $custom[ $table_key ][0] === $unserialized ) { + return $custom[ $table_key ][0]; + } + + // Check whether we need to unserialize it. + if ( isset( $field_def['serialized'] ) && $field_def['serialized'] === true ) { + // Ok, serialize value expected/allowed. + return $unserialized; + } + } + + // Meta was either not found or found, but object/array while not allowed to be. + if ( isset( self::$defaults[ self::$meta_prefix . $key ] ) ) { + // Update the default value to the current post type. + switch ( $key ) { + case 'schema_page_type': + case 'schema_article_type': + return ''; + } + + return self::$defaults[ self::$meta_prefix . $key ]; + } + + /* + * Shouldn't ever happen, means not one of our keys as there will always be a default available + * for all our keys. + */ + return ''; + } + + /** + * Update a meta value for a post. + * + * @param string $key The internal key of the meta value to change (without prefix). + * @param mixed $meta_value The value to set the meta to. + * @param int $post_id The ID of the post to change the meta for. + * + * @return bool Whether the value was changed. + */ + public static function set_value( $key, $meta_value, $post_id ) { + /* + * Slash the data, because `update_metadata` will unslash it and we have already unslashed it. + * Related issue: https://github.com/Yoast/YoastSEO.js/issues/2158 + */ + $meta_value = wp_slash( $meta_value ); + + return update_post_meta( $post_id, self::$meta_prefix . $key, $meta_value ); + } + + /** + * Deletes a meta value for a post. + * + * @param string $key The internal key of the meta value to change (without prefix). + * @param int $post_id The ID of the post to delete the meta for. + * + * @return bool Whether the delete was successful or not. + */ + public static function delete( $key, $post_id ) { + return delete_post_meta( $post_id, self::$meta_prefix . $key ); + } + + /** + * Used for imports, this functions imports the value of $old_metakey into $new_metakey for those post + * where no WPSEO meta data has been set. + * Optionally deletes the $old_metakey values. + * + * @param string $old_metakey The old key of the meta value. + * @param string $new_metakey The new key, usually the WPSEO meta key (including prefix). + * @param bool $delete_old Whether to delete the old meta key/value-sets. + * + * @return void + */ + public static function replace_meta( $old_metakey, $new_metakey, $delete_old = false ) { + global $wpdb; + + /* + * Get only those rows where no wpseo meta values exist for the same post + * (with the exception of linkdex as that will be set independently of whether the post has been edited). + * + * {@internal Query is pretty well optimized this way.}} + */ + $query = $wpdb->prepare( + " + SELECT `a`.* + FROM {$wpdb->postmeta} AS a + WHERE `a`.`meta_key` = %s + AND NOT EXISTS ( + SELECT DISTINCT `post_id` , count( `meta_id` ) AS count + FROM {$wpdb->postmeta} AS b + WHERE `a`.`post_id` = `b`.`post_id` + AND `meta_key` LIKE %s + AND `meta_key` <> %s + GROUP BY `post_id` + ) + ;", + $old_metakey, + $wpdb->esc_like( self::$meta_prefix . '%' ), + self::$meta_prefix . 'linkdex' + ); + $oldies = $wpdb->get_results( $query ); + + if ( is_array( $oldies ) && $oldies !== [] ) { + foreach ( $oldies as $old ) { + update_post_meta( $old->post_id, $new_metakey, $old->meta_value ); + } + } + + // Delete old keys. + if ( $delete_old === true ) { + delete_post_meta_by_key( $old_metakey ); + } + } + + /** + * General clean-up of the saved meta values. + * - Remove potentially lingering old meta keys; + * - Remove all default and invalid values. + * + * @return void + */ + public static function clean_up() { + global $wpdb; + + /* + * Clean up '_yoast_wpseo_meta-robots'. + * + * Retrieve all '_yoast_wpseo_meta-robots' meta values and convert if no new values found. + * + * {@internal Query is pretty well optimized this way.}} + * + * @todo [JRF => Yoast] Find out all possible values which the old '_yoast_wpseo_meta-robots' could contain + * to convert the data correctly. + */ + $query = $wpdb->prepare( + " + SELECT `a`.* + FROM {$wpdb->postmeta} AS a + WHERE `a`.`meta_key` = %s + AND NOT EXISTS ( + SELECT DISTINCT `post_id` , count( `meta_id` ) AS count + FROM {$wpdb->postmeta} AS b + WHERE `a`.`post_id` = `b`.`post_id` + AND ( `meta_key` = %s + OR `meta_key` = %s ) + GROUP BY `post_id` + ) + ;", + self::$meta_prefix . 'meta-robots', + self::$meta_prefix . 'meta-robots-noindex', + self::$meta_prefix . 'meta-robots-nofollow' + ); + $oldies = $wpdb->get_results( $query ); + + if ( is_array( $oldies ) && $oldies !== [] ) { + foreach ( $oldies as $old ) { + $old_values = explode( ',', $old->meta_value ); + foreach ( $old_values as $value ) { + if ( $value === 'noindex' ) { + update_post_meta( $old->post_id, self::$meta_prefix . 'meta-robots-noindex', 1 ); + } + elseif ( $value === 'nofollow' ) { + update_post_meta( $old->post_id, self::$meta_prefix . 'meta-robots-nofollow', 1 ); + } + } + } + } + unset( $query, $oldies, $old, $old_values, $value ); + + // Delete old keys. + delete_post_meta_by_key( self::$meta_prefix . 'meta-robots' ); + + /* + * Remove all default values and (most) invalid option values. + * Invalid option values for the multiselect (meta-robots-adv) field will be dealt with seperately. + * + * {@internal Some of the defaults have changed in v1.5, but as the defaults will + * be removed and new defaults will now automatically be passed when no + * data found, this update is automatic (as long as we remove the old + * values which we do in the below routine).}} + * + * {@internal Unfortunately we can't use the normal delete_meta() with key/value combination + * as '' (empty string) values will be ignored and would result in all metas + * with that key being deleted, not just the empty fields. + * Still, the below implementation is largely based on the delete_meta() function.}} + */ + $query = []; + + foreach ( self::$meta_fields as $subset => $field_group ) { + foreach ( $field_group as $key => $field_def ) { + if ( ! isset( $field_def['default_value'] ) ) { + continue; + } + + if ( isset( $field_def['options'] ) && is_array( $field_def['options'] ) && $field_def['options'] !== [] ) { + $valid = $field_def['options']; + // Remove the default value from the valid options. + unset( $valid[ $field_def['default_value'] ] ); + $valid = array_keys( $valid ); + + $query[] = $wpdb->prepare( + "( meta_key = %s AND meta_value NOT IN ( '" . implode( "','", esc_sql( $valid ) ) . "' ) )", + self::$meta_prefix . $key + ); + unset( $valid ); + } + elseif ( is_string( $field_def['default_value'] ) && $field_def['default_value'] !== '' ) { + $query[] = $wpdb->prepare( + '( meta_key = %s AND meta_value = %s )', + self::$meta_prefix . $key, + $field_def['default_value'] + ); + } + else { + $query[] = $wpdb->prepare( + "( meta_key = %s AND meta_value = '' )", + self::$meta_prefix . $key + ); + } + } + } + unset( $subset, $field_group, $key, $field_def ); + + $query = "SELECT meta_id FROM {$wpdb->postmeta} WHERE " . implode( ' OR ', $query ) . ';'; + $meta_ids = $wpdb->get_col( $query ); + + if ( is_array( $meta_ids ) && $meta_ids !== [] ) { + // WP native action. + do_action( 'delete_post_meta', $meta_ids, null, null, null ); + + $query = "DELETE FROM {$wpdb->postmeta} WHERE meta_id IN( " . implode( ',', $meta_ids ) . ' )'; + $count = $wpdb->query( $query ); + + if ( $count ) { + foreach ( $meta_ids as $object_id ) { + wp_cache_delete( $object_id, 'post_meta' ); + } + + // WP native action. + do_action( 'deleted_post_meta', $meta_ids, null, null, null ); + } + } + unset( $query, $meta_ids, $count, $object_id ); + + /* + * Deal with the multiselect (meta-robots-adv) field. + * + * Removes invalid option combinations, such as 'none,noarchive'. + * + * Default values have already been removed, so we should have a small result set and + * (hopefully) even smaller set of invalid results. + */ + $query = $wpdb->prepare( + "SELECT meta_id, meta_value FROM {$wpdb->postmeta} WHERE meta_key = %s", + self::$meta_prefix . 'meta-robots-adv' + ); + $oldies = $wpdb->get_results( $query ); + + if ( is_array( $oldies ) && $oldies !== [] ) { + foreach ( $oldies as $old ) { + $clean = self::validate_meta_robots_adv( $old->meta_value ); + + if ( $clean !== $old->meta_value ) { + if ( $clean !== self::$meta_fields['advanced']['meta-robots-adv']['default_value'] ) { + update_metadata_by_mid( 'post', $old->meta_id, $clean ); + } + else { + delete_metadata_by_mid( 'post', $old->meta_id ); + } + } + } + } + unset( $query, $oldies, $old, $clean ); + + do_action( 'wpseo_meta_clean_up' ); + } + + /** + * Recursively merge a variable number of arrays, using the left array as base, + * giving priority to the right array. + * + * Difference with native array_merge_recursive(): + * array_merge_recursive converts values with duplicate keys to arrays rather than + * overwriting the value in the first array with the duplicate value in the second array. + * + * array_merge_recursive_distinct does not change the data types of the values in the arrays. + * Matching keys' values in the second array overwrite those in the first array, as is the + * case with array_merge. + * + * Freely based on information found on http://www.php.net/manual/en/function.array-merge-recursive.php + * + * {@internal Should be moved to a general utility class.}} + * + * @return array + */ + public static function array_merge_recursive_distinct() { + + $arrays = func_get_args(); + if ( count( $arrays ) < 2 ) { + if ( $arrays === [] ) { + return []; + } + else { + return $arrays[0]; + } + } + + $merged = array_shift( $arrays ); + + foreach ( $arrays as $array ) { + foreach ( $array as $key => $value ) { + if ( is_array( $value ) && ( isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) ) { + $merged[ $key ] = self::array_merge_recursive_distinct( $merged[ $key ], $value ); + } + else { + $merged[ $key ] = $value; + } + } + unset( $key, $value ); + } + + return $merged; + } + + /** + * Counts the total of all the keywords being used for posts except the given one. + * + * @param string $keyword The keyword to be counted. + * @param int $post_id The id of the post to which the keyword belongs. + * + * @return array + */ + public static function keyword_usage( $keyword, $post_id ) { + + if ( empty( $keyword ) ) { + return []; + } + + /** + * The indexable repository. + * + * @var Indexable_Repository + */ + $repository = YoastSEO()->classes->get( Indexable_Repository::class ); + + $post_ids = $repository->query() + ->select( 'object_id' ) + ->where( 'primary_focus_keyword', $keyword ) + ->where( 'object_type', 'post' ) + ->where_not_equal( 'object_id', $post_id ) + ->where_not_equal( 'post_status', 'trash' ) + ->limit( 2 ) // Limit to 2 results to save time and resources. + ->find_array(); + + // Get object_id from each subarray in $post_ids. + $post_ids = ( is_array( $post_ids ) ) ? array_column( $post_ids, 'object_id' ) : []; + + /* + * If Premium is installed, get the additional keywords as well. + * We only check for the additional keywords if we've not already found two. + * In that case there's no use for an additional query as we already know + * that the keyword has been used multiple times before. + */ + if ( count( $post_ids ) < 2 ) { + /** + * Allows enhancing the array of posts' that share their focus keywords with the post's focus keywords. + * + * @param array $post_ids The array of posts' ids that share their related keywords with the post. + * @param string $keyword The keyword to search for. + * @param int $post_id The id of the post the keyword is associated to. + */ + $post_ids = apply_filters( 'wpseo_posts_for_focus_keyword', $post_ids, $keyword, $post_id ); + } + + return $post_ids; + } + + /** + * Returns the post types for the given post ids. + * + * @param array $post_ids The post ids to get the post types for. + * + * @return array The post types. + */ + public static function post_types_for_ids( $post_ids ) { + + /** + * The indexable repository. + * + * @var Indexable_Repository + */ + $repository = YoastSEO()->classes->get( Indexable_Repository::class ); + + // Check if post ids is not empty. + if ( ! empty( $post_ids ) ) { + // Get the post subtypes for the posts that share the keyword. + $post_types = $repository->query() + ->select( 'object_sub_type' ) + ->where_in( 'object_id', $post_ids ) + ->find_array(); + + // Get object_sub_type from each subarray in $post_ids. + $post_types = array_column( $post_types, 'object_sub_type' ); + } + else { + $post_types = []; + } + + return $post_types; + } + + /** + * Filter the schema article types. + * + * @return void + */ + public static function filter_schema_article_types() { + /** This filter is documented in inc/options/class-wpseo-option-titles.php */ + self::$meta_fields['schema']['schema_article_type']['options'] = apply_filters( 'wpseo_schema_article_types', self::$meta_fields['schema']['schema_article_type']['options'] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php new file mode 100644 index 00000000..f5a5ccc2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-primary-term.php @@ -0,0 +1,86 @@ +taxonomy_name = $taxonomy_name; + $this->post_ID = $post_id; + } + + /** + * Returns the primary term ID. + * + * @return int|bool + */ + public function get_primary_term() { + $primary_term = get_post_meta( $this->post_ID, WPSEO_Meta::$meta_prefix . 'primary_' . $this->taxonomy_name, true ); + + if ( ! $primary_term ) { + return false; + } + + $terms = $this->get_terms(); + + if ( ! in_array( (int) $primary_term, wp_list_pluck( $terms, 'term_id' ), true ) ) { + $primary_term = false; + } + + $primary_term = (int) $primary_term; + return ( $primary_term ) ? ( $primary_term ) : false; + } + + /** + * Sets the new primary term ID. + * + * @param int $new_primary_term New primary term ID. + * + * @return void + */ + public function set_primary_term( $new_primary_term ) { + update_post_meta( $this->post_ID, WPSEO_Meta::$meta_prefix . 'primary_' . $this->taxonomy_name, $new_primary_term ); + } + + /** + * Get the terms for the current post ID. + * When $terms is not an array, set $terms to an array. + * + * @return array + */ + protected function get_terms() { + $terms = get_the_terms( $this->post_ID, $this->taxonomy_name ); + + if ( ! is_array( $terms ) ) { + $terms = []; + } + + return $terms; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php new file mode 100644 index 00000000..e44c1e3c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-rank.php @@ -0,0 +1,338 @@ + [ + 'start' => 0, + 'end' => 0, + ], + self::BAD => [ + 'start' => 1, + 'end' => 40, + ], + self::OK => [ + 'start' => 41, + 'end' => 70, + ], + self::GOOD => [ + 'start' => 71, + 'end' => 100, + ], + ]; + + /** + * The current rank. + * + * @var int + */ + protected $rank; + + /** + * WPSEO_Rank constructor. + * + * @param int $rank The actual rank. + */ + public function __construct( $rank ) { + if ( ! in_array( $rank, self::$ranks, true ) ) { + $rank = self::BAD; + } + + $this->rank = $rank; + } + + /** + * Returns the saved rank for this rank. + * + * @return string + */ + public function get_rank() { + return $this->rank; + } + + /** + * Returns a CSS class for this rank. + * + * @return string + */ + public function get_css_class() { + $labels = [ + self::NO_FOCUS => 'na', + self::NO_INDEX => 'noindex', + self::BAD => 'bad', + self::OK => 'ok', + self::GOOD => 'good', + ]; + + return $labels[ $this->rank ]; + } + + /** + * Returns a label for this rank. + * + * @return string + */ + public function get_label() { + $labels = [ + self::NO_FOCUS => __( 'Not available', 'wordpress-seo' ), + self::NO_INDEX => __( 'No index', 'wordpress-seo' ), + self::BAD => __( 'Needs improvement', 'wordpress-seo' ), + self::OK => __( 'OK', 'wordpress-seo' ), + self::GOOD => __( 'Good', 'wordpress-seo' ), + ]; + + return $labels[ $this->rank ]; + } + + /** + * Returns an inclusive language label for this rank. + * The only difference with get_label above is that we return "Potentially non-inclusive" for an OK rank. + * + * @return string + */ + public function get_inclusive_language_label() { + if ( $this->rank === self::OK ) { + return __( 'Potentially non-inclusive', 'wordpress-seo' ); + } + return $this->get_label(); + } + + /** + * Returns a label for use in a drop down. + * + * @return mixed + */ + public function get_drop_down_label() { + $labels = [ + self::NO_FOCUS => sprintf( + /* translators: %s expands to the SEO score */ + __( 'SEO: %s', 'wordpress-seo' ), + __( 'No Focus Keyphrase', 'wordpress-seo' ) + ), + self::BAD => sprintf( + /* translators: %s expands to the SEO score */ + __( 'SEO: %s', 'wordpress-seo' ), + __( 'Needs improvement', 'wordpress-seo' ) + ), + self::OK => sprintf( + /* translators: %s expands to the SEO score */ + __( 'SEO: %s', 'wordpress-seo' ), + __( 'OK', 'wordpress-seo' ) + ), + self::GOOD => sprintf( + /* translators: %s expands to the SEO score */ + __( 'SEO: %s', 'wordpress-seo' ), + __( 'Good', 'wordpress-seo' ) + ), + self::NO_INDEX => sprintf( + /* translators: %s expands to the SEO score */ + __( 'SEO: %s', 'wordpress-seo' ), + __( 'Post Noindexed', 'wordpress-seo' ) + ), + ]; + + return $labels[ $this->rank ]; + } + + /** + * Gets the drop down labels for the readability score. + * + * @return string The readability rank label. + */ + public function get_drop_down_readability_labels() { + $labels = [ + self::BAD => sprintf( + /* translators: %s expands to the readability score */ + __( 'Readability: %s', 'wordpress-seo' ), + __( 'Needs improvement', 'wordpress-seo' ) + ), + self::OK => sprintf( + /* translators: %s expands to the readability score */ + __( 'Readability: %s', 'wordpress-seo' ), + __( 'OK', 'wordpress-seo' ) + ), + self::GOOD => sprintf( + /* translators: %s expands to the readability score */ + __( 'Readability: %s', 'wordpress-seo' ), + __( 'Good', 'wordpress-seo' ) + ), + ]; + + return $labels[ $this->rank ]; + } + + /** + * Gets the drop down labels for the inclusive language score. + * + * @return string The inclusive language rank label. + */ + public function get_drop_down_inclusive_language_labels() { + $labels = [ + self::BAD => sprintf( + /* translators: %s expands to the inclusive language score */ + __( 'Inclusive language: %s', 'wordpress-seo' ), + __( 'Needs improvement', 'wordpress-seo' ) + ), + self::OK => sprintf( + /* translators: %s expands to the inclusive language score */ + __( 'Inclusive language: %s', 'wordpress-seo' ), + __( 'Potentially non-inclusive', 'wordpress-seo' ) + ), + self::GOOD => sprintf( + /* translators: %s expands to the inclusive language score */ + __( 'Inclusive language: %s', 'wordpress-seo' ), + __( 'Good', 'wordpress-seo' ) + ), + ]; + + return $labels[ $this->rank ]; + } + + /** + * Get the starting score for this rank. + * + * @return int The start score. + */ + public function get_starting_score() { + // No index does not have a starting score. + if ( $this->rank === self::NO_INDEX ) { + return -1; + } + + return self::$ranges[ $this->rank ]['start']; + } + + /** + * Get the ending score for this rank. + * + * @return int The end score. + */ + public function get_end_score() { + // No index does not have an end score. + if ( $this->rank === self::NO_INDEX ) { + return -1; + } + + return self::$ranges[ $this->rank ]['end']; + } + + /** + * Returns a rank for a specific numeric score. + * + * @param int $score The score to determine a rank for. + * + * @return self + */ + public static function from_numeric_score( $score ) { + // Set up the default value. + $rank = new self( self::BAD ); + + foreach ( self::$ranges as $rank_index => $range ) { + if ( $range['start'] <= $score && $score <= $range['end'] ) { + $rank = new self( $rank_index ); + break; + } + } + + return $rank; + } + + /** + * Returns a list of all possible SEO Ranks. + * + * @return WPSEO_Rank[] + */ + public static function get_all_ranks() { + return array_map( [ 'WPSEO_Rank', 'create_rank' ], self::$ranks ); + } + + /** + * Returns a list of all possible Readability Ranks. + * + * @return WPSEO_Rank[] + */ + public static function get_all_readability_ranks() { + return array_map( [ 'WPSEO_Rank', 'create_rank' ], [ self::BAD, self::OK, self::GOOD ] ); + } + + /** + * Returns a list of all possible Inclusive Language Ranks. + * + * @return WPSEO_Rank[] + */ + public static function get_all_inclusive_language_ranks() { + return array_map( [ 'WPSEO_Rank', 'create_rank' ], [ self::BAD, self::OK, self::GOOD ] ); + } + + /** + * Converts a numeric rank into a WPSEO_Rank object, for use in functional array_* functions. + * + * @param string $rank SEO Rank. + * + * @return WPSEO_Rank + */ + private static function create_rank( $rank ) { + return new self( $rank ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php new file mode 100644 index 00000000..5dd81d78 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replace-vars.php @@ -0,0 +1,1646 @@ + '', + 'name' => '', + 'post_author' => '', + 'post_content' => '', + 'post_date' => '', + 'post_excerpt' => '', + 'post_modified' => '', + 'post_title' => '', + 'taxonomy' => '', + 'term_id' => '', + 'term404' => '', + ]; + + /** + * Current post/page/cpt information. + * + * @var stdClass + */ + protected $args; + + /** + * Help texts for use in WPSEO -> Search appearance tabs. + * + * @var array + */ + protected static $help_texts = []; + + /** + * Register of additional variable replacements registered by other plugins/themes. + * + * @var array + */ + protected static $external_replacements = []; + + /** + * Setup the help texts and external replacements as statics so they will be available to all instances. + * + * @return void + */ + public static function setup_statics_once() { + if ( self::$help_texts === [] ) { + self::set_basic_help_texts(); + self::set_advanced_help_texts(); + } + + if ( self::$external_replacements === [] ) { + /** + * Action: 'wpseo_register_extra_replacements' - Allows for registration of additional + * variables to replace. + */ + do_action( 'wpseo_register_extra_replacements' ); + } + } + + /** + * Register new replacement %%variables%%. + * For use by other plugins/themes to register extra variables. + * + * @see wpseo_register_var_replacement() for a usage example. + * + * @param string $var_to_replace The name of the variable to replace, i.e. '%%var%%'. + * Note: the surrounding %% are optional. + * @param mixed $replace_function Function or method to call to retrieve the replacement value for the variable. + * Uses the same format as add_filter/add_action function parameter and + * should *return* the replacement value. DON'T echo it. + * @param string $type Type of variable: 'basic' or 'advanced', defaults to 'advanced'. + * @param string $help_text Help text to be added to the help tab for this variable. + * + * @return bool Whether the replacement function was succesfully registered. + */ + public static function register_replacement( $var_to_replace, $replace_function, $type = 'advanced', $help_text = '' ) { + $success = false; + + if ( is_string( $var_to_replace ) && $var_to_replace !== '' ) { + $var_to_replace = self::remove_var_delimiter( $var_to_replace ); + + if ( preg_match( '`^[A-Z0-9_-]+$`i', $var_to_replace ) === false ) { + trigger_error( esc_html__( 'A replacement variable can only contain alphanumeric characters, an underscore or a dash. Try renaming your variable.', 'wordpress-seo' ), E_USER_WARNING ); + } + elseif ( strpos( $var_to_replace, 'cf_' ) === 0 || strpos( $var_to_replace, 'ct_' ) === 0 ) { + trigger_error( esc_html__( 'A replacement variable can not start with "%%cf_" or "%%ct_" as these are reserved for the WPSEO standard variable variables for custom fields and custom taxonomies. Try making your variable name unique.', 'wordpress-seo' ), E_USER_WARNING ); + } + elseif ( ! method_exists( self::class, 'retrieve_' . $var_to_replace ) ) { + if ( $var_to_replace !== '' && ! isset( self::$external_replacements[ $var_to_replace ] ) ) { + self::$external_replacements[ $var_to_replace ] = $replace_function; + $replacement_variable = new WPSEO_Replacement_Variable( $var_to_replace, $var_to_replace, $help_text ); + self::register_help_text( $type, $replacement_variable ); + $success = true; + } + else { + trigger_error( esc_html__( 'A replacement variable with the same name has already been registered. Try making your variable name unique.', 'wordpress-seo' ), E_USER_WARNING ); + } + } + else { + trigger_error( esc_html__( 'You cannot overrule a WPSEO standard variable replacement by registering a variable with the same name. Use the "wpseo_replacements" filter instead to adjust the replacement value.', 'wordpress-seo' ), E_USER_WARNING ); + } + } + + return $success; + } + + /** + * Replace `%%variable_placeholders%%` with their real value based on the current requested page/post/cpt/etc. + * + * @param string $text The string to replace the variables in. + * @param array $args The object some of the replacement values might come from, + * could be a post, taxonomy or term. + * @param array $omit Variables that should not be replaced by this function. + * + * @return string + */ + public function replace( $text, $args, $omit = [] ) { + + $text = wp_strip_all_tags( $text ); + + // Let's see if we can bail super early. + if ( strpos( $text, '%%' ) === false ) { + return YoastSEO()->helpers->string->standardize_whitespace( $text ); + } + + $args = (array) $args; + if ( isset( $args['post_content'] ) && ! empty( $args['post_content'] ) ) { + $args['post_content'] = YoastSEO()->helpers->string->strip_shortcode( $args['post_content'] ); + } + if ( isset( $args['post_excerpt'] ) && ! empty( $args['post_excerpt'] ) ) { + $args['post_excerpt'] = YoastSEO()->helpers->string->strip_shortcode( $args['post_excerpt'] ); + } + $this->args = (object) wp_parse_args( $args, $this->defaults ); + + // Clean $omit array. + if ( is_array( $omit ) && $omit !== [] ) { + $omit = array_map( [ self::class, 'remove_var_delimiter' ], $omit ); + } + + $replacements = []; + if ( preg_match_all( '`%%([^%]+(%%single)?)%%?`iu', $text, $matches ) ) { + $replacements = $this->set_up_replacements( $matches, $omit ); + } + + /** + * Filter: 'wpseo_replacements' - Allow customization of the replacements before they are applied. + * + * @param array $replacements The replacements. + * @param array $args The object some of the replacement values might come from, + * could be a post, taxonomy or term. + */ + $replacements = apply_filters( 'wpseo_replacements', $replacements, $this->args ); + + // Do the actual replacements. + if ( is_array( $replacements ) && $replacements !== [] ) { + $text = str_replace( + array_keys( $replacements ), + // Make sure to exclude replacement values that are arrays e.g. coming from a custom field serialized value. + array_filter( array_values( $replacements ), 'is_scalar' ), + $text + ); + } + + /** + * Filter: 'wpseo_replacements_final' - Allow overruling of whether or not to remove placeholders + * which didn't yield a replacement. + * + * @example add_filter( 'wpseo_replacements_final', '__return_false' ); + * + * @param bool $final + */ + if ( apply_filters( 'wpseo_replacements_final', true ) === true && ( isset( $matches[1] ) && is_array( $matches[1] ) ) ) { + // Remove non-replaced variables. + $remove = array_diff( $matches[1], $omit ); // Make sure the $omit variables do not get removed. + $remove = array_map( [ self::class, 'add_var_delimiter' ], $remove ); + $text = str_replace( $remove, '', $text ); + } + + // Undouble separators which have nothing between them, i.e. where a non-replaced variable was removed. + if ( isset( $replacements['%%sep%%'] ) && ( is_string( $replacements['%%sep%%'] ) && $replacements['%%sep%%'] !== '' ) ) { + $q_sep = preg_quote( $replacements['%%sep%%'], '`' ); + $text = preg_replace( '`' . $q_sep . '(?:\s*' . $q_sep . ')*`u', $replacements['%%sep%%'], $text ); + } + + // Remove superfluous whitespace. + $text = YoastSEO()->helpers->string->standardize_whitespace( $text ); + + return $text; + } + + /** + * Register a new replacement variable if it has not been registered already. + * + * @param string $var_to_replace The name of the variable to replace, i.e. '%%var%%'. + * Note: the surrounding %% are optional. + * @param mixed $replace_function Function or method to call to retrieve the replacement value for the variable. + * Uses the same format as add_filter/add_action function parameter and + * should *return* the replacement value. DON'T echo it. + * @param string $type Type of variable: 'basic' or 'advanced', defaults to 'advanced'. + * @param string $help_text Help text to be added to the help tab for this variable. + * + * @return bool `true` if the replace var has been registered, `false` if not. + */ + public function safe_register_replacement( $var_to_replace, $replace_function, $type = 'advanced', $help_text = '' ) { + if ( ! $this->has_been_registered( $var_to_replace ) ) { + return self::register_replacement( $var_to_replace, $replace_function, $type, $help_text ); + } + return false; + } + + /** + * Checks whether the given replacement variable has already been registered or not. + * + * @param string $replacement_variable The replacement variable to check, including the variable delimiter (e.g. `%%var%%`). + * + * @return bool `true` if the replacement variable has already been registered. + */ + public function has_been_registered( $replacement_variable ) { + $replacement_variable = self::remove_var_delimiter( $replacement_variable ); + + return isset( self::$external_replacements[ $replacement_variable ] ); + } + + /** + * Returns the list of hidden replace vars. + * + * E.g. the replace vars that should work, but are not advertised. + * + * @return string[] The list of hidden replace vars. + */ + public function get_hidden_replace_vars() { + return [ + 'currentdate', + 'currentyear', + 'currentmonth', + 'currentday', + 'post_year', + 'post_month', + 'post_day', + 'author_first_name', + 'author_last_name', + 'permalink', + 'post_content', + 'category_title', + ]; + } + + /** + * Retrieve the replacements for the variables found. + * + * @param array $matches Variables found in the original string - regex result. + * @param array $omit Variables that should not be replaced by this function. + * + * @return array Retrieved replacements - this might be a smaller array as some variables + * may not yield a replacement in certain contexts. + */ + private function set_up_replacements( $matches, $omit ) { + + $replacements = []; + + // @todo Figure out a way to deal with external functions starting with cf_/ct_. + foreach ( $matches[1] as $k => $var ) { + + // Don't set up replacements which should be omitted. + if ( in_array( $var, $omit, true ) ) { + continue; + } + + // Deal with variable variable names first. + if ( strpos( $var, 'cf_' ) === 0 ) { + $replacement = $this->retrieve_cf_custom_field_name( $var ); + } + elseif ( strpos( $var, 'ct_desc_' ) === 0 ) { + $replacement = $this->retrieve_ct_desc_custom_tax_name( $var ); + } + elseif ( strpos( $var, 'ct_' ) === 0 ) { + $single = ( isset( $matches[2][ $k ] ) && $matches[2][ $k ] !== '' ); + $replacement = $this->retrieve_ct_custom_tax_name( $var, $single ); + } + // Deal with non-variable variable names. + elseif ( method_exists( $this, 'retrieve_' . $var ) ) { + $method_name = 'retrieve_' . $var; + $replacement = $this->$method_name(); + } + // Deal with externally defined variable names. + elseif ( isset( self::$external_replacements[ $var ] ) && ! is_null( self::$external_replacements[ $var ] ) ) { + $replacement = call_user_func( self::$external_replacements[ $var ], $var, $this->args ); + } + + // Replacement retrievals can return null if no replacement can be determined, root those outs. + if ( isset( $replacement ) ) { + $var = self::add_var_delimiter( $var ); + $replacements[ $var ] = $replacement; + } + unset( $replacement, $single, $method_name ); + } + + return $replacements; + } + + /* *********************** BASIC VARIABLES ************************** */ + + /** + * Retrieve the post/cpt categories (comma separated) for use as replacement string. + * + * @return string|null + */ + private function retrieve_category() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + $cat = $this->get_terms( $this->args->ID, 'category' ); + if ( $cat !== '' ) { + return $cat; + } + } + + if ( isset( $this->args->cat_name ) && ! empty( $this->args->cat_name ) ) { + $replacement = $this->args->cat_name; + } + + return $replacement; + } + + /** + * Retrieve the category description for use as replacement string. + * + * @return string|null + */ + private function retrieve_category_description() { + return $this->retrieve_term_description(); + } + + /** + * Retrieve the date of the post/page/cpt for use as replacement string. + * + * @return string|null + */ + private function retrieve_date() { + $replacement = null; + + if ( $this->args->post_date !== '' ) { + // Returns a string. + $replacement = YoastSEO()->helpers->date->format_translated( $this->args->post_date, get_option( 'date_format' ) ); + } + elseif ( get_query_var( 'day' ) && get_query_var( 'day' ) !== '' ) { + // Returns a string. + $replacement = get_the_date(); + } + elseif ( single_month_title( ' ', false ) && single_month_title( ' ', false ) !== '' ) { + // Returns a string. + $replacement = single_month_title( ' ', false ); + } + elseif ( get_query_var( 'year' ) !== '' ) { + // Returns an integer, let's cast to string. + $replacement = (string) get_query_var( 'year' ); + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt excerpt for use as replacement string. + * The excerpt will be auto-generated if it does not exist. + * + * @return string|null + */ + private function retrieve_excerpt() { + $replacement = null; + $locale = get_locale(); + + // Japanese doesn't have a jp_JP variant in WP. + $limit = ( $locale === 'ja' ) ? 80 : 156; + + // The check `post_password_required` is because excerpt must be hidden for a post with a password. + if ( ! empty( $this->args->ID ) && ! post_password_required( $this->args->ID ) ) { + if ( $this->args->post_excerpt !== '' ) { + $replacement = wp_strip_all_tags( $this->args->post_excerpt ); + } + elseif ( $this->args->post_content !== '' ) { + $content = strip_shortcodes( $this->args->post_content ); + $content = wp_strip_all_tags( $content ); + + if ( mb_strlen( $content ) <= $limit ) { + return $content; + } + + $replacement = wp_html_excerpt( $content, $limit ); + + // Check if the description has space and trim the auto-generated string to a word boundary. + if ( strrpos( $replacement, ' ' ) ) { + $replacement = substr( $replacement, 0, strrpos( $replacement, ' ' ) ); + } + } + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt excerpt for use as replacement string (without auto-generation). + * + * @return string|null + */ + private function retrieve_excerpt_only() { + $replacement = null; + + // The check `post_password_required` is because excerpt must be hidden for a post with a password. + if ( ! empty( $this->args->ID ) && $this->args->post_excerpt !== '' && ! post_password_required( $this->args->ID ) ) { + $replacement = wp_strip_all_tags( $this->args->post_excerpt ); + } + + return $replacement; + } + + /** + * Retrieve the title of the parent page of the current page/cpt for use as replacement string. + * Only applicable for hierarchical post types. + * + * @todo Check: shouldn't this use $this->args as well ? + * + * @return string|null + */ + private function retrieve_parent_title() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + $parent_id = wp_get_post_parent_id( $this->args->ID ); + if ( $parent_id ) { + $replacement = get_the_title( $parent_id ); + } + } + + return $replacement; + } + + /** + * Retrieve the current search phrase for use as replacement string. + * + * @return string|null + */ + private function retrieve_searchphrase() { + $replacement = null; + + $search = get_query_var( 's' ); + if ( $search !== '' ) { + $replacement = esc_html( $search ); + } + + return $replacement; + } + + /** + * Retrieve the separator for use as replacement string. + * + * @return string Retrieves the title separator. + */ + private function retrieve_sep() { + return YoastSEO()->helpers->options->get_title_separator(); + } + + /** + * Retrieve the site's tag line / description for use as replacement string. + * + * The `$replacement` variable is static because it doesn't change depending + * on the context. See https://github.com/Yoast/wordpress-seo/pull/1172#issuecomment-46019482. + * + * @return string|null + */ + private function retrieve_sitedesc() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $description = wp_strip_all_tags( get_bloginfo( 'description' ) ); + if ( $description !== '' ) { + $replacement = $description; + } + } + + return $replacement; + } + + /** + * Retrieve the site's name for use as replacement string. + * + * The `$replacement` variable is static because it doesn't change depending + * on the context. See https://github.com/Yoast/wordpress-seo/pull/1172#issuecomment-46019482. + * + * @return string|null + */ + private function retrieve_sitename() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $sitename = YoastSEO()->helpers->site->get_site_name(); + if ( $sitename !== '' ) { + $replacement = $sitename; + } + } + + return $replacement; + } + + /** + * Retrieve the current tag/tags for use as replacement string. + * + * @return string|null + */ + private function retrieve_tag() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + $tags = $this->get_terms( $this->args->ID, 'post_tag' ); + if ( $tags !== '' ) { + $replacement = $tags; + } + } + + return $replacement; + } + + /** + * Retrieve the tag description for use as replacement string. + * + * @return string|null + */ + private function retrieve_tag_description() { + return $this->retrieve_term_description(); + } + + /** + * Retrieve the term description for use as replacement string. + * + * @return string|null + */ + private function retrieve_term_description() { + $replacement = null; + + if ( ! empty( $this->args->term_id ) && ! empty( $this->args->taxonomy ) ) { + $term_desc = get_term_field( 'description', $this->args->term_id, $this->args->taxonomy ); + if ( $term_desc !== '' ) { + $replacement = wp_strip_all_tags( $term_desc ); + } + } + + return $replacement; + } + + /** + * Retrieve the term name for use as replacement string. + * + * @return string|null + */ + private function retrieve_term_title() { + $replacement = null; + + if ( ! empty( $this->args->taxonomy ) && ! empty( $this->args->name ) ) { + $replacement = $this->args->name; + } + + return $replacement; + } + + /** + * Retrieve the title of the post/page/cpt for use as replacement string. + * + * @return string|null + */ + private function retrieve_title() { + $replacement = null; + + if ( is_string( $this->args->post_title ) && $this->args->post_title !== '' ) { + $replacement = $this->args->post_title; + } + + return $replacement; + } + + /** + * Retrieve primary category for use as replacement string. + * + * @return bool|int|null + */ + private function retrieve_primary_category() { + $primary_category = null; + + if ( ! empty( $this->args->ID ) ) { + $wpseo_primary_category = new WPSEO_Primary_Term( 'category', $this->args->ID ); + + $term_id = $wpseo_primary_category->get_primary_term(); + $term = get_term( $term_id ); + + if ( ! is_wp_error( $term ) && ! empty( $term ) ) { + $primary_category = $term->name; + } + } + + return $primary_category; + } + + /** + * Retrieve the string generated by get_the_archive_title(). + * + * @return string|null + */ + private function retrieve_archive_title() { + return get_the_archive_title(); + } + + /* *********************** ADVANCED VARIABLES ************************** */ + + /** + * Determine the page numbering of the current post/page/cpt. + * + * @param string $request Either 'nr'|'max' - whether to return the page number or the max number of pages. + * + * @return int|null + */ + private function determine_pagenumbering( $request = 'nr' ) { + global $wp_query, $post; + $max_num_pages = null; + $page_number = null; + + $max_num_pages = 1; + + if ( ! is_singular() ) { + $page_number = get_query_var( 'paged' ); + if ( $page_number === 0 || $page_number === '' ) { + $page_number = 1; + } + + if ( ! empty( $wp_query->max_num_pages ) ) { + $max_num_pages = $wp_query->max_num_pages; + } + } + else { + $page_number = get_query_var( 'page' ); + if ( $page_number === 0 || $page_number === '' ) { + $page_number = 1; + } + + if ( isset( $post->post_content ) ) { + $max_num_pages = ( substr_count( $post->post_content, '' ) + 1 ); + } + } + + $return = null; + + switch ( $request ) { + case 'nr': + $return = $page_number; + break; + case 'max': + $return = $max_num_pages; + break; + } + + return $return; + } + + /** + * Determine the post type names for the current post/page/cpt. + * + * @param string $request Either 'single'|'plural' - whether to return the single or plural form. + * + * @return string|null + */ + private function determine_pt_names( $request = 'single' ) { + global $wp_query; + $pt_single = null; + $pt_plural = null; + $post_type = ''; + + if ( isset( $wp_query->query_vars['post_type'] ) && ( ( is_string( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] !== '' ) || ( is_array( $wp_query->query_vars['post_type'] ) && $wp_query->query_vars['post_type'] !== [] ) ) ) { + $post_type = $wp_query->query_vars['post_type']; + } + elseif ( isset( $this->args->post_type ) && ( is_string( $this->args->post_type ) && $this->args->post_type !== '' ) ) { + $post_type = $this->args->post_type; + } + else { + // Make it work in preview mode. + $post = $wp_query->get_queried_object(); + if ( $post instanceof WP_Post ) { + $post_type = $post->post_type; + } + } + + if ( is_array( $post_type ) ) { + $post_type = reset( $post_type ); + } + + if ( $post_type !== '' ) { + $pt = get_post_type_object( $post_type ); + $pt_single = $pt->name; + $pt_plural = $pt->name; + if ( isset( $pt->labels->singular_name ) ) { + $pt_single = $pt->labels->singular_name; + } + if ( isset( $pt->labels->name ) ) { + $pt_plural = $pt->labels->name; + } + } + + $return = null; + + switch ( $request ) { + case 'single': + $return = $pt_single; + break; + case 'plural': + $return = $pt_plural; + break; + } + + return $return; + } + + /** + * Retrieve the attachment caption for use as replacement string. + * + * @return string|null + */ + private function retrieve_caption() { + return $this->retrieve_excerpt_only(); + } + + /** + * Retrieve a post/page/cpt's custom field value for use as replacement string. + * + * @param string $var_to_replace The complete variable to replace which includes the name of + * the custom field which value is to be retrieved. + * + * @return string|null + */ + private function retrieve_cf_custom_field_name( $var_to_replace ) { + $replacement = null; + + if ( is_string( $var_to_replace ) && $var_to_replace !== '' ) { + $field = substr( $var_to_replace, 3 ); + if ( ! empty( $this->args->ID ) ) { + // Post meta can be arrays and in this case we need to exclude them. + $name = get_post_meta( $this->args->ID, $field, true ); + if ( $name !== '' && ! is_array( $name ) ) { + $replacement = $name; + } + } + elseif ( ! empty( $this->args->term_id ) ) { + $name = get_term_meta( $this->args->term_id, $field, true ); + if ( $name !== '' ) { + $replacement = $name; + } + } + } + + return $replacement; + } + + /** + * Retrieve a post/page/cpt's custom taxonomies for use as replacement string. + * + * @param string $var_to_replace The complete variable to replace which includes the name of + * the custom taxonomy which value(s) is to be retrieved. + * @param bool $single Whether to retrieve only the first or all values for the taxonomy. + * + * @return string|null + */ + private function retrieve_ct_custom_tax_name( $var_to_replace, $single = false ) { + $replacement = null; + + if ( ( is_string( $var_to_replace ) && $var_to_replace !== '' ) && ! empty( $this->args->ID ) ) { + $tax = substr( $var_to_replace, 3 ); + $name = $this->get_terms( $this->args->ID, $tax, $single ); + if ( $name !== '' ) { + $replacement = $name; + } + } + + return $replacement; + } + + /** + * Retrieve a post/page/cpt's custom taxonomies description for use as replacement string. + * + * @param string $var_to_replace The complete variable to replace which includes the name of + * the custom taxonomy which description is to be retrieved. + * + * @return string|null + */ + private function retrieve_ct_desc_custom_tax_name( $var_to_replace ) { + $replacement = null; + + if ( is_string( $var_to_replace ) && $var_to_replace !== '' ) { + $tax = substr( $var_to_replace, 8 ); + if ( ! empty( $this->args->ID ) ) { + $terms = get_the_terms( $this->args->ID, $tax ); + if ( is_array( $terms ) && $terms !== [] ) { + $term = current( $terms ); + $term_desc = get_term_field( 'description', $term->term_id, $tax ); + if ( $term_desc !== '' ) { + $replacement = wp_strip_all_tags( $term_desc ); + } + } + } + } + + return $replacement; + } + + /** + * Retrieve the current date for use as replacement string. + * + * The `$replacement` variable is static because it doesn't change depending + * on the context. See https://github.com/Yoast/wordpress-seo/pull/1172#issuecomment-46019482. + * + * @return string The formatted current date. + */ + private function retrieve_currentdate() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( get_option( 'date_format' ) ); + } + + return $replacement; + } + + /** + * Retrieve the current day for use as replacement string. + * + * The `$replacement` variable is static because it doesn't change depending + * on the context. See https://github.com/Yoast/wordpress-seo/pull/1172#issuecomment-46019482. + * + * @return string The current day. + */ + private function retrieve_currentday() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( 'j' ); + } + + return $replacement; + } + + /** + * Retrieve the current month for use as replacement string. + * + * The `$replacement` variable is static because it doesn't change depending + * on the context. See https://github.com/Yoast/wordpress-seo/pull/1172#issuecomment-46019482. + * + * @return string The current month. + */ + private function retrieve_currentmonth() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( 'F' ); + } + + return $replacement; + } + + /** + * Retrieve the current time for use as replacement string. + * + * The `$replacement` variable is static because it doesn't change depending + * on the context. See https://github.com/Yoast/wordpress-seo/pull/1172#issuecomment-46019482. + * + * @return string The formatted current time. + */ + private function retrieve_currenttime() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( get_option( 'time_format' ) ); + } + + return $replacement; + } + + /** + * Retrieve the current year for use as replacement string. + * + * The `$replacement` variable is static because it doesn't change depending + * on the context. See https://github.com/Yoast/wordpress-seo/pull/1172#issuecomment-46019482. + * + * @return string The current year. + */ + private function retrieve_currentyear() { + static $replacement; + + if ( ! isset( $replacement ) ) { + $replacement = date_i18n( 'Y' ); + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt's focus keyword for use as replacement string. + * + * @return string|null + */ + private function retrieve_focuskw() { + // Retrieve focuskw from a Post. + if ( ! empty( $this->args->ID ) ) { + $focus_kw = WPSEO_Meta::get_value( 'focuskw', $this->args->ID ); + if ( $focus_kw !== '' ) { + return $focus_kw; + } + + return null; + } + + // Retrieve focuskw from a Term. + if ( ! empty( $this->args->term_id ) ) { + $focus_kw = WPSEO_Taxonomy_Meta::get_term_meta( $this->args->term_id, $this->args->taxonomy, 'focuskw' ); + if ( $focus_kw !== '' ) { + return $focus_kw; + } + } + + return null; + } + + /** + * Retrieve the post/page/cpt ID for use as replacement string. + * + * @return string|null + */ + private function retrieve_id() { + $replacement = null; + + if ( ! empty( $this->args->ID ) ) { + // The post/page/cpt ID is an integer, let's cast to string. + $replacement = (string) $this->args->ID; + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt modified time for use as replacement string. + * + * @return string|null + */ + private function retrieve_modified() { + $replacement = null; + + if ( ! empty( $this->args->post_modified ) ) { + $replacement = YoastSEO()->helpers->date->format_translated( $this->args->post_modified, get_option( 'date_format' ) ); + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt author's "nice name" for use as replacement string. + * + * @return string|null + */ + private function retrieve_name() { + $replacement = null; + + $user_id = (int) $this->retrieve_userid(); + $name = get_the_author_meta( 'display_name', $user_id ); + if ( $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt author's users description for use as a replacement string. + * + * @return string|null + */ + private function retrieve_user_description() { + $replacement = null; + + $user_id = (int) $this->retrieve_userid(); + $description = get_the_author_meta( 'description', $user_id ); + if ( $description !== '' ) { + $replacement = $description; + } + + return $replacement; + } + + /** + * Retrieve the current page number with context (i.e. 'page 2 of 4') for use as replacement string. + * + * @return string + */ + private function retrieve_page() { + $replacement = null; + + $max = $this->determine_pagenumbering( 'max' ); + $nr = $this->determine_pagenumbering( 'nr' ); + $sep = $this->retrieve_sep(); + + if ( $max > 1 && $nr > 1 ) { + /* translators: 1: current page number, 2: total number of pages. */ + $replacement = sprintf( $sep . ' ' . __( 'Page %1$d of %2$d', 'wordpress-seo' ), $nr, $max ); + } + + return $replacement; + } + + /** + * Retrieve the current page number for use as replacement string. + * + * @return string|null + */ + private function retrieve_pagenumber() { + $replacement = null; + + $nr = $this->determine_pagenumbering( 'nr' ); + if ( isset( $nr ) && $nr > 0 ) { + $replacement = (string) $nr; + } + + return $replacement; + } + + /** + * Retrieve the current page total for use as replacement string. + * + * @return string|null + */ + private function retrieve_pagetotal() { + $replacement = null; + + $max = $this->determine_pagenumbering( 'max' ); + if ( isset( $max ) && $max > 0 ) { + $replacement = (string) $max; + } + + return $replacement; + } + + /** + * Retrieve the post type plural label for use as replacement string. + * + * @return string|null + */ + private function retrieve_pt_plural() { + $replacement = null; + + $name = $this->determine_pt_names( 'plural' ); + if ( isset( $name ) && $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the post type single label for use as replacement string. + * + * @return string|null + */ + private function retrieve_pt_single() { + $replacement = null; + + $name = $this->determine_pt_names( 'single' ); + if ( isset( $name ) && $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the slug which caused the 404 for use as replacement string. + * + * @return string|null + */ + private function retrieve_term404() { + $replacement = null; + + if ( $this->args->term404 !== '' ) { + $replacement = sanitize_text_field( str_replace( '-', ' ', $this->args->term404 ) ); + } + else { + $error_request = get_query_var( 'pagename' ); + if ( $error_request !== '' ) { + $replacement = sanitize_text_field( str_replace( '-', ' ', $error_request ) ); + } + else { + $error_request = get_query_var( 'name' ); + if ( $error_request !== '' ) { + $replacement = sanitize_text_field( str_replace( '-', ' ', $error_request ) ); + } + } + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt author's user id for use as replacement string. + * + * @return string + */ + private function retrieve_userid() { + // The user ID is an integer, let's cast to string. + $replacement = ! empty( $this->args->post_author ) ? (string) $this->args->post_author : (string) get_query_var( 'author' ); + + return $replacement; + } + + /** + * Retrieve the post/page/cpt's published year for use as replacement string. + * + * @return string|null + */ + private function retrieve_post_year() { + if ( empty( $this->args->ID ) ) { + return null; + } + + return get_the_date( 'Y', $this->args->ID ); + } + + /** + * Retrieve the post/page/cpt's published month for use as replacement string. + * + * @return string|null + */ + private function retrieve_post_month() { + if ( empty( $this->args->ID ) ) { + return null; + } + + return get_the_date( 'F', $this->args->ID ); + } + + /** + * Retrieve the post/page/cpt's published day for use as replacement string. + * + * @return string|null + */ + private function retrieve_post_day() { + if ( empty( $this->args->ID ) ) { + return null; + } + + return get_the_date( 'd', $this->args->ID ); + } + + /** + * Retrieve the post/page/cpt author's first name for use as replacement string. + * + * @return string|null + */ + private function retrieve_author_first_name() { + $replacement = null; + + $user_id = (int) $this->retrieve_userid(); + $name = get_the_author_meta( 'first_name', $user_id ); + if ( $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt author's last name for use as replacement string. + * + * @return string|null + */ + private function retrieve_author_last_name() { + $replacement = null; + + $user_id = (int) $this->retrieve_userid(); + $name = get_the_author_meta( 'last_name', $user_id ); + if ( $name !== '' ) { + $replacement = $name; + } + + return $replacement; + } + + /** + * Retrieve the post/page/cpt permalink for use as replacement string. + * + * @return string|null + */ + private function retrieve_permalink() { + if ( empty( $this->args->ID ) ) { + return null; + } + + return get_permalink( $this->args->ID ); + } + + /** + * Retrieve the post/page/cpt content for use as replacement string. + * + * @return string|null + */ + private function retrieve_post_content() { + $replacement = null; + + // The check `post_password_required` is because content must be hidden for a post with a password. + if ( ! empty( $this->args->ID ) && $this->args->post_content !== '' && ! post_password_required( $this->args->ID ) ) { + $content = strip_shortcodes( $this->args->post_content ); + $replacement = wp_strip_all_tags( $content ); + } + + return $replacement; + } + + /** + * Retrieve the current or first category title. To be used for import data from AIOSEO. + * The code derives from AIOSEO's way of dealing with that var, so we can ensure 100% seamless transition. + * + * @return string|null + */ + private function retrieve_category_title() { + if ( empty( $this->args ) || empty( $this->args->ID ) ) { + return null; + } + $post_id = $this->args->ID; + + $post = get_post( $post_id ); + $taxonomies = get_object_taxonomies( $post, 'objects' ); + + foreach ( $taxonomies as $taxonomy_slug => $taxonomy ) { + if ( ! $taxonomy->hierarchical ) { + continue; + } + $post_terms = get_the_terms( $post_id, $taxonomy_slug ); + if ( is_array( $post_terms ) && count( $post_terms ) > 0 ) { + // AiOSEO takes the name of whatever the first hierarchical taxonomy is. + $term = $post_terms[0]; + if ( $term ) { + return $term->name; + } + } + } + + return null; + } + + /* *********************** HELP TEXT RELATED ************************** */ + + /** + * Set the help text for a user/plugin/theme defined extra variable. + * + * @param string $type Type of variable: 'basic' or 'advanced'. + * @param WPSEO_Replacement_Variable $replacement_variable The replacement variable to register. + * + * @return void + */ + private static function register_help_text( $type, WPSEO_Replacement_Variable $replacement_variable ) { + $identifier = $replacement_variable->get_variable(); + + if ( ( is_string( $type ) && in_array( $type, [ 'basic', 'advanced' ], true ) ) + && ( $identifier !== '' && ! isset( self::$help_texts[ $type ][ $identifier ] ) ) + ) { + self::$help_texts[ $type ][ $identifier ] = $replacement_variable; + } + } + + /** + * Generates a list of replacement variables based on the help texts. + * + * @return array List of replace vars. + */ + public function get_replacement_variables_with_labels() { + self::setup_statics_once(); + + $custom_variables = []; + foreach ( array_merge( WPSEO_Custom_Fields::get_custom_fields(), WPSEO_Custom_Taxonomies::get_custom_taxonomies() ) as $custom_variable ) { + $custom_variables[ $custom_variable ] = new WPSEO_Replacement_Variable( $custom_variable, $this->get_label( $custom_variable ), '' ); + } + + $replacement_variables = array_filter( + array_merge( self::$help_texts['basic'], self::$help_texts['advanced'] ), + [ $this, 'is_not_prefixed' ], + ARRAY_FILTER_USE_KEY + ); + + $hidden = $this->get_hidden_replace_vars(); + + return array_values( + array_map( + static function ( WPSEO_Replacement_Variable $replacement_variable ) use ( $hidden ) { + $name = $replacement_variable->get_variable(); + + return [ + 'name' => $name, + 'value' => '', + 'label' => $replacement_variable->get_label(), + 'hidden' => in_array( $name, $hidden, true ), + ]; + }, + array_merge( $replacement_variables, $custom_variables ) + ) + ); + } + + /** + * Generates a list of replacement variables based on the help texts. + * + * @return array List of replace vars. + */ + public function get_replacement_variables_list() { + self::setup_statics_once(); + + $replacement_variables = array_merge( + $this->get_replacement_variables(), + WPSEO_Custom_Fields::get_custom_fields(), + WPSEO_Custom_Taxonomies::get_custom_taxonomies() + ); + + return array_map( [ $this, 'format_replacement_variable' ], $replacement_variables ); + } + + /** + * Creates a merged associative array of both the basic and advanced help texts. + * + * @return array Array with the replacement variables. + */ + private function get_replacement_variables() { + $help_texts = array_merge( self::$help_texts['basic'], self::$help_texts['advanced'] ); + + return array_filter( array_keys( $help_texts ), [ $this, 'is_not_prefixed' ] ); + } + + /** + * Checks whether the replacement variable contains a `ct_` or `cf_` prefix, because they follow different logic. + * + * @param string $replacement_variable The replacement variable. + * + * @return bool True when the replacement variable is not prefixed. + */ + private function is_not_prefixed( $replacement_variable ) { + $prefixes = [ 'cf_', 'ct_' ]; + $prefix = $this->get_prefix( $replacement_variable ); + + return ! in_array( $prefix, $prefixes, true ); + } + + /** + * Strip the prefix from a replacement variable name. + * + * @param string $replacement_variable The replacement variable. + * + * @return string The replacement variable name without the prefix. + */ + private function strip_prefix( $replacement_variable ) { + return substr( $replacement_variable, 3 ); + } + + /** + * Gets the prefix from a replacement variable name. + * + * @param string $replacement_variable The replacement variable. + * + * @return string The prefix of the replacement variable. + */ + private function get_prefix( $replacement_variable ) { + return substr( $replacement_variable, 0, 3 ); + } + + /** + * Strips 'desc_' if present, and appends ' description' at the end. + * + * @param string $label The replacement variable. + * + * @return string The altered replacement variable name. + */ + private function handle_description( $label ) { + if ( strpos( $label, 'desc_' ) === 0 ) { + return substr( $label, 5 ) . ' description'; + } + + return $label; + } + + /** + * Creates a label for prefixed replacement variables that matches the format in the editors. + * + * @param string $replacement_variable The replacement variable. + * + * @return string The replacement variable label. + */ + private function get_label( $replacement_variable ) { + $prefix = $this->get_prefix( $replacement_variable ); + if ( $prefix === 'cf_' ) { + return $this->strip_prefix( $replacement_variable ) . ' (custom field)'; + } + + if ( $prefix === 'ct_' ) { + $label = $this->strip_prefix( $replacement_variable ); + $label = $this->handle_description( $label ); + return ucfirst( $label . ' (custom taxonomy)' ); + } + + if ( $prefix === 'pt_' ) { + if ( $replacement_variable === 'pt_single' ) { + return 'Post type (singular)'; + } + + return 'Post type (plural)'; + } + + return ''; + } + + /** + * Formats the replacement variables. + * + * @param string $replacement_variable The replacement variable to format. + * + * @return array The formatted replacement variable. + */ + private function format_replacement_variable( $replacement_variable ) { + return [ + 'name' => $replacement_variable, + 'value' => '', + 'label' => $this->get_label( $replacement_variable ), + ]; + } + + /** + * Set/translate the help texts for the WPSEO standard basic variables. + * + * @return void + */ + private static function set_basic_help_texts() { + /* translators: %s: wp_title() function. */ + $separator_description = __( 'The separator defined in your theme\'s %s tag.', 'wordpress-seo' ); + $separator_description = sprintf( + $separator_description, + // 'wp_title()' + 'wp_title()' + ); + + $replacement_variables = [ + new WPSEO_Replacement_Variable( 'date', __( 'Date', 'wordpress-seo' ), __( 'Replaced with the date of the post/page', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'title', __( 'Title', 'wordpress-seo' ), __( 'Replaced with the title of the post/page', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'parent_title', __( 'Parent title', 'wordpress-seo' ), __( 'Replaced with the title of the parent page of the current page', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'archive_title', __( 'Archive title', 'wordpress-seo' ), __( 'Replaced with the normal title for an archive generated by WordPress', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'sitename', __( 'Site title', 'wordpress-seo' ), __( 'The site\'s name', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'sitedesc', __( 'Tagline', 'wordpress-seo' ), __( 'The site\'s tagline', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'excerpt', __( 'Excerpt', 'wordpress-seo' ), __( 'Replaced with the post/page excerpt (or auto-generated if it does not exist)', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'excerpt_only', __( 'Excerpt only', 'wordpress-seo' ), __( 'Replaced with the post/page excerpt (without auto-generation)', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'tag', __( 'Tag', 'wordpress-seo' ), __( 'Replaced with the current tag/tags', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'category', __( 'Category', 'wordpress-seo' ), __( 'Replaced with the post categories (comma separated)', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'primary_category', __( 'Primary category', 'wordpress-seo' ), __( 'Replaced with the primary category of the post/page', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'category_description', __( 'Category description', 'wordpress-seo' ), __( 'Replaced with the category description', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'tag_description', __( 'Tag description', 'wordpress-seo' ), __( 'Replaced with the tag description', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'term_description', __( 'Term description', 'wordpress-seo' ), __( 'Replaced with the term description', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'term_title', __( 'Term title', 'wordpress-seo' ), __( 'Replaced with the term name', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'searchphrase', __( 'Search phrase', 'wordpress-seo' ), __( 'Replaced with the current search phrase', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'term_hierarchy', __( 'Term hierarchy', 'wordpress-seo' ), __( 'Replaced with the term ancestors hierarchy', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'sep', __( 'Separator', 'wordpress-seo' ), $separator_description ), + new WPSEO_Replacement_Variable( 'currentdate', __( 'Current date', 'wordpress-seo' ), __( 'Replaced with the current date', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'currentyear', __( 'Current year', 'wordpress-seo' ), __( 'Replaced with the current year', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'currentmonth', __( 'Current month', 'wordpress-seo' ), __( 'Replaced with the current month', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'currentday', __( 'Current day', 'wordpress-seo' ), __( 'Replaced with the current day', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'post_year', __( 'Post year', 'wordpress-seo' ), __( 'Replaced with the year the post was published', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'post_month', __( 'Post month', 'wordpress-seo' ), __( 'Replaced with the month the post was published', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'post_day', __( 'Post day', 'wordpress-seo' ), __( 'Replaced with the day the post was published', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'author_first_name', __( 'Author first name', 'wordpress-seo' ), __( 'Replaced with the first name of the author', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'author_last_name', __( 'Author last name', 'wordpress-seo' ), __( 'Replaced with the last name of the author', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'permalink', __( 'Permalink', 'wordpress-seo' ), __( 'Replaced with the permalink', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'post_content', __( 'Post Content', 'wordpress-seo' ), __( 'Replaced with the post content', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'category_title', __( 'Category Title', 'wordpress-seo' ), __( 'Current or first category title', 'wordpress-seo' ) ), + ]; + + foreach ( $replacement_variables as $replacement_variable ) { + self::register_help_text( 'basic', $replacement_variable ); + } + } + + /** + * Set/translate the help texts for the WPSEO standard advanced variables. + * + * @return void + */ + private static function set_advanced_help_texts() { + $replacement_variables = [ + new WPSEO_Replacement_Variable( 'pt_single', __( 'Post type (singular)', 'wordpress-seo' ), __( 'Replaced with the content type single label', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'pt_plural', __( 'Post type (plural)', 'wordpress-seo' ), __( 'Replaced with the content type plural label', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'modified', __( 'Modified', 'wordpress-seo' ), __( 'Replaced with the post/page modified time', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'id', __( 'ID', 'wordpress-seo' ), __( 'Replaced with the post/page ID', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'name', __( 'Name', 'wordpress-seo' ), __( 'Replaced with the post/page author\'s \'nicename\'', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'user_description', __( 'User description', 'wordpress-seo' ), __( 'Replaced with the post/page author\'s \'Biographical Info\'', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'page', __( 'Page', 'wordpress-seo' ), __( 'Replaced with the current page number with context (i.e. page 2 of 4)', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'pagetotal', __( 'Pagetotal', 'wordpress-seo' ), __( 'Replaced with the current page total', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'pagenumber', __( 'Pagenumber', 'wordpress-seo' ), __( 'Replaced with the current page number', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'caption', __( 'Caption', 'wordpress-seo' ), __( 'Attachment caption', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'focuskw', __( 'Focus keyword', 'wordpress-seo' ), __( 'Replaced with the posts focus keyphrase', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'term404', __( 'Term404', 'wordpress-seo' ), __( 'Replaced with the slug which caused the 404', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'cf_', ' ' . __( '(custom field)', 'wordpress-seo' ), __( 'Replaced with a posts custom field value', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'ct_', ' ' . __( '(custom taxonomy)', 'wordpress-seo' ), __( 'Replaced with a posts custom taxonomies, comma separated.', 'wordpress-seo' ) ), + new WPSEO_Replacement_Variable( 'ct_desc_', ' ' . __( 'description (custom taxonomy)', 'wordpress-seo' ), __( 'Replaced with a custom taxonomies description', 'wordpress-seo' ) ), + ]; + + foreach ( $replacement_variables as $replacement_variable ) { + self::register_help_text( 'advanced', $replacement_variable ); + } + } + + /* *********************** GENERAL HELPER METHODS ************************** */ + + /** + * Remove the '%%' delimiters from a variable string. + * + * @param string $text Variable string to be cleaned. + * + * @return string + */ + private static function remove_var_delimiter( $text ) { + return trim( $text, '%' ); + } + + /** + * Add the '%%' delimiters to a variable string. + * + * @param string $text Variable string to be delimited. + * + * @return string + */ + private static function add_var_delimiter( $text ) { + return '%%' . $text . '%%'; + } + + /** + * Retrieve a post's terms, comma delimited. + * + * @param int $id ID of the post to get the terms for. + * @param string $taxonomy The taxonomy to get the terms for this post from. + * @param bool $return_single If true, return the first term. + * + * @return string Either a single term or a comma delimited string of terms. + */ + public function get_terms( $id, $taxonomy, $return_single = false ) { + $output = ''; + + // If we're on a specific tag, category or taxonomy page, use that. + if ( ! empty( $this->args->term_id ) ) { + $output = $this->args->name; + } + elseif ( ! empty( $id ) && ! empty( $taxonomy ) ) { + $terms = get_the_terms( $id, $taxonomy ); + if ( is_array( $terms ) && $terms !== [] ) { + foreach ( $terms as $term ) { + if ( $return_single ) { + $output = $term->name; + break; + } + else { + $output .= $term->name . ', '; + } + } + $output = rtrim( trim( $output ), ',' ); + } + } + unset( $terms, $term ); + + /** + * Allows filtering of the terms list used to replace %%category%%, %%tag%% + * and %%ct_%% variables. + * + * @param string $output Comma-delimited string containing the terms. + * @param string $taxonomy The taxonomy of the terms. + */ + return apply_filters( 'wpseo_terms', $output, $taxonomy ); + } + + /** + * Gets a taxonomy term hierarchy including the term to get the parents for. + * + * @return string + */ + private function get_term_hierarchy() { + if ( ! is_taxonomy_hierarchical( $this->args->taxonomy ) ) { + return ''; + } + + $separator = ' ' . $this->retrieve_sep() . ' '; + + $args = [ + 'format' => 'name', + 'separator' => $separator, + 'link' => false, + 'inclusive' => true, + ]; + + return rtrim( + get_term_parents_list( $this->args->term_id, $this->args->taxonomy, $args ), + $separator + ); + } + + /** + * Retrieves the term ancestors hierarchy. + * + * @return string|null The term ancestors hierarchy. + */ + private function retrieve_term_hierarchy() { + $replacement = null; + + if ( ! empty( $this->args->term_id ) && ! empty( $this->args->taxonomy ) ) { + $hierarchy = $this->get_term_hierarchy(); + + if ( $hierarchy !== '' ) { + $replacement = esc_html( $hierarchy ); + } + } + + return $replacement; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replacement-variable.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replacement-variable.php new file mode 100644 index 00000000..83dfc8c5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-replacement-variable.php @@ -0,0 +1,76 @@ +variable = $variable; + $this->label = $label; + $this->description = $description; + } + + /** + * Returns the variable to use. + * + * @return string + */ + public function get_variable() { + return $this->variable; + } + + /** + * Returns the label of the replacement variable. + * + * @return string + */ + public function get_label() { + return $this->label; + } + + /** + * Returns the description of the replacement variable. + * + * @return string + */ + public function get_description() { + return $this->description; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-shortlinker.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-shortlinker.php new file mode 100644 index 00000000..8c2fd0d9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-shortlinker.php @@ -0,0 +1,54 @@ +helpers->short_link->build( $url ); + } + + /** + * Returns a version of the URL with a utm_content with the current version. + * + * @param string $url The URL to build upon. + * + * @return string The final URL. + */ + public static function get( $url ) { + return YoastSEO()->helpers->short_link->get( $url ); + } + + /** + * Echoes a version of the URL with a utm_content with the current version. + * + * @param string $url The URL to build upon. + * + * @return void + */ + public static function show( $url ) { + YoastSEO()->helpers->short_link->show( $url ); + } + + /** + * Gets the shortlink's query params. + * + * @return array The shortlink's query params. + */ + public static function get_query_params() { + return YoastSEO()->helpers->short_link->get_query_params(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php new file mode 100644 index 00000000..687b8fab --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-statistics.php @@ -0,0 +1,62 @@ +get_rank() === WPSEO_Rank::NO_FOCUS ) { + $posts = [ + 'meta_query' => [ + 'relation' => 'OR', + [ + 'key' => WPSEO_Meta::$meta_prefix . 'focuskw', + 'value' => 'needs-a-value-anyway', + 'compare' => 'NOT EXISTS', + ], + ], + ]; + } + elseif ( $rank->get_rank() === WPSEO_Rank::NO_INDEX ) { + $posts = [ + 'meta_key' => WPSEO_Meta::$meta_prefix . 'meta-robots-noindex', + 'meta_value' => '1', + 'compare' => '=', + ]; + } + else { + $posts = [ + 'meta_key' => WPSEO_Meta::$meta_prefix . 'linkdex', + 'meta_value' => [ $rank->get_starting_score(), $rank->get_end_score() ], + 'meta_compare' => 'BETWEEN', + 'meta_type' => 'NUMERIC', + ]; + } + + $posts['fields'] = 'ids'; + $posts['post_status'] = 'publish'; + + if ( current_user_can( 'edit_others_posts' ) === false ) { + $posts['author'] = get_current_user_id(); + } + + $posts = new WP_Query( $posts ); + + return (int) $posts->found_posts; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php new file mode 100644 index 00000000..e3c1940a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-wpseo-utils.php @@ -0,0 +1,1103 @@ +helpers->url->is_relative( $url ); + } + + /** + * Recursively trim whitespace round a string value or of string values within an array. + * Only trims strings to avoid typecasting a variable (to string). + * + * @since 1.8.0 + * + * @param mixed $value Value to trim or array of values to trim. + * + * @return mixed Trimmed value or array of trimmed values. + */ + public static function trim_recursive( $value ) { + if ( is_string( $value ) ) { + $value = trim( $value ); + } + elseif ( is_array( $value ) ) { + $value = array_map( [ self::class, 'trim_recursive' ], $value ); + } + + return $value; + } + + /** + * Emulate the WP native sanitize_text_field function in a %%variable%% safe way. + * + * Sanitize a string from user input or from the db. + * + * - Check for invalid UTF-8; + * - Convert single < characters to entity; + * - Strip all tags; + * - Remove line breaks, tabs and extra white space; + * - Strip octets - BUT DO NOT REMOVE (part of) VARIABLES WHICH WILL BE REPLACED. + * + * @link https://core.trac.wordpress.org/browser/trunk/src/wp-includes/formatting.php for the original. + * + * @since 1.8.0 + * + * @param string $value String value to sanitize. + * + * @return string + */ + public static function sanitize_text_field( $value ) { + $filtered = wp_check_invalid_utf8( $value ); + + if ( strpos( $filtered, '<' ) !== false ) { + $filtered = wp_pre_kses_less_than( $filtered ); + // This will strip extra whitespace for us. + $filtered = wp_strip_all_tags( $filtered, true ); + } + else { + $filtered = trim( preg_replace( '`[\r\n\t ]+`', ' ', $filtered ) ); + } + + $found = false; + while ( preg_match( '`[^%](%[a-f0-9]{2})`i', $filtered, $match ) ) { + $filtered = str_replace( $match[1], '', $filtered ); + $found = true; + } + unset( $match ); + + if ( $found ) { + // Strip out the whitespace that may now exist after removing the octets. + $filtered = trim( preg_replace( '` +`', ' ', $filtered ) ); + } + + /** + * Filter a sanitized text field string. + * + * @since WP 2.9.0 + * + * @param string $filtered The sanitized string. + * @param string $str The string prior to being sanitized. + */ + return apply_filters( 'sanitize_text_field', $filtered, $value ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Using WP native filter. + } + + /** + * Sanitize a url for saving to the database. + * Not to be confused with the old native WP function. + * + * @since 1.8.0 + * + * @param string $value String URL value to sanitize. + * @param array $allowed_protocols Optional set of allowed protocols. + * + * @return string + */ + public static function sanitize_url( $value, $allowed_protocols = [ 'http', 'https' ] ) { + + $url = ''; + $parts = wp_parse_url( $value ); + + if ( isset( $parts['scheme'], $parts['host'] ) ) { + $url = $parts['scheme'] . '://'; + + if ( isset( $parts['user'] ) ) { + $url .= rawurlencode( $parts['user'] ); + $url .= isset( $parts['pass'] ) ? ':' . rawurlencode( $parts['pass'] ) : ''; + $url .= '@'; + } + + $parts['host'] = preg_replace( + '`[^a-z0-9-.:\[\]\\x80-\\xff]`', + '', + strtolower( $parts['host'] ) + ); + + $url .= $parts['host'] . ( isset( $parts['port'] ) ? ':' . intval( $parts['port'] ) : '' ); + } + + if ( isset( $parts['path'] ) && strpos( $parts['path'], '/' ) === 0 ) { + $path = explode( '/', wp_strip_all_tags( $parts['path'] ) ); + $path = self::sanitize_encoded_text_field( $path ); + $url .= str_replace( '%40', '@', implode( '/', $path ) ); + } + + if ( ! $url ) { + return ''; + } + + if ( isset( $parts['query'] ) ) { + wp_parse_str( $parts['query'], $parsed_query ); + + $parsed_query = array_combine( + self::sanitize_encoded_text_field( array_keys( $parsed_query ) ), + self::sanitize_encoded_text_field( array_values( $parsed_query ) ) + ); + + $url = add_query_arg( $parsed_query, $url ); + } + + if ( isset( $parts['fragment'] ) ) { + $url .= '#' . self::sanitize_encoded_text_field( $parts['fragment'] ); + } + + if ( strpos( $url, '%' ) !== false ) { + $url = preg_replace_callback( + '`%[a-fA-F0-9]{2}`', + static function ( $octects ) { + return strtolower( $octects[0] ); + }, + $url + ); + } + + return esc_url_raw( $url, $allowed_protocols ); + } + + /** + * Decode, sanitize and encode the array of strings or the string. + * + * @since 13.3 + * + * @param array|string $value The value to sanitize and encode. + * + * @return array|string The sanitized value. + */ + public static function sanitize_encoded_text_field( $value ) { + if ( is_array( $value ) ) { + return array_map( [ self::class, 'sanitize_encoded_text_field' ], $value ); + } + + return rawurlencode( sanitize_text_field( rawurldecode( $value ) ) ); + } + + /** + * Validate a value as boolean. + * + * @since 1.8.0 + * + * @param mixed $value Value to validate. + * + * @return bool + */ + public static function validate_bool( $value ) { + if ( ! isset( self::$has_filters ) ) { + self::$has_filters = extension_loaded( 'filter' ); + } + + if ( self::$has_filters ) { + return filter_var( $value, FILTER_VALIDATE_BOOLEAN ); + } + else { + return self::emulate_filter_bool( $value ); + } + } + + /** + * Cast a value to bool. + * + * @since 1.8.0 + * + * @param mixed $value Value to cast. + * + * @return bool + */ + public static function emulate_filter_bool( $value ) { + $true = [ + '1', + 'true', + 'True', + 'TRUE', + 'y', + 'Y', + 'yes', + 'Yes', + 'YES', + 'on', + 'On', + 'ON', + ]; + $false = [ + '0', + 'false', + 'False', + 'FALSE', + 'n', + 'N', + 'no', + 'No', + 'NO', + 'off', + 'Off', + 'OFF', + ]; + + if ( is_bool( $value ) ) { + return $value; + } + elseif ( is_int( $value ) && ( $value === 0 || $value === 1 ) ) { + return (bool) $value; + } + elseif ( ( is_float( $value ) && ! is_nan( $value ) ) && ( $value === (float) 0 || $value === (float) 1 ) ) { + return (bool) $value; + } + elseif ( is_string( $value ) ) { + $value = trim( $value ); + if ( in_array( $value, $true, true ) ) { + return true; + } + elseif ( in_array( $value, $false, true ) ) { + return false; + } + else { + return false; + } + } + + return false; + } + + /** + * Validate a value as integer. + * + * @since 1.8.0 + * + * @param mixed $value Value to validate. + * + * @return int|bool Int or false in case of failure to convert to int. + */ + public static function validate_int( $value ) { + if ( ! isset( self::$has_filters ) ) { + self::$has_filters = extension_loaded( 'filter' ); + } + + if ( self::$has_filters ) { + return filter_var( $value, FILTER_VALIDATE_INT ); + } + else { + return self::emulate_filter_int( $value ); + } + } + + /** + * Cast a value to integer. + * + * @since 1.8.0 + * + * @param mixed $value Value to cast. + * + * @return int|bool + */ + public static function emulate_filter_int( $value ) { + if ( is_int( $value ) ) { + return $value; + } + elseif ( is_float( $value ) ) { + // phpcs:ignore Universal.Operators.StrictComparisons -- Purposeful loose comparison. + if ( (int) $value == $value && ! is_nan( $value ) ) { + return (int) $value; + } + else { + return false; + } + } + elseif ( is_string( $value ) ) { + $value = trim( $value ); + if ( $value === '' ) { + return false; + } + elseif ( ctype_digit( $value ) ) { + return (int) $value; + } + elseif ( strpos( $value, '-' ) === 0 && ctype_digit( substr( $value, 1 ) ) ) { + return (int) $value; + } + else { + return false; + } + } + + return false; + } + + /** + * Clears the WP or W3TC cache depending on which is used. + * + * @since 1.8.0 + * + * @return void + */ + public static function clear_cache() { + if ( function_exists( 'w3tc_pgcache_flush' ) ) { + w3tc_pgcache_flush(); + } + elseif ( function_exists( 'wp_cache_clear_cache' ) ) { + wp_cache_clear_cache(); + } + } + + /** + * Clear rewrite rules. + * + * @since 1.8.0 + * + * @return void + */ + public static function clear_rewrites() { + update_option( 'rewrite_rules', '' ); + } + + /** + * Do simple reliable math calculations without the risk of wrong results. + * + * In the rare case that the bcmath extension would not be loaded, it will return the normal calculation results. + * + * @link http://floating-point-gui.de/ + * @link http://php.net/language.types.float.php See the big red warning. + * + * @since 1.5.0 + * @since 1.8.0 Moved from stand-alone function to this class. + * + * @param mixed $number1 Scalar (string/int/float/bool). + * @param string $action Calculation action to execute. Valid input: + * '+' or 'add' or 'addition', + * '-' or 'sub' or 'subtract', + * '*' or 'mul' or 'multiply', + * '/' or 'div' or 'divide', + * '%' or 'mod' or 'modulus' + * '=' or 'comp' or 'compare'. + * @param mixed $number2 Scalar (string/int/float/bool). + * @param bool $round Whether or not to round the result. Defaults to false. + * Will be disregarded for a compare operation. + * @param int $decimals Decimals for rounding operation. Defaults to 0. + * @param int $precision Calculation precision. Defaults to 10. + * + * @return mixed Calculation Result or false if either or the numbers isn't scalar or + * an invalid operation was passed. + * - For compare the result will always be an integer. + * - For all other operations, the result will either be an integer (preferred) + * or a float. + */ + public static function calc( $number1, $action, $number2, $round = false, $decimals = 0, $precision = 10 ) { + static $bc; + + if ( ! is_scalar( $number1 ) || ! is_scalar( $number2 ) ) { + return false; + } + + if ( ! isset( $bc ) ) { + $bc = extension_loaded( 'bcmath' ); + } + + if ( $bc ) { + $number1 = number_format( $number1, 10, '.', '' ); + $number2 = number_format( $number2, 10, '.', '' ); + } + + $result = null; + $compare = false; + + switch ( $action ) { + case '+': + case 'add': + case 'addition': + $result = ( $bc ) ? bcadd( $number1, $number2, $precision ) /* string */ : ( $number1 + $number2 ); + break; + + case '-': + case 'sub': + case 'subtract': + $result = ( $bc ) ? bcsub( $number1, $number2, $precision ) /* string */ : ( $number1 - $number2 ); + break; + + case '*': + case 'mul': + case 'multiply': + $result = ( $bc ) ? bcmul( $number1, $number2, $precision ) /* string */ : ( $number1 * $number2 ); + break; + + case '/': + case 'div': + case 'divide': + if ( $bc ) { + $result = bcdiv( $number1, $number2, $precision ); // String, or NULL if right_operand is 0. + } + elseif ( $number2 != 0 ) { // phpcs:ignore Universal.Operators.StrictComparisons -- Purposeful loose comparison. + $result = ( $number1 / $number2 ); + } + + if ( ! isset( $result ) ) { + $result = 0; + } + break; + + case '%': + case 'mod': + case 'modulus': + if ( $bc ) { + $result = bcmod( $number1, $number2 ); // String, or NULL if modulus is 0. + } + elseif ( $number2 != 0 ) { // phpcs:ignore Universal.Operators.StrictComparisons -- Purposeful loose comparison. + $result = ( $number1 % $number2 ); + } + + if ( ! isset( $result ) ) { + $result = 0; + } + break; + + case '=': + case 'comp': + case 'compare': + $compare = true; + if ( $bc ) { + $result = bccomp( $number1, $number2, $precision ); // Returns int 0, 1 or -1. + } + else { + // phpcs:ignore Universal.Operators.StrictComparisons -- Purposeful loose comparison. + $result = ( $number1 == $number2 ) ? 0 : ( ( $number1 > $number2 ) ? 1 : -1 ); + } + break; + } + + if ( isset( $result ) ) { + if ( $compare === false ) { + if ( $round === true ) { + $result = round( floatval( $result ), $decimals ); + if ( $decimals === 0 ) { + $result = (int) $result; + } + } + else { + // phpcs:ignore Universal.Operators.StrictComparisons -- Purposeful loose comparison. + $result = ( intval( $result ) == $result ) ? intval( $result ) : floatval( $result ); + } + } + + return $result; + } + + return false; + } + + /** + * Trim whitespace and NBSP (Non-breaking space) from string. + * + * @since 2.0.0 + * + * @param string $text String input to trim. + * + * @return string + */ + public static function trim_nbsp_from_string( $text ) { + $find = [ ' ', chr( 0xC2 ) . chr( 0xA0 ) ]; + $text = str_replace( $find, ' ', $text ); + $text = trim( $text ); + + return $text; + } + + /** + * Check if a string is a valid datetime. + * + * @since 2.0.0 + * + * @param string $datetime String input to check as valid input for DateTime class. + * + * @return bool + */ + public static function is_valid_datetime( $datetime ) { + return YoastSEO()->helpers->date->is_valid_datetime( $datetime ); + } + + /** + * Format the URL to be sure it is okay for using as a redirect url. + * + * This method will parse the URL and combine them in one string. + * + * @since 2.3.0 + * + * @param string $url URL string. + * + * @return mixed + */ + public static function format_url( $url ) { + $parsed_url = wp_parse_url( $url ); + + $formatted_url = ''; + if ( ! empty( $parsed_url['path'] ) ) { + $formatted_url = $parsed_url['path']; + } + + // Prepend a slash if first char != slash. + if ( stripos( $formatted_url, '/' ) !== 0 ) { + $formatted_url = '/' . $formatted_url; + } + + // Append 'query' string if it exists. + if ( ! empty( $parsed_url['query'] ) ) { + $formatted_url .= '?' . $parsed_url['query']; + } + + return apply_filters( 'wpseo_format_admin_url', $formatted_url ); + } + + /** + * Retrieves the sitename. + * + * @since 3.0.0 + * + * @return string + */ + public static function get_site_name() { + return YoastSEO()->helpers->site->get_site_name(); + } + + /** + * Check if the current opened page is a Yoast SEO page. + * + * @since 3.0.0 + * + * @return bool + */ + public static function is_yoast_seo_page() { + return YoastSEO()->helpers->current_page->is_yoast_seo_page(); + } + + /** + * Check if the current opened page belongs to Yoast SEO Free. + * + * @since 3.3.0 + * + * @param string $current_page The current page the user is on. + * + * @return bool + */ + public static function is_yoast_seo_free_page( $current_page ) { + $yoast_seo_free_pages = [ + 'wpseo_dashboard', + 'wpseo_tools', + 'wpseo_search_console', + 'wpseo_licenses', + ]; + + return in_array( $current_page, $yoast_seo_free_pages, true ); + } + + /** + * Determine if Yoast SEO is in development mode? + * + * Inspired by JetPack (https://github.com/Automattic/jetpack/blob/master/class.jetpack.php#L1383-L1406). + * + * @since 3.0.0 + * + * @return bool + */ + public static function is_development_mode() { + $development_mode = false; + + if ( defined( 'YOAST_ENVIRONMENT' ) && YOAST_ENVIRONMENT === 'development' ) { + $development_mode = true; + } + elseif ( defined( 'WPSEO_DEBUG' ) ) { + $development_mode = WPSEO_DEBUG; + } + elseif ( site_url() && strpos( site_url(), '.' ) === false ) { + $development_mode = true; + } + + /** + * Filter the Yoast SEO development mode. + * + * @since 3.0 + * + * @param bool $development_mode Is Yoast SEOs development mode active. + */ + return apply_filters( 'yoast_seo_development_mode', $development_mode ); + } + + /** + * Retrieve home URL with proper trailing slash. + * + * @since 3.3.0 + * + * @param string $path Path relative to home URL. + * @param string|null $scheme Scheme to apply. + * + * @return string Home URL with optional path, appropriately slashed if not. + */ + public static function home_url( $path = '', $scheme = null ) { + return YoastSEO()->helpers->url->home( $path, $scheme ); + } + + /** + * Checks if the WP-REST-API is available. + * + * @since 3.6 + * @since 3.7 Introduced the $minimum_version parameter. + * + * @param string $minimum_version The minimum version the API should be. + * + * @return bool Returns true if the API is available. + */ + public static function is_api_available( $minimum_version = '2.0' ) { + return ( defined( 'REST_API_VERSION' ) + && version_compare( REST_API_VERSION, $minimum_version, '>=' ) ); + } + + /** + * Determine whether or not the metabox should be displayed for a post type. + * + * @param string|null $post_type Optional. The post type to check the visibility of the metabox for. + * + * @return bool Whether or not the metabox should be displayed. + */ + protected static function display_post_type_metabox( $post_type = null ) { + if ( ! isset( $post_type ) ) { + $post_type = get_post_type(); + } + + if ( ! isset( $post_type ) || ! WPSEO_Post_Type::is_post_type_accessible( $post_type ) ) { + return false; + } + + if ( $post_type === 'attachment' && WPSEO_Options::get( 'disable-attachment' ) ) { + return false; + } + + return apply_filters( 'wpseo_enable_editor_features_' . $post_type, WPSEO_Options::get( 'display-metabox-pt-' . $post_type ) ); + } + + /** + * Determine whether or not the metabox should be displayed for a taxonomy. + * + * @param string|null $taxonomy Optional. The post type to check the visibility of the metabox for. + * + * @return bool Whether or not the metabox should be displayed. + */ + protected static function display_taxonomy_metabox( $taxonomy = null ) { + if ( ! isset( $taxonomy ) || ! in_array( $taxonomy, get_taxonomies( [ 'public' => true ], 'names' ), true ) ) { + return false; + } + + return WPSEO_Options::get( 'display-metabox-tax-' . $taxonomy ); + } + + /** + * Determines whether the metabox is active for the given identifier and type. + * + * @param string $identifier The identifier to check for. + * @param string $type The type to check for. + * + * @return bool Whether or not the metabox is active. + */ + public static function is_metabox_active( $identifier, $type ) { + if ( $type === 'post_type' ) { + return self::display_post_type_metabox( $identifier ); + } + + if ( $type === 'taxonomy' ) { + return self::display_taxonomy_metabox( $identifier ); + } + + return false; + } + + /** + * Determines whether the plugin is active for the entire network. + * + * @return bool Whether the plugin is network-active. + */ + public static function is_plugin_network_active() { + return YoastSEO()->helpers->url->is_plugin_network_active(); + } + + /** + * Gets the type of the current post. + * + * @return string The post type, or an empty string. + */ + public static function get_post_type() { + $wp_screen = get_current_screen(); + + if ( $wp_screen !== null && ! empty( $wp_screen->post_type ) ) { + return $wp_screen->post_type; + } + return ''; + } + + /** + * Gets the type of the current page. + * + * @return string Returns 'post' if the current page is a post edit page. Taxonomy in other cases. + */ + public static function get_page_type() { + global $pagenow; + if ( WPSEO_Metabox::is_post_edit( $pagenow ) ) { + return 'post'; + } + + return 'taxonomy'; + } + + /** + * Getter for the Adminl10n array. Applies the wpseo_admin_l10n filter. + * + * @return array The Adminl10n array. + */ + public static function get_admin_l10n() { + $post_type = self::get_post_type(); + $page_type = self::get_page_type(); + + $label_object = false; + $no_index = false; + + if ( $page_type === 'post' ) { + $label_object = get_post_type_object( $post_type ); + $no_index = WPSEO_Options::get( 'noindex-' . $post_type, false ); + } + else { + $label_object = WPSEO_Taxonomy::get_labels(); + + $wp_screen = get_current_screen(); + + if ( $wp_screen !== null && ! empty( $wp_screen->taxonomy ) ) { + $taxonomy_slug = $wp_screen->taxonomy; + $no_index = WPSEO_Options::get( 'noindex-tax-' . $taxonomy_slug, false ); + } + } + + $wpseo_admin_l10n = [ + 'displayAdvancedTab' => WPSEO_Capability_Utils::current_user_can( 'wpseo_edit_advanced_metadata' ) || ! WPSEO_Options::get( 'disableadvanced_meta' ), + 'noIndex' => (bool) $no_index, + 'isPostType' => (bool) get_post_type(), + 'postType' => get_post_type(), + 'postTypeNamePlural' => ( $page_type === 'post' ) ? $label_object->label : $label_object->name, + 'postTypeNameSingular' => ( $page_type === 'post' ) ? $label_object->labels->singular_name : $label_object->singular_name, + 'isBreadcrumbsDisabled' => WPSEO_Options::get( 'breadcrumbs-enable', false ) !== true && ! current_theme_supports( 'yoast-seo-breadcrumbs' ), + // phpcs:ignore Generic.ControlStructures.DisallowYodaConditions -- Bug: squizlabs/PHP_CodeSniffer#2962. + 'isPrivateBlog' => ( (string) get_option( 'blog_public' ) ) === '0', + 'news_seo_is_active' => ( defined( 'WPSEO_NEWS_FILE' ) ), + 'isAiFeatureActive' => (bool) WPSEO_Options::get( 'enable_ai_generator' ), + ]; + + $additional_entries = apply_filters( 'wpseo_admin_l10n', [] ); + if ( is_array( $additional_entries ) ) { + $wpseo_admin_l10n = array_merge( $wpseo_admin_l10n, $additional_entries ); + } + + return $wpseo_admin_l10n; + } + + /** + * Retrieves the analysis worker log level. Defaults to errors only. + * + * Uses bool YOAST_SEO_DEBUG as flag to enable logging. Off equals ERROR. + * Uses string YOAST_SEO_DEBUG_ANALYSIS_WORKER as log level for the Analysis + * Worker. Defaults to INFO. + * Can be: TRACE, DEBUG, INFO, WARN or ERROR. + * + * @return string The log level to use. + */ + public static function get_analysis_worker_log_level() { + if ( defined( 'YOAST_SEO_DEBUG' ) && YOAST_SEO_DEBUG ) { + return defined( 'YOAST_SEO_DEBUG_ANALYSIS_WORKER' ) ? YOAST_SEO_DEBUG_ANALYSIS_WORKER : 'INFO'; + } + + return 'ERROR'; + } + + /** + * Returns the unfiltered home URL. + * + * In case WPML is installed, returns the original home_url and not the WPML version. + * In case of a multisite setup we return the network_home_url. + * + * @codeCoverageIgnore + * + * @return string The home url. + */ + public static function get_home_url() { + return YoastSEO()->helpers->url->network_safe_home_url(); + } + + /** + * Prepares data for outputting as JSON. + * + * @param array $data The data to format. + * + * @return false|string The prepared JSON string. + */ + public static function format_json_encode( $data ) { + $flags = ( JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); + + if ( self::is_development_mode() ) { + $flags = ( $flags | JSON_PRETTY_PRINT ); + + /** + * Filter the Yoast SEO development mode. + * + * @param array $data Allows filtering of the JSON data for debug purposes. + */ + $data = apply_filters( 'wpseo_debug_json_data', $data ); + } + + // phpcs:ignore Yoast.Yoast.JsonEncodeAlternative.FoundWithAdditionalParams -- This is the definition of format_json_encode. + return wp_json_encode( $data, $flags ); + } + + /** + * Extends the allowed post tags with accessibility-related attributes. + * + * @codeCoverageIgnore + * + * @param array $allowed_post_tags The allowed post tags. + * + * @return array The allowed tags including post tags, input tags and select tags. + */ + public static function extend_kses_post_with_a11y( $allowed_post_tags ) { + static $a11y_tags; + + if ( isset( $a11y_tags ) === false ) { + $a11y_tags = [ + 'button' => [ + 'aria-expanded' => true, + 'aria-controls' => true, + ], + 'div' => [ + 'tabindex' => true, + ], + // Below are attributes that are needed for backwards compatibility (WP < 5.1). + 'span' => [ + 'aria-hidden' => true, + ], + 'input' => [ + 'aria-describedby' => true, + ], + 'select' => [ + 'aria-describedby' => true, + ], + 'textarea' => [ + 'aria-describedby' => true, + ], + ]; + + // Add the global allowed attributes to each html element. + $a11y_tags = array_map( '_wp_add_global_attributes', $a11y_tags ); + } + + return array_merge_recursive( $allowed_post_tags, $a11y_tags ); + } + + /** + * Extends the allowed post tags with input, select and option tags. + * + * @codeCoverageIgnore + * + * @param array $allowed_post_tags The allowed post tags. + * + * @return array The allowed tags including post tags, input tags, select tags and option tags. + */ + public static function extend_kses_post_with_forms( $allowed_post_tags ) { + static $input_tags; + + if ( isset( $input_tags ) === false ) { + $input_tags = [ + 'input' => [ + 'accept' => true, + 'accesskey' => true, + 'align' => true, + 'alt' => true, + 'autocomplete' => true, + 'autofocus' => true, + 'checked' => true, + 'contenteditable' => true, + 'dirname' => true, + 'disabled' => true, + 'draggable' => true, + 'dropzone' => true, + 'form' => true, + 'formaction' => true, + 'formenctype' => true, + 'formmethod' => true, + 'formnovalidate' => true, + 'formtarget' => true, + 'height' => true, + 'hidden' => true, + 'lang' => true, + 'list' => true, + 'max' => true, + 'maxlength' => true, + 'min' => true, + 'multiple' => true, + 'name' => true, + 'pattern' => true, + 'placeholder' => true, + 'readonly' => true, + 'required' => true, + 'size' => true, + 'spellcheck' => true, + 'src' => true, + 'step' => true, + 'tabindex' => true, + 'translate' => true, + 'type' => true, + 'value' => true, + 'width' => true, + + /* + * Below are attributes that are needed for backwards compatibility (WP < 5.1). + * They are used for the social media image in the metabox. + * These can be removed once we move to the React versions of the social previews. + */ + 'data-target' => true, + 'data-target-id' => true, + ], + 'select' => [ + 'accesskey' => true, + 'autofocus' => true, + 'contenteditable' => true, + 'disabled' => true, + 'draggable' => true, + 'dropzone' => true, + 'form' => true, + 'hidden' => true, + 'lang' => true, + 'multiple' => true, + 'name' => true, + 'onblur' => true, + 'onchange' => true, + 'oncontextmenu' => true, + 'onfocus' => true, + 'oninput' => true, + 'oninvalid' => true, + 'onreset' => true, + 'onsearch' => true, + 'onselect' => true, + 'onsubmit' => true, + 'required' => true, + 'size' => true, + 'spellcheck' => true, + 'tabindex' => true, + 'translate' => true, + ], + 'option' => [ + 'class' => true, + 'disabled' => true, + 'id' => true, + 'label' => true, + 'selected' => true, + 'value' => true, + ], + ]; + + // Add the global allowed attributes to each html element. + $input_tags = array_map( '_wp_add_global_attributes', $input_tags ); + } + + return array_merge_recursive( $allowed_post_tags, $input_tags ); + } + + /** + * Gets an array of enabled features. + * + * @return string[] The array of enabled features. + */ + public static function retrieve_enabled_features() { + /** + * The feature flag integration. + * + * @var Feature_Flag_Integration $feature_flag_integration; + */ + $feature_flag_integration = YoastSEO()->classes->get( Feature_Flag_Integration::class ); + return $feature_flag_integration->get_enabled_features(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/class-yoast-dynamic-rewrites.php b/wp/wp-content/plugins/wordpress-seo/inc/class-yoast-dynamic-rewrites.php new file mode 100644 index 00000000..eb029464 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/class-yoast-dynamic-rewrites.php @@ -0,0 +1,178 @@ +register_hooks(); + } + + return self::$instance; + } + + /** + * Constructor. + * + * Sets the WP_Rewrite instance to use. + * + * @param WP_Rewrite|null $rewrite Optional. WP_Rewrite instance to use. Default is the $wp_rewrite global. + * @throws RuntimeException Throws an exception if the $wp_rewrite global is not set. + */ + public function __construct( $rewrite = null ) { + if ( ! $rewrite ) { + if ( empty( $GLOBALS['wp_rewrite'] ) ) { + /* translators: 1: PHP class name, 2: PHP variable name */ + throw new RuntimeException( sprintf( __( 'The %1$s class must not be instantiated before the %2$s global is set.', 'wordpress-seo' ), self::class, '$wp_rewrite' ) ); + } + + $rewrite = $GLOBALS['wp_rewrite']; + } + + $this->wp_rewrite = $rewrite; + } + + /** + * Registers all necessary hooks with WordPress. + * + * @return void + */ + public function register_hooks() { + add_action( 'init', [ $this, 'trigger_dynamic_rewrite_rules_hook' ], 1 ); + add_filter( 'option_rewrite_rules', [ $this, 'filter_rewrite_rules_option' ] ); + add_filter( 'sanitize_option_rewrite_rules', [ $this, 'sanitize_rewrite_rules_option' ] ); + } + + /** + * Adds a dynamic rewrite rule that transforms a URL structure to a set of query vars. + * + * Rules registered with this method are applied dynamically and do not require the rewrite rules + * to be flushed in order to become active, which is a benefit over the regular WordPress core API. + * Note however that the dynamic application only works for rules that correspond to index.php. + * Non-WordPress rewrite rules still require flushing. + * + * Any value in the $after parameter that isn't 'bottom' will result in the rule + * being placed at the top of the rewrite rules. + * + * @param string $regex Regular expression to match request against. + * @param string|array $query The corresponding query vars for this rewrite rule. + * @param string $priority Optional. Priority of the new rule. Accepts 'top' + * or 'bottom'. Default 'bottom'. + * + * @return void + */ + public function add_rule( $regex, $query, $priority = 'bottom' ) { + if ( is_array( $query ) ) { + $query = add_query_arg( $query, 'index.php' ); + } + + $this->wp_rewrite->add_rule( $regex, $query, $priority ); + + // Do not further handle external rules. + if ( substr( $query, 0, strlen( $this->wp_rewrite->index . '?' ) ) !== $this->wp_rewrite->index . '?' ) { + return; + } + + if ( $priority === 'bottom' ) { + $this->extra_rules_bottom[ $regex ] = $query; + return; + } + + $this->extra_rules_top[ $regex ] = $query; + } + + /** + * Triggers the hook on which rewrite rules should be added. + * + * This allows for a more specific point in time from the generic `init` hook where this is + * otherwise handled. + * + * @return void + */ + public function trigger_dynamic_rewrite_rules_hook() { + + /** + * Fires when the plugin's dynamic rewrite rules should be added. + * + * @param self $dynamic_rewrites Dynamic rewrites handler instance. Use its `add_rule()` method + * to add dynamic rewrite rules. + */ + do_action( 'yoast_add_dynamic_rewrite_rules', $this ); + } + + /** + * Filters the rewrite rules option to dynamically add additional rewrite rules. + * + * @param array|string $rewrite_rules Array of rewrite rule $regex => $query pairs, or empty string + * if currently not set. + * + * @return array|string Filtered value of $rewrite_rules. + */ + public function filter_rewrite_rules_option( $rewrite_rules ) { + // Do not add extra rewrite rules if the rules need to be flushed. + if ( empty( $rewrite_rules ) ) { + return $rewrite_rules; + } + + return array_merge( $this->extra_rules_top, $rewrite_rules, $this->extra_rules_bottom ); + } + + /** + * Sanitizes the rewrite rules option prior to writing it to the database. + * + * This method ensures that the dynamic rewrite rules do not become part of the actual option. + * + * @param array|string $rewrite_rules Array pf rewrite rule $regex => $query pairs, or empty string + * in order to unset. + * + * @return array|string Filtered value of $rewrite_rules before writing the option. + */ + public function sanitize_rewrite_rules_option( $rewrite_rules ) { + if ( empty( $rewrite_rules ) ) { + return $rewrite_rules; + } + + return array_diff_key( $rewrite_rules, $this->extra_rules_top, $this->extra_rules_bottom ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/date-helper.php b/wp/wp-content/plugins/wordpress-seo/inc/date-helper.php new file mode 100644 index 00000000..f6489a47 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/date-helper.php @@ -0,0 +1,61 @@ +helpers->date->format( $date, $format ); + } + + /** + * Formats the given timestamp to the needed format. + * + * @param int $timestamp The timestamp to use for the formatting. + * @param string $format The format that the passed date should be in. + * + * @return string The formatted date. + */ + public function format_timestamp( $timestamp, $format = DATE_W3C ) { + return YoastSEO()->helpers->date->format_timestamp( $timestamp, $format ); + } + + /** + * Formats a given date in UTC TimeZone format and translate it to the set language. + * + * @param string $date String representing the date / time. + * @param string $format The format that the passed date should be in. + * + * @return string The formatted and translated date. + */ + public function format_translated( $date, $format = DATE_W3C ) { + return YoastSEO()->helpers->date->format_translated( $date, $format ); + } + + /** + * Check if a string is a valid datetime. + * + * @param string $datetime String input to check as valid input for DateTime class. + * + * @return bool True when datatime is valid. + */ + public function is_valid_datetime( $datetime ) { + return YoastSEO()->helpers->date->is_valid_datetime( $datetime ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/exceptions/class-myyoast-bad-request-exception.php b/wp/wp-content/plugins/wordpress-seo/inc/exceptions/class-myyoast-bad-request-exception.php new file mode 100644 index 00000000..d9d9f9a8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/exceptions/class-myyoast-bad-request-exception.php @@ -0,0 +1,13 @@ +get_defaults(); + * + * @var array + */ + protected $defaults = []; + + /** + * Available options for the 'access' setting. Used for input validation. + * + * {@internal Important: Make sure the options added to the array here are in line + * with the keys for the options set for the select box in the + * admin/pages/network.php file.}} + * + * @var array + */ + public static $allowed_access_options = [ + 'admin', + 'superadmin', + ]; + + /** + * Get the singleton instance of this class. + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Only run parent constructor in multisite context. + */ + public function __construct() { + $allow_prefix = self::ALLOW_KEY_PREFIX; + $this->defaults = [ + 'access' => 'admin', + 'defaultblog' => '', // Numeric blog ID or empty. + "{$allow_prefix}disableadvanced_meta" => true, + "{$allow_prefix}ryte_indexability" => false, + "{$allow_prefix}content_analysis_active" => true, + "{$allow_prefix}keyword_analysis_active" => true, + "{$allow_prefix}inclusive_language_analysis_active" => true, + "{$allow_prefix}enable_admin_bar_menu" => true, + "{$allow_prefix}enable_cornerstone_content" => true, + "{$allow_prefix}enable_xml_sitemap" => true, + "{$allow_prefix}enable_text_link_counter" => true, + "{$allow_prefix}enable_headless_rest_endpoints" => true, + "{$allow_prefix}enable_metabox_insights" => true, + "{$allow_prefix}enable_link_suggestions" => true, + "{$allow_prefix}tracking" => true, + "{$allow_prefix}enable_enhanced_slack_sharing" => true, + "{$allow_prefix}semrush_integration_active" => true, + "{$allow_prefix}wincher_integration_active" => false, + "{$allow_prefix}remove_feed_global" => true, + "{$allow_prefix}remove_feed_global_comments" => true, + "{$allow_prefix}remove_feed_post_comments" => true, + "{$allow_prefix}enable_index_now" => true, + "{$allow_prefix}enable_ai_generator" => true, + "{$allow_prefix}remove_feed_authors" => true, + "{$allow_prefix}remove_feed_categories" => true, + "{$allow_prefix}remove_feed_tags" => true, + "{$allow_prefix}remove_feed_custom_taxonomies" => true, + "{$allow_prefix}remove_feed_post_types" => true, + "{$allow_prefix}remove_feed_search" => true, + "{$allow_prefix}remove_atom_rdf_feeds" => true, + "{$allow_prefix}remove_shortlinks" => true, + "{$allow_prefix}remove_rest_api_links" => true, + "{$allow_prefix}remove_rsd_wlw_links" => true, + "{$allow_prefix}remove_oembed_links" => true, + "{$allow_prefix}remove_generator" => true, + "{$allow_prefix}remove_emoji_scripts" => true, + "{$allow_prefix}remove_powered_by_header" => true, + "{$allow_prefix}remove_pingback_header" => true, + "{$allow_prefix}clean_campaign_tracking_urls" => true, + "{$allow_prefix}clean_permalinks" => true, + "{$allow_prefix}search_cleanup" => true, + "{$allow_prefix}search_cleanup_emoji" => true, + "{$allow_prefix}search_cleanup_patterns" => true, + "{$allow_prefix}redirect_search_pretty_urls" => true, + "{$allow_prefix}algolia_integration_active" => true, + ]; + + if ( is_multisite() ) { + parent::__construct(); + + add_filter( 'admin_title', [ 'Yoast_Input_Validation', 'add_yoast_admin_document_title_errors' ] ); + } + } + + /** + * Add filters to make sure that the option default is returned if the option is not set + * + * @return void + */ + public function add_default_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'default_site_option_' . $this->option_name, [ $this, 'get_defaults' ] ) === false ) { + add_filter( 'default_site_option_' . $this->option_name, [ $this, 'get_defaults' ] ); + } + } + + /** + * Remove the default filters. + * Called from the validate() method to prevent failure to add new options. + * + * @return void + */ + public function remove_default_filters() { + remove_filter( 'default_site_option_' . $this->option_name, [ $this, 'get_defaults' ] ); + } + + /** + * Add filters to make sure that the option is merged with its defaults before being returned. + * + * @return void + */ + public function add_option_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'site_option_' . $this->option_name, [ $this, 'get_option' ] ) === false ) { + add_filter( 'site_option_' . $this->option_name, [ $this, 'get_option' ] ); + } + } + + /** + * Remove the option filters. + * Called from the clean_up methods to make sure we retrieve the original old option. + * + * @return void + */ + public function remove_option_filters() { + remove_filter( 'site_option_' . $this->option_name, [ $this, 'get_option' ] ); + } + + /* *********** METHODS influencing add_uption(), update_option() and saving from admin pages *********** */ + + /** + * Validate the option. + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database. + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + case 'access': + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], self::$allowed_access_options, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + elseif ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + $key, // Suffix-ID for the error message box. + /* translators: %1$s expands to the option name and %2$sexpands to Yoast SEO */ + sprintf( __( '%1$s is not a valid choice for who should be allowed access to the %2$s settings. Value reset to the default.', 'wordpress-seo' ), esc_html( sanitize_text_field( $dirty[ $key ] ) ), 'Yoast SEO' ), // The error message. + 'error' // Message type. + ); + } + break; + + case 'defaultblog': + if ( isset( $dirty[ $key ] ) && ( $dirty[ $key ] !== '' && $dirty[ $key ] !== '-' ) ) { + $int = WPSEO_Utils::validate_int( $dirty[ $key ] ); + if ( $int !== false && $int > 0 ) { + // Check if a valid blog number has been received. + $exists = get_blog_details( $int, false ); + if ( $exists && $exists->deleted === '0' ) { + $clean[ $key ] = $int; + } + elseif ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + $key, // Suffix-ID for the error message box. + esc_html__( 'The default blog setting must be the numeric blog id of the blog you want to use as default.', 'wordpress-seo' ) + . '
      ' + . sprintf( + /* translators: %s is the ID number of a blog. */ + esc_html__( 'This must be an existing blog. Blog %s does not exist or has been marked as deleted.', 'wordpress-seo' ), + '' . esc_html( sanitize_text_field( $dirty[ $key ] ) ) . '' + ), // The error message. + 'error' // Message type. + ); + } + unset( $exists ); + } + elseif ( function_exists( 'add_settings_error' ) ) { + add_settings_error( + $this->group_name, // Slug title of the setting. + $key, // Suffix-ID for the error message box. + esc_html__( 'The default blog setting must be the numeric blog id of the blog you want to use as default.', 'wordpress-seo' ) . '
      ' . esc_html__( 'No numeric value was received.', 'wordpress-seo' ), // The error message. + 'error' // Message type. + ); + } + unset( $int ); + } + break; + + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php new file mode 100644 index 00000000..220dd6f8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-social.php @@ -0,0 +1,322 @@ +get_defaults(); + * + * @var array + */ + protected $defaults = [ + // Form fields. + 'facebook_site' => '', // Text field. + 'instagram_url' => '', + 'linkedin_url' => '', + 'myspace_url' => '', + 'og_default_image' => '', // Text field. + 'og_default_image_id' => '', + 'og_frontpage_title' => '', // Text field. + 'og_frontpage_desc' => '', // Text field. + 'og_frontpage_image' => '', // Text field. + 'og_frontpage_image_id' => '', + 'opengraph' => true, + 'pinterest_url' => '', + 'pinterestverify' => '', + 'twitter' => true, + 'twitter_site' => '', // Text field. + 'twitter_card_type' => 'summary_large_image', + 'youtube_url' => '', + 'wikipedia_url' => '', + 'other_social_urls' => [], + 'mastodon_url' => '', + ]; + + /** + * Array of sub-options which should not be overloaded with multi-site defaults. + * + * @var array + */ + public $ms_exclude = [ + /* Privacy. */ + 'pinterestverify', + ]; + + /** + * Array of allowed twitter card types. + * + * While we only have the options summary and summary_large_image in the + * interface now, we might change that at some point. + * + * {@internal Uncomment any of these to allow them in validation *and* automatically + * add them as a choice in the options page.}} + * + * @var array + */ + public static $twitter_card_types = [ + 'summary_large_image' => '', + // 'summary' => '', + // 'photo' => '', + // 'gallery' => '', + // 'app' => '', + // 'player' => '', + // 'product' => '', + ]; + + /** + * Add the actions and filters for the option. + */ + protected function __construct() { + parent::__construct(); + + add_filter( 'admin_title', [ 'Yoast_Input_Validation', 'add_yoast_admin_document_title_errors' ] ); + } + + /** + * Get the singleton instance of this class. + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Translate/set strings used in the option defaults. + * + * @return void + */ + public function translate_defaults() { + self::$twitter_card_types['summary_large_image'] = __( 'Summary with large image', 'wordpress-seo' ); + } + + /** + * Validate the option. + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database. + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + /* Text fields. */ + case 'og_frontpage_desc': + case 'og_frontpage_title': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $dirty[ $key ] ); + } + break; + + case 'og_default_image_id': + case 'og_frontpage_image_id': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = (int) $dirty[ $key ]; + + if ( $dirty[ $key ] === '' ) { + $clean[ $key ] = $dirty[ $key ]; + } + } + break; + + /* URL text fields - no ftp allowed. */ + case 'facebook_site': + case 'instagram_url': + case 'linkedin_url': + case 'myspace_url': + case 'pinterest_url': + case 'og_default_image': + case 'og_frontpage_image': + case 'youtube_url': + case 'wikipedia_url': + case 'mastodon_url': + $this->validate_url( $key, $dirty, $old, $clean ); + break; + + case 'pinterestverify': + $this->validate_verification_string( $key, $dirty, $old, $clean ); + break; + + /* Twitter user name. */ + case 'twitter_site': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $twitter_id = $this->validate_twitter_id( $dirty[ $key ] ); + + if ( $twitter_id ) { + $clean[ $key ] = $twitter_id; + } + elseif ( isset( $old[ $key ] ) && $old[ $key ] !== '' ) { + $twitter_id = sanitize_text_field( ltrim( $old[ $key ], '@' ) ); + if ( preg_match( '`^[A-Za-z0-9_]{1,25}$`', $twitter_id ) ) { + $clean[ $key ] = $twitter_id; + } + } + unset( $twitter_id ); + + Yoast_Input_Validation::add_dirty_value_to_settings_errors( $key, $dirty[ $key ] ); + } + break; + + case 'twitter_card_type': + if ( isset( $dirty[ $key ], self::$twitter_card_types[ $dirty[ $key ] ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + + /* Boolean fields. */ + case 'opengraph': + case 'twitter': + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + + /* Array fields. */ + case 'other_social_urls': + if ( isset( $dirty[ $key ] ) ) { + $items = $dirty[ $key ]; + if ( ! is_array( $items ) ) { + $items = json_decode( $dirty[ $key ], true ); + } + + if ( is_array( $items ) ) { + foreach ( $items as $item_key => $item ) { + $validated_url = $this->validate_social_url( $item ); + + if ( $validated_url === false ) { + // Restore the previous URL values, if any. + $old_urls = ( isset( $old[ $key ] ) ) ? $old[ $key ] : []; + foreach ( $old_urls as $old_item_key => $old_url ) { + if ( $old_url !== '' ) { + $url = WPSEO_Utils::sanitize_url( $old_url ); + if ( $url !== '' ) { + $clean[ $key ][ $old_item_key ] = $url; + } + } + } + break; + } + + // The URL format is valid, let's sanitize it. + $url = WPSEO_Utils::sanitize_url( $validated_url ); + if ( $url !== '' ) { + $clean[ $key ][ $item_key ] = $url; + } + } + } + } + + break; + } + } + + return $clean; + } + + /** + * Validates a social URL. + * + * @param string $url The url to be validated. + * + * @return string|false The validated URL or false if the URL is not valid. + */ + public function validate_social_url( $url ) { + $validated_url = filter_var( WPSEO_Utils::sanitize_url( trim( $url ) ), FILTER_VALIDATE_URL ); + + return $validated_url; + } + + /** + * Validates a twitter id. + * + * @param string $twitter_id The twitter id to be validated. + * @param bool $strip_at_sign Whether or not to strip the `@` sign. + * + * @return string|false The validated twitter id or false if it is not valid. + */ + public function validate_twitter_id( $twitter_id, $strip_at_sign = true ) { + $twitter_id = ( $strip_at_sign ) ? sanitize_text_field( ltrim( $twitter_id, '@' ) ) : sanitize_text_field( $twitter_id ); + + /* + * From the Twitter documentation about twitter screen names: + * Typically a maximum of 15 characters long, but some historical accounts + * may exist with longer names. + * A username can only contain alphanumeric characters (letters A-Z, numbers 0-9) + * with the exception of underscores. + * + * @link https://support.twitter.com/articles/101299-why-can-t-i-register-certain-usernames + */ + if ( preg_match( '`^[A-Za-z0-9_]{1,25}$`', $twitter_id ) ) { + return $twitter_id; + } + + if ( preg_match( '`^http(?:s)?://(?:www\.)?(?:twitter|x)\.com/(?P[A-Za-z0-9_]{1,25})/?$`', $twitter_id, $matches ) ) { + return $matches['handle']; + } + + return false; + } + + /** + * Clean a given option value. + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string|null $current_version Optional. Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array|null $all_old_option_values Optional. Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option. + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + + /* Move options from very old option to this one. */ + $old_option = null; + if ( isset( $all_old_option_values ) ) { + // Ok, we have an import. + if ( isset( $all_old_option_values['wpseo_indexation'] ) && is_array( $all_old_option_values['wpseo_indexation'] ) && $all_old_option_values['wpseo_indexation'] !== [] ) { + $old_option = $all_old_option_values['wpseo_indexation']; + } + } + else { + $old_option = get_option( 'wpseo_indexation' ); + } + + if ( is_array( $old_option ) && $old_option !== [] ) { + $move = [ + 'opengraph', + ]; + foreach ( $move as $key ) { + if ( isset( $old_option[ $key ] ) && ! isset( $option_value[ $key ] ) ) { + $option_value[ $key ] = $old_option[ $key ]; + } + } + unset( $move, $key ); + } + unset( $old_option ); + + return $option_value; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php new file mode 100644 index 00000000..ff613e48 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-titles.php @@ -0,0 +1,1006 @@ +get_defaults(); + * + * {@internal Note: Some of the default values are added via the translate_defaults() method.}} + * + * @var string[] + */ + protected $defaults = [ + // Form fields. + 'forcerewritetitle' => false, + 'separator' => 'sc-dash', + 'title-home-wpseo' => '%%sitename%% %%page%% %%sep%% %%sitedesc%%', // Text field. + 'title-author-wpseo' => '', // Text field. + 'title-archive-wpseo' => '%%date%% %%page%% %%sep%% %%sitename%%', // Text field. + 'title-search-wpseo' => '', // Text field. + 'title-404-wpseo' => '', // Text field. + + 'social-title-author-wpseo' => '%%name%%', // Text field. + 'social-title-archive-wpseo' => '%%date%%', // Text field. + 'social-description-author-wpseo' => '', // Text area. + 'social-description-archive-wpseo' => '', // Text area. + 'social-image-url-author-wpseo' => '', // Hidden input field. + 'social-image-url-archive-wpseo' => '', // Hidden input field. + 'social-image-id-author-wpseo' => 0, // Hidden input field. + 'social-image-id-archive-wpseo' => 0, // Hidden input field. + + 'metadesc-home-wpseo' => '', // Text area. + 'metadesc-author-wpseo' => '', // Text area. + 'metadesc-archive-wpseo' => '', // Text area. + 'rssbefore' => '', // Text area. + 'rssafter' => '', // Text area. + + 'noindex-author-wpseo' => false, + 'noindex-author-noposts-wpseo' => true, + 'noindex-archive-wpseo' => true, + + 'disable-author' => false, + 'disable-date' => false, + 'disable-post_format' => false, + 'disable-attachment' => true, + + 'breadcrumbs-404crumb' => '', // Text field. + 'breadcrumbs-display-blog-page' => true, + 'breadcrumbs-boldlast' => false, + 'breadcrumbs-archiveprefix' => '', // Text field. + 'breadcrumbs-enable' => true, + 'breadcrumbs-home' => '', // Text field. + 'breadcrumbs-prefix' => '', // Text field. + 'breadcrumbs-searchprefix' => '', // Text field. + 'breadcrumbs-sep' => '»', // Text field. + + 'website_name' => '', + 'person_name' => '', + 'person_logo' => '', + 'person_logo_id' => 0, + 'alternate_website_name' => '', + 'company_logo' => '', + 'company_logo_id' => 0, + 'company_logo_meta' => false, + 'person_logo_meta' => false, + 'company_name' => '', + 'company_alternate_name' => '', + 'company_or_person' => 'company', + 'company_or_person_user_id' => false, + + 'stripcategorybase' => false, + + 'open_graph_frontpage_title' => '%%sitename%%', // Text field. + 'open_graph_frontpage_desc' => '', // Text field. + 'open_graph_frontpage_image' => '', // Text field. + 'open_graph_frontpage_image_id' => 0, + + 'publishing_principles_id' => 0, + 'ownership_funding_info_id' => 0, + 'actionable_feedback_policy_id' => 0, + 'corrections_policy_id' => 0, + 'ethics_policy_id' => 0, + 'diversity_policy_id' => 0, + 'diversity_staffing_report_id' => 0, + + 'org-description' => '', + 'org-email' => '', + 'org-phone' => '', + 'org-legal-name' => '', + 'org-founding-date' => '', + 'org-number-employees' => '', + + 'org-vat-id' => '', + 'org-tax-id' => '', + 'org-iso' => '', + 'org-duns' => '', + 'org-leicode' => '', + 'org-naics' => '', + + /* + * Uses enrich_defaults to add more along the lines of: + * - 'title-' . $pt->name => ''; // Text field. + * - 'metadesc-' . $pt->name => ''; // Text field. + * - 'noindex-' . $pt->name => false; + * - 'display-metabox-pt-' . $pt->name => false; + * + * - 'title-ptarchive-' . $pt->name => ''; // Text field. + * - 'metadesc-ptarchive-' . $pt->name => ''; // Text field. + * - 'bctitle-ptarchive-' . $pt->name => ''; // Text field. + * - 'noindex-ptarchive-' . $pt->name => false; + * + * - 'title-tax-' . $tax->name => '''; // Text field. + * - 'metadesc-tax-' . $tax->name => ''; // Text field. + * - 'noindex-tax-' . $tax->name => false; + * - 'display-metabox-tax-' . $tax->name => false; + * + * - 'schema-page-type-' . $pt->name => 'WebPage'; + * - 'schema-article-type-' . $pt->name => 'Article'; + */ + ]; + + /** + * Used for "caching" during pageload. + * + * @var string[] + */ + protected $enriched_defaults = null; + + /** + * Array of variable option name patterns for the option. + * + * @var string[] + */ + protected $variable_array_key_patterns = [ + 'title-', + 'metadesc-', + 'noindex-', + 'display-metabox-pt-', + 'bctitle-ptarchive-', + 'post_types-', + 'taxonomy-', + 'schema-page-type-', + 'schema-article-type-', + 'social-title-', + 'social-description-', + 'social-image-url-', + 'social-image-id-', + 'org-', + ]; + + /** + * Array of sub-options which should not be overloaded with multi-site defaults. + * + * @var string[] + */ + public $ms_exclude = [ + 'forcerewritetitle', + ]; + + /** + * Add the actions and filters for the option. + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away. + */ + protected function __construct() { + parent::__construct(); + add_action( 'update_option_' . $this->option_name, [ 'WPSEO_Utils', 'clear_cache' ] ); + add_action( 'init', [ $this, 'end_of_init' ], 999 ); + + add_action( 'registered_post_type', [ $this, 'invalidate_enrich_defaults_cache' ] ); + add_action( 'unregistered_post_type', [ $this, 'invalidate_enrich_defaults_cache' ] ); + add_action( 'registered_taxonomy', [ $this, 'invalidate_enrich_defaults_cache' ] ); + add_action( 'unregistered_taxonomy', [ $this, 'invalidate_enrich_defaults_cache' ] ); + + add_filter( 'admin_title', [ 'Yoast_Input_Validation', 'add_yoast_admin_document_title_errors' ] ); + } + + /** + * Make sure we can recognize the right action for the double cleaning. + * + * @return void + */ + public function end_of_init() { + do_action( 'wpseo_double_clean_titles' ); + } + + /** + * Get the singleton instance of this class. + * + * @return self + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Get the available separator options. + * + * @return string[] + */ + public function get_separator_options() { + $separators = wp_list_pluck( self::get_separator_option_list(), 'option' ); + + /** + * Allow altering the array with separator options. + * + * @param array $separator_options Array with the separator options. + */ + $filtered_separators = apply_filters( 'wpseo_separator_options', $separators ); + + if ( is_array( $filtered_separators ) && $filtered_separators !== [] ) { + $separators = array_merge( $separators, $filtered_separators ); + } + + return $separators; + } + + /** + * Get the available separator options aria-labels. + * + * @return string[] Array with the separator options aria-labels. + */ + public function get_separator_options_for_display() { + $separators = $this->get_separator_options(); + $separator_list = self::get_separator_option_list(); + + $separator_options = []; + + foreach ( $separators as $key => $label ) { + $aria_label = ( $separator_list[ $key ]['label'] ?? '' ); + + $separator_options[ $key ] = [ + 'label' => $label, + 'aria_label' => $aria_label, + ]; + } + + return $separator_options; + } + + /** + * Translate strings used in the option defaults. + * + * @return void + */ + public function translate_defaults() { + /* translators: 1: Author name; 2: Site name. */ + $this->defaults['title-author-wpseo'] = sprintf( __( '%1$s, Author at %2$s', 'wordpress-seo' ), '%%name%%', '%%sitename%%' ) . ' %%page%% '; + /* translators: %s expands to the search phrase. */ + $this->defaults['title-search-wpseo'] = sprintf( __( 'You searched for %s', 'wordpress-seo' ), '%%searchphrase%%' ) . ' %%page%% %%sep%% %%sitename%%'; + $this->defaults['title-404-wpseo'] = __( 'Page not found', 'wordpress-seo' ) . ' %%sep%% %%sitename%%'; + /* translators: 1: link to post; 2: link to blog. */ + $this->defaults['rssafter'] = sprintf( __( 'The post %1$s appeared first on %2$s.', 'wordpress-seo' ), '%%POSTLINK%%', '%%BLOGLINK%%' ); + + $this->defaults['breadcrumbs-404crumb'] = __( 'Error 404: Page not found', 'wordpress-seo' ); + $this->defaults['breadcrumbs-archiveprefix'] = __( 'Archives for', 'wordpress-seo' ); + $this->defaults['breadcrumbs-home'] = __( 'Home', 'wordpress-seo' ); + $this->defaults['breadcrumbs-searchprefix'] = __( 'You searched for', 'wordpress-seo' ); + } + + /** + * Add dynamically created default options based on available post types and taxonomies. + * + * @return void + */ + public function enrich_defaults() { + $enriched_defaults = $this->enriched_defaults; + if ( $enriched_defaults !== null ) { + $this->defaults += $enriched_defaults; + return; + } + + $enriched_defaults = []; + + /* + * Retrieve all the relevant post type and taxonomy arrays. + * + * WPSEO_Post_Type::get_accessible_post_types() should *not* be used here. + * These are the defaults and can be prepared for any public post type. + */ + $post_type_objects = get_post_types( [ 'public' => true ], 'objects' ); + + if ( $post_type_objects ) { + /* translators: %s expands to the name of a post type (plural). */ + $archive = sprintf( __( '%s Archive', 'wordpress-seo' ), '%%pt_plural%%' ); + + foreach ( $post_type_objects as $pt ) { + $enriched_defaults[ 'title-' . $pt->name ] = '%%title%% %%page%% %%sep%% %%sitename%%'; // Text field. + $enriched_defaults[ 'metadesc-' . $pt->name ] = ''; // Text area. + $enriched_defaults[ 'noindex-' . $pt->name ] = false; + $enriched_defaults[ 'display-metabox-pt-' . $pt->name ] = true; + $enriched_defaults[ 'post_types-' . $pt->name . '-maintax' ] = 0; // Select box. + $enriched_defaults[ 'schema-page-type-' . $pt->name ] = 'WebPage'; + $enriched_defaults[ 'schema-article-type-' . $pt->name ] = ( $pt->name === 'post' ) ? 'Article' : 'None'; + + if ( $pt->name !== 'attachment' ) { + $enriched_defaults[ 'social-title-' . $pt->name ] = '%%title%%'; // Text field. + $enriched_defaults[ 'social-description-' . $pt->name ] = ''; // Text area. + $enriched_defaults[ 'social-image-url-' . $pt->name ] = ''; // Hidden input field. + $enriched_defaults[ 'social-image-id-' . $pt->name ] = 0; // Hidden input field. + } + + // Custom post types that have archives. + if ( ! $pt->_builtin && WPSEO_Post_Type::has_archive( $pt ) ) { + $enriched_defaults[ 'title-ptarchive-' . $pt->name ] = $archive . ' %%page%% %%sep%% %%sitename%%'; // Text field. + $enriched_defaults[ 'metadesc-ptarchive-' . $pt->name ] = ''; // Text area. + $enriched_defaults[ 'bctitle-ptarchive-' . $pt->name ] = ''; // Text field. + $enriched_defaults[ 'noindex-ptarchive-' . $pt->name ] = false; + $enriched_defaults[ 'social-title-ptarchive-' . $pt->name ] = $archive; // Text field. + $enriched_defaults[ 'social-description-ptarchive-' . $pt->name ] = ''; // Text area. + $enriched_defaults[ 'social-image-url-ptarchive-' . $pt->name ] = ''; // Hidden input field. + $enriched_defaults[ 'social-image-id-ptarchive-' . $pt->name ] = 0; // Hidden input field. + } + } + } + + $taxonomy_objects = get_taxonomies( [ 'public' => true ], 'object' ); + + if ( $taxonomy_objects ) { + /* translators: %s expands to the variable used for term title. */ + $archives = sprintf( __( '%s Archives', 'wordpress-seo' ), '%%term_title%%' ); + + foreach ( $taxonomy_objects as $tax ) { + $enriched_defaults[ 'title-tax-' . $tax->name ] = $archives . ' %%page%% %%sep%% %%sitename%%'; // Text field. + $enriched_defaults[ 'metadesc-tax-' . $tax->name ] = ''; // Text area. + $enriched_defaults[ 'display-metabox-tax-' . $tax->name ] = true; + + $enriched_defaults[ 'noindex-tax-' . $tax->name ] = ( $tax->name === 'post_format' ); + + $enriched_defaults[ 'social-title-tax-' . $tax->name ] = $archives; // Text field. + $enriched_defaults[ 'social-description-tax-' . $tax->name ] = ''; // Text area. + $enriched_defaults[ 'social-image-url-tax-' . $tax->name ] = ''; // Hidden input field. + $enriched_defaults[ 'social-image-id-tax-' . $tax->name ] = 0; // Hidden input field. + + $enriched_defaults[ 'taxonomy-' . $tax->name . '-ptparent' ] = 0; // Select box;. + } + } + + $this->enriched_defaults = $enriched_defaults; + $this->defaults += $enriched_defaults; + } + + /** + * Invalidates enrich_defaults() cache. + * + * Called from actions: + * - (un)registered_post_type + * - (un)registered_taxonomy + * + * @return void + */ + public function invalidate_enrich_defaults_cache() { + $this->enriched_defaults = null; + } + + /** + * Validate the option. + * + * @param string[] $dirty New value for the option. + * @param string[] $clean Clean value for the option, normally the defaults. + * @param string[] $old Old value of the option. + * + * @return string[] Validated clean value for the option to be saved to the database. + */ + protected function validate_option( $dirty, $clean, $old ) { + $allowed_post_types = $this->get_allowed_post_types(); + + foreach ( $clean as $key => $value ) { + $switch_key = $this->get_switch_key( $key ); + + switch ( $switch_key ) { + // Only ever set programmatically, so no reason for intense validation. + case 'company_logo_meta': + case 'person_logo_meta': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + + /* Breadcrumbs text fields. */ + case 'breadcrumbs-404crumb': + case 'breadcrumbs-archiveprefix': + case 'breadcrumbs-home': + case 'breadcrumbs-prefix': + case 'breadcrumbs-searchprefix': + case 'breadcrumbs-sep': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = wp_kses_post( $dirty[ $key ] ); + } + break; + + /* + * Text fields. + */ + + /* + * Covers: + * 'title-home-wpseo', 'title-author-wpseo', 'title-archive-wpseo', // phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- This isn't commented out code. + * 'title-search-wpseo', 'title-404-wpseo' + * 'title-' . $pt->name + * 'title-ptarchive-' . $pt->name + * 'title-tax-' . $tax->name + * 'social-title-' . $pt->name + * 'social-title-ptarchive-' . $pt->name + * 'social-title-tax-' . $tax->name + * 'social-title-author-wpseo', 'social-title-archive-wpseo' + * 'open_graph_frontpage_title' + */ + case 'org-': + case 'website_name': + case 'alternate_website_name': + case 'title-': + case 'social-title-': + case 'open_graph_frontpage_title': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $dirty[ $key ] ); + } + break; + + case 'company_or_person': + if ( isset( $dirty[ $key ] ) ) { + if ( in_array( $dirty[ $key ], [ 'company', 'person' ], true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + else { + $defaults = $this->get_defaults(); + $clean[ $key ] = $defaults['company_or_person']; + } + } + break; + + /* + * Covers: + * 'company_logo', 'person_logo' // phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- This isn't commented out code. + */ + case 'company_logo': + case 'person_logo': + case 'open_graph_frontpage_image': + // When a logo changes, we need to ditch the caches we have for it. + unset( $clean[ $switch_key . '_id' ] ); + unset( $clean[ $switch_key . '_meta' ] ); + $this->validate_url( $key, $dirty, $old, $clean ); + break; + + /* + * Covers: + * 'social-image-url-' . $pt->name + * 'social-image-url-ptarchive-' . $pt->name + * 'social-image-url-tax-' . $tax->name + * 'social-image-url-author-wpseo', 'social-image-url-archive-wpseo' + */ + case 'social-image-url-': + $this->validate_url( $key, $dirty, $old, $clean ); + break; + + /* + * Covers: + * 'metadesc-home-wpseo', 'metadesc-author-wpseo', 'metadesc-archive-wpseo' + * 'metadesc-' . $pt->name + * 'metadesc-ptarchive-' . $pt->name + * 'metadesc-tax-' . $tax->name + * and also: + * 'bctitle-ptarchive-' . $pt->name + * 'social-description-' . $pt->name + * 'social-description-ptarchive-' . $pt->name + * 'social-description-tax-' . $tax->name + * 'social-description-author-wpseo', 'social-description-archive-wpseo' + * 'open_graph_frontpage_desc' + */ + case 'metadesc-': + case 'bctitle-ptarchive-': + case 'company_name': + case 'company_alternate_name': + case 'person_name': + case 'social-description-': + case 'open_graph_frontpage_desc': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $dirty[ $key ] ); + } + break; + + /* + * Covers: 'rssbefore', 'rssafter' // phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- This isn't commented out code. + */ + case 'rssbefore': + case 'rssafter': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = wp_kses_post( $dirty[ $key ] ); + } + break; + + /* 'post_types-' . $pt->name . '-maintax' fields. */ + case 'post_types-': + $post_type = str_replace( [ 'post_types-', '-maintax' ], '', $key ); + $taxonomies = get_object_taxonomies( $post_type, 'names' ); + + if ( isset( $dirty[ $key ] ) ) { + if ( $taxonomies !== [] && in_array( $dirty[ $key ], $taxonomies, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + elseif ( (string) $dirty[ $key ] === '0' || (string) $dirty[ $key ] === '' ) { + $clean[ $key ] = 0; + } + elseif ( sanitize_title_with_dashes( $dirty[ $key ] ) === $dirty[ $key ] ) { + // Allow taxonomies which may not be registered yet. + $clean[ $key ] = $dirty[ $key ]; + } + else { + if ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_title_with_dashes( $old[ $key ] ); + } + + /* + * @todo [JRF => whomever] Maybe change the untranslated $pt name in the + * error message to the nicely translated label ? + */ + add_settings_error( + $this->group_name, // Slug title of the setting. + $key, // Suffix-id for the error message box. + /* translators: %s expands to a post type. */ + sprintf( __( 'Please select a valid taxonomy for post type "%s"', 'wordpress-seo' ), $post_type ), // The error message. + 'error' // Message type. + ); + } + } + elseif ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_title_with_dashes( $old[ $key ] ); + } + unset( $taxonomies, $post_type ); + break; + + /* 'taxonomy-' . $tax->name . '-ptparent' fields. */ + case 'taxonomy-': + if ( isset( $dirty[ $key ] ) ) { + if ( $allowed_post_types !== [] && in_array( $dirty[ $key ], $allowed_post_types, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + elseif ( (string) $dirty[ $key ] === '0' || (string) $dirty[ $key ] === '' ) { + $clean[ $key ] = 0; + } + elseif ( sanitize_key( $dirty[ $key ] ) === $dirty[ $key ] ) { + // Allow taxonomies which may not be registered yet. + $clean[ $key ] = $dirty[ $key ]; + } + else { + if ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_key( $old[ $key ] ); + } + + /* + * @todo [JRF =? whomever] Maybe change the untranslated $tax name in the + * error message to the nicely translated label ? + */ + $tax = str_replace( [ 'taxonomy-', '-ptparent' ], '', $key ); + add_settings_error( + $this->group_name, // Slug title of the setting. + '_' . $tax, // Suffix-ID for the error message box. + /* translators: %s expands to a taxonomy slug. */ + sprintf( __( 'Please select a valid post type for taxonomy "%s"', 'wordpress-seo' ), $tax ), // The error message. + 'error' // Message type. + ); + unset( $tax ); + } + } + elseif ( isset( $old[ $key ] ) ) { + $clean[ $key ] = sanitize_key( $old[ $key ] ); + } + break; + + /* + * Covers: + * 'company_or_person_user_id' + * 'company_logo_id', 'person_logo_id', 'open_graph_frontpage_image_id' + * 'social-image-id-' . $pt->name + * 'social-image-id-ptarchive-' . $pt->name + * 'social-image-id-tax-' . $tax->name + * 'social-image-id-author-wpseo', 'social-image-id-archive-wpseo' + */ + case 'company_or_person_user_id': + case 'company_logo_id': + case 'person_logo_id': + case 'social-image-id-': + case 'open_graph_frontpage_image_id': + case 'publishing_principles_id': + case 'ownership_funding_info_id': + case 'actionable_feedback_policy_id': + case 'corrections_policy_id': + case 'ethics_policy_id': + case 'diversity_policy_id': + case 'diversity_staffing_report_id': + if ( isset( $dirty[ $key ] ) ) { + $int = WPSEO_Utils::validate_int( $dirty[ $key ] ); + if ( $int !== false && $int >= 0 ) { + $clean[ $key ] = $int; + } + } + elseif ( isset( $old[ $key ] ) ) { + $int = WPSEO_Utils::validate_int( $old[ $key ] ); + if ( $int !== false && $int >= 0 ) { + $clean[ $key ] = $int; + } + } + break; + /* Separator field - Radio. */ + case 'separator': + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + + // Get separator fields. + $separator_fields = $this->get_separator_options(); + + // Check if the given separator exists. + if ( isset( $separator_fields[ $dirty[ $key ] ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + } + break; + + case 'schema-page-type-': + if ( isset( $dirty[ $key ] ) && is_string( $dirty[ $key ] ) ) { + if ( array_key_exists( $dirty[ $key ], Schema_Types::PAGE_TYPES ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + else { + $defaults = $this->get_defaults(); + $post_type = str_replace( $switch_key, '', $key ); + $clean[ $key ] = $defaults[ $switch_key . $post_type ]; + } + } + break; + case 'schema-article-type-': + if ( isset( $dirty[ $key ] ) && is_string( $dirty[ $key ] ) ) { + /** + * Filter: 'wpseo_schema_article_types' - Allow developers to filter the available article types. + * + * Make sure when you filter this to also filter `wpseo_schema_article_types_labels`. + * + * @param array $schema_article_types The available schema article types. + */ + if ( array_key_exists( $dirty[ $key ], apply_filters( 'wpseo_schema_article_types', Schema_Types::ARTICLE_TYPES ) ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + else { + $defaults = $this->get_defaults(); + $post_type = str_replace( $switch_key, '', $key ); + $clean[ $key ] = $defaults[ $switch_key . $post_type ]; + } + } + break; + + /* + * Boolean fields. + */ + + /* + * Covers: + * 'noindex-author-wpseo', 'noindex-author-noposts-wpseo', 'noindex-archive-wpseo' + * 'noindex-' . $pt->name + * 'noindex-ptarchive-' . $pt->name + * 'noindex-tax-' . $tax->name + * 'forcerewritetitle': + * 'noodp': + * 'noydir': + * 'disable-author': + * 'disable-date': + * 'disable-post_format'; + * 'noindex-' + * 'display-metabox-pt-' + * 'display-metabox-pt-'. $pt->name + * 'display-metabox-tax-' + * 'display-metabox-tax-' . $tax->name + * 'breadcrumbs-display-blog-page' + * 'breadcrumbs-boldlast' + * 'breadcrumbs-enable' + * 'stripcategorybase' + */ + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + /** + * Retrieve a list of the allowed post types as breadcrumb parent for a taxonomy. + * Helper method for validation. + * + * {@internal Don't make static as new types may still be registered.}} + * + * @return string[] + */ + protected function get_allowed_post_types() { + $allowed_post_types = []; + + /* + * WPSEO_Post_Type::get_accessible_post_types() should *not* be used here. + */ + $post_types = get_post_types( [ 'public' => true ], 'objects' ); + + if ( get_option( 'show_on_front' ) === 'page' && get_option( 'page_for_posts' ) > 0 ) { + $allowed_post_types[] = 'post'; + } + + if ( is_array( $post_types ) && $post_types !== [] ) { + foreach ( $post_types as $type ) { + if ( WPSEO_Post_Type::has_archive( $type ) ) { + $allowed_post_types[] = $type->name; + } + } + } + + return $allowed_post_types; + } + + /** + * Clean a given option value. + * + * @param string[] $option_value Old (not merged with defaults or filtered) option value to clean according to the rules for this option. + * @param string[]|null $current_version Optional. Version from which to upgrade, if not set, version specific upgrades will be disregarded. + * @param string[]|null $all_old_option_values Optional. Only used when importing old options to have access to the real old values, in contrast to the saved ones. + * + * @return string[] Cleaned option. + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + static $original = null; + + // Double-run this function to ensure renaming of the taxonomy options will work. + if ( ! isset( $original ) + && has_action( 'wpseo_double_clean_titles', [ $this, 'clean' ] ) === false + ) { + add_action( 'wpseo_double_clean_titles', [ $this, 'clean' ] ); + $original = $option_value; + } + + /* + * Move options from very old option to this one. + * + * {@internal Don't rename to the 'current' names straight away as that would prevent + * the rename/unset combi below from working.}} + * + * @todo [JRF] Maybe figure out a smarter way to deal with this. + */ + $old_option = null; + if ( isset( $all_old_option_values ) ) { + // Ok, we have an import. + if ( isset( $all_old_option_values['wpseo_indexation'] ) && is_array( $all_old_option_values['wpseo_indexation'] ) && $all_old_option_values['wpseo_indexation'] !== [] ) { + $old_option = $all_old_option_values['wpseo_indexation']; + } + } + else { + $old_option = get_option( 'wpseo_indexation' ); + } + if ( is_array( $old_option ) && $old_option !== [] ) { + $move = [ + 'noindexauthor' => 'noindex-author', + 'disableauthor' => 'disable-author', + 'noindexdate' => 'noindex-archive', + 'noindexcat' => 'noindex-category', + 'noindextag' => 'noindex-post_tag', + 'noindexpostformat' => 'noindex-post_format', + ]; + foreach ( $move as $old => $new ) { + if ( isset( $old_option[ $old ] ) && ! isset( $option_value[ $new ] ) ) { + $option_value[ $new ] = $old_option[ $old ]; + } + } + unset( $move, $old, $new ); + } + unset( $old_option ); + + // Fix wrongness created by buggy version 1.2.2. + if ( isset( $option_value['title-home'] ) && $option_value['title-home'] === '%%sitename%% - %%sitedesc%% - 12345' ) { + $option_value['title-home-wpseo'] = '%%sitename%% - %%sitedesc%%'; + } + + /* + * Renaming these options to avoid ever overwritting these if a (bloody stupid) user / + * programmer would use any of the following as a custom post type or custom taxonomy: + * 'home', 'author', 'archive', 'search', '404', 'subpages'. + * + * Similarly, renaming the tax options to avoid a custom post type and a taxonomy + * with the same name occupying the same option. + */ + $rename = [ + 'title-home' => 'title-home-wpseo', + 'title-author' => 'title-author-wpseo', + 'title-archive' => 'title-archive-wpseo', + 'title-search' => 'title-search-wpseo', + 'title-404' => 'title-404-wpseo', + 'metadesc-home' => 'metadesc-home-wpseo', + 'metadesc-author' => 'metadesc-author-wpseo', + 'metadesc-archive' => 'metadesc-archive-wpseo', + 'noindex-author' => 'noindex-author-wpseo', + 'noindex-archive' => 'noindex-archive-wpseo', + ]; + foreach ( $rename as $old => $new ) { + if ( isset( $option_value[ $old ] ) && ! isset( $option_value[ $new ] ) ) { + $option_value[ $new ] = $option_value[ $old ]; + unset( $option_value[ $old ] ); + } + } + unset( $rename, $old, $new ); + + /* + * {@internal This clean-up action can only be done effectively once the taxonomies + * and post_types have been registered, i.e. at the end of the init action.}} + */ + if ( ( isset( $original ) && current_filter() === 'wpseo_double_clean_titles' ) || did_action( 'wpseo_double_clean_titles' ) > 0 ) { + $rename = [ + 'title-' => 'title-tax-', + 'metadesc-' => 'metadesc-tax-', + 'noindex-' => 'noindex-tax-', + 'tax-hideeditbox-' => 'hideeditbox-tax-', + + ]; + + $taxonomy_names = get_taxonomies( [ 'public' => true ], 'names' ); + $post_type_names = get_post_types( [ 'public' => true ], 'names' ); + $defaults = $this->get_defaults(); + if ( $taxonomy_names !== [] ) { + foreach ( $taxonomy_names as $tax ) { + foreach ( $rename as $old_prefix => $new_prefix ) { + if ( + ( isset( $original[ $old_prefix . $tax ] ) && ! isset( $original[ $new_prefix . $tax ] ) ) + && ( ! isset( $option_value[ $new_prefix . $tax ] ) + || ( isset( $option_value[ $new_prefix . $tax ] ) + && $option_value[ $new_prefix . $tax ] === $defaults[ $new_prefix . $tax ] ) ) + ) { + $option_value[ $new_prefix . $tax ] = $original[ $old_prefix . $tax ]; + + /* + * Check if there is a cpt with the same name as the tax, + * if so, we should make sure that the old setting hasn't been removed. + */ + if ( ! isset( $post_type_names[ $tax ] ) && isset( $option_value[ $old_prefix . $tax ] ) ) { + unset( $option_value[ $old_prefix . $tax ] ); + } + elseif ( isset( $post_type_names[ $tax ] ) && ! isset( $option_value[ $old_prefix . $tax ] ) ) { + $option_value[ $old_prefix . $tax ] = $original[ $old_prefix . $tax ]; + } + + if ( $old_prefix === 'tax-hideeditbox-' ) { + unset( $option_value[ $old_prefix . $tax ] ); + } + } + } + } + } + unset( $rename, $taxonomy_names, $post_type_names, $defaults, $tax, $old_prefix, $new_prefix ); + } + + return $option_value; + } + + /** + * Make sure that any set option values relating to post_types and/or taxonomies are retained, + * even when that post_type or taxonomy may not yet have been registered. + * + * {@internal Overrule the abstract class version of this to make sure one extra renamed + * variable key does not get removed. IMPORTANT: keep this method in line with + * the parent on which it is based!}} + * + * @param string[] $dirty Original option as retrieved from the database. + * @param string[] $clean Filtered option where any options which shouldn't be in our option + * have already been removed and any options which weren't set + * have been set to their defaults. + * + * @return string[] + */ + protected function retain_variable_keys( $dirty, $clean ) { + if ( ( is_array( $this->variable_array_key_patterns ) && $this->variable_array_key_patterns !== [] ) && ( is_array( $dirty ) && $dirty !== [] ) ) { + + // Add the extra pattern. + $patterns = $this->variable_array_key_patterns; + $patterns[] = 'tax-hideeditbox-'; + + /** + * Allow altering the array with variable array key patterns. + * + * @param array $patterns Array with the variable array key patterns. + */ + $patterns = apply_filters( 'wpseo_option_titles_variable_array_key_patterns', $patterns ); + + foreach ( $dirty as $key => $value ) { + + // Do nothing if already in filtered option array. + if ( isset( $clean[ $key ] ) ) { + continue; + } + + foreach ( $patterns as $pattern ) { + if ( strpos( $key, $pattern ) === 0 ) { + $clean[ $key ] = $value; + break; + } + } + } + } + + return $clean; + } + + /** + * Retrieves a list of separator options. + * + * @return string[] An array of the separator options. + */ + protected static function get_separator_option_list() { + $separators = [ + 'sc-dash' => [ + 'option' => '-', + 'label' => __( 'Dash', 'wordpress-seo' ), + ], + 'sc-ndash' => [ + 'option' => '–', + 'label' => __( 'En dash', 'wordpress-seo' ), + ], + 'sc-mdash' => [ + 'option' => '—', + 'label' => __( 'Em dash', 'wordpress-seo' ), + ], + 'sc-colon' => [ + 'option' => ':', + 'label' => __( 'Colon', 'wordpress-seo' ), + ], + 'sc-middot' => [ + 'option' => '·', + 'label' => __( 'Middle dot', 'wordpress-seo' ), + ], + 'sc-bull' => [ + 'option' => '•', + 'label' => __( 'Bullet', 'wordpress-seo' ), + ], + 'sc-star' => [ + 'option' => '*', + 'label' => __( 'Asterisk', 'wordpress-seo' ), + ], + 'sc-smstar' => [ + 'option' => '⋆', + 'label' => __( 'Low asterisk', 'wordpress-seo' ), + ], + 'sc-pipe' => [ + 'option' => '|', + 'label' => __( 'Vertical bar', 'wordpress-seo' ), + ], + 'sc-tilde' => [ + 'option' => '~', + 'label' => __( 'Small tilde', 'wordpress-seo' ), + ], + 'sc-laquo' => [ + 'option' => '«', + 'label' => __( 'Left angle quotation mark', 'wordpress-seo' ), + ], + 'sc-raquo' => [ + 'option' => '»', + 'label' => __( 'Right angle quotation mark', 'wordpress-seo' ), + ], + 'sc-lt' => [ + 'option' => '>', + 'label' => __( 'Less than sign', 'wordpress-seo' ), + ], + 'sc-gt' => [ + 'option' => '<', + 'label' => __( 'Greater than sign', 'wordpress-seo' ), + ], + ]; + + /** + * Allows altering the separator options array. + * + * @param array $separators Array with the separator options. + */ + $separator_list = apply_filters( 'wpseo_separator_option_list', $separators ); + + if ( ! is_array( $separator_list ) ) { + return $separators; + } + + return $separator_list; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php new file mode 100644 index 00000000..1f76b73e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option-wpseo.php @@ -0,0 +1,648 @@ +get_defaults();}} + * + * @var array + */ + protected $defaults = [ + // Non-form fields, set via (ajax) function. + 'tracking' => null, + 'toggled_tracking' => false, + 'license_server_version' => false, + 'ms_defaults_set' => false, + 'ignore_search_engines_discouraged_notice' => false, + 'indexing_first_time' => true, + 'indexing_started' => null, + 'indexing_reason' => '', + 'indexables_indexing_completed' => false, + 'index_now_key' => '', + // Non-form field, should only be set via validation routine. + 'version' => '', // Leave default as empty to ensure activation/upgrade works. + 'previous_version' => '', + // Form fields. + 'disableadvanced_meta' => true, + 'enable_headless_rest_endpoints' => true, + 'ryte_indexability' => false, + 'baiduverify' => '', // Text field. + 'googleverify' => '', // Text field. + 'msverify' => '', // Text field. + 'yandexverify' => '', + 'site_type' => '', // List of options. + 'has_multiple_authors' => '', + 'environment_type' => '', + 'content_analysis_active' => true, + 'keyword_analysis_active' => true, + 'inclusive_language_analysis_active' => false, + 'enable_admin_bar_menu' => true, + 'enable_cornerstone_content' => true, + 'enable_xml_sitemap' => true, + 'enable_text_link_counter' => true, + 'enable_index_now' => true, + 'enable_ai_generator' => true, + 'ai_enabled_pre_default' => false, + 'show_onboarding_notice' => false, + 'first_activated_on' => false, + 'myyoast-oauth' => [ + 'config' => [ + 'clientId' => null, + 'secret' => null, + ], + 'access_tokens' => [], + ], + 'semrush_integration_active' => true, + 'semrush_tokens' => [], + 'semrush_country_code' => 'us', + 'permalink_structure' => '', + 'home_url' => '', + 'dynamic_permalinks' => false, + 'category_base_url' => '', + 'tag_base_url' => '', + 'custom_taxonomy_slugs' => [], + 'enable_enhanced_slack_sharing' => true, + 'enable_metabox_insights' => true, + 'enable_link_suggestions' => true, + 'algolia_integration_active' => false, + 'import_cursors' => [], + 'workouts_data' => [ 'configuration' => [ 'finishedSteps' => [] ] ], + 'configuration_finished_steps' => [], + 'dismiss_configuration_workout_notice' => false, + 'dismiss_premium_deactivated_notice' => false, + 'importing_completed' => [], + 'wincher_integration_active' => true, + 'wincher_tokens' => [], + 'wincher_automatically_add_keyphrases' => false, + 'wincher_website_id' => '', + 'first_time_install' => false, + 'should_redirect_after_install_free' => false, + 'activation_redirect_timestamp_free' => 0, + 'remove_feed_global' => false, + 'remove_feed_global_comments' => false, + 'remove_feed_post_comments' => false, + 'remove_feed_authors' => false, + 'remove_feed_categories' => false, + 'remove_feed_tags' => false, + 'remove_feed_custom_taxonomies' => false, + 'remove_feed_post_types' => false, + 'remove_feed_search' => false, + 'remove_atom_rdf_feeds' => false, + 'remove_shortlinks' => false, + 'remove_rest_api_links' => false, + 'remove_rsd_wlw_links' => false, + 'remove_oembed_links' => false, + 'remove_generator' => false, + 'remove_emoji_scripts' => false, + 'remove_powered_by_header' => false, + 'remove_pingback_header' => false, + 'clean_campaign_tracking_urls' => false, + 'clean_permalinks' => false, + 'clean_permalinks_extra_variables' => '', + 'search_cleanup' => false, + 'search_cleanup_emoji' => false, + 'search_cleanup_patterns' => false, + 'search_character_limit' => 50, + 'deny_search_crawling' => false, + 'deny_wp_json_crawling' => false, + 'deny_adsbot_crawling' => false, + 'deny_ccbot_crawling' => false, + 'deny_google_extended_crawling' => false, + 'deny_gptbot_crawling' => false, + 'redirect_search_pretty_urls' => false, + 'least_readability_ignore_list' => [], + 'least_seo_score_ignore_list' => [], + 'most_linked_ignore_list' => [], + 'least_linked_ignore_list' => [], + 'indexables_page_reading_list' => [ false, false, false, false, false ], + 'indexables_overview_state' => 'dashboard-not-visited', + 'last_known_public_post_types' => [], + 'last_known_public_taxonomies' => [], + 'last_known_no_unindexed' => [], + 'new_post_types' => [], + 'new_taxonomies' => [], + 'show_new_content_type_notification' => false, + ]; + + /** + * Sub-options which should not be overloaded with multi-site defaults. + * + * @var array + */ + public $ms_exclude = [ + 'ignore_search_engines_discouraged_notice', + /* Privacy. */ + 'baiduverify', + 'googleverify', + 'msverify', + 'yandexverify', + ]; + + /** + * Possible values for the site_type option. + * + * @var array + */ + protected $site_types = [ + '', + 'blog', + 'shop', + 'news', + 'smallBusiness', + 'corporateOther', + 'personalOther', + ]; + + /** + * Possible environment types. + * + * @var array + */ + protected $environment_types = [ + '', + 'local', + 'production', + 'staging', + 'development', + ]; + + /** + * Possible has_multiple_authors options. + * + * @var array + */ + protected $has_multiple_authors_options = [ + '', + true, + false, + ]; + + /** + * Name for an option higher in the hierarchy to override setting access. + * + * @var string + */ + protected $override_option_name = 'wpseo_ms'; + + /** + * Add the actions and filters for the option. + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away. + */ + protected function __construct() { + parent::__construct(); + + /** + * Filter: 'wpseo_enable_tracking' - Enables the data tracking of Yoast SEO Premium. + * + * @param string $is_enabled The enabled state. Default is false. + */ + $this->defaults['tracking'] = apply_filters( 'wpseo_enable_tracking', false ); + + /* Clear the cache on update/add. */ + add_action( 'add_option_' . $this->option_name, [ 'WPSEO_Utils', 'clear_cache' ] ); + add_action( 'update_option_' . $this->option_name, [ 'WPSEO_Utils', 'clear_cache' ] ); + + add_filter( 'admin_title', [ 'Yoast_Input_Validation', 'add_yoast_admin_document_title_errors' ] ); + + /** + * Filter the `wpseo` option defaults. + * + * @param array $defaults Array the defaults for the `wpseo` option attributes. + */ + $this->defaults = apply_filters( 'wpseo_option_wpseo_defaults', $this->defaults ); + } + + /** + * Get the singleton instance of this class. + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Add filters to make sure that the option is merged with its defaults before being returned. + * + * @return void + */ + public function add_option_filters() { + parent::add_option_filters(); + + list( $hookname, $callback, $priority ) = $this->get_verify_features_option_filter_hook(); + + if ( has_filter( $hookname, $callback ) === false ) { + add_filter( $hookname, $callback, $priority ); + } + } + + /** + * Remove the option filters. + * Called from the clean_up methods to make sure we retrieve the original old option. + * + * @return void + */ + public function remove_option_filters() { + parent::remove_option_filters(); + + list( $hookname, $callback, $priority ) = $this->get_verify_features_option_filter_hook(); + + remove_filter( $hookname, $callback, $priority ); + } + + /** + * Add filters to make sure that the option default is returned if the option is not set. + * + * @return void + */ + public function add_default_filters() { + parent::add_default_filters(); + + list( $hookname, $callback, $priority ) = $this->get_verify_features_default_option_filter_hook(); + + if ( has_filter( $hookname, $callback ) === false ) { + add_filter( $hookname, $callback, $priority ); + } + } + + /** + * Remove the default filters. + * Called from the validate() method to prevent failure to add new options. + * + * @return void + */ + public function remove_default_filters() { + parent::remove_default_filters(); + + list( $hookname, $callback, $priority ) = $this->get_verify_features_default_option_filter_hook(); + + remove_filter( $hookname, $callback, $priority ); + } + + /** + * Validate the option. + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database. + */ + protected function validate_option( $dirty, $clean, $old ) { + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + case 'version': + $clean[ $key ] = WPSEO_VERSION; + break; + case 'previous_version': + case 'semrush_country_code': + case 'license_server_version': + case 'home_url': + case 'index_now_key': + case 'wincher_website_id': + case 'clean_permalinks_extra_variables': + case 'indexables_overview_state': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + case 'indexing_reason': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = sanitize_text_field( $dirty[ $key ] ); + } + break; + + /* Verification strings. */ + case 'baiduverify': + case 'googleverify': + case 'msverify': + case 'yandexverify': + $this->validate_verification_string( $key, $dirty, $old, $clean ); + break; + + /* + * Boolean dismiss warnings - not fields - may not be in form + * (and don't need to be either as long as the default is false). + */ + case 'ignore_search_engines_discouraged_notice': + case 'ms_defaults_set': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::validate_bool( $dirty[ $key ] ); + } + elseif ( isset( $old[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::validate_bool( $old[ $key ] ); + } + break; + + case 'site_type': + $clean[ $key ] = $old[ $key ]; + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], $this->site_types, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + + case 'environment_type': + $clean[ $key ] = $old[ $key ]; + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], $this->environment_types, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + + case 'has_multiple_authors': + $clean[ $key ] = $old[ $key ]; + if ( isset( $dirty[ $key ] ) && in_array( $dirty[ $key ], $this->has_multiple_authors_options, true ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + + break; + + case 'first_activated_on': + case 'indexing_started': + case 'activation_redirect_timestamp_free': + $clean[ $key ] = false; + if ( isset( $dirty[ $key ] ) ) { + if ( $dirty[ $key ] === false || WPSEO_Utils::validate_int( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + } + break; + + case 'tracking': + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : null ); + break; + + case 'myyoast_oauth': + case 'semrush_tokens': + case 'custom_taxonomy_slugs': + case 'wincher_tokens': + case 'workouts_data': + case 'configuration_finished_steps': + case 'least_readability_ignore_list': + case 'least_seo_score_ignore_list': + case 'most_linked_ignore_list': + case 'least_linked_ignore_list': + case 'indexables_page_reading_list': + case 'last_known_public_post_types': + case 'last_known_public_taxonomies': + case 'new_post_types': + case 'new_taxonomies': + $clean[ $key ] = $old[ $key ]; + + if ( isset( $dirty[ $key ] ) ) { + $items = $dirty[ $key ]; + if ( ! is_array( $items ) ) { + $items = json_decode( $dirty[ $key ], true ); + } + + if ( is_array( $items ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + } + + break; + + case 'permalink_structure': + case 'category_base_url': + case 'tag_base_url': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = sanitize_option( $key, $dirty[ $key ] ); + } + break; + + case 'search_character_limit': + if ( isset( $dirty[ $key ] ) ) { + $clean[ $key ] = (int) $dirty[ $key ]; + } + break; + + case 'import_cursors': + case 'importing_completed': + if ( isset( $dirty[ $key ] ) && is_array( $dirty[ $key ] ) ) { + $clean[ $key ] = $dirty[ $key ]; + } + break; + + case 'last_known_no_unindexed': + $clean[ $key ] = $old[ $key ]; + + if ( isset( $dirty[ $key ] ) ) { + $items = $dirty[ $key ]; + + if ( is_array( $items ) ) { + foreach ( $items as $item_key => $item ) { + if ( ! is_string( $item_key ) || ! is_numeric( $item ) ) { + unset( $items[ $item_key ] ); + } + } + $clean[ $key ] = $items; + } + } + + break; + + /* + * Boolean (checkbox) fields. + * + * Covers: + * 'disableadvanced_meta' + * 'enable_headless_rest_endpoints' + * 'yoast_tracking' + * 'dynamic_permalinks' + * 'indexing_first_time' + * 'first_time_install' + * 'remove_feed_global' + * 'remove_feed_global_comments' + * 'remove_feed_post_comments' + * 'remove_feed_authors' + * 'remove_feed_categories' + * 'remove_feed_tags' + * 'remove_feed_custom_taxonomies' + * 'remove_feed_post_types' + * 'remove_feed_search' + * 'remove_atom_rdf_feeds' + * 'remove_shortlinks' + * 'remove_rest_api_links' + * 'remove_rsd_wlw_links' + * 'remove_oembed_links' + * 'remove_generator' + * 'remove_emoji_scripts' + * 'remove_powered_by_header' + * 'remove_pingback_header' + * 'clean_campaign_tracking_urls' + * 'clean_permalinks' + * 'clean_permalinks_extra_variables' + * 'search_cleanup' + * 'search_cleanup_emoji' + * 'search_cleanup_patterns' + * 'deny_wp_json_crawling' + * 'deny_adsbot_crawling' + * 'deny_ccbot_crawling' + * 'deny_google_extended_crawling' + * 'deny_gptbot_crawling' + * 'redirect_search_pretty_urls' + * 'should_redirect_after_install_free' + * 'show_new_content_type_notification' + * and most of the feature variables. + */ + default: + $clean[ $key ] = ( isset( $dirty[ $key ] ) ? WPSEO_Utils::validate_bool( $dirty[ $key ] ) : false ); + break; + } + } + + return $clean; + } + + /** + * Verifies that the feature variables are turned off if the network is configured so. + * + * @param mixed $options Value of the option to be returned. Typically an array. + * + * @return mixed Filtered $options value. + */ + public function verify_features_against_network( $options = [] ) { + if ( ! is_array( $options ) || empty( $options ) ) { + return $options; + } + + // For the feature variables, set their values to off in case they are disabled. + $feature_vars = [ + 'disableadvanced_meta' => false, + 'ryte_indexability' => false, + 'content_analysis_active' => false, + 'keyword_analysis_active' => false, + 'inclusive_language_analysis_active' => false, + 'enable_admin_bar_menu' => false, + 'enable_cornerstone_content' => false, + 'enable_xml_sitemap' => false, + 'enable_text_link_counter' => false, + 'enable_metabox_insights' => false, + 'enable_link_suggestions' => false, + 'enable_headless_rest_endpoints' => false, + 'tracking' => false, + 'enable_enhanced_slack_sharing' => false, + 'semrush_integration_active' => false, + 'wincher_integration_active' => false, + 'remove_feed_global' => false, + 'remove_feed_global_comments' => false, + 'remove_feed_post_comments' => false, + 'enable_index_now' => false, + 'enable_ai_generator' => false, + 'remove_feed_authors' => false, + 'remove_feed_categories' => false, + 'remove_feed_tags' => false, + 'remove_feed_custom_taxonomies' => false, + 'remove_feed_post_types' => false, + 'remove_feed_search' => false, + 'remove_atom_rdf_feeds' => false, + 'remove_shortlinks' => false, + 'remove_rest_api_links' => false, + 'remove_rsd_wlw_links' => false, + 'remove_oembed_links' => false, + 'remove_generator' => false, + 'remove_emoji_scripts' => false, + 'remove_powered_by_header' => false, + 'remove_pingback_header' => false, + 'clean_campaign_tracking_urls' => false, + 'clean_permalinks' => false, + 'search_cleanup' => false, + 'search_cleanup_emoji' => false, + 'search_cleanup_patterns' => false, + 'redirect_search_pretty_urls' => false, + 'algolia_integration_active' => false, + ]; + + // We can reuse this logic from the base class with the above defaults to parse with the correct feature values. + $options = $this->prevent_disabled_options_update( $options, $feature_vars ); + + return $options; + } + + /** + * Gets the filter hook name and callback for adjusting the retrieved option value + * against the network-allowed features. + * + * @return array Array where the first item is the hook name, the second is the hook callback, + * and the third is the hook priority. + */ + protected function get_verify_features_option_filter_hook() { + return [ + "option_{$this->option_name}", + [ $this, 'verify_features_against_network' ], + 11, + ]; + } + + /** + * Gets the filter hook name and callback for adjusting the default option value against the network-allowed features. + * + * @return array Array where the first item is the hook name, the second is the hook callback, + * and the third is the hook priority. + */ + protected function get_verify_features_default_option_filter_hook() { + return [ + "default_option_{$this->option_name}", + [ $this, 'verify_features_against_network' ], + 11, + ]; + } + + /** + * Clean a given option value. + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string|null $current_version Optional. Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array|null $all_old_option_values Optional. Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option. + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + // Deal with value change from text string to boolean. + $value_change = [ + 'ignore_search_engines_discouraged_notice', + ]; + + $target_values = [ + 'ignore', + 'done', + ]; + + foreach ( $value_change as $key ) { + if ( isset( $option_value[ $key ] ) + && in_array( $option_value[ $key ], $target_values, true ) + ) { + $option_value[ $key ] = true; + } + } + + return $option_value; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php new file mode 100644 index 00000000..1f0a36a3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-option.php @@ -0,0 +1,854 @@ + testers] Double check that validation will not cause errors when called + * from upgrade routine (some of the WP functions may not yet be available). + */ +abstract class WPSEO_Option { + + /** + * Prefix for override option keys that allow or disallow the option key of the same name. + * + * @var string + */ + public const ALLOW_KEY_PREFIX = 'allow_'; + + /** + * Option name - MUST be set in concrete class and set to public. + * + * @var string + */ + protected $option_name; + + /** + * Option group name for use in settings forms. + * + * Will be set automagically if not set in concrete class (i.e. + * if it conforms to the normal pattern 'yoast' . $option_name . 'options', + * only set in concrete class if it doesn't). + * + * @var string + */ + public $group_name; + + /** + * Whether to include the option in the return for WPSEO_Options::get_all(). + * + * Also determines which options are copied over for ms_(re)set_blog(). + * + * @var bool + */ + public $include_in_all = true; + + /** + * Whether this option is only for when the install is multisite. + * + * @var bool + */ + public $multisite_only = false; + + /** + * Array of defaults for the option - MUST be set in concrete class. + * + * Shouldn't be requested directly, use $this->get_defaults(); + * + * @var array + */ + protected $defaults; + + /** + * Array of variable option name patterns for the option - if any. + * + * Set this when the option contains array keys which vary based on post_type + * or taxonomy. + * + * @var array + */ + protected $variable_array_key_patterns; + + /** + * Array of sub-options which should not be overloaded with multi-site defaults. + * + * @var array + */ + public $ms_exclude = []; + + /** + * Name for an option higher in the hierarchy to override setting access. + * + * @var string + */ + protected $override_option_name; + + /** + * Instance of this class. + * + * @var WPSEO_Option + */ + protected static $instance; + + + /* *********** INSTANTIATION METHODS *********** */ + + /** + * Add all the actions and filters for the option. + */ + protected function __construct() { + + /* Add filters which get applied to the get_options() results. */ + $this->add_default_filters(); // Return defaults if option not set. + $this->add_option_filters(); // Merge with defaults if option *is* set. + + if ( $this->multisite_only !== true ) { + /** + * The option validation routines remove the default filters to prevent failing + * to insert an option if it's new. Let's add them back afterwards. + */ + add_action( 'add_option', [ $this, 'add_default_filters_if_same_option' ] ); // Adding back after INSERT. + + add_action( 'update_option', [ $this, 'add_default_filters_if_same_option' ] ); + + add_filter( 'pre_update_option', [ $this, 'add_default_filters_if_not_changed' ], PHP_INT_MAX, 3 ); + + // Refills the cache when the option has been updated. + add_action( 'update_option_' . $this->option_name, [ 'WPSEO_Options', 'clear_cache' ], 10 ); + } + elseif ( is_multisite() ) { + /* + * The option validation routines remove the default filters to prevent failing + * to insert an option if it's new. Let's add them back afterwards. + * + * For site_options, this method is not foolproof as these actions are not fired + * on an insert/update failure. Please use the WPSEO_Options::update_site_option() method + * for updating site options to make sure the filters are in place. + */ + add_action( 'add_site_option_' . $this->option_name, [ $this, 'add_default_filters' ] ); + add_action( 'update_site_option_' . $this->option_name, [ $this, 'add_default_filters' ] ); + add_filter( 'pre_update_site_option_' . $this->option_name, [ $this, 'add_default_filters_if_not_changed' ], PHP_INT_MAX, 3 ); + + // Refills the cache when the option has been updated. + add_action( 'update_site_option_' . $this->option_name, [ 'WPSEO_Options', 'clear_cache' ], 1, 0 ); + } + + /* + * Make sure the option will always get validated, independently of register_setting() + * (only available on back-end). + */ + add_filter( 'sanitize_option_' . $this->option_name, [ $this, 'validate' ] ); + + /* Register our option for the admin pages */ + add_action( 'admin_init', [ $this, 'register_setting' ] ); + + /* Set option group name if not given */ + if ( ! isset( $this->group_name ) || $this->group_name === '' ) { + $this->group_name = 'yoast_' . $this->option_name . '_options'; + } + + /* Translate some defaults as early as possible - textdomain is loaded in init on priority 1. */ + if ( method_exists( $this, 'translate_defaults' ) ) { + add_action( 'init', [ $this, 'translate_defaults' ], 2 ); + } + + /** + * Enrich defaults once custom post types and taxonomies have been registered + * which is normally done on the init action. + * + * @todo [JRF/testers] Verify that none of the options which are only available after + * enrichment are used before the enriching. + */ + if ( method_exists( $this, 'enrich_defaults' ) ) { + add_action( 'init', [ $this, 'enrich_defaults' ], 99 ); + } + } + + /* + * All concrete classes *must* contain the get_instance method. + * + * {@internal Unfortunately I can't define it as an abstract as it also *has* to be static...}} + * + * ``` + * abstract protected static function get_instance(); + * ``` + * --------------- + * + * Concrete classes *may* contain a translate_defaults method. + * ``` + * abstract public function translate_defaults(); + * ``` + * --------------- + * + * Concrete classes *may* contain an enrich_defaults method to add additional defaults once + * all post_types and taxonomies have been registered. + * + * ``` + * abstract public function enrich_defaults(); + * ``` + */ + + /* *********** METHODS INFLUENCING get_option() *********** */ + + /** + * Add filters to make sure that the option default is returned if the option is not set. + * + * @return void + */ + public function add_default_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'default_option_' . $this->option_name, [ $this, 'get_defaults' ] ) === false ) { + add_filter( 'default_option_' . $this->option_name, [ $this, 'get_defaults' ] ); + } + } + + /** + * Adds back the default filters that were removed during validation if the option was changed. + * Checks if this option was changed to prevent constantly checking if filters are present. + * + * @param string $option_name The option name. + * + * @return void + */ + public function add_default_filters_if_same_option( $option_name ) { + if ( $option_name === $this->option_name ) { + $this->add_default_filters(); + } + } + + /** + * Adds back the default filters that were removed during validation if the option was not changed. + * This is because in that case the latter actions are not called and thus the filters are never + * added back. + * + * @param mixed $value The current value. + * @param string $option_name The option name. + * @param mixed $old_value The old value. + * + * @return string The current value. + */ + public function add_default_filters_if_not_changed( $value, $option_name, $old_value ) { + if ( $option_name !== $this->option_name ) { + return $value; + } + + if ( $value === $old_value || maybe_serialize( $value ) === maybe_serialize( $old_value ) ) { + $this->add_default_filters(); + } + + return $value; + } + + /** + * Validate webmaster tools & Pinterest verification strings. + * + * @param string $key Key to check, by type of service. + * @param array $dirty Dirty data with the new values. + * @param array $old Old data. + * @param array $clean Clean data by reference, normally the default values. + * + * @return void + */ + public function validate_verification_string( $key, $dirty, $old, &$clean ) { + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + $meta = $dirty[ $key ]; + if ( strpos( $meta, 'content=' ) ) { + // Make sure we only have the real key, not a complete meta tag. + preg_match( '`content=([\'"])?([^\'"> ]+)(?:\1|[ />])`', $meta, $match ); + if ( isset( $match[2] ) ) { + $meta = $match[2]; + } + unset( $match ); + } + + $meta = sanitize_text_field( $meta ); + if ( $meta !== '' ) { + $regex = '`^[A-Fa-f0-9_-]+$`'; + + switch ( $key ) { + case 'googleverify': + case 'baiduverify': + $regex = '`^[A-Za-z0-9_-]+$`'; + break; + + case 'msverify': + case 'pinterestverify': + case 'yandexverify': + break; + } + + if ( preg_match( $regex, $meta ) ) { + $clean[ $key ] = $meta; + } + else { + // Restore the previous value, if any. + if ( isset( $old[ $key ] ) && preg_match( $regex, $old[ $key ] ) ) { + $clean[ $key ] = $old[ $key ]; + } + + Yoast_Input_Validation::add_dirty_value_to_settings_errors( $key, $meta ); + } + } + } + } + + /** + * Validates an option as a valid URL. Prints out a WordPress settings error + * notice if the URL is invalid. + * + * @param string $key Key to check, by type of URL setting. + * @param array $dirty Dirty data with the new values. + * @param array $old Old data. + * @param array $clean Clean data by reference, normally the default values. + * + * @return void + */ + public function validate_url( $key, $dirty, $old, &$clean ) { + if ( isset( $dirty[ $key ] ) && $dirty[ $key ] !== '' ) { + + $submitted_url = trim( $dirty[ $key ] ); + $validated_url = filter_var( WPSEO_Utils::sanitize_url( $submitted_url ), FILTER_VALIDATE_URL ); + + if ( $validated_url === false ) { + // Restore the previous URL value, if any. + if ( isset( $old[ $key ] ) && $old[ $key ] !== '' ) { + $url = WPSEO_Utils::sanitize_url( $old[ $key ] ); + if ( $url !== '' ) { + $clean[ $key ] = $url; + } + } + + Yoast_Input_Validation::add_dirty_value_to_settings_errors( $key, $submitted_url ); + + return; + } + + // The URL format is valid, let's sanitize it. + $url = WPSEO_Utils::sanitize_url( $validated_url ); + + if ( $url !== '' ) { + $clean[ $key ] = $url; + } + } + } + + /** + * Remove the default filters. + * Called from the validate() method to prevent failure to add new options. + * + * @return void + */ + public function remove_default_filters() { + remove_filter( 'default_option_' . $this->option_name, [ $this, 'get_defaults' ] ); + } + + /** + * Get the enriched default value for an option. + * + * Checks if the concrete class contains an enrich_defaults() method and if so, runs it. + * + * {@internal The enrich_defaults method is used to set defaults for variable array keys + * in an option, such as array keys depending on post_types and/or taxonomies.}} + * + * @return array + */ + public function get_defaults() { + if ( method_exists( $this, 'translate_defaults' ) ) { + $this->translate_defaults(); + } + + if ( method_exists( $this, 'enrich_defaults' ) ) { + $this->enrich_defaults(); + } + + return apply_filters( 'wpseo_defaults', $this->defaults, $this->option_name ); + } + + /** + * Add filters to make sure that the option is merged with its defaults before being returned. + * + * @return void + */ + public function add_option_filters() { + // Don't change, needs to check for false as could return prio 0 which would evaluate to false. + if ( has_filter( 'option_' . $this->option_name, [ $this, 'get_option' ] ) === false ) { + add_filter( 'option_' . $this->option_name, [ $this, 'get_option' ] ); + } + } + + /** + * Remove the option filters. + * Called from the clean_up methods to make sure we retrieve the original old option. + * + * @return void + */ + public function remove_option_filters() { + remove_filter( 'option_' . $this->option_name, [ $this, 'get_option' ] ); + } + + /** + * Merge an option with its default values. + * + * This method should *not* be called directly!!! It is only meant to filter the get_option() results. + * + * @param mixed $options Option value. + * + * @return mixed Option merged with the defaults for that option. + */ + public function get_option( $options = null ) { + $filtered = $this->array_filter_merge( $options ); + + /* + * If the option contains variable option keys, make sure we don't remove those settings + * - even if the defaults are not complete yet. + * Unfortunately this means we also won't be removing the settings for post types or taxonomies + * which are no longer in the WP install, but rather that than the other way around. + */ + if ( isset( $this->variable_array_key_patterns ) ) { + $filtered = $this->retain_variable_keys( $options, $filtered ); + } + + return $filtered; + } + + /* *********** METHODS influencing add_option(), update_option() and saving from admin pages. *********** */ + + /** + * Register (whitelist) the option for the configuration pages. + * The validation callback is already registered separately on the sanitize_option hook, + * so no need to double register. + * + * @return void + */ + public function register_setting() { + if ( ! WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ) ) { + return; + } + + if ( $this->multisite_only === true ) { + $network_settings_api = Yoast_Network_Settings_API::get(); + if ( $network_settings_api->meets_requirements() ) { + $network_settings_api->register_setting( $this->group_name, $this->option_name ); + } + return; + } + + register_setting( $this->group_name, $this->option_name ); + } + + /** + * Validate the option. + * + * @param mixed $option_value The unvalidated new value for the option. + * + * @return array Validated new value for the option. + */ + public function validate( $option_value ) { + $clean = $this->get_defaults(); + + /* Return the defaults if the new value is empty. */ + if ( ! is_array( $option_value ) || $option_value === [] ) { + return $clean; + } + + $option_value = array_map( [ 'WPSEO_Utils', 'trim_recursive' ], $option_value ); + + $old = $this->get_original_option(); + if ( ! is_array( $old ) ) { + $old = []; + } + $old = array_merge( $clean, $old ); + + $clean = $this->validate_option( $option_value, $clean, $old ); + + // Prevent updates to variables that are disabled via the override option. + $clean = $this->prevent_disabled_options_update( $clean, $old ); + + /* Retain the values for variable array keys even when the post type/taxonomy is not yet registered. */ + if ( isset( $this->variable_array_key_patterns ) ) { + $clean = $this->retain_variable_keys( $option_value, $clean ); + } + + $this->remove_default_filters(); + + return $clean; + } + + /** + * Checks whether a specific option key is disabled. + * + * This is determined by whether an override option is available with a key that equals the given key prefixed + * with 'allow_'. + * + * @param string $key Option key. + * + * @return bool True if option key is disabled, false otherwise. + */ + public function is_disabled( $key ) { + $override_option = $this->get_override_option(); + if ( empty( $override_option ) ) { + return false; + } + + return isset( $override_option[ self::ALLOW_KEY_PREFIX . $key ] ) && ! $override_option[ self::ALLOW_KEY_PREFIX . $key ]; + } + + /** + * All concrete classes must contain a validate_option() method which validates all + * values within the option. + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + */ + abstract protected function validate_option( $dirty, $clean, $old ); + + /* *********** METHODS for ADDING/UPDATING/UPGRADING the option. *********** */ + + /** + * Retrieve the real old value (unmerged with defaults). + * + * @return array|bool The original option value (which can be false if the option doesn't exist). + */ + protected function get_original_option() { + $this->remove_default_filters(); + $this->remove_option_filters(); + + // Get (unvalidated) array, NOT merged with defaults. + if ( $this->multisite_only !== true ) { + $option_value = get_option( $this->option_name ); + } + else { + $option_value = get_site_option( $this->option_name ); + } + + $this->add_option_filters(); + $this->add_default_filters(); + + return $option_value; + } + + /** + * Add the option if it doesn't exist for some strange reason. + * + * @uses WPSEO_Option::get_original_option() + * + * @return void + */ + public function maybe_add_option() { + if ( $this->get_original_option() === false ) { + if ( $this->multisite_only !== true ) { + update_option( $this->option_name, $this->get_defaults() ); + } + else { + $this->update_site_option( $this->get_defaults() ); + } + } + } + + /** + * Update a site_option. + * + * {@internal This special method is only needed for multisite options, but very needed indeed there. + * The order in which certain functions and hooks are run is different between + * get_option() and get_site_option() which means in practice that the removing + * of the default filters would be done too late and the re-adding of the default + * filters might not be done at all. + * Aka: use the WPSEO_Options::update_site_option() method (which calls this method) + * for safely adding/updating multisite options.}} + * + * @param mixed $value The new value for the option. + * + * @return bool Whether the update was successful. + */ + public function update_site_option( $value ) { + if ( $this->multisite_only === true && is_multisite() ) { + $this->remove_default_filters(); + $result = update_site_option( $this->option_name, $value ); + $this->add_default_filters(); + + return $result; + } + else { + return false; + } + } + + /** + * Retrieve the real old value (unmerged with defaults), clean and re-save the option. + * + * @uses WPSEO_Option::get_original_option() + * @uses WPSEO_Option::import() + * + * @param string|null $current_version Optional. Version from which to upgrade, if not set, + * version-specific upgrades will be disregarded. + * + * @return void + */ + public function clean( $current_version = null ) { + $option_value = $this->get_original_option(); + $this->import( $option_value, $current_version ); + } + + /** + * Clean and re-save the option. + * + * @uses clean_option() method from concrete class if it exists. + * + * @todo [JRF/whomever] Figure out a way to show settings error during/after the upgrade - maybe + * something along the lines of: + * -> add them to a property in this class + * -> if that property isset at the end of the routine and add_settings_error function does not exist, + * save as transient (or update the transient if one already exists) + * -> next time an admin is in the WP back-end, show the errors and delete the transient or only delete it + * once the admin has dismissed the message (add ajax function) + * Important: all validation routines which add_settings_errors would need to be changed for this to work + * + * @param array $option_value Option value to be imported. + * @param string|null $current_version Optional. Version from which to upgrade, if not set, + * version-specific upgrades will be disregarded. + * @param array|null $all_old_option_values Optional. Only used when importing old options to + * have access to the real old values, in contrast to + * the saved ones. + * + * @return void + */ + public function import( $option_value, $current_version = null, $all_old_option_values = null ) { + if ( $option_value === false ) { + $option_value = $this->get_defaults(); + } + elseif ( is_array( $option_value ) && method_exists( $this, 'clean_option' ) ) { + $option_value = $this->clean_option( $option_value, $current_version, $all_old_option_values ); + } + + /* + * Save the cleaned value - validation will take care of cleaning out array keys which + * should no longer be there. + */ + if ( $this->multisite_only !== true ) { + update_option( $this->option_name, $option_value ); + } + else { + $this->update_site_option( $this->option_name, $option_value ); + } + } + + /** + * Returns the variable array key patterns for an options class. + * + * @return array + */ + public function get_patterns() { + return (array) $this->variable_array_key_patterns; + } + + /** + * Retrieves the option name. + * + * @return string The set option name. + */ + public function get_option_name() { + return $this->option_name; + } + + /* + * Concrete classes *may* contain a clean_option method which will clean out old/renamed + * values within the option. + * + * ``` + * abstract public function clean_option( $option_value, $current_version = null, $all_old_option_values = null ); + * ``` + */ + + /* *********** HELPER METHODS for internal use. *********** */ + + /** + * Helper method - Combines a fixed array of default values with an options array + * while filtering out any keys which are not in the defaults array. + * + * @todo [JRF] - shouldn't this be a straight array merge ? at the end of the day, the validation + * removes any invalid keys on save. + * + * @param array|null $options Optional. Current options. If not set, the option defaults + * for the $option_key will be returned. + * + * @return array Combined and filtered options array. + */ + protected function array_filter_merge( $options = null ) { + + $defaults = $this->get_defaults(); + + if ( ! isset( $options ) || $options === false || $options === [] ) { + return $defaults; + } + + $options = (array) $options; + + /* + $filtered = array(); + + if ( $defaults !== array() ) { + foreach ( $defaults as $key => $default_value ) { + // @todo should this walk through array subkeys ? + $filtered[ $key ] = ( isset( $options[ $key ] ) ? $options[ $key ] : $default_value ); + } + } + */ + $filtered = array_merge( $defaults, $options ); + + return $filtered; + } + + /** + * Sets updated values for variables that are disabled via the override option back to their previous values. + * + * @param array $updated Updated option value. + * @param array $old Old option value. + * + * @return array Updated option value, with all disabled variables set to their old values. + */ + protected function prevent_disabled_options_update( $updated, $old ) { + $override_option = $this->get_override_option(); + if ( empty( $override_option ) ) { + return $updated; + } + + /* + * This loop could as well call `is_disabled( $key )` for each iteration, + * however this would be worse performance-wise. + */ + foreach ( $old as $key => $value ) { + if ( isset( $override_option[ self::ALLOW_KEY_PREFIX . $key ] ) && ! $override_option[ self::ALLOW_KEY_PREFIX . $key ] ) { + $updated[ $key ] = $old[ $key ]; + } + } + + return $updated; + } + + /** + * Retrieves the value of the override option, if available. + * + * An override option contains values that may determine access to certain sub-variables + * of this option. + * + * Only regular options in multisite can have override options, which in that case + * would be network options. + * + * @return array Override option value, or empty array if unavailable. + */ + protected function get_override_option() { + if ( empty( $this->override_option_name ) || $this->multisite_only === true || ! is_multisite() ) { + return []; + } + + return get_site_option( $this->override_option_name, [] ); + } + + /** + * Make sure that any set option values relating to post_types and/or taxonomies are retained, + * even when that post_type or taxonomy may not yet have been registered. + * + * {@internal The wpseo_titles concrete class overrules this method. Make sure that any + * changes applied here, also get ported to that version.}} + * + * @param array $dirty Original option as retrieved from the database. + * @param array $clean Filtered option where any options which shouldn't be in our option + * have already been removed and any options which weren't set + * have been set to their defaults. + * + * @return array + */ + protected function retain_variable_keys( $dirty, $clean ) { + if ( ( is_array( $this->variable_array_key_patterns ) && $this->variable_array_key_patterns !== [] ) && ( is_array( $dirty ) && $dirty !== [] ) ) { + foreach ( $dirty as $key => $value ) { + + // Do nothing if already in filtered options. + if ( isset( $clean[ $key ] ) ) { + continue; + } + + foreach ( $this->variable_array_key_patterns as $pattern ) { + + if ( strpos( $key, $pattern ) === 0 ) { + $clean[ $key ] = $value; + break; + } + } + } + } + + return $clean; + } + + /** + * Check whether a given array key conforms to one of the variable array key patterns for this option. + * + * @used-by validate_option() methods for options with variable array keys. + * + * @param string $key Array key to check. + * + * @return string Pattern if it conforms, original array key if it doesn't or if the option + * does not have variable array keys. + */ + protected function get_switch_key( $key ) { + if ( ! isset( $this->variable_array_key_patterns ) || ( ! is_array( $this->variable_array_key_patterns ) || $this->variable_array_key_patterns === [] ) ) { + return $key; + } + + foreach ( $this->variable_array_key_patterns as $pattern ) { + if ( strpos( $key, $pattern ) === 0 ) { + return $pattern; + } + } + + return $key; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php new file mode 100644 index 00000000..eaae3340 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-options.php @@ -0,0 +1,596 @@ + (string) name of concrete class for the option. + */ + public static $options = [ + 'wpseo' => 'WPSEO_Option_Wpseo', + 'wpseo_titles' => 'WPSEO_Option_Titles', + 'wpseo_social' => 'WPSEO_Option_Social', + 'wpseo_ms' => 'WPSEO_Option_MS', + 'wpseo_taxonomy_meta' => 'WPSEO_Taxonomy_Meta', + ]; + + /** + * Array of instantiated option objects. + * + * @var array + */ + protected static $option_instances = []; + + /** + * Array with the option names. + * + * @var array + */ + protected static $option_names = []; + + /** + * Instance of this class. + * + * @var WPSEO_Options + */ + protected static $instance; + + /** + * Instantiate all the WPSEO option management classes. + */ + protected function __construct() { + $this->register_hooks(); + + foreach ( static::$options as $option_class ) { + static::register_option( call_user_func( [ $option_class, 'get_instance' ] ) ); + } + } + + /** + * Register our hooks. + * + * @return void + */ + public function register_hooks() { + add_action( 'registered_taxonomy', [ $this, 'clear_cache' ] ); + add_action( 'unregistered_taxonomy', [ $this, 'clear_cache' ] ); + add_action( 'registered_post_type', [ $this, 'clear_cache' ] ); + add_action( 'unregistered_post_type', [ $this, 'clear_cache' ] ); + } + + /** + * Get the singleton instance of this class. + * + * @return object + */ + public static function get_instance() { + if ( ! ( static::$instance instanceof self ) ) { + static::$instance = new self(); + } + + return static::$instance; + } + + /** + * Registers an option to the options list. + * + * @param WPSEO_Option $option_instance Instance of the option. + * + * @return void + */ + public static function register_option( WPSEO_Option $option_instance ) { + $option_name = $option_instance->get_option_name(); + + if ( $option_instance->multisite_only && ! static::is_multisite() ) { + unset( static::$options[ $option_name ], static::$option_names[ $option_name ] ); + + return; + } + + $is_already_registered = array_key_exists( $option_name, static::$options ); + if ( ! $is_already_registered ) { + static::$options[ $option_name ] = get_class( $option_instance ); + } + + if ( $option_instance->include_in_all === true ) { + static::$option_names[ $option_name ] = $option_name; + } + + static::$option_instances[ $option_name ] = $option_instance; + + if ( ! $is_already_registered ) { + static::clear_cache(); + } + } + + /** + * Get the group name of an option for use in the settings form. + * + * @param string $option_name The option for which you want to retrieve the option group name. + * + * @return string|bool + */ + public static function get_group_name( $option_name ) { + if ( isset( static::$option_instances[ $option_name ] ) ) { + return static::$option_instances[ $option_name ]->group_name; + } + + return false; + } + + /** + * Get a specific default value for an option. + * + * @param string $option_name The option for which you want to retrieve a default. + * @param string $key The key within the option who's default you want. + * + * @return mixed + */ + public static function get_default( $option_name, $key ) { + if ( isset( static::$option_instances[ $option_name ] ) ) { + $defaults = static::$option_instances[ $option_name ]->get_defaults(); + if ( isset( $defaults[ $key ] ) ) { + return $defaults[ $key ]; + } + } + + return null; + } + + /** + * Update a site_option. + * + * @param string $option_name The option name of the option to save. + * @param mixed $value The new value for the option. + * + * @return bool + */ + public static function update_site_option( $option_name, $value ) { + if ( is_multisite() && isset( static::$option_instances[ $option_name ] ) ) { + return static::$option_instances[ $option_name ]->update_site_option( $value ); + } + + return false; + } + + /** + * Get the instantiated option instance. + * + * @param string $option_name The option for which you want to retrieve the instance. + * + * @return object|bool + */ + public static function get_option_instance( $option_name ) { + if ( isset( static::$option_instances[ $option_name ] ) ) { + return static::$option_instances[ $option_name ]; + } + + return false; + } + + /** + * Retrieve an array of the options which should be included in get_all() and reset(). + * + * @return array Array of option names. + */ + public static function get_option_names() { + $option_names = array_values( static::$option_names ); + if ( $option_names === [] ) { + foreach ( static::$option_instances as $option_name => $option_object ) { + if ( $option_object->include_in_all === true ) { + $option_names[] = $option_name; + } + } + } + + /** + * Filter: wpseo_options - Allow developers to change the option name to include. + * + * @param array $option_names The option names to include in get_all and reset(). + */ + return apply_filters( 'wpseo_options', $option_names ); + } + + /** + * Retrieve all the options for the SEO plugin in one go. + * + * @return array Array combining the values of all the options. + */ + public static function get_all() { + static::$option_values = static::get_options( static::get_option_names() ); + + return static::$option_values; + } + + /** + * Retrieve one or more options for the SEO plugin. + * + * @param array $option_names An array of option names of the options you want to get. + * + * @return array Array combining the values of the requested options. + */ + public static function get_options( array $option_names ) { + $options = []; + $option_names = array_filter( $option_names, 'is_string' ); + foreach ( $option_names as $option_name ) { + if ( isset( static::$option_instances[ $option_name ] ) ) { + $option = static::get_option( $option_name ); + + if ( $option !== null ) { + $options = array_merge( $options, $option ); + } + } + } + + return $options; + } + + /** + * Retrieve a single option for the SEO plugin. + * + * @param string $option_name The name of the option you want to get. + * + * @return array Array containing the requested option. + */ + public static function get_option( $option_name ) { + $option = null; + if ( is_string( $option_name ) && ! empty( $option_name ) ) { + if ( isset( static::$option_instances[ $option_name ] ) ) { + if ( static::$option_instances[ $option_name ]->multisite_only !== true ) { + $option = get_option( $option_name ); + } + else { + $option = get_site_option( $option_name ); + } + } + } + + return $option; + } + + /** + * Retrieve a single field from any option for the SEO plugin. Keys are always unique. + * + * @param string $key The key it should return. + * @param mixed $default_value The default value that should be returned if the key isn't set. + * + * @return mixed Returns value if found, $default_value if not. + */ + public static function get( $key, $default_value = null ) { + if ( static::$option_values === null ) { + static::prime_cache(); + } + if ( isset( static::$option_values[ $key ] ) ) { + return static::$option_values[ $key ]; + } + + return $default_value; + } + + /** + * Resets the cache to null. + * + * @return void + */ + public static function clear_cache() { + static::$option_values = null; + } + + /** + * Primes our cache. + * + * @return void + */ + private static function prime_cache() { + static::$option_values = static::get_all(); + static::$option_values = static::add_ms_option( static::$option_values ); + } + + /** + * Retrieve a single field from an option for the SEO plugin. + * + * @param string $key The key to set. + * @param mixed $value The value to set. + * + * @return mixed|null Returns value if found, $default if not. + */ + public static function set( $key, $value ) { + $lookup_table = static::get_lookup_table(); + + if ( isset( $lookup_table[ $key ] ) ) { + return static::save_option( $lookup_table[ $key ], $key, $value ); + } + + $patterns = static::get_pattern_table(); + foreach ( $patterns as $pattern => $option ) { + if ( strpos( $key, $pattern ) === 0 ) { + return static::save_option( $option, $key, $value ); + } + } + + static::$option_values[ $key ] = $value; + } + + /** + * Get an option only if it's been auto-loaded. + * + * @param string $option The option to retrieve. + * @param mixed $default_value A default value to return. + * + * @return mixed + */ + public static function get_autoloaded_option( $option, $default_value = false ) { + $value = wp_cache_get( $option, 'options' ); + if ( $value === false ) { + $passed_default = func_num_args() > 1; + + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Using WP native filter. + return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default ); + } + + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Using WP native filter. + return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option ); + } + + /** + * Run the clean up routine for one or all options. + * + * @param array|string|null $option_name Optional. the option you want to clean or an array of + * option names for the options you want to clean. + * If not set, all options will be cleaned. + * @param string|null $current_version Optional. Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * + * @return void + */ + public static function clean_up( $option_name = null, $current_version = null ) { + if ( isset( $option_name ) && is_string( $option_name ) && $option_name !== '' ) { + if ( isset( static::$option_instances[ $option_name ] ) ) { + static::$option_instances[ $option_name ]->clean( $current_version ); + } + } + elseif ( isset( $option_name ) && is_array( $option_name ) && $option_name !== [] ) { + foreach ( $option_name as $option ) { + if ( isset( static::$option_instances[ $option ] ) ) { + static::$option_instances[ $option ]->clean( $current_version ); + } + } + unset( $option ); + } + else { + foreach ( static::$option_instances as $instance ) { + $instance->clean( $current_version ); + } + unset( $instance ); + + // If we've done a full clean-up, we can safely remove this really old option. + delete_option( 'wpseo_indexation' ); + } + } + + /** + * Check that all options exist in the database and add any which don't. + * + * @return void + */ + public static function ensure_options_exist() { + foreach ( static::$option_instances as $instance ) { + $instance->maybe_add_option(); + } + } + + /** + * Initialize some options on first install/activate/reset. + * + * @return void + */ + public static function initialize() { + /* Force WooThemes to use Yoast SEO data. */ + if ( function_exists( 'woo_version_init' ) ) { + update_option( 'seo_woo_use_third_party_data', 'true' ); + } + } + + /** + * Reset all options to their default values and rerun some tests. + * + * @return void + */ + public static function reset() { + if ( ! is_multisite() ) { + $option_names = static::get_option_names(); + if ( is_array( $option_names ) && $option_names !== [] ) { + foreach ( $option_names as $option_name ) { + delete_option( $option_name ); + update_option( $option_name, get_option( $option_name ) ); + } + } + unset( $option_names ); + } + else { + // Reset MS blog based on network default blog setting. + static::reset_ms_blog( get_current_blog_id() ); + } + + static::initialize(); + } + + /** + * Initialize default values for a new multisite blog. + * + * @param bool $force_init Whether to always do the initialization routine (title/desc test). + * + * @return void + */ + public static function maybe_set_multisite_defaults( $force_init = false ) { + $option = get_option( 'wpseo' ); + + if ( is_multisite() ) { + if ( $option['ms_defaults_set'] === false ) { + static::reset_ms_blog( get_current_blog_id() ); + static::initialize(); + } + elseif ( $force_init === true ) { + static::initialize(); + } + } + } + + /** + * Reset all options for a specific multisite blog to their default values based upon a + * specified default blog if one was chosen on the network page or the plugin defaults if it was not. + * + * @param int|string $blog_id Blog id of the blog for which to reset the options. + * + * @return void + */ + public static function reset_ms_blog( $blog_id ) { + if ( is_multisite() ) { + $options = get_site_option( 'wpseo_ms' ); + $option_names = static::get_option_names(); + + if ( is_array( $option_names ) && $option_names !== [] ) { + $base_blog_id = $blog_id; + if ( $options['defaultblog'] !== '' && $options['defaultblog'] !== 0 ) { + $base_blog_id = $options['defaultblog']; + } + + foreach ( $option_names as $option_name ) { + delete_blog_option( $blog_id, $option_name ); + + $new_option = get_blog_option( $base_blog_id, $option_name ); + + /* Remove sensitive, theme dependent and site dependent info. */ + if ( isset( static::$option_instances[ $option_name ] ) && static::$option_instances[ $option_name ]->ms_exclude !== [] ) { + foreach ( static::$option_instances[ $option_name ]->ms_exclude as $key ) { + unset( $new_option[ $key ] ); + } + } + + if ( $option_name === 'wpseo' ) { + $new_option['ms_defaults_set'] = true; + } + + update_blog_option( $blog_id, $option_name, $new_option ); + } + } + } + } + + /** + * Saves the option to the database. + * + * @param string $wpseo_options_group_name The name for the wpseo option group in the database. + * @param string $option_name The name for the option to set. + * @param mixed $option_value The value for the option. + * + * @return bool Returns true if the option is successfully saved in the database. + */ + public static function save_option( $wpseo_options_group_name, $option_name, $option_value ) { + $options = static::get_option( $wpseo_options_group_name ); + $options[ $option_name ] = $option_value; + + if ( isset( static::$option_instances[ $wpseo_options_group_name ] ) && static::$option_instances[ $wpseo_options_group_name ]->multisite_only === true ) { + static::update_site_option( $wpseo_options_group_name, $options ); + } + else { + update_option( $wpseo_options_group_name, $options ); + } + + // Check if everything got saved properly. + $saved_option = static::get_option( $wpseo_options_group_name ); + + // Clear our cache. + static::clear_cache(); + + return $saved_option[ $option_name ] === $options[ $option_name ]; + } + + /** + * Adds the multisite options to the option stack if relevant. + * + * @param array $option The currently present options settings. + * + * @return array Options possibly including multisite. + */ + protected static function add_ms_option( $option ) { + if ( ! is_multisite() ) { + return $option; + } + + $ms_option = static::get_option( 'wpseo_ms' ); + if ( $ms_option === null ) { + return $option; + } + + return array_merge( $option, $ms_option ); + } + + /** + * Checks if installation is multisite. + * + * @return bool True when is multisite. + */ + protected static function is_multisite() { + static $is_multisite; + + if ( $is_multisite === null ) { + $is_multisite = is_multisite(); + } + + return $is_multisite; + } + + /** + * Retrieves a lookup table to find in which option_group a key is stored. + * + * @return array The lookup table. + */ + private static function get_lookup_table() { + $lookup_table = []; + + foreach ( array_keys( static::$options ) as $option_name ) { + $full_option = static::get_option( $option_name ); + foreach ( $full_option as $key => $value ) { + $lookup_table[ $key ] = $option_name; + } + } + + return $lookup_table; + } + + /** + * Retrieves a lookup table to find in which option_group a key is stored. + * + * @return array The lookup table. + */ + private static function get_pattern_table() { + $pattern_table = []; + foreach ( static::$options as $option_name => $option_class ) { + $instance = call_user_func( [ $option_class, 'get_instance' ] ); + foreach ( $instance->get_patterns() as $key ) { + $pattern_table[ $key ] = $option_name; + } + } + + return $pattern_table; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php new file mode 100644 index 00000000..b2c591bf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/options/class-wpseo-taxonomy-meta.php @@ -0,0 +1,566 @@ +get_defaults(); + * + * {@internal Important: in contrast to most defaults, the below array format is + * very bare. The real option is in the format [taxonomy_name][term_id][...] + * where [...] is any of the $defaults_per_term options shown below. + * This is of course taken into account in the below methods.}} + * + * @var array + */ + protected $defaults = []; + + /** + * Option name - same as $option_name property, but now also available to static methods. + * + * @var string + */ + public static $name; + + /** + * Array of defaults for individual taxonomy meta entries. + * + * @var array + */ + public static $defaults_per_term = [ + 'wpseo_title' => '', + 'wpseo_desc' => '', + 'wpseo_canonical' => '', + 'wpseo_bctitle' => '', + 'wpseo_noindex' => 'default', + 'wpseo_focuskw' => '', + 'wpseo_linkdex' => '', + 'wpseo_content_score' => '', + 'wpseo_inclusive_language_score' => '', + 'wpseo_focuskeywords' => '[]', + 'wpseo_keywordsynonyms' => '[]', + 'wpseo_is_cornerstone' => '0', + + // Social fields. + 'wpseo_opengraph-title' => '', + 'wpseo_opengraph-description' => '', + 'wpseo_opengraph-image' => '', + 'wpseo_opengraph-image-id' => '', + 'wpseo_twitter-title' => '', + 'wpseo_twitter-description' => '', + 'wpseo_twitter-image' => '', + 'wpseo_twitter-image-id' => '', + ]; + + /** + * Available index options. + * + * Used for form generation and input validation. + * + * {@internal Labels (translation) added on admin_init via WPSEO_Taxonomy::translate_meta_options().}} + * + * @var array + */ + public static $no_index_options = [ + 'default' => '', + 'index' => '', + 'noindex' => '', + ]; + + /** + * Add the actions and filters for the option. + * + * @todo [JRF => testers] Check if the extra actions below would run into problems if an option + * is updated early on and if so, change the call to schedule these for a later action on add/update + * instead of running them straight away. + */ + protected function __construct() { + parent::__construct(); + + self::$name = $this->option_name; + } + + /** + * Get the singleton instance of this class. + * + * @return object + */ + public static function get_instance() { + if ( ! ( self::$instance instanceof self ) ) { + self::$instance = new self(); + self::$name = self::$instance->option_name; + } + + return self::$instance; + } + + /** + * Add extra default options received from a filter. + * + * @return void + */ + public function enrich_defaults() { + $extra_defaults_per_term = apply_filters( 'wpseo_add_extra_taxmeta_term_defaults', [] ); + if ( is_array( $extra_defaults_per_term ) ) { + self::$defaults_per_term = array_merge( $extra_defaults_per_term, self::$defaults_per_term ); + } + } + + /** + * Validate the option. + * + * @param array $dirty New value for the option. + * @param array $clean Clean value for the option, normally the defaults. + * @param array $old Old value of the option. + * + * @return array Validated clean value for the option to be saved to the database. + */ + protected function validate_option( $dirty, $clean, $old ) { + /* + * Prevent complete validation (which can be expensive when there are lots of terms) + * if only one item has changed and has already been validated. + */ + if ( isset( $dirty['wpseo_already_validated'] ) && $dirty['wpseo_already_validated'] === true ) { + unset( $dirty['wpseo_already_validated'] ); + + return $dirty; + } + + foreach ( $dirty as $taxonomy => $terms ) { + /* Don't validate taxonomy - may not be registered yet and we don't want to remove valid ones. */ + if ( is_array( $terms ) && $terms !== [] ) { + foreach ( $terms as $term_id => $meta_data ) { + /* Only validate term if the taxonomy exists. */ + if ( taxonomy_exists( $taxonomy ) && get_term_by( 'id', $term_id, $taxonomy ) === false ) { + /* Is this term id a special case ? */ + if ( has_filter( 'wpseo_tax_meta_special_term_id_validation_' . $term_id ) !== false ) { + $clean[ $taxonomy ][ $term_id ] = apply_filters( 'wpseo_tax_meta_special_term_id_validation_' . $term_id, $meta_data, $taxonomy, $term_id ); + } + continue; + } + + if ( is_array( $meta_data ) && $meta_data !== [] ) { + /* Validate meta data. */ + $old_meta = self::get_term_meta( $term_id, $taxonomy ); + $meta_data = self::validate_term_meta_data( $meta_data, $old_meta ); + if ( $meta_data !== [] ) { + $clean[ $taxonomy ][ $term_id ] = $meta_data; + } + } + + // Deal with special cases (for when taxonomy doesn't exist yet). + if ( ! isset( $clean[ $taxonomy ][ $term_id ] ) && has_filter( 'wpseo_tax_meta_special_term_id_validation_' . $term_id ) !== false ) { + $clean[ $taxonomy ][ $term_id ] = apply_filters( 'wpseo_tax_meta_special_term_id_validation_' . $term_id, $meta_data, $taxonomy, $term_id ); + } + } + } + } + + return $clean; + } + + /** + * Validate the meta data for one individual term and removes default values (no need to save those). + * + * @param array $meta_data New values. + * @param array $old_meta The original values. + * + * @return array Validated and filtered value. + */ + public static function validate_term_meta_data( $meta_data, $old_meta ) { + + $clean = self::$defaults_per_term; + $meta_data = array_map( [ 'WPSEO_Utils', 'trim_recursive' ], $meta_data ); + + if ( ! is_array( $meta_data ) || $meta_data === [] ) { + return $clean; + } + + foreach ( $clean as $key => $value ) { + switch ( $key ) { + + case 'wpseo_noindex': + if ( isset( $meta_data[ $key ] ) ) { + if ( isset( self::$no_index_options[ $meta_data[ $key ] ] ) ) { + $clean[ $key ] = $meta_data[ $key ]; + } + } + elseif ( isset( $old_meta[ $key ] ) ) { + // Retain old value if field currently not in use. + $clean[ $key ] = $old_meta[ $key ]; + } + break; + + case 'wpseo_canonical': + if ( isset( $meta_data[ $key ] ) && $meta_data[ $key ] !== '' ) { + $url = WPSEO_Utils::sanitize_url( $meta_data[ $key ] ); + if ( $url !== '' ) { + $clean[ $key ] = $url; + } + unset( $url ); + } + break; + + case 'wpseo_bctitle': + if ( isset( $meta_data[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $meta_data[ $key ] ); + } + elseif ( isset( $old_meta[ $key ] ) ) { + // Retain old value if field currently not in use. + $clean[ $key ] = $old_meta[ $key ]; + } + break; + + case 'wpseo_keywordsynonyms': + if ( isset( $meta_data[ $key ] ) && is_string( $meta_data[ $key ] ) ) { + // The data is stringified JSON. Use `json_decode` and `json_encode` around the sanitation. + $input = json_decode( $meta_data[ $key ], true ); + $sanitized = array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], $input ); + $clean[ $key ] = WPSEO_Utils::format_json_encode( $sanitized ); + } + elseif ( isset( $old_meta[ $key ] ) ) { + // Retain old value if field currently not in use. + $clean[ $key ] = $old_meta[ $key ]; + } + break; + + case 'wpseo_focuskeywords': + if ( isset( $meta_data[ $key ] ) && is_string( $meta_data[ $key ] ) ) { + // The data is stringified JSON. Use `json_decode` and `json_encode` around the sanitation. + $input = json_decode( $meta_data[ $key ], true ); + + // This data has two known keys: `keyword` and `score`. + $sanitized = []; + foreach ( $input as $entry ) { + $sanitized[] = [ + 'keyword' => WPSEO_Utils::sanitize_text_field( $entry['keyword'] ), + 'score' => WPSEO_Utils::sanitize_text_field( $entry['score'] ), + ]; + } + + $clean[ $key ] = WPSEO_Utils::format_json_encode( $sanitized ); + } + elseif ( isset( $old_meta[ $key ] ) ) { + // Retain old value if field currently not in use. + $clean[ $key ] = $old_meta[ $key ]; + } + break; + + case 'wpseo_focuskw': + case 'wpseo_title': + case 'wpseo_desc': + case 'wpseo_linkdex': + default: + if ( isset( $meta_data[ $key ] ) && is_string( $meta_data[ $key ] ) ) { + $clean[ $key ] = WPSEO_Utils::sanitize_text_field( $meta_data[ $key ] ); + } + + if ( $key === 'wpseo_focuskw' ) { + $search = [ + '<', + '>', + '`', + '<', + '>', + '`', + ]; + + $clean[ $key ] = str_replace( $search, '', $clean[ $key ] ); + } + break; + } + + $clean[ $key ] = apply_filters( 'wpseo_sanitize_tax_meta_' . $key, $clean[ $key ], ( $meta_data[ $key ] ?? null ), ( $old_meta[ $key ] ?? null ) ); + } + + // Only save the non-default values. + return array_diff_assoc( $clean, self::$defaults_per_term ); + } + + /** + * Clean a given option value. + * - Convert old option values to new + * - Fixes strings which were escaped (should have been sanitized - escaping is for output) + * + * @param array $option_value Old (not merged with defaults or filtered) option value to + * clean according to the rules for this option. + * @param string|null $current_version Optional. Version from which to upgrade, if not set, + * version specific upgrades will be disregarded. + * @param array|null $all_old_option_values Optional. Only used when importing old options to have + * access to the real old values, in contrast to the saved ones. + * + * @return array Cleaned option. + */ + protected function clean_option( $option_value, $current_version = null, $all_old_option_values = null ) { + + /* Clean up old values and remove empty arrays. */ + if ( is_array( $option_value ) && $option_value !== [] ) { + + foreach ( $option_value as $taxonomy => $terms ) { + + if ( is_array( $terms ) && $terms !== [] ) { + + foreach ( $terms as $term_id => $meta_data ) { + if ( ! is_array( $meta_data ) || $meta_data === [] ) { + // Remove empty term arrays. + unset( $option_value[ $taxonomy ][ $term_id ] ); + } + else { + foreach ( $meta_data as $key => $value ) { + + switch ( $key ) { + case 'noindex': + if ( $value === 'on' ) { + // Convert 'on' to 'noindex'. + $option_value[ $taxonomy ][ $term_id ][ $key ] = 'noindex'; + } + break; + + case 'canonical': + case 'wpseo_bctitle': + case 'wpseo_title': + case 'wpseo_desc': + case 'wpseo_linkdex': + // @todo [JRF => whomever] Needs checking, I don't have example data [JRF]. + if ( $value !== '' ) { + // Fix incorrectly saved (encoded) canonical urls and texts. + $option_value[ $taxonomy ][ $term_id ][ $key ] = wp_specialchars_decode( stripslashes( $value ), ENT_QUOTES ); + } + break; + + default: + // @todo [JRF => whomever] Needs checking, I don't have example data [JRF]. + if ( $value !== '' ) { + // Fix incorrectly saved (escaped) text strings. + $option_value[ $taxonomy ][ $term_id ][ $key ] = wp_specialchars_decode( $value, ENT_QUOTES ); + } + break; + } + } + } + } + } + else { + // Remove empty taxonomy arrays. + unset( $option_value[ $taxonomy ] ); + } + } + } + + return $option_value; + } + + /** + * Retrieve a taxonomy term's meta value(s). + * + * @param mixed $term Term to get the meta value for + * either (string) term name, (int) term id or (object) term. + * @param string $taxonomy Name of the taxonomy to which the term is attached. + * @param string|null $meta Optional. Meta value to get (without prefix). + * + * @return mixed Value for the $meta if one is given, might be the default. + * If no meta is given, an array of all the meta data for the term. + * False if the term does not exist or the $meta provided is invalid. + */ + public static function get_term_meta( $term, $taxonomy, $meta = null ) { + /* Figure out the term id. */ + if ( is_int( $term ) ) { + $term = get_term_by( 'id', $term, $taxonomy ); + } + elseif ( is_string( $term ) ) { + $term = get_term_by( 'slug', $term, $taxonomy ); + } + + if ( is_object( $term ) && isset( $term->term_id ) ) { + $term_id = $term->term_id; + } + else { + return false; + } + + $tax_meta = self::get_term_tax_meta( $term_id, $taxonomy ); + + /* + * Either return the complete array or a single value from it or false if the value does not exist + * (shouldn't happen after merge with defaults, indicates typo in request). + */ + if ( ! isset( $meta ) ) { + return $tax_meta; + } + + if ( isset( $tax_meta[ 'wpseo_' . $meta ] ) ) { + return $tax_meta[ 'wpseo_' . $meta ]; + } + + return false; + } + + /** + * Get the current queried object and return the meta value. + * + * @param string $meta The meta field that is needed. + * + * @return mixed + */ + public static function get_meta_without_term( $meta ) { + $term = $GLOBALS['wp_query']->get_queried_object(); + if ( ! $term || empty( $term->taxonomy ) ) { + return false; + } + + return self::get_term_meta( $term, $term->taxonomy, $meta ); + } + + /** + * Saving the values for the given term_id. + * + * @param int $term_id ID of the term to save data for. + * @param string $taxonomy The taxonomy the term belongs to. + * @param array $meta_values The values that will be saved. + * + * @return void + */ + public static function set_values( $term_id, $taxonomy, array $meta_values ) { + /* Validate the post values */ + $old = self::get_term_meta( $term_id, $taxonomy ); + $clean = self::validate_term_meta_data( $meta_values, $old ); + + self::save_clean_values( $term_id, $taxonomy, $clean ); + } + + /** + * Setting a single value to the term meta. + * + * @param int $term_id ID of the term to save data for. + * @param string $taxonomy The taxonomy the term belongs to. + * @param string $meta_key The target meta key to store the value in. + * @param string $meta_value The value of the target meta key. + * + * @return void + */ + public static function set_value( $term_id, $taxonomy, $meta_key, $meta_value ) { + + if ( substr( strtolower( $meta_key ), 0, 6 ) !== 'wpseo_' ) { + $meta_key = 'wpseo_' . $meta_key; + } + + self::set_values( $term_id, $taxonomy, [ $meta_key => $meta_value ] ); + } + + /** + * Find the keyword usages in the metas for the taxonomies/terms. + * + * @param string $keyword The keyword to look for. + * @param string $current_term_id The current term id. + * @param string $current_taxonomy The current taxonomy name. + * + * @return array + */ + public static function get_keyword_usage( $keyword, $current_term_id, $current_taxonomy ) { + $tax_meta = self::get_tax_meta(); + + $found = []; + // @todo Check for terms of all taxonomies, not only the current taxonomy. + foreach ( $tax_meta as $taxonomy_name => $terms ) { + foreach ( $terms as $term_id => $meta_values ) { + $is_current = ( $current_taxonomy === $taxonomy_name && (string) $current_term_id === (string) $term_id ); + if ( ! $is_current && ! empty( $meta_values['wpseo_focuskw'] ) && $meta_values['wpseo_focuskw'] === $keyword ) { + $found[] = $term_id; + } + } + } + + return [ $keyword => $found ]; + } + + /** + * Saving the values for the given term_id. + * + * @param int $term_id ID of the term to save data for. + * @param string $taxonomy The taxonomy the term belongs to. + * @param array $clean Array with clean values. + * + * @return void + */ + private static function save_clean_values( $term_id, $taxonomy, array $clean ) { + $tax_meta = self::get_tax_meta(); + + /* Add/remove the result to/from the original option value. */ + if ( $clean !== [] ) { + $tax_meta[ $taxonomy ][ $term_id ] = $clean; + } + else { + unset( $tax_meta[ $taxonomy ][ $term_id ] ); + if ( isset( $tax_meta[ $taxonomy ] ) && $tax_meta[ $taxonomy ] === [] ) { + unset( $tax_meta[ $taxonomy ] ); + } + } + + // Prevent complete array validation. + $tax_meta['wpseo_already_validated'] = true; + + self::save_tax_meta( $tax_meta ); + } + + /** + * Getting the meta from the options. + * + * @return void|array + */ + private static function get_tax_meta() { + return get_option( self::$name ); + } + + /** + * Saving the tax meta values to the database. + * + * @param array $tax_meta Array with the meta values for taxonomy. + * + * @return void + */ + private static function save_tax_meta( $tax_meta ) { + update_option( self::$name, $tax_meta ); + } + + /** + * Getting the taxonomy meta for the given term_id and taxonomy. + * + * @param int $term_id The id of the term. + * @param string $taxonomy Name of the taxonomy to which the term is attached. + * + * @return array + */ + private static function get_term_tax_meta( $term_id, $taxonomy ) { + $tax_meta = self::get_tax_meta(); + + /* If we have data for the term, merge with defaults for complete array, otherwise set defaults. */ + if ( isset( $tax_meta[ $taxonomy ][ $term_id ] ) ) { + return array_merge( self::$defaults_per_term, $tax_meta[ $taxonomy ][ $term_id ] ); + } + + return self::$defaults_per_term; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php new file mode 100644 index 00000000..343f97bc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-author-sitemap-provider.php @@ -0,0 +1,244 @@ +handles_type( 'author' ) ) { + return []; + } + + // @todo Consider doing this less often / when necessary. R. + $this->update_user_meta(); + + $has_exclude_filter = has_filter( 'wpseo_sitemap_exclude_author' ); + + $query_arguments = []; + + if ( ! $has_exclude_filter ) { // We only need full users if legacy filter(s) hooked to exclusion logic. R. + $query_arguments['fields'] = 'ID'; + } + + $users = $this->get_users( $query_arguments ); + + if ( $has_exclude_filter ) { + $users = $this->exclude_users( $users ); + $users = wp_list_pluck( $users, 'ID' ); + } + + if ( empty( $users ) ) { + return []; + } + + $index = []; + $user_pages = array_chunk( $users, $max_entries ); + + foreach ( $user_pages as $page_counter => $users_page ) { + + $current_page = ( $page_counter === 0 ) ? '' : ( $page_counter + 1 ); + + $user_id = array_shift( $users_page ); // Time descending, first user on page is most recently updated. + $user = get_user_by( 'id', $user_id ); + $index[] = [ + 'loc' => WPSEO_Sitemaps_Router::get_base_url( 'author-sitemap' . $current_page . '.xml' ), + 'lastmod' => ( $user->_yoast_wpseo_profile_updated ) ? YoastSEO()->helpers->date->format_timestamp( $user->_yoast_wpseo_profile_updated ) : null, + ]; + } + + return $index; + } + + /** + * Retrieve users, taking account of all necessary exclusions. + * + * @param array $arguments Arguments to add. + * + * @return array + */ + protected function get_users( $arguments = [] ) { + + global $wpdb; + + $defaults = [ + 'capability' => [ 'edit_posts' ], + 'meta_key' => '_yoast_wpseo_profile_updated', + 'orderby' => 'meta_value_num', + 'order' => 'DESC', + 'meta_query' => [ + 'relation' => 'AND', + [ + 'key' => $wpdb->get_blog_prefix() . 'user_level', + 'value' => '0', + 'compare' => '!=', + ], + [ + 'relation' => 'OR', + [ + 'key' => 'wpseo_noindex_author', + 'value' => 'on', + 'compare' => '!=', + ], + [ + 'key' => 'wpseo_noindex_author', + 'compare' => 'NOT EXISTS', + ], + ], + ], + ]; + + if ( WPSEO_Options::get( 'noindex-author-noposts-wpseo', true ) ) { + unset( $defaults['capability'] ); // Otherwise it cancels out next argument. + $defaults['has_published_posts'] = YoastSEO()->helpers->author_archive->get_author_archive_post_types(); + } + + return get_users( array_merge( $defaults, $arguments ) ); + } + + /** + * Get set of sitemap link data. + * + * @param string $type Sitemap type. + * @param int $max_entries Entries per sitemap. + * @param int $current_page Current page of the sitemap. + * + * @return array + * + * @throws OutOfBoundsException When an invalid page is requested. + */ + public function get_sitemap_links( $type, $max_entries, $current_page ) { + + $links = []; + + if ( ! $this->handles_type( 'author' ) ) { + return $links; + } + + $user_criteria = [ + 'offset' => ( ( $current_page - 1 ) * $max_entries ), + 'number' => $max_entries, + ]; + + $users = $this->get_users( $user_criteria ); + + // Throw an exception when there are no users in the sitemap. + if ( count( $users ) === 0 ) { + throw new OutOfBoundsException( 'Invalid sitemap page requested' ); + } + + $users = $this->exclude_users( $users ); + if ( empty( $users ) ) { + $users = []; + } + + $time = time(); + + foreach ( $users as $user ) { + + $author_link = get_author_posts_url( $user->ID ); + + if ( empty( $author_link ) ) { + continue; + } + + $mod = $time; + + if ( isset( $user->_yoast_wpseo_profile_updated ) ) { + $mod = $user->_yoast_wpseo_profile_updated; + } + + $url = [ + 'loc' => $author_link, + 'mod' => date( DATE_W3C, $mod ), + + // Deprecated, kept for backwards data compat. R. + 'chf' => 'daily', + 'pri' => 1, + ]; + + /** This filter is documented at inc/sitemaps/class-post-type-sitemap-provider.php */ + $url = apply_filters( 'wpseo_sitemap_entry', $url, 'user', $user ); + + if ( ! empty( $url ) ) { + $links[] = $url; + } + } + + return $links; + } + + /** + * Update any users that don't have last profile update timestamp. + * + * @return int Count of users updated. + */ + protected function update_user_meta() { + + $user_criteria = [ + 'capability' => [ 'edit_posts' ], + 'meta_query' => [ + [ + 'key' => '_yoast_wpseo_profile_updated', + 'compare' => 'NOT EXISTS', + ], + ], + ]; + + $users = get_users( $user_criteria ); + + $time = time(); + + foreach ( $users as $user ) { + update_user_meta( $user->ID, '_yoast_wpseo_profile_updated', $time ); + } + + return count( $users ); + } + + /** + * Wrap legacy filter to deduplicate calls. + * + * @param array $users Array of user objects to filter. + * + * @return array + */ + protected function exclude_users( $users ) { + + /** + * Filter the authors, included in XML sitemap. + * + * @param array $users Array of user objects to filter. + */ + return apply_filters( 'wpseo_sitemap_exclude_author', $users ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php new file mode 100644 index 00000000..d018ad0b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-post-type-sitemap-provider.php @@ -0,0 +1,766 @@ +include_images = apply_filters( 'wpseo_xml_sitemap_include_images', true ); + } + + /** + * Get the Image Parser. + * + * @return WPSEO_Sitemap_Image_Parser + */ + protected function get_image_parser() { + if ( ! isset( self::$image_parser ) ) { + self::$image_parser = new WPSEO_Sitemap_Image_Parser(); + } + + return self::$image_parser; + } + + /** + * Gets the parsed home url. + * + * @return array The home url, as parsed by wp_parse_url. + */ + protected function get_parsed_home_url() { + if ( ! isset( self::$parsed_home_url ) ) { + self::$parsed_home_url = wp_parse_url( home_url() ); + } + + return self::$parsed_home_url; + } + + /** + * Check if provider supports given item type. + * + * @param string $type Type string to check for. + * + * @return bool + */ + public function handles_type( $type ) { + + return post_type_exists( $type ); + } + + /** + * Retrieves the sitemap links. + * + * @param int $max_entries Entries per sitemap. + * + * @return array + */ + public function get_index_links( $max_entries ) { + global $wpdb; + $post_types = WPSEO_Post_Type::get_accessible_post_types(); + $post_types = array_filter( $post_types, [ $this, 'is_valid_post_type' ] ); + $last_modified_times = WPSEO_Sitemaps::get_last_modified_gmt( $post_types, true ); + $index = []; + + foreach ( $post_types as $post_type ) { + + $total_count = $this->get_post_type_count( $post_type ); + + if ( $total_count === 0 ) { + continue; + } + + $max_pages = 1; + if ( $total_count > $max_entries ) { + $max_pages = (int) ceil( $total_count / $max_entries ); + } + + $all_dates = []; + + if ( $max_pages > 1 ) { + $all_dates = version_compare( $wpdb->db_version(), '8.0', '>=' ) ? $this->get_all_dates_using_with_clause( $post_type, $max_entries ) : $this->get_all_dates( $post_type, $max_entries ); + } + + for ( $page_counter = 0; $page_counter < $max_pages; $page_counter++ ) { + + $current_page = ( $page_counter === 0 ) ? '' : ( $page_counter + 1 ); + $date = false; + + if ( empty( $current_page ) || $current_page === $max_pages ) { + + if ( ! empty( $last_modified_times[ $post_type ] ) ) { + $date = $last_modified_times[ $post_type ]; + } + } + else { + $date = $all_dates[ $page_counter ]; + } + + $index[] = [ + 'loc' => WPSEO_Sitemaps_Router::get_base_url( $post_type . '-sitemap' . $current_page . '.xml' ), + 'lastmod' => $date, + ]; + } + } + + return $index; + } + + /** + * Get set of sitemap link data. + * + * @param string $type Sitemap type. + * @param int $max_entries Entries per sitemap. + * @param int $current_page Current page of the sitemap. + * + * @return array + * + * @throws OutOfBoundsException When an invalid page is requested. + */ + public function get_sitemap_links( $type, $max_entries, $current_page ) { + + $links = []; + $post_type = $type; + + if ( ! $this->is_valid_post_type( $post_type ) ) { + throw new OutOfBoundsException( 'Invalid sitemap page requested' ); + } + + $steps = min( 100, $max_entries ); + $offset = ( $current_page > 1 ) ? ( ( $current_page - 1 ) * $max_entries ) : 0; + $total = ( $offset + $max_entries ); + + $post_type_entries = $this->get_post_type_count( $post_type ); + + if ( $total > $post_type_entries ) { + $total = $post_type_entries; + } + + if ( $current_page === 1 ) { + $links = array_merge( $links, $this->get_first_links( $post_type ) ); + } + + // If total post type count is lower than the offset, an invalid page is requested. + if ( $post_type_entries < $offset ) { + throw new OutOfBoundsException( 'Invalid sitemap page requested' ); + } + + if ( $post_type_entries === 0 ) { + return $links; + } + + $posts_to_exclude = $this->get_excluded_posts( $type ); + + while ( $total > $offset ) { + + $posts = $this->get_posts( $post_type, $steps, $offset ); + + $offset += $steps; + + if ( empty( $posts ) ) { + continue; + } + + foreach ( $posts as $post ) { + + if ( in_array( $post->ID, $posts_to_exclude, true ) ) { + continue; + } + + if ( WPSEO_Meta::get_value( 'meta-robots-noindex', $post->ID ) === '1' ) { + continue; + } + + $url = $this->get_url( $post ); + + if ( ! isset( $url['loc'] ) ) { + continue; + } + + /** + * Filter URL entry before it gets added to the sitemap. + * + * @param array $url Array of URL parts. + * @param string $type URL type. + * @param object $post Data object for the URL. + */ + $url = apply_filters( 'wpseo_sitemap_entry', $url, 'post', $post ); + + if ( ! empty( $url ) ) { + $links[] = $url; + } + } + + unset( $post, $url ); + } + + return $links; + } + + /** + * Check for relevant post type before invalidation. + * + * @param int $post_id Post ID to possibly invalidate for. + * + * @return void + */ + public function save_post( $post_id ) { + + if ( $this->is_valid_post_type( get_post_type( $post_id ) ) ) { + WPSEO_Sitemaps_Cache::invalidate_post( $post_id ); + } + } + + /** + * Check if post type should be present in sitemaps. + * + * @param string $post_type Post type string to check for. + * + * @return bool + */ + public function is_valid_post_type( $post_type ) { + if ( ! WPSEO_Post_Type::is_post_type_accessible( $post_type ) || ! WPSEO_Post_Type::is_post_type_indexable( $post_type ) ) { + return false; + } + + /** + * Filter decision if post type is excluded from the XML sitemap. + * + * @param bool $exclude Default false. + * @param string $post_type Post type name. + */ + if ( apply_filters( 'wpseo_sitemap_exclude_post_type', false, $post_type ) ) { + return false; + } + + return true; + } + + /** + * Retrieves a list with the excluded post ids. + * + * @param string $post_type Post type. + * + * @return array Array with post ids to exclude. + */ + protected function get_excluded_posts( $post_type ) { + $excluded_posts_ids = []; + + $page_on_front_id = ( $post_type === 'page' ) ? (int) get_option( 'page_on_front' ) : 0; + if ( $page_on_front_id > 0 ) { + $excluded_posts_ids[] = $page_on_front_id; + } + + /** + * Filter: 'wpseo_exclude_from_sitemap_by_post_ids' - Allow extending and modifying the posts to exclude. + * + * @param array $posts_to_exclude The posts to exclude. + */ + $excluded_posts_ids = apply_filters( 'wpseo_exclude_from_sitemap_by_post_ids', $excluded_posts_ids ); + if ( ! is_array( $excluded_posts_ids ) ) { + $excluded_posts_ids = []; + } + + $excluded_posts_ids = array_map( 'intval', $excluded_posts_ids ); + + $page_for_posts_id = ( $post_type === 'page' ) ? (int) get_option( 'page_for_posts' ) : 0; + if ( $page_for_posts_id > 0 ) { + $excluded_posts_ids[] = $page_for_posts_id; + } + + return array_unique( $excluded_posts_ids ); + } + + /** + * Get count of posts for post type. + * + * @param string $post_type Post type to retrieve count for. + * + * @return int + */ + protected function get_post_type_count( $post_type ) { + + global $wpdb; + + /** + * Filter JOIN query part for type count of post type. + * + * @param string $join SQL part, defaults to empty string. + * @param string $post_type Post type name. + */ + $join_filter = apply_filters( 'wpseo_typecount_join', '', $post_type ); + + /** + * Filter WHERE query part for type count of post type. + * + * @param string $where SQL part, defaults to empty string. + * @param string $post_type Post type name. + */ + $where_filter = apply_filters( 'wpseo_typecount_where', '', $post_type ); + + $where = $this->get_sql_where_clause( $post_type ); + + $sql = " + SELECT COUNT({$wpdb->posts}.ID) + FROM {$wpdb->posts} + {$join_filter} + {$where} + {$where_filter} + "; + + return (int) $wpdb->get_var( $sql ); + } + + /** + * Produces set of links to prepend at start of first sitemap page. + * + * @param string $post_type Post type to produce links for. + * + * @return array + */ + protected function get_first_links( $post_type ) { + + $links = []; + $archive_url = false; + + if ( $post_type === 'page' ) { + + $page_on_front_id = (int) get_option( 'page_on_front' ); + if ( $page_on_front_id > 0 ) { + $front_page = $this->get_url( + get_post( $page_on_front_id ) + ); + } + + if ( empty( $front_page ) ) { + $front_page = [ + 'loc' => YoastSEO()->helpers->url->home(), + ]; + } + + // Deprecated, kept for backwards data compat. R. + $front_page['chf'] = 'daily'; + $front_page['pri'] = 1; + + $images = ( $front_page['images'] ?? [] ); + + /** + * Filter images to be included for the term in XML sitemap. + * + * @param array $images Array of image items. + * @return array $image_list Array of image items. + */ + $image_list = apply_filters( 'wpseo_sitemap_urlimages_front_page', $images ); + if ( is_array( $image_list ) ) { + $front_page['images'] = $image_list; + } + + $links[] = $front_page; + } + elseif ( $post_type !== 'page' ) { + /** + * Filter the URL Yoast SEO uses in the XML sitemap for this post type archive. + * + * @param string $archive_url The URL of this archive + * @param string $post_type The post type this archive is for. + */ + $archive_url = apply_filters( + 'wpseo_sitemap_post_type_archive_link', + $this->get_post_type_archive_link( $post_type ), + $post_type + ); + } + + if ( $archive_url ) { + + $links[] = [ + 'loc' => $archive_url, + 'mod' => WPSEO_Sitemaps::get_last_modified_gmt( $post_type ), + + // Deprecated, kept for backwards data compat. R. + 'chf' => 'daily', + 'pri' => 1, + ]; + } + + /** + * Filters the first post type links. + * + * @param array $links The first post type links. + * @param string $post_type The post type this archive is for. + */ + return apply_filters( 'wpseo_sitemap_post_type_first_links', $links, $post_type ); + } + + /** + * Get URL for a post type archive. + * + * @since 5.3 + * + * @param string $post_type Post type. + * + * @return string|bool URL or false if it should be excluded. + */ + protected function get_post_type_archive_link( $post_type ) { + + $pt_archive_page_id = -1; + + if ( $post_type === 'post' ) { + + if ( get_option( 'show_on_front' ) === 'posts' ) { + return YoastSEO()->helpers->url->home(); + } + + $pt_archive_page_id = (int) get_option( 'page_for_posts' ); + + // Post archive should be excluded if posts page isn't set. + if ( $pt_archive_page_id <= 0 ) { + return false; + } + } + + if ( ! $this->is_post_type_archive_indexable( $post_type, $pt_archive_page_id ) ) { + return false; + } + + return get_post_type_archive_link( $post_type ); + } + + /** + * Determines whether a post type archive is indexable. + * + * @since 11.5 + * + * @param string $post_type Post type. + * @param int $archive_page_id The page id. + * + * @return bool True when post type archive is indexable. + */ + protected function is_post_type_archive_indexable( $post_type, $archive_page_id = -1 ) { + + if ( WPSEO_Options::get( 'noindex-ptarchive-' . $post_type, false ) ) { + return false; + } + + /** + * Filter the page which is dedicated to this post type archive. + * + * @since 9.3 + * + * @param string $archive_page_id The post_id of the page. + * @param string $post_type The post type this archive is for. + */ + $archive_page_id = (int) apply_filters( 'wpseo_sitemap_page_for_post_type_archive', $archive_page_id, $post_type ); + + if ( $archive_page_id > 0 && WPSEO_Meta::get_value( 'meta-robots-noindex', $archive_page_id ) === '1' ) { + return false; + } + + return true; + } + + /** + * Retrieve set of posts with optimized query routine. + * + * @param string $post_type Post type to retrieve. + * @param int $count Count of posts to retrieve. + * @param int $offset Starting offset. + * + * @return object[] + */ + protected function get_posts( $post_type, $count, $offset ) { + + global $wpdb; + + static $filters = []; + + if ( ! isset( $filters[ $post_type ] ) ) { + // Make sure you're wpdb->preparing everything you throw into this!! + $filters[ $post_type ] = [ + /** + * Filter JOIN query part for the post type. + * + * @param string $join SQL part, defaults to false. + * @param string $post_type Post type name. + */ + 'join' => apply_filters( 'wpseo_posts_join', false, $post_type ), + + /** + * Filter WHERE query part for the post type. + * + * @param string $where SQL part, defaults to false. + * @param string $post_type Post type name. + */ + 'where' => apply_filters( 'wpseo_posts_where', false, $post_type ), + ]; + } + + $join_filter = $filters[ $post_type ]['join']; + $where_filter = $filters[ $post_type ]['where']; + $where = $this->get_sql_where_clause( $post_type ); + + /* + * Optimized query per this thread: + * {@link http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-performance-suggestion}. + * Also see {@link http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/}. + */ + $sql = " + SELECT l.ID, post_title, post_content, post_name, post_parent, post_author, post_status, post_modified_gmt, post_date, post_date_gmt + FROM ( + SELECT {$wpdb->posts}.ID + FROM {$wpdb->posts} + {$join_filter} + {$where} + {$where_filter} + ORDER BY {$wpdb->posts}.post_modified ASC LIMIT %d OFFSET %d + ) + o JOIN {$wpdb->posts} l ON l.ID = o.ID + "; + + $posts = $wpdb->get_results( $wpdb->prepare( $sql, $count, $offset ) ); + + $post_ids = []; + + foreach ( $posts as $post_index => $post ) { + $post->post_type = $post_type; + $sanitized_post = sanitize_post( $post, 'raw' ); + $posts[ $post_index ] = new WP_Post( $sanitized_post ); + + $post_ids[] = $sanitized_post->ID; + } + + update_meta_cache( 'post', $post_ids ); + + return $posts; + } + + /** + * Constructs an SQL where clause for a given post type. + * + * @param string $post_type Post type slug. + * + * @return string + */ + protected function get_sql_where_clause( $post_type ) { + + global $wpdb; + + $join = ''; + $post_statuses = array_map( 'esc_sql', WPSEO_Sitemaps::get_post_statuses( $post_type ) ); + $status_where = "{$wpdb->posts}.post_status IN ('" . implode( "','", $post_statuses ) . "')"; + + // Based on WP_Query->get_posts(). R. + if ( $post_type === 'attachment' ) { + $join = " LEFT JOIN {$wpdb->posts} AS p2 ON ({$wpdb->posts}.post_parent = p2.ID) "; + $parent_statuses = array_diff( $post_statuses, [ 'inherit' ] ); + $status_where = "p2.post_status IN ('" . implode( "','", $parent_statuses ) . "') AND p2.post_password = ''"; + } + + $where_clause = " + {$join} + WHERE {$status_where} + AND {$wpdb->posts}.post_type = %s + AND {$wpdb->posts}.post_password = '' + AND {$wpdb->posts}.post_date != '0000-00-00 00:00:00' + "; + + return $wpdb->prepare( $where_clause, $post_type ); + } + + /** + * Produce array of URL parts for given post object. + * + * @param object $post Post object to get URL parts for. + * + * @return array|bool + */ + protected function get_url( $post ) { + + $url = []; + + /** + * Filter the URL Yoast SEO uses in the XML sitemap. + * + * Note that only absolute local URLs are allowed as the check after this removes external URLs. + * + * @param string $url URL to use in the XML sitemap + * @param object $post Post object for the URL. + */ + $url['loc'] = apply_filters( 'wpseo_xml_sitemap_post_url', get_permalink( $post ), $post ); + $link_type = YoastSEO()->helpers->url->get_link_type( + wp_parse_url( $url['loc'] ), + $this->get_parsed_home_url() + ); + + /* + * Do not include external URLs. + * + * {@link https://wordpress.org/plugins/page-links-to/} can rewrite permalinks to external URLs. + */ + if ( $link_type === SEO_Links::TYPE_EXTERNAL ) { + return false; + } + + $modified = max( $post->post_modified_gmt, $post->post_date_gmt ); + + if ( $modified !== '0000-00-00 00:00:00' ) { + $url['mod'] = $modified; + } + + $url['chf'] = 'daily'; // Deprecated, kept for backwards data compat. R. + + $canonical = WPSEO_Meta::get_value( 'canonical', $post->ID ); + + if ( $canonical !== '' && $canonical !== $url['loc'] ) { + /* + * Let's assume that if a canonical is set for this page and it's different from + * the URL of this post, that page is either already in the XML sitemap OR is on + * an external site, either way, we shouldn't include it here. + */ + return false; + } + unset( $canonical ); + + $url['pri'] = 1; // Deprecated, kept for backwards data compat. R. + + if ( $this->include_images ) { + $url['images'] = $this->get_image_parser()->get_images( $post ); + } + + return $url; + } + + /** + * Get all dates for a post type by using the WITH clause for performance. + * + * @param string $post_type Post type to retrieve dates for. + * @param int $max_entries Maximum number of entries to retrieve. + * + * @return array Array of dates. + */ + private function get_all_dates_using_with_clause( $post_type, $max_entries ) { + global $wpdb; + + $post_statuses = array_map( 'esc_sql', WPSEO_Sitemaps::get_post_statuses( $post_type ) ); + + $replacements = array_merge( + [ + 'ordering', + 'post_modified_gmt', + $wpdb->posts, + 'type_status_date', + 'post_status', + ], + $post_statuses, + [ + 'post_type', + $post_type, + 'post_modified_gmt', + 'post_modified_gmt', + 'ordering', + $max_entries, + ] + ); + + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to use a direct query here. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + return $wpdb->get_col( + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + $wpdb->prepare( + ' + WITH %i AS (SELECT ROW_NUMBER() OVER (ORDER BY %i) AS n, post_modified_gmt + FROM %i USE INDEX ( %i ) + WHERE %i IN (' . implode( ', ', array_fill( 0, count( $post_statuses ), '%s' ) ) . ') + AND %i = %s + ORDER BY %i) + SELECT %i + FROM %i + WHERE MOD(n, %d) = 0; + ', + $replacements + ) + ); + } + + /** + * Get all dates for a post type. + * + * @param string $post_type Post type to retrieve dates for. + * @param int $max_entries Maximum number of entries to retrieve. + * + * @return array Array of dates. + */ + private function get_all_dates( $post_type, $max_entries ) { + global $wpdb; + + $post_statuses = array_map( 'esc_sql', WPSEO_Sitemaps::get_post_statuses( $post_type ) ); + $replacements = array_merge( + [ + 'post_modified_gmt', + $wpdb->posts, + 'type_status_date', + 'post_status', + ], + $post_statuses, + [ + 'post_type', + $post_type, + $max_entries, + 'post_modified_gmt', + ] + ); + + return $wpdb->get_col( + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + $wpdb->prepare( + ' + SELECT %i + FROM ( SELECT @rownum:=0 ) init + JOIN %i USE INDEX( %i ) + WHERE %i IN (' . implode( ', ', array_fill( 0, count( $post_statuses ), '%s' ) ) . ') + AND %i = %s + AND ( @rownum:=@rownum+1 ) %% %d = 0 + ORDER BY %i ASC + ', + $replacements + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php new file mode 100644 index 00000000..495afa12 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-cache-data.php @@ -0,0 +1,200 @@ +sitemap = $sitemap; + + /* + * Empty sitemap is not usable. + */ + if ( ! empty( $sitemap ) ) { + $this->set_status( self::OK ); + } + else { + $this->set_status( self::ERROR ); + } + } + + /** + * Set the status of the sitemap, is it usable. + * + * @param bool|string $usable Is the sitemap usable or not. + * + * @return void + */ + public function set_status( $usable ) { + + if ( $usable === self::OK ) { + $this->status = self::OK; + + return; + } + + if ( $usable === self::ERROR ) { + $this->status = self::ERROR; + $this->sitemap = ''; + + return; + } + + $this->status = self::UNKNOWN; + } + + /** + * Is the sitemap usable. + * + * @return bool True if usable, False if bad or unknown. + */ + public function is_usable() { + + return $this->status === self::OK; + } + + /** + * Get the XML content of the sitemap. + * + * @return string The content of the sitemap. + */ + public function get_sitemap() { + + return $this->sitemap; + } + + /** + * Get the status of the sitemap. + * + * @return string Status of the sitemap, 'ok'/'error'/'unknown'. + */ + public function get_status() { + + return $this->status; + } + + /** + * String representation of object. + * + * {@internal This magic method is only "magic" as of PHP 7.4 in which the magic method was introduced.} + * + * @link https://www.php.net/language.oop5.magic#object.serialize + * @link https://wiki.php.net/rfc/custom_object_serialization + * + * @since 17.8.0 + * + * @return array The data to be serialized. + */ + public function __serialize() { // phpcs:ignore PHPCompatibility.FunctionNameRestrictions.NewMagicMethods.__serializeFound + + $data = [ + 'status' => $this->status, + 'xml' => $this->sitemap, + ]; + + return $data; + } + + /** + * Constructs the object. + * + * {@internal This magic method is only "magic" as of PHP 7.4 in which the magic method was introduced.} + * + * @link https://www.php.net/language.oop5.magic#object.serialize + * @link https://wiki.php.net/rfc/custom_object_serialization + * + * @since 17.8.0 + * + * @param array $data The unserialized data to use to (re)construct the object. + * + * @return void + */ + public function __unserialize( $data ) { // phpcs:ignore PHPCompatibility.FunctionNameRestrictions.NewMagicMethods.__unserializeFound + + $this->set_sitemap( $data['xml'] ); + $this->set_status( $data['status'] ); + } + + /** + * String representation of object. + * + * {@internal The magic methods take precedence over the Serializable interface. + * This means that in practice, this method will now only be called on PHP < 7.4. + * For PHP 7.4 and higher, the magic methods will be used instead.} + * + * {@internal The Serializable interface is being phased out, in favour of the magic methods. + * This method should be deprecated and removed and the class should no longer + * implement the `Serializable` interface. + * This change, however, can't be made until the minimum PHP version goes up to PHP 7.4 or higher.} + * + * @link http://php.net/manual/en/serializable.serialize.php + * @link https://wiki.php.net/rfc/phase_out_serializable + * + * @since 5.1.0 + * + * @return string The string representation of the object or null in C-format. + */ + public function serialize() { + + return serialize( $this->__serialize() ); + } + + /** + * Constructs the object. + * + * {@internal The magic methods take precedence over the Serializable interface. + * This means that in practice, this method will now only be called on PHP < 7.4. + * For PHP 7.4 and higher, the magic methods will be used instead.} + * + * {@internal The Serializable interface is being phased out, in favour of the magic methods. + * This method should be deprecated and removed and the class should no longer + * implement the `Serializable` interface. + * This change, however, can't be made until the minimum PHP version goes up to PHP 7.4 or higher.} + * + * @link http://php.net/manual/en/serializable.unserialize.php + * @link https://wiki.php.net/rfc/phase_out_serializable + * + * @since 5.1.0 + * + * @param string $data The string representation of the object in C or O-format. + * + * @return void + */ + public function unserialize( $data ) { + + $data = unserialize( $data ); + $this->__unserialize( $data ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php new file mode 100644 index 00000000..58d8ec5a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemap-image-parser.php @@ -0,0 +1,509 @@ +home_url = home_url(); + $parsed_home = wp_parse_url( $this->home_url ); + + if ( ! empty( $parsed_home['host'] ) ) { + $this->host = str_replace( 'www.', '', $parsed_home['host'] ); + } + + if ( ! empty( $parsed_home['scheme'] ) ) { + $this->scheme = $parsed_home['scheme']; + } + + $this->charset = esc_attr( get_bloginfo( 'charset' ) ); + } + + /** + * Get set of image data sets for the given post. + * + * @param object $post Post object to get images for. + * + * @return array + */ + public function get_images( $post ) { + + $images = []; + + if ( ! is_object( $post ) ) { + return $images; + } + + $thumbnail_id = get_post_thumbnail_id( $post->ID ); + + if ( $thumbnail_id ) { + + $src = $this->get_absolute_url( $this->image_url( $thumbnail_id ) ); + $images[] = $this->get_image_item( $post, $src ); + } + + /** + * Filter: 'wpseo_sitemap_content_before_parse_html_images' - Filters the post content + * before it is parsed for images. + * + * @param string $content The raw/unprocessed post content. + */ + $content = apply_filters( 'wpseo_sitemap_content_before_parse_html_images', $post->post_content ); + + $unfiltered_images = $this->parse_html_images( $content ); + + foreach ( $unfiltered_images as $image ) { + $images[] = $this->get_image_item( $post, $image['src'] ); + } + + foreach ( $this->parse_galleries( $content, $post->ID ) as $attachment ) { + $src = $this->get_absolute_url( $this->image_url( $attachment->ID ) ); + $images[] = $this->get_image_item( $post, $src ); + } + + if ( $post->post_type === 'attachment' && wp_attachment_is_image( $post ) ) { + $src = $this->get_absolute_url( $this->image_url( $post->ID ) ); + $images[] = $this->get_image_item( $post, $src ); + } + + foreach ( $images as $key => $image ) { + + if ( empty( $image['src'] ) ) { + unset( $images[ $key ] ); + } + } + + /** + * Filter images to be included for the post in XML sitemap. + * + * @param array $images Array of image items. + * @param int $post_id ID of the post. + */ + $image_list = apply_filters( 'wpseo_sitemap_urlimages', $images, $post->ID ); + if ( isset( $image_list ) && is_array( $image_list ) ) { + $images = $image_list; + } + + return $images; + } + + /** + * Get the images in the term description. + * + * @param object $term Term to get images from description for. + * + * @return array + */ + public function get_term_images( $term ) { + + $images = $this->parse_html_images( $term->description ); + + foreach ( $this->parse_galleries( $term->description ) as $attachment ) { + + $images[] = [ + 'src' => $this->get_absolute_url( $this->image_url( $attachment->ID ) ), + ]; + } + + /** + * Filter images to be included for the term in XML sitemap. + * + * @param array $image_list Array of image items. + * @param int $term_id ID of the post. + */ + $image_list = apply_filters( 'wpseo_sitemap_urlimages_term', $images, $term->term_id ); + if ( isset( $image_list ) && is_array( $image_list ) ) { + $images = $image_list; + } + + return $images; + } + + /** + * Parse `` tags in content. + * + * @param string $content Content string to parse. + * + * @return array + */ + private function parse_html_images( $content ) { + + $images = []; + + if ( ! class_exists( 'DOMDocument' ) ) { + return $images; + } + + if ( empty( $content ) ) { + return $images; + } + + // Prevent DOMDocument from bubbling warnings about invalid HTML. + libxml_use_internal_errors( true ); + + $post_dom = new DOMDocument(); + $post_dom->loadHTML( 'charset . '">' . $content ); + + // Clear the errors, so they don't get kept in memory. + libxml_clear_errors(); + + /** + * Image attribute. + * + * @var DOMElement $img + */ + foreach ( $post_dom->getElementsByTagName( 'img' ) as $img ) { + + $src = $img->getAttribute( 'src' ); + + if ( empty( $src ) ) { + continue; + } + + $class = $img->getAttribute( 'class' ); + + if ( // This detects WP-inserted images, which we need to upsize. R. + ! empty( $class ) + && ( strpos( $class, 'size-full' ) === false ) + && preg_match( '|wp-image-(?P\d+)|', $class, $matches ) + && get_post_status( $matches['id'] ) + ) { + $query_params = wp_parse_url( $src, PHP_URL_QUERY ); + $src = $this->image_url( $matches['id'] ); + + if ( $query_params ) { + $src .= '?' . $query_params; + } + } + + $src = $this->get_absolute_url( $src ); + + if ( strpos( $src, $this->host ) === false ) { + continue; + } + + if ( $src !== esc_url( $src, null, 'attribute' ) ) { + continue; + } + + $images[] = [ + 'src' => $src, + ]; + } + + return $images; + } + + /** + * Parse gallery shortcodes in a given content. + * + * @param string $content Content string. + * @param int $post_id Optional. ID of post being parsed. + * + * @return array Set of attachment objects. + */ + protected function parse_galleries( $content, $post_id = 0 ) { + + $attachments = []; + $galleries = $this->get_content_galleries( $content ); + + foreach ( $galleries as $gallery ) { + + $id = $post_id; + + if ( ! empty( $gallery['id'] ) ) { + $id = intval( $gallery['id'] ); + } + + // Forked from core gallery_shortcode() to have exact same logic. R. + if ( ! empty( $gallery['ids'] ) ) { + $gallery['include'] = $gallery['ids']; + } + + $gallery_attachments = $this->get_gallery_attachments( $id, $gallery ); + + $attachments = array_merge( $attachments, $gallery_attachments ); + } + + return array_unique( $attachments, SORT_REGULAR ); + } + + /** + * Retrieves galleries from the passed content. + * + * Forked from core to skip executing shortcodes for performance. + * + * @param string $content Content to parse for shortcodes. + * + * @return array A list of arrays, each containing gallery data. + */ + protected function get_content_galleries( $content ) { + + $galleries = []; + + if ( ! preg_match_all( '/' . get_shortcode_regex( [ 'gallery' ] ) . '/s', $content, $matches, PREG_SET_ORDER ) ) { + return $galleries; + } + + foreach ( $matches as $shortcode ) { + + $attributes = shortcode_parse_atts( $shortcode[3] ); + + if ( $attributes === '' ) { // Valid shortcode without any attributes. R. + $attributes = []; + } + + $galleries[] = $attributes; + } + + return $galleries; + } + + /** + * Get image item array with filters applied. + * + * @param WP_Post $post Post object for the context. + * @param string $src Image URL. + * + * @return array + */ + protected function get_image_item( $post, $src ) { + + $image = []; + + /** + * Filter image URL to be included in XML sitemap for the post. + * + * @param string $src Image URL. + * @param object $post Post object. + */ + $image['src'] = apply_filters( 'wpseo_xml_sitemap_img_src', $src, $post ); + + /** + * Filter image data to be included in XML sitemap for the post. + * + * @param array $image { + * Array of image data. + * + * @type string $src Image URL. + * } + * + * @param object $post Post object. + */ + return apply_filters( 'wpseo_xml_sitemap_img', $image, $post ); + } + + /** + * Get attached image URL with filters applied. Adapted from core for speed. + * + * @param int $post_id ID of the post. + * + * @return string + */ + private function image_url( $post_id ) { + + static $uploads; + + if ( empty( $uploads ) ) { + $uploads = wp_upload_dir(); + } + + if ( $uploads['error'] !== false ) { + return ''; + } + + $file = get_post_meta( $post_id, '_wp_attached_file', true ); + + if ( empty( $file ) ) { + return ''; + } + + // Check that the upload base exists in the file location. + if ( strpos( $file, $uploads['basedir'] ) === 0 ) { + $src = str_replace( $uploads['basedir'], $uploads['baseurl'], $file ); + } + elseif ( strpos( $file, 'wp-content/uploads' ) !== false ) { + $src = $uploads['baseurl'] . substr( $file, ( strpos( $file, 'wp-content/uploads' ) + 18 ) ); + } + else { + // It's a newly uploaded file, therefore $file is relative to the baseurl. + $src = $uploads['baseurl'] . '/' . $file; + } + + return apply_filters( 'wp_get_attachment_url', $src, $post_id ); + } + + /** + * Make absolute URL for domain or protocol-relative one. + * + * @param string $src URL to process. + * + * @return string + */ + protected function get_absolute_url( $src ) { + + if ( empty( $src ) || ! is_string( $src ) ) { + return $src; + } + + if ( YoastSEO()->helpers->url->is_relative( $src ) === true ) { + + if ( $src[0] !== '/' ) { + return $src; + } + + // The URL is relative, we'll have to make it absolute. + return $this->home_url . $src; + } + + if ( strpos( $src, 'http' ) !== 0 ) { + // Protocol relative URL, we add the scheme as the standard requires a protocol. + return $this->scheme . ':' . $src; + } + + return $src; + } + + /** + * Returns the attachments for a gallery. + * + * @param int $id The post ID. + * @param array $gallery The gallery config. + * + * @return array The selected attachments. + */ + protected function get_gallery_attachments( $id, $gallery ) { + + // When there are attachments to include. + if ( ! empty( $gallery['include'] ) ) { + return $this->get_gallery_attachments_for_included( $gallery['include'] ); + } + + // When $id is empty, just return empty array. + if ( empty( $id ) ) { + return []; + } + + return $this->get_gallery_attachments_for_parent( $id, $gallery ); + } + + /** + * Returns the attachments for the given ID. + * + * @param int $id The post ID. + * @param array $gallery The gallery config. + * + * @return array The selected attachments. + */ + protected function get_gallery_attachments_for_parent( $id, $gallery ) { + $query = [ + 'posts_per_page' => -1, + 'post_parent' => $id, + ]; + + // When there are posts that should be excluded from result set. + if ( ! empty( $gallery['exclude'] ) ) { + $query['post__not_in'] = wp_parse_id_list( $gallery['exclude'] ); + } + + return $this->get_attachments( $query ); + } + + /** + * Returns an array with attachments for the post IDs that will be included. + * + * @param array $included_ids Array with IDs to include. + * + * @return array The found attachments. + */ + protected function get_gallery_attachments_for_included( $included_ids ) { + $ids_to_include = wp_parse_id_list( $included_ids ); + $attachments = $this->get_attachments( + [ + 'posts_per_page' => count( $ids_to_include ), + 'post__in' => $ids_to_include, + ] + ); + + $gallery_attachments = []; + foreach ( $attachments as $val ) { + $gallery_attachments[ $val->ID ] = $val; + } + + return $gallery_attachments; + } + + /** + * Returns the attachments. + * + * @param array $args Array with query args. + * + * @return array The found attachments. + */ + protected function get_attachments( $args ) { + $default_args = [ + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + + // Defaults taken from function get_posts. + 'orderby' => 'date', + 'order' => 'DESC', + 'meta_key' => '', + 'meta_value' => '', + 'suppress_filters' => true, + 'ignore_sticky_posts' => true, + 'no_found_rows' => true, + ]; + + $args = wp_parse_args( $args, $default_args ); + + $get_attachments = new WP_Query(); + return $get_attachments->query( $args ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php new file mode 100644 index 00000000..10b8fcd6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-admin.php @@ -0,0 +1,125 @@ +status_transition_bulk( $new_status, $old_status, $post ); + + return; + } + + $post_type = get_post_type( $post ); + + wp_cache_delete( 'lastpostmodified:gmt:' . $post_type, 'timeinfo' ); // #17455. + } + + /** + * Notify Google of the updated sitemap. + * + * @deprecated 22.0 + * @codeCoverageIgnore + * + * @return void + */ + public function ping_search_engines() { + _deprecated_function( __METHOD__, 'Yoast SEO 22.0' ); + } + + /** + * While bulk importing, just save unique post_types. + * + * When importing is done, if we have a post_type that is saved in the sitemap + * try to ping the search engines. + * + * @param string $new_status New post status. + * @param string $old_status Old post status. + * @param WP_Post $post Post object. + * + * @return void + */ + private function status_transition_bulk( $new_status, $old_status, $post ) { + $this->importing_post_types[] = get_post_type( $post ); + $this->importing_post_types = array_unique( $this->importing_post_types ); + } + + /** + * After import finished, walk through imported post_types and update info. + * + * @return void + */ + public function status_transition_bulk_finished() { + if ( ! defined( 'WP_IMPORTING' ) ) { + return; + } + + if ( empty( $this->importing_post_types ) ) { + return; + } + + $ping_search_engines = false; + + foreach ( $this->importing_post_types as $post_type ) { + wp_cache_delete( 'lastpostmodified:gmt:' . $post_type, 'timeinfo' ); // #17455. + + // Just have the cache deleted for nav_menu_item. + if ( $post_type === 'nav_menu_item' ) { + continue; + } + + if ( WPSEO_Options::get( 'noindex-' . $post_type, false ) === false ) { + $ping_search_engines = true; + } + } + + // Nothing to do. + if ( $ping_search_engines === false ) { + return; + } + + if ( WP_CACHE ) { + do_action( 'wpseo_hit_sitemap_index' ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php new file mode 100644 index 00000000..7d478743 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache-validator.php @@ -0,0 +1,326 @@ + $max_length ) { + + if ( $max_length < 15 ) { + /* + * If this happens the most likely cause is a page number that is too high. + * + * So this would not happen unintentionally. + * Either by trying to cause a high server load, finding backdoors or misconfiguration. + */ + throw new OutOfRangeException( + __( + 'Trying to build the sitemap cache key, but the postfix and prefix combination leaves too little room to do this. You are probably requesting a page that is way out of the expected range.', + 'wordpress-seo' + ) + ); + } + + $half = ( $max_length / 2 ); + + $first_part = substr( $type, 0, ( ceil( $half ) - 1 ) ); + $last_part = substr( $type, ( 1 - floor( $half ) ) ); + + $type = $first_part . '..' . $last_part; + } + + return $type; + } + + /** + * Invalidate sitemap cache. + * + * @since 3.2 + * + * @param string|null $type The type to get the key for. Null for all caches. + * + * @return void + */ + public static function invalidate_storage( $type = null ) { + + // Global validator gets cleared when no type is provided. + $old_validator = null; + + // Get the current type validator. + if ( ! is_null( $type ) ) { + $old_validator = self::get_validator( $type ); + } + + // Refresh validator. + self::create_validator( $type ); + + if ( ! wp_using_ext_object_cache() ) { + // Clean up current cache from the database. + self::cleanup_database( $type, $old_validator ); + } + + // External object cache pushes old and unretrieved items out by itself so we don't have to do anything for that. + } + + /** + * Cleanup invalidated database cache. + * + * @since 3.2 + * + * @param string|null $type The type of sitemap to clear cache for. + * @param string|null $validator The validator to clear cache of. + * + * @return void + */ + public static function cleanup_database( $type = null, $validator = null ) { + + global $wpdb; + + if ( is_null( $type ) ) { + // Clear all cache if no type is provided. + $like = sprintf( '%s%%', self::STORAGE_KEY_PREFIX ); + } + else { + // Clear type cache for all type keys. + $like = sprintf( '%1$s%2$s_%%', self::STORAGE_KEY_PREFIX, $type ); + } + + /* + * Add slashes to the LIKE "_" single character wildcard. + * + * We can't use `esc_like` here because we need the % in the query. + */ + $where = []; + $where[] = sprintf( "option_name LIKE '%s'", addcslashes( '_transient_' . $like, '_' ) ); + $where[] = sprintf( "option_name LIKE '%s'", addcslashes( '_transient_timeout_' . $like, '_' ) ); + + // Delete transients. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to use a direct query here. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + $wpdb->query( + $wpdb->prepare( + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + 'DELETE FROM %i WHERE ' . implode( ' OR ', array_fill( 0, count( $where ), '%s' ) ), + array_merge( [ $wpdb->options ], $where ) + ) + ); + + wp_cache_delete( 'alloptions', 'options' ); + } + + /** + * Get the current cache validator. + * + * Without the type the global validator is returned. + * This can invalidate -all- keys in cache at once. + * + * With the type parameter the validator for that specific type can be invalidated. + * + * @since 3.2 + * + * @param string $type Provide a type for a specific type validator, empty for global validator. + * + * @return string|null The validator for the supplied type. + */ + public static function get_validator( $type = '' ) { + + $key = self::get_validator_key( $type ); + + $current = get_option( $key, null ); + if ( ! is_null( $current ) ) { + return $current; + } + + if ( self::create_validator( $type ) ) { + return self::get_validator( $type ); + } + + return null; + } + + /** + * Get the cache validator option key for the specified type. + * + * @since 3.2 + * + * @param string $type Provide a type for a specific type validator, empty for global validator. + * + * @return string Validator to be used to generate the cache key. + */ + public static function get_validator_key( $type = '' ) { + + if ( empty( $type ) ) { + return self::VALIDATION_GLOBAL_KEY; + } + + return sprintf( self::VALIDATION_TYPE_KEY_FORMAT, $type ); + } + + /** + * Refresh the cache validator value. + * + * @since 3.2 + * + * @param string $type Provide a type for a specific type validator, empty for global validator. + * + * @return bool True if validator key has been saved as option. + */ + public static function create_validator( $type = '' ) { + + $key = self::get_validator_key( $type ); + + // Generate new validator. + $microtime = microtime(); + + // Remove space. + list( $milliseconds, $seconds ) = explode( ' ', $microtime ); + + // Transients are purged every 24h. + $seconds = ( $seconds % DAY_IN_SECONDS ); + $milliseconds = intval( substr( $milliseconds, 2, 3 ), 10 ); + + // Combine seconds and milliseconds and convert to integer. + $validator = intval( $seconds . '' . $milliseconds, 10 ); + + // Apply base 61 encoding. + $compressed = self::convert_base10_to_base61( $validator ); + + return update_option( $key, $compressed, false ); + } + + /** + * Encode to base61 format. + * + * This is base64 (numeric + alpha + alpha upper case) without the 0. + * + * @since 3.2 + * + * @param int $base10 The number that has to be converted to base 61. + * + * @return string Base 61 converted string. + * + * @throws InvalidArgumentException When the input is not an integer. + */ + public static function convert_base10_to_base61( $base10 ) { + + if ( ! is_int( $base10 ) ) { + throw new InvalidArgumentException( __( 'Expected an integer as input.', 'wordpress-seo' ) ); + } + + // Characters that will be used in the conversion. + $characters = '123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $length = strlen( $characters ); + + $remainder = $base10; + $output = ''; + + do { + // Building from right to left in the result. + $index = ( $remainder % $length ); + + // Prepend the character to the output. + $output = $characters[ $index ] . $output; + + // Determine the remainder after removing the applied number. + $remainder = floor( $remainder / $length ); + + // Keep doing it until we have no remainder left. + } while ( $remainder ); + + return $output; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php new file mode 100644 index 00000000..a74e569c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-cache.php @@ -0,0 +1,359 @@ +is_enabled(); + } + + /** + * If cache is enabled. + * + * @since 3.2 + * + * @return bool + */ + public function is_enabled() { + + /** + * Filter if XML sitemap transient cache is enabled. + * + * @param bool $unsigned Enable cache or not, defaults to true. + */ + return apply_filters( 'wpseo_enable_xml_sitemap_transient_caching', false ); + } + + /** + * Retrieve the sitemap page from cache. + * + * @since 3.2 + * + * @param string $type Sitemap type. + * @param int $page Page number to retrieve. + * + * @return string|bool + */ + public function get_sitemap( $type, $page ) { + + $transient_key = WPSEO_Sitemaps_Cache_Validator::get_storage_key( $type, $page ); + if ( $transient_key === false ) { + return false; + } + + return get_transient( $transient_key ); + } + + /** + * Get the sitemap that is cached. + * + * @param string $type Sitemap type. + * @param int $page Page number to retrieve. + * + * @return WPSEO_Sitemap_Cache_Data|null Null on no cache found otherwise object containing sitemap and meta data. + */ + public function get_sitemap_data( $type, $page ) { + + $sitemap = $this->get_sitemap( $type, $page ); + + if ( empty( $sitemap ) ) { + return null; + } + + /* + * Unserialize Cache Data object as is_serialized() doesn't recognize classes in C format. + * This work-around should no longer be needed once the minimum PHP version has gone up to PHP 7.4, + * as the `WPSEO_Sitemap_Cache_Data` class uses O format serialization in PHP 7.4 and higher. + * + * @link https://wiki.php.net/rfc/custom_object_serialization + */ + if ( is_string( $sitemap ) && strpos( $sitemap, 'C:24:"WPSEO_Sitemap_Cache_Data"' ) === 0 ) { + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize -- Can't be avoided due to how WP stores options. + $sitemap = unserialize( $sitemap ); + } + + // What we expect it to be if it is set. + if ( $sitemap instanceof WPSEO_Sitemap_Cache_Data_Interface ) { + return $sitemap; + } + + return null; + } + + /** + * Store the sitemap page from cache. + * + * @since 3.2 + * + * @param string $type Sitemap type. + * @param int $page Page number to store. + * @param string $sitemap Sitemap body to store. + * @param bool $usable Is this a valid sitemap or a cache of an invalid sitemap. + * + * @return bool + */ + public function store_sitemap( $type, $page, $sitemap, $usable = true ) { + + $transient_key = WPSEO_Sitemaps_Cache_Validator::get_storage_key( $type, $page ); + + if ( $transient_key === false ) { + return false; + } + + $status = ( $usable ) ? WPSEO_Sitemap_Cache_Data::OK : WPSEO_Sitemap_Cache_Data::ERROR; + + $sitemap_data = new WPSEO_Sitemap_Cache_Data(); + $sitemap_data->set_sitemap( $sitemap ); + $sitemap_data->set_status( $status ); + + return set_transient( $transient_key, $sitemap_data, DAY_IN_SECONDS ); + } + + /** + * Delete cache transients for index and specific type. + * + * Always deletes the main index sitemaps cache, as that's always invalidated by any other change. + * + * @since 1.5.4 + * @since 3.2 Changed from function wpseo_invalidate_sitemap_cache() to method in this class. + * + * @param string $type Sitemap type to invalidate. + * + * @return void + */ + public static function invalidate( $type ) { + + self::clear( [ $type ] ); + } + + /** + * Helper to invalidate in hooks where type is passed as second argument. + * + * @since 3.2 + * + * @param int $unused Unused term ID value. + * @param string $type Taxonomy to invalidate. + * + * @return void + */ + public static function invalidate_helper( $unused, $type ) { + + if ( + WPSEO_Options::get( 'noindex-' . $type ) === false + || WPSEO_Options::get( 'noindex-tax-' . $type ) === false + ) { + self::invalidate( $type ); + } + } + + /** + * Invalidate sitemap cache for authors. + * + * @param int $user_id User ID. + * + * @return bool True if the sitemap was properly invalidated. False otherwise. + */ + public static function invalidate_author( $user_id ) { + + $user = get_user_by( 'id', $user_id ); + + if ( $user === false ) { + return false; + } + + if ( current_action() === 'user_register' ) { + update_user_meta( $user_id, '_yoast_wpseo_profile_updated', time() ); + } + + if ( empty( $user->roles ) || in_array( 'subscriber', $user->roles, true ) ) { + return false; + } + + self::invalidate( 'author' ); + + return true; + } + + /** + * Invalidate sitemap cache for the post type of a post. + * + * Don't invalidate for revisions. + * + * @since 1.5.4 + * @since 3.2 Changed from function wpseo_invalidate_sitemap_cache_on_save_post() to method in this class. + * + * @param int $post_id Post ID to invalidate type for. + * + * @return void + */ + public static function invalidate_post( $post_id ) { + + if ( wp_is_post_revision( $post_id ) ) { + return; + } + + self::invalidate( get_post_type( $post_id ) ); + } + + /** + * Delete cache transients for given sitemaps types or all by default. + * + * @since 1.8.0 + * @since 3.2 Moved from WPSEO_Utils to this class. + * + * @param array $types Set of sitemap types to delete cache transients for. + * + * @return void + */ + public static function clear( $types = [] ) { + + if ( ! self::$is_enabled ) { + return; + } + + // No types provided, clear all. + if ( empty( $types ) ) { + self::$clear_all = true; + + return; + } + + // Always invalidate the index sitemap as well. + if ( ! in_array( WPSEO_Sitemaps::SITEMAP_INDEX_TYPE, $types, true ) ) { + array_unshift( $types, WPSEO_Sitemaps::SITEMAP_INDEX_TYPE ); + } + + foreach ( $types as $type ) { + if ( ! in_array( $type, self::$clear_types, true ) ) { + self::$clear_types[] = $type; + } + } + } + + /** + * Invalidate storage for cache types queued to clear. + * + * @return void + */ + public static function clear_queued() { + + if ( self::$clear_all ) { + + WPSEO_Sitemaps_Cache_Validator::invalidate_storage(); + self::$clear_all = false; + self::$clear_types = []; + + return; + } + + foreach ( self::$clear_types as $type ) { + WPSEO_Sitemaps_Cache_Validator::invalidate_storage( $type ); + } + + self::$clear_types = []; + } + + /** + * Adds a hook that when given option is updated, the cache is cleared. + * + * @since 3.2 + * + * @param string $option Option name. + * @param string $type Sitemap type. + * + * @return void + */ + public static function register_clear_on_option_update( $option, $type = '' ) { + + self::$cache_clear[ $option ] = $type; + } + + /** + * Clears the transient cache when a given option is updated, if that option has been registered before. + * + * @since 3.2 + * + * @param string $option The option name that's being updated. + * + * @return void + */ + public static function clear_on_option_update( $option ) { + + if ( array_key_exists( $option, self::$cache_clear ) ) { + + if ( empty( self::$cache_clear[ $option ] ) ) { + // Clear all caches. + self::clear(); + } + else { + // Clear specific provided type(s). + $types = (array) self::$cache_clear[ $option ]; + self::clear( $types ); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php new file mode 100644 index 00000000..255d4490 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-renderer.php @@ -0,0 +1,355 @@ +get_xsl_url() ); + $this->stylesheet = ''; + $this->charset = get_bloginfo( 'charset' ); + $this->output_charset = $this->charset; + + if ( + $this->charset !== 'UTF-8' + && function_exists( 'mb_list_encodings' ) + && in_array( $this->charset, mb_list_encodings(), true ) + ) { + $this->output_charset = 'UTF-8'; + } + + $this->needs_conversion = $this->output_charset !== $this->charset; + } + + /** + * Builds the sitemap index. + * + * @param array $links Set of sitemaps index links. + * + * @return string + */ + public function get_index( $links ) { + + $xml = '' . "\n"; + + foreach ( $links as $link ) { + $xml .= $this->sitemap_index_url( $link ); + } + + /** + * Filter to append sitemaps to the index. + * + * @param string $index String to append to sitemaps index, defaults to empty. + */ + $xml .= apply_filters( 'wpseo_sitemap_index', '' ); + $xml .= ''; + + return $xml; + } + + /** + * Builds the sitemap. + * + * @param array $links Set of sitemap links. + * @param string $type Sitemap type. + * @param int $current_page Current sitemap page number. + * + * @return string + */ + public function get_sitemap( $links, $type, $current_page ) { + + $urlset = '' . "\n"; + + /** + * Filters the `urlset` for all sitemaps. + * + * @param string $urlset The output for the sitemap's `urlset`. + */ + $urlset = apply_filters( 'wpseo_sitemap_urlset', $urlset ); + + /** + * Filters the `urlset` for a sitemap by type. + * + * @param string $urlset The output for the sitemap's `urlset`. + */ + $xml = apply_filters( "wpseo_sitemap_{$type}_urlset", $urlset ); + + foreach ( $links as $url ) { + $xml .= $this->sitemap_url( $url ); + } + + /** + * Filter to add extra URLs to the XML sitemap by type. + * + * Only runs for the first page, not on all. + * + * @param string $content String content to add, defaults to empty. + */ + if ( $current_page === 1 ) { + $xml .= apply_filters( "wpseo_sitemap_{$type}_content", '' ); + } + + $xml .= ''; + + return $xml; + } + + /** + * Produce final XML output with debug information. + * + * @param string $sitemap Sitemap XML. + * + * @return string + */ + public function get_output( $sitemap ) { + + $output = 'output_charset ) . '"?>'; + + if ( $this->stylesheet ) { + /** + * Filter the stylesheet URL for the XML sitemap. + * + * @param string $stylesheet Stylesheet URL. + */ + $output .= apply_filters( 'wpseo_stylesheet_url', $this->stylesheet ) . "\n"; + } + + $output .= $sitemap; + $output .= "\n"; + + return $output; + } + + /** + * Get charset for the output. + * + * @return string + */ + public function get_output_charset() { + return $this->output_charset; + } + + /** + * Set a custom stylesheet for this sitemap. Set to empty to just remove the default stylesheet. + * + * @param string $stylesheet Full XML-stylesheet declaration. + * + * @return void + */ + public function set_stylesheet( $stylesheet ) { + $this->stylesheet = $stylesheet; + } + + /** + * Build the `` tag for a given URL. + * + * @param array $url Array of parts that make up this entry. + * + * @return string + */ + protected function sitemap_index_url( $url ) { + + $date = null; + + if ( ! empty( $url['lastmod'] ) ) { + $date = YoastSEO()->helpers->date->format( $url['lastmod'] ); + } + + $url['loc'] = htmlspecialchars( $url['loc'], ENT_COMPAT, $this->output_charset, false ); + + $output = "\t\n"; + $output .= "\t\t" . $url['loc'] . "\n"; + $output .= empty( $date ) ? '' : "\t\t" . htmlspecialchars( $date, ENT_COMPAT, $this->output_charset, false ) . "\n"; + $output .= "\t\n"; + + return $output; + } + + /** + * Build the `` tag for a given URL. + * + * Public access for backwards compatibility reasons. + * + * @param array $url Array of parts that make up this entry. + * + * @return string + */ + public function sitemap_url( $url ) { + + $date = null; + + if ( ! empty( $url['mod'] ) ) { + // Create a DateTime object date in the correct timezone. + $date = YoastSEO()->helpers->date->format( $url['mod'] ); + } + + $output = "\t\n"; + $output .= "\t\t" . $this->encode_and_escape( $url['loc'] ) . "\n"; + $output .= empty( $date ) ? '' : "\t\t" . htmlspecialchars( $date, ENT_COMPAT, $this->output_charset, false ) . "\n"; + + if ( empty( $url['images'] ) ) { + $url['images'] = []; + } + + foreach ( $url['images'] as $img ) { + + if ( empty( $img['src'] ) ) { + continue; + } + + $output .= "\t\t\n"; + $output .= "\t\t\t" . $this->encode_and_escape( $img['src'] ) . "\n"; + $output .= "\t\t\n"; + } + unset( $img ); + + $output .= "\t\n"; + + /** + * Filters the output for the sitemap URL tag. + * + * @param string $output The output for the sitemap url tag. + * @param array $url The sitemap URL array on which the output is based. + */ + return apply_filters( 'wpseo_sitemap_url', $output, $url ); + } + + /** + * Ensure the URL is encoded per RFC3986 and correctly escaped for use in an XML sitemap. + * + * This method works around a two quirks in esc_url(): + * 1. `esc_url()` leaves schema-relative URLs alone, while according to the sitemap specs, + * the URL must always begin with a protocol. + * 2. `esc_url()` escapes ampersands as `&` instead of the more common `&`. + * According to the specs, `&` should be used, and even though this shouldn't + * really make a difference in practice, to quote Jono: "I'd be nervous about & + * given how many weird and wonderful things eat sitemaps", so better safe than sorry. + * + * @link https://www.sitemaps.org/protocol.html#xmlTagDefinitions + * @link https://www.sitemaps.org/protocol.html#escaping + * @link https://developer.wordpress.org/reference/functions/esc_url/ + * + * @param string $url URL to encode and escape. + * + * @return string + */ + protected function encode_and_escape( $url ) { + $url = $this->encode_url_rfc3986( $url ); + $url = esc_url( $url ); + $url = str_replace( '&', '&', $url ); + $url = str_replace( ''', ''', $url ); + + if ( strpos( $url, '//' ) === 0 ) { + // Schema-relative URL for which esc_url() does not add a scheme. + $url = 'http:' . $url; + } + + return $url; + } + + /** + * Apply some best effort conversion to comply with RFC3986. + * + * @param string $url URL to encode. + * + * @return string + */ + protected function encode_url_rfc3986( $url ) { + + if ( filter_var( $url, FILTER_VALIDATE_URL ) ) { + return $url; + } + + $path = wp_parse_url( $url, PHP_URL_PATH ); + + if ( ! empty( $path ) && $path !== '/' ) { + $encoded_path = explode( '/', $path ); + + // First decode the path, to prevent double encoding. + $encoded_path = array_map( 'rawurldecode', $encoded_path ); + + $encoded_path = array_map( 'rawurlencode', $encoded_path ); + $encoded_path = implode( '/', $encoded_path ); + + $url = str_replace( $path, $encoded_path, $url ); + } + + $query = wp_parse_url( $url, PHP_URL_QUERY ); + + if ( ! empty( $query ) ) { + + parse_str( $query, $parsed_query ); + + $parsed_query = http_build_query( $parsed_query, '', '&', PHP_QUERY_RFC3986 ); + + $url = str_replace( $query, $parsed_query, $url ); + } + + return $url; + } + + /** + * Retrieves the XSL URL that should be used in the current environment + * + * When home_url and site_url are not the same, the home_url should be used. + * This is because the XSL needs to be served from the same domain, protocol and port + * as the XML file that is loading it. + * + * @return string The XSL URL that needs to be used. + */ + protected function get_xsl_url() { + if ( home_url() !== site_url() ) { + return home_url( 'main-sitemap.xsl' ); + } + + /* + * Fallback to circumvent a cross-domain security problem when the XLS file is + * loaded from a different (sub)domain. + */ + if ( strpos( plugins_url(), home_url() ) !== 0 ) { + return home_url( 'main-sitemap.xsl' ); + } + + return plugin_dir_url( WPSEO_FILE ) . 'css/main-sitemap.xsl'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php new file mode 100644 index 00000000..8b923146 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps-router.php @@ -0,0 +1,161 @@ +classes->get( Deactivating_Yoast_Seo_Conditional::class )->is_met() ) { + return; + } + + add_action( 'yoast_add_dynamic_rewrite_rules', [ $this, 'add_rewrite_rules' ] ); + add_filter( 'query_vars', [ $this, 'add_query_vars' ] ); + + add_filter( 'redirect_canonical', [ $this, 'redirect_canonical' ] ); + add_action( 'template_redirect', [ $this, 'template_redirect' ], 0 ); + } + + /** + * Adds rewrite routes for sitemaps. + * + * @param Yoast_Dynamic_Rewrites $dynamic_rewrites Dynamic rewrites handler instance. + * + * @return void + */ + public function add_rewrite_rules( $dynamic_rewrites ) { + $dynamic_rewrites->add_rule( 'sitemap_index\.xml$', 'index.php?sitemap=1', 'top' ); + $dynamic_rewrites->add_rule( '([^/]+?)-sitemap([0-9]+)?\.xml$', 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]', 'top' ); + $dynamic_rewrites->add_rule( '([a-z]+)?-?sitemap\.xsl$', 'index.php?yoast-sitemap-xsl=$matches[1]', 'top' ); + } + + /** + * Adds query variables for sitemaps. + * + * @param array $query_vars List of query variables to filter. + * + * @return array Filtered query variables. + */ + public function add_query_vars( $query_vars ) { + $query_vars[] = 'sitemap'; + $query_vars[] = 'sitemap_n'; + $query_vars[] = 'yoast-sitemap-xsl'; + + return $query_vars; + } + + /** + * Sets up rewrite rules. + * + * @deprecated 21.8 + * @codeCoverageIgnore + * + * @return void + */ + public function init() { + _deprecated_function( __METHOD__, 'Yoast SEO 21.8' ); + } + + /** + * Stop trailing slashes on sitemap.xml URLs. + * + * @param string $redirect The redirect URL currently determined. + * + * @return bool|string + */ + public function redirect_canonical( $redirect ) { + + if ( get_query_var( 'sitemap' ) || get_query_var( 'yoast-sitemap-xsl' ) ) { + return false; + } + + return $redirect; + } + + /** + * Redirects sitemap.xml to sitemap_index.xml. + * + * @return void + */ + public function template_redirect() { + if ( ! $this->needs_sitemap_index_redirect() ) { + return; + } + + YoastSEO()->helpers->redirect->do_safe_redirect( home_url( '/sitemap_index.xml' ), 301, 'Yoast SEO' ); + } + + /** + * Checks whether the current request needs to be redirected to sitemap_index.xml. + * + * @global WP_Query $wp_query Current query. + * + * @return bool True if redirect is needed, false otherwise. + */ + public function needs_sitemap_index_redirect() { + global $wp_query; + + $protocol = 'http://'; + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + if ( ! empty( $_SERVER['HTTPS'] ) && strtolower( $_SERVER['HTTPS'] ) === 'on' ) { + $protocol = 'https://'; + } + + $domain = ''; + if ( isset( $_SERVER['SERVER_NAME'] ) ) { + $domain = sanitize_text_field( wp_unslash( $_SERVER['SERVER_NAME'] ) ); + } + + $path = ''; + if ( isset( $_SERVER['REQUEST_URI'] ) ) { + $path = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ); + } + + // Due to different environment configurations, we need to check both SERVER_NAME and HTTP_HOST. + $check_urls = [ $protocol . $domain . $path ]; + if ( ! empty( $_SERVER['HTTP_HOST'] ) ) { + $check_urls[] = $protocol . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) . $path; + } + + return $wp_query->is_404 && in_array( home_url( '/sitemap.xml' ), $check_urls, true ); + } + + /** + * Create base URL for the sitemap. + * + * @param string $page Page to append to the base URL. + * + * @return string base URL (incl page) + */ + public static function get_base_url( $page ) { + + global $wp_rewrite; + + $base = $wp_rewrite->using_index_permalinks() ? 'index.php/' : '/'; + + /** + * Filter the base URL of the sitemaps. + * + * @param string $base The string that should be added to home_url() to make the full base URL. + */ + $base = apply_filters( 'wpseo_sitemaps_base_url', $base ); + + /* + * Get the scheme from the configured home URL instead of letting WordPress + * determine the scheme based on the requested URI. + */ + return home_url( $base . $page, wp_parse_url( get_option( 'home' ), PHP_URL_SCHEME ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php new file mode 100644 index 00000000..2fbb567c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-sitemaps.php @@ -0,0 +1,674 @@ +router = new WPSEO_Sitemaps_Router(); + $this->renderer = new WPSEO_Sitemaps_Renderer(); + $this->cache = new WPSEO_Sitemaps_Cache(); + + if ( ! empty( $_SERVER['SERVER_PROTOCOL'] ) ) { + $this->http_protocol = sanitize_text_field( wp_unslash( $_SERVER['SERVER_PROTOCOL'] ) ); + } + } + + /** + * Initialize sitemap providers classes. + * + * @since 5.3 + * + * @return void + */ + public function init_sitemaps_providers() { + + $this->providers = [ + new WPSEO_Post_Type_Sitemap_Provider(), + new WPSEO_Taxonomy_Sitemap_Provider(), + new WPSEO_Author_Sitemap_Provider(), + ]; + + $external_providers = apply_filters( 'wpseo_sitemaps_providers', [] ); + + foreach ( $external_providers as $provider ) { + if ( is_object( $provider ) && $provider instanceof WPSEO_Sitemap_Provider ) { + $this->providers[] = $provider; + } + } + } + + /** + * Check the current request URI, if we can determine it's probably an XML sitemap, kill loading the widgets. + * + * @return void + */ + public function reduce_query_load() { + if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { + return; + } + $request_uri = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ); + $extension = substr( $request_uri, -4 ); + if ( stripos( $request_uri, 'sitemap' ) !== false && in_array( $extension, [ '.xml', '.xsl' ], true ) ) { + remove_all_actions( 'widgets_init' ); + } + } + + /** + * Register your own sitemap. Call this during 'init'. + * + * @param string $name The name of the sitemap. + * @param callback $building_function Function to build your sitemap. + * @param string $rewrite Optional. Regular expression to match your sitemap with. + * + * @return void + */ + public function register_sitemap( $name, $building_function, $rewrite = '' ) { + add_action( 'wpseo_do_sitemap_' . $name, $building_function ); + if ( $rewrite ) { + Yoast_Dynamic_Rewrites::instance()->add_rule( $rewrite, 'index.php?sitemap=' . $name, 'top' ); + } + } + + /** + * Register your own XSL file. Call this during 'init'. + * + * @since 1.4.23 + * + * @param string $name The name of the XSL file. + * @param callback $building_function Function to build your XSL file. + * @param string $rewrite Optional. Regular expression to match your sitemap with. + * + * @return void + */ + public function register_xsl( $name, $building_function, $rewrite = '' ) { + add_action( 'wpseo_xsl_' . $name, $building_function ); + if ( $rewrite ) { + Yoast_Dynamic_Rewrites::instance()->add_rule( $rewrite, 'index.php?yoast-sitemap-xsl=' . $name, 'top' ); + } + } + + /** + * Set the sitemap current page to allow creating partial sitemaps with WP-CLI + * in a one-off process. + * + * @param int $current_page The part that should be generated. + * + * @return void + */ + public function set_n( $current_page ) { + if ( is_scalar( $current_page ) && intval( $current_page ) > 0 ) { + $this->current_page = intval( $current_page ); + } + } + + /** + * Set the sitemap content to display after you have generated it. + * + * @param string $sitemap The generated sitemap to output. + * + * @return void + */ + public function set_sitemap( $sitemap ) { + $this->sitemap = $sitemap; + } + + /** + * Set as true to make the request 404. Used stop the display of empty sitemaps or invalid requests. + * + * @param bool $is_bad Is this a bad request. True or false. + * + * @return void + */ + public function set_bad_sitemap( $is_bad ) { + $this->bad_sitemap = (bool) $is_bad; + } + + /** + * Prevent stupid plugins from running shutdown scripts when we're obviously not outputting HTML. + * + * @since 1.4.16 + * + * @return void + */ + public function sitemap_close() { + remove_all_actions( 'wp_footer' ); + die(); + } + + /** + * Hijack requests for potential sitemaps and XSL files. + * + * @param WP_Query $query Main query instance. + * + * @return void + */ + public function redirect( $query ) { + + if ( ! $query->is_main_query() ) { + return; + } + + $yoast_sitemap_xsl = get_query_var( 'yoast-sitemap-xsl' ); + + if ( ! empty( $yoast_sitemap_xsl ) ) { + /* + * This is a method to provide the XSL via the home_url. + * Needed when the site_url and home_url are not the same. + * Loading the XSL needs to come from the same domain, protocol and port as the XML. + * + * Whenever home_url and site_url are the same, the file can be loaded directly. + */ + $this->xsl_output( $yoast_sitemap_xsl ); + $this->sitemap_close(); + + return; + } + + $type = get_query_var( 'sitemap' ); + + if ( empty( $type ) ) { + return; + } + + if ( get_query_var( 'sitemap_n' ) === '1' || get_query_var( 'sitemap_n' ) === '0' ) { + wp_safe_redirect( home_url( "/$type-sitemap.xml" ), 301, 'Yoast SEO' ); + exit; + } + + $this->set_n( get_query_var( 'sitemap_n' ) ); + + if ( ! $this->get_sitemap_from_cache( $type, $this->current_page ) ) { + $this->build_sitemap( $type ); + } + + if ( $this->bad_sitemap ) { + $query->set_404(); + status_header( 404 ); + + return; + } + + $this->output(); + $this->sitemap_close(); + } + + /** + * Try to get the sitemap from cache. + * + * @param string $type Sitemap type. + * @param int $page_number The page number to retrieve. + * + * @return bool If the sitemap has been retrieved from cache. + */ + private function get_sitemap_from_cache( $type, $page_number ) { + + $this->transient = false; + + if ( $this->cache->is_enabled() !== true ) { + return false; + } + + /** + * Fires before the attempt to retrieve XML sitemap from the transient cache. + * + * @param WPSEO_Sitemaps $sitemaps Sitemaps object. + */ + do_action( 'wpseo_sitemap_stylesheet_cache_' . $type, $this ); + + $sitemap_cache_data = $this->cache->get_sitemap_data( $type, $page_number ); + + // No cache was found, refresh it because cache is enabled. + if ( empty( $sitemap_cache_data ) ) { + return $this->refresh_sitemap_cache( $type, $page_number ); + } + + // Cache object was found, parse information. + $this->transient = true; + + $this->sitemap = $sitemap_cache_data->get_sitemap(); + $this->bad_sitemap = ! $sitemap_cache_data->is_usable(); + + return true; + } + + /** + * Build and save sitemap to cache. + * + * @param string $type Sitemap type. + * @param int $page_number The page number to save to. + * + * @return bool + */ + private function refresh_sitemap_cache( $type, $page_number ) { + $this->set_n( $page_number ); + $this->build_sitemap( $type ); + + return $this->cache->store_sitemap( $type, $page_number, $this->sitemap, ! $this->bad_sitemap ); + } + + /** + * Attempts to build the requested sitemap. + * + * Sets $bad_sitemap if this isn't for the root sitemap, a post type or taxonomy. + * + * @param string $type The requested sitemap's identifier. + * + * @return void + */ + public function build_sitemap( $type ) { + + /** + * Filter the type of sitemap to build. + * + * @param string $type Sitemap type, determined by the request. + */ + $type = apply_filters( 'wpseo_build_sitemap_post_type', $type ); + + if ( $type === '1' ) { + $this->build_root_map(); + + return; + } + + $entries_per_page = $this->get_entries_per_page(); + + foreach ( $this->providers as $provider ) { + if ( ! $provider->handles_type( $type ) ) { + continue; + } + + try { + $links = $provider->get_sitemap_links( $type, $entries_per_page, $this->current_page ); + } catch ( OutOfBoundsException $exception ) { + $this->bad_sitemap = true; + + return; + } + + $this->sitemap = $this->renderer->get_sitemap( $links, $type, $this->current_page ); + + return; + } + + if ( has_action( 'wpseo_do_sitemap_' . $type ) ) { + /** + * Fires custom handler, if hooked to generate sitemap for the type. + */ + do_action( 'wpseo_do_sitemap_' . $type ); + + return; + } + + $this->bad_sitemap = true; + } + + /** + * Build the root sitemap (example.com/sitemap_index.xml) which lists sub-sitemaps for other content types. + * + * @return void + */ + public function build_root_map() { + + $links = []; + $entries_per_page = $this->get_entries_per_page(); + + foreach ( $this->providers as $provider ) { + $links = array_merge( $links, $provider->get_index_links( $entries_per_page ) ); + } + + /** + * Filter the sitemap links array before the index sitemap is built. + * + * @param array $links Array of sitemap links + */ + $links = apply_filters( 'wpseo_sitemap_index_links', $links ); + + if ( empty( $links ) ) { + $this->bad_sitemap = true; + $this->sitemap = ''; + + return; + } + + $this->sitemap = $this->renderer->get_index( $links ); + } + + /** + * Spits out the XSL for the XML sitemap. + * + * @since 1.4.13 + * + * @param string $type Type to output. + * + * @return void + */ + public function xsl_output( $type ) { + + if ( $type !== 'main' ) { + + /** + * Fires for the output of XSL for XML sitemaps, other than type "main". + */ + do_action( 'wpseo_xsl_' . $type ); + + return; + } + + header( $this->http_protocol . ' 200 OK', true, 200 ); + // Prevent the search engines from indexing the XML Sitemap. + header( 'X-Robots-Tag: noindex, follow', true ); + header( 'Content-Type: text/xml' ); + + // Make the browser cache this file properly. + $expires = YEAR_IN_SECONDS; + header( 'Pragma: public' ); + header( 'Cache-Control: max-age=' . $expires ); + header( 'Expires: ' . YoastSEO()->helpers->date->format_timestamp( ( time() + $expires ), 'D, d M Y H:i:s' ) . ' GMT' ); + + // Don't use WP_Filesystem() here because that's not initialized yet. See https://yoast.atlassian.net/browse/QAK-2043. + readfile( WPSEO_PATH . 'css/main-sitemap.xsl' ); + } + + /** + * Spit out the generated sitemap. + * + * @return void + */ + public function output() { + $this->send_headers(); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaping sitemap as either xml or html results in empty document. + echo $this->renderer->get_output( $this->sitemap ); + } + + /** + * Makes a request to the sitemap index to cache it before the arrival of the search engines. + * + * @return void + */ + public function hit_sitemap_index() { + if ( ! $this->cache->is_enabled() ) { + return; + } + + wp_remote_get( WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ) ); + } + + /** + * Get the GMT modification date for the last modified post in the post type. + * + * @since 3.2 + * + * @param string|array $post_types Post type or array of types. + * @param bool $return_all Flag to return array of values. + * + * @return string|array|false + */ + public static function get_last_modified_gmt( $post_types, $return_all = false ) { + + global $wpdb; + + static $post_type_dates = null; + + if ( ! is_array( $post_types ) ) { + $post_types = [ $post_types ]; + } + + foreach ( $post_types as $post_type ) { + if ( ! isset( $post_type_dates[ $post_type ] ) ) { // If we hadn't seen post type before. R. + $post_type_dates = null; + break; + } + } + + if ( is_null( $post_type_dates ) ) { + + $post_type_dates = []; + $post_type_names = WPSEO_Post_Type::get_accessible_post_types(); + + if ( ! empty( $post_type_names ) ) { + $post_statuses = array_map( 'esc_sql', self::get_post_statuses() ); + $replacements = array_merge( + [ + 'post_type', + 'post_modified_gmt', + 'date', + $wpdb->posts, + 'post_status', + ], + $post_statuses, + [ 'post_type' ], + array_keys( $post_type_names ), + [ + 'post_type', + 'date', + ] + ); + + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to use a direct query here. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + $dates = $wpdb->get_results( + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + $wpdb->prepare( + ' + SELECT %i, MAX(%i) AS %i + FROM %i + WHERE %i IN (' . implode( ', ', array_fill( 0, count( $post_statuses ), '%s' ) ) . ') + AND %i IN (' . implode( ', ', array_fill( 0, count( $post_type_names ), '%s' ) ) . ') + GROUP BY %i + ORDER BY %i DESC + ', + $replacements + ) + ); + + foreach ( $dates as $obj ) { + $post_type_dates[ $obj->post_type ] = $obj->date; + } + } + } + + $dates = array_intersect_key( $post_type_dates, array_flip( $post_types ) ); + + if ( count( $dates ) > 0 ) { + if ( $return_all ) { + return $dates; + } + + return max( $dates ); + } + + return false; + } + + /** + * Get the modification date for the last modified post in the post type. + * + * @param array $post_types Post types to get the last modification date for. + * + * @return string + */ + public function get_last_modified( $post_types ) { + return YoastSEO()->helpers->date->format( self::get_last_modified_gmt( $post_types ) ); + } + + /** + * Get the maximum number of entries per XML sitemap. + * + * @return int The maximum number of entries. + */ + protected function get_entries_per_page() { + /** + * Filter the maximum number of entries per XML sitemap. + * + * After changing the output of the filter, make sure that you disable and enable the + * sitemaps to make sure the value is picked up for the sitemap cache. + * + * @param int $entries The maximum number of entries per XML sitemap. + */ + $entries = (int) apply_filters( 'wpseo_sitemap_entries_per_page', 1000 ); + + return $entries; + } + + /** + * Get post statuses for post_type or the root sitemap. + * + * @since 10.2 + * + * @param string $type Provide a type for a post_type sitemap, SITEMAP_INDEX_TYPE for the root sitemap. + * + * @return array List of post statuses. + */ + public static function get_post_statuses( $type = self::SITEMAP_INDEX_TYPE ) { + /** + * Filter post status list for sitemap query for the post type. + * + * @param array $post_statuses Post status list, defaults to array( 'publish' ). + * @param string $type Post type or SITEMAP_INDEX_TYPE. + */ + $post_statuses = apply_filters( 'wpseo_sitemap_post_statuses', [ 'publish' ], $type ); + + if ( ! is_array( $post_statuses ) || empty( $post_statuses ) ) { + $post_statuses = [ 'publish' ]; + } + + if ( ( $type === self::SITEMAP_INDEX_TYPE || $type === 'attachment' ) + && ! in_array( 'inherit', $post_statuses, true ) + ) { + $post_statuses[] = 'inherit'; + } + + return $post_statuses; + } + + /** + * Sends all the required HTTP Headers. + * + * @return void + */ + private function send_headers() { + if ( headers_sent() ) { + return; + } + + $headers = [ + $this->http_protocol . ' 200 OK' => 200, + // Prevent the search engines from indexing the XML Sitemap. + 'X-Robots-Tag: noindex, follow' => '', + 'Content-Type: text/xml; charset=' . esc_attr( $this->renderer->get_output_charset() ) => '', + ]; + + /** + * Filter the HTTP headers we send before an XML sitemap. + * + * @param array $headers The HTTP headers we're going to send out. + */ + $headers = apply_filters( 'wpseo_sitemap_http_headers', $headers ); + + foreach ( $headers as $header => $status ) { + if ( is_numeric( $status ) ) { + header( $header, true, $status ); + continue; + } + header( $header, true ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php new file mode 100644 index 00000000..e69f0e79 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/class-taxonomy-sitemap-provider.php @@ -0,0 +1,351 @@ +include_images = apply_filters( 'wpseo_xml_sitemap_include_images', true ); + } + + /** + * Check if provider supports given item type. + * + * @param string $type Type string to check for. + * + * @return bool + */ + public function handles_type( $type ) { + + $taxonomy = get_taxonomy( $type ); + + if ( $taxonomy === false || ! $this->is_valid_taxonomy( $taxonomy->name ) || ! $taxonomy->public ) { + return false; + } + + return true; + } + + /** + * Retrieves the links for the sitemap. + * + * @param int $max_entries Entries per sitemap. + * + * @return array + */ + public function get_index_links( $max_entries ) { + + $taxonomies = get_taxonomies( [ 'public' => true ], 'objects' ); + + if ( empty( $taxonomies ) ) { + return []; + } + + $taxonomy_names = array_filter( array_keys( $taxonomies ), [ $this, 'is_valid_taxonomy' ] ); + $taxonomies = array_intersect_key( $taxonomies, array_flip( $taxonomy_names ) ); + + // Retrieve all the taxonomies and their terms so we can do a proper count on them. + + /** + * Filter the setting of excluding empty terms from the XML sitemap. + * + * @param bool $exclude Defaults to true. + * @param array $taxonomy_names Array of names for the taxonomies being processed. + */ + $hide_empty = apply_filters( 'wpseo_sitemap_exclude_empty_terms', true, $taxonomy_names ); + + $all_taxonomies = []; + + foreach ( $taxonomy_names as $taxonomy_name ) { + /** + * Filter the setting of excluding empty terms from the XML sitemap for a specific taxonomy. + * + * @param bool $exclude Defaults to the sitewide setting. + * @param string $taxonomy_name The name of the taxonomy being processed. + */ + $hide_empty_tax = apply_filters( 'wpseo_sitemap_exclude_empty_terms_taxonomy', $hide_empty, $taxonomy_name ); + + $term_args = [ + 'taxonomy' => $taxonomy_name, + 'hide_empty' => $hide_empty_tax, + 'fields' => 'ids', + ]; + $taxonomy_terms = get_terms( $term_args ); + + if ( count( $taxonomy_terms ) > 0 ) { + $all_taxonomies[ $taxonomy_name ] = $taxonomy_terms; + } + } + + $index = []; + + foreach ( $taxonomies as $tax_name => $tax ) { + + if ( ! isset( $all_taxonomies[ $tax_name ] ) ) { // No eligible terms found. + continue; + } + + $total_count = ( isset( $all_taxonomies[ $tax_name ] ) ) ? count( $all_taxonomies[ $tax_name ] ) : 1; + $max_pages = 1; + + if ( $total_count > $max_entries ) { + $max_pages = (int) ceil( $total_count / $max_entries ); + } + + $last_modified_gmt = WPSEO_Sitemaps::get_last_modified_gmt( $tax->object_type ); + + for ( $page_counter = 0; $page_counter < $max_pages; $page_counter++ ) { + + $current_page = ( $page_counter === 0 ) ? '' : ( $page_counter + 1 ); + + if ( ! is_array( $tax->object_type ) || count( $tax->object_type ) === 0 ) { + continue; + } + + $terms = array_splice( $all_taxonomies[ $tax_name ], 0, $max_entries ); + + if ( ! $terms ) { + continue; + } + + $args = [ + 'post_type' => $tax->object_type, + 'tax_query' => [ + [ + 'taxonomy' => $tax_name, + 'terms' => $terms, + ], + ], + 'orderby' => 'modified', + 'order' => 'DESC', + 'posts_per_page' => 1, + ]; + $query = new WP_Query( $args ); + + if ( $query->have_posts() ) { + $date = $query->posts[0]->post_modified_gmt; + } + else { + $date = $last_modified_gmt; + } + + $index[] = [ + 'loc' => WPSEO_Sitemaps_Router::get_base_url( $tax_name . '-sitemap' . $current_page . '.xml' ), + 'lastmod' => $date, + ]; + } + } + + return $index; + } + + /** + * Get set of sitemap link data. + * + * @param string $type Sitemap type. + * @param int $max_entries Entries per sitemap. + * @param int $current_page Current page of the sitemap. + * + * @return array + * + * @throws OutOfBoundsException When an invalid page is requested. + */ + public function get_sitemap_links( $type, $max_entries, $current_page ) { + global $wpdb; + + $links = []; + if ( ! $this->handles_type( $type ) ) { + return $links; + } + + $taxonomy = get_taxonomy( $type ); + + $steps = $max_entries; + $offset = ( $current_page > 1 ) ? ( ( $current_page - 1 ) * $max_entries ) : 0; + + /** This filter is documented in inc/sitemaps/class-taxonomy-sitemap-provider.php */ + $hide_empty = apply_filters( 'wpseo_sitemap_exclude_empty_terms', true, [ $taxonomy->name ] ); + /** This filter is documented in inc/sitemaps/class-taxonomy-sitemap-provider.php */ + $hide_empty_tax = apply_filters( 'wpseo_sitemap_exclude_empty_terms_taxonomy', $hide_empty, $taxonomy->name ); + $terms = get_terms( + [ + 'taxonomy' => $taxonomy->name, + 'hide_empty' => $hide_empty_tax, + 'update_term_meta_cache' => false, + 'offset' => $offset, + 'number' => $steps, + ] + ); + + // If there are no terms fetched for this range, we are on an invalid page. + if ( empty( $terms ) ) { + throw new OutOfBoundsException( 'Invalid sitemap page requested' ); + } + + $post_statuses = array_map( 'esc_sql', WPSEO_Sitemaps::get_post_statuses() ); + + $replacements = array_merge( + [ + 'post_modified_gmt', + $wpdb->posts, + $wpdb->term_relationships, + 'object_id', + 'ID', + $wpdb->term_taxonomy, + 'term_taxonomy_id', + 'term_taxonomy_id', + 'taxonomy', + 'term_id', + 'post_status', + ], + $post_statuses, + [ 'post_password' ] + ); + + /** + * Filter: 'wpseo_exclude_from_sitemap_by_term_ids' - Allow excluding terms by ID. + * + * @param array $terms_to_exclude The terms to exclude. + */ + $terms_to_exclude = apply_filters( 'wpseo_exclude_from_sitemap_by_term_ids', [] ); + + foreach ( $terms as $term ) { + + if ( in_array( $term->term_id, $terms_to_exclude, true ) ) { + continue; + } + + $url = []; + + $tax_noindex = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'noindex' ); + + if ( $tax_noindex === 'noindex' ) { + continue; + } + + $canonical = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'canonical' ); + $url['loc'] = get_term_link( $term, $term->taxonomy ); + + if ( is_string( $canonical ) && $canonical !== '' && $canonical !== $url['loc'] ) { + continue; + } + + $current_replacements = $replacements; + array_splice( $current_replacements, 9, 0, $term->taxonomy ); + array_splice( $current_replacements, 11, 0, $term->term_id ); + + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to use a direct query here. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + $url['mod'] = $wpdb->get_var( + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + $wpdb->prepare( + ' + SELECT MAX(p.%i) AS lastmod + FROM %i AS p + INNER JOIN %i AS term_rel + ON term_rel.%i = p.%i + INNER JOIN %i AS term_tax + ON term_tax.%i = term_rel.%i + AND term_tax.%i = %s + AND term_tax.%i = %d + WHERE p.%i IN (' . implode( ', ', array_fill( 0, count( $post_statuses ), '%s' ) ) . ") + AND p.%i = '' + ", + $current_replacements + ) + ); + + if ( $this->include_images ) { + $url['images'] = $this->get_image_parser()->get_term_images( $term ); + } + + // Deprecated, kept for backwards data compat. R. + $url['chf'] = 'daily'; + $url['pri'] = 1; + + /** This filter is documented at inc/sitemaps/class-post-type-sitemap-provider.php */ + $url = apply_filters( 'wpseo_sitemap_entry', $url, 'term', $term ); + + if ( ! empty( $url ) ) { + $links[] = $url; + } + } + + return $links; + } + + /** + * Check if taxonomy by name is valid to appear in sitemaps. + * + * @param string $taxonomy_name Taxonomy name to check. + * + * @return bool + */ + public function is_valid_taxonomy( $taxonomy_name ) { + + if ( WPSEO_Options::get( "noindex-tax-{$taxonomy_name}" ) === true ) { + return false; + } + + if ( in_array( $taxonomy_name, [ 'link_category', 'nav_menu', 'wp_pattern_category' ], true ) ) { + return false; + } + + if ( $taxonomy_name === 'post_format' && WPSEO_Options::get( 'disable-post_format', false ) ) { + return false; + } + + /** + * Filter to exclude the taxonomy from the XML sitemap. + * + * @param bool $exclude Defaults to false. + * @param string $taxonomy_name Name of the taxonomy to exclude.. + */ + if ( apply_filters( 'wpseo_sitemap_exclude_taxonomy', false, $taxonomy_name ) ) { + return false; + } + + return true; + } + + /** + * Get the Image Parser. + * + * @return WPSEO_Sitemap_Image_Parser + */ + protected function get_image_parser() { + if ( ! isset( self::$image_parser ) ) { + self::$image_parser = new WPSEO_Sitemap_Image_Parser(); + } + + return self::$image_parser; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php new file mode 100644 index 00000000..9cfdf0aa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/sitemaps/interface-sitemap-cache-data.php @@ -0,0 +1,72 @@ +ID ); + return $primary_term->get_primary_term(); + } +} + +if ( ! function_exists( 'yoast_get_primary_term' ) ) { + /** + * Get the primary term name. + * + * @param string $taxonomy Optional. The taxonomy to get the primary term for. Defaults to category. + * @param int|WP_Post|null $post Optional. Post to get the primary term for. + * + * @return string Name of the primary term. + */ + function yoast_get_primary_term( $taxonomy = 'category', $post = null ) { + $primary_term_id = yoast_get_primary_term_id( $taxonomy, $post ); + + $term = get_term( $primary_term_id ); + if ( ! is_wp_error( $term ) && ! empty( $term ) ) { + return $term->name; + } + + return ''; + } +} + +/** + * Replace `%%variable_placeholders%%` with their real value based on the current requested page/post/cpt. + * + * @param string $text The string to replace the variables in. + * @param object $args The object some of the replacement values might come from, + * could be a post, taxonomy or term. + * @param array $omit Variables that should not be replaced by this function. + * + * @return string + */ +function wpseo_replace_vars( $text, $args, $omit = [] ) { + $replacer = new WPSEO_Replace_Vars(); + + return $replacer->replace( $text, $args, $omit ); +} + +/** + * Register a new variable replacement. + * + * This function is for use by other plugins/themes to easily add their own additional variables to replace. + * This function should be called from a function on the 'wpseo_register_extra_replacements' action hook. + * The use of this function is preferred over the older 'wpseo_replacements' filter as a way to add new replacements. + * The 'wpseo_replacements' filter should still be used to adjust standard WPSEO replacement values. + * The function can not be used to replace standard WPSEO replacement value functions and will thrown a warning + * if you accidently try. + * To avoid conflicts with variables registered by WPSEO and other themes/plugins, try and make the + * name of your variable unique. Variable names also can not start with "%%cf_" or "%%ct_" as these are reserved + * for the standard WPSEO variable variables 'cf_', 'ct_' and + * 'ct_desc_'. + * The replacement function will be passed the undelimited name (i.e. stripped of the %%) of the variable + * to replace in case you need it. + * + * Example code: + * + * + * + * + * @since 1.5.4 + * + * @param string $replacevar_name The name of the variable to replace, i.e. '%%var%%'. + * Note: the surrounding %% are optional, name can only contain [A-Za-z0-9_-]. + * @param mixed $replace_function Function or method to call to retrieve the replacement value for the variable. + * Uses the same format as add_filter/add_action function parameter and + * should *return* the replacement value. DON'T echo it. + * @param string $type Type of variable: 'basic' or 'advanced', defaults to 'advanced'. + * @param string $help_text Help text to be added to the help tab for this variable. + * + * @return bool Whether the replacement function was successfully registered. + */ +function wpseo_register_var_replacement( $replacevar_name, $replace_function, $type = 'advanced', $help_text = '' ) { + return WPSEO_Replace_Vars::register_replacement( $replacevar_name, $replace_function, $type, $help_text ); +} + +/** + * WPML plugin support: Set titles for custom types / taxonomies as translatable. + * + * It adds new keys to a wpml-config.xml file for a custom post type title, metadesc, + * title-ptarchive and metadesc-ptarchive fields translation. + * Documentation: http://wpml.org/documentation/support/language-configuration-files/ + * + * @global $sitepress + * + * @param array $config WPML configuration data to filter. + * + * @return array + */ +function wpseo_wpml_config( $config ) { + global $sitepress; + + if ( ( is_array( $config ) && isset( $config['wpml-config']['admin-texts']['key'] ) ) && ( is_array( $config['wpml-config']['admin-texts']['key'] ) && $config['wpml-config']['admin-texts']['key'] !== [] ) ) { + $admin_texts = $config['wpml-config']['admin-texts']['key']; + foreach ( $admin_texts as $k => $val ) { + if ( $val['attr']['name'] === 'wpseo_titles' ) { + $translate_cp = array_keys( $sitepress->get_translatable_documents() ); + if ( is_array( $translate_cp ) && $translate_cp !== [] ) { + foreach ( $translate_cp as $post_type ) { + $admin_texts[ $k ]['key'][]['attr']['name'] = 'title-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metadesc-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'title-ptarchive-' . $post_type; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metadesc-ptarchive-' . $post_type; + + $translate_tax = $sitepress->get_translatable_taxonomies( false, $post_type ); + if ( is_array( $translate_tax ) && $translate_tax !== [] ) { + foreach ( $translate_tax as $taxonomy ) { + $admin_texts[ $k ]['key'][]['attr']['name'] = 'title-tax-' . $taxonomy; + $admin_texts[ $k ]['key'][]['attr']['name'] = 'metadesc-tax-' . $taxonomy; + } + } + } + } + break; + } + } + $config['wpml-config']['admin-texts']['key'] = $admin_texts; + } + + return $config; +} + +add_filter( 'icl_wpml_config_array', 'wpseo_wpml_config' ); + +if ( ! function_exists( 'ctype_digit' ) ) { + /** + * Emulate PHP native ctype_digit() function for when the ctype extension would be disabled *sigh*. + * Only emulates the behaviour for when the input is a string, does not handle integer input as ascii value. + * + * @param string $text String input to validate. + * + * @return bool + */ + function ctype_digit( $text ) { + $return = false; + if ( ( is_string( $text ) && $text !== '' ) && preg_match( '`^\d+$`', $text ) === 1 ) { + $return = true; + } + + return $return; + } +} + +/** + * Makes sure the taxonomy meta is updated when a taxonomy term is split. + * + * @link https://make.wordpress.org/core/2015/02/16/taxonomy-term-splitting-in-4-2-a-developer-guide/ Article explaining the taxonomy term splitting in WP 4.2. + * + * @param string $old_term_id Old term id of the taxonomy term that was splitted. + * @param string $new_term_id New term id of the taxonomy term that was splitted. + * @param string $term_taxonomy_id Term taxonomy id for the taxonomy that was affected. + * @param string $taxonomy The taxonomy that the taxonomy term was splitted for. + * + * @return void + */ +function wpseo_split_shared_term( $old_term_id, $new_term_id, $term_taxonomy_id, $taxonomy ) { + $tax_meta = get_option( 'wpseo_taxonomy_meta', [] ); + + if ( ! empty( $tax_meta[ $taxonomy ][ $old_term_id ] ) ) { + $tax_meta[ $taxonomy ][ $new_term_id ] = $tax_meta[ $taxonomy ][ $old_term_id ]; + unset( $tax_meta[ $taxonomy ][ $old_term_id ] ); + update_option( 'wpseo_taxonomy_meta', $tax_meta ); + } +} + +add_action( 'split_shared_term', 'wpseo_split_shared_term', 10, 4 ); + +/** + * Get all WPSEO related capabilities. + * + * @since 8.3 + * @return array + */ +function wpseo_get_capabilities() { + if ( ! did_action( 'wpseo_register_capabilities' ) ) { + do_action( 'wpseo_register_capabilities' ); + } + return WPSEO_Capability_Manager_Factory::get()->get_capabilities(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php b/wp/wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php new file mode 100644 index 00000000..3563be68 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/inc/wpseo-non-ajax-functions.php @@ -0,0 +1,57 @@ +register_hooks(); +} +add_action( 'wp_loaded', 'wpseo_initialize_admin_bar' ); + +/** + * Allows editing of the meta fields through weblog editors like Marsedit. + * + * @param array $required_capabilities Capabilities that must all be true to allow action. + * @param array $capabilities Array of capabilities to be checked, unused here. + * @param array $args List of arguments for the specific capabilities to be checked. + * + * @return array Filtered capabilities. + */ +function allow_custom_field_edits( $required_capabilities, $capabilities, $args ) { + if ( ! in_array( $args[0], [ 'edit_post_meta', 'add_post_meta' ], true ) ) { + return $required_capabilities; + } + + // If this is provided, it is the post ID. + if ( empty( $args[2] ) ) { + return $required_capabilities; + } + + // If this is provided, it is the custom field. + if ( empty( $args[3] ) ) { + return $required_capabilities; + } + + // If the meta key is part of the plugin, grant capabilities accordingly. + if ( strpos( $args[3], WPSEO_Meta::$meta_prefix ) === 0 && current_user_can( 'edit_post', $args[2] ) ) { + $required_capabilities[ $args[0] ] = true; + } + + return $required_capabilities; +} + +add_filter( 'user_has_cap', 'allow_custom_field_edits', 0, 3 ); diff --git a/wp/wp-content/plugins/wordpress-seo/index.php b/wp/wp-content/plugins/wordpress-seo/index.php new file mode 100644 index 00000000..e94d9a42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/index.php @@ -0,0 +1,4 @@ +{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var a in s)e.o(s,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:s[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,s=window.wp.components,a=window.wp.data,r=window.wp.domReady;var i=e.n(r);const o=window.wp.element,n=window.yoast.uiLibrary,l=window.lodash,d=window.yoast.reduxJsToolkit,c="adminUrl",u=(0,d.createSlice)({name:c,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),y=(u.getInitialState,{selectAdminUrl:e=>(0,l.get)(e,c,"")});y.selectAdminLink=(0,d.createSelector)([y.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}})),u.actions,u.reducer;const m=window.wp.url,p="linkParams",g=(0,d.createSlice)({name:p,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),h=g.getInitialState,w={selectLinkParam:(e,t,s={})=>(0,l.get)(e,`${p}.${t}`,s),selectLinkParams:e=>(0,l.get)(e,p,{})};w.selectLink=(0,d.createSelector)([w.selectLinkParams,(e,t)=>t,(e,t,s={})=>s],((e,t,s)=>(0,m.addQueryArgs)(t,{...e,...s})));const f=g.actions,k=g.reducer,_=(0,d.createSlice)({name:"notifications",initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:s="default",title:a,description:r})=>({payload:{id:e||(0,d.nanoid)(),variant:t,size:s,title:a||"",description:r}})},removeNotification:(e,{payload:t})=>(0,l.omit)(e,t)}}),E=(_.getInitialState,_.actions,_.reducer,"pluginUrl"),b=(0,d.createSlice)({name:E,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),v=(b.getInitialState,{selectPluginUrl:e=>(0,l.get)(e,E,"")});v.selectImageLink=(0,d.createSelector)([v.selectPluginUrl,(e,t,s="images")=>s,(e,t)=>t],((e,t,s)=>[(0,l.trimEnd)(e,"/"),(0,l.trim)(t,"/"),(0,l.trimStart)(s,"/")].join("/"))),b.actions,b.reducer,window.wp.apiFetch;const S="wistiaEmbedPermission",L=(0,d.createSlice)({name:S,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${S}/request`,(e=>{e.status="loading"})),e.addCase(`${S}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${S}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,l.get)(t,"error.code",500),message:(0,l.get)(t,"error.message","Unknown")}}))}});L.getInitialState,L.actions,L.reducer;const A=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),P=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"}))})),O=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M10.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 11H5a1 1 0 110-2h7.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),x=window.wp.i18n,I="@yoast/academy",Q=(e,t=[],...s)=>(0,a.useSelect)((t=>{var a,r;return null===(a=(r=t(I))[e])||void 0===a?void 0:a.call(r,...s)}),t),$=(e,t)=>!(!(0,l.isEmpty)(e)&&!t)||Object.values(e).every((e=>!0===e)),M=()=>{const e=Q("selectLinkParams"),s=Q("selectPreference",[],"pluginUrl",""),a=Q("selectPreference",[],"isPremium",""),r=Q("selectPreference",[],"isWooActive",""),i=Q("selectPreference",[],"isLocalActive",""),d=Q("selectUpsellSettingsAsProps"),c=(0,n.useSvgAria)(),u=(0,o.useMemo)((()=>[{id:"ai_for_seo",title:"AI for SEO",description:(0,x.__)("Join the Yoast team to learn how to harness the power of AI to revolutionize your SEO approach. Gain a competitive edge, future-proof your keyword strategies, and soar to the top of search rankings – all designed to empower busy small business owners.","wordpress-seo"),image:`${s}/images/academy/ai_for_seo_icon_my_yoast.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/ai-for-seo-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/ai-for-seo-unlock",e),dependencies:{PREMIUM:a},hasTrial:!0},{id:"seo_for_beginners",title:"SEO for beginners",description:(0,x.__)("In this free course, you'll get quick wins to make your site rank higher in Google, Bing, and Yahoo.","wordpress-seo"),image:`${s}/images/academy/seo_for_beginners.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-seo-beginners-start",e),dependencies:{},hasTrial:!0},{id:"seo_for_wp",title:"Yoast SEO for WordPress (block editor)",description:(0,x.sprintf)(/* translators: %1$s expands to Yoast SEO. */ +(0,x.__)("In this course, you'll learn about how to set up and use the %1$s for WordPress plugin so it makes SEO even easier. This course is meant for users of the block editor.","wordpress-seo"),"Yoast SEO"),image:`${s}/images/academy/seo_for_wp.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-seo-wordpress-block-editor-start",e),dependencies:{},hasTrial:!0},{id:"all_around_seo",title:"All-around SEO",description:(0,x.__)("In this course, you'll learn practical SEO skills on every key aspect of SEO, to make your site stand out.","wordpress-seo"),image:`${s}/images/academy/all_around_seo.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-all-around-seo-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-all-around-seo-unlock",e),dependencies:{PREMIUM:a},hasTrial:!0},{id:"wp_for_beginners",title:"WordPress for beginners",description:(0,x.__)("Do you want to set up your own WordPress site? This course will teach you the ins and outs of creating and maintaining a WordPress website!","wordpress-seo"),image:`${s}/images/academy/wp_for_beginners.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-wordpress-beginners-start",e),dependencies:{},hasTrial:!0},{id:"copywriting",title:"SEO copywriting",description:(0,x.__)("In this course, you'll learn how to write awesome copy that is optimized for ranking in search engines.","wordpress-seo"),image:`${s}/images/academy/copywriting.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-seo-copywriting-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-seo-copywriting-unlock",e),dependencies:{PREMIUM:a},hasTrial:!0},{id:"structured_data_for_beginners",title:"Structured data for beginners",description:(0,x.__)("Learn how to make your site stand out from the crowd by adding structured data!","wordpress-seo"),image:`${s}/images/academy/structured_data_for_beginners.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-structured-data-beginners-start",e),dependencies:{},hasTrial:!0},{id:"keyword_research",title:"Keyword research",description:(0,x.__)("Do you know the essential first step of good SEO? It's keyword research. In this training, you'll learn how to research and select the keywords that will guide searchers to your pages.","wordpress-seo"),image:`${s}/images/academy/keyword_research.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-keyword-research-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-keyword-research-unlock",e),dependencies:{PREMIUM:a},hasTrial:!0},{id:"block_editor",title:"Block editor training",description:(0,x.__)("Start creating block-tastic content with the new WordPress block editor! Learn all about the block editor and what you can do with it.","wordpress-seo"),image:`${s}/images/academy/block_editor.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-block-editor-start",e),dependencies:{},hasTrial:!0},{id:"site_structure",title:"Site structure",description:(0,x.__)("A clear site structure benefits your users and is of great importance for SEO. Still, most people seem to forget about this. Get ahead of your competition and learn how to improve your site structure!","wordpress-seo"),image:`${s}/images/academy/site_structure.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-site-structure-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-site-structure-unlock",e),dependencies:{PREMIUM:a},hasTrial:!0},{id:"local",title:"Local SEO",description:(0,x.__)("Do you own a local business? This course will teach you how to make sure your local audience can find you in the search results and on Google Maps!","wordpress-seo"),image:`${s}/images/academy/local.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-local-seo-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-local-seo-unlock",e),dependencies:{LOCAL:i},hasTrial:!0},{id:"ecommerce",title:"Ecommerce SEO",description:(0,x.__)("Learn how to optimize your online shop for your customers and for search engines!","wordpress-seo"),image:`${s}/images/academy/ecommerce.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-ecommerce-seo-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-ecommerce-seo-unlock",e),dependencies:{WOO:r},hasTrial:!0},{id:"understanding_structured_data",title:"Understanding structured data",description:(0,x.__)("Do you want to take a deep dive into structured data? In this course, you'll learn the theory related to structured data in detail.","wordpress-seo"),image:`${s}/images/academy/understanding_structured_data.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-understanding-structured-data-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-understanding-structured-data-unlock",e),dependencies:{PREMIUM:a},hasTrial:!1},{id:"multilingual",title:"International SEO",description:(0,x.__)("Are you selling in countries all over the world? In this course, you’ll learn all about setting up and managing a site that targets people in different languages and locales.","wordpress-seo"),image:`${s}/images/academy/multilingual.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-international-seo-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-international-seo-unlock",e),dependencies:{PREMIUM:a},hasTrial:!0},{id:"crawlability",title:"Technical SEO: Crawlability and indexability",description:(0,x.__)("You have to make it possible for search engines to find your site, so they can display it in the search results. We'll tell you all about how that works in this course!","wordpress-seo"),image:`${s}/images/academy/crawlability.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-technical-seo-crawlability-indexability-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-technical-seo-crawlability-indexability-unlock",e),dependencies:{PREMIUM:a},hasTrial:!0},{id:"hosting_and_server",title:"Technical SEO: Hosting and server configuration",description:(0,x.__)("Choosing the right type of hosting for your site is the basis of a solid Technical SEO strategy. Learn all about it in this course!","wordpress-seo"),image:`${s}/images/academy/hosting_and_server.png`,startLink:(0,m.addQueryArgs)("https://yoa.st/academy-technical-seo-hosting-server-configuration-start",e),upsellLink:(0,m.addQueryArgs)("https://yoa.st/academy-technical-seo-hosting-server-configuration-unlock",e),dependencies:{PREMIUM:a},hasTrial:!1}]),[e]);return(0,t.createElement)("div",{className:"yst-p-4 min-[783px]:yst-p-8 yst-mb-8 xl:yst-mb-0"},(0,t.createElement)(n.Paper,{as:"main"},(0,t.createElement)("header",{className:"yst-p-8 yst-border-b yst-border-slate-200"},(0,t.createElement)("div",{className:"yst-max-w-screen-sm"},(0,t.createElement)(n.Title,null,(0,x.__)("Academy","wordpress-seo")),(0,t.createElement)("p",{className:"yst-text-tiny yst-mt-3"},a&&(0,x.sprintf)( +// translators: %s for Yoast SEO Premium. +(0,x.__)("Learn vital SEO skills that you can apply at once! Let us take you by the hand and give you practical SEO tips to help you outrank your competitors. Maximize your SEO game! Because your %s subscription gives you unlimited access to all courses.","wordpress-seo"),"Yoast SEO Premium"),!a&&(0,t.createElement)(t.Fragment,null,(0,x.sprintf)( +// translators: %s for Yoast SEO. +(0,x.__)("Learn vital SEO skills that you can apply at once! Let us take you by the hand and give you practical SEO tips to help you outrank your competitors. %s comes with five free courses.","wordpress-seo"),"Yoast SEO")," ",(0,t.createElement)(n.Link,{href:(0,m.addQueryArgs)("https://yoa.st/academy-page-upsell/",e),target:"_blank",...d},(0,x.sprintf)( +// translators: %s for Yoast SEO Premium. +(0,x.__)("Maximize your SEO game by purchasing %s, which grants you unlimited access to all courses.","wordpress-seo"),"Yoast SEO Premium")))))),(0,t.createElement)("div",{className:"yst-h-full yst-p-8"},(0,t.createElement)("div",{className:"yst-max-w-6xl yst-grid yst-gap-6 yst-grid-cols-1 sm:yst-grid-cols-2 min-[783px]:yst-grid-cols-1 lg:yst-grid-cols-2 xl:yst-grid-cols-4"},u.map((e=>(0,t.createElement)(n.Card,{key:`card-course-${e.id}`},(0,t.createElement)(n.Card.Header,{className:"yst-h-auto yst-p-0"},(0,t.createElement)("img",{className:"yst-w-full yst-transition yst-duration-200",src:e.image,alt:"",width:500,height:250,loading:"lazy",decoding:"async"}),((e,t)=>!(0,l.isEmpty)(e)&&(t||e.WOO||e.LOCAL))(e.dependencies,a)&&(0,t.createElement)("div",{className:"yst-absolute yst-top-2 yst-right-2 yst-flex yst-gap-1.5"},(0,t.createElement)(n.Badge,{size:"small",variant:"upsell"},(0,x.__)("Premium","wordpress-seo")))),(0,t.createElement)(n.Card.Content,{className:"yst-flex yst-flex-col yst-gap-3"},(0,t.createElement)(n.Title,{as:"h3"},e.title),e.description,!$(e.dependencies,a)&&(0,t.createElement)(n.Link,{href:e.startLink,className:"yst-flex yst-items-center yst-mt-3 yst-no-underline yst-font-medium yst-text-primary-500",target:"_blank"},(0,x.__)("Start free trial lesson","wordpress-seo"),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,x.__)("(Opens in a new browser tab)","wordpress-seo")),(0,t.createElement)(O,{className:"yst-h-4 yst-w-4 yst-ml-1 yst-icon-rtl"}))),(0,t.createElement)(n.Card.Footer,null,(0,t.createElement)(t.Fragment,null,!$(e.dependencies,a)&&(0,t.createElement)(n.Button,{as:"a",id:`button-get-course-${e.id}`,className:"yst-gap-2 yst-w-full yst-px-2",variant:"upsell",href:null==e?void 0:e.upsellLink,target:"_blank",rel:"noopener",...d},(0,t.createElement)(A,{className:"yst-w-5 yst-h-5 yst--ml-1 yst-shrink-0",...c}),(0,x.sprintf)(/* translators: %1$s expands to Premium. */ +(0,x.__)("Unlock with %1$s","wordpress-seo"),"Premium")),$(e.dependencies,a)&&(0,t.createElement)(n.Button,{as:"a",id:`button-start-course-${e.id}`,className:"yst-gap-2 yst-w-full yst-px-2 yst-leading-5",variant:"primary",href:e.startLink,target:"_blank",rel:"noopener"},(0,x.__)("Start the course","wordpress-seo"),(0,t.createElement)(P,{className:"yst--mr-1 yst-ml-1 yst-h-5 yst-w-5 yst-text-white"})))))))))))},T=()=>({...(0,l.get)(window,"wpseoScriptData.preferences",{})}),U=(0,d.createSlice)({name:"preferences",initialState:T(),reducers:{}}),R={selectPreference:(e,t,s={})=>(0,l.get)(e,`preferences.${t}`,s),selectPreferences:e=>(0,l.get)(e,"preferences",{})};R.selectUpsellSettingsAsProps=(0,d.createSelector)([e=>R.selectPreference(e,"upsellSettings",{}),(e,t="premiumCtbId")=>t],((e,t)=>({"data-action":null==e?void 0:e.actionId,"data-ctb-id":null==e?void 0:e[t]})));const N=U.actions,C=U.reducer;i()((()=>{const e=document.getElementById("yoast-seo-academy");if(!e)return;(({initialState:e={}}={})=>{(0,a.register)((({initialState:e})=>(0,a.createReduxStore)(I,{actions:{...f,...N},selectors:{...w,...R},initialState:(0,l.merge)({},{[p]:h(),preferences:T()},e),reducer:(0,a.combineReducers)({[p]:k,preferences:C})}))({initialState:e}))})({initialState:{[p]:(0,l.get)(window,"wpseoScriptData.linkParams",{})}}),(()=>{const e=document.getElementById("wpcontent"),t=document.getElementById("adminmenuwrap");e&&t&&(e.style.minHeight=`${t.offsetHeight}px`)})();const r=(0,a.select)(I).selectPreference("isRtl",!1);(0,o.render)((0,t.createElement)(n.Root,{context:{isRtl:r}},(0,t.createElement)(s.SlotFillProvider,null,(0,t.createElement)(M,null))),e)}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/addon-installation.js b/wp/wp-content/plugins/wordpress-seo/js/dist/addon-installation.js new file mode 100644 index 00000000..2503cf3a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/addon-installation.js @@ -0,0 +1,7 @@ +(()=>{"use strict";var e={n:n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return e.d(t,{a:t}),t},d:(n,t)=>{for(var o in t)e.o(t,o)&&!e.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:t[o]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n)};const n=window.React,t=window.wp.element,o=window.yoast.propTypes;var a=e.n(o);const s=window.yoast.componentsNew,l=window.wp.i18n,i=window.yoast.styledComponents;var r=e.n(i);const d=window.wp.components,c=e=>{const{title:t,className:o,showYoastIcon:a,additionalClassName:s,...l}=e,i=a?(0,n.createElement)("span",{className:"yoast-icon"}):null;return(0,n.createElement)(d.Modal,{title:t,className:`${o} ${s}`,icon:i,...l},e.children)};c.propTypes={title:a().string,className:a().string,showYoastIcon:a().bool,children:a().oneOfType([a().node,a().arrayOf(a().node)]),additionalClassName:a().string},c.defaultProps={title:"Yoast SEO",className:"yoast yoast-gutenberg-modal",showYoastIcon:!0,children:null,additionalClassName:""};const p=c;var m,w;function u(){return u=Object.assign?Object.assign.bind():function(e){for(var n=1;nn.createElement("svg",u({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 425 456.27"},e),m||(m=n.createElement("path",{d:"M73 405.26a66.79 66.79 0 0 1-6.54-1.7 64.75 64.75 0 0 1-6.28-2.31c-1-.42-2-.89-3-1.37-1.49-.72-3-1.56-4.77-2.56-1.5-.88-2.71-1.64-3.83-2.39-.9-.61-1.8-1.26-2.68-1.92a70.154 70.154 0 0 1-5.08-4.19 69.21 69.21 0 0 1-8.4-9.17c-.92-1.2-1.68-2.25-2.35-3.24a70.747 70.747 0 0 1-3.44-5.64 68.29 68.29 0 0 1-8.29-32.55V142.13a68.26 68.26 0 0 1 8.29-32.55c1-1.92 2.21-3.82 3.44-5.64s2.55-3.58 4-5.27a69.26 69.26 0 0 1 14.49-13.25C50.37 84.19 52.27 83 54.2 82A67.59 67.59 0 0 1 73 75.09a68.75 68.75 0 0 1 13.75-1.39h169.66L263 55.39H86.75A86.84 86.84 0 0 0 0 142.13v196.09A86.84 86.84 0 0 0 86.75 425h11.32v-18.35H86.75A68.75 68.75 0 0 1 73 405.26zM368.55 60.85l-1.41-.53-6.41 17.18 1.41.53a68.06 68.06 0 0 1 8.66 4c1.93 1 3.82 2.2 5.65 3.43A69.19 69.19 0 0 1 391 98.67c1.4 1.68 2.72 3.46 3.95 5.27s2.39 3.72 3.44 5.64a68.29 68.29 0 0 1 8.29 32.55v264.52H233.55l-.44.76c-3.07 5.37-6.26 10.48-9.49 15.19L222 425h203V142.13a87.2 87.2 0 0 0-56.45-81.28z"})),w||(w=n.createElement("path",{stroke:"#000",strokeMiterlimit:10,strokeWidth:3.81,d:"M119.8 408.28v46c28.49-1.12 50.73-10.6 69.61-29.58 19.45-19.55 36.17-50 52.61-96L363.94 1.9H305l-98.25 272.89-48.86-153h-54l71.7 184.18a75.67 75.67 0 0 1 0 55.12c-7.3 18.68-20.25 40.66-55.79 47.19z"}))),y=r().div` + display: flex; + justify-content: flex-end; + gap: 8px; +`,f=e=>{const[o,a]=(0,t.useState)(!0);function i(){a(!1)}const r=(0,l.sprintf)(/* translators: %s expands to Yoast */ +(0,l.__)("%s SEO installation","wordpress-seo"),"Yoast");let d,c=(0,l.__)("the following addons","wordpress-seo");return 1===e.addons.length&&(c=e.addons[0]),1!==e.addons.length&&(d=(0,n.createElement)("ul",{className:"ul-disc"},e.addons.map(((e,t)=>(0,n.createElement)("li",{key:"addon-"+t},e))))),o?(0,n.createElement)(p,{title:r,onRequestClose:i,icon:(0,n.createElement)(h,null),isDismissible:!1},(0,n.createElement)("p",null,(0,l.sprintf)(/* translators: %s expands to Yoast SEO Premium */ +(0,l.__)("Please confirm below that you would like to install %s on this site.","wordpress-seo"),c)),d,(0,n.createElement)(y,null,(0,n.createElement)(s.Button,{onClick:i,id:"close-addon-installation-dialog"},(0,l.__)("Cancel","wordpress-seo")),(0,n.createElement)(s.Button,{onClick:function(){window.location.href="admin.php?page=wpseo_licenses&action=install&nonce="+e.nonce},id:"continue-addon-installation-dialog",className:"yoast-button--primary"},(0,l.__)("Install and activate","wordpress-seo")))):null};f.propTypes={nonce:a().string.isRequired,addons:a().array},f.defaultProps={addons:[]};const g=f,v=document.createElement("div");v.setAttribute("id","wpseo-app-element"),document.getElementById("extensions").append(v),(0,t.render)((0,n.createElement)(g,{nonce:wpseoAddonInstallationL10n.nonce,addons:wpseoAddonInstallationL10n.addons}),v)})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/admin-global.js b/wp/wp-content/plugins/wordpress-seo/js/dist/admin-global.js new file mode 100644 index 00000000..cd015e9a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/admin-global.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={n:o=>{var a=o&&o.__esModule?()=>o.default:()=>o;return t.d(a,{a}),a},d:(o,a)=>{for(var e in a)t.o(a,e)&&!t.o(o,e)&&Object.defineProperty(o,e,{enumerable:!0,get:a[e]})},o:(t,o)=>Object.prototype.hasOwnProperty.call(t,o)};const o=window.jQuery;var a=t.n(o);!function(t){function o(t,o,e){const s=new FormData,n={action:"wpseo_set_ignore",option:t,_wpnonce:e};for(const[t,o]of Object.entries(n))s.append(t,o);return fetch(ajaxurl,{method:"POST",body:s}).then((e=>(e&&(a()("#"+o).hide(),a()("#hidden_ignore_"+t).val("ignore")),e)))}function e(){t("#wp-admin-bar-root-default > li").off("mouseenter.yoastalertpopup mouseleave.yoastalertpopup"),t(".yoast-issue-added").fadeOut(200)}function s(o,a){if(t(".yoast-notification-holder").off("click",".restore").off("click",".dismiss"),void 0!==a.html){a.html&&(o.closest(".yoast-container").html(a.html),n());var e=t("#wp-admin-bar-wpseo-menu"),s=e.find(".yoast-issue-counter");s.length||(e.find("> a:first-child").append('
      '),s=e.find(".yoast-issue-counter")),s.html(a.total),0===a.total?s.hide():s.show(),t("#toplevel_page_wpseo_dashboard .update-plugins").removeClass().addClass("update-plugins count-"+a.total),t("#toplevel_page_wpseo_dashboard .plugin-count").html(a.total)}}function n(){var o=t(".yoast-notification-holder");o.on("click",".dismiss",(function(){var o=t(this),a=o.closest(".yoast-notification-holder");o.closest(".yoast-container").append('
      '),t.post(ajaxurl,{action:"yoast_dismiss_notification",notification:a.attr("id"),nonce:a.data("nonce"),data:o.data("json")||a.data("json")},s.bind(this,a),"json")})),o.on("click",".restore",(function(){var o=t(this),a=o.closest(".yoast-notification-holder");o.closest(".yoast-container").append('
      '),t.post(ajaxurl,{action:"yoast_restore_notification",notification:a.attr("id"),nonce:a.data("nonce"),data:a.data("json")},s.bind(this,a),"json")}))}function i(t){t.is(":hidden")||(t.outerWidth()>t.parent().outerWidth()?(t.data("scrollHint").addClass("yoast-has-scroll"),t.data("scrollContainer").addClass("yoast-has-scroll")):(t.data("scrollHint").removeClass("yoast-has-scroll"),t.data("scrollContainer").removeClass("yoast-has-scroll")))}function l(){window.wpseoScrollableTables=t(".yoast-table-scrollable"),window.wpseoScrollableTables.length&&window.wpseoScrollableTables.each((function(){var o=t(this);if(!o.data("scrollContainer")){var a=t("
      ",{class:"yoast-table-scrollable__hintwrapper",html:"
      ",{class:"yoast-table-scrollable__container",html:"
      "}).insertBefore(o);a.find(".yoast-table-scrollable__hint").text(wpseoAdminGlobalL10n.scrollable_table_hint),o.data("scrollContainer",e),o.data("scrollHint",a),o.appendTo(e.find(".yoast-table-scrollable__inner")),i(o)}}))}a()(document).ready((function(){a()(".yoast-dismissible").on("click",".yoast-notice-dismiss",(function(){var t=a()(this).parent();return a().post(ajaxurl,{action:t.attr("id").replace(/-/g,"_"),_wpnonce:t.data("nonce"),data:t.data("json")}),a().post(ajaxurl,{action:"yoast_dismiss_notification",notification:t.attr("id"),nonce:t.data("nonce"),data:t.data("json")}),t.fadeTo(100,0,(function(){t.slideUp(100,(function(){t.remove()}))})),!1})),a()(".yoast-help-button").on("click",(function(){var t=a()(this),o=a()("#"+t.attr("aria-controls")),e=o.is(":visible");a()(o).slideToggle(200,(function(){t.attr("aria-expanded",!e)}))})),a()("button#robotsmessage-dismiss-button").on("click",(function(){o("search_engines_discouraged_notice","robotsmessage",a()(this).data("nonce")).then((()=>{window.location.href.includes("page=wpseo_dashboard")&&window.location.reload()}))}))})),window.wpseoSetIgnore=o,window.wpseoDismissLink=function(t){return a()('Dismiss this notice.')},t(window).on("wp-window-resized orientationchange",(function(){window.wpseoScrollableTables&&window.wpseoScrollableTables.length&&window.wpseoScrollableTables.each((function(){i(t(this))}))})),t(window).on({"Yoast:YoastTabsMounted":function(){setTimeout((function(){l()}),100)},"Yoast:YoastTabsSelected":function(){setTimeout((function(){l()}),100)}}),t(document).ready((function(){t(".yoast-issue-added").on("mouseenter mouseleave",(function(t){t.stopPropagation(),e()})).fadeIn(),t("#wp-admin-bar-root-default > li").on("mouseenter.yoastalertpopup mouseleave.yoastalertpopup",e),setTimeout(e,3e3),n(),function(){const t=a()(".wpseo-js-premium-indicator"),o=t.find("svg");if(t.hasClass("wpseo-premium-indicator--no")){const a=o.find("path"),e=t.css("backgroundColor");a.css("fill",e)}o.css("display","block"),t.css({backgroundColor:"transparent",width:"20px",height:"20px"})}(),l(),function(){const t=a()(".yoast-issue-counter .yoast-issues-count").first(),o=a()("#toplevel_page_wpseo_dashboard .plugin-count");if(t.text()===o.first().text())return;const e=a()("#toplevel_page_wpseo_dashboard .update-plugins"),s=a()(".yoast-issue-counter .screen-reader-text").first(),n=a()("#toplevel_page_wpseo_dashboard .update-plugins .screen-reader-text");if(t.length)return o.text(t.text()),e.removeClass().addClass("update-plugins count-"+t.text()),void n.text(s.text());o.text("0"),e.removeClass().addClass("update-plugins count-0"),n.remove()}()}))}(a())})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/admin-modules.js b/wp/wp-content/plugins/wordpress-seo/js/dist/admin-modules.js new file mode 100644 index 00000000..67739b3a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/admin-modules.js @@ -0,0 +1,4 @@ +(()=>{"use strict";var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var l in a)e.o(a,l)&&!e.o(t,l)&&Object.defineProperty(t,l,{enumerable:!0,get:a[l]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,a=window.yoast.propTypes;var l=e.n(a);const c=window.wp.i18n,r=window.wp.data,n=window.wp.element,s=window.yoast.componentsNew,i=window.yoast.helpers;function o({name:e,title:a,subtitle:l,usps:o,id:m,image:p,finishableSteps:d,finishedSteps:u,upsellLink:h,upsellText:f,workout:z,badges:E}){const{openWorkout:w,toggleWorkout:M}=(0,r.useDispatch)("yoast-seo/workouts"),g=(0,r.useSelect)((e=>e("yoast-seo/workouts").getActiveWorkout()),[]),[k,F]=(0,n.useState)(!1),y=z,v=p;(0,n.useEffect)((()=>{d&&u&&u.length===d.length?F(!0):F(!1)}),[u,d]);const b=(0,n.useMemo)((()=>u&&0!==u.length?u.length{w(e),k&&M(e)}),[z,k,w,M]),A=(0,i.makeOutboundLink)(),C=f||(0,c.sprintf)(/* translators: %s : Expands to the add-on name. */ +(0,c.__)("Unlock with %s!","wordpress-seo"),"Premium"),_=z?"":" card-disabled";return(0,t.createElement)(n.Fragment,null,!g&&(0,t.createElement)("div",{id:m,className:`card card-small${_}`},(0,t.createElement)("h2",null,a," ",E),(0,t.createElement)("h3",null,l),(0,t.createElement)("div",{className:"workout-card-content-flex"},(0,t.createElement)("ul",{id:`${m}-usp-list`,className:"yoast-list--usp"},o.map(((e,a)=>(0,t.createElement)("li",{id:`${m}-usp-${a}`,key:`${m}-${a}`},e)))),p&&(0,t.createElement)(v,null)),(0,t.createElement)("span",null,z&&(0,t.createElement)(s.NewButton,{id:`${m}-action-button`,className:"yoast-button yoast-button--"+(k?"secondary":"primary"),onClick:B},b),!z&&(0,t.createElement)(A,{id:`${m}-upsell-button`,href:h,className:"yoast-button yoast-button-upsell","data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2"},C,(0,t.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),d&&u&&(0,t.createElement)("div",{className:"workout-card-progress"},(0,t.createElement)(s.ProgressBar,{id:`${m}-progress`,max:d.length,value:u.length}),(0,t.createElement)("label",{htmlFor:`${m}-progress`},(0,t.createElement)("i",null,(0,c.sprintf)( +// translators: %1$s: number of finished steps, %2$s: number of finishable steps +(0,c.__)("%1$s/%2$s steps completed","wordpress-seo"),u.length,d.length)))))),z&&g===e&&(0,t.createElement)(y,null))}var m;function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",p({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 296 317"},e),m||(m=t.createElement("g",{fill:"none",transform:"matrix(-1 0 0 1 295.274 .96)"},t.createElement("circle",{cx:131.18,cy:184.261,r:131.18,fill:"#F0ECF0"}),t.createElement("g",{fill:"#EAB881"},t.createElement("path",{d:"M236.42 96.56c-.15-.43-.29-.87-.44-1.3.15.43.29.87.44 1.3zm-31.98 59.96a11 11 0 0 0-2.11.82c.67-.3 1.4-.56 2.11-.82zm-2.11.82a58.65 58.65 0 0 0-6 2.81c2.67-1.11 4.56-2.11 6-2.81z"}),t.createElement("path",{d:"M293.49 164.27c-8.58-10.51-1.05-27.75-34.52-86.31-3-5.22-5.26-14.52-12.85-17.58-9.11-3.67-12.77-9.16-21.89-12.83-6.85-2.76-4-1.36-3.21-.49 1.49 1.67-2-1.31-5.72 7.13-.38.85 2.86 1.63 4 5 .36 1.07.49 1.14 1.23 1.33 4.71 1.2 6.52 6.89 4.2 10.06-.7-1.43.18-6-4.68-6.36 2 1.44 4.06 3.42 4 5.88 9.4 16.64 17.56 14 20 15 12.43 4.92-17.28 64.57 23 86.13-7.34-1.94-14.31-5.46-23.92-1.33 7.28-5.53 2.46-7.57.86-10.89-2.17-2.92-2.29-11.71-2.6-22.62a103.2 103.2 0 0 0 1.09 20.32 54.8 54.8 0 0 0-38-.12c5.19-1.21 15.45 48.34 20.15 53.9 3.8-1.4 23-8.57 35.17-14.11 21.52-9.81 34.94-25.76 35.44-28.31.24-1.47-.85-2.71-1.75-3.8zm-41.62-99.13c.06.1 8.87 19.59.56 1.21-.2-.44-.38-.84-.56-1.21z"}),t.createElement("path",{d:"M215.17 56.04c.46.17 2 1.49-.23-.93-.88 2.39-.6 4.42 2 6.74 1.06-3 0-3.51-1.77-5.81zm-4.33 23.82c.28-.07.36.05-.35-.38l.35.38z"})),t.createElement("path",{fill:"#D38053",d:"M203.74 73.77c0 .4-.33-.06 2.94 2.38l-2.94-2.38zm5.26 4.27c2.3 2 3.13 2.53 2.19 1.77L209 78.04zm6.17-22c.05.06 1.79 2.31 1.83 2.38-.49-1.27-.83-2.01-1.83-2.38zm-.52 11.73c1.38-.08.73 1.34 2.16-.5.52-.67 1.91-3.21.71-2.6.56-2.33-.09-6.71-.19-4.75-.13 2.46-3.7 10.77-8.67 9.87a7.6 7.6 0 0 0 3.25.22c2.74-.39 2.36-.97 2.74-2.24zm-5.99 2.02a6.27 6.27 0 0 1-1.42-.59c.42.309.906.51 1.42.59z"}),t.createElement("path",{fill:"#D38053",d:"M214.2 69.33a4.13 4.13 0 0 1-.85 3.73c3.38-1.27 3.66-3.51 2.48-4.78-1.18-1.27-1.34.03-1.63 1.05zm-32.31 1.85c.11.84 2.61 2.33 3.3 2.78a13.33 13.33 0 0 1-3.3-2.78zm10 4.39c-.21.13-.45.1.31 0-.28-.12-.13-.1-.31 0zm-6.51-1.53a29.79 29.79 0 0 0 4.51 2.28c2.54-1.52.8.82-4.51-2.28z"}),t.createElement("path",{fill:"#EAB881",d:"M202.61 77.13c-.91.35-5.67.26-10.41-1.57-6.74 1-6.41 12.08-1 12.4 8.18.48 10.11 3 13.48 1.92 6.82-2.28 2.4-11.62-2.07-12.75z"}),t.createElement("path",{fill:"#D38053",d:"M217.52 64.67a4.92 4.92 0 0 1 2.54-.48c4.87.36 4 5 4.68 6.36 2.31-3.16.52-8.86-4.2-10.06-2.25-.57.56-2.91-7.86-7.27a10.79 10.79 0 0 1 4.84 11.45zm15.23 112.51c-6.79 1.78-17.9 1.65-21-5.2 3.71 11.1 9 26.86 12.86 37.68 2.88-.89 7.41-1.86 8.89-3.4-3.52-4.16-8.67-10.41-8.74-15.89-.07-5.48 2.92-11.16 7.99-13.19zm-26.31-20.36c-.14.17-.15 0 .53 1.27-.18-.46-.35-.89-.53-1.27z"}),t.createElement("path",{fill:"#D38053",d:"M246.11 86.55c-2.26-3.64-4.21.58 2.23-3.3-10.49 4.56-18.5-2.9-24.34-13.21-.05 1.82-1.23 3.13-2.61 4.36-9.64 8.64-10.89 4.95-12.39 3.64-8-7-3.86-2.44-6.09-1-.71.46 4.08 1 5.31 7.11a5.26 5.26 0 0 1-2.67 5.38c7.41 5.8 14.7 2.46 25.68-4.09 14.67 22.17 7.38 66.27 12.78 73.54 1.6 3.32 6.42 5.36-.86 10.89 9.61-4.13 16.58-.61 23.92 1.33-37.63-20.16-14.29-73.91-20.96-84.65z"}),t.createElement("path",{fill:"#A52A6A",d:"M190.92 211.52a81.3 81.3 0 0 0-9.26-12.14c6.41 7.94 17.18 24.84 9.26 12.14z"}),t.createElement("path",{fill:"#A52A6A",d:"M205.85 156.04c-31.36 13.6-26.45 13.21-42 8.34-18.87-5.91-37.14-.76-32.1-1.07 11.82-.72 29.07 49.31 35.44 66.88l62.17-10.35c.64 7.64-20.9-59.34-23.51-63.8z"}),t.createElement("path",{fill:"#7C2050",d:"M214.23 180.31c-8.73 13.9-32.09 11.23-35.71-4.78 8 32.54 8.23 20.07-9.5 9.69 25.36 25.8 22.47 41.74 28.27 44.5 3.49 1.65 13.65-3.77 26.3-7.69 3.3-1 4.88-1.61 4.76-2.19l-14.12-39.53z"}),t.createElement("path",{fill:"#EAB881",d:"M192.93 72.9a3 3 0 0 1-.92 2.58 25.5 25.5 0 0 0 9.52 1.8c2.47-.02.6.27-8.6-4.38z"}),t.createElement("path",{fill:"#EAB881",d:"M220.06 64.19c-3.36-.25-1 1.37-4.23 4.09 1.18 1.27.9 3.51-2.48 4.78a4.07 4.07 0 0 0 .85-3.73c-2.67 1.26-5.78.74-7-.13 4.38 2.46 8.07-2.64 9.69-7.37-2.58-2.31-2.87-4.34-2-6.74-1.19-1.31-4.4-3.35.19-.49a25 25 0 0 1 2.94-5.18c1.27-1.71 5.22-.83 1.65-3.46-1.76-1.3-8.08-2.63-8.81-2.59a4.11 4.11 0 0 0-3.06 1.53c-4.33-1.59-9.29-1.86-11.78 2-4.24-3.58-9.38 2.15-7.77 6.69 1.44 4-1.86.15-7.06 14.62-1.27 3.54 5.07 7 8.77 7.58 7.7 1.25-18.75-8.93 2.24-.45 3.4 2.66 5.28 1.49 10.44 1.8 1.08-.47 1-1.92 1.05-3.09 0-1.84 6.81 8.52 10.32 5.44 8.71-4.45 13.99-9.58 6.05-15.3z"}),t.createElement("path",{fill:"#EAB881",d:"M192.51 69.95c.38.94.28.45 0-2.57a4.18 4.18 0 0 0 0 2.57z"}),t.createElement("path",{fill:"#D38053",d:"M194.68 57.19a15.87 15.87 0 0 0 .36-1.77c-.14.62-.25 1.18-.36 1.77z"}),t.createElement("path",{fill:"#A52A6A",d:"M59 167.04c-7.75 3.79-5.09 3.25-3.46 3.59a74.937 74.937 0 0 0 3.46-3.59zm69-3.33-.77-.17c.242.112.504.17.77.17z"}),t.createElement("path",{fill:"#A52A6A",d:"M200.06 262.44c1.23-17.17 10-35.47-31-77.22-8.89-9-13.84-13.86-31.69-19.13 6.35 7.45-.5 40.2-3.43 38.36-25.84-16.17-70.31-19.82-79.39-32.84 6.7-6.24-28.46 5.48-39.7 16.24-3.57 3.42-8.13 12.77-12.22 22.43 8.53 42.43 41.23 74.66 42.5 72 3.64-7.7 7.17-15.66 6.64-14.47 11.84 12.23 19.29 19.48 23.78 35.23A131 131 0 0 0 201 295.25c-.06-16.21-1.3-27.79-.94-32.81zm-145.78-.4c.1 0 0-.08-1.06 2.38.36-.79.71-1.59 1.06-2.38z"}),t.createElement("path",{fill:"#7C2050",d:"M53.29 267.84c5.65 7.53 33.06 17 44.3 27a280 280 0 0 1-35.06-36.66 203.23 203.23 0 0 0 49.54 9.79l-47.15-13.12c.667-5.7 1.333-11.393 2-17.08-3.35 4.49-11.74 22.07-13.63 30.07zm125.12-18.17c-12.42-1.14-45.91 6.44-50.79 17 18.32-12.22 51.08-16.81 54.55.56-.17-1.02 12.83-16.03-3.76-17.56z"}),t.createElement("path",{fill:"#EAB881",d:"M124.39 155.75c0 .21.1.43.16.64-.06-.21-.11-.43-.16-.64zm-57.05-39.34c-.59 0-.52-.25 0 1.56 1.53 2.37.74 1.51 0-1.56zm56.8 38.33.12.46-.12-.46zm-69.63 16.87c9.09 13 53.53 16.65 79.39 32.84 2.16 1.35 8.75-21.75 4.69-36.08-1.9-6.72-10.19-4.65-10.62-4.66-1 0-1.46-.64-1.83-1.66-.68-1.91-1.52-5.36-1.48-5.21-1.23 4.07-1.68 6.59-3.49 7.5-6.48 3.24-37.85-9.4-52.25-41 .62 2.53 1.06 5.26-1 3.64 3.8 16.54 5.92 26.64-13.41 44.63z"}),t.createElement("path",{fill:"#D38053",d:"M107.65 148.64c-20.65-5.6-33.72-12.94-37.72-32.87-3.26 1.48-3.22-1.55-1 7.6 14.4 31.56 45.77 44.21 52.25 41 2.15-1.07 3.54-7.31 3.38-8-2.21-8.85 2.2-2.53-16.91-7.73z"}),t.createElement("path",{fill:"#EAB881",d:"M140.75 66.31c-3-9.44-7.65-19.56-11.74-25.21a15.73 15.73 0 0 1-8.82-3.17c-7.48 8.26-15.45 4.83-16.65 0-1.68 5.91-9.62 9-14.83 5.74a6.35 6.35 0 0 0 4.78-2.95 18.42 18.42 0 0 1-15.21-2.12c-6-.8-4.66-.93-1.31 4.28 7.29 11.35 4.24 15-4.14 23.72C62.7 77.12 70.69 82.04 74 85.14c6.7 6.17 1.74 13-5.65 12.35 4.88 8.65 5.25 9.2 5.41 10.7.34 3.25-1 6.28-3.86 7.58 4 19.73 16.77 27.17 37.72 32.87 6.48 1.76 13.43 3.33 20 1.88 6.57-1.45 12.87-6.74 13.24-13.51.22-4.11-1.69-10-1.26-14 .68-6.64 5.94-5 6.24-21a112.12 112.12 0 0 0-5.1-35.45"}),t.createElement("path",{fill:"#D38053",d:"M121.63 67.04c-.14 1.89.33 11.5 1.43 14.94 2.29 7.11 7.13 6.6 10.67 8.13 4.36 1.9 5.64 6.66-1.58 8.75-3.85 1.12-7.92 2.25-11.82 1.33 1.4 1.63 3.81 1.84 6 1.84 14.73 0 15.5-9 13.14-12.25-3.67-5.06-12.38-1.31-15.58-12.81-.81-2.74.11-8.51-2.26-9.93z"}),t.createElement("path",{fill:"#000",d:"M110.39 112.3c-10.66-3-13.86-7.32-14.77-5.86-1.15 1.83 18.2 12.62 29.48 6.84-5.03.06-9.69.44-14.71-.98zM86.23 73.61c1.75 0 7-6 8.82-7.15 3.63-2.2 7.63-1.08 11.78-2-.51-1.34-3.51-5.43-4.18-5.29-3.17.68-9.2.3-9.2.3s-13.18 14.27-7.22 14.14zm39.37-15.85c-5.09.43-3.23 1.61-2.29 5.5a18.92 18.92 0 0 1 17.63 3.35c-5.31-8.47-9.64-9.34-15.34-8.85z"}),t.createElement("path",{fill:"#FFF",d:"M91.39 85.5c4.56 6.52 15.3 4.23 18.45-1.77-.92-5.69-16.99-9.33-18.45 1.77zm9.87 1.69c-6.09 3.06-8.18-7.15-1.85-7.15 4.07 0 5.74 5.19 1.85 7.15zm25.58-4.58c2.38 3.65 14 2.53 14.28-3.35-4.19-9.42-16-4.69-14.28 3.35zm8.47-1.63a3.56 3.56 0 0 1-5.31 1.29c-2.29-1.87-1-6.45 2.58-6a3.57 3.57 0 0 1 2.73 4.71z"}),t.createElement("path",{fill:"#000",d:"M126.72 79.53c1.76-6.07 10.8-8.36 14.4-.27 1.07 2.38.95-6.79-5.3-7.23-3.92-.28-10.17.09-9.49 10a11.4 11.4 0 0 1 .39-2.5zm-27.31.51c-6.34 0-4.24 10.2 1.85 7.15 3.89-1.95 2.23-7.15-1.85-7.15z"}),t.createElement("path",{fill:"#000",d:"M132.6 76.26c-3.61-.44-4.87 4.14-2.58 6a3.4 3.4 0 1 0 2.58-6zm-63.68 47.11c-2.54-10.52-.32-4.66-9.77-9 5.12 9 12.19 18.98 9.77 9zM129 41.1c5.48 7.57 6.11 13.42 5.52 9.56a51.53 51.53 0 0 0-2.44-9.71 16.7 16.7 0 0 1-3.08.15z"}),t.createElement("path",{fill:"#000",d:"M137.16 26.23c3.42-12.58-5.26-13.54-7.57-11.18A10.51 10.51 0 0 0 113.3 5.04c-3.11-5.35-12.48-8.78-24.25 2.14C88-.5 72.44 1.9 70.12 17.68c-5.8 1.09-8.67 4.26-10 6.8-5.74.56-24.3 24.19-25.12 32.06-.51 4.69 2 9.11 3.31 13.65.84 2.89 1.22 6 2.75 8.59 4 6.77 0 3.56 5 2.71 4.44-.75 16.29 5.15 22.4 16 3.66.32 7.38-.9 8.67-5.17 1.72-5.69-6.59-8.6-8.54-13.18-4.08-9.57 10.77-15 12.37-23.84 1-5.78-3.41-11.93-7.06-17.09 1.24 0 2.7.15 4.46.38-.16-.1-.3-.21-.45-.32a17.59 17.59 0 0 0 15.66 2.44 6.35 6.35 0 0 1-4.78 2.95c5.21 3.24 13.15.17 14.83-5.74 1.2 4.84 9.14 8.31 16.65 0a16.12 16.12 0 0 0 18.08.78 11.39 11.39 0 0 1-5.61-4.34c3.19.61 6.37-1.64 7.88-4.5 1.51-2.86 1.74-6.22 1.9-9.46a9.68 9.68 0 0 1-5.36 5.83zm-77.44 3.81-.08-.11.08.11zm-.5-3.51v.09c0-.37.06-.82.09-1.36-.05.48-.07.89-.09 1.24v.03zm14.53 7.72a18.09 18.09 0 0 0 4.06 4 16.75 16.75 0 0 1-4.06-4.03v.03zm-.59-.86.24.35-.24-.35z"}),t.createElement("path",{fill:"#000",d:"M97.49 76.04c-3.73.6-7.38 4.53-6.58 9 1-2.29 1.84-4.94 5.06-6.12 4.28-1.56 11.29-.39 13.75 4.36 1.38 2.65.02-9.24-12.23-7.24z"}),t.createElement("path",{fill:"#EAB881",d:"M73.79 108.19c-.16-1.5-.53-2.05-5.41-10.7-6.11-10.84-17.95-16.75-22.38-16-7.48 1.27-15.82 21.55 15.3 33.82 8.33 3.28 13.12-1.13 12.49-7.12z"}),t.createElement("path",{fill:"#D38053",d:"M96 105.92c2.11-2.9 10.26 2.05 16.39-5.72.79-1 1.41-4 3.31-3.71-5.06-.88-6.61 8.28-14.23 6.32-3.12-.81-9-5.15-10 11.67a58.56 58.56 0 0 1 4.53-8.56zm-33.55-5.55c4.3-10.34-20.92-21.24-19.6-7 .3 3.21 2.29 8.83 5.31 9.81-2.45-5.37.27-12.44 1.57-13.5 2-1.61 4.51.76 7.4 2.9-.13 1.68-2.51 2.46-2.65 4.09-.12 1.31 1.07 2.94 5.05 2a7.72 7.72 0 0 1-2.17 5 5.2 5.2 0 0 0 5.09-3.3zm130.32-29.93a3.7 3.7 0 0 1-.27-3.06c4.45-17.69 1.95-7.91-1.07-3.12-2.38 3.78-3.24 6.3.67 8.22 23 11.28 1.9-.25.67-2.04z"}),t.createElement("path",{fill:"#D38053",d:"M192.25 75.29c-2.41-1-6.47-3.9-6.5-5.61 0-1.15 4.89-8.09 3.9-14.36-1.07 1.71-6.51 12.19-6.39 14.2.23 3.86 9.09 5.81 8.99 5.77zm13.21-25.34c-.16 1.86-6.76 14.12-6.76 18.83.36 1.09 4.49 2.16 4.71 3.29-6.82-5.17 3.5-20.43 2.05-22.12z"})))),u="cornerstone",h="orphaned",f={cornerstone:["chooseCornerstones","checkLinks","addLinks"],orphaned:["improveRemove","update","addLinks"]};function z({workout:e,badges:a,upsellLink:l,upsellText:n}){const s=(0,r.useSelect)((e=>e("yoast-seo/workouts").getFinishedSteps(u))),i=l||"https://yoa.st/workout-cornerstone-upsell";return(0,t.createElement)(o,{id:"cornerstone-workout-card",name:u,title:(0,c.__)("The cornerstone approach","wordpress-seo"),subtitle:(0,c.__)("Rank with articles you want to rank with","wordpress-seo"),usps:[(0,c.__)("Make your important articles rank higher","wordpress-seo"),(0,c.__)("Bring more visitors to your articles","wordpress-seo")],image:d,finishableSteps:f.cornerstone,finishedSteps:s,upsellLink:i,upsellText:n,workout:e,badges:a})}var E;function w(){return w=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",w({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 299 322"},e),E||(E=t.createElement("g",{fill:"none",transform:"matrix(-1 0 0 1 298.412 0)"},t.createElement("circle",{cx:131.2,cy:190.029,r:131.2,fill:"#F0ECF0"}),t.createElement("path",{fill:"#F9BF8C",d:"M262.5 92.23c-1 1.2-3 2.9-7.5 5a18.4 18.4 0 0 1-10.9 1.6c-.5-1-1-2.2-1.7-3.3l.4-.2.3-.2a14 14 0 0 0 3.3-.2c2.4.2 4.7-.6 6.9-3.2 3.1-3.9 1.7-10.7-1.3-14.6 2.6 2.5 4 5.7 6.4 8.6a231 231 0 0 1 3.3 4c.1.4 1.5 1.8.8 2.5zm-90.9 98.2a17.1 17.1 0 0 1 4 14.3c-11-7.9-22-18.9-31.8-37.8 26.5 1 39.4 8.8 39.5 8.7 43-17.2 51.7 1.5 66.8-6.3 2.3 4.7 5.3 6.3 8.4 9.4-13.5-13.9 5.7-22-5.1-57.7 7.3 0 20.8-4.8 22.9-9.7 14.8 26.3 10.5 39.9 17.8 54.6.6 1.2 2.3 6.7 3.5 8.2 2 2.8 0 7.7-2.7 10.6-29.7 32.8-68.9 33.6-93.5 36.8-6.4-4.6-13.8-8.5-21.5-13.7-1-5.1-1.2-11.2-8.3-17.4z"}),t.createElement("path",{fill:"#DB7A53",d:"M253.4 121.03c10.8 35.8-8.4 43.8 5.1 57.8-3-3.2-6-4.8-8.4-9.5a52.999 52.999 0 0 1-.3-2.2 50.2 50.2 0 0 1-.4-5v-2l.1-3.6.1-1.8.3-3.7.4-3.7.6-5.6a153.4 153.4 0 0 0 .6-9.5v-2a69 69 0 0 0-.3-7.8l-.2-1.6a10.5 10.5 0 0 0 2.4.3v-.1zm-11-25.6 1.7 3.4h-.1c-1.9-.1-2.3-2.3-2.7-2.6l-.1-.2 1.2-.6z"}),t.createElement("path",{fill:"#DB7A53",d:"M219.7 95.53c-.7-1.6-3-3-5.5-3.6.1-.011.2-.011.3 0a8.4 8.4 0 0 0 5.1-1.3l-.3-.2a1.6 1.6 0 0 0 .2 0 3.3 3.3 0 0 0 2.7-.6 34.2 34.2 0 0 0 6.4-4 5 5 0 0 0 2-2.8l.4.3c-.7 6.5 5.4 11.5 12.1 11.9l-.3.1-.4.2-1.2.6c-3.8 1.9-11 5.7-13.6 5.6-2.9 0-6.9-2.2-9.8-3.9 1.4-.5 2.3-1.2 1.9-2.3z"}),t.createElement("path",{fill:"#F9BF8C",d:"M223.7 76.23v.3a3.7 3.7 0 0 1-.2 1.3c-1.3-.7-2.4-1.5-2.6-2.6a3.2 3.2 0 0 1 .3-1.7 7.1 7.1 0 0 1 2.5 2.7z"}),t.createElement("path",{fill:"#F9BF8C",d:"M253.3 91.73c-2.1 2.6-4.5 3.4-6.9 3.2a13 13 0 0 0 5.2-2.3c-6 2.7-10.5 1.1-13.8-1.5a36.9 36.9 0 0 1-4.7-5.3c-1.1-1.6-1.8-2.8-2.1-2.9a3 3 0 0 0 0 .3l-.3-.3a2.4 2.4 0 0 0-.9-2 10.2 10.2 0 0 0-3.2-1.9 5.5 5.5 0 0 1 2.9.6c1.6.9 1 2.1 1.8 3.1a3.3 3.3 0 0 0 .2-3.7c-.8-1.3-4-1.1-6.1-1.3a2.3 2.3 0 0 0 0-.2l.8-1a1.3 1.3 0 0 1-.7-.8c-.8-1.2-2.4-2-4.2-2.6l.1-.2a16.4 16.4 0 0 1 2.2-3.5c.7-.8 5.5-.3 6.1-.6a21 21 0 0 0 2.5.7l16.8 5.1a7.8 7.8 0 0 1 3 2.5c3 3.9 4.4 10.7 1.3 14.6z"}),t.createElement("path",{fill:"#F9BF8C",d:"M228.6 85.73a34.2 34.2 0 0 1-6.4 4 3.3 3.3 0 0 1-2.6.6c1.5-.6 2.1-2.3.7-2.8l-.8-3.8a10 10 0 0 0 2-.7v.1c.5.8.4 4-.4 4.6 1-.2 2.2-3.1 2.5-4a1.3 1.3 0 0 0-.6-1.5 5.2 5.2 0 0 0 .8-.8 6.7 6.7 0 0 0 1.3-2 6.3 6.3 0 0 1 1.5-.4 10.2 10.2 0 0 1 3.2 1.9 2.4 2.4 0 0 1 .9 2 5 5 0 0 1-2.1 2.8zm-5-16.3a16.4 16.4 0 0 0-2.2 3.5l-.1.2a39 39 0 0 0-2.4-.6 9 9 0 0 1 2.3 1 3.2 3.2 0 0 0-.3 1.7c.3 1.1 1.3 2 2.6 2.6a11.3 11.3 0 0 1-.9 1.8 9.3 9.3 0 0 1-2.7 3.3l-.5.3-3.4-15.4-2.1-.3a4.4 4.4 0 0 1 2.7-1.4 35.6 35.6 0 0 1 13 2.7c-.5.3-5.3-.2-6 .6z"}),t.createElement("path",{fill:"#F9BF8C",d:"M219.4 83.23a6 6 0 0 1-2.8.7 7.8 7.8 0 0 1-1.5-.2 4 4 0 0 0 1.5.2 9.8 9.8 0 0 0 3-.2l.7 3.8c1.4.5.8 2.2-.7 2.8h-.1a1.6 1.6 0 0 1-.2 0 39 39 0 0 0-7-3c-.3-3.4-.6-6.7-2-9.7 1.7-2.8 3.2-5.6 1.7-6.6 0 1.3-1.1 3.4-2.4 5.4a13.3 13.3 0 0 0-1.2-1.7 13 13 0 0 0-5.2-3.6c.8-1.7 1.4-3.5 3.7-3.8a24.3 24.3 0 0 1 6.9.2l2.1.3 3.5 15.4z"}),t.createElement("path",{fill:"#DB7A53",d:"M223.7 76.23a5 5 0 0 1 .6 3.4 7 7 0 0 1 .8-.3 6.7 6.7 0 0 1-1.3 2.1 5.2 5.2 0 0 1-.8.8 1.7 1.7 0 0 0-1.2-.2l-.2 1a10 10 0 0 1-2 .7 9.8 9.8 0 0 1-3 .2 6 6 0 0 0 2.8-.7l.5-.3a9.3 9.3 0 0 0 2.7-3.3 11.3 11.3 0 0 0 1-1.9 3.7 3.7 0 0 0 .1-1.3v-.2zm1.6 1.3c.007.1.007.2 0 .3v-.3z"}),t.createElement("path",{fill:"#DB7A53",d:"M223 82.23c.524.3.773.92.6 1.5-.3.9-1.4 3.8-2.5 4 .8-.7 1-3.8.5-4.6v-.1l.3-1a1.7 1.7 0 0 1 1.1.2z"}),t.createElement("path",{fill:"#F9BF8C",d:"M201.4 91.73a3.1 3.1 0 0 0-.8.7c-2-.9-3.9-2.7-5.7-3.4-.5-.1-2.7-.8-2.9-1.4a13.7 13.7 0 0 0 5.2 2 43 43 0 0 0 4.2 2v.1zm.1-2.2h.1a30.3 30.3 0 0 0 5.4.4 30 30 0 0 0 3.6 1.6c-2.6-.3-5.7-1-8-.4l-2.2-1.3a2.7 2.7 0 0 0 1.1-.3zm13 2.5a1.4 1.4 0 0 0-.3 0 10.6 10.6 0 0 0-2-.4h-.4a26.6 26.6 0 0 1-3-1.8l1.7-.1a3.2 3.2 0 0 0 1.3-.4 1.2 1.2 0 0 0 .5-1l6.7 2.7-6.7-3.6a39 39 0 0 1 7 3c.1.2.3.2.4.3a8.4 8.4 0 0 1-5.2 1.3z"}),t.createElement("path",{fill:"#DB7A53",d:"M225 79.33a7 7 0 0 0-.7.3 5 5 0 0 0-.6-3.4 7.1 7.1 0 0 0-2.5-2.7 9 9 0 0 0-2.2-1l2.3.7c1.8.5 3.4 1.3 4.2 2.6a1.3 1.3 0 0 0 .6.6c.2 0-.5.7-.8 1.1v.3c2.2 0 5.4-.1 6.2 1.2a3.3 3.3 0 0 1-.2 3.8c-.8-1-.2-2.3-1.8-3.2a5.5 5.5 0 0 0-3-.6 6.3 6.3 0 0 0-1.4.3h-.1zm6 3.9a3 3 0 0 1 0-.3c.3 0 1 1.3 2 3a23.8 23.8 0 0 0 4.8 5.2c3.3 2.6 7.8 4.2 13.8 1.6a13 13 0 0 1-5.2 2.2 14 14 0 0 1-3.3.2c-6.7-.4-12.8-5.4-12.1-11.9z"}),t.createElement("path",{fill:"#F9BF8C",d:"M208.4 74.73c.478.53.913 1.099 1.3 1.7-1.4 2.2-3 4.3-3.5 5.3s-1.3 2.6-.3 3.6a38.8 38.8 0 0 0 6.4 3 1.2 1.2 0 0 1-.6 1 3.2 3.2 0 0 1-1.2.4l-1.8.1a14.4 14.4 0 0 0-3.6-1.9 13.4 13.4 0 0 1-3-1.2c0-.9-.3-2.4-.5-4 1.6-3 5-8.2 2.7-10.1.9 1.6-1.4 5.5-3 8l-.8-4a3.8 3.8 0 0 0 0-2 3.5 3.5 0 0 1-.2 1c-.4-1.6-.7-2.6-1-2.7-.9-.3-2 .6-3 2 1-2.2 1.5-4.1 4.7-4.1a7.3 7.3 0 0 1 2.2.4 13 13 0 0 1 5.2 3.5zm-6.1 13a39.6 39.6 0 0 1 4.7 2.2 30.3 30.3 0 0 1-5.3-.5 1.7 1.7 0 0 0 .6-1.7z"}),t.createElement("path",{fill:"#F9BF8C",d:"M207 84.53c-.2-1.3 1.6-4.1 3.3-6.9a27 27 0 0 1 2 9.7l-5.3-2.8zm-7.6-11.7c.3 0 .6 1.2 1 2.7-1.2 2.7-5.5 6.5-6.7 8.9a3.4 3.4 0 0 0-.6 2c.2.7 2 2 4.1 3.2a13.7 13.7 0 0 1-5.2-2l-.4-.3a1.7 1.7 0 0 1-.5-.5 1.5 1.5 0 0 1 0-1.2c.5-1.2 2.8-7.5 5.2-10.9 1-1.3 2.1-2.2 3-1.9h.1z"}),t.createElement("path",{fill:"#F9BF8C",d:"M199.4 86.63a5 5 0 0 0 2 .8l.9.3a1.7 1.7 0 0 1-.7 1.7v.1a2.7 2.7 0 0 1-1.2.3c-1.8-1-3.4-2.1-4.1-2.6-.4-.3-.8-.6-.9-1a1.7 1.7 0 0 1 .4-1c1.2-2 4-5.9 4.7-8.7l.7 4-1 1.5c-1 1.5-2.2 3.5-.8 4.6z"}),t.createElement("path",{fill:"#F9BF8C",d:"M201.2 86.03c-.5-.7-.6-.8-.4-1.7a9.9 9.9 0 0 1 .8-1.6l.5 4a3 3 0 0 1-.9-.7z"}),t.createElement("path",{fill:"#DB7A53",d:"M211.8 91.63h-1.2a30 30 0 0 1-3.6-1.7 39.6 39.6 0 0 0-4.7-2.2l-.8-.3a5 5 0 0 1-2-.8c-1.5-1.1-.3-3 .8-4.6l1-1.4c1.6-2.5 4-6.5 3.1-8 2.2 2-1.2 7-2.8 10.1a9.9 9.9 0 0 0-.7 1.6c-.3.9-.2 1 .4 1.7a3 3 0 0 0 .9.7 13.4 13.4 0 0 0 3 1.3 14.4 14.4 0 0 1 3.6 1.9 26.6 26.6 0 0 0 3 1.7z"}),t.createElement("path",{fill:"#DB7A53",d:"M195.8 85.33a1.7 1.7 0 0 0-.4 1c0 .4.5.7.9.9l4 2.6c.8.5 1.6 1 2.4 1.3a4.2 4.2 0 0 0-1.3.6 43 43 0 0 1-4.2-2c-2.1-1.3-4-2.6-4-3.3a3.4 3.4 0 0 1 .5-2c1.2-2.3 5.5-6.1 6.6-8.8a3.5 3.5 0 0 0 .3-1 3.8 3.8 0 0 1 0 2c-.8 2.8-3.6 6.6-4.8 8.7zm11.2-.8 5.3 2.8 6.7 3.7-6.7-2.6a38.8 38.8 0 0 1-6.4-3c-1-1-.4-2.4.3-3.5l3.5-5.4c1.3-2.2 2.4-4 2.4-5.3 1.5 1 0 3.7-1.8 6.5s-3.6 5.6-3.2 7l-.1-.2z"}),t.createElement("path",{fill:"#F9BF8C",d:"M201.4 91.73a4.2 4.2 0 0 1 1.3-.6c2.2-.5 5.3.1 7.9.4l1.2.1h.4a10.6 10.6 0 0 1 2 .3c2.4.6 4.8 2 5.4 3.6.5 1-.5 1.8-1.8 2.2a11.1 11.1 0 0 1-2 .4c-4.2.6-5.5 2-11.5 2.8-2.6.4-4.4-4-4.4-5.9a4.2 4.2 0 0 1 .7-2.6 3.1 3.1 0 0 1 .8-.7z"}),t.createElement("path",{fill:"#A52A6A",d:"M253.4 121.03a10.5 10.5 0 0 1-2.4-.2 5.3 5.3 0 0 1-.7-.2c-2.4-.9-8.6-17.6-9.3-21-.3-1.2-.3-3.5.3-3.4.3.3.8 2.5 2.7 2.5h.1a18.4 18.4 0 0 0 10.9-1.5c4.6-2.1 6.6-3.8 7.6-5 .6-.8-.7-2.2-.9-2.5.4-.4 1.3.1 1.7.3 5.9 2.8 10.2 12.7 13.1 19.4a2.9 2.9 0 0 1-.1 1.9c-2.1 5-15.6 9.8-23 9.8v-.1z"}),t.createElement("path",{fill:"#DB7A53",d:"M171.6 190.43c7 6.2 7.3 12.3 8.3 17.4l-4.4-3a17 17 0 0 0-3.9-14.4z"}),t.createElement("path",{fill:"#009288",d:"m41.3 265.93-.5.2c6.5 8.6 14.1 17.5 21 30.5a28.8 28.8 0 0 1 2.8 7.7c45.714 25.792 102.423 21.736 144-10.3-.8-3.5-1.7-7.1-2.8-11 12.67-7.311 18.506-22.484 14-36.4a43 43 0 0 0-18.4-25.1c-6.4-4.6-13.8-8.5-21.5-13.7l-4.4-3c-10.8-8-22-19-31.7-37.9l-.1-.2a71 71 0 0 0-19.9-2.3c12 5.8 41 37 4.2 43-29 3.1-47.3-27.9-84-28.7a47.8 47.8 0 0 0-13.5 9.4l-1 1a37 37 0 0 1 4.7-2c16.4 1 27 15.3 32.9 30.3 10.3 26.2 6.2 44.7-2.6 50.6-5.3 3.6-13.3 2.7-20-3.7l-1.5.7-1 .6-.7.3z"}),t.createElement("path",{fill:"#F9BF8C",d:"M29.5 189.23a37 37 0 0 1 4.5-2.2c16.4 1 27 15.3 33 30.3 10.3 26.2 6.2 44.7-2.6 50.6-5.3 3.6-13.4 2.7-20-3.7l-1.5.7c6.9-5.7 4.9-6.8 18-4.4-10.8-6.4-16.1-9.1-38.7 6.1a122.2 122.2 0 0 1-21.4-53.5 133 133 0 0 1 28.7-24.1v.2z"}),t.createElement("path",{fill:"#DB7A53",d:"M61 260.63c-13.2-2.4-11.1-1.3-18 4.4l-1 .6-.6.2-.6.3-.5.3-.6.3-1.1.6-.7.3-1 .6-.7.4-1.2.6-.6.3-1.3.7-.6.3-1.3.7-.5.3-1.4.8-.3.1-1.6 1-.6-.9-4.5-5.8c22.6-15.2 27.9-12.4 38.7-6v-.1z"}),t.createElement("path",{fill:"#F9BF8C",d:"M128 207.43c-29.2 3.1-47.5-28.2-84.5-28.7 14.2-5.2 23-11.3 23-27.1 0-8.8-2.7-25.8-3.6-38.2 0 0 57 21.4 57.8 36.1l2 14.3c11.2 4.3 43.3 37.4 5.3 43.6z"}),t.createElement("path",{fill:"#DB7A53",d:"M87.3 151.73a56.8 56.8 0 0 1-17.1-22.8 62.4 62.4 0 0 0 43 22c2.5-.1 5-.2 7.3-.5v.5l.2 1.2c-4.7 11.9-7.3 19.5-33.4-.4z"}),t.createElement("path",{fill:"#216D64",d:"M162 280.43c.5 7.4-16.2 16.2-30.8 17.3-19.8 1.4-54.8-9.2-48-40.7 18.2 35 68.8 31.3 78.8 23.4z"}),t.createElement("path",{fill:"#F9BF8C",d:"M122.5 72.33a9.8 9.8 0 0 0-2.1-.8h2.6l-.5.8zm-9.9.8a4.8 4.8 0 0 0-.6-1.7c7.3 0 4-.6.6 1.7zm12.6 14 .8.8c-.9-1.5-1.5-4.6-2.9-12.6l-.4-.3a16 16 0 0 0 2.5 12.1z"}),t.createElement("path",{fill:"#F9BF8C",d:"M154.7 95.83a44.5 44.5 0 0 0-1.6-8.2c-2-6-4.8-6.6-7.3-9.6a50.6 50.6 0 0 0-1-23.9c0 .1-8.7-35.8-54.2-22a44.6 44.6 0 0 0-10 5.9c-10.6 8.2-7.6 13.4-10 25.4a74.9 74.9 0 0 1-4.4 11.9c-4.8 3.8-7.6 6.5-8.1 9.9 1 4.7 5.4 18.3 5 28.1 6 27.2 36.6 38.3 50 37.6 2.6-.1 5-.2 7.4-.5 6.5-.7 11.9-2.8 17-11.3 6.4-10.8 5.6-16.5 9.4-22.5 2.5-4.1 9-9.7 7.8-20.8zm-42.2-19.5c-1 7.6-2.5 10.5-5.3 11.4a18.3 18.3 0 0 0 1.3-3.3c-4.6 2.5-17 2.8-21.2-3-.9.4-2 .4-4-.6l.2-.1c4.2-.1 2.6-1 4.1-3.8a10.6 10.6 0 0 1 .6-1h17.1a11 11 0 0 1 3.8 6.7 58.3 58.3 0 0 0 1.2-6.8l3-.2-.8.7z"}),t.createElement("path",{fill:"#D86060",d:"M112.6 124.23c-4-2-5.6-6.3-11.6-10.8 10 5.2 19.3 6.3 26.5 3.8-1.7 1.7 1.2 6.3-3.5 8.4-4 1.7-7.3.5-11.4-1.4z"}),t.createElement("path",{fill:"#BC3939",d:"m101 113.43-1.6-.8c7.9-.3 12.9-.7 17.2-.3 2.2.3 2.2 2 3.8 2 1.6 0 2.7-1.6 4.4-1.4 1.2.2 3 1.1 5.6 3a20.3 20.3 0 0 1-2.9 1.2c-7.2 2.6-16.6 1.5-26.5-3.7z"}),t.createElement("path",{fill:"#FFF",d:"m108.5 84.43.2-.5a15.2 15.2 0 0 0-2.3-3.8c-5-5.8-13.6-5.1-16.5-1.6-.9 1.3-1.5 2.4-2.6 3 4.1 5.7 16.6 5.4 21.2 3v-.1zM97 85.63a4.8 4.8 0 1 1 .408-9.592A4.8 4.8 0 0 1 97 85.629z"}),t.createElement("path",{fill:"#000",d:"M89.9 78.53c-.9 1.3-1.5 2.4-2.6 3-1.1.6-2 .2-4-.7l.2-.2c4.2 0 2.6-1 4.1-3.7 2.8-5.2 9-4.8 14.6-3 .1 0 5.9 2.4 6.8 8.7l-.3 1.2a14.4 14.4 0 0 0-2.3-3.7c-5-5.8-13.6-5.1-16.5-1.6z"}),t.createElement("path",{fill:"#FFF",d:"M127.5 83.03h-.1a27 27 0 0 0 11.6.6c2.7-1 4.8-4 5-6.8-1.8-1.2-2.8-4.6-8.2-2.9-5 1.6-7 4.2-8.3 9v.1zm2.8-3.7a4.4 4.4 0 1 1 8.798-.2 4.4 4.4 0 0 1-8.798.2z"}),t.createElement("path",{fill:"#000",d:"M145.1 75.33c0 .5.5.7 1 .9a8 8 0 0 0 1.2.1l.1.2a5 5 0 0 1-1.4.6 2.4 2.4 0 0 1-2-.4c-1.8-1.2-2.8-4.6-8.2-2.8-4.9 1.6-7 4.2-8.3 9h-.2c-1.2-6.7 4-11.3 9-12.5l3.1-.2c2.8.2 5.2 1.8 5.7 5.1z"}),t.createElement("path",{fill:"#B2512B",d:"M106.7 61.53c-4 0-8.2-.4-11.7-.3-3.6.1-8.3 1.7-12.8 4.6 1.9-4 8.5-7.2 12.5-7.7 2.9-.3 6.8-.7 9.7-.2 3.7.7 5.6 3.1 2.3 3.6zm24.7 5.6c2.3-2.6 6.8-6.2 9.4-5.8 3 .4 3.5 1.2 5.4 3.6.056.898.056 1.8 0 2.7H145a7.6 7.6 0 0 0-4.7-2.2c-1.9-.1-7 1.2-8.8 1.7h-.1z"}),t.createElement("circle",{cx:97.1,cy:80.829,r:4.8,fill:"#000",transform:"rotate(-78.1 97.1 80.83)"}),t.createElement("circle",{cx:134.7,cy:79.329,r:4.4,fill:"#000"}),t.createElement("path",{fill:"#DB7A53",d:"M106.3 109.73a40 40 0 0 1-10.3-1.3c-1.9 2-.1 6.6-.7 9.2-1-3.4-4-8-2.2-12.4a28.7 28.7 0 0 0 13.2-1c9-2.8 6.6-6.2 12.6-6.5-5.2 1-4.4 11.4-12.6 12z"}),t.createElement("path",{fill:"#838BC5",d:"M54 29.03c3-3.6 13.5-5.8 20-6-.5 1.3 4.5 2.7 4 4a37.3 37.3 0 0 0 8.4-.2 3.5 3.5 0 0 0 .4 2.7l3.8 2.6a44.6 44.6 0 0 0-10.1 5.9c-10.5 8.2-7.5 13.4-9.9 25.4a74.9 74.9 0 0 1-4.4 11.9l-12.4 7a10.3 10.3 0 0 0-5.3-.7l-.3-.4c-2.2-4-6.8-14.2-7.2-18.8-1.4-11.4 1.2-25 10-32.4a18.5 18.5 0 0 1 3-2 9.8 9.8 0 0 0 .1 1H54zm2.7 55 1.4.7 3.5-1.6a5.5 5.5 0 0 1-2.4 1.9 10.4 10.4 0 0 1-1.2.2l-1.2-1.2h-.1z"}),t.createElement("path",{fill:"#0071BC",d:"M127 22.23c-7.5-4.7-7-2-15.6-4l5.2-.4c-13.3-1-28.6 3.4-30.1 9a37.3 37.3 0 0 1-8.4.2c.5-1.3-4.6-2.6-4-4-6.6.2-17 2.4-20.1 6a9.8 9.8 0 0 1 0-1c0-8.2 10.8-17.8 30.3-15.8 13.4-14.3 42.4-21 61 8.1-13-7.3-16.2-.2-19.3.8 7.8-1.6 27.3 3 28.9 24.3-1.7-7.8-8.4-8.6-13.6-8-1.7-2.3-3.5-4.3-4.9-5.9-4.5-5.2-3.5-5.7-9.4-9.3z"}),t.createElement("path",{fill:"#0071BC",d:"M137.4 46.73c3.4 14.5-3.1 19.3-22.4 18.8 12.5-8.9 11.5-19.3 2-26.1-8.2-6-14 .2-26.4-7.3a46 46 0 0 1-3.8-2.6 3.5 3.5 0 0 1-.3-2.7c1.5-5.6 16.8-10 30-9l-5 .3c8.6 2.2 8-.6 15.5 4 5.9 3.7 4.9 4.2 9.4 9.5 1.4 1.6 3.2 3.5 4.8 5.8 3 4.2 5.5 9.6 3.5 16.7a26 26 0 0 1-2.6 6.2 14.6 14.6 0 0 0-4.7-13.6z"}),t.createElement("path",{fill:"#DB7A53",d:"M126.1 69.33h-.7a14.6 14.6 0 0 1 3.2-1.7 14.8 14.8 0 0 0-2.5 1.7zm-.9 17.8.8.8c1.2 1.8 2.7 1.5 6.3 4.8l.6.2c1.8 1.7 2.8 3.7 2 6.4-.2 3.2-5.3 8.2-12 5.8 5.3-1 6.9-.8 7.6-5.6-.2-6.7-8.3-4-10-16.5a17.3 17.3 0 0 1 .9-8.8 9 9 0 0 1 1.3.8 16 16 0 0 0 2.5 12.1zm-2.1-14.5a6.3 6.3 0 0 0-.6-.3l.5-.9c1 0 .4.2.1 1.2z"}),t.createElement("path",{fill:"#93278F",d:"M56.7 84.03a12.7 12.7 0 0 0-3-1.7l12.4-7 9.2-5.2c-1.3 1.7-1.6 4.2-1.1 7l-12.6 6-3.5 1.7-1.4-.8z"}),t.createElement("path",{fill:"#5D237A",d:"M151 92.03c5.5-1.8 14.3-20.4 5.8-23.5-5.4-2-24.6-.6-29.9.8-29.7-.4-42.2-3.3-49.3-.7a5 5 0 0 0-2.3 1.6c-4.3 5.5 3.1 20.2 8 21.8a46.3 46.3 0 0 0 12.5 1.6c11.6 0 14.8-2.2 16.6-17.3 1-.6 4.4-4.3 9-2a10.6 10.6 0 0 1 1.8 1c2.9 17.6 2.5 11.3 9.1 17.5l.6.1c5.8 1.4 13.9.5 18.1-.9zm-40.5-17.9c-.4 3.6-1.7 13.4-4.8 15.4-4.2 2.8-17 2-21.7.4-4-1.4-11.5-17.2-5.7-19.3 5.6-2 23.8 0 29.6.6 0 .2 2.8.3 2.6 3v-.1zm2.1-1a4.8 4.8 0 0 0-.6-1.8c7.3.2 4-.5.6 1.8zm10.5-.5a10 10 0 0 0-2.7-1.2c4.2.1 3.1-.3 2.7 1.2zm27.2 17.4c-4.7 1.6-16.3 2.5-20.6-.4-1-.7-2.8-5.1-4.5-15.3-.4-2.8 2.6-2.5 2.6-2.8.9-.2 4.3-.7 8.5-1 4.2-.3 15.6-1.2 19.7.2 5.8 2.1-1.6 18-5.7 19.3z"}),t.createElement("path",{fill:"#F9BF8C",d:"M45.5 82.33c-4.2 1.7-4.4 10-3 14.8 2.8 9.2 12 17.6 21.7 16.1 5.2-.7 1.5-5.7-1-16.4l-1-5.6c-3.3-7-9.4-11.7-16.7-8.9zm13.2 13c-.4.4-4.4 3.1-1.2 5 2.2 1.5 4 .5 3.6 2.6-.3 1.4 0 3.3-2 3 2-3-1.1-4-3-2.9s-5.7-5.3.9-8.2c-4-4.8-7.5-12.8-10-.5-3-9.7 3.6-17.3 11.7 1z"}),t.createElement("path",{fill:"#CE6D42",d:"M58.7 95.33c-.4.4-4.4 3.1-1.2 5 2.2 1.5 4 .5 3.6 2.6-.3 1.4 0 3.3-2 3 2-3-1.1-4-3-2.9s-5.7-5.3.9-8.2c-4-4.8-7.5-12.8-10-.5-3-9.7 3.6-17.3 11.7 1z"}))));function g({workout:e,badges:a,upsellLink:l,upsellText:n}){const s=(0,r.useSelect)((e=>e("yoast-seo/workouts").getFinishedSteps(h))),i=l||"https://yoa.st/workout-orphaned-content-upsell";return(0,t.createElement)(o,{id:"orphaned-workout-card",name:h,title:(0,c.__)("Orphaned content","wordpress-seo"),subtitle:(0,c.__)("Clean up your unlinked content to make sure people can find it","wordpress-seo"),usps:[(0,c.__)("Make pages easier for Google and visitors to find","wordpress-seo"),(0,c.__)("Add internal links to your posts and pages","wordpress-seo")],image:M,finishableSteps:f.orphaned,finishedSteps:s,upsellLink:i,upsellText:n,workout:e,badges:a})}g.propTypes={workout:l().func,badges:l().arrayOf(l().element),upsellLink:l().string,upsellText:l().string},g.defaultProps={workout:null,badges:[],upsellLink:null,upsellText:null},window.yoast=window.yoast||{},window.yoast.adminModules={components:{workouts:{CornerstoneWorkoutCard:z,OrphanedWorkoutCard:g}}}})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/analysis-worker.js b/wp/wp-content/plugins/wordpress-seo/js/dist/analysis-worker.js new file mode 100644 index 00000000..8e8d42d1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/analysis-worker.js @@ -0,0 +1 @@ +(()=>{self.window=self;const e=["lodash","regenerator-runtime","wp-hooks","wp-i18n"];self.onmessage=({data:s})=>{if(!s||!s.dependencies)return;!function(s){for(const o in s)Object.prototype.hasOwnProperty.call(s,o)&&(e.includes(o)||o.startsWith("yoast-seo"))&&(self.importScripts(s[o]),"lodash"===o&&(self.lodash=_.noConflict()))}(s.dependencies),s.translations&&function(e){for(const[s,o]of e){const e=o.locale_data[s]||o.locale_data.messages;e[""].domain=s,self.wp.i18n.setLocaleData(e,s)}}(s.translations);const o=self.yoast.Researcher.default;new self.yoast.analysis.AnalysisWebWorker(self,new o).register()}})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/api-client.js b/wp/wp-content/plugins/wordpress-seo/js/dist/api-client.js new file mode 100644 index 00000000..cfaf3a99 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/api-client.js @@ -0,0 +1 @@ +!function(t,e){window.wpseoApi={get:function(t,e,n,o){this.request("GET",t,e,n,o)},post:function(t,e,n,o){this.request("POST",t,e,n,o)},put:function(t,e,n,o){this.request("PUT",t,e,n,o)},patch:function(t,e,n,o){this.request("PATCH",t,e,n,o)},delete:function(t,e,n,o){this.request("DELETE",t,e,n,o)},request:function(n,o,i,u,s){"function"==typeof i&&void 0===s&&(s=u,u=i,i={}),"POST"!==n&&"GET"!==n&&(i._method=n,n="POST"),t.ajax({url:e.root+"yoast/v1/"+o,method:n,beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",e.nonce)},data:i}).done(u).fail(s)}}}(jQuery,wpApiSettings); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/block-editor.js b/wp/wp-content/plugins/wordpress-seo/js/dist/block-editor.js new file mode 100644 index 00000000..fa3718e1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/block-editor.js @@ -0,0 +1,601 @@ +(()=>{var e={6746:(e,t,s)=>{"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=i(s(9196)),n=i(s(9156)),o=i(s(6743));function i(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function c(e,t){var s,o,i,d,p,u,m,h,g=[],y={};for(u=0;u "+l);if("componentClose"===p.type)throw new Error("Missing opening component token: `"+p.value+"`");if("componentOpen"===p.type){s=t[p.value],i=u;break}g.push(t[p.value])}else g.push(p.value);return s&&(d=function(e,t){var s,r,a=t[e],n=0;for(r=e+1;r{"use strict";function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},9156:(e,t,s)=>{"use strict";var r=s(9196),a="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,n=s(7942),o=s(9179),i=s(397),l=".",c=":",d="function"==typeof Symbol&&Symbol.iterator,p="@@iterator";function u(e,t){return e&&"object"==typeof e&&null!=e.key?(s=e.key,r={"=":"=0",":":"=2"},"$"+(""+s).replace(/[=:]/g,(function(e){return r[e]}))):t.toString(36);var s,r}function m(e,t,s,r){var n,i=typeof e;if("undefined"!==i&&"boolean"!==i||(e=null),null===e||"string"===i||"number"===i||"object"===i&&e.$$typeof===a)return s(r,e,""===t?l+u(e,0):t),1;var h=0,g=""===t?l:t+c;if(Array.isArray(e))for(var y=0;y{"use strict";function t(e){return function(){return e}}var s=function(){};s.thatReturns=t,s.thatReturnsFalse=t(!1),s.thatReturnsTrue=t(!0),s.thatReturnsNull=t(null),s.thatReturnsThis=function(){return this},s.thatReturnsArgument=function(e){return e},e.exports=s},9179:e=>{"use strict";e.exports=function(e,t,s,r,a,n,o,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[s,r,a,n,o,i],d=0;(l=new Error(t.replace(/%s/g,(function(){return c[d++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},397:(e,t,s)=>{"use strict";var r=s(7942);e.exports=r},4530:(e,t)=>{var s;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";e.exports=window.React}},t={};function s(r){var a=t[r];if(void 0!==a)return a.exports;var n=t[r]={exports:{}};return e[r](n,n.exports,s),n.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};s.r(e),s.d(e,{authorFirstName:()=>ci,authorLastName:()=>di,category:()=>hi,categoryTitle:()=>gi,currentDate:()=>pi,currentDay:()=>ui,currentMonth:()=>mi,currentYear:()=>yi,date:()=>fi,excerpt:()=>wi,focusKeyphrase:()=>bi,id:()=>Ei,modified:()=>vi,name:()=>ki,page:()=>_i,pageNumber:()=>xi,pageTotal:()=>Si,permalink:()=>Ti,postContent:()=>Ri,postDay:()=>Ci,postMonth:()=>Ii,postTypeNamePlural:()=>Li,postTypeNameSingular:()=>Pi,postYear:()=>Ai,primaryCategory:()=>Fi,searchPhrase:()=>Oi,separator:()=>Mi,siteDescription:()=>Di,siteName:()=>qi,tag:()=>Ni,term404:()=>Bi,termDescription:()=>$i,termHierarchy:()=>Ui,termTitle:()=>Wi,title:()=>Ki,userDescription:()=>Hi});var t=s(9196),r=s.n(t);const a=window.wp.blocks,n=window.wp.data,o=window.wp.editPost,i=window.wp.element,l=window.wp.i18n,c=window.wp.plugins,d=window.wp.richText,p=window.yoast.externals.contexts,u=window.yoast.externals.redux,m=window.lodash;function h(){return(0,m.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}const g=window.yoast.propTypes;var y=s.n(g);const f=window.yoast.styledComponents;var w=s.n(f);const b=w().svg` + width: ${e=>e.size}px; + height: ${e=>e.size}px; + &&& path { + fill: ${e=>e.color}; + } + &&& circle.yoast-icon-readability-score { + fill: ${e=>e.readabilityScoreColor}; + display: ${e=>e.isContentAnalysisActive?"inline":"none"}; + } + + &&& circle.yoast-icon-seo-score { + fill: ${e=>e.seoScoreColor}; + display: ${e=>e.isKeywordAnalysisActive?"inline":"none"}; + } +`,E=function(e){return(0,t.createElement)(b,{...e,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 646.66 456.27"},(0,t.createElement)("path",{d:"M73,405.26a68.53,68.53,0,0,1-12.82-4c-1-.42-2-.89-3-1.37-1.49-.72-3-1.56-4.77-2.56-1.5-.88-2.71-1.64-3.83-2.39-.9-.61-1.8-1.26-2.68-1.92q-2.64-2-5.08-4.19a68.26,68.26,0,0,1-8.4-9.17c-.92-1.2-1.68-2.25-2.35-3.24q-1.84-2.73-3.44-5.64a68.26,68.26,0,0,1-8.29-32.55V142.13a68.29,68.29,0,0,1,8.29-32.55,58.6,58.6,0,0,1,3.44-5.64,57.53,57.53,0,0,1,4-5.27A69.64,69.64,0,0,1,48.56,85.42,56.06,56.06,0,0,1,54.2,82,67.78,67.78,0,0,1,73,75.09,69.79,69.79,0,0,1,86.75,73.7H256.41L263,55.39H86.75A86.84,86.84,0,0,0,0,142.13V338.22A86.83,86.83,0,0,0,86.75,425H98.07V406.65H86.75A68.31,68.31,0,0,1,73,405.26ZM368.55,60.85l-1.41-.53L360.73,77.5l1.41.53a68.58,68.58,0,0,1,8.66,4,58.65,58.65,0,0,1,5.65,3.43A69.49,69.49,0,0,1,391,98.67c1.4,1.68,2.72,3.46,3.95,5.27s2.39,3.72,3.44,5.64a68.32,68.32,0,0,1,8.29,32.55V406.65H233.55l-.44.76c-3.07,5.37-6.26,10.48-9.49,15.19L222,425H425V142.13A87.19,87.19,0,0,0,368.55,60.85Z",fill:"#000001"}),(0,t.createElement)("path",{d:"M303.66,0l-96.8,268.87-47.58-149H101.1l72.72,186.78a73.61,73.61,0,0,1,0,53.73c-7.07,18.07-19.63,39.63-54.36,46l-1.56.29v49.57l2-.08c29-1.14,51.57-10.72,70.89-30.14,19.69-19.79,36.55-50.52,53-96.68L366.68,0Z",fill:"#000001"}),(0,t.createElement)("circle",{className:"yoast-icon-readability-score",cx:"561.26",cy:"142.43",r:"85.04",fill:"#000001",stroke:"#181716",strokeMiterlimit:"10",strokeWidth:"0.72"}),(0,t.createElement)("circle",{className:"yoast-icon-seo-score",cx:"561.26",cy:"341.96",r:"85.04",fill:"#000001",stroke:"#181716",strokeMiterlimit:"10",strokeWidth:"0.72"}))};E.propTypes={readabilityScoreColor:y().string,isContentAnalysisActive:y().bool,seoScoreColor:y().string,isKeywordAnalysisActive:y().bool,size:y().number,color:y().string},E.defaultProps={readabilityScoreColor:"#000000",isContentAnalysisActive:!1,seoScoreColor:"#000000",isKeywordAnalysisActive:!1,size:20,color:"#000001"};const v=E,k=window.wp.components;function _(e){return void 0===e.length?e:(0,m.flatten)(e).sort(((e,t)=>void 0===e.props.renderPriority?1:e.props.renderPriority-t.props.renderPriority))}const x=({theme:e,location:s,children:r})=>(0,t.createElement)(p.LocationProvider,{value:s},(0,t.createElement)(f.ThemeProvider,{theme:e},r));x.propTypes={theme:y().object.isRequired,location:y().oneOf(["sidebar","metabox","modal"]).isRequired,children:y().element.isRequired};const S=x,T=window.yoast.uiLibrary;const R=window.yoast.componentsNew,C=window.yoast.styleGuide,I=window.yoast.analysis;function A(e){switch(e){case"loading":return{icon:"loading-spinner",color:C.colors.$color_green_medium_light};case"not-set":return{icon:"seo-score-none",color:C.colors.$color_score_icon};case"noindex":return{icon:"seo-score-none",color:C.colors.$color_noindex};case"good":return{icon:"seo-score-good",color:C.colors.$color_green_medium};case"ok":return{icon:"seo-score-ok",color:C.colors.$color_ok};default:return{icon:"seo-score-bad",color:C.colors.$color_red}}}function L({target:e,children:t}){let s=e;return"string"==typeof e&&(s=document.getElementById(e)),s?(0,i.createPortal)(t,s):null}L.propTypes={target:y().oneOfType([y().string,y().object]).isRequired,children:y().node.isRequired};const P=({target:e,scoreIndicator:s})=>(0,t.createElement)(L,{target:e},(0,t.createElement)(R.SvgIcon,{...A(s)}));P.propTypes={target:y().string.isRequired,scoreIndicator:y().string.isRequired};const F=P,O=({handleRefreshClick:e,supportLink:s})=>(0,t.createElement)("div",{className:"yst-flex yst-gap-2"},(0,t.createElement)(T.Button,{onClick:e},(0,l.__)("Refresh this page","wordpress-seo")),(0,t.createElement)(T.Button,{variant:"secondary",as:"a",href:s,target:"_blank",rel:"noopener"},(0,l.__)("Contact support","wordpress-seo")));O.propTypes={handleRefreshClick:y().func.isRequired,supportLink:y().string.isRequired};const M=({handleRefreshClick:e,supportLink:s})=>(0,t.createElement)("div",{className:"yst-grid yst-grid-cols-1 yst-gap-y-2"},(0,t.createElement)(T.Button,{className:"yst-order-last",onClick:e},(0,l.__)("Refresh this page","wordpress-seo")),(0,t.createElement)(T.Button,{variant:"secondary",as:"a",href:s,target:"_blank",rel:"noopener"},(0,l.__)("Contact support","wordpress-seo")));M.propTypes={handleRefreshClick:y().func.isRequired,supportLink:y().string.isRequired};const D=({error:e,children:s})=>(0,t.createElement)("div",{role:"alert",className:"yst-max-w-screen-sm yst-p-8 yst-space-y-4"},(0,t.createElement)(T.Title,null,(0,l.__)("Something went wrong. An unexpected error occurred.","wordpress-seo")),(0,t.createElement)("p",null,(0,l.__)("We're very sorry, but it seems like the following error has interrupted our application:","wordpress-seo")),(0,t.createElement)(T.Alert,{variant:"error"},(null==e?void 0:e.message)||(0,l.__)("Undefined error message.","wordpress-seo")),(0,t.createElement)("p",null,(0,l.__)("Unfortunately, this means that any unsaved changes in this section will be lost. You can try and refresh this page to resolve the problem. If this error still occurs, please get in touch with our support team, and we'll get you all the help you need!","wordpress-seo")),s);D.propTypes={error:y().object.isRequired,children:y().node},D.VerticalButtons=M,D.HorizontalButtons=O;const q=({error:e})=>{const s=(0,i.useCallback)((()=>{var e,t;return null===(e=window)||void 0===e||null===(t=e.location)||void 0===t?void 0:t.reload()}),[]),r=(0,n.useSelect)((e=>e("yoast-seo/editor").selectLink("https://yoa.st/metabox-error-support")),[]),a=(0,n.useSelect)((e=>e("yoast-seo/editor").getPreference("isRtl",!1)),[]);return(0,i.useEffect)((()=>{document.querySelectorAll('[id^="wpseo-meta-tab-"]').forEach((e=>{!function(e){const t=document.querySelector(`#${e}`);null!==t&&(t.style.opacity="0.5",t.style.pointerEvents="none",t.setAttribute("aria-disabled","true"),t.classList.contains("yoast-active-tab")&&t.classList.remove("yoast-active-tab"))}(e.id)}))}),[]),(0,t.createElement)(T.Root,{context:{isRtl:a}},(0,t.createElement)(D,{error:e},(0,t.createElement)(D.HorizontalButtons,{supportLink:r,handleRefreshClick:s}),(0,t.createElement)(F,{target:"wpseo-seo-score-icon",scoreIndicator:"not-set"}),(0,t.createElement)(F,{target:"wpseo-readability-score-icon",scoreIndicator:"not-set"}),(0,t.createElement)(F,{target:"wpseo-inclusive-language-score-icon",scoreIndicator:"not-set"})))};function N({theme:e}){return(0,t.createElement)(S,{theme:e,location:"metabox"},(0,t.createElement)(T.ErrorBoundary,{FallbackComponent:q},(0,t.createElement)(k.Slot,{name:"YoastMetabox"},(e=>_(e)))))}q.propTypes={error:y().object.isRequired};const B=window.wp.compose,$=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{d:"M2 11a1 1 0 011-1h2a1 1 0 011 1v5a1 1 0 01-1 1H3a1 1 0 01-1-1v-5zM8 7a1 1 0 011-1h2a1 1 0 011 1v9a1 1 0 01-1 1H9a1 1 0 01-1-1V7zM14 4a1 1 0 011-1h2a1 1 0 011 1v12a1 1 0 01-1 1h-2a1 1 0 01-1-1V4z"}))})),U=(e=null)=>(0,t.useMemo)((()=>{const t={role:"img","aria-hidden":"true"};return null!==e&&(t.focusable=e?"true":"false"),t}),[e]);var W=s(4530),K=s.n(W);const H=({className:e,...s})=>(0,t.createElement)("span",{className:K()("yst-grow yst-overflow-hidden yst-overflow-ellipsis yst-whitespace-nowrap yst-font-wp yst-text-[#555] yst-text-base yst-leading-[normal] yst-subpixel-antialiased yst-text-left",e),...s});H.displayName="MetaboxButton.Text",H.propTypes={className:y().string},H.defaultProps={className:""};const V=({className:e,...s})=>(0,t.createElement)("button",{type:"button",className:K()("yst-flex yst-items-center yst-w-full yst-pt-4 yst-pb-4 yst-pr-4 yst-pl-6 yst-space-x-2 yst-border-t yst-border-t-[rgb(0,0,0,0.2)] yst-rounded-none yst-transition-all hover:yst-bg-[#f0f0f0] focus:yst-outline focus:yst-outline-[1px] focus:yst-outline-[color:#0066cd] focus:-yst-outline-offset-1 focus:yst-shadow-[0_0_3px_rgba(8,74,103,0.8)]",e),...s});V.propTypes={className:y().string},V.defaultProps={className:""},V.Text=H;const Y=window.yoast.helpers,j=w().div` + min-width: 600px; + + @media screen and ( max-width: 680px ) { + min-width: 0; + width: 86vw; + } +`,z=w().div` + @media screen and ( min-width: 600px ) { + max-width: 420px; + } +`,G=(w()(R.Icon)` + float: ${(0,Y.getDirectionalStyle)("right","left")}; + margin: ${(0,Y.getDirectionalStyle)("0 0 16px 16px","0 16px 16px 0")}; + + && { + width: 150px; + height: 150px; + + @media screen and ( max-width: 680px ) { + width: 80px; + height: 80px; + } + } +`,"yoast yoast-gutenberg-modal"),Z=e=>{const{title:s,className:r,showYoastIcon:a,additionalClassName:n,...o}=e,i=a?(0,t.createElement)("span",{className:"yoast-icon"}):null;return(0,t.createElement)(k.Modal,{title:s,className:`${r} ${n}`,icon:i,...o},e.children)};Z.propTypes={title:y().string,className:y().string,showYoastIcon:y().bool,children:y().oneOfType([y().node,y().arrayOf(y().node)]),additionalClassName:y().string},Z.defaultProps={title:"Yoast SEO",className:G,showYoastIcon:!0,children:null,additionalClassName:""};const X=Z;var Q,J;function ee(){return ee=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",ee({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 425 456.27"},e),Q||(Q=t.createElement("path",{d:"M73 405.26a66.79 66.79 0 0 1-6.54-1.7 64.75 64.75 0 0 1-6.28-2.31c-1-.42-2-.89-3-1.37-1.49-.72-3-1.56-4.77-2.56-1.5-.88-2.71-1.64-3.83-2.39-.9-.61-1.8-1.26-2.68-1.92a70.154 70.154 0 0 1-5.08-4.19 69.21 69.21 0 0 1-8.4-9.17c-.92-1.2-1.68-2.25-2.35-3.24a70.747 70.747 0 0 1-3.44-5.64 68.29 68.29 0 0 1-8.29-32.55V142.13a68.26 68.26 0 0 1 8.29-32.55c1-1.92 2.21-3.82 3.44-5.64s2.55-3.58 4-5.27a69.26 69.26 0 0 1 14.49-13.25C50.37 84.19 52.27 83 54.2 82A67.59 67.59 0 0 1 73 75.09a68.75 68.75 0 0 1 13.75-1.39h169.66L263 55.39H86.75A86.84 86.84 0 0 0 0 142.13v196.09A86.84 86.84 0 0 0 86.75 425h11.32v-18.35H86.75A68.75 68.75 0 0 1 73 405.26zM368.55 60.85l-1.41-.53-6.41 17.18 1.41.53a68.06 68.06 0 0 1 8.66 4c1.93 1 3.82 2.2 5.65 3.43A69.19 69.19 0 0 1 391 98.67c1.4 1.68 2.72 3.46 3.95 5.27s2.39 3.72 3.44 5.64a68.29 68.29 0 0 1 8.29 32.55v264.52H233.55l-.44.76c-3.07 5.37-6.26 10.48-9.49 15.19L222 425h203V142.13a87.2 87.2 0 0 0-56.45-81.28z"})),J||(J=t.createElement("path",{stroke:"#000",strokeMiterlimit:10,strokeWidth:3.81,d:"M119.8 408.28v46c28.49-1.12 50.73-10.6 69.61-29.58 19.45-19.55 36.17-50 52.61-96L363.94 1.9H305l-98.25 272.89-48.86-153h-54l71.7 184.18a75.67 75.67 0 0 1 0 55.12c-7.3 18.68-20.25 40.66-55.79 47.19z"}))),se=e=>(0,t.createElement)("div",{className:"yoast components-panel__body"},(0,t.createElement)("h2",{className:"components-panel__body-title"},(0,t.createElement)("button",{id:e.id,onClick:e.onClick,className:"components-button components-panel__body-toggle",type:"button"},e.prefixIcon&&(0,t.createElement)("span",{className:"yoast-icon-span",style:{fill:`${e.prefixIcon&&e.prefixIcon.color||""}`}},(0,t.createElement)(R.SvgIcon,{size:e.prefixIcon.size,icon:e.prefixIcon.icon})),(0,t.createElement)("span",{className:"yoast-title-container"},(0,t.createElement)("div",{className:"yoast-title"},e.title),(0,t.createElement)("div",{className:"yoast-subtitle"},e.subTitle)),e.children,e.suffixIcon&&(0,t.createElement)(R.SvgIcon,{size:e.suffixIcon.size,icon:e.suffixIcon.icon}),e.SuffixHeroIcon))),re=se;se.propTypes={onClick:y().func.isRequired,title:y().string.isRequired,id:y().string,subTitle:y().string,suffixIcon:y().object,SuffixHeroIcon:y().object,prefixIcon:y().object,children:y().node},se.defaultProps={id:"",suffixIcon:null,SuffixHeroIcon:null,prefixIcon:null,subTitle:"",children:null};const ae=window.moment;var ne=s.n(ae),oe=s(6746);const ie=(0,Y.makeOutboundLink)(),le=e=>{const s=(0,l.sprintf)(/* translators: %d expands to the amount of allowed keyphrases on a free account, %s expands to a link to Wincher plans. */ +(0,l.__)("You've reached the maximum amount of %d keyphrases you can add to your Wincher account. If you wish to add more keyphrases, please %s.","wordpress-seo"),e.limit,"{{updateWincherPlanLink/}}");return(0,t.createElement)(R.Alert,{type:"error"},(0,oe.Z)({mixedString:s,components:{updateWincherPlanLink:(0,t.createElement)(ie,{href:wpseoAdminGlobalL10n["links.wincher.pricing"]},(0,l.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,l.__)("upgrade your %s plan","wordpress-seo"),"Wincher"))}}))};le.propTypes={limit:y().number},le.defaultProps={limit:10};const ce=le,de=()=>(0,t.createElement)(R.Alert,{type:"error"},(0,l.__)("Something went wrong while tracking the ranking position(s) of your page. Please try again later.","wordpress-seo")),pe=window.wp.apiFetch;var ue=s.n(pe);async function me(e,t,s,r=200){try{const a=await e();return!!a&&(a.status===r?t(a):s(a))}catch(e){console.error(e.message)}}async function he(e){try{return await ue()(e)}catch(e){return e.error&&e.status?e:e instanceof Response&&await e.json()}}async function ge(e){return(0,m.isArray)(e)||(e=[e]),await he({path:"yoast/v1/wincher/keyphrases/track",method:"POST",data:{keyphrases:e}})}const ye=w().p` + color: ${C.colors.$color_pink_dark}; + font-size: 14px; + font-weight: 700; + margin: 13px 0 10px; +`,fe=w()(R.SvgIcon)` + margin-right: 5px; + vertical-align: middle; +`,we=w().button` + position: absolute; + top: 9px; + right: 9px; + border: none; + background: none; + cursor: pointer; +`,be=w().p` + font-size: 13px; + font-weight: 500; + margin: 10px 0 13px; +`,Ee=w().div` + position: relative; + background: ${e=>e.isTitleShortened?"#F5F7F7":"transparent"}; + border: 1px solid #C7C7C7; + border-left: 4px solid${C.colors.$color_pink_dark}; + padding: 0 16px; + margin-bottom: 1.5em; +`,ve=e=>{const[t,s]=(0,i.useState)(null);return(0,i.useEffect)((()=>{e&&!t&&async function(){return await he({path:"yoast/v1/wincher/account/limit",method:"GET"})}().then((e=>s(e)))}),[t]),t};ve.propTypes={limit:y().bool.isRequired};const ke=({limit:e,usage:s,isTitleShortened:r,isFreeAccount:a})=>{const n=(0,l.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,l.__)("Your are tracking %1$s out of %2$s keyphrases included in your free account.","wordpress-seo"),s,e),o=(0,l.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,l.__)("Your are tracking %1$s out of %2$s keyphrases included in your account.","wordpress-seo"),s,e),i=a?n:o,c=(0,l.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,l.__)("Keyphrases tracked: %1$s/%2$s","wordpress-seo"),s,e),d=r?c:i;return(0,t.createElement)(ye,null,r&&(0,t.createElement)(fe,{icon:"exclamation-triangle",color:C.colors.$color_pink_dark,size:"14px"}),d)};ke.propTypes={limit:y().number.isRequired,usage:y().number.isRequired,isTitleShortened:y().bool,isFreeAccount:y().bool};const _e=(0,Y.makeOutboundLink)(),xe=({discount:e,months:s})=>{const r=(0,t.createElement)(_e,{href:wpseoAdminGlobalL10n["links.wincher.upgrade"],style:{fontWeight:600}},(0,l.sprintf)(/* Translators: %s : Expands to "Wincher". */ +(0,l.__)("Click here to upgrade your %s plan","wordpress-seo"),"Wincher"));if(!e||!s)return(0,t.createElement)(be,null,r);const a=100*e,n=(0,l.sprintf)( +/* Translators: %1$s expands to upgrade account link. + * %2$s expands to the upgrade discount value. + * %3$s expands to the upgrade discount duration e.g. 2 months. + */ +(0,l.__)("%1$s and get an exclusive %2$s discount for %3$s month(s).","wordpress-seo"),"{{wincherAccountUpgradeLink/}}",a+"%",s);return(0,t.createElement)(be,null,(0,oe.Z)({mixedString:n,components:{wincherAccountUpgradeLink:r}}))};xe.propTypes={discount:y().number,months:y().number};const Se=({onClose:e,isTitleShortened:s,trackingInfo:r})=>{const a=(()=>{const[e,t]=(0,i.useState)(null);return(0,i.useEffect)((()=>{e||async function(){return await he({path:"yoast/v1/wincher/account/upgrade-campaign",method:"GET"})}().then((e=>t(e)))}),[e]),e})();if(null===r)return null;const{limit:n,usage:o}=r;if(!(n&&o/n>=.8))return null;const c=Boolean(null==a?void 0:a.discount);return(0,t.createElement)(Ee,{isTitleShortened:s},e&&(0,t.createElement)(we,{type:"button","aria-label":(0,l.__)("Close the upgrade callout","wordpress-seo"),onClick:e},(0,t.createElement)(R.SvgIcon,{icon:"times-circle",color:C.colors.$color_pink_dark,size:"14px"})),(0,t.createElement)(ke,{...r,isTitleShortened:s,isFreeAccount:c}),(0,t.createElement)(xe,{discount:null==a?void 0:a.discount,months:null==a?void 0:a.months}))};Se.propTypes={onClose:y().func,isTitleShortened:y().bool,trackingInfo:y().object};const Te=Se,Re=()=>(0,t.createElement)(R.Alert,{type:"success"},(0,l.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,l.__)("You have successfully connected to %s! You can now track the SEO performance for the keyphrase(s) of this page.","wordpress-seo"),"Wincher")),Ce=()=>(0,t.createElement)(R.Alert,{type:"info"},(0,l.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,l.__)("%s is currently tracking the ranking position(s) of your page. This may take a few minutes. Please wait or check back later.","wordpress-seo"),"Wincher")),Ie=({data:e,mapChartDataToTableData:s,dataTableCaption:r,dataTableHeaderLabels:a,isDataTableVisuallyHidden:n})=>e.length!==a.length?(0,t.createElement)("p",null,(0,l.__)("The number of headers and header labels don't match.","wordpress-seo")):(0,t.createElement)("div",{className:n?"screen-reader-text":null},(0,t.createElement)("table",null,(0,t.createElement)("caption",null,r),(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,a.map(((e,s)=>(0,t.createElement)("th",{key:s},e))))),(0,t.createElement)("tbody",null,(0,t.createElement)("tr",null,e.map(((e,r)=>(0,t.createElement)("td",{key:r},s(e.y))))))));Ie.propTypes={data:y().arrayOf(y().shape({x:y().number,y:y().number})).isRequired,mapChartDataToTableData:y().func,dataTableCaption:y().string.isRequired,dataTableHeaderLabels:y().array.isRequired,isDataTableVisuallyHidden:y().bool},Ie.defaultProps={mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const Ae=Ie,Le=({data:e,width:s,height:r,fillColor:a,strokeColor:n,strokeWidth:o,className:l,mapChartDataToTableData:c,dataTableCaption:d,dataTableHeaderLabels:p,isDataTableVisuallyHidden:u})=>{const m=Math.max(1,Math.max(...e.map((e=>e.x)))),h=Math.max(1,Math.max(...e.map((e=>e.y)))),g=r-o,y=e.map((e=>`${e.x/m*s},${g-e.y/h*g+o}`)).join(" "),f=`0,${g+o} `+y+` ${s},${g+o}`;return(0,t.createElement)(i.Fragment,null,(0,t.createElement)("svg",{width:s,height:r,viewBox:`0 0 ${s} ${r}`,className:l,role:"img","aria-hidden":"true",focusable:"false"},(0,t.createElement)("polygon",{fill:a,points:f}),(0,t.createElement)("polyline",{fill:"none",stroke:n,strokeWidth:o,strokeLinejoin:"round",strokeLinecap:"round",points:y})),c&&(0,t.createElement)(Ae,{data:e,mapChartDataToTableData:c,dataTableCaption:d,dataTableHeaderLabels:p,isDataTableVisuallyHidden:u}))};Le.propTypes={data:y().arrayOf(y().shape({x:y().number,y:y().number})).isRequired,width:y().number.isRequired,height:y().number.isRequired,fillColor:y().string,strokeColor:y().string,strokeWidth:y().number,className:y().string,mapChartDataToTableData:y().func,dataTableCaption:y().string.isRequired,dataTableHeaderLabels:y().array.isRequired,isDataTableVisuallyHidden:y().bool},Le.defaultProps={fillColor:null,strokeColor:"#000000",strokeWidth:1,className:"",mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const Pe=Le,Fe=()=>(0,t.createElement)("p",{className:"yoast-wincher-seo-performance-modal__loading-message"},(0,l.__)("Tracking the ranking position...","wordpress-seo")," ",(0,t.createElement)(R.SvgIcon,{icon:"loading-spinner"})),Oe=w()(R.SvgIcon)` + margin-left: 2px; + flex-shrink: 0; + rotate: ${e=>e.isImproving?"-90deg":"90deg"}; +`,Me=w().span` + color: ${e=>e.isImproving?"#69AB56":"#DC3332"}; + font-size: 13px; + font-weight: 600; + line-height: 20px; + margin-right: 2px; + margin-left: 12px; +`,De=w().td` + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,qe=w().td` + padding-left: 2px !important; +`,Ne=w().td.attrs({className:"yoast-table--nopadding"})` + & > div { + justify-content: center; + } +`,Be=w().div` + display: flex; + align-items: center; + & > a { + box-sizing: border-box; + } +`,$e=w().button` + background: none; + color: inherit; + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; + display: flex; + align-items: center; +`,Ue=w().tr` + background-color: ${e=>e.isEnabled?"#FFFFFF":"#F9F9F9"} !important; +`;function We(e){return Math.round(100*e)}function Ke({chartData:e}){if((0,m.isEmpty)(e)||(0,m.isEmpty)(e.position))return"?";const s=function(e){return Array.from({length:e.position.history.length},((e,t)=>t+1)).map((e=>(0,l.sprintf)((0,l._n)("%d day","%d days",e,"wordpress-seo"),e)))}(e),r=e.position.history.map(((e,t)=>({x:t,y:101-e.value})));return(0,t.createElement)(Pe,{width:66,height:24,data:r,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",mapChartDataToTableData:We,dataTableCaption:(0,l.__)("Keyphrase position in the last 90 days on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:s})}Ke.propTypes={chartData:y().object},Ke.defaultProps={chartData:{}};const He=({rowData:e})=>{var s;if(null==e||null===(s=e.position)||void 0===s||!s.change)return(0,t.createElement)(Ke,{chartData:e});const r=e.position.change<0;return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(Ke,{chartData:e}),(0,t.createElement)(Me,{isImproving:r},Math.abs(e.position.change)),(0,t.createElement)(Oe,{icon:"caret-right",color:r?"#69AB56":"#DC3332",size:"14px",isImproving:r}))};function Ve(e){var s;const{keyphrase:r,rowData:a,onTrackKeyphrase:n,onUntrackKeyphrase:o,isFocusKeyphrase:c,isDisabled:d,isLoading:p,isSelected:u,onSelectKeyphrases:h}=e,g=!(0,m.isEmpty)(a),y=!(0,m.isEmpty)(null==a||null===(s=a.position)||void 0===s?void 0:s.history),f=(0,i.useCallback)((()=>{d||(g?o(r,a.id):n(r))}),[r,n,o,g,a,d]),w=(0,i.useCallback)((()=>{h((e=>u?e.filter((e=>e!==r)):e.concat(r)))}),[h,u,r]);return(0,t.createElement)(Ue,{isEnabled:g},(0,t.createElement)(De,null,y&&(0,t.createElement)(R.Checkbox,{id:"select-"+r,onChange:w,checked:u,label:""})),(0,t.createElement)(qe,null,r,c&&(0,t.createElement)("span",null,"*")),function(e){const{rowData:s,websiteId:r,keyphrase:a,onSelectKeyphrases:n}=e,o=(0,i.useCallback)((()=>{n([a])}),[n,a]),c=!(0,m.isEmpty)(s),d=s&&s.updated_at&&ne()(s.updated_at)>=ne()().subtract(7,"days"),p=s?(0,l.sprintf)("https://app.wincher.com/websites/%s/keywords?serp=%s&utm_medium=plugin&utm_source=yoast&referer=yoast&partner=yoast",r,s.id):null;return c?d?(0,t.createElement)(i.Fragment,null,(0,t.createElement)("td",null,(0,t.createElement)(Be,null,function(e){return!e||!e.position||e.position.value>100?"> 100":e.position.value}(s),(0,t.createElement)(R.ButtonStyledLink,{variant:"secondary",href:p,style:{height:28,marginLeft:12},rel:"noopener",target:"_blank"},(0,l.__)("View","wordpress-seo")))),(0,t.createElement)("td",{className:"yoast-table--nopadding"},(0,t.createElement)($e,{type:"button",onClick:o},(0,t.createElement)(He,{rowData:s}))),(0,t.createElement)("td",null,(u=s.updated_at,ne()(u).fromNow()))):(0,t.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,t.createElement)(Fe,null)):(0,t.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,t.createElement)("i",null,(0,l.__)("Activate tracking to show the ranking position","wordpress-seo")));var u}(e),(0,t.createElement)(Ne,null,function({keyphrase:e,isEnabled:s,toggleAction:r,isLoading:a}){return a?(0,t.createElement)(R.SvgIcon,{icon:"loading-spinner"}):(0,t.createElement)(R.Toggle,{id:`toggle-keyphrase-tracking-${e}`,className:"wincher-toggle",isEnabled:s,onSetToggleState:r,showToggleStateLabel:!1})}({keyphrase:r,isEnabled:g,toggleAction:f,isLoading:p})))}He.propTypes={rowData:y().object},Ve.propTypes={rowData:y().object,keyphrase:y().string.isRequired,onTrackKeyphrase:y().func,onUntrackKeyphrase:y().func,isFocusKeyphrase:y().bool,isDisabled:y().bool,isLoading:y().bool,websiteId:y().string,isSelected:y().bool.isRequired,onSelectKeyphrases:y().func.isRequired},Ve.defaultProps={rowData:{},onTrackKeyphrase:()=>{},onUntrackKeyphrase:()=>{},isFocusKeyphrase:!1,isDisabled:!1,isLoading:!1,websiteId:""};const Ye=(0,Y.makeOutboundLink)(),je=w().span` + display: block; + font-style: italic; + + @media (min-width: 782px) { + display: inline; + position: absolute; + ${(0,Y.getDirectionalStyle)("right","left")}: 8px; + } +`,ze=w().div` + width: 100%; + overflow-y: auto; +`,Ge=w().th` + pointer-events: ${e=>e.isDisabled?"none":"initial"}; + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,Ze=w().th` + padding-left: 2px !important; +`,Xe=e=>{const t=(0,i.useRef)();return(0,i.useEffect)((()=>{t.current=e})),t.current},Qe=(0,m.debounce)((async function(e=null,t=null,s=null,r){return await he({path:"yoast/v1/wincher/keyphrases",method:"POST",data:{keyphrases:e,permalink:s,startAt:t},signal:r})}),500,{leading:!0}),Je=e=>{const{addTrackedKeyphrase:s,isLoggedIn:r,keyphrases:a,permalink:n,removeTrackedKeyphrase:o,setKeyphraseLimitReached:c,setRequestFailed:d,setRequestSucceeded:p,setTrackedKeyphrases:u,setHasTrackedAll:h,trackAll:g,trackedKeyphrases:y,isNewlyAuthenticated:f,websiteId:w,focusKeyphrase:b,newRequest:E,startAt:v,selectedKeyphrases:k,onSelectKeyphrases:_}=e,x=(0,i.useRef)(),S=(0,i.useRef)(),T=(0,i.useRef)(!1),[C,I]=(0,i.useState)([]),A=(0,i.useCallback)((e=>{const t=e.toLowerCase();return y&&!(0,m.isEmpty)(y)&&y.hasOwnProperty(t)?y[t]:null}),[y]),L=(0,i.useMemo)((()=>async()=>{await me((()=>(S.current&&S.current.abort(),S.current="undefined"==typeof AbortController?null:new AbortController,Qe(a,v,n,S.current.signal))),(e=>{p(e),u(e.results)}),(e=>{d(e)}))}),[p,d,u,a,n,v]),P=(0,i.useCallback)((async e=>{const t=(Array.isArray(e)?e:[e]).map((e=>e.toLowerCase()));I((e=>[...e,...t])),await me((()=>ge(t)),(e=>{p(e),s(e.results),L()}),(e=>{400===e.status&&e.limit&&c(e.limit),d(e)}),201),I((e=>(0,m.without)(e,...t)))}),[p,d,c,s,L]),F=(0,i.useCallback)((async(e,t)=>{e=e.toLowerCase(),I((t=>[...t,e])),await me((()=>async function(e){return await he({path:"yoast/v1/wincher/keyphrases/untrack",method:"DELETE",data:{keyphraseID:e}})}(t)),(t=>{p(t),o(e)}),(e=>{d(e)})),I((t=>(0,m.without)(t,e)))}),[p,o,d]),O=(0,i.useCallback)((async e=>{E(),await P(e)}),[E,P]),M=Xe(n),D=Xe(a),q=Xe(v),N=n&&v;(0,i.useEffect)((()=>{r&&N&&(n!==M||(0,m.difference)(a,D).length||v!==q)&&L()}),[r,n,M,a,D,L,N,v,q]),(0,i.useEffect)((()=>{if(r&&g&&null!==y){const e=a.filter((e=>!A(e)));e.length&&P(e),h()}}),[r,g,y,P,h,A,a]),(0,i.useEffect)((()=>{f&&!T.current&&(L(),T.current=!0)}),[f,L]),(0,i.useEffect)((()=>{if(r&&!(0,m.isEmpty)(y))return(0,m.filter)(y,(e=>(0,m.isEmpty)(e.updated_at))).length>0&&(x.current=setInterval((()=>{L()}),1e4)),()=>{clearInterval(x.current)}}),[r,y,L]);const B=r&&null===y,$=(0,i.useMemo)((()=>(0,m.isEmpty)(y)?[]:Object.values(y).filter((e=>{var t;return!(0,m.isEmpty)(null==e||null===(t=e.position)||void 0===t?void 0:t.history)})).map((e=>e.keyword))),[y]),U=(0,i.useMemo)((()=>k.length>0&&$.length>0&&$.every((e=>k.includes(e)))),[k,$]),W=(0,i.useCallback)((()=>{_(U?[]:$)}),[_,U,$]),K=(0,i.useMemo)((()=>(0,m.orderBy)(a,[e=>Object.values(y||{}).map((e=>e.keyword)).includes(e)],["desc"])),[a,y]);return a&&!(0,m.isEmpty)(a)&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(ze,null,(0,t.createElement)("table",{className:"yoast yoast-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)(Ge,{isDisabled:0===$.length},(0,t.createElement)(R.Checkbox,{id:"select-all",onChange:W,checked:U,label:""})),(0,t.createElement)(Ze,{scope:"col",abbr:(0,l.__)("Keyphrase","wordpress-seo")},(0,l.__)("Keyphrase","wordpress-seo")),(0,t.createElement)("th",{scope:"col",abbr:(0,l.__)("Position","wordpress-seo")},(0,l.__)("Position","wordpress-seo")),(0,t.createElement)("th",{scope:"col",abbr:(0,l.__)("Position over time","wordpress-seo")},(0,l.__)("Position over time","wordpress-seo")),(0,t.createElement)("th",{scope:"col",abbr:(0,l.__)("Last updated","wordpress-seo")},(0,l.__)("Last updated","wordpress-seo")),(0,t.createElement)("th",{scope:"col",abbr:(0,l.__)("Tracking","wordpress-seo")},(0,l.__)("Tracking","wordpress-seo")))),(0,t.createElement)("tbody",null,K.map(((e,s)=>(0,t.createElement)(Ve,{key:`trackable-keyphrase-${s}`,keyphrase:e,onTrackKeyphrase:O,onUntrackKeyphrase:F,rowData:A(e),isFocusKeyphrase:e===b.trim().toLowerCase(),websiteId:w,isDisabled:!r,isLoading:B||C.indexOf(e.toLowerCase())>=0,isSelected:k.includes(e),onSelectKeyphrases:_})))))),(0,t.createElement)("p",{style:{marginBottom:0,position:"relative"}},(0,t.createElement)(Ye,{href:wpseoAdminGlobalL10n["links.wincher.login"]},(0,l.sprintf)(/* translators: %s expands to Wincher */ +(0,l.__)("Get more insights over at %s","wordpress-seo"),"Wincher")),(0,t.createElement)(je,null,(0,l.__)("* focus keyphrase","wordpress-seo"))))};Je.propTypes={addTrackedKeyphrase:y().func.isRequired,isLoggedIn:y().bool,isNewlyAuthenticated:y().bool,keyphrases:y().array,newRequest:y().func.isRequired,removeTrackedKeyphrase:y().func.isRequired,setRequestFailed:y().func.isRequired,setKeyphraseLimitReached:y().func.isRequired,setRequestSucceeded:y().func.isRequired,setTrackedKeyphrases:y().func.isRequired,setHasTrackedAll:y().func.isRequired,trackAll:y().bool,trackedKeyphrases:y().object,websiteId:y().string,permalink:y().string.isRequired,focusKeyphrase:y().string,startAt:y().string,selectedKeyphrases:y().arrayOf(y().string).isRequired,onSelectKeyphrases:y().func.isRequired},Je.defaultProps={isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],trackAll:!1,websiteId:"",focusKeyphrase:""};const et=Je,tt=(0,B.compose)([(0,n.withSelect)((e=>{const{getWincherWebsiteId:t,getWincherTrackableKeyphrases:s,getWincherLoginStatus:r,getWincherPermalink:a,getFocusKeyphrase:n,isWincherNewlyAuthenticated:o,shouldWincherTrackAll:i}=e("yoast-seo/editor");return{focusKeyphrase:n(),keyphrases:s(),isLoggedIn:r(),trackAll:i(),websiteId:t(),isNewlyAuthenticated:o(),permalink:a()}})),(0,n.withDispatch)((e=>{const{setWincherNewRequest:t,setWincherRequestSucceeded:s,setWincherRequestFailed:r,setWincherSetKeyphraseLimitReached:a,setWincherTrackedKeyphrases:n,setWincherTrackingForKeyphrase:o,setWincherTrackAllKeyphrases:i,unsetWincherTrackingForKeyphrase:l}=e("yoast-seo/editor");return{newRequest:()=>{t()},setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{r(e)},setKeyphraseLimitReached:e=>{a(e)},addTrackedKeyphrase:e=>{o(e)},removeTrackedKeyphrase:e=>{l(e)},setTrackedKeyphrases:e=>{n(e)},setHasTrackedAll:()=>{i(!1)}}}))])(et),st=(0,Y.makeOutboundLink)(),rt=(0,Y.makeOutboundLink)(),at=()=>{const e=(0,l.sprintf)((0,l.__)(/* translators: %1$s expands to a link to Wincher, %2$s expands to a link to the keyphrase tracking article on Yoast.com */ +"With %1$s you can track the ranking position of your page in the search results based on your keyphrase(s). %2$s","wordpress-seo"),"{{wincherLink/}}","{{wincherReadMoreLink/}}");return(0,t.createElement)("p",null,(0,oe.Z)({mixedString:e,components:{wincherLink:(0,t.createElement)(st,{href:wpseoAdminGlobalL10n["links.wincher.website"]},"Wincher"),wincherReadMoreLink:(0,t.createElement)(rt,{href:wpseoAdminL10n["shortlinks.wincher.seo_performance"]},(0,l.__)("Read more about keyphrase tracking with Wincher","wordpress-seo"))}}))},nt=()=>(0,t.createElement)(R.Alert,{type:"error"},(0,l.__)("No keyphrase has been set. Please set a keyphrase first.","wordpress-seo")),ot=()=>(0,t.createElement)(R.Alert,{type:"info"},(0,l.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,l.__)("Automatic tracking of keyphrases is enabled. Your keyphrase(s) will automatically be tracked by %s when you publish your post.","wordpress-seo"),"Wincher"));class it{constructor(e,t={},s={}){this.url=e,this.origin=new URL(e).origin,this.eventHandlers=Object.assign({success:{type:"",callback:()=>{}},error:{type:"",callback:()=>{}}},t),this.options=Object.assign({height:570,width:340,title:""},s),this.popup=null,this.createPopup=this.createPopup.bind(this),this.messageHandler=this.messageHandler.bind(this),this.getPopup=this.getPopup.bind(this)}createPopup(){const{height:e,width:t,title:s}=this.options,r=["top="+(window.top.outerHeight/2+window.top.screenY-e/2),"left="+(window.top.outerWidth/2+window.top.screenX-t/2),"width="+t,"height="+e,"resizable=1","scrollbars=1","status=0"];this.popup&&!this.popup.closed||(this.popup=window.open(this.url,s,r.join(","))),this.popup&&this.popup.focus(),window.addEventListener("message",this.messageHandler,!1)}async messageHandler(e){const{data:t,source:s,origin:r}=e;r===this.origin&&this.popup===s&&(t.type===this.eventHandlers.success.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.success.callback(t)),t.type===this.eventHandlers.error.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.error.callback(t)))}getPopup(){return this.popup}isClosed(){return!this.popup||this.popup.closed}focus(){this.isClosed()||this.popup.focus()}}const lt=e=>{const s=(0,l.sprintf)(/* translators: %s expands to a link to open the Wincher login popup. */ +(0,l.__)("It seems like something went wrong when retrieving your website's data. Please %s and try again.","wordpress-seo"),"{{reconnectToWincher/}}","Wincher");return(0,t.createElement)(R.Alert,{type:"error",className:e.className},(0,oe.Z)({mixedString:s,components:{reconnectToWincher:(0,t.createElement)("a",{href:"#",onClick:t=>{t.preventDefault(),e.onReconnect()}},(0,l.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,l.__)("reconnect to %s","wordpress-seo"),"Wincher"))}}))};lt.propTypes={onReconnect:y().func.isRequired,className:y().string},lt.defaultProps={className:""};const ct=lt,dt=()=>(0,t.createElement)(R.Alert,{type:"error"},(0,l.__)("Before you can track your SEO performance make sure to set either the post’s title and save it as a draft or manually set the post’s slug.","wordpress-seo")),pt=window.yoast["chart.js"],ut="label";function mt(e,t){"function"==typeof e?e(t):e&&(e.current=t)}function ht(e,t){e.labels=t}function gt(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ut;const r=[];e.datasets=t.map((t=>{const a=e.datasets.find((e=>e[s]===t[s]));return a&&t.data&&!r.includes(a)?(r.push(a),Object.assign(a,t),a):{...t}}))}function yt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ut;const s={labels:[],datasets:[]};return ht(s,e.labels),gt(s,e.datasets,t),s}function ft(e,s){const{height:r=150,width:a=300,redraw:n=!1,datasetIdKey:o,type:i,data:l,options:c,plugins:d=[],fallbackContent:p,updateMode:u,...m}=e,h=(0,t.useRef)(null),g=(0,t.useRef)(),y=()=>{h.current&&(g.current=new pt.Chart(h.current,{type:i,data:yt(l,o),options:c&&{...c},plugins:d}),mt(s,g.current))},f=()=>{mt(s,null),g.current&&(g.current.destroy(),g.current=null)};return(0,t.useEffect)((()=>{!n&&g.current&&c&&function(e,t){const s=e.options;s&&t&&Object.assign(s,t)}(g.current,c)}),[n,c]),(0,t.useEffect)((()=>{!n&&g.current&&ht(g.current.config.data,l.labels)}),[n,l.labels]),(0,t.useEffect)((()=>{!n&&g.current&&l.datasets&>(g.current.config.data,l.datasets,o)}),[n,l.datasets]),(0,t.useEffect)((()=>{g.current&&(n?(f(),setTimeout(y)):g.current.update(u))}),[n,c,l.labels,l.datasets,u]),(0,t.useEffect)((()=>{g.current&&(f(),setTimeout(y))}),[i]),(0,t.useEffect)((()=>(y(),()=>f())),[]),t.createElement("canvas",Object.assign({ref:h,role:"img",height:r,width:a},m),p)}const wt=(0,t.forwardRef)(ft);function bt(e,s){return pt.Chart.register(s),(0,t.forwardRef)(((s,r)=>t.createElement(wt,Object.assign({},s,{ref:r,type:e}))))}const Et=bt("line",pt.LineController),vt={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};pt._adapters._date.override("function"==typeof ne()?{_id:"moment",formats:function(){return vt},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=ne()(e,t):e instanceof ne()||(e=ne()(e)),e.isValid()?e.valueOf():null},format:function(e,t){return ne()(e).format(t)},add:function(e,t,s){return ne()(e).add(t,s).valueOf()},diff:function(e,t,s){return ne()(e).diff(ne()(t),s)},startOf:function(e,t,s){return e=ne()(e),"isoWeek"===t?(s=Math.trunc(Math.min(Math.max(0,s),6)),e.isoWeekday(s).startOf("day").valueOf()):e.startOf(t).valueOf()},endOf:function(e,t){return ne()(e).endOf(t).valueOf()}}:{}),Math.PI,Number.POSITIVE_INFINITY,Math.log10,Math.sign,"undefined"==typeof window||window.requestAnimationFrame,new Map,Object.create(null),Object.create(null),Number.EPSILON;const kt=["top","right","bottom","left"];function _t(e,t,s){const r={};s=s?"-"+s:"";for(let a=0;a<4;a++){const n=kt[a];r[n]=parseFloat(e[t+"-"+n+s])||0}return r.width=r.left+r.right,r.height=r.top+r.bottom,r}!function(){let e=!1;try{const t={get passive(){return e=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}}(),pt.Chart.register(pt.CategoryScale,pt.LineController,pt.LineElement,pt.PointElement,pt.LinearScale,pt.TimeScale,pt.Legend,pt.Tooltip);const xt=["#ff983b","#ffa3f7","#3798ff","#ff3b3b","#acce81","#b51751","#3949ab","#26c6da","#ccb800","#de66ff","#4db6ac","#ffab91","#45f5f1","#77f210","#90a4ae","#ffd54f","#006b5e","#8ec7d2","#b1887c","#cc9300"];function St({datasets:e,isChartShown:s,keyphrases:r}){if(!s)return null;const a=(0,i.useMemo)((()=>Object.fromEntries([...r].sort().map(((e,t)=>[e,xt[t%xt.length]])))),[r]),n=e.map((e=>{const t=a[e.label];return{...e,data:e.data.map((({datetime:e,value:t})=>({x:e,y:t}))),lineTension:0,pointRadius:1,pointHoverRadius:4,borderWidth:2,pointHitRadius:6,backgroundColor:t,borderColor:t}})).filter((e=>!1!==e.selected));return(0,t.createElement)(Et,{height:100,data:{datasets:n},options:{plugins:{legend:{display:!0,position:"bottom",labels:{color:"black",usePointStyle:!0,boxHeight:7,boxWidth:7},onClick:m.noop},tooltip:{enabled:!0,callbacks:{title:e=>ne()(e[0].raw.x).utc().format("YYYY-MM-DD")},titleAlign:"center",mode:"xPoint",position:"nearest",usePointStyle:!0,boxHeight:7,boxWidth:7,boxPadding:2}},scales:{x:{bounds:"ticks",type:"time",time:{unit:"day",minUnit:"day"},grid:{display:!1},ticks:{autoSkipPadding:50,maxRotation:0,color:"black"}},y:{bounds:"ticks",offset:!0,reverse:!0,ticks:{precision:0,color:"black"},max:101}}}})}pt.Interaction.modes.xPoint=(e,t,s,r)=>{const a=function(e,t){if("native"in e)return e;const{canvas:s,currentDevicePixelRatio:r}=t,a=(m=s).ownerDocument.defaultView.getComputedStyle(m,null),n="border-box"===a.boxSizing,o=_t(a,"padding"),i=_t(a,"border","width"),{x:l,y:c,box:d}=function(e,t){const s=e.touches,r=s&&s.length?s[0]:e,{offsetX:a,offsetY:n}=r;let o,i,l=!1;if(((e,t,s)=>(e>0||t>0)&&(!s||!s.shadowRoot))(a,n,e.target))o=a,i=n;else{const e=t.getBoundingClientRect();o=r.clientX-e.left,i=r.clientY-e.top,l=!0}return{x:o,y:i,box:l}}(e,s),p=o.left+(d&&i.left),u=o.top+(d&&i.top);var m;let{width:h,height:g}=t;return n&&(h-=o.width+i.width,g-=o.height+i.height),{x:Math.round((l-p)/h*s.width/r),y:Math.round((c-u)/g*s.height/r)}}(t,e);let n=[];if(pt.Interaction.evaluateInteractionItems(e,"x",a,((e,t,s)=>{e.inXRange(a.x,r)&&n.push({element:e,datasetIndex:t,index:s})})),0===n.length)return n;const o=n.reduce(((e,t)=>Math.abs(a.x-e.element.x)e.element.x===o)),n.some((e=>Math.abs(e.element.y-a.y)<10))?n:[]},St.propTypes={datasets:y().arrayOf(y().shape({label:y().string.isRequired,data:y().arrayOf(y().shape({datetime:y().string.isRequired,value:y().number.isRequired})).isRequired,selected:y().bool})).isRequired,isChartShown:y().bool.isRequired,keyphrases:y().array.isRequired};const Tt=({response:e,onLogin:s})=>[401,403,404].includes(e.status)?(0,t.createElement)(ct,{onReconnect:s}):(0,t.createElement)(de,null);Tt.propTypes={response:y().object.isRequired,onLogin:y().func.isRequired};const Rt=({isSuccess:e,response:s,allKeyphrasesMissRanking:r,onLogin:a,keyphraseLimitReached:n,limit:o})=>n?(0,t.createElement)(ce,{limit:o}):(0,m.isEmpty)(s)||e?r?(0,t.createElement)(Ce,null):null:(0,t.createElement)(Tt,{response:s,onLogin:a});Rt.propTypes={isSuccess:y().bool.isRequired,allKeyphrasesMissRanking:y().bool.isRequired,response:y().object,onLogin:y().func.isRequired,keyphraseLimitReached:y().bool.isRequired,limit:y().number.isRequired},Rt.defaultProps={response:{}};let Ct=null;const It=async e=>{if(Ct&&!Ct.isClosed())return void Ct.focus();const{url:t}=await async function(){return await he({path:"yoast/v1/wincher/authorization-url",method:"GET"})}();Ct=new it(t,{success:{type:"wincher:oauth:success",callback:t=>(async(e,t)=>{const{onAuthentication:s,setRequestSucceeded:r,setRequestFailed:a,keyphrases:n,addTrackedKeyphrase:o,setKeyphraseLimitReached:i}=e;await me((()=>async function(e){const{code:t,websiteId:s}=e;return await he({path:"yoast/v1/wincher/authenticate",method:"POST",data:{code:t,websiteId:s}})}(t)),(async e=>{s(!0,!0,t.websiteId.toString()),r(e);const l=(Array.isArray(n)?n:[n]).map((e=>e.toLowerCase()));await me((()=>ge(l)),(e=>{r(e),o(e.results)}),(e=>{400===e.status&&e.limit&&i(e.limit),a(e)}),201);const c=Ct.getPopup();c&&c.close()}),(async e=>a(e)))})(e,t)},error:{type:"wincher:oauth:error",callback:()=>e.onAuthentication(!1,!1)}},{title:"Wincher_login",width:500,height:700}),Ct.createPopup()},At=e=>e.isLoggedIn?null:(0,t.createElement)("p",null,(0,t.createElement)(R.NewButton,{onClick:e.onLogin,variant:"primary"},(0,l.sprintf)(/* translators: %s expands to Wincher */ +(0,l.__)("Connect with %s","wordpress-seo"),"Wincher")));At.propTypes={isLoggedIn:y().bool.isRequired,onLogin:y().func.isRequired};const Lt=w().div` + p { + margin: 1em 0; + } +`,Pt=w().div` + ${e=>e.isDisabled&&"\n\t\topacity: .5;\n\t\tpointer-events: none;\n\t"}; +`,Ft=w().div` + font-weight: var(--yoast-font-weight-bold); + color: var(--yoast-color-label); + font-size: var(--yoast-font-size-default); +`,Ot=w().div.attrs({className:"yoast-field-group"})` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 14px; +`,Mt=w().div` + margin: 8px 0; +`,Dt=ne().utc().startOf("day"),qt=[{name:(0,l.__)("Last day","wordpress-seo"),value:ne()(Dt).subtract(1,"days").format(),defaultIndex:1},{name:(0,l.__)("Last week","wordpress-seo"),value:ne()(Dt).subtract(1,"week").format(),defaultIndex:2},{name:(0,l.__)("Last month","wordpress-seo"),value:ne()(Dt).subtract(1,"month").format(),defaultIndex:3},{name:(0,l.__)("Last year","wordpress-seo"),value:ne()(Dt).subtract(1,"year").format(),defaultIndex:0}],Nt=e=>{const{onSelect:s,selected:r,options:a,isLoggedIn:n}=e;return n?a.length<1?null:(0,t.createElement)("select",{className:"components-select-control__input",id:"wincher-period-picker",value:(null==r?void 0:r.value)||a[0].value,onChange:s},a.map((e=>(0,t.createElement)("option",{key:e.name,value:e.value},e.name)))):null};Nt.propTypes={onSelect:y().func.isRequired,selected:y().object,options:y().array.isRequired,isLoggedIn:y().bool.isRequired};const Bt=e=>{const{trackedKeyphrases:s,isLoggedIn:r,keyphrases:a,shouldTrackAll:n,permalink:o,historyDaysLimit:c}=e;if(!o&&r)return(0,t.createElement)(dt,null);if(0===a.length)return(0,t.createElement)(nt,null);const d=ne()(Dt).subtract(c,"days"),p=qt.filter((e=>ne()(e.value).isSameOrAfter(d))),u=(0,m.orderBy)(p,(e=>e.defaultIndex),"desc")[0],[h,g]=(0,i.useState)(u),[y,f]=(0,i.useState)([]),w=y.length>0,b=(0,B.usePrevious)(s);(0,i.useEffect)((()=>{if(!(0,m.isEmpty)(s)&&(0,m.difference)(Object.keys(s),Object.keys(b||[])).length){const e=Object.values(s).map((e=>e.keyword));f(e)}}),[s,b]),(0,i.useEffect)((()=>{g(u)}),[null==u?void 0:u.name]);const E=(0,i.useCallback)((e=>{const t=qt.find((t=>t.value===e.target.value));t&&g(t)}),[g]),v=(0,i.useMemo)((()=>(0,m.isEmpty)(y)||(0,m.isEmpty)(s)?[]:Object.values(s).filter((e=>{var t;return!(null==e||null===(t=e.position)||void 0===t||!t.history)})).map((e=>{var t;return{label:e.keyword,data:e.position.history,selected:y.includes(e.keyword)&&!(0,m.isEmpty)(null===(t=e.position)||void 0===t?void 0:t.history)}}))),[y,s]);return(0,t.createElement)(Pt,{isDisabled:!r},(0,t.createElement)("p",null,(0,l.__)("You can enable / disable tracking the SEO performance for each keyphrase below.","wordpress-seo")),r&&n&&(0,t.createElement)(ot,null),(0,t.createElement)(Ot,null,(0,t.createElement)(Nt,{selected:h,onSelect:E,options:p,isLoggedIn:r})),(0,t.createElement)(Mt,null,(0,t.createElement)(St,{isChartShown:w,datasets:v,keyphrases:a})),(0,t.createElement)(tt,{startAt:null==h?void 0:h.value,selectedKeyphrases:y,onSelectKeyphrases:f,trackedKeyphrases:s}))};function $t(e){const{isNewlyAuthenticated:s,isLoggedIn:r}=e,a=(0,i.useCallback)((()=>{It(e)}),[It,e]),n=ve(r);return(0,t.createElement)(Lt,null,s&&(0,t.createElement)(Re,null),r&&(0,t.createElement)(Te,{trackingInfo:n}),(0,t.createElement)(Ft,null,(0,l.__)("SEO performance","wordpress-seo"),(0,t.createElement)(R.HelpIcon,{linkTo:wpseoAdminL10n["shortlinks.wincher.seo_performance"] +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about the SEO performance feature.","wordpress-seo")})),(0,t.createElement)(at,null),(0,t.createElement)(At,{isLoggedIn:r,onLogin:a}),(0,t.createElement)(Rt,{...e,onLogin:a}),(0,t.createElement)(Bt,{...e,historyDaysLimit:(null==n?void 0:n.historyDays)||31}))}Bt.propTypes={trackedKeyphrases:y().object,keyphrases:y().array.isRequired,isLoggedIn:y().bool.isRequired,shouldTrackAll:y().bool.isRequired,permalink:y().string.isRequired,historyDaysLimit:y().number},$t.propTypes={trackedKeyphrases:y().object,addTrackedKeyphrase:y().func.isRequired,isLoggedIn:y().bool,isNewlyAuthenticated:y().bool,keyphrases:y().array,response:y().object,shouldTrackAll:y().bool,permalink:y().string,historyDaysLimit:y().number},$t.defaultProps={trackedKeyphrases:null,isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],response:{},shouldTrackAll:!1,permalink:"",historyDaysLimit:0};const Ut=(0,B.compose)([(0,n.withSelect)((e=>{const{isWincherNewlyAuthenticated:t,getWincherKeyphraseLimitReached:s,getWincherLimit:r,getWincherHistoryDaysLimit:a,getWincherLoginStatus:n,getWincherRequestIsSuccess:o,getWincherRequestResponse:i,getWincherTrackableKeyphrases:l,getWincherTrackedKeyphrases:c,getWincherAllKeyphrasesMissRanking:d,getWincherPermalink:p,shouldWincherAutomaticallyTrackAll:u}=e("yoast-seo/editor");return{keyphrases:l(),trackedKeyphrases:c(),allKeyphrasesMissRanking:d(),isLoggedIn:n(),isNewlyAuthenticated:t(),isSuccess:o(),keyphraseLimitReached:s(),limit:r(),response:i(),shouldTrackAll:u(),permalink:p(),historyDaysLimit:a()}})),(0,n.withDispatch)((e=>{const{setWincherWebsiteId:t,setWincherRequestSucceeded:s,setWincherRequestFailed:r,setWincherTrackingForKeyphrase:a,setWincherSetKeyphraseLimitReached:n,setWincherLoginStatus:o}=e("yoast-seo/editor");return{setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{r(e)},addTrackedKeyphrase:e=>{a(e)},setKeyphraseLimitReached:e=>{n(e)},onAuthentication:(e,s,r)=>{t(r),o(e,s)}}}))])($t),Wt=w()($)` + width: 18px; + height: 18px; + margin: 3px; +`;function Kt(e){const{keyphrases:t,onNoKeyphraseSet:s,onOpen:r,location:a}=e;if(!t.length){let e=document.querySelector("#focus-keyword-input-metabox");return e||(e=document.querySelector("#focus-keyword-input-sidebar")),e.focus(),void s()}r(a)}function Ht(e){const{location:s,whichModalOpen:r,shouldCloseOnClickOutside:a}=e,n=(0,i.useCallback)((()=>{Kt(e)}),[Kt,e]),o=(0,l.__)("Track SEO performance","wordpress-seo"),c=U();return(0,t.createElement)(i.Fragment,null,r===s&&(0,t.createElement)(X,{title:o,onRequestClose:e.onClose,icon:(0,t.createElement)(te,null),additionalClassName:"yoast-wincher-seo-performance-modal yoast-gutenberg-modal__no-padding",shouldCloseOnClickOutside:a},(0,t.createElement)(j,{className:"yoast-gutenberg-modal__content yoast-wincher-seo-performance-modal__content"},(0,t.createElement)(Ut,null))),"sidebar"===s&&(0,t.createElement)(re,{id:`wincher-open-button-${s}`,title:o,SuffixHeroIcon:(0,t.createElement)(Wt,{className:"yst-text-slate-500",...c}),onClick:n}),"metabox"===s&&(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(V,{id:`wincher-open-button-${s}`,onClick:n},(0,t.createElement)(V.Text,null,o),(0,t.createElement)($,{className:"yst-h-5 yst-w-5 yst-text-slate-500",...c}))))}Ht.propTypes={location:y().string,whichModalOpen:y().oneOf(["none","metabox","sidebar","postpublish"]),shouldCloseOnClickOutside:y().bool,keyphrases:y().array.isRequired,onNoKeyphraseSet:y().func.isRequired,onOpen:y().func.isRequired,onClose:y().func.isRequired},Ht.defaultProps={location:"",whichModalOpen:"none",shouldCloseOnClickOutside:!0};const Vt=(0,B.compose)([(0,n.withSelect)((e=>{const{getWincherModalOpen:t,getWincherTrackableKeyphrases:s}=e("yoast-seo/editor");return{keyphrases:s(),whichModalOpen:t()}})),(0,n.withDispatch)((e=>{const{setWincherOpenModal:t,setWincherDismissModal:s,setWincherNoKeyphrase:r}=e("yoast-seo/editor");return{onOpen:e=>{t(e)},onClose:()=>{s()},onNoKeyphraseSet:()=>{r()}}}))])(Ht),Yt=window.yoast.externals.components;function jt(){return(0,B.createHigherOrderComponent)((function(e){return(0,B.pure)((function(t){const s=(0,i.useContext)(p.LocationContext);return(0,i.createElement)(e,{...t,location:s})}))}),"withLocation")}const zt=(0,B.compose)([(0,n.withSelect)((e=>{const{isCornerstoneContent:t}=e("yoast-seo/editor");return{isCornerstone:t(),learnMoreUrl:wpseoAdminL10n["shortlinks.cornerstone_content_info"]}})),(0,n.withDispatch)((e=>{const{toggleCornerstoneContent:t}=e("yoast-seo/editor");return{onChange:t}})),jt()])(Yt.CollapsibleCornerstone),Gt=window.yoast.searchMetadataPreviews,Zt=w()(R.StyledSection)` + &${R.StyledSectionBase} { + padding: 0; + + & ${R.StyledHeading} { + ${(0,Y.getDirectionalStyle)("padding-left","padding-right")}: 20px; + margin-left: ${(0,Y.getDirectionalStyle)("0","20px")}; + } + } +`,Xt=({children:e,title:s,icon:r,hasPaperStyle:a,shoppingData:n})=>(0,t.createElement)(Zt,{headingLevel:3,headingText:s,headingIcon:r,headingIconColor:"#555",hasPaperStyle:a,shoppingData:n},e);Xt.propTypes={children:y().element,title:y().string,icon:y().string,hasPaperStyle:y().bool,shoppingData:y().object},Xt.defaultProps={hasPaperStyle:!0,shoppingData:null};const Qt=Xt,Jt=window.wp.sanitize,es="SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLE";function ts(e,t,s="",r=!1){const a="string"==typeof t?(0,Y.decodeHTML)(t):t;return{type:es,name:e,value:a,label:s,hidden:r}}function ss(e){return e.charAt(0).toUpperCase()+e.slice(1)}const{stripHTMLTags:rs}=Y.strings,as=["slug","content","contentImage","snippetPreviewImageURL"];function ns(e,t="_"){return e.replace(/\s/g,t)}function os(e,t=156){return(e=(e=(0,Jt.stripTags)(e)).trim()).length<=t||(e=e.substring(0,t),/\s/.test(e)&&(e=e.substring(0,e.lastIndexOf(" ")))),e}const is=(0,m.memoize)(((e,t)=>0===e?m.noop:(0,m.debounce)((s=>t(s,e)),500))),ls=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),cs=({link:e,text:s})=>(0,t.createElement)(T.Root,null,(0,t.createElement)("p",null,s),(0,t.createElement)(T.Button,{href:e,as:"a",className:"yst-gap-2 yst-mb-5 yst-mt-2",variant:"upsell",target:"_blank",rel:"noopener"},(0,t.createElement)(ls,{className:"yst-w-4 yst-h-4 yst--ml-1 yst-shrink-0"}),(0,l.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,l.__)("Unlock with %1$s","wordpress-seo"),"Yoast WooCommerce SEO")));cs.propTypes={link:y().string.isRequired,text:y().string.isRequired};const ds=cs,ps=function(e,t){let s=0;return t.shortenedBaseUrl&&"string"==typeof t.shortenedBaseUrl&&(s=t.shortenedBaseUrl.length),e.url=e.url.replace(/\s+/g,"-"),"-"===e.url[e.url.length-1]&&(e.url=e.url.slice(0,-1)),"-"===e.url[s]&&(e.url=e.url.slice(0,s)+e.url.slice(s+1)),function(e){const t=(0,m.get)(window,["YoastSEO","app","pluggable"],!1);if(!t||!(0,m.get)(window,["YoastSEO","app","pluggable","loaded"],!1))return function(e){const t=(0,m.get)(window,["YoastSEO","wp","replaceVarsPlugin","replaceVariables"],m.identity);return{url:e.url,title:rs(t(e.title)),description:rs(t(e.description)),filteredSEOTitle:e.filteredSEOTitle?rs(t(e.filteredSEOTitle)):""}}(e);const s=t._applyModifications.bind(t);return{url:e.url,title:rs(s("data_page_title",e.title)),description:rs(s("data_meta_desc",e.description)),filteredSEOTitle:e.filteredSEOTitle?rs(s("data_page_title",e.filteredSEOTitle)):""}}(e)},us=(0,B.compose)([(0,n.withSelect)((function(e){const{getBaseUrlFromSettings:t,getDateFromSettings:s,getFocusKeyphrase:r,getRecommendedReplaceVars:a,getReplaceVars:n,getShoppingData:o,getSiteIconUrlFromSettings:i,getSnippetEditorData:l,getSnippetEditorMode:c,getSnippetEditorPreviewImageUrl:d,getSnippetEditorWordsToHighlight:p,isCornerstoneContent:u,getIsTerm:m,getContentLocale:h,getSiteName:g}=e("yoast-seo/editor"),y=n();return y.forEach((e=>{""!==e.value||["title","excerpt","excerpt_only"].includes(e.name)||(e.value="%%"+e.name+"%%")})),{baseUrl:t(),data:l(),date:s(),faviconSrc:i(),keyword:r(),mobileImageSrc:d(),mode:c(),recommendedReplacementVariables:a(),replacementVariables:y,shoppingData:o(),wordsToHighlight:p(),isCornerstone:u(),isTaxonomy:m(),locale:h(),siteName:g()}})),(0,n.withDispatch)((function(e,t,{select:s}){const{updateData:r,switchMode:a,updateAnalysisData:n,findCustomFields:o}=e("yoast-seo/editor"),i=e("core/editor"),l=s("yoast-seo/editor").getPostId();return{onChange:(e,t)=>{switch(e){case"mode":a(t);break;case"slug":r({slug:t}),i&&i.editPost({slug:t});break;default:r({[e]:t})}},onChangeAnalysisData:n,onReplacementVariableSearchChange:is(l,o)}}))])((e=>{const s=(0,m.get)(window,"wpseoScriptData.metabox.woocommerceUpsellGooglePreviewLink",""),r=(0,m.get)(window,"wpseoScriptData.woocommerceUpsell",""),a=(0,l.__)("Want an enhanced Google preview of how your WooCommerce products look in the search results?","wordpress-seo");return(0,t.createElement)(p.LocationConsumer,null,(n=>(0,t.createElement)(Qt,{icon:"eye",hasPaperStyle:e.hasPaperStyle},(0,t.createElement)(t.Fragment,null,r&&(0,t.createElement)(ds,{link:s,text:a}),(0,t.createElement)(Gt.SnippetEditor,{...e,descriptionPlaceholder:(0,l.__)("Please provide a meta description by editing the snippet below.","wordpress-seo"),mapEditorDataToPreview:ps,showCloseButton:!1,idSuffix:n})))))})),ms=(0,n.withSelect)((e=>{const{getWarningMessage:t}=e("yoast-seo/editor");return{message:t()}}))(R.Warning),hs=window.yoast.featureFlag,gs=w()(R.Collapsible)` + h2 > button { + padding-left: 24px; + padding-top: 16px; + + &:hover { + background-color: #f0f0f0; + } + } + + div[class^="collapsible_content"] { + padding: 24px 0; + margin: 0 24px; + border-top: 1px solid rgba(0,0,0,0.2); + } + +`,ys=e=>(0,t.createElement)(gs,{hasPadding:!0,hasSeparator:!0,...e}),fs=()=>{const e=(0,n.useSelect)((e=>e("yoast-seo/editor").getEstimatedReadingTime()),[]),s=(0,i.useMemo)((()=>(0,m.get)(window,"wpseoAdminL10n.shortlinks-insights-estimated_reading_time","")),[]);return(0,t.createElement)(R.InsightsCard,{amount:e,unit:(0,l._n)("minute","minutes",e,"wordpress-seo"),title:(0,l.__)("Reading time","wordpress-seo"),linkTo:s +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about reading time","wordpress-seo")})},ws=(0,Y.makeOutboundLink)();function bs(e,s,r){const a=function(e){switch(e){case I.DIFFICULTY.FAIRLY_DIFFICULT:case I.DIFFICULTY.DIFFICULT:case I.DIFFICULTY.VERY_DIFFICULT:return(0,l.__)("Try to make shorter sentences, using less difficult words to improve readability","wordpress-seo");case I.DIFFICULTY.NO_DATA:return(0,l.__)("Continue writing to get insight into the readability of your text!","wordpress-seo");default:return(0,l.__)("Good job!","wordpress-seo")}}(s);return(0,t.createElement)("span",null,function(e,t){return-1===e?(0,l.sprintf)((0,l.__)("Your text should be slightly longer to calculate your Flesch reading ease score.","wordpress-seo")):(0,l.sprintf)( +/* Translators: %1$s expands to the numeric Flesch reading ease score, + %2$s expands to the easiness of reading (e.g. 'easy' or 'very difficult'). + */ +(0,l.__)("The copy scores %1$s in the test, which is considered %2$s to read.","wordpress-seo"),e,function(e){switch(e){case I.DIFFICULTY.NO_DATA:return(0,l.__)("no data","wordpress-seo");case I.DIFFICULTY.VERY_EASY:return(0,l.__)("very easy","wordpress-seo");case I.DIFFICULTY.EASY:return(0,l.__)("easy","wordpress-seo");case I.DIFFICULTY.FAIRLY_EASY:return(0,l.__)("fairly easy","wordpress-seo");case I.DIFFICULTY.OKAY:return(0,l.__)("okay","wordpress-seo");case I.DIFFICULTY.FAIRLY_DIFFICULT:return(0,l.__)("fairly difficult","wordpress-seo");case I.DIFFICULTY.DIFFICULT:return(0,l.__)("difficult","wordpress-seo");case I.DIFFICULTY.VERY_DIFFICULT:return(0,l.__)("very difficult","wordpress-seo")}}(t))}(e,s)," ",s>=I.DIFFICULTY.FAIRLY_DIFFICULT?(0,t.createElement)(ws,{href:r},a+"."):a)}const Es=()=>{let e=(0,n.useSelect)((e=>e("yoast-seo/editor").getFleschReadingEaseScore()),[]);const s=(0,i.useMemo)((()=>(0,m.get)(window,"wpseoAdminL10n.shortlinks-insights-flesch_reading_ease","")),[]),r=(0,n.useSelect)((e=>e("yoast-seo/editor").getFleschReadingEaseDifficulty()),[e]),a=(0,i.useMemo)((()=>{const t=(0,m.get)(window,"wpseoAdminL10n.shortlinks-insights-flesch_reading_ease_article","");return bs(e,r,t)}),[e,r]);return-1===e&&(e="?"),(0,t.createElement)(R.InsightsCard,{amount:e,unit:(0,l.__)("out of 100","wordpress-seo"),title:(0,l.__)("Flesch reading ease","wordpress-seo"),linkTo:s +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about Flesch reading ease","wordpress-seo"),description:a})};let vs,ks,_s,xs;const Ss=/<(\/)?(\w+)\s*(\/)?>/g;function Ts(e,t,s,r,a){return{element:e,tokenStart:t,tokenLength:s,prevOffset:r,leadingTextStart:a,children:[]}}function Rs(){const e=vs.length-ks;0!==e&&_s.push(vs.substring(ks,ks+e))}function Cs(e){const{element:t,tokenStart:s,tokenLength:r,prevOffset:a,children:n}=e,o=xs[xs.length-1],l=vs.substring(o.prevOffset,s);l&&o.children.push(l),o.children.push((0,i.cloneElement)(t,null,...n)),o.prevOffset=a||s+r}function Is(e){const t=function(){const e=Ss.exec(vs);if(null===e)return["no-more-tokens"];const t=e.index,[s,r,a,n]=e,o=s.length;return n?["self-closed",a,t,o]:r?["closer",a,t,o]:["opener",a,t,o]}(),[s,r,a,n]=t,o=xs.length,l=a>ks?ks:null;if(!e[r])return Rs(),!1;switch(s){case"no-more-tokens":if(0!==o){const{leadingTextStart:e,tokenStart:t}=xs.pop();_s.push(vs.substring(e,e+t))}return Rs(),!1;case"self-closed":return 0===o?(null!==l&&_s.push(vs.substring(l,a)),_s.push(e[r]),ks=a+n,!0):(Cs(Ts(e[r],a,n)),ks=a+n,!0);case"opener":return xs.push(Ts(e[r],a,n,a+n,l)),ks=a+n,!0;case"closer":if(1===o)return function(e){const{element:t,leadingTextStart:s,prevOffset:r,tokenStart:a,children:n}=xs.pop(),o=e?vs.substring(r,e):vs.substring(r);o&&n.push(o),null!==s&&_s.push(vs.substring(s,a)),_s.push((0,i.cloneElement)(t,null,...n))}(a),ks=a+n,!0;const t=xs.pop(),s=vs.substring(t.prevOffset,a);t.children.push(s),t.prevOffset=a+n;const c=Ts(t.element,t.tokenStart,t.tokenLength,a+n);return c.children=t.children,Cs(c),ks=a+n,!0;default:return Rs(),!1}}const As=(e,t)=>{if(vs=e,ks=0,_s=[],xs=[],Ss.lastIndex=0,!(e=>{const t="object"==typeof e,s=t&&Object.values(e);return t&&s.length&&s.every((e=>(0,i.isValidElement)(e)))})(t))throw new TypeError("The conversionMap provided is not valid. It must be an object with values that are WPElements");do{}while(Is(t));return(0,i.createElement)(i.Fragment,null,..._s)},Ls=({data:e,itemScreenReaderText:s,className:r,...a})=>{const n=(0,i.useMemo)((()=>{var t,s;return null!==(t=null===(s=(0,m.maxBy)(e,"number"))||void 0===s?void 0:s.number)&&void 0!==t?t:0}),[e]);return(0,t.createElement)("ul",{className:K()("yoast-data-model",r),...a},e.map((({name:e,number:r})=>(0,t.createElement)("li",{key:`${e}_dataItem`,style:{"--yoast-width":r/n*100+"%"}},e,(0,t.createElement)("span",null,r),s&&(0,t.createElement)("span",{className:"screen-reader-text"},(0,l.sprintf)(s,r))))))};Ls.propTypes={data:y().arrayOf(y().shape({name:y().string.isRequired,number:y().number.isRequired})),itemScreenReaderText:y().string,className:y().string},Ls.defaultProps={data:[],itemScreenReaderText:"",className:""};const Ps=Ls,Fs=window.wp.url,Os=(0,Y.makeOutboundLink)(),Ms=({location:e})=>{const s=(0,n.useSelect)((e=>{var t,s;return null===(t=null===(s=e("yoast-seo-premium/editor"))||void 0===s?void 0:s.getPreference("isProminentWordsAvailable",!1))||void 0===t||t}),[]),r=(0,n.useSelect)((e=>e("yoast-seo/editor").getPreference("shouldUpsell",!1)),[]),a=(0,i.useMemo)((()=>(0,m.get)(window,`wpseoAdminL10n.shortlinks-insights-upsell-${e}-prominent_words`,"")),[e]),o=(0,i.useMemo)((()=>{const e=(0,m.get)(window,"wpseoAdminL10n.shortlinks-insights-keyword_research_link","");return As((0,l.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,l.__)("Read our %1$sultimate guide to keyword research%2$s to learn more about keyword research and keyword strategy.","wordpress-seo"),"",""),{a:(0,t.createElement)(Os,{href:e})})}),[]),c=(0,i.useMemo)((()=>As((0,l.sprintf)( +// translators: %1$s expands to a starting `b` tag, %1$s expands to a closing `b` tag and %3$s expands to `Yoast SEO Premium`. +(0,l.__)("With %1$s%3$s%2$s, this section will show you which words occur most often in your text. By checking these prominent words against your intended keyword(s), you'll know how to edit your text to be more focused.","wordpress-seo"),"","","Yoast SEO Premium"),{b:(0,t.createElement)("b",null)})),[]),d=(0,n.useSelect)((e=>{var t,s;return null!==(t=null===(s=e("yoast-seo-premium/editor"))||void 0===s?void 0:s.getProminentWords())&&void 0!==t?t:[]}),[]),u=(0,i.useMemo)((()=>{const e=(0,l.sprintf)( +// translators: %1$s expands to Yoast SEO Premium. +(0,l.__)("Get %s to enjoy the benefits of prominent words","wordpress-seo"),"Yoast SEO Premium").split(/\s+/);return e.map(((t,s)=>({name:t,number:e.length-s})))}),[]),h=(0,i.useMemo)((()=>r?u:d.map((({word:e,occurrence:t})=>({name:e,number:t})))),[d,u]);if(!s)return null;const{locationContext:g}=(0,p.useRootContext)();return(0,t.createElement)("div",{className:"yoast-prominent-words"},(0,t.createElement)("div",{className:"yoast-field-group__title"},(0,t.createElement)("b",null,(0,l.__)("Prominent words","wordpress-seo"))),!r&&(0,t.createElement)("p",null,0===h.length?(0,l.__)("Once you add a bit more copy, we'll give you a list of words that occur the most in the content. These give an indication of what your content focuses on.","wordpress-seo"):(0,l.__)("The following words occur the most in the content. These give an indication of what your content focuses on. If the words differ a lot from your topic, you might want to rewrite your content accordingly.","wordpress-seo")),r&&(0,t.createElement)("p",null,c),r&&(0,t.createElement)(Os,{href:(0,Fs.addQueryArgs)(a,{context:g}),"data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2",className:"yoast-button yoast-button-upsell"},(0,l.sprintf)( +// translators: %s expands to `Premium` (part of add-on name). +(0,l.__)("Unlock with %s","wordpress-seo"),"Premium"),(0,t.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,t.createElement)("p",null,o),(0,t.createElement)(Ps,{data:h,itemScreenReaderText:/* translators: Hidden accessibility text; %d expands to the number of occurrences. */ +(0,l.__)("%d occurrences","wordpress-seo"),"aria-label":(0,l.__)("Prominent words","wordpress-seo"),className:r?"yoast-data-model--upsell":null}))};Ms.propTypes={location:y().string.isRequired};const Ds=Ms,qs=()=>{const e=(0,n.useSelect)((e=>e("yoast-seo/editor").getTextLength()),[]),s=(0,i.useMemo)((()=>(0,m.get)(window,"wpseoAdminL10n.shortlinks-insights-word_count","")),[]);let r=(0,l._n)("word","words",e.count,"wordpress-seo"),a=(0,l.__)("Word count","wordpress-seo"),o=(0,l.__)("Learn more about word count","wordpress-seo");return"character"===e.unit&&(r=(0,l._n)("character","characters",e.count,"wordpress-seo"),a=(0,l.__)("Character count","wordpress-seo"), +/* translators: Hidden accessibility text. */ +o=(0,l.__)("Learn more about character count","wordpress-seo")),(0,t.createElement)(R.InsightsCard,{amount:e.count,unit:r,title:a,linkTo:s,linkText:o})},Ns=(0,Y.makeOutboundLink)(),Bs=({location:e})=>{const s=(0,i.useMemo)((()=>(0,m.get)(window,`wpseoAdminL10n.shortlinks-insights-upsell-${e}-text_formality`,"")),[e]),r=(0,i.useMemo)((()=>As((0,l.sprintf)( +// Translators: %1$s expands to a starting `b` tag, %2$s expands to a closing `b` tag and %3$s expands to `Yoast SEO Premium`. +(0,l.__)("%1$s%3$s%2$s will help you assess the formality level of your text.","wordpress-seo"),"","","Yoast SEO Premium"),{b:(0,t.createElement)("b",null)})),[]);return(0,t.createElement)(i.Fragment,null,(0,t.createElement)("div",null,(0,t.createElement)("p",null,r),(0,t.createElement)(Ns,{href:s,className:"yoast-button yoast-button-upsell"},(0,l.sprintf)( +// Translators: %s expands to `Premium` (part of add-on name). +(0,l.__)("Unlock with %s","wordpress-seo"),"Premium"),(0,t.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"}))))};Bs.propTypes={location:y().string.isRequired};const $s=Bs,Us=({location:e,name:s})=>{const r=(0,n.useSelect)((e=>e("yoast-seo/editor").isFormalitySupported()),[]),a=h().isPremium,o=a?(0,m.get)(window,"wpseoAdminL10n.shortlinks-insights-text_formality_info_premium",""):(0,m.get)(window,"wpseoAdminL10n.shortlinks-insights-text_formality_info_free",""),i=(0,l.__)("Read more about text formality.","wordpress-seo");return r?(0,t.createElement)("div",{className:"yoast-text-formality"},(0,t.createElement)("div",{className:"yoast-field-group__title"},(0,t.createElement)("b",null,(0,l.__)("Text formality","wordpress-seo")),(0,t.createElement)(R.HelpIcon,{linkTo:o,linkText:i})),a?(0,t.createElement)(k.Slot,{name:s}):(0,t.createElement)($s,{location:e})):null};Us.propTypes={location:y().string.isRequired,name:y().string.isRequired};const Ws=Us,Ks=({location:e})=>{const s=(0,n.useSelect)((e=>e("yoast-seo/editor").isFleschReadingEaseAvailable()),[]);return(0,t.createElement)(ys,{title:(0,l.__)("Insights","wordpress-seo"),id:`yoast-insights-collapsible-${e}`,className:"yoast-insights"},(0,t.createElement)(Ds,{location:e}),(0,t.createElement)("div",null,s&&(0,t.createElement)("div",{className:"yoast-insights-row"},(0,t.createElement)(Es,null)),(0,t.createElement)("div",{className:"yoast-insights-row yoast-insights-row--columns"},(0,t.createElement)(fs,null),(0,t.createElement)(qs,null)),(0,hs.isFeatureEnabled)("TEXT_FORMALITY")&&(0,t.createElement)(Ws,{location:e,name:"YoastTextFormalityMetabox"})))};Ks.propTypes={location:y().string},Ks.defaultProps={location:"metabox"};const Hs=Ks,Vs=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z",clipRule:"evenodd"}))})),Ys=()=>[(0,l.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,l.__)("%1$sAI%2$s: Better SEO titles and meta descriptions, faster.","wordpress-seo"),"",""),(0,l.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,l.__)("%1$sMultiple keywords%2$s: Rank higher for more searches.","wordpress-seo"),"",""),(0,l.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,l.__)("%1$sSuper fast%2$s internal linking suggestions.","wordpress-seo"),"",""),(0,l.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,l.__)("%1$sNo more broken links%2$s: Automatic redirect manager.","wordpress-seo"),"",""),(0,l.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,l.__)("%1$sAppealing social previews%2$s people actually want to click on.","wordpress-seo"),"",""),(0,l.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,l.__)("%1$s24/7 support%2$s: Also on evenings and weekends.","wordpress-seo"),"","")],js=w().div` + padding: 25px 32px 32px; + color: #303030; +`,zs=w().ul` + margin: 0; + padding: 0; + + li { + list-style-image: var(--yoast-svg-icon-check); + margin: 0.5rem 0 0 1.5rem; + line-height: 1.4em; + + &::marker { + font-size: 1.5rem; + } + } +`,Gs=w().span` + display: block; + margin-top: 4px; +`,Zs=w().h2` + margin-top: 0; + margin-bottom: 0.25rem; + color: #303030; + font-size: 0.8125rem; + font-weight: 600; +`,Xs=w().p` + display: block; + margin: 0.25rem 0 1rem 0 !important; + max-width: 420px; +`,Qs=w().hr` + margin-top: 1.5rem; + margin-bottom: 1rem; + border-top: 0; + border-bottom: 1px solid #E2E8F0; +`,Js=w().div` + text-align: center; +`,er=w().a` + width: 100%; +`,tr=(0,Y.makeOutboundLink)(er);class sr extends i.Component{constructor(e){super(e),this.state={defaultPrice:"99"}}createBenefitsList(e){return e.length>0&&(0,t.createElement)(zs,{role:"list"},e.map(((e,s)=>(0,t.createElement)("li",{key:`upsell-benefit-${s}`},(0,i.createInterpolateElement)(e,{strong:(0,t.createElement)("strong",null)})))))}render(){const e=(0,n.select)("yoast-seo/editor").isPromotionActive("black-friday-2023-promotion"),{defaultPrice:s}=this.state,r=e?"69.30":null,a=r||s;return(0,t.createElement)(i.Fragment,null,e&&(0,t.createElement)("div",{className:"yst-flex yst-justify-between yst-items-center yst-text-lg yst-content-between yst-bg-black yst-text-amber-300 yst-h-9 yst-border-amber-300 yst-border-y yst-border-x-0 yst-border-solid yst-px-6"},(0,t.createElement)("div",null,(0,l.__)("BLACK FRIDAY","wordpress-seo")),(0,t.createElement)("div",null,(0,l.__)("30% OFF","wordpress-seo"))),(0,t.createElement)(js,null,(0,t.createElement)(Zs,null,this.props.title),(0,t.createElement)(Xs,null,this.props.description),(0,t.createElement)(Js,null,(0,t.createElement)(tr,{...this.props.upsellButton},this.props.upsellButtonText,this.props.upsellButtonHasCaret&&(0,t.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,t.createElement)("div",{className:"yst-text-slate-600 yst-my-4"},r&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-500 yst-line-through"},s)," "),(0,t.createElement)("span",{className:"yst-text-slate-900 yst-text-2xl yst-font-bold"},a)," ",(0,l.__)("$ USD / € EUR / £ GBP per year (ex. VAT)","wordpress-seo")),(0,t.createElement)(Gs,{id:this.props.upsellButton["aria-describedby"]},this.props.upsellButtonLabel)),(0,t.createElement)(Qs,null),(0,t.createElement)(Zs,null,this.props.benefitsTitle),this.createBenefitsList(this.props.benefits)))}}sr.propTypes={title:y().node,benefits:y().array,benefitsTitle:y().node,description:y().node,upsellButton:y().object,upsellButtonText:y().string.isRequired,upsellButtonLabel:y().string,upsellButtonHasCaret:y().bool},sr.defaultProps={title:null,description:null,benefits:[],benefitsTitle:null,upsellButton:{href:"",className:"button button-primary"},upsellButtonLabel:"",upsellButtonHasCaret:!0};const rr=sr,ar=()=>{const[e,,,s,r]=(0,T.useToggleState)(!1),{locationContext:a}=(0,p.useRootContext)(),n=(0,T.useSvgAria)(),o=a.includes("sidebar"),i=a.includes("metabox"),c=wpseoAdminL10n[o?"shortlinks.upsell.sidebar.internal_linking_suggestions":"shortlinks.upsell.metabox.internal_linking_suggestions"];return(0,t.createElement)(t.Fragment,null,e&&(0,t.createElement)(X,{title:(0,l.__)("Get internal linking suggestions","wordpress-seo"),onRequestClose:r,additionalClassName:"",id:"yoast-internal-linking-suggestions-upsell",className:`${G} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,shouldCloseOnClickOutside:!0},(0,t.createElement)(z,null,(0,t.createElement)(rr,{title:(0,l.__)("Rank higher by connecting your content","wordpress-seo"),description:(0,l.sprintf)(/* translators: %s expands to Yoast SEO Premium. */ +(0,l.__)("%s automatically suggests to what content you can link with easy drag-and-drop functionality, which is good for your SEO!","wordpress-seo"),"Yoast SEO Premium"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,l.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Ys(),upsellButtonText:(0,l.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,l.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:(0,Fs.addQueryArgs)(c,{context:a}),className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,l.__)("1 year free support and updates included!","wordpress-seo")}))),o&&(0,t.createElement)(re,{id:"yoast-internal-linking-suggestions-sidebar-modal-open-button",title:(0,l.__)("Internal linking suggestions","wordpress-seo"),onClick:s},(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(T.Badge,{size:"small",variant:"upsell"},(0,t.createElement)(Vs,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...n})))),i&&(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(V,{id:"yoast-internal-linking-suggestions-metabox-modal-open-button",onClick:s},(0,t.createElement)(V.Text,null,(0,l.__)("Internal linking suggestions","wordpress-seo")),(0,t.createElement)(T.Badge,{size:"small",variant:"upsell"},(0,t.createElement)(Vs,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...n}),(0,t.createElement)("span",null,"Premium")))))},nr=({children:e})=>(0,t.createElement)("div",null,e);nr.propTypes={renderPriority:y().number.isRequired,children:y().node.isRequired};const or=nr,ir=({noIndex:e,onNoIndexChange:s,editorContext:r,isPrivateBlog:a})=>{const n=(e=>{const t=(0,l.__)("No","wordpress-seo"),s=(0,l.__)("Yes","wordpress-seo"),r=e.noIndex?t:s;return window.wpseoScriptData.isPost?[{name:(0,l.sprintf)(/* translators: the first %s translates to "yes" or "no", the second %s translates to the content type label in plural form */ +(0,l.__)("%s (current default for %s)","wordpress-seo"),r,e.postTypeNamePlural),value:"0"},{name:t,value:"1"},{name:s,value:"2"}]:[{name:(0,l.sprintf)(/* translators: the first %s translates to "yes" or "no", the second %s translates to the content type label in plural form */ +(0,l.__)("%s (current default for %s)","wordpress-seo"),r,e.postTypeNamePlural),value:"default"},{name:s,value:"index"},{name:t,value:"noindex"}]})(r);return(0,t.createElement)(p.LocationConsumer,null,(r=>(0,t.createElement)(i.Fragment,null,a&&(0,t.createElement)(R.Alert,{type:"warning"},(0,l.__)("Even though you can set the meta robots setting here, the entire site is set to noindex in the sitewide privacy settings, so these settings won't have an effect.","wordpress-seo")),(0,t.createElement)(R.Select,{label:(0,l.__)("Allow search engines to show this content in search results?","wordpress-seo"),onChange:s,id:(0,Y.join)(["yoast-meta-robots-noindex",r]),options:n,selected:e,linkTo:wpseoAdminL10n["shortlinks.advanced.allow_search_engines"] +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about the no-index setting on our help page.","wordpress-seo")}))))};ir.propTypes={noIndex:y().string.isRequired,onNoIndexChange:y().func.isRequired,editorContext:y().object.isRequired,isPrivateBlog:y().bool},ir.defaultProps={isPrivateBlog:!1};const lr=({noFollow:e,onNoFollowChange:s})=>(0,t.createElement)(p.LocationConsumer,null,(r=>{const a=(0,Y.join)(["yoast-meta-robots-nofollow",r]);return(0,t.createElement)(R.RadioButtonGroup,{id:a,options:[{value:"0",label:"Yes"},{value:"1",label:"No"}],label:(0,l.__)("Should search engines follow links on this content?","wordpress-seo"),groupName:a,onChange:s,selected:e,linkTo:wpseoAdminL10n["shortlinks.advanced.follow_links"] +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about the no-follow setting on our help page.","wordpress-seo")})}));lr.propTypes={noFollow:y().string.isRequired,onNoFollowChange:y().func.isRequired};const cr=({advanced:e,onAdvancedChange:s})=>(0,t.createElement)(p.LocationConsumer,null,(r=>{const a=(0,Y.join)(["yoast-meta-robots-advanced",r]),n=`${a}-input`;return(0,t.createElement)(R.MultiSelect,{label:(0,l.__)("Meta robots advanced","wordpress-seo"),onChange:s,id:a,inputId:n,options:[{name:(0,l.__)("No Image Index","wordpress-seo"),value:"noimageindex"},{name:(0,l.__)("No Archive","wordpress-seo"),value:"noarchive"},{name:(0,l.__)("No Snippet","wordpress-seo"),value:"nosnippet"}],selected:e,linkTo:wpseoAdminL10n["shortlinks.advanced.meta_robots"] +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about advanced meta robots settings on our help page.","wordpress-seo")})}));cr.propTypes={advanced:y().array.isRequired,onAdvancedChange:y().func.isRequired};const dr=({breadcrumbsTitle:e,onBreadcrumbsTitleChange:s})=>(0,t.createElement)(p.LocationConsumer,null,(r=>(0,t.createElement)(R.TextInput,{label:(0,l.__)("Breadcrumbs Title","wordpress-seo"),id:(0,Y.join)(["yoast-breadcrumbs-title",r]),onChange:s,value:e,linkTo:wpseoAdminL10n["shortlinks.advanced.breadcrumbs_title"] +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about the breadcrumbs title setting on our help page.","wordpress-seo")})));dr.propTypes={breadcrumbsTitle:y().string.isRequired,onBreadcrumbsTitleChange:y().func.isRequired};const pr=({canonical:e,onCanonicalChange:s})=>(0,t.createElement)(p.LocationConsumer,null,(r=>(0,t.createElement)(R.TextInput,{label:(0,l.__)("Canonical URL","wordpress-seo"),id:(0,Y.join)(["yoast-canonical",r]),onChange:s,value:e,linkTo:"https://yoa.st/canonical-url" +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about canonical URLs on our help page.","wordpress-seo")})));pr.propTypes={canonical:y().string.isRequired,onCanonicalChange:y().func.isRequired};const ur=e=>{const{noIndex:s,noFollow:r,advanced:a,breadcrumbsTitle:n,canonical:o,onNoIndexChange:l,onNoFollowChange:c,onAdvancedChange:d,onBreadcrumbsTitleChange:p,onCanonicalChange:u,onLoad:m,isLoading:h,editorContext:g,isBreadcrumbsDisabled:y,isPrivateBlog:f}=e;(0,i.useEffect)((()=>{setTimeout((()=>{h&&m()}))}));const w={noIndex:s,onNoIndexChange:l,editorContext:g,isPrivateBlog:f},b={noFollow:r,onNoFollowChange:c},E={advanced:a,onAdvancedChange:d},v={breadcrumbsTitle:n,onBreadcrumbsTitleChange:p},k={canonical:o,onCanonicalChange:u};return h?null:(0,t.createElement)(i.Fragment,null,(0,t.createElement)(ir,{...w}),g.isPost&&(0,t.createElement)(lr,{...b}),g.isPost&&(0,t.createElement)(cr,{...E}),!y&&(0,t.createElement)(dr,{...v}),(0,t.createElement)(pr,{...k}))};ur.propTypes={noIndex:y().string.isRequired,canonical:y().string.isRequired,onNoIndexChange:y().func.isRequired,onCanonicalChange:y().func.isRequired,onLoad:y().func.isRequired,isLoading:y().bool.isRequired,editorContext:y().object.isRequired,isBreadcrumbsDisabled:y().bool.isRequired,isPrivateBlog:y().bool,advanced:y().array,onAdvancedChange:y().func,noFollow:y().string,onNoFollowChange:y().func,breadcrumbsTitle:y().string,onBreadcrumbsTitleChange:y().func},ur.defaultProps={advanced:[],onAdvancedChange:()=>{},noFollow:"",onNoFollowChange:()=>{},breadcrumbsTitle:"",onBreadcrumbsTitleChange:()=>{},isPrivateBlog:!1};const mr=ur,hr=(0,B.compose)([(0,n.withSelect)((e=>{const{getNoIndex:t,getNoFollow:s,getAdvanced:r,getBreadcrumbsTitle:a,getCanonical:n,getIsLoading:o,getEditorContext:i,getPreferences:l}=e("yoast-seo/editor"),{isBreadcrumbsDisabled:c,isPrivateBlog:d}=l();return{noIndex:t(),noFollow:s(),advanced:r(),breadcrumbsTitle:a(),canonical:n(),isLoading:o(),editorContext:i(),isBreadcrumbsDisabled:c,isPrivateBlog:d}})),(0,n.withDispatch)((e=>{const{setNoIndex:t,setNoFollow:s,setAdvanced:r,setBreadcrumbsTitle:a,setCanonical:n,loadAdvancedSettingsData:o}=e("yoast-seo/editor");return{onNoIndexChange:t,onNoFollowChange:s,onAdvancedChange:r,onBreadcrumbsTitleChange:a,onCanonicalChange:n,onLoad:o}}))])(mr),gr=w().p` + color: #606770; + flex-shrink: 0; + font-size: 12px; + line-height: 16px; + overflow: hidden; + padding: 0; + text-overflow: ellipsis; + text-transform: uppercase; + white-space: nowrap; + margin: 0; + position: ${e=>"landscape"===e.mode?"relative":"static"}; +`,yr=e=>{const{siteUrl:s}=e;return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("span",{className:"screen-reader-text"},s),(0,t.createElement)(gr,{"aria-hidden":"true"},(0,t.createElement)("span",null,s)))};yr.propTypes={siteUrl:y().string.isRequired};const fr=yr,wr=window.yoast.socialMetadataForms,br=w().img` + && { + max-width: ${e=>e.width}px; + height: ${e=>e.height}px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + max-width: none; + } +`,Er=w().img` + &&{ + height: 100%; + position: absolute; + width: 100%; + object-fit: cover; + } +`,vr=w().div` + padding-bottom: ${e=>e.aspectRatio}%; +`,kr=e=>{const{imageProps:s,width:r,height:a,imageMode:n}=e;return"landscape"===n?(0,t.createElement)(vr,{aspectRatio:s.aspectRatio},(0,t.createElement)(Er,{src:s.src,alt:s.alt})):(0,t.createElement)(br,{src:s.src,alt:s.alt,width:r,height:a,imageProperties:s})};function _r(e,t,s){return"landscape"===s?{widthRatio:t.width/e.landscapeWidth,heightRatio:t.height/e.landscapeHeight}:"portrait"===s?{widthRatio:t.width/e.portraitWidth,heightRatio:t.height/e.portraitHeight}:{widthRatio:t.width/e.squareWidth,heightRatio:t.height/e.squareHeight}}function xr(e,t){return t.widthRatio<=t.heightRatio?{width:Math.round(e.width/t.widthRatio),height:Math.round(e.height/t.widthRatio)}:{width:Math.round(e.width/t.heightRatio),height:Math.round(e.height/t.heightRatio)}}async function Sr(e,t,s=!1){const r=await function(e){return new Promise(((t,s)=>{const r=new Image;r.onload=()=>{t({width:r.width,height:r.height})},r.onerror=s,r.src=e}))}(e);let a=s?"landscape":"square";"Facebook"===t&&(a=(0,wr.determineFacebookImageMode)(r));const n=function(e){return"Twitter"===e?wr.TWITTER_IMAGE_SIZES:wr.FACEBOOK_IMAGE_SIZES}(t),o=function(e,t,s){return"square"===s&&t.width===t.height?{width:e.squareWidth,height:e.squareHeight}:xr(t,_r(e,t,s))}(n,r,a);return{mode:a,height:o.height,width:o.width}}async function Tr(e,t,s=!1){try{return{imageProperties:await Sr(e,t,s),status:"loaded"}}catch(e){return{imageProperties:null,status:"errored"}}}kr.propTypes={imageProps:y().shape({src:y().string.isRequired,alt:y().string.isRequired,aspectRatio:y().number.isRequired}).isRequired,width:y().number.isRequired,height:y().number.isRequired,imageMode:y().string},kr.defaultProps={imageMode:"landscape"};const Rr=w().div` + position: relative; + ${e=>"landscape"===e.mode?`max-width: ${e.dimensions.width}`:`min-width: ${e.dimensions.width}; height: ${e.dimensions.height}`}; + overflow: hidden; + background-color: ${C.colors.$color_white}; +`,Cr=w().div` + box-sizing: border-box; + max-width: ${wr.FACEBOOK_IMAGE_SIZES.landscapeWidth}px; + height: ${wr.FACEBOOK_IMAGE_SIZES.landscapeHeight}px; + background-color: ${C.colors.$color_grey}; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + display: flex; + justify-content: center; + align-items: center; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class Ir extends t.Component{constructor(e){super(e),this.state={imageProperties:null,status:"loading"},this.socialMedium="Facebook",this.handleFacebookImage=this.handleFacebookImage.bind(this),this.setState=this.setState.bind(this)}async handleFacebookImage(){try{const e=await Tr(this.props.src,this.socialMedium);this.setState(e),this.props.onImageLoaded(e.imageProperties.mode||"landscape")}catch(e){this.setState(e),this.props.onImageLoaded("landscape")}}componentDidUpdate(e){e.src!==this.props.src&&this.handleFacebookImage()}componentDidMount(){this.handleFacebookImage()}retrieveContainerDimensions(e){switch(e){case"square":return{height:wr.FACEBOOK_IMAGE_SIZES.squareHeight+"px",width:wr.FACEBOOK_IMAGE_SIZES.squareWidth+"px"};case"portrait":return{height:wr.FACEBOOK_IMAGE_SIZES.portraitHeight+"px",width:wr.FACEBOOK_IMAGE_SIZES.portraitWidth+"px"};case"landscape":return{height:wr.FACEBOOK_IMAGE_SIZES.landscapeHeight+"px",width:wr.FACEBOOK_IMAGE_SIZES.landscapeWidth+"px"}}}render(){const{imageProperties:e,status:s}=this.state;if("loading"===s||""===this.props.src||"errored"===s)return(0,t.createElement)(Cr,{onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,l.__)("Select image","wordpress-seo"));const r=this.retrieveContainerDimensions(e.mode);return(0,t.createElement)(Rr,{mode:e.mode,dimensions:r,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave,onClick:this.props.onImageClick},(0,t.createElement)(kr,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:wr.FACEBOOK_IMAGE_SIZES.aspectRatio},width:e.width,height:e.height,imageMode:e.mode}))}}Ir.propTypes={src:y().string,alt:y().string,onImageLoaded:y().func,onImageClick:y().func,onMouseEnter:y().func,onMouseLeave:y().func},Ir.defaultProps={src:"",alt:"",onImageLoaded:m.noop,onImageClick:m.noop,onMouseEnter:m.noop,onMouseLeave:m.noop};const Ar=Ir,Lr=w().span` + line-height: ${20}px; + min-height : ${20}px; + color: #1d2129; + font-weight: 600; + overflow: hidden; + font-size: 16px; + margin: 3px 0 0; + letter-spacing: normal; + white-space: normal; + flex-shrink: 0; + cursor: pointer; + display: -webkit-box; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; +`,Pr=w().p` + line-height: ${16}px; + min-height : ${16}px; + color: #606770; + font-size: 14px; + padding: 0; + text-overflow: ellipsis; + margin: 3px 0 0 0; + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; + + @media all and ( max-width: ${e=>e.maxWidth} ) { + display: none; + } +`,Fr=e=>{switch(e){case"landscape":return"527px";case"square":case"portrait":return"369px";default:return"476px"}},Or=w().div` + box-sizing: border-box; + display: flex; + flex-direction: ${e=>"landscape"===e.mode?"column":"row"}; + background-color: #f2f3f5; + max-width: 527px; +`,Mr=w().div` + box-sizing: border-box; + background-color: #f2f3f5; + margin: 0; + padding: 10px 12px; + position: relative; + border-bottom: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-top: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-right: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border: ${e=>"landscape"===e.mode?"1px solid #dddfe2":""}; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: ${e=>"landscape"===e.mode?"flex-start":"center"}; + font-size: 12px; + overflow: hidden; +`;class Dr extends t.Component{constructor(e){super(e),this.state={imageMode:null,maxLineCount:0,descriptionLineCount:0},this.facebookTitleRef=r().createRef(),this.onImageLoaded=this.onImageLoaded.bind(this),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}onImageLoaded(e){this.setState({imageMode:e})}getTitleLineCount(){return this.facebookTitleRef.current.offsetHeight/20}maybeSetMaxLineCount(){const{imageMode:e,maxLineCount:t}=this.state,s="landscape"===e?2:5;s!==t&&this.setState({maxLineCount:s})}maybeSetDescriptionLineCount(){const{descriptionLineCount:e,maxLineCount:t,imageMode:s}=this.state,r=this.getTitleLineCount();let a=t-r;"portrait"===s&&(a=5===r?0:4),a!==e&&this.setState({descriptionLineCount:a})}componentDidUpdate(){this.maybeSetMaxLineCount(),this.maybeSetDescriptionLineCount()}render(){const{imageMode:e,maxLineCount:s,descriptionLineCount:r}=this.state;return(0,t.createElement)(Or,{id:"facebookPreview",mode:e},(0,t.createElement)(Ar,{src:this.props.imageUrl||this.props.imageFallbackUrl,alt:this.props.alt,onImageLoaded:this.onImageLoaded,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),(0,t.createElement)(Mr,{mode:e},(0,t.createElement)(fr,{siteUrl:this.props.siteUrl,mode:e}),(0,t.createElement)(Lr,{ref:this.facebookTitleRef,onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle,lineCount:s},this.props.title),r>0&&(0,t.createElement)(Pr,{maxWidth:Fr(e),onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription,lineCount:r},this.props.description)))}}Dr.propTypes={siteUrl:y().string.isRequired,title:y().string.isRequired,description:y().string,imageUrl:y().string,imageFallbackUrl:y().string,alt:y().string,onSelect:y().func,onImageClick:y().func,onMouseHover:y().func},Dr.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{}};const qr=Dr,Nr=w().div` + text-transform: lowercase; + color: rgb(83, 100, 113); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + fill: currentcolor; + display: flex; + flex-direction: row; + align-items: flex-end; +`,Br=e=>(0,t.createElement)(Nr,null,(0,t.createElement)("span",null,e.siteUrl));Br.propTypes={siteUrl:y().string.isRequired};const $r=Br,Ur=(e,t=!0)=>e?`\n\t\t\tmax-width: ${wr.TWITTER_IMAGE_SIZES.landscapeWidth}px;\n\t\t\t${t?"border-bottom: 1px solid #E1E8ED;":""}\n\t\t\tborder-radius: 14px 14px 0 0;\n\t\t\t`:`\n\t\twidth: ${wr.TWITTER_IMAGE_SIZES.squareWidth}px;\n\t\t${t?"border-right: 1px solid #E1E8ED;":""}\n\t\tborder-radius: 14px 0 0 14px;\n\t\t`,Wr=w().div` + position: relative; + box-sizing: content-box; + overflow: hidden; + background-color: #e1e8ed; + flex-shrink: 0; + ${e=>Ur(e.isLarge)} +`,Kr=w().div` + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + max-width: 100%; + margin: 0; + padding: 1em; + text-align: center; + font-size: 1rem; + ${e=>Ur(e.isLarge,!1)} +`,Hr=w()(Kr)` + ${e=>e.isLarge&&`height: ${wr.TWITTER_IMAGE_SIZES.landscapeHeight}px;`} + border-top-left-radius: 14px; + ${e=>e.isLarge?"border-top-right-radius":"border-bottom-left-radius"}: 14px; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class Vr extends r().Component{constructor(e){super(e),this.state={status:"loading"},this.socialMedium="Twitter",this.handleTwitterImage=this.handleTwitterImage.bind(this),this.setState=this.setState.bind(this)}async handleTwitterImage(){if(null===this.props.src)return;const e=await Tr(this.props.src,this.socialMedium,this.props.isLarge);this.setState(e)}componentDidUpdate(e){e.src!==this.props.src&&this.handleTwitterImage()}componentDidMount(){this.handleTwitterImage()}render(){const{status:e,imageProperties:s}=this.state;return"loading"===e||""===this.props.src||"errored"===e?(0,t.createElement)(Hr,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,l.__)("Select image","wordpress-seo")):(0,t.createElement)(Wr,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,t.createElement)(kr,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:wr.TWITTER_IMAGE_SIZES.aspectRatio},width:s.width,height:s.height,imageMode:s.mode}))}}Vr.propTypes={isLarge:y().bool.isRequired,src:y().string,alt:y().string,onImageClick:y().func,onMouseEnter:y().func,onMouseLeave:y().func},Vr.defaultProps={src:"",alt:"",onMouseEnter:m.noop,onImageClick:m.noop,onMouseLeave:m.noop};const Yr=w().div` + display: flex; + flex-direction: column; + padding: 12px; + justify-content: center; + margin: 0; + box-sizing: border-box; + flex: auto; + min-width: 0px; + gap:2px; + > * { + line-height:20px; + min-height:20px; + font-size:15px; + } +`,jr=e=>(0,t.createElement)(Yr,null,e.children);jr.propTypes={children:y().array.isRequired};const zr=jr,Gr=w().p` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(15, 20, 25); + cursor: pointer; +`,Zr=w().p` + max-height: 55px; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(83, 100, 113); + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + + @media all and ( max-width: ${wr.TWITTER_IMAGE_SIZES.landscapeWidth}px ) { + display: none; + } +`,Xr=w().div` + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", sans-serif; + font-size: 15px; + font-weight: 400; + line-height: 20px; + max-width: 507px; + border: 1px solid #E1E8ED; + box-sizing: border-box; + border-radius: 14px; + color: #292F33; + background: #FFFFFF; + text-overflow: ellipsis; + display: flex; + + &:hover { + background: #f5f8fa; + border: 1px solid rgba(136,153,166,.5); + } +`,Qr=w()(Xr)` + flex-direction: column; + max-height: 370px; +`,Jr=w()(Xr)` + flex-direction: row; + height: 125px; +`;class ea extends t.Component{constructor(e){super(e),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}render(){const{isLarge:e,imageUrl:s,imageFallbackUrl:r,alt:a,title:n,description:o,siteUrl:i}=this.props,l=e?Qr:Jr;return(0,t.createElement)(l,{id:"twitterPreview"},(0,t.createElement)(Vr,{src:s||r,alt:a,isLarge:e,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),(0,t.createElement)(zr,null,(0,t.createElement)($r,{siteUrl:i}),(0,t.createElement)(Gr,{onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle},n),(0,t.createElement)(Zr,{onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription},o)))}}ea.propTypes={siteUrl:y().string.isRequired,title:y().string.isRequired,description:y().string,isLarge:y().bool,imageUrl:y().string,imageFallbackUrl:y().string,alt:y().string,onSelect:y().func,onImageClick:y().func,onMouseHover:y().func},ea.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{},isLarge:!0};const ta=ea,sa=window.yoast.replacementVariableEditor;class ra extends t.Component{constructor(e){super(e),this.state={activeField:"",hoveredField:""},this.SocialPreview="Social"===e.socialMediumName?qr:ta,this.setHoveredField=this.setHoveredField.bind(this),this.setActiveField=this.setActiveField.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.setEditorFocus=this.setEditorFocus.bind(this)}setHoveredField(e){e!==this.state.hoveredField&&this.setState({hoveredField:e})}setActiveField(e){e!==this.state.activeField&&this.setState({activeField:e},(()=>this.setEditorFocus(e)))}setEditorFocus(e){switch(e){case"title":this.titleEditorRef.focus();break;case"description":this.descriptionEditorRef.focus()}}setEditorRef(e,t){switch(e){case"title":this.titleEditorRef=t;break;case"description":this.descriptionEditorRef=t}}render(){const{onDescriptionChange:e,onTitleChange:s,onSelectImageClick:a,onRemoveImageClick:n,socialMediumName:o,imageWarnings:i,siteUrl:l,description:c,descriptionInputPlaceholder:d,descriptionPreviewFallback:p,imageUrl:u,imageFallbackUrl:m,alt:h,title:g,titleInputPlaceholder:y,titlePreviewFallback:f,replacementVariables:w,recommendedReplacementVariables:b,applyReplacementVariables:E,onReplacementVariableSearchChange:v,isPremium:k,isLarge:_,socialPreviewLabel:x,idSuffix:S,activeMetaTabId:T}=this.props,C=E({title:g||f,description:c||p});return(0,t.createElement)(r().Fragment,null,x&&(0,t.createElement)(R.SimulatedLabel,null,x),(0,t.createElement)(this.SocialPreview,{onMouseHover:this.setHoveredField,onSelect:this.setActiveField,onImageClick:a,siteUrl:l,title:C.title,description:C.description,imageUrl:u,imageFallbackUrl:m,alt:h,isLarge:_,activeMetaTabId:T}),(0,t.createElement)(wr.SocialMetadataPreviewForm,{onDescriptionChange:e,socialMediumName:o,title:g,titleInputPlaceholder:y,onRemoveImageClick:n,imageSelected:!!u,imageUrl:u,onTitleChange:s,onSelectImageClick:a,description:c,descriptionInputPlaceholder:d,imageWarnings:i,replacementVariables:w,recommendedReplacementVariables:b,onReplacementVariableSearchChange:v,onMouseHover:this.setHoveredField,hoveredField:this.state.hoveredField,onSelect:this.setActiveField,activeField:this.state.activeField,isPremium:k,setEditorRef:this.setEditorRef,idSuffix:S}))}}ra.propTypes={title:y().string.isRequired,onTitleChange:y().func.isRequired,description:y().string.isRequired,onDescriptionChange:y().func.isRequired,imageUrl:y().string.isRequired,imageFallbackUrl:y().string.isRequired,onSelectImageClick:y().func.isRequired,onRemoveImageClick:y().func.isRequired,socialMediumName:y().string.isRequired,alt:y().string,isPremium:y().bool,imageWarnings:y().array,isLarge:y().bool,siteUrl:y().string,descriptionInputPlaceholder:y().string,titleInputPlaceholder:y().string,descriptionPreviewFallback:y().string,titlePreviewFallback:y().string,replacementVariables:sa.replacementVariablesShape,recommendedReplacementVariables:sa.recommendedReplacementVariablesShape,applyReplacementVariables:y().func,onReplacementVariableSearchChange:y().func,socialPreviewLabel:y().string,idSuffix:y().string,activeMetaTabId:y().string},ra.defaultProps={imageWarnings:[],recommendedReplacementVariables:[],replacementVariables:[],isPremium:!1,isLarge:!0,siteUrl:"",descriptionInputPlaceholder:"",titleInputPlaceholder:"",descriptionPreviewFallback:"",titlePreviewFallback:"",alt:"",applyReplacementVariables:e=>e,onReplacementVariableSearchChange:null,socialPreviewLabel:"",idSuffix:"",activeMetaTabId:""};const aa={},na=(e,t,{log:s=console.warn}={})=>{aa[e]||(aa[e]=!0,s(t))},oa=(e,t=m.noop)=>{const s={};for(const r in e)Object.hasOwn(e,r)&&Object.defineProperty(s,r,{set:s=>{e[r]=s,t("set",r,s)},get:()=>(t("get",r),e[r])});return s};oa({squareWidth:125,squareHeight:125,landscapeWidth:506,landscapeHeight:265,aspectRatio:50.2},((e,t)=>na(`@yoast/social-metadata-previews/TWITTER_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "TWITTER_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`))),oa({squareWidth:158,squareHeight:158,landscapeWidth:527,landscapeHeight:273,portraitWidth:158,portraitHeight:237,aspectRatio:52.2,largeThreshold:{width:446,height:233}},((e,t)=>na(`@yoast/social-metadata-previews/FACEBOOK_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "FACEBOOK_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`)));const ia=w().div` + max-width: calc(527px + 1.5rem); +`,la=e=>{const s="X"===e.socialMediumName?(0,l.__)("X share preview","wordpress-seo"):(0,l.__)("Social share preview","wordpress-seo"),{locationContext:r}=(0,T.useRootContext)();return(0,t.createElement)(T.Root,null,(0,t.createElement)(ia,null,(0,t.createElement)(T.FeatureUpsell,{shouldUpsell:!0,variant:"card",cardLink:(0,Fs.addQueryArgs)(wpseoAdminL10n["shortlinks.upsell.social_preview."+e.socialMediumName.toLowerCase()],{context:r}),cardText:(0,l.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,l.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),"data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2"},(0,t.createElement)("div",{className:"yst-grayscale yst-opacity-50"},(0,t.createElement)(T.Label,null,s),(0,t.createElement)(qr,{title:"",description:"",siteUrl:"",imageUrl:"",imageFallbackUrl:"",alt:"",onSelect:m.noop,onImageClick:m.noop,onMouseHover:m.noop})))))};la.propTypes={socialMediumName:y().oneOf(["Social","Twitter","X"]).isRequired};const ca=la;class da extends i.Component{constructor(e){super(e),this.state={activeField:"",hoveredField:""},this.setHoveredField=this.setHoveredField.bind(this),this.setActiveField=this.setActiveField.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.setEditorFocus=this.setEditorFocus.bind(this)}setHoveredField(e){e!==this.state.hoveredField&&this.setState({hoveredField:e})}setActiveField(e){e!==this.state.activeField&&this.setState({activeField:e},(()=>this.setEditorFocus(e)))}setEditorFocus(e){switch(e){case"title":this.titleEditorRef.focus();break;case"description":this.descriptionEditorRef.focus()}}setEditorRef(e,t){switch(e){case"title":this.titleEditorRef=t;break;case"description":this.descriptionEditorRef=t}}render(){const{onDescriptionChange:e,onTitleChange:s,onSelectImageClick:r,onRemoveImageClick:a,socialMediumName:n,imageWarnings:o,description:l,descriptionInputPlaceholder:c,imageUrl:d,alt:p,title:u,titleInputPlaceholder:m,replacementVariables:h,recommendedReplacementVariables:g,onReplacementVariableSearchChange:y,isPremium:f,location:w}=this.props;return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(ca,{socialMediumName:n}),(0,t.createElement)(wr.SocialMetadataPreviewForm,{onDescriptionChange:e,socialMediumName:n,title:u,titleInputPlaceholder:m,onRemoveImageClick:a,imageSelected:!!d,imageUrl:d,imageAltText:p,onTitleChange:s,onSelectImageClick:r,description:l,descriptionInputPlaceholder:c,imageWarnings:o,replacementVariables:h,recommendedReplacementVariables:g,onReplacementVariableSearchChange:y,onMouseHover:this.setHoveredField,hoveredField:this.state.hoveredField,onSelect:this.setActiveField,activeField:this.state.activeField,isPremium:f,setEditorRef:this.setEditorRef,idSuffix:w}))}}da.propTypes={title:y().string.isRequired,onTitleChange:y().func.isRequired,description:y().string.isRequired,onDescriptionChange:y().func.isRequired,imageUrl:y().string.isRequired,onSelectImageClick:y().func.isRequired,onRemoveImageClick:y().func.isRequired,socialMediumName:y().string.isRequired,isPremium:y().bool,imageWarnings:y().array,descriptionInputPlaceholder:y().string,titleInputPlaceholder:y().string,replacementVariables:sa.replacementVariablesShape,recommendedReplacementVariables:sa.recommendedReplacementVariablesShape,onReplacementVariableSearchChange:y().func,location:y().string,alt:y().string},da.defaultProps={imageWarnings:[],recommendedReplacementVariables:[],replacementVariables:[],isPremium:!1,descriptionInputPlaceholder:"",titleInputPlaceholder:"",onReplacementVariableSearchChange:null,location:"",alt:""};const pa=da,ua=e=>{const[s,r]=(0,i.useState)(""),a=(0,i.useCallback)((e=>{r(e.detail.metaTabId)}),[r]);(0,i.useEffect)((()=>(setTimeout(e.onLoad),window.addEventListener("YoastSEO:metaTabChange",a),()=>{window.removeEventListener("YoastSEO:metaTabChange",a)})),[]);const n=(0,i.useMemo)((()=>({...e,activeMetaTabId:s})),[e,s]);return e.isPremium?(0,t.createElement)(k.Slot,{name:`YoastFacebookPremium${e.location.charAt(0).toUpperCase()+e.location.slice(1)}`,fillProps:n}):(0,t.createElement)(pa,{...n})};ua.propTypes={isPremium:y().bool.isRequired,onLoad:y().func.isRequired,location:y().string.isRequired};const ma=ua;function ha(e){(function(e){const t=window.wp.media();return t.on("select",(()=>{const s=t.state().get("selection").first();var r;e({type:(r=s.attributes).subtype,width:r.width,height:r.height,url:r.url,id:r.id,sizes:r.sizes,alt:r.alt||r.title||r.name})})),t})(e).open()}const ga=()=>{ha((e=>(0,n.dispatch)("yoast-seo/editor").setFacebookPreviewImage((e=>{const{width:t,height:s}=e,r=(0,wr.determineFacebookImageMode)({width:t,height:s}),a=wr.FACEBOOK_IMAGE_SIZES[r+"Width"],n=wr.FACEBOOK_IMAGE_SIZES[r+"Height"],o=Object.values(e.sizes).find((e=>e.width>=a&&e.height>=n));return{url:o?o.url:e.url,id:e.id,warnings:(0,Y.validateFacebookImage)(e),alt:e.alt||""}})(e))))},ya=(0,B.compose)([(0,n.withSelect)((e=>{const{getFacebookDescription:t,getDescription:s,getFacebookTitle:r,getSeoTitle:a,getFacebookImageUrl:n,getImageFallback:o,getFacebookWarnings:i,getRecommendedReplaceVars:l,getReplaceVars:c,getSiteUrl:d,getSeoTitleTemplate:p,getSeoTitleTemplateNoFallback:u,getSocialTitleTemplate:m,getSeoDescriptionTemplate:g,getSocialDescriptionTemplate:y,getReplacedExcerpt:f,getFacebookAltText:w}=e("yoast-seo/editor");return{imageUrl:n(),imageFallbackUrl:o(),recommendedReplacementVariables:l(),replacementVariables:c(),description:t(),descriptionPreviewFallback:y()||s()||g()||f()||"",title:r(),titlePreviewFallback:m()||a()||u()||p()||"",imageWarnings:i(),siteUrl:d(),isPremium:!!h().isPremium,titleInputPlaceholder:"",descriptionInputPlaceholder:"",socialMediumName:"Social",alt:w()}})),(0,n.withDispatch)(((e,t,{select:s})=>{const{setFacebookPreviewTitle:r,setFacebookPreviewDescription:a,clearFacebookPreviewImage:n,loadFacebookPreviewData:o,findCustomFields:i}=e("yoast-seo/editor"),l=s("yoast-seo/editor").getPostId();return{onSelectImageClick:ga,onRemoveImageClick:n,onDescriptionChange:a,onTitleChange:r,onLoad:o,onReplacementVariableSearchChange:is(l,i)}})),jt()])(ma),fa=e=>((0,i.useEffect)((()=>{setTimeout(e.onLoad)}),[]),e.isPremium?(0,t.createElement)(k.Slot,{name:`YoastTwitterPremium${e.location.charAt(0).toUpperCase()+e.location.slice(1)}`,fillProps:e}):(0,t.createElement)(pa,{...e}));fa.propTypes={isPremium:y().bool.isRequired,onLoad:y().func.isRequired,location:y().string.isRequired};const wa=fa,ba=()=>{ha((e=>(0,n.dispatch)("yoast-seo/editor").setTwitterPreviewImage((e=>{const t="summary"!==(0,m.get)(window,"wpseoScriptData.metabox.twitterCardType")?"landscape":"square",s=wr.TWITTER_IMAGE_SIZES[t+"Width"],r=wr.TWITTER_IMAGE_SIZES[t+"Height"],a=Object.values(e.sizes).find((e=>e.width>=s&&e.height>=r));return{url:a?a.url:e.url,id:e.id,warnings:(0,Y.validateTwitterImage)(e),alt:e.alt||""}})(e))))},Ea=(0,B.compose)([(0,n.withSelect)((e=>{const{getTwitterDescription:t,getTwitterTitle:s,getTwitterImageUrl:r,getFacebookImageUrl:a,getFacebookTitle:n,getFacebookDescription:o,getDescription:i,getSeoTitle:l,getTwitterWarnings:c,getTwitterImageType:d,getImageFallback:p,getRecommendedReplaceVars:u,getReplaceVars:m,getSiteUrl:g,getSeoTitleTemplate:y,getSeoTitleTemplateNoFallback:f,getSocialTitleTemplate:w,getSeoDescriptionTemplate:b,getSocialDescriptionTemplate:E,getReplacedExcerpt:v,getTwitterAltText:k}=e("yoast-seo/editor");return{imageUrl:r(),imageFallbackUrl:a()||p(),recommendedReplacementVariables:u(),replacementVariables:m(),description:t(),descriptionPreviewFallback:E()||o()||i()||b()||v()||"",title:s(),titlePreviewFallback:w()||n()||l()||f()||y()||"",imageWarnings:c(),siteUrl:g(),isPremium:!!h().isPremium,isLarge:"summary"!==d(),titleInputPlaceholder:"",descriptionInputPlaceholder:"",socialMediumName:"X",alt:k()}})),(0,n.withDispatch)(((e,t,{select:s})=>{const{setTwitterPreviewTitle:r,setTwitterPreviewDescription:a,clearTwitterPreviewImage:n,loadTwitterPreviewData:o,findCustomFields:i}=e("yoast-seo/editor"),l=s("yoast-seo/editor").getPostId();return{onSelectImageClick:ba,onRemoveImageClick:n,onDescriptionChange:a,onTitleChange:r,onLoad:o,onReplacementVariableSearchChange:is(l,i)}})),jt()])(wa),va=w().legend` + margin: 16px 0; + padding: 0; + color: ${C.colors.$color_headings}; + font-size: 12px; + font-weight: 300; +`,ka=w().legend` + margin: 0 0 16px; + padding: 0; + color: ${C.colors.$color_headings}; + font-size: 12px; + font-weight: 300; +`,_a=w().div` + padding: 16px; +`,xa=({useOpenGraphData:e,useTwitterData:s})=>(0,t.createElement)(i.Fragment,null,s&&e&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(ys,{hasSeparator:!1 +/* translators: Social media appearance refers to a preview of how a page will be represented on social media. */,title:(0,l.__)("Social media appearance","wordpress-seo"),initialIsOpen:!0},(0,t.createElement)(ka,null,(0,l.__)("Determine how your post should look on social media like Facebook, X, Instagram, WhatsApp, Threads, LinkedIn, Slack, and more.","wordpress-seo")),(0,t.createElement)(ya,null),(0,t.createElement)(va,null,(0,l.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below. If you leave these settings untouched, the 'Social media appearance' settings mentioned above will also be applied for sharing on X.","wordpress-seo"))),(0,t.createElement)(ys,{title:(0,l.__)("X appearance","wordpress-seo"),hasSeparator:!0,initialIsOpen:!1},(0,t.createElement)(Ea,null))),e&&!s&&(0,t.createElement)(_a,null,(0,t.createElement)(ka,null,(0,l.__)("Determine how your post should look on social media like Facebook, X, Instagram, WhatsApp, Threads, LinkedIn, Slack, and more.","wordpress-seo")),(0,t.createElement)(ya,null)),!e&&s&&(0,t.createElement)(_a,null,(0,t.createElement)(ka,null,(0,l.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below.","wordpress-seo")),(0,t.createElement)(Ea,null)));xa.propTypes={useOpenGraphData:y().bool.isRequired,useTwitterData:y().bool.isRequired};const Sa=xa,Ta=(0,n.withSelect)((e=>{const{getPreferences:t}=e("yoast-seo/editor"),{useOpenGraphData:s,useTwitterData:r}=t();return{useOpenGraphData:s,useTwitterData:r}}))(Sa);function Ra({target:e}){return(0,t.createElement)(L,{target:e},(0,t.createElement)(Ta,null))}Ra.propTypes={target:y().string.isRequired};const Ca=(0,Y.makeOutboundLink)(),Ia=w().div` + padding: 16px; +`,Aa="yoast-seo/editor";function La({location:e,show:s}){return s?(0,t.createElement)(R.Alert,{type:"info"},(0,l.sprintf)(/* translators: %s Expands to "Yoast News SEO" */ +(0,l.__)("Are you working on a news article? %s helps you optimize your site for Google News.","wordpress-seo"),"Yoast News SEO")+" ",(0,t.createElement)(Ca,{href:window.wpseoAdminL10n[`shortlinks.upsell.${e}.news`]},(0,l.sprintf)(/* translators: %s: Expands to "Yoast News SEO". */ +(0,l.__)("Buy %s now!","wordpress-seo"),"Yoast News SEO"))):null}La.propTypes={show:y().bool.isRequired,location:y().string.isRequired};const Pa=(e,t,s)=>{const r=(0,n.useSelect)((e=>e(Aa).getIsProduct()),[]),a=(0,n.useSelect)((e=>e(Aa).getIsWooSeoActive()),[]),o=r&&a?{name:(0,l.__)("Item Page","wordpress-seo"),value:"ItemPage"}:e.find((e=>e.value===t));return[{name:(0,l.sprintf)(/* translators: %1$s expands to the plural name of the current post type, %2$s expands to the current site wide default. */ +(0,l.__)("Default for %1$s (%2$s)","wordpress-seo"),s,o?o.name:""),value:""},...e]},Fa=e=>(0,l.sprintf)(/* translators: %1$s expands to the plural name of the current post type, %2$s and %3$s expand to a link to the Settings page */ +(0,l.__)("You can change the default type for %1$s under Content types in the %2$sSettings%3$s.","wordpress-seo"),e,"{{link}}","{{/link}}");y().string.isRequired,y().string.isRequired,y().string.isRequired;const Oa=e=>{const s=Pa(e.pageTypeOptions,e.defaultPageType,e.postTypeName),r=Pa(e.articleTypeOptions,e.defaultArticleType,e.postTypeName),a=(0,m.get)(window,"wpseoScriptData.metabox.woocommerceUpsellSchemaLink",""),o=(0,m.get)(window,"wpseoScriptData.woocommerceUpsell",""),[c,d]=(0,i.useState)(e.schemaArticleTypeSelected),p=(0,l.__)("Want your products stand out in search results with rich results like price, reviews and more?","wordpress-seo"),u=(0,n.useSelect)((e=>e(Aa).getIsProduct()),[]),h=(0,n.useSelect)((e=>e(Aa).getIsWooSeoActive()),[]),g=(0,n.useSelect)((e=>e(Aa).selectAdminLink("?page=wpseo_page_settings")),[]),y=u&&h,f=(0,i.useCallback)(((e,t)=>{d(t)}),[c]);return(0,i.useEffect)((()=>{f(null,e.schemaArticleTypeSelected)}),[e.schemaArticleTypeSelected]),(0,t.createElement)(i.Fragment,null,(0,t.createElement)(R.FieldGroup,{label:(0,l.__)("What type of page or content is this?","wordpress-seo"),linkTo:e.additionalHelpTextLink +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about page or content types","wordpress-seo")}),o&&(0,t.createElement)(ds,{link:a,text:p}),(0,t.createElement)(R.Select,{id:(0,Y.join)(["yoast-schema-page-type",e.location]),options:s,label:(0,l.__)("Page type","wordpress-seo"),onChange:e.schemaPageTypeChange,selected:y?"ItemPage":e.schemaPageTypeSelected,disabled:y}),e.showArticleTypeInput&&(0,t.createElement)(R.Select,{id:(0,Y.join)(["yoast-schema-article-type",e.location]),options:r,label:(0,l.__)("Article type","wordpress-seo"),onChange:e.schemaArticleTypeChange,selected:e.schemaArticleTypeSelected,onOptionFocus:f}),(0,t.createElement)(La,{location:e.location,show:!e.isNewsEnabled&&(E=c,v=e.defaultArticleType,"NewsArticle"===E||""===E&&"NewsArticle"===v)}),e.displayFooter&&!y&&(0,t.createElement)("p",null,(w=e.postTypeName,b=g,(0,oe.Z)({mixedString:Fa(w),components:{link:(0,t.createElement)("a",{href:b,target:"_blank",rel:"noreferrer"})}}))),y&&(0,t.createElement)("p",null,(0,l.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,l.__)("You have %1$s activated on your site, automatically setting the Page type for your products to 'Item Page'. As a result, the Page type selection is disabled.","wordpress-seo"),"Yoast WooCommerce SEO")));var w,b,E,v},Ma=y().arrayOf(y().shape({name:y().string,value:y().string}));Oa.propTypes={schemaPageTypeChange:y().func,schemaPageTypeSelected:y().string,pageTypeOptions:Ma.isRequired,schemaArticleTypeChange:y().func,schemaArticleTypeSelected:y().string,articleTypeOptions:Ma.isRequired,showArticleTypeInput:y().bool.isRequired,additionalHelpTextLink:y().string.isRequired,helpTextLink:y().string.isRequired,helpTextTitle:y().string.isRequired,helpTextDescription:y().string.isRequired,postTypeName:y().string.isRequired,displayFooter:y().bool,defaultPageType:y().string.isRequired,defaultArticleType:y().string.isRequired,location:y().string.isRequired,isNewsEnabled:y().bool},Oa.defaultProps={schemaPageTypeChange:()=>{},schemaPageTypeSelected:null,schemaArticleTypeChange:()=>{},schemaArticleTypeSelected:null,displayFooter:!1,isNewsEnabled:!1};const Da=e=>e.isMetabox?(0,i.createPortal)((0,t.createElement)(Ia,null,(0,t.createElement)(Oa,{...e})),document.getElementById("wpseo-meta-section-schema")):(0,t.createElement)(Oa,{...e});Da.propTypes={showArticleTypeInput:y().bool,articleTypeLabel:y().string,additionalHelpTextLink:y().string,pageTypeLabel:y().string.isRequired,helpTextLink:y().string.isRequired,helpTextTitle:y().string.isRequired,helpTextDescription:y().string.isRequired,isMetabox:y().bool.isRequired,postTypeName:y().string.isRequired,displayFooter:y().bool,loadSchemaArticleData:y().func.isRequired,loadSchemaPageData:y().func.isRequired,location:y().string.isRequired},Da.defaultProps={showArticleTypeInput:!1,articleTypeLabel:"",additionalHelpTextLink:"",displayFooter:!1};const qa=Da;class Na{static get articleTypeInput(){return document.getElementById("yoast_wpseo_schema_article_type")}static get defaultArticleType(){return Na.articleTypeInput.getAttribute("data-default")}static get articleType(){return Na.articleTypeInput.value}static set articleType(e){Na.articleTypeInput.value=e}static get pageTypeInput(){return document.getElementById("yoast_wpseo_schema_page_type")}static get defaultPageType(){return Na.pageTypeInput.getAttribute("data-default")}static get pageType(){return Na.pageTypeInput.value}static set pageType(e){Na.pageTypeInput.value=e}}const Ba=e=>{const s=null!==Na.articleTypeInput;(0,i.useEffect)((()=>{e.loadSchemaPageData(),s&&e.loadSchemaArticleData()}),[]);const{pageTypeOptions:r,articleTypeOptions:a}=window.wpseoScriptData.metabox.schema,n={articleTypeLabel:(0,l.__)("Article type","wordpress-seo"),pageTypeLabel:(0,l.__)("Page type","wordpress-seo"),postTypeName:window.wpseoAdminL10n.postTypeNamePlural,helpTextTitle:(0,l.__)("Yoast SEO automatically describes your pages using schema.org","wordpress-seo"),helpTextDescription:(0,l.__)("This helps search engines understand your website and your content. You can change some of your settings for this page below.","wordpress-seo"),showArticleTypeInput:s,pageTypeOptions:r,articleTypeOptions:a},o={...e,...n,...(c=e.location,"metabox"===c?{helpTextLink:wpseoAdminL10n["shortlinks.metabox.schema.explanation"],additionalHelpTextLink:wpseoAdminL10n["shortlinks.metabox.schema.page_type"],isMetabox:!0}:{helpTextLink:wpseoAdminL10n["shortlinks.sidebar.schema.explanation"],additionalHelpTextLink:wpseoAdminL10n["shortlinks.sidebar.schema.page_type"],isMetabox:!1})};var c;return(0,t.createElement)(qa,{...o})};Ba.propTypes={displayFooter:y().bool.isRequired,schemaPageTypeSelected:y().string.isRequired,schemaArticleTypeSelected:y().string.isRequired,defaultArticleType:y().string.isRequired,defaultPageType:y().string.isRequired,loadSchemaPageData:y().func.isRequired,loadSchemaArticleData:y().func.isRequired,schemaPageTypeChange:y().func.isRequired,schemaArticleTypeChange:y().func.isRequired,location:y().string.isRequired};const $a=(0,B.compose)([(0,n.withSelect)((e=>{const{getPreferences:t,getPageType:s,getDefaultPageType:r,getArticleType:a,getDefaultArticleType:n}=e("yoast-seo/editor"),{displaySchemaSettingsFooter:o,isNewsEnabled:i}=t();return{displayFooter:o,isNewsEnabled:i,schemaPageTypeSelected:s(),schemaArticleTypeSelected:a(),defaultArticleType:n(),defaultPageType:r()}})),(0,n.withDispatch)((e=>{const{setPageType:t,setArticleType:s,getSchemaPageData:r,getSchemaArticleData:a}=e("yoast-seo/editor");return{loadSchemaPageData:r,loadSchemaArticleData:a,schemaPageTypeChange:t,schemaArticleTypeChange:s}})),jt()])(Ba),Ua=()=>(0,t.createElement)("p",{className:"yoast-related-keyphrases-modal__loading-message"},(0,l.sprintf)(/* translators: %1$s expands to "Yoast SEO", %2$s expands to "Semrush". */ +(0,l.__)("Please wait while %1$s connects to %2$s to get related keyphrases...","wordpress-seo"),"Yoast SEO","Semrush")," ",(0,t.createElement)(R.SvgIcon,{icon:"loading-spinner"})),Wa=(0,Y.makeOutboundLink)(),Ka=()=>(0,t.createElement)(i.Fragment,null,(0,t.createElement)("p",null,(0,l.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,l.__)("You've reached your request limit for today. Check back tomorrow or upgrade your plan over at %s.","wordpress-seo"),"Semrush")),(0,t.createElement)(Wa,{href:window.wpseoAdminL10n["shortlinks.semrush.prices"],className:"yoast-button-upsell"},(0,l.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,l.__)("Upgrade your %s plan","wordpress-seo"),"Semrush"),(0,t.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"}))),Ha="yoast-semrush-country-selector",Va=[{value:"us",name:"United States - US"},{value:"uk",name:"United Kingdom - UK"},{value:"ca",name:"Canada - CA"},{value:"ru",name:"Russia - RU"},{value:"de",name:"Germany - DE"},{value:"fr",name:"France - FR"},{value:"es",name:"Spain - ES"},{value:"it",name:"Italy - IT"},{value:"br",name:"Brazil - BR"},{value:"au",name:"Australia - AU"},{value:"ar",name:"Argentina - AR"},{value:"be",name:"Belgium - BE"},{value:"ch",name:"Switzerland - CH"},{value:"dk",name:"Denmark - DK"},{value:"fi",name:"Finland - FI"},{value:"hk",name:"Hong Kong - HK"},{value:"ie",name:"Ireland - IE"},{value:"il",name:"Israel - IL"},{value:"mx",name:"Mexico - MX"},{value:"nl",name:"Netherlands - NL"},{value:"no",name:"Norway - NO"},{value:"pl",name:"Poland - PL"},{value:"se",name:"Sweden - SE"},{value:"sg",name:"Singapore - SG"},{value:"tr",name:"Turkey - TR"},{value:"jp",name:"Japan - JP"},{value:"in",name:"India - IN"},{value:"hu",name:"Hungary - HU"},{value:"af",name:"Afghanistan - AF"},{value:"al",name:"Albania - AL"},{value:"dz",name:"Algeria - DZ"},{value:"ao",name:"Angola - AO"},{value:"am",name:"Armenia - AM"},{value:"at",name:"Austria - AT"},{value:"az",name:"Azerbaijan - AZ"},{value:"bh",name:"Bahrain - BH"},{value:"bd",name:"Bangladesh - BD"},{value:"by",name:"Belarus - BY"},{value:"bz",name:"Belize - BZ"},{value:"bo",name:"Bolivia - BO"},{value:"ba",name:"Bosnia and Herzegovina - BA"},{value:"bw",name:"Botswana - BW"},{value:"bn",name:"Brunei - BN"},{value:"bg",name:"Bulgaria - BG"},{value:"cv",name:"Cabo Verde - CV"},{value:"kh",name:"Cambodia - KH"},{value:"cm",name:"Cameroon - CM"},{value:"cl",name:"Chile - CL"},{value:"co",name:"Colombia - CO"},{value:"cr",name:"Costa Rica - CR"},{value:"hr",name:"Croatia - HR"},{value:"cy",name:"Cyprus - CY"},{value:"cz",name:"Czech Republic - CZ"},{value:"cd",name:"Congo - CD"},{value:"do",name:"Dominican Republic - DO"},{value:"ec",name:"Ecuador - EC"},{value:"eg",name:"Egypt - EG"},{value:"sv",name:"El Salvador - SV"},{value:"ee",name:"Estonia - EE"},{value:"et",name:"Ethiopia - ET"},{value:"ge",name:"Georgia - GE"},{value:"gh",name:"Ghana - GH"},{value:"gr",name:"Greece - GR"},{value:"gt",name:"Guatemala - GT"},{value:"gy",name:"Guyana - GY"},{value:"ht",name:"Haiti - HT"},{value:"hn",name:"Honduras - HN"},{value:"is",name:"Iceland - IS"},{value:"id",name:"Indonesia - ID"},{value:"jm",name:"Jamaica - JM"},{value:"jo",name:"Jordan - JO"},{value:"kz",name:"Kazakhstan - KZ"},{value:"kw",name:"Kuwait - KW"},{value:"lv",name:"Latvia - LV"},{value:"lb",name:"Lebanon - LB"},{value:"lt",name:"Lithuania - LT"},{value:"lu",name:"Luxembourg - LU"},{value:"mg",name:"Madagascar - MG"},{value:"my",name:"Malaysia - MY"},{value:"mt",name:"Malta - MT"},{value:"mu",name:"Mauritius - MU"},{value:"md",name:"Moldova - MD"},{value:"mn",name:"Mongolia - MN"},{value:"me",name:"Montenegro - ME"},{value:"ma",name:"Morocco - MA"},{value:"mz",name:"Mozambique - MZ"},{value:"na",name:"Namibia - NA"},{value:"np",name:"Nepal - NP"},{value:"nz",name:"New Zealand - NZ"},{value:"ni",name:"Nicaragua - NI"},{value:"ng",name:"Nigeria - NG"},{value:"om",name:"Oman - OM"},{value:"py",name:"Paraguay - PY"},{value:"pe",name:"Peru - PE"},{value:"ph",name:"Philippines - PH"},{value:"pt",name:"Portugal - PT"},{value:"ro",name:"Romania - RO"},{value:"sa",name:"Saudi Arabia - SA"},{value:"sn",name:"Senegal - SN"},{value:"rs",name:"Serbia - RS"},{value:"sk",name:"Slovakia - SK"},{value:"si",name:"Slovenia - SI"},{value:"za",name:"South Africa - ZA"},{value:"kr",name:"South Korea - KR"},{value:"lk",name:"Sri Lanka - LK"},{value:"th",name:"Thailand - TH"},{value:"bs",name:"Bahamas - BS"},{value:"tt",name:"Trinidad and Tobago - TT"},{value:"tn",name:"Tunisia - TN"},{value:"ua",name:"Ukraine - UA"},{value:"ae",name:"United Arab Emirates - AE"},{value:"uy",name:"Uruguay - UY"},{value:"ve",name:"Venezuela - VE"},{value:"vn",name:"Vietnam - VN"},{value:"zm",name:"Zambia - ZM"},{value:"zw",name:"Zimbabwe - ZW"},{value:"ly",name:"Libya - LY"}];class Ya extends i.Component{constructor(e){super(e),this.relatedKeyphrasesRequest=this.relatedKeyphrasesRequest.bind(this),this.onChangeHandler=this.onChangeHandler.bind(this)}componentDidMount(){this.props.response&&this.props.keyphrase===this.props.lastRequestKeyphrase||this.relatedKeyphrasesRequest()}storeCountryCode(e){ue()({path:"yoast/v1/semrush/country_code",method:"POST",data:{country_code:e}})}async relatedKeyphrasesRequest(){const{keyphrase:e,countryCode:t,newRequest:s}=this.props;s(t,e),this.storeCountryCode(t);const r=await this.doRequest(e,t);200!==r.status?this.handleFailedResponse(r):this.handleSuccessResponse(r)}handleSuccessResponse(e){const{setNoResultsFound:t,setRequestSucceeded:s}=this.props;0!==e.results.rows.length?s(e):t()}handleFailedResponse(e){const{setRequestLimitReached:t,setRequestFailed:s}=this.props;"error"in e&&(e.error.includes("TOTAL LIMIT EXCEEDED")?t():s(e))}async doRequest(e,t){return await ue()({path:(0,Fs.addQueryArgs)("/yoast/v1/semrush/related_keyphrases",{keyphrase:e,country_code:t})})}onChangeHandler(e){this.props.setCountry(e)}render(){return(0,t.createElement)("div",{id:Ha},(0,t.createElement)(R.SingleSelect,{id:Ha+"-select",label:(0,l.__)("Show results for:","wordpress-seo"),name:"semrush-country-code",options:Va,selected:this.props.countryCode,onChange:this.onChangeHandler,wrapperClassName:"yoast-field-group yoast-field-group--inline"}),(0,t.createElement)(R.NewButton,{id:Ha+"-button",variant:"secondary",onClick:this.relatedKeyphrasesRequest},(0,l.__)("Select country","wordpress-seo")))}}Ya.propTypes={keyphrase:y().string,countryCode:y().string,response:y().object,lastRequestKeyphrase:y().string,setCountry:y().func.isRequired,newRequest:y().func.isRequired,setNoResultsFound:y().func.isRequired,setRequestSucceeded:y().func.isRequired,setRequestLimitReached:y().func.isRequired,setRequestFailed:y().func.isRequired},Ya.defaultProps={keyphrase:"",countryCode:"us",response:{},lastRequestKeyphrase:""};const ja=Ya,za=(0,Y.makeOutboundLink)(w().a` + display: inline-block; + position: relative; + outline: none; + text-decoration: none; + border-radius: 100%; + width: 24px; + height: 24px; + margin: -4px 0; + vertical-align: middle; + + color: ${C.colors.$color_help_text}; + + &:hover, + &:focus { + color: ${C.colors.$color_snippet_focus}; + } + + // Overwrite the default blue active color for links. + &:active { + color: ${C.colors.$color_help_text}; + } + + &::before { + position: absolute; + top: 0; + left: 0; + padding: 2px; + content: "\f223"; + } +`),Ga=(0,Y.makeOutboundLink)();class Za extends i.Component{constructor(e){super(e),this.transformTrendDataToChartPoints=this.transformTrendDataToChartPoints.bind(this),this.getAreaChartDataTableHeaderLabels=this.getAreaChartDataTableHeaderLabels.bind(this),this.mapAreaChartDataToTableData=this.mapAreaChartDataToTableData.bind(this)}transformTrendDataToChartPoints(e){return e.split(",").map(((e,t)=>({x:t,y:parseFloat(e)})))}getAreaChartDataTableHeaderLabels(){return[(0,l.__)("Twelve months ago","wordpress-seo"),(0,l.__)("Eleven months ago","wordpress-seo"),(0,l.__)("Ten months ago","wordpress-seo"),(0,l.__)("Nine months ago","wordpress-seo"),(0,l.__)("Eight months ago","wordpress-seo"),(0,l.__)("Seven months ago","wordpress-seo"),(0,l.__)("Six months ago","wordpress-seo"),(0,l.__)("Five months ago","wordpress-seo"),(0,l.__)("Four months ago","wordpress-seo"),(0,l.__)("Three months ago","wordpress-seo"),(0,l.__)("Two months ago","wordpress-seo"),(0,l.__)("Last month","wordpress-seo")]}mapAreaChartDataToTableData(e){return Math.round(100*e)}render(){const{keyphrase:e,relatedKeyphrases:s,countryCode:r,data:a,renderAction:n}=this.props,o="https://www.semrush.com/analytics/keywordoverview/?q="+encodeURIComponent(e)+"&db="+encodeURIComponent(r);return a&&!(0,m.isEmpty)(a.results)&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("table",{className:"yoast yoast-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{scope:"col",className:"yoast-table--primary"},(0,l.__)("Related keyphrase","wordpress-seo")),(0,t.createElement)("th",{scope:"col",abbr:(0,l.__)("Volume","wordpress-seo")},(0,l.__)("Volume","wordpress-seo"),(0,t.createElement)(za,{href:window.wpseoAdminL10n["shortlinks.semrush.volume_help"],className:"dashicons"},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,l.__)("Learn more about the related keyphrases volume","wordpress-seo")))),(0,t.createElement)("th",{scope:"col",abbr:(0,l.__)("Trend","wordpress-seo")},(0,l.__)("Trend","wordpress-seo"),(0,t.createElement)(za,{href:window.wpseoAdminL10n["shortlinks.semrush.trend_help"],className:"dashicons"},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,l.__)("Learn more about the related keyphrases trend","wordpress-seo")))),n&&(0,t.createElement)("td",{className:"yoast-table--nobreak"}))),(0,t.createElement)("tbody",null,a.results.rows.map(((e,r)=>{const a=e[0],o=this.transformTrendDataToChartPoints(e[2]),i=this.getAreaChartDataTableHeaderLabels();return(0,t.createElement)("tr",{key:r},(0,t.createElement)("td",null,a),(0,t.createElement)("td",null,e[1]),(0,t.createElement)("td",{className:"yoast-table--nopadding"},(0,t.createElement)(Pe,{width:66,height:24,data:o,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",className:"yoast-related-keyphrases-modal__chart",mapChartDataToTableData:this.mapAreaChartDataToTableData,dataTableCaption:(0,l.__)("Keyphrase volume in the last 12 months on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:i})),n&&(0,t.createElement)("td",{className:"yoast-table--nobreak"},n(a,s)))})))),(0,t.createElement)("p",{style:{marginBottom:0}},(0,t.createElement)(Ga,{href:o},(0,l.sprintf)(/* translators: %s expands to Semrush */ +(0,l.__)("Get more insights at %s","wordpress-seo"),"Semrush"))))}}Za.propTypes={data:y().object,keyphrase:y().string,relatedKeyphrases:y().array,countryCode:y().string,renderAction:y().func},Za.defaultProps={data:{},keyphrase:"",relatedKeyphrases:[],countryCode:"us",renderAction:null};const Xa=Za,Qa=(0,Y.makeOutboundLink)(),Ja=()=>(0,t.createElement)(R.Alert,{type:"info"},(0,l.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,l.__)("You’ll reach more people with multiple keyphrases! Want to quickly add these related keyphrases to the %s analyses for even better content optimization?","wordpress-seo"),"Yoast SEO")+" ",(0,t.createElement)(Qa,{href:window.wpseoAdminL10n["shortlinks.semrush.premium_landing_page"]},(0,l.sprintf)(/* translators: %s: Expands to "Yoast SEO Premium". */ +(0,l.__)("Explore %s!","wordpress-seo"),"Yoast SEO Premium"))),en=()=>(0,t.createElement)(R.Alert,{type:"error"},(0,l.__)("We've encountered a problem trying to get related keyphrases. Please try again later.","wordpress-seo")),tn=()=>(0,t.createElement)(R.Alert,{type:"warning"},(0,l.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,l.__)("You've reached the maximum amount of 4 related keyphrases. You can change or remove related keyphrases in the %s metabox or sidebar.","wordpress-seo"),"Yoast SEO"));function sn(e){const{response:s,lastRequestKeyphrase:r,keyphrase:a,newRequest:n,setCountry:o,renderAction:c,countryCode:d,requestLimitReached:p,setRequestFailed:u,setNoResultsFound:g,relatedKeyphrases:y,setRequestSucceeded:f,setRequestLimitReached:w}=e,b=h().isPremium;return(0,t.createElement)(i.Fragment,null,!p&&(0,t.createElement)(i.Fragment,null,!b&&(0,t.createElement)(Ja,null),b&&function(e){return e&&e.length>=4}(y)&&(0,t.createElement)(tn,null),(0,t.createElement)(ja,{countryCode:d,setCountry:o,newRequest:n,keyphrase:a,setRequestFailed:u,setNoResultsFound:g,setRequestSucceeded:f,setRequestLimitReached:w,response:s,lastRequestKeyphrase:r})),function(e){const{isPending:s,requestLimitReached:r,isSuccess:a,response:n,requestHasData:o}=e;return s?(0,t.createElement)(Ua,null):r?(0,t.createElement)(Ka,null):!a&&function(e){return!(0,m.isEmpty)(e)&&"error"in e}(n)?(0,t.createElement)(en,null):o?void 0:(0,t.createElement)("p",null,(0,l.__)("Sorry, there's no data available for that keyphrase/country combination.","wordpress-seo"))}(e),(0,t.createElement)(Xa,{keyphrase:a,relatedKeyphrases:y,countryCode:d,renderAction:c,data:s}))}sn.propTypes={keyphrase:y().string,relatedKeyphrases:y().array,renderAction:y().func,requestLimitReached:y().bool,countryCode:y().string.isRequired,setCountry:y().func.isRequired,newRequest:y().func.isRequired,setRequestSucceeded:y().func.isRequired,setRequestLimitReached:y().func.isRequired,setRequestFailed:y().func.isRequired,setNoResultsFound:y().func.isRequired,response:y().object,lastRequestKeyphrase:y().string},sn.defaultProps={keyphrase:"",relatedKeyphrases:[],renderAction:null,requestLimitReached:!1,response:{},lastRequestKeyphrase:""};const rn=(0,B.compose)([(0,n.withSelect)((e=>{const{getFocusKeyphrase:t,getSEMrushSelectedCountry:s,getSEMrushRequestLimitReached:r,getSEMrushRequestResponse:a,getSEMrushRequestIsSuccess:n,getSEMrushIsRequestPending:o,getSEMrushRequestHasData:i,getSEMrushRequestKeyphrase:l}=e("yoast-seo/editor");return{keyphrase:t(),countryCode:s(),requestLimitReached:r(),response:a(),isSuccess:n(),isPending:o(),requestHasData:i(),lastRequestKeyphrase:l()}})),(0,n.withDispatch)((e=>{const{setSEMrushChangeCountry:t,setSEMrushNewRequest:s,setSEMrushRequestSucceeded:r,setSEMrushRequestFailed:a,setSEMrushSetRequestLimitReached:n,setSEMrushNoResultsFound:o}=e("yoast-seo/editor");return{setCountry:e=>{t(e)},newRequest:(e,t)=>{s(e,t)},setRequestSucceeded:e=>{r(e)},setRequestFailed:e=>{a(e)},setRequestLimitReached:()=>{n()},setNoResultsFound:()=>{o()}}}))])(sn),an=(0,l.__)("Check your text on even more SEO criteria and get an enhanced keyphrase analysis, making it easier to optimize your content.","wordpress-seo"),nn=e=>{const{locationContext:s}=(0,p.useRootContext)(),r=(0,Fs.addQueryArgs)(wpseoAdminL10n[e.buyLink],{context:s});return(0,t.createElement)(rr,{title:(0,l.__)("Get more help with writing content that ranks","wordpress-seo"),description:e.description,benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,l.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Ys(),upsellButtonText:(0,l.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,l.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:r,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,l.__)("1 year of premium support and updates included!","wordpress-seo")})};nn.propTypes={buyLink:y().string.isRequired,description:y().string},nn.defaultProps={description:an};const on=nn,ln=({location:e})=>{const[s,r]=(0,i.useState)(!1),a=(0,i.useCallback)((()=>r(!1)),[]),n=(0,i.useCallback)((()=>r(!0)),[]),o=(0,T.useSvgAria)();return(0,t.createElement)(i.Fragment,null,s&&(0,t.createElement)(X,{title:(0,l.__)("Unlock Premium SEO analysis","wordpress-seo"),onRequestClose:a,additionalClassName:"",className:`${G} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,id:"yoast-premium-seo-analysis-modal",shouldCloseOnClickOutside:!0},(0,t.createElement)(z,null,(0,t.createElement)(on,{buyLink:`shortlinks.upsell.${e}.premium_seo_analysis_button`}))),"sidebar"===e&&(0,t.createElement)(re,{id:"yoast-premium-seo-analysis-modal-open-button",title:(0,l.__)("Premium SEO analysis","wordpress-seo"),prefixIcon:{icon:"seo-score-none",color:C.colors.$color_grey},onClick:n},(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(T.Badge,{size:"small",variant:"upsell"},(0,t.createElement)(Vs,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...o})))),"metabox"===e&&(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(V,{id:"yoast-premium-seo-analysis-metabox-modal-open-button",onClick:n},(0,t.createElement)(R.SvgIcon,{icon:"seo-score-none",color:C.colors.$color_grey}),(0,t.createElement)(V.Text,null,(0,l.__)("Premium SEO analysis","wordpress-seo")),(0,t.createElement)(T.Badge,{size:"small",variant:"upsell"},(0,t.createElement)(Vs,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...o}),(0,t.createElement)("span",null,"Premium")))))};ln.propTypes={location:y().string},ln.defaultProps={location:"sidebar"};const cn=ln,dn=e=>(0,t.createElement)(rr,{title:(0,l.__)("Reach a wider audience","wordpress-seo"),description:(0,l.__)("Get help optimizing for up to 5 related keyphrases. This helps you reach a wider audience and get more traffic.","wordpress-seo"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,l.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Ys(),upsellButtonText:(0,l.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,l.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:e.buyLink,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,l.__)("1 year free support and updates included!","wordpress-seo")});dn.propTypes={buyLink:y().string.isRequired};const pn=dn,un=()=>{const[e,,,s,r]=(0,T.useToggleState)(!1),a=(0,i.useContext)(p.LocationContext),{locationContext:n}=(0,p.useRootContext)(),o=(0,T.useSvgAria)(),c=wpseoAdminL10n["sidebar"===a.toLowerCase()?"shortlinks.upsell.sidebar.additional_button":"shortlinks.upsell.metabox.additional_button"];return(0,t.createElement)(t.Fragment,null,e&&(0,t.createElement)(X,{title:(0,l.__)("Add related keyphrases","wordpress-seo"),onRequestClose:r,additionalClassName:"",id:"yoast-additional-keyphrases-modal",className:`${G} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,shouldCloseOnClickOutside:!0},(0,t.createElement)(z,null,(0,t.createElement)(pn,{buyLink:(0,Fs.addQueryArgs)(c,{context:n})}))),"sidebar"===a&&(0,t.createElement)(re,{id:"yoast-additional-keyphrase-modal-open-button",title:(0,l.__)("Add related keyphrase","wordpress-seo"),prefixIcon:{icon:"plus",color:C.colors.$color_grey_medium_dark},onClick:s},(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(T.Badge,{size:"small",variant:"upsell"},(0,t.createElement)(Vs,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...o})))),"metabox"===a&&(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(V,{id:"yoast-additional-keyphrase-metabox-modal-open-button",onClick:s},(0,t.createElement)(R.SvgIcon,{icon:"plus",color:C.colors.$color_grey_medium_dark}),(0,t.createElement)(V.Text,null,(0,l.__)("Add related keyphrase","wordpress-seo")),(0,t.createElement)(T.Badge,{size:"small",variant:"upsell"},(0,t.createElement)(Vs,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...o}),(0,t.createElement)("span",null,"Premium")))))};var mn,hn,gn,yn,fn,wn,bn,En,vn,kn,xn,Sn,Tn,Rn,Cn,In,An,Ln,Pn,Fn,On,Mn,Dn,qn,Nn,Bn,$n,Un,Wn,Kn,Hn,Vn,Yn,jn,zn,Gn,Zn,Xn,Qn,Jn,eo,to,so,ro,ao,no,oo;function io(){return io=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",io({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 448 360"},e),mn||(mn=t.createElement("circle",{cx:226,cy:211,r:149,fill:"#f0ecf0"})),hn||(hn=t.createElement("path",{fill:"#fbd2a6",d:"M173.53 189.38s-35.47-5.3-41.78-11c-9.39-24.93-29.61-48-35.47-66.21-.71-2.24 3.72-11.39 3.53-15.41s-5.34-11.64-5.23-14-.09-15.27-.09-15.27l-4.75-.72s-5.13 6.07-3.56 9.87c-1.73-4.19 4.3 7.93.5 9.35 0 0-6-5.94-11.76-8.27s-19.57-3.65-19.57-3.65L43.19 73l-4.42.6L31 69.7l-2.85 5.12 7.53 5.29L40.86 92l17.19 10.2 10.2 10.56 9.86 3.56s26.49 79.67 45 92c17 11.33 37.23 15.92 37.23 15.92z"})),gn||(gn=t.createElement("path",{fill:"#a4286a",d:"M270.52 345.13c2.76-14.59 15.94-35.73 30.24-54.58 16.22-21.39 14-79.66-33.19-91.46-17.3-4.32-52.25-1-59.85-3.41C186.54 189 170 187 168 190.17c-5 10.51-7.73 27.81-5.51 36.26 1.18 4.73 3.54 5.91 20.49 13.4-5.12 15-16.35 26.3-22.86 37s7.88 27.2 7.1 33.51c-.48 3.8-4.26 21.13-7.18 34.25a149.47 149.47 0 0 0 110.3 8.66 25.66 25.66 0 0 1 .18-8.12z"})),yn||(yn=t.createElement("path",{fill:"#9a5815",d:"M206.76 66.43c-5 14.4-1.42 25.67-3.93 40.74-10 60.34-24.08 43.92-31.44 93.6 7.24-14.19 14.32-15.82 20.63-23.11-.83 3.09-10.25 13.75-8.05 34.81 9.85-8.51 6.35-8.75 11.86-8.54.36 3.25 3.53 3.22-3.59 10.53 2.52.69 17.42-14.32 20.16-12.66s0 5.72-6 7.76c2.15 2.2 30.47-3.87 43.81-14.71 4.93-4 10-13.16 13.38-18.2 7.17-10.62 12.38-24.77 17.71-36.6 8.94-19.87 15.09-39.34 16.11-61.31.53-10.44-3.41-18.44-4.41-28.86-2.57-27.8-67.63-37.26-86.24 16.55z"})),fn||(fn=t.createElement("path",{fill:"#efb17c",d:"M277.74 179.06c.62-.79 1.24-1.59 1.84-2.39-.85 2.59-1.52 3.73-1.84 2.39z"})),wn||(wn=t.createElement("path",{fill:"#fbd2a6",d:"M216.1 206.72c3.69-5.42 8.28-3.35 15.57-8.28 3.76-3.06 1.57-9.46 1.77-11.82 18.25 4.56 37.38-1.18 49.07-16 .62 5.16-2.77 22.27-.2 27 4.73 8.67 13.4 18.92 13.4 18.92-35.47-2.76-63.45 39-89.86 44.54 5.52-28.74-2.36-35.84 10.25-54.36z"})),bn||(bn=t.createElement("path",{fill:"#f6b488",d:"m235.21 167.9 53.21-25.23s-3.65 24-6.5 32.72c-64.05 62.66-46.47-7.33-46.71-7.49z"})),En||(En=t.createElement("path",{fill:"#fbd2a6",d:"M226.86 50.64C215 59.31 206.37 93.21 204 95.57c-19.46 19.47-3.59 41.39-3.94 51.24-.2 5.52-4.14 25.42 5.72 29.36 22.22 8.89 60-3.48 67.19-12.61 13.28-16.75 40.89-94.78 17.74-108.19-7.92-4.58-42.78-20.18-63.85-4.73z"})),vn||(vn=t.createElement("path",{fill:"#e5766c",d:"M243.69 143.66c-10.7-6.16-8.56-6.73-19.76-12.71-3.86-2.07-3.94.64-6.32 0-2.91-.79-1.39-2.74-5.37-3.48-6.52-1.21-3.67 3.63-3.15 6 1.32 6.15-8.17 17.3 3.26 21.42 12.65 4.55 21.38-9.41 31.34-11.23z"})),kn||(kn=t.createElement("path",{fill:"#fff",d:"M240.68 143.9c-11.49-5.53-11.65-8.17-24.64-11.69-8.6-2.32-5.53 1-5.69 4.42-.2 4.16-1.26 9.87 4.9 12.66 9 4.09 18.16-6.02 25.43-5.39zm.7-40.9c-.16 1.26-.06 4.9 5.46 8.25 11.43-4.73 16.36-2.56 17-3.33 1.48-1.76-2-8.87-7.88-9.85-5.58-.94-14.14 1.24-14.58 4.93z"})),xn||(xn=t.createElement("path",{fill:"#000001",d:"M263.53 108.19c-4.32-4.33-6.85-6.24-12.26-8.21-2.77-1-6.18.18-8.65 1.67a3.65 3.65 0 0 0-1.24 1.23h-.12a3.73 3.73 0 0 1 1-1.52 12.53 12.53 0 0 1 11.93-3c4.73 1 9.43 4.63 9.42 9.82z"})),Sn||(Sn=t.createElement("circle",{cx:254.13,cy:104.05,r:4.19,fill:"#000001"})),Tn||(Tn=t.createElement("path",{fill:"#fff",d:"M225.26 99.22c-.29 1-6.6 3.45-10.92 1.48-1.15-3.24-5-6.43-5.25-6.71-.5-2.86 5.55-8 10.06-6.3a10.21 10.21 0 0 1 6.11 11.53z"})),Rn||(Rn=t.createElement("path",{fill:"#000001",d:"M209.29 94.21c-.19-2.34 1.84-4.1 3.65-5.2 7-3.87 13.18 3 12.43 10h-.12c-.14-4-2.38-8.44-6.47-9.11a3.19 3.19 0 0 0-2.42.31c-1.37.85-2.38 2-3.89 2.56-1 .45-1.92.42-3 1.4h-.22z"})),Cn||(Cn=t.createElement("circle",{cx:219.55,cy:95.28,r:4,fill:"#000001"})),In||(In=t.createElement("path",{fill:"#efb17c",d:"M218.66 120.27a27.32 27.32 0 0 0 4.54 3.45c-2.29-.72-4.28-.69-6.32-2.27-2.53-2-3.39-5.16-.73-7.72 10.24-9.82 12.56-13.82 14.77-24.42-1 12.37-6 17.77-10.63 23.18-2.53 2.97-4.68 5.06-1.63 7.78z"})),An||(An=t.createElement("path",{fill:"#a57c52",d:"M231.22 69.91c-.67-3.41-8.78-2.83-11.06-1.93-3.48 1.39-6.08 5.22-7.13 8.53 2.9-4.3 6.74-8.12 12.46-6 1.16.42 3.18 2.35 4.48 1.85s1.03-2.2 1.25-2.45zm32.16 8.56c-2.75-1.66-12.24-5.08-12.18.82 2.56.24 5-.19 7.64.95 11.22 4.76 12.77 17.61 12.85 17.86.2-.53.1 1.26.23.7-.02.2.95-12.12-8.54-20.33z"})),Ln||(Ln=t.createElement("path",{fill:"#fbd2a6",d:"M53.43 250.73c6.29 0-.6-.17 7.34 0 1.89.05-2.38-.7 0-.69 4.54-4.2 12.48-.74 20.6-2.45 4.55.35 3.93 1.35 5.59 4.19 4.89 8.38 4.78 14.21 14 19.56 16.42 8.38 66 12.92 88.49 18.86 5.52.83 42.64-20.15 61-23.75 6.51 10.74 11.46 28.68 8.39 34.93-6.54 13.3-57.07 25.4-75.91 25.15C156.47 326.18 94 294 92.2 293c-.94-.57.7-.7-7.68 0s-10.15.72-17.47-1.4c-3-.87-4.61-1.33-6.33-3.54-2 .22-3.39.2-4.78-1-3.15-2.74-4.84-6.61-2.73-10.06h-.12c-3.35-2.48-6.54-7.69-3.08-11.72 1-1.18 6.06-1.94 7.77-2.28-1.58-.29-6.37.19-7.49-.72-3.06-2.5-4.96-11.55 3.14-11.55z"})),Pn||(Pn=t.createElement("path",{fill:"#a4286a",d:"M303.22 237.52c-9.87-11.88-41.59 8.19-47.8 12.34s-14.89 17.95-14.89 17.95c6 9.43 8.36 31 5.65 46.34l30.51-3s18-15.62 22.59-28.7 6.3-42.54 6.3-42.54"})),Fn||(Fn=t.createElement("path",{fill:"#cb9833",d:"M278.63 31.67c-6.08 0-22.91 4.07-22.93 12.91 0 11 47.9 38.38 16.14 85.85 10.21-.79 10.79-8.12 14.92-14.93-3.66 77-49.38 93.58-40.51 142.25 7.68-25.81 20.3-11.62 38.13-33.84 3.45 4.88 9 18.28-9.46 33.78 50-31.26 57.31-56.6 51.92-95C319.93 113.53 348.7 42 278.63 31.67z"})),On||(On=t.createElement("path",{fill:"#fbd2a6",d:"M283.64 126.83c-2.42 9.67-8 15.76-1.48 16.46A21.26 21.26 0 0 0 302 132.6c5.17-8.52 3.93-16.44-2.46-18s-13.48 2.56-15.9 12.23z"})),Mn||(Mn=t.createElement("path",{fill:"#efb17c",d:"M38 73.45c1.92 2 4.25 9.21 6.32 10.91 2.25 1.85 5.71 2.12 8.1 4.45 3.66-2 6-8.72 10-9.31-2.59 1.31-4.42 3.5-6.93 4.88-1.42.8-3 1.31-4.38 2.25-2.16-1.46-4.27-1.77-6.26-3.38-2.52-2.02-5.31-8-6.85-9.8z"})),Dn||(Dn=t.createElement("path",{fill:"#efb17c",d:"M39 74.4c4.83 1.1 12.52 6.44 15.89 10-3.22-1.34-14.73-6.15-15.89-10zm.62-1.5c6.71-.79 18 1.54 23.29 5.9-3.85-.2-5.42-1.48-9-2.94-4.08-1.69-8.83-2.03-14.29-2.96zm46.43 14.58c-3.72-1.32-10.52-1.13-13.22 3.52 2-1.16 1.84-2.11 4.18-1.72-3.81-4.15 8.16-.74 11.6-.24m-2.78 13.15c.56-3.29-8-7.81-10.58-9.17-6.25-3.29-12.16 1.36-19.33-4.53 5.94 6.1 14.23 2.5 19.55 5.76 3.06 1.88 8.65 6.09 9.35 9.38-.23-.4 1.29-1.44 1.01-1.44z"})),qn||(qn=t.createElement("circle",{cx:38.13,cy:30.03,r:3.14,fill:"#b89ac8"})),Nn||(Nn=t.createElement("circle",{cx:60.26,cy:39.96,r:3.14,fill:"#e31e0c"})),Bn||(Bn=t.createElement("circle",{cx:50.29,cy:25.63,r:3.14,fill:"#3baa45"})),$n||($n=t.createElement("circle",{cx:22.19,cy:19.21,r:3.14,fill:"#2ca9e1"})),Un||(Un=t.createElement("circle",{cx:22.19,cy:30.03,r:3.14,fill:"#e31e0c"})),Wn||(Wn=t.createElement("circle",{cx:26.86,cy:8.28,r:3.14,fill:"#3baa45"})),Kn||(Kn=t.createElement("circle",{cx:49.32,cy:39.99,r:3.14,fill:"#e31e0c"})),Hn||(Hn=t.createElement("circle",{cx:63.86,cy:59.52,r:3.14,fill:"#f8ad39"})),Vn||(Vn=t.createElement("circle",{cx:50.88,cy:50.72,r:3.14,fill:"#3baa45"})),Yn||(Yn=t.createElement("circle",{cx:63.47,cy:76.17,r:3.14,fill:"#e31e0c"})),jn||(jn=t.createElement("circle",{cx:38.34,cy:14.83,r:3.14,fill:"#2ca9e1"})),zn||(zn=t.createElement("circle",{cx:44.44,cy:5.92,r:3.14,fill:"#f8ad39"})),Gn||(Gn=t.createElement("circle",{cx:57.42,cy:10.24,r:3.14,fill:"#e31e0c"})),Zn||(Zn=t.createElement("circle",{cx:66.81,cy:12.4,r:3.14,fill:"#2ca9e1"})),Xn||(Xn=t.createElement("circle",{cx:77.95,cy:5.14,r:3.14,fill:"#b89ac8"})),Qn||(Qn=t.createElement("circle",{cx:77.95,cy:30.34,r:3.14,fill:"#e31e0c"})),Jn||(Jn=t.createElement("circle",{cx:80.97,cy:16.55,r:3.14,fill:"#f8ad39"})),eo||(eo=t.createElement("circle",{cx:62.96,cy:27.27,r:3.14,fill:"#3baa45"})),to||(to=t.createElement("circle",{cx:75.36,cy:48.67,r:3.14,fill:"#2ca9e1"})),so||(so=t.createElement("circle",{cx:76.11,cy:65.31,r:3.14,fill:"#3baa45"})),ro||(ro=t.createElement("path",{fill:"#71b026",d:"M78.58 178.43C54.36 167.26 32 198.93 5 198.93c19.56 20.49 63.53 1.52 69 15.5 1.48-14.01 4.11-30.9 4.58-36z"})),ao||(ao=t.createElement("path",{fill:"#074a67",d:"M67.75 251.08c0-4.65 10.13-72.65 10.13-72.65h2.8l-9.09 72.3z"})),no||(no=t.createElement("ellipse",{cx:255.38,cy:103.18,fill:"#fff",rx:1.84,ry:1.77})),oo||(oo=t.createElement("ellipse",{cx:221.24,cy:94.75,fill:"#fff",rx:1.84,ry:1.77}))),co=(0,B.compose)([(0,n.withSelect)(((e,t)=>{const{isAlertDismissed:s}=e(t.store||"yoast-seo/editor");return{isAlertDismissed:s(t.alertKey)}})),(0,n.withDispatch)(((e,t)=>{const{dismissAlert:s}=e(t.store||"yoast-seo/editor");return{onDismissed:()=>s(t.alertKey)}}))]),po=({children:e,id:s,hasIcon:r=!0,title:a,image:n=null,isAlertDismissed:o,onDismissed:i})=>o?null:(0,t.createElement)("div",{id:s,className:"notice-yoast yoast is-dismissible"},(0,t.createElement)("div",{className:"notice-yoast__container"},(0,t.createElement)("div",null,(0,t.createElement)("div",{className:"notice-yoast__header"},r&&(0,t.createElement)("span",{className:"yoast-icon"}),(0,t.createElement)("h2",{className:"notice-yoast__header-heading"},a)),(0,t.createElement)("p",null,e)),n&&(0,t.createElement)(n,{height:"60"})),(0,t.createElement)("button",{type:"button",className:"notice-dismiss",onClick:i},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,l.__)("Dismiss this notice.","wordpress-seo"))));po.propTypes={children:y().node.isRequired,id:y().string.isRequired,hasIcon:y().bool,title:y().any.isRequired,image:y().elementType,isAlertDismissed:y().bool.isRequired,onDismissed:y().func.isRequired};const uo=co(po),mo=({store:e="yoast-seo/editor",image:s=null,title:r,promoId:a,alertKey:o,children:i,...l})=>(0,n.select)(e).isPromotionActive(a)&&(0,t.createElement)(uo,{alertKey:o,store:e,id:o,title:r,image:s,...l},i);mo.propTypes={store:y().string,image:y().elementType,title:y().any.isRequired,promoId:y().string.isRequired,alertKey:y().string.isRequired,children:y().node};const ho=({store:e="yoast-seo/editor",location:s="sidebar",...r})=>{const a=(0,n.useSelect)((t=>t(e).getIsPremium()),[e]),o=(0,n.useSelect)((t=>t(e).selectLinkParams()),[e]),c="sidebar"===s?(0,l.sprintf)(/* translators: %1$s expands to YOAST SEO PREMIUM */ +(0,l.__)("BLACK FRIDAY SALE: %1$s","wordpress-seo"),"YOAST SEO PREMIUM"):(0,i.createInterpolateElement)((0,l.sprintf)(/* translators: %1$s expands to YOAST SEO PREMIUM, %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,l.__)("BLACK FRIDAY SALE: %1$s %2$sBuy now!%3$s","wordpress-seo"),"YOAST SEO PREMIUM","",""),{a:(0,t.createElement)("a",{href:(0,Fs.addQueryArgs)("https://yoa.st/black-friday-sale",o),target:"_blank",rel:"noreferrer"})});return a?null:(0,t.createElement)(mo,{id:`black-friday-2023-promotion-${s}`,promoId:"black-friday-2023-promotion",alertKey:"black-friday-2023-promotion",store:e,title:c,image:Image,...r},(0,t.createElement)("span",{className:"yoast-bf-sale-badge"},(0,l.__)("30% OFF!","wordpress-seo")," "),"sidebar"===s&&(0,t.createElement)("a",{className:"yst-block yst--mb-[1em]",href:(0,Fs.addQueryArgs)("https://yoa.st/black-friday-sale",o),target:"_blank",rel:"noreferrer"},(0,l.__)("Buy now!","wordpress-seo")))};ho.propTypes={store:y().string,location:y().oneOf(["sidebar","metabox"])};const go=()=>window.wpseoScriptData&&"1"===window.wpseoScriptData.isWooCommerceActive,yo=e=>s=>!(()=>{var e,t;const s=(0,n.select)("yoast-seo/editor").getIsPremium(),r=(0,n.select)("yoast-seo/editor").getWarningMessage();return(s&&null!==(e=null===(t=(0,n.select)("yoast-seo-premium/editor"))||void 0===t?void 0:t.getMetaboxWarning())&&void 0!==e?e:[]).length>0||r.length>0})()&&(0,t.createElement)(e,{...s}),fo=yo((()=>{const e=(0,n.useSelect)((e=>e("yoast-seo/editor").selectLinkParams()),[]),s=(0,l.sprintf)(/* translators: %1$s expands to 'WooCommerce'. */ +(0,l.__)("Is your %1$s store ready for Black Friday?","wordpress-seo"),"WooCommerce");return(0,t.createElement)(mo,{id:"black-friday-2023-product-editor-checklist",alertKey:"black-friday-2023-product-editor-checklist",promoId:"black-friday-2023-checklist",store:"yoast-seo/editor",title:s,image:lo},(0,i.createInterpolateElement)((0,l.sprintf)(/* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */ +(0,l.__)("The Yoast %1$sultimate Black Friday checklist%2$s helps you prepare in time, so you can boost your results during this sale.","wordpress-seo"),"",""),{strong:(0,t.createElement)("strong",null)})," ",(0,t.createElement)("a",{href:(0,Fs.addQueryArgs)("https://yoa.st/black-friday-checklist",e),target:"_blank",rel:"noreferrer"},(0,l.__)("Get the checklist and start optimizing now!","wordpress-seo")))})),wo=yo(ho);function bo({settings:e}){const s=(0,n.useSelect)((e=>e("yoast-seo/editor").getIsTerm()),[]),r=(0,n.useSelect)((e=>e("yoast-seo/editor").getIsProduct()),[])&&go();return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(k.Fill,{name:"YoastMetabox"},(0,t.createElement)(or,{key:"warning",renderPriority:1},(0,t.createElement)(ms,null)),(0,t.createElement)(or,{key:"time-constrained-notification",renderPriority:2},r&&(0,t.createElement)(fo,null),(0,t.createElement)(wo,{image:null,hasIcon:!1,location:"metabox"})),e.isKeywordAnalysisActive&&(0,t.createElement)(or,{key:"keyword-input",renderPriority:8},(0,t.createElement)(Yt.KeywordInput,{isSEMrushIntegrationActive:e.isSEMrushIntegrationActive}),!window.wpseoScriptData.metabox.isPremium&&(0,t.createElement)(k.Fill,{name:"YoastRelatedKeyphrases"},(0,t.createElement)(rn,null))),(0,t.createElement)(or,{key:"search-appearance",renderPriority:9},(0,t.createElement)(ys,{id:"yoast-snippet-editor-metabox",title:(0,l.__)("Search appearance","wordpress-seo"),initialIsOpen:!0},(0,t.createElement)(us,{hasPaperStyle:!1}))),e.isContentAnalysisActive&&(0,t.createElement)(or,{key:"readability-analysis",renderPriority:10},(0,t.createElement)(Yt.ReadabilityAnalysis,{shouldUpsell:e.shouldUpsell})),e.isKeywordAnalysisActive&&(0,t.createElement)(or,{key:"seo-analysis",renderPriority:20},(0,t.createElement)(i.Fragment,null,(0,t.createElement)(Yt.SeoAnalysis,{shouldUpsell:e.shouldUpsell,shouldUpsellWordFormRecognition:e.isWordFormRecognitionActive}),e.shouldUpsell&&(0,t.createElement)(cn,{location:"metabox"}))),e.isInclusiveLanguageAnalysisActive&&(0,t.createElement)(or,{key:"inclusive-language-analysis",renderPriority:21},(0,t.createElement)(Yt.InclusiveLanguageAnalysis,null)),e.isKeywordAnalysisActive&&(0,t.createElement)(or,{key:"additional-keywords-upsell",renderPriority:22},e.shouldUpsell&&(0,t.createElement)(un,null)),e.isKeywordAnalysisActive&&e.isWincherIntegrationActive&&(0,t.createElement)(or,{key:"wincher-seo-performance",renderPriority:23},(0,t.createElement)(Vt,{location:"metabox"})),e.shouldUpsell&&!s&&(0,t.createElement)(or,{key:"internal-linking-suggestions-upsell",renderPriority:25},(0,t.createElement)(ar,null)),e.isCornerstoneActive&&(0,t.createElement)(or,{key:"cornerstone",renderPriority:30},(0,t.createElement)(zt,null)),e.displayAdvancedTab&&(0,t.createElement)(or,{key:"advanced",renderPriority:40},(0,t.createElement)(ys,{id:"collapsible-advanced-settings",title:(0,l.__)("Advanced","wordpress-seo")},(0,t.createElement)(hr,null))),e.displaySchemaSettings&&(0,t.createElement)(or,{key:"schema",renderPriority:50},(0,t.createElement)($a,null)),(0,t.createElement)(or,{key:"social",renderPriority:-1},(0,t.createElement)(Ra,{target:"wpseo-section-social"})),e.isInsightsEnabled&&(0,t.createElement)(or,{key:"insights",renderPriority:52},(0,t.createElement)(Hs,{location:"metabox"}))))}bo.propTypes={settings:y().object.isRequired};const Eo=(0,B.compose)([(0,n.withSelect)(((e,t)=>{const{getPreferences:s}=e("yoast-seo/editor");return{settings:s(),store:t.store}}))])(bo);function vo({target:e,store:s,theme:r}){return(0,t.createElement)(L,{target:e},(0,t.createElement)(N,{store:s,theme:r}),(0,t.createElement)(Eo,{store:s,theme:r}))}vo.propTypes={target:y().string.isRequired,store:y().object,theme:y().object};const ko=({error:e})=>{const s=(0,i.useCallback)((()=>{var e,t;return null===(e=window)||void 0===e||null===(t=e.location)||void 0===t?void 0:t.reload()}),[]),r=(0,n.useSelect)((e=>e("yoast-seo/editor").selectLink("https://yoa.st/sidebar-error-support")),[]),a=(0,n.useSelect)((e=>e("yoast-seo/editor").getPreference("isRtl",!1)),[]);return(0,t.createElement)(T.Root,{context:{isRtl:a}},(0,t.createElement)(D,{error:e},(0,t.createElement)(D.VerticalButtons,{supportLink:r,handleRefreshClick:s})))};function _o({theme:e}){return(0,t.createElement)(S,{theme:e,location:"sidebar"},(0,t.createElement)(T.ErrorBoundary,{FallbackComponent:ko},(0,t.createElement)(k.Slot,{name:"YoastSidebar"},(e=>_(e)))))}function xo({score:e,label:s,scoreValue:r}){return(0,t.createElement)("div",{className:"yoast-analysis-check"},(0,t.createElement)(R.SvgIcon,{...A(e)}),(0,t.createElement)("span",null," ",s," ",r&&(0,t.createElement)("strong",null,r)))}function So({checklist:e,onClick:s}){const r=e.every((e=>"good"===e.score));return(0,t.createElement)(i.Fragment,null,e.map((e=>(0,t.createElement)(xo,{key:e.label,...e}))),(0,t.createElement)("br",null),!r&&(0,t.createElement)(R.Button,{onClick:s},(0,l.__)("Improve your post with Yoast SEO","wordpress-seo")))}function To(e){return(0,m.isNil)(e)||(e/=10),function(e){switch(e){case"feedback":return{className:"na",screenReaderText:(0,l.__)("Feedback","wordpress-seo"),screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""};case"bad":return{className:"bad",screenReaderText:(0,l.__)("Needs improvement","wordpress-seo"),screenReaderReadabilityText:(0,l.__)("Needs improvement","wordpress-seo"),screenReaderInclusiveLanguageText:(0,l.__)("Needs improvement","wordpress-seo")};case"ok":return{className:"ok",screenReaderText:(0,l.__)("OK SEO score","wordpress-seo"),screenReaderReadabilityText:(0,l.__)("OK","wordpress-seo"),screenReaderInclusiveLanguageText:(0,l.__)("Potentially non-inclusive","wordpress-seo")};case"good":return{className:"good",screenReaderText:(0,l.__)("Good SEO score","wordpress-seo"),screenReaderReadabilityText:(0,l.__)("Good","wordpress-seo"),screenReaderInclusiveLanguageText:(0,l.__)("Good","wordpress-seo")};default:return{className:"loading",screenReaderText:"",screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""}}}(I.interpreters.scoreToRating(e))}function Ro(e,t){const{isKeywordAnalysisActive:s}=t.getPreferences();if(s){const s=To(t.getReadabilityResults().overallScore);e.push({label:(0,l.__)("Readability analysis:","wordpress-seo"),score:s.className,scoreValue:s.screenReaderReadabilityText})}}function Co(e,t){const{isContentAnalysisActive:s}=t.getPreferences();if(s){const s=To(t.getResultsForFocusKeyword().overallScore),r=h().isPremium;e.push({label:r?(0,l.__)("Premium SEO analysis:","wordpress-seo"):(0,l.__)("SEO analysis:","wordpress-seo"),score:s.className,scoreValue:s.screenReaderReadabilityText})}}function Io(e,t){const{isInclusiveLanguageAnalysisActive:s}=t.getPreferences();if(s){const s=To(t.getInclusiveLanguageResults().overallScore);e.push({label:(0,l.__)("Inclusive language:","wordpress-seo"),score:s.className,scoreValue:s.screenReaderInclusiveLanguageText})}}ko.propTypes={error:y().object.isRequired},xo.propTypes={score:g.string.isRequired,label:g.string.isRequired,scoreValue:g.string},xo.defaultProps={scoreValue:""},So.propTypes={checklist:y().array.isRequired,onClick:y().func.isRequired};const Ao=(0,B.compose)([(0,n.withSelect)((function(e){const t=e("yoast-seo/editor"),s=[];return Ro(s,t),Co(s,t),Io(s,t),s.push(...Object.values(t.getChecklistItems())),{checklist:s}})),(0,n.withDispatch)((function(e){const{openGeneralSidebar:t}=e("core/edit-post");return{onClick:()=>{t("yoast-seo/seo-sidebar")}}}))])(So),Lo=(0,B.compose)([(0,n.withSelect)((e=>{const t=e("yoast-seo/editor"),s=To(t.getResultsForFocusKeyword().overallScore),r=To(t.getReadabilityResults().overallScore),{isKeywordAnalysisActive:a,isContentAnalysisActive:n}=t.getPreferences();let o,i;switch(r.className){case"good":o=C.colors.$color_good;break;case"ok":o=C.colors.$color_ok;break;default:o=C.colors.$color_bad}switch(s.className){case"good":i=C.colors.$color_good;break;case"ok":i=C.colors.$color_ok;break;default:i=C.colors.$color_bad}return{readabilityScoreColor:o,seoScoreColor:i,isKeywordAnalysisActive:a,isContentAnalysisActive:n}}))])(v);var Po;function Fo(){return Fo=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",Fo({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1600 1600"},e),Po||(Po=t.createElement("g",{fill:"none",fillRule:"evenodd"},t.createElement("path",{fill:"#1877f2",d:"M1600 800a800 800 0 1 0-925 790v-559H472V800h203V624c0-201 119-311 302-311 88 0 179 15 179 15v197h-101c-99 0-130 62-130 125v150h222l-36 231H925v559a800 800 0 0 0 675-790"}),t.createElement("path",{fill:"#fff",d:"M1147 800H925V650c0-63 31-125 130-125h101V328s-91-15-179-15c-183 0-302 110-302 311v176H472v231h203v559a806 806 0 0 0 250 0v-559h186z"}))));var Mo;function Do(){return Do=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",Do({xmlns:"http://www.w3.org/2000/svg",fill:"current",viewBox:"0 0 1200 1227"},e),Mo||(Mo=t.createElement("path",{d:"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"})));function No({permalink:e}){const s=encodeURI(e);return(0,t.createElement)(i.Fragment,null,(0,t.createElement)("div",null,(0,l.__)("Share your post!","wordpress-seo")),(0,t.createElement)("ul",{className:"yoast-seo-social-share-buttons"},(0,t.createElement)("li",null,(0,t.createElement)("a",{href:"https://www.facebook.com/sharer/sharer.php?u="+s,target:"_blank",rel:"noopener noreferrer"},(0,t.createElement)(Oo,null),(0,l.__)("Facebook","wordpress-seo"),(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,l.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,t.createElement)("li",null,(0,t.createElement)("a",{href:"https://twitter.com/share?url="+s,target:"_blank",rel:"noopener noreferrer",className:"x-share"},(0,t.createElement)(qo,null),(0,l.__)("X","wordpress-seo"),(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,l.__)("(Opens in a new browser tab)","wordpress-seo"))))))}No.propTypes={permalink:y().string.isRequired};const Bo=(0,B.compose)([(0,n.withSelect)((e=>({permalink:e("core/editor").getPermalink()})))])(No);function $o({checklist:e,onClick:s}){let r;return r=e.every((e=>"good"===e.score))?(0,l.__)("We've analyzed your post. Everything looks good. Well done!","wordpress-seo"):(0,l.__)("We've analyzed your post. There is still room for improvement!","wordpress-seo"),(0,t.createElement)(i.Fragment,null,(0,t.createElement)("p",null,r),(0,t.createElement)(So,{checklist:e,onClick:s}))}$o.propTypes={checklist:y().array.isRequired,onClick:y().func.isRequired};const Uo=(0,B.compose)([(0,n.withSelect)((function(e){const t=e("yoast-seo/editor"),s=[];return function(e,t){t.getFocusKeyphrase()||e.push({label:(0,l.__)("No focus keyword was entered","wordpress-seo"),score:"bad"})}(s,t),Ro(s,t),Co(s,t),Io(s,t),s.push(...Object.values(t.getChecklistItems())),{checklist:s}})),(0,n.withDispatch)((function(e){const{closePublishSidebar:t,openGeneralSidebar:s}=e("core/edit-post");return{onClick:()=>{t(),s("yoast-seo/seo-sidebar")}}}))])($o),Wo=({store:e="yoast-seo/editor",...s})=>{const r=(0,n.useSelect)((t=>t(e).selectLinkParams()),[e]),a=(0,i.createInterpolateElement)((0,l.sprintf)(/* translators: %1$s expands to Yoast, %2$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */ +(0,l.__)("The %1$s %2$sultimate Black Friday checklist%3$s helps you prepare in time, so you can boost your results during this sale.","wordpress-seo"),"Yoast","",""),{strong:(0,t.createElement)("strong",null)});return(0,t.createElement)(mo,{id:"black-friday-2023-sidebar-checklist",promoId:"black-friday-2023-checklist",alertKey:"black-friday-2023-sidebar-checklist",store:e,title:(0,l.__)("Is your WooCommerce store ready for Black Friday?","wordpress-seo"),...s},a," ",(0,t.createElement)("a",{href:(0,Fs.addQueryArgs)("https://yoa.st/black-friday-checklist",r),target:"_blank",rel:"noreferrer"},(0,l.__)("Get the checklist and start optimizing now!","wordpress-seo")))};Wo.propTypes={store:y().string};const Ko="trustpilot-review-notification",Ho="yoast-seo/editor",Vo=()=>{const e=(0,n.useSelect)((e=>e(Ho).getIsPremium()),[]),t=(0,n.useSelect)((e=>e(Ho).isAlertDismissed(Ko)),[]),{overallScore:s}=(0,n.useSelect)((e=>e(Ho).getResultsForFocusKeyword()),[]),{dismissAlert:r}=(0,n.useDispatch)(Ho),a=(0,i.useCallback)((()=>r(Ko)),[r]),[o,l]=(0,i.useState)(!1);return(0,i.useEffect)((()=>{var e;"good"===(null===(e=To(s))||void 0===e?void 0:e.className)&&l(!0)}),[s]),{shouldShow:!e&&!t&&o,dismiss:a}},Yo=(0,Y.makeOutboundLink)(),jo=()=>{const{shouldShow:e,dismiss:s}=Vo(),{locationContext:r}=(0,p.useRootContext)(),a=(0,n.useSelect)((e=>e(Ho).selectLink("https://yoa.st/trustpilot-review",{context:r})),[r]);return(0,t.createElement)(po,{alertKey:Ko,store:Ho,id:Ko,title:(0,l.__)("Show Yoast SEO some love!","wordpress-seo"),hasIcon:!1,isAlertDismissed:!e,onDismissed:s},(0,l.__)("Happy with the plugin?","wordpress-seo")," ",(0,t.createElement)(Yo,{href:a,rel:"noopener noreferrer"},(0,l.__)("Leave a quick review","wordpress-seo")),".")},zo=({store:e="yoast-seo/editor",image:s=lo,url:r,...a})=>(0,n.useSelect)((t=>t(e).getIsPremium()))?null:(0,t.createElement)(uo,{alertKey:"webinar-promo-notification",store:e,id:"webinar-promo-notification",title:(0,l.__)("Join our FREE webinar for SEO success","wordpress-seo"),image:s,url:r,...a},(0,l.__)("Feeling lost when it comes to optimizing your site for the search engines? Join our FREE webinar to gain the confidence that you need in order to start optimizing like a pro! You'll obtain the knowledge and tools to start effectively implementing SEO.","wordpress-seo")," ",(0,t.createElement)("a",{href:r,target:"_blank",rel:"noreferrer"},(0,l.__)("Sign up today!","wordpress-seo")));zo.propTypes={store:y().string,image:y().elementType,url:y().string.isRequired};const Go=zo,Zo=(e="yoast-seo/editor")=>{const t=(0,n.select)(e).isPromotionActive("black-friday-2023-promotion"),s=(0,n.select)(e).isAlertDismissed("black-friday-2023-promotion");return t?s:((e="yoast-seo/editor")=>{const t=(0,n.select)(e).isPromotionActive("black-friday-2023-checklist"),s=(0,n.select)(e).isAlertDismissed("black-friday-2023-sidebar-checklist");return!t||s})(e)},Xo=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{d:"M11 3a1 1 0 10-2 0v1a1 1 0 102 0V3zM15.657 5.757a1 1 0 00-1.414-1.414l-.707.707a1 1 0 001.414 1.414l.707-.707zM18 10a1 1 0 01-1 1h-1a1 1 0 110-2h1a1 1 0 011 1zM5.05 6.464A1 1 0 106.464 5.05l-.707-.707a1 1 0 00-1.414 1.414l.707.707zM5 10a1 1 0 01-1 1H3a1 1 0 110-2h1a1 1 0 011 1zM8 16v-1h4v1a2 2 0 11-4 0zM12 14c.015-.34.208-.646.477-.859a4 4 0 10-4.954 0c.27.213.462.519.476.859h4.002z"}))})),Qo=({id:e,postTypeName:s,children:r,title:a,isOpen:n,close:o,open:c,shouldCloseOnClickOutside:d,showChangesWarning:u,SuffixHeroIcon:m})=>(0,t.createElement)(i.Fragment,null,n&&(0,t.createElement)(p.LocationProvider,{value:"modal"},(0,t.createElement)(X,{title:a,onRequestClose:o,additionalClassName:"yoast-collapsible-modal yoast-post-settings-modal",id:"id",shouldCloseOnClickOutside:d},(0,t.createElement)("div",{className:"yoast-content-container"},(0,t.createElement)("div",{className:"yoast-modal-content"},r)),(0,t.createElement)("div",{className:"yoast-notice-container"},(0,t.createElement)("hr",null),(0,t.createElement)("div",{className:"yoast-button-container"},u&&(0,t.createElement)("p",null,/* Translators: %s translates to the Post Label in singular form */ +(0,l.sprintf)((0,l.__)("Make sure to save your %s for changes to take effect","wordpress-seo"),s)),(0,t.createElement)("button",{className:"yoast-button yoast-button--primary yoast-button--post-settings-modal",type:"button",onClick:o},/* Translators: %s translates to the Post Label in singular form */ +(0,l.sprintf)((0,l.__)("Return to your %s","wordpress-seo"),s)))))),(0,t.createElement)(re,{id:e+"-open-button",title:a,SuffixHeroIcon:m,suffixIcon:m?null:{size:"20px",icon:"pencil-square"},onClick:c}));Qo.propTypes={id:y().string.isRequired,postTypeName:y().string.isRequired,children:y().oneOfType([y().node,y().arrayOf(y().node)]).isRequired,title:y().string.isRequired,isOpen:y().bool.isRequired,open:y().func.isRequired,close:y().func.isRequired,shouldCloseOnClickOutside:y().bool,showChangesWarning:y().bool,SuffixHeroIcon:y().object},Qo.defaultProps={shouldCloseOnClickOutside:!0,showChangesWarning:!0};const Jo=Qo,ei=(0,B.compose)([(0,n.withSelect)(((e,t)=>{const{getPostOrPageString:s,getIsModalOpen:r}=e("yoast-seo/editor");return{postTypeName:s(),isOpen:r(t.id)}})),(0,n.withDispatch)(((e,t)=>{const{openEditorModal:s,closeEditorModal:r}=e("yoast-seo/editor");return{open:()=>s(t.id),close:r}}))])(Jo),ti=w()(Xo)` + width: 18px; + height: 18px; + margin: 3px; +`,si=({location:e})=>{const s=(0,n.useSelect)((e=>e("yoast-seo/editor").getIsElementorEditor()),[]),r=(0,n.useSelect)((e=>e("yoast-seo/editor").isFleschReadingEaseAvailable()),[]),a=U();return(0,t.createElement)(ei,{title:(0,l.__)("Insights","wordpress-seo"),id:`yoast-insights-modal-${e}`,shouldCloseOnClickOutside:!s,showChangesWarning:!1,SuffixHeroIcon:(0,t.createElement)(ti,{className:"yst-text-slate-500",...a})},(0,t.createElement)("div",{className:"yoast-insights yoast-modal-content--columns"},(0,t.createElement)(Ds,{location:e}),(0,t.createElement)("div",null,r&&(0,t.createElement)("div",{className:"yoast-insights-row"},(0,t.createElement)(Es,null)),(0,t.createElement)("div",{className:"yoast-insights-row yoast-insights-row--columns"},(0,t.createElement)(fs,null),(0,t.createElement)(qs,null)),(0,hs.isFeatureEnabled)("TEXT_FORMALITY")&&(0,t.createElement)(Ws,{location:e,name:"YoastTextFormalityMetabox"}))))};si.propTypes={location:y().string},si.defaultProps={location:"sidebar"};const ri=si,ai=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z",clipRule:"evenodd"}))}));class ni{constructor(e){this.refresh=e,this.loaded=!1,this.preloadThreshold=3e3,this.plugins={},this.modifications={},this._registerPlugin=this._registerPlugin.bind(this),this._ready=this._ready.bind(this),this._reloaded=this._reloaded.bind(this),this._registerModification=this._registerModification.bind(this),this._registerAssessment=this._registerAssessment.bind(this),this._applyModifications=this._applyModifications.bind(this),setTimeout(this._pollLoadingPlugins.bind(this),1500)}_registerPlugin(e,t){return(0,m.isString)(e)?(0,m.isUndefined)(t)||(0,m.isObject)(t)?!1===this._validateUniqueness(e)?(console.error("Failed to register plugin. Plugin with name "+e+" already exists"),!1):(this.plugins[e]=t,!0):(console.error("Failed to register plugin "+e+". Expected parameters `options` to be a object."),!1):(console.error("Failed to register plugin. Expected parameter `pluginName` to be a string."),!1)}_ready(e){return(0,m.isString)(e)?(0,m.isUndefined)(this.plugins[e])?(console.error("Failed to modify status for plugin "+e+". The plugin was not properly registered."),!1):(this.plugins[e].status="ready",!0):(console.error("Failed to modify status for plugin "+e+". Expected parameter `pluginName` to be a string."),!1)}_reloaded(e){return(0,m.isString)(e)?(0,m.isUndefined)(this.plugins[e])?(console.error("Failed to reload Content Analysis for plugin "+e+". The plugin was not properly registered."),!1):(this.refresh(),!0):(console.error("Failed to reload Content Analysis for "+e+". Expected parameter `pluginName` to be a string."),!1)}_registerModification(e,t,s,r){if(!(0,m.isString)(e))return console.error("Failed to register modification for plugin "+s+". Expected parameter `modification` to be a string."),!1;if(!(0,m.isFunction)(t))return console.error("Failed to register modification for plugin "+s+". Expected parameter `callable` to be a function."),!1;if(!(0,m.isString)(s))return console.error("Failed to register modification for plugin "+s+". Expected parameter `pluginName` to be a string."),!1;if(!1===this._validateOrigin(s))return console.error("Failed to register modification for plugin "+s+". The integration has not finished loading yet."),!1;const a={callable:t,origin:s,priority:(0,m.isNumber)(r)?r:10};return(0,m.isUndefined)(this.modifications[e])&&(this.modifications[e]=[]),this.modifications[e].push(a),!0}_registerAssessment(e,t,s,r){return(0,m.isString)(t)?(0,m.isObject)(s)?(0,m.isString)(r)?(t=r+"-"+t,e.addAssessment(t,s),!0):(console.error("Failed to register assessment for plugin "+r+". Expected parameter `pluginName` to be a string."),!1):(console.error("Failed to register assessment for plugin "+r+". Expected parameter `assessment` to be a function."),!1):(console.error("Failed to register test for plugin "+r+". Expected parameter `name` to be a string."),!1)}_applyModifications(e,t,s){let r=this.modifications[e];return!(0,m.isArray)(r)||r.length<1||(r=this._stripIllegalModifications(r),r.sort(((e,t)=>e.priority-t.priority)),(0,m.forEach)(r,(function(r){const a=r.callable(t,s);typeof a==typeof t?t=a:console.error("Modification with name "+e+" performed by plugin with name "+r.origin+" was ignored because the data that was returned by it was of a different type than the data we had passed it.")}))),t}_pollLoadingPlugins(e){e=(0,m.isUndefined)(e)?0:e,!0===this._allReady()?(this.loaded=!0,this.refresh()):e>=this.preloadThreshold?(this._pollTimeExceeded(),this.loaded=!0,this.refresh()):(e+=50,setTimeout(this._pollLoadingPlugins.bind(this,e),50))}_allReady(){return(0,m.reduce)(this.plugins,(function(e,t){return e&&"ready"===t.status}),!0)}_pollTimeExceeded(){(0,m.forEach)(this.plugins,(function(e,t){(0,m.isUndefined)(e.options)||"ready"===e.options.status||(console.error("Error: Plugin "+t+". did not finish loading in time."),delete this.plugins[t])}))}_stripIllegalModifications(e){return(0,m.forEach)(e,((t,s)=>{!1===this._validateOrigin(t.origin)&&delete e[s]})),e}_validateOrigin(e){return"ready"===this.plugins[e].status}_validateUniqueness(e){return(0,m.isUndefined)(this.plugins[e])}}let oi=null;const ii=()=>{if(null===oi){const e=(0,n.dispatch)("yoast-seo/editor").runAnalysis;oi=window.YoastSEO.app&&window.YoastSEO.app.pluggable?window.YoastSEO.app.pluggable:new ni(e)}return oi},li=(e,t,s)=>ii().loaded?ii()._applyModifications(e,t,s):t,ci={name:"author_first_name",label:"Author first name",placeholder:"%%author_first_name%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.author_first_name","")},regexp:new RegExp("%%author_first_name%%","g")},di={name:"author_last_name",label:"Author last name",placeholder:"%%author_last_name%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.author_last_name","")},regexp:new RegExp("%%author_last_name%%","g")},pi={name:"currentdate",label:"Current date",placeholder:"%%currentdate%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentdate","")},regexp:new RegExp("%%currentdate%%","g")},ui={name:"currentday",label:"Current day",placeholder:"%%currentday%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentday","")},regexp:new RegExp("%%currentday%%","g")},mi={name:"currentmonth",label:"Current month",placeholder:"%%currentmonth%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentmonth","")},regexp:new RegExp("%%currentmonth%%","g")},hi={name:"category",label:"Category",placeholder:"%%category%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.category","")},regexp:new RegExp("%%category%%","g")},gi={name:"category_title",label:"Category Title",placeholder:"%%category_title%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.category_title","")},regexp:new RegExp("%%category_title%%","g")},yi={name:"currentyear",label:"Current year",placeholder:"%%currentyear%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentyear","")},regexp:new RegExp("%%currentyear%%","g")},fi={name:"date",label:"Date",placeholder:"%%date%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.date","")},regexp:new RegExp("%%date%%","g")},wi={name:"excerpt",label:"Excerpt",placeholder:"%%excerpt%%",aliases:[{name:"excerpt_only",label:"Excerpt only",placeholder:"%%excerpt_only%%"}],getReplacement:function(){return(0,n.select)("yoast-seo/editor").getEditorDataExcerptWithFallback()},regexp:new RegExp("%%excerpt%%|%%excerpt_only%%","g")},bi={name:"focuskw",label:"Focus keyphrase",placeholder:"%%focuskw%%",aliases:[],getReplacement:function(){return(0,n.select)("yoast-seo/editor").getFocusKeyphrase()},regexp:new RegExp("%%focuskw%%|%%keyword%%","g")},Ei={name:"id",label:"ID",placeholder:"%%id%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.id","")},regexp:new RegExp("%%id%%","g")},vi={name:"modified",label:"Modified",placeholder:"%%modified%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.modified","")},regexp:new RegExp("%%modified%%","g")},ki={name:"name",label:"Name",placeholder:"%%name%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.name","")},regexp:new RegExp("%%name%%","g")},_i={name:"page",label:"Page",placeholder:"%%page%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.page","")},regexp:new RegExp("%%page%%","g")},xi={name:"pagenumber",label:"Pagenumber",placeholder:"%%pagenumber%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pagenumber","")},regexp:new RegExp("%%pagenumber%%","g")},Si={name:"pagetotal",label:"Pagetotal",placeholder:"%%pagetotal%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pagetotal","")},regexp:new RegExp("%%pagetotal%%","g")},Ti={name:"permalink",label:"Permalink",placeholder:"%%permalink%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.permalink","")},regexp:new RegExp("%%permalink%%","g")},Ri={name:"post_content",label:"Post Content",placeholder:"%%post_content%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_content","")},regexp:new RegExp("%%post_content%%","g")},Ci={name:"post_day",label:"Post Day",placeholder:"%%post_day%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_day","")},regexp:new RegExp("%%post_day%%","g")},Ii={name:"post_month",label:"Post Month",placeholder:"%%post_month%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_month","")},regexp:new RegExp("%%post_month%%","g")},Ai={name:"post_year",label:"Post Year",placeholder:"%%post_year%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_year","")},regexp:new RegExp("%%post_year%%","g")},Li={name:"pt_plural",label:"Post type (plural)",placeholder:"%%pt_plural%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pt_plural","")},regexp:new RegExp("%%pt_plural%%","g")},Pi={name:"pt_single",label:"Post type (singular)",placeholder:"%%pt_single%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pt_single","")},regexp:new RegExp("%%pt_single%%","g")},Fi={name:"primary_category",label:"Primary category",placeholder:"%%primary_category%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.primary_category","")},regexp:new RegExp("%%primary_category%%","g")},Oi={name:"searchphrase",label:"Search phrase",placeholder:"%%searchphrase%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.searchphrase","")},regexp:new RegExp("%%searchphrase%%","g")},Mi={name:"sep",label:"Separator",placeholder:"%%sep%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.sep","")},regexp:new RegExp("%%sep%%(\\s*%%sep%%)*","g")},Di={name:"sitedesc",label:"Tagline",placeholder:"%%sitedesc%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.sitedesc","")},regexp:new RegExp("%%sitedesc%%","g")},qi={name:"sitename",label:"Site title",placeholder:"%%sitename%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.sitename","")},regexp:new RegExp("%%sitename%%","g")},Ni={name:"tag",label:"Tag",placeholder:"%%tag%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.tag","")},regexp:new RegExp("%%tag%%","g")},Bi={name:"term404",label:"Term404",placeholder:"%%term404%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.term404","")},regexp:new RegExp("%%term404%%","g")},$i={name:"term_description",label:"Term description",placeholder:"%%term_description%%",aliases:[{name:"tag_description",label:"Tag description",placeholder:"%%tag_description%%"},{name:"category_description",label:"Category description",placeholder:"%%category_description%%"}],getReplacement:function(){return(0,m.get)(window,"YoastSEO.app.rawData.text","")},regexp:new RegExp("%%term_description%%|%%tag_description%%|%%category_description%%","g")},Ui={name:"term_hierarchy",label:"Term hierarchy",placeholder:"%%term_hierarchy%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.term_hierarchy","")},regexp:new RegExp("%%term_hierarchy%%","g")},Wi={name:"term_title",label:"Term title",placeholder:"%%term_title%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.term_title","")},regexp:new RegExp("%%term_title%%","g")},Ki={name:"title",label:"Title",placeholder:"%%title%%",aliases:[],getReplacement:function(){return(0,n.select)("yoast-seo/editor").getEditorDataTitle()},regexp:new RegExp("%%title%%","g")},Hi={name:"user_description",label:"User description",placeholder:"%%user_description%%",aliases:[],getReplacement:function(){return(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.user_description","")},regexp:new RegExp("%%user_description%%","g")};var Vi={source:"wpseoScriptData.analysis.plugins.replaceVars",scope:[],aliases:[]},Yi=function(e,t,s){this.placeholder=e,this.replacement=t,this.options=(0,m.defaults)(s,Vi)};Yi.prototype.getPlaceholder=function(e){return(e=e||!1)&&this.hasAlias()?this.placeholder+"|"+this.getAliases().join("|"):this.placeholder},Yi.prototype.setSource=function(e){this.options.source=e},Yi.prototype.hasScope=function(){return!(0,m.isEmpty)(this.options.scope)},Yi.prototype.addScope=function(e){this.hasScope()||(this.options.scope=[]),this.options.scope.push(e)},Yi.prototype.inScope=function(e){return!this.hasScope()||(0,m.indexOf)(this.options.scope,e)>-1},Yi.prototype.hasAlias=function(){return!(0,m.isEmpty)(this.options.aliases)},Yi.prototype.addAlias=function(e){this.hasAlias()||(this.options.aliases=[]),this.options.aliases.push(e)},Yi.prototype.getAliases=function(){return this.options.aliases};let ji=null,zi=null;const Gi=()=>{if(null===zi){zi=[];const t=(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.hidden_replace_vars",[]);(null===ji&&(ji=((e="")=>{switch(""===e&&(e=(0,m.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.scope","")),e){case"post":case"page":return["authorFirstName","authorLastName","category","categoryTitle","currentDate","currentDay","currentMonth","currentYear","date","excerpt","id","focusKeyphrase","modified","name","page","primaryCategory","pageNumber","pageTotal","permalink","postContent","postDay","postMonth","postYear","postTypeNamePlural","postTypeNameSingular","searchPhrase","separator","siteDescription","siteName","tag","title","userDescription"]}return[]})().map((t=>null==e?void 0:e[t])).filter(Boolean)),ji).forEach((e=>{const s=t.includes(e.name);zi.push({name:e.name,label:e.label,value:e.placeholder,hidden:s}),e.aliases.forEach((e=>{zi.push({name:e.name,label:e.label,value:e.placeholder,hidden:s})}))}))}return zi},{stripHTMLTags:Zi}=Y.strings,Xi=(e,t)=>{const s=(0,n.select)("yoast-seo/editor").getSnippetEditorTemplates();""===e.title&&(e.title=s.title),""===e.description&&(e.description=s.description);let r=0;return t.shortenedBaseUrl&&"string"==typeof t.shortenedBaseUrl&&(r=t.shortenedBaseUrl.length),e.url=e.url.replace(/\s+/g,"-"),"-"===e.url[e.url.length-1]&&(e.url=e.url.slice(0,-1)),"-"===e.url[r]&&(e.url=e.url.slice(0,r)+e.url.slice(r+1)),{url:e.url,title:Zi(li("data_page_title",e.title)),description:Zi(li("data_meta_desc",e.description)),filteredSEOTitle:Zi(li("data_page_title",e.filteredSEOTitle))}},Qi=({isLoading:e,onLoad:s,location:r,...a})=>((0,i.useEffect)((()=>{setTimeout((()=>{e&&s()}))})),e?null:(0,t.createElement)(Qt,{icon:"eye",hasPaperStyle:a.hasPaperStyle},(0,t.createElement)(Gt.SnippetEditor,{...a,descriptionPlaceholder:(0,l.__)("Please provide a meta description by editing the snippet below.","wordpress-seo"),mapEditorDataToPreview:Xi,showCloseButton:!1,idSuffix:r})));Qi.propTypes={isLoading:y().bool.isRequired,onLoad:y().func.isRequired,hasPaperStyle:y().bool.isRequired,location:y().string.isRequired};const Ji=(0,B.compose)([(0,n.withSelect)((e=>{const{getBaseUrlFromSettings:t,getDateFromSettings:s,getEditorDataImageUrl:r,getFocusKeyphrase:a,getRecommendedReplaceVars:n,getSiteIconUrlFromSettings:o,getSnippetEditorData:i,getSnippetEditorIsLoading:l,getSnippetEditorMode:c,getSnippetEditorWordsToHighlight:d,isCornerstoneContent:p,getContentLocale:u,getSiteName:m}=e("yoast-seo/editor");return{baseUrl:t(),data:i(),date:s(),faviconSrc:o(),isLoading:l(),keyword:a(),mobileImageSrc:r(),mode:c(),recommendedReplacementVariables:n(),replacementVariables:Gi(),wordsToHighlight:d(),isCornerstone:p(),locale:u(),siteName:m()}})),(0,n.withDispatch)((e=>{const{updateData:t,switchMode:s,updateAnalysisData:r,loadSnippetEditorData:a}=e("yoast-seo/editor");return{onChange:(e,r)=>{switch(e){case"mode":s(r);break;case"slug":t({slug:r});break;default:t({[e]:r})}},onChangeAnalysisData:r,onLoad:a}})),jt()])(Qi),el=w()(ai)` + width: 18px; + height: 18px; + margin: 3px; +`,tl=()=>{const e=U(),s=(0,n.useSelect)((e=>e("yoast-seo/editor").getIsElementorEditor()),[]);return(0,t.createElement)(ei,{title:(0,l.__)("Search appearance","wordpress-seo"),id:"yoast-search-appearance-modal",shouldCloseOnClickOutside:!1,SuffixHeroIcon:(0,t.createElement)(el,{className:"yst-text-slate-500",...e})},!0===s&&(0,t.createElement)(Ji,{showCloseButton:!1,hasPaperStyle:!1}),!1===s&&(0,t.createElement)(us,{showCloseButton:!1,hasPaperStyle:!1}))},sl=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{d:"M15 8a3 3 0 10-2.977-2.63l-4.94 2.47a3 3 0 100 4.319l4.94 2.47a3 3 0 10.895-1.789l-4.94-2.47a3.027 3.027 0 000-.74l4.94-2.47C13.456 7.68 14.19 8 15 8z"}))})),rl=w()(R.Collapsible)` + h2 > button { + padding-left: 0; + padding-top: 16px; + + &:hover { + background-color: #f0f0f0; + } + } + + div[class^="collapsible_content"] { + padding: 24px 0; + margin: 0 24px; + border-top: 1px solid rgba(0,0,0,0.2); + } + +`,al=e=>(0,t.createElement)(rl,{hasPadding:!1,hasSeparator:!0,...e}),nl=w()(sl)` + width: 18px; + height: 18px; + margin: 3px; +`,ol=e=>{const{useOpenGraphData:s,useTwitterData:r}=e;if(!s&&!r)return;const a=U();return(0,t.createElement)(ei +/* translators: Social media appearance refers to a preview of how a page will be represented on social media. */,{title:(0,l.__)("Social media appearance","wordpress-seo"),id:"yoast-social-appearance-modal",shouldCloseOnClickOutside:!1,SuffixHeroIcon:(0,t.createElement)(nl,{className:"yst-text-slate-500",...a})},s&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(ka,null,(0,l.__)("Determine how your post should look on social media like Facebook, X, Instagram, WhatsApp, Threads, LinkedIn, Slack, and more.","wordpress-seo")),(0,t.createElement)(ya,null),r&&(0,t.createElement)(va,null,(0,l.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below. If you leave these settings untouched, the 'Social media appearance' settings mentioned above will also be applied for sharing on X.","wordpress-seo"))),s&&r&&(0,t.createElement)(al,{title:(0,l.__)("X appearance","wordpress-seo"),hasSeparator:!0,initialIsOpen:!1},(0,t.createElement)(Ea,null)),!s&&r&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(ka,null,(0,l.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below.","wordpress-seo")),(0,t.createElement)(Ea,null)))};ol.propTypes={useOpenGraphData:y().bool.isRequired,useTwitterData:y().bool.isRequired};const il=ol,ll=e=>{const[s,r]=(0,i.useState)(!1),{prefixIcon:a}=e;return(0,t.createElement)("div",{className:"yoast components-panel__body "+(s?"is-opened":"")},(0,t.createElement)("h2",{className:"components-panel__body-title"},(0,t.createElement)("button",{onClick:function(){r(!s)},className:"components-button components-panel__body-toggle",type:"button",id:e.buttonId},(0,t.createElement)("span",{className:"yoast-icon-span",style:{fill:`${a&&a.color||""}`}},a&&(0,t.createElement)(R.SvgIcon,{icon:a.icon,color:a.color,size:a.size})),(0,t.createElement)("span",{className:"yoast-title-container"},(0,t.createElement)("div",{className:"yoast-title"},e.title),(0,t.createElement)("div",{className:"yoast-subtitle"},e.subTitle)),e.hasBetaBadgeLabel&&(0,t.createElement)(R.BetaBadge,null),(0,t.createElement)("span",{className:"yoast-chevron","aria-hidden":"true"}))),s&&e.children)},cl=ll;function dl({settings:e}){const s=(({webinarIntroUrl:e})=>{const{shouldShow:s}=Vo(),r=(e=>{for(const t of e)if(null!=t&&t.getIsEligible())return t;return null})([{getIsEligible:()=>s,component:jo},{getIsEligible:Zo,component:()=>(0,t.createElement)(Go,{hasIcon:!1,image:null,url:e})},{getIsEligible:go,component:()=>(0,t.createElement)(Wo,{hasIcon:!1})},{getIsEligible:()=>!0,component:()=>(0,t.createElement)(ho,{hasIcon:!1})}]);return(null==r?void 0:r.component)||null})({webinarIntroUrl:(0,m.get)(window,"wpseoScriptData.webinarIntroBlockEditorUrl","https://yoa.st/webinar-intro-block-editor")});return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(k.Fill,{name:"YoastSidebar"},(0,t.createElement)(or,{key:"warning",renderPriority:1},(0,t.createElement)(ms,null),(0,t.createElement)("div",{style:{margin:"0 16px"}},s&&(0,t.createElement)(s,null))),e.isKeywordAnalysisActive&&(0,t.createElement)(or,{key:"keyword-input",renderPriority:8},(0,t.createElement)(Yt.KeywordInput,{isSEMrushIntegrationActive:e.isSEMrushIntegrationActive})),e.isKeywordAnalysisActive&&(0,t.createElement)(or,{key:"seo",renderPriority:10},(0,t.createElement)(i.Fragment,null,(0,t.createElement)(Yt.SeoAnalysis,{shouldUpsell:e.shouldUpsell,shouldUpsellWordFormRecognition:e.isWordFormRecognitionActive}),e.shouldUpsell&&(0,t.createElement)(cn,{location:"sidebar"}))),e.isContentAnalysisActive&&(0,t.createElement)(or,{key:"readability",renderPriority:20},(0,t.createElement)(Yt.ReadabilityAnalysis,{shouldUpsell:e.shouldUpsell})),e.isInclusiveLanguageAnalysisActive&&(0,t.createElement)(or,{key:"inclusive-language-analysis",renderPriority:21},(0,t.createElement)(Yt.InclusiveLanguageAnalysis,null)),e.isKeywordAnalysisActive&&(0,t.createElement)(or,{key:"additional-keywords-upsell",renderPriority:22},e.shouldUpsell&&(0,t.createElement)(un,null)),e.isKeywordAnalysisActive&&e.isWincherIntegrationActive&&(0,t.createElement)(or,{renderPriority:23},(0,t.createElement)(Vt,{location:"sidebar"})),e.shouldUpsell&&(0,t.createElement)(or,{key:"internal-linking-suggestions-upsell",renderPriority:25},(0,t.createElement)(ar,null)),(0,t.createElement)(or,{key:"search-appearance",renderPriority:26},(0,t.createElement)(tl,null)),(e.useOpenGraphData||e.useTwitterData)&&(0,t.createElement)(or,{key:"social-appearance",renderPriority:27},(0,t.createElement)(il,{useOpenGraphData:e.useOpenGraphData,useTwitterData:e.useTwitterData})),e.displaySchemaSettings&&(0,t.createElement)(or,{key:"schema",renderPriority:28},(0,t.createElement)(cl,{title:(0,l.__)("Schema","wordpress-seo")},(0,t.createElement)($a,null))),e.displayAdvancedTab&&(0,t.createElement)(or,{key:"advanced",renderPriority:29},(0,t.createElement)(cl,{title:(0,l.__)("Advanced","wordpress-seo")},(0,t.createElement)(hr,null))),e.isCornerstoneActive&&(0,t.createElement)(or,{key:"cornerstone",renderPriority:30},(0,t.createElement)(zt,null)),e.isInsightsEnabled&&(0,t.createElement)(or,{renderPriority:32},(0,t.createElement)(ri,{location:"sidebar"}))))}ll.propTypes={title:y().string.isRequired,children:y().oneOfType([y().node,y().arrayOf(y().node)]).isRequired,prefixIcon:y().object,subTitle:y().string,hasBetaBadgeLabel:y().bool,buttonId:y().string},ll.defaultProps={prefixIcon:null,subTitle:"",hasBetaBadgeLabel:!1,buttonId:null},dl.propTypes={settings:y().object.isRequired};const pl=(0,n.withSelect)(((e,t)=>{const{getPreferences:s}=e("yoast-seo/editor");return{settings:s(),store:t.store}}))(dl);function ul(e){const{hasTrackedKeyphrases:s,trackAll:r}=e;return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(R.FieldGroup,{label:(0,l.__)("SEO performance","wordpress-seo"),linkTo:wpseoAdminL10n["shortlinks.wincher.seo_performance"] +/* translators: Hidden accessibility text. */,linkText:(0,l.__)("Learn more about the SEO performance feature.","wordpress-seo"),wrapperClassName:"yoast-field-group yoast-wincher-post-publish"}),(0,t.createElement)(at,null),s&&(0,t.createElement)("p",null,(0,l.__)("Tracking has already been enabled for one or more keyphrases of this page. Clicking the button below will enable tracking for all of its keyphrases.","wordpress-seo")),(0,t.createElement)("div",{className:"yoast"},(0,t.createElement)(R.NewButton,{variant:"secondary",small:!0,onClick:r},(0,l.__)("Track all keyphrases on this page","wordpress-seo"))),(0,t.createElement)(Vt,{location:"postpublish"}))}ul.propTypes={trackAll:y().func,hasTrackedKeyphrases:y().bool},ul.defaultProps={trackAll:()=>{},hasTrackedKeyphrases:!1};const ml=(0,B.compose)([(0,n.withSelect)((e=>{const{getWincherTrackedKeyphrases:t,hasWincherTrackedKeyphrases:s}=e("yoast-seo/editor");return{trackedKeyphrases:t(),hasTrackedKeyphrases:s()}})),(0,n.withDispatch)((e=>{const{setWincherOpenModal:t,setWincherTrackAllKeyphrases:s}=e("yoast-seo/editor");return{trackAll:()=>{s(!0),t("postpublish")}}}))])(ul);window.wp.annotations;const hl=/(<([a-z]|\/)[^<>]+>)/gi,{htmlEntitiesRegex:gl}=I.helpers.htmlEntities,yl=e=>{let t=0;return(0,m.forEachRight)(e,(e=>{const[s]=e;let r=s.length;/^<\/?br/.test(s)&&(r-=1),t+=r})),t},fl="",wl="",bl='';function El(e,t,s,r,a){const n=r.clientId,o=(0,d.create)({html:e,multilineTag:s.multilineTag,multilineWrapperTag:s.multilineWrapperTag}).text;return(0,m.flatMap)(a,(s=>{let a;return a=s.hasBlockPosition&&s.hasBlockPosition()?function(e,t,s,r,a){if(t===e.getBlockClientId()){let t=e.getBlockPositionStart(),n=e.getBlockPositionEnd();if(e.isMarkForFirstBlockSection()){const e=((e,t,s)=>{const r="yoast/faq-block"===s?'':'';return{blockStartOffset:e-=r.length,blockEndOffset:t-=r.length}})(t,n,s);t=e.blockStartOffset,n=e.blockEndOffset}if(r.slice(t,n)===a.slice(t,n))return[{startOffset:t,endOffset:n}];const o=((e,t,s)=>{const r=s.slice(0,e),a=s.slice(0,t),n=((e,t,s,r)=>{const a=[...e.matchAll(hl)];s-=yl(a);const n=[...t.matchAll(hl)];return{blockStartOffset:s,blockEndOffset:r-=yl(n)}})(r,a,e,t),o=((e,t,s,r)=>{let a=[...e.matchAll(gl)];return(0,m.forEachRight)(a,(e=>{const[,t]=e;s-=t.length})),a=[...t.matchAll(gl)],(0,m.forEachRight)(a,(e=>{const[,t]=e;r-=t.length})),{blockStartOffset:s,blockEndOffset:r}})(r,a,e=n.blockStartOffset,t=n.blockEndOffset);return{blockStartOffset:e=o.blockStartOffset,blockEndOffset:t=o.blockEndOffset}})(t,n,r);return[{startOffset:o.blockStartOffset,endOffset:o.blockEndOffset}]}return[]}(s,n,r.name,e,o):function(e,t){const s=t.getOriginal().replace(/(<([^>]+)>)/gi,""),r=t.getMarked().replace(/(<(?!\/?yoastmark)[^>]+>)/gi,""),a=function(e,t,s=!0){const r=[];if(0===e.length)return r;let a,n=0;for(s||(t=t.toLowerCase(),e=e.toLowerCase());(a=e.indexOf(t,n))>-1;)r.push(a),n=a+t.length;return r}(e,s);if(0===a.length)return[];const n=function(e){let t=e.indexOf(fl);const s=t>=0;s||(t=e.indexOf(bl));let r=null;const a=[];for(;t>=0;){if(r=(e=s?e.replace(fl,""):e.replace(bl,"")).indexOf(wl),r{a.forEach((r=>{const a=r+e.startOffset;let n=r+e.endOffset;0===e.startOffset&&e.endOffset===t.getOriginal().length&&(n=r+s.length),o.push({startOffset:a,endOffset:n})}))})),o}(o,s),a?a.map((e=>({...e,block:n,richTextIdentifier:t}))):[]}))}const vl=e=>e[0].toUpperCase()+e.slice(1),kl=(e,t,s,r,a)=>(e=e.map((e=>{const n=`${e.id}-${a[0]}`,o=`${e.id}-${a[1]}`,i=vl(a[0]),l=vl(a[1]),c=e[`json${i}`],d=e[`json${l}`],{marksForFirstSection:p,marksForSecondSection:u}=((e,t)=>({marksForFirstSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&e.isMarkForFirstBlockSection():e)),marksForSecondSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&!e.isMarkForFirstBlockSection():e))}))(t,e),m=El(c,n,s,r,p),h=El(d,o,s,r,u);return m.concat(h)})),(0,m.flattenDeep)(e)),_l="yoast";let xl=[];const Sl={"core/paragraph":[{key:"content"}],"core/list":[{key:"values",multilineTag:"li",multilineWrapperTag:["ul","ol"]}],"core/list-item":[{key:"content"}],"core/heading":[{key:"content"}],"core/audio":[{key:"caption"}],"core/embed":[{key:"caption"}],"core/gallery":[{key:"caption"}],"core/image":[{key:"caption"}],"core/table":[{key:"caption"}],"core/video":[{key:"caption"}],"yoast/faq-block":[{key:"questions"}],"yoast/how-to-block":[{key:"steps"},{key:"jsonDescription"}]};function Tl(){const e=xl.shift();e&&((0,n.dispatch)("core/annotations").__experimentalAddAnnotation(e),Rl())}function Rl(){(0,m.isFunction)(window.requestIdleCallback)?window.requestIdleCallback(Tl,{timeout:1e3}):setTimeout(Tl,150)}function Cl(){const e=(0,n.select)("core/block-editor").getSelectedBlock(),t=(0,n.select)("yoast-seo/editor").getActiveMarker();if(!e||!t)return;var s;s=e.clientId,(0,n.select)("core/annotations").__experimentalGetAnnotations().filter((e=>e.blockClientId===s&&e.source===_l)).forEach((e=>{(0,n.dispatch)("core/annotations").__experimentalRemoveAnnotation(e.id)}));const r=(0,n.select)("yoast-seo/editor").getResultById(t);if(void 0===r)return;const a=r.marks;var o;o=((e,t)=>{return(0,m.flatMap)((s=e.name,Sl.hasOwnProperty(s)?Sl[s]:[]),(s=>"yoast/faq-block"===e.name?((e,t,s)=>{const r=t.attributes[e.key];return 0===r.length?[]:kl(r,s,e,t,["question","answer"])})(s,e,t):"yoast/how-to-block"===e.name?((e,t,s)=>{const r=t.attributes[e.key];if(r&&0===r.length)return[];const a=[];return"steps"===e.key&&a.push(kl(r,s,e,t,["name","text"])),"jsonDescription"===e.key&&(s=s.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?!e.getBlockAttributeId():e)),a.push(El(r,"description",e,t,s))),(0,m.flattenDeep)(a)})(s,e,t):function(e,t,s){const r=e.key,a=((e,t)=>{const s=e.attributes[t];return"string"==typeof s?s:s.toString()})(t,r);return El(a,r,e,t,s)}(s,e,t)));var s})(e,a),xl=o.map((e=>({blockClientId:e.block,source:_l,richTextIdentifier:e.richTextIdentifier,range:{start:e.startOffset,end:e.endOffset}}))),Rl()}const Il=window.wp.htmlEntities;function Al({isActive:e,activeAttributes:s,addingLink:r,value:a,onChange:n,speak:o,stopAddingLink:c}){const p=(0,i.useMemo)(m.uniqueId,[r]),[u,h]=(0,i.useState)(),g=(0,i.useMemo)((()=>{const t=window.getSelection();if(!t.rangeCount)return;const s=t.getRangeAt(0);if(r&&!e)return s;let a=s.startContainer;for(a=a.nextElementSibling||a;a.nodeType!==window.Node.ELEMENT_NODE;)a=a.parentNode;return a.closest("a")}),[r,a.start,a.end]),y={url:s.url,type:s.type,id:s.id,opensInNewTab:"_blank"===s.target,noFollow:s.rel&&s.rel.split(" ").includes("nofollow"),sponsored:s.rel&&s.rel.split(" ").includes("sponsored"),...u},f=e=>y.url===e.url&&y.opensInNewTab!==e.opensInNewTab||y.noFollow!==e.noFollow||y.sponsored!==e.sponsored,w=e=>{if("number"==typeof e||"string"==typeof e)return String(e)},b=(0,i.useCallback)((t=>{t={...u,...t};const s=f(y);if((e=>f(e)&&!0===e.sponsored&&!0!==y.Sponsored)(t)&&(t.noFollow=!0),(e=>f(e)&&!1===e.noFollow&&!1!==y.noFollow)(t)&&(t.sponsored=!1),(e=>f(e)&&!e.url)(t))return void h(t);const r=(0,Fs.prependHTTP)(t.url),i=function({url:e,opensInNewWindow:t,noFollow:s,sponsored:r}){const a={type:"core/link",attributes:{url:e}};let n=[];return t&&(a.attributes.target="_blank",n.push("noreferrer noopener")),r&&(n.push("sponsored"),n.push("nofollow")),s&&n.push("nofollow"),n.length>0&&(n=(0,m.uniq)(n),a.attributes.rel=n.join(" ")),a}({url:r,type:t.type,id:w(t.id),opensInNewWindow:t.opensInNewTab,noFollow:t.noFollow,sponsored:t.sponsored});if((0,d.isCollapsed)(a)&&!e){const e=((e,t)=>e.title?e.title:t)(t,r),s=(0,d.applyFormat)((0,d.create)({text:e}),i,0,e.length);n((0,d.insert)(a,s))}else{const e=(0,d.applyFormat)(a,i);e.start=e.end,e.activeFormats=[],n(e)}s||c(),(t=>{!function(e){if(!e)return!1;const t=e.trim();if(!t)return!1;if(/^\S+:/.test(t)){const e=(0,Fs.getProtocol)(t);if(!(0,Fs.isValidProtocol)(e))return!1;if((0,m.startsWith)(e,"http")&&!/^https?:\/\/[^\/\s]/i.test(t))return!1;const s=(0,Fs.getAuthority)(t);if(!(0,Fs.isValidAuthority)(s))return!1;const r=(0,Fs.getPath)(t);if(r&&!(0,Fs.isValidPath)(r))return!1;const a=(0,Fs.getQueryString)(t);if(a&&!(0,Fs.isValidQueryString)(a))return!1;const n=(0,Fs.getFragment)(t);if(n&&!(0,Fs.isValidFragment)(n))return!1}return!((0,m.startsWith)(t,"#")&&!(0,Fs.isValidFragment)(t))}(t)?o((0,l.__)("Warning: the link has been inserted but may have errors. Please test it.","wordpress-seo"),"assertive"):o(e?(0,l.__)("Link edited.","wordpress-seo"):(0,l.__)("Link inserted.","wordpress-seo"),"assertive")})(r)}),[]),E=(0,t.createElement)(za,{href:window.wpseoAdminL10n["shortlinks.nofollow_sponsored"],className:"dashicons"},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,l.__)("Learn more about marking a link as nofollow or sponsored.","wordpress-seo"))),v=As((0,l.sprintf)((0,l.__)("Search engines should ignore this link (mark as %1$snofollow%2$s)%3$s","wordpress-seo"),"","",""),{code:(0,t.createElement)("code",null),helplink:E}),_=As((0,l.sprintf)((0,l.__)("This is a sponsored link or advert (mark as %1$ssponsored%2$s)%3$s","wordpress-seo"),"","",""),{code:(0,t.createElement)("code",null),helplink:E}),x=[{id:"opensInNewTab",title:(0,l.__)("Open in new tab","wordpress-seo")},{id:"noFollow",title:v},{id:"sponsored",title:_}],{__experimentalLinkControl:S}=window.wp.blockEditor;return(0,t.createElement)(k.Popover,{key:p,anchor:g,focusOnMount:!!r&&"firstElement",onClose:c,position:"bottom center",placement:"bottom",shift:!0},(0,t.createElement)(S,{value:y,onChange:b,forceIsEditingLink:r,settings:x}))}Al.propTypes={isActive:y().bool,activeAttributes:y().object,addingLink:y().bool,value:y().object,onChange:y().func,speak:y().func.isRequired,stopAddingLink:y().func.isRequired};const Ll=(0,k.withSpokenMessages)(Al),Pl="core/link",Fl=(0,l.__)("Link","wordpress-seo"),Ol={name:Pl,title:Fl,tagName:"a",className:null,attributes:{url:"href",target:"target",rel:"rel"},replaces:"core/link",__unstablePasteRule(e,{html:t,plainText:s}){if((0,d.isCollapsed)(e))return e;const r=(t||s).replace(/<[^>]+>/g,"").trim();return(0,Fs.isURL)(r)?(window.console.log("Created link:\n\n",r),(0,d.applyFormat)(e,{type:Pl,attributes:{url:(0,Il.decodeEntities)(r)}})):e},edit:(0,k.withSpokenMessages)(class extends i.Component{constructor(){super(...arguments),this.addLink=this.addLink.bind(this),this.stopAddingLink=this.stopAddingLink.bind(this),this.onRemoveFormat=this.onRemoveFormat.bind(this),this.state={addingLink:!1}}addLink(){const{value:e,onChange:t}=this.props,s=(0,d.getTextContent)((0,d.slice)(e));s&&(0,Fs.isURL)(s)?t((0,d.applyFormat)(e,{type:Pl,attributes:{url:s}})):s&&(0,Fs.isEmail)(s)?t((0,d.applyFormat)(e,{type:Pl,attributes:{url:`mailto:${s}`}})):this.setState({addingLink:!0})}stopAddingLink(){this.setState({addingLink:!1}),this.props.onFocus()}onRemoveFormat(){const{value:e,onChange:t,speak:s}=this.props;t((0,d.removeFormat)(e,Pl)),s((0,l.__)("Link removed.","wordpress-seo"),"assertive")}render(){const{isActive:e,activeAttributes:s,value:r,onChange:a}=this.props,{RichTextToolbarButton:n,RichTextShortcut:o}=window.wp.blockEditor;return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(o,{type:"primary",character:"k",onUse:this.addLink}),(0,t.createElement)(o,{type:"primaryShift",character:"k",onUse:this.onRemoveFormat}),e&&(0,t.createElement)(n,{name:"link",icon:"editor-unlink",title:(0,l.__)("Unlink","wordpress-seo"),onClick:this.onRemoveFormat,isActive:e,shortcutType:"primaryShift",shortcutCharacter:"k"}),!e&&(0,t.createElement)(n,{name:"link",icon:"admin-links",title:Fl,onClick:this.addLink,isActive:e,shortcutType:"primary",shortcutCharacter:"k"}),(this.state.addingLink||e)&&(0,t.createElement)(Ll,{addingLink:this.state.addingLink,stopAddingLink:this.stopAddingLink,isActive:e,activeAttributes:s,value:r,onChange:a}))}})};function Ml(){const e=h();return(0,m.get)(e,"contentLocale","en_US")}const{updateReplacementVariable:Dl,updateData:ql,hideReplacementVariables:Nl,setContentImage:Bl,updateSettings:$l,setEditorDataContent:Ul,setEditorDataTitle:Wl,setEditorDataExcerpt:Kl,setEditorDataImageUrl:Hl,setEditorDataSlug:Vl}=u.actions,Yl=s.g.jQuery;window.yoast=window.yoast||{},window.yoast.initEditorIntegration=function(e){(function(e){const s=h(),r=s.isPremium?"Yoast SEO Premium":"Yoast SEO",d=(0,t.createElement)(v,null);(0,a.updateCategory)("yoast-structured-data-blocks",{icon:d}),(0,a.updateCategory)("yoast-internal-linking-blocks",{icon:d});const u={isRtl:s.isRtl},m=e.getState().preferences,g=m.isKeywordAnalysisActive||m.isContentAnalysisActive,y=m.isKeywordAnalysisActive&&m.isWincherIntegrationActive;!function(){var e,t,s;const r="yoast-seo/document-panel";var a,o,i,l;Boolean(null===(e=(0,n.dispatch)("core/editor"))||void 0===e?void 0:e.toggleEditorPanelOpened)?((null===(t=(0,n.select)("core/preferences"))||void 0===t?void 0:t.get("core","openPanels"))||(null===(s=(0,n.select)("core/preferences"))||void 0===s?void 0:s.get("core/edit-post","openPanels"))).includes(r)||null===(a=(0,n.dispatch)("core/editor"))||void 0===a||a.toggleEditorPanelOpened(r):null!==(o=(0,n.select)("core/preferences"))&&void 0!==o&&null!==(i=o.get("core/edit-post","openPanels"))&&void 0!==i&&i.includes(r)||null===(l=(0,n.dispatch)("core/edit-post"))||void 0===l||l.toggleEditorPanelOpened(r)}();const f={locationContext:"block-sidebar"},w={locationContext:"block-metabox"};(0,c.registerPlugin)("yoast-seo",{render:()=>(0,t.createElement)(i.Fragment,null,(0,t.createElement)(o.PluginSidebarMoreMenuItem,{target:"seo-sidebar",icon:(0,t.createElement)(Lo,null)},r),(0,t.createElement)(o.PluginSidebar,{name:"seo-sidebar",title:r},(0,t.createElement)(p.Root,{context:f},(0,t.createElement)(_o,{store:e,theme:u}))),(0,t.createElement)(i.Fragment,null,(0,t.createElement)(pl,{store:e,theme:u}),(0,t.createElement)(p.Root,{context:w},(0,t.createElement)(vo,{target:"wpseo-metabox-root",store:e,theme:u}))),g&&(0,t.createElement)(o.PluginPrePublishPanel,{className:"yoast-seo-sidebar-panel",title:(0,l.__)("Yoast SEO","wordpress-seo"),initialOpen:!0,icon:(0,t.createElement)(i.Fragment,null)},(0,t.createElement)(Uo,null)),(0,t.createElement)(o.PluginPostPublishPanel,{className:"yoast-seo-sidebar-panel",title:(0,l.__)("Yoast SEO","wordpress-seo"),initialOpen:!0,icon:(0,t.createElement)(i.Fragment,null)},(0,t.createElement)(Bo,null),y&&(0,t.createElement)(ml,null)),g&&(0,t.createElement)(o.PluginDocumentSettingPanel,{name:"document-panel",className:"yoast-seo-sidebar-panel",title:(0,l.__)("Yoast SEO","wordpress-seo"),icon:(0,t.createElement)(i.Fragment,null)},(0,t.createElement)(Ao,null))),icon:(0,t.createElement)(Lo,null)})})(e),function(){if("function"==typeof(0,m.get)(window,"wp.blockEditor.__experimentalLinkControl")){const e=(0,n.select)("core/rich-text").getFormatType("core/unknown");void 0!==e&&(0,n.dispatch)("core/rich-text").removeFormatTypes("core/unknown"),[Ol].forEach((({name:e,replaces:t,...s})=>{t&&(0,n.dispatch)("core/rich-text").removeFormatTypes(t),e&&(0,d.registerFormatType)(e,s)})),void 0!==e&&(0,d.registerFormatType)("core/unknown",e)}else console.warn((0,l.__)("Marking links with nofollow/sponsored has been disabled for WordPress installs < 5.4.","wordpress-seo")+" "+(0,l.sprintf)( +// translators: %1$s expands to Yoast SEO. +(0,l.__)("Please upgrade your WordPress version or install the Gutenberg plugin to get this %1$s feature.","wordpress-seo"),"Yoast SEO"))}(),function(e){(0,n.select)("core/block-editor")&&(0,m.isFunction)((0,n.select)("core/block-editor").getBlocks)&&(0,n.select)("core/annotations")&&(0,m.isFunction)((0,n.dispatch)("core/annotations").__experimentalAddAnnotation)&&e.dispatch(u.actions.setMarkerStatus("enabled"))}(e)},window.yoast.EditorData=class{constructor(e,t){this._refresh=e,this._store=t,this._data={},this.getPostAttribute=this.getPostAttribute.bind(this),this.refreshYoastSEO=this.refreshYoastSEO.bind(this)}initialize(e,t=[]){var s,r;this._data=this.getInitialData(e),s=this._data,r=this._store,(0,m.forEach)(s,((e,t)=>{as.includes(t)||r.dispatch(ts(t,e))})),this._store.dispatch(Nl(t)),this.subscribeToGutenberg(),this.subscribeToYoastSEO()}getInitialData(e){const t=this.collectGutenbergData();return e=function(e,t){if(!e.custom_taxonomies)return e;const s={};return(0,m.forEach)(e.custom_taxonomies,((e,t)=>{const{name:r,label:a,descriptionName:n,descriptionLabel:o}=function(e){const t=ns(e);return{name:"ct_"+t,label:ss(e+" (custom taxonomy)"),descriptionName:"ct_desc_"+t,descriptionLabel:ss(e+" description (custom taxonomy)")}}(t),i="string"==typeof e.name?(0,Y.decodeHTML)(e.name):e.name,l="string"==typeof e.description?(0,Y.decodeHTML)(e.description):e.description;s[r]={value:i,label:a},s[n]={value:l,label:o}})),t.dispatch(function(e){return{type:"SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLES_BATCH",updatedVariables:e}}(s)),(0,m.omit)({...e},"custom_taxonomies")}(e=function(e,t){return e.custom_fields?((0,m.forEach)(e.custom_fields,((e,s)=>{const{name:r,label:a}=function(e){return{name:"cf_"+ns(e),label:ss(e+" (custom field)")}}(s);t.dispatch(ts(r,e,a))})),(0,m.omit)({...e},"custom_fields")):e}(e,this._store),this._store),{...e,...t}}setRefresh(e){this._refresh=e}isShallowEqual(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(e.hasOwnProperty(s)&&(!(s in t)||e[s]!==t[s]))return!1;return!0}getMediaById(e){return this._coreDataSelect||(this._coreDataSelect=(0,n.select)("core")),this._coreDataSelect.getMedia(e)}getPostAttribute(e){return this._coreEditorSelect||(this._coreEditorSelect=(0,n.select)("core/editor")),this._coreEditorSelect.getEditedPostAttribute(e)}getSlug(){if("auto-draft"===this.getPostAttribute("status"))return"";let e=this.getPostAttribute("generated_slug")||"";"auto-draft"===e&&(e="");const t=this.getPostAttribute("slug")||e;try{return decodeURI(t)}catch(e){return t}}getPostBaseUrl(){const e=(0,n.select)("core/editor").getPermalinkParts();if(null===e||null==e||!e.prefix)return window.wpseoScriptData.metabox.base_url;let t=e.prefix;if((0,n.select)("core/editor").isEditedPostNew())try{const e=new URL(t);t=e.origin+e.pathname}catch(e){}return t.endsWith("/")||(t+="/"),t}collectGutenbergData(){let e=(0,n.select)("core/editor").getEditedPostContent();const t=(0,n.select)("core/block-editor").getBlocks();1===t.length&&"core/freeform"===t[0].name&&(e=(0,a.getBlockContent)(t[0]));const s=this.calculateContentImage(e),r=this.getPostAttribute("excerpt")||"";return{content:e,title:this.getPostAttribute("title")||"",slug:this.getSlug(),excerpt:r||os(e,"ja"===Ml()?80:156),excerpt_only:r,snippetPreviewImageURL:this.getFeaturedImage()||s,contentImage:s,baseUrl:this.getPostBaseUrl()}}getFeaturedImage(){const e=this.getPostAttribute("featured_media");if(e){const t=this.getMediaById(e);if(t)return t.source_url}return null}calculateContentImage(e){const t=I.languageProcessing.imageInText(e);if(0===t.length)return"";const s=Yl.parseHTML(t.join(""));for(const e of s)if(e.src)return e.src;return""}handleEditorChange(e){this._data.content!==e.content&&this._store.dispatch(Ul(e.content)),this._data.title!==e.title&&(this._store.dispatch(Wl(e.title)),this._store.dispatch(Dl("title",e.title))),this._data.excerpt!==e.excerpt&&(this._store.dispatch(Kl(e.excerpt)),this._store.dispatch(Dl("excerpt",e.excerpt)),this._store.dispatch(Dl("excerpt_only",e.excerpt_only))),this._data.slug!==e.slug&&(this._store.dispatch(Vl(e.slug)),this._store.dispatch(ql({slug:e.slug}))),this._data.snippetPreviewImageURL!==e.snippetPreviewImageURL&&(this._store.dispatch(Hl(e.snippetPreviewImageURL)),this._store.dispatch(ql({snippetPreviewImageURL:e.snippetPreviewImageURL}))),this._data.contentImage!==e.contentImage&&this._store.dispatch(Bl(e.contentImage)),this._data.baseUrl!==e.baseUrl&&this._store.dispatch($l({baseUrl:e.baseUrl}))}reapplyMarkers(){const{getActiveMarker:e,getMarkerPauseStatus:t}=(0,n.select)("yoast-seo/editor"),s=e(),r=t();s&&!r&&Cl()}refreshYoastSEO(){const e=this.collectGutenbergData();!this.isShallowEqual(this._data,e)&&(this.handleEditorChange(e),this._data=e,this._refresh())}areNewAnalysisResultsAvailable(){const e=(0,n.select)("yoast-seo/editor"),t=e.getReadabilityResults(),s=e.getResultsForFocusKeyword();return(this._previousReadabilityResults!==t||this._previousSeoResults!==s)&&(this._previousReadabilityResults=t,this._previousSeoResults=s,!0)}onNewAnalysisResultsAvailable(){this.reapplyMarkers()}subscribeToGutenberg(){this.subscriber=(0,m.debounce)(this.refreshYoastSEO,500),(0,n.subscribe)(this.subscriber)}subscribeToYoastSEO(){this.yoastSubscriber=()=>{this.areNewAnalysisResultsAvailable()&&this.onNewAnalysisResultsAvailable()},(0,n.subscribe)(this.yoastSubscriber)}getData(){return this._data}}})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/bulk-editor.js b/wp/wp-content/plugins/wordpress-seo/js/dist/bulk-editor.js new file mode 100644 index 00000000..24e346bc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/bulk-editor.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:n=>{var s=n&&n.__esModule?()=>n.default:()=>n;return e.d(s,{a:s}),s},d:(n,s)=>{for(var t in s)e.o(s,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:s[t]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n)};const n=window.jQuery;var s,t=e.n(n);s=function(e){var n=e.find("[class^=wpseo-new]").first().attr("class"),s="#"+n+"-",i=s.replace("new","existing"),a=e.find("th[id^=col_existing_yoast]").first().text().replace("Existing ",""),o=n.replace("-new-","_save_"),l="wpseo_save_all_"+e.attr("class").split("wpseo_bulk_")[1],r=o.replace("wpseo_save_",""),c={newClass:"."+n,newId:s,existingId:i},d={submit_new:function(e){d.submitNew(e)},submitNew:function(e){var n,s=c.newId+e,i=c.existingId+e;n="select-one"===t()(c.newId+e).prop("type")?t()(s).find(":selected").text():t()(s).val();var l=t()(i).html();if(n===l)t()(s).val("");else{if(""===n&&!window.confirm("Are you sure you want to remove the existing "+a+"?"))return void t()(s).val("");var r={action:o,_ajax_nonce:wpseoBulkEditorNonce,wpseo_post_id:e,new_value:n,existing_value:l};t().post(ajaxurl,r,d.handleResponse)}},submit_all:function(e){d.submitAll(e)},submitAll:function(e){e.preventDefault();var n={action:l,_ajax_nonce:wpseoBulkEditorNonce,send:!1,items:{},existingItems:{}};t()(c.newClass).each((function(){var e=t()(this).data("id"),s=t()(this).val(),i=t()(c.existingId+e).html();""!==s&&(s===i?t()(c.newId+e).val(""):(n.send=!0,n.items[e]=s,n.existingItems[e]=i))})),n.send&&t().post(ajaxurl,n,d.handleResponses)},handle_response:function(e,n){d.handleResponse(e,n)},handleResponse:function(e,n){if("success"===n){var s=e;if("string"==typeof s&&(s=JSON.parse(s)),s instanceof Array)t().each(s,(function(){d.handleResponse(this,n)}));else if("success"===s.status){var i=s["new_"+r];t()(c.existingId+s.post_id).text(i.replace(/\\(?!\\)/g,"")),t()(c.newId+s.post_id).val("")}}},handle_responses:function(e,n){d.handleResponses(e,n)},handleResponses:function(e,n){var s=t().parseJSON(e);t().each(s,(function(){d.handleResponse(this,n)}))},set_events:function(){d.setEvents()},setEvents:function(){e.find(".wpseo-save").click((function(e){var n=t()(this).data("id");e.preventDefault(),d.submitNew(n,this)})),e.find(".wpseo-save-all").click(d.submitAll),e.find(c.newClass).keydown((function(e){if(13===e.which){e.preventDefault();var n=t()(this).data("id");d.submitNew(n,this)}}))}};return d},window.bulk_editor=s,window.bulkEditor=s,t()(document).ready((function(){t()('table[class*="wpseo_bulk"]').each((function(e,n){var i=t()(n);s(i).setEvents()}))}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/classic-editor.js b/wp/wp-content/plugins/wordpress-seo/js/dist/classic-editor.js new file mode 100644 index 00000000..9d345817 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/classic-editor.js @@ -0,0 +1,548 @@ +(()=>{var e={6746:(e,t,s)=>{"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=i(s(9196)),a=i(s(9156)),o=i(s(6743));function i(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function c(e,t){var s,o,i,d,u,p,m,h,g=[],y={};for(p=0;p "+l);if("componentClose"===u.type)throw new Error("Missing opening component token: `"+u.value+"`");if("componentOpen"===u.type){s=t[u.value],i=p;break}g.push(t[u.value])}else g.push(u.value);return s&&(d=function(e,t){var s,n,r=t[e],a=0;for(n=e+1;n{"use strict";function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},9156:(e,t,s)=>{"use strict";var n=s(9196),r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,a=s(7942),o=s(9179),i=s(397),l=".",c=":",d="function"==typeof Symbol&&Symbol.iterator,u="@@iterator";function p(e,t){return e&&"object"==typeof e&&null!=e.key?(s=e.key,n={"=":"=0",":":"=2"},"$"+(""+s).replace(/[=:]/g,(function(e){return n[e]}))):t.toString(36);var s,n}function m(e,t,s,n){var a,i=typeof e;if("undefined"!==i&&"boolean"!==i||(e=null),null===e||"string"===i||"number"===i||"object"===i&&e.$$typeof===r)return s(n,e,""===t?l+p(e,0):t),1;var h=0,g=""===t?l:t+c;if(Array.isArray(e))for(var y=0;y{"use strict";function t(e){return function(){return e}}var s=function(){};s.thatReturns=t,s.thatReturnsFalse=t(!1),s.thatReturnsTrue=t(!0),s.thatReturnsNull=t(null),s.thatReturnsThis=function(){return this},s.thatReturnsArgument=function(e){return e},e.exports=s},9179:e=>{"use strict";e.exports=function(e,t,s,n,r,a,o,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[s,n,r,a,o,i],d=0;(l=new Error(t.replace(/%s/g,(function(){return c[d++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},397:(e,t,s)=>{"use strict";var n=s(7942);e.exports=n},4530:(e,t)=>{var s;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t{"use strict";e.exports=window.React}},t={};function s(n){var r=t[n];if(void 0!==r)return r.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,s),a.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=s(9196),t=s.n(e);const n=window.wp.element,r=window.wp.components,a=window.yoast.propTypes;var o=s.n(a);const i=window.lodash,l=window.yoast.styledComponents;var c=s.n(l);const d=window.yoast.externals.contexts,u=({theme:t,location:s,children:n})=>(0,e.createElement)(d.LocationProvider,{value:s},(0,e.createElement)(l.ThemeProvider,{theme:t},n));u.propTypes={theme:o().object.isRequired,location:o().oneOf(["sidebar","metabox","modal"]).isRequired,children:o().element.isRequired};const p=u,m=window.yoast.uiLibrary,h=window.wp.data;const g=window.yoast.componentsNew,y=window.yoast.styleGuide,f=window.yoast.analysis;function b(e){switch(e){case"loading":return{icon:"loading-spinner",color:y.colors.$color_green_medium_light};case"not-set":return{icon:"seo-score-none",color:y.colors.$color_score_icon};case"noindex":return{icon:"seo-score-none",color:y.colors.$color_noindex};case"good":return{icon:"seo-score-good",color:y.colors.$color_green_medium};case"ok":return{icon:"seo-score-ok",color:y.colors.$color_ok};default:return{icon:"seo-score-bad",color:y.colors.$color_red}}}function w({target:e,children:t}){let s=e;return"string"==typeof e&&(s=document.getElementById(e)),s?(0,n.createPortal)(t,s):null}w.propTypes={target:o().oneOfType([o().string,o().object]).isRequired,children:o().node.isRequired};const E=({target:t,scoreIndicator:s})=>(0,e.createElement)(w,{target:t},(0,e.createElement)(g.SvgIcon,{...b(s)}));E.propTypes={target:o().string.isRequired,scoreIndicator:o().string.isRequired};const v=E,k=window.wp.i18n,_=({handleRefreshClick:t,supportLink:s})=>(0,e.createElement)("div",{className:"yst-flex yst-gap-2"},(0,e.createElement)(m.Button,{onClick:t},(0,k.__)("Refresh this page","wordpress-seo")),(0,e.createElement)(m.Button,{variant:"secondary",as:"a",href:s,target:"_blank",rel:"noopener"},(0,k.__)("Contact support","wordpress-seo")));_.propTypes={handleRefreshClick:o().func.isRequired,supportLink:o().string.isRequired};const T=({handleRefreshClick:t,supportLink:s})=>(0,e.createElement)("div",{className:"yst-grid yst-grid-cols-1 yst-gap-y-2"},(0,e.createElement)(m.Button,{className:"yst-order-last",onClick:t},(0,k.__)("Refresh this page","wordpress-seo")),(0,e.createElement)(m.Button,{variant:"secondary",as:"a",href:s,target:"_blank",rel:"noopener"},(0,k.__)("Contact support","wordpress-seo")));T.propTypes={handleRefreshClick:o().func.isRequired,supportLink:o().string.isRequired};const x=({error:t,children:s})=>(0,e.createElement)("div",{role:"alert",className:"yst-max-w-screen-sm yst-p-8 yst-space-y-4"},(0,e.createElement)(m.Title,null,(0,k.__)("Something went wrong. An unexpected error occurred.","wordpress-seo")),(0,e.createElement)("p",null,(0,k.__)("We're very sorry, but it seems like the following error has interrupted our application:","wordpress-seo")),(0,e.createElement)(m.Alert,{variant:"error"},(null==t?void 0:t.message)||(0,k.__)("Undefined error message.","wordpress-seo")),(0,e.createElement)("p",null,(0,k.__)("Unfortunately, this means that any unsaved changes in this section will be lost. You can try and refresh this page to resolve the problem. If this error still occurs, please get in touch with our support team, and we'll get you all the help you need!","wordpress-seo")),s);x.propTypes={error:o().object.isRequired,children:o().node},x.VerticalButtons=T,x.HorizontalButtons=_;const S=({error:t})=>{const s=(0,n.useCallback)((()=>{var e,t;return null===(e=window)||void 0===e||null===(t=e.location)||void 0===t?void 0:t.reload()}),[]),r=(0,h.useSelect)((e=>e("yoast-seo/editor").selectLink("https://yoa.st/metabox-error-support")),[]),a=(0,h.useSelect)((e=>e("yoast-seo/editor").getPreference("isRtl",!1)),[]);return(0,n.useEffect)((()=>{document.querySelectorAll('[id^="wpseo-meta-tab-"]').forEach((e=>{!function(e){const t=document.querySelector(`#${e}`);null!==t&&(t.style.opacity="0.5",t.style.pointerEvents="none",t.setAttribute("aria-disabled","true"),t.classList.contains("yoast-active-tab")&&t.classList.remove("yoast-active-tab"))}(e.id)}))}),[]),(0,e.createElement)(m.Root,{context:{isRtl:a}},(0,e.createElement)(x,{error:t},(0,e.createElement)(x.HorizontalButtons,{supportLink:r,handleRefreshClick:s}),(0,e.createElement)(v,{target:"wpseo-seo-score-icon",scoreIndicator:"not-set"}),(0,e.createElement)(v,{target:"wpseo-readability-score-icon",scoreIndicator:"not-set"}),(0,e.createElement)(v,{target:"wpseo-inclusive-language-score-icon",scoreIndicator:"not-set"})))};function R({theme:t}){return(0,e.createElement)(p,{theme:t,location:"metabox"},(0,e.createElement)(m.ErrorBoundary,{FallbackComponent:S},(0,e.createElement)(r.Slot,{name:"YoastMetabox"},(e=>{return void 0===(t=e).length?t:(0,i.flatten)(t).sort(((e,t)=>void 0===e.props.renderPriority?1:e.props.renderPriority-t.props.renderPriority));var t}))))}S.propTypes={error:o().object.isRequired};const C=window.wp.compose,I=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{d:"M2 11a1 1 0 011-1h2a1 1 0 011 1v5a1 1 0 01-1 1H3a1 1 0 01-1-1v-5zM8 7a1 1 0 011-1h2a1 1 0 011 1v9a1 1 0 01-1 1H9a1 1 0 01-1-1V7zM14 4a1 1 0 011-1h2a1 1 0 011 1v12a1 1 0 01-1 1h-2a1 1 0 01-1-1V4z"}))}));var L=s(4530),A=s.n(L);const P=({className:t,...s})=>(0,e.createElement)("span",{className:A()("yst-grow yst-overflow-hidden yst-overflow-ellipsis yst-whitespace-nowrap yst-font-wp yst-text-[#555] yst-text-base yst-leading-[normal] yst-subpixel-antialiased yst-text-left",t),...s});P.displayName="MetaboxButton.Text",P.propTypes={className:o().string},P.defaultProps={className:""};const F=({className:t,...s})=>(0,e.createElement)("button",{type:"button",className:A()("yst-flex yst-items-center yst-w-full yst-pt-4 yst-pb-4 yst-pr-4 yst-pl-6 yst-space-x-2 yst-border-t yst-border-t-[rgb(0,0,0,0.2)] yst-rounded-none yst-transition-all hover:yst-bg-[#f0f0f0] focus:yst-outline focus:yst-outline-[1px] focus:yst-outline-[color:#0066cd] focus:-yst-outline-offset-1 focus:yst-shadow-[0_0_3px_rgba(8,74,103,0.8)]",t),...s});F.propTypes={className:o().string},F.defaultProps={className:""},F.Text=P;const M=window.yoast.helpers,q=c().div` + min-width: 600px; + + @media screen and ( max-width: 680px ) { + min-width: 0; + width: 86vw; + } +`,D=c().div` + @media screen and ( min-width: 600px ) { + max-width: 420px; + } +`,O=(c()(g.Icon)` + float: ${(0,M.getDirectionalStyle)("right","left")}; + margin: ${(0,M.getDirectionalStyle)("0 0 16px 16px","0 16px 16px 0")}; + + && { + width: 150px; + height: 150px; + + @media screen and ( max-width: 680px ) { + width: 80px; + height: 80px; + } + } +`,"yoast yoast-gutenberg-modal"),N=t=>{const{title:s,className:n,showYoastIcon:a,additionalClassName:o,...i}=t,l=a?(0,e.createElement)("span",{className:"yoast-icon"}):null;return(0,e.createElement)(r.Modal,{title:s,className:`${n} ${o}`,icon:l,...i},t.children)};N.propTypes={title:o().string,className:o().string,showYoastIcon:o().bool,children:o().oneOfType([o().node,o().arrayOf(o().node)]),additionalClassName:o().string},N.defaultProps={title:"Yoast SEO",className:O,showYoastIcon:!0,children:null,additionalClassName:""};const $=N;var B,U;function W(){return W=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",W({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 425 456.27"},t),B||(B=e.createElement("path",{d:"M73 405.26a66.79 66.79 0 0 1-6.54-1.7 64.75 64.75 0 0 1-6.28-2.31c-1-.42-2-.89-3-1.37-1.49-.72-3-1.56-4.77-2.56-1.5-.88-2.71-1.64-3.83-2.39-.9-.61-1.8-1.26-2.68-1.92a70.154 70.154 0 0 1-5.08-4.19 69.21 69.21 0 0 1-8.4-9.17c-.92-1.2-1.68-2.25-2.35-3.24a70.747 70.747 0 0 1-3.44-5.64 68.29 68.29 0 0 1-8.29-32.55V142.13a68.26 68.26 0 0 1 8.29-32.55c1-1.92 2.21-3.82 3.44-5.64s2.55-3.58 4-5.27a69.26 69.26 0 0 1 14.49-13.25C50.37 84.19 52.27 83 54.2 82A67.59 67.59 0 0 1 73 75.09a68.75 68.75 0 0 1 13.75-1.39h169.66L263 55.39H86.75A86.84 86.84 0 0 0 0 142.13v196.09A86.84 86.84 0 0 0 86.75 425h11.32v-18.35H86.75A68.75 68.75 0 0 1 73 405.26zM368.55 60.85l-1.41-.53-6.41 17.18 1.41.53a68.06 68.06 0 0 1 8.66 4c1.93 1 3.82 2.2 5.65 3.43A69.19 69.19 0 0 1 391 98.67c1.4 1.68 2.72 3.46 3.95 5.27s2.39 3.72 3.44 5.64a68.29 68.29 0 0 1 8.29 32.55v264.52H233.55l-.44.76c-3.07 5.37-6.26 10.48-9.49 15.19L222 425h203V142.13a87.2 87.2 0 0 0-56.45-81.28z"})),U||(U=e.createElement("path",{stroke:"#000",strokeMiterlimit:10,strokeWidth:3.81,d:"M119.8 408.28v46c28.49-1.12 50.73-10.6 69.61-29.58 19.45-19.55 36.17-50 52.61-96L363.94 1.9H305l-98.25 272.89-48.86-153h-54l71.7 184.18a75.67 75.67 0 0 1 0 55.12c-7.3 18.68-20.25 40.66-55.79 47.19z"}))),H=t=>(0,e.createElement)("div",{className:"yoast components-panel__body"},(0,e.createElement)("h2",{className:"components-panel__body-title"},(0,e.createElement)("button",{id:t.id,onClick:t.onClick,className:"components-button components-panel__body-toggle",type:"button"},t.prefixIcon&&(0,e.createElement)("span",{className:"yoast-icon-span",style:{fill:`${t.prefixIcon&&t.prefixIcon.color||""}`}},(0,e.createElement)(g.SvgIcon,{size:t.prefixIcon.size,icon:t.prefixIcon.icon})),(0,e.createElement)("span",{className:"yoast-title-container"},(0,e.createElement)("div",{className:"yoast-title"},t.title),(0,e.createElement)("div",{className:"yoast-subtitle"},t.subTitle)),t.children,t.suffixIcon&&(0,e.createElement)(g.SvgIcon,{size:t.suffixIcon.size,icon:t.suffixIcon.icon}),t.SuffixHeroIcon))),Y=H;H.propTypes={onClick:o().func.isRequired,title:o().string.isRequired,id:o().string,subTitle:o().string,suffixIcon:o().object,SuffixHeroIcon:o().object,prefixIcon:o().object,children:o().node},H.defaultProps={id:"",suffixIcon:null,SuffixHeroIcon:null,prefixIcon:null,subTitle:"",children:null};const z=window.moment;var j=s.n(z),V=s(6746);const G=(0,M.makeOutboundLink)(),Z=t=>{const s=(0,k.sprintf)(/* translators: %d expands to the amount of allowed keyphrases on a free account, %s expands to a link to Wincher plans. */ +(0,k.__)("You've reached the maximum amount of %d keyphrases you can add to your Wincher account. If you wish to add more keyphrases, please %s.","wordpress-seo"),t.limit,"{{updateWincherPlanLink/}}");return(0,e.createElement)(g.Alert,{type:"error"},(0,V.Z)({mixedString:s,components:{updateWincherPlanLink:(0,e.createElement)(G,{href:wpseoAdminGlobalL10n["links.wincher.pricing"]},(0,k.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,k.__)("upgrade your %s plan","wordpress-seo"),"Wincher"))}}))};Z.propTypes={limit:o().number},Z.defaultProps={limit:10};const X=Z,Q=()=>(0,e.createElement)(g.Alert,{type:"error"},(0,k.__)("Something went wrong while tracking the ranking position(s) of your page. Please try again later.","wordpress-seo")),J=window.wp.apiFetch;var ee=s.n(J);async function te(e,t,s,n=200){try{const r=await e();return!!r&&(r.status===n?t(r):s(r))}catch(e){console.error(e.message)}}async function se(e){try{return await ee()(e)}catch(e){return e.error&&e.status?e:e instanceof Response&&await e.json()}}async function ne(e){return(0,i.isArray)(e)||(e=[e]),await se({path:"yoast/v1/wincher/keyphrases/track",method:"POST",data:{keyphrases:e}})}const re=c().p` + color: ${y.colors.$color_pink_dark}; + font-size: 14px; + font-weight: 700; + margin: 13px 0 10px; +`,ae=c()(g.SvgIcon)` + margin-right: 5px; + vertical-align: middle; +`,oe=c().button` + position: absolute; + top: 9px; + right: 9px; + border: none; + background: none; + cursor: pointer; +`,ie=c().p` + font-size: 13px; + font-weight: 500; + margin: 10px 0 13px; +`,le=c().div` + position: relative; + background: ${e=>e.isTitleShortened?"#F5F7F7":"transparent"}; + border: 1px solid #C7C7C7; + border-left: 4px solid${y.colors.$color_pink_dark}; + padding: 0 16px; + margin-bottom: 1.5em; +`,ce=e=>{const[t,s]=(0,n.useState)(null);return(0,n.useEffect)((()=>{e&&!t&&async function(){return await se({path:"yoast/v1/wincher/account/limit",method:"GET"})}().then((e=>s(e)))}),[t]),t};ce.propTypes={limit:o().bool.isRequired};const de=({limit:t,usage:s,isTitleShortened:n,isFreeAccount:r})=>{const a=(0,k.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,k.__)("Your are tracking %1$s out of %2$s keyphrases included in your free account.","wordpress-seo"),s,t),o=(0,k.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,k.__)("Your are tracking %1$s out of %2$s keyphrases included in your account.","wordpress-seo"),s,t),i=r?a:o,l=(0,k.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,k.__)("Keyphrases tracked: %1$s/%2$s","wordpress-seo"),s,t),c=n?l:i;return(0,e.createElement)(re,null,n&&(0,e.createElement)(ae,{icon:"exclamation-triangle",color:y.colors.$color_pink_dark,size:"14px"}),c)};de.propTypes={limit:o().number.isRequired,usage:o().number.isRequired,isTitleShortened:o().bool,isFreeAccount:o().bool};const ue=(0,M.makeOutboundLink)(),pe=({discount:t,months:s})=>{const n=(0,e.createElement)(ue,{href:wpseoAdminGlobalL10n["links.wincher.upgrade"],style:{fontWeight:600}},(0,k.sprintf)(/* Translators: %s : Expands to "Wincher". */ +(0,k.__)("Click here to upgrade your %s plan","wordpress-seo"),"Wincher"));if(!t||!s)return(0,e.createElement)(ie,null,n);const r=100*t,a=(0,k.sprintf)( +/* Translators: %1$s expands to upgrade account link. + * %2$s expands to the upgrade discount value. + * %3$s expands to the upgrade discount duration e.g. 2 months. + */ +(0,k.__)("%1$s and get an exclusive %2$s discount for %3$s month(s).","wordpress-seo"),"{{wincherAccountUpgradeLink/}}",r+"%",s);return(0,e.createElement)(ie,null,(0,V.Z)({mixedString:a,components:{wincherAccountUpgradeLink:n}}))};pe.propTypes={discount:o().number,months:o().number};const me=({onClose:t,isTitleShortened:s,trackingInfo:r})=>{const a=(()=>{const[e,t]=(0,n.useState)(null);return(0,n.useEffect)((()=>{e||async function(){return await se({path:"yoast/v1/wincher/account/upgrade-campaign",method:"GET"})}().then((e=>t(e)))}),[e]),e})();if(null===r)return null;const{limit:o,usage:i}=r;if(!(o&&i/o>=.8))return null;const l=Boolean(null==a?void 0:a.discount);return(0,e.createElement)(le,{isTitleShortened:s},t&&(0,e.createElement)(oe,{type:"button","aria-label":(0,k.__)("Close the upgrade callout","wordpress-seo"),onClick:t},(0,e.createElement)(g.SvgIcon,{icon:"times-circle",color:y.colors.$color_pink_dark,size:"14px"})),(0,e.createElement)(de,{...r,isTitleShortened:s,isFreeAccount:l}),(0,e.createElement)(pe,{discount:null==a?void 0:a.discount,months:null==a?void 0:a.months}))};me.propTypes={onClose:o().func,isTitleShortened:o().bool,trackingInfo:o().object};const he=me,ge=()=>(0,e.createElement)(g.Alert,{type:"success"},(0,k.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,k.__)("You have successfully connected to %s! You can now track the SEO performance for the keyphrase(s) of this page.","wordpress-seo"),"Wincher")),ye=()=>(0,e.createElement)(g.Alert,{type:"info"},(0,k.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,k.__)("%s is currently tracking the ranking position(s) of your page. This may take a few minutes. Please wait or check back later.","wordpress-seo"),"Wincher")),fe=({data:t,mapChartDataToTableData:s,dataTableCaption:n,dataTableHeaderLabels:r,isDataTableVisuallyHidden:a})=>t.length!==r.length?(0,e.createElement)("p",null,(0,k.__)("The number of headers and header labels don't match.","wordpress-seo")):(0,e.createElement)("div",{className:a?"screen-reader-text":null},(0,e.createElement)("table",null,(0,e.createElement)("caption",null,n),(0,e.createElement)("thead",null,(0,e.createElement)("tr",null,r.map(((t,s)=>(0,e.createElement)("th",{key:s},t))))),(0,e.createElement)("tbody",null,(0,e.createElement)("tr",null,t.map(((t,n)=>(0,e.createElement)("td",{key:n},s(t.y))))))));fe.propTypes={data:o().arrayOf(o().shape({x:o().number,y:o().number})).isRequired,mapChartDataToTableData:o().func,dataTableCaption:o().string.isRequired,dataTableHeaderLabels:o().array.isRequired,isDataTableVisuallyHidden:o().bool},fe.defaultProps={mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const be=fe,we=({data:t,width:s,height:r,fillColor:a,strokeColor:o,strokeWidth:i,className:l,mapChartDataToTableData:c,dataTableCaption:d,dataTableHeaderLabels:u,isDataTableVisuallyHidden:p})=>{const m=Math.max(1,Math.max(...t.map((e=>e.x)))),h=Math.max(1,Math.max(...t.map((e=>e.y)))),g=r-i,y=t.map((e=>`${e.x/m*s},${g-e.y/h*g+i}`)).join(" "),f=`0,${g+i} `+y+` ${s},${g+i}`;return(0,e.createElement)(n.Fragment,null,(0,e.createElement)("svg",{width:s,height:r,viewBox:`0 0 ${s} ${r}`,className:l,role:"img","aria-hidden":"true",focusable:"false"},(0,e.createElement)("polygon",{fill:a,points:f}),(0,e.createElement)("polyline",{fill:"none",stroke:o,strokeWidth:i,strokeLinejoin:"round",strokeLinecap:"round",points:y})),c&&(0,e.createElement)(be,{data:t,mapChartDataToTableData:c,dataTableCaption:d,dataTableHeaderLabels:u,isDataTableVisuallyHidden:p}))};we.propTypes={data:o().arrayOf(o().shape({x:o().number,y:o().number})).isRequired,width:o().number.isRequired,height:o().number.isRequired,fillColor:o().string,strokeColor:o().string,strokeWidth:o().number,className:o().string,mapChartDataToTableData:o().func,dataTableCaption:o().string.isRequired,dataTableHeaderLabels:o().array.isRequired,isDataTableVisuallyHidden:o().bool},we.defaultProps={fillColor:null,strokeColor:"#000000",strokeWidth:1,className:"",mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const Ee=we,ve=()=>(0,e.createElement)("p",{className:"yoast-wincher-seo-performance-modal__loading-message"},(0,k.__)("Tracking the ranking position...","wordpress-seo")," ",(0,e.createElement)(g.SvgIcon,{icon:"loading-spinner"})),ke=c()(g.SvgIcon)` + margin-left: 2px; + flex-shrink: 0; + rotate: ${e=>e.isImproving?"-90deg":"90deg"}; +`,_e=c().span` + color: ${e=>e.isImproving?"#69AB56":"#DC3332"}; + font-size: 13px; + font-weight: 600; + line-height: 20px; + margin-right: 2px; + margin-left: 12px; +`,Te=c().td` + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,xe=c().td` + padding-left: 2px !important; +`,Se=c().td.attrs({className:"yoast-table--nopadding"})` + & > div { + justify-content: center; + } +`,Re=c().div` + display: flex; + align-items: center; + & > a { + box-sizing: border-box; + } +`,Ce=c().button` + background: none; + color: inherit; + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; + display: flex; + align-items: center; +`,Ie=c().tr` + background-color: ${e=>e.isEnabled?"#FFFFFF":"#F9F9F9"} !important; +`;function Le(e){return Math.round(100*e)}function Ae({chartData:t}){if((0,i.isEmpty)(t)||(0,i.isEmpty)(t.position))return"?";const s=function(e){return Array.from({length:e.position.history.length},((e,t)=>t+1)).map((e=>(0,k.sprintf)((0,k._n)("%d day","%d days",e,"wordpress-seo"),e)))}(t),n=t.position.history.map(((e,t)=>({x:t,y:101-e.value})));return(0,e.createElement)(Ee,{width:66,height:24,data:n,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",mapChartDataToTableData:Le,dataTableCaption:(0,k.__)("Keyphrase position in the last 90 days on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:s})}Ae.propTypes={chartData:o().object},Ae.defaultProps={chartData:{}};const Pe=({rowData:t})=>{var s;if(null==t||null===(s=t.position)||void 0===s||!s.change)return(0,e.createElement)(Ae,{chartData:t});const r=t.position.change<0;return(0,e.createElement)(n.Fragment,null,(0,e.createElement)(Ae,{chartData:t}),(0,e.createElement)(_e,{isImproving:r},Math.abs(t.position.change)),(0,e.createElement)(ke,{icon:"caret-right",color:r?"#69AB56":"#DC3332",size:"14px",isImproving:r}))};function Fe(t){var s;const{keyphrase:r,rowData:a,onTrackKeyphrase:o,onUntrackKeyphrase:l,isFocusKeyphrase:c,isDisabled:d,isLoading:u,isSelected:p,onSelectKeyphrases:m}=t,h=!(0,i.isEmpty)(a),y=!(0,i.isEmpty)(null==a||null===(s=a.position)||void 0===s?void 0:s.history),f=(0,n.useCallback)((()=>{d||(h?l(r,a.id):o(r))}),[r,o,l,h,a,d]),b=(0,n.useCallback)((()=>{m((e=>p?e.filter((e=>e!==r)):e.concat(r)))}),[m,p,r]);return(0,e.createElement)(Ie,{isEnabled:h},(0,e.createElement)(Te,null,y&&(0,e.createElement)(g.Checkbox,{id:"select-"+r,onChange:b,checked:p,label:""})),(0,e.createElement)(xe,null,r,c&&(0,e.createElement)("span",null,"*")),function(t){const{rowData:s,websiteId:r,keyphrase:a,onSelectKeyphrases:o}=t,l=(0,n.useCallback)((()=>{o([a])}),[o,a]),c=!(0,i.isEmpty)(s),d=s&&s.updated_at&&j()(s.updated_at)>=j()().subtract(7,"days"),u=s?(0,k.sprintf)("https://app.wincher.com/websites/%s/keywords?serp=%s&utm_medium=plugin&utm_source=yoast&referer=yoast&partner=yoast",r,s.id):null;return c?d?(0,e.createElement)(n.Fragment,null,(0,e.createElement)("td",null,(0,e.createElement)(Re,null,function(e){return!e||!e.position||e.position.value>100?"> 100":e.position.value}(s),(0,e.createElement)(g.ButtonStyledLink,{variant:"secondary",href:u,style:{height:28,marginLeft:12},rel:"noopener",target:"_blank"},(0,k.__)("View","wordpress-seo")))),(0,e.createElement)("td",{className:"yoast-table--nopadding"},(0,e.createElement)(Ce,{type:"button",onClick:l},(0,e.createElement)(Pe,{rowData:s}))),(0,e.createElement)("td",null,(p=s.updated_at,j()(p).fromNow()))):(0,e.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,e.createElement)(ve,null)):(0,e.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,e.createElement)("i",null,(0,k.__)("Activate tracking to show the ranking position","wordpress-seo")));var p}(t),(0,e.createElement)(Se,null,function({keyphrase:t,isEnabled:s,toggleAction:n,isLoading:r}){return r?(0,e.createElement)(g.SvgIcon,{icon:"loading-spinner"}):(0,e.createElement)(g.Toggle,{id:`toggle-keyphrase-tracking-${t}`,className:"wincher-toggle",isEnabled:s,onSetToggleState:n,showToggleStateLabel:!1})}({keyphrase:r,isEnabled:h,toggleAction:f,isLoading:u})))}Pe.propTypes={rowData:o().object},Fe.propTypes={rowData:o().object,keyphrase:o().string.isRequired,onTrackKeyphrase:o().func,onUntrackKeyphrase:o().func,isFocusKeyphrase:o().bool,isDisabled:o().bool,isLoading:o().bool,websiteId:o().string,isSelected:o().bool.isRequired,onSelectKeyphrases:o().func.isRequired},Fe.defaultProps={rowData:{},onTrackKeyphrase:()=>{},onUntrackKeyphrase:()=>{},isFocusKeyphrase:!1,isDisabled:!1,isLoading:!1,websiteId:""};const Me=(0,M.makeOutboundLink)(),qe=c().span` + display: block; + font-style: italic; + + @media (min-width: 782px) { + display: inline; + position: absolute; + ${(0,M.getDirectionalStyle)("right","left")}: 8px; + } +`,De=c().div` + width: 100%; + overflow-y: auto; +`,Oe=c().th` + pointer-events: ${e=>e.isDisabled?"none":"initial"}; + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,Ne=c().th` + padding-left: 2px !important; +`,$e=e=>{const t=(0,n.useRef)();return(0,n.useEffect)((()=>{t.current=e})),t.current},Be=(0,i.debounce)((async function(e=null,t=null,s=null,n){return await se({path:"yoast/v1/wincher/keyphrases",method:"POST",data:{keyphrases:e,permalink:s,startAt:t},signal:n})}),500,{leading:!0}),Ue=t=>{const{addTrackedKeyphrase:s,isLoggedIn:r,keyphrases:a,permalink:o,removeTrackedKeyphrase:l,setKeyphraseLimitReached:c,setRequestFailed:d,setRequestSucceeded:u,setTrackedKeyphrases:p,setHasTrackedAll:m,trackAll:h,trackedKeyphrases:y,isNewlyAuthenticated:f,websiteId:b,focusKeyphrase:w,newRequest:E,startAt:v,selectedKeyphrases:_,onSelectKeyphrases:T}=t,x=(0,n.useRef)(),S=(0,n.useRef)(),R=(0,n.useRef)(!1),[C,I]=(0,n.useState)([]),L=(0,n.useCallback)((e=>{const t=e.toLowerCase();return y&&!(0,i.isEmpty)(y)&&y.hasOwnProperty(t)?y[t]:null}),[y]),A=(0,n.useMemo)((()=>async()=>{await te((()=>(S.current&&S.current.abort(),S.current="undefined"==typeof AbortController?null:new AbortController,Be(a,v,o,S.current.signal))),(e=>{u(e),p(e.results)}),(e=>{d(e)}))}),[u,d,p,a,o,v]),P=(0,n.useCallback)((async e=>{const t=(Array.isArray(e)?e:[e]).map((e=>e.toLowerCase()));I((e=>[...e,...t])),await te((()=>ne(t)),(e=>{u(e),s(e.results),A()}),(e=>{400===e.status&&e.limit&&c(e.limit),d(e)}),201),I((e=>(0,i.without)(e,...t)))}),[u,d,c,s,A]),F=(0,n.useCallback)((async(e,t)=>{e=e.toLowerCase(),I((t=>[...t,e])),await te((()=>async function(e){return await se({path:"yoast/v1/wincher/keyphrases/untrack",method:"DELETE",data:{keyphraseID:e}})}(t)),(t=>{u(t),l(e)}),(e=>{d(e)})),I((t=>(0,i.without)(t,e)))}),[u,l,d]),M=(0,n.useCallback)((async e=>{E(),await P(e)}),[E,P]),q=$e(o),D=$e(a),O=$e(v),N=o&&v;(0,n.useEffect)((()=>{r&&N&&(o!==q||(0,i.difference)(a,D).length||v!==O)&&A()}),[r,o,q,a,D,A,N,v,O]),(0,n.useEffect)((()=>{if(r&&h&&null!==y){const e=a.filter((e=>!L(e)));e.length&&P(e),m()}}),[r,h,y,P,m,L,a]),(0,n.useEffect)((()=>{f&&!R.current&&(A(),R.current=!0)}),[f,A]),(0,n.useEffect)((()=>{if(r&&!(0,i.isEmpty)(y))return(0,i.filter)(y,(e=>(0,i.isEmpty)(e.updated_at))).length>0&&(x.current=setInterval((()=>{A()}),1e4)),()=>{clearInterval(x.current)}}),[r,y,A]);const $=r&&null===y,B=(0,n.useMemo)((()=>(0,i.isEmpty)(y)?[]:Object.values(y).filter((e=>{var t;return!(0,i.isEmpty)(null==e||null===(t=e.position)||void 0===t?void 0:t.history)})).map((e=>e.keyword))),[y]),U=(0,n.useMemo)((()=>_.length>0&&B.length>0&&B.every((e=>_.includes(e)))),[_,B]),W=(0,n.useCallback)((()=>{T(U?[]:B)}),[T,U,B]),K=(0,n.useMemo)((()=>(0,i.orderBy)(a,[e=>Object.values(y||{}).map((e=>e.keyword)).includes(e)],["desc"])),[a,y]);return a&&!(0,i.isEmpty)(a)&&(0,e.createElement)(n.Fragment,null,(0,e.createElement)(De,null,(0,e.createElement)("table",{className:"yoast yoast-table"},(0,e.createElement)("thead",null,(0,e.createElement)("tr",null,(0,e.createElement)(Oe,{isDisabled:0===B.length},(0,e.createElement)(g.Checkbox,{id:"select-all",onChange:W,checked:U,label:""})),(0,e.createElement)(Ne,{scope:"col",abbr:(0,k.__)("Keyphrase","wordpress-seo")},(0,k.__)("Keyphrase","wordpress-seo")),(0,e.createElement)("th",{scope:"col",abbr:(0,k.__)("Position","wordpress-seo")},(0,k.__)("Position","wordpress-seo")),(0,e.createElement)("th",{scope:"col",abbr:(0,k.__)("Position over time","wordpress-seo")},(0,k.__)("Position over time","wordpress-seo")),(0,e.createElement)("th",{scope:"col",abbr:(0,k.__)("Last updated","wordpress-seo")},(0,k.__)("Last updated","wordpress-seo")),(0,e.createElement)("th",{scope:"col",abbr:(0,k.__)("Tracking","wordpress-seo")},(0,k.__)("Tracking","wordpress-seo")))),(0,e.createElement)("tbody",null,K.map(((t,s)=>(0,e.createElement)(Fe,{key:`trackable-keyphrase-${s}`,keyphrase:t,onTrackKeyphrase:M,onUntrackKeyphrase:F,rowData:L(t),isFocusKeyphrase:t===w.trim().toLowerCase(),websiteId:b,isDisabled:!r,isLoading:$||C.indexOf(t.toLowerCase())>=0,isSelected:_.includes(t),onSelectKeyphrases:T})))))),(0,e.createElement)("p",{style:{marginBottom:0,position:"relative"}},(0,e.createElement)(Me,{href:wpseoAdminGlobalL10n["links.wincher.login"]},(0,k.sprintf)(/* translators: %s expands to Wincher */ +(0,k.__)("Get more insights over at %s","wordpress-seo"),"Wincher")),(0,e.createElement)(qe,null,(0,k.__)("* focus keyphrase","wordpress-seo"))))};Ue.propTypes={addTrackedKeyphrase:o().func.isRequired,isLoggedIn:o().bool,isNewlyAuthenticated:o().bool,keyphrases:o().array,newRequest:o().func.isRequired,removeTrackedKeyphrase:o().func.isRequired,setRequestFailed:o().func.isRequired,setKeyphraseLimitReached:o().func.isRequired,setRequestSucceeded:o().func.isRequired,setTrackedKeyphrases:o().func.isRequired,setHasTrackedAll:o().func.isRequired,trackAll:o().bool,trackedKeyphrases:o().object,websiteId:o().string,permalink:o().string.isRequired,focusKeyphrase:o().string,startAt:o().string,selectedKeyphrases:o().arrayOf(o().string).isRequired,onSelectKeyphrases:o().func.isRequired},Ue.defaultProps={isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],trackAll:!1,websiteId:"",focusKeyphrase:""};const We=Ue,Ke=(0,C.compose)([(0,h.withSelect)((e=>{const{getWincherWebsiteId:t,getWincherTrackableKeyphrases:s,getWincherLoginStatus:n,getWincherPermalink:r,getFocusKeyphrase:a,isWincherNewlyAuthenticated:o,shouldWincherTrackAll:i}=e("yoast-seo/editor");return{focusKeyphrase:a(),keyphrases:s(),isLoggedIn:n(),trackAll:i(),websiteId:t(),isNewlyAuthenticated:o(),permalink:r()}})),(0,h.withDispatch)((e=>{const{setWincherNewRequest:t,setWincherRequestSucceeded:s,setWincherRequestFailed:n,setWincherSetKeyphraseLimitReached:r,setWincherTrackedKeyphrases:a,setWincherTrackingForKeyphrase:o,setWincherTrackAllKeyphrases:i,unsetWincherTrackingForKeyphrase:l}=e("yoast-seo/editor");return{newRequest:()=>{t()},setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{n(e)},setKeyphraseLimitReached:e=>{r(e)},addTrackedKeyphrase:e=>{o(e)},removeTrackedKeyphrase:e=>{l(e)},setTrackedKeyphrases:e=>{a(e)},setHasTrackedAll:()=>{i(!1)}}}))])(We),He=(0,M.makeOutboundLink)(),Ye=(0,M.makeOutboundLink)(),ze=()=>{const t=(0,k.sprintf)((0,k.__)(/* translators: %1$s expands to a link to Wincher, %2$s expands to a link to the keyphrase tracking article on Yoast.com */ +"With %1$s you can track the ranking position of your page in the search results based on your keyphrase(s). %2$s","wordpress-seo"),"{{wincherLink/}}","{{wincherReadMoreLink/}}");return(0,e.createElement)("p",null,(0,V.Z)({mixedString:t,components:{wincherLink:(0,e.createElement)(He,{href:wpseoAdminGlobalL10n["links.wincher.website"]},"Wincher"),wincherReadMoreLink:(0,e.createElement)(Ye,{href:wpseoAdminL10n["shortlinks.wincher.seo_performance"]},(0,k.__)("Read more about keyphrase tracking with Wincher","wordpress-seo"))}}))},je=()=>(0,e.createElement)(g.Alert,{type:"error"},(0,k.__)("No keyphrase has been set. Please set a keyphrase first.","wordpress-seo")),Ve=()=>(0,e.createElement)(g.Alert,{type:"info"},(0,k.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,k.__)("Automatic tracking of keyphrases is enabled. Your keyphrase(s) will automatically be tracked by %s when you publish your post.","wordpress-seo"),"Wincher"));class Ge{constructor(e,t={},s={}){this.url=e,this.origin=new URL(e).origin,this.eventHandlers=Object.assign({success:{type:"",callback:()=>{}},error:{type:"",callback:()=>{}}},t),this.options=Object.assign({height:570,width:340,title:""},s),this.popup=null,this.createPopup=this.createPopup.bind(this),this.messageHandler=this.messageHandler.bind(this),this.getPopup=this.getPopup.bind(this)}createPopup(){const{height:e,width:t,title:s}=this.options,n=["top="+(window.top.outerHeight/2+window.top.screenY-e/2),"left="+(window.top.outerWidth/2+window.top.screenX-t/2),"width="+t,"height="+e,"resizable=1","scrollbars=1","status=0"];this.popup&&!this.popup.closed||(this.popup=window.open(this.url,s,n.join(","))),this.popup&&this.popup.focus(),window.addEventListener("message",this.messageHandler,!1)}async messageHandler(e){const{data:t,source:s,origin:n}=e;n===this.origin&&this.popup===s&&(t.type===this.eventHandlers.success.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.success.callback(t)),t.type===this.eventHandlers.error.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.error.callback(t)))}getPopup(){return this.popup}isClosed(){return!this.popup||this.popup.closed}focus(){this.isClosed()||this.popup.focus()}}const Ze=t=>{const s=(0,k.sprintf)(/* translators: %s expands to a link to open the Wincher login popup. */ +(0,k.__)("It seems like something went wrong when retrieving your website's data. Please %s and try again.","wordpress-seo"),"{{reconnectToWincher/}}","Wincher");return(0,e.createElement)(g.Alert,{type:"error",className:t.className},(0,V.Z)({mixedString:s,components:{reconnectToWincher:(0,e.createElement)("a",{href:"#",onClick:e=>{e.preventDefault(),t.onReconnect()}},(0,k.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,k.__)("reconnect to %s","wordpress-seo"),"Wincher"))}}))};Ze.propTypes={onReconnect:o().func.isRequired,className:o().string},Ze.defaultProps={className:""};const Xe=Ze,Qe=()=>(0,e.createElement)(g.Alert,{type:"error"},(0,k.__)("Before you can track your SEO performance make sure to set either the post’s title and save it as a draft or manually set the post’s slug.","wordpress-seo")),Je=window.yoast["chart.js"],et="label";function tt(e,t){"function"==typeof e?e(t):e&&(e.current=t)}function st(e,t){e.labels=t}function nt(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:et;const n=[];e.datasets=t.map((t=>{const r=e.datasets.find((e=>e[s]===t[s]));return r&&t.data&&!n.includes(r)?(n.push(r),Object.assign(r,t),r):{...t}}))}function rt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:et;const s={labels:[],datasets:[]};return st(s,e.labels),nt(s,e.datasets,t),s}function at(t,s){const{height:n=150,width:r=300,redraw:a=!1,datasetIdKey:o,type:i,data:l,options:c,plugins:d=[],fallbackContent:u,updateMode:p,...m}=t,h=(0,e.useRef)(null),g=(0,e.useRef)(),y=()=>{h.current&&(g.current=new Je.Chart(h.current,{type:i,data:rt(l,o),options:c&&{...c},plugins:d}),tt(s,g.current))},f=()=>{tt(s,null),g.current&&(g.current.destroy(),g.current=null)};return(0,e.useEffect)((()=>{!a&&g.current&&c&&function(e,t){const s=e.options;s&&t&&Object.assign(s,t)}(g.current,c)}),[a,c]),(0,e.useEffect)((()=>{!a&&g.current&&st(g.current.config.data,l.labels)}),[a,l.labels]),(0,e.useEffect)((()=>{!a&&g.current&&l.datasets&&nt(g.current.config.data,l.datasets,o)}),[a,l.datasets]),(0,e.useEffect)((()=>{g.current&&(a?(f(),setTimeout(y)):g.current.update(p))}),[a,c,l.labels,l.datasets,p]),(0,e.useEffect)((()=>{g.current&&(f(),setTimeout(y))}),[i]),(0,e.useEffect)((()=>(y(),()=>f())),[]),e.createElement("canvas",Object.assign({ref:h,role:"img",height:n,width:r},m),u)}const ot=(0,e.forwardRef)(at);function it(t,s){return Je.Chart.register(s),(0,e.forwardRef)(((s,n)=>e.createElement(ot,Object.assign({},s,{ref:n,type:t}))))}const lt=it("line",Je.LineController),ct={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Je._adapters._date.override("function"==typeof j()?{_id:"moment",formats:function(){return ct},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=j()(e,t):e instanceof j()||(e=j()(e)),e.isValid()?e.valueOf():null},format:function(e,t){return j()(e).format(t)},add:function(e,t,s){return j()(e).add(t,s).valueOf()},diff:function(e,t,s){return j()(e).diff(j()(t),s)},startOf:function(e,t,s){return e=j()(e),"isoWeek"===t?(s=Math.trunc(Math.min(Math.max(0,s),6)),e.isoWeekday(s).startOf("day").valueOf()):e.startOf(t).valueOf()},endOf:function(e,t){return j()(e).endOf(t).valueOf()}}:{}),Math.PI,Number.POSITIVE_INFINITY,Math.log10,Math.sign,"undefined"==typeof window||window.requestAnimationFrame,new Map,Object.create(null),Object.create(null),Number.EPSILON;const dt=["top","right","bottom","left"];function ut(e,t,s){const n={};s=s?"-"+s:"";for(let r=0;r<4;r++){const a=dt[r];n[a]=parseFloat(e[t+"-"+a+s])||0}return n.width=n.left+n.right,n.height=n.top+n.bottom,n}!function(){let e=!1;try{const t={get passive(){return e=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}}(),Je.Chart.register(Je.CategoryScale,Je.LineController,Je.LineElement,Je.PointElement,Je.LinearScale,Je.TimeScale,Je.Legend,Je.Tooltip);const pt=["#ff983b","#ffa3f7","#3798ff","#ff3b3b","#acce81","#b51751","#3949ab","#26c6da","#ccb800","#de66ff","#4db6ac","#ffab91","#45f5f1","#77f210","#90a4ae","#ffd54f","#006b5e","#8ec7d2","#b1887c","#cc9300"];function mt({datasets:t,isChartShown:s,keyphrases:r}){if(!s)return null;const a=(0,n.useMemo)((()=>Object.fromEntries([...r].sort().map(((e,t)=>[e,pt[t%pt.length]])))),[r]),o=t.map((e=>{const t=a[e.label];return{...e,data:e.data.map((({datetime:e,value:t})=>({x:e,y:t}))),lineTension:0,pointRadius:1,pointHoverRadius:4,borderWidth:2,pointHitRadius:6,backgroundColor:t,borderColor:t}})).filter((e=>!1!==e.selected));return(0,e.createElement)(lt,{height:100,data:{datasets:o},options:{plugins:{legend:{display:!0,position:"bottom",labels:{color:"black",usePointStyle:!0,boxHeight:7,boxWidth:7},onClick:i.noop},tooltip:{enabled:!0,callbacks:{title:e=>j()(e[0].raw.x).utc().format("YYYY-MM-DD")},titleAlign:"center",mode:"xPoint",position:"nearest",usePointStyle:!0,boxHeight:7,boxWidth:7,boxPadding:2}},scales:{x:{bounds:"ticks",type:"time",time:{unit:"day",minUnit:"day"},grid:{display:!1},ticks:{autoSkipPadding:50,maxRotation:0,color:"black"}},y:{bounds:"ticks",offset:!0,reverse:!0,ticks:{precision:0,color:"black"},max:101}}}})}Je.Interaction.modes.xPoint=(e,t,s,n)=>{const r=function(e,t){if("native"in e)return e;const{canvas:s,currentDevicePixelRatio:n}=t,r=(m=s).ownerDocument.defaultView.getComputedStyle(m,null),a="border-box"===r.boxSizing,o=ut(r,"padding"),i=ut(r,"border","width"),{x:l,y:c,box:d}=function(e,t){const s=e.touches,n=s&&s.length?s[0]:e,{offsetX:r,offsetY:a}=n;let o,i,l=!1;if(((e,t,s)=>(e>0||t>0)&&(!s||!s.shadowRoot))(r,a,e.target))o=r,i=a;else{const e=t.getBoundingClientRect();o=n.clientX-e.left,i=n.clientY-e.top,l=!0}return{x:o,y:i,box:l}}(e,s),u=o.left+(d&&i.left),p=o.top+(d&&i.top);var m;let{width:h,height:g}=t;return a&&(h-=o.width+i.width,g-=o.height+i.height),{x:Math.round((l-u)/h*s.width/n),y:Math.round((c-p)/g*s.height/n)}}(t,e);let a=[];if(Je.Interaction.evaluateInteractionItems(e,"x",r,((e,t,s)=>{e.inXRange(r.x,n)&&a.push({element:e,datasetIndex:t,index:s})})),0===a.length)return a;const o=a.reduce(((e,t)=>Math.abs(r.x-e.element.x)e.element.x===o)),a.some((e=>Math.abs(e.element.y-r.y)<10))?a:[]},mt.propTypes={datasets:o().arrayOf(o().shape({label:o().string.isRequired,data:o().arrayOf(o().shape({datetime:o().string.isRequired,value:o().number.isRequired})).isRequired,selected:o().bool})).isRequired,isChartShown:o().bool.isRequired,keyphrases:o().array.isRequired};const ht=({response:t,onLogin:s})=>[401,403,404].includes(t.status)?(0,e.createElement)(Xe,{onReconnect:s}):(0,e.createElement)(Q,null);ht.propTypes={response:o().object.isRequired,onLogin:o().func.isRequired};const gt=({isSuccess:t,response:s,allKeyphrasesMissRanking:n,onLogin:r,keyphraseLimitReached:a,limit:o})=>a?(0,e.createElement)(X,{limit:o}):(0,i.isEmpty)(s)||t?n?(0,e.createElement)(ye,null):null:(0,e.createElement)(ht,{response:s,onLogin:r});gt.propTypes={isSuccess:o().bool.isRequired,allKeyphrasesMissRanking:o().bool.isRequired,response:o().object,onLogin:o().func.isRequired,keyphraseLimitReached:o().bool.isRequired,limit:o().number.isRequired},gt.defaultProps={response:{}};let yt=null;const ft=async e=>{if(yt&&!yt.isClosed())return void yt.focus();const{url:t}=await async function(){return await se({path:"yoast/v1/wincher/authorization-url",method:"GET"})}();yt=new Ge(t,{success:{type:"wincher:oauth:success",callback:t=>(async(e,t)=>{const{onAuthentication:s,setRequestSucceeded:n,setRequestFailed:r,keyphrases:a,addTrackedKeyphrase:o,setKeyphraseLimitReached:i}=e;await te((()=>async function(e){const{code:t,websiteId:s}=e;return await se({path:"yoast/v1/wincher/authenticate",method:"POST",data:{code:t,websiteId:s}})}(t)),(async e=>{s(!0,!0,t.websiteId.toString()),n(e);const l=(Array.isArray(a)?a:[a]).map((e=>e.toLowerCase()));await te((()=>ne(l)),(e=>{n(e),o(e.results)}),(e=>{400===e.status&&e.limit&&i(e.limit),r(e)}),201);const c=yt.getPopup();c&&c.close()}),(async e=>r(e)))})(e,t)},error:{type:"wincher:oauth:error",callback:()=>e.onAuthentication(!1,!1)}},{title:"Wincher_login",width:500,height:700}),yt.createPopup()},bt=t=>t.isLoggedIn?null:(0,e.createElement)("p",null,(0,e.createElement)(g.NewButton,{onClick:t.onLogin,variant:"primary"},(0,k.sprintf)(/* translators: %s expands to Wincher */ +(0,k.__)("Connect with %s","wordpress-seo"),"Wincher")));bt.propTypes={isLoggedIn:o().bool.isRequired,onLogin:o().func.isRequired};const wt=c().div` + p { + margin: 1em 0; + } +`,Et=c().div` + ${e=>e.isDisabled&&"\n\t\topacity: .5;\n\t\tpointer-events: none;\n\t"}; +`,vt=c().div` + font-weight: var(--yoast-font-weight-bold); + color: var(--yoast-color-label); + font-size: var(--yoast-font-size-default); +`,kt=c().div.attrs({className:"yoast-field-group"})` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 14px; +`,_t=c().div` + margin: 8px 0; +`,Tt=j().utc().startOf("day"),xt=[{name:(0,k.__)("Last day","wordpress-seo"),value:j()(Tt).subtract(1,"days").format(),defaultIndex:1},{name:(0,k.__)("Last week","wordpress-seo"),value:j()(Tt).subtract(1,"week").format(),defaultIndex:2},{name:(0,k.__)("Last month","wordpress-seo"),value:j()(Tt).subtract(1,"month").format(),defaultIndex:3},{name:(0,k.__)("Last year","wordpress-seo"),value:j()(Tt).subtract(1,"year").format(),defaultIndex:0}],St=t=>{const{onSelect:s,selected:n,options:r,isLoggedIn:a}=t;return a?r.length<1?null:(0,e.createElement)("select",{className:"components-select-control__input",id:"wincher-period-picker",value:(null==n?void 0:n.value)||r[0].value,onChange:s},r.map((t=>(0,e.createElement)("option",{key:t.name,value:t.value},t.name)))):null};St.propTypes={onSelect:o().func.isRequired,selected:o().object,options:o().array.isRequired,isLoggedIn:o().bool.isRequired};const Rt=t=>{const{trackedKeyphrases:s,isLoggedIn:r,keyphrases:a,shouldTrackAll:o,permalink:l,historyDaysLimit:c}=t;if(!l&&r)return(0,e.createElement)(Qe,null);if(0===a.length)return(0,e.createElement)(je,null);const d=j()(Tt).subtract(c,"days"),u=xt.filter((e=>j()(e.value).isSameOrAfter(d))),p=(0,i.orderBy)(u,(e=>e.defaultIndex),"desc")[0],[m,h]=(0,n.useState)(p),[g,y]=(0,n.useState)([]),f=g.length>0,b=(0,C.usePrevious)(s);(0,n.useEffect)((()=>{if(!(0,i.isEmpty)(s)&&(0,i.difference)(Object.keys(s),Object.keys(b||[])).length){const e=Object.values(s).map((e=>e.keyword));y(e)}}),[s,b]),(0,n.useEffect)((()=>{h(p)}),[null==p?void 0:p.name]);const w=(0,n.useCallback)((e=>{const t=xt.find((t=>t.value===e.target.value));t&&h(t)}),[h]),E=(0,n.useMemo)((()=>(0,i.isEmpty)(g)||(0,i.isEmpty)(s)?[]:Object.values(s).filter((e=>{var t;return!(null==e||null===(t=e.position)||void 0===t||!t.history)})).map((e=>{var t;return{label:e.keyword,data:e.position.history,selected:g.includes(e.keyword)&&!(0,i.isEmpty)(null===(t=e.position)||void 0===t?void 0:t.history)}}))),[g,s]);return(0,e.createElement)(Et,{isDisabled:!r},(0,e.createElement)("p",null,(0,k.__)("You can enable / disable tracking the SEO performance for each keyphrase below.","wordpress-seo")),r&&o&&(0,e.createElement)(Ve,null),(0,e.createElement)(kt,null,(0,e.createElement)(St,{selected:m,onSelect:w,options:u,isLoggedIn:r})),(0,e.createElement)(_t,null,(0,e.createElement)(mt,{isChartShown:f,datasets:E,keyphrases:a})),(0,e.createElement)(Ke,{startAt:null==m?void 0:m.value,selectedKeyphrases:g,onSelectKeyphrases:y,trackedKeyphrases:s}))};function Ct(t){const{isNewlyAuthenticated:s,isLoggedIn:r}=t,a=(0,n.useCallback)((()=>{ft(t)}),[ft,t]),o=ce(r);return(0,e.createElement)(wt,null,s&&(0,e.createElement)(ge,null),r&&(0,e.createElement)(he,{trackingInfo:o}),(0,e.createElement)(vt,null,(0,k.__)("SEO performance","wordpress-seo"),(0,e.createElement)(g.HelpIcon,{linkTo:wpseoAdminL10n["shortlinks.wincher.seo_performance"] +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about the SEO performance feature.","wordpress-seo")})),(0,e.createElement)(ze,null),(0,e.createElement)(bt,{isLoggedIn:r,onLogin:a}),(0,e.createElement)(gt,{...t,onLogin:a}),(0,e.createElement)(Rt,{...t,historyDaysLimit:(null==o?void 0:o.historyDays)||31}))}Rt.propTypes={trackedKeyphrases:o().object,keyphrases:o().array.isRequired,isLoggedIn:o().bool.isRequired,shouldTrackAll:o().bool.isRequired,permalink:o().string.isRequired,historyDaysLimit:o().number},Ct.propTypes={trackedKeyphrases:o().object,addTrackedKeyphrase:o().func.isRequired,isLoggedIn:o().bool,isNewlyAuthenticated:o().bool,keyphrases:o().array,response:o().object,shouldTrackAll:o().bool,permalink:o().string,historyDaysLimit:o().number},Ct.defaultProps={trackedKeyphrases:null,isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],response:{},shouldTrackAll:!1,permalink:"",historyDaysLimit:0};const It=(0,C.compose)([(0,h.withSelect)((e=>{const{isWincherNewlyAuthenticated:t,getWincherKeyphraseLimitReached:s,getWincherLimit:n,getWincherHistoryDaysLimit:r,getWincherLoginStatus:a,getWincherRequestIsSuccess:o,getWincherRequestResponse:i,getWincherTrackableKeyphrases:l,getWincherTrackedKeyphrases:c,getWincherAllKeyphrasesMissRanking:d,getWincherPermalink:u,shouldWincherAutomaticallyTrackAll:p}=e("yoast-seo/editor");return{keyphrases:l(),trackedKeyphrases:c(),allKeyphrasesMissRanking:d(),isLoggedIn:a(),isNewlyAuthenticated:t(),isSuccess:o(),keyphraseLimitReached:s(),limit:n(),response:i(),shouldTrackAll:p(),permalink:u(),historyDaysLimit:r()}})),(0,h.withDispatch)((e=>{const{setWincherWebsiteId:t,setWincherRequestSucceeded:s,setWincherRequestFailed:n,setWincherTrackingForKeyphrase:r,setWincherSetKeyphraseLimitReached:a,setWincherLoginStatus:o}=e("yoast-seo/editor");return{setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{n(e)},addTrackedKeyphrase:e=>{r(e)},setKeyphraseLimitReached:e=>{a(e)},onAuthentication:(e,s,n)=>{t(n),o(e,s)}}}))])(Ct),Lt=c()(I)` + width: 18px; + height: 18px; + margin: 3px; +`;function At(e){const{keyphrases:t,onNoKeyphraseSet:s,onOpen:n,location:r}=e;if(!t.length){let e=document.querySelector("#focus-keyword-input-metabox");return e||(e=document.querySelector("#focus-keyword-input-sidebar")),e.focus(),void s()}n(r)}function Pt(t){const{location:s,whichModalOpen:r,shouldCloseOnClickOutside:a}=t,o=(0,n.useCallback)((()=>{At(t)}),[At,t]),i=(0,k.__)("Track SEO performance","wordpress-seo"),l=((t=null)=>(0,e.useMemo)((()=>{const e={role:"img","aria-hidden":"true"};return null!==t&&(e.focusable=t?"true":"false"),e}),[t]))();return(0,e.createElement)(n.Fragment,null,r===s&&(0,e.createElement)($,{title:i,onRequestClose:t.onClose,icon:(0,e.createElement)(K,null),additionalClassName:"yoast-wincher-seo-performance-modal yoast-gutenberg-modal__no-padding",shouldCloseOnClickOutside:a},(0,e.createElement)(q,{className:"yoast-gutenberg-modal__content yoast-wincher-seo-performance-modal__content"},(0,e.createElement)(It,null))),"sidebar"===s&&(0,e.createElement)(Y,{id:`wincher-open-button-${s}`,title:i,SuffixHeroIcon:(0,e.createElement)(Lt,{className:"yst-text-slate-500",...l}),onClick:o}),"metabox"===s&&(0,e.createElement)("div",{className:"yst-root"},(0,e.createElement)(F,{id:`wincher-open-button-${s}`,onClick:o},(0,e.createElement)(F.Text,null,i),(0,e.createElement)(I,{className:"yst-h-5 yst-w-5 yst-text-slate-500",...l}))))}Pt.propTypes={location:o().string,whichModalOpen:o().oneOf(["none","metabox","sidebar","postpublish"]),shouldCloseOnClickOutside:o().bool,keyphrases:o().array.isRequired,onNoKeyphraseSet:o().func.isRequired,onOpen:o().func.isRequired,onClose:o().func.isRequired},Pt.defaultProps={location:"",whichModalOpen:"none",shouldCloseOnClickOutside:!0};const Ft=(0,C.compose)([(0,h.withSelect)((e=>{const{getWincherModalOpen:t,getWincherTrackableKeyphrases:s}=e("yoast-seo/editor");return{keyphrases:s(),whichModalOpen:t()}})),(0,h.withDispatch)((e=>{const{setWincherOpenModal:t,setWincherDismissModal:s,setWincherNoKeyphrase:n}=e("yoast-seo/editor");return{onOpen:e=>{t(e)},onClose:()=>{s()},onNoKeyphraseSet:()=>{n()}}}))])(Pt),Mt=window.yoast.externals.components;function qt(){return(0,C.createHigherOrderComponent)((function(e){return(0,C.pure)((function(t){const s=(0,n.useContext)(d.LocationContext);return(0,n.createElement)(e,{...t,location:s})}))}),"withLocation")}const Dt=(0,C.compose)([(0,h.withSelect)((e=>{const{isCornerstoneContent:t}=e("yoast-seo/editor");return{isCornerstone:t(),learnMoreUrl:wpseoAdminL10n["shortlinks.cornerstone_content_info"]}})),(0,h.withDispatch)((e=>{const{toggleCornerstoneContent:t}=e("yoast-seo/editor");return{onChange:t}})),qt()])(Mt.CollapsibleCornerstone),Ot=window.yoast.searchMetadataPreviews,Nt=c()(g.StyledSection)` + &${g.StyledSectionBase} { + padding: 0; + + & ${g.StyledHeading} { + ${(0,M.getDirectionalStyle)("padding-left","padding-right")}: 20px; + margin-left: ${(0,M.getDirectionalStyle)("0","20px")}; + } + } +`,$t=({children:t,title:s,icon:n,hasPaperStyle:r,shoppingData:a})=>(0,e.createElement)(Nt,{headingLevel:3,headingText:s,headingIcon:n,headingIconColor:"#555",hasPaperStyle:r,shoppingData:a},t);$t.propTypes={children:o().element,title:o().string,icon:o().string,hasPaperStyle:o().bool,shoppingData:o().object},$t.defaultProps={hasPaperStyle:!0,shoppingData:null};const Bt=$t,Ut=window.wp.sanitize,Wt="SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLE";function Kt(e,t,s="",n=!1){const r="string"==typeof t?(0,M.decodeHTML)(t):t;return{type:Wt,name:e,value:r,label:s,hidden:n}}function Ht(e){return e.charAt(0).toUpperCase()+e.slice(1)}const{stripHTMLTags:Yt}=M.strings,zt=["slug","content","contentImage","snippetPreviewImageURL"];function jt(e,t="_"){return e.replace(/\s/g,t)}const Vt=(0,i.memoize)(((e,t)=>0===e?i.noop:(0,i.debounce)((s=>t(s,e)),500))),Gt=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),Zt=({link:t,text:s})=>(0,e.createElement)(m.Root,null,(0,e.createElement)("p",null,s),(0,e.createElement)(m.Button,{href:t,as:"a",className:"yst-gap-2 yst-mb-5 yst-mt-2",variant:"upsell",target:"_blank",rel:"noopener"},(0,e.createElement)(Gt,{className:"yst-w-4 yst-h-4 yst--ml-1 yst-shrink-0"}),(0,k.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,k.__)("Unlock with %1$s","wordpress-seo"),"Yoast WooCommerce SEO")));Zt.propTypes={link:o().string.isRequired,text:o().string.isRequired};const Xt=Zt,Qt=function(e,t){let s=0;return t.shortenedBaseUrl&&"string"==typeof t.shortenedBaseUrl&&(s=t.shortenedBaseUrl.length),e.url=e.url.replace(/\s+/g,"-"),"-"===e.url[e.url.length-1]&&(e.url=e.url.slice(0,-1)),"-"===e.url[s]&&(e.url=e.url.slice(0,s)+e.url.slice(s+1)),function(e){const t=(0,i.get)(window,["YoastSEO","app","pluggable"],!1);if(!t||!(0,i.get)(window,["YoastSEO","app","pluggable","loaded"],!1))return function(e){const t=(0,i.get)(window,["YoastSEO","wp","replaceVarsPlugin","replaceVariables"],i.identity);return{url:e.url,title:Yt(t(e.title)),description:Yt(t(e.description)),filteredSEOTitle:e.filteredSEOTitle?Yt(t(e.filteredSEOTitle)):""}}(e);const s=t._applyModifications.bind(t);return{url:e.url,title:Yt(s("data_page_title",e.title)),description:Yt(s("data_meta_desc",e.description)),filteredSEOTitle:e.filteredSEOTitle?Yt(s("data_page_title",e.filteredSEOTitle)):""}}(e)},Jt=(0,C.compose)([(0,h.withSelect)((function(e){const{getBaseUrlFromSettings:t,getDateFromSettings:s,getFocusKeyphrase:n,getRecommendedReplaceVars:r,getReplaceVars:a,getShoppingData:o,getSiteIconUrlFromSettings:i,getSnippetEditorData:l,getSnippetEditorMode:c,getSnippetEditorPreviewImageUrl:d,getSnippetEditorWordsToHighlight:u,isCornerstoneContent:p,getIsTerm:m,getContentLocale:h,getSiteName:g}=e("yoast-seo/editor"),y=a();return y.forEach((e=>{""!==e.value||["title","excerpt","excerpt_only"].includes(e.name)||(e.value="%%"+e.name+"%%")})),{baseUrl:t(),data:l(),date:s(),faviconSrc:i(),keyword:n(),mobileImageSrc:d(),mode:c(),recommendedReplacementVariables:r(),replacementVariables:y,shoppingData:o(),wordsToHighlight:u(),isCornerstone:p(),isTaxonomy:m(),locale:h(),siteName:g()}})),(0,h.withDispatch)((function(e,t,{select:s}){const{updateData:n,switchMode:r,updateAnalysisData:a,findCustomFields:o}=e("yoast-seo/editor"),i=e("core/editor"),l=s("yoast-seo/editor").getPostId();return{onChange:(e,t)=>{switch(e){case"mode":r(t);break;case"slug":n({slug:t}),i&&i.editPost({slug:t});break;default:n({[e]:t})}},onChangeAnalysisData:a,onReplacementVariableSearchChange:Vt(l,o)}}))])((t=>{const s=(0,i.get)(window,"wpseoScriptData.metabox.woocommerceUpsellGooglePreviewLink",""),n=(0,i.get)(window,"wpseoScriptData.woocommerceUpsell",""),r=(0,k.__)("Want an enhanced Google preview of how your WooCommerce products look in the search results?","wordpress-seo");return(0,e.createElement)(d.LocationConsumer,null,(a=>(0,e.createElement)(Bt,{icon:"eye",hasPaperStyle:t.hasPaperStyle},(0,e.createElement)(e.Fragment,null,n&&(0,e.createElement)(Xt,{link:s,text:r}),(0,e.createElement)(Ot.SnippetEditor,{...t,descriptionPlaceholder:(0,k.__)("Please provide a meta description by editing the snippet below.","wordpress-seo"),mapEditorDataToPreview:Qt,showCloseButton:!1,idSuffix:a})))))})),es=(0,h.withSelect)((e=>{const{getWarningMessage:t}=e("yoast-seo/editor");return{message:t()}}))(g.Warning),ts=window.yoast.featureFlag,ss=c()(g.Collapsible)` + h2 > button { + padding-left: 24px; + padding-top: 16px; + + &:hover { + background-color: #f0f0f0; + } + } + + div[class^="collapsible_content"] { + padding: 24px 0; + margin: 0 24px; + border-top: 1px solid rgba(0,0,0,0.2); + } + +`,ns=t=>(0,e.createElement)(ss,{hasPadding:!0,hasSeparator:!0,...t}),rs=()=>{const t=(0,h.useSelect)((e=>e("yoast-seo/editor").getEstimatedReadingTime()),[]),s=(0,n.useMemo)((()=>(0,i.get)(window,"wpseoAdminL10n.shortlinks-insights-estimated_reading_time","")),[]);return(0,e.createElement)(g.InsightsCard,{amount:t,unit:(0,k._n)("minute","minutes",t,"wordpress-seo"),title:(0,k.__)("Reading time","wordpress-seo"),linkTo:s +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about reading time","wordpress-seo")})},as=(0,M.makeOutboundLink)();function os(t,s,n){const r=function(e){switch(e){case f.DIFFICULTY.FAIRLY_DIFFICULT:case f.DIFFICULTY.DIFFICULT:case f.DIFFICULTY.VERY_DIFFICULT:return(0,k.__)("Try to make shorter sentences, using less difficult words to improve readability","wordpress-seo");case f.DIFFICULTY.NO_DATA:return(0,k.__)("Continue writing to get insight into the readability of your text!","wordpress-seo");default:return(0,k.__)("Good job!","wordpress-seo")}}(s);return(0,e.createElement)("span",null,function(e,t){return-1===e?(0,k.sprintf)((0,k.__)("Your text should be slightly longer to calculate your Flesch reading ease score.","wordpress-seo")):(0,k.sprintf)( +/* Translators: %1$s expands to the numeric Flesch reading ease score, + %2$s expands to the easiness of reading (e.g. 'easy' or 'very difficult'). + */ +(0,k.__)("The copy scores %1$s in the test, which is considered %2$s to read.","wordpress-seo"),e,function(e){switch(e){case f.DIFFICULTY.NO_DATA:return(0,k.__)("no data","wordpress-seo");case f.DIFFICULTY.VERY_EASY:return(0,k.__)("very easy","wordpress-seo");case f.DIFFICULTY.EASY:return(0,k.__)("easy","wordpress-seo");case f.DIFFICULTY.FAIRLY_EASY:return(0,k.__)("fairly easy","wordpress-seo");case f.DIFFICULTY.OKAY:return(0,k.__)("okay","wordpress-seo");case f.DIFFICULTY.FAIRLY_DIFFICULT:return(0,k.__)("fairly difficult","wordpress-seo");case f.DIFFICULTY.DIFFICULT:return(0,k.__)("difficult","wordpress-seo");case f.DIFFICULTY.VERY_DIFFICULT:return(0,k.__)("very difficult","wordpress-seo")}}(t))}(t,s)," ",s>=f.DIFFICULTY.FAIRLY_DIFFICULT?(0,e.createElement)(as,{href:n},r+"."):r)}const is=()=>{let t=(0,h.useSelect)((e=>e("yoast-seo/editor").getFleschReadingEaseScore()),[]);const s=(0,n.useMemo)((()=>(0,i.get)(window,"wpseoAdminL10n.shortlinks-insights-flesch_reading_ease","")),[]),r=(0,h.useSelect)((e=>e("yoast-seo/editor").getFleschReadingEaseDifficulty()),[t]),a=(0,n.useMemo)((()=>{const e=(0,i.get)(window,"wpseoAdminL10n.shortlinks-insights-flesch_reading_ease_article","");return os(t,r,e)}),[t,r]);return-1===t&&(t="?"),(0,e.createElement)(g.InsightsCard,{amount:t,unit:(0,k.__)("out of 100","wordpress-seo"),title:(0,k.__)("Flesch reading ease","wordpress-seo"),linkTo:s +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about Flesch reading ease","wordpress-seo"),description:a})};let ls,cs,ds,us;const ps=/<(\/)?(\w+)\s*(\/)?>/g;function ms(e,t,s,n,r){return{element:e,tokenStart:t,tokenLength:s,prevOffset:n,leadingTextStart:r,children:[]}}function hs(){const e=ls.length-cs;0!==e&&ds.push(ls.substring(cs,cs+e))}function gs(e){const{element:t,tokenStart:s,tokenLength:r,prevOffset:a,children:o}=e,i=us[us.length-1],l=ls.substring(i.prevOffset,s);l&&i.children.push(l),i.children.push((0,n.cloneElement)(t,null,...o)),i.prevOffset=a||s+r}function ys(e){const t=function(){const e=ps.exec(ls);if(null===e)return["no-more-tokens"];const t=e.index,[s,n,r,a]=e,o=s.length;return a?["self-closed",r,t,o]:n?["closer",r,t,o]:["opener",r,t,o]}(),[s,r,a,o]=t,i=us.length,l=a>cs?cs:null;if(!e[r])return hs(),!1;switch(s){case"no-more-tokens":if(0!==i){const{leadingTextStart:e,tokenStart:t}=us.pop();ds.push(ls.substring(e,e+t))}return hs(),!1;case"self-closed":return 0===i?(null!==l&&ds.push(ls.substring(l,a)),ds.push(e[r]),cs=a+o,!0):(gs(ms(e[r],a,o)),cs=a+o,!0);case"opener":return us.push(ms(e[r],a,o,a+o,l)),cs=a+o,!0;case"closer":if(1===i)return function(e){const{element:t,leadingTextStart:s,prevOffset:r,tokenStart:a,children:o}=us.pop(),i=e?ls.substring(r,e):ls.substring(r);i&&o.push(i),null!==s&&ds.push(ls.substring(s,a)),ds.push((0,n.cloneElement)(t,null,...o))}(a),cs=a+o,!0;const t=us.pop(),s=ls.substring(t.prevOffset,a);t.children.push(s),t.prevOffset=a+o;const c=ms(t.element,t.tokenStart,t.tokenLength,a+o);return c.children=t.children,gs(c),cs=a+o,!0;default:return hs(),!1}}const fs=(e,t)=>{if(ls=e,cs=0,ds=[],us=[],ps.lastIndex=0,!(e=>{const t="object"==typeof e,s=t&&Object.values(e);return t&&s.length&&s.every((e=>(0,n.isValidElement)(e)))})(t))throw new TypeError("The conversionMap provided is not valid. It must be an object with values that are WPElements");do{}while(ys(t));return(0,n.createElement)(n.Fragment,null,...ds)},bs=({data:t,itemScreenReaderText:s,className:r,...a})=>{const o=(0,n.useMemo)((()=>{var e,s;return null!==(e=null===(s=(0,i.maxBy)(t,"number"))||void 0===s?void 0:s.number)&&void 0!==e?e:0}),[t]);return(0,e.createElement)("ul",{className:A()("yoast-data-model",r),...a},t.map((({name:t,number:n})=>(0,e.createElement)("li",{key:`${t}_dataItem`,style:{"--yoast-width":n/o*100+"%"}},t,(0,e.createElement)("span",null,n),s&&(0,e.createElement)("span",{className:"screen-reader-text"},(0,k.sprintf)(s,n))))))};bs.propTypes={data:o().arrayOf(o().shape({name:o().string.isRequired,number:o().number.isRequired})),itemScreenReaderText:o().string,className:o().string},bs.defaultProps={data:[],itemScreenReaderText:"",className:""};const ws=bs,Es=window.wp.url,vs=(0,M.makeOutboundLink)(),ks=({location:t})=>{const s=(0,h.useSelect)((e=>{var t,s;return null===(t=null===(s=e("yoast-seo-premium/editor"))||void 0===s?void 0:s.getPreference("isProminentWordsAvailable",!1))||void 0===t||t}),[]),r=(0,h.useSelect)((e=>e("yoast-seo/editor").getPreference("shouldUpsell",!1)),[]),a=(0,n.useMemo)((()=>(0,i.get)(window,`wpseoAdminL10n.shortlinks-insights-upsell-${t}-prominent_words`,"")),[t]),o=(0,n.useMemo)((()=>{const t=(0,i.get)(window,"wpseoAdminL10n.shortlinks-insights-keyword_research_link","");return fs((0,k.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,k.__)("Read our %1$sultimate guide to keyword research%2$s to learn more about keyword research and keyword strategy.","wordpress-seo"),"",""),{a:(0,e.createElement)(vs,{href:t})})}),[]),l=(0,n.useMemo)((()=>fs((0,k.sprintf)( +// translators: %1$s expands to a starting `b` tag, %1$s expands to a closing `b` tag and %3$s expands to `Yoast SEO Premium`. +(0,k.__)("With %1$s%3$s%2$s, this section will show you which words occur most often in your text. By checking these prominent words against your intended keyword(s), you'll know how to edit your text to be more focused.","wordpress-seo"),"","","Yoast SEO Premium"),{b:(0,e.createElement)("b",null)})),[]),c=(0,h.useSelect)((e=>{var t,s;return null!==(t=null===(s=e("yoast-seo-premium/editor"))||void 0===s?void 0:s.getProminentWords())&&void 0!==t?t:[]}),[]),u=(0,n.useMemo)((()=>{const e=(0,k.sprintf)( +// translators: %1$s expands to Yoast SEO Premium. +(0,k.__)("Get %s to enjoy the benefits of prominent words","wordpress-seo"),"Yoast SEO Premium").split(/\s+/);return e.map(((t,s)=>({name:t,number:e.length-s})))}),[]),p=(0,n.useMemo)((()=>r?u:c.map((({word:e,occurrence:t})=>({name:e,number:t})))),[c,u]);if(!s)return null;const{locationContext:m}=(0,d.useRootContext)();return(0,e.createElement)("div",{className:"yoast-prominent-words"},(0,e.createElement)("div",{className:"yoast-field-group__title"},(0,e.createElement)("b",null,(0,k.__)("Prominent words","wordpress-seo"))),!r&&(0,e.createElement)("p",null,0===p.length?(0,k.__)("Once you add a bit more copy, we'll give you a list of words that occur the most in the content. These give an indication of what your content focuses on.","wordpress-seo"):(0,k.__)("The following words occur the most in the content. These give an indication of what your content focuses on. If the words differ a lot from your topic, you might want to rewrite your content accordingly.","wordpress-seo")),r&&(0,e.createElement)("p",null,l),r&&(0,e.createElement)(vs,{href:(0,Es.addQueryArgs)(a,{context:m}),"data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2",className:"yoast-button yoast-button-upsell"},(0,k.sprintf)( +// translators: %s expands to `Premium` (part of add-on name). +(0,k.__)("Unlock with %s","wordpress-seo"),"Premium"),(0,e.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,e.createElement)("p",null,o),(0,e.createElement)(ws,{data:p,itemScreenReaderText:/* translators: Hidden accessibility text; %d expands to the number of occurrences. */ +(0,k.__)("%d occurrences","wordpress-seo"),"aria-label":(0,k.__)("Prominent words","wordpress-seo"),className:r?"yoast-data-model--upsell":null}))};ks.propTypes={location:o().string.isRequired};const _s=ks,Ts=()=>{const t=(0,h.useSelect)((e=>e("yoast-seo/editor").getTextLength()),[]),s=(0,n.useMemo)((()=>(0,i.get)(window,"wpseoAdminL10n.shortlinks-insights-word_count","")),[]);let r=(0,k._n)("word","words",t.count,"wordpress-seo"),a=(0,k.__)("Word count","wordpress-seo"),o=(0,k.__)("Learn more about word count","wordpress-seo");return"character"===t.unit&&(r=(0,k._n)("character","characters",t.count,"wordpress-seo"),a=(0,k.__)("Character count","wordpress-seo"), +/* translators: Hidden accessibility text. */ +o=(0,k.__)("Learn more about character count","wordpress-seo")),(0,e.createElement)(g.InsightsCard,{amount:t.count,unit:r,title:a,linkTo:s,linkText:o})},xs=(0,M.makeOutboundLink)(),Ss=({location:t})=>{const s=(0,n.useMemo)((()=>(0,i.get)(window,`wpseoAdminL10n.shortlinks-insights-upsell-${t}-text_formality`,"")),[t]),r=(0,n.useMemo)((()=>fs((0,k.sprintf)( +// Translators: %1$s expands to a starting `b` tag, %2$s expands to a closing `b` tag and %3$s expands to `Yoast SEO Premium`. +(0,k.__)("%1$s%3$s%2$s will help you assess the formality level of your text.","wordpress-seo"),"","","Yoast SEO Premium"),{b:(0,e.createElement)("b",null)})),[]);return(0,e.createElement)(n.Fragment,null,(0,e.createElement)("div",null,(0,e.createElement)("p",null,r),(0,e.createElement)(xs,{href:s,className:"yoast-button yoast-button-upsell"},(0,k.sprintf)( +// Translators: %s expands to `Premium` (part of add-on name). +(0,k.__)("Unlock with %s","wordpress-seo"),"Premium"),(0,e.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"}))))};Ss.propTypes={location:o().string.isRequired};const Rs=Ss;function Cs(){return(0,i.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}const Is=({location:t,name:s})=>{const n=(0,h.useSelect)((e=>e("yoast-seo/editor").isFormalitySupported()),[]),a=Cs().isPremium,o=a?(0,i.get)(window,"wpseoAdminL10n.shortlinks-insights-text_formality_info_premium",""):(0,i.get)(window,"wpseoAdminL10n.shortlinks-insights-text_formality_info_free",""),l=(0,k.__)("Read more about text formality.","wordpress-seo");return n?(0,e.createElement)("div",{className:"yoast-text-formality"},(0,e.createElement)("div",{className:"yoast-field-group__title"},(0,e.createElement)("b",null,(0,k.__)("Text formality","wordpress-seo")),(0,e.createElement)(g.HelpIcon,{linkTo:o,linkText:l})),a?(0,e.createElement)(r.Slot,{name:s}):(0,e.createElement)(Rs,{location:t})):null};Is.propTypes={location:o().string.isRequired,name:o().string.isRequired};const Ls=Is,As=({location:t})=>{const s=(0,h.useSelect)((e=>e("yoast-seo/editor").isFleschReadingEaseAvailable()),[]);return(0,e.createElement)(ns,{title:(0,k.__)("Insights","wordpress-seo"),id:`yoast-insights-collapsible-${t}`,className:"yoast-insights"},(0,e.createElement)(_s,{location:t}),(0,e.createElement)("div",null,s&&(0,e.createElement)("div",{className:"yoast-insights-row"},(0,e.createElement)(is,null)),(0,e.createElement)("div",{className:"yoast-insights-row yoast-insights-row--columns"},(0,e.createElement)(rs,null),(0,e.createElement)(Ts,null)),(0,ts.isFeatureEnabled)("TEXT_FORMALITY")&&(0,e.createElement)(Ls,{location:t,name:"YoastTextFormalityMetabox"})))};As.propTypes={location:o().string},As.defaultProps={location:"metabox"};const Ps=As,Fs=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z",clipRule:"evenodd"}))})),Ms=()=>[(0,k.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,k.__)("%1$sAI%2$s: Better SEO titles and meta descriptions, faster.","wordpress-seo"),"",""),(0,k.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,k.__)("%1$sMultiple keywords%2$s: Rank higher for more searches.","wordpress-seo"),"",""),(0,k.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,k.__)("%1$sSuper fast%2$s internal linking suggestions.","wordpress-seo"),"",""),(0,k.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,k.__)("%1$sNo more broken links%2$s: Automatic redirect manager.","wordpress-seo"),"",""),(0,k.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,k.__)("%1$sAppealing social previews%2$s people actually want to click on.","wordpress-seo"),"",""),(0,k.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,k.__)("%1$s24/7 support%2$s: Also on evenings and weekends.","wordpress-seo"),"","")],qs=c().div` + padding: 25px 32px 32px; + color: #303030; +`,Ds=c().ul` + margin: 0; + padding: 0; + + li { + list-style-image: var(--yoast-svg-icon-check); + margin: 0.5rem 0 0 1.5rem; + line-height: 1.4em; + + &::marker { + font-size: 1.5rem; + } + } +`,Os=c().span` + display: block; + margin-top: 4px; +`,Ns=c().h2` + margin-top: 0; + margin-bottom: 0.25rem; + color: #303030; + font-size: 0.8125rem; + font-weight: 600; +`,$s=c().p` + display: block; + margin: 0.25rem 0 1rem 0 !important; + max-width: 420px; +`,Bs=c().hr` + margin-top: 1.5rem; + margin-bottom: 1rem; + border-top: 0; + border-bottom: 1px solid #E2E8F0; +`,Us=c().div` + text-align: center; +`,Ws=c().a` + width: 100%; +`,Ks=(0,M.makeOutboundLink)(Ws);class Hs extends n.Component{constructor(e){super(e),this.state={defaultPrice:"99"}}createBenefitsList(t){return t.length>0&&(0,e.createElement)(Ds,{role:"list"},t.map(((t,s)=>(0,e.createElement)("li",{key:`upsell-benefit-${s}`},(0,n.createInterpolateElement)(t,{strong:(0,e.createElement)("strong",null)})))))}render(){const t=(0,h.select)("yoast-seo/editor").isPromotionActive("black-friday-2023-promotion"),{defaultPrice:s}=this.state,r=t?"69.30":null,a=r||s;return(0,e.createElement)(n.Fragment,null,t&&(0,e.createElement)("div",{className:"yst-flex yst-justify-between yst-items-center yst-text-lg yst-content-between yst-bg-black yst-text-amber-300 yst-h-9 yst-border-amber-300 yst-border-y yst-border-x-0 yst-border-solid yst-px-6"},(0,e.createElement)("div",null,(0,k.__)("BLACK FRIDAY","wordpress-seo")),(0,e.createElement)("div",null,(0,k.__)("30% OFF","wordpress-seo"))),(0,e.createElement)(qs,null,(0,e.createElement)(Ns,null,this.props.title),(0,e.createElement)($s,null,this.props.description),(0,e.createElement)(Us,null,(0,e.createElement)(Ks,{...this.props.upsellButton},this.props.upsellButtonText,this.props.upsellButtonHasCaret&&(0,e.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,e.createElement)("div",{className:"yst-text-slate-600 yst-my-4"},r&&(0,e.createElement)(n.Fragment,null,(0,e.createElement)("span",{className:"yst-text-slate-500 yst-line-through"},s)," "),(0,e.createElement)("span",{className:"yst-text-slate-900 yst-text-2xl yst-font-bold"},a)," ",(0,k.__)("$ USD / € EUR / £ GBP per year (ex. VAT)","wordpress-seo")),(0,e.createElement)(Os,{id:this.props.upsellButton["aria-describedby"]},this.props.upsellButtonLabel)),(0,e.createElement)(Bs,null),(0,e.createElement)(Ns,null,this.props.benefitsTitle),this.createBenefitsList(this.props.benefits)))}}Hs.propTypes={title:o().node,benefits:o().array,benefitsTitle:o().node,description:o().node,upsellButton:o().object,upsellButtonText:o().string.isRequired,upsellButtonLabel:o().string,upsellButtonHasCaret:o().bool},Hs.defaultProps={title:null,description:null,benefits:[],benefitsTitle:null,upsellButton:{href:"",className:"button button-primary"},upsellButtonLabel:"",upsellButtonHasCaret:!0};const Ys=Hs,zs=()=>{const[t,,,s,n]=(0,m.useToggleState)(!1),{locationContext:r}=(0,d.useRootContext)(),a=(0,m.useSvgAria)(),o=r.includes("sidebar"),i=r.includes("metabox"),l=wpseoAdminL10n[o?"shortlinks.upsell.sidebar.internal_linking_suggestions":"shortlinks.upsell.metabox.internal_linking_suggestions"];return(0,e.createElement)(e.Fragment,null,t&&(0,e.createElement)($,{title:(0,k.__)("Get internal linking suggestions","wordpress-seo"),onRequestClose:n,additionalClassName:"",id:"yoast-internal-linking-suggestions-upsell",className:`${O} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,shouldCloseOnClickOutside:!0},(0,e.createElement)(D,null,(0,e.createElement)(Ys,{title:(0,k.__)("Rank higher by connecting your content","wordpress-seo"),description:(0,k.sprintf)(/* translators: %s expands to Yoast SEO Premium. */ +(0,k.__)("%s automatically suggests to what content you can link with easy drag-and-drop functionality, which is good for your SEO!","wordpress-seo"),"Yoast SEO Premium"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,k.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Ms(),upsellButtonText:(0,k.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,k.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:(0,Es.addQueryArgs)(l,{context:r}),className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,k.__)("1 year free support and updates included!","wordpress-seo")}))),o&&(0,e.createElement)(Y,{id:"yoast-internal-linking-suggestions-sidebar-modal-open-button",title:(0,k.__)("Internal linking suggestions","wordpress-seo"),onClick:s},(0,e.createElement)("div",{className:"yst-root"},(0,e.createElement)(m.Badge,{size:"small",variant:"upsell"},(0,e.createElement)(Fs,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...a})))),i&&(0,e.createElement)("div",{className:"yst-root"},(0,e.createElement)(F,{id:"yoast-internal-linking-suggestions-metabox-modal-open-button",onClick:s},(0,e.createElement)(F.Text,null,(0,k.__)("Internal linking suggestions","wordpress-seo")),(0,e.createElement)(m.Badge,{size:"small",variant:"upsell"},(0,e.createElement)(Fs,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...a}),(0,e.createElement)("span",null,"Premium")))))},js=({children:t})=>(0,e.createElement)("div",null,t);js.propTypes={renderPriority:o().number.isRequired,children:o().node.isRequired};const Vs=js,Gs=({noIndex:t,onNoIndexChange:s,editorContext:r,isPrivateBlog:a})=>{const o=(e=>{const t=(0,k.__)("No","wordpress-seo"),s=(0,k.__)("Yes","wordpress-seo"),n=e.noIndex?t:s;return window.wpseoScriptData.isPost?[{name:(0,k.sprintf)(/* translators: the first %s translates to "yes" or "no", the second %s translates to the content type label in plural form */ +(0,k.__)("%s (current default for %s)","wordpress-seo"),n,e.postTypeNamePlural),value:"0"},{name:t,value:"1"},{name:s,value:"2"}]:[{name:(0,k.sprintf)(/* translators: the first %s translates to "yes" or "no", the second %s translates to the content type label in plural form */ +(0,k.__)("%s (current default for %s)","wordpress-seo"),n,e.postTypeNamePlural),value:"default"},{name:s,value:"index"},{name:t,value:"noindex"}]})(r);return(0,e.createElement)(d.LocationConsumer,null,(r=>(0,e.createElement)(n.Fragment,null,a&&(0,e.createElement)(g.Alert,{type:"warning"},(0,k.__)("Even though you can set the meta robots setting here, the entire site is set to noindex in the sitewide privacy settings, so these settings won't have an effect.","wordpress-seo")),(0,e.createElement)(g.Select,{label:(0,k.__)("Allow search engines to show this content in search results?","wordpress-seo"),onChange:s,id:(0,M.join)(["yoast-meta-robots-noindex",r]),options:o,selected:t,linkTo:wpseoAdminL10n["shortlinks.advanced.allow_search_engines"] +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about the no-index setting on our help page.","wordpress-seo")}))))};Gs.propTypes={noIndex:o().string.isRequired,onNoIndexChange:o().func.isRequired,editorContext:o().object.isRequired,isPrivateBlog:o().bool},Gs.defaultProps={isPrivateBlog:!1};const Zs=({noFollow:t,onNoFollowChange:s})=>(0,e.createElement)(d.LocationConsumer,null,(n=>{const r=(0,M.join)(["yoast-meta-robots-nofollow",n]);return(0,e.createElement)(g.RadioButtonGroup,{id:r,options:[{value:"0",label:"Yes"},{value:"1",label:"No"}],label:(0,k.__)("Should search engines follow links on this content?","wordpress-seo"),groupName:r,onChange:s,selected:t,linkTo:wpseoAdminL10n["shortlinks.advanced.follow_links"] +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about the no-follow setting on our help page.","wordpress-seo")})}));Zs.propTypes={noFollow:o().string.isRequired,onNoFollowChange:o().func.isRequired};const Xs=({advanced:t,onAdvancedChange:s})=>(0,e.createElement)(d.LocationConsumer,null,(n=>{const r=(0,M.join)(["yoast-meta-robots-advanced",n]),a=`${r}-input`;return(0,e.createElement)(g.MultiSelect,{label:(0,k.__)("Meta robots advanced","wordpress-seo"),onChange:s,id:r,inputId:a,options:[{name:(0,k.__)("No Image Index","wordpress-seo"),value:"noimageindex"},{name:(0,k.__)("No Archive","wordpress-seo"),value:"noarchive"},{name:(0,k.__)("No Snippet","wordpress-seo"),value:"nosnippet"}],selected:t,linkTo:wpseoAdminL10n["shortlinks.advanced.meta_robots"] +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about advanced meta robots settings on our help page.","wordpress-seo")})}));Xs.propTypes={advanced:o().array.isRequired,onAdvancedChange:o().func.isRequired};const Qs=({breadcrumbsTitle:t,onBreadcrumbsTitleChange:s})=>(0,e.createElement)(d.LocationConsumer,null,(n=>(0,e.createElement)(g.TextInput,{label:(0,k.__)("Breadcrumbs Title","wordpress-seo"),id:(0,M.join)(["yoast-breadcrumbs-title",n]),onChange:s,value:t,linkTo:wpseoAdminL10n["shortlinks.advanced.breadcrumbs_title"] +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about the breadcrumbs title setting on our help page.","wordpress-seo")})));Qs.propTypes={breadcrumbsTitle:o().string.isRequired,onBreadcrumbsTitleChange:o().func.isRequired};const Js=({canonical:t,onCanonicalChange:s})=>(0,e.createElement)(d.LocationConsumer,null,(n=>(0,e.createElement)(g.TextInput,{label:(0,k.__)("Canonical URL","wordpress-seo"),id:(0,M.join)(["yoast-canonical",n]),onChange:s,value:t,linkTo:"https://yoa.st/canonical-url" +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about canonical URLs on our help page.","wordpress-seo")})));Js.propTypes={canonical:o().string.isRequired,onCanonicalChange:o().func.isRequired};const en=t=>{const{noIndex:s,noFollow:r,advanced:a,breadcrumbsTitle:o,canonical:i,onNoIndexChange:l,onNoFollowChange:c,onAdvancedChange:d,onBreadcrumbsTitleChange:u,onCanonicalChange:p,onLoad:m,isLoading:h,editorContext:g,isBreadcrumbsDisabled:y,isPrivateBlog:f}=t;(0,n.useEffect)((()=>{setTimeout((()=>{h&&m()}))}));const b={noIndex:s,onNoIndexChange:l,editorContext:g,isPrivateBlog:f},w={noFollow:r,onNoFollowChange:c},E={advanced:a,onAdvancedChange:d},v={breadcrumbsTitle:o,onBreadcrumbsTitleChange:u},k={canonical:i,onCanonicalChange:p};return h?null:(0,e.createElement)(n.Fragment,null,(0,e.createElement)(Gs,{...b}),g.isPost&&(0,e.createElement)(Zs,{...w}),g.isPost&&(0,e.createElement)(Xs,{...E}),!y&&(0,e.createElement)(Qs,{...v}),(0,e.createElement)(Js,{...k}))};en.propTypes={noIndex:o().string.isRequired,canonical:o().string.isRequired,onNoIndexChange:o().func.isRequired,onCanonicalChange:o().func.isRequired,onLoad:o().func.isRequired,isLoading:o().bool.isRequired,editorContext:o().object.isRequired,isBreadcrumbsDisabled:o().bool.isRequired,isPrivateBlog:o().bool,advanced:o().array,onAdvancedChange:o().func,noFollow:o().string,onNoFollowChange:o().func,breadcrumbsTitle:o().string,onBreadcrumbsTitleChange:o().func},en.defaultProps={advanced:[],onAdvancedChange:()=>{},noFollow:"",onNoFollowChange:()=>{},breadcrumbsTitle:"",onBreadcrumbsTitleChange:()=>{},isPrivateBlog:!1};const tn=en,sn=(0,C.compose)([(0,h.withSelect)((e=>{const{getNoIndex:t,getNoFollow:s,getAdvanced:n,getBreadcrumbsTitle:r,getCanonical:a,getIsLoading:o,getEditorContext:i,getPreferences:l}=e("yoast-seo/editor"),{isBreadcrumbsDisabled:c,isPrivateBlog:d}=l();return{noIndex:t(),noFollow:s(),advanced:n(),breadcrumbsTitle:r(),canonical:a(),isLoading:o(),editorContext:i(),isBreadcrumbsDisabled:c,isPrivateBlog:d}})),(0,h.withDispatch)((e=>{const{setNoIndex:t,setNoFollow:s,setAdvanced:n,setBreadcrumbsTitle:r,setCanonical:a,loadAdvancedSettingsData:o}=e("yoast-seo/editor");return{onNoIndexChange:t,onNoFollowChange:s,onAdvancedChange:n,onBreadcrumbsTitleChange:r,onCanonicalChange:a,onLoad:o}}))])(tn),nn=c().p` + color: #606770; + flex-shrink: 0; + font-size: 12px; + line-height: 16px; + overflow: hidden; + padding: 0; + text-overflow: ellipsis; + text-transform: uppercase; + white-space: nowrap; + margin: 0; + position: ${e=>"landscape"===e.mode?"relative":"static"}; +`,rn=t=>{const{siteUrl:s}=t;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("span",{className:"screen-reader-text"},s),(0,e.createElement)(nn,{"aria-hidden":"true"},(0,e.createElement)("span",null,s)))};rn.propTypes={siteUrl:o().string.isRequired};const an=rn,on=window.yoast.socialMetadataForms,ln=c().img` + && { + max-width: ${e=>e.width}px; + height: ${e=>e.height}px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + max-width: none; + } +`,cn=c().img` + &&{ + height: 100%; + position: absolute; + width: 100%; + object-fit: cover; + } +`,dn=c().div` + padding-bottom: ${e=>e.aspectRatio}%; +`,un=t=>{const{imageProps:s,width:n,height:r,imageMode:a}=t;return"landscape"===a?(0,e.createElement)(dn,{aspectRatio:s.aspectRatio},(0,e.createElement)(cn,{src:s.src,alt:s.alt})):(0,e.createElement)(ln,{src:s.src,alt:s.alt,width:n,height:r,imageProperties:s})};function pn(e,t,s){return"landscape"===s?{widthRatio:t.width/e.landscapeWidth,heightRatio:t.height/e.landscapeHeight}:"portrait"===s?{widthRatio:t.width/e.portraitWidth,heightRatio:t.height/e.portraitHeight}:{widthRatio:t.width/e.squareWidth,heightRatio:t.height/e.squareHeight}}function mn(e,t){return t.widthRatio<=t.heightRatio?{width:Math.round(e.width/t.widthRatio),height:Math.round(e.height/t.widthRatio)}:{width:Math.round(e.width/t.heightRatio),height:Math.round(e.height/t.heightRatio)}}async function hn(e,t,s=!1){const n=await function(e){return new Promise(((t,s)=>{const n=new Image;n.onload=()=>{t({width:n.width,height:n.height})},n.onerror=s,n.src=e}))}(e);let r=s?"landscape":"square";"Facebook"===t&&(r=(0,on.determineFacebookImageMode)(n));const a=function(e){return"Twitter"===e?on.TWITTER_IMAGE_SIZES:on.FACEBOOK_IMAGE_SIZES}(t),o=function(e,t,s){return"square"===s&&t.width===t.height?{width:e.squareWidth,height:e.squareHeight}:mn(t,pn(e,t,s))}(a,n,r);return{mode:r,height:o.height,width:o.width}}async function gn(e,t,s=!1){try{return{imageProperties:await hn(e,t,s),status:"loaded"}}catch(e){return{imageProperties:null,status:"errored"}}}un.propTypes={imageProps:o().shape({src:o().string.isRequired,alt:o().string.isRequired,aspectRatio:o().number.isRequired}).isRequired,width:o().number.isRequired,height:o().number.isRequired,imageMode:o().string},un.defaultProps={imageMode:"landscape"};const yn=c().div` + position: relative; + ${e=>"landscape"===e.mode?`max-width: ${e.dimensions.width}`:`min-width: ${e.dimensions.width}; height: ${e.dimensions.height}`}; + overflow: hidden; + background-color: ${y.colors.$color_white}; +`,fn=c().div` + box-sizing: border-box; + max-width: ${on.FACEBOOK_IMAGE_SIZES.landscapeWidth}px; + height: ${on.FACEBOOK_IMAGE_SIZES.landscapeHeight}px; + background-color: ${y.colors.$color_grey}; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + display: flex; + justify-content: center; + align-items: center; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class bn extends e.Component{constructor(e){super(e),this.state={imageProperties:null,status:"loading"},this.socialMedium="Facebook",this.handleFacebookImage=this.handleFacebookImage.bind(this),this.setState=this.setState.bind(this)}async handleFacebookImage(){try{const e=await gn(this.props.src,this.socialMedium);this.setState(e),this.props.onImageLoaded(e.imageProperties.mode||"landscape")}catch(e){this.setState(e),this.props.onImageLoaded("landscape")}}componentDidUpdate(e){e.src!==this.props.src&&this.handleFacebookImage()}componentDidMount(){this.handleFacebookImage()}retrieveContainerDimensions(e){switch(e){case"square":return{height:on.FACEBOOK_IMAGE_SIZES.squareHeight+"px",width:on.FACEBOOK_IMAGE_SIZES.squareWidth+"px"};case"portrait":return{height:on.FACEBOOK_IMAGE_SIZES.portraitHeight+"px",width:on.FACEBOOK_IMAGE_SIZES.portraitWidth+"px"};case"landscape":return{height:on.FACEBOOK_IMAGE_SIZES.landscapeHeight+"px",width:on.FACEBOOK_IMAGE_SIZES.landscapeWidth+"px"}}}render(){const{imageProperties:t,status:s}=this.state;if("loading"===s||""===this.props.src||"errored"===s)return(0,e.createElement)(fn,{onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,k.__)("Select image","wordpress-seo"));const n=this.retrieveContainerDimensions(t.mode);return(0,e.createElement)(yn,{mode:t.mode,dimensions:n,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave,onClick:this.props.onImageClick},(0,e.createElement)(un,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:on.FACEBOOK_IMAGE_SIZES.aspectRatio},width:t.width,height:t.height,imageMode:t.mode}))}}bn.propTypes={src:o().string,alt:o().string,onImageLoaded:o().func,onImageClick:o().func,onMouseEnter:o().func,onMouseLeave:o().func},bn.defaultProps={src:"",alt:"",onImageLoaded:i.noop,onImageClick:i.noop,onMouseEnter:i.noop,onMouseLeave:i.noop};const wn=bn,En=c().span` + line-height: ${20}px; + min-height : ${20}px; + color: #1d2129; + font-weight: 600; + overflow: hidden; + font-size: 16px; + margin: 3px 0 0; + letter-spacing: normal; + white-space: normal; + flex-shrink: 0; + cursor: pointer; + display: -webkit-box; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; +`,vn=c().p` + line-height: ${16}px; + min-height : ${16}px; + color: #606770; + font-size: 14px; + padding: 0; + text-overflow: ellipsis; + margin: 3px 0 0 0; + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; + + @media all and ( max-width: ${e=>e.maxWidth} ) { + display: none; + } +`,kn=e=>{switch(e){case"landscape":return"527px";case"square":case"portrait":return"369px";default:return"476px"}},Tn=c().div` + box-sizing: border-box; + display: flex; + flex-direction: ${e=>"landscape"===e.mode?"column":"row"}; + background-color: #f2f3f5; + max-width: 527px; +`,xn=c().div` + box-sizing: border-box; + background-color: #f2f3f5; + margin: 0; + padding: 10px 12px; + position: relative; + border-bottom: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-top: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-right: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border: ${e=>"landscape"===e.mode?"1px solid #dddfe2":""}; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: ${e=>"landscape"===e.mode?"flex-start":"center"}; + font-size: 12px; + overflow: hidden; +`;class Sn extends e.Component{constructor(e){super(e),this.state={imageMode:null,maxLineCount:0,descriptionLineCount:0},this.facebookTitleRef=t().createRef(),this.onImageLoaded=this.onImageLoaded.bind(this),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}onImageLoaded(e){this.setState({imageMode:e})}getTitleLineCount(){return this.facebookTitleRef.current.offsetHeight/20}maybeSetMaxLineCount(){const{imageMode:e,maxLineCount:t}=this.state,s="landscape"===e?2:5;s!==t&&this.setState({maxLineCount:s})}maybeSetDescriptionLineCount(){const{descriptionLineCount:e,maxLineCount:t,imageMode:s}=this.state,n=this.getTitleLineCount();let r=t-n;"portrait"===s&&(r=5===n?0:4),r!==e&&this.setState({descriptionLineCount:r})}componentDidUpdate(){this.maybeSetMaxLineCount(),this.maybeSetDescriptionLineCount()}render(){const{imageMode:t,maxLineCount:s,descriptionLineCount:n}=this.state;return(0,e.createElement)(Tn,{id:"facebookPreview",mode:t},(0,e.createElement)(wn,{src:this.props.imageUrl||this.props.imageFallbackUrl,alt:this.props.alt,onImageLoaded:this.onImageLoaded,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),(0,e.createElement)(xn,{mode:t},(0,e.createElement)(an,{siteUrl:this.props.siteUrl,mode:t}),(0,e.createElement)(En,{ref:this.facebookTitleRef,onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle,lineCount:s},this.props.title),n>0&&(0,e.createElement)(vn,{maxWidth:kn(t),onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription,lineCount:n},this.props.description)))}}Sn.propTypes={siteUrl:o().string.isRequired,title:o().string.isRequired,description:o().string,imageUrl:o().string,imageFallbackUrl:o().string,alt:o().string,onSelect:o().func,onImageClick:o().func,onMouseHover:o().func},Sn.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{}};const Rn=Sn,Cn=c().div` + text-transform: lowercase; + color: rgb(83, 100, 113); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + fill: currentcolor; + display: flex; + flex-direction: row; + align-items: flex-end; +`,In=t=>(0,e.createElement)(Cn,null,(0,e.createElement)("span",null,t.siteUrl));In.propTypes={siteUrl:o().string.isRequired};const Ln=In,An=(e,t=!0)=>e?`\n\t\t\tmax-width: ${on.TWITTER_IMAGE_SIZES.landscapeWidth}px;\n\t\t\t${t?"border-bottom: 1px solid #E1E8ED;":""}\n\t\t\tborder-radius: 14px 14px 0 0;\n\t\t\t`:`\n\t\twidth: ${on.TWITTER_IMAGE_SIZES.squareWidth}px;\n\t\t${t?"border-right: 1px solid #E1E8ED;":""}\n\t\tborder-radius: 14px 0 0 14px;\n\t\t`,Pn=c().div` + position: relative; + box-sizing: content-box; + overflow: hidden; + background-color: #e1e8ed; + flex-shrink: 0; + ${e=>An(e.isLarge)} +`,Fn=c().div` + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + max-width: 100%; + margin: 0; + padding: 1em; + text-align: center; + font-size: 1rem; + ${e=>An(e.isLarge,!1)} +`,Mn=c()(Fn)` + ${e=>e.isLarge&&`height: ${on.TWITTER_IMAGE_SIZES.landscapeHeight}px;`} + border-top-left-radius: 14px; + ${e=>e.isLarge?"border-top-right-radius":"border-bottom-left-radius"}: 14px; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class qn extends t().Component{constructor(e){super(e),this.state={status:"loading"},this.socialMedium="Twitter",this.handleTwitterImage=this.handleTwitterImage.bind(this),this.setState=this.setState.bind(this)}async handleTwitterImage(){if(null===this.props.src)return;const e=await gn(this.props.src,this.socialMedium,this.props.isLarge);this.setState(e)}componentDidUpdate(e){e.src!==this.props.src&&this.handleTwitterImage()}componentDidMount(){this.handleTwitterImage()}render(){const{status:t,imageProperties:s}=this.state;return"loading"===t||""===this.props.src||"errored"===t?(0,e.createElement)(Mn,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,k.__)("Select image","wordpress-seo")):(0,e.createElement)(Pn,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,e.createElement)(un,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:on.TWITTER_IMAGE_SIZES.aspectRatio},width:s.width,height:s.height,imageMode:s.mode}))}}qn.propTypes={isLarge:o().bool.isRequired,src:o().string,alt:o().string,onImageClick:o().func,onMouseEnter:o().func,onMouseLeave:o().func},qn.defaultProps={src:"",alt:"",onMouseEnter:i.noop,onImageClick:i.noop,onMouseLeave:i.noop};const Dn=c().div` + display: flex; + flex-direction: column; + padding: 12px; + justify-content: center; + margin: 0; + box-sizing: border-box; + flex: auto; + min-width: 0px; + gap:2px; + > * { + line-height:20px; + min-height:20px; + font-size:15px; + } +`,On=t=>(0,e.createElement)(Dn,null,t.children);On.propTypes={children:o().array.isRequired};const Nn=On,$n=c().p` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(15, 20, 25); + cursor: pointer; +`,Bn=c().p` + max-height: 55px; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(83, 100, 113); + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + + @media all and ( max-width: ${on.TWITTER_IMAGE_SIZES.landscapeWidth}px ) { + display: none; + } +`,Un=c().div` + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", sans-serif; + font-size: 15px; + font-weight: 400; + line-height: 20px; + max-width: 507px; + border: 1px solid #E1E8ED; + box-sizing: border-box; + border-radius: 14px; + color: #292F33; + background: #FFFFFF; + text-overflow: ellipsis; + display: flex; + + &:hover { + background: #f5f8fa; + border: 1px solid rgba(136,153,166,.5); + } +`,Wn=c()(Un)` + flex-direction: column; + max-height: 370px; +`,Kn=c()(Un)` + flex-direction: row; + height: 125px; +`;class Hn extends e.Component{constructor(e){super(e),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}render(){const{isLarge:t,imageUrl:s,imageFallbackUrl:n,alt:r,title:a,description:o,siteUrl:i}=this.props,l=t?Wn:Kn;return(0,e.createElement)(l,{id:"twitterPreview"},(0,e.createElement)(qn,{src:s||n,alt:r,isLarge:t,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),(0,e.createElement)(Nn,null,(0,e.createElement)(Ln,{siteUrl:i}),(0,e.createElement)($n,{onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle},a),(0,e.createElement)(Bn,{onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription},o)))}}Hn.propTypes={siteUrl:o().string.isRequired,title:o().string.isRequired,description:o().string,isLarge:o().bool,imageUrl:o().string,imageFallbackUrl:o().string,alt:o().string,onSelect:o().func,onImageClick:o().func,onMouseHover:o().func},Hn.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{},isLarge:!0};const Yn=Hn,zn=window.yoast.replacementVariableEditor;class jn extends e.Component{constructor(e){super(e),this.state={activeField:"",hoveredField:""},this.SocialPreview="Social"===e.socialMediumName?Rn:Yn,this.setHoveredField=this.setHoveredField.bind(this),this.setActiveField=this.setActiveField.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.setEditorFocus=this.setEditorFocus.bind(this)}setHoveredField(e){e!==this.state.hoveredField&&this.setState({hoveredField:e})}setActiveField(e){e!==this.state.activeField&&this.setState({activeField:e},(()=>this.setEditorFocus(e)))}setEditorFocus(e){switch(e){case"title":this.titleEditorRef.focus();break;case"description":this.descriptionEditorRef.focus()}}setEditorRef(e,t){switch(e){case"title":this.titleEditorRef=t;break;case"description":this.descriptionEditorRef=t}}render(){const{onDescriptionChange:s,onTitleChange:n,onSelectImageClick:r,onRemoveImageClick:a,socialMediumName:o,imageWarnings:i,siteUrl:l,description:c,descriptionInputPlaceholder:d,descriptionPreviewFallback:u,imageUrl:p,imageFallbackUrl:m,alt:h,title:y,titleInputPlaceholder:f,titlePreviewFallback:b,replacementVariables:w,recommendedReplacementVariables:E,applyReplacementVariables:v,onReplacementVariableSearchChange:k,isPremium:_,isLarge:T,socialPreviewLabel:x,idSuffix:S,activeMetaTabId:R}=this.props,C=v({title:y||b,description:c||u});return(0,e.createElement)(t().Fragment,null,x&&(0,e.createElement)(g.SimulatedLabel,null,x),(0,e.createElement)(this.SocialPreview,{onMouseHover:this.setHoveredField,onSelect:this.setActiveField,onImageClick:r,siteUrl:l,title:C.title,description:C.description,imageUrl:p,imageFallbackUrl:m,alt:h,isLarge:T,activeMetaTabId:R}),(0,e.createElement)(on.SocialMetadataPreviewForm,{onDescriptionChange:s,socialMediumName:o,title:y,titleInputPlaceholder:f,onRemoveImageClick:a,imageSelected:!!p,imageUrl:p,onTitleChange:n,onSelectImageClick:r,description:c,descriptionInputPlaceholder:d,imageWarnings:i,replacementVariables:w,recommendedReplacementVariables:E,onReplacementVariableSearchChange:k,onMouseHover:this.setHoveredField,hoveredField:this.state.hoveredField,onSelect:this.setActiveField,activeField:this.state.activeField,isPremium:_,setEditorRef:this.setEditorRef,idSuffix:S}))}}jn.propTypes={title:o().string.isRequired,onTitleChange:o().func.isRequired,description:o().string.isRequired,onDescriptionChange:o().func.isRequired,imageUrl:o().string.isRequired,imageFallbackUrl:o().string.isRequired,onSelectImageClick:o().func.isRequired,onRemoveImageClick:o().func.isRequired,socialMediumName:o().string.isRequired,alt:o().string,isPremium:o().bool,imageWarnings:o().array,isLarge:o().bool,siteUrl:o().string,descriptionInputPlaceholder:o().string,titleInputPlaceholder:o().string,descriptionPreviewFallback:o().string,titlePreviewFallback:o().string,replacementVariables:zn.replacementVariablesShape,recommendedReplacementVariables:zn.recommendedReplacementVariablesShape,applyReplacementVariables:o().func,onReplacementVariableSearchChange:o().func,socialPreviewLabel:o().string,idSuffix:o().string,activeMetaTabId:o().string},jn.defaultProps={imageWarnings:[],recommendedReplacementVariables:[],replacementVariables:[],isPremium:!1,isLarge:!0,siteUrl:"",descriptionInputPlaceholder:"",titleInputPlaceholder:"",descriptionPreviewFallback:"",titlePreviewFallback:"",alt:"",applyReplacementVariables:e=>e,onReplacementVariableSearchChange:null,socialPreviewLabel:"",idSuffix:"",activeMetaTabId:""};const Vn={},Gn=(e,t,{log:s=console.warn}={})=>{Vn[e]||(Vn[e]=!0,s(t))},Zn=(e,t=i.noop)=>{const s={};for(const n in e)Object.hasOwn(e,n)&&Object.defineProperty(s,n,{set:s=>{e[n]=s,t("set",n,s)},get:()=>(t("get",n),e[n])});return s};Zn({squareWidth:125,squareHeight:125,landscapeWidth:506,landscapeHeight:265,aspectRatio:50.2},((e,t)=>Gn(`@yoast/social-metadata-previews/TWITTER_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "TWITTER_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`))),Zn({squareWidth:158,squareHeight:158,landscapeWidth:527,landscapeHeight:273,portraitWidth:158,portraitHeight:237,aspectRatio:52.2,largeThreshold:{width:446,height:233}},((e,t)=>Gn(`@yoast/social-metadata-previews/FACEBOOK_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "FACEBOOK_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`)));const Xn=c().div` + max-width: calc(527px + 1.5rem); +`,Qn=t=>{const s="X"===t.socialMediumName?(0,k.__)("X share preview","wordpress-seo"):(0,k.__)("Social share preview","wordpress-seo"),{locationContext:n}=(0,m.useRootContext)();return(0,e.createElement)(m.Root,null,(0,e.createElement)(Xn,null,(0,e.createElement)(m.FeatureUpsell,{shouldUpsell:!0,variant:"card",cardLink:(0,Es.addQueryArgs)(wpseoAdminL10n["shortlinks.upsell.social_preview."+t.socialMediumName.toLowerCase()],{context:n}),cardText:(0,k.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,k.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),"data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2"},(0,e.createElement)("div",{className:"yst-grayscale yst-opacity-50"},(0,e.createElement)(m.Label,null,s),(0,e.createElement)(Rn,{title:"",description:"",siteUrl:"",imageUrl:"",imageFallbackUrl:"",alt:"",onSelect:i.noop,onImageClick:i.noop,onMouseHover:i.noop})))))};Qn.propTypes={socialMediumName:o().oneOf(["Social","Twitter","X"]).isRequired};const Jn=Qn;class er extends n.Component{constructor(e){super(e),this.state={activeField:"",hoveredField:""},this.setHoveredField=this.setHoveredField.bind(this),this.setActiveField=this.setActiveField.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.setEditorFocus=this.setEditorFocus.bind(this)}setHoveredField(e){e!==this.state.hoveredField&&this.setState({hoveredField:e})}setActiveField(e){e!==this.state.activeField&&this.setState({activeField:e},(()=>this.setEditorFocus(e)))}setEditorFocus(e){switch(e){case"title":this.titleEditorRef.focus();break;case"description":this.descriptionEditorRef.focus()}}setEditorRef(e,t){switch(e){case"title":this.titleEditorRef=t;break;case"description":this.descriptionEditorRef=t}}render(){const{onDescriptionChange:t,onTitleChange:s,onSelectImageClick:r,onRemoveImageClick:a,socialMediumName:o,imageWarnings:i,description:l,descriptionInputPlaceholder:c,imageUrl:d,alt:u,title:p,titleInputPlaceholder:m,replacementVariables:h,recommendedReplacementVariables:g,onReplacementVariableSearchChange:y,isPremium:f,location:b}=this.props;return(0,e.createElement)(n.Fragment,null,(0,e.createElement)(Jn,{socialMediumName:o}),(0,e.createElement)(on.SocialMetadataPreviewForm,{onDescriptionChange:t,socialMediumName:o,title:p,titleInputPlaceholder:m,onRemoveImageClick:a,imageSelected:!!d,imageUrl:d,imageAltText:u,onTitleChange:s,onSelectImageClick:r,description:l,descriptionInputPlaceholder:c,imageWarnings:i,replacementVariables:h,recommendedReplacementVariables:g,onReplacementVariableSearchChange:y,onMouseHover:this.setHoveredField,hoveredField:this.state.hoveredField,onSelect:this.setActiveField,activeField:this.state.activeField,isPremium:f,setEditorRef:this.setEditorRef,idSuffix:b}))}}er.propTypes={title:o().string.isRequired,onTitleChange:o().func.isRequired,description:o().string.isRequired,onDescriptionChange:o().func.isRequired,imageUrl:o().string.isRequired,onSelectImageClick:o().func.isRequired,onRemoveImageClick:o().func.isRequired,socialMediumName:o().string.isRequired,isPremium:o().bool,imageWarnings:o().array,descriptionInputPlaceholder:o().string,titleInputPlaceholder:o().string,replacementVariables:zn.replacementVariablesShape,recommendedReplacementVariables:zn.recommendedReplacementVariablesShape,onReplacementVariableSearchChange:o().func,location:o().string,alt:o().string},er.defaultProps={imageWarnings:[],recommendedReplacementVariables:[],replacementVariables:[],isPremium:!1,descriptionInputPlaceholder:"",titleInputPlaceholder:"",onReplacementVariableSearchChange:null,location:"",alt:""};const tr=er,sr=t=>{const[s,a]=(0,n.useState)(""),o=(0,n.useCallback)((e=>{a(e.detail.metaTabId)}),[a]);(0,n.useEffect)((()=>(setTimeout(t.onLoad),window.addEventListener("YoastSEO:metaTabChange",o),()=>{window.removeEventListener("YoastSEO:metaTabChange",o)})),[]);const i=(0,n.useMemo)((()=>({...t,activeMetaTabId:s})),[t,s]);return t.isPremium?(0,e.createElement)(r.Slot,{name:`YoastFacebookPremium${t.location.charAt(0).toUpperCase()+t.location.slice(1)}`,fillProps:i}):(0,e.createElement)(tr,{...i})};sr.propTypes={isPremium:o().bool.isRequired,onLoad:o().func.isRequired,location:o().string.isRequired};const nr=sr;function rr(e){(function(e){const t=window.wp.media();return t.on("select",(()=>{const s=t.state().get("selection").first();var n;e({type:(n=s.attributes).subtype,width:n.width,height:n.height,url:n.url,id:n.id,sizes:n.sizes,alt:n.alt||n.title||n.name})})),t})(e).open()}const ar=()=>{rr((e=>(0,h.dispatch)("yoast-seo/editor").setFacebookPreviewImage((e=>{const{width:t,height:s}=e,n=(0,on.determineFacebookImageMode)({width:t,height:s}),r=on.FACEBOOK_IMAGE_SIZES[n+"Width"],a=on.FACEBOOK_IMAGE_SIZES[n+"Height"],o=Object.values(e.sizes).find((e=>e.width>=r&&e.height>=a));return{url:o?o.url:e.url,id:e.id,warnings:(0,M.validateFacebookImage)(e),alt:e.alt||""}})(e))))},or=(0,C.compose)([(0,h.withSelect)((e=>{const{getFacebookDescription:t,getDescription:s,getFacebookTitle:n,getSeoTitle:r,getFacebookImageUrl:a,getImageFallback:o,getFacebookWarnings:i,getRecommendedReplaceVars:l,getReplaceVars:c,getSiteUrl:d,getSeoTitleTemplate:u,getSeoTitleTemplateNoFallback:p,getSocialTitleTemplate:m,getSeoDescriptionTemplate:h,getSocialDescriptionTemplate:g,getReplacedExcerpt:y,getFacebookAltText:f}=e("yoast-seo/editor");return{imageUrl:a(),imageFallbackUrl:o(),recommendedReplacementVariables:l(),replacementVariables:c(),description:t(),descriptionPreviewFallback:g()||s()||h()||y()||"",title:n(),titlePreviewFallback:m()||r()||p()||u()||"",imageWarnings:i(),siteUrl:d(),isPremium:!!Cs().isPremium,titleInputPlaceholder:"",descriptionInputPlaceholder:"",socialMediumName:"Social",alt:f()}})),(0,h.withDispatch)(((e,t,{select:s})=>{const{setFacebookPreviewTitle:n,setFacebookPreviewDescription:r,clearFacebookPreviewImage:a,loadFacebookPreviewData:o,findCustomFields:i}=e("yoast-seo/editor"),l=s("yoast-seo/editor").getPostId();return{onSelectImageClick:ar,onRemoveImageClick:a,onDescriptionChange:r,onTitleChange:n,onLoad:o,onReplacementVariableSearchChange:Vt(l,i)}})),qt()])(nr),ir=t=>((0,n.useEffect)((()=>{setTimeout(t.onLoad)}),[]),t.isPremium?(0,e.createElement)(r.Slot,{name:`YoastTwitterPremium${t.location.charAt(0).toUpperCase()+t.location.slice(1)}`,fillProps:t}):(0,e.createElement)(tr,{...t}));ir.propTypes={isPremium:o().bool.isRequired,onLoad:o().func.isRequired,location:o().string.isRequired};const lr=ir,cr=()=>{rr((e=>(0,h.dispatch)("yoast-seo/editor").setTwitterPreviewImage((e=>{const t="summary"!==(0,i.get)(window,"wpseoScriptData.metabox.twitterCardType")?"landscape":"square",s=on.TWITTER_IMAGE_SIZES[t+"Width"],n=on.TWITTER_IMAGE_SIZES[t+"Height"],r=Object.values(e.sizes).find((e=>e.width>=s&&e.height>=n));return{url:r?r.url:e.url,id:e.id,warnings:(0,M.validateTwitterImage)(e),alt:e.alt||""}})(e))))},dr=(0,C.compose)([(0,h.withSelect)((e=>{const{getTwitterDescription:t,getTwitterTitle:s,getTwitterImageUrl:n,getFacebookImageUrl:r,getFacebookTitle:a,getFacebookDescription:o,getDescription:i,getSeoTitle:l,getTwitterWarnings:c,getTwitterImageType:d,getImageFallback:u,getRecommendedReplaceVars:p,getReplaceVars:m,getSiteUrl:h,getSeoTitleTemplate:g,getSeoTitleTemplateNoFallback:y,getSocialTitleTemplate:f,getSeoDescriptionTemplate:b,getSocialDescriptionTemplate:w,getReplacedExcerpt:E,getTwitterAltText:v}=e("yoast-seo/editor");return{imageUrl:n(),imageFallbackUrl:r()||u(),recommendedReplacementVariables:p(),replacementVariables:m(),description:t(),descriptionPreviewFallback:w()||o()||i()||b()||E()||"",title:s(),titlePreviewFallback:f()||a()||l()||y()||g()||"",imageWarnings:c(),siteUrl:h(),isPremium:!!Cs().isPremium,isLarge:"summary"!==d(),titleInputPlaceholder:"",descriptionInputPlaceholder:"",socialMediumName:"X",alt:v()}})),(0,h.withDispatch)(((e,t,{select:s})=>{const{setTwitterPreviewTitle:n,setTwitterPreviewDescription:r,clearTwitterPreviewImage:a,loadTwitterPreviewData:o,findCustomFields:i}=e("yoast-seo/editor"),l=s("yoast-seo/editor").getPostId();return{onSelectImageClick:cr,onRemoveImageClick:a,onDescriptionChange:r,onTitleChange:n,onLoad:o,onReplacementVariableSearchChange:Vt(l,i)}})),qt()])(lr),ur=c().legend` + margin: 16px 0; + padding: 0; + color: ${y.colors.$color_headings}; + font-size: 12px; + font-weight: 300; +`,pr=c().legend` + margin: 0 0 16px; + padding: 0; + color: ${y.colors.$color_headings}; + font-size: 12px; + font-weight: 300; +`,mr=c().div` + padding: 16px; +`,hr=({useOpenGraphData:t,useTwitterData:s})=>(0,e.createElement)(n.Fragment,null,s&&t&&(0,e.createElement)(n.Fragment,null,(0,e.createElement)(ns,{hasSeparator:!1 +/* translators: Social media appearance refers to a preview of how a page will be represented on social media. */,title:(0,k.__)("Social media appearance","wordpress-seo"),initialIsOpen:!0},(0,e.createElement)(pr,null,(0,k.__)("Determine how your post should look on social media like Facebook, X, Instagram, WhatsApp, Threads, LinkedIn, Slack, and more.","wordpress-seo")),(0,e.createElement)(or,null),(0,e.createElement)(ur,null,(0,k.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below. If you leave these settings untouched, the 'Social media appearance' settings mentioned above will also be applied for sharing on X.","wordpress-seo"))),(0,e.createElement)(ns,{title:(0,k.__)("X appearance","wordpress-seo"),hasSeparator:!0,initialIsOpen:!1},(0,e.createElement)(dr,null))),t&&!s&&(0,e.createElement)(mr,null,(0,e.createElement)(pr,null,(0,k.__)("Determine how your post should look on social media like Facebook, X, Instagram, WhatsApp, Threads, LinkedIn, Slack, and more.","wordpress-seo")),(0,e.createElement)(or,null)),!t&&s&&(0,e.createElement)(mr,null,(0,e.createElement)(pr,null,(0,k.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below.","wordpress-seo")),(0,e.createElement)(dr,null)));hr.propTypes={useOpenGraphData:o().bool.isRequired,useTwitterData:o().bool.isRequired};const gr=hr,yr=(0,h.withSelect)((e=>{const{getPreferences:t}=e("yoast-seo/editor"),{useOpenGraphData:s,useTwitterData:n}=t();return{useOpenGraphData:s,useTwitterData:n}}))(gr);function fr({target:t}){return(0,e.createElement)(w,{target:t},(0,e.createElement)(yr,null))}fr.propTypes={target:o().string.isRequired};const br=(0,M.makeOutboundLink)(),wr=c().div` + padding: 16px; +`,Er="yoast-seo/editor";function vr({location:t,show:s}){return s?(0,e.createElement)(g.Alert,{type:"info"},(0,k.sprintf)(/* translators: %s Expands to "Yoast News SEO" */ +(0,k.__)("Are you working on a news article? %s helps you optimize your site for Google News.","wordpress-seo"),"Yoast News SEO")+" ",(0,e.createElement)(br,{href:window.wpseoAdminL10n[`shortlinks.upsell.${t}.news`]},(0,k.sprintf)(/* translators: %s: Expands to "Yoast News SEO". */ +(0,k.__)("Buy %s now!","wordpress-seo"),"Yoast News SEO"))):null}vr.propTypes={show:o().bool.isRequired,location:o().string.isRequired};const kr=(e,t,s)=>{const n=(0,h.useSelect)((e=>e(Er).getIsProduct()),[]),r=(0,h.useSelect)((e=>e(Er).getIsWooSeoActive()),[]),a=n&&r?{name:(0,k.__)("Item Page","wordpress-seo"),value:"ItemPage"}:e.find((e=>e.value===t));return[{name:(0,k.sprintf)(/* translators: %1$s expands to the plural name of the current post type, %2$s expands to the current site wide default. */ +(0,k.__)("Default for %1$s (%2$s)","wordpress-seo"),s,a?a.name:""),value:""},...e]},_r=e=>(0,k.sprintf)(/* translators: %1$s expands to the plural name of the current post type, %2$s and %3$s expand to a link to the Settings page */ +(0,k.__)("You can change the default type for %1$s under Content types in the %2$sSettings%3$s.","wordpress-seo"),e,"{{link}}","{{/link}}");o().string.isRequired,o().string.isRequired,o().string.isRequired;const Tr=t=>{const s=kr(t.pageTypeOptions,t.defaultPageType,t.postTypeName),r=kr(t.articleTypeOptions,t.defaultArticleType,t.postTypeName),a=(0,i.get)(window,"wpseoScriptData.metabox.woocommerceUpsellSchemaLink",""),o=(0,i.get)(window,"wpseoScriptData.woocommerceUpsell",""),[l,c]=(0,n.useState)(t.schemaArticleTypeSelected),d=(0,k.__)("Want your products stand out in search results with rich results like price, reviews and more?","wordpress-seo"),u=(0,h.useSelect)((e=>e(Er).getIsProduct()),[]),p=(0,h.useSelect)((e=>e(Er).getIsWooSeoActive()),[]),m=(0,h.useSelect)((e=>e(Er).selectAdminLink("?page=wpseo_page_settings")),[]),y=u&&p,f=(0,n.useCallback)(((e,t)=>{c(t)}),[l]);return(0,n.useEffect)((()=>{f(null,t.schemaArticleTypeSelected)}),[t.schemaArticleTypeSelected]),(0,e.createElement)(n.Fragment,null,(0,e.createElement)(g.FieldGroup,{label:(0,k.__)("What type of page or content is this?","wordpress-seo"),linkTo:t.additionalHelpTextLink +/* translators: Hidden accessibility text. */,linkText:(0,k.__)("Learn more about page or content types","wordpress-seo")}),o&&(0,e.createElement)(Xt,{link:a,text:d}),(0,e.createElement)(g.Select,{id:(0,M.join)(["yoast-schema-page-type",t.location]),options:s,label:(0,k.__)("Page type","wordpress-seo"),onChange:t.schemaPageTypeChange,selected:y?"ItemPage":t.schemaPageTypeSelected,disabled:y}),t.showArticleTypeInput&&(0,e.createElement)(g.Select,{id:(0,M.join)(["yoast-schema-article-type",t.location]),options:r,label:(0,k.__)("Article type","wordpress-seo"),onChange:t.schemaArticleTypeChange,selected:t.schemaArticleTypeSelected,onOptionFocus:f}),(0,e.createElement)(vr,{location:t.location,show:!t.isNewsEnabled&&(E=l,v=t.defaultArticleType,"NewsArticle"===E||""===E&&"NewsArticle"===v)}),t.displayFooter&&!y&&(0,e.createElement)("p",null,(b=t.postTypeName,w=m,(0,V.Z)({mixedString:_r(b),components:{link:(0,e.createElement)("a",{href:w,target:"_blank",rel:"noreferrer"})}}))),y&&(0,e.createElement)("p",null,(0,k.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,k.__)("You have %1$s activated on your site, automatically setting the Page type for your products to 'Item Page'. As a result, the Page type selection is disabled.","wordpress-seo"),"Yoast WooCommerce SEO")));var b,w,E,v},xr=o().arrayOf(o().shape({name:o().string,value:o().string}));Tr.propTypes={schemaPageTypeChange:o().func,schemaPageTypeSelected:o().string,pageTypeOptions:xr.isRequired,schemaArticleTypeChange:o().func,schemaArticleTypeSelected:o().string,articleTypeOptions:xr.isRequired,showArticleTypeInput:o().bool.isRequired,additionalHelpTextLink:o().string.isRequired,helpTextLink:o().string.isRequired,helpTextTitle:o().string.isRequired,helpTextDescription:o().string.isRequired,postTypeName:o().string.isRequired,displayFooter:o().bool,defaultPageType:o().string.isRequired,defaultArticleType:o().string.isRequired,location:o().string.isRequired,isNewsEnabled:o().bool},Tr.defaultProps={schemaPageTypeChange:()=>{},schemaPageTypeSelected:null,schemaArticleTypeChange:()=>{},schemaArticleTypeSelected:null,displayFooter:!1,isNewsEnabled:!1};const Sr=t=>t.isMetabox?(0,n.createPortal)((0,e.createElement)(wr,null,(0,e.createElement)(Tr,{...t})),document.getElementById("wpseo-meta-section-schema")):(0,e.createElement)(Tr,{...t});Sr.propTypes={showArticleTypeInput:o().bool,articleTypeLabel:o().string,additionalHelpTextLink:o().string,pageTypeLabel:o().string.isRequired,helpTextLink:o().string.isRequired,helpTextTitle:o().string.isRequired,helpTextDescription:o().string.isRequired,isMetabox:o().bool.isRequired,postTypeName:o().string.isRequired,displayFooter:o().bool,loadSchemaArticleData:o().func.isRequired,loadSchemaPageData:o().func.isRequired,location:o().string.isRequired},Sr.defaultProps={showArticleTypeInput:!1,articleTypeLabel:"",additionalHelpTextLink:"",displayFooter:!1};const Rr=Sr;class Cr{static get articleTypeInput(){return document.getElementById("yoast_wpseo_schema_article_type")}static get defaultArticleType(){return Cr.articleTypeInput.getAttribute("data-default")}static get articleType(){return Cr.articleTypeInput.value}static set articleType(e){Cr.articleTypeInput.value=e}static get pageTypeInput(){return document.getElementById("yoast_wpseo_schema_page_type")}static get defaultPageType(){return Cr.pageTypeInput.getAttribute("data-default")}static get pageType(){return Cr.pageTypeInput.value}static set pageType(e){Cr.pageTypeInput.value=e}}const Ir=t=>{const s=null!==Cr.articleTypeInput;(0,n.useEffect)((()=>{t.loadSchemaPageData(),s&&t.loadSchemaArticleData()}),[]);const{pageTypeOptions:r,articleTypeOptions:a}=window.wpseoScriptData.metabox.schema,o={articleTypeLabel:(0,k.__)("Article type","wordpress-seo"),pageTypeLabel:(0,k.__)("Page type","wordpress-seo"),postTypeName:window.wpseoAdminL10n.postTypeNamePlural,helpTextTitle:(0,k.__)("Yoast SEO automatically describes your pages using schema.org","wordpress-seo"),helpTextDescription:(0,k.__)("This helps search engines understand your website and your content. You can change some of your settings for this page below.","wordpress-seo"),showArticleTypeInput:s,pageTypeOptions:r,articleTypeOptions:a},i={...t,...o,...(l=t.location,"metabox"===l?{helpTextLink:wpseoAdminL10n["shortlinks.metabox.schema.explanation"],additionalHelpTextLink:wpseoAdminL10n["shortlinks.metabox.schema.page_type"],isMetabox:!0}:{helpTextLink:wpseoAdminL10n["shortlinks.sidebar.schema.explanation"],additionalHelpTextLink:wpseoAdminL10n["shortlinks.sidebar.schema.page_type"],isMetabox:!1})};var l;return(0,e.createElement)(Rr,{...i})};Ir.propTypes={displayFooter:o().bool.isRequired,schemaPageTypeSelected:o().string.isRequired,schemaArticleTypeSelected:o().string.isRequired,defaultArticleType:o().string.isRequired,defaultPageType:o().string.isRequired,loadSchemaPageData:o().func.isRequired,loadSchemaArticleData:o().func.isRequired,schemaPageTypeChange:o().func.isRequired,schemaArticleTypeChange:o().func.isRequired,location:o().string.isRequired};const Lr=(0,C.compose)([(0,h.withSelect)((e=>{const{getPreferences:t,getPageType:s,getDefaultPageType:n,getArticleType:r,getDefaultArticleType:a}=e("yoast-seo/editor"),{displaySchemaSettingsFooter:o,isNewsEnabled:i}=t();return{displayFooter:o,isNewsEnabled:i,schemaPageTypeSelected:s(),schemaArticleTypeSelected:r(),defaultArticleType:a(),defaultPageType:n()}})),(0,h.withDispatch)((e=>{const{setPageType:t,setArticleType:s,getSchemaPageData:n,getSchemaArticleData:r}=e("yoast-seo/editor");return{loadSchemaPageData:n,loadSchemaArticleData:r,schemaPageTypeChange:t,schemaArticleTypeChange:s}})),qt()])(Ir),Ar=()=>(0,e.createElement)("p",{className:"yoast-related-keyphrases-modal__loading-message"},(0,k.sprintf)(/* translators: %1$s expands to "Yoast SEO", %2$s expands to "Semrush". */ +(0,k.__)("Please wait while %1$s connects to %2$s to get related keyphrases...","wordpress-seo"),"Yoast SEO","Semrush")," ",(0,e.createElement)(g.SvgIcon,{icon:"loading-spinner"})),Pr=(0,M.makeOutboundLink)(),Fr=()=>(0,e.createElement)(n.Fragment,null,(0,e.createElement)("p",null,(0,k.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,k.__)("You've reached your request limit for today. Check back tomorrow or upgrade your plan over at %s.","wordpress-seo"),"Semrush")),(0,e.createElement)(Pr,{href:window.wpseoAdminL10n["shortlinks.semrush.prices"],className:"yoast-button-upsell"},(0,k.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,k.__)("Upgrade your %s plan","wordpress-seo"),"Semrush"),(0,e.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"}))),Mr="yoast-semrush-country-selector",qr=[{value:"us",name:"United States - US"},{value:"uk",name:"United Kingdom - UK"},{value:"ca",name:"Canada - CA"},{value:"ru",name:"Russia - RU"},{value:"de",name:"Germany - DE"},{value:"fr",name:"France - FR"},{value:"es",name:"Spain - ES"},{value:"it",name:"Italy - IT"},{value:"br",name:"Brazil - BR"},{value:"au",name:"Australia - AU"},{value:"ar",name:"Argentina - AR"},{value:"be",name:"Belgium - BE"},{value:"ch",name:"Switzerland - CH"},{value:"dk",name:"Denmark - DK"},{value:"fi",name:"Finland - FI"},{value:"hk",name:"Hong Kong - HK"},{value:"ie",name:"Ireland - IE"},{value:"il",name:"Israel - IL"},{value:"mx",name:"Mexico - MX"},{value:"nl",name:"Netherlands - NL"},{value:"no",name:"Norway - NO"},{value:"pl",name:"Poland - PL"},{value:"se",name:"Sweden - SE"},{value:"sg",name:"Singapore - SG"},{value:"tr",name:"Turkey - TR"},{value:"jp",name:"Japan - JP"},{value:"in",name:"India - IN"},{value:"hu",name:"Hungary - HU"},{value:"af",name:"Afghanistan - AF"},{value:"al",name:"Albania - AL"},{value:"dz",name:"Algeria - DZ"},{value:"ao",name:"Angola - AO"},{value:"am",name:"Armenia - AM"},{value:"at",name:"Austria - AT"},{value:"az",name:"Azerbaijan - AZ"},{value:"bh",name:"Bahrain - BH"},{value:"bd",name:"Bangladesh - BD"},{value:"by",name:"Belarus - BY"},{value:"bz",name:"Belize - BZ"},{value:"bo",name:"Bolivia - BO"},{value:"ba",name:"Bosnia and Herzegovina - BA"},{value:"bw",name:"Botswana - BW"},{value:"bn",name:"Brunei - BN"},{value:"bg",name:"Bulgaria - BG"},{value:"cv",name:"Cabo Verde - CV"},{value:"kh",name:"Cambodia - KH"},{value:"cm",name:"Cameroon - CM"},{value:"cl",name:"Chile - CL"},{value:"co",name:"Colombia - CO"},{value:"cr",name:"Costa Rica - CR"},{value:"hr",name:"Croatia - HR"},{value:"cy",name:"Cyprus - CY"},{value:"cz",name:"Czech Republic - CZ"},{value:"cd",name:"Congo - CD"},{value:"do",name:"Dominican Republic - DO"},{value:"ec",name:"Ecuador - EC"},{value:"eg",name:"Egypt - EG"},{value:"sv",name:"El Salvador - SV"},{value:"ee",name:"Estonia - EE"},{value:"et",name:"Ethiopia - ET"},{value:"ge",name:"Georgia - GE"},{value:"gh",name:"Ghana - GH"},{value:"gr",name:"Greece - GR"},{value:"gt",name:"Guatemala - GT"},{value:"gy",name:"Guyana - GY"},{value:"ht",name:"Haiti - HT"},{value:"hn",name:"Honduras - HN"},{value:"is",name:"Iceland - IS"},{value:"id",name:"Indonesia - ID"},{value:"jm",name:"Jamaica - JM"},{value:"jo",name:"Jordan - JO"},{value:"kz",name:"Kazakhstan - KZ"},{value:"kw",name:"Kuwait - KW"},{value:"lv",name:"Latvia - LV"},{value:"lb",name:"Lebanon - LB"},{value:"lt",name:"Lithuania - LT"},{value:"lu",name:"Luxembourg - LU"},{value:"mg",name:"Madagascar - MG"},{value:"my",name:"Malaysia - MY"},{value:"mt",name:"Malta - MT"},{value:"mu",name:"Mauritius - MU"},{value:"md",name:"Moldova - MD"},{value:"mn",name:"Mongolia - MN"},{value:"me",name:"Montenegro - ME"},{value:"ma",name:"Morocco - MA"},{value:"mz",name:"Mozambique - MZ"},{value:"na",name:"Namibia - NA"},{value:"np",name:"Nepal - NP"},{value:"nz",name:"New Zealand - NZ"},{value:"ni",name:"Nicaragua - NI"},{value:"ng",name:"Nigeria - NG"},{value:"om",name:"Oman - OM"},{value:"py",name:"Paraguay - PY"},{value:"pe",name:"Peru - PE"},{value:"ph",name:"Philippines - PH"},{value:"pt",name:"Portugal - PT"},{value:"ro",name:"Romania - RO"},{value:"sa",name:"Saudi Arabia - SA"},{value:"sn",name:"Senegal - SN"},{value:"rs",name:"Serbia - RS"},{value:"sk",name:"Slovakia - SK"},{value:"si",name:"Slovenia - SI"},{value:"za",name:"South Africa - ZA"},{value:"kr",name:"South Korea - KR"},{value:"lk",name:"Sri Lanka - LK"},{value:"th",name:"Thailand - TH"},{value:"bs",name:"Bahamas - BS"},{value:"tt",name:"Trinidad and Tobago - TT"},{value:"tn",name:"Tunisia - TN"},{value:"ua",name:"Ukraine - UA"},{value:"ae",name:"United Arab Emirates - AE"},{value:"uy",name:"Uruguay - UY"},{value:"ve",name:"Venezuela - VE"},{value:"vn",name:"Vietnam - VN"},{value:"zm",name:"Zambia - ZM"},{value:"zw",name:"Zimbabwe - ZW"},{value:"ly",name:"Libya - LY"}];class Dr extends n.Component{constructor(e){super(e),this.relatedKeyphrasesRequest=this.relatedKeyphrasesRequest.bind(this),this.onChangeHandler=this.onChangeHandler.bind(this)}componentDidMount(){this.props.response&&this.props.keyphrase===this.props.lastRequestKeyphrase||this.relatedKeyphrasesRequest()}storeCountryCode(e){ee()({path:"yoast/v1/semrush/country_code",method:"POST",data:{country_code:e}})}async relatedKeyphrasesRequest(){const{keyphrase:e,countryCode:t,newRequest:s}=this.props;s(t,e),this.storeCountryCode(t);const n=await this.doRequest(e,t);200!==n.status?this.handleFailedResponse(n):this.handleSuccessResponse(n)}handleSuccessResponse(e){const{setNoResultsFound:t,setRequestSucceeded:s}=this.props;0!==e.results.rows.length?s(e):t()}handleFailedResponse(e){const{setRequestLimitReached:t,setRequestFailed:s}=this.props;"error"in e&&(e.error.includes("TOTAL LIMIT EXCEEDED")?t():s(e))}async doRequest(e,t){return await ee()({path:(0,Es.addQueryArgs)("/yoast/v1/semrush/related_keyphrases",{keyphrase:e,country_code:t})})}onChangeHandler(e){this.props.setCountry(e)}render(){return(0,e.createElement)("div",{id:Mr},(0,e.createElement)(g.SingleSelect,{id:Mr+"-select",label:(0,k.__)("Show results for:","wordpress-seo"),name:"semrush-country-code",options:qr,selected:this.props.countryCode,onChange:this.onChangeHandler,wrapperClassName:"yoast-field-group yoast-field-group--inline"}),(0,e.createElement)(g.NewButton,{id:Mr+"-button",variant:"secondary",onClick:this.relatedKeyphrasesRequest},(0,k.__)("Select country","wordpress-seo")))}}Dr.propTypes={keyphrase:o().string,countryCode:o().string,response:o().object,lastRequestKeyphrase:o().string,setCountry:o().func.isRequired,newRequest:o().func.isRequired,setNoResultsFound:o().func.isRequired,setRequestSucceeded:o().func.isRequired,setRequestLimitReached:o().func.isRequired,setRequestFailed:o().func.isRequired},Dr.defaultProps={keyphrase:"",countryCode:"us",response:{},lastRequestKeyphrase:""};const Or=Dr,Nr=(0,M.makeOutboundLink)(c().a` + display: inline-block; + position: relative; + outline: none; + text-decoration: none; + border-radius: 100%; + width: 24px; + height: 24px; + margin: -4px 0; + vertical-align: middle; + + color: ${y.colors.$color_help_text}; + + &:hover, + &:focus { + color: ${y.colors.$color_snippet_focus}; + } + + // Overwrite the default blue active color for links. + &:active { + color: ${y.colors.$color_help_text}; + } + + &::before { + position: absolute; + top: 0; + left: 0; + padding: 2px; + content: "\f223"; + } +`),$r=(0,M.makeOutboundLink)();class Br extends n.Component{constructor(e){super(e),this.transformTrendDataToChartPoints=this.transformTrendDataToChartPoints.bind(this),this.getAreaChartDataTableHeaderLabels=this.getAreaChartDataTableHeaderLabels.bind(this),this.mapAreaChartDataToTableData=this.mapAreaChartDataToTableData.bind(this)}transformTrendDataToChartPoints(e){return e.split(",").map(((e,t)=>({x:t,y:parseFloat(e)})))}getAreaChartDataTableHeaderLabels(){return[(0,k.__)("Twelve months ago","wordpress-seo"),(0,k.__)("Eleven months ago","wordpress-seo"),(0,k.__)("Ten months ago","wordpress-seo"),(0,k.__)("Nine months ago","wordpress-seo"),(0,k.__)("Eight months ago","wordpress-seo"),(0,k.__)("Seven months ago","wordpress-seo"),(0,k.__)("Six months ago","wordpress-seo"),(0,k.__)("Five months ago","wordpress-seo"),(0,k.__)("Four months ago","wordpress-seo"),(0,k.__)("Three months ago","wordpress-seo"),(0,k.__)("Two months ago","wordpress-seo"),(0,k.__)("Last month","wordpress-seo")]}mapAreaChartDataToTableData(e){return Math.round(100*e)}render(){const{keyphrase:t,relatedKeyphrases:s,countryCode:r,data:a,renderAction:o}=this.props,l="https://www.semrush.com/analytics/keywordoverview/?q="+encodeURIComponent(t)+"&db="+encodeURIComponent(r);return a&&!(0,i.isEmpty)(a.results)&&(0,e.createElement)(n.Fragment,null,(0,e.createElement)("table",{className:"yoast yoast-table"},(0,e.createElement)("thead",null,(0,e.createElement)("tr",null,(0,e.createElement)("th",{scope:"col",className:"yoast-table--primary"},(0,k.__)("Related keyphrase","wordpress-seo")),(0,e.createElement)("th",{scope:"col",abbr:(0,k.__)("Volume","wordpress-seo")},(0,k.__)("Volume","wordpress-seo"),(0,e.createElement)(Nr,{href:window.wpseoAdminL10n["shortlinks.semrush.volume_help"],className:"dashicons"},(0,e.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,k.__)("Learn more about the related keyphrases volume","wordpress-seo")))),(0,e.createElement)("th",{scope:"col",abbr:(0,k.__)("Trend","wordpress-seo")},(0,k.__)("Trend","wordpress-seo"),(0,e.createElement)(Nr,{href:window.wpseoAdminL10n["shortlinks.semrush.trend_help"],className:"dashicons"},(0,e.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,k.__)("Learn more about the related keyphrases trend","wordpress-seo")))),o&&(0,e.createElement)("td",{className:"yoast-table--nobreak"}))),(0,e.createElement)("tbody",null,a.results.rows.map(((t,n)=>{const r=t[0],a=this.transformTrendDataToChartPoints(t[2]),i=this.getAreaChartDataTableHeaderLabels();return(0,e.createElement)("tr",{key:n},(0,e.createElement)("td",null,r),(0,e.createElement)("td",null,t[1]),(0,e.createElement)("td",{className:"yoast-table--nopadding"},(0,e.createElement)(Ee,{width:66,height:24,data:a,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",className:"yoast-related-keyphrases-modal__chart",mapChartDataToTableData:this.mapAreaChartDataToTableData,dataTableCaption:(0,k.__)("Keyphrase volume in the last 12 months on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:i})),o&&(0,e.createElement)("td",{className:"yoast-table--nobreak"},o(r,s)))})))),(0,e.createElement)("p",{style:{marginBottom:0}},(0,e.createElement)($r,{href:l},(0,k.sprintf)(/* translators: %s expands to Semrush */ +(0,k.__)("Get more insights at %s","wordpress-seo"),"Semrush"))))}}Br.propTypes={data:o().object,keyphrase:o().string,relatedKeyphrases:o().array,countryCode:o().string,renderAction:o().func},Br.defaultProps={data:{},keyphrase:"",relatedKeyphrases:[],countryCode:"us",renderAction:null};const Ur=Br,Wr=(0,M.makeOutboundLink)(),Kr=()=>(0,e.createElement)(g.Alert,{type:"info"},(0,k.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,k.__)("You’ll reach more people with multiple keyphrases! Want to quickly add these related keyphrases to the %s analyses for even better content optimization?","wordpress-seo"),"Yoast SEO")+" ",(0,e.createElement)(Wr,{href:window.wpseoAdminL10n["shortlinks.semrush.premium_landing_page"]},(0,k.sprintf)(/* translators: %s: Expands to "Yoast SEO Premium". */ +(0,k.__)("Explore %s!","wordpress-seo"),"Yoast SEO Premium"))),Hr=()=>(0,e.createElement)(g.Alert,{type:"error"},(0,k.__)("We've encountered a problem trying to get related keyphrases. Please try again later.","wordpress-seo")),Yr=()=>(0,e.createElement)(g.Alert,{type:"warning"},(0,k.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,k.__)("You've reached the maximum amount of 4 related keyphrases. You can change or remove related keyphrases in the %s metabox or sidebar.","wordpress-seo"),"Yoast SEO"));function zr(t){const{response:s,lastRequestKeyphrase:r,keyphrase:a,newRequest:o,setCountry:l,renderAction:c,countryCode:d,requestLimitReached:u,setRequestFailed:p,setNoResultsFound:m,relatedKeyphrases:h,setRequestSucceeded:g,setRequestLimitReached:y}=t,f=Cs().isPremium;return(0,e.createElement)(n.Fragment,null,!u&&(0,e.createElement)(n.Fragment,null,!f&&(0,e.createElement)(Kr,null),f&&function(e){return e&&e.length>=4}(h)&&(0,e.createElement)(Yr,null),(0,e.createElement)(Or,{countryCode:d,setCountry:l,newRequest:o,keyphrase:a,setRequestFailed:p,setNoResultsFound:m,setRequestSucceeded:g,setRequestLimitReached:y,response:s,lastRequestKeyphrase:r})),function(t){const{isPending:s,requestLimitReached:n,isSuccess:r,response:a,requestHasData:o}=t;return s?(0,e.createElement)(Ar,null):n?(0,e.createElement)(Fr,null):!r&&function(e){return!(0,i.isEmpty)(e)&&"error"in e}(a)?(0,e.createElement)(Hr,null):o?void 0:(0,e.createElement)("p",null,(0,k.__)("Sorry, there's no data available for that keyphrase/country combination.","wordpress-seo"))}(t),(0,e.createElement)(Ur,{keyphrase:a,relatedKeyphrases:h,countryCode:d,renderAction:c,data:s}))}zr.propTypes={keyphrase:o().string,relatedKeyphrases:o().array,renderAction:o().func,requestLimitReached:o().bool,countryCode:o().string.isRequired,setCountry:o().func.isRequired,newRequest:o().func.isRequired,setRequestSucceeded:o().func.isRequired,setRequestLimitReached:o().func.isRequired,setRequestFailed:o().func.isRequired,setNoResultsFound:o().func.isRequired,response:o().object,lastRequestKeyphrase:o().string},zr.defaultProps={keyphrase:"",relatedKeyphrases:[],renderAction:null,requestLimitReached:!1,response:{},lastRequestKeyphrase:""};const jr=(0,C.compose)([(0,h.withSelect)((e=>{const{getFocusKeyphrase:t,getSEMrushSelectedCountry:s,getSEMrushRequestLimitReached:n,getSEMrushRequestResponse:r,getSEMrushRequestIsSuccess:a,getSEMrushIsRequestPending:o,getSEMrushRequestHasData:i,getSEMrushRequestKeyphrase:l}=e("yoast-seo/editor");return{keyphrase:t(),countryCode:s(),requestLimitReached:n(),response:r(),isSuccess:a(),isPending:o(),requestHasData:i(),lastRequestKeyphrase:l()}})),(0,h.withDispatch)((e=>{const{setSEMrushChangeCountry:t,setSEMrushNewRequest:s,setSEMrushRequestSucceeded:n,setSEMrushRequestFailed:r,setSEMrushSetRequestLimitReached:a,setSEMrushNoResultsFound:o}=e("yoast-seo/editor");return{setCountry:e=>{t(e)},newRequest:(e,t)=>{s(e,t)},setRequestSucceeded:e=>{n(e)},setRequestFailed:e=>{r(e)},setRequestLimitReached:()=>{a()},setNoResultsFound:()=>{o()}}}))])(zr),Vr=(0,k.__)("Check your text on even more SEO criteria and get an enhanced keyphrase analysis, making it easier to optimize your content.","wordpress-seo"),Gr=t=>{const{locationContext:s}=(0,d.useRootContext)(),n=(0,Es.addQueryArgs)(wpseoAdminL10n[t.buyLink],{context:s});return(0,e.createElement)(Ys,{title:(0,k.__)("Get more help with writing content that ranks","wordpress-seo"),description:t.description,benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,k.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Ms(),upsellButtonText:(0,k.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,k.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:n,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,k.__)("1 year of premium support and updates included!","wordpress-seo")})};Gr.propTypes={buyLink:o().string.isRequired,description:o().string},Gr.defaultProps={description:Vr};const Zr=Gr,Xr=({location:t})=>{const[s,r]=(0,n.useState)(!1),a=(0,n.useCallback)((()=>r(!1)),[]),o=(0,n.useCallback)((()=>r(!0)),[]),i=(0,m.useSvgAria)();return(0,e.createElement)(n.Fragment,null,s&&(0,e.createElement)($,{title:(0,k.__)("Unlock Premium SEO analysis","wordpress-seo"),onRequestClose:a,additionalClassName:"",className:`${O} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,id:"yoast-premium-seo-analysis-modal",shouldCloseOnClickOutside:!0},(0,e.createElement)(D,null,(0,e.createElement)(Zr,{buyLink:`shortlinks.upsell.${t}.premium_seo_analysis_button`}))),"sidebar"===t&&(0,e.createElement)(Y,{id:"yoast-premium-seo-analysis-modal-open-button",title:(0,k.__)("Premium SEO analysis","wordpress-seo"),prefixIcon:{icon:"seo-score-none",color:y.colors.$color_grey},onClick:o},(0,e.createElement)("div",{className:"yst-root"},(0,e.createElement)(m.Badge,{size:"small",variant:"upsell"},(0,e.createElement)(Fs,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...i})))),"metabox"===t&&(0,e.createElement)("div",{className:"yst-root"},(0,e.createElement)(F,{id:"yoast-premium-seo-analysis-metabox-modal-open-button",onClick:o},(0,e.createElement)(g.SvgIcon,{icon:"seo-score-none",color:y.colors.$color_grey}),(0,e.createElement)(F.Text,null,(0,k.__)("Premium SEO analysis","wordpress-seo")),(0,e.createElement)(m.Badge,{size:"small",variant:"upsell"},(0,e.createElement)(Fs,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...i}),(0,e.createElement)("span",null,"Premium")))))};Xr.propTypes={location:o().string},Xr.defaultProps={location:"sidebar"};const Qr=Xr,Jr=t=>(0,e.createElement)(Ys,{title:(0,k.__)("Reach a wider audience","wordpress-seo"),description:(0,k.__)("Get help optimizing for up to 5 related keyphrases. This helps you reach a wider audience and get more traffic.","wordpress-seo"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,k.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Ms(),upsellButtonText:(0,k.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,k.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:t.buyLink,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,k.__)("1 year free support and updates included!","wordpress-seo")});Jr.propTypes={buyLink:o().string.isRequired};const ea=Jr,ta=()=>{const[t,,,s,r]=(0,m.useToggleState)(!1),a=(0,n.useContext)(d.LocationContext),{locationContext:o}=(0,d.useRootContext)(),i=(0,m.useSvgAria)(),l=wpseoAdminL10n["sidebar"===a.toLowerCase()?"shortlinks.upsell.sidebar.additional_button":"shortlinks.upsell.metabox.additional_button"];return(0,e.createElement)(e.Fragment,null,t&&(0,e.createElement)($,{title:(0,k.__)("Add related keyphrases","wordpress-seo"),onRequestClose:r,additionalClassName:"",id:"yoast-additional-keyphrases-modal",className:`${O} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,shouldCloseOnClickOutside:!0},(0,e.createElement)(D,null,(0,e.createElement)(ea,{buyLink:(0,Es.addQueryArgs)(l,{context:o})}))),"sidebar"===a&&(0,e.createElement)(Y,{id:"yoast-additional-keyphrase-modal-open-button",title:(0,k.__)("Add related keyphrase","wordpress-seo"),prefixIcon:{icon:"plus",color:y.colors.$color_grey_medium_dark},onClick:s},(0,e.createElement)("div",{className:"yst-root"},(0,e.createElement)(m.Badge,{size:"small",variant:"upsell"},(0,e.createElement)(Fs,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...i})))),"metabox"===a&&(0,e.createElement)("div",{className:"yst-root"},(0,e.createElement)(F,{id:"yoast-additional-keyphrase-metabox-modal-open-button",onClick:s},(0,e.createElement)(g.SvgIcon,{icon:"plus",color:y.colors.$color_grey_medium_dark}),(0,e.createElement)(F.Text,null,(0,k.__)("Add related keyphrase","wordpress-seo")),(0,e.createElement)(m.Badge,{size:"small",variant:"upsell"},(0,e.createElement)(Fs,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...i}),(0,e.createElement)("span",null,"Premium")))))};var sa,na,ra,aa,oa,ia,la,ca,da,ua,pa,ma,ha,ga,ya,fa,ba,wa,Ea,va,ka,_a,Ta,xa,Sa,Ra,Ca,Ia,La,Aa,Pa,Fa,Ma,qa,Da,Oa,Na,$a,Ba,Ua,Wa,Ka,Ha,Ya,za,ja,Va;function Ga(){return Ga=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",Ga({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 448 360"},t),sa||(sa=e.createElement("circle",{cx:226,cy:211,r:149,fill:"#f0ecf0"})),na||(na=e.createElement("path",{fill:"#fbd2a6",d:"M173.53 189.38s-35.47-5.3-41.78-11c-9.39-24.93-29.61-48-35.47-66.21-.71-2.24 3.72-11.39 3.53-15.41s-5.34-11.64-5.23-14-.09-15.27-.09-15.27l-4.75-.72s-5.13 6.07-3.56 9.87c-1.73-4.19 4.3 7.93.5 9.35 0 0-6-5.94-11.76-8.27s-19.57-3.65-19.57-3.65L43.19 73l-4.42.6L31 69.7l-2.85 5.12 7.53 5.29L40.86 92l17.19 10.2 10.2 10.56 9.86 3.56s26.49 79.67 45 92c17 11.33 37.23 15.92 37.23 15.92z"})),ra||(ra=e.createElement("path",{fill:"#a4286a",d:"M270.52 345.13c2.76-14.59 15.94-35.73 30.24-54.58 16.22-21.39 14-79.66-33.19-91.46-17.3-4.32-52.25-1-59.85-3.41C186.54 189 170 187 168 190.17c-5 10.51-7.73 27.81-5.51 36.26 1.18 4.73 3.54 5.91 20.49 13.4-5.12 15-16.35 26.3-22.86 37s7.88 27.2 7.1 33.51c-.48 3.8-4.26 21.13-7.18 34.25a149.47 149.47 0 0 0 110.3 8.66 25.66 25.66 0 0 1 .18-8.12z"})),aa||(aa=e.createElement("path",{fill:"#9a5815",d:"M206.76 66.43c-5 14.4-1.42 25.67-3.93 40.74-10 60.34-24.08 43.92-31.44 93.6 7.24-14.19 14.32-15.82 20.63-23.11-.83 3.09-10.25 13.75-8.05 34.81 9.85-8.51 6.35-8.75 11.86-8.54.36 3.25 3.53 3.22-3.59 10.53 2.52.69 17.42-14.32 20.16-12.66s0 5.72-6 7.76c2.15 2.2 30.47-3.87 43.81-14.71 4.93-4 10-13.16 13.38-18.2 7.17-10.62 12.38-24.77 17.71-36.6 8.94-19.87 15.09-39.34 16.11-61.31.53-10.44-3.41-18.44-4.41-28.86-2.57-27.8-67.63-37.26-86.24 16.55z"})),oa||(oa=e.createElement("path",{fill:"#efb17c",d:"M277.74 179.06c.62-.79 1.24-1.59 1.84-2.39-.85 2.59-1.52 3.73-1.84 2.39z"})),ia||(ia=e.createElement("path",{fill:"#fbd2a6",d:"M216.1 206.72c3.69-5.42 8.28-3.35 15.57-8.28 3.76-3.06 1.57-9.46 1.77-11.82 18.25 4.56 37.38-1.18 49.07-16 .62 5.16-2.77 22.27-.2 27 4.73 8.67 13.4 18.92 13.4 18.92-35.47-2.76-63.45 39-89.86 44.54 5.52-28.74-2.36-35.84 10.25-54.36z"})),la||(la=e.createElement("path",{fill:"#f6b488",d:"m235.21 167.9 53.21-25.23s-3.65 24-6.5 32.72c-64.05 62.66-46.47-7.33-46.71-7.49z"})),ca||(ca=e.createElement("path",{fill:"#fbd2a6",d:"M226.86 50.64C215 59.31 206.37 93.21 204 95.57c-19.46 19.47-3.59 41.39-3.94 51.24-.2 5.52-4.14 25.42 5.72 29.36 22.22 8.89 60-3.48 67.19-12.61 13.28-16.75 40.89-94.78 17.74-108.19-7.92-4.58-42.78-20.18-63.85-4.73z"})),da||(da=e.createElement("path",{fill:"#e5766c",d:"M243.69 143.66c-10.7-6.16-8.56-6.73-19.76-12.71-3.86-2.07-3.94.64-6.32 0-2.91-.79-1.39-2.74-5.37-3.48-6.52-1.21-3.67 3.63-3.15 6 1.32 6.15-8.17 17.3 3.26 21.42 12.65 4.55 21.38-9.41 31.34-11.23z"})),ua||(ua=e.createElement("path",{fill:"#fff",d:"M240.68 143.9c-11.49-5.53-11.65-8.17-24.64-11.69-8.6-2.32-5.53 1-5.69 4.42-.2 4.16-1.26 9.87 4.9 12.66 9 4.09 18.16-6.02 25.43-5.39zm.7-40.9c-.16 1.26-.06 4.9 5.46 8.25 11.43-4.73 16.36-2.56 17-3.33 1.48-1.76-2-8.87-7.88-9.85-5.58-.94-14.14 1.24-14.58 4.93z"})),pa||(pa=e.createElement("path",{fill:"#000001",d:"M263.53 108.19c-4.32-4.33-6.85-6.24-12.26-8.21-2.77-1-6.18.18-8.65 1.67a3.65 3.65 0 0 0-1.24 1.23h-.12a3.73 3.73 0 0 1 1-1.52 12.53 12.53 0 0 1 11.93-3c4.73 1 9.43 4.63 9.42 9.82z"})),ma||(ma=e.createElement("circle",{cx:254.13,cy:104.05,r:4.19,fill:"#000001"})),ha||(ha=e.createElement("path",{fill:"#fff",d:"M225.26 99.22c-.29 1-6.6 3.45-10.92 1.48-1.15-3.24-5-6.43-5.25-6.71-.5-2.86 5.55-8 10.06-6.3a10.21 10.21 0 0 1 6.11 11.53z"})),ga||(ga=e.createElement("path",{fill:"#000001",d:"M209.29 94.21c-.19-2.34 1.84-4.1 3.65-5.2 7-3.87 13.18 3 12.43 10h-.12c-.14-4-2.38-8.44-6.47-9.11a3.19 3.19 0 0 0-2.42.31c-1.37.85-2.38 2-3.89 2.56-1 .45-1.92.42-3 1.4h-.22z"})),ya||(ya=e.createElement("circle",{cx:219.55,cy:95.28,r:4,fill:"#000001"})),fa||(fa=e.createElement("path",{fill:"#efb17c",d:"M218.66 120.27a27.32 27.32 0 0 0 4.54 3.45c-2.29-.72-4.28-.69-6.32-2.27-2.53-2-3.39-5.16-.73-7.72 10.24-9.82 12.56-13.82 14.77-24.42-1 12.37-6 17.77-10.63 23.18-2.53 2.97-4.68 5.06-1.63 7.78z"})),ba||(ba=e.createElement("path",{fill:"#a57c52",d:"M231.22 69.91c-.67-3.41-8.78-2.83-11.06-1.93-3.48 1.39-6.08 5.22-7.13 8.53 2.9-4.3 6.74-8.12 12.46-6 1.16.42 3.18 2.35 4.48 1.85s1.03-2.2 1.25-2.45zm32.16 8.56c-2.75-1.66-12.24-5.08-12.18.82 2.56.24 5-.19 7.64.95 11.22 4.76 12.77 17.61 12.85 17.86.2-.53.1 1.26.23.7-.02.2.95-12.12-8.54-20.33z"})),wa||(wa=e.createElement("path",{fill:"#fbd2a6",d:"M53.43 250.73c6.29 0-.6-.17 7.34 0 1.89.05-2.38-.7 0-.69 4.54-4.2 12.48-.74 20.6-2.45 4.55.35 3.93 1.35 5.59 4.19 4.89 8.38 4.78 14.21 14 19.56 16.42 8.38 66 12.92 88.49 18.86 5.52.83 42.64-20.15 61-23.75 6.51 10.74 11.46 28.68 8.39 34.93-6.54 13.3-57.07 25.4-75.91 25.15C156.47 326.18 94 294 92.2 293c-.94-.57.7-.7-7.68 0s-10.15.72-17.47-1.4c-3-.87-4.61-1.33-6.33-3.54-2 .22-3.39.2-4.78-1-3.15-2.74-4.84-6.61-2.73-10.06h-.12c-3.35-2.48-6.54-7.69-3.08-11.72 1-1.18 6.06-1.94 7.77-2.28-1.58-.29-6.37.19-7.49-.72-3.06-2.5-4.96-11.55 3.14-11.55z"})),Ea||(Ea=e.createElement("path",{fill:"#a4286a",d:"M303.22 237.52c-9.87-11.88-41.59 8.19-47.8 12.34s-14.89 17.95-14.89 17.95c6 9.43 8.36 31 5.65 46.34l30.51-3s18-15.62 22.59-28.7 6.3-42.54 6.3-42.54"})),va||(va=e.createElement("path",{fill:"#cb9833",d:"M278.63 31.67c-6.08 0-22.91 4.07-22.93 12.91 0 11 47.9 38.38 16.14 85.85 10.21-.79 10.79-8.12 14.92-14.93-3.66 77-49.38 93.58-40.51 142.25 7.68-25.81 20.3-11.62 38.13-33.84 3.45 4.88 9 18.28-9.46 33.78 50-31.26 57.31-56.6 51.92-95C319.93 113.53 348.7 42 278.63 31.67z"})),ka||(ka=e.createElement("path",{fill:"#fbd2a6",d:"M283.64 126.83c-2.42 9.67-8 15.76-1.48 16.46A21.26 21.26 0 0 0 302 132.6c5.17-8.52 3.93-16.44-2.46-18s-13.48 2.56-15.9 12.23z"})),_a||(_a=e.createElement("path",{fill:"#efb17c",d:"M38 73.45c1.92 2 4.25 9.21 6.32 10.91 2.25 1.85 5.71 2.12 8.1 4.45 3.66-2 6-8.72 10-9.31-2.59 1.31-4.42 3.5-6.93 4.88-1.42.8-3 1.31-4.38 2.25-2.16-1.46-4.27-1.77-6.26-3.38-2.52-2.02-5.31-8-6.85-9.8z"})),Ta||(Ta=e.createElement("path",{fill:"#efb17c",d:"M39 74.4c4.83 1.1 12.52 6.44 15.89 10-3.22-1.34-14.73-6.15-15.89-10zm.62-1.5c6.71-.79 18 1.54 23.29 5.9-3.85-.2-5.42-1.48-9-2.94-4.08-1.69-8.83-2.03-14.29-2.96zm46.43 14.58c-3.72-1.32-10.52-1.13-13.22 3.52 2-1.16 1.84-2.11 4.18-1.72-3.81-4.15 8.16-.74 11.6-.24m-2.78 13.15c.56-3.29-8-7.81-10.58-9.17-6.25-3.29-12.16 1.36-19.33-4.53 5.94 6.1 14.23 2.5 19.55 5.76 3.06 1.88 8.65 6.09 9.35 9.38-.23-.4 1.29-1.44 1.01-1.44z"})),xa||(xa=e.createElement("circle",{cx:38.13,cy:30.03,r:3.14,fill:"#b89ac8"})),Sa||(Sa=e.createElement("circle",{cx:60.26,cy:39.96,r:3.14,fill:"#e31e0c"})),Ra||(Ra=e.createElement("circle",{cx:50.29,cy:25.63,r:3.14,fill:"#3baa45"})),Ca||(Ca=e.createElement("circle",{cx:22.19,cy:19.21,r:3.14,fill:"#2ca9e1"})),Ia||(Ia=e.createElement("circle",{cx:22.19,cy:30.03,r:3.14,fill:"#e31e0c"})),La||(La=e.createElement("circle",{cx:26.86,cy:8.28,r:3.14,fill:"#3baa45"})),Aa||(Aa=e.createElement("circle",{cx:49.32,cy:39.99,r:3.14,fill:"#e31e0c"})),Pa||(Pa=e.createElement("circle",{cx:63.86,cy:59.52,r:3.14,fill:"#f8ad39"})),Fa||(Fa=e.createElement("circle",{cx:50.88,cy:50.72,r:3.14,fill:"#3baa45"})),Ma||(Ma=e.createElement("circle",{cx:63.47,cy:76.17,r:3.14,fill:"#e31e0c"})),qa||(qa=e.createElement("circle",{cx:38.34,cy:14.83,r:3.14,fill:"#2ca9e1"})),Da||(Da=e.createElement("circle",{cx:44.44,cy:5.92,r:3.14,fill:"#f8ad39"})),Oa||(Oa=e.createElement("circle",{cx:57.42,cy:10.24,r:3.14,fill:"#e31e0c"})),Na||(Na=e.createElement("circle",{cx:66.81,cy:12.4,r:3.14,fill:"#2ca9e1"})),$a||($a=e.createElement("circle",{cx:77.95,cy:5.14,r:3.14,fill:"#b89ac8"})),Ba||(Ba=e.createElement("circle",{cx:77.95,cy:30.34,r:3.14,fill:"#e31e0c"})),Ua||(Ua=e.createElement("circle",{cx:80.97,cy:16.55,r:3.14,fill:"#f8ad39"})),Wa||(Wa=e.createElement("circle",{cx:62.96,cy:27.27,r:3.14,fill:"#3baa45"})),Ka||(Ka=e.createElement("circle",{cx:75.36,cy:48.67,r:3.14,fill:"#2ca9e1"})),Ha||(Ha=e.createElement("circle",{cx:76.11,cy:65.31,r:3.14,fill:"#3baa45"})),Ya||(Ya=e.createElement("path",{fill:"#71b026",d:"M78.58 178.43C54.36 167.26 32 198.93 5 198.93c19.56 20.49 63.53 1.52 69 15.5 1.48-14.01 4.11-30.9 4.58-36z"})),za||(za=e.createElement("path",{fill:"#074a67",d:"M67.75 251.08c0-4.65 10.13-72.65 10.13-72.65h2.8l-9.09 72.3z"})),ja||(ja=e.createElement("ellipse",{cx:255.38,cy:103.18,fill:"#fff",rx:1.84,ry:1.77})),Va||(Va=e.createElement("ellipse",{cx:221.24,cy:94.75,fill:"#fff",rx:1.84,ry:1.77}))),Xa=(0,C.compose)([(0,h.withSelect)(((e,t)=>{const{isAlertDismissed:s}=e(t.store||"yoast-seo/editor");return{isAlertDismissed:s(t.alertKey)}})),(0,h.withDispatch)(((e,t)=>{const{dismissAlert:s}=e(t.store||"yoast-seo/editor");return{onDismissed:()=>s(t.alertKey)}}))]),Qa=({children:t,id:s,hasIcon:n=!0,title:r,image:a=null,isAlertDismissed:o,onDismissed:i})=>o?null:(0,e.createElement)("div",{id:s,className:"notice-yoast yoast is-dismissible"},(0,e.createElement)("div",{className:"notice-yoast__container"},(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"notice-yoast__header"},n&&(0,e.createElement)("span",{className:"yoast-icon"}),(0,e.createElement)("h2",{className:"notice-yoast__header-heading"},r)),(0,e.createElement)("p",null,t)),a&&(0,e.createElement)(a,{height:"60"})),(0,e.createElement)("button",{type:"button",className:"notice-dismiss",onClick:i},(0,e.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,k.__)("Dismiss this notice.","wordpress-seo"))));Qa.propTypes={children:o().node.isRequired,id:o().string.isRequired,hasIcon:o().bool,title:o().any.isRequired,image:o().elementType,isAlertDismissed:o().bool.isRequired,onDismissed:o().func.isRequired};const Ja=Xa(Qa),eo=({store:t="yoast-seo/editor",image:s=null,title:n,promoId:r,alertKey:a,children:o,...i})=>(0,h.select)(t).isPromotionActive(r)&&(0,e.createElement)(Ja,{alertKey:a,store:t,id:a,title:n,image:s,...i},o);eo.propTypes={store:o().string,image:o().elementType,title:o().any.isRequired,promoId:o().string.isRequired,alertKey:o().string.isRequired,children:o().node};const to=({store:t="yoast-seo/editor",location:s="sidebar",...r})=>{const a=(0,h.useSelect)((e=>e(t).getIsPremium()),[t]),o=(0,h.useSelect)((e=>e(t).selectLinkParams()),[t]),i="sidebar"===s?(0,k.sprintf)(/* translators: %1$s expands to YOAST SEO PREMIUM */ +(0,k.__)("BLACK FRIDAY SALE: %1$s","wordpress-seo"),"YOAST SEO PREMIUM"):(0,n.createInterpolateElement)((0,k.sprintf)(/* translators: %1$s expands to YOAST SEO PREMIUM, %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,k.__)("BLACK FRIDAY SALE: %1$s %2$sBuy now!%3$s","wordpress-seo"),"YOAST SEO PREMIUM","",""),{a:(0,e.createElement)("a",{href:(0,Es.addQueryArgs)("https://yoa.st/black-friday-sale",o),target:"_blank",rel:"noreferrer"})});return a?null:(0,e.createElement)(eo,{id:`black-friday-2023-promotion-${s}`,promoId:"black-friday-2023-promotion",alertKey:"black-friday-2023-promotion",store:t,title:i,image:Image,...r},(0,e.createElement)("span",{className:"yoast-bf-sale-badge"},(0,k.__)("30% OFF!","wordpress-seo")," "),"sidebar"===s&&(0,e.createElement)("a",{className:"yst-block yst--mb-[1em]",href:(0,Es.addQueryArgs)("https://yoa.st/black-friday-sale",o),target:"_blank",rel:"noreferrer"},(0,k.__)("Buy now!","wordpress-seo")))};to.propTypes={store:o().string,location:o().oneOf(["sidebar","metabox"])};const so=t=>s=>!(()=>{var e,t;const s=(0,h.select)("yoast-seo/editor").getIsPremium(),n=(0,h.select)("yoast-seo/editor").getWarningMessage();return(s&&null!==(e=null===(t=(0,h.select)("yoast-seo-premium/editor"))||void 0===t?void 0:t.getMetaboxWarning())&&void 0!==e?e:[]).length>0||n.length>0})()&&(0,e.createElement)(t,{...s}),no=so((()=>{const t=(0,h.useSelect)((e=>e("yoast-seo/editor").selectLinkParams()),[]),s=(0,k.sprintf)(/* translators: %1$s expands to 'WooCommerce'. */ +(0,k.__)("Is your %1$s store ready for Black Friday?","wordpress-seo"),"WooCommerce");return(0,e.createElement)(eo,{id:"black-friday-2023-product-editor-checklist",alertKey:"black-friday-2023-product-editor-checklist",promoId:"black-friday-2023-checklist",store:"yoast-seo/editor",title:s,image:Za},(0,n.createInterpolateElement)((0,k.sprintf)(/* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */ +(0,k.__)("The Yoast %1$sultimate Black Friday checklist%2$s helps you prepare in time, so you can boost your results during this sale.","wordpress-seo"),"",""),{strong:(0,e.createElement)("strong",null)})," ",(0,e.createElement)("a",{href:(0,Es.addQueryArgs)("https://yoa.st/black-friday-checklist",t),target:"_blank",rel:"noreferrer"},(0,k.__)("Get the checklist and start optimizing now!","wordpress-seo")))})),ro=so(to);function ao({settings:t}){const s=(0,h.useSelect)((e=>e("yoast-seo/editor").getIsTerm()),[]),a=(0,h.useSelect)((e=>e("yoast-seo/editor").getIsProduct()),[])&&window.wpseoScriptData&&"1"===window.wpseoScriptData.isWooCommerceActive;return(0,e.createElement)(n.Fragment,null,(0,e.createElement)(r.Fill,{name:"YoastMetabox"},(0,e.createElement)(Vs,{key:"warning",renderPriority:1},(0,e.createElement)(es,null)),(0,e.createElement)(Vs,{key:"time-constrained-notification",renderPriority:2},a&&(0,e.createElement)(no,null),(0,e.createElement)(ro,{image:null,hasIcon:!1,location:"metabox"})),t.isKeywordAnalysisActive&&(0,e.createElement)(Vs,{key:"keyword-input",renderPriority:8},(0,e.createElement)(Mt.KeywordInput,{isSEMrushIntegrationActive:t.isSEMrushIntegrationActive}),!window.wpseoScriptData.metabox.isPremium&&(0,e.createElement)(r.Fill,{name:"YoastRelatedKeyphrases"},(0,e.createElement)(jr,null))),(0,e.createElement)(Vs,{key:"search-appearance",renderPriority:9},(0,e.createElement)(ns,{id:"yoast-snippet-editor-metabox",title:(0,k.__)("Search appearance","wordpress-seo"),initialIsOpen:!0},(0,e.createElement)(Jt,{hasPaperStyle:!1}))),t.isContentAnalysisActive&&(0,e.createElement)(Vs,{key:"readability-analysis",renderPriority:10},(0,e.createElement)(Mt.ReadabilityAnalysis,{shouldUpsell:t.shouldUpsell})),t.isKeywordAnalysisActive&&(0,e.createElement)(Vs,{key:"seo-analysis",renderPriority:20},(0,e.createElement)(n.Fragment,null,(0,e.createElement)(Mt.SeoAnalysis,{shouldUpsell:t.shouldUpsell,shouldUpsellWordFormRecognition:t.isWordFormRecognitionActive}),t.shouldUpsell&&(0,e.createElement)(Qr,{location:"metabox"}))),t.isInclusiveLanguageAnalysisActive&&(0,e.createElement)(Vs,{key:"inclusive-language-analysis",renderPriority:21},(0,e.createElement)(Mt.InclusiveLanguageAnalysis,null)),t.isKeywordAnalysisActive&&(0,e.createElement)(Vs,{key:"additional-keywords-upsell",renderPriority:22},t.shouldUpsell&&(0,e.createElement)(ta,null)),t.isKeywordAnalysisActive&&t.isWincherIntegrationActive&&(0,e.createElement)(Vs,{key:"wincher-seo-performance",renderPriority:23},(0,e.createElement)(Ft,{location:"metabox"})),t.shouldUpsell&&!s&&(0,e.createElement)(Vs,{key:"internal-linking-suggestions-upsell",renderPriority:25},(0,e.createElement)(zs,null)),t.isCornerstoneActive&&(0,e.createElement)(Vs,{key:"cornerstone",renderPriority:30},(0,e.createElement)(Dt,null)),t.displayAdvancedTab&&(0,e.createElement)(Vs,{key:"advanced",renderPriority:40},(0,e.createElement)(ns,{id:"collapsible-advanced-settings",title:(0,k.__)("Advanced","wordpress-seo")},(0,e.createElement)(sn,null))),t.displaySchemaSettings&&(0,e.createElement)(Vs,{key:"schema",renderPriority:50},(0,e.createElement)(Lr,null)),(0,e.createElement)(Vs,{key:"social",renderPriority:-1},(0,e.createElement)(fr,{target:"wpseo-section-social"})),t.isInsightsEnabled&&(0,e.createElement)(Vs,{key:"insights",renderPriority:52},(0,e.createElement)(Ps,{location:"metabox"}))))}ao.propTypes={settings:o().object.isRequired};const oo=(0,C.compose)([(0,h.withSelect)(((e,t)=>{const{getPreferences:s}=e("yoast-seo/editor");return{settings:s(),store:t.store}}))])(ao);function io({target:t,store:s,theme:n}){return(0,e.createElement)(w,{target:t},(0,e.createElement)(R,{store:s,theme:n}),(0,e.createElement)(oo,{store:s,theme:n}))}io.propTypes={target:o().string.isRequired,store:o().object,theme:o().object};const lo=[];let co=null;class uo extends n.Component{constructor(e){super(e),this.state={registeredComponents:[]}}registerComponent(e,t){this.setState({registeredComponents:[...this.state.registeredComponents,{key:e,Component:t}]})}render(){return this.state.registeredComponents.map((({Component:t,key:s})=>(0,e.createElement)(t,{key:s})))}}function po(e,t){null===co||null===co.current?lo.push({key:e,Component:t}):co.current.registerComponent(e,t)}const mo=window.yoast.externals.redux,ho=window.jQuery;var go=s.n(ho);function yo(e){let t="";var s;return t=!1===function(e){if("undefined"==typeof tinyMCE||void 0===tinyMCE.editors||0===tinyMCE.editors.length)return!1;const t=tinyMCE.get(e);return null!==t&&!t.isHidden()}(e)||0==(s=e,null!==document.getElementById(s+"_ifr"))?function(e){return document.getElementById(e)&&document.getElementById(e).value||""}(e):tinyMCE.get(e).getContent(),t}i.noop,i.noop,i.noop;const{removeMarks:fo}=f.markers,{updateReplacementVariable:bo,updateData:wo,hideReplacementVariables:Eo,setContentImage:vo,setEditorDataContent:ko,setEditorDataTitle:_o,setEditorDataExcerpt:To,setEditorDataImageUrl:xo,setEditorDataSlug:So}=mo.actions;window.yoast=window.yoast||{},window.yoast.initEditorIntegration=function(t){window.YoastSEO=window.YoastSEO||{},window.YoastSEO._registerReactComponent=po,function(t){const s=Cs();co=(0,n.createRef)();const a={isRtl:s.isRtl};(0,n.render)((0,e.createElement)(r.SlotFillProvider,null,(0,e.createElement)(d.Root,{context:{locationContext:"classic-metabox"}},(0,e.createElement)(io,{target:"wpseo-metabox-root",store:t,theme:a})),(0,e.createElement)(uo,{ref:co})),document.getElementById("wpseo-metabox-root")),lo.forEach((e=>{co.current.registerComponent(e.key,e.Component)}))}(t)},window.yoast.EditorData=class{constructor(e,t,s="content"){this._refresh=e,this._store=t,this._tinyMceId=s,this._previousData={},this._previousEditorData={},this.updateReplacementData=this.updateReplacementData.bind(this),this.refreshYoastSEO=this.refreshYoastSEO.bind(this)}initialize(e,t=[]){const s=this.getInitialData(e);var n,r;n=s,r=this._store,(0,i.forEach)(n,((e,t)=>{zt.includes(t)||r.dispatch(Kt(t,e))})),this._store.dispatch(Eo(t)),this._previousEditorData.content=s.content,this._store.dispatch(ko(s.content)),this._previousEditorData.contentImage=s.contentImage,this._store.dispatch(vo(s.contentImage)),this.setImageInSnippetPreview(s.snippetPreviewImageURL||s.contentImage),this._previousEditorData.slug=s.slug,this._store.dispatch(So(s.slug)),this.updateReplacementData({target:{value:s.title}},"title"),this.updateReplacementData({target:{value:s.excerpt}},"excerpt"),this.updateReplacementData({target:{value:s.excerpt_only}},"excerpt_only"),this.subscribeToElements(),this.subscribeToStore(),this.subscribeToSnippetPreviewImage(),this.subscribeToTinyMceEditor(),this.subscribeToSlug()}subscribeToTinyMceEditor(){const e=e=>{if((0,i.isString)(e)||(e=this.getContent()),this._previousEditorData.content===e)return;if(this._previousEditorData.content=e,this._store.dispatch(ko(e)),this.featuredImageIsSet)return;const t=this.getContentImage(e);this._previousEditorData.contentImage!==t&&(this._previousEditorData.contentImage=t,this._store.dispatch(vo(t)),this.setImageInSnippetPreview(t))};go()(document).on("tinymce-editor-init",((t,s)=>{s.id===this._tinyMceId&&(e(this.getContent()),["input","change","cut","paste"].forEach((t=>s.on(t,(0,i.debounce)(e,1e3)))))}));const t=document.getElementById("attachment_content");t&&(e(t.value),t.addEventListener("input",(t=>e(t.target.value))))}subscribeToSlug(){const e=e=>{this._previousEditorData.slug!==e&&(this._previousEditorData.slug=e,this._store.dispatch(So(e)),this._store.dispatch(wo({slug:e})))},t=document.getElementById("slug");t&&t.addEventListener("input",(t=>e(t.target.value)));const s=document.getElementById("post_name");s&&s.addEventListener("input",(t=>e(t.target.value)));const n=document.getElementById("edit-slug-buttons");n&&new MutationObserver(((t,s)=>t.forEach((t=>{t.addedNodes.forEach((t=>{var n,r;if(null==t||null===(n=t.classList)||void 0===n||!n.contains("edit-slug"))return;const a=null===(r=document.getElementById("editable-post-name-full"))||void 0===r?void 0:r.innerText;a&&(e(a),s.disconnect(),this.subscribeToSlug())}))})))).observe(n,{childList:!0})}subscribeToSnippetPreviewImage(){if((0,i.isUndefined)(wp.media)||(0,i.isUndefined)(wp.media.featuredImage))return;go()("#postimagediv").on("click","#remove-post-thumbnail",(()=>{this.featuredImageIsSet=!1,this.setImageInSnippetPreview(this.getContentImage(this.getContent()))}));const e=wp.media.featuredImage.frame();var t,s,n;e.on("select",(()=>{const t=e.state().get("selection").first().attributes.url;t&&(this.featuredImageIsSet=!0,this.setImageInSnippetPreview(t))})),t=this._tinyMceId,s=["init"],n=()=>{const e=this.getContentImage(this.getContent()),t=this.getFeaturedImage()||e||"";this._store.dispatch(vo(e)),this.setImageInSnippetPreview(t)},"undefined"!=typeof tinyMCE&&"function"==typeof tinyMCE.on&&tinyMCE.on("addEditor",(function(e){const r=e.editor;r.id===t&&(0,i.forEach)(s,(function(e){r.on(e,n)}))}))}getFeaturedImage(){const e=go()("#set-post-thumbnail img").attr("src");return e?(this.featuredImageIsSet=!0,e):(this.featuredImageIsSet=!1,null)}setImageInSnippetPreview(e){this._store.dispatch(xo(e)),this._store.dispatch(wo({snippetPreviewImageURL:e}))}getContentImage(e){if(this.featuredImageIsSet)return"";const t=f.languageProcessing.imageInText(e);if(0===t.length)return"";const s=go().parseHTML(t.join(""));for(const e of s)if(e.src)return e.src;return""}getTitle(){const e=document.getElementById("title")||document.getElementById("name");return e&&e.value||""}getExcerpt(e=!0){const t=document.getElementById("excerpt"),s=t&&t.value||"",n="ja"===function(){const e=Cs();return(0,i.get)(e,"contentLocale","en_US")}()?80:156;return""!==s||!1===e?s:function(e,t=156){return(e=(e=(0,Ut.stripTags)(e)).trim()).length<=t||(e=e.substring(0,t),/\s/.test(e)&&(e=e.substring(0,e.lastIndexOf(" ")))),e}(this.getContent(),n)}getSlug(){let e="";const t=document.getElementById("new-post-slug")||document.getElementById("slug");return t?e=t.value:null!==document.getElementById("editable-post-name-full")&&(e=document.getElementById("editable-post-name-full").textContent),e}getContent(){return fo(yo(this._tinyMceId))}subscribeToElements(){this.subscribeToInputElement("title","title"),this.subscribeToInputElement("excerpt","excerpt"),this.subscribeToInputElement("excerpt","excerpt_only")}subscribeToInputElement(e,t){const s=document.getElementById(e);s&&s.addEventListener("input",(e=>{this.updateReplacementData(e,t)}))}updateReplacementData(e,t){let s=e.target.value;if("excerpt"===t&&""===s&&(s=this.getExcerpt()),this._previousEditorData[t]!==s){switch(this._previousEditorData[t]=s,t){case"title":this._store.dispatch(_o(s));break;case"excerpt":this._store.dispatch(To(s))}this._store.dispatch(bo(t,s))}}isShallowEqual(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(e.hasOwnProperty(s)&&(!(s in t)||e[s]!==t[s]))return!1;return!0}refreshYoastSEO(){const e=this.getData();!this.isShallowEqual(this._previousData,e)&&(this.handleEditorChange(e),this._previousData=e,window.YoastSEO&&window.YoastSEO.app&&window.YoastSEO.app.refresh())}handleEditorChange(e){this._previousData.excerpt!==e.excerpt&&(this._store.dispatch(bo("excerpt",e.excerpt)),this._store.dispatch(bo("excerpt_only",e.excerpt_only))),this._previousData.snippetPreviewImageURL!==e.snippetPreviewImageURL&&this.setImageInSnippetPreview(e.snippetPreviewImageURL),this._previousData.slug!==e.slug&&this._store.dispatch(So(e.slug)),this._previousData.title!==e.title&&this._store.dispatch(_o(e.title))}subscribeToStore(){this.subscriber=(0,i.debounce)(this.refreshYoastSEO,500),this._store.subscribe(this.subscriber)}getInitialData(e){e=function(e,t){if(!e.custom_taxonomies)return e;const s={};return(0,i.forEach)(e.custom_taxonomies,((e,t)=>{const{name:n,label:r,descriptionName:a,descriptionLabel:o}=function(e){const t=jt(e);return{name:"ct_"+t,label:Ht(e+" (custom taxonomy)"),descriptionName:"ct_desc_"+t,descriptionLabel:Ht(e+" description (custom taxonomy)")}}(t),i="string"==typeof e.name?(0,M.decodeHTML)(e.name):e.name,l="string"==typeof e.description?(0,M.decodeHTML)(e.description):e.description;s[n]={value:i,label:r},s[a]={value:l,label:o}})),t.dispatch(function(e){return{type:"SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLES_BATCH",updatedVariables:e}}(s)),(0,i.omit)({...e},"custom_taxonomies")}(e=function(e,t){return e.custom_fields?((0,i.forEach)(e.custom_fields,((e,s)=>{const{name:n,label:r}=function(e){return{name:"cf_"+jt(e),label:Ht(e+" (custom field)")}}(s);t.dispatch(Kt(n,e,r))})),(0,i.omit)({...e},"custom_fields")):e}(e,this._store),this._store);const t=this.getContent(),s=this.getFeaturedImage();return{...e,title:this.getTitle(),excerpt:this.getExcerpt(),excerpt_only:this.getExcerpt(!1),slug:this.getSlug(),content:t,snippetPreviewImageURL:s,contentImage:this.getContentImage(t)}}getData(){return{...this._store.getState().snippetEditor.data,title:this.getTitle(),content:this.getContent(),excerpt:this.getExcerpt(),excerpt_only:this.getExcerpt(!1)}}}})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/crawl-settings.js b/wp/wp-content/plugins/wordpress-seo/js/dist/crawl-settings.js new file mode 100644 index 00000000..4b675685 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/crawl-settings.js @@ -0,0 +1 @@ +jQuery(document).ready((function(){jQuery("#allow_search_cleanup input[type='radio']").on("change",(function(){"on"===jQuery("#allow_search_cleanup input[type='radio']:checked").val()?(jQuery("#allow_search_cleanup_emoji").prop("disabled",!1),jQuery("#allow_search_cleanup_patterns").prop("disabled",!1)):(jQuery("#allow_search_cleanup_emoji").prop("disabled",!0),jQuery("#allow_search_cleanup_patterns").prop("disabled",!0),jQuery("#allow_search_cleanup_emoji-off").prop("checked",!0),jQuery("#allow_search_cleanup_patterns-off").prop("checked",!0))})).trigger("change")})); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/dashboard-widget.js b/wp/wp-content/plugins/wordpress-seo/js/dist/dashboard-widget.js new file mode 100644 index 00000000..a2302ec1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/dashboard-widget.js @@ -0,0 +1 @@ +(()=>{"use strict";const e=window.React,t=window.wp.element,s=window.yoast.componentsNew,o=window.yoast.styleGuide,i=window.yoast.analysisReport,a=window.yoast.helpers;class r extends t.Component{constructor(){super(),this.state={statistics:null,feed:null,isDataFetched:!1}}componentDidMount(){const e=jQuery("#wpseo-dashboard-overview-hide");e.is(":checked")&&this.fetchData(),e.on("click",(()=>{this.fetchData()}))}fetchData(){this.state.isDataFetched||(this.getStatistics(),this.getFeed(),this.setState({isDataFetched:!0}))}static getColorFromScore(e){return o.colors[`$color_${e}`]||o.colors.$color_grey}getStatistics(){wpseoApi.get("statistics",(e=>{const t={};e&&e.seo_scores&&(t.seoScores=e.seo_scores.map((e=>({value:parseInt(e.count,10),color:r.getColorFromScore(e.seo_rank),html:`${e.label}`}))),t.header=jQuery(`
      ${e.header}
      `).text(),this.setState({statistics:t}))}))}getFeed(){(0,a.getPostFeed)("https://yoast.com/feed/widget/?wp_version="+wpseoDashboardWidgetL10n.wp_version+"&php_version="+wpseoDashboardWidgetL10n.php_version,2).then((e=>{e.items=e.items.map((e=>(e.description=jQuery(`
      ${e.description}
      `).text(),e.description=e.description.replace(`The post ${e.title} appeared first on Yoast.`,"").trim(),e))),this.setState({feed:e})})).catch((e=>console.log(e)))}getSeoAssessment(){return null===this.state.statistics?null:(0,e.createElement)(i.SiteSEOReport,{key:"yoast-seo-posts-assessment",seoAssessmentText:this.state.statistics.header,seoAssessmentItems:this.state.statistics.seoScores})}getYoastFeed(){return null===this.state.feed?null:(0,e.createElement)(s.ArticleList,{className:"wordpress-feed",key:"yoast-seo-blog-feed",title:wpseoDashboardWidgetL10n.feed_header,feed:this.state.feed,footerLinkText:wpseoDashboardWidgetL10n.feed_footer})}render(){const t=[this.getSeoAssessment(),this.getYoastFeed()].filter((e=>null!==e));return 0===t.length?null:(0,e.createElement)("div",null,t)}}const n=document.getElementById("yoast-seo-dashboard-widget");n&&(0,t.render)((0,e.createElement)(r,null),n)})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/dynamic-blocks.js b/wp/wp-content/plugins/wordpress-seo/js/dist/dynamic-blocks.js new file mode 100644 index 00000000..10435774 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/dynamic-blocks.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,r=window.wp.blockEditor,s=window.wp.blocks,o=window.wp.serverSideRender;var a=e.n(o);const n=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"version":"22.8","name":"yoast-seo/breadcrumbs","title":"Yoast Breadcrumbs","description":"Adds the Yoast SEO breadcrumbs to your template or content.","category":"yoast-internal-linking-blocks","icon":"admin-links","keywords":["SEO","breadcrumbs","internal linking","site structure"],"textdomain":"wordpress-seo","attributes":{"className":{"type":"string"}},"example":{"attributes":{}}}');(0,s.registerBlockType)(n,{edit:e=>{const s=(0,r.useBlockProps)();return(0,t.createElement)("div",{...s},(0,t.createElement)(a(),{block:"yoast-seo/breadcrumbs",attributes:e.attributes}))},save:()=>null})})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/edit-page.js b/wp/wp-content/plugins/wordpress-seo/js/dist/edit-page.js new file mode 100644 index 00000000..2eefcca1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/edit-page.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={n:a=>{var o=a&&a.__esModule?()=>a.default:()=>a;return t.d(o,{a:o}),o},d:(a,o)=>{for(var e in o)t.o(o,e)&&!t.o(a,e)&&Object.defineProperty(a,e,{enumerable:!0,get:o[e]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a)};const a=window.jQuery;var o;(o=t.n(a)())(".yoast-column-header-has-tooltip").each((function(){o(this).closest("th").find("a").addClass("yoast-tooltip yoast-tooltip-alt yoast-tooltip-n yoast-tooltip-multiline").attr("data-label",o(this).data("tooltip-text")).attr("aria-label",o(this).text())}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/editor-modules.js b/wp/wp-content/plugins/wordpress-seo/js/dist/editor-modules.js new file mode 100644 index 00000000..489cbfe5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/editor-modules.js @@ -0,0 +1,324 @@ +(()=>{"use strict";var e={6746:(e,t,s)=>{var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=i(s(9196)),a=i(s(9156)),o=i(s(6743));function i(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function c(e,t){var s,o,i,u,d,p,m,h,g=[],y={};for(p=0;p "+l);if("componentClose"===d.type)throw new Error("Missing opening component token: `"+d.value+"`");if("componentOpen"===d.type){s=t[d.value],i=p;break}g.push(t[d.value])}else g.push(d.value);return s&&(u=function(e,t){var s,n,r=t[e],a=0;for(n=e+1;n{function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},9156:(e,t,s)=>{var n=s(9196),r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,a=s(7942),o=s(9179),i=s(397),l=".",c=":",u="function"==typeof Symbol&&Symbol.iterator,d="@@iterator";function p(e,t){return e&&"object"==typeof e&&null!=e.key?(s=e.key,n={"=":"=0",":":"=2"},"$"+(""+s).replace(/[=:]/g,(function(e){return n[e]}))):t.toString(36);var s,n}function m(e,t,s,n){var a,i=typeof e;if("undefined"!==i&&"boolean"!==i||(e=null),null===e||"string"===i||"number"===i||"object"===i&&e.$$typeof===r)return s(n,e,""===t?l+p(e,0):t),1;var h=0,g=""===t?l:t+c;if(Array.isArray(e))for(var y=0;y{function t(e){return function(){return e}}var s=function(){};s.thatReturns=t,s.thatReturnsFalse=t(!1),s.thatReturnsTrue=t(!0),s.thatReturnsNull=t(null),s.thatReturnsThis=function(){return this},s.thatReturnsArgument=function(e){return e},e.exports=s},9179:e=>{e.exports=function(e,t,s,n,r,a,o,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[s,n,r,a,o,i],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},397:(e,t,s)=>{var n=s(7942);e.exports=n},9196:e=>{e.exports=window.React}},t={};function s(n){var r=t[n];if(void 0!==r)return r.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,s),a.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={};s.r(e),s.d(e,{refreshDelay:()=>l});var t={};s.r(t),s.d(t,{default:()=>b,initializationDone:()=>w,sortResultsByIdentifier:()=>f});var n={};s.r(n),s.d(n,{default:()=>U,getIconForScore:()=>z});var r={};s.r(r),s.d(r,{doAjaxRequest:()=>Ws});var a={};s.r(a),s.d(a,{setTextdomainL10n:()=>Xs});var o={};s.r(o),s.d(o,{applyReplaceUsingPlugin:()=>bn,createLabelFromName:()=>un,excerptFromContent:()=>fn,fillReplacementVariables:()=>ln,handlePrefixes:()=>cn,mapCustomFields:()=>yn,mapCustomTaxonomies:()=>gn,nonReplaceVars:()=>on,prepareCustomFieldForDispatch:()=>mn,prepareCustomTaxonomyForDispatch:()=>hn,pushNewReplaceVar:()=>dn,replaceSpaces:()=>pn});const i=window.yoast.externals.contexts,l=500,c=window.lodash;function u(){return(0,c.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}const d=window.wp.i18n,p=window.yoast.analysis,m=window.wp.hooks,h=window.yoast.externals.redux;function g(){}let y=!1;function f(e){return e.sort(((e,t)=>e._identifier.localeCompare(t._identifier)))}function b(e,t,s,n,r){if(!y)return;const a=p.Paper.parse(t());e.analyze(a).then((o=>{const{result:{seo:i,readability:l,inclusiveLanguage:c}}=o;if(i){const e=i[""];e.results.forEach((e=>{e.getMarker=()=>()=>s(a,e.marks)})),e.results=f(e.results),n.dispatch(h.actions.setSeoResultsForKeyword(a.getKeyword(),e.results)),n.dispatch(h.actions.setOverallSeoScore(e.score,a.getKeyword())),n.dispatch(h.actions.refreshSnippetEditor()),r.saveScores(e.score,a.getKeyword())}l&&(l.results.forEach((e=>{e.getMarker=()=>()=>s(a,e.marks)})),l.results=f(l.results),n.dispatch(h.actions.setReadabilityResults(l.results)),n.dispatch(h.actions.setOverallReadabilityScore(l.score)),n.dispatch(h.actions.refreshSnippetEditor()),r.saveContentScore(l.score)),c&&(c.results.forEach((e=>{e.getMarker=()=>()=>s(a,e.marks)})),c.results=f(c.results),n.dispatch(h.actions.setInclusiveLanguageResults(c.results)),n.dispatch(h.actions.setOverallInclusiveLanguageScore(c.score)),n.dispatch(h.actions.refreshSnippetEditor()),r.saveInclusiveLanguageScore(c.score)),(0,m.doAction)("yoast.analysis.refresh",o,{paper:a,worker:e,collectData:t,applyMarks:s,store:n,dataCollector:r})})).catch(g)}function w(){y=!0}var v=s(9196);const k=window.wp.element,E=window.yoast.styledComponents;var R=s.n(E);const _=window.yoast.propTypes;var x=s.n(_);const T=window.yoast.componentsNew,S=window.yoast.helpers,C=window.yoast.styleGuide,I=C.colors.$color_bad,L=C.colors.$palette_error_background,A=C.colors.$color_grey_text_light,q=C.colors.$palette_error_text,P=R().div` + display: flex; + flex-direction: column; +`,N=R().label` + font-size: var(--yoast-font-size-default); + font-weight: var(--yoast-font-weight-bold); + ${(0,S.getDirectionalStyle)("margin-right: 4px","margin-left: 4px")}; +`,B=R().span` + margin-bottom: 0.5em; +`,M=R()(T.InputField)` + flex: 1 !important; + box-sizing: border-box; + max-width: 100%; + margin: 0; // Reset margins inherited from WordPress. + + // Hide native X in Edge and IE11. + &::-ms-clear { + display: none; + } + + &.has-error { + border-color: ${I} !important; + background-color: ${L} !important; + + &:focus { + box-shadow: 0 0 2px ${I} !important; + } + } +`,F=R().ul` + color: ${q}; + list-style-type: disc; + list-style-position: outside; + margin: 0; + margin-left: 1.2em; +`,O=R().li` + color: ${q}; + margin: 0 0 0.5em 0; +`,K=(0,T.addFocusStyle)(R().button` + border: 1px solid transparent; + box-shadow: none; + background: none; + flex: 0 0 32px; + height: 32px; + max-width: 32px; + padding: 0; + cursor: pointer; + `);K.propTypes={type:x().string,focusColor:x().string,focusBackgroundColor:x().string,focusBorderColor:x().string},K.defaultProps={type:"button",focusColor:C.colors.$color_button_text_hover,focusBackgroundColor:"transparent",focusBorderColor:C.colors.$color_blue};const D=R()(T.SvgIcon)` + margin-top: 4px; +`,$=R().div` + display: flex; + flex-direction: row; + align-items: center; + + &.has-remove-keyword-button { + ${M} { + ${(0,S.getDirectionalStyle)("padding-right: 40px","padding-left: 40px")}; + } + + ${K} { + ${(0,S.getDirectionalStyle)("margin-left: -32px","margin-right: -32px")}; + } + } +`;class H extends k.Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}handleChange(e){this.props.onChange(e.target.value)}renderLabel(){const{id:e,label:t,helpLink:s}=this.props;return(0,v.createElement)(B,null,(0,v.createElement)(N,{htmlFor:e},t),s)}renderErrorMessages(){const e=[...this.props.errorMessages];return!(0,c.isEmpty)(e)&&(0,v.createElement)(F,null,e.map(((e,t)=>(0,v.createElement)(O,{key:t},(0,v.createElement)("span",{role:"alert"},e)))))}render(){const{id:e,showLabel:t,keyword:s,onRemoveKeyword:n,onBlurKeyword:r,onFocusKeyword:a,hasError:o}=this.props,i=!t,l=n!==c.noop;return(0,v.createElement)(P,null,t&&this.renderLabel(),o&&this.renderErrorMessages(),(0,v.createElement)($,{className:l?"has-remove-keyword-button":null},(0,v.createElement)(M,{"aria-label":i?this.props.label:null,type:"text",id:e,className:o?"has-error":null,onChange:this.handleChange,onFocus:a,onBlur:r,value:s,autoComplete:"off"}),l&&(0,v.createElement)(K,{onClick:n,focusBoxShadowColor:"#084A67"},(0,v.createElement)(D,{size:"18px",icon:"times-circle",color:A}))))}}H.propTypes={id:x().string.isRequired,showLabel:x().bool,keyword:x().string,onChange:x().func.isRequired,onRemoveKeyword:x().func,onBlurKeyword:x().func,onFocusKeyword:x().func,label:x().string.isRequired,helpLink:x().node,hasError:x().bool,errorMessages:x().arrayOf(x().string)},H.defaultProps={showLabel:!0,keyword:"",onRemoveKeyword:c.noop,onBlurKeyword:c.noop,onFocusKeyword:c.noop,helpLink:null,hasError:!1,errorMessages:[]};const W=H;function j(e,t=""){const s=e.getIdentifier(),n={score:e.score,rating:p.interpreters.scoreToRating(e.score),hasMarks:e.hasMarks(),marker:e.getMarker(),id:s,text:e.text,markerId:t.length>0?`${t}:${s}`:s,hasBetaBadge:e.hasBetaBadge(),hasJumps:e.hasJumps(),hasAIFixes:e.hasAIFixes(),editFieldName:e.editFieldName};return"ok"===n.rating&&(n.rating="OK"),n}function Y(e,t){switch(e.rating){case"error":t.errorsResults.push(e);break;case"feedback":t.considerationsResults.push(e);break;case"bad":t.problemsResults.push(e);break;case"OK":t.improvementsResults.push(e);break;case"good":t.goodResults.push(e)}return t}function z(e){switch(e){case"loading":return{icon:"loading-spinner",color:C.colors.$color_green_medium_light};case"not-set":return{icon:"seo-score-none",color:C.colors.$color_score_icon};case"noindex":return{icon:"seo-score-none",color:C.colors.$color_noindex};case"good":return{icon:"seo-score-good",color:C.colors.$color_green_medium};case"ok":return{icon:"seo-score-ok",color:C.colors.$color_ok};default:return{icon:"seo-score-bad",color:C.colors.$color_red}}}function U(e,t=""){let s={errorsResults:[],problemsResults:[],improvementsResults:[],goodResults:[],considerationsResults:[]};if(!e)return s;for(let n=0;n button { + padding-left: 24px; + padding-top: 16px; + + &:hover { + background-color: #f0f0f0; + } + } + + div[class^="collapsible_content"] { + padding: 24px 0; + margin: 0 24px; + border-top: 1px solid rgba(0,0,0,0.2); + } + +`,Z=window.wp.components,J="yoast yoast-gutenberg-modal",Q=e=>{const{title:t,className:s,showYoastIcon:n,additionalClassName:r,...a}=e,o=n?(0,v.createElement)("span",{className:"yoast-icon"}):null;return(0,v.createElement)(Z.Modal,{title:t,className:`${s} ${r}`,icon:o,...a},e.children)};Q.propTypes={title:x().string,className:x().string,showYoastIcon:x().bool,children:x().oneOfType([x().node,x().arrayOf(x().node)]),additionalClassName:x().string},Q.defaultProps={title:"Yoast SEO",className:J,showYoastIcon:!0,children:null,additionalClassName:""};const X=Q,ee=(window.yoast.socialMetadataForms,e=>({type:e.subtype,width:e.width,height:e.height,url:e.url,id:e.id,sizes:e.sizes,alt:e.alt||e.title||e.name}));const te=({hiddenField:e,hiddenFieldImageId:t,hiddenFieldFallbackImageId:s,hasImageValidation:n,...r})=>{const[a,o]=(0,k.useState)(null!==document.getElementById(s)),i=(0,k.useMemo)((()=>document.getElementById(e))),l=(0,k.useMemo)((()=>document.getElementById(t)));let c=null;c=s&&document.getElementById(s)?(0,k.useMemo)((()=>document.getElementById(s))):l;const[u,d]=(0,k.useState)({url:i?i.value:"",id:c?parseInt(c.value,10):"",alt:""}),[p,m]=(0,k.useState)([]),h=(0,k.useCallback)((e=>{i&&(i.value=e.url),c&&(c.value=e.id)})),g=(0,k.useCallback)((()=>{(function(e){const t=window.wp.media();return t.on("select",(()=>{const s=t.state().get("selection").first();e(ee(s.attributes))})),t})((e=>{c=l,d(e),h(e),n&&m((0,S.validateFacebookImage)(e)),o(!1)})).open()}),[n,h]),y=(0,k.useCallback)((()=>{c=l;const e={url:"",id:"",alt:""};d(e),h(e),m([]),o(!0)}),[h]);return(0,k.useEffect)((()=>{u.id&&!u.alt&&function(e){return new Promise(((t,s)=>{window.wp.media.attachment||s(),window.wp.media.attachment(e).fetch().then((e=>{t(ee(e))})).catch((()=>s()))}))}(u.id).then((e=>d(e)))}),[u]),(0,v.createElement)(T.ImageSelect,{...r,usingFallback:a,imageUrl:u.url,imageId:u.id,imageAltText:u.alt,onClick:g,onRemoveImageClick:y,warnings:p})};te.propTypes={hiddenField:x().string.isRequired,hiddenFieldImageId:x().string,hiddenFieldFallbackImageId:x().string,hasImageValidation:x().bool},te.defaultProps={hiddenFieldImageId:"",hiddenFieldFallbackImageId:"",hasImageValidation:!1};const se=te;function ne({target:e,children:t}){let s=e;return"string"==typeof e&&(s=document.getElementById(e)),s?(0,k.createPortal)(t,s):null}function re({target:e,label:t,hasPreview:s,hiddenField:n,hiddenFieldImageId:r,hiddenFieldFallbackImageId:a,selectImageButtonId:o,replaceImageButtonId:i,removeImageButtonId:l,hasNewBadge:c,isDisabled:u,hasPremiumBadge:d,hasImageValidation:p}){return(0,v.createElement)(ne,{target:e},(0,v.createElement)(se,{label:t,hasPreview:s,hiddenField:n,hiddenFieldImageId:r,hiddenFieldFallbackImageId:a,selectImageButtonId:o,replaceImageButtonId:i,removeImageButtonId:l,hasNewBadge:c,isDisabled:u,hasPremiumBadge:d,hasImageValidation:p}))}ne.propTypes={target:x().oneOfType([x().string,x().object]).isRequired,children:x().node.isRequired},re.propTypes={target:x().string.isRequired,label:x().string.isRequired,hasPreview:x().bool.isRequired,hiddenField:x().string.isRequired,hiddenFieldImageId:x().string,hiddenFieldFallbackImageId:x().string,selectImageButtonId:x().string,replaceImageButtonId:x().string,removeImageButtonId:x().string,hasNewBadge:x().bool,isDisabled:x().bool,hasPremiumBadge:x().bool,hasImageValidation:x().bool},re.defaultProps={hiddenFieldImageId:"",hiddenFieldFallbackImageId:"",selectImageButtonId:"",replaceImageButtonId:"",removeImageButtonId:"",hasNewBadge:!1,isDisabled:!1,hasPremiumBadge:!1,hasImageValidation:!1};const ae=({target:e,scoreIndicator:t})=>(0,v.createElement)(ne,{target:e},(0,v.createElement)(T.SvgIcon,{...z(t)}));ae.propTypes={target:x().string.isRequired,scoreIndicator:x().string.isRequired};const oe=ae,ie=e=>{const[t,s]=(0,k.useState)(!1),{prefixIcon:n}=e;return(0,v.createElement)("div",{className:"yoast components-panel__body "+(t?"is-opened":"")},(0,v.createElement)("h2",{className:"components-panel__body-title"},(0,v.createElement)("button",{onClick:function(){s(!t)},className:"components-button components-panel__body-toggle",type:"button",id:e.buttonId},(0,v.createElement)("span",{className:"yoast-icon-span",style:{fill:`${n&&n.color||""}`}},n&&(0,v.createElement)(T.SvgIcon,{icon:n.icon,color:n.color,size:n.size})),(0,v.createElement)("span",{className:"yoast-title-container"},(0,v.createElement)("div",{className:"yoast-title"},e.title),(0,v.createElement)("div",{className:"yoast-subtitle"},e.subTitle)),e.hasBetaBadgeLabel&&(0,v.createElement)(T.BetaBadge,null),(0,v.createElement)("span",{className:"yoast-chevron","aria-hidden":"true"}))),t&&e.children)},le=ie;ie.propTypes={title:x().string.isRequired,children:x().oneOfType([x().node,x().arrayOf(x().node)]).isRequired,prefixIcon:x().object,subTitle:x().string,hasBetaBadgeLabel:x().bool,buttonId:x().string},ie.defaultProps={prefixIcon:null,subTitle:"",hasBetaBadgeLabel:!1,buttonId:null};const ce=({children:e})=>(0,v.createElement)("div",null,e);ce.propTypes={renderPriority:x().number.isRequired,children:x().node.isRequired};const ue=ce,de=({theme:e,location:t,children:s})=>(0,v.createElement)(i.LocationProvider,{value:t},(0,v.createElement)(E.ThemeProvider,{theme:e},s));de.propTypes={theme:x().object.isRequired,location:x().oneOf(["sidebar","metabox","modal"]).isRequired,children:x().element.isRequired};const pe=de,me=window.wp.compose,he=window.wp.data,ge=e=>(0,v.createElement)("div",{className:"yoast components-panel__body"},(0,v.createElement)("h2",{className:"components-panel__body-title"},(0,v.createElement)("button",{id:e.id,onClick:e.onClick,className:"components-button components-panel__body-toggle",type:"button"},e.prefixIcon&&(0,v.createElement)("span",{className:"yoast-icon-span",style:{fill:`${e.prefixIcon&&e.prefixIcon.color||""}`}},(0,v.createElement)(T.SvgIcon,{size:e.prefixIcon.size,icon:e.prefixIcon.icon})),(0,v.createElement)("span",{className:"yoast-title-container"},(0,v.createElement)("div",{className:"yoast-title"},e.title),(0,v.createElement)("div",{className:"yoast-subtitle"},e.subTitle)),e.children,e.suffixIcon&&(0,v.createElement)(T.SvgIcon,{size:e.suffixIcon.size,icon:e.suffixIcon.icon}),e.SuffixHeroIcon))),ye=ge;ge.propTypes={onClick:x().func.isRequired,title:x().string.isRequired,id:x().string,subTitle:x().string,suffixIcon:x().object,SuffixHeroIcon:x().object,prefixIcon:x().object,children:x().node},ge.defaultProps={id:"",suffixIcon:null,SuffixHeroIcon:null,prefixIcon:null,subTitle:"",children:null};const fe=({id:e,postTypeName:t,children:s,title:n,isOpen:r,close:a,open:o,shouldCloseOnClickOutside:l,showChangesWarning:c,SuffixHeroIcon:u})=>(0,v.createElement)(k.Fragment,null,r&&(0,v.createElement)(i.LocationProvider,{value:"modal"},(0,v.createElement)(X,{title:n,onRequestClose:a,additionalClassName:"yoast-collapsible-modal yoast-post-settings-modal",id:"id",shouldCloseOnClickOutside:l},(0,v.createElement)("div",{className:"yoast-content-container"},(0,v.createElement)("div",{className:"yoast-modal-content"},s)),(0,v.createElement)("div",{className:"yoast-notice-container"},(0,v.createElement)("hr",null),(0,v.createElement)("div",{className:"yoast-button-container"},c&&(0,v.createElement)("p",null,/* Translators: %s translates to the Post Label in singular form */ +(0,d.sprintf)((0,d.__)("Make sure to save your %s for changes to take effect","wordpress-seo"),t)),(0,v.createElement)("button",{className:"yoast-button yoast-button--primary yoast-button--post-settings-modal",type:"button",onClick:a},/* Translators: %s translates to the Post Label in singular form */ +(0,d.sprintf)((0,d.__)("Return to your %s","wordpress-seo"),t)))))),(0,v.createElement)(ye,{id:e+"-open-button",title:n,SuffixHeroIcon:u,suffixIcon:u?null:{size:"20px",icon:"pencil-square"},onClick:o}));fe.propTypes={id:x().string.isRequired,postTypeName:x().string.isRequired,children:x().oneOfType([x().node,x().arrayOf(x().node)]).isRequired,title:x().string.isRequired,isOpen:x().bool.isRequired,open:x().func.isRequired,close:x().func.isRequired,shouldCloseOnClickOutside:x().bool,showChangesWarning:x().bool,SuffixHeroIcon:x().object},fe.defaultProps={shouldCloseOnClickOutside:!0,showChangesWarning:!0};const be=fe,we=(0,me.compose)([(0,he.withSelect)(((e,t)=>{const{getPostOrPageString:s,getIsModalOpen:n}=e("yoast-seo/editor");return{postTypeName:s(),isOpen:n(t.id)}})),(0,he.withDispatch)(((e,t)=>{const{openEditorModal:s,closeEditorModal:n}=e("yoast-seo/editor");return{open:()=>s(t.id),close:n}}))])(be),ve=(0,me.compose)([(0,he.withSelect)(((e,t)=>{const{isAlertDismissed:s}=e(t.store||"yoast-seo/editor");return{isAlertDismissed:s(t.alertKey)}})),(0,he.withDispatch)(((e,t)=>{const{dismissAlert:s}=e(t.store||"yoast-seo/editor");return{onDismissed:()=>s(t.alertKey)}}))])(T.Alert),ke=window.yoast.analysisReport,Ee=window.yoast.uiLibrary,Re=v.forwardRef((function(e,t){return v.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),v.createElement("path",{fillRule:"evenodd",d:"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z",clipRule:"evenodd"}))})),_e=(R().div` + min-width: 600px; + + @media screen and ( max-width: 680px ) { + min-width: 0; + width: 86vw; + } +`,R().div` + @media screen and ( min-width: 600px ) { + max-width: 420px; + } +`),xe=(R()(T.Icon)` + float: ${(0,S.getDirectionalStyle)("right","left")}; + margin: ${(0,S.getDirectionalStyle)("0 0 16px 16px","0 16px 16px 0")}; + + && { + width: 150px; + height: 150px; + + @media screen and ( max-width: 680px ) { + width: 80px; + height: 80px; + } + } +`,window.wp.url),Te=R().div` + padding: 25px 32px 32px; + color: #303030; +`,Se=R().ul` + margin: 0; + padding: 0; + + li { + list-style-image: var(--yoast-svg-icon-check); + margin: 0.5rem 0 0 1.5rem; + line-height: 1.4em; + + &::marker { + font-size: 1.5rem; + } + } +`,Ce=R().span` + display: block; + margin-top: 4px; +`,Ie=R().h2` + margin-top: 0; + margin-bottom: 0.25rem; + color: #303030; + font-size: 0.8125rem; + font-weight: 600; +`,Le=R().p` + display: block; + margin: 0.25rem 0 1rem 0 !important; + max-width: 420px; +`,Ae=R().hr` + margin-top: 1.5rem; + margin-bottom: 1rem; + border-top: 0; + border-bottom: 1px solid #E2E8F0; +`,qe=R().div` + text-align: center; +`,Pe=R().a` + width: 100%; +`,Ne=(0,S.makeOutboundLink)(Pe);class Be extends k.Component{constructor(e){super(e),this.state={defaultPrice:"99"}}createBenefitsList(e){return e.length>0&&(0,v.createElement)(Se,{role:"list"},e.map(((e,t)=>(0,v.createElement)("li",{key:`upsell-benefit-${t}`},(0,k.createInterpolateElement)(e,{strong:(0,v.createElement)("strong",null)})))))}render(){const e=(0,he.select)("yoast-seo/editor").isPromotionActive("black-friday-2023-promotion"),{defaultPrice:t}=this.state,s=e?"69.30":null,n=s||t;return(0,v.createElement)(k.Fragment,null,e&&(0,v.createElement)("div",{className:"yst-flex yst-justify-between yst-items-center yst-text-lg yst-content-between yst-bg-black yst-text-amber-300 yst-h-9 yst-border-amber-300 yst-border-y yst-border-x-0 yst-border-solid yst-px-6"},(0,v.createElement)("div",null,(0,d.__)("BLACK FRIDAY","wordpress-seo")),(0,v.createElement)("div",null,(0,d.__)("30% OFF","wordpress-seo"))),(0,v.createElement)(Te,null,(0,v.createElement)(Ie,null,this.props.title),(0,v.createElement)(Le,null,this.props.description),(0,v.createElement)(qe,null,(0,v.createElement)(Ne,{...this.props.upsellButton},this.props.upsellButtonText,this.props.upsellButtonHasCaret&&(0,v.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,v.createElement)("div",{className:"yst-text-slate-600 yst-my-4"},s&&(0,v.createElement)(k.Fragment,null,(0,v.createElement)("span",{className:"yst-text-slate-500 yst-line-through"},t)," "),(0,v.createElement)("span",{className:"yst-text-slate-900 yst-text-2xl yst-font-bold"},n)," ",(0,d.__)("$ USD / € EUR / £ GBP per year (ex. VAT)","wordpress-seo")),(0,v.createElement)(Ce,{id:this.props.upsellButton["aria-describedby"]},this.props.upsellButtonLabel)),(0,v.createElement)(Ae,null),(0,v.createElement)(Ie,null,this.props.benefitsTitle),this.createBenefitsList(this.props.benefits)))}}Be.propTypes={title:x().node,benefits:x().array,benefitsTitle:x().node,description:x().node,upsellButton:x().object,upsellButtonText:x().string.isRequired,upsellButtonLabel:x().string,upsellButtonHasCaret:x().bool},Be.defaultProps={title:null,description:null,benefits:[],benefitsTitle:null,upsellButton:{href:"",className:"button button-primary"},upsellButtonLabel:"",upsellButtonHasCaret:!0};const Me=Be,Fe=(0,d.__)("Check your text on even more SEO criteria and get an enhanced keyphrase analysis, making it easier to optimize your content.","wordpress-seo"),Oe=e=>{const{locationContext:t}=(0,i.useRootContext)(),s=(0,xe.addQueryArgs)(wpseoAdminL10n[e.buyLink],{context:t});return(0,v.createElement)(Me,{title:(0,d.__)("Get more help with writing content that ranks","wordpress-seo"),description:e.description,benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,d.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:[(0,d.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,d.__)("%1$sAI%2$s: Better SEO titles and meta descriptions, faster.","wordpress-seo"),"",""),(0,d.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,d.__)("%1$sMultiple keywords%2$s: Rank higher for more searches.","wordpress-seo"),"",""),(0,d.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,d.__)("%1$sSuper fast%2$s internal linking suggestions.","wordpress-seo"),"",""),(0,d.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,d.__)("%1$sNo more broken links%2$s: Automatic redirect manager.","wordpress-seo"),"",""),(0,d.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,d.__)("%1$sAppealing social previews%2$s people actually want to click on.","wordpress-seo"),"",""),(0,d.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,d.__)("%1$s24/7 support%2$s: Also on evenings and weekends.","wordpress-seo"),"","")],upsellButtonText:(0,d.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,d.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:s,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,d.__)("1 year of premium support and updates included!","wordpress-seo")})};Oe.propTypes={buyLink:x().string.isRequired,description:x().string},Oe.defaultProps={description:Fe};const Ke=Oe;class De extends k.Component{constructor(e){super(e);const t=this.props.results;this.state={mappedResults:{}},null!==t&&(this.state={mappedResults:U(t,this.props.keywordKey)}),this.handleMarkButtonClick=this.handleMarkButtonClick.bind(this),this.handleEditButtonClick=this.handleEditButtonClick.bind(this),this.handleResultsChange=this.handleResultsChange.bind(this),this.renderHighlightingUpsell=this.renderHighlightingUpsell.bind(this),this.createMarkButton=this.createMarkButton.bind(this)}componentDidUpdate(e){null!==this.props.results&&this.props.results!==e.results&&this.setState({mappedResults:U(this.props.results,this.props.keywordKey)})}createMarkButton({ariaLabel:e,id:t,className:s,status:n,onClick:r,isPressed:a}){return(0,v.createElement)(k.Fragment,null,(0,v.createElement)(T.IconButtonToggle,{marksButtonStatus:n,className:s,onClick:r,id:t,icon:"eye",pressed:a,ariaLabel:e}),this.props.shouldUpsellHighlighting&&(0,v.createElement)("div",{className:"yst-root"},(0,v.createElement)(Ee.Badge,{className:"yst-absolute yst-px-[3px] yst-py-[3px] yst--right-[6.5px] yst--top-[6.5px]",size:"small",variant:"upsell"},(0,v.createElement)(Re,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",role:"img","aria-hidden":!0,focusable:!1}))))}deactivateMarker(){this.props.setActiveMarker(null),this.props.setMarkerPauseStatus(!1),this.removeMarkers()}activateMarker(e,t){this.props.setActiveMarker(e),t()}handleMarkButtonClick(e,t){const s=this.props.keywordKey.length>0?`${this.props.keywordKey}:${e}`:e;this.props.activeAIFixesButton&&this.props.setActiveAIFixesButton(null),s===this.props.activeMarker?this.deactivateMarker():this.activateMarker(s,t)}handleResultsChange(e,t,s){const n=this.props.keywordKey.length>0?`${this.props.keywordKey}:${e}`:e;n===this.props.activeMarker&&(s?(0,c.isUndefined)(t)||this.activateMarker(n,t):this.deactivateMarker())}focusOnKeyphraseField(e){const t=this.props.keywordKey,s=""===t?"focus-keyword-input-"+e:"yoast-keyword-input-"+t+"-"+e,n=document.getElementById(s);n.focus(),n.scrollIntoView({behavior:"auto",block:"center",inline:"center"})}focusOnGooglePreviewField(e,t){let s;s="metaDescriptionKeyword"===e||"metaDescriptionLength"===e?"description":"titleWidth"===e||"keyphraseInSEOTitle"===e?"title":"slug";const n=document.getElementById("yoast-google-preview-"+s+"-"+t);n.focus(),n.scrollIntoView({behavior:"auto",block:"center",inline:"center"})}handleEditButtonClick(e){const t=this.props.location;"functionWordsInKeyphrase"!==e&&"keyphraseLength"!==e?(["metaDescriptionKeyword","metaDescriptionLength","titleWidth","keyphraseInSEOTitle","slugKeyword"].includes(e)&&this.handleGooglePreviewFocus(t,e),(0,m.doAction)("yoast.focus.input",e)):this.focusOnKeyphraseField(t)}handleGooglePreviewFocus(e,t){if("sidebar"===e)document.getElementById("yoast-search-appearance-modal-open-button").click(),setTimeout((()=>this.focusOnGooglePreviewField(t,"modal")),500);else{const s=document.getElementById("yoast-snippet-editor-metabox");s&&"false"===s.getAttribute("aria-expanded")?(s.click(),setTimeout((()=>this.focusOnGooglePreviewField(t,e)),100)):this.focusOnGooglePreviewField(t,e)}}removeMarkers(){window.YoastSEO.analysis.applyMarks(new p.Paper("",{}),[])}renderHighlightingUpsell(e,t){const s=(0,d.__)("Highlight areas of improvement in your text, no more searching for a needle in a haystack, straight to optimizing! Now also in Elementor!","wordpress-seo");return e&&(0,v.createElement)(X,{title:(0,d.__)("Unlock Premium SEO analysis","wordpress-seo"),onRequestClose:t,additionalClassName:"",className:`${J} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,id:"yoast-premium-seo-analysis-highlighting-modal",shouldCloseOnClickOutside:!0},(0,v.createElement)(_e,null,(0,v.createElement)(Ke,{buyLink:this.props.highlightingUpsellLink,description:s})))}render(){const{mappedResults:e}=this.state,{errorsResults:t,improvementsResults:s,goodResults:n,considerationsResults:r,problemsResults:a}=e,{upsellResults:o,resultCategoryLabels:i}=this.props,l={errors:(0,d.__)("Errors","wordpress-seo"),problems:(0,d.__)("Problems","wordpress-seo"),improvements:(0,d.__)("Improvements","wordpress-seo"),considerations:(0,d.__)("Considerations","wordpress-seo"),goodResults:(0,d.__)("Good results","wordpress-seo")},c=Object.assign(l,i);let u=this.props.marksButtonStatus;return"enabled"===u&&this.props.shortcodesForParsing.length>0&&(u="disabled"),(0,v.createElement)(k.Fragment,null,(0,v.createElement)(ke.ContentAnalysis,{errorsResults:t,problemsResults:a,upsellResults:o,improvementsResults:s,considerationsResults:r,goodResults:n,activeMarker:this.props.activeMarker,onMarkButtonClick:this.handleMarkButtonClick,onEditButtonClick:this.handleEditButtonClick,marksButtonClassName:this.props.marksButtonClassName,editButtonClassName:this.props.editButtonClassName,marksButtonStatus:u,headingLevel:3,keywordKey:this.props.keywordKey,isPremium:this.props.isPremium,resultCategoryLabels:c,onResultChange:this.handleResultsChange,shouldUpsellHighlighting:this.props.shouldUpsellHighlighting,renderAIFixesButton:this.props.renderAIFixesButton,renderHighlightingUpsell:this.renderHighlightingUpsell,markButtonFactory:this.createMarkButton}))}}De.propTypes={results:x().array,upsellResults:x().array,marksButtonClassName:x().string,editButtonClassName:x().string,marksButtonStatus:x().oneOf(["enabled","disabled","hidden"]),setActiveMarker:x().func.isRequired,setMarkerPauseStatus:x().func.isRequired,setActiveAIFixesButton:x().func.isRequired,activeMarker:x().string,activeAIFixesButton:x().string,keywordKey:x().string,location:x().string,isPremium:x().bool,resultCategoryLabels:x().shape({errors:x().string,problems:x().string,improvements:x().string,considerations:x().string,goodResults:x().string}),shortcodesForParsing:x().array,shouldUpsellHighlighting:x().bool,highlightingUpsellLink:x().string,renderAIFixesButton:x().func},De.defaultProps={results:null,upsellResults:[],marksButtonStatus:"enabled",marksButtonClassName:"",editButtonClassName:"",activeMarker:null,activeAIFixesButton:null,keywordKey:"",location:"",isPremium:!1,resultCategoryLabels:{},shortcodesForParsing:[],shouldUpsellHighlighting:!1,highlightingUpsellLink:"",renderAIFixesButton:()=>{}};const $e=De,He=(0,me.compose)([(0,he.withSelect)((e=>{const{getActiveMarker:t,getIsPremium:s,getShortcodesForParsing:n,getActiveAIFixesButton:r}=e("yoast-seo/editor");return{activeMarker:t(),isPremium:s(),shortcodesForParsing:n(),activeAIFixesButton:r()}})),(0,he.withDispatch)((e=>{const{setActiveMarker:t,setMarkerPauseStatus:s,setActiveAIFixesButton:n}=e("yoast-seo/editor");return{setActiveMarker:t,setMarkerPauseStatus:s,setActiveAIFixesButton:n}}))])($e),We=()=>(0,v.createElement)("p",{className:"yoast-related-keyphrases-modal__loading-message"},(0,d.sprintf)(/* translators: %1$s expands to "Yoast SEO", %2$s expands to "Semrush". */ +(0,d.__)("Please wait while %1$s connects to %2$s to get related keyphrases...","wordpress-seo"),"Yoast SEO","Semrush")," ",(0,v.createElement)(T.SvgIcon,{icon:"loading-spinner"})),je=(0,S.makeOutboundLink)(),Ye=()=>(0,v.createElement)(k.Fragment,null,(0,v.createElement)("p",null,(0,d.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,d.__)("You've reached your request limit for today. Check back tomorrow or upgrade your plan over at %s.","wordpress-seo"),"Semrush")),(0,v.createElement)(je,{href:window.wpseoAdminL10n["shortlinks.semrush.prices"],className:"yoast-button-upsell"},(0,d.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,d.__)("Upgrade your %s plan","wordpress-seo"),"Semrush"),(0,v.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"}))),ze=window.wp.apiFetch;var Ue=s.n(ze);const Ve="yoast-semrush-country-selector",Ge=[{value:"us",name:"United States - US"},{value:"uk",name:"United Kingdom - UK"},{value:"ca",name:"Canada - CA"},{value:"ru",name:"Russia - RU"},{value:"de",name:"Germany - DE"},{value:"fr",name:"France - FR"},{value:"es",name:"Spain - ES"},{value:"it",name:"Italy - IT"},{value:"br",name:"Brazil - BR"},{value:"au",name:"Australia - AU"},{value:"ar",name:"Argentina - AR"},{value:"be",name:"Belgium - BE"},{value:"ch",name:"Switzerland - CH"},{value:"dk",name:"Denmark - DK"},{value:"fi",name:"Finland - FI"},{value:"hk",name:"Hong Kong - HK"},{value:"ie",name:"Ireland - IE"},{value:"il",name:"Israel - IL"},{value:"mx",name:"Mexico - MX"},{value:"nl",name:"Netherlands - NL"},{value:"no",name:"Norway - NO"},{value:"pl",name:"Poland - PL"},{value:"se",name:"Sweden - SE"},{value:"sg",name:"Singapore - SG"},{value:"tr",name:"Turkey - TR"},{value:"jp",name:"Japan - JP"},{value:"in",name:"India - IN"},{value:"hu",name:"Hungary - HU"},{value:"af",name:"Afghanistan - AF"},{value:"al",name:"Albania - AL"},{value:"dz",name:"Algeria - DZ"},{value:"ao",name:"Angola - AO"},{value:"am",name:"Armenia - AM"},{value:"at",name:"Austria - AT"},{value:"az",name:"Azerbaijan - AZ"},{value:"bh",name:"Bahrain - BH"},{value:"bd",name:"Bangladesh - BD"},{value:"by",name:"Belarus - BY"},{value:"bz",name:"Belize - BZ"},{value:"bo",name:"Bolivia - BO"},{value:"ba",name:"Bosnia and Herzegovina - BA"},{value:"bw",name:"Botswana - BW"},{value:"bn",name:"Brunei - BN"},{value:"bg",name:"Bulgaria - BG"},{value:"cv",name:"Cabo Verde - CV"},{value:"kh",name:"Cambodia - KH"},{value:"cm",name:"Cameroon - CM"},{value:"cl",name:"Chile - CL"},{value:"co",name:"Colombia - CO"},{value:"cr",name:"Costa Rica - CR"},{value:"hr",name:"Croatia - HR"},{value:"cy",name:"Cyprus - CY"},{value:"cz",name:"Czech Republic - CZ"},{value:"cd",name:"Congo - CD"},{value:"do",name:"Dominican Republic - DO"},{value:"ec",name:"Ecuador - EC"},{value:"eg",name:"Egypt - EG"},{value:"sv",name:"El Salvador - SV"},{value:"ee",name:"Estonia - EE"},{value:"et",name:"Ethiopia - ET"},{value:"ge",name:"Georgia - GE"},{value:"gh",name:"Ghana - GH"},{value:"gr",name:"Greece - GR"},{value:"gt",name:"Guatemala - GT"},{value:"gy",name:"Guyana - GY"},{value:"ht",name:"Haiti - HT"},{value:"hn",name:"Honduras - HN"},{value:"is",name:"Iceland - IS"},{value:"id",name:"Indonesia - ID"},{value:"jm",name:"Jamaica - JM"},{value:"jo",name:"Jordan - JO"},{value:"kz",name:"Kazakhstan - KZ"},{value:"kw",name:"Kuwait - KW"},{value:"lv",name:"Latvia - LV"},{value:"lb",name:"Lebanon - LB"},{value:"lt",name:"Lithuania - LT"},{value:"lu",name:"Luxembourg - LU"},{value:"mg",name:"Madagascar - MG"},{value:"my",name:"Malaysia - MY"},{value:"mt",name:"Malta - MT"},{value:"mu",name:"Mauritius - MU"},{value:"md",name:"Moldova - MD"},{value:"mn",name:"Mongolia - MN"},{value:"me",name:"Montenegro - ME"},{value:"ma",name:"Morocco - MA"},{value:"mz",name:"Mozambique - MZ"},{value:"na",name:"Namibia - NA"},{value:"np",name:"Nepal - NP"},{value:"nz",name:"New Zealand - NZ"},{value:"ni",name:"Nicaragua - NI"},{value:"ng",name:"Nigeria - NG"},{value:"om",name:"Oman - OM"},{value:"py",name:"Paraguay - PY"},{value:"pe",name:"Peru - PE"},{value:"ph",name:"Philippines - PH"},{value:"pt",name:"Portugal - PT"},{value:"ro",name:"Romania - RO"},{value:"sa",name:"Saudi Arabia - SA"},{value:"sn",name:"Senegal - SN"},{value:"rs",name:"Serbia - RS"},{value:"sk",name:"Slovakia - SK"},{value:"si",name:"Slovenia - SI"},{value:"za",name:"South Africa - ZA"},{value:"kr",name:"South Korea - KR"},{value:"lk",name:"Sri Lanka - LK"},{value:"th",name:"Thailand - TH"},{value:"bs",name:"Bahamas - BS"},{value:"tt",name:"Trinidad and Tobago - TT"},{value:"tn",name:"Tunisia - TN"},{value:"ua",name:"Ukraine - UA"},{value:"ae",name:"United Arab Emirates - AE"},{value:"uy",name:"Uruguay - UY"},{value:"ve",name:"Venezuela - VE"},{value:"vn",name:"Vietnam - VN"},{value:"zm",name:"Zambia - ZM"},{value:"zw",name:"Zimbabwe - ZW"},{value:"ly",name:"Libya - LY"}];class Ze extends k.Component{constructor(e){super(e),this.relatedKeyphrasesRequest=this.relatedKeyphrasesRequest.bind(this),this.onChangeHandler=this.onChangeHandler.bind(this)}componentDidMount(){this.props.response&&this.props.keyphrase===this.props.lastRequestKeyphrase||this.relatedKeyphrasesRequest()}storeCountryCode(e){Ue()({path:"yoast/v1/semrush/country_code",method:"POST",data:{country_code:e}})}async relatedKeyphrasesRequest(){const{keyphrase:e,countryCode:t,newRequest:s}=this.props;s(t,e),this.storeCountryCode(t);const n=await this.doRequest(e,t);200!==n.status?this.handleFailedResponse(n):this.handleSuccessResponse(n)}handleSuccessResponse(e){const{setNoResultsFound:t,setRequestSucceeded:s}=this.props;0!==e.results.rows.length?s(e):t()}handleFailedResponse(e){const{setRequestLimitReached:t,setRequestFailed:s}=this.props;"error"in e&&(e.error.includes("TOTAL LIMIT EXCEEDED")?t():s(e))}async doRequest(e,t){return await Ue()({path:(0,xe.addQueryArgs)("/yoast/v1/semrush/related_keyphrases",{keyphrase:e,country_code:t})})}onChangeHandler(e){this.props.setCountry(e)}render(){return(0,v.createElement)("div",{id:Ve},(0,v.createElement)(T.SingleSelect,{id:Ve+"-select",label:(0,d.__)("Show results for:","wordpress-seo"),name:"semrush-country-code",options:Ge,selected:this.props.countryCode,onChange:this.onChangeHandler,wrapperClassName:"yoast-field-group yoast-field-group--inline"}),(0,v.createElement)(T.NewButton,{id:Ve+"-button",variant:"secondary",onClick:this.relatedKeyphrasesRequest},(0,d.__)("Select country","wordpress-seo")))}}Ze.propTypes={keyphrase:x().string,countryCode:x().string,response:x().object,lastRequestKeyphrase:x().string,setCountry:x().func.isRequired,newRequest:x().func.isRequired,setNoResultsFound:x().func.isRequired,setRequestSucceeded:x().func.isRequired,setRequestLimitReached:x().func.isRequired,setRequestFailed:x().func.isRequired},Ze.defaultProps={keyphrase:"",countryCode:"us",response:{},lastRequestKeyphrase:""};const Je=Ze,Qe=({data:e,mapChartDataToTableData:t,dataTableCaption:s,dataTableHeaderLabels:n,isDataTableVisuallyHidden:r})=>e.length!==n.length?(0,v.createElement)("p",null,(0,d.__)("The number of headers and header labels don't match.","wordpress-seo")):(0,v.createElement)("div",{className:r?"screen-reader-text":null},(0,v.createElement)("table",null,(0,v.createElement)("caption",null,s),(0,v.createElement)("thead",null,(0,v.createElement)("tr",null,n.map(((e,t)=>(0,v.createElement)("th",{key:t},e))))),(0,v.createElement)("tbody",null,(0,v.createElement)("tr",null,e.map(((e,s)=>(0,v.createElement)("td",{key:s},t(e.y))))))));Qe.propTypes={data:x().arrayOf(x().shape({x:x().number,y:x().number})).isRequired,mapChartDataToTableData:x().func,dataTableCaption:x().string.isRequired,dataTableHeaderLabels:x().array.isRequired,isDataTableVisuallyHidden:x().bool},Qe.defaultProps={mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const Xe=Qe,et=({data:e,width:t,height:s,fillColor:n,strokeColor:r,strokeWidth:a,className:o,mapChartDataToTableData:i,dataTableCaption:l,dataTableHeaderLabels:c,isDataTableVisuallyHidden:u})=>{const d=Math.max(1,Math.max(...e.map((e=>e.x)))),p=Math.max(1,Math.max(...e.map((e=>e.y)))),m=s-a,h=e.map((e=>`${e.x/d*t},${m-e.y/p*m+a}`)).join(" "),g=`0,${m+a} `+h+` ${t},${m+a}`;return(0,v.createElement)(k.Fragment,null,(0,v.createElement)("svg",{width:t,height:s,viewBox:`0 0 ${t} ${s}`,className:o,role:"img","aria-hidden":"true",focusable:"false"},(0,v.createElement)("polygon",{fill:n,points:g}),(0,v.createElement)("polyline",{fill:"none",stroke:r,strokeWidth:a,strokeLinejoin:"round",strokeLinecap:"round",points:h})),i&&(0,v.createElement)(Xe,{data:e,mapChartDataToTableData:i,dataTableCaption:l,dataTableHeaderLabels:c,isDataTableVisuallyHidden:u}))};et.propTypes={data:x().arrayOf(x().shape({x:x().number,y:x().number})).isRequired,width:x().number.isRequired,height:x().number.isRequired,fillColor:x().string,strokeColor:x().string,strokeWidth:x().number,className:x().string,mapChartDataToTableData:x().func,dataTableCaption:x().string.isRequired,dataTableHeaderLabels:x().array.isRequired,isDataTableVisuallyHidden:x().bool},et.defaultProps={fillColor:null,strokeColor:"#000000",strokeWidth:1,className:"",mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const tt=et,st=(0,S.makeOutboundLink)();class nt extends k.Component{constructor(e){super(e),this.transformTrendDataToChartPoints=this.transformTrendDataToChartPoints.bind(this),this.getAreaChartDataTableHeaderLabels=this.getAreaChartDataTableHeaderLabels.bind(this),this.mapAreaChartDataToTableData=this.mapAreaChartDataToTableData.bind(this)}transformTrendDataToChartPoints(e){return e.split(",").map(((e,t)=>({x:t,y:parseFloat(e)})))}getAreaChartDataTableHeaderLabels(){return[(0,d.__)("Twelve months ago","wordpress-seo"),(0,d.__)("Eleven months ago","wordpress-seo"),(0,d.__)("Ten months ago","wordpress-seo"),(0,d.__)("Nine months ago","wordpress-seo"),(0,d.__)("Eight months ago","wordpress-seo"),(0,d.__)("Seven months ago","wordpress-seo"),(0,d.__)("Six months ago","wordpress-seo"),(0,d.__)("Five months ago","wordpress-seo"),(0,d.__)("Four months ago","wordpress-seo"),(0,d.__)("Three months ago","wordpress-seo"),(0,d.__)("Two months ago","wordpress-seo"),(0,d.__)("Last month","wordpress-seo")]}mapAreaChartDataToTableData(e){return Math.round(100*e)}render(){const{keyphrase:e,relatedKeyphrases:t,countryCode:s,data:n,renderAction:r}=this.props,a="https://www.semrush.com/analytics/keywordoverview/?q="+encodeURIComponent(e)+"&db="+encodeURIComponent(s);return n&&!(0,c.isEmpty)(n.results)&&(0,v.createElement)(k.Fragment,null,(0,v.createElement)("table",{className:"yoast yoast-table"},(0,v.createElement)("thead",null,(0,v.createElement)("tr",null,(0,v.createElement)("th",{scope:"col",className:"yoast-table--primary"},(0,d.__)("Related keyphrase","wordpress-seo")),(0,v.createElement)("th",{scope:"col",abbr:(0,d.__)("Volume","wordpress-seo")},(0,d.__)("Volume","wordpress-seo"),(0,v.createElement)(V,{href:window.wpseoAdminL10n["shortlinks.semrush.volume_help"],className:"dashicons"},(0,v.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,d.__)("Learn more about the related keyphrases volume","wordpress-seo")))),(0,v.createElement)("th",{scope:"col",abbr:(0,d.__)("Trend","wordpress-seo")},(0,d.__)("Trend","wordpress-seo"),(0,v.createElement)(V,{href:window.wpseoAdminL10n["shortlinks.semrush.trend_help"],className:"dashicons"},(0,v.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,d.__)("Learn more about the related keyphrases trend","wordpress-seo")))),r&&(0,v.createElement)("td",{className:"yoast-table--nobreak"}))),(0,v.createElement)("tbody",null,n.results.rows.map(((e,s)=>{const n=e[0],a=this.transformTrendDataToChartPoints(e[2]),o=this.getAreaChartDataTableHeaderLabels();return(0,v.createElement)("tr",{key:s},(0,v.createElement)("td",null,n),(0,v.createElement)("td",null,e[1]),(0,v.createElement)("td",{className:"yoast-table--nopadding"},(0,v.createElement)(tt,{width:66,height:24,data:a,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",className:"yoast-related-keyphrases-modal__chart",mapChartDataToTableData:this.mapAreaChartDataToTableData,dataTableCaption:(0,d.__)("Keyphrase volume in the last 12 months on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:o})),r&&(0,v.createElement)("td",{className:"yoast-table--nobreak"},r(n,t)))})))),(0,v.createElement)("p",{style:{marginBottom:0}},(0,v.createElement)(st,{href:a},(0,d.sprintf)(/* translators: %s expands to Semrush */ +(0,d.__)("Get more insights at %s","wordpress-seo"),"Semrush"))))}}nt.propTypes={data:x().object,keyphrase:x().string,relatedKeyphrases:x().array,countryCode:x().string,renderAction:x().func},nt.defaultProps={data:{},keyphrase:"",relatedKeyphrases:[],countryCode:"us",renderAction:null};const rt=nt,at=(0,S.makeOutboundLink)(),ot=()=>(0,v.createElement)(T.Alert,{type:"info"},(0,d.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,d.__)("You’ll reach more people with multiple keyphrases! Want to quickly add these related keyphrases to the %s analyses for even better content optimization?","wordpress-seo"),"Yoast SEO")+" ",(0,v.createElement)(at,{href:window.wpseoAdminL10n["shortlinks.semrush.premium_landing_page"]},(0,d.sprintf)(/* translators: %s: Expands to "Yoast SEO Premium". */ +(0,d.__)("Explore %s!","wordpress-seo"),"Yoast SEO Premium"))),it=()=>(0,v.createElement)(T.Alert,{type:"error"},(0,d.__)("We've encountered a problem trying to get related keyphrases. Please try again later.","wordpress-seo")),lt=()=>(0,v.createElement)(T.Alert,{type:"warning"},(0,d.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,d.__)("You've reached the maximum amount of 4 related keyphrases. You can change or remove related keyphrases in the %s metabox or sidebar.","wordpress-seo"),"Yoast SEO"));function ct(e){const{response:t,lastRequestKeyphrase:s,keyphrase:n,newRequest:r,setCountry:a,renderAction:o,countryCode:i,requestLimitReached:l,setRequestFailed:p,setNoResultsFound:m,relatedKeyphrases:h,setRequestSucceeded:g,setRequestLimitReached:y}=e,f=u().isPremium;return(0,v.createElement)(k.Fragment,null,!l&&(0,v.createElement)(k.Fragment,null,!f&&(0,v.createElement)(ot,null),f&&function(e){return e&&e.length>=4}(h)&&(0,v.createElement)(lt,null),(0,v.createElement)(Je,{countryCode:i,setCountry:a,newRequest:r,keyphrase:n,setRequestFailed:p,setNoResultsFound:m,setRequestSucceeded:g,setRequestLimitReached:y,response:t,lastRequestKeyphrase:s})),function(e){const{isPending:t,requestLimitReached:s,isSuccess:n,response:r,requestHasData:a}=e;return t?(0,v.createElement)(We,null):s?(0,v.createElement)(Ye,null):!n&&function(e){return!(0,c.isEmpty)(e)&&"error"in e}(r)?(0,v.createElement)(it,null):a?void 0:(0,v.createElement)("p",null,(0,d.__)("Sorry, there's no data available for that keyphrase/country combination.","wordpress-seo"))}(e),(0,v.createElement)(rt,{keyphrase:n,relatedKeyphrases:h,countryCode:i,renderAction:o,data:t}))}ct.propTypes={keyphrase:x().string,relatedKeyphrases:x().array,renderAction:x().func,requestLimitReached:x().bool,countryCode:x().string.isRequired,setCountry:x().func.isRequired,newRequest:x().func.isRequired,setRequestSucceeded:x().func.isRequired,setRequestLimitReached:x().func.isRequired,setRequestFailed:x().func.isRequired,setNoResultsFound:x().func.isRequired,response:x().object,lastRequestKeyphrase:x().string},ct.defaultProps={keyphrase:"",relatedKeyphrases:[],renderAction:null,requestLimitReached:!1,response:{},lastRequestKeyphrase:""};const ut=(0,me.compose)([(0,he.withSelect)((e=>{const{getFocusKeyphrase:t,getSEMrushSelectedCountry:s,getSEMrushRequestLimitReached:n,getSEMrushRequestResponse:r,getSEMrushRequestIsSuccess:a,getSEMrushIsRequestPending:o,getSEMrushRequestHasData:i,getSEMrushRequestKeyphrase:l}=e("yoast-seo/editor");return{keyphrase:t(),countryCode:s(),requestLimitReached:n(),response:r(),isSuccess:a(),isPending:o(),requestHasData:i(),lastRequestKeyphrase:l()}})),(0,he.withDispatch)((e=>{const{setSEMrushChangeCountry:t,setSEMrushNewRequest:s,setSEMrushRequestSucceeded:n,setSEMrushRequestFailed:r,setSEMrushSetRequestLimitReached:a,setSEMrushNoResultsFound:o}=e("yoast-seo/editor");return{setCountry:e=>{t(e)},newRequest:(e,t)=>{s(e,t)},setRequestSucceeded:e=>{n(e)},setRequestFailed:e=>{r(e)},setRequestLimitReached:()=>{a()},setNoResultsFound:()=>{o()}}}))])(ct),dt=window.moment;var pt=s.n(dt),mt=s(6746);const ht=(0,S.makeOutboundLink)(),gt=e=>{const t=(0,d.sprintf)(/* translators: %d expands to the amount of allowed keyphrases on a free account, %s expands to a link to Wincher plans. */ +(0,d.__)("You've reached the maximum amount of %d keyphrases you can add to your Wincher account. If you wish to add more keyphrases, please %s.","wordpress-seo"),e.limit,"{{updateWincherPlanLink/}}");return(0,v.createElement)(T.Alert,{type:"error"},(0,mt.Z)({mixedString:t,components:{updateWincherPlanLink:(0,v.createElement)(ht,{href:wpseoAdminGlobalL10n["links.wincher.pricing"]},(0,d.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,d.__)("upgrade your %s plan","wordpress-seo"),"Wincher"))}}))};gt.propTypes={limit:x().number},gt.defaultProps={limit:10};const yt=gt,ft=()=>(0,v.createElement)(T.Alert,{type:"error"},(0,d.__)("Something went wrong while tracking the ranking position(s) of your page. Please try again later.","wordpress-seo"));async function bt(e,t,s,n=200){try{const r=await e();return!!r&&(r.status===n?t(r):s(r))}catch(e){console.error(e.message)}}async function wt(e){try{return await Ue()(e)}catch(e){return e.error&&e.status?e:e instanceof Response&&await e.json()}}async function vt(e){return(0,c.isArray)(e)||(e=[e]),await wt({path:"yoast/v1/wincher/keyphrases/track",method:"POST",data:{keyphrases:e}})}const kt=R().p` + color: ${C.colors.$color_pink_dark}; + font-size: 14px; + font-weight: 700; + margin: 13px 0 10px; +`,Et=R()(T.SvgIcon)` + margin-right: 5px; + vertical-align: middle; +`,Rt=R().button` + position: absolute; + top: 9px; + right: 9px; + border: none; + background: none; + cursor: pointer; +`,_t=R().p` + font-size: 13px; + font-weight: 500; + margin: 10px 0 13px; +`,xt=R().div` + position: relative; + background: ${e=>e.isTitleShortened?"#F5F7F7":"transparent"}; + border: 1px solid #C7C7C7; + border-left: 4px solid${C.colors.$color_pink_dark}; + padding: 0 16px; + margin-bottom: 1.5em; +`,Tt=e=>{const[t,s]=(0,k.useState)(null);return(0,k.useEffect)((()=>{e&&!t&&async function(){return await wt({path:"yoast/v1/wincher/account/limit",method:"GET"})}().then((e=>s(e)))}),[t]),t};Tt.propTypes={limit:x().bool.isRequired};const St=({limit:e,usage:t,isTitleShortened:s,isFreeAccount:n})=>{const r=(0,d.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,d.__)("Your are tracking %1$s out of %2$s keyphrases included in your free account.","wordpress-seo"),t,e),a=(0,d.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,d.__)("Your are tracking %1$s out of %2$s keyphrases included in your account.","wordpress-seo"),t,e),o=n?r:a,i=(0,d.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,d.__)("Keyphrases tracked: %1$s/%2$s","wordpress-seo"),t,e),l=s?i:o;return(0,v.createElement)(kt,null,s&&(0,v.createElement)(Et,{icon:"exclamation-triangle",color:C.colors.$color_pink_dark,size:"14px"}),l)};St.propTypes={limit:x().number.isRequired,usage:x().number.isRequired,isTitleShortened:x().bool,isFreeAccount:x().bool};const Ct=(0,S.makeOutboundLink)(),It=({discount:e,months:t})=>{const s=(0,v.createElement)(Ct,{href:wpseoAdminGlobalL10n["links.wincher.upgrade"],style:{fontWeight:600}},(0,d.sprintf)(/* Translators: %s : Expands to "Wincher". */ +(0,d.__)("Click here to upgrade your %s plan","wordpress-seo"),"Wincher"));if(!e||!t)return(0,v.createElement)(_t,null,s);const n=100*e,r=(0,d.sprintf)( +/* Translators: %1$s expands to upgrade account link. + * %2$s expands to the upgrade discount value. + * %3$s expands to the upgrade discount duration e.g. 2 months. + */ +(0,d.__)("%1$s and get an exclusive %2$s discount for %3$s month(s).","wordpress-seo"),"{{wincherAccountUpgradeLink/}}",n+"%",t);return(0,v.createElement)(_t,null,(0,mt.Z)({mixedString:r,components:{wincherAccountUpgradeLink:s}}))};It.propTypes={discount:x().number,months:x().number};const Lt=({onClose:e,isTitleShortened:t,trackingInfo:s})=>{const n=(()=>{const[e,t]=(0,k.useState)(null);return(0,k.useEffect)((()=>{e||async function(){return await wt({path:"yoast/v1/wincher/account/upgrade-campaign",method:"GET"})}().then((e=>t(e)))}),[e]),e})();if(null===s)return null;const{limit:r,usage:a}=s;if(!(r&&a/r>=.8))return null;const o=Boolean(null==n?void 0:n.discount);return(0,v.createElement)(xt,{isTitleShortened:t},e&&(0,v.createElement)(Rt,{type:"button","aria-label":(0,d.__)("Close the upgrade callout","wordpress-seo"),onClick:e},(0,v.createElement)(T.SvgIcon,{icon:"times-circle",color:C.colors.$color_pink_dark,size:"14px"})),(0,v.createElement)(St,{...s,isTitleShortened:t,isFreeAccount:o}),(0,v.createElement)(It,{discount:null==n?void 0:n.discount,months:null==n?void 0:n.months}))};Lt.propTypes={onClose:x().func,isTitleShortened:x().bool,trackingInfo:x().object};const At=Lt,qt=()=>(0,v.createElement)(T.Alert,{type:"success"},(0,d.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,d.__)("You have successfully connected to %s! You can now track the SEO performance for the keyphrase(s) of this page.","wordpress-seo"),"Wincher")),Pt=()=>(0,v.createElement)(T.Alert,{type:"info"},(0,d.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,d.__)("%s is currently tracking the ranking position(s) of your page. This may take a few minutes. Please wait or check back later.","wordpress-seo"),"Wincher")),Nt=()=>(0,v.createElement)("p",{className:"yoast-wincher-seo-performance-modal__loading-message"},(0,d.__)("Tracking the ranking position...","wordpress-seo")," ",(0,v.createElement)(T.SvgIcon,{icon:"loading-spinner"})),Bt=R()(T.SvgIcon)` + margin-left: 2px; + flex-shrink: 0; + rotate: ${e=>e.isImproving?"-90deg":"90deg"}; +`,Mt=R().span` + color: ${e=>e.isImproving?"#69AB56":"#DC3332"}; + font-size: 13px; + font-weight: 600; + line-height: 20px; + margin-right: 2px; + margin-left: 12px; +`,Ft=R().td` + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,Ot=R().td` + padding-left: 2px !important; +`,Kt=R().td.attrs({className:"yoast-table--nopadding"})` + & > div { + justify-content: center; + } +`,Dt=R().div` + display: flex; + align-items: center; + & > a { + box-sizing: border-box; + } +`,$t=R().button` + background: none; + color: inherit; + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; + display: flex; + align-items: center; +`,Ht=R().tr` + background-color: ${e=>e.isEnabled?"#FFFFFF":"#F9F9F9"} !important; +`;function Wt(e){return Math.round(100*e)}function jt({chartData:e}){if((0,c.isEmpty)(e)||(0,c.isEmpty)(e.position))return"?";const t=function(e){return Array.from({length:e.position.history.length},((e,t)=>t+1)).map((e=>(0,d.sprintf)((0,d._n)("%d day","%d days",e,"wordpress-seo"),e)))}(e),s=e.position.history.map(((e,t)=>({x:t,y:101-e.value})));return(0,v.createElement)(tt,{width:66,height:24,data:s,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",mapChartDataToTableData:Wt,dataTableCaption:(0,d.__)("Keyphrase position in the last 90 days on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:t})}jt.propTypes={chartData:x().object},jt.defaultProps={chartData:{}};const Yt=({rowData:e})=>{var t;if(null==e||null===(t=e.position)||void 0===t||!t.change)return(0,v.createElement)(jt,{chartData:e});const s=e.position.change<0;return(0,v.createElement)(k.Fragment,null,(0,v.createElement)(jt,{chartData:e}),(0,v.createElement)(Mt,{isImproving:s},Math.abs(e.position.change)),(0,v.createElement)(Bt,{icon:"caret-right",color:s?"#69AB56":"#DC3332",size:"14px",isImproving:s}))};function zt(e){var t;const{keyphrase:s,rowData:n,onTrackKeyphrase:r,onUntrackKeyphrase:a,isFocusKeyphrase:o,isDisabled:i,isLoading:l,isSelected:u,onSelectKeyphrases:p}=e,m=!(0,c.isEmpty)(n),h=!(0,c.isEmpty)(null==n||null===(t=n.position)||void 0===t?void 0:t.history),g=(0,k.useCallback)((()=>{i||(m?a(s,n.id):r(s))}),[s,r,a,m,n,i]),y=(0,k.useCallback)((()=>{p((e=>u?e.filter((e=>e!==s)):e.concat(s)))}),[p,u,s]);return(0,v.createElement)(Ht,{isEnabled:m},(0,v.createElement)(Ft,null,h&&(0,v.createElement)(T.Checkbox,{id:"select-"+s,onChange:y,checked:u,label:""})),(0,v.createElement)(Ot,null,s,o&&(0,v.createElement)("span",null,"*")),function(e){const{rowData:t,websiteId:s,keyphrase:n,onSelectKeyphrases:r}=e,a=(0,k.useCallback)((()=>{r([n])}),[r,n]),o=!(0,c.isEmpty)(t),i=t&&t.updated_at&&pt()(t.updated_at)>=pt()().subtract(7,"days"),l=t?(0,d.sprintf)("https://app.wincher.com/websites/%s/keywords?serp=%s&utm_medium=plugin&utm_source=yoast&referer=yoast&partner=yoast",s,t.id):null;return o?i?(0,v.createElement)(k.Fragment,null,(0,v.createElement)("td",null,(0,v.createElement)(Dt,null,function(e){return!e||!e.position||e.position.value>100?"> 100":e.position.value}(t),(0,v.createElement)(T.ButtonStyledLink,{variant:"secondary",href:l,style:{height:28,marginLeft:12},rel:"noopener",target:"_blank"},(0,d.__)("View","wordpress-seo")))),(0,v.createElement)("td",{className:"yoast-table--nopadding"},(0,v.createElement)($t,{type:"button",onClick:a},(0,v.createElement)(Yt,{rowData:t}))),(0,v.createElement)("td",null,(u=t.updated_at,pt()(u).fromNow()))):(0,v.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,v.createElement)(Nt,null)):(0,v.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,v.createElement)("i",null,(0,d.__)("Activate tracking to show the ranking position","wordpress-seo")));var u}(e),(0,v.createElement)(Kt,null,function({keyphrase:e,isEnabled:t,toggleAction:s,isLoading:n}){return n?(0,v.createElement)(T.SvgIcon,{icon:"loading-spinner"}):(0,v.createElement)(T.Toggle,{id:`toggle-keyphrase-tracking-${e}`,className:"wincher-toggle",isEnabled:t,onSetToggleState:s,showToggleStateLabel:!1})}({keyphrase:s,isEnabled:m,toggleAction:g,isLoading:l})))}Yt.propTypes={rowData:x().object},zt.propTypes={rowData:x().object,keyphrase:x().string.isRequired,onTrackKeyphrase:x().func,onUntrackKeyphrase:x().func,isFocusKeyphrase:x().bool,isDisabled:x().bool,isLoading:x().bool,websiteId:x().string,isSelected:x().bool.isRequired,onSelectKeyphrases:x().func.isRequired},zt.defaultProps={rowData:{},onTrackKeyphrase:()=>{},onUntrackKeyphrase:()=>{},isFocusKeyphrase:!1,isDisabled:!1,isLoading:!1,websiteId:""};const Ut=(0,S.makeOutboundLink)(),Vt=R().span` + display: block; + font-style: italic; + + @media (min-width: 782px) { + display: inline; + position: absolute; + ${(0,S.getDirectionalStyle)("right","left")}: 8px; + } +`,Gt=R().div` + width: 100%; + overflow-y: auto; +`,Zt=R().th` + pointer-events: ${e=>e.isDisabled?"none":"initial"}; + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,Jt=R().th` + padding-left: 2px !important; +`,Qt=e=>{const t=(0,k.useRef)();return(0,k.useEffect)((()=>{t.current=e})),t.current},Xt=(0,c.debounce)((async function(e=null,t=null,s=null,n){return await wt({path:"yoast/v1/wincher/keyphrases",method:"POST",data:{keyphrases:e,permalink:s,startAt:t},signal:n})}),500,{leading:!0}),es=e=>{const{addTrackedKeyphrase:t,isLoggedIn:s,keyphrases:n,permalink:r,removeTrackedKeyphrase:a,setKeyphraseLimitReached:o,setRequestFailed:i,setRequestSucceeded:l,setTrackedKeyphrases:u,setHasTrackedAll:p,trackAll:m,trackedKeyphrases:h,isNewlyAuthenticated:g,websiteId:y,focusKeyphrase:f,newRequest:b,startAt:w,selectedKeyphrases:E,onSelectKeyphrases:R}=e,_=(0,k.useRef)(),x=(0,k.useRef)(),S=(0,k.useRef)(!1),[C,I]=(0,k.useState)([]),L=(0,k.useCallback)((e=>{const t=e.toLowerCase();return h&&!(0,c.isEmpty)(h)&&h.hasOwnProperty(t)?h[t]:null}),[h]),A=(0,k.useMemo)((()=>async()=>{await bt((()=>(x.current&&x.current.abort(),x.current="undefined"==typeof AbortController?null:new AbortController,Xt(n,w,r,x.current.signal))),(e=>{l(e),u(e.results)}),(e=>{i(e)}))}),[l,i,u,n,r,w]),q=(0,k.useCallback)((async e=>{const s=(Array.isArray(e)?e:[e]).map((e=>e.toLowerCase()));I((e=>[...e,...s])),await bt((()=>vt(s)),(e=>{l(e),t(e.results),A()}),(e=>{400===e.status&&e.limit&&o(e.limit),i(e)}),201),I((e=>(0,c.without)(e,...s)))}),[l,i,o,t,A]),P=(0,k.useCallback)((async(e,t)=>{e=e.toLowerCase(),I((t=>[...t,e])),await bt((()=>async function(e){return await wt({path:"yoast/v1/wincher/keyphrases/untrack",method:"DELETE",data:{keyphraseID:e}})}(t)),(t=>{l(t),a(e)}),(e=>{i(e)})),I((t=>(0,c.without)(t,e)))}),[l,a,i]),N=(0,k.useCallback)((async e=>{b(),await q(e)}),[b,q]),B=Qt(r),M=Qt(n),F=Qt(w),O=r&&w;(0,k.useEffect)((()=>{s&&O&&(r!==B||(0,c.difference)(n,M).length||w!==F)&&A()}),[s,r,B,n,M,A,O,w,F]),(0,k.useEffect)((()=>{if(s&&m&&null!==h){const e=n.filter((e=>!L(e)));e.length&&q(e),p()}}),[s,m,h,q,p,L,n]),(0,k.useEffect)((()=>{g&&!S.current&&(A(),S.current=!0)}),[g,A]),(0,k.useEffect)((()=>{if(s&&!(0,c.isEmpty)(h))return(0,c.filter)(h,(e=>(0,c.isEmpty)(e.updated_at))).length>0&&(_.current=setInterval((()=>{A()}),1e4)),()=>{clearInterval(_.current)}}),[s,h,A]);const K=s&&null===h,D=(0,k.useMemo)((()=>(0,c.isEmpty)(h)?[]:Object.values(h).filter((e=>{var t;return!(0,c.isEmpty)(null==e||null===(t=e.position)||void 0===t?void 0:t.history)})).map((e=>e.keyword))),[h]),$=(0,k.useMemo)((()=>E.length>0&&D.length>0&&D.every((e=>E.includes(e)))),[E,D]),H=(0,k.useCallback)((()=>{R($?[]:D)}),[R,$,D]),W=(0,k.useMemo)((()=>(0,c.orderBy)(n,[e=>Object.values(h||{}).map((e=>e.keyword)).includes(e)],["desc"])),[n,h]);return n&&!(0,c.isEmpty)(n)&&(0,v.createElement)(k.Fragment,null,(0,v.createElement)(Gt,null,(0,v.createElement)("table",{className:"yoast yoast-table"},(0,v.createElement)("thead",null,(0,v.createElement)("tr",null,(0,v.createElement)(Zt,{isDisabled:0===D.length},(0,v.createElement)(T.Checkbox,{id:"select-all",onChange:H,checked:$,label:""})),(0,v.createElement)(Jt,{scope:"col",abbr:(0,d.__)("Keyphrase","wordpress-seo")},(0,d.__)("Keyphrase","wordpress-seo")),(0,v.createElement)("th",{scope:"col",abbr:(0,d.__)("Position","wordpress-seo")},(0,d.__)("Position","wordpress-seo")),(0,v.createElement)("th",{scope:"col",abbr:(0,d.__)("Position over time","wordpress-seo")},(0,d.__)("Position over time","wordpress-seo")),(0,v.createElement)("th",{scope:"col",abbr:(0,d.__)("Last updated","wordpress-seo")},(0,d.__)("Last updated","wordpress-seo")),(0,v.createElement)("th",{scope:"col",abbr:(0,d.__)("Tracking","wordpress-seo")},(0,d.__)("Tracking","wordpress-seo")))),(0,v.createElement)("tbody",null,W.map(((e,t)=>(0,v.createElement)(zt,{key:`trackable-keyphrase-${t}`,keyphrase:e,onTrackKeyphrase:N,onUntrackKeyphrase:P,rowData:L(e),isFocusKeyphrase:e===f.trim().toLowerCase(),websiteId:y,isDisabled:!s,isLoading:K||C.indexOf(e.toLowerCase())>=0,isSelected:E.includes(e),onSelectKeyphrases:R})))))),(0,v.createElement)("p",{style:{marginBottom:0,position:"relative"}},(0,v.createElement)(Ut,{href:wpseoAdminGlobalL10n["links.wincher.login"]},(0,d.sprintf)(/* translators: %s expands to Wincher */ +(0,d.__)("Get more insights over at %s","wordpress-seo"),"Wincher")),(0,v.createElement)(Vt,null,(0,d.__)("* focus keyphrase","wordpress-seo"))))};es.propTypes={addTrackedKeyphrase:x().func.isRequired,isLoggedIn:x().bool,isNewlyAuthenticated:x().bool,keyphrases:x().array,newRequest:x().func.isRequired,removeTrackedKeyphrase:x().func.isRequired,setRequestFailed:x().func.isRequired,setKeyphraseLimitReached:x().func.isRequired,setRequestSucceeded:x().func.isRequired,setTrackedKeyphrases:x().func.isRequired,setHasTrackedAll:x().func.isRequired,trackAll:x().bool,trackedKeyphrases:x().object,websiteId:x().string,permalink:x().string.isRequired,focusKeyphrase:x().string,startAt:x().string,selectedKeyphrases:x().arrayOf(x().string).isRequired,onSelectKeyphrases:x().func.isRequired},es.defaultProps={isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],trackAll:!1,websiteId:"",focusKeyphrase:""};const ts=es,ss=(0,me.compose)([(0,he.withSelect)((e=>{const{getWincherWebsiteId:t,getWincherTrackableKeyphrases:s,getWincherLoginStatus:n,getWincherPermalink:r,getFocusKeyphrase:a,isWincherNewlyAuthenticated:o,shouldWincherTrackAll:i}=e("yoast-seo/editor");return{focusKeyphrase:a(),keyphrases:s(),isLoggedIn:n(),trackAll:i(),websiteId:t(),isNewlyAuthenticated:o(),permalink:r()}})),(0,he.withDispatch)((e=>{const{setWincherNewRequest:t,setWincherRequestSucceeded:s,setWincherRequestFailed:n,setWincherSetKeyphraseLimitReached:r,setWincherTrackedKeyphrases:a,setWincherTrackingForKeyphrase:o,setWincherTrackAllKeyphrases:i,unsetWincherTrackingForKeyphrase:l}=e("yoast-seo/editor");return{newRequest:()=>{t()},setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{n(e)},setKeyphraseLimitReached:e=>{r(e)},addTrackedKeyphrase:e=>{o(e)},removeTrackedKeyphrase:e=>{l(e)},setTrackedKeyphrases:e=>{a(e)},setHasTrackedAll:()=>{i(!1)}}}))])(ts),ns=(0,S.makeOutboundLink)(),rs=(0,S.makeOutboundLink)(),as=()=>{const e=(0,d.sprintf)((0,d.__)(/* translators: %1$s expands to a link to Wincher, %2$s expands to a link to the keyphrase tracking article on Yoast.com */ +"With %1$s you can track the ranking position of your page in the search results based on your keyphrase(s). %2$s","wordpress-seo"),"{{wincherLink/}}","{{wincherReadMoreLink/}}");return(0,v.createElement)("p",null,(0,mt.Z)({mixedString:e,components:{wincherLink:(0,v.createElement)(ns,{href:wpseoAdminGlobalL10n["links.wincher.website"]},"Wincher"),wincherReadMoreLink:(0,v.createElement)(rs,{href:wpseoAdminL10n["shortlinks.wincher.seo_performance"]},(0,d.__)("Read more about keyphrase tracking with Wincher","wordpress-seo"))}}))},os=()=>(0,v.createElement)(T.Alert,{type:"error"},(0,d.__)("No keyphrase has been set. Please set a keyphrase first.","wordpress-seo")),is=()=>(0,v.createElement)(T.Alert,{type:"info"},(0,d.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,d.__)("Automatic tracking of keyphrases is enabled. Your keyphrase(s) will automatically be tracked by %s when you publish your post.","wordpress-seo"),"Wincher"));class ls{constructor(e,t={},s={}){this.url=e,this.origin=new URL(e).origin,this.eventHandlers=Object.assign({success:{type:"",callback:()=>{}},error:{type:"",callback:()=>{}}},t),this.options=Object.assign({height:570,width:340,title:""},s),this.popup=null,this.createPopup=this.createPopup.bind(this),this.messageHandler=this.messageHandler.bind(this),this.getPopup=this.getPopup.bind(this)}createPopup(){const{height:e,width:t,title:s}=this.options,n=["top="+(window.top.outerHeight/2+window.top.screenY-e/2),"left="+(window.top.outerWidth/2+window.top.screenX-t/2),"width="+t,"height="+e,"resizable=1","scrollbars=1","status=0"];this.popup&&!this.popup.closed||(this.popup=window.open(this.url,s,n.join(","))),this.popup&&this.popup.focus(),window.addEventListener("message",this.messageHandler,!1)}async messageHandler(e){const{data:t,source:s,origin:n}=e;n===this.origin&&this.popup===s&&(t.type===this.eventHandlers.success.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.success.callback(t)),t.type===this.eventHandlers.error.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.error.callback(t)))}getPopup(){return this.popup}isClosed(){return!this.popup||this.popup.closed}focus(){this.isClosed()||this.popup.focus()}}const cs=e=>{const t=(0,d.sprintf)(/* translators: %s expands to a link to open the Wincher login popup. */ +(0,d.__)("It seems like something went wrong when retrieving your website's data. Please %s and try again.","wordpress-seo"),"{{reconnectToWincher/}}","Wincher");return(0,v.createElement)(T.Alert,{type:"error",className:e.className},(0,mt.Z)({mixedString:t,components:{reconnectToWincher:(0,v.createElement)("a",{href:"#",onClick:t=>{t.preventDefault(),e.onReconnect()}},(0,d.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,d.__)("reconnect to %s","wordpress-seo"),"Wincher"))}}))};cs.propTypes={onReconnect:x().func.isRequired,className:x().string},cs.defaultProps={className:""};const us=cs,ds=()=>(0,v.createElement)(T.Alert,{type:"error"},(0,d.__)("Before you can track your SEO performance make sure to set either the post’s title and save it as a draft or manually set the post’s slug.","wordpress-seo")),ps=window.yoast["chart.js"],ms="label";function hs(e,t){"function"==typeof e?e(t):e&&(e.current=t)}function gs(e,t){e.labels=t}function ys(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ms;const n=[];e.datasets=t.map((t=>{const r=e.datasets.find((e=>e[s]===t[s]));return r&&t.data&&!n.includes(r)?(n.push(r),Object.assign(r,t),r):{...t}}))}function fs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ms;const s={labels:[],datasets:[]};return gs(s,e.labels),ys(s,e.datasets,t),s}function bs(e,t){const{height:s=150,width:n=300,redraw:r=!1,datasetIdKey:a,type:o,data:i,options:l,plugins:c=[],fallbackContent:u,updateMode:d,...p}=e,m=(0,v.useRef)(null),h=(0,v.useRef)(),g=()=>{m.current&&(h.current=new ps.Chart(m.current,{type:o,data:fs(i,a),options:l&&{...l},plugins:c}),hs(t,h.current))},y=()=>{hs(t,null),h.current&&(h.current.destroy(),h.current=null)};return(0,v.useEffect)((()=>{!r&&h.current&&l&&function(e,t){const s=e.options;s&&t&&Object.assign(s,t)}(h.current,l)}),[r,l]),(0,v.useEffect)((()=>{!r&&h.current&&gs(h.current.config.data,i.labels)}),[r,i.labels]),(0,v.useEffect)((()=>{!r&&h.current&&i.datasets&&ys(h.current.config.data,i.datasets,a)}),[r,i.datasets]),(0,v.useEffect)((()=>{h.current&&(r?(y(),setTimeout(g)):h.current.update(d))}),[r,l,i.labels,i.datasets,d]),(0,v.useEffect)((()=>{h.current&&(y(),setTimeout(g))}),[o]),(0,v.useEffect)((()=>(g(),()=>y())),[]),v.createElement("canvas",Object.assign({ref:m,role:"img",height:s,width:n},p),u)}const ws=(0,v.forwardRef)(bs);function vs(e,t){return ps.Chart.register(t),(0,v.forwardRef)(((t,s)=>v.createElement(ws,Object.assign({},t,{ref:s,type:e}))))}const ks=vs("line",ps.LineController),Es={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};ps._adapters._date.override("function"==typeof pt()?{_id:"moment",formats:function(){return Es},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=pt()(e,t):e instanceof pt()||(e=pt()(e)),e.isValid()?e.valueOf():null},format:function(e,t){return pt()(e).format(t)},add:function(e,t,s){return pt()(e).add(t,s).valueOf()},diff:function(e,t,s){return pt()(e).diff(pt()(t),s)},startOf:function(e,t,s){return e=pt()(e),"isoWeek"===t?(s=Math.trunc(Math.min(Math.max(0,s),6)),e.isoWeekday(s).startOf("day").valueOf()):e.startOf(t).valueOf()},endOf:function(e,t){return pt()(e).endOf(t).valueOf()}}:{}),Math.PI,Number.POSITIVE_INFINITY,Math.log10,Math.sign,"undefined"==typeof window||window.requestAnimationFrame,new Map,Object.create(null),Object.create(null),Number.EPSILON;const Rs=["top","right","bottom","left"];function _s(e,t,s){const n={};s=s?"-"+s:"";for(let r=0;r<4;r++){const a=Rs[r];n[a]=parseFloat(e[t+"-"+a+s])||0}return n.width=n.left+n.right,n.height=n.top+n.bottom,n}!function(){let e=!1;try{const t={get passive(){return e=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}}(),ps.Chart.register(ps.CategoryScale,ps.LineController,ps.LineElement,ps.PointElement,ps.LinearScale,ps.TimeScale,ps.Legend,ps.Tooltip);const xs=["#ff983b","#ffa3f7","#3798ff","#ff3b3b","#acce81","#b51751","#3949ab","#26c6da","#ccb800","#de66ff","#4db6ac","#ffab91","#45f5f1","#77f210","#90a4ae","#ffd54f","#006b5e","#8ec7d2","#b1887c","#cc9300"];function Ts({datasets:e,isChartShown:t,keyphrases:s}){if(!t)return null;const n=(0,k.useMemo)((()=>Object.fromEntries([...s].sort().map(((e,t)=>[e,xs[t%xs.length]])))),[s]),r=e.map((e=>{const t=n[e.label];return{...e,data:e.data.map((({datetime:e,value:t})=>({x:e,y:t}))),lineTension:0,pointRadius:1,pointHoverRadius:4,borderWidth:2,pointHitRadius:6,backgroundColor:t,borderColor:t}})).filter((e=>!1!==e.selected));return(0,v.createElement)(ks,{height:100,data:{datasets:r},options:{plugins:{legend:{display:!0,position:"bottom",labels:{color:"black",usePointStyle:!0,boxHeight:7,boxWidth:7},onClick:c.noop},tooltip:{enabled:!0,callbacks:{title:e=>pt()(e[0].raw.x).utc().format("YYYY-MM-DD")},titleAlign:"center",mode:"xPoint",position:"nearest",usePointStyle:!0,boxHeight:7,boxWidth:7,boxPadding:2}},scales:{x:{bounds:"ticks",type:"time",time:{unit:"day",minUnit:"day"},grid:{display:!1},ticks:{autoSkipPadding:50,maxRotation:0,color:"black"}},y:{bounds:"ticks",offset:!0,reverse:!0,ticks:{precision:0,color:"black"},max:101}}}})}ps.Interaction.modes.xPoint=(e,t,s,n)=>{const r=function(e,t){if("native"in e)return e;const{canvas:s,currentDevicePixelRatio:n}=t,r=(m=s).ownerDocument.defaultView.getComputedStyle(m,null),a="border-box"===r.boxSizing,o=_s(r,"padding"),i=_s(r,"border","width"),{x:l,y:c,box:u}=function(e,t){const s=e.touches,n=s&&s.length?s[0]:e,{offsetX:r,offsetY:a}=n;let o,i,l=!1;if(((e,t,s)=>(e>0||t>0)&&(!s||!s.shadowRoot))(r,a,e.target))o=r,i=a;else{const e=t.getBoundingClientRect();o=n.clientX-e.left,i=n.clientY-e.top,l=!0}return{x:o,y:i,box:l}}(e,s),d=o.left+(u&&i.left),p=o.top+(u&&i.top);var m;let{width:h,height:g}=t;return a&&(h-=o.width+i.width,g-=o.height+i.height),{x:Math.round((l-d)/h*s.width/n),y:Math.round((c-p)/g*s.height/n)}}(t,e);let a=[];if(ps.Interaction.evaluateInteractionItems(e,"x",r,((e,t,s)=>{e.inXRange(r.x,n)&&a.push({element:e,datasetIndex:t,index:s})})),0===a.length)return a;const o=a.reduce(((e,t)=>Math.abs(r.x-e.element.x)e.element.x===o)),a.some((e=>Math.abs(e.element.y-r.y)<10))?a:[]},Ts.propTypes={datasets:x().arrayOf(x().shape({label:x().string.isRequired,data:x().arrayOf(x().shape({datetime:x().string.isRequired,value:x().number.isRequired})).isRequired,selected:x().bool})).isRequired,isChartShown:x().bool.isRequired,keyphrases:x().array.isRequired};const Ss=({response:e,onLogin:t})=>[401,403,404].includes(e.status)?(0,v.createElement)(us,{onReconnect:t}):(0,v.createElement)(ft,null);Ss.propTypes={response:x().object.isRequired,onLogin:x().func.isRequired};const Cs=({isSuccess:e,response:t,allKeyphrasesMissRanking:s,onLogin:n,keyphraseLimitReached:r,limit:a})=>r?(0,v.createElement)(yt,{limit:a}):(0,c.isEmpty)(t)||e?s?(0,v.createElement)(Pt,null):null:(0,v.createElement)(Ss,{response:t,onLogin:n});Cs.propTypes={isSuccess:x().bool.isRequired,allKeyphrasesMissRanking:x().bool.isRequired,response:x().object,onLogin:x().func.isRequired,keyphraseLimitReached:x().bool.isRequired,limit:x().number.isRequired},Cs.defaultProps={response:{}};let Is=null;const Ls=async e=>{if(Is&&!Is.isClosed())return void Is.focus();const{url:t}=await async function(){return await wt({path:"yoast/v1/wincher/authorization-url",method:"GET"})}();Is=new ls(t,{success:{type:"wincher:oauth:success",callback:t=>(async(e,t)=>{const{onAuthentication:s,setRequestSucceeded:n,setRequestFailed:r,keyphrases:a,addTrackedKeyphrase:o,setKeyphraseLimitReached:i}=e;await bt((()=>async function(e){const{code:t,websiteId:s}=e;return await wt({path:"yoast/v1/wincher/authenticate",method:"POST",data:{code:t,websiteId:s}})}(t)),(async e=>{s(!0,!0,t.websiteId.toString()),n(e);const l=(Array.isArray(a)?a:[a]).map((e=>e.toLowerCase()));await bt((()=>vt(l)),(e=>{n(e),o(e.results)}),(e=>{400===e.status&&e.limit&&i(e.limit),r(e)}),201);const c=Is.getPopup();c&&c.close()}),(async e=>r(e)))})(e,t)},error:{type:"wincher:oauth:error",callback:()=>e.onAuthentication(!1,!1)}},{title:"Wincher_login",width:500,height:700}),Is.createPopup()},As=e=>e.isLoggedIn?null:(0,v.createElement)("p",null,(0,v.createElement)(T.NewButton,{onClick:e.onLogin,variant:"primary"},(0,d.sprintf)(/* translators: %s expands to Wincher */ +(0,d.__)("Connect with %s","wordpress-seo"),"Wincher")));As.propTypes={isLoggedIn:x().bool.isRequired,onLogin:x().func.isRequired};const qs=R().div` + p { + margin: 1em 0; + } +`,Ps=R().div` + ${e=>e.isDisabled&&"\n\t\topacity: .5;\n\t\tpointer-events: none;\n\t"}; +`,Ns=R().div` + font-weight: var(--yoast-font-weight-bold); + color: var(--yoast-color-label); + font-size: var(--yoast-font-size-default); +`,Bs=R().div.attrs({className:"yoast-field-group"})` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 14px; +`,Ms=R().div` + margin: 8px 0; +`,Fs=pt().utc().startOf("day"),Os=[{name:(0,d.__)("Last day","wordpress-seo"),value:pt()(Fs).subtract(1,"days").format(),defaultIndex:1},{name:(0,d.__)("Last week","wordpress-seo"),value:pt()(Fs).subtract(1,"week").format(),defaultIndex:2},{name:(0,d.__)("Last month","wordpress-seo"),value:pt()(Fs).subtract(1,"month").format(),defaultIndex:3},{name:(0,d.__)("Last year","wordpress-seo"),value:pt()(Fs).subtract(1,"year").format(),defaultIndex:0}],Ks=e=>{const{onSelect:t,selected:s,options:n,isLoggedIn:r}=e;return r?n.length<1?null:(0,v.createElement)("select",{className:"components-select-control__input",id:"wincher-period-picker",value:(null==s?void 0:s.value)||n[0].value,onChange:t},n.map((e=>(0,v.createElement)("option",{key:e.name,value:e.value},e.name)))):null};Ks.propTypes={onSelect:x().func.isRequired,selected:x().object,options:x().array.isRequired,isLoggedIn:x().bool.isRequired};const Ds=e=>{const{trackedKeyphrases:t,isLoggedIn:s,keyphrases:n,shouldTrackAll:r,permalink:a,historyDaysLimit:o}=e;if(!a&&s)return(0,v.createElement)(ds,null);if(0===n.length)return(0,v.createElement)(os,null);const i=pt()(Fs).subtract(o,"days"),l=Os.filter((e=>pt()(e.value).isSameOrAfter(i))),u=(0,c.orderBy)(l,(e=>e.defaultIndex),"desc")[0],[p,m]=(0,k.useState)(u),[h,g]=(0,k.useState)([]),y=h.length>0,f=(0,me.usePrevious)(t);(0,k.useEffect)((()=>{if(!(0,c.isEmpty)(t)&&(0,c.difference)(Object.keys(t),Object.keys(f||[])).length){const e=Object.values(t).map((e=>e.keyword));g(e)}}),[t,f]),(0,k.useEffect)((()=>{m(u)}),[null==u?void 0:u.name]);const b=(0,k.useCallback)((e=>{const t=Os.find((t=>t.value===e.target.value));t&&m(t)}),[m]),w=(0,k.useMemo)((()=>(0,c.isEmpty)(h)||(0,c.isEmpty)(t)?[]:Object.values(t).filter((e=>{var t;return!(null==e||null===(t=e.position)||void 0===t||!t.history)})).map((e=>{var t;return{label:e.keyword,data:e.position.history,selected:h.includes(e.keyword)&&!(0,c.isEmpty)(null===(t=e.position)||void 0===t?void 0:t.history)}}))),[h,t]);return(0,v.createElement)(Ps,{isDisabled:!s},(0,v.createElement)("p",null,(0,d.__)("You can enable / disable tracking the SEO performance for each keyphrase below.","wordpress-seo")),s&&r&&(0,v.createElement)(is,null),(0,v.createElement)(Bs,null,(0,v.createElement)(Ks,{selected:p,onSelect:b,options:l,isLoggedIn:s})),(0,v.createElement)(Ms,null,(0,v.createElement)(Ts,{isChartShown:y,datasets:w,keyphrases:n})),(0,v.createElement)(ss,{startAt:null==p?void 0:p.value,selectedKeyphrases:h,onSelectKeyphrases:g,trackedKeyphrases:t}))};function $s(e){const{isNewlyAuthenticated:t,isLoggedIn:s}=e,n=(0,k.useCallback)((()=>{Ls(e)}),[Ls,e]),r=Tt(s);return(0,v.createElement)(qs,null,t&&(0,v.createElement)(qt,null),s&&(0,v.createElement)(At,{trackingInfo:r}),(0,v.createElement)(Ns,null,(0,d.__)("SEO performance","wordpress-seo"),(0,v.createElement)(T.HelpIcon,{linkTo:wpseoAdminL10n["shortlinks.wincher.seo_performance"] +/* translators: Hidden accessibility text. */,linkText:(0,d.__)("Learn more about the SEO performance feature.","wordpress-seo")})),(0,v.createElement)(as,null),(0,v.createElement)(As,{isLoggedIn:s,onLogin:n}),(0,v.createElement)(Cs,{...e,onLogin:n}),(0,v.createElement)(Ds,{...e,historyDaysLimit:(null==r?void 0:r.historyDays)||31}))}Ds.propTypes={trackedKeyphrases:x().object,keyphrases:x().array.isRequired,isLoggedIn:x().bool.isRequired,shouldTrackAll:x().bool.isRequired,permalink:x().string.isRequired,historyDaysLimit:x().number},$s.propTypes={trackedKeyphrases:x().object,addTrackedKeyphrase:x().func.isRequired,isLoggedIn:x().bool,isNewlyAuthenticated:x().bool,keyphrases:x().array,response:x().object,shouldTrackAll:x().bool,permalink:x().string,historyDaysLimit:x().number},$s.defaultProps={trackedKeyphrases:null,isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],response:{},shouldTrackAll:!1,permalink:"",historyDaysLimit:0};const Hs=(0,me.compose)([(0,he.withSelect)((e=>{const{isWincherNewlyAuthenticated:t,getWincherKeyphraseLimitReached:s,getWincherLimit:n,getWincherHistoryDaysLimit:r,getWincherLoginStatus:a,getWincherRequestIsSuccess:o,getWincherRequestResponse:i,getWincherTrackableKeyphrases:l,getWincherTrackedKeyphrases:c,getWincherAllKeyphrasesMissRanking:u,getWincherPermalink:d,shouldWincherAutomaticallyTrackAll:p}=e("yoast-seo/editor");return{keyphrases:l(),trackedKeyphrases:c(),allKeyphrasesMissRanking:u(),isLoggedIn:a(),isNewlyAuthenticated:t(),isSuccess:o(),keyphraseLimitReached:s(),limit:n(),response:i(),shouldTrackAll:p(),permalink:d(),historyDaysLimit:r()}})),(0,he.withDispatch)((e=>{const{setWincherWebsiteId:t,setWincherRequestSucceeded:s,setWincherRequestFailed:n,setWincherTrackingForKeyphrase:r,setWincherSetKeyphraseLimitReached:a,setWincherLoginStatus:o}=e("yoast-seo/editor");return{setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{n(e)},addTrackedKeyphrase:e=>{r(e)},setKeyphraseLimitReached:e=>{a(e)},onAuthentication:(e,s,n)=>{t(n),o(e,s)}}}))])($s);function Ws(e,t,s,n){return new Promise(((r,a)=>{jQuery.ajax({type:e,url:t,beforeSend:s?e=>{e.setRequestHeader("X-WP-Nonce",s)}:null,data:n,dataType:"json",success:r,error:a})}))}let js,Ys,zs,Us;const Vs=/<(\/)?(\w+)\s*(\/)?>/g;function Gs(e,t,s,n,r){return{element:e,tokenStart:t,tokenLength:s,prevOffset:n,leadingTextStart:r,children:[]}}function Zs(){const e=js.length-Ys;0!==e&&zs.push(js.substring(Ys,Ys+e))}function Js(e){const{element:t,tokenStart:s,tokenLength:n,prevOffset:r,children:a}=e,o=Us[Us.length-1],i=js.substring(o.prevOffset,s);i&&o.children.push(i),o.children.push((0,k.cloneElement)(t,null,...a)),o.prevOffset=r||s+n}function Qs(e){const t=function(){const e=Vs.exec(js);if(null===e)return["no-more-tokens"];const t=e.index,[s,n,r,a]=e,o=s.length;return a?["self-closed",r,t,o]:n?["closer",r,t,o]:["opener",r,t,o]}(),[s,n,r,a]=t,o=Us.length,i=r>Ys?Ys:null;if(!e[n])return Zs(),!1;switch(s){case"no-more-tokens":if(0!==o){const{leadingTextStart:e,tokenStart:t}=Us.pop();zs.push(js.substring(e,e+t))}return Zs(),!1;case"self-closed":return 0===o?(null!==i&&zs.push(js.substring(i,r)),zs.push(e[n]),Ys=r+a,!0):(Js(Gs(e[n],r,a)),Ys=r+a,!0);case"opener":return Us.push(Gs(e[n],r,a,r+a,i)),Ys=r+a,!0;case"closer":if(1===o)return function(e){const{element:t,leadingTextStart:s,prevOffset:n,tokenStart:r,children:a}=Us.pop(),o=e?js.substring(n,e):js.substring(n);o&&a.push(o),null!==s&&zs.push(js.substring(s,r)),zs.push((0,k.cloneElement)(t,null,...a))}(r),Ys=r+a,!0;const t=Us.pop(),s=js.substring(t.prevOffset,r);t.children.push(s),t.prevOffset=r+a;const l=Gs(t.element,t.tokenStart,t.tokenLength,r+a);return l.children=t.children,Js(l),Ys=r+a,!0;default:return Zs(),!1}}function Xs(e,t="wpseoYoastJSL10n"){const s=(0,c.get)(window,[t,e,"locale_data",e],!1);"yoast-components"===e&&(e="wordpress-seo"),!1===s?(0,d.setLocaleData)({"":{}},e):(0,d.setLocaleData)(s,e)}const en=window.wp.sanitize,tn="SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLE",sn="SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLES_BATCH";function nn(e,t,s="",n=!1){const r="string"==typeof t?(0,S.decodeHTML)(t):t;return{type:tn,name:e,value:r,label:s,hidden:n}}function rn(e){return e.charAt(0).toUpperCase()+e.slice(1)}const{stripHTMLTags:an}=S.strings,on=["slug","content","contentImage","snippetPreviewImageURL"];function ln(e,t){(0,c.forEach)(e,((e,s)=>{on.includes(s)||t.dispatch(nn(s,e))}))}function cn(e){if(!["ct_","cf_","pt_"].includes(e.substring(0,3)))return e.replace(/_/g," ");const t=e.slice(0,3);switch(-1!==(e=e.slice(3)).indexOf("desc_")&&(e=e.slice(5)+" description"),t){case"ct_":e+=" (custom taxonomy)";break;case"cf_":e+=" (custom field)";break;case"pt_":e="Post type ("+(e=e.replace("single","singular"))+")"}return e}function un(e){return rn(e=cn(e))}function dn(e,t){return e.push({name:t.name,label:t.label||un(t.name),value:t.value}),e}function pn(e,t="_"){return e.replace(/\s/g,t)}function mn(e){return{name:"cf_"+pn(e),label:rn(e+" (custom field)")}}function hn(e){const t=pn(e);return{name:"ct_"+t,label:rn(e+" (custom taxonomy)"),descriptionName:"ct_desc_"+t,descriptionLabel:rn(e+" description (custom taxonomy)")}}function gn(e,t){if(!e.custom_taxonomies)return e;const s={};return(0,c.forEach)(e.custom_taxonomies,((e,t)=>{const{name:n,label:r,descriptionName:a,descriptionLabel:o}=hn(t),i="string"==typeof e.name?(0,S.decodeHTML)(e.name):e.name,l="string"==typeof e.description?(0,S.decodeHTML)(e.description):e.description;s[n]={value:i,label:r},s[a]={value:l,label:o}})),t.dispatch(function(e){return{type:sn,updatedVariables:e}}(s)),(0,c.omit)({...e},"custom_taxonomies")}function yn(e,t){return e.custom_fields?((0,c.forEach)(e.custom_fields,((e,s)=>{const{name:n,label:r}=mn(s);t.dispatch(nn(n,e,r))})),(0,c.omit)({...e},"custom_fields")):e}function fn(e,t=156){return(e=(e=(0,en.stripTags)(e)).trim()).length<=t||(e=e.substring(0,t),/\s/.test(e)&&(e=e.substring(0,e.lastIndexOf(" ")))),e}const bn=function(e){const t=(0,c.get)(window,["YoastSEO","app","pluggable"],!1);if(!t||!(0,c.get)(window,["YoastSEO","app","pluggable","loaded"],!1))return function(e){const t=(0,c.get)(window,["YoastSEO","wp","replaceVarsPlugin","replaceVariables"],c.identity);return{url:e.url,title:an(t(e.title)),description:an(t(e.description)),filteredSEOTitle:e.filteredSEOTitle?an(t(e.filteredSEOTitle)):""}}(e);const s=t._applyModifications.bind(t);return{url:e.url,title:an(s("data_page_title",e.title)),description:an(s("data_meta_desc",e.description)),filteredSEOTitle:e.filteredSEOTitle?an(s("data_page_title",e.filteredSEOTitle)):""}};var wn="score-text",vn="image yoast-logo svg",kn=jQuery;function En(e,t,s=null){return null!==s?(0,c.get)(s,t,""):(0,c.get)(wpseoScriptData,`metabox.publish_box.labels.${e}.${t}`,"")}window.yoast=window.yoast||{},window.yoast.editorModules={analysis:{getL10nObject:u,getContentLocale:function(){const e=u();return(0,c.get)(e,"contentLocale","en_US")},getIndicatorForScore:function(e){return(0,c.isNil)(e)||(e/=10),function(e){switch(e){case"feedback":return{className:"na",screenReaderText:(0,d.__)("Feedback","wordpress-seo"),screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""};case"bad":return{className:"bad",screenReaderText:(0,d.__)("Needs improvement","wordpress-seo"),screenReaderReadabilityText:(0,d.__)("Needs improvement","wordpress-seo"),screenReaderInclusiveLanguageText:(0,d.__)("Needs improvement","wordpress-seo")};case"ok":return{className:"ok",screenReaderText:(0,d.__)("OK SEO score","wordpress-seo"),screenReaderReadabilityText:(0,d.__)("OK","wordpress-seo"),screenReaderInclusiveLanguageText:(0,d.__)("Potentially non-inclusive","wordpress-seo")};case"good":return{className:"good",screenReaderText:(0,d.__)("Good SEO score","wordpress-seo"),screenReaderReadabilityText:(0,d.__)("Good","wordpress-seo"),screenReaderInclusiveLanguageText:(0,d.__)("Good","wordpress-seo")};default:return{className:"loading",screenReaderText:"",screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""}}}(p.interpreters.scoreToRating(e))},constants:e,refreshAnalysis:t},components:{HelpLink:V,TopLevelProviders:pe,higherorder:{withYoastSidebarPriority:e=>{const t=t=>{const{renderPriority:s,...n}=t;return(0,v.createElement)(e,{...n})};return t.propTypes={renderPriority:x().number},t}},contentAnalysis:{KeywordInput:W,mapResults:n},contexts:{location:{LocationContext:i.LocationContext,LocationProvider:i.LocationProvider,LocationConsumer:i.LocationConsumer}},SidebarItem:ue,SidebarCollapsible:le,MetaboxCollapsible:e=>(0,v.createElement)(G,{hasPadding:!0,hasSeparator:!0,...e}),Modal:X,portals:{Portal:ne,ImageSelectPortal:re,ScoreIconPortal:oe}},containers:{EditorModal:we,PersistentDismissableAlert:ve,Results:He,SEMrushRelatedKeyphrases:ut,WincherSEOPerformance:Hs},helpers:{ajaxHelper:r,createInterpolateElement:(e,t)=>{if(js=e,Ys=0,zs=[],Us=[],Vs.lastIndex=0,!(e=>{const t="object"==typeof e,s=t&&Object.values(e);return t&&s.length&&s.every((e=>(0,k.isValidElement)(e)))})(t))throw new TypeError("The conversionMap provided is not valid. It must be an object with values that are WPElements");do{}while(Qs(t));return(0,k.createElement)(k.Fragment,null,...zs)},createWatcher:(e,t)=>{let s=e();return()=>{const n=e();(0,c.isEqual)(n,s)||(s=n,t((0,c.clone)(n)))}},isBlockEditor:function(){return window.wpseoScriptData&&"1"===window.wpseoScriptData.isBlockEditor},i18n:a,replacementVariableHelpers:o,publishBox:{updateScore:function(e,t,s=null){var n=kn("#"+e+"-score"),r=vn+" "+t;n.children(".image").attr("class",r);var a=En(e,t,s);n.children("."+wn).html(a)},createScoresInPublishBox:function(e,t,s=null){const n=kn("
      '; + } + + /** + * Welcome. + */ + public function welcome() + { + if (is_multisite()) { + $branding_msg = get_site_option('wp-schema-pro-branding-settings'); + } else { + $branding_msg = BSF_AIOSRS_Pro_Helper::$settings['wp-schema-pro-branding-settings']; + } + $sp_name = isset($branding_msg['sp_plugin_name']) ? $branding_msg['sp_plugin_name'] : ''; + if ('' !== $sp_name) { + /* translators: %s: search term */ + $brand_msg = sprintf(__('Welcome to %s setup wizard !', 'wp-schema-pro'), $sp_name); + /* translators: %s: search term */ + $brand_steup = sprintf(__('%s adds Google-recommended schema markups across your site and specific pages. This improves your SEO and allows search engines to display rich snippets for your website.', 'wp-schema-pro'), $sp_name); + ?> +

      +

      + +

      +

      + +

      + +

      + +

      + +

      + Watch a detailed video on the setup wizard tutorial.', 'wp-schema-pro')); ?> +

      + +

      + » + +

      + + +

      +

      +
      + + + + + + + + + + + > + + + + > + + + + > + + + +
      + +
      + +
      + + +
      + + + + + +
      +
      +

      +

      +
      + +
      + +
      + + + + +

      + Learn more', 'wp-schema-pro') + ); + } + ?> +

      +
      +

      + + + « +

      +
      + get_next_step_link(); + wp_safe_redirect(esc_url_raw($redirect_url)); + exit; + } + + /** + * Social Profiles + */ + public function social_profiles() + { + + $settings = BSF_AIOSRS_Pro_Helper::$settings['wp-schema-pro-social-profiles']; + ?> +

      +

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $value ) { + if ( isset( $value ) && ! empty( $value ) ) { + ?> + + + + + + + + + +
      +

      + + + « +

      +
      + get_next_step_link(); + wp_safe_redirect(esc_url_raw($redirect_url)); + exit; + } + + /** + * Global Schemas + */ + public function global_schemas() + { + + $settings = BSF_AIOSRS_Pro_Helper::$settings['wp-schema-pro-global-schemas']; + ?> +

      +

      +
      + + + + + + + + + + + + + + + + + + + + + +
      + + + + +
      + + + + +
      + + '; + BSF_AIOSRS_Pro_Admin::get_tooltip($message); + ?> + + + +

      +
      + + '; + BSF_AIOSRS_Pro_Admin::get_tooltip($message); + ?> + + +

      +
      + + '; + BSF_AIOSRS_Pro_Admin::get_tooltip($message); + ?> + + +

      +
      +

      + + + « +

      +
      + get_next_step_link(); + wp_safe_redirect(esc_url_raw($redirect_url)); + exit; + } + + /** + * Final step. + */ + public function success() + { + + ?> +

      + +
      +
      +

      + +

      +

      + +

      +

      + +

      +

      + + +

      +

      + +

      + + + + + +
      + +
      + +
      +
      + diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro.php b/wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro.php new file mode 100644 index 00000000..888181e2 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro.php @@ -0,0 +1,145 @@ +includes(); + add_action( 'admin_notices', array( $this, 'setup_wizard_notice' ) ); + add_action( 'admin_notices', array( $this, 'how_to_schema_deprecated_notice' ) ); + add_action( 'wp_ajax_wp_schema_pro_setup_wizard_notice', array( $this, 'wp_schema_pro_setup_wizard_notice_callback' ) ); + } + + /** + * Display a notice about the deprecation of the HowTo schema. + */ + public function how_to_schema_deprecated_notice() { + $screen = get_current_screen(); + + // Only display the notice on the settings page of the Schema Pro + if ( 'settings_page_aiosrs_pro_admin_menu_page' === $screen->id ) { + echo '
      '; + echo '

      ' . esc_html__( 'Please be advised that the HowTo schema is now deprecated according to the latest Google guidelines ', 'wp-schema-pro' ) . '' . esc_html__( 'Take a look here.', 'wp-schema-pro' ) . '

      '; + echo '
      '; + } + } + + /** + * Setup Wizard + * + * @since 1.1.0 + */ + public function setup_wizard_notice() { + + if ( get_transient( 'wp-schema-pro-activated' ) ) { + $url = admin_url( 'index.php?page=aiosrs-pro-setup-wizard' ); + $branding_notice = BSF_AIOSRS_Pro_Helper::$settings['wp-schema-pro-branding-settings']; + + echo '
      '; + if ( '' !== $branding_notice['sp_plugin_name'] ) { + /* translators: %s: search term */ + $brand_notice = sprintf( esc_html__( 'Configure %s step by step. ', 'wp-schema-pro' ), $branding_notice['sp_plugin_name'] ); + echo '

      ' . esc_html( $brand_notice ) . '' . esc_html__( 'Start Setup Wizard »', 'wp-schema-pro' ) . '

      '; + } else { + echo '

      ' . esc_html__( 'Not sure where to start with Schema Pro? Check out our initial ', 'wp-schema-pro' ) . '' . esc_html__( 'setup wizard first »', 'wp-schema-pro' ) . '

      '; + } + + echo '
      '; + ?> + + custom_post_type = $post_type; + parent::__construct( + array( + 'singular' => $post_type, + 'plural' => $post_type . 's', + 'ajax' => false, + ) + ); + } + + + /** + * No Advanced Headers found message + */ + public function no_items() { + $post_type_object = get_post_type_object( $this->custom_post_type ); + echo sprintf( + /* translators: %s: post type label */ + esc_html__( 'No %s found', 'wp-schema-pro' ), + esc_html( $post_type_object->labels->singular_name ) + ); + } + + /** + * Set default columns + * + * @param array $item default column items. + * @param array $column_name default column names. + * @return void + */ + public function column_default( $item, $column_name ) { + + switch ( $column_name ) { + case 'post_title': + case 'date': + default: + } + + do_action( 'manage_' . $this->custom_post_type . '_posts_custom_column', $column_name, $item['ID'] ); + } + + /** + * Set sortable columns + * + * @return sortable_columns sortable columns. + */ + public function get_sortable_columns() { + $sortable_columns = array( + 'post_title' => array( 'post_title', false ), + 'date' => array( 'date', false ), + ); + return apply_filters( 'manage_' . $this->custom_post_type . '_sortable_columns', $sortable_columns ); + } + + /** + * Sort columns + * + * @param array $a default column items. + * @param array $b default column names. + * @return array $result sortable columns. + */ + public function usort_reorder( $a, $b ) { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + // If no sort, default to title. + $orderby = ( ! empty( $_GET['orderby'] ) ) ? sanitize_text_field( $_GET['orderby'] ) : 'post_title'; + // If no order, default to asc. + $order = ( ! empty( $_GET['order'] ) ) ? sanitize_text_field( $_GET['order'] ) : 'asc'; + // Determine sort order. + $result = strcmp( $a[ $orderby ], $b[ $orderby ] ); + // Send final sort direction to usort. + return ( 'asc' === $order ) ? $result : -$result; + } + + /** + * Get columns + * + * @return array $columns display columns. + */ + public function get_columns() { + $columns = array( + 'cb' => '', + 'post_title' => esc_html__( 'Title', 'wp-schema-pro' ), + 'date' => esc_html__( 'Date', 'wp-schema-pro' ), + ); + return apply_filters( 'manage_' . $this->custom_post_type . '_posts_columns', $columns ); + } + + /** + * Get bulk actions + * + * @return array $actions bulk actions. + */ + public function get_bulk_actions() { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + $current = ( ! empty( $_REQUEST['post_status'] ) ? sanitize_text_field( $_REQUEST['post_status'] ) : 'all' ); + if ( 'trash' === $current ) { + $actions = array( + 'restore' => esc_html__( 'Restore', 'wp-schema-pro' ), + 'delete' => esc_html__( 'Delete Permanently', 'wp-schema-pro' ), + ); + } elseif ( 'draft' === $current ) { + $actions = array( + 'trash' => esc_html__( 'Move to Trash', 'wp-schema-pro' ), + ); + } else { + $actions = array( + 'draft' => esc_html__( 'Draft', 'wp-schema-pro' ), + 'trash' => esc_html__( 'Move to Trash', 'wp-schema-pro' ), + ); + } + return $actions; + } + + /** + * Process bulk actions + */ + public function process_bulk_action() { + + // security check! + $action = $this->current_action(); + if ( 'trash' === $action || 'delete' === $action || 'draft' === $action || 'restore' === $action ) { + if ( isset( $_POST['_wpnonce'] ) && ! empty( $_POST['_wpnonce'] ) ) { + + $nonce = sanitize_text_field( $_POST['_wpnonce'] ); + $action = 'bulk-' . $this->_args['plural']; + + if ( ! wp_verify_nonce( $nonce, $action ) ) { + wp_die( 'Nope! Security check failed!' ); + } + } else { + wp_die( 'Nope! Security check failed!' ); + } + + // Detect when a bulk action is being triggered... + if ( 'trash' === $this->current_action() && isset( $_POST[ $this->_args['singular'] ] ) ) { + foreach ( array_map( 'sanitize_text_field', $_POST[ $this->_args['singular'] ] ) as $id ) { + wp_trash_post( $id ); + } + } + if ( 'delete' === $this->current_action() && isset( $_POST[ $this->_args['singular'] ] ) ) { + foreach ( array_map( 'sanitize_text_field', $_POST[ $this->_args['singular'] ] ) as $id ) { + wp_delete_post( $id ); + } + } + if ( 'draft' === $this->current_action() && isset( $_POST[ $this->_args['singular'] ] ) ) { + foreach ( array_map( 'sanitize_text_field', $_POST[ $this->_args['singular'] ] ) as $id ) { + $post = array( + 'ID' => $id, + 'post_status' => 'draft', + ); + wp_update_post( $post ); + } + } + if ( 'restore' === $this->current_action() && isset( $_POST[ $this->_args['singular'] ] ) ) { + foreach ( array_map( 'sanitize_text_field', $_POST[ $this->_args['singular'] ] ) as $id ) { + wp_untrash_post( $id ); + } + } + } else { + return; + } + + } + + /** + * Get bulk actions + * + * @param array $item first columns checkbox. + * @return array check box columns. + */ + public function column_cb( $item ) { + return sprintf( + '', + $this->_args['singular'], + $item['ID'] + ); + } + + /** + * Get columns headers + * + * @param array $item columns header item. + * @return array columns. + */ + public function column_post_title( $item ) { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + + $edit_post_link = get_edit_post_link( $item['ID'] ); + + $post_type_object = get_post_type_object( $this->custom_post_type ); + $can_edit_post = current_user_can( 'edit_post', $item['ID'] ); + $actions = array(); + $title = _draft_or_post_title(); + + $post_status = ( ! empty( $_REQUEST['post_status'] ) ) ? sanitize_text_field( $_REQUEST['post_status'] ) : 'all'; + if ( $can_edit_post && 'trash' !== $post_status ) { + $actions['edit'] = sprintf( + '%s', + get_edit_post_link( $item['ID'] ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Edit “%s”', 'wp-schema-pro' ), $title ) ), + __( 'Edit', 'wp-schema-pro' ) + ); + } + + if ( current_user_can( 'delete_post', $item['ID'] ) ) { + if ( 'trash' === $post_status ) { + $actions['untrash'] = sprintf( + '%s', + wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $item['ID'] ) ), 'untrash-post_' . $item['ID'] ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Restore “%s” from the Trash', 'wp-schema-pro' ), $title ) ), + __( 'Restore', 'wp-schema-pro' ) + ); + } elseif ( EMPTY_TRASH_DAYS ) { + $actions['trash'] = sprintf( + '%s', + get_delete_post_link( $item['ID'] ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Move “%s” to the Trash', 'wp-schema-pro' ), $title ) ), + _x( 'Trash', 'verb', 'wp-schema-pro' ) + ); + } + if ( 'trash' === $post_status || ! EMPTY_TRASH_DAYS ) { + $actions['delete'] = sprintf( + '%s', + get_delete_post_link( $item['ID'], '', true ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Delete “%s” permanently', 'wp-schema-pro' ), $title ) ), + __( 'Delete Permanently', 'wp-schema-pro' ) + ); + } + } + + if ( is_post_type_viewable( $post_type_object ) ) { + if ( in_array( $post_status, array( 'pending', 'draft', 'future' ), true ) ) { + if ( $can_edit_post ) { + $preview_link = get_preview_post_link( $post ); + $actions['view'] = sprintf( + '%s', + esc_url( $preview_link ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'Preview “%s”', 'wp-schema-pro' ), $title ) ), + __( 'Preview', 'wp-schema-pro' ) + ); + } + } elseif ( 'trash' !== $post_status ) { + $actions['view'] = sprintf( + '%s', + get_permalink( $item['ID'] ), + /* translators: %s: post title */ + esc_attr( sprintf( __( 'View “%s”', 'wp-schema-pro' ), $title ) ), + __( 'View', 'wp-schema-pro' ) + ); + } + } + global $post; + $post = get_post( $item['ID'], OBJECT ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + setup_postdata( $post ); + + ob_start(); + _post_states( $post ); + $post_states = ob_get_clean(); + + $actions = apply_filters( 'post_row_actions', $actions, $post ); + wp_reset_postdata(); + if ( 'trash' === $post_status ) { + return sprintf( '%1$s%2$s%3$s', $item['post_title'], $post_states, $this->row_actions( $actions ) ); + } else { + return sprintf( '%2$s%3$s%4$s', $edit_post_link, $item['post_title'], $post_states, $this->row_actions( $actions ) ); + } + + } + + /** + * Retrieve the current page number + * + * @since 1.0.0 + * @return int Current page number + */ + public function get_paged() { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1; + } + + /** + * Get date column + * + * @param array $post date column. + */ + public function column_date( $post ) { + global $mode; + + $post_id = $post['ID']; + + if ( '0000-00-00 00:00:00' === $post['date'] ) { + $t_time = __( 'Unpublished', 'wp-schema-pro' ); + $h_time = __( 'Unpublished', 'wp-schema-pro' ); + $time_diff = 0; + } else { + $t_time = get_the_time( __( 'Y/m/d g:i:s a', 'wp-schema-pro' ) ); + $m_time = $post['date']; + $time = get_post_time( 'G', true, $post ); + + $time_diff = time() - $time; + + if ( $time_diff > 0 && $time_diff < DAY_IN_SECONDS ) { + /* translators: 1: time */ + $h_time = sprintf( __( '%s ago', 'wp-schema-pro' ), human_time_diff( $time ) ); + } else { + $h_time = mysql2date( __( 'Y/m/d', 'wp-schema-pro' ), $m_time ); + } + } + + if ( 'publish' === get_post_status( $post_id ) ) { + $status = __( 'Published', 'wp-schema-pro' ); + } elseif ( 'future' === get_post_status( $post_id ) ) { + if ( $time_diff > 0 ) { + $status = '' . __( 'Missed schedule', 'wp-schema-pro' ) . ''; + } else { + $status = __( 'Scheduled', 'wp-schema-pro' ); + } + } else { + $status = __( 'Last Modified', 'wp-schema-pro' ); + } + + /** + * Filters the status text of the post. + * + * @since 4.8.0 + * + * @param string $status The status text. + * @param WP_Post $post Post object. + * @param string $column_name The column name. + * @param string $mode The list display mode ('excerpt' or 'list'). + */ + $status = apply_filters( 'post_date_column_status', $status, $post, 'date', $mode ); + + if ( $status ) { + echo esc_html( $status ) . '
      '; + } + + if ( 'excerpt' === $mode ) { + /** + * Filters the published time of the post. + * + * If `$mode` equals 'excerpt', the published time and date are both displayed. + * If `$mode` equals 'list' (default), the publish date is displayed, with the + * time and date together available as an abbreviation definition. + * + * @since 2.5.1 + * + * @param string $t_time The published time. + * @param WP_Post $post Post object. + * @param string $column_name The column name. + * @param string $mode The list display mode ('excerpt' or 'list'). + */ + echo esc_html( apply_filters( 'post_date_column_time', $t_time, $post, 'date', $mode ) ); + } else { + + /** This filter is documented in wp-admin/includes/class-wp-posts-list-table.php */ + echo '' . esc_html( apply_filters( 'post_date_column_time', $h_time, $post, 'date', $mode ) ) . ''; + } + } + + /** + * Retrieve the total number of {{custom-post}} + * + * @since 1.0.0 + * @return int $total Total number of {{custom-post}} + */ + public function get_total_custom_posts() { + $num_posts = wp_count_posts( $this->custom_post_type, 'readable' ); + $total_posts = array_sum( (array) $num_posts ); + // Subtract post types that are not included in the admin all list. + foreach ( get_post_stati( + array( + 'show_in_admin_all_list' => false, + ) + ) as $state ) { + $total_posts -= $num_posts->$state; + } + return $total_posts; + } + + /** + * Get all items. + * + * @param string $search search string. + */ + public function prepare_items( $search = '' ) { + + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + $post_status = ( ! empty( $_REQUEST['post_status'] ) ) ? sanitize_text_field( $_REQUEST['post_status'] ) : 'any'; + $data = array(); + $args = array( + 'post_type' => $this->custom_post_type, + 'posts_per_page' => $this->per_page, + 'paged' => $this->get_paged(), + 's' => $search, + 'post_status' => $post_status, + ); + + $the_query = new WP_Query( $args ); + if ( $the_query->have_posts() ) : + $key = 0; + while ( $the_query->have_posts() ) : + $the_query->the_post(); + $data[ $key ] = array( + 'ID' => get_the_ID(), + 'post_title' => get_the_title(), + 'date' => get_the_date(), + ); + $key++; + endwhile; + endif; + wp_reset_postdata(); + + $columns = $this->get_columns(); + + $hidden = array(); // No hidden columns. + + $sortable = $this->get_sortable_columns(); + + $this->_column_headers = array( $columns, $hidden, $sortable ); + + $this->process_bulk_action(); + + usort( $data, array( $this, 'usort_reorder' ) ); + + $total_items = $this->get_total_custom_posts(); + + $this->items = $data; + + $this->set_pagination_args( + array( + 'total_items' => $total_items, + 'per_page' => $this->per_page, + 'total_pages' => ceil( $total_items / $this->per_page ), + ) + ); + + } + + /** + * Get Views. + * + * @return array list of all views. + */ + public function get_views() { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + $status_links = array(); + $num_posts = wp_count_posts( $this->custom_post_type, 'readable' ); + $class = ''; + $total_posts = array_sum( (array) $num_posts ); + + // Subtract post types that are not included in the admin all list. + foreach ( get_post_stati( + array( + 'show_in_admin_all_list' => false, + ) + ) as $state ) { + $total_posts -= $num_posts->$state; + } + + $class = empty( $class ) && empty( $_REQUEST['post_status'] ) ? ' class="current"' : ''; + $query_all_var = remove_query_arg( 'post_status' ); + /* translators: %s: count */ + $status_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_posts, 'posts', 'wp-schema-pro' ), number_format_i18n( $total_posts ) ) . ''; + + foreach ( get_post_stati( + array( + 'show_in_admin_status_list' => true, + ), + 'objects' + ) as $status ) { + $class = ''; + $status_name = $status->name; + + if ( ! in_array( $status_name, array( 'publish', 'draft', 'pending', 'trash', 'future', 'private', 'auto-draft' ), true ) ) { + continue; + } + + if ( empty( $num_posts->$status_name ) ) { + continue; + } + + if ( isset( $_REQUEST['post_status'] ) && $status_name === $_REQUEST['post_status'] ) { + $class = ' class="current"'; + } + + $label = $status->label_count; + $query_var = add_query_arg( 'post_status', $status_name ); + $status_links[ $status_name ] = "" . sprintf( translate_nooped_plural( $label, $num_posts->$status_name ), number_format_i18n( $num_posts->$status_name ) ) . ''; + } + + return $status_links; + } + + /** + * Render List Table Markup. + */ + public function render_markup() { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + $this->prepare_items(); + $post_type = $this->_args['singular']; + $post_obj = get_post_type_object( $post_type ); + ?> +
      +

      labels->name ); ?>

      + cap->create_posts ) ) { + echo ' ' . esc_html( $post_obj->labels->add_new_item ) . ''; + } + // Search results for. + $s = isset( $_REQUEST['s'] ) && strlen( sanitize_text_field( $_REQUEST['s'] ) ) ? sanitize_text_field( $_REQUEST['s'] ) : null; + if ( $s ) { + /* translators: %s: search keywords */ + printf( '' . esc_html__( 'Search results for “%s”', 'wp-schema-pro' ) . '', esc_html( $s ) ); + } + ?> +

      + views(); + ?> +
      + prepare_items( $s ); + } else { + $this->prepare_items(); + } + $this->search_box( + sprintf( + /* translators: %s: Post Label */ + esc_html__( 'Search %s', 'wp-schema-pro' ), + $post_obj->labels->name + ), + 'search_id' + ); + $this->display(); + ?> +
      +
      + true, + '_builtin' => true, + ); + + $post_types = get_post_types( $args, 'objects' ); + unset( $post_types['attachment'] ); + + $args['_builtin'] = false; + $custom_post_type = get_post_types( $args, 'objects' ); + + $post_types = apply_filters( 'bsf_location_rule_post_types', array_merge( $post_types, $custom_post_type ) ); + + $selection_options = array( + 'basic' => array( + 'label' => __( 'Basic', 'wp-schema-pro' ), + 'value' => array( + 'basic-singulars' => __( 'All Singulars', 'wp-schema-pro' ), + 'special-front' => __( 'Front Page', 'wp-schema-pro' ), + ), + ), + ); + + /* post types */ + foreach ( $post_types as $post_type ) { + + $args = array( + 'public' => true, + 'object_type' => array( $post_type->name ), + ); + $taxonomies = get_taxonomies( $args, 'objects' ); + unset( $taxonomies['post_format'] ); + + $post_opt = self::get_post_target_rule_options( $post_type, $taxonomies ); + + $selection_options[ $post_opt['post_key'] ] = array( + 'label' => $post_opt['label'], + 'value' => $post_opt['value'], + ); + } + + $selection_options['specific-target'] = array( + 'label' => __( 'Specific Target', 'wp-schema-pro' ), + 'value' => array( + 'specifics' => __( 'Specific Pages / Posts / Archives etc.', 'wp-schema-pro' ), + ), + ); + + return $selection_options; + } + + /** + * Get user selection options. + * + * @return array + */ + public static function get_user_selections() { + $selection_options = array( + 'basic' => array( + 'label' => __( 'Basic', 'wp-schema-pro' ), + 'value' => array( + 'all' => __( 'All', 'wp-schema-pro' ), + 'logged-in' => __( 'Logged In', 'wp-schema-pro' ), + 'logged-out' => __( 'Logged Out', 'wp-schema-pro' ), + ), + ), + + 'advanced' => array( + 'label' => __( 'Advanced', 'wp-schema-pro' ), + 'value' => array(), + ), + ); + + /* User roles */ + $roles = get_editable_roles(); + + foreach ( $roles as $slug => $data ) { + $selection_options['advanced']['value'][ $slug ] = $data['name']; + } + + return $selection_options; + } + + /** + * Get location label by key. + * + * @param string $key Location option key. + * @return string + */ + public static function get_location_by_key( $key ) { + if ( ! isset( self::$location_selection ) || empty( self::$location_selection ) ) { + self::$location_selection = self::get_location_selections(); + } + $location_selection = self::$location_selection; + + foreach ( $location_selection as $location_grp ) { + if ( isset( $location_grp['value'][ $key ] ) ) { + return $location_grp['value'][ $key ]; + } + } + + if ( strpos( $key, 'post-' ) !== false ) { + $post_id = (int) str_replace( 'post-', '', $key ); + return get_the_title( $post_id ); + } + + // taxonomy options. + if ( strpos( $key, 'tax-' ) !== false ) { + $tax_id = (int) str_replace( 'tax-', '', $key ); + $term = get_term( $tax_id ); + + if ( ! is_wp_error( $term ) ) { + $term_taxonomy = ucfirst( str_replace( '_', ' ', $term->taxonomy ) ); + return $term->name . ' - ' . $term_taxonomy; + } else { + return ''; + } + } + + return $key; + } + + /** + * Get user label by key. + * + * @param string $key User option key. + * @return string + */ + public static function get_user_by_key( $key ) { + if ( ! isset( self::$user_selection ) || empty( self::$user_selection ) ) { + self::$user_selection = self::get_user_selections(); + } + $user_selection = self::$user_selection; + + if ( isset( $user_selection['basic']['value'][ $key ] ) ) { + return $user_selection['basic']['value'][ $key ]; + } elseif ( $user_selection['advanced']['value'][ $key ] ) { + return $user_selection['advanced']['value'][ $key ]; + } + return $key; + } + + /** + * Ajax handeler to return the posts based on the search query. + * When searching for the post/pages only titles are searched for. + * + * @since 1.0.0 + */ + public function bsf_get_posts_by_query() { + check_ajax_referer( 'schema_nonce', 'nonce' ); + $search_string = isset( $_POST['q'] ) ? sanitize_text_field( $_POST['q'] ) : ''; + $data = array(); + $result = array(); + + $args = array( + 'public' => true, + '_builtin' => false, + ); + + $output = 'objects'; // names or objects, note names is the default. + $operator = 'and'; + $post_types = get_post_types( $args, $output, $operator ); + + $post_types['post'] = 'Posts'; + $post_types['page'] = 'Pages'; + + foreach ( $post_types as $post_type => $singular ) { + + $data = array(); + + add_filter( 'posts_search', array( $this, 'search_only_titles' ), 10, 2 ); + + $query = new WP_Query( + array( + 's' => $search_string, + 'post_type' => $post_type, + 'posts_per_page' => - 1, + ) + ); + + remove_filter( 'posts_search', array( $this, 'search_only_titles' ), 10, 2 ); + + if ( $query->have_posts() ) { + while ( $query->have_posts() ) { + $query->the_post(); + $title = get_the_title(); + $title .= ( 0 !== $query->post->post_parent ) ? ' (' . get_the_title( $query->post->post_parent ) . ')' : ''; + $id = get_the_id(); + $data[] = array( + 'id' => 'post-' . $id, + 'text' => $title, + ); + } + } + + if ( is_array( $data ) && ! empty( $data ) ) { + $singular = ( 'post' === $post_type || 'page' === $post_type ) ? $singular : $singular->labels->singular_name; + + $result[] = array( + 'text' => $singular, + 'children' => $data, + ); + } + } + + $data = array(); + + wp_reset_postdata(); + + $args = array( + 'public' => true, + ); + + $output = 'objects'; // names or objects, note names is the default. + $operator = 'and'; + $taxonomies = get_taxonomies( $args, $output, $operator ); + + foreach ( $taxonomies as $taxonomy ) { + $terms = get_terms( + array( + 'taxonomy' => $taxonomy->name, + 'orderby' => 'count', + 'hide_empty' => 0, + 'name__like' => $search_string, + ) + ); + + $data = array(); + + $label = ucwords( $taxonomy->label ); + + if ( ! empty( $terms ) ) { + + foreach ( $terms as $term ) { + + $term_taxonomy_name = ucfirst( str_replace( '_', ' ', $taxonomy->name ) ); + + $data[] = array( + 'id' => 'tax-' . $term->term_id . '-single-' . $taxonomy->name, + 'text' => 'All singulars from ' . $term->name, + ); + + } + } + + if ( is_array( $data ) && ! empty( $data ) ) { + $result[] = array( + 'text' => $label, + 'children' => $data, + ); + } + } + + // return the result in json. + wp_send_json( $result ); + } + + /** + * Return search results only by post title. + * This is only run from bsf_get_posts_by_query() + * + * @param (string) $search Search SQL for WHERE clause. + * @param (WP_Query) $wp_query The current WP_Query object. + * + * @return (string) The Modified Search SQL for WHERE clause. + */ + public function search_only_titles( $search, $wp_query ) { + if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) { + global $wpdb; + + $q = $wp_query->query_vars; + $n = ! empty( $q['exact'] ) ? '' : '%'; + + $search = array(); + + foreach ( (array) $q['search_terms'] as $term ) { + $search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n ); + } + + if ( ! is_user_logged_in() ) { + $search[] = "$wpdb->posts.post_password = ''"; + } + + $search = ' AND ' . implode( ' AND ', $search ); + } + + return $search; + } + + /** + * Function Name: admin_styles. + * Function Description: admin_styles. + */ + public function admin_styles() { + + if ( ! is_object( get_current_screen() ) ) { + return; + } + + $schema_post_type_name = get_current_screen()->post_type; + $enqueue_admin_script = BSF_AIOSRS_Pro_Helper::bsf_schema_pro_enqueue_admin_script(); + + if ( true === $enqueue_admin_script || 'aiosrs-schema' === $schema_post_type_name ) { + wp_enqueue_script( 'bsf-target-rule-select2', plugins_url( '/', __FILE__ ) . 'select2.js', array( 'jquery', 'backbone', 'wp-util' ), BSF_AIOSRS_PRO_VER, true ); + wp_enqueue_script( + 'bsf-target-rule', + plugins_url( '/', __FILE__ ) . 'target-rule.js', + array( + 'jquery', + 'bsf-target-rule-select2', + ), + BSF_AIOSRS_PRO_VER, + true + ); + wp_localize_script( + 'bsf-target-rule', + 'Targetrule', + array( + 'ajax_url' => admin_url( 'admin-ajax.php' ), + 'security' => wp_create_nonce( 'schema_nonce' ), + ) + ); + wp_enqueue_script( + 'bsf-user-role', + plugins_url( '/', __FILE__ ) . 'user-role.js', + array( + 'jquery', + ), + BSF_AIOSRS_PRO_VER, + true + ); + wp_enqueue_style( 'bsf-target-rule-select2', plugins_url( '/', __FILE__ ) . 'select2.css', '', BSF_AIOSRS_PRO_VER, false ); + wp_enqueue_style( 'bsf-target-rule', plugins_url( '/', __FILE__ ) . 'target-rule.css', '', BSF_AIOSRS_PRO_VER, false ); + } + } + + /** + * Function Name: target_rule_settings_field. + * Function Description: Function to handle new input type. + * + * @param string $name string parameter. + * @param string $settings string parameter. + * @param string $value string parameter. + */ + public static function target_rule_settings_field( $name, $settings, $value ) { + $input_name = $name; + $rule_type = isset( $settings['rule_type'] ) ? $settings['rule_type'] : 'target_rule'; + $add_rule_label = isset( $settings['add_rule_label'] ) ? $settings['add_rule_label'] : __( 'Add Rule', 'wp-schema-pro' ); + $saved_values = $value; + $output = ''; + + if ( isset( self::$location_selection ) || empty( self::$location_selection ) ) { + self::$location_selection = self::get_location_selections(); + } + $selection_options = self::$location_selection; + + /* WP Template Format */ + $output .= ''; + + /* Wrapper Start */ + $output .= '
      '; + $output .= '
      '; + $output .= self::generate_target_rule_selector( $rule_type, $selection_options, $input_name, $saved_values, $add_rule_label ); + $output .= '
      '; + + /* Wrapper end */ + $output .= '
      '; + + echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } + + /** + * Get target rules for generating the markup for rule selector. + * + * @since 1.0.0 + * + * @param object $post_type post type parameter. + * @param object $taxonomies Taxanomies for creating the target rule markup. + */ + public static function get_post_target_rule_options( $post_type, $taxonomies ) { + + $post_key = str_replace( ' ', '-', strtolower( $post_type->label ) ); + $post_label = ucwords( $post_type->label ); + $post_name = $post_type->name; + $post_option = array(); + + /* translators: %s post label */ + $all_posts = sprintf( __( 'All %s', 'wp-schema-pro' ), $post_label ); + $post_option[ $post_name . '|all' ] = $all_posts; + + if ( 'pages' !== $post_key ) { + /* translators: %s post label */ + $all_archive = sprintf( __( 'All %s Archive', 'wp-schema-pro' ), $post_label ); + } + + foreach ( $taxonomies as $taxonomy ) { + $tax_label = ucwords( $taxonomy->label ); + $tax_name = $taxonomy->name; + + /* translators: %s taxonomy label */ + $tax_archive = sprintf( __( 'All %s Archive', 'wp-schema-pro' ), $tax_label ); + + } + + $post_output['post_key'] = $post_key; + $post_output['label'] = $post_label; + $post_output['value'] = $post_option; + + return $post_output; + } + + /** + * Generate markup for rendering the location selction. + * + * @since 1.0.0 + * @param String $type Rule type display|exclude. + * @param Array $selection_options Array for available selection fields. + * @param String $input_name Input name for the settings. + * @param Array $saved_values Array of saved valued. + * @param String $add_rule_label Label for the Add rule button. + * + * @return HTML Markup for for the location settings. + */ + public static function generate_target_rule_selector( $type, $selection_options, $input_name, $saved_values, $add_rule_label ) { + + $output = '
      '; + + if ( ! is_array( $saved_values ) || ( is_array( $saved_values ) && empty( $saved_values ) ) ) { + $saved_values = array(); + $saved_values['rule'][0] = ''; + $saved_values['specific'][0] = ''; + } + + $index = 0; + + foreach ( $saved_values['rule'] as $index => $data ) { + + $output .= '
      '; + /* Condition Selection */ + $output .= '
      '; + $output .= ''; + $output .= '
      '; + + $output .= '
      '; + + if ( 'specifics' !== $data ) { + /* Specific page selection */ + $output .= ''; + } + } + + /* Specific page selection */ + $output .= ''; + + $output .= '
      '; + + /* Add new rule */ + $output .= '
      '; + $output .= '' . $add_rule_label . ''; + $output .= '
      '; + + return $output; + } + + /** + * Get current layout. + * Checks of the passed post id of the layout is to be displayed in the page. + * + * @param int $layout_id Layout ID. + * @param string $option Option prefix. + * + * @return int|boolean If the current layout is to be displayed it will be returned back else a boolean will be passed. + */ + public function get_current_layout( $layout_id, $option ) { + $post_id = ( ! is_404() && ! is_search() && ! is_archive() && ! is_home() ) ? get_the_id() : false; + $current_layout = false; + $is_exclude = false; + $is_user_role = false; + $display_on = get_post_meta( $layout_id, $option . '-location', true ); + $exclude_on = get_post_meta( $layout_id, $option . '-exclusion', true ); + $user_roles = get_post_meta( $layout_id, $option . '-users', true ); + + /* Parse Display On Condition */ + $is_display = $this->parse_layout_display_condition( $post_id, $display_on ); + + if ( true === $is_display ) { + /* Parse Exclude On Condition */ + $is_exclude = $this->parse_layout_display_condition( $post_id, $exclude_on ); + /* Parse User Role Condition */ + $is_user_role = $this->parse_user_role_condition( $post_id, $user_roles ); + } + + if ( $is_display && ! $is_exclude && $is_user_role ) { + $current_layout = $layout_id; + } + + // filter target page settings. + $current_layout = apply_filters( 'bsf_target_page_settings', $current_layout, $layout_id ); + + return $current_layout; + } + + /** + * Checks for the display condition for the current page/ + * + * @param int $post_id Current post ID. + * @param array $rules Array of rules Display on | Exclude on. + * + * @return boolean Returns true or false depending on if the $rules match for the current page and the layout is to be displayed. + */ + public function parse_layout_display_condition( $post_id, $rules ) { + + $display = false; + $current_post_type = get_post_type( $post_id ); + if ( isset( $rules['rule'] ) && is_array( $rules['rule'] ) && ! empty( $rules['rule'] ) ) { + foreach ( $rules['rule'] as $key => $rule ) { + + if ( strrpos( $rule, 'all' ) !== false ) { + $rule_case = 'all'; + } else { + $rule_case = $rule; + } + + switch ( $rule_case ) { + case 'basic-global': + $display = true; + break; + + case 'basic-singulars': + if ( is_singular() ) { + $display = true; + } + break; + + case 'basic-archives': + if ( is_archive() ) { + $display = true; + } + break; + + case 'special-404': + if ( is_404() ) { + $display = true; + } + break; + + case 'special-search': + if ( is_search() ) { + $display = true; + } + break; + + case 'special-blog': + if ( is_home() ) { + $display = true; + } + break; + + case 'special-front': + if ( is_front_page() ) { + $display = true; + } + break; + + case 'special-date': + if ( is_date() ) { + $display = true; + } + break; + + case 'special-author': + if ( is_author() ) { + $display = true; + } + break; + case 'special-woo-shop': + if ( function_exists( 'is_shop' ) && is_shop() ) { + $display = true; + } + break; + + case 'all': + $rule_data = explode( '|', $rule ); + + $post_type = isset( $rule_data[0] ) ? $rule_data[0] : false; + $archieve_type = isset( $rule_data[2] ) ? $rule_data[2] : false; + $taxonomy = isset( $rule_data[3] ) ? $rule_data[3] : false; + if ( false === $archieve_type ) { + + $current_post_type = get_post_type( $post_id ); + + if ( false !== $post_id && $current_post_type === $post_type ) { + + $display = true; + } + } else { + + if ( is_archive() ) { + + $current_post_type = get_post_type(); + if ( $current_post_type === $post_type ) { + if ( 'archive' === $archieve_type ) { + $display = true; + } elseif ( 'taxarchive' === $archieve_type ) { + + $obj = get_queried_object(); + $current_taxonomy = ''; + if ( '' !== $obj && null !== $obj ) { + $current_taxonomy = $obj->taxonomy; + } + + if ( $current_taxonomy === $taxonomy ) { + $display = true; + } + } + } + } + } + break; + + case 'specifics': + if ( isset( $rules['specific'] ) && is_array( $rules['specific'] ) ) { + foreach ( $rules['specific'] as $specific_page ) { + + $specific_data = explode( '-', $specific_page ); + $specific_post_type = isset( $specific_data[0] ) ? $specific_data[0] : false; + $specific_post_id = isset( $specific_data[1] ) ? $specific_data[1] : false; + if ( 'post' === $specific_post_type ) { + if ( $specific_post_id == $post_id ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison + $display = true; + } + } elseif ( isset( $specific_data[2] ) && ( 'single' === $specific_data[2] ) && 'tax' === $specific_post_type ) { + + $current_page_type = self::get_current_page_type(); + if ( 'is_singular' === $current_page_type ) { + $term_details = get_term( $specific_post_id ); + + if ( isset( $term_details->taxonomy ) ) { + $has_term = has_term( (int) $specific_post_id, $term_details->taxonomy, $post_id ); + + if ( $has_term ) { + $display = true; + } + } + } + } elseif ( 'tax' === $specific_post_type ) { + $tax_slug = isset( $specific_data[3] ) ? $specific_data[3] : false; + + if ( $tax_slug ) { + + $tax_id = isset( $specific_data[1] ) ? (int) $specific_data[1] : false; + $apply_type = isset( $specific_data[2] ) ? $specific_data[2] : false; + + if ( 'single' === $apply_type && is_singular() ) { + + $current_terms = get_the_terms( $post_id, $tax_slug ); + + if ( $tax_id && is_array( $current_terms ) && ! empty( $current_terms ) ) { + foreach ( $current_terms as $key => $term_data ) { + if ( $tax_id === $term_data->term_id ) { + $display = true; + } + } + } + } elseif ( 'archive' === $apply_type && is_archive() && ( is_category() || is_tag() || is_tax() ) ) { + + $q_obj = get_queried_object(); + + if ( is_object( $q_obj ) && $tax_id === $q_obj->term_id ) { + $display = true; + } + } + } + } + } + } + break; + + default: + break; + } + + if ( $display ) { + break; + } + } + } + + return $display; + } + + /** + * Function Name: target_user_role_settings_field. + * Function Description: Function to handle new input type. + * + * @param string $name string parameter. + * @param string $settings string parameter. + * @param string $value string parameter. + */ + public static function target_user_role_settings_field( $name, $settings, $value ) { + $input_name = $name; + $add_rule_label = isset( $settings['add_rule_label'] ) ? $settings['add_rule_label'] : __( 'Add Rule', 'wp-schema-pro' ); + $saved_values = $value; + $output = ''; + + if ( ! isset( self::$user_selection ) || empty( self::$user_selection ) ) { + self::$user_selection = self::get_user_selections(); + } + $selection_options = self::$user_selection; + + /* WP Template Format */ + $output .= ''; + + if ( ! is_array( $saved_values ) || ( is_array( $saved_values ) && empty( $saved_values ) ) ) { + + $saved_values = array(); + $saved_values[0] = ''; + } + + $index = 0; + + $output .= '
      '; + $output .= '
      '; + $output .= '
      '; + foreach ( $saved_values as $index => $data ) { + $output .= '
      '; + $output .= ''; + /* Condition Selection */ + $output .= '
      '; + $output .= ''; + $output .= '
      '; + $output .= '
      '; + } + $output .= '
      '; + /* Add new rule */ + $output .= '
      '; + $output .= '' . $add_rule_label . ''; + $output .= '
      '; + $output .= '
      '; + $output .= '
      '; + + echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } + + /** + * Parse user role condition. + * + * @since 1.0.0 + * @param Array $rules Current user rules. + * + * @return boolean True = user condition passes. False = User condition does not pass. + */ + public function parse_user_role_condition( $rules ) { + + $show_popup = true; + + if ( is_array( $rules ) && ! empty( $rules ) ) { + $show_popup = false; + + foreach ( $rules as $i => $rule ) { + + switch ( $rule ) { + case '': + case 'all': + $show_popup = true; + break; + + case 'logged-in': + if ( is_user_logged_in() ) { + $show_popup = true; + } + break; + + case 'logged-out': + if ( ! is_user_logged_in() ) { + $show_popup = true; + } + break; + + default: + if ( is_user_logged_in() ) { + + $current_user = wp_get_current_user(); + + if ( isset( $current_user->roles ) + && is_array( $current_user->roles ) + && in_array( $rule, $current_user->roles, true ) + ) { + + $show_popup = true; + } + } + break; + } + + if ( $show_popup ) { + break; + } + } + } + + return $show_popup; + } + + /** + * Get current page type + * + * @since 1.0.0 + * + * @return string Page Type. + */ + public function get_current_page_type() { + + if ( null === self::$current_page_type ) { + + $page_type = ''; + $current_id = false; + + if ( is_404() ) { + $page_type = 'is_404'; + } elseif ( is_search() ) { + $page_type = 'is_search'; + } elseif ( is_archive() ) { + $page_type = 'is_archive'; + + if ( is_category() || is_tag() || is_tax() ) { + $page_type = 'is_tax'; + } elseif ( is_date() ) { + $page_type = 'is_date'; + } elseif ( is_author() ) { + $page_type = 'is_author'; + } + } elseif ( is_home() ) { + $page_type = 'is_home'; + } elseif ( is_front_page() ) { + $page_type = 'is_front_page'; + $current_id = get_the_id(); + } elseif ( is_singular() ) { + $page_type = 'is_singular'; + $current_id = get_the_id(); + } elseif ( is_admin() ) { + $page_type = 'is_singular'; + $current_id = get_the_id(); + $front_page_get_id = get_option( 'page_on_front' ); + if ( absint( $front_page_get_id ) === $current_id ) { + $page_type = 'is_front_page'; + $current_id = get_the_id(); + } + } else { + $current_id = get_the_id(); + } + + self::$current_page_data['ID'] = $current_id; + self::$current_page_type = $page_type; + } + + return self::$current_page_type; + } + + /** + * Get posts by conditions + * + * @since 1.0.0 + * @param string $post_type Post Type. + * @param array $option meta option name. + * @param int|boolean $old_post_id Post Id. + * + * @return object Posts. + */ + public function get_posts_by_conditions( $post_type, $option, $old_post_id = false ) { + + if ( is_array( self::$current_page_data ) && isset( self::$current_page_data[ $post_type ] ) ) { + return self::$current_page_data[ $post_type ]; + } + + global $wpdb; + global $post; + + $current_page_type = $this->get_current_page_type(); + $post_type = $post_type ? $post_type : $post->post_type; + self::$current_page_data[ $post_type ] = array(); + + $option['current_post_id'] = self::$current_page_data['ID']; + $meta_header = self::get_meta_option_post( $post_type, $option ); + + /* Meta option is enabled */ + if ( false === $meta_header ) { + + $current_post_type = get_post_type(); + $current_post_id = false; + $q_obj = get_queried_object(); + + $location = isset( $option['location'] ) ? $option['location'] : ''; + + $query = $wpdb->prepare( + 'SELECT p.ID, pm.meta_value FROM ' . $wpdb->postmeta . ' as pm + INNER JOIN ' . $wpdb->posts . ' as p ON pm.post_id = p.ID + WHERE pm.meta_key = %s + AND p.post_type = %s + AND p.post_status = "publish"', + $location, + $post_type + ); + + $orderby = ' ORDER BY p.post_date DESC'; + + /* Entire Website */ + $meta_args = "pm.meta_value LIKE '%\"basic-global\"%'"; + + switch ( $current_page_type ) { + case 'is_404': + $meta_args .= " OR pm.meta_value LIKE '%\"special-404\"%'"; + break; + case 'is_search': + $meta_args .= " OR pm.meta_value LIKE '%\"special-search\"%'"; + break; + case 'is_archive': + case 'is_tax': + case 'is_date': + case 'is_author': + $meta_args .= " OR pm.meta_value LIKE '%\"basic-archives\"%'"; + + if ( 'is_tax' === $current_page_type && ( is_category() || is_tag() || is_tax() ) ) { + + if ( is_object( $q_obj ) ) { + $meta_args .= " OR pm.meta_value LIKE '%\"{$current_post_type}|all|taxarchive|{$q_obj->taxonomy}\"%'"; + $meta_args .= " OR pm.meta_value LIKE '%\"tax-{$q_obj->term_id}\"%'"; + } + } elseif ( 'is_date' === $current_page_type ) { + $meta_args .= " OR pm.meta_value LIKE '%\"special-date\"%'"; + } elseif ( 'is_author' === $current_page_type ) { + $meta_args .= " OR pm.meta_value LIKE '%\"special-author\"%'"; + } + break; + case 'is_home': + $meta_args .= " OR pm.meta_value LIKE '%\"special-blog\"%'"; + break; + case 'is_front_page': + $current_id = esc_sql( get_the_id() ); + $current_post_id = $current_id; + $meta_args .= " OR pm.meta_value LIKE '%\"special-front\"%'"; + $meta_args .= " OR pm.meta_value LIKE '%\"{$current_post_type}|all\"%'"; + $meta_args .= " OR pm.meta_value LIKE '%\"post-{$current_id}\"%'"; + if ( isset( $q_obj ) ) { + $taxonomies = get_object_taxonomies( $q_obj->post_type ); + $terms = wp_get_post_terms( $q_obj->ID, $taxonomies ); + + foreach ( $terms as $key => $term ) { + $meta_args .= " OR pm.meta_value LIKE '%\"tax-{$term->term_id}-single-{$term->taxonomy}\"%'"; + } + } + + break; + case 'is_woo_shop_page': + $meta_args .= " OR pm.meta_value LIKE '%\"special-woo-shop\"%'"; + break; + case 'is_singular': + $current_id = $old_post_id ? $old_post_id : get_the_id(); + $current_post_id = $current_id; + + $taxonomy = get_post_taxonomies( $current_id ); + + $meta_args .= " OR pm.meta_value LIKE '%\"basic-singulars\"%'"; + $meta_args .= " OR pm.meta_value LIKE '%\"{$current_post_type}|all\"%'"; + $meta_args .= " OR pm.meta_value LIKE '%\"post-{$current_id}\"%'"; + + if ( ! empty( $taxonomy ) ) { + foreach ( $taxonomy as $tax_slug ) { + + $tax_terms = get_the_terms( $current_id, $tax_slug ); + + if ( ! empty( $tax_terms ) ) { + foreach ( $tax_terms as $tax_term ) { + $meta_args .= " OR pm.meta_value LIKE '%\"tax-{$tax_term->term_id}-single-{$tax_slug}\"%'"; + + // Also include post based on parent taxanomy. + if ( 0 !== $tax_term->parent && true === apply_filters( 'bsf_target_rules_include_parent_taxanomy', false ) ) { + $meta_args .= " OR pm.meta_value LIKE '%\"tax-{$tax_term->parent}-single-{$tax_slug}\"%'"; + } + } + } + } + } + break; + case '': + $current_post_id = get_the_id(); + break; + default: + break; + } + + $query = apply_filters( 'bsf_target_rules_main_query', $query ); + $meta_args = apply_filters( 'bsf_target_rules_meta_args', $meta_args ); + + $posts = $wpdb->get_results( $query . ' AND (' . $meta_args . ')' . apply_filters( 'bsf_target_rules_orderby', $orderby ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + + foreach ( $posts as $local_post ) { + self::$current_page_data[ $post_type ][ $local_post->ID ] = array( + 'id' => $local_post->ID, + 'location' => maybe_unserialize( $local_post->meta_value ), + ); + } + + $option['current_post_id'] = $current_post_id; + + $this->remove_exclusion_rule_posts( $post_type, $option ); + $this->remove_user_rule_posts( $post_type, $option ); + } + + return self::$current_page_data[ $post_type ]; + } + + /** + * Remove exclusion rule posts. + * + * @since 1.0.0 + * @param string $post_type Post Type. + * @param array $option meta option name. + */ + public function remove_exclusion_rule_posts( $post_type, $option ) { + + $exclusion = isset( $option['exclusion'] ) ? $option['exclusion'] : ''; + $current_post_id = isset( $option['current_post_id'] ) ? $option['current_post_id'] : false; + + foreach ( self::$current_page_data[ $post_type ] as $c_post_id => $c_data ) { + + $exclusion_rules = get_post_meta( $c_post_id, $exclusion, true ); + $is_exclude = $this->parse_layout_display_condition( $current_post_id, $exclusion_rules ); + + if ( $is_exclude ) { + unset( self::$current_page_data[ $post_type ][ $c_post_id ] ); + } + } + } + + /** + * Remove user rule posts. + * + * @since 1.0.0 + * @param int $post_type Post Type. + * @param array $option meta option name. + */ + public function remove_user_rule_posts( $post_type, $option ) { + + if ( isset( $option['users'] ) ) { + $users = $option['users']; + $current_post_id = isset( $option['current_post_id'] ) ? $option['current_post_id'] : false; + + foreach ( self::$current_page_data[ $post_type ] as $c_post_id => $c_data ) { + + $user_rules = get_post_meta( $c_post_id, $users, true ); + $is_user = $this->parse_user_role_condition( $current_post_id, $user_rules ); + + if ( ! $is_user ) { + unset( self::$current_page_data[ $post_type ][ $c_post_id ] ); + } + } + } + } + + /** + * Same display_on notice. + * + * @since 1.0.0 + * @param int $post_type Post Type. + * @param array $option meta option name. + */ + public static function same_display_on_notice( $post_type, $option ) { + global $wpdb; + global $post; + + $all_rules = array(); + $already_set_rule = array(); + + $location = isset( $option['location'] ) ? $option['location'] : ''; + + $all_headers = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $wpdb->prepare( + 'SELECT p.ID, p.post_title, pm.meta_value FROM ' . $wpdb->postmeta . ' as pm + INNER JOIN ' . $wpdb->posts . ' as p ON pm.post_id = p.ID + WHERE pm.meta_key = %s + AND p.post_type = %s + AND p.post_status = "publish"', + $location, + $post_type + ) + ); + + foreach ( $all_headers as $header ) { + + $location_rules = maybe_unserialize( $header->meta_value ); + + if ( is_array( $location_rules ) && isset( $location_rules['rule'] ) ) { + + foreach ( $location_rules['rule'] as $key => $rule ) { + + if ( ! isset( $all_rules[ $rule ] ) ) { + $all_rules[ $rule ] = array(); + } + + if ( 'specifics' === $rule && isset( $location_rules['specific'] ) && is_array( $location_rules['specific'] ) ) { + + foreach ( $location_rules['specific'] as $s_index => $s_value ) { + + $all_rules[ $rule ][ $s_value ][ $header->ID ] = array( + 'ID' => $header->ID, + 'name' => $header->post_title, + ); + } + } else { + $all_rules[ $rule ][ $header->ID ] = array( + 'ID' => $header->ID, + 'name' => $header->post_title, + ); + } + } + } + } + + $current_post_data = get_post_meta( $post->ID, $location, true ); + + if ( is_array( $current_post_data ) && isset( $current_post_data['rule'] ) ) { + + foreach ( $current_post_data['rule'] as $c_key => $c_rule ) { + + if ( ! isset( $all_rules[ $c_rule ] ) ) { + continue; + } + + if ( 'specifics' === $c_rule ) { + + foreach ( $current_post_data['specific'] as $s_index => $s_id ) { + if ( ! isset( $all_rules[ $c_rule ][ $s_id ] ) ) { + continue; + } + + foreach ( $all_rules[ $c_rule ][ $s_id ] as $p_id => $data ) { + + if ( $p_id === $post->ID ) { + continue; + } + + $already_set_rule[] = $data['name']; + } + } + } else { + + foreach ( $all_rules[ $c_rule ] as $p_id => $data ) { + + if ( $p_id === $post->ID ) { + continue; + } + + $already_set_rule[] = $data['name']; + } + } + } + } + + if ( ! empty( $already_set_rule ) ) { + add_action( + 'admin_notices', + function() use ( $already_set_rule ) { + + $rule_set_titles = '' . implode( ', ', $already_set_rule ) . ''; + $schema_str = count( $already_set_rule ) > 1 ? 'schema posts' : 'schema post'; + + /* translators: %s post title. */ + $notice = sprintf( __( 'The same display setting does already exist in %1$s %2$s.', 'wp-schema-pro' ), $rule_set_titles, $schema_str ); + + echo '
      '; + echo '

      ' . esc_html( $notice ) . '

      '; + echo '
      '; + + } + ); + } + } + + /** + * Meta option post. + * + * @since 1.0.0 + * @param string $post_type Post Type. + * @param array $option meta option name. + * + * @return false | object + */ + public static function get_meta_option_post( $post_type, $option ) { + $page_meta = ( isset( $option['page_meta'] ) && '' !== $option['page_meta'] ) ? $option['page_meta'] : false; + + if ( false !== $page_meta ) { + $current_post_id = isset( $option['current_post_id'] ) ? $option['current_post_id'] : false; + $meta_id = get_post_meta( $current_post_id, $option['page_meta'], true ); + + if ( false !== $meta_id && '' !== $meta_id ) { + self::$current_page_data[ $post_type ][ $meta_id ] = array( + 'id' => $meta_id, + 'location' => '', + ); + + return self::$current_page_data[ $post_type ]; + } + } + + return false; + } + + /** + * Get post selection. + * + * @since 1.0.0 + * @param string $post_type Post Type. + * + * @return object Posts. + */ + public static function get_post_selection( $post_type ) { + $query_args = array( + 'post_type' => $post_type, + 'posts_per_page' => -1, + 'post_status' => 'publish', + ); + + $all_headers = get_posts( $query_args ); + $headers = array(); + + if ( ! empty( $all_headers ) ) { + $headers = array( + '' => __( 'Select', 'wp-schema-pro' ), + ); + + foreach ( $all_headers as $i => $data ) { + + $headers[ $data->ID ] = $data->post_title; + } + } + + return $headers; + } + + /** + * Formated rule meta value to save. + * + * @since 1.0.0 + * @param array $save_data PostData. + * @param string $key varaible key. + * + * @return array Rule data. + */ + public static function get_format_rule_value( $save_data, $key ) { + $meta_value = array(); + + if ( isset( $save_data[ $key ]['rule'] ) ) { + $save_data[ $key ]['rule'] = array_unique( $save_data[ $key ]['rule'] ); + if ( isset( $save_data[ $key ]['specific'] ) ) { + $save_data[ $key ]['specific'] = array_unique( $save_data[ $key ]['specific'] ); + } + + // Unset the specifics from rule. This will be readded conditionally in next condition. + $index = array_search( '', $save_data[ $key ]['rule'], true ); + if ( false !== $index ) { + unset( $save_data[ $key ]['rule'][ $index ] ); + } + $index = array_search( 'specifics', $save_data[ $key ]['rule'], true ); + if ( false !== $index ) { + unset( $save_data[ $key ]['rule'][ $index ] ); + + // Only re-add the specifics key if there are specific rules added. + if ( isset( $save_data[ $key ]['specific'] ) && is_array( $save_data[ $key ]['specific'] ) ) { + array_push( $save_data[ $key ]['rule'], 'specifics' ); + } + } + + foreach ( $save_data[ $key ] as $meta_key => $value ) { + if ( ! empty( $value ) ) { + $meta_value[ $meta_key ] = array_map( 'esc_attr', $value ); + } + } + if ( ! isset( $meta_value['rule'] ) || ! in_array( 'specifics', $meta_value['rule'], true ) ) { + $meta_value['specific'] = array(); + } + + if ( empty( $meta_value['rule'] ) ) { + $meta_value = array(); + } + } + + return $meta_value; + } + } +} + +/** + * Kicking this off by calling 'get_instance()' method + */ +BSF_Target_Rule_Fields::get_instance(); diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.css b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.css new file mode 100644 index 00000000..51892ef1 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.css @@ -0,0 +1,484 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 30px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + height: 1px !important; + margin: -1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__placeholder { + color: #999; + margin-top: 5px; + float: left; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.js b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.js new file mode 100644 index 00000000..de8e6a1b --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/select2.js @@ -0,0 +1,5747 @@ +/*! + * Select2 4.0.5 + * https://select2.github.io + * + * Released under the MIT license + * https://github.com/select2/select2/blob/master/LICENSE.md + */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof module === 'object' && module.exports) { + // Node/CommonJS + module.exports = function (root, jQuery) { + if (jQuery === undefined) { + // require('jQuery') returns a factory that requires window to + // build a jQuery instance, we normalize how we use modules + // that require this pattern but the window provided is a noop + // if it's defined (how jquery works) + if (typeof window !== 'undefined') { + jQuery = require('jquery'); + } + else { + jQuery = require('jquery')(root); + } + } + factory(jQuery); + return jQuery; + }; + } else { + // Browser globals + factory(jQuery); + } +} (function (jQuery) { + // This is needed so we can catch the AMD loader configuration and use it + // The inner file should be wrapped (by `banner.start.js`) in a function that + // returns the AMD loader references. + var S2 =(function () { + // Restore the Select2 AMD loader so it can be used + // Needed mostly in the language files, where the loader is not inserted + if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) { + var S2 = jQuery.fn.select2.amd; + } +var S2;(function () { if (!S2 || !S2.requirejs) { +if (!S2) { S2 = {}; } else { require = S2; } +/** + * @license almond 0.3.3 Copyright jQuery Foundation and other contributors. + * Released under MIT license, http://github.com/requirejs/almond/LICENSE + */ +//Going sloppy to avoid 'use strict' string cost, but strict practices should +//be followed. +/*global setTimeout: false */ + +var requirejs, require, define; +(function (undef) { + var main, req, makeMap, handlers, + defined = {}, + waiting = {}, + config = {}, + defining = {}, + hasOwn = Object.prototype.hasOwnProperty, + aps = [].slice, + jsSuffixRegExp = /\.js$/; + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @returns {String} normalized name + */ + function normalize(name, baseName) { + var nameParts, nameSegment, mapValue, foundMap, lastIndex, + foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, + baseParts = baseName && baseName.split("/"), + map = config.map, + starMap = (map && map['*']) || {}; + + //Adjust any relative paths. + if (name) { + name = name.split('/'); + lastIndex = name.length - 1; + + // If wanting node ID compatibility, strip .js from end + // of IDs. Have to do this here, and not in nameToUrl + // because node allows either .js or non .js to map + // to same file. + if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { + name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); + } + + // Starts with a '.' so need the baseName + if (name[0].charAt(0) === '.' && baseParts) { + //Convert baseName to array, and lop off the last part, + //so that . matches that 'directory' and not name of the baseName's + //module. For instance, baseName of 'one/two/three', maps to + //'one/two/three.js', but we want the directory, 'one/two' for + //this normalization. + normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); + name = normalizedBaseParts.concat(name); + } + + //start trimDots + for (i = 0; i < name.length; i++) { + part = name[i]; + if (part === '.') { + name.splice(i, 1); + i -= 1; + } else if (part === '..') { + // If at the start, or previous value is still .., + // keep them so that when converted to a path it may + // still work when converted to a path, even though + // as an ID it is less than ideal. In larger point + // releases, may be better to just kick out an error. + if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') { + continue; + } else if (i > 0) { + name.splice(i - 1, 2); + i -= 2; + } + } + } + //end trimDots + + name = name.join('/'); + } + + //Apply map config if available. + if ((baseParts || starMap) && map) { + nameParts = name.split('/'); + + for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join("/"); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = map[baseParts.slice(0, j).join('/')]; + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = mapValue[nameSegment]; + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break; + } + } + } + } + + if (foundMap) { + break; + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && starMap[nameSegment]) { + foundStarMap = starMap[nameSegment]; + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + return name; + } + + function makeRequire(relName, forceSync) { + return function () { + //A version of a require function that passes a moduleName + //value for items that may need to + //look up paths relative to the moduleName + var args = aps.call(arguments, 0); + + //If first arg is not require('string'), and there is only + //one arg, it is the array form without a callback. Insert + //a null so that the following concat is correct. + if (typeof args[0] !== 'string' && args.length === 1) { + args.push(null); + } + return req.apply(undef, args.concat([relName, forceSync])); + }; + } + + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(depName) { + return function (value) { + defined[depName] = value; + }; + } + + function callDep(name) { + if (hasProp(waiting, name)) { + var args = waiting[name]; + delete waiting[name]; + defining[name] = true; + main.apply(undef, args); + } + + if (!hasProp(defined, name) && !hasProp(defining, name)) { + throw new Error('No ' + name); + } + return defined[name]; + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + //Creates a parts array for a relName where first part is plugin ID, + //second part is resource ID. Assumes relName has already been normalized. + function makeRelParts(relName) { + return relName ? splitPrefix(relName) : []; + } + + /** + * Makes a name map, normalizing the name, and using a plugin + * for normalization if necessary. Grabs a ref to plugin + * too, as an optimization. + */ + makeMap = function (name, relParts) { + var plugin, + parts = splitPrefix(name), + prefix = parts[0], + relResourceName = relParts[1]; + + name = parts[1]; + + if (prefix) { + prefix = normalize(prefix, relResourceName); + plugin = callDep(prefix); + } + + //Normalize according + if (prefix) { + if (plugin && plugin.normalize) { + name = plugin.normalize(name, makeNormalize(relResourceName)); + } else { + name = normalize(name, relResourceName); + } + } else { + name = normalize(name, relResourceName); + parts = splitPrefix(name); + prefix = parts[0]; + name = parts[1]; + if (prefix) { + plugin = callDep(prefix); + } + } + + //Using ridiculous property names for space reasons + return { + f: prefix ? prefix + '!' + name : name, //fullName + n: name, + pr: prefix, + p: plugin + }; + }; + + function makeConfig(name) { + return function () { + return (config && config.config && config.config[name]) || {}; + }; + } + + handlers = { + require: function (name) { + return makeRequire(name); + }, + exports: function (name) { + var e = defined[name]; + if (typeof e !== 'undefined') { + return e; + } else { + return (defined[name] = {}); + } + }, + module: function (name) { + return { + id: name, + uri: '', + exports: defined[name], + config: makeConfig(name) + }; + } + }; + + main = function (name, deps, callback, relName) { + var cjsModule, depName, ret, map, i, relParts, + args = [], + callbackType = typeof callback, + usingExports; + + //Use name if no relName + relName = relName || name; + relParts = makeRelParts(relName); + + //Call the callback to define the module, if necessary. + if (callbackType === 'undefined' || callbackType === 'function') { + //Pull out the defined dependencies and pass the ordered + //values to the callback. + //Default to [require, exports, module] if no deps + deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; + for (i = 0; i < deps.length; i += 1) { + map = makeMap(deps[i], relParts); + depName = map.f; + + //Fast path CommonJS standard dependencies. + if (depName === "require") { + args[i] = handlers.require(name); + } else if (depName === "exports") { + //CommonJS module spec 1.1 + args[i] = handlers.exports(name); + usingExports = true; + } else if (depName === "module") { + //CommonJS module spec 1.1 + cjsModule = args[i] = handlers.module(name); + } else if (hasProp(defined, depName) || + hasProp(waiting, depName) || + hasProp(defining, depName)) { + args[i] = callDep(depName); + } else if (map.p) { + map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); + args[i] = defined[depName]; + } else { + throw new Error(name + ' missing ' + depName); + } + } + + ret = callback ? callback.apply(defined[name], args) : undefined; + + if (name) { + //If setting exports via "module" is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + if (cjsModule && cjsModule.exports !== undef && + cjsModule.exports !== defined[name]) { + defined[name] = cjsModule.exports; + } else if (ret !== undef || !usingExports) { + //Use the return value from the function. + defined[name] = ret; + } + } + } else if (name) { + //May just be an object definition for the module. Only + //worry about defining if have a module name. + defined[name] = callback; + } + }; + + requirejs = require = req = function (deps, callback, relName, forceSync, alt) { + if (typeof deps === "string") { + if (handlers[deps]) { + //callback in this case is really relName + return handlers[deps](callback); + } + //Just return the module wanted. In this scenario, the + //deps arg is the module name, and second arg (if passed) + //is just the relName. + //Normalize module name, if it contains . or .. + return callDep(makeMap(deps, makeRelParts(callback)).f); + } else if (!deps.splice) { + //deps is a config object, not an array. + config = deps; + if (config.deps) { + req(config.deps, config.callback); + } + if (!callback) { + return; + } + + if (callback.splice) { + //callback is an array, which means it is a dependency list. + //Adjust args if there are dependencies + deps = callback; + callback = relName; + relName = null; + } else { + deps = undef; + } + } + + //Support require(['a']) + callback = callback || function () {}; + + //If relName is a function, it is an errback handler, + //so remove it. + if (typeof relName === 'function') { + relName = forceSync; + forceSync = alt; + } + + //Simulate async callback; + if (forceSync) { + main(undef, deps, callback, relName); + } else { + //Using a non-zero value because of concern for what old browsers + //do, and latest browsers "upgrade" to 4 if lower value is used: + //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: + //If want a value immediately, use require('id') instead -- something + //that works in almond on the global level, but not guaranteed and + //unlikely to work in other AMD implementations. + setTimeout(function () { + main(undef, deps, callback, relName); + }, 4); + } + + return req; + }; + + /** + * Just drops the config on the floor, but returns req in case + * the config return value is used. + */ + req.config = function (cfg) { + return req(cfg); + }; + + /** + * Expose module registry for debugging and tooling + */ + requirejs._defined = defined; + + define = function (name, deps, callback) { + if (typeof name !== 'string') { + throw new Error('See almond README: incorrect module build, no module name'); + } + + //This module may not have dependencies + if (!deps.splice) { + //deps is not an array, so probably means + //an object literal or factory function for + //the value. Adjust args. + callback = deps; + deps = []; + } + + if (!hasProp(defined, name) && !hasProp(waiting, name)) { + waiting[name] = [name, deps, callback]; + } + }; + + define.amd = { + jQuery: true + }; +}()); + +S2.requirejs = requirejs;S2.require = require;S2.define = define; +} +}()); +S2.define("almond", function(){}); + +/* global jQuery:false, $:false */ +S2.define('jquery',[],function () { + var _$ = jQuery || $; + + if (_$ == null && console && console.error) { + console.error( + 'Select2: An instance of jQuery or a jQuery-compatible library was not ' + + 'found. Make sure that you are including jQuery before Select2 on your ' + + 'web page.' + ); + } + + return _$; +}); + +S2.define('select2/utils',[ + 'jquery' +], function ($) { + var Utils = {}; + + Utils.Extend = function (ChildClass, SuperClass) { + var __hasProp = {}.hasOwnProperty; + + function BaseConstructor () { + this.constructor = ChildClass; + } + + for (var key in SuperClass) { + if (__hasProp.call(SuperClass, key)) { + ChildClass[key] = SuperClass[key]; + } + } + + BaseConstructor.prototype = SuperClass.prototype; + ChildClass.prototype = new BaseConstructor(); + ChildClass.__super__ = SuperClass.prototype; + + return ChildClass; + }; + + function getMethods (theClass) { + var proto = theClass.prototype; + + var methods = []; + + for (var methodName in proto) { + var m = proto[methodName]; + + if (typeof m !== 'function') { + continue; + } + + if (methodName === 'constructor') { + continue; + } + + methods.push(methodName); + } + + return methods; + } + + Utils.Decorate = function (SuperClass, DecoratorClass) { + var decoratedMethods = getMethods(DecoratorClass); + var superMethods = getMethods(SuperClass); + + function DecoratedClass () { + var unshift = Array.prototype.unshift; + + var argCount = DecoratorClass.prototype.constructor.length; + + var calledConstructor = SuperClass.prototype.constructor; + + if (argCount > 0) { + unshift.call(arguments, SuperClass.prototype.constructor); + + calledConstructor = DecoratorClass.prototype.constructor; + } + + calledConstructor.apply(this, arguments); + } + + DecoratorClass.displayName = SuperClass.displayName; + + function ctr () { + this.constructor = DecoratedClass; + } + + DecoratedClass.prototype = new ctr(); + + for (var m = 0; m < superMethods.length; m++) { + var superMethod = superMethods[m]; + + DecoratedClass.prototype[superMethod] = + SuperClass.prototype[superMethod]; + } + + var calledMethod = function (methodName) { + // Stub out the original method if it's not decorating an actual method + var originalMethod = function () {}; + + if (methodName in DecoratedClass.prototype) { + originalMethod = DecoratedClass.prototype[methodName]; + } + + var decoratedMethod = DecoratorClass.prototype[methodName]; + + return function () { + var unshift = Array.prototype.unshift; + + unshift.call(arguments, originalMethod); + + return decoratedMethod.apply(this, arguments); + }; + }; + + for (var d = 0; d < decoratedMethods.length; d++) { + var decoratedMethod = decoratedMethods[d]; + + DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod); + } + + return DecoratedClass; + }; + + var Observable = function () { + this.listeners = {}; + }; + + Observable.prototype.on = function (event, callback) { + this.listeners = this.listeners || {}; + + if (event in this.listeners) { + this.listeners[event].push(callback); + } else { + this.listeners[event] = [callback]; + } + }; + + Observable.prototype.trigger = function (event) { + var slice = Array.prototype.slice; + var params = slice.call(arguments, 1); + + this.listeners = this.listeners || {}; + + // Params should always come in as an array + if (params == null) { + params = []; + } + + // If there are no arguments to the event, use a temporary object + if (params.length === 0) { + params.push({}); + } + + // Set the `_type` of the first object to the event + params[0]._type = event; + + if (event in this.listeners) { + this.invoke(this.listeners[event], slice.call(arguments, 1)); + } + + if ('*' in this.listeners) { + this.invoke(this.listeners['*'], arguments); + } + }; + + Observable.prototype.invoke = function (listeners, params) { + for (var i = 0, len = listeners.length; i < len; i++) { + listeners[i].apply(this, params); + } + }; + + Utils.Observable = Observable; + + Utils.generateChars = function (length) { + var chars = ''; + + for (var i = 0; i < length; i++) { + var randomChar = Math.floor(Math.random() * 36); + chars += randomChar.toString(36); + } + + return chars; + }; + + Utils.bind = function (func, context) { + return function () { + func.apply(context, arguments); + }; + }; + + Utils._convertData = function (data) { + for (var originalKey in data) { + var keys = originalKey.split('-'); + + var dataLevel = data; + + if (keys.length === 1) { + continue; + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k]; + + // Lowercase the first letter + // By default, dash-separated becomes camelCase + key = key.substring(0, 1).toLowerCase() + key.substring(1); + + if (!(key in dataLevel)) { + dataLevel[key] = {}; + } + + if (k == keys.length - 1) { + dataLevel[key] = data[originalKey]; + } + + dataLevel = dataLevel[key]; + } + + delete data[originalKey]; + } + + return data; + }; + + Utils.hasScroll = function (index, el) { + // Adapted from the function created by @ShadowScripter + // and adapted by @BillBarry on the Stack Exchange Code Review website. + // The original code can be found at + // http://codereview.stackexchange.com/q/13338 + // and was designed to be used with the Sizzle selector engine. + + var $el = $(el); + var overflowX = el.style.overflowX; + var overflowY = el.style.overflowY; + + //Check both x and y declarations + if (overflowX === overflowY && + (overflowY === 'hidden' || overflowY === 'visible')) { + return false; + } + + if (overflowX === 'scroll' || overflowY === 'scroll') { + return true; + } + + return ($el.innerHeight() < el.scrollHeight || + $el.innerWidth() < el.scrollWidth); + }; + + Utils.escapeMarkup = function (markup) { + var replaceMap = { + '\\': '\', + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''', + '/': '/' + }; + + // Do not try to escape the markup if it's not a string + if (typeof markup !== 'string') { + return markup; + } + + return String(markup).replace(/[&<>"'\/\\]/g, function (match) { + return replaceMap[match]; + }); + }; + + // Append an array of jQuery nodes to a given element. + Utils.appendMany = function ($element, $nodes) { + // jQuery 1.7.x does not support $.fn.append() with an array + // Fall back to a jQuery object collection using $.fn.add() + if ($.fn.jquery.substr(0, 3) === '1.7') { + var $jqNodes = $(); + + $.map($nodes, function (node) { + $jqNodes = $jqNodes.add(node); + }); + + $nodes = $jqNodes; + } + + $element.append($nodes); + }; + + return Utils; +}); + +S2.define('select2/results',[ + 'jquery', + './utils' +], function ($, Utils) { + function Results ($element, options, dataAdapter) { + this.$element = $element; + this.data = dataAdapter; + this.options = options; + + Results.__super__.constructor.call(this); + } + + Utils.Extend(Results, Utils.Observable); + + Results.prototype.render = function () { + var $results = $( + '
        ' + ); + + if (this.options.get('multiple')) { + $results.attr('aria-multiselectable', 'true'); + } + + this.$results = $results; + + return $results; + }; + + Results.prototype.clear = function () { + this.$results.empty(); + }; + + Results.prototype.displayMessage = function (params) { + var escapeMarkup = this.options.get('escapeMarkup'); + + this.clear(); + this.hideLoading(); + + var $message = $( + '
      • ' + ); + + var message = this.options.get('translations').get(params.message); + + $message.append( + escapeMarkup( + message(params.args) + ) + ); + + $message[0].className += ' select2-results__message'; + + this.$results.append($message); + }; + + Results.prototype.hideMessages = function () { + this.$results.find('.select2-results__message').remove(); + }; + + Results.prototype.append = function (data) { + this.hideLoading(); + + var $options = []; + + if (data.results == null || data.results.length === 0) { + if (this.$results.children().length === 0) { + this.trigger('results:message', { + message: 'noResults' + }); + } + + return; + } + + data.results = this.sort(data.results); + + for (var d = 0; d < data.results.length; d++) { + var item = data.results[d]; + + var $option = this.option(item); + + $options.push($option); + } + + this.$results.append($options); + }; + + Results.prototype.position = function ($results, $dropdown) { + var $resultsContainer = $dropdown.find('.select2-results'); + $resultsContainer.append($results); + }; + + Results.prototype.sort = function (data) { + var sorter = this.options.get('sorter'); + + return sorter(data); + }; + + Results.prototype.highlightFirstItem = function () { + var $options = this.$results + .find('.select2-results__option[aria-selected]'); + + var $selected = $options.filter('[aria-selected=true]'); + + // Check if there are any selected options + if ($selected.length > 0) { + // If there are selected options, highlight the first + $selected.first().trigger('mouseenter'); + } else { + // If there are no selected options, highlight the first option + // in the dropdown + $options.first().trigger('mouseenter'); + } + + this.ensureHighlightVisible(); + }; + + Results.prototype.setClasses = function () { + var self = this; + + this.data.current(function (selected) { + var selectedIds = $.map(selected, function (s) { + return s.id.toString(); + }); + + var $options = self.$results + .find('.select2-results__option[aria-selected]'); + + $options.each(function () { + var $option = $(this); + + var item = $.data(this, 'data'); + + // id needs to be converted to a string when comparing + var id = '' + item.id; + + if ((item.element != null && item.element.selected) || + (item.element == null && $.inArray(id, selectedIds) > -1)) { + $option.attr('aria-selected', 'true'); + } else { + $option.attr('aria-selected', 'false'); + } + }); + + }); + }; + + Results.prototype.showLoading = function (params) { + this.hideLoading(); + + var loadingMore = this.options.get('translations').get('searching'); + + var loading = { + disabled: true, + loading: true, + text: loadingMore(params) + }; + var $loading = this.option(loading); + $loading.className += ' loading-results'; + + this.$results.prepend($loading); + }; + + Results.prototype.hideLoading = function () { + this.$results.find('.loading-results').remove(); + }; + + Results.prototype.option = function (data) { + var option = document.createElement('li'); + option.className = 'select2-results__option'; + + var attrs = { + 'role': 'treeitem', + 'aria-selected': 'false' + }; + + if (data.disabled) { + delete attrs['aria-selected']; + attrs['aria-disabled'] = 'true'; + } + + if (data.id == null) { + delete attrs['aria-selected']; + } + + if (data._resultId != null) { + option.id = data._resultId; + } + + if (data.title) { + option.title = data.title; + } + + if (data.children) { + attrs.role = 'group'; + attrs['aria-label'] = data.text; + delete attrs['aria-selected']; + } + + for (var attr in attrs) { + var val = attrs[attr]; + + option.setAttribute(attr, val); + } + + if (data.children) { + var $option = $(option); + + var label = document.createElement('strong'); + label.className = 'select2-results__group'; + + var $label = $(label); + this.template(data, label); + + var $children = []; + + for (var c = 0; c < data.children.length; c++) { + var child = data.children[c]; + + var $child = this.option(child); + + $children.push($child); + } + + var $childrenContainer = $('
          ', { + 'class': 'select2-results__options select2-results__options--nested' + }); + + $childrenContainer.append($children); + + $option.append(label); + $option.append($childrenContainer); + } else { + this.template(data, option); + } + + $.data(option, 'data', data); + + return option; + }; + + Results.prototype.bind = function (container, $container) { + var self = this; + + var id = container.id + '-results'; + + this.$results.attr('id', id); + + container.on('results:all', function (params) { + self.clear(); + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + self.highlightFirstItem(); + } + }); + + container.on('results:append', function (params) { + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + } + }); + + container.on('query', function (params) { + self.hideMessages(); + self.showLoading(params); + }); + + container.on('select', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + self.highlightFirstItem(); + }); + + container.on('unselect', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + self.highlightFirstItem(); + }); + + container.on('open', function () { + // When the dropdown is open, aria-expended="true" + self.$results.attr('aria-expanded', 'true'); + self.$results.attr('aria-hidden', 'false'); + + self.setClasses(); + self.ensureHighlightVisible(); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expended="false" + self.$results.attr('aria-expanded', 'false'); + self.$results.attr('aria-hidden', 'true'); + self.$results.removeAttr('aria-activedescendant'); + }); + + container.on('results:toggle', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + $highlighted.trigger('mouseup'); + }); + + container.on('results:select', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var data = $highlighted.data('data'); + + if ($highlighted.attr('aria-selected') == 'true') { + self.trigger('close', {}); + } else { + self.trigger('select', { + data: data + }); + } + }); + + container.on('results:previous', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + // If we are already at te top, don't move further + if (currentIndex === 0) { + return; + } + + var nextIndex = currentIndex - 1; + + // If none are highlighted, highlight the first + if ($highlighted.length === 0) { + nextIndex = 0; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top; + var nextTop = $next.offset().top; + var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset); + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextTop - currentOffset < 0) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:next', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var nextIndex = currentIndex + 1; + + // If we are at the last option, stay there + if (nextIndex >= $options.length) { + return; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top + + self.$results.outerHeight(false); + var nextBottom = $next.offset().top + $next.outerHeight(false); + var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset; + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextBottom > currentOffset) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:focus', function (params) { + params.element.addClass('select2-results__option--highlighted'); + }); + + container.on('results:message', function (params) { + self.displayMessage(params); + }); + + if ($.fn.mousewheel) { + this.$results.on('mousewheel', function (e) { + var top = self.$results.scrollTop(); + + var bottom = self.$results.get(0).scrollHeight - top + e.deltaY; + + var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0; + var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height(); + + if (isAtTop) { + self.$results.scrollTop(0); + + e.preventDefault(); + e.stopPropagation(); + } else if (isAtBottom) { + self.$results.scrollTop( + self.$results.get(0).scrollHeight - self.$results.height() + ); + + e.preventDefault(); + e.stopPropagation(); + } + }); + } + + this.$results.on('mouseup', '.select2-results__option[aria-selected]', + function (evt) { + var $this = $(this); + + var data = $this.data('data'); + + if ($this.attr('aria-selected') === 'true') { + if (self.options.get('multiple')) { + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } else { + self.trigger('close', {}); + } + + return; + } + + self.trigger('select', { + originalEvent: evt, + data: data + }); + }); + + this.$results.on('mouseenter', '.select2-results__option[aria-selected]', + function (evt) { + var data = $(this).data('data'); + + self.getHighlightedResults() + .removeClass('select2-results__option--highlighted'); + + self.trigger('results:focus', { + data: data, + element: $(this) + }); + }); + }; + + Results.prototype.getHighlightedResults = function () { + var $highlighted = this.$results + .find('.select2-results__option--highlighted'); + + return $highlighted; + }; + + Results.prototype.destroy = function () { + this.$results.remove(); + }; + + Results.prototype.ensureHighlightVisible = function () { + var $highlighted = this.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var $options = this.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var currentOffset = this.$results.offset().top; + var nextTop = $highlighted.offset().top; + var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset); + + var offsetDelta = nextTop - currentOffset; + nextOffset -= $highlighted.outerHeight(false) * 2; + + if (currentIndex <= 2) { + this.$results.scrollTop(0); + } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) { + this.$results.scrollTop(nextOffset); + } + }; + + Results.prototype.template = function (result, container) { + var template = this.options.get('templateResult'); + var escapeMarkup = this.options.get('escapeMarkup'); + + var content = template(result, container); + + if (content == null) { + container.style.display = 'none'; + } else if (typeof content === 'string') { + container.innerHTML = escapeMarkup(content); + } else { + $(container).append(content); + } + // Return the container + return container; +}; + return Results; +}); + +S2.define('select2/keys',[ + +], function () { + var KEYS = { + BACKSPACE: 8, + TAB: 9, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + ESC: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + DELETE: 46 + }; + + return KEYS; +}); + +S2.define('select2/selection/base',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function BaseSelection ($element, options) { + this.$element = $element; + this.options = options; + + BaseSelection.__super__.constructor.call(this); + } + + Utils.Extend(BaseSelection, Utils.Observable); + + BaseSelection.prototype.render = function () { + var $selection = $( + '' + ); + + this._tabindex = 0; + + if (this.$element.data('old-tabindex') != null) { + this._tabindex = this.$element.data('old-tabindex'); + } else if (this.$element.attr('tabindex') != null) { + this._tabindex = this.$element.attr('tabindex'); + } + + $selection.attr('title', this.$element.attr('title')); + $selection.attr('tabindex', this._tabindex); + + this.$selection = $selection; + + return $selection; + }; + + BaseSelection.prototype.bind = function (container, $container) { + var self = this; + + var id = container.id + '-container'; + var resultsId = container.id + '-results'; + + this.container = container; + + this.$selection.on('focus', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('blur', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', function (evt) { + self.trigger('keypress', evt); + + if (evt.which === KEYS.SPACE) { + evt.preventDefault(); + } + }); + + container.on('results:focus', function (params) { + self.$selection.attr('aria-activedescendant', params.data._resultId); + }); + + container.on('selection:update', function (params) { + self.update(params.data); + }); + + container.on('open', function () { + // When the dropdown is open, aria-expanded="true" + self.$selection.attr('aria-expanded', 'true'); + self.$selection.attr('aria-owns', resultsId); + + self._attachCloseHandler(container); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expanded="false" + self.$selection.attr('aria-expanded', 'false'); + self.$selection.removeAttr('aria-activedescendant'); + self.$selection.removeAttr('aria-owns'); + + self.$selection.focus(); + + self._detachCloseHandler(container); + }); + + container.on('enable', function () { + self.$selection.attr('tabindex', self._tabindex); + }); + + container.on('disable', function () { + self.$selection.attr('tabindex', '-1'); + }); + }; + + BaseSelection.prototype._handleBlur = function (evt) { + var self = this; + + // This needs to be delayed as the active element is the body when the tab + // key is pressed, possibly along with others. + window.setTimeout(function () { + // Don't trigger `blur` if the focus is still in the selection + if ( + (document.activeElement == self.$selection[0]) || + ($.contains(self.$selection[0], document.activeElement)) + ) { + return; + } + + self.trigger('blur', evt); + }, 1); + }; + + BaseSelection.prototype._attachCloseHandler = function (container) { + var self = this; + + $(document.body).on('mousedown.select2.' + container.id, function (e) { + var $target = $(e.target); + + var $select = $target.closest('.select2'); + + var $all = $('.select2.select2-container--open'); + + $all.each(function () { + var $this = $(this); + + if (this == $select[0]) { + return; + } + + var $element = $this.data('element'); + + $element.select2('close'); + }); + }); + }; + + BaseSelection.prototype._detachCloseHandler = function (container) { + $(document.body).off('mousedown.select2.' + container.id); + }; + + BaseSelection.prototype.position = function ($selection, $container) { + var $selectionContainer = $container.find('.selection'); + $selectionContainer.append($selection); + }; + + BaseSelection.prototype.destroy = function () { + this._detachCloseHandler(this.container); + }; + + BaseSelection.prototype.update = function (data) { + throw new Error('The `update` method must be defined in child classes.'); + }; + + return BaseSelection; +}); + +S2.define('select2/selection/single',[ + 'jquery', + './base', + '../utils', + '../keys' +], function ($, BaseSelection, Utils, KEYS) { + function SingleSelection () { + SingleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(SingleSelection, BaseSelection); + + SingleSelection.prototype.render = function () { + var $selection = SingleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--single'); + + $selection.html( + '' + + '' + + '' + + '' + ); + + return $selection; + }; + + SingleSelection.prototype.bind = function (container, $container) { + var self = this; + + SingleSelection.__super__.bind.apply(this, arguments); + + var id = container.id + '-container'; + + this.$selection.find('.select2-selection__rendered').attr('id', id); + this.$selection.attr('aria-labelledby', id); + + this.$selection.on('mousedown', function (evt) { + // Only respond to left clicks + if (evt.which !== 1) { + return; + } + + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on('focus', function (evt) { + // User focuses on the container + }); + + this.$selection.on('blur', function (evt) { + // User exits the container + }); + + container.on('focus', function (evt) { + if (!container.isOpen()) { + self.$selection.focus(); + } + }); + + container.on('selection:update', function (params) { + self.update(params.data); + }); + }; + + SingleSelection.prototype.clear = function () { + this.$selection.find('.select2-selection__rendered').empty(); + }; + + SingleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + SingleSelection.prototype.selectionContainer = function () { + return $(''); + }; + + SingleSelection.prototype.update = function (data) { + if (data.length === 0) { + this.clear(); + return; + } + + var selection = data[0]; + + var $rendered = this.$selection.find('.select2-selection__rendered'); + var formatted = this.display(selection, $rendered); + + $rendered.empty().append(formatted); + $rendered.prop('title', selection.title || selection.text); + }; + + return SingleSelection; +}); + +S2.define('select2/selection/multiple',[ + 'jquery', + './base', + '../utils' +], function ($, BaseSelection, Utils) { + function MultipleSelection ($element, options) { + MultipleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(MultipleSelection, BaseSelection); + + MultipleSelection.prototype.render = function () { + var $selection = MultipleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--multiple'); + + $selection.html( + '
            ' + ); + + return $selection; + }; + + MultipleSelection.prototype.bind = function (container, $container) { + var self = this; + + MultipleSelection.__super__.bind.apply(this, arguments); + + this.$selection.on('click', function (evt) { + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on( + 'click', + '.select2-selection__choice__remove', + function (evt) { + // Ignore the event if it is disabled + if (self.options.get('disabled')) { + return; + } + + var $remove = $(this); + var $selection = $remove.parent(); + + var data = $selection.data('data'); + + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } + ); + }; + + MultipleSelection.prototype.clear = function () { + this.$selection.find('.select2-selection__rendered').empty(); + }; + + MultipleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + MultipleSelection.prototype.selectionContainer = function () { + var $container = $( + '
          • ' + + '' + + '×' + + '' + + '
          • ' + ); + + return $container; + }; + + MultipleSelection.prototype.update = function (data) { + this.clear(); + + if (data.length === 0) { + return; + } + + var $selections = []; + + for (var d = 0; d < data.length; d++) { + var selection = data[d]; + + var $selection = this.selectionContainer(); + var formatted = this.display(selection, $selection); + + $selection.append(formatted); + $selection.prop('title', selection.title || selection.text); + + $selection.data('data', selection); + + $selections.push($selection); + } + + var $rendered = this.$selection.find('.select2-selection__rendered'); + + Utils.appendMany($rendered, $selections); + }; + + return MultipleSelection; +}); + +S2.define('select2/selection/placeholder',[ + '../utils' +], function (Utils) { + function Placeholder (decorated, $element, options) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options); + } + + Placeholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + Placeholder.prototype.createPlaceholder = function (decorated, placeholder) { + var $placeholder = this.selectionContainer(); + + $placeholder.html(this.display(placeholder)); + $placeholder.addClass('select2-selection__placeholder') + .removeClass('select2-selection__choice'); + + return $placeholder; + }; + + Placeholder.prototype.update = function (decorated, data) { + var singlePlaceholder = ( + data.length == 1 && data[0].id != this.placeholder.id + ); + var multipleSelections = data.length > 1; + + if (multipleSelections || singlePlaceholder) { + return decorated.call(this, data); + } + + this.clear(); + + var $placeholder = this.createPlaceholder(this.placeholder); + + this.$selection.find('.select2-selection__rendered').append($placeholder); + }; + + return Placeholder; +}); + +S2.define('select2/selection/allowClear',[ + 'jquery', + '../keys' +], function ($, KEYS) { + function AllowClear () { } + + AllowClear.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + if (this.placeholder == null) { + if (this.options.get('debug') && window.console && console.error) { + console.error( + 'Select2: The `allowClear` option should be used in combination ' + + 'with the `placeholder` option.' + ); + } + } + + this.$selection.on('mousedown', '.select2-selection__clear', + function (evt) { + self._handleClear(evt); + }); + + container.on('keypress', function (evt) { + self._handleKeyboardClear(evt, container); + }); + }; + + AllowClear.prototype._handleClear = function (_, evt) { + // Ignore the event if it is disabled + if (this.options.get('disabled')) { + return; + } + + var $clear = this.$selection.find('.select2-selection__clear'); + + // Ignore the event if nothing has been selected + if ($clear.length === 0) { + return; + } + + evt.stopPropagation(); + + var data = $clear.data('data'); + + for (var d = 0; d < data.length; d++) { + var unselectData = { + data: data[d] + }; + + // Trigger the `unselect` event, so people can prevent it from being + // cleared. + this.trigger('unselect', unselectData); + + // If the event was prevented, don't clear it out. + if (unselectData.prevented) { + return; + } + } + + this.$element.val(this.placeholder.id).trigger('change'); + + this.trigger('toggle', {}); + }; + + AllowClear.prototype._handleKeyboardClear = function (_, evt, container) { + if (container.isOpen()) { + return; + } + + if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) { + this._handleClear(evt); + } + }; + + AllowClear.prototype.update = function (decorated, data) { + decorated.call(this, data); + + if (this.$selection.find('.select2-selection__placeholder').length > 0 || + data.length === 0) { + return; + } + + var $remove = $( + '' + + '×' + + '' + ); + $remove.data('data', data); + + this.$selection.find('.select2-selection__rendered').prepend($remove); + }; + + return AllowClear; +}); + +S2.define('select2/selection/search',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function Search (decorated, $element, options) { + decorated.call(this, $element, options); + } + + Search.prototype.render = function (decorated) { + var $search = $( + '' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + var $rendered = decorated.call(this); + + this._transferTabIndex(); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('open', function () { + self.$search.trigger('focus'); + }); + + container.on('close', function () { + self.$search.val(''); + self.$search.removeAttr('aria-activedescendant'); + self.$search.trigger('focus'); + }); + + container.on('enable', function () { + self.$search.prop('disabled', false); + + self._transferTabIndex(); + }); + + container.on('disable', function () { + self.$search.prop('disabled', true); + }); + + container.on('focus', function (evt) { + self.$search.trigger('focus'); + }); + + container.on('results:focus', function (params) { + self.$search.attr('aria-activedescendant', params.id); + }); + + this.$selection.on('focusin', '.select2-search--inline', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('focusout', '.select2-search--inline', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', '.select2-search--inline', function (evt) { + evt.stopPropagation(); + + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + + var key = evt.which; + + if (key === KEYS.BACKSPACE && self.$search.val() === '') { + var $previousChoice = self.$searchContainer + .prev('.select2-selection__choice'); + + if ($previousChoice.length > 0) { + var item = $previousChoice.data('data'); + + self.searchRemoveChoice(item); + + evt.preventDefault(); + } + } + }); + + // Try to detect the IE version should the `documentMode` property that + // is stored on the document. This is only implemented in IE and is + // slightly cleaner than doing a user agent check. + // This property is not available in Edge, but Edge also doesn't have + // this bug. + var msie = document.documentMode; + var disableInputEvents = msie && msie <= 11; + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$selection.on( + 'input.searchcheck', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents) { + self.$selection.off('input.search input.searchcheck'); + return; + } + + // Unbind the duplicated `keyup` event + self.$selection.off('keyup.search'); + } + ); + + this.$selection.on( + 'keyup.search input.search', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents && evt.type === 'input') { + self.$selection.off('input.search input.searchcheck'); + return; + } + + var key = evt.which; + + // We can freely ignore events from modifier keys + if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { + return; + } + + // Tabbing will be handled during the `keydown` phase + if (key == KEYS.TAB) { + return; + } + + self.handleSearch(evt); + } + ); + }; + + /** + * This method will transfer the tabindex attribute from the rendered + * selection to the search box. This allows for the search box to be used as + * the primary focus instead of the selection container. + * + * @private + */ + Search.prototype._transferTabIndex = function (decorated) { + this.$search.attr('tabindex', this.$selection.attr('tabindex')); + this.$selection.attr('tabindex', '-1'); + }; + + Search.prototype.createPlaceholder = function (decorated, placeholder) { + this.$search.attr('placeholder', placeholder.text); + }; + + Search.prototype.update = function (decorated, data) { + var searchHadFocus = this.$search[0] == document.activeElement; + + this.$search.attr('placeholder', ''); + + decorated.call(this, data); + + this.$selection.find('.select2-selection__rendered') + .append(this.$searchContainer); + + this.resizeSearch(); + if (searchHadFocus) { + this.$search.focus(); + } + }; + + Search.prototype.handleSearch = function () { + this.resizeSearch(); + + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.searchRemoveChoice = function (decorated, item) { + this.trigger('unselect', { + data: item + }); + + this.$search.val(item.text); + this.handleSearch(); + }; + + Search.prototype.resizeSearch = function () { + this.$search.css('width', '25px'); + + var width = ''; + + if (this.$search.attr('placeholder') !== '') { + width = this.$selection.find('.select2-selection__rendered').innerWidth(); + } else { + var minimumWidth = this.$search.val().length + 1; + + width = (minimumWidth * 0.75) + 'em'; + } + + this.$search.css('width', width); + }; + + return Search; +}); + +S2.define('select2/selection/eventRelay',[ + 'jquery' +], function ($) { + function EventRelay () { } + + EventRelay.prototype.bind = function (decorated, container, $container) { + var self = this; + var relayEvents = [ + 'open', 'opening', + 'close', 'closing', + 'select', 'selecting', + 'unselect', 'unselecting' + ]; + + var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting']; + + decorated.call(this, container, $container); + + container.on('*', function (name, params) { + // Ignore events that should not be relayed + if ($.inArray(name, relayEvents) === -1) { + return; + } + + // The parameters should always be an object + params = params || {}; + + // Generate the jQuery event for the Select2 event + var evt = $.Event('select2:' + name, { + params: params + }); + + self.$element.trigger(evt); + + // Only handle preventable events if it was one + if ($.inArray(name, preventableEvents) === -1) { + return; + } + + params.prevented = evt.isDefaultPrevented(); + }); + }; + + return EventRelay; +}); + +S2.define('select2/translation',[ + 'jquery', + 'require' +], function ($, require) { + function Translation (dict) { + this.dict = dict || {}; + } + + Translation.prototype.all = function () { + return this.dict; + }; + + Translation.prototype.get = function (key) { + return this.dict[key]; + }; + + Translation.prototype.extend = function (translation) { + this.dict = $.extend({}, translation.all(), this.dict); + }; + + // Static functions + + Translation._cache = {}; + + Translation.loadPath = function (path) { + if (!(path in Translation._cache)) { + var translations = require(path); + + Translation._cache[path] = translations; + } + + return new Translation(Translation._cache[path]); + }; + + return Translation; +}); + +S2.define('select2/diacritics',[ + +], function () { + var diacritics = { + '\u24B6': 'A', + '\uFF21': 'A', + '\u00C0': 'A', + '\u00C1': 'A', + '\u00C2': 'A', + '\u1EA6': 'A', + '\u1EA4': 'A', + '\u1EAA': 'A', + '\u1EA8': 'A', + '\u00C3': 'A', + '\u0100': 'A', + '\u0102': 'A', + '\u1EB0': 'A', + '\u1EAE': 'A', + '\u1EB4': 'A', + '\u1EB2': 'A', + '\u0226': 'A', + '\u01E0': 'A', + '\u00C4': 'A', + '\u01DE': 'A', + '\u1EA2': 'A', + '\u00C5': 'A', + '\u01FA': 'A', + '\u01CD': 'A', + '\u0200': 'A', + '\u0202': 'A', + '\u1EA0': 'A', + '\u1EAC': 'A', + '\u1EB6': 'A', + '\u1E00': 'A', + '\u0104': 'A', + '\u023A': 'A', + '\u2C6F': 'A', + '\uA732': 'AA', + '\u00C6': 'AE', + '\u01FC': 'AE', + '\u01E2': 'AE', + '\uA734': 'AO', + '\uA736': 'AU', + '\uA738': 'AV', + '\uA73A': 'AV', + '\uA73C': 'AY', + '\u24B7': 'B', + '\uFF22': 'B', + '\u1E02': 'B', + '\u1E04': 'B', + '\u1E06': 'B', + '\u0243': 'B', + '\u0182': 'B', + '\u0181': 'B', + '\u24B8': 'C', + '\uFF23': 'C', + '\u0106': 'C', + '\u0108': 'C', + '\u010A': 'C', + '\u010C': 'C', + '\u00C7': 'C', + '\u1E08': 'C', + '\u0187': 'C', + '\u023B': 'C', + '\uA73E': 'C', + '\u24B9': 'D', + '\uFF24': 'D', + '\u1E0A': 'D', + '\u010E': 'D', + '\u1E0C': 'D', + '\u1E10': 'D', + '\u1E12': 'D', + '\u1E0E': 'D', + '\u0110': 'D', + '\u018B': 'D', + '\u018A': 'D', + '\u0189': 'D', + '\uA779': 'D', + '\u01F1': 'DZ', + '\u01C4': 'DZ', + '\u01F2': 'Dz', + '\u01C5': 'Dz', + '\u24BA': 'E', + '\uFF25': 'E', + '\u00C8': 'E', + '\u00C9': 'E', + '\u00CA': 'E', + '\u1EC0': 'E', + '\u1EBE': 'E', + '\u1EC4': 'E', + '\u1EC2': 'E', + '\u1EBC': 'E', + '\u0112': 'E', + '\u1E14': 'E', + '\u1E16': 'E', + '\u0114': 'E', + '\u0116': 'E', + '\u00CB': 'E', + '\u1EBA': 'E', + '\u011A': 'E', + '\u0204': 'E', + '\u0206': 'E', + '\u1EB8': 'E', + '\u1EC6': 'E', + '\u0228': 'E', + '\u1E1C': 'E', + '\u0118': 'E', + '\u1E18': 'E', + '\u1E1A': 'E', + '\u0190': 'E', + '\u018E': 'E', + '\u24BB': 'F', + '\uFF26': 'F', + '\u1E1E': 'F', + '\u0191': 'F', + '\uA77B': 'F', + '\u24BC': 'G', + '\uFF27': 'G', + '\u01F4': 'G', + '\u011C': 'G', + '\u1E20': 'G', + '\u011E': 'G', + '\u0120': 'G', + '\u01E6': 'G', + '\u0122': 'G', + '\u01E4': 'G', + '\u0193': 'G', + '\uA7A0': 'G', + '\uA77D': 'G', + '\uA77E': 'G', + '\u24BD': 'H', + '\uFF28': 'H', + '\u0124': 'H', + '\u1E22': 'H', + '\u1E26': 'H', + '\u021E': 'H', + '\u1E24': 'H', + '\u1E28': 'H', + '\u1E2A': 'H', + '\u0126': 'H', + '\u2C67': 'H', + '\u2C75': 'H', + '\uA78D': 'H', + '\u24BE': 'I', + '\uFF29': 'I', + '\u00CC': 'I', + '\u00CD': 'I', + '\u00CE': 'I', + '\u0128': 'I', + '\u012A': 'I', + '\u012C': 'I', + '\u0130': 'I', + '\u00CF': 'I', + '\u1E2E': 'I', + '\u1EC8': 'I', + '\u01CF': 'I', + '\u0208': 'I', + '\u020A': 'I', + '\u1ECA': 'I', + '\u012E': 'I', + '\u1E2C': 'I', + '\u0197': 'I', + '\u24BF': 'J', + '\uFF2A': 'J', + '\u0134': 'J', + '\u0248': 'J', + '\u24C0': 'K', + '\uFF2B': 'K', + '\u1E30': 'K', + '\u01E8': 'K', + '\u1E32': 'K', + '\u0136': 'K', + '\u1E34': 'K', + '\u0198': 'K', + '\u2C69': 'K', + '\uA740': 'K', + '\uA742': 'K', + '\uA744': 'K', + '\uA7A2': 'K', + '\u24C1': 'L', + '\uFF2C': 'L', + '\u013F': 'L', + '\u0139': 'L', + '\u013D': 'L', + '\u1E36': 'L', + '\u1E38': 'L', + '\u013B': 'L', + '\u1E3C': 'L', + '\u1E3A': 'L', + '\u0141': 'L', + '\u023D': 'L', + '\u2C62': 'L', + '\u2C60': 'L', + '\uA748': 'L', + '\uA746': 'L', + '\uA780': 'L', + '\u01C7': 'LJ', + '\u01C8': 'Lj', + '\u24C2': 'M', + '\uFF2D': 'M', + '\u1E3E': 'M', + '\u1E40': 'M', + '\u1E42': 'M', + '\u2C6E': 'M', + '\u019C': 'M', + '\u24C3': 'N', + '\uFF2E': 'N', + '\u01F8': 'N', + '\u0143': 'N', + '\u00D1': 'N', + '\u1E44': 'N', + '\u0147': 'N', + '\u1E46': 'N', + '\u0145': 'N', + '\u1E4A': 'N', + '\u1E48': 'N', + '\u0220': 'N', + '\u019D': 'N', + '\uA790': 'N', + '\uA7A4': 'N', + '\u01CA': 'NJ', + '\u01CB': 'Nj', + '\u24C4': 'O', + '\uFF2F': 'O', + '\u00D2': 'O', + '\u00D3': 'O', + '\u00D4': 'O', + '\u1ED2': 'O', + '\u1ED0': 'O', + '\u1ED6': 'O', + '\u1ED4': 'O', + '\u00D5': 'O', + '\u1E4C': 'O', + '\u022C': 'O', + '\u1E4E': 'O', + '\u014C': 'O', + '\u1E50': 'O', + '\u1E52': 'O', + '\u014E': 'O', + '\u022E': 'O', + '\u0230': 'O', + '\u00D6': 'O', + '\u022A': 'O', + '\u1ECE': 'O', + '\u0150': 'O', + '\u01D1': 'O', + '\u020C': 'O', + '\u020E': 'O', + '\u01A0': 'O', + '\u1EDC': 'O', + '\u1EDA': 'O', + '\u1EE0': 'O', + '\u1EDE': 'O', + '\u1EE2': 'O', + '\u1ECC': 'O', + '\u1ED8': 'O', + '\u01EA': 'O', + '\u01EC': 'O', + '\u00D8': 'O', + '\u01FE': 'O', + '\u0186': 'O', + '\u019F': 'O', + '\uA74A': 'O', + '\uA74C': 'O', + '\u01A2': 'OI', + '\uA74E': 'OO', + '\u0222': 'OU', + '\u24C5': 'P', + '\uFF30': 'P', + '\u1E54': 'P', + '\u1E56': 'P', + '\u01A4': 'P', + '\u2C63': 'P', + '\uA750': 'P', + '\uA752': 'P', + '\uA754': 'P', + '\u24C6': 'Q', + '\uFF31': 'Q', + '\uA756': 'Q', + '\uA758': 'Q', + '\u024A': 'Q', + '\u24C7': 'R', + '\uFF32': 'R', + '\u0154': 'R', + '\u1E58': 'R', + '\u0158': 'R', + '\u0210': 'R', + '\u0212': 'R', + '\u1E5A': 'R', + '\u1E5C': 'R', + '\u0156': 'R', + '\u1E5E': 'R', + '\u024C': 'R', + '\u2C64': 'R', + '\uA75A': 'R', + '\uA7A6': 'R', + '\uA782': 'R', + '\u24C8': 'S', + '\uFF33': 'S', + '\u1E9E': 'S', + '\u015A': 'S', + '\u1E64': 'S', + '\u015C': 'S', + '\u1E60': 'S', + '\u0160': 'S', + '\u1E66': 'S', + '\u1E62': 'S', + '\u1E68': 'S', + '\u0218': 'S', + '\u015E': 'S', + '\u2C7E': 'S', + '\uA7A8': 'S', + '\uA784': 'S', + '\u24C9': 'T', + '\uFF34': 'T', + '\u1E6A': 'T', + '\u0164': 'T', + '\u1E6C': 'T', + '\u021A': 'T', + '\u0162': 'T', + '\u1E70': 'T', + '\u1E6E': 'T', + '\u0166': 'T', + '\u01AC': 'T', + '\u01AE': 'T', + '\u023E': 'T', + '\uA786': 'T', + '\uA728': 'TZ', + '\u24CA': 'U', + '\uFF35': 'U', + '\u00D9': 'U', + '\u00DA': 'U', + '\u00DB': 'U', + '\u0168': 'U', + '\u1E78': 'U', + '\u016A': 'U', + '\u1E7A': 'U', + '\u016C': 'U', + '\u00DC': 'U', + '\u01DB': 'U', + '\u01D7': 'U', + '\u01D5': 'U', + '\u01D9': 'U', + '\u1EE6': 'U', + '\u016E': 'U', + '\u0170': 'U', + '\u01D3': 'U', + '\u0214': 'U', + '\u0216': 'U', + '\u01AF': 'U', + '\u1EEA': 'U', + '\u1EE8': 'U', + '\u1EEE': 'U', + '\u1EEC': 'U', + '\u1EF0': 'U', + '\u1EE4': 'U', + '\u1E72': 'U', + '\u0172': 'U', + '\u1E76': 'U', + '\u1E74': 'U', + '\u0244': 'U', + '\u24CB': 'V', + '\uFF36': 'V', + '\u1E7C': 'V', + '\u1E7E': 'V', + '\u01B2': 'V', + '\uA75E': 'V', + '\u0245': 'V', + '\uA760': 'VY', + '\u24CC': 'W', + '\uFF37': 'W', + '\u1E80': 'W', + '\u1E82': 'W', + '\u0174': 'W', + '\u1E86': 'W', + '\u1E84': 'W', + '\u1E88': 'W', + '\u2C72': 'W', + '\u24CD': 'X', + '\uFF38': 'X', + '\u1E8A': 'X', + '\u1E8C': 'X', + '\u24CE': 'Y', + '\uFF39': 'Y', + '\u1EF2': 'Y', + '\u00DD': 'Y', + '\u0176': 'Y', + '\u1EF8': 'Y', + '\u0232': 'Y', + '\u1E8E': 'Y', + '\u0178': 'Y', + '\u1EF6': 'Y', + '\u1EF4': 'Y', + '\u01B3': 'Y', + '\u024E': 'Y', + '\u1EFE': 'Y', + '\u24CF': 'Z', + '\uFF3A': 'Z', + '\u0179': 'Z', + '\u1E90': 'Z', + '\u017B': 'Z', + '\u017D': 'Z', + '\u1E92': 'Z', + '\u1E94': 'Z', + '\u01B5': 'Z', + '\u0224': 'Z', + '\u2C7F': 'Z', + '\u2C6B': 'Z', + '\uA762': 'Z', + '\u24D0': 'a', + '\uFF41': 'a', + '\u1E9A': 'a', + '\u00E0': 'a', + '\u00E1': 'a', + '\u00E2': 'a', + '\u1EA7': 'a', + '\u1EA5': 'a', + '\u1EAB': 'a', + '\u1EA9': 'a', + '\u00E3': 'a', + '\u0101': 'a', + '\u0103': 'a', + '\u1EB1': 'a', + '\u1EAF': 'a', + '\u1EB5': 'a', + '\u1EB3': 'a', + '\u0227': 'a', + '\u01E1': 'a', + '\u00E4': 'a', + '\u01DF': 'a', + '\u1EA3': 'a', + '\u00E5': 'a', + '\u01FB': 'a', + '\u01CE': 'a', + '\u0201': 'a', + '\u0203': 'a', + '\u1EA1': 'a', + '\u1EAD': 'a', + '\u1EB7': 'a', + '\u1E01': 'a', + '\u0105': 'a', + '\u2C65': 'a', + '\u0250': 'a', + '\uA733': 'aa', + '\u00E6': 'ae', + '\u01FD': 'ae', + '\u01E3': 'ae', + '\uA735': 'ao', + '\uA737': 'au', + '\uA739': 'av', + '\uA73B': 'av', + '\uA73D': 'ay', + '\u24D1': 'b', + '\uFF42': 'b', + '\u1E03': 'b', + '\u1E05': 'b', + '\u1E07': 'b', + '\u0180': 'b', + '\u0183': 'b', + '\u0253': 'b', + '\u24D2': 'c', + '\uFF43': 'c', + '\u0107': 'c', + '\u0109': 'c', + '\u010B': 'c', + '\u010D': 'c', + '\u00E7': 'c', + '\u1E09': 'c', + '\u0188': 'c', + '\u023C': 'c', + '\uA73F': 'c', + '\u2184': 'c', + '\u24D3': 'd', + '\uFF44': 'd', + '\u1E0B': 'd', + '\u010F': 'd', + '\u1E0D': 'd', + '\u1E11': 'd', + '\u1E13': 'd', + '\u1E0F': 'd', + '\u0111': 'd', + '\u018C': 'd', + '\u0256': 'd', + '\u0257': 'd', + '\uA77A': 'd', + '\u01F3': 'dz', + '\u01C6': 'dz', + '\u24D4': 'e', + '\uFF45': 'e', + '\u00E8': 'e', + '\u00E9': 'e', + '\u00EA': 'e', + '\u1EC1': 'e', + '\u1EBF': 'e', + '\u1EC5': 'e', + '\u1EC3': 'e', + '\u1EBD': 'e', + '\u0113': 'e', + '\u1E15': 'e', + '\u1E17': 'e', + '\u0115': 'e', + '\u0117': 'e', + '\u00EB': 'e', + '\u1EBB': 'e', + '\u011B': 'e', + '\u0205': 'e', + '\u0207': 'e', + '\u1EB9': 'e', + '\u1EC7': 'e', + '\u0229': 'e', + '\u1E1D': 'e', + '\u0119': 'e', + '\u1E19': 'e', + '\u1E1B': 'e', + '\u0247': 'e', + '\u025B': 'e', + '\u01DD': 'e', + '\u24D5': 'f', + '\uFF46': 'f', + '\u1E1F': 'f', + '\u0192': 'f', + '\uA77C': 'f', + '\u24D6': 'g', + '\uFF47': 'g', + '\u01F5': 'g', + '\u011D': 'g', + '\u1E21': 'g', + '\u011F': 'g', + '\u0121': 'g', + '\u01E7': 'g', + '\u0123': 'g', + '\u01E5': 'g', + '\u0260': 'g', + '\uA7A1': 'g', + '\u1D79': 'g', + '\uA77F': 'g', + '\u24D7': 'h', + '\uFF48': 'h', + '\u0125': 'h', + '\u1E23': 'h', + '\u1E27': 'h', + '\u021F': 'h', + '\u1E25': 'h', + '\u1E29': 'h', + '\u1E2B': 'h', + '\u1E96': 'h', + '\u0127': 'h', + '\u2C68': 'h', + '\u2C76': 'h', + '\u0265': 'h', + '\u0195': 'hv', + '\u24D8': 'i', + '\uFF49': 'i', + '\u00EC': 'i', + '\u00ED': 'i', + '\u00EE': 'i', + '\u0129': 'i', + '\u012B': 'i', + '\u012D': 'i', + '\u00EF': 'i', + '\u1E2F': 'i', + '\u1EC9': 'i', + '\u01D0': 'i', + '\u0209': 'i', + '\u020B': 'i', + '\u1ECB': 'i', + '\u012F': 'i', + '\u1E2D': 'i', + '\u0268': 'i', + '\u0131': 'i', + '\u24D9': 'j', + '\uFF4A': 'j', + '\u0135': 'j', + '\u01F0': 'j', + '\u0249': 'j', + '\u24DA': 'k', + '\uFF4B': 'k', + '\u1E31': 'k', + '\u01E9': 'k', + '\u1E33': 'k', + '\u0137': 'k', + '\u1E35': 'k', + '\u0199': 'k', + '\u2C6A': 'k', + '\uA741': 'k', + '\uA743': 'k', + '\uA745': 'k', + '\uA7A3': 'k', + '\u24DB': 'l', + '\uFF4C': 'l', + '\u0140': 'l', + '\u013A': 'l', + '\u013E': 'l', + '\u1E37': 'l', + '\u1E39': 'l', + '\u013C': 'l', + '\u1E3D': 'l', + '\u1E3B': 'l', + '\u017F': 'l', + '\u0142': 'l', + '\u019A': 'l', + '\u026B': 'l', + '\u2C61': 'l', + '\uA749': 'l', + '\uA781': 'l', + '\uA747': 'l', + '\u01C9': 'lj', + '\u24DC': 'm', + '\uFF4D': 'm', + '\u1E3F': 'm', + '\u1E41': 'm', + '\u1E43': 'm', + '\u0271': 'm', + '\u026F': 'm', + '\u24DD': 'n', + '\uFF4E': 'n', + '\u01F9': 'n', + '\u0144': 'n', + '\u00F1': 'n', + '\u1E45': 'n', + '\u0148': 'n', + '\u1E47': 'n', + '\u0146': 'n', + '\u1E4B': 'n', + '\u1E49': 'n', + '\u019E': 'n', + '\u0272': 'n', + '\u0149': 'n', + '\uA791': 'n', + '\uA7A5': 'n', + '\u01CC': 'nj', + '\u24DE': 'o', + '\uFF4F': 'o', + '\u00F2': 'o', + '\u00F3': 'o', + '\u00F4': 'o', + '\u1ED3': 'o', + '\u1ED1': 'o', + '\u1ED7': 'o', + '\u1ED5': 'o', + '\u00F5': 'o', + '\u1E4D': 'o', + '\u022D': 'o', + '\u1E4F': 'o', + '\u014D': 'o', + '\u1E51': 'o', + '\u1E53': 'o', + '\u014F': 'o', + '\u022F': 'o', + '\u0231': 'o', + '\u00F6': 'o', + '\u022B': 'o', + '\u1ECF': 'o', + '\u0151': 'o', + '\u01D2': 'o', + '\u020D': 'o', + '\u020F': 'o', + '\u01A1': 'o', + '\u1EDD': 'o', + '\u1EDB': 'o', + '\u1EE1': 'o', + '\u1EDF': 'o', + '\u1EE3': 'o', + '\u1ECD': 'o', + '\u1ED9': 'o', + '\u01EB': 'o', + '\u01ED': 'o', + '\u00F8': 'o', + '\u01FF': 'o', + '\u0254': 'o', + '\uA74B': 'o', + '\uA74D': 'o', + '\u0275': 'o', + '\u01A3': 'oi', + '\u0223': 'ou', + '\uA74F': 'oo', + '\u24DF': 'p', + '\uFF50': 'p', + '\u1E55': 'p', + '\u1E57': 'p', + '\u01A5': 'p', + '\u1D7D': 'p', + '\uA751': 'p', + '\uA753': 'p', + '\uA755': 'p', + '\u24E0': 'q', + '\uFF51': 'q', + '\u024B': 'q', + '\uA757': 'q', + '\uA759': 'q', + '\u24E1': 'r', + '\uFF52': 'r', + '\u0155': 'r', + '\u1E59': 'r', + '\u0159': 'r', + '\u0211': 'r', + '\u0213': 'r', + '\u1E5B': 'r', + '\u1E5D': 'r', + '\u0157': 'r', + '\u1E5F': 'r', + '\u024D': 'r', + '\u027D': 'r', + '\uA75B': 'r', + '\uA7A7': 'r', + '\uA783': 'r', + '\u24E2': 's', + '\uFF53': 's', + '\u00DF': 's', + '\u015B': 's', + '\u1E65': 's', + '\u015D': 's', + '\u1E61': 's', + '\u0161': 's', + '\u1E67': 's', + '\u1E63': 's', + '\u1E69': 's', + '\u0219': 's', + '\u015F': 's', + '\u023F': 's', + '\uA7A9': 's', + '\uA785': 's', + '\u1E9B': 's', + '\u24E3': 't', + '\uFF54': 't', + '\u1E6B': 't', + '\u1E97': 't', + '\u0165': 't', + '\u1E6D': 't', + '\u021B': 't', + '\u0163': 't', + '\u1E71': 't', + '\u1E6F': 't', + '\u0167': 't', + '\u01AD': 't', + '\u0288': 't', + '\u2C66': 't', + '\uA787': 't', + '\uA729': 'tz', + '\u24E4': 'u', + '\uFF55': 'u', + '\u00F9': 'u', + '\u00FA': 'u', + '\u00FB': 'u', + '\u0169': 'u', + '\u1E79': 'u', + '\u016B': 'u', + '\u1E7B': 'u', + '\u016D': 'u', + '\u00FC': 'u', + '\u01DC': 'u', + '\u01D8': 'u', + '\u01D6': 'u', + '\u01DA': 'u', + '\u1EE7': 'u', + '\u016F': 'u', + '\u0171': 'u', + '\u01D4': 'u', + '\u0215': 'u', + '\u0217': 'u', + '\u01B0': 'u', + '\u1EEB': 'u', + '\u1EE9': 'u', + '\u1EEF': 'u', + '\u1EED': 'u', + '\u1EF1': 'u', + '\u1EE5': 'u', + '\u1E73': 'u', + '\u0173': 'u', + '\u1E77': 'u', + '\u1E75': 'u', + '\u0289': 'u', + '\u24E5': 'v', + '\uFF56': 'v', + '\u1E7D': 'v', + '\u1E7F': 'v', + '\u028B': 'v', + '\uA75F': 'v', + '\u028C': 'v', + '\uA761': 'vy', + '\u24E6': 'w', + '\uFF57': 'w', + '\u1E81': 'w', + '\u1E83': 'w', + '\u0175': 'w', + '\u1E87': 'w', + '\u1E85': 'w', + '\u1E98': 'w', + '\u1E89': 'w', + '\u2C73': 'w', + '\u24E7': 'x', + '\uFF58': 'x', + '\u1E8B': 'x', + '\u1E8D': 'x', + '\u24E8': 'y', + '\uFF59': 'y', + '\u1EF3': 'y', + '\u00FD': 'y', + '\u0177': 'y', + '\u1EF9': 'y', + '\u0233': 'y', + '\u1E8F': 'y', + '\u00FF': 'y', + '\u1EF7': 'y', + '\u1E99': 'y', + '\u1EF5': 'y', + '\u01B4': 'y', + '\u024F': 'y', + '\u1EFF': 'y', + '\u24E9': 'z', + '\uFF5A': 'z', + '\u017A': 'z', + '\u1E91': 'z', + '\u017C': 'z', + '\u017E': 'z', + '\u1E93': 'z', + '\u1E95': 'z', + '\u01B6': 'z', + '\u0225': 'z', + '\u0240': 'z', + '\u2C6C': 'z', + '\uA763': 'z', + '\u0386': '\u0391', + '\u0388': '\u0395', + '\u0389': '\u0397', + '\u038A': '\u0399', + '\u03AA': '\u0399', + '\u038C': '\u039F', + '\u038E': '\u03A5', + '\u03AB': '\u03A5', + '\u038F': '\u03A9', + '\u03AC': '\u03B1', + '\u03AD': '\u03B5', + '\u03AE': '\u03B7', + '\u03AF': '\u03B9', + '\u03CA': '\u03B9', + '\u0390': '\u03B9', + '\u03CC': '\u03BF', + '\u03CD': '\u03C5', + '\u03CB': '\u03C5', + '\u03B0': '\u03C5', + '\u03C9': '\u03C9', + '\u03C2': '\u03C3' + }; + + return diacritics; +}); + +S2.define('select2/data/base',[ + '../utils' +], function (Utils) { + function BaseAdapter ($element, options) { + BaseAdapter.__super__.constructor.call(this); + } + + Utils.Extend(BaseAdapter, Utils.Observable); + + BaseAdapter.prototype.current = function (callback) { + throw new Error('The `current` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.query = function (params, callback) { + throw new Error('The `query` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.bind = function (container, $container) { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.destroy = function () { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.generateResultId = function (container, data) { + var id = container.id + '-result-'; + + id += Utils.generateChars(4); + + if (data.id != null) { + id += '-' + data.id.toString(); + } else { + id += '-' + Utils.generateChars(4); + } + return id; + }; + + return BaseAdapter; +}); + +S2.define('select2/data/select',[ + './base', + '../utils', + 'jquery' +], function (BaseAdapter, Utils, $) { + function SelectAdapter ($element, options) { + this.$element = $element; + this.options = options; + + SelectAdapter.__super__.constructor.call(this); + } + + Utils.Extend(SelectAdapter, BaseAdapter); + + SelectAdapter.prototype.current = function (callback) { + var data = []; + var self = this; + + this.$element.find(':selected').each(function () { + var $option = $(this); + + var option = self.item($option); + + data.push(option); + }); + + callback(data); + }; + + SelectAdapter.prototype.select = function (data) { + var self = this; + + data.selected = true; + + // If data.element is a DOM node, use it instead + if ($(data.element).is('option')) { + data.element.selected = true; + + this.$element.trigger('change'); + + return; + } + + if (this.$element.prop('multiple')) { + this.current(function (currentData) { + var val = []; + + data = [data]; + data.push.apply(data, currentData); + + for (var d = 0; d < data.length; d++) { + var id = data[d].id; + + if ($.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + self.$element.trigger('change'); + }); + } else { + var val = data.id; + + this.$element.val(val); + this.$element.trigger('change'); + } + }; + + SelectAdapter.prototype.unselect = function (data) { + var self = this; + + if (!this.$element.prop('multiple')) { + return; + } + + data.selected = false; + + if ($(data.element).is('option')) { + data.element.selected = false; + + this.$element.trigger('change'); + + return; + } + + this.current(function (currentData) { + var val = []; + + for (var d = 0; d < currentData.length; d++) { + var id = currentData[d].id; + + if (id !== data.id && $.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + + self.$element.trigger('change'); + }); + }; + + SelectAdapter.prototype.bind = function (container, $container) { + var self = this; + + this.container = container; + + container.on('select', function (params) { + self.select(params.data); + }); + + container.on('unselect', function (params) { + self.unselect(params.data); + }); + }; + + SelectAdapter.prototype.destroy = function () { + // Remove anything added to child elements + this.$element.find('*').each(function () { + // Remove any custom data set by Select2 + $.removeData(this, 'data'); + }); + }; + + SelectAdapter.prototype.query = function (params, callback) { + var data = []; + var self = this; + + var $options = this.$element.children(); + + $options.each(function () { + var $option = $(this); + + if (!$option.is('option') && !$option.is('optgroup')) { + return; + } + + var option = self.item($option); + + var matches = self.matches(params, option); + + if (matches !== null) { + data.push(matches); + } + }); + + callback({ + results: data + }); + }; + + SelectAdapter.prototype.addOptions = function ($options) { + Utils.appendMany(this.$element, $options); + }; + + SelectAdapter.prototype.option = function (data) { + var option; + + if (data.children) { + option = document.createElement('optgroup'); + option.label = data.text; + } else { + option = document.createElement('option'); + + if (option.textContent !== undefined) { + option.textContent = data.text; + } else { + option.innerText = data.text; + } + } + + if (data.id !== undefined) { + option.value = data.id; + } + + if (data.disabled) { + option.disabled = true; + } + + if (data.selected) { + option.selected = true; + } + + if (data.title) { + option.title = data.title; + } + + var $option = $(option); + + var normalizedData = this._normalizeItem(data); + normalizedData.element = option; + + // Override the option's data with the combined data + $.data(option, 'data', normalizedData); + + return $option; + }; + + SelectAdapter.prototype.item = function ($option) { + var data = {}; + + data = $.data($option[0], 'data'); + + if (data != null) { + return data; + } + + if ($option.is('option')) { + data = { + id: $option.val(), + text: $option.text(), + disabled: $option.prop('disabled'), + selected: $option.prop('selected'), + title: $option.prop('title') + }; + } else if ($option.is('optgroup')) { + data = { + text: $option.prop('label'), + children: [], + title: $option.prop('title') + }; + + var $children = $option.children('option'); + var children = []; + + for (var c = 0; c < $children.length; c++) { + var $child = $($children[c]); + + var child = this.item($child); + + children.push(child); + } + + data.children = children; + } + + data = this._normalizeItem(data); + data.element = $option[0]; + + $.data($option[0], 'data', data); + + return data; + }; + + SelectAdapter.prototype._normalizeItem = function (item) { + if (!$.isPlainObject(item)) { + item = { + id: item, + text: item + }; + } + + item = $.extend({}, { + text: '' + }, item); + + var defaults = { + selected: false, + disabled: false + }; + + if (item.id != null) { + item.id = item.id.toString(); + } + + if (item.text != null) { + item.text = item.text.toString(); + } + + if (item._resultId == null && item.id && this.container != null) { + item._resultId = this.generateResultId(this.container, item); + } + + return $.extend({}, defaults, item); + }; + + SelectAdapter.prototype.matches = function (params, data) { + var matcher = this.options.get('matcher'); + + return matcher(params, data); + }; + + return SelectAdapter; +}); + +S2.define('select2/data/array',[ + './select', + '../utils', + 'jquery' +], function (SelectAdapter, Utils, $) { + function ArrayAdapter ($element, options) { + var data = options.get('data') || []; + + ArrayAdapter.__super__.constructor.call(this, $element, options); + + this.addOptions(this.convertToOptions(data)); + } + + Utils.Extend(ArrayAdapter, SelectAdapter); + + ArrayAdapter.prototype.select = function (data) { + var $option = this.$element.find('option').filter(function (i, elm) { + return elm.value == data.id.toString(); + }); + + if ($option.length === 0) { + $option = this.option(data); + + this.addOptions($option); + } + + ArrayAdapter.__super__.select.call(this, data); + }; + + ArrayAdapter.prototype.convertToOptions = function (data) { + var self = this; + + var $existing = this.$element.find('option'); + var existingIds = $existing.map(function () { + return self.item($(this)).id; + }).get(); + + var $options = []; + + // Filter out all items except for the one passed in the argument + function onlyItem (item) { + return function () { + return $(this).val() == item.id; + }; + } + + for (var d = 0; d < data.length; d++) { + var item = this._normalizeItem(data[d]); + + // Skip items which were pre-loaded, only merge the data + if ($.inArray(item.id, existingIds) >= 0) { + var $existingOption = $existing.filter(onlyItem(item)); + + var existingData = this.item($existingOption); + var newData = $.extend(true, {}, item, existingData); + + var $newOption = this.option(newData); + + $existingOption.replaceWith($newOption); + + continue; + } + + var $option = this.option(item); + + if (item.children) { + var $children = this.convertToOptions(item.children); + + Utils.appendMany($option, $children); + } + + $options.push($option); + } + + return $options; + }; + + return ArrayAdapter; +}); + +S2.define('select2/data/ajax',[ + './array', + '../utils', + 'jquery' +], function (ArrayAdapter, Utils, $) { + function AjaxAdapter ($element, options) { + this.ajaxOptions = this._applyDefaults(options.get('ajax')); + + if (this.ajaxOptions.processResults != null) { + this.processResults = this.ajaxOptions.processResults; + } + + AjaxAdapter.__super__.constructor.call(this, $element, options); + } + + Utils.Extend(AjaxAdapter, ArrayAdapter); + + AjaxAdapter.prototype._applyDefaults = function (options) { + var defaults = { + data: function (params) { + return $.extend({}, params, { + q: params.term + }); + }, + transport: function (params, success, failure) { + var $request = $.ajax(params); + + $request.then(success); + $request.fail(failure); + + return $request; + } + }; + + return $.extend({}, defaults, options, true); + }; + + AjaxAdapter.prototype.processResults = function (results) { + return results; + }; + + AjaxAdapter.prototype.query = function (params, callback) { + var matches = []; + var self = this; + + if (this._request != null) { + // JSONP requests cannot always be aborted + if ($.isFunction(this._request.abort)) { + this._request.abort(); + } + + this._request = null; + } + + var options = $.extend({ + type: 'GET' + }, this.ajaxOptions); + + if (typeof options.url === 'function') { + options.url = options.url.call(this.$element, params); + } + + if (typeof options.data === 'function') { + options.data = options.data.call(this.$element, params); + } + + function request () { + var $request = options.transport(options, function (data) { + var results = self.processResults(data, params); + + if (self.options.get('debug') && window.console && console.error) { + // Check to make sure that the response included a `results` key. + if (!results || !results.results || !$.isArray(results.results)) { + console.error( + 'Select2: The AJAX results did not return an array in the ' + + '`results` key of the response.' + ); + } + } + + callback(results); + }, function () { + // Attempt to detect if a request was aborted + // Only works if the transport exposes a status property + if ($request.status && $request.status === '0') { + return; + } + + self.trigger('results:message', { + message: 'errorLoading' + }); + }); + + self._request = $request; + } + + if (this.ajaxOptions.delay && params.term != null) { + if (this._queryTimeout) { + window.clearTimeout(this._queryTimeout); + } + + this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay); + } else { + request(); + } + }; + + return AjaxAdapter; +}); + +S2.define('select2/data/tags',[ + 'jquery' +], function ($) { + function Tags (decorated, $element, options) { + var tags = options.get('tags'); + + var createTag = options.get('createTag'); + + if (createTag !== undefined) { + this.createTag = createTag; + } + + var insertTag = options.get('insertTag'); + + if (insertTag !== undefined) { + this.insertTag = insertTag; + } + + decorated.call(this, $element, options); + + if ($.isArray(tags)) { + for (var t = 0; t < tags.length; t++) { + var tag = tags[t]; + var item = this._normalizeItem(tag); + + var $option = this.option(item); + + this.$element.append($option); + } + } + } + + Tags.prototype.query = function (decorated, params, callback) { + var self = this; + + this._removeOldTags(); + + if (params.term == null || params.page != null) { + decorated.call(this, params, callback); + return; + } + + function wrapper (obj, child) { + var data = obj.results; + + for (var i = 0; i < data.length; i++) { + var option = data[i]; + + var checkChildren = ( + option.children != null && + !wrapper({ + results: option.children + }, true) + ); + + var optionText = (option.text || '').toUpperCase(); + var paramsTerm = (params.term || '').toUpperCase(); + + var checkText = optionText === paramsTerm; + + if (checkText || checkChildren) { + if (child) { + return false; + } + + obj.data = data; + callback(obj); + + return; + } + } + + if (child) { + return true; + } + + var tag = self.createTag(params); + + if (tag != null) { + var $option = self.option(tag); + $option.attr('data-select2-tag', true); + + self.addOptions([$option]); + + self.insertTag(data, tag); + } + + obj.results = data; + + callback(obj); + } + + decorated.call(this, params, wrapper); + }; + + Tags.prototype.createTag = function (decorated, params) { + var term = $.trim(params.term); + + if (term === '') { + return null; + } + + return { + id: term, + text: term + }; + }; + + Tags.prototype.insertTag = function (_, data, tag) { + data.unshift(tag); + }; + + Tags.prototype._removeOldTags = function (_) { + var tag = this._lastTag; + + var $options = this.$element.find('option[data-select2-tag]'); + + $options.each(function () { + if (this.selected) { + return; + } + + $(this).remove(); + }); + }; + + return Tags; +}); + +S2.define('select2/data/tokenizer',[ + 'jquery' +], function ($) { + function Tokenizer (decorated, $element, options) { + var tokenizer = options.get('tokenizer'); + + if (tokenizer !== undefined) { + this.tokenizer = tokenizer; + } + + decorated.call(this, $element, options); + } + + Tokenizer.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + this.$search = container.dropdown.$search || container.selection.$search || + $container.find('.select2-search__field'); + }; + + Tokenizer.prototype.query = function (decorated, params, callback) { + var self = this; + + function createAndSelect (data) { + // Normalize the data object so we can use it for checks + var item = self._normalizeItem(data); + + // Check if the data object already exists as a tag + // Select it if it doesn't + var $existingOptions = self.$element.find('option').filter(function () { + return $(this).val() === item.id; + }); + + // If an existing option wasn't found for it, create the option + if (!$existingOptions.length) { + var $option = self.option(item); + $option.attr('data-select2-tag', true); + + self._removeOldTags(); + self.addOptions([$option]); + } + + // Select the item, now that we know there is an option for it + select(item); + } + + function select (data) { + self.trigger('select', { + data: data + }); + } + + params.term = params.term || ''; + + var tokenData = this.tokenizer(params, this.options, createAndSelect); + + if (tokenData.term !== params.term) { + // Replace the search term if we have the search box + if (this.$search.length) { + this.$search.val(tokenData.term); + this.$search.focus(); + } + + params.term = tokenData.term; + } + + decorated.call(this, params, callback); + }; + + Tokenizer.prototype.tokenizer = function (_, params, options, callback) { + var separators = options.get('tokenSeparators') || []; + var term = params.term; + var i = 0; + + var createTag = this.createTag || function (params) { + return { + id: params.term, + text: params.term + }; + }; + + while (i < term.length) { + var termChar = term[i]; + + if ($.inArray(termChar, separators) === -1) { + i++; + + continue; + } + + var part = term.substr(0, i); + var partParams = $.extend({}, params, { + term: part + }); + + var data = createTag(partParams); + + if (data == null) { + i++; + continue; + } + + callback(data); + + // Reset the term to not include the tokenized portion + term = term.substr(i + 1) || ''; + i = 0; + } + + return { + term: term + }; + }; + + return Tokenizer; +}); + +S2.define('select2/data/minimumInputLength',[ + +], function () { + function MinimumInputLength (decorated, $e, options) { + this.minimumInputLength = options.get('minimumInputLength'); + + decorated.call(this, $e, options); + } + + MinimumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (params.term.length < this.minimumInputLength) { + this.trigger('results:message', { + message: 'inputTooShort', + args: { + minimum: this.minimumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MinimumInputLength; +}); + +S2.define('select2/data/maximumInputLength',[ + +], function () { + function MaximumInputLength (decorated, $e, options) { + this.maximumInputLength = options.get('maximumInputLength'); + + decorated.call(this, $e, options); + } + + MaximumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (this.maximumInputLength > 0 && + params.term.length > this.maximumInputLength) { + this.trigger('results:message', { + message: 'inputTooLong', + args: { + maximum: this.maximumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MaximumInputLength; +}); + +S2.define('select2/data/maximumSelectionLength',[ + +], function (){ + function MaximumSelectionLength (decorated, $e, options) { + this.maximumSelectionLength = options.get('maximumSelectionLength'); + + decorated.call(this, $e, options); + } + + MaximumSelectionLength.prototype.query = + function (decorated, params, callback) { + var self = this; + + this.current(function (currentData) { + var count = currentData != null ? currentData.length : 0; + if (self.maximumSelectionLength > 0 && + count >= self.maximumSelectionLength) { + self.trigger('results:message', { + message: 'maximumSelected', + args: { + maximum: self.maximumSelectionLength + } + }); + return; + } + decorated.call(self, params, callback); + }); + }; + + return MaximumSelectionLength; +}); + +S2.define('select2/dropdown',[ + 'jquery', + './utils' +], function ($, Utils) { + function Dropdown ($element, options) { + this.$element = $element; + this.options = options; + + Dropdown.__super__.constructor.call(this); + } + + Utils.Extend(Dropdown, Utils.Observable); + + Dropdown.prototype.render = function () { + var $dropdown = $( + '' + + '' + + '' + ); + + $dropdown.attr('dir', this.options.get('dir')); + + this.$dropdown = $dropdown; + + return $dropdown; + }; + + Dropdown.prototype.bind = function () { + // Should be implemented in subclasses + }; + + Dropdown.prototype.position = function ($dropdown, $container) { + // Should be implmented in subclasses + }; + + Dropdown.prototype.destroy = function () { + // Remove the dropdown from the DOM + this.$dropdown.remove(); + }; + + return Dropdown; +}); + +S2.define('select2/dropdown/search',[ + 'jquery', + '../utils' +], function ($, Utils) { + function Search () { } + + Search.prototype.render = function (decorated) { + var $rendered = decorated.call(this); + + var $search = $( + '' + + '' + + '' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + $rendered.prepend($search); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + this.$search.on('keydown', function (evt) { + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + }); + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$search.on('input', function (evt) { + // Unbind the duplicated `keyup` event + $(this).off('keyup'); + }); + + this.$search.on('keyup input', function (evt) { + self.handleSearch(evt); + }); + + container.on('open', function () { + self.$search.attr('tabindex', 0); + + self.$search.focus(); + + window.setTimeout(function () { + self.$search.focus(); + }, 0); + }); + + container.on('close', function () { + self.$search.attr('tabindex', -1); + + self.$search.val(''); + }); + + container.on('focus', function () { + if (!container.isOpen()) { + self.$search.focus(); + } + }); + + container.on('results:all', function (params) { + if (params.query.term == null || params.query.term === '') { + var showSearch = self.showSearch(params); + + if (showSearch) { + self.$searchContainer.removeClass('select2-search--hide'); + } else { + self.$searchContainer.addClass('select2-search--hide'); + } + } + }); + }; + + Search.prototype.handleSearch = function (evt) { + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.showSearch = function (_, params) { + return true; + }; + + return Search; +}); + +S2.define('select2/dropdown/hidePlaceholder',[ + +], function () { + function HidePlaceholder (decorated, $element, options, dataAdapter) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options, dataAdapter); + } + + HidePlaceholder.prototype.append = function (decorated, data) { + data.results = this.removePlaceholder(data.results); + + decorated.call(this, data); + }; + + HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + HidePlaceholder.prototype.removePlaceholder = function (_, data) { + var modifiedData = data.slice(0); + + for (var d = data.length - 1; d >= 0; d--) { + var item = data[d]; + + if (this.placeholder.id === item.id) { + modifiedData.splice(d, 1); + } + } + + return modifiedData; + }; + + return HidePlaceholder; +}); + +S2.define('select2/dropdown/infiniteScroll',[ + 'jquery' +], function ($) { + function InfiniteScroll (decorated, $element, options, dataAdapter) { + this.lastParams = {}; + + decorated.call(this, $element, options, dataAdapter); + + this.$loadingMore = this.createLoadingMore(); + this.loading = false; + } + + InfiniteScroll.prototype.append = function (decorated, data) { + this.$loadingMore.remove(); + this.loading = false; + + decorated.call(this, data); + + if (this.showLoadingMore(data)) { + this.$results.append(this.$loadingMore); + } + }; + + InfiniteScroll.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('query', function (params) { + self.lastParams = params; + self.loading = true; + }); + + container.on('query:append', function (params) { + self.lastParams = params; + self.loading = true; + }); + + this.$results.on('scroll', function () { + var isLoadMoreVisible = $.contains( + document.documentElement, + self.$loadingMore[0] + ); + + if (self.loading || !isLoadMoreVisible) { + return; + } + + var currentOffset = self.$results.offset().top + + self.$results.outerHeight(false); + var loadingMoreOffset = self.$loadingMore.offset().top + + self.$loadingMore.outerHeight(false); + + if (currentOffset + 50 >= loadingMoreOffset) { + self.loadMore(); + } + }); + }; + + InfiniteScroll.prototype.loadMore = function () { + this.loading = true; + + var params = $.extend({}, {page: 1}, this.lastParams); + + params.page++; + + this.trigger('query:append', params); + }; + + InfiniteScroll.prototype.showLoadingMore = function (_, data) { + return data.pagination && data.pagination.more; + }; + + InfiniteScroll.prototype.createLoadingMore = function () { + var $option = $( + '
          • ' + ); + + var message = this.options.get('translations').get('loadingMore'); + + $option.html(message(this.lastParams)); + + return $option; + }; + + return InfiniteScroll; +}); + +S2.define('select2/dropdown/attachBody',[ + 'jquery', + '../utils' +], function ($, Utils) { + function AttachBody (decorated, $element, options) { + this.$dropdownParent = options.get('dropdownParent') || $(document.body); + + decorated.call(this, $element, options); + } + + AttachBody.prototype.bind = function (decorated, container, $container) { + var self = this; + + var setupResultsEvents = false; + + decorated.call(this, container, $container); + + container.on('open', function () { + self._showDropdown(); + self._attachPositioningHandler(container); + + if (!setupResultsEvents) { + setupResultsEvents = true; + + container.on('results:all', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('results:append', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + } + }); + + container.on('close', function () { + self._hideDropdown(); + self._detachPositioningHandler(container); + }); + + this.$dropdownContainer.on('mousedown', function (evt) { + evt.stopPropagation(); + }); + }; + + AttachBody.prototype.destroy = function (decorated) { + decorated.call(this); + + this.$dropdownContainer.remove(); + }; + + AttachBody.prototype.position = function (decorated, $dropdown, $container) { + // Clone all of the container classes + $dropdown.attr('class', $container.attr('class')); + + $dropdown.removeClass('select2'); + $dropdown.addClass('select2-container--open'); + + $dropdown.css({ + position: 'absolute', + top: -999999 + }); + + this.$container = $container; + }; + + AttachBody.prototype.render = function (decorated) { + var $container = $(''); + + var $dropdown = decorated.call(this); + $container.append($dropdown); + + this.$dropdownContainer = $container; + + return $container; + }; + + AttachBody.prototype._hideDropdown = function (decorated) { + this.$dropdownContainer.detach(); + }; + + AttachBody.prototype._attachPositioningHandler = + function (decorated, container) { + var self = this; + + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.each(function () { + $(this).data('select2-scroll-position', { + x: $(this).scrollLeft(), + y: $(this).scrollTop() + }); + }); + + $watchers.on(scrollEvent, function (ev) { + var position = $(this).data('select2-scroll-position'); + $(this).scrollTop(position.y); + }); + + $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, + function (e) { + self._positionDropdown(); + self._resizeDropdown(); + }); + }; + + AttachBody.prototype._detachPositioningHandler = + function (decorated, container) { + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.off(scrollEvent); + + $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent); + }; + + AttachBody.prototype._positionDropdown = function () { + var $window = $(window); + + var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above'); + var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below'); + + var newDirection = null; + + var offset = this.$container.offset(); + + offset.bottom = offset.top + this.$container.outerHeight(false); + + var container = { + height: this.$container.outerHeight(false) + }; + + container.top = offset.top; + container.bottom = offset.top + container.height; + + var dropdown = { + height: this.$dropdown.outerHeight(false) + }; + + var viewport = { + top: $window.scrollTop(), + bottom: $window.scrollTop() + $window.height() + }; + + var enoughRoomAbove = viewport.top < (offset.top - dropdown.height); + var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height); + + var css = { + left: offset.left, + top: container.bottom + }; + + // Determine what the parent element is to use for calciulating the offset + var $offsetParent = this.$dropdownParent; + + // For statically positoned elements, we need to get the element + // that is determining the offset + if ($offsetParent.css('position') === 'static') { + $offsetParent = $offsetParent.offsetParent(); + } + + var parentOffset = $offsetParent.offset(); + + css.top -= parentOffset.top; + css.left -= parentOffset.left; + + if (!isCurrentlyAbove && !isCurrentlyBelow) { + newDirection = 'below'; + } + + if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) { + newDirection = 'above'; + } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) { + newDirection = 'below'; + } + + if (newDirection == 'above' || + (isCurrentlyAbove && newDirection !== 'below')) { + css.top = container.top - parentOffset.top - dropdown.height; + } + + if (newDirection != null) { + this.$dropdown + .removeClass('select2-dropdown--below select2-dropdown--above') + .addClass('select2-dropdown--' + newDirection); + this.$container + .removeClass('select2-container--below select2-container--above') + .addClass('select2-container--' + newDirection); + } + + this.$dropdownContainer.css(css); + }; + + AttachBody.prototype._resizeDropdown = function () { + var css = { + width: this.$container.outerWidth(false) + 'px' + }; + + if (this.options.get('dropdownAutoWidth')) { + css.minWidth = css.width; + css.position = 'relative'; + css.width = 'auto'; + } + + this.$dropdown.css(css); + }; + + AttachBody.prototype._showDropdown = function (decorated) { + this.$dropdownContainer.appendTo(this.$dropdownParent); + + this._positionDropdown(); + this._resizeDropdown(); + }; + + return AttachBody; +}); + +S2.define('select2/dropdown/minimumResultsForSearch',[ + +], function () { + function countResults (data) { + var count = 0; + + for (var d = 0; d < data.length; d++) { + var item = data[d]; + + if (item.children) { + count += countResults(item.children); + } else { + count++; + } + } + + return count; + } + + function MinimumResultsForSearch (decorated, $element, options, dataAdapter) { + this.minimumResultsForSearch = options.get('minimumResultsForSearch'); + + if (this.minimumResultsForSearch < 0) { + this.minimumResultsForSearch = Infinity; + } + + decorated.call(this, $element, options, dataAdapter); + } + + MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { + if (countResults(params.data.results) < this.minimumResultsForSearch) { + return false; + } + + return decorated.call(this, params); + }; + + return MinimumResultsForSearch; +}); + +S2.define('select2/dropdown/selectOnClose',[ + +], function () { + function SelectOnClose () { } + + SelectOnClose.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('close', function (params) { + self._handleSelectOnClose(params); + }); + }; + + SelectOnClose.prototype._handleSelectOnClose = function (_, params) { + if (params && params.originalSelect2Event != null) { + var event = params.originalSelect2Event; + + // Don't select an item if the close event was triggered from a select or + // unselect event + if (event._type === 'select' || event._type === 'unselect') { + return; + } + } + + var $highlightedResults = this.getHighlightedResults(); + + // Only select highlighted results + if ($highlightedResults.length < 1) { + return; + } + + var data = $highlightedResults.data('data'); + + // Don't re-select already selected resulte + if ( + (data.element != null && data.element.selected) || + (data.element == null && data.selected) + ) { + return; + } + + this.trigger('select', { + data: data + }); + }; + + return SelectOnClose; +}); + +S2.define('select2/dropdown/closeOnSelect',[ + +], function () { + function CloseOnSelect () { } + + CloseOnSelect.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('select', function (evt) { + self._selectTriggered(evt); + }); + + container.on('unselect', function (evt) { + self._selectTriggered(evt); + }); + }; + + CloseOnSelect.prototype._selectTriggered = function (_, evt) { + var originalEvent = evt.originalEvent; + + // Don't close if the control key is being held + if (originalEvent && originalEvent.ctrlKey) { + return; + } + + this.trigger('close', { + originalEvent: originalEvent, + originalSelect2Event: evt + }); + }; + + return CloseOnSelect; +}); + +S2.define('select2/i18n/en',[],function () { + // English + return { + errorLoading: function () { + return 'The results could not be loaded.'; + }, + inputTooLong: function (args) { + var overChars = args.input.length - args.maximum; + + var message = 'Please delete ' + overChars + ' character'; + + if (overChars != 1) { + message += 's'; + } + + return message; + }, + inputTooShort: function (args) { + var remainingChars = args.minimum - args.input.length; + + var message = 'Please enter ' + remainingChars + ' or more characters'; + + return message; + }, + loadingMore: function () { + return 'Loading more results…'; + }, + maximumSelected: function (args) { + var message = 'You can only select ' + args.maximum + ' item'; + + if (args.maximum != 1) { + message += 's'; + } + + return message; + }, + noResults: function () { + return 'No results found'; + }, + searching: function () { + return 'Searching…'; + } + }; +}); + +S2.define('select2/defaults',[ + 'jquery', + 'require', + + './results', + + './selection/single', + './selection/multiple', + './selection/placeholder', + './selection/allowClear', + './selection/search', + './selection/eventRelay', + + './utils', + './translation', + './diacritics', + + './data/select', + './data/array', + './data/ajax', + './data/tags', + './data/tokenizer', + './data/minimumInputLength', + './data/maximumInputLength', + './data/maximumSelectionLength', + + './dropdown', + './dropdown/search', + './dropdown/hidePlaceholder', + './dropdown/infiniteScroll', + './dropdown/attachBody', + './dropdown/minimumResultsForSearch', + './dropdown/selectOnClose', + './dropdown/closeOnSelect', + + './i18n/en' +], function ($, require, + + ResultsList, + + SingleSelection, MultipleSelection, Placeholder, AllowClear, + SelectionSearch, EventRelay, + + Utils, Translation, DIACRITICS, + + SelectData, ArrayData, AjaxData, Tags, Tokenizer, + MinimumInputLength, MaximumInputLength, MaximumSelectionLength, + + Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, + AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, + + EnglishTranslation) { + function Defaults () { + this.reset(); + } + + Defaults.prototype.apply = function (options) { + options = $.extend(true, {}, this.defaults, options); + + if (options.dataAdapter == null) { + if (options.ajax != null) { + options.dataAdapter = AjaxData; + } else if (options.data != null) { + options.dataAdapter = ArrayData; + } else { + options.dataAdapter = SelectData; + } + + if (options.minimumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MinimumInputLength + ); + } + + if (options.maximumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumInputLength + ); + } + + if (options.maximumSelectionLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumSelectionLength + ); + } + + if (options.tags) { + options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags); + } + + if (options.tokenSeparators != null || options.tokenizer != null) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Tokenizer + ); + } + + if (options.query != null) { + var Query = require(options.amdBase + 'compat/query'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Query + ); + } + + if (options.initSelection != null) { + var InitSelection = require(options.amdBase + 'compat/initSelection'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + InitSelection + ); + } + } + + if (options.resultsAdapter == null) { + options.resultsAdapter = ResultsList; + + if (options.ajax != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + InfiniteScroll + ); + } + + if (options.placeholder != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + HidePlaceholder + ); + } + + if (options.selectOnClose) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + SelectOnClose + ); + } + } + + if (options.dropdownAdapter == null) { + if (options.multiple) { + options.dropdownAdapter = Dropdown; + } else { + var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch); + + options.dropdownAdapter = SearchableDropdown; + } + + if (options.minimumResultsForSearch !== 0) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + MinimumResultsForSearch + ); + } + + if (options.closeOnSelect) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + CloseOnSelect + ); + } + + if ( + options.dropdownCssClass != null || + options.dropdownCss != null || + options.adaptDropdownCssClass != null + ) { + var DropdownCSS = require(options.amdBase + 'compat/dropdownCss'); + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + DropdownCSS + ); + } + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + AttachBody + ); + } + + if (options.selectionAdapter == null) { + if (options.multiple) { + options.selectionAdapter = MultipleSelection; + } else { + options.selectionAdapter = SingleSelection; + } + + // Add the placeholder mixin if a placeholder was specified + if (options.placeholder != null) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + Placeholder + ); + } + + if (options.allowClear) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + AllowClear + ); + } + + if (options.multiple) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + SelectionSearch + ); + } + + if ( + options.containerCssClass != null || + options.containerCss != null || + options.adaptContainerCssClass != null + ) { + var ContainerCSS = require(options.amdBase + 'compat/containerCss'); + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + ContainerCSS + ); + } + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + EventRelay + ); + } + + if (typeof options.language === 'string') { + // Check if the language is specified with a region + if (options.language.indexOf('-') > 0) { + // Extract the region information if it is included + var languageParts = options.language.split('-'); + var baseLanguage = languageParts[0]; + + options.language = [options.language, baseLanguage]; + } else { + options.language = [options.language]; + } + } + + if ($.isArray(options.language)) { + var languages = new Translation(); + options.language.push('en'); + + var languageNames = options.language; + + for (var l = 0; l < languageNames.length; l++) { + var name = languageNames[l]; + var language = {}; + + try { + // Try to load it with the original name + language = Translation.loadPath(name); + } catch (e) { + try { + // If we couldn't load it, check if it wasn't the full path + name = this.defaults.amdLanguageBase + name; + language = Translation.loadPath(name); + } catch (ex) { + // The translation could not be loaded at all. Sometimes this is + // because of a configuration problem, other times this can be + // because of how Select2 helps load all possible translation files. + if (options.debug && window.console && console.warn) { + console.warn( + 'Select2: The language file for "' + name + '" could not be ' + + 'automatically loaded. A fallback will be used instead.' + ); + } + + continue; + } + } + + languages.extend(language); + } + + options.translations = languages; + } else { + var baseTranslation = Translation.loadPath( + this.defaults.amdLanguageBase + 'en' + ); + var customTranslation = new Translation(options.language); + + customTranslation.extend(baseTranslation); + + options.translations = customTranslation; + } + + return options; + }; + + Defaults.prototype.reset = function () { + function stripDiacritics (text) { + // Used 'uni range + named function' from http://jsperf.com/diacritics/18 + function match(a) { + return DIACRITICS[a] || a; + } + + return text.replace(/[^\u0000-\u007E]/g, match); + } + + function matcher (params, data) { + // Always return the object if there is nothing to compare + if ($.trim(params.term) === '') { + return data; + } + + // Do a recursive check for options with children + if (data.children && data.children.length > 0) { + // Clone the data object if there are children + // This is required as we modify the object to remove any non-matches + var match = $.extend(true, {}, data); + + // Check each child of the option + for (var c = data.children.length - 1; c >= 0; c--) { + var child = data.children[c]; + + var matches = matcher(params, child); + + // If there wasn't a match, remove the object in the array + if (matches == null) { + match.children.splice(c, 1); + } + } + + // If any children matched, return the new object + if (match.children.length > 0) { + return match; + } + + // If there were no matching children, check just the plain object + return matcher(params, match); + } + + var original = stripDiacritics(data.text).toUpperCase(); + var term = stripDiacritics(params.term).toUpperCase(); + + // Check if the text contains the term + if (original.indexOf(term) > -1) { + return data; + } + + // If it doesn't contain the term, don't return anything + return null; + } + + this.defaults = { + amdBase: './', + amdLanguageBase: './i18n/', + closeOnSelect: true, + debug: false, + dropdownAutoWidth: false, + escapeMarkup: Utils.escapeMarkup, + language: EnglishTranslation, + matcher: matcher, + minimumInputLength: 0, + maximumInputLength: 0, + maximumSelectionLength: 0, + minimumResultsForSearch: 0, + selectOnClose: false, + sorter: function (data) { + return data; + }, + templateResult: function (result) { + return result.text; + }, + templateSelection: function (selection) { + return selection.text; + }, + theme: 'default', + width: 'resolve' + }; + }; + + Defaults.prototype.set = function (key, value) { + var camelKey = $.camelCase(key); + + var data = {}; + data[camelKey] = value; + + var convertedData = Utils._convertData(data); + + $.extend(this.defaults, convertedData); + }; + + var defaults = new Defaults(); + + return defaults; +}); + +S2.define('select2/options',[ + 'require', + 'jquery', + './defaults', + './utils' +], function (require, $, Defaults, Utils) { + function Options (options, $element) { + this.options = options; + + if ($element != null) { + this.fromElement($element); + } + + this.options = Defaults.apply(this.options); + + if ($element && $element.is('input')) { + var InputCompat = require(this.get('amdBase') + 'compat/inputData'); + + this.options.dataAdapter = Utils.Decorate( + this.options.dataAdapter, + InputCompat + ); + } + } + + Options.prototype.fromElement = function ($e) { + var excludedData = ['select2']; + + if (this.options.multiple == null) { + this.options.multiple = $e.prop('multiple'); + } + + if (this.options.disabled == null) { + this.options.disabled = $e.prop('disabled'); + } + + if (this.options.language == null) { + if ($e.prop('lang')) { + this.options.language = $e.prop('lang').toLowerCase(); + } else if ($e.closest('[lang]').prop('lang')) { + this.options.language = $e.closest('[lang]').prop('lang'); + } + } + + if (this.options.dir == null) { + if ($e.prop('dir')) { + this.options.dir = $e.prop('dir'); + } else if ($e.closest('[dir]').prop('dir')) { + this.options.dir = $e.closest('[dir]').prop('dir'); + } else { + this.options.dir = 'ltr'; + } + } + + $e.prop('disabled', this.options.disabled); + $e.prop('multiple', this.options.multiple); + + if ($e.data('select2Tags')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-select2-tags` attribute has been changed to ' + + 'use the `data-data` and `data-tags="true"` attributes and will be ' + + 'removed in future versions of Select2.' + ); + } + + $e.data('data', $e.data('select2Tags')); + $e.data('tags', true); + } + + if ($e.data('ajaxUrl')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-ajax-url` attribute has been changed to ' + + '`data-ajax--url` and support for the old attribute will be removed' + + ' in future versions of Select2.' + ); + } + + $e.attr('ajax--url', $e.data('ajaxUrl')); + $e.data('ajax--url', $e.data('ajaxUrl')); + } + + var dataset = {}; + + // Prefer the element's `dataset` attribute if it exists + // jQuery 1.x does not correctly handle data attributes with multiple dashes + if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) { + dataset = $.extend(true, {}, $e[0].dataset, $e.data()); + } else { + dataset = $e.data(); + } + + var data = $.extend(true, {}, dataset); + + data = Utils._convertData(data); + + for (var key in data) { + if ($.inArray(key, excludedData) > -1) { + continue; + } + + if ($.isPlainObject(this.options[key])) { + $.extend(this.options[key], data[key]); + } else { + this.options[key] = data[key]; + } + } + + return this; + }; + + Options.prototype.get = function (key) { + return this.options[key]; + }; + + Options.prototype.set = function (key, val) { + this.options[key] = val; + }; + + return Options; +}); + +S2.define('select2/core',[ + 'jquery', + './options', + './utils', + './keys' +], function ($, Options, Utils, KEYS) { + var Select2 = function ($element, options) { + if ($element.data('select2') != null) { + $element.data('select2').destroy(); + } + + this.$element = $element; + + this.id = this._generateId($element); + + options = options || {}; + + this.options = new Options(options, $element); + + Select2.__super__.constructor.call(this); + + // Set up the tabindex + + var tabindex = $element.attr('tabindex') || 0; + $element.data('old-tabindex', tabindex); + $element.attr('tabindex', '-1'); + + // Set up containers and adapters + + var DataAdapter = this.options.get('dataAdapter'); + this.dataAdapter = new DataAdapter($element, this.options); + + var $container = this.render(); + + this._placeContainer($container); + + var SelectionAdapter = this.options.get('selectionAdapter'); + this.selection = new SelectionAdapter($element, this.options); + this.$selection = this.selection.render(); + + this.selection.position(this.$selection, $container); + + var DropdownAdapter = this.options.get('dropdownAdapter'); + this.dropdown = new DropdownAdapter($element, this.options); + this.$dropdown = this.dropdown.render(); + + this.dropdown.position(this.$dropdown, $container); + + var ResultsAdapter = this.options.get('resultsAdapter'); + this.results = new ResultsAdapter($element, this.options, this.dataAdapter); + this.$results = this.results.render(); + + this.results.position(this.$results, this.$dropdown); + + // Bind events + + var self = this; + + // Bind the container to all of the adapters + this._bindAdapters(); + + // Register any DOM event handlers + this._registerDomEvents(); + + // Register any internal event handlers + this._registerDataEvents(); + this._registerSelectionEvents(); + this._registerDropdownEvents(); + this._registerResultsEvents(); + this._registerEvents(); + + // Set the initial state + this.dataAdapter.current(function (initialData) { + self.trigger('selection:update', { + data: initialData + }); + }); + + // Hide the original select + $element.addClass('select2-hidden-accessible'); + $element.attr('aria-hidden', 'true'); + + // Synchronize any monitored attributes + this._syncAttributes(); + + $element.data('select2', this); + }; + + Utils.Extend(Select2, Utils.Observable); + + Select2.prototype._generateId = function ($element) { + var id = ''; + + if ($element.attr('id') != null) { + id = $element.attr('id'); + } else if ($element.attr('name') != null) { + id = $element.attr('name') + '-' + Utils.generateChars(2); + } else { + id = Utils.generateChars(4); + } + + id = id.replace(/(:|\.|\[|\]|,)/g, ''); + id = 'select2-' + id; + + return id; + }; + + Select2.prototype._placeContainer = function ($container) { + $container.insertAfter(this.$element); + + var width = this._resolveWidth(this.$element, this.options.get('width')); + + if (width != null) { + $container.css('width', width); + } + }; + + Select2.prototype._resolveWidth = function ($element, method) { + var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i; + + if (method == 'resolve') { + var styleWidth = this._resolveWidth($element, 'style'); + + if (styleWidth != null) { + return styleWidth; + } + + return this._resolveWidth($element, 'element'); + } + + if (method == 'element') { + var elementWidth = $element.outerWidth(false); + + if (elementWidth <= 0) { + return 'auto'; + } + + return elementWidth + 'px'; + } + + if (method == 'style') { + var style = $element.attr('style'); + + if (typeof(style) !== 'string') { + return null; + } + + var attrs = style.split(';'); + + for (var i = 0, l = attrs.length; i < l; i = i + 1) { + var attr = attrs[i].replace(/\s/g, ''); + var matches = attr.match(WIDTH); + + if (matches !== null && matches.length >= 1) { + return matches[1]; + } + } + + return null; + } + + return method; + }; + + Select2.prototype._bindAdapters = function () { + this.dataAdapter.bind(this, this.$container); + this.selection.bind(this, this.$container); + + this.dropdown.bind(this, this.$container); + this.results.bind(this, this.$container); + }; + + Select2.prototype._registerDomEvents = function () { + var self = this; + + this.$element.on('change.select2', function () { + self.dataAdapter.current(function (data) { + self.trigger('selection:update', { + data: data + }); + }); + }); + + this.$element.on('focus.select2', function (evt) { + self.trigger('focus', evt); + }); + + this._syncA = Utils.bind(this._syncAttributes, this); + this._syncS = Utils.bind(this._syncSubtree, this); + + if (this.$element[0].attachEvent) { + this.$element[0].attachEvent('onpropertychange', this._syncA); + } + + var observer = window.MutationObserver || + window.WebKitMutationObserver || + window.MozMutationObserver + ; + + if (observer != null) { + this._observer = new observer(function (mutations) { + $.each(mutations, self._syncA); + $.each(mutations, self._syncS); + }); + this._observer.observe(this.$element[0], { + attributes: true, + childList: true, + subtree: false + }); + } else if (this.$element[0].addEventListener) { + this.$element[0].addEventListener( + 'DOMAttrModified', + self._syncA, + false + ); + this.$element[0].addEventListener( + 'DOMNodeInserted', + self._syncS, + false + ); + this.$element[0].addEventListener( + 'DOMNodeRemoved', + self._syncS, + false + ); + } + }; + + Select2.prototype._registerDataEvents = function () { + var self = this; + + this.dataAdapter.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerSelectionEvents = function () { + var self = this; + var nonRelayEvents = ['toggle', 'focus']; + + this.selection.on('toggle', function () { + self.toggleDropdown(); + }); + + this.selection.on('focus', function (params) { + self.focus(params); + }); + + this.selection.on('*', function (name, params) { + if ($.inArray(name, nonRelayEvents) !== -1) { + return; + } + + self.trigger(name, params); + }); + }; + + Select2.prototype._registerDropdownEvents = function () { + var self = this; + + this.dropdown.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerResultsEvents = function () { + var self = this; + + this.results.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerEvents = function () { + var self = this; + + this.on('open', function () { + self.$container.addClass('select2-container--open'); + }); + + this.on('close', function () { + self.$container.removeClass('select2-container--open'); + }); + + this.on('enable', function () { + self.$container.removeClass('select2-container--disabled'); + }); + + this.on('disable', function () { + self.$container.addClass('select2-container--disabled'); + }); + + this.on('blur', function () { + self.$container.removeClass('select2-container--focus'); + }); + + this.on('query', function (params) { + if (!self.isOpen()) { + self.trigger('open', {}); + } + + this.dataAdapter.query(params, function (data) { + self.trigger('results:all', { + data: data, + query: params + }); + }); + }); + + this.on('query:append', function (params) { + this.dataAdapter.query(params, function (data) { + self.trigger('results:append', { + data: data, + query: params + }); + }); + }); + + this.on('keypress', function (evt) { + var key = evt.which; + + if (self.isOpen()) { + if (key === KEYS.ESC || key === KEYS.TAB || + (key === KEYS.UP && evt.altKey)) { + self.close(); + + evt.preventDefault(); + } else if (key === KEYS.ENTER) { + self.trigger('results:select', {}); + + evt.preventDefault(); + } else if ((key === KEYS.SPACE && evt.ctrlKey)) { + self.trigger('results:toggle', {}); + + evt.preventDefault(); + } else if (key === KEYS.UP) { + self.trigger('results:previous', {}); + + evt.preventDefault(); + } else if (key === KEYS.DOWN) { + self.trigger('results:next', {}); + + evt.preventDefault(); + } + } else { + if (key === KEYS.ENTER || key === KEYS.SPACE || + (key === KEYS.DOWN && evt.altKey)) { + self.open(); + + evt.preventDefault(); + } + } + }); + }; + + Select2.prototype._syncAttributes = function () { + this.options.set('disabled', this.$element.prop('disabled')); + + if (this.options.get('disabled')) { + if (this.isOpen()) { + this.close(); + } + + this.trigger('disable', {}); + } else { + this.trigger('enable', {}); + } + }; + + Select2.prototype._syncSubtree = function (evt, mutations) { + var changed = false; + var self = this; + + // Ignore any mutation events raised for elements that aren't options or + // optgroups. This handles the case when the select element is destroyed + if ( + evt && evt.target && ( + evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP' + ) + ) { + return; + } + + if (!mutations) { + // If mutation events aren't supported, then we can only assume that the + // change affected the selections + changed = true; + } else if (mutations.addedNodes && mutations.addedNodes.length > 0) { + for (var n = 0; n < mutations.addedNodes.length; n++) { + var node = mutations.addedNodes[n]; + + if (node.selected) { + changed = true; + } + } + } else if (mutations.removedNodes && mutations.removedNodes.length > 0) { + changed = true; + } + + // Only re-pull the data if we think there is a change + if (changed) { + this.dataAdapter.current(function (currentData) { + self.trigger('selection:update', { + data: currentData + }); + }); + } + }; + + /** + * Override the trigger method to automatically trigger pre-events when + * there are events that can be prevented. + */ + Select2.prototype.trigger = function (name, args) { + var actualTrigger = Select2.__super__.trigger; + var preTriggerMap = { + 'open': 'opening', + 'close': 'closing', + 'select': 'selecting', + 'unselect': 'unselecting' + }; + + if (args === undefined) { + args = {}; + } + + if (name in preTriggerMap) { + var preTriggerName = preTriggerMap[name]; + var preTriggerArgs = { + prevented: false, + name: name, + args: args + }; + + actualTrigger.call(this, preTriggerName, preTriggerArgs); + + if (preTriggerArgs.prevented) { + args.prevented = true; + + return; + } + } + + actualTrigger.call(this, name, args); + }; + + Select2.prototype.toggleDropdown = function () { + if (this.options.get('disabled')) { + return; + } + + if (this.isOpen()) { + this.close(); + } else { + this.open(); + } + }; + + Select2.prototype.open = function () { + if (this.isOpen()) { + return; + } + + this.trigger('query', {}); + }; + + Select2.prototype.close = function () { + if (!this.isOpen()) { + return; + } + + this.trigger('close', {}); + }; + + Select2.prototype.isOpen = function () { + return this.$container.hasClass('select2-container--open'); + }; + + Select2.prototype.hasFocus = function () { + return this.$container.hasClass('select2-container--focus'); + }; + + Select2.prototype.focus = function (data) { + // No need to re-trigger focus events if we are already focused + if (this.hasFocus()) { + return; + } + + this.$container.addClass('select2-container--focus'); + this.trigger('focus', {}); + }; + + Select2.prototype.enable = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("enable")` method has been deprecated and will' + + ' be removed in later Select2 versions. Use $element.prop("disabled")' + + ' instead.' + ); + } + + if (args == null || args.length === 0) { + args = [true]; + } + + var disabled = !args[0]; + + this.$element.prop('disabled', disabled); + }; + + Select2.prototype.data = function () { + if (this.options.get('debug') && + arguments.length > 0 && window.console && console.warn) { + console.warn( + 'Select2: Data can no longer be set using `select2("data")`. You ' + + 'should consider setting the value instead using `$element.val()`.' + ); + } + + var data = []; + + this.dataAdapter.current(function (currentData) { + data = currentData; + }); + + return data; + }; + + Select2.prototype.val = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("val")` method has been deprecated and will be' + + ' removed in later Select2 versions. Use $element.val() instead.' + ); + } + + if (args == null || args.length === 0) { + return this.$element.val(); + } + + var newVal = args[0]; + + if ($.isArray(newVal)) { + newVal = $.map(newVal, function (obj) { + return obj.toString(); + }); + } + + this.$element.val(newVal).trigger('change'); + }; + + Select2.prototype.destroy = function () { + this.$container.remove(); + + if (this.$element[0].detachEvent) { + this.$element[0].detachEvent('onpropertychange', this._syncA); + } + + if (this._observer != null) { + this._observer.disconnect(); + this._observer = null; + } else if (this.$element[0].removeEventListener) { + this.$element[0] + .removeEventListener('DOMAttrModified', this._syncA, false); + this.$element[0] + .removeEventListener('DOMNodeInserted', this._syncS, false); + this.$element[0] + .removeEventListener('DOMNodeRemoved', this._syncS, false); + } + + this._syncA = null; + this._syncS = null; + + this.$element.off('.select2'); + this.$element.attr('tabindex', this.$element.data('old-tabindex')); + + this.$element.removeClass('select2-hidden-accessible'); + this.$element.attr('aria-hidden', 'false'); + this.$element.removeData('select2'); + + this.dataAdapter.destroy(); + this.selection.destroy(); + this.dropdown.destroy(); + this.results.destroy(); + + this.dataAdapter = null; + this.selection = null; + this.dropdown = null; + this.results = null; + }; + + Select2.prototype.render = function () { + var $container = $( + '' + + '' + + '' + + '' + ); + + $container.attr('dir', this.options.get('dir')); + + this.$container = $container; + + this.$container.addClass('select2-container--' + this.options.get('theme')); + + $container.data('element', this.$element); + + return $container; + }; + + return Select2; +}); + +S2.define('jquery-mousewheel',[ + 'jquery' +], function ($) { + // Used to shim jQuery.mousewheel for non-full builds. + return $; +}); + +S2.define('jquery.select2',[ + 'jquery', + 'jquery-mousewheel', + + './select2/core', + './select2/defaults' +], function ($, _, Select2, Defaults) { + if ($.fn.select2 == null) { + // All methods that should return the element + var thisMethods = ['open', 'close', 'destroy']; + + $.fn.select2 = function (options) { + options = options || {}; + + if (typeof options === 'object') { + this.each(function () { + var instanceOptions = $.extend(true, {}, options); + + var instance = new Select2($(this), instanceOptions); + }); + + return this; + } else if (typeof options === 'string') { + var ret; + var args = Array.prototype.slice.call(arguments, 1); + + this.each(function () { + var instance = $(this).data('select2'); + + if (instance == null && window.console && console.error) { + console.error( + 'The select2(\'' + options + '\') method was called on an ' + + 'element that is not using Select2.' + ); + } + + ret = instance[options].apply(instance, args); + }); + + // Check if we should be returning `this` + if ($.inArray(options, thisMethods) > -1) { + return this; + } + + return ret; + } else { + throw new Error('Invalid arguments for Select2: ' + options); + } + }; + } + + if ($.fn.select2.defaults == null) { + $.fn.select2.defaults = Defaults; + } + + return Select2; +}); + + // Return the AMD loader configuration so it can be used outside of this file + return { + define: S2.define, + require: S2.require + }; +}()); + + // Autoload the jQuery bindings + // We know that all of the modules exist above this, so we're safe + var select2 = S2.require('jquery.select2'); + + // Hold the AMD module references on the jQuery function that was just loaded + // This allows Select2 to use the internal loader outside of this file, such + // as in the language files. + jQuery.fn.select2.amd = S2; + + // Return the Select2 instance for anyone who is importing it. + return select2; +})); diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.css b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.css new file mode 100644 index 00000000..faba18d1 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.css @@ -0,0 +1,103 @@ +/* Select2 */ +span.select2.select2-container.select2-container--default { + margin-top: 0; +} + +li.select2-results__option.select2-results__message { + background: #ecebeb; + margin-bottom: 0; +} +tr td .select2-container { + display: inline-block; + position: relative; + vertical-align: middle; + width: 100% !important; +} + +.select2-container--default.select2-container--focus .select2-selection--multiple, +.select2-container--default .select2-selection--multiple { + border: 1px solid #ddd; + margin-top: 10px; +} + +.select2-container .select2-search--inline, +.select2-container--default .select2-search--inline .select2-search__field { + width: 100% !important; +} + +/* Target Rule field */ +.bsf-target-rule-condition, +.bsf-user-role-condition { + position: relative; + padding: 0 30px 0 0; + margin-top: 10px; +} + +.target_rule-specific-page-wrap { + position: relative; + padding: 0 30px 0 0; +} + +.user_role-add-rule-wrap, +.target_rule-add-rule-wrap, +.target_rule-add-exclusion-rule, +.user_role-add-rule-wrap { + margin-top: 15px; +} + +.bsf-target-rule-display-on, +.bsf-target-rule-exclude-on { + margin-bottom: 10px; +} + +.target_rule-condition-delete, +.user_role-condition-delete { + position: absolute; + color: #999; + right: 0px; + top: 0px; + font-size: 18px; + line-height: 18px; + width: 18px; + height: 18px; + display: inline-block; + cursor: pointer; + top: 50%; + transform: translateY(-50%); +} + +.target_rule-condition-delete:hover { + color: #d54e21; +} + +.target_rule-add-rule-wrap { + display: inline-block; +} + +.target_rule-add-exclusion-rule { + display: inline-block; + margin-left: 10px; +} + +.configure-content [data-element="exclude_from"], +.configure-content [data-element="exclusive_on"] { + padding-bottom: 0; +} + +.configure-content .bsf-allow-specific-posts input, +.configure-content .bsf-post-types { + margin-right: 3px; +} + +.hide-on-devices input[type=checkbox] { + margin-right: 5px; +} + +.search-panel.search-close-icon { + pointer-events: auto; + cursor: pointer; +} + +.bsf-hidden { + display: none !important; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.js b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.js new file mode 100644 index 00000000..19f25748 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.js @@ -0,0 +1,279 @@ +/* eslint-env jquery */ +(function ($) { + const initTargetRuleSelect2 = function (selector) { + $(selector).select2({ + placeholder: 'Search pages / post / archives', + + ajax: { + url: ajaxurl, + dataType: 'json', + method: 'post', + delay: 250, + data(params) { + return { + q: params.term, // search term + page: params.page, + action: 'bsf_get_posts_by_query', + nonce: Targetrule.security, + }; + }, + processResults(data) { + // console.log(data); + // console.log("inside"); + // parse the results into the format expected by Select2. + // since we are using custom formatting functions we do not need to + // alter the remote JSON data + + return { + results: data, + }; + }, + cache: true, + }, + minimumInputLength: 2, + }); + }; + + const updateTargetRuleInput = function (wrapper) { + const ruleInput = wrapper.find('.bsf-target_rule-input'); + const newValue = []; + + wrapper.find('.bsf-target-rule-condition').each(function () { + const $this = $(this); + let tempObj = {}; + const ruleCondition = $this.find('select.target_rule-condition'); + const specificPage = $this.find('select.target_rule-specific-page'); + + const ruleConditionVal = ruleCondition.val(); + const specificPageVal = specificPage.val(); + + if ('' !== ruleConditionVal) { + tempObj = { + type: ruleConditionVal, + specific: specificPageVal, + }; + + newValue.push(tempObj); + } + }); + + const rulesString = JSON.stringify(newValue); + ruleInput.val(rulesString); + }; + + const updateCloseButton = function (wrapper) { + const type = wrapper + .closest('.bsf-target-rule-wrapper') + .attr('data-type'); + const rules = wrapper.find('.bsf-target-rule-condition'); + let showClose = false; + + if ('display' === type) { + if (rules.length > 1) { + showClose = true; + } + } else { + showClose = true; + } + + rules.each(function () { + if (showClose) { + jQuery(this) + .find('.target_rule-condition-delete') + .removeClass('bsf-hidden'); + } else { + jQuery(this) + .find('.target_rule-condition-delete') + .addClass('bsf-hidden'); + } + }); + }; + + const updateExclusionButton = function (forceShow, forceHide) { + const displayOn = $('.bsf-target-rule-display-on-wrap'); + const excludeOn = $('.bsf-target-rule-exclude-on-wrap'); + + const excludeFieldWrap = excludeOn.closest('tr'); + const addExcludeBlock = displayOn.find( + '.target_rule-add-exclusion-rule' + ); + const excludeConditions = excludeOn.find('.bsf-target-rule-condition'); + + if (true === forceHide) { + excludeFieldWrap.addClass('bsf-hidden'); + addExcludeBlock.removeClass('bsf-hidden'); + } else if (true === forceShow) { + excludeFieldWrap.removeClass('bsf-hidden'); + addExcludeBlock.addClass('bsf-hidden'); + } else if ( + 1 === excludeConditions.length && + '' === + $(excludeConditions[0]) + .find('select.target_rule-condition') + .val() + ) { + excludeFieldWrap.addClass('bsf-hidden'); + addExcludeBlock.removeClass('bsf-hidden'); + } else { + excludeFieldWrap.removeClass('bsf-hidden'); + addExcludeBlock.addClass('bsf-hidden'); + } + }; + + $(document).ready(function () { + jQuery('.bsf-target-rule-condition').each(function () { + const $this = $(this), + condition = $this.find('select.target_rule-condition'), + conditionVal = condition.val(), + specificPage = $this.next('.target_rule-specific-page-wrap'); + + if ('specifics' === conditionVal) { + specificPage.slideDown(300); + } + }); + + jQuery( + '.bsf-target-rule-selector-wrapper select.target-rule-select2' + ).each(function (index, el) { + initTargetRuleSelect2(el); + }); + + jQuery('.bsf-target-rule-selector-wrapper').each(function () { + updateCloseButton(jQuery(this)); + }); + + jQuery(document).on( + 'change', + '.bsf-target-rule-condition select.target_rule-condition', + function () { + const $this = jQuery(this), + thisVal = $this.val(), + fieldWrap = $this.closest('.bsf-target-rule-wrapper'); + + if ('specifics' === thisVal) { + $this + .closest('.bsf-target-rule-condition') + .next('.target_rule-specific-page-wrap') + .slideDown(300); + } else { + $this + .closest('.bsf-target-rule-condition') + .next('.target_rule-specific-page-wrap') + .slideUp(300); + } + + updateTargetRuleInput(fieldWrap); + } + ); + + jQuery('.bsf-target-rule-selector-wrapper').on( + 'change', + '.target-rule-select2', + function () { + const $this = jQuery(this), + fieldWrap = $this.closest('.bsf-target-rule-wrapper'); + + updateTargetRuleInput(fieldWrap); + } + ); + + jQuery('.bsf-target-rule-selector-wrapper').on( + 'click', + '.target_rule-add-rule-wrap a', + function (e) { + e.preventDefault(); + e.stopPropagation(); + const $this = jQuery(this), + id = $this.attr('data-rule-id'), + newId = parseInt(id) + 1, + type = $this.attr('data-rule-type'), + ruleWrap = $this + .closest('.bsf-target-rule-selector-wrapper') + .find('.target_rule-builder-wrap'), + template = wp.template( + 'bsf-target-rule-' + type + '-condition' + ), + fieldWrap = $this.closest('.bsf-target-rule-wrapper'); + + ruleWrap.append(template({ id: newId, type })); + + initTargetRuleSelect2( + '.bsf-target-rule-' + type + '-on .target-rule-select2' + ); + + $this.attr('data-rule-id', newId); + + updateCloseButton(fieldWrap); + } + ); + + jQuery('.bsf-target-rule-selector-wrapper').on( + 'click', + '.target_rule-condition-delete', + function () { + const $this = jQuery(this), + ruleCondition = $this.closest('.bsf-target-rule-condition'), + fieldWrap = $this.closest('.bsf-target-rule-wrapper'); + let cnt = 0; + const dataType = fieldWrap.attr('data-type'); + if ( + 'exclude' === dataType && + fieldWrap.find('.bsf-target-rule-condition').length === 1 + ) { + fieldWrap.find('.target_rule-condition').val(''); + fieldWrap.find('.target_rule-specific-page').val(''); + fieldWrap.find('.target_rule-condition').trigger('change'); + updateExclusionButton(false, true); + } else { + $this + .parent('.bsf-target-rule-condition') + .next('.target_rule-specific-page-wrap') + .remove(); + ruleCondition.remove(); + } + + fieldWrap.find('.bsf-target-rule-condition').each(function (i) { + const condition = jQuery(this), + oldRuleId = condition.attr('data-rule'), + selectLocation = condition.find( + '.target_rule-condition' + ), + locationName = selectLocation.attr('name'); + + condition.attr('data-rule', i); + + selectLocation.attr( + 'name', + locationName.replace( + '[' + oldRuleId + ']', + '[' + i + ']' + ) + ); + + condition + .removeClass('bsf-target-rule-' + oldRuleId) + .addClass('bsf-target-rule-' + i); + + cnt = i; + }); + + fieldWrap + .find('.target_rule-add-rule-wrap a') + .attr('data-rule-id', cnt); + + updateCloseButton(fieldWrap); + updateTargetRuleInput(fieldWrap); + } + ); + + jQuery('.bsf-target-rule-selector-wrapper').on( + 'click', + '.target_rule-add-exclusion-rule a', + function (e) { + e.preventDefault(); + e.stopPropagation(); + updateExclusionButton(true); + } + ); + }); +})(jQuery); diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/user-role.js b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/user-role.js new file mode 100644 index 00000000..a6e33c4d --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/user-role.js @@ -0,0 +1,97 @@ +/* eslint-env jquery */ +( function ( $ ) { + const userRoleUpdateCloseButton = function ( wrapper ) { + const rules = wrapper.find( '.bsf-user-role-condition' ); + let showClose = false; + + if ( rules.length > 1 ) { + showClose = true; + } + + rules.each( function () { + if ( showClose ) { + jQuery( this ) + .find( '.user_role-condition-delete' ) + .removeClass( 'bsf-hidden' ); + } else { + jQuery( this ) + .find( '.user_role-condition-delete' ) + .addClass( 'bsf-hidden' ); + } + } ); + }; + + $( document ).ready( function () { + jQuery( '.bsf-user-role-selector-wrapper' ).each( function () { + userRoleUpdateCloseButton( jQuery( this ) ); + } ); + + jQuery( '.bsf-user-role-selector-wrapper' ).on( + 'click', + '.user_role-add-rule-wrap a', + function ( e ) { + e.preventDefault(); + e.stopPropagation(); + const $this = jQuery( this ), + id = $this.attr( 'data-rule-id' ), + newId = parseInt( id ) + 1, + ruleWrap = $this + .closest( '.bsf-user-role-selector-wrapper' ) + .find( '.user_role-builder-wrap' ), + template = wp.template( 'bsf-user-role-condition' ), + fieldWrap = $this.closest( '.bsf-user-role-wrapper' ); + + ruleWrap.append( template( { id: newId } ) ); + + $this.attr( 'data-rule-id', newId ); + + userRoleUpdateCloseButton( fieldWrap ); + } + ); + + jQuery( '.bsf-user-role-selector-wrapper' ).on( + 'click', + '.user_role-condition-delete', + function () { + const $this = jQuery( this ), + ruleCondition = $this.closest( '.bsf-user-role-condition' ), + fieldWrap = $this.closest( '.bsf-user-role-wrapper' ); + let cnt = 0; + ruleCondition.remove(); + + fieldWrap + .find( '.bsf-user-role-condition' ) + .each( function ( i ) { + const condition = jQuery( this ), + oldRuleId = condition.attr( 'data-rule' ), + selectLocation = condition.find( + '.user_role-condition' + ), + locationName = selectLocation.attr( 'name' ); + + condition.attr( 'data-rule', i ); + + selectLocation.attr( + 'name', + locationName.replace( + '[' + oldRuleId + ']', + '[' + i + ']' + ) + ); + + condition + .removeClass( 'bsf-user-role-' + oldRuleId ) + .addClass( 'bsf-user-role-' + i ); + + cnt = i; + } ); + + fieldWrap + .find( '.user_role-add-rule-wrap a' ) + .attr( 'data-rule-id', cnt ); + + userRoleUpdateCloseButton( fieldWrap ); + } + ); + } ); +} )( jQuery ); diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-article.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-article.php new file mode 100644 index 00000000..c58f2333 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-article.php @@ -0,0 +1,89 @@ + $value ) { + + $schema['workExample'][ $key ]['@type'] = 'Book'; + $schema['workExample'][ $key ]['isbn'] = ! empty( $value['serial-number'] ) ? wp_strip_all_tags( (string) $value['serial-number'] ) : null; + + $schema['workExample'][ $key ]['bookEdition'] = ! empty( $value['book-edition'] ) ? wp_strip_all_tags( (string) $value['book-edition'] ) : null; + + $schema['workExample'][ $key ]['bookFormat'] = ! empty( $value['book-format'] ) ? 'https://schema.org/' . wp_strip_all_tags( (string) $value['book-format'] ) : null; + + $schema['workExample'][ $key ]['potentialAction']['@type'] = 'ReadAction'; + $schema['workExample'][ $key ]['potentialAction']['target']['@type'] = 'EntryPoint'; + $action_platform = explode( ',', $value['action-platform'] ); + $action_platform = array_map( 'trim', $action_platform ); + $schema['workExample'][ $key ]['potentialAction']['target']['urlTemplate'] = $value['url-template']; + $schema['workExample'][ $key ]['potentialAction']['target']['actionPlatform'] = $action_platform; + + $schema['workExample'][ $key ]['potentialAction']['expectsAcceptanceOf']['@type'] = 'Offer'; + $schema['workExample'][ $key ]['potentialAction']['expectsAcceptanceOf']['price'] = '0'; + $schema['workExample'][ $key ]['potentialAction']['expectsAcceptanceOf']['price'] = ! empty( $value['price'] ) ? wp_strip_all_tags( (string) $value['price'] ) : null; + + $schema['workExample'][ $key ]['potentialAction']['expectsAcceptanceOf']['priceCurrency'] = ! empty( $value['currency'] ) ? wp_strip_all_tags( (string) $value['currency'] ) : null; + $schema['workExample'][ $key ]['potentialAction']['expectsAcceptanceOf']['availability'] = ! empty( $value['avail'] ) ? wp_strip_all_tags( (string) $value['avail'] ) : null; + + if ( isset( $value['country'] ) && ! empty( $value['country'] ) ) { + $expects_acceptance = explode( ',', $value['country'] ); + $expects_acceptance = array_map( 'trim', $expects_acceptance ); + + $expects_acceptances = array(); + foreach ( $expects_acceptance as $index => $country_name ) { + $expects_acceptances[ $index ]['@type'] = 'Country'; + $expects_acceptances[ $index ]['name'] = $country_name; + } + $schema['workExample'][ $key ]['potentialAction']['expectsAcceptanceOf']['eligibleRegion'] = $expects_acceptances; + } + } + } + + return apply_filters( 'wp_schema_pro_schema_book', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-course.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-course.php new file mode 100644 index 00000000..2236e474 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-course.php @@ -0,0 +1,168 @@ + $offer_value) { + if (!empty($offer_value['category']) || !empty($offer_value['priceCurrency']) || !empty($offer_value['price'])) { + $schema['offers'][$offer_key]['@type'] = 'Offer'; + $schema['offers'][$offer_key]['category'] = !empty($offer_value['offer-category']) ? wp_strip_all_tags((string)$offer_value['offer-category']) : null; + $schema['offers'][$offer_key]['priceCurrency'] = !empty($offer_value['priceCurrency']) ? wp_strip_all_tags((string)$offer_value['priceCurrency']) : null; + $schema['offers'][$offer_key]['price'] = !empty($offer_value['price']) ? wp_strip_all_tags((string)$offer_value['price']) : null; + } + } + } + + if ( isset( $data['course-instance'] ) && ! empty( $data['course-instance'] ) ) { + + foreach ( $data['course-instance'] as $key => $value ) { + + if ( isset( $value['name'] ) && ! empty( $value['name'] ) || + isset( $value['description'] ) && ! empty( $value['description'] ) || + isset( $value['start-date'] ) && ! empty( $value['start-date'] ) || + isset( $value['location-address'] ) && ! empty( $value['location-address'] ) ) { + + $schema['hasCourseInstance'][ $key ]['@type'] = 'CourseInstance'; + $schema['hasCourseInstance'][ $key ]['name'] = ! empty( $value['name'] ) ? wp_strip_all_tags( (string) $value['name'] ) : null; + + $schema['hasCourseInstance'][ $key ]['description'] = ! empty( $value['description'] ) ? wp_strip_all_tags( (string) $value['description'] ) : null; + + $schema['hasCourseInstance'][ $key ]['courseMode'] = ! empty( $value['course-mode'] ) ? wp_strip_all_tags( (string) $value['course-mode'] ) : null; + + if ( ! empty( $value['course-workload'] ) ) { + $schema['hasCourseInstance'][ $key ]['courseWorkload'] = ! empty( $value['course-workload'] ) ? wp_strip_all_tags( (string) $value['course-workload'] ) : null; + } elseif ( ! empty( $value['repeat-count'] ) && ! empty( $value['repeat-frequency'] ) ) { + $schema['hasCourseInstance'][ $key ]['courseSchedule']['@type'] = 'Schedule'; + $schema['hasCourseInstance'][ $key ]['courseSchedule']['repeatCount'] = ! empty( $value['repeat-count'] ) ? wp_strip_all_tags( (string) $value['repeat-count'] ) : null; + $schema['hasCourseInstance'][ $key ]['courseSchedule']['repeatFrequency'] = ! empty( $value['repeat-frequency'] ) ? wp_strip_all_tags( (string) $value['repeat-frequency'] ) : null; + if ( ! empty( $value['start-date'] ) ) { + if ( 'OfflineEventAttendanceMode' !== isset( $value['event-attendance-mode'] ) ) { + $start_date = gmdate( DATE_ISO8601, strtotime( $value['start-date'] ) ); + $schema['hasCourseInstance'][ $key ]['courseSchedule']['startDate'] = wp_strip_all_tags( (string) $start_date ); + } else { + $schema['hasCourseInstance'][ $key ]['courseSchedule']['startDate'] = wp_strip_all_tags( (string) $value['start-date'] ); + } + } + if ( ! empty( $value['end-date'] ) ) { + $schema['hasCourseInstance'][ $key ]['courseSchedule']['endDate'] = ! empty( $value['end-date'] ) ? wp_strip_all_tags( (string) $value['end-date'] ) : null; + } + } + + $schema['hasCourseInstance'][ $key ]['eventStatus'] = ! empty( $value['event-status'] ) ? wp_strip_all_tags( (string) $value['event-status'] ) : null; + + $schema['hasCourseInstance'][ $key ]['eventAttendanceMode'] = ! empty( $value['event-attendance-mode'] ) ? wp_strip_all_tags( (string) $value['event-attendance-mode'] ) : null; + + if ( ! empty( $value['start-date'] ) ) { + if ( 'OfflineEventAttendanceMode' !== isset( $value['event-attendance-mode'] ) ) { + $start_date = gmdate( DATE_ISO8601, strtotime( $value['start-date'] ) ); + $schema['hasCourseInstance'][ $key ]['startDate'] = wp_strip_all_tags( (string) $start_date ); + } else { + $schema['hasCourseInstance'][ $key ]['startDate'] = wp_strip_all_tags( (string) $value['start-date'] ); + } + } + + $schema['hasCourseInstance'][ $key ]['endDate'] = ! empty( $value['end-date'] ) ? wp_strip_all_tags( (string) $value['end-date'] ) : null; + + $schema['hasCourseInstance'][ $key ]['previousStartDate'] = ! empty( $value['previous-date'] ) ? wp_strip_all_tags( (string) $value['previous-date'] ) : null; + + if ( isset( $value['online-location'] ) && ! empty( $value['online-location'] ) && 'OfflineEventAttendanceMode' !== $value['event-attendance-mode'] || 'MixedEventAttendanceMode' === $value['event-attendance-mode'] ) { + $schema['hasCourseInstance'][ $key ]['location']['@type'] = 'VirtualLocation'; + $schema['hasCourseInstance'][ $key ]['location']['url'] = esc_url( $value['online-location'] ); + } + + if ( isset( $value['image'] ) && ! empty( $value['image'] ) ) { + $schema['hasCourseInstance'][ $key ]['image'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $value['image'] ); + } + + if ( ! empty( $value['location-name'] ) && 'OnlineEventAttendanceMode' !== $value['event-attendance-mode'] ) { + $schema['hasCourseInstance'][ $key ]['location']['@type'] = 'Place'; + $schema['hasCourseInstance'][ $key ]['location']['name'] = wp_strip_all_tags( (string) $value['location-name'] ); + } + + if ( ! empty( $value['location-address'] ) && 'OnlineEventAttendanceMode' !== $value['event-attendance-mode'] && is_string( $value['location-address'] ) ) { + $schema['hasCourseInstance'][ $key ]['location']['@type'] = 'Place'; + $schema['hasCourseInstance'][ $key ]['location']['address'] = wp_strip_all_tags( (string) $value['location-address'] ); + } + + $schema['hasCourseInstance'][ $key ]['organizer']['@type'] = 'Organization'; + $schema['hasCourseInstance'][ $key ]['organizer']['name'] = ! empty( $value['course-organizer-name'] ) ? wp_strip_all_tags( (string) $value['course-organizer-name'] ) : null; + $schema['hasCourseInstance'][ $key ]['organizer']['url'] = ! empty( $value['course-organizer-url'] ) ? wp_strip_all_tags( (string) $value['course-organizer-url'] ) : null; + + $schema['hasCourseInstance'][ $key ]['offers']['@type'] = 'Offer'; + $schema['hasCourseInstance'][ $key ]['offers']['price'] = '0'; + + $schema['hasCourseInstance'][ $key ]['offers']['price'] = ! empty( $value['price'] ) ? wp_strip_all_tags( (string) $value['price'] ) : null; + + $schema['hasCourseInstance'][ $key ]['offers']['priceCurrency'] = ! empty( $value['currency'] ) ? wp_strip_all_tags( (string) $value['currency'] ) : null; + + $schema['hasCourseInstance'][ $key ]['offers']['url'] = ! empty( $value['url'] ) ? wp_strip_all_tags( (string) $value['url'] ) : null; + + $schema['hasCourseInstance'][ $key ]['offers']['validFrom'] = ! empty( $value['valid-from'] ) ? wp_strip_all_tags( (string) $value['valid-from'] ) : null; + + $schema['hasCourseInstance'][ $key ]['offers']['availability'] = ! empty( $value['avail'] ) ? wp_strip_all_tags( (string) $value['avail'] ) : null; + + if ( ! empty( $value['performer'] ) ) { + $schema['hasCourseInstance'][ $key ]['performer']['@type'] = 'Person'; + $schema['hasCourseInstance'][ $key ]['performer']['name'] = wp_strip_all_tags( (string) $value['performer'] ); + } + } + } + } + + if ( ( isset( $data['orgnization-name'] ) && ! empty( $data['orgnization-name'] ) ) || + ( isset( $data['same-as'] ) && ! empty( $data['same-as'] ) ) ) { + + $schema['provider']['@type'] = 'Organization'; + + $schema['provider']['name'] = ! empty( $data['orgnization-name'] ) ? wp_strip_all_tags( (string) $data['orgnization-name'] ) : null; + if ( isset( $data['same-as'] ) && ! empty( $data['same-as'] ) ) { + $schema['provider']['sameAs'] = esc_url( $data['same-as'] ); + } + } + + if ( ( isset( $data['rating'] ) && ! empty( $data['rating'] ) ) || + ( isset( $data['review-count'] ) && ! empty( $data['review-count'] ) ) ) { + + $schema['aggregateRating']['@type'] = 'AggregateRating'; + + $schema['aggregateRating']['ratingValue'] = ! empty( $data['rating'] ) ? wp_strip_all_tags( (string) $data['rating'] ) : null; + $schema['aggregateRating']['reviewCount'] = ! empty( $data['review-count'] ) ? wp_strip_all_tags( $data['review-count'] ) : null; + } + + return apply_filters( 'wp_schema_pro_schema_course', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-custom-markup.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-custom-markup.php new file mode 100644 index 00000000..d74d065d --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-custom-markup.php @@ -0,0 +1,35 @@ + $value ) { + if ( isset( $value['question'] ) && ! empty( $value['question'] ) ) { + $schema['mainEntity'][ $key ]['@type'] = 'Question'; + $schema['mainEntity'][ $key ]['name'] = $value['question']; + } + if ( isset( $value['answer'] ) && ! empty( $value['answer'] ) ) { + $schema['mainEntity'][ $key ]['acceptedAnswer']['@type'] = 'Answer'; + $schema['mainEntity'][ $key ]['acceptedAnswer']['text'] = $value['answer']; + } + } + } + return apply_filters( 'wp_schema_pro_schema_faq', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-how-to.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-how-to.php new file mode 100644 index 00000000..20b7c8db --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-how-to.php @@ -0,0 +1,87 @@ + $value ) { + + if ( isset( $value['name'] ) && ! empty( $value['name'] ) ) { + + $schema['supply'][ $key ]['@type'] = 'HowToSupply'; + + $schema['supply'][ $key ]['name'] = ! empty( $value['name'] ) ? wp_strip_all_tags( (string) $value['name'] ) : null; + } + } + } + + if ( isset( $data['tool'] ) && ! empty( $data['tool'] ) ) { + + foreach ( $data['tool'] as $key => $value ) { + + if ( isset( $value['name'] ) && ! empty( $value['name'] ) ) { + + $schema['tool'][ $key ]['@type'] = 'HowToTool'; + + $schema['tool'][ $key ]['name'] = ! empty( $value['name'] ) ? wp_strip_all_tags( (string) $value['name'] ) : null; + } + } + } + + if ( isset( $data['steps'] ) && ! empty( $data['steps'] ) ) { + foreach ( $data['steps'] as $key => $value ) { + $schema['step'][ $key ]['@type'] = 'HowToStep'; + if ( isset( $value['name'] ) && ! empty( $value['name'] ) ) { + $schema['step'][ $key ]['name'] = $value['name']; + } + if ( isset( $value['url'] ) && ! empty( $value['url'] ) ) { + $schema['step'][ $key ]['url'] = $value['url']; + } + if ( isset( $value['description'] ) && ! empty( $value['description'] ) ) { + $schema['step'][ $key ]['itemListElement']['@type'] = 'HowToDirection'; + $schema['step'][ $key ]['itemListElement']['text'] = $value['description']; + } + $step_image = wp_get_attachment_image_src( $value['image'], 'full' ); + if ( isset( $value['image'] ) && ! empty( $value['image'] ) ) { + $schema['step'][ $key ]['image'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $step_image, 'ImageObject' ); + } + } + } + + return apply_filters( 'wp_schema_pro_schema_how_to', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-image-license.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-image-license.php new file mode 100644 index 00000000..dda03097 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-image-license.php @@ -0,0 +1,62 @@ + $value ) { + $schema[ $key ]['@context'] = 'https://schema.org'; + $schema[ $key ]['@type'] = 'ImageObject'; + if ( isset( $value['content-url'] ) && ! empty( $value['content-url'] ) ) { + $schema[ $key ]['contentUrl'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $value['content-url'], 'URL' ); + } + if ( isset( $value['license'] ) && ! empty( $value['license'] ) ) { + $schema[ $key ]['license'] = esc_url( $value['license'] ); + } + if ( isset( $value['acquire-license-Page'] ) && ! empty( $value['acquire-license-Page'] ) ) { + $schema[ $key ]['acquireLicensePage'] = esc_url( $value['acquire-license-Page'] ); + } + if ( isset( $value['credit-text'] ) && ! empty( $value['credit-text'] ) ) { + $schema[ $key ]['creditText'] = esc_url( $value['credit-text'] ); + } + if ( ! empty( $data['creator-type'] ) ) { + $schema['creator']['@type'] = wp_strip_all_tags( (string) $data['creator-type'] ); + } else { + $schema[ $key ]['creator']['@type'] = 'Person'; + } + if ( isset( $value['creator'] ) && ! empty( $value['creator'] ) ) { + $schema[ $key ]['creator']['name'] = esc_url( $value['creator'] ); + } + if ( isset( $value['copy-right-notice'] ) && ! empty( $value['copy-right-notice'] ) ) { + $schema[ $key ]['copyrightNotice'] = esc_url( $value['copy-right-notice'] ); + } + } + } + + return apply_filters( 'wp_schema_pro_schema_image_license', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-job-posting.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-job-posting.php new file mode 100644 index 00000000..03938576 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-job-posting.php @@ -0,0 +1,127 @@ + $value ) { + $schema['applicantLocationRequirements'][ $key ]['@type'] = 'Country'; + $schema['applicantLocationRequirements'][ $key ]['name'] = wp_strip_all_tags( (string) $value['applicant-location'] ); + } + } else { + if ( isset( $data['applicant-location'] ) && ! empty( $data['applicant-location'] ) ) { + $schema['applicantLocationRequirements']['@type'] = 'Country'; + $schema['applicantLocationRequirements']['name'] = wp_strip_all_tags( (string) $data['applicant-location'] ); + } + } + + if ( isset( $data['salary-currency'] ) && ! empty( $data['salary-currency'] ) ) { + $schema['baseSalary']['@type'] = 'MonetaryAmount'; + $schema['baseSalary']['currency'] = wp_strip_all_tags( (string) $data['salary-currency'] ); + } + + if ( ( isset( $data['salary'] ) && ! empty( $data['salary'] ) ) || + ( isset( $data['salary-unit'] ) && ! empty( $data['salary-unit'] ) ) ) { + + $schema['baseSalary']['@type'] = 'MonetaryAmount'; + $schema['baseSalary']['value']['@type'] = 'QuantitativeValue'; + + $schema['baseSalary']['value']['value'] = ! empty( $data['salary'] ) ? wp_strip_all_tags( (string) $data['salary'] ) : null; + $schema['baseSalary']['value']['minValue'] = ( ! empty( $data['salary-min-value'] ) && 'none' !== $data['salary-min-value'] ) ? wp_strip_all_tags( (string) $data['salary-min-value'] ) : null; + $schema['baseSalary']['value']['maxValue'] = ( ! empty( $data['salary-max-value'] ) && 'none' !== $data['salary-max-value'] ) ? wp_strip_all_tags( (string) $data['salary-max-value'] ) : null; + $schema['baseSalary']['value']['unitText'] = ! empty( $data['salary-unit'] ) ? wp_strip_all_tags( (string) $data['salary-unit'] ) : null; + } + + return apply_filters( 'wp_schema_pro_schema_job_posting', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-local-business.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-local-business.php new file mode 100644 index 00000000..f7bcd822 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-local-business.php @@ -0,0 +1,117 @@ + $value ) { + $schema['openingHoursSpecification'][ $key ]['@type'] = 'OpeningHoursSpecification'; + $days = explode( ',', $value['days'] ); + $days = array_map( 'trim', $days ); + $schema['openingHoursSpecification'][ $key ]['dayOfWeek'] = $days; + $schema['openingHoursSpecification'][ $key ]['opens'] = $value['opens']; + $schema['openingHoursSpecification'][ $key ]['closes'] = $value['closes']; + } + } + if ( isset( $data['geo-latitude'] ) && isset( $data['geo-longitude'] ) ) { + $schema['geo']['@type'] = 'GeoCoordinates'; + $schema['geo']['latitude'] = wp_strip_all_tags( (string) $data['geo-latitude'] ); + $schema['geo']['longitude'] = wp_strip_all_tags( (string) $data['geo-longitude'] ); + + } + $contact_type = BSF_AIOSRS_Pro_Helper::$settings['wp-schema-pro-corporate-contact']; + $contact_hear = isset( $contact_type['contact-hear'] ) ? $contact_type['contact-hear'] : ''; + $contact_toll = isset( $contact_type['contact-toll'] ) ? $contact_type['contact-toll'] : ''; + $contact_point_type = $contact_hear . ' ' . $contact_toll; + $contact_point_type = explode( ' ', $contact_point_type ); + if ( '1' === $contact_type['cp-schema-type'] && true === apply_filters( 'wp_schema_pro_contactpoint_local_business_schema_enabled', true ) && isset( $contact_type['contact-type'] ) && ! empty( $contact_type['contact-type'] ) ) { + $schema['ContactPoint']['@type'] = 'ContactPoint'; + + $schema ['ContactPoint']['contactType'] = ! empty( $contact_type['contact-type'] ) ? wp_strip_all_tags( (string) $contact_type['contact-type'] ) : null; + $schema ['ContactPoint']['telephone'] = ! empty( $contact_type['telephone'] ) ? wp_strip_all_tags( (string) $contact_type['telephone'] ) : null; + if ( isset( $contact_type['url'] ) && ! empty( $contact_type['url'] ) ) { + $schema ['ContactPoint']['url'] = esc_url( $contact_type['url'] ); + } + $schema ['ContactPoint']['email'] = ! empty( $contact_type['email'] ) ? wp_strip_all_tags( (string) $contact_type['email'] ) : null; + if ( isset( $contact_type['areaServed'] ) && ! empty( $contact_type['areaServed'] ) ) { + $language = explode( ',', $contact_type['areaServed'] ); + foreach ( $language as $key => $value ) { + $schema ['ContactPoint']['areaServed'][ $key ] = wp_strip_all_tags( (string) $value ); + } + } + foreach ( $contact_point_type as $key => $value ) { + $schema ['ContactPoint']['contactOption'][ $key ] = wp_strip_all_tags( (string) $value ); + } + $schema ['ContactPoint']['availableLanguage'] = ! empty( $contact_type['availableLanguage'] ) ? wp_strip_all_tags( (string) $contact_type['availableLanguage'] ) : null; + } + + return apply_filters( 'wp_schema_pro_schema_local_business', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-person.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-person.php new file mode 100644 index 00000000..2b4ebfbb --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-person.php @@ -0,0 +1,115 @@ + $value ) { + if ( isset( $value['same-as'] ) && ! empty( $value['same-as'] ) ) { + $schema['sameAs'][ $key ] = esc_url( $value['same-as'] ); + } + } + } + $contact_type = BSF_AIOSRS_Pro_Helper::$settings['wp-schema-pro-corporate-contact']; + $contact_hear = isset( $contact_type['contact-hear'] ) ? $contact_type['contact-hear'] : ''; + $contact_toll = isset( $contact_type['contact-toll'] ) ? $contact_type['contact-toll'] : ''; + $contact_point_type = $contact_hear . ' ' . $contact_toll; + $contact_point_type = explode( ' ', $contact_point_type ); + if ( '1' === $contact_type['cp-schema-type'] && true === apply_filters( 'wp_schema_pro_contactpoint_person_schema_enabled', true ) && isset( $contact_type['contact-type'] ) && ! empty( $contact_type['contact-type'] ) ) { + $schema['ContactPoint']['@type'] = 'ContactPoint'; + + $schema ['ContactPoint']['contactType'] = ! empty( $contact_type['contact-type'] ) ? wp_strip_all_tags( (string) $contact_type['contact-type'] ) : null; + $schema ['ContactPoint']['telephone'] = ! empty( $contact_type['telephone'] ) ? wp_strip_all_tags( (string) $contact_type['telephone'] ) : null; + if ( isset( $contact_type['url'] ) && ! empty( $contact_type['url'] ) ) { + $schema ['ContactPoint']['url'] = esc_url( $contact_type['url'] ); + } + $schema ['ContactPoint']['email'] = ! empty( $contact_type['email'] ) ? wp_strip_all_tags( (string) $contact_type['email'] ) : null; + if ( isset( $contact_type['areaServed'] ) && ! empty( $contact_type['areaServed'] ) ) { + $language = explode( ',', $contact_type['areaServed'] ); + if ( is_array( $language )) { + foreach ( $language as $key => $value ) { + $schema ['ContactPoint']['areaServed'][ $key ] = wp_strip_all_tags( (string) $value ); + } + } + } + if (is_array($contact_point_type)) { + foreach ( $contact_point_type as $key => $value ) { + $schema ['ContactPoint']['contactOption'][ $key ] = wp_strip_all_tags( (string) $value ); + } + } + $schema ['ContactPoint']['availableLanguage'] = ! empty( $contact_type['availableLanguage'] ) ? wp_strip_all_tags( (string) $contact_type['availableLanguage'] ) : null; + } + + return apply_filters( 'wp_schema_pro_schema_person', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-product.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-product.php new file mode 100644 index 00000000..489c36c2 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-product.php @@ -0,0 +1,283 @@ + $value ) { + if ( ( isset( $value['reviewer-name'] ) && ! empty( $value['reviewer-name'] ) ) && ( isset( $value['product-rating'] ) && ! empty( $value['product-rating'] ) ) ) { + $schema['review'][ $key ]['@type'] = 'Review'; + $schema['review'][ $key ]['author']['name'] = wp_strip_all_tags( (string) $value['reviewer-name'] ); + if ( isset( $value['reviewer-type'] ) && ! empty( $value['reviewer-type'] ) ) { + $schema['review'][ $key ]['author']['@type'] = wp_strip_all_tags( (string) $value['reviewer-type'] ); + } else { + $schema['review'][ $key ]['author']['@type'] = 'Person'; + } + + if ( isset( $value['product-rating'] ) && ! empty( $value['product-rating'] ) ) { + $schema['review'][ $key ]['reviewRating']['@type'] = 'Rating'; + $schema['review'][ $key ]['reviewRating']['ratingValue'] = wp_strip_all_tags( (string) $value['product-rating'] ); + } + + $schema['review'][ $key ]['reviewBody'] = ! empty( $value['review-body'] ) ? wp_strip_all_tags( (string) $value['review-body'] ) : null; + } + } + } + + if ( isset($data['merchant-return-policy']) && !empty($data['merchant-return-policy'] ) ) { + // Initialize hasMerchantReturnPolicy array + $schema['offers']['hasMerchantReturnPolicy'] = array(); + + foreach ($data['merchant-return-policy'] as $policy) { + // Add each policy to hasMerchantReturnPolicy + $return_policy = array(); + + $return_policy['@type'] = 'MerchantReturnPolicy'; + $return_policy['applicableCountry'] = isset($policy['applicableCountry']) ? wp_strip_all_tags((string)$policy['applicableCountry']) : null; + // Validate length of applicableCountry + if ($return_policy['applicableCountry'] && strlen($return_policy['applicableCountry']) > 2) { + // Truncate or handle the string appropriately if it exceeds the maximum length + $return_policy['applicableCountry'] = substr($return_policy['applicableCountry'], 0, 2); + } + $return_policy['returnPolicyCategory'] = isset($policy['returnPolicyCategory']) ? esc_url($policy['returnPolicyCategory']) : null; + $return_policy['merchantReturnDays'] = isset($policy['merchantReturnDays']) ? intval($policy['merchantReturnDays']) : null; + $return_policy['returnFees'] = isset($policy['returnFees']) ? esc_url($policy['returnFees']) : null; + $return_policy['returnMethod'] = isset($policy['returnMethod']) ? esc_url($policy['returnMethod']) : null; + + // Add returnShippingFeesAmount if returnFees is set to ReturnShippingFees + if ( + isset($policy['returnFees']) && + $policy['returnFees'] === 'https://schema.org/ReturnShippingFees' && + isset($policy['returnShippingFeesAmount']) && + !empty($policy['returnShippingFeesAmount']) + ) { + // Initialize returnShippingFeesAmount array + $return_shipping_fees_amount = array(); + + // Add value and currency to returnShippingFeesAmount + $return_shipping_fees_amount['@type'] = 'MonetaryAmount'; + $return_shipping_fees_amount['value'] = floatval($policy['returnShippingFeesAmount']); + $return_shipping_fees_amount['currency'] = !empty($policy['merchantCurrency']) ? $policy['merchantCurrency'] : null; // Default to USD if currency not provided + + $return_policy['returnShippingFeesAmount'] = $return_shipping_fees_amount; + } + + // Push the policy to hasMerchantReturnPolicy array + $schema['offers']['hasMerchantReturnPolicy'][] = $return_policy; + } + } + + + + // Fetch woocommerce review. + if ( defined( 'WC_VERSION' ) && apply_filters( 'wp_schema_pro_add_woocommerce_review', false ) ) { + $comments = get_comments( + array( + 'number' => 5, + 'post_id' => $post['ID'], + 'status' => 'approve', + 'post_status' => 'publish', + 'post_type' => 'product', + 'parent' => 0, + 'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + array( + 'key' => 'rating', + 'type' => 'NUMERIC', + 'compare' => '>', + 'value' => 0, + ), + ), + ) + ); + + if ( $comments ) { + foreach ( $comments as $key => $comment ) { + $schema['review'][ $key ]['@type'] = 'Review'; + $schema['review'][ $key ]['reviewRating']['@type'] = 'Rating'; + $schema['review'][ $key ]['reviewRating']['ratingValue'] = get_comment_meta( $comment->comment_ID, 'rating', true ); + $schema['review'][ $key ]['author']['@type'] = 'Person'; + $schema['review'][ $key ]['author']['name'] = get_comment_author( $comment ); + $schema['review'][ $key ]['reviewBody'] = get_comment_text( $comment ); + } + } + } + + return apply_filters( 'wp_schema_pro_schema_product', $schema, $data, $post ); + } + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-recipe.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-recipe.php new file mode 100644 index 00000000..bbf26f34 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-recipe.php @@ -0,0 +1,148 @@ + $value ) { + $schema['recipeIngredient'][ $key ] = wp_strip_all_tags( (string) $value ); + } + } + + if ( isset( $data['recipe-instructions'] ) && ! empty( $data['recipe-instructions'] ) ) { + foreach ( $data['recipe-instructions'] as $key => $value ) { + + if ( isset( $value['steps'] ) && ! empty( $value['steps'] ) ) { + + $schema['recipeInstructions'][ $key ]['@type'] = 'HowToStep'; + $schema['recipeInstructions'][ $key ]['text'] = wp_strip_all_tags( (string) $value['steps'] ); + $schema['recipeInstructions'][ $key ]['name'] = ! empty( $value['name'] ) ? wp_strip_all_tags( (string) $value['name'] ) : null; + $schema['recipeInstructions'][ $key ]['url'] = ! empty( $value['url'] ) ? wp_strip_all_tags( (string) $value['url'] ) : null; + if ( isset( $value['image'] ) && ! empty( $value['image'] ) ) { + $schema['recipeInstructions'][ $key ]['image'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $value['image'], 'URL' ); + } + } + } + } + + if ( isset( $data['recipe-video'] ) && ! empty( $data['recipe-video'] ) ) { + + foreach ( $data['recipe-video'] as $key => $value ) { + if ( isset( $value['video-name'] ) && ! empty( $value['video-name'] ) ) { + $schema['video'][ $key ]['@type'] = 'VideoObject'; + $schema['video'][ $key ]['name'] = wp_strip_all_tags( (string) $value['video-name'] ); + $schema['video'][ $key ]['description'] = ! empty( $value['video-desc'] ) ? wp_strip_all_tags( (string) $value['video-desc'] ) : null; + if ( isset( $value['video-image'] ) && ! empty( $value['video-image'] ) ) { + $schema['video'][ $key ]['thumbnailUrl'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $value['video-image'], 'URL' ); + } + if ( isset( $value['recipe-video-content-url'] ) && ! empty( $value['recipe-video-content-url'] ) ) { + $schema['video'][ $key ]['contentUrl'] = esc_url( $value['recipe-video-content-url'] ); + } + if ( isset( $value['recipe-video-embed-url'] ) && ! empty( $value['recipe-video-embed-url'] ) ) { + $schema['video'][ $key ]['embedUrl'] = esc_url( $value['recipe-video-embed-url'] ); + } + $schema['video'][ $key ]['duration'] = ! empty( $value['recipe-video-duration'] ) ? wp_strip_all_tags( (string) $value['recipe-video-duration'] ) : null; + + // Convert uploadDate to DateTime object and set the timezone. + $upload_date = new DateTime( $value['recipe-video-upload-date'] ); + $upload_date->setTimezone( new DateTimeZone( $timezone_string ?: 'UTC' ) ); + $schema['video'][ $key ]['uploadDate'] = $upload_date->format( 'c' ); + + // Use DateTime to handle timezone for 'expires' + if ( isset( $value['recipe-video-expires-date'] ) && ! empty( $value['recipe-video-expires-date'] ) && is_string( $value['recipe-video-expires-date'] ) ) { + $expires_date = new DateTime( $value['recipe-video-expires-date'] ); + $expires_date->setTimezone( new DateTimeZone( $timezone_string ?: 'UTC' ) ); + $schema['video'][ $key ]['expires'] = $expires_date->format( 'c' ); + } + + $schema['video'][ $key ]['interactionCount'] = ! empty( $value['recipe-video-interaction-count'] ) ? wp_strip_all_tags( (string) $value['recipe-video-interaction-count'] ) : null; + } + } + } + + return apply_filters( 'wp_schema_pro_schema_recipe', $schema, $data, $post ); + } + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-review.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-review.php new file mode 100644 index 00000000..3aa5969c --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-review.php @@ -0,0 +1,363 @@ + $value ) { + $schema['itemReviewed']['recipeIngredient'][ $key ] = wp_strip_all_tags( (string) $value ); + } + } + if ( isset( $data['bsf-aiosrs-recipe-recipe-instructions'] ) && ! empty( $data['bsf-aiosrs-recipe-recipe-instructions'] ) ) { + $recipe_instructions = explode( ',', $data['bsf-aiosrs-recipe-recipe-instructions'] ); + foreach ( $recipe_instructions as $key => $value ) { + if ( isset( $value ) && ! empty( $value ) ) { + $schema['itemReviewed']['recipeInstructions'][ $key ]['@type'] = 'HowToStep'; + $schema['itemReviewed']['recipeInstructions'][ $key ]['text'] = wp_strip_all_tags( (string) $value ); + } + } + } + + if ( isset( $data['bsf-aiosrs-recipe-video-name'] ) && ! empty( $data['bsf-aiosrs-recipe-video-name'] ) ) { + $schema['itemReviewed']['video']['@type'] = 'VideoObject'; + $schema['itemReviewed']['video']['name'] = wp_strip_all_tags( (string) $data['bsf-aiosrs-recipe-video-name'] ); + $schema['itemReviewed']['video']['description'] = ! empty( $data['bsf-aiosrs-recipe-video-desc'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-recipe-video-desc'] ) : null; + if ( isset( $data['bsf-aiosrs-recipe-video-image'] ) && ! empty( $data['bsf-aiosrs-recipe-video-image'] ) ) { + $schema['itemReviewed']['video']['thumbnailUrl'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $data['bsf-aiosrs-recipe-video-image'] ); + } + if ( isset( $data['bsf-aiosrs-recipe-recipe-video-content-url'] ) && ! empty( $data['bsf-aiosrs-recipe-recipe-video-content-url'] ) ) { + $schema['itemReviewed']['video']['contentUrl'] = esc_url( $data['bsf-aiosrs-recipe-recipe-video-content-url'] ); + } + if ( isset( $data['bsf-aiosrs-recipe-recipe-video-embed-url'] ) && ! empty( $data['bsf-aiosrs-recipe-recipe-video-embed-url'] ) ) { + $schema['itemReviewed']['video']['embedUrl'] = esc_url( $data['bsf-aiosrs-recipe-recipe-video-embed-url'] ); + } + $schema['itemReviewed']['video']['duration'] = ! empty( $data['bsf-aiosrs-recipe-recipe-video-duration'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-recipe-recipe-video-duration'] ) : null; + $schema['itemReviewed']['video']['uploadDate'] = ! empty( $data['bsf-aiosrs-recipe-recipe-video-upload-date'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-recipe-recipe-video-upload-date'] ) : null; + $schema['itemReviewed']['video']['interactionCount'] = ! empty( $data['bsf-aiosrs-recipe-recipe-video-interaction-count'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-recipe-recipe-video-interaction-count'] ) : null; + $schema['itemReviewed']['video']['expires'] = ! empty( $data['bsf-aiosrs-recipe-recipe-video-expires-date'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-recipe-recipe-video-expires-date'] ) : null; + } + break; + case 'bsf-aiosrs-software-application': + $schema['itemReviewed']['@type'] = 'SoftwareApplication'; + $schema['itemReviewed']['name'] = ! empty( $data['bsf-aiosrs-software-application-name'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-software-application-name'] ) : null; + + $schema['itemReviewed']['operatingSystem'] = ! empty( $data['bsf-aiosrs-software-application-operating-system'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-software-application-operating-system'] ) : null; + + $schema['itemReviewed']['applicationCategory'] = ! empty( $data['bsf-aiosrs-software-application-category'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-software-application-category'] ) : null; + + if ( ( isset( $data['bsf-aiosrs-software-application-rating'] ) && ! empty( $data['bsf-aiosrs-software-application-rating'] ) ) || + ( isset( $data['bsf-aiosrs-software-application-review-count'] ) && ! empty( $data['bsf-aiosrs-software-application-review-count'] ) ) ) { + + $schema['itemReviewed']['aggregateRating']['@type'] = 'AggregateRating'; + + $schema['itemReviewed']['aggregateRating']['ratingValue'] = ! empty( $data['bsf-aiosrs-software-application-rating'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-software-application-rating'] ) : null; + $schema['itemReviewed']['aggregateRating']['reviewCount'] = ! empty( $data['bsf-aiosrs-software-application-review-count'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-software-application-review-count'] ) : null; + } + if ( true === apply_filters( 'wp_schema_pro_remove_software_application_offers_review_type', true ) ) { + $schema['itemReviewed']['offers']['@type'] = 'Offer'; + $schema['itemReviewed']['offers']['price'] = '0'; + + $schema['itemReviewed']['offers']['price'] = ! empty( $data['bsf-aiosrs-software-application-price'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-software-application-price'] ) : null; + + $schema['itemReviewed']['offers']['priceCurrency'] = ! empty( $data['bsf-aiosrs-software-application-currency'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-software-application-currency'] ) : null; + } + break; + case 'bsf-aiosrs-product': + $schema['itemReviewed']['@type'] = 'product'; + $schema['itemReviewed']['name'] = ! empty( $data['bsf-aiosrs-product-name'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-name'] ) : null; + if ( isset( $data['bsf-aiosrs-product-image'] ) && ! empty( $data['bsf-aiosrs-product-image'] ) ) { + $schema['itemReviewed']['image'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $data['bsf-aiosrs-product-image'] ); + } + + $schema['itemReviewed']['description'] = ! empty( $data['bsf-aiosrs-product-description'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-description'] ) : null; + + $schema['itemReviewed']['sku'] = ! empty( $data['bsf-aiosrs-product-sku'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-sku'] ) : null; + $schema['itemReviewed']['mpn'] = ! empty( $data['bsf-aiosrs-product-mpn'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-mpn'] ) : null; + if ( isset( $data['bsf-aiosrs-product-brand-name'] ) && ! empty( $data['bsf-aiosrs-product-brand-name'] ) ) { + $schema['itemReviewed']['brand']['@type'] = 'Organization'; + $schema['itemReviewed']['brand']['name'] = wp_strip_all_tags( (string) $data['bsf-aiosrs-product-brand-name'] ); + } + + if ( ( isset( $data['bsf-aiosrs-product-rating'] ) && ! empty( $data['bsf-aiosrs-product-rating'] ) ) || + ( isset( $data['bsf-aiosrs-product-review-count'] ) && ! empty( $data['bsf-aiosrs-product-review-count'] ) ) ) { + + $schema['itemReviewed']['aggregateRating']['@type'] = 'AggregateRating'; + + $schema['itemReviewed']['aggregateRating']['ratingValue'] = ! empty( $data['bsf-aiosrs-product-rating'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-rating'] ) : null; + $schema['itemReviewed']['aggregateRating']['reviewCount'] = ! empty( $data['bsf-aiosrs-product-review-count'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-review-count'] ) : null; + } + if ( apply_filters( 'wp_schema_pro_remove_product_offers', true ) ) { + $schema['itemReviewed']['offers']['@type'] = 'Offer'; + $schema['itemReviewed']['offers']['price'] = '0'; + $schema['itemReviewed']['offers']['price'] = ! empty( $data['bsf-aiosrs-product-price'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-price'] ) : null; + $schema['itemReviewed']['offers']['priceValidUntil'] = ! empty( $data['bsf-aiosrs-product-price-valid-until'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-price-valid-until'] ) : null; + + $schema['itemReviewed']['offers']['url'] = get_permalink( $post['ID'] ); + + if ( ( isset( $data['bsf-aiosrs-product-currency'] ) && ! empty( $data['bsf-aiosrs-product-currency'] ) ) || + ( isset( $data['bsf-aiosrs-product-avail'] ) && ! empty( $data['bsf-aiosrs-product-avail'] ) ) ) { + + $schema['itemReviewed']['offers']['priceCurrency'] = ! empty( $data['bsf-aiosrs-product-currency'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-currency'] ) : null; + $schema['itemReviewed']['offers']['availability'] = ! empty( $data['bsf-aiosrs-product-avail'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-product-avail'] ) : null; + } + } + + break; + case 'bsf-aiosrs-movie': + $schema['itemReviewed']['@type'] = 'Movie'; + $schema['itemReviewed']['name'] = ! empty( $data['bsf-aiosrs-movie-name'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-movie-name'] ) : null; + $schema['itemReviewed']['sameAs'] = ! empty( $data['bsf-aiosrs-movie-same-As'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-movie-same-As'] ) : null; + if ( isset( $data['bsf-aiosrs-movie-image'] ) && ! empty( $data['bsf-aiosrs-movie-image'] ) ) { + $schema['itemReviewed']['image'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $data['bsf-aiosrs-movie-image'] ); + } + $schema['itemReviewed']['dateCreated'] = ! empty( $data['bsf-aiosrs-movie-dateCreated'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-movie-dateCreated'] ) : null; + if ( isset( $data['bsf-aiosrs-movie-director-name'] ) && ! empty( $data['bsf-aiosrs-movie-director-name'] ) ) { + $schema['itemReviewed']['director']['@type'] = 'Person'; + $schema['itemReviewed']['director']['name'] = wp_strip_all_tags( (string) $data['bsf-aiosrs-movie-director-name'] ); + } + $schema['description'] = ! empty( $data['bsf-aiosrs-movie-description'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-movie-description'] ) : null; + + break; + case 'bsf-aiosrs-organization': + $schema['itemReviewed']['@type'] = 'Organization'; + $schema['itemReviewed']['name'] = ! empty( $data['bsf-aiosrs-organization-name'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-organization-name'] ) : null; + if ( ( isset( $data['bsf-aiosrs-organization-location-street'] ) && ! empty( $data['bsf-aiosrs-organization-location-street'] ) ) || + ( isset( $data['bsf-aiosrs-organization-location-locality'] ) && ! empty( $data['bsf-aiosrs-organization-location-locality'] ) ) || + ( isset( $data['bsf-aiosrs-organization-location-postal'] ) && ! empty( $data['bsf-aiosrs-organization-location-postal'] ) ) || + ( isset( $data['bsf-aiosrs-organization-location-region'] ) && ! empty( $data['bsf-aiosrs-organization-location-region'] ) ) || + ( isset( $data['bsf-aiosrs-organization-location-country'] ) && ! empty( $data['bsf-aiosrs-organization-location-country'] ) ) ) { + + $schema['itemReviewed']['address']['@type'] = 'PostalAddress'; + + $schema['itemReviewed']['address']['streetAddress'] = ! empty( $data['bsf-aiosrs-organization-location-street'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-organization-location-street'] ) : null; + $schema['itemReviewed']['address']['addressLocality'] = ! empty( $data['bsf-aiosrs-organization-location-locality'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-organization-location-locality'] ) : null; + $schema['itemReviewed']['address']['postalCode'] = ! empty( $data['bsf-aiosrs-organization-location-postal'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-organization-location-postal'] ) : null; + $schema['itemReviewed']['address']['addressRegion'] = ! empty( $data['bsf-aiosrs-organization-location-region'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-organization-location-region'] ) : null; + $schema['itemReviewed']['address']['addressCountry'] = ! empty( $data['bsf-aiosrs-organization-location-country'] ) ? wp_strip_all_tags( (string) $data['bsf-aiosrs-organization-location-country'] ) : null; + } + break; + default: + break; + } + /*Review schema fields*/ + + if ( isset( $data['rating'] ) && ! empty( $data['rating'] ) ) { + $schema['reviewRating']['@type'] = 'Rating'; + $schema['reviewRating']['ratingValue'] = wp_strip_all_tags( (string) $data['rating'] ); + } + $schema['reviewBody'] = ! empty( $data['review-body'] ) ? wp_strip_all_tags( (string) $data['review-body'] ) : null; + $schema['datePublished'] = ! empty( $data['date'] ) ? wp_strip_all_tags( (string) $data['date'] ) : null; + $schema['author']['@type'] = ! empty( $data['reviewer-type'] ) ? wp_strip_all_tags( (string) $data['reviewer-type'] ) : 'Person'; + if ( isset( $data['reviewer-name'] ) && ! empty( $data['reviewer-name'] ) ) { + $schema['author']['name'] = wp_strip_all_tags( (string) $data['reviewer-name'] ); + $author_data = get_userdata( $post['post_author'] ); + $author_name = ( isset( $author_data->user_nicename ) ) ? $author_data->user_nicename : ''; + $author_url = get_author_posts_url( $post['ID'] ); + $final_url = $author_url . '' . $author_name; + $is_available = true; + $schema['author']['sameAs'] = esc_url( $final_url ); + } + if ( isset( $data['publisher-name'] ) && ! empty( $data['publisher-name'] ) ) { + $schema['publisher']['@type'] = 'Organization'; + $schema['publisher']['name'] = wp_strip_all_tags( (string) $data['publisher-name'] ); + $prg_url_value = get_bloginfo( 'url' ); + $schema['publisher']['sameAs'] = esc_url( $prg_url_value ); + } + + return apply_filters( 'wp_schema_pro_schema_review', $schema, $data, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-service.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-service.php new file mode 100644 index 00000000..a1a9cd26 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/class-bsf-aiosrs-pro-schema-service.php @@ -0,0 +1,81 @@ + $value ) { + $schema['hasPart'][$key]['@type'] = 'Clip'; + $schema['hasPart'][$key]['name'] = wp_strip_all_tags( (string) $value['clip-name'] ); + $schema['hasPart'][$key]['startOffset'] = wp_strip_all_tags( (string) $value['clip-start-offset'] ); + $schema['hasPart'][$key]['endOffset'] = wp_strip_all_tags( (string) $value['clip-end-offset'] ); + $schema['hasPart'][$key]['url'] = esc_url( $value['clip-url'] ); + } + } + + if ( isset( $data['seekto-action-start-offset'] ) && ! empty( $data['seekto-action-start-offset'] ) && isset( $data['content-url'] ) ) { + $schema['potentialAction']['@type'] = 'SeekToAction'; + $schema['potentialAction']['target'] = esc_url( $data['seekto-action-target'] ) . '?t={seek_to_second_number}'; + $schema['potentialAction']['startOffset-input'] = 'required name=seek_to_second_number'; + } + + if ( isset( $data['regions-allowed'] ) && ! empty( $data['regions-allowed'] ) ) { + $schema['regionsAllowed'] = wp_strip_all_tags( (string) $data['regions-allowed'] ); + } + + if ( isset( $data['is-live-broadcast'] ) && $data['is-live-broadcast'] ) { + $schema['publication']['@type'] = 'BroadcastEvent'; + $schema['publication']['isLiveBroadcast'] = true; + $schema['publication']['startDate'] = ! empty( $data['start-date'] ) ? wp_strip_all_tags( (string) $data['start-date'] ) : null; + $schema['publication']['endDate'] = ! empty( $data['end-date'] ) ? wp_strip_all_tags( (string) $data['end-date'] ) : null; + } + + return apply_filters( 'wp_schema_pro_schema_video_object', $schema, $data, $post ); + } + + } +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-about-page.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-about-page.php new file mode 100644 index 00000000..b302a463 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-about-page.php @@ -0,0 +1,81 @@ + $breadcrumb ) { + $schema['itemListElement'][ $key ]['@type'] = 'ListItem'; + $schema['itemListElement'][ $key ]['position'] = $key + 1; + $schema['itemListElement'][ $key ]['item']['@id'] = esc_url( $breadcrumb['url'] ); + $schema['itemListElement'][ $key ]['item']['name'] = $breadcrumb['title']; + } + + return apply_filters( 'wp_schema_pro_global_schema_breadcrumb', $schema, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-contact-page.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-contact-page.php new file mode 100644 index 00000000..64c67704 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-contact-page.php @@ -0,0 +1,81 @@ + $value ) { + $schema ['ContactPoint']['areaServed'][ $key ] = wp_strip_all_tags( $value ); + } + } + if ( isset( $contact_type['availableLanguage'] ) && ! empty( $contact_type['availableLanguage'] ) ) { + $language = explode( ',', $contact_type['availableLanguage'] ); + foreach ( $language as $key => $value ) { + $schema ['ContactPoint']['availableLanguage'][ $key ] = wp_strip_all_tags( $value ); + } + } else { + $schema ['ContactPoint']['availableLanguage'] = 'English'; + } + } + + $logo_id = get_post_thumbnail_id( $post['ID'] ); + if ( isset( $general_settings['site-logo-custom'] ) ) { + $logo_id = isset( $general_settings['site-logo-custom'] ) ? $general_settings['site-logo-custom'] : ''; + } elseif ( isset( $general_settings['site-logo'] ) && 'customizer-logo' === $general_settings['site-logo'] ) { + if ( function_exists( 'the_custom_logo' ) && has_custom_logo() ) { + $logo_id = get_theme_mod( 'custom_logo' ); + } + } + if ( $logo_id ) { + $key = 'site-logo'; + $logo_image = BSF_AIOSRS_Pro_Schema_Template::get_image_object( $logo_id, $key ); + $schema['logo'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $logo_image, 'ImageObject' ); + } + + foreach ( $social_profiles as $type => $social_link ) { + if ( 'other' === $type && is_array( $social_link ) ) { + foreach ( $social_link as $dynamic_social_link ) { + if ( ! empty( $dynamic_social_link ) ) { + $schema['sameAs'][] = $dynamic_social_link; + } + } + } + if ( ! empty( $social_link ) && ! is_array( $social_link ) ) { + + $schema['sameAs'][] = $social_link; + } + } + + return apply_filters( 'wp_schema_pro_global_schema_organization', $schema, $post ); + } + + } +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-person.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-person.php new file mode 100644 index 00000000..5927ffbc --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-person.php @@ -0,0 +1,74 @@ + $social_link ) { + if ( 'other' === $type && is_array( $social_link ) ) { + foreach ( $social_link as $dynamic_social_link ) { + if ( ! empty( $dynamic_social_link ) ) { + $schema['sameAs'][] = $dynamic_social_link; + } + } + } else { + if ( ! empty( $social_link ) && ( ! is_array( $social_link ) ) ) { + $schema['sameAs'][] = $social_link; + } + } + } + } + + return apply_filters( 'wp_schema_pro_global_schema_person', $schema, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-site-navigation-element.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-site-navigation-element.php new file mode 100644 index 00000000..5f541300 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-site-navigation-element.php @@ -0,0 +1,70 @@ +title ); + $urls[] = esc_url( $link->url ); + } + } + } + + /** + * Convert normal array into associative array + */ + $combine_array = array_combine( $names, $urls ); + $new_arr[] = array(); + $j = 0; + foreach ( $combine_array as $key => $value ) { + $new_arr[ $j ]['name'] = $key; + $new_arr[ $j ]['url'] = $value; + $j++; + } + + $schema['@context'] = 'https://schema.org'; + + if ( isset( $new_arr ) && ! empty( $new_arr ) ) { + foreach ( $new_arr as $key2 => $value2 ) { + $schema['@graph'][ $key2 ]['@context'] = 'https://schema.org'; + $schema['@graph'][ $key2 ]['@type'] = 'SiteNavigationElement'; + $schema['@graph'][ $key2 ]['id'] = 'site-navigation'; + $schema['@graph'][ $key2 ]['name'] = isset( $value2['name'] ) ? $value2['name'] : ''; + $schema['@graph'][ $key2 ]['url'] = isset( $value2['url'] ) ? $value2['url'] : ''; + } + } + + return apply_filters( 'wp_schema_pro_global_schema_site_navigation_element', $schema, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-sitelink-search-box.php b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-sitelink-search-box.php new file mode 100644 index 00000000..6721c056 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/schema/global/class-bsf-aiosrs-pro-schema-global-sitelink-search-box.php @@ -0,0 +1,50 @@ + 'SearchAction', + 'target' => esc_url( $template_url ) . '{search_term_string}', + 'query-input' => 'required name=search_term_string', + ); + } + + $schema['potentialAction'] = $potential_action; + + return apply_filters( 'wp_schema_pro_global_schema_sitelink_search_box', $schema, $post ); + } + + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/blocks.asset.php b/wp/wp-content/plugins/wp-schema-pro/dist/blocks.asset.php new file mode 100644 index 00000000..91fcb55d --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/blocks.asset.php @@ -0,0 +1 @@ + array('react', 'react-dom', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '6f0debba0e036f55eb1407af3830bf1c'); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/blocks.js b/wp/wp-content/plugins/wp-schema-pro/dist/blocks.js new file mode 100644 index 00000000..401dc4a3 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/blocks.js @@ -0,0 +1 @@ +(window.webpackJsonp_wp_schema_pro=window.webpackJsonp_wp_schema_pro||[]).push([[10],{19:function(e,t,i){},24:function(e,t,i){},28:function(e,t,i){},32:function(e,t,i){}}]),function(e){function t(t){for(var a,s,l=t[0],r=t[1],c=t[2],d=0,h=[];d2?a-2:0),s=2;s2?a-2:0),n=2;ne.length)&&(t=e.length);for(var i=0,a=new Array(t);i2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o="",n="",s="";for(var l in"tablet"==a?o=wpsp_blocks_info.tablet_breakpoint:"mobile"==a&&(o=wpsp_blocks_info.mobile_breakpoint),e){var r=e[l],c="";for(var p in r){var d=!0;"string"==typeof r[p]&&0===r[p].length&&(d=!1),"font-family"===p&&void 0!==r[p]&&"Default"===r[p]||void 0!==r[p]&&d&&(c+="font-family"===p?p+": '"+r[p]+"';":p+": "+r[p]+";")}0!==c.length&&(n+=t,n+=l+"{",n+=c,n+="}")}return i&&void 0!==n&&0!==n.length&&(s+="@media only screen and (max-width: "+o+"px) {",s+=n,s+="}"),i?s:n},h=function(e,t){var i="";return void 0!==e&&(i+=e+t),i},u=i(3),b=i(7),m=i(9),f=i(8),w=Object(u.lazy)((function(){return Promise.all([i.e(0),i.e(11),i.e(5)]).then(i.bind(null,73))})),g=Object(u.lazy)((function(){return i.e(4).then(i.bind(null,78))})),y=Object(m.compose)(Object(f.withSelect)((function(e,t){var i=e("core/editor").getPermalink(),a={},o={"@context":"https://schema.org","@type":"FAQPage","@id":i,mainEntity:[]};return e("core/block-editor").getBlocks(t.clientId).forEach((function(e,t){a={"@type":"Question",name:e.attributes.question,acceptedAnswer:{"@type":"Answer",text:e.attributes.answer}},o.mainEntity[t]=a})),{schemaJsonData:o}})))((function(e){return Object(u.useEffect)((function(){var t=e.setAttributes;t({block_id:e.clientId.substr(0,8)}),t({schema:JSON.stringify(e.schemaJsonData)});var i=document.createElement("style");i.setAttribute("id","wpsp-style-faq-"+e.clientId.substr(0,8)),document.head.appendChild(i)}),[]),Object(u.useEffect)((function(){var t=document.getElementById("wpsp-style-faq-"+e.clientId.substr(0,8));null!=t&&(t.innerHTML=function(e){var t=e.attributes,i=t.layout,a=t.inactiveOtherItems,o=t.expandFirstItem,n=t.rowsGap,s=t.columnsGap,l=t.align,r=t.enableSeparator,c=t.boxBgColor,p=t.borderStyle,u=t.borderWidth,b=t.borderRadius,m=t.borderColor,f=t.questionTextColor,w=t.questionTextActiveColor,g=t.questionPaddingTypeDesktop,y=t.vquestionPaddingMobile,v=t.vquestionPaddingTablet,_=t.vquestionPaddingDesktop,x=t.hquestionPaddingMobile,k=t.hquestionPaddingTablet,O=t.hquestionPaddingDesktop,j=t.answerTextColor,z=t.answerPaddingTypeDesktop,q=t.vanswerPaddingMobile,T=t.vanswerPaddingTablet,E=t.vanswerPaddingDesktop,S=t.hanswerPaddingMobile,N=t.hanswerPaddingTablet,M=t.hanswerPaddingDesktop,F=t.iconColor,H=t.iconActiveColor,C=t.gapBtwIconQUestion,P=t.questionFontFamily,L=t.questionFontWeight,B=t.questionFontSizeType,I=t.questionFontSize,A=t.questionFontSizeMobile,D=t.questionFontSizeTablet,R=t.questionLineHeightType,W=t.questionLineHeight,J=t.questionLineHeightMobile,G=t.questionLineHeightTablet,Q=t.answerFontFamily,U=t.answerFontWeight,V=t.answerFontSizeType,$=t.answerFontSize,K=t.answerFontSizeMobile,X=t.answerFontSizeTablet,Y=t.answerLineHeightType,Z=t.answerLineHeight,ee=t.answerLineHeightMobile,te=t.answerLineHeightTablet,ie=t.iconAlign,ae=t.iconSize,oe=t.iconSizeType,ne=t.iconSizeMobile,se=t.iconSizeTablet,le=t.columns,re=t.tcolumns,ce=t.mcolumns,pe=t.questionLeftPaddingTablet,de=t.questionBottomPaddingTablet,he=t.questionLeftPaddingDesktop,ue=t.questionBottomPaddingDesktop,be=t.questionLeftPaddingMobile,me=t.questionBottomPaddingMobile,fe={},we={},ge={},ye=F,ve=H;void 0!==F&&""!==F||(ye=f),void 0!==H&&""!==H||(ve=w),fe={" .wpsp-icon svg":{width:h(ae,oe),height:h(ae,oe),"font-size":h(ae,oe),fill:ye}," .wpsp-icon-active svg":{width:h(ae,oe),height:h(ae,oe),"font-size":h(ae,oe),fill:ve}," .wpsp-faq-child__outer-wrap":{"margin-bottom":h(n,"px")},".wpsp-faq-layout-grid .block-editor-inner-blocks .block-editor-block-list__layout":{"grid-column-gap":h(s,"px"),"grid-row-gap":h(n,"px")}," .wpsp-faq-item":{"background-color":c,"border-style":p,"border-width":h(u,"px"),"border-radius":h(b,"px"),"border-color":m}," .wpsp-faq-item .wpsp-question":{color:f}," .wpsp-faq-item.wpsp-faq-item-active .wpsp-question":{color:w}," .wpsp-faq-item:hover .wpsp-question":{color:w}," .wpsp-faq-questions-button":{"padding-top":h(_,g),"padding-bottom":h(ue,g),"padding-right":h(O,g),"padding-left":h(he,g)}," .wpsp-faq-content span":{"margin-top":h(E,z),"margin-bottom":h(E,z),"margin-right":h(M,z),"margin-left":h(M,z)},".wpsp-faq-icon-row .wpsp-faq-item .wpsp-faq-icon-wrap":{"margin-right":h(C,"px")},".wpsp-faq-icon-row-reverse .wpsp-faq-item .wpsp-faq-icon-wrap":{"margin-left":h(C,"px")}," .wpsp-faq-item:hover .wpsp-icon svg":{fill:ve}," .wpsp-faq-item .wpsp-faq-questions-button.wpsp-faq-questions":{"flex-direction":ie}," .wpsp-faq-questions-button .wpsp-question":{"font-size":h(I,B),"line-height":h(W,R),"font-family":P,"font-weight":L}," .wpsp-faq-item .wpsp-faq-content p":{"font-size":h($,V),"line-height":h(Z,Y),"font-family":Q,"font-weight":U,color:j}},we={" .wpsp-faq-questions-button":{"padding-top":h(v,g),"padding-bottom":h(de,g),"padding-right":h(k,g),"padding-left":h(pe,g)}," .wpsp-faq-content span":{"margin-top":h(T,z),"margin-bottom":h(T,z),"margin-right":h(N,z),"margin-left":h(N,z)}," .wpsp-faq-questions-button .wpsp-question":{"font-size":h(D,B),"line-height":h(G,R)}," .wpsp-faq-item .wpsp-faq-content p":{"font-size":h(X,V),"line-height":h(te,Y)}," .wpsp-icon svg":{width:h(se,oe),height:h(se,oe),"font-size":h(se,oe)}," .wpsp-icon-active svg":{width:h(se,oe),height:h(se,oe),"font-size":h(se,oe)}},ge={" .wpsp-faq-questions-button":{"padding-top":h(y,g),"padding-bottom":h(me,g),"padding-right":h(x,g),"padding-left":h(be,g)}," .wpsp-faq-content span":{"margin-top":h(q,z),"margin-bottom":h(q,z),"margin-right":h(S,z),"margin-left":h(S,z)}," .wpsp-faq-questions-button .wpsp-question":{"font-size":h(A,B),"line-height":h(J,R)}," .wpsp-faq-item .wpsp-faq-content p":{"font-size":h(K,V),"line-height":h(ee,Y)}," .wpsp-icon svg":{width:h(ne,oe),height:h(ne,oe),"font-size":h(ne,oe)}," .wpsp-icon-active svg":{width:h(ne,oe),height:h(ne,oe),"font-size":h(ne,oe)}},"accordion"===i&&!0===a&&(fe[" .block-editor-block-list__layout .wpsp-faq-child__outer-wrap .wpsp-faq-content "]={display:"none"}),"accordion"===i&&!1===a&&(fe[" .block-editor-inner-blocks .wpsp-faq-child__outer-wrap .wpsp-faq-item .wpsp-faq-questions-button .wpsp-icon-active"]={display:"inline-block"},fe[" .block-editor-inner-blocks .wpsp-faq-child__outer-wrap .wpsp-faq-item .wpsp-faq-questions-button .wpsp-icon"]={display:"none"}),"accordion"===i&&!0===o&&(fe[" .block-editor-block-list__layout > div:first-child > .wpsp-faq-child__outer-wrap .wpsp-faq-content "]={display:"block"},fe[" .block-editor-block-list__layout > div:first-child > .wpsp-faq-child__outer-wrap .wpsp-faq-item .wpsp-faq-questions-button .wpsp-icon-active "]={display:"inline-block"},fe[" .block-editor-block-list__layout > div:first-child > .wpsp-faq-child__outer-wrap .wpsp-faq-item .wpsp-faq-questions-button .wpsp-icon "]={display:"none"}),!0===r&&(fe[".wpsp-faq__outer-wrap .wpsp-faq-child__outer-wrap .wpsp-faq-content "]={"border-style":"solid","border-top-color":m,"border-top-width":h(u,"px")}),"grid"===i&&(fe[" .block-editor-block-list__layout .wpsp-faq-child__outer-wrap "]={"text-align":l},fe[".wpsp-faq-layout-grid .block-editor-inner-blocks > .block-editor-block-list__layout "]={"grid-template-columns":"repeat("+le+", 1fr)"},we[".wpsp-faq-layout-grid .block-editor-inner-blocks > .block-editor-block-list__layout "]={"grid-template-columns":"repeat("+re+", 1fr)"},ge[".wpsp-faq-layout-grid .block-editor-inner-blocks > .block-editor-block-list__layout "]={"grid-template-columns":"repeat("+ce+", 1fr)"});var _e="",xe=".wpsp-block-".concat(e.clientId.substr(0,8));return _e=d(fe,xe),(_e+=d(we,xe,!0,"tablet"))+d(ge,xe,!0,"mobile")}(e)),Object(f.select)("core/block-editor").getBlocks(e.clientId).forEach((function(t){t.attributes.headingTag=e.attributes.headingTag})),JSON.stringify(e.schemaJsonData)!==JSON.stringify(a)&&(e.setAttributes({schema:JSON.stringify(e.schemaJsonData)}),a=e.schemaJsonData)}),[e]),Object(r.createElement)(u.Suspense,{fallback:Object(b.a)()},Object(r.createElement)(g,{parentProps:e}),Object(r.createElement)(w,{parentProps:e}))})),v=i(4),_=i.n(v),x=i(2);i(24);var k=[{attributes:p,save:function(e){var t=e.className,i=e.attributes,a=i.block_id,o=i.schema,n=i.enableSchemaSupport,s=i.equalHeight?"wpsp-faq-equal-height":"";return Object(r.createElement)("div",{className:_()(t,"wpsp-faq__outer-wrap","wpsp-block-".concat(a),"wpsp-faq-icon-".concat(e.attributes.iconAlign),"wpsp-faq-layout-".concat(e.attributes.layout),"wpsp-faq-expand-first-".concat(e.attributes.expandFirstItem),"wpsp-faq-inactive-other-".concat(e.attributes.inactiveOtherItems),s),"data-faqtoggle":e.attributes.enableToggle},!0===n?Object(r.createElement)("script",{type:"application/ld+json"},o):"",Object(r.createElement)("div",{className:"wpsp-faq__wrap wpsp-buttons-layout-wrap"},Object(r.createElement)(x.InnerBlocks.Content,null)))}}],O=i(5),j=i(1),z=wp.hooks.addFilter,q=Object(m.compose)(Object(f.withSelect)((function(e){return{selected:e("core/block-editor").getSelectedBlock()}}))),T=Object(m.createHigherOrderComponent)((function(e){return q((function(t){var i=l()({},(n()(t),t));return Object(r.createElement)(r.Fragment,null,Object(r.createElement)(e,i))}))}),"withFaq");Object(O.registerBlockType)("wpsp/faq",{title:wpsp_blocks_info.blocks["wpsp/faq"].title,description:wpsp_blocks_info.blocks["wpsp/faq"].description,icon:c.a.faq,category:wpsp_blocks_info.category,keywords:[Object(j.__)("faq","wp-schema-pro"),Object(j.__)("schema","wp-schema-pro"),Object(j.__)("wpsp","wp-schema-pro"),Object(j.__)("accordion","wp-schema-pro")],example:{innerBlocks:[{name:"wpsp/faq-child",innerBlocks:[{name:"wpsp/faq-child",attributes:{question:"What is FAQ?",answer:"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."}}]},{name:"wpsp/faq-child",innerBlocks:[{name:"wpsp/faq-child",attributes:{question:"What is FAQ?",answer:"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."}}]}]},attributes:p,deprecated:k,edit:y,supports:{anchor:!0},save:function(e){var t=e.className,i=e.attributes,a=i.block_id,o=i.schema,n=i.enableSchemaSupport,s=i.equalHeight?"wpsp-faq-equal-height":"";return Object(r.createElement)("div",{className:_()(t,"wpsp-faq__outer-wrap","wpsp-block-".concat(a),"wpsp-faq-icon-".concat(e.attributes.iconAlign),"wpsp-faq-layout-".concat(e.attributes.layout),"wpsp-faq-expand-first-".concat(e.attributes.expandFirstItem),"wpsp-faq-inactive-other-".concat(e.attributes.inactiveOtherItems),s),"data-faqtoggle":e.attributes.enableToggle,role:"tablist"},!0===n?Object(r.createElement)("script",{type:"application/ld+json"},o):"",Object(r.createElement)("div",{className:"wpsp-faq__wrap wpsp-buttons-layout-wrap"},Object(r.createElement)(x.InnerBlocks.Content,null)))}}),z("editor.BlockEdit","wpsp/faq",T);var E,S={block_id:{type:"string"},question:{type:"html",default:Object(j.__)("What is FAQ?")},answer:{type:"html",default:Object(j.__)("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")},icon:{type:"html",default:"fas fa-plus"},iconActive:{type:"html",default:"fas fa-minus"},layout:{type:"string",default:"accordion"},headingTag:{type:"html",selector:"span,p,h1,h2,h3,h4,h5,h6",default:"span"}},N=i(23),M=i.n(N),F=Object(u.lazy)((function(){return i.e(3).then(i.bind(null,74))})),H=Object(u.lazy)((function(){return i.e(2).then(i.bind(null,79))})),C=i(10);i(28),Object(O.registerBlockType)("wpsp/faq-child",{title:wpsp_blocks_info.blocks["wpsp/faq-child"].title,description:wpsp_blocks_info.blocks["wpsp/faq-child"].description,icon:c.a.faq,category:wpsp_blocks_info.category,parent:["wpsp/faq"],attributes:S,edit:function(e){var t=Object(u.useState)({isFocused:"false"}),i=M()(t,2),a=i[0],o=i[1];return Object(u.useEffect)((function(){e.setAttributes({block_id:e.clientId.substr(0,8)}),E=e.isSelected}),[]),Object(u.useEffect)((function(){!e.isSelected&&E&&a.isFocused&&o({isFocused:"false"}),e.isSelected&&!E&&o({isFocused:!0}),E=e.isSelected}),[e]),Object(r.createElement)(r.Fragment,null,Object(r.createElement)(u.Suspense,{fallback:Object(b.a)()},Object(r.createElement)(H,{state:a,parentProps:e}),Object(r.createElement)(F,null)))},supports:{anchor:!0},save:function(e){var t=e.className,i=e.attributes,a=i.block_id,o=i.question,n=i.answer,s=i.icon,l=i.iconActive,c=i.layout,p=i.headingTag;return Object(r.createElement)("div",{className:_()(t,"wpsp-faq-child__outer-wrap","wpsp-block-".concat(a))},Object(r.createElement)("div",{className:"wpsp-faq-child__wrapper"},Object(r.createElement)("div",{className:"wpsp-faq-item",role:"tab",tabIndex:"0"},Object(r.createElement)("div",{className:"wpsp-faq-questions-button wpsp-faq-questions"},"accordion"===c&&Object(r.createElement)(r.Fragment,null,Object(r.createElement)("span",{className:"wpsp-icon wpsp-faq-icon-wrap"},Object(C.a)(s)),Object(r.createElement)("span",{className:"wpsp-icon-active wpsp-faq-icon-wrap"},Object(C.a)(l))),Object(r.createElement)(x.RichText.Content,{tagName:p,value:o,className:"wpsp-question"})),Object(r.createElement)("div",{className:"wpsp-faq-content"},Object(r.createElement)("span",null,Object(r.createElement)(x.RichText.Content,{tagName:"p",value:n}))))))}});var P=[],L=[];P.push({add_required_tools:Object(j.__)("- A Computer.")}),L.push({add_required_materials:Object(j.__)("- A WordPress Website.")});var B,I={block_id:{type:"string"},overallAlignment:{type:"string",default:"left"},toolsTitle:{type:"string",default:Object(j.__)("Required Tools:")},materialTitle:{type:"string",default:Object(j.__)("Things Needed?")},stepsTitle:{type:"string",default:Object(j.__)("Add Steps:")},toolsCount:{type:"number",default:1},materialCount:{type:"number",default:1},tools:{type:"array",default:P},materials:{type:"array",default:L},showTotaltime:{type:"boolean",default:!1},showEstcost:{type:"boolean",default:!1},showTools:{type:"boolean",default:!1},showMaterials:{type:"boolean",default:!1},mainimage:{type:"object",default:{url:""}},estCost:{type:"string",default:Object(j.__)("Total Cost:")},timeNeeded:{type:"string",default:Object(j.__)("Total Time Needed :")},timeIn:{type:"string",default:Object(j.__)(" Minutes")},imgSize:{type:"string",default:"thumbnail"},timeSpace:{type:"number",default:5},costSpace:{type:"number",default:5},time:{type:"string",default:"30"},cost:{type:"string",default:"65"},headingTitle:{source:"html",selector:"h1,h2,h3,h4,h5,h6",default:Object(j.__)("Configure How-to Schema In Schema Pro.")},currencyType:{type:"string",default:" USD"},headingDesc:{source:"html",selector:"p",default:Object(j.__)("So to get started, you will just need to drag-n-drop the How-to Schema block in the Gutenberg editor.")},headingAlign:{type:"string",default:"left"},descriptionAlign:{type:"string",default:"left"},headingColor:{type:"string"},showEstcostcolor:{type:"string"},showTotaltimecolor:{type:"string",default:""},subHeadingColor:{type:"string",default:""},headingTag:{type:"string",default:"h3"},headSpace:{type:"number",default:15},headFontFamily:{type:"string",default:"Default"},headFontWeight:{type:"string"},headFontSubset:{type:"string"},headFontSizeType:{type:"string",default:"px"},headLineHeightType:{type:"string",default:"em"},headFontSize:{type:"number"},headFontSizeTablet:{type:"number"},headFontSizeMobile:{type:"number"},headLineHeight:{type:"number"},headLineHeightTablet:{type:"number"},headLineHeightMobile:{type:"number"},subHeadFontFamily:{type:"string",default:"Default"},subHeadFontWeight:{type:"string"},subHeadFontSubset:{type:"string"},subHeadFontSize:{type:"number"},subHeadFontSizeType:{type:"string",default:"px"},subHeadFontSizeTablet:{type:"number"},subHeadFontSizeMobile:{type:"number"},subHeadLineHeight:{type:"number"},subHeadLineHeightType:{type:"string",default:"em"},subHeadLineHeightTablet:{type:"number"},subHeadLineHeightMobile:{type:"number"},separatorSpace:{type:"number",default:15},headLoadGoogleFonts:{type:"boolean",default:!1},subHeadLoadGoogleFonts:{type:"boolean",default:!1},priceFontSizeType:{type:"string",default:"px"},priceFontSize:{type:"number"},priceFontSizeTablet:{type:"number"},priceFontSizeMobile:{type:"number"},priceFontFamily:{type:"string",default:"Default"},priceFontWeight:{type:"string"},priceFontSubset:{type:"string"},priceLineHeightType:{type:"string",default:"em"},priceLineHeight:{type:"number"},priceLineHeightTablet:{type:"number"},priceLineHeightMobile:{type:"number"},priceLoadGoogleFonts:{type:"boolean",default:!1},row_gap:{type:"number",default:20},step_gap:{type:"number",default:20},schema:{type:"string",default:""}},A=(i(19),Object(u.lazy)((function(){return Promise.all([i.e(0),i.e(9)]).then(i.bind(null,75))}))),D=Object(u.lazy)((function(){return i.e(8).then(i.bind(null,77))})),R=Object(m.compose)(Object(f.withSelect)((function(e,t){var i="";"undefined"!==t.attributes.mainimage&&null!==t.attributes.mainimage&&""!==t.attributes.mainimage&&(i=t.attributes.mainimage.url);var a={},o={},n={},s={"@context":"https://schema.org","@type":"HowTo",name:t.attributes.headingTitle,description:t.attributes.headingDesc,image:{"@type":"ImageObject",url:i,height:"406",width:"305"},totalTime:"",estimatedCost:[],tool:[],supply:[],step:[]};return t.attributes.showTotaltime&&(s.totalTime="PT"+t.attributes.time+"M"),t.attributes.showEstcost&&(s.estimatedCost={"@type":"MonetaryAmount",currency:t.attributes.currencyType,value:t.attributes.cost}),t.attributes.showTools&&t.attributes.tools.forEach((function(e,t){a={"@type":"HowToTool",name:e.add_required_tools},s.tool[t]=a})),t.attributes.showMaterials&&t.attributes.materials.forEach((function(e,t){o={"@type":"HowToSupply",name:e.add_required_materials},s.supply[t]=o})),e("core/block-editor").getBlocks(t.clientId).forEach((function(e,t){n={"@type":"HowToStep",url:e.attributes.ctaLink,name:e.attributes.howtoChildTitle,text:e.attributes.headingDesc,image:e.attributes.iconImage.url},s.step[t]=n})),{schemaJsonData:s}})))((function(e){return Object(u.useEffect)((function(){e.setAttributes({block_id:e.clientId.substr(0,8)}),e.setAttributes({schema:JSON.stringify(e.schemaJsonData)});var t=document.createElement("style");t.setAttribute("id","wpsp-how-to-schema-style-"+e.clientId.substr(0,8)),document.head.appendChild(t),B=e.schemaJsonData}),[]),Object(u.useEffect)((function(){JSON.stringify(e.schemaJsonData)!==JSON.stringify(B)&&(e.setAttributes({schema:JSON.stringify(e.schemaJsonData)}),B=e.schemaJsonData);var t=document.getElementById("wpsp-how-to-schema-style-"+e.clientId.substr(0,8));null!=t&&(t.innerHTML=function(e){var t=e.attributes,i=t.overallAlignment,a=t.headingTag,o=t.showTotaltimecolor,n=t.headingColor,s=t.headSpace,l=t.subHeadingColor,r=t.headFontFamily,c=t.headFontWeight,p=t.headFontSize,u=t.headFontSizeType,b=t.headFontSizeMobile,m=t.headFontSizeTablet,f=t.headLineHeight,w=t.headLineHeightType,g=t.headLineHeightMobile,y=t.headLineHeightTablet,v=t.subHeadFontFamily,_=t.subHeadFontWeight,x=t.subHeadFontSize,k=t.subHeadFontSizeType,O=t.subHeadFontSizeMobile,j=t.subHeadFontSizeTablet,z=t.subHeadLineHeight,q=t.subHeadLineHeightType,T=t.subHeadLineHeightMobile,E=t.subHeadLineHeightTablet,S=t.priceFontSizeType,N=t.priceFontSize,M=t.priceFontSizeTablet,F=t.priceFontSizeMobile,H=t.priceFontFamily,C=t.priceFontWeight,P=t.priceLineHeightType,L=t.priceLineHeight,B=t.priceLineHeightTablet,I=t.priceLineHeightMobile,A=t.timeSpace,D=t.costSpace,R=t.row_gap,W=t.step_gap,J={},G={},Q=""!==W?W:0;Q+=30;var U={" .block-editor-rich-text__editable.wpsp-howto-desc-text":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q),color:l}," .wpsp-how-to-main-wrap p":{"margin-bottom":h(R,"px")}," .wpsp-how-to-main-wrap .wpsp-howto__source-wrap":{"margin-bottom":h(R,"px")}," .wpsp-how-to-main-wrap span.wpsp-howto__time-wrap":{"margin-bottom":h(R,"px")}," .wpsp-how-to-main-wrap span.wpsp-howto__cost-wrap":{"margin-bottom":h(R,"px")}," .wpsp-how-to-tools .wpsp-how-to-tools-child__wrapper:last-child":{"margin-bottom":h(R,"px")}," .wpsp-how-to-materials .wpsp-how-to-materials-child__wrapper:last-child":{"margin-bottom":h(R,"px")}," .wpsp-howto-steps__wrap .block-editor-block-list__block.wp-block":{"margin-bottom":h(Q,"px")}," .block-editor-rich-text__editable.wpsp-howto-timeNeeded-text":{"font-family":H,"font-weight":C,"font-size":h(N,S),"line-height":h(L,P),color:o}," .block-editor-rich-text__editable.wpsp-howto-timeNeeded-value":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q),color:l,"margin-left":h(A,"px")}," .block-editor-rich-text__editable.wpsp-howto-timeINmin-text ":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q),color:l}," .block-editor-rich-text__editable.wpsp-howto-estcost-text":{"font-family":H,"font-weight":C,"font-size":h(N,S),"line-height":h(L,P),color:o}," .block-editor-rich-text__editable.wpsp-howto-estcost-value":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q),color:l,"margin-left":h(D,"px")}," .wpsp-howto-steps__wrap h4.block-editor-rich-text__editable":{"font-family":H,"font-weight":C,"font-size":h(N,S),"line-height":h(L,P)}," .wpsp-howto-steps__wrap p.block-editor-rich-text__editable":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q)}," .block-editor-rich-text__editable.wpsp-howto-estcost-type":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q),color:l}," .block-editor-rich-text__editable.wpsp-howto-req-tools-text":{"font-family":H,"font-weight":C,"font-size":h(N,S),"line-height":h(L,P),color:o}," .block-editor-rich-text__editable.wpsp-tools__label":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q),color:l}," .block-editor-rich-text__editable.wpsp-howto-req-materials-text":{"font-family":H,"font-weight":C,"font-size":h(N,S),"line-height":h(L,P),color:o}," .block-editor-rich-text__editable.wpsp-howto-req-steps-text":{"font-family":H,"font-weight":C,"font-size":h(N,S),"line-height":h(L,P),color:o}," .block-editor-rich-text__editable.wpsp-materials__label":{"font-family":v,"font-weight":_,"font-size":h(x,k),"line-height":h(z,q),color:l}};U[" .wpsp-how-to-main-wrap"]={"text-align":i,display:"block"},U[" "+a+".block-editor-rich-text__editable.wpsp-howto-heading-text"]={"font-family":r,"font-weight":c,"font-size":h(p,u),"line-height":h(f,w),color:n,"margin-bottom":h(s,"px")},G[" "+a+".block-editor-rich-text__editable.wpsp-howto-heading-text"]={"font-size":h(b,u),"line-height":h(g,w)},J[" "+a+".block-editor-rich-text__editable.wpsp-howto-heading-text"]={"font-size":h(m,u),"line-height":h(y,w)},G={" .block-editor-rich-text__editable.wpsp-howto-desc-text":{"font-size":h(O,k),"line-height":h(T,q)}," .block-editor-rich-text__editable.wpsp-howto-timeNeeded-text":{"font-size":h(F,S),"line-height":h(I,P)}," .block-editor-rich-text__editable.wpsp-howto-timeNeeded-value":{"font-size":h(O,k),"line-height":h(T,q)}," .block-editor-rich-text__editable.wpsp-howto-timeINmin-text ":{"font-size":h(O,k),"line-height":h(T,q)}," .block-editor-rich-text__editable.wpsp-howto-estcost-text":{"font-size":h(F,S),"line-height":h(I,P)}," .block-editor-rich-text__editable.wpsp-howto-estcost-value":{"font-size":h(O,k),"line-height":h(T,q)}," .block-editor-rich-text__editable.wpsp-howto-estcost-type":{"font-size":h(O,k),"line-height":h(T,q)}," .block-editor-rich-text__editable.wpsp-tools__label":{"font-size":h(F,S),"line-height":h(I,P)}," .block-editor-rich-text__editable.wpsp-howto-req-tools-text":{"font-size":h(F,S),"line-height":h(I,P)}," .block-editor-rich-text__editable.wpsp-materials__label":{"font-size":h(F,S),"line-height":h(I,P)}," .block-editor-rich-text__editable.wpsp-howto-req-materials-text":{"font-size":h(F,S),"line-height":h(I,P)}},J={" .block-editor-rich-text__editable.wpsp-howto-desc-text":{"font-size":h(j,k),"line-height":h(E,q)}," .block-editor-rich-text__editable.wpsp-howto-timeNeeded-text":{"font-size":h(M,S),"line-height":h(B,P)}," .block-editor-rich-text__editable.wpsp-howto-timeNeeded-value":{"font-size":h(j,k),"line-height":h(E,q)}," .block-editor-rich-text__editable.wpsp-howto-timeINmin-text ":{"font-size":h(j,k),"line-height":h(E,q)}," .block-editor-rich-text__editable.wpsp-howto-estcost-text":{"font-size":h(M,S),"line-height":h(B,P)}," .block-editor-rich-text__editable.wpsp-howto-estcost-value":{"font-size":h(j,k),"line-height":h(E,q)}," .block-editor-rich-text__editable.wpsp-howto-estcost-type":{"font-size":h(j,k),"line-height":h(E,q)}," .block-editor-rich-text__editable.wpsp-tools__label":{"font-size":h(M,S),"line-height":h(B,P)}," .block-editor-rich-text__editable.wpsp-howto-req-tools-text":{"font-size":h(M,S),"line-height":h(B,P)}," .block-editor-rich-text__editable.wpsp-materials__label":{"font-size":h(M,S),"line-height":h(B,P)}," .block-editor-rich-text__editable.wpsp-howto-req-materials-text":{"font-size":h(M,S),"line-height":h(B,P)}};var V=".block-editor-page #wpwrap .wpsp-block-".concat(e.clientId.substr(0,8)),$=d(U,V);return($+=d(J,V,!0,"tablet"))+d(G,V,!0,"mobile")}(e))}),[e]),Object(r.createElement)(u.Suspense,{fallback:Object(b.a)()},Object(r.createElement)(A,{parentProps:e}),Object(r.createElement)(D,{parentProps:e}))})),W=wp.blockEditor,J=W.RichText,G=W.InnerBlocks,Q=[{attributes:I,save:function(e){var t=e.attributes,i=e.className,a=t.block_id,o=t.headingTitle,n=t.headingDesc,s=t.headingTag,l=t.timeNeeded,c=t.time,p=t.timeIn,d=t.estCost,h=t.cost,u=t.currencyType,b=t.mainimage,m=t.toolsTitle,f=t.stepsTitle,w=t.materialTitle,g=t.tools,y=t.materials,v=t.schema,x=t.showTotaltime,k=t.showEstcost,O=t.showTools,j=t.showMaterials,z="",q="";void 0!==t.mainimage&&null!==t.mainimage&&""!==t.mainimage&&(z=t.mainimage.url,q=t.mainimage.title);var T="";if(""!==z){var E=t.mainimage.sizes,S=t.imgSize;T=void 0!==E&&void 0!==E[S]?E[S].url:z}var N="";return b&&b.url&&(N=Object(r.createElement)("img",{className:"wpsp-howto__source-image",src:T,title:q})),Object(r.createElement)("div",{className:_()(i,"wpsp-block-".concat(a))},Object(r.createElement)("script",{type:"application/ld+json"},v),Object(r.createElement)("div",{className:"wpsp-how-to-main-wrap"},Object(r.createElement)("div",{className:"wpsp-howto__wrap"},Object(r.createElement)(J.Content,{value:o,tagName:s,className:"wpsp-howto-heading-text"}),Object(r.createElement)(J.Content,{value:n,tagName:"p",className:"wpsp-howto-desc-text"}),b.url&&Object(r.createElement)("div",{className:"wpsp-howto__source-wrap"},N),x&&Object(r.createElement)("span",{className:"wpsp-howto__time-wrap"},Object(r.createElement)(J.Content,{value:l,tagName:"h4",className:"wpsp-howto-timeNeeded-text"}),Object(r.createElement)(J.Content,{value:c,tagName:"p",className:"wpsp-howto-timeNeeded-value"}),Object(r.createElement)(J.Content,{tagName:"p",value:p,className:"wpsp-howto-timeINmin-text"})),k&&Object(r.createElement)("span",{className:"wpsp-howto__cost-wrap"},Object(r.createElement)(J.Content,{value:d,tagName:"h4",className:"wpsp-howto-estcost-text"}),Object(r.createElement)(J.Content,{value:h,tagName:"p",className:"wpsp-howto-estcost-value"}),Object(r.createElement)(J.Content,{tagName:"p",value:u,className:"wpsp-howto-estcost-type"}))),O&&Object(r.createElement)("div",{className:"wpsp-how-to-tools__wrap"},Object(r.createElement)(J.Content,{value:m,tagName:"h4",className:"wpsp-howto-req-tools-text"})),O&&Object(r.createElement)("div",{className:"wpsp-tools__wrap"},g.map((function(e,t){return Object(r.createElement)("div",{className:_()("wpsp-how-to-tools-".concat(t),"wpsp-how-to-tools-child__wrapper"),key:t},Object(r.createElement)("div",{className:"wpsp-tools"},Object(r.createElement)(J.Content,{tagName:"div",value:e.add_required_tools,className:"wpsp-tools__label"})))}))),j&&Object(r.createElement)("div",{className:"wpsp-how-to-materials__wrap"},Object(r.createElement)(J.Content,{value:w,tagName:"h4",className:"wpsp-howto-req-materials-text"})),j&&Object(r.createElement)("div",{className:"wpsp-how-to-materials"},y.map((function(e,t){return Object(r.createElement)("div",{className:_()("wpsp-how-to-materials-".concat(t),"wpsp-how-to-materials-child__wrapper")},Object(r.createElement)("div",{className:"wpsp-materials"},Object(r.createElement)(J.Content,{tagName:"div",value:e.add_required_materials,className:"wpsp-materials__label"})))}))),Object(r.createElement)("div",{className:"wpsp-how-to-steps__wrap"},Object(r.createElement)(J.Content,{value:f,tagName:"h4",className:"wpsp-howto-req-steps-text"}),Object(r.createElement)("div",{className:"wpsp-howto-steps__wrap"},Object(r.createElement)(G.Content,null)))))}}];Object(O.registerBlockType)("wpsp/how-to",{title:wpsp_blocks_info.blocks["wpsp/how-to"].title,description:wpsp_blocks_info.blocks["wpsp/how-to"].description,icon:c.a.how_to,category:wpsp_blocks_info.category,keywords:[Object(j.__)("how to"),Object(j.__)("schema"),Object(j.__)("wpsp")],supports:{anchor:!0},example:{innerBlocks:[{name:"wpsp/how-to-child",attributes:{howtoChildTitle:"Enter a step title",iconimgPosition:"left",source_type:"image",seperatorStyle:"none",ctaType:"all",headingTag:"h4"}},{name:"wpsp/how-to-child",attributes:{howtoChildTitle:"Enter a step title",iconimgPosition:"left",source_type:"image",seperatorStyle:"none",ctaType:"all",headingTag:"h4"}}]},attributes:I,deprecated:Q,edit:R,save:function(e){var t=e.attributes,i=e.className,a=t.block_id,o=t.headingTitle,n=t.headingDesc,s=t.headingTag,l=t.timeNeeded,c=t.time,p=t.timeIn,d=t.estCost,h=t.cost,u=t.currencyType,b=t.mainimage,m=t.toolsTitle,f=t.stepsTitle,w=t.materialTitle,g=t.tools,y=t.materials,v=t.schema,k=t.showTotaltime,O=t.showEstcost,j=t.showTools,z=t.showMaterials,q="",T="";void 0!==t.mainimage&&null!==t.mainimage&&""!==t.mainimage&&(q=t.mainimage.url,T=t.mainimage.title);var E="";if(""!==q){var S=t.mainimage.sizes,N=t.imgSize;E=void 0!==S&&void 0!==S[N]?S[N].url:q}var M="";return b&&b.url&&(M=Object(r.createElement)("img",{className:"wpsp-howto__source-image",src:E,title:T,alt:""})),Object(r.createElement)("div",{className:_()(i,"wpsp-block-".concat(a))},Object(r.createElement)("script",{type:"application/ld+json"},v),Object(r.createElement)("div",{className:"wpsp-how-to-main-wrap"},Object(r.createElement)("div",{className:"wpsp-howto__wrap"},Object(r.createElement)(x.RichText.Content,{value:o,tagName:s,className:"wpsp-howto-heading-text"}),Object(r.createElement)(x.RichText.Content,{value:n,tagName:"p",className:"wpsp-howto-desc-text"}),b.url&&Object(r.createElement)("div",{className:"wpsp-howto__source-wrap"},M),k&&Object(r.createElement)("span",{className:"wpsp-howto__time-wrap"},Object(r.createElement)(x.RichText.Content,{value:l,tagName:"h4",className:"wpsp-howto-timeNeeded-text"}),Object(r.createElement)(x.RichText.Content,{value:c,tagName:"p",className:"wpsp-howto-timeNeeded-value"}),Object(r.createElement)(x.RichText.Content,{tagName:"p",value:p,className:"wpsp-howto-timeINmin-text"})),O&&Object(r.createElement)("span",{className:"wpsp-howto__cost-wrap"},Object(r.createElement)(x.RichText.Content,{value:d,tagName:"h4",className:"wpsp-howto-estcost-text"}),Object(r.createElement)(x.RichText.Content,{value:h,tagName:"p",className:"wpsp-howto-estcost-value"}),Object(r.createElement)(x.RichText.Content,{tagName:"p",value:u,className:"wpsp-howto-estcost-type"}))),j&&Object(r.createElement)("div",{className:"wpsp-how-to-tools__wrap"},Object(r.createElement)(x.RichText.Content,{value:m,tagName:"h4",className:"wpsp-howto-req-tools-text"})),j&&Object(r.createElement)("div",{className:"wpsp-tools__wrap"},g.map((function(e,t){return Object(r.createElement)("div",{className:_()("wpsp-how-to-tools-".concat(t),"wpsp-how-to-tools-child__wrapper"),key:t},Object(r.createElement)("div",{className:"wpsp-tools"},Object(r.createElement)(x.RichText.Content,{tagName:"div",value:e.add_required_tools,className:"wpsp-tools__label"})))}))),z&&Object(r.createElement)("div",{className:"wpsp-how-to-materials__wrap"},Object(r.createElement)(x.RichText.Content,{value:w,tagName:"h4",className:"wpsp-howto-req-materials-text"})),z&&Object(r.createElement)("div",{className:"wpsp-how-to-materials"},y.map((function(e,t){return Object(r.createElement)("div",{className:_()("wpsp-how-to-materials-".concat(t),"wpsp-how-to-materials-child__wrapper"),key:t},Object(r.createElement)("div",{className:"wpsp-materials"},Object(r.createElement)(x.RichText.Content,{tagName:"div",value:e.add_required_materials,className:"wpsp-materials__label"})))}))),Object(r.createElement)("div",{className:"wpsp-how-to-steps__wrap"},Object(r.createElement)(x.RichText.Content,{value:f,tagName:"h4",className:"wpsp-howto-req-steps-text"}),Object(r.createElement)("div",{className:"wpsp-howto-steps__wrap"},Object(r.createElement)(x.InnerBlocks.Content,null)))))}});var U=Object(u.lazy)((function(){return Promise.all([i.e(0),i.e(7)]).then(i.bind(null,76))})),V=Object(u.lazy)((function(){return i.e(6).then(i.bind(null,80))})),$=i(11),K=i.n($),X=i(12),Y=i(13),Z=i(14),ee=i(15),te=i(16),ie=i(17),ae={howtoChildTitle:{source:"html",selector:"h1,h2,h3,h4,h5,h6",default:"Enter a step title"},headingDesc:{source:"html",selector:"p",default:"Click here to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit."},headingAlign:{type:"string",default:"left"},headingColor:{type:"string"},subHeadingColor:{type:"string"},iconimgPosition:{type:"string",default:"above-title"},headingTag:{type:"string",default:"h4"},headFontSize:{type:"number"},headFontSizeType:{type:"string",default:"px"},headFontSizeTablet:{type:"number"},headFontSizeMobile:{type:"number"},headFontFamily:{type:"string",default:"Default"},headFontWeight:{type:"string"},headFontSubset:{type:"string"},headLineHeightType:{type:"string",default:"em"},headLineHeight:{type:"number"},headLineHeightTablet:{type:"number"},headLineHeightMobile:{type:"number"},headLoadGoogleFonts:{type:"boolean",default:!1},subHeadFontSize:{type:"number"},subHeadFontSizeType:{type:"string",default:"px"},subHeadFontSizeTablet:{type:"number"},subHeadFontSizeMobile:{type:"number"},subHeadFontFamily:{type:"string",default:"Default"},subHeadFontWeight:{type:"string"},subHeadFontSubset:{type:"string"},subHeadLineHeightType:{type:"string",default:"em"},subHeadLineHeight:{type:"number"},subHeadLineHeightTablet:{type:"number"},subHeadLineHeightMobile:{type:"number"},subHeadLoadGoogleFonts:{type:"boolean",default:!1},headSpace:{type:"number",default:10},subHeadSpace:{type:"number",default:10},seperatorSpace:{type:"number",default:10},iconimgBorderRadius:{type:"number",default:0},sourceType:{type:"string",default:"image"},block_id:{type:"string",default:"not_set"},ctaTarget:{type:"boolean",default:!1},ctaIcon:{type:"string",default:""},ctaIconPosition:{type:"string",default:"after"},ctaIconSpace:{type:"number",default:5},seperatorPosition:{type:"string",default:"after_title"},seperatorStyle:{type:"string",default:"none"},seperatorColor:{type:"string",default:"#333"},seperatorWidth:{type:"number",default:30},separatorWidthType:{type:"string",default:"%"},seperatorThickness:{type:"number",default:2},ctaType:{type:"string",default:"all"},ctaText:{type:"string",default:"Read More"},ctaLink:{type:"string",default:"#"},ctaLinkColor:{type:"string",default:"#333"},ctaFontSize:{type:"number"},ctaFontSizeType:{type:"string",default:"px"},ctaFontSizeMobile:{type:"number"},ctaFontSizeTablet:{type:"number"},ctaFontFamily:{type:"string",default:"Default"},ctaFontWeight:{type:"string"},ctaFontSubset:{type:"string"},ctaLoadGoogleFonts:{type:"boolean",default:!1},ctaBtnLinkColor:{type:"string",default:"#333"},ctaLinkHoverColor:{type:"string",default:""},ctaBgColor:{type:"string",default:"transparent"},ctaBgHoverColor:{type:"string",default:"transparent"},ctaBorderColor:{type:"string",default:"#333"},ctaBorderhoverColor:{type:"string",default:""},ctaBorderStyle:{type:"string",default:"solid"},ctaBtnVertPadding:{type:"number",default:10},ctaBtnHrPadding:{type:"number",default:14},ctaBorderWidth:{type:"number",default:1},ctaBorderRadius:{type:"number",default:0},iconLeftMargin:{type:"number",default:0},iconRightMargin:{type:"number",default:0},iconTopMargin:{type:"number",default:10},iconBottomMargin:{type:"number",default:10},iconImage:{type:"object",default:{url:"",alt:"StepBox placeholder img"}},imageSize:{type:"string",default:"thumbnail"},imageWidth:{type:"number",default:120},imageWidthType:{type:"boolean",default:!1},showTitle:{type:"boolean",default:!0},showDesc:{type:"boolean",default:!0}},oe=(i(32),wp.blockEditor.RichText,wp.element.Fragment),ne=[{attributes:ae,save:function(e){var t=e.attributes,i=t.iconimgPosition,a=t.block_id,o=t.seperatorStyle,n=t.ctaType,s=t.ctaLink,l=t.ctaTarget,c=t.className,p=t.howtoChildTitle,d=t.headingDesc,h=t.showTitle,u=t.showDesc,b=t.seperatorPosition,m=Object(r.createElement)(ie.a,{attributes:e.attributes}),f=m,w=b,g=Object(r.createElement)(ee.a,{attributes:e.attributes}),y=!0;"after_icon"!=b||"above-title"!=i&&"below-title"!=i||(y=!1,f=Object(r.createElement)(oe,null,m,"none"!==o&&g)),"after_icon"!=b||"above-title"===i&&"below-title"===i||(w="after_title"),"below-title"==i&&"after_title"==b&&(y=!1,f=Object(r.createElement)(oe,null,"none"!==o&&g,m));var v=Object(r.createElement)(oe,null,"none"!==o&&"after_title"==w&&y&&g,Object(r.createElement)("div",{className:"wpsp-ifb-text-wrap"},u&&""!==d&&Object(r.createElement)(Y.a,{attributes:e.attributes,setAttributes:"not_set"}),"none"!==o&&"after_desc"==w&&g,"none"!==n&&Object(r.createElement)(te.a,{attributes:e.attributes}))),x=Object(r.createElement)("div",{className:"wpsp-ifb-title-wrap"},"none"!==o&&"after_prefix"==w&&g,h&&""!==p&&Object(r.createElement)(X.a,{attributes:e.attributes,setAttributes:"not_set"})),k=Object(r.createElement)("div",{className:_.a.apply(void 0,["wpsp-how-to__content-wrap","all"==n?" wpsp-how-to_cta-type-all":""].concat(K()(Object(Z.a)(e.attributes))))},Object(r.createElement)("div",{className:"wpsp-ifb-content"},"above-title"===i&&Object(r.createElement)(oe,null,f,x,v),"below-title"===i&&Object(r.createElement)(oe,null,x,f,v),"below-desc"===i&&Object(r.createElement)(oe,null,x,v,f))),O="";return l&&(O="_blank"),Object(r.createElement)("div",{className:_()(c,"wpsp-howto-child__outer-wrap","wpsp-block-".concat(a))},"all"==n&&Object(r.createElement)("a",{href:s,className:"wpsp-howto-child-link-wrap wpsp-how-to__link-to-all",target:O,"aria-label":"HowToChild Link",rel:"noopener noreferrer"}),k)}}];Object(O.registerBlockType)("wpsp/how-to-child",{title:wpsp_blocks_info.blocks["wpsp/how-to-child"].title,description:wpsp_blocks_info.blocks["wpsp/how-to-child"].description,icon:c.a.how_to,parent:["wpsp/how-to"],supports:{anchor:!0},category:wpsp_blocks_info.category,example:{innerBlocks:[{name:"wpsp/how-to-child",attributes:{howtoChildTitle:"Enter a step title",headingDesc:"So to get started, you will just need to drag-n-drop the How-to Schema block in the Gutenberg editor.",iconimgPosition:"left"}},{name:"wpsp/how-to-child",attributes:{howtoChildTitle:"Enter a step title",headingDesc:"So to get started, you will just need to drag-n-drop the How-to Schema block in the Gutenberg editor.",iconimgPosition:"left"}}]},attributes:ae,deprecated:ne,edit:function(e){return Object(u.useEffect)((function(){e.setAttributes({block_id:e.clientId.substr(0,8)}),e.setAttributes({classMigrate:!0});var t=document.createElement("style");t.setAttribute("id","wpsp-info-box-style-"+e.clientId.substr(0,8)),document.head.appendChild(t)}),[]),Object(u.useEffect)((function(){var t=document.getElementById("wpsp-info-box-style-"+e.clientId.substr(0,8));null!=t&&(t.innerHTML=function(e){var t=e.attributes,i=t.headingAlign,a=t.headingColor,o=t.subHeadingColor,n=t.headFontSize,s=t.headFontSizeType,l=t.headFontSizeTablet,r=t.headFontSizeMobile,c=t.headFontFamily,p=t.headFontWeight,u=t.headLineHeightType,b=t.headLineHeight,m=t.headLineHeightTablet,f=t.headLineHeightMobile,w=t.subHeadFontSize,g=t.subHeadFontSizeType,y=t.subHeadFontSizeTablet,v=t.subHeadFontSizeMobile,_=t.subHeadFontFamily,x=t.subHeadFontWeight,k=t.subHeadLineHeightType,O=t.subHeadLineHeight,j=t.subHeadLineHeightTablet,z=t.subHeadLineHeightMobile,q=t.separatorWidthType,T=t.headSpace,E=t.subHeadSpace,S=t.iconimgPosition,N=t.iconimgBorderRadius,M=t.seperatorStyle,F=t.seperatorWidth,H=t.seperatorColor,C=t.seperatorThickness,P=t.seperatorSpace,L=t.ctaLinkColor,B=t.ctaFontSize,I=t.ctaFontSizeType,A=t.ctaFontSizeMobile,D=t.ctaFontSizeTablet,R=t.ctaFontFamily,W=t.ctaFontWeight,J=t.ctaBtnLinkColor,G=t.ctaBgColor,Q=t.ctaBtnVertPadding,U=t.ctaBtnHrPadding,V=t.ctaBorderStyle,$=t.ctaBorderColor,K=t.ctaBorderWidth,X=t.ctaBorderRadius,Y=t.iconLeftMargin,Z=t.iconRightMargin,ee=t.iconTopMargin,te=t.iconBottomMargin,ie=t.imageWidth,ae=t.imageWidthType,oe=t.ctaLinkHoverColor,ne=t.ctaBgHoverColor,se=t.ctaBorderhoverColor,le=t.ctaIconSpace,re=t.blockPadding,ce={" .wpsp-how-to__content-wrap .wpsp-ifb-imgicon-wrap":{"margin-left":h(Y,"px"),"margin-right":h(Z,"px"),"margin-top":h(ee,"px"),"margin-bottom":h(te,"px")}," .wpsp-howto-child .wpsp-ifb-image-content img":{"border-radius":h(N,"px")}," .wpsp-howto-child-cta-link":{"font-size":h(B,I),"font-family":R,"font-weight":W,color:L}," .wpsp-howto-child-cta-link:hover":{color:oe}," .wpsp-howto-child-cta-link .wpsp-ifb-text-icon":{"font-size":h(B,I),height:h(B,I),width:h(B,I),"line-height":h(B,I)}," .wpsp-howto-child-cta-link .wpsp-ifb-button-icon":{"font-size":h(B,I),height:h(B,I),width:h(B,I),"line-height":h(B,I)}," .wpsp-howto-child-cta-link svg":{fill:L}," .wpsp-howto-child-cta-link:hover svg":{fill:oe}," .wpsp-ifb-button-wrapper .wpsp-howto-child-cta-link":{color:J,"background-color":G,"border-style":V,"border-color":$,"border-radius":h(X,"px"),"border-width":h(K,"px"),"padding-top":h(Q,"px"),"padding-bottom":h(Q,"px"),"padding-left":h(U,"px"),"padding-right":h(U,"px")}," .wpsp-ifb-button-wrapper:hover .wpsp-howto-child-cta-link":{color:oe,"background-color":ne,"border-color":se}," .wpsp-ifb-button-wrapper .wpsp-howto-child-cta-link svg":{fill:J}," .wpsp-ifb-button-wrapper .wpsp-howto-child-cta-link:hover svg":{fill:oe}," .block-editor-rich-text__editable.wpsp-ifb-title":{"font-size":h(n,s),"font-family":c,"font-weight":p,"line-height":h(b,u),color:a,"margin-bottom":h(T,"px")}," .wpsp-ifb-text-wrap .block-editor-rich-text__editable.wpsp-ifb-desc":{"font-size":h(w,g),"font-family":_,"font-weight":x,"line-height":h(O,k),color:o,"margin-bottom":h(E,"px")}," .wpsp-ifb-separator":{width:h(F,q),"border-top-width":h(C,"px"),"border-top-color":H,"border-top-style":M}," .wpsp-ifb-separator-parent":{"margin-bottom":h(P,"px")}," .wpsp-ifb-content":{padding:void 0!==re?re+"px":"inherit"}," .wpsp-ifb-align-icon-after":{"margin-left":h(le,"px")}," .wpsp-ifb-align-icon-before":{"margin-right":h(le,"px")}};ae&&(ce[" .wpsp-ifb-image-content img"]={width:h(ie,"px"),"max-width":h(ie,"px")}),"above-title"!==S&&"below-title"!==S||(ce[" .wpsp-how-to__content-wrap"]={"text-align":i});var pe={" .wpsp-ifb-text-wrap .block-editor-rich-text__editable.wpsp-ifb-desc":{"font-size":h(y,g),"line-height":h(j,k)}," .block-editor-rich-text__editable.wpsp-ifb-title":{"font-size":h(l,s),"line-height":h(m,u)}," .wpsp-howto-child-cta-link":{"font-size":h(D,I)}," .wpsp-howto-child-cta-link .wpsp-ifb-text-icon":{"font-size":h(D,I),height:h(D,I),"line-height":h(D,I),width:h(D,I)}," .wpsp-howto-child-cta-link .wpsp-ifb-button-icon":{"font-size":h(D,I),height:h(D,I),"line-height":h(D,I),width:h(D,I)}},de={" .wpsp-ifb-text-wrap .block-editor-rich-text__editable.wpsp-ifb-desc":{"font-size":h(v,g),"line-height":h(z,k)}," .block-editor-rich-text__editable.wpsp-ifb-title":{"font-size":h(r,s),"line-height":h(f,u)}," .wpsp-howto-child-cta-link":{"font-size":h(A,I)}," .wpsp-howto-child-cta-link .wpsp-ifb-text-icon":{"font-size":h(A,I),height:h(A,I),"line-height":h(A,I),width:h(A,I)}," .wpsp-howto-child-cta-link .wpsp-ifb-button-icon":{"font-size":h(A,I),height:h(A,I),"line-height":h(A,I),width:h(A,I)}},he=".block-editor-page #wpwrap .wpsp-block-".concat(e.clientId.substr(0,8)),ue=d(ce,he);return(ue+=d(pe,he,!0,"tablet"))+d(de,he,!0,"mobile")}(e))}),[e]),Object(r.createElement)(u.Suspense,{fallback:Object(b.a)()},Object(r.createElement)(U,{parentProps:e}),Object(r.createElement)(V,{parentProps:e}))},save:function(e){var t=e.attributes,i=t.iconimgPosition,a=t.block_id,o=t.seperatorStyle,n=t.ctaType,s=t.ctaLink,l=t.ctaTarget,c=t.className,p=t.howtoChildTitle,d=t.headingDesc,h=t.showTitle,u=t.showDesc,b=t.seperatorPosition,m=Object(r.createElement)(ie.a,{attributes:e.attributes}),f=m,w=b,g=Object(r.createElement)(ee.a,{attributes:e.attributes}),y=!0;"after_icon"!==b||"above-title"!==i&&"below-title"!==i||(y=!1,f=Object(r.createElement)(r.Fragment,null,m,"none"!==o&&g)),"after_icon"!==b||"above-title"===i&&"below-title"===i||(w="after_title"),"below-title"===i&&"after_title"===b&&(y=!1,f=Object(r.createElement)(r.Fragment,null,"none"!==o&&g,m));var v=Object(r.createElement)(r.Fragment,null,"none"!==o&&"after_title"===w&&y&&g,Object(r.createElement)("div",{className:"wpsp-ifb-text-wrap"},u&&""!==d&&Object(r.createElement)(Y.a,{attributes:e.attributes,setAttributes:"not_set"}),"none"!==o&&"after_desc"===w&&g,"none"!==n&&Object(r.createElement)(te.a,{attributes:e.attributes}))),x=Object(r.createElement)("div",{className:"wpsp-ifb-title-wrap"},"none"!==o&&"after_prefix"===w&&g,h&&""!==p&&Object(r.createElement)(X.a,{attributes:e.attributes,setAttributes:"not_set"})),k=Object(r.createElement)("div",{className:_.a.apply(void 0,["wpsp-how-to__content-wrap","all"===n?" wpsp-how-to_cta-type-all":""].concat(K()(Object(Z.a)(e.attributes))))},Object(r.createElement)("div",{className:"wpsp-ifb-content"},"above-title"===i&&Object(r.createElement)(r.Fragment,null,f,x,v),"below-title"===i&&Object(r.createElement)(r.Fragment,null,x,f,v),"below-desc"===i&&Object(r.createElement)(r.Fragment,null,x,v,f))),O="";return l&&(O="_blank"),Object(r.createElement)("div",{className:_()(c,"wpsp-howto-child__outer-wrap","wpsp-block-".concat(a))},"all"===n&&Object(r.createElement)("a",{href:s,className:"wpsp-howto-child-link-wrap wpsp-how-to__link-to-all",target:O,"aria-label":"HowToChild Link",rel:"noopener noreferrer"}),k)}}),i.p=wpsp_blocks_info.wpsp_base_url+"dist/",Object(O.updateCategory)("wpsp",{icon:c.a.logo})},function(e,t){e.exports=window.wp.components},function(e,t){e.exports=window.ReactDOM}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/render.js b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/render.js new file mode 100644 index 00000000..b57c9ecf --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/render.js @@ -0,0 +1 @@ +(window.webpackJsonp_wp_schema_pro=window.webpackJsonp_wp_schema_pro||[]).push([[2],{39:function(e,t,a){"use strict";var n,p=function(){var e={};return function(t){if(void 0===e[t]){var a=document.querySelector(t);if(window.HTMLIFrameElement&&a instanceof window.HTMLIFrameElement)try{a=a.contentDocument.head}catch(e){a=null}e[t]=a}return e[t]}}(),i=[];function c(e){for(var t=-1,a=0;a0&&!--m&&(n(),n=null)};var b=v;t.default=r.a.memo((function(e,t){Object(s.useLayoutEffect)((function(){return b.use(),function(){b.unuse()}}),[]);var a=e=e.parentProps,n=a.attributes,i=a.setAttributes,r=n.question,d=n.answer,w=n.icon,h=n.iconActive,q=n.layout,m=n.headingTag;return Object(p.createElement)("div",{className:c()("wpsp-faq-child__outer-wrap","wpsp-block-".concat(e.clientId.substr(0,8)),e.isSelected&&!1!==t.isFocused?"wpsp-faq__active":"")},Object(p.createElement)(s.Suspense,{fallback:Object(u.a)()},Object(p.createElement)("div",{className:"wpsp-faq-child__wrapper"},Object(p.createElement)("div",{className:"wpsp-faq-item",role:"tab",tabIndex:"0"},Object(p.createElement)("div",{className:"wpsp-faq-questions-button wpsp-faq-questions"},"accordion"===q&&Object(p.createElement)(p.Fragment,null,Object(p.createElement)("span",{className:"wpsp-icon wpsp-faq-icon-wrap"},Object(o.a)(w)),Object(p.createElement)("span",{className:"wpsp-icon-active wpsp-faq-icon-wrap"},Object(o.a)(h))),Object(p.createElement)(f.RichText,{tagName:"span"!==m?m:"div",placeholder:Object(l.__)("Question"),value:r,onChange:function(e){return i({question:e})},className:"wpsp-question",multiline:!1,allowedFormats:["core/bold","core/italic","core/strikethrough"]})),Object(p.createElement)("div",{className:"wpsp-faq-content"},Object(p.createElement)("span",null,Object(p.createElement)(f.RichText,{tagName:"p",placeholder:Object(l.__)("Answer"),value:d,onChange:function(e){return i({answer:e})},multiline:!1,allowedFormats:["core/bold","core/italic","core/strikethrough","core/link"]})))))))}))}}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/settings.js b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/settings.js new file mode 100644 index 00000000..0571c6df --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq-child/settings.js @@ -0,0 +1 @@ +(window.webpackJsonp_wp_schema_pro=window.webpackJsonp_wp_schema_pro||[]).push([[3],{74:function(e,t,n){"use strict";n.r(t);var o=n(0),c=n(2),s=n(3),p=n.n(s),r=n(1);t.default=p.a.memo((function(){return Object(o.createElement)(c.InspectorControls,null,(function(){return Object(o.createElement)("p",{className:"wpsp-settings-notice"},Object(r.__)("For the styling options please select the parent block from the Block Navigation."))}))}))}}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/render.js b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/render.js new file mode 100644 index 00000000..8f649f8d --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/render.js @@ -0,0 +1 @@ +(window.webpackJsonp_wp_schema_pro=window.webpackJsonp_wp_schema_pro||[]).push([[4],{39:function(t,e,n){"use strict";var o,a=function(){var t={};return function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}t[e]=n}return t[e]}}(),i=[];function r(t){for(var e=-1,n=0;n.block-editor-block-list__layout>.wp-block{width:auto;padding-left:0;padding-right:0;margin-top:0;margin-bottom:0}.edit-post-visual-editor [data-type="wpsp/faq"] .block-editor-inner-blocks>.block-editor-block-list__layout{padding:11px;border:1px solid #d2d2d2;display:block}.edit-post-visual-editor [data-type="wpsp/faq"] .wpsp-faq-layout-grid .block-editor-inner-blocks>.block-editor-block-list__layout{display:grid}.edit-post-visual-editor [data-type="wpsp/faq"] .wpsp-faq-layout-grid.wpsp-faq-equal-height .block-editor-inner-blocks>.block-editor-block-list__layout .block-editor-block-list__block,.edit-post-visual-editor [data-type="wpsp/faq"] .wpsp-faq-layout-grid.wpsp-faq-equal-height .block-editor-inner-blocks>.block-editor-block-list__layout .wpsp-faq-child__outer-wrap,.edit-post-visual-editor [data-type="wpsp/faq"] .wpsp-faq-layout-grid.wpsp-faq-equal-height .block-editor-inner-blocks>.block-editor-block-list__layout .wpsp-faq-child__wrapper,.edit-post-visual-editor [data-type="wpsp/faq"] .wpsp-faq-layout-grid.wpsp-faq-equal-height .block-editor-inner-blocks>.block-editor-block-list__layout .wpsp-faq-item{height:100%}',""]),t.exports=e},78:function(t,e,n){"use strict";n.r(e);var o,a=n(0),i=n(4),r=n.n(i),c=n(3),s=n.n(c),l=n(7),p=n(2),u=n(39),d=n.n(u),f=n(68),b=n.n(f),h=0,v={injectType:"lazySingletonStyleTag",attributes:{id:"wpsp-editor-styles"},insert:"head",singleton:!0},w={};w.locals=b.a.locals||{},w.use=function(){return h++||(o=d()(b.a,v)),w},w.unuse=function(){h>0&&!--h&&(o(),o=null)};var m=w,y=[],g=["wpsp/faq-child"];e.default=s.a.memo((function(t){Object(c.useLayoutEffect)((function(){return m.use(),function(){m.unuse()}}),[]);var e=(t=t.parentProps).attributes.equalHeight?"wpsp-faq-equal-height":"";return Object(a.createElement)("div",{className:r()("wpsp-faq__outer-wrap","wpsp-block-".concat(t.clientId.substr(0,8)),"wpsp-faq-icon-".concat(t.attributes.iconAlign),"wpsp-faq-layout-".concat(t.attributes.layout),"wpsp-faq-expand-first-".concat(t.attributes.expandFirstItem),"wpsp-faq-inactive-other-".concat(t.attributes.inactiveOtherItems),e),"data-faqtoggle":t.attributes.enableToggle},Object(a.createElement)(c.Suspense,{fallback:Object(l.a)()},Object(a.createElement)(p.InnerBlocks,{template:function(t,e){for(var n=0,o=[];n<2;)o.push(["wpsp/faq-child",e[n]]),n+=1;return o}(0,y),templateLock:!1,allowedBlocks:g,__experimentalMoverDirection:"vertical"})))}))}}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/settings.js b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/settings.js new file mode 100644 index 00000000..a0394d62 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/faq/settings.js @@ -0,0 +1 @@ +(window.webpackJsonp_wp_schema_pro=window.webpackJsonp_wp_schema_pro||[]).push([[5],{48:function(e,t,i){"use strict";var a=i(18),l=i.n(a),n=i(36),r=i.n(n),s=i(43),o=i.n(s),u=i(44),g=i.n(u),c=i(50),m=i.n(c),b=i(45),h=i.n(b),v=i(46),w=i.n(v),p=i(47),x=i.n(p),d=i(0),y=i(1),O=i(37),S=i.n(O),k=i(34),j={ABeeZee:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Abel:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Abhaya Libre":{v:["regular","500","600","700","800"],subset:["latin-ext","sinhala","latin"],weight:["400","500","600","700","800"],i:["normal"]},"Abril Fatface":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Aclonica:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Acme:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Actor:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Adamina:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Advent Pro":{v:["100","200","300","regular","500","600","700"],subset:["latin-ext","greek","latin"],weight:["100","200","300","400","500","600","700"],i:["normal"]},"Aguafina Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Akronim:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Aladin:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Aldrich:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Alef:{v:["regular","700"],subset:["hebrew","latin"],weight:["400","700"],i:["normal"]},Alegreya:{v:["regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","500","700","800","900"],i:["normal","italic"]},"Alegreya SC":{v:["regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","500","700","800","900"],i:["normal","italic"]},"Alegreya Sans":{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal","italic"]},"Alegreya Sans SC":{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal","italic"]},"Alex Brush":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Alfa Slab One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Alice:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin"],weight:["400"],i:["normal"]},Alike:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Alike Angular":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Allan:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Allerta:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Allerta Stencil":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Allura:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Almendra:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Almendra Display":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Almendra SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Amarante:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Amaranth:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Amatic SC":{v:["regular","700"],subset:["cyrillic","latin-ext","hebrew","vietnamese","latin"],weight:["400","700"],i:["normal"]},Amethysta:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Amiko:{v:["regular","600","700"],subset:["latin-ext","devanagari","latin"],weight:["400","600","700"],i:["normal"]},Amiri:{v:["regular","italic","700","700italic"],subset:["latin-ext","arabic","latin"],weight:["400","700"],i:["normal","italic"]},Amita:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Anaheim:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Andada:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Andika:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Angkor:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Annie Use Your Telescope":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Anonymous Pro":{v:["regular","italic","700","700italic"],subset:["cyrillic","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Antic:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Antic Didone":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Antic Slab":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Anton:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Arapey:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Arbutus:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Arbutus Slab":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Architects Daughter":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Archivo:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Archivo Black":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Archivo Narrow":{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Aref Ruqaa":{v:["regular","700"],subset:["arabic","latin"],weight:["400","700"],i:["normal"]},"Arima Madurai":{v:["100","200","300","regular","500","700","800","900"],subset:["latin-ext","tamil","vietnamese","latin"],weight:["100","200","300","400","500","700","800","900"],i:["normal"]},Arimo:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","hebrew","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Arizonia:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Armata:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Arsenal:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Artifika:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Arvo:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Arya:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Asap:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Asap Condensed":{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},Asar:{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Asset:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Assistant:{v:["200","300","regular","600","700","800"],subset:["hebrew","latin"],weight:["200","300","400","600","700","800"],i:["normal"]},Astloch:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Asul:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Athiti:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},Atma:{v:["300","regular","500","600","700"],subset:["latin-ext","bengali","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Atomic Age":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Aubrey:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Audiowide:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Autour One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Average:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Average Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Averia Gruesa Libre":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Averia Libre":{v:["300","300italic","regular","italic","700","700italic"],subset:["latin"],weight:["300","400","700"],i:["normal","italic"]},"Averia Sans Libre":{v:["300","300italic","regular","italic","700","700italic"],subset:["latin"],weight:["300","400","700"],i:["normal","italic"]},"Averia Serif Libre":{v:["300","300italic","regular","italic","700","700italic"],subset:["latin"],weight:["300","400","700"],i:["normal","italic"]},"Bad Script":{v:["regular"],subset:["cyrillic","latin"],weight:["400"],i:["normal"]},Bahiana:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Baloo:{v:["regular"],subset:["latin-ext","devanagari","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Bhai":{v:["regular"],subset:["latin-ext","gujarati","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Bhaijaan":{v:["regular"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Bhaina":{v:["regular"],subset:["latin-ext","oriya","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Chettan":{v:["regular"],subset:["malayalam","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Da":{v:["regular"],subset:["latin-ext","vietnamese","bengali","latin"],weight:["400"],i:["normal"]},"Baloo Paaji":{v:["regular"],subset:["latin-ext","gurmukhi","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Tamma":{v:["regular"],subset:["latin-ext","vietnamese","latin","kannada"],weight:["400"],i:["normal"]},"Baloo Tammudu":{v:["regular"],subset:["latin-ext","telugu","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Thambi":{v:["regular"],subset:["latin-ext","tamil","vietnamese","latin"],weight:["400"],i:["normal"]},Balthazar:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bangers:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Barlow:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Barlow Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Barlow Semi Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Barrio:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Basic:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Battambang:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},Baumans:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bayon:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Belgrano:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bellefair:{v:["regular"],subset:["latin-ext","hebrew","latin"],weight:["400"],i:["normal"]},Belleza:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},BenchNine:{v:["300","regular","700"],subset:["latin-ext","latin"],weight:["300","400","700"],i:["normal"]},Bentham:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Berkshire Swash":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Bevan:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bigelow Rules":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bigshot One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bilbo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bilbo Swash Caps":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},BioRhyme:{v:["200","300","regular","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","700","800"],i:["normal"]},"BioRhyme Expanded":{v:["200","300","regular","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","700","800"],i:["normal"]},Biryani:{v:["200","300","regular","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","600","700","800","900"],i:["normal"]},Bitter:{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Black And White Picture":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Black Han Sans":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Black Ops One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Bokor:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Bonbon:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Boogaloo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Bowlby One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Bowlby One SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Brawler:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Bree Serif":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bubblegum Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bubbler One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Buda:{v:["300"],subset:["latin"],weight:["300"],i:[]},Buenard:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Bungee:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Hairline":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Inline":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Outline":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Shade":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Butcherman:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Butterfly Kids":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Cabin:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Cabin Condensed":{v:["regular","500","600","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal"]},"Cabin Sketch":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Caesar Dressing":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cagliostro:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cairo:{v:["200","300","regular","600","700","900"],subset:["latin-ext","arabic","latin"],weight:["200","300","400","600","700","900"],i:["normal"]},Calligraffitti:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cambay:{v:["regular","italic","700","700italic"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal","italic"]},Cambo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Candal:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cantarell:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Cantata One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Cantora One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Capriola:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Cardo:{v:["regular","italic","700"],subset:["greek-ext","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Carme:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Carrois Gothic":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Carrois Gothic SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Carter One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Catamaran:{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","tamil","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Caudex:{v:["regular","italic","700","700italic"],subset:["greek-ext","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Caveat:{v:["regular","700"],subset:["cyrillic","latin-ext","latin"],weight:["400","700"],i:["normal"]},"Caveat Brush":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Cedarville Cursive":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Ceviche One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Changa:{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","arabic","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Changa One":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Chango:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Chathura:{v:["100","300","regular","700","800"],subset:["telugu","latin"],weight:["100","300","400","700","800"],i:["normal"]},"Chau Philomene One":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Chela One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Chelsea Market":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Chenla:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Cherry Cream Soda":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Cherry Swash":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Chewy:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Chicle:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Chivo:{v:["300","300italic","regular","italic","700","700italic","900","900italic"],subset:["latin-ext","latin"],weight:["300","400","700","900"],i:["normal","italic"]},Chonburi:{v:["regular"],subset:["latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},Cinzel:{v:["regular","700","900"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal"]},"Cinzel Decorative":{v:["regular","700","900"],subset:["latin"],weight:["400","700","900"],i:["normal"]},"Clicker Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Coda:{v:["regular","800"],subset:["latin-ext","latin"],weight:["400","800"],i:["normal"]},"Coda Caption":{v:["800"],subset:["latin-ext","latin"],weight:["800"],i:[]},Codystar:{v:["300","regular"],subset:["latin-ext","latin"],weight:["300","400"],i:["normal"]},Coiny:{v:["regular"],subset:["latin-ext","tamil","vietnamese","latin"],weight:["400"],i:["normal"]},Combo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Comfortaa:{v:["300","regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","700"],i:["normal"]},"Coming Soon":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Concert One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Condiment:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Content:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},"Contrail One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Convergence:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cookie:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Copse:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Corben:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Cormorant:{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Cormorant Garamond":{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Cormorant Infant":{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Cormorant SC":{v:["300","regular","500","600","700"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Cormorant Unicase":{v:["300","regular","500","600","700"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Cormorant Upright":{v:["300","regular","500","600","700"],subset:["latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},Courgette:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Cousine:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","hebrew","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Coustard:{v:["regular","900"],subset:["latin"],weight:["400","900"],i:["normal"]},"Covered By Your Grace":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Crafty Girls":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Creepster:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Crete Round":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Crimson Text":{v:["regular","italic","600","600italic","700","700italic"],subset:["latin"],weight:["400","600","700"],i:["normal","italic"]},"Croissant One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Crushed:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cuprum:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Cute Font":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Cutive:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Cutive Mono":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Damion:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Dancing Script":{v:["regular","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal"]},Dangrek:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"David Libre":{v:["regular","500","700"],subset:["latin-ext","hebrew","vietnamese","latin"],weight:["400","500","700"],i:["normal"]},"Dawning of a New Day":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Days One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Dekko:{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Delius:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Delius Swash Caps":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Delius Unicase":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Della Respira":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Denk One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Devonshire:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Dhurjati:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Didact Gothic":{v:["regular"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400"],i:["normal"]},Diplomata:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Diplomata SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Do Hyeon":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Dokdo:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Domine:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Donegal One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Doppio One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Dorsa:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Dosis:{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Dr Sugiyama":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Duru Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Dynalight:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"EB Garamond":{v:["regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","500","600","700","800"],i:["normal","italic"]},"Eagle Lake":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"East Sea Dokdo":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Eater:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Economica:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Eczar:{v:["regular","500","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700","800"],i:["normal"]},"El Messiri":{v:["regular","500","600","700"],subset:["cyrillic","arabic","latin"],weight:["400","500","600","700"],i:["normal"]},Electrolize:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Elsie:{v:["regular","900"],subset:["latin-ext","latin"],weight:["400","900"],i:["normal"]},"Elsie Swash Caps":{v:["regular","900"],subset:["latin-ext","latin"],weight:["400","900"],i:["normal"]},"Emblema One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Emilys Candy":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Encode Sans":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Expanded":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Semi Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Semi Expanded":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Engagement:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Englebert:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Enriqueta:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Erica One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Esteban:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Euphoria Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ewert:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Exo:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Exo 2":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Expletus Sans":{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Fanwood Text":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Farsan:{v:["regular"],subset:["latin-ext","gujarati","vietnamese","latin"],weight:["400"],i:["normal"]},Fascinate:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Fascinate Inline":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Faster One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Fasthand:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Fauna One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Faustina:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},Federant:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Federo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Felipa:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Fenix:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Finger Paint":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Fira Mono":{v:["regular","500","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400","500","700"],i:["normal"]},"Fira Sans":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Fira Sans Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Fira Sans Extra Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Fjalla One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Fjord One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Flamenco:{v:["300","regular"],subset:["latin"],weight:["300","400"],i:["normal"]},Flavors:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Fondamento:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Fontdiner Swanky":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Forum:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal"]},"Francois One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Frank Ruhl Libre":{v:["300","regular","500","700","900"],subset:["latin-ext","hebrew","latin"],weight:["300","400","500","700","900"],i:["normal"]},"Freckle Face":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Fredericka the Great":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Fredoka One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Freehand:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Fresca:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Frijole:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Fruktur:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Fugaz One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"GFS Didot":{v:["regular"],subset:["greek"],weight:["400"],i:["normal"]},"GFS Neohellenic":{v:["regular","italic","700","700italic"],subset:["greek"],weight:["400","700"],i:["normal","italic"]},Gabriela:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin"],weight:["400"],i:["normal"]},Gaegu:{v:["300","regular","700"],subset:["korean","latin"],weight:["300","400","700"],i:["normal"]},Gafata:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Galada:{v:["regular"],subset:["bengali","latin"],weight:["400"],i:["normal"]},Galdeano:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Galindo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Gamja Flower":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Gentium Basic":{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Gentium Book Basic":{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Geo:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Geostar:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Geostar Fill":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Germania One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Gidugu:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Gilda Display":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Give You Glory":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Glass Antiqua":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Glegoo:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},"Gloria Hallelujah":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Goblin One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Gochi Hand":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Gorditas:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Gothic A1":{v:["100","200","300","regular","500","600","700","800","900"],subset:["korean","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Goudy Bookletter 1911":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Graduate:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Grand Hotel":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Gravitas One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Great Vibes":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Griffy:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Gruppo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Gudea:{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Gugi:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Gurajada:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Habibi:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Halant:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hammersmith One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Hanalei:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Hanalei Fill":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Handlee:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Hanuman:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},"Happy Monkey":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Harmattan:{v:["regular"],subset:["arabic","latin"],weight:["400"],i:["normal"]},"Headland One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Heebo:{v:["100","300","regular","500","700","800","900"],subset:["hebrew","latin"],weight:["100","300","400","500","700","800","900"],i:["normal"]},"Henny Penny":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Herr Von Muellerhoff":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Hi Melody":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Hind:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Guntur":{v:["300","regular","500","600","700"],subset:["latin-ext","telugu","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Madurai":{v:["300","regular","500","600","700"],subset:["latin-ext","tamil","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Siliguri":{v:["300","regular","500","600","700"],subset:["latin-ext","bengali","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Vadodara":{v:["300","regular","500","600","700"],subset:["latin-ext","gujarati","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Holtwood One SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Homemade Apple":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Homenaje:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IBM Plex Mono":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IBM Plex Sans":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IBM Plex Sans Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IBM Plex Serif":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IM Fell DW Pica":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell DW Pica SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell Double Pica":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell Double Pica SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell English":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell English SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell French Canon":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell French Canon SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell Great Primer":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell Great Primer SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Iceberg:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Iceland:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Imprima:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Inconsolata:{v:["regular","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal"]},Inder:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Indie Flower":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Inika:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Inknut Antiqua":{v:["300","regular","500","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700","800","900"],i:["normal"]},"Irish Grover":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Istok Web":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Italiana:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Italianno:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Itim:{v:["regular"],subset:["latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},"Jacques Francois":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Jacques Francois Shadow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Jaldi:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},"Jim Nightshade":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Jockey One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Jolly Lodger":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Jomhuria:{v:["regular"],subset:["latin-ext","arabic","latin"],weight:["400"],i:["normal"]},"Josefin Sans":{v:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["100","300","400","600","700"],i:["normal","italic"]},"Josefin Slab":{v:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subset:["latin"],weight:["100","300","400","600","700"],i:["normal","italic"]},"Joti One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Jua:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Judson:{v:["regular","italic","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Julee:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Julius Sans One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Junge:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Jura:{v:["300","regular","500","600","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Just Another Hand":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Just Me Again Down Here":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Kadwa:{v:["regular","700"],subset:["devanagari","latin"],weight:["400","700"],i:["normal"]},Kalam:{v:["300","regular","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","700"],i:["normal"]},Kameron:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Kanit:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Kantumruy:{v:["300","regular","700"],subset:["khmer"],weight:["300","400","700"],i:["normal"]},Karla:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Karma:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Katibeh:{v:["regular"],subset:["latin-ext","arabic","latin"],weight:["400"],i:["normal"]},"Kaushan Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Kavivanar:{v:["regular"],subset:["latin-ext","tamil","latin"],weight:["400"],i:["normal"]},Kavoon:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Kdam Thmor":{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Keania One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Kelly Slab":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Kenia:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Khand:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Khmer:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Khula:{v:["300","regular","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["300","400","600","700","800"],i:["normal"]},"Kirang Haerang":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Kite One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Knewave:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Kosugi:{v:["regular"],subset:["cyrillic","japanese","latin"],weight:["400"],i:["normal"]},"Kosugi Maru":{v:["regular"],subset:["cyrillic","japanese","latin"],weight:["400"],i:["normal"]},"Kotta One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Koulen:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Kranky:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Kreon:{v:["300","regular","700"],subset:["latin"],weight:["300","400","700"],i:["normal"]},Kristi:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Krona One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Kumar One":{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},"Kumar One Outline":{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},Kurale:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},"La Belle Aurore":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Laila:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Lakki Reddy":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Lalezar:{v:["regular"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["400"],i:["normal"]},Lancelot:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Lateef:{v:["regular"],subset:["arabic","latin"],weight:["400"],i:["normal"]},Lato:{v:["100","100italic","300","300italic","regular","italic","700","700italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","300","400","700","900"],i:["normal","italic"]},"League Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Leckerli One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Ledger:{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Lekton:{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Lemon:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Lemonada:{v:["300","regular","600","700"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["300","400","600","700"],i:["normal"]},"Libre Barcode 128":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 128 Text":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39 Extended":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39 Extended Text":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39 Text":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Baskerville":{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Libre Franklin":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Life Savers":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Lilita One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Lily Script One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Limelight:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Linden Hill":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Lobster:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Lobster Two":{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Londrina Outline":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Londrina Shadow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Londrina Sketch":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Londrina Solid":{v:["100","300","regular","900"],subset:["latin"],weight:["100","300","400","900"],i:["normal"]},Lora:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Love Ya Like A Sister":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Loved by the King":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Lovers Quarrel":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Luckiest Guy":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Lusitana:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Lustria:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"M PLUS 1p":{v:["100","300","regular","500","700","800","900"],subset:["cyrillic","cyrillic-ext","greek-ext","japanese","latin-ext","hebrew","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal"]},"M PLUS Rounded 1c":{v:["100","300","regular","500","700","800","900"],subset:["cyrillic","cyrillic-ext","greek-ext","japanese","latin-ext","hebrew","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal"]},Macondo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Macondo Swash Caps":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Mada:{v:["200","300","regular","500","600","700","900"],subset:["arabic","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},Magra:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Maiden Orange":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Maitree:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},Mako:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Mallanna:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Mandali:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Manuale:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},Marcellus:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Marcellus SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Marck Script":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Margarine:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Markazi Text":{v:["regular","500","600","700"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["400","500","600","700"],i:["normal"]},"Marko One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Marmelad:{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Martel:{v:["200","300","regular","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","600","700","800","900"],i:["normal"]},"Martel Sans":{v:["200","300","regular","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","600","700","800","900"],i:["normal"]},Marvel:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Mate:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"Mate SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Maven Pro":{v:["regular","500","700","900"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","700","900"],i:["normal"]},McLaren:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Meddon:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},MedievalSharp:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Medula One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Meera Inimai":{v:["regular"],subset:["tamil","latin"],weight:["400"],i:["normal"]},Megrim:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Meie Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Merienda:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Merienda One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Merriweather:{v:["300","300italic","regular","italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","700","900"],i:["normal","italic"]},"Merriweather Sans":{v:["300","300italic","regular","italic","700","700italic","800","800italic"],subset:["latin-ext","latin"],weight:["300","400","700","800"],i:["normal","italic"]},Metal:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Metal Mania":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Metamorphous:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Metrophobic:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Michroma:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Milonga:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Miltonian:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Miltonian Tattoo":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Mina:{v:["regular","700"],subset:["latin-ext","bengali","latin"],weight:["400","700"],i:["normal"]},Miniver:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Miriam Libre":{v:["regular","700"],subset:["latin-ext","hebrew","latin"],weight:["400","700"],i:["normal"]},Mirza:{v:["regular","500","600","700"],subset:["latin-ext","arabic","latin"],weight:["400","500","600","700"],i:["normal"]},"Miss Fajardose":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Mitr:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},Modak:{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},"Modern Antiqua":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Mogra:{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},Molengo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Molle:{v:["italic"],subset:["latin-ext","latin"],weight:[],i:["italic"]},Monda:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Monofett:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Monoton:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Monsieur La Doulaise":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Montaga:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Montez:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Montserrat:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Montserrat Alternates":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Montserrat Subrayada":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Moul:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Moulpali:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Mountains of Christmas":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Mouse Memoirs":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mr Bedfort":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mr Dafoe":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mr De Haviland":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mrs Saint Delafield":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mrs Sheppards":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Mukta:{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Mukta Mahee":{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","gurmukhi","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Mukta Malar":{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","tamil","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Mukta Vaani":{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","gujarati","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},Muli:{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["200","300","400","600","700","800","900"],i:["normal","italic"]},"Mystery Quest":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},NTR:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Nanum Brush Script":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Nanum Gothic":{v:["regular","700","800"],subset:["korean","latin"],weight:["400","700","800"],i:["normal"]},"Nanum Gothic Coding":{v:["regular","700"],subset:["korean","latin"],weight:["400","700"],i:["normal"]},"Nanum Myeongjo":{v:["regular","700","800"],subset:["korean","latin"],weight:["400","700","800"],i:["normal"]},"Nanum Pen Script":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Neucha:{v:["regular"],subset:["cyrillic","latin"],weight:["400"],i:["normal"]},Neuton:{v:["200","300","regular","italic","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","700","800"],i:["normal","italic"]},"New Rocker":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"News Cycle":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Niconne:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Nixie One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Nobile:{v:["regular","italic","500","500italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","500","700"],i:["normal","italic"]},Nokora:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},Norican:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Nosifer:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Nothing You Could Do":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Noticia Text":{v:["regular","italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Noto Sans":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","devanagari","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Noto Sans JP":{v:["100","300","regular","500","700","900"],subset:["japanese","latin"],weight:["100","300","400","500","700","900"],i:["normal"]},"Noto Sans KR":{v:["100","300","regular","500","700","900"],subset:["korean","latin"],weight:["100","300","400","500","700","900"],i:["normal"]},"Noto Serif":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Noto Serif JP":{v:["200","300","regular","500","600","700","900"],subset:["japanese","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},"Noto Serif KR":{v:["200","300","regular","500","600","700","900"],subset:["korean","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},"Nova Cut":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Flat":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Mono":{v:["regular"],subset:["greek","latin"],weight:["400"],i:["normal"]},"Nova Oval":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Round":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Slim":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Square":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Numans:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Nunito:{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["200","300","400","600","700","800","900"],i:["normal","italic"]},"Nunito Sans":{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["200","300","400","600","700","800","900"],i:["normal","italic"]},"Odor Mean Chey":{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Offside:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Old Standard TT":{v:["regular","italic","700"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Oldenburg:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Oleo Script":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Oleo Script Swash Caps":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Open Sans":{v:["300","300italic","regular","italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","600","700","800"],i:["normal","italic"]},"Open Sans Condensed":{v:["300","300italic","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","700"],i:[]},Oranienbaum:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal"]},Orbitron:{v:["regular","500","700","900"],subset:["latin"],weight:["400","500","700","900"],i:["normal"]},Oregano:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Orienta:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Original Surfer":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Oswald:{v:["200","300","regular","500","600","700"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},"Over the Rainbow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Overlock:{v:["regular","italic","700","700italic","900","900italic"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal","italic"]},"Overlock SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Overpass:{v:["100","100italic","200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","600","700","800","900"],i:["normal","italic"]},"Overpass Mono":{v:["300","regular","600","700"],subset:["latin-ext","latin"],weight:["300","400","600","700"],i:["normal"]},Ovo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Oxygen:{v:["300","regular","700"],subset:["latin-ext","latin"],weight:["300","400","700"],i:["normal"]},"Oxygen Mono":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"PT Mono":{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal"]},"PT Sans":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"PT Sans Caption":{v:["regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal"]},"PT Sans Narrow":{v:["regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal"]},"PT Serif":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"PT Serif Caption":{v:["regular","italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal","italic"]},Pacifico:{v:["regular"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Padauk:{v:["regular","700"],subset:["myanmar","latin"],weight:["400","700"],i:["normal"]},Palanquin:{v:["100","200","300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["100","200","300","400","500","600","700"],i:["normal"]},"Palanquin Dark":{v:["regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700"],i:["normal"]},Pangolin:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Paprika:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Parisienne:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Passero One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Passion One":{v:["regular","700","900"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal"]},"Pathway Gothic One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Patrick Hand":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Patrick Hand SC":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Pattaya:{v:["regular"],subset:["cyrillic","latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},"Patua One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Pavanam:{v:["regular"],subset:["latin-ext","tamil","latin"],weight:["400"],i:["normal"]},"Paytone One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Peddana:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Peralta:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Permanent Marker":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Petit Formal Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Petrona:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Philosopher:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Piedra:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Pinyon Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Pirata One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Plaster:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Play:{v:["regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","vietnamese","latin"],weight:["400","700"],i:["normal"]},Playball:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Playfair Display":{v:["regular","italic","700","700italic","900","900italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["400","700","900"],i:["normal","italic"]},"Playfair Display SC":{v:["regular","italic","700","700italic","900","900italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["400","700","900"],i:["normal","italic"]},Podkova:{v:["regular","500","600","700","800"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","500","600","700","800"],i:["normal"]},"Poiret One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Poller One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Poly:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Pompiere:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Pontano Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Poor Story":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Poppins:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","devanagari","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Port Lligat Sans":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Port Lligat Slab":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Pragati Narrow":{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Prata:{v:["regular"],subset:["cyrillic","cyrillic-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Preahvihear:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Press Start 2P":{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","latin"],weight:["400"],i:["normal"]},Pridi:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},"Princess Sofia":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Prociono:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Prompt:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Prosto One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Proza Libre":{v:["regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["latin-ext","latin"],weight:["400","500","600","700","800"],i:["normal","italic"]},Puritan:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Purple Purse":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Quando:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Quantico:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Quattrocento:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Quattrocento Sans":{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Questrial:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Quicksand:{v:["300","regular","500","700"],subset:["latin-ext","vietnamese","latin"],weight:["300","400","500","700"],i:["normal"]},Quintessential:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Qwigley:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Racing Sans One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Radley:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Rajdhani:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Rakkas:{v:["regular"],subset:["latin-ext","arabic","latin"],weight:["400"],i:["normal"]},Raleway:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Raleway Dots":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ramabhadra:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Ramaraja:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Rambla:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Rammetto One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ranchers:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Rancho:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Ranga:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Rasa:{v:["300","regular","500","600","700"],subset:["latin-ext","gujarati","latin"],weight:["300","400","500","600","700"],i:["normal"]},Rationale:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Ravi Prakash":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Redressed:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Reem Kufi":{v:["regular"],subset:["arabic","latin"],weight:["400"],i:["normal"]},"Reenie Beanie":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Revalia:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Rhodium Libre":{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Ribeye:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Ribeye Marrow":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Righteous:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Risque:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Roboto:{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700","900"],i:["normal","italic"]},"Roboto Condensed":{v:["300","300italic","regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","700"],i:["normal","italic"]},"Roboto Mono":{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700"],i:["normal","italic"]},"Roboto Slab":{v:["100","300","regular","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","700"],i:["normal"]},Rochester:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Rock Salt":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Rokkitt:{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Romanesco:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Ropa Sans":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Rosario:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Rosarivo:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Rouge Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Rozha One":{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Rubik:{v:["300","300italic","regular","italic","500","500italic","700","700italic","900","900italic"],subset:["cyrillic","latin-ext","hebrew","latin"],weight:["300","400","500","700","900"],i:["normal","italic"]},"Rubik Mono One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Ruda:{v:["regular","700","900"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal"]},Rufina:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Ruge Boogie":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ruluko:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Rum Raisin":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Ruslan Display":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Russo One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Ruthie:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Rye:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sacramento:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sahitya:{v:["regular","700"],subset:["devanagari","latin"],weight:["400","700"],i:["normal"]},Sail:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Saira:{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Saira Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Saira Extra Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Saira Semi Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Salsa:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sanchez:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Sancreek:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sansita:{v:["regular","italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["400","700","800","900"],i:["normal","italic"]},Sarala:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Sarina:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sarpanch:{v:["regular","500","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700","800","900"],i:["normal"]},Satisfy:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Sawarabi Gothic":{v:["regular"],subset:["cyrillic","japanese","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Sawarabi Mincho":{v:["regular"],subset:["japanese","latin-ext","latin"],weight:["400"],i:["normal"]},Scada:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Scheherazade:{v:["regular","700"],subset:["arabic","latin"],weight:["400","700"],i:["normal"]},Schoolbell:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Scope One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Seaweed Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Secular One":{v:["regular"],subset:["latin-ext","hebrew","latin"],weight:["400"],i:["normal"]},"Sedgwick Ave":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Sedgwick Ave Display":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Sevillana:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Seymour One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Shadows Into Light":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Shadows Into Light Two":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Shanti:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Share:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Share Tech":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Share Tech Mono":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Shojumaru:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Short Stack":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Shrikhand:{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},Siemreap:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Sigmar One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Signika:{v:["300","regular","600","700"],subset:["latin-ext","latin"],weight:["300","400","600","700"],i:["normal"]},"Signika Negative":{v:["300","regular","600","700"],subset:["latin-ext","latin"],weight:["300","400","600","700"],i:["normal"]},Simonetta:{v:["regular","italic","900","900italic"],subset:["latin-ext","latin"],weight:["400","900"],i:["normal","italic"]},Sintony:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Sirin Stencil":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Six Caps":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Skranji:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Slabo 13px":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Slabo 27px":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Slackey:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Smokum:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Smythe:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sniglet:{v:["regular","800"],subset:["latin-ext","latin"],weight:["400","800"],i:["normal"]},Snippet:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Snowburst One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Sofadi One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sofia:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Song Myung":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Sonsie One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Sorts Mill Goudy":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Source Code Pro":{v:["200","300","regular","500","600","700","900"],subset:["latin-ext","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},"Source Sans Pro":{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["200","300","400","600","700","900"],i:["normal","italic"]},"Source Serif Pro":{v:["regular","600","700"],subset:["latin-ext","latin"],weight:["400","600","700"],i:["normal"]},"Space Mono":{v:["regular","italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Special Elite":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Spectral:{v:["200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","500","600","700","800"],i:["normal","italic"]},"Spectral SC":{v:["200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","500","600","700","800"],i:["normal","italic"]},"Spicy Rice":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Spinnaker:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Spirax:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Squada One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Sree Krushnadevaraya":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Sriracha:{v:["regular"],subset:["latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},Stalemate:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Stalinist One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Stardos Stencil":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Stint Ultra Condensed":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Stint Ultra Expanded":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Stoke:{v:["300","regular"],subset:["latin-ext","latin"],weight:["300","400"],i:["normal"]},Strait:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Stylish:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Sue Ellen Francisco":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Suez One":{v:["regular"],subset:["latin-ext","hebrew","latin"],weight:["400"],i:["normal"]},Sumana:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Sunflower:{v:["300","500","700"],subset:["korean","latin"],weight:["300","500","700"],i:[]},Sunshiney:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Supermercado One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sura:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Suranna:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Suravaram:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Suwannaphum:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Swanky and Moo Moo":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Syncopate:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Tajawal:{v:["200","300","regular","500","700","800","900"],subset:["arabic","latin"],weight:["200","300","400","500","700","800","900"],i:["normal"]},Tangerine:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Taprom:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Tauri:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Taviraj:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Teko:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Telex:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Tenali Ramakrishna":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Tenor Sans":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Text Me One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"The Girl Next Door":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Tienne:{v:["regular","700","900"],subset:["latin"],weight:["400","700","900"],i:["normal"]},Tillana:{v:["regular","500","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700","800"],i:["normal"]},Timmana:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Tinos:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","hebrew","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Titan One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Titillium Web":{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900"],subset:["latin-ext","latin"],weight:["200","300","400","600","700","900"],i:["normal","italic"]},"Trade Winds":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Trirong:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Trocchi:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Trochut:{v:["regular","italic","700"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Trykker:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Tulpen One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Ubuntu:{v:["300","300italic","regular","italic","500","500italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["300","400","500","700"],i:["normal","italic"]},"Ubuntu Condensed":{v:["regular"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400"],i:["normal"]},"Ubuntu Mono":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Ultra:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Uncial Antiqua":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Underdog:{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Unica One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},UnifrakturCook:{v:["700"],subset:["latin"],weight:["700"],i:[]},UnifrakturMaguntia:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Unkempt:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Unlock:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Unna:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},VT323:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Vampiro One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Varela:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Varela Round":{v:["regular"],subset:["latin-ext","hebrew","vietnamese","latin"],weight:["400"],i:["normal"]},"Vast Shadow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Vesper Libre":{v:["regular","500","700","900"],subset:["latin-ext","devanagari","latin"],weight:["400","500","700","900"],i:["normal"]},Vibur:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Vidaloka:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Viga:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Voces:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Volkhov:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Vollkorn:{v:["regular","italic","600","600italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","vietnamese","latin"],weight:["400","600","700","900"],i:["normal","italic"]},"Vollkorn SC":{v:["regular","600","700","900"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","600","700","900"],i:["normal"]},Voltaire:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Waiting for the Sunrise":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Wallpoet:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Walter Turncoat":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Warnes:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Wellfleet:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Wendy One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Wire One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Work Sans":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Yanone Kaffeesatz":{v:["200","300","regular","700"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","700"],i:["normal"]},Yantramanav:{v:["100","300","regular","500","700","900"],subset:["latin-ext","devanagari","latin"],weight:["100","300","400","500","700","900"],i:["normal"]},"Yatra One":{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Yellowtail:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Yeon Sung":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Yeseva One":{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Yesteryear:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Yrsa:{v:["300","regular","500","600","700"],subset:["latin-ext","latin"],weight:["300","400","500","600","700"],i:["normal"]},Zeyada:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Zilla Slab":{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Zilla Slab Highlight":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]}},C=i(54),f=function(e){var t=[{value:"",label:Object(y.__)("Default"),weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Arial",label:"Arial",weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Helvetica",label:"Helvetica",weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Times New Roman",label:"Times New Roman",weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Georgia",label:"Georgia",weight:["100","200","300","400","500","600","700","800","900"],google:!1}],i="",a="";Object.keys(j).forEach((function(l){t.push({value:l,label:l,weight:j[l].weight}),l===e.fontFamily.value&&(i=j[l].weight,a=j[l].subset)})),""===i&&(i=t[0].weight);var l=[];i.forEach((function(e){l.push({value:e,label:e})}));var n=[];"object"===S()(a)&&a.forEach((function(e){n.push({value:e,label:e})}));return Object(d.createElement)("div",{className:"wpsp-typography-font-family-options"},Object(d.createElement)("label",{htmlFor:"font-family",className:"wpsp-typography-font-family-label"},Object(y.__)("Font Family")),Object(d.createElement)(C.a,{options:t,value:{value:e.fontFamily.value,label:e.fontFamily.value,weight:l},isMulti:!1,maxMenuHeight:300,onChange:function(t){var i=e.loadGoogleFonts,a=e.fontFamily;e.fontWeightt,e.fontSubsett;e.setAttributes(r()({},a.label,t.label)),function(t,i){var a;a=""===i||"object"===S()(j[i]),e.setAttributes(r()({},t.label,a))}(i,t.label),function(t,i,a){var l;if("object"===S()(j[a])){var n=j[a].weight,s=j[a].subset;"object"===S()(n)&&(n.forEach((function(t){l=t,e.setAttributes(r()({},e.fontWeight.label,l))})),s.forEach((function(t){l=t,e.setAttributes(r()({},e.fontSubset.label,l))})))}}(0,0,t.label)},className:"react-select-container",classNamePrefix:"react-select"}),Object(d.createElement)(k.SelectControl,{label:Object(y.__)("Font Weight"),value:e.fontWeight.value,onChange:function(t){return e.setAttributes(r()({},e.fontWeight.label,t))},options:l}),Object(d.createElement)(k.SelectControl,{label:Object(y.__)("Font Subset"),value:e.fontSubset.value,onChange:function(t){return e.setAttributes(r()({},e.fontSubset.label,t))},options:n}))},E=function(e){var t;t="sizeTypes"in e?e.sizeTypes:[{key:"px",name:Object(y.__)("px")},{key:"em",name:Object(y.__)("em")}];var i=Object(d.createElement)(k.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(y.__)("Size Type")},t.map((function(t){var i=t.name,a=t.key;return Object(d.createElement)(k.Button,{key:a,className:"wpsp-size-btn",isSmall:!0,isPrimary:e.type.value===a,"aria-pressed":e.type.value===a,onClick:function(){return e.setAttributes(r()({},e.typeLabel,a))}},i)})));return Object(d.createElement)("div",{className:"wpsp-typography-range-options"},Object(d.createElement)(k.TabPanel,{className:"wpsp-size-type-field-tabs",activeClass:"active-tab",tabs:[{name:"desktop",title:Object(d.createElement)(k.Dashicon,{icon:"desktop"}),className:"wpsp-desktop-tab wpsp-responsive-tabs"},{name:"tablet",title:Object(d.createElement)(k.Dashicon,{icon:"tablet"}),className:"wpsp-tablet-tab wpsp-responsive-tabs"},{name:"mobile",title:Object(d.createElement)(k.Dashicon,{icon:"smartphone"}),className:"wpsp-mobile-tab wpsp-responsive-tabs"}]},(function(t){var a;return a="mobile"===t.name?Object(d.createElement)(d.Fragment,null,i,Object(d.createElement)(k.RangeControl,{label:e.sizeMobileText,value:e.sizeMobile.value,onChange:function(t){return e.setAttributes(r()({},e.sizeMobileLabel,t))},min:0,max:100,step:e.steps,beforeIcon:"editor-textcolor",allowReset:!0,initialPosition:30})):"tablet"===t.name?Object(d.createElement)(d.Fragment,null,i,Object(d.createElement)(k.RangeControl,{label:e.sizeTabletText,value:e.sizeTablet.value,onChange:function(t){return e.setAttributes(r()({},e.sizeTabletLabel,t))},min:0,max:100,step:e.steps,beforeIcon:"editor-textcolor",allowReset:!0,initialPosition:30})):Object(d.createElement)(d.Fragment,null,i,Object(d.createElement)(k.RangeControl,{label:e.sizeText,value:e.size.value||"",onChange:function(t){return e.setAttributes(r()({},e.sizeLabel,t))},min:0,max:100,step:e.steps,beforeIcon:"editor-textcolor",allowReset:!0,initialPosition:30})),Object(d.createElement)("div",null,a)})))};var _=function(e){h()(n,e);var t,i,a=(t=n,i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=x()(t);if(i){var l=x()(this).constructor;e=Reflect.construct(a,arguments,l)}else e=a.apply(this,arguments);return w()(this,e)});function n(){var e;return o()(this,n),(e=a.apply(this,arguments)).onAdvancedControlClick=e.onAdvancedControlClick.bind(m()(e)),e.onAdvancedControlReset=e.onAdvancedControlReset.bind(m()(e)),e}return g()(n,[{key:"onAdvancedControlClick",value:function(){var e=!0,t=Object(y.__)("Hide Advanced");null!==this.state&&!0===this.state.showAdvancedControls&&(e=!1,t=Object(y.__)("Advanced")),this.setState({showAdvancedControls:e,showAdvancedControlsLabel:t})}},{key:"onAdvancedControlReset",value:function(){var e=this.props.setAttributes;e(r()({},this.props.fontFamily.label,"")),e(r()({},this.props.fontWeight.label,"")),e(r()({},this.props.fontSubset.label,"")),e(r()({},this.props.fontSize.label,"")),e(r()({},this.props.fontSizeType.label,"px")),e(r()({},this.props.fontSizeMobile.label,"")),e(r()({},this.props.fontSizeTablet.label,"")),e(r()({},this.props.lineHeight.label,"")),e(r()({},this.props.lineHeightType.label,"em")),e(r()({},this.props.lineHeightMobile.label,"")),e(r()({},this.props.lineHeightTablet.label,"")),e(r()({},this.props.loadGoogleFonts.label,!1))}},{key:"render",value:function(){var e,t,i,a,n,r,s,o=this.props,u=o.disableFontFamily,g=o.disableFontSize,c=o.disableLineHeight,m=o.disableAdvancedOptions,b=void 0!==m&&m;return!0!==u&&(i=Object(d.createElement)(f,this.props)),!0!==c&&(t=Object(d.createElement)(E,l()({type:this.props.lineHeightType,typeLabel:this.props.lineHeightType.label,sizeMobile:this.props.lineHeightMobile,sizeMobileLabel:this.props.lineHeightMobile.label,sizeTablet:this.props.lineHeightTablet,sizeTabletLabel:this.props.lineHeightTablet.label,size:this.props.lineHeight,sizeLabel:this.props.lineHeight.label,sizeMobileText:Object(y.__)("Line Height"),sizeTabletText:Object(y.__)("Line Height"),sizeText:Object(y.__)("Line Height"),steps:.1},this.props))),!0!==g&&(e=Object(d.createElement)(E,l()({type:this.props.fontSizeType,typeLabel:this.props.fontSizeType.label,sizeMobile:this.props.fontSizeMobile,sizeMobileLabel:this.props.fontSizeMobile.label,sizeTablet:this.props.fontSizeTablet,sizeTabletLabel:this.props.fontSizeTablet.label,size:this.props.fontSize,sizeLabel:this.props.fontSize.label,sizeMobileText:this.props.fontSizeLabel?this.props.fontSizeLabel:Object(y.__)("Font Size"),sizeTabletText:this.props.fontSizeLabel?this.props.fontSizeLabel:Object(y.__)("Font Size"),sizeText:this.props.fontSizeLabel?this.props.fontSizeLabel:Object(y.__)("Font Size"),steps:.1},this.props))),!0!==u&&!0!==g?(a=Object(d.createElement)(k.Button,{className:"wpsp-size-btn wpsp-typography-control-btn",isSmall:!0,"aria-pressed":null!==this.state,onClick:this.onAdvancedControlClick},Object(d.createElement)(k.Dashicon,{icon:"admin-tools"})),s=Object(d.createElement)(k.Button,{className:"wpsp-size-btn wpsp-typography-reset-btn",isSmall:!0,"aria-pressed":null!==this.state,onClick:this.onAdvancedControlReset},Object(d.createElement)(k.Dashicon,{icon:"image-rotate"}))):r=Object(d.createElement)(d.Fragment,null,e,i,t),null!==this.state&&!0===this.state.showAdvancedControls&&(r=Object(d.createElement)("div",{className:"wpsp-typography-advanced"},e,i,t)),!0!==u&&!0!==g&&(n=Object(d.createElement)("div",{className:"wpsp-typography-option-actions"},Object(d.createElement)("span",null,this.props.label),a,s)),Object(d.createElement)("div",{className:"wpsp-typography-options"},!b&&Object(d.createElement)(d.Fragment,null,n,r))}}]),n}(d.Component);t.a=_},73:function(e,t,i){"use strict";i.r(t);var a=i(0),l=i(10),n=i(3),r=i.n(n),s=i(59),o=i.n(s),u=i(6),g=i(48),c=i(2),m=i(34),b=i(8),h=i(1),v=Object.keys(wpsp_blocks_info.wpsp_icons);t.default=r.a.memo((function(e){var t=e=e.parentProps,i=t.attributes,n=t.setAttributes,r=i.layout,s=i.inactiveOtherItems,w=i.expandFirstItem,p=i.rowsGap,x=i.columnsGap,d=i.align,y=i.enableSeparator,O=i.boxBgColor,S=i.borderStyle,k=i.borderWidth,j=i.borderRadius,C=i.borderColor,f=i.questionTextColor,E=i.questionTextActiveColor,_=i.questionPaddingTypeDesktop,P=i.answerTextColor,T=i.answerPaddingTypeDesktop,M=i.vanswerPaddingMobile,z=i.vanswerPaddingTablet,N=i.vanswerPaddingDesktop,R=i.hanswerPaddingMobile,B=i.hanswerPaddingTablet,F=i.hanswerPaddingDesktop,A=i.iconColor,L=i.iconActiveColor,D=i.gapBtwIconQUestion,H=i.questionloadGoogleFonts,G=i.questionFontFamily,q=i.questionFontWeight,I=i.questionFontSubset,K=i.questionFontSizeType,W=i.questionFontSize,J=i.questionFontSizeMobile,U=i.questionFontSizeTablet,V=i.questionLineHeightType,Q=i.questionLineHeight,Y=i.questionLineHeightMobile,Z=i.questionLineHeightTablet,X=i.answerloadGoogleFonts,$=i.answerFontFamily,ee=i.answerFontWeight,te=i.answerFontSubset,ie=i.answerFontSizeType,ae=i.answerFontSize,le=i.answerFontSizeMobile,ne=i.answerFontSizeTablet,re=i.answerLineHeightType,se=i.answerLineHeight,oe=i.answerLineHeightMobile,ue=i.answerLineHeightTablet,ge=i.icon,ce=i.iconActive,me=i.iconAlign,be=i.iconSizeType,he=i.iconSizeMobile,ve=i.iconSizeTablet,we=i.iconSize,pe=i.columns,xe=i.tcolumns,de=i.mcolumns,ye=i.enableToggle,Oe=i.equalHeight,Se=i.questionLeftPaddingTablet,ke=i.hquestionPaddingTablet,je=i.vquestionPaddingTablet,Ce=i.questionBottomPaddingTablet,fe=i.questionLeftPaddingDesktop,Ee=i.hquestionPaddingDesktop,_e=i.vquestionPaddingDesktop,Pe=i.questionBottomPaddingDesktop,Te=i.questionLeftPaddingMobile,Me=i.hquestionPaddingMobile,ze=i.vquestionPaddingMobile,Ne=i.questionBottomPaddingMobile,Re=i.headingTag;return Object(a.createElement)(a.Fragment,null,Object(a.createElement)(c.InspectorControls,null,Object(a.createElement)(m.PanelBody,{title:Object(h.__)("General"),initialOpen:!0,className:"wpsp__url-panel-body"},Object(a.createElement)(m.SelectControl,{label:Object(h.__)("Layout"),value:r,options:[{value:"accordion",label:Object(h.__)("Accordion")},{value:"grid",label:Object(h.__)("Grid")}],onChange:function(t){return function(t){Object(b.select)("core/block-editor").getBlocks(e.clientId).forEach((function(e){e.attributes.layout=t})),n({layout:t})}(t)}}),"accordion"===r&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ToggleControl,{label:Object(h.__)("Collapse other items"),checked:s,onChange:function(){return n({inactiveOtherItems:!s})}}),!0===s&&Object(a.createElement)(m.ToggleControl,{label:Object(h.__)("Expand First Item"),checked:w,onChange:function(){return n({expandFirstItem:!w})}}),Object(a.createElement)(m.ToggleControl,{label:Object(h.__)("Enable Toggle"),checked:ye,onChange:function(){return n({enableToggle:!ye})}})),Object(a.createElement)("hr",{className:"wpsp-editor__separator"}),"grid"===r&&Object(a.createElement)(m.TabPanel,{className:"wpsp-size-type-field-tabs wpsp-without-size-type",activeClass:"active-tab",tabs:[{name:"desktop",title:Object(a.createElement)(m.Dashicon,{icon:"desktop"}),className:"wpsp-desktop-tab wpsp-responsive-tabs"},{name:"tablet",title:Object(a.createElement)(m.Dashicon,{icon:"tablet"}),className:"wpsp-tablet-tab wpsp-responsive-tabs"},{name:"mobile",title:Object(a.createElement)(m.Dashicon,{icon:"smartphone"}),className:"wpsp-mobile-tab wpsp-responsive-tabs"}]},(function(e){var t;return t="mobile"===e.name?Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Mobile Columns"),value:de,onChange:function(e){return n({mcolumns:e})},min:1,max:2}):"tablet"===e.name?Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Tab Columns"),value:xe,onChange:function(e){return n({tcolumns:e})},min:1,max:4}):Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Desktop Columns"),value:pe,onChange:function(e){return n({columns:e})},min:1,max:6}),Object(a.createElement)("div",null,t)})),"grid"===r&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)("h2",null," ",Object(h.__)("Alignment")),Object(a.createElement)(m.IconButton,{key:"left",icon:"editor-alignleft",label:"Left",onClick:function(){return n({align:"left"})},"aria-pressed":"left"===d,isPrimary:"left"===d}),Object(a.createElement)(m.IconButton,{key:"center",icon:"editor-aligncenter",label:"Right",onClick:function(){return n({align:"center"})},"aria-pressed":"center"===d,isPrimary:"center"===d}),Object(a.createElement)(m.IconButton,{key:"right",icon:"editor-alignright",label:"Right",onClick:function(){return n({align:"right"})},"aria-pressed":"right"===d,isPrimary:"right"===d})),"accordion"===r&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)("h2",null," ",Object(h.__)("Icon")," "),Object(a.createElement)("p",{className:"components-base-control__label"},Object(h.__)("Expand")),Object(a.createElement)(o.a,{icons:v,renderFunc:l.a,theme:"default",value:ge,onChange:function(t){return function(t){Object(b.select)("core/block-editor").getBlocks(e.clientId).forEach((function(e){e.attributes.icon=t})),n({icon:t})}(t)},isMulti:!1,noSelectedPlaceholder:Object(h.__)("Select Icon")}),Object(a.createElement)("p",{className:"components-base-control__label"},Object(h.__)("Collapse")),Object(a.createElement)(o.a,{icons:v,renderFunc:l.a,theme:"default",value:ce,onChange:function(t){return function(t){Object(b.select)("core/block-editor").getBlocks(e.clientId).forEach((function(e){e.attributes.iconActive=t})),n({iconActive:t})}(t)},isMulti:!1,noSelectedPlaceholder:Object(h.__)("Select Icon")}),Object(a.createElement)("h2",null," ",Object(h.__)("Icon Alignment")),Object(a.createElement)(m.IconButton,{key:"row",icon:"editor-alignleft",label:"Left",onClick:function(){return n({iconAlign:"row"})},"aria-pressed":"row"===me,isPrimary:"row"===me}),Object(a.createElement)(m.IconButton,{key:"row-reverse",icon:"editor-alignright",label:"Right",onClick:function(){return n({iconAlign:"row-reverse"})},"aria-pressed":"row-reverse"===me,isPrimary:"row-reverse"===me}))),Object(a.createElement)(m.PanelBody,{title:Object(h.__)("Style"),initialOpen:!1,className:"wpsp__url-panel-body"},Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Background Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:O}}))),Object(a.createElement)(c.ColorPalette,{value:O,onChange:function(e){return n({boxBgColor:e})},allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Rows Gap (px)"),value:p,onChange:function(e){return n({rowsGap:e})},min:0,max:50}),"grid"===r&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Columns Gap (px)"),value:x,onChange:function(e){return n({columnsGap:e})},min:0,max:50}),Object(a.createElement)(m.ToggleControl,{label:Object(h.__)("Equal Height"),checked:Oe,onChange:function(){return n({equalHeight:!Oe})}})),Object(a.createElement)(m.ToggleControl,{label:Object(h.__)("Enable Separator"),checked:y,onChange:function(){return n({enableSeparator:!y})}}),Object(a.createElement)("hr",{className:"wpsp-editor__separator"}),Object(a.createElement)("h2",null,Object(h.__)("Border")),Object(a.createElement)(m.SelectControl,{label:Object(h.__)("Style"),value:S,options:[{value:"none",label:Object(h.__)("None")},{value:"solid",label:Object(h.__)("Solid")},{value:"dotted",label:Object(h.__)("Dotted")},{value:"dashed",label:Object(h.__)("Dashed")},{value:"double",label:Object(h.__)("Double")}],onChange:function(e){n({borderStyle:e})}}),"none"!==S&&Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Thickness (px)"),value:k,onChange:function(e){n({borderWidth:e})},min:0,max:20}),"none"!==S&&Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Rounded Corners (px)"),value:j,onChange:function(e){n({borderRadius:e})},min:0,max:50}),Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:C}}))),Object(a.createElement)(c.ColorPalette,{value:C,onChange:function(e){return n({borderColor:e})},allowReset:!0}),"accordion"===r&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)("hr",{className:"wpsp-editor__separator"}),Object(a.createElement)("h2",null,Object(h.__)("Icon")),Object(a.createElement)(m.TabPanel,{className:"wpsp-size-type-field-tabs wpsp-size-type-field__common-tabs wpsp-inline-margin",activeClass:"active-tab",tabs:[{name:"desktop",title:Object(a.createElement)(m.Dashicon,{icon:"desktop"}),className:"wpsp-desktop-tab wpsp-responsive-tabs"},{name:"tablet",title:Object(a.createElement)(m.Dashicon,{icon:"tablet"}),className:"wpsp-tablet-tab wpsp-responsive-tabs"},{name:"mobile",title:Object(a.createElement)(m.Dashicon,{icon:"smartphone"}),className:"wpsp-mobile-tab wpsp-responsive-tabs"}]},(function(e){var t;return t="mobile"===e.name?Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===be,"aria-pressed":"px"===be,onClick:function(){return n({iconSizeType:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===be,"aria-pressed":"%"===be,onClick:function(){return n({iconSizeType:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Size")),Object(a.createElement)(m.RangeControl,{value:he,onChange:function(e){return n({iconSizeMobile:e})},min:0,max:100,allowReset:!0})):"tablet"===e.name?Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===be,"aria-pressed":"px"===be,onClick:function(){return n({iconSizeType:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===be,"aria-pressed":"%"===be,onClick:function(){return n({iconSizeType:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Size")),Object(a.createElement)(m.RangeControl,{value:ve,onChange:function(e){return n({iconSizeTablet:e})},min:0,max:100,allowReset:!0})):Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===be,"aria-pressed":"px"===be,onClick:function(){return n({iconSizeType:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===be,"aria-pressed":"%"===be,onClick:function(){return n({iconSizeType:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Size")),Object(a.createElement)(m.RangeControl,{value:we,onChange:function(e){return n({iconSize:e})},min:0,max:100,allowReset:!0})),Object(a.createElement)("div",null,t)})),Object(a.createElement)(m.RangeControl,{label:Object(h.__)("Gap between Icon and Question"),value:D,onChange:function(e){return n({gapBtwIconQUestion:e})},min:0,max:100}),Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Expand Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:A}}))),Object(a.createElement)(c.ColorPalette,{value:A,onChange:function(e){return n({iconColor:e})},allowReset:!0}),Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Collapse Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:L}}))),Object(a.createElement)(c.ColorPalette,{value:L,onChange:function(e){return n({iconActiveColor:e})},allowReset:!0}))),Object(a.createElement)(m.PanelBody,{title:Object(h.__)("Question"),initialOpen:!1,className:"wpsp__url-panel-body"},Object(a.createElement)(m.SelectControl,{label:Object(h.__)("Question Tag"),value:Re,onChange:function(t){return function(t){Object(b.select)("core/block-editor").getBlocks(e.clientId).forEach((function(e){e.attributes.headingTag=t})),n({headingTag:t})}(t)},options:[{value:"span",label:Object(h.__)("Span")},{value:"p",label:Object(h.__)("P")},{value:"h1",label:Object(h.__)("H1")},{value:"h2",label:Object(h.__)("H2")},{value:"h3",label:Object(h.__)("H3")},{value:"h4",label:Object(h.__)("H4")},{value:"h5",label:Object(h.__)("H5")},{value:"h6",label:Object(h.__)("H6")}]}),Object(a.createElement)(g.a,{label:Object(h.__)("Typography"),attributes:i,setAttributes:n,loadGoogleFonts:{value:H,label:"questionloadGoogleFonts"},fontFamily:{value:G,label:"questionFontFamily"},fontWeight:{value:q,label:"questionFontWeight"},fontSubset:{value:I,label:"questionFontSubset"},fontSizeType:{value:K,label:"questionFontSizeType"},fontSize:{value:W,label:"questionFontSize"},fontSizeMobile:{value:J,label:"questionFontSizeMobile"},fontSizeTablet:{value:U,label:"questionFontSizeTablet"},lineHeightType:{value:V,label:"questionLineHeightType"},lineHeight:{value:Q,label:"questionLineHeight"},lineHeightMobile:{value:Y,label:"questionLineHeightMobile"},lineHeightTablet:{value:Z,label:"questionLineHeightTablet"}}),Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Text Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:f}}))),Object(a.createElement)(c.ColorPalette,{value:f,onChange:function(e){return n({questionTextColor:e})},allowReset:!0}),"accordion"===r&&Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Text Active/Hover Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:E}}))),"grid"===r&&Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Text Hover Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:E}}))),Object(a.createElement)(c.ColorPalette,{value:E,onChange:function(e){return n({questionTextActiveColor:e})},allowReset:!0}),Object(a.createElement)(m.TabPanel,{className:"wpsp-size-type-field-tabs wpsp-size-type-field__common-tabs wpsp-inline-margin",activeClass:"active-tab",tabs:[{name:"desktop",title:Object(a.createElement)(m.Dashicon,{icon:"desktop"}),className:"wpsp-desktop-tab wpsp-responsive-tabs"},{name:"tablet",title:Object(a.createElement)(m.Dashicon,{icon:"tablet"}),className:"wpsp-tablet-tab wpsp-responsive-tabs"},{name:"mobile",title:Object(a.createElement)(m.Dashicon,{icon:"smartphone"}),className:"wpsp-mobile-tab wpsp-responsive-tabs"}]},(function(e){var t;return t="mobile"===e.name?Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===_,"aria-pressed":"px"===_,onClick:function(){return n({questionPaddingTypeDesktop:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===_,"aria-pressed":"%"===_,onClick:function(){return n({questionPaddingTypeDesktop:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Padding")),Object(a.createElement)(m.RangeControl,{label:u.a.left_margin,className:"wpsp-margin-control",value:Te,onChange:function(e){return n({questionLeftPaddingMobile:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.right_margin,className:"wpsp-margin-control",value:Me,onChange:function(e){return n({hquestionPaddingMobile:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.top_margin,className:"wpsp-margin-control",value:ze,onChange:function(e){return n({vquestionPaddingMobile:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.bottom_margin,className:"wpsp-margin-control",value:Ne,onChange:function(e){return n({questionBottomPaddingMobile:e})},min:0,max:50,allowReset:!0})):"tablet"===e.name?Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===_,"aria-pressed":"px"===_,onClick:function(){return n({questionPaddingTypeDesktop:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===_,"aria-pressed":"%"===_,onClick:function(){return n({questionPaddingTypeDesktop:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Padding")),Object(a.createElement)(m.RangeControl,{label:u.a.left_margin,className:"wpsp-margin-control",value:Se,onChange:function(e){return n({questionLeftPaddingTablet:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.right_margin,className:"wpsp-margin-control",value:ke,onChange:function(e){return n({hquestionPaddingTablet:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.top_margin,className:"wpsp-margin-control",value:je,onChange:function(e){return n({vquestionPaddingTablet:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.bottom_margin,className:"wpsp-margin-control",value:Ce,onChange:function(e){return n({questionBottomPaddingTablet:e})},min:0,max:50,allowReset:!0})):Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===_,"aria-pressed":"px"===_,onClick:function(){return n({questionPaddingTypeDesktop:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===_,"aria-pressed":"%"===_,onClick:function(){return n({questionPaddingTypeDesktop:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Padding")),Object(a.createElement)(m.RangeControl,{label:u.a.left_margin,className:"wpsp-margin-control",value:fe,onChange:function(e){return n({questionLeftPaddingDesktop:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.right_margin,className:"wpsp-margin-control",value:Ee,onChange:function(e){return n({hquestionPaddingDesktop:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.top_margin,className:"wpsp-margin-control",value:_e,onChange:function(e){return n({vquestionPaddingDesktop:e})},min:0,max:50,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.bottom_margin,className:"wpsp-margin-control",value:Pe,onChange:function(e){return n({questionBottomPaddingDesktop:e})},min:0,max:50,allowReset:!0})),Object(a.createElement)("div",null,t)}))),Object(a.createElement)(m.PanelBody,{title:Object(h.__)("Answer"),initialOpen:!1,className:"wpsp__url-panel-body"},Object(a.createElement)(g.a,{label:Object(h.__)("Typography"),attributes:i,setAttributes:n,loadGoogleFonts:{value:X,label:"answerloadGoogleFonts"},fontFamily:{value:$,label:"answerFontFamily"},fontWeight:{value:ee,label:"answerFontWeight"},fontSubset:{value:te,label:"answerFontSubset"},fontSizeType:{value:ie,label:"answerFontSizeType"},fontSize:{value:ae,label:"answerFontSize"},fontSizeMobile:{value:le,label:"answerFontSizeMobile"},fontSizeTablet:{value:ne,label:"answerFontSizeTablet"},lineHeightType:{value:re,label:"answerLineHeightType"},lineHeight:{value:se,label:"answerLineHeight"},lineHeightMobile:{value:oe,label:"answerLineHeightMobile"},lineHeightTablet:{value:ue,label:"answerLineHeightTablet"}}),Object(a.createElement)("p",{className:"wpsp-setting-label"},Object(h.__)("Text Color"),Object(a.createElement)("span",{className:"components-base-control__label"},Object(a.createElement)("span",{className:"-color-indicator",style:{backgroundColor:P}}))),Object(a.createElement)(c.ColorPalette,{value:P,onChange:function(e){return n({answerTextColor:e})},allowReset:!0}),Object(a.createElement)(m.TabPanel,{className:"wpsp-size-type-field-tabs wpsp-size-type-field__common-tabs wpsp-inline-margin",activeClass:"active-tab",tabs:[{name:"desktop",title:Object(a.createElement)(m.Dashicon,{icon:"desktop"}),className:"wpsp-desktop-tab wpsp-responsive-tabs"},{name:"tablet",title:Object(a.createElement)(m.Dashicon,{icon:"tablet"}),className:"wpsp-tablet-tab wpsp-responsive-tabs"},{name:"mobile",title:Object(a.createElement)(m.Dashicon,{icon:"smartphone"}),className:"wpsp-mobile-tab wpsp-responsive-tabs"}]},(function(e){var t;return t="mobile"===e.name?Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===T,"aria-pressed":"px"===T,onClick:function(){return n({answerPaddingTypeDesktop:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===T,"aria-pressed":"%"===T,onClick:function(){return n({answerPaddingTypeDesktop:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Padding")),Object(a.createElement)(m.RangeControl,{label:u.a.vertical_spacing,className:"wpsp-margin-control",value:M,onChange:function(e){return n({vanswerPaddingMobile:e})},min:0,max:100,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.horizontal_spacing,className:"wpsp-margin-control",value:R,onChange:function(e){return n({hanswerPaddingMobile:e})},min:0,max:100,allowReset:!0})):"tablet"===e.name?Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===T,"aria-pressed":"px"===T,onClick:function(){return n({answerPaddingTypeDesktop:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===T,"aria-pressed":"%"===T,onClick:function(){return n({answerPaddingTypeDesktop:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Padding")),Object(a.createElement)(m.RangeControl,{label:u.a.vertical_spacing,className:"wpsp-margin-control",value:z,onChange:function(e){return n({vanswerPaddingTablet:e})},min:0,max:100,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.horizontal_spacing,className:"wpsp-margin-control",value:B,onChange:function(e){return n({hanswerPaddingTablet:e})},min:0,max:100,allowReset:!0})):Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(h.__)("Size Type")},Object(a.createElement)(m.Button,{key:"px",className:"wpsp-size-btn",isSmall:!0,isPrimary:"px"===T,"aria-pressed":"px"===T,onClick:function(){return n({answerPaddingTypeDesktop:"px"})}},"px"),Object(a.createElement)(m.Button,{key:"%",className:"wpsp-size-btn",isSmall:!0,isPrimary:"%"===T,"aria-pressed":"%"===T,onClick:function(){return n({answerPaddingTypeDesktop:"%"})}},"%")),Object(a.createElement)("h2",null,Object(h.__)("Padding")),Object(a.createElement)(m.RangeControl,{label:u.a.vertical_spacing,className:"wpsp-margin-control",value:N,onChange:function(e){return n({vanswerPaddingDesktop:e})},min:0,max:100,allowReset:!0}),Object(a.createElement)(m.RangeControl,{label:u.a.horizontal_spacing,className:"wpsp-margin-control",value:F,onChange:function(e){return n({hanswerPaddingDesktop:e})},min:0,max:100,allowReset:!0})),Object(a.createElement)("div",null,t)})))))}))}}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/render.js b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/render.js new file mode 100644 index 00000000..1dbd3421 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/render.js @@ -0,0 +1 @@ +(window.webpackJsonp_wp_schema_pro=window.webpackJsonp_wp_schema_pro||[]).push([[6],{39:function(e,t,n){"use strict";var a,r=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),o=[];function i(e){for(var t=-1,n=0;n0&&!--O&&(a(),a=null)};var k=E,I=n(3);Object(d.__)("Thumbnail"),Object(d.__)("Medium"),Object(d.__)("Large"),t.default=function(e){Object(I.useLayoutEffect)((function(){return k.use(),function(){k.unuse()}}),[]);var t=e=e.parentProps,n=t.className,a=t.setAttributes,r=t.attributes,c=r.iconimgPosition,g=r.seperatorPosition,h=r.seperatorStyle,j=r.ctaType,_=r.iconImage,O=r.showTitle,y=r.showDesc,E=function(e){if(e&&e.url)if(e.type&&"image"===e.type){if(e.sizes)S(e.sizes);a({iconImage:e})}else a({iconImage:null});else a({iconImage:null})},S=function(e){var t=[];return jQuery.each(e,(function(e){var n={value:e,label:e};t.push(n)})),t};_&&_.sizes&&S(_.sizes);var C=Object(d.__)("Select Image");_&&(C=null===_.url||""===_.url?Object(d.__)("Select Image"):Object(d.__)("Replace Image"));var N=Object(i.createElement)(f.a,{attributes:r}),T=N,x=g,M=Object(i.createElement)(m.a,{attributes:r}),F=!0;"after_icon"!==g||"above-title"!==c&&"below-title"!==c||(F=!1,T=Object(i.createElement)(i.Fragment,null,N,"none"!==h&&M)),"after_icon"!==g||"above-title"===c&&"below-title"===c||(x="after_title"),"below-title"===c&&"after_title"===g&&(F=!1,T=Object(i.createElement)(i.Fragment,null,"none"!==h&&M,N));var L=Object(i.createElement)(i.Fragment,null,"none"!==h&&"after_title"===x&&F&&M,Object(i.createElement)("div",{className:"wpsp-ifb-text-wrap"},y&&Object(i.createElement)(u.a,{attributes:r,setAttributes:a,props:e}),"none"!==h&&"after_desc"===x&&M,Object(i.createElement)(b.a,{attributes:r,setAttributes:a}))),R=Object(i.createElement)(i.Fragment,null,Object(i.createElement)("div",{className:"wpsp-ifb-title-wrap"},O&&Object(i.createElement)(s.a,{attributes:r,setAttributes:a,props:e}))),B=Object(i.createElement)("div",{className:l.a.apply(void 0,["wpsp-how-to__content-wrap","all"===j?" wpsp-how-to_cta-type-all":""].concat(o()(Object(p.a)(r))))},Object(i.createElement)("div",{className:"wpsp-ifb-content"},"above-title"===c&&Object(i.createElement)(i.Fragment,null,T,Object(i.createElement)(w.MediaUpload,{title:Object(d.__)("Select Image"),onSelect:E,allowedTypes:["image"],value:_,render:function(e){var t=e.open;return Object(i.createElement)(v.Button,{isDefault:!0,onClick:t},C)}}),_.url&&Object(i.createElement)(v.Button,{className:"wpsp-rm-btn",onClick:function(){return a({iconImage:""})},isLink:!0,isDestructive:!0},Object(d.__)("Remove Image")),R,L),"below-title"===c&&Object(i.createElement)(i.Fragment,null,R,T,Object(i.createElement)(w.MediaUpload,{title:Object(d.__)("Select Image"),onSelect:E,allowedTypes:["image"],value:_,render:function(e){var t=e.open;return Object(i.createElement)(v.Button,{isDefault:!0,onClick:t},C)}}),_.url&&Object(i.createElement)(v.Button,{className:"wpsp-rm-btn",onClick:function(){return a({iconImage:""})},isLink:!0,isDestructive:!0},Object(d.__)("Remove Image")),L),"below-desc"===c&&Object(i.createElement)(i.Fragment,null,R,L,T,Object(i.createElement)(w.MediaUpload,{title:Object(d.__)("Select Image"),onSelect:E,allowedTypes:["image"],value:_,render:function(e){var t=e.open;return Object(i.createElement)(v.Button,{isDefault:!0,onClick:t},C)}}),_.url&&Object(i.createElement)(v.Button,{className:"wpsp-rm-btn",onClick:function(){return a({iconImage:""})},isLink:!0,isDestructive:!0},Object(d.__)("Remove Image")))));return Object(i.createElement)(i.Fragment,null,Object(i.createElement)("div",{className:l()(n,"wpsp-howto-child__outer-wrap","wpsp-block-".concat(e.clientId.substr(0,8)))},"all"===j&&Object(i.createElement)(i.Fragment,null,Object(i.createElement)("a",{className:"wpsp-howto-child-link-wrap wpsp-how-to__link-to-all","aria-label":"HowToChild Link",rel:"noopener noreferrer"}),B),"all"!==j&&B))}}}]); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/settings.js b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/settings.js new file mode 100644 index 00000000..faa9b8b1 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/dist/chunks/how-to-child/settings.js @@ -0,0 +1 @@ +(window.webpackJsonp_wp_schema_pro=window.webpackJsonp_wp_schema_pro||[]).push([[7],{48:function(e,t,i){"use strict";var a=i(18),l=i.n(a),n=i(36),r=i.n(n),s=i(43),o=i.n(s),u=i(44),g=i.n(u),c=i(50),h=i.n(c),b=i(45),m=i.n(b),v=i(46),w=i.n(v),x=i(47),p=i.n(x),d=i(0),f=i(1),y=i(37),S=i.n(y),O=i(34),k={ABeeZee:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Abel:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Abhaya Libre":{v:["regular","500","600","700","800"],subset:["latin-ext","sinhala","latin"],weight:["400","500","600","700","800"],i:["normal"]},"Abril Fatface":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Aclonica:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Acme:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Actor:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Adamina:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Advent Pro":{v:["100","200","300","regular","500","600","700"],subset:["latin-ext","greek","latin"],weight:["100","200","300","400","500","600","700"],i:["normal"]},"Aguafina Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Akronim:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Aladin:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Aldrich:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Alef:{v:["regular","700"],subset:["hebrew","latin"],weight:["400","700"],i:["normal"]},Alegreya:{v:["regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","500","700","800","900"],i:["normal","italic"]},"Alegreya SC":{v:["regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","500","700","800","900"],i:["normal","italic"]},"Alegreya Sans":{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal","italic"]},"Alegreya Sans SC":{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal","italic"]},"Alex Brush":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Alfa Slab One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Alice:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin"],weight:["400"],i:["normal"]},Alike:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Alike Angular":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Allan:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Allerta:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Allerta Stencil":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Allura:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Almendra:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Almendra Display":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Almendra SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Amarante:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Amaranth:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Amatic SC":{v:["regular","700"],subset:["cyrillic","latin-ext","hebrew","vietnamese","latin"],weight:["400","700"],i:["normal"]},Amethysta:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Amiko:{v:["regular","600","700"],subset:["latin-ext","devanagari","latin"],weight:["400","600","700"],i:["normal"]},Amiri:{v:["regular","italic","700","700italic"],subset:["latin-ext","arabic","latin"],weight:["400","700"],i:["normal","italic"]},Amita:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Anaheim:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Andada:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Andika:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Angkor:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Annie Use Your Telescope":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Anonymous Pro":{v:["regular","italic","700","700italic"],subset:["cyrillic","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Antic:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Antic Didone":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Antic Slab":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Anton:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Arapey:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Arbutus:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Arbutus Slab":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Architects Daughter":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Archivo:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Archivo Black":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Archivo Narrow":{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Aref Ruqaa":{v:["regular","700"],subset:["arabic","latin"],weight:["400","700"],i:["normal"]},"Arima Madurai":{v:["100","200","300","regular","500","700","800","900"],subset:["latin-ext","tamil","vietnamese","latin"],weight:["100","200","300","400","500","700","800","900"],i:["normal"]},Arimo:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","hebrew","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Arizonia:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Armata:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Arsenal:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Artifika:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Arvo:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Arya:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Asap:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Asap Condensed":{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},Asar:{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Asset:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Assistant:{v:["200","300","regular","600","700","800"],subset:["hebrew","latin"],weight:["200","300","400","600","700","800"],i:["normal"]},Astloch:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Asul:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Athiti:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},Atma:{v:["300","regular","500","600","700"],subset:["latin-ext","bengali","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Atomic Age":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Aubrey:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Audiowide:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Autour One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Average:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Average Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Averia Gruesa Libre":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Averia Libre":{v:["300","300italic","regular","italic","700","700italic"],subset:["latin"],weight:["300","400","700"],i:["normal","italic"]},"Averia Sans Libre":{v:["300","300italic","regular","italic","700","700italic"],subset:["latin"],weight:["300","400","700"],i:["normal","italic"]},"Averia Serif Libre":{v:["300","300italic","regular","italic","700","700italic"],subset:["latin"],weight:["300","400","700"],i:["normal","italic"]},"Bad Script":{v:["regular"],subset:["cyrillic","latin"],weight:["400"],i:["normal"]},Bahiana:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Baloo:{v:["regular"],subset:["latin-ext","devanagari","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Bhai":{v:["regular"],subset:["latin-ext","gujarati","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Bhaijaan":{v:["regular"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Bhaina":{v:["regular"],subset:["latin-ext","oriya","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Chettan":{v:["regular"],subset:["malayalam","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Da":{v:["regular"],subset:["latin-ext","vietnamese","bengali","latin"],weight:["400"],i:["normal"]},"Baloo Paaji":{v:["regular"],subset:["latin-ext","gurmukhi","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Tamma":{v:["regular"],subset:["latin-ext","vietnamese","latin","kannada"],weight:["400"],i:["normal"]},"Baloo Tammudu":{v:["regular"],subset:["latin-ext","telugu","vietnamese","latin"],weight:["400"],i:["normal"]},"Baloo Thambi":{v:["regular"],subset:["latin-ext","tamil","vietnamese","latin"],weight:["400"],i:["normal"]},Balthazar:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bangers:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Barlow:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Barlow Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Barlow Semi Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Barrio:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Basic:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Battambang:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},Baumans:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bayon:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Belgrano:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bellefair:{v:["regular"],subset:["latin-ext","hebrew","latin"],weight:["400"],i:["normal"]},Belleza:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},BenchNine:{v:["300","regular","700"],subset:["latin-ext","latin"],weight:["300","400","700"],i:["normal"]},Bentham:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Berkshire Swash":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Bevan:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bigelow Rules":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bigshot One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Bilbo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bilbo Swash Caps":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},BioRhyme:{v:["200","300","regular","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","700","800"],i:["normal"]},"BioRhyme Expanded":{v:["200","300","regular","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","700","800"],i:["normal"]},Biryani:{v:["200","300","regular","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","600","700","800","900"],i:["normal"]},Bitter:{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Black And White Picture":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Black Han Sans":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Black Ops One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Bokor:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Bonbon:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Boogaloo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Bowlby One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Bowlby One SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Brawler:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Bree Serif":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bubblegum Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Bubbler One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Buda:{v:["300"],subset:["latin"],weight:["300"],i:[]},Buenard:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Bungee:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Hairline":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Inline":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Outline":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Bungee Shade":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Butcherman:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Butterfly Kids":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Cabin:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Cabin Condensed":{v:["regular","500","600","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal"]},"Cabin Sketch":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Caesar Dressing":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cagliostro:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cairo:{v:["200","300","regular","600","700","900"],subset:["latin-ext","arabic","latin"],weight:["200","300","400","600","700","900"],i:["normal"]},Calligraffitti:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cambay:{v:["regular","italic","700","700italic"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal","italic"]},Cambo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Candal:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cantarell:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Cantata One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Cantora One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Capriola:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Cardo:{v:["regular","italic","700"],subset:["greek-ext","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Carme:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Carrois Gothic":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Carrois Gothic SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Carter One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Catamaran:{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","tamil","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Caudex:{v:["regular","italic","700","700italic"],subset:["greek-ext","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Caveat:{v:["regular","700"],subset:["cyrillic","latin-ext","latin"],weight:["400","700"],i:["normal"]},"Caveat Brush":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Cedarville Cursive":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Ceviche One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Changa:{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","arabic","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Changa One":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Chango:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Chathura:{v:["100","300","regular","700","800"],subset:["telugu","latin"],weight:["100","300","400","700","800"],i:["normal"]},"Chau Philomene One":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Chela One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Chelsea Market":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Chenla:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Cherry Cream Soda":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Cherry Swash":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Chewy:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Chicle:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Chivo:{v:["300","300italic","regular","italic","700","700italic","900","900italic"],subset:["latin-ext","latin"],weight:["300","400","700","900"],i:["normal","italic"]},Chonburi:{v:["regular"],subset:["latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},Cinzel:{v:["regular","700","900"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal"]},"Cinzel Decorative":{v:["regular","700","900"],subset:["latin"],weight:["400","700","900"],i:["normal"]},"Clicker Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Coda:{v:["regular","800"],subset:["latin-ext","latin"],weight:["400","800"],i:["normal"]},"Coda Caption":{v:["800"],subset:["latin-ext","latin"],weight:["800"],i:[]},Codystar:{v:["300","regular"],subset:["latin-ext","latin"],weight:["300","400"],i:["normal"]},Coiny:{v:["regular"],subset:["latin-ext","tamil","vietnamese","latin"],weight:["400"],i:["normal"]},Combo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Comfortaa:{v:["300","regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","700"],i:["normal"]},"Coming Soon":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Concert One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Condiment:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Content:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},"Contrail One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Convergence:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cookie:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Copse:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Corben:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Cormorant:{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Cormorant Garamond":{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Cormorant Infant":{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Cormorant SC":{v:["300","regular","500","600","700"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Cormorant Unicase":{v:["300","regular","500","600","700"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Cormorant Upright":{v:["300","regular","500","600","700"],subset:["latin-ext","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},Courgette:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Cousine:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","hebrew","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Coustard:{v:["regular","900"],subset:["latin"],weight:["400","900"],i:["normal"]},"Covered By Your Grace":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Crafty Girls":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Creepster:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Crete Round":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Crimson Text":{v:["regular","italic","600","600italic","700","700italic"],subset:["latin"],weight:["400","600","700"],i:["normal","italic"]},"Croissant One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Crushed:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Cuprum:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Cute Font":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Cutive:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Cutive Mono":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Damion:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Dancing Script":{v:["regular","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal"]},Dangrek:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"David Libre":{v:["regular","500","700"],subset:["latin-ext","hebrew","vietnamese","latin"],weight:["400","500","700"],i:["normal"]},"Dawning of a New Day":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Days One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Dekko:{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Delius:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Delius Swash Caps":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Delius Unicase":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Della Respira":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Denk One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Devonshire:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Dhurjati:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Didact Gothic":{v:["regular"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400"],i:["normal"]},Diplomata:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Diplomata SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Do Hyeon":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Dokdo:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Domine:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Donegal One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Doppio One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Dorsa:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Dosis:{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Dr Sugiyama":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Duru Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Dynalight:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"EB Garamond":{v:["regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","500","600","700","800"],i:["normal","italic"]},"Eagle Lake":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"East Sea Dokdo":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Eater:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Economica:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Eczar:{v:["regular","500","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700","800"],i:["normal"]},"El Messiri":{v:["regular","500","600","700"],subset:["cyrillic","arabic","latin"],weight:["400","500","600","700"],i:["normal"]},Electrolize:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Elsie:{v:["regular","900"],subset:["latin-ext","latin"],weight:["400","900"],i:["normal"]},"Elsie Swash Caps":{v:["regular","900"],subset:["latin-ext","latin"],weight:["400","900"],i:["normal"]},"Emblema One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Emilys Candy":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Encode Sans":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Expanded":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Semi Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Encode Sans Semi Expanded":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Engagement:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Englebert:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Enriqueta:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Erica One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Esteban:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Euphoria Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ewert:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Exo:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Exo 2":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Expletus Sans":{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin"],weight:["400","500","600","700"],i:["normal","italic"]},"Fanwood Text":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Farsan:{v:["regular"],subset:["latin-ext","gujarati","vietnamese","latin"],weight:["400"],i:["normal"]},Fascinate:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Fascinate Inline":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Faster One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Fasthand:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Fauna One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Faustina:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},Federant:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Federo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Felipa:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Fenix:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Finger Paint":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Fira Mono":{v:["regular","500","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400","500","700"],i:["normal"]},"Fira Sans":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Fira Sans Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Fira Sans Extra Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Fjalla One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Fjord One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Flamenco:{v:["300","regular"],subset:["latin"],weight:["300","400"],i:["normal"]},Flavors:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Fondamento:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Fontdiner Swanky":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Forum:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal"]},"Francois One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Frank Ruhl Libre":{v:["300","regular","500","700","900"],subset:["latin-ext","hebrew","latin"],weight:["300","400","500","700","900"],i:["normal"]},"Freckle Face":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Fredericka the Great":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Fredoka One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Freehand:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Fresca:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Frijole:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Fruktur:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Fugaz One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"GFS Didot":{v:["regular"],subset:["greek"],weight:["400"],i:["normal"]},"GFS Neohellenic":{v:["regular","italic","700","700italic"],subset:["greek"],weight:["400","700"],i:["normal","italic"]},Gabriela:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin"],weight:["400"],i:["normal"]},Gaegu:{v:["300","regular","700"],subset:["korean","latin"],weight:["300","400","700"],i:["normal"]},Gafata:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Galada:{v:["regular"],subset:["bengali","latin"],weight:["400"],i:["normal"]},Galdeano:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Galindo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Gamja Flower":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Gentium Basic":{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Gentium Book Basic":{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Geo:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Geostar:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Geostar Fill":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Germania One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Gidugu:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Gilda Display":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Give You Glory":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Glass Antiqua":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Glegoo:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},"Gloria Hallelujah":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Goblin One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Gochi Hand":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Gorditas:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Gothic A1":{v:["100","200","300","regular","500","600","700","800","900"],subset:["korean","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Goudy Bookletter 1911":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Graduate:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Grand Hotel":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Gravitas One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Great Vibes":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Griffy:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Gruppo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Gudea:{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Gugi:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Gurajada:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Habibi:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Halant:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hammersmith One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Hanalei:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Hanalei Fill":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Handlee:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Hanuman:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},"Happy Monkey":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Harmattan:{v:["regular"],subset:["arabic","latin"],weight:["400"],i:["normal"]},"Headland One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Heebo:{v:["100","300","regular","500","700","800","900"],subset:["hebrew","latin"],weight:["100","300","400","500","700","800","900"],i:["normal"]},"Henny Penny":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Herr Von Muellerhoff":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Hi Melody":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Hind:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Guntur":{v:["300","regular","500","600","700"],subset:["latin-ext","telugu","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Madurai":{v:["300","regular","500","600","700"],subset:["latin-ext","tamil","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Siliguri":{v:["300","regular","500","600","700"],subset:["latin-ext","bengali","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Hind Vadodara":{v:["300","regular","500","600","700"],subset:["latin-ext","gujarati","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Holtwood One SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Homemade Apple":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Homenaje:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IBM Plex Mono":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IBM Plex Sans":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IBM Plex Sans Condensed":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IBM Plex Serif":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700"],i:["normal","italic"]},"IM Fell DW Pica":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell DW Pica SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell Double Pica":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell Double Pica SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell English":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell English SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell French Canon":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell French Canon SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"IM Fell Great Primer":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"IM Fell Great Primer SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Iceberg:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Iceland:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Imprima:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Inconsolata:{v:["regular","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal"]},Inder:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Indie Flower":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Inika:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Inknut Antiqua":{v:["300","regular","500","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700","800","900"],i:["normal"]},"Irish Grover":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Istok Web":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Italiana:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Italianno:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Itim:{v:["regular"],subset:["latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},"Jacques Francois":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Jacques Francois Shadow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Jaldi:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},"Jim Nightshade":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Jockey One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Jolly Lodger":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Jomhuria:{v:["regular"],subset:["latin-ext","arabic","latin"],weight:["400"],i:["normal"]},"Josefin Sans":{v:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["100","300","400","600","700"],i:["normal","italic"]},"Josefin Slab":{v:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subset:["latin"],weight:["100","300","400","600","700"],i:["normal","italic"]},"Joti One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Jua:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Judson:{v:["regular","italic","700"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Julee:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Julius Sans One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Junge:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Jura:{v:["300","regular","500","600","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Just Another Hand":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Just Me Again Down Here":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Kadwa:{v:["regular","700"],subset:["devanagari","latin"],weight:["400","700"],i:["normal"]},Kalam:{v:["300","regular","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","700"],i:["normal"]},Kameron:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Kanit:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Kantumruy:{v:["300","regular","700"],subset:["khmer"],weight:["300","400","700"],i:["normal"]},Karla:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Karma:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Katibeh:{v:["regular"],subset:["latin-ext","arabic","latin"],weight:["400"],i:["normal"]},"Kaushan Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Kavivanar:{v:["regular"],subset:["latin-ext","tamil","latin"],weight:["400"],i:["normal"]},Kavoon:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Kdam Thmor":{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Keania One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Kelly Slab":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Kenia:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Khand:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Khmer:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Khula:{v:["300","regular","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["300","400","600","700","800"],i:["normal"]},"Kirang Haerang":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Kite One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Knewave:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Kosugi:{v:["regular"],subset:["cyrillic","japanese","latin"],weight:["400"],i:["normal"]},"Kosugi Maru":{v:["regular"],subset:["cyrillic","japanese","latin"],weight:["400"],i:["normal"]},"Kotta One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Koulen:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Kranky:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Kreon:{v:["300","regular","700"],subset:["latin"],weight:["300","400","700"],i:["normal"]},Kristi:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Krona One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Kumar One":{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},"Kumar One Outline":{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},Kurale:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},"La Belle Aurore":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Laila:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},"Lakki Reddy":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Lalezar:{v:["regular"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["400"],i:["normal"]},Lancelot:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Lateef:{v:["regular"],subset:["arabic","latin"],weight:["400"],i:["normal"]},Lato:{v:["100","100italic","300","300italic","regular","italic","700","700italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","300","400","700","900"],i:["normal","italic"]},"League Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Leckerli One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Ledger:{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Lekton:{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Lemon:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Lemonada:{v:["300","regular","600","700"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["300","400","600","700"],i:["normal"]},"Libre Barcode 128":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 128 Text":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39 Extended":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39 Extended Text":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Barcode 39 Text":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Libre Baskerville":{v:["regular","italic","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Libre Franklin":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Life Savers":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Lilita One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Lily Script One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Limelight:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Linden Hill":{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Lobster:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Lobster Two":{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Londrina Outline":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Londrina Shadow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Londrina Sketch":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Londrina Solid":{v:["100","300","regular","900"],subset:["latin"],weight:["100","300","400","900"],i:["normal"]},Lora:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Love Ya Like A Sister":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Loved by the King":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Lovers Quarrel":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Luckiest Guy":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Lusitana:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Lustria:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"M PLUS 1p":{v:["100","300","regular","500","700","800","900"],subset:["cyrillic","cyrillic-ext","greek-ext","japanese","latin-ext","hebrew","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal"]},"M PLUS Rounded 1c":{v:["100","300","regular","500","700","800","900"],subset:["cyrillic","cyrillic-ext","greek-ext","japanese","latin-ext","hebrew","greek","vietnamese","latin"],weight:["100","300","400","500","700","800","900"],i:["normal"]},Macondo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Macondo Swash Caps":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Mada:{v:["200","300","regular","500","600","700","900"],subset:["arabic","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},Magra:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Maiden Orange":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Maitree:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},Mako:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Mallanna:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Mandali:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Manuale:{v:["regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","600","700"],i:["normal","italic"]},Marcellus:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Marcellus SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Marck Script":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Margarine:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Markazi Text":{v:["regular","500","600","700"],subset:["latin-ext","arabic","vietnamese","latin"],weight:["400","500","600","700"],i:["normal"]},"Marko One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Marmelad:{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Martel:{v:["200","300","regular","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","600","700","800","900"],i:["normal"]},"Martel Sans":{v:["200","300","regular","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","600","700","800","900"],i:["normal"]},Marvel:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Mate:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},"Mate SC":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Maven Pro":{v:["regular","500","700","900"],subset:["latin-ext","vietnamese","latin"],weight:["400","500","700","900"],i:["normal"]},McLaren:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Meddon:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},MedievalSharp:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Medula One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Meera Inimai":{v:["regular"],subset:["tamil","latin"],weight:["400"],i:["normal"]},Megrim:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Meie Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Merienda:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Merienda One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Merriweather:{v:["300","300italic","regular","italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["300","400","700","900"],i:["normal","italic"]},"Merriweather Sans":{v:["300","300italic","regular","italic","700","700italic","800","800italic"],subset:["latin-ext","latin"],weight:["300","400","700","800"],i:["normal","italic"]},Metal:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Metal Mania":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Metamorphous:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Metrophobic:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Michroma:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Milonga:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Miltonian:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Miltonian Tattoo":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Mina:{v:["regular","700"],subset:["latin-ext","bengali","latin"],weight:["400","700"],i:["normal"]},Miniver:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Miriam Libre":{v:["regular","700"],subset:["latin-ext","hebrew","latin"],weight:["400","700"],i:["normal"]},Mirza:{v:["regular","500","600","700"],subset:["latin-ext","arabic","latin"],weight:["400","500","600","700"],i:["normal"]},"Miss Fajardose":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Mitr:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},Modak:{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},"Modern Antiqua":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Mogra:{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},Molengo:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Molle:{v:["italic"],subset:["latin-ext","latin"],weight:[],i:["italic"]},Monda:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Monofett:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Monoton:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Monsieur La Doulaise":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Montaga:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Montez:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Montserrat:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Montserrat Alternates":{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Montserrat Subrayada":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Moul:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Moulpali:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Mountains of Christmas":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Mouse Memoirs":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mr Bedfort":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mr Dafoe":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mr De Haviland":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mrs Saint Delafield":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Mrs Sheppards":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Mukta:{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Mukta Mahee":{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","gurmukhi","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Mukta Malar":{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","tamil","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},"Mukta Vaani":{v:["200","300","regular","500","600","700","800"],subset:["latin-ext","gujarati","latin"],weight:["200","300","400","500","600","700","800"],i:["normal"]},Muli:{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["200","300","400","600","700","800","900"],i:["normal","italic"]},"Mystery Quest":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},NTR:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Nanum Brush Script":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Nanum Gothic":{v:["regular","700","800"],subset:["korean","latin"],weight:["400","700","800"],i:["normal"]},"Nanum Gothic Coding":{v:["regular","700"],subset:["korean","latin"],weight:["400","700"],i:["normal"]},"Nanum Myeongjo":{v:["regular","700","800"],subset:["korean","latin"],weight:["400","700","800"],i:["normal"]},"Nanum Pen Script":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Neucha:{v:["regular"],subset:["cyrillic","latin"],weight:["400"],i:["normal"]},Neuton:{v:["200","300","regular","italic","700","800"],subset:["latin-ext","latin"],weight:["200","300","400","700","800"],i:["normal","italic"]},"New Rocker":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"News Cycle":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},Niconne:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Nixie One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Nobile:{v:["regular","italic","500","500italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","500","700"],i:["normal","italic"]},Nokora:{v:["regular","700"],subset:["khmer"],weight:["400","700"],i:["normal"]},Norican:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Nosifer:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Nothing You Could Do":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Noticia Text":{v:["regular","italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Noto Sans":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","devanagari","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Noto Sans JP":{v:["100","300","regular","500","700","900"],subset:["japanese","latin"],weight:["100","300","400","500","700","900"],i:["normal"]},"Noto Sans KR":{v:["100","300","regular","500","700","900"],subset:["korean","latin"],weight:["100","300","400","500","700","900"],i:["normal"]},"Noto Serif":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Noto Serif JP":{v:["200","300","regular","500","600","700","900"],subset:["japanese","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},"Noto Serif KR":{v:["200","300","regular","500","600","700","900"],subset:["korean","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},"Nova Cut":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Flat":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Mono":{v:["regular"],subset:["greek","latin"],weight:["400"],i:["normal"]},"Nova Oval":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Round":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Slim":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Nova Square":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Numans:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Nunito:{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["200","300","400","600","700","800","900"],i:["normal","italic"]},"Nunito Sans":{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","vietnamese","latin"],weight:["200","300","400","600","700","800","900"],i:["normal","italic"]},"Odor Mean Chey":{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Offside:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Old Standard TT":{v:["regular","italic","700"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Oldenburg:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Oleo Script":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Oleo Script Swash Caps":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Open Sans":{v:["300","300italic","regular","italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","600","700","800"],i:["normal","italic"]},"Open Sans Condensed":{v:["300","300italic","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","700"],i:[]},Oranienbaum:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal"]},Orbitron:{v:["regular","500","700","900"],subset:["latin"],weight:["400","500","700","900"],i:["normal"]},Oregano:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Orienta:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Original Surfer":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Oswald:{v:["200","300","regular","500","600","700"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},"Over the Rainbow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Overlock:{v:["regular","italic","700","700italic","900","900italic"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal","italic"]},"Overlock SC":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Overpass:{v:["100","100italic","200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","600","700","800","900"],i:["normal","italic"]},"Overpass Mono":{v:["300","regular","600","700"],subset:["latin-ext","latin"],weight:["300","400","600","700"],i:["normal"]},Ovo:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Oxygen:{v:["300","regular","700"],subset:["latin-ext","latin"],weight:["300","400","700"],i:["normal"]},"Oxygen Mono":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"PT Mono":{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal"]},"PT Sans":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"PT Sans Caption":{v:["regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal"]},"PT Sans Narrow":{v:["regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal"]},"PT Serif":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"PT Serif Caption":{v:["regular","italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400"],i:["normal","italic"]},Pacifico:{v:["regular"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Padauk:{v:["regular","700"],subset:["myanmar","latin"],weight:["400","700"],i:["normal"]},Palanquin:{v:["100","200","300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["100","200","300","400","500","600","700"],i:["normal"]},"Palanquin Dark":{v:["regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700"],i:["normal"]},Pangolin:{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Paprika:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Parisienne:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Passero One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Passion One":{v:["regular","700","900"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal"]},"Pathway Gothic One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Patrick Hand":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Patrick Hand SC":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Pattaya:{v:["regular"],subset:["cyrillic","latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},"Patua One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Pavanam:{v:["regular"],subset:["latin-ext","tamil","latin"],weight:["400"],i:["normal"]},"Paytone One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Peddana:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Peralta:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Permanent Marker":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Petit Formal Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Petrona:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Philosopher:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},Piedra:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Pinyon Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Pirata One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Plaster:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Play:{v:["regular","700"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","vietnamese","latin"],weight:["400","700"],i:["normal"]},Playball:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Playfair Display":{v:["regular","italic","700","700italic","900","900italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["400","700","900"],i:["normal","italic"]},"Playfair Display SC":{v:["regular","italic","700","700italic","900","900italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["400","700","900"],i:["normal","italic"]},Podkova:{v:["regular","500","600","700","800"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","500","600","700","800"],i:["normal"]},"Poiret One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Poller One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Poly:{v:["regular","italic"],subset:["latin"],weight:["400"],i:["normal","italic"]},Pompiere:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Pontano Sans":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Poor Story":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},Poppins:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","devanagari","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Port Lligat Sans":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Port Lligat Slab":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Pragati Narrow":{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Prata:{v:["regular"],subset:["cyrillic","cyrillic-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Preahvihear:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Press Start 2P":{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","latin"],weight:["400"],i:["normal"]},Pridi:{v:["200","300","regular","500","600","700"],subset:["latin-ext","thai","vietnamese","latin"],weight:["200","300","400","500","600","700"],i:["normal"]},"Princess Sofia":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Prociono:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Prompt:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Prosto One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Proza Libre":{v:["regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["latin-ext","latin"],weight:["400","500","600","700","800"],i:["normal","italic"]},Puritan:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},"Purple Purse":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Quando:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Quantico:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Quattrocento:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Quattrocento Sans":{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Questrial:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Quicksand:{v:["300","regular","500","700"],subset:["latin-ext","vietnamese","latin"],weight:["300","400","500","700"],i:["normal"]},Quintessential:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Qwigley:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Racing Sans One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Radley:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Rajdhani:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Rakkas:{v:["regular"],subset:["latin-ext","arabic","latin"],weight:["400"],i:["normal"]},Raleway:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},"Raleway Dots":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ramabhadra:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Ramaraja:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Rambla:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Rammetto One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ranchers:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Rancho:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Ranga:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Rasa:{v:["300","regular","500","600","700"],subset:["latin-ext","gujarati","latin"],weight:["300","400","500","600","700"],i:["normal"]},Rationale:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Ravi Prakash":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Redressed:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Reem Kufi":{v:["regular"],subset:["arabic","latin"],weight:["400"],i:["normal"]},"Reenie Beanie":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Revalia:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Rhodium Libre":{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Ribeye:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Ribeye Marrow":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Righteous:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Risque:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Roboto:{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700","900"],i:["normal","italic"]},"Roboto Condensed":{v:["300","300italic","regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["300","400","700"],i:["normal","italic"]},"Roboto Mono":{v:["100","100italic","300","300italic","regular","italic","500","500italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","500","700"],i:["normal","italic"]},"Roboto Slab":{v:["100","300","regular","700"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["100","300","400","700"],i:["normal"]},Rochester:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Rock Salt":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Rokkitt:{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Romanesco:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Ropa Sans":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Rosario:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Rosarivo:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Rouge Script":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Rozha One":{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Rubik:{v:["300","300italic","regular","italic","500","500italic","700","700italic","900","900italic"],subset:["cyrillic","latin-ext","hebrew","latin"],weight:["300","400","500","700","900"],i:["normal","italic"]},"Rubik Mono One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Ruda:{v:["regular","700","900"],subset:["latin-ext","latin"],weight:["400","700","900"],i:["normal"]},Rufina:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Ruge Boogie":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Ruluko:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Rum Raisin":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Ruslan Display":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Russo One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},Ruthie:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Rye:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sacramento:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sahitya:{v:["regular","700"],subset:["devanagari","latin"],weight:["400","700"],i:["normal"]},Sail:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Saira:{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Saira Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Saira Extra Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Saira Semi Condensed":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},Salsa:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sanchez:{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},Sancreek:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sansita:{v:["regular","italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","latin"],weight:["400","700","800","900"],i:["normal","italic"]},Sarala:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Sarina:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Sarpanch:{v:["regular","500","600","700","800","900"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700","800","900"],i:["normal"]},Satisfy:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Sawarabi Gothic":{v:["regular"],subset:["cyrillic","japanese","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Sawarabi Mincho":{v:["regular"],subset:["japanese","latin-ext","latin"],weight:["400"],i:["normal"]},Scada:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},Scheherazade:{v:["regular","700"],subset:["arabic","latin"],weight:["400","700"],i:["normal"]},Schoolbell:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Scope One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Seaweed Script":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Secular One":{v:["regular"],subset:["latin-ext","hebrew","latin"],weight:["400"],i:["normal"]},"Sedgwick Ave":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Sedgwick Ave Display":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Sevillana:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Seymour One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Shadows Into Light":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Shadows Into Light Two":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Shanti:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Share:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},"Share Tech":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Share Tech Mono":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Shojumaru:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Short Stack":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Shrikhand:{v:["regular"],subset:["latin-ext","gujarati","latin"],weight:["400"],i:["normal"]},Siemreap:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Sigmar One":{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Signika:{v:["300","regular","600","700"],subset:["latin-ext","latin"],weight:["300","400","600","700"],i:["normal"]},"Signika Negative":{v:["300","regular","600","700"],subset:["latin-ext","latin"],weight:["300","400","600","700"],i:["normal"]},Simonetta:{v:["regular","italic","900","900italic"],subset:["latin-ext","latin"],weight:["400","900"],i:["normal","italic"]},Sintony:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Sirin Stencil":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Six Caps":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Skranji:{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]},"Slabo 13px":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Slabo 27px":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Slackey:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Smokum:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Smythe:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sniglet:{v:["regular","800"],subset:["latin-ext","latin"],weight:["400","800"],i:["normal"]},Snippet:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Snowburst One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Sofadi One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sofia:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Song Myung":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Sonsie One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Sorts Mill Goudy":{v:["regular","italic"],subset:["latin-ext","latin"],weight:["400"],i:["normal","italic"]},"Source Code Pro":{v:["200","300","regular","500","600","700","900"],subset:["latin-ext","latin"],weight:["200","300","400","500","600","700","900"],i:["normal"]},"Source Sans Pro":{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","vietnamese","latin"],weight:["200","300","400","600","700","900"],i:["normal","italic"]},"Source Serif Pro":{v:["regular","600","700"],subset:["latin-ext","latin"],weight:["400","600","700"],i:["normal"]},"Space Mono":{v:["regular","italic","700","700italic"],subset:["latin-ext","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Special Elite":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Spectral:{v:["200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","500","600","700","800"],i:["normal","italic"]},"Spectral SC":{v:["200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","500","600","700","800"],i:["normal","italic"]},"Spicy Rice":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Spinnaker:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Spirax:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Squada One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Sree Krushnadevaraya":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Sriracha:{v:["regular"],subset:["latin-ext","thai","vietnamese","latin"],weight:["400"],i:["normal"]},Stalemate:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Stalinist One":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Stardos Stencil":{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},"Stint Ultra Condensed":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Stint Ultra Expanded":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Stoke:{v:["300","regular"],subset:["latin-ext","latin"],weight:["300","400"],i:["normal"]},Strait:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Stylish:{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Sue Ellen Francisco":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Suez One":{v:["regular"],subset:["latin-ext","hebrew","latin"],weight:["400"],i:["normal"]},Sumana:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Sunflower:{v:["300","500","700"],subset:["korean","latin"],weight:["300","500","700"],i:[]},Sunshiney:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Supermercado One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Sura:{v:["regular","700"],subset:["latin-ext","devanagari","latin"],weight:["400","700"],i:["normal"]},Suranna:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Suravaram:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Suwannaphum:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},"Swanky and Moo Moo":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Syncopate:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Tajawal:{v:["200","300","regular","500","700","800","900"],subset:["arabic","latin"],weight:["200","300","400","500","700","800","900"],i:["normal"]},Tangerine:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Taprom:{v:["regular"],subset:["khmer"],weight:["400"],i:["normal"]},Tauri:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Taviraj:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Teko:{v:["300","regular","500","600","700"],subset:["latin-ext","devanagari","latin"],weight:["300","400","500","600","700"],i:["normal"]},Telex:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Tenali Ramakrishna":{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},"Tenor Sans":{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Text Me One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"The Girl Next Door":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Tienne:{v:["regular","700","900"],subset:["latin"],weight:["400","700","900"],i:["normal"]},Tillana:{v:["regular","500","600","700","800"],subset:["latin-ext","devanagari","latin"],weight:["400","500","600","700","800"],i:["normal"]},Timmana:{v:["regular"],subset:["telugu","latin"],weight:["400"],i:["normal"]},Tinos:{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","hebrew","greek","vietnamese","latin"],weight:["400","700"],i:["normal","italic"]},"Titan One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Titillium Web":{v:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900"],subset:["latin-ext","latin"],weight:["200","300","400","600","700","900"],i:["normal","italic"]},"Trade Winds":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Trirong:{v:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subset:["latin-ext","thai","vietnamese","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal","italic"]},Trocchi:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Trochut:{v:["regular","italic","700"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Trykker:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Tulpen One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Ubuntu:{v:["300","300italic","regular","italic","500","500italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["300","400","500","700"],i:["normal","italic"]},"Ubuntu Condensed":{v:["regular"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400"],i:["normal"]},"Ubuntu Mono":{v:["regular","italic","700","700italic"],subset:["cyrillic","cyrillic-ext","greek-ext","latin-ext","greek","latin"],weight:["400","700"],i:["normal","italic"]},Ultra:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Uncial Antiqua":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Underdog:{v:["regular"],subset:["cyrillic","latin-ext","latin"],weight:["400"],i:["normal"]},"Unica One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},UnifrakturCook:{v:["700"],subset:["latin"],weight:["700"],i:[]},UnifrakturMaguntia:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Unkempt:{v:["regular","700"],subset:["latin"],weight:["400","700"],i:["normal"]},Unlock:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Unna:{v:["regular","italic","700","700italic"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal","italic"]},VT323:{v:["regular"],subset:["latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},"Vampiro One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Varela:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Varela Round":{v:["regular"],subset:["latin-ext","hebrew","vietnamese","latin"],weight:["400"],i:["normal"]},"Vast Shadow":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Vesper Libre":{v:["regular","500","700","900"],subset:["latin-ext","devanagari","latin"],weight:["400","500","700","900"],i:["normal"]},Vibur:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Vidaloka:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Viga:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Voces:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Volkhov:{v:["regular","italic","700","700italic"],subset:["latin"],weight:["400","700"],i:["normal","italic"]},Vollkorn:{v:["regular","italic","600","600italic","700","700italic","900","900italic"],subset:["cyrillic","cyrillic-ext","latin-ext","greek","vietnamese","latin"],weight:["400","600","700","900"],i:["normal","italic"]},"Vollkorn SC":{v:["regular","600","700","900"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400","600","700","900"],i:["normal"]},Voltaire:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Waiting for the Sunrise":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Wallpoet:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Walter Turncoat":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Warnes:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},Wellfleet:{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Wendy One":{v:["regular"],subset:["latin-ext","latin"],weight:["400"],i:["normal"]},"Wire One":{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Work Sans":{v:["100","200","300","regular","500","600","700","800","900"],subset:["latin-ext","latin"],weight:["100","200","300","400","500","600","700","800","900"],i:["normal"]},"Yanone Kaffeesatz":{v:["200","300","regular","700"],subset:["cyrillic","latin-ext","vietnamese","latin"],weight:["200","300","400","700"],i:["normal"]},Yantramanav:{v:["100","300","regular","500","700","900"],subset:["latin-ext","devanagari","latin"],weight:["100","300","400","500","700","900"],i:["normal"]},"Yatra One":{v:["regular"],subset:["latin-ext","devanagari","latin"],weight:["400"],i:["normal"]},Yellowtail:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Yeon Sung":{v:["regular"],subset:["korean","latin"],weight:["400"],i:["normal"]},"Yeseva One":{v:["regular"],subset:["cyrillic","cyrillic-ext","latin-ext","vietnamese","latin"],weight:["400"],i:["normal"]},Yesteryear:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},Yrsa:{v:["300","regular","500","600","700"],subset:["latin-ext","latin"],weight:["300","400","500","600","700"],i:["normal"]},Zeyada:{v:["regular"],subset:["latin"],weight:["400"],i:["normal"]},"Zilla Slab":{v:["300","300italic","regular","italic","500","500italic","600","600italic","700","700italic"],subset:["latin-ext","latin"],weight:["300","400","500","600","700"],i:["normal","italic"]},"Zilla Slab Highlight":{v:["regular","700"],subset:["latin-ext","latin"],weight:["400","700"],i:["normal"]}},j=i(54),C=function(e){var t=[{value:"",label:Object(f.__)("Default"),weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Arial",label:"Arial",weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Helvetica",label:"Helvetica",weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Times New Roman",label:"Times New Roman",weight:["100","200","300","400","500","600","700","800","900"],google:!1},{value:"Georgia",label:"Georgia",weight:["100","200","300","400","500","600","700","800","900"],google:!1}],i="",a="";Object.keys(k).forEach((function(l){t.push({value:l,label:l,weight:k[l].weight}),l===e.fontFamily.value&&(i=k[l].weight,a=k[l].subset)})),""===i&&(i=t[0].weight);var l=[];i.forEach((function(e){l.push({value:e,label:e})}));var n=[];"object"===S()(a)&&a.forEach((function(e){n.push({value:e,label:e})}));return Object(d.createElement)("div",{className:"wpsp-typography-font-family-options"},Object(d.createElement)("label",{htmlFor:"font-family",className:"wpsp-typography-font-family-label"},Object(f.__)("Font Family")),Object(d.createElement)(j.a,{options:t,value:{value:e.fontFamily.value,label:e.fontFamily.value,weight:l},isMulti:!1,maxMenuHeight:300,onChange:function(t){var i=e.loadGoogleFonts,a=e.fontFamily;e.fontWeightt,e.fontSubsett;e.setAttributes(r()({},a.label,t.label)),function(t,i){var a;a=""===i||"object"===S()(k[i]),e.setAttributes(r()({},t.label,a))}(i,t.label),function(t,i,a){var l;if("object"===S()(k[a])){var n=k[a].weight,s=k[a].subset;"object"===S()(n)&&(n.forEach((function(t){l=t,e.setAttributes(r()({},e.fontWeight.label,l))})),s.forEach((function(t){l=t,e.setAttributes(r()({},e.fontSubset.label,l))})))}}(0,0,t.label)},className:"react-select-container",classNamePrefix:"react-select"}),Object(d.createElement)(O.SelectControl,{label:Object(f.__)("Font Weight"),value:e.fontWeight.value,onChange:function(t){return e.setAttributes(r()({},e.fontWeight.label,t))},options:l}),Object(d.createElement)(O.SelectControl,{label:Object(f.__)("Font Subset"),value:e.fontSubset.value,onChange:function(t){return e.setAttributes(r()({},e.fontSubset.label,t))},options:n}))},_=function(e){var t;t="sizeTypes"in e?e.sizeTypes:[{key:"px",name:Object(f.__)("px")},{key:"em",name:Object(f.__)("em")}];var i=Object(d.createElement)(O.ButtonGroup,{className:"wpsp-size-type-field","aria-label":Object(f.__)("Size Type")},t.map((function(t){var i=t.name,a=t.key;return Object(d.createElement)(O.Button,{key:a,className:"wpsp-size-btn",isSmall:!0,isPrimary:e.type.value===a,"aria-pressed":e.type.value===a,onClick:function(){return e.setAttributes(r()({},e.typeLabel,a))}},i)})));return Object(d.createElement)("div",{className:"wpsp-typography-range-options"},Object(d.createElement)(O.TabPanel,{className:"wpsp-size-type-field-tabs",activeClass:"active-tab",tabs:[{name:"desktop",title:Object(d.createElement)(O.Dashicon,{icon:"desktop"}),className:"wpsp-desktop-tab wpsp-responsive-tabs"},{name:"tablet",title:Object(d.createElement)(O.Dashicon,{icon:"tablet"}),className:"wpsp-tablet-tab wpsp-responsive-tabs"},{name:"mobile",title:Object(d.createElement)(O.Dashicon,{icon:"smartphone"}),className:"wpsp-mobile-tab wpsp-responsive-tabs"}]},(function(t){var a;return a="mobile"===t.name?Object(d.createElement)(d.Fragment,null,i,Object(d.createElement)(O.RangeControl,{label:e.sizeMobileText,value:e.sizeMobile.value,onChange:function(t){return e.setAttributes(r()({},e.sizeMobileLabel,t))},min:0,max:100,step:e.steps,beforeIcon:"editor-textcolor",allowReset:!0,initialPosition:30})):"tablet"===t.name?Object(d.createElement)(d.Fragment,null,i,Object(d.createElement)(O.RangeControl,{label:e.sizeTabletText,value:e.sizeTablet.value,onChange:function(t){return e.setAttributes(r()({},e.sizeTabletLabel,t))},min:0,max:100,step:e.steps,beforeIcon:"editor-textcolor",allowReset:!0,initialPosition:30})):Object(d.createElement)(d.Fragment,null,i,Object(d.createElement)(O.RangeControl,{label:e.sizeText,value:e.size.value||"",onChange:function(t){return e.setAttributes(r()({},e.sizeLabel,t))},min:0,max:100,step:e.steps,beforeIcon:"editor-textcolor",allowReset:!0,initialPosition:30})),Object(d.createElement)("div",null,a)})))};var T=function(e){m()(n,e);var t,i,a=(t=n,i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,a=p()(t);if(i){var l=p()(this).constructor;e=Reflect.construct(a,arguments,l)}else e=a.apply(this,arguments);return w()(this,e)});function n(){var e;return o()(this,n),(e=a.apply(this,arguments)).onAdvancedControlClick=e.onAdvancedControlClick.bind(h()(e)),e.onAdvancedControlReset=e.onAdvancedControlReset.bind(h()(e)),e}return g()(n,[{key:"onAdvancedControlClick",value:function(){var e=!0,t=Object(f.__)("Hide Advanced");null!==this.state&&!0===this.state.showAdvancedControls&&(e=!1,t=Object(f.__)("Advanced")),this.setState({showAdvancedControls:e,showAdvancedControlsLabel:t})}},{key:"onAdvancedControlReset",value:function(){var e=this.props.setAttributes;e(r()({},this.props.fontFamily.label,"")),e(r()({},this.props.fontWeight.label,"")),e(r()({},this.props.fontSubset.label,"")),e(r()({},this.props.fontSize.label,"")),e(r()({},this.props.fontSizeType.label,"px")),e(r()({},this.props.fontSizeMobile.label,"")),e(r()({},this.props.fontSizeTablet.label,"")),e(r()({},this.props.lineHeight.label,"")),e(r()({},this.props.lineHeightType.label,"em")),e(r()({},this.props.lineHeightMobile.label,"")),e(r()({},this.props.lineHeightTablet.label,"")),e(r()({},this.props.loadGoogleFonts.label,!1))}},{key:"render",value:function(){var e,t,i,a,n,r,s,o=this.props,u=o.disableFontFamily,g=o.disableFontSize,c=o.disableLineHeight,h=o.disableAdvancedOptions,b=void 0!==h&&h;return!0!==u&&(i=Object(d.createElement)(C,this.props)),!0!==c&&(t=Object(d.createElement)(_,l()({type:this.props.lineHeightType,typeLabel:this.props.lineHeightType.label,sizeMobile:this.props.lineHeightMobile,sizeMobileLabel:this.props.lineHeightMobile.label,sizeTablet:this.props.lineHeightTablet,sizeTabletLabel:this.props.lineHeightTablet.label,size:this.props.lineHeight,sizeLabel:this.props.lineHeight.label,sizeMobileText:Object(f.__)("Line Height"),sizeTabletText:Object(f.__)("Line Height"),sizeText:Object(f.__)("Line Height"),steps:.1},this.props))),!0!==g&&(e=Object(d.createElement)(_,l()({type:this.props.fontSizeType,typeLabel:this.props.fontSizeType.label,sizeMobile:this.props.fontSizeMobile,sizeMobileLabel:this.props.fontSizeMobile.label,sizeTablet:this.props.fontSizeTablet,sizeTabletLabel:this.props.fontSizeTablet.label,size:this.props.fontSize,sizeLabel:this.props.fontSize.label,sizeMobileText:this.props.fontSizeLabel?this.props.fontSizeLabel:Object(f.__)("Font Size"),sizeTabletText:this.props.fontSizeLabel?this.props.fontSizeLabel:Object(f.__)("Font Size"),sizeText:this.props.fontSizeLabel?this.props.fontSizeLabel:Object(f.__)("Font Size"),steps:.1},this.props))),!0!==u&&!0!==g?(a=Object(d.createElement)(O.Button,{className:"wpsp-size-btn wpsp-typography-control-btn",isSmall:!0,"aria-pressed":null!==this.state,onClick:this.onAdvancedControlClick},Object(d.createElement)(O.Dashicon,{icon:"admin-tools"})),s=Object(d.createElement)(O.Button,{className:"wpsp-size-btn wpsp-typography-reset-btn",isSmall:!0,"aria-pressed":null!==this.state,onClick:this.onAdvancedControlReset},Object(d.createElement)(O.Dashicon,{icon:"image-rotate"}))):r=Object(d.createElement)(d.Fragment,null,e,i,t),null!==this.state&&!0===this.state.showAdvancedControls&&(r=Object(d.createElement)("div",{className:"wpsp-typography-advanced"},e,i,t)),!0!==u&&!0!==g&&(n=Object(d.createElement)("div",{className:"wpsp-typography-option-actions"},Object(d.createElement)("span",null,this.props.label),a,s)),Object(d.createElement)("div",{className:"wpsp-typography-options"},!b&&Object(d.createElement)(d.Fragment,null,n,r))}}]),n}(d.Component);t.a=T},52:function(e,t,i){"use strict";var a=i(36),l=i.n(a),n=i(43),r=i.n(n),s=i(44),o=i.n(s),u=i(45),g=i.n(u),c=i(46),h=i.n(c),b=i(47),m=i.n(b),v=i(0),w=i(38),x=i.n(w),p=i(53),d=i.n(p);function f(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function y(e){for(var t=1;t=t.f?l():e.fonts.load(function(e){return j(e)+" "+e.f+"00 300px "+O(e.c)}(t.a),t.h).then((function(e){1<=e.length?a():setTimeout(n,25)}),(function(){l()}))}()})),l=null,n=new Promise((function(e,i){l=setTimeout(i,t.f)}));Promise.race([n,a]).then((function(){l&&(clearTimeout(l),l=null),t.g(t.a)}),(function(){t.j(t.a)}))};var z={D:"serif",C:"sans-serif"},B=null;function H(){if(null===B){var e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);B=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))}return B}function N(e,t,i){for(var a in z)if(z.hasOwnProperty(a)&&t===e.f[z[a]]&&i===e.f[z[a]])return!0;return!1}function D(e,t){setTimeout(r((function(){h(this.g.a),h(this.h.a),h(this.j.a),h(this.m.a),t(this.a)}),e),0)}function G(e,t,i){this.c=e,this.a=t,this.f=0,this.m=this.j=!1,this.s=i}L.prototype.start=function(){this.f.serif=this.j.a.offsetWidth,this.f["sans-serif"]=this.m.a.offsetWidth,this.A=s(),function e(t){var i,a=t.g.a.offsetWidth,l=t.h.a.offsetWidth;(i=a===t.f.serif&&l===t.f["sans-serif"])||(i=H()&&N(t,a,l)),i?s()-t.A>=t.w?H()&&N(t,a,l)&&(null===t.u||t.u.hasOwnProperty(t.a.c))?D(t,t.v):D(t,t.B):function(t){setTimeout(r((function(){e(this)}),t),50)}(t):D(t,t.v)}(this)};var I=null;function W(e){0==--e.f&&e.j&&(e.m?((e=e.a).g&&b(e.f,[e.a.c("wf","active")],[e.a.c("wf","loading"),e.a.c("wf","inactive")]),M(e,"active")):T(e.a))}function K(e){this.j=e,this.a=new F,this.h=0,this.f=this.g=!0}function J(e,t,i,a,l){var n=0==--e.h;(e.f||e.g)&&setTimeout((function(){var e=l||null,s=a||{};if(0===i.length&&n)T(t.a);else{t.f+=i.length,n&&(t.j=n);var o,u=[];for(o=0;oy.length)&&_.push("Atleast 2 Steps are required"),!0===j&&_.push("The Step Description is required for each Step.");var O=_.map((function(e){return Object(i.createElement)("li",{key:e}," ",e," ")}));return Object(i.createElement)(i.Fragment,null,0!==_.length?Object(i.createElement)("div",{className:"how-to-schema-notices"},Object(i.createElement)("h6",null," ",Object(l.__)("It seems the following fields are empty. This may generate Schema errors / warnings for your Page, we recommend you to fill these fields.")," "),Object(i.createElement)("ul",{className:"how-to-schema-notices-list"},O),Object(i.createElement)("p",null,Object(l.__)("P.S. Note that this notice is visible only in the editor. This will not be visible in frontend. Also, once the required fields are added, this notice will go away.")," ",Object(i.createElement)("a",{href:"https://developers.google.com/search/docs/data-types/how-to",target:"_blank",rel:"noreferrer"},Object(l.__)("Read more.")))):"")})),d=(o(19),o(5)),h=o(2),w=o(34),f=o(39),b=o.n(f),g=o(70),v=o.n(g),_=0,y={injectType:"lazySingletonStyleTag",attributes:{id:"wpsp-editor-styles"},insert:"head",singleton:!0},j={};j.locals=v.a.locals||{},j.use=function(){return _++||(n=b()(v.a,y)),j},j.unuse=function(){_>0&&!--_&&(n(),n=null)};var O=j;function N(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function x(e){for(var t=1;t2?o-2:0),i=2;i2?o-2:0),a=2;a=t.f?l():e.fonts.load(function(e){return C(e)+" "+e.f+"00 300px "+k(e.c)}(t.a),t.h).then((function(e){1<=e.length?a():setTimeout(n,25)}),(function(){l()}))}()})),l=null,n=new Promise((function(e,i){l=setTimeout(i,t.f)}));Promise.race([n,a]).then((function(){l&&(clearTimeout(l),l=null),t.g(t.a)}),(function(){t.j(t.a)}))};var z={D:"serif",C:"sans-serif"},R=null;function B(){if(null===R){var e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);R=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))}return R}function N(e,t,i){for(var a in z)if(z.hasOwnProperty(a)&&t===e.f[z[a]]&&i===e.f[z[a]])return!0;return!1}function G(e,t){setTimeout(r((function(){h(this.g.a),h(this.h.a),h(this.j.a),h(this.m.a),t(this.a)}),e),0)}function D(e,t,i){this.c=e,this.a=t,this.f=0,this.m=this.j=!1,this.s=i}P.prototype.start=function(){this.f.serif=this.j.a.offsetWidth,this.f["sans-serif"]=this.m.a.offsetWidth,this.A=s(),function e(t){var i,a=t.g.a.offsetWidth,l=t.h.a.offsetWidth;(i=a===t.f.serif&&l===t.f["sans-serif"])||(i=B()&&N(t,a,l)),i?s()-t.A>=t.w?B()&&N(t,a,l)&&(null===t.u||t.u.hasOwnProperty(t.a.c))?G(t,t.v):G(t,t.B):function(t){setTimeout(r((function(){e(this)}),t),50)}(t):G(t,t.v)}(this)};var I=null;function K(e){0==--e.f&&e.j&&(e.m?((e=e.a).g&&m(e.f,[e.a.c("wf","active")],[e.a.c("wf","loading"),e.a.c("wf","inactive")]),_(e,"active")):T(e.a))}function W(e){this.j=e,this.a=new F,this.h=0,this.f=this.g=!0}function J(e,t,i,a,l){var n=0==--e.h;(e.f||e.g)&&setTimeout((function(){var e=l||null,s=a||{};if(0===i.length&&n)T(t.a);else{t.f+=i.length,n&&(t.j=n);var u,o=[];for(u=0;u1&&void 0!==arguments[1]?arguments[1]:null;if(Array.isArray(e))return o(e);if(null!==t)return void 0!==e[t]?o(e[t]):[];var n=[],r=function(e){for(var t=1;tn)return!1;if(r===n)return e===t;e:for(var a=0,o=0;aa-20){var g=y.left+n.props.btnRef.current.offsetWidth-(e+d.left);g+d.left<0&&(g=10-d.left),h.style.left="".concat(g,"px")}t+c-o>i&&y.top-t>0&&("self"===n.state.appendRoot?h.style.top="-".concat(t-m,"px"):h.style.top="".concat(y.top+m-t,"px"))}}),n.state={},n.debouncedSyncPortalPosition=(0,l.debounce)(n.syncPortalPosition,250),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r.default.PureComponent),f(t,null,[{key:"getDerivedStateFromProps",value:function(e){var n=t.calculateAppendAndClass(e.appendRoot);return{appendRoot:n.appendRoot,portalClasses:n.portalClasses}}},{key:"calculateAppendAndClass",value:function(e){var t="self",n=(0,i.default)({"rfipdropdown--portal":!1!==e});return!1!==e&&(t=document.querySelector(e)),{portalClasses:n,appendRoot:t}}}]),f(t,[{key:"componentDidMount",value:function(){window.addEventListener("resize",this.debouncedSyncPortalPosition),window.addEventListener("scroll",this.debouncedSyncPortalPosition),this.syncPortalPosition()}},{key:"componentDidUpdate",value:function(){this.syncPortalPosition()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.debouncedSyncPortalPosition),window.removeEventListener("scroll",this.debouncedSyncPortalPosition)}},{key:"positionPortal",value:function(){var e=this.props.domRef.current.style.display;this.props.domRef.current.style.display="none";var t=this.props.btnRef.current,n=(0,l.getOffset)(t),r=(0,l.getOffset)(this.state.appendRoot),a=t.offsetHeight;this.props.domRef.current.style.left="".concat(n.left-r.left,"px"),this.props.domRef.current.style.top="".concat(n.top+a,"px"),this.props.domRef.current.style.display=e}},{key:"resetPortalPosition",value:function(){var e=this.props.domRef.current;"self"===this.state.appendRoot?e.style.top="":this.positionPortal()}},{key:"render",value:function(){var e=(0,i.default)(this.props.className,this.state.portalClasses),t=r.default.createElement("div",{className:e,ref:this.props.domRef},this.props.children);return"self"===this.state.appendRoot?t:(0,a.createPortal)(t,this.state.appendRoot)}}]),t}();Object.defineProperty(p,"propTypes",{configurable:!0,enumerable:!0,writable:!0,value:{appendRoot:o.default.oneOfType([o.default.bool,o.default.string]),children:o.default.node.isRequired,domRef:o.default.object.isRequired,btnRef:o.default.object.isRequired,className:o.default.string.isRequired}}),Object.defineProperty(p,"defaultProps",{configurable:!0,enumerable:!0,writable:!0,value:{appendRoot:!1}});var h=p;t.default=h},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=l(n(1)),a=l(n(0)),o=l(n(3)),i=n(2);function l(e){return e&&e.__esModule?e:{default:e}}function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:null,a=n.props.currentPage,o=n.state.totalPage;null!==r?"next"===r?a+=1:a-=1:a=parseInt(e.target.value,10)-1,a<0&&(a=0),a>o-1&&(a=o-1),t=a+1,null===r&&Number.isNaN(a)&&(a=0,t=""),n.setState({viewPage:t}),n.props.handleChangePage(a)}}),Object.defineProperty(d(n),"handlePageKeyBoard",{configurable:!0,enumerable:!0,writable:!0,value:function(e,t){13!==e.keyCode&&32!==e.keyCode||n.handleChangePage({},t)}}),Object.defineProperty(d(n),"handleChangeValue",{configurable:!0,enumerable:!0,writable:!0,value:function(e){n.props.handleChangeValue(e)}}),Object.defineProperty(d(n),"handleValueKeyboard",{configurable:!0,enumerable:!0,writable:!0,value:function(e,t){13!==e.keyCode&&32!==e.keyCode||n.handleChangeValue(t)}}),n.state={viewPage:n.props.currentPage+1},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r.default.PureComponent),f(t,null,[{key:"getDerivedStateFromProps",value:function(e,n){var r=t.getCategoryFilteredState(e.currentCategory,e.categories,e.icons),a=t.getCategoryFilteredState(e.currentCategory,e.categories,null===e.search?e.icons:e.search),o=t.getActiveIcons(r,a,e.currentSearch),i=o.activeIcons,l=o.activeTitles,u=e.currentPage,s=e.iconsPerPage,c={iconView:t.getCurrentViewIcons(i,s,u),titleView:t.getCurrentViewIcons(l,s,u),totalPage:Math.ceil(i.length/s)};return""!==n.viewPage&&(c.viewPage=e.currentPage+1),c}},{key:"getActiveIcons",value:function(e,t,n){var r=s(e),a=s(t);if(""===n||null===n)return{activeIcons:r,activeTitles:a};var o=[],l=[];return r.forEach((function(e,r){(0,i.fuzzySearch)(n,t[r])&&(o.push(e),l.push(t[r]))})),{activeIcons:o,activeTitles:l}}},{key:"getCategoryFilteredState",value:function(e,t,n){var r=null,a=(0,i.getSourceType)(n);if(Array.isArray(t)){if("object"!==a)throw new i.InvalidSourceException(a,"object")}else if("array"!==a)throw new i.InvalidSourceException(a,"array");return 0!==e&&Array.isArray(t)&&(r=t[e]||null),(0,i.flattenPossiblyCategorizedSource)(n,r)}},{key:"getCurrentViewIcons",value:function(e,t,n){var r=n*t,a=(n+1)*t;return e.slice(r,a)}}]),f(t,[{key:"renderPager",value:function(){var e=this;if(this.state.totalPage<1)return null;var t=this.props.currentPage>0?r.default.createElement("span",{className:"rfipicons__left",role:"button",tabIndex:0,onKeyDown:function(t){return e.handlePageKeyBoard(t,"prev")},onClick:function(t){return e.handleChangePage(t,"prev")}},r.default.createElement("span",{role:"presentation",className:"rfipicons__label","aria-label":"Left"},r.default.createElement("i",{className:"fipicon-angle-left"}))):null,n=this.props.currentPage0?this.state.iconView.map((function(t,n){var a=(0,o.default)("rfipicons__icon",{"rfipicons__icon--selected":e.props.value===t||Array.isArray(e.props.value)&&e.props.value.includes(t)});return r.default.createElement("span",{className:a,key:t,title:e.state.titleView[n]},r.default.createElement("span",{className:"rfipicons__ibox",tabIndex:0,role:"button",onClick:function(){return e.handleChangeValue(t)},onKeyDown:function(n){return e.handleValueKeyboard(n,t)}},e.props.renderIcon(t)))})):r.default.createElement("span",{className:"rfipicons__icon--error"},r.default.createElement("span",{className:"rfipicons__ibox--error"},this.props.noIconPlaceholder))}},{key:"render",value:function(){return r.default.createElement("div",{className:"rfipicons"},this.renderPager(),r.default.createElement("div",{className:"rfipicons__selector"},this.renderIconView()))}}]),t}();Object.defineProperty(p,"propTypes",{configurable:!0,enumerable:!0,writable:!0,value:{categories:a.default.arrayOf(a.default.string),currentCategory:a.default.number,isMulti:a.default.bool.isRequired,icons:a.default.oneOfType([a.default.arrayOf(a.default.string),a.default.arrayOf(a.default.number),a.default.objectOf(a.default.oneOfType([a.default.arrayOf(a.default.number),a.default.arrayOf(a.default.string)]))]).isRequired,search:a.default.oneOfType([a.default.objectOf(a.default.arrayOf(a.default.string)),a.default.arrayOf(a.default.string)]),value:a.default.oneOfType([a.default.number,a.default.string,a.default.arrayOf(a.default.oneOfType([a.default.number,a.default.string]))]).isRequired,currentSearch:a.default.string.isRequired,handleChangeValue:a.default.func.isRequired,currentPage:a.default.number.isRequired,iconsPerPage:a.default.number.isRequired,handleChangePage:a.default.func.isRequired,renderIcon:a.default.func.isRequired,noIconPlaceholder:a.default.string.isRequired}}),Object.defineProperty(p,"defaultProps",{configurable:!0,enumerable:!0,writable:!0,value:{categories:null,currentCategory:null,search:null}});var h=p;t.default=h},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n(1)),a=o(n(0));function o(e){return e&&e.__esModule?e:{default:e}}var i=function(e){return r.default.createElement("div",{className:"rfipsearch"},r.default.createElement("input",{type:"text",className:"rfipsearch__input",value:e.value,onChange:e.handleSearch,placeholder:e.placeholder}))};i.propTypes={handleSearch:a.default.func.isRequired,value:a.default.string.isRequired,placeholder:a.default.string.isRequired};var l=i;t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n(1)),a=o(n(0));function o(e){return e&&e.__esModule?e:{default:e}}function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var l=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}var n;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r.default.PureComponent),(n=[{key:"render",value:function(){return r.default.createElement("div",{className:"rfipcategory"},r.default.createElement("select",{className:"rfipcategory__select",onChange:this.props.handleCategory,value:this.props.value},this.props.categories.map((function(e,t){return r.default.createElement("option",{className:"rfipcategory__select__option",key:e,value:t},e)}))),r.default.createElement("i",{className:"fipicon-angle-down",role:"presentation","aria-label":"Open"}))}}])&&function(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],a={isOpen:e};return a.elemClass=t.getDerivedClassName("rfip",n.props.theme,n.props.isMulti,e),a.btnClass=t.getDerivedClassName("rfipbtn",n.props.theme,n.props.isMulti,e),a.ddClass=t.getDerivedClassName("rfipdropdown",n.props.theme,n.props.isMulti,e),r&&n.setState(a),a}}),Object.defineProperty(m(n),"handleChangeValue",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var t;n.props.isMulti?(t=p(n.state.value)).includes(e)?(t=t.filter((function(t){return t!==e}))).length||(t=g):t.push(e):t=e===n.state.value?"":e,n.setState({value:t,isOpen:!n.props.closeOnSelect}),n.props.onChange(t)}}),Object.defineProperty(m(n),"handleDeleteValue",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var r;r=n.props.isMulti?n.state.value.filter((function(t){return t!==e})):t.getDerivedValue(r,n.props.isMulti),n.setState({value:r}),n.props.onChange(r)}}),Object.defineProperty(m(n),"handleChangePage",{configurable:!0,enumerable:!0,writable:!0,value:function(e){n.setState({currentPage:e})}}),Object.defineProperty(m(n),"handleChangeCategory",{configurable:!0,enumerable:!0,writable:!0,value:function(e){n.setState({currentCategory:e,currentPage:0})}}),Object.defineProperty(m(n),"handleChangeSearch",{configurable:!0,enumerable:!0,writable:!0,value:function(e){n.setState({currentSearch:e,currentPage:0})}}),Object.defineProperty(m(n),"resetPortalStyle",{configurable:!0,enumerable:!0,writable:!0,value:function(e){["maxHeight","paddingTop","paddingBottom"].forEach((function(t){e.style[t]=null}))}}),Object.defineProperty(m(n),"handlePortalEnter",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var t=e.childNodes[0];n.resetPortalStyle(t);var r=getComputedStyle(t);n.fipPortalComputedStyle={height:r.height,paddingTop:r.paddingTop,paddingBottom:r.paddingBottom},["maxHeight","paddingTop","paddingBottom"].forEach((function(e){t.style[e]="0px"}))}}),Object.defineProperty(m(n),"handlePortalEntering",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var t=e.childNodes[0];t.style.maxHeight=n.fipPortalComputedStyle.height,t.style.paddingTop=n.fipPortalComputedStyle.paddingTop,t.style.paddingBottom=n.fipPortalComputedStyle.paddingBottom}}),Object.defineProperty(m(n),"handlePortalEntered",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var t=e.childNodes[0];n.resetPortalStyle(t),n.props.showSearch&&void 0===window.orientation&&-1===navigator.userAgent.indexOf("IEMobile")&&t.querySelector(".rfipsearch__input").focus()}}),Object.defineProperty(m(n),"handlePortalExit",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var t=e.childNodes[0];n.resetPortalStyle(t);var r=getComputedStyle(t).height;t.style.maxHeight=r}}),Object.defineProperty(m(n),"handlePortalExiting",{configurable:!0,enumerable:!0,writable:!0,value:function(e){var t=e.childNodes[0];t.style.maxHeight="0px",t.style.paddingTop="0px",t.style.paddingBottom="0px"}}),Object.defineProperty(m(n),"renderIcon",{configurable:!0,enumerable:!0,writable:!0,value:function(e){if("function"==typeof n.props.renderFunc)return n.props.renderFunc(e);if("class"===n.props.renderUsing)return r.default.createElement("i",{className:e});var t=h({},n.props.renderUsing,n.props.convertHex?(0,c.convertToHex)(e):e);return r.default.createElement("i",t)}}),n.fipButtonRef=r.default.createRef(),n.fipDropDownRef=r.default.createRef(),n.state={currentCategory:0,currentPage:0,isOpen:!1,currentSearch:""},n.fipPortalComputedStyle=null,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r.default.PureComponent),b(t,null,[{key:"getDerivedStateFromProps",value:function(e,n){var r={};return r.elemClass=t.getDerivedClassName("rfip",e.theme,e.isMulti,n.isOpen),r.btnClass=t.getDerivedClassName("rfipbtn",e.theme,e.isMulti,n.isOpen),r.ddClass=t.getDerivedClassName("rfipdropdown",e.theme,e.isMulti,n.isOpen),r.value=t.getDerivedValue(e.value,e.isMulti),e.showCategory||(r.currentCategory=0,r.currentPage=0),e.showSearch||(r.currentSearch="",r.currentPage=0),r}},{key:"getDerivedClassName",value:function(e,t,n,r){return(0,o.default)(e,"".concat(e,"--").concat(t),h({},"".concat(e,"--multi"),n),"".concat(e,"--").concat(r?"open":"close"))}},{key:"getDerivedValue",value:function(e,t){var n=e;return t?n=Array.isArray(e)?p(e):g:"number"!=typeof e&&"string"!=typeof e&&(n=""),n}}]),b(t,[{key:"componentDidMount",value:function(){var e=this;["click"].forEach((function(t){document.addEventListener(t,e.handleOuterClick,!1)})),document.addEventListener("keydown",this.handleEscapeKeyboard,!1),this.props.onChange(this.state.value)}},{key:"componentWillUnmount",value:function(){var e=this;["click"].forEach((function(t){document.removeEventListener(t,e.handleOuterClick,!1)})),document.removeEventListener("keydown",this.handleEscapeKeyboard,!1)}},{key:"render",value:function(){var e={currentCategory:this.state.currentCategory,currentPage:this.state.currentPage,currentSearch:this.state.currentSearch,value:this.state.value,isMulti:this.props.isMulti,icons:this.props.icons,search:this.props.search,showCategory:this.props.showCategory,showSearch:this.props.showSearch,iconsPerPage:this.props.iconsPerPage,allCatPlaceholder:this.props.allCatPlaceholder,searchPlaceholder:this.props.searchPlaceholder,noIconPlaceholder:this.props.noIconPlaceholder,renderIcon:this.renderIcon,handleChangeValue:this.handleChangeValue,handleChangeCategory:this.handleChangeCategory,handleChangePage:this.handleChangePage,handleChangeSearch:this.handleChangeSearch};return r.default.createElement("div",{className:this.state.elemClass,ref:this.fipRef},r.default.createElement(l.default,{className:this.state.btnClass,isOpen:this.state.isOpen,onClick:this.handleToggle,domRef:this.fipButtonRef,isMulti:this.props.isMulti,value:this.state.value,renderIcon:this.renderIcon,handleDeleteValue:this.handleDeleteValue,noSelectedPlaceholder:this.props.noSelectedPlaceholder}),r.default.createElement(i.CSSTransition,{classNames:"fipappear",timeout:300,in:this.state.isOpen,unmountOnExit:!0,onEnter:this.handlePortalEnter,onEntering:this.handlePortalEntering,onEntered:this.handlePortalEntered,onExit:this.handlePortalExit,onExiting:this.handlePortalExiting},r.default.createElement(s.default,{appendRoot:this.props.appendTo,domRef:this.fipDropDownRef,btnRef:this.fipButtonRef,className:this.state.ddClass},r.default.createElement(u.default,e))))}}]),t}();Object.defineProperty(v,"propTypes",{configurable:!0,enumerable:!0,writable:!0,value:{icons:a.default.oneOfType([a.default.arrayOf(a.default.string),a.default.arrayOf(a.default.number),a.default.objectOf(a.default.oneOfType([a.default.arrayOf(a.default.number),a.default.arrayOf(a.default.string)]))]).isRequired,search:a.default.oneOfType([a.default.objectOf(a.default.arrayOf(a.default.string)),a.default.arrayOf(a.default.string)]),iconsPerPage:a.default.number,theme:a.default.string,onChange:a.default.func.isRequired,showCategory:a.default.bool,showSearch:a.default.bool,value:a.default.oneOfType([a.default.arrayOf(a.default.string),a.default.arrayOf(a.default.number),a.default.number,a.default.string]),isMulti:a.default.bool,renderUsing:a.default.string,convertHex:a.default.bool,renderFunc:a.default.func,appendTo:a.default.oneOfType([a.default.bool,a.default.string]),allCatPlaceholder:a.default.string,searchPlaceholder:a.default.string,noIconPlaceholder:a.default.string,noSelectedPlaceholder:a.default.string,closeOnSelect:a.default.bool}}),Object.defineProperty(v,"defaultProps",{configurable:!0,enumerable:!0,writable:!0,value:{search:null,iconsPerPage:20,theme:"default",showCategory:!0,showSearch:!0,value:null,isMulti:!1,renderUsing:"class",convertHex:!0,renderFunc:null,appendTo:!1,allCatPlaceholder:"Show from all",searchPlaceholder:"Search Icons",noIconPlaceholder:"No icons found",noSelectedPlaceholder:"Select icon",closeOnSelect:!1}}),Object.defineProperty(v,"displayName",{configurable:!0,enumerable:!0,writable:!0,value:"FontIconPicker"});var E=v;t.default=E},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=((r=n(14))&&r.__esModule?r:{default:r}).default;t.default=a}]).default)},72:function(e,t,n){"use strict";n.r(t),n.d(t,"CSSTransition",(function(){return O})),n.d(t,"ReplaceTransition",(function(){return T})),n.d(t,"SwitchTransition",(function(){return q})),n.d(t,"TransitionGroup",(function(){return j})),n.d(t,"Transition",(function(){return v})),n.d(t,"config",(function(){return d}));var r=n(41),a=n(42),o=n(55);function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,Object(o.a)(e,t)}function l(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var u=n(3),s=n.n(u),c=n(35),f=n.n(c),d={disabled:!1},p=s.a.createContext(null),h=function(e){return e.scrollTop},y="entering",b="entered",m=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var a,o=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?o?(a="exited",r.appearStatus=y):a=b:a=t.unmountOnExit||t.mountOnEnter?"unmounted":"exited",r.state={status:a},r.nextCallback=null,r}i(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&"unmounted"===t.status?{status:"exited"}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==y&&n!==b&&(t=y):n!==y&&n!==b||(t="exiting")}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===y){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:f.a.findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&"exited"===this.state.status&&this.setState({status:"unmounted"})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,a=this.props.nodeRef?[r]:[f.a.findDOMNode(this),r],o=a[0],i=a[1],l=this.getTimeouts(),u=r?l.appear:l.enter;!e&&!n||d.disabled?this.safeSetState({status:b},(function(){t.props.onEntered(o)})):(this.props.onEnter(o,i),this.safeSetState({status:y},(function(){t.props.onEntering(o,i),t.onTransitionEnd(u,(function(){t.safeSetState({status:b},(function(){t.props.onEntered(o,i)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:f.a.findDOMNode(this);t&&!d.disabled?(this.props.onExit(r),this.safeSetState({status:"exiting"},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:"exited"},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:"exited"},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:f.a.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var a=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],o=a[0],i=a[1];this.props.addEndListener(o,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if("unmounted"===e)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,Object(a.a)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return s.a.createElement(p.Provider,{value:null},"function"==typeof n?n(e,r):s.a.cloneElement(s.a.Children.only(n),r))},t}(s.a.Component);function g(){}m.contextType=p,m.propTypes={},m.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:g,onEntering:g,onEntered:g,onExit:g,onExiting:g,onExited:g},m.UNMOUNTED="unmounted",m.EXITED="exited",m.ENTERING=y,m.ENTERED=b,m.EXITING="exiting";var v=m,E=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=l(n.className,r):n.setAttribute("class",l(n.className&&n.className.baseVal||"",r)));var n,r}))},P=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a=0||(o[n]=e[n]);return o}n.d(t,"a",(function(){return r}))},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,n){var r=n(49);function o(e,t){for(var n=0;n2||_(I)>3?"":" "}function z(e,t){for(;--t&&R()&&!(I<48||I>102||I>57&&I<65||I>70&&I<97););return L(e,D()+(t<6&&32==T()&&32==R()))}function $(e,t){for(;R()&&e+I!==57&&(e+I!==84||47!==T()););return"/*"+L(t,E-1)+"*"+h(47===e?e:R())}function U(e){for(;!_(T());)R();return L(e,E)}function W(e,t,n,r,o,i,a,s,u,l,p){for(var f=o-1,h=0===o?i:[""],m=S(h),g=0,y=0,x=0;g0?h[w]+" "+C:b(C,/&\f/g,h[w])))&&(u[x++]=P);return j(e,t,n,0===o?c:s,u,l,p)}function B(e,t,n){return j(e,t,n,"comm",h(I),O(e,2,-2),0)}function Y(e,t,n,r){return j(e,t,n,p,O(e,0,r),O(e,r+1,-1),r)}function G(e,t){for(var n="",r=S(e),o=0;o-1&&!e.return)switch(e.type){case p:e.return=function e(t,n){switch(function(e,t){return 45^y(e,0)?(((t<<2^y(e,0))<<2^y(e,1))<<2^y(e,2))<<2^y(e,3):0}(t,n)){case 5103:return l+"print-"+t+t;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return l+t+t;case 5349:case 4246:case 4810:case 6968:case 2756:return l+t+u+t+s+t+t;case 6828:case 4268:return l+t+s+t+t;case 6165:return l+t+s+"flex-"+t+t;case 5187:return l+t+b(t,/(\w+).+(:[^]+)/,l+"box-$1$2"+s+"flex-$1$2")+t;case 5443:return l+t+s+"flex-item-"+b(t,/flex-|-self/,"")+t;case 4675:return l+t+s+"flex-line-pack"+b(t,/align-content|flex-|-self/,"")+t;case 5548:return l+t+s+b(t,"shrink","negative")+t;case 5292:return l+t+s+b(t,"basis","preferred-size")+t;case 6060:return l+"box-"+b(t,"-grow","")+l+t+s+b(t,"grow","positive")+t;case 4554:return l+b(t,/([^-])(transform)/g,"$1"+l+"$2")+t;case 6187:return b(b(b(t,/(zoom-|grab)/,l+"$1"),/(image-set)/,l+"$1"),t,"")+t;case 5495:case 3959:return b(t,/(image-set\([^]*)/,l+"$1$`$1");case 4968:return b(b(t,/(.+:)(flex-)?(.*)/,l+"box-pack:$3"+s+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+l+t+t;case 4095:case 3583:case 4068:case 2532:return b(t,/(.+)-inline(.+)/,l+"$1$2")+t;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(x(t)-1-n>6)switch(y(t,n+1)){case 109:if(45!==y(t,n+4))break;case 102:return b(t,/(.+:)(.+)-([^]+)/,"$1"+l+"$2-$3$1"+u+(108==y(t,n+3)?"$3":"$2-$3"))+t;case 115:return~g(t,"stretch")?e(b(t,"stretch","fill-available"),n)+t:t}break;case 4949:if(115!==y(t,n+1))break;case 6444:switch(y(t,x(t)-3-(~g(t,"!important")&&10))){case 107:return b(t,":",":"+l)+t;case 101:return b(t,/(.+:)([^;!]+)(;|!.+)?/,"$1"+l+(45===y(t,14)?"inline-":"")+"box$3$1"+l+"$2$3$1"+s+"$2box$3")+t}break;case 5936:switch(y(t,n+11)){case 114:return l+t+s+b(t,/[svh]\w+-[tblr]{2}/,"tb")+t;case 108:return l+t+s+b(t,/[svh]\w+-[tblr]{2}/,"tb-rl")+t;case 45:return l+t+s+b(t,/[svh]\w+-[tblr]{2}/,"lr")+t}return l+t+s+t+t}return t}(e.value,e.length);break;case f:return G([V(e,{value:b(e.value,"@","@"+l)})],r);case c:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return G([V(e,{props:[b(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return G([V(e,{props:[b(t,/:(plac\w+)/,":"+l+"input-$1")]}),V(e,{props:[b(t,/:(plac\w+)/,":-moz-$1")]}),V(e,{props:[b(t,/:(plac\w+)/,s+"input-$1")]})],r)}return""}))}}],re=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var r,o,i=e.stylisPlugins||ne,s={},u=[];r=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n0&&x(A)-f&&w(m>32?Y(A+";",o,r,f-1):Y(b(A," ","")+";",o,r,f-2),l);break;case 59:A+=";";default:if(w(F=W(A,n,r,c,p,i,u,V,L=[],_=[],f),a),123===j)if(0===p)e(A,n,F,F,L,a,f,u,_);else switch(99===d&&110===y(A,3)?100:d){case 100:case 108:case 109:case 115:e(t,F,F,o&&w(W(t,F,F,0,0,i,u,V,i,L=[],f),_),i,_,f,u,o?L:_);break;default:e(A,F,F,F,[""],_,0,u,_)}}c=p=m=0,O=M=1,V=A="",f=s;break;case 58:f=1+x(A),m=v;default:if(O<1)if(123==j)--O;else if(125==j&&0==O++&&125==(I=E>0?y(k,--E):0,P--,10===I&&(P=1,C--),I))continue;switch(A+=h(j),j*O){case 38:M=p>0?1:(A+="\f",-1);break;case 44:u[c++]=(x(A)-1)*M,M=1;break;case 64:45===T()&&(A+=N(R())),d=T(),p=f=x(V=A+=U(D())),j++;break;case 45:45===v&&2==x(A)&&(O=0)}}return a}("",null,null,null,[""],e=F(e),0,[0],e))}(e?e+"{"+t.styles+"}":t.styles),f),r&&(d.inserted[t.name]=!0)};var d={key:t,sheet:new a({key:t,container:r,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:s,registered:{},insert:o};return d.sheet.hydrate(u),d};function oe(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}n(57);var ie=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},ae=function(e,t,n){ie(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+r:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}},se={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},ue=/[A-Z]|^ms/g,le=/_EMO_([^_]+?)_([^]*?)_EMO_/g,ce=function(e){return 45===e.charCodeAt(1)},pe=function(e){return null!=e&&"boolean"!=typeof e},fe=q((function(e){return ce(e)?e:e.replace(ue,"-$&").toLowerCase()})),de=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(le,(function(e,t,n){return me={name:t,styles:n,next:me},t}))}return 1===se[e]||ce(e)||"number"!=typeof t||0===t?t:t+"px"};function he(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return me={name:n.name,styles:n.styles,next:me},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)me={name:r.name,styles:r.styles,next:me},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+u,styles:o,next:me}},ge=!!o.useInsertionEffect&&o.useInsertionEffect,ye=ge||function(e){return e()},Oe=(ge||o.useLayoutEffect,{}.hasOwnProperty),xe=o.createContext("undefined"!=typeof HTMLElement?re({key:"css"}):null),Se=(xe.Provider,function(e){return Object(o.forwardRef)((function(t,n){var r=Object(o.useContext)(xe);return e(t,r,n)}))}),we=o.createContext({}),Ce="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",Pe=function(e,t){var n={};for(var r in t)Oe.call(t,r)&&(n[r]=t[r]);return n[Ce]=e,n},Me=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return ie(t,n,r),ye((function(){return ae(t,n,r)})),null},Ee=Se((function(e,t,n){var r=e.css;"string"==typeof r&&void 0!==t.registered[r]&&(r=t.registered[r]);var i=e[Ce],a=[r],s="";"string"==typeof e.className?s=oe(t.registered,a,e.className):null!=e.className&&(s=e.className+" ");var u=be(a,void 0,o.useContext(we));s+=t.key+"-"+u.name;var l={};for(var c in e)Oe.call(e,c)&&"css"!==c&&c!==Ce&&(l[c]=e[c]);return l.ref=n,l.className=s,o.createElement(o.Fragment,null,o.createElement(Me,{cache:t,serialized:u,isStringTag:"string"==typeof i}),o.createElement(i,l))})),Ie=(n(18),function(e,t){var n=arguments;if(null==t||!Oe.call(t,"css"))return o.createElement.apply(void 0,n);var r=n.length,i=new Array(r);i[0]=Ee,i[1]=Pe(e,t);for(var a=2;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function _e(e){return(_e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Fe=n(56),Ae=n.n(Fe);function Ne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function He(e){var t=function(e,t){if("object"!==_e(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==_e(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===_e(t)?t:String(t)}function ze(e,t){for(var n=0;n-1}function it(e){return ot(e)?window.pageYOffset:e.scrollTop}function at(e,t){ot(e)?window.scrollTo(0,t):e.scrollTop=t}function st(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function ut(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Qe,o=it(e),i=t-o,a=10,s=0;function u(){var t=st(s+=a,o,i,n);at(e,t),s=d)return{placement:"bottom",maxHeight:t};if(w>=d&&!a)return i&&ut(u,C,160),{placement:"bottom",maxHeight:t};if(!a&&w>=r||a&&x>=r)return i&&ut(u,C,160),{placement:"bottom",maxHeight:a?x-g:w-g};if("auto"===o||a){var M=t,E=a?O:S;return E>=r&&(M=Math.min(E-g-s.controlHeight,t)),{placement:"top",maxHeight:M}}if("bottom"===o)return i&&at(u,C),{placement:"bottom",maxHeight:t};break;case"top":if(O>=d)return{placement:"top",maxHeight:t};if(S>=d&&!a)return i&&ut(u,P,160),{placement:"top",maxHeight:t};if(!a&&S>=r||a&&O>=r){var I=t;return(!a&&S>=r||a&&O>=r)&&(I=a?O-y:S-y),i&&ut(u,P,160),{placement:"top",maxHeight:I}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'.concat(o,'".'))}return l}var mt=function(e){return"auto"===e?"bottom":e},vt=Object(o.createContext)({getPortalPlacement:null}),bt=function(e){We(n,e);var t=Ze(n);function n(){var e;Ne(this,n);for(var r=arguments.length,o=new Array(r),i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n0,m=p-f-l,v=!1;m>t&&s.current&&(r&&r(e),s.current=!1),h&&u.current&&(a&&a(e),u.current=!1),h&&t>m?(n&&!s.current&&n(e),d.scrollTop=p,v=!0,s.current=!0):!h&&-t>l&&(i&&!u.current&&i(e),d.scrollTop=0,v=!0,u.current=!0),v&&function(e){e.preventDefault(),e.stopPropagation()}(e)}}),[]),f=Object(o.useCallback)((function(e){p(e,e.deltaY)}),[p]),d=Object(o.useCallback)((function(e){l.current=e.changedTouches[0].clientY}),[]),h=Object(o.useCallback)((function(e){var t=l.current-e.changedTouches[0].clientY;p(e,t)}),[p]),m=Object(o.useCallback)((function(e){if(e){var t=!!dt&&{passive:!1};"function"==typeof e.addEventListener&&e.addEventListener("wheel",f,t),"function"==typeof e.addEventListener&&e.addEventListener("touchstart",d,t),"function"==typeof e.addEventListener&&e.addEventListener("touchmove",h,t)}}),[h,d,f]),v=Object(o.useCallback)((function(e){e&&("function"==typeof e.removeEventListener&&e.removeEventListener("wheel",f,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchstart",d,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchmove",h,!1))}),[h,d,f]);return Object(o.useEffect)((function(){if(t){var e=c.current;return m(e),function(){v(e)}}}),[t,m,v]),function(e){c.current=e}}({isEnabled:void 0===r||r,onBottomArrive:e.onBottomArrive,onBottomLeave:e.onBottomLeave,onTopArrive:e.onTopArrive,onTopLeave:e.onTopLeave}),s=function(e){var t=e.isEnabled,n=e.accountForScrollbars,r=void 0===n||n,i=Object(o.useRef)({}),a=Object(o.useRef)(null),s=Object(o.useCallback)((function(e){if(mn){var t=document.body,n=t&&t.style;if(r&&ln.forEach((function(e){var t=n&&n[e];i.current[e]=t})),r&&vn<1){var o=parseInt(i.current.paddingRight,10)||0,a=document.body?document.body.clientWidth:0,s=window.innerWidth-a+o||0;Object.keys(cn).forEach((function(e){var t=cn[e];n&&(n[e]=t)})),n&&(n.paddingRight="".concat(s,"px"))}t&&hn()&&(t.addEventListener("touchmove",pn,bn),e&&(e.addEventListener("touchstart",dn,bn),e.addEventListener("touchmove",fn,bn))),vn+=1}}),[]),u=Object(o.useCallback)((function(e){if(mn){var t=document.body,n=t&&t.style;vn=Math.max(vn-1,0),r&&vn<1&&ln.forEach((function(e){var t=i.current[e];n&&(n[e]=t)})),t&&hn()&&(t.removeEventListener("touchmove",pn,bn),e&&(e.removeEventListener("touchstart",dn,bn),e.removeEventListener("touchmove",fn,bn)))}}),[]);return Object(o.useEffect)((function(){if(t){var e=a.current;return s(e),function(){u(e)}}}),[t,s,u]),function(e){a.current=e}}({isEnabled:n});return Ie(i.a.Fragment,null,n&&Ie("div",{onClick:gn,css:yn}),t((function(e){a(e),s(e)})))}var xn={clearIndicator:Tt,container:function(e){var t=e.isDisabled;return{label:"container",direction:e.isRtl?"rtl":null,pointerEvents:t?"none":null,position:"relative"}},control:function(e){var t=e.isDisabled,n=e.isFocused,r=e.theme,o=r.colors,i=r.borderRadius,a=r.spacing;return{label:"control",alignItems:"center",backgroundColor:t?o.neutral5:o.neutral0,borderColor:t?o.neutral10:n?o.primary:o.neutral20,borderRadius:i,borderStyle:"solid",borderWidth:1,boxShadow:n?"0 0 0 1px ".concat(o.primary):null,cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:a.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms","&:hover":{borderColor:n?o.primary:o.neutral30}}},dropdownIndicator:Rt,group:function(e){var t=e.theme.spacing;return{paddingBottom:2*t.baseUnit,paddingTop:2*t.baseUnit}},groupHeading:function(e){var t=e.theme.spacing;return{label:"group",color:"#999",cursor:"default",display:"block",fontSize:"75%",fontWeight:"500",marginBottom:"0.25em",paddingLeft:3*t.baseUnit,paddingRight:3*t.baseUnit,textTransform:"uppercase"}},indicatorsContainer:function(){return{alignItems:"center",alignSelf:"stretch",display:"flex",flexShrink:0}},indicatorSeparator:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing.baseUnit,o=n.colors;return{label:"indicatorSeparator",alignSelf:"stretch",backgroundColor:t?o.neutral10:o.neutral20,marginBottom:2*r,marginTop:2*r,width:1}},input:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{margin:r.baseUnit/2,paddingBottom:r.baseUnit/2,paddingTop:r.baseUnit/2,visibility:t?"hidden":"visible",color:o.neutral80}},loadingIndicator:function(e){var t=e.isFocused,n=e.size,r=e.theme,o=r.colors,i=r.spacing.baseUnit;return{label:"loadingIndicator",color:t?o.neutral60:o.neutral20,display:"flex",padding:2*i,transition:"color 150ms",alignSelf:"center",fontSize:n,lineHeight:1,marginRight:n,textAlign:"center",verticalAlign:"middle"}},loadingMessage:Ot,menu:function(e){var t,n=e.placement,r=e.theme,o=r.borderRadius,i=r.spacing,a=r.colors;return Be(t={label:"menu"},function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(n),"100%"),Be(t,"backgroundColor",a.neutral0),Be(t,"borderRadius",o),Be(t,"boxShadow","0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)"),Be(t,"marginBottom",i.menuGutter),Be(t,"marginTop",i.menuGutter),Be(t,"position","absolute"),Be(t,"width","100%"),Be(t,"zIndex",1),t},menuList:function(e){var t=e.maxHeight,n=e.theme.spacing.baseUnit;return{maxHeight:t,overflowY:"auto",paddingBottom:n,paddingTop:n,position:"relative",WebkitOverflowScrolling:"touch"}},menuPortal:function(e){var t=e.rect,n=e.offset,r=e.position;return{left:t.left,position:r,top:n,width:t.width,zIndex:1}},multiValue:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius;return{label:"multiValue",backgroundColor:t.colors.neutral10,borderRadius:r/2,display:"flex",margin:n.baseUnit/2,minWidth:0}},multiValueLabel:function(e){var t=e.theme,n=t.borderRadius,r=t.colors,o=e.cropWithEllipsis;return{borderRadius:n/2,color:r.neutral80,fontSize:"85%",overflow:"hidden",padding:3,paddingLeft:6,textOverflow:o?"ellipsis":null,whiteSpace:"nowrap"}},multiValueRemove:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius,o=t.colors;return{alignItems:"center",borderRadius:r/2,backgroundColor:e.isFocused&&o.dangerLight,display:"flex",paddingLeft:n.baseUnit,paddingRight:n.baseUnit,":hover":{backgroundColor:o.dangerLight,color:o.danger}}},noOptionsMessage:yt,option:function(e){var t=e.isDisabled,n=e.isFocused,r=e.isSelected,o=e.theme,i=o.spacing,a=o.colors;return{label:"option",backgroundColor:r?a.primary:n?a.primary25:"transparent",color:t?a.neutral20:r?a.neutral0:"inherit",cursor:"default",display:"block",fontSize:"inherit",padding:"".concat(2*i.baseUnit,"px ").concat(3*i.baseUnit,"px"),width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",":active":{backgroundColor:!t&&(r?a.primary:a.primary50)}}},placeholder:function(e){var t=e.theme,n=t.spacing;return{label:"placeholder",color:t.colors.neutral50,marginLeft:n.baseUnit/2,marginRight:n.baseUnit/2,position:"absolute",top:"50%",transform:"translateY(-50%)"}},singleValue:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{label:"singleValue",color:t?o.neutral40:o.neutral80,marginLeft:r.baseUnit/2,marginRight:r.baseUnit/2,maxWidth:"calc(100% - ".concat(2*r.baseUnit,"px)"),overflow:"hidden",position:"absolute",textOverflow:"ellipsis",whiteSpace:"nowrap",top:"50%",transform:"translateY(-50%)"}},valueContainer:function(e){var t=e.theme.spacing;return{alignItems:"center",display:"flex",flex:1,flexWrap:"wrap",padding:"".concat(t.baseUnit/2,"px ").concat(2*t.baseUnit,"px"),WebkitOverflowScrolling:"touch",position:"relative",overflow:"hidden"}}},Sn={borderRadius:4,colors:{primary:"#2684FF",primary75:"#4C9AFF",primary50:"#B2D4FF",primary25:"#DEEBFF",danger:"#DE350B",dangerLight:"#FFBDAD",neutral0:"hsl(0, 0%, 100%)",neutral5:"hsl(0, 0%, 95%)",neutral10:"hsl(0, 0%, 90%)",neutral20:"hsl(0, 0%, 80%)",neutral30:"hsl(0, 0%, 70%)",neutral40:"hsl(0, 0%, 60%)",neutral50:"hsl(0, 0%, 50%)",neutral60:"hsl(0, 0%, 40%)",neutral70:"hsl(0, 0%, 30%)",neutral80:"hsl(0, 0%, 20%)",neutral90:"hsl(0, 0%, 10%)"},spacing:{baseUnit:4,controlHeight:38,menuGutter:8}},wn={"aria-live":"polite",backspaceRemovesValue:!0,blurInputOnSelect:lt(),captureMenuScroll:!lt(),closeMenuOnSelect:!0,closeMenuOnScroll:!1,components:{},controlShouldRenderValue:!0,escapeClearsValue:!1,filterOption:function(e,t){var n=Ke({ignoreCase:!0,ignoreAccents:!0,stringify:sn,trim:!0,matchFrom:"any"},void 0),r=n.ignoreCase,o=n.ignoreAccents,i=n.stringify,a=n.trim,s=n.matchFrom,u=a?an(t):t,l=a?an(i(e)):i(e);return r&&(u=u.toLowerCase(),l=l.toLowerCase()),o&&(u=on(u),l=rn(l)),"start"===s?l.substr(0,u.length)===u:l.indexOf(u)>-1},formatGroupLabel:function(e){return e.label},getOptionLabel:function(e){return e.label},getOptionValue:function(e){return e.value},isDisabled:!1,isLoading:!1,isMulti:!1,isRtl:!1,isSearchable:!0,isOptionDisabled:function(e){return!!e.isDisabled},loadingMessage:function(){return"Loading..."},maxMenuHeight:300,minMenuHeight:140,menuIsOpen:!1,menuPlacement:"bottom",menuPosition:"absolute",menuShouldBlockScroll:!1,menuShouldScrollIntoView:!function(){try{return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}catch(e){return!1}}(),noOptionsMessage:function(){return"No options"},openMenuOnFocus:!1,openMenuOnClick:!0,options:[],pageSize:5,placeholder:"Select...",screenReaderStatus:function(e){var t=e.count;return"".concat(t," result").concat(1!==t?"s":""," available")},styles:{},tabIndex:"0",tabSelectsValue:!0};function Cn(e,t,n,r){return{type:"option",data:t,isDisabled:jn(e,t,n),isSelected:Vn(e,t,n),label:In(e,t),value:kn(e,t),index:r}}function Pn(e,t){return e.options.map((function(n,r){if(n.options){var o=n.options.map((function(n,r){return Cn(e,n,t,r)})).filter((function(t){return En(e,t)}));return o.length>0?{type:"group",data:n,options:o,index:r}:void 0}var i=Cn(e,n,t,r);return En(e,i)?i:void 0})).filter((function(e){return!!e}))}function Mn(e){return e.reduce((function(e,t){return"group"===t.type?e.push.apply(e,Wt(t.options.map((function(e){return e.data})))):e.push(t.data),e}),[])}function En(e,t){var n=e.inputValue,r=void 0===n?"":n,o=t.data,i=t.isSelected,a=t.label,s=t.value;return(!Tn(e)||!i)&&Rn(e,{label:a,value:s,data:o},r)}var In=function(e,t){return e.getOptionLabel(t)},kn=function(e,t){return e.getOptionValue(t)};function jn(e,t,n){return"function"==typeof e.isOptionDisabled&&e.isOptionDisabled(t,n)}function Vn(e,t,n){if(n.indexOf(t)>-1)return!0;if("function"==typeof e.isOptionSelected)return e.isOptionSelected(t,n);var r=kn(e,t);return n.some((function(t){return kn(e,t)===r}))}function Rn(e,t,n){return!e.filterOption||e.filterOption(t,n)}var Tn=function(e){var t=e.hideSelectedOptions,n=e.isMulti;return void 0===t?n:t},Dn=1,Ln=function(e){We(n,e);var t=Ze(n);function n(e){var r;return Ne(this,n),(r=t.call(this,e)).state={ariaSelection:null,focusedOption:null,focusedValue:null,inputIsHidden:!1,isFocused:!1,selectValue:[],clearFocusValueOnUpdate:!1,inputIsHiddenAfterUpdate:void 0,prevProps:void 0},r.blockOptionHover=!1,r.isComposing=!1,r.commonProps=void 0,r.initialTouchX=0,r.initialTouchY=0,r.instancePrefix="",r.openAfterFocus=!1,r.scrollToFocusedOptionOnUpdate=!1,r.userIsDragging=void 0,r.controlRef=null,r.getControlRef=function(e){r.controlRef=e},r.focusedOptionRef=null,r.getFocusedOptionRef=function(e){r.focusedOptionRef=e},r.menuListRef=null,r.getMenuListRef=function(e){r.menuListRef=e},r.inputRef=null,r.getInputRef=function(e){r.inputRef=e},r.focus=r.focusInput,r.blur=r.blurInput,r.onChange=function(e,t){var n=r.props,o=n.onChange,i=n.name;t.name=i,r.ariaOnChange(e,t),o(e,t)},r.setValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"set-value",n=arguments.length>2?arguments[2]:void 0,o=r.props,i=o.closeMenuOnSelect,a=o.isMulti;r.onInputChange("",{action:"set-value"}),i&&(r.setState({inputIsHiddenAfterUpdate:!a}),r.onMenuClose()),r.setState({clearFocusValueOnUpdate:!0}),r.onChange(e,{action:t,option:n})},r.selectOption=function(e){var t=r.props,n=t.blurInputOnSelect,o=t.isMulti,i=t.name,a=r.state.selectValue,s=o&&r.isOptionSelected(e,a),u=r.isOptionDisabled(e,a);if(s){var l=r.getOptionValue(e);r.setValue(a.filter((function(e){return r.getOptionValue(e)!==l})),"deselect-option",e)}else{if(u)return void r.ariaOnChange(e,{action:"select-option",name:i});o?r.setValue([].concat(Wt(a),[e]),"select-option",e):r.setValue(e,"select-option")}n&&r.blurInput()},r.removeValue=function(e){var t=r.props.isMulti,n=r.state.selectValue,o=r.getOptionValue(e),i=n.filter((function(e){return r.getOptionValue(e)!==o})),a=t?i:i[0]||null;r.onChange(a,{action:"remove-value",removedValue:e}),r.focusInput()},r.clearValue=function(){var e=r.state.selectValue;r.onChange(r.props.isMulti?[]:null,{action:"clear",removedValues:e})},r.popValue=function(){var e=r.props.isMulti,t=r.state.selectValue,n=t[t.length-1],o=t.slice(0,t.length-1),i=e?o:o[0]||null;r.onChange(i,{action:"pop-value",removedValue:n})},r.getValue=function(){return r.state.selectValue},r.cx=function(){for(var e=arguments.length,t=new Array(e),n=0;n5||i>5}},r.onTouchEnd=function(e){r.userIsDragging||(r.controlRef&&!r.controlRef.contains(e.target)&&r.menuListRef&&!r.menuListRef.contains(e.target)&&r.blurInput(),r.initialTouchX=0,r.initialTouchY=0)},r.onControlTouchEnd=function(e){r.userIsDragging||r.onControlMouseDown(e)},r.onClearIndicatorTouchEnd=function(e){r.userIsDragging||r.onClearIndicatorMouseDown(e)},r.onDropdownIndicatorTouchEnd=function(e){r.userIsDragging||r.onDropdownIndicatorMouseDown(e)},r.handleInputChange=function(e){var t=e.currentTarget.value;r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange(t,{action:"input-change"}),r.props.menuIsOpen||r.onMenuOpen()},r.onInputFocus=function(e){r.props.onFocus&&r.props.onFocus(e),r.setState({inputIsHiddenAfterUpdate:!1,isFocused:!0}),(r.openAfterFocus||r.props.openMenuOnFocus)&&r.openMenu("first"),r.openAfterFocus=!1},r.onInputBlur=function(e){r.menuListRef&&r.menuListRef.contains(document.activeElement)?r.inputRef.focus():(r.props.onBlur&&r.props.onBlur(e),r.onInputChange("",{action:"input-blur"}),r.onMenuClose(),r.setState({focusedValue:null,isFocused:!1}))},r.onOptionHover=function(e){r.blockOptionHover||r.state.focusedOption===e||r.setState({focusedOption:e})},r.shouldHideSelectedOptions=function(){return Tn(r.props)},r.onKeyDown=function(e){var t=r.props,n=t.isMulti,o=t.backspaceRemovesValue,i=t.escapeClearsValue,a=t.inputValue,s=t.isClearable,u=t.isDisabled,l=t.menuIsOpen,c=t.onKeyDown,p=t.tabSelectsValue,f=t.openMenuOnFocus,d=r.state,h=d.focusedOption,m=d.focusedValue,v=d.selectValue;if(!(u||"function"==typeof c&&(c(e),e.defaultPrevented))){switch(r.blockOptionHover=!0,e.key){case"ArrowLeft":if(!n||a)return;r.focusValue("previous");break;case"ArrowRight":if(!n||a)return;r.focusValue("next");break;case"Delete":case"Backspace":if(a)return;if(m)r.removeValue(m);else{if(!o)return;n?r.popValue():s&&r.clearValue()}break;case"Tab":if(r.isComposing)return;if(e.shiftKey||!l||!p||!h||f&&r.isOptionSelected(h,v))return;r.selectOption(h);break;case"Enter":if(229===e.keyCode)break;if(l){if(!h)return;if(r.isComposing)return;r.selectOption(h);break}return;case"Escape":l?(r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange("",{action:"menu-close"}),r.onMenuClose()):s&&i&&r.clearValue();break;case" ":if(a)return;if(!l){r.openMenu("first");break}if(!h)return;r.selectOption(h);break;case"ArrowUp":l?r.focusOption("up"):r.openMenu("last");break;case"ArrowDown":l?r.focusOption("down"):r.openMenu("first");break;case"PageUp":if(!l)return;r.focusOption("pageup");break;case"PageDown":if(!l)return;r.focusOption("pagedown");break;case"Home":if(!l)return;r.focusOption("first");break;case"End":if(!l)return;r.focusOption("last");break;default:return}e.preventDefault()}},r.instancePrefix="react-select-"+(r.props.instanceId||++Dn),r.state.selectValue=nt(e.value),r}return $e(n,[{key:"componentDidMount",value:function(){this.startListeningComposition(),this.startListeningToTouch(),this.props.closeMenuOnScroll&&document&&document.addEventListener&&document.addEventListener("scroll",this.onScroll,!0),this.props.autoFocus&&this.focusInput()}},{key:"componentDidUpdate",value:function(e){var t,n,r,o,i,a=this.props,s=a.isDisabled,u=a.menuIsOpen,l=this.state.isFocused;(l&&!s&&e.isDisabled||l&&u&&!e.menuIsOpen)&&this.focusInput(),l&&s&&!e.isDisabled&&this.setState({isFocused:!1},this.onMenuClose),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&(t=this.menuListRef,n=this.focusedOptionRef,r=t.getBoundingClientRect(),o=n.getBoundingClientRect(),i=n.offsetHeight/3,o.bottom+i>r.bottom?at(t,Math.min(n.offsetTop+n.clientHeight-t.offsetHeight+i,t.scrollHeight)):o.top-i-1&&(a=s)}this.scrollToFocusedOptionOnUpdate=!(o&&this.menuListRef),this.setState({inputIsHiddenAfterUpdate:!1,focusedValue:null,focusedOption:i[a]},(function(){return t.onMenuOpen()}))}},{key:"focusValue",value:function(e){var t=this.state,n=t.selectValue,r=t.focusedValue;if(this.props.isMulti){this.setState({focusedOption:null});var o=n.indexOf(r);r||(o=-1);var i=n.length-1,a=-1;if(n.length){switch(e){case"previous":a=0===o?0:-1===o?i:o-1;break;case"next":o>-1&&o0&&void 0!==arguments[0]?arguments[0]:"first",t=this.props.pageSize,n=this.state.focusedOption,r=this.getFocusableOptions();if(r.length){var o=0,i=r.indexOf(n);n||(i=-1),"up"===e?o=i>0?i-1:r.length-1:"down"===e?o=(i+1)%r.length:"pageup"===e?(o=i-t)<0&&(o=0):"pagedown"===e?(o=i+t)>r.length-1&&(o=r.length-1):"last"===e&&(o=r.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:r[o],focusedValue:null})}}},{key:"getTheme",value:function(){return this.props.theme?"function"==typeof this.props.theme?this.props.theme(Sn):Ke(Ke({},Sn),this.props.theme):Sn}},{key:"getCommonProps",value:function(){var e=this.clearValue,t=this.cx,n=this.getStyles,r=this.getValue,o=this.selectOption,i=this.setValue,a=this.props,s=a.isMulti,u=a.isRtl,l=a.options;return{clearValue:e,cx:t,getStyles:n,getValue:r,hasValue:this.hasValue(),isMulti:s,isRtl:u,options:l,selectOption:o,selectProps:a,setValue:i,theme:this.getTheme()}}},{key:"hasValue",value:function(){return this.state.selectValue.length>0}},{key:"hasOptions",value:function(){return!!this.getFocusableOptions().length}},{key:"isClearable",value:function(){var e=this.props,t=e.isClearable,n=e.isMulti;return void 0===t?n:t}},{key:"isOptionDisabled",value:function(e,t){return jn(this.props,e,t)}},{key:"isOptionSelected",value:function(e,t){return Vn(this.props,e,t)}},{key:"filterOption",value:function(e,t){return Rn(this.props,e,t)}},{key:"formatOptionLabel",value:function(e,t){if("function"==typeof this.props.formatOptionLabel){var n=this.props.inputValue,r=this.state.selectValue;return this.props.formatOptionLabel(e,{context:t,inputValue:n,selectValue:r})}return this.getOptionLabel(e)}},{key:"formatGroupLabel",value:function(e){return this.props.formatGroupLabel(e)}},{key:"startListeningComposition",value:function(){document&&document.addEventListener&&(document.addEventListener("compositionstart",this.onCompositionStart,!1),document.addEventListener("compositionend",this.onCompositionEnd,!1))}},{key:"stopListeningComposition",value:function(){document&&document.removeEventListener&&(document.removeEventListener("compositionstart",this.onCompositionStart),document.removeEventListener("compositionend",this.onCompositionEnd))}},{key:"startListeningToTouch",value:function(){document&&document.addEventListener&&(document.addEventListener("touchstart",this.onTouchStart,!1),document.addEventListener("touchmove",this.onTouchMove,!1),document.addEventListener("touchend",this.onTouchEnd,!1))}},{key:"stopListeningToTouch",value:function(){document&&document.removeEventListener&&(document.removeEventListener("touchstart",this.onTouchStart),document.removeEventListener("touchmove",this.onTouchMove),document.removeEventListener("touchend",this.onTouchEnd))}},{key:"renderInput",value:function(){var e=this.props,t=e.isDisabled,n=e.isSearchable,o=e.inputId,a=e.inputValue,s=e.tabIndex,u=e.form,l=this.getComponents().Input,c=this.state.inputIsHidden,p=this.commonProps,f=o||this.getElementId("input"),d={"aria-autocomplete":"list","aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"]};return n?i.a.createElement(l,Object(r.a)({},p,{autoCapitalize:"none",autoComplete:"off",autoCorrect:"off",id:f,innerRef:this.getInputRef,isDisabled:t,isHidden:c,onBlur:this.onInputBlur,onChange:this.handleInputChange,onFocus:this.onInputFocus,spellCheck:"false",tabIndex:s,form:u,type:"text",value:a},d)):i.a.createElement(un,Object(r.a)({id:f,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:Qe,onFocus:this.onInputFocus,readOnly:!0,disabled:t,tabIndex:s,form:u,value:""},d))}},{key:"renderPlaceholderOrValue",value:function(){var e=this,t=this.getComponents(),n=t.MultiValue,o=t.MultiValueContainer,a=t.MultiValueLabel,s=t.MultiValueRemove,u=t.SingleValue,l=t.Placeholder,c=this.commonProps,p=this.props,f=p.controlShouldRenderValue,d=p.isDisabled,h=p.isMulti,m=p.inputValue,v=p.placeholder,b=this.state,g=b.selectValue,y=b.focusedValue,O=b.isFocused;if(!this.hasValue()||!f)return m?null:i.a.createElement(l,Object(r.a)({},c,{key:"placeholder",isDisabled:d,isFocused:O}),v);if(h)return g.map((function(t,u){var l=t===y;return i.a.createElement(n,Object(r.a)({},c,{components:{Container:o,Label:a,Remove:s},isFocused:l,isDisabled:d,key:"".concat(e.getOptionValue(t)).concat(u),index:u,removeProps:{onClick:function(){return e.removeValue(t)},onTouchEnd:function(){return e.removeValue(t)},onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},data:t}),e.formatOptionLabel(t,"value"))}));if(m)return null;var x=g[0];return i.a.createElement(u,Object(r.a)({},c,{data:x,isDisabled:d}),this.formatOptionLabel(x,"value"))}},{key:"renderClearIndicator",value:function(){var e=this.getComponents().ClearIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,a=n.isLoading,s=this.state.isFocused;if(!this.isClearable()||!e||o||!this.hasValue()||a)return null;var u={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return i.a.createElement(e,Object(r.a)({},t,{innerProps:u,isFocused:s}))}},{key:"renderLoadingIndicator",value:function(){var e=this.getComponents().LoadingIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,a=n.isLoading,s=this.state.isFocused;return e&&a?i.a.createElement(e,Object(r.a)({},t,{innerProps:{"aria-hidden":"true"},isDisabled:o,isFocused:s})):null}},{key:"renderIndicatorSeparator",value:function(){var e=this.getComponents(),t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var o=this.commonProps,a=this.props.isDisabled,s=this.state.isFocused;return i.a.createElement(n,Object(r.a)({},o,{isDisabled:a,isFocused:s}))}},{key:"renderDropdownIndicator",value:function(){var e=this.getComponents().DropdownIndicator;if(!e)return null;var t=this.commonProps,n=this.props.isDisabled,o=this.state.isFocused,a={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return i.a.createElement(e,Object(r.a)({},t,{innerProps:a,isDisabled:n,isFocused:o}))}},{key:"renderMenu",value:function(){var e=this,t=this.getComponents(),n=t.Group,o=t.GroupHeading,a=t.Menu,s=t.MenuList,u=t.MenuPortal,l=t.LoadingMessage,c=t.NoOptionsMessage,p=t.Option,f=this.commonProps,d=this.state.focusedOption,h=this.props,m=h.captureMenuScroll,v=h.inputValue,b=h.isLoading,g=h.loadingMessage,y=h.minMenuHeight,O=h.maxMenuHeight,x=h.menuIsOpen,S=h.menuPlacement,w=h.menuPosition,C=h.menuPortalTarget,P=h.menuShouldBlockScroll,M=h.menuShouldScrollIntoView,E=h.noOptionsMessage,I=h.onMenuScrollToTop,k=h.onMenuScrollToBottom;if(!x)return null;var j,V=function(t,n){var o=t.type,a=t.data,s=t.isDisabled,u=t.isSelected,l=t.label,c=t.value,h=d===a,m=s?void 0:function(){return e.onOptionHover(a)},v=s?void 0:function(){return e.selectOption(a)},b="".concat(e.getElementId("option"),"-").concat(n),g={id:b,onClick:v,onMouseMove:m,onMouseOver:m,tabIndex:-1};return i.a.createElement(p,Object(r.a)({},f,{innerProps:g,data:a,isDisabled:s,isSelected:u,key:b,label:l,type:o,value:c,isFocused:h,innerRef:h?e.getFocusedOptionRef:void 0}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())j=this.getCategorizedOptions().map((function(t){if("group"===t.type){var a=t.data,s=t.options,u=t.index,l="".concat(e.getElementId("group"),"-").concat(u),c="".concat(l,"-heading");return i.a.createElement(n,Object(r.a)({},f,{key:l,data:a,options:s,Heading:o,headingProps:{id:c,data:t.data},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return V(e,"".concat(u,"-").concat(e.index))})))}if("option"===t.type)return V(t,"".concat(t.index))}));else if(b){var R=g({inputValue:v});if(null===R)return null;j=i.a.createElement(l,f,R)}else{var T=E({inputValue:v});if(null===T)return null;j=i.a.createElement(c,f,T)}var D={minMenuHeight:y,maxMenuHeight:O,menuPlacement:S,menuPosition:w,menuShouldScrollIntoView:M},L=i.a.createElement(bt,Object(r.a)({},f,D),(function(t){var n=t.ref,o=t.placerProps,u=o.placement,l=o.maxHeight;return i.a.createElement(a,Object(r.a)({},f,D,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove},isLoading:b,placement:u}),i.a.createElement(On,{captureEnabled:m,onTopArrive:I,onBottomArrive:k,lockEnabled:P},(function(t){return i.a.createElement(s,Object(r.a)({},f,{innerRef:function(n){e.getMenuListRef(n),t(n)},isLoading:b,maxHeight:l,focusedOption:d}),j)})))}));return C||"fixed"===w?i.a.createElement(u,Object(r.a)({},f,{appendTo:C,controlElement:this.controlRef,menuPlacement:S,menuPosition:w}),L):L}},{key:"renderFormField",value:function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,o=t.isMulti,a=t.name,s=this.state.selectValue;if(a&&!r){if(o){if(n){var u=s.map((function(t){return e.getOptionValue(t)})).join(n);return i.a.createElement("input",{name:a,type:"hidden",value:u})}var l=s.length>0?s.map((function(t,n){return i.a.createElement("input",{key:"i-".concat(n),name:a,type:"hidden",value:e.getOptionValue(t)})})):i.a.createElement("input",{name:a,type:"hidden"});return i.a.createElement("div",null,l)}var c=s[0]?this.getOptionValue(s[0]):"";return i.a.createElement("input",{name:a,type:"hidden",value:c})}}},{key:"renderLiveRegion",value:function(){var e=this.commonProps,t=this.state,n=t.ariaSelection,o=t.focusedOption,a=t.focusedValue,s=t.isFocused,u=t.selectValue,l=this.getFocusableOptions();return i.a.createElement(qt,Object(r.a)({},e,{ariaSelection:n,focusedOption:o,focusedValue:a,isFocused:s,selectValue:u,focusableOptions:l}))}},{key:"render",value:function(){var e=this.getComponents(),t=e.Control,n=e.IndicatorsContainer,o=e.SelectContainer,a=e.ValueContainer,s=this.props,u=s.className,l=s.id,c=s.isDisabled,p=s.menuIsOpen,f=this.state.isFocused,d=this.commonProps=this.getCommonProps();return i.a.createElement(o,Object(r.a)({},d,{className:u,innerProps:{id:l,onKeyDown:this.onKeyDown},isDisabled:c,isFocused:f}),this.renderLiveRegion(),i.a.createElement(t,Object(r.a)({},d,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:c,isFocused:f,menuIsOpen:p}),i.a.createElement(a,Object(r.a)({},d,{isDisabled:c}),this.renderPlaceholderOrValue(),this.renderInput()),i.a.createElement(n,Object(r.a)({},d,{isDisabled:c}),this.renderClearIndicator(),this.renderLoadingIndicator(),this.renderIndicatorSeparator(),this.renderDropdownIndicator())),this.renderMenu(),this.renderFormField())}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=t.prevProps,r=t.clearFocusValueOnUpdate,o=t.inputIsHiddenAfterUpdate,i=e.options,a=e.value,s=e.menuIsOpen,u=e.inputValue,l={};if(n&&(a!==n.value||i!==n.options||s!==n.menuIsOpen||u!==n.inputValue)){var c=nt(a),p=s?function(e,t){return Mn(Pn(e,t))}(e,c):[],f=r?function(e,t){var n=e.focusedValue,r=e.selectValue.indexOf(n);if(r>-1){if(t.indexOf(n)>-1)return n;if(r-1?n:t[0]}(t,p),focusedValue:f,clearFocusValueOnUpdate:!1}}var d=null!=o&&e!==n?{inputIsHidden:o,inputIsHiddenAfterUpdate:void 0}:{};return Ke(Ke(Ke({},l),d),{},{prevProps:e})}}]),n}(o.Component);Ln.defaultProps=wn;var _n,Fn,An,Nn=(n(11),n(63),n(65),n(37),n(36),o.Component,_n=Ln,An=Fn=function(e){We(n,e);var t=Ze(n);function n(){var e;Ne(this,n);for(var r=arguments.length,o=new Array(r),i=0;i1?n-1:0),o=1;o=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(this.props,[]);return function(e){c.forEach((function(t){return delete e[t]}))}(o),o.className=this.props.inputClassName,o.id=this.state.inputId,o.style=n,a.default.createElement("div",{className:this.props.className,style:t},this.renderStyles(),a.default.createElement("input",r({},o,{ref:this.inputRef})),a.default.createElement("div",{ref:this.sizerRef,style:l},e),this.props.placeholder?a.default.createElement("div",{ref:this.placeHolderSizerRef,style:l},this.props.placeholder):null)}}]),t}(i.Component);h.propTypes={className:s.default.string,defaultValue:s.default.any,extraWidth:s.default.oneOfType([s.default.number,s.default.string]),id:s.default.string,injectStyles:s.default.bool,inputClassName:s.default.string,inputRef:s.default.func,inputStyle:s.default.object,minWidth:s.default.oneOfType([s.default.number,s.default.string]),onAutosize:s.default.func,onChange:s.default.func,placeholder:s.default.string,placeholderIsMinWidth:s.default.bool,style:s.default.object,value:s.default.any},h.defaultProps={minWidth:1,injectStyles:!0},t.default=h},function(e,t,n){"use strict";var r=n(66),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function u(e){return r.isMemo(e)?a:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=a;var l=Object.defineProperty,c=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,d=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=d(n);o&&o!==h&&e(t,o,r)}var a=c(n);p&&(a=a.concat(p(n)));for(var s=u(t),m=u(n),v=0;v=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t){e.exports=function(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,n){"use strict";e.exports=n(67)},function(e,t,n){"use strict";var r="function"==typeof Symbol&&Symbol.for,o=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,a=r?Symbol.for("react.fragment"):60107,s=r?Symbol.for("react.strict_mode"):60108,u=r?Symbol.for("react.profiler"):60114,l=r?Symbol.for("react.provider"):60109,c=r?Symbol.for("react.context"):60110,p=r?Symbol.for("react.async_mode"):60111,f=r?Symbol.for("react.concurrent_mode"):60111,d=r?Symbol.for("react.forward_ref"):60112,h=r?Symbol.for("react.suspense"):60113,m=r?Symbol.for("react.suspense_list"):60120,v=r?Symbol.for("react.memo"):60115,b=r?Symbol.for("react.lazy"):60116,g=r?Symbol.for("react.block"):60121,y=r?Symbol.for("react.fundamental"):60117,O=r?Symbol.for("react.responder"):60118,x=r?Symbol.for("react.scope"):60119;function S(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case o:switch(e=e.type){case p:case f:case a:case u:case s:case h:return e;default:switch(e=e&&e.$$typeof){case c:case d:case b:case v:case l:return e;default:return t}}case i:return t}}}function w(e){return S(e)===f}t.AsyncMode=p,t.ConcurrentMode=f,t.ContextConsumer=c,t.ContextProvider=l,t.Element=o,t.ForwardRef=d,t.Fragment=a,t.Lazy=b,t.Memo=v,t.Portal=i,t.Profiler=u,t.StrictMode=s,t.Suspense=h,t.isAsyncMode=function(e){return w(e)||S(e)===p},t.isConcurrentMode=w,t.isContextConsumer=function(e){return S(e)===c},t.isContextProvider=function(e){return S(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===o},t.isForwardRef=function(e){return S(e)===d},t.isFragment=function(e){return S(e)===a},t.isLazy=function(e){return S(e)===b},t.isMemo=function(e){return S(e)===v},t.isPortal=function(e){return S(e)===i},t.isProfiler=function(e){return S(e)===u},t.isStrictMode=function(e){return S(e)===s},t.isSuspense=function(e){return S(e)===h},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===f||e===u||e===s||e===h||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===b||e.$$typeof===v||e.$$typeof===l||e.$$typeof===c||e.$$typeof===d||e.$$typeof===y||e.$$typeof===O||e.$$typeof===x||e.$$typeof===g)},t.typeOf=S}])]); \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-.mo new file mode 100644 index 0000000000000000000000000000000000000000..7889b581fe91f5725f402a03948baae699efdf29 GIT binary patch literal 269 zcmYLDF;2rk5DXI4mDChhq=QWy(L`stf+UJWgarYmJ)Ffp`Mo&*87R(_m&#!u6xT;N=%0G%bNK*|_z_Zw1b1H0*{e)pR?F24UXc63*~us~ zw~+)%VExtUO7K(0UF!qowrV^ll;U|khv{j@p3)mK%&3anK(({e*C3{B_v~AkN8Tl8 zsXN3}Omcg)MV6ZlERc}BM0R%3MkyIn8sCgEJ#z1<-uqfld^e`#_>Pspa(jCFR5iHs IRx3032g_bf*#H0l literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ar.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ar.mo new file mode 100644 index 0000000000000000000000000000000000000000..76726cd3ab5b4e67b325159df42010e11ce77fc0 GIT binary patch literal 399 zcmZ9I!A=4(5QZ`Fv`5b#=AZ;->>wKsG_vrAag*m`E#yJUqIj`4lOFWXm=>vIGpM@)oCU?>+4rde-E#`{}c~LeT zIItd#ZjJUzd$Rnl(DLfb_p4GCI)Q90ty5k+FQ;VKcvfont}L18%&ZEXa~QrAK1$22 zl_i-PyKx+JwL>Sa5~!b|qd^FuT^Iue4xO4=VAk*;@Zg_Mfl&%K0%B;lK|{^g0>6V6 z?`w?hd81MAF3`K|Vv^{U%#>DEdSf}vO5;nU5SjRZVJtv^M9WeNZQ literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-bg_BG.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-bg_BG.mo new file mode 100644 index 0000000000000000000000000000000000000000..8bdb1ec13e88899ed2963d64bb6778ea92fceb4d GIT binary patch literal 274 zcmYLDu}%U(6vV`8OKXc~Vy6p-He@eXDG(Bg7e!;c9M5CT@%HleVe~`%Jt{uLcTh0N zWM(o`%Z4=MXj(*OVf literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-cs_CZ.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-cs_CZ.mo new file mode 100644 index 0000000000000000000000000000000000000000..fbad24e36aecfa8f82b4c0594b2c56c6de2e8bb9 GIT binary patch literal 314 zcmYL^F;4iA8}Xs!jgP20ToGP^1$S1|Y}f=J7) zGo>6`xA6+7+DEVZ2^?14BG4M*Hrzu53R;}+H1wd^1cF-)H#Lcw^xBDdl@la%CRnFn sQreI@^uF8gM11nhP`))epPTvj;hRXE{lYBB>FW5}Q?|y90Y;+n52WB#+yDRo literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-da_DK.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-da_DK.mo new file mode 100644 index 0000000000000000000000000000000000000000..8e637a9189d70a37a876b3a36919b6cde4e8962b GIT binary patch literal 277 zcmYLDyH3ME5DXI4mDCi6L`yledV}L?daV_Q#4z_2Buy% zA+_A@W5{nZd$2j%i`)(~^9nO!5{zC_J8OI_ghCkH_7i=xK(4n~>yrxK#`mTW|4C(p Qd3AjKRIX`*Rx8u{2N>p0zyJUM literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-de_DE.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-de_DE.mo new file mode 100644 index 0000000000000000000000000000000000000000..40bfe7dd7312a4afebbd1e8746740ab22343377d GIT binary patch literal 274 zcmYLDF;2rk5DXI4mDCiALI5vN>*+H+%J^6tfy?KZj=XCZEq z1@87S6*oB?Y{76*z&JN=I47p)Bt#4IHb@yMrP1v$(>D)}o2_f~Nlm7V;gc%CMSZ;d MT&-#2Kr1uY0V(}X(*OVf literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-es_ES.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-es_ES.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a7bfd8d46efb466df36e529510120d51f7a000e GIT binary patch literal 401 zcmYL@K~4fO6ozX;jA@Ju*DmVX6gopNWN%$INr68QMu(jNHHrcmU7h zJ-minAF$w0zWo1d|EBNvxbekE4dR5jSP!Jb`!1z~ma$s^>Xj3Ml zJJW$@)zU#Fht@58B22v*eH!<~Hl{|LrXuR`Cpkic4uW-w7*#f84!v)+n~Ju%0aGra wq)pKC%-J{0gB%yTmGAR8E{C`>-f$G9Zv3Jb%2 zVjet4;)wH~R#%a}$JNeN`h>z;zA}aQPbwqM P)~DC6<%YHnv@*Rt9-B|; literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-fa_IR.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-fa_IR.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9d0913af3ea9172c5cc760605f3f59cc6935ae7 GIT binary patch literal 96975 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 PSQiaahnxQg0J)pt literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-fr_FR.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-fr_FR.mo new file mode 100644 index 0000000000000000000000000000000000000000..fd743d69369dcd62c89b9e7bcd4b3f148a70a2d9 GIT binary patch literal 273 zcmYLDu}%U(6vV`8OKXcQ?DWB*4cW`tC=e2f7e!;c9*<+q@%HleVe~`%JsN(*cTh0N zWM(o`% Lt#RY6R;Kq4>y1vq literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-he_IL.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-he_IL.mo new file mode 100644 index 0000000000000000000000000000000000000000..26d8587bdfda7612e6912d07f97e7d877a9fb9d3 GIT binary patch literal 277 zcmYLDF;2rk5DXI4mDCiAL`a6g?i9C_f!$LH7C|J@&bHz(@LOLgN|losxyCB*HB7EcT1TSr~%8cw0CodnYCc{RhyaVL($2MJEO^y`Kz3zPRoP0?<}wK(&# z2^P59$B^BmaIhJ}MF!*4yyBdg#Hkkx^VVx26vF6sn8Y^=$JN$V@kvc@`N9<9KdDsA P*T>gSWlb9gu`+`l8sksS literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-id_ID.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-id_ID.mo new file mode 100644 index 0000000000000000000000000000000000000000..41e63acc72e8b917cf4ff706f7f324959e0567f1 GIT binary patch literal 273 zcmYLDF;2rk5DXI4mDChl(7`1RG|^e6fh3AVgarZ79`@oKa`vpf4T6X8JsLieby8%c z(adP3n7^~r-+|&pd9J+ZgW~ESd;M2$`&>TSC;SR2M6&l@(7|Pf__* LYKKabA literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-it_IT.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-it_IT.mo new file mode 100644 index 0000000000000000000000000000000000000000..188918ea2b4a25b833e93eb8a71900848376d496 GIT binary patch literal 39910 zcmb`P37lM2nYS;y~w^y3=j|u<-QmW7|Mq@a5F8HQez06Yu*cFC$9dcn_t9_~?gVd!bKq@oPk1lf z6+Y8F(oCy>}mQd=Tt{`zX&>z?*QN0QZHDzCS;W z<9{?%JjX$OccOQ%h6myvfP29bR6Zu5zPkeM0sq#!-w74&{gA2%J`PpRPkR6R;6b>* z1{Kebq00TVfB$=^cy~R~<#!I$_eVj+y8tSmr+D|-a5voja6fnxEECVM?s@GR~{|Zz*(@^bm4OD#Zg=(kUy!%s7`Mw`2zHdN<|E}l%fvS%eq0-&%WS9Rv zq2k*QD*RzkD=Yte+q`U zzY2GNKZgqcYpDGF9v%pHI>n8HmqX>h3#y#wK;?5IRK814>2LDyFNdm!YoX%12_6AI z1ohp6Q1$w#cRvXg|8w5`Ur_nk^;DPd1EI=!1XMeBLdAb7)OX!b`ReuVS3>2d2=(1K zRQT6Gwf|e7!oM3H0B?tfzz5*L@CQ)!@*LE6FF@7%_NTdg?E>XKz`GBFs`mv@^>Mm? z-wTzGL3j|{2$kPgL#4mj^J=K}d6##803L?>6Hw`V1I~lrhAPhsP~Y#o%%yiA)c5nD z>U%L%{hba~Uu&SsF$k5CI$ z%P*nIx83QEyFsP5pXaeq^>Z3jy5~UU^IWL%T;kmmQ1NbtmM_n1pyGQc)ckyhcYhNq zUqA8uh4+6JUXA|_X9NLLad0hEdS8Uf|0D3_@NuYozXX-P?ay@X{h;!7I8?gFLAA$n zsPvC8AL!iQ+2^H^ZsQe5;mG2^`?=OYQ&ugL5dy{wH;N9l~C3rI|AAriwL*D;UsPg;}DqqjQb?^oMzI&yUC)PvN-w0Irs^=Bn|Lsuqa0^uY_ro3F z*P;5wH=*+TuipJrsB%36)o%X*_1!K#F5d@0eRmktck`jR}J4esU;OybIwD z@IEG}-u+3aeEy?%{}bF1_oGnZ zz7O^NQ&8pj9aKI10V@5SR=e~Lg6e0-LWNrf^}ZYG`(dc>M&Qn{?A>*!a=s3#oL9pu z;I-a=&Kj4$!=duE2rAy=p}y<(@B83RxG(YU8190*0o5+A^X}`s`zEOL?u3f>Zm4+g zg^Ks9o{vJ6>qk)a^ej|4wp;7M?GAUweIV5LM?lrvVyOI_0WF_U-}iaZ-%?zz6~n=k3q%v1<$WT#rrQ%`FIk}g-=7pyZ1S+pS>LFyCqQJPKQdb z8>$`#y#EHM_%4R(Zxc}UGYyY{mwWeZQ2p!_;VuMQRdjc|K-72F+OE8(@kKPYe zua80H=Z8@7KkfM(+#UCeQ2E%Q*QK);+zt1BP~ne&iuV|}2RsR?9ali*dl;(xV^Hlj z36|`f@QqOE^!B;OJPay$Xme!ubWUw{g~Prs{=L!iPR36;)qP~p#nioXXcpM!8Oc#-G0=Vqwy zuZF7M8@>BI{{2Vbp7`GjmG1|k`sp{k`xj8@{?@ydC>KfL!rv`3OENYfy&Pc z?|%+dd;?JZ=pv|eN>KT@3@YDmfeLqncfTL19q)qr?q0Yz{E~nFZK&{1K&AIfsPNB0 zmHQ9yXt>*uD}N_c{!W5QZ#4|zFgy}A;C}E%*a2^c3imyz_@9KT$ETs<|DE^WZrGJ$ zS9m!7`$B!U7%JaqK&87HD*qe(`vmTfdlD+&*T8+?jZpReVekJ%sCfPfs=gkB`@tum z^79;2eqQqLci!N_?E{tGA#i`V5S|B@d;c4u=8F$`_x(`id>AUde}O8;zrlUs({K^| z6I4DI5t-`$OsMu>3l(2KJQj{ZrT~bo?;oJz+39@8gP`JB0F{0xTn$fy zi{Tsm`+tBM*Prq3uXy*vQ1$URR6YF^s@{JE4}^b&%Fq56xb%;K3f~D;en^B#e+8<(z6}-rN$=inqfZ|yU&lbjb23!;v%Px= zD*qQl#XkyP4=ZpA{sx{6OBXVx;78#Z+tL1T9`2JbqR!w&Q2qEFQ1$m9RJ_kamGh5K z^}XxGZvNjJD!u)o{11n!=ebb%Tk5$IsvggWhr$w6{apbMhSx#$&)cEm`#e-VKjhsH zL&f_q-v4J%_4`ZD7ofi1;Sv|$!BF2Xg^KS~sP*b>_%hf7RgY_-!VN+7s|%sRk3-dW z2GyQ#hT3nw8!8|7LgoJ{;q_|-#g&W@D`|a@9^%=K*jR_+!1~YDxSxn#>o><`S^`@ z??2|k&+|M9?#%lhsPeCeJHZGl{V});obvv!ht|)a>i>GE{M_n!w}1b6sPDfD75{hP z4)6)M3;Y>W{+@=)_aD9cWr-{A{!r3}p39-~-w&0}1yJQGLFJ@S&r4AKYP+(lhdFR}+=s)3Z~;{KL8y8y zcs8KozY;3^b#M>(UZ{9)hsyUqz}?`3P~pA>_1)u8={^Y+{&}eS_ybgWFPm`R?GM#2 zj)Z%_6QIg@HdMdZ;F&_T&(%=rUF+R9L8bdX@4f>no=-r{U-v`h%n$>it5fdO95{{%)vnYyJBR;oi8*Q1i-bq3Y)bsP8@oRS%zrs;4hOh5HIr z`F;ddo_~j$hkp%2xM$U+(+QRCSy1)Y1NVl5Q28E#inj{Y?hUB;uYxM~`{4q34^(~q z5UTvoL#6-UP~modHF<`I!870|pwfF9D!!MX^0!aT<#!3(2lpvZ@vMQ$*SS#b7eVEF z3Tj@y462;(@&30!h5IN}J$(Txp07aF-?yOR`vuf@FL`&6x%%7(D*WM4<(UT+-(sk8 z_CS4qG1PdPfJ*0`Q000*)OUA5g}WE-3%>#t?gwx$_!IB`EmVEK=-oTjUA^z+xgS(M z4~ELukx=7d0aSV?K*f7DRR3H974A~c3`!1pEmVEq2-R=yg6g-Qg^KSnsC@hw?hl`V zD#yzj?){!n?Q$?w{ue@}e=5{>J)T2w4(--9aOlThJ)3sqk)LXDg4r<{9dsB+DL%HJ_i-*rI6 zcN$ba&-U!|{ue>DLjfwEo1n`3I;eJdD^xn~gI1qV^>hbRyWS6vg+G9cV6e%B?|{nB z@t!?U@m&CwzXYlrHShmg&$mLw|30X2cSDu?KB)Hl5>$S^?ft(C74H-9mGC!k0bDoj zzOO^QzYMB;*Fx39+o96G1uDI}y!#7q5ck)-`!Iw=)z3VraLb_L>xEheE{4k2G&~eu z4OM@)LFMxvsCM`)R5>1mYS)Lo`v*|<^b@FjJr7mS+rP%8vny0R910cgXzxB5DxI^S z!uR?28=&GDgDT%7RQ_HM)$gu@O8-4j_3=@t@_ZcXy9c1sdju-}??UzCr=ZgLFR1X_ zzt(X-sQ8Y7D(_P7J{cbBf{J&-zn_Fk?~PFLUJq5icR|(DolxK3YTTU%)y|hf<>zv!blw7$ueZSi z;Vn?*ybtm(_yRv_-!oq4^1B8qUl%~t(x9|x6A4^(}uhibQ1djBz~{8pj9 ze*;u}*F%;6L*DlNkYEpAW4+L$z1xc?DGc-v|}YEl}Ux2~|%I zczzwKe!c^h&g0PP4XPfVh05ojpuXGdO|Co#L%ENJioXMX6P^r}pB>-q;yVzk{*Hxn z;Yz6VN>K5pQ1$aVsPbR!{XYQJj-P-^=OL(i`W969UqY4tKcM=@AE5ff{%>*lSqN1h z$3unh@$LbrdMQA)L)E{(0`7?Wtx)xFgZIA`DxV*R>ZhNFD#zEM%JDQ*I?sFe&R4p8 z?+x{S9#sB1pvu<+mHtIg=_OF)oG(D%ajf4xjSw?XPm>H~^}B z=fj=h=}_@?!<}FsRQ@-3cLdeGV{jKZ2~{7L!-epAsQ5ky_1(9i(tRANJTF4cU;A9` z!o312pUa`rAA*YSm2d|*0ae}_RD7GD^7kgFblwJ)&s(AD`wpo5-3L`aUxoVadr;r~ z3@ZI+Ja_q9_kJ!^Je_bCcoI~7FNcfZI=Cy`1l2FEfU4IIz$Ne=xBxy0H6QJH4Qn}E z1P_K~sPerTDxJ4N<@4=O>D>aA-ktDh_*tlS{~_EB{tl{M{u?UYeg4jcKN_n3mO$mN z2WlMkLyd#K@&1!g_3?VB^sa-4!JEAM)BgPzpwj!M_x}M@z5Wy`zGvYExbs_`|HV-4 zTZW4NYN&GF1QpK*q4ISXRKD(oD&JS3%JVC@C;TH+z3hIii*H}}3fzmKzPk`^gyT^8 zeh4bwpFrj7S5Wn}-P>F|2gAK^9|?zGCp-gQ0hPZ8puYbqRR8)m)c4$y8euntxKH$%ny8L00bhU#ZOgv#$zQ2F~UJP`gKYF?Ui zlRK9@2JVCVHEGE8tPE8y*5< zsP?)XD*m@Xi%5nK*;d5i=guRTBv&Z8dN(y0+o+% zL-ns8z+l(mu{bQnX{i=f$C5%A)#50e8jEXj7=>9}n@kFEnAXB{bQHg0nAGEmFv-Gd zEuBn?aj`QTYEM75Y zNtUFQaI}_Ag!7I+CPV2IMx|6J)}qmR*r*nxI?2eV+88M(*_d}_(PaKqz^_pz&e61H zA+yHFL{iVcYsRr)-qI`_B++3kCGw3Q5;%YtIKvRW-Q9Y@Y@Tw=1 zWF+jR?J8LubQOzXcY|u52-j9d({^`nN@eT)%6K$tl!za0W^*=@viTU4)Fj4H)&MN}JU6!CMp&8!39Vt5TPtWtDy7kDQCXFmKM`3`i@)uDLku zA`gY>urHb*+Qv*z`fBc%zfUJpx*0(yqof>-BxQPe?kLmuA}Zaw(&o4}5+#?a*_)3^ zxIU^x^`tFKoESiWi$AmKZ+~Qx0D4S>EJI4xADMw5_W4y^9lW;g1 zkMJN}22)!c@<7sB|#Gu1LR7uWen|H4o@U7q7-#0wi)jixl z7<4o7r(~@8K!0J@lQXWR)O0u1LoYC>sJ4*Cg$nu*oTW!7SqQqvq9Q*@nROtlkv5P1m*i~D!HWjfuR7<( z27R@AEKM~~+_Z1gP4`%h8Jq!{H*$BGAc6go-?Wfs;evHB!=qAK*eXX_PFX04-aq7N zGKbJA`RMAFli>-G8(6=F;yPz$EBD!lSauDnq(TX#_S;p45=$t)gy1U zyqe;Z^J2YiCOuu%tl7OeE{uiiQU(xdnj^3LU?mGZ!+2c{i3&&E{e%P57)#*FXgcg4 z4bP8R|5wJe#!SIwrDY~O_UKcOKYq#S^D=u_dU}Y!$vB~L%F}#iePv*VS7k!;)Jj6o zU12s}Ppjw0Bh4j#Wn5?3VzL}b8+DVxn6qrb3bSfD9#=Y>D_9mzkjs&n7jYpOO%OBb zfXE$5Ei9xH6Ns-pEIleE@?hK4H2fBHo>w;_mMaPDs~gO$QP9J>#kkH{LEIW2#mVrK#OKKv zwpFC3K9;0a`TGaf|D;C6HEL2S%C^9k{w!F< zc94!hs|+EP5IY;4^+`dKKt^#^C6^}l)9Mqeh`nN48%f7%FMN~-xQTeIc3Y3(v2Nyd zK5oM^dpNnvb)Xz_Fn#*+y@s~P2SIYm7X@Hn9# zlm`^6^;8MZZN&A>Dp-R=vY31~*fS$PP*Z-)ICQK?knI}YGnW}wH>Ryj2CeOWidhpO zJ_hznNmsMXvf8epzZX=RU=1>-{U{+llkBIpw~?Rn z9=?WLhUbs52d4=}VrHYbuHAPQtf3d+io*rxF%@dJ+0E9-4TOcfMPAU4CC605F08@2 zM+cCvDHk-8tw}3I=28i&6AaKO_fY&yx$F38JvB=$aUvXY>lC^Oi?vZP*_RsA?yw%L zF^}nBZQpRuU|+Ddf2g@Ct{qx|M}bWcBXjs;&;-YYEJ)F|MB|>#D zd%o;V3ru(`8kri=?MGOhvzaq#r=puq8{t&ipjxxKVk;-(s8&*+jMmu7qQDJq`?WdV zb_9Xn7Yx$7VmbWG(tOeej+t{z@3hmUyp@uqCnn9Xfw~HPjjj7N7WFEt_7HWiDJz^{ zUzQ+%5+MH|qp)-kt@hD^MGMKh1U6J=6YfcBA%u)VEpf7BF3*LwS(eMUF^z)&%STKl zl6I&QlMbCvg(2G=jZz*Oo;qeSotP=e+8d4CLDm#GUTr`5c6e>gH(f^dHRU43ugz)^ zI}?W_M5`ms#kjocQVr0<)V<`Ojwab$ktLSx;2bvM5(zw;tM@rkm1ynPwhA#0DFCN~ zbJ7tL?5H?<9!~0PGtNnCMSWmUdQPviF4`Q8k4f$gT90hq;|eq4y0|hOxnGnu>{hg) zz&$-hELpHFL87302gsapw1~QIO8ocbAs)o+#ZJZLa%a%n*c7v$Z`4Y``iKeJ+9*N> zjLeFqLEU-mY*JCXkqYj!Y5FRWz$*UVN?;6OJ)~v0^O4#2hHHgN) zcJXSubYajH@w6#dgsqRJQ#9tmdgjRX`5TW-wu;%-(Hv9=ZQ>PZ>sgj*SqaI~!3XP8 zbb+jH+@5uh?c1(=z_>xOJ}nnhl*p`c4FXr90x`4hAsqpfuc|KpfDF|r)sk^}(5>SV z60jc8doyeESW639YgZ;UG>G1?2EM8^djKx-EJX9-&UNY3_?xJ9+U%A^_aOSfWxhC?g}@kG#HD@7G{OeRyc zJ17wnUAxa>C+!68Y{J!Z77Rq=?(idjAUzXa2B_r*ui3wop!B)gGHKZwpnyo$4mSI& zh{_`zTnwN)M3-F{*AwRrY9TKy&-P#fl45VbwbXR;!8!|`l_Vg$I`*Koc$%QAR*2UG zHV;=syvQa$wxSKC1OFszaIU7^zq0hHf?J$XFE4oI6$Ra69u3 z&LZb751ZPfGZsh7SxTgxsZL7_Vx*jrEVuK;@QlUDat3<|QOoJI!U`)a+Zt=xY!T5E zB()MIa|*WBT5@d2(j3=xgh})SJBotX`qVD`c`xf0{&|QKmb$OSGE+52ABcWh^?g%^ zUacRnh18G((kES5PFZXR__%?Lz=LECG*{sQJGKbjN!vnuL2RZ{9H==#RSkQ!T47?P~n)eNd}EJ>Tyb?Tn2H#f`Z@ zZ>NtE%C?zjRCS>ps^cS>UzjdPvScf)E{aFVB5%_iHi*3@f)s!-$OeAB1fp^?Q|Be@&B&ZysfwL$LK{;) zEhDcXl9COt2KQb}a`bj2Gu$qq=^4qh*XVP6tV-p*j*;z`!A5*MyQQg;@`y|!SyX8= zsL*cF=Z2))m4q`CaZHQQ7)feyjzNUAGS7%CoY*k_NWqI$MSJ4(o$;4HHZ=~eyR(JR zafx?W2XN2Cf;s~!cwY0#y~zEU&)D<26YANr5@E_Qcx_2*R^)$e(pAk=?XL{GGj>Vpw`TsX12g_iG?0zen=5X z6dfX>DwB0m^=ruYMz~DF*s4IUy9w=12@}7q0i%s_d0O#Ot+}>zD4r%wge_I2drY|v z<5qH}d98-c>10UVGD5nQWYg}TljNQ#XE^B9YyXssSazzrKBAMy^!b&IIt{2UzmT9z zWLgH?liOvRr{ozuXbBH}qpwIe1w-S=hvc}7v^_3yN(VL0rOLtE?i&oHrhui3jUvJm zJ{_%3MGP#2c{`i1!Jd1nnbinsH5ZjK6O|Utyy`Od`~>aHR2H5xcTqUEf9Qg6>5|Tq z_1wjY0oN|Vr8r58GeTyFT)#HU-K-U+uQI#yTqVFZ9XDl=2+1*IgMlKYt3Mr`;b2?E zQ1o72k=mRX+*b_W;*>Uwt!yZ=HUZR!dW1aI;7k3pCC1k47iyB5Sx^W^yxoRaHRl6we9E(DfkC zBn(ZXybugIPhY89Znb4$%k3Ot4Ai!K%$5bZH=3MaxM%%9|6teP#$Y(& zM3Gs;?aCHu+UNX5SMf$!8zj*WN0)M4Oe<;Iqv@^K^WnvnCD!>xwvbVsd2Y0?$X~LD z&&QGLeXV{njP^(ef{3X8n0c74Q61AvrYC=IPx7lKh2gO%K>!%5+mlrVUQGW-;i21N zNLTGbFRerq*xeL&UK1{m?s=hZ7Dn8w(;^;L8g^aF)UI*O#+Xj0{GB=uVr!hW@|AQ( z8U;(2=!)FZ6T)JGT1B6uHS4qt(1REnZ^oWn9N|La(BiyoZ!*xA8Rl<*(w-QfD}K$%!YPe8SQtr<}@+rh@f$u_KpD9D z)b_o)_iBwp6Kb_pd`C$C&*!_XWgwe=epp)AVeULg4Ka+mjk!g?oU}*tnGWTw^2H>FTnk3f5vCK= zM$2m=DHhA|3@td?q@(CM)3P++vo#~=EDy8{i-+ZCD z+Pw;f8?h?~qq|(g$@LP}f6rXP8|G#g2NHrNZ9CzRgZA}PW}73wjHm!^o$BV`gPTmb z5HQ?e(V%Xa=(S5U(ORO`hM_#C8>lY!M-FY%>V|P$f{O!3ZL!wWrYE)k(i}v`w3VV~ z0-YGAm!~x^=Ec}hu??&)PzM|ATD9*% zxXNr5-6FrChSr#l;;C++JE7|GQ-7F7Z^lB^48gqz?oxeh5*5LDOo{Z6w$nD}WBXtC*gtZq zwk+o*hzoezLxn+UQUHe$yqL0|t@h&1*Nv<8XRW_X{r-gayo59Orl?Bp-DN~RnCZWv zb0|0;c}RO+?rScr&ZY)B=`J9S2 zX9Bc^PIyuVZI01IfCOCST2rxkrD%fdP;6qhd7-G27`3CYV{G^Art-YJHYqW;ly&t< zvn+=YnxizYHzz>!(VWeV6B)nZ8ZAh{#>Eqhi|#ipElZYB4Z%juvF_LFc{b92H*)fm z*(Q}Fw6T!SaAPDEYk3)|N3YT`U#}lDnZe&2D<0)OXnSQ7qh7~H1sA$277op$nG2JN zk!WNp<`46vSuOKg#f-(0KfKyXw3FHWxq0bWqo7-hV z4Nf1dm{dqc!B~5caDA{M(ly$#JQO<%`haG5&Q_|4t*n(seIhP}+?~w`m#=73)y#TC zCta%LIW^UZfT<;&xtIzr#P;3<@*TQp&@-|sL*1)jktZtkxyu*K%NCxoSTB~_W&6Jr zhDl8G4ZV*ga))`@;*)}zUQ6&n(iqvnowaOvvn0jl{4~(tA^nvUMIF*~Eenrdvh=i$ zC8u;8e?qwAv}Grqxa`E^k6XfjyRBclzNh0nbku}h#s+f9Zn}g(1$Jn1US>WxIx}2)`fe9=thW9^g)R$Mqo_r{nq`Ym=v+c>dRaGh`+XU9AiFU%H6L}X zEw-}U8nwFxyY|j!*^j)iD2=B?gF+(-QSG5yr@2@xQp92>eQrh%YA!?~)~PZs-3+X! zo#7B0tfb!Hf*`BEixnl4$*g>ZO-`oUB(p7YlByPJ77Y#UD5Ql{uiUrw202_%o0o+n z>E_Mc7w5>5{6zJrQ=Y6S(uqbSE@!4IdHxy6ST`glaO=XRy-z9}9{BgonE2G&;&?S7 z!o*CE#M|fi_c$@pp|%^9w8L5HPBM1q0TJJ^PRX|-|_+7gH;8(3bq@kA?pW~mo6flBu|BCrqwdtnepMGnW2~xoIwwB zHS!M=DD9{_Rp<}AEl-{8HaVdc5IO2>O4Sg>nB8F5PzT45hE-@1t&&bhWR^mMaHA)o zFm#j&`yx?=bKwTn2yKR>*9=rf*qiwhbCW!VwKNtB8>cy3l!-@?%Fr=2-}W`q$+o~X zECyr@lYgvHM6Yv`51ElI2>Gk?i8mBN&&u?JHNXt}pvcUG{(^l_xy?Svu8*jz>O>Je z>u`e#alg`Vnv(~wXUX5F0=ead`lEnZ+N=s{4`c<%Js3Mo4IIXxl||JX=94!y>TQPx z=+E`YYF;s~STk97lQHZa>t`#+-w4PHok{xR<8$Tc(RJmJYqmXvlII23?vQ zYz(V8nnpts%UGIOr8IPTA>o!AyiHpnW(Gw3Dt(Qj`<_fNT?}8v7}j_<4YWMWW{5sD zf_k}WD-^iPbflsiRCK0D>FAks`lQ;n&W^DV`WbIQv{|yPA06|#OXuD&6;|}dK62q@ zPlVo46Brkg*)5^Aurre_9|+JKt3I@ca=z4&vmMgWZvKo(QNrD9<|4Kb9NQ(R(m8Xn z!JC9^B&0(L&`NNK%GGEy1+jt0Pr?X78mVt`TcWndt;~vw-nhi&CUJvUO42G~YN(Gq~wdFSSUMpzc zmVHqk02K%JM%FUUwy4d-NTP|E7@>kh{M97rCaqEWEXy3~F|#tV89{T7_qR!BYty3< zT1scXWRj_6Tc$@bGAfrai4r%cWqq`@Ns{j;S~7AgCGUlCQqVOp(A7KKg;`QhV0KBmA1rGm&2%HFMog*~ zoZMHSUCqsVPeD#)7;B_7M4)0enqip4HcN&{s#i2mW}eh4iq1iD&u+RGQ^btz%c%M{ zwVewIcFc;Eire8}Dw51HOH$+5v{v9rxt5}HhE38?K}#VAMq$Dx#7}N+&GC)Tl-7rI zLQH(f$Z+6Jr7OZr6QzIyJ!hKalJzc<_7#i}%}i-Es3#)zcXs^B%zGqq=H;fpR&O&^ zs&bow?vhfm?onY-wb<{Xu&r8J*B7PrFSpXx0;1OGulkY1>V=%k=w(AbTLhut&6lKs zu)qYH2eVhs$5jNOyLHun7@3A#>RUG_v<#TYDe7e%&&%l7Oqu#zv3Y}d!LKd(>X*)A zE#X<}R0!fz5H5VNZfH*SpD@&1;~{fSu&1`YN^2tGMiEIWJ7(!b8uS;f95QOc6H_PZ zx@Fr$iQP0oomZu&;4IhKHlct(ev(kijEZ%OZ?GAHk&|H~FVeahaz+3|(;+E*sea5| zba$Bkgt$yP?KV$sZP^{05tu9;IN@f4&*G*$>!&F#y9su+1nGQAw#~K{Gp&U*Fd`oH zlnZ%1t_WM{E2wD`(+I8HV}IfU&h}r)T8R=s7CtHj?ZjoAmgIsuMHW)LM3|AN#DOpq zDRY|EVRWx$vfs&}rSqb$Q#v=9w_R$}G>Uydte&R9$+DMnw+11BF@iB>J~y&SL5++u zCX*!HN~0xmhFd-=QQS?Xoipl#Rvv92Ngx%dlXwM(8yu4FTbDc864fx*p)xfnoUPP( zNv1m`h{SG?nh47w5npOu!Z6!k93kg5GG-`Ww3HEH1E~q*MZuGPm~VKm&GsSt_uT;jP-EHlbcd$RvDutx&0J5ZVmt{9OaD!PTO{v zMCWFXvNX*$e3}Ahf{@J)!S7b6Z%s)}t17zJtl9glpv$B;L{W8q-M$JjU9w?=B@pws z))(}z^kaH3tzrgMVavpdJkK_+s?0F1Vg^EP(M=$oV)bxvCDW=|236QqN!C?8^<*-s zqL;}oD}R(Zm2(6evI0U7uh}X33(9_yDRCo7gMO&M>dIhfSys8pw`oJQV7=K@vEglc zd2KBtOlPopc#Nx%GSIIy@93!J+f1r_Ku*38?k}ZXS$WLPzuA0D6im+CQAWz7Mx}aD zk5j)Nm1&K8WNgwm1>8PQt$yyI}Jx)_=n^#j<%R^B+3@M~>?Sf6$Tq|z5 zi~Eo4aCMEw?&C;I*rxRrjf!{}n2LuWP7|nyS>{)${&YdR#y}p{pFrUzn=`;7*Zp*4 zx~rSyY_tA97-1#)TM`nJ5B6;wDBu&K?s`_ zCWX~>n7oPIohQ{|M6nuGd-^lxSe(1gG{<5qhAESEXg}mUX4_-AInmo=05AjvOov1nIubIC(oTf-%$bnjf7{*i`QAwYsBByK~Nj z*iKo$&gCjHqv^65ap$OMvc);#Uv09L-~Wg-?%dGS)*Nk5rNpu%`C)@S(ZbGRtAEDI zjrmsK%(l$*QZ=NJ%_zyuwpea$kg24ccRPJeTr-jEf1Hvv!v}}OX{ly3EpxF1N(sSqPSe}FPN*e}LCc|3AsQXs@==*? zakZ;WT2R|z@f9r$>?&Z$u^=iPBnm>l+I}SV$N*)n-8WJC8V_0u(2F=5FKu;X@|92% zQz55)vh~slD7t8-LaSeUAg`1nEdKQMH+5n6#j>zEK~+Nf%`G0ANAn;HyhB;Q!nu*- zr`*9@>}|igDwPITS(+lQRB|?mIaeZbeeVsxoU$b)4)aKz`Il8FyAiJ6gyS*|!{3a+ z*zw8wD-AKqPg2RP?31Zjv;-U?w@krU-BFWi=Yb7Ck+R9zUb#io#?IW!yEU8$Zlj~jM|OvR^)uHaj^tLIlK5CWZEDc|PGc6Uyv>_Q zPOr?bIbI^WS>!xdMTnoo&&;545^RuKTRKLO&WGe>UR(fTC(-V0cgTk@)uJy;+SjF{ zmc-Bb3`={czm$+mV>%M)8sP#cJ57{{&1sNnsh}-Mb1$LTxC4nv8B&TJx9Hlgd|6Oh zX>TtOSwR8?_bOy`&60=d;Mt}G`qN#kNeg>vXG2(YqnNYET@q{v({#MI6N#xiOf4!)X{ zA(|EY> zB5{cAcU-V@CG;++ZIBIebG2MRLl$!aszPkJj~m}yLiUDh%sx6dByi9P#b$g-pNApSGH%HN3ds$*7bin?_pjo6kM4inZA4n)|Xg z`hI!^Y617ip?ku;08}MZCZ1dpkS1sw%G-hF#fNRZm825V@pb&!tl9E>7D@B5ItbhB z-ki8E;nmy0dE2)!)B3n3s6{9j_Fkk z*b>f260aKLQovcubW8F@i$MlR$fZ2)?8r+X+|?3v-20fziN6q4ZDVgn%jqKt0&(t z+g>(%v-49U(g>0tYQtO4VXz+7r0_-A+kUt!hrHN_DX@&1rh#`mKb2E^5-X>8xIl%r45G7Qn#!NX`U^nqRoqDnGUqo}5jJxSAZ_x9c$)@#PP>usgl9C~ z42QpIru`XaLMVEqLgoq;>K7;ax;Yc!!YSgnZMNq`8b1NjQ_*j;G%(KFjrC?Y=-6d% z&d1I8zs7RUgl054G?D%oA05~0MKs&%2AD~GdK;i-v|gl{%y%R;tVuXsrc-06d3iFE zEgygJ!kO`DWp$4zNo?VgfP*GO#hJOk%Dnv^QjxdrQ)i{=ZMJI{DUmBsvgViG{z^MO zClxa`Wz9F^9t-Q#td~vI4u7(R56F?kIm*#y%!hrKT^9%jnNu-F@=hk++=9>Qu_1ME z(|Rwzuf$fN$V4Q0Jw?x_VQl~>aR80mBaSihPg3dLL0avR8H^Q%{lb0uE;Vya<$g! znlZ%tI961~nhGb^rh)0ySg_qqoXi^rqRM1y zuo-6?MuGVm8FJr&xZl}PV*Zx5)bw^bmEuGR#yMHwA7~DGmo7!I z_ssN2hZ|~H0czFTrWIgcPrn8?mL>En{cRRd%1!2H7A zX#*BX?wO*lmXOXKqj$d3cr)W`gP^VApEdlW#kt???%%pU`hZ5kTL9{^GxlEBjb)*CzG_1^15NF3W6cW91r!F24uZ@YaO*5I z$Fj{C%~T~!JNbw4>2?X6-viXrNUh=&{^UHjbRNL?V*v$sX zXUyro>Sa2p+R@3aO?&zaOJiET)i79-FxnSjzbvak?P+8c(X=0&X+DUc$krysI53wGz1At34NKhq0N5qTnyuQ zW4CgcpPO0$r`qOdxx)IDf7ybt7yY#<|IjZ}p>(?iBrqbyDY#I^HG#+eIQP>q_(qxU*#KxT~XEmt99cODu!?mlv zH2d*q3Sv~g62n@~e*Rt|svrMSriAD-WfCZ|u!bu+QDEQ81=IDq7O=Gj!(QeU(Yksj zeNEf&wz<>`P3&O3RvEd7eV?uhla%fq)2m%8_&3<~cMf%S<>rO_-RG8Zp;;Gl`GuSH z){nV3PVsdabSncxrF zN$N7p0BWzMKI>`VyJK4@AYS{-9>VpSc? z*n;J%9IcCq-IeeQAfgcU!*bXbKAcPDA_disfkU9W3yjQ%oPxz*E9!7AYDu>UPaxqj z`P=QHa-y$USt*<*(@IKPPox}W)}#MNgF|PX^Op<>|GH3SU?`KqZmm;Pp&KDv%&IW> EzYv2-NdN!< literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ja.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ja.mo new file mode 100644 index 0000000000000000000000000000000000000000..87a2c7e9b5a866a3c48a4789a41a53fdabf0c81c GIT binary patch literal 272 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-nl_NL.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-nl_NL.mo new file mode 100644 index 0000000000000000000000000000000000000000..bf0ac013bb39482c1987ae6f30bca006b0feb91d GIT binary patch literal 274 zcmYLDu}%U(6vV`8OKXc~Vy6!dZOC4(QXnJ}FABtVJ)Xy!E|<^vLSH`m!1(AAS-8m*Wo1M4@CqcH+ z0=I`4i@O|-wqUp_V3?aXoD!3`6vV=`38@r{ad6+y^v#pwdgp3=!i^~)ebQfrFRYvkT1(A9UgN|8ULXjotVt73X=;Mz88U{ z<<_Z^POaN`0jAocm;D3|qwE-v5_kl6z(7C;`4TvTTM03=+tA=h!l1^+W-tOC!*193 zmMb0%#8E=t=u8{!RIpCKth6C@+WTI=%kaDhW%8}c@wBQWsk5It3v|9Z{@^)V K>x}}mNb4U?KwUZj literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-pt_BR.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-pt_BR.mo new file mode 100644 index 0000000000000000000000000000000000000000..8900f71b84a9c751a2f424ce110b34b02e95e0c6 GIT binary patch literal 40582 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 literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-pt_PT.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-pt_PT.mo new file mode 100644 index 0000000000000000000000000000000000000000..acd541017fa758789086f69d405453625cdcab93 GIT binary patch literal 274 zcmYLDK~4fe5X8jO96ftz6K~qE=!MK?PYQ%Y;zogZ9hY_)v-E6c8lw;Kd!BpOtC zN>`;So%*{t|LrNxl$Xlu&M0n==Wzd3W9Q3fe4#I&d|-TZLKbc^g_+OhV_Z?}0t>@_ zW*!0yvEbsT)t1n=4BEzd&Y{}4m`IA{VuGVnFFH;i6miT|SbMH5jNZMNve`w~;3ULt zvcT=Zrs6J#qbwM%3K-_*4X4BuorGv%+5{;hr8KzjXS(LealLc3E@|~;44+g9&eo^N MuhoXO4m2{oJuRP3?f?J) literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ru_RU.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-ru_RU.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb084db6df9b4e1e647880a137a421e24a011759 GIT binary patch literal 111808 zcmdqK2Y6h?+4sGo+w^8S92;z8kYvjS+qlcJTxH2fvW@9S+Lg3;wJWw*mJ`5q2)%{g zAwYn{bO(Y7fdC0fkP}iUfnWk5gg{7x1QNdAf9^S}mF+xFp7(pd?|QG73-9mDoH3vHKZQzXs|NGm z3Ce#MRDMRoz2RiZiCyvv}X@gc~-&6@G^KU{4u-+b~eUhEwF51EVc_=40nS` zsCZ6=JHd0I@_&uz-B9^m16AH1K!yJaR6MW2!{LXp8Xk0HEVd_H40S&PcZO#`J$EG> z0&j#W*TZlJ_!3lk-+)TzeYhR`lXrgs6>jUMSZs4R1WKNJL-`Mdd%)3fXE+BczN4Y! z*$$_`JXH7xq2%#2JQoh35}$@QL8X5pHzkKosB~69J$D*ZIWG3@tNs12LDkFsa96kn z?gD=Zm7h1^PVi&T%@$d{c7@94P$)g9gi2>TR6b@w<-ftZkA;da4ke%EQ2Kc$RJik@ z;+$aMp~`(FRQh*9$@PBkeiEv@--C+(WvK9Pdj1hg-epTHKZBvlI|Oc1MjMBUclc5E zTqTqorb7AGL)Bl4_df=9;7&rtvkofUFQD@ECRF&3pvv_(sB#WkYWIggg&zUsUj-Fz z5)5Dir0a=gpvsZ=JR2(fSE1x{JCuAMfvT^kJzs=FaQ_Ud|M&o^{5u_Oa@q^3eC1H_ zkAuqZY=6H2N{+`tL=)?T6e0E+9bCaj1HH-t*^B@xKF=&p$)8zb%fn^3H(DXFXIpOQ4=V(YrIywL7SEPJ@!u zB~Z^@3#GqzKs~nx?hc=ad%<79J>e%%^|8}&vDoQwcbI`!L&dZ8@fQCsQ2H)08$8%8WzUuiqsQi8kmCm3Ot-g1L%GZ8SayDE9s+V6v^*bNJz2WAeJ-0uU zo>W2QXEIbd=6W6nm5-C5!u3Mc=ebb%xe!X;w|m|Pm9IxUUx0eKum5<*+#Z#8B`-7p<+X<>1Bj6UW%KMLnD$iUfy;=mNA18Qb z;1t}a!7bsFQ2BWV>bajlJ@Po7(}TYN*H@;?F|2#n*dYR>8SEzgshl63I_n!c_#XS$I zJc~WspyKQH?o*+jyTJ3SPo0cfeQCeI0$arWqPnX zRJh?VfD@qNUkX)!Ayj^HaC^8C>iP4a!d(uP|LdUY;ZA@5>rnAN43+=qp~Ce+#rGQA z9$dd9K=ohaq0(Idw}Xq}PO#1U=b`d_ ziuXSkD*kJr z;I3KblJIEwRd^3%2#-zAu||crKM}|B`qA0!q$rLCN_8@BcA81NUeC{;4ZXF6Tql^R-a%-wgHqYJdL;sQP%(yMF?e zpY>3B@_X<8r+07lB};ctsCf5-iuXXMcn^ch_cZUG3sv40sCw%3_gDD)XF!$jBB*$- z^7p?6Re!6Y^7kZE{Lezg^Aa2e-}L^QecAH6J(TiLPDHBjZ71C`#9Q1P~U zc0t9z0xDnUL8WskRJ;#C#rrf=`F{-c{L4`CdK0R=A4BQ&mZ#YLouQuF7pfhN^!}5f z^k6nr_{C7^wtAif^;{OJzEAW1XF=ujLa66%fXdI^@F4gN@BS%N{I5WTdk^jh{{mH> zT~0MQ1W@r+LzSZjDtt3keoufdAJF9ks-Dk+D(}Tm>E8yG|GS~mT@4lfDYzMY7AoH7 zp`QP#zyB+!@av)K$zn!6{JTF7><)DxN!_@^vqi zoYp|)|5>Q`egY-ux1qwl2bHhCLWSS*Oy5qR^0O~gI#p2VPk@qV4SWGEffvBwEX&t@ zQ1Ltk74M5s@w^82hkt;|=XPgX`ny8K8$jvVNT}y$K&9K@c@$K*R;Y3;gVOIWLp^tv zzkefCy?zaD2_J`w?>kWW_#xDDZ$RnCyHN7^3`(wp&awFSg^H&V>V6GWJdIFtJI4EW zLh1K%D1EsUD&Cu+!awZ!9oUHbhtSFOT#Kg)s+^Ocp0D$4@oa;NCkwZPr+W8U{{E#< za=95w-giUgcMaSMJ_ps${K&h150(C(ynBoDtlZl|J-@$a6_lK(LglLwN0!mK5gUa_Gy<18xJ>MECz5Sr- zp&BawDNyw>4=VnJaBCRCgJBXX-pk;&@EWM+?(pshpq_gYDqlbLeBJYXsB}Mtig&vU z?fKoH>R~92?12A-N-uGhl_v|8zm;%%c)It$1S;Is zQ0d*_@2~Ox&q1}rpTgbY``%xRM1|iTsysuX>Te9(7fynT_b90PO2D0AxA#8-O0Ji9 z|C_!415o|rS}1w{6e|8-LFwa%-hZ2`E#6(A(%la#KO>;ZIT5N~tAQ%-2~gp>JeNb| z?=+}#T?mz*+n~~a5bF8oJ>P*!fAee14!$2$zfub|KR6x^g)8A=cmq^=e};lIuebR3feJqqDnAu)Z#WIAd`H9C@Bugq{v9fwkvG_L z6QSa-gOWodRKAb$JRYi_jeB>_yL+MP?>wmIE`idUYoN;eb*OSa4Hf@7sPL~r)$@8N zIsMV|bEx{<=0+>`esEvhhd@0)8>$|TgnPlIQ02}+mHSkv@Rxb_H=s)&N{;KG^7jT* ze1C*`?jPR0{Y_SmJ)qJF;3`-SPlESAR4caI&Fo>q`(QIX=oXXf3MhHs4H0qd3mC%d zZ^bqP{|QfkQ*UF8fj7Y^@FVymSa~~h4)_^70$z9rGKJ5`!eh994;%-#yxaEQC&O;sS$H3O8!G-w@3DFQ58yD|pTP{=|Ld0Ti(x13KYA{u zvsV1yh0@dgiA?o49#+CSI11+Aq40LN2Yd-C{BNP;61$(V9NYkF;gE0G`s!$yzQ1PvVdhQI*%U~<+TcG5z`NJlsouTBmFI4_2 zy#F|;a5YfzHA0nt2^fRE4}rQr7D|4#aCbNdD*W+K@;(VF{xhNSaXs7(eiJG`&wBnGo{9TCsB)wpHRhq7 z`!ZC%E`__m8=>T|8Y=wb@Id%osDA5RsPb(7nDw7KK$UwqJQ5xTmCtkFKj7tXI=pC& z#rtEZ{QnZ}4?l*AZ>MjWp6>%C_o3cB3M#(Cq4cQ6->-uzXER&|6HxhG2X}|BK>crbhwO1_&tVe_j!-~!y^q2zWpRDQ03 zd&93omFs&@>Gi?m=?~w8f5JWWN$dZr*IIm?Q0blr_krJplEaHo@_GeUz&}BybHGz3 z|7u8=9h(Ci;rmei8FTLr$KXE<&V!3!CF$M*N5LOIi)`@!*Z0_4g;zg^?BQEb>Fxi# z&6~$V`G;^Eya`T&KZBCX?k||Us-f!VNO%hDfv3X1!Xse*``#V~%W?k{s$M>a)8QUJ zuyN`rcmVDzpz8M_sQP*V?gf7V2g8rye(-a+72Nwp)90a3@;elchclqkSqW87S3$*d z7yKH08XgEce@I^lFN8J7XUvb#Ihg;krN3F9#j`V%yer^Pcm!1bj)9W*Nl@+hMyUKh z00a0Otb@OWV`1ew)1MFy!+kMy;o;#54^_XPL#4ChPb{5kD7jCED(A6K<;g*n^CBqu z+zs{ILok3pgS)`L!GqzTpZfUVXx!7G*W`hRWX>sQkU`@Bbc3KX(6_aS~L1L#X=xGL#%|fXes1Q2G54RK9)<_52n;w{#DI zBXCdh?p7FVh8(>6%3oSMcX~b#760#`>7^=J{Ko-cL%J37s37Ex1q}O8axi}`JUx#Ih=<3 zba)_q8Y+M9K;>`8-&sA3f(PS10V=+8q0;#pRDJ#sD&N0>lI!m8TfL2hLvS}i)mIW8 z0lx$l&m*uNz6_P$p})6$EQG^w=iw}PHJk(AfYOtLKd^Ri0z4k~T`+)K{lT6;7>>X_ zA1dA~lzeZ6($@#!Hn0y)fUiK+!!93Md4|Gj+($sQ$7N9RzZI&SZ$mx5+eg-}_k)t( zcqq9Y110Y-`TJ|&j<|mUC&Bel^}7EbO|PfJQMiwTad;6N4gUnE!UI3Hcw3?5cLp2` zzYQhF=RMzr3cux_Y<)Nrs(jbOnPtcsF2KFlU+5!X2UPi9hN|Def39|M3T6i+7gpa_H@NKB_ZU2eIKNTw81yFK1 z9;*GUg3^NS+d?hkJ#0KLZcJ{dYJW9`uEUPrws! zUkPWzzd)7ah*+7^pDe7weIKlVA417@pRzJHKD9#KzY`t=e+!k)cAJ&C`NnuC`P4&| zBktX&!fCj_3ajDI;dr>s=4Ec)KOL%`XTl+H5j+5WC4xWI@&vS4)>g5eM75DGytPg{SY*ps;;shx9W}));RnHfo>h&L524Dj z!(j3c_kt?-2&nYuzyO{KCBK`Y!mWmq!;?_$Bk(r(7Q7vvwL_WfSIc)SbL*xFQ2p+Ca60@R zRQum*C)0;>5K z`B3sa6RID*3#y)8f|Ap({r!*NA-H$lt<245rb4-ofvWFwpu*n`CAY_*+R3wUNBA04 zyuXLa$LH_|aNpg_VlTqq!iV8QL&{<|z|K9&VyobmdzQscqFtN=74GA`%G~_n$-T>5 zzw;@qz<-Z@Odd1g-ni3nXLvpg;Pvo9_-&~A$?R+Ovl2=Vu7PSt_d>~W9lQqav0s_l zBVar3$D#Ck=>BDHzPAJ_{R^P#YYmjXya!dEWe1eGdEiv2cH05f?_3L|cMn17|F@y! z^Gm3C$nT)!`A=8{w+l>elc3~#43s{1diN<%`t}v?z8fl?N4)zbI2QNoQ1gqOhL*W; zY&=wXI-#Dw2`V4ohN`C@LCNP2Q1XclGx?2xs`qNB_?n@fTM5;lTmTorTVVh{fy(!u z2U@(tp~_tc^;`%gk1SOC`Vv&Wu7K0v_o1F2bdWta1WHb0JZE|TqoL||IUEB|hkEW| zsC+#QCD&g->HWKKe>ix!JvS0c4u?VIs|iYv+o1ZHl~Ci#oO<^Ls= zTw{mY{q3RTH45tfbnou;_j{r0_j;)3?tqg215o<)GpPK%2bIp&6&CNlP~oOR#or30 zZ#k%PTnAOod!Y2`O{n~S=I`%UY2!%+l-!Pli{UA75_}oz`JJll`B|Q=Q29I+s{Sv4 zO8+*f{5%Ae&tE|0{{yJ@@dZ@AhL5uO%3)CTorY?ES3`w=5vqRQfXY|dXzNERq1;D9 zjf3Yv^|SXv$@S+@`S=%{3wNxx{%|SW8uyh@^0@)3{XPTLp5BJa*Jn_28a&409Rbx| zj)c;mW4-%UsORs4D(4TO<|S`IwU1z|^-EKs((Cf>E1}|l21?)GgwoqVhgmw~p~^o4 zs+^0w|LIWqyAZ1Wu7}c>C*fA`IjDO0k>_uq^8Fc9dRrZC@)-sX!#xj5PNzYY<5GAE zTn*2GRZN19fsa77x1GmZeIE>^ABVvc;RUb)egM_Z_L^YjT@01KQ=r=WIZ*xoEpQC% zgA?KAM_Bl&Q2l=bYJ9jF9syTFmFs;dIh9ScdKd+(aOa`M>)WBizY7(AFv;|z8A|U~ zK&5vRRDNH9(%-En+x=ak^xz23BfWnTD&Lnt)$3DGa{CpOo_`1>=Ut{)Ke8WGyc417 zX*QHzCZY88GN||-g^K50fBzFGeLrBTm2(DEe!8LZe;!o({{~cj{0ORleH%*7v1!(h z20^7e21<`wyt@O=#(h2<1lK{8=QXHu{2kVo(Qi&Ki){wO8qZKd%{xwkfe-bL**P!AX zGTY=@16BT$pz?7c{06)c*24NZrdO9jH!eZR=hsm6J#wz;_fn|(y8udWZiQ-}_d%8W z1*m%e6I6Z&&$E1vgL>|GD0$@J_V6L7{66jPf9~D8%s06%fXdG*I0@bkUBBZwsNS9* z3w1vYr@^no+u{3Aa=dtf#q%sw`}r+wgu6AET;gy6?sH%bd>JaALmJJ05uAeic321B zf@<#vFEsfqg_7g>Q0e~&PKVncY5hY3JQjBW&VWCGN@w>bE6)eYN&SK2=|5ssQ500Czdg8!5r?-k1mV71iOzxZun0>*7CRFIFsWy zq2l|k=a$FYdgVYk3;)BR+Siw%;{P60z4Srp(HBtdqxJ-AH%CH^4;^qGycH_{A3)XD zXHfmn!DLe7_0dq}I34P_yP(p23rauBLu&_}FoF9jD7k;;xnFBp3>A(|gQ#lk(zY_0 z^keJew%&XyQ5Jg&_YUnQhaW@bdI`Sd~c!@HeidU`OFJ{<>D?o*)3b32?4zXuinR?AGE#zN^! z2P}uDLA9T|p`QO1RDbd&90d1CS-9a)=U;{Dum1(5XS-!>y>}o~KiLaa&gbFF@E!Oa z_;}9r`b&9hr_Vy=zpP;TKM6`d7r+4Kq4eY`C^_B+)efG8YVUuB*T6%Tm&GoI&p^q! zsmJ8=P0!b%$~kC-m1`7Kea?o`yQ84=CIeOehoI_lt-t>&R5?F}Du1lk#4g6QSz+La6?IEmZpN!6|TyFI#=hfGWpPa7Wky{{VZS>Md~!<4PIjhu^^c_NisD zufWSsD|6pL*l$&tJD0Q^4kO$j;qSP=>ltP4T>L+w`n~hdEOYM#Ej_Euo#T8R-az>2 zXOlks)j4JE`yn5kTNe9(@HOW#&&R*&d`su>uP_hZ41I&D=bv6^?RfA-WwA$aPlxKS z{svp%l#9z^@50OBP~z#m#L~U~QqzYopu!(}S(!UubvyhP?rE2o#n!{W!=J&|uPAf- zV-H?way{}Y)6-MnbnZV6Yv5;4dN$>&HvU}))n9!NjwAh#p~_i)jjcDvUu*r-TDXRA zJ6~t%{{XJWeb)8XZyt`2RF1Qt^mW;dR$rGvwWnL4#+|ir6nq7ikpEg64s}rg}IRh#mS3t%02vmHpL#6k7SO*7v&Dv?BXD?K{za47a zUk?|%BXno_`$X;j2*jYJAxAyah@wM?vY$B~baf3C0Gs zbS8q1M5ZGfc6TP*f-sv1gPzVrHW7qDE|FcHY)b^0Y>;Vh$1ffv^NFq?nG3qJndQlN zB3>0V7rGPKTq2&xMd53RqbjId5q5Q_@LkkgQP&*IYKjFl`FtWB57R`sAQMl-f|-e2 zTQ=F9PiE4wU~X5~kr-8<>Bz)_`RPm#VX}#;SWqA4llg*zH-ugMF3e`)g|@tf?{_Y0 zs*eTD`7mF|#R8Qoomi0%a`{Ae(32^o;z4U7$Y+8!GMA@t={VWtep_dvD-62A?6N|4 zE@-Eyy_rHbNT%aS3RnnJK{wgTk&l*6%H5Mpr4&=x-JMFdg{`TCdnUv;hir%;o9PPj zF8O>I-G$avGS}%{xo~-Oh1BDP6s18VE@ZCI+Lc5-?73nb<-@CUK@;*x^o)#^IC8i~ z`x{(WRt623bRwv%-n3M^oKh$5)T9GnYiEol_F zcal?>gtd+e7XsCdvf%?SNiIuvC*sM_)nG+1E1O8PhPi}yT7yisB~i~}MU><$9+X6x z$##V4O#+lFo&xFxwk+CBj@Gn?T+3RlzKt@v;gQG&Z!%sR)+V)ihBL zZEcC}e6WZd3#lGF^U3AZMe!oK9jl4QgW3Ykuq&905K7&y z6Vm;eiT1FNiuxM)G$eXl$R^a+T{K${QcH(MJkBd0W;^IxQW+I8lcv{j9co@3h!39Y zbbS)t2n~EHQE2{3D=N)(+reERh31xe$@>%4KvrTx-lqb6R*am5})PjhT|k` z7m*}pB@?N5PTq-ZJ}KeWX43T9`Je`Oo66kY(HW)#L()5wxqL|3Q>|!P7%?5xCunV{ zjzrdZI;Lr1=`f3TO8$Mj@NSt_;OV2Ll>GIXcN8 z#E{vwAko!Ix6qmF9;rUFhat2Rou-}_;!S%a=zwQi6RAwPL;VQ%G^VK#JLnMzf*(;)@vf=aK1a)s{hOg8VjwoWvf zQdKhEgfz!^&=#grNMmGGFvo5&bo*OO9`sxyKCx0wnK6XEzD*rxrWj`dE!4o9??lI4 z)PY5<9>SF%p2=oaP4R3d8IJ~9+#Q*eyoGcyzb8zubj|`}xGs`ibf3+gi4;9M&RmZJ z%@8rQDL|ecJ#?ewj4<0;h~sC&KGLZ7jXUykl66y<0X}ZZ;-7LsT6()taZ`00PH{2k zYG$sb_DIh`x@nT~SM+0v9KBPP;;I=LX-23YF5f7PLHX=NI*|=iBcnTkPp{CbNBK<$ zvr-xACstF4Co?lL8CodKjAs;ibVc;kvYM%U+?{+U^*k!5A%AVXHWjNW4D{3#%=^ts zW^?%gp}cJDk@|3hyCx^QX<4>wA7!R1qvjf`F&#~&7)T=rQ?UAwhVOd&m5FR?m^?|H zQSmYvEC|zKJ~l(mzcCx9nrDO^9cuV3zTxB18Fqy^V-hL(^5dTkk(OuD_g*tdFcmV5 z=;TgxnG9OOWg#A9fuXx34tZo0Iipgu8|8GJY>UlEpymu&sC&o|&}JRpfGHlMWiYR~ zv7xelrkWQ+b=BZO{=XWVVf<&0RWQq4HZVQLU1GPn5aUlrf6R-~2hHOKPB*O;YRqoV zXX#eSI%A~9{}$%6>dIO&nUp$&CUt~Oi5!Dx&fR3vOz!E*;&Fwez>20gd6|(w+nBj~ zN_tI99uxBDkZV?!0n1#4E-|^%-2}zDqHpcd3dTjodu1BGaM3Bcmrb+ z(jwDJqdV+XzvUbfgzo`y=iBIJV>42jj$mQNNi#MhlVTM@>7$DbUTO8J6#;`?KBz-s zm}3-JF0i0!4r%4CN$V%@P0=+i=TW-cavpVYMnTqIr4DPf&WFht>SlN6HqU6VD<2>8 z4(l7|B(f_L9V`dwv}R=FU0LF#`GcEFXsNV-Wfo!bIr?G+wu^MIkWm|FVL7v=xjB04 zcx;B6oz_TQngg~`*V%AoGUeg)BN57(2;*%?x3%Olsyw=O)^xtcspJ9+D7qzyN>!|x z78CRCjOGH2c{BxA^IAo9Ch11$rB&UuO?8p2?R64ZK2B8zt> z+grT7Fhdz|v1DW5WnAI9kWSDosr6_AjhcBM>%eCeQXLGMh}U0eR<;~hmI+T7%nBJ> za1d=WVt;EZOZI22gS=YpxMVwlCbRgiNivMS4g>xwm9RVG|tmq@!Q zpc=xGPPK&kur-ki+Oe9@+vk+7%XPPl-E}+eIiEE>$1IrVQtmlyEE*S>rqy;PF~Zc+ zJ=-M<@?2oLq+8}It#{KMyyzkHt1fhDfgZKCGn3KyY3nUFNvQ42vhrZuj(UyS6hUI{ zmm15oWpY9J`~-tVx?^O2O=eOVR_jFXFQPOv%%ppxJYjG_q_%={4WQP1^1Xrj=us>L zbAi|IfT+5dRgrrer<{`!AG*3@dY3PB<4m_Rr(}d0j>$!)sn%Y{D#Z}p>+f(BLF8Lf z8zsJG%Q2C#CJC%s)~~u&1|+|<%eeWys(_^jdaYkGJj_I&+OiBFZ48K}o>sxgP@yp2 zC5k1owSbn&-d>(CA8{TQfKRJfZ#q zyIj9l(LCq9G^|Uz-7^THn33LY&FN}aCYTJ)&oIc41LugeEjF`pMr@|!@0%Uh8V2WQ zG2(Fp0qMt0i0H9rVvlTWr`2Is=44dIaLragMr8mv7ZdE7cyAib+ z=3|9`QOUI>jJ0vD$~wO*tcbKI`6(9 zBpI9OFN%HkObVqAKNem1VWHpIueDA)W$up6%&H=-Y}99MiXlv+YGW1wGpnMTnn~+& z)9gCUs$+F3Aq_U!+N$BsPfP0B3L$okn5N|JXCrMhU*GQQuxj~8qbsjV#XFjnpfsiK zR#w0rSdW+hrxR@1IQzS64#i0@Yq!R>wnDdyyed}L(aU#f-LFPBn}60}HVIS9Ex(w6 zoVhtx$GpoK2l}s^RRentKHaH|TljbbLaC1%%Ij?2Q9AZ{FF%efbVewYF=wM)9z)8s zm=DvK?!THCMAyyCLuB!%!^Ln!A2cJgBD#k?RBKk>56Cd8kXi$13EPV4qYf##9;lAt z3d=Q}21~9)7E=PN1*A*8yKNh$M6T z(q_XMjI*wjm8~K;wA$Iy6n;^&n`PN_wz#i0ksy^5MvtyM{P4potH)H2VJFTC>GR@- zNEfFw4O1NQPN$G|%g?%#3n42DZ6M4pFv$vIbu2X)U?Qd&&X%>~WDO>}lP80Tn_Sm1 z3CwiM-(RGI8Oba{EASa;>(tzDiABoXjA(A`_O58WF=uJNXFmOvpjC(8^RrvBz&Sfm zztb(_+%Rl@C6}%{2?p4YER5Y)$n+gGb%~gdvw$%9$#i*d`fp8r=x;2T7U_u3%`eQS zDbbBfYR3kW@{=1BbuDoX~$jXVN3cjph^ z)Yk_sa~IUbW?_nMRbMtMOfA!LJ(|J=Ppjn0x~*+1v61 zp=%r7=%m>|iA79?pAB|F+Y2ccUG$cb)u2a#l6jk6YZ%dPS+pxGYlAG)+GMp3LBm*k zAxk4>i)R*6(L6_evR$k3$?Pl5!$)$2D=56{cKR=a5rLZ(n~#^23+QLwcEiuROC1Q< zh4VXP=4fFL&ih-mnM|BTZ=QjfLEd!_vz(V(=yOTO5p(Mr@~P=zr}_+8aJ*|_Ce`aJ z$Zj_y8VcQS!H^!$%3@LM1%89PIKQfJYu`4iGE8BDORQk5V2PAb6#c81;tJF)k6VjI z88dwiTyr{^vfv>tIt{lEIGdSJIyPI|w4n!MF9wrbQckNEtmm3fcq2N@WHCNQ#B#!@ zjZ5=5vt`+JFMfWKMO|v^aq86AZ02Y@s$Y$qwan9Fvy-hD3m6glul$fYTbog|Q?^%_ zMR59IXw2KKG*DAUwiDSGC6ylLu&f*@odq})G7`CNU6Uqh(`Gn@4p%d|Q4PHid;SM(wsoHWT5=mp%^>DsOh z{?jnr%NoLTL*0c!YNXTvs=2r9BQ7+vntX1Q?0kspe}9xgj18^0`;k0!kz$vshW>Cy zA}p{)5&6*OxnzxI{hk}p7qrdPG$QiLxezMK#=B$OlF64cv6;pUh~)^|a$VS!lb9D+ zsr2Tm+{7UmR$V>JLPvqMuTb17#A@hH^d!~WA`+r?otf*{=nvx=cWh=Ne~biCmY5tg zfH*@Acif(3>3Vomer%9oYuH3!x9p!ok3p1)pnNgar!v*Dqhp=^$k-eVG498SlKCHd zQ0z8nY}GB-h3Y~T>!VA@nPkhf*~QQn63lrZQ_L7FJ<}ciS49n!O(1CYyQpqbN1&d{ zJlS>_I4I63q@5uZ#n%2=K4u=hvAGQ`bxjSixsA=m)t57t&&ABBF5MFw%ls_Xi!jFe ziS~y*JYIp~>wu4|RaI1Jw?=h1CHBLW4LYcnQ|D-?Vi?yJOV$4;kp}-R*63`Ij)=L5 zwakY!JeObZRhn(@_1|T7lhO9K{boxmie+H#=0?V3q`2XV!OawdqKR7b6()1qo-bKT zI1zd`cS^dBpp%130h)z|W^LanUVg|(_Kb8^!r8I4f~Het@L&qU1SJ`r(_+3J8C01k zm?h4cAvoXTpYXjGUE}&y*Z8NYY@aumEwyE~Oz8dDC*RZzlF`IX|U*@ZBoHIX}WLk*O zt#0kUj9zm&KatP0E%O(Q=#6RYBy-a?ja3%d5^%#Mb0!P~h?fbrDUs`-R9x&53^pA} zZ6BGFqcc6}{^gWq#TgaYWn~WOwovR>n~2>B=jCUR+_WoqD;ahwAa*O3>2uQ^GNx&n z!I1-wI@)#+XYV+QrPWn8r@$~+6uVt2&OhKsC|OIw@`{njR8~bD5V0%G`%2d~kxcEf@rbFT8ffr! zcQi?9VoEB<$?hlG?4FzT9a)Y#(1aXg{M=kNWV6MP)Tt<)q*x{|7DbAyUj48fNOn1U zSY(O$OKcw7>@u==7VRJN!fv8$G{KPUKZxbZmyXkV#4O|C)TolSFbH8>cc!cL--4t z&gOZXUX|G_S+4Te>}0rWOvS1STej76{*a?n1nDSQw$yVpg)<=dIx^@Zjrt^~f|QK0 zSjD*6Q|*;MQgy#kEkylEeG*eKn*+>n*$b~vwzJ^tMeDR^s@I83+U0;XycW)h_*{jR z@}p+9=*8K|rjg5qzmiJkIpQ&JG}ypt4M&-jb)kREux7b|r*rBg$_DhaLZd1Ht^-}MX4oWgS#!v4!dQ7+AuO_XS2YqeuLJ6L`85tM`WK+K<5#a zW?2sTck)D>ZN(1Q(LrrU^mf%)$mODZ6`BArwzCAnQn9cTQ7Gz2fk;2o$_B4% z#CBP_QxWx6)e@k9`qRrEZgpq zMGgZsm)T64mKHOUSq^u3w}PNx8*Swoi`cbmR(8oT(?pHLv{L2?WqCnDtD;oo<@7+SJv-{D-f#gexXpKV z3woQo(c;(wmfGwiMGWTmA_kWZKNtl=ImBX@+~Asc=**}Ms8=D@fVlyKF{Uic*_+<1 zo<^WDqgdO)0|RU9oPv{vae{iP#evgxA z&B$+=CwNPkWC9#5-So)OEVi}0D!DGX&6yQD63Kn6T@6Sx8?yh^f5jZ>nTN9R47;KY zNscDluVf^bWYiF93e%9J5jJG_Uz_&r+C0&93x=I#6jc3eLk7!mD%!`E6Dxq51f+TS zBW)fshtaHwI4m}ELiV890;Xe%zQJvT+2TvCgW|Tdd1|uThz-vD zByHB}`yXP`PP+?XJ(A4_{B7qbz3Y}F{-(FZyJx$ZgTxw{WYRzoeKYf~L|1Hp(WBH+ zoHh*bbYras*8#pxrw90y&J70K@WcNAzYPZe0r%VpU+Oc;*11szSe}-qj?)!ZZ8heP z-1|K&#T0lyQWP_&A?b`}(VNFwu?F=leYYJx0ty>UV7%sDy0-_7*$*si}(rgRd zW~&y_>L8;m{hALiq-kKMG`InIMwns;9v><~dzZT6M7El|H$86Xp=mHCmW9^Zdy5yY z_rWurj3E-gkHb|LeIHvdUQC9djwMRU`9nrp9YV-{cO7uc05aAj*gJNXUu8Kbn_;Gdp}`va%!NL(}KyPl2aKR^@@v~1i@aN*Xw3(Fu@?= zO%#O5MehYfoBSiZSsx<~Efq_~(5N7+yV1u|({0Wz`g0lgnv;!uWRsJ+SaW4?p!BM| zoLSG@n>5j)y}v{34$~Z8vl2wsDsMsRw>EfNRTX*BnYjVWP4DH}jlVA1LL)av#;6_mHPKO6>IAkZSw13cb zH-iq5$fDv-v+Ii489I?QBZVvgZfge*y*sBH;zrXRyTOs9;)U`|VcZUsb;R!1FHh{+ zwni6eT<1CWf=$GMt22Ky;OwqS?O)t&S}{H_u;GyjE99U=4L{(3S2<-)t44MyXb2qjc4P7uVwc z+zx7nh1Z?k)v8GSj$V-T>nt0noDaHT6%f5YX#w>n<-i+RX4$N`{6kUqzL2dN8Xw2! zGO;6B>tyZMkCaF9Qfq%}jj_K&N6aiGx~TN8!Zd}vAmUV5cfGWlv?QbN^*cbW2{A45 zLxk@34vm47+fbxmuVIfSkB^LK9s>@h+Z{~@v8pF>QIJ}?xDK6sj_wza21XtQ-kD|Y z<(;Ma;=Shfo9CiXrDnBF`B7R7YsKeF%yPPs`w#7crKz|WH!=_U6pDr==^H3i3wI{E&0(rrC!JsrW_kT4??S1WVZk>H)f3)EfDW%g^vRUfigd%7L< zJ9ZD3n};@0D>-$RHMyLd3bI0N$}nwbjpb>}{3hO9(Bj7*{&2mG_p*0@nppaAlHU+* zEH^!K59hP#nVLhUOc-8SbUkxVD$&*Jedb^XOJjzu$!U{;kj|9Uq7&mJ77tlfaE{Uk zp3lqYc9Nh0QRKXDeSx`$zh>>mcoCHQGY@PA;5LG_}l`(@-O zYOZa$na*&@a#e;iWrOiB?fT+olnTQmJ#~#=DdWQ~JnPZskaq*|4rMYhM-vvN6xWze zcz*#)C21Cw)byXINy|+qb*Y0m(aSggM}NSeB+IQS_N(-92LE!{!Z{0zr~HQJ4z2LB zXMF&p&7EB1;BU~-*b+1?YG|0-FuSU>{2NBrf3i3_I7pOLoD^sa*>7^2`ypy1%WMZ# z6|jI$p;=J|?5u6KO;G=%3=l|4*O6gMJIXm%)QelvT1}zWoZT*N-ujua*$1@1h&C{b zZ^}iRwCGOBcOht9ev>!)goKoBz-cI*>(KPx?b>rRswk}fj#X#a-S(zCc@+us-`y`p zP@IqZs&t3lqNiP7F zjOZo7j;Q(C&h>D@+Lb*Txw8H}N$q}aXqY4ns;0vc8iShM$q$d9#vSfn$SH`($M1Xx zoANV3*wGQ2N?U9}f9LK!+;M4TrsM#v)0QZiO}w5T=qyQezr{X);66U!Fs6e3TL|p*YVFIese9ePKj*{bu}2_r%e}PPBEO2=X zX4yf%=mRs(_S3(AD{I>c_@!eJBso8ea`MC{_&Z z>>Qj9#GvK6rs5ZT_?$p@TxShftPeQpsn}fGQ!|U=qz7~K_~=T3)G(jx;wX zdg)BqX3*1inL!K96s{)yK?8;6hI8Rv?bm1%teuU7g3eC&dIH5o~ zE7asp7imbD>kk-N4;X7sv0t`K+YNfX%3P{+yxj*Qn$3RZ=aJ@Mdq$fHip`0{e5p-m zT#Gel+Vee{i*PeCPi)eYWxHRdZ|aefne8SbGy~8kpWDdpzR6H#=h@^fzdG6Uz0##l zF@!p1HD8@Wa(1C0=S=<;&cadrTGOy43>Erb*7#u+!LY{Wqk`(uRpWGBV_zQ$s&OJK zj&*83oC{tI?SF}Q19wqr=;BhG?ubs9aLfZYm8jh&-exVtb*ZDJ?lt29jRCuSsZYBxJP=@l@@R^~9C&`G8^bA|*P3A`rJZ-$QY(900x-%DdUs-BlAFjEaCd`w2Qso-k3i(PFM zbKv_3n&fHm&TgVC%hP)VrCz}ZPG}V}lX#Ffh^r^E81!!$+W@3)QM2!E_P@28OM%_zEp#_J zzvw?_;l7LEjN`@W7)4gJVvo$ z@rHX81BVxj^E`H$SvzZ<<--r?h?NmP{OHn#6J5C;lM58mnLaky6l*p`)~`G7VZuh@ zTHHDVJqL`V3ubrzOnNgXH(PZ|Thg277SO$%Lu>Bg%M(F8A4g){%LbBjJ3D@J5AUle z0H-Oi*=qNeYUfqcTww2kbDifqG#0qm?J8?oO>b_-pjfkcdUbf_cDGW0<{q7+$Ubww zTd9*f&P~Ny>J}_)Y^rHm8fyu88?7$L{PlRd5@?!+HkyX(d)dC(LfHpHOZ?i{`KSj^GCY!pEg9X zospSs^CY&K&U{Q)PA*)qi8B-reLzhI7F|%qNCD!i5BD_^d)Fl>*Wv1sT7rlA<^lE= zy=vzs=FZ%gb=yUHJIR0Kj)h&82|rKi0FoMc^=S1l)nn;PIHTj=)T?qCSP-TQ?acex zeb3UzXh3 zE-ANl8t`=jw-S}bCn#sXVUtBe7+BKSaB1&V0VuFOyyccFmVlBj`Dz%3Ksq+26nv~x zlkBW}9hi*Z)LT6|kBJC;Iamg90xQ#DBKUXtqQ_;W%xjb!M6S$59lXz$3>6wfIhWwK zVQ}PZs=1Mv+=s-5jXvzKabv4TkDtJRsk-;yA9LS!GC@c>hf-sZ;%uYkyD<3-C5+_8Gg&taDAtSKno#&S^O=CxdMQnRMRv33 z<5hAUj812;AkzzE-4GIeFfFRxvDKrh$BY^?dQ5dN`iP06M+Y?ve6%Khx>MQfA|*<3 zW=FL^5m91)K!Z%UGE2c*IRx3E!#Es`bMKiUTjnQ>Lfp)7n3`hro4B2fBrgA@qrA?E zuq{O*tcIzWXsr53jbldUUnqG_Gp&=xUCBOO0%z(Z!)A z=?VF)I;p#(BB<(4>$fA>&Tnox*F0B+$*o%oPA&MS`#-S}rKTfURD;t&)(L#7%Iru* zW1CyPx|OWA;BnSCT5rak_PITC^ahj1K)W3F4kB~!CX&;EW<3prdVo@RyB|^|ltk2j z=$R86tmb6`l$F`CragL-MM-I7a`Eybnq1J4;`o)`u_O=JT-;PeQTsAf1xw9F!?6I) zNfDl@o6|IPLLE%`ls~P;os!Z8I~Ob2^%l#*}0@--m(Anhw-CyvgXM2*g!5q47?YrzA)bV+~D!DOmD)SSS5 zVb(rAWM8ZtX2R4WP1|Pq#4x2ej2B9@GdOHgFf7;0JFU#!I0s?(IP%-?LjakhD|PzP zZfiYnPG$r?S)I*sL$O{;u+bPT>@qbBU0Y;n!8_clc*b~BJF3@pz)5X^xg0O_%Uk$mKe=kovH>3+FJi;?u;z%DCK}N8tl%n z^Fzq^CJt*cfYb&M_5nhu2mTM~N!2i%v8B2C$_%XD=`_sPeOq9DE(<1I-I7n~8sLT@H`l*H}Q6knTUMTbslm0;TG z9%a>_*cc5Mwdyn>(!$eir~4sEr_!i|;%rLxU5h|7W@!xH=wS5Bv95?~V#e!$c4$!g zslKTA-j$j^g47b09p);&>)}e2*Jm*Qi}>BVqP&&)D@W(lnp{#N|3_*0gfy>J+l~er zH;DS|{#SVo%2_k=K?&F7^gIIV&g%S_?RGdJu@B;>G;Uu7b&l%a=B93qqxV={56^cA z`50q}-grxJ1qMRBxYw8s*j#4bf_(e$6=&%-0VZ-aeczX;bZ#7XH7FNzuPATDH$Yqu z`_y-p&lzP6#rfk_?eWqo-5s{~){!`cc>=cJPy#BqHN$(pbh^ znj8CT5=7+8a%47?Mr)d)t*M;te$nM9=26{re_oT&&EoceGzpu8ZOAf?V2@oE?a4ZM z^>4I9?O9UX`13Zd-}6&9AE_EBd2<`p8|08)P+y%2^X$pU^pyzwJJC)GZq&0=1O99i zZ@XiZb1yAuI%iwV{t;ghl-o_m6vKd&S>SNCN}|zJj&D-(J(B2K)$W{nGTq9X14W7X zL#6*k95Ushc0}X@SrYzb>;7KD39w6oXQvuFpI))`1@td7`<*S7tQ7mnOEmFF`BM(tJL+qHJtj6HYZWJEPa;1tlyt^R#?& zhD)!tMcZX-sCQpVERmRZ?4vB4Sm69&$zd^eR&Zr=vixx(Hj}Nar|n@ob6?bRzdFWF z_u`C9u@)vqdiiDJ47yJwxLig$p=PahR|VSYKFFZrI&I1ocu&i{v8>%_4Z;H+P{o)A^~=Y(!h@M~$eCf+s3p@)S+&ht-pVUq znJz~DelOdH9pJ^6<>c0Qf}|8TmQt#q@S*SPrJg-ojbp zh(7hL0Mrg?)$+D6UjdDFK3WPgOvGBydz38Z_9SIYUep}rbP=NDu$iI63c6^SzDS&i z8FgN5PPTWs4ztO0$2`FqcI&!$XNc~7lb+F=X#N4-ROpEFLa%pf-qQb|xj0b9JWqzM zlr#KA#aNV%rseV2BKHSZ{BVb>|1{*HEUyNl_?}V`eM)|j`ww43l=PDsT=0h788j~h9%SI$kyUaEo99ZIW(PS{-JY^^#0YOM-PuCbDEh{#TIc= z+?`c)+l`A>wkEuFy8qJNZC>11zlhIi@a~YEF`vc9g8XHR{n-OtX+Bd^h!`w(4tBg( za`FzFwmWL?-m}u^938ogEsjF)p)$TAdjE2^!tKy$>5hZU`xpD8$n82G3s_oTi<9hx6A8f*d6^2SnVGb0xqIBt#>azn zE2{gFYj*gr5%NYmp88Wr82xkpNYfI= z9(8~;u~~e8f_;xA8a?UaUH|DmtTma5GTEQXAMu$y%3nL{rrB%49<;G5F)gTZAAq(w zdz%)?eB5T>pXuN`&mC#4583U*R_&6tKix546o@hZaw?{I82kKkyD_Dt4=eh)lk-u4 z#vac0*ap**M4VkCbxcbVDOPNWi1b_0q;etW8%ww3h8DvhfZ_UcO4@|;1EIT_(n=3s+mKlWePf2Cx#LoX3Pw7)4Lo5>;HpR3~ zOMc zI;v|_+SEjnDpO;@rPRIG#Ht;7@iw-cx<58 zXnY3rS~hQwjv8Q-ZQX(?1B1phXKUNGIHOwFSgCXWI$&QplX{*QumLuva`gC0Hdx&@ z*u=4i9Xgu-1~1^-k(G*GdE={pJ;ZMQ_3-9Y2SCs zl%P5oF(NSM=wK-B>XE^;V017sD33x-of3@c4;4(F5*#L{zdbsb9PskUm%m($Wol4; z*hs}vO)O(ZP8xhvC-h+sGJ+` zmyB;y+!`Dk)OSVSBYkW89$L4mZ}qyf`qr#Fx9^d4r}sUM>yn`FF>XECx4I(edoaLn z?YcAgw+hd11$|F(@krmpc$|*+>b?j2o>+GY51)bil3?AL#PY3gDY zP5&cL5FCFV|Mt2Ih)dD({OWb9s)D|&x$$joJ!!E8eK++z;NyCfhzQpIoO19Gp5!tp z_qL-NER6gysJ@%Y-x|fVZq>RA^k*W2I{Q13eYfzGqWU&DQuYaQzQyVbvnD9t;Ezd; zj42;aA)nI;`6LfN5|o#$banq4C$0xbb~Vvc0EHSw$q_FRpMmo!g56FqWQv?F4Ei46 z<`e5KTz6jIBm61HzPm{P@k*Y!ZX}||T!DRp>W}_yN+nW6UF{mk+CY14OWvd_7zg1XZiJ6e}fDO`<-5 zlfz@K0?xpLFsH9On*^xxfQL~Qw2FM3N14wKT%n0y(xB=uz)LZ@NGScfb0nVoRgluG zI3;wI?4$T`0a=xJ3=1^Qup(7sVvav+!D_eA*w=B$v|h z((*}APb#UkDyCY&>b}R?=U9os1iwuj65;-c1KF)!XTz5eg&BJ6#rP4^(o$G2^mFuhIkw9OURh+aC zr-af|*SyV34MBx?kW8Z}r>kWkWU804pf0YfKxwQon6}G7C{?(G)}K39c~6m)dXEjY zLoFOJN7cBx%E=WGkge5y56k5`tyRP#-CNW5xFqp_cRD%PGZN34+@LSAygRY4bvKEB z?YgsFcAs>4!`mg`ltLNgp6jF(Z@|xLX5v0x3a;MJ)pGQ(Du07q^bx1~E2B<2k0H4S z{huA}_vl-_u@}j@KS){<%6aj3N$De0YnA%Tq$Q4Os{ofotnb!h?xgDET>Y~Y`T|6u zrdrBul=Sg+r*lPHLza@o`c+rxZeKp4sGOk*i>IhWDiRv=?~qLs!G@Cpo|;Fp+2PVa;HJ`=fwOl*J~;^ zeoz)POo<6)&y9X--T10bVzu>h6mLV--cVXp(YOBFEK=T8#AM?VjUwuZd{0;^9Y%P` z(1p;@E)g@9Q-@Kn7d=kx-bj?vYcH#+|K*H4$T|AxFU~TTP`kCEl>Wu;xn(yA{g;A5 ztsd!npi)}sdUU#izFXZGvDT@vf8KRN=;yjKsFeXK;|DehY}ICUe5T58U9ELXYi#Pn zbcBR7KAaKBDHkUlge*)pMuq9`+r5or>P2{xf? z^yn9|bZn`Sbrea)_?--ass!VUY&U9Ik|h}mUW8y42U?ZUafois{SRz;7_&rQNbTOyEBJ-n-*inOfe|gI9R|S zWPgt7pM@3FBzOK}roGX1uEMU@_$=Dk&j+s)wj0hMAKtzI)2?#doI*BQzBV*0^t#Xz zBizSM#SO2DI3Qy{(KMup6DTXau(iAjE#Ct@MkBV5%`C_HIeu)9A2DuWW~*67VqZj= zMjxZ9@O@tMKl~iWkh|WiH-s;D&Q1Ot8)=RNm$&D6 zdaL~hXNA8SCG<^b0Y9_&-ar$GC>c(HhEIZ_jNi3c(9;B@56R+Ip1>ppU_23tA)>YE znqNJ`ghet1E!EyZ&uzeuOT&u9LJI_|vHqGOstN11ZenGN;uWowi>*eV55#h#^z~}P zG^28^S8(o&5oxWVPRIwebW%`tEiCdOq1EyVa5pMzhA>up&DNNInD9qi}^XjsYXB0J*@O38H$E?(f; z5KGi7Z>RTd)@68rGqkxSF+f*=j6EQLXq>tKxUp9#1#$viLlWK{5d}XqI;CU8!>YFe z&e{|qU|PTBB!sP?Jq9w0x1pxFMw>xLjbTaxK%!P6Ww0gTlBWQJSD;5|%e*L2o6_c^ zNDX))%2a1ZA@UzadoKv)iDT$JtI@Y@FJ<*1-cmLhA|WWvVimPoV)0yGUbyq7(14|X zk`vXi;zdt`s6BCWi7(QOM75FS(@9%|x#kTq*+w9ULFX%h8ZUxJsc;UQ zAcU_M4o4R8o`1jHT`kRLfaJ*!@-IWi>phUE7lHKl7O)I0P|3;--bKk>@)xCt;vmMN zZaxIcV{MBGos7HD}%6)pd=HX2-F6!nH) z`~$16{s{dPMX&)gexR9(BwoRlGhw3dcyx@e_!<))U` z0q3JV2DHd4*0EWhG1OP0K7Eo8tbw5$O){e$*B*tkvA|{*P$Ja=p#qO(Xc+@-22loM zZ7_)0-&$T%PPH;I_*Ig`3TBU?#9QVM@4Ud9T7C$Xeh_kdvTU;t5<8YwpL(1Wb_JtM z%sOl#*-dP|C!87;2-*)oh(!F%k}`tHwvhQFg^%7@dpUZlmN*T)YjZT-maWh+_pGNJ z0kPpXYeF_^>fXWZ;-)qiM5%Au*n&TPv>o{OV8mI6mcm^AnsE^NTIb53-?kp`JIRZ# zGwN)#IfKq#6@}Vb28f51LNo(J{0y`rRG``=-;4ixtGs17c&s5u8G#}Hptu^~!A^_q z!*!r1Cy-XVMBT%L<~HKu{gKI#epdc2jPOtVH!k9a$0L3ii`TXEw*dTY^aU^Wa-t2E

            7Qwv!wuCjii6bV(Q$RiNkN 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 z z_FRTuQ!il+_C^W#qY5&)c(1TlJhw8*hStSyuVC;D>Tylbb;FN1AX$uxT4xDMinuP*;j{`X4yo#)>xygu~3#W%in=po*cSwb{RE}~~v9t;*XD{lD;+n{YK zT#J_zjyL2%FDHYK@~^>N3gR~TF{rTER&|5tX=rhY&A%JkYJ`<1?ldSiJOJdwNb6&V zg8`>^EBH-65I1q{W_J`^gvFS9krh^Jud{6JV=adEOZ;~RRbT-?SCYVc<-rJbJh-&Q z^tp%IldJrUc40{XymR_-zVa}f$}W}QAwQssHUek;#ImiQBs|DL z$4_iH2t-%jFY+3KRsb4@L-a*TL|}^$Ukg_a>06uJs7;9>scV<9T2e%y>xa->ybs=5 zVv@lVcRP=@b7&3R!@ih%7^XFDZa%tEZ*sK-F6gh3T%@nIYw#_j)4zLc_v|jk9H&e| z+sT|F&Qz$8A+DOOkqV!#kTR~OtRey5 zqXg}oCf5RrV!{tJW-XCShnCjSamICmMfC$bl_VfYz*i41j-B3l{BIYZJNVf%iz6ov zpE>il`yM;<`2Hiir+4tnQ)oq&8)wvXgi+&gbWztOpFWr8wDO)5trTwV zi%h*ClWO=q81Z}lN)daPKOl5K&kmt}Swe~snAdnxoZx7xa|oO=Mf1#cd=Y?6<;dW8 zwepo=Y0C@Gd{`<7phju<$V3gRDJG!MopV16b+N(9t-l{wx$bgb9pNHag7VO0V{pCN z{1Wpfk?Q>Gi494CEtHUu2+is2ERQw5L_dYU?UTRmPY_8~rYP-?A-?`2O^tup3d&ms zN|KVbGX~L~PRin;owJ8Y?=W4U8V<+HZNzIaV|UwJEKjFjeGH&wSmb$h(d)7#t1!!D zpvZL${ZUxU1uEliS=q8~iDv4XL4i6eHzc5JPVbyLtWSwPZudmbMgo2_JZPMiDaIFT zIntpeII2QYxNiMnY^IdZ^$5+3&EO$-N$a{`qNvkn+l?DN&H>~)nph89NeiSDppV1` z4=l=p4ffo6?W2Ja%R!1223u&?sE)Q_`|mMyN59Xlg5FSYJ=im$1}M8++vXAK%K^RI zpVaY2Kg+<}bUg_SY5Gz~LL$pV(4-k(8aips2jkPCa%jO3z6cNWDK>QIJE614ZZ_^1 z!L7;ce7x1P@WxE8b-A9OSV1Q2t+@)i=v)+@BSCaIoB#B)V0BkXDL!O!*sH-r$bibeDHfa` zEa@tAsz)Skjtgx?!In4Ta$RR69deh)gKr;9cZWo}l>c*&C;>zzn#oYpR zmthOWhaHRfz*UX|5oR6E9GmQ209%6MDE(xB#bN zXtaO$2=i6ua%)5zX;9d%a9C`A@9@#%yJoa%%&8pluH9&%*(i%v?hijxZXiFxW1>|b z=bhZTTE|$KXNV+U4s25UL;R~3p$fg4b0d#x?o8`hKcz(yM40V+9G~?%i?cfqaA~5N z_$td&&MDXS^^xQCfn~h0h*WuVt%2Iv@eI-t1E?>)^^&-Lr^g=BSFY9&kOzVDiQT%7E%+(JoS};iMZn;|&PJGi$pN1F8Q8J1 zU|j8Fnx~GRsRPJsPTB;dRdvsHY+#ZFf_qYfo5#1P{4{nCc98cj7%%A}Ah!Lypsw}= zHk`+Xf|b4oEPGUZPy4&J#k6ay08hY!%cdY51FUCO65XBZex!KM(%IED{&1|MRiRJ#amEYHQnvWB{8}ee4Z=sWwuwj8 z5YAPeU^_%EVpbi(Re(x>{C>l#n;0Hv#B5B=1mQ==kM4L>G#Y^!K)+%OO4O>B07QHd zp-6Nk>Q^WJ_YSi7#&F?pqFEI{nyW=s55=f($L8)HUPCJkS>#!z#wVD4dS)U3G|Um% z$?s68Rl`Orf9z^<4Q&JFQ(R3}sF+?*w!D^%!cX`Yv*1FE1fm#&pTVKUeb}z7D|mNDTeYkm=R+25TI>z$ z*<(*V`PfNPPxS$vSIX9wXrkic`6SNYdx)pFiuZ88;B~qPWQGwmWMH0OHp=XrGNlZ=&#h|6UhgUe)~zPI!E z4j(?_)X=>8!4<|X$0f8@L6sBV%G`i~l)0K`3m1F0Y*wFQf-CX!sziVc8PgV?N?vVdQcsa5(D7ZOgp#Arjkp~6b)HlqYv73Ygl=QC61e{s`X zaJ*!>tuL2XU})p5%UEN zC%1RJTH<-<7r0rlEm$5!#~4MY>^cAp8#SC0TfVtJ$8MNfbYx-=kX;P_v+quy%S^63 zphbrFR2bh;%+hB917aPJF%FAuQoC6$_f<}Bnk$v0ghm>&)Yn-$B9Zwnfpb-Z8l@vc zn9lP&b%pvFY56kas~9RuN)gJh1OSEP)>2p+E=|Y=z+jTQRS%!wP{p@SPLeQdeb5*S z2G;MEPXNF7^DO=1`zMbZ*IbGaZ;ZoTH~3MPE9|Mv%Mindg}N)2gT)x%)7%A8i;!#XIhxWaMa0Nop+o2oWeLK|WY;`t0!|CltGD(f+AZY4h_S zsy+*haFMwI1UW5S#n#}YMTwQ~mJ}4CLpkeHvJ^!PxbS;4SvVqNK-c1gP*GA;F!|xu z|f5Kn|k3o6nCbg&lL#dsfqBvt7!E-_U$kn46QcG-%Vt`dEh;cUR z5>Stw=EjWD0V)+ZW&t)ee5QSH=Lm65^J#)`IkMu_B+ax%2#F z;5%GA@hR7X%D(%0_UCpBoq!pl8W9A??e7+K%94$tLqf!&U>#T*1wXR%MpiAnta8;q zi(}BqqI1HPwZAsuO8341ZNl(sm&GH89u~i~1BRhpkrdw5K`#~MZM^hrC9UXlSv9Qr~=B4`aPwB>Vmy1^!9OVodrpVn|z9F~>TsfHfP&^p&ZO!wUJefc-7n~J& zRXC-rg_)=#=iuY;fPfB|gHG+WrO-Za%>kHd*Yc<{a;el04TxD zJZ0@g2Tgob;XNn0{m2n6XZMRlJ!Oq>7RRtoQW?XqDGsj!>D}*iDmhs_L{O;_3l3&A zR!yk9`PHo#wzA+Ms24gCNIbH0_l+lzoP6bRk<#d;U4vw3qhz|c;Po|w91X0qvzR&0hK*sCm0h4Z{(9GQJ>0Y)pTL=B?N(iaay zLa#QC=)};VwCkgY>=PhMgOutOs!{8z0DcVjv*;x0r<2TpM@LTs^S1|12QmNn7SzQC zyOE(J?eyfJ3~)kc{x$=Wv_|(1SZit>VvK<}X*QbZ|7dwjg$}4k#lH#}EPW`07b~PE ziF@h7f_#Z&3z2;jz2(1Ul9S<7E3R= zu3=Q!fjQ+D8N3+TDTX__Fps*pe^DyUb6%%XdT~GB(xPg_ zJ;Tl}E<%;A*x{JKh$StGf|60(y|y4#@y$Vp;LWe8gjJJJO3`H?EvA(+Gah`zTsa#) zy$nWDlw5gqmdPS3R*0r5-w(*f`G2~2;IZAO&Mv-t_=z3%+Pd*+9}QFd%XoqQey`Qs zVtoSm=hg=b{kK>~y9ci?bqB^wX<;cGzjYn3trx! zQ6f=2n|8K~^oT!Dr7dQ!30w>7@+&=h#fYMjQU$>2f%5wJZP#J*z{)KQsf+t| zG<;lK{q6xi>N?zvI=z@qJKI#d`xvS4sSy-S@NpfeNoCGv=_qT7!nxmFdL|o<6W2iH z6yx8N&(sgxe)KS3ALJuHT%gf*-0walGNgK)$qgsL+b~L=yR=}uwQ0e^hDWuqN!Vg# z;)Fw^PE6wnJIt5%p+FBZlC^Ooz?wl+X=6_9@Gv_nWov0}Z{8}d{W*A6?efB1ePl+D zmjUx27j9i;Gy#4rO2GISSd z#i;dxp&&JzGTM^QZ#}{_FAIwkLwy8RAI%I)40QQABGhL6Mym0&1n>+^*q4ib`1lVr z)^L`JWA_f9K5}gF_1z!SchBmUM}BzxL@qEeBM2oTZdFj=!lL$qIIA~+sT=U7a-xj2 z+pR0;sjbmO@IwUb-62su2&WeNg=WB+BK+Cjs$6Bq-n=PlAIz$D84E5~unT6K(;@WS zeq`4#=nSzXP4Jp~#9jR* zR^)2{K_BThs~v)sRhXFU@v~1KKAnBQ5X^k6#z?_32ap(Nb+q{B20yd$XuW-SydryA z3IinlP}-*)aFSNnqDH0fCAM2GMemAwH=ZUfL^ zz*6>qK%Ps%(cSlh<0p^qK7D5KSNr(!@FV~0;^4gp{?fm>V*T{)@uQ1_{M=ez1>H;= z92#T6g^{Spq@iF8irLUBbGz|MmL5g8SR#U}9rVMeU6Ak^*xWNX1N&VQV@2c-A3}^- ztF1>kUwQPw6T43xZQmR!1@U4wnNo_^pR@llKAh-z)H2sGE^qdBQ7|uq<1$K-9>Uwn z2aVY7umjW#Wh*wGt_8J}=Byf@7u?B9t|nufb%^TfL$Y7vMo7@x5B)^hmpW4dEM!pl za_T_+B}LqkfWgU*@s=Aci^003P>yqBJSSAXar*Gn=%B^-jz4kitWHMU;>1BJtV-bn z#54!>i^V;4aJhnrcl`Mx$od(R5e_WOV)BWkn+MiL%QDN8GSjs(S0SOk+^uZPDkce{ zbg}h%t42bD5Ue#;FCLWXU~dJRApoWR6E`u3NkrURZq&RN~AT&9LpHo)#2-mn|H~}+tw3Hn)Vg{5cP716l8esc^l6={ECO& z^U2n!SdGn+x%?r7IxxWGH&Q-D^ToeBefU2-wfi@9VC=@?;8#i{Ymdr3IHsDWKoc^! zL6wA@P@sC`_-goGXEWud$Fk3Fkh$*8sH<9$TH9a>YapCSvcgAI7GKa-)0cr|AovF9MEyDb|(X0EFmw ztqH$6sLbE=#~z8=0jkK1-iQ-P(0JliWGZiS&+$sov4XhWQTq z{*0VOY5Ygz3{;ZKf_zv!8Ib=*pC*uk18u zK>G*F5?tuJK2nvqFjs8g*5fLna*_N`s#UF9g5QUZ*E5}Rcy&2HDbcWG)& zH+U(N50A}SfZ-Peuj(VlKc^nffVT({I6>pY&Dg&rI+iL~bLm=RR81JmIKRBg*7ha- zcbWgYLexO(I&W4nrV@Y`au3R9C~gL9vV#RK(qjhViFS+C_24rcl8mMT;}FVhFtex{ zAcxojG|N$}S2Ol%s&4jp#18RN>>!d;Ev)y7Amtk1D_H#h4BaXo2S*`#Uz{Kn72?s8pxPsZHj2hsrw3Jm_i`4GCR*G~$6f(=+! z|0;bx?JR#&-YdrN70M+nTWnY|>at8}< z_9!*1pC1D(^TTPO45l|}_z%DeQpYNwd$dh3DKUM<4{Jw|q0$J2DqnpdzRw$XnvQzXzu2kwn>5G?I4x$^b9ug&=f!*?>xcMhlKN- zwD*AWh)r5)-rNU!W6;%!}B82YF=w*b73>1_as5BZHn-;(`9DqD9 zKn1cQQNw5YnorC8aDrHou8c@`gVhi)DOd+hH51w|-zLFjbbH%aH89~OOt9rH(};i+lh2EBD?Dc56va;qB$o$#$5fgSwI)Cs*e$8|{*pxqDXV9J3&H6SW7+!5RRs?CQH3ZpKVA9>N zV1<`2hGW!T!?9B&nu3$Y+L32c?iUmp)ve!5;b% zMI5hnQz=GO&R|@k7z)E}%Px#M^d+G`O8SG39K82n*Ry|l;NE)=`nBr|;nCGyM&MF& zc`+r687gHW83W^^We)rwr=IwW#eq{N{r8FEkMr-DA3f10Iq>w(W2Z95YAC5TR`Owz zkwpqm5CO)rR79O=dIy~GmlBdvY$Z-AD`yIgo8BACVk7NkEaNfYBq>?VNYoEG%e}Q` zFWPp@pohX9DWj2^y+EfnArw_z)=Byk76ljR!dW&m7koB}`qa9OEU;W7$PkqH<| zb|x5ip)olO9a_N0c!~V2e@dt5i3}${Fb&Uq31(D`@K6?QY{0^uX~Z3t0A(N0nu%cK zeqdHVzJ~?ZH-B^aA?T&xgt2KQ>H%!B zdW~19F=eI+BK)F8&P-r4;s#K%sp~OK(w^2=MS1o|X%UUwiQF+12|P!aIIRXAs-4byA*!+nzv9jw^ZzdCT=Uw`r5FMSz8;nxYK^M-uoKn;gLi<>duD3SvM0P7)e8; z4}Y#u68lxB{_10WdvwzX$ard-a!yC?K-qil&5U4_lj)w{S7q+Q~Mh=@hpyAcLF|g5XjB^GhL(i33C8*Le4H zdA;dAhuXA?EMElT%UDqxv)Lr;pF7M(oy4H810$hFTOeTw?yP(mK^oDT7_l?Dj<`q# zrJW}Y1uye>FykrkTVvpU?1mr-6@>};R5Mv<#?v1{!X z+-;07j_DeCD`ZMY)fmAHB!KfjW32v#pt7&p)-0*w%EbQavR}aNI#ECxp9;y;b`I_| zbdPqUnf5bcM;pSnmD!k)y*5|mJnqwf_Taty4}NLiOcw~bk{(_Rm}RM50b|O_GU-GF zeOwNmFC#@dO&os2U7FAL+0X7%j;}L1Ytd8F+YuzG#JtenHyAKD+|^6g=AF_U9F%)B zcQ;Dx-mZHKy-1Kb_6QMTZ5SI9(}E8}9`VN5xrBt(F+D_5;8+@$+7$c>yXs_1+>opB|e#`qT-OF&?&C92E>-WKozF+OI-B z>kmv(#bMN<@h5?Q9pyRF&Ea0=Mcalf@>X|n$0a7d|I=2-u%+h400)nTC0;=?%-0!o z1lb%+j3Qmx6orB`X^Bol&Tx&;^1nFop8~h6b^O|Lg;{;>ro$b5c9{%;6ipQF!5*qS zlYt7mr}BheZW$ng7c`GSxpNy82DJTT#mw*^Hl-%8V3g&>y!7rulbsnoAR9|g7SW0Y=aUO3! zdThrpHuds@mspHI?wF25WA#mMkTUS6 z-zhcbY!`$^XC!qeXs!-B2>g4DFiFqO6|`$@w~m72Qbi8ykU@g%=ALFBobE0q;r2lC z0ssgjJ#IE7vHD4xqOsDp)L-qxv{4$lSX-@dI4vd21D1^W1Nt0djt3c=_BtggkMe>c zG-P#Eqw;?ttPUrJ`TEo#NdS|ik zQSN(d-(nyhzzly9&>E?whI$#8DC1C!=NN=iJ~9cVOP@qWd=+U0H)_mvZ<~`PPtMR7 zzMbPI+!|Cy!)tXL|1o-gES!yD!Bd7Gv$!G>V06kRnvwZ)YhkM&*)W}ULmFoh|DbZ3 zL+O>ao#W={Py^{kYd-Bg2S9;>lN9!(0J#P7n-BauMwdf#lwnG=IR zJt4^t-RmygqB|k_Dg%iwMw+D=!#GSnq!~wC{J#(Iu9Bv*#d3$M<2Hy{aZp#q#a8MW zSv~C4oUfutZ>O|X3XQ}~gjhQr^@42a%Icn#hop?C97-dlO_Te4?zidCiJmVpk2V96 zD89j;u%bMP;mSal^Do=$kQ$8+T&x5mYx29d-r3P6bjVu%5p0MUht8EFOM*flI*&i(S9G@Y~>(KynZv(EHq?BR1H~KB9YJ#F=j2 z$t243fL2~fE-S^)jd=7b&LDI}TSUE;&zJ0i9y?IPz3bfL@XW*_he=9Tdhh(P+&ZoM+~qn0s&QQLYy}ae9l9lbO5o?BvgIOM=u! zHw8L4i9h#3`@tH9Lr11mQ2zbRd&N%bZDxhvR$h!Vr~}~)edX(67INBw{UR^Sr63~6 z?iB}Oh6Fho3`Q|D`RUf9Pai)^@L_-CQ)QM)6)4bA*Hr`Y=vE=E{TLgQ1{|Wg&8} z_yduPV|Il*d43<+3MiUFt*6@G1rYacEwAyg%T@fcn&)@6aY&|=1_6$(2uCA^Vu3Od z^T+m7pQv#f2Db}F4!SPe%Kf6TxG)VE05!ux{R1L2-?96CKXolS)3{BVF3`gWe}s^T z-1nz9QofNl!*^e1KZD-H{#shxP-bLR6*^i|Ik6tIWKu1{MT(>g^iY-SNt$PBw<*l4 zJZ=$s9QyX52Ooauq3=I>h|r@Hd=U)xGdYx)KOze+!mi09vPk49JH3J^e=oFowX3 z?H~DJfp4DP^;2H!EnIbL^C){EPd(u$WzNgU3?Zw+G1H$N2ua-E%HU$3TgXA6#ThRJ zmEnW1xWf%L?rL~u%DIRpmTEeR(SBPlD3LC0FnN3CaOz29&&_qr@0*UJHjp*mSw$^s zEr5S+*0=7k9d83(?tOjkIAfz!LeyZqU4=WlN%vwcK+nf{0ob^0fSNxQ#dyC!JJ66P zf9ln`{a*3&!z2Y4w7tY5m5kKGkyKblP)HTEdu?gC?jufH-ucP#v$+UwPkl0NUC1p3 z(=XvakJ#(UBd}rT>Cch+N@cWtsL68#7tk?zD-YH#Fr|fr?j4*9l0$)t;9=}d?*%8^ zp~kHnug3e{>dP8U(>EB=!=M>V=Cd^8!EgfL;E`!7UB(7r$inKTp62!sb{?B6 z{R?`lzo4- zo?z9ISzSJ^DXa+^;H>P4%bBnntg4*qTPEF}e{=th?&xr%VZPd;t6d&VB2k%32U7yd zEn54(+dXWK_RzyPBE+7)b5rw|;Rxc=fXJDd9~|@Qg>N5zY=>_RO@0({=c!p~Y`AWg zsJS^&qdZW^<=ycpgy$umZ+o(n!e|uRN|uQ67Igym^95g(bwHh351g-I%0DGW`eKSm zOK-|LF7TbjaQ)>0^stWg;Mgg|Z3_-)3;2O&eKpJ_I1yJjKFafo^3X#Vs@B<4Ry?w8 z*>q27PSFsh(LbZ6bjlG!@&KqsArA(f0qM0z*(Z^LL1h~cgbNTT3LE5K*Wd2qmmt}q z8d;)lXJMKo(NUh`?uRI8Igu1`)J!yeTUB+rq>?GRv77S)FB4uaPX%C=kPty-HQMBe8ZYnOC!`%aR&zD(?U;6=#NkKF1Vjbr z48FAXy&Nin-;y`Bme(43;eqz2%@|n`w=SifALLjdQuxP^ok3G{r{d8`sHB5Wp>Sxs zFEI6peG<^@n~!Y?38Q4RKhh^I7L4`gWF%OZSsCljPv*VFB#V)H#Cb2UBHRb<7ltF- zI)&I98J$#igFQa96i_38d3reERxg5k`qY_xJM+Mi-6zL~Pd|O&vC~`_cZMUjPm*Oj zvXl4l9$W;7x&BRf5v8?J9E#Mw(jMB3<{;BEKA1( de2m*L95TO{mB(k2+ArE$S_VT&sm%TH{~J=4N{#>k literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-sk_SK.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-sk_SK.mo new file mode 100644 index 0000000000000000000000000000000000000000..a89798a07ee87dce5350f52fdbabb9b0becac665 GIT binary patch literal 311 zcmYL^F;4rxJX!HKAVr_EBXc~ zNPCI6a}<%HT>RABiufJ-b!9ANP^^p(81>6yB1eawHxxe5%P|#hX{l5&dbd&J)yA7j zPMlu{1yt{1(8CP&tL_kJ4QUr{Apr#)&Nmtc&~5|4wT7#Pq)Z0gOuWe{5_%JzS1_$y n%sqzCANCSH`N2@RF(scHzC`ZbCl*o8mWRKdixsX7FcPhQq8n7@ literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-sv_SE.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-sv_SE.mo new file mode 100644 index 0000000000000000000000000000000000000000..0f7ff8528d065cc0c8a34abb75b5eb46d199f71a GIT binary patch literal 277 zcmYLDu}%U(6vV`8OKXc~Vy6!dZOC4((u0slya*aQvmVdm%<=Z}_CfSR_&r*G!#yaN zWHK|EDQ16hzUxJtMP5c;cOl~TCP2EXOyJuCOrd zC+5Mk5-To#+qhEt(Lvj|no}rOP6BE6x)|f=v=hhSiv)8n{j%oD!sxSBQ#2cK4UWC6 zg9UC6F=Tfs9BsyMmBBDI?>HeQaq7jwr14q^g)q49C-Kdb<7(ro_#|vU=D8`ve^aSA QU7lXg%N4C1#LD#k0Uv5l?EnA( literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-tr_TR.mo b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro-tr_TR.mo new file mode 100644 index 0000000000000000000000000000000000000000..7ac6f2443f648da980da4e3ab1c8468412b78c48 GIT binary patch literal 273 zcmYLDu}%U(6vV`8OKXc)(CLFi8?u+PQ6MA|FABzXJ)Xy!~i^p&-CS^4~!2^$--5ZU>5Vm1Yb$I!op~f znft&>thoGX(@N=Ehi&6L=TL2&MABlloZ|Sj6UXs`1SedDwddNx_}!~1o1M4@r$M&S z0=I`4i<=ydwqUq}QEuLFMoi)~h=o}bv=oYQcst0_nMcR<&eh!!F{Ol0subtz)8m(F KLt6)_GQBOTQvm1HgI>iHQdj00^ADs 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 LYJ*#EwKBbbx<^jj literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro.pot b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro.pot new file mode 100644 index 00000000..bca13278 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/languages/wp-schema-pro.pot @@ -0,0 +1,5596 @@ +# Copyright (C) 2024 Brainstorm Force +# This file is distributed under the GPL2. +msgid "" +msgstr "" +"Project-Id-Version: Schema Pro 2.7.20\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-schema-pro\n" +"POT-Creation-Date: 2024-08-12 04:03:37+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2024-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Country: United States\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: " +"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_" +"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-Bookmarks: \n" +"X-Textdomain-Support: yes\n" +"X-Generator: grunt-wp-i18n 1.0.3\n" + +#: admin/bsf-analytics/class-bsf-analytics.php:216 +#. translators: %s product name +msgid "" +"Want to help make %1s even more awesome? Allow us to " +"collect non-sensitive diagnostic data and usage information. " +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:219 +msgid "This will be applicable for all sites from the network." +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:243 +#. translators: %s usage doc link +msgid " Know More." +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:253 +msgid "Yes! Allow it" +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:264 +msgid "No Thanks" +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:370 +msgid "Usage Tracking" +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:414 +#. translators: %s Product title +msgid "Allow %s products to track non-sensitive usage tracking data." +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:417 +msgid " This will be applicable for all sites from the network." +msgstr "" + +#: admin/bsf-analytics/class-bsf-analytics.php:422 +msgid "Learn More." +msgstr "" + +#: classes/class-brainstorm-update-aiosrs-pro.php:73 +#. translators: %s: search term +msgid "" +"Please activate your copy of the %2$s to " +"get update notifications, access to support features & other resources!" +msgstr "" + +#: classes/class-brainstorm-update-aiosrs-pro.php:170 +msgid "Get the license >>" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:291 +msgid "Schema Regenerated Successfully" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:559 +msgid "Top-Level (top)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:560 +msgid "Top-Level (middle)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:561 +msgid "Top-Level (bottom)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:584 +msgid "View Schema Pro settings" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:584 +msgid "Settings" +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "Schema Pro" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:690 +#: classes/class-bsf-aiosrs-pro-schema.php:4950 +msgid "Schemas" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:739 +msgid "Website Information" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:754 +#: template/wpsp-advanced-settings.php:33 +msgid "Plugin Settings" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:769 +msgid "White Label" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:783 +msgid "Breadcrumbs" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:850 +msgid "Settings saved successfully." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:1013 +msgid "Activate" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-admin.php:1014 +msgid "Deactivate" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:120 +msgid "(0 Reviews)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:255 +#: classes/class-bsf-aiosrs-pro-schema.php:1128 +msgid "Applicant Location" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:259 +#: classes/class-bsf-aiosrs-pro-schema.php:1132 +msgid "" +"The geographic location(s) in which employees may be located to be eligible " +"for the Remote job." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:810 +msgid "Reset" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:826 +#: classes/class-bsf-aiosrs-pro-markup.php:153 +#: classes/class-bsf-aiosrs-pro-markup.php:300 +#. translators: 1: number of reviews +msgid "(%1s Review)" +msgid_plural "(%1s Reviews)" +msgstr[0] "" +msgstr[1] "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:863 +#: classes/class-bsf-aiosrs-pro-schema.php:3975 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:338 template/settings.php:93 +#: template/wpsp-advanced-settings.php:127 +msgid "Select Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:878 +msgid "Add your snippet here..." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:931 +msgid "By clicking on this, it will allow you to fill advanced data." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-markup.php:132 +msgid "1 Review" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-markup.php:211 +msgid "Thanks!" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-template.php:672 +msgid "Home" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-template.php:674 +#: classes/class-bsf-aiosrs-pro-schema-template.php:675 +msgid "Archives for " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-template.php:676 +msgid "You searched for " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:32 +msgid "Choose Schema Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:37 +msgid "Set Target Pages" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:42 +msgid "Ready!" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:120 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:148 +msgid "Schema Setup" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:150 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:192 +msgid "Exit Setup Wizard" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:196 +msgid "Select the Schema Type:" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:217 +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:357 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:405 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:505 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:628 +msgid "Next" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:315 +#: classes/class-bsf-aiosrs-pro-schema.php:3549 +#. translators: 1 schema title +msgid "Enable On" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:316 +msgid "Add target pages where this Schema should appear." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:323 +#: classes/class-bsf-aiosrs-pro-schema.php:3557 +msgid "Display Rules" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:327 +#: classes/class-bsf-aiosrs-pro-schema.php:3561 +msgid "Add “AND†Rule" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:336 +#: classes/class-bsf-aiosrs-pro-schema.php:3570 +msgid "Exclude From" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:337 +msgid "This Schema will not appear at these pages." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:344 +#: classes/class-bsf-aiosrs-pro-schema.php:3578 +msgid "Exclude On" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:347 +#: classes/class-bsf-aiosrs-pro-schema.php:3581 +msgid "Add “OR†Rule" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:447 +msgid "Your Schema is Ready!" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:462 +#. translators: 1 schema title +msgid "Here’s what to do next:" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:463 +msgid "" +"Step 1: Complete the setup and proceed to fill the required properties of " +"this schema." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:464 +msgid "Step 2: Add necessary Schema information on individual pages and posts." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:465 +msgid "Step 3: Test if Schema is integrated correctly." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema-wizard.php:471 +msgid "Complete Setup" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:194 +msgid "Fixed Option" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:198 +msgid "Fixed Options" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:202 +msgid "Fixed Number" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:206 +msgid "Fixed Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:210 +msgid "Fixed Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:214 +msgid "Fixed Date & Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:218 +msgid "Fixed Rating" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:239 +msgid "Accept User Rating" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:254 +msgid "Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:255 +msgid "Target Location" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:256 +#: classes/lib/class-bsf-custom-post-list-table.php:133 +msgid "Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:280 +msgid "Enable On: " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:288 +msgid "Exclude From: " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:412 +msgid "Article" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:417 +msgid "Article Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:421 +msgid "Article (General)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:422 +msgid "Advertiser Content Article" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:423 +msgid "Blog Posting" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:424 +msgid "News Article" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:425 +msgid "Report" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:426 +msgid "Satirical Article" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:427 +msgid "Scholarly Article" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:428 +msgid "Tech Article" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:432 +#: classes/class-bsf-aiosrs-pro-schema.php:502 +#: classes/class-bsf-aiosrs-pro-schema.php:1795 +#: classes/class-bsf-aiosrs-pro-schema.php:3143 +msgid "Author Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:437 +#: classes/class-bsf-aiosrs-pro-schema.php:3146 +msgid "Author URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:442 +#: classes/class-bsf-aiosrs-pro-schema.php:680 +msgid "Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:447 +msgid "Short Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:452 +#: classes/class-bsf-aiosrs-pro-schema.php:508 +#: classes/class-bsf-aiosrs-pro-schema.php:1265 +#: classes/class-bsf-aiosrs-pro-schema.php:1530 +msgid "URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:457 +msgid "Headline" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:462 +msgid "Published Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:467 +msgid "Modified Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:472 +#: classes/class-bsf-aiosrs-pro-schema.php:1425 +#: classes/class-bsf-aiosrs-pro-schema.php:2127 +msgid "Publisher Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:477 +#: classes/class-bsf-aiosrs-pro-schema.php:2132 +msgid "Publisher Logo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:486 +#: classes/class-bsf-aiosrs-pro-schema.php:1374 +msgid "Book" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:491 +msgid "Title Of The Book" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:497 +msgid "Image Of The Book" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:514 +msgid "Book Edition Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:519 +msgid "ISBN" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:523 +#: classes/class-bsf-aiosrs-pro-schema.php:2452 +msgid "" +"The International Standard Book Number (ISBN) is a unique numeric " +"commercial book identifier. ISBN having 10 or 13 digit number." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:526 +msgid "Book Format" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:531 +msgid "" +"The format of the book using one or more of the [ EBook, Hardcover, " +"Paperback, AudioBook ] values" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:535 +msgid "Book Edition" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:541 +msgid "Platform URL Template" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:545 +msgid "" +"Provide the link in which platform works. For example desktop web browsers " +"link" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:548 +msgid " Work Platforms" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:553 +msgid "" +"The platform(s) on which the link works For example Works on desktop web " +"browsers, Works on mobile web browsers." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:556 +msgid "Offer Price" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:566 +msgid "Offer Price Currency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:573 +msgid "Offer Eligible Country" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:579 +msgid "Offer Availability Status" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:587 +#: classes/class-bsf-aiosrs-pro-schema.php:805 +#: classes/class-bsf-aiosrs-pro-schema.php:1525 +msgid "A Reference Link" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:590 +#: classes/class-bsf-aiosrs-pro-schema.php:808 +#: classes/class-bsf-aiosrs-pro-schema.php:1527 +#: classes/class-bsf-aiosrs-pro-schema.php:2464 +#: classes/class-bsf-aiosrs-pro-schema.php:3054 +msgid "" +"A reference page that unambiguously indicates the item's identity; for " +"example, the URL of the item's Wikipedia page, Freebase page, or official " +"website." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:597 +#: classes/class-bsf-aiosrs-pro-schema.php:1375 +msgid "Course" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:602 +msgid "Course Title" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:608 +#: classes/class-bsf-aiosrs-pro-schema.php:2275 +msgid "Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:611 +msgid "A description of the course. Display limit of 60 characters." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:615 +msgid "Course Code" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:618 +msgid "" +"The identifier for the Course used by the course provider (e.g. CS101 or " +"6.001)." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:621 +msgid "Course Provider" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:624 +msgid "" +"The organization that publishes the source content of the course. For " +"example, UC Berkeley." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:627 +#: classes/class-bsf-aiosrs-pro-schema.php:1382 +msgid "Offers" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:629 +msgid "The pricing and availability of the course." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:633 +#: classes/class-bsf-aiosrs-pro-schema.php:2505 +msgid "Offer Category" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:639 +msgid "Price Currency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:645 +#: classes/class-bsf-aiosrs-pro-schema.php:767 +#: classes/class-bsf-aiosrs-pro-schema.php:978 +#: classes/class-bsf-aiosrs-pro-schema.php:2060 +#: classes/class-bsf-aiosrs-pro-schema.php:2511 +msgid "Price" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:655 +#: classes/class-bsf-aiosrs-pro-schema.php:840 +#: classes/class-bsf-aiosrs-pro-schema.php:2487 +msgid "Course Instance" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:658 +msgid "" +"An offering of the course at a specific time and place or through specific " +"media or mode of study or to a specific section of students." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:661 +#: classes/class-bsf-aiosrs-pro-schema.php:2493 +msgid "Instance Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:667 +#: classes/class-bsf-aiosrs-pro-schema.php:2499 +msgid "Instance Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:673 +msgid "Course Mode" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:685 +msgid "Course Status" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:690 +msgid "The status of the Course Instance." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:694 +#: classes/class-bsf-aiosrs-pro-schema.php:895 +msgid "Start Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:700 +#: classes/class-bsf-aiosrs-pro-schema.php:901 +msgid "End Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:705 +msgid "Repeat Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:715 +msgid "Repeat Frequency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:721 +#: classes/class-bsf-aiosrs-pro-schema.php:2527 +msgid "Course Workload" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:727 +msgid "Course Previous Start Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:733 +msgid "Online Course URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:739 +msgid "Course Organizer Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:743 +msgid "The person or organization that is hosting the Course." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:747 +msgid "Course Organizer URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:753 +#: classes/class-bsf-aiosrs-pro-schema.php:927 +msgid "Location Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:757 +msgid "The venue of the course." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:760 +msgid "Location Address" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:776 +#: classes/class-bsf-aiosrs-pro-schema.php:987 +#: classes/class-bsf-aiosrs-pro-schema.php:1628 +#: classes/class-bsf-aiosrs-pro-schema.php:1676 +#: classes/class-bsf-aiosrs-pro-schema.php:1688 +#: classes/class-bsf-aiosrs-pro-schema.php:1711 +#: classes/class-bsf-aiosrs-pro-schema.php:2070 +#: classes/class-bsf-aiosrs-pro-schema.php:2533 +msgid "Currency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:782 +#: classes/class-bsf-aiosrs-pro-schema.php:993 +msgid "Valid From" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:787 +msgid "Offer URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:792 +#: classes/class-bsf-aiosrs-pro-schema.php:971 +msgid "Availability" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:798 +#: classes/class-bsf-aiosrs-pro-schema.php:1003 +msgid "Performer" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:811 +#: classes/class-bsf-aiosrs-pro-schema.php:1348 +#: classes/class-bsf-aiosrs-pro-schema.php:1748 +#: classes/class-bsf-aiosrs-pro-schema.php:1934 +#: classes/class-bsf-aiosrs-pro-schema.php:2081 +msgid "Rating" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:816 +#: classes/class-bsf-aiosrs-pro-schema.php:1353 +#: classes/class-bsf-aiosrs-pro-schema.php:1754 +#: classes/class-bsf-aiosrs-pro-schema.php:1939 +#: classes/class-bsf-aiosrs-pro-schema.php:2087 +msgid "Review Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:819 +#: classes/class-bsf-aiosrs-pro-schema.php:1356 +#: classes/class-bsf-aiosrs-pro-schema.php:1757 +#: classes/class-bsf-aiosrs-pro-schema.php:1942 +#: classes/class-bsf-aiosrs-pro-schema.php:2091 +#: classes/class-bsf-aiosrs-pro-schema.php:2848 +#: classes/class-bsf-aiosrs-pro-schema.php:2980 +#: classes/class-bsf-aiosrs-pro-schema.php:3015 +msgid "The count of total number of reviews. e.g. \"11\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:827 +#: classes/class-bsf-aiosrs-pro-schema.php:1376 +msgid "Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:832 +msgid "Event Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:836 +msgid "Event (General)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:837 +msgid "Business Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:838 +msgid "Childrens Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:839 +msgid "Comedy Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:841 +msgid "Dance Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:842 +msgid "Delivery Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:843 +msgid "Education Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:844 +msgid "EventSeries" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:845 +msgid "Exhibition Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:846 +msgid "Festival" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:847 +msgid "Food Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:848 +msgid "Literary Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:849 +msgid "Music Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:850 +msgid "Publication Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:851 +msgid "Sale Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:852 +msgid "Screening Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:853 +msgid "Social Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:854 +msgid "Sports Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:855 +msgid "Theater Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:856 +msgid "Visual Arts Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:861 +msgid " Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:867 +msgid " Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:872 +msgid " Image/Logo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:877 +#: classes/class-bsf-aiosrs-pro-schema.php:2554 +#: classes/class-bsf-aiosrs-pro-schema.php:2596 +msgid " Status" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:882 +#: classes/class-bsf-aiosrs-pro-schema.php:2559 +#: classes/class-bsf-aiosrs-pro-schema.php:2601 +msgid "" +"The status of the event. If you don't use this field, Google understands " +"the eventStatus to be EventScheduled. " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:886 +#: classes/class-bsf-aiosrs-pro-schema.php:2563 +#: classes/class-bsf-aiosrs-pro-schema.php:2605 +msgid " Attendance Mode" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:891 +#: classes/class-bsf-aiosrs-pro-schema.php:2568 +#: classes/class-bsf-aiosrs-pro-schema.php:2610 +msgid "" +"The location of the event. There are different requirements depending on if " +"the event is happening online or at a physical location." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:906 +msgid "Timezone" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:914 +#: classes/class-bsf-aiosrs-pro-schema.php:2583 +msgid "Previous Start Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:920 +#: classes/class-bsf-aiosrs-pro-schema.php:2589 +msgid "Online Event URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:931 +msgid "" +"The detailed name of the place or venue where the event is being held. This " +"property is only recommended for events that take place at a physical " +"location." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:934 +#: classes/class-bsf-aiosrs-pro-schema.php:1137 +#: classes/class-bsf-aiosrs-pro-schema.php:1270 +#: classes/class-bsf-aiosrs-pro-schema.php:1495 +#: classes/class-bsf-aiosrs-pro-schema.php:2018 +msgid "Street Address" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:941 +#: classes/class-bsf-aiosrs-pro-schema.php:1143 +#: classes/class-bsf-aiosrs-pro-schema.php:1276 +#: classes/class-bsf-aiosrs-pro-schema.php:1501 +#: classes/class-bsf-aiosrs-pro-schema.php:1997 +msgid "Locality" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:948 +#: classes/class-bsf-aiosrs-pro-schema.php:1149 +#: classes/class-bsf-aiosrs-pro-schema.php:1282 +#: classes/class-bsf-aiosrs-pro-schema.php:1507 +#: classes/class-bsf-aiosrs-pro-schema.php:2013 +msgid "Postal Code" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:955 +#: classes/class-bsf-aiosrs-pro-schema.php:1155 +#: classes/class-bsf-aiosrs-pro-schema.php:1288 +#: classes/class-bsf-aiosrs-pro-schema.php:1513 +#: classes/class-bsf-aiosrs-pro-schema.php:2002 +msgid "Region" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:962 +#: classes/class-bsf-aiosrs-pro-schema.php:1161 +#: classes/class-bsf-aiosrs-pro-schema.php:1294 +#: classes/class-bsf-aiosrs-pro-schema.php:1519 +#: classes/class-bsf-aiosrs-pro-schema.php:2007 +msgid "Country" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:975 +msgid "" +"The availability of this event, for example In stock, Out of stock, " +"Pre-order, etc." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:998 +msgid "Online Ticket URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1008 +#: classes/class-bsf-aiosrs-pro-schema.php:2697 +msgid "Organizer Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1013 +#: classes/class-bsf-aiosrs-pro-schema.php:2702 +msgid "The person or organization that is hosting the event." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1017 +#: classes/class-bsf-aiosrs-pro-schema.php:2706 +msgid "Organizer URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1028 +msgid "Job Posting" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1033 +#: classes/class-bsf-aiosrs-pro-schema.php:1479 +msgid "Job Title" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1039 +msgid "Hiring Organization" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1045 +msgid "Hiring Organization URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1049 +msgid "" +"A referenced URL of the organization page to identity information. E.g. The " +"URL of the Organization Wikipedia page, Wikidata entry, or official website." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1052 +msgid "Hiring Organization Logo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1057 +msgid "Industry" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1062 +msgid "Employment Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1068 +msgid "Job Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1074 +msgid "Date Posted" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1080 +msgid "Valid Through" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1085 +msgid "Education" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1088 +msgid "Educational background needed for the position or Occupation." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1091 +msgid "Job Experience" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1096 +msgid "Qualifications" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1099 +msgid "" +"Specific qualifications required for this role or Occupation.For example A " +"diploma, academic degree, certification." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1102 +msgid "Responsibilities" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1107 +msgid "Skills" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1112 +msgid "Work Hours" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1117 +msgid "Job Location Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1121 +msgid "" +"Use value \"TELECOMMUTE\" for jobs in which the employee may or must work " +"remotely 100% of the time." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1124 +msgid "Remote Location" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1168 +msgid "Base Salary" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1173 +msgid "Min Salary" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1178 +msgid "Max Salary" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1183 +msgid "Salary In Currency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1189 +msgid "Salary Per Unit" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1193 +msgid "" +"A string or text indicating the unit of salary measurement. For example " +"MONTH, YEAR." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1200 +msgid "Local Business" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1205 +msgid "Business Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1211 +msgid "Local Business Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1215 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:64 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:292 template/settings.php:16 +#: template/settings.php:33 +msgid "General" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1216 +msgid "Animal Shelter" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1217 +msgid "Automotive" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1218 +msgid "Child Care" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1219 +msgid "Dentist" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1220 +msgid "Dry Cleaning Or Laundry" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1221 +msgid "Emergency Service" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1222 +msgid "Employment Agency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1223 +msgid "Entertainment" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1224 +msgid "Financial Service" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1225 +msgid "Food Establishment" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1226 +msgid "Government Office" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1227 +msgid "Health And Beauty" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1228 +msgid "Home And Construction" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1229 +msgid "Internet Cafe" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1230 +msgid "Legal Service" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1231 +msgid "Library" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1232 +msgid "Locksmith" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1233 +msgid "Lodging" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1234 +msgid "Medical Business" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1235 +msgid "Radio Station" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1236 +msgid "Real Estate Agent" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1237 +msgid "Recycling Center" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1238 +msgid "Self Storage" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1239 +msgid "Shopping Center" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1240 +msgid "Sports Activity Location" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1241 +msgid "Store" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1242 +msgid "Television Station" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1243 +msgid "Tourist Information Center" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1244 +msgid "Travel Agency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1248 +msgid "Business Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1254 +#: classes/class-bsf-aiosrs-pro-schema.php:1469 +#: classes/class-bsf-aiosrs-pro-schema.php:2023 +msgid "Telephone" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1259 +#: classes/class-bsf-aiosrs-pro-schema.php:2028 +msgid "Price Range" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1262 +msgid "" +"The relative price range of a business, commonly specified by either a " +"numerical range (for example, \"$10-15\") or a normalized number of " +"currency signs (for example, \"$$$\")" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1302 +msgid "Hours Specification" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1306 +msgid "Day Of Week" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1311 +msgid "Here, you can select multiple days. e.g. \"11\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1314 +msgid "Opens" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1320 +msgid "Closes" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1328 +msgid " Latitude" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1335 +msgid "The latitude of the business location. . e.g. \"37.293058\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1338 +msgid "Longitude" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1345 +msgid "The longitude of the business location. e.g. \"-121.988331\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1363 +#: classes/class-bsf-aiosrs-pro-schema.php:1717 +msgid "Review" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1368 +msgid "Review Item Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1372 +msgid "Select Item Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1373 +#: classes/class-bsf-aiosrs-pro-schema.php:1542 +msgid "Product" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1377 +msgid "Local business" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1378 +#: classes/class-bsf-aiosrs-pro-schema.php:1764 +msgid "Recipe" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1379 +#: classes/class-bsf-aiosrs-pro-schema.php:2037 +msgid "Software Application" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1380 +msgid "Movie" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1381 +#: classes/class-bsf-aiosrs-pro-schema.php:1416 +#: classes/class-bsf-aiosrs-pro-schema.php:1726 +#: classes/class-bsf-aiosrs-pro-schema.php:1791 +#: classes/class-bsf-aiosrs-pro-schema.php:2408 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:303 template/settings.php:58 +msgid "Organization" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1386 +#: classes/class-bsf-aiosrs-pro-schema.php:1741 +msgid "Review Body" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1392 +msgid "Review Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1398 +msgid "Review Rating" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1404 +msgid "Rating Value" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1408 +msgid "" +"A numerical quality rating for the item, either a number, fraction, or " +"percentage (for example, 4, 60%, or 6 / 10)." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1411 +#: classes/class-bsf-aiosrs-pro-schema.php:1721 +msgid "Reviewer Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1415 +#: classes/class-bsf-aiosrs-pro-schema.php:1434 +#: classes/class-bsf-aiosrs-pro-schema.php:1725 +#: classes/class-bsf-aiosrs-pro-schema.php:1790 +#: classes/class-bsf-aiosrs-pro-schema.php:2407 +msgid "Person" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1420 +#: classes/class-bsf-aiosrs-pro-schema.php:1730 +msgid "Reviewer Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1440 +msgid "Person Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1446 +msgid "Gender" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1452 +msgid "DOB" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1457 +msgid "Member Of" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1460 +msgid "" +"An Organization (or ProgramMembership) to which this Person or Organization " +"belongs." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1463 +msgid "Person Email" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1474 +msgid "Photograph" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1484 +msgid "Homepage URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1489 +msgid "Nationality" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1547 +#: classes/class-bsf-aiosrs-pro-schema.php:2774 +msgid "Product Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1553 +msgid "Product Brand" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1558 +msgid "Product Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1564 +msgid "Product URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1569 +#: classes/class-bsf-aiosrs-pro-schema.php:2796 +msgid "Product Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1574 +#: classes/class-bsf-aiosrs-pro-schema.php:2802 +msgid "Product SKU" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1577 +msgid "" +"The Stock Keeping Unit (SKU) is a unique numerical identifying number that " +"refers to a specific stock item in a retailer's inventory or product " +"catalog." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1580 +#: classes/class-bsf-aiosrs-pro-schema.php:2808 +msgid "Product MPN" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1583 +#: classes/class-bsf-aiosrs-pro-schema.php:2811 +msgid "" +"The Manufacturer Part Number (MPN) of the product, or the product to which " +"the offer refers. e.g. \"925872\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1586 +#: classes/class-bsf-aiosrs-pro-schema.php:2814 +msgid "Product Availability" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1592 +msgid "Merchant Return Policy" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1596 +msgid "Applicable Country" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1601 +msgid "Return Policy Category" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1607 +msgid "Merchant Return Days" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1612 +msgid "Return Fees" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1618 +msgid "Return Method" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1623 +msgid "Return Shipping Fees Amount" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1636 +msgid "Shipping Details" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1640 +msgid "Shipping Destination" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1646 +msgid "Min Handling Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1651 +msgid "Unit Code" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1656 +msgid "Max Handling Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1661 +msgid "Min Transit Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1666 +msgid "Max Transit Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1671 +msgid "Shipping Rate" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1682 +msgid "Shipping Cost" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1696 +msgid "Price Valid Until" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1699 +msgid "" +"The date after which the price will no longer be available. e.g. " +"\"31/12/2021 09:00 AM\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1702 +#: classes/class-bsf-aiosrs-pro-schema.php:2825 +msgid "Product Price" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1736 +#: classes/class-bsf-aiosrs-pro-schema.php:2840 +msgid "Product Rating" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1751 +msgid "" +"To maintain accurate product information, kindly provide at least one " +"rating." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1769 +#: classes/class-bsf-aiosrs-pro-schema.php:2855 +msgid "Recipe Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1775 +#: classes/class-bsf-aiosrs-pro-schema.php:2861 +msgid "Recipe Photo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1781 +#: classes/class-bsf-aiosrs-pro-schema.php:2867 +msgid "Recipe Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1786 +msgid "Author Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1800 +msgid "Preparation Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1805 +msgid "Cook Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1810 +msgid "Keywords" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1813 +#: classes/class-bsf-aiosrs-pro-schema.php:2890 +msgid "e.g. \"winter apple pie\", \"nutmeg crust\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1816 +#: classes/class-bsf-aiosrs-pro-schema.php:2893 +msgid "Recipe Category" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1819 +#: classes/class-bsf-aiosrs-pro-schema.php:2896 +msgid "e.g. \"dinner\", \"entree\", or \"dessert\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1822 +#: classes/class-bsf-aiosrs-pro-schema.php:2899 +msgid "Recipe Cuisine" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1825 +#: classes/class-bsf-aiosrs-pro-schema.php:2902 +msgid "e.g. \"French\", \"Indian\", or \"American\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1828 +#: classes/class-bsf-aiosrs-pro-schema.php:2905 +msgid "Recipe Calories" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1831 +#: classes/class-bsf-aiosrs-pro-schema.php:2908 +msgid "The number of calories in the recipe." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1834 +#: classes/class-bsf-aiosrs-pro-schema.php:2911 +msgid "Recipe Ingredients" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1837 +#: classes/class-bsf-aiosrs-pro-schema.php:2914 +msgid "Ingredient used in the recipe. Separate multiple ingredients with comma(,)." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1840 +msgid "Recipe Yield" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1846 +msgid "Recipe Instructions" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1850 +msgid "Instructions Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1856 +msgid "Instructions Step" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1861 +msgid "Instructions URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1867 +msgid "Instructions Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1876 +msgid "Recipe Video" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1881 +msgid "Video Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1887 +#: classes/class-bsf-aiosrs-pro-schema.php:2109 +msgid "Video Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1893 +#: classes/class-bsf-aiosrs-pro-schema.php:2205 +msgid "Thumbnail URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1899 +#: classes/class-bsf-aiosrs-pro-schema.php:2137 +#: classes/class-bsf-aiosrs-pro-schema.php:2381 +msgid "Content URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1905 +#: classes/class-bsf-aiosrs-pro-schema.php:2142 +msgid "Embed URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1910 +msgid "Duration" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1915 +msgid "Upload Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1921 +msgid "Expires On" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1926 +msgid "Interaction Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1929 +#: classes/class-bsf-aiosrs-pro-schema.php:2160 +msgid "The number of times the video has been watched." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1949 +msgid "Service" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1954 +msgid "Service Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1960 +msgid "Service Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1964 +msgid "" +"The type of service being offered, e.g. Broadcast Service, Cable Or " +"Satellite Service, etc." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1967 +msgid "Service Area" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1970 +msgid "The geographic area where a service or offered item is provided." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1973 +msgid "Service Provider Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1979 +msgid "Service Provider Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1983 +msgid "The service provider or service operator Image ." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1986 +msgid "Service Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1991 +msgid "Service Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:1994 +msgid "Here,you can add specific service image." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2042 +msgid "Application Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2048 +msgid "Application Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2054 +msgid "Operating System" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2057 +#: classes/class-bsf-aiosrs-pro-schema.php:2996 +msgid "" +"Software for the operating system, for example, \"Windows 7\", \"OSX " +"10.6\", \"Android 1.6\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2076 +msgid "Application Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2098 +msgid "Video Object" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2103 +msgid "Video Title" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2115 +msgid "Video Thumbnail" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2121 +msgid "Video Upload Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2147 +msgid "Video Duration" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2152 +msgid "Video Expires On" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2157 +msgid "Video Interaction Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2163 +msgid "Clips" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2168 +msgid "Clip Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2173 +msgid "Clip Start Offset" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2176 +msgid "" +"The start time of the clip expressed as the number of seconds from the " +"beginning of the work." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2179 +msgid "Clip End Offset" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2182 +msgid "" +"The end time of the clip expressed as the number of seconds from the " +"beginning of the work." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2185 +msgid "Clip URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2188 +#: classes/class-bsf-aiosrs-pro-schema.php:2202 +msgid "A URL that points to the start time of the clip." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2193 +msgid "Seek To Action Start Offset" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2196 +msgid "The number of seconds to skip to." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2199 +msgid "Seek To Action target URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2211 +msgid "Regions Allowed" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2216 +msgid "Is Live Broadcast" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2221 +msgid "Live Broadcast Start Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2226 +msgid "Live Broadcast End Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2236 +msgid "FAQ" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2242 +msgid "Question-Answer" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2246 +msgid "Question" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2252 +msgid "Answer" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2264 +msgid "How-to" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2269 +#: classes/class-bsf-aiosrs-pro-schema.php:2291 +#: classes/class-bsf-aiosrs-pro-schema.php:2304 +msgid "Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2280 +msgid "Total Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2283 +msgid "" +"The total time required to perform instructions or a direction (including " +"time to prepare the supplies)." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2286 +msgid "Materials" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2288 +msgid "" +"The supply property lists the item(s) “consumed when performing " +"instructions or a direction.â€" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2299 +msgid "Tools" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2301 +msgid "" +"The tool property lists the item(s) used (but not consumed) when performing " +"instructions or a direction." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2312 +#: wpsp-blocks/classes/class-bsf-sp-config.php:227 +msgid "Steps" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2315 +msgid "Google needs at least two steps." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2318 +msgid "Step Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2324 +msgid "Step Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2330 +msgid "Step URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2336 +msgid "Step Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2349 +#: classes/class-bsf-aiosrs-pro-schema.php:2354 +msgid "Custom Markup" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2357 +msgid "" +"Be sure to add custom schema markup in JSON-LD format.\n" +"\t\t\t\t\t\t\t\tAs the custom schema markup in JSON-LD format, make sure to " +"add it in script tag.\n" +"\t\t\t\t\t\t\t\tValidate schema markup with the Structured Data Testing " +"Tool or Rich Results Test before adding to the website." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2370 +#: classes/class-bsf-aiosrs-pro-schema.php:2376 +msgid "Image License" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2378 +msgid "" +"Include the license property for your image to be eligible to be shown with " +"the Licensable badge" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2387 +msgid "License" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2393 +msgid "Acquire License Page" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2398 +msgid "Credit Text" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2403 +msgid "Creator Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2412 +msgid "Creator" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2417 +msgid "Copy Right Notice" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2435 +msgid "Book Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2441 +msgid "Book Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2448 +msgid "Book ISBN" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2455 +msgid "Book Author Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2461 +msgid "Same As" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2471 +msgid "Course Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2477 +msgid "Course Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2482 +msgid "Course Organization Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2519 +msgid "Course Attendance Mode" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2524 +msgid "" +"The location of the Course Instance. There are different requirements " +"depending on if the Course is happening online or at a physical location." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2543 +msgid "Event Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2549 +msgid "Event Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2572 +msgid "Event Start Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2578 +msgid "Event End Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2614 +msgid "Event Location Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2620 +msgid "Event Street Address" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2627 +msgid "Event Locality" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2634 +msgid "Event Postal Code" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2641 +msgid "Event Region" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2648 +msgid "Event Country" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2656 +msgid "Event Offer Availability" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2662 +msgid "Event Offer Price" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2671 +msgid "Event Currency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2677 +msgid "Event Offer Valid From" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2682 +msgid "Event Ticket Link" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2687 +msgid "Event Performer" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2692 +msgid "Event Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2718 +msgid "Local Business Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2724 +msgid "Local Business Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2730 +msgid "Local Business Telephone" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2735 +msgid "Local Business Street Address" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2741 +msgid "Local Business Locality" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2747 +msgid "Local Business Postal Code" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2753 +msgid "Local Business Region" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2759 +msgid "Local Business Country" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2765 +msgid "Local Business Price Range" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2780 +msgid "Product Brand Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2785 +msgid " Product Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2791 +msgid " Product URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2805 +msgid "" +"The Stock Keeping Unit (SKU), a merchant-specific identifier for a product " +"or service, or the product e.g. \"0446310786\"" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2820 +msgid "Product Price Valid Until" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2834 +msgid "Product Currency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2845 +msgid "Product Review Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2872 +msgid "Recipe Author Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2877 +msgid "Recipe Preparation Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2882 +msgid "Recipe Cook Time" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2887 +msgid "Recipe Keywords" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2917 +msgid "Recipe Instructions Step" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2920 +msgid "" +"Recipe Instructions Steps used in the recipe. Separate multiple " +"Instructions Steps with comma(,)." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2923 +msgid "Recipe Video Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2929 +msgid "Recipe Video Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2935 +msgid "Recipe Video Thumbnail Url" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2941 +msgid "Recipe Video Content URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2946 +msgid "Recipe Video Embed URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2951 +msgid "Recipe Video Duration" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2956 +msgid "Recipe Video Upload Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2962 +msgid "Recipe Video Expires On" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2967 +msgid "Recipe Video Interaction Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2972 +msgid "Recipe Video Rating" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2977 +msgid "Recipe Video Review Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2987 +msgid "Software Application Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2993 +msgid "Software Application Operating System" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:2999 +msgid "Software Application Category" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3005 +msgid "Software Application Rating" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3011 +msgid "Software Application Review Count" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3018 +msgid "Software Application Price" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3028 +msgid "Software Application Currency" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3038 +msgid "Movie Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3044 +msgid "Movie Description" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3050 +msgid "Movie SameAs" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3057 +msgid "Movie Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3063 +msgid "Movie Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3068 +msgid "Movie Director Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3077 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:356 template/settings.php:111 +msgid "Organization Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3083 +msgid "Organization Street Address" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3088 +msgid "Organization Locality" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3093 +msgid "Organization Postal Code" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3098 +msgid "Organization Region" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3103 +msgid "Organization Country" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3129 +#: classes/class-bsf-aiosrs-pro-schema.php:3167 +msgid "Site Meta" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3131 +msgid "Site Title" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3132 +msgid "Tagline" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3133 +msgid "Site URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3137 +#: classes/class-bsf-aiosrs-pro-schema.php:3173 +msgid "Post Meta (Basic Fields)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3139 +#: classes/lib/class-bsf-custom-post-list-table.php:132 +msgid "Title" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3140 +msgid "Content" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3141 +msgid "Excerpt" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3142 +msgid "Permalink" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3144 +msgid "Author First Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3145 +msgid "Author Last Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3147 +msgid "Publish Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3148 +msgid "Last Modify Date" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3152 +#: classes/class-bsf-aiosrs-pro-schema.php:3180 +msgid "Add Custom Info" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3154 +msgid "Fixed Text" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3155 +#: classes/class-bsf-aiosrs-pro-schema.php:3184 +msgid "New Custom Field" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3159 +#: classes/class-bsf-aiosrs-pro-schema.php:3188 +msgid "All Other Custom Fields" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3161 +#: classes/class-bsf-aiosrs-pro-schema.php:3190 +msgid "Select Other Custom Fields Here" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3169 +msgid "Logo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3175 +msgid "Featured Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3176 +msgid "Author Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3182 +msgid "Fixed Image" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3183 +msgid "Image URL" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3256 +#: classes/class-bsf-aiosrs-pro-schema.php:3263 +msgid "Advanced Custom Fields" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3331 +msgid "Schema Settings" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3427 +#. translators: %s post title. +msgid "Schema requires mapping of %s meta fields." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3430 +#. translators: %s post title. +msgid "Schema requires mapping of %s meta field." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3516 +msgid "Schema Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3518 +msgid "Select schema type." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3542 +msgid "Set Target Location" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3543 +msgid "Select location where this schema should be integrated." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3550 +msgid "Add target locations where this Schema should appear." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3571 +msgid "This Schema will not appear at these locations." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3592 +msgid "All Schema Fields" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3593 +msgid "" +"Below are the fields/properties that Google Requires you to fill so that " +"the schema will work properly." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3608 +msgid "Guidelines" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3615 +#. translators: %s Schema type +msgid "Read Guidelines for %s Schema" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:3865 +#: template/breadcrumb-settings.php:81 +msgid "None" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4104 +msgid "Discontinued" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4105 +msgid "In Stock" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4106 +msgid "In Store Only" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4107 +msgid "Limited Availability" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4108 +msgid "Online Only" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4109 +msgid "Out Of Stock" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4110 +msgid "Pre Order" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4111 +msgid "Pre Sale" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4112 +msgid "Sold Out" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4113 +msgid "Back Order" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4123 +msgid "EBook" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4124 +msgid "Hardcover" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4125 +msgid "Paperback" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4126 +msgid "AudioBook" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4134 +#: classes/class-bsf-aiosrs-pro-schema.php:4154 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:604 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:620 +#: template/breadcrumb-settings.php:66 template/settings.php:388 +#: template/settings.php:501 template/settings.php:518 +#: template/wpsp-advanced-settings.php:60 +#: template/wpsp-advanced-settings.php:153 +#: template/wpsp-advanced-settings.php:177 +#: template/wpsp-advanced-settings.php:200 +msgid "Yes" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4135 +#: classes/class-bsf-aiosrs-pro-schema.php:4155 +#: template/wpsp-advanced-settings.php:61 +msgid "No" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4143 +msgid "Free" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4144 +msgid "Partially Free" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4145 +msgid "Subscription" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4146 +msgid "Paid" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4163 +msgid "Finite Return Window" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4164 +msgid "Not Permitted" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4165 +msgid "Unlimited Window" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4173 +msgid "Free Return" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4174 +msgid "Customer Responsibility" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4175 +msgid "Return Shipping Fees" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4183 +msgid "Return at Kiosk" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4184 +msgid "Return by Mail" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4185 +msgid "Return in Store" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4193 +#: classes/lib/class-bsf-custom-post-list-table.php:377 +msgid "Scheduled" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4194 +msgid "Rescheduled" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4195 +msgid "Postponed" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4196 +msgid "Moved Online" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4197 +msgid "Cancelled" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4205 +msgid "Online" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4206 +#: classes/class-bsf-aiosrs-pro-schema.php:4216 +msgid "Physical Location" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4207 +#: classes/class-bsf-aiosrs-pro-schema.php:4218 +msgid "Mix Of Online & Physical Locations" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4217 +msgid "Online Event" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4233 +msgid "DesktopWebPlatform" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4234 +msgid "MobileWebPlatform" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4235 +msgid "AndroidPlatform" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4236 +msgid "IOSPlatform" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4244 +msgid "Monday" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4245 +msgid "Tuesday" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4246 +msgid "Wednesday" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4247 +msgid "Thursday" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4248 +msgid "Friday" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4249 +msgid "Saturday" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4250 +msgid "Sunday" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4258 +msgid "Afghanistan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4259 +msgid "Ã…land Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4260 +msgid "Albania" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4261 +msgid "Algeria" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4262 +msgid "American Samoa" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4263 +msgid "Andorra" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4264 +msgid "Angola" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4265 +msgid "Anguilla" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4266 +msgid "Antarctica" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4267 +msgid "Antigua and Barbuda" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4268 +msgid "Argentina" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4269 +msgid "Armenia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4270 +msgid "Aruba" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4271 +msgid "Australia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4272 +msgid "Austria" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4273 +msgid "Azerbaijan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4274 +msgid "Bahrain" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4275 +msgid "Bahamas" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4276 +msgid "Bangladesh" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4277 +msgid "Barbados" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4278 +msgid "Belarus" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4279 +msgid "Belgium" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4280 +msgid "Belize" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4281 +msgid "Benin" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4282 +msgid "Bermuda" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4283 +msgid "Bhutan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4284 +msgid "Bonaire, Sint Eustatius and Saba" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4285 +msgid "Bosnia and Herzegovina" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4286 +msgid "Botswana" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4287 +msgid "Bouvet Island" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4288 +msgid "Brazil" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4289 +msgid "British Indian Ocean Territory" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4290 +msgid "Brunei Darussalam" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4291 +msgid "Bulgaria" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4292 +msgid "Burkina Faso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4293 +msgid "Burundi" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4294 +msgid "Cambodia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4295 +msgid "Cameroon" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4296 +msgid "Canada" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4297 +msgid "Cape Verde" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4298 +msgid "Cayman Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4299 +msgid "Central African Republic" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4300 +msgid "Chad" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4301 +msgid "Chile" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4302 +msgid "China" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4303 +msgid "Christmas Island" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4304 +msgid "Cocos (Keeling) Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4305 +msgid "Colombia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4306 +msgid "Comoros" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4307 +msgid "Congo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4308 +msgid "Congo, the Democratic Republic of the" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4309 +msgid "Cook Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4310 +msgid "Costa Rica" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4311 +msgid "Ivory Coast" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4312 +msgid "Croatia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4313 +msgid "Cuba" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4314 +msgid "Curaçao" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4315 +msgid "Cyprus" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4316 +msgid "Czech Republic" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4317 +msgid "Denmark" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4318 +msgid "Djibouti" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4319 +msgid "Dominica" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4320 +msgid "Dominican Republic" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4321 +msgid "Ecuador" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4322 +msgid "Egypt" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4323 +msgid "El Salvador" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4324 +msgid "Equatorial Guinea" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4325 +msgid "Eritrea" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4326 +msgid "Estonia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4327 +msgid "Ethiopia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4328 +msgid "Falkland Islands (Malvinas)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4329 +msgid "Faroe Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4330 +msgid "Federated States of Micronesia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4331 +msgid "Fiji" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4332 +msgid "Finland" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4333 +msgid "France" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4334 +msgid "French Guiana" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4335 +msgid "French Polynesia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4336 +msgid "French Southern Territories" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4337 +msgid "Gabon" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4338 +msgid "Gambia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4339 +msgid "Georgia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4340 +msgid "Germany" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4341 +msgid "Ghana" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4342 +msgid "Gibraltar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4343 +msgid "Greece" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4344 +msgid "Greenland" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4345 +msgid "Grenada" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4346 +msgid "Guadeloupe" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4347 +msgid "Guam" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4348 +msgid "Guatemala" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4349 +msgid "Guernsey" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4350 +msgid "Guinea" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4351 +msgid "Guinea-Bissau" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4352 +msgid "Guyana" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4353 +msgid "Haiti" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4354 +msgid "Heard Island and McDonald Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4355 +msgid "Holy See (Vatican City State)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4356 +msgid "Honduras" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4357 +msgid "Hong Kong" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4358 +msgid "Hungary" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4359 +msgid "Iceland" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4360 +msgid "India" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4361 +msgid "Indonesia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4362 +msgid "Iran, Islamic Republic of" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4363 +msgid "Iraq" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4364 +msgid "Ireland" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4365 +msgid "Isle of Man" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4366 +msgid "Israel" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4367 +msgid "Italy" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4368 +msgid "Jamaica" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4369 +msgid "Japan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4370 +msgid "Jersey" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4371 +msgid "Jordan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4372 +msgid "Kazakhstan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4373 +msgid "Kenya" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4374 +msgid "Kiribati" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4375 +msgid "Korea, Democratic People's Republic of" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4376 +msgid "Korea, Republic of" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4377 +msgid "Kuwait" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4378 +msgid "Kyrgyzstan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4379 +msgid "Laos" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4380 +msgid "Latvia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4381 +msgid "Lebanon" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4382 +msgid "Lesotho" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4383 +msgid "Liberia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4384 +msgid "Libya" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4385 +msgid "Liechtenstein" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4386 +msgid "Lithuania" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4387 +msgid "Luxembourg" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4388 +msgid "Macao" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4389 +msgid "Madagascar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4390 +msgid "Malawi" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4391 +msgid "Malaysia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4392 +msgid "Maldives" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4393 +msgid "Mali" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4394 +msgid "Malta" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4395 +msgid "Marshall Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4396 +msgid "Martinique" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4397 +msgid "Mauritania" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4398 +msgid "Mauritius" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4399 +msgid "Mayotte" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4400 +msgid "Mexico" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4401 +msgid "Monaco" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4402 +msgid "Mongolia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4403 +msgid "Montenegro" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4404 +msgid "Montserrat" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4405 +msgid "Morocco" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4406 +msgid "Mozambique" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4407 +msgid "Myanmar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4408 +msgid "Namibia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4409 +msgid "Nauru" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4410 +msgid "Nepal" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4411 +msgid "Netherlands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4412 +msgid "New Caledonia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4413 +msgid "New Zealand" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4414 +msgid "Nicaragua" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4415 +msgid "Niger" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4416 +msgid "Nigeria" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4417 +msgid "Niue" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4418 +msgid "Norfolk Island" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4419 +msgid "Northern Mariana Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4420 +msgid "Norway" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4421 +msgid "Oman" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4422 +msgid "Pakistan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4423 +msgid "Palau" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4424 +msgid "Palestine, State of" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4425 +msgid "Panama" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4426 +msgid "Papua New Guinea" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4427 +msgid "Paraguay" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4428 +msgid "Peru" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4429 +msgid "Philippines" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4430 +msgid "Pitcairn" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4431 +msgid "Plurinational State of Bolivia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4432 +msgid "Poland" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4433 +msgid "Portugal" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4434 +msgid "Puerto Rico" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4435 +msgid "Qatar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4436 +msgid "Réunion" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4437 +msgid "Republic of Macedonia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4438 +msgid "Republic of Moldova" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4439 +msgid "Romania" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4440 +msgid "Russian Federation" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4441 +msgid "Rwanda" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4442 +msgid "Saint Barthélemy" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4443 +msgid "Saint Helena, Ascension and Tristan da Cunha" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4444 +msgid "Saint Kitts and Nevis" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4445 +msgid "Saint Lucia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4446 +msgid "Saint Martin (French part" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4447 +msgid "Saint Pierre and Miquelon" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4448 +msgid "Saint Vincent and the Grenadines" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4449 +msgid "Samoa" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4450 +msgid "San Marino" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4451 +msgid "Sao Tome and Principe" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4452 +msgid "Saudi Arabia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4453 +msgid "Senegal" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4454 +msgid "Serbia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4455 +msgid "Seychelles" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4456 +msgid "Sierra Leone" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4457 +msgid "Singapore" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4458 +msgid "Sint Maarten (Dutch part)" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4459 +msgid "Slovakia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4460 +msgid "Slovenia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4461 +msgid "Solomon Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4462 +msgid "Somalia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4463 +msgid "South Africa" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4464 +msgid "South Georgia and the South Sandwich Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4465 +msgid "South Sudan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4466 +msgid "Spain" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4467 +msgid "Sri Lanka" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4468 +msgid "Sudan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4469 +msgid "Suriname" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4470 +msgid "Svalbard and Jan Mayen" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4471 +msgid "Swaziland" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4472 +msgid "Sweden" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4473 +msgid "Switzerland" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4474 +msgid "Syrian Arab Republic" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4475 +msgid "Taiwan, Province of China" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4476 +msgid "Tajikistan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4477 +msgid "Tanzania, United Republic of" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4478 +msgid "Thailand" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4479 +msgid "Timor-Leste" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4480 +msgid "Togo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4481 +msgid "Tokelau" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4482 +msgid "Tonga" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4483 +msgid "Trinidad and Tobago" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4484 +msgid "Tunisia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4485 +msgid "Turkey" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4486 +msgid "Turkmenistan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4487 +msgid "Turks and Caicos Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4488 +msgid "Tuvalu" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4489 +msgid "Uganda" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4490 +msgid "Ukraine" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4491 +msgid "United Arab Emirates" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4492 +msgid "United Kingdom" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4493 +msgid "United States" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4494 +msgid "United States Minor Outlying Islands" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4495 +msgid "Uruguay" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4496 +msgid "Uzbekistan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4497 +msgid "Vanuatu" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4498 +msgid "Venezuela, Bolivarian Republic of" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4499 +msgid "Viet Nam" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4500 +msgid "Virgin Islands, British" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4501 +msgid "Virgin Islands, U.S" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4502 +msgid "Wallis and Futuna" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4503 +msgid "Western Sahara" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4504 +msgid "Yemen" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4505 +msgid "Zambia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4506 +msgid "Zimbabwe" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4514 +msgid "FULL TIME" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4515 +msgid "PART TIME" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4516 +msgid "CONTRACTOR" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4517 +msgid "TEMPORARY" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4518 +msgid "INTERN" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4519 +msgid "VOLUNTEER" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4520 +msgid "PER DIEM" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4521 +msgid "OTHER" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4529 +msgid "Afghan Afghani" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4530 +msgid "Albanian Lek" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4531 +msgid "Algerian Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4532 +msgid "Angolan Kwanza" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4533 +msgid "Argentine Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4534 +msgid "Armenian Dram" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4535 +msgid "Aruban Florin" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4536 +msgid "Australian Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4537 +msgid "Azerbaijani Manat" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4538 +msgid "Bahamian Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4539 +msgid "Bahraini Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4540 +msgid "Bangladeshi Taka" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4541 +msgid "Barbadian Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4542 +msgid "Belarusian Ruble" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4543 +msgid "Belgian Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4544 +msgid "Belize Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4545 +msgid "Bermudan Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4546 +msgid "Bhutanese Ngultrum" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4547 +msgid "Bitcoin" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4548 +msgid "Bolivian Boliviano" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4549 +msgid "Bosnia-Herzegovina Convertible Mark" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4550 +msgid "Botswanan Pula" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4551 +msgid "Brazilian Real" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4552 +msgid "British Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4553 +msgid "Brunei Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4554 +msgid "Bulgarian Lev" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4555 +msgid "Burundian Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4556 +msgid "Cambodian Riel" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4557 +msgid "Canadian Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4558 +msgid "Cape Verdean Escudo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4559 +msgid "Cayman Islands Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4560 +msgid "Central African CFA Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4561 +msgid "CFP Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4562 +msgid "Chilean Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4563 +msgid "Chinese Yuan" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4564 +msgid "Colombian Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4565 +msgid "Comorian Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4566 +msgid "Congolese Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4567 +msgid "Costa Rican Colón" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4568 +msgid "Croatian Kuna" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4569 +msgid "Cuban Convertible Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4570 +msgid "Czech Koruna" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4571 +msgid "Danish Krone" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4572 +msgid "Djiboutian Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4573 +msgid "Dominican Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4574 +msgid "East Caribbean Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4575 +msgid "Egyptian Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4576 +msgid "Eritrean Nakfa" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4577 +msgid "Estonian Kroon" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4578 +msgid "Ethiopian Birr" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4579 +msgid "Euro" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4580 +msgid "Falkland Islands Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4581 +msgid "Fijian Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4582 +msgid "Gambian Dalasi" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4583 +msgid "Georgian Lari" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4584 +msgid "German Mark" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4585 +msgid "Ghanaian Cedi" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4586 +msgid "Gibraltar Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4587 +msgid "Greek Drachma" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4588 +msgid "Guatemalan Quetzal" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4589 +msgid "Guinean Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4590 +msgid "Guyanaese Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4591 +msgid "Haitian Gourde" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4592 +msgid "Honduran Lempira" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4593 +msgid "Hong Kong Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4594 +msgid "Hungarian Forint" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4595 +msgid "Icelandic Króna" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4596 +msgid "Indian Rupee" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4597 +msgid "Indonesian Rupiah" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4598 +msgid "Iranian Rial" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4599 +msgid "Iraqi Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4600 +msgid "Israeli New Shekel" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4601 +msgid "Italian Lira" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4602 +msgid "Jamaican Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4603 +msgid "Japanese Yen" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4604 +msgid "Jordanian Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4605 +msgid "Kazakhstani Tenge" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4606 +msgid "Kenyan Shilling" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4607 +msgid "Kuwaiti Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4608 +msgid "Kyrgystani Som" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4609 +msgid "Laotian Kip" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4610 +msgid "Latvian Lats" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4611 +msgid "Lebanese Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4612 +msgid "Lesotho Loti" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4613 +msgid "Liberian Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4614 +msgid "Libyan Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4615 +msgid "Lithuanian Litas" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4616 +msgid "Macanese Pataca" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4617 +msgid "Macedonian Denar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4618 +msgid "Malagasy Ariary" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4619 +msgid "Malawian Kwacha" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4620 +msgid "Malaysian Ringgit" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4621 +msgid "Maldivian Rufiyaa" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4622 +msgid "Mauritanian Ouguiya" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4623 +msgid "Mauritian Rupee" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4624 +msgid "Mexican Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4625 +msgid "Moldovan Leu" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4626 +msgid "Mongolian Tugrik" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4627 +msgid "Moroccan Dirham" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4628 +msgid "Mozambican Metical" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4629 +msgid "Myanmar Kyat" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4630 +msgid "Namibian Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4631 +msgid "Nepalese Rupee" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4632 +msgid "Netherlands Antillean Guilder" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4633 +msgid "New Taiwan Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4634 +msgid "New Zealand Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4635 +msgid "Nicaraguan Córdoba" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4636 +msgid "Nigerian Naira" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4637 +msgid "North Korean Won" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4638 +msgid "Norwegian Krone" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4639 +msgid "Omani Rial" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4640 +msgid "Pakistani Rupee" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4641 +msgid "Panamanian Balboa" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4642 +msgid "Papua New Guinean Kina" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4643 +msgid "Paraguayan Guarani" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4644 +msgid "Peruvian Sol" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4645 +msgid "Philippine Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4646 +msgid "Polish Zloty" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4647 +msgid "Qatari Rial" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4648 +msgid "Romanian Leu" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4649 +msgid "Russian Ruble" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4650 +msgid "Rwandan Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4651 +msgid "Salvadoran Colón" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4652 +msgid "Samoan Tala" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4653 +msgid "Saudi Riyal" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4654 +msgid "Serbian Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4655 +msgid "Seychellois Rupee" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4656 +msgid "Sierra Leonean Leone" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4657 +msgid "Singapore Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4658 +msgid "Slovak Koruna" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4659 +msgid "Solomon Islands Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4660 +msgid "Somali Shilling" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4661 +msgid "South African Rand" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4662 +msgid "South Korean Won" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4663 +msgid "Special Drawing Rights" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4664 +msgid "Sri Lankan Rupee" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4665 +msgid "St. Helena Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4666 +msgid "Sudanese Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4667 +msgid "Surinamese Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4668 +msgid "Swazi Lilangeni" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4669 +msgid "Swedish Krona" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4670 +msgid "Swiss Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4671 +msgid "Syrian Pound" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4672 +msgid "São Tomé & Príncipe Dobra" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4673 +msgid "Tajikistani Somoni" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4674 +msgid "Tanzanian Shilling" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4675 +msgid "Thai Baht" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4676 +msgid "Tongan Pa'anga" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4677 +msgid "Trinidad & Tobago Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4678 +msgid "Tunisian Dinar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4679 +msgid "Turkish Lira" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4680 +msgid "Turkmenistani Manat" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4681 +msgid "Ugandan Shilling" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4682 +msgid "Ukrainian Hryvnia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4683 +msgid "United Arab Emirates Dirham" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4684 +msgid "Uruguayan Peso" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4685 +msgid "US Dollar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4686 +msgid "Uzbekistani Som" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4687 +msgid "Vanuatu Vatu" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4688 +msgid "Venezuelan Bolívar" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4689 +msgid "Vietnamese Dong" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4690 +msgid "West African CFA Franc" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4691 +msgid "Yemeni Rial" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4692 +msgid "Zambian Kwacha" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4700 +#: classes/class-bsf-aiosrs-pro-schema.php:4720 +msgid "Business App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4701 +msgid "Game App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4702 +msgid "Multimedia App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4703 +msgid "Mobile App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4704 +msgid "Web App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4705 +msgid "Social Networking App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4706 +msgid "Travel App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4707 +msgid "Shopping App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4708 +msgid "Sports App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4709 +msgid "Lifestyle App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4710 +msgid "Design App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4711 +msgid "Developer App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4712 +msgid "Driver App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4713 +msgid "Educational App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4714 +msgid "Health App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4715 +msgid "Finance App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4716 +msgid "Security App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4717 +msgid "Browser App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4718 +msgid "Communication App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4719 +msgid "Desktop Enhancement App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4721 +msgid "Home App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4722 +msgid "Utilities App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4723 +msgid "Reference App" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4789 +msgid "-- None --" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4934 +#: classes/class-bsf-aiosrs-pro-schema.php:4972 +msgid "All Schemas" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4971 +msgid "Search Schema" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4973 +msgid "Edit Schema" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4974 +msgid "View Schema" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4975 +#: classes/class-bsf-aiosrs-pro-schema.php:4977 +msgid "Add New" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4976 +msgid "Update Schema" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4978 +msgid "New Schema Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5011 +#: classes/class-bsf-aiosrs-pro-schema.php:5017 +#. translators: %s: singular custom post type name +msgid "%s updated." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5013 +#. translators: %s: singular custom post type name +msgid "Custom %s updated." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5015 +#. translators: %s: singular custom post type name +msgid "Custom %s deleted." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5019 +#. translators: %1$s: singular custom post type name ,%2$s: date and time of +#. the revision +msgid "%1$s restored to revision from %2$s" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5021 +#. translators: %s: singular custom post type name +msgid "%s published." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5023 +#. translators: %s: singular custom post type name +msgid "%s saved." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5025 +#. translators: %s: singular custom post type name +msgid "%s submitted." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5027 +#. translators: %s: singular custom post type name +msgid "%s scheduled for." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:5029 +#. translators: %s: singular custom post type name +msgid "%s draft updated." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:60 +msgid "Welcome" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:69 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:436 template/settings.php:17 +#: template/settings.php:171 template/wpsp-advanced-settings.php:190 +msgid "Social Profiles" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:74 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:536 template/settings.php:19 +msgid "Other Schemas" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:79 +msgid "Done" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:252 +#. translators: %s: search term +msgid "Welcome to %s setup wizard !" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:254 +#. translators: %s: search term +msgid "" +"%s adds Google-recommended schema markups across your site and specific " +"pages. This improves your SEO and allows search engines to display rich " +"snippets for your website." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:261 +msgid "Welcome To Schema Pro Setup Wizard!" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:263 +msgid "" +"Schema Pro adds Google-recommended schema markups across your site and " +"specific pages. This improves your SEO and allows search engines to display " +"rich snippets for your website." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:269 +msgid "" +"This wizard is the first step to making Google understand your site better. " +"Just fill in the required basic information. It’s easy!" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:277 +msgid "Start" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:293 template/settings.php:44 +msgid "" +"To help Google understand what your website is about, select the most " +"suitable type for your website below, and fill in the required basic " +"information." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:297 +msgid "This Website Represents " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:300 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:550 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:567 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:585 template/settings.php:55 +#: template/settings.php:294 template/settings.php:440 +#: template/settings.php:482 +msgid "--None--" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:301 template/settings.php:56 +msgid "Personal Website" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:302 template/settings.php:57 +msgid "Business Website" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:304 template/settings.php:59 +msgid "Personal Blog" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:305 template/settings.php:60 +msgid "Community Blog/News Website " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:306 template/settings.php:61 +msgid "Webshop" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:319 template/settings.php:74 +msgid "Website Logo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:322 template/settings.php:77 +msgid "Add Custom Logo" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:345 template/settings.php:100 +msgid "Recommended minimum logo size 112 x 112 pixels." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:346 template/settings.php:101 +msgid "The image must be in .jpg, .png, .gif, .svg, or .webp format." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:350 template/settings.php:105 +msgid "Website Owner Name" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:364 template/settings.php:118 +msgid "Organization Type" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:391 template/settings.php:141 +msgid "" +"Select the type that best describes your website. If you can't find one " +"that applies exactly, use the generic \"General/Other\" type. Further " +"create Local Business schema for \"General/Other\" type." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:393 template/settings.php:143 +msgid "" +"Select the type that best describes your website. If you can't find one " +"that applies exactly, use the generic \"General/Other\" type. Further " +"create Local Business schema for \"General/Other\" type. " +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:406 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:506 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:629 +msgid "Previous" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:437 template/settings.php:182 +msgid "" +"Please enter all your possible social media profiles. These links can " +"appear in the knowledge panel of the search results for your website." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:441 template/settings.php:189 +msgid "Facebook" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:445 template/settings.php:193 +msgid "Instagram" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:449 template/settings.php:197 +msgid "YouTube" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:453 template/settings.php:201 +msgid "Twitter" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:457 template/settings.php:205 +msgid "Pinterest" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:461 template/settings.php:209 +msgid "LinkedIn" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:465 template/settings.php:213 +msgid "SoundCloud" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:469 template/settings.php:217 +msgid "Tumblr" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:473 template/settings.php:221 +msgid "Wikipedia" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:477 template/settings.php:225 +msgid "MySpace" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:481 template/settings.php:229 +msgid "Google+" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:490 +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:499 template/settings.php:238 +#: template/settings.php:250 template/settings.php:305 +msgid "Other" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:537 template/settings.php:425 +msgid "" +"Fill in additional information about your website to make sure that search " +"engines fully understand what it’s about. This will help improve your SEO " +"further." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:542 template/settings.php:432 +msgid "Select About Page" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:544 template/settings.php:434 +msgid "" +"Select your about page from the dropdown list. This will add AboutPage " +"schema on the selected page." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:559 template/settings.php:453 +msgid "Select Contact Page" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:561 template/settings.php:455 +msgid "" +"Select your contact page from the dropdown list. This will add ContactPage " +"schema on the selected page." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:576 template/settings.php:473 +msgid "Select Menu for SiteLinks Schema" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:590 +msgid "" +"This helps Google understand the most important pages on your website and " +"can generate Rich Snippets." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:595 template/settings.php:492 +msgid "Enable SiteLinks Search Box" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:606 +msgid "" +"If enabled, Google can display a search box on your search website’s search " +"results." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:611 +#: template/breadcrumb-settings.php:57 template/settings.php:508 +msgid "Enable Breadcrumbs" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:622 template/settings.php:510 +msgid "" +"If enabled, Google can add breadcrumbs to your website’s and pages search " +"results." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:664 +msgid "Well done!" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:669 +msgid "" +"You've successfully added schema to your website! You’re on your way to get " +"rich snippets for your pages." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:672 +msgid "" +"The information you provided is globally applied to the website. You can " +"always go back, change, and add more to this later from your dashboard." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:675 +msgid "" +"From the dashboard, you can also explore other advanced features like " +"breadcrumbs and white label services." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:678 +msgid "Wondering what’s next?" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:679 +msgid "" +" The next step would be to create and set schema markups for your " +"individual pages." +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:682 +msgid "Give it a try now!" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-setup-wizard.php:688 +msgid "Create First Schema" +msgstr "" + +#: classes/class-bsf-aiosrs-pro.php:58 +msgid "" +"Please be advised that the HowTo schema is now deprecated according to the " +"latest Google guidelines " +msgstr "" + +#: classes/class-bsf-aiosrs-pro.php:58 +msgid "Take a look here." +msgstr "" + +#: classes/class-bsf-aiosrs-pro.php:77 +#. translators: %s: search term +msgid "Configure %s step by step. " +msgstr "" + +#: classes/class-bsf-aiosrs-pro.php:78 +msgid "Start Setup Wizard »" +msgstr "" + +#: classes/class-bsf-aiosrs-pro.php:80 +msgid "Not sure where to start with Schema Pro? Check out our initial " +msgstr "" + +#: classes/class-bsf-aiosrs-pro.php:80 +msgid "setup wizard first »" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:67 +#. translators: %s: post type label +msgid "No %s found" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:150 +#: classes/lib/class-bsf-custom-post-list-table.php:267 +msgid "Restore" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:151 +#: classes/lib/class-bsf-custom-post-list-table.php:284 +msgid "Delete Permanently" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:155 +#: classes/lib/class-bsf-custom-post-list-table.php:160 +msgid "Move to Trash" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:159 +msgid "Draft" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:255 +#. translators: %s: post title +msgid "Edit “%s”" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:256 +msgid "Edit" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:266 +#. translators: %s: post title +msgid "Restore “%s” from the Trash" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:274 +#. translators: %s: post title +msgid "Move “%s” to the Trash" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:283 +#. translators: %s: post title +msgid "Delete “%s” permanently" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:297 +#. translators: %s: post title +msgid "Preview “%s”" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:298 +msgid "Preview" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:306 +#. translators: %s: post title +msgid "View “%s”" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:307 +msgid "View" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:353 +#: classes/lib/class-bsf-custom-post-list-table.php:354 +msgid "Unpublished" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:357 +msgid "Y/m/d g:i:s a" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:365 +#. translators: 1: time +msgid "%s ago" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:367 +msgid "Y/m/d" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:372 +msgid "Published" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:375 +msgid "Missed schedule" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:380 +msgid "Last Modified" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:583 +#. translators: %s: search keywords +msgid "Search results for “%s”" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:601 +#. translators: %s: Post Label +msgid "Search %s" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:129 +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:173 +msgid "Basic" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:131 +msgid "All Singulars" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:132 +msgid "Front Page" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:156 +msgid "Specific Target" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:158 +msgid "Specific Pages / Posts / Archives etc." +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:175 +msgid "All" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:176 +msgid "Logged In" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:177 +msgid "Logged Out" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:182 +msgid "Advanced" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:461 +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:901 +msgid "Add Rule" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:477 +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:582 +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:917 +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:949 +msgid "Select Target Rule" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:528 +#. translators: %s post label +msgid "All %s" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:533 +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:541 +#. translators: %s post label +#. translators: %s taxonomy label +msgid "All %s Archive" +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:1399 +#. translators: %s post title. +msgid "The same display setting does already exist in %1$s %2$s." +msgstr "" + +#: classes/lib/target-rule/class-bsf-target-rule-fields.php:1459 +msgid "Select" +msgstr "" + +#: lib/astra-notices/class-astra-notices.php:119 +msgid "WordPress Nonce not validated." +msgstr "" + +#: template/branding-settings.php:31 +msgid "Configure White Label" +msgstr "" + +#: template/branding-settings.php:36 +msgid "" +"White Label lets you change the identity (name, description, etc.) of this " +"plugin on the WordPress Dashboard. You can rename the plugin and present it " +"as your own. This is mostly used by agencies and developers who are " +"building websites for clients. " +msgstr "" + +#: template/branding-settings.php:47 +msgid "Plugin Name" +msgstr "" + +#: template/branding-settings.php:51 +msgid "Plugin Short Name" +msgstr "" + +#: template/branding-settings.php:55 +msgid "Plugin Description" +msgstr "" + +#: template/branding-settings.php:59 +msgid "Author / Agency Name" +msgstr "" + +#: template/branding-settings.php:63 +msgid "Author / Agency URL" +msgstr "" + +#: template/branding-settings.php:68 template/branding-settings.php:78 +msgid "Hide White Label Settings" +msgstr "" + +#: template/branding-settings.php:70 +msgid "" +"Checking this box will enable the White Label features of this plugin and " +"will remove the white label settings." +msgstr "" + +#: template/branding-settings.php:71 +msgid "" +"If you want to access it in the future, you would have to deactivate and " +"reactivate the plugin." +msgstr "" + +#: template/branding-settings.php:84 template/breadcrumb-settings.php:127 +#: template/settings.php:154 template/settings.php:258 +#: template/settings.php:398 template/settings.php:525 +#: template/wpsp-advanced-settings.php:209 +msgid "Save Changes" +msgstr "" + +#: template/branding-settings.php:89 +msgid "Note:" +msgstr "" + +#: template/branding-settings.php:89 +msgid "Whitelabel settings are applied to all the sites in the Network." +msgstr "" + +#: template/branding-settings.php:99 template/breadcrumb-settings.php:146 +#: template/settings.php:551 template/wpsp-advanced-settings.php:228 +msgid "Setup Wizard" +msgstr "" + +#: template/branding-settings.php:111 template/breadcrumb-settings.php:153 +#: template/settings.php:558 template/wpsp-advanced-settings.php:235 +#. translators: %s: search term +msgid "Need help configure %s step by step?" +msgstr "" + +#: template/branding-settings.php:119 template/breadcrumb-settings.php:161 +#: template/settings.php:566 template/wpsp-advanced-settings.php:243 +msgid "Not sure where to start? Check out our video on " +msgstr "" + +#: template/branding-settings.php:126 template/breadcrumb-settings.php:168 +#: template/settings.php:574 template/wpsp-advanced-settings.php:249 +msgid "Start Setup Wizard" +msgstr "" + +#: template/branding-settings.php:133 template/breadcrumb-settings.php:175 +#: template/settings.php:582 template/wpsp-advanced-settings.php:256 +msgid "Regenerate Schema" +msgstr "" + +#: template/branding-settings.php:137 template/breadcrumb-settings.php:185 +#: template/settings.php:589 template/wpsp-advanced-settings.php:261 +#: template/wpsp-advanced-settings.php:263 +msgid "" +"Having issues with your schema? Try regenerating the code on all your " +"posts/pages. " +msgstr "" + +#: template/branding-settings.php:144 template/breadcrumb-settings.php:193 +#: template/settings.php:597 template/wpsp-advanced-settings.php:271 +msgid "Schema Regenerated Successfully." +msgstr "" + +#: template/branding-settings.php:152 template/breadcrumb-settings.php:201 +#: template/settings.php:605 template/wpsp-advanced-settings.php:279 +msgid "Regenerate Now" +msgstr "" + +#: template/branding-settings.php:160 template/breadcrumb-settings.php:210 +#: template/settings.php:614 template/wpsp-advanced-settings.php:288 +msgid "Knowledge Base" +msgstr "" + +#: template/branding-settings.php:164 template/breadcrumb-settings.php:214 +#: template/settings.php:618 template/wpsp-advanced-settings.php:292 +msgid "Not sure how something works? Take a peek at the knowledge base and learn." +msgstr "" + +#: template/branding-settings.php:167 template/breadcrumb-settings.php:217 +#: template/settings.php:621 template/wpsp-advanced-settings.php:295 +msgid "Visit Knowledge Base" +msgstr "" + +#: template/branding-settings.php:176 template/breadcrumb-settings.php:227 +#: template/settings.php:631 template/wpsp-advanced-settings.php:305 +msgid "Rollback Version" +msgstr "" + +#: template/breadcrumb-settings.php:22 +msgid "Configure Breadcrumbs" +msgstr "" + +#: template/breadcrumb-settings.php:29 +msgid "" +"Breadcrumb schema helps Google to understand the page's position in the " +"site hierarchy." +msgstr "" + +#: template/breadcrumb-settings.php:34 +msgid "" +"Breadcrumb schema helps Google to understand the page's position in the " +"site hierarchy. " +msgstr "" + +#: template/breadcrumb-settings.php:68 template/settings.php:520 +msgid "" +"If enabled, Google can add breadcrumbs to your website’s and pages search " +"results. " +msgstr "" + +#: template/breadcrumb-settings.php:109 +msgid "" +"Select this option to add an extra middle level in a breadcrumb trail. For " +"example - Domain name > Selected Option > Post Name." +msgstr "" + +#: template/breadcrumb-settings.php:180 template/settings.php:587 +msgid "" +"Having issues with your schema? Try regenerating the code on all your " +"posts/pages." +msgstr "" + +#: template/license-form.php:15 +msgid "Close" +msgstr "" + +#: template/license-form.php:23 +msgid "Activate License" +msgstr "" + +#: template/license-form.php:24 +msgid "Deactivate License" +msgstr "" + +#: template/license-form.php:26 +msgid "Your license is not active!" +msgstr "" + +#: template/license-form.php:27 +msgid "Your license is activated!" +msgstr "" + +#: template/settings.php:18 template/settings.php:275 +msgid "Contact Information" +msgstr "" + +#: template/settings.php:36 template/settings.php:174 template/settings.php:278 +#: template/settings.php:417 +msgid "" +"Looks like you have Yoast SEO plugin installed. So we've gone ahead and " +"disabled some features which comes with Yoast SEO as well." +msgstr "" + +#: template/settings.php:37 template/settings.php:175 template/settings.php:279 +#: template/settings.php:418 +msgid "If you would still like to enable then," +msgstr "" + +#: template/settings.php:51 +msgid "This Website Represents" +msgstr "" + +#: template/settings.php:286 +msgid "" +"The information provided here will tell search engines about your website's " +"contact details. This can improve your appearance in rich snippets and can " +"be displayed in the Knowledge Panel on some searches. " +msgstr "" + +#: template/settings.php:292 +msgid "Select Contact Type" +msgstr "" + +#: template/settings.php:295 +msgid "Customer Support" +msgstr "" + +#: template/settings.php:296 +msgid "Technical Support" +msgstr "" + +#: template/settings.php:297 +msgid "Billing Support" +msgstr "" + +#: template/settings.php:298 +msgid "Bill payment" +msgstr "" + +#: template/settings.php:299 +msgid "Sales" +msgstr "" + +#: template/settings.php:300 +msgid "Reservations" +msgstr "" + +#: template/settings.php:301 +msgid "Credit Card Support" +msgstr "" + +#: template/settings.php:302 +msgid "Emergency" +msgstr "" + +#: template/settings.php:303 +msgid "Baggage Tracking" +msgstr "" + +#: template/settings.php:304 +msgid "Roadside Assistance" +msgstr "" + +#: template/settings.php:311 +msgid "Other Contact Type " +msgstr "" + +#: template/settings.php:316 +msgid "Contact Page URL" +msgstr "" + +#: template/settings.php:341 +msgid "Contact Number" +msgstr "" + +#: template/settings.php:344 +msgid "" +"Enter the international version of your contact phone number starting with " +"the “+†sign and country code, e.g., +1 for the US and Canada. Example: " +"+1-800-555-1212. Search your country code here" +msgstr "" + +#: template/settings.php:348 +msgid "Area Served" +msgstr "" + +#: template/settings.php:350 +msgid "" +"\tThe geographic area where a service or offered item is provided. " +"Supersedes serviceArea. Examples US,ES FR" +msgstr "" + +#: template/settings.php:357 +msgid "Available Language" +msgstr "" + +#: template/settings.php:359 +msgid "" +"Details about the language spoken. Languages may be specified by their " +"common English name. If omitted, the language defaults to English." +msgstr "" + +#: template/settings.php:366 +msgid "Contact Option" +msgstr "" + +#: template/settings.php:368 +msgid "" +"An option available on this contact point (e.g. a toll-free number or " +"support for hearing-impaired callers). Hearing Impaired Supported:- Uses " +"devices to support users with hearing impairments." +msgstr "" + +#: template/settings.php:373 +msgid "Hearing Impaired Supported" +msgstr "" + +#: template/settings.php:375 +msgid "Toll Free" +msgstr "" + +#: template/settings.php:379 +msgid "Enable ContactPoint on schema type?" +msgstr "" + +#: template/settings.php:381 +msgid "" +"If enabled, It will add ContactPoint on Local Business and Person schema " +"type." +msgstr "" + +#: template/settings.php:414 +msgid "Other Schema" +msgstr "" + +#: template/settings.php:487 +msgid "" +"This helps Google understand the most important pages on your website and " +"can generate Rich Snippets. " +msgstr "" + +#: template/settings.php:503 +msgid "If enabled, Google can display a search box with your Search results. " +msgstr "" + +#: template/wpsp-advanced-settings.php:39 +msgid "Configure your Schema Pro plugin’s advanced options." +msgstr "" + +#: template/wpsp-advanced-settings.php:46 +msgid "Enable “Test Schema†Link in Toolbar" +msgstr "" + +#: template/wpsp-advanced-settings.php:49 +#: template/wpsp-advanced-settings.php:51 +msgid "" +"This allows you to test schema on page/post directly from the toolbar with " +"a click. Enable the option to display the “Test Schema†link in the toolbar." +msgstr "" + +#: template/wpsp-advanced-settings.php:52 +#: template/wpsp-advanced-settings.php:83 +#: template/wpsp-advanced-settings.php:98 +#: template/wpsp-advanced-settings.php:145 +#: template/wpsp-advanced-settings.php:169 +msgid "Learn more." +msgstr "" + +#: template/wpsp-advanced-settings.php:70 +#. translators: %s: search term +msgid "Display %s Menu Under" +msgstr "" + +#: template/wpsp-advanced-settings.php:75 +msgid "Display Schema Pro Menu Under" +msgstr "" + +#: template/wpsp-advanced-settings.php:80 +#: template/wpsp-advanced-settings.php:82 +msgid "" +"Decide where you wish to see the Schema Pro menu on your WordPress " +"dashboard." +msgstr "" + +#: template/wpsp-advanced-settings.php:92 +msgid "Add Schema Code In" +msgstr "" + +#: template/wpsp-advanced-settings.php:95 +#: template/wpsp-advanced-settings.php:97 +msgid "Select where you wish to add the schema code." +msgstr "" + +#: template/wpsp-advanced-settings.php:105 +msgid "Head" +msgstr "" + +#: template/wpsp-advanced-settings.php:106 +msgid "Footer" +msgstr "" + +#: template/wpsp-advanced-settings.php:112 +msgid "Add Default Image" +msgstr "" + +#: template/wpsp-advanced-settings.php:114 +msgid "Specify a default image to be a fallback for missing Featured Images." +msgstr "" + +#: template/wpsp-advanced-settings.php:139 +msgid "Skip Rendering Invalid Schema" +msgstr "" + +#: template/wpsp-advanced-settings.php:142 +#: template/wpsp-advanced-settings.php:144 +msgid "" +"If schema on posts/pages have empty required(*) fields, it may render " +"invalid schema. Enable this option to skip rendering these ‘invalid’ schema." +msgstr "" + +#: template/wpsp-advanced-settings.php:163 +msgid "Delete Data on Uninstall?" +msgstr "" + +#: template/wpsp-advanced-settings.php:166 +#: template/wpsp-advanced-settings.php:168 +msgid "" +"Check this box if you would like Schema to completely remove all of its " +"data when uninstalling via Plugins > Deactivate > Delete." +msgstr "" + +#: template/wpsp-advanced-settings.php:184 +msgid "Disable Duplicate Features that Yoast SEO Offers?" +msgstr "" + +#: template/wpsp-advanced-settings.php:186 +msgid "" +"When disabled, Schema Pro does not output duplicate markup that Yoast SEO " +"Offers." +msgstr "" + +#: template/wpsp-advanced-settings.php:187 +msgid "These are the features that will be disabled:" +msgstr "" + +#: template/wpsp-advanced-settings.php:189 +msgid "Organization/Person" +msgstr "" + +#: template/wpsp-advanced-settings.php:191 +msgid "Breadcrumb" +msgstr "" + +#: template/wpsp-advanced-settings.php:192 +msgid "Sitelink Search Box" +msgstr "" + +#: wp-schema-pro.php:130 +#. translators: %s: PHP version +msgid "Schema Pro blocks requires PHP version %s+, plugin is currently NOT RUNNING." +msgstr "" + +#: wp-schema-pro.php:147 +#. translators: %s: WordPress version +msgid "" +"Schema Pro blocks requires WordPress version %s+. Because you are using an " +"earlier version, the plugin is currently NOT RUNNING." +msgstr "" + +#: wpsp-blocks/classes/class-bsf-sp-config.php:46 +msgid "FAQ - Schema Pro" +msgstr "" + +#: wpsp-blocks/classes/class-bsf-sp-config.php:47 +msgid "This block helps you add a FAQ section with inbuilt schema support." +msgstr "" + +#: wpsp-blocks/classes/class-bsf-sp-config.php:140 +msgid "FAQ - Schema Pro Child" +msgstr "" + +#: wpsp-blocks/classes/class-bsf-sp-config.php:141 +msgid "This block helps you add single FAQ." +msgstr "" + +#: wpsp-blocks/classes/class-bsf-sp-config.php:154 +msgid "How-to - Schema Pro" +msgstr "" + +#: wpsp-blocks/classes/class-bsf-sp-config.php:155 +msgid "" +"This block allows you to design attractive How-to pages or articles with " +"automatically adding How-to Schema to your page." +msgstr "" + +#: wpsp-blocks/classes/class-bsf-sp-config.php:228 +msgid "" +"This steps box allows you to place an image along with a heading and " +"description within a single block." +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "https://wpschema.com" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"Schema Pro is the go-to plugin to adding Schema Markup on your website with " +"ease. Enables you to display rich snippets on search engines and improve " +"your overall page SEO." +msgstr "" + +#. Author of the plugin/theme +msgid "Brainstorm Force" +msgstr "" + +#. Author URI of the plugin/theme +msgid "https://www.brainstormforce.com" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:119 +msgctxt "rating out of" +msgid "0/5" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-custom-fields-markup.php:817 +#: classes/class-bsf-aiosrs-pro-markup.php:129 +#: classes/class-bsf-aiosrs-pro-markup.php:148 +#: classes/class-bsf-aiosrs-pro-markup.php:291 +#. translators: 1: rating +msgctxt "rating out of" +msgid "%s/5" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4969 +msgctxt "aiosrs-schemas general name" +msgid "Schemas" +msgstr "" + +#: classes/class-bsf-aiosrs-pro-schema.php:4970 +msgctxt "aiosrs-schemas singular name" +msgid "Schema" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:275 +msgctxt "verb" +msgid "Trash" +msgstr "" + +#: classes/lib/class-bsf-custom-post-list-table.php:529 +#. translators: %s: count +msgctxt "posts" +msgid "All (%s)" +msgid_plural "All (%s)" +msgstr[0] "" +msgstr[1] "" \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/lib/astra-notices/class-astra-notices.php b/wp/wp-content/plugins/wp-schema-pro/lib/astra-notices/class-astra-notices.php new file mode 100644 index 00000000..58eb57fc --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/lib/astra-notices/class-astra-notices.php @@ -0,0 +1,389 @@ +get_notice_by_id( $notice_id ); + $capability = isset( $notice['capability'] ) ? $notice['capability'] : 'manage_options'; + + if ( ! apply_filters( 'astra_notices_user_cap_check', current_user_can( $capability ) ) ) { + return; + } + + if ( false === wp_verify_nonce( $nonce, 'astra-notices' ) ) { + wp_send_json_error( esc_html_e( 'WordPress Nonce not validated.', 'wp-schema-pro' ) ); + } + + // Valid inputs? + if ( ! empty( $notice_id ) ) { + + if ( ! empty( $repeat_notice_after ) ) { + set_transient( $notice_id, true, $repeat_notice_after ); + } else { + update_user_meta( get_current_user_id(), $notice_id, 'notice-dismissed' ); + } + + wp_send_json_success(); + } + + wp_send_json_error(); + } + + /** + * Enqueue Scripts. + * + * @since 1.0.0 + * @return void + */ + public function enqueue_scripts() { + wp_register_script( 'astra-notices', self::get_url() . 'notices.js', array( 'jquery' ), self::$version, true ); + wp_localize_script( + 'astra-notices', + 'astraNotices', + array( + '_notice_nonce' => wp_create_nonce( 'astra-notices' ), + ) + ); + } + + /** + * Sort the notices based on the given priority of the notice. + * This function is called from usort() + * + * @since 1.5.2 + * @param array $notice_1 First notice. + * @param array $notice_2 Second Notice. + * @return array + */ + public function sort_notices( $notice_1, $notice_2 ) { + if ( ! isset( $notice_1['priority'] ) ) { + $notice_1['priority'] = 10; + } + if ( ! isset( $notice_2['priority'] ) ) { + $notice_2['priority'] = 10; + } + + return $notice_1['priority'] - $notice_2['priority']; + } + + /** + * Get all registered notices. + * Since v1.1.8 it is recommended to register the notices on + * + * @return array|null + */ + private function get_notices() { + usort( self::$notices, array( $this, 'sort_notices' ) ); + + return self::$notices; + } + + /** + * Get notice by notice_id + * + * @param string $notice_id Notice id. + * + * @return array notice based on the notice id. + */ + private function get_notice_by_id( $notice_id ) { + if ( empty( $notice_id ) ) { + return array(); + } + + $notices = $this->get_notices(); + $notice = wp_list_filter( + $notices, + array( + 'id' => $notice_id, + ) + ); + + return ! empty( $notice ) ? $notice[0] : array(); + } + + /** + * Display the notices in the WordPress admin. + * + * @since 1.0.0 + * @return void + */ + public function show_notices() { + $defaults = array( + 'id' => '', // Optional, Notice ID. If empty it set `astra-notices-id-<$array-index>`. + 'type' => 'info', // Optional, Notice type. Default `info`. Expected [info, warning, notice, error]. + 'message' => '', // Optional, Message. + 'show_if' => true, // Optional, Show notice on custom condition. E.g. 'show_if' => if( is_admin() ) ? true, false, . + 'repeat-notice-after' => '', // Optional, Dismiss-able notice time. It'll auto show after given time. + 'display-notice-after' => false, // Optional, Dismiss-able notice time. It'll auto show after given time. + 'class' => '', // Optional, Additional notice wrapper class. + 'priority' => 10, // Priority of the notice. + 'display-with-other-notices' => true, // Should the notice be displayed if other notices are being displayed from Astra_Notices. + 'is_dismissible' => true, + 'capability' => 'manage_options', // User capability - This capability is required for the current user to see this notice. + ); + + // Count for the notices that are rendered. + $notices_displayed = 0; + $notices = $this->get_notices(); + + foreach ( $notices as $key => $notice ) { + $notice = wp_parse_args( $notice, $defaults ); + + // Show notices only for users with `manage_options` cap. + if ( ! current_user_can( $notice['capability'] ) ) { + continue; + } + + $notice['id'] = self::get_notice_id( $notice, $key ); + $notice['classes'] = self::get_wrap_classes( $notice ); + + // Notices visible after transient expire. + if ( isset( $notice['show_if'] ) && true === $notice['show_if'] ) { + + // don't display the notice if it is not supposed to be displayed with other notices. + if ( 0 !== $notices_displayed && false === $notice['display-with-other-notices'] ) { + continue; + } + + if ( self::is_expired( $notice ) ) { + + self::markup( $notice ); + ++$notices_displayed; + } + } + } + + } + + /** + * Render a notice. + * + * @since 1.0.0 + * @param array $notice Notice markup. + * @return void + */ + public static function markup( $notice = array() ) { + wp_enqueue_script( 'astra-notices' ); + + do_action( 'astra_notice_before_markup' ); + + do_action( "astra_notice_before_markup_{$notice['id']}" ); + + ?> +

            +
            + + +
            +
            + + +
            +
            +
            +
            + + +
            +

            + +

            +
            +

            + Learn more', 'wp-schema-pro' ) + ); + ?> +

            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            + +
            ' . __( 'If you want to access it in the future, you would have to deactivate and reactivate the plugin.', 'wp-schema-pro' ); + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + ?> +
            + +
            + +
            + +

            + + +
            +
            +
            +
            +
            +
            +
            +

            +
            +
            + +

            + +

            + Initial Setup Wizard first.', 'wp-schema-pro' ) + ); + ?> +

            + + +
            +
            +
            +
            +
            +
            +

            +
            +

            + Learn More', 'wp-schema-pro' ) + ); + ?> +

            + +
            + + +
            +
            +
            +
            +
            +
            +

            +
            +

            + +

            + +
            +
            +
            + +
            +
            +

            +
            + +
            +
            +
            + +
            + +
            +
            +
            diff --git a/wp/wp-content/plugins/wp-schema-pro/template/breadcrumb-settings.php b/wp/wp-content/plugins/wp-schema-pro/template/breadcrumb-settings.php new file mode 100644 index 00000000..58ba2469 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/template/breadcrumb-settings.php @@ -0,0 +1,240 @@ + + +
            +
            +
            +
            + + +
            +

            + +

            +
            +

            + Learn more', 'wp-schema-pro' ) + ); + } + ?> +

            +
            + + + + + + + + + true ), 'objects' ); + if ( array() !== $post_types && is_array( $post_types ) ) { + foreach ( $post_types as $pt ) { + ?> + + name, 'objects' ); + if ( array() !== $taxonomies && is_array( $taxonomies ) ) { + $values = array( 1 => __( 'None', 'wp-schema-pro' ) ); + foreach ( $taxonomies as $taxo ) { + if ( ! $taxo->public ) { + continue; + } + + $values[ $taxo->name ] = $taxo->labels->singular_name; + } + $label = $pt->labels->name . ' (' . $pt->name . ')'; + $tax_name = str_replace( ' ', '_', strtolower( $pt->name ) ); + + echo ''; + ?> + + + + + + + + +
            + + '; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + ?> + + +

            +
            ' . wp_kses_post( $label ) . ' + +

            Selected Option > Post Name.', 'wp-schema-pro' ); ?>

            +
            + +
            +
            +
            +
            +
            +
            + +
            +
            +

            +
            +
            + +

            + +

            + Initial Setup Wizard first.', 'wp-schema-pro' ) + ); + ?> +

            + + +
            +
            +
            +
            +
            +
            +

            +
            +

            + Learn More', 'wp-schema-pro' ) + ); + } + ?> +

            + +
            + + +
            +
            +
            +
            + +
            +
            +

            +
            +

            + +

            + +
            +
            +
            + + +
            +
            +

            +
            + +
            +
            +
            + +
            +
            +
            +
            diff --git a/wp/wp-content/plugins/wp-schema-pro/template/license-form.php b/wp/wp-content/plugins/wp-schema-pro/template/license-form.php new file mode 100644 index 00000000..9a8e64c9 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/template/license-form.php @@ -0,0 +1,40 @@ + + + diff --git a/wp/wp-content/plugins/wp-schema-pro/template/settings.php b/wp/wp-content/plugins/wp-schema-pro/template/settings.php new file mode 100644 index 00000000..c0c99c07 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/template/settings.php @@ -0,0 +1,644 @@ + + +
            +
            +
            +
            + + +
            +

            + +
            ' . __( 'If you would still like to enable then,', 'wp-schema-pro' ); + $message .= ' Click Here'; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + } + ?> +

            +
            +

            +
            + + + + + + + + + + + + + > + + + + > + + + + > + + + + + + +
            + + + +
            + +
            + + +
            + + + + + +
            +
            +

            +

            +
            + +
            + + +
            + + + +

            + Learn more', 'wp-schema-pro' ) + ); + } + ?> +

            +
            + +
            +
            +
            +
            + + +
            +

            + +
            ' . __( 'If you would still like to enable then,', 'wp-schema-pro' ); + $message .= ' Click Here'; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + } + ?> +

            +
            +

            + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $value ) { + if ( isset( $value ) && ! empty( $value ) ) { + ?> + + + + + + + + + +
            + + +
            +

            Add +

            + + + + +
            + +
            +
            +
            +
            + + +
            +

            + +
            ' . __( 'If you would still like to enable then,', 'wp-schema-pro' ); + $message .= ' Click Here'; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + } + ?> +

            +
            +

            +
            + + + + + + + + > + + + + + + + + + + + + + > + + + + > + + + + > + + + + + > + + + + +
            +
            +
            + + + +
            + +

            Learn more

            + +
            + +
            + + + value="HearingImpairedSupported" /> + value="TollFree" />
            + + + + +
            + + + + + +
            + +
            +
            +
            +
            + + +
            +

            + +
            ' . __( 'If you would still like to enable then,', 'wp-schema-pro' ); + $message .= ' Click Here'; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + } + ?> +

            +
            +

            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + +
            + + + + +
            + + + + +
            + + '; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + ?> + + + +

            +
            + + '; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + ?> + + +

            +
            + + '; + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + ?> + + +

            +
            + +
            +
            +
            +
            + +
            +
            + +
            +
            +

            +
            +
            + +

            + +

            + Initial Setup Wizard first.', 'wp-schema-pro' ) + ); + ?> +

            + + + +
            +
            +
            +
            + +
            +
            +

            +
            +

            + Learn More', 'wp-schema-pro' ) + ); + } + ?> +

            + +
            + + +
            +
            +
            +
            + +
            +
            +

            +
            +

            + +

            + +
            +
            +
            + + +
            +
            +

            +
            + +
            +
            +
            + +
            +
            +
            +
            diff --git a/wp/wp-content/plugins/wp-schema-pro/template/wpsp-advanced-settings.php b/wp/wp-content/plugins/wp-schema-pro/template/wpsp-advanced-settings.php new file mode 100644 index 00000000..08f9b30b --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/template/wpsp-advanced-settings.php @@ -0,0 +1,318 @@ +' . "\n"; +foreach ( $entries as $entry_page => $entry ) { + $select_box .= '\n"; +} + $select_box .= "\n"; + +$wpsp_advanced_settings = self::get_page_url( 'wpsp-advanced-settings' ); +if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; +} +$current_section = isset( $_GET['section'] ) ? sanitize_text_field( $_GET['section'] ) : 'general'; +?> +
            +
            +
            +
            + +
            +

            + +

            +
            + +

            +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            + + ' . __( 'Learn more.', 'wp-schema-pro' ) . ''; + } + + self::get_tooltip( $message ); + ?> + + +
            + + + ' . __( 'Learn more.', 'wp-schema-pro' ) . ''; + } + self::get_tooltip( $message ); + ?> +
            + + ' . __( 'Learn more.', 'wp-schema-pro' ) . ''; + } + self::get_tooltip( $message ); + ?> + + +
            + + + +
            + + +
            + + + + + +
            +
            +
            + + ' . __( 'Learn more.', 'wp-schema-pro' ) . ''; + } + self::get_tooltip( $message ); + ?> + + +
            + + Deactivate > Delete.', 'wp-schema-pro' ); + } else { + $message = __( 'Check this box if you would like Schema to completely remove all of its data when uninstalling via Plugins > Deactivate > Delete.', 'wp-schema-pro' ); + $message .= ' ' . __( 'Learn more.', 'wp-schema-pro' ) . ''; + } + BSF_AIOSRS_Pro_Admin::get_tooltip( $message ); + ?> + + +
            + +
            ' . __( 'These are the features that will be disabled:', 'wp-schema-pro' ) . '
            '; + $message .= '
              '; + $message .= '
            1. ' . __( 'Organization/Person', 'wp-schema-pro' ) . '
            2. '; + $message .= '
            3. ' . __( 'Social Profiles', 'wp-schema-pro' ) . '
            4. '; + $message .= '
            5. ' . __( 'Breadcrumb', 'wp-schema-pro' ) . '
            6. '; + $message .= '
            7. ' . __( 'Sitelink Search Box', 'wp-schema-pro' ) . '
            8. '; + $message .= '
            '; + self::get_tooltip( $message ); + ?> +
            + +
            + +
            +
            +
            +
            +
            +
            + +
            +
            +

            +
            +
            + +

            + +

            + Initial Setup Wizard first.', 'wp-schema-pro' ) + ); + ?> +

            + +
            +
            +
            +
            +
            +
            +

            +
            +

            + Learn More', 'wp-schema-pro' ) + ); + } + ?> +

            + +
            + + +
            +
            +
            +
            + +
            +
            +

            +
            +

            + +

            + +
            +
            +
            + + +
            +
            +

            +
            + +
            +
            +
            + +
            +
            +
            +
            diff --git a/wp/wp-content/plugins/wp-schema-pro/uninstall.php b/wp/wp-content/plugins/wp-schema-pro/uninstall.php new file mode 100644 index 00000000..f3a7146e --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/uninstall.php @@ -0,0 +1,29 @@ +set_entity( + array( + 'bsf' => array( + 'product_name' => 'Schema Pro', + 'path' => BSF_AIOSRS_PRO_DIR . 'admin/bsf-analytics', + 'author' => 'Brainstorm Force', + 'time_to_display' => '+24 hours', + ), + ) +); + +/** + * Brainstorm Updater. + */ +require_once BSF_AIOSRS_PRO_DIR . 'classes/class-brainstorm-update-aiosrs-pro.php'; +require_once BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-loader.php'; +require_once BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-admin.php'; + +/** + * Schema Pro for Gutenberg admin notice for minimum PHP version. + * + * Warning when the site doesn't have the minimum required PHP version. + * + * @since 2.1.1 + * + * @return void + */ +function wpsp_fail_php_version_notice() { + /* translators: %s: PHP version */ + $message = sprintf( esc_html__( 'Schema Pro blocks requires PHP version %s+, plugin is currently NOT RUNNING.', 'wp-schema-pro' ), '5.6' ); + $html_message = sprintf( '
            %s
            ', wpautop( $message ) ); + echo wp_kses_post( $html_message ); +} + + +/** + * Schema Pro for Gutenberg admin notice for minimum WordPress version. + * + * Warning when the site doesn't have the minimum required WordPress version. + * + * @since 1.8.1 + * + * @return void + */ +function wpsp_fail_wp_version_notice() { + /* translators: %s: WordPress version */ + $message = sprintf( esc_html__( 'Schema Pro blocks requires WordPress version %s+. Because you are using an earlier version, the plugin is currently NOT RUNNING.', 'wp-schema-pro' ), '4.7' ); + $html_message = sprintf( '
            %s
            ', wpautop( $message ) ); + echo wp_kses_post( $html_message ); +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/wpml-config.xml b/wp/wp-content/plugins/wp-schema-pro/wpml-config.xml new file mode 100644 index 00000000..1893b4e7 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpml-config.xml @@ -0,0 +1,24 @@ + + + + //div[@class="wpsp-question"] + //div[@class="wpsp-faq-content"] + + + //*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6] + //p[@class="wpsp-howto-desc-text"] + //h4[@class="wpsp-howto-timeNeeded-text"] + //p[@class="wpsp-howto-timeINmin-text"] + //h4[@class="wpsp-howto-estcost-text"] + //p[@class="wpsp-howto-estcost-type"] + //h4[@class="wpsp-howto-req-tools-text"] + //div[@class="wpsp-tools__label"] + //h4[@class="wpsp-howto-req-materials-text"] + //div[@class="wpsp-materials__label"] + + + //*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6] + //p[@class="wpsp-ifb-desc"] + + + diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks.commoneditorstyle.build.css b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks.commoneditorstyle.build.css new file mode 100644 index 00000000..d33eeee3 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks.commoneditorstyle.build.css @@ -0,0 +1,3361 @@ +/** + * #.# Common SCSS + * + * Can include things like variables and mixins + * that are used across the project. +*/ +.wpsp-inspect-tabs .components-tab-panel__tabs button { + padding: 10px; + background: transparent; + color: #333; + outline: none; + border-top: none; + border-left: none; + border-right: none; + border-bottom: 3px solid #eee; + cursor: pointer; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; +} + +hr.wpsp-editor__separator { + border-bottom: 1px solid #e2e4e7; +} + +.wpsp-inspect-tabs > .components-tab-panel__tabs button.active-tab, +.wpsp-inspect-tabs > .components-tab-panel__tabs button:focus { + border-bottom: 3px solid #333; + outline: none; + font-weight: 500; +} + +.wpsp-inspect-tab-title { + margin-top: 20px; +} + +.wpsp-inspect-tabs-col-2 > .components-tab-panel__tabs button, +.wpsp-inspect-tabs.wpsp-inspect-tabs-col-2 > .components-tab-panel__tabs button { + width: 50%; +} + +.wpsp-inspect-tabs .components-tab-panel__tabs { + margin-bottom: 15px; +} + +.wpsp-inspect-tabs-col-3 > .components-tab-panel__tabs button { + width: 33.33%; +} + +.wpsp-settings-notice { + color: #478a3b; + background-color: #e5fce3; + padding: 15px; + border-left: 5px solid #c3f9c5; + font-size: 12px; + line-height: 1.5; + text-align: left; +} + +.wpsp-note, +.components-base-control__help { + font-size: 12px; + font-style: italic; + color: #a4afb7; +} + +.components-range-control.wpsp-margin-control .components-base-control__label { + width: 30px; +} + +.wpsp-icons-list .wpsp-widget-icon { + -js-display: flex; + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -moz-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + float: left; + cursor: pointer; + padding: 1em; + line-height: 1; + font-size: 1; + border: 1px solid #f1f1f1; + margin: 0; + text-align: center; +} + +.wpsp-icons-list { + display: inline-block; + margin: 1em 0 0 0; + padding: 0; + max-height: 200px; + overflow: auto; +} + +.wpsp-widget-icon svg { + width: 20px; + height: 20px; +} + +.wpsp-icon-picker-wrap { + position: relative; + margin: 8px 0; + width: 100%; + vertical-align: middle; +} + +.wpsp-icon-picker-wrap .search-icon { + background-color: #fff; + border: 1px solid #e0e0e0; + width: 100%; +} + +.components-button-group.wpsp-size-type-field { + margin: 0; + text-align: right; + display: flex; + justify-content: flex-end; + margin-bottom: -18px; +} + +.wpsp-size-type-field-tabs .components-range-control .components-base-control__field { + display: block; + flex-wrap: unset; +} + +.wpsp-size-type-field-tabs .components-range-control .components-base-control__label { + width: auto; + display: block; +} + +.wpsp-size-type-field-tabs .components-range-control .components-range-control__slider { + width: 42%; + margin-bottom: 0; + padding-bottom: 2px; +} + +.wpsp-size-type-field-tabs .components-range-control .dashicon { + vertical-align: middle; +} + +.edit-post-sidebar h2.wpsp-size-type-field-title { + font-size: 14px; + margin-bottom: 0; + color: #555d66; + margin-top: 30px; +} + +.wpsp-size-type-field-tabs { + margin-bottom: 20px; + margin-top: 20px; +} + +.wpsp-size-type-field-tabs .components-tab-panel__tabs { + border-bottom: 0; + text-align: right; + margin-right: 40px; + margin-bottom: -20px; + display: block; +} + +.wpsp-size-type-field-tabs.wpsp-without-size-type .components-tab-panel__tabs { + margin-right: 0; +} + +.wpsp-size-type-field-tabs .components-tab-panel__tabs button svg { + width: 14px; + height: 14px; +} + +.wpsp-size-type-field-tabs .components-tab-panel__tabs button { + border: 0; + border-bottom: 0; + padding: 3px; + margin-bottom: 0; + outline: 0; + width: auto; + font-size: 8px; + background: transparent; + color: #999; + display: inline-block; + border-radius: 50%; + height: 20px; + margin-right: 3px; +} + +.wpsp-size-type-field-tabs .components-tab-panel__tabs button.active-tab, +.wpsp-size-type-field-tabs .components-tab-panel__tabs button.active-tab:focus { + color: #23282d; + background-color: #e4e5e5; + box-shadow: none; +} + +.wpsp-size-type-field button.components-button.wpsp-size-btn { + background: transparent; + color: #777; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + text-shadow: none; + height: 18px; + line-height: 18px; + padding: 0 3px; +} + +.wpsp-size-type-field button.components-button.wpsp-size-btn:first-child { + padding-left: 0; +} + +.wpsp-size-type-field button.components-button.wpsp-size-btn:last-child { + padding-right: 0; +} + +.wpsp-size-type-field button.components-button.wpsp-size-btn.is-primary, +.wpsp-size-type-field button.components-button.wpsp-size-btn.is-primary:focus:not(:disabled):not([aria-disabled="true"]) { + color: #000; + text-decoration: underline; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + border: none; + outline: none; +} + +.components-button-group .components-button.is-button { + position: relative; + z-index: 1; +} + +.wpsp-size-type-field button.components-button.wpsp-size-btn:hover, +.wpsp-size-type-field button.components-button.wpsp-size-btn:hover:focus:not(:disabled):not([aria-disabled="true"]) { + color: #000; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + border: none; + outline: none; +} + +.wpsp-size-type-field__common-tabs .components-tab-panel__tabs { + margin-bottom: -34px; + display: block; +} + +.wpsp-typography-advanced, +.wpsp-box-shadow-advanced { + box-shadow: 0 3px 30px rgba(25, 30, 35, 0.1); + border: 1px solid #e2e4e7; + background: #fff; + padding: 10px; + margin-top: 10px; + margin-bottom: 10px; + position: relative; +} + +.wpsp-typography-advanced::before, +.wpsp-box-shadow-advanced::before { + border: 8px solid #e2e4e7; + + content: ""; + position: absolute; + height: 0; + width: 0; + line-height: 0; + + top: -8px; + right: 5%; + + border-bottom-style: solid; + border-left-color: transparent; + border-right-color: transparent; + border-top: none; + margin-left: -10px; +} + +.wpsp-typography-advanced::after, +.wpsp-box-shadow-advanced::after { + border: 8px solid #fff; + + content: ""; + position: absolute; + height: 0; + width: 0; + line-height: 0; + + top: -6px; + right: 5%; + + border-bottom-style: solid; + border-left-color: transparent; + border-right-color: transparent; + border-top: none; + margin-left: -10px; +} + +.wpsp-typography-option-actions, +.wpsp-box-shadow-option-actions { + margin-bottom: 1.5em; + margin-top: 1.5em; +} + +.wpsp-typography-font-family-options .components-base-control__field { + display: flex; + align-items: center; +} + +.wpsp-typography-font-family-options .components-base-control__label, +.wpsp-typography-font-family-options .components-select-control__input { + width: 50%; +} + +.wpsp-typography-font-family-options > div { + margin: 0.2em 0 1.5em 0; + z-index: 2; +} + +.wpsp-typography-font-family-options input[type="text"]:focus { + box-shadow: none; +} + +.wpsp-typography-option-actions button { + margin: 0; + float: right; +} + +.wpsp-typography-option-actions .wpsp-typography-reset-btn, +.wpsp-typography-option-actions .wpsp-typography-reset-btn:hover, +.wpsp-typography-option-actions .wpsp-typography-reset-btn:active:enabled { + background: none; + border: none; + box-shadow: none; + float: right; +} + +.wpsp-typography-option-actions button svg { + height: 15px; + width: 15px; +} + +.wpsp-typography-option-actions button svg:hover { + fill: #23282d; +} + +.wpsp-typography-option-actions button.wpsp-typography-reset-btn svg { + height: 13px; + width: 13px; + fill: #777; +} + +.wpsp-typography-font-family-options .react-select__control, +.wpsp-typography-font-family-options .react-select__indicators, +.wpsp-typography-font-family-options .react-select__value-container { + min-height: 28px; + height: 28px; + padding-top: 0; + padding-bottom: 0; + border-color: #8d96a0; +} + +.wpsp-typography-font-family-options .react-select__indicator-separator { + display: none; +} + +.wpsp-typography-font-family-options .react-select__dropdown-indicator svg { + fill: #555d66; +} + +.wpsp__url-panel-body .block-editor-url-input input { + width: 100%; +} + +/* + Fonticon picker css + */ + +/** + * #.# Editor Styles + * + * CSS for just Backend enqueued after style.scss + * which makes it higher in priority. + */ + +.wpsp-setting-label .component-color-indicator { + vertical-align: middle; + background-color: transparent; +} + +.components-panel .rfipdropdown.rfipdropdown--default.fipappear-enter-done, +.components-panel .rfipdropdown { + left: 0 !important; + width: 230px; +} + +.components-panel .rfipicons__ibox { + font-size: 15px; +} + +.components-panel .rfipicons__icon { + height: 40px; +} + +.components-panel .rfipicons__ibox:hover > * { + -webkit-transform: scale(1.45); + -ms-transform: scale(1.45); + transform: scale(1.45); +} + +.components-button.wpsp-rm-btn { + margin-left: 10px; +} + +.rfipbtn, +.rfipdropdown { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica" Neue, sans-serif; + font-size: 14px; + line-height: 1.71429; + vertical-align: baseline; +} + +.rfipbtn, +.rfipbtn *, +.rfipdropdown, +.rfipdropdown * { + margin: 0; + padding: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.rfipbtn input, +.rfipbtn select, +.rfipdropdown input, +.rfipdropdown select { + font-size: 14px; +} + +.rfip { + position: relative; + margin: 8px 0; + width: 100%; + vertical-align: middle; +} + +.rfipbtn { + width: 136px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + min-height: 50px; + border-radius: 2px; + cursor: pointer; + -webkit-transition: border-color 0.25s, -webkit-box-shadow 0.25s; + transition: border-color 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border-color 0.25s; + transition: box-shadow 0.25s, border-color 0.25s, -webkit-box-shadow 0.25s; + outline: 0 none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + height: 40px; +} + +.rfipbtn--open { + border-radius: 2px 2px 0 0; +} + +.rfipbtn__button { + width: 48px; + margin-left: auto; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: auto; + -webkit-transition: background 0.25s, -webkit-box-shadow 0.25s; + transition: background 0.25s, -webkit-box-shadow 0.25s; + transition: background 0.25s, box-shadow 0.25s; + transition: background 0.25s, box-shadow 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipbtn__button i { + font-size: 26px; + line-height: 26px; + height: 26px; + width: 26px; + -webkit-transition: -webkit-transform 0.25s; + transition: -webkit-transform 0.25s; + transition: transform 0.25s; + transition: transform 0.25s, -webkit-transform 0.25s; + margin-left: auto; + margin-right: auto; +} + +.rfipbtn__button--open i { + -webkit-transform: rotate(-180deg); + transform: rotate(-180deg); +} + +.rfipbtn__current { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-flex: 0; + -ms-flex: 0 0 86px; + flex: 0 0 86px; + padding: 2px; +} + +.rfipbtn--multi { + width: 258px; +} + +.rfipbtn--multi .rfipbtn__current { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -ms-flex-preferred-size: 212px; + flex-basis: 212px; + -ms-flex-line-pack: center; + align-content: center; +} + +.rfipbtn--multi .rfipbtn__current, +.rfipbtn__icon { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; +} + +.rfipbtn__icon { + margin: 2px; + padding: 0; + height: 28px; + width: 48px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + border-radius: 2px; +} + +.rfipbtn__icon--empty { + font-size: 14px; + line-height: 16px; + margin-left: 8px; + text-align: center; + text-transform: lowercase; + font-style: italic; +} + +.rfipbtn__elm { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 28px; + width: 28px; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 18px; +} + +.rfipbtn__elm img, +.rfipbtn__elm svg { + height: 18px; + width: 18px; +} + +.rfipbtn__elm svg { + fill: #333; +} + +.rfipbtn__del { + width: 18px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 28px; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-transition: background-color 0.25s; + transition: background-color 0.25s; + cursor: pointer; +} + +.rfipcategory { + width: 100%; + margin: 0 0 8px; + position: relative; +} + +.rfipcategory select { + width: 100%; + display: block; + height: 32px; + line-height: 32px; + border-radius: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, box-shadow 0.25s; + transition: border 0.25s, box-shadow 0.25s, -webkit-box-shadow 0.25s; + background-color: transparent !important; +} + +.rfipcategory i { + position: absolute; + right: 2px; + top: 0; + font-size: 16px; + line-height: 32px; + z-index: -1; +} + +.rfipdropdown { + width: 352px; + position: absolute; + left: 0; + margin-top: -1px; + z-index: 100000001; + border-radius: 0 1px 4px 4px; +} + +.rfipdropdown__selector { + overflow: hidden; + padding: 16px; +} + +.rfipdropdown.fipappear-enter-active .rfipdropdown__selector, +.rfipdropdown.fipappear-exit-active .rfipdropdown__selector { + -webkit-transition: max-height 0.3s ease-out, padding 0.3s ease-out; + transition: max-height 0.3s ease-out, padding 0.3s ease-out; + padding: 16px; +} + +.rfipicons__pager { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + height: 24px; + line-height: 24px; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 8px; +} + +.rfipicons__num { + width: 100px; + margin-right: auto; +} + +.rfipicons__cp { + width: 32px; + height: 24px; + line-height: 24px; + text-align: right; +} + +.rfipicons__cp, +.rfipicons__sp, +.rfipicons__tp { + margin-right: 8px; +} + +.rfipicons__arrow { + margin-left: auto; + width: 56px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 24px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.rfipicons__right { + margin-left: auto; +} + +.rfipicons__left, +.rfipicons__right { + cursor: pointer; + width: 24px; + height: 24px; + position: relative; + -webkit-transition: background-color 0.25s, border 0.25s; + transition: background-color 0.25s, border 0.25s; + outline: 0 none; + border-radius: 2px; + font-size: 18px; +} + +.rfipicons__label { + height: 22px; + width: 22px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} + +.rfipicons__label img { + height: 18px; + width: 18px; +} + +.rfipicons__selector { + -webkit-box-flex: 1; + -ms-flex: 1 1 20%; + flex: 1 1 20%; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-line-pack: center; + align-content: center; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.rfipicons__ibox, +.rfipicons__selector { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} + +.rfipicons__ibox { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + width: 100%; + -webkit-transition: background-color 0.25s, border 0.25s; + transition: background-color 0.25s, border 0.25s; + border-radius: 2px; + outline: 0 none; + font-size: 20px; +} + +.rfipicons__ibox img, +.rfipicons__ibox svg { + max-height: 24px; + height: 18px; + width: 18px; +} + +.rfipicons__ibox svg { + fill: #333; +} + +.rfipicons__ibox > * { + -webkit-transform: scale(1); + transform: scale(1); + -webkit-transition: -webkit-transform 0.25s; + transition: -webkit-transform 0.25s; + transition: transform 0.25s; + transition: transform 0.25s, -webkit-transform 0.25s; + -webkit-transform-origin: center; + transform-origin: center; +} + +.rfipicons__ibox:hover > * { + -webkit-transform: scale(1.8); + transform: scale(1.8); +} + +.rfipicons__ibox--error { + text-transform: lowercase; + font-style: italic; +} + +.rfipicons__icon { + width: 20%; + height: 64px; + padding: 1px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + cursor: pointer; +} + +.rfipicons__icon--error { + display: block; + padding: 16px; + text-align: center; + font-size: 24px; + width: 100%; + line-height: 1; +} + +.rfipsearch { + width: 100%; + margin: 0 0 8px; +} + +.rfipsearch input { + width: 100%; + display: block; + height: 32px; + line-height: 32px; +} + +.rfipbtn--green { + background-color: #fff; + border: 1px solid #81c784; +} + +.rfipbtn--green:active, +.rfipbtn--green:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #66bb6a; +} + +.rfipbtn--green .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #81c784; + background-color: #c8e6c9; + color: #2e7d32; +} + +.rfipbtn--green .rfipbtn__button:hover { + background-color: #66bb6a; +} + +.rfipbtn--green .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #81c784; + box-shadow: inset 0 0 10px 0 #81c784; +} + +.rfipbtn--green .rfipbtn__icon { + border: 1px solid #a5d6a7; + color: #2e7d32; +} + +.rfipbtn--green .rfipbtn__icon--empty { + color: #81c784; +} + +.rfipbtn--green .rfipbtn__del { + background-color: #a5d6a7; +} + +.rfipbtn--green .rfipbtn__del:hover { + background-color: #81c784; +} + +.rfipbtn--green .rfipbtn__del:active, +.rfipbtn--green .rfipbtn__del:focus { + outline: 1px solid #81c784; +} + +.rfipdropdown--green { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #81c784; +} + +.rfipdropdown--green input, +.rfipdropdown--green select { + color: #424242; +} + +.rfipdropdown--green .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #66bb6a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--green .rfipcategory select:active, +.rfipdropdown--green .rfipcategory select:focus { + border-bottom-color: #4caf50; + -webkit-box-shadow: 0 1px 0 0 #4caf50; + box-shadow: 0 1px 0 0 #4caf50; + outline: 0 none; +} + +.rfipdropdown--green .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #66bb6a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--green .rfipicons__cp:active, +.rfipdropdown--green .rfipicons__cp:focus { + border-bottom-color: #4caf50; + -webkit-box-shadow: 0 1px 0 0 #4caf50; + box-shadow: 0 1px 0 0 #4caf50; + outline: 0 none; +} + +.rfipdropdown--green .rfipicons__left, +.rfipdropdown--green .rfipicons__right { + background-color: #a5d6a7; + border: 1px solid #a5d6a7; + color: #2e7d32; +} + +.rfipdropdown--green .rfipicons__left:hover, +.rfipdropdown--green .rfipicons__right:hover { + background-color: #66bb6a; + border: 1px solid #66bb6a; +} + +.rfipdropdown--green .rfipicons__left:active, +.rfipdropdown--green .rfipicons__left:focus, +.rfipdropdown--green .rfipicons__right:active, +.rfipdropdown--green .rfipicons__right:focus { + border: 1px solid #66bb6a; +} + +.rfipdropdown--green .rfipicons__ibox { + background-color: #c8e6c9; + border: 1px solid #c8e6c9; + color: #2e7d32; +} + +.rfipdropdown--green .rfipicons__ibox:hover { + background-color: #66bb6a; + border: 1px solid #66bb6a; +} + +.rfipdropdown--green .rfipicons__ibox:active, +.rfipdropdown--green .rfipicons__ibox:focus { + border: 1px solid #66bb6a; +} + +.rfipdropdown--green .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--green .rfipicons__icon--selected .rfipicons__ibox { + background-color: #a5d6a7; +} + +.rfipdropdown--green .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #66bb6a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--green .rfipsearch input:active, +.rfipdropdown--green .rfipsearch input:focus { + border-bottom-color: #4caf50; + -webkit-box-shadow: 0 1px 0 0 #4caf50; + box-shadow: 0 1px 0 0 #4caf50; + outline: 0 none; +} + +.rfipbtn--bluegrey { + background-color: #fff; + border: 1px solid #90a4ae; +} + +.rfipbtn--bluegrey:active, +.rfipbtn--bluegrey:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #78909c; +} + +.rfipbtn--bluegrey .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #90a4ae; + background-color: #cfd8dc; + color: #37474f; +} + +.rfipbtn--bluegrey .rfipbtn__button:hover { + background-color: #78909c; +} + +.rfipbtn--bluegrey .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #90a4ae; + box-shadow: inset 0 0 10px 0 #90a4ae; +} + +.rfipbtn--bluegrey .rfipbtn__icon { + border: 1px solid #b0bec5; + color: #37474f; +} + +.rfipbtn--bluegrey .rfipbtn__icon--empty { + color: #90a4ae; +} + +.rfipbtn--bluegrey .rfipbtn__del { + background-color: #b0bec5; +} + +.rfipbtn--bluegrey .rfipbtn__del:hover { + background-color: #90a4ae; +} + +.rfipbtn--bluegrey .rfipbtn__del:active, +.rfipbtn--bluegrey .rfipbtn__del:focus { + outline: 1px solid #90a4ae; +} + +.rfipdropdown--bluegrey { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #90a4ae; +} + +.rfipdropdown--bluegrey input, +.rfipdropdown--bluegrey select { + color: #424242; +} + +.rfipdropdown--bluegrey .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #78909c; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--bluegrey .rfipcategory select:active, +.rfipdropdown--bluegrey .rfipcategory select:focus { + border-bottom-color: #607d8b; + -webkit-box-shadow: 0 1px 0 0 #607d8b; + box-shadow: 0 1px 0 0 #607d8b; + outline: 0 none; +} + +.rfipdropdown--bluegrey .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #78909c; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--bluegrey .rfipicons__cp:active, +.rfipdropdown--bluegrey .rfipicons__cp:focus { + border-bottom-color: #607d8b; + -webkit-box-shadow: 0 1px 0 0 #607d8b; + box-shadow: 0 1px 0 0 #607d8b; + outline: 0 none; +} + +.rfipdropdown--bluegrey .rfipicons__left, +.rfipdropdown--bluegrey .rfipicons__right { + background-color: #b0bec5; + border: 1px solid #b0bec5; + color: #37474f; +} + +.rfipdropdown--bluegrey .rfipicons__left:hover, +.rfipdropdown--bluegrey .rfipicons__right:hover { + background-color: #78909c; + border: 1px solid #78909c; +} + +.rfipdropdown--bluegrey .rfipicons__left:active, +.rfipdropdown--bluegrey .rfipicons__left:focus, +.rfipdropdown--bluegrey .rfipicons__right:active, +.rfipdropdown--bluegrey .rfipicons__right:focus { + border: 1px solid #78909c; +} + +.rfipdropdown--bluegrey .rfipicons__ibox { + background-color: #cfd8dc; + border: 1px solid #cfd8dc; + color: #37474f; +} + +.rfipdropdown--bluegrey .rfipicons__ibox:hover { + background-color: #78909c; + border: 1px solid #78909c; +} + +.rfipdropdown--bluegrey .rfipicons__ibox:active, +.rfipdropdown--bluegrey .rfipicons__ibox:focus { + border: 1px solid #78909c; +} + +.rfipdropdown--bluegrey .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--bluegrey .rfipicons__icon--selected .rfipicons__ibox { + background-color: #b0bec5; +} + +.rfipdropdown--bluegrey .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #78909c; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--bluegrey .rfipsearch input:active, +.rfipdropdown--bluegrey .rfipsearch input:focus { + border-bottom-color: #607d8b; + -webkit-box-shadow: 0 1px 0 0 #607d8b; + box-shadow: 0 1px 0 0 #607d8b; + outline: 0 none; +} + +.rfipbtn--brown { + background-color: #fff; + border: 1px solid #a1887f; +} + +.rfipbtn--brown:active, +.rfipbtn--brown:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #8d6e63; +} + +.rfipbtn--brown .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #a1887f; + background-color: #d7ccc8; + color: #4e342e; +} + +.rfipbtn--brown .rfipbtn__button:hover { + background-color: #8d6e63; +} + +.rfipbtn--brown .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #a1887f; + box-shadow: inset 0 0 10px 0 #a1887f; +} + +.rfipbtn--brown .rfipbtn__icon { + border: 1px solid #bcaaa4; + color: #4e342e; +} + +.rfipbtn--brown .rfipbtn__icon--empty { + color: #a1887f; +} + +.rfipbtn--brown .rfipbtn__del { + background-color: #bcaaa4; +} + +.rfipbtn--brown .rfipbtn__del:hover { + background-color: #a1887f; +} + +.rfipbtn--brown .rfipbtn__del:active, +.rfipbtn--brown .rfipbtn__del:focus { + outline: 1px solid #a1887f; +} + +.rfipdropdown--brown { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #a1887f; +} + +.rfipdropdown--brown input, +.rfipdropdown--brown select { + color: #424242; +} + +.rfipdropdown--brown .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #8d6e63; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--brown .rfipcategory select:active, +.rfipdropdown--brown .rfipcategory select:focus { + border-bottom-color: #795548; + -webkit-box-shadow: 0 1px 0 0 #795548; + box-shadow: 0 1px 0 0 #795548; + outline: 0 none; +} + +.rfipdropdown--brown .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #8d6e63; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--brown .rfipicons__cp:active, +.rfipdropdown--brown .rfipicons__cp:focus { + border-bottom-color: #795548; + -webkit-box-shadow: 0 1px 0 0 #795548; + box-shadow: 0 1px 0 0 #795548; + outline: 0 none; +} + +.rfipdropdown--brown .rfipicons__left, +.rfipdropdown--brown .rfipicons__right { + background-color: #bcaaa4; + border: 1px solid #bcaaa4; + color: #4e342e; +} + +.rfipdropdown--brown .rfipicons__left:hover, +.rfipdropdown--brown .rfipicons__right:hover { + background-color: #8d6e63; + border: 1px solid #8d6e63; +} + +.rfipdropdown--brown .rfipicons__left:active, +.rfipdropdown--brown .rfipicons__left:focus, +.rfipdropdown--brown .rfipicons__right:active, +.rfipdropdown--brown .rfipicons__right:focus { + border: 1px solid #8d6e63; +} + +.rfipdropdown--brown .rfipicons__ibox { + background-color: #d7ccc8; + border: 1px solid #d7ccc8; + color: #4e342e; +} + +.rfipdropdown--brown .rfipicons__ibox:hover { + background-color: #8d6e63; + border: 1px solid #8d6e63; +} + +.rfipdropdown--brown .rfipicons__ibox:active, +.rfipdropdown--brown .rfipicons__ibox:focus { + border: 1px solid #8d6e63; +} + +.rfipdropdown--brown .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--brown .rfipicons__icon--selected .rfipicons__ibox { + background-color: #bcaaa4; +} + +.rfipdropdown--brown .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #8d6e63; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--brown .rfipsearch input:active, +.rfipdropdown--brown .rfipsearch input:focus { + border-bottom-color: #795548; + -webkit-box-shadow: 0 1px 0 0 #795548; + box-shadow: 0 1px 0 0 #795548; + outline: 0 none; +} + +.rfipbtn--cyan { + background-color: #fff; + border: 1px solid #4dd0e1; +} + +.rfipbtn--cyan:active, +.rfipbtn--cyan:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #26c6da; +} + +.rfipbtn--cyan .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #4dd0e1; + background-color: #b2ebf2; + color: #00838f; +} + +.rfipbtn--cyan .rfipbtn__button:hover { + background-color: #26c6da; +} + +.rfipbtn--cyan .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #4dd0e1; + box-shadow: inset 0 0 10px 0 #4dd0e1; +} + +.rfipbtn--cyan .rfipbtn__icon { + border: 1px solid #80deea; + color: #00838f; +} + +.rfipbtn--cyan .rfipbtn__icon--empty { + color: #4dd0e1; +} + +.rfipbtn--cyan .rfipbtn__del { + background-color: #80deea; +} + +.rfipbtn--cyan .rfipbtn__del:hover { + background-color: #4dd0e1; +} + +.rfipbtn--cyan .rfipbtn__del:active, +.rfipbtn--cyan .rfipbtn__del:focus { + outline: 1px solid #4dd0e1; +} + +.rfipdropdown--cyan { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #4dd0e1; +} + +.rfipdropdown--cyan input, +.rfipdropdown--cyan select { + color: #424242; +} + +.rfipdropdown--cyan .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #26c6da; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--cyan .rfipcategory select:active, +.rfipdropdown--cyan .rfipcategory select:focus { + border-bottom-color: #00bcd4; + -webkit-box-shadow: 0 1px 0 0 #00bcd4; + box-shadow: 0 1px 0 0 #00bcd4; + outline: 0 none; +} + +.rfipdropdown--cyan .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #26c6da; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--cyan .rfipicons__cp:active, +.rfipdropdown--cyan .rfipicons__cp:focus { + border-bottom-color: #00bcd4; + -webkit-box-shadow: 0 1px 0 0 #00bcd4; + box-shadow: 0 1px 0 0 #00bcd4; + outline: 0 none; +} + +.rfipdropdown--cyan .rfipicons__left, +.rfipdropdown--cyan .rfipicons__right { + background-color: #80deea; + border: 1px solid #80deea; + color: #00838f; +} + +.rfipdropdown--cyan .rfipicons__left:hover, +.rfipdropdown--cyan .rfipicons__right:hover { + background-color: #26c6da; + border: 1px solid #26c6da; +} + +.rfipdropdown--cyan .rfipicons__left:active, +.rfipdropdown--cyan .rfipicons__left:focus, +.rfipdropdown--cyan .rfipicons__right:active, +.rfipdropdown--cyan .rfipicons__right:focus { + border: 1px solid #26c6da; +} + +.rfipdropdown--cyan .rfipicons__ibox { + background-color: #b2ebf2; + border: 1px solid #b2ebf2; + color: #00838f; +} + +.rfipdropdown--cyan .rfipicons__ibox:hover { + background-color: #26c6da; + border: 1px solid #26c6da; +} + +.rfipdropdown--cyan .rfipicons__ibox:active, +.rfipdropdown--cyan .rfipicons__ibox:focus { + border: 1px solid #26c6da; +} + +.rfipdropdown--cyan .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--cyan .rfipicons__icon--selected .rfipicons__ibox { + background-color: #80deea; +} + +.rfipdropdown--cyan .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #26c6da; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--cyan .rfipsearch input:active, +.rfipdropdown--cyan .rfipsearch input:focus { + border-bottom-color: #00bcd4; + -webkit-box-shadow: 0 1px 0 0 #00bcd4; + box-shadow: 0 1px 0 0 #00bcd4; + outline: 0 none; +} + +.rfipbtn--deeporange { + background-color: #fff; + border: 1px solid #ff8a65; +} + +.rfipbtn--deeporange:active, +.rfipbtn--deeporange:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #ff7043; +} + +.rfipbtn--deeporange .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #ff8a65; + background-color: #ffccbc; + color: #d84315; +} + +.rfipbtn--deeporange .rfipbtn__button:hover { + background-color: #ff7043; +} + +.rfipbtn--deeporange .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #ff8a65; + box-shadow: inset 0 0 10px 0 #ff8a65; +} + +.rfipbtn--deeporange .rfipbtn__icon { + border: 1px solid #ffab91; + color: #d84315; +} + +.rfipbtn--deeporange .rfipbtn__icon--empty { + color: #ff8a65; +} + +.rfipbtn--deeporange .rfipbtn__del { + background-color: #ffab91; +} + +.rfipbtn--deeporange .rfipbtn__del:hover { + background-color: #ff8a65; +} + +.rfipbtn--deeporange .rfipbtn__del:active, +.rfipbtn--deeporange .rfipbtn__del:focus { + outline: 1px solid #ff8a65; +} + +.rfipdropdown--deeporange { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #ff8a65; +} + +.rfipdropdown--deeporange input, +.rfipdropdown--deeporange select { + color: #424242; +} + +.rfipdropdown--deeporange .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #ff7043; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--deeporange .rfipcategory select:active, +.rfipdropdown--deeporange .rfipcategory select:focus { + border-bottom-color: #ff5722; + -webkit-box-shadow: 0 1px 0 0 #ff5722; + box-shadow: 0 1px 0 0 #ff5722; + outline: 0 none; +} + +.rfipdropdown--deeporange .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #ff7043; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--deeporange .rfipicons__cp:active, +.rfipdropdown--deeporange .rfipicons__cp:focus { + border-bottom-color: #ff5722; + -webkit-box-shadow: 0 1px 0 0 #ff5722; + box-shadow: 0 1px 0 0 #ff5722; + outline: 0 none; +} + +.rfipdropdown--deeporange .rfipicons__left, +.rfipdropdown--deeporange .rfipicons__right { + background-color: #ffab91; + border: 1px solid #ffab91; + color: #d84315; +} + +.rfipdropdown--deeporange .rfipicons__left:hover, +.rfipdropdown--deeporange .rfipicons__right:hover { + background-color: #ff7043; + border: 1px solid #ff7043; +} + +.rfipdropdown--deeporange .rfipicons__left:active, +.rfipdropdown--deeporange .rfipicons__left:focus, +.rfipdropdown--deeporange .rfipicons__right:active, +.rfipdropdown--deeporange .rfipicons__right:focus { + border: 1px solid #ff7043; +} + +.rfipdropdown--deeporange .rfipicons__ibox { + background-color: #ffccbc; + border: 1px solid #ffccbc; + color: #d84315; +} + +.rfipdropdown--deeporange .rfipicons__ibox:hover { + background-color: #ff7043; + border: 1px solid #ff7043; +} + +.rfipdropdown--deeporange .rfipicons__ibox:active, +.rfipdropdown--deeporange .rfipicons__ibox:focus { + border: 1px solid #ff7043; +} + +.rfipdropdown--deeporange .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--deeporange .rfipicons__icon--selected .rfipicons__ibox { + background-color: #ffab91; +} + +.rfipdropdown--deeporange .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #ff7043; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--deeporange .rfipsearch input:active, +.rfipdropdown--deeporange .rfipsearch input:focus { + border-bottom-color: #ff5722; + -webkit-box-shadow: 0 1px 0 0 #ff5722; + box-shadow: 0 1px 0 0 #ff5722; + outline: 0 none; +} + +.rfipbtn--deeppurple { + background-color: #fff; + border: 1px solid #9575cd; +} + +.rfipbtn--deeppurple:active, +.rfipbtn--deeppurple:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #7e57c2; +} + +.rfipbtn--deeppurple .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #9575cd; + background-color: #d1c4e9; + color: #4527a0; +} + +.rfipbtn--deeppurple .rfipbtn__button:hover { + background-color: #7e57c2; +} + +.rfipbtn--deeppurple .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #9575cd; + box-shadow: inset 0 0 10px 0 #9575cd; +} + +.rfipbtn--deeppurple .rfipbtn__icon { + border: 1px solid #b39ddb; + color: #4527a0; +} + +.rfipbtn--deeppurple .rfipbtn__icon--empty { + color: #9575cd; +} + +.rfipbtn--deeppurple .rfipbtn__del { + background-color: #b39ddb; +} + +.rfipbtn--deeppurple .rfipbtn__del:hover { + background-color: #9575cd; +} + +.rfipbtn--deeppurple .rfipbtn__del:active, +.rfipbtn--deeppurple .rfipbtn__del:focus { + outline: 1px solid #9575cd; +} + +.rfipdropdown--deeppurple { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #9575cd; +} + +.rfipdropdown--deeppurple input, +.rfipdropdown--deeppurple select { + color: #424242; +} + +.rfipdropdown--deeppurple .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #7e57c2; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--deeppurple .rfipcategory select:active, +.rfipdropdown--deeppurple .rfipcategory select:focus { + border-bottom-color: #673ab7; + -webkit-box-shadow: 0 1px 0 0 #673ab7; + box-shadow: 0 1px 0 0 #673ab7; + outline: 0 none; +} + +.rfipdropdown--deeppurple .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #7e57c2; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--deeppurple .rfipicons__cp:active, +.rfipdropdown--deeppurple .rfipicons__cp:focus { + border-bottom-color: #673ab7; + -webkit-box-shadow: 0 1px 0 0 #673ab7; + box-shadow: 0 1px 0 0 #673ab7; + outline: 0 none; +} + +.rfipdropdown--deeppurple .rfipicons__left, +.rfipdropdown--deeppurple .rfipicons__right { + background-color: #b39ddb; + border: 1px solid #b39ddb; + color: #4527a0; +} + +.rfipdropdown--deeppurple .rfipicons__left:hover, +.rfipdropdown--deeppurple .rfipicons__right:hover { + background-color: #7e57c2; + border: 1px solid #7e57c2; +} + +.rfipdropdown--deeppurple .rfipicons__left:active, +.rfipdropdown--deeppurple .rfipicons__left:focus, +.rfipdropdown--deeppurple .rfipicons__right:active, +.rfipdropdown--deeppurple .rfipicons__right:focus { + border: 1px solid #7e57c2; +} + +.rfipdropdown--deeppurple .rfipicons__ibox { + background-color: #d1c4e9; + border: 1px solid #d1c4e9; + color: #4527a0; +} + +.rfipdropdown--deeppurple .rfipicons__ibox:hover { + background-color: #7e57c2; + border: 1px solid #7e57c2; +} + +.rfipdropdown--deeppurple .rfipicons__ibox:active, +.rfipdropdown--deeppurple .rfipicons__ibox:focus { + border: 1px solid #7e57c2; +} + +.rfipdropdown--deeppurple .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--deeppurple .rfipicons__icon--selected .rfipicons__ibox { + background-color: #b39ddb; +} + +.rfipdropdown--deeppurple .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #7e57c2; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--deeppurple .rfipsearch input:active, +.rfipdropdown--deeppurple .rfipsearch input:focus { + border-bottom-color: #673ab7; + -webkit-box-shadow: 0 1px 0 0 #673ab7; + box-shadow: 0 1px 0 0 #673ab7; + outline: 0 none; +} + +.rfipbtn--default { + background-color: #fff; + border: 1px solid #e0e0e0; + width: 100%; +} + +.rfipbtn--default:active, +.rfipbtn--default:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #bdbdbd; +} + +.rfipbtn--default .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #e0e0e0; + background-color: #f5f5f5; + color: #424242; +} + +.rfipbtn--default .rfipbtn__button:hover { + background-color: #bdbdbd; +} + +.rfipbtn--default .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #e0e0e0; + box-shadow: inset 0 0 10px 0 #e0e0e0; +} + +.rfipbtn--default .rfipbtn__icon { + border: 1px solid #eee; + color: #424242; + height: 40px; +} + +.rfipbtn--default .rfipbtn__icon--empty { + color: #e0e0e0; +} + +.rfipbtn--default .rfipbtn__del { + background-color: #eee; + height: 18px; +} + +.rfipbtn--default .rfipbtn__del:hover { + background-color: #e0e0e0; +} + +.rfipbtn--default .rfipbtn__del:active, +.rfipbtn--default .rfipbtn__del:focus { + outline: 1px solid #e0e0e0; +} + +.rfipdropdown--default { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #e0e0e0; +} + +.rfipdropdown--default input, +.rfipdropdown--default select { + color: #424242; +} + +.rfipdropdown--default .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #bdbdbd; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--default .rfipcategory select:active, +.rfipdropdown--default .rfipcategory select:focus { + border-bottom-color: #9e9e9e; + -webkit-box-shadow: 0 1px 0 0 #9e9e9e; + box-shadow: 0 1px 0 0 #9e9e9e; + outline: 0 none; +} + +.rfipdropdown--default .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #bdbdbd; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--default .rfipicons__cp:active, +.rfipdropdown--default .rfipicons__cp:focus { + border-bottom-color: #9e9e9e; + -webkit-box-shadow: 0 1px 0 0 #9e9e9e; + box-shadow: 0 1px 0 0 #9e9e9e; + outline: 0 none; +} + +.rfipdropdown--default .rfipicons__left, +.rfipdropdown--default .rfipicons__right { + background-color: #eee; + border: 1px solid #eee; + color: #424242; +} + +.rfipdropdown--default .rfipicons__left:hover, +.rfipdropdown--default .rfipicons__right:hover { + background-color: #bdbdbd; + border: 1px solid #bdbdbd; +} + +.rfipdropdown--default .rfipicons__left:active, +.rfipdropdown--default .rfipicons__left:focus, +.rfipdropdown--default .rfipicons__right:active, +.rfipdropdown--default .rfipicons__right:focus { + border: 1px solid #bdbdbd; +} + +.rfipdropdown--default .rfipicons__ibox { + background-color: #f5f5f5; + border: 1px solid #f5f5f5; + color: #424242; +} + +.rfipdropdown--default .rfipicons__ibox:hover { + background-color: #bdbdbd; + border: 1px solid #bdbdbd; +} + +.rfipdropdown--default .rfipicons__ibox:active, +.rfipdropdown--default .rfipicons__ibox:focus { + border: 1px solid #bdbdbd; +} + +.rfipdropdown--default .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--default .rfipicons__icon--selected .rfipicons__ibox { + background-color: #eee; +} + +.rfipdropdown--default .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #bdbdbd; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--default .rfipsearch input:active, +.rfipdropdown--default .rfipsearch input:focus { + border-bottom-color: #9e9e9e; + -webkit-box-shadow: 0 1px 0 0 #9e9e9e; + box-shadow: 0 1px 0 0 #9e9e9e; + outline: 0 none; +} + +.rfipbtn--blue { + background-color: #fff; + border: 1px solid #64b5f6; +} + +.rfipbtn--blue:active, +.rfipbtn--blue:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #42a5f5; +} + +.rfipbtn--blue .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #64b5f6; + background-color: #bbdefb; + color: #1565c0; +} + +.rfipbtn--blue .rfipbtn__button:hover { + background-color: #42a5f5; +} + +.rfipbtn--blue .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #64b5f6; + box-shadow: inset 0 0 10px 0 #64b5f6; +} + +.rfipbtn--blue .rfipbtn__icon { + border: 1px solid #90caf9; + color: #1565c0; +} + +.rfipbtn--blue .rfipbtn__icon--empty { + color: #64b5f6; +} + +.rfipbtn--blue .rfipbtn__del { + background-color: #90caf9; +} + +.rfipbtn--blue .rfipbtn__del:hover { + background-color: #64b5f6; +} + +.rfipbtn--blue .rfipbtn__del:active, +.rfipbtn--blue .rfipbtn__del:focus { + outline: 1px solid #64b5f6; +} + +.rfipdropdown--blue { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #64b5f6; +} + +.rfipdropdown--blue input, +.rfipdropdown--blue select { + color: #424242; +} + +.rfipdropdown--blue .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #42a5f5; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--blue .rfipcategory select:active, +.rfipdropdown--blue .rfipcategory select:focus { + border-bottom-color: #2196f3; + -webkit-box-shadow: 0 1px 0 0 #2196f3; + box-shadow: 0 1px 0 0 #2196f3; + outline: 0 none; +} + +.rfipdropdown--blue .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #42a5f5; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--blue .rfipicons__cp:active, +.rfipdropdown--blue .rfipicons__cp:focus { + border-bottom-color: #2196f3; + -webkit-box-shadow: 0 1px 0 0 #2196f3; + box-shadow: 0 1px 0 0 #2196f3; + outline: 0 none; +} + +.rfipdropdown--blue .rfipicons__left, +.rfipdropdown--blue .rfipicons__right { + background-color: #90caf9; + border: 1px solid #90caf9; + color: #1565c0; +} + +.rfipdropdown--blue .rfipicons__left:hover, +.rfipdropdown--blue .rfipicons__right:hover { + background-color: #42a5f5; + border: 1px solid #42a5f5; +} + +.rfipdropdown--blue .rfipicons__left:active, +.rfipdropdown--blue .rfipicons__left:focus, +.rfipdropdown--blue .rfipicons__right:active, +.rfipdropdown--blue .rfipicons__right:focus { + border: 1px solid #42a5f5; +} + +.rfipdropdown--blue .rfipicons__ibox { + background-color: #bbdefb; + border: 1px solid #bbdefb; + color: #1565c0; +} + +.rfipdropdown--blue .rfipicons__ibox:hover { + background-color: #42a5f5; + border: 1px solid #42a5f5; +} + +.rfipdropdown--blue .rfipicons__ibox:active, +.rfipdropdown--blue .rfipicons__ibox:focus { + border: 1px solid #42a5f5; +} + +.rfipdropdown--blue .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--blue .rfipicons__icon--selected .rfipicons__ibox { + background-color: #90caf9; +} + +.rfipdropdown--blue .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #42a5f5; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--blue .rfipsearch input:active, +.rfipdropdown--blue .rfipsearch input:focus { + border-bottom-color: #2196f3; + -webkit-box-shadow: 0 1px 0 0 #2196f3; + box-shadow: 0 1px 0 0 #2196f3; + outline: 0 none; +} + +.rfipbtn--indigo { + background-color: #fff; + border: 1px solid #7986cb; +} + +.rfipbtn--indigo:active, +.rfipbtn--indigo:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #5c6bc0; +} + +.rfipbtn--indigo .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #7986cb; + background-color: #c5cae9; + color: #283593; +} + +.rfipbtn--indigo .rfipbtn__button:hover { + background-color: #5c6bc0; +} + +.rfipbtn--indigo .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #7986cb; + box-shadow: inset 0 0 10px 0 #7986cb; +} + +.rfipbtn--indigo .rfipbtn__icon { + border: 1px solid #9fa8da; + color: #283593; +} + +.rfipbtn--indigo .rfipbtn__icon--empty { + color: #7986cb; +} + +.rfipbtn--indigo .rfipbtn__del { + background-color: #9fa8da; +} + +.rfipbtn--indigo .rfipbtn__del:hover { + background-color: #7986cb; +} + +.rfipbtn--indigo .rfipbtn__del:active, +.rfipbtn--indigo .rfipbtn__del:focus { + outline: 1px solid #7986cb; +} + +.rfipdropdown--indigo { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #7986cb; +} + +.rfipdropdown--indigo input, +.rfipdropdown--indigo select { + color: #424242; +} + +.rfipdropdown--indigo .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #5c6bc0; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--indigo .rfipcategory select:active, +.rfipdropdown--indigo .rfipcategory select:focus { + border-bottom-color: #3f51b5; + -webkit-box-shadow: 0 1px 0 0 #3f51b5; + box-shadow: 0 1px 0 0 #3f51b5; + outline: 0 none; +} + +.rfipdropdown--indigo .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #5c6bc0; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--indigo .rfipicons__cp:active, +.rfipdropdown--indigo .rfipicons__cp:focus { + border-bottom-color: #3f51b5; + -webkit-box-shadow: 0 1px 0 0 #3f51b5; + box-shadow: 0 1px 0 0 #3f51b5; + outline: 0 none; +} + +.rfipdropdown--indigo .rfipicons__left, +.rfipdropdown--indigo .rfipicons__right { + background-color: #9fa8da; + border: 1px solid #9fa8da; + color: #283593; +} + +.rfipdropdown--indigo .rfipicons__left:hover, +.rfipdropdown--indigo .rfipicons__right:hover { + background-color: #5c6bc0; + border: 1px solid #5c6bc0; +} + +.rfipdropdown--indigo .rfipicons__left:active, +.rfipdropdown--indigo .rfipicons__left:focus, +.rfipdropdown--indigo .rfipicons__right:active, +.rfipdropdown--indigo .rfipicons__right:focus { + border: 1px solid #5c6bc0; +} + +.rfipdropdown--indigo .rfipicons__ibox { + background-color: #c5cae9; + border: 1px solid #c5cae9; + color: #283593; +} + +.rfipdropdown--indigo .rfipicons__ibox:hover { + background-color: #5c6bc0; + border: 1px solid #5c6bc0; +} + +.rfipdropdown--indigo .rfipicons__ibox:active, +.rfipdropdown--indigo .rfipicons__ibox:focus { + border: 1px solid #5c6bc0; +} + +.rfipdropdown--indigo .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--indigo .rfipicons__icon--selected .rfipicons__ibox { + background-color: #9fa8da; +} + +.rfipdropdown--indigo .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #5c6bc0; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--indigo .rfipsearch input:active, +.rfipdropdown--indigo .rfipsearch input:focus { + border-bottom-color: #3f51b5; + -webkit-box-shadow: 0 1px 0 0 #3f51b5; + box-shadow: 0 1px 0 0 #3f51b5; + outline: 0 none; +} + +.rfipbtn--lightblue { + background-color: #fff; + border: 1px solid #4fc3f7; +} + +.rfipbtn--lightblue:active, +.rfipbtn--lightblue:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #29b6f6; +} + +.rfipbtn--lightblue .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #4fc3f7; + background-color: #b3e5fc; + color: #0277bd; +} + +.rfipbtn--lightblue .rfipbtn__button:hover { + background-color: #29b6f6; +} + +.rfipbtn--lightblue .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #4fc3f7; + box-shadow: inset 0 0 10px 0 #4fc3f7; +} + +.rfipbtn--lightblue .rfipbtn__icon { + border: 1px solid #81d4fa; + color: #0277bd; +} + +.rfipbtn--lightblue .rfipbtn__icon--empty { + color: #4fc3f7; +} + +.rfipbtn--lightblue .rfipbtn__del { + background-color: #81d4fa; +} + +.rfipbtn--lightblue .rfipbtn__del:hover { + background-color: #4fc3f7; +} + +.rfipbtn--lightblue .rfipbtn__del:active, +.rfipbtn--lightblue .rfipbtn__del:focus { + outline: 1px solid #4fc3f7; +} + +.rfipdropdown--lightblue { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #4fc3f7; +} + +.rfipdropdown--lightblue input, +.rfipdropdown--lightblue select { + color: #424242; +} + +.rfipdropdown--lightblue .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #29b6f6; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--lightblue .rfipcategory select:active, +.rfipdropdown--lightblue .rfipcategory select:focus { + border-bottom-color: #03a9f4; + -webkit-box-shadow: 0 1px 0 0 #03a9f4; + box-shadow: 0 1px 0 0 #03a9f4; + outline: 0 none; +} + +.rfipdropdown--lightblue .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #29b6f6; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--lightblue .rfipicons__cp:active, +.rfipdropdown--lightblue .rfipicons__cp:focus { + border-bottom-color: #03a9f4; + -webkit-box-shadow: 0 1px 0 0 #03a9f4; + box-shadow: 0 1px 0 0 #03a9f4; + outline: 0 none; +} + +.rfipdropdown--lightblue .rfipicons__left, +.rfipdropdown--lightblue .rfipicons__right { + background-color: #81d4fa; + border: 1px solid #81d4fa; + color: #0277bd; +} + +.rfipdropdown--lightblue .rfipicons__left:hover, +.rfipdropdown--lightblue .rfipicons__right:hover { + background-color: #29b6f6; + border: 1px solid #29b6f6; +} + +.rfipdropdown--lightblue .rfipicons__left:active, +.rfipdropdown--lightblue .rfipicons__left:focus, +.rfipdropdown--lightblue .rfipicons__right:active, +.rfipdropdown--lightblue .rfipicons__right:focus { + border: 1px solid #29b6f6; +} + +.rfipdropdown--lightblue .rfipicons__ibox { + background-color: #b3e5fc; + border: 1px solid #b3e5fc; + color: #0277bd; +} + +.rfipdropdown--lightblue .rfipicons__ibox:hover { + background-color: #29b6f6; + border: 1px solid #29b6f6; +} + +.rfipdropdown--lightblue .rfipicons__ibox:active, +.rfipdropdown--lightblue .rfipicons__ibox:focus { + border: 1px solid #29b6f6; +} + +.rfipdropdown--lightblue .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--lightblue .rfipicons__icon--selected .rfipicons__ibox { + background-color: #81d4fa; +} + +.rfipdropdown--lightblue .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #29b6f6; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--lightblue .rfipsearch input:active, +.rfipdropdown--lightblue .rfipsearch input:focus { + border-bottom-color: #03a9f4; + -webkit-box-shadow: 0 1px 0 0 #03a9f4; + box-shadow: 0 1px 0 0 #03a9f4; + outline: 0 none; +} + +.rfipbtn--pink { + background-color: #fff; + border: 1px solid #f06292; +} + +.rfipbtn--pink:active, +.rfipbtn--pink:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #ec407a; +} + +.rfipbtn--pink .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #f06292; + background-color: #f8bbd0; + color: #ad1457; +} + +.rfipbtn--pink .rfipbtn__button:hover { + background-color: #ec407a; +} + +.rfipbtn--pink .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #f06292; + box-shadow: inset 0 0 10px 0 #f06292; +} + +.rfipbtn--pink .rfipbtn__icon { + border: 1px solid #f48fb1; + color: #ad1457; +} + +.rfipbtn--pink .rfipbtn__icon--empty { + color: #f06292; +} + +.rfipbtn--pink .rfipbtn__del { + background-color: #f48fb1; +} + +.rfipbtn--pink .rfipbtn__del:hover { + background-color: #f06292; +} + +.rfipbtn--pink .rfipbtn__del:active, +.rfipbtn--pink .rfipbtn__del:focus { + outline: 1px solid #f06292; +} + +.rfipdropdown--pink { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #f06292; +} + +.rfipdropdown--pink input, +.rfipdropdown--pink select { + color: #424242; +} + +.rfipdropdown--pink .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #ec407a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--pink .rfipcategory select:active, +.rfipdropdown--pink .rfipcategory select:focus { + border-bottom-color: #e91e63; + -webkit-box-shadow: 0 1px 0 0 #e91e63; + box-shadow: 0 1px 0 0 #e91e63; + outline: 0 none; +} + +.rfipdropdown--pink .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #ec407a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--pink .rfipicons__cp:active, +.rfipdropdown--pink .rfipicons__cp:focus { + border-bottom-color: #e91e63; + -webkit-box-shadow: 0 1px 0 0 #e91e63; + box-shadow: 0 1px 0 0 #e91e63; + outline: 0 none; +} + +.rfipdropdown--pink .rfipicons__left, +.rfipdropdown--pink .rfipicons__right { + background-color: #f48fb1; + border: 1px solid #f48fb1; + color: #ad1457; +} + +.rfipdropdown--pink .rfipicons__left:hover, +.rfipdropdown--pink .rfipicons__right:hover { + background-color: #ec407a; + border: 1px solid #ec407a; +} + +.rfipdropdown--pink .rfipicons__left:active, +.rfipdropdown--pink .rfipicons__left:focus, +.rfipdropdown--pink .rfipicons__right:active, +.rfipdropdown--pink .rfipicons__right:focus { + border: 1px solid #ec407a; +} + +.rfipdropdown--pink .rfipicons__ibox { + background-color: #f8bbd0; + border: 1px solid #f8bbd0; + color: #ad1457; +} + +.rfipdropdown--pink .rfipicons__ibox:hover { + background-color: #ec407a; + border: 1px solid #ec407a; +} + +.rfipdropdown--pink .rfipicons__ibox:active, +.rfipdropdown--pink .rfipicons__ibox:focus { + border: 1px solid #ec407a; +} + +.rfipdropdown--pink .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--pink .rfipicons__icon--selected .rfipicons__ibox { + background-color: #f48fb1; +} + +.rfipdropdown--pink .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #ec407a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--pink .rfipsearch input:active, +.rfipdropdown--pink .rfipsearch input:focus { + border-bottom-color: #e91e63; + -webkit-box-shadow: 0 1px 0 0 #e91e63; + box-shadow: 0 1px 0 0 #e91e63; + outline: 0 none; +} + +.rfipbtn--orange { + background-color: #fff; + border: 1px solid #ffb74d; +} + +.rfipbtn--orange:active, +.rfipbtn--orange:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #ffa726; +} + +.rfipbtn--orange .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #ffb74d; + background-color: #ffe0b2; + color: #ef6c00; +} + +.rfipbtn--orange .rfipbtn__button:hover { + background-color: #ffa726; +} + +.rfipbtn--orange .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #ffb74d; + box-shadow: inset 0 0 10px 0 #ffb74d; +} + +.rfipbtn--orange .rfipbtn__icon { + border: 1px solid #ffcc80; + color: #ef6c00; +} + +.rfipbtn--orange .rfipbtn__icon--empty { + color: #ffb74d; +} + +.rfipbtn--orange .rfipbtn__del { + background-color: #ffcc80; +} + +.rfipbtn--orange .rfipbtn__del:hover { + background-color: #ffb74d; +} + +.rfipbtn--orange .rfipbtn__del:active, +.rfipbtn--orange .rfipbtn__del:focus { + outline: 1px solid #ffb74d; +} + +.rfipdropdown--orange { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #ffb74d; +} + +.rfipdropdown--orange input, +.rfipdropdown--orange select { + color: #424242; +} + +.rfipdropdown--orange .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #ffa726; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--orange .rfipcategory select:active, +.rfipdropdown--orange .rfipcategory select:focus { + border-bottom-color: #ff9800; + -webkit-box-shadow: 0 1px 0 0 #ff9800; + box-shadow: 0 1px 0 0 #ff9800; + outline: 0 none; +} + +.rfipdropdown--orange .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #ffa726; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--orange .rfipicons__cp:active, +.rfipdropdown--orange .rfipicons__cp:focus { + border-bottom-color: #ff9800; + -webkit-box-shadow: 0 1px 0 0 #ff9800; + box-shadow: 0 1px 0 0 #ff9800; + outline: 0 none; +} + +.rfipdropdown--orange .rfipicons__left, +.rfipdropdown--orange .rfipicons__right { + background-color: #ffcc80; + border: 1px solid #ffcc80; + color: #ef6c00; +} + +.rfipdropdown--orange .rfipicons__left:hover, +.rfipdropdown--orange .rfipicons__right:hover { + background-color: #ffa726; + border: 1px solid #ffa726; +} + +.rfipdropdown--orange .rfipicons__left:active, +.rfipdropdown--orange .rfipicons__left:focus, +.rfipdropdown--orange .rfipicons__right:active, +.rfipdropdown--orange .rfipicons__right:focus { + border: 1px solid #ffa726; +} + +.rfipdropdown--orange .rfipicons__ibox { + background-color: #ffe0b2; + border: 1px solid #ffe0b2; + color: #ef6c00; +} + +.rfipdropdown--orange .rfipicons__ibox:hover { + background-color: #ffa726; + border: 1px solid #ffa726; +} + +.rfipdropdown--orange .rfipicons__ibox:active, +.rfipdropdown--orange .rfipicons__ibox:focus { + border: 1px solid #ffa726; +} + +.rfipdropdown--orange .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--orange .rfipicons__icon--selected .rfipicons__ibox { + background-color: #ffcc80; +} + +.rfipdropdown--orange .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #ffa726; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--orange .rfipsearch input:active, +.rfipdropdown--orange .rfipsearch input:focus { + border-bottom-color: #ff9800; + -webkit-box-shadow: 0 1px 0 0 #ff9800; + box-shadow: 0 1px 0 0 #ff9800; + outline: 0 none; +} + +.rfipbtn--purple { + background-color: #fff; + border: 1px solid #ba68c8; +} + +.rfipbtn--purple:active, +.rfipbtn--purple:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #ab47bc; +} + +.rfipbtn--purple .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #ba68c8; + background-color: #e1bee7; + color: #6a1b9a; +} + +.rfipbtn--purple .rfipbtn__button:hover { + background-color: #ab47bc; +} + +.rfipbtn--purple .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #ba68c8; + box-shadow: inset 0 0 10px 0 #ba68c8; +} + +.rfipbtn--purple .rfipbtn__icon { + border: 1px solid #ce93d8; + color: #6a1b9a; +} + +.rfipbtn--purple .rfipbtn__icon--empty { + color: #ba68c8; +} + +.rfipbtn--purple .rfipbtn__del { + background-color: #ce93d8; +} + +.rfipbtn--purple .rfipbtn__del:hover { + background-color: #ba68c8; +} + +.rfipbtn--purple .rfipbtn__del:active, +.rfipbtn--purple .rfipbtn__del:focus { + outline: 1px solid #ba68c8; +} + +.rfipdropdown--purple { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #ba68c8; +} + +.rfipdropdown--purple input, +.rfipdropdown--purple select { + color: #424242; +} + +.rfipdropdown--purple .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #ab47bc; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--purple .rfipcategory select:active, +.rfipdropdown--purple .rfipcategory select:focus { + border-bottom-color: #9c27b0; + -webkit-box-shadow: 0 1px 0 0 #9c27b0; + box-shadow: 0 1px 0 0 #9c27b0; + outline: 0 none; +} + +.rfipdropdown--purple .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #ab47bc; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--purple .rfipicons__cp:active, +.rfipdropdown--purple .rfipicons__cp:focus { + border-bottom-color: #9c27b0; + -webkit-box-shadow: 0 1px 0 0 #9c27b0; + box-shadow: 0 1px 0 0 #9c27b0; + outline: 0 none; +} + +.rfipdropdown--purple .rfipicons__left, +.rfipdropdown--purple .rfipicons__right { + background-color: #ce93d8; + border: 1px solid #ce93d8; + color: #6a1b9a; +} + +.rfipdropdown--purple .rfipicons__left:hover, +.rfipdropdown--purple .rfipicons__right:hover { + background-color: #ab47bc; + border: 1px solid #ab47bc; +} + +.rfipdropdown--purple .rfipicons__left:active, +.rfipdropdown--purple .rfipicons__left:focus, +.rfipdropdown--purple .rfipicons__right:active, +.rfipdropdown--purple .rfipicons__right:focus { + border: 1px solid #ab47bc; +} + +.rfipdropdown--purple .rfipicons__ibox { + background-color: #e1bee7; + border: 1px solid #e1bee7; + color: #6a1b9a; +} + +.rfipdropdown--purple .rfipicons__ibox:hover { + background-color: #ab47bc; + border: 1px solid #ab47bc; +} + +.rfipdropdown--purple .rfipicons__ibox:active, +.rfipdropdown--purple .rfipicons__ibox:focus { + border: 1px solid #ab47bc; +} + +.rfipdropdown--purple .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--purple .rfipicons__icon--selected .rfipicons__ibox { + background-color: #ce93d8; +} + +.rfipdropdown--purple .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #ab47bc; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--purple .rfipsearch input:active, +.rfipdropdown--purple .rfipsearch input:focus { + border-bottom-color: #9c27b0; + -webkit-box-shadow: 0 1px 0 0 #9c27b0; + box-shadow: 0 1px 0 0 #9c27b0; + outline: 0 none; +} + +.rfipbtn--red { + background-color: #fff; + border: 1px solid #e57373; +} + +.rfipbtn--red:active, +.rfipbtn--red:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #ef5350; +} + +.rfipbtn--red .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #e57373; + background-color: #ffcdd2; + color: #c62828; +} + +.rfipbtn--red .rfipbtn__button:hover { + background-color: #ef5350; +} + +.rfipbtn--red .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #e57373; + box-shadow: inset 0 0 10px 0 #e57373; +} + +.rfipbtn--red .rfipbtn__icon { + border: 1px solid #ef9a9a; + color: #c62828; +} + +.rfipbtn--red .rfipbtn__icon--empty { + color: #e57373; +} + +.rfipbtn--red .rfipbtn__del { + background-color: #ef9a9a; +} + +.rfipbtn--red .rfipbtn__del:hover { + background-color: #e57373; +} + +.rfipbtn--red .rfipbtn__del:active, +.rfipbtn--red .rfipbtn__del:focus { + outline: 1px solid #e57373; +} + +.rfipdropdown--red { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #e57373; +} + +.rfipdropdown--red input, +.rfipdropdown--red select { + color: #424242; +} + +.rfipdropdown--red .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #ef5350; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--red .rfipcategory select:active, +.rfipdropdown--red .rfipcategory select:focus { + border-bottom-color: #f44336; + -webkit-box-shadow: 0 1px 0 0 #f44336; + box-shadow: 0 1px 0 0 #f44336; + outline: 0 none; +} + +.rfipdropdown--red .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #ef5350; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--red .rfipicons__cp:active, +.rfipdropdown--red .rfipicons__cp:focus { + border-bottom-color: #f44336; + -webkit-box-shadow: 0 1px 0 0 #f44336; + box-shadow: 0 1px 0 0 #f44336; + outline: 0 none; +} + +.rfipdropdown--red .rfipicons__left, +.rfipdropdown--red .rfipicons__right { + background-color: #ef9a9a; + border: 1px solid #ef9a9a; + color: #c62828; +} + +.rfipdropdown--red .rfipicons__left:hover, +.rfipdropdown--red .rfipicons__right:hover { + background-color: #ef5350; + border: 1px solid #ef5350; +} + +.rfipdropdown--red .rfipicons__left:active, +.rfipdropdown--red .rfipicons__left:focus, +.rfipdropdown--red .rfipicons__right:active, +.rfipdropdown--red .rfipicons__right:focus { + border: 1px solid #ef5350; +} + +.rfipdropdown--red .rfipicons__ibox { + background-color: #ffcdd2; + border: 1px solid #ffcdd2; + color: #c62828; +} + +.rfipdropdown--red .rfipicons__ibox:hover { + background-color: #ef5350; + border: 1px solid #ef5350; +} + +.rfipdropdown--red .rfipicons__ibox:active, +.rfipdropdown--red .rfipicons__ibox:focus { + border: 1px solid #ef5350; +} + +.rfipdropdown--red .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--red .rfipicons__icon--selected .rfipicons__ibox { + background-color: #ef9a9a; +} + +.rfipdropdown--red .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #ef5350; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--red .rfipsearch input:active, +.rfipdropdown--red .rfipsearch input:focus { + border-bottom-color: #f44336; + -webkit-box-shadow: 0 1px 0 0 #f44336; + box-shadow: 0 1px 0 0 #f44336; + outline: 0 none; +} + +.rfipbtn--teal { + background-color: #fff; + border: 1px solid #4db6ac; +} + +.rfipbtn--teal:active, +.rfipbtn--teal:focus { + -webkit-box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12); + border: 1px solid #26a69a; +} + +.rfipbtn--teal .rfipbtn__button { + border: 0 none transparent; + border-left: 1px solid #4db6ac; + background-color: #b2dfdb; + color: #00695c; +} + +.rfipbtn--teal .rfipbtn__button:hover { + background-color: #26a69a; +} + +.rfipbtn--teal .rfipbtn__button:active { + -webkit-box-shadow: inset 0 0 10px 0 #4db6ac; + box-shadow: inset 0 0 10px 0 #4db6ac; +} + +.rfipbtn--teal .rfipbtn__icon { + border: 1px solid #80cbc4; + color: #00695c; +} + +.rfipbtn--teal .rfipbtn__icon--empty { + color: #4db6ac; +} + +.rfipbtn--teal .rfipbtn__del { + background-color: #80cbc4; +} + +.rfipbtn--teal .rfipbtn__del:hover { + background-color: #4db6ac; +} + +.rfipbtn--teal .rfipbtn__del:active, +.rfipbtn--teal .rfipbtn__del:focus { + outline: 1px solid #4db6ac; +} + +.rfipdropdown--teal { + -webkit-box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + box-shadow: 0 15px 24px rgba(0, 0, 0, 0.22), 0 19px 76px rgba(0, 0, 0, 0.3); + color: #424242; + background-color: #fff; + border: 1px solid #4db6ac; +} + +.rfipdropdown--teal input, +.rfipdropdown--teal select { + color: #424242; +} + +.rfipdropdown--teal .rfipcategory select { + background-color: #fff; + border: 0 none; + border-bottom: 1px solid #26a69a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--teal .rfipcategory select:active, +.rfipdropdown--teal .rfipcategory select:focus { + border-bottom-color: #009688; + -webkit-box-shadow: 0 1px 0 0 #009688; + box-shadow: 0 1px 0 0 #009688; + outline: 0 none; +} + +.rfipdropdown--teal .rfipicons__cp { + border: 0 none; + border-bottom: 1px solid #26a69a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--teal .rfipicons__cp:active, +.rfipdropdown--teal .rfipicons__cp:focus { + border-bottom-color: #009688; + -webkit-box-shadow: 0 1px 0 0 #009688; + box-shadow: 0 1px 0 0 #009688; + outline: 0 none; +} + +.rfipdropdown--teal .rfipicons__left, +.rfipdropdown--teal .rfipicons__right { + background-color: #80cbc4; + border: 1px solid #80cbc4; + color: #00695c; +} + +.rfipdropdown--teal .rfipicons__left:hover, +.rfipdropdown--teal .rfipicons__right:hover { + background-color: #26a69a; + border: 1px solid #26a69a; +} + +.rfipdropdown--teal .rfipicons__left:active, +.rfipdropdown--teal .rfipicons__left:focus, +.rfipdropdown--teal .rfipicons__right:active, +.rfipdropdown--teal .rfipicons__right:focus { + border: 1px solid #26a69a; +} + +.rfipdropdown--teal .rfipicons__ibox { + background-color: #b2dfdb; + border: 1px solid #b2dfdb; + color: #00695c; +} + +.rfipdropdown--teal .rfipicons__ibox:hover { + background-color: #26a69a; + border: 1px solid #26a69a; +} + +.rfipdropdown--teal .rfipicons__ibox:active, +.rfipdropdown--teal .rfipicons__ibox:focus { + border: 1px solid #26a69a; +} + +.rfipdropdown--teal .rfipicons__ibox--error { + color: #ef9a9a; +} + +.rfipdropdown--teal .rfipicons__icon--selected .rfipicons__ibox { + background-color: #80cbc4; +} + +.rfipdropdown--teal .rfipsearch input { + border: 0 none; + border-bottom: 1px solid #26a69a; + -webkit-transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: border 0.25s, -webkit-box-shadow 0.25s; + transition: box-shadow 0.25s, border 0.25s; + transition: box-shadow 0.25s, border 0.25s, -webkit-box-shadow 0.25s; +} + +.rfipdropdown--teal .rfipsearch input:active, +.rfipdropdown--teal .rfipsearch input:focus { + border-bottom-color: #009688; + -webkit-box-shadow: 0 1px 0 0 #009688; + box-shadow: 0 1px 0 0 #009688; + outline: 0 none; +} + +[class^="fipicon-"] { + speak: none; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +i.fipicon-angle-down::before { + content: "\f140"; + font-family: dashicons, sans-serif; +} + +i.fipicon-angle-up::before { + content: "\f142"; + font-family: dashicons, sans-serif; +} + +i.fipicon-angle-right::before { + content: "\f345"; + font-family: dashicons, sans-serif; +} + +i.fipicon-angle-left::before { + content: "\f341"; + font-family: dashicons, sans-serif; +} + +label.wp-block-wpsp-blockquote__via-label svg { + fill: #6c7781; + vertical-align: middle; +} + +.slick-arrow svg { + vertical-align: middle; +} + +.components-select-control__input { + text-transform: capitalize; +} + +.components-panel__body.wpsp-repeater-panel { + max-width: 100%; + margin: 0 auto; + margin-bottom: 1em; + border: 1px solid #e2e4e7; + background: #fff; + margin-top: 1em; +} + +.edit-post-settings-sidebar__panel-block .components-panel__body.wpsp-repeater-panel:last-child { + margin-bottom: 1em; +} + +.wpsp-inline-margin .wpsp-margin-control label.components-base-control__label { + display: inline-block; +} + +.wpsp-inline-margin .components-button-group.wpsp-size-type-field { + display: inline-block; + float: right; +} + +/* Reset Button Alignment */ +.wpsp-size-type-field-tabs .components-base-control.components-range-control .components-base-control__field { + display: flex; + flex-wrap: unset; +} + +.wpsp-size-type-field-tabs.wpsp-size-type-field__common-tabs .components-base-control.components-range-control.wpsp-margin-control .components-base-control__field { + display: flex; +} + +.wpsp-size-type-field-tabs.wpsp-inline-margin .components-range-control .components-base-control__field { + display: unset; +} + +.wpsp-typography-range-options .wpsp-size-type-field-tabs .components-tab-panel__tab-content .components-base-control.components-range-control .components-base-control__field { + display: block; +} + +.wpsp-size-type-field-tabs .components-tab-panel__tab-content div.components-base-control .components-base-control__field { + display: block; +} + +.wpsp-typography-advanced .wpsp-typography-range-options .wpsp-size-type-field-tabs .components-base-control.components-range-control .components-base-control__field { + display: block; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq-child.css b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq-child.css new file mode 100644 index 00000000..f7bfbb8c --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq-child.css @@ -0,0 +1,62 @@ +.wp-block-wpsp-faq-child.wpsp-faq-child__outer-wrap .wpsp-faq-item:focus, +.wp-block-wpsp-faq-child.wpsp-faq-child__outer-wrap .wpsp-faq-item:active { + outline: thin dotted; +} + +.wp-block-wpsp-faq-child .wpsp-faq-questions-button { + display: flex; + align-items: center; + width: 100%; +} + +.wp-block-wpsp-faq-child .wpsp-faq-questions-button .wpsp-faq-icon-wrap { + display: inline-block; + vertical-align: middle; +} + +.wp-block-wpsp-faq-child .wpsp-faq-questions-button .wpsp-question { + width: 100%; + margin-top: 0; + margin-bottom: 0; +} + +.wp-block-wpsp-faq-child .wpsp-icon svg, +.wp-block-wpsp-faq-child .wpsp-icon-active svg { + width: 15px; + height: 15px; + font-size: 15px; +} + +.wp-block-wpsp-faq-child .wpsp-faq-content span { + display: inline-block; +} + +.wp-block-wpsp-faq-child .wpsp-faq-content p { + margin: 0; +} + +.wp-block-wpsp-faq-child.wpsp-faq-child__outer-wrap .wpsp-faq-item .wpsp-icon-active, +.wp-block-wpsp-faq-child.wpsp-faq-child__outer-wrap .wpsp-faq-item.wpsp-faq-item-active .wpsp-icon { + display: none; + width: 0; + padding: 0; + height: 0; + margin: 0; +} + +.wp-block-wpsp-faq-child.wpsp-faq-child__outer-wrap .wpsp-faq-item .wpsp-icon, +.wp-block-wpsp-faq-child.wpsp-faq-child__outer-wrap .wpsp-faq-item.wpsp-faq-item-active .wpsp-icon-active { + display: inline-block; + width: auto; + height: auto; +} + +.wpsp-faq-layout-grid .wpsp-faq-child__outer-wrap .wpsp-faq-item .wpsp-icon, +.wpsp-faq-layout-grid .wpsp-faq-child__outer-wrap .wpsp-faq-item.wpsp-faq-item-active .wpsp-icon-active { + display: none; +} + +.wpsp-faq-layout-grid .wpsp-faq-child__outer-wrap .wpsp-faq-item span.wpsp-icon-active.wpsp-faq-icon-wrap, +.wpsp-faq-layout-grid .wpsp-faq-child__outer-wrap .wpsp-faq-item.wpsp-faq-item-active .wpsp-icon-active { + display: none; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq.css b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq.css new file mode 100644 index 00000000..79cbf2df --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/faq.css @@ -0,0 +1,9 @@ +.wp-block-wpsp-faq.wpsp-faq-layout-accordion .wpsp-faq-child__outer-wrap .wpsp-faq-questions-button { + cursor: pointer; +} + +.wpsp-faq-layout-grid.wpsp-faq-equal-height .wpsp-faq__wrap .wpsp-faq-child__outer-wrap, +.wpsp-faq-layout-grid.wpsp-faq-equal-height .wpsp-faq__wrap .wpsp-faq-child__wrapper, +.wpsp-faq-layout-grid.wpsp-faq-equal-height .wpsp-faq__wrap .wpsp-faq-item { + height: 100%; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to-child.css b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to-child.css new file mode 100644 index 00000000..12aebcdc --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to-child.css @@ -0,0 +1,454 @@ +.wpsp-editor-bg-image-control .components-button { + vertical-align: middle; + margin-left: 10px; +} + +.wpsp-editor-bg-image-control .components-button:last-child { + margin-left: 10px; +} + +.wpsp-ifb-icon-wrap, +.wpsp-ifb-icon-wrap * { + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; +} + +.wpsp-ifb-icon-wrap .wpsp-ifb-icon, +.wpsp-ifb-content { + display: inline-block; +} + +.wpsp-ifb-icon svg { + width: inherit; + height: inherit; + vertical-align: middle; + fill: #333; +} + +.wpsp-howto-child-icon-above-title .wpsp-ifb-left-right-wrap { + text-align: center; +} + +a.wpsp-howto-child-cta-link span { + font-size: inherit; +} + +.wpsp-ifb-cta.wpsp-howto-child-cta-link-style:empty { + display: none; +} + +a.wpsp-howto-child-cta-link, +.entry .entry-content a.wpsp-howto-child-cta-link, +a.wpsp-howto-child-link-wrap, +.entry .entry-content a.wpsp-howto-child-link-wrap { + text-decoration: none; +} + +a.wpsp-howto-child-cta-link:hover, +.entry .entry-content a.wpsp-howto-child-cta-link:hover, +a.wpsp-howto-child-link-wrap:hover, +.entry .entry-content a.wpsp-howto-child-link-wrap:hover .entry .entry-content a.wpsp-howto-child-cta-link:hover { + color: inherit; +} + +.wpsp-howto-child-icon-left-title.wpsp-howto-child-image-valign-middle .wpsp-ifb-title-wrap, +.wpsp-howto-child-icon-right-title.wpsp-howto-child-image-valign-middle .wpsp-ifb-title-wrap, +.wpsp-howto-child-image-valign-middle .wpsp-ifb-imgicon-wrap, +.wpsp-howto-child-icon-left.wpsp-howto-child-image-valign-middle .wpsp-ifb-content, +.wpsp-howto-child-icon-right.wpsp-howto-child-image-valign-middle .wpsp-ifb-content { + -ms-flex-item-align: center; + -webkit-align-self: center; + align-self: center; +} + +.wpsp-howto-child-left { + text-align: left; + -webkit-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + -moz-box-pack: start; + justify-content: flex-start; +} + +.wpsp-howto-child-center { + text-align: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + -moz-box-pack: center; + justify-content: center; +} + +.wpsp-howto-child-right { + text-align: right; + -webkit-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + -moz-box-pack: end; + justify-content: flex-end; +} + +.wpsp-ifb-left-right-wrap { + width: 100%; + word-break: break-word; + z-index: 1; +} + +.wpsp-howto-child-icon-above-title .wpsp-ifb-left-right-wrap, +.wpsp-howto-child-icon-below-title .wpsp-ifb-left-right-wrap { + display: block; + min-width: 100%; + width: 100%; +} + +.wpsp-howto-child-icon-left-title .wpsp-ifb-icon-wrap, +.wpsp-howto-child-icon-left .wpsp-ifb-icon-wrap { + margin-right: 10px; +} + +.wpsp-howto-child-icon-right-title .wpsp-ifb-icon-wrap, +.wpsp-howto-child-icon-right .wpsp-ifb-icon-wrap { + margin-left: 10px; +} + +/* stylelint-disable declaration-block-no-duplicate-properties */ +.wpsp-howto-child-icon-left .wpsp-ifb-left-right-wrap, +.wpsp-howto-child-icon-right .wpsp-ifb-left-right-wrap, +.wpsp-howto-child-icon-left-title .wpsp-ifb-left-title-image, +.wpsp-howto-child-icon-right-title .wpsp-ifb-right-title-image { + display: -webkit-box; + display: -ms-flexbox; + -js-display: flex; + display: -webkit-flex; + display: -moz-box; + display: flex; +} + +.wpsp-howto-child-icon-right .wpsp-ifb-left-right-wrap, +.wpsp-howto-child-icon-right-title .wpsp-ifb-right-title-image { + -webkit-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + -moz-box-pack: end; + justify-content: flex-end; +} + +.wpsp-ifb-icon-wrap .wpsp-ifb-icon span { + font-style: initial; + height: auto; + width: auto; +} + +.wpsp-ifb-imgicon-wrap .wpsp-ifb-image-content { + display: inline-block; + line-height: 0; + position: relative; + max-width: 100%; +} + +.wpsp-ifb-imgicon-wrap .wpsp-ifb-image-content img { + display: inline; + height: auto !important; + max-width: 100%; + width: auto; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-border-radius: inherit; + border-radius: inherit; +} + +.wpsp-ifb-imgicon-wrap .wpsp-image-crop-circle img { + -webkit-border-radius: 100%; + border-radius: 100%; +} + +.wpsp-ifb-imgicon-wrap .wpsp-image-crop-square img { + -webkit-border-radius: 0; + border-radius: 0; +} + +.wpsp-howto-child-module-link { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + bottom: 0; + right: 0; + z-index: 4; +} + +.wpsp-edit-mode .wpsp-howto-child-module-link { + z-index: 2; +} + +.wpsp-howto-child-link-icon-after { + margin-left: 5px; + margin-right: 0; +} + +.wpsp-howto-child-link-icon-before { + margin-left: 0; + margin-right: 5px; +} + +.wpsp-howto-child-link-icon { + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} + +.wpsp-howto-child { + position: relative; +} + +.wpsp-ifb-separator { + width: 30%; + border-top-width: 2px; + border-top-color: #333; + border-top-style: solid; + display: inline-block; + margin: 0; +} + +.wpsp-ifb-separator-parent { + line-height: 0; + margin-left: 0; + margin-right: 0; + margin-bottom: 10px; +} + +.wpsp-ifb-cta-button { + display: inline-block; + line-height: 1; + background-color: #818a91; + color: #fff; + text-align: center; +} + +.wpsp-ifb-button-wrapper .wp-block-button__link svg { + fill: currentColor; +} + +.wpsp-ifb-cta a { + -webkit-box-shadow: none; + box-shadow: none; + text-decoration: none; +} + +.wpsp-ifb-title-wrap { + width: 100%; +} + +.wpsp-ifb-title-wrap .wpsp-ifb-title, +.wpsp-ifb-title-wrap { + padding: 0; + margin: 0; + display: block; +} + +.wpsp-how-to__content-wrap.wpsp-howto-child { + position: relative; +} + +.wpsp-ifb-icon span { + font-size: 40px; + height: 40px; + color: #333; + width: 40px; +} + +.wpsp-ifb-content { + width: 100%; +} + +.wpsp-how-to__content-wrap.wpsp-howto-child, +.wpsp-ifb-content, +.wpsp-ifb-title-wrap, +svg.dashicon.dashicons-upload { + z-index: 1; +} + +.wpsp-howto-child-cta-link { + cursor: pointer; +} + +a.wpsp-howto-child-link-wrap { + color: inherit; +} + +.wpsp-ifb-content p:empty { + display: none; +} + +.wpsp-howto-child .wpsp-ifb-icon, +.wpsp-howto-child .wpsp-ifb-image-content img { + display: inline-block; + box-sizing: content-box; +} + +.wpsp-ifb-align-icon-after { + margin-left: 5px; +} + +.wpsp-ifb-align-icon-before { + margin-right: 5px; +} + +span.wpsp-ifb-button-icon.wpsp-ifb-align-icon-after { + float: right; +} + +.wpsp-ifb-button-icon { + height: 15px; + width: 15px; + font-size: 15px; + vertical-align: middle; +} + +.wpsp-ifb-text-icon { + height: 15px; + width: 15px; + font-size: 15px; + line-height: 15px; + vertical-align: middle; + display: inline-block; +} + +.wpsp-ifb-button-icon svg, +.wpsp-ifb-text-icon svg { + height: inherit; + width: inherit; + display: inline-block; +} + +.block-editor-page #wpwrap .wpsp-howto-child-cta-link svg, +.wpsp-howto-child-cta-link svg { + font-style: normal; +} + +.wpsp-howto-child__outer-wrap { + position: relative; + margin-top: 25px; +} + +a.wpsp-how-to__link-to-all { + height: 100%; + width: 100%; + top: 0; + left: 0; + position: absolute; + z-index: 3; + -webkit-box-shadow: none; + box-shadow: none; + text-decoration: none; +} + +@media only screen and (max-width: 976px) { + + .wpsp-howto-child-stacked-tablet .wpsp-ifb-left-right-wrap .wpsp-ifb-imgicon-wrap { + padding: 0; + margin-bottom: 20px; + } + + .wpsp-howto-child-stacked-tablet.wpsp-reverse-order-tablet .wpsp-ifb-left-right-wrap { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + -js-display: inline-flex; + display: -webkit-inline-flex; + display: -moz-inline-box; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -ms-flex-direction: column-reverse; + -webkit-flex-direction: column-reverse; + -moz-box-orient: vertical; + -moz-box-direction: reverse; + flex-direction: column-reverse; + } + + .wpsp-howto-child.wpsp-howto-child-stacked-tablet .wpsp-ifb-left-right-wrap .wpsp-ifb-content, + .wpsp-howto-child.wpsp-howto-child-stacked-tablet .wpsp-ifb-left-right-wrap .wpsp-ifb-imgicon-wrap { + display: block; + width: 100%; + text-align: center; + } + + .wpsp-howto-child.wpsp-howto-child-stacked-tablet .wpsp-ifb-left-right-wrap .wpsp-ifb-imgicon-wrap { + margin-left: 0; + margin-right: 0; + } + + .wpsp-howto-child-stacked-tablet .wpsp-ifb-left-right-wrap { + display: inline-block; + } + + .wpsp-howto-child-icon-left-title.wpsp-howto-child-stacked-tablet .wpsp-ifb-imgicon-wrap, + .wpsp-howto-child-icon-left.wpsp-howto-child-stacked-tablet .wpsp-ifb-imgicon-wrap { + margin-right: 0; + } + + .wpsp-howto-child-icon-right-title.wpsp-howto-child-stacked-tablet .wpsp-ifb-imgicon-wrap, + .wpsp-howto-child-icon-right.wpsp-howto-child-stacked-tablet .wpsp-ifb-imgicon-wrap { + margin-left: 0; + } + + .wpsp-howto-child-icon-left-title .wpsp-ifb-separator-parent { + margin: 10px 0; + } +} + +@media screen and (max-width: 767px) { + + .wpsp-howto-child-stacked-mobile .wpsp-ifb-left-right-wrap .wpsp-ifb-imgicon-wrap { + padding: 0; + margin-bottom: 20px; + } + + .wpsp-howto-child-stacked-mobile.wpsp-reverse-order-mobile .wpsp-ifb-left-right-wrap { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + -js-display: inline-flex; + display: -webkit-inline-flex; + display: -moz-inline-box; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -ms-flex-direction: column-reverse; + -webkit-flex-direction: column-reverse; + -moz-box-orient: vertical; + -moz-box-direction: reverse; + flex-direction: column-reverse; + } + + .wpsp-howto-child.wpsp-howto-child-stacked-mobile .wpsp-ifb-left-right-wrap .wpsp-ifb-content, + .wpsp-howto-child.wpsp-howto-child-stacked-mobile .wpsp-ifb-left-right-wrap .wpsp-ifb-imgicon-wrap { + display: block; + width: 100%; + text-align: center; + } + + .wpsp-howto-child.wpsp-howto-child-stacked-mobile .wpsp-ifb-left-right-wrap .wpsp-ifb-imgicon-wrap { + margin-left: 0; + margin-right: 0; + } + + .wpsp-howto-child-stacked-mobile .wpsp-ifb-left-right-wrap { + display: inline-block; + } + + .wpsp-howto-child-icon-left-title.wpsp-howto-child-stacked-mobile .wpsp-ifb-imgicon-wrap, + .wpsp-howto-child-icon-left.wpsp-howto-child-stacked-mobile .wpsp-ifb-imgicon-wrap { + margin-right: 0; + } + + .wpsp-howto-child-icon-right-title.wpsp-howto-child-stacked-mobile .wpsp-ifb-imgicon-wrap, + .wpsp-howto-child-icon-right.wpsp-howto-child-stacked-mobile .wpsp-ifb-imgicon-wrap { + margin-left: 0; + } + + .wpsp-howto-child-icon-left-title .wpsp-ifb-separator-parent { + margin: 10px 0; + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to.css b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to.css new file mode 100644 index 00000000..33278614 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/css/blocks/how-to.css @@ -0,0 +1,28 @@ +.wpsp-howto__cost-wrap { + display: block; +} + +.wpsp-howto__cost-wrap .wpsp-howto-estcost-text, +.wpsp-howto__cost-wrap .wpsp-howto-estcost-value, +.wpsp-howto__cost-wrap .wpsp-howto-estcost-type { + display: inline-flex; +} + +.wpsp-howto__time-wrap { + display: block; +} + +.wpsp-howto__time-wrap .wpsp-howto-timeNeeded-text, +.wpsp-howto__time-wrap .wpsp-howto-timeNeeded-value, +.wpsp-howto__time-wrap .wpsp-howto-timeINmin-text { + display: inline-flex; +} + +.wpsp-howto__time-wrap .wpsp-howto-timeINmin-text { + margin-left: 5px; +} + +.wpsp-how-to-main-wrap .wpsp-tools__wrap, +.wpsp-how-to-main-wrap .wpsp-how-to-materials { + margin-bottom: 20px; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/js/faq.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/js/faq.js new file mode 100644 index 00000000..4f63dc60 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/js/faq.js @@ -0,0 +1,225 @@ +function WPSPslideUp( wpsptarget, duration ) { + wpsptarget.style.transitionProperty = 'height, margin, padding'; + wpsptarget.style.transitionDuration = duration + 'ms'; + wpsptarget.style.boxSizing = 'border-box'; + wpsptarget.style.height = wpsptarget.offsetHeight + 'px'; + wpsptarget.style.overflow = 'hidden'; + wpsptarget.style.height = 0; + wpsptarget.style.paddingTop = 0; + wpsptarget.style.paddingBottom = 0; + wpsptarget.style.marginTop = 0; + wpsptarget.style.marginBottom = 0; + window.setTimeout( function () { + wpsptarget.style.display = 'none'; + wpsptarget.style.removeProperty( 'height' ); + wpsptarget.style.removeProperty( 'padding-top' ); + wpsptarget.style.removeProperty( 'padding-bottom' ); + wpsptarget.style.removeProperty( 'margin-top' ); + wpsptarget.style.removeProperty( 'margin-bottom' ); + wpsptarget.style.removeProperty( 'overflow' ); + wpsptarget.style.removeProperty( 'transition-duration' ); + wpsptarget.style.removeProperty( 'transition-property' ); + }, duration ); +} + +function WPSPslideDown( wpsptarget, duration ) { + wpsptarget.style.removeProperty( 'display' ); + let display = window.getComputedStyle( wpsptarget ).display; + + if ( display === 'none' ) display = 'block'; + + wpsptarget.style.display = display; + const height = wpsptarget.offsetHeight; + wpsptarget.style.overflow = 'hidden'; + wpsptarget.style.height = 0; + wpsptarget.style.paddingTop = 0; + wpsptarget.style.paddingBottom = 0; + wpsptarget.style.marginTop = 0; + wpsptarget.style.marginBottom = 0; + wpsptarget.style.boxSizing = 'border-box'; + wpsptarget.style.transitionProperty = 'height, margin, padding'; + wpsptarget.style.transitionDuration = duration + 'ms'; + wpsptarget.style.height = height + 'px'; + wpsptarget.style.removeProperty( 'padding-top' ); + wpsptarget.style.removeProperty( 'padding-bottom' ); + wpsptarget.style.removeProperty( 'margin-top' ); + wpsptarget.style.removeProperty( 'margin-bottom' ); + window.setTimeout( function () { + wpsptarget.style.removeProperty( 'height' ); + wpsptarget.style.removeProperty( 'overflow' ); + wpsptarget.style.removeProperty( 'transition-duration' ); + wpsptarget.style.removeProperty( 'transition-property' ); + }, duration ); +} + +function setupFAQ() { + const pattern = new RegExp( '^[\\w\\-]+$' ); + const hashval = window.location.hash.substring( 1 ); + const expandFirstelements = document.getElementsByClassName( + 'wpsp-faq-expand-first-true' + ); + const inactiveOtherelements = document.getElementsByClassName( + 'wpsp-faq-inactive-other-false' + ); + + if ( + document.getElementById( hashval ) !== undefined && + document.getElementById( hashval ) !== null && + document.getElementById( hashval ) !== '' && + pattern.test( hashval ) + ) { + const elementToOpen = document.getElementById( hashval ); + if ( + elementToOpen.getElementsByClassName( 'wpsp-faq-item' )[ 0 ] !== + undefined + ) { + elementToOpen + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .classList.add( 'wpsp-faq-item-active' ); + elementToOpen + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .setAttribute( 'aria-expanded', true ); + WPSPslideDown( + elementToOpen.getElementsByClassName( 'wpsp-faq-content' )[ 0 ], + 500 + ); + } + } else { + for ( let item = 0; item < expandFirstelements.length; item++ ) { + if ( + true === + expandFirstelements[ item ].classList.contains( + 'wpsp-faq-layout-accordion' + ) + ) { + expandFirstelements[ item ] + .querySelectorAll( '.wpsp-faq-child__outer-wrap' )[ 0 ] + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .classList.add( 'wpsp-faq-item-active' ); + expandFirstelements[ item ] + .querySelectorAll( '.wpsp-faq-child__outer-wrap' )[ 0 ] + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .setAttribute( 'aria-expanded', true ); + expandFirstelements[ item ] + .querySelectorAll( '.wpsp-faq-child__outer-wrap' )[ 0 ] + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .querySelectorAll( + '.wpsp-faq-content' + )[ 0 ].style.display = 'block'; + } + } + } + for ( + let otherItem = 0; + otherItem < inactiveOtherelements.length; + otherItem++ + ) { + if ( + true === + inactiveOtherelements[ otherItem ].classList.contains( + 'wpsp-faq-layout-accordion' + ) + ) { + const otherItems = inactiveOtherelements[ + otherItem + ].querySelectorAll( '.wpsp-faq-child__outer-wrap' ); + + for ( + let childItem = 0; + childItem < otherItems.length; + childItem++ + ) { + otherItems[ childItem ] + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .classList.add( 'wpsp-faq-item-active' ); + otherItems[ childItem ] + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .setAttribute( 'aria-expanded', true ); + otherItems[ childItem ] + .getElementsByClassName( 'wpsp-faq-item' )[ 0 ] + .querySelectorAll( + '.wpsp-faq-content' + )[ 0 ].style.display = 'block'; + } + } + } +} +/* eslint-disable */ +window.addEventListener('load', function () { + /* eslint-enable */ + setupFAQ(); + + const accordionElements = document.getElementsByClassName( + 'wpsp-faq-layout-accordion' + ); + for ( let item = 0; item < accordionElements.length; item++ ) { + const questionButtons = accordionElements[ item ].querySelectorAll( + '.wpsp-faq-questions-button' + ); + + for ( let button = 0; button < questionButtons.length; button++ ) { + questionButtons[ button ].parentElement.addEventListener( + 'click', + function ( e ) { + WPSPfaqClick( e, this ); + } + ); + questionButtons[ button ].parentElement.addEventListener( + 'keypress', + function ( e ) { + WPSPfaqClick( e, this ); + } + ); + } + } +} ); + +function WPSPfaqClick( e, wpspfaqItem ) { + if ( e.target.tagName === 'A' ) { + return; + } + e.preventDefault(); + if ( wpspfaqItem.classList.contains( 'wpsp-faq-item-active' ) ) { + wpspfaqItem.classList.remove( 'wpsp-faq-item-active' ); + wpspfaqItem.setAttribute( 'aria-expanded', false ); + WPSPslideUp( + wpspfaqItem.getElementsByClassName( 'wpsp-faq-content' )[ 0 ], + 500 + ); + } else { + const parent = e.currentTarget.closest( '.wp-block-wpsp-faq' ); + let faqToggle = 'true'; + if ( parent.classList.contains( 'wp-block-wpsp-faq' ) ) { + faqToggle = parent.getAttribute( 'data-faqtoggle' ); + } + wpspfaqItem.classList.add( 'wpsp-faq-item-active' ); + wpspfaqItem.setAttribute( 'aria-expanded', true ); + WPSPslideDown( + wpspfaqItem.getElementsByClassName( 'wpsp-faq-content' )[ 0 ], + 500 + ); + if ( 'true' === faqToggle ) { + const questionButtons = parent.querySelectorAll( + '.wpsp-faq-questions-button' + ); + for ( + let buttonChild = 0; + buttonChild < questionButtons.length; + buttonChild++ + ) { + const buttonItem = questionButtons[ buttonChild ].parentElement; + if ( buttonItem === wpspfaqItem ) { + continue; + } + buttonItem.classList.remove( 'wpsp-faq-item-active' ); + buttonItem.setAttribute( 'aria-expanded', false ); + WPSPslideUp( + buttonItem.getElementsByClassName( + 'wpsp-faq-content' + )[ 0 ], + 500 + ); + } + } + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/min-js/faq.min.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/min-js/faq.min.js new file mode 100644 index 00000000..335df7df --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/assets/min-js/faq.min.js @@ -0,0 +1 @@ +function WPSPslideUp(e,t){e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,window.setTimeout(function(){e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")},t)}function WPSPslideDown(e,t){e.style.removeProperty("display");let s=window.getComputedStyle(e).display;"none"===s&&(s="block"),e.style.display=s;var a=e.offsetHeight;e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.height=a+"px",e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),window.setTimeout(function(){e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")},t)}function setupFAQ(){var e=new RegExp("^[\\w\\-]+$"),t=window.location.hash.substring(1),s=document.getElementsByClassName("wpsp-faq-expand-first-true"),a=document.getElementsByClassName("wpsp-faq-inactive-other-false");if(void 0!==document.getElementById(t)&&null!==document.getElementById(t)&&""!==document.getElementById(t)&&e.test(t)){e=document.getElementById(t);void 0!==e.getElementsByClassName("wpsp-faq-item")[0]&&(e.getElementsByClassName("wpsp-faq-item")[0].classList.add("wpsp-faq-item-active"),e.getElementsByClassName("wpsp-faq-item")[0].setAttribute("aria-expanded",!0),WPSPslideDown(e.getElementsByClassName("wpsp-faq-content")[0],500))}else for(let e=0;e $data ) { + $_slug = str_replace( 'wpsp/', '', $slug ); + + if ( isset( $saved_blocks[ $_slug ] ) ) { + if ( 'disabled' === $saved_blocks[ $_slug ] ) { + $blocks[ $slug ]['is_activate'] = false; + } else { + $blocks[ $slug ]['is_activate'] = true; + } + } else { + $blocks[ $slug ]['is_activate'] = ( isset( $data['default'] ) ) ? $data['default'] : false; + } + } + } + + BSF_SP_Helper::$block_list = $blocks; + + return apply_filters( 'wpsp_enabled_blocks', BSF_SP_Helper::$block_list ); + } + + /** + * Updates an option from the admin settings page. + * + * @param string $key The option key. + * @param mixed $value The value to update. + * @param bool $network Whether to allow the network admin setting to be overridden on subsites. + * @return mixed + * @since 0.0.1 + */ + public static function update_admin_settings_option( $key, $value, $network = false ) { + + // Update the site-wide option since we're in the network admin. + if ( $network && is_multisite() ) { + update_site_option( $key, $value ); + } else { + update_option( $key, $value ); + } + } + + /** + * Get Specific Stylesheet + * + * @since 1.13.4 + */ + public static function create_specific_stylesheet() { + + $saved_blocks = self::get_admin_settings_option( '_wpsp_blocks' ); + $combined = array(); + $is_already_faq = false; + + foreach ( BSF_SP_Config::$block_attributes as $key => $block ) { + + $block_name = str_replace( 'wpsp/', '', $key ); + + if ( isset( $saved_blocks[ $block_name ] ) && 'disabled' === $saved_blocks[ $block_name ] ) { + continue; + } + + switch ( $block_name ) { + case 'faq-child': + case 'faq': + if ( ! $is_already_faq ) { + $combined[] = 'faq'; + $combined[] = 'faq-child'; + $is_already_faq = true; + } + break; + + default: + $combined[] = $block_name; + break; + } + } + + $combined_path = plugin_dir_path( BSF_AIOSRS_PRO_FILE ) . 'dist/style-blocks.css'; + wp_delete_file( $combined_path ); + + $style = ''; + + $wp_filesystem = BSF_SP_Helper::get_instance()->get_filesystem(); + + foreach ( $combined as $key => $c_block ) { + $style .= $wp_filesystem->get_contents( plugin_dir_path( BSF_AIOSRS_PRO_FILE ) . 'wpsp-blocks/assets/css/blocks/' . $c_block . '.css' ); + + } + $wp_filesystem->put_contents( $combined_path, $style, FS_CHMOD_FILE ); + } + + } + + /** + * Prepare if class 'WPSP_Admin_Helper' exist. + * Kicking this off by calling 'get_instance()' method + */ + BSF_SP_Admin_Helper::get_instance(); +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-admin.php b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-admin.php new file mode 100644 index 00000000..4e9e6351 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-admin.php @@ -0,0 +1,169 @@ + $value ) { + $_slug = str_replace( 'wpsp/', '', $slug ); + $new_blocks[ $_slug ] = $_slug; + } + + // Escape attrs. + $new_blocks = array_map( 'esc_attr', $new_blocks ); + + // Update new_extensions. + BSF_SP_Admin_Helper::update_admin_settings_option( '_wpsp_blocks', $new_blocks ); + BSF_SP_Admin_Helper::create_specific_stylesheet(); + + wp_send_json_success(); + } + + /** + * Deactivate all module + */ + public static function wpsp_bulk_deactivate_widgets() { + if ( ! current_user_can( 'manage_options' ) ) { + return false; + } + check_ajax_referer( 'wpsp-block-nonce', 'nonce' ); + + // Get all extensions. + $old_blocks = BSF_SP_Helper::$block_list; + $new_blocks = array(); + + // Set all extension to enabled. + foreach ( $old_blocks as $slug => $value ) { + $_slug = str_replace( 'wpsp/', '', $slug ); + $new_blocks[ $_slug ] = 'disabled'; + } + + // Escape attrs. + $new_blocks = array_map( 'esc_attr', $new_blocks ); + + // Update new_extensions. + BSF_SP_Admin_Helper::update_admin_settings_option( '_wpsp_blocks', $new_blocks ); + BSF_SP_Admin_Helper::create_specific_stylesheet(); + + wp_send_json_success(); + } + } + + BSF_SP_Admin::init(); +} diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-helper.php b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-helper.php new file mode 100644 index 00000000..5acbbc57 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-helper.php @@ -0,0 +1,548 @@ + array( + 'width' => $icon_size, + 'height' => $icon_size, + 'font-size' => $icon_size, + 'fill' => $icon_color, + ), + ' .wpsp-icon-active svg' => array( + 'width' => $icon_size, + 'height' => $icon_size, + 'font-size' => $icon_size, + 'fill' => $icon_active_color, + ), + ' .wpsp-faq-child__outer-wrap' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['rowsGap'], 'px' ), + ), + ' .wpsp-faq-item' => array( + 'background-color' => $attr['boxBgColor'], + 'border-style' => $attr['borderStyle'], + 'border-width' => BSF_SP_Helper::get_css_value( $attr['borderWidth'], 'px' ), + 'border-radius' => BSF_SP_Helper::get_css_value( $attr['borderRadius'], 'px' ), + 'border-color' => $attr['borderColor'], + ), + ' .wpsp-faq-item .wpsp-question' => array( + 'color' => $attr['questionTextColor'], + ), + ' .wpsp-faq-item.wpsp-faq-item-active .wpsp-question' => array( + 'color' => $attr['questionTextActiveColor'], + ), + ' .wpsp-faq-item:hover .wpsp-question' => array( + 'color' => $attr['questionTextActiveColor'], + ), + ' .wpsp-faq-questions-button' => array( + 'padding-top' => BSF_SP_Helper::get_css_value( $attr['vquestionPaddingDesktop'], $attr['questionPaddingTypeDesktop'] ), + 'padding-bottom' => BSF_SP_Helper::get_css_value( $attr['questionBottomPaddingDesktop'], $attr['questionPaddingTypeDesktop'] ), + 'padding-right' => BSF_SP_Helper::get_css_value( $attr['hquestionPaddingDesktop'], $attr['questionPaddingTypeDesktop'] ), + 'padding-left' => BSF_SP_Helper::get_css_value( $attr['questionLeftPaddingDesktop'], $attr['questionPaddingTypeDesktop'] ), + ), + ' .wpsp-faq-content span' => array( + 'margin-top' => BSF_SP_Helper::get_css_value( $attr['vanswerPaddingDesktop'], $attr['answerPaddingTypeDesktop'] ), + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['vanswerPaddingDesktop'], $attr['answerPaddingTypeDesktop'] ), + 'margin-right' => BSF_SP_Helper::get_css_value( $attr['hanswerPaddingDesktop'], $attr['answerPaddingTypeDesktop'] ), + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['hanswerPaddingDesktop'], $attr['answerPaddingTypeDesktop'] ), + ), + '.wpsp-faq-icon-row .wpsp-faq-item .wpsp-faq-icon-wrap' => array( + 'margin-right' => BSF_SP_Helper::get_css_value( $attr['gapBtwIconQUestion'], 'px' ), + ), + '.wpsp-faq-icon-row-reverse .wpsp-faq-item .wpsp-faq-icon-wrap' => array( + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['gapBtwIconQUestion'], 'px' ), + ), + ' .wpsp-faq-item:hover .wpsp-icon svg' => array( + 'fill' => $icon_active_color, + ), + ' .wpsp-faq-item .wpsp-faq-questions-button.wpsp-faq-questions' => array( + 'flex-direction' => $attr['iconAlign'], + ), + ' .wpsp-faq-item .wpsp-faq-content p' => array( + 'color' => $attr['answerTextColor'], + ), + ); + + $t_selectors = array( + ' .wpsp-faq-questions-button' => array( + 'padding-top' => BSF_SP_Helper::get_css_value( $attr['vquestionPaddingTablet'], $attr['questionPaddingTypeDesktop'] ), + 'padding-bottom' => BSF_SP_Helper::get_css_value( $attr['questionBottomPaddingTablet'], $attr['questionPaddingTypeDesktop'] ), + 'padding-right' => BSF_SP_Helper::get_css_value( $attr['hquestionPaddingTablet'], $attr['questionPaddingTypeDesktop'] ), + 'padding-left' => BSF_SP_Helper::get_css_value( $attr['questionLeftPaddingTablet'], $attr['questionPaddingTypeDesktop'] ), + ), + ' .wpsp-faq-content span' => array( + 'margin-top' => BSF_SP_Helper::get_css_value( $attr['vanswerPaddingTablet'], $attr['answerPaddingTypeDesktop'] ), + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['vanswerPaddingTablet'], $attr['answerPaddingTypeDesktop'] ), + 'margin-right' => BSF_SP_Helper::get_css_value( $attr['hanswerPaddingTablet'], $attr['answerPaddingTypeDesktop'] ), + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['hanswerPaddingTablet'], $attr['answerPaddingTypeDesktop'] ), + ), + ' .wpsp-icon svg' => array( + 'width' => $t_icon_size, + 'height' => $t_icon_size, + 'font-size' => $t_icon_size, + ), + ' .wpsp-icon-active svg' => array( + 'width' => $t_icon_size, + 'height' => $t_icon_size, + 'font-size' => $t_icon_size, + ), + ); + $m_selectors = array( + ' .wpsp-faq-questions-button' => array( + 'padding-top' => BSF_SP_Helper::get_css_value( $attr['vquestionPaddingMobile'], $attr['questionPaddingTypeDesktop'] ), + 'padding-bottom' => BSF_SP_Helper::get_css_value( $attr['questionBottomPaddingMobile'], $attr['questionPaddingTypeDesktop'] ), + 'padding-right' => BSF_SP_Helper::get_css_value( $attr['hquestionPaddingMobile'], $attr['questionPaddingTypeDesktop'] ), + 'padding-left' => BSF_SP_Helper::get_css_value( $attr['questionLeftPaddingMobile'], $attr['questionPaddingTypeDesktop'] ), + ), + ' .wpsp-faq-content span' => array( + 'margin-top' => BSF_SP_Helper::get_css_value( $attr['vanswerPaddingMobile'], $attr['answerPaddingTypeDesktop'] ), + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['vanswerPaddingMobile'], $attr['answerPaddingTypeDesktop'] ), + 'margin-right' => BSF_SP_Helper::get_css_value( $attr['hanswerPaddingMobile'], $attr['answerPaddingTypeDesktop'] ), + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['hanswerPaddingMobile'], $attr['answerPaddingTypeDesktop'] ), + ), + ' .wpsp-icon svg' => array( + 'width' => $m_icon_size, + 'height' => $m_icon_size, + 'font-size' => $m_icon_size, + ), + ' .wpsp-icon-active svg' => array( + 'width' => $m_icon_size, + 'height' => $m_icon_size, + 'font-size' => $m_icon_size, + ), + ); + + if ( 'accordion' === $attr['layout'] && true === $attr['inactiveOtherItems'] ) { + + $selectors[' .wp-block-wpsp-faq-child.wpsp-faq-child__outer-wrap .wpsp-faq-content '] = array( + 'display' => 'none', + ); + } + if ( 'accordion' === $attr['layout'] && true === $attr['expandFirstItem'] ) { + + $selectors[' .wpsp-faq__wrap.wpsp-buttons-layout-wrap > .wpsp-faq-child__outer-wrap:first-child > .wpsp-faq-child__wrapper .wpsp-faq-item.wpsp-faq-item-active .wpsp-faq-content '] = array( + 'display' => 'block', + ); + } + if ( true === $attr['enableSeparator'] ) { + + $selectors[' .wpsp-faq-child__outer-wrap .wpsp-faq-content '] = array( + 'border-style' => 'solid', + 'border-top-color' => $attr['borderColor'], + 'border-top-width' => BSF_SP_Helper::get_css_value( $attr['borderWidth'], 'px' ), + 'border-right-width' => '0px', + 'border-bottom-width' => '0px', + 'border-left-width' => '0px', + ); + } + if ( 'grid' === $attr['layout'] ) { + + $selectors['.wpsp-faq-layout-grid .wpsp-faq__wrap .wpsp-faq-child__outer-wrap '] = array( + 'text-align' => $attr['align'], + ); + $selectors['.wpsp-faq-layout-grid .wpsp-faq__wrap.wpsp-buttons-layout-wrap '] = array( + 'grid-template-columns' => 'repeat(' . $attr['columns'] . ', 1fr)', + 'grid-column-gap' => BSF_SP_Helper::get_css_value( $attr['columnsGap'], 'px' ), + 'grid-row-gap' => BSF_SP_Helper::get_css_value( $attr['rowsGap'], 'px' ), + 'display' => 'grid', + ); + $t_selectors['.wpsp-faq-layout-grid .wpsp-faq__wrap.wpsp-buttons-layout-wrap '] = array( + 'grid-template-columns' => 'repeat(' . $attr['tcolumns'] . ', 1fr)', + ); + $m_selectors['.wpsp-faq-layout-grid .wpsp-faq__wrap.wpsp-buttons-layout-wrap '] = array( + 'grid-template-columns' => 'repeat(' . $attr['mcolumns'] . ', 1fr)', + ); + } + + $combined_selectors = array( + 'desktop' => $selectors, + 'tablet' => $t_selectors, + 'mobile' => $m_selectors, + ); + + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'question', ' .wpsp-faq-questions-button .wpsp-question', $combined_selectors ); + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'answer', ' .wpsp-faq-item .wpsp-faq-content p', $combined_selectors ); + + return BSF_SP_Helper::generate_all_css( $combined_selectors, '.wpsp-block-' . $id ); + } + + /** + * Get How To CSS + * + * @since 2.4.0 + * @param array $attr The block attributes. + * @param string $id The selector ID. + * @return array The Widget List. + */ + public static function get_how_to_css( $attr, $id ) { + $defaults = BSF_SP_Helper::$block_list['wpsp/how-to']['attributes']; + + $attr = array_merge( $defaults, $attr ); + + $t_selectors = array(); + $m_selectors = array(); + + $selectors = array( + ' .wpsp-how-to-main-wrap' => array( + 'text-align' => $attr['overallAlignment'], + ), + + ' .wpsp-how-to-main-wrap p.wpsp-howto-desc-text' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['row_gap'], 'px' ), + ), + + ' .wpsp-how-to-main-wrap .wpsp-howto__source-wrap' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['row_gap'], 'px' ), + ), + + ' .wpsp-how-to-main-wrap span.wpsp-howto__time-wrap' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['row_gap'], 'px' ), + ), + + ' .wpsp-how-to-main-wrap span.wpsp-howto__cost-wrap' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['row_gap'], 'px' ), + ), + + ' .wpsp-tools__wrap .wpsp-how-to-tools-child__wrapper:last-child' => array( + 'margin-bottom' => '0px', + ), + + ' .wpsp-how-to-materials .wpsp-how-to-materials-child__wrapper:last-child' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['row_gap'], 'px' ), + ), + + ' .wpsp-howto-steps__wrap .wp-block-wpsp-how-to-child' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['step_gap'], 'px' ), + ), + + ' .wpsp-howto-steps__wrap .wp-block-wpsp-how-to-child:last-child' => array( + 'margin-bottom' => '0px', + ), + + ' span.wpsp-howto__time-wrap .wpsp-howto-timeNeeded-value' => array( + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['timeSpace'], 'px' ), + ), + + ' span.wpsp-howto__cost-wrap .wpsp-howto-estcost-value' => array( + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['costSpace'], 'px' ), + ), + + ' .wpsp-how-to-main-wrap .wpsp-howto-heading-text' => array( + 'color' => $attr['headingColor'], + ), + + ' .wpsp-howto-desc-text' => array( + 'color' => $attr['subHeadingColor'], + ), + + ' .wpsp-howto__wrap span.wpsp-howto__time-wrap p' => array( + 'color' => $attr['subHeadingColor'], + ), + + ' .wpsp-howto__wrap span.wpsp-howto__cost-wrap p' => array( + 'color' => $attr['subHeadingColor'], + ), + + ' .wpsp-howto__wrap span.wpsp-howto__time-wrap h4.wpsp-howto-timeNeeded-text' => array( + 'color' => $attr['showTotaltimecolor'], + ), + + ' .wpsp-howto__wrap span.wpsp-howto__cost-wrap h4.wpsp-howto-estcost-text' => array( + 'color' => $attr['showTotaltimecolor'], + ), + + ' .wpsp-how-to-tools__wrap .wpsp-howto-req-tools-text' => array( + 'color' => $attr['showTotaltimecolor'], + ), + + ' .wpsp-how-to-materials__wrap .wpsp-howto-req-materials-text' => array( + 'color' => $attr['showTotaltimecolor'], + ), + + ' .wpsp-how-to-steps__wrap .wpsp-howto-req-steps-text' => array( + 'color' => $attr['showTotaltimecolor'], + ), + ); + + $selectors[' .wpsp-tools__wrap .wpsp-how-to-tools-child__wrapper'] = array( + 'color' => $attr['subHeadingColor'], + ); + + $selectors[' .wpsp-how-to-materials .wpsp-how-to-materials-child__wrapper'] = array( + 'color' => $attr['subHeadingColor'], + ); + + $combined_selectors = array( + 'desktop' => $selectors, + 'tablet' => $t_selectors, + 'mobile' => $m_selectors, + ); + + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'subHead', ' p', $combined_selectors ); + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'price', ' h4', $combined_selectors ); + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'head', ' .wpsp-howto-heading-text', $combined_selectors ); + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'subHead', ' .wpsp-tools .wpsp-tools__label', $combined_selectors ); + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'subHead', ' .wpsp-materials .wpsp-materials__label', $combined_selectors ); + + return BSF_SP_Helper::generate_all_css( $combined_selectors, ' .wpsp-block-' . $id ); + } + + /** + * Get Howto child CSS + * + * @since 2.4.0 + * @param array $attr The block attributes. + * @param string $id The selector ID. + * @return array The Widget List. + */ + public static function get_how_to_child_css( $attr, $id ) { + + $defaults = BSF_SP_Helper::$block_list['wpsp/how-to-child']['attributes']; + + $attr = array_merge( $defaults, (array) $attr ); + + $m_selectors = array(); + $t_selectors = array(); + + $cta_icon_size = BSF_SP_Helper::get_css_value( $attr['ctaFontSize'], $attr['ctaFontSizeType'] ); + $m_cta_icon_size = BSF_SP_Helper::get_css_value( $attr['ctaFontSizeMobile'], $attr['ctaFontSizeType'] ); + $t_cta_icon_size = BSF_SP_Helper::get_css_value( $attr['ctaFontSizeTablet'], $attr['ctaFontSizeType'] ); + $icon_size = BSF_SP_Helper::get_css_value( $attr['iconSize'], 'px' ); + + $selectors = array( + ' .wpsp-ifb-icon' => array( + 'height' => $icon_size, + 'width' => $icon_size, + 'line-height' => $icon_size, + ), + ' .wpsp-ifb-icon > span' => array( + 'font-size' => $icon_size, + 'height' => $icon_size, + 'width' => $icon_size, + 'line-height' => $icon_size, + 'color' => $attr['iconColor'], + ), + ' .wpsp-ifb-icon svg' => array( + 'fill' => $attr['iconColor'], + ), + ' .wpsp-ifb-icon:hover > span' => array( + 'color' => $attr['iconHover'], + ), + ' .wpsp-ifb-icon:hover svg' => array( + 'fill' => $attr['iconHover'], + ), + + ' .wpsp-how-to__link-to-all:hover ~ .wpsp-how-to__content-wrap .wpsp-ifb-icon svg' => array( + 'fill' => $attr['iconHover'], + ), + + ' .wpsp-how-to__content-wrap .wpsp-ifb-imgicon-wrap' => array( + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['iconLeftMargin'], 'px' ), + 'margin-right' => BSF_SP_Helper::get_css_value( $attr['iconRightMargin'], 'px' ), + 'margin-top' => BSF_SP_Helper::get_css_value( $attr['iconTopMargin'], 'px' ), + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['iconBottomMargin'], 'px' ), + ), + ' .wpsp-howto-child .wpsp-ifb-image-content img' => array( + 'border-radius' => BSF_SP_Helper::get_css_value( $attr['iconimgBorderRadius'], 'px' ), + ), + // Title Style. + ' .wpsp-ifb-title' => array( + 'color' => $attr['headingColor'], + 'margin-bottom' => $attr['headSpace'] . 'px', + ), + // Description Style. + ' .wpsp-ifb-desc' => array( + 'color' => $attr['subHeadingColor'], + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['subHeadSpace'], 'px' ), + ), + // Seperator. + ' .wpsp-ifb-separator' => array( + 'width' => BSF_SP_Helper::get_css_value( $attr['seperatorWidth'], $attr['separatorWidthType'] ), + 'border-top-width' => BSF_SP_Helper::get_css_value( $attr['seperatorThickness'], 'px' ), + 'border-top-color' => $attr['seperatorColor'], + 'border-top-style' => $attr['seperatorStyle'], + ), + ' .wpsp-ifb-separator-parent' => array( + 'margin-bottom' => BSF_SP_Helper::get_css_value( $attr['seperatorSpace'], 'px' ), + ), + // CTA icon space. + ' .wpsp-ifb-align-icon-after' => array( + 'margin-left' => BSF_SP_Helper::get_css_value( $attr['ctaIconSpace'], 'px' ), + ), + ' .wpsp-ifb-align-icon-before' => array( + 'margin-right' => BSF_SP_Helper::get_css_value( $attr['ctaIconSpace'], 'px' ), + ), + ); + + $selectors[' .wpsp-howto-child-cta-link'] = array( + 'color' => $attr['ctaLinkColor'], + ); + $selectors[' .wpsp-ifb-cta .wpsp-howto-child-cta-link:hover'] = array( + 'color' => $attr['ctaLinkHoverColor'], + ); + $selectors[' .wpsp-howto-child-cta-link .wpsp-ifb-button-icon'] = array( + 'font-size' => $cta_icon_size, + 'height' => $cta_icon_size, + 'width' => $cta_icon_size, + 'line-height' => $cta_icon_size, + ); + $selectors[' .wpsp-howto-child-cta-link .wpsp-ifb-text-icon'] = array( + 'font-size' => $cta_icon_size, + 'height' => $cta_icon_size, + 'width' => $cta_icon_size, + 'line-height' => $cta_icon_size, + ); + $selectors[' .wpsp-howto-child-cta-link svg'] = array( + 'fill' => $attr['ctaLinkColor'], + ); + $selectors[' .wpsp-howto-child-cta-link:hover svg'] = array( + 'fill' => $attr['ctaLinkHoverColor'], + ); + $selectors[' .wpsp-ifb-button-wrapper .wpsp-howto-child-cta-link'] = array( + 'color' => $attr['ctaBtnLinkColor'], + 'background-color' => $attr['ctaBgColor'], + 'border-style' => $attr['ctaBorderStyle'], + 'border-color' => $attr['ctaBorderColor'], + 'border-radius' => BSF_SP_Helper::get_css_value( $attr['ctaBorderRadius'], 'px' ), + 'border-width' => BSF_SP_Helper::get_css_value( $attr['ctaBorderWidth'], 'px' ), + 'padding-top' => BSF_SP_Helper::get_css_value( $attr['ctaBtnVertPadding'], 'px' ), + 'padding-bottom' => BSF_SP_Helper::get_css_value( $attr['ctaBtnVertPadding'], 'px' ), + 'padding-left' => BSF_SP_Helper::get_css_value( $attr['ctaBtnHrPadding'], 'px' ), + 'padding-right' => BSF_SP_Helper::get_css_value( $attr['ctaBtnHrPadding'], 'px' ), + + ); + $selectors[' .wpsp-ifb-button-wrapper .wpsp-howto-child-cta-link svg'] = array( + 'fill' => $attr['ctaBtnLinkColor'], + ); + $selectors[' .wpsp-ifb-button-wrapper .wpsp-howto-child-cta-link:hover'] = array( + 'color' => $attr['ctaLinkHoverColor'], + 'background-color' => $attr['ctaBgHoverColor'], + 'border-color' => $attr['ctaBorderhoverColor'], + ); + $selectors[' .wpsp-ifb-button-wrapper .wpsp-howto-child-cta-link:hover svg'] = array( + 'fill' => $attr['ctaLinkHoverColor'], + ); + + if ( $attr['imageWidthType'] ) { + // Image. + $selectors[' .wpsp-ifb-image-content img'] = array( + 'width' => BSF_SP_Helper::get_css_value( $attr['imageWidth'], 'px' ), + 'max-width' => BSF_SP_Helper::get_css_value( $attr['imageWidth'], 'px' ), + ); + } + + if ( 'above-title' === $attr['iconimgPosition'] || 'below-title' === $attr['iconimgPosition'] ) { + $selectors[' .wpsp-how-to__content-wrap'] = array( + 'text-align' => $attr['headingAlign'], + ); + } + + $m_selectors = array( + ' .wpsp-howto-child-cta-link .wpsp-ifb-button-icon' => array( + 'font-size' => $m_cta_icon_size, + 'height' => $m_cta_icon_size, + 'width' => $m_cta_icon_size, + 'line-height' => $m_cta_icon_size, + ), + ' .wpsp-howto-child-cta-link .wpsp-ifb-text-icon' => array( + 'font-size' => $m_cta_icon_size, + 'height' => $m_cta_icon_size, + 'width' => $m_cta_icon_size, + 'line-height' => $m_cta_icon_size, + ), + ); + + $t_selectors = array( + ' .wpsp-howto-child-cta-link .wpsp-ifb-button-icon' => array( + 'font-size' => $t_cta_icon_size, + 'height' => $t_cta_icon_size, + 'width' => $t_cta_icon_size, + 'line-height' => $t_cta_icon_size, + ), + ' .wpsp-howto-child-cta-link .wpsp-ifb-text-icon' => array( + 'font-size' => $t_cta_icon_size, + 'height' => $t_cta_icon_size, + 'width' => $t_cta_icon_size, + 'line-height' => $t_cta_icon_size, + ), + ); + + $combined_selectors = array( + 'desktop' => $selectors, + 'tablet' => $t_selectors, + 'mobile' => $m_selectors, + ); + + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'head', ' .wpsp-ifb-title', $combined_selectors ); + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'subHead', ' .wpsp-ifb-desc', $combined_selectors ); + $combined_selectors = BSF_SP_Helper::get_typography_css( $attr, 'cta', ' .wpsp-howto-child-cta-link', $combined_selectors ); + + $base_selector = '.wp-block-wpsp-how-to-child.wpsp-block-'; + + return BSF_SP_Helper::generate_all_css( $combined_selectors, $base_selector . $id ); + } + + /** + * Prepare if class 'Schema_Pro_Loader' exist. + * Kicking this off by calling 'get_instance()' method + */ + + } +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-js.php b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-js.php new file mode 100644 index 00000000..e46c13bb --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-block-js.php @@ -0,0 +1,98 @@ + array( + 'slug' => '', + 'title' => __( 'FAQ - Schema Pro', 'wp-schema-pro' ), + 'description' => __( 'This block helps you add a FAQ section with inbuilt schema support.', 'wp-schema-pro' ), + 'default' => true, + 'js_assets' => array( 'wpsp-faq-js' ), + 'attributes' => array( + 'block_id' => '', + 'layout' => 'accordion', + 'inactiveOtherItems' => true, + 'expandFirstItem' => false, + 'enableSchemaSupport' => false, + 'align' => 'left', + 'enableSeparator' => false, + 'rowsGap' => 10, + 'columnsGap' => 10, + 'boxBgColor' => '#FFFFFF', + 'boxPaddingTypeMobile' => 'px', + 'boxPaddingTypeTablet' => 'px', + 'boxPaddingTypeDesktop' => 'px', + 'vBoxPaddingMobile' => 10, + 'hBoxPaddingMobile' => 10, + 'vBoxPaddingTablet' => 10, + 'hBoxPaddingTablet' => 10, + 'vBoxPaddingDesktop' => 10, + 'hBoxPaddingDesktop' => 10, + 'borderStyle' => 'solid', + 'borderWidth' => 1, + 'borderRadius' => 2, + 'borderColor' => '#D2D2D2', + 'questionTextColor' => '#313131', + 'questionTextActiveColor' => '#313131', + 'questionPaddingTypeDesktop' => 'px', + 'vquestionPaddingMobile' => 10, + 'vquestionPaddingTablet' => 10, + 'vquestionPaddingDesktop' => 10, + 'hquestionPaddingMobile' => 10, + 'hquestionPaddingTablet' => 10, + 'hquestionPaddingDesktop' => 10, + 'answerTextColor' => '#313131', + 'answerPaddingTypeDesktop' => 'px', + 'vanswerPaddingMobile' => 10, + 'vanswerPaddingTablet' => 10, + 'vanswerPaddingDesktop' => 10, + 'hanswerPaddingMobile' => 10, + 'hanswerPaddingTablet' => 10, + 'hanswerPaddingDesktop' => 10, + 'iconColor' => '', + 'iconActiveColor' => '', + 'gapBtwIconQUestion' => 10, + 'questionloadGoogleFonts' => false, + 'answerloadGoogleFonts' => false, + 'questionFontFamily' => 'Default', + 'questionFontWeight' => '', + 'questionFontSubset' => '', + 'questionFontSize' => '', + 'questionFontSizeType' => 'px', + 'questionFontSizeTablet' => '', + 'questionFontSizeMobile' => '', + 'questionLineHeight' => '', + 'questionLineHeightType' => 'em', + 'questionLineHeightTablet' => '', + 'questionLineHeightMobile' => '', + 'answerFontFamily' => 'Default', + 'answerFontWeight' => '', + 'answerFontSubset' => '', + 'answerFontSize' => '', + 'answerFontSizeType' => 'px', + 'answerFontSizeTablet' => '', + 'answerFontSizeMobile' => '', + 'answerLineHeight' => '', + 'answerLineHeightType' => 'em', + 'answerLineHeightTablet' => '', + 'answerLineHeightMobile' => '', + 'icon' => 'fas fa-plus', + 'iconActive' => 'fas fa-minus', + 'iconAlign' => 'row', + 'iconSize' => 15, + 'iconSizeMobile' => 15, + 'iconSizeTablet' => 15, + 'iconSizeType' => 'px', + 'columns' => 2, + 'tcolumns' => 2, + 'mcolumns' => 1, + 'schema' => '', + 'enableToggle' => true, + 'questionLeftPaddingTablet' => 10, + 'questionBottomPaddingTablet' => 10, + 'questionLeftPaddingDesktop' => 10, + 'questionBottomPaddingDesktop' => 10, + 'questionLeftPaddingMobile' => 10, + 'questionBottomPaddingMobile' => 10, + ), + ), + 'wpsp/faq-child' => array( + 'slug' => '', + 'title' => __( 'FAQ - Schema Pro Child', 'wp-schema-pro' ), + 'description' => __( 'This block helps you add single FAQ.', 'wp-schema-pro' ), + 'default' => true, + 'attributes' => array( + 'block_id' => '', + 'question' => '', + 'answer' => '', + 'icon' => 'fas fa-plus', + 'iconActive' => 'fas fa-minus', + 'layout' => 'accordion', + ), + ), + 'wpsp/how-to' => array( + 'slug' => '', + 'title' => __( 'How-to - Schema Pro', 'wp-schema-pro' ), + 'description' => __( 'This block allows you to design attractive How-to pages or articles with automatically adding How-to Schema to your page.', 'wp-schema-pro' ), + 'default' => true, + 'attributes' => array( + 'block_id' => '', + 'overallAlignment' => 'left', + 'toolsCount' => 1, + 'materialCount' => 1, + 'tools' => '', + 'materials' => '', + 'showTotaltime' => false, + 'showEstcost' => false, + 'showTools' => false, + 'showMaterials' => false, + 'mainimage' => '', + 'imgSize' => 'thumbnail', + 'timeSpace' => 5, + 'costSpace' => 5, + 'time' => '30', + 'cost' => '65', + 'currencyType' => ' USD', + 'headingAlign' => 'left', + 'descriptionAlign' => 'left', + 'headingColor' => '', + 'showEstcostcolor' => '', + 'showTotaltimecolor' => '', + 'subHeadingColor' => '', + 'headingTag' => 'h3', + 'headSpace' => 15, + 'headFontFamily' => 'Default', + 'headFontWeight' => '', + 'headFontSubset' => '', + 'headFontSizeType' => 'px', + 'headLineHeightType' => 'em', + 'headFontSize' => '', + 'headFontSizeTablet' => '', + 'headFontSizeMobile' => '', + 'headLineHeight' => '', + 'headLineHeightTablet' => '', + 'headLineHeightMobile' => '', + 'subHeadFontFamily' => 'Default', + 'subHeadFontWeight' => '', + 'subHeadFontSubset' => '', + 'subHeadFontSize' => '', + 'subHeadFontSizeType' => 'px', + 'subHeadFontSizeTablet' => '', + 'subHeadFontSizeMobile' => '', + 'subHeadLineHeight' => '', + 'subHeadLineHeightType' => 'em', + 'subHeadLineHeightTablet' => '', + 'subHeadLineHeightMobile' => '', + 'separatorSpace' => 15, + 'headLoadGoogleFonts' => false, + 'subHeadLoadGoogleFonts' => false, + 'priceFontSizeType' => 'px', + 'priceFontSize' => '', + 'priceFontSizeTablet' => '', + 'priceFontSizeMobile' => '', + 'priceFontFamily' => 'Default', + 'priceFontWeight' => '', + 'priceFontSubset' => '', + 'priceLineHeightType' => 'em', + 'priceLineHeight' => '', + 'priceLineHeightTablet' => '', + 'priceLineHeightMobile' => '', + 'priceLoadGoogleFonts' => false, + 'row_gap' => 20, + 'step_gap' => 20, + 'schema' => '', + ), + ), + 'wpsp/how-to-child' => array( + 'slug' => '', + 'title' => __( 'Steps', 'wp-schema-pro' ), + 'description' => __( 'This steps box allows you to place an image along with a heading and description within a single block.', 'wp-schema-pro' ), + 'default' => true, + 'attributes' => array( + 'classMigrate' => false, + 'headingAlign' => 'left', + 'headingColor' => '', + 'subHeadingColor' => '', + 'headFontSize' => '', + 'headFontSizeType' => 'px', + 'headFontSizeTablet' => '', + 'headFontSizeMobile' => '', + 'headFontFamily' => '', + 'headFontWeight' => '', + 'headFontSubset' => '', + 'headLineHeightType' => 'em', + 'headLineHeight' => '', + 'headLineHeightTablet' => '', + 'headLineHeightMobile' => '', + 'headLoadGoogleFonts' => false, + 'subHeadFontSize' => '', + 'subHeadFontSizeType' => 'px', + 'subHeadFontSizeTablet' => '', + 'subHeadFontSizeMobile' => '', + 'subHeadFontFamily' => '', + 'subHeadFontWeight' => '', + 'subHeadFontSubset' => '', + 'subHeadLineHeightType' => 'em', + 'subHeadLineHeight' => '', + 'subHeadLineHeightTablet' => '', + 'subHeadLineHeightMobile' => '', + 'subHeadLoadGoogleFonts' => false, + 'separatorWidth' => '', + 'separatorHeight' => '', + 'separatorWidthType' => '%', + 'headSpace' => '10', + 'separatorSpace' => '10', + 'subHeadSpace' => '10', + 'iconColor' => '#333', + 'iconSize' => '40', + 'iconimgPosition' => 'above-title', + 'block_id' => '', + 'iconHover' => '', + 'iconimgBorderRadius' => '0', + 'seperatorStyle' => 'solid', + 'seperatorWidth' => '30', + 'seperatorColor' => '#333', + 'seperatorThickness' => '2', + 'ctaLinkColor' => '#333', + 'ctaFontSize' => '', + 'ctaFontSizeType' => 'px', + 'ctaFontSizeMobile' => '', + 'ctaFontSizeTablet' => '', + 'ctaFontFamily' => '', + 'ctaFontWeight' => '', + 'ctaFontSubset' => '', + 'ctaLoadGoogleFonts' => false, + 'ctaBtnLinkColor' => '#333', + 'ctaBgColor' => 'transparent', + 'ctaBtnVertPadding' => '10', + 'ctaBtnHrPadding' => '14', + 'ctaBorderStyle' => 'solid', + 'ctaBorderColor' => '#333', + 'ctaBorderWidth' => '1', + 'ctaBorderRadius' => '0', + 'iconLeftMargin' => '5', + 'iconRightMargin' => '10', + 'iconTopMargin' => '5', + 'iconBottomMargin' => '5', + 'imageSize' => 'thumbnail', + 'imageWidthType' => false, + 'imageWidth' => '120', + 'seperatorSpace' => '15', + 'ctaLinkHoverColor' => '', + 'ctaBgHoverColor' => '', + 'ctaBorderhoverColor' => '', + 'ctaIconSpace' => '5', + ), + ), + + ); + } + return self::$block_attributes; + } + + /** + * Get Block Assets. + * + * @since 1.13.4 + * + * @return array The Asset List. + */ + public static function get_block_assets() { + + $minify = BSF_AIOSRS_Pro_Helper::bsf_schema_pro_is_wp_debug_enable() ? 'js/faq.js' : 'min-js/faq.min.js'; + $faq_js = BSF_AIOSRS_PRO_URI . 'wpsp-blocks/assets/' . $minify; + + if ( null === self::$block_assets ) { + self::$block_assets = array( + + 'wpsp-faq-js' => array( + 'src' => $faq_js, + 'dep' => array(), + 'skipEditor' => true, + ), + ); + } + return self::$block_assets; + } + } +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-helper.php b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-helper.php new file mode 100644 index 00000000..7d012486 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-helper.php @@ -0,0 +1,731 @@ + $curr_block_name ) { + + $js_assets = ( isset( $blocks[ $curr_block_name ]['js_assets'] ) ) ? $blocks[ $curr_block_name ]['js_assets'] : array(); + + $css_assets = ( isset( $blocks[ $curr_block_name ]['css_assets'] ) ) ? $blocks[ $curr_block_name ]['css_assets'] : array(); + + foreach ( $js_assets as $asset_handle => $val ) { + // Scripts. + if ( 'wpsp-faq-js' === $val ) { + if ( self::$wpsp_faq_layout ) { + wp_enqueue_script( 'wpsp-faq-js' ); + } + } else { + wp_enqueue_script( $val ); + } + } + + foreach ( $css_assets as $asset_handle => $val ) { + // Styles. + wp_enqueue_style( $val ); + } + } + + } + + /** + * Print the Script in footer. + */ + public function print_script() { + + ob_start(); + ?> + + + + $gfont_values ) { + if ( ! empty( $link ) ) { + $link .= '%7C'; // Append a new font to the string. + } + $link .= $gfont_values['fontfamily']; + if ( ! empty( $gfont_values['fontvariants'] ) ) { + $link .= ':'; + $link .= implode( ',', $gfont_values['fontvariants'] ); + } + if ( ! empty( $gfont_values['fontsubsets'] ) ) { + foreach ( $gfont_values['fontsubsets'] as $subset ) { + if ( ! in_array( $subset, $subsets, true ) ) { + array_push( $subsets, $subset ); + } + } + } + } + if ( ! empty( $subsets ) ) { + $link .= '&subset=' . implode( ',', $subsets ); + } + if ( isset( $link ) && ! empty( $link ) ) { + echo ''; //phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet + } + } + + + /** + * Parse CSS into correct CSS syntax. + * + * @param array $selectors The block selectors. + * @param string $id The selector ID. + * @since 2.2.0 + */ + public static function generate_css( $selectors, $id ) { + $styling_css = ''; + + if ( empty( $selectors ) ) { + return ''; + } + + foreach ( $selectors as $key => $value ) { + + $css = ''; + + foreach ( $value as $j => $val ) { + + if ( 'font-family' === $j && 'Default' === $val ) { + continue; + } + + if ( ! empty( $val ) || 0 === $val ) { + if ( 'font-family' === $j ) { + $css .= $j . ': "' . $val . '";'; + } else { + $css .= $j . ': ' . $val . ';'; + } + } + } + + if ( ! empty( $css ) ) { + $styling_css .= $id; + $styling_css .= $key . '{'; + $styling_css .= $css . '}'; + } + } + + return $styling_css; + } + + /** + * Get CSS value + * + * Syntax: + * + * get_css_value( VALUE, UNIT ); + * + * E.g. + * + * get_css_value( VALUE, 'em' ); + * + * @param string $value CSS value. + * @param string $unit CSS unit. + * @since 2.2.0 + */ + public static function get_css_value( $value = '', $unit = '' ) { + + if ( '' == $value ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison + return $value; + } + + $css_val = ''; + + if ( ! empty( $value ) ) { + $css_val = esc_attr( $value ) . $unit; + } + + return $css_val; + } + + /** + * Generates CSS recurrsively. + * + * @param object $block The block object. + * @since 2.2.0 + */ + public function get_block_css_and_js( $block ) { + + $block = (array) $block; + + $name = $block['blockName']; + $css = array(); + $js = ''; + $block_id = ''; + + if ( ! isset( $name ) ) { + return array( + 'css' => array(), + 'js' => '', + ); + } + $blockattr = array(); + if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) { + $blockattr = $block['attrs']; + if ( isset( $blockattr['block_id'] ) ) { + $block_id = $blockattr['block_id']; + } + } + + self::$current_block_list[] = $name; + + if ( strpos( $name, 'wpsp/' ) !== false ) { + self::$wpsp_flag = true; + } + + switch ( $name ) { + + case 'wpsp/faq': + if ( ! empty( $blockattr ) ) { + $css = BSF_SP_Block_Helper::get_faq_css( $blockattr, $block_id ); + if ( ! isset( $blockattr['layout'] ) ) { + self::$wpsp_faq_layout = true; + } + BSF_SP_Block_JS::blocks_faq_gfont( $blockattr ); + } + break; + case 'wpsp/how-to': + if ( ! empty( $blockattr ) ) { + $css += BSF_SP_Block_Helper::get_how_to_css( $blockattr, $block_id ); + BSF_SP_Block_JS::blocks_how_to_gfont( $blockattr ); + } + break; + case 'wpsp/how-to-child': + if ( ! empty( $blockattr ) ) { + $css += BSF_SP_Block_Helper::get_how_to_child_css( $blockattr, $block_id ); + BSF_SP_Block_JS::blocks_how_to_child_gfont( $blockattr ); + } + break; + default: + // Nothing to do here. + break; + } + + if ( isset( $block['innerBlocks'] ) ) { + foreach ( $block['innerBlocks'] as $j => $inner_block ) { + if ( 'core/block' === $inner_block['blockName'] ) { + $id = ( isset( $inner_block['attrs']['ref'] ) ) ? $inner_block['attrs']['ref'] : 0; + + if ( $id ) { + $content = get_post_field( 'post_content', $id ); + + $reusable_blocks = $this->parse( $content ); + + $assets = $this->get_assets( $reusable_blocks ); + + self::$stylesheet .= $assets['css']; + self::$script .= $assets['js']; + } + } else { + // Get CSS for the Block. + $inner_assets = $this->get_block_css_and_js( $inner_block ); + $inner_block_css = $inner_assets['css']; + + $css_desktop = ( isset( $css['desktop'] ) ? $css['desktop'] : '' ); + $css_tablet = ( isset( $css['tablet'] ) ? $css['tablet'] : '' ); + $css_mobile = ( isset( $css['mobile'] ) ? $css['mobile'] : '' ); + + if ( isset( $inner_block_css['desktop'] ) ) { + $css['desktop'] = $css_desktop . $inner_block_css['desktop']; + $css['tablet'] = $css_tablet . $inner_block_css['tablet']; + $css['mobile'] = $css_mobile . $inner_block_css['mobile']; + } + + $js .= $inner_assets['js']; + } + } + } + + self::$current_block_list = array_unique( self::$current_block_list ); + + return array( + 'css' => $css, + 'js' => $js, + ); + + } + + /** + * Adds Google fonts all blocks. + * + * @param array $load_google_font the blocks attr. + * @param array $font_family the blocks attr. + * @param array $font_weight the blocks attr. + * @param array $font_subset the blocks attr. + */ + public static function blocks_google_font( $load_google_font, $font_family, $font_weight, $font_subset ) { + + if ( true === $load_google_font ) { + if ( ! array_key_exists( $font_family, self::$gfonts ) ) { + $add_font = array( + 'fontfamily' => $font_family, + 'fontvariants' => ( isset( $font_weight ) && ! empty( $font_weight ) ? array( $font_weight ) : array() ), + 'fontsubsets' => ( isset( $font_subset ) && ! empty( $font_subset ) ? array( $font_subset ) : array() ), + ); + self::$gfonts[ $font_family ] = $add_font; + } else { + if ( isset( $font_weight ) && ! empty( $font_weight ) && ! in_array( $font_weight, self::$gfonts[ $font_family ]['fontvariants'], true ) ) { + array_push( self::$gfonts[ $font_family ]['fontvariants'], $font_weight ); + } + if ( isset( $font_subset ) && ! empty( $font_subset ) && ! in_array( $font_subset, self::$gfonts[ $font_family ]['fontsubsets'], true ) ) { + array_push( self::$gfonts[ $font_family ]['fontsubsets'], $font_subset ); + } + } + } + } + + /** + * Generates stylesheet and appends in head tag. + * + * @since 2.2.0 + */ + public function generate_assets() { + + $this_post = array(); + + global $post; + $this_post = $post; + + if ( ! is_object( $this_post ) ) { + return; + } + + /** + * Filters the post to build stylesheet for. + * + * @param \WP_Post $this_post The global post. + */ + $this_post = apply_filters( 'wpsp_post_for_stylesheet', $this_post ); + + $this->get_generated_stylesheet( $this_post ); + + } + + /** + * Generates stylesheet in loop. + * + * @param object $this_post Current Post Object. + * @since 2.2.0 + */ + public function get_generated_stylesheet( $this_post ) { + + if ( ! is_object( $this_post ) ) { + return; + } + + if ( ! isset( $this_post->ID ) ) { + return; + } + if ( function_exists( 'has_blocks' ) && has_blocks( $this_post->ID ) && isset( $this_post->post_content ) ) { + $blocks = $this->parse( $this_post->post_content ); + self::$page_blocks = $blocks; + + if ( ! is_array( $blocks ) || empty( $blocks ) ) { + return; + } + + $assets = $this->get_assets( $blocks ); + + self::$stylesheet .= $assets['css']; + self::$script .= $assets['js']; + } + } + + /** + * Parse Guten Block. + * + * @param string $content the content string. + * @since 2.2.0 + */ + public function parse( $content ) { + + global $wp_version; + + return ( version_compare( $wp_version, '5', '>=' ) ) ? parse_blocks( $content ) : gutenberg_parse_blocks( $content ); + } + + /** + * Generates stylesheet for reusable blocks. + * + * @param array $blocks Blocks array. + * @since 2.2.0 + */ + public function get_assets( $blocks ) { + + $desktop = ''; + $tablet = ''; + $mobile = ''; + + $tab_styling_css = ''; + $mob_styling_css = ''; + + $js = ''; + + foreach ( $blocks as $i => $block ) { + + if ( is_array( $block ) ) { + + if ( '' === $block['blockName'] ) { + continue; + } + if ( 'core/block' === $block['blockName'] ) { + $id = ( isset( $block['attrs']['ref'] ) ) ? $block['attrs']['ref'] : 0; + + if ( $id ) { + $content = get_post_field( 'post_content', $id ); + + $reusable_blocks = $this->parse( $content ); + + $assets = $this->get_assets( $reusable_blocks ); + + self::$stylesheet .= $assets['css']; + self::$script .= $assets['js']; + + } + } else { + + $block_assets = $this->get_block_css_and_js( $block ); + + // Get CSS for the Block. + $css = $block_assets['css']; + + if ( isset( $css['desktop'] ) ) { + $desktop .= $css['desktop']; + $tablet .= $css['tablet']; + $mobile .= $css['mobile']; + } + + $js .= $block_assets['js']; + } + } + } + + if ( ! empty( $tablet ) ) { + $tab_styling_css .= '@media only screen and (max-width: ' . WPSP_TABLET_BREAKPOINT . 'px) {'; + $tab_styling_css .= $tablet; + $tab_styling_css .= '}'; + } + + if ( ! empty( $mobile ) ) { + $mob_styling_css .= '@media only screen and (max-width: ' . WPSP_MOBILE_BREAKPOINT . 'px) {'; + $mob_styling_css .= $mobile; + $mob_styling_css .= '}'; + } + + return array( + 'css' => $desktop . $tab_styling_css . $mob_styling_css, + 'js' => $js, + ); + } + + /** + * Get Typography Dynamic CSS. + * + * @param array $attr The Attribute array. + * @param string $slug The field slug. + * @param string $selector The selector array. + * @param array $combined_selectors The combined selector array. + * @since 2.2.0 + * @return bool|string + */ + public static function get_typography_css( $attr, $slug, $selector, $combined_selectors ) { + + $typo_css_desktop = array(); + $typo_css_tablet = array(); + $typo_css_mobile = array(); + + $already_selectors_desktop = ( isset( $combined_selectors['desktop'][ $selector ] ) ) ? $combined_selectors['desktop'][ $selector ] : array(); + $already_selectors_tablet = ( isset( $combined_selectors['tablet'][ $selector ] ) ) ? $combined_selectors['tablet'][ $selector ] : array(); + $already_selectors_mobile = ( isset( $combined_selectors['mobile'][ $selector ] ) ) ? $combined_selectors['mobile'][ $selector ] : array(); + + $family_slug = ( '' === $slug ) ? 'fontFamily' : $slug . 'FontFamily'; + $weight_slug = ( '' === $slug ) ? 'fontWeight' : $slug . 'FontWeight'; + + $l_ht_slug = ( '' === $slug ) ? 'lineHeight' : $slug . 'LineHeight'; + $f_sz_slug = ( '' === $slug ) ? 'fontSize' : $slug . 'FontSize'; + $l_ht_type_slug = ( '' === $slug ) ? 'lineHeightType' : $slug . 'LineHeightType'; + $f_sz_type_slug = ( '' === $slug ) ? 'fontSizeType' : $slug . 'FontSizeType'; + + $typo_css_desktop[ $selector ] = array( + 'font-family' => $attr[ $family_slug ], + 'font-weight' => $attr[ $weight_slug ], + 'font-size' => ( isset( $attr[ $f_sz_slug ] ) ) ? self::get_css_value( $attr[ $f_sz_slug ], $attr[ $f_sz_type_slug ] ) : '', + 'line-height' => ( isset( $attr[ $l_ht_slug ] ) ) ? self::get_css_value( $attr[ $l_ht_slug ], $attr[ $l_ht_type_slug ] ) : '', + ); + + $typo_css_desktop[ $selector ] = array_merge( + $typo_css_desktop[ $selector ], + $already_selectors_desktop + ); + + $typo_css_tablet[ $selector ] = array( + 'font-size' => ( isset( $attr[ $f_sz_slug . 'Tablet' ] ) ) ? self::get_css_value( $attr[ $f_sz_slug . 'Tablet' ], $attr[ $f_sz_type_slug ] ) : '', + 'line-height' => ( isset( $attr[ $l_ht_slug . 'Tablet' ] ) ) ? self::get_css_value( $attr[ $l_ht_slug . 'Tablet' ], $attr[ $l_ht_type_slug ] ) : '', + ); + + $typo_css_tablet[ $selector ] = array_merge( + $typo_css_tablet[ $selector ], + $already_selectors_tablet + ); + + $typo_css_mobile[ $selector ] = array( + 'font-size' => ( isset( $attr[ $f_sz_slug . 'Mobile' ] ) ) ? self::get_css_value( $attr[ $f_sz_slug . 'Mobile' ], $attr[ $f_sz_type_slug ] ) : '', + 'line-height' => ( isset( $attr[ $l_ht_slug . 'Mobile' ] ) ) ? self::get_css_value( $attr[ $l_ht_slug . 'Mobile' ], $attr[ $l_ht_type_slug ] ) : '', + ); + + $typo_css_mobile[ $selector ] = array_merge( + $typo_css_mobile[ $selector ], + $already_selectors_mobile + ); + + return array( + 'desktop' => array_merge( + $combined_selectors['desktop'], + $typo_css_desktop + ), + 'tablet' => array_merge( + $combined_selectors['tablet'], + $typo_css_tablet + ), + 'mobile' => array_merge( + $combined_selectors['mobile'], + $typo_css_mobile + ), + ); + } + + /** + * Parse CSS into correct CSS syntax. + * + * @param array $combined_selectors The combined selector array. + * @param string $id The selector ID. + * @since 2.2.0 + */ + public static function generate_all_css( $combined_selectors, $id ) { + + return array( + 'desktop' => self::generate_css( $combined_selectors['desktop'], $id ), + 'tablet' => self::generate_css( $combined_selectors['tablet'], $id ), + 'mobile' => self::generate_css( $combined_selectors['mobile'], $id ), + ); + } + + /** + * Get an instance of WP_Filesystem_Direct. + * + * @since 1.14.4 + * @return object A WP_Filesystem_Direct instance. + */ + public function get_filesystem() { + global $wp_filesystem; + + require_once ABSPATH . '/wp-admin/includes/file.php'; + + WP_Filesystem(); + + return $wp_filesystem; + } + } + + + /** + * Prepare if class 'BSF_SP_Helper' exist. + * Kicking this off by calling 'get_instance()' method + */ + BSF_SP_Helper::get_instance(); +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-init-blocks.php b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-init-blocks.php new file mode 100644 index 00000000..806231ed --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-init-blocks.php @@ -0,0 +1,233 @@ + 'wpsp', + 'title' => __( 'Schema Pro', 'wp-schema-pro' ), + ), + ) + ); + } + + /** + * Enqueue Gutenberg block assets for both frontend + backend. + * + * @since 2.2.0 + */ + public function block_assets() { + $post = get_post(); + + /** + * Filters the post to build stylesheet for. + * + * @param \WP_Post $post The global post. + */ + $post = apply_filters( 'wpsp_post_for_stylesheet', $post ); + + if ( false === has_blocks( $post ) ) { + return; + } + + if ( false === BSF_SP_Helper::$wpsp_flag ) { + return; + } + + wp_enqueue_style( + 'wpsp-block-css', // Handle. + BSF_AIOSRS_PRO_URI . 'dist/style-blocks.css', // Block style CSS. + array(), + BSF_AIOSRS_PRO_VER + ); + $blocks = BSF_SP_Config::get_block_attributes(); + $block_assets = BSF_SP_Config::get_block_assets(); + + foreach ( $blocks as $slug => $value ) { + $js_assets = ( isset( $blocks[ $slug ]['js_assets'] ) ) ? $blocks[ $slug ]['js_assets'] : array(); + $css_assets = ( isset( $blocks[ $slug ]['css_assets'] ) ) ? $blocks[ $slug ]['css_assets'] : array(); + + foreach ( $js_assets as $asset_handle => $val ) { + // Scripts. + wp_register_script( + $val, // Handle. + $block_assets[ $val ]['src'], + $block_assets[ $val ]['dep'], + BSF_AIOSRS_PRO_VER, + true + ); + + $skip_editor = isset( $block_assets[ $val ]['skipEditor'] ) ? $block_assets[ $val ]['skipEditor'] : false; + + if ( is_admin() && false === $skip_editor ) { + wp_enqueue_script( $val ); + } + } + + foreach ( $css_assets as $asset_handle => $val ) { + // Styles. + wp_register_style( + $val, // Handle. + $block_assets[ $val ]['src'], + $block_assets[ $val ]['dep'], + BSF_AIOSRS_PRO_VER + ); + + if ( is_admin() ) { + wp_enqueue_style( $val ); + } + } + } + } // End function editor_assets(). + + /** + * Enqueue Gutenberg block assets for backend editor. + * + * @since 2.2.0 + */ + public function editor_assets() { + $wpsp_ajax_nonce = wp_create_nonce( 'wpsp_ajax_nonce' ); + $script_dep_path = BSF_AIOSRS_PRO_DIR . 'dist/blocks.asset.php'; + $script_info = file_exists( $script_dep_path ) + ? include $script_dep_path + : array( + 'dependencies' => array(), + 'version' => BSF_AIOSRS_PRO_VER, + ); + $script_dep = array_merge( $script_info['dependencies'], array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-components', 'wp-editor', 'wp-api-fetch' ) ); + + // Scripts. + wp_enqueue_script( + 'wpsp-block-editor-js', // Handle. + BSF_AIOSRS_PRO_URI . 'dist/blocks.js', + $script_dep, // Dependencies, defined above. + $script_info['version'], // BSF_AIOSRS_PRO_VER. + true // Enqueue the script in the footer. + ); + + // Common Editor style. + wp_enqueue_style( + 'wpsp-block-common-editor-css', // Handle. + BSF_AIOSRS_PRO_URI . 'wpsp-blocks/assets/css/blocks.commoneditorstyle.build.css', // Block editor CSS. + array( 'wp-edit-blocks' ), // Dependency to include the CSS after it. + BSF_AIOSRS_PRO_VER + ); + + $blocks = array(); + $saved_blocks = BSF_SP_Admin_Helper::get_admin_settings_option( '_wpsp_blocks' ); + + if ( is_array( $saved_blocks ) ) { + foreach ( $saved_blocks as $slug => $data ) { + $_slug = 'wpsp/' . $slug; + $current_block = BSF_SP_Config::$block_attributes[ $_slug ]; + + if ( isset( $current_block['is_child'] ) && $current_block['is_child'] ) { + continue; + } + + if ( isset( $current_block['is_active'] ) && ! $current_block['is_active'] ) { + continue; + } + + if ( isset( $saved_blocks[ $slug ] ) && ( 'disabled' === $saved_blocks[ $slug ] ) ) { + array_push( $blocks, $_slug ); + } + } + } + wp_localize_script( + 'wpsp-block-editor-js', + 'wpsp_blocks_info', + array( + 'blocks' => BSF_SP_Config::get_block_attributes(), + 'category' => 'wpsp', + 'ajax_url' => admin_url( 'admin-ajax.php' ), + 'tablet_breakpoint' => WPSP_TABLET_BREAKPOINT, + 'mobile_breakpoint' => WPSP_MOBILE_BREAKPOINT, + 'wpsp_ajax_nonce' => $wpsp_ajax_nonce, + 'wpsp_home_url' => home_url(), + 'wpsp_base_url' => BSF_AIOSRS_PRO_URI, + 'wpsp_icons' => $this->get_svg_icons(), + ) + ); + } // End function editor_assets(). + + /** + * Get the SVG icons. + */ + private function get_svg_icons() { + $file_url = BSF_AIOSRS_PRO_URI . 'wpsp-config/controls/WPSPIcon.json'; + + $response = wp_remote_get( $file_url ); + + if ( is_wp_error( $response ) ) { + return array(); // Return an empty array if there's an error. + } + + $body = wp_remote_retrieve_body( $response ); + $icons = json_decode( $body, true ); + + return is_array( $icons ) ? $icons : array(); + } +} + +/** + * Prepare if class 'BSF_SP_Init_Blocks' exist. + * Kicking this off by calling 'get_instance()' method + */ +BSF_SP_Init_Blocks::get_instance(); diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-loader.php b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-loader.php new file mode 100644 index 00000000..37b1efdc --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-blocks/classes/class-bsf-sp-loader.php @@ -0,0 +1,79 @@ +wpsp_define_constants(); + + $this->wpsp_load_plugin(); + } + + /** + * Defines all constants + * + * @since 2.2.0 + */ + public function wpsp_define_constants() { + define( 'SP_SLUG', 'wpsp' ); + define( 'WPSP_TABLET_BREAKPOINT', '976' ); + define( 'WPSP_MOBILE_BREAKPOINT', '767' ); + } + + /** + * Loads plugin files. + * + * @since 2.2.0 + * + * @return void + */ + public function wpsp_load_plugin() { + + require_once BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-init-blocks.php'; + require_once BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-helper.php'; + require_once BSF_AIOSRS_PRO_DIR . 'wpsp-blocks/classes/class-bsf-sp-admin-helper.php'; + } + + /** + * Prepare if class 'BSF_SP_Loader' exist. + * Kicking this off by calling 'get_instance()' method + */ + + } + BSF_SP_Loader::get_instance(); +} + diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/WPSPIcon.json b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/WPSPIcon.json new file mode 100644 index 00000000..32e01a45 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/WPSPIcon.json @@ -0,0 +1,41761 @@ +{ + "500px": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "500px", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z" + } + }, + "free": [ + "brands" + ] + }, + "accessible-icon": { + "search": { + "terms": [ + "accessibility", + "handicap", + "person", + "wheelchair", + "wheelchair-alt" + ] + }, + "styles": [ + "brands" + ], + "label": "Accessible Icon", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z" + } + }, + "free": [ + "brands" + ] + }, + "accusoft": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Accusoft", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z" + } + }, + "free": [ + "brands" + ] + }, + "acquisitions-incorporated": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "game", + "gaming", + "tabletop" + ] + }, + "styles": [ + "brands" + ], + "label": "Acquisitions Incorporated", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M357.45 468.2c-1.2-7.7-1.3-7.6-9.6-7.6-99.8.2-111.8-2.4-112.7-2.6-12.3-1.7-20.6-10.5-21-23.1-.1-1.6-.2-71.6-1-129.1-.1-4.7 1.6-6.4 5.9-7.5 12.5-3 24.9-6.1 37.3-9.7 4.3-1.3 6.8-.2 8.4 3.5 4.5 10.3 8.8 20.6 13.2 30.9 1.6 3.7.1 4.4-3.4 4.4-10-.2-20-.1-30.4-.1v27h116c-1.4-9.5-2.7-18.1-4-27.5-7 0-13.8.4-20.4-.1-22.6-1.6-18.3-4.4-84-158.6-8.8-20.1-27.9-62.1-36.5-89.2-4.4-14 5.5-25.4 18.9-26.6 18.6-1.7 37.5-1.6 56.2-2 20.6-.4 41.2-.4 61.8-.5 3.1 0 4-1.4 4.3-4.3 1.2-9.8 2.7-19.5 4-29.2.8-5.3 1.6-10.7 2.4-16.1L23.75 0c-3.6 0-5.3 1.1-4.6 5.3 2.2 13.2-.8.8 6.4 45.3 63.4 0 71.8.9 101.8.5 12.3-.2 37 3.5 37.7 22.1.4 11.4-1.1 11.3-32.6 87.4-53.8 129.8-50.7 120.3-67.3 161-1.7 4.1-3.6 5.2-7.6 5.2-8.5-.2-17-.3-25.4.1-1.9.1-5.2 1.8-5.5 3.2-1.5 8.1-2.2 16.3-3.2 24.9h114.3v-27.6c-6.9 0-33.5.4-35.3-2.9 5.3-12.3 10.4-24.4 15.7-36.7 16.3 4 31.9 7.8 47.6 11.7 3.4.9 4.6 3 4.6 6.8-.1 42.9.1 85.9.2 128.8 0 10.2-5.5 19.1-14.9 23.1-6.5 2.7-3.3 3.4-121.4 2.4-5.3 0-7.1 2-7.6 6.8-1.5 12.9-2.9 25.9-5 38.8-.8 5 1.3 5.7 5.3 5.7 183.2.6-30.7 0 337.1 0-2.5-15-4.4-29.4-6.6-43.7zm-174.9-205.7c-13.3-4.2-26.6-8.2-39.9-12.5a44.53 44.53 0 0 1-5.8-2.9c17.2-44.3 34.2-88.1 51.3-132.1 7.5 2.4 7.9-.8 9.4 0 9.3 22.5 18.1 60.1 27 82.8 6.6 16.7 13 33.5 19.7 50.9a35.78 35.78 0 0 1-3.9 2.1c-13.1 3.9-26.4 7.5-39.4 11.7a27.66 27.66 0 0 1-18.4 0z" + } + }, + "free": [ + "brands" + ] + }, + "ad": { + "search": { + "terms": [ + "advertisement", + "media", + "newspaper", + "promotion", + "publicity" + ] + }, + "styles": [ + "solid" + ], + "label": "Ad", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z" + } + }, + "free": [ + "solid" + ] + }, + "address-book": { + "search": { + "terms": [ + "contact", + "directory", + "index", + "little black book", + "rolodex" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Address Book", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "address-card": { + "search": { + "terms": [ + "about", + "contact", + "id", + "identification", + "postcard", + "profile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Address Card", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "adjust": { + "search": { + "terms": [ + "contrast", + "dark", + "light", + "saturation" + ] + }, + "styles": [ + "solid" + ], + "label": "adjust", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z" + } + }, + "free": [ + "solid" + ] + }, + "adn": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "App.net", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z" + } + }, + "free": [ + "brands" + ] + }, + "adobe": { + "search": { + "terms": [ + "acrobat", + "app", + "design", + "illustrator", + "indesign", + "photoshop" + ] + }, + "styles": [ + "brands" + ], + "label": "Adobe", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M315.5 64h170.9v384L315.5 64zm-119 0H25.6v384L196.5 64zM256 206.1L363.5 448h-73l-30.7-76.8h-78.7L256 206.1z" + } + }, + "free": [ + "brands" + ] + }, + "adversal": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Adversal", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z" + } + }, + "free": [ + "brands" + ] + }, + "affiliatetheme": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "affiliatetheme", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z" + } + }, + "free": [ + "brands" + ] + }, + "air-freshener": { + "search": { + "terms": [ + "car", + "deodorize", + "fresh", + "pine", + "scent" + ] + }, + "styles": [ + "solid" + ], + "label": "Air Freshener", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z" + } + }, + "free": [ + "solid" + ] + }, + "airbnb": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Airbnb", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z" + } + }, + "free": [ + "brands" + ] + }, + "algolia": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Algolia", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z" + } + }, + "free": [ + "brands" + ] + }, + "align-center": { + "search": { + "terms": [ + "format", + "middle", + "paragraph", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "align-center", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z" + } + }, + "free": [ + "solid" + ] + }, + "align-justify": { + "search": { + "terms": [ + "format", + "paragraph", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "align-justify", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "align-left": { + "search": { + "terms": [ + "format", + "paragraph", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "align-left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "align-right": { + "search": { + "terms": [ + "format", + "paragraph", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "align-right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z" + } + }, + "free": [ + "solid" + ] + }, + "alipay": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Alipay", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z" + } + }, + "free": [ + "brands" + ] + }, + "allergies": { + "search": { + "terms": [ + "allergy", + "freckles", + "hand", + "hives", + "pox", + "skin", + "spots" + ] + }, + "styles": [ + "solid" + ], + "label": "Allergies", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "amazon": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Amazon", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z" + } + }, + "free": [ + "brands" + ] + }, + "amazon-pay": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Amazon Pay", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z" + } + }, + "free": [ + "brands" + ] + }, + "ambulance": { + "search": { + "terms": [ + "covid-19", + "emergency", + "emt", + "er", + "help", + "hospital", + "support", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "ambulance", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z" + } + }, + "free": [ + "solid" + ] + }, + "american-sign-language-interpreting": { + "search": { + "terms": [ + "asl", + "deaf", + "finger", + "hand", + "interpret", + "speak" + ] + }, + "styles": [ + "solid" + ], + "label": "American Sign Language Interpreting", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z" + } + }, + "free": [ + "solid" + ] + }, + "amilia": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Amilia", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z" + } + }, + "free": [ + "brands" + ] + }, + "anchor": { + "search": { + "terms": [ + "berth", + "boat", + "dock", + "embed", + "link", + "maritime", + "moor", + "secure" + ] + }, + "styles": [ + "solid" + ], + "label": "Anchor", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z" + } + }, + "free": [ + "solid" + ] + }, + "android": { + "search": { + "terms": [ + "robot" + ] + }, + "styles": [ + "brands" + ], + "label": "Android", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55" + } + }, + "free": [ + "brands" + ] + }, + "angellist": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "AngelList", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z" + } + }, + "free": [ + "brands" + ] + }, + "angle-double-down": { + "search": { + "terms": [ + "arrows", + "caret", + "download", + "expand" + ] + }, + "styles": [ + "solid" + ], + "label": "Angle Double Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z" + } + }, + "free": [ + "solid" + ] + }, + "angle-double-left": { + "search": { + "terms": [ + "arrows", + "back", + "caret", + "laquo", + "previous", + "quote" + ] + }, + "styles": [ + "solid" + ], + "label": "Angle Double Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z" + } + }, + "free": [ + "solid" + ] + }, + "angle-double-right": { + "search": { + "terms": [ + "arrows", + "caret", + "forward", + "more", + "next", + "quote", + "raquo" + ] + }, + "styles": [ + "solid" + ], + "label": "Angle Double Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z" + } + }, + "free": [ + "solid" + ] + }, + "angle-double-up": { + "search": { + "terms": [ + "arrows", + "caret", + "collapse", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "Angle Double Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z" + } + }, + "free": [ + "solid" + ] + }, + "angle-down": { + "search": { + "terms": [ + "arrow", + "caret", + "download", + "expand" + ] + }, + "styles": [ + "solid" + ], + "label": "angle-down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z" + } + }, + "free": [ + "solid" + ] + }, + "angle-left": { + "search": { + "terms": [ + "arrow", + "back", + "caret", + "less", + "previous" + ] + }, + "styles": [ + "solid" + ], + "label": "angle-left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z" + } + }, + "free": [ + "solid" + ] + }, + "angle-right": { + "search": { + "terms": [ + "arrow", + "care", + "forward", + "more", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "angle-right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z" + } + }, + "free": [ + "solid" + ] + }, + "angle-up": { + "search": { + "terms": [ + "arrow", + "caret", + "collapse", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "angle-up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z" + } + }, + "free": [ + "solid" + ] + }, + "angry": { + "search": { + "terms": [ + "disapprove", + "emoticon", + "face", + "mad", + "upset" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Angry Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "angrycreative": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Angry Creative", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z" + } + }, + "free": [ + "brands" + ] + }, + "angular": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Angular", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z" + } + }, + "free": [ + "brands" + ] + }, + "ankh": { + "search": { + "terms": [ + "amulet", + "copper", + "coptic christianity", + "copts", + "crux ansata", + "egypt", + "venus" + ] + }, + "styles": [ + "solid" + ], + "label": "Ankh", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z" + } + }, + "free": [ + "solid" + ] + }, + "app-store": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "App Store", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z" + } + }, + "free": [ + "brands" + ] + }, + "app-store-ios": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "iOS App Store", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z" + } + }, + "free": [ + "brands" + ] + }, + "apper": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Apper Systems AB", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z" + } + }, + "free": [ + "brands" + ] + }, + "apple": { + "search": { + "terms": [ + "fruit", + "ios", + "mac", + "operating system", + "os", + "osx" + ] + }, + "styles": [ + "brands" + ], + "label": "Apple", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z" + } + }, + "free": [ + "brands" + ] + }, + "apple-alt": { + "search": { + "terms": [ + "fall", + "fruit", + "fuji", + "macintosh", + "orchard", + "seasonal", + "vegan" + ] + }, + "styles": [ + "solid" + ], + "label": "Fruit Apple", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z" + } + }, + "free": [ + "solid" + ] + }, + "apple-pay": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Apple Pay", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z" + } + }, + "free": [ + "brands" + ] + }, + "archive": { + "search": { + "terms": [ + "box", + "package", + "save", + "storage" + ] + }, + "styles": [ + "solid" + ], + "label": "Archive", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "archway": { + "search": { + "terms": [ + "arc", + "monument", + "road", + "street", + "tunnel" + ] + }, + "styles": [ + "solid" + ], + "label": "Archway", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-alt-circle-down": { + "search": { + "terms": [ + "arrow-circle-o-down", + "download" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Arrow Circle Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "arrow-alt-circle-left": { + "search": { + "terms": [ + "arrow-circle-o-left", + "back", + "previous" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Arrow Circle Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "arrow-alt-circle-right": { + "search": { + "terms": [ + "arrow-circle-o-right", + "forward", + "next" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Arrow Circle Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "arrow-alt-circle-up": { + "search": { + "terms": [ + "arrow-circle-o-up" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Arrow Circle Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "arrow-circle-down": { + "search": { + "terms": [ + "download" + ] + }, + "styles": [ + "solid" + ], + "label": "Arrow Circle Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-circle-left": { + "search": { + "terms": [ + "back", + "previous" + ] + }, + "styles": [ + "solid" + ], + "label": "Arrow Circle Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-circle-right": { + "search": { + "terms": [ + "forward", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "Arrow Circle Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-circle-up": { + "search": { + "terms": [ + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "Arrow Circle Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-down": { + "search": { + "terms": [ + "download" + ] + }, + "styles": [ + "solid" + ], + "label": "arrow-down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-left": { + "search": { + "terms": [ + "back", + "previous" + ] + }, + "styles": [ + "solid" + ], + "label": "arrow-left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-right": { + "search": { + "terms": [ + "forward", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "arrow-right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z" + } + }, + "free": [ + "solid" + ] + }, + "arrow-up": { + "search": { + "terms": [ + "forward", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "arrow-up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z" + } + }, + "free": [ + "solid" + ] + }, + "arrows-alt": { + "search": { + "terms": [ + "arrow", + "arrows", + "bigger", + "enlarge", + "expand", + "fullscreen", + "move", + "position", + "reorder", + "resize" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Arrows", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z" + } + }, + "free": [ + "solid" + ] + }, + "arrows-alt-h": { + "search": { + "terms": [ + "arrows-h", + "expand", + "horizontal", + "landscape", + "resize", + "wide" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Arrows Horizontal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z" + } + }, + "free": [ + "solid" + ] + }, + "arrows-alt-v": { + "search": { + "terms": [ + "arrows-v", + "expand", + "portrait", + "resize", + "tall", + "vertical" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Arrows Vertical", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z" + } + }, + "free": [ + "solid" + ] + }, + "artstation": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Artstation", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z" + } + }, + "free": [ + "brands" + ] + }, + "assistive-listening-systems": { + "search": { + "terms": [ + "amplify", + "audio", + "deaf", + "ear", + "headset", + "hearing", + "sound" + ] + }, + "styles": [ + "solid" + ], + "label": "Assistive Listening Systems", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z" + } + }, + "free": [ + "solid" + ] + }, + "asterisk": { + "search": { + "terms": [ + "annotation", + "details", + "reference", + "star" + ] + }, + "styles": [ + "solid" + ], + "label": "asterisk", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z" + } + }, + "free": [ + "solid" + ] + }, + "asymmetrik": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Asymmetrik, Ltd.", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z" + } + }, + "free": [ + "brands" + ] + }, + "at": { + "search": { + "terms": [ + "address", + "author", + "e-mail", + "email", + "handle" + ] + }, + "styles": [ + "solid" + ], + "label": "At", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z" + } + }, + "free": [ + "solid" + ] + }, + "atlas": { + "search": { + "terms": [ + "book", + "directions", + "geography", + "globe", + "map", + "travel", + "wayfinding" + ] + }, + "styles": [ + "solid" + ], + "label": "Atlas", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z" + } + }, + "free": [ + "solid" + ] + }, + "atlassian": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Atlassian", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z" + } + }, + "free": [ + "brands" + ] + }, + "atom": { + "search": { + "terms": [ + "atheism", + "chemistry", + "electron", + "ion", + "isotope", + "neutron", + "nuclear", + "proton", + "science" + ] + }, + "styles": [ + "solid" + ], + "label": "Atom", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M223.99908,224a32,32,0,1,0,32.00782,32A32.06431,32.06431,0,0,0,223.99908,224Zm214.172-96c-10.877-19.5-40.50979-50.75-116.27544-41.875C300.39168,34.875,267.63386,0,223.99908,0s-76.39066,34.875-97.89653,86.125C50.3369,77.375,20.706,108.5,9.82907,128-6.54984,157.375-5.17484,201.125,34.958,256-5.17484,310.875-6.54984,354.625,9.82907,384c29.13087,52.375,101.64652,43.625,116.27348,41.875C147.60842,477.125,180.36429,512,223.99908,512s76.3926-34.875,97.89652-86.125c14.62891,1.75,87.14456,10.5,116.27544-41.875C454.55,354.625,453.175,310.875,413.04017,256,453.175,201.125,454.55,157.375,438.171,128ZM63.33886,352c-4-7.25-.125-24.75,15.00391-48.25,6.87695,6.5,14.12891,12.875,21.88087,19.125,1.625,13.75,4,27.125,6.75,40.125C82.34472,363.875,67.09081,358.625,63.33886,352Zm36.88478-162.875c-7.752,6.25-15.00392,12.625-21.88087,19.125-15.12891-23.5-19.00392-41-15.00391-48.25,3.377-6.125,16.37891-11.5,37.88478-11.5,1.75,0,3.875.375,5.75.375C104.09864,162.25,101.84864,175.625,100.22364,189.125ZM223.99908,64c9.50195,0,22.25586,13.5,33.88282,37.25-11.252,3.75-22.50391,8-33.88282,12.875-11.377-4.875-22.62892-9.125-33.88283-12.875C201.74516,77.5,214.49712,64,223.99908,64Zm0,384c-9.502,0-22.25392-13.5-33.88283-37.25,11.25391-3.75,22.50587-8,33.88283-12.875C235.378,402.75,246.62994,407,257.8819,410.75,246.25494,434.5,233.501,448,223.99908,448Zm0-112a80,80,0,1,1,80-80A80.00023,80.00023,0,0,1,223.99908,336ZM384.6593,352c-3.625,6.625-19.00392,11.875-43.63479,11,2.752-13,5.127-26.375,6.752-40.125,7.75195-6.25,15.00391-12.625,21.87891-19.125C384.7843,327.25,388.6593,344.75,384.6593,352ZM369.65538,208.25c-6.875-6.5-14.127-12.875-21.87891-19.125-1.625-13.5-3.875-26.875-6.752-40.25,1.875,0,4.002-.375,5.752-.375,21.50391,0,34.50782,5.375,37.88283,11.5C388.6593,167.25,384.7843,184.75,369.65538,208.25Z" + } + }, + "free": [ + "solid" + ] + }, + "audible": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Audible", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z" + } + }, + "free": [ + "brands" + ] + }, + "audio-description": { + "search": { + "terms": [ + "blind", + "narration", + "video", + "visual" + ] + }, + "styles": [ + "solid" + ], + "label": "Audio Description", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z" + } + }, + "free": [ + "solid" + ] + }, + "autoprefixer": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Autoprefixer", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z" + } + }, + "free": [ + "brands" + ] + }, + "avianex": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "avianex", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z" + } + }, + "free": [ + "brands" + ] + }, + "aviato": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Aviato", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z" + } + }, + "free": [ + "brands" + ] + }, + "award": { + "search": { + "terms": [ + "honor", + "praise", + "prize", + "recognition", + "ribbon", + "trophy" + ] + }, + "styles": [ + "solid" + ], + "label": "Award", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z" + } + }, + "free": [ + "solid" + ] + }, + "aws": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Amazon Web Services (AWS)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z" + } + }, + "free": [ + "brands" + ] + }, + "baby": { + "search": { + "terms": [ + "child", + "diaper", + "doll", + "human", + "infant", + "kid", + "offspring", + "person", + "sprout" + ] + }, + "styles": [ + "solid" + ], + "label": "Baby", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z" + } + }, + "free": [ + "solid" + ] + }, + "baby-carriage": { + "search": { + "terms": [ + "buggy", + "carrier", + "infant", + "push", + "stroller", + "transportation", + "walk", + "wheels" + ] + }, + "styles": [ + "solid" + ], + "label": "Baby Carriage", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z" + } + }, + "free": [ + "solid" + ] + }, + "backspace": { + "search": { + "terms": [ + "command", + "delete", + "erase", + "keyboard", + "undo" + ] + }, + "styles": [ + "solid" + ], + "label": "Backspace", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z" + } + }, + "free": [ + "solid" + ] + }, + "backward": { + "search": { + "terms": [ + "previous", + "rewind" + ] + }, + "styles": [ + "solid" + ], + "label": "backward", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z" + } + }, + "free": [ + "solid" + ] + }, + "bacon": { + "search": { + "terms": [ + "blt", + "breakfast", + "ham", + "lard", + "meat", + "pancetta", + "pork", + "rasher" + ] + }, + "styles": [ + "solid" + ], + "label": "Bacon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z" + } + }, + "free": [ + "solid" + ] + }, + "bacteria": { + "search": { + "terms": [ + "antibiotic", + "antibody", + "covid-19", + "health", + "organism", + "sick" + ] + }, + "styles": [ + "solid" + ], + "label": "Bacteria", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M272.35,226.4A17.71,17.71,0,0,0,281.46,203l-4-9.08a121.29,121.29,0,0,1,12.36-3.08A83.34,83.34,0,0,0,323.57,177l10,9a17.76,17.76,0,1,0,23.92-26.27l-9.72-8.76a83.12,83.12,0,0,0,11.65-48.18l11.85-3.51a17.73,17.73,0,1,0-10.15-34l-11.34,3.36a84,84,0,0,0-36.38-35.57l2.84-10.85a17.8,17.8,0,0,0-34.47-8.93l-2.82,10.78a83.25,83.25,0,0,0-16.74,1.1C250.83,27,240,30.22,229.1,33.39l-3.38-9.46a17.8,17.8,0,0,0-33.56,11.89l3.49,9.8a286.74,286.74,0,0,0-43.94,23.57l-6.32-8.43a17.9,17.9,0,0,0-24.94-3.6A17.69,17.69,0,0,0,116.84,82l6.45,8.61a286.59,286.59,0,0,0-34.95,35.33l-8.82-6.42a17.84,17.84,0,0,0-24.89,3.86,17.66,17.66,0,0,0,3.88,24.77l8.88,6.47a286.6,286.6,0,0,0-23,43.91l-10.48-3.59a17.73,17.73,0,1,0-11.59,33.52L32.67,232c-2.79,10-5.79,19.84-7.52,30.22a83.16,83.16,0,0,0-.82,19l-11.58,3.43a17.73,17.73,0,1,0,10.13,34l11.27-3.33a83.51,83.51,0,0,0,36.39,35.43l-2.88,11.06a17.81,17.81,0,0,0,34.48,8.92l2.87-11c1,0,2.07.26,3.1.26a83.39,83.39,0,0,0,45.65-13.88l8.59,8.8a17.77,17.77,0,0,0,25.56-24.7l-9.14-9.37a83.41,83.41,0,0,0,12.08-31.05,119.08,119.08,0,0,1,3.87-15.53l9,4.22a17.74,17.74,0,1,0,15.15-32.09l-8.8-4.11c.67-1,1.2-2.08,1.9-3.05a119.89,119.89,0,0,1,7.87-9.41,121.73,121.73,0,0,1,11.65-11.4,119.49,119.49,0,0,1,9.94-7.82c1.12-.77,2.32-1.42,3.47-2.15l3.92,8.85a17.86,17.86,0,0,0,16.32,10.58A18.14,18.14,0,0,0,272.35,226.4ZM128,256a32,32,0,1,1,32-32A32,32,0,0,1,128,256Zm80-96a16,16,0,1,1,16-16A16,16,0,0,1,208,160Zm431.26,45.3a17.79,17.79,0,0,0-17.06-12.69,17.55,17.55,0,0,0-5.08.74l-11.27,3.33a83.61,83.61,0,0,0-36.39-35.43l2.88-11.06a17.81,17.81,0,0,0-34.48-8.91l-2.87,11c-1,0-2.07-.26-3.1-.26a83.32,83.32,0,0,0-45.65,13.89l-8.59-8.81a17.77,17.77,0,0,0-25.56,24.7l9.14,9.37a83.28,83.28,0,0,0-12.08,31.06,119.34,119.34,0,0,1-3.87,15.52l-9-4.22a17.74,17.74,0,1,0-15.15,32.09l8.8,4.11c-.67,1-1.2,2.08-1.89,3.05a117.71,117.71,0,0,1-7.94,9.47,119,119,0,0,1-11.57,11.33,121.59,121.59,0,0,1-10,7.83c-1.12.77-2.32,1.42-3.47,2.15l-3.92-8.85a17.86,17.86,0,0,0-16.32-10.58,18.14,18.14,0,0,0-7.18,1.5A17.71,17.71,0,0,0,358.54,309l4,9.08a118.71,118.71,0,0,1-12.36,3.08,83.34,83.34,0,0,0-33.77,13.9l-10-9a17.77,17.77,0,1,0-23.92,26.28l9.72,8.75a83.12,83.12,0,0,0-11.65,48.18l-11.86,3.51a17.73,17.73,0,1,0,10.16,34l11.34-3.36A84,84,0,0,0,326.61,479l-2.84,10.85a17.8,17.8,0,0,0,34.47,8.93L361.06,488a83.3,83.3,0,0,0,16.74-1.1c11.37-1.89,22.24-5.07,33.1-8.24l3.38,9.46a17.8,17.8,0,0,0,33.56-11.89l-3.49-9.79a287.66,287.66,0,0,0,43.94-23.58l6.32,8.43a17.88,17.88,0,0,0,24.93,3.6A17.67,17.67,0,0,0,523.16,430l-6.45-8.61a287.37,287.37,0,0,0,34.95-35.34l8.82,6.42a17.76,17.76,0,1,0,21-28.63l-8.88-6.46a287.17,287.17,0,0,0,23-43.92l10.48,3.59a17.73,17.73,0,1,0,11.59-33.52L607.33,280c2.79-10,5.79-19.84,7.52-30.21a83.27,83.27,0,0,0,.82-19.05l11.58-3.43A17.7,17.7,0,0,0,639.26,205.3ZM416,416a32,32,0,1,1,32-32A32,32,0,0,1,416,416Z" + } + }, + "free": [ + "solid" + ] + }, + "bacterium": { + "search": { + "terms": [ + "antibiotic", + "antibody", + "covid-19", + "health", + "organism", + "sick" + ] + }, + "styles": [ + "solid" + ], + "label": "Bacterium", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M511,102.93A23.76,23.76,0,0,0,481.47,87l-15.12,4.48a111.85,111.85,0,0,0-48.5-47.42l3.79-14.47a23.74,23.74,0,0,0-46-11.91l-3.76,14.37a111.94,111.94,0,0,0-22.33,1.47,386.74,386.74,0,0,0-44.33,10.41l-4.3-12a23.74,23.74,0,0,0-44.75,15.85l4.3,12.05a383.4,383.4,0,0,0-58.69,31.83l-8-10.63a23.85,23.85,0,0,0-33.24-4.8,23.57,23.57,0,0,0-4.83,33.09l8,10.63a386.14,386.14,0,0,0-46.7,47.44l-11-8a23.68,23.68,0,1,0-28,38.17l11.09,8.06a383.45,383.45,0,0,0-30.92,58.75l-12.93-4.43a23.65,23.65,0,1,0-15.47,44.69l13,4.48a385.81,385.81,0,0,0-9.3,40.53A111.58,111.58,0,0,0,32.44,375L17,379.56a23.64,23.64,0,0,0,13.51,45.31l15-4.44a111.49,111.49,0,0,0,48.53,47.24l-3.85,14.75a23.66,23.66,0,0,0,17,28.83,24.7,24.7,0,0,0,6,.75,23.73,23.73,0,0,0,23-17.7L140,479.67c1.37.05,2.77.35,4.13.35A111.22,111.22,0,0,0,205,461.5l11.45,11.74a23.7,23.7,0,0,0,34.08-32.93l-12.19-12.5a111,111,0,0,0,16.11-41.4,158.69,158.69,0,0,1,5.16-20.71l12,5.64a23.66,23.66,0,1,0,20.19-42.79l-11.72-5.49c.89-1.32,1.59-2.77,2.52-4.06a157.86,157.86,0,0,1,10.46-12.49,159.5,159.5,0,0,1,15.59-15.28,162.18,162.18,0,0,1,13.23-10.4c1.5-1,3.1-1.89,4.63-2.87l5.23,11.8a23.74,23.74,0,0,0,43.48-19.08l-5.36-12.11a158.87,158.87,0,0,1,16.49-4.1,111,111,0,0,0,45-18.54l13.33,12a23.69,23.69,0,1,0,31.88-35l-12.94-11.67A110.83,110.83,0,0,0,479.21,137L495,132.32A23.61,23.61,0,0,0,511,102.93ZM160,368a48,48,0,1,1,48-48A48,48,0,0,1,160,368Zm80-136a24,24,0,1,1,24-24A24,24,0,0,1,240,232Z" + } + }, + "free": [ + "solid" + ] + }, + "bahai": { + "search": { + "terms": [ + "bahai", + "bahá'í", + "star" + ] + }, + "styles": [ + "solid" + ], + "label": "Bahá'í", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z" + } + }, + "free": [ + "solid" + ] + }, + "balance-scale": { + "search": { + "terms": [ + "balanced", + "justice", + "legal", + "measure", + "weight" + ] + }, + "styles": [ + "solid" + ], + "label": "Balance Scale", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "balance-scale-left": { + "search": { + "terms": [ + "justice", + "legal", + "measure", + "unbalanced", + "weight" + ] + }, + "styles": [ + "solid" + ], + "label": "Balance Scale (Left-Weighted)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z" + } + }, + "free": [ + "solid" + ] + }, + "balance-scale-right": { + "search": { + "terms": [ + "justice", + "legal", + "measure", + "unbalanced", + "weight" + ] + }, + "styles": [ + "solid" + ], + "label": "Balance Scale (Right-Weighted)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z" + } + }, + "free": [ + "solid" + ] + }, + "ban": { + "search": { + "terms": [ + "abort", + "ban", + "block", + "cancel", + "delete", + "hide", + "prohibit", + "remove", + "stop", + "trash" + ] + }, + "styles": [ + "solid" + ], + "label": "ban", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z" + } + }, + "free": [ + "solid" + ] + }, + "band-aid": { + "search": { + "terms": [ + "bandage", + "boo boo", + "first aid", + "ouch" + ] + }, + "styles": [ + "solid" + ], + "label": "Band-Aid", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z" + } + }, + "free": [ + "solid" + ] + }, + "bandcamp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Bandcamp", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z" + } + }, + "free": [ + "brands" + ] + }, + "barcode": { + "search": { + "terms": [ + "info", + "laser", + "price", + "scan", + "upc" + ] + }, + "styles": [ + "solid" + ], + "label": "barcode", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z" + } + }, + "free": [ + "solid" + ] + }, + "bars": { + "search": { + "terms": [ + "checklist", + "drag", + "hamburger", + "list", + "menu", + "nav", + "navigation", + "ol", + "reorder", + "settings", + "todo", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "Bars", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "baseball-ball": { + "search": { + "terms": [ + "foul", + "hardball", + "league", + "leather", + "mlb", + "softball", + "sport" + ] + }, + "styles": [ + "solid" + ], + "label": "Baseball Ball", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z" + } + }, + "free": [ + "solid" + ] + }, + "basketball-ball": { + "search": { + "terms": [ + "dribble", + "dunk", + "hoop", + "nba" + ] + }, + "styles": [ + "solid" + ], + "label": "Basketball Ball", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z" + } + }, + "free": [ + "solid" + ] + }, + "bath": { + "search": { + "terms": [ + "clean", + "shower", + "tub", + "wash" + ] + }, + "styles": [ + "solid" + ], + "label": "Bath", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M32,384a95.4,95.4,0,0,0,32,71.09V496a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V480H384v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V455.09A95.4,95.4,0,0,0,480,384V336H32ZM496,256H80V69.25a21.26,21.26,0,0,1,36.28-15l19.27,19.26c-13.13,29.88-7.61,59.11,8.62,79.73l-.17.17A16,16,0,0,0,144,176l11.31,11.31a16,16,0,0,0,22.63,0L283.31,81.94a16,16,0,0,0,0-22.63L272,48a16,16,0,0,0-22.62,0l-.17.17c-20.62-16.23-49.83-21.75-79.73-8.62L150.22,20.28A69.25,69.25,0,0,0,32,69.25V256H16A16,16,0,0,0,0,272v16a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V272A16,16,0,0,0,496,256Z" + } + }, + "free": [ + "solid" + ] + }, + "battery-empty": { + "search": { + "terms": [ + "charge", + "dead", + "power", + "status" + ] + }, + "styles": [ + "solid" + ], + "label": "Battery Empty", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "battery-full": { + "search": { + "terms": [ + "charge", + "power", + "status" + ] + }, + "styles": [ + "solid" + ], + "label": "Battery Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z" + } + }, + "free": [ + "solid" + ] + }, + "battery-half": { + "search": { + "terms": [ + "charge", + "power", + "status" + ] + }, + "styles": [ + "solid" + ], + "label": "Battery 1/2 Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z" + } + }, + "free": [ + "solid" + ] + }, + "battery-quarter": { + "search": { + "terms": [ + "charge", + "low", + "power", + "status" + ] + }, + "styles": [ + "solid" + ], + "label": "Battery 1/4 Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z" + } + }, + "free": [ + "solid" + ] + }, + "battery-three-quarters": { + "search": { + "terms": [ + "charge", + "power", + "status" + ] + }, + "styles": [ + "solid" + ], + "label": "Battery 3/4 Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z" + } + }, + "free": [ + "solid" + ] + }, + "battle-net": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Battle.net", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8" + } + }, + "free": [ + "brands" + ] + }, + "bed": { + "search": { + "terms": [ + "lodging", + "mattress", + "rest", + "sleep", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Bed", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z" + } + }, + "free": [ + "solid" + ] + }, + "beer": { + "search": { + "terms": [ + "alcohol", + "ale", + "bar", + "beverage", + "brewery", + "drink", + "lager", + "liquor", + "mug", + "stein" + ] + }, + "styles": [ + "solid" + ], + "label": "beer", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "behance": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Behance", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z" + } + }, + "free": [ + "brands" + ] + }, + "behance-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Behance Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z" + } + }, + "free": [ + "brands" + ] + }, + "bell": { + "search": { + "terms": [ + "alarm", + "alert", + "chime", + "notification", + "reminder" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "bell", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "bell-slash": { + "search": { + "terms": [ + "alert", + "cancel", + "disabled", + "notification", + "off", + "reminder" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Bell Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "bezier-curve": { + "search": { + "terms": [ + "curves", + "illustrator", + "lines", + "path", + "vector" + ] + }, + "styles": [ + "solid" + ], + "label": "Bezier Curve", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "bible": { + "search": { + "terms": [ + "book", + "catholicism", + "christianity", + "god", + "holy" + ] + }, + "styles": [ + "solid" + ], + "label": "Bible", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z" + } + }, + "free": [ + "solid" + ] + }, + "bicycle": { + "search": { + "terms": [ + "bike", + "gears", + "pedal", + "transportation", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Bicycle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z" + } + }, + "free": [ + "solid" + ] + }, + "biking": { + "search": { + "terms": [ + "bicycle", + "bike", + "cycle", + "cycling", + "ride", + "wheel" + ] + }, + "styles": [ + "solid" + ], + "label": "Biking", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z" + } + }, + "free": [ + "solid" + ] + }, + "bimobject": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "BIMobject", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z" + } + }, + "free": [ + "brands" + ] + }, + "binoculars": { + "search": { + "terms": [ + "glasses", + "magnify", + "scenic", + "spyglass", + "view" + ] + }, + "styles": [ + "solid" + ], + "label": "Binoculars", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z" + } + }, + "free": [ + "solid" + ] + }, + "biohazard": { + "search": { + "terms": [ + "covid-19", + "danger", + "dangerous", + "hazmat", + "medical", + "radioactive", + "toxic", + "waste", + "zombie" + ] + }, + "styles": [ + "solid" + ], + "label": "Biohazard", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "birthday-cake": { + "search": { + "terms": [ + "anniversary", + "bakery", + "candles", + "celebration", + "dessert", + "frosting", + "holiday", + "party", + "pastry" + ] + }, + "styles": [ + "solid" + ], + "label": "Birthday Cake", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z" + } + }, + "free": [ + "solid" + ] + }, + "bitbucket": { + "search": { + "terms": [ + "atlassian", + "bitbucket-square", + "git" + ] + }, + "styles": [ + "brands" + ], + "label": "Bitbucket", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z" + } + }, + "free": [ + "brands" + ] + }, + "bitcoin": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Bitcoin", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z" + } + }, + "free": [ + "brands" + ] + }, + "bity": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Bity", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z" + } + }, + "free": [ + "brands" + ] + }, + "black-tie": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Font Awesome Black Tie", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z" + } + }, + "free": [ + "brands" + ] + }, + "blackberry": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "BlackBerry", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z" + } + }, + "free": [ + "brands" + ] + }, + "blender": { + "search": { + "terms": [ + "cocktail", + "milkshake", + "mixer", + "puree", + "smoothie" + ] + }, + "styles": [ + "solid" + ], + "label": "Blender", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z" + } + }, + "free": [ + "solid" + ] + }, + "blender-phone": { + "search": { + "terms": [ + "appliance", + "cocktail", + "communication", + "fantasy", + "milkshake", + "mixer", + "puree", + "silly", + "smoothie" + ] + }, + "styles": [ + "solid" + ], + "label": "Blender Phone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "blind": { + "search": { + "terms": [ + "cane", + "disability", + "person", + "sight" + ] + }, + "styles": [ + "solid" + ], + "label": "Blind", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z" + } + }, + "free": [ + "solid" + ] + }, + "blog": { + "search": { + "terms": [ + "journal", + "log", + "online", + "personal", + "post", + "web 2.0", + "wordpress", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "Blog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z" + } + }, + "free": [ + "solid" + ] + }, + "blogger": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Blogger", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z" + } + }, + "free": [ + "brands" + ] + }, + "blogger-b": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Blogger B", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z" + } + }, + "free": [ + "brands" + ] + }, + "bluetooth": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Bluetooth", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z" + } + }, + "free": [ + "brands" + ] + }, + "bluetooth-b": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Bluetooth", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z" + } + }, + "free": [ + "brands" + ] + }, + "bold": { + "search": { + "terms": [ + "emphasis", + "format", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "bold", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z" + } + }, + "free": [ + "solid" + ] + }, + "bolt": { + "search": { + "terms": [ + "electricity", + "lightning", + "weather", + "zap" + ] + }, + "styles": [ + "solid" + ], + "label": "Lightning Bolt", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z" + } + }, + "free": [ + "solid" + ] + }, + "bomb": { + "search": { + "terms": [ + "error", + "explode", + "fuse", + "grenade", + "warning" + ] + }, + "styles": [ + "solid" + ], + "label": "Bomb", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z" + } + }, + "free": [ + "solid" + ] + }, + "bone": { + "search": { + "terms": [ + "calcium", + "dog", + "skeletal", + "skeleton", + "tibia" + ] + }, + "styles": [ + "solid" + ], + "label": "Bone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z" + } + }, + "free": [ + "solid" + ] + }, + "bong": { + "search": { + "terms": [ + "aparatus", + "cannabis", + "marijuana", + "pipe", + "smoke", + "smoking" + ] + }, + "styles": [ + "solid" + ], + "label": "Bong", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z" + } + }, + "free": [ + "solid" + ] + }, + "book": { + "search": { + "terms": [ + "diary", + "documentation", + "journal", + "library", + "read" + ] + }, + "styles": [ + "solid" + ], + "label": "book", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z" + } + }, + "free": [ + "solid" + ] + }, + "book-dead": { + "search": { + "terms": [ + "Dungeons & Dragons", + "crossbones", + "d&d", + "dark arts", + "death", + "dnd", + "documentation", + "evil", + "fantasy", + "halloween", + "holiday", + "necronomicon", + "read", + "skull", + "spell" + ] + }, + "styles": [ + "solid" + ], + "label": "Book of the Dead", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "book-medical": { + "search": { + "terms": [ + "diary", + "documentation", + "health", + "history", + "journal", + "library", + "read", + "record" + ] + }, + "styles": [ + "solid" + ], + "label": "Medical Book", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z" + } + }, + "free": [ + "solid" + ] + }, + "book-open": { + "search": { + "terms": [ + "flyer", + "library", + "notebook", + "open book", + "pamphlet", + "reading" + ] + }, + "styles": [ + "solid" + ], + "label": "Book Open", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z" + } + }, + "free": [ + "solid" + ] + }, + "book-reader": { + "search": { + "terms": [ + "flyer", + "library", + "notebook", + "open book", + "pamphlet", + "reading" + ] + }, + "styles": [ + "solid" + ], + "label": "Book Reader", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z" + } + }, + "free": [ + "solid" + ] + }, + "bookmark": { + "search": { + "terms": [ + "favorite", + "marker", + "read", + "remember", + "save" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "bookmark", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "bootstrap": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Bootstrap", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M292.3 311.93c0 42.41-39.72 41.43-43.92 41.43h-80.89v-81.69h80.89c42.56 0 43.92 31.9 43.92 40.26zm-50.15-73.13c.67 0 38.44 1 38.44-36.31 0-15.52-3.51-35.87-38.44-35.87h-74.66v72.18h74.66zM448 106.67v298.66A74.89 74.89 0 0 1 373.33 480H74.67A74.89 74.89 0 0 1 0 405.33V106.67A74.89 74.89 0 0 1 74.67 32h298.66A74.89 74.89 0 0 1 448 106.67zM338.05 317.86c0-21.57-6.65-58.29-49.05-67.35v-.73c22.91-9.78 37.34-28.25 37.34-55.64 0-7 2-64.78-77.6-64.78h-127v261.33c128.23 0 139.87 1.68 163.6-5.71 14.21-4.42 52.71-17.98 52.71-67.12z" + } + }, + "free": [ + "brands" + ] + }, + "border-all": { + "search": { + "terms": [ + "cell", + "grid", + "outline", + "stroke", + "table" + ] + }, + "styles": [ + "solid" + ], + "label": "Border All", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z" + } + }, + "free": [ + "solid" + ] + }, + "border-none": { + "search": { + "terms": [ + "cell", + "grid", + "outline", + "stroke", + "table" + ] + }, + "styles": [ + "solid" + ], + "label": "Border None", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "border-style": { + "search": { + "terms": [] + }, + "styles": [ + "solid" + ], + "label": "Border Style", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "bowling-ball": { + "search": { + "terms": [ + "alley", + "candlepin", + "gutter", + "lane", + "strike", + "tenpin" + ] + }, + "styles": [ + "solid" + ], + "label": "Bowling Ball", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "box": { + "search": { + "terms": [ + "archive", + "container", + "package", + "storage" + ] + }, + "styles": [ + "solid" + ], + "label": "Box", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z" + } + }, + "free": [ + "solid" + ] + }, + "box-open": { + "search": { + "terms": [ + "archive", + "container", + "package", + "storage", + "unpack" + ] + }, + "styles": [ + "solid" + ], + "label": "Box Open", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z" + } + }, + "free": [ + "solid" + ] + }, + "box-tissue": { + "search": { + "terms": [ + "cough", + "covid-19", + "kleenex", + "mucus", + "nose", + "sneeze", + "snot" + ] + }, + "styles": [ + "solid" + ], + "label": "Tissue Box", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M383.88,287.82l64-192H338.47a70.2,70.2,0,0,1-66.59-48,70.21,70.21,0,0,0-66.6-48H63.88l64,288Zm-384,192a32,32,0,0,0,32,32h448a32,32,0,0,0,32-32v-64H-.12Zm480-256H438.94l-21.33,64h14.27a16,16,0,0,1,0,32h-352a16,16,0,1,1,0-32H95.09l-14.22-64h-49a32,32,0,0,0-32,32v128h512v-128A32,32,0,0,0,479.88,223.82Z" + } + }, + "free": [ + "solid" + ] + }, + "boxes": { + "search": { + "terms": [ + "archives", + "inventory", + "storage", + "warehouse" + ] + }, + "styles": [ + "solid" + ], + "label": "Boxes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "braille": { + "search": { + "terms": [ + "alphabet", + "blind", + "dots", + "raised", + "vision" + ] + }, + "styles": [ + "solid" + ], + "label": "Braille", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "brain": { + "search": { + "terms": [ + "cerebellum", + "gray matter", + "intellect", + "medulla oblongata", + "mind", + "noodle", + "wit" + ] + }, + "styles": [ + "solid" + ], + "label": "Brain", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z" + } + }, + "free": [ + "solid" + ] + }, + "bread-slice": { + "search": { + "terms": [ + "bake", + "bakery", + "baking", + "dough", + "flour", + "gluten", + "grain", + "sandwich", + "sourdough", + "toast", + "wheat", + "yeast" + ] + }, + "styles": [ + "solid" + ], + "label": "Bread Slice", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z" + } + }, + "free": [ + "solid" + ] + }, + "briefcase": { + "search": { + "terms": [ + "bag", + "business", + "luggage", + "office", + "work" + ] + }, + "styles": [ + "solid" + ], + "label": "Briefcase", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z" + } + }, + "free": [ + "solid" + ] + }, + "briefcase-medical": { + "search": { + "terms": [ + "doctor", + "emt", + "first aid", + "health" + ] + }, + "styles": [ + "solid" + ], + "label": "Medical Briefcase", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z" + } + }, + "free": [ + "solid" + ] + }, + "broadcast-tower": { + "search": { + "terms": [ + "airwaves", + "antenna", + "radio", + "reception", + "waves" + ] + }, + "styles": [ + "solid" + ], + "label": "Broadcast Tower", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z" + } + }, + "free": [ + "solid" + ] + }, + "broom": { + "search": { + "terms": [ + "clean", + "firebolt", + "fly", + "halloween", + "nimbus 2000", + "quidditch", + "sweep", + "witch" + ] + }, + "styles": [ + "solid" + ], + "label": "Broom", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z" + } + }, + "free": [ + "solid" + ] + }, + "brush": { + "search": { + "terms": [ + "art", + "bristles", + "color", + "handle", + "paint" + ] + }, + "styles": [ + "solid" + ], + "label": "Brush", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z" + } + }, + "free": [ + "solid" + ] + }, + "btc": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "BTC", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z" + } + }, + "free": [ + "brands" + ] + }, + "buffer": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Buffer", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z" + } + }, + "free": [ + "brands" + ] + }, + "bug": { + "search": { + "terms": [ + "beetle", + "error", + "insect", + "report" + ] + }, + "styles": [ + "solid" + ], + "label": "Bug", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z" + } + }, + "free": [ + "solid" + ] + }, + "building": { + "search": { + "terms": [ + "apartment", + "business", + "city", + "company", + "office", + "work" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Building", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "bullhorn": { + "search": { + "terms": [ + "announcement", + "broadcast", + "louder", + "megaphone", + "share" + ] + }, + "styles": [ + "solid" + ], + "label": "bullhorn", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z" + } + }, + "free": [ + "solid" + ] + }, + "bullseye": { + "search": { + "terms": [ + "archery", + "goal", + "objective", + "target" + ] + }, + "styles": [ + "solid" + ], + "label": "Bullseye", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z" + } + }, + "free": [ + "solid" + ] + }, + "burn": { + "search": { + "terms": [ + "caliente", + "energy", + "fire", + "flame", + "gas", + "heat", + "hot" + ] + }, + "styles": [ + "solid" + ], + "label": "Burn", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z" + } + }, + "free": [ + "solid" + ] + }, + "buromobelexperte": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Büromöbel-Experte GmbH & Co. KG.", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z" + } + }, + "free": [ + "brands" + ] + }, + "bus": { + "search": { + "terms": [ + "public transportation", + "transportation", + "travel", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Bus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "bus-alt": { + "search": { + "terms": [ + "mta", + "public transportation", + "transportation", + "travel", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Bus Alt", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "business-time": { + "search": { + "terms": [ + "alarm", + "briefcase", + "business socks", + "clock", + "flight of the conchords", + "reminder", + "wednesday" + ] + }, + "styles": [ + "solid" + ], + "label": "Business Time", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z" + } + }, + "free": [ + "solid" + ] + }, + "buy-n-large": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Buy n Large", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z" + } + }, + "free": [ + "brands" + ] + }, + "buysellads": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "BuySellAds", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z" + } + }, + "free": [ + "brands" + ] + }, + "calculator": { + "search": { + "terms": [ + "abacus", + "addition", + "arithmetic", + "counting", + "math", + "multiplication", + "subtraction" + ] + }, + "styles": [ + "solid" + ], + "label": "Calculator", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z" + } + }, + "free": [ + "solid" + ] + }, + "calendar": { + "search": { + "terms": [ + "calendar-o", + "date", + "event", + "schedule", + "time", + "when" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Calendar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "calendar-alt": { + "search": { + "terms": [ + "calendar", + "date", + "event", + "schedule", + "time", + "when" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Calendar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "calendar-check": { + "search": { + "terms": [ + "accept", + "agree", + "appointment", + "confirm", + "correct", + "date", + "done", + "event", + "ok", + "schedule", + "select", + "success", + "tick", + "time", + "todo", + "when" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Calendar Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "calendar-day": { + "search": { + "terms": [ + "date", + "detail", + "event", + "focus", + "schedule", + "single day", + "time", + "today", + "when" + ] + }, + "styles": [ + "solid" + ], + "label": "Calendar with Day Focus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "calendar-minus": { + "search": { + "terms": [ + "calendar", + "date", + "delete", + "event", + "negative", + "remove", + "schedule", + "time", + "when" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Calendar Minus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "calendar-plus": { + "search": { + "terms": [ + "add", + "calendar", + "create", + "date", + "event", + "new", + "positive", + "schedule", + "time", + "when" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Calendar Plus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "calendar-times": { + "search": { + "terms": [ + "archive", + "calendar", + "date", + "delete", + "event", + "remove", + "schedule", + "time", + "when", + "x" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Calendar Times", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "calendar-week": { + "search": { + "terms": [ + "date", + "detail", + "event", + "focus", + "schedule", + "single week", + "time", + "today", + "when" + ] + }, + "styles": [ + "solid" + ], + "label": "Calendar with Week Focus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "camera": { + "search": { + "terms": [ + "image", + "lens", + "photo", + "picture", + "record", + "shutter", + "video" + ] + }, + "styles": [ + "solid" + ], + "label": "camera", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z" + } + }, + "free": [ + "solid" + ] + }, + "camera-retro": { + "search": { + "terms": [ + "image", + "lens", + "photo", + "picture", + "record", + "shutter", + "video" + ] + }, + "styles": [ + "solid" + ], + "label": "Retro Camera", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "campground": { + "search": { + "terms": [ + "camping", + "fall", + "outdoors", + "teepee", + "tent", + "tipi" + ] + }, + "styles": [ + "solid" + ], + "label": "Campground", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z" + } + }, + "free": [ + "solid" + ] + }, + "canadian-maple-leaf": { + "search": { + "terms": [ + "canada", + "flag", + "flora", + "nature", + "plant" + ] + }, + "styles": [ + "brands" + ], + "label": "Canadian Maple Leaf", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z" + } + }, + "free": [ + "brands" + ] + }, + "candy-cane": { + "search": { + "terms": [ + "candy", + "christmas", + "holiday", + "mint", + "peppermint", + "striped", + "xmas" + ] + }, + "styles": [ + "solid" + ], + "label": "Candy Cane", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z" + } + }, + "free": [ + "solid" + ] + }, + "cannabis": { + "search": { + "terms": [ + "bud", + "chronic", + "drugs", + "endica", + "endo", + "ganja", + "marijuana", + "mary jane", + "pot", + "reefer", + "sativa", + "spliff", + "weed", + "whacky-tabacky" + ] + }, + "styles": [ + "solid" + ], + "label": "Cannabis", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z" + } + }, + "free": [ + "solid" + ] + }, + "capsules": { + "search": { + "terms": [ + "drugs", + "medicine", + "pills", + "prescription" + ] + }, + "styles": [ + "solid" + ], + "label": "Capsules", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z" + } + }, + "free": [ + "solid" + ] + }, + "car": { + "search": { + "terms": [ + "auto", + "automobile", + "sedan", + "transportation", + "travel", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Car", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z" + } + }, + "free": [ + "solid" + ] + }, + "car-alt": { + "search": { + "terms": [ + "auto", + "automobile", + "sedan", + "transportation", + "travel", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Car", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z" + } + }, + "free": [ + "solid" + ] + }, + "car-battery": { + "search": { + "terms": [ + "auto", + "electric", + "mechanic", + "power" + ] + }, + "styles": [ + "solid" + ], + "label": "Car Battery", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z" + } + }, + "free": [ + "solid" + ] + }, + "car-crash": { + "search": { + "terms": [ + "accident", + "auto", + "automobile", + "insurance", + "sedan", + "transportation", + "vehicle", + "wreck" + ] + }, + "styles": [ + "solid" + ], + "label": "Car Crash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z" + } + }, + "free": [ + "solid" + ] + }, + "car-side": { + "search": { + "terms": [ + "auto", + "automobile", + "sedan", + "transportation", + "travel", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Car Side", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "caravan": { + "search": { + "terms": [ + "camper", + "motor home", + "rv", + "trailer", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Caravan", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M416,208a16,16,0,1,0,16,16A16,16,0,0,0,416,208ZM624,320H576V160A160,160,0,0,0,416,0H64A64,64,0,0,0,0,64V320a64,64,0,0,0,64,64H96a96,96,0,0,0,192,0H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM192,432a48,48,0,1,1,48-48A48.05,48.05,0,0,1,192,432Zm64-240a32,32,0,0,1-32,32H96a32,32,0,0,1-32-32V128A32,32,0,0,1,96,96H224a32,32,0,0,1,32,32ZM448,320H320V128a32,32,0,0,1,32-32h64a32,32,0,0,1,32,32Z" + } + }, + "free": [ + "solid" + ] + }, + "caret-down": { + "search": { + "terms": [ + "arrow", + "dropdown", + "expand", + "menu", + "more", + "triangle" + ] + }, + "styles": [ + "solid" + ], + "label": "Caret Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z" + } + }, + "free": [ + "solid" + ] + }, + "caret-left": { + "search": { + "terms": [ + "arrow", + "back", + "previous", + "triangle" + ] + }, + "styles": [ + "solid" + ], + "label": "Caret Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "192", + "512" + ], + "path": "M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z" + } + }, + "free": [ + "solid" + ] + }, + "caret-right": { + "search": { + "terms": [ + "arrow", + "forward", + "next", + "triangle" + ] + }, + "styles": [ + "solid" + ], + "label": "Caret Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "192", + "512" + ], + "path": "M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z" + } + }, + "free": [ + "solid" + ] + }, + "caret-square-down": { + "search": { + "terms": [ + "arrow", + "caret-square-o-down", + "dropdown", + "expand", + "menu", + "more", + "triangle" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Caret Square Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "caret-square-left": { + "search": { + "terms": [ + "arrow", + "back", + "caret-square-o-left", + "previous", + "triangle" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Caret Square Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "caret-square-right": { + "search": { + "terms": [ + "arrow", + "caret-square-o-right", + "forward", + "next", + "triangle" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Caret Square Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "caret-square-up": { + "search": { + "terms": [ + "arrow", + "caret-square-o-up", + "collapse", + "triangle", + "upload" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Caret Square Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "caret-up": { + "search": { + "terms": [ + "arrow", + "collapse", + "triangle" + ] + }, + "styles": [ + "solid" + ], + "label": "Caret Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z" + } + }, + "free": [ + "solid" + ] + }, + "carrot": { + "search": { + "terms": [ + "bugs bunny", + "orange", + "vegan", + "vegetable" + ] + }, + "styles": [ + "solid" + ], + "label": "Carrot", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z" + } + }, + "free": [ + "solid" + ] + }, + "cart-arrow-down": { + "search": { + "terms": [ + "download", + "save", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "Shopping Cart Arrow Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z" + } + }, + "free": [ + "solid" + ] + }, + "cart-plus": { + "search": { + "terms": [ + "add", + "create", + "new", + "positive", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "Add to Shopping Cart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "cash-register": { + "search": { + "terms": [ + "buy", + "cha-ching", + "change", + "checkout", + "commerce", + "leaerboard", + "machine", + "pay", + "payment", + "purchase", + "store" + ] + }, + "styles": [ + "solid" + ], + "label": "Cash Register", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z" + } + }, + "free": [ + "solid" + ] + }, + "cat": { + "search": { + "terms": [ + "feline", + "halloween", + "holiday", + "kitten", + "kitty", + "meow", + "pet" + ] + }, + "styles": [ + "solid" + ], + "label": "Cat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "cc-amazon-pay": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Amazon Pay Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z" + } + }, + "free": [ + "brands" + ] + }, + "cc-amex": { + "search": { + "terms": [ + "amex" + ] + }, + "styles": [ + "brands" + ], + "label": "American Express Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M325.1 167.8c0-16.4-14.1-18.4-27.4-18.4l-39.1-.3v69.3H275v-25.1h18c18.4 0 14.5 10.3 14.8 25.1h16.6v-13.5c0-9.2-1.5-15.1-11-18.4 7.4-3 11.8-10.7 11.7-18.7zm-29.4 11.3H275v-15.3h21c5.1 0 10.7 1 10.7 7.4 0 6.6-5.3 7.9-11 7.9zM279 268.6h-52.7l-21 22.8-20.5-22.8h-66.5l-.1 69.3h65.4l21.3-23 20.4 23h32.2l.1-23.3c18.9 0 49.3 4.6 49.3-23.3 0-17.3-12.3-22.7-27.9-22.7zm-103.8 54.7h-40.6v-13.8h36.3v-14.1h-36.3v-12.5h41.7l17.9 20.2zm65.8 8.2l-25.3-28.1L241 276zm37.8-31h-21.2v-17.6h21.5c5.6 0 10.2 2.3 10.2 8.4 0 6.4-4.6 9.2-10.5 9.2zm-31.6-136.7v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5zM576 255.4h-.2zm-194.6 31.9c0-16.4-14.1-18.7-27.1-18.7h-39.4l-.1 69.3h16.6l.1-25.3h17.6c11 0 14.8 2 14.8 13.8l-.1 11.5h16.6l.1-13.8c0-8.9-1.8-15.1-11-18.4 7.7-3.1 11.8-10.8 11.9-18.4zm-29.2 11.2h-20.7v-15.6h21c5.1 0 10.7 1 10.7 7.4 0 6.9-5.4 8.2-11 8.2zm-172.8-80v-69.3h-27.6l-19.7 47-21.7-47H83.3v65.7l-28.1-65.7H30.7L1 218.5h17.9l6.4-15.3h34.5l6.4 15.3H100v-54.2l24 54.2h14.6l24-54.2v54.2zM31.2 188.8l11.2-27.6 11.5 27.6zm477.4 158.9v-4.5c-10.8 5.6-3.9 4.5-156.7 4.5 0-25.2.1-23.9 0-25.2-1.7-.1-3.2-.1-9.4-.1 0 17.9-.1 6.8-.1 25.3h-39.6c0-12.1.1-15.3.1-29.2-10 6-22.8 6.4-34.3 6.2 0 14.7-.1 8.3-.1 23h-48.9c-5.1-5.7-2.7-3.1-15.4-17.4-3.2 3.5-12.8 13.9-16.1 17.4h-82v-92.3h83.1c5 5.6 2.8 3.1 15.5 17.2 3.2-3.5 12.2-13.4 15.7-17.2h58c9.8 0 18 1.9 24.3 5.6v-5.6c54.3 0 64.3-1.4 75.7 5.1v-5.1h78.2v5.2c11.4-6.9 19.6-5.2 64.9-5.2v5c10.3-5.9 16.6-5.2 54.3-5V80c0-26.5-21.5-48-48-48h-480c-26.5 0-48 21.5-48 48v109.8c9.4-21.9 19.7-46 23.1-53.9h39.7c4.3 10.1 1.6 3.7 9 21.1v-21.1h46c2.9 6.2 11.1 24 13.9 30 5.8-13.6 10.1-23.9 12.6-30h103c0-.1 11.5 0 11.6 0 43.7.2 53.6-.8 64.4 5.3v-5.3H363v9.3c7.6-6.1 17.9-9.3 30.7-9.3h27.6c0 .5 1.9.3 2.3.3H456c4.2 9.8 2.6 6 8.8 20.6v-20.6h43.3c4.9 8-1-1.8 11.2 18.4v-18.4h39.9v92h-41.6c-5.4-9-1.4-2.2-13.2-21.9v21.9h-52.8c-6.4-14.8-.1-.3-6.6-15.3h-19c-4.2 10-2.2 5.2-6.4 15.3h-26.8c-12.3 0-22.3-3-29.7-8.9v8.9h-66.5c-.3-13.9-.1-24.8-.1-24.8-1.8-.3-3.4-.2-9.8-.2v25.1H151.2v-11.4c-2.5 5.6-2.7 5.9-5.1 11.4h-29.5c-4-8.9-2.9-6.4-5.1-11.4v11.4H58.6c-4.2-10.1-2.2-5.3-6.4-15.3H33c-4.2 10-2.2 5.2-6.4 15.3H0V432c0 26.5 21.5 48 48 48h480.1c26.5 0 48-21.5 48-48v-90.4c-12.7 8.3-32.7 6.1-67.5 6.1zm36.3-64.5H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-57 39.8h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-42.2-40.1v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5zm-56.3-108.1c-.3.2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9.2.1 1.1.5 3.4.5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm20.4-10.5h-.1zm-16.2-15.2c-23.5 0-34 12-34 35.3 0 22.2 10.2 34 33 34h19.2l6.4-15.3h34.3l6.6 15.3h33.7v-51.9l31.2 51.9h23.6v-69h-16.9v48.1l-29.1-48.1h-25.3v65.4l-27.9-65.4h-24.8l-23.5 54.5h-7.4c-13.3 0-16.1-8.1-16.1-19.9 0-23.8 15.7-20 33.1-19.7v-15.2zm42.1 12.1l11.2 27.6h-22.8zm-101.1-12v69.3h16.9v-69.3z" + } + }, + "free": [ + "brands" + ] + }, + "cc-apple-pay": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Apple Pay Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z" + } + }, + "free": [ + "brands" + ] + }, + "cc-diners-club": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Diner's Club Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z" + } + }, + "free": [ + "brands" + ] + }, + "cc-discover": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Discover Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z" + } + }, + "free": [ + "brands" + ] + }, + "cc-jcb": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "JCB Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z" + } + }, + "free": [ + "brands" + ] + }, + "cc-mastercard": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "MasterCard Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z" + } + }, + "free": [ + "brands" + ] + }, + "cc-paypal": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Paypal Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z" + } + }, + "free": [ + "brands" + ] + }, + "cc-stripe": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Stripe Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z" + } + }, + "free": [ + "brands" + ] + }, + "cc-visa": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Visa Credit Card", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z" + } + }, + "free": [ + "brands" + ] + }, + "centercode": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Centercode", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z" + } + }, + "free": [ + "brands" + ] + }, + "centos": { + "search": { + "terms": [ + "linux", + "operating system", + "os" + ] + }, + "styles": [ + "brands" + ], + "label": "Centos", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z" + } + }, + "free": [ + "brands" + ] + }, + "certificate": { + "search": { + "terms": [ + "badge", + "star", + "verified" + ] + }, + "styles": [ + "solid" + ], + "label": "certificate", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z" + } + }, + "free": [ + "solid" + ] + }, + "chair": { + "search": { + "terms": [ + "furniture", + "seat", + "sit" + ] + }, + "styles": [ + "solid" + ], + "label": "Chair", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z" + } + }, + "free": [ + "solid" + ] + }, + "chalkboard": { + "search": { + "terms": [ + "blackboard", + "learning", + "school", + "teaching", + "whiteboard", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "Chalkboard", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "chalkboard-teacher": { + "search": { + "terms": [ + "blackboard", + "instructor", + "learning", + "professor", + "school", + "whiteboard", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "Chalkboard Teacher", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z" + } + }, + "free": [ + "solid" + ] + }, + "charging-station": { + "search": { + "terms": [ + "electric", + "ev", + "tesla", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Charging Station", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z" + } + }, + "free": [ + "solid" + ] + }, + "chart-area": { + "search": { + "terms": [ + "analytics", + "area", + "chart", + "graph" + ] + }, + "styles": [ + "solid" + ], + "label": "Area Chart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z" + } + }, + "free": [ + "solid" + ] + }, + "chart-bar": { + "search": { + "terms": [ + "analytics", + "bar", + "chart", + "graph" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Bar Chart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "chart-line": { + "search": { + "terms": [ + "activity", + "analytics", + "chart", + "dashboard", + "gain", + "graph", + "increase", + "line" + ] + }, + "styles": [ + "solid" + ], + "label": "Line Chart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z" + } + }, + "free": [ + "solid" + ] + }, + "chart-pie": { + "search": { + "terms": [ + "analytics", + "chart", + "diagram", + "graph", + "pie" + ] + }, + "styles": [ + "solid" + ], + "label": "Pie Chart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "544", + "512" + ], + "path": "M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z" + } + }, + "free": [ + "solid" + ] + }, + "check": { + "search": { + "terms": [ + "accept", + "agree", + "checkmark", + "confirm", + "correct", + "done", + "notice", + "notification", + "notify", + "ok", + "select", + "success", + "tick", + "todo", + "yes" + ] + }, + "styles": [ + "solid" + ], + "label": "Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z" + } + }, + "free": [ + "solid" + ] + }, + "check-circle": { + "search": { + "terms": [ + "accept", + "agree", + "confirm", + "correct", + "done", + "ok", + "select", + "success", + "tick", + "todo", + "yes" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Check Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "check-double": { + "search": { + "terms": [ + "accept", + "agree", + "checkmark", + "confirm", + "correct", + "done", + "notice", + "notification", + "notify", + "ok", + "select", + "success", + "tick", + "todo" + ] + }, + "styles": [ + "solid" + ], + "label": "Double Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z" + } + }, + "free": [ + "solid" + ] + }, + "check-square": { + "search": { + "terms": [ + "accept", + "agree", + "checkmark", + "confirm", + "correct", + "done", + "ok", + "select", + "success", + "tick", + "todo", + "yes" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Check Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "cheese": { + "search": { + "terms": [ + "cheddar", + "curd", + "gouda", + "melt", + "parmesan", + "sandwich", + "swiss", + "wedge" + ] + }, + "styles": [ + "solid" + ], + "label": "Cheese", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z" + } + }, + "free": [ + "solid" + ] + }, + "chess": { + "search": { + "terms": [ + "board", + "castle", + "checkmate", + "game", + "king", + "rook", + "strategy", + "tournament" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z" + } + }, + "free": [ + "solid" + ] + }, + "chess-bishop": { + "search": { + "terms": [ + "board", + "checkmate", + "game", + "strategy" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess Bishop", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "chess-board": { + "search": { + "terms": [ + "board", + "checkmate", + "game", + "strategy" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess Board", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z" + } + }, + "free": [ + "solid" + ] + }, + "chess-king": { + "search": { + "terms": [ + "board", + "checkmate", + "game", + "strategy" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess King", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z" + } + }, + "free": [ + "solid" + ] + }, + "chess-knight": { + "search": { + "terms": [ + "board", + "checkmate", + "game", + "horse", + "strategy" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess Knight", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "chess-pawn": { + "search": { + "terms": [ + "board", + "checkmate", + "game", + "strategy" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess Pawn", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "chess-queen": { + "search": { + "terms": [ + "board", + "checkmate", + "game", + "strategy" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess Queen", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z" + } + }, + "free": [ + "solid" + ] + }, + "chess-rook": { + "search": { + "terms": [ + "board", + "castle", + "checkmate", + "game", + "strategy" + ] + }, + "styles": [ + "solid" + ], + "label": "Chess Rook", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-circle-down": { + "search": { + "terms": [ + "arrow", + "download", + "dropdown", + "menu", + "more" + ] + }, + "styles": [ + "solid" + ], + "label": "Chevron Circle Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-circle-left": { + "search": { + "terms": [ + "arrow", + "back", + "previous" + ] + }, + "styles": [ + "solid" + ], + "label": "Chevron Circle Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-circle-right": { + "search": { + "terms": [ + "arrow", + "forward", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "Chevron Circle Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-circle-up": { + "search": { + "terms": [ + "arrow", + "collapse", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "Chevron Circle Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-down": { + "search": { + "terms": [ + "arrow", + "download", + "expand" + ] + }, + "styles": [ + "solid" + ], + "label": "chevron-down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-left": { + "search": { + "terms": [ + "arrow", + "back", + "bracket", + "previous" + ] + }, + "styles": [ + "solid" + ], + "label": "chevron-left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-right": { + "search": { + "terms": [ + "arrow", + "bracket", + "forward", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "chevron-right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z" + } + }, + "free": [ + "solid" + ] + }, + "chevron-up": { + "search": { + "terms": [ + "arrow", + "collapse", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "chevron-up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z" + } + }, + "free": [ + "solid" + ] + }, + "child": { + "search": { + "terms": [ + "boy", + "girl", + "kid", + "toddler", + "young" + ] + }, + "styles": [ + "solid" + ], + "label": "Child", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z" + } + }, + "free": [ + "solid" + ] + }, + "chrome": { + "search": { + "terms": [ + "browser" + ] + }, + "styles": [ + "brands" + ], + "label": "Chrome", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z" + } + }, + "free": [ + "brands" + ] + }, + "chromecast": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Chromecast", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M447.8,64H64c-23.6,0-42.7,19.1-42.7,42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6,0,42.7-19.1,42.7-42.7V106.7 C490.7,83.1,471.4,64,447.8,64z M21.3,383.6L21.3,383.6l0,63.9h63.9C85.2,412.2,56.6,383.6,21.3,383.6L21.3,383.6z M21.3,298.6V341 c58.9,0,106.6,48.1,106.6,107h42.7C170.7,365.6,103.7,298.7,21.3,298.6z M213.4,448h42.7c-0.5-129.5-105.3-234.3-234.8-234.6l0,42.4 C127.3,255.6,213.3,342,213.4,448z" + } + }, + "free": [ + "brands" + ] + }, + "church": { + "search": { + "terms": [ + "building", + "cathedral", + "chapel", + "community", + "religion" + ] + }, + "styles": [ + "solid" + ], + "label": "Church", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z" + } + }, + "free": [ + "solid" + ] + }, + "circle": { + "search": { + "terms": [ + "circle-thin", + "diameter", + "dot", + "ellipse", + "notification", + "round" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "circle-notch": { + "search": { + "terms": [ + "circle-o-notch", + "diameter", + "dot", + "ellipse", + "round", + "spinner" + ] + }, + "styles": [ + "solid" + ], + "label": "Circle Notched", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z" + } + }, + "free": [ + "solid" + ] + }, + "city": { + "search": { + "terms": [ + "buildings", + "busy", + "skyscrapers", + "urban", + "windows" + ] + }, + "styles": [ + "solid" + ], + "label": "City", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z" + } + }, + "free": [ + "solid" + ] + }, + "clinic-medical": { + "search": { + "terms": [ + "covid-19", + "doctor", + "general practitioner", + "hospital", + "infirmary", + "medicine", + "office", + "outpatient" + ] + }, + "styles": [ + "solid" + ], + "label": "Medical Clinic", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z" + } + }, + "free": [ + "solid" + ] + }, + "clipboard": { + "search": { + "terms": [ + "copy", + "notes", + "paste", + "record" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Clipboard", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm144 418c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h42v36c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-36h42c3.3 0 6 2.7 6 6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "clipboard-check": { + "search": { + "terms": [ + "accept", + "agree", + "confirm", + "done", + "ok", + "select", + "success", + "tick", + "todo", + "yes" + ] + }, + "styles": [ + "solid" + ], + "label": "Clipboard with Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z" + } + }, + "free": [ + "solid" + ] + }, + "clipboard-list": { + "search": { + "terms": [ + "checklist", + "completed", + "done", + "finished", + "intinerary", + "ol", + "schedule", + "tick", + "todo", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "Clipboard List", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z" + } + }, + "free": [ + "solid" + ] + }, + "clock": { + "search": { + "terms": [ + "date", + "late", + "schedule", + "time", + "timer", + "timestamp", + "watch" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Clock", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm92.49,313h0l-20,25a16,16,0,0,1-22.49,2.5h0l-67-49.72a40,40,0,0,1-15-31.23V112a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V256l58,42.5A16,16,0,0,1,348.49,321Z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "clone": { + "search": { + "terms": [ + "arrange", + "copy", + "duplicate", + "paste" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Clone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "closed-captioning": { + "search": { + "terms": [ + "cc", + "deaf", + "hearing", + "subtitle", + "subtitling", + "text", + "video" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Closed Captioning", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "cloud": { + "search": { + "terms": [ + "atmosphere", + "fog", + "overcast", + "save", + "upload", + "weather" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-download-alt": { + "search": { + "terms": [ + "download", + "export", + "save" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Cloud Download", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-meatball": { + "search": { + "terms": [ + "FLDSMDFR", + "food", + "spaghetti", + "storm" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud with (a chance of) Meatball", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-moon": { + "search": { + "terms": [ + "crescent", + "evening", + "lunar", + "night", + "partly cloudy", + "sky" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud with Moon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-moon-rain": { + "search": { + "terms": [ + "crescent", + "evening", + "lunar", + "night", + "partly cloudy", + "precipitation", + "rain", + "sky", + "storm" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud with Moon and Rain", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-rain": { + "search": { + "terms": [ + "precipitation", + "rain", + "sky", + "storm" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud with Rain", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-showers-heavy": { + "search": { + "terms": [ + "precipitation", + "rain", + "sky", + "storm" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud with Heavy Showers", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-sun": { + "search": { + "terms": [ + "clear", + "day", + "daytime", + "fall", + "outdoors", + "overcast", + "partly cloudy" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud with Sun", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-sun-rain": { + "search": { + "terms": [ + "day", + "overcast", + "precipitation", + "storm", + "summer", + "sunshower" + ] + }, + "styles": [ + "solid" + ], + "label": "Cloud with Sun and Rain", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z" + } + }, + "free": [ + "solid" + ] + }, + "cloud-upload-alt": { + "search": { + "terms": [ + "cloud-upload", + "import", + "save", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Cloud Upload", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z" + } + }, + "free": [ + "solid" + ] + }, + "cloudscale": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "cloudscale.ch", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z" + } + }, + "free": [ + "brands" + ] + }, + "cloudsmith": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Cloudsmith", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "332", + "512" + ], + "path": "M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z" + } + }, + "free": [ + "brands" + ] + }, + "cloudversify": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "cloudversify", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "616", + "512" + ], + "path": "M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z" + } + }, + "free": [ + "brands" + ] + }, + "cocktail": { + "search": { + "terms": [ + "alcohol", + "beverage", + "drink", + "gin", + "glass", + "margarita", + "martini", + "vodka" + ] + }, + "styles": [ + "solid" + ], + "label": "Cocktail", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z" + } + }, + "free": [ + "solid" + ] + }, + "code": { + "search": { + "terms": [ + "brackets", + "code", + "development", + "html" + ] + }, + "styles": [ + "solid" + ], + "label": "Code", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z" + } + }, + "free": [ + "solid" + ] + }, + "code-branch": { + "search": { + "terms": [ + "branch", + "code-fork", + "fork", + "git", + "github", + "rebase", + "svn", + "vcs", + "version" + ] + }, + "styles": [ + "solid" + ], + "label": "Code Branch", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z" + } + }, + "free": [ + "solid" + ] + }, + "codepen": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Codepen", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z" + } + }, + "free": [ + "brands" + ] + }, + "codiepie": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Codie Pie", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "472", + "512" + ], + "path": "M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z" + } + }, + "free": [ + "brands" + ] + }, + "coffee": { + "search": { + "terms": [ + "beverage", + "breakfast", + "cafe", + "drink", + "fall", + "morning", + "mug", + "seasonal", + "tea" + ] + }, + "styles": [ + "solid" + ], + "label": "Coffee", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z" + } + }, + "free": [ + "solid" + ] + }, + "cog": { + "search": { + "terms": [ + "gear", + "mechanical", + "settings", + "sprocket", + "wheel" + ] + }, + "styles": [ + "solid" + ], + "label": "cog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "cogs": { + "search": { + "terms": [ + "gears", + "mechanical", + "settings", + "sprocket", + "wheel" + ] + }, + "styles": [ + "solid" + ], + "label": "cogs", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z" + } + }, + "free": [ + "solid" + ] + }, + "coins": { + "search": { + "terms": [ + "currency", + "dime", + "financial", + "gold", + "money", + "penny" + ] + }, + "styles": [ + "solid" + ], + "label": "Coins", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z" + } + }, + "free": [ + "solid" + ] + }, + "columns": { + "search": { + "terms": [ + "browser", + "dashboard", + "organize", + "panes", + "split" + ] + }, + "styles": [ + "solid" + ], + "label": "Columns", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z" + } + }, + "free": [ + "solid" + ] + }, + "comment": { + "search": { + "terms": [ + "bubble", + "chat", + "commenting", + "conversation", + "feedback", + "message", + "note", + "notification", + "sms", + "speech", + "texting" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "comment", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "comment-alt": { + "search": { + "terms": [ + "bubble", + "chat", + "commenting", + "conversation", + "feedback", + "message", + "note", + "notification", + "sms", + "speech", + "texting" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Comment", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "comment-dollar": { + "search": { + "terms": [ + "bubble", + "chat", + "commenting", + "conversation", + "feedback", + "message", + "money", + "note", + "notification", + "pay", + "sms", + "speech", + "spend", + "texting", + "transfer" + ] + }, + "styles": [ + "solid" + ], + "label": "Comment Dollar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z" + } + }, + "free": [ + "solid" + ] + }, + "comment-dots": { + "search": { + "terms": [ + "bubble", + "chat", + "commenting", + "conversation", + "feedback", + "message", + "more", + "note", + "notification", + "reply", + "sms", + "speech", + "texting" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Comment Dots", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "comment-medical": { + "search": { + "terms": [ + "advice", + "bubble", + "chat", + "commenting", + "conversation", + "diagnose", + "feedback", + "message", + "note", + "notification", + "prescription", + "sms", + "speech", + "texting" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Medical Chat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z" + } + }, + "free": [ + "solid" + ] + }, + "comment-slash": { + "search": { + "terms": [ + "bubble", + "cancel", + "chat", + "commenting", + "conversation", + "feedback", + "message", + "mute", + "note", + "notification", + "quiet", + "sms", + "speech", + "texting" + ] + }, + "styles": [ + "solid" + ], + "label": "Comment Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z" + } + }, + "free": [ + "solid" + ] + }, + "comments": { + "search": { + "terms": [ + "bubble", + "chat", + "commenting", + "conversation", + "feedback", + "message", + "note", + "notification", + "sms", + "speech", + "texting" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "comments", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "comments-dollar": { + "search": { + "terms": [ + "bubble", + "chat", + "commenting", + "conversation", + "feedback", + "message", + "money", + "note", + "notification", + "pay", + "sms", + "speech", + "spend", + "texting", + "transfer" + ] + }, + "styles": [ + "solid" + ], + "label": "Comments Dollar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z" + } + }, + "free": [ + "solid" + ] + }, + "compact-disc": { + "search": { + "terms": [ + "album", + "bluray", + "cd", + "disc", + "dvd", + "media", + "movie", + "music", + "record", + "video", + "vinyl" + ] + }, + "styles": [ + "solid" + ], + "label": "Compact Disc", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "compass": { + "search": { + "terms": [ + "directions", + "directory", + "location", + "menu", + "navigation", + "safari", + "travel" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Compass", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "compress": { + "search": { + "terms": [ + "collapse", + "fullscreen", + "minimize", + "move", + "resize", + "shrink", + "smaller" + ] + }, + "styles": [ + "solid" + ], + "label": "Compress", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z" + } + }, + "free": [ + "solid" + ] + }, + "compress-alt": { + "search": { + "terms": [ + "collapse", + "fullscreen", + "minimize", + "move", + "resize", + "shrink", + "smaller" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Compress", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z" + } + }, + "free": [ + "solid" + ] + }, + "compress-arrows-alt": { + "search": { + "terms": [ + "collapse", + "fullscreen", + "minimize", + "move", + "resize", + "shrink", + "smaller" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Compress Arrows", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z" + } + }, + "free": [ + "solid" + ] + }, + "concierge-bell": { + "search": { + "terms": [ + "attention", + "hotel", + "receptionist", + "service", + "support" + ] + }, + "styles": [ + "solid" + ], + "label": "Concierge Bell", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "confluence": { + "search": { + "terms": [ + "atlassian" + ] + }, + "styles": [ + "brands" + ], + "label": "Confluence", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z" + } + }, + "free": [ + "brands" + ] + }, + "connectdevelop": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Connect Develop", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z" + } + }, + "free": [ + "brands" + ] + }, + "contao": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Contao", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z" + } + }, + "free": [ + "brands" + ] + }, + "cookie": { + "search": { + "terms": [ + "baked good", + "chips", + "chocolate", + "eat", + "snack", + "sweet", + "treat" + ] + }, + "styles": [ + "solid" + ], + "label": "Cookie", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "cookie-bite": { + "search": { + "terms": [ + "baked good", + "bitten", + "chips", + "chocolate", + "eat", + "snack", + "sweet", + "treat" + ] + }, + "styles": [ + "solid" + ], + "label": "Cookie Bite", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "copy": { + "search": { + "terms": [ + "clone", + "duplicate", + "file", + "files-o", + "paper", + "paste" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Copy", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "copyright": { + "search": { + "terms": [ + "brand", + "mark", + "register", + "trademark" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Copyright", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "cotton-bureau": { + "search": { + "terms": [ + "clothing", + "t-shirts", + "tshirts" + ] + }, + "styles": [ + "brands" + ], + "label": "Cotton Bureau", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z" + } + }, + "free": [ + "brands" + ] + }, + "couch": { + "search": { + "terms": [ + "chair", + "cushion", + "furniture", + "relax", + "sofa" + ] + }, + "styles": [ + "solid" + ], + "label": "Couch", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z" + } + }, + "free": [ + "solid" + ] + }, + "cpanel": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "cPanel", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-by": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Attribution", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-nc": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Noncommercial", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-nc-eu": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Noncommercial (Euro Sign)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-nc-jp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Noncommercial (Yen Sign)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-nd": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons No Derivative Works", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-pd": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Public Domain", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-pd-alt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Alternate Creative Commons Public Domain", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-remix": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Remix", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-sa": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Share Alike", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-sampling": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Sampling", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-sampling-plus": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Sampling +", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-share": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons Share", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z" + } + }, + "free": [ + "brands" + ] + }, + "creative-commons-zero": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Creative Commons CC0", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z" + } + }, + "free": [ + "brands" + ] + }, + "credit-card": { + "search": { + "terms": [ + "buy", + "checkout", + "credit-card-alt", + "debit", + "money", + "payment", + "purchase" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Credit Card", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "critical-role": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "game", + "gaming", + "tabletop" + ] + }, + "styles": [ + "brands" + ], + "label": "Critical Role", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z" + } + }, + "free": [ + "brands" + ] + }, + "crop": { + "search": { + "terms": [ + "design", + "frame", + "mask", + "resize", + "shrink" + ] + }, + "styles": [ + "solid" + ], + "label": "crop", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "crop-alt": { + "search": { + "terms": [ + "design", + "frame", + "mask", + "resize", + "shrink" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Crop", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z" + } + }, + "free": [ + "solid" + ] + }, + "cross": { + "search": { + "terms": [ + "catholicism", + "christianity", + "church", + "jesus" + ] + }, + "styles": [ + "solid" + ], + "label": "Cross", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "crosshairs": { + "search": { + "terms": [ + "aim", + "bullseye", + "gpd", + "picker", + "position" + ] + }, + "styles": [ + "solid" + ], + "label": "Crosshairs", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z" + } + }, + "free": [ + "solid" + ] + }, + "crow": { + "search": { + "terms": [ + "bird", + "bullfrog", + "fauna", + "halloween", + "holiday", + "toad" + ] + }, + "styles": [ + "solid" + ], + "label": "Crow", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "crown": { + "search": { + "terms": [ + "award", + "favorite", + "king", + "queen", + "royal", + "tiara" + ] + }, + "styles": [ + "solid" + ], + "label": "Crown", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "crutch": { + "search": { + "terms": [ + "cane", + "injury", + "mobility", + "wheelchair" + ] + }, + "styles": [ + "solid" + ], + "label": "Crutch", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z" + } + }, + "free": [ + "solid" + ] + }, + "css3": { + "search": { + "terms": [ + "code" + ] + }, + "styles": [ + "brands" + ], + "label": "CSS 3 Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z" + } + }, + "free": [ + "brands" + ] + }, + "css3-alt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Alternate CSS3 Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z" + } + }, + "free": [ + "brands" + ] + }, + "cube": { + "search": { + "terms": [ + "3d", + "block", + "dice", + "package", + "square", + "tesseract" + ] + }, + "styles": [ + "solid" + ], + "label": "Cube", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z" + } + }, + "free": [ + "solid" + ] + }, + "cubes": { + "search": { + "terms": [ + "3d", + "block", + "dice", + "package", + "pyramid", + "square", + "stack", + "tesseract" + ] + }, + "styles": [ + "solid" + ], + "label": "Cubes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z" + } + }, + "free": [ + "solid" + ] + }, + "cut": { + "search": { + "terms": [ + "clip", + "scissors", + "snip" + ] + }, + "styles": [ + "solid" + ], + "label": "Cut", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "cuttlefish": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Cuttlefish", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "440", + "512" + ], + "path": "M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z" + } + }, + "free": [ + "brands" + ] + }, + "d-and-d": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Dungeons & Dragons", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z" + } + }, + "free": [ + "brands" + ] + }, + "d-and-d-beyond": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "gaming", + "tabletop" + ] + }, + "styles": [ + "brands" + ], + "label": "D&D Beyond", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z" + } + }, + "free": [ + "brands" + ] + }, + "dailymotion": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "dailymotion", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z" + } + }, + "free": [ + "brands" + ] + }, + "dashcube": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "DashCube", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z" + } + }, + "free": [ + "brands" + ] + }, + "database": { + "search": { + "terms": [ + "computer", + "development", + "directory", + "memory", + "storage" + ] + }, + "styles": [ + "solid" + ], + "label": "Database", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z" + } + }, + "free": [ + "solid" + ] + }, + "deaf": { + "search": { + "terms": [ + "ear", + "hearing", + "sign language" + ] + }, + "styles": [ + "solid" + ], + "label": "Deaf", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z" + } + }, + "free": [ + "solid" + ] + }, + "deezer": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Deezer", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M451.46,244.71H576V172H451.46Zm0-173.89v72.67H576V70.82Zm0,275.06H576V273.2H451.46ZM0,447.09H124.54V374.42H0Zm150.47,0H275V374.42H150.47Zm150.52,0H425.53V374.42H301Zm150.47,0H576V374.42H451.46ZM301,345.88H425.53V273.2H301Zm-150.52,0H275V273.2H150.47Zm0-101.17H275V172H150.47Z" + } + }, + "free": [ + "brands" + ] + }, + "delicious": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Delicious", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z" + } + }, + "free": [ + "brands" + ] + }, + "democrat": { + "search": { + "terms": [ + "american", + "democratic party", + "donkey", + "election", + "left", + "left-wing", + "liberal", + "politics", + "usa" + ] + }, + "styles": [ + "solid" + ], + "label": "Democrat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z" + } + }, + "free": [ + "solid" + ] + }, + "deploydog": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "deploy.dog", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z" + } + }, + "free": [ + "brands" + ] + }, + "deskpro": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Deskpro", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z" + } + }, + "free": [ + "brands" + ] + }, + "desktop": { + "search": { + "terms": [ + "computer", + "cpu", + "demo", + "desktop", + "device", + "imac", + "machine", + "monitor", + "pc", + "screen" + ] + }, + "styles": [ + "solid" + ], + "label": "Desktop", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z" + } + }, + "free": [ + "solid" + ] + }, + "dev": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "DEV", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z" + } + }, + "free": [ + "brands" + ] + }, + "deviantart": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "deviantART", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z" + } + }, + "free": [ + "brands" + ] + }, + "dharmachakra": { + "search": { + "terms": [ + "buddhism", + "buddhist", + "wheel of dharma" + ] + }, + "styles": [ + "solid" + ], + "label": "Dharmachakra", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z" + } + }, + "free": [ + "solid" + ] + }, + "dhl": { + "search": { + "terms": [ + "Dalsey", + "Hillblom and Lynn", + "german", + "package", + "shipping" + ] + }, + "styles": [ + "brands" + ], + "label": "DHL", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z" + } + }, + "free": [ + "brands" + ] + }, + "diagnoses": { + "search": { + "terms": [ + "analyze", + "detect", + "diagnosis", + "examine", + "medicine" + ] + }, + "styles": [ + "solid" + ], + "label": "Diagnoses", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "diaspora": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Diaspora", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z" + } + }, + "free": [ + "brands" + ] + }, + "dice": { + "search": { + "terms": [ + "chance", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "dice-d20": { + "search": { + "terms": [ + "Dungeons & Dragons", + "chance", + "d&d", + "dnd", + "fantasy", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice D20", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z" + } + }, + "free": [ + "solid" + ] + }, + "dice-d6": { + "search": { + "terms": [ + "Dungeons & Dragons", + "chance", + "d&d", + "dnd", + "fantasy", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice D6", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z" + } + }, + "free": [ + "solid" + ] + }, + "dice-five": { + "search": { + "terms": [ + "chance", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice Five", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "dice-four": { + "search": { + "terms": [ + "chance", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice Four", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "dice-one": { + "search": { + "terms": [ + "chance", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice One", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "dice-six": { + "search": { + "terms": [ + "chance", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice Six", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "dice-three": { + "search": { + "terms": [ + "chance", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice Three", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "dice-two": { + "search": { + "terms": [ + "chance", + "gambling", + "game", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Dice Two", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "digg": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Digg Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z" + } + }, + "free": [ + "brands" + ] + }, + "digital-ocean": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Digital Ocean", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z" + } + }, + "free": [ + "brands" + ] + }, + "digital-tachograph": { + "search": { + "terms": [ + "data", + "distance", + "speed", + "tachometer" + ] + }, + "styles": [ + "solid" + ], + "label": "Digital Tachograph", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z" + } + }, + "free": [ + "solid" + ] + }, + "directions": { + "search": { + "terms": [ + "map", + "navigation", + "sign", + "turn" + ] + }, + "styles": [ + "solid" + ], + "label": "Directions", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z" + } + }, + "free": [ + "solid" + ] + }, + "discord": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Discord", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z" + } + }, + "free": [ + "brands" + ] + }, + "discourse": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Discourse", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z" + } + }, + "free": [ + "brands" + ] + }, + "disease": { + "search": { + "terms": [ + "bacteria", + "cancer", + "covid-19", + "illness", + "infection", + "sickness", + "virus" + ] + }, + "styles": [ + "solid" + ], + "label": "Disease", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M472.29 195.9l-67.06-23c-19.28-6.6-33.54-20.92-38.14-38.31l-16-60.45c-11.58-43.77-76.57-57.13-110-22.62L195 99.24c-13.26 13.71-33.54 20.93-54.2 19.31l-71.9-5.62c-52-4.07-86.93 44.89-59 82.84l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24l-28.43 57C4 396.67 47.46 440.29 98.11 429.23l70-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101 7.57 104.45-37.22l4.7-61.86c1.35-17.8 12.8-33.87 30.63-43l62-31.74c44.84-22.96 39.55-80.17-8.99-96.79zM160 256a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm128 96a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm16-128a16 16 0 1 1 16-16 16 16 0 0 1-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "divide": { + "search": { + "terms": [ + "arithmetic", + "calculus", + "division", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Divide", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "dizzy": { + "search": { + "terms": [ + "dazed", + "dead", + "disapprove", + "emoticon", + "face" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Dizzy Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "dna": { + "search": { + "terms": [ + "double helix", + "genetic", + "helix", + "molecule", + "protein" + ] + }, + "styles": [ + "solid" + ], + "label": "DNA", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z" + } + }, + "free": [ + "solid" + ] + }, + "dochub": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "DocHub", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "416", + "512" + ], + "path": "M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z" + } + }, + "free": [ + "brands" + ] + }, + "docker": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Docker", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z" + } + }, + "free": [ + "brands" + ] + }, + "dog": { + "search": { + "terms": [ + "animal", + "canine", + "fauna", + "mammal", + "pet", + "pooch", + "puppy", + "woof" + ] + }, + "styles": [ + "solid" + ], + "label": "Dog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M298.06,224,448,277.55V496a16,16,0,0,1-16,16H368a16,16,0,0,1-16-16V384H192V496a16,16,0,0,1-16,16H112a16,16,0,0,1-16-16V282.09C58.84,268.84,32,233.66,32,192a32,32,0,0,1,64,0,32.06,32.06,0,0,0,32,32ZM544,112v32a64,64,0,0,1-64,64H448v35.58L320,197.87V48c0-14.25,17.22-21.39,27.31-11.31L374.59,64h53.63c10.91,0,23.75,7.92,28.62,17.69L464,96h64A16,16,0,0,1,544,112Zm-112,0a16,16,0,1,0-16,16A16,16,0,0,0,432,112Z" + } + }, + "free": [ + "solid" + ] + }, + "dollar-sign": { + "search": { + "terms": [ + "$", + "cost", + "dollar-sign", + "money", + "price", + "usd" + ] + }, + "styles": [ + "solid" + ], + "label": "Dollar Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z" + } + }, + "free": [ + "solid" + ] + }, + "dolly": { + "search": { + "terms": [ + "carry", + "shipping", + "transport" + ] + }, + "styles": [ + "solid" + ], + "label": "Dolly", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "dolly-flatbed": { + "search": { + "terms": [ + "carry", + "inventory", + "shipping", + "transport" + ] + }, + "styles": [ + "solid" + ], + "label": "Dolly Flatbed", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "donate": { + "search": { + "terms": [ + "contribute", + "generosity", + "gift", + "give" + ] + }, + "styles": [ + "solid" + ], + "label": "Donate", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "door-closed": { + "search": { + "terms": [ + "enter", + "exit", + "locked" + ] + }, + "styles": [ + "solid" + ], + "label": "Door Closed", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "door-open": { + "search": { + "terms": [ + "enter", + "exit", + "welcome" + ] + }, + "styles": [ + "solid" + ], + "label": "Door Open", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z" + } + }, + "free": [ + "solid" + ] + }, + "dot-circle": { + "search": { + "terms": [ + "bullseye", + "notification", + "target" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Dot Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "dove": { + "search": { + "terms": [ + "bird", + "fauna", + "flying", + "peace", + "war" + ] + }, + "styles": [ + "solid" + ], + "label": "Dove", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "download": { + "search": { + "terms": [ + "export", + "hard drive", + "save", + "transfer" + ] + }, + "styles": [ + "solid" + ], + "label": "Download", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z" + } + }, + "free": [ + "solid" + ] + }, + "draft2digital": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Draft2digital", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z" + } + }, + "free": [ + "brands" + ] + }, + "drafting-compass": { + "search": { + "terms": [ + "design", + "map", + "mechanical drawing", + "plot", + "plotting" + ] + }, + "styles": [ + "solid" + ], + "label": "Drafting Compass", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z" + } + }, + "free": [ + "solid" + ] + }, + "dragon": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "fire", + "lizard", + "serpent" + ] + }, + "styles": [ + "solid" + ], + "label": "Dragon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z" + } + }, + "free": [ + "solid" + ] + }, + "draw-polygon": { + "search": { + "terms": [ + "anchors", + "lines", + "object", + "render", + "shape" + ] + }, + "styles": [ + "solid" + ], + "label": "Draw Polygon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "dribbble": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Dribbble", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z" + } + }, + "free": [ + "brands" + ] + }, + "dribbble-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Dribbble Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z" + } + }, + "free": [ + "brands" + ] + }, + "dropbox": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Dropbox", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "528", + "512" + ], + "path": "M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z" + } + }, + "free": [ + "brands" + ] + }, + "drum": { + "search": { + "terms": [ + "instrument", + "music", + "percussion", + "snare", + "sound" + ] + }, + "styles": [ + "solid" + ], + "label": "Drum", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M431.34 122.05l73.53-47.42a16 16 0 0 0 4.44-22.19l-8.87-13.31a16 16 0 0 0-22.19-4.44l-110.06 71C318.43 96.91 271.22 96 256 96 219.55 96 0 100.55 0 208.15v160.23c0 30.27 27.5 57.68 72 77.86v-101.9a24 24 0 1 1 48 0v118.93c33.05 9.11 71.07 15.06 112 16.73V376.39a24 24 0 1 1 48 0V480c40.93-1.67 78.95-7.62 112-16.73V344.34a24 24 0 1 1 48 0v101.9c44.5-20.18 72-47.59 72-77.86V208.15c0-43.32-35.76-69.76-80.66-86.1zM256 272.24c-114.88 0-208-28.69-208-64.09s93.12-64.08 208-64.08c17.15 0 33.73.71 49.68 1.91l-72.81 47a16 16 0 0 0-4.43 22.19l8.87 13.31a16 16 0 0 0 22.19 4.44l118.64-76.52C430.09 168 464 186.84 464 208.15c0 35.4-93.13 64.09-208 64.09z" + } + }, + "free": [ + "solid" + ] + }, + "drum-steelpan": { + "search": { + "terms": [ + "calypso", + "instrument", + "music", + "percussion", + "reggae", + "snare", + "sound", + "steel", + "tropical" + ] + }, + "styles": [ + "solid" + ], + "label": "Drum Steelpan", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z" + } + }, + "free": [ + "solid" + ] + }, + "drumstick-bite": { + "search": { + "terms": [ + "bone", + "chicken", + "leg", + "meat", + "poultry", + "turkey" + ] + }, + "styles": [ + "solid" + ], + "label": "Drumstick with Bite Taken Out", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z" + } + }, + "free": [ + "solid" + ] + }, + "drupal": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Drupal Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M319.5 114.7c-22.2-14-43.5-19.5-64.7-33.5-13-8.8-31.3-30-46.5-48.3-2.7 29.3-11.5 41.2-22 49.5-21.3 17-34.8 22.2-53.5 32.3C117 123 32 181.5 32 290.5 32 399.7 123.8 480 225.8 480 327.5 480 416 406 416 294c0-112.3-83-171-96.5-179.3zm2.5 325.6c-20.1 20.1-90.1 28.7-116.7 4.2-4.8-4.8.3-12 6.5-12 0 0 17 13.3 51.5 13.3 27 0 46-7.7 54.5-14 6.1-4.6 8.4 4.3 4.2 8.5zm-54.5-52.6c8.7-3.6 29-3.8 36.8 1.3 4.1 2.8 16.1 18.8 6.2 23.7-8.4 4.2-1.2-15.7-26.5-15.7-14.7 0-19.5 5.2-26.7 11-7 6-9.8 8-12.2 4.7-6-8.2 15.9-22.3 22.4-25zM360 405c-15.2-1-45.5-48.8-65-49.5-30.9-.9-104.1 80.7-161.3 42-38.8-26.6-14.6-104.8 51.8-105.2 49.5-.5 83.8 49 108.5 48.5 21.3-.3 61.8-41.8 81.8-41.8 48.7 0 23.3 109.3-15.8 106z" + } + }, + "free": [ + "brands" + ] + }, + "dumbbell": { + "search": { + "terms": [ + "exercise", + "gym", + "strength", + "weight", + "weight-lifting" + ] + }, + "styles": [ + "solid" + ], + "label": "Dumbbell", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "dumpster": { + "search": { + "terms": [ + "alley", + "bin", + "commercial", + "trash", + "waste" + ] + }, + "styles": [ + "solid" + ], + "label": "Dumpster", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "dumpster-fire": { + "search": { + "terms": [ + "alley", + "bin", + "commercial", + "danger", + "dangerous", + "euphemism", + "flame", + "heat", + "hot", + "trash", + "waste" + ] + }, + "styles": [ + "solid" + ], + "label": "Dumpster Fire", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z" + } + }, + "free": [ + "solid" + ] + }, + "dungeon": { + "search": { + "terms": [ + "Dungeons & Dragons", + "building", + "d&d", + "dnd", + "door", + "entrance", + "fantasy", + "gate" + ] + }, + "styles": [ + "solid" + ], + "label": "Dungeon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z" + } + }, + "free": [ + "solid" + ] + }, + "dyalog": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Dyalog", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "416", + "512" + ], + "path": "M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z" + } + }, + "free": [ + "brands" + ] + }, + "earlybirds": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Earlybirds", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z" + } + }, + "free": [ + "brands" + ] + }, + "ebay": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "eBay", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z" + } + }, + "free": [ + "brands" + ] + }, + "edge": { + "search": { + "terms": [ + "browser", + "ie" + ] + }, + "styles": [ + "brands" + ], + "label": "Edge Browser", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M481.92,134.48C440.87,54.18,352.26,8,255.91,8,137.05,8,37.51,91.68,13.47,203.66c26-46.49,86.22-79.14,149.46-79.14,79.27,0,121.09,48.93,122.25,50.18,22,23.8,33,50.39,33,83.1,0,10.4-5.31,25.82-15.11,38.57-1.57,2-6.39,4.84-6.39,11,0,5.06,3.29,9.92,9.14,14,27.86,19.37,80.37,16.81,80.51,16.81A115.39,115.39,0,0,0,444.94,322a118.92,118.92,0,0,0,58.95-102.44C504.39,176.13,488.39,147.26,481.92,134.48ZM212.77,475.67a154.88,154.88,0,0,1-46.64-45c-32.94-47.42-34.24-95.6-20.1-136A155.5,155.5,0,0,1,203,215.75c59-45.2,94.84-5.65,99.06-1a80,80,0,0,0-4.89-10.14c-9.24-15.93-24-36.41-56.56-53.51-33.72-17.69-70.59-18.59-77.64-18.59-38.71,0-77.9,13-107.53,35.69C35.68,183.3,12.77,208.72,8.6,243c-1.08,12.31-2.75,62.8,23,118.27a248,248,0,0,0,248.3,141.61C241.78,496.26,214.05,476.24,212.77,475.67Zm250.72-98.33a7.76,7.76,0,0,0-7.92-.23,181.66,181.66,0,0,1-20.41,9.12,197.54,197.54,0,0,1-69.55,12.52c-91.67,0-171.52-63.06-171.52-144A61.12,61.12,0,0,1,200.61,228,168.72,168.72,0,0,0,161.85,278c-14.92,29.37-33,88.13,13.33,151.66,6.51,8.91,23,30,56,47.67,23.57,12.65,49,19.61,71.7,19.61,35.14,0,115.43-33.44,163-108.87A7.75,7.75,0,0,0,463.49,377.34Z" + } + }, + "free": [ + "brands" + ] + }, + "edge-legacy": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Edge Legacy Browser", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M25.71,228.16l.35-.48c0,.16,0,.32-.07.48Zm460.58,15.51c0-44-7.76-84.46-28.81-122.4C416.5,47.88,343.91,8,258.89,8,119,7.72,40.62,113.21,26.06,227.68c42.42-61.31,117.07-121.38,220.37-125,0,0,109.67,0,99.42,105H170c6.37-37.39,18.55-59,34.34-78.93-75.05,34.9-121.85,96.1-120.75,188.32.83,71.45,50.13,144.84,120.75,172,83.35,31.84,192.77,7.2,240.13-21.33V363.31C363.6,419.8,173.6,424.23,172.21,295.74H486.29V243.67Z" + } + }, + "free": [ + "brands" + ] + }, + "edit": { + "search": { + "terms": [ + "edit", + "pen", + "pencil", + "update", + "write" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Edit", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "egg": { + "search": { + "terms": [ + "breakfast", + "chicken", + "easter", + "shell", + "yolk" + ] + }, + "styles": [ + "solid" + ], + "label": "Egg", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z" + } + }, + "free": [ + "solid" + ] + }, + "eject": { + "search": { + "terms": [ + "abort", + "cancel", + "cd", + "discharge" + ] + }, + "styles": [ + "solid" + ], + "label": "eject", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z" + } + }, + "free": [ + "solid" + ] + }, + "elementor": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Elementor", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z" + } + }, + "free": [ + "brands" + ] + }, + "ellipsis-h": { + "search": { + "terms": [ + "dots", + "drag", + "kebab", + "list", + "menu", + "nav", + "navigation", + "ol", + "reorder", + "settings", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "Horizontal Ellipsis", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z" + } + }, + "free": [ + "solid" + ] + }, + "ellipsis-v": { + "search": { + "terms": [ + "dots", + "drag", + "kebab", + "list", + "menu", + "nav", + "navigation", + "ol", + "reorder", + "settings", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "Vertical Ellipsis", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "192", + "512" + ], + "path": "M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z" + } + }, + "free": [ + "solid" + ] + }, + "ello": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Ello", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z" + } + }, + "free": [ + "brands" + ] + }, + "ember": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Ember", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z" + } + }, + "free": [ + "brands" + ] + }, + "empire": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Galactic Empire", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z" + } + }, + "free": [ + "brands" + ] + }, + "envelope": { + "search": { + "terms": [ + "e-mail", + "email", + "letter", + "mail", + "message", + "notification", + "support" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Envelope", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "envelope-open": { + "search": { + "terms": [ + "e-mail", + "email", + "letter", + "mail", + "message", + "notification", + "support" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Envelope Open", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "envelope-open-text": { + "search": { + "terms": [ + "e-mail", + "email", + "letter", + "mail", + "message", + "notification", + "support" + ] + }, + "styles": [ + "solid" + ], + "label": "Envelope Open-text", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z" + } + }, + "free": [ + "solid" + ] + }, + "envelope-square": { + "search": { + "terms": [ + "e-mail", + "email", + "letter", + "mail", + "message", + "notification", + "support" + ] + }, + "styles": [ + "solid" + ], + "label": "Envelope Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z" + } + }, + "free": [ + "solid" + ] + }, + "envira": { + "search": { + "terms": [ + "leaf" + ] + }, + "styles": [ + "brands" + ], + "label": "Envira Gallery", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z" + } + }, + "free": [ + "brands" + ] + }, + "equals": { + "search": { + "terms": [ + "arithmetic", + "even", + "match", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Equals", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "eraser": { + "search": { + "terms": [ + "art", + "delete", + "remove", + "rubber" + ] + }, + "styles": [ + "solid" + ], + "label": "eraser", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z" + } + }, + "free": [ + "solid" + ] + }, + "erlang": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Erlang", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z" + } + }, + "free": [ + "brands" + ] + }, + "ethereum": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Ethereum", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z" + } + }, + "free": [ + "brands" + ] + }, + "ethernet": { + "search": { + "terms": [ + "cable", + "cat 5", + "cat 6", + "connection", + "hardware", + "internet", + "network", + "wired" + ] + }, + "styles": [ + "solid" + ], + "label": "Ethernet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "etsy": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Etsy", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z" + } + }, + "free": [ + "brands" + ] + }, + "euro-sign": { + "search": { + "terms": [ + "currency", + "dollar", + "exchange", + "money" + ] + }, + "styles": [ + "solid" + ], + "label": "Euro Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z" + } + }, + "free": [ + "solid" + ] + }, + "evernote": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Evernote", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z" + } + }, + "free": [ + "brands" + ] + }, + "exchange-alt": { + "search": { + "terms": [ + "arrow", + "arrows", + "exchange", + "reciprocate", + "return", + "swap", + "transfer" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Exchange", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "exclamation": { + "search": { + "terms": [ + "alert", + "danger", + "error", + "important", + "notice", + "notification", + "notify", + "problem", + "warning" + ] + }, + "styles": [ + "solid" + ], + "label": "exclamation", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "192", + "512" + ], + "path": "M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z" + } + }, + "free": [ + "solid" + ] + }, + "exclamation-circle": { + "search": { + "terms": [ + "alert", + "danger", + "error", + "important", + "notice", + "notification", + "notify", + "problem", + "warning" + ] + }, + "styles": [ + "solid" + ], + "label": "Exclamation Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z" + } + }, + "free": [ + "solid" + ] + }, + "exclamation-triangle": { + "search": { + "terms": [ + "alert", + "danger", + "error", + "important", + "notice", + "notification", + "notify", + "problem", + "warning" + ] + }, + "styles": [ + "solid" + ], + "label": "Exclamation Triangle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z" + } + }, + "free": [ + "solid" + ] + }, + "expand": { + "search": { + "terms": [ + "bigger", + "enlarge", + "fullscreen", + "resize" + ] + }, + "styles": [ + "solid" + ], + "label": "Expand", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z" + } + }, + "free": [ + "solid" + ] + }, + "expand-alt": { + "search": { + "terms": [ + "arrows", + "bigger", + "enlarge", + "fullscreen", + "resize" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Expand", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z" + } + }, + "free": [ + "solid" + ] + }, + "expand-arrows-alt": { + "search": { + "terms": [ + "bigger", + "enlarge", + "fullscreen", + "move", + "resize" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Expand Arrows", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z" + } + }, + "free": [ + "solid" + ] + }, + "expeditedssl": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "ExpeditedSSL", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z" + } + }, + "free": [ + "brands" + ] + }, + "external-link-alt": { + "search": { + "terms": [ + "external-link", + "new", + "open", + "share" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate External Link", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z" + } + }, + "free": [ + "solid" + ] + }, + "external-link-square-alt": { + "search": { + "terms": [ + "external-link-square", + "new", + "open", + "share" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate External Link Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "eye": { + "search": { + "terms": [ + "look", + "optic", + "see", + "seen", + "show", + "sight", + "views", + "visible" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Eye", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 144a110.94 110.94 0 0 0-31.24 5 55.4 55.4 0 0 1 7.24 27 56 56 0 0 1-56 56 55.4 55.4 0 0 1-27-7.24A111.71 111.71 0 1 0 288 144zm284.52 97.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400c-98.65 0-189.09-55-237.93-144C98.91 167 189.34 112 288 112s189.09 55 237.93 144C477.1 345 386.66 400 288 400z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "eye-dropper": { + "search": { + "terms": [ + "beaker", + "clone", + "color", + "copy", + "eyedropper", + "pipette" + ] + }, + "styles": [ + "solid" + ], + "label": "Eye Dropper", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z" + } + }, + "free": [ + "solid" + ] + }, + "eye-slash": { + "search": { + "terms": [ + "blind", + "hide", + "show", + "toggle", + "unseen", + "views", + "visible", + "visiblity" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Eye Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M634 471L36 3.51A16 16 0 0 0 13.51 6l-10 12.49A16 16 0 0 0 6 41l598 467.49a16 16 0 0 0 22.49-2.49l10-12.49A16 16 0 0 0 634 471zM296.79 146.47l134.79 105.38C429.36 191.91 380.48 144 320 144a112.26 112.26 0 0 0-23.21 2.47zm46.42 219.07L208.42 260.16C210.65 320.09 259.53 368 320 368a113 113 0 0 0 23.21-2.46zM320 112c98.65 0 189.09 55 237.93 144a285.53 285.53 0 0 1-44 60.2l37.74 29.5a333.7 333.7 0 0 0 52.9-75.11 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64c-36.7 0-71.71 7-104.63 18.81l46.41 36.29c18.94-4.3 38.34-7.1 58.22-7.1zm0 288c-98.65 0-189.08-55-237.93-144a285.47 285.47 0 0 1 44.05-60.19l-37.74-29.5a333.6 333.6 0 0 0-52.89 75.1 32.35 32.35 0 0 0 0 29.19C89.72 376.41 197.08 448 320 448c36.7 0 71.71-7.05 104.63-18.81l-46.41-36.28C359.28 397.2 339.89 400 320 400z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "facebook": { + "search": { + "terms": [ + "facebook-official", + "social network" + ] + }, + "styles": [ + "brands" + ], + "label": "Facebook", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z" + } + }, + "free": [ + "brands" + ] + }, + "facebook-f": { + "search": { + "terms": [ + "facebook" + ] + }, + "styles": [ + "brands" + ], + "label": "Facebook F", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z" + } + }, + "free": [ + "brands" + ] + }, + "facebook-messenger": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Facebook Messenger", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z" + } + }, + "free": [ + "brands" + ] + }, + "facebook-square": { + "search": { + "terms": [ + "social network" + ] + }, + "styles": [ + "brands" + ], + "label": "Facebook Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z" + } + }, + "free": [ + "brands" + ] + }, + "fan": { + "search": { + "terms": [ + "ac", + "air conditioning", + "blade", + "blower", + "cool", + "hot" + ] + }, + "styles": [ + "solid" + ], + "label": "Fan", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "fantasy-flight-games": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "game", + "gaming", + "tabletop" + ] + }, + "styles": [ + "brands" + ], + "label": "Fantasy Flight-games", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99a42569.01 42569.01 0 0 1-41.13-40.72zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z" + } + }, + "free": [ + "brands" + ] + }, + "fast-backward": { + "search": { + "terms": [ + "beginning", + "first", + "previous", + "rewind", + "start" + ] + }, + "styles": [ + "solid" + ], + "label": "fast-backward", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z" + } + }, + "free": [ + "solid" + ] + }, + "fast-forward": { + "search": { + "terms": [ + "end", + "last", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "fast-forward", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z" + } + }, + "free": [ + "solid" + ] + }, + "faucet": { + "search": { + "terms": [ + "covid-19", + "drip", + "house", + "hygiene", + "kitchen", + "sink", + "water" + ] + }, + "styles": [ + "solid" + ], + "label": "Faucet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M352,256H313.39c-15.71-13.44-35.46-23.07-57.39-28V180.44l-32-3.38-32,3.38V228c-21.93,5-41.68,14.6-57.39,28H16A16,16,0,0,0,0,272v96a16,16,0,0,0,16,16h92.79C129.38,421.73,173,448,224,448s94.62-26.27,115.21-64H352a32,32,0,0,1,32,32,32,32,0,0,0,32,32h64a32,32,0,0,0,32-32A160,160,0,0,0,352,256ZM81.59,159.91l142.41-15,142.41,15c9.42,1,17.59-6.81,17.59-16.8V112.89c0-10-8.17-17.8-17.59-16.81L256,107.74V80a16,16,0,0,0-16-16H208a16,16,0,0,0-16,16v27.74L81.59,96.08C72.17,95.09,64,102.9,64,112.89v30.22C64,153.1,72.17,160.91,81.59,159.91Z" + } + }, + "free": [ + "solid" + ] + }, + "fax": { + "search": { + "terms": [ + "business", + "communicate", + "copy", + "facsimile", + "send" + ] + }, + "styles": [ + "solid" + ], + "label": "Fax", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 160V77.25a32 32 0 0 0-9.38-22.63L425.37 9.37A32 32 0 0 0 402.75 0H160a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32h320a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM288 432a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm128 128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-112H192V64h160v48a16 16 0 0 0 16 16h48zM64 128H32a32 32 0 0 0-32 32v320a32 32 0 0 0 32 32h32a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "feather": { + "search": { + "terms": [ + "bird", + "light", + "plucked", + "quill", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Feather", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z" + } + }, + "free": [ + "solid" + ] + }, + "feather-alt": { + "search": { + "terms": [ + "bird", + "light", + "plucked", + "quill", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Feather", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z" + } + }, + "free": [ + "solid" + ] + }, + "fedex": { + "search": { + "terms": [ + "Federal Express", + "package", + "shipping" + ] + }, + "styles": [ + "brands" + ], + "label": "FedEx", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z" + } + }, + "free": [ + "brands" + ] + }, + "fedora": { + "search": { + "terms": [ + "linux", + "operating system", + "os" + ] + }, + "styles": [ + "brands" + ], + "label": "Fedora", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M225 32C101.3 31.7.8 131.7.4 255.4L0 425.7a53.6 53.6 0 0 0 53.6 53.9l170.2.4c123.7.3 224.3-99.7 224.6-223.4S348.7 32.3 225 32zm169.8 157.2L333 126.6c2.3-4.7 3.8-9.2 3.8-14.3v-1.6l55.2 56.1a101 101 0 0 1 2.8 22.4zM331 94.3a106.06 106.06 0 0 1 58.5 63.8l-54.3-54.6a26.48 26.48 0 0 0-4.2-9.2zM118.1 247.2a49.66 49.66 0 0 0-7.7 11.4l-8.5-8.5a85.78 85.78 0 0 1 16.2-2.9zM97 251.4l11.8 11.9-.9 8a34.74 34.74 0 0 0 2.4 12.5l-27-27.2a80.6 80.6 0 0 1 13.7-5.2zm-18.2 7.4l38.2 38.4a53.17 53.17 0 0 0-14.1 4.7L67.6 266a107 107 0 0 1 11.2-7.2zm-15.2 9.8l35.3 35.5a67.25 67.25 0 0 0-10.5 8.5L53.5 278a64.33 64.33 0 0 1 10.1-9.4zm-13.3 12.3l34.9 35a56.84 56.84 0 0 0-7.7 11.4l-35.8-35.9c2.8-3.8 5.7-7.2 8.6-10.5zm-11 14.3l36.4 36.6a48.29 48.29 0 0 0-3.6 15.2l-39.5-39.8a99.81 99.81 0 0 1 6.7-12zm-8.8 16.3l41.3 41.8a63.47 63.47 0 0 0 6.7 26.2L25.8 326c1.4-4.9 2.9-9.6 4.7-14.5zm-7.9 43l61.9 62.2a31.24 31.24 0 0 0-3.6 14.3v1.1l-55.4-55.7a88.27 88.27 0 0 1-2.9-21.9zm5.3 30.7l54.3 54.6a28.44 28.44 0 0 0 4.2 9.2 106.32 106.32 0 0 1-58.5-63.8zm-5.3-37a80.69 80.69 0 0 1 2.1-17l72.2 72.5a37.59 37.59 0 0 0-9.9 8.7zm253.3-51.8l-42.6-.1-.1 56c-.2 69.3-64.4 115.8-125.7 102.9-5.7 0-19.9-8.7-19.9-24.2a24.89 24.89 0 0 1 24.5-24.6c6.3 0 6.3 1.6 15.7 1.6a55.91 55.91 0 0 0 56.1-55.9l.1-47c0-4.5-4.5-9-8.9-9l-33.6-.1c-32.6-.1-32.5-49.4.1-49.3l42.6.1.1-56a105.18 105.18 0 0 1 105.6-105 86.35 86.35 0 0 1 20.2 2.3c11.2 1.8 19.9 11.9 19.9 24 0 15.5-14.9 27.8-30.3 23.9-27.4-5.9-65.9 14.4-66 54.9l-.1 47a8.94 8.94 0 0 0 8.9 9l33.6.1c32.5.2 32.4 49.5-.2 49.4zm23.5-.3a35.58 35.58 0 0 0 7.6-11.4l8.5 8.5a102 102 0 0 1-16.1 2.9zm21-4.2L308.6 280l.9-8.1a34.74 34.74 0 0 0-2.4-12.5l27 27.2a74.89 74.89 0 0 1-13.7 5.3zm18-7.4l-38-38.4c4.9-1.1 9.6-2.4 13.7-4.7l36.2 35.9c-3.8 2.5-7.9 5-11.9 7.2zm15.5-9.8l-35.3-35.5a61.06 61.06 0 0 0 10.5-8.5l34.9 35a124.56 124.56 0 0 1-10.1 9zm13.2-12.3l-34.9-35a63.18 63.18 0 0 0 7.7-11.4l35.8 35.9a130.28 130.28 0 0 1-8.6 10.5zm11-14.3l-36.4-36.6a48.29 48.29 0 0 0 3.6-15.2l39.5 39.8a87.72 87.72 0 0 1-6.7 12zm13.5-30.9a140.63 140.63 0 0 1-4.7 14.3L345.6 190a58.19 58.19 0 0 0-7.1-26.2zm1-5.6l-71.9-72.1a32 32 0 0 0 9.9-9.2l64.3 64.7a90.93 90.93 0 0 1-2.3 16.6z" + } + }, + "free": [ + "brands" + ] + }, + "female": { + "search": { + "terms": [ + "human", + "person", + "profile", + "user", + "woman" + ] + }, + "styles": [ + "solid" + ], + "label": "Female", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z" + } + }, + "free": [ + "solid" + ] + }, + "fighter-jet": { + "search": { + "terms": [ + "airplane", + "fast", + "fly", + "goose", + "maverick", + "plane", + "quick", + "top gun", + "transportation", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "fighter-jet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z" + } + }, + "free": [ + "solid" + ] + }, + "figma": { + "search": { + "terms": [ + "app", + "design", + "interface" + ] + }, + "styles": [ + "brands" + ], + "label": "Figma", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M277 170.7A85.35 85.35 0 0 0 277 0H106.3a85.3 85.3 0 0 0 0 170.6 85.35 85.35 0 0 0 0 170.7 85.35 85.35 0 1 0 85.3 85.4v-256zm0 0a85.3 85.3 0 1 0 85.3 85.3 85.31 85.31 0 0 0-85.3-85.3z" + } + }, + "free": [ + "brands" + ] + }, + "file": { + "search": { + "terms": [ + "document", + "new", + "page", + "pdf", + "resume" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-alt": { + "search": { + "terms": [ + "document", + "file-text", + "invoice", + "new", + "page", + "pdf" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-archive": { + "search": { + "terms": [ + ".zip", + "bundle", + "compress", + "compression", + "download", + "zip" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Archive File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M128.3 160v32h32v-32zm64-96h-32v32h32zm-64 32v32h32V96zm64 32h-32v32h32zm177.6-30.1L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h79.7v16h32V48H208v104c0 13.3 10.7 24 24 24h104zM194.2 265.7c-1.1-5.6-6-9.7-11.8-9.7h-22.1v-32h-32v32l-19.7 97.1C102 385.6 126.8 416 160 416c33.1 0 57.9-30.2 51.5-62.6zm-33.9 124.4c-17.9 0-32.4-12.1-32.4-27s14.5-27 32.4-27 32.4 12.1 32.4 27-14.5 27-32.4 27zm32-198.1h-32v32h32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-audio": { + "search": { + "terms": [ + "document", + "mp3", + "music", + "page", + "play", + "sound" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Audio File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-code": { + "search": { + "terms": [ + "css", + "development", + "document", + "html" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Code File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M149.9 349.1l-.2-.2-32.8-28.9 32.8-28.9c3.6-3.2 4-8.8.8-12.4l-.2-.2-17.4-18.6c-3.4-3.6-9-3.7-12.4-.4l-57.7 54.1c-3.7 3.5-3.7 9.4 0 12.8l57.7 54.1c1.6 1.5 3.8 2.4 6 2.4 2.4 0 4.8-1 6.4-2.8l17.4-18.6c3.3-3.5 3.1-9.1-.4-12.4zm220-251.2L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h160v104c0 13.3 10.7 24 24 24h104zM209.6 214c-4.7-1.4-9.5 1.3-10.9 6L144 408.1c-1.4 4.7 1.3 9.6 6 10.9l24.4 7.1c4.7 1.4 9.6-1.4 10.9-6L240 231.9c1.4-4.7-1.3-9.6-6-10.9zm24.5 76.9l.2.2 32.8 28.9-32.8 28.9c-3.6 3.2-4 8.8-.8 12.4l.2.2 17.4 18.6c3.3 3.5 8.9 3.7 12.4.4l57.7-54.1c3.7-3.5 3.7-9.4 0-12.8l-57.7-54.1c-3.5-3.3-9.1-3.2-12.4.4l-17.4 18.6c-3.3 3.5-3.1 9.1.4 12.4z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-contract": { + "search": { + "terms": [ + "agreement", + "binding", + "document", + "legal", + "signature" + ] + }, + "styles": [ + "solid" + ], + "label": "File Contract", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z" + } + }, + "free": [ + "solid" + ] + }, + "file-csv": { + "search": { + "terms": [ + "document", + "excel", + "numbers", + "spreadsheets", + "table" + ] + }, + "styles": [ + "solid" + ], + "label": "File CSV", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z" + } + }, + "free": [ + "solid" + ] + }, + "file-download": { + "search": { + "terms": [ + "document", + "export", + "save" + ] + }, + "styles": [ + "solid" + ], + "label": "File Download", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z" + } + }, + "free": [ + "solid" + ] + }, + "file-excel": { + "search": { + "terms": [ + "csv", + "document", + "numbers", + "spreadsheets", + "table" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Excel File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-export": { + "search": { + "terms": [ + "download", + "save" + ] + }, + "styles": [ + "solid" + ], + "label": "File Export", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "file-image": { + "search": { + "terms": [ + "document", + "image", + "jpg", + "photo", + "png" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Image File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-import": { + "search": { + "terms": [ + "copy", + "document", + "send", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "File Import", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "file-invoice": { + "search": { + "terms": [ + "account", + "bill", + "charge", + "document", + "payment", + "receipt" + ] + }, + "styles": [ + "solid" + ], + "label": "File Invoice", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "file-invoice-dollar": { + "search": { + "terms": [ + "$", + "account", + "bill", + "charge", + "document", + "dollar-sign", + "money", + "payment", + "receipt", + "usd" + ] + }, + "styles": [ + "solid" + ], + "label": "File Invoice with US Dollar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z" + } + }, + "free": [ + "solid" + ] + }, + "file-medical": { + "search": { + "terms": [ + "document", + "health", + "history", + "prescription", + "record" + ] + }, + "styles": [ + "solid" + ], + "label": "Medical File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z" + } + }, + "free": [ + "solid" + ] + }, + "file-medical-alt": { + "search": { + "terms": [ + "document", + "health", + "history", + "prescription", + "record" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Medical File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z" + } + }, + "free": [ + "solid" + ] + }, + "file-pdf": { + "search": { + "terms": [ + "acrobat", + "document", + "preview", + "save" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "PDF File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-powerpoint": { + "search": { + "terms": [ + "display", + "document", + "keynote", + "presentation" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Powerpoint File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-prescription": { + "search": { + "terms": [ + "document", + "drugs", + "medical", + "medicine", + "rx" + ] + }, + "styles": [ + "solid" + ], + "label": "File Prescription", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z" + } + }, + "free": [ + "solid" + ] + }, + "file-signature": { + "search": { + "terms": [ + "John Hancock", + "contract", + "document", + "name" + ] + }, + "styles": [ + "solid" + ], + "label": "File Signature", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z" + } + }, + "free": [ + "solid" + ] + }, + "file-upload": { + "search": { + "terms": [ + "document", + "import", + "page", + "save" + ] + }, + "styles": [ + "solid" + ], + "label": "File Upload", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z" + } + }, + "free": [ + "solid" + ] + }, + "file-video": { + "search": { + "terms": [ + "document", + "m4v", + "movie", + "mp4", + "play" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Video File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "file-word": { + "search": { + "terms": [ + "document", + "edit", + "page", + "text", + "writing" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Word File", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "fill": { + "search": { + "terms": [ + "bucket", + "color", + "paint", + "paint bucket" + ] + }, + "styles": [ + "solid" + ], + "label": "Fill", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z" + } + }, + "free": [ + "solid" + ] + }, + "fill-drip": { + "search": { + "terms": [ + "bucket", + "color", + "drop", + "paint", + "paint bucket", + "spill" + ] + }, + "styles": [ + "solid" + ], + "label": "Fill Drip", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z" + } + }, + "free": [ + "solid" + ] + }, + "film": { + "search": { + "terms": [ + "cinema", + "movie", + "strip", + "video" + ] + }, + "styles": [ + "solid" + ], + "label": "Film", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z" + } + }, + "free": [ + "solid" + ] + }, + "filter": { + "search": { + "terms": [ + "funnel", + "options", + "separate", + "sort" + ] + }, + "styles": [ + "solid" + ], + "label": "Filter", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z" + } + }, + "free": [ + "solid" + ] + }, + "fingerprint": { + "search": { + "terms": [ + "human", + "id", + "identification", + "lock", + "smudge", + "touch", + "unique", + "unlock" + ] + }, + "styles": [ + "solid" + ], + "label": "Fingerprint", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z" + } + }, + "free": [ + "solid" + ] + }, + "fire": { + "search": { + "terms": [ + "burn", + "caliente", + "flame", + "heat", + "hot", + "popular" + ] + }, + "styles": [ + "solid" + ], + "label": "fire", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z" + } + }, + "free": [ + "solid" + ] + }, + "fire-alt": { + "search": { + "terms": [ + "burn", + "caliente", + "flame", + "heat", + "hot", + "popular" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Fire", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z" + } + }, + "free": [ + "solid" + ] + }, + "fire-extinguisher": { + "search": { + "terms": [ + "burn", + "caliente", + "fire fighter", + "flame", + "heat", + "hot", + "rescue" + ] + }, + "styles": [ + "solid" + ], + "label": "fire-extinguisher", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "firefox": { + "search": { + "terms": [ + "browser" + ] + }, + "styles": [ + "brands" + ], + "label": "Firefox", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z" + } + }, + "free": [ + "brands" + ] + }, + "firefox-browser": { + "search": { + "terms": [ + "browser" + ] + }, + "styles": [ + "brands" + ], + "label": "Firefox Browser", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M189.37,152.86Zm-58.74-29.37C130.79,123.5,130.71,123.5,130.63,123.49Zm351.42,45.35c-10.61-25.5-32.08-53-48.94-61.73,13.72,26.89,21.67,53.88,24.7,74,0,0,0,.14.05.41-27.58-68.75-74.35-96.47-112.55-156.83-1.93-3.05-3.86-6.11-5.74-9.33-1-1.65-1.86-3.34-2.69-5.05A44.88,44.88,0,0,1,333.24.69a.63.63,0,0,0-.55-.66.9.9,0,0,0-.46,0l-.12.07-.18.1.1-.14c-54.23,31.77-76.72,87.38-82.5,122.78a130,130,0,0,0-48.33,12.33,6.25,6.25,0,0,0-3.09,7.75,6.13,6.13,0,0,0,7.79,3.79l.52-.21a117.84,117.84,0,0,1,42.11-11l1.42-.1c2-.12,4-.2,6-.22A122.61,122.61,0,0,1,291,140c.67.2,1.32.42,2,.63,1.89.57,3.76,1.2,5.62,1.87,1.36.5,2.71,1,4.05,1.58,1.09.44,2.18.88,3.25,1.35q2.52,1.13,5,2.35c.75.37,1.5.74,2.25,1.13q2.4,1.26,4.74,2.63,1.51.87,3,1.8a124.89,124.89,0,0,1,42.66,44.13c-13-9.15-36.35-18.19-58.82-14.28,87.74,43.86,64.18,194.9-57.39,189.2a108.43,108.43,0,0,1-31.74-6.12c-2.42-.91-4.8-1.89-7.16-2.93-1.38-.63-2.76-1.27-4.12-2C174.5,346,149.9,316.92,146.83,281.59c0,0,11.25-41.95,80.62-41.95,7.5,0,28.93-20.92,29.33-27-.09-2-42.54-18.87-59.09-35.18-8.85-8.71-13.05-12.91-16.77-16.06a69.58,69.58,0,0,0-6.31-4.77A113.05,113.05,0,0,1,173.92,97c-25.06,11.41-44.55,29.45-58.71,45.37h-.12c-9.67-12.25-9-52.65-8.43-61.08-.12-.53-7.22,3.68-8.15,4.31a178.54,178.54,0,0,0-23.84,20.43A214,214,0,0,0,51.9,133.36l0,0a.08.08,0,0,1,0,0,205.84,205.84,0,0,0-32.73,73.9c-.06.27-2.33,10.21-4,22.48q-.42,2.87-.78,5.74c-.57,3.69-1,7.71-1.44,14,0,.24,0,.48-.05.72-.18,2.71-.34,5.41-.49,8.12,0,.41,0,.82,0,1.24,0,134.7,109.21,243.89,243.92,243.89,120.64,0,220.82-87.58,240.43-202.62.41-3.12.74-6.26,1.11-9.41,4.85-41.83-.54-85.79-15.82-122.55Z" + } + }, + "free": [ + "brands" + ] + }, + "first-aid": { + "search": { + "terms": [ + "emergency", + "emt", + "health", + "medical", + "rescue" + ] + }, + "styles": [ + "solid" + ], + "label": "First Aid", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "first-order": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "First Order", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z" + } + }, + "free": [ + "brands" + ] + }, + "first-order-alt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Alternate First Order", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z" + } + }, + "free": [ + "brands" + ] + }, + "firstdraft": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "firstdraft", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z" + } + }, + "free": [ + "brands" + ] + }, + "fish": { + "search": { + "terms": [ + "fauna", + "gold", + "seafood", + "swimming" + ] + }, + "styles": [ + "solid" + ], + "label": "Fish", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "fist-raised": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "hand", + "ki", + "monk", + "resist", + "strength", + "unarmed combat" + ] + }, + "styles": [ + "solid" + ], + "label": "Raised Fist", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "flag": { + "search": { + "terms": [ + "country", + "notice", + "notification", + "notify", + "pole", + "report", + "symbol" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "flag", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "flag-checkered": { + "search": { + "terms": [ + "notice", + "notification", + "notify", + "pole", + "racing", + "report", + "symbol" + ] + }, + "styles": [ + "solid" + ], + "label": "flag-checkered", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z" + } + }, + "free": [ + "solid" + ] + }, + "flag-usa": { + "search": { + "terms": [ + "betsy ross", + "country", + "old glory", + "stars", + "stripes", + "symbol" + ] + }, + "styles": [ + "solid" + ], + "label": "United States of America Flag", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "flask": { + "search": { + "terms": [ + "beaker", + "experimental", + "labs", + "science" + ] + }, + "styles": [ + "solid" + ], + "label": "Flask", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z" + } + }, + "free": [ + "solid" + ] + }, + "flickr": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Flickr", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z" + } + }, + "free": [ + "brands" + ] + }, + "flipboard": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Flipboard", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z" + } + }, + "free": [ + "brands" + ] + }, + "flushed": { + "search": { + "terms": [ + "embarrassed", + "emoticon", + "face" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Flushed Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "fly": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Fly", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z" + } + }, + "free": [ + "brands" + ] + }, + "folder": { + "search": { + "terms": [ + "archive", + "directory", + "document", + "file" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Folder", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 128H272l-54.63-54.63c-6-6-14.14-9.37-22.63-9.37H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm0 272H48V112h140.12l54.63 54.63c6 6 14.14 9.37 22.63 9.37H464v224z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "folder-minus": { + "search": { + "terms": [ + "archive", + "delete", + "directory", + "document", + "file", + "negative", + "remove" + ] + }, + "styles": [ + "solid" + ], + "label": "Folder Minus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z" + } + }, + "free": [ + "solid" + ] + }, + "folder-open": { + "search": { + "terms": [ + "archive", + "directory", + "document", + "empty", + "file", + "new" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Folder Open", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "folder-plus": { + "search": { + "terms": [ + "add", + "archive", + "create", + "directory", + "document", + "file", + "new", + "positive" + ] + }, + "styles": [ + "solid" + ], + "label": "Folder Plus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464,128H272L208,64H48A48,48,0,0,0,0,112V400a48,48,0,0,0,48,48H464a48,48,0,0,0,48-48V176A48,48,0,0,0,464,128ZM359.5,296a16,16,0,0,1-16,16h-64v64a16,16,0,0,1-16,16h-16a16,16,0,0,1-16-16V312h-64a16,16,0,0,1-16-16V280a16,16,0,0,1,16-16h64V200a16,16,0,0,1,16-16h16a16,16,0,0,1,16,16v64h64a16,16,0,0,1,16,16Z" + } + }, + "free": [ + "solid" + ] + }, + "font": { + "search": { + "terms": [ + "alphabet", + "glyph", + "text", + "type", + "typeface" + ] + }, + "styles": [ + "solid" + ], + "label": "font", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z" + } + }, + "free": [ + "solid" + ] + }, + "font-awesome": { + "search": { + "terms": [ + "meanpath" + ] + }, + "styles": [ + "brands" + ], + "label": "Font Awesome", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-45.4 284.3c0 4.2-3.6 6-7.8 7.8-16.7 7.2-34.6 13.7-53.8 13.7-26.9 0-39.4-16.7-71.7-16.7-23.3 0-47.8 8.4-67.5 17.3-1.2.6-2.4.6-3.6 1.2V385c0 1.8 0 3.6-.6 4.8v1.2c-2.4 8.4-10.2 14.3-19.1 14.3-11.3 0-20.3-9-20.3-20.3V166.4c-7.8-6-13.1-15.5-13.1-26.3 0-18.5 14.9-33.5 33.5-33.5 18.5 0 33.5 14.9 33.5 33.5 0 10.8-4.8 20.3-13.1 26.3v18.5c1.8-.6 3.6-1.2 5.4-2.4 18.5-7.8 40.6-14.3 61.5-14.3 22.7 0 40.6 6 60.9 13.7 4.2 1.8 8.4 2.4 13.1 2.4 22.7 0 47.8-16.1 53.8-16.1 4.8 0 9 3.6 9 7.8v140.3z" + } + }, + "free": [ + "brands" + ] + }, + "font-awesome-alt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Alternate Font Awesome", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M339.3 171.2c-6 0-29.9 15.5-52.6 15.5-4.2 0-8.4-.6-12.5-2.4-19.7-7.8-37-13.7-59.1-13.7-20.3 0-41.8 6.6-59.7 13.7-1.8.6-3.6 1.2-4.8 1.8v-17.9c7.8-6 12.5-14.9 12.5-25.7 0-17.9-14.3-32.3-32.3-32.3s-32.3 14.3-32.3 32.3c0 10.2 4.8 19.7 12.5 25.7v212.1c0 10.8 9 19.7 19.7 19.7 9 0 16.1-6 18.5-13.7V385c.6-1.8.6-3 .6-4.8V336c1.2 0 2.4-.6 3-1.2 19.7-8.4 43-16.7 65.7-16.7 31.1 0 43 16.1 69.3 16.1 18.5 0 36.4-6.6 52-13.7 4.2-1.8 7.2-3.6 7.2-7.8V178.3c1.8-4.1-2.3-7.1-7.7-7.1zM397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm14.3 397.7c0 7.8-6.6 14.3-14.3 14.3H50.2c-7.8 0-14.3-6.6-14.3-14.3V82.2c0-7.8 6.6-14.3 14.3-14.3h347.6v-.1c7.8 0 14.3 6.6 14.3 14.3z" + } + }, + "free": [ + "brands" + ] + }, + "font-awesome-flag": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Font Awesome Flag", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M444.373 359.424c0 7.168-6.144 10.24-13.312 13.312-28.672 12.288-59.392 23.552-92.16 23.552-46.08 0-67.584-28.672-122.88-28.672-39.936 0-81.92 14.336-115.712 29.696-2.048 1.024-4.096 1.024-6.144 2.048v77.824c0 21.405-16.122 34.816-33.792 34.816-19.456 0-34.816-15.36-34.816-34.816V102.4C12.245 92.16 3.029 75.776 3.029 57.344 3.029 25.6 28.629 0 60.373 0s57.344 25.6 57.344 57.344c0 18.432-8.192 34.816-22.528 45.056v31.744c4.124-1.374 58.768-28.672 114.688-28.672 65.27 0 97.676 27.648 126.976 27.648 38.912 0 81.92-27.648 92.16-27.648 8.192 0 15.36 6.144 15.36 13.312v240.64z" + } + }, + "free": [ + "brands" + ] + }, + "font-awesome-logo-full": { + "search": { + "terms": [] + }, + "styles": [ + "regular", + "solid", + "brands" + ], + "label": "Font Awesome Full Logo", + "private": true, + "svg": { + "regular": { + "viewBox": [ + "0", + "0", + "3992", + "512" + ], + "path": "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z" + }, + "solid": { + "viewBox": [ + "0", + "0", + "3992", + "512" + ], + "path": "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z" + }, + "brands": { + "viewBox": [ + "0", + "0", + "3992", + "512" + ], + "path": "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z" + } + }, + "free": [ + "regular", + "solid", + "brands" + ] + }, + "fonticons": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Fonticons", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z" + } + }, + "free": [ + "brands" + ] + }, + "fonticons-fi": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Fonticons Fi", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z" + } + }, + "free": [ + "brands" + ] + }, + "football-ball": { + "search": { + "terms": [ + "ball", + "fall", + "nfl", + "pigskin", + "seasonal" + ] + }, + "styles": [ + "solid" + ], + "label": "Football Ball", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z" + } + }, + "free": [ + "solid" + ] + }, + "fort-awesome": { + "search": { + "terms": [ + "castle" + ] + }, + "styles": [ + "brands" + ], + "label": "Fort Awesome", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z" + } + }, + "free": [ + "brands" + ] + }, + "fort-awesome-alt": { + "search": { + "terms": [ + "castle" + ] + }, + "styles": [ + "brands" + ], + "label": "Alternate Fort Awesome", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z" + } + }, + "free": [ + "brands" + ] + }, + "forumbee": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Forumbee", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z" + } + }, + "free": [ + "brands" + ] + }, + "forward": { + "search": { + "terms": [ + "forward", + "next", + "skip" + ] + }, + "styles": [ + "solid" + ], + "label": "forward", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z" + } + }, + "free": [ + "solid" + ] + }, + "foursquare": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Foursquare", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "368", + "512" + ], + "path": "M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z" + } + }, + "free": [ + "brands" + ] + }, + "free-code-camp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "freeCodeCamp", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z" + } + }, + "free": [ + "brands" + ] + }, + "freebsd": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "FreeBSD", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z" + } + }, + "free": [ + "brands" + ] + }, + "frog": { + "search": { + "terms": [ + "amphibian", + "bullfrog", + "fauna", + "hop", + "kermit", + "kiss", + "prince", + "ribbit", + "toad", + "wart" + ] + }, + "styles": [ + "solid" + ], + "label": "Frog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "frown": { + "search": { + "terms": [ + "disapprove", + "emoticon", + "face", + "rating", + "sad" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Frowning Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "frown-open": { + "search": { + "terms": [ + "disapprove", + "emoticon", + "face", + "rating", + "sad" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Frowning Face With Open Mouth", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "fulcrum": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Fulcrum", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z" + } + }, + "free": [ + "brands" + ] + }, + "funnel-dollar": { + "search": { + "terms": [ + "filter", + "money", + "options", + "separate", + "sort" + ] + }, + "styles": [ + "solid" + ], + "label": "Funnel Dollar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z" + } + }, + "free": [ + "solid" + ] + }, + "futbol": { + "search": { + "terms": [ + "ball", + "football", + "mls", + "soccer" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Futbol", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "galactic-republic": { + "search": { + "terms": [ + "politics", + "star wars" + ] + }, + "styles": [ + "brands" + ], + "label": "Galactic Republic", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z" + } + }, + "free": [ + "brands" + ] + }, + "galactic-senate": { + "search": { + "terms": [ + "star wars" + ] + }, + "styles": [ + "brands" + ], + "label": "Galactic Senate", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z" + } + }, + "free": [ + "brands" + ] + }, + "gamepad": { + "search": { + "terms": [ + "arcade", + "controller", + "d-pad", + "joystick", + "video", + "video game" + ] + }, + "styles": [ + "solid" + ], + "label": "Gamepad", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z" + } + }, + "free": [ + "solid" + ] + }, + "gas-pump": { + "search": { + "terms": [ + "car", + "fuel", + "gasoline", + "petrol" + ] + }, + "styles": [ + "solid" + ], + "label": "Gas Pump", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z" + } + }, + "free": [ + "solid" + ] + }, + "gavel": { + "search": { + "terms": [ + "hammer", + "judge", + "law", + "lawyer", + "opinion" + ] + }, + "styles": [ + "solid" + ], + "label": "Gavel", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z" + } + }, + "free": [ + "solid" + ] + }, + "gem": { + "search": { + "terms": [ + "diamond", + "jewelry", + "sapphire", + "stone", + "treasure" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Gem", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "genderless": { + "search": { + "terms": [ + "androgynous", + "asexual", + "sexless" + ] + }, + "styles": [ + "solid" + ], + "label": "Genderless", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z" + } + }, + "free": [ + "solid" + ] + }, + "get-pocket": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Get Pocket", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z" + } + }, + "free": [ + "brands" + ] + }, + "gg": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "GG Currency", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z" + } + }, + "free": [ + "brands" + ] + }, + "gg-circle": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "GG Currency Circle", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z" + } + }, + "free": [ + "brands" + ] + }, + "ghost": { + "search": { + "terms": [ + "apparition", + "blinky", + "clyde", + "floating", + "halloween", + "holiday", + "inky", + "pinky", + "spirit" + ] + }, + "styles": [ + "solid" + ], + "label": "Ghost", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "gift": { + "search": { + "terms": [ + "christmas", + "generosity", + "giving", + "holiday", + "party", + "present", + "wrapped", + "xmas" + ] + }, + "styles": [ + "solid" + ], + "label": "gift", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z" + } + }, + "free": [ + "solid" + ] + }, + "gifts": { + "search": { + "terms": [ + "christmas", + "generosity", + "giving", + "holiday", + "party", + "present", + "wrapped", + "xmas" + ] + }, + "styles": [ + "solid" + ], + "label": "Gifts", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z" + } + }, + "free": [ + "solid" + ] + }, + "git": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Git", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z" + } + }, + "free": [ + "brands" + ] + }, + "git-alt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Git Alt", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z" + } + }, + "free": [ + "brands" + ] + }, + "git-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Git Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M100.59 334.24c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52.01-5.09 3.29-9.4 6.6-13.46zm27.95-116.64c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47.75-44.47zM448 80v352a48 48 0 0 1-48 48H48a48 48 0 0 1-48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.62 127 243.88 127c-14.48 0-22.88 7.84-22.88 22.31zM199.18 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.23 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.35 81.53 385 127.52 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.84l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.52h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z" + } + }, + "free": [ + "brands" + ] + }, + "github": { + "search": { + "terms": [ + "octocat" + ] + }, + "styles": [ + "brands" + ], + "label": "GitHub", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z" + } + }, + "free": [ + "brands" + ] + }, + "github-alt": { + "search": { + "terms": [ + "octocat" + ] + }, + "styles": [ + "brands" + ], + "label": "Alternate GitHub", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z" + } + }, + "free": [ + "brands" + ] + }, + "github-square": { + "search": { + "terms": [ + "octocat" + ] + }, + "styles": [ + "brands" + ], + "label": "GitHub Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z" + } + }, + "free": [ + "brands" + ] + }, + "gitkraken": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "GitKraken", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "592", + "512" + ], + "path": "M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z" + } + }, + "free": [ + "brands" + ] + }, + "gitlab": { + "search": { + "terms": [ + "Axosoft" + ] + }, + "styles": [ + "brands" + ], + "label": "GitLab", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M105.2 24.9c-3.1-8.9-15.7-8.9-18.9 0L29.8 199.7h132c-.1 0-56.6-174.8-56.6-174.8zM.9 287.7c-2.6 8 .3 16.9 7.1 22l247.9 184-226.2-294zm160.8-88l94.3 294 94.3-294zm349.4 88l-28.8-88-226.3 294 247.9-184c6.9-5.1 9.7-14 7.2-22zM425.7 24.9c-3.1-8.9-15.7-8.9-18.9 0l-56.6 174.8h132z" + } + }, + "free": [ + "brands" + ] + }, + "gitter": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Gitter", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z" + } + }, + "free": [ + "brands" + ] + }, + "glass-cheers": { + "search": { + "terms": [ + "alcohol", + "bar", + "beverage", + "celebration", + "champagne", + "clink", + "drink", + "holiday", + "new year's eve", + "party", + "toast" + ] + }, + "styles": [ + "solid" + ], + "label": "Glass Cheers", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z" + } + }, + "free": [ + "solid" + ] + }, + "glass-martini": { + "search": { + "terms": [ + "alcohol", + "bar", + "beverage", + "drink", + "liquor" + ] + }, + "styles": [ + "solid" + ], + "label": "Martini Glass", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z" + } + }, + "free": [ + "solid" + ] + }, + "glass-martini-alt": { + "search": { + "terms": [ + "alcohol", + "bar", + "beverage", + "drink", + "liquor" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Glass Martini", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z" + } + }, + "free": [ + "solid" + ] + }, + "glass-whiskey": { + "search": { + "terms": [ + "alcohol", + "bar", + "beverage", + "bourbon", + "drink", + "liquor", + "neat", + "rye", + "scotch", + "whisky" + ] + }, + "styles": [ + "solid" + ], + "label": "Glass Whiskey", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z" + } + }, + "free": [ + "solid" + ] + }, + "glasses": { + "search": { + "terms": [ + "hipster", + "nerd", + "reading", + "sight", + "spectacles", + "vision" + ] + }, + "styles": [ + "solid" + ], + "label": "Glasses", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z" + } + }, + "free": [ + "solid" + ] + }, + "glide": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Glide", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z" + } + }, + "free": [ + "brands" + ] + }, + "glide-g": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Glide G", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z" + } + }, + "free": [ + "brands" + ] + }, + "globe": { + "search": { + "terms": [ + "all", + "coordinates", + "country", + "earth", + "global", + "gps", + "language", + "localize", + "location", + "map", + "online", + "place", + "planet", + "translate", + "travel", + "world" + ] + }, + "styles": [ + "solid" + ], + "label": "Globe", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z" + } + }, + "free": [ + "solid" + ] + }, + "globe-africa": { + "search": { + "terms": [ + "all", + "country", + "earth", + "global", + "gps", + "language", + "localize", + "location", + "map", + "online", + "place", + "planet", + "translate", + "travel", + "world" + ] + }, + "styles": [ + "solid" + ], + "label": "Globe with Africa shown", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z" + } + }, + "free": [ + "solid" + ] + }, + "globe-americas": { + "search": { + "terms": [ + "all", + "country", + "earth", + "global", + "gps", + "language", + "localize", + "location", + "map", + "online", + "place", + "planet", + "translate", + "travel", + "world" + ] + }, + "styles": [ + "solid" + ], + "label": "Globe with Americas shown", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z" + } + }, + "free": [ + "solid" + ] + }, + "globe-asia": { + "search": { + "terms": [ + "all", + "country", + "earth", + "global", + "gps", + "language", + "localize", + "location", + "map", + "online", + "place", + "planet", + "translate", + "travel", + "world" + ] + }, + "styles": [ + "solid" + ], + "label": "Globe with Asia shown", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z" + } + }, + "free": [ + "solid" + ] + }, + "globe-europe": { + "search": { + "terms": [ + "all", + "country", + "earth", + "global", + "gps", + "language", + "localize", + "location", + "map", + "online", + "place", + "planet", + "translate", + "travel", + "world" + ] + }, + "styles": [ + "solid" + ], + "label": "Globe with Europe shown", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z" + } + }, + "free": [ + "solid" + ] + }, + "gofore": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Gofore", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "400", + "512" + ], + "path": "M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z" + } + }, + "free": [ + "brands" + ] + }, + "golf-ball": { + "search": { + "terms": [ + "caddy", + "eagle", + "putt", + "tee" + ] + }, + "styles": [ + "solid" + ], + "label": "Golf Ball", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "416", + "512" + ], + "path": "M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z" + } + }, + "free": [ + "solid" + ] + }, + "goodreads": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Goodreads", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z" + } + }, + "free": [ + "brands" + ] + }, + "goodreads-g": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Goodreads G", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z" + } + }, + "free": [ + "brands" + ] + }, + "google": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Google Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "488", + "512" + ], + "path": "M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z" + } + }, + "free": [ + "brands" + ] + }, + "google-drive": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Google Drive", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z" + } + }, + "free": [ + "brands" + ] + }, + "google-pay": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Google Pay", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M105.72,215v41.25h57.1a49.66,49.66,0,0,1-21.14,32.6c-9.54,6.55-21.72,10.28-36,10.28-27.6,0-50.93-18.91-59.3-44.22a65.61,65.61,0,0,1,0-41l0,0c8.37-25.46,31.7-44.37,59.3-44.37a56.43,56.43,0,0,1,40.51,16.08L176.47,155a101.24,101.24,0,0,0-70.75-27.84,105.55,105.55,0,0,0-94.38,59.11,107.64,107.64,0,0,0,0,96.18v.15a105.41,105.41,0,0,0,94.38,59c28.47,0,52.55-9.53,70-25.91,20-18.61,31.41-46.15,31.41-78.91A133.76,133.76,0,0,0,205.38,215Zm389.41-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46,0-39.34,8.34-50.5,24.86l20.85,13.26q11.45-17,31.26-17a34.05,34.05,0,0,1,22.75,8.79A28.14,28.14,0,0,1,487.79,248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44,0-29.65,3.88-39.49,11.77s-14.82,18.31-14.82,31.56a39.74,39.74,0,0,0,13.94,31.27c9.25,8.34,21,12.51,34.79,12.51,16.29,0,29.21-7.3,39-21.89h1v17.72h22.61V250C510.25,233.45,505.26,220.34,495.13,211ZM475.9,300.3a37.32,37.32,0,0,1-26.57,11.16A28.61,28.61,0,0,1,431,305.21a19.41,19.41,0,0,1-7.77-15.63c0-7,3.22-12.81,9.54-17.42s14.53-7,24.07-7C470,265,480.3,268,487.64,273.94,487.64,284.07,483.68,292.85,475.9,300.3Zm-93.65-142A55.71,55.71,0,0,0,341.74,142H279.07V328.74H302.7V253.1h39c16,0,29.5-5.36,40.51-15.93.88-.89,1.76-1.79,2.65-2.68A54.45,54.45,0,0,0,382.25,158.26Zm-16.58,62.23a30.65,30.65,0,0,1-23.34,9.68H302.7V165h39.63a32,32,0,0,1,22.6,9.23A33.18,33.18,0,0,1,365.67,220.49ZM614.31,201,577.77,292.7h-.45L539.9,201H514.21L566,320.55l-29.35,64.32H561L640,201Z" + } + }, + "free": [ + "brands" + ] + }, + "google-play": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Google Play", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z" + } + }, + "free": [ + "brands" + ] + }, + "google-plus": { + "search": { + "terms": [ + "google-plus-circle", + "google-plus-official" + ] + }, + "styles": [ + "brands" + ], + "label": "Google Plus", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z" + } + }, + "free": [ + "brands" + ] + }, + "google-plus-g": { + "search": { + "terms": [ + "google-plus", + "social network" + ] + }, + "styles": [ + "brands" + ], + "label": "Google Plus G", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z" + } + }, + "free": [ + "brands" + ] + }, + "google-plus-square": { + "search": { + "terms": [ + "social network" + ] + }, + "styles": [ + "brands" + ], + "label": "Google Plus Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z" + } + }, + "free": [ + "brands" + ] + }, + "google-wallet": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Google Wallet", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z" + } + }, + "free": [ + "brands" + ] + }, + "gopuram": { + "search": { + "terms": [ + "building", + "entrance", + "hinduism", + "temple", + "tower" + ] + }, + "styles": [ + "solid" + ], + "label": "Gopuram", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "graduation-cap": { + "search": { + "terms": [ + "ceremony", + "college", + "graduate", + "learning", + "school", + "student" + ] + }, + "styles": [ + "solid" + ], + "label": "Graduation Cap", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z" + } + }, + "free": [ + "solid" + ] + }, + "gratipay": { + "search": { + "terms": [ + "favorite", + "heart", + "like", + "love" + ] + }, + "styles": [ + "brands" + ], + "label": "Gratipay (Gittip)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z" + } + }, + "free": [ + "brands" + ] + }, + "grav": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Grav", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z" + } + }, + "free": [ + "brands" + ] + }, + "greater-than": { + "search": { + "terms": [ + "arithmetic", + "compare", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Greater Than", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z" + } + }, + "free": [ + "solid" + ] + }, + "greater-than-equal": { + "search": { + "terms": [ + "arithmetic", + "compare", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Greater Than Equal To", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "grimace": { + "search": { + "terms": [ + "cringe", + "emoticon", + "face", + "teeth" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Grimacing Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin": { + "search": { + "terms": [ + "emoticon", + "face", + "laugh", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Grinning Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-alt": { + "search": { + "terms": [ + "emoticon", + "face", + "laugh", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Grinning Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-beam": { + "search": { + "terms": [ + "emoticon", + "face", + "laugh", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Grinning Face With Smiling Eyes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-beam-sweat": { + "search": { + "terms": [ + "embarass", + "emoticon", + "face", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Grinning Face With Sweat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "504", + "512" + ], + "path": "M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-hearts": { + "search": { + "terms": [ + "emoticon", + "face", + "love", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Smiling Face With Heart-Eyes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-squint": { + "search": { + "terms": [ + "emoticon", + "face", + "laugh", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Grinning Squinting Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-squint-tears": { + "search": { + "terms": [ + "emoticon", + "face", + "happy", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Rolling on the Floor Laughing", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-stars": { + "search": { + "terms": [ + "emoticon", + "face", + "star-struck" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Star-Struck", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-tears": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Face With Tears of Joy", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-tongue": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Face With Tongue", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-tongue-squint": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Squinting Face With Tongue", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-tongue-wink": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Winking Face With Tongue", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grin-wink": { + "search": { + "terms": [ + "emoticon", + "face", + "flirt", + "laugh", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Grinning Winking Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "grip-horizontal": { + "search": { + "terms": [ + "affordance", + "drag", + "drop", + "grab", + "handle" + ] + }, + "styles": [ + "solid" + ], + "label": "Grip Horizontal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "grip-lines": { + "search": { + "terms": [ + "affordance", + "drag", + "drop", + "grab", + "handle" + ] + }, + "styles": [ + "solid" + ], + "label": "Grip Lines", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "grip-lines-vertical": { + "search": { + "terms": [ + "affordance", + "drag", + "drop", + "grab", + "handle" + ] + }, + "styles": [ + "solid" + ], + "label": "Grip Lines Vertical", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z" + } + }, + "free": [ + "solid" + ] + }, + "grip-vertical": { + "search": { + "terms": [ + "affordance", + "drag", + "drop", + "grab", + "handle" + ] + }, + "styles": [ + "solid" + ], + "label": "Grip Vertical", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "gripfire": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Gripfire, Inc.", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z" + } + }, + "free": [ + "brands" + ] + }, + "grunt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Grunt", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z" + } + }, + "free": [ + "brands" + ] + }, + "guitar": { + "search": { + "terms": [ + "acoustic", + "instrument", + "music", + "rock", + "rock and roll", + "song", + "strings" + ] + }, + "styles": [ + "solid" + ], + "label": "Guitar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.63 39L473 9.37a32 32 0 0 0-45.26 0L381.46 55.7a35.14 35.14 0 0 0-8.53 13.79L360.77 106l-76.26 76.26c-12.16-8.76-25.5-15.74-40.1-19.14-33.45-7.78-67-.88-89.88 22a82.45 82.45 0 0 0-20.24 33.47c-6 18.56-23.21 32.69-42.15 34.46-23.7 2.27-45.73 11.45-62.61 28.44C-16.11 327-7.9 409 47.58 464.45S185 528 230.56 482.52c17-16.88 26.16-38.9 28.45-62.71 1.76-18.85 15.89-36.13 34.43-42.14a82.6 82.6 0 0 0 33.48-20.25c22.87-22.88 29.74-56.36 22-89.75-3.39-14.64-10.37-28-19.16-40.2L406 151.23l36.48-12.16a35.14 35.14 0 0 0 13.79-8.53l46.33-46.32a32 32 0 0 0 .03-45.22zM208 352a48 48 0 1 1 48-48 48 48 0 0 1-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "gulp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Gulp", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z" + } + }, + "free": [ + "brands" + ] + }, + "h-square": { + "search": { + "terms": [ + "directions", + "emergency", + "hospital", + "hotel", + "map" + ] + }, + "styles": [ + "solid" + ], + "label": "H Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "hacker-news": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Hacker News", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z" + } + }, + "free": [ + "brands" + ] + }, + "hacker-news-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Hacker News Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z" + } + }, + "free": [ + "brands" + ] + }, + "hackerrank": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Hackerrank", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z" + } + }, + "free": [ + "brands" + ] + }, + "hamburger": { + "search": { + "terms": [ + "bacon", + "beef", + "burger", + "burger king", + "cheeseburger", + "fast food", + "grill", + "ground beef", + "mcdonalds", + "sandwich" + ] + }, + "styles": [ + "solid" + ], + "label": "Hamburger", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z" + } + }, + "free": [ + "solid" + ] + }, + "hammer": { + "search": { + "terms": [ + "admin", + "fix", + "repair", + "settings", + "tool" + ] + }, + "styles": [ + "solid" + ], + "label": "Hammer", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z" + } + }, + "free": [ + "solid" + ] + }, + "hamsa": { + "search": { + "terms": [ + "amulet", + "christianity", + "islam", + "jewish", + "judaism", + "muslim", + "protection" + ] + }, + "styles": [ + "solid" + ], + "label": "Hamsa", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "hand-holding": { + "search": { + "terms": [ + "carry", + "lift" + ] + }, + "styles": [ + "solid" + ], + "label": "Hand Holding", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z" + } + }, + "free": [ + "solid" + ] + }, + "hand-holding-heart": { + "search": { + "terms": [ + "carry", + "charity", + "gift", + "lift", + "package" + ] + }, + "styles": [ + "solid" + ], + "label": "Hand Holding Heart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z" + } + }, + "free": [ + "solid" + ] + }, + "hand-holding-medical": { + "search": { + "terms": [ + "care", + "covid-19", + "donate", + "help" + ] + }, + "styles": [ + "solid" + ], + "label": "Hand Holding Medical Cross", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M159.88,175.82h64v64a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16v-64h64a16,16,0,0,0,16-16v-64a16,16,0,0,0-16-16h-64v-64a16,16,0,0,0-16-16h-64a16,16,0,0,0-16,16v64h-64a16,16,0,0,0-16,16v64A16,16,0,0,0,159.88,175.82ZM568.07,336.13a39.91,39.91,0,0,0-55.93-8.47L392.47,415.84H271.86a16,16,0,0,1,0-32H350.1c16,0,30.75-10.87,33.37-26.61a32.06,32.06,0,0,0-31.62-37.38h-160a117.7,117.7,0,0,0-74.12,26.25l-46.5,37.74H15.87a16.11,16.11,0,0,0-16,16v96a16.11,16.11,0,0,0,16,16h347a104.8,104.8,0,0,0,61.7-20.27L559.6,392A40,40,0,0,0,568.07,336.13Z" + } + }, + "free": [ + "solid" + ] + }, + "hand-holding-usd": { + "search": { + "terms": [ + "$", + "carry", + "dollar sign", + "donation", + "giving", + "lift", + "money", + "price" + ] + }, + "styles": [ + "solid" + ], + "label": "Hand Holding US Dollar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M271.06,144.3l54.27,14.3a8.59,8.59,0,0,1,6.63,8.1c0,4.6-4.09,8.4-9.12,8.4h-35.6a30,30,0,0,1-11.19-2.2c-5.24-2.2-11.28-1.7-15.3,2l-19,17.5a11.68,11.68,0,0,0-2.25,2.66,11.42,11.42,0,0,0,3.88,15.74,83.77,83.77,0,0,0,34.51,11.5V240c0,8.8,7.83,16,17.37,16h17.37c9.55,0,17.38-7.2,17.38-16V222.4c32.93-3.6,57.84-31,53.5-63-3.15-23-22.46-41.3-46.56-47.7L282.68,97.4a8.59,8.59,0,0,1-6.63-8.1c0-4.6,4.09-8.4,9.12-8.4h35.6A30,30,0,0,1,332,83.1c5.23,2.2,11.28,1.7,15.3-2l19-17.5A11.31,11.31,0,0,0,368.47,61a11.43,11.43,0,0,0-3.84-15.78,83.82,83.82,0,0,0-34.52-11.5V16c0-8.8-7.82-16-17.37-16H295.37C285.82,0,278,7.2,278,16V33.6c-32.89,3.6-57.85,31-53.51,63C227.63,119.6,247,137.9,271.06,144.3ZM565.27,328.1c-11.8-10.7-30.2-10-42.6,0L430.27,402a63.64,63.64,0,0,1-40,14H272a16,16,0,0,1,0-32h78.29c15.9,0,30.71-10.9,33.25-26.6a31.2,31.2,0,0,0,.46-5.46A32,32,0,0,0,352,320H192a117.66,117.66,0,0,0-74.1,26.29L71.4,384H16A16,16,0,0,0,0,400v96a16,16,0,0,0,16,16H372.77a64,64,0,0,0,40-14L564,377a32,32,0,0,0,1.28-48.9Z" + } + }, + "free": [ + "solid" + ] + }, + "hand-holding-water": { + "search": { + "terms": [ + "carry", + "covid-19", + "drought", + "grow", + "lift" + ] + }, + "styles": [ + "solid" + ], + "label": "Hand Holding Water", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 256c53 0 96-42.1 96-94 0-40-57.1-120.7-83.2-155.6-6.4-8.5-19.2-8.5-25.6 0C249.1 41.3 192 122 192 162c0 51.9 43 94 96 94zm277.3 72.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z" + } + }, + "free": [ + "solid" + ] + }, + "hand-lizard": { + "search": { + "terms": [ + "game", + "roshambo" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Lizard (Hand)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-middle-finger": { + "search": { + "terms": [ + "flip the bird", + "gesture", + "hate", + "rude" + ] + }, + "styles": [ + "solid" + ], + "label": "Hand with Middle Finger Raised", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z" + } + }, + "free": [ + "solid" + ] + }, + "hand-paper": { + "search": { + "terms": [ + "game", + "halt", + "roshambo", + "stop" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Paper (Hand)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-peace": { + "search": { + "terms": [ + "rest", + "truce" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Peace (Hand)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-point-down": { + "search": { + "terms": [ + "finger", + "hand-o-down", + "point" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Hand Pointing Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-point-left": { + "search": { + "terms": [ + "back", + "finger", + "hand-o-left", + "left", + "point", + "previous" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Hand Pointing Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-point-right": { + "search": { + "terms": [ + "finger", + "forward", + "hand-o-right", + "next", + "point", + "right" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Hand Pointing Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-point-up": { + "search": { + "terms": [ + "finger", + "hand-o-up", + "point" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Hand Pointing Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-pointer": { + "search": { + "terms": [ + "arrow", + "cursor", + "select" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Pointer (Hand)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-rock": { + "search": { + "terms": [ + "fist", + "game", + "roshambo" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Rock (Hand)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-scissors": { + "search": { + "terms": [ + "cut", + "game", + "roshambo" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Scissors (Hand)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hand-sparkles": { + "search": { + "terms": [ + "clean", + "covid-19", + "hygiene", + "magic", + "soap", + "wash" + ] + }, + "styles": [ + "solid" + ], + "label": "Hand Sparkles", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M106.66,170.64l.09,0,49.55-20.65a7.32,7.32,0,0,0,3.68-6h0a7.29,7.29,0,0,0-3.68-6l-49.57-20.67-.07,0L86,67.68a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L3.7,138A7.29,7.29,0,0,0,0,144H0a7.32,7.32,0,0,0,3.68,6L53.27,170.6l.07,0L74,220.26a6.65,6.65,0,0,0,11.92,0l20.69-49.62ZM471.38,467.41l-1-.42-1-.5a38.67,38.67,0,0,1,0-69.14l1-.49,1-.43,37.49-15.63,15.63-37.48.41-1,.47-.95c3.85-7.74,10.58-13.63,18.35-17.34,0-1.33.25-2.69.27-4V144a32,32,0,0,0-64,0v72a8,8,0,0,1-8,8H456a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H360a8,8,0,0,1-8-8V32a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H264a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0v241l-23.59-32.49a40,40,0,0,0-64.71,47.09L229.3,492.21A48.07,48.07,0,0,0,268.09,512H465.7c19.24,0,35.65-11.73,43.24-28.79l-.07-.17ZM349.79,339.52,320,351.93l-12.42,29.78a4,4,0,0,1-7.15,0L288,351.93l-29.79-12.41a4,4,0,0,1,0-7.16L288,319.94l12.42-29.78a4,4,0,0,1,7.15,0L320,319.94l29.79,12.42a4,4,0,0,1,0,7.16ZM640,431.91a7.28,7.28,0,0,0-3.68-6l-49.57-20.67-.07,0L566,355.63a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L483.7,426a7.28,7.28,0,0,0-3.68,6h0a7.29,7.29,0,0,0,3.68,5.95l49.57,20.67.07,0L554,508.21a6.65,6.65,0,0,0,11.92,0l20.69-49.62h0l.09,0,49.55-20.66a7.29,7.29,0,0,0,3.68-5.95h0Z" + } + }, + "free": [ + "solid" + ] + }, + "hand-spock": { + "search": { + "terms": [ + "live long", + "prosper", + "salute", + "star trek", + "vulcan" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Spock (Hand)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M510.9005,145.27027,442.604,432.09391A103.99507,103.99507,0,0,1,341.43745,512H214.074a135.96968,135.96968,0,0,1-93.18489-36.95291L12.59072,373.12723a39.992,39.992,0,0,1,54.8122-58.24988l60.59342,57.02528v0a283.24849,283.24849,0,0,0-11.6703-80.46734L73.63726,147.36011a40.00575,40.00575,0,1,1,76.71833-22.7187l37.15458,125.39477a8.33113,8.33113,0,0,0,16.05656-4.4414L153.26183,49.95406A39.99638,39.99638,0,1,1,230.73015,30.0166l56.09491,218.15825a10.42047,10.42047,0,0,0,20.30018-.501L344.80766,63.96966a40.052,40.052,0,0,1,51.30245-30.0893c19.86073,6.2998,30.86262,27.67378,26.67564,48.08487l-33.83869,164.966a7.55172,7.55172,0,0,0,14.74406,3.2666l29.3973-123.45874a39.99414,39.99414,0,1,1,77.81208,18.53121Z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M501.03053,116.17605c-19.39059-31.50779-51.24406-35.72849-66.31044-35.01756-14.11325-50.81051-62.0038-54.08-70.73816-54.08a74.03091,74.03091,0,0,0-72.23816,58.916l-4.64648,22.66014-13.68357-53.207c-9.09569-35.37107-46.412-64.05074-89.66-53.07223a73.89749,73.89749,0,0,0-55.121,78.94722,73.68273,73.68273,0,0,0-64.8495,94.42181l24.35933,82.19721c-38.24017-7.54492-62.79677,16.18358-68.11512,21.84764a73.6791,73.6791,0,0,0,3.19921,104.19329l91.36509,85.9765A154.164,154.164,0,0,0,220.62279,512h107.4549A127.30079,127.30079,0,0,0,452.3392,413.86139l57.623-241.96272A73.20274,73.20274,0,0,0,501.03053,116.17605Zm-37.7597,44.60544L405.64788,402.74812a79.46616,79.46616,0,0,1-77.57019,61.25972H220.62279a106.34052,106.34052,0,0,1-73.1366-28.998l-91.369-85.98041C31.34381,325.72669,66.61133,288.131,91.39644,311.5392l51.123,48.10739c5.42577,5.10937,13.48239.71679,13.48239-5.82617a246.79914,246.79914,0,0,0-10.17771-70.1523l-36.01362-121.539c-9.7324-32.88279,39.69916-47.27145,49.38664-14.625l31.3437,105.77923c5.59374,18.90428,33.78119,10.71288,28.9648-8.00781L177.06427,80.23662c-8.50389-33.1035,41.43157-45.64646,49.86515-12.83593l47.32609,184.035c4.42773,17.24218,29.16207,16.5039,32.71089-.80468l31.791-154.9706c6.81054-33.1074,57.51748-24.10741,50.11906,11.96288L360.32764,246.78924c-3.72265,18.10936,23.66793,24.63084,28.05659,6.21679L413.185,148.85962C421.1498,115.512,471.14,127.79713,463.27083,160.78149Z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hands": { + "search": { + "terms": [ + "carry", + "hold", + "lift" + ] + }, + "styles": [ + "solid" + ], + "label": "Hands", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "hands-helping": { + "search": { + "terms": [ + "aid", + "assistance", + "handshake", + "partnership", + "volunteering" + ] + }, + "styles": [ + "solid" + ], + "label": "Helping Hands", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z" + } + }, + "free": [ + "solid" + ] + }, + "hands-wash": { + "search": { + "terms": [ + "covid-19", + "hygiene", + "soap", + "wash" + ] + }, + "styles": [ + "solid" + ], + "label": "Hands Wash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M496,224a48,48,0,1,0-48-48A48,48,0,0,0,496,224ZM311.47,178.45A56.77,56.77,0,0,1,328,176a56,56,0,0,1,19,3.49l15.35-48.61A24,24,0,0,0,342,99.74c-11.53-1.35-22.21,6.44-25.71,17.51l-20.9,66.17ZM93.65,386.33c.8-.19,1.54-.54,2.35-.71V359.93a156,156,0,0,1,107.06-148l73.7-22.76L310.92,81.05a24,24,0,0,0-20.33-31.11c-11.53-1.34-22.22,6.45-25.72,17.52L231.42,173.88a8,8,0,0,1-15.26-4.83L259.53,31.26A24,24,0,0,0,239.2.15C227.67-1.19,217,6.6,213.49,17.66L165.56,169.37a8,8,0,1,1-15.26-4.82l38.56-122a24,24,0,0,0-20.33-31.11C157,10,146.32,17.83,142.82,28.9l-60,189.85L80.76,168.7A24,24,0,0,0,56.9,144.55c-13.23-.05-24.72,10.54-24.9,23.86V281.14A123.69,123.69,0,0,0,93.65,386.33ZM519.1,336H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,279.84,498.71,272,487.1,272H288l47.09-17.06a24,24,0,0,0-14.18-45.88L213.19,242.31A123.88,123.88,0,0,0,128,360v25.65a79.78,79.78,0,0,1,58,108.63A118.9,118.9,0,0,0,248,512H456a24,24,0,0,0,23.54-28.76C477.35,471.84,466.71,464,455.1,464H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,407.84,498.71,400,487.1,400H360a8,8,0,0,1,0-16H520a24,24,0,0,0,23.54-28.76C541.35,343.84,530.71,336,519.1,336ZM416,64a32,32,0,1,0-32-32A32,32,0,0,0,416,64ZM112,416a48,48,0,1,0,48,48A48,48,0,0,0,112,416Z" + } + }, + "free": [ + "solid" + ] + }, + "handshake": { + "search": { + "terms": [ + "agreement", + "greeting", + "meeting", + "partnership" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Handshake", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "handshake-alt-slash": { + "search": { + "terms": [ + "broken", + "covid-19", + "social distance" + ] + }, + "styles": [ + "solid" + ], + "label": "Handshake Alternate Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M358.59,195.6,504.2,313.8a63.4,63.4,0,0,1,22.21,37.91H624a16.05,16.05,0,0,0,16-16V143.91A16,16,0,0,0,624,128H512L457.41,73.41A32,32,0,0,0,434.8,64H348.91a32,32,0,0,0-21.61,8.41l-88.12,80.68-25.69-19.85L289.09,64H205.3a32,32,0,0,0-22.6,9.41l-20.34,20.3L45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.54,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45L303.4,202.72l32.69-29.92,27-24.7a16,16,0,0,1,21.61,23.61ZM16,128A16.05,16.05,0,0,0,0,144V335.91a16,16,0,0,0,16,16H146.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L23.56,128Z" + } + }, + "free": [ + "solid" + ] + }, + "handshake-slash": { + "search": { + "terms": [ + "broken", + "covid-19", + "social distance" + ] + }, + "styles": [ + "solid" + ], + "label": "Handshake Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M0,128.21V384H64a32,32,0,0,0,32-32V184L23.83,128.21ZM48,320.1a16,16,0,1,1-16,16A16,16,0,0,1,48,320.1Zm80,31.81h18.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L128,208.72Zm416-223.7V352.1a32,32,0,0,0,32,32h64V128.21ZM592,352.1a16,16,0,1,1,16-16A16,16,0,0,1,592,352.1ZM303.33,202.67l59.58-54.57a16,16,0,0,1,21.59,23.61L358.41,195.6,504,313.8a73.08,73.08,0,0,1,7.91,7.7V128L457.3,73.41A31.76,31.76,0,0,0,434.7,64H348.8a31.93,31.93,0,0,0-21.6,8.41l-88.07,80.64-25.64-19.81L289.09,64H205.3a32,32,0,0,0-22.6,9.41L162.36,93.72,45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.65-25.27a16,16,0,0,0-2.82-22.45Z" + } + }, + "free": [ + "solid" + ] + }, + "hanukiah": { + "search": { + "terms": [ + "candle", + "hanukkah", + "jewish", + "judaism", + "light" + ] + }, + "styles": [ + "solid" + ], + "label": "Hanukiah", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z" + } + }, + "free": [ + "solid" + ] + }, + "hard-hat": { + "search": { + "terms": [ + "construction", + "hardhat", + "helmet", + "safety" + ] + }, + "styles": [ + "solid" + ], + "label": "Hard Hat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "hashtag": { + "search": { + "terms": [ + "Twitter", + "instagram", + "pound", + "social media", + "tag" + ] + }, + "styles": [ + "solid" + ], + "label": "Hashtag", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z" + } + }, + "free": [ + "solid" + ] + }, + "hat-cowboy": { + "search": { + "terms": [ + "buckaroo", + "horse", + "jackeroo", + "john b.", + "old west", + "pardner", + "ranch", + "rancher", + "rodeo", + "western", + "wrangler" + ] + }, + "styles": [ + "solid" + ], + "label": "Cowboy Hat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M490 296.9C480.51 239.51 450.51 64 392.3 64c-14 0-26.49 5.93-37 14a58.21 58.21 0 0 1-70.58 0c-10.51-8-23-14-37-14-58.2 0-88.2 175.47-97.71 232.88C188.81 309.47 243.73 320 320 320s131.23-10.51 170-23.1zm142.9-37.18a16 16 0 0 0-19.75 1.5c-1 .9-101.27 90.78-293.16 90.78-190.82 0-292.22-89.94-293.24-90.84A16 16 0 0 0 1 278.53C1.73 280.55 78.32 480 320 480s318.27-199.45 319-201.47a16 16 0 0 0-6.09-18.81z" + } + }, + "free": [ + "solid" + ] + }, + "hat-cowboy-side": { + "search": { + "terms": [ + "buckaroo", + "horse", + "jackeroo", + "john b.", + "old west", + "pardner", + "ranch", + "rancher", + "rodeo", + "western", + "wrangler" + ] + }, + "styles": [ + "solid" + ], + "label": "Cowboy Hat Side", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M260.8 291.06c-28.63-22.94-62-35.06-96.4-35.06C87 256 21.47 318.72 1.43 412.06c-3.55 16.6-.43 33.83 8.57 47.3C18.75 472.47 31.83 480 45.88 480H592c-103.21 0-155-37.07-233.19-104.46zm234.65-18.29L468.4 116.2A64 64 0 0 0 392 64.41L200.85 105a64 64 0 0 0-50.35 55.79L143.61 226c6.9-.83 13.7-2 20.79-2 41.79 0 82 14.55 117.29 42.82l98 84.48C450.76 412.54 494.9 448 592 448a48 48 0 0 0 48-48c0-25.39-29.6-119.33-144.55-127.23z" + } + }, + "free": [ + "solid" + ] + }, + "hat-wizard": { + "search": { + "terms": [ + "Dungeons & Dragons", + "accessory", + "buckle", + "clothing", + "d&d", + "dnd", + "fantasy", + "halloween", + "head", + "holiday", + "mage", + "magic", + "pointy", + "witch" + ] + }, + "styles": [ + "solid" + ], + "label": "Wizard's Hat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z" + } + }, + "free": [ + "solid" + ] + }, + "hdd": { + "search": { + "terms": [ + "cpu", + "hard drive", + "harddrive", + "machine", + "save", + "storage" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "HDD", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "head-side-cough": { + "search": { + "terms": [ + "cough", + "covid-19", + "germs", + "lungs", + "respiratory", + "sick" + ] + }, + "styles": [ + "solid" + ], + "label": "Head Side Cough", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304ZM552,416a24,24,0,1,0,24,24A24,24,0,0,0,552,416Zm-64-56a24,24,0,1,0,24,24A24,24,0,0,0,488,360ZM616,464a24,24,0,1,0,24,24A24,24,0,0,0,616,464Zm0-104a24,24,0,1,0,24,24A24,24,0,0,0,616,360Zm-64-40a24,24,0,1,0,24,24A24,24,0,0,0,552,320Zm-74.78-45c-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192C86,0,0,86,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320a32,32,0,0,1,0-64h96V320h32A32,32,0,0,0,477.22,275ZM288,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,288,224Z" + } + }, + "free": [ + "solid" + ] + }, + "head-side-cough-slash": { + "search": { + "terms": [ + "cough", + "covid-19", + "germs", + "lungs", + "respiratory", + "sick" + ] + }, + "styles": [ + "solid" + ], + "label": "Head Side-cough-slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M454.11,319.21c19.56-3.81,31.62-25,23.11-44.21-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192A190.64,190.64,0,0,0,84.18,33.3L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM313.39,210.45,263.61,172c5.88-7.14,14.43-12,24.36-12a32.06,32.06,0,0,1,32,32C320,199,317.24,205.17,313.39,210.45ZM616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304Zm-64,64a24,24,0,1,0-24-24A24,24,0,0,0,552,368ZM288,384a32,32,0,0,1,32-32h19.54L20.73,105.59A190.86,190.86,0,0,0,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320A32,32,0,0,1,288,384Zm328-24a24,24,0,1,0,24,24A24,24,0,0,0,616,360Z" + } + }, + "free": [ + "solid" + ] + }, + "head-side-mask": { + "search": { + "terms": [ + "breath", + "covid-19", + "filter", + "respirator", + "virus" + ] + }, + "styles": [ + "solid" + ], + "label": "Head Side Mask", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M.15,184.42C-2.17,244.21,23,298.06,64,334.88V512H224V316.51L3.67,156.25A182.28,182.28,0,0,0,.15,184.42ZM509.22,275c-21-47.12-48.5-151.75-73.12-186.75A208.11,208.11,0,0,0,266.11,0H200C117,0,42.48,50.57,13.25,123.65L239.21,288H511.76A31.35,31.35,0,0,0,509.22,275ZM320,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,320,224Zm16,144H496l16-48H256V512H401.88a64,64,0,0,0,60.71-43.76L464,464H336a16,16,0,0,1,0-32H474.67l10.67-32H336a16,16,0,0,1,0-32Z" + } + }, + "free": [ + "solid" + ] + }, + "head-side-virus": { + "search": { + "terms": [ + "cold", + "covid-19", + "flu", + "sick" + ] + }, + "styles": [ + "solid" + ], + "label": "Head Side Virus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M272,240a16,16,0,1,0,16,16A16,16,0,0,0,272,240Zm-64-64a16,16,0,1,0,16,16A16,16,0,0,0,208,176Zm301.2,99c-20.93-47.12-48.43-151.73-73.07-186.75A207.9,207.9,0,0,0,266.09,0H192C86,0,0,86,0,192A191.23,191.23,0,0,0,64,334.81V512H320V448h64a64,64,0,0,0,64-64V320H480A32,32,0,0,0,509.2,275ZM368,240H355.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C290.47,297.09,256,311.37,256,339.88V352a16,16,0,0,1-32,0V339.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H112a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V96a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C313.09,173.53,327.37,208,355.88,208H368a16,16,0,0,1,0,32Z" + } + }, + "free": [ + "solid" + ] + }, + "heading": { + "search": { + "terms": [ + "format", + "header", + "text", + "title" + ] + }, + "styles": [ + "solid" + ], + "label": "heading", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "headphones": { + "search": { + "terms": [ + "audio", + "listen", + "music", + "sound", + "speaker" + ] + }, + "styles": [ + "solid" + ], + "label": "headphones", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z" + } + }, + "free": [ + "solid" + ] + }, + "headphones-alt": { + "search": { + "terms": [ + "audio", + "listen", + "music", + "sound", + "speaker" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Headphones", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z" + } + }, + "free": [ + "solid" + ] + }, + "headset": { + "search": { + "terms": [ + "audio", + "gamer", + "gaming", + "listen", + "live chat", + "microphone", + "shot caller", + "sound", + "support", + "telemarketer" + ] + }, + "styles": [ + "solid" + ], + "label": "Headset", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z" + } + }, + "free": [ + "solid" + ] + }, + "heart": { + "search": { + "terms": [ + "favorite", + "like", + "love", + "relationship", + "valentine" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Heart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "heart-broken": { + "search": { + "terms": [ + "breakup", + "crushed", + "dislike", + "dumped", + "grief", + "love", + "lovesick", + "relationship", + "sad" + ] + }, + "styles": [ + "solid" + ], + "label": "Heart Broken", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z" + } + }, + "free": [ + "solid" + ] + }, + "heartbeat": { + "search": { + "terms": [ + "ekg", + "electrocardiogram", + "health", + "lifeline", + "vital signs" + ] + }, + "styles": [ + "solid" + ], + "label": "Heartbeat", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z" + } + }, + "free": [ + "solid" + ] + }, + "helicopter": { + "search": { + "terms": [ + "airwolf", + "apache", + "chopper", + "flight", + "fly", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Helicopter", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z" + } + }, + "free": [ + "solid" + ] + }, + "highlighter": { + "search": { + "terms": [ + "edit", + "marker", + "sharpie", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Highlighter", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "544", + "512" + ], + "path": "M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z" + } + }, + "free": [ + "solid" + ] + }, + "hiking": { + "search": { + "terms": [ + "activity", + "backpack", + "fall", + "fitness", + "outdoors", + "person", + "seasonal", + "walking" + ] + }, + "styles": [ + "solid" + ], + "label": "Hiking", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z" + } + }, + "free": [ + "solid" + ] + }, + "hippo": { + "search": { + "terms": [ + "animal", + "fauna", + "hippopotamus", + "hungry", + "mammal" + ] + }, + "styles": [ + "solid" + ], + "label": "Hippo", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "hips": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Hips", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z" + } + }, + "free": [ + "brands" + ] + }, + "hire-a-helper": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "HireAHelper", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z" + } + }, + "free": [ + "brands" + ] + }, + "history": { + "search": { + "terms": [ + "Rewind", + "clock", + "reverse", + "time", + "time machine" + ] + }, + "styles": [ + "solid" + ], + "label": "History", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z" + } + }, + "free": [ + "solid" + ] + }, + "hockey-puck": { + "search": { + "terms": [ + "ice", + "nhl", + "sport" + ] + }, + "styles": [ + "solid" + ], + "label": "Hockey Puck", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z" + } + }, + "free": [ + "solid" + ] + }, + "holly-berry": { + "search": { + "terms": [ + "catwoman", + "christmas", + "decoration", + "flora", + "halle", + "holiday", + "ororo munroe", + "plant", + "storm", + "xmas" + ] + }, + "styles": [ + "solid" + ], + "label": "Holly Berry", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z" + } + }, + "free": [ + "solid" + ] + }, + "home": { + "search": { + "terms": [ + "abode", + "building", + "house", + "main" + ] + }, + "styles": [ + "solid" + ], + "label": "home", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z" + } + }, + "free": [ + "solid" + ] + }, + "hooli": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Hooli", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z" + } + }, + "free": [ + "brands" + ] + }, + "hornbill": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Hornbill", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z" + } + }, + "free": [ + "brands" + ] + }, + "horse": { + "search": { + "terms": [ + "equus", + "fauna", + "mammmal", + "mare", + "neigh", + "pony" + ] + }, + "styles": [ + "solid" + ], + "label": "Horse", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "horse-head": { + "search": { + "terms": [ + "equus", + "fauna", + "mammmal", + "mare", + "neigh", + "pony" + ] + }, + "styles": [ + "solid" + ], + "label": "Horse Head", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "hospital": { + "search": { + "terms": [ + "building", + "covid-19", + "emergency room", + "medical center" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "hospital", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hospital-alt": { + "search": { + "terms": [ + "building", + "covid-19", + "emergency room", + "medical center" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Hospital", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z" + } + }, + "free": [ + "solid" + ] + }, + "hospital-symbol": { + "search": { + "terms": [ + "clinic", + "covid-19", + "emergency", + "map" + ] + }, + "styles": [ + "solid" + ], + "label": "Hospital Symbol", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z" + } + }, + "free": [ + "solid" + ] + }, + "hospital-user": { + "search": { + "terms": [ + "covid-19", + "doctor", + "network", + "patient", + "primary care" + ] + }, + "styles": [ + "solid" + ], + "label": "Hospital with User", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M480 320a96 96 0 1 0-96-96 96 96 0 0 0 96 96zm48 32a22.88 22.88 0 0 0-7.06 1.09 124.76 124.76 0 0 1-81.89 0A22.82 22.82 0 0 0 432 352a112 112 0 0 0-112 112.62c.14 26.26 21.73 47.38 48 47.38h224c26.27 0 47.86-21.12 48-47.38A112 112 0 0 0 528 352zm-198.09 10.45A145.19 145.19 0 0 1 352 344.62V128a32 32 0 0 0-32-32h-32V32a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v64H32a32 32 0 0 0-32 32v368a16 16 0 0 0 16 16h288.31A78.62 78.62 0 0 1 288 464.79a143.06 143.06 0 0 1 41.91-102.34zM144 404a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm48-122a6 6 0 0 1-6 6h-20a6 6 0 0 1-6-6v-26h-26a6 6 0 0 1-6-6v-20a6 6 0 0 1 6-6h26V70a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v26h26a6 6 0 0 1 6 6v20a6 6 0 0 1-6 6h-26zm80 250a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12z" + } + }, + "free": [ + "solid" + ] + }, + "hot-tub": { + "search": { + "terms": [ + "bath", + "jacuzzi", + "massage", + "sauna", + "spa" + ] + }, + "styles": [ + "solid" + ], + "label": "Hot Tub", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z" + } + }, + "free": [ + "solid" + ] + }, + "hotdog": { + "search": { + "terms": [ + "bun", + "chili", + "frankfurt", + "frankfurter", + "kosher", + "polish", + "sandwich", + "sausage", + "vienna", + "weiner" + ] + }, + "styles": [ + "solid" + ], + "label": "Hot Dog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z" + } + }, + "free": [ + "solid" + ] + }, + "hotel": { + "search": { + "terms": [ + "building", + "inn", + "lodging", + "motel", + "resort", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Hotel", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z" + } + }, + "free": [ + "solid" + ] + }, + "hotjar": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Hotjar", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z" + } + }, + "free": [ + "brands" + ] + }, + "hourglass": { + "search": { + "terms": [ + "hour", + "minute", + "sand", + "stopwatch", + "time" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Hourglass", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "hourglass-end": { + "search": { + "terms": [ + "hour", + "minute", + "sand", + "stopwatch", + "time" + ] + }, + "styles": [ + "solid" + ], + "label": "Hourglass End", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z" + } + }, + "free": [ + "solid" + ] + }, + "hourglass-half": { + "search": { + "terms": [ + "hour", + "minute", + "sand", + "stopwatch", + "time" + ] + }, + "styles": [ + "solid" + ], + "label": "Hourglass Half", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z" + } + }, + "free": [ + "solid" + ] + }, + "hourglass-start": { + "search": { + "terms": [ + "hour", + "minute", + "sand", + "stopwatch", + "time" + ] + }, + "styles": [ + "solid" + ], + "label": "Hourglass Start", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z" + } + }, + "free": [ + "solid" + ] + }, + "house-damage": { + "search": { + "terms": [ + "building", + "devastation", + "disaster", + "home", + "insurance" + ] + }, + "styles": [ + "solid" + ], + "label": "Damaged House", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z" + } + }, + "free": [ + "solid" + ] + }, + "house-user": { + "search": { + "terms": [ + "covid-19", + "home", + "isolation", + "quarantine" + ] + }, + "styles": [ + "solid" + ], + "label": "House User", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M570.69,236.27,512,184.44V48a16,16,0,0,0-16-16H432a16,16,0,0,0-16,16V99.67L314.78,10.3C308.5,4.61,296.53,0,288,0s-20.46,4.61-26.74,10.3l-256,226A18.27,18.27,0,0,0,0,248.2a18.64,18.64,0,0,0,4.09,10.71L25.5,282.7a21.14,21.14,0,0,0,12,5.3,21.67,21.67,0,0,0,10.69-4.11l15.9-14V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V269.88l15.91,14A21.94,21.94,0,0,0,538.63,288a20.89,20.89,0,0,0,11.87-5.31l21.41-23.81A21.64,21.64,0,0,0,576,248.19,21,21,0,0,0,570.69,236.27ZM288,176a64,64,0,1,1-64,64A64,64,0,0,1,288,176ZM400,448H176a16,16,0,0,1-16-16,96,96,0,0,1,96-96h64a96,96,0,0,1,96,96A16,16,0,0,1,400,448Z" + } + }, + "free": [ + "solid" + ] + }, + "houzz": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Houzz", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z" + } + }, + "free": [ + "brands" + ] + }, + "hryvnia": { + "search": { + "terms": [ + "currency", + "money", + "ukraine", + "ukrainian" + ] + }, + "styles": [ + "solid" + ], + "label": "Hryvnia", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z" + } + }, + "free": [ + "solid" + ] + }, + "html5": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "HTML 5 Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z" + } + }, + "free": [ + "brands" + ] + }, + "hubspot": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "HubSpot", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z" + } + }, + "free": [ + "brands" + ] + }, + "i-cursor": { + "search": { + "terms": [ + "editing", + "i-beam", + "type", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "I Beam Cursor", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z" + } + }, + "free": [ + "solid" + ] + }, + "ice-cream": { + "search": { + "terms": [ + "chocolate", + "cone", + "dessert", + "frozen", + "scoop", + "sorbet", + "vanilla", + "yogurt" + ] + }, + "styles": [ + "solid" + ], + "label": "Ice Cream", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z" + } + }, + "free": [ + "solid" + ] + }, + "icicles": { + "search": { + "terms": [ + "cold", + "frozen", + "hanging", + "ice", + "seasonal", + "sharp" + ] + }, + "styles": [ + "solid" + ], + "label": "Icicles", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z" + } + }, + "free": [ + "solid" + ] + }, + "icons": { + "search": { + "terms": [ + "bolt", + "emoji", + "heart", + "image", + "music", + "photo", + "symbols" + ] + }, + "styles": [ + "solid" + ], + "label": "Icons", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z" + } + }, + "free": [ + "solid" + ] + }, + "id-badge": { + "search": { + "terms": [ + "address", + "contact", + "identification", + "license", + "profile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Identification Badge", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "id-card": { + "search": { + "terms": [ + "contact", + "demographics", + "document", + "identification", + "issued", + "profile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Identification Card", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "id-card-alt": { + "search": { + "terms": [ + "contact", + "demographics", + "document", + "identification", + "issued", + "profile" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Identification Card", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z" + } + }, + "free": [ + "solid" + ] + }, + "ideal": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "iDeal", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z" + } + }, + "free": [ + "brands" + ] + }, + "igloo": { + "search": { + "terms": [ + "dome", + "dwelling", + "eskimo", + "home", + "house", + "ice", + "snow" + ] + }, + "styles": [ + "solid" + ], + "label": "Igloo", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z" + } + }, + "free": [ + "solid" + ] + }, + "image": { + "search": { + "terms": [ + "album", + "landscape", + "photo", + "picture" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Image", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "images": { + "search": { + "terms": [ + "album", + "landscape", + "photo", + "picture" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Images", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "imdb": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "IMDB", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.3 229.2H21c.1-.1.2-.3.3-.4zM97 319.8H64V192h33zm113.2 0h-28.7v-86.4l-11.6 86.4h-20.6l-12.2-84.5v84.5h-29V192h42.8c3.3 19.8 6 39.9 8.7 59.9l7.6-59.9h43zm11.4 0V192h24.6c17.6 0 44.7-1.6 49 20.9 1.7 7.6 1.4 16.3 1.4 24.4 0 88.5 11.1 82.6-75 82.5zm160.9-29.2c0 15.7-2.4 30.9-22.2 30.9-9 0-15.2-3-20.9-9.8l-1.9 8.1h-29.8V192h31.7v41.7c6-6.5 12-9.2 20.9-9.2 21.4 0 22.2 12.8 22.2 30.1zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2.3 10.3-8.7 10.3-18.4zm85.5 26.1c0-5.4 1.1-12.7-6.2-12.7-6 0-4.9 8.9-4.9 12.7 0 .6-1.1 39.6 1.1 44.7.8 1.6 2.2 2.4 3.8 2.4 7.8 0 6.2-9 6.2-14.4z" + } + }, + "free": [ + "brands" + ] + }, + "inbox": { + "search": { + "terms": [ + "archive", + "desk", + "email", + "mail", + "message" + ] + }, + "styles": [ + "solid" + ], + "label": "inbox", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z" + } + }, + "free": [ + "solid" + ] + }, + "indent": { + "search": { + "terms": [ + "align", + "justify", + "paragraph", + "tab" + ] + }, + "styles": [ + "solid" + ], + "label": "Indent", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "industry": { + "search": { + "terms": [ + "building", + "factory", + "industrial", + "manufacturing", + "mill", + "warehouse" + ] + }, + "styles": [ + "solid" + ], + "label": "Industry", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z" + } + }, + "free": [ + "solid" + ] + }, + "infinity": { + "search": { + "terms": [ + "eternity", + "forever", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Infinity", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z" + } + }, + "free": [ + "solid" + ] + }, + "info": { + "search": { + "terms": [ + "details", + "help", + "information", + "more", + "support" + ] + }, + "styles": [ + "solid" + ], + "label": "Info", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "192", + "512" + ], + "path": "M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z" + } + }, + "free": [ + "solid" + ] + }, + "info-circle": { + "search": { + "terms": [ + "details", + "help", + "information", + "more", + "support" + ] + }, + "styles": [ + "solid" + ], + "label": "Info Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z" + } + }, + "free": [ + "solid" + ] + }, + "instagram": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Instagram", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z" + } + }, + "free": [ + "brands" + ] + }, + "instagram-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Instagram Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224,202.66A53.34,53.34,0,1,0,277.36,256,53.38,53.38,0,0,0,224,202.66Zm124.71-41a54,54,0,0,0-30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,329.26,99.32,350.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71.05,6.43-94.33S357.1,182.74,348.75,161.67ZM224,338a82,82,0,1,1,82-82A81.9,81.9,0,0,1,224,338Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.14A19.1,19.1,0,0,1,309.42,189.74ZM400,32H48A48,48,0,0,0,0,80V432a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V80A48,48,0,0,0,400,32ZM382.88,322c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,216.44,384.37,295.56,382.88,322Z" + } + }, + "free": [ + "brands" + ] + }, + "intercom": { + "search": { + "terms": [ + "app", + "customer", + "messenger" + ] + }, + "styles": [ + "brands" + ], + "label": "Intercom", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z" + } + }, + "free": [ + "brands" + ] + }, + "internet-explorer": { + "search": { + "terms": [ + "browser", + "ie" + ] + }, + "styles": [ + "brands" + ], + "label": "Internet-explorer", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z" + } + }, + "free": [ + "brands" + ] + }, + "invision": { + "search": { + "terms": [ + "app", + "design", + "interface" + ] + }, + "styles": [ + "brands" + ], + "label": "InVision", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z" + } + }, + "free": [ + "brands" + ] + }, + "ioxhost": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "ioxhost", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z" + } + }, + "free": [ + "brands" + ] + }, + "italic": { + "search": { + "terms": [ + "edit", + "emphasis", + "font", + "format", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "italic", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "itch-io": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "itch.io", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z" + } + }, + "free": [ + "brands" + ] + }, + "itunes": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "iTunes", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z" + } + }, + "free": [ + "brands" + ] + }, + "itunes-note": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Itunes Note", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z" + } + }, + "free": [ + "brands" + ] + }, + "java": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Java", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z" + } + }, + "free": [ + "brands" + ] + }, + "jedi": { + "search": { + "terms": [ + "crest", + "force", + "sith", + "skywalker", + "star wars", + "yoda" + ] + }, + "styles": [ + "solid" + ], + "label": "Jedi", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M535.95308,352c-42.64069,94.17188-137.64086,160-247.9848,160q-6.39844,0-12.84377-.29688C171.15558,506.9375,81.26481,442.23438,40.01474,352H79.93668L21.3272,293.40625a264.82522,264.82522,0,0,1-5.10938-39.42187,273.6653,273.6653,0,0,1,.5-29.98438H63.93665L22.546,182.625A269.79782,269.79782,0,0,1,130.51489,20.54688a16.06393,16.06393,0,0,1,9.28127-3,16.36332,16.36332,0,0,1,13.5,7.25,16.02739,16.02739,0,0,1,1.625,15.09374,138.387,138.387,0,0,0-9.84376,51.26563c0,45.10937,21.04691,86.57813,57.71884,113.73437a16.29989,16.29989,0,0,1,1.20313,25.39063c-26.54692,23.98437-41.17194,56.5-41.17194,91.57813,0,60.03124,42.95319,110.28124,99.89079,121.92187l2.5-65.26563L238.062,397a8.33911,8.33911,0,0,1-10-.75,8.025,8.025,0,0,1-1.39063-9.9375l20.125-33.76562-42.06257-8.73438a7.9898,7.9898,0,0,1,0-15.65625l42.06257-8.71875-20.10941-33.73438a7.99122,7.99122,0,0,1,11.35939-10.71874L268.437,295.64062,279.95265,7.67188a7.97138,7.97138,0,0,1,8-7.67188h.04687a8.02064,8.02064,0,0,1,7.95314,7.70312L307.48394,295.625l30.39068-20.67188a8.08327,8.08327,0,0,1,10,.8125,7.99866,7.99866,0,0,1,1.39062,9.90626L329.12461,319.4375l42.07819,8.73438a7.99373,7.99373,0,0,1,0,15.65624l-42.07819,8.71876,20.1094,33.73437a7.97791,7.97791,0,0,1-1.32812,9.92187A8.25739,8.25739,0,0,1,337.87462,397L310.7027,378.53125l2.5,65.34375c48.48446-9.40625,87.57828-48.15625,97.31267-96.5A123.52652,123.52652,0,0,0,371.9528,230.29688a16.30634,16.30634,0,0,1,1.20313-25.42188c36.65631-27.17188,57.6876-68.60938,57.6876-113.73438a138.01689,138.01689,0,0,0-9.85939-51.3125,15.98132,15.98132,0,0,1,1.60937-15.09374,16.36914,16.36914,0,0,1,13.5-7.23438,16.02453,16.02453,0,0,1,9.25,2.98438A271.26947,271.26947,0,0,1,553.25,182.76562L511.99992,224h46.9532C559.3125,229.76562,560,235.45312,560,241.26562a270.092,270.092,0,0,1-5.125,51.85938L495.98427,352Z" + } + }, + "free": [ + "solid" + ] + }, + "jedi-order": { + "search": { + "terms": [ + "star wars" + ] + }, + "styles": [ + "brands" + ], + "label": "Jedi Order", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z" + } + }, + "free": [ + "brands" + ] + }, + "jenkins": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Jenkis", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z" + } + }, + "free": [ + "brands" + ] + }, + "jira": { + "search": { + "terms": [ + "atlassian" + ] + }, + "styles": [ + "brands" + ], + "label": "Jira", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z" + } + }, + "free": [ + "brands" + ] + }, + "joget": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Joget", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z" + } + }, + "free": [ + "brands" + ] + }, + "joint": { + "search": { + "terms": [ + "blunt", + "cannabis", + "doobie", + "drugs", + "marijuana", + "roach", + "smoke", + "smoking", + "spliff" + ] + }, + "styles": [ + "solid" + ], + "label": "Joint", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "joomla": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Joomla Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z" + } + }, + "free": [ + "brands" + ] + }, + "journal-whills": { + "search": { + "terms": [ + "book", + "force", + "jedi", + "sith", + "star wars", + "yoda" + ] + }, + "styles": [ + "solid" + ], + "label": "Journal of the Whills", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M438.40625,377.59375c-3.20313,12.8125-3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-25.59375,25.59375H96c-54.40625,0-96-41.59375-96-96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.8125Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l37.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-8.15624a4.003,4.003,0,0,0-5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3.73438-8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z" + } + }, + "free": [ + "solid" + ] + }, + "js": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "JavaScript (JS)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z" + } + }, + "free": [ + "brands" + ] + }, + "js-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "JavaScript (JS) Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z" + } + }, + "free": [ + "brands" + ] + }, + "jsfiddle": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "jsFiddle", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z" + } + }, + "free": [ + "brands" + ] + }, + "kaaba": { + "search": { + "terms": [ + "building", + "cube", + "islam", + "muslim" + ] + }, + "styles": [ + "solid" + ], + "label": "Kaaba", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z" + } + }, + "free": [ + "solid" + ] + }, + "kaggle": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Kaggle", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z" + } + }, + "free": [ + "brands" + ] + }, + "key": { + "search": { + "terms": [ + "lock", + "password", + "private", + "secret", + "unlock" + ] + }, + "styles": [ + "solid" + ], + "label": "key", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "keybase": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Keybase", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z" + } + }, + "free": [ + "brands" + ] + }, + "keyboard": { + "search": { + "terms": [ + "accessory", + "edit", + "input", + "text", + "type", + "write" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Keyboard", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "keycdn": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "KeyCDN", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160" + } + }, + "free": [ + "brands" + ] + }, + "khanda": { + "search": { + "terms": [ + "chakkar", + "sikh", + "sikhism", + "sword" + ] + }, + "styles": [ + "solid" + ], + "label": "Khanda", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z" + } + }, + "free": [ + "solid" + ] + }, + "kickstarter": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Kickstarter", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z" + } + }, + "free": [ + "brands" + ] + }, + "kickstarter-k": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Kickstarter K", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z" + } + }, + "free": [ + "brands" + ] + }, + "kiss": { + "search": { + "terms": [ + "beso", + "emoticon", + "face", + "love", + "smooch" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Kissing Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "kiss-beam": { + "search": { + "terms": [ + "beso", + "emoticon", + "face", + "love", + "smooch" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Kissing Face With Smiling Eyes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "kiss-wink-heart": { + "search": { + "terms": [ + "beso", + "emoticon", + "face", + "love", + "smooch" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Face Blowing a Kiss", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "504", + "512" + ], + "path": "M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "504", + "512" + ], + "path": "M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.1-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "kiwi-bird": { + "search": { + "terms": [ + "bird", + "fauna", + "new zealand" + ] + }, + "styles": [ + "solid" + ], + "label": "Kiwi Bird", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z" + } + }, + "free": [ + "solid" + ] + }, + "korvue": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "KORVUE", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "446", + "512" + ], + "path": "M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z" + } + }, + "free": [ + "brands" + ] + }, + "landmark": { + "search": { + "terms": [ + "building", + "historic", + "memorable", + "monument", + "politics" + ] + }, + "styles": [ + "solid" + ], + "label": "Landmark", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "language": { + "search": { + "terms": [ + "dialect", + "idiom", + "localize", + "speech", + "translate", + "vernacular" + ] + }, + "styles": [ + "solid" + ], + "label": "Language", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z" + } + }, + "free": [ + "solid" + ] + }, + "laptop": { + "search": { + "terms": [ + "computer", + "cpu", + "dell", + "demo", + "device", + "mac", + "macbook", + "machine", + "pc" + ] + }, + "styles": [ + "solid" + ], + "label": "Laptop", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z" + } + }, + "free": [ + "solid" + ] + }, + "laptop-code": { + "search": { + "terms": [ + "computer", + "cpu", + "dell", + "demo", + "develop", + "device", + "mac", + "macbook", + "machine", + "pc" + ] + }, + "styles": [ + "solid" + ], + "label": "Laptop Code", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z" + } + }, + "free": [ + "solid" + ] + }, + "laptop-house": { + "search": { + "terms": [ + "computer", + "covid-19", + "device", + "office", + "remote", + "work from home" + ] + }, + "styles": [ + "solid" + ], + "label": "Laptop House", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M272,288H208a16,16,0,0,1-16-16V208a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v37.12C299.11,232.24,315,224,332.8,224H469.74l6.65-7.53A16.51,16.51,0,0,0,480,207a16.31,16.31,0,0,0-4.75-10.61L416,144V48a16,16,0,0,0-16-16H368a16,16,0,0,0-16,16V87.3L263.5,8.92C258,4,247.45,0,240.05,0s-17.93,4-23.47,8.92L4.78,196.42A16.15,16.15,0,0,0,0,207a16.4,16.4,0,0,0,3.55,9.39L22.34,237.7A16.22,16.22,0,0,0,33,242.48,16.51,16.51,0,0,0,42.34,239L64,219.88V384a32,32,0,0,0,32,32H272ZM629.33,448H592V288c0-17.67-12.89-32-28.8-32H332.8c-15.91,0-28.8,14.33-28.8,32V448H266.67A10.67,10.67,0,0,0,256,458.67v10.66A42.82,42.82,0,0,0,298.6,512H597.4A42.82,42.82,0,0,0,640,469.33V458.67A10.67,10.67,0,0,0,629.33,448ZM544,448H352V304H544Z" + } + }, + "free": [ + "solid" + ] + }, + "laptop-medical": { + "search": { + "terms": [ + "computer", + "device", + "ehr", + "electronic health records", + "history" + ] + }, + "styles": [ + "solid" + ], + "label": "Laptop Medical", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "laravel": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Laravel", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504.4,115.83a5.72,5.72,0,0,0-.28-.68,8.52,8.52,0,0,0-.53-1.25,6,6,0,0,0-.54-.71,9.36,9.36,0,0,0-.72-.94c-.23-.22-.52-.4-.77-.6a8.84,8.84,0,0,0-.9-.68L404.4,55.55a8,8,0,0,0-8,0L300.12,111h0a8.07,8.07,0,0,0-.88.69,7.68,7.68,0,0,0-.78.6,8.23,8.23,0,0,0-.72.93c-.17.24-.39.45-.54.71a9.7,9.7,0,0,0-.52,1.25c-.08.23-.21.44-.28.68a8.08,8.08,0,0,0-.28,2.08V223.18l-80.22,46.19V63.44a7.8,7.8,0,0,0-.28-2.09c-.06-.24-.2-.45-.28-.68a8.35,8.35,0,0,0-.52-1.24c-.14-.26-.37-.47-.54-.72a9.36,9.36,0,0,0-.72-.94,9.46,9.46,0,0,0-.78-.6,9.8,9.8,0,0,0-.88-.68h0L115.61,1.07a8,8,0,0,0-8,0L11.34,56.49h0a6.52,6.52,0,0,0-.88.69,7.81,7.81,0,0,0-.79.6,8.15,8.15,0,0,0-.71.93c-.18.25-.4.46-.55.72a7.88,7.88,0,0,0-.51,1.24,6.46,6.46,0,0,0-.29.67,8.18,8.18,0,0,0-.28,2.1v329.7a8,8,0,0,0,4,6.95l192.5,110.84a8.83,8.83,0,0,0,1.33.54c.21.08.41.2.63.26a7.92,7.92,0,0,0,4.1,0c.2-.05.37-.16.55-.22a8.6,8.6,0,0,0,1.4-.58L404.4,400.09a8,8,0,0,0,4-6.95V287.88l92.24-53.11a8,8,0,0,0,4-7V117.92A8.63,8.63,0,0,0,504.4,115.83ZM111.6,17.28h0l80.19,46.15-80.2,46.18L31.41,63.44Zm88.25,60V278.6l-46.53,26.79-33.69,19.4V123.5l46.53-26.79Zm0,412.78L23.37,388.5V77.32L57.06,96.7l46.52,26.8V338.68a6.94,6.94,0,0,0,.12.9,8,8,0,0,0,.16,1.18h0a5.92,5.92,0,0,0,.38.9,6.38,6.38,0,0,0,.42,1v0a8.54,8.54,0,0,0,.6.78,7.62,7.62,0,0,0,.66.84l0,0c.23.22.52.38.77.58a8.93,8.93,0,0,0,.86.66l0,0,0,0,92.19,52.18Zm8-106.17-80.06-45.32,84.09-48.41,92.26-53.11,80.13,46.13-58.8,33.56Zm184.52,4.57L215.88,490.11V397.8L346.6,323.2l45.77-26.15Zm0-119.13L358.68,250l-46.53-26.79V131.79l33.69,19.4L392.37,178Zm8-105.28-80.2-46.17,80.2-46.16,80.18,46.15Zm8,105.28V178L455,151.19l33.68-19.4v91.39h0Z" + } + }, + "free": [ + "brands" + ] + }, + "lastfm": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "last.fm", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z" + } + }, + "free": [ + "brands" + ] + }, + "lastfm-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "last.fm Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z" + } + }, + "free": [ + "brands" + ] + }, + "laugh": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face", + "laugh", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Grinning Face With Big Eyes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "laugh-beam": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face", + "happy", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Laugh Face with Beaming Eyes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "laugh-squint": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face", + "happy", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Laughing Squinting Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-15.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "laugh-wink": { + "search": { + "terms": [ + "LOL", + "emoticon", + "face", + "happy", + "smile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Laughing Winking Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "layer-group": { + "search": { + "terms": [ + "arrange", + "develop", + "layers", + "map", + "stack" + ] + }, + "styles": [ + "solid" + ], + "label": "Layer Group", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z" + } + }, + "free": [ + "solid" + ] + }, + "leaf": { + "search": { + "terms": [ + "eco", + "flora", + "nature", + "plant", + "vegan" + ] + }, + "styles": [ + "solid" + ], + "label": "leaf", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z" + } + }, + "free": [ + "solid" + ] + }, + "leanpub": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Leanpub", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z" + } + }, + "free": [ + "brands" + ] + }, + "lemon": { + "search": { + "terms": [ + "citrus", + "lemonade", + "lime", + "tart" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Lemon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "less": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Less", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z" + } + }, + "free": [ + "brands" + ] + }, + "less-than": { + "search": { + "terms": [ + "arithmetic", + "compare", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Less Than", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z" + } + }, + "free": [ + "solid" + ] + }, + "less-than-equal": { + "search": { + "terms": [ + "arithmetic", + "compare", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Less Than Equal To", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "level-down-alt": { + "search": { + "terms": [ + "arrow", + "level-down" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Level Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z" + } + }, + "free": [ + "solid" + ] + }, + "level-up-alt": { + "search": { + "terms": [ + "arrow", + "level-up" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Level Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z" + } + }, + "free": [ + "solid" + ] + }, + "life-ring": { + "search": { + "terms": [ + "coast guard", + "help", + "overboard", + "save", + "support" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Life Ring", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "lightbulb": { + "search": { + "terms": [ + "energy", + "idea", + "inspiration", + "light" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Lightbulb", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "352", + "512" + ], + "path": "M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "352", + "512" + ], + "path": "M176 80c-52.94 0-96 43.06-96 96 0 8.84 7.16 16 16 16s16-7.16 16-16c0-35.3 28.72-64 64-64 8.84 0 16-7.16 16-16s-7.16-16-16-16zM96.06 459.17c0 3.15.93 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84l.05-43.18H96.02l.04 43.18zM176 0C73.72 0 0 82.97 0 176c0 44.37 16.45 84.85 43.56 115.78 16.64 18.99 42.74 58.8 52.42 92.16v.06h48v-.12c-.01-4.77-.72-9.51-2.15-14.07-5.59-17.81-22.82-64.77-62.17-109.67-20.54-23.43-31.52-53.15-31.61-84.14-.2-73.64 59.67-128 127.95-128 70.58 0 128 57.42 128 128 0 30.97-11.24 60.85-31.65 84.14-39.11 44.61-56.42 91.47-62.1 109.46a47.507 47.507 0 0 0-2.22 14.3v.1h48v-.05c9.68-33.37 35.78-73.18 52.42-92.16C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "line": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Line", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1.5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9.3 1.6.9 2.2.6.5 1.3.9 2.2.9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8.1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z" + } + }, + "free": [ + "brands" + ] + }, + "link": { + "search": { + "terms": [ + "attach", + "attachment", + "chain", + "connect" + ] + }, + "styles": [ + "solid" + ], + "label": "Link", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z" + } + }, + "free": [ + "solid" + ] + }, + "linkedin": { + "search": { + "terms": [ + "linkedin-square" + ] + }, + "styles": [ + "brands" + ], + "label": "LinkedIn", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z" + } + }, + "free": [ + "brands" + ] + }, + "linkedin-in": { + "search": { + "terms": [ + "linkedin" + ] + }, + "styles": [ + "brands" + ], + "label": "LinkedIn In", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z" + } + }, + "free": [ + "brands" + ] + }, + "linode": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Linode", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M437.4 226.3c-.3-.9-.9-1.4-1.4-2l-70-38.6c-.9-.6-2-.6-3.1 0l-58.9 36c-.9.6-1.4 1.7-1.4 2.6l-.9 31.4-24-16c-.9-.6-2.3-.6-3.1 0L240 260.9l-1.4-35.1c0-.9-.6-2-1.4-2.3l-36-24.3 33.7-17.4c1.1-.6 1.7-1.7 1.7-2.9l-5.7-132.3c0-.9-.9-2-1.7-2.6L138.6.3c-.9-.3-1.7-.3-2.3-.3L12.6 38.6c-1.4.6-2.3 2-2 3.7L38 175.4c.9 3.4 34 27.4 38.6 30.9l-26.9 12.9c-1.4.9-2 2.3-1.7 3.4l20.6 100.3c.6 2.9 23.7 23.1 27.1 26.3l-17.4 10.6c-.9.6-1.7 2-1.4 3.1 1.4 7.1 15.4 77.7 16.9 79.1l65.1 69.1c.6.6 1.4.6 2.3.9.6 0 1.1-.3 1.7-.6l83.7-66.9c.9-.6 1.1-1.4 1.1-2.3l-2-46 28 23.7c1.1.9 2.9.9 4 0l66.9-53.4c.9-.6 1.1-1.4 1.1-2.3l2.3-33.4 20.3 14c1.1.9 2.6.9 3.7 0l54.6-43.7c.6-.3 1.1-1.1 1.1-2 .9-6.5 10.3-70.8 9.7-72.8zm-204.8 4.8l4 92.6-90.6 61.2-14-96.6 100.6-57.2zm-7.7-180l5.4 126-106.6 55.4L104 97.7l120.9-46.6zM44 173.1L18 48l79.7 49.4 19.4 132.9L44 173.1zm30.6 147.8L55.7 230l70 58.3 13.7 93.4-64.8-60.8zm24.3 117.7l-13.7-67.1 61.7 60.9 9.7 67.4-57.7-61.2zm64.5 64.5l-10.6-70.9 85.7-61.4 3.1 70-78.2 62.3zm82-115.1c0-3.4.9-22.9-2-25.1l-24.3-20 22.3-14.9c2.3-1.7 1.1-5.7 1.1-8l29.4 22.6.6 68.3-27.1-22.9zm94.3-25.4l-60.9 48.6-.6-68.6 65.7-46.9-4.2 66.9zm27.7-25.7l-19.1-13.4 2-34c.3-.9-.3-2-1.1-2.6L308 259.7l.6-30 64.6 40.6-5.8 66.6zm54.6-39.8l-48.3 38.3 5.7-65.1 51.1-36.6-8.5 63.4z" + } + }, + "free": [ + "brands" + ] + }, + "linux": { + "search": { + "terms": [ + "tux" + ] + }, + "styles": [ + "brands" + ], + "label": "Linux", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z" + } + }, + "free": [ + "brands" + ] + }, + "lira-sign": { + "search": { + "terms": [ + "currency", + "money", + "try", + "turkish" + ] + }, + "styles": [ + "solid" + ], + "label": "Turkish Lira Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z" + } + }, + "free": [ + "solid" + ] + }, + "list": { + "search": { + "terms": [ + "checklist", + "completed", + "done", + "finished", + "ol", + "todo", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "List", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "list-alt": { + "search": { + "terms": [ + "checklist", + "completed", + "done", + "finished", + "ol", + "todo", + "ul" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate List", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "list-ol": { + "search": { + "terms": [ + "checklist", + "completed", + "done", + "finished", + "numbers", + "ol", + "todo", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "list-ol", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z" + } + }, + "free": [ + "solid" + ] + }, + "list-ul": { + "search": { + "terms": [ + "checklist", + "completed", + "done", + "finished", + "ol", + "todo", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "list-ul", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "location-arrow": { + "search": { + "terms": [ + "address", + "compass", + "coordinate", + "direction", + "gps", + "map", + "navigation", + "place" + ] + }, + "styles": [ + "solid" + ], + "label": "location-arrow", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z" + } + }, + "free": [ + "solid" + ] + }, + "lock": { + "search": { + "terms": [ + "admin", + "lock", + "open", + "password", + "private", + "protect", + "security" + ] + }, + "styles": [ + "solid" + ], + "label": "lock", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z" + } + }, + "free": [ + "solid" + ] + }, + "lock-open": { + "search": { + "terms": [ + "admin", + "lock", + "open", + "password", + "private", + "protect", + "security" + ] + }, + "styles": [ + "solid" + ], + "label": "Lock Open", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z" + } + }, + "free": [ + "solid" + ] + }, + "long-arrow-alt-down": { + "search": { + "terms": [ + "download", + "long-arrow-down" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Long Arrow Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z" + } + }, + "free": [ + "solid" + ] + }, + "long-arrow-alt-left": { + "search": { + "terms": [ + "back", + "long-arrow-left", + "previous" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Long Arrow Left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z" + } + }, + "free": [ + "solid" + ] + }, + "long-arrow-alt-right": { + "search": { + "terms": [ + "forward", + "long-arrow-right", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Long Arrow Right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z" + } + }, + "free": [ + "solid" + ] + }, + "long-arrow-alt-up": { + "search": { + "terms": [ + "long-arrow-up", + "upload" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Long Arrow Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z" + } + }, + "free": [ + "solid" + ] + }, + "low-vision": { + "search": { + "terms": [ + "blind", + "eye", + "sight" + ] + }, + "styles": [ + "solid" + ], + "label": "Low Vision", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z" + } + }, + "free": [ + "solid" + ] + }, + "luggage-cart": { + "search": { + "terms": [ + "bag", + "baggage", + "suitcase", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Luggage Cart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z" + } + }, + "free": [ + "solid" + ] + }, + "lungs": { + "search": { + "terms": [ + "air", + "breath", + "covid-19", + "organ", + "respiratory" + ] + }, + "styles": [ + "solid" + ], + "label": "Lungs", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z" + } + }, + "free": [ + "solid" + ] + }, + "lungs-virus": { + "search": { + "terms": [ + "breath", + "covid-19", + "respiratory", + "sick" + ] + }, + "styles": [ + "solid" + ], + "label": "Lungs Virus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M344,150.68V16A16,16,0,0,0,328,0H312a16,16,0,0,0-16,16V150.68a46.45,46.45,0,0,1,48,0ZM195.54,444.46a48.06,48.06,0,0,1,0-67.88l8.58-8.58H192a48,48,0,0,1,0-96h12.12l-8.58-8.57a48,48,0,0,1,60.46-74V161.75C256,125.38,224.62,96,186,96c-44,0-58,28.5-80.12,63.13a819.52,819.52,0,0,0-102,231A113.16,113.16,0,0,0,0,419.75C0,481,62.5,525.26,125.25,508.38l59.5-15.87a98.51,98.51,0,0,0,52.5-34.75,46.49,46.49,0,0,1-41.71-13.3Zm226.29-22.63a16,16,0,0,0,0-22.62l-8.58-8.58C393.09,370.47,407.37,336,435.88,336H448a16,16,0,0,0,0-32H435.88c-28.51,0-42.79-34.47-22.63-54.62l8.58-8.58a16,16,0,0,0-22.63-22.63l-8.57,8.58C370.47,246.91,336,232.63,336,204.12V192a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.58c20.16,20.15,5.88,54.62-22.63,54.62H192a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.58a16,16,0,1,0,22.63,22.62l8.57-8.57C269.53,393.1,304,407.38,304,435.88V448a16,16,0,0,0,32,0V435.88c0-28.5,34.47-42.78,54.63-22.62l8.57,8.57a16,16,0,0,0,22.63,0ZM288,304a16,16,0,1,1,16-16A16,16,0,0,1,288,304Zm64,64a16,16,0,1,1,16-16A16,16,0,0,1,352,368Zm284.12,22.13a819.52,819.52,0,0,0-102-231C512,124.5,498,96,454,96c-38.62,0-70,29.38-70,65.75v27.72a48,48,0,0,1,60.46,74L435.88,272H448a48,48,0,0,1,0,96H435.88l8.58,8.58a47.7,47.7,0,0,1-41.71,81.18,98.51,98.51,0,0,0,52.5,34.75l59.5,15.87C577.5,525.26,640,481,640,419.75A113.16,113.16,0,0,0,636.12,390.13Z" + } + }, + "free": [ + "solid" + ] + }, + "lyft": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "lyft", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z" + } + }, + "free": [ + "brands" + ] + }, + "magento": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Magento", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z" + } + }, + "free": [ + "brands" + ] + }, + "magic": { + "search": { + "terms": [ + "autocomplete", + "automatic", + "mage", + "magic", + "spell", + "wand", + "witch", + "wizard" + ] + }, + "styles": [ + "solid" + ], + "label": "magic", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z" + } + }, + "free": [ + "solid" + ] + }, + "magnet": { + "search": { + "terms": [ + "Attract", + "lodestone", + "tool" + ] + }, + "styles": [ + "solid" + ], + "label": "magnet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z" + } + }, + "free": [ + "solid" + ] + }, + "mail-bulk": { + "search": { + "terms": [ + "archive", + "envelope", + "letter", + "post office", + "postal", + "postcard", + "send", + "stamp", + "usps" + ] + }, + "styles": [ + "solid" + ], + "label": "Mail Bulk", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z" + } + }, + "free": [ + "solid" + ] + }, + "mailchimp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mailchimp", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z" + } + }, + "free": [ + "brands" + ] + }, + "male": { + "search": { + "terms": [ + "human", + "man", + "person", + "profile", + "user" + ] + }, + "styles": [ + "solid" + ], + "label": "Male", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "192", + "512" + ], + "path": "M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "mandalorian": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mandalorian", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z" + } + }, + "free": [ + "brands" + ] + }, + "map": { + "search": { + "terms": [ + "address", + "coordinates", + "destination", + "gps", + "localize", + "location", + "map", + "navigation", + "paper", + "pin", + "place", + "point of interest", + "position", + "route", + "travel" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Map", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "map-marked": { + "search": { + "terms": [ + "address", + "coordinates", + "destination", + "gps", + "localize", + "location", + "map", + "navigation", + "paper", + "pin", + "place", + "point of interest", + "position", + "route", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Map Marked", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z" + } + }, + "free": [ + "solid" + ] + }, + "map-marked-alt": { + "search": { + "terms": [ + "address", + "coordinates", + "destination", + "gps", + "localize", + "location", + "map", + "navigation", + "paper", + "pin", + "place", + "point of interest", + "position", + "route", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Map Marked", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z" + } + }, + "free": [ + "solid" + ] + }, + "map-marker": { + "search": { + "terms": [ + "address", + "coordinates", + "destination", + "gps", + "localize", + "location", + "map", + "navigation", + "paper", + "pin", + "place", + "point of interest", + "position", + "route", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "map-marker", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z" + } + }, + "free": [ + "solid" + ] + }, + "map-marker-alt": { + "search": { + "terms": [ + "address", + "coordinates", + "destination", + "gps", + "localize", + "location", + "map", + "navigation", + "paper", + "pin", + "place", + "point of interest", + "position", + "route", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Map Marker", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z" + } + }, + "free": [ + "solid" + ] + }, + "map-pin": { + "search": { + "terms": [ + "address", + "agree", + "coordinates", + "destination", + "gps", + "localize", + "location", + "map", + "marker", + "navigation", + "pin", + "place", + "position", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Map Pin", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z" + } + }, + "free": [ + "solid" + ] + }, + "map-signs": { + "search": { + "terms": [ + "directions", + "directory", + "map", + "signage", + "wayfinding" + ] + }, + "styles": [ + "solid" + ], + "label": "Map Signs", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "markdown": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Markdown", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z" + } + }, + "free": [ + "brands" + ] + }, + "marker": { + "search": { + "terms": [ + "design", + "edit", + "sharpie", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Marker", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z" + } + }, + "free": [ + "solid" + ] + }, + "mars": { + "search": { + "terms": [ + "male" + ] + }, + "styles": [ + "solid" + ], + "label": "Mars", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "mars-double": { + "search": { + "terms": [] + }, + "styles": [ + "solid" + ], + "label": "Mars Double", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z" + } + }, + "free": [ + "solid" + ] + }, + "mars-stroke": { + "search": { + "terms": [] + }, + "styles": [ + "solid" + ], + "label": "Mars Stroke", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "mars-stroke-h": { + "search": { + "terms": [] + }, + "styles": [ + "solid" + ], + "label": "Mars Stroke Horizontal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z" + } + }, + "free": [ + "solid" + ] + }, + "mars-stroke-v": { + "search": { + "terms": [] + }, + "styles": [ + "solid" + ], + "label": "Mars Stroke Vertical", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z" + } + }, + "free": [ + "solid" + ] + }, + "mask": { + "search": { + "terms": [ + "carnivale", + "costume", + "disguise", + "halloween", + "secret", + "super hero" + ] + }, + "styles": [ + "solid" + ], + "label": "Mask", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z" + } + }, + "free": [ + "solid" + ] + }, + "mastodon": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mastodon", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z" + } + }, + "free": [ + "brands" + ] + }, + "maxcdn": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "MaxCDN", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z" + } + }, + "free": [ + "brands" + ] + }, + "mdb": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Material Design for Bootstrap", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z" + } + }, + "free": [ + "brands" + ] + }, + "medal": { + "search": { + "terms": [ + "award", + "ribbon", + "star", + "trophy" + ] + }, + "styles": [ + "solid" + ], + "label": "Medal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z" + } + }, + "free": [ + "solid" + ] + }, + "medapps": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "MedApps", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z" + } + }, + "free": [ + "brands" + ] + }, + "medium": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Medium", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v448h448V32H0zm372.2 106.1l-24 23c-2.1 1.6-3.1 4.2-2.7 6.7v169.3c-.4 2.6.6 5.2 2.7 6.7l23.5 23v5.1h-118V367l24.3-23.6c2.4-2.4 2.4-3.1 2.4-6.7V199.8l-67.6 171.6h-9.1L125 199.8v115c-.7 4.8 1 9.7 4.4 13.2l31.6 38.3v5.1H71.2v-5.1l31.6-38.3c3.4-3.5 4.9-8.4 4.1-13.2v-133c.4-3.7-1-7.3-3.8-9.8L75 138.1V133h87.3l67.4 148L289 133.1h83.2v5z" + } + }, + "free": [ + "brands" + ] + }, + "medium-m": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Medium M", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M71.5 142.3c.6-5.9-1.7-11.8-6.1-15.8L20.3 72.1V64h140.2l108.4 237.7L364.2 64h133.7v8.1l-38.6 37c-3.3 2.5-5 6.7-4.3 10.8v272c-.7 4.1 1 8.3 4.3 10.8l37.7 37v8.1H307.3v-8.1l39.1-37.9c3.8-3.8 3.8-5 3.8-10.8V171.2L241.5 447.1h-14.7L100.4 171.2v184.9c-1.1 7.8 1.5 15.6 7 21.2l50.8 61.6v8.1h-144v-8L65 377.3c5.4-5.6 7.9-13.5 6.5-21.2V142.3z" + } + }, + "free": [ + "brands" + ] + }, + "medkit": { + "search": { + "terms": [ + "first aid", + "firstaid", + "health", + "help", + "support" + ] + }, + "styles": [ + "solid" + ], + "label": "medkit", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "medrt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "MRT", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "544", + "512" + ], + "path": "M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z" + } + }, + "free": [ + "brands" + ] + }, + "meetup": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Meetup", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z" + } + }, + "free": [ + "brands" + ] + }, + "megaport": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Megaport", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z" + } + }, + "free": [ + "brands" + ] + }, + "meh": { + "search": { + "terms": [ + "emoticon", + "face", + "neutral", + "rating" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Neutral Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "meh-blank": { + "search": { + "terms": [ + "emoticon", + "face", + "neutral", + "rating" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Face Without Mouth", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "meh-rolling-eyes": { + "search": { + "terms": [ + "emoticon", + "face", + "neutral", + "rating" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Face With Rolling Eyes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "memory": { + "search": { + "terms": [ + "DIMM", + "RAM", + "hardware", + "storage", + "technology" + ] + }, + "styles": [ + "solid" + ], + "label": "Memory", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z" + } + }, + "free": [ + "solid" + ] + }, + "mendeley": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mendeley", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z" + } + }, + "free": [ + "brands" + ] + }, + "menorah": { + "search": { + "terms": [ + "candle", + "hanukkah", + "jewish", + "judaism", + "light" + ] + }, + "styles": [ + "solid" + ], + "label": "Menorah", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z" + } + }, + "free": [ + "solid" + ] + }, + "mercury": { + "search": { + "terms": [ + "transgender" + ] + }, + "styles": [ + "solid" + ], + "label": "Mercury", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z" + } + }, + "free": [ + "solid" + ] + }, + "meteor": { + "search": { + "terms": [ + "armageddon", + "asteroid", + "comet", + "shooting star", + "space" + ] + }, + "styles": [ + "solid" + ], + "label": "Meteor", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M511.328,20.8027c-11.60759,38.70264-34.30724,111.70173-61.30311,187.70077,6.99893,2.09372,13.4042,4,18.60653,5.59368a16.06158,16.06158,0,0,1,9.49854,22.906c-22.106,42.29635-82.69047,152.795-142.47819,214.40356-.99984,1.09373-1.99969,2.5-2.99954,3.49995A194.83046,194.83046,0,1,1,57.085,179.41009c.99985-1,2.40588-2,3.49947-3,61.59994-59.90549,171.97367-120.40473,214.37343-142.4982a16.058,16.058,0,0,1,22.90274,9.49988c1.59351,5.09368,3.49947,11.5936,5.5929,18.59351C379.34818,35.00565,452.43074,12.30281,491.12794.70921A16.18325,16.18325,0,0,1,511.328,20.8027ZM319.951,320.00207A127.98041,127.98041,0,1,0,191.97061,448.00046,127.97573,127.97573,0,0,0,319.951,320.00207Zm-127.98041-31.9996a31.9951,31.9951,0,1,1-31.9951-31.9996A31.959,31.959,0,0,1,191.97061,288.00247Zm31.9951,79.999a15.99755,15.99755,0,1,1-15.99755-15.9998A16.04975,16.04975,0,0,1,223.96571,368.00147Z" + } + }, + "free": [ + "solid" + ] + }, + "microblog": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Micro.blog", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z" + } + }, + "free": [ + "brands" + ] + }, + "microchip": { + "search": { + "terms": [ + "cpu", + "hardware", + "processor", + "technology" + ] + }, + "styles": [ + "solid" + ], + "label": "Microchip", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z" + } + }, + "free": [ + "solid" + ] + }, + "microphone": { + "search": { + "terms": [ + "audio", + "podcast", + "record", + "sing", + "sound", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "microphone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "352", + "512" + ], + "path": "M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "microphone-alt": { + "search": { + "terms": [ + "audio", + "podcast", + "record", + "sing", + "sound", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Microphone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "352", + "512" + ], + "path": "M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z" + } + }, + "free": [ + "solid" + ] + }, + "microphone-alt-slash": { + "search": { + "terms": [ + "audio", + "disable", + "mute", + "podcast", + "record", + "sing", + "sound", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Microphone Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "microphone-slash": { + "search": { + "terms": [ + "audio", + "disable", + "mute", + "podcast", + "record", + "sing", + "sound", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Microphone Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "microscope": { + "search": { + "terms": [ + "covid-19", + "electron", + "lens", + "optics", + "science", + "shrink" + ] + }, + "styles": [ + "solid" + ], + "label": "Microscope", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z" + } + }, + "free": [ + "solid" + ] + }, + "microsoft": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Microsoft", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z" + } + }, + "free": [ + "brands" + ] + }, + "minus": { + "search": { + "terms": [ + "collapse", + "delete", + "hide", + "minify", + "negative", + "remove", + "trash" + ] + }, + "styles": [ + "solid" + ], + "label": "minus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "minus-circle": { + "search": { + "terms": [ + "delete", + "hide", + "negative", + "remove", + "shape", + "trash" + ] + }, + "styles": [ + "solid" + ], + "label": "Minus Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z" + } + }, + "free": [ + "solid" + ] + }, + "minus-square": { + "search": { + "terms": [ + "collapse", + "delete", + "hide", + "minify", + "negative", + "remove", + "shape", + "trash" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Minus Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "mitten": { + "search": { + "terms": [ + "clothing", + "cold", + "glove", + "hands", + "knitted", + "seasonal", + "warmth" + ] + }, + "styles": [ + "solid" + ], + "label": "Mitten", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z" + } + }, + "free": [ + "solid" + ] + }, + "mix": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mix", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z" + } + }, + "free": [ + "brands" + ] + }, + "mixcloud": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mixcloud", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M424.43 219.729C416.124 134.727 344.135 68 256.919 68c-72.266 0-136.224 46.516-159.205 114.074-54.545 8.029-96.63 54.822-96.63 111.582 0 62.298 50.668 112.966 113.243 112.966h289.614c52.329 0 94.969-42.362 94.969-94.693 0-45.131-32.118-83.063-74.48-92.2zm-20.489 144.53H114.327c-39.04 0-70.881-31.564-70.881-70.604s31.841-70.604 70.881-70.604c18.827 0 36.548 7.475 49.838 20.766 19.963 19.963 50.133-10.227 30.18-30.18-14.675-14.398-32.672-24.365-52.053-29.349 19.935-44.3 64.79-73.926 114.628-73.926 69.496 0 125.979 56.483 125.979 125.702 0 13.568-2.215 26.857-6.369 39.594-8.943 27.517 32.133 38.939 40.147 13.29 2.769-8.306 4.984-16.889 6.369-25.472 19.381 7.476 33.502 26.303 33.502 48.453 0 28.795-23.535 52.33-52.607 52.33zm235.069-52.33c0 44.024-12.737 86.386-37.102 122.657-4.153 6.092-10.798 9.414-17.72 9.414-16.317 0-27.127-18.826-17.443-32.949 19.381-29.349 29.903-63.682 29.903-99.122s-10.521-69.773-29.903-98.845c-15.655-22.831 19.361-47.24 35.163-23.534 24.366 35.993 37.102 78.356 37.102 122.379zm-70.88 0c0 31.565-9.137 62.021-26.857 88.325-4.153 6.091-10.798 9.136-17.72 9.136-17.201 0-27.022-18.979-17.443-32.948 13.013-19.104 19.658-41.255 19.658-64.513 0-22.981-6.645-45.408-19.658-64.512-15.761-22.986 19.008-47.095 35.163-23.535 17.719 26.026 26.857 56.483 26.857 88.047z" + } + }, + "free": [ + "brands" + ] + }, + "mixer": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mixer", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z" + } + }, + "free": [ + "brands" + ] + }, + "mizuni": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Mizuni", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z" + } + }, + "free": [ + "brands" + ] + }, + "mobile": { + "search": { + "terms": [ + "apple", + "call", + "cell phone", + "cellphone", + "device", + "iphone", + "number", + "screen", + "telephone" + ] + }, + "styles": [ + "solid" + ], + "label": "Mobile Phone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "mobile-alt": { + "search": { + "terms": [ + "apple", + "call", + "cell phone", + "cellphone", + "device", + "iphone", + "number", + "screen", + "telephone" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Mobile", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z" + } + }, + "free": [ + "solid" + ] + }, + "modx": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "MODX", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z" + } + }, + "free": [ + "brands" + ] + }, + "monero": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Monero", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z" + } + }, + "free": [ + "brands" + ] + }, + "money-bill": { + "search": { + "terms": [ + "buy", + "cash", + "checkout", + "money", + "payment", + "price", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "Money Bill", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z" + } + }, + "free": [ + "solid" + ] + }, + "money-bill-alt": { + "search": { + "terms": [ + "buy", + "cash", + "checkout", + "money", + "payment", + "price", + "purchase" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Money Bill", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "money-bill-wave": { + "search": { + "terms": [ + "buy", + "cash", + "checkout", + "money", + "payment", + "price", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "Wavy Money Bill", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z" + } + }, + "free": [ + "solid" + ] + }, + "money-bill-wave-alt": { + "search": { + "terms": [ + "buy", + "cash", + "checkout", + "money", + "payment", + "price", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Wavy Money Bill", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z" + } + }, + "free": [ + "solid" + ] + }, + "money-check": { + "search": { + "terms": [ + "bank check", + "buy", + "checkout", + "cheque", + "money", + "payment", + "price", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "Money Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "money-check-alt": { + "search": { + "terms": [ + "bank check", + "buy", + "checkout", + "cheque", + "money", + "payment", + "price", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Money Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z" + } + }, + "free": [ + "solid" + ] + }, + "monument": { + "search": { + "terms": [ + "building", + "historic", + "landmark", + "memorable" + ] + }, + "styles": [ + "solid" + ], + "label": "Monument", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z" + } + }, + "free": [ + "solid" + ] + }, + "moon": { + "search": { + "terms": [ + "contrast", + "crescent", + "dark", + "lunar", + "night" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Moon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "mortar-pestle": { + "search": { + "terms": [ + "crush", + "culinary", + "grind", + "medical", + "mix", + "pharmacy", + "prescription", + "spices" + ] + }, + "styles": [ + "solid" + ], + "label": "Mortar Pestle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "mosque": { + "search": { + "terms": [ + "building", + "islam", + "landmark", + "muslim" + ] + }, + "styles": [ + "solid" + ], + "label": "Mosque", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z" + } + }, + "free": [ + "solid" + ] + }, + "motorcycle": { + "search": { + "terms": [ + "bike", + "machine", + "transportation", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Motorcycle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z" + } + }, + "free": [ + "solid" + ] + }, + "mountain": { + "search": { + "terms": [ + "glacier", + "hiking", + "hill", + "landscape", + "travel", + "view" + ] + }, + "styles": [ + "solid" + ], + "label": "Mountain", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z" + } + }, + "free": [ + "solid" + ] + }, + "mouse": { + "search": { + "terms": [ + "click", + "computer", + "cursor", + "input", + "peripheral" + ] + }, + "styles": [ + "solid" + ], + "label": "Mouse", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M0 352a160 160 0 0 0 160 160h64a160 160 0 0 0 160-160V224H0zM176 0h-16A160 160 0 0 0 0 160v32h176zm48 0h-16v192h176v-32A160 160 0 0 0 224 0z" + } + }, + "free": [ + "solid" + ] + }, + "mouse-pointer": { + "search": { + "terms": [ + "arrow", + "cursor", + "select" + ] + }, + "styles": [ + "solid" + ], + "label": "Mouse Pointer", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z" + } + }, + "free": [ + "solid" + ] + }, + "mug-hot": { + "search": { + "terms": [ + "caliente", + "cocoa", + "coffee", + "cup", + "drink", + "holiday", + "hot chocolate", + "steam", + "tea", + "warmth" + ] + }, + "styles": [ + "solid" + ], + "label": "Mug Hot", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "music": { + "search": { + "terms": [ + "lyrics", + "melody", + "note", + "sing", + "sound" + ] + }, + "styles": [ + "solid" + ], + "label": "Music", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z" + } + }, + "free": [ + "solid" + ] + }, + "napster": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Napster", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z" + } + }, + "free": [ + "brands" + ] + }, + "neos": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Neos", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z" + } + }, + "free": [ + "brands" + ] + }, + "network-wired": { + "search": { + "terms": [ + "computer", + "connect", + "ethernet", + "internet", + "intranet" + ] + }, + "styles": [ + "solid" + ], + "label": "Wired Network", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z" + } + }, + "free": [ + "solid" + ] + }, + "neuter": { + "search": { + "terms": [] + }, + "styles": [ + "solid" + ], + "label": "Neuter", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "newspaper": { + "search": { + "terms": [ + "article", + "editorial", + "headline", + "journal", + "journalism", + "news", + "press" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Newspaper", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "nimblr": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Nimblr", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z" + } + }, + "free": [ + "brands" + ] + }, + "node": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Node.js", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z" + } + }, + "free": [ + "brands" + ] + }, + "node-js": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Node.js JS", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z" + } + }, + "free": [ + "brands" + ] + }, + "not-equal": { + "search": { + "terms": [ + "arithmetic", + "compare", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Not Equal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z" + } + }, + "free": [ + "solid" + ] + }, + "notes-medical": { + "search": { + "terms": [ + "clipboard", + "doctor", + "ehr", + "health", + "history", + "records" + ] + }, + "styles": [ + "solid" + ], + "label": "Medical Notes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z" + } + }, + "free": [ + "solid" + ] + }, + "npm": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "npm", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z" + } + }, + "free": [ + "brands" + ] + }, + "ns8": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "NS8", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M187.1 159.9l-34.2 113.7-54.5-113.7H49L0 320h44.9L76 213.5 126.6 320h56.9L232 159.9h-44.9zm452.5-.9c-2.9-18-23.9-28.1-42.1-31.3-44.6-7.8-101.9 16.3-88.5 58.8v.1c-43.8 8.7-74.3 26.8-94.2 48.2-3-9.8-13.6-16.6-34-16.6h-87.6c-9.3 0-12.9-2.3-11.5-7.4 1.6-5.5 1.9-6.8 3.7-12.2 2.1-6.4 7.8-7.1 13.3-7.1h133.5l9.7-31.5c-139.7 0-144.5-.5-160.1 1.2-12.3 1.3-23.5 4.8-30.6 15-6.8 9.9-14.4 35.6-17.6 47.1-5.4 19.4-.6 28.6 32.8 28.6h87.3c7.8 0 8.8 2.7 7.7 6.6-1.1 4.4-2.8 10-4.5 14.6-1.6 4.2-4.7 7.4-13.8 7.4H216.3L204.7 320c139.9 0 145.3-.6 160.9-2.3 6.6-.7 13-2.1 18.5-4.9.2 3.7.5 7.3 1.2 10.8 5.4 30.5 27.4 52.3 56.8 59.5 48.6 11.9 108.7-16.8 135.1-68 18.7-36.2 14.1-76.2-3.4-105.5h.1c29.6-5.9 70.3-22 65.7-50.6zM530.7 263.7c-5.9 29.5-36.6 47.8-61.6 43.9-30.9-4.8-38.5-39.5-14.1-64.8 16.2-16.8 45.2-24 68.5-26.9 6.7 14.1 10.3 32 7.2 47.8zm21.8-83.1c-4.2-6-9.8-18.5-2.5-26.3 6.7-7.2 20.9-10.1 31.8-7.7 15.3 3.4 19.7 15.9 4.9 24.4-10.7 6.1-23.6 8.1-34.2 9.6z" + } + }, + "free": [ + "brands" + ] + }, + "nutritionix": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Nutritionix", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "400", + "512" + ], + "path": "M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z" + } + }, + "free": [ + "brands" + ] + }, + "object-group": { + "search": { + "terms": [ + "combine", + "copy", + "design", + "merge", + "select" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Object Group", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "object-ungroup": { + "search": { + "terms": [ + "copy", + "design", + "merge", + "select", + "separate" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Object Ungroup", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "odnoklassniki": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Odnoklassniki", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z" + } + }, + "free": [ + "brands" + ] + }, + "odnoklassniki-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Odnoklassniki Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z" + } + }, + "free": [ + "brands" + ] + }, + "oil-can": { + "search": { + "terms": [ + "auto", + "crude", + "gasoline", + "grease", + "lubricate", + "petroleum" + ] + }, + "styles": [ + "solid" + ], + "label": "Oil Can", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z" + } + }, + "free": [ + "solid" + ] + }, + "old-republic": { + "search": { + "terms": [ + "politics", + "star wars" + ] + }, + "styles": [ + "brands" + ], + "label": "Old Republic", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z" + } + }, + "free": [ + "brands" + ] + }, + "om": { + "search": { + "terms": [ + "buddhism", + "hinduism", + "jainism", + "mantra" + ] + }, + "styles": [ + "solid" + ], + "label": "Om", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z" + } + }, + "free": [ + "solid" + ] + }, + "opencart": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "OpenCart", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z" + } + }, + "free": [ + "brands" + ] + }, + "openid": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "OpenID", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z" + } + }, + "free": [ + "brands" + ] + }, + "opera": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Opera", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z" + } + }, + "free": [ + "brands" + ] + }, + "optin-monster": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Optin Monster", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z" + } + }, + "free": [ + "brands" + ] + }, + "orcid": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "ORCID", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z" + } + }, + "free": [ + "brands" + ] + }, + "osi": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Open Source Initiative", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z" + } + }, + "free": [ + "brands" + ] + }, + "otter": { + "search": { + "terms": [ + "animal", + "badger", + "fauna", + "fur", + "mammal", + "marten" + ] + }, + "styles": [ + "solid" + ], + "label": "Otter", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z" + } + }, + "free": [ + "solid" + ] + }, + "outdent": { + "search": { + "terms": [ + "align", + "justify", + "paragraph", + "tab" + ] + }, + "styles": [ + "solid" + ], + "label": "Outdent", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "page4": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "page4 Corporation", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z" + } + }, + "free": [ + "brands" + ] + }, + "pagelines": { + "search": { + "terms": [ + "eco", + "flora", + "leaf", + "leaves", + "nature", + "plant", + "tree" + ] + }, + "styles": [ + "brands" + ], + "label": "Pagelines", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z" + } + }, + "free": [ + "brands" + ] + }, + "pager": { + "search": { + "terms": [ + "beeper", + "cellphone", + "communication" + ] + }, + "styles": [ + "solid" + ], + "label": "Pager", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z" + } + }, + "free": [ + "solid" + ] + }, + "paint-brush": { + "search": { + "terms": [ + "acrylic", + "art", + "brush", + "color", + "fill", + "paint", + "pigment", + "watercolor" + ] + }, + "styles": [ + "solid" + ], + "label": "Paint Brush", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z" + } + }, + "free": [ + "solid" + ] + }, + "paint-roller": { + "search": { + "terms": [ + "acrylic", + "art", + "brush", + "color", + "fill", + "paint", + "pigment", + "watercolor" + ] + }, + "styles": [ + "solid" + ], + "label": "Paint Roller", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z" + } + }, + "free": [ + "solid" + ] + }, + "palette": { + "search": { + "terms": [ + "acrylic", + "art", + "brush", + "color", + "fill", + "paint", + "pigment", + "watercolor" + ] + }, + "styles": [ + "solid" + ], + "label": "Palette", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "palfed": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Palfed", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z" + } + }, + "free": [ + "brands" + ] + }, + "pallet": { + "search": { + "terms": [ + "archive", + "box", + "inventory", + "shipping", + "warehouse" + ] + }, + "styles": [ + "solid" + ], + "label": "Pallet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z" + } + }, + "free": [ + "solid" + ] + }, + "paper-plane": { + "search": { + "terms": [ + "air", + "float", + "fold", + "mail", + "paper", + "send" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Paper Plane", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "paperclip": { + "search": { + "terms": [ + "attach", + "attachment", + "connect", + "link" + ] + }, + "styles": [ + "solid" + ], + "label": "Paperclip", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z" + } + }, + "free": [ + "solid" + ] + }, + "parachute-box": { + "search": { + "terms": [ + "aid", + "assistance", + "rescue", + "supplies" + ] + }, + "styles": [ + "solid" + ], + "label": "Parachute Box", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z" + } + }, + "free": [ + "solid" + ] + }, + "paragraph": { + "search": { + "terms": [ + "edit", + "format", + "text", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "paragraph", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z" + } + }, + "free": [ + "solid" + ] + }, + "parking": { + "search": { + "terms": [ + "auto", + "car", + "garage", + "meter" + ] + }, + "styles": [ + "solid" + ], + "label": "Parking", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "passport": { + "search": { + "terms": [ + "document", + "id", + "identification", + "issued", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Passport", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z" + } + }, + "free": [ + "solid" + ] + }, + "pastafarianism": { + "search": { + "terms": [ + "agnosticism", + "atheism", + "flying spaghetti monster", + "fsm" + ] + }, + "styles": [ + "solid" + ], + "label": "Pastafarianism", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z" + } + }, + "free": [ + "solid" + ] + }, + "paste": { + "search": { + "terms": [ + "clipboard", + "copy", + "document", + "paper" + ] + }, + "styles": [ + "solid" + ], + "label": "Paste", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z" + } + }, + "free": [ + "solid" + ] + }, + "patreon": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Patreon", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z" + } + }, + "free": [ + "brands" + ] + }, + "pause": { + "search": { + "terms": [ + "hold", + "wait" + ] + }, + "styles": [ + "solid" + ], + "label": "pause", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z" + } + }, + "free": [ + "solid" + ] + }, + "pause-circle": { + "search": { + "terms": [ + "hold", + "wait" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Pause Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "paw": { + "search": { + "terms": [ + "animal", + "cat", + "dog", + "pet", + "print" + ] + }, + "styles": [ + "solid" + ], + "label": "Paw", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z" + } + }, + "free": [ + "solid" + ] + }, + "paypal": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Paypal", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z" + } + }, + "free": [ + "brands" + ] + }, + "peace": { + "search": { + "terms": [ + "serenity", + "tranquility", + "truce", + "war" + ] + }, + "styles": [ + "solid" + ], + "label": "Peace", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z" + } + }, + "free": [ + "solid" + ] + }, + "pen": { + "search": { + "terms": [ + "design", + "edit", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Pen", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z" + } + }, + "free": [ + "solid" + ] + }, + "pen-alt": { + "search": { + "terms": [ + "design", + "edit", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Pen", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z" + } + }, + "free": [ + "solid" + ] + }, + "pen-fancy": { + "search": { + "terms": [ + "design", + "edit", + "fountain pen", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Pen Fancy", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z" + } + }, + "free": [ + "solid" + ] + }, + "pen-nib": { + "search": { + "terms": [ + "design", + "edit", + "fountain pen", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Pen Nib", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z" + } + }, + "free": [ + "solid" + ] + }, + "pen-square": { + "search": { + "terms": [ + "edit", + "pencil-square", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Pen Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z" + } + }, + "free": [ + "solid" + ] + }, + "pencil-alt": { + "search": { + "terms": [ + "design", + "edit", + "pencil", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Pencil", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z" + } + }, + "free": [ + "solid" + ] + }, + "pencil-ruler": { + "search": { + "terms": [ + "design", + "draft", + "draw", + "pencil" + ] + }, + "styles": [ + "solid" + ], + "label": "Pencil Ruler", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z" + } + }, + "free": [ + "solid" + ] + }, + "penny-arcade": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "game", + "gaming", + "pax", + "tabletop" + ] + }, + "styles": [ + "brands" + ], + "label": "Penny Arcade", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M421.91 164.27c-4.49 19.45-1.4 6.06-15.1 65.29l39.73-10.61c-22.34-49.61-17.29-38.41-24.63-54.68zm-206.09 51.11c-20.19 5.4-11.31 3.03-39.63 10.58l4.46 46.19c28.17-7.59 20.62-5.57 34.82-9.34 42.3-9.79 32.85-56.42.35-47.43zm326.16-26.19l-45.47-99.2c-5.69-12.37-19.46-18.84-32.62-15.33-70.27 18.75-38.72 10.32-135.59 36.23a27.618 27.618 0 0 0-18.89 17.41C144.26 113.27 0 153.75 0 226.67c0 33.5 30.67 67.11 80.9 95.37l1.74 17.88a27.891 27.891 0 0 0-17.77 28.67l4.3 44.48c1.39 14.31 13.43 25.21 27.8 25.2 5.18-.01-3.01 1.78 122.53-31.76 12.57-3.37 21.12-15.02 20.58-28.02 216.59 45.5 401.99-5.98 399.89-84.83.01-28.15-22.19-66.56-97.99-104.47zM255.14 298.3l-21.91 5.88-48.44 12.91 2.46 23.55 20.53-5.51 4.51 44.51-115.31 30.78-4.3-44.52 20.02-5.35-11.11-114.64-20.12 5.39-4.35-44.5c178.15-47.54 170.18-46.42 186.22-46.65 56.66-1.13 64.15 71.84 42.55 104.43a86.7 86.7 0 0 1-50.75 33.72zm199.18 16.62l-3.89-39.49 14.9-3.98-6.61-14.68-57.76 15.42-4.1 17.54 19.2-5.12 4.05 39.54-112.85 30.07-4.46-44.43 20.99-5.59 33.08-126.47-17.15 4.56-4.2-44.48c93.36-24.99 65.01-17.41 135.59-36.24l66.67 145.47 20.79-5.56 4.3 44.48-108.55 28.96z" + } + }, + "free": [ + "brands" + ] + }, + "people-arrows": { + "search": { + "terms": [ + "covid-19", + "personal space", + "social distance", + "space", + "spread", + "users" + ] + }, + "styles": [ + "solid" + ], + "label": "People Arrows", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M96,128A64,64,0,1,0,32,64,64,64,0,0,0,96,128Zm0,176.08a44.11,44.11,0,0,1,13.64-32L181.77,204c1.65-1.55,3.77-2.31,5.61-3.57A63.91,63.91,0,0,0,128,160H64A64,64,0,0,0,0,224v96a32,32,0,0,0,32,32V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V383.61l-50.36-47.53A44.08,44.08,0,0,1,96,304.08ZM480,128a64,64,0,1,0-64-64A64,64,0,0,0,480,128Zm32,32H448a63.91,63.91,0,0,0-59.38,40.42c1.84,1.27,4,2,5.62,3.59l72.12,68.06a44.37,44.37,0,0,1,0,64L416,383.62V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V352a32,32,0,0,0,32-32V224A64,64,0,0,0,512,160ZM444.4,295.34l-72.12-68.06A12,12,0,0,0,352,236v36H224V236a12,12,0,0,0-20.28-8.73L131.6,295.34a12.4,12.4,0,0,0,0,17.47l72.12,68.07A12,12,0,0,0,224,372.14V336H352v36.14a12,12,0,0,0,20.28,8.74l72.12-68.07A12.4,12.4,0,0,0,444.4,295.34Z" + } + }, + "free": [ + "solid" + ] + }, + "people-carry": { + "search": { + "terms": [ + "box", + "carry", + "fragile", + "help", + "movers", + "package" + ] + }, + "styles": [ + "solid" + ], + "label": "People Carry", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z" + } + }, + "free": [ + "solid" + ] + }, + "pepper-hot": { + "search": { + "terms": [ + "buffalo wings", + "capsicum", + "chili", + "chilli", + "habanero", + "jalapeno", + "mexican", + "spicy", + "tabasco", + "vegetable" + ] + }, + "styles": [ + "solid" + ], + "label": "Hot Pepper", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z" + } + }, + "free": [ + "solid" + ] + }, + "percent": { + "search": { + "terms": [ + "discount", + "fraction", + "proportion", + "rate", + "ratio" + ] + }, + "styles": [ + "solid" + ], + "label": "Percent", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z" + } + }, + "free": [ + "solid" + ] + }, + "percentage": { + "search": { + "terms": [ + "discount", + "fraction", + "proportion", + "rate", + "ratio" + ] + }, + "styles": [ + "solid" + ], + "label": "Percentage", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z" + } + }, + "free": [ + "solid" + ] + }, + "periscope": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Periscope", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z" + } + }, + "free": [ + "brands" + ] + }, + "person-booth": { + "search": { + "terms": [ + "changing", + "changing room", + "election", + "human", + "person", + "vote", + "voting" + ] + }, + "styles": [ + "solid" + ], + "label": "Person Entering Booth", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "phabricator": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Phabricator", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z" + } + }, + "free": [ + "brands" + ] + }, + "phoenix-framework": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Phoenix Framework", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z" + } + }, + "free": [ + "brands" + ] + }, + "phoenix-squadron": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Phoenix Squadron", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z" + } + }, + "free": [ + "brands" + ] + }, + "phone": { + "search": { + "terms": [ + "call", + "earphone", + "number", + "support", + "telephone", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Phone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z" + } + }, + "free": [ + "solid" + ] + }, + "phone-alt": { + "search": { + "terms": [ + "call", + "earphone", + "number", + "support", + "telephone", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Phone", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z" + } + }, + "free": [ + "solid" + ] + }, + "phone-slash": { + "search": { + "terms": [ + "call", + "cancel", + "earphone", + "mute", + "number", + "support", + "telephone", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Phone Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z" + } + }, + "free": [ + "solid" + ] + }, + "phone-square": { + "search": { + "terms": [ + "call", + "earphone", + "number", + "support", + "telephone", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Phone Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z" + } + }, + "free": [ + "solid" + ] + }, + "phone-square-alt": { + "search": { + "terms": [ + "call", + "earphone", + "number", + "support", + "telephone", + "voice" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Phone Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z" + } + }, + "free": [ + "solid" + ] + }, + "phone-volume": { + "search": { + "terms": [ + "call", + "earphone", + "number", + "sound", + "support", + "telephone", + "voice", + "volume-control-phone" + ] + }, + "styles": [ + "solid" + ], + "label": "Phone Volume", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z" + } + }, + "free": [ + "solid" + ] + }, + "photo-video": { + "search": { + "terms": [ + "av", + "film", + "image", + "library", + "media" + ] + }, + "styles": [ + "solid" + ], + "label": "Photo Video", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z" + } + }, + "free": [ + "solid" + ] + }, + "php": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "PHP", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z" + } + }, + "free": [ + "brands" + ] + }, + "pied-piper": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Pied Piper Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z" + } + }, + "free": [ + "brands" + ] + }, + "pied-piper-alt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Alternate Pied Piper Logo (Old)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z" + } + }, + "free": [ + "brands" + ] + }, + "pied-piper-hat": { + "search": { + "terms": [ + "clothing" + ] + }, + "styles": [ + "brands" + ], + "label": "Pied Piper Hat (Old)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z" + } + }, + "free": [ + "brands" + ] + }, + "pied-piper-pp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Pied Piper PP Logo (Old)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z" + } + }, + "free": [ + "brands" + ] + }, + "pied-piper-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Pied Piper Square Logo (Old)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z" + } + }, + "free": [ + "brands" + ] + }, + "piggy-bank": { + "search": { + "terms": [ + "bank", + "save", + "savings" + ] + }, + "styles": [ + "solid" + ], + "label": "Piggy Bank", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z" + } + }, + "free": [ + "solid" + ] + }, + "pills": { + "search": { + "terms": [ + "drugs", + "medicine", + "prescription", + "tablets" + ] + }, + "styles": [ + "solid" + ], + "label": "Pills", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z" + } + }, + "free": [ + "solid" + ] + }, + "pinterest": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Pinterest", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z" + } + }, + "free": [ + "brands" + ] + }, + "pinterest-p": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Pinterest P", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z" + } + }, + "free": [ + "brands" + ] + }, + "pinterest-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Pinterest Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z" + } + }, + "free": [ + "brands" + ] + }, + "pizza-slice": { + "search": { + "terms": [ + "cheese", + "chicago", + "italian", + "mozzarella", + "new york", + "pepperoni", + "pie", + "slice", + "teenage mutant ninja turtles", + "tomato" + ] + }, + "styles": [ + "solid" + ], + "label": "Pizza Slice", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "place-of-worship": { + "search": { + "terms": [ + "building", + "church", + "holy", + "mosque", + "synagogue" + ] + }, + "styles": [ + "solid" + ], + "label": "Place of Worship", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z" + } + }, + "free": [ + "solid" + ] + }, + "plane": { + "search": { + "terms": [ + "airplane", + "destination", + "fly", + "location", + "mode", + "travel", + "trip" + ] + }, + "styles": [ + "solid" + ], + "label": "plane", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z" + } + }, + "free": [ + "solid" + ] + }, + "plane-arrival": { + "search": { + "terms": [ + "airplane", + "arriving", + "destination", + "fly", + "land", + "landing", + "location", + "mode", + "travel", + "trip" + ] + }, + "styles": [ + "solid" + ], + "label": "Plane Arrival", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z" + } + }, + "free": [ + "solid" + ] + }, + "plane-departure": { + "search": { + "terms": [ + "airplane", + "departing", + "destination", + "fly", + "location", + "mode", + "take off", + "taking off", + "travel", + "trip" + ] + }, + "styles": [ + "solid" + ], + "label": "Plane Departure", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z" + } + }, + "free": [ + "solid" + ] + }, + "plane-slash": { + "search": { + "terms": [ + "airplane mode", + "canceled", + "covid-19", + "delayed", + "grounded", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Plane Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M32.48,147.88,64,256,32.48,364.13A16,16,0,0,0,48,384H88a16,16,0,0,0,12.8-6.41L144,320H246.85l-49,171.59A16,16,0,0,0,213.2,512h65.5a16,16,0,0,0,13.89-8.06l66.6-116.54L34.35,136.34A15.47,15.47,0,0,0,32.48,147.88ZM633.82,458.09,455.14,320H512c35.34,0,96-28.66,96-64s-60.66-64-96-64H397.7L292.61,8.06C290.06,3.61,283.84,0,278.71,0H213.2a16,16,0,0,0-15.38,20.39l36.94,129.29L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09Z" + } + }, + "free": [ + "solid" + ] + }, + "play": { + "search": { + "terms": [ + "audio", + "music", + "playing", + "sound", + "start", + "video" + ] + }, + "styles": [ + "solid" + ], + "label": "play", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z" + } + }, + "free": [ + "solid" + ] + }, + "play-circle": { + "search": { + "terms": [ + "audio", + "music", + "playing", + "sound", + "start", + "video" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Play Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "playstation": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "PlayStation", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z" + } + }, + "free": [ + "brands" + ] + }, + "plug": { + "search": { + "terms": [ + "connect", + "electric", + "online", + "power" + ] + }, + "styles": [ + "solid" + ], + "label": "Plug", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z" + } + }, + "free": [ + "solid" + ] + }, + "plus": { + "search": { + "terms": [ + "add", + "create", + "expand", + "new", + "positive", + "shape" + ] + }, + "styles": [ + "solid" + ], + "label": "plus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "plus-circle": { + "search": { + "terms": [ + "add", + "create", + "expand", + "new", + "positive", + "shape" + ] + }, + "styles": [ + "solid" + ], + "label": "Plus Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z" + } + }, + "free": [ + "solid" + ] + }, + "plus-square": { + "search": { + "terms": [ + "add", + "create", + "expand", + "new", + "positive", + "shape" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Plus Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "podcast": { + "search": { + "terms": [ + "audio", + "broadcast", + "music", + "sound" + ] + }, + "styles": [ + "solid" + ], + "label": "Podcast", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z" + } + }, + "free": [ + "solid" + ] + }, + "poll": { + "search": { + "terms": [ + "results", + "survey", + "trend", + "vote", + "voting" + ] + }, + "styles": [ + "solid" + ], + "label": "Poll", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z" + } + }, + "free": [ + "solid" + ] + }, + "poll-h": { + "search": { + "terms": [ + "results", + "survey", + "trend", + "vote", + "voting" + ] + }, + "styles": [ + "solid" + ], + "label": "Poll H", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z" + } + }, + "free": [ + "solid" + ] + }, + "poo": { + "search": { + "terms": [ + "crap", + "poop", + "shit", + "smile", + "turd" + ] + }, + "styles": [ + "solid" + ], + "label": "Poo", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "poo-storm": { + "search": { + "terms": [ + "bolt", + "cloud", + "euphemism", + "lightning", + "mess", + "poop", + "shit", + "turd" + ] + }, + "styles": [ + "solid" + ], + "label": "Poo Storm", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z" + } + }, + "free": [ + "solid" + ] + }, + "poop": { + "search": { + "terms": [ + "crap", + "poop", + "shit", + "smile", + "turd" + ] + }, + "styles": [ + "solid" + ], + "label": "Poop", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z" + } + }, + "free": [ + "solid" + ] + }, + "portrait": { + "search": { + "terms": [ + "id", + "image", + "photo", + "picture", + "selfie" + ] + }, + "styles": [ + "solid" + ], + "label": "Portrait", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z" + } + }, + "free": [ + "solid" + ] + }, + "pound-sign": { + "search": { + "terms": [ + "currency", + "gbp", + "money" + ] + }, + "styles": [ + "solid" + ], + "label": "Pound Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z" + } + }, + "free": [ + "solid" + ] + }, + "power-off": { + "search": { + "terms": [ + "cancel", + "computer", + "on", + "reboot", + "restart" + ] + }, + "styles": [ + "solid" + ], + "label": "Power Off", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z" + } + }, + "free": [ + "solid" + ] + }, + "pray": { + "search": { + "terms": [ + "kneel", + "preach", + "religion", + "worship" + ] + }, + "styles": [ + "solid" + ], + "label": "Pray", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z" + } + }, + "free": [ + "solid" + ] + }, + "praying-hands": { + "search": { + "terms": [ + "kneel", + "preach", + "religion", + "worship" + ] + }, + "styles": [ + "solid" + ], + "label": "Praying Hands", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z" + } + }, + "free": [ + "solid" + ] + }, + "prescription": { + "search": { + "terms": [ + "drugs", + "medical", + "medicine", + "pharmacy", + "rx" + ] + }, + "styles": [ + "solid" + ], + "label": "Prescription", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z" + } + }, + "free": [ + "solid" + ] + }, + "prescription-bottle": { + "search": { + "terms": [ + "drugs", + "medical", + "medicine", + "pharmacy", + "rx" + ] + }, + "styles": [ + "solid" + ], + "label": "Prescription Bottle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "prescription-bottle-alt": { + "search": { + "terms": [ + "drugs", + "medical", + "medicine", + "pharmacy", + "rx" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Prescription Bottle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z" + } + }, + "free": [ + "solid" + ] + }, + "print": { + "search": { + "terms": [ + "business", + "copy", + "document", + "office", + "paper" + ] + }, + "styles": [ + "solid" + ], + "label": "print", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "procedures": { + "search": { + "terms": [ + "EKG", + "bed", + "electrocardiogram", + "health", + "hospital", + "life", + "patient", + "vital" + ] + }, + "styles": [ + "solid" + ], + "label": "Procedures", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z" + } + }, + "free": [ + "solid" + ] + }, + "product-hunt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Product Hunt", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z" + } + }, + "free": [ + "brands" + ] + }, + "project-diagram": { + "search": { + "terms": [ + "chart", + "graph", + "network", + "pert" + ] + }, + "styles": [ + "solid" + ], + "label": "Project Diagram", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "pump-medical": { + "search": { + "terms": [ + "anti-bacterial", + "clean", + "covid-19", + "disinfect", + "hygiene", + "medical grade", + "sanitizer", + "soap" + ] + }, + "styles": [ + "solid" + ], + "label": "Pump Medical", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M235.51,159.82H84.24A64,64,0,0,0,20.51,218L.14,442a64,64,0,0,0,63.74,69.8h192A64,64,0,0,0,319.61,442L299.24,218A64,64,0,0,0,235.51,159.82Zm4.37,173.33a13.35,13.35,0,0,1-13.34,13.34h-40v40a13.33,13.33,0,0,1-13.33,13.33H146.54a13.33,13.33,0,0,1-13.33-13.33v-40h-40a13.34,13.34,0,0,1-13.33-13.34V306.49a13.33,13.33,0,0,1,13.33-13.34h40v-40a13.33,13.33,0,0,1,13.33-13.33h26.67a13.33,13.33,0,0,1,13.33,13.33v40h40a13.34,13.34,0,0,1,13.34,13.34ZM379.19,93.88,335.87,50.56a64,64,0,0,0-45.24-18.74H223.88a32,32,0,0,0-32-32h-64a32,32,0,0,0-32,32v96h128v-32h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.19,93.88Z" + } + }, + "free": [ + "solid" + ] + }, + "pump-soap": { + "search": { + "terms": [ + "anti-bacterial", + "clean", + "covid-19", + "disinfect", + "hygiene", + "sanitizer", + "soap" + ] + }, + "styles": [ + "solid" + ], + "label": "Pump Soap", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M235.63,160H84.37a64,64,0,0,0-63.74,58.21L.27,442.21A64,64,0,0,0,64,512H256a64,64,0,0,0,63.74-69.79l-20.36-224A64,64,0,0,0,235.63,160ZM160,416c-33.12,0-60-26.33-60-58.75,0-25,35.7-75.47,52-97.27A10,10,0,0,1,168,260c16.33,21.8,52,72.27,52,97.27C220,389.67,193.12,416,160,416ZM379.31,94.06,336,50.74A64,64,0,0,0,290.75,32H224A32,32,0,0,0,192,0H128A32,32,0,0,0,96,32v96H224V96h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.31,94.06Z" + } + }, + "free": [ + "solid" + ] + }, + "pushed": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Pushed", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "432", + "512" + ], + "path": "M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z" + } + }, + "free": [ + "brands" + ] + }, + "puzzle-piece": { + "search": { + "terms": [ + "add-on", + "addon", + "game", + "section" + ] + }, + "styles": [ + "solid" + ], + "label": "Puzzle Piece", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z" + } + }, + "free": [ + "solid" + ] + }, + "python": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Python", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z" + } + }, + "free": [ + "brands" + ] + }, + "qq": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "QQ", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z" + } + }, + "free": [ + "brands" + ] + }, + "qrcode": { + "search": { + "terms": [ + "barcode", + "info", + "information", + "scan" + ] + }, + "styles": [ + "solid" + ], + "label": "qrcode", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z" + } + }, + "free": [ + "solid" + ] + }, + "question": { + "search": { + "terms": [ + "help", + "information", + "support", + "unknown" + ] + }, + "styles": [ + "solid" + ], + "label": "Question", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z" + } + }, + "free": [ + "solid" + ] + }, + "question-circle": { + "search": { + "terms": [ + "help", + "information", + "support", + "unknown" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Question Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "quidditch": { + "search": { + "terms": [ + "ball", + "bludger", + "broom", + "golden snitch", + "harry potter", + "hogwarts", + "quaffle", + "sport", + "wizard" + ] + }, + "styles": [ + "solid" + ], + "label": "Quidditch", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z" + } + }, + "free": [ + "solid" + ] + }, + "quinscape": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "QuinScape", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z" + } + }, + "free": [ + "brands" + ] + }, + "quora": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Quora", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z" + } + }, + "free": [ + "brands" + ] + }, + "quote-left": { + "search": { + "terms": [ + "mention", + "note", + "phrase", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "quote-left", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "quote-right": { + "search": { + "terms": [ + "mention", + "note", + "phrase", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "quote-right", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "quran": { + "search": { + "terms": [ + "book", + "islam", + "muslim", + "religion" + ] + }, + "styles": [ + "solid" + ], + "label": "Quran", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z" + } + }, + "free": [ + "solid" + ] + }, + "r-project": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "R Project", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "581", + "512" + ], + "path": "M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z" + } + }, + "free": [ + "brands" + ] + }, + "radiation": { + "search": { + "terms": [ + "danger", + "dangerous", + "deadly", + "hazard", + "nuclear", + "radioactive", + "warning" + ] + }, + "styles": [ + "solid" + ], + "label": "Radiation", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z" + } + }, + "free": [ + "solid" + ] + }, + "radiation-alt": { + "search": { + "terms": [ + "danger", + "dangerous", + "deadly", + "hazard", + "nuclear", + "radioactive", + "warning" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Radiation", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z" + } + }, + "free": [ + "solid" + ] + }, + "rainbow": { + "search": { + "terms": [ + "gold", + "leprechaun", + "prism", + "rain", + "sky" + ] + }, + "styles": [ + "solid" + ], + "label": "Rainbow", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z" + } + }, + "free": [ + "solid" + ] + }, + "random": { + "search": { + "terms": [ + "arrows", + "shuffle", + "sort", + "swap", + "switch", + "transfer" + ] + }, + "styles": [ + "solid" + ], + "label": "random", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z" + } + }, + "free": [ + "solid" + ] + }, + "raspberry-pi": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Raspberry Pi", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "407", + "512" + ], + "path": "M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z" + } + }, + "free": [ + "brands" + ] + }, + "ravelry": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Ravelry", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M407.4 61.5C331.6 22.1 257.8 31 182.9 66c-11.3 5.2-15.5 10.6-19.9 19-10.3 19.2-16.2 37.4-19.9 52.7-21.2 25.6-36.4 56.1-43.3 89.9-10.6 18-20.9 41.4-23.1 71.4 0 0-.7 7.6-.5 7.9-35.3-4.6-76.2-27-76.2-27 9.1 14.5 61.3 32.3 76.3 37.9 0 0 1.7 98 64.5 131.2-11.3-17.2-13.3-20.2-13.3-20.2S94.8 369 100.4 324.7c.7 0 1.5.2 2.2.2 23.9 87.4 103.2 151.4 196.9 151.4 6.2 0 12.1-.2 18-.7 14 1.5 27.6.5 40.1-3.9 6.9-2.2 13.8-6.4 20.2-10.8 70.2-39.1 100.9-82 123.1-147.7 5.4-16 8.1-35.5 9.8-52.2 8.7-82.3-30.6-161.6-103.3-199.5zM138.8 163.2s-1.2 12.3-.7 19.7c-3.4 2.5-10.1 8.1-18.2 16.7 5.2-12.8 11.3-25.1 18.9-36.4zm-31.2 121.9c4.4-17.2 13.3-39.1 29.8-55.1 0 0 1.7 48 15.8 90.1l-41.4-6.9c-2.2-9.2-3.5-18.5-4.2-28.1zm7.9 42.8c14.8 3.2 34 7.6 43.1 9.1 27.3 76.8 108.3 124.3 108.3 124.3 1 .5 1.7.7 2.7 1-73.1-11.6-132.7-64.7-154.1-134.4zM386 444.1c-14.5 4.7-36.2 8.4-64.7 3.7 0 0-91.1-23.1-127.5-107.8 38.2.7 52.4-.2 78-3.9 39.4-5.7 79-16.2 115-33 11.8-5.4 11.1-19.4 9.6-29.8-2-12.8-11.1-12.1-21.4-4.7 0 0-82 58.6-189.8 53.7-18.7-32-26.8-110.8-26.8-110.8 41.4-35.2 83.2-59.6 168.4-52.4.2-6.4 3-27.1-20.4-28.1 0 0-93.5-11.1-146 33.5 2.5-16.5 5.9-29.3 11.1-39.4 34.2-30.8 79-49.5 128.3-49.5 106.4 0 193 87.1 193 194.5-.2 76-43.8 142-106.8 174z" + } + }, + "free": [ + "brands" + ] + }, + "react": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "React", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z" + } + }, + "free": [ + "brands" + ] + }, + "reacteurope": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "ReactEurope", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z" + } + }, + "free": [ + "brands" + ] + }, + "readme": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "ReadMe", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z" + } + }, + "free": [ + "brands" + ] + }, + "rebel": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Rebel Alliance", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z" + } + }, + "free": [ + "brands" + ] + }, + "receipt": { + "search": { + "terms": [ + "check", + "invoice", + "money", + "pay", + "table" + ] + }, + "styles": [ + "solid" + ], + "label": "Receipt", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z" + } + }, + "free": [ + "solid" + ] + }, + "record-vinyl": { + "search": { + "terms": [ + "LP", + "album", + "analog", + "music", + "phonograph", + "sound" + ] + }, + "styles": [ + "solid" + ], + "label": "Record Vinyl", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 152a104 104 0 1 0 104 104 104 104 0 0 0-104-104zm0 128a24 24 0 1 1 24-24 24 24 0 0 1-24 24zm0-272C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a128 128 0 1 1 128-128 128 128 0 0 1-128 128z" + } + }, + "free": [ + "solid" + ] + }, + "recycle": { + "search": { + "terms": [ + "Waste", + "compost", + "garbage", + "reuse", + "trash" + ] + }, + "styles": [ + "solid" + ], + "label": "Recycle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z" + } + }, + "free": [ + "solid" + ] + }, + "red-river": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "red river", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z" + } + }, + "free": [ + "brands" + ] + }, + "reddit": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "reddit Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z" + } + }, + "free": [ + "brands" + ] + }, + "reddit-alien": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "reddit Alien", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z" + } + }, + "free": [ + "brands" + ] + }, + "reddit-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "reddit Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z" + } + }, + "free": [ + "brands" + ] + }, + "redhat": { + "search": { + "terms": [ + "linux", + "operating system", + "os" + ] + }, + "styles": [ + "brands" + ], + "label": "Redhat", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24" + } + }, + "free": [ + "brands" + ] + }, + "redo": { + "search": { + "terms": [ + "forward", + "refresh", + "reload", + "repeat" + ] + }, + "styles": [ + "solid" + ], + "label": "Redo", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z" + } + }, + "free": [ + "solid" + ] + }, + "redo-alt": { + "search": { + "terms": [ + "forward", + "refresh", + "reload", + "repeat" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Redo", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z" + } + }, + "free": [ + "solid" + ] + }, + "registered": { + "search": { + "terms": [ + "copyright", + "mark", + "trademark" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Registered Trademark", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "remove-format": { + "search": { + "terms": [ + "cancel", + "font", + "format", + "remove", + "style", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "Remove Format", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z" + } + }, + "free": [ + "solid" + ] + }, + "renren": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Renren", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z" + } + }, + "free": [ + "brands" + ] + }, + "reply": { + "search": { + "terms": [ + "mail", + "message", + "respond" + ] + }, + "styles": [ + "solid" + ], + "label": "Reply", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z" + } + }, + "free": [ + "solid" + ] + }, + "reply-all": { + "search": { + "terms": [ + "mail", + "message", + "respond" + ] + }, + "styles": [ + "solid" + ], + "label": "reply-all", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z" + } + }, + "free": [ + "solid" + ] + }, + "replyd": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "replyd", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z" + } + }, + "free": [ + "brands" + ] + }, + "republican": { + "search": { + "terms": [ + "american", + "conservative", + "election", + "elephant", + "politics", + "republican party", + "right", + "right-wing", + "usa" + ] + }, + "styles": [ + "solid" + ], + "label": "Republican", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "researchgate": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Researchgate", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z" + } + }, + "free": [ + "brands" + ] + }, + "resolving": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Resolving", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z" + } + }, + "free": [ + "brands" + ] + }, + "restroom": { + "search": { + "terms": [ + "bathroom", + "john", + "loo", + "potty", + "washroom", + "waste", + "wc" + ] + }, + "styles": [ + "solid" + ], + "label": "Restroom", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z" + } + }, + "free": [ + "solid" + ] + }, + "retweet": { + "search": { + "terms": [ + "refresh", + "reload", + "share", + "swap" + ] + }, + "styles": [ + "solid" + ], + "label": "Retweet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z" + } + }, + "free": [ + "solid" + ] + }, + "rev": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Rev.io", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z" + } + }, + "free": [ + "brands" + ] + }, + "ribbon": { + "search": { + "terms": [ + "badge", + "cause", + "lapel", + "pin" + ] + }, + "styles": [ + "solid" + ], + "label": "Ribbon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z" + } + }, + "free": [ + "solid" + ] + }, + "ring": { + "search": { + "terms": [ + "Dungeons & Dragons", + "Gollum", + "band", + "binding", + "d&d", + "dnd", + "engagement", + "fantasy", + "gold", + "jewelry", + "marriage", + "precious" + ] + }, + "styles": [ + "solid" + ], + "label": "Ring", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z" + } + }, + "free": [ + "solid" + ] + }, + "road": { + "search": { + "terms": [ + "highway", + "map", + "pavement", + "route", + "street", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "road", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z" + } + }, + "free": [ + "solid" + ] + }, + "robot": { + "search": { + "terms": [ + "android", + "automate", + "computer", + "cyborg" + ] + }, + "styles": [ + "solid" + ], + "label": "Robot", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z" + } + }, + "free": [ + "solid" + ] + }, + "rocket": { + "search": { + "terms": [ + "aircraft", + "app", + "jet", + "launch", + "nasa", + "space" + ] + }, + "styles": [ + "solid" + ], + "label": "rocket", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z" + } + }, + "free": [ + "solid" + ] + }, + "rocketchat": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Rocket.Chat", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M486.41 107.57c-76.93-50.83-179.18-62.4-264.12-47.07C127.26-31.16 20.77 11 0 23.12c0 0 73.08 62.1 61.21 116.49-86.52 88.2-45.39 186.4 0 232.77C73.08 426.77 0 488.87 0 488.87c20.57 12.16 126.77 54.19 222.29-37 84.75 15.23 187 3.76 264.12-47.16 119.26-76.14 119.65-220.61 0-297.15zM294.18 404.22a339.53 339.53 0 0 1-88.11-11.37l-19.77 19.09a179.74 179.74 0 0 1-36.59 27.39A143.14 143.14 0 0 1 98 454.06c1-1.78 1.88-3.56 2.77-5.24q29.67-55 16-98.69c-32.53-25.61-52-58.34-52-94.13 0-82 102.74-148.43 229.41-148.43S523.59 174 523.59 256 420.85 404.22 294.18 404.22zM184.12 291.3a34.32 34.32 0 0 1-34.8-33.72c-.7-45.39 67.83-46.38 68.52-1.09v.51a34 34 0 0 1-33.72 34.32zm73.77-33.72c-.79-45.39 67.74-46.48 68.53-1.19v.61c.39 45.08-67.74 45.57-68.53.58zm143.38 33.72a34.33 34.33 0 0 1-34.81-33.72c-.69-45.39 67.84-46.38 68.53-1.09v.51a33.89 33.89 0 0 1-33.72 34.32z" + } + }, + "free": [ + "brands" + ] + }, + "rockrms": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Rockrms", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z" + } + }, + "free": [ + "brands" + ] + }, + "route": { + "search": { + "terms": [ + "directions", + "navigation", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Route", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "rss": { + "search": { + "terms": [ + "blog", + "feed", + "journal", + "news", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "rss", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z" + } + }, + "free": [ + "solid" + ] + }, + "rss-square": { + "search": { + "terms": [ + "blog", + "feed", + "journal", + "news", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "RSS Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z" + } + }, + "free": [ + "solid" + ] + }, + "ruble-sign": { + "search": { + "terms": [ + "currency", + "money", + "rub" + ] + }, + "styles": [ + "solid" + ], + "label": "Ruble Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z" + } + }, + "free": [ + "solid" + ] + }, + "ruler": { + "search": { + "terms": [ + "design", + "draft", + "length", + "measure", + "planning" + ] + }, + "styles": [ + "solid" + ], + "label": "Ruler", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z" + } + }, + "free": [ + "solid" + ] + }, + "ruler-combined": { + "search": { + "terms": [ + "design", + "draft", + "length", + "measure", + "planning" + ] + }, + "styles": [ + "solid" + ], + "label": "Ruler Combined", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "ruler-horizontal": { + "search": { + "terms": [ + "design", + "draft", + "length", + "measure", + "planning" + ] + }, + "styles": [ + "solid" + ], + "label": "Ruler Horizontal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "ruler-vertical": { + "search": { + "terms": [ + "design", + "draft", + "length", + "measure", + "planning" + ] + }, + "styles": [ + "solid" + ], + "label": "Ruler Vertical", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z" + } + }, + "free": [ + "solid" + ] + }, + "running": { + "search": { + "terms": [ + "exercise", + "health", + "jog", + "person", + "run", + "sport", + "sprint" + ] + }, + "styles": [ + "solid" + ], + "label": "Running", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "416", + "512" + ], + "path": "M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z" + } + }, + "free": [ + "solid" + ] + }, + "rupee-sign": { + "search": { + "terms": [ + "currency", + "indian", + "inr", + "money" + ] + }, + "styles": [ + "solid" + ], + "label": "Indian Rupee Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z" + } + }, + "free": [ + "solid" + ] + }, + "rust": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Rust", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M508.52,249.75,486.7,236.24c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35,7.35,0,0,0-2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35,7.35,0,0,0-4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35,7.35,0,0,0-6.95-10.39l-25.82.91q-1.79-2.22-3.61-4.4L439,81.84A7.36,7.36,0,0,0,430.16,73L405,78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35,7.35,0,0,0-10.39-7L367.7,53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4,25.08a7.35,7.35,0,0,0-11.54-4.79L326,35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35,7.35,0,0,0-12.25-2.44l-17.5,18.72c-1.95-.21-3.91-.38-5.88-.55L262.25,3.48a7.35,7.35,0,0,0-12.5,0L236.24,25.3c-2,.17-3.93.34-5.88.55L212.86,7.13a7.35,7.35,0,0,0-12.25,2.44l-9,24c-1.89.55-3.79,1.08-5.66,1.68l-20.82-15a7.35,7.35,0,0,0-11.54,4.79l-4.15,25.41c-1.73.9-3.45,1.79-5.16,2.73L120.88,42.55a7.35,7.35,0,0,0-10.39,7l.92,25.81c-1.49,1.19-3,2.39-4.42,3.61L81.84,73A7.36,7.36,0,0,0,73,81.84L78.93,107c-1.23,1.45-2.43,2.93-3.62,4.41l-25.81-.91a7.42,7.42,0,0,0-6.37,3.26,7.35,7.35,0,0,0-.57,7.13l10.66,23.41c-.94,1.7-1.83,3.43-2.73,5.16L25.08,153.6a7.35,7.35,0,0,0-4.79,11.54l15,20.82c-.59,1.87-1.13,3.77-1.68,5.66l-24,9a7.35,7.35,0,0,0-2.44,12.25l18.72,17.5c-.21,1.95-.38,3.91-.55,5.88L3.48,249.75a7.35,7.35,0,0,0,0,12.5L25.3,275.76c.17,2,.34,3.92.55,5.87L7.13,299.13a7.35,7.35,0,0,0,2.44,12.25l24,9c.55,1.89,1.08,3.78,1.68,5.65l-15,20.83a7.35,7.35,0,0,0,4.79,11.54l25.42,4.15c.9,1.72,1.79,3.45,2.73,5.14L42.56,391.12a7.35,7.35,0,0,0,.57,7.13,7.13,7.13,0,0,0,6.37,3.26l25.83-.91q1.77,2.22,3.6,4.4L73,430.16A7.36,7.36,0,0,0,81.84,439L107,433.07q2.18,1.83,4.41,3.61l-.92,25.82a7.35,7.35,0,0,0,10.39,6.95l23.43-10.68c1.69.94,3.42,1.83,5.14,2.73l4.15,25.42a7.34,7.34,0,0,0,11.54,4.78l20.83-15c1.86.6,3.76,1.13,5.65,1.68l9,24a7.36,7.36,0,0,0,12.25,2.44l17.5-18.72c1.95.21,3.92.38,5.88.55l13.51,21.82a7.35,7.35,0,0,0,12.5,0l13.51-21.82c2-.17,3.93-.34,5.88-.56l17.5,18.73a7.36,7.36,0,0,0,12.25-2.44l9-24c1.89-.55,3.78-1.08,5.65-1.68l20.82,15a7.34,7.34,0,0,0,11.54-4.78l4.15-25.42c1.72-.9,3.45-1.79,5.15-2.73l23.42,10.68a7.35,7.35,0,0,0,10.39-6.95l-.91-25.82q2.22-1.79,4.4-3.61L430.16,439a7.36,7.36,0,0,0,8.84-8.84L433.07,405q1.83-2.17,3.61-4.4l25.82.91a7.23,7.23,0,0,0,6.37-3.26,7.35,7.35,0,0,0,.58-7.13L458.77,367.7c.94-1.7,1.83-3.43,2.73-5.15l25.42-4.15a7.35,7.35,0,0,0,4.79-11.54l-15-20.83c.59-1.87,1.13-3.76,1.67-5.65l24-9a7.35,7.35,0,0,0,2.44-12.25l-18.72-17.5c.21-1.95.38-3.91.55-5.87l21.82-13.51a7.35,7.35,0,0,0,0-12.5Zm-151,129.08A13.91,13.91,0,0,0,341,389.51l-7.64,35.67A187.51,187.51,0,0,1,177,424.44l-7.64-35.66a13.87,13.87,0,0,0-16.46-10.68l-31.51,6.76a187.38,187.38,0,0,1-16.26-19.21H258.3c1.72,0,2.89-.29,2.89-1.91V309.55c0-1.57-1.17-1.91-2.89-1.91H213.47l.05-34.35H262c4.41,0,23.66,1.28,29.79,25.87,1.91,7.55,6.17,32.14,9.06,40,2.89,8.82,14.6,26.46,27.1,26.46H407a187.3,187.3,0,0,1-17.34,20.09Zm25.77,34.49A15.24,15.24,0,1,1,368,398.08h.44A15.23,15.23,0,0,1,383.24,413.32Zm-225.62-.68a15.24,15.24,0,1,1-15.25-15.25h.45A15.25,15.25,0,0,1,157.62,412.64ZM69.57,234.15l32.83-14.6a13.88,13.88,0,0,0,7.06-18.33L102.69,186h26.56V305.73H75.65A187.65,187.65,0,0,1,69.57,234.15ZM58.31,198.09a15.24,15.24,0,0,1,15.23-15.25H74a15.24,15.24,0,1,1-15.67,15.24Zm155.16,24.49.05-35.32h63.26c3.28,0,23.07,3.77,23.07,18.62,0,12.29-15.19,16.7-27.68,16.7ZM399,306.71c-9.8,1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4,18.86-11.95,38.46-29.64,38.46-53.26,0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.32A187.49,187.49,0,0,1,221.21,70.06l23.47,24.6a13.82,13.82,0,0,0,19.6.44l26.26-25a187.51,187.51,0,0,1,128.37,91.43l-18,40.57A14,14,0,0,0,408,220.43l34.59,15.33a187.12,187.12,0,0,1,.4,32.54H423.71c-1.91,0-2.69,1.27-2.69,3.13v8.82C421,301,409.31,305.58,399,306.71ZM240,60.21A15.24,15.24,0,0,1,255.21,45h.45A15.24,15.24,0,1,1,240,60.21ZM436.84,214a15.24,15.24,0,1,1,0-30.48h.44a15.24,15.24,0,0,1-.44,30.48Z" + } + }, + "free": [ + "brands" + ] + }, + "sad-cry": { + "search": { + "terms": [ + "emoticon", + "face", + "tear", + "tears" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Crying Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "sad-tear": { + "search": { + "terms": [ + "emoticon", + "face", + "tear", + "tears" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Loudly Crying Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "safari": { + "search": { + "terms": [ + "browser" + ] + }, + "styles": [ + "brands" + ], + "label": "Safari", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z" + } + }, + "free": [ + "brands" + ] + }, + "salesforce": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Salesforce", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z" + } + }, + "free": [ + "brands" + ] + }, + "sass": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Sass", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z" + } + }, + "free": [ + "brands" + ] + }, + "satellite": { + "search": { + "terms": [ + "communications", + "hardware", + "orbit", + "space" + ] + }, + "styles": [ + "solid" + ], + "label": "Satellite", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.60969,310.04206l-96.70393,96.71625a31.88151,31.88151,0,0,1-45.00765,0L280.572,326.34115l-9.89231,9.90759a190.56343,190.56343,0,0,1-5.40716,168.52287c-4.50077,8.50115-16.39342,9.59505-23.20707,2.79725L134.54715,400.05428l-17.7999,17.79929c.70324,2.60972,1.60965,5.00067,1.60965,7.79793a32.00544,32.00544,0,1,1-32.00544-32.00434c2.79735,0,5.18838.90637,7.7982,1.60959l17.7999-17.79929L4.43129,269.94287c-6.798-6.81342-5.70409-18.6119,2.79735-23.20627a190.58161,190.58161,0,0,1,168.52864-5.407l9.79854-9.79821-80.31053-80.41716a32.002,32.002,0,0,1,0-45.09987L201.96474,9.29814A31.62639,31.62639,0,0,1,224.46868,0a31.99951,31.99951,0,0,1,22.59759,9.29814l80.32615,80.30777,47.805-47.89713a33.6075,33.6075,0,0,1,47.50808,0l47.50807,47.50645a33.63308,33.63308,0,0,1,0,47.50644l-47.805,47.89713L502.71908,265.036A31.78938,31.78938,0,0,1,502.60969,310.04206ZM219.56159,197.433l73.82505-73.82252-68.918-68.9-73.80942,73.80689Zm237.74352,90.106-68.90233-68.9156-73.825,73.82252,68.918,68.9Z" + } + }, + "free": [ + "solid" + ] + }, + "satellite-dish": { + "search": { + "terms": [ + "SETI", + "communications", + "hardware", + "receiver", + "saucer", + "signal", + "space" + ] + }, + "styles": [ + "solid" + ], + "label": "Satellite Dish", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z" + } + }, + "free": [ + "solid" + ] + }, + "save": { + "search": { + "terms": [ + "disk", + "download", + "floppy", + "floppy-o" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Save", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "schlix": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "SCHLIX", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z" + } + }, + "free": [ + "brands" + ] + }, + "school": { + "search": { + "terms": [ + "building", + "education", + "learn", + "student", + "teacher" + ] + }, + "styles": [ + "solid" + ], + "label": "School", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "screwdriver": { + "search": { + "terms": [ + "admin", + "fix", + "mechanic", + "repair", + "settings", + "tool" + ] + }, + "styles": [ + "solid" + ], + "label": "Screwdriver", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z" + } + }, + "free": [ + "solid" + ] + }, + "scribd": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Scribd", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z" + } + }, + "free": [ + "brands" + ] + }, + "scroll": { + "search": { + "terms": [ + "Dungeons & Dragons", + "announcement", + "d&d", + "dnd", + "fantasy", + "paper", + "script" + ] + }, + "styles": [ + "solid" + ], + "label": "Scroll", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z" + } + }, + "free": [ + "solid" + ] + }, + "sd-card": { + "search": { + "terms": [ + "image", + "memory", + "photo", + "save" + ] + }, + "styles": [ + "solid" + ], + "label": "Sd Card", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z" + } + }, + "free": [ + "solid" + ] + }, + "search": { + "search": { + "terms": [ + "bigger", + "enlarge", + "find", + "magnify", + "preview", + "zoom" + ] + }, + "styles": [ + "solid" + ], + "label": "Search", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" + } + }, + "free": [ + "solid" + ] + }, + "search-dollar": { + "search": { + "terms": [ + "bigger", + "enlarge", + "find", + "magnify", + "money", + "preview", + "zoom" + ] + }, + "styles": [ + "solid" + ], + "label": "Search Dollar", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z" + } + }, + "free": [ + "solid" + ] + }, + "search-location": { + "search": { + "terms": [ + "bigger", + "enlarge", + "find", + "magnify", + "preview", + "zoom" + ] + }, + "styles": [ + "solid" + ], + "label": "Search Location", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "search-minus": { + "search": { + "terms": [ + "minify", + "negative", + "smaller", + "zoom", + "zoom out" + ] + }, + "styles": [ + "solid" + ], + "label": "Search Minus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z" + } + }, + "free": [ + "solid" + ] + }, + "search-plus": { + "search": { + "terms": [ + "bigger", + "enlarge", + "magnify", + "positive", + "zoom", + "zoom in" + ] + }, + "styles": [ + "solid" + ], + "label": "Search Plus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z" + } + }, + "free": [ + "solid" + ] + }, + "searchengin": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Searchengin", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "460", + "512" + ], + "path": "M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z" + } + }, + "free": [ + "brands" + ] + }, + "seedling": { + "search": { + "terms": [ + "flora", + "grow", + "plant", + "vegan" + ] + }, + "styles": [ + "solid" + ], + "label": "Seedling", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z" + } + }, + "free": [ + "solid" + ] + }, + "sellcast": { + "search": { + "terms": [ + "eercast" + ] + }, + "styles": [ + "brands" + ], + "label": "Sellcast", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z" + } + }, + "free": [ + "brands" + ] + }, + "sellsy": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Sellsy", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z" + } + }, + "free": [ + "brands" + ] + }, + "server": { + "search": { + "terms": [ + "computer", + "cpu", + "database", + "hardware", + "network" + ] + }, + "styles": [ + "solid" + ], + "label": "Server", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "servicestack": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Servicestack", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z" + } + }, + "free": [ + "brands" + ] + }, + "shapes": { + "search": { + "terms": [ + "blocks", + "build", + "circle", + "square", + "triangle" + ] + }, + "styles": [ + "solid" + ], + "label": "Shapes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M128,256A128,128,0,1,0,256,384,128,128,0,0,0,128,256Zm379-54.86L400.07,18.29a37.26,37.26,0,0,0-64.14,0L229,201.14C214.76,225.52,232.58,256,261.09,256H474.91C503.42,256,521.24,225.52,507,201.14ZM480,288H320a32,32,0,0,0-32,32V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V320A32,32,0,0,0,480,288Z" + } + }, + "free": [ + "solid" + ] + }, + "share": { + "search": { + "terms": [ + "forward", + "save", + "send", + "social" + ] + }, + "styles": [ + "solid" + ], + "label": "Share", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z" + } + }, + "free": [ + "solid" + ] + }, + "share-alt": { + "search": { + "terms": [ + "forward", + "save", + "send", + "social" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Share", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z" + } + }, + "free": [ + "solid" + ] + }, + "share-alt-square": { + "search": { + "terms": [ + "forward", + "save", + "send", + "social" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Share Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z" + } + }, + "free": [ + "solid" + ] + }, + "share-square": { + "search": { + "terms": [ + "forward", + "save", + "send", + "social" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Share Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "shekel-sign": { + "search": { + "terms": [ + "currency", + "ils", + "money" + ] + }, + "styles": [ + "solid" + ], + "label": "Shekel Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "shield-alt": { + "search": { + "terms": [ + "achievement", + "award", + "block", + "defend", + "security", + "winner" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Shield", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z" + } + }, + "free": [ + "solid" + ] + }, + "shield-virus": { + "search": { + "terms": [ + "antibodies", + "barrier", + "covid-19", + "health", + "protect" + ] + }, + "styles": [ + "solid" + ], + "label": "Shield Virus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M224,192a16,16,0,1,0,16,16A16,16,0,0,0,224,192ZM466.5,83.68l-192-80A57.4,57.4,0,0,0,256.05,0a57.4,57.4,0,0,0-18.46,3.67l-192,80A47.93,47.93,0,0,0,16,128C16,326.5,130.5,463.72,237.5,508.32a48.09,48.09,0,0,0,36.91,0C360.09,472.61,496,349.3,496,128A48,48,0,0,0,466.5,83.68ZM384,256H371.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C306.47,313.09,272,327.37,272,355.88V368a16,16,0,0,1-32,0V355.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H128a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V112a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C329.09,189.53,343.37,224,371.88,224H384a16,16,0,0,1,0,32Zm-96,0a16,16,0,1,0,16,16A16,16,0,0,0,288,256Z" + } + }, + "free": [ + "solid" + ] + }, + "ship": { + "search": { + "terms": [ + "boat", + "sea", + "water" + ] + }, + "styles": [ + "solid" + ], + "label": "Ship", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z" + } + }, + "free": [ + "solid" + ] + }, + "shipping-fast": { + "search": { + "terms": [ + "express", + "fedex", + "mail", + "overnight", + "package", + "ups" + ] + }, + "styles": [ + "solid" + ], + "label": "Shipping Fast", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z" + } + }, + "free": [ + "solid" + ] + }, + "shirtsinbulk": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Shirts in Bulk", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z" + } + }, + "free": [ + "brands" + ] + }, + "shoe-prints": { + "search": { + "terms": [ + "feet", + "footprints", + "steps", + "walk" + ] + }, + "styles": [ + "solid" + ], + "label": "Shoe Prints", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z" + } + }, + "free": [ + "solid" + ] + }, + "shopify": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Shopify", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z" + } + }, + "free": [ + "brands" + ] + }, + "shopping-bag": { + "search": { + "terms": [ + "buy", + "checkout", + "grocery", + "payment", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "Shopping Bag", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "shopping-basket": { + "search": { + "terms": [ + "buy", + "checkout", + "grocery", + "payment", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "Shopping Basket", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z" + } + }, + "free": [ + "solid" + ] + }, + "shopping-cart": { + "search": { + "terms": [ + "buy", + "checkout", + "grocery", + "payment", + "purchase" + ] + }, + "styles": [ + "solid" + ], + "label": "shopping-cart", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z" + } + }, + "free": [ + "solid" + ] + }, + "shopware": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Shopware", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z" + } + }, + "free": [ + "brands" + ] + }, + "shower": { + "search": { + "terms": [ + "bath", + "clean", + "faucet", + "water" + ] + }, + "styles": [ + "solid" + ], + "label": "Shower", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M304,320a16,16,0,1,0,16,16A16,16,0,0,0,304,320Zm32-96a16,16,0,1,0,16,16A16,16,0,0,0,336,224Zm32,64a16,16,0,1,0-16-16A16,16,0,0,0,368,288Zm-32,32a16,16,0,1,0-16-16A16,16,0,0,0,336,320Zm-32-64a16,16,0,1,0,16,16A16,16,0,0,0,304,256Zm128-32a16,16,0,1,0-16-16A16,16,0,0,0,432,224Zm-48,16a16,16,0,1,0,16-16A16,16,0,0,0,384,240Zm-16-48a16,16,0,1,0,16,16A16,16,0,0,0,368,192Zm96,32a16,16,0,1,0,16,16A16,16,0,0,0,464,224Zm32-32a16,16,0,1,0,16,16A16,16,0,0,0,496,192Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,432,256Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,400,288Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,336,352Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,304,384Zm64-64a16,16,0,1,0,16,16A16,16,0,0,0,368,320Zm21.65-218.35-11.3-11.31a16,16,0,0,0-22.63,0L350.05,96A111.19,111.19,0,0,0,272,64c-19.24,0-37.08,5.3-52.9,13.85l-10-10A121.72,121.72,0,0,0,123.44,32C55.49,31.5,0,92.91,0,160.85V464a16,16,0,0,0,16,16H48a16,16,0,0,0,16-16V158.4c0-30.15,21-58.2,51-61.93a58.38,58.38,0,0,1,48.93,16.67l10,10C165.3,138.92,160,156.76,160,176a111.23,111.23,0,0,0,32,78.05l-5.66,5.67a16,16,0,0,0,0,22.62l11.3,11.31a16,16,0,0,0,22.63,0L389.65,124.28A16,16,0,0,0,389.65,101.65Z" + } + }, + "free": [ + "solid" + ] + }, + "shuttle-van": { + "search": { + "terms": [ + "airport", + "machine", + "public-transportation", + "transportation", + "travel", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Shuttle Van", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z" + } + }, + "free": [ + "solid" + ] + }, + "sign": { + "search": { + "terms": [ + "directions", + "real estate", + "signage", + "wayfinding" + ] + }, + "styles": [ + "solid" + ], + "label": "Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z" + } + }, + "free": [ + "solid" + ] + }, + "sign-in-alt": { + "search": { + "terms": [ + "arrow", + "enter", + "join", + "log in", + "login", + "sign in", + "sign up", + "sign-in", + "signin", + "signup" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sign In", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z" + } + }, + "free": [ + "solid" + ] + }, + "sign-language": { + "search": { + "terms": [ + "Translate", + "asl", + "deaf", + "hands" + ] + }, + "styles": [ + "solid" + ], + "label": "Sign Language", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z" + } + }, + "free": [ + "solid" + ] + }, + "sign-out-alt": { + "search": { + "terms": [ + "arrow", + "exit", + "leave", + "log out", + "logout", + "sign-out" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sign Out", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z" + } + }, + "free": [ + "solid" + ] + }, + "signal": { + "search": { + "terms": [ + "bars", + "graph", + "online", + "reception", + "status" + ] + }, + "styles": [ + "solid" + ], + "label": "signal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "signature": { + "search": { + "terms": [ + "John Hancock", + "cursive", + "name", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "Signature", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z" + } + }, + "free": [ + "solid" + ] + }, + "sim-card": { + "search": { + "terms": [ + "hard drive", + "hardware", + "portable", + "storage", + "technology", + "tiny" + ] + }, + "styles": [ + "solid" + ], + "label": "SIM Card", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z" + } + }, + "free": [ + "solid" + ] + }, + "simplybuilt": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "SimplyBuilt", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z" + } + }, + "free": [ + "brands" + ] + }, + "sink": { + "search": { + "terms": [ + "bathroom", + "covid-19", + "faucet", + "kitchen", + "wash" + ] + }, + "styles": [ + "solid" + ], + "label": "Sink", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M32,416a96,96,0,0,0,96,96H384a96,96,0,0,0,96-96V384H32ZM496,288H400V256h64a16,16,0,0,0,16-16V224a16,16,0,0,0-16-16H384a32,32,0,0,0-32,32v48H288V96a32,32,0,0,1,64,0v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V96A96.16,96.16,0,0,0,300.87,1.86C255.29,10.71,224,53.36,224,99.79V288H160V240a32,32,0,0,0-32-32H48a16,16,0,0,0-16,16v16a16,16,0,0,0,16,16h64v32H16A16,16,0,0,0,0,304v32a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V304A16,16,0,0,0,496,288Z" + } + }, + "free": [ + "solid" + ] + }, + "sistrix": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "SISTRIX", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z" + } + }, + "free": [ + "brands" + ] + }, + "sitemap": { + "search": { + "terms": [ + "directory", + "hierarchy", + "ia", + "information architecture", + "organization" + ] + }, + "styles": [ + "solid" + ], + "label": "Sitemap", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "sith": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Sith", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z" + } + }, + "free": [ + "brands" + ] + }, + "skating": { + "search": { + "terms": [ + "activity", + "figure skating", + "fitness", + "ice", + "person", + "winter" + ] + }, + "styles": [ + "solid" + ], + "label": "Skating", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z" + } + }, + "free": [ + "solid" + ] + }, + "sketch": { + "search": { + "terms": [ + "app", + "design", + "interface" + ] + }, + "styles": [ + "brands" + ], + "label": "Sketch", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z" + } + }, + "free": [ + "brands" + ] + }, + "skiing": { + "search": { + "terms": [ + "activity", + "downhill", + "fast", + "fitness", + "olympics", + "outdoors", + "person", + "seasonal", + "slalom" + ] + }, + "styles": [ + "solid" + ], + "label": "Skiing", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z" + } + }, + "free": [ + "solid" + ] + }, + "skiing-nordic": { + "search": { + "terms": [ + "activity", + "cross country", + "fitness", + "outdoors", + "person", + "seasonal" + ] + }, + "styles": [ + "solid" + ], + "label": "Skiing Nordic", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z" + } + }, + "free": [ + "solid" + ] + }, + "skull": { + "search": { + "terms": [ + "bones", + "skeleton", + "x-ray", + "yorick" + ] + }, + "styles": [ + "solid" + ], + "label": "Skull", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z" + } + }, + "free": [ + "solid" + ] + }, + "skull-crossbones": { + "search": { + "terms": [ + "Dungeons & Dragons", + "alert", + "bones", + "d&d", + "danger", + "dead", + "deadly", + "death", + "dnd", + "fantasy", + "halloween", + "holiday", + "jolly-roger", + "pirate", + "poison", + "skeleton", + "warning" + ] + }, + "styles": [ + "solid" + ], + "label": "Skull & Crossbones", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z" + } + }, + "free": [ + "solid" + ] + }, + "skyatlas": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "skyatlas", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z" + } + }, + "free": [ + "brands" + ] + }, + "skype": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Skype", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z" + } + }, + "free": [ + "brands" + ] + }, + "slack": { + "search": { + "terms": [ + "anchor", + "hash", + "hashtag" + ] + }, + "styles": [ + "brands" + ], + "label": "Slack Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z" + } + }, + "free": [ + "brands" + ] + }, + "slack-hash": { + "search": { + "terms": [ + "anchor", + "hash", + "hashtag" + ] + }, + "styles": [ + "brands" + ], + "label": "Slack Hashtag", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M446.2 270.4c-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-30.3-90 45.4-15.1c19.1-6.2 29.1-26.8 23-45.9-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-93.4 31.2-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-45.3 15c-19.1 6.2-29.1 26.8-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l30.3 90L78 354.8c-19 6.2-29.1 26.9-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 93.6-31.3 15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 45.4-15.1c19-6 29.1-26.7 22.9-45.7zm-254.1 47.2l-30.3-90.2 93.5-31.3 30.3 90.2-93.5 31.3z" + } + }, + "free": [ + "brands" + ] + }, + "slash": { + "search": { + "terms": [ + "cancel", + "close", + "mute", + "off", + "stop", + "x" + ] + }, + "styles": [ + "solid" + ], + "label": "Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z" + } + }, + "free": [ + "solid" + ] + }, + "sleigh": { + "search": { + "terms": [ + "christmas", + "claus", + "fly", + "holiday", + "santa", + "sled", + "snow", + "xmas" + ] + }, + "styles": [ + "solid" + ], + "label": "Sleigh", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z" + } + }, + "free": [ + "solid" + ] + }, + "sliders-h": { + "search": { + "terms": [ + "adjust", + "settings", + "sliders", + "toggle" + ] + }, + "styles": [ + "solid" + ], + "label": "Horizontal Sliders", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "slideshare": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Slideshare", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z" + } + }, + "free": [ + "brands" + ] + }, + "smile": { + "search": { + "terms": [ + "approve", + "emoticon", + "face", + "happy", + "rating", + "satisfied" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Smiling Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "smile-beam": { + "search": { + "terms": [ + "emoticon", + "face", + "happy", + "positive" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Beaming Face With Smiling Eyes", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "smile-wink": { + "search": { + "terms": [ + "emoticon", + "face", + "happy", + "hint", + "joke" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Winking Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "smog": { + "search": { + "terms": [ + "dragon", + "fog", + "haze", + "pollution", + "smoke", + "weather" + ] + }, + "styles": [ + "solid" + ], + "label": "Smog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z" + } + }, + "free": [ + "solid" + ] + }, + "smoking": { + "search": { + "terms": [ + "cancer", + "cigarette", + "nicotine", + "smoking status", + "tobacco" + ] + }, + "styles": [ + "solid" + ], + "label": "Smoking", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z" + } + }, + "free": [ + "solid" + ] + }, + "smoking-ban": { + "search": { + "terms": [ + "ban", + "cancel", + "no smoking", + "non-smoking" + ] + }, + "styles": [ + "solid" + ], + "label": "Smoking Ban", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z" + } + }, + "free": [ + "solid" + ] + }, + "sms": { + "search": { + "terms": [ + "chat", + "conversation", + "message", + "mobile", + "notification", + "phone", + "sms", + "texting" + ] + }, + "styles": [ + "solid" + ], + "label": "SMS", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z" + } + }, + "free": [ + "solid" + ] + }, + "snapchat": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Snapchat", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm169.5 338.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C183.1 100 230.7 96 244.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z" + } + }, + "free": [ + "brands" + ] + }, + "snapchat-ghost": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Snapchat Ghost", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M510.846 392.673c-5.211 12.157-27.239 21.089-67.36 27.318-2.064 2.786-3.775 14.686-6.507 23.956-1.625 5.566-5.623 8.869-12.128 8.869l-.297-.005c-9.395 0-19.203-4.323-38.852-4.323-26.521 0-35.662 6.043-56.254 20.588-21.832 15.438-42.771 28.764-74.027 27.399-31.646 2.334-58.025-16.908-72.871-27.404-20.714-14.643-29.828-20.582-56.241-20.582-18.864 0-30.736 4.72-38.852 4.72-8.073 0-11.213-4.922-12.422-9.04-2.703-9.189-4.404-21.263-6.523-24.13-20.679-3.209-67.31-11.344-68.498-32.15a10.627 10.627 0 0 1 8.877-11.069c69.583-11.455 100.924-82.901 102.227-85.934.074-.176.155-.344.237-.515 3.713-7.537 4.544-13.849 2.463-18.753-5.05-11.896-26.872-16.164-36.053-19.796-23.715-9.366-27.015-20.128-25.612-27.504 2.437-12.836 21.725-20.735 33.002-15.453 8.919 4.181 16.843 6.297 23.547 6.297 5.022 0 8.212-1.204 9.96-2.171-2.043-35.936-7.101-87.29 5.687-115.969C158.122 21.304 229.705 15.42 250.826 15.42c.944 0 9.141-.089 10.11-.089 52.148 0 102.254 26.78 126.723 81.643 12.777 28.65 7.749 79.792 5.695 116.009 1.582.872 4.357 1.942 8.599 2.139 6.397-.286 13.815-2.389 22.069-6.257 6.085-2.846 14.406-2.461 20.48.058l.029.01c9.476 3.385 15.439 10.215 15.589 17.87.184 9.747-8.522 18.165-25.878 25.018-2.118.835-4.694 1.655-7.434 2.525-9.797 3.106-24.6 7.805-28.616 17.271-2.079 4.904-1.256 11.211 2.46 18.748.087.168.166.342.239.515 1.301 3.03 32.615 74.46 102.23 85.934 6.427 1.058 11.163 7.877 7.725 15.859z" + } + }, + "free": [ + "brands" + ] + }, + "snapchat-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Snapchat Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6.5 314.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C159.1 100 206.7 96 220.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z" + } + }, + "free": [ + "brands" + ] + }, + "snowboarding": { + "search": { + "terms": [ + "activity", + "fitness", + "olympics", + "outdoors", + "person" + ] + }, + "styles": [ + "solid" + ], + "label": "Snowboarding", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z" + } + }, + "free": [ + "solid" + ] + }, + "snowflake": { + "search": { + "terms": [ + "precipitation", + "rain", + "winter" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Snowflake", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M440.1 355.2l-39.2-23 34.1-9.3c8.4-2.3 13.4-11.1 11.1-19.6l-4.1-15.5c-2.2-8.5-10.9-13.6-19.3-11.3L343 298.2 271.2 256l71.9-42.2 79.7 21.7c8.4 2.3 17-2.8 19.3-11.3l4.1-15.5c2.2-8.5-2.7-17.3-11.1-19.6l-34.1-9.3 39.2-23c7.5-4.4 10.1-14.2 5.8-21.9l-7.9-13.9c-4.3-7.7-14-10.3-21.5-5.9l-39.2 23 9.1-34.7c2.2-8.5-2.7-17.3-11.1-19.6l-15.2-4.1c-8.4-2.3-17 2.8-19.3 11.3l-21.3 81-71.9 42.2v-84.5L306 70.4c6.1-6.2 6.1-16.4 0-22.6l-11.1-11.3c-6.1-6.2-16.1-6.2-22.2 0l-24.9 25.4V16c0-8.8-7-16-15.7-16h-15.7c-8.7 0-15.7 7.2-15.7 16v46.1l-24.9-25.4c-6.1-6.2-16.1-6.2-22.2 0L142.1 48c-6.1 6.2-6.1 16.4 0 22.6l58.3 59.3v84.5l-71.9-42.2-21.3-81c-2.2-8.5-10.9-13.6-19.3-11.3L72.7 84c-8.4 2.3-13.4 11.1-11.1 19.6l9.1 34.7-39.2-23c-7.5-4.4-17.1-1.8-21.5 5.9l-7.9 13.9c-4.3 7.7-1.8 17.4 5.8 21.9l39.2 23-34.1 9.1c-8.4 2.3-13.4 11.1-11.1 19.6L6 224.2c2.2 8.5 10.9 13.6 19.3 11.3l79.7-21.7 71.9 42.2-71.9 42.2-79.7-21.7c-8.4-2.3-17 2.8-19.3 11.3l-4.1 15.5c-2.2 8.5 2.7 17.3 11.1 19.6l34.1 9.3-39.2 23c-7.5 4.4-10.1 14.2-5.8 21.9L10 391c4.3 7.7 14 10.3 21.5 5.9l39.2-23-9.1 34.7c-2.2 8.5 2.7 17.3 11.1 19.6l15.2 4.1c8.4 2.3 17-2.8 19.3-11.3l21.3-81 71.9-42.2v84.5l-58.3 59.3c-6.1 6.2-6.1 16.4 0 22.6l11.1 11.3c6.1 6.2 16.1 6.2 22.2 0l24.9-25.4V496c0 8.8 7 16 15.7 16h15.7c8.7 0 15.7-7.2 15.7-16v-46.1l24.9 25.4c6.1 6.2 16.1 6.2 22.2 0l11.1-11.3c6.1-6.2 6.1-16.4 0-22.6l-58.3-59.3v-84.5l71.9 42.2 21.3 81c2.2 8.5 10.9 13.6 19.3 11.3L375 428c8.4-2.3 13.4-11.1 11.1-19.6l-9.1-34.7 39.2 23c7.5 4.4 17.1 1.8 21.5-5.9l7.9-13.9c4.6-7.5 2.1-17.3-5.5-21.7z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "snowman": { + "search": { + "terms": [ + "decoration", + "frost", + "frosty", + "holiday" + ] + }, + "styles": [ + "solid" + ], + "label": "Snowman", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "snowplow": { + "search": { + "terms": [ + "clean up", + "cold", + "road", + "storm", + "winter" + ] + }, + "styles": [ + "solid" + ], + "label": "Snowplow", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "soap": { + "search": { + "terms": [ + "bubbles", + "clean", + "covid-19", + "hygiene", + "wash" + ] + }, + "styles": [ + "solid" + ], + "label": "Soap", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416,192a95.42,95.42,0,0,1-30.94,70.21A95.8,95.8,0,0,1,352,448H160a96,96,0,0,1,0-192h88.91A95.3,95.3,0,0,1,224,192H96A96,96,0,0,0,0,288V416a96,96,0,0,0,96,96H416a96,96,0,0,0,96-96V288A96,96,0,0,0,416,192Zm-96,64a64,64,0,1,0-64-64A64,64,0,0,0,320,256ZM208,96a48,48,0,1,0-48-48A48,48,0,0,0,208,96ZM384,64a32,32,0,1,0-32-32A32,32,0,0,0,384,64ZM160,288a64,64,0,0,0,0,128H352a64,64,0,0,0,0-128Z" + } + }, + "free": [ + "solid" + ] + }, + "socks": { + "search": { + "terms": [ + "business socks", + "business time", + "clothing", + "feet", + "flight of the conchords", + "wednesday" + ] + }, + "styles": [ + "solid" + ], + "label": "Socks", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z" + } + }, + "free": [ + "solid" + ] + }, + "solar-panel": { + "search": { + "terms": [ + "clean", + "eco-friendly", + "energy", + "green", + "sun" + ] + }, + "styles": [ + "solid" + ], + "label": "Solar Panel", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z" + } + }, + "free": [ + "solid" + ] + }, + "sort": { + "search": { + "terms": [ + "filter", + "order" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z" + } + }, + "free": [ + "solid" + ] + }, + "sort-alpha-down": { + "search": { + "terms": [ + "alphabetical", + "arrange", + "filter", + "order", + "sort-alpha-asc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Alphabetical Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z" + } + }, + "free": [ + "solid" + ] + }, + "sort-alpha-down-alt": { + "search": { + "terms": [ + "alphabetical", + "arrange", + "filter", + "order", + "sort-alpha-asc" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sort Alphabetical Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z" + } + }, + "free": [ + "solid" + ] + }, + "sort-alpha-up": { + "search": { + "terms": [ + "alphabetical", + "arrange", + "filter", + "order", + "sort-alpha-desc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Alphabetical Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z" + } + }, + "free": [ + "solid" + ] + }, + "sort-alpha-up-alt": { + "search": { + "terms": [ + "alphabetical", + "arrange", + "filter", + "order", + "sort-alpha-desc" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sort Alphabetical Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z" + } + }, + "free": [ + "solid" + ] + }, + "sort-amount-down": { + "search": { + "terms": [ + "arrange", + "filter", + "number", + "order", + "sort-amount-asc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Amount Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "sort-amount-down-alt": { + "search": { + "terms": [ + "arrange", + "filter", + "order", + "sort-amount-asc" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sort Amount Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z" + } + }, + "free": [ + "solid" + ] + }, + "sort-amount-up": { + "search": { + "terms": [ + "arrange", + "filter", + "order", + "sort-amount-desc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Amount Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "sort-amount-up-alt": { + "search": { + "terms": [ + "arrange", + "filter", + "order", + "sort-amount-desc" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sort Amount Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z" + } + }, + "free": [ + "solid" + ] + }, + "sort-down": { + "search": { + "terms": [ + "arrow", + "descending", + "filter", + "order", + "sort-desc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Down (Descending)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z" + } + }, + "free": [ + "solid" + ] + }, + "sort-numeric-down": { + "search": { + "terms": [ + "arrange", + "filter", + "numbers", + "order", + "sort-numeric-asc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Numeric Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z" + } + }, + "free": [ + "solid" + ] + }, + "sort-numeric-down-alt": { + "search": { + "terms": [ + "arrange", + "filter", + "numbers", + "order", + "sort-numeric-asc" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sort Numeric Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z" + } + }, + "free": [ + "solid" + ] + }, + "sort-numeric-up": { + "search": { + "terms": [ + "arrange", + "filter", + "numbers", + "order", + "sort-numeric-desc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Numeric Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z" + } + }, + "free": [ + "solid" + ] + }, + "sort-numeric-up-alt": { + "search": { + "terms": [ + "arrange", + "filter", + "numbers", + "order", + "sort-numeric-desc" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sort Numeric Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z" + } + }, + "free": [ + "solid" + ] + }, + "sort-up": { + "search": { + "terms": [ + "arrow", + "ascending", + "filter", + "order", + "sort-asc" + ] + }, + "styles": [ + "solid" + ], + "label": "Sort Up (Ascending)", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z" + } + }, + "free": [ + "solid" + ] + }, + "soundcloud": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "SoundCloud", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z" + } + }, + "free": [ + "brands" + ] + }, + "sourcetree": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Sourcetree", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z" + } + }, + "free": [ + "brands" + ] + }, + "spa": { + "search": { + "terms": [ + "flora", + "massage", + "mindfulness", + "plant", + "wellness" + ] + }, + "styles": [ + "solid" + ], + "label": "Spa", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z" + } + }, + "free": [ + "solid" + ] + }, + "space-shuttle": { + "search": { + "terms": [ + "astronaut", + "machine", + "nasa", + "rocket", + "space", + "transportation" + ] + }, + "styles": [ + "solid" + ], + "label": "Space Shuttle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z" + } + }, + "free": [ + "solid" + ] + }, + "speakap": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Speakap", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z" + } + }, + "free": [ + "brands" + ] + }, + "speaker-deck": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Speaker Deck", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z" + } + }, + "free": [ + "brands" + ] + }, + "spell-check": { + "search": { + "terms": [ + "dictionary", + "edit", + "editor", + "grammar", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "Spell Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z" + } + }, + "free": [ + "solid" + ] + }, + "spider": { + "search": { + "terms": [ + "arachnid", + "bug", + "charlotte", + "crawl", + "eight", + "halloween" + ] + }, + "styles": [ + "solid" + ], + "label": "Spider", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z" + } + }, + "free": [ + "solid" + ] + }, + "spinner": { + "search": { + "terms": [ + "circle", + "loading", + "progress" + ] + }, + "styles": [ + "solid" + ], + "label": "Spinner", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "splotch": { + "search": { + "terms": [ + "Ink", + "blob", + "blotch", + "glob", + "stain" + ] + }, + "styles": [ + "solid" + ], + "label": "Splotch", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z" + } + }, + "free": [ + "solid" + ] + }, + "spotify": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Spotify", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z" + } + }, + "free": [ + "brands" + ] + }, + "spray-can": { + "search": { + "terms": [ + "Paint", + "aerosol", + "design", + "graffiti", + "tag" + ] + }, + "styles": [ + "solid" + ], + "label": "Spray Can", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "square": { + "search": { + "terms": [ + "block", + "box", + "shape" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "square-full": { + "search": { + "terms": [ + "block", + "box", + "shape" + ] + }, + "styles": [ + "solid" + ], + "label": "Square Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 512H0V0h512v512z" + } + }, + "free": [ + "solid" + ] + }, + "square-root-alt": { + "search": { + "terms": [ + "arithmetic", + "calculus", + "division", + "math" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Square Root", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z" + } + }, + "free": [ + "solid" + ] + }, + "squarespace": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Squarespace", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z" + } + }, + "free": [ + "brands" + ] + }, + "stack-exchange": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Stack Exchange", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z" + } + }, + "free": [ + "brands" + ] + }, + "stack-overflow": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Stack Overflow", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z" + } + }, + "free": [ + "brands" + ] + }, + "stackpath": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Stackpath", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z" + } + }, + "free": [ + "brands" + ] + }, + "stamp": { + "search": { + "terms": [ + "art", + "certificate", + "imprint", + "rubber", + "seal" + ] + }, + "styles": [ + "solid" + ], + "label": "Stamp", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z" + } + }, + "free": [ + "solid" + ] + }, + "star": { + "search": { + "terms": [ + "achievement", + "award", + "favorite", + "important", + "night", + "rating", + "score" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Star", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "star-and-crescent": { + "search": { + "terms": [ + "islam", + "muslim", + "religion" + ] + }, + "styles": [ + "solid" + ], + "label": "Star and Crescent", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z" + } + }, + "free": [ + "solid" + ] + }, + "star-half": { + "search": { + "terms": [ + "achievement", + "award", + "rating", + "score", + "star-half-empty", + "star-half-full" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "star-half", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "star-half-alt": { + "search": { + "terms": [ + "achievement", + "award", + "rating", + "score", + "star-half-empty", + "star-half-full" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Star Half", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "536", + "512" + ], + "path": "M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z" + } + }, + "free": [ + "solid" + ] + }, + "star-of-david": { + "search": { + "terms": [ + "jewish", + "judaism", + "religion" + ] + }, + "styles": [ + "solid" + ], + "label": "Star of David", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "464", + "512" + ], + "path": "M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z" + } + }, + "free": [ + "solid" + ] + }, + "star-of-life": { + "search": { + "terms": [ + "doctor", + "emt", + "first aid", + "health", + "medical" + ] + }, + "styles": [ + "solid" + ], + "label": "Star of Life", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z" + } + }, + "free": [ + "solid" + ] + }, + "staylinked": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "StayLinked", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "440", + "512" + ], + "path": "M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z" + } + }, + "free": [ + "brands" + ] + }, + "steam": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Steam", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z" + } + }, + "free": [ + "brands" + ] + }, + "steam-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Steam Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z" + } + }, + "free": [ + "brands" + ] + }, + "steam-symbol": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Steam Symbol", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z" + } + }, + "free": [ + "brands" + ] + }, + "step-backward": { + "search": { + "terms": [ + "beginning", + "first", + "previous", + "rewind", + "start" + ] + }, + "styles": [ + "solid" + ], + "label": "step-backward", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z" + } + }, + "free": [ + "solid" + ] + }, + "step-forward": { + "search": { + "terms": [ + "end", + "last", + "next" + ] + }, + "styles": [ + "solid" + ], + "label": "step-forward", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z" + } + }, + "free": [ + "solid" + ] + }, + "stethoscope": { + "search": { + "terms": [ + "covid-19", + "diagnosis", + "doctor", + "general practitioner", + "hospital", + "infirmary", + "medicine", + "office", + "outpatient" + ] + }, + "styles": [ + "solid" + ], + "label": "Stethoscope", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "sticker-mule": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Sticker Mule", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z" + } + }, + "free": [ + "brands" + ] + }, + "sticky-note": { + "search": { + "terms": [ + "message", + "note", + "paper", + "reminder", + "sticker" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Sticky Note", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "stop": { + "search": { + "terms": [ + "block", + "box", + "square" + ] + }, + "styles": [ + "solid" + ], + "label": "stop", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "stop-circle": { + "search": { + "terms": [ + "block", + "box", + "circle", + "square" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Stop Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "stopwatch": { + "search": { + "terms": [ + "clock", + "reminder", + "time" + ] + }, + "styles": [ + "solid" + ], + "label": "Stopwatch", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z" + } + }, + "free": [ + "solid" + ] + }, + "stopwatch-20": { + "search": { + "terms": [ + "ABCs", + "countdown", + "covid-19", + "happy birthday", + "i will survive", + "reminder", + "seconds", + "time", + "timer" + ] + }, + "styles": [ + "solid" + ], + "label": "Stopwatch 20", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M398.5,190.91l.59-.61,26.59-26.58a16,16,0,0,0,0-22.63L403,118.41a16,16,0,0,0-22.63,0l-24.68,24.68A206.68,206.68,0,0,0,256,98.5V64h32a16,16,0,0,0,16-16V16A16,16,0,0,0,288,0H160a16.05,16.05,0,0,0-16,16V48a16.05,16.05,0,0,0,16,16h32V98.5A207.92,207.92,0,0,0,16.09,297.57C12.64,411.5,106.76,510.22,220.72,512,337.13,513.77,432,420,432,304A206,206,0,0,0,398.5,190.91ZM204.37,377.55a8.2,8.2,0,0,1,8.32,8.07v22.31a8.2,8.2,0,0,1-8.32,8.07H121.52a16.46,16.46,0,0,1-16.61-17.62c2.78-35.22,14.67-57.41,38.45-91.37,20.42-29.19,27.1-37.32,27.1-62.34,0-16.92-1.79-24.27-12.21-24.27-9.39,0-12.69,7.4-12.69,22.68v5.23a8.2,8.2,0,0,1-8.33,8.07h-24.9a8.2,8.2,0,0,1-8.33-8.07v-4.07c0-27.3,8.48-60.24,56.43-60.24,43,0,55.57,25.85,55.57,61,0,35.58-12.44,51.21-34.35,81.31-11.56,15-24.61,35.57-26.41,51.2ZM344,352.32c0,35.16-12.3,63.68-57.23,63.68C243.19,416,232,386.48,232,352.55V247.22c0-40.73,19.58-63.22,56.2-63.22C325,184,344,206.64,344,245.3ZM287.87,221.73c-9.41,0-13.23,7.5-13.23,20V357.68c0,13.11,3.59,20.59,13.23,20.59s13-8,13-21.27V241.06C300.89,229.79,297.88,221.73,287.87,221.73Z" + } + }, + "free": [ + "solid" + ] + }, + "store": { + "search": { + "terms": [ + "building", + "buy", + "purchase", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "Store", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "616", + "512" + ], + "path": "M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z" + } + }, + "free": [ + "solid" + ] + }, + "store-alt": { + "search": { + "terms": [ + "building", + "buy", + "purchase", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Store", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z" + } + }, + "free": [ + "solid" + ] + }, + "store-alt-slash": { + "search": { + "terms": [ + "building", + "buy", + "closed", + "covid-19", + "purchase", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Store Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M17.89,123.62,5.51,142.2c-14.2,21.3,1,49.8,26.59,49.8h74.26ZM576,413.42V224H512V364L384,265V224H330.92l-41.4-32H608c25.5,0,40.7-28.5,26.59-49.8l-85.29-128A32.18,32.18,0,0,0,522.6,0H117.42A31.87,31.87,0,0,0,90.81,14.2l-10.66,16L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.81l19.64-25.26a16,16,0,0,0-2.81-22.45ZM320,384H128V224H64V480a32,32,0,0,0,32,32H352a32,32,0,0,0,32-32V406.59l-64-49.47Z" + } + }, + "free": [ + "solid" + ] + }, + "store-slash": { + "search": { + "terms": [ + "building", + "buy", + "closed", + "covid-19", + "purchase", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "Store Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M121.51,384V284.2a119.43,119.43,0,0,1-28,3.8,123.46,123.46,0,0,1-17.1-1.2,114.88,114.88,0,0,1-15.58-3.6V480c0,17.7,13.59,32,30.4,32H505.75L348.42,384Zm-28-128.09c25.1,0,47.29-10.72,64-27.24L24,120.05c-30.52,53.39-2.45,126.53,56.49,135A95.68,95.68,0,0,0,93.48,255.91ZM602.13,458.09,547.2,413.41V283.2a93.5,93.5,0,0,1-15.57,3.6,127.31,127.31,0,0,1-17.29,1.2,114.89,114.89,0,0,1-28-3.8v79.68L348.52,251.77a88.06,88.06,0,0,0,25.41,4.14c28.11,0,53-13,70.11-33.11,17.19,20.11,42.08,33.11,70.11,33.11a94.31,94.31,0,0,0,13-.91c59.66-8.41,88-82.8,56.06-136.4L521.55,15A30.1,30.1,0,0,0,495.81,0H112A30.11,30.11,0,0,0,86.27,15L76.88,30.78,43.19,3.38A14.68,14.68,0,0,0,21.86,6.19L3.2,31.45A16.58,16.58,0,0,0,5.87,53.91L564.81,508.63a14.69,14.69,0,0,0,21.33-2.82l18.66-25.26A16.58,16.58,0,0,0,602.13,458.09Z" + } + }, + "free": [ + "solid" + ] + }, + "strava": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Strava", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z" + } + }, + "free": [ + "brands" + ] + }, + "stream": { + "search": { + "terms": [ + "flow", + "list", + "timeline" + ] + }, + "styles": [ + "solid" + ], + "label": "Stream", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "street-view": { + "search": { + "terms": [ + "directions", + "location", + "map", + "navigation" + ] + }, + "styles": [ + "solid" + ], + "label": "Street View", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z" + } + }, + "free": [ + "solid" + ] + }, + "strikethrough": { + "search": { + "terms": [ + "cancel", + "edit", + "font", + "format", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "Strikethrough", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z" + } + }, + "free": [ + "solid" + ] + }, + "stripe": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Stripe", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z" + } + }, + "free": [ + "brands" + ] + }, + "stripe-s": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Stripe S", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z" + } + }, + "free": [ + "brands" + ] + }, + "stroopwafel": { + "search": { + "terms": [ + "caramel", + "cookie", + "dessert", + "sweets", + "waffle" + ] + }, + "styles": [ + "solid" + ], + "label": "Stroopwafel", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z" + } + }, + "free": [ + "solid" + ] + }, + "studiovinari": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Studio Vinari", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z" + } + }, + "free": [ + "brands" + ] + }, + "stumbleupon": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "StumbleUpon Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z" + } + }, + "free": [ + "brands" + ] + }, + "stumbleupon-circle": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "StumbleUpon Circle", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z" + } + }, + "free": [ + "brands" + ] + }, + "subscript": { + "search": { + "terms": [ + "edit", + "font", + "format", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "subscript", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "subway": { + "search": { + "terms": [ + "machine", + "railway", + "train", + "transportation", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Subway", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "suitcase": { + "search": { + "terms": [ + "baggage", + "luggage", + "move", + "suitcase", + "travel", + "trip" + ] + }, + "styles": [ + "solid" + ], + "label": "Suitcase", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z" + } + }, + "free": [ + "solid" + ] + }, + "suitcase-rolling": { + "search": { + "terms": [ + "baggage", + "luggage", + "move", + "suitcase", + "travel", + "trip" + ] + }, + "styles": [ + "solid" + ], + "label": "Suitcase Rolling", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z" + } + }, + "free": [ + "solid" + ] + }, + "sun": { + "search": { + "terms": [ + "brighten", + "contrast", + "day", + "lighter", + "sol", + "solar", + "star", + "weather" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Sun", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M494.2 221.9l-59.8-40.5 13.7-71c2.6-13.2-1.6-26.8-11.1-36.4-9.6-9.5-23.2-13.7-36.2-11.1l-70.9 13.7-40.4-59.9c-15.1-22.3-51.9-22.3-67 0l-40.4 59.9-70.8-13.7C98 60.4 84.5 64.5 75 74.1c-9.5 9.6-13.7 23.1-11.1 36.3l13.7 71-59.8 40.5C6.6 229.5 0 242 0 255.5s6.7 26 17.8 33.5l59.8 40.5-13.7 71c-2.6 13.2 1.6 26.8 11.1 36.3 9.5 9.5 22.9 13.7 36.3 11.1l70.8-13.7 40.4 59.9C230 505.3 242.6 512 256 512s26-6.7 33.5-17.8l40.4-59.9 70.9 13.7c13.4 2.7 26.8-1.6 36.3-11.1 9.5-9.5 13.6-23.1 11.1-36.3l-13.7-71 59.8-40.5c11.1-7.5 17.8-20.1 17.8-33.5-.1-13.6-6.7-26.1-17.9-33.7zm-112.9 85.6l17.6 91.2-91-17.6L256 458l-51.9-77-90.9 17.6 17.6-91.2-76.8-52 76.8-52-17.6-91.2 91 17.6L256 53l51.9 76.9 91-17.6-17.6 91.1 76.8 52-76.8 52.1zM256 152c-57.3 0-104 46.7-104 104s46.7 104 104 104 104-46.7 104-104-46.7-104-104-104zm0 160c-30.9 0-56-25.1-56-56s25.1-56 56-56 56 25.1 56 56-25.1 56-56 56z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "superpowers": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Superpowers", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z" + } + }, + "free": [ + "brands" + ] + }, + "superscript": { + "search": { + "terms": [ + "edit", + "exponential", + "font", + "format", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "superscript", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "supple": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Supple", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z" + } + }, + "free": [ + "brands" + ] + }, + "surprise": { + "search": { + "terms": [ + "emoticon", + "face", + "shocked" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Hushed Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "suse": { + "search": { + "terms": [ + "linux", + "operating system", + "os" + ] + }, + "styles": [ + "brands" + ], + "label": "Suse", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M471.08 102.66s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.06a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2.3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9.5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5.4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3.5-76.2-25.4-81.6-28.2-.3-.4.1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7.8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3.1-.1-.9-.3-.9.7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0-25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z" + } + }, + "free": [ + "brands" + ] + }, + "swatchbook": { + "search": { + "terms": [ + "Pantone", + "color", + "design", + "hue", + "palette" + ] + }, + "styles": [ + "solid" + ], + "label": "Swatchbook", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z" + } + }, + "free": [ + "solid" + ] + }, + "swift": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Swift", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z" + } + }, + "free": [ + "brands" + ] + }, + "swimmer": { + "search": { + "terms": [ + "athlete", + "head", + "man", + "olympics", + "person", + "pool", + "water" + ] + }, + "styles": [ + "solid" + ], + "label": "Swimmer", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z" + } + }, + "free": [ + "solid" + ] + }, + "swimming-pool": { + "search": { + "terms": [ + "ladder", + "recreation", + "swim", + "water" + ] + }, + "styles": [ + "solid" + ], + "label": "Swimming Pool", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z" + } + }, + "free": [ + "solid" + ] + }, + "symfony": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Symfony", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z" + } + }, + "free": [ + "brands" + ] + }, + "synagogue": { + "search": { + "terms": [ + "building", + "jewish", + "judaism", + "religion", + "star of david", + "temple" + ] + }, + "styles": [ + "solid" + ], + "label": "Synagogue", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z" + } + }, + "free": [ + "solid" + ] + }, + "sync": { + "search": { + "terms": [ + "exchange", + "refresh", + "reload", + "rotate", + "swap" + ] + }, + "styles": [ + "solid" + ], + "label": "Sync", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z" + } + }, + "free": [ + "solid" + ] + }, + "sync-alt": { + "search": { + "terms": [ + "exchange", + "refresh", + "reload", + "rotate", + "swap" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Sync", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z" + } + }, + "free": [ + "solid" + ] + }, + "syringe": { + "search": { + "terms": [ + "covid-19", + "doctor", + "immunizations", + "medical", + "needle" + ] + }, + "styles": [ + "solid" + ], + "label": "Syringe", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z" + } + }, + "free": [ + "solid" + ] + }, + "table": { + "search": { + "terms": [ + "data", + "excel", + "spreadsheet" + ] + }, + "styles": [ + "solid" + ], + "label": "table", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z" + } + }, + "free": [ + "solid" + ] + }, + "table-tennis": { + "search": { + "terms": [ + "ball", + "paddle", + "ping pong" + ] + }, + "styles": [ + "solid" + ], + "label": "Table Tennis", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z" + } + }, + "free": [ + "solid" + ] + }, + "tablet": { + "search": { + "terms": [ + "apple", + "device", + "ipad", + "kindle", + "screen" + ] + }, + "styles": [ + "solid" + ], + "label": "tablet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "tablet-alt": { + "search": { + "terms": [ + "apple", + "device", + "ipad", + "kindle", + "screen" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Tablet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z" + } + }, + "free": [ + "solid" + ] + }, + "tablets": { + "search": { + "terms": [ + "drugs", + "medicine", + "pills", + "prescription" + ] + }, + "styles": [ + "solid" + ], + "label": "Tablets", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z" + } + }, + "free": [ + "solid" + ] + }, + "tachometer-alt": { + "search": { + "terms": [ + "dashboard", + "fast", + "odometer", + "speed", + "speedometer" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Tachometer", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "tag": { + "search": { + "terms": [ + "discount", + "label", + "price", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "tag", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "tags": { + "search": { + "terms": [ + "discount", + "label", + "price", + "shopping" + ] + }, + "styles": [ + "solid" + ], + "label": "tags", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z" + } + }, + "free": [ + "solid" + ] + }, + "tape": { + "search": { + "terms": [ + "design", + "package", + "sticky" + ] + }, + "styles": [ + "solid" + ], + "label": "Tape", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z" + } + }, + "free": [ + "solid" + ] + }, + "tasks": { + "search": { + "terms": [ + "checklist", + "downloading", + "downloads", + "loading", + "progress", + "project management", + "settings", + "to do" + ] + }, + "styles": [ + "solid" + ], + "label": "Tasks", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "taxi": { + "search": { + "terms": [ + "cab", + "cabbie", + "car", + "car service", + "lyft", + "machine", + "transportation", + "travel", + "uber", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Taxi", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "teamspeak": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "TeamSpeak", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M244.2 346.79c2.4-12.3-12-30-32.4-48.7-20.9-19.2-48.2-39.1-63.4-46.6-21.7-12-41.7-1.8-46.3 22.7-5 26.2 0 51.4 14.5 73.9 10.2 15.5 25.4 22.7 43.4 24 11.6.6 52.5 2.2 61.7-1 11.9-4.3 20.1-11.8 22.5-24.3zm205 20.8a5.22 5.22 0 0 0-8.3 2.4c-8 25.4-44.7 112.5-172.1 121.5-149.7 10.5 80.3 43.6 145.4-6.4 22.7-17.4 47.6-35 46.6-85.4-.4-10.1-4.9-26.69-11.6-32.1zm62-122.4c-.3-18.9-8.6-33.4-26-42.2-2.9-1.3-5-2.7-5.9-6.4A222.64 222.64 0 0 0 438.9 103c-1.1-1.5-3.5-3.2-2.2-5 8.5-11.5-.3-18-7-24.4Q321.4-31.11 177.4 13.09c-40.1 12.3-73.9 35.6-102 67.4-4 4.3-6.7 9.1-3 14.5 3 4 1.3 6.2-1 9.3C51.6 132 38.2 162.59 32.1 196c-.7 4.3-2.9 6-6.4 7.8-14.2 7-22.5 18.5-24.9 34L0 264.29v20.9c0 30.8 21 50.4 51.8 49 7.7-.3 11.7-4.3 12-11.5 2-77.5-2.4-95.4 3.7-125.8C92.1 72.39 234.3 5 345.3 65.39 411.4 102 445.7 159 447.6 234.79c.8 28.2 0 56.5 0 84.6 0 7 2.2 12.5 9.4 14.2 24.1 5 49.2-12 53.2-36.7 2.9-17.1 1-34.5 1-51.7zm-159.6 131.5c36.5 2.8 59.3-28.5 58.4-60.5-2.1-45.2-66.2-16.5-87.8-8-73.2 28.1-45 54.9-22.2 60.8z" + } + }, + "free": [ + "brands" + ] + }, + "teeth": { + "search": { + "terms": [ + "bite", + "dental", + "dentist", + "gums", + "mouth", + "smile", + "tooth" + ] + }, + "styles": [ + "solid" + ], + "label": "Teeth", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z" + } + }, + "free": [ + "solid" + ] + }, + "teeth-open": { + "search": { + "terms": [ + "dental", + "dentist", + "gums bite", + "mouth", + "smile", + "tooth" + ] + }, + "styles": [ + "solid" + ], + "label": "Teeth Open", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z" + } + }, + "free": [ + "solid" + ] + }, + "telegram": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Telegram", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z" + } + }, + "free": [ + "brands" + ] + }, + "telegram-plane": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Telegram Plane", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z" + } + }, + "free": [ + "brands" + ] + }, + "temperature-high": { + "search": { + "terms": [ + "cook", + "covid-19", + "mercury", + "summer", + "thermometer", + "warm" + ] + }, + "styles": [ + "solid" + ], + "label": "High Temperature", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z" + } + }, + "free": [ + "solid" + ] + }, + "temperature-low": { + "search": { + "terms": [ + "cold", + "cool", + "covid-19", + "mercury", + "thermometer", + "winter" + ] + }, + "styles": [ + "solid" + ], + "label": "Low Temperature", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z" + } + }, + "free": [ + "solid" + ] + }, + "tencent-weibo": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Tencent Weibo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z" + } + }, + "free": [ + "brands" + ] + }, + "tenge": { + "search": { + "terms": [ + "currency", + "kazakhstan", + "money", + "price" + ] + }, + "styles": [ + "solid" + ], + "label": "Tenge", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z" + } + }, + "free": [ + "solid" + ] + }, + "terminal": { + "search": { + "terms": [ + "code", + "command", + "console", + "development", + "prompt" + ] + }, + "styles": [ + "solid" + ], + "label": "Terminal", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z" + } + }, + "free": [ + "solid" + ] + }, + "text-height": { + "search": { + "terms": [ + "edit", + "font", + "format", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "text-height", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z" + } + }, + "free": [ + "solid" + ] + }, + "text-width": { + "search": { + "terms": [ + "edit", + "font", + "format", + "text", + "type" + ] + }, + "styles": [ + "solid" + ], + "label": "Text Width", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z" + } + }, + "free": [ + "solid" + ] + }, + "th": { + "search": { + "terms": [ + "blocks", + "boxes", + "grid", + "squares" + ] + }, + "styles": [ + "solid" + ], + "label": "th", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "th-large": { + "search": { + "terms": [ + "blocks", + "boxes", + "grid", + "squares" + ] + }, + "styles": [ + "solid" + ], + "label": "th-large", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z" + } + }, + "free": [ + "solid" + ] + }, + "th-list": { + "search": { + "terms": [ + "checklist", + "completed", + "done", + "finished", + "ol", + "todo", + "ul" + ] + }, + "styles": [ + "solid" + ], + "label": "th-list", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z" + } + }, + "free": [ + "solid" + ] + }, + "the-red-yeti": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "The Red Yeti", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z" + } + }, + "free": [ + "brands" + ] + }, + "theater-masks": { + "search": { + "terms": [ + "comedy", + "perform", + "theatre", + "tragedy" + ] + }, + "styles": [ + "solid" + ], + "label": "Theater Masks", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z" + } + }, + "free": [ + "solid" + ] + }, + "themeco": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Themeco", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z" + } + }, + "free": [ + "brands" + ] + }, + "themeisle": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "ThemeIsle", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z" + } + }, + "free": [ + "brands" + ] + }, + "thermometer": { + "search": { + "terms": [ + "covid-19", + "mercury", + "status", + "temperature" + ] + }, + "styles": [ + "solid" + ], + "label": "Thermometer", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z" + } + }, + "free": [ + "solid" + ] + }, + "thermometer-empty": { + "search": { + "terms": [ + "cold", + "mercury", + "status", + "temperature" + ] + }, + "styles": [ + "solid" + ], + "label": "Thermometer Empty", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z" + } + }, + "free": [ + "solid" + ] + }, + "thermometer-full": { + "search": { + "terms": [ + "fever", + "hot", + "mercury", + "status", + "temperature" + ] + }, + "styles": [ + "solid" + ], + "label": "Thermometer Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z" + } + }, + "free": [ + "solid" + ] + }, + "thermometer-half": { + "search": { + "terms": [ + "mercury", + "status", + "temperature" + ] + }, + "styles": [ + "solid" + ], + "label": "Thermometer 1/2 Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z" + } + }, + "free": [ + "solid" + ] + }, + "thermometer-quarter": { + "search": { + "terms": [ + "mercury", + "status", + "temperature" + ] + }, + "styles": [ + "solid" + ], + "label": "Thermometer 1/4 Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z" + } + }, + "free": [ + "solid" + ] + }, + "thermometer-three-quarters": { + "search": { + "terms": [ + "mercury", + "status", + "temperature" + ] + }, + "styles": [ + "solid" + ], + "label": "Thermometer 3/4 Full", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z" + } + }, + "free": [ + "solid" + ] + }, + "think-peaks": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Think Peaks", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z" + } + }, + "free": [ + "brands" + ] + }, + "thumbs-down": { + "search": { + "terms": [ + "disagree", + "disapprove", + "dislike", + "hand", + "social", + "thumbs-o-down" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "thumbs-down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "thumbs-up": { + "search": { + "terms": [ + "agree", + "approve", + "favorite", + "hand", + "like", + "ok", + "okay", + "social", + "success", + "thumbs-o-up", + "yes", + "you got it dude" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "thumbs-up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "thumbtack": { + "search": { + "terms": [ + "coordinates", + "location", + "marker", + "pin", + "thumb-tack" + ] + }, + "styles": [ + "solid" + ], + "label": "Thumbtack", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z" + } + }, + "free": [ + "solid" + ] + }, + "ticket-alt": { + "search": { + "terms": [ + "movie", + "pass", + "support", + "ticket" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Ticket", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z" + } + }, + "free": [ + "solid" + ] + }, + "tiktok": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "TikTok", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z" + } + }, + "free": [ + "brands" + ] + }, + "times": { + "search": { + "terms": [ + "close", + "cross", + "error", + "exit", + "incorrect", + "notice", + "notification", + "notify", + "problem", + "wrong", + "x" + ] + }, + "styles": [ + "solid" + ], + "label": "Times", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "352", + "512" + ], + "path": "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z" + } + }, + "free": [ + "solid" + ] + }, + "times-circle": { + "search": { + "terms": [ + "close", + "cross", + "exit", + "incorrect", + "notice", + "notification", + "notify", + "problem", + "wrong", + "x" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Times Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "tint": { + "search": { + "terms": [ + "color", + "drop", + "droplet", + "raindrop", + "waterdrop" + ] + }, + "styles": [ + "solid" + ], + "label": "tint", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "352", + "512" + ], + "path": "M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z" + } + }, + "free": [ + "solid" + ] + }, + "tint-slash": { + "search": { + "terms": [ + "color", + "drop", + "droplet", + "raindrop", + "waterdrop" + ] + }, + "styles": [ + "solid" + ], + "label": "Tint Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z" + } + }, + "free": [ + "solid" + ] + }, + "tired": { + "search": { + "terms": [ + "angry", + "emoticon", + "face", + "grumpy", + "upset" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Tired Face", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "toggle-off": { + "search": { + "terms": [ + "switch" + ] + }, + "styles": [ + "solid" + ], + "label": "Toggle Off", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z" + } + }, + "free": [ + "solid" + ] + }, + "toggle-on": { + "search": { + "terms": [ + "switch" + ] + }, + "styles": [ + "solid" + ], + "label": "Toggle On", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z" + } + }, + "free": [ + "solid" + ] + }, + "toilet": { + "search": { + "terms": [ + "bathroom", + "flush", + "john", + "loo", + "pee", + "plumbing", + "poop", + "porcelain", + "potty", + "restroom", + "throne", + "washroom", + "waste", + "wc" + ] + }, + "styles": [ + "solid" + ], + "label": "Toilet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z" + } + }, + "free": [ + "solid" + ] + }, + "toilet-paper": { + "search": { + "terms": [ + "bathroom", + "covid-19", + "halloween", + "holiday", + "lavatory", + "prank", + "restroom", + "roll" + ] + }, + "styles": [ + "solid" + ], + "label": "Toilet Paper", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z" + } + }, + "free": [ + "solid" + ] + }, + "toilet-paper-slash": { + "search": { + "terms": [ + "bathroom", + "covid-19", + "halloween", + "holiday", + "lavatory", + "leaves", + "prank", + "restroom", + "roll", + "trouble", + "ut oh" + ] + }, + "styles": [ + "solid" + ], + "label": "Toilet Paper Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z" + } + }, + "free": [ + "solid" + ] + }, + "toolbox": { + "search": { + "terms": [ + "admin", + "container", + "fix", + "repair", + "settings", + "tools" + ] + }, + "styles": [ + "solid" + ], + "label": "Toolbox", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z" + } + }, + "free": [ + "solid" + ] + }, + "tools": { + "search": { + "terms": [ + "admin", + "fix", + "repair", + "screwdriver", + "settings", + "tools", + "wrench" + ] + }, + "styles": [ + "solid" + ], + "label": "Tools", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "tooth": { + "search": { + "terms": [ + "bicuspid", + "dental", + "dentist", + "molar", + "mouth", + "teeth" + ] + }, + "styles": [ + "solid" + ], + "label": "Tooth", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z" + } + }, + "free": [ + "solid" + ] + }, + "torah": { + "search": { + "terms": [ + "book", + "jewish", + "judaism", + "religion", + "scroll" + ] + }, + "styles": [ + "solid" + ], + "label": "Torah", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z" + } + }, + "free": [ + "solid" + ] + }, + "torii-gate": { + "search": { + "terms": [ + "building", + "shintoism" + ] + }, + "styles": [ + "solid" + ], + "label": "Torii Gate", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z" + } + }, + "free": [ + "solid" + ] + }, + "tractor": { + "search": { + "terms": [ + "agriculture", + "farm", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Tractor", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z" + } + }, + "free": [ + "solid" + ] + }, + "trade-federation": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Trade Federation", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z" + } + }, + "free": [ + "brands" + ] + }, + "trademark": { + "search": { + "terms": [ + "copyright", + "register", + "symbol" + ] + }, + "styles": [ + "solid" + ], + "label": "Trademark", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z" + } + }, + "free": [ + "solid" + ] + }, + "traffic-light": { + "search": { + "terms": [ + "direction", + "road", + "signal", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Traffic Light", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "trailer": { + "search": { + "terms": [ + "carry", + "haul", + "moving", + "travel" + ] + }, + "styles": [ + "solid" + ], + "label": "Trailer", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624,320H544V80a16,16,0,0,0-16-16H16A16,16,0,0,0,0,80V368a16,16,0,0,0,16,16H65.61c7.83-54.21,54-96,110.39-96s102.56,41.79,110.39,96H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM96,243.68a176.29,176.29,0,0,0-32,20.71V136a8,8,0,0,1,8-8H88a8,8,0,0,1,8,8Zm96-18.54c-5.31-.49-10.57-1.14-16-1.14s-10.69.65-16,1.14V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,39.25a176.29,176.29,0,0,0-32-20.71V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8ZM384,320H352V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,0H448V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm-304,0a80,80,0,1,0,80,80A80,80,0,0,0,176,320Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,176,432Z" + } + }, + "free": [ + "solid" + ] + }, + "train": { + "search": { + "terms": [ + "bullet", + "commute", + "locomotive", + "railway", + "subway" + ] + }, + "styles": [ + "solid" + ], + "label": "Train", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z" + } + }, + "free": [ + "solid" + ] + }, + "tram": { + "search": { + "terms": [ + "crossing", + "machine", + "mountains", + "seasonal", + "transportation" + ] + }, + "styles": [ + "solid" + ], + "label": "Tram", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z" + } + }, + "free": [ + "solid" + ] + }, + "transgender": { + "search": { + "terms": [ + "intersex" + ] + }, + "styles": [ + "solid" + ], + "label": "Transgender", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "transgender-alt": { + "search": { + "terms": [ + "intersex" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Transgender", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "trash": { + "search": { + "terms": [ + "delete", + "garbage", + "hide", + "remove" + ] + }, + "styles": [ + "solid" + ], + "label": "Trash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z" + } + }, + "free": [ + "solid" + ] + }, + "trash-alt": { + "search": { + "terms": [ + "delete", + "garbage", + "hide", + "remove", + "trash-o" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Alternate Trash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "trash-restore": { + "search": { + "terms": [ + "back", + "control z", + "oops", + "undo" + ] + }, + "styles": [ + "solid" + ], + "label": "Trash Restore", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "trash-restore-alt": { + "search": { + "terms": [ + "back", + "control z", + "oops", + "undo" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternative Trash Restore", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "tree": { + "search": { + "terms": [ + "bark", + "fall", + "flora", + "forest", + "nature", + "plant", + "seasonal" + ] + }, + "styles": [ + "solid" + ], + "label": "Tree", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z" + } + }, + "free": [ + "solid" + ] + }, + "trello": { + "search": { + "terms": [ + "atlassian" + ] + }, + "styles": [ + "brands" + ], + "label": "Trello", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z" + } + }, + "free": [ + "brands" + ] + }, + "tripadvisor": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "TripAdvisor", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M528.91,178.82,576,127.58H471.66a326.11,326.11,0,0,0-367,0H0l47.09,51.24A143.911,143.911,0,0,0,241.86,390.73L288,440.93l46.11-50.17A143.94,143.94,0,0,0,575.88,285.18h-.03A143.56,143.56,0,0,0,528.91,178.82ZM144.06,382.57a97.39,97.39,0,1,1,97.39-97.39A97.39,97.39,0,0,1,144.06,382.57ZM288,282.37c0-64.09-46.62-119.08-108.09-142.59a281,281,0,0,1,216.17,0C334.61,163.3,288,218.29,288,282.37Zm143.88,100.2h-.01a97.405,97.405,0,1,1,.01,0ZM144.06,234.12h-.01a51.06,51.06,0,1,0,51.06,51.06v-.11A51,51,0,0,0,144.06,234.12Zm287.82,0a51.06,51.06,0,1,0,51.06,51.06A51.06,51.06,0,0,0,431.88,234.12Z" + } + }, + "free": [ + "brands" + ] + }, + "trophy": { + "search": { + "terms": [ + "achievement", + "award", + "cup", + "game", + "winner" + ] + }, + "styles": [ + "solid" + ], + "label": "trophy", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z" + } + }, + "free": [ + "solid" + ] + }, + "truck": { + "search": { + "terms": [ + "cargo", + "delivery", + "shipping", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "truck", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z" + } + }, + "free": [ + "solid" + ] + }, + "truck-loading": { + "search": { + "terms": [ + "box", + "cargo", + "delivery", + "inventory", + "moving", + "rental", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Truck Loading", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "truck-monster": { + "search": { + "terms": [ + "offroad", + "vehicle", + "wheel" + ] + }, + "styles": [ + "solid" + ], + "label": "Truck Monster", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "truck-moving": { + "search": { + "terms": [ + "cargo", + "inventory", + "rental", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Truck Moving", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "truck-pickup": { + "search": { + "terms": [ + "cargo", + "vehicle" + ] + }, + "styles": [ + "solid" + ], + "label": "Truck Side", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z" + } + }, + "free": [ + "solid" + ] + }, + "tshirt": { + "search": { + "terms": [ + "clothing", + "fashion", + "garment", + "shirt" + ] + }, + "styles": [ + "solid" + ], + "label": "T-Shirt", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z" + } + }, + "free": [ + "solid" + ] + }, + "tty": { + "search": { + "terms": [ + "communication", + "deaf", + "telephone", + "teletypewriter", + "text" + ] + }, + "styles": [ + "solid" + ], + "label": "TTY", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z" + } + }, + "free": [ + "solid" + ] + }, + "tumblr": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Tumblr", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z" + } + }, + "free": [ + "brands" + ] + }, + "tumblr-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Tumblr Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z" + } + }, + "free": [ + "brands" + ] + }, + "tv": { + "search": { + "terms": [ + "computer", + "display", + "monitor", + "television" + ] + }, + "styles": [ + "solid" + ], + "label": "Television", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z" + } + }, + "free": [ + "solid" + ] + }, + "twitch": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Twitch", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z" + } + }, + "free": [ + "brands" + ] + }, + "twitter": { + "search": { + "terms": [ + "social network", + "tweet" + ] + }, + "styles": [ + "brands" + ], + "label": "Twitter", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z" + } + }, + "free": [ + "brands" + ] + }, + "twitter-square": { + "search": { + "terms": [ + "social network", + "tweet" + ] + }, + "styles": [ + "brands" + ], + "label": "Twitter Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z" + } + }, + "free": [ + "brands" + ] + }, + "typo3": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Typo3", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z" + } + }, + "free": [ + "brands" + ] + }, + "uber": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Uber", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z" + } + }, + "free": [ + "brands" + ] + }, + "ubuntu": { + "search": { + "terms": [ + "linux", + "operating system", + "os" + ] + }, + "styles": [ + "brands" + ], + "label": "Ubuntu", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1.7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z" + } + }, + "free": [ + "brands" + ] + }, + "uikit": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "UIkit", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z" + } + }, + "free": [ + "brands" + ] + }, + "umbraco": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Umbraco", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "510", + "512" + ], + "path": "M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z" + } + }, + "free": [ + "brands" + ] + }, + "umbrella": { + "search": { + "terms": [ + "protection", + "rain", + "storm", + "wet" + ] + }, + "styles": [ + "solid" + ], + "label": "Umbrella", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z" + } + }, + "free": [ + "solid" + ] + }, + "umbrella-beach": { + "search": { + "terms": [ + "protection", + "recreation", + "sand", + "shade", + "summer", + "sun" + ] + }, + "styles": [ + "solid" + ], + "label": "Umbrella Beach", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "underline": { + "search": { + "terms": [ + "edit", + "emphasis", + "format", + "text", + "writing" + ] + }, + "styles": [ + "solid" + ], + "label": "Underline", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "undo": { + "search": { + "terms": [ + "back", + "control z", + "exchange", + "oops", + "return", + "rotate", + "swap" + ] + }, + "styles": [ + "solid" + ], + "label": "Undo", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z" + } + }, + "free": [ + "solid" + ] + }, + "undo-alt": { + "search": { + "terms": [ + "back", + "control z", + "exchange", + "oops", + "return", + "swap" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Undo", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z" + } + }, + "free": [ + "solid" + ] + }, + "uniregistry": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Uniregistry", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z" + } + }, + "free": [ + "brands" + ] + }, + "unity": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Unity 3D", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M498.11,206.4,445.31,14.72,248.2,66.08,219,116.14l-59.2-.43L15.54,256,159.82,396.32l59.17-.43,29.24,50,197.08,51.36,52.8-191.62-30-49.63ZM223.77,124.2,374.55,86.51,288,232.33H114.87Zm0,263.63L114.87,279.71H288l86.55,145.81Zm193,14L330.17,256l86.58-145.84L458.56,256Z" + } + }, + "free": [ + "brands" + ] + }, + "universal-access": { + "search": { + "terms": [ + "accessibility", + "hearing", + "person", + "seeing", + "visual impairment" + ] + }, + "styles": [ + "solid" + ], + "label": "Universal Access", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z" + } + }, + "free": [ + "solid" + ] + }, + "university": { + "search": { + "terms": [ + "bank", + "building", + "college", + "higher education - students", + "institution" + ] + }, + "styles": [ + "solid" + ], + "label": "University", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z" + } + }, + "free": [ + "solid" + ] + }, + "unlink": { + "search": { + "terms": [ + "attachment", + "chain", + "chain-broken", + "remove" + ] + }, + "styles": [ + "solid" + ], + "label": "unlink", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z" + } + }, + "free": [ + "solid" + ] + }, + "unlock": { + "search": { + "terms": [ + "admin", + "lock", + "password", + "private", + "protect" + ] + }, + "styles": [ + "solid" + ], + "label": "unlock", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z" + } + }, + "free": [ + "solid" + ] + }, + "unlock-alt": { + "search": { + "terms": [ + "admin", + "lock", + "password", + "private", + "protect" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Unlock", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z" + } + }, + "free": [ + "solid" + ] + }, + "unsplash": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Unsplash", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z" + } + }, + "free": [ + "brands" + ] + }, + "untappd": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Untappd", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z" + } + }, + "free": [ + "brands" + ] + }, + "upload": { + "search": { + "terms": [ + "hard drive", + "import", + "publish" + ] + }, + "styles": [ + "solid" + ], + "label": "Upload", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z" + } + }, + "free": [ + "solid" + ] + }, + "ups": { + "search": { + "terms": [ + "United Parcel Service", + "package", + "shipping" + ] + }, + "styles": [ + "brands" + ], + "label": "UPS", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z" + } + }, + "free": [ + "brands" + ] + }, + "usb": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "USB", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z" + } + }, + "free": [ + "brands" + ] + }, + "user": { + "search": { + "terms": [ + "account", + "avatar", + "head", + "human", + "man", + "person", + "profile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "User", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "user-alt": { + "search": { + "terms": [ + "account", + "avatar", + "head", + "human", + "man", + "person", + "profile" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate User", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z" + } + }, + "free": [ + "solid" + ] + }, + "user-alt-slash": { + "search": { + "terms": [ + "account", + "avatar", + "head", + "human", + "man", + "person", + "profile" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate User Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z" + } + }, + "free": [ + "solid" + ] + }, + "user-astronaut": { + "search": { + "terms": [ + "avatar", + "clothing", + "cosmonaut", + "nasa", + "space", + "suit" + ] + }, + "styles": [ + "solid" + ], + "label": "User Astronaut", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z" + } + }, + "free": [ + "solid" + ] + }, + "user-check": { + "search": { + "terms": [ + "accept", + "check", + "person", + "verified" + ] + }, + "styles": [ + "solid" + ], + "label": "User Check", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z" + } + }, + "free": [ + "solid" + ] + }, + "user-circle": { + "search": { + "terms": [ + "account", + "avatar", + "head", + "human", + "man", + "person", + "profile" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "User Circle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "user-clock": { + "search": { + "terms": [ + "alert", + "person", + "remind", + "time" + ] + }, + "styles": [ + "solid" + ], + "label": "User Clock", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z" + } + }, + "free": [ + "solid" + ] + }, + "user-cog": { + "search": { + "terms": [ + "admin", + "cog", + "person", + "settings" + ] + }, + "styles": [ + "solid" + ], + "label": "User Cog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z" + } + }, + "free": [ + "solid" + ] + }, + "user-edit": { + "search": { + "terms": [ + "edit", + "pen", + "pencil", + "person", + "update", + "write" + ] + }, + "styles": [ + "solid" + ], + "label": "User Edit", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z" + } + }, + "free": [ + "solid" + ] + }, + "user-friends": { + "search": { + "terms": [ + "group", + "people", + "person", + "team", + "users" + ] + }, + "styles": [ + "solid" + ], + "label": "User Friends", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z" + } + }, + "free": [ + "solid" + ] + }, + "user-graduate": { + "search": { + "terms": [ + "cap", + "clothing", + "commencement", + "gown", + "graduation", + "person", + "student" + ] + }, + "styles": [ + "solid" + ], + "label": "User Graduate", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z" + } + }, + "free": [ + "solid" + ] + }, + "user-injured": { + "search": { + "terms": [ + "cast", + "injury", + "ouch", + "patient", + "person", + "sling" + ] + }, + "styles": [ + "solid" + ], + "label": "User Injured", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z" + } + }, + "free": [ + "solid" + ] + }, + "user-lock": { + "search": { + "terms": [ + "admin", + "lock", + "person", + "private", + "unlock" + ] + }, + "styles": [ + "solid" + ], + "label": "User Lock", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z" + } + }, + "free": [ + "solid" + ] + }, + "user-md": { + "search": { + "terms": [ + "covid-19", + "job", + "medical", + "nurse", + "occupation", + "physician", + "profile", + "surgeon" + ] + }, + "styles": [ + "solid" + ], + "label": "Doctor", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z" + } + }, + "free": [ + "solid" + ] + }, + "user-minus": { + "search": { + "terms": [ + "delete", + "negative", + "remove" + ] + }, + "styles": [ + "solid" + ], + "label": "User Minus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z" + } + }, + "free": [ + "solid" + ] + }, + "user-ninja": { + "search": { + "terms": [ + "assassin", + "avatar", + "dangerous", + "deadly", + "sneaky" + ] + }, + "styles": [ + "solid" + ], + "label": "User Ninja", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z" + } + }, + "free": [ + "solid" + ] + }, + "user-nurse": { + "search": { + "terms": [ + "covid-19", + "doctor", + "midwife", + "practitioner", + "surgeon" + ] + }, + "styles": [ + "solid" + ], + "label": "Nurse", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M319.41,320,224,415.39,128.59,320C57.1,323.1,0,381.6,0,453.79A58.21,58.21,0,0,0,58.21,512H389.79A58.21,58.21,0,0,0,448,453.79C448,381.6,390.9,323.1,319.41,320ZM224,304A128,128,0,0,0,352,176V65.82a32,32,0,0,0-20.76-30L246.47,4.07a64,64,0,0,0-44.94,0L116.76,35.86A32,32,0,0,0,96,65.82V176A128,128,0,0,0,224,304ZM184,71.67a5,5,0,0,1,5-5h21.67V45a5,5,0,0,1,5-5h16.66a5,5,0,0,1,5,5V66.67H259a5,5,0,0,1,5,5V88.33a5,5,0,0,1-5,5H237.33V115a5,5,0,0,1-5,5H215.67a5,5,0,0,1-5-5V93.33H189a5,5,0,0,1-5-5ZM144,160H304v16a80,80,0,0,1-160,0Z" + } + }, + "free": [ + "solid" + ] + }, + "user-plus": { + "search": { + "terms": [ + "add", + "avatar", + "positive", + "sign up", + "signup", + "team" + ] + }, + "styles": [ + "solid" + ], + "label": "User Plus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z" + } + }, + "free": [ + "solid" + ] + }, + "user-secret": { + "search": { + "terms": [ + "clothing", + "coat", + "hat", + "incognito", + "person", + "privacy", + "spy", + "whisper" + ] + }, + "styles": [ + "solid" + ], + "label": "User Secret", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z" + } + }, + "free": [ + "solid" + ] + }, + "user-shield": { + "search": { + "terms": [ + "admin", + "person", + "private", + "protect", + "safe" + ] + }, + "styles": [ + "solid" + ], + "label": "User Shield", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z" + } + }, + "free": [ + "solid" + ] + }, + "user-slash": { + "search": { + "terms": [ + "ban", + "delete", + "remove" + ] + }, + "styles": [ + "solid" + ], + "label": "User Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z" + } + }, + "free": [ + "solid" + ] + }, + "user-tag": { + "search": { + "terms": [ + "avatar", + "discount", + "label", + "person", + "role", + "special" + ] + }, + "styles": [ + "solid" + ], + "label": "User Tag", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z" + } + }, + "free": [ + "solid" + ] + }, + "user-tie": { + "search": { + "terms": [ + "avatar", + "business", + "clothing", + "formal", + "professional", + "suit" + ] + }, + "styles": [ + "solid" + ], + "label": "User Tie", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z" + } + }, + "free": [ + "solid" + ] + }, + "user-times": { + "search": { + "terms": [ + "archive", + "delete", + "remove", + "x" + ] + }, + "styles": [ + "solid" + ], + "label": "Remove User", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z" + } + }, + "free": [ + "solid" + ] + }, + "users": { + "search": { + "terms": [ + "friends", + "group", + "people", + "persons", + "profiles", + "team" + ] + }, + "styles": [ + "solid" + ], + "label": "Users", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z" + } + }, + "free": [ + "solid" + ] + }, + "users-cog": { + "search": { + "terms": [ + "admin", + "cog", + "group", + "person", + "settings", + "team" + ] + }, + "styles": [ + "solid" + ], + "label": "Users Cog", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z" + } + }, + "free": [ + "solid" + ] + }, + "users-slash": { + "search": { + "terms": [ + "disband", + "friends", + "group", + "people", + "persons", + "profiles", + "separate", + "team", + "ungroup" + ] + }, + "styles": [ + "solid" + ], + "label": "Users Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M132.65,212.32,36.21,137.78A63.4,63.4,0,0,0,32,160a63.84,63.84,0,0,0,100.65,52.32Zm40.44,62.28A63.79,63.79,0,0,0,128,256H64A64.06,64.06,0,0,0,0,320v32a32,32,0,0,0,32,32H97.91A146.62,146.62,0,0,1,173.09,274.6ZM544,224a64,64,0,1,0-64-64A64.06,64.06,0,0,0,544,224ZM500.56,355.11a114.24,114.24,0,0,0-84.47-65.28L361,247.23c41.46-16.3,71-55.92,71-103.23A111.93,111.93,0,0,0,320,32c-57.14,0-103.69,42.83-110.6,98.08L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM128,403.21V432a48,48,0,0,0,48,48H464a47.45,47.45,0,0,0,12.57-1.87L232,289.13C173.74,294.83,128,343.42,128,403.21ZM576,256H512a63.79,63.79,0,0,0-45.09,18.6A146.29,146.29,0,0,1,542,384h66a32,32,0,0,0,32-32V320A64.06,64.06,0,0,0,576,256Z" + } + }, + "free": [ + "solid" + ] + }, + "usps": { + "search": { + "terms": [ + "american", + "package", + "shipping", + "usa" + ] + }, + "styles": [ + "brands" + ], + "label": "United States Postal Service", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z" + } + }, + "free": [ + "brands" + ] + }, + "ussunnah": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "us-Sunnah Foundation", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2.8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7.2-9.4.5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5.2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 15 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6.5 9.3.5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3.8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3.2.6.5 1.4.6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2.3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8.5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6.9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z" + } + }, + "free": [ + "brands" + ] + }, + "utensil-spoon": { + "search": { + "terms": [ + "cutlery", + "dining", + "scoop", + "silverware", + "spoon" + ] + }, + "styles": [ + "solid" + ], + "label": "Utensil Spoon", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z" + } + }, + "free": [ + "solid" + ] + }, + "utensils": { + "search": { + "terms": [ + "cutlery", + "dining", + "dinner", + "eat", + "food", + "fork", + "knife", + "restaurant" + ] + }, + "styles": [ + "solid" + ], + "label": "Utensils", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "416", + "512" + ], + "path": "M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z" + } + }, + "free": [ + "solid" + ] + }, + "vaadin": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Vaadin", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z" + } + }, + "free": [ + "brands" + ] + }, + "vector-square": { + "search": { + "terms": [ + "anchors", + "lines", + "object", + "render", + "shape" + ] + }, + "styles": [ + "solid" + ], + "label": "Vector Square", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z" + } + }, + "free": [ + "solid" + ] + }, + "venus": { + "search": { + "terms": [ + "female" + ] + }, + "styles": [ + "solid" + ], + "label": "Venus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z" + } + }, + "free": [ + "solid" + ] + }, + "venus-double": { + "search": { + "terms": [ + "female" + ] + }, + "styles": [ + "solid" + ], + "label": "Venus Double", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z" + } + }, + "free": [ + "solid" + ] + }, + "venus-mars": { + "search": { + "terms": [ + "Gender" + ] + }, + "styles": [ + "solid" + ], + "label": "Venus Mars", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "viacoin": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Viacoin", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z" + } + }, + "free": [ + "brands" + ] + }, + "viadeo": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Video", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z" + } + }, + "free": [ + "brands" + ] + }, + "viadeo-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Video Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z" + } + }, + "free": [ + "brands" + ] + }, + "vial": { + "search": { + "terms": [ + "experiment", + "lab", + "sample", + "science", + "test", + "test tube" + ] + }, + "styles": [ + "solid" + ], + "label": "Vial", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "480", + "512" + ], + "path": "M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z" + } + }, + "free": [ + "solid" + ] + }, + "vials": { + "search": { + "terms": [ + "experiment", + "lab", + "sample", + "science", + "test", + "test tube" + ] + }, + "styles": [ + "solid" + ], + "label": "Vials", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z" + } + }, + "free": [ + "solid" + ] + }, + "viber": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Viber", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z" + } + }, + "free": [ + "brands" + ] + }, + "video": { + "search": { + "terms": [ + "camera", + "film", + "movie", + "record", + "video-camera" + ] + }, + "styles": [ + "solid" + ], + "label": "Video", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z" + } + }, + "free": [ + "solid" + ] + }, + "video-slash": { + "search": { + "terms": [ + "add", + "create", + "film", + "new", + "positive", + "record", + "video" + ] + }, + "styles": [ + "solid" + ], + "label": "Video Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z" + } + }, + "free": [ + "solid" + ] + }, + "vihara": { + "search": { + "terms": [ + "buddhism", + "buddhist", + "building", + "monastery" + ] + }, + "styles": [ + "solid" + ], + "label": "Vihara", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z" + } + }, + "free": [ + "solid" + ] + }, + "vimeo": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Vimeo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z" + } + }, + "free": [ + "brands" + ] + }, + "vimeo-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Vimeo Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z" + } + }, + "free": [ + "brands" + ] + }, + "vimeo-v": { + "search": { + "terms": [ + "vimeo" + ] + }, + "styles": [ + "brands" + ], + "label": "Vimeo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z" + } + }, + "free": [ + "brands" + ] + }, + "vine": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Vine", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z" + } + }, + "free": [ + "brands" + ] + }, + "virus": { + "search": { + "terms": [ + "bug", + "covid-19", + "flu", + "health", + "sick", + "viral" + ] + }, + "styles": [ + "solid" + ], + "label": "Virus", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z" + } + }, + "free": [ + "solid" + ] + }, + "virus-slash": { + "search": { + "terms": [ + "bug", + "covid-19", + "cure", + "eliminate", + "flu", + "health", + "sick", + "viral" + ] + }, + "styles": [ + "solid" + ], + "label": "Virus Slash", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M114,227.6H92.4C76.7,227.6,64,240.3,64,256s12.7,28.4,28.4,28.4H114c50.7,0,76.1,61.3,40.2,97.1L139,396.8 c-11.5,10.7-12.2,28.7-1.6,40.2s28.7,12.2,40.2,1.6c0.5-0.5,1.1-1,1.6-1.6l15.2-15.2c35.8-35.8,97.1-10.5,97.1,40.2v21.5 c0,15.7,12.8,28.4,28.5,28.4c15.7,0,28.4-12.7,28.4-28.4V462c0-26.6,17-45.9,38.2-53.4l-244.5-189 C133.7,224.7,123.9,227.5,114,227.6z M617,505.8l19.6-25.3c5.4-7,4.2-17-2.8-22.5L470.6,332c4.2-25.4,24.9-47.5,55.4-47.5h21.5 c15.7,0,28.4-12.7,28.4-28.4s-12.7-28.4-28.4-28.4H526c-50.7,0-76.1-61.3-40.2-97.1l15.2-15.3c10.7-11.5,10-29.5-1.6-40.2 c-10.9-10.1-27.7-10.1-38.6,0l-15.2,15.2c-35.8,35.8-97.1,10.5-97.1-40.2V28.5C348.4,12.7,335.7,0,320,0 c-15.7,0-28.4,12.7-28.4,28.4V50c0,50.7-61.3,76.1-97.1,40.2L179.2,75c-11.1-11.1-29.4-10.6-40.5,0.5L45.5,3.4 c-7-5.4-17-4.2-22.5,2.8L3.4,31.5c-5.4,7-4.2,17,2.8,22.5l588.4,454.7C601.5,514.1,611.6,512.8,617,505.8z M335.4,227.5l-62.9-48.6 c4.9-1.8,10.2-2.8,15.4-2.9c26.5,0,48,21.5,48,48C336,225.2,335.5,226.3,335.4,227.5z" + } + }, + "free": [ + "solid" + ] + }, + "viruses": { + "search": { + "terms": [ + "bugs", + "covid-19", + "flu", + "health", + "multiply", + "sick", + "spread", + "viral" + ] + }, + "styles": [ + "solid" + ], + "label": "Viruses", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M624,352H611.88c-28.51,0-42.79-34.47-22.63-54.63l8.58-8.57a16,16,0,1,0-22.63-22.63l-8.57,8.58C546.47,294.91,512,280.63,512,252.12V240a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.57c20.16,20.16,5.88,54.63-22.63,54.63H368a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.57a16,16,0,1,0,22.63,22.63l8.57-8.58c20.16-20.16,54.63-5.88,54.63,22.63V496a16,16,0,0,0,32,0V483.88c0-28.51,34.47-42.79,54.63-22.63l8.57,8.58a16,16,0,1,0,22.63-22.63l-8.58-8.57C569.09,418.47,583.37,384,611.88,384H624a16,16,0,0,0,0-32ZM480,384a32,32,0,1,1,32-32A32,32,0,0,1,480,384ZM346.51,213.33h16.16a21.33,21.33,0,0,0,0-42.66H346.51c-38,0-57.05-46-30.17-72.84l11.43-11.44A21.33,21.33,0,0,0,297.6,56.23L286.17,67.66c-26.88,26.88-72.84,7.85-72.84-30.17V21.33a21.33,21.33,0,0,0-42.66,0V37.49c0,38-46,57.05-72.84,30.17L86.4,56.23A21.33,21.33,0,0,0,56.23,86.39L67.66,97.83c26.88,26.88,7.85,72.84-30.17,72.84H21.33a21.33,21.33,0,0,0,0,42.66H37.49c38,0,57.05,46,30.17,72.84L56.23,297.6A21.33,21.33,0,1,0,86.4,327.77l11.43-11.43c26.88-26.88,72.84-7.85,72.84,30.17v16.16a21.33,21.33,0,0,0,42.66,0V346.51c0-38,46-57.05,72.84-30.17l11.43,11.43a21.33,21.33,0,0,0,30.17-30.17l-11.43-11.43C289.46,259.29,308.49,213.33,346.51,213.33ZM160,192a32,32,0,1,1,32-32A32,32,0,0,1,160,192Zm80,32a16,16,0,1,1,16-16A16,16,0,0,1,240,224Z" + } + }, + "free": [ + "solid" + ] + }, + "vk": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "VK", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7 0 0-30 73.1-72.4 120.5-13.7 13.7-20 18.1-27.5 18.1-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5 0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5-20 0-68.6-73.4-97.4-157.4-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7 0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9 0-66.8-3.4-73.1 15.4-73.1 8.7 0 23.7 4.4 58.7 38.1 40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25-11.2-34.9-86.9-106.7-90.3-111.5-8.7-11.2-6.2-16.2 0-26.2.1-.1 72-101.3 79.4-135.6z" + } + }, + "free": [ + "brands" + ] + }, + "vnv": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "VNV", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z" + } + }, + "free": [ + "brands" + ] + }, + "voicemail": { + "search": { + "terms": [ + "answer", + "inbox", + "message", + "phone" + ] + }, + "styles": [ + "solid" + ], + "label": "Voicemail", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z" + } + }, + "free": [ + "solid" + ] + }, + "volleyball-ball": { + "search": { + "terms": [ + "beach", + "olympics", + "sport" + ] + }, + "styles": [ + "solid" + ], + "label": "Volleyball Ball", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z" + } + }, + "free": [ + "solid" + ] + }, + "volume-down": { + "search": { + "terms": [ + "audio", + "lower", + "music", + "quieter", + "sound", + "speaker" + ] + }, + "styles": [ + "solid" + ], + "label": "Volume Down", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z" + } + }, + "free": [ + "solid" + ] + }, + "volume-mute": { + "search": { + "terms": [ + "audio", + "music", + "quiet", + "sound", + "speaker" + ] + }, + "styles": [ + "solid" + ], + "label": "Volume Mute", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z" + } + }, + "free": [ + "solid" + ] + }, + "volume-off": { + "search": { + "terms": [ + "audio", + "ban", + "music", + "mute", + "quiet", + "silent", + "sound" + ] + }, + "styles": [ + "solid" + ], + "label": "Volume Off", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z" + } + }, + "free": [ + "solid" + ] + }, + "volume-up": { + "search": { + "terms": [ + "audio", + "higher", + "louder", + "music", + "sound", + "speaker" + ] + }, + "styles": [ + "solid" + ], + "label": "Volume Up", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z" + } + }, + "free": [ + "solid" + ] + }, + "vote-yea": { + "search": { + "terms": [ + "accept", + "cast", + "election", + "politics", + "positive", + "yes" + ] + }, + "styles": [ + "solid" + ], + "label": "Vote Yea", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z" + } + }, + "free": [ + "solid" + ] + }, + "vr-cardboard": { + "search": { + "terms": [ + "3d", + "augment", + "google", + "reality", + "virtual" + ] + }, + "styles": [ + "solid" + ], + "label": "Cardboard VR", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z" + } + }, + "free": [ + "solid" + ] + }, + "vuejs": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Vue.js", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z" + } + }, + "free": [ + "brands" + ] + }, + "walking": { + "search": { + "terms": [ + "exercise", + "health", + "pedometer", + "person", + "steps" + ] + }, + "styles": [ + "solid" + ], + "label": "Walking", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z" + } + }, + "free": [ + "solid" + ] + }, + "wallet": { + "search": { + "terms": [ + "billfold", + "cash", + "currency", + "money" + ] + }, + "styles": [ + "solid" + ], + "label": "Wallet", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "warehouse": { + "search": { + "terms": [ + "building", + "capacity", + "garage", + "inventory", + "storage" + ] + }, + "styles": [ + "solid" + ], + "label": "Warehouse", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z" + } + }, + "free": [ + "solid" + ] + }, + "water": { + "search": { + "terms": [ + "lake", + "liquid", + "ocean", + "sea", + "swim", + "wet" + ] + }, + "styles": [ + "solid" + ], + "label": "Water", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z" + } + }, + "free": [ + "solid" + ] + }, + "wave-square": { + "search": { + "terms": [ + "frequency", + "pulse", + "signal" + ] + }, + "styles": [ + "solid" + ], + "label": "Square Wave", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z" + } + }, + "free": [ + "solid" + ] + }, + "waze": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Waze", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z" + } + }, + "free": [ + "brands" + ] + }, + "weebly": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Weebly", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z" + } + }, + "free": [ + "brands" + ] + }, + "weibo": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Weibo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z" + } + }, + "free": [ + "brands" + ] + }, + "weight": { + "search": { + "terms": [ + "health", + "measurement", + "scale", + "weight" + ] + }, + "styles": [ + "solid" + ], + "label": "Weight", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z" + } + }, + "free": [ + "solid" + ] + }, + "weight-hanging": { + "search": { + "terms": [ + "anvil", + "heavy", + "measurement" + ] + }, + "styles": [ + "solid" + ], + "label": "Hanging Weight", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z" + } + }, + "free": [ + "solid" + ] + }, + "weixin": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Weixin (WeChat)", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z" + } + }, + "free": [ + "brands" + ] + }, + "whatsapp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "What's App", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z" + } + }, + "free": [ + "brands" + ] + }, + "whatsapp-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "What's App Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z" + } + }, + "free": [ + "brands" + ] + }, + "wheelchair": { + "search": { + "terms": [ + "accessible", + "handicap", + "person" + ] + }, + "styles": [ + "solid" + ], + "label": "Wheelchair", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z" + } + }, + "free": [ + "solid" + ] + }, + "whmcs": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "WHMCS", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z" + } + }, + "free": [ + "brands" + ] + }, + "wifi": { + "search": { + "terms": [ + "connection", + "hotspot", + "internet", + "network", + "wireless" + ] + }, + "styles": [ + "solid" + ], + "label": "WiFi", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z" + } + }, + "free": [ + "solid" + ] + }, + "wikipedia-w": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Wikipedia W", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z" + } + }, + "free": [ + "brands" + ] + }, + "wind": { + "search": { + "terms": [ + "air", + "blow", + "breeze", + "fall", + "seasonal", + "weather" + ] + }, + "styles": [ + "solid" + ], + "label": "Wind", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z" + } + }, + "free": [ + "solid" + ] + }, + "window-close": { + "search": { + "terms": [ + "browser", + "cancel", + "computer", + "development" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Window Close", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "window-maximize": { + "search": { + "terms": [ + "browser", + "computer", + "development", + "expand" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Window Maximize", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "window-minimize": { + "search": { + "terms": [ + "browser", + "collapse", + "computer", + "development" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Window Minimize", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "window-restore": { + "search": { + "terms": [ + "browser", + "computer", + "development" + ] + }, + "styles": [ + "solid", + "regular" + ], + "label": "Window Restore", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z" + }, + "regular": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z" + } + }, + "free": [ + "solid", + "regular" + ] + }, + "windows": { + "search": { + "terms": [ + "microsoft", + "operating system", + "os" + ] + }, + "styles": [ + "brands" + ], + "label": "Windows", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z" + } + }, + "free": [ + "brands" + ] + }, + "wine-bottle": { + "search": { + "terms": [ + "alcohol", + "beverage", + "cabernet", + "drink", + "glass", + "grapes", + "merlot", + "sauvignon" + ] + }, + "styles": [ + "solid" + ], + "label": "Wine Bottle", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z" + } + }, + "free": [ + "solid" + ] + }, + "wine-glass": { + "search": { + "terms": [ + "alcohol", + "beverage", + "cabernet", + "drink", + "grapes", + "merlot", + "sauvignon" + ] + }, + "styles": [ + "solid" + ], + "label": "Wine Glass", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z" + } + }, + "free": [ + "solid" + ] + }, + "wine-glass-alt": { + "search": { + "terms": [ + "alcohol", + "beverage", + "cabernet", + "drink", + "grapes", + "merlot", + "sauvignon" + ] + }, + "styles": [ + "solid" + ], + "label": "Alternate Wine Glas", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "288", + "512" + ], + "path": "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z" + } + }, + "free": [ + "solid" + ] + }, + "wix": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Wix", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z" + } + }, + "free": [ + "brands" + ] + }, + "wizards-of-the-coast": { + "search": { + "terms": [ + "Dungeons & Dragons", + "d&d", + "dnd", + "fantasy", + "game", + "gaming", + "tabletop" + ] + }, + "styles": [ + "brands" + ], + "label": "Wizards of the Coast", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z" + } + }, + "free": [ + "brands" + ] + }, + "wolf-pack-battalion": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Wolf Pack Battalion", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z" + } + }, + "free": [ + "brands" + ] + }, + "won-sign": { + "search": { + "terms": [ + "currency", + "krw", + "money" + ] + }, + "styles": [ + "solid" + ], + "label": "Won Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z" + } + }, + "free": [ + "solid" + ] + }, + "wordpress": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "WordPress Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z" + } + }, + "free": [ + "brands" + ] + }, + "wordpress-simple": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Wordpress Simple", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z" + } + }, + "free": [ + "brands" + ] + }, + "wpbeginner": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "WPBeginner", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z" + } + }, + "free": [ + "brands" + ] + }, + "wpexplorer": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "WPExplorer", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z" + } + }, + "free": [ + "brands" + ] + }, + "wpforms": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "WPForms", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z" + } + }, + "free": [ + "brands" + ] + }, + "wpressr": { + "search": { + "terms": [ + "rendact" + ] + }, + "styles": [ + "brands" + ], + "label": "wpressr", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z" + } + }, + "free": [ + "brands" + ] + }, + "wrench": { + "search": { + "terms": [ + "construction", + "fix", + "mechanic", + "plumbing", + "settings", + "spanner", + "tool", + "update" + ] + }, + "styles": [ + "solid" + ], + "label": "Wrench", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z" + } + }, + "free": [ + "solid" + ] + }, + "x-ray": { + "search": { + "terms": [ + "health", + "medical", + "radiological images", + "radiology", + "skeleton" + ] + }, + "styles": [ + "solid" + ], + "label": "X-Ray", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z" + } + }, + "free": [ + "solid" + ] + }, + "xbox": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Xbox", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z" + } + }, + "free": [ + "brands" + ] + }, + "xing": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Xing", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z" + } + }, + "free": [ + "brands" + ] + }, + "xing-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Xing Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z" + } + }, + "free": [ + "brands" + ] + }, + "y-combinator": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Y Combinator", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z" + } + }, + "free": [ + "brands" + ] + }, + "yahoo": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Yahoo Logo", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z" + } + }, + "free": [ + "brands" + ] + }, + "yammer": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Yammer", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "512", + "512" + ], + "path": "M421.78 152.17A23.06 23.06 0 0 0 400.9 112c-.83.43-1.71.9-2.63 1.4-15.25 8.4-118.33 80.62-106.69 88.77s82.04-23.61 130.2-50zm0 217.17c-48.16-26.38-118.64-58.1-130.2-50s91.42 80.35 106.69 88.74c.92.51 1.8 1 2.63 1.41a23.07 23.07 0 0 0 20.88-40.15zM464.21 237c-.95 0-1.95-.06-3-.06-17.4 0-142.52 13.76-136.24 26.51s83.3 18.74 138.21 18.76a23 23 0 0 0 1-45.21zM31 96.65a24.88 24.88 0 0 1 46.14-18.4l81 205.06h1.21l77-203.53a23.52 23.52 0 0 1 44.45 15.27L171.2 368.44C152.65 415.66 134.08 448 77.91 448a139.67 139.67 0 0 1-23.81-1.95 21.31 21.31 0 0 1 6.9-41.77c.66.06 10.91.66 13.86.66 30.47 0 43.74-18.94 58.07-59.41z" + } + }, + "free": [ + "brands" + ] + }, + "yandex": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Yandex", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "256", + "512" + ], + "path": "M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z" + } + }, + "free": [ + "brands" + ] + }, + "yandex-international": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Yandex International", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "320", + "512" + ], + "path": "M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z" + } + }, + "free": [ + "brands" + ] + }, + "yarn": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Yarn", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z" + } + }, + "free": [ + "brands" + ] + }, + "yelp": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Yelp", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z" + } + }, + "free": [ + "brands" + ] + }, + "yen-sign": { + "search": { + "terms": [ + "currency", + "jpy", + "money" + ] + }, + "styles": [ + "solid" + ], + "label": "Yen Sign", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "384", + "512" + ], + "path": "M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z" + } + }, + "free": [ + "solid" + ] + }, + "yin-yang": { + "search": { + "terms": [ + "daoism", + "opposites", + "taoism" + ] + }, + "styles": [ + "solid" + ], + "label": "Yin Yang", + "svg": { + "solid": { + "viewBox": [ + "0", + "0", + "496", + "512" + ], + "path": "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z" + } + }, + "free": [ + "solid" + ] + }, + "yoast": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Yoast", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z" + } + }, + "free": [ + "brands" + ] + }, + "youtube": { + "search": { + "terms": [ + "film", + "video", + "youtube-play", + "youtube-square" + ] + }, + "styles": [ + "brands" + ], + "label": "YouTube", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "576", + "512" + ], + "path": "M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" + } + }, + "free": [ + "brands" + ] + }, + "youtube-square": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "YouTube Square", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "448", + "512" + ], + "path": "M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z" + } + }, + "free": [ + "brands" + ] + }, + "zhihu": { + "search": { + "terms": [] + }, + "styles": [ + "brands" + ], + "label": "Zhihu", + "svg": { + "brands": { + "viewBox": [ + "0", + "0", + "640", + "512" + ], + "path": "M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z" + } + }, + "free": [ + "brands" + ] + } +} \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/block-icons.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/block-icons.js new file mode 100644 index 00000000..c956b7af --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/block-icons.js @@ -0,0 +1,109 @@ +/** + * Block Icons + */ + +const el = wp.element.createElement + +const WPSPBlockIcons = { + "quote_1": el("svg", { width: 20, height: 20 }, + el("path", { d: "M15.581 10.226h-15.162c-0.233 0-0.419 0.37-0.419 0.826 0 0.458 0.186 0.828 0.419 0.828h15.161c0.233 0 0.419-0.37 0.419-0.828 0.001-0.455-0.186-0.826-0.418-0.826v0z" }), + el("path", { d: "M15.581 14.285h-15.162c-0.233 0-0.419 0.373-0.419 0.827 0 0.458 0.186 0.826 0.419 0.826h15.161c0.233 0 0.419-0.369 0.419-0.826 0.001-0.454-0.186-0.827-0.418-0.827v0z" }), + el("path", { d: "M15.581 18.346h-15.162c-0.233 0-0.419 0.37-0.419 0.826 0 0.459 0.186 0.828 0.419 0.828h15.161c0.233 0 0.419-0.369 0.419-0.828 0.001-0.455-0.186-0.826-0.418-0.826v0z" }), + el("path", { d: "M9.126 0.595c-0.46 0.465-0.974 1.35-0.835 3.042 0.081 1.319 0.666 3.29 3.048 5.216 0.112 0.090 0.241 0.136 0.38 0.136 0.183 0 0.362-0.086 0.487-0.251 0.214-0.283 0.164-0.683-0.113-0.902-1.935-1.566-2.458-3.105-2.551-4.154 0.274 0.156 0.582 0.258 0.913 0.258 1.045 0 1.89-0.886 1.89-1.972 0-1.088-0.846-1.966-1.89-1.966-0.233 0-0.451 0.062-0.657 0.143l0.004-0.011-0.218 0.101-0.018 0.011-0.007 0.006-0.299 0.214-0.134 0.131z" }), + el("path", { d: "M4.517 0.595c-0.465 0.465-0.974 1.35-0.841 3.042 0.085 1.319 0.671 3.29 3.049 5.216 0.116 0.090 0.245 0.136 0.383 0.136 0.178 0 0.366-0.086 0.487-0.251 0.214-0.283 0.165-0.683-0.108-0.902-1.939-1.566-2.467-3.105-2.56-4.154 0.278 0.156 0.584 0.258 0.92 0.258 1.046 0 1.885-0.886 1.885-1.972 0-1.088-0.845-1.966-1.885-1.966-0.236 0-0.447 0.062-0.657 0.143l0.010-0.011-0.218 0.101-0.022 0.011-0.009 0.006-0.305 0.214-0.129 0.13z" }), + ), + "quote_2": el("svg", { width: 20, height: 20 }, + el("path", { d: "M4.599 6.686c-0.39 0.397-0.822 1.149-0.705 2.586 0.068 1.123 0.561 2.799 2.561 4.434 0.096 0.080 0.205 0.115 0.321 0.115 0.153 0 0.306-0.071 0.409-0.214 0.181-0.239 0.135-0.58-0.095-0.766-1.626-1.332-2.066-2.639-2.144-3.531 0.231 0.132 0.488 0.218 0.769 0.218 0.874 0 1.587-0.753 1.587-1.677s-0.711-1.672-1.587-1.672c-0.196 0-0.38 0.054-0.552 0.121l0.003-0.010-0.184 0.085-0.016 0.010-0.006 0.006-0.252 0.181-0.109 0.114z" }), + el("path", { d: "M0.725 6.686c-0.389 0.397-0.821 1.149-0.706 2.586 0.068 1.123 0.562 2.799 2.56 4.434 0.094 0.077 0.204 0.114 0.322 0.114 0.151 0 0.31-0.073 0.409-0.213 0.177-0.239 0.136-0.582-0.090-0.767-1.63-1.332-2.072-2.639-2.149-3.531 0.23 0.132 0.486 0.218 0.772 0.218 0.879 0 1.583-0.753 1.583-1.677s-0.71-1.672-1.583-1.672c-0.199 0-0.378 0.054-0.554 0.121l0.008-0.010-0.184 0.085-0.018 0.010-0.009 0.006-0.253 0.182-0.108 0.114z" }), + el("path", { d: "M19.25 6.929h-10.041c-0.414 0-0.75-0.336-0.75-0.75s0.336-0.75 0.75-0.75h10.041c0.414 0 0.75 0.336 0.75 0.75s-0.336 0.75-0.75 0.75z" }), + el("path", { d: "M19.25 10.75h-10.041c-0.414 0-0.75-0.336-0.75-0.75s0.336-0.75 0.75-0.75h10.041c0.414 0 0.75 0.336 0.75 0.75s-0.336 0.75-0.75 0.75z" }), + el("path", { d: "M19.25 14.571h-10.041c-0.414 0-0.75-0.336-0.75-0.75s0.336-0.75 0.75-0.75h10.041c0.414 0 0.75 0.336 0.75 0.75s-0.336 0.75-0.75 0.75z" }), + ), + "quote_inline_icon": el("svg", { width: 20, height: 20, viewBox: "0 0 32 32" }, + el("path", { d: "M7.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.357-0.056 0.724-0.086 1.097-0.086zM25.031 14c3.866 0 7 3.134 7 7s-3.134 7-7 7-7-3.134-7-7l-0.031-1c0-7.732 6.268-14 14-14v4c-2.671 0-5.182 1.040-7.071 2.929-0.364 0.364-0.695 0.751-0.995 1.157 0.358-0.056 0.724-0.086 1.097-0.086z" }), + ), + "quote_tweet_icon": el("svg", { width: 20, height: 20, viewBox: "0 0 512 512" }, + el("path", { d: "M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z" }), + ), + "at_the_rate": el("svg", { width: 30, height: 30 }, + el("path", { d: "M5.605 17.2c0-2.131 0.499-4.074 1.499-5.829 1-1.754 2.395-3.136 4.19-4.15 1.794-1.013 3.81-1.52 6.046-1.52 2.712 0 4.901 0.773 6.562 2.323 1.662 1.549 2.493 3.589 2.493 6.118 0 2.051-0.542 3.786-1.626 5.202-1.088 1.418-2.304 2.125-3.656 2.125-0.781 0-1.355-0.232-1.717-0.696-0.365-0.462-0.533-1.037-0.506-1.726-1.006 1.614-2.378 2.422-4.11 2.422-1.39 0-2.507-0.539-3.347-1.619-0.842-1.077-1.142-2.442-0.904-4.088 0.237-1.65 0.946-2.982 2.125-4.002 1.179-1.021 2.509-1.53 3.992-1.53s2.638 0.518 3.467 1.558c0.829 1.040 1.122 2.322 0.883 3.843l-0.494 3.2c-0.094 0.739 0.165 1.11 0.77 1.11 0.77 0 1.502-0.56 2.205-1.678 0.701-1.12 1.054-2.493 1.054-4.122 0-2.106-0.656-3.787-1.966-5.046-1.312-1.258-3.133-1.886-5.462-1.886-2.794 0-5.098 0.96-6.91 2.88-1.814 1.92-2.722 4.29-2.722 7.109 0 2.382 0.738 4.227 2.214 5.533 1.477 1.302 3.459 1.989 5.947 2.056l-0.376 1.509c-2.862-0.069-5.184-0.899-6.971-2.494-1.787-1.594-2.68-3.794-2.68-6.602zM19.15 15.85c0.17-1.15-0.014-2.118-0.558-2.899-0.542-0.781-1.28-1.173-2.214-1.173-0.933 0-1.79 0.392-2.571 1.173s-1.259 1.749-1.43 2.899c-0.171 1.152 0.013 2.122 0.557 2.91 0.542 0.787 1.282 1.181 2.214 1.181s1.79-0.394 2.573-1.181c0.781-0.789 1.256-1.758 1.43-2.91z" }) + ), + "columns": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#4a00e0", d: "M17.355 0.347h-14.71c-1.143 0-2.069 0.926-2.069 2.069v15.169c0 1.143 0.926 2.069 2.069 2.069h14.709c1.143 0 2.069-0.926 2.069-2.069v-15.169c0-1.142-0.926-2.069-2.068-2.069zM18.504 17.585c0 0.635-0.515 1.149-1.149 1.149h-14.71c-0.635 0-1.149-0.515-1.149-1.149v-15.169c0-0.635 0.514-1.149 1.149-1.149h14.71c0.635 0 1.149 0.515 1.149 1.149v15.169z" }), + el("path", { fill: "#4a00e0", d: "M16.665 2.645h-13.331c-0.254 0-0.46 0.206-0.46 0.46v5.746c0 0.254 0.206 0.46 0.46 0.46h13.331c0.254 0 0.46-0.206 0.46-0.46v-5.746c0-0.254-0.206-0.46-0.46-0.46zM16.206 8.391h-12.412v-4.827h12.412v4.827z" }), + el("path", { fill: "#4a00e0", d: "M16.665 10.69h-5.516c-0.254 0-0.46 0.206-0.46 0.459v5.746c0 0.254 0.206 0.46 0.46 0.46h5.516c0.254 0 0.46-0.206 0.46-0.46v-5.746c0-0.253-0.206-0.459-0.46-0.459zM16.206 16.436h-4.597v-4.827h4.597v4.827z" }), + el("path", { fill: "#4a00e0", d: "M8.851 10.69h-5.516c-0.254 0-0.46 0.206-0.46 0.459v5.746c0 0.254 0.206 0.46 0.46 0.46h5.516c0.254 0 0.46-0.206 0.46-0.46v-5.746c0-0.253-0.206-0.459-0.46-0.459zM8.391 16.436h-4.597v-4.827h4.597v4.827z" }) + ), + "column": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#4a00e0", d: "M17.355 0.347h-14.71c-1.143 0-2.069 0.926-2.069 2.069v15.169c0 1.143 0.926 2.069 2.069 2.069h14.709c1.143 0 2.069-0.926 2.069-2.069v-15.169c0-1.142-0.926-2.069-2.068-2.069zM18.504 17.585c0 0.635-0.515 1.149-1.149 1.149h-14.71c-0.635 0-1.149-0.515-1.149-1.149v-15.169c0-0.635 0.514-1.149 1.149-1.149h14.71c0.635 0 1.149 0.515 1.149 1.149v15.169z" }), + el("path", { fill: "#4a00e0", d: "M16.665 2.767h-5.516c-0.254 0-0.46 0.206-0.46 0.459v13.546c0 0.254 0.206 0.46 0.46 0.46h5.516c0.254 0 0.46-0.206 0.46-0.46v-13.546c0-0.253-0.206-0.459-0.46-0.459zM16.206 16.313h-4.597v-12.626h4.597v12.626z" }), + el("path", { fill: "#4a00e0", d: "M8.851 2.767h-5.516c-0.254 0-0.46 0.206-0.46 0.459v13.546c0 0.254 0.206 0.46 0.46 0.46h5.516c0.254 0 0.46-0.206 0.46-0.46v-13.546c0-0.253-0.206-0.459-0.46-0.459zM8.391 16.313h-4.597v-12.626h4.597v12.626z" }), + ), + "top_align": el("svg", { width: 20, height: 20 }, + el("path", { d: "M1.5 0.438v2.125h17v-2.125h-17zM5.75 8.938h3.188v10.625h2.125v-10.625h3.187l-4.25-4.25-4.25 4.25z" }) + ), + "middle_align": el("svg", { width: 20, height: 20 }, + el("path", { d: "M18.5 11.063v-2.125h-17v2.125h17z" }), + el("path", { d: "M12.707 3.519l-2.707-2.707-2.707 2.707h2.030v4.368h1.354v-4.368h2.030z" }), + el("path", { d: "M7.293 16.48l2.707 2.707 2.707-2.707h-2.030v-4.368h-1.354v4.368h-2.030z" }), + ), + "bottom_align": el("svg", { width: 20, height: 20 }, + el("path", { d: "M18.5 20v-2.125h-17v2.125h17zM14.25 11.5h-3.187v-10.625h-2.125v10.625h-3.188l4.25 4.25 4.25-4.25z" }) + ), + "carousel_left": el("svg", { width: 20, height: 20, viewBox: "0 0 256 512" }, + el("path", { d: "M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z" }), + ), + "carousel_right": el("svg", { width: 20, height: 20, viewBox: "0 0 256 512" }, + el("path", { d: "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z" }), + ), + "top_margin": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#999", d: "M17 1c1.103 0 2 0.897 2 2v14c0 1.103-0.897 2-2 2h-14c-1.103 0-2-0.897-2-2v-14c0-1.103 0.897-2 2-2h14zM17 0h-14c-1.657 0-3 1.343-3 3v14c0 1.657 1.343 3 3 3h14c1.657 0 3-1.343 3-3v-14c0-1.657-1.343-3-3-3v0z" }), + el("path", { fill: "#575E67", d: "M17 0.984h-14c-1.103 0-2 0.897-2 2v0.797h18v-0.797c0-1.103-0.897-2-2-2z" }) + ), + "bottom_margin": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#999", d: "M17 1c1.103 0 2 0.897 2 2v14c0 1.103-0.897 2-2 2h-14c-1.103 0-2-0.897-2-2v-14c0-1.103 0.897-2 2-2h14zM17 0h-14c-1.657 0-3 1.343-3 3v14c0 1.656 1.343 3 3 3h14c1.657 0 3-1.343 3-3v-14c0-1.657-1.343-3-3-3v0z" }), + el("path", { fill: "#575E67", d: "M3 19.016h14c1.103 0 2-0.896 2-2v-0.797h-18v0.797c0 1.103 0.897 2 2 2z" }) + ), + "left_margin": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#999", d: "M17 0.999c1.103 0 2 0.897 2 2v14c0 1.103-0.897 2-2 2h-14c-1.103 0-2-0.897-2-2v-14c0-1.103 0.897-2 2-2h14zM17-0.001h-14c-1.656 0-3 1.343-3 3v14c0 1.657 1.343 3 3 3h14c1.657 0 3-1.343 3-3v-14c0-1.657-1.343-3-3-3v0z" }), + el("path", { fill: "#575E67", d: "M0.984 2.999v14c0 1.103 0.896 2 2 2h0.797v-18h-0.797c-1.104 0-2 0.897-2 2z" }) + ), + "right_margin": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#999", d: "M17 0.999c1.103 0 2 0.897 2 2v14c0 1.103-0.897 2-2 2h-14c-1.103 0-2-0.897-2-2v-14c0-1.103 0.897-2 2-2h14zM17-0.001h-14c-1.657 0-3 1.343-3 3v14c0 1.657 1.343 3 3 3h14c1.656 0 3-1.343 3-3v-14c0-1.657-1.343-3-3-3v0z" }), + el("path", { fill: "#575E67", d: "M19.015 16.999v-14c0-1.103-0.896-2-2-2h-0.797v18h0.797c1.104 0 2-0.896 2-2z" }) + ), + "vertical_spacing": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#999", d: "M17 0.999c1.103 0 2 0.897 2 2v14c0 1.103-0.897 2-2 2h-14c-1.103 0-2-0.897-2-2v-14c0-1.103 0.897-2 2-2h14zM17-0.001h-14c-1.657 0-3 1.343-3 3v14c0 1.657 1.343 3 3 3h14c1.657 0 3-1.343 3-3v-14c0-1.656-1.343-3-3-3v0z" }), + el("path", { fill: "#575E67", d: "M17 0.983h-14c-1.103 0-2 0.896-2 2v0.797h18v-0.797c0-1.103-0.896-2-2-2z" }), + el("path", { fill: "#575E67", d: "M3 19.031h14c1.103 0 2-0.896 2-2v-0.797h-18v0.797c0 1.104 0.896 2 2 2z" }) + ), + "horizontal_spacing": el("svg", { width: 20, height: 20 }, + el("path", { fill: "#999", d: "M17 0.999c1.103 0 2 0.897 2 2v14c0 1.103-0.897 2-2 2h-14c-1.103 0-2-0.897-2-2v-14c0-1.103 0.897-2 2-2h14zM17-0.001h-14c-1.657 0-3 1.343-3 3v14c0 1.657 1.343 3 3 3h14c1.656 0 3-1.343 3-3v-14c0-1.657-1.343-3-3-3v0z" }), + el("path", { fill: "#575E67", d: "M19.016 16.999v-14c0-1.103-0.896-2-2-2h-0.797v18h0.797c1.103 0 2-0.896 2-2z" }), + el("path", { fill: "#575E67", d: "M0.968 2.999v14c0 1.103 0.896 2 2 2h0.797v-18h-0.797c-1.104 0-2 0.897-2 2z" }) + ), + "logo": el("svg", { width: 20, height: 20, viewBox: "0 0 32 32" }, + el("path", { fill: "#f71568", d: "M29.792 23.904c0 2.208-1.792 4-4 4v0c-2.208 0-4-1.792-4-4v-16.992c0-2.208 1.792-4 4-4v0c2.208 0 4 1.792 4 4v16.992z" }), + el("path", { fill: "#ea6ea6", d: "M20 23.904c0 2.208-1.792 4-4 4v0c-2.208 0-4-1.792-4-4v-9.984c0-2.208 1.792-4 4-4v0c2.208 0 4 1.792 4 4v9.984z" }), + el("path", { fill: "#e291ba", d: "M10.176 23.904c0 2.208-1.792 4-4 4v0c-2.208 0-4-1.792-4-4v-2.016c0-2.208 1.792-4 4-4v0c2.208 0 4 1.792 4 4v2.016z" }) + ), + "faq": el("svg", { width: 20, height: 20, viewBox: "0 0 32 32" }, + el("path", { fill: "#f71568", d: "M16 2.24c-7.584 0-13.76 6.176-13.76 13.76s6.144 13.76 13.76 13.76 13.76-6.144 13.76-13.76-6.176-13.76-13.76-13.76zM16 27.616c-6.432 0-11.616-5.216-11.616-11.616s5.184-11.616 11.616-11.616 11.616 5.184 11.616 11.616-5.184 11.616-11.616 11.616z" }), + el("path", { fill: "#f71568", d: "M17.248 7.68c-2.848-0.672-5.696 1.056-6.368 3.904-0.096 0.416-0.16 0.832-0.16 1.248 0 0.576 0.48 1.056 1.056 1.056s1.056-0.48 1.056-1.056c0-1.76 1.408-3.168 3.168-3.168s3.168 1.408 3.168 3.168-1.408 3.168-3.168 3.168c-0.576 0-1.056 0.48-1.056 1.056v2.112c0 0.576 0.48 1.056 1.056 1.056s1.056-0.48 1.056-1.056v-1.152c1.216-0.256 2.304-0.928 3.072-1.888 1.024-1.28 1.408-2.944 1.056-4.544-0.448-1.952-1.984-3.456-3.936-3.904z" }), + el("path", { fill: "#f71568", d: "M16.736 22.656c-0.416-0.416-1.088-0.416-1.504 0-0.192 0.192-0.32 0.48-0.32 0.768s0.096 0.544 0.32 0.736c0.096 0.096 0.224 0.16 0.352 0.224 0.544 0.224 1.152-0.032 1.376-0.576 0.096-0.256 0.096-0.544 0-0.8-0.032-0.128-0.128-0.256-0.224-0.352z" }), + ), + + "how_to": el("svg", { width: 25, height: 25, viewBox:"0 0 32 32" }, + el("path", { fill: "#ed1f69", d: "M29.766 30.534h-27.962v-29.51h27.962v29.51zM3.341 28.998h24.89v-26.438h-24.89v26.438z" } ), + el("path", { fill: "#ed1f69", d: "M6.096 7.021c-0.422 0-0.768-0.342-0.768-0.768s0.342-0.768 0.768-0.768l18.698-0.035c0 0 0 0 0 0 0.422 0 0.768 0.342 0.768 0.768s-0.342 0.768-0.768 0.768l-18.698 0.035c0 0 0 0 0 0z" } ), + el("path", { fill: "#ed1f69", d: "M6.096 11.52c-0.422 0-0.768-0.342-0.768-0.768s0.342-0.768 0.768-0.768l18.698-0.035c0 0 0 0 0 0 0.422 0 0.768 0.342 0.768 0.768s-0.342 0.768-0.768 0.768l-18.698 0.035c0 0 0 0 0 0z" } ), + el("path", { fill: "#ed1f69", d: "M15.443 16.451c-0.422 0-0.765-0.342-0.768-0.765-0.003-0.426 0.342-0.768 0.765-0.771l9.347-0.035c0 0 0.003 0 0.003 0 0.422 0 0.765 0.342 0.768 0.765 0.003 0.426-0.342 0.768-0.765 0.771l-9.35 0.035c0.003 0 0 0 0 0z" } ), + el("path", { fill: "#ed1f69", d: "M15.443 21.213c-0.422 0-0.765-0.342-0.768-0.765-0.003-0.426 0.342-0.768 0.765-0.771l9.347-0.035c0 0 0.003 0 0.003 0 0.422 0 0.765 0.342 0.768 0.765 0.003 0.426-0.342 0.768-0.765 0.771l-9.35 0.035c0.003 0 0 0 0 0z" } ), + el("path", { fill: "#ed1f69", d: "M15.443 26.067c-0.422 0-0.765-0.342-0.768-0.765-0.003-0.426 0.342-0.768 0.765-0.771l9.347-0.035c0 0 0.003 0 0.003 0 0.422 0 0.765 0.342 0.768 0.765 0.003 0.426-0.342 0.768-0.765 0.771l-9.35 0.035c0.003 0 0 0 0 0z" } ), + el("path", { fill: "#ed1f69", d: "M7.894 22.643c0.010-0.656 0.086-1.171 0.224-1.552s0.419-0.8 0.842-1.264l1.082-1.114c0.464-0.522 0.694-1.082 0.694-1.683 0-0.576-0.15-1.030-0.454-1.357s-0.742-0.49-1.322-0.49c-0.563 0-1.014 0.147-1.357 0.445s-0.512 0.698-0.512 1.2h-1.53c0.010-0.893 0.33-1.613 0.954-2.16s1.44-0.822 2.442-0.822c1.040 0 1.853 0.278 2.435 0.838s0.874 1.325 0.874 2.298c0 0.963-0.445 1.91-1.338 2.848l-0.902 0.893c-0.403 0.445-0.605 1.088-0.605 1.923h-1.526zM7.83 25.27c0-0.25 0.077-0.461 0.227-0.63s0.378-0.256 0.675-0.256 0.525 0.086 0.678 0.256c0.154 0.17 0.23 0.381 0.23 0.63s-0.077 0.458-0.23 0.621c-0.154 0.163-0.381 0.246-0.678 0.246s-0.522-0.083-0.675-0.246c-0.154-0.163-0.227-0.371-0.227-0.621z" } ), + el("path", { fill: "#ed1f69", d: "M8.73 26.154c-0.301 0-0.531-0.083-0.685-0.253-0.154-0.166-0.23-0.378-0.23-0.634 0-0.253 0.077-0.47 0.23-0.64 0.154-0.173 0.384-0.259 0.685-0.259s0.534 0.086 0.691 0.259c0.157 0.173 0.237 0.387 0.237 0.64s-0.080 0.467-0.237 0.634c-0.157 0.166-0.39 0.253-0.691 0.253zM8.73 24.4c-0.291 0-0.515 0.083-0.662 0.25s-0.224 0.374-0.224 0.621c0 0.246 0.074 0.451 0.224 0.611 0.147 0.16 0.371 0.24 0.662 0.24s0.515-0.080 0.666-0.24c0.15-0.16 0.227-0.365 0.227-0.611s-0.077-0.454-0.227-0.621c-0.15-0.166-0.374-0.25-0.666-0.25zM9.44 22.659h-1.562v-0.016c0.010-0.653 0.086-1.178 0.224-1.555 0.138-0.381 0.422-0.806 0.845-1.267l1.082-1.114c0.458-0.515 0.691-1.078 0.691-1.67 0-0.57-0.15-1.024-0.451-1.347-0.298-0.323-0.739-0.486-1.312-0.486-0.557 0-1.008 0.15-1.344 0.442-0.336 0.294-0.506 0.691-0.506 1.187v0.016h-1.562v-0.016c0.010-0.893 0.333-1.626 0.96-2.173 0.624-0.547 1.45-0.826 2.454-0.826 1.040 0 1.862 0.285 2.445 0.842 0.582 0.56 0.877 1.338 0.877 2.31 0 0.963-0.451 1.923-1.344 2.858l-0.902 0.893c-0.397 0.438-0.598 1.085-0.598 1.91v0.013zM7.914 22.627h1.494c0.003-0.829 0.208-1.475 0.608-1.917l0.902-0.893c0.886-0.928 1.334-1.882 1.334-2.835 0-0.963-0.291-1.734-0.867-2.288s-1.392-0.832-2.422-0.832c-0.995 0-1.811 0.275-2.432 0.819-0.614 0.541-0.934 1.258-0.95 2.134h1.498c0.003-0.496 0.179-0.899 0.518-1.194 0.342-0.298 0.803-0.451 1.366-0.451 0.579 0 1.030 0.166 1.334 0.496s0.458 0.79 0.458 1.366c0 0.602-0.234 1.171-0.698 1.693l-1.085 1.114c-0.419 0.458-0.704 0.88-0.838 1.258-0.134 0.371-0.211 0.886-0.221 1.53z" } ) + ), + +} + +export default WPSPBlockIcons \ No newline at end of file diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css-unit.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css-unit.js new file mode 100644 index 00000000..83087973 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css-unit.js @@ -0,0 +1,12 @@ +function generateCSSUnit ( value, unit ) { + + var css = "" + + if( typeof value != "undefined" ) { + css += value + unit + } + + return css +} + +export default generateCSSUnit diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css.js new file mode 100644 index 00000000..7025e60a --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/generate-css.js @@ -0,0 +1,62 @@ +function generateCSS(selectors, id, isResponsive = false, responsiveType = "") { + + var styling_css = "" + var breakpoint = "" + var gen_styling_css = "" + var res_styling_css = "" + + if (responsiveType == "tablet") { + breakpoint = wpsp_blocks_info.tablet_breakpoint + } else if (responsiveType == "mobile") { + breakpoint = wpsp_blocks_info.mobile_breakpoint + } + + + for (var first_selector in selectors) { + + var sel = selectors[first_selector] + var css = "" + + for (var selector_child in sel) { + + var checkString = true + + if (typeof sel[selector_child] === "string" && sel[selector_child].length === 0) { + checkString = false + } + + if ('font-family' === selector_child && typeof sel[selector_child] != "undefined" && 'Default' === sel[selector_child]) { + continue; + } + + if (typeof sel[selector_child] != "undefined" && checkString) { + if ('font-family' === selector_child) { + css += selector_child + ": " + "'" + sel[selector_child] + "'" + ";" + } else { + css += selector_child + ": " + sel[selector_child] + ";" + } + } + } + + if (css.length !== 0) { + gen_styling_css += id + gen_styling_css += first_selector + "{" + gen_styling_css += css + gen_styling_css += "}" + } + } + + if (isResponsive && typeof gen_styling_css !== "undefined" && gen_styling_css.length !== 0) { + res_styling_css += "@media only screen and (max-width: " + breakpoint + "px) {" + res_styling_css += gen_styling_css + res_styling_css += "}" + } + + if (isResponsive) { + return res_styling_css + } else { + return gen_styling_css + } +} + +export default generateCSS diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/hex-to-rgba.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/hex-to-rgba.js new file mode 100644 index 00000000..80cf8c90 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/hex-to-rgba.js @@ -0,0 +1,39 @@ +/** + * Get HEX color and return RGBA. Default return RGB color. + * @param {string} color - The color string. + * @return {boolean} opacity The inline CSS class. + */ + +function hexToRgba ( color, opacity ) { + + if ( undefined == color ) { + return "" + } + + if ( undefined == opacity || "" == opacity ) { + opacity = 100 + } + + color = color.replace( "#", "" ) + + opacity = ( typeof opacity != "undefined" ) ? ( opacity )/100 : 1 + + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + let shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i + color = color.replace(shorthandRegex, function(m, r, g, b) { + return r + r + g + g + b + b + }) + + let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(color) + + let parsed_color = result ? { + r: parseInt( result[1], 16 ), + g: parseInt( result[2], 16 ), + b: parseInt( result[3], 16 ) + } : null + + return "rgba(" + parsed_color.r + "," + parsed_color.g + "," + parsed_color.b + "," + opacity + ")" + +} + +export default hexToRgba diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/lazy-loader.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/lazy-loader.js new file mode 100644 index 00000000..954c09b5 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/lazy-loader.js @@ -0,0 +1,5 @@ +import React from "react"; +import { __ } from '@wordpress/i18n'; + +const lazyLoader = () =>

            { __( 'Loading..', 'wp-schema-pro' ) }

            ; +export default lazyLoader; diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/parse-icon.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/parse-icon.js new file mode 100644 index 00000000..29f013ee --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/parse-icon.js @@ -0,0 +1,12 @@ +function parseSVG ( svg ) { + + svg = svg.replace( "far ", "" ) + svg = svg.replace( "fas ", "" ) + svg = svg.replace( "fab ", "" ) + svg = svg.replace( "fa-", "" ) + svg = svg.replace( "fa ", "" ) + + return svg +} + +export default parseSVG diff --git a/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/render-icon.js b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/render-icon.js new file mode 100644 index 00000000..99c256bc --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/wpsp-config/controls/render-icon.js @@ -0,0 +1,28 @@ +/** + * Set inline CSS class. + * @param {object} props - The block object. + * @return {array} The inline CSS class. + */ + +import parseSVG from "./parse-icon" + +function renderSVG ( svg ) { + + svg = parseSVG( svg ) + + var fontAwesome = wpsp_blocks_info.wpsp_icons[svg] + + if ( "undefined" != typeof fontAwesome ) { + + var viewbox_array = ( fontAwesome["svg"].hasOwnProperty("brands") ) ? fontAwesome["svg"]["brands"]["viewBox"] : fontAwesome["svg"]["solid"]["viewBox"] + var path = ( fontAwesome["svg"].hasOwnProperty("brands") ) ? fontAwesome["svg"]["brands"]["path"] : fontAwesome["svg"]["solid"]["path"] + var viewBox = viewbox_array.join( " " ) + + return ( + + ) + } + +} + +export default renderSVG
            ",{class:"misc-pub-section yoast yoast-seo-score "+e+"-score",id:e+"-score"}),r=kn("",{class:wn,html:En(e,t,s)}),a=kn("").attr("class",vn+" na");n.append(a).append(r),kn("#yoast-seo-publishbox-section").append(n)},scrollToCollapsible:function(e){const t=kn("#wpadminbar"),s=kn(e);if(!t||!s)return;const n="fixed"===t.css("position")?t.height():0;kn([document.documentElement,document.body]).animate({scrollTop:s.offset().top-n},1e3),s.trigger("focus"),0===s.parent().siblings().length&&s.trigger("click")}},updateAdminBar:function(e){jQuery("#wp-admin-bar-wpseo-menu .wpseo-score-icon").attr("title",e.screenReaderText).attr("class","wpseo-score-icon "+e.className).find(".wpseo-score-text").text(e.screenReaderText)},updateTrafficLight:function(e){var t=jQuery(".yst-traffic-light"),s=t.closest(".wpseo-meta-section-link"),n=jQuery("#wpseo-traffic-light-desc"),r=e.className||"na";t.attr("class","yst-traffic-light "+r),s.attr("aria-describedby","wpseo-traffic-light-desc"),n.length>0?n.text(e.screenReaderText):s.closest("li").append(""+e.screenReaderText+"")}}}})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/elementor.js b/wp/wp-content/plugins/wordpress-seo/js/dist/elementor.js new file mode 100644 index 00000000..262901f0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/elementor.js @@ -0,0 +1,576 @@ +(()=>{var e={6746:(e,t,s)=>{"use strict";var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=i(s(9196)),n=i(s(9156)),o=i(s(6743));function i(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function c(e,t){var s,o,i,d,p,u,m,h,g=[],y={};for(u=0;u "+l);if("componentClose"===p.type)throw new Error("Missing opening component token: `"+p.value+"`");if("componentOpen"===p.type){s=t[p.value],i=u;break}g.push(t[p.value])}else g.push(p.value);return s&&(d=function(e,t){var s,a,r=t[e],n=0;for(a=e+1;a{"use strict";function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},9156:(e,t,s)=>{"use strict";var a=s(9196),r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,n=s(7942),o=s(9179),i=s(397),l=".",c=":",d="function"==typeof Symbol&&Symbol.iterator,p="@@iterator";function u(e,t){return e&&"object"==typeof e&&null!=e.key?(s=e.key,a={"=":"=0",":":"=2"},"$"+(""+s).replace(/[=:]/g,(function(e){return a[e]}))):t.toString(36);var s,a}function m(e,t,s,a){var n,i=typeof e;if("undefined"!==i&&"boolean"!==i||(e=null),null===e||"string"===i||"number"===i||"object"===i&&e.$$typeof===r)return s(a,e,""===t?l+u(e,0):t),1;var h=0,g=""===t?l:t+c;if(Array.isArray(e))for(var y=0;y{"use strict";function t(e){return function(){return e}}var s=function(){};s.thatReturns=t,s.thatReturnsFalse=t(!1),s.thatReturnsTrue=t(!0),s.thatReturnsNull=t(null),s.thatReturnsThis=function(){return this},s.thatReturnsArgument=function(e){return e},e.exports=s},9179:e=>{"use strict";e.exports=function(e,t,s,a,r,n,o,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[s,a,r,n,o,i],d=0;(l=new Error(t.replace(/%s/g,(function(){return c[d++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},397:(e,t,s)=>{"use strict";var a=s(7942);e.exports=a},4530:(e,t)=>{var s;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t{"use strict";e.exports=window.React}},t={};function s(a){var r=t[a];if(void 0!==r)return r.exports;var n=t[a]={exports:{}};return e[a](n,n.exports,s),n.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};s.r(e),s.d(e,{authorFirstName:()=>or,authorLastName:()=>ir,category:()=>pr,categoryTitle:()=>ur,currentDate:()=>lr,currentDay:()=>cr,currentMonth:()=>dr,currentYear:()=>mr,date:()=>hr,excerpt:()=>gr,focusKeyphrase:()=>yr,id:()=>fr,modified:()=>wr,name:()=>br,page:()=>Er,pageNumber:()=>vr,pageTotal:()=>_r,permalink:()=>kr,postContent:()=>xr,postDay:()=>Sr,postMonth:()=>Tr,postTypeNamePlural:()=>Cr,postTypeNameSingular:()=>Ir,postYear:()=>Rr,primaryCategory:()=>Lr,searchPhrase:()=>Pr,separator:()=>Ar,siteDescription:()=>Or,siteName:()=>Dr,tag:()=>Mr,term404:()=>Fr,termDescription:()=>Nr,termHierarchy:()=>qr,termTitle:()=>Ur,title:()=>Br,userDescription:()=>$r});var t={};s.r(t),s.d(t,{DISMISS_ALERT:()=>Dc,SNIPPET_EDITOR_FIND_CUSTOM_FIELDS:()=>Mc,wistiaEmbedPermission:()=>Fc});var a={};s.r(a),s.d(a,{loadSnippetEditorData:()=>$c,updateData:()=>Bc});var r={};s.r(r),s.d(r,{getAnalysisData:()=>Xc});const n=window.wp.data,o=window.wp.hooks;var i=s(9196),l=s.n(i);const c=window.wp.components,d=window.wp.element,p=window.wp.i18n,u=window.yoast.uiLibrary,m=window.yoast.propTypes;var h=s.n(m);h().string.isRequired;const g=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),y=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),f=({learnMoreLink:e,thumbnail:t,wistiaEmbedPermission:s,upsellLink:a,isProductCopy:r,title:n,upsellLabel:o,newToText:l,bundleNote:c})=>{const{onClose:m,initialFocus:h}=(0,u.useModalContext)(),f={a:(0,i.createElement)(v,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,i.createElement)(y,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})};return(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,i.createElement)("div",{className:"yst-relative yst-w-full"},(0,i.createElement)(j,{videoId:"vmrahpfjxp",thumbnail:t,wistiaEmbedPermission:s}),(0,i.createElement)(u.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,i.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,i.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,i.createElement)("span",{className:"yst-logo-icon"}),l))),(0,i.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,i.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,i.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},n),(0,i.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},r?(0,d.createInterpolateElement)((0,p.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,p.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for product titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),f):(0,d.createInterpolateElement)((0,p.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,p.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),f))),(0,i.createElement)("div",{className:"yst-w-full yst-flex yst-mt-10"},(0,i.createElement)(u.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:a,target:"_blank",ref:h},(0,i.createElement)(g,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),o,(0,i.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,p.__)("(Opens in a new browser tab)","wordpress-seo")))),c,(0,i.createElement)(u.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:m},(0,p.__)("Close","wordpress-seo"))))};f.propTypes={learnMoreLink:h().string.isRequired,upsellLink:h().string.isRequired,thumbnail:h().shape({src:h().string.isRequired,width:h().string,height:h().string}).isRequired,wistiaEmbedPermission:h().shape({value:h().bool.isRequired,status:h().string.isRequired,set:h().func.isRequired}).isRequired,title:h().string,upsellLabel:h().string,newToText:h().string,isProductCopy:h().bool,bundleNote:h().oneOfType([h().string,h().element])},f.defaultProps={title:(0,p.__)("Use AI to write your titles & meta descriptions!","wordpress-seo"),upsellLabel:(0,p.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,p.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),newToText:"Yoast SEO Premium",isProductCopy:!1,bundleNote:""};var w;function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;ti.createElement("svg",b({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1000 1000"},e),w||(w=i.createElement("path",{fill:"#fff",d:"M500 0C223.9 0 0 223.9 0 500s223.9 500 500 500 500-223.9 500-500S776.1 0 500 0Zm87.2 412.4c0-21.9 4.3-40.2 13.1-54.4s24-27.1 45.9-38.2l10.1-4.9c17.8-9 22.4-16.7 22.4-26 0-11.1-9.5-19.1-25-19.1-18.3 0-32.2 9.5-41.8 28.9l-24.7-24.8c5.4-11.6 14.1-20.9 25.8-28.1a70.8 70.8 0 0 1 38.9-11.1c17.8 0 33.3 4.6 45.9 14.2s19.4 22.7 19.4 39.4c0 26.6-15 42.9-43.1 57.3l-15.7 8c-16.8 8.5-25.1 16-27.4 29.4h85.4v35.4H587.2Zm-82.1 373.3c-157.8 0-285.7-127.9-285.7-285.7s127.9-285.7 285.7-285.7a286.4 286.4 0 0 1 55.9 5.5l-55.9 116.9c-90 0-163.3 73.3-163.3 163.3s73.3 163.3 163.3 163.3a162.8 162.8 0 0 0 106.4-39.6l61.8 107.2a283.9 283.9 0 0 1-168.2 54.8ZM705 704.1l-70.7-122.5H492.9l70.7-122.4H705l70.7 122.4Z"}))),v=({href:e,children:t,...s})=>(0,i.createElement)(u.Link,{target:"_blank",rel:"noopener noreferrer",...s,href:e},t,(0,i.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,p.__)("(Opens in a new browser tab)","wordpress-seo")));v.propTypes={href:h().string.isRequired,children:h().node},v.defaultProps={children:null};const _=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 8l4 4m0 0l-4 4m4-4H3"}))}));var k,x,S;function T(){return T=Object.assign?Object.assign.bind():function(e){for(var t=1;ti.createElement("svg",T({xmlns:"http://www.w3.org/2000/svg",id:"star-rating-half_svg__Layer_1","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),k||(k=i.createElement("defs",null,i.createElement("style",null,".star-rating-half_svg__cls-1{fill:#fbbf24}"))),x||(x=i.createElement("path",{d:"M250 392.04 98.15 471.87l29-169.09L4.3 183.03l169.77-24.67L250 4.52l75.93 153.84 169.77 24.67-122.85 119.75 29 169.09L250 392.04z",className:"star-rating-half_svg__cls-1"})),S||(S=i.createElement("path",{d:"m250 9.04 73.67 149.27.93 1.88 2.08.3 164.72 23.94-119.19 116.19-1.51 1.47.36 2.07 28.14 164.06-147.34-77.46-1.86-1-1.86 1-147.34 77.46 28.14-164.06.36-2.07-1.51-1.47L8.6 184.43l164.72-23.9 2.08-.3.93-1.88L250 9.04m0-9-77.25 156.49L0 181.64l125 121.89-29.51 172L250 394.3l154.51 81.23-29.51-172 125-121.89-172.75-25.11L250 0Z",className:"star-rating-half_svg__cls-1"})),i.createElement("path",{d:"m500 181.64-172.75-25.11L250 0v394.3l154.51 81.23L375 303.48l125-121.84z",style:{fill:"#f3f4f6"}}));function C(){return C=Object.assign?Object.assign.bind():function(e){for(var t=1;ti.createElement("svg",C({xmlns:"http://www.w3.org/2000/svg","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),i.createElement("path",{d:"m250 0 77.25 156.53L500 181.64 375 303.48l29.51 172.05L250 394.3 95.49 475.53 125 303.48 0 181.64l172.75-25.11L250 0z",style:{fill:"#fbbf24"}}));var L,P,A,O,D,M,F,N,q;function U(){return U=Object.assign?Object.assign.bind():function(e){for(var t=1;ti.createElement("svg",U({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 500 500"},e),L||(L=i.createElement("path",{fill:"#a4286a",d:"M80 0h340a80 80 0 0 1 80 80v420H80a80 80 0 0 1-80-80V80A80 80 0 0 1 80 0z"})),P||(P=i.createElement("path",{fill:"#6c2548",d:"M437.61 2 155.89 500H500V80a80 80 0 0 0-62.39-78z"})),A||(A=i.createElement("path",{fill:"#fff",d:"M74.4 337.3v34.9c21.6-.9 38.5-8 52.8-22.5s27.4-38 39.9-72.9l92.6-248h-44.8L140.3 236l-37-116.2h-41l54.4 139.8a57.54 57.54 0 0 1 0 41.8c-5.5 14.2-15.4 30.9-42.3 35.9z"})),O||(O=i.createElement("circle",{cx:368.33,cy:124.68,r:97.34,fill:"#9fda4f",transform:"rotate(-45 368.335 124.68)"})),D||(D=i.createElement("path",{fill:"#77b227",d:"m416.2 39.93-95.74 169.51A97.34 97.34 0 1 0 416.2 39.93z"})),M||(M=i.createElement("path",{fill:"#fec228",d:"m294.78 254.75-.15-.08-.13-.07a63.6 63.6 0 0 0-62.56 110.76h.13a63.6 63.6 0 0 0 62.71-110.67z"})),F||(F=i.createElement("path",{fill:"#f49a00",d:"m294.5 254.59-62.56 110.76a63.6 63.6 0 1 0 62.56-110.76z"})),N||(N=i.createElement("path",{fill:"#ff4e47",d:"M222.31 450.07A38.16 38.16 0 0 0 203 416.83a38.18 38.18 0 1 0 19.41 33.27z"})),q||(q=i.createElement("path",{fill:"#ed261f",d:"m202.9 416.8-37.54 66.48a38.17 38.17 0 0 0 37.54-66.48z"}))),$=({link:e,linkProps:t,promotions:s})=>{const a=(0,d.useMemo)((()=>(0,p.__)("Use AI to generate titles and meta descriptions, automatically redirect deleted pages, get 24/7 support, and much, much more!","wordpress-seo")),[]),r=(0,d.createInterpolateElement)((0,p.sprintf)(/* translators: %1$s and %2$s expand to a span wrap to avoid linebreaks. %3$s expands to "Yoast SEO Premium". */ +(0,p.__)("%1$sGet%2$s %3$s","wordpress-seo"),"","","Yoast SEO Premium"),{nowrap:(0,i.createElement)("span",{className:"yst-whitespace-nowrap"})}),n=s.includes("black-friday-2023-promotion"),o=(0,d.createInterpolateElement)((0,p.sprintf)(/* translators: %1$s and %2$s expand to strong tags. */ +(0,p.__)("%1$sSAVE 30%%%2$s on your 12 month subscription","wordpress-seo"),"",""),{strong:(0,i.createElement)("strong",null)});return(0,i.createElement)("div",{className:"yst-p-6 yst-rounded-lg yst-text-white yst-bg-primary-500 yst-shadow"},(0,i.createElement)("figure",{className:"yst-logo-square yst-w-16 yst-h-16 yst-mx-auto yst-overflow-hidden yst-border yst-border-white yst-rounded-xl yst-rounded-br-none yst-relative yst-z-10 yst-mt-[-2.6rem]"},(0,i.createElement)(B,null)),n&&(0,i.createElement)("div",{className:"sidebar__sale_banner_container"},(0,i.createElement)("div",{className:"sidebar__sale_banner"},(0,i.createElement)("span",{className:"banner_text"},(0,p.__)("BLACK FRIDAY - 30% OFF","wordpress-seo")))),(0,i.createElement)(u.Title,{as:"h2",className:"yst-mt-6 yst-text-base yst-font-extrabold yst-text-white"},r),(0,i.createElement)("p",{className:"yst-mt-2"},a),n&&(0,i.createElement)("div",{className:"yst-text-center yst-border-t-[1px] yst-border-white yst-italic yst-mt-3"},(0,i.createElement)("p",{className:"yst-text-[10px] yst-my-3 yst-mx-0"},o)),(0,i.createElement)(u.Button,{as:"a",variant:"upsell",href:e,target:"_blank",rel:"noopener",className:"yst-flex yst-justify-center yst-gap-2 yst-mt-4 focus:yst-ring-offset-primary-500",...t},(0,i.createElement)("span",null,n?(0,p.__)("Claim your 30% off now!","wordpress-seo"):r),(0,i.createElement)(_,{className:"yst-w-4 yst-h-4 yst-icon-rtl"})),(0,i.createElement)("p",{className:"yst-text-center yst-text-xs yst-mx-2 yst-font-light yst-leading-5 yst-mt-2"},(0,p.__)("Only $/€/£99 per year (ex VAT)","wordpress-seo"),(0,i.createElement)("br",null),(0,p.__)("30-day money back guarantee.","wordpress-seo")),(0,i.createElement)("hr",{className:"yst-border-t yst-border-primary-300 yst-my-4"}),(0,i.createElement)("a",{className:"yst-block yst-mt-4 yst-no-underline",href:"https://www.g2.com/products/yoast-yoast/reviews",target:"_blank",rel:"noopener noreferrer"},(0,i.createElement)("span",{className:"yst-font-medium yst-text-white hover:yst-underline"},(0,p.__)("Read reviews from real users","wordpress-seo")),(0,i.createElement)("span",{className:"yst-flex yst-gap-2 yst-mt-2 yst-items-center"},(0,i.createElement)(E,{className:"yst-w-5 yst-h-5"}),(0,i.createElement)("span",{className:"yst-flex yst-gap-1"},(0,i.createElement)(I,{className:"yst-w-5 yst-h-5"}),(0,i.createElement)(I,{className:"yst-w-5 yst-h-5"}),(0,i.createElement)(I,{className:"yst-w-5 yst-h-5"}),(0,i.createElement)(I,{className:"yst-w-5 yst-h-5"}),(0,i.createElement)(R,{className:"yst-w-5 yst-h-5"})),(0,i.createElement)("span",{className:"yst-text-sm yst-font-semibold yst-text-white"},"4.6 / 5"))))};$.propTypes={link:h().string.isRequired,linkProps:h().object,promotions:h().array},$.defaultProps={linkProps:{},promotions:[]},h().node.isRequired;const W=window.yoast.reactHelmet,K="loading",H="showPlay",Y="askPermission",z="isPlaying",j=({videoId:e,thumbnail:t,wistiaEmbedPermission:s})=>{const[a,r]=(0,d.useState)(s.value?z:H),n=(0,d.useCallback)((()=>r(z)),[r]),o=(0,d.useCallback)((()=>{s.value?n():r(Y)}),[s.value,n,r]),l=(0,d.useCallback)((()=>r(H)),[r]),c=(0,d.useCallback)((()=>{s.set(!0),n()}),[s.set,n]);return(0,i.createElement)(i.Fragment,null,s.value&&(0,i.createElement)(W.Helmet,null,(0,i.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,i.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},a===H&&(0,i.createElement)("button",{type:"button",className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:o},(0,i.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...t})),a===Y&&(0,i.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,i.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},s.status===K&&(0,i.createElement)(u.Spinner,null),s.status!==K&&(0,p.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,p.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo"),"Yoast SEO","Wistia")),(0,i.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,i.createElement)(u.Button,{type:"button",variant:"secondary",onClick:l,disabled:s.status===K},(0,p.__)("Deny","wordpress-seo")),(0,i.createElement)(u.Button,{type:"button",variant:"primary",onClick:c,disabled:s.status===K},(0,p.__)("Allow","wordpress-seo")))),s.value&&a===z&&(0,i.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===e&&(0,i.createElement)(u.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==e&&(0,i.createElement)("div",{className:`wistia_embed wistia_async_${e} videoFoam=true`}))))};j.propTypes={videoId:h().string.isRequired,thumbnail:h().shape({src:h().string.isRequired,width:h().string,height:h().string}).isRequired,wistiaEmbedPermission:h().shape({value:h().bool.isRequired,status:h().string.isRequired,set:h().func.isRequired}).isRequired};const V=({learnMoreLink:e,thumbnail:t,wistiaEmbedPermission:s,upsellLink:a,upsellLabel:r})=>{const{onClose:n,initialFocus:o}=(0,u.useModalContext)(),l={a:(0,i.createElement)(v,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,i.createElement)(y,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"}),br:(0,i.createElement)("br",null)};return(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,i.createElement)("div",{className:"yst-relative yst-w-full"},(0,i.createElement)(j,{videoId:"vun9z1dpfh",thumbnail:t,wistiaEmbedPermission:s}),(0,i.createElement)(u.Badge,{className:"yst-absolute yst-right-0 yst-mr-4 yst-text-center yst-justify-center",variant:"info",style:{top:"-8px"}},(0,p.__)("Beta","wordpress-seo-premium"))),(0,i.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,i.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,i.createElement)("span",{className:"yst-logo-icon"}),"Yoast SEO Premium"))),(0,i.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,i.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,i.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,p.sprintf)(/* translators: %s: Expands to "Yoast AI" */ +(0,p.__)("Optimize your SEO content with %s","wordpress-seo"),"Yoast AI")),(0,i.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,d.createInterpolateElement)((0,p.sprintf)(/* translators: %1$s is a break tag; %2$s and %3$s are anchor tags; %4$s is the arrow icon. */ +(0,p.__)("Make content editing a breeze! Optimize your SEO content with quick, actionable suggestions at the click of a button.%1$s%2$sLearn more%3$s%4$s","wordpress-seo"),"
            ","","",""),l))),(0,i.createElement)("div",{className:"yst-w-full yst-flex yst-mt-6"},(0,i.createElement)(u.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:a,target:"_blank",ref:o},(0,i.createElement)(g,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),r,(0,i.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,p.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,i.createElement)(u.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:n},(0,p.__)("Close","wordpress-seo"))))};V.propTypes={learnMoreLink:h().string.isRequired,upsellLink:h().string.isRequired,thumbnail:h().shape({src:h().string.isRequired,width:h().string,height:h().string}).isRequired,wistiaEmbedPermission:h().shape({value:h().bool.isRequired,status:h().string.isRequired,set:h().func.isRequired}).isRequired,upsellLabel:h().string},V.defaultProps={upsellLabel:(0,p.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,p.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")};const G="yoast-seo/editor",Z=()=>{const e=(0,n.useSelect)((e=>e(G).selectLink("https://yoa.st/ai-generator-learn-more")),[]),t=(0,n.useSelect)((e=>e(G).selectLink("https://yoa.st/ai-generator-upsell")),[]),s=(0,n.useSelect)((e=>e(G).selectLink("https://yoa.st/ai-generator-upsell-woo-seo-premium-bundle")),[]),a=(0,n.useSelect)((e=>e(G).selectLink("https://yoa.st/ai-generator-upsell-woo-seo")),[]),r=(0,n.useSelect)((e=>e(G).getIsPremium()),[]),o=(0,n.useSelect)((e=>e(G).getIsWooSeoUpsell()),[]),l=(0,n.useSelect)((e=>e(G).getIsProduct()),[]),c=!(!o&&(!l||o||r)),u={isProductCopy:c,upsellLink:t};if(c){const e=(0,p.sprintf)(/* translators: %1$s expands to Yoast SEO Premium, %2$s expands to Yoast WooCommerce SEO. */ +(0,p.__)("%1$s + %2$s","wordpress-seo"),"Yoast SEO Premium","Yoast WooCommerce SEO");u.newToText=(0,p.sprintf)(/* translators: %1$s expands to Yoast SEO Premium and Yoast WooCommerce SEO. */ +(0,p.__)("New in %1$s","wordpress-seo"),e),u.title=(0,p.__)("Generate product titles & descriptions with AI!","wordpress-seo"),!r&&o&&(u.upsellLabel=`${(0,p.sprintf)(/* translators: %1$s expands to Woo Premium bundle. */ +(0,p.__)("Unlock with the %1$s","wordpress-seo"),"Woo Premium bundle")}*`,u.bundleNote=(0,i.createElement)("div",{className:"yst-text-xs yst-text-slate-500 yst-mt-2"},`*${e}`),u.upsellLink=s),r&&(u.upsellLabel=(0,p.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,p.__)("Unlock with %1$s","wordpress-seo"),"Yoast WooCommerce SEO"),u.upsellLink=a)}const m=(0,n.useSelect)((e=>e(G).selectImageLink("ai-generator-preview.png")),[]),h=(0,d.useMemo)((()=>({src:m,width:"432",height:"244"})),[m]),g=(0,n.useSelect)((e=>e(G).selectWistiaEmbedPermissionValue()),[]),y=(0,n.useSelect)((e=>e(G).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:w}=(0,n.useDispatch)(G),b=(0,d.useMemo)((()=>({value:g,status:y,set:w})),[g,y,w]);return(0,i.createElement)(f,{learnMoreLink:e,thumbnail:h,wistiaEmbedPermission:b,...u})},Q=({fieldId:e})=>{const[t,,,s,a]=(0,u.useToggleState)(!1),r=(0,d.useCallback)((()=>{s()}),[s]),n=(0,d.useRef)(null);return(0,i.createElement)(i.Fragment,null,(0,i.createElement)("button",{type:"button",id:`yst-replacevar__use-ai-button__${e}`,className:"yst-replacevar__use-ai-button-upsell",onClick:r},(0,p.__)("Use AI","wordpress-seo")),(0,i.createElement)(u.Modal,{className:"yst-introduction-modal",isOpen:t,onClose:a,initialFocus:n},(0,i.createElement)(u.Modal.Panel,{className:"yst-max-w-lg yst-p-0 yst-rounded-3xl"},(0,i.createElement)(Z,{onClose:a,focusElementRef:n}))))};Q.propTypes={fieldId:h().string.isRequired};const X="yoast-seo/editor",J=window.lodash,ee=window.yoast.analysis,te=500;function se(){}const ae=window.yoast.externals.redux;function re(e){return e.sort(((e,t)=>e._identifier.localeCompare(t._identifier)))}function ne(){return(0,J.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}function oe(){const e=ne();return(0,J.get)(e,"contentLocale","en_US")}function ie(){const e=ne();return!0===(0,J.get)(e,"contentAnalysisActive",!1)}function le(){const e=ne();return!0===(0,J.get)(e,"keywordAnalysisActive",!1)}function ce(){const e=ne();return!0===(0,J.get)(e,"inclusiveLanguageAnalysisActive",!1)}const de=window.yoast.featureFlag;class pe{constructor(e){this.refresh=e,this.loaded=!1,this.preloadThreshold=3e3,this.plugins={},this.modifications={},this._registerPlugin=this._registerPlugin.bind(this),this._ready=this._ready.bind(this),this._reloaded=this._reloaded.bind(this),this._registerModification=this._registerModification.bind(this),this._registerAssessment=this._registerAssessment.bind(this),this._applyModifications=this._applyModifications.bind(this),setTimeout(this._pollLoadingPlugins.bind(this),1500)}_registerPlugin(e,t){return(0,J.isString)(e)?(0,J.isUndefined)(t)||(0,J.isObject)(t)?!1===this._validateUniqueness(e)?(console.error("Failed to register plugin. Plugin with name "+e+" already exists"),!1):(this.plugins[e]=t,!0):(console.error("Failed to register plugin "+e+". Expected parameters `options` to be a object."),!1):(console.error("Failed to register plugin. Expected parameter `pluginName` to be a string."),!1)}_ready(e){return(0,J.isString)(e)?(0,J.isUndefined)(this.plugins[e])?(console.error("Failed to modify status for plugin "+e+". The plugin was not properly registered."),!1):(this.plugins[e].status="ready",!0):(console.error("Failed to modify status for plugin "+e+". Expected parameter `pluginName` to be a string."),!1)}_reloaded(e){return(0,J.isString)(e)?(0,J.isUndefined)(this.plugins[e])?(console.error("Failed to reload Content Analysis for plugin "+e+". The plugin was not properly registered."),!1):(this.refresh(),!0):(console.error("Failed to reload Content Analysis for "+e+". Expected parameter `pluginName` to be a string."),!1)}_registerModification(e,t,s,a){if(!(0,J.isString)(e))return console.error("Failed to register modification for plugin "+s+". Expected parameter `modification` to be a string."),!1;if(!(0,J.isFunction)(t))return console.error("Failed to register modification for plugin "+s+". Expected parameter `callable` to be a function."),!1;if(!(0,J.isString)(s))return console.error("Failed to register modification for plugin "+s+". Expected parameter `pluginName` to be a string."),!1;if(!1===this._validateOrigin(s))return console.error("Failed to register modification for plugin "+s+". The integration has not finished loading yet."),!1;const r={callable:t,origin:s,priority:(0,J.isNumber)(a)?a:10};return(0,J.isUndefined)(this.modifications[e])&&(this.modifications[e]=[]),this.modifications[e].push(r),!0}_registerAssessment(e,t,s,a){return(0,J.isString)(t)?(0,J.isObject)(s)?(0,J.isString)(a)?(t=a+"-"+t,e.addAssessment(t,s),!0):(console.error("Failed to register assessment for plugin "+a+". Expected parameter `pluginName` to be a string."),!1):(console.error("Failed to register assessment for plugin "+a+". Expected parameter `assessment` to be a function."),!1):(console.error("Failed to register test for plugin "+a+". Expected parameter `name` to be a string."),!1)}_applyModifications(e,t,s){let a=this.modifications[e];return!(0,J.isArray)(a)||a.length<1||(a=this._stripIllegalModifications(a),a.sort(((e,t)=>e.priority-t.priority)),(0,J.forEach)(a,(function(a){const r=a.callable(t,s);typeof r==typeof t?t=r:console.error("Modification with name "+e+" performed by plugin with name "+a.origin+" was ignored because the data that was returned by it was of a different type than the data we had passed it.")}))),t}_pollLoadingPlugins(e){e=(0,J.isUndefined)(e)?0:e,!0===this._allReady()?(this.loaded=!0,this.refresh()):e>=this.preloadThreshold?(this._pollTimeExceeded(),this.loaded=!0,this.refresh()):(e+=50,setTimeout(this._pollLoadingPlugins.bind(this,e),50))}_allReady(){return(0,J.reduce)(this.plugins,(function(e,t){return e&&"ready"===t.status}),!0)}_pollTimeExceeded(){(0,J.forEach)(this.plugins,(function(e,t){(0,J.isUndefined)(e.options)||"ready"===e.options.status||(console.error("Error: Plugin "+t+". did not finish loading in time."),delete this.plugins[t])}))}_stripIllegalModifications(e){return(0,J.forEach)(e,((t,s)=>{!1===this._validateOrigin(t.origin)&&delete e[s]})),e}_validateOrigin(e){return"ready"===this.plugins[e].status}_validateUniqueness(e){return(0,J.isUndefined)(this.plugins[e])}}let ue=null;const me=()=>{if(null===ue){const e=(0,n.dispatch)("yoast-seo/editor").runAnalysis;ue=window.YoastSEO.app&&window.YoastSEO.app.pluggable?window.YoastSEO.app.pluggable:new pe(e)}return ue},he=e=>me()._ready(e),ge=e=>me()._reloaded(e),ye=(e,t,s,a)=>me()._registerModification(e,t,s,a),fe=(e,t)=>me()._registerPlugin(e,t),we=(e,t,s)=>me().loaded?me()._applyModifications(e,t,s):t,be="yoastmark";function Ee(e,t){return e._properties.position.startOffset>t.length||e._properties.position.endOffset>t.length}function ve(e,t,s){const a=e.dom;let r=e.getContent();if(r=ee.markers.removeMarks(r),(0,J.isEmpty)(s))return void e.setContent(r);r=s[0].hasPosition()?function(e,t){if(!t)return"";for(let s=(e=(0,J.orderBy)(e,(e=>e._properties.position.startOffset),["asc"])).length-1;s>=0;s--){const a=e[s];Ee(a,t)||(t=a.applyWithPosition(t))}return t}(s,r):function(e,t,s,a){const{fieldsToMark:r,selectedHTML:n}=ee.languageProcessing.getFieldsToMark(s,a);return(0,J.forEach)(s,(function(t){"acf_content"!==e.id&&(t._properties.marked=ee.languageProcessing.normalizeHTML(t._properties.marked),t._properties.original=ee.languageProcessing.normalizeHTML(t._properties.original)),r.length>0?n.forEach((e=>{const s=t.applyWithReplace(e);a=a.replace(e,s)})):a=t.applyWithReplace(a)})),a}(e,0,s,r),e.setContent(r),function(e){let t=e.getContent();t=t.replace(new RegExp("<yoastmark.+?>","g"),"").replace(new RegExp("</yoastmark>","g"),""),e.setContent(t)}(e);const n=a.select(be);(0,J.forEach)(n,(function(e){e.setAttribute("data-mce-bogus","1")}))}function _e(e){return window.test=e,ve.bind(null,e)}J.noop,J.noop,J.noop;const ke="content";function xe(e){if("undefined"==typeof tinyMCE||void 0===tinyMCE.editors||0===tinyMCE.editors.length)return!1;const t=tinyMCE.get(e);return null!==t&&!t.isHidden()}window.wp.annotations;const Se=function(e){return(0,J.uniq)((0,J.flatten)(e.map((e=>{if(!(0,J.isUndefined)(e.getFieldsToMark()))return e.getFieldsToMark()}))))},Te=window.wp.richText,Re=/(<([a-z]|\/)[^<>]+>)/gi,{htmlEntitiesRegex:Ce}=ee.helpers.htmlEntities,Ie=e=>{let t=0;return(0,J.forEachRight)(e,(e=>{const[s]=e;let a=s.length;/^<\/?br/.test(s)&&(a-=1),t+=a})),t},Le="",Pe="",Ae='';function Oe(e,t,s,a,r){const n=a.clientId,o=(0,Te.create)({html:e,multilineTag:s.multilineTag,multilineWrapperTag:s.multilineWrapperTag}).text;return(0,J.flatMap)(r,(s=>{let r;return r=s.hasBlockPosition&&s.hasBlockPosition()?function(e,t,s,a,r){if(t===e.getBlockClientId()){let t=e.getBlockPositionStart(),n=e.getBlockPositionEnd();if(e.isMarkForFirstBlockSection()){const e=((e,t,s)=>{const a="yoast/faq-block"===s?'':'';return{blockStartOffset:e-=a.length,blockEndOffset:t-=a.length}})(t,n,s);t=e.blockStartOffset,n=e.blockEndOffset}if(a.slice(t,n)===r.slice(t,n))return[{startOffset:t,endOffset:n}];const o=((e,t,s)=>{const a=s.slice(0,e),r=s.slice(0,t),n=((e,t,s,a)=>{const r=[...e.matchAll(Re)];s-=Ie(r);const n=[...t.matchAll(Re)];return{blockStartOffset:s,blockEndOffset:a-=Ie(n)}})(a,r,e,t),o=((e,t,s,a)=>{let r=[...e.matchAll(Ce)];return(0,J.forEachRight)(r,(e=>{const[,t]=e;s-=t.length})),r=[...t.matchAll(Ce)],(0,J.forEachRight)(r,(e=>{const[,t]=e;a-=t.length})),{blockStartOffset:s,blockEndOffset:a}})(a,r,e=n.blockStartOffset,t=n.blockEndOffset);return{blockStartOffset:e=o.blockStartOffset,blockEndOffset:t=o.blockEndOffset}})(t,n,a);return[{startOffset:o.blockStartOffset,endOffset:o.blockEndOffset}]}return[]}(s,n,a.name,e,o):function(e,t){const s=t.getOriginal().replace(/(<([^>]+)>)/gi,""),a=t.getMarked().replace(/(<(?!\/?yoastmark)[^>]+>)/gi,""),r=function(e,t,s=!0){const a=[];if(0===e.length)return a;let r,n=0;for(s||(t=t.toLowerCase(),e=e.toLowerCase());(r=e.indexOf(t,n))>-1;)a.push(r),n=r+t.length;return a}(e,s);if(0===r.length)return[];const n=function(e){let t=e.indexOf(Le);const s=t>=0;s||(t=e.indexOf(Ae));let a=null;const r=[];for(;t>=0;){if(a=(e=s?e.replace(Le,""):e.replace(Ae,"")).indexOf(Pe),a{r.forEach((a=>{const r=a+e.startOffset;let n=a+e.endOffset;0===e.startOffset&&e.endOffset===t.getOriginal().length&&(n=a+s.length),o.push({startOffset:r,endOffset:n})}))})),o}(o,s),r?r.map((e=>({...e,block:n,richTextIdentifier:t}))):[]}))}const De=e=>e[0].toUpperCase()+e.slice(1),Me=(e,t,s,a,r)=>(e=e.map((e=>{const n=`${e.id}-${r[0]}`,o=`${e.id}-${r[1]}`,i=De(r[0]),l=De(r[1]),c=e[`json${i}`],d=e[`json${l}`],{marksForFirstSection:p,marksForSecondSection:u}=((e,t)=>({marksForFirstSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&e.isMarkForFirstBlockSection():e)),marksForSecondSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&!e.isMarkForFirstBlockSection():e))}))(t,e),m=Oe(c,n,s,a,p),h=Oe(d,o,s,a,u);return m.concat(h)})),(0,J.flattenDeep)(e)),Fe="yoast";let Ne=[];const qe={"core/paragraph":[{key:"content"}],"core/list":[{key:"values",multilineTag:"li",multilineWrapperTag:["ul","ol"]}],"core/list-item":[{key:"content"}],"core/heading":[{key:"content"}],"core/audio":[{key:"caption"}],"core/embed":[{key:"caption"}],"core/gallery":[{key:"caption"}],"core/image":[{key:"caption"}],"core/table":[{key:"caption"}],"core/video":[{key:"caption"}],"yoast/faq-block":[{key:"questions"}],"yoast/how-to-block":[{key:"steps"},{key:"jsonDescription"}]};function Ue(){const e=Ne.shift();e&&((0,n.dispatch)("core/annotations").__experimentalAddAnnotation(e),Be())}function Be(){(0,J.isFunction)(window.requestIdleCallback)?window.requestIdleCallback(Ue,{timeout:1e3}):setTimeout(Ue,150)}const We=(e,t)=>{return(0,J.flatMap)((s=e.name,qe.hasOwnProperty(s)?qe[s]:[]),(s=>"yoast/faq-block"===e.name?((e,t,s)=>{const a=t.attributes[e.key];return 0===a.length?[]:Me(a,s,e,t,["question","answer"])})(s,e,t):"yoast/how-to-block"===e.name?((e,t,s)=>{const a=t.attributes[e.key];if(a&&0===a.length)return[];const r=[];return"steps"===e.key&&r.push(Me(a,s,e,t,["name","text"])),"jsonDescription"===e.key&&(s=s.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?!e.getBlockAttributeId():e)),r.push(Oe(a,"description",e,t,s))),(0,J.flattenDeep)(r)})(s,e,t):function(e,t,s){const a=e.key,r=((e,t)=>{const s=e.attributes[t];return"string"==typeof s?s:s.toString()})(t,a);return Oe(r,a,e,t,s)}(s,e,t)));var s};function Ke(e,t){return(0,J.flatMap)(e,(e=>{const s=function(e){return e.innerBlocks.length>0}(e)?Ke(e.innerBlocks,t):[];return We(e,t).concat(s)}))}function He(e){Ne=[],(0,n.dispatch)("core/annotations").__experimentalRemoveAnnotationsBySource(Fe);const t=Se(e);if(0===e.length)return;let s=(0,n.select)("core/block-editor").getBlocks();var a;t.length>0&&(s=s.filter((e=>t.some((t=>"core/"+t===e.name))))),a=Ke(s,e),Ne=a.map((e=>({blockClientId:e.block,source:Fe,richTextIdentifier:e.richTextIdentifier,range:{start:e.startOffset,end:e.endOffset}}))),Be()}function Ye(e,t){let s;xe(ke)&&((0,J.isUndefined)(s)&&(s=_e(tinyMCE.get(ke))),s(e,t)),(0,n.select)("core/block-editor")&&(0,J.isFunction)((0,n.select)("core/block-editor").getBlocks)&&(0,n.select)("core/annotations")&&(0,J.isFunction)((0,n.dispatch)("core/annotations").__experimentalAddAnnotation)&&(function(e,t){tinyMCE.editors.map((e=>_e(e))).forEach((s=>s(e,t)))}(e,t),He(t)),(0,o.doAction)("yoast.analysis.applyMarks",t)}function ze(){const e=(0,n.select)("yoast-seo/editor").isMarkingAvailable(),t=(0,n.select)("yoast-seo/editor").getMarkerPauseStatus();return!e||t?J.noop:Ye}const je=(0,J.debounce)((async function(e,t){const{text:s,...a}=t,r=new ee.Paper(s,a);try{const t=await e.analyze(r),{seo:s,readability:a,inclusiveLanguage:i}=t.result;if(s){const e=s[""];e.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(r,e.marks)})),e.results=re(e.results),(0,n.dispatch)("yoast-seo/editor").setSeoResultsForKeyword(r.getKeyword(),e.results),(0,n.dispatch)("yoast-seo/editor").setOverallSeoScore(e.score,r.getKeyword())}a&&(a.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(r,e.marks)})),a.results=re(a.results),(0,n.dispatch)("yoast-seo/editor").setReadabilityResults(a.results),(0,n.dispatch)("yoast-seo/editor").setOverallReadabilityScore(a.score)),i&&(i.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(r,e.marks)})),i.results=re(i.results),(0,n.dispatch)("yoast-seo/editor").setInclusiveLanguageResults(i.results),(0,n.dispatch)("yoast-seo/editor").setOverallInclusiveLanguageScore(i.score)),(0,o.doAction)("yoast.analysis.run",t,{paper:r})}catch(e){}}),te);function Ve(){const{getAnalysisData:e,getEditorDataTitle:t}=(0,n.select)("yoast-seo/editor");let s=e();s={...s,textTitle:t()};const a=function(e){return e.title=we("data_page_title",e.title),e.title=we("title",e.title),e.description=we("data_meta_desc",e.description),e.text=we("content",e.text),e}(s);return(0,o.applyFilters)("yoast.analysis.data",a)}function Ge(){const{getAnalysisTimestamp:e,isCornerstoneContent:t}=(0,n.select)("yoast-seo/editor"),s=function(){const e=(0,J.get)(window,["wpseoScriptData","analysis","worker","url"],"analysis-worker.js"),t=(0,ee.createWorker)(e),s=(0,J.get)(window,["wpseoScriptData","analysis","worker","dependencies"],[]),a=[];for(const e in s){if(!Object.prototype.hasOwnProperty.call(s,e))continue;const t=window.document.getElementById(`${e}-js-translations`);if(!t)continue;const r=t.innerHTML.slice(214),n=r.indexOf(","),o=r.slice(0,n-1);try{const e=JSON.parse(r.slice(n+1,-4));a.push([o,e])}catch(t){console.warn(`Failed to parse translation data for ${e} to send to the Yoast SEO worker`);continue}}return t.postMessage({dependencies:s,translations:a}),new ee.AnalysisWorkerWrapper(t)}();s.initialize(function(e={}){let t={locale:oe(),contentAnalysisActive:ie(),keywordAnalysisActive:le(),inclusiveLanguageAnalysisActive:ce(),defaultQueryParams:(0,J.get)(window,["wpseoAdminL10n","default_query_params"],{}),logLevel:(0,J.get)(window,["wpseoScriptData","analysis","worker","log_level"],"ERROR"),enabledFeatures:(0,de.enabledFeatures)()};t=(0,J.merge)(t,e);const s=function(){const e=ne();return(0,J.get)(e,"translations",{domain:"wordpress-seo",locale_data:{"wordpress-seo":{"":{}}}})}();return(0,J.isUndefined)(s)||(0,J.isUndefined)(s.domain)||(t.translations=s),t}({useCornerstone:t(),marker:ze()})).catch(se),window.YoastSEO.analysis.applyMarks=(e,t)=>ze()(e,t);let a=Ve(),r=t(),o=e();return(0,n.subscribe)((()=>{const n=t(),i=Ve(),l=e();if(n!==r)return r=n,a=i,void s.initialize({useCornerstone:n}).then((()=>je(s,i))).catch(se);l===o&&!1!==(0,J.isEqual)(i,a)||(a=i,o=l,je(s,i))})),s}const Ze=()=>{const{getContentLocale:e}=(0,n.select)("yoast-seo/editor"),t=((...e)=>()=>e.map((e=>e())))(e,Ve),s=(()=>{const{setEstimatedReadingTime:e,setFleschReadingEase:t,setTextLength:s}=(0,n.dispatch)("yoast-seo/editor"),a=(0,J.get)(window,"YoastSEO.analysis.worker.runResearch",J.noop);return()=>{const r=ee.Paper.parse(Ve());a("readingTime",r).then((t=>e(t.result))),a("getFleschReadingScore",r).then((e=>{e.result&&t(e.result)})),a("wordCountInText",r).then((e=>s(e.result)))}})();return setTimeout(s,1500),((e,t)=>{let s=e();return()=>{const a=e();(0,J.isEqual)(a,s)||(s=a,t((0,J.clone)(a)))}})(t,s)},Qe=window.yoast.styledComponents;var Xe=s.n(Qe);const Je=window.yoast.externals.contexts,et=({theme:e,location:t,children:s})=>(0,i.createElement)(Je.LocationProvider,{value:t},(0,i.createElement)(Qe.ThemeProvider,{theme:e},s));et.propTypes={theme:h().object.isRequired,location:h().oneOf(["sidebar","metabox","modal"]).isRequired,children:h().element.isRequired};const tt=et,st=[];let at=null;class rt extends d.Component{constructor(e){super(e),this.state={registeredComponents:[]}}registerComponent(e,t){this.setState({registeredComponents:[...this.state.registeredComponents,{key:e,Component:t}]})}render(){return this.state.registeredComponents.map((({Component:e,key:t})=>(0,i.createElement)(e,{key:t})))}}function nt(e,t){null===at||null===at.current?st.push({key:e,Component:t}):at.current.registerComponent(e,t)}const ot=()=>!0;class it extends $e.modules.hookUI.Base{constructor(e,t,s,a=ot){super(),this.command=e,this.id=t,this.callback=s,this.conditions=a}getCommand(){return this.command}getId(){return this.id}getConditions(...e){return this.conditions(...e)}apply(...e){return this.callback(...e)}}class lt extends $e.modules.hookData.Base{constructor(e,t,s,a=ot){super(),this.command=e,this.id=t,this.callback=s,this.conditions=a.bind(this)}getCommand(){return this.command}getId(){return this.id}getConditions(...e){return this.conditions(...e)}apply(...e){return this.callback(...e)}}function ct(e,t,s,a=ot){return $e.hooks.registerUIAfter(new it(e,t,s,a))}function dt(e,t,s,a=ot){return $e.hooks.registerUIBefore(new it(e,t,s,a))}function pt(e,t,s,a=ot){return $e.hooks.registerDataAfter(new lt(e,t,s,a))}const ut=e=>{return parseInt(null===(t=document.getElementById("post_ID"))||void 0===t?void 0:t.value,10)===e;var t},mt=()=>{var e;return ut(null===(e=elementor.documents.getCurrent())||void 0===e?void 0:e.id)},ht=["yoast_wpseo_linkdex","yoast_wpseo_content_score","yoast_wpseo_inclusive_language_score","yoast_wpseo_words_for_linking","yoast_wpseo_estimated-reading-time-minutes"],gt=["yoast_wpseo_focuskeywords","hidden_wpseo_focuskeywords"],yt=e=>{let t="";e&&(t=(0,p.sprintf)(/* translators: %1$s translates to the Post Label in singular form */ +(0,p.__)("Unfortunately we cannot save changes to your SEO settings while you are working on a draft of an already-published %1$s. If you want to save your SEO changes, make sure to click 'Update', or wait to make your SEO changes until you are ready to update the %1$s.","wordpress-seo"),wpseoAdminL10n.postTypeNameSingular.toLowerCase())),"draft"===elementor.settings.page.model.get("post_status")&&(t=""),(0,n.select)("yoast-seo/editor").getWarningMessage()!==t&&(0,n.dispatch)("yoast-seo/editor").setWarningMessage(t)},ft=(e,t,s)=>null===t?null:(0,d.createPortal)(e,t,s),wt=({id:e,children:t})=>{const s=(0,d.useRef)(document.getElementById(e)),[a,r]=(0,d.useState)((()=>ft(t,s.current,e))),n=(0,d.useCallback)((()=>{const a=document.getElementById(e);a!==s.current&&(s.current=a,r(ft(t,a,e)))}),[e,t]);return((e,t,s={childList:!0,subtree:!0})=>{(0,d.useEffect)((()=>{const a=new MutationObserver(t);return a.observe(e,s),()=>a.disconnect()}),[e,t])})(document.body,n),a},bt=({handleRefreshClick:e,supportLink:t})=>(0,i.createElement)("div",{className:"yst-flex yst-gap-2"},(0,i.createElement)(u.Button,{onClick:e},(0,p.__)("Refresh this page","wordpress-seo")),(0,i.createElement)(u.Button,{variant:"secondary",as:"a",href:t,target:"_blank",rel:"noopener"},(0,p.__)("Contact support","wordpress-seo")));bt.propTypes={handleRefreshClick:h().func.isRequired,supportLink:h().string.isRequired};const Et=({handleRefreshClick:e,supportLink:t})=>(0,i.createElement)("div",{className:"yst-grid yst-grid-cols-1 yst-gap-y-2"},(0,i.createElement)(u.Button,{className:"yst-order-last",onClick:e},(0,p.__)("Refresh this page","wordpress-seo")),(0,i.createElement)(u.Button,{variant:"secondary",as:"a",href:t,target:"_blank",rel:"noopener"},(0,p.__)("Contact support","wordpress-seo")));Et.propTypes={handleRefreshClick:h().func.isRequired,supportLink:h().string.isRequired};const vt=({error:e,children:t})=>(0,i.createElement)("div",{role:"alert",className:"yst-max-w-screen-sm yst-p-8 yst-space-y-4"},(0,i.createElement)(u.Title,null,(0,p.__)("Something went wrong. An unexpected error occurred.","wordpress-seo")),(0,i.createElement)("p",null,(0,p.__)("We're very sorry, but it seems like the following error has interrupted our application:","wordpress-seo")),(0,i.createElement)(u.Alert,{variant:"error"},(null==e?void 0:e.message)||(0,p.__)("Undefined error message.","wordpress-seo")),(0,i.createElement)("p",null,(0,p.__)("Unfortunately, this means that any unsaved changes in this section will be lost. You can try and refresh this page to resolve the problem. If this error still occurs, please get in touch with our support team, and we'll get you all the help you need!","wordpress-seo")),t);vt.propTypes={error:h().object.isRequired,children:h().node},vt.VerticalButtons=Et,vt.HorizontalButtons=bt;const _t=({error:e})=>{const t=(0,d.useCallback)((()=>{var e,t;return null===(e=window)||void 0===e||null===(t=e.location)||void 0===t?void 0:t.reload()}),[]),s=(0,n.useSelect)((e=>e("yoast-seo/editor").selectLink("https://yoa.st/elementor-error-support")),[]),a=(0,n.useSelect)((e=>e("yoast-seo/editor").getPreference("isRtl",!1)),[]);return(0,i.createElement)(u.Root,{context:{isRtl:a}},(0,i.createElement)(vt,{error:e},(0,i.createElement)(vt.VerticalButtons,{supportLink:s,handleRefreshClick:t})))};function kt(){return(0,i.createElement)(u.ErrorBoundary,{FallbackComponent:_t},(0,i.createElement)(c.Slot,{name:"YoastElementor"},(e=>{return void 0===(t=e).length?t:(0,J.flatten)(t).sort(((e,t)=>void 0===e.props.renderPriority?1:e.props.renderPriority-t.props.renderPriority));var t})))}_t.propTypes={error:h().object.isRequired};const xt=window.wp.compose,St=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{fillRule:"evenodd",d:"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z",clipRule:"evenodd"}))})),Tt=window.wp.url,Rt=()=>[(0,p.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,p.__)("%1$sAI%2$s: Better SEO titles and meta descriptions, faster.","wordpress-seo"),"",""),(0,p.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,p.__)("%1$sMultiple keywords%2$s: Rank higher for more searches.","wordpress-seo"),"",""),(0,p.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,p.__)("%1$sSuper fast%2$s internal linking suggestions.","wordpress-seo"),"",""),(0,p.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,p.__)("%1$sNo more broken links%2$s: Automatic redirect manager.","wordpress-seo"),"",""),(0,p.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,p.__)("%1$sAppealing social previews%2$s people actually want to click on.","wordpress-seo"),"",""),(0,p.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,p.__)("%1$s24/7 support%2$s: Also on evenings and weekends.","wordpress-seo"),"","")];var Ct=s(4530),It=s.n(Ct);const Lt=({className:e,...t})=>(0,i.createElement)("span",{className:It()("yst-grow yst-overflow-hidden yst-overflow-ellipsis yst-whitespace-nowrap yst-font-wp yst-text-[#555] yst-text-base yst-leading-[normal] yst-subpixel-antialiased yst-text-left",e),...t});Lt.displayName="MetaboxButton.Text",Lt.propTypes={className:h().string},Lt.defaultProps={className:""};const Pt=({className:e,...t})=>(0,i.createElement)("button",{type:"button",className:It()("yst-flex yst-items-center yst-w-full yst-pt-4 yst-pb-4 yst-pr-4 yst-pl-6 yst-space-x-2 yst-border-t yst-border-t-[rgb(0,0,0,0.2)] yst-rounded-none yst-transition-all hover:yst-bg-[#f0f0f0] focus:yst-outline focus:yst-outline-[1px] focus:yst-outline-[color:#0066cd] focus:-yst-outline-offset-1 focus:yst-shadow-[0_0_3px_rgba(8,74,103,0.8)]",e),...t});Pt.propTypes={className:h().string},Pt.defaultProps={className:""},Pt.Text=Lt;const At=window.yoast.componentsNew,Ot=e=>(0,i.createElement)("div",{className:"yoast components-panel__body"},(0,i.createElement)("h2",{className:"components-panel__body-title"},(0,i.createElement)("button",{id:e.id,onClick:e.onClick,className:"components-button components-panel__body-toggle",type:"button"},e.prefixIcon&&(0,i.createElement)("span",{className:"yoast-icon-span",style:{fill:`${e.prefixIcon&&e.prefixIcon.color||""}`}},(0,i.createElement)(At.SvgIcon,{size:e.prefixIcon.size,icon:e.prefixIcon.icon})),(0,i.createElement)("span",{className:"yoast-title-container"},(0,i.createElement)("div",{className:"yoast-title"},e.title),(0,i.createElement)("div",{className:"yoast-subtitle"},e.subTitle)),e.children,e.suffixIcon&&(0,i.createElement)(At.SvgIcon,{size:e.suffixIcon.size,icon:e.suffixIcon.icon}),e.SuffixHeroIcon))),Dt=Ot;Ot.propTypes={onClick:h().func.isRequired,title:h().string.isRequired,id:h().string,subTitle:h().string,suffixIcon:h().object,SuffixHeroIcon:h().object,prefixIcon:h().object,children:h().node},Ot.defaultProps={id:"",suffixIcon:null,SuffixHeroIcon:null,prefixIcon:null,subTitle:"",children:null};const Mt=window.yoast.helpers,Ft=Xe().div` + padding: 25px 32px 32px; + color: #303030; +`,Nt=Xe().ul` + margin: 0; + padding: 0; + + li { + list-style-image: var(--yoast-svg-icon-check); + margin: 0.5rem 0 0 1.5rem; + line-height: 1.4em; + + &::marker { + font-size: 1.5rem; + } + } +`,qt=Xe().span` + display: block; + margin-top: 4px; +`,Ut=Xe().h2` + margin-top: 0; + margin-bottom: 0.25rem; + color: #303030; + font-size: 0.8125rem; + font-weight: 600; +`,Bt=Xe().p` + display: block; + margin: 0.25rem 0 1rem 0 !important; + max-width: 420px; +`,$t=Xe().hr` + margin-top: 1.5rem; + margin-bottom: 1rem; + border-top: 0; + border-bottom: 1px solid #E2E8F0; +`,Wt=Xe().div` + text-align: center; +`,Kt=Xe().a` + width: 100%; +`,Ht=(0,Mt.makeOutboundLink)(Kt);class Yt extends d.Component{constructor(e){super(e),this.state={defaultPrice:"99"}}createBenefitsList(e){return e.length>0&&(0,i.createElement)(Nt,{role:"list"},e.map(((e,t)=>(0,i.createElement)("li",{key:`upsell-benefit-${t}`},(0,d.createInterpolateElement)(e,{strong:(0,i.createElement)("strong",null)})))))}render(){const e=(0,n.select)("yoast-seo/editor").isPromotionActive("black-friday-2023-promotion"),{defaultPrice:t}=this.state,s=e?"69.30":null,a=s||t;return(0,i.createElement)(d.Fragment,null,e&&(0,i.createElement)("div",{className:"yst-flex yst-justify-between yst-items-center yst-text-lg yst-content-between yst-bg-black yst-text-amber-300 yst-h-9 yst-border-amber-300 yst-border-y yst-border-x-0 yst-border-solid yst-px-6"},(0,i.createElement)("div",null,(0,p.__)("BLACK FRIDAY","wordpress-seo")),(0,i.createElement)("div",null,(0,p.__)("30% OFF","wordpress-seo"))),(0,i.createElement)(Ft,null,(0,i.createElement)(Ut,null,this.props.title),(0,i.createElement)(Bt,null,this.props.description),(0,i.createElement)(Wt,null,(0,i.createElement)(Ht,{...this.props.upsellButton},this.props.upsellButtonText,this.props.upsellButtonHasCaret&&(0,i.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,i.createElement)("div",{className:"yst-text-slate-600 yst-my-4"},s&&(0,i.createElement)(d.Fragment,null,(0,i.createElement)("span",{className:"yst-text-slate-500 yst-line-through"},t)," "),(0,i.createElement)("span",{className:"yst-text-slate-900 yst-text-2xl yst-font-bold"},a)," ",(0,p.__)("$ USD / € EUR / £ GBP per year (ex. VAT)","wordpress-seo")),(0,i.createElement)(qt,{id:this.props.upsellButton["aria-describedby"]},this.props.upsellButtonLabel)),(0,i.createElement)($t,null),(0,i.createElement)(Ut,null,this.props.benefitsTitle),this.createBenefitsList(this.props.benefits)))}}Yt.propTypes={title:h().node,benefits:h().array,benefitsTitle:h().node,description:h().node,upsellButton:h().object,upsellButtonText:h().string.isRequired,upsellButtonLabel:h().string,upsellButtonHasCaret:h().bool},Yt.defaultProps={title:null,description:null,benefits:[],benefitsTitle:null,upsellButton:{href:"",className:"button button-primary"},upsellButtonLabel:"",upsellButtonHasCaret:!0};const zt=Yt,jt=Xe().div` + min-width: 600px; + + @media screen and ( max-width: 680px ) { + min-width: 0; + width: 86vw; + } +`,Vt=Xe().div` + @media screen and ( min-width: 600px ) { + max-width: 420px; + } +`,Gt=(Xe()(At.Icon)` + float: ${(0,Mt.getDirectionalStyle)("right","left")}; + margin: ${(0,Mt.getDirectionalStyle)("0 0 16px 16px","0 16px 16px 0")}; + + && { + width: 150px; + height: 150px; + + @media screen and ( max-width: 680px ) { + width: 80px; + height: 80px; + } + } +`,"yoast yoast-gutenberg-modal"),Zt=e=>{const{title:t,className:s,showYoastIcon:a,additionalClassName:r,...n}=e,o=a?(0,i.createElement)("span",{className:"yoast-icon"}):null;return(0,i.createElement)(c.Modal,{title:t,className:`${s} ${r}`,icon:o,...n},e.children)};Zt.propTypes={title:h().string,className:h().string,showYoastIcon:h().bool,children:h().oneOfType([h().node,h().arrayOf(h().node)]),additionalClassName:h().string},Zt.defaultProps={title:"Yoast SEO",className:Gt,showYoastIcon:!0,children:null,additionalClassName:""};const Qt=Zt,Xt=()=>{const[e,,,t,s]=(0,u.useToggleState)(!1),{locationContext:a}=(0,Je.useRootContext)(),r=(0,u.useSvgAria)(),n=a.includes("sidebar"),o=a.includes("metabox"),l=wpseoAdminL10n[n?"shortlinks.upsell.sidebar.internal_linking_suggestions":"shortlinks.upsell.metabox.internal_linking_suggestions"];return(0,i.createElement)(i.Fragment,null,e&&(0,i.createElement)(Qt,{title:(0,p.__)("Get internal linking suggestions","wordpress-seo"),onRequestClose:s,additionalClassName:"",id:"yoast-internal-linking-suggestions-upsell",className:`${Gt} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,shouldCloseOnClickOutside:!0},(0,i.createElement)(Vt,null,(0,i.createElement)(zt,{title:(0,p.__)("Rank higher by connecting your content","wordpress-seo"),description:(0,p.sprintf)(/* translators: %s expands to Yoast SEO Premium. */ +(0,p.__)("%s automatically suggests to what content you can link with easy drag-and-drop functionality, which is good for your SEO!","wordpress-seo"),"Yoast SEO Premium"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,p.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Rt(),upsellButtonText:(0,p.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,p.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:(0,Tt.addQueryArgs)(l,{context:a}),className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,p.__)("1 year free support and updates included!","wordpress-seo")}))),n&&(0,i.createElement)(Dt,{id:"yoast-internal-linking-suggestions-sidebar-modal-open-button",title:(0,p.__)("Internal linking suggestions","wordpress-seo"),onClick:t},(0,i.createElement)("div",{className:"yst-root"},(0,i.createElement)(u.Badge,{size:"small",variant:"upsell"},(0,i.createElement)(St,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...r})))),o&&(0,i.createElement)("div",{className:"yst-root"},(0,i.createElement)(Pt,{id:"yoast-internal-linking-suggestions-metabox-modal-open-button",onClick:t},(0,i.createElement)(Pt.Text,null,(0,p.__)("Internal linking suggestions","wordpress-seo")),(0,i.createElement)(u.Badge,{size:"small",variant:"upsell"},(0,i.createElement)(St,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...r}),(0,i.createElement)("span",null,"Premium")))))},Jt=window.yoast.externals.components;function es(){return(0,xt.createHigherOrderComponent)((function(e){return(0,xt.pure)((function(t){const s=(0,d.useContext)(Je.LocationContext);return(0,d.createElement)(e,{...t,location:s})}))}),"withLocation")}const ts=(0,xt.compose)([(0,n.withSelect)((e=>{const{isCornerstoneContent:t}=e("yoast-seo/editor");return{isCornerstone:t(),learnMoreUrl:wpseoAdminL10n["shortlinks.cornerstone_content_info"]}})),(0,n.withDispatch)((e=>{const{toggleCornerstoneContent:t}=e("yoast-seo/editor");return{onChange:t}})),es()])(Jt.CollapsibleCornerstone),ss=(0,xt.compose)([(0,n.withSelect)(((e,t)=>{const{isAlertDismissed:s}=e(t.store||"yoast-seo/editor");return{isAlertDismissed:s(t.alertKey)}})),(0,n.withDispatch)(((e,t)=>{const{dismissAlert:s}=e(t.store||"yoast-seo/editor");return{onDismissed:()=>s(t.alertKey)}}))]),as=({children:e,id:t,hasIcon:s=!0,title:a,image:r=null,isAlertDismissed:n,onDismissed:o})=>n?null:(0,i.createElement)("div",{id:t,className:"notice-yoast yoast is-dismissible"},(0,i.createElement)("div",{className:"notice-yoast__container"},(0,i.createElement)("div",null,(0,i.createElement)("div",{className:"notice-yoast__header"},s&&(0,i.createElement)("span",{className:"yoast-icon"}),(0,i.createElement)("h2",{className:"notice-yoast__header-heading"},a)),(0,i.createElement)("p",null,e)),r&&(0,i.createElement)(r,{height:"60"})),(0,i.createElement)("button",{type:"button",className:"notice-dismiss",onClick:o},(0,i.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,p.__)("Dismiss this notice.","wordpress-seo"))));as.propTypes={children:h().node.isRequired,id:h().string.isRequired,hasIcon:h().bool,title:h().any.isRequired,image:h().elementType,isAlertDismissed:h().bool.isRequired,onDismissed:h().func.isRequired};const rs=ss(as),ns=({store:e="yoast-seo/editor",image:t=null,title:s,promoId:a,alertKey:r,children:o,...l})=>(0,n.select)(e).isPromotionActive(a)&&(0,i.createElement)(rs,{alertKey:r,store:e,id:r,title:s,image:t,...l},o);ns.propTypes={store:h().string,image:h().elementType,title:h().any.isRequired,promoId:h().string.isRequired,alertKey:h().string.isRequired,children:h().node};const os=({store:e="yoast-seo/editor",location:t="sidebar",...s})=>{const a=(0,n.useSelect)((t=>t(e).getIsPremium()),[e]),r=(0,n.useSelect)((t=>t(e).selectLinkParams()),[e]),o="sidebar"===t?(0,p.sprintf)(/* translators: %1$s expands to YOAST SEO PREMIUM */ +(0,p.__)("BLACK FRIDAY SALE: %1$s","wordpress-seo"),"YOAST SEO PREMIUM"):(0,d.createInterpolateElement)((0,p.sprintf)(/* translators: %1$s expands to YOAST SEO PREMIUM, %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,p.__)("BLACK FRIDAY SALE: %1$s %2$sBuy now!%3$s","wordpress-seo"),"YOAST SEO PREMIUM","",""),{a:(0,i.createElement)("a",{href:(0,Tt.addQueryArgs)("https://yoa.st/black-friday-sale",r),target:"_blank",rel:"noreferrer"})});return a?null:(0,i.createElement)(ns,{id:`black-friday-2023-promotion-${t}`,promoId:"black-friday-2023-promotion",alertKey:"black-friday-2023-promotion",store:e,title:o,image:Image,...s},(0,i.createElement)("span",{className:"yoast-bf-sale-badge"},(0,p.__)("30% OFF!","wordpress-seo")," "),"sidebar"===t&&(0,i.createElement)("a",{className:"yst-block yst--mb-[1em]",href:(0,Tt.addQueryArgs)("https://yoa.st/black-friday-sale",r),target:"_blank",rel:"noreferrer"},(0,p.__)("Buy now!","wordpress-seo")))};os.propTypes={store:h().string,location:h().oneOf(["sidebar","metabox"])};const is=({store:e="yoast-seo/editor",...t})=>{const s=(0,n.useSelect)((t=>t(e).selectLinkParams()),[e]),a=(0,d.createInterpolateElement)((0,p.sprintf)(/* translators: %1$s expands to Yoast, %2$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */ +(0,p.__)("The %1$s %2$sultimate Black Friday checklist%3$s helps you prepare in time, so you can boost your results during this sale.","wordpress-seo"),"Yoast","",""),{strong:(0,i.createElement)("strong",null)});return(0,i.createElement)(ns,{id:"black-friday-2023-sidebar-checklist",promoId:"black-friday-2023-checklist",alertKey:"black-friday-2023-sidebar-checklist",store:e,title:(0,p.__)("Is your WooCommerce store ready for Black Friday?","wordpress-seo"),...t},a," ",(0,i.createElement)("a",{href:(0,Tt.addQueryArgs)("https://yoa.st/black-friday-checklist",s),target:"_blank",rel:"noreferrer"},(0,p.__)("Get the checklist and start optimizing now!","wordpress-seo")))};is.propTypes={store:h().string};const ls="trustpilot-review-notification",cs="yoast-seo/editor";const ds=()=>{const e=(0,n.useSelect)((e=>e(cs).getIsPremium()),[]),t=(0,n.useSelect)((e=>e(cs).isAlertDismissed(ls)),[]),{overallScore:s}=(0,n.useSelect)((e=>e(cs).getResultsForFocusKeyword()),[]),{dismissAlert:a}=(0,n.useDispatch)(cs),r=(0,d.useCallback)((()=>a(ls)),[a]),[o,i]=(0,d.useState)(!1);return(0,d.useEffect)((()=>{var e,t;"good"===(null===(t=s,(0,J.isNil)(t)||(t/=10),e=function(e){switch(e){case"feedback":return{className:"na",screenReaderText:(0,p.__)("Feedback","wordpress-seo"),screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""};case"bad":return{className:"bad",screenReaderText:(0,p.__)("Needs improvement","wordpress-seo"),screenReaderReadabilityText:(0,p.__)("Needs improvement","wordpress-seo"),screenReaderInclusiveLanguageText:(0,p.__)("Needs improvement","wordpress-seo")};case"ok":return{className:"ok",screenReaderText:(0,p.__)("OK SEO score","wordpress-seo"),screenReaderReadabilityText:(0,p.__)("OK","wordpress-seo"),screenReaderInclusiveLanguageText:(0,p.__)("Potentially non-inclusive","wordpress-seo")};case"good":return{className:"good",screenReaderText:(0,p.__)("Good SEO score","wordpress-seo"),screenReaderReadabilityText:(0,p.__)("Good","wordpress-seo"),screenReaderInclusiveLanguageText:(0,p.__)("Good","wordpress-seo")};default:return{className:"loading",screenReaderText:"",screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""}}}(ee.interpreters.scoreToRating(t)))||void 0===e?void 0:e.className)&&i(!0)}),[s]),{shouldShow:!e&&!t&&o,dismiss:r}},ps=(0,Mt.makeOutboundLink)(),us=()=>{const{shouldShow:e,dismiss:t}=ds(),{locationContext:s}=(0,Je.useRootContext)(),a=(0,n.useSelect)((e=>e(cs).selectLink("https://yoa.st/trustpilot-review",{context:s})),[s]);return(0,i.createElement)(as,{alertKey:ls,store:cs,id:ls,title:(0,p.__)("Show Yoast SEO some love!","wordpress-seo"),hasIcon:!1,isAlertDismissed:!e,onDismissed:t},(0,p.__)("Happy with the plugin?","wordpress-seo")," ",(0,i.createElement)(ps,{href:a,rel:"noopener noreferrer"},(0,p.__)("Leave a quick review","wordpress-seo")),".")};var ms,hs,gs,ys,fs,ws,bs,Es,vs,_s,ks,xs,Ss,Ts,Rs,Cs,Is,Ls,Ps,As,Os,Ds,Ms,Fs,Ns,qs,Us,Bs,$s,Ws,Ks,Hs,Ys,zs,js,Vs,Gs,Zs,Qs,Xs,Js,ea,ta,sa,aa,ra,na;function oa(){return oa=Object.assign?Object.assign.bind():function(e){for(var t=1;ti.createElement("svg",oa({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 448 360"},e),ms||(ms=i.createElement("circle",{cx:226,cy:211,r:149,fill:"#f0ecf0"})),hs||(hs=i.createElement("path",{fill:"#fbd2a6",d:"M173.53 189.38s-35.47-5.3-41.78-11c-9.39-24.93-29.61-48-35.47-66.21-.71-2.24 3.72-11.39 3.53-15.41s-5.34-11.64-5.23-14-.09-15.27-.09-15.27l-4.75-.72s-5.13 6.07-3.56 9.87c-1.73-4.19 4.3 7.93.5 9.35 0 0-6-5.94-11.76-8.27s-19.57-3.65-19.57-3.65L43.19 73l-4.42.6L31 69.7l-2.85 5.12 7.53 5.29L40.86 92l17.19 10.2 10.2 10.56 9.86 3.56s26.49 79.67 45 92c17 11.33 37.23 15.92 37.23 15.92z"})),gs||(gs=i.createElement("path",{fill:"#a4286a",d:"M270.52 345.13c2.76-14.59 15.94-35.73 30.24-54.58 16.22-21.39 14-79.66-33.19-91.46-17.3-4.32-52.25-1-59.85-3.41C186.54 189 170 187 168 190.17c-5 10.51-7.73 27.81-5.51 36.26 1.18 4.73 3.54 5.91 20.49 13.4-5.12 15-16.35 26.3-22.86 37s7.88 27.2 7.1 33.51c-.48 3.8-4.26 21.13-7.18 34.25a149.47 149.47 0 0 0 110.3 8.66 25.66 25.66 0 0 1 .18-8.12z"})),ys||(ys=i.createElement("path",{fill:"#9a5815",d:"M206.76 66.43c-5 14.4-1.42 25.67-3.93 40.74-10 60.34-24.08 43.92-31.44 93.6 7.24-14.19 14.32-15.82 20.63-23.11-.83 3.09-10.25 13.75-8.05 34.81 9.85-8.51 6.35-8.75 11.86-8.54.36 3.25 3.53 3.22-3.59 10.53 2.52.69 17.42-14.32 20.16-12.66s0 5.72-6 7.76c2.15 2.2 30.47-3.87 43.81-14.71 4.93-4 10-13.16 13.38-18.2 7.17-10.62 12.38-24.77 17.71-36.6 8.94-19.87 15.09-39.34 16.11-61.31.53-10.44-3.41-18.44-4.41-28.86-2.57-27.8-67.63-37.26-86.24 16.55z"})),fs||(fs=i.createElement("path",{fill:"#efb17c",d:"M277.74 179.06c.62-.79 1.24-1.59 1.84-2.39-.85 2.59-1.52 3.73-1.84 2.39z"})),ws||(ws=i.createElement("path",{fill:"#fbd2a6",d:"M216.1 206.72c3.69-5.42 8.28-3.35 15.57-8.28 3.76-3.06 1.57-9.46 1.77-11.82 18.25 4.56 37.38-1.18 49.07-16 .62 5.16-2.77 22.27-.2 27 4.73 8.67 13.4 18.92 13.4 18.92-35.47-2.76-63.45 39-89.86 44.54 5.52-28.74-2.36-35.84 10.25-54.36z"})),bs||(bs=i.createElement("path",{fill:"#f6b488",d:"m235.21 167.9 53.21-25.23s-3.65 24-6.5 32.72c-64.05 62.66-46.47-7.33-46.71-7.49z"})),Es||(Es=i.createElement("path",{fill:"#fbd2a6",d:"M226.86 50.64C215 59.31 206.37 93.21 204 95.57c-19.46 19.47-3.59 41.39-3.94 51.24-.2 5.52-4.14 25.42 5.72 29.36 22.22 8.89 60-3.48 67.19-12.61 13.28-16.75 40.89-94.78 17.74-108.19-7.92-4.58-42.78-20.18-63.85-4.73z"})),vs||(vs=i.createElement("path",{fill:"#e5766c",d:"M243.69 143.66c-10.7-6.16-8.56-6.73-19.76-12.71-3.86-2.07-3.94.64-6.32 0-2.91-.79-1.39-2.74-5.37-3.48-6.52-1.21-3.67 3.63-3.15 6 1.32 6.15-8.17 17.3 3.26 21.42 12.65 4.55 21.38-9.41 31.34-11.23z"})),_s||(_s=i.createElement("path",{fill:"#fff",d:"M240.68 143.9c-11.49-5.53-11.65-8.17-24.64-11.69-8.6-2.32-5.53 1-5.69 4.42-.2 4.16-1.26 9.87 4.9 12.66 9 4.09 18.16-6.02 25.43-5.39zm.7-40.9c-.16 1.26-.06 4.9 5.46 8.25 11.43-4.73 16.36-2.56 17-3.33 1.48-1.76-2-8.87-7.88-9.85-5.58-.94-14.14 1.24-14.58 4.93z"})),ks||(ks=i.createElement("path",{fill:"#000001",d:"M263.53 108.19c-4.32-4.33-6.85-6.24-12.26-8.21-2.77-1-6.18.18-8.65 1.67a3.65 3.65 0 0 0-1.24 1.23h-.12a3.73 3.73 0 0 1 1-1.52 12.53 12.53 0 0 1 11.93-3c4.73 1 9.43 4.63 9.42 9.82z"})),xs||(xs=i.createElement("circle",{cx:254.13,cy:104.05,r:4.19,fill:"#000001"})),Ss||(Ss=i.createElement("path",{fill:"#fff",d:"M225.26 99.22c-.29 1-6.6 3.45-10.92 1.48-1.15-3.24-5-6.43-5.25-6.71-.5-2.86 5.55-8 10.06-6.3a10.21 10.21 0 0 1 6.11 11.53z"})),Ts||(Ts=i.createElement("path",{fill:"#000001",d:"M209.29 94.21c-.19-2.34 1.84-4.1 3.65-5.2 7-3.87 13.18 3 12.43 10h-.12c-.14-4-2.38-8.44-6.47-9.11a3.19 3.19 0 0 0-2.42.31c-1.37.85-2.38 2-3.89 2.56-1 .45-1.92.42-3 1.4h-.22z"})),Rs||(Rs=i.createElement("circle",{cx:219.55,cy:95.28,r:4,fill:"#000001"})),Cs||(Cs=i.createElement("path",{fill:"#efb17c",d:"M218.66 120.27a27.32 27.32 0 0 0 4.54 3.45c-2.29-.72-4.28-.69-6.32-2.27-2.53-2-3.39-5.16-.73-7.72 10.24-9.82 12.56-13.82 14.77-24.42-1 12.37-6 17.77-10.63 23.18-2.53 2.97-4.68 5.06-1.63 7.78z"})),Is||(Is=i.createElement("path",{fill:"#a57c52",d:"M231.22 69.91c-.67-3.41-8.78-2.83-11.06-1.93-3.48 1.39-6.08 5.22-7.13 8.53 2.9-4.3 6.74-8.12 12.46-6 1.16.42 3.18 2.35 4.48 1.85s1.03-2.2 1.25-2.45zm32.16 8.56c-2.75-1.66-12.24-5.08-12.18.82 2.56.24 5-.19 7.64.95 11.22 4.76 12.77 17.61 12.85 17.86.2-.53.1 1.26.23.7-.02.2.95-12.12-8.54-20.33z"})),Ls||(Ls=i.createElement("path",{fill:"#fbd2a6",d:"M53.43 250.73c6.29 0-.6-.17 7.34 0 1.89.05-2.38-.7 0-.69 4.54-4.2 12.48-.74 20.6-2.45 4.55.35 3.93 1.35 5.59 4.19 4.89 8.38 4.78 14.21 14 19.56 16.42 8.38 66 12.92 88.49 18.86 5.52.83 42.64-20.15 61-23.75 6.51 10.74 11.46 28.68 8.39 34.93-6.54 13.3-57.07 25.4-75.91 25.15C156.47 326.18 94 294 92.2 293c-.94-.57.7-.7-7.68 0s-10.15.72-17.47-1.4c-3-.87-4.61-1.33-6.33-3.54-2 .22-3.39.2-4.78-1-3.15-2.74-4.84-6.61-2.73-10.06h-.12c-3.35-2.48-6.54-7.69-3.08-11.72 1-1.18 6.06-1.94 7.77-2.28-1.58-.29-6.37.19-7.49-.72-3.06-2.5-4.96-11.55 3.14-11.55z"})),Ps||(Ps=i.createElement("path",{fill:"#a4286a",d:"M303.22 237.52c-9.87-11.88-41.59 8.19-47.8 12.34s-14.89 17.95-14.89 17.95c6 9.43 8.36 31 5.65 46.34l30.51-3s18-15.62 22.59-28.7 6.3-42.54 6.3-42.54"})),As||(As=i.createElement("path",{fill:"#cb9833",d:"M278.63 31.67c-6.08 0-22.91 4.07-22.93 12.91 0 11 47.9 38.38 16.14 85.85 10.21-.79 10.79-8.12 14.92-14.93-3.66 77-49.38 93.58-40.51 142.25 7.68-25.81 20.3-11.62 38.13-33.84 3.45 4.88 9 18.28-9.46 33.78 50-31.26 57.31-56.6 51.92-95C319.93 113.53 348.7 42 278.63 31.67z"})),Os||(Os=i.createElement("path",{fill:"#fbd2a6",d:"M283.64 126.83c-2.42 9.67-8 15.76-1.48 16.46A21.26 21.26 0 0 0 302 132.6c5.17-8.52 3.93-16.44-2.46-18s-13.48 2.56-15.9 12.23z"})),Ds||(Ds=i.createElement("path",{fill:"#efb17c",d:"M38 73.45c1.92 2 4.25 9.21 6.32 10.91 2.25 1.85 5.71 2.12 8.1 4.45 3.66-2 6-8.72 10-9.31-2.59 1.31-4.42 3.5-6.93 4.88-1.42.8-3 1.31-4.38 2.25-2.16-1.46-4.27-1.77-6.26-3.38-2.52-2.02-5.31-8-6.85-9.8z"})),Ms||(Ms=i.createElement("path",{fill:"#efb17c",d:"M39 74.4c4.83 1.1 12.52 6.44 15.89 10-3.22-1.34-14.73-6.15-15.89-10zm.62-1.5c6.71-.79 18 1.54 23.29 5.9-3.85-.2-5.42-1.48-9-2.94-4.08-1.69-8.83-2.03-14.29-2.96zm46.43 14.58c-3.72-1.32-10.52-1.13-13.22 3.52 2-1.16 1.84-2.11 4.18-1.72-3.81-4.15 8.16-.74 11.6-.24m-2.78 13.15c.56-3.29-8-7.81-10.58-9.17-6.25-3.29-12.16 1.36-19.33-4.53 5.94 6.1 14.23 2.5 19.55 5.76 3.06 1.88 8.65 6.09 9.35 9.38-.23-.4 1.29-1.44 1.01-1.44z"})),Fs||(Fs=i.createElement("circle",{cx:38.13,cy:30.03,r:3.14,fill:"#b89ac8"})),Ns||(Ns=i.createElement("circle",{cx:60.26,cy:39.96,r:3.14,fill:"#e31e0c"})),qs||(qs=i.createElement("circle",{cx:50.29,cy:25.63,r:3.14,fill:"#3baa45"})),Us||(Us=i.createElement("circle",{cx:22.19,cy:19.21,r:3.14,fill:"#2ca9e1"})),Bs||(Bs=i.createElement("circle",{cx:22.19,cy:30.03,r:3.14,fill:"#e31e0c"})),$s||($s=i.createElement("circle",{cx:26.86,cy:8.28,r:3.14,fill:"#3baa45"})),Ws||(Ws=i.createElement("circle",{cx:49.32,cy:39.99,r:3.14,fill:"#e31e0c"})),Ks||(Ks=i.createElement("circle",{cx:63.86,cy:59.52,r:3.14,fill:"#f8ad39"})),Hs||(Hs=i.createElement("circle",{cx:50.88,cy:50.72,r:3.14,fill:"#3baa45"})),Ys||(Ys=i.createElement("circle",{cx:63.47,cy:76.17,r:3.14,fill:"#e31e0c"})),zs||(zs=i.createElement("circle",{cx:38.34,cy:14.83,r:3.14,fill:"#2ca9e1"})),js||(js=i.createElement("circle",{cx:44.44,cy:5.92,r:3.14,fill:"#f8ad39"})),Vs||(Vs=i.createElement("circle",{cx:57.42,cy:10.24,r:3.14,fill:"#e31e0c"})),Gs||(Gs=i.createElement("circle",{cx:66.81,cy:12.4,r:3.14,fill:"#2ca9e1"})),Zs||(Zs=i.createElement("circle",{cx:77.95,cy:5.14,r:3.14,fill:"#b89ac8"})),Qs||(Qs=i.createElement("circle",{cx:77.95,cy:30.34,r:3.14,fill:"#e31e0c"})),Xs||(Xs=i.createElement("circle",{cx:80.97,cy:16.55,r:3.14,fill:"#f8ad39"})),Js||(Js=i.createElement("circle",{cx:62.96,cy:27.27,r:3.14,fill:"#3baa45"})),ea||(ea=i.createElement("circle",{cx:75.36,cy:48.67,r:3.14,fill:"#2ca9e1"})),ta||(ta=i.createElement("circle",{cx:76.11,cy:65.31,r:3.14,fill:"#3baa45"})),sa||(sa=i.createElement("path",{fill:"#71b026",d:"M78.58 178.43C54.36 167.26 32 198.93 5 198.93c19.56 20.49 63.53 1.52 69 15.5 1.48-14.01 4.11-30.9 4.58-36z"})),aa||(aa=i.createElement("path",{fill:"#074a67",d:"M67.75 251.08c0-4.65 10.13-72.65 10.13-72.65h2.8l-9.09 72.3z"})),ra||(ra=i.createElement("ellipse",{cx:255.38,cy:103.18,fill:"#fff",rx:1.84,ry:1.77})),na||(na=i.createElement("ellipse",{cx:221.24,cy:94.75,fill:"#fff",rx:1.84,ry:1.77}))),la=({store:e="yoast-seo/editor",image:t=ia,url:s,...a})=>(0,n.useSelect)((t=>t(e).getIsPremium()))?null:(0,i.createElement)(rs,{alertKey:"webinar-promo-notification",store:e,id:"webinar-promo-notification",title:(0,p.__)("Join our FREE webinar for SEO success","wordpress-seo"),image:t,url:s,...a},(0,p.__)("Feeling lost when it comes to optimizing your site for the search engines? Join our FREE webinar to gain the confidence that you need in order to start optimizing like a pro! You'll obtain the knowledge and tools to start effectively implementing SEO.","wordpress-seo")," ",(0,i.createElement)("a",{href:s,target:"_blank",rel:"noreferrer"},(0,p.__)("Sign up today!","wordpress-seo")));la.propTypes={store:h().string,image:h().elementType,url:h().string.isRequired};const ca=la,da=()=>window.wpseoScriptData&&"1"===window.wpseoScriptData.isWooCommerceActive,pa=(e="yoast-seo/editor")=>{const t=(0,n.select)(e).isPromotionActive("black-friday-2023-promotion"),s=(0,n.select)(e).isAlertDismissed("black-friday-2023-promotion");return t?s:((e="yoast-seo/editor")=>{const t=(0,n.select)(e).isPromotionActive("black-friday-2023-checklist"),s=(0,n.select)(e).isAlertDismissed("black-friday-2023-sidebar-checklist");return!t||s})(e)},ua=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{d:"M11 3a1 1 0 10-2 0v1a1 1 0 102 0V3zM15.657 5.757a1 1 0 00-1.414-1.414l-.707.707a1 1 0 001.414 1.414l.707-.707zM18 10a1 1 0 01-1 1h-1a1 1 0 110-2h1a1 1 0 011 1zM5.05 6.464A1 1 0 106.464 5.05l-.707-.707a1 1 0 00-1.414 1.414l.707.707zM5 10a1 1 0 01-1 1H3a1 1 0 110-2h1a1 1 0 011 1zM8 16v-1h4v1a2 2 0 11-4 0zM12 14c.015-.34.208-.646.477-.859a4 4 0 10-4.954 0c.27.213.462.519.476.859h4.002z"}))})),ma=(e=null)=>(0,i.useMemo)((()=>{const t={role:"img","aria-hidden":"true"};return null!==e&&(t.focusable=e?"true":"false"),t}),[e]),ha=({id:e,postTypeName:t,children:s,title:a,isOpen:r,close:n,open:o,shouldCloseOnClickOutside:l,showChangesWarning:c,SuffixHeroIcon:u})=>(0,i.createElement)(d.Fragment,null,r&&(0,i.createElement)(Je.LocationProvider,{value:"modal"},(0,i.createElement)(Qt,{title:a,onRequestClose:n,additionalClassName:"yoast-collapsible-modal yoast-post-settings-modal",id:"id",shouldCloseOnClickOutside:l},(0,i.createElement)("div",{className:"yoast-content-container"},(0,i.createElement)("div",{className:"yoast-modal-content"},s)),(0,i.createElement)("div",{className:"yoast-notice-container"},(0,i.createElement)("hr",null),(0,i.createElement)("div",{className:"yoast-button-container"},c&&(0,i.createElement)("p",null,/* Translators: %s translates to the Post Label in singular form */ +(0,p.sprintf)((0,p.__)("Make sure to save your %s for changes to take effect","wordpress-seo"),t)),(0,i.createElement)("button",{className:"yoast-button yoast-button--primary yoast-button--post-settings-modal",type:"button",onClick:n},/* Translators: %s translates to the Post Label in singular form */ +(0,p.sprintf)((0,p.__)("Return to your %s","wordpress-seo"),t)))))),(0,i.createElement)(Dt,{id:e+"-open-button",title:a,SuffixHeroIcon:u,suffixIcon:u?null:{size:"20px",icon:"pencil-square"},onClick:o}));ha.propTypes={id:h().string.isRequired,postTypeName:h().string.isRequired,children:h().oneOfType([h().node,h().arrayOf(h().node)]).isRequired,title:h().string.isRequired,isOpen:h().bool.isRequired,open:h().func.isRequired,close:h().func.isRequired,shouldCloseOnClickOutside:h().bool,showChangesWarning:h().bool,SuffixHeroIcon:h().object},ha.defaultProps={shouldCloseOnClickOutside:!0,showChangesWarning:!0};const ga=ha,ya=(0,xt.compose)([(0,n.withSelect)(((e,t)=>{const{getPostOrPageString:s,getIsModalOpen:a}=e("yoast-seo/editor");return{postTypeName:s(),isOpen:a(t.id)}})),(0,n.withDispatch)(((e,t)=>{const{openEditorModal:s,closeEditorModal:a}=e("yoast-seo/editor");return{open:()=>s(t.id),close:a}}))])(ga),fa=()=>{const e=(0,n.useSelect)((e=>e("yoast-seo/editor").getEstimatedReadingTime()),[]),t=(0,d.useMemo)((()=>(0,J.get)(window,"wpseoAdminL10n.shortlinks-insights-estimated_reading_time","")),[]);return(0,i.createElement)(At.InsightsCard,{amount:e,unit:(0,p._n)("minute","minutes",e,"wordpress-seo"),title:(0,p.__)("Reading time","wordpress-seo"),linkTo:t +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about reading time","wordpress-seo")})},wa=(0,Mt.makeOutboundLink)();function ba(e,t,s){const a=function(e){switch(e){case ee.DIFFICULTY.FAIRLY_DIFFICULT:case ee.DIFFICULTY.DIFFICULT:case ee.DIFFICULTY.VERY_DIFFICULT:return(0,p.__)("Try to make shorter sentences, using less difficult words to improve readability","wordpress-seo");case ee.DIFFICULTY.NO_DATA:return(0,p.__)("Continue writing to get insight into the readability of your text!","wordpress-seo");default:return(0,p.__)("Good job!","wordpress-seo")}}(t);return(0,i.createElement)("span",null,function(e,t){return-1===e?(0,p.sprintf)((0,p.__)("Your text should be slightly longer to calculate your Flesch reading ease score.","wordpress-seo")):(0,p.sprintf)( +/* Translators: %1$s expands to the numeric Flesch reading ease score, + %2$s expands to the easiness of reading (e.g. 'easy' or 'very difficult'). + */ +(0,p.__)("The copy scores %1$s in the test, which is considered %2$s to read.","wordpress-seo"),e,function(e){switch(e){case ee.DIFFICULTY.NO_DATA:return(0,p.__)("no data","wordpress-seo");case ee.DIFFICULTY.VERY_EASY:return(0,p.__)("very easy","wordpress-seo");case ee.DIFFICULTY.EASY:return(0,p.__)("easy","wordpress-seo");case ee.DIFFICULTY.FAIRLY_EASY:return(0,p.__)("fairly easy","wordpress-seo");case ee.DIFFICULTY.OKAY:return(0,p.__)("okay","wordpress-seo");case ee.DIFFICULTY.FAIRLY_DIFFICULT:return(0,p.__)("fairly difficult","wordpress-seo");case ee.DIFFICULTY.DIFFICULT:return(0,p.__)("difficult","wordpress-seo");case ee.DIFFICULTY.VERY_DIFFICULT:return(0,p.__)("very difficult","wordpress-seo")}}(t))}(e,t)," ",t>=ee.DIFFICULTY.FAIRLY_DIFFICULT?(0,i.createElement)(wa,{href:s},a+"."):a)}const Ea=()=>{let e=(0,n.useSelect)((e=>e("yoast-seo/editor").getFleschReadingEaseScore()),[]);const t=(0,d.useMemo)((()=>(0,J.get)(window,"wpseoAdminL10n.shortlinks-insights-flesch_reading_ease","")),[]),s=(0,n.useSelect)((e=>e("yoast-seo/editor").getFleschReadingEaseDifficulty()),[e]),a=(0,d.useMemo)((()=>{const t=(0,J.get)(window,"wpseoAdminL10n.shortlinks-insights-flesch_reading_ease_article","");return ba(e,s,t)}),[e,s]);return-1===e&&(e="?"),(0,i.createElement)(At.InsightsCard,{amount:e,unit:(0,p.__)("out of 100","wordpress-seo"),title:(0,p.__)("Flesch reading ease","wordpress-seo"),linkTo:t +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about Flesch reading ease","wordpress-seo"),description:a})};let va,_a,ka,xa;const Sa=/<(\/)?(\w+)\s*(\/)?>/g;function Ta(e,t,s,a,r){return{element:e,tokenStart:t,tokenLength:s,prevOffset:a,leadingTextStart:r,children:[]}}function Ra(){const e=va.length-_a;0!==e&&ka.push(va.substring(_a,_a+e))}function Ca(e){const{element:t,tokenStart:s,tokenLength:a,prevOffset:r,children:n}=e,o=xa[xa.length-1],i=va.substring(o.prevOffset,s);i&&o.children.push(i),o.children.push((0,d.cloneElement)(t,null,...n)),o.prevOffset=r||s+a}function Ia(e){const t=function(){const e=Sa.exec(va);if(null===e)return["no-more-tokens"];const t=e.index,[s,a,r,n]=e,o=s.length;return n?["self-closed",r,t,o]:a?["closer",r,t,o]:["opener",r,t,o]}(),[s,a,r,n]=t,o=xa.length,i=r>_a?_a:null;if(!e[a])return Ra(),!1;switch(s){case"no-more-tokens":if(0!==o){const{leadingTextStart:e,tokenStart:t}=xa.pop();ka.push(va.substring(e,e+t))}return Ra(),!1;case"self-closed":return 0===o?(null!==i&&ka.push(va.substring(i,r)),ka.push(e[a]),_a=r+n,!0):(Ca(Ta(e[a],r,n)),_a=r+n,!0);case"opener":return xa.push(Ta(e[a],r,n,r+n,i)),_a=r+n,!0;case"closer":if(1===o)return function(e){const{element:t,leadingTextStart:s,prevOffset:a,tokenStart:r,children:n}=xa.pop(),o=e?va.substring(a,e):va.substring(a);o&&n.push(o),null!==s&&ka.push(va.substring(s,r)),ka.push((0,d.cloneElement)(t,null,...n))}(r),_a=r+n,!0;const t=xa.pop(),s=va.substring(t.prevOffset,r);t.children.push(s),t.prevOffset=r+n;const l=Ta(t.element,t.tokenStart,t.tokenLength,r+n);return l.children=t.children,Ca(l),_a=r+n,!0;default:return Ra(),!1}}const La=(e,t)=>{if(va=e,_a=0,ka=[],xa=[],Sa.lastIndex=0,!(e=>{const t="object"==typeof e,s=t&&Object.values(e);return t&&s.length&&s.every((e=>(0,d.isValidElement)(e)))})(t))throw new TypeError("The conversionMap provided is not valid. It must be an object with values that are WPElements");do{}while(Ia(t));return(0,d.createElement)(d.Fragment,null,...ka)},Pa=({data:e,itemScreenReaderText:t,className:s,...a})=>{const r=(0,d.useMemo)((()=>{var t,s;return null!==(t=null===(s=(0,J.maxBy)(e,"number"))||void 0===s?void 0:s.number)&&void 0!==t?t:0}),[e]);return(0,i.createElement)("ul",{className:It()("yoast-data-model",s),...a},e.map((({name:e,number:s})=>(0,i.createElement)("li",{key:`${e}_dataItem`,style:{"--yoast-width":s/r*100+"%"}},e,(0,i.createElement)("span",null,s),t&&(0,i.createElement)("span",{className:"screen-reader-text"},(0,p.sprintf)(t,s))))))};Pa.propTypes={data:h().arrayOf(h().shape({name:h().string.isRequired,number:h().number.isRequired})),itemScreenReaderText:h().string,className:h().string},Pa.defaultProps={data:[],itemScreenReaderText:"",className:""};const Aa=Pa,Oa=(0,Mt.makeOutboundLink)(),Da=({location:e})=>{const t=(0,n.useSelect)((e=>{var t,s;return null===(t=null===(s=e("yoast-seo-premium/editor"))||void 0===s?void 0:s.getPreference("isProminentWordsAvailable",!1))||void 0===t||t}),[]),s=(0,n.useSelect)((e=>e("yoast-seo/editor").getPreference("shouldUpsell",!1)),[]),a=(0,d.useMemo)((()=>(0,J.get)(window,`wpseoAdminL10n.shortlinks-insights-upsell-${e}-prominent_words`,"")),[e]),r=(0,d.useMemo)((()=>{const e=(0,J.get)(window,"wpseoAdminL10n.shortlinks-insights-keyword_research_link","");return La((0,p.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,p.__)("Read our %1$sultimate guide to keyword research%2$s to learn more about keyword research and keyword strategy.","wordpress-seo"),"",""),{a:(0,i.createElement)(Oa,{href:e})})}),[]),o=(0,d.useMemo)((()=>La((0,p.sprintf)( +// translators: %1$s expands to a starting `b` tag, %1$s expands to a closing `b` tag and %3$s expands to `Yoast SEO Premium`. +(0,p.__)("With %1$s%3$s%2$s, this section will show you which words occur most often in your text. By checking these prominent words against your intended keyword(s), you'll know how to edit your text to be more focused.","wordpress-seo"),"","","Yoast SEO Premium"),{b:(0,i.createElement)("b",null)})),[]),l=(0,n.useSelect)((e=>{var t,s;return null!==(t=null===(s=e("yoast-seo-premium/editor"))||void 0===s?void 0:s.getProminentWords())&&void 0!==t?t:[]}),[]),c=(0,d.useMemo)((()=>{const e=(0,p.sprintf)( +// translators: %1$s expands to Yoast SEO Premium. +(0,p.__)("Get %s to enjoy the benefits of prominent words","wordpress-seo"),"Yoast SEO Premium").split(/\s+/);return e.map(((t,s)=>({name:t,number:e.length-s})))}),[]),u=(0,d.useMemo)((()=>s?c:l.map((({word:e,occurrence:t})=>({name:e,number:t})))),[l,c]);if(!t)return null;const{locationContext:m}=(0,Je.useRootContext)();return(0,i.createElement)("div",{className:"yoast-prominent-words"},(0,i.createElement)("div",{className:"yoast-field-group__title"},(0,i.createElement)("b",null,(0,p.__)("Prominent words","wordpress-seo"))),!s&&(0,i.createElement)("p",null,0===u.length?(0,p.__)("Once you add a bit more copy, we'll give you a list of words that occur the most in the content. These give an indication of what your content focuses on.","wordpress-seo"):(0,p.__)("The following words occur the most in the content. These give an indication of what your content focuses on. If the words differ a lot from your topic, you might want to rewrite your content accordingly.","wordpress-seo")),s&&(0,i.createElement)("p",null,o),s&&(0,i.createElement)(Oa,{href:(0,Tt.addQueryArgs)(a,{context:m}),"data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2",className:"yoast-button yoast-button-upsell"},(0,p.sprintf)( +// translators: %s expands to `Premium` (part of add-on name). +(0,p.__)("Unlock with %s","wordpress-seo"),"Premium"),(0,i.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,i.createElement)("p",null,r),(0,i.createElement)(Aa,{data:u,itemScreenReaderText:/* translators: Hidden accessibility text; %d expands to the number of occurrences. */ +(0,p.__)("%d occurrences","wordpress-seo"),"aria-label":(0,p.__)("Prominent words","wordpress-seo"),className:s?"yoast-data-model--upsell":null}))};Da.propTypes={location:h().string.isRequired};const Ma=Da,Fa=(0,Mt.makeOutboundLink)(),Na=({location:e})=>{const t=(0,d.useMemo)((()=>(0,J.get)(window,`wpseoAdminL10n.shortlinks-insights-upsell-${e}-text_formality`,"")),[e]),s=(0,d.useMemo)((()=>La((0,p.sprintf)( +// Translators: %1$s expands to a starting `b` tag, %2$s expands to a closing `b` tag and %3$s expands to `Yoast SEO Premium`. +(0,p.__)("%1$s%3$s%2$s will help you assess the formality level of your text.","wordpress-seo"),"","","Yoast SEO Premium"),{b:(0,i.createElement)("b",null)})),[]);return(0,i.createElement)(d.Fragment,null,(0,i.createElement)("div",null,(0,i.createElement)("p",null,s),(0,i.createElement)(Fa,{href:t,className:"yoast-button yoast-button-upsell"},(0,p.sprintf)( +// Translators: %s expands to `Premium` (part of add-on name). +(0,p.__)("Unlock with %s","wordpress-seo"),"Premium"),(0,i.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"}))))};Na.propTypes={location:h().string.isRequired};const qa=Na,Ua=({location:e,name:t})=>{const s=(0,n.useSelect)((e=>e("yoast-seo/editor").isFormalitySupported()),[]),a=ne().isPremium,r=a?(0,J.get)(window,"wpseoAdminL10n.shortlinks-insights-text_formality_info_premium",""):(0,J.get)(window,"wpseoAdminL10n.shortlinks-insights-text_formality_info_free",""),o=(0,p.__)("Read more about text formality.","wordpress-seo");return s?(0,i.createElement)("div",{className:"yoast-text-formality"},(0,i.createElement)("div",{className:"yoast-field-group__title"},(0,i.createElement)("b",null,(0,p.__)("Text formality","wordpress-seo")),(0,i.createElement)(At.HelpIcon,{linkTo:r,linkText:o})),a?(0,i.createElement)(c.Slot,{name:t}):(0,i.createElement)(qa,{location:e})):null};Ua.propTypes={location:h().string.isRequired,name:h().string.isRequired};const Ba=Ua,$a=()=>{const e=(0,n.useSelect)((e=>e("yoast-seo/editor").getTextLength()),[]),t=(0,d.useMemo)((()=>(0,J.get)(window,"wpseoAdminL10n.shortlinks-insights-word_count","")),[]);let s=(0,p._n)("word","words",e.count,"wordpress-seo"),a=(0,p.__)("Word count","wordpress-seo"),r=(0,p.__)("Learn more about word count","wordpress-seo");return"character"===e.unit&&(s=(0,p._n)("character","characters",e.count,"wordpress-seo"),a=(0,p.__)("Character count","wordpress-seo"), +/* translators: Hidden accessibility text. */ +r=(0,p.__)("Learn more about character count","wordpress-seo")),(0,i.createElement)(At.InsightsCard,{amount:e.count,unit:s,title:a,linkTo:t,linkText:r})},Wa=Xe()(ua)` + width: 18px; + height: 18px; + margin: 3px; +`,Ka=({location:e})=>{const t=(0,n.useSelect)((e=>e("yoast-seo/editor").getIsElementorEditor()),[]),s=(0,n.useSelect)((e=>e("yoast-seo/editor").isFleschReadingEaseAvailable()),[]),a=ma();return(0,i.createElement)(ya,{title:(0,p.__)("Insights","wordpress-seo"),id:`yoast-insights-modal-${e}`,shouldCloseOnClickOutside:!t,showChangesWarning:!1,SuffixHeroIcon:(0,i.createElement)(Wa,{className:"yst-text-slate-500",...a})},(0,i.createElement)("div",{className:"yoast-insights yoast-modal-content--columns"},(0,i.createElement)(Ma,{location:e}),(0,i.createElement)("div",null,s&&(0,i.createElement)("div",{className:"yoast-insights-row"},(0,i.createElement)(Ea,null)),(0,i.createElement)("div",{className:"yoast-insights-row yoast-insights-row--columns"},(0,i.createElement)(fa,null),(0,i.createElement)($a,null)),(0,de.isFeatureEnabled)("TEXT_FORMALITY")&&(0,i.createElement)(Ba,{location:e,name:"YoastTextFormalityMetabox"}))))};Ka.propTypes={location:h().string},Ka.defaultProps={location:"sidebar"};const Ha=Ka;function Ya(e){return 0===e.message.length?null:(0,i.createElement)(At.Alert,{type:e.type},e.message)}Ya.propTypes={message:h().oneOfType([h().array,h().string]).isRequired,type:h().string.isRequired};const za=(0,n.withSelect)((e=>{const{getWarningMessage:t}=e("yoast-seo/editor");return{message:t(),type:"info"}}))(Ya),ja=({children:e})=>(0,i.createElement)("div",null,e);ja.propTypes={renderPriority:h().number.isRequired,children:h().node.isRequired};const Va=ja,Ga=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{fillRule:"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z",clipRule:"evenodd"}))})),Za=window.yoast.searchMetadataPreviews,Qa=Xe()(At.StyledSection)` + &${At.StyledSectionBase} { + padding: 0; + + & ${At.StyledHeading} { + ${(0,Mt.getDirectionalStyle)("padding-left","padding-right")}: 20px; + margin-left: ${(0,Mt.getDirectionalStyle)("0","20px")}; + } + } +`,Xa=({children:e,title:t,icon:s,hasPaperStyle:a,shoppingData:r})=>(0,i.createElement)(Qa,{headingLevel:3,headingText:t,headingIcon:s,headingIconColor:"#555",hasPaperStyle:a,shoppingData:r},e);Xa.propTypes={children:h().element,title:h().string,icon:h().string,hasPaperStyle:h().bool,shoppingData:h().object},Xa.defaultProps={hasPaperStyle:!0,shoppingData:null};const Ja=Xa;window.wp.sanitize;const{stripHTMLTags:er}=Mt.strings,tr=(0,J.memoize)(((e,t)=>0===e?J.noop:(0,J.debounce)((s=>t(s,e)),500))),sr=({link:e,text:t})=>(0,i.createElement)(u.Root,null,(0,i.createElement)("p",null,t),(0,i.createElement)(u.Button,{href:e,as:"a",className:"yst-gap-2 yst-mb-5 yst-mt-2",variant:"upsell",target:"_blank",rel:"noopener"},(0,i.createElement)(g,{className:"yst-w-4 yst-h-4 yst--ml-1 yst-shrink-0"}),(0,p.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,p.__)("Unlock with %1$s","wordpress-seo"),"Yoast WooCommerce SEO")));sr.propTypes={link:h().string.isRequired,text:h().string.isRequired};const ar=sr,rr=function(e,t){let s=0;return t.shortenedBaseUrl&&"string"==typeof t.shortenedBaseUrl&&(s=t.shortenedBaseUrl.length),e.url=e.url.replace(/\s+/g,"-"),"-"===e.url[e.url.length-1]&&(e.url=e.url.slice(0,-1)),"-"===e.url[s]&&(e.url=e.url.slice(0,s)+e.url.slice(s+1)),function(e){const t=(0,J.get)(window,["YoastSEO","app","pluggable"],!1);if(!t||!(0,J.get)(window,["YoastSEO","app","pluggable","loaded"],!1))return function(e){const t=(0,J.get)(window,["YoastSEO","wp","replaceVarsPlugin","replaceVariables"],J.identity);return{url:e.url,title:er(t(e.title)),description:er(t(e.description)),filteredSEOTitle:e.filteredSEOTitle?er(t(e.filteredSEOTitle)):""}}(e);const s=t._applyModifications.bind(t);return{url:e.url,title:er(s("data_page_title",e.title)),description:er(s("data_meta_desc",e.description)),filteredSEOTitle:e.filteredSEOTitle?er(s("data_page_title",e.filteredSEOTitle)):""}}(e)},nr=(0,xt.compose)([(0,n.withSelect)((function(e){const{getBaseUrlFromSettings:t,getDateFromSettings:s,getFocusKeyphrase:a,getRecommendedReplaceVars:r,getReplaceVars:n,getShoppingData:o,getSiteIconUrlFromSettings:i,getSnippetEditorData:l,getSnippetEditorMode:c,getSnippetEditorPreviewImageUrl:d,getSnippetEditorWordsToHighlight:p,isCornerstoneContent:u,getIsTerm:m,getContentLocale:h,getSiteName:g}=e("yoast-seo/editor"),y=n();return y.forEach((e=>{""!==e.value||["title","excerpt","excerpt_only"].includes(e.name)||(e.value="%%"+e.name+"%%")})),{baseUrl:t(),data:l(),date:s(),faviconSrc:i(),keyword:a(),mobileImageSrc:d(),mode:c(),recommendedReplacementVariables:r(),replacementVariables:y,shoppingData:o(),wordsToHighlight:p(),isCornerstone:u(),isTaxonomy:m(),locale:h(),siteName:g()}})),(0,n.withDispatch)((function(e,t,{select:s}){const{updateData:a,switchMode:r,updateAnalysisData:n,findCustomFields:o}=e("yoast-seo/editor"),i=e("core/editor"),l=s("yoast-seo/editor").getPostId();return{onChange:(e,t)=>{switch(e){case"mode":r(t);break;case"slug":a({slug:t}),i&&i.editPost({slug:t});break;default:a({[e]:t})}},onChangeAnalysisData:n,onReplacementVariableSearchChange:tr(l,o)}}))])((e=>{const t=(0,J.get)(window,"wpseoScriptData.metabox.woocommerceUpsellGooglePreviewLink",""),s=(0,J.get)(window,"wpseoScriptData.woocommerceUpsell",""),a=(0,p.__)("Want an enhanced Google preview of how your WooCommerce products look in the search results?","wordpress-seo");return(0,i.createElement)(Je.LocationConsumer,null,(r=>(0,i.createElement)(Ja,{icon:"eye",hasPaperStyle:e.hasPaperStyle},(0,i.createElement)(i.Fragment,null,s&&(0,i.createElement)(ar,{link:t,text:a}),(0,i.createElement)(Za.SnippetEditor,{...e,descriptionPlaceholder:(0,p.__)("Please provide a meta description by editing the snippet below.","wordpress-seo"),mapEditorDataToPreview:rr,showCloseButton:!1,idSuffix:r})))))})),or={name:"author_first_name",label:"Author first name",placeholder:"%%author_first_name%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.author_first_name","")},regexp:new RegExp("%%author_first_name%%","g")},ir={name:"author_last_name",label:"Author last name",placeholder:"%%author_last_name%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.author_last_name","")},regexp:new RegExp("%%author_last_name%%","g")},lr={name:"currentdate",label:"Current date",placeholder:"%%currentdate%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentdate","")},regexp:new RegExp("%%currentdate%%","g")},cr={name:"currentday",label:"Current day",placeholder:"%%currentday%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentday","")},regexp:new RegExp("%%currentday%%","g")},dr={name:"currentmonth",label:"Current month",placeholder:"%%currentmonth%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentmonth","")},regexp:new RegExp("%%currentmonth%%","g")},pr={name:"category",label:"Category",placeholder:"%%category%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.category","")},regexp:new RegExp("%%category%%","g")},ur={name:"category_title",label:"Category Title",placeholder:"%%category_title%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.category_title","")},regexp:new RegExp("%%category_title%%","g")},mr={name:"currentyear",label:"Current year",placeholder:"%%currentyear%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.currentyear","")},regexp:new RegExp("%%currentyear%%","g")},hr={name:"date",label:"Date",placeholder:"%%date%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.date","")},regexp:new RegExp("%%date%%","g")},gr={name:"excerpt",label:"Excerpt",placeholder:"%%excerpt%%",aliases:[{name:"excerpt_only",label:"Excerpt only",placeholder:"%%excerpt_only%%"}],getReplacement:function(){return(0,n.select)("yoast-seo/editor").getEditorDataExcerptWithFallback()},regexp:new RegExp("%%excerpt%%|%%excerpt_only%%","g")},yr={name:"focuskw",label:"Focus keyphrase",placeholder:"%%focuskw%%",aliases:[],getReplacement:function(){return(0,n.select)("yoast-seo/editor").getFocusKeyphrase()},regexp:new RegExp("%%focuskw%%|%%keyword%%","g")},fr={name:"id",label:"ID",placeholder:"%%id%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.id","")},regexp:new RegExp("%%id%%","g")},wr={name:"modified",label:"Modified",placeholder:"%%modified%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.modified","")},regexp:new RegExp("%%modified%%","g")},br={name:"name",label:"Name",placeholder:"%%name%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.name","")},regexp:new RegExp("%%name%%","g")},Er={name:"page",label:"Page",placeholder:"%%page%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.page","")},regexp:new RegExp("%%page%%","g")},vr={name:"pagenumber",label:"Pagenumber",placeholder:"%%pagenumber%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pagenumber","")},regexp:new RegExp("%%pagenumber%%","g")},_r={name:"pagetotal",label:"Pagetotal",placeholder:"%%pagetotal%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pagetotal","")},regexp:new RegExp("%%pagetotal%%","g")},kr={name:"permalink",label:"Permalink",placeholder:"%%permalink%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.permalink","")},regexp:new RegExp("%%permalink%%","g")},xr={name:"post_content",label:"Post Content",placeholder:"%%post_content%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_content","")},regexp:new RegExp("%%post_content%%","g")},Sr={name:"post_day",label:"Post Day",placeholder:"%%post_day%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_day","")},regexp:new RegExp("%%post_day%%","g")},Tr={name:"post_month",label:"Post Month",placeholder:"%%post_month%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_month","")},regexp:new RegExp("%%post_month%%","g")},Rr={name:"post_year",label:"Post Year",placeholder:"%%post_year%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.post_year","")},regexp:new RegExp("%%post_year%%","g")},Cr={name:"pt_plural",label:"Post type (plural)",placeholder:"%%pt_plural%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pt_plural","")},regexp:new RegExp("%%pt_plural%%","g")},Ir={name:"pt_single",label:"Post type (singular)",placeholder:"%%pt_single%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.pt_single","")},regexp:new RegExp("%%pt_single%%","g")},Lr={name:"primary_category",label:"Primary category",placeholder:"%%primary_category%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.primary_category","")},regexp:new RegExp("%%primary_category%%","g")},Pr={name:"searchphrase",label:"Search phrase",placeholder:"%%searchphrase%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.searchphrase","")},regexp:new RegExp("%%searchphrase%%","g")},Ar={name:"sep",label:"Separator",placeholder:"%%sep%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.sep","")},regexp:new RegExp("%%sep%%(\\s*%%sep%%)*","g")},Or={name:"sitedesc",label:"Tagline",placeholder:"%%sitedesc%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.sitedesc","")},regexp:new RegExp("%%sitedesc%%","g")},Dr={name:"sitename",label:"Site title",placeholder:"%%sitename%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.sitename","")},regexp:new RegExp("%%sitename%%","g")},Mr={name:"tag",label:"Tag",placeholder:"%%tag%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.tag","")},regexp:new RegExp("%%tag%%","g")},Fr={name:"term404",label:"Term404",placeholder:"%%term404%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.term404","")},regexp:new RegExp("%%term404%%","g")},Nr={name:"term_description",label:"Term description",placeholder:"%%term_description%%",aliases:[{name:"tag_description",label:"Tag description",placeholder:"%%tag_description%%"},{name:"category_description",label:"Category description",placeholder:"%%category_description%%"}],getReplacement:function(){return(0,J.get)(window,"YoastSEO.app.rawData.text","")},regexp:new RegExp("%%term_description%%|%%tag_description%%|%%category_description%%","g")},qr={name:"term_hierarchy",label:"Term hierarchy",placeholder:"%%term_hierarchy%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.term_hierarchy","")},regexp:new RegExp("%%term_hierarchy%%","g")},Ur={name:"term_title",label:"Term title",placeholder:"%%term_title%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.term_title","")},regexp:new RegExp("%%term_title%%","g")},Br={name:"title",label:"Title",placeholder:"%%title%%",aliases:[],getReplacement:function(){return(0,n.select)("yoast-seo/editor").getEditorDataTitle()},regexp:new RegExp("%%title%%","g")},$r={name:"user_description",label:"User description",placeholder:"%%user_description%%",aliases:[],getReplacement:function(){return(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.replace_vars.user_description","")},regexp:new RegExp("%%user_description%%","g")};var Wr={source:"wpseoScriptData.analysis.plugins.replaceVars",scope:[],aliases:[]},Kr=function(e,t,s){this.placeholder=e,this.replacement=t,this.options=(0,J.defaults)(s,Wr)};Kr.prototype.getPlaceholder=function(e){return(e=e||!1)&&this.hasAlias()?this.placeholder+"|"+this.getAliases().join("|"):this.placeholder},Kr.prototype.setSource=function(e){this.options.source=e},Kr.prototype.hasScope=function(){return!(0,J.isEmpty)(this.options.scope)},Kr.prototype.addScope=function(e){this.hasScope()||(this.options.scope=[]),this.options.scope.push(e)},Kr.prototype.inScope=function(e){return!this.hasScope()||(0,J.indexOf)(this.options.scope,e)>-1},Kr.prototype.hasAlias=function(){return!(0,J.isEmpty)(this.options.aliases)},Kr.prototype.addAlias=function(e){this.hasAlias()||(this.options.aliases=[]),this.options.aliases.push(e)},Kr.prototype.getAliases=function(){return this.options.aliases};const Hr=Kr,Yr="replaceVariablePlugin";let zr=null,jr=null;const Vr=e=>{["content","title","snippet_title","snippet_meta","primary_category","data_page_title","data_meta_desc","excerpt"].forEach((t=>{ye(t,e,Yr,10)}))},Gr=(e="")=>{switch(""===e&&(e=(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.scope","")),e){case"post":case"page":return["authorFirstName","authorLastName","category","categoryTitle","currentDate","currentDay","currentMonth","currentYear","date","excerpt","id","focusKeyphrase","modified","name","page","primaryCategory","pageNumber","pageTotal","permalink","postContent","postDay","postMonth","postYear","postTypeNamePlural","postTypeNameSingular","searchPhrase","separator","siteDescription","siteName","tag","title","userDescription"]}return[]},Zr=e=>Vr((t=>t.replace(new RegExp(e.placeholder,"g"),e.replacement))),Qr=()=>{if(null===jr){jr=[];const t=(0,J.get)(window,"wpseoScriptData.analysis.plugins.replaceVars.hidden_replace_vars",[]);(null===zr&&(zr=Gr().map((t=>null==e?void 0:e[t])).filter(Boolean)),zr).forEach((e=>{const s=t.includes(e.name);jr.push({name:e.name,label:e.label,value:e.placeholder,hidden:s}),e.aliases.forEach((e=>{jr.push({name:e.name,label:e.label,value:e.placeholder,hidden:s})}))}))}return jr},{stripHTMLTags:Xr}=Mt.strings,Jr=(e,t)=>{const s=(0,n.select)("yoast-seo/editor").getSnippetEditorTemplates();""===e.title&&(e.title=s.title),""===e.description&&(e.description=s.description);let a=0;return t.shortenedBaseUrl&&"string"==typeof t.shortenedBaseUrl&&(a=t.shortenedBaseUrl.length),e.url=e.url.replace(/\s+/g,"-"),"-"===e.url[e.url.length-1]&&(e.url=e.url.slice(0,-1)),"-"===e.url[a]&&(e.url=e.url.slice(0,a)+e.url.slice(a+1)),{url:e.url,title:Xr(we("data_page_title",e.title)),description:Xr(we("data_meta_desc",e.description)),filteredSEOTitle:Xr(we("data_page_title",e.filteredSEOTitle))}},en=({isLoading:e,onLoad:t,location:s,...a})=>((0,d.useEffect)((()=>{setTimeout((()=>{e&&t()}))})),e?null:(0,i.createElement)(Ja,{icon:"eye",hasPaperStyle:a.hasPaperStyle},(0,i.createElement)(Za.SnippetEditor,{...a,descriptionPlaceholder:(0,p.__)("Please provide a meta description by editing the snippet below.","wordpress-seo"),mapEditorDataToPreview:Jr,showCloseButton:!1,idSuffix:s})));en.propTypes={isLoading:h().bool.isRequired,onLoad:h().func.isRequired,hasPaperStyle:h().bool.isRequired,location:h().string.isRequired};const tn=(0,xt.compose)([(0,n.withSelect)((e=>{const{getBaseUrlFromSettings:t,getDateFromSettings:s,getEditorDataImageUrl:a,getFocusKeyphrase:r,getRecommendedReplaceVars:n,getSiteIconUrlFromSettings:o,getSnippetEditorData:i,getSnippetEditorIsLoading:l,getSnippetEditorMode:c,getSnippetEditorWordsToHighlight:d,isCornerstoneContent:p,getContentLocale:u,getSiteName:m}=e("yoast-seo/editor");return{baseUrl:t(),data:i(),date:s(),faviconSrc:o(),isLoading:l(),keyword:r(),mobileImageSrc:a(),mode:c(),recommendedReplacementVariables:n(),replacementVariables:Qr(),wordsToHighlight:d(),isCornerstone:p(),locale:u(),siteName:m()}})),(0,n.withDispatch)((e=>{const{updateData:t,switchMode:s,updateAnalysisData:a,loadSnippetEditorData:r}=e("yoast-seo/editor");return{onChange:(e,a)=>{switch(e){case"mode":s(a);break;case"slug":t({slug:a});break;default:t({[e]:a})}},onChangeAnalysisData:a,onLoad:r}})),es()])(en),sn=Xe()(Ga)` + width: 18px; + height: 18px; + margin: 3px; +`,an=()=>{const e=ma(),t=(0,n.useSelect)((e=>e("yoast-seo/editor").getIsElementorEditor()),[]);return(0,i.createElement)(ya,{title:(0,p.__)("Search appearance","wordpress-seo"),id:"yoast-search-appearance-modal",shouldCloseOnClickOutside:!1,SuffixHeroIcon:(0,i.createElement)(sn,{className:"yst-text-slate-500",...e})},!0===t&&(0,i.createElement)(tn,{showCloseButton:!1,hasPaperStyle:!1}),!1===t&&(0,i.createElement)(nr,{showCloseButton:!1,hasPaperStyle:!1}))},rn=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{d:"M15 8a3 3 0 10-2.977-2.63l-4.94 2.47a3 3 0 100 4.319l4.94 2.47a3 3 0 10.895-1.789l-4.94-2.47a3.027 3.027 0 000-.74l4.94-2.47C13.456 7.68 14.19 8 15 8z"}))})),nn=Xe().p` + color: #606770; + flex-shrink: 0; + font-size: 12px; + line-height: 16px; + overflow: hidden; + padding: 0; + text-overflow: ellipsis; + text-transform: uppercase; + white-space: nowrap; + margin: 0; + position: ${e=>"landscape"===e.mode?"relative":"static"}; +`,on=e=>{const{siteUrl:t}=e;return(0,i.createElement)(i.Fragment,null,(0,i.createElement)("span",{className:"screen-reader-text"},t),(0,i.createElement)(nn,{"aria-hidden":"true"},(0,i.createElement)("span",null,t)))};on.propTypes={siteUrl:h().string.isRequired};const ln=on,cn=window.yoast.socialMetadataForms,dn=window.yoast.styleGuide,pn=Xe().img` + && { + max-width: ${e=>e.width}px; + height: ${e=>e.height}px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + max-width: none; + } +`,un=Xe().img` + &&{ + height: 100%; + position: absolute; + width: 100%; + object-fit: cover; + } +`,mn=Xe().div` + padding-bottom: ${e=>e.aspectRatio}%; +`,hn=e=>{const{imageProps:t,width:s,height:a,imageMode:r}=e;return"landscape"===r?(0,i.createElement)(mn,{aspectRatio:t.aspectRatio},(0,i.createElement)(un,{src:t.src,alt:t.alt})):(0,i.createElement)(pn,{src:t.src,alt:t.alt,width:s,height:a,imageProperties:t})};function gn(e,t,s){return"landscape"===s?{widthRatio:t.width/e.landscapeWidth,heightRatio:t.height/e.landscapeHeight}:"portrait"===s?{widthRatio:t.width/e.portraitWidth,heightRatio:t.height/e.portraitHeight}:{widthRatio:t.width/e.squareWidth,heightRatio:t.height/e.squareHeight}}function yn(e,t){return t.widthRatio<=t.heightRatio?{width:Math.round(e.width/t.widthRatio),height:Math.round(e.height/t.widthRatio)}:{width:Math.round(e.width/t.heightRatio),height:Math.round(e.height/t.heightRatio)}}async function fn(e,t,s=!1){const a=await function(e){return new Promise(((t,s)=>{const a=new Image;a.onload=()=>{t({width:a.width,height:a.height})},a.onerror=s,a.src=e}))}(e);let r=s?"landscape":"square";"Facebook"===t&&(r=(0,cn.determineFacebookImageMode)(a));const n=function(e){return"Twitter"===e?cn.TWITTER_IMAGE_SIZES:cn.FACEBOOK_IMAGE_SIZES}(t),o=function(e,t,s){return"square"===s&&t.width===t.height?{width:e.squareWidth,height:e.squareHeight}:yn(t,gn(e,t,s))}(n,a,r);return{mode:r,height:o.height,width:o.width}}async function wn(e,t,s=!1){try{return{imageProperties:await fn(e,t,s),status:"loaded"}}catch(e){return{imageProperties:null,status:"errored"}}}hn.propTypes={imageProps:h().shape({src:h().string.isRequired,alt:h().string.isRequired,aspectRatio:h().number.isRequired}).isRequired,width:h().number.isRequired,height:h().number.isRequired,imageMode:h().string},hn.defaultProps={imageMode:"landscape"};const bn=Xe().div` + position: relative; + ${e=>"landscape"===e.mode?`max-width: ${e.dimensions.width}`:`min-width: ${e.dimensions.width}; height: ${e.dimensions.height}`}; + overflow: hidden; + background-color: ${dn.colors.$color_white}; +`,En=Xe().div` + box-sizing: border-box; + max-width: ${cn.FACEBOOK_IMAGE_SIZES.landscapeWidth}px; + height: ${cn.FACEBOOK_IMAGE_SIZES.landscapeHeight}px; + background-color: ${dn.colors.$color_grey}; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + display: flex; + justify-content: center; + align-items: center; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class vn extends i.Component{constructor(e){super(e),this.state={imageProperties:null,status:"loading"},this.socialMedium="Facebook",this.handleFacebookImage=this.handleFacebookImage.bind(this),this.setState=this.setState.bind(this)}async handleFacebookImage(){try{const e=await wn(this.props.src,this.socialMedium);this.setState(e),this.props.onImageLoaded(e.imageProperties.mode||"landscape")}catch(e){this.setState(e),this.props.onImageLoaded("landscape")}}componentDidUpdate(e){e.src!==this.props.src&&this.handleFacebookImage()}componentDidMount(){this.handleFacebookImage()}retrieveContainerDimensions(e){switch(e){case"square":return{height:cn.FACEBOOK_IMAGE_SIZES.squareHeight+"px",width:cn.FACEBOOK_IMAGE_SIZES.squareWidth+"px"};case"portrait":return{height:cn.FACEBOOK_IMAGE_SIZES.portraitHeight+"px",width:cn.FACEBOOK_IMAGE_SIZES.portraitWidth+"px"};case"landscape":return{height:cn.FACEBOOK_IMAGE_SIZES.landscapeHeight+"px",width:cn.FACEBOOK_IMAGE_SIZES.landscapeWidth+"px"}}}render(){const{imageProperties:e,status:t}=this.state;if("loading"===t||""===this.props.src||"errored"===t)return(0,i.createElement)(En,{onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,p.__)("Select image","wordpress-seo"));const s=this.retrieveContainerDimensions(e.mode);return(0,i.createElement)(bn,{mode:e.mode,dimensions:s,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave,onClick:this.props.onImageClick},(0,i.createElement)(hn,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:cn.FACEBOOK_IMAGE_SIZES.aspectRatio},width:e.width,height:e.height,imageMode:e.mode}))}}vn.propTypes={src:h().string,alt:h().string,onImageLoaded:h().func,onImageClick:h().func,onMouseEnter:h().func,onMouseLeave:h().func},vn.defaultProps={src:"",alt:"",onImageLoaded:J.noop,onImageClick:J.noop,onMouseEnter:J.noop,onMouseLeave:J.noop};const kn=vn,xn=Xe().span` + line-height: ${20}px; + min-height : ${20}px; + color: #1d2129; + font-weight: 600; + overflow: hidden; + font-size: 16px; + margin: 3px 0 0; + letter-spacing: normal; + white-space: normal; + flex-shrink: 0; + cursor: pointer; + display: -webkit-box; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; +`,Sn=Xe().p` + line-height: ${16}px; + min-height : ${16}px; + color: #606770; + font-size: 14px; + padding: 0; + text-overflow: ellipsis; + margin: 3px 0 0 0; + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: ${e=>e.lineCount}; + -webkit-box-orient: vertical; + overflow: hidden; + + @media all and ( max-width: ${e=>e.maxWidth} ) { + display: none; + } +`,Tn=e=>{switch(e){case"landscape":return"527px";case"square":case"portrait":return"369px";default:return"476px"}},Rn=Xe().div` + box-sizing: border-box; + display: flex; + flex-direction: ${e=>"landscape"===e.mode?"column":"row"}; + background-color: #f2f3f5; + max-width: 527px; +`,Cn=Xe().div` + box-sizing: border-box; + background-color: #f2f3f5; + margin: 0; + padding: 10px 12px; + position: relative; + border-bottom: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-top: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border-right: ${e=>"landscape"===e.mode?"":"1px solid #dddfe2"}; + border: ${e=>"landscape"===e.mode?"1px solid #dddfe2":""}; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: ${e=>"landscape"===e.mode?"flex-start":"center"}; + font-size: 12px; + overflow: hidden; +`;class In extends i.Component{constructor(e){super(e),this.state={imageMode:null,maxLineCount:0,descriptionLineCount:0},this.facebookTitleRef=l().createRef(),this.onImageLoaded=this.onImageLoaded.bind(this),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}onImageLoaded(e){this.setState({imageMode:e})}getTitleLineCount(){return this.facebookTitleRef.current.offsetHeight/20}maybeSetMaxLineCount(){const{imageMode:e,maxLineCount:t}=this.state,s="landscape"===e?2:5;s!==t&&this.setState({maxLineCount:s})}maybeSetDescriptionLineCount(){const{descriptionLineCount:e,maxLineCount:t,imageMode:s}=this.state,a=this.getTitleLineCount();let r=t-a;"portrait"===s&&(r=5===a?0:4),r!==e&&this.setState({descriptionLineCount:r})}componentDidUpdate(){this.maybeSetMaxLineCount(),this.maybeSetDescriptionLineCount()}render(){const{imageMode:e,maxLineCount:t,descriptionLineCount:s}=this.state;return(0,i.createElement)(Rn,{id:"facebookPreview",mode:e},(0,i.createElement)(kn,{src:this.props.imageUrl||this.props.imageFallbackUrl,alt:this.props.alt,onImageLoaded:this.onImageLoaded,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),(0,i.createElement)(Cn,{mode:e},(0,i.createElement)(ln,{siteUrl:this.props.siteUrl,mode:e}),(0,i.createElement)(xn,{ref:this.facebookTitleRef,onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle,lineCount:t},this.props.title),s>0&&(0,i.createElement)(Sn,{maxWidth:Tn(e),onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription,lineCount:s},this.props.description)))}}In.propTypes={siteUrl:h().string.isRequired,title:h().string.isRequired,description:h().string,imageUrl:h().string,imageFallbackUrl:h().string,alt:h().string,onSelect:h().func,onImageClick:h().func,onMouseHover:h().func},In.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{}};const Ln=In,Pn=Xe().div` + text-transform: lowercase; + color: rgb(83, 100, 113); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + fill: currentcolor; + display: flex; + flex-direction: row; + align-items: flex-end; +`,An=e=>(0,i.createElement)(Pn,null,(0,i.createElement)("span",null,e.siteUrl));An.propTypes={siteUrl:h().string.isRequired};const On=An,Dn=(e,t=!0)=>e?`\n\t\t\tmax-width: ${cn.TWITTER_IMAGE_SIZES.landscapeWidth}px;\n\t\t\t${t?"border-bottom: 1px solid #E1E8ED;":""}\n\t\t\tborder-radius: 14px 14px 0 0;\n\t\t\t`:`\n\t\twidth: ${cn.TWITTER_IMAGE_SIZES.squareWidth}px;\n\t\t${t?"border-right: 1px solid #E1E8ED;":""}\n\t\tborder-radius: 14px 0 0 14px;\n\t\t`,Mn=Xe().div` + position: relative; + box-sizing: content-box; + overflow: hidden; + background-color: #e1e8ed; + flex-shrink: 0; + ${e=>Dn(e.isLarge)} +`,Fn=Xe().div` + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + max-width: 100%; + margin: 0; + padding: 1em; + text-align: center; + font-size: 1rem; + ${e=>Dn(e.isLarge,!1)} +`,Nn=Xe()(Fn)` + ${e=>e.isLarge&&`height: ${cn.TWITTER_IMAGE_SIZES.landscapeHeight}px;`} + border-top-left-radius: 14px; + ${e=>e.isLarge?"border-top-right-radius":"border-bottom-left-radius"}: 14px; + border-style: dashed; + border-width: 1px; + // We're not using standard colors to increase contrast for accessibility. + color: #006DAC; + // We're not using standard colors to increase contrast for accessibility. + background-color: #f1f1f1; + text-decoration: underline; + font-size: 14px; + cursor: pointer; +`;class qn extends l().Component{constructor(e){super(e),this.state={status:"loading"},this.socialMedium="Twitter",this.handleTwitterImage=this.handleTwitterImage.bind(this),this.setState=this.setState.bind(this)}async handleTwitterImage(){if(null===this.props.src)return;const e=await wn(this.props.src,this.socialMedium,this.props.isLarge);this.setState(e)}componentDidUpdate(e){e.src!==this.props.src&&this.handleTwitterImage()}componentDidMount(){this.handleTwitterImage()}render(){const{status:e,imageProperties:t}=this.state;return"loading"===e||""===this.props.src||"errored"===e?(0,i.createElement)(Nn,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,p.__)("Select image","wordpress-seo")):(0,i.createElement)(Mn,{isLarge:this.props.isLarge,onClick:this.props.onImageClick,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave},(0,i.createElement)(hn,{imageProps:{src:this.props.src,alt:this.props.alt,aspectRatio:cn.TWITTER_IMAGE_SIZES.aspectRatio},width:t.width,height:t.height,imageMode:t.mode}))}}qn.propTypes={isLarge:h().bool.isRequired,src:h().string,alt:h().string,onImageClick:h().func,onMouseEnter:h().func,onMouseLeave:h().func},qn.defaultProps={src:"",alt:"",onMouseEnter:J.noop,onImageClick:J.noop,onMouseLeave:J.noop};const Un=Xe().div` + display: flex; + flex-direction: column; + padding: 12px; + justify-content: center; + margin: 0; + box-sizing: border-box; + flex: auto; + min-width: 0px; + gap:2px; + > * { + line-height:20px; + min-height:20px; + font-size:15px; + } +`,Bn=e=>(0,i.createElement)(Un,null,e.children);Bn.propTypes={children:h().array.isRequired};const $n=Bn,Wn=Xe().p` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(15, 20, 25); + cursor: pointer; +`,Kn=Xe().p` + max-height: 55px; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + color: rgb(83, 100, 113); + display: -webkit-box; + cursor: pointer; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + + @media all and ( max-width: ${cn.TWITTER_IMAGE_SIZES.landscapeWidth}px ) { + display: none; + } +`,Hn=Xe().div` + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", sans-serif; + font-size: 15px; + font-weight: 400; + line-height: 20px; + max-width: 507px; + border: 1px solid #E1E8ED; + box-sizing: border-box; + border-radius: 14px; + color: #292F33; + background: #FFFFFF; + text-overflow: ellipsis; + display: flex; + + &:hover { + background: #f5f8fa; + border: 1px solid rgba(136,153,166,.5); + } +`,Yn=Xe()(Hn)` + flex-direction: column; + max-height: 370px; +`,zn=Xe()(Hn)` + flex-direction: row; + height: 125px; +`;class jn extends i.Component{constructor(e){super(e),this.onImageEnter=this.props.onMouseHover.bind(this,"image"),this.onTitleEnter=this.props.onMouseHover.bind(this,"title"),this.onDescriptionEnter=this.props.onMouseHover.bind(this,"description"),this.onLeave=this.props.onMouseHover.bind(this,""),this.onSelectTitle=this.props.onSelect.bind(this,"title"),this.onSelectDescription=this.props.onSelect.bind(this,"description")}render(){const{isLarge:e,imageUrl:t,imageFallbackUrl:s,alt:a,title:r,description:n,siteUrl:o}=this.props,l=e?Yn:zn;return(0,i.createElement)(l,{id:"twitterPreview"},(0,i.createElement)(qn,{src:t||s,alt:a,isLarge:e,onImageClick:this.props.onImageClick,onMouseEnter:this.onImageEnter,onMouseLeave:this.onLeave}),(0,i.createElement)($n,null,(0,i.createElement)(On,{siteUrl:o}),(0,i.createElement)(Wn,{onMouseEnter:this.onTitleEnter,onMouseLeave:this.onLeave,onClick:this.onSelectTitle},r),(0,i.createElement)(Kn,{onMouseEnter:this.onDescriptionEnter,onMouseLeave:this.onLeave,onClick:this.onSelectDescription},n)))}}jn.propTypes={siteUrl:h().string.isRequired,title:h().string.isRequired,description:h().string,isLarge:h().bool,imageUrl:h().string,imageFallbackUrl:h().string,alt:h().string,onSelect:h().func,onImageClick:h().func,onMouseHover:h().func},jn.defaultProps={description:"",alt:"",imageUrl:"",imageFallbackUrl:"",onSelect:()=>{},onImageClick:()=>{},onMouseHover:()=>{},isLarge:!0};const Vn=jn,Gn=window.yoast.replacementVariableEditor;class Zn extends i.Component{constructor(e){super(e),this.state={activeField:"",hoveredField:""},this.SocialPreview="Social"===e.socialMediumName?Ln:Vn,this.setHoveredField=this.setHoveredField.bind(this),this.setActiveField=this.setActiveField.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.setEditorFocus=this.setEditorFocus.bind(this)}setHoveredField(e){e!==this.state.hoveredField&&this.setState({hoveredField:e})}setActiveField(e){e!==this.state.activeField&&this.setState({activeField:e},(()=>this.setEditorFocus(e)))}setEditorFocus(e){switch(e){case"title":this.titleEditorRef.focus();break;case"description":this.descriptionEditorRef.focus()}}setEditorRef(e,t){switch(e){case"title":this.titleEditorRef=t;break;case"description":this.descriptionEditorRef=t}}render(){const{onDescriptionChange:e,onTitleChange:t,onSelectImageClick:s,onRemoveImageClick:a,socialMediumName:r,imageWarnings:n,siteUrl:o,description:c,descriptionInputPlaceholder:d,descriptionPreviewFallback:p,imageUrl:u,imageFallbackUrl:m,alt:h,title:g,titleInputPlaceholder:y,titlePreviewFallback:f,replacementVariables:w,recommendedReplacementVariables:b,applyReplacementVariables:E,onReplacementVariableSearchChange:v,isPremium:_,isLarge:k,socialPreviewLabel:x,idSuffix:S,activeMetaTabId:T}=this.props,R=E({title:g||f,description:c||p});return(0,i.createElement)(l().Fragment,null,x&&(0,i.createElement)(At.SimulatedLabel,null,x),(0,i.createElement)(this.SocialPreview,{onMouseHover:this.setHoveredField,onSelect:this.setActiveField,onImageClick:s,siteUrl:o,title:R.title,description:R.description,imageUrl:u,imageFallbackUrl:m,alt:h,isLarge:k,activeMetaTabId:T}),(0,i.createElement)(cn.SocialMetadataPreviewForm,{onDescriptionChange:e,socialMediumName:r,title:g,titleInputPlaceholder:y,onRemoveImageClick:a,imageSelected:!!u,imageUrl:u,onTitleChange:t,onSelectImageClick:s,description:c,descriptionInputPlaceholder:d,imageWarnings:n,replacementVariables:w,recommendedReplacementVariables:b,onReplacementVariableSearchChange:v,onMouseHover:this.setHoveredField,hoveredField:this.state.hoveredField,onSelect:this.setActiveField,activeField:this.state.activeField,isPremium:_,setEditorRef:this.setEditorRef,idSuffix:S}))}}Zn.propTypes={title:h().string.isRequired,onTitleChange:h().func.isRequired,description:h().string.isRequired,onDescriptionChange:h().func.isRequired,imageUrl:h().string.isRequired,imageFallbackUrl:h().string.isRequired,onSelectImageClick:h().func.isRequired,onRemoveImageClick:h().func.isRequired,socialMediumName:h().string.isRequired,alt:h().string,isPremium:h().bool,imageWarnings:h().array,isLarge:h().bool,siteUrl:h().string,descriptionInputPlaceholder:h().string,titleInputPlaceholder:h().string,descriptionPreviewFallback:h().string,titlePreviewFallback:h().string,replacementVariables:Gn.replacementVariablesShape,recommendedReplacementVariables:Gn.recommendedReplacementVariablesShape,applyReplacementVariables:h().func,onReplacementVariableSearchChange:h().func,socialPreviewLabel:h().string,idSuffix:h().string,activeMetaTabId:h().string},Zn.defaultProps={imageWarnings:[],recommendedReplacementVariables:[],replacementVariables:[],isPremium:!1,isLarge:!0,siteUrl:"",descriptionInputPlaceholder:"",titleInputPlaceholder:"",descriptionPreviewFallback:"",titlePreviewFallback:"",alt:"",applyReplacementVariables:e=>e,onReplacementVariableSearchChange:null,socialPreviewLabel:"",idSuffix:"",activeMetaTabId:""};const Qn={},Xn=(e,t,{log:s=console.warn}={})=>{Qn[e]||(Qn[e]=!0,s(t))},Jn=(e,t=J.noop)=>{const s={};for(const a in e)Object.hasOwn(e,a)&&Object.defineProperty(s,a,{set:s=>{e[a]=s,t("set",a,s)},get:()=>(t("get",a),e[a])});return s};Jn({squareWidth:125,squareHeight:125,landscapeWidth:506,landscapeHeight:265,aspectRatio:50.2},((e,t)=>Xn(`@yoast/social-metadata-previews/TWITTER_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "TWITTER_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`))),Jn({squareWidth:158,squareHeight:158,landscapeWidth:527,landscapeHeight:273,portraitWidth:158,portraitHeight:237,aspectRatio:52.2,largeThreshold:{width:446,height:233}},((e,t)=>Xn(`@yoast/social-metadata-previews/FACEBOOK_IMAGE_SIZES/${e}/${t}`,`[@yoast/social-metadata-previews] "FACEBOOK_IMAGE_SIZES.${t}" is deprecated and will be removed in the future, please use this from @yoast/social-metadata-forms instead.`)));const eo=Xe().div` + max-width: calc(527px + 1.5rem); +`,to=e=>{const t="X"===e.socialMediumName?(0,p.__)("X share preview","wordpress-seo"):(0,p.__)("Social share preview","wordpress-seo"),{locationContext:s}=(0,u.useRootContext)();return(0,i.createElement)(u.Root,null,(0,i.createElement)(eo,null,(0,i.createElement)(u.FeatureUpsell,{shouldUpsell:!0,variant:"card",cardLink:(0,Tt.addQueryArgs)(wpseoAdminL10n["shortlinks.upsell.social_preview."+e.socialMediumName.toLowerCase()],{context:s}),cardText:(0,p.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,p.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),"data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2"},(0,i.createElement)("div",{className:"yst-grayscale yst-opacity-50"},(0,i.createElement)(u.Label,null,t),(0,i.createElement)(Ln,{title:"",description:"",siteUrl:"",imageUrl:"",imageFallbackUrl:"",alt:"",onSelect:J.noop,onImageClick:J.noop,onMouseHover:J.noop})))))};to.propTypes={socialMediumName:h().oneOf(["Social","Twitter","X"]).isRequired};const so=to;class ao extends d.Component{constructor(e){super(e),this.state={activeField:"",hoveredField:""},this.setHoveredField=this.setHoveredField.bind(this),this.setActiveField=this.setActiveField.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.setEditorFocus=this.setEditorFocus.bind(this)}setHoveredField(e){e!==this.state.hoveredField&&this.setState({hoveredField:e})}setActiveField(e){e!==this.state.activeField&&this.setState({activeField:e},(()=>this.setEditorFocus(e)))}setEditorFocus(e){switch(e){case"title":this.titleEditorRef.focus();break;case"description":this.descriptionEditorRef.focus()}}setEditorRef(e,t){switch(e){case"title":this.titleEditorRef=t;break;case"description":this.descriptionEditorRef=t}}render(){const{onDescriptionChange:e,onTitleChange:t,onSelectImageClick:s,onRemoveImageClick:a,socialMediumName:r,imageWarnings:n,description:o,descriptionInputPlaceholder:l,imageUrl:c,alt:p,title:u,titleInputPlaceholder:m,replacementVariables:h,recommendedReplacementVariables:g,onReplacementVariableSearchChange:y,isPremium:f,location:w}=this.props;return(0,i.createElement)(d.Fragment,null,(0,i.createElement)(so,{socialMediumName:r}),(0,i.createElement)(cn.SocialMetadataPreviewForm,{onDescriptionChange:e,socialMediumName:r,title:u,titleInputPlaceholder:m,onRemoveImageClick:a,imageSelected:!!c,imageUrl:c,imageAltText:p,onTitleChange:t,onSelectImageClick:s,description:o,descriptionInputPlaceholder:l,imageWarnings:n,replacementVariables:h,recommendedReplacementVariables:g,onReplacementVariableSearchChange:y,onMouseHover:this.setHoveredField,hoveredField:this.state.hoveredField,onSelect:this.setActiveField,activeField:this.state.activeField,isPremium:f,setEditorRef:this.setEditorRef,idSuffix:w}))}}ao.propTypes={title:h().string.isRequired,onTitleChange:h().func.isRequired,description:h().string.isRequired,onDescriptionChange:h().func.isRequired,imageUrl:h().string.isRequired,onSelectImageClick:h().func.isRequired,onRemoveImageClick:h().func.isRequired,socialMediumName:h().string.isRequired,isPremium:h().bool,imageWarnings:h().array,descriptionInputPlaceholder:h().string,titleInputPlaceholder:h().string,replacementVariables:Gn.replacementVariablesShape,recommendedReplacementVariables:Gn.recommendedReplacementVariablesShape,onReplacementVariableSearchChange:h().func,location:h().string,alt:h().string},ao.defaultProps={imageWarnings:[],recommendedReplacementVariables:[],replacementVariables:[],isPremium:!1,descriptionInputPlaceholder:"",titleInputPlaceholder:"",onReplacementVariableSearchChange:null,location:"",alt:""};const ro=ao,no=e=>{const[t,s]=(0,d.useState)(""),a=(0,d.useCallback)((e=>{s(e.detail.metaTabId)}),[s]);(0,d.useEffect)((()=>(setTimeout(e.onLoad),window.addEventListener("YoastSEO:metaTabChange",a),()=>{window.removeEventListener("YoastSEO:metaTabChange",a)})),[]);const r=(0,d.useMemo)((()=>({...e,activeMetaTabId:t})),[e,t]);return e.isPremium?(0,i.createElement)(c.Slot,{name:`YoastFacebookPremium${e.location.charAt(0).toUpperCase()+e.location.slice(1)}`,fillProps:r}):(0,i.createElement)(ro,{...r})};no.propTypes={isPremium:h().bool.isRequired,onLoad:h().func.isRequired,location:h().string.isRequired};const oo=no;function io(e){(function(e){const t=window.wp.media();return t.on("select",(()=>{const s=t.state().get("selection").first();var a;e({type:(a=s.attributes).subtype,width:a.width,height:a.height,url:a.url,id:a.id,sizes:a.sizes,alt:a.alt||a.title||a.name})})),t})(e).open()}const lo=()=>{io((e=>(0,n.dispatch)("yoast-seo/editor").setFacebookPreviewImage((e=>{const{width:t,height:s}=e,a=(0,cn.determineFacebookImageMode)({width:t,height:s}),r=cn.FACEBOOK_IMAGE_SIZES[a+"Width"],n=cn.FACEBOOK_IMAGE_SIZES[a+"Height"],o=Object.values(e.sizes).find((e=>e.width>=r&&e.height>=n));return{url:o?o.url:e.url,id:e.id,warnings:(0,Mt.validateFacebookImage)(e),alt:e.alt||""}})(e))))},co=(0,xt.compose)([(0,n.withSelect)((e=>{const{getFacebookDescription:t,getDescription:s,getFacebookTitle:a,getSeoTitle:r,getFacebookImageUrl:n,getImageFallback:o,getFacebookWarnings:i,getRecommendedReplaceVars:l,getReplaceVars:c,getSiteUrl:d,getSeoTitleTemplate:p,getSeoTitleTemplateNoFallback:u,getSocialTitleTemplate:m,getSeoDescriptionTemplate:h,getSocialDescriptionTemplate:g,getReplacedExcerpt:y,getFacebookAltText:f}=e("yoast-seo/editor");return{imageUrl:n(),imageFallbackUrl:o(),recommendedReplacementVariables:l(),replacementVariables:c(),description:t(),descriptionPreviewFallback:g()||s()||h()||y()||"",title:a(),titlePreviewFallback:m()||r()||u()||p()||"",imageWarnings:i(),siteUrl:d(),isPremium:!!ne().isPremium,titleInputPlaceholder:"",descriptionInputPlaceholder:"",socialMediumName:"Social",alt:f()}})),(0,n.withDispatch)(((e,t,{select:s})=>{const{setFacebookPreviewTitle:a,setFacebookPreviewDescription:r,clearFacebookPreviewImage:n,loadFacebookPreviewData:o,findCustomFields:i}=e("yoast-seo/editor"),l=s("yoast-seo/editor").getPostId();return{onSelectImageClick:lo,onRemoveImageClick:n,onDescriptionChange:r,onTitleChange:a,onLoad:o,onReplacementVariableSearchChange:tr(l,i)}})),es()])(oo),po=e=>((0,d.useEffect)((()=>{setTimeout(e.onLoad)}),[]),e.isPremium?(0,i.createElement)(c.Slot,{name:`YoastTwitterPremium${e.location.charAt(0).toUpperCase()+e.location.slice(1)}`,fillProps:e}):(0,i.createElement)(ro,{...e}));po.propTypes={isPremium:h().bool.isRequired,onLoad:h().func.isRequired,location:h().string.isRequired};const uo=po,mo=()=>{io((e=>(0,n.dispatch)("yoast-seo/editor").setTwitterPreviewImage((e=>{const t="summary"!==(0,J.get)(window,"wpseoScriptData.metabox.twitterCardType")?"landscape":"square",s=cn.TWITTER_IMAGE_SIZES[t+"Width"],a=cn.TWITTER_IMAGE_SIZES[t+"Height"],r=Object.values(e.sizes).find((e=>e.width>=s&&e.height>=a));return{url:r?r.url:e.url,id:e.id,warnings:(0,Mt.validateTwitterImage)(e),alt:e.alt||""}})(e))))},ho=(0,xt.compose)([(0,n.withSelect)((e=>{const{getTwitterDescription:t,getTwitterTitle:s,getTwitterImageUrl:a,getFacebookImageUrl:r,getFacebookTitle:n,getFacebookDescription:o,getDescription:i,getSeoTitle:l,getTwitterWarnings:c,getTwitterImageType:d,getImageFallback:p,getRecommendedReplaceVars:u,getReplaceVars:m,getSiteUrl:h,getSeoTitleTemplate:g,getSeoTitleTemplateNoFallback:y,getSocialTitleTemplate:f,getSeoDescriptionTemplate:w,getSocialDescriptionTemplate:b,getReplacedExcerpt:E,getTwitterAltText:v}=e("yoast-seo/editor");return{imageUrl:a(),imageFallbackUrl:r()||p(),recommendedReplacementVariables:u(),replacementVariables:m(),description:t(),descriptionPreviewFallback:b()||o()||i()||w()||E()||"",title:s(),titlePreviewFallback:f()||n()||l()||y()||g()||"",imageWarnings:c(),siteUrl:h(),isPremium:!!ne().isPremium,isLarge:"summary"!==d(),titleInputPlaceholder:"",descriptionInputPlaceholder:"",socialMediumName:"X",alt:v()}})),(0,n.withDispatch)(((e,t,{select:s})=>{const{setTwitterPreviewTitle:a,setTwitterPreviewDescription:r,clearTwitterPreviewImage:n,loadTwitterPreviewData:o,findCustomFields:i}=e("yoast-seo/editor"),l=s("yoast-seo/editor").getPostId();return{onSelectImageClick:mo,onRemoveImageClick:n,onDescriptionChange:r,onTitleChange:a,onLoad:o,onReplacementVariableSearchChange:tr(l,i)}})),es()])(uo),go=Xe()(At.Collapsible)` + h2 > button { + padding-left: 0; + padding-top: 16px; + + &:hover { + background-color: #f0f0f0; + } + } + + div[class^="collapsible_content"] { + padding: 24px 0; + margin: 0 24px; + border-top: 1px solid rgba(0,0,0,0.2); + } + +`,yo=e=>(0,i.createElement)(go,{hasPadding:!1,hasSeparator:!0,...e}),fo=Xe().legend` + margin: 16px 0; + padding: 0; + color: ${dn.colors.$color_headings}; + font-size: 12px; + font-weight: 300; +`,wo=Xe().legend` + margin: 0 0 16px; + padding: 0; + color: ${dn.colors.$color_headings}; + font-size: 12px; + font-weight: 300; +`,bo=Xe()(rn)` + width: 18px; + height: 18px; + margin: 3px; +`,Eo=e=>{const{useOpenGraphData:t,useTwitterData:s}=e;if(!t&&!s)return;const a=ma();return(0,i.createElement)(ya +/* translators: Social media appearance refers to a preview of how a page will be represented on social media. */,{title:(0,p.__)("Social media appearance","wordpress-seo"),id:"yoast-social-appearance-modal",shouldCloseOnClickOutside:!1,SuffixHeroIcon:(0,i.createElement)(bo,{className:"yst-text-slate-500",...a})},t&&(0,i.createElement)(d.Fragment,null,(0,i.createElement)(wo,null,(0,p.__)("Determine how your post should look on social media like Facebook, X, Instagram, WhatsApp, Threads, LinkedIn, Slack, and more.","wordpress-seo")),(0,i.createElement)(co,null),s&&(0,i.createElement)(fo,null,(0,p.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below. If you leave these settings untouched, the 'Social media appearance' settings mentioned above will also be applied for sharing on X.","wordpress-seo"))),t&&s&&(0,i.createElement)(yo,{title:(0,p.__)("X appearance","wordpress-seo"),hasSeparator:!0,initialIsOpen:!1},(0,i.createElement)(ho,null)),!t&&s&&(0,i.createElement)(d.Fragment,null,(0,i.createElement)(wo,null,(0,p.__)("To customize the appearance of your post specifically for X, please fill out the 'X appearance' settings below.","wordpress-seo")),(0,i.createElement)(ho,null)))};Eo.propTypes={useOpenGraphData:h().bool.isRequired,useTwitterData:h().bool.isRequired};const vo=Eo,_o=(0,p.__)("Check your text on even more SEO criteria and get an enhanced keyphrase analysis, making it easier to optimize your content.","wordpress-seo"),ko=e=>{const{locationContext:t}=(0,Je.useRootContext)(),s=(0,Tt.addQueryArgs)(wpseoAdminL10n[e.buyLink],{context:t});return(0,i.createElement)(zt,{title:(0,p.__)("Get more help with writing content that ranks","wordpress-seo"),description:e.description,benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,p.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Rt(),upsellButtonText:(0,p.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,p.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:s,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,p.__)("1 year of premium support and updates included!","wordpress-seo")})};ko.propTypes={buyLink:h().string.isRequired,description:h().string},ko.defaultProps={description:_o};const xo=ko,So=({location:e})=>{const[t,s]=(0,d.useState)(!1),a=(0,d.useCallback)((()=>s(!1)),[]),r=(0,d.useCallback)((()=>s(!0)),[]),n=(0,u.useSvgAria)();return(0,i.createElement)(d.Fragment,null,t&&(0,i.createElement)(Qt,{title:(0,p.__)("Unlock Premium SEO analysis","wordpress-seo"),onRequestClose:a,additionalClassName:"",className:`${Gt} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,id:"yoast-premium-seo-analysis-modal",shouldCloseOnClickOutside:!0},(0,i.createElement)(Vt,null,(0,i.createElement)(xo,{buyLink:`shortlinks.upsell.${e}.premium_seo_analysis_button`}))),"sidebar"===e&&(0,i.createElement)(Dt,{id:"yoast-premium-seo-analysis-modal-open-button",title:(0,p.__)("Premium SEO analysis","wordpress-seo"),prefixIcon:{icon:"seo-score-none",color:dn.colors.$color_grey},onClick:r},(0,i.createElement)("div",{className:"yst-root"},(0,i.createElement)(u.Badge,{size:"small",variant:"upsell"},(0,i.createElement)(St,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...n})))),"metabox"===e&&(0,i.createElement)("div",{className:"yst-root"},(0,i.createElement)(Pt,{id:"yoast-premium-seo-analysis-metabox-modal-open-button",onClick:r},(0,i.createElement)(At.SvgIcon,{icon:"seo-score-none",color:dn.colors.$color_grey}),(0,i.createElement)(Pt.Text,null,(0,p.__)("Premium SEO analysis","wordpress-seo")),(0,i.createElement)(u.Badge,{size:"small",variant:"upsell"},(0,i.createElement)(St,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...n}),(0,i.createElement)("span",null,"Premium")))))};So.propTypes={location:h().string},So.defaultProps={location:"sidebar"};const To=So,Ro=e=>{const[t,s]=(0,d.useState)(!1),{prefixIcon:a}=e;return(0,i.createElement)("div",{className:"yoast components-panel__body "+(t?"is-opened":"")},(0,i.createElement)("h2",{className:"components-panel__body-title"},(0,i.createElement)("button",{onClick:function(){s(!t)},className:"components-button components-panel__body-toggle",type:"button",id:e.buttonId},(0,i.createElement)("span",{className:"yoast-icon-span",style:{fill:`${a&&a.color||""}`}},a&&(0,i.createElement)(At.SvgIcon,{icon:a.icon,color:a.color,size:a.size})),(0,i.createElement)("span",{className:"yoast-title-container"},(0,i.createElement)("div",{className:"yoast-title"},e.title),(0,i.createElement)("div",{className:"yoast-subtitle"},e.subTitle)),e.hasBetaBadgeLabel&&(0,i.createElement)(At.BetaBadge,null),(0,i.createElement)("span",{className:"yoast-chevron","aria-hidden":"true"}))),t&&e.children)},Co=Ro;Ro.propTypes={title:h().string.isRequired,children:h().oneOfType([h().node,h().arrayOf(h().node)]).isRequired,prefixIcon:h().object,subTitle:h().string,hasBetaBadgeLabel:h().bool,buttonId:h().string},Ro.defaultProps={prefixIcon:null,subTitle:"",hasBetaBadgeLabel:!1,buttonId:null};var Io=s(6746);const Lo=(0,Mt.makeOutboundLink)(),Po=Xe().div` + padding: 16px; +`,Ao="yoast-seo/editor";function Oo({location:e,show:t}){return t?(0,i.createElement)(At.Alert,{type:"info"},(0,p.sprintf)(/* translators: %s Expands to "Yoast News SEO" */ +(0,p.__)("Are you working on a news article? %s helps you optimize your site for Google News.","wordpress-seo"),"Yoast News SEO")+" ",(0,i.createElement)(Lo,{href:window.wpseoAdminL10n[`shortlinks.upsell.${e}.news`]},(0,p.sprintf)(/* translators: %s: Expands to "Yoast News SEO". */ +(0,p.__)("Buy %s now!","wordpress-seo"),"Yoast News SEO"))):null}Oo.propTypes={show:h().bool.isRequired,location:h().string.isRequired};const Do=(e,t,s)=>{const a=(0,n.useSelect)((e=>e(Ao).getIsProduct()),[]),r=(0,n.useSelect)((e=>e(Ao).getIsWooSeoActive()),[]),o=a&&r?{name:(0,p.__)("Item Page","wordpress-seo"),value:"ItemPage"}:e.find((e=>e.value===t));return[{name:(0,p.sprintf)(/* translators: %1$s expands to the plural name of the current post type, %2$s expands to the current site wide default. */ +(0,p.__)("Default for %1$s (%2$s)","wordpress-seo"),s,o?o.name:""),value:""},...e]},Mo=e=>(0,p.sprintf)(/* translators: %1$s expands to the plural name of the current post type, %2$s and %3$s expand to a link to the Settings page */ +(0,p.__)("You can change the default type for %1$s under Content types in the %2$sSettings%3$s.","wordpress-seo"),e,"{{link}}","{{/link}}");h().string.isRequired,h().string.isRequired,h().string.isRequired;const Fo=e=>{const t=Do(e.pageTypeOptions,e.defaultPageType,e.postTypeName),s=Do(e.articleTypeOptions,e.defaultArticleType,e.postTypeName),a=(0,J.get)(window,"wpseoScriptData.metabox.woocommerceUpsellSchemaLink",""),r=(0,J.get)(window,"wpseoScriptData.woocommerceUpsell",""),[o,l]=(0,d.useState)(e.schemaArticleTypeSelected),c=(0,p.__)("Want your products stand out in search results with rich results like price, reviews and more?","wordpress-seo"),u=(0,n.useSelect)((e=>e(Ao).getIsProduct()),[]),m=(0,n.useSelect)((e=>e(Ao).getIsWooSeoActive()),[]),h=(0,n.useSelect)((e=>e(Ao).selectAdminLink("?page=wpseo_page_settings")),[]),g=u&&m,y=(0,d.useCallback)(((e,t)=>{l(t)}),[o]);return(0,d.useEffect)((()=>{y(null,e.schemaArticleTypeSelected)}),[e.schemaArticleTypeSelected]),(0,i.createElement)(d.Fragment,null,(0,i.createElement)(At.FieldGroup,{label:(0,p.__)("What type of page or content is this?","wordpress-seo"),linkTo:e.additionalHelpTextLink +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about page or content types","wordpress-seo")}),r&&(0,i.createElement)(ar,{link:a,text:c}),(0,i.createElement)(At.Select,{id:(0,Mt.join)(["yoast-schema-page-type",e.location]),options:t,label:(0,p.__)("Page type","wordpress-seo"),onChange:e.schemaPageTypeChange,selected:g?"ItemPage":e.schemaPageTypeSelected,disabled:g}),e.showArticleTypeInput&&(0,i.createElement)(At.Select,{id:(0,Mt.join)(["yoast-schema-article-type",e.location]),options:s,label:(0,p.__)("Article type","wordpress-seo"),onChange:e.schemaArticleTypeChange,selected:e.schemaArticleTypeSelected,onOptionFocus:y}),(0,i.createElement)(Oo,{location:e.location,show:!e.isNewsEnabled&&(b=o,E=e.defaultArticleType,"NewsArticle"===b||""===b&&"NewsArticle"===E)}),e.displayFooter&&!g&&(0,i.createElement)("p",null,(f=e.postTypeName,w=h,(0,Io.Z)({mixedString:Mo(f),components:{link:(0,i.createElement)("a",{href:w,target:"_blank",rel:"noreferrer"})}}))),g&&(0,i.createElement)("p",null,(0,p.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,p.__)("You have %1$s activated on your site, automatically setting the Page type for your products to 'Item Page'. As a result, the Page type selection is disabled.","wordpress-seo"),"Yoast WooCommerce SEO")));var f,w,b,E},No=h().arrayOf(h().shape({name:h().string,value:h().string}));Fo.propTypes={schemaPageTypeChange:h().func,schemaPageTypeSelected:h().string,pageTypeOptions:No.isRequired,schemaArticleTypeChange:h().func,schemaArticleTypeSelected:h().string,articleTypeOptions:No.isRequired,showArticleTypeInput:h().bool.isRequired,additionalHelpTextLink:h().string.isRequired,helpTextLink:h().string.isRequired,helpTextTitle:h().string.isRequired,helpTextDescription:h().string.isRequired,postTypeName:h().string.isRequired,displayFooter:h().bool,defaultPageType:h().string.isRequired,defaultArticleType:h().string.isRequired,location:h().string.isRequired,isNewsEnabled:h().bool},Fo.defaultProps={schemaPageTypeChange:()=>{},schemaPageTypeSelected:null,schemaArticleTypeChange:()=>{},schemaArticleTypeSelected:null,displayFooter:!1,isNewsEnabled:!1};const qo=e=>e.isMetabox?(0,d.createPortal)((0,i.createElement)(Po,null,(0,i.createElement)(Fo,{...e})),document.getElementById("wpseo-meta-section-schema")):(0,i.createElement)(Fo,{...e});qo.propTypes={showArticleTypeInput:h().bool,articleTypeLabel:h().string,additionalHelpTextLink:h().string,pageTypeLabel:h().string.isRequired,helpTextLink:h().string.isRequired,helpTextTitle:h().string.isRequired,helpTextDescription:h().string.isRequired,isMetabox:h().bool.isRequired,postTypeName:h().string.isRequired,displayFooter:h().bool,loadSchemaArticleData:h().func.isRequired,loadSchemaPageData:h().func.isRequired,location:h().string.isRequired},qo.defaultProps={showArticleTypeInput:!1,articleTypeLabel:"",additionalHelpTextLink:"",displayFooter:!1};const Uo=qo;class Bo{static get articleTypeInput(){return document.getElementById("yoast_wpseo_schema_article_type")}static get defaultArticleType(){return Bo.articleTypeInput.getAttribute("data-default")}static get articleType(){return Bo.articleTypeInput.value}static set articleType(e){Bo.articleTypeInput.value=e}static get pageTypeInput(){return document.getElementById("yoast_wpseo_schema_page_type")}static get defaultPageType(){return Bo.pageTypeInput.getAttribute("data-default")}static get pageType(){return Bo.pageTypeInput.value}static set pageType(e){Bo.pageTypeInput.value=e}}const $o=e=>{const t=null!==Bo.articleTypeInput;(0,d.useEffect)((()=>{e.loadSchemaPageData(),t&&e.loadSchemaArticleData()}),[]);const{pageTypeOptions:s,articleTypeOptions:a}=window.wpseoScriptData.metabox.schema,r={articleTypeLabel:(0,p.__)("Article type","wordpress-seo"),pageTypeLabel:(0,p.__)("Page type","wordpress-seo"),postTypeName:window.wpseoAdminL10n.postTypeNamePlural,helpTextTitle:(0,p.__)("Yoast SEO automatically describes your pages using schema.org","wordpress-seo"),helpTextDescription:(0,p.__)("This helps search engines understand your website and your content. You can change some of your settings for this page below.","wordpress-seo"),showArticleTypeInput:t,pageTypeOptions:s,articleTypeOptions:a},n={...e,...r,...(o=e.location,"metabox"===o?{helpTextLink:wpseoAdminL10n["shortlinks.metabox.schema.explanation"],additionalHelpTextLink:wpseoAdminL10n["shortlinks.metabox.schema.page_type"],isMetabox:!0}:{helpTextLink:wpseoAdminL10n["shortlinks.sidebar.schema.explanation"],additionalHelpTextLink:wpseoAdminL10n["shortlinks.sidebar.schema.page_type"],isMetabox:!1})};var o;return(0,i.createElement)(Uo,{...n})};$o.propTypes={displayFooter:h().bool.isRequired,schemaPageTypeSelected:h().string.isRequired,schemaArticleTypeSelected:h().string.isRequired,defaultArticleType:h().string.isRequired,defaultPageType:h().string.isRequired,loadSchemaPageData:h().func.isRequired,loadSchemaArticleData:h().func.isRequired,schemaPageTypeChange:h().func.isRequired,schemaArticleTypeChange:h().func.isRequired,location:h().string.isRequired};const Wo=(0,xt.compose)([(0,n.withSelect)((e=>{const{getPreferences:t,getPageType:s,getDefaultPageType:a,getArticleType:r,getDefaultArticleType:n}=e("yoast-seo/editor"),{displaySchemaSettingsFooter:o,isNewsEnabled:i}=t();return{displayFooter:o,isNewsEnabled:i,schemaPageTypeSelected:s(),schemaArticleTypeSelected:r(),defaultArticleType:n(),defaultPageType:a()}})),(0,n.withDispatch)((e=>{const{setPageType:t,setArticleType:s,getSchemaPageData:a,getSchemaArticleData:r}=e("yoast-seo/editor");return{loadSchemaPageData:a,loadSchemaArticleData:r,schemaPageTypeChange:t,schemaArticleTypeChange:s}})),es()])($o),Ko=({noIndex:e,onNoIndexChange:t,editorContext:s,isPrivateBlog:a})=>{const r=(e=>{const t=(0,p.__)("No","wordpress-seo"),s=(0,p.__)("Yes","wordpress-seo"),a=e.noIndex?t:s;return window.wpseoScriptData.isPost?[{name:(0,p.sprintf)(/* translators: the first %s translates to "yes" or "no", the second %s translates to the content type label in plural form */ +(0,p.__)("%s (current default for %s)","wordpress-seo"),a,e.postTypeNamePlural),value:"0"},{name:t,value:"1"},{name:s,value:"2"}]:[{name:(0,p.sprintf)(/* translators: the first %s translates to "yes" or "no", the second %s translates to the content type label in plural form */ +(0,p.__)("%s (current default for %s)","wordpress-seo"),a,e.postTypeNamePlural),value:"default"},{name:s,value:"index"},{name:t,value:"noindex"}]})(s);return(0,i.createElement)(Je.LocationConsumer,null,(s=>(0,i.createElement)(d.Fragment,null,a&&(0,i.createElement)(At.Alert,{type:"warning"},(0,p.__)("Even though you can set the meta robots setting here, the entire site is set to noindex in the sitewide privacy settings, so these settings won't have an effect.","wordpress-seo")),(0,i.createElement)(At.Select,{label:(0,p.__)("Allow search engines to show this content in search results?","wordpress-seo"),onChange:t,id:(0,Mt.join)(["yoast-meta-robots-noindex",s]),options:r,selected:e,linkTo:wpseoAdminL10n["shortlinks.advanced.allow_search_engines"] +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about the no-index setting on our help page.","wordpress-seo")}))))};Ko.propTypes={noIndex:h().string.isRequired,onNoIndexChange:h().func.isRequired,editorContext:h().object.isRequired,isPrivateBlog:h().bool},Ko.defaultProps={isPrivateBlog:!1};const Ho=({noFollow:e,onNoFollowChange:t})=>(0,i.createElement)(Je.LocationConsumer,null,(s=>{const a=(0,Mt.join)(["yoast-meta-robots-nofollow",s]);return(0,i.createElement)(At.RadioButtonGroup,{id:a,options:[{value:"0",label:"Yes"},{value:"1",label:"No"}],label:(0,p.__)("Should search engines follow links on this content?","wordpress-seo"),groupName:a,onChange:t,selected:e,linkTo:wpseoAdminL10n["shortlinks.advanced.follow_links"] +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about the no-follow setting on our help page.","wordpress-seo")})}));Ho.propTypes={noFollow:h().string.isRequired,onNoFollowChange:h().func.isRequired};const Yo=({advanced:e,onAdvancedChange:t})=>(0,i.createElement)(Je.LocationConsumer,null,(s=>{const a=(0,Mt.join)(["yoast-meta-robots-advanced",s]),r=`${a}-input`;return(0,i.createElement)(At.MultiSelect,{label:(0,p.__)("Meta robots advanced","wordpress-seo"),onChange:t,id:a,inputId:r,options:[{name:(0,p.__)("No Image Index","wordpress-seo"),value:"noimageindex"},{name:(0,p.__)("No Archive","wordpress-seo"),value:"noarchive"},{name:(0,p.__)("No Snippet","wordpress-seo"),value:"nosnippet"}],selected:e,linkTo:wpseoAdminL10n["shortlinks.advanced.meta_robots"] +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about advanced meta robots settings on our help page.","wordpress-seo")})}));Yo.propTypes={advanced:h().array.isRequired,onAdvancedChange:h().func.isRequired};const zo=({breadcrumbsTitle:e,onBreadcrumbsTitleChange:t})=>(0,i.createElement)(Je.LocationConsumer,null,(s=>(0,i.createElement)(At.TextInput,{label:(0,p.__)("Breadcrumbs Title","wordpress-seo"),id:(0,Mt.join)(["yoast-breadcrumbs-title",s]),onChange:t,value:e,linkTo:wpseoAdminL10n["shortlinks.advanced.breadcrumbs_title"] +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about the breadcrumbs title setting on our help page.","wordpress-seo")})));zo.propTypes={breadcrumbsTitle:h().string.isRequired,onBreadcrumbsTitleChange:h().func.isRequired};const jo=({canonical:e,onCanonicalChange:t})=>(0,i.createElement)(Je.LocationConsumer,null,(s=>(0,i.createElement)(At.TextInput,{label:(0,p.__)("Canonical URL","wordpress-seo"),id:(0,Mt.join)(["yoast-canonical",s]),onChange:t,value:e,linkTo:"https://yoa.st/canonical-url" +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about canonical URLs on our help page.","wordpress-seo")})));jo.propTypes={canonical:h().string.isRequired,onCanonicalChange:h().func.isRequired};const Vo=e=>{const{noIndex:t,noFollow:s,advanced:a,breadcrumbsTitle:r,canonical:n,onNoIndexChange:o,onNoFollowChange:l,onAdvancedChange:c,onBreadcrumbsTitleChange:p,onCanonicalChange:u,onLoad:m,isLoading:h,editorContext:g,isBreadcrumbsDisabled:y,isPrivateBlog:f}=e;(0,d.useEffect)((()=>{setTimeout((()=>{h&&m()}))}));const w={noIndex:t,onNoIndexChange:o,editorContext:g,isPrivateBlog:f},b={noFollow:s,onNoFollowChange:l},E={advanced:a,onAdvancedChange:c},v={breadcrumbsTitle:r,onBreadcrumbsTitleChange:p},_={canonical:n,onCanonicalChange:u};return h?null:(0,i.createElement)(d.Fragment,null,(0,i.createElement)(Ko,{...w}),g.isPost&&(0,i.createElement)(Ho,{...b}),g.isPost&&(0,i.createElement)(Yo,{...E}),!y&&(0,i.createElement)(zo,{...v}),(0,i.createElement)(jo,{..._}))};Vo.propTypes={noIndex:h().string.isRequired,canonical:h().string.isRequired,onNoIndexChange:h().func.isRequired,onCanonicalChange:h().func.isRequired,onLoad:h().func.isRequired,isLoading:h().bool.isRequired,editorContext:h().object.isRequired,isBreadcrumbsDisabled:h().bool.isRequired,isPrivateBlog:h().bool,advanced:h().array,onAdvancedChange:h().func,noFollow:h().string,onNoFollowChange:h().func,breadcrumbsTitle:h().string,onBreadcrumbsTitleChange:h().func},Vo.defaultProps={advanced:[],onAdvancedChange:()=>{},noFollow:"",onNoFollowChange:()=>{},breadcrumbsTitle:"",onBreadcrumbsTitleChange:()=>{},isPrivateBlog:!1};const Go=Vo,Zo=(0,xt.compose)([(0,n.withSelect)((e=>{const{getNoIndex:t,getNoFollow:s,getAdvanced:a,getBreadcrumbsTitle:r,getCanonical:n,getIsLoading:o,getEditorContext:i,getPreferences:l}=e("yoast-seo/editor"),{isBreadcrumbsDisabled:c,isPrivateBlog:d}=l();return{noIndex:t(),noFollow:s(),advanced:a(),breadcrumbsTitle:r(),canonical:n(),isLoading:o(),editorContext:i(),isBreadcrumbsDisabled:c,isPrivateBlog:d}})),(0,n.withDispatch)((e=>{const{setNoIndex:t,setNoFollow:s,setAdvanced:a,setBreadcrumbsTitle:r,setCanonical:n,loadAdvancedSettingsData:o}=e("yoast-seo/editor");return{onNoIndexChange:t,onNoFollowChange:s,onAdvancedChange:a,onBreadcrumbsTitleChange:r,onCanonicalChange:n,onLoad:o}}))])(Go),Qo=()=>(0,i.createElement)("p",{className:"yoast-related-keyphrases-modal__loading-message"},(0,p.sprintf)(/* translators: %1$s expands to "Yoast SEO", %2$s expands to "Semrush". */ +(0,p.__)("Please wait while %1$s connects to %2$s to get related keyphrases...","wordpress-seo"),"Yoast SEO","Semrush")," ",(0,i.createElement)(At.SvgIcon,{icon:"loading-spinner"})),Xo=(0,Mt.makeOutboundLink)(),Jo=()=>(0,i.createElement)(d.Fragment,null,(0,i.createElement)("p",null,(0,p.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,p.__)("You've reached your request limit for today. Check back tomorrow or upgrade your plan over at %s.","wordpress-seo"),"Semrush")),(0,i.createElement)(Xo,{href:window.wpseoAdminL10n["shortlinks.semrush.prices"],className:"yoast-button-upsell"},(0,p.sprintf)(/* translators: %s : Expands to "Semrush". */ +(0,p.__)("Upgrade your %s plan","wordpress-seo"),"Semrush"),(0,i.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"}))),ei=window.wp.apiFetch;var ti=s.n(ei);const si="yoast-semrush-country-selector",ai=[{value:"us",name:"United States - US"},{value:"uk",name:"United Kingdom - UK"},{value:"ca",name:"Canada - CA"},{value:"ru",name:"Russia - RU"},{value:"de",name:"Germany - DE"},{value:"fr",name:"France - FR"},{value:"es",name:"Spain - ES"},{value:"it",name:"Italy - IT"},{value:"br",name:"Brazil - BR"},{value:"au",name:"Australia - AU"},{value:"ar",name:"Argentina - AR"},{value:"be",name:"Belgium - BE"},{value:"ch",name:"Switzerland - CH"},{value:"dk",name:"Denmark - DK"},{value:"fi",name:"Finland - FI"},{value:"hk",name:"Hong Kong - HK"},{value:"ie",name:"Ireland - IE"},{value:"il",name:"Israel - IL"},{value:"mx",name:"Mexico - MX"},{value:"nl",name:"Netherlands - NL"},{value:"no",name:"Norway - NO"},{value:"pl",name:"Poland - PL"},{value:"se",name:"Sweden - SE"},{value:"sg",name:"Singapore - SG"},{value:"tr",name:"Turkey - TR"},{value:"jp",name:"Japan - JP"},{value:"in",name:"India - IN"},{value:"hu",name:"Hungary - HU"},{value:"af",name:"Afghanistan - AF"},{value:"al",name:"Albania - AL"},{value:"dz",name:"Algeria - DZ"},{value:"ao",name:"Angola - AO"},{value:"am",name:"Armenia - AM"},{value:"at",name:"Austria - AT"},{value:"az",name:"Azerbaijan - AZ"},{value:"bh",name:"Bahrain - BH"},{value:"bd",name:"Bangladesh - BD"},{value:"by",name:"Belarus - BY"},{value:"bz",name:"Belize - BZ"},{value:"bo",name:"Bolivia - BO"},{value:"ba",name:"Bosnia and Herzegovina - BA"},{value:"bw",name:"Botswana - BW"},{value:"bn",name:"Brunei - BN"},{value:"bg",name:"Bulgaria - BG"},{value:"cv",name:"Cabo Verde - CV"},{value:"kh",name:"Cambodia - KH"},{value:"cm",name:"Cameroon - CM"},{value:"cl",name:"Chile - CL"},{value:"co",name:"Colombia - CO"},{value:"cr",name:"Costa Rica - CR"},{value:"hr",name:"Croatia - HR"},{value:"cy",name:"Cyprus - CY"},{value:"cz",name:"Czech Republic - CZ"},{value:"cd",name:"Congo - CD"},{value:"do",name:"Dominican Republic - DO"},{value:"ec",name:"Ecuador - EC"},{value:"eg",name:"Egypt - EG"},{value:"sv",name:"El Salvador - SV"},{value:"ee",name:"Estonia - EE"},{value:"et",name:"Ethiopia - ET"},{value:"ge",name:"Georgia - GE"},{value:"gh",name:"Ghana - GH"},{value:"gr",name:"Greece - GR"},{value:"gt",name:"Guatemala - GT"},{value:"gy",name:"Guyana - GY"},{value:"ht",name:"Haiti - HT"},{value:"hn",name:"Honduras - HN"},{value:"is",name:"Iceland - IS"},{value:"id",name:"Indonesia - ID"},{value:"jm",name:"Jamaica - JM"},{value:"jo",name:"Jordan - JO"},{value:"kz",name:"Kazakhstan - KZ"},{value:"kw",name:"Kuwait - KW"},{value:"lv",name:"Latvia - LV"},{value:"lb",name:"Lebanon - LB"},{value:"lt",name:"Lithuania - LT"},{value:"lu",name:"Luxembourg - LU"},{value:"mg",name:"Madagascar - MG"},{value:"my",name:"Malaysia - MY"},{value:"mt",name:"Malta - MT"},{value:"mu",name:"Mauritius - MU"},{value:"md",name:"Moldova - MD"},{value:"mn",name:"Mongolia - MN"},{value:"me",name:"Montenegro - ME"},{value:"ma",name:"Morocco - MA"},{value:"mz",name:"Mozambique - MZ"},{value:"na",name:"Namibia - NA"},{value:"np",name:"Nepal - NP"},{value:"nz",name:"New Zealand - NZ"},{value:"ni",name:"Nicaragua - NI"},{value:"ng",name:"Nigeria - NG"},{value:"om",name:"Oman - OM"},{value:"py",name:"Paraguay - PY"},{value:"pe",name:"Peru - PE"},{value:"ph",name:"Philippines - PH"},{value:"pt",name:"Portugal - PT"},{value:"ro",name:"Romania - RO"},{value:"sa",name:"Saudi Arabia - SA"},{value:"sn",name:"Senegal - SN"},{value:"rs",name:"Serbia - RS"},{value:"sk",name:"Slovakia - SK"},{value:"si",name:"Slovenia - SI"},{value:"za",name:"South Africa - ZA"},{value:"kr",name:"South Korea - KR"},{value:"lk",name:"Sri Lanka - LK"},{value:"th",name:"Thailand - TH"},{value:"bs",name:"Bahamas - BS"},{value:"tt",name:"Trinidad and Tobago - TT"},{value:"tn",name:"Tunisia - TN"},{value:"ua",name:"Ukraine - UA"},{value:"ae",name:"United Arab Emirates - AE"},{value:"uy",name:"Uruguay - UY"},{value:"ve",name:"Venezuela - VE"},{value:"vn",name:"Vietnam - VN"},{value:"zm",name:"Zambia - ZM"},{value:"zw",name:"Zimbabwe - ZW"},{value:"ly",name:"Libya - LY"}];class ri extends d.Component{constructor(e){super(e),this.relatedKeyphrasesRequest=this.relatedKeyphrasesRequest.bind(this),this.onChangeHandler=this.onChangeHandler.bind(this)}componentDidMount(){this.props.response&&this.props.keyphrase===this.props.lastRequestKeyphrase||this.relatedKeyphrasesRequest()}storeCountryCode(e){ti()({path:"yoast/v1/semrush/country_code",method:"POST",data:{country_code:e}})}async relatedKeyphrasesRequest(){const{keyphrase:e,countryCode:t,newRequest:s}=this.props;s(t,e),this.storeCountryCode(t);const a=await this.doRequest(e,t);200!==a.status?this.handleFailedResponse(a):this.handleSuccessResponse(a)}handleSuccessResponse(e){const{setNoResultsFound:t,setRequestSucceeded:s}=this.props;0!==e.results.rows.length?s(e):t()}handleFailedResponse(e){const{setRequestLimitReached:t,setRequestFailed:s}=this.props;"error"in e&&(e.error.includes("TOTAL LIMIT EXCEEDED")?t():s(e))}async doRequest(e,t){return await ti()({path:(0,Tt.addQueryArgs)("/yoast/v1/semrush/related_keyphrases",{keyphrase:e,country_code:t})})}onChangeHandler(e){this.props.setCountry(e)}render(){return(0,i.createElement)("div",{id:si},(0,i.createElement)(At.SingleSelect,{id:si+"-select",label:(0,p.__)("Show results for:","wordpress-seo"),name:"semrush-country-code",options:ai,selected:this.props.countryCode,onChange:this.onChangeHandler,wrapperClassName:"yoast-field-group yoast-field-group--inline"}),(0,i.createElement)(At.NewButton,{id:si+"-button",variant:"secondary",onClick:this.relatedKeyphrasesRequest},(0,p.__)("Select country","wordpress-seo")))}}ri.propTypes={keyphrase:h().string,countryCode:h().string,response:h().object,lastRequestKeyphrase:h().string,setCountry:h().func.isRequired,newRequest:h().func.isRequired,setNoResultsFound:h().func.isRequired,setRequestSucceeded:h().func.isRequired,setRequestLimitReached:h().func.isRequired,setRequestFailed:h().func.isRequired},ri.defaultProps={keyphrase:"",countryCode:"us",response:{},lastRequestKeyphrase:""};const ni=ri,oi=({data:e,mapChartDataToTableData:t,dataTableCaption:s,dataTableHeaderLabels:a,isDataTableVisuallyHidden:r})=>e.length!==a.length?(0,i.createElement)("p",null,(0,p.__)("The number of headers and header labels don't match.","wordpress-seo")):(0,i.createElement)("div",{className:r?"screen-reader-text":null},(0,i.createElement)("table",null,(0,i.createElement)("caption",null,s),(0,i.createElement)("thead",null,(0,i.createElement)("tr",null,a.map(((e,t)=>(0,i.createElement)("th",{key:t},e))))),(0,i.createElement)("tbody",null,(0,i.createElement)("tr",null,e.map(((e,s)=>(0,i.createElement)("td",{key:s},t(e.y))))))));oi.propTypes={data:h().arrayOf(h().shape({x:h().number,y:h().number})).isRequired,mapChartDataToTableData:h().func,dataTableCaption:h().string.isRequired,dataTableHeaderLabels:h().array.isRequired,isDataTableVisuallyHidden:h().bool},oi.defaultProps={mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const ii=oi,li=({data:e,width:t,height:s,fillColor:a,strokeColor:r,strokeWidth:n,className:o,mapChartDataToTableData:l,dataTableCaption:c,dataTableHeaderLabels:p,isDataTableVisuallyHidden:u})=>{const m=Math.max(1,Math.max(...e.map((e=>e.x)))),h=Math.max(1,Math.max(...e.map((e=>e.y)))),g=s-n,y=e.map((e=>`${e.x/m*t},${g-e.y/h*g+n}`)).join(" "),f=`0,${g+n} `+y+` ${t},${g+n}`;return(0,i.createElement)(d.Fragment,null,(0,i.createElement)("svg",{width:t,height:s,viewBox:`0 0 ${t} ${s}`,className:o,role:"img","aria-hidden":"true",focusable:"false"},(0,i.createElement)("polygon",{fill:a,points:f}),(0,i.createElement)("polyline",{fill:"none",stroke:r,strokeWidth:n,strokeLinejoin:"round",strokeLinecap:"round",points:y})),l&&(0,i.createElement)(ii,{data:e,mapChartDataToTableData:l,dataTableCaption:c,dataTableHeaderLabels:p,isDataTableVisuallyHidden:u}))};li.propTypes={data:h().arrayOf(h().shape({x:h().number,y:h().number})).isRequired,width:h().number.isRequired,height:h().number.isRequired,fillColor:h().string,strokeColor:h().string,strokeWidth:h().number,className:h().string,mapChartDataToTableData:h().func,dataTableCaption:h().string.isRequired,dataTableHeaderLabels:h().array.isRequired,isDataTableVisuallyHidden:h().bool},li.defaultProps={fillColor:null,strokeColor:"#000000",strokeWidth:1,className:"",mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const ci=li,di=(0,Mt.makeOutboundLink)(Xe().a` + display: inline-block; + position: relative; + outline: none; + text-decoration: none; + border-radius: 100%; + width: 24px; + height: 24px; + margin: -4px 0; + vertical-align: middle; + + color: ${dn.colors.$color_help_text}; + + &:hover, + &:focus { + color: ${dn.colors.$color_snippet_focus}; + } + + // Overwrite the default blue active color for links. + &:active { + color: ${dn.colors.$color_help_text}; + } + + &::before { + position: absolute; + top: 0; + left: 0; + padding: 2px; + content: "\f223"; + } +`),pi=(0,Mt.makeOutboundLink)();class ui extends d.Component{constructor(e){super(e),this.transformTrendDataToChartPoints=this.transformTrendDataToChartPoints.bind(this),this.getAreaChartDataTableHeaderLabels=this.getAreaChartDataTableHeaderLabels.bind(this),this.mapAreaChartDataToTableData=this.mapAreaChartDataToTableData.bind(this)}transformTrendDataToChartPoints(e){return e.split(",").map(((e,t)=>({x:t,y:parseFloat(e)})))}getAreaChartDataTableHeaderLabels(){return[(0,p.__)("Twelve months ago","wordpress-seo"),(0,p.__)("Eleven months ago","wordpress-seo"),(0,p.__)("Ten months ago","wordpress-seo"),(0,p.__)("Nine months ago","wordpress-seo"),(0,p.__)("Eight months ago","wordpress-seo"),(0,p.__)("Seven months ago","wordpress-seo"),(0,p.__)("Six months ago","wordpress-seo"),(0,p.__)("Five months ago","wordpress-seo"),(0,p.__)("Four months ago","wordpress-seo"),(0,p.__)("Three months ago","wordpress-seo"),(0,p.__)("Two months ago","wordpress-seo"),(0,p.__)("Last month","wordpress-seo")]}mapAreaChartDataToTableData(e){return Math.round(100*e)}render(){const{keyphrase:e,relatedKeyphrases:t,countryCode:s,data:a,renderAction:r}=this.props,n="https://www.semrush.com/analytics/keywordoverview/?q="+encodeURIComponent(e)+"&db="+encodeURIComponent(s);return a&&!(0,J.isEmpty)(a.results)&&(0,i.createElement)(d.Fragment,null,(0,i.createElement)("table",{className:"yoast yoast-table"},(0,i.createElement)("thead",null,(0,i.createElement)("tr",null,(0,i.createElement)("th",{scope:"col",className:"yoast-table--primary"},(0,p.__)("Related keyphrase","wordpress-seo")),(0,i.createElement)("th",{scope:"col",abbr:(0,p.__)("Volume","wordpress-seo")},(0,p.__)("Volume","wordpress-seo"),(0,i.createElement)(di,{href:window.wpseoAdminL10n["shortlinks.semrush.volume_help"],className:"dashicons"},(0,i.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,p.__)("Learn more about the related keyphrases volume","wordpress-seo")))),(0,i.createElement)("th",{scope:"col",abbr:(0,p.__)("Trend","wordpress-seo")},(0,p.__)("Trend","wordpress-seo"),(0,i.createElement)(di,{href:window.wpseoAdminL10n["shortlinks.semrush.trend_help"],className:"dashicons"},(0,i.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,p.__)("Learn more about the related keyphrases trend","wordpress-seo")))),r&&(0,i.createElement)("td",{className:"yoast-table--nobreak"}))),(0,i.createElement)("tbody",null,a.results.rows.map(((e,s)=>{const a=e[0],n=this.transformTrendDataToChartPoints(e[2]),o=this.getAreaChartDataTableHeaderLabels();return(0,i.createElement)("tr",{key:s},(0,i.createElement)("td",null,a),(0,i.createElement)("td",null,e[1]),(0,i.createElement)("td",{className:"yoast-table--nopadding"},(0,i.createElement)(ci,{width:66,height:24,data:n,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",className:"yoast-related-keyphrases-modal__chart",mapChartDataToTableData:this.mapAreaChartDataToTableData,dataTableCaption:(0,p.__)("Keyphrase volume in the last 12 months on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:o})),r&&(0,i.createElement)("td",{className:"yoast-table--nobreak"},r(a,t)))})))),(0,i.createElement)("p",{style:{marginBottom:0}},(0,i.createElement)(pi,{href:n},(0,p.sprintf)(/* translators: %s expands to Semrush */ +(0,p.__)("Get more insights at %s","wordpress-seo"),"Semrush"))))}}ui.propTypes={data:h().object,keyphrase:h().string,relatedKeyphrases:h().array,countryCode:h().string,renderAction:h().func},ui.defaultProps={data:{},keyphrase:"",relatedKeyphrases:[],countryCode:"us",renderAction:null};const mi=ui,hi=(0,Mt.makeOutboundLink)(),gi=()=>(0,i.createElement)(At.Alert,{type:"info"},(0,p.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,p.__)("You’ll reach more people with multiple keyphrases! Want to quickly add these related keyphrases to the %s analyses for even better content optimization?","wordpress-seo"),"Yoast SEO")+" ",(0,i.createElement)(hi,{href:window.wpseoAdminL10n["shortlinks.semrush.premium_landing_page"]},(0,p.sprintf)(/* translators: %s: Expands to "Yoast SEO Premium". */ +(0,p.__)("Explore %s!","wordpress-seo"),"Yoast SEO Premium"))),yi=()=>(0,i.createElement)(At.Alert,{type:"error"},(0,p.__)("We've encountered a problem trying to get related keyphrases. Please try again later.","wordpress-seo")),fi=()=>(0,i.createElement)(At.Alert,{type:"warning"},(0,p.sprintf)(/* translators: %s: Expands to "Yoast SEO". */ +(0,p.__)("You've reached the maximum amount of 4 related keyphrases. You can change or remove related keyphrases in the %s metabox or sidebar.","wordpress-seo"),"Yoast SEO"));function wi(e){const{response:t,lastRequestKeyphrase:s,keyphrase:a,newRequest:r,setCountry:n,renderAction:o,countryCode:l,requestLimitReached:c,setRequestFailed:u,setNoResultsFound:m,relatedKeyphrases:h,setRequestSucceeded:g,setRequestLimitReached:y}=e,f=ne().isPremium;return(0,i.createElement)(d.Fragment,null,!c&&(0,i.createElement)(d.Fragment,null,!f&&(0,i.createElement)(gi,null),f&&function(e){return e&&e.length>=4}(h)&&(0,i.createElement)(fi,null),(0,i.createElement)(ni,{countryCode:l,setCountry:n,newRequest:r,keyphrase:a,setRequestFailed:u,setNoResultsFound:m,setRequestSucceeded:g,setRequestLimitReached:y,response:t,lastRequestKeyphrase:s})),function(e){const{isPending:t,requestLimitReached:s,isSuccess:a,response:r,requestHasData:n}=e;return t?(0,i.createElement)(Qo,null):s?(0,i.createElement)(Jo,null):!a&&function(e){return!(0,J.isEmpty)(e)&&"error"in e}(r)?(0,i.createElement)(yi,null):n?void 0:(0,i.createElement)("p",null,(0,p.__)("Sorry, there's no data available for that keyphrase/country combination.","wordpress-seo"))}(e),(0,i.createElement)(mi,{keyphrase:a,relatedKeyphrases:h,countryCode:l,renderAction:o,data:t}))}wi.propTypes={keyphrase:h().string,relatedKeyphrases:h().array,renderAction:h().func,requestLimitReached:h().bool,countryCode:h().string.isRequired,setCountry:h().func.isRequired,newRequest:h().func.isRequired,setRequestSucceeded:h().func.isRequired,setRequestLimitReached:h().func.isRequired,setRequestFailed:h().func.isRequired,setNoResultsFound:h().func.isRequired,response:h().object,lastRequestKeyphrase:h().string},wi.defaultProps={keyphrase:"",relatedKeyphrases:[],renderAction:null,requestLimitReached:!1,response:{},lastRequestKeyphrase:""};const bi=(0,xt.compose)([(0,n.withSelect)((e=>{const{getFocusKeyphrase:t,getSEMrushSelectedCountry:s,getSEMrushRequestLimitReached:a,getSEMrushRequestResponse:r,getSEMrushRequestIsSuccess:n,getSEMrushIsRequestPending:o,getSEMrushRequestHasData:i,getSEMrushRequestKeyphrase:l}=e("yoast-seo/editor");return{keyphrase:t(),countryCode:s(),requestLimitReached:a(),response:r(),isSuccess:n(),isPending:o(),requestHasData:i(),lastRequestKeyphrase:l()}})),(0,n.withDispatch)((e=>{const{setSEMrushChangeCountry:t,setSEMrushNewRequest:s,setSEMrushRequestSucceeded:a,setSEMrushRequestFailed:r,setSEMrushSetRequestLimitReached:n,setSEMrushNoResultsFound:o}=e("yoast-seo/editor");return{setCountry:e=>{t(e)},newRequest:(e,t)=>{s(e,t)},setRequestSucceeded:e=>{a(e)},setRequestFailed:e=>{r(e)},setRequestLimitReached:()=>{n()},setNoResultsFound:()=>{o()}}}))])(wi),Ei=i.forwardRef((function(e,t){return i.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),i.createElement("path",{d:"M2 11a1 1 0 011-1h2a1 1 0 011 1v5a1 1 0 01-1 1H3a1 1 0 01-1-1v-5zM8 7a1 1 0 011-1h2a1 1 0 011 1v9a1 1 0 01-1 1H9a1 1 0 01-1-1V7zM14 4a1 1 0 011-1h2a1 1 0 011 1v12a1 1 0 01-1 1h-2a1 1 0 01-1-1V4z"}))}));var vi,_i;function ki(){return ki=Object.assign?Object.assign.bind():function(e){for(var t=1;ti.createElement("svg",ki({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 425 456.27"},e),vi||(vi=i.createElement("path",{d:"M73 405.26a66.79 66.79 0 0 1-6.54-1.7 64.75 64.75 0 0 1-6.28-2.31c-1-.42-2-.89-3-1.37-1.49-.72-3-1.56-4.77-2.56-1.5-.88-2.71-1.64-3.83-2.39-.9-.61-1.8-1.26-2.68-1.92a70.154 70.154 0 0 1-5.08-4.19 69.21 69.21 0 0 1-8.4-9.17c-.92-1.2-1.68-2.25-2.35-3.24a70.747 70.747 0 0 1-3.44-5.64 68.29 68.29 0 0 1-8.29-32.55V142.13a68.26 68.26 0 0 1 8.29-32.55c1-1.92 2.21-3.82 3.44-5.64s2.55-3.58 4-5.27a69.26 69.26 0 0 1 14.49-13.25C50.37 84.19 52.27 83 54.2 82A67.59 67.59 0 0 1 73 75.09a68.75 68.75 0 0 1 13.75-1.39h169.66L263 55.39H86.75A86.84 86.84 0 0 0 0 142.13v196.09A86.84 86.84 0 0 0 86.75 425h11.32v-18.35H86.75A68.75 68.75 0 0 1 73 405.26zM368.55 60.85l-1.41-.53-6.41 17.18 1.41.53a68.06 68.06 0 0 1 8.66 4c1.93 1 3.82 2.2 5.65 3.43A69.19 69.19 0 0 1 391 98.67c1.4 1.68 2.72 3.46 3.95 5.27s2.39 3.72 3.44 5.64a68.29 68.29 0 0 1 8.29 32.55v264.52H233.55l-.44.76c-3.07 5.37-6.26 10.48-9.49 15.19L222 425h203V142.13a87.2 87.2 0 0 0-56.45-81.28z"})),_i||(_i=i.createElement("path",{stroke:"#000",strokeMiterlimit:10,strokeWidth:3.81,d:"M119.8 408.28v46c28.49-1.12 50.73-10.6 69.61-29.58 19.45-19.55 36.17-50 52.61-96L363.94 1.9H305l-98.25 272.89-48.86-153h-54l71.7 184.18a75.67 75.67 0 0 1 0 55.12c-7.3 18.68-20.25 40.66-55.79 47.19z"}))),Si=window.moment;var Ti=s.n(Si);const Ri=(0,Mt.makeOutboundLink)(),Ci=e=>{const t=(0,p.sprintf)(/* translators: %d expands to the amount of allowed keyphrases on a free account, %s expands to a link to Wincher plans. */ +(0,p.__)("You've reached the maximum amount of %d keyphrases you can add to your Wincher account. If you wish to add more keyphrases, please %s.","wordpress-seo"),e.limit,"{{updateWincherPlanLink/}}");return(0,i.createElement)(At.Alert,{type:"error"},(0,Io.Z)({mixedString:t,components:{updateWincherPlanLink:(0,i.createElement)(Ri,{href:wpseoAdminGlobalL10n["links.wincher.pricing"]},(0,p.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,p.__)("upgrade your %s plan","wordpress-seo"),"Wincher"))}}))};Ci.propTypes={limit:h().number},Ci.defaultProps={limit:10};const Ii=Ci,Li=()=>(0,i.createElement)(At.Alert,{type:"error"},(0,p.__)("Something went wrong while tracking the ranking position(s) of your page. Please try again later.","wordpress-seo"));async function Pi(e,t,s,a=200){try{const r=await e();return!!r&&(r.status===a?t(r):s(r))}catch(e){console.error(e.message)}}async function Ai(e){try{return await ti()(e)}catch(e){return e.error&&e.status?e:e instanceof Response&&await e.json()}}async function Oi(e){return(0,J.isArray)(e)||(e=[e]),await Ai({path:"yoast/v1/wincher/keyphrases/track",method:"POST",data:{keyphrases:e}})}const Di=Xe().p` + color: ${dn.colors.$color_pink_dark}; + font-size: 14px; + font-weight: 700; + margin: 13px 0 10px; +`,Mi=Xe()(At.SvgIcon)` + margin-right: 5px; + vertical-align: middle; +`,Fi=Xe().button` + position: absolute; + top: 9px; + right: 9px; + border: none; + background: none; + cursor: pointer; +`,Ni=Xe().p` + font-size: 13px; + font-weight: 500; + margin: 10px 0 13px; +`,qi=Xe().div` + position: relative; + background: ${e=>e.isTitleShortened?"#F5F7F7":"transparent"}; + border: 1px solid #C7C7C7; + border-left: 4px solid${dn.colors.$color_pink_dark}; + padding: 0 16px; + margin-bottom: 1.5em; +`,Ui=e=>{const[t,s]=(0,d.useState)(null);return(0,d.useEffect)((()=>{e&&!t&&async function(){return await Ai({path:"yoast/v1/wincher/account/limit",method:"GET"})}().then((e=>s(e)))}),[t]),t};Ui.propTypes={limit:h().bool.isRequired};const Bi=({limit:e,usage:t,isTitleShortened:s,isFreeAccount:a})=>{const r=(0,p.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,p.__)("Your are tracking %1$s out of %2$s keyphrases included in your free account.","wordpress-seo"),t,e),n=(0,p.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,p.__)("Your are tracking %1$s out of %2$s keyphrases included in your account.","wordpress-seo"),t,e),o=a?r:n,l=(0,p.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,p.__)("Keyphrases tracked: %1$s/%2$s","wordpress-seo"),t,e),c=s?l:o;return(0,i.createElement)(Di,null,s&&(0,i.createElement)(Mi,{icon:"exclamation-triangle",color:dn.colors.$color_pink_dark,size:"14px"}),c)};Bi.propTypes={limit:h().number.isRequired,usage:h().number.isRequired,isTitleShortened:h().bool,isFreeAccount:h().bool};const $i=(0,Mt.makeOutboundLink)(),Wi=({discount:e,months:t})=>{const s=(0,i.createElement)($i,{href:wpseoAdminGlobalL10n["links.wincher.upgrade"],style:{fontWeight:600}},(0,p.sprintf)(/* Translators: %s : Expands to "Wincher". */ +(0,p.__)("Click here to upgrade your %s plan","wordpress-seo"),"Wincher"));if(!e||!t)return(0,i.createElement)(Ni,null,s);const a=100*e,r=(0,p.sprintf)( +/* Translators: %1$s expands to upgrade account link. + * %2$s expands to the upgrade discount value. + * %3$s expands to the upgrade discount duration e.g. 2 months. + */ +(0,p.__)("%1$s and get an exclusive %2$s discount for %3$s month(s).","wordpress-seo"),"{{wincherAccountUpgradeLink/}}",a+"%",t);return(0,i.createElement)(Ni,null,(0,Io.Z)({mixedString:r,components:{wincherAccountUpgradeLink:s}}))};Wi.propTypes={discount:h().number,months:h().number};const Ki=({onClose:e,isTitleShortened:t,trackingInfo:s})=>{const a=(()=>{const[e,t]=(0,d.useState)(null);return(0,d.useEffect)((()=>{e||async function(){return await Ai({path:"yoast/v1/wincher/account/upgrade-campaign",method:"GET"})}().then((e=>t(e)))}),[e]),e})();if(null===s)return null;const{limit:r,usage:n}=s;if(!(r&&n/r>=.8))return null;const o=Boolean(null==a?void 0:a.discount);return(0,i.createElement)(qi,{isTitleShortened:t},e&&(0,i.createElement)(Fi,{type:"button","aria-label":(0,p.__)("Close the upgrade callout","wordpress-seo"),onClick:e},(0,i.createElement)(At.SvgIcon,{icon:"times-circle",color:dn.colors.$color_pink_dark,size:"14px"})),(0,i.createElement)(Bi,{...s,isTitleShortened:t,isFreeAccount:o}),(0,i.createElement)(Wi,{discount:null==a?void 0:a.discount,months:null==a?void 0:a.months}))};Ki.propTypes={onClose:h().func,isTitleShortened:h().bool,trackingInfo:h().object};const Hi=Ki,Yi=()=>(0,i.createElement)(At.Alert,{type:"success"},(0,p.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,p.__)("You have successfully connected to %s! You can now track the SEO performance for the keyphrase(s) of this page.","wordpress-seo"),"Wincher")),zi=()=>(0,i.createElement)(At.Alert,{type:"info"},(0,p.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,p.__)("%s is currently tracking the ranking position(s) of your page. This may take a few minutes. Please wait or check back later.","wordpress-seo"),"Wincher")),ji=()=>(0,i.createElement)("p",{className:"yoast-wincher-seo-performance-modal__loading-message"},(0,p.__)("Tracking the ranking position...","wordpress-seo")," ",(0,i.createElement)(At.SvgIcon,{icon:"loading-spinner"})),Vi=Xe()(At.SvgIcon)` + margin-left: 2px; + flex-shrink: 0; + rotate: ${e=>e.isImproving?"-90deg":"90deg"}; +`,Gi=Xe().span` + color: ${e=>e.isImproving?"#69AB56":"#DC3332"}; + font-size: 13px; + font-weight: 600; + line-height: 20px; + margin-right: 2px; + margin-left: 12px; +`,Zi=Xe().td` + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,Qi=Xe().td` + padding-left: 2px !important; +`,Xi=Xe().td.attrs({className:"yoast-table--nopadding"})` + & > div { + justify-content: center; + } +`,Ji=Xe().div` + display: flex; + align-items: center; + & > a { + box-sizing: border-box; + } +`,el=Xe().button` + background: none; + color: inherit; + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; + display: flex; + align-items: center; +`,tl=Xe().tr` + background-color: ${e=>e.isEnabled?"#FFFFFF":"#F9F9F9"} !important; +`;function sl(e){return Math.round(100*e)}function al({chartData:e}){if((0,J.isEmpty)(e)||(0,J.isEmpty)(e.position))return"?";const t=function(e){return Array.from({length:e.position.history.length},((e,t)=>t+1)).map((e=>(0,p.sprintf)((0,p._n)("%d day","%d days",e,"wordpress-seo"),e)))}(e),s=e.position.history.map(((e,t)=>({x:t,y:101-e.value})));return(0,i.createElement)(ci,{width:66,height:24,data:s,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",mapChartDataToTableData:sl,dataTableCaption:(0,p.__)("Keyphrase position in the last 90 days on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:t})}al.propTypes={chartData:h().object},al.defaultProps={chartData:{}};const rl=({rowData:e})=>{var t;if(null==e||null===(t=e.position)||void 0===t||!t.change)return(0,i.createElement)(al,{chartData:e});const s=e.position.change<0;return(0,i.createElement)(d.Fragment,null,(0,i.createElement)(al,{chartData:e}),(0,i.createElement)(Gi,{isImproving:s},Math.abs(e.position.change)),(0,i.createElement)(Vi,{icon:"caret-right",color:s?"#69AB56":"#DC3332",size:"14px",isImproving:s}))};function nl(e){var t;const{keyphrase:s,rowData:a,onTrackKeyphrase:r,onUntrackKeyphrase:n,isFocusKeyphrase:o,isDisabled:l,isLoading:c,isSelected:u,onSelectKeyphrases:m}=e,h=!(0,J.isEmpty)(a),g=!(0,J.isEmpty)(null==a||null===(t=a.position)||void 0===t?void 0:t.history),y=(0,d.useCallback)((()=>{l||(h?n(s,a.id):r(s))}),[s,r,n,h,a,l]),f=(0,d.useCallback)((()=>{m((e=>u?e.filter((e=>e!==s)):e.concat(s)))}),[m,u,s]);return(0,i.createElement)(tl,{isEnabled:h},(0,i.createElement)(Zi,null,g&&(0,i.createElement)(At.Checkbox,{id:"select-"+s,onChange:f,checked:u,label:""})),(0,i.createElement)(Qi,null,s,o&&(0,i.createElement)("span",null,"*")),function(e){const{rowData:t,websiteId:s,keyphrase:a,onSelectKeyphrases:r}=e,n=(0,d.useCallback)((()=>{r([a])}),[r,a]),o=!(0,J.isEmpty)(t),l=t&&t.updated_at&&Ti()(t.updated_at)>=Ti()().subtract(7,"days"),c=t?(0,p.sprintf)("https://app.wincher.com/websites/%s/keywords?serp=%s&utm_medium=plugin&utm_source=yoast&referer=yoast&partner=yoast",s,t.id):null;return o?l?(0,i.createElement)(d.Fragment,null,(0,i.createElement)("td",null,(0,i.createElement)(Ji,null,function(e){return!e||!e.position||e.position.value>100?"> 100":e.position.value}(t),(0,i.createElement)(At.ButtonStyledLink,{variant:"secondary",href:c,style:{height:28,marginLeft:12},rel:"noopener",target:"_blank"},(0,p.__)("View","wordpress-seo")))),(0,i.createElement)("td",{className:"yoast-table--nopadding"},(0,i.createElement)(el,{type:"button",onClick:n},(0,i.createElement)(rl,{rowData:t}))),(0,i.createElement)("td",null,(u=t.updated_at,Ti()(u).fromNow()))):(0,i.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,i.createElement)(ji,null)):(0,i.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,i.createElement)("i",null,(0,p.__)("Activate tracking to show the ranking position","wordpress-seo")));var u}(e),(0,i.createElement)(Xi,null,function({keyphrase:e,isEnabled:t,toggleAction:s,isLoading:a}){return a?(0,i.createElement)(At.SvgIcon,{icon:"loading-spinner"}):(0,i.createElement)(At.Toggle,{id:`toggle-keyphrase-tracking-${e}`,className:"wincher-toggle",isEnabled:t,onSetToggleState:s,showToggleStateLabel:!1})}({keyphrase:s,isEnabled:h,toggleAction:y,isLoading:c})))}rl.propTypes={rowData:h().object},nl.propTypes={rowData:h().object,keyphrase:h().string.isRequired,onTrackKeyphrase:h().func,onUntrackKeyphrase:h().func,isFocusKeyphrase:h().bool,isDisabled:h().bool,isLoading:h().bool,websiteId:h().string,isSelected:h().bool.isRequired,onSelectKeyphrases:h().func.isRequired},nl.defaultProps={rowData:{},onTrackKeyphrase:()=>{},onUntrackKeyphrase:()=>{},isFocusKeyphrase:!1,isDisabled:!1,isLoading:!1,websiteId:""};const ol=(0,Mt.makeOutboundLink)(),il=Xe().span` + display: block; + font-style: italic; + + @media (min-width: 782px) { + display: inline; + position: absolute; + ${(0,Mt.getDirectionalStyle)("right","left")}: 8px; + } +`,ll=Xe().div` + width: 100%; + overflow-y: auto; +`,cl=Xe().th` + pointer-events: ${e=>e.isDisabled?"none":"initial"}; + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,dl=Xe().th` + padding-left: 2px !important; +`,pl=e=>{const t=(0,d.useRef)();return(0,d.useEffect)((()=>{t.current=e})),t.current},ul=(0,J.debounce)((async function(e=null,t=null,s=null,a){return await Ai({path:"yoast/v1/wincher/keyphrases",method:"POST",data:{keyphrases:e,permalink:s,startAt:t},signal:a})}),500,{leading:!0}),ml=e=>{const{addTrackedKeyphrase:t,isLoggedIn:s,keyphrases:a,permalink:r,removeTrackedKeyphrase:n,setKeyphraseLimitReached:o,setRequestFailed:l,setRequestSucceeded:c,setTrackedKeyphrases:u,setHasTrackedAll:m,trackAll:h,trackedKeyphrases:g,isNewlyAuthenticated:y,websiteId:f,focusKeyphrase:w,newRequest:b,startAt:E,selectedKeyphrases:v,onSelectKeyphrases:_}=e,k=(0,d.useRef)(),x=(0,d.useRef)(),S=(0,d.useRef)(!1),[T,R]=(0,d.useState)([]),C=(0,d.useCallback)((e=>{const t=e.toLowerCase();return g&&!(0,J.isEmpty)(g)&&g.hasOwnProperty(t)?g[t]:null}),[g]),I=(0,d.useMemo)((()=>async()=>{await Pi((()=>(x.current&&x.current.abort(),x.current="undefined"==typeof AbortController?null:new AbortController,ul(a,E,r,x.current.signal))),(e=>{c(e),u(e.results)}),(e=>{l(e)}))}),[c,l,u,a,r,E]),L=(0,d.useCallback)((async e=>{const s=(Array.isArray(e)?e:[e]).map((e=>e.toLowerCase()));R((e=>[...e,...s])),await Pi((()=>Oi(s)),(e=>{c(e),t(e.results),I()}),(e=>{400===e.status&&e.limit&&o(e.limit),l(e)}),201),R((e=>(0,J.without)(e,...s)))}),[c,l,o,t,I]),P=(0,d.useCallback)((async(e,t)=>{e=e.toLowerCase(),R((t=>[...t,e])),await Pi((()=>async function(e){return await Ai({path:"yoast/v1/wincher/keyphrases/untrack",method:"DELETE",data:{keyphraseID:e}})}(t)),(t=>{c(t),n(e)}),(e=>{l(e)})),R((t=>(0,J.without)(t,e)))}),[c,n,l]),A=(0,d.useCallback)((async e=>{b(),await L(e)}),[b,L]),O=pl(r),D=pl(a),M=pl(E),F=r&&E;(0,d.useEffect)((()=>{s&&F&&(r!==O||(0,J.difference)(a,D).length||E!==M)&&I()}),[s,r,O,a,D,I,F,E,M]),(0,d.useEffect)((()=>{if(s&&h&&null!==g){const e=a.filter((e=>!C(e)));e.length&&L(e),m()}}),[s,h,g,L,m,C,a]),(0,d.useEffect)((()=>{y&&!S.current&&(I(),S.current=!0)}),[y,I]),(0,d.useEffect)((()=>{if(s&&!(0,J.isEmpty)(g))return(0,J.filter)(g,(e=>(0,J.isEmpty)(e.updated_at))).length>0&&(k.current=setInterval((()=>{I()}),1e4)),()=>{clearInterval(k.current)}}),[s,g,I]);const N=s&&null===g,q=(0,d.useMemo)((()=>(0,J.isEmpty)(g)?[]:Object.values(g).filter((e=>{var t;return!(0,J.isEmpty)(null==e||null===(t=e.position)||void 0===t?void 0:t.history)})).map((e=>e.keyword))),[g]),U=(0,d.useMemo)((()=>v.length>0&&q.length>0&&q.every((e=>v.includes(e)))),[v,q]),B=(0,d.useCallback)((()=>{_(U?[]:q)}),[_,U,q]),$=(0,d.useMemo)((()=>(0,J.orderBy)(a,[e=>Object.values(g||{}).map((e=>e.keyword)).includes(e)],["desc"])),[a,g]);return a&&!(0,J.isEmpty)(a)&&(0,i.createElement)(d.Fragment,null,(0,i.createElement)(ll,null,(0,i.createElement)("table",{className:"yoast yoast-table"},(0,i.createElement)("thead",null,(0,i.createElement)("tr",null,(0,i.createElement)(cl,{isDisabled:0===q.length},(0,i.createElement)(At.Checkbox,{id:"select-all",onChange:B,checked:U,label:""})),(0,i.createElement)(dl,{scope:"col",abbr:(0,p.__)("Keyphrase","wordpress-seo")},(0,p.__)("Keyphrase","wordpress-seo")),(0,i.createElement)("th",{scope:"col",abbr:(0,p.__)("Position","wordpress-seo")},(0,p.__)("Position","wordpress-seo")),(0,i.createElement)("th",{scope:"col",abbr:(0,p.__)("Position over time","wordpress-seo")},(0,p.__)("Position over time","wordpress-seo")),(0,i.createElement)("th",{scope:"col",abbr:(0,p.__)("Last updated","wordpress-seo")},(0,p.__)("Last updated","wordpress-seo")),(0,i.createElement)("th",{scope:"col",abbr:(0,p.__)("Tracking","wordpress-seo")},(0,p.__)("Tracking","wordpress-seo")))),(0,i.createElement)("tbody",null,$.map(((e,t)=>(0,i.createElement)(nl,{key:`trackable-keyphrase-${t}`,keyphrase:e,onTrackKeyphrase:A,onUntrackKeyphrase:P,rowData:C(e),isFocusKeyphrase:e===w.trim().toLowerCase(),websiteId:f,isDisabled:!s,isLoading:N||T.indexOf(e.toLowerCase())>=0,isSelected:v.includes(e),onSelectKeyphrases:_})))))),(0,i.createElement)("p",{style:{marginBottom:0,position:"relative"}},(0,i.createElement)(ol,{href:wpseoAdminGlobalL10n["links.wincher.login"]},(0,p.sprintf)(/* translators: %s expands to Wincher */ +(0,p.__)("Get more insights over at %s","wordpress-seo"),"Wincher")),(0,i.createElement)(il,null,(0,p.__)("* focus keyphrase","wordpress-seo"))))};ml.propTypes={addTrackedKeyphrase:h().func.isRequired,isLoggedIn:h().bool,isNewlyAuthenticated:h().bool,keyphrases:h().array,newRequest:h().func.isRequired,removeTrackedKeyphrase:h().func.isRequired,setRequestFailed:h().func.isRequired,setKeyphraseLimitReached:h().func.isRequired,setRequestSucceeded:h().func.isRequired,setTrackedKeyphrases:h().func.isRequired,setHasTrackedAll:h().func.isRequired,trackAll:h().bool,trackedKeyphrases:h().object,websiteId:h().string,permalink:h().string.isRequired,focusKeyphrase:h().string,startAt:h().string,selectedKeyphrases:h().arrayOf(h().string).isRequired,onSelectKeyphrases:h().func.isRequired},ml.defaultProps={isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],trackAll:!1,websiteId:"",focusKeyphrase:""};const hl=ml,gl=(0,xt.compose)([(0,n.withSelect)((e=>{const{getWincherWebsiteId:t,getWincherTrackableKeyphrases:s,getWincherLoginStatus:a,getWincherPermalink:r,getFocusKeyphrase:n,isWincherNewlyAuthenticated:o,shouldWincherTrackAll:i}=e("yoast-seo/editor");return{focusKeyphrase:n(),keyphrases:s(),isLoggedIn:a(),trackAll:i(),websiteId:t(),isNewlyAuthenticated:o(),permalink:r()}})),(0,n.withDispatch)((e=>{const{setWincherNewRequest:t,setWincherRequestSucceeded:s,setWincherRequestFailed:a,setWincherSetKeyphraseLimitReached:r,setWincherTrackedKeyphrases:n,setWincherTrackingForKeyphrase:o,setWincherTrackAllKeyphrases:i,unsetWincherTrackingForKeyphrase:l}=e("yoast-seo/editor");return{newRequest:()=>{t()},setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{a(e)},setKeyphraseLimitReached:e=>{r(e)},addTrackedKeyphrase:e=>{o(e)},removeTrackedKeyphrase:e=>{l(e)},setTrackedKeyphrases:e=>{n(e)},setHasTrackedAll:()=>{i(!1)}}}))])(hl),yl=(0,Mt.makeOutboundLink)(),fl=(0,Mt.makeOutboundLink)(),wl=()=>{const e=(0,p.sprintf)((0,p.__)(/* translators: %1$s expands to a link to Wincher, %2$s expands to a link to the keyphrase tracking article on Yoast.com */ +"With %1$s you can track the ranking position of your page in the search results based on your keyphrase(s). %2$s","wordpress-seo"),"{{wincherLink/}}","{{wincherReadMoreLink/}}");return(0,i.createElement)("p",null,(0,Io.Z)({mixedString:e,components:{wincherLink:(0,i.createElement)(yl,{href:wpseoAdminGlobalL10n["links.wincher.website"]},"Wincher"),wincherReadMoreLink:(0,i.createElement)(fl,{href:wpseoAdminL10n["shortlinks.wincher.seo_performance"]},(0,p.__)("Read more about keyphrase tracking with Wincher","wordpress-seo"))}}))},bl=()=>(0,i.createElement)(At.Alert,{type:"error"},(0,p.__)("No keyphrase has been set. Please set a keyphrase first.","wordpress-seo")),El=()=>(0,i.createElement)(At.Alert,{type:"info"},(0,p.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,p.__)("Automatic tracking of keyphrases is enabled. Your keyphrase(s) will automatically be tracked by %s when you publish your post.","wordpress-seo"),"Wincher"));class vl{constructor(e,t={},s={}){this.url=e,this.origin=new URL(e).origin,this.eventHandlers=Object.assign({success:{type:"",callback:()=>{}},error:{type:"",callback:()=>{}}},t),this.options=Object.assign({height:570,width:340,title:""},s),this.popup=null,this.createPopup=this.createPopup.bind(this),this.messageHandler=this.messageHandler.bind(this),this.getPopup=this.getPopup.bind(this)}createPopup(){const{height:e,width:t,title:s}=this.options,a=["top="+(window.top.outerHeight/2+window.top.screenY-e/2),"left="+(window.top.outerWidth/2+window.top.screenX-t/2),"width="+t,"height="+e,"resizable=1","scrollbars=1","status=0"];this.popup&&!this.popup.closed||(this.popup=window.open(this.url,s,a.join(","))),this.popup&&this.popup.focus(),window.addEventListener("message",this.messageHandler,!1)}async messageHandler(e){const{data:t,source:s,origin:a}=e;a===this.origin&&this.popup===s&&(t.type===this.eventHandlers.success.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.success.callback(t)),t.type===this.eventHandlers.error.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.error.callback(t)))}getPopup(){return this.popup}isClosed(){return!this.popup||this.popup.closed}focus(){this.isClosed()||this.popup.focus()}}const _l=e=>{const t=(0,p.sprintf)(/* translators: %s expands to a link to open the Wincher login popup. */ +(0,p.__)("It seems like something went wrong when retrieving your website's data. Please %s and try again.","wordpress-seo"),"{{reconnectToWincher/}}","Wincher");return(0,i.createElement)(At.Alert,{type:"error",className:e.className},(0,Io.Z)({mixedString:t,components:{reconnectToWincher:(0,i.createElement)("a",{href:"#",onClick:t=>{t.preventDefault(),e.onReconnect()}},(0,p.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,p.__)("reconnect to %s","wordpress-seo"),"Wincher"))}}))};_l.propTypes={onReconnect:h().func.isRequired,className:h().string},_l.defaultProps={className:""};const kl=_l,xl=()=>(0,i.createElement)(At.Alert,{type:"error"},(0,p.__)("Before you can track your SEO performance make sure to set either the post’s title and save it as a draft or manually set the post’s slug.","wordpress-seo")),Sl=window.yoast["chart.js"],Tl="label";function Rl(e,t){"function"==typeof e?e(t):e&&(e.current=t)}function Cl(e,t){e.labels=t}function Il(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Tl;const a=[];e.datasets=t.map((t=>{const r=e.datasets.find((e=>e[s]===t[s]));return r&&t.data&&!a.includes(r)?(a.push(r),Object.assign(r,t),r):{...t}}))}function Ll(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Tl;const s={labels:[],datasets:[]};return Cl(s,e.labels),Il(s,e.datasets,t),s}function Pl(e,t){const{height:s=150,width:a=300,redraw:r=!1,datasetIdKey:n,type:o,data:l,options:c,plugins:d=[],fallbackContent:p,updateMode:u,...m}=e,h=(0,i.useRef)(null),g=(0,i.useRef)(),y=()=>{h.current&&(g.current=new Sl.Chart(h.current,{type:o,data:Ll(l,n),options:c&&{...c},plugins:d}),Rl(t,g.current))},f=()=>{Rl(t,null),g.current&&(g.current.destroy(),g.current=null)};return(0,i.useEffect)((()=>{!r&&g.current&&c&&function(e,t){const s=e.options;s&&t&&Object.assign(s,t)}(g.current,c)}),[r,c]),(0,i.useEffect)((()=>{!r&&g.current&&Cl(g.current.config.data,l.labels)}),[r,l.labels]),(0,i.useEffect)((()=>{!r&&g.current&&l.datasets&&Il(g.current.config.data,l.datasets,n)}),[r,l.datasets]),(0,i.useEffect)((()=>{g.current&&(r?(f(),setTimeout(y)):g.current.update(u))}),[r,c,l.labels,l.datasets,u]),(0,i.useEffect)((()=>{g.current&&(f(),setTimeout(y))}),[o]),(0,i.useEffect)((()=>(y(),()=>f())),[]),i.createElement("canvas",Object.assign({ref:h,role:"img",height:s,width:a},m),p)}const Al=(0,i.forwardRef)(Pl);function Ol(e,t){return Sl.Chart.register(t),(0,i.forwardRef)(((t,s)=>i.createElement(Al,Object.assign({},t,{ref:s,type:e}))))}const Dl=Ol("line",Sl.LineController),Ml={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Sl._adapters._date.override("function"==typeof Ti()?{_id:"moment",formats:function(){return Ml},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=Ti()(e,t):e instanceof Ti()||(e=Ti()(e)),e.isValid()?e.valueOf():null},format:function(e,t){return Ti()(e).format(t)},add:function(e,t,s){return Ti()(e).add(t,s).valueOf()},diff:function(e,t,s){return Ti()(e).diff(Ti()(t),s)},startOf:function(e,t,s){return e=Ti()(e),"isoWeek"===t?(s=Math.trunc(Math.min(Math.max(0,s),6)),e.isoWeekday(s).startOf("day").valueOf()):e.startOf(t).valueOf()},endOf:function(e,t){return Ti()(e).endOf(t).valueOf()}}:{}),Math.PI,Number.POSITIVE_INFINITY,Math.log10,Math.sign,"undefined"==typeof window||window.requestAnimationFrame,new Map,Object.create(null),Object.create(null),Number.EPSILON;const Fl=["top","right","bottom","left"];function Nl(e,t,s){const a={};s=s?"-"+s:"";for(let r=0;r<4;r++){const n=Fl[r];a[n]=parseFloat(e[t+"-"+n+s])||0}return a.width=a.left+a.right,a.height=a.top+a.bottom,a}!function(){let e=!1;try{const t={get passive(){return e=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}}(),Sl.Chart.register(Sl.CategoryScale,Sl.LineController,Sl.LineElement,Sl.PointElement,Sl.LinearScale,Sl.TimeScale,Sl.Legend,Sl.Tooltip);const ql=["#ff983b","#ffa3f7","#3798ff","#ff3b3b","#acce81","#b51751","#3949ab","#26c6da","#ccb800","#de66ff","#4db6ac","#ffab91","#45f5f1","#77f210","#90a4ae","#ffd54f","#006b5e","#8ec7d2","#b1887c","#cc9300"];function Ul({datasets:e,isChartShown:t,keyphrases:s}){if(!t)return null;const a=(0,d.useMemo)((()=>Object.fromEntries([...s].sort().map(((e,t)=>[e,ql[t%ql.length]])))),[s]),r=e.map((e=>{const t=a[e.label];return{...e,data:e.data.map((({datetime:e,value:t})=>({x:e,y:t}))),lineTension:0,pointRadius:1,pointHoverRadius:4,borderWidth:2,pointHitRadius:6,backgroundColor:t,borderColor:t}})).filter((e=>!1!==e.selected));return(0,i.createElement)(Dl,{height:100,data:{datasets:r},options:{plugins:{legend:{display:!0,position:"bottom",labels:{color:"black",usePointStyle:!0,boxHeight:7,boxWidth:7},onClick:J.noop},tooltip:{enabled:!0,callbacks:{title:e=>Ti()(e[0].raw.x).utc().format("YYYY-MM-DD")},titleAlign:"center",mode:"xPoint",position:"nearest",usePointStyle:!0,boxHeight:7,boxWidth:7,boxPadding:2}},scales:{x:{bounds:"ticks",type:"time",time:{unit:"day",minUnit:"day"},grid:{display:!1},ticks:{autoSkipPadding:50,maxRotation:0,color:"black"}},y:{bounds:"ticks",offset:!0,reverse:!0,ticks:{precision:0,color:"black"},max:101}}}})}Sl.Interaction.modes.xPoint=(e,t,s,a)=>{const r=function(e,t){if("native"in e)return e;const{canvas:s,currentDevicePixelRatio:a}=t,r=(m=s).ownerDocument.defaultView.getComputedStyle(m,null),n="border-box"===r.boxSizing,o=Nl(r,"padding"),i=Nl(r,"border","width"),{x:l,y:c,box:d}=function(e,t){const s=e.touches,a=s&&s.length?s[0]:e,{offsetX:r,offsetY:n}=a;let o,i,l=!1;if(((e,t,s)=>(e>0||t>0)&&(!s||!s.shadowRoot))(r,n,e.target))o=r,i=n;else{const e=t.getBoundingClientRect();o=a.clientX-e.left,i=a.clientY-e.top,l=!0}return{x:o,y:i,box:l}}(e,s),p=o.left+(d&&i.left),u=o.top+(d&&i.top);var m;let{width:h,height:g}=t;return n&&(h-=o.width+i.width,g-=o.height+i.height),{x:Math.round((l-p)/h*s.width/a),y:Math.round((c-u)/g*s.height/a)}}(t,e);let n=[];if(Sl.Interaction.evaluateInteractionItems(e,"x",r,((e,t,s)=>{e.inXRange(r.x,a)&&n.push({element:e,datasetIndex:t,index:s})})),0===n.length)return n;const o=n.reduce(((e,t)=>Math.abs(r.x-e.element.x)e.element.x===o)),n.some((e=>Math.abs(e.element.y-r.y)<10))?n:[]},Ul.propTypes={datasets:h().arrayOf(h().shape({label:h().string.isRequired,data:h().arrayOf(h().shape({datetime:h().string.isRequired,value:h().number.isRequired})).isRequired,selected:h().bool})).isRequired,isChartShown:h().bool.isRequired,keyphrases:h().array.isRequired};const Bl=({response:e,onLogin:t})=>[401,403,404].includes(e.status)?(0,i.createElement)(kl,{onReconnect:t}):(0,i.createElement)(Li,null);Bl.propTypes={response:h().object.isRequired,onLogin:h().func.isRequired};const $l=({isSuccess:e,response:t,allKeyphrasesMissRanking:s,onLogin:a,keyphraseLimitReached:r,limit:n})=>r?(0,i.createElement)(Ii,{limit:n}):(0,J.isEmpty)(t)||e?s?(0,i.createElement)(zi,null):null:(0,i.createElement)(Bl,{response:t,onLogin:a});$l.propTypes={isSuccess:h().bool.isRequired,allKeyphrasesMissRanking:h().bool.isRequired,response:h().object,onLogin:h().func.isRequired,keyphraseLimitReached:h().bool.isRequired,limit:h().number.isRequired},$l.defaultProps={response:{}};let Wl=null;const Kl=async e=>{if(Wl&&!Wl.isClosed())return void Wl.focus();const{url:t}=await async function(){return await Ai({path:"yoast/v1/wincher/authorization-url",method:"GET"})}();Wl=new vl(t,{success:{type:"wincher:oauth:success",callback:t=>(async(e,t)=>{const{onAuthentication:s,setRequestSucceeded:a,setRequestFailed:r,keyphrases:n,addTrackedKeyphrase:o,setKeyphraseLimitReached:i}=e;await Pi((()=>async function(e){const{code:t,websiteId:s}=e;return await Ai({path:"yoast/v1/wincher/authenticate",method:"POST",data:{code:t,websiteId:s}})}(t)),(async e=>{s(!0,!0,t.websiteId.toString()),a(e);const l=(Array.isArray(n)?n:[n]).map((e=>e.toLowerCase()));await Pi((()=>Oi(l)),(e=>{a(e),o(e.results)}),(e=>{400===e.status&&e.limit&&i(e.limit),r(e)}),201);const c=Wl.getPopup();c&&c.close()}),(async e=>r(e)))})(e,t)},error:{type:"wincher:oauth:error",callback:()=>e.onAuthentication(!1,!1)}},{title:"Wincher_login",width:500,height:700}),Wl.createPopup()},Hl=e=>e.isLoggedIn?null:(0,i.createElement)("p",null,(0,i.createElement)(At.NewButton,{onClick:e.onLogin,variant:"primary"},(0,p.sprintf)(/* translators: %s expands to Wincher */ +(0,p.__)("Connect with %s","wordpress-seo"),"Wincher")));Hl.propTypes={isLoggedIn:h().bool.isRequired,onLogin:h().func.isRequired};const Yl=Xe().div` + p { + margin: 1em 0; + } +`,zl=Xe().div` + ${e=>e.isDisabled&&"\n\t\topacity: .5;\n\t\tpointer-events: none;\n\t"}; +`,jl=Xe().div` + font-weight: var(--yoast-font-weight-bold); + color: var(--yoast-color-label); + font-size: var(--yoast-font-size-default); +`,Vl=Xe().div.attrs({className:"yoast-field-group"})` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 14px; +`,Gl=Xe().div` + margin: 8px 0; +`,Zl=Ti().utc().startOf("day"),Ql=[{name:(0,p.__)("Last day","wordpress-seo"),value:Ti()(Zl).subtract(1,"days").format(),defaultIndex:1},{name:(0,p.__)("Last week","wordpress-seo"),value:Ti()(Zl).subtract(1,"week").format(),defaultIndex:2},{name:(0,p.__)("Last month","wordpress-seo"),value:Ti()(Zl).subtract(1,"month").format(),defaultIndex:3},{name:(0,p.__)("Last year","wordpress-seo"),value:Ti()(Zl).subtract(1,"year").format(),defaultIndex:0}],Xl=e=>{const{onSelect:t,selected:s,options:a,isLoggedIn:r}=e;return r?a.length<1?null:(0,i.createElement)("select",{className:"components-select-control__input",id:"wincher-period-picker",value:(null==s?void 0:s.value)||a[0].value,onChange:t},a.map((e=>(0,i.createElement)("option",{key:e.name,value:e.value},e.name)))):null};Xl.propTypes={onSelect:h().func.isRequired,selected:h().object,options:h().array.isRequired,isLoggedIn:h().bool.isRequired};const Jl=e=>{const{trackedKeyphrases:t,isLoggedIn:s,keyphrases:a,shouldTrackAll:r,permalink:n,historyDaysLimit:o}=e;if(!n&&s)return(0,i.createElement)(xl,null);if(0===a.length)return(0,i.createElement)(bl,null);const l=Ti()(Zl).subtract(o,"days"),c=Ql.filter((e=>Ti()(e.value).isSameOrAfter(l))),u=(0,J.orderBy)(c,(e=>e.defaultIndex),"desc")[0],[m,h]=(0,d.useState)(u),[g,y]=(0,d.useState)([]),f=g.length>0,w=(0,xt.usePrevious)(t);(0,d.useEffect)((()=>{if(!(0,J.isEmpty)(t)&&(0,J.difference)(Object.keys(t),Object.keys(w||[])).length){const e=Object.values(t).map((e=>e.keyword));y(e)}}),[t,w]),(0,d.useEffect)((()=>{h(u)}),[null==u?void 0:u.name]);const b=(0,d.useCallback)((e=>{const t=Ql.find((t=>t.value===e.target.value));t&&h(t)}),[h]),E=(0,d.useMemo)((()=>(0,J.isEmpty)(g)||(0,J.isEmpty)(t)?[]:Object.values(t).filter((e=>{var t;return!(null==e||null===(t=e.position)||void 0===t||!t.history)})).map((e=>{var t;return{label:e.keyword,data:e.position.history,selected:g.includes(e.keyword)&&!(0,J.isEmpty)(null===(t=e.position)||void 0===t?void 0:t.history)}}))),[g,t]);return(0,i.createElement)(zl,{isDisabled:!s},(0,i.createElement)("p",null,(0,p.__)("You can enable / disable tracking the SEO performance for each keyphrase below.","wordpress-seo")),s&&r&&(0,i.createElement)(El,null),(0,i.createElement)(Vl,null,(0,i.createElement)(Xl,{selected:m,onSelect:b,options:c,isLoggedIn:s})),(0,i.createElement)(Gl,null,(0,i.createElement)(Ul,{isChartShown:f,datasets:E,keyphrases:a})),(0,i.createElement)(gl,{startAt:null==m?void 0:m.value,selectedKeyphrases:g,onSelectKeyphrases:y,trackedKeyphrases:t}))};function ec(e){const{isNewlyAuthenticated:t,isLoggedIn:s}=e,a=(0,d.useCallback)((()=>{Kl(e)}),[Kl,e]),r=Ui(s);return(0,i.createElement)(Yl,null,t&&(0,i.createElement)(Yi,null),s&&(0,i.createElement)(Hi,{trackingInfo:r}),(0,i.createElement)(jl,null,(0,p.__)("SEO performance","wordpress-seo"),(0,i.createElement)(At.HelpIcon,{linkTo:wpseoAdminL10n["shortlinks.wincher.seo_performance"] +/* translators: Hidden accessibility text. */,linkText:(0,p.__)("Learn more about the SEO performance feature.","wordpress-seo")})),(0,i.createElement)(wl,null),(0,i.createElement)(Hl,{isLoggedIn:s,onLogin:a}),(0,i.createElement)($l,{...e,onLogin:a}),(0,i.createElement)(Jl,{...e,historyDaysLimit:(null==r?void 0:r.historyDays)||31}))}Jl.propTypes={trackedKeyphrases:h().object,keyphrases:h().array.isRequired,isLoggedIn:h().bool.isRequired,shouldTrackAll:h().bool.isRequired,permalink:h().string.isRequired,historyDaysLimit:h().number},ec.propTypes={trackedKeyphrases:h().object,addTrackedKeyphrase:h().func.isRequired,isLoggedIn:h().bool,isNewlyAuthenticated:h().bool,keyphrases:h().array,response:h().object,shouldTrackAll:h().bool,permalink:h().string,historyDaysLimit:h().number},ec.defaultProps={trackedKeyphrases:null,isLoggedIn:!1,isNewlyAuthenticated:!1,keyphrases:[],response:{},shouldTrackAll:!1,permalink:"",historyDaysLimit:0};const tc=(0,xt.compose)([(0,n.withSelect)((e=>{const{isWincherNewlyAuthenticated:t,getWincherKeyphraseLimitReached:s,getWincherLimit:a,getWincherHistoryDaysLimit:r,getWincherLoginStatus:n,getWincherRequestIsSuccess:o,getWincherRequestResponse:i,getWincherTrackableKeyphrases:l,getWincherTrackedKeyphrases:c,getWincherAllKeyphrasesMissRanking:d,getWincherPermalink:p,shouldWincherAutomaticallyTrackAll:u}=e("yoast-seo/editor");return{keyphrases:l(),trackedKeyphrases:c(),allKeyphrasesMissRanking:d(),isLoggedIn:n(),isNewlyAuthenticated:t(),isSuccess:o(),keyphraseLimitReached:s(),limit:a(),response:i(),shouldTrackAll:u(),permalink:p(),historyDaysLimit:r()}})),(0,n.withDispatch)((e=>{const{setWincherWebsiteId:t,setWincherRequestSucceeded:s,setWincherRequestFailed:a,setWincherTrackingForKeyphrase:r,setWincherSetKeyphraseLimitReached:n,setWincherLoginStatus:o}=e("yoast-seo/editor");return{setRequestSucceeded:e=>{s(e)},setRequestFailed:e=>{a(e)},addTrackedKeyphrase:e=>{r(e)},setKeyphraseLimitReached:e=>{n(e)},onAuthentication:(e,s,a)=>{t(a),o(e,s)}}}))])(ec),sc=Xe()(Ei)` + width: 18px; + height: 18px; + margin: 3px; +`;function ac(e){const{keyphrases:t,onNoKeyphraseSet:s,onOpen:a,location:r}=e;if(!t.length){let e=document.querySelector("#focus-keyword-input-metabox");return e||(e=document.querySelector("#focus-keyword-input-sidebar")),e.focus(),void s()}a(r)}function rc(e){const{location:t,whichModalOpen:s,shouldCloseOnClickOutside:a}=e,r=(0,d.useCallback)((()=>{ac(e)}),[ac,e]),n=(0,p.__)("Track SEO performance","wordpress-seo"),o=ma();return(0,i.createElement)(d.Fragment,null,s===t&&(0,i.createElement)(Qt,{title:n,onRequestClose:e.onClose,icon:(0,i.createElement)(xi,null),additionalClassName:"yoast-wincher-seo-performance-modal yoast-gutenberg-modal__no-padding",shouldCloseOnClickOutside:a},(0,i.createElement)(jt,{className:"yoast-gutenberg-modal__content yoast-wincher-seo-performance-modal__content"},(0,i.createElement)(tc,null))),"sidebar"===t&&(0,i.createElement)(Dt,{id:`wincher-open-button-${t}`,title:n,SuffixHeroIcon:(0,i.createElement)(sc,{className:"yst-text-slate-500",...o}),onClick:r}),"metabox"===t&&(0,i.createElement)("div",{className:"yst-root"},(0,i.createElement)(Pt,{id:`wincher-open-button-${t}`,onClick:r},(0,i.createElement)(Pt.Text,null,n),(0,i.createElement)(Ei,{className:"yst-h-5 yst-w-5 yst-text-slate-500",...o}))))}rc.propTypes={location:h().string,whichModalOpen:h().oneOf(["none","metabox","sidebar","postpublish"]),shouldCloseOnClickOutside:h().bool,keyphrases:h().array.isRequired,onNoKeyphraseSet:h().func.isRequired,onOpen:h().func.isRequired,onClose:h().func.isRequired},rc.defaultProps={location:"",whichModalOpen:"none",shouldCloseOnClickOutside:!0};const nc=(0,xt.compose)([(0,n.withSelect)((e=>{const{getWincherModalOpen:t,getWincherTrackableKeyphrases:s}=e("yoast-seo/editor");return{keyphrases:s(),whichModalOpen:t()}})),(0,n.withDispatch)((e=>{const{setWincherOpenModal:t,setWincherDismissModal:s,setWincherNoKeyphrase:a}=e("yoast-seo/editor");return{onOpen:e=>{t(e)},onClose:()=>{s()},onNoKeyphraseSet:()=>{a()}}}))])(rc),oc=e=>(0,i.createElement)(zt,{title:(0,p.__)("Reach a wider audience","wordpress-seo"),description:(0,p.__)("Get help optimizing for up to 5 related keyphrases. This helps you reach a wider audience and get more traffic.","wordpress-seo"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,p.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:Rt(),upsellButtonText:(0,p.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,p.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:e.buyLink,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,p.__)("1 year free support and updates included!","wordpress-seo")});oc.propTypes={buyLink:h().string.isRequired};const ic=oc,lc=()=>{const[e,,,t,s]=(0,u.useToggleState)(!1),a=(0,d.useContext)(Je.LocationContext),{locationContext:r}=(0,Je.useRootContext)(),n=(0,u.useSvgAria)(),o=wpseoAdminL10n["sidebar"===a.toLowerCase()?"shortlinks.upsell.sidebar.additional_button":"shortlinks.upsell.metabox.additional_button"];return(0,i.createElement)(i.Fragment,null,e&&(0,i.createElement)(Qt,{title:(0,p.__)("Add related keyphrases","wordpress-seo"),onRequestClose:s,additionalClassName:"",id:"yoast-additional-keyphrases-modal",className:`${Gt} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,shouldCloseOnClickOutside:!0},(0,i.createElement)(Vt,null,(0,i.createElement)(ic,{buyLink:(0,Tt.addQueryArgs)(o,{context:r})}))),"sidebar"===a&&(0,i.createElement)(Dt,{id:"yoast-additional-keyphrase-modal-open-button",title:(0,p.__)("Add related keyphrase","wordpress-seo"),prefixIcon:{icon:"plus",color:dn.colors.$color_grey_medium_dark},onClick:t},(0,i.createElement)("div",{className:"yst-root"},(0,i.createElement)(u.Badge,{size:"small",variant:"upsell"},(0,i.createElement)(St,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",...n})))),"metabox"===a&&(0,i.createElement)("div",{className:"yst-root"},(0,i.createElement)(Pt,{id:"yoast-additional-keyphrase-metabox-modal-open-button",onClick:t},(0,i.createElement)(At.SvgIcon,{icon:"plus",color:dn.colors.$color_grey_medium_dark}),(0,i.createElement)(Pt.Text,null,(0,p.__)("Add related keyphrase","wordpress-seo")),(0,i.createElement)(u.Badge,{size:"small",variant:"upsell"},(0,i.createElement)(St,{className:"yst-w-2.5 yst-h-2.5 yst-mr-1 yst-shrink-0",...n}),(0,i.createElement)("span",null,"Premium")))))};function cc({isLoading:e,onLoad:t,settings:s}){const a=(({webinarIntroUrl:e})=>{const{shouldShow:t}=ds(),s=(e=>{for(const t of e)if(null!=t&&t.getIsEligible())return t;return null})([{getIsEligible:()=>t,component:us},{getIsEligible:pa,component:()=>(0,i.createElement)(ca,{hasIcon:!1,image:null,url:e})},{getIsEligible:da,component:()=>(0,i.createElement)(is,{hasIcon:!1})},{getIsEligible:()=>!0,component:()=>(0,i.createElement)(os,{hasIcon:!1})}]);return(null==s?void 0:s.component)||null})({webinarIntroUrl:(0,J.get)(window,"wpseoScriptData.webinarIntroElementorUrl","https://yoa.st/webinar-intro-elementor")});return(0,d.useEffect)((()=>{setTimeout((()=>{e&&t()}))})),e?null:(0,i.createElement)(d.Fragment,null,(0,i.createElement)(c.Fill,{name:"YoastElementor"},(0,i.createElement)(Va,{renderPriority:1},(0,i.createElement)(za,null),a&&(0,i.createElement)(a,null)),s.isKeywordAnalysisActive&&(0,i.createElement)(Va,{renderPriority:8},(0,i.createElement)(Jt.KeywordInput,{isSEMrushIntegrationActive:s.isSEMrushIntegrationActive}),!window.wpseoScriptData.metabox.isPremium&&(0,i.createElement)(c.Fill,{name:"YoastRelatedKeyphrases"},(0,i.createElement)(bi,null))),s.isKeywordAnalysisActive&&(0,i.createElement)(Va,{renderPriority:10},(0,i.createElement)(d.Fragment,null,(0,i.createElement)(Jt.SeoAnalysis,{shouldUpsell:s.shouldUpsell,shouldUpsellWordFormRecognition:s.isWordFormRecognitionActive,shouldUpsellHighlighting:s.shouldUpsell}),s.shouldUpsell&&(0,i.createElement)(To,null))),s.isContentAnalysisActive&&(0,i.createElement)(Va,{renderPriority:15},(0,i.createElement)(Jt.ReadabilityAnalysis,{shouldUpsell:s.shouldUpsell,shouldUpsellHighlighting:s.shouldUpsell})),s.isInclusiveLanguageAnalysisActive&&(0,i.createElement)(Va,{renderPriority:19},(0,i.createElement)(Jt.InclusiveLanguageAnalysis,{shouldUpsellHighlighting:s.shouldUpsell})),s.isKeywordAnalysisActive&&(0,i.createElement)(Va,{key:"additional-keywords-upsell",renderPriority:22},s.shouldUpsell&&(0,i.createElement)(lc,null)),s.isKeywordAnalysisActive&&s.isWincherIntegrationActive&&(0,i.createElement)(Va,{key:"wincher-seo-performance",renderPriority:23},(0,i.createElement)(nc,{location:"sidebar",shouldCloseOnClickOutside:!1})),s.shouldUpsell&&(0,i.createElement)(Va,{key:"internal-linking-suggestions-upsell",renderPriority:24},(0,i.createElement)(Xt,null)),(0,i.createElement)(Va,{renderPriority:25},(0,i.createElement)(an,null)),(s.useOpenGraphData||s.useTwitterData)&&(0,i.createElement)(Va,{key:"social-appearance",renderPriority:26},(0,i.createElement)(vo,{useOpenGraphData:s.useOpenGraphData,useTwitterData:s.useTwitterData})),s.displaySchemaSettings&&(0,i.createElement)(Va,{renderPriority:28},(0,i.createElement)(Co,{title:(0,p.__)("Schema","wordpress-seo")},(0,i.createElement)(Wo,null))),s.displayAdvancedTab&&(0,i.createElement)(Va,{renderPriority:29},(0,i.createElement)(Co,{title:(0,p.__)("Advanced","wordpress-seo"),buttonId:"yoast-seo-elementor-advanced-button"},(0,i.createElement)(Zo,{location:"sidebar"}))),s.isCornerstoneActive&&(0,i.createElement)(Va,{renderPriority:30},(0,i.createElement)(ts,null)),s.isInsightsEnabled&&(0,i.createElement)(Va,{renderPriority:32},(0,i.createElement)(Ha,{location:"elementor"}))))}cc.propTypes={isLoading:h().bool.isRequired,onLoad:h().func.isRequired,settings:h().object.isRequired};const dc=(0,xt.compose)([(0,n.withSelect)((e=>{const{getPreferences:t,getSnippetEditorIsLoading:s}=e("yoast-seo/editor");return{settings:t(),isLoading:s()}})),(0,n.withDispatch)((e=>{const{loadSnippetEditorData:t}=e("yoast-seo/editor");return{onLoad:t}}))])(cc),pc="yoast-elementor-react-tab",uc="yoast-seo-tab",mc="Yoast SEO",hc="panel/page-settings",gc=()=>{const{settings:e}=elementor.documents.getCurrent().config;e.tabs[uc]||(e.tabs=(0,J.reduce)(e.tabs,((e,t,s)=>(e[s]=t,"settings"===s&&(e[uc]=mc),e)),{})),$e.components.get(hc).hasTab(uc)||$e.components.get(hc).addTab(uc,{title:mc})};let yc=!1,fc=!1;const wc=(0,J.debounce)(yt,500,{trailing:!0}),bc=()=>{const e=document.getElementById("yoast-form");if(!e)return void console.error("Yoast form not found!");window.YoastSEO=window.YoastSEO||{},window.YoastSEO._registerReactComponent=nt,(()=>{const e=document.createElement("div");e.id="yoast-elementor-react-root",document.body.appendChild(e),function(e,t){const s=ne();at=(0,d.createRef)();const a={isRtl:s.isRtl};(0,d.render)((0,i.createElement)(tt,{theme:a,location:"sidebar"},(0,i.createElement)(c.SlotFillProvider,null,(0,i.createElement)(d.Fragment,null,t,(0,i.createElement)(rt,{ref:at})))),document.getElementById(e)),st.forEach((e=>{at.current.registerComponent(e.key,e.Component)}))}(e.id,(0,i.createElement)(Je.Root,{context:{locationContext:"elementor-sidebar"}},(0,i.createElement)(wt,{id:pc},(0,i.createElement)(kt,null),(0,i.createElement)(dc,null))))})(),pt("editor/documents/load","yoast-seo/register-tab",gc,(({config:e})=>ut(e.id))),$e.routes.on("run:after",((e,t)=>{t===`${hc}/${uc}`&&(()=>{if(document.getElementById(pc))return;const e=document.getElementById("elementor-panel-page-settings-controls");if(!e)return;const t=e.querySelector(".elementor-control-yoast-seo-section");t&&(t.style.display="none");const s=document.createElement("div");s.id=pc,s.className="yoast yoast-elementor-panel__fills",e.appendChild(s)})()})),gc(),elementor.getPanelView().getPages("menu").view.addItem({name:"yoast",icon:"yoast yoast-element-menu-icon",title:mc,type:"page",callback:()=>{try{$e.route(`${hc}/${uc}`)}catch(e){$e.route(`${hc}/settings`),$e.route(`${hc}/${uc}`)}}},"more"),((e,t=500)=>{const s=(0,J.debounce)(e,t,{trailing:!0});ct("document/elements/settings","yoast-seo/document/post-status",(({settings:e})=>s(e.post_status)),(({container:e,settings:t})=>{var s;return!!ut((null==e||null===(s=e.document)||void 0===s?void 0:s.id)||elementor.documents.getCurrent().id)&&Boolean(null==t?void 0:t.post_status)}))})((()=>wc(yc)));const t=((e,t=500)=>{const s={},a=Array.from(e.querySelectorAll("input[name^='yoast']")),r=a.reduce(((e,{name:t,value:s})=>(e[t]=s,e)),{}),n={...r},o=new MutationObserver((0,J.debounce)((e=>{const t=[];e.forEach((e=>{"value"===e.attributeName&&e.target.name.startsWith("yoast")&&e.target.value!==r[e.target.name]&&(t.push({input:e.target,name:e.target.name,value:e.target.value,previousValue:r[e.target.name],snapshotValue:n[e.target.name]}),r[e.target.name]=e.target.value)})),t.length>0&&(0,J.forEach)(s,(e=>e(t)))}),t));return{start:()=>o.observe(e,{attributes:!0,subtree:!0}),stop:()=>o.disconnect(),subscribe:e=>{const t=(0,J.uniqueId)("yoast-form-listener");return s[t]=e,()=>delete s[t]},takeSnapshot:()=>{a.forEach((({name:e,value:t})=>{n[e]=t}))},restoreSnapshot:()=>{a.forEach((e=>{e.value=n[e.name],r[e.name]=n[e.name]}))}}})(e);t.subscribe((e=>{e.some((e=>{return t=e.name,s=e.value,a=e.previousValue,!(ht.includes(t)||gt.includes(t)&&((e,t)=>{if(t===e)return!0;if(""===t||""===e)return!1;let s,a;try{s=JSON.parse(t),a=JSON.parse(e)}catch(e){return!0}return s.length===a.length&&s.every(((e,t)=>e.keyword===a[t].keyword))})(a,s)||s===a);var t,s,a}))&&(yc=!0,wc(yc),$e.internal("document/save/set-is-modified",{status:!0}))})),t.start(),dt("editor/documents/open","yoast-seo/document/open",(()=>{YoastSEO.store._freeze(!1),t.start(),(0,o.doAction)("yoast.elementor.toggleFreeze",{isFreeze:!1,isDiscard:!1})}),(({id:e})=>ut(e))),ct("editor/documents/close","yoast-seo/document/close",(0,J.throttle)((({mode:e})=>{t.stop(),"discard"===e&&(YoastSEO.store._restoreSnapshot(),t.restoreSnapshot(),yc=!1,yt(yc));const s=()=>{YoastSEO.store._freeze(!0),(0,o.doAction)("yoast.elementor.toggleFreeze",{isFreeze:!0,isDiscard:"discard"===e}),(0,o.removeAction)("yoast.elementor.save.success","yoast/yoast-seo/finishClosingDocument"),(0,o.removeAction)("yoast.elementor.save.failure","yoast/yoast-seo/finishClosingDocument")};if(fc)return(0,o.addAction)("yoast.elementor.save.success","yoast/yoast-seo/finishClosingDocument",s),void(0,o.addAction)("yoast.elementor.save.failure","yoast/yoast-seo/finishClosingDocument",s);s()}),500,{leading:!0,trailing:!1}),(({id:e})=>ut(e))),pt("document/save/save","yoast-seo/document/save",(async({document:s})=>{if(fc=!0,!ut(s.id))return;if(s.id!==elementor.config.document.revisions.current_id)return;yc=!1;const{success:a,formData:r,data:i,xhr:l}=await(e=>new Promise((t=>{const s=jQuery(e).serializeArray().reduce(((e,{name:t,value:s})=>(e[t]=s,e)),{});jQuery.post(e.getAttribute("action"),s).done((({success:e,data:a},r,n)=>t({success:e,formData:s,data:a,xhr:n}))).fail((e=>t({success:!1,formData:s,xhr:e})))})))(e);if(!a)return yc=!0,fc=!1,void(0,o.doAction)("yoast.elementor.save.failure");i.slug&&i.slug!==r.slug&&(0,n.dispatch)("yoast-seo/editor").updateData({slug:i.slug}),yt(yc),(0,o.doAction)("yoast.elementor.save.success",l),YoastSEO.store._takeSnapshot(),t.takeSnapshot(),fc=!1}),(({document:e})=>ut((null==e?void 0:e.id)||elementor.documents.getCurrent().id))),setTimeout((()=>{YoastSEO.store._takeSnapshot(),t.takeSnapshot()}),2e3)},Ec=window.yoast.reduxJsToolkit,vc="adminUrl",_c=(0,Ec.createSlice)({name:vc,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),kc=(_c.getInitialState,{selectAdminUrl:e=>(0,J.get)(e,vc,"")});kc.selectAdminLink=(0,Ec.createSelector)([kc.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}})),_c.actions,_c.reducer;const xc="linkParams",Sc=(0,Ec.createSlice)({name:xc,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),Tc=(Sc.getInitialState,{selectLinkParam:(e,t,s={})=>(0,J.get)(e,`${xc}.${t}`,s),selectLinkParams:e=>(0,J.get)(e,xc,{})});Tc.selectLink=(0,Ec.createSelector)([Tc.selectLinkParams,(e,t)=>t,(e,t,s={})=>s],((e,t,s)=>(0,Tt.addQueryArgs)(t,{...e,...s}))),Sc.actions,Sc.reducer;const Rc=(0,Ec.createSlice)({name:"notifications",initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:s="default",title:a,description:r})=>({payload:{id:e||(0,Ec.nanoid)(),variant:t,size:s,title:a||"",description:r}})},removeNotification:(e,{payload:t})=>(0,J.omit)(e,t)}}),Cc=(Rc.getInitialState,Rc.actions,Rc.reducer,"pluginUrl"),Ic=(0,Ec.createSlice)({name:Cc,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),Lc=(Ic.getInitialState,{selectPluginUrl:e=>(0,J.get)(e,Cc,"")});Lc.selectImageLink=(0,Ec.createSelector)([Lc.selectPluginUrl,(e,t,s="images")=>s,(e,t)=>t],((e,t,s)=>[(0,J.trimEnd)(e,"/"),(0,J.trim)(t,"/"),(0,J.trimStart)(s,"/")].join("/"))),Ic.actions,Ic.reducer;const Pc="wistiaEmbedPermission",Ac=(0,Ec.createSlice)({name:Pc,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${Pc}/request`,(e=>{e.status=K})),e.addCase(`${Pc}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${Pc}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,J.get)(t,"error.code",500),message:(0,J.get)(t,"error.message","Unknown")}}))}}),Oc=(Ac.getInitialState,Ac.actions,{[Pc]:async({payload:e})=>ti()({path:"/yoast/v1/wistia_embed_permission",method:"POST",data:{value:Boolean(e)}})});function Dc({alertKey:e}){return new Promise((t=>wpseoApi.post("alerts/dismiss",{key:e},(()=>t()))))}function Mc({query:e,postId:t}){return new Promise((s=>{wpseoApi.get("meta/search",{query:e,post_id:t},(e=>{s(e.meta)}))}))}Ac.reducer;const Fc=Oc[Pc];class Nc{static get titleElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_title":"hidden_wpseo_title")}static get descriptionElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_metadesc":"hidden_wpseo_desc")}static get slugElement(){return document.getElementById("yoast_wpseo_slug")}static get title(){return Nc.titleElement.value}static set title(e){Nc.titleElement.value=e}static get description(){return Nc.descriptionElement.value}static set description(e){Nc.descriptionElement.value=e}static get slug(){return Nc.slugElement.value}static set slug(e){Nc.slugElement.value=e}}const{UPDATE_DATA:qc,LOAD_SNIPPET_EDITOR_DATA:Uc}=ae.actions;function Bc(e){if(e.hasOwnProperty("title")){let t=e.title;e.title===(0,J.get)(window,"wpseoScriptData.metabox.title_template","")&&(t=""),Nc.title=t}if(e.hasOwnProperty("description")){let t=e.description;e.description===(0,J.get)(window,"wpseoScriptData.metabox.metadesc_template","")&&(t=""),Nc.description=t}return e.hasOwnProperty("slug")&&(Nc.slug=e.slug),{type:qc,data:e}}const $c=()=>{const e=(0,J.get)(window,"wpseoScriptData.metabox.title_template",""),t=(0,J.get)(window,"wpseoScriptData.metabox.metadesc_template","");return{type:Uc,data:{title:Nc.title||e,description:Nc.description||t,slug:Nc.slug},templates:{title:e,description:t}}},Wc="yoast-measurement-element";function Kc(e){let t=document.getElementById(Wc);return t||(t=function(){const e=document.createElement("div");return e.id=Wc,e.style.position="absolute",e.style.left="-9999em",e.style.top=0,e.style.height=0,e.style.overflow="hidden",e.style.fontFamily="arial, sans-serif",e.style.fontSize="20px",e.style.fontWeight="400",document.body.appendChild(e),e}()),t.innerText=e,t.offsetWidth}const{getBaseUrlFromSettings:Hc,getContentLocale:Yc,getEditorDataContent:zc,getFocusKeyphrase:jc,getSnippetEditorDescriptionWithTemplate:Vc,getSnippetEditorSlug:Gc,getSnippetEditorTitleWithTemplate:Zc,getDateFromSettings:Qc}=ae.selectors,Xc=e=>{let t=Zc(e),s=Vc(e),a=Gc(e);const r=Hc(e);return t=Mt.strings.stripHTMLTags(we("data_page_title",t)),s=Mt.strings.stripHTMLTags(we("data_meta_desc",s)),a=a.trim().replace(/\s+/g,"-"),{text:zc(e),title:t,keyword:jc(e),description:s,locale:Yc(e),titleWidth:Kc(t),slug:a,permalink:r+a,date:Qc(e)}},Jc={content:"",title:"",excerpt:"",slug:"",imageUrl:""},ed="yoastmark";function td(e){const t=elementor.settings.page.model.get("post_featured_image"),s=(0,J.get)(t,"url","");return""===s?function(e){const t=ee.languageProcessing.imageInText(e);if(0===t.length)return"";const s=jQuery.parseHTML(t.join(""));for(const e of s)if(e.src)return e.src;return""}(e):s}function sd(){elementor.documents.getCurrent().$element.find(".elementor-widget-container").each(((e,t)=>{-1!==t.innerHTML.indexOf("<"+ed)&&(t.innerHTML=ee.markers.removeMarks(t.innerHTML))})),(0,n.dispatch)("yoast-seo/editor").setActiveMarker(null),(0,n.dispatch)("yoast-seo/editor").setMarkerPauseStatus(!1),YoastSEO.analysis.applyMarks(new ee.Paper("",{}),[])}const ad=(0,J.debounce)((function(){const e=elementor.documents.getCurrent();if(!e.$element)return;if(!["wp-post","wp-page"].includes(e.config.type))return;if((0,n.select)("yoast-seo/editor").getActiveMarker())return;const t=function(e){const t=function(e){const t=[];return e.$element.find(".elementor-widget-container").each(((e,s)=>{const a=s.innerHTML.replace(/[\n\t]/g,"").trim();t.push(a)})),t.join("")}(e);return{content:t,title:elementor.settings.page.model.get("post_title"),excerpt:elementor.settings.page.model.get("post_excerpt")||"",imageUrl:td(t),status:elementor.settings.page.model.get("post_status")}}(e);t.content!==Jc.content&&(Jc.content=t.content,(0,n.dispatch)("yoast-seo/editor").setEditorDataContent(Jc.content)),t.title!==Jc.title&&(Jc.title=t.title,(0,n.dispatch)("yoast-seo/editor").setEditorDataTitle(Jc.title),"draft"!==t.status&&"auto-draft"!==t.status||(0,n.dispatch)("yoast-seo/editor").updateData({slug:(0,Tt.cleanForSlug)(Jc.title)})),t.excerpt!==Jc.excerpt&&(Jc.excerpt=t.excerpt,(0,n.dispatch)("yoast-seo/editor").setEditorDataExcerpt(Jc.excerpt)),t.imageUrl!==Jc.imageUrl&&(Jc.imageUrl=t.imageUrl,(0,n.dispatch)("yoast-seo/editor").setEditorDataImageUrl(Jc.imageUrl))}),te);function rd(){new MutationObserver((()=>{mt()&&ad()})).observe(document,{attributes:!0,childList:!0,subtree:!0,characterData:!0})}function nd(e,t){const{updateWordsToHighlight:s}=(0,n.dispatch)("yoast-seo/editor");e("morphology",new ee.Paper("",{keyword:t})).then((({result:{keyphraseForms:e}})=>{s((0,J.uniq)((0,J.flatten)(e)))})).catch((()=>{s([])}))}const od=(0,J.debounce)(nd,500);var id=jQuery;function ld(e,t,s,a,r){this._scriptUrl=a,this._options={usedKeywords:t.keyword_usage,usedKeywordsPostTypes:t.keyword_usage_post_types,searchUrl:t.search_url,postUrl:t.post_edit_url},this._keywordUsage=t.keyword_usage,this._usedKeywordsPostTypes=t.keyword_usage_post_types,this._postID=id("#post_ID, [name=tag_ID]").val(),this._taxonomy=id("[name=taxonomy]").val()||"",this._nonce=r,this._ajaxAction=e,this._refreshAnalysis=s,this._initialized=!1}function cd(){window.YoastSEO=window.YoastSEO||{},window.YoastSEO.store=function(){const{snapshotReducer:e,takeSnapshot:s,restoreSnapshot:o}=((e,t)=>{let s,a=!1,r=!1;return{snapshotReducer:(r=t,n)=>a?(a=!1,s):e(r,n),takeSnapshot:(e,t)=>{t({type:"CREATE_SNAPSHOT"}),s=(0,J.cloneDeep)(e()),r=!0},restoreSnapshot:e=>{r&&(a=!0,e({type:"RESTORE_SNAPSHOT"}))}}})((0,n.combineReducers)(ae.reducers)),{freezeReducer:i,toggleFreeze:l}=((e,t)=>{let s=!1,a=null;return{freezeReducer:(r=t,n)=>s?a:e(r,n),toggleFreeze:(e,t=!s)=>{a=t?(0,J.cloneDeep)(e()):null,s=Boolean(t)}}})(e),c=(0,n.registerStore)("yoast-seo/editor",{reducer:i,selectors:{...ae.selectors,...r},actions:(0,J.pickBy)({...ae.actions,...a},(e=>"function"==typeof e)),controls:t});return(e=>{e.dispatch(ae.actions.loadCornerstoneContent()),e.dispatch(ae.actions.loadFocusKeyword()),e.dispatch(ae.actions.setMarkerStatus(window.wpseoScriptData.metabox.elementorMarkerStatus)),e.dispatch(ae.actions.setSettings({socialPreviews:{sitewideImage:window.wpseoScriptData.metabox.sitewide_social_image,siteName:window.wpseoScriptData.metabox.site_name,contentImage:window.wpseoScriptData.metabox.first_content_image,twitterCardType:window.wpseoScriptData.metabox.twitterCardType},snippetEditor:{baseUrl:window.wpseoScriptData.metabox.base_url,date:window.wpseoScriptData.metabox.metaDescriptionDate,recommendedReplacementVariables:window.wpseoScriptData.analysis.plugins.replaceVars.recommended_replace_vars,siteIconUrl:window.wpseoScriptData.metabox.siteIconUrl}}));const{facebook:t,twitter:s}=window.wpseoScriptData.metabox.showSocial;t&&e.dispatch(ae.actions.loadFacebookPreviewData()),s&&e.dispatch(ae.actions.loadTwitterPreviewData()),e.dispatch(ae.actions.setSEMrushChangeCountry(window.wpseoScriptData.metabox.countryCode)),e.dispatch(ae.actions.setSEMrushLoginStatus(window.wpseoScriptData.metabox.SEMrushLoginStatus)),e.dispatch(ae.actions.setWincherLoginStatus(window.wpseoScriptData.metabox.wincherLoginStatus,!1)),e.dispatch(ae.actions.setWincherWebsiteId(window.wpseoScriptData.metabox.wincherWebsiteId)),e.dispatch(ae.actions.setWincherAutomaticKeyphaseTracking(window.wpseoScriptData.metabox.wincherAutoAddKeyphrases)),e.dispatch(ae.actions.setDismissedAlerts((0,J.get)(window,"wpseoScriptData.dismissedAlerts",{}))),e.dispatch(ae.actions.setCurrentPromotions((0,J.get)(window,"wpseoScriptData.currentPromotions",{}))),e.dispatch(ae.actions.setIsPremium(Boolean((0,J.get)(window,"wpseoScriptData.metabox.isPremium",!1)))),e.dispatch(ae.actions.setAdminUrl((0,J.get)(window,"wpseoScriptData.adminUrl",""))),e.dispatch(ae.actions.setLinkParams((0,J.get)(window,"wpseoScriptData.linkParams",{}))),e.dispatch(ae.actions.setPluginUrl((0,J.get)(window,"wpseoScriptData.pluginUrl",""))),e.dispatch(ae.actions.setWistiaEmbedPermissionValue("1"===(0,J.get)(window,"wpseoScriptData.wistiaEmbedPermission",!1)))})(c),c._freeze=l.bind(null,c.getState),c._takeSnapshot=s.bind(null,c.getState,c.dispatch),c._restoreSnapshot=o.bind(null,c.dispatch),c}(),dt("panel/editor/open","yoast-seo/marks/reset-on-edit",(0,J.debounce)(sd,te),mt),dt("document/save/save","yoast-seo/marks/reset-on-save",sd,(({document:e})=>ut((null==e?void 0:e.id)||elementor.documents.getCurrent().id))),ct("editor/documents/attach-preview","yoast-seo/content-scraper/initial",ad,mt),ct("editor/documents/attach-preview","yoast-seo/content-scraper",(0,J.debounce)(rd,te),mt),ct("document/save/set-is-modified","yoast-seo/content-scraper/on-modified",ad,(({document:e})=>ut((null==e?void 0:e.id)||elementor.documents.getCurrent().id))),window.YoastSEO.pluginReady=he,window.YoastSEO.pluginReloaded=ge,window.YoastSEO.registerModification=ye,window.YoastSEO.registerPlugin=fe,window.YoastSEO.applyModifications=we,window.YoastSEO.analysis=window.YoastSEO.analysis||{},window.YoastSEO.analysis.run=(0,n.dispatch)("yoast-seo/editor").runAnalysis,window.YoastSEO.analysis.worker=Ge(),window.YoastSEO.analysis.collectData=Ve,fe(Yr,{status:"ready"}),Gr().forEach((t=>{const s=null==e?void 0:e[t];if(s){const e=(({getReplacement:e,regexp:t})=>s=>s.replace(t,e()))(s);Vr(e)}})),window.YoastSEO.wp=window.YoastSEO.wp||{},window.YoastSEO.wp.replaceVarsPlugin={addReplacement:Zr,ReplaceVar:Hr},function(){const e=ne(),t=(0,J.get)(window,["wpseoScriptData","analysis","worker","keywords_assessment_url"],"used-keywords-assessment.js"),s=(0,J.get)(window,["wpseoScriptData","usedKeywordsNonce"],""),a=new ld("get_focus_keyword_usage_and_post_types",e,(0,n.dispatch)("yoast-seo/editor").runAnalysis,t,s);a.init();let r="";(0,n.subscribe)((()=>{const e=(0,n.select)("yoast-seo/editor").getFocusKeyphrase();e!==r&&(r=e,a.setKeyword(e))}))}(),(()=>{if((0,n.select)("yoast-seo/editor").getPreference("isInsightsEnabled",!1))(0,n.dispatch)("yoast-seo/editor").loadEstimatedReadingTime(),(0,n.subscribe)((0,J.debounce)(Ze(),1500,{maxWait:3e3}))})(),function(e){const{getFocusKeyphrase:t}=(0,n.select)("yoast-seo/editor");let s=t();nd(e,s),(0,n.subscribe)((()=>{const a=t();s!==a&&(s=a,od(e,a))}))}(window.YoastSEO.analysis.worker.runResearch),window.elementorFrontend.config.experimentalFeatures.editor_v2?function(){if(!0===window.elementor.config.user.introduction["yoast-introduction-editor-v2"])return;const e=new window.elementorModules.editor.utils.Introduction({introductionKey:"yoast-introduction-editor-v2",dialogOptions:{id:"yoast-introduction-editor-v2",className:"elementor-right-click-introduction yoast-elementor-introduction",headerMessage:(0,p.__)("Yoast SEO for Elementor","wordpress-seo"),message:(0,p.__)("Get started with Yoast SEO's content analysis for Elementor!","wordpress-seo"),position:{my:"center top",at:"center bottom+20",of:document.querySelector("button[value='document-settings']"),using:function(e,t){this.style.setProperty("--yoast-elementor-introduction-arrow",t.target.left-t.element.left+8+"px");const s=t.target.element.closest("#elementor-editor-wrapper-v2 header");s&&s.offsetHeight>e.top-12?this.style.top=s.offsetHeight+20+"px":(0,J.isObject)(s)&&s[0].offsetHeight>e.top-12?this.style.top=s[0].offsetHeight+12+"px":this.style.top=e.top+"px",this.style.left=e.left+"px"},autoRefresh:!0},hide:{onOutsideClick:!1}},onDialogInitCallback:t=>{window.$e.routes.on("run:after",(function(e,s){"panel/page-settings/settings"===s&&t.getElements("ok").trigger("click")})),t.addButton({name:"ok",text:(0,p.__)("Got it","wordpress-seo"),callback:()=>e.setViewed()}),t.getElements("ok").addClass("elementor-button elementor-button-success")}});setTimeout((function t(){try{e.show()}catch(e){setTimeout(t,100)}}),100)}():function(){if(!0===window.elementor.config.user.introduction["yoast-introduction"])return;const e=new window.elementorModules.editor.utils.Introduction({introductionKey:"yoast-introduction",dialogOptions:{id:"yoast-introduction",className:"elementor-right-click-introduction yoast-elementor-introduction",headerMessage:(0,p.__)("New: Yoast SEO for Elementor","wordpress-seo"),message:(0,p.__)("Get started with Yoast SEO's content analysis for Elementor!","wordpress-seo"),position:{my:"left top",at:"right top",autoRefresh:!0},hide:{onOutsideClick:!1}},onDialogInitCallback:t=>{window.$e.routes.on("run:after",(function(e,s){"panel/menu"===s&&t.getElements("ok").trigger("click")})),t.addButton({name:"ok",text:(0,p.__)("Got it","wordpress-seo"),callback:()=>e.setViewed()}),t.getElements("ok").addClass("elementor-button elementor-button-success")}});setTimeout((function t(){try{e.show(window.elementor.getPanelView().header.currentView.ui.menuButton[0])}catch(e){setTimeout(t,100)}}),100)}(),bc(),window.wpseoScriptData.postType&&!["attachment","product"].includes(window.wpseoScriptData.postType)&&(()=>{const e=(0,n.select)(X).getIsPremium(),t=(0,n.select)(X).getIsWooSeoUpsell(),s=(0,n.select)(X).getIsProduct()?!e||t:!e;(0,o.addFilter)("yoast.replacementVariableEditor.additionalButtons","yoast/yoast-seo-premium/AiGenerator",((e,{fieldId:t})=>(s&&e.push((0,i.createElement)(c.Fill,{name:`yoast.replacementVariableEditor.additionalButtons.${t}`},(0,i.createElement)(Q,{fieldId:t}))),e)))})(),(0,o.doAction)("yoast.elementor.loaded")}ld.prototype.init=function(){const{worker:e}=window.YoastSEO.analysis;this.requestKeywordUsage=(0,J.debounce)(this.requestKeywordUsage.bind(this),500),e.loadScript(this._scriptUrl).then((()=>{e.sendMessage("initialize",this._options,"used-keywords-assessment")})).then((()=>{this._initialized=!0,(0,J.isEqual)(this._options.usedKeywords,this._keywordUsage)?this._refreshAnalysis():e.sendMessage("updateKeywordUsage",this._keywordUsage,"used-keywords-assessment").then((()=>this._refreshAnalysis()))})).catch((e=>console.error(e)))},ld.prototype.setKeyword=function(e){(0,J.has)(this._keywordUsage,e)||this.requestKeywordUsage(e)},ld.prototype.requestKeywordUsage=function(e){id.post(ajaxurl,{action:this._ajaxAction,post_id:this._postID,keyword:e,taxonomy:this._taxonomy,nonce:this._nonce},this.updateKeywordUsage.bind(this,e),"json")},ld.prototype.updateKeywordUsage=function(e,t){const{worker:s}=window.YoastSEO.analysis,a=t.keyword_usage,r=t.post_types;a&&(0,J.isArray)(a)&&(this._keywordUsage[e]=a,this._usedKeywordsPostTypes[e]=r,this._initialized&&s.sendMessage("updateKeywordUsage",{usedKeywords:this._keywordUsage,usedKeywordsPostTypes:this._usedKeywordsPostTypes},"used-keywords-assessment").then((()=>this._refreshAnalysis())))},jQuery(window).on("elementor:init",(()=>{window.elementor.on("panel:init",(()=>{setTimeout(cd)}))}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals-components.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals-components.js new file mode 100644 index 00000000..1e3f8591 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals-components.js @@ -0,0 +1,279 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var r in s)e.o(s,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:s[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,s=window.wp.i18n,r=window.wp.components,o=window.yoast.componentsNew,n=window.yoast.helpers,a=window.yoast.propTypes;var l=e.n(a);const i=window.wp.element,c=window.yoast.styledComponents;var d=e.n(c);const p=d().div` + display: flex; + margin-top: 8px; +`;class u extends i.Component{render(){return(0,t.createElement)(p,null,(0,t.createElement)(o.Toggle,{id:this.props.id,labelText:(0,s.__)("Mark as cornerstone content","wordpress-seo"),isEnabled:this.props.isEnabled,onSetToggleState:this.props.onToggle,onToggleDisabled:this.props.onToggleDisabled}))}}u.propTypes={id:l().string,isEnabled:l().bool,onToggle:l().func,onToggleDisabled:l().func},u.defaultProps={id:"cornerstone-toggle",isEnabled:!0,onToggle:()=>{},onToggleDisabled:()=>{}};const m=u,h=d()(o.Collapsible)` + h2 > button { + padding-left: 24px; + padding-top: 16px; + + &:hover { + background-color: #f0f0f0; + } + } + + div[class^="collapsible_content"] { + padding: 24px 0; + margin: 0 24px; + border-top: 1px solid rgba(0,0,0,0.2); + } + +`,y=e=>(0,t.createElement)(h,{hasPadding:!0,hasSeparator:!0,...e}),g=e=>{const[s,r]=(0,i.useState)(!1),{prefixIcon:n}=e;return(0,t.createElement)("div",{className:"yoast components-panel__body "+(s?"is-opened":"")},(0,t.createElement)("h2",{className:"components-panel__body-title"},(0,t.createElement)("button",{onClick:function(){r(!s)},className:"components-button components-panel__body-toggle",type:"button",id:e.buttonId},(0,t.createElement)("span",{className:"yoast-icon-span",style:{fill:`${n&&n.color||""}`}},n&&(0,t.createElement)(o.SvgIcon,{icon:n.icon,color:n.color,size:n.size})),(0,t.createElement)("span",{className:"yoast-title-container"},(0,t.createElement)("div",{className:"yoast-title"},e.title),(0,t.createElement)("div",{className:"yoast-subtitle"},e.subTitle)),e.hasBetaBadgeLabel&&(0,t.createElement)(o.BetaBadge,null),(0,t.createElement)("span",{className:"yoast-chevron","aria-hidden":"true"}))),s&&e.children)},b=g;g.propTypes={title:l().string.isRequired,children:l().oneOfType([l().node,l().arrayOf(l().node)]).isRequired,prefixIcon:l().object,subTitle:l().string,hasBetaBadgeLabel:l().bool,buttonId:l().string},g.defaultProps={prefixIcon:null,subTitle:"",hasBetaBadgeLabel:!1,buttonId:null};const w=(0,n.makeOutboundLink)();function f({isCornerstone:e,onChange:a,learnMoreUrl:l,location:i}){const c="metabox"===i?y:b;return(0,t.createElement)(c,{id:(0,n.join)(["yoast-cornerstone-collapsible",i]),title:(0,s.__)("Cornerstone content","wordpress-seo")},(0,t.createElement)(o.HelpText,null,(0,s.__)("Cornerstone content should be the most important and extensive articles on your site.","wordpress-seo")+" ",(0,t.createElement)(w,{href:l},(0,s.__)("Learn more about Cornerstone Content.","wordpress-seo"))),(0,t.createElement)(m,{id:(0,n.join)(["yoast-cornerstone",i]),isEnabled:e,onToggle:a}),(0,t.createElement)(r.Slot,{name:"YoastAfterCornerstoneToggle"}))}f.propTypes={isCornerstone:l().bool,onChange:l().func,learnMoreUrl:l().string.isRequired,location:l().string},f.defaultProps={isCornerstone:!0,onChange:()=>{},location:""};const k=window.wp.compose,E=window.wp.data,x=window.yoast.externals.contexts,_=window.wp.apiFetch;var v=e.n(_);const N=d().div` + min-width: 600px; + + @media screen and ( max-width: 680px ) { + min-width: 0; + width: 86vw; + } +`,R=d().div` + @media screen and ( min-width: 600px ) { + max-width: 420px; + } +`,B=(d()(o.Icon)` + float: ${(0,n.getDirectionalStyle)("right","left")}; + margin: ${(0,n.getDirectionalStyle)("0 0 16px 16px","0 16px 16px 0")}; + + && { + width: 150px; + height: 150px; + + @media screen and ( max-width: 680px ) { + width: 80px; + height: 80px; + } + } +`,"yoast yoast-gutenberg-modal"),C=e=>{const{title:s,className:o,showYoastIcon:n,additionalClassName:a,...l}=e,i=n?(0,t.createElement)("span",{className:"yoast-icon"}):null;return(0,t.createElement)(r.Modal,{title:s,className:`${o} ${a}`,icon:i,...l},e.children)};C.propTypes={title:l().string,className:l().string,showYoastIcon:l().bool,children:l().oneOfType([l().node,l().arrayOf(l().node)]),additionalClassName:l().string},C.defaultProps={title:"Yoast SEO",className:B,showYoastIcon:!0,children:null,additionalClassName:""};const L=C;var S,I;function O(){return O=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",O({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 425 456.27"},e),S||(S=t.createElement("path",{d:"M73 405.26a66.79 66.79 0 0 1-6.54-1.7 64.75 64.75 0 0 1-6.28-2.31c-1-.42-2-.89-3-1.37-1.49-.72-3-1.56-4.77-2.56-1.5-.88-2.71-1.64-3.83-2.39-.9-.61-1.8-1.26-2.68-1.92a70.154 70.154 0 0 1-5.08-4.19 69.21 69.21 0 0 1-8.4-9.17c-.92-1.2-1.68-2.25-2.35-3.24a70.747 70.747 0 0 1-3.44-5.64 68.29 68.29 0 0 1-8.29-32.55V142.13a68.26 68.26 0 0 1 8.29-32.55c1-1.92 2.21-3.82 3.44-5.64s2.55-3.58 4-5.27a69.26 69.26 0 0 1 14.49-13.25C50.37 84.19 52.27 83 54.2 82A67.59 67.59 0 0 1 73 75.09a68.75 68.75 0 0 1 13.75-1.39h169.66L263 55.39H86.75A86.84 86.84 0 0 0 0 142.13v196.09A86.84 86.84 0 0 0 86.75 425h11.32v-18.35H86.75A68.75 68.75 0 0 1 73 405.26zM368.55 60.85l-1.41-.53-6.41 17.18 1.41.53a68.06 68.06 0 0 1 8.66 4c1.93 1 3.82 2.2 5.65 3.43A69.19 69.19 0 0 1 391 98.67c1.4 1.68 2.72 3.46 3.95 5.27s2.39 3.72 3.44 5.64a68.29 68.29 0 0 1 8.29 32.55v264.52H233.55l-.44.76c-3.07 5.37-6.26 10.48-9.49 15.19L222 425h203V142.13a87.2 87.2 0 0 0-56.45-81.28z"})),I||(I=t.createElement("path",{stroke:"#000",strokeMiterlimit:10,strokeWidth:3.81,d:"M119.8 408.28v46c28.49-1.12 50.73-10.6 69.61-29.58 19.45-19.55 36.17-50 52.61-96L363.94 1.9H305l-98.25 272.89-48.86-153h-54l71.7 184.18a75.67 75.67 0 0 1 0 55.12c-7.3 18.68-20.25 40.66-55.79 47.19z"})));class M extends i.Component{constructor(e){super(e),this.onModalOpen=this.onModalOpen.bind(this),this.onLinkClick=this.onLinkClick.bind(this),this.listenToMessages=this.listenToMessages.bind(this)}onModalOpen(){this.props.keyphrase.trim()?this.props.onOpen(this.props.location):this.props.onOpenWithNoKeyphrase()}onLinkClick(e){if(e.preventDefault(),!this.props.keyphrase.trim())return void this.props.onOpenWithNoKeyphrase();const t=e.target.href,s=["top="+(window.top.outerHeight/2+window.top.screenY-285),"left="+(window.top.outerWidth/2+window.top.screenX-170),"width=340","height=570","resizable=1","scrollbars=1","status=0"];this.popup&&!this.popup.closed||(this.popup=window.open(t,"SEMrush_login",s.join(","))),this.popup&&this.popup.focus(),window.addEventListener("message",this.listenToMessages,!1)}async listenToMessages(e){const{data:t,source:s,origin:r}=e;"https://oauth.semrush.com"===r&&this.popup===s&&("semrush:oauth:success"===t.type&&(this.popup.close(),window.removeEventListener("message",this.listenToMessages,!1),await this.performAuthenticationRequest(t)),"semrush:oauth:denied"===t.type&&(this.popup.close(),window.removeEventListener("message",this.listenToMessages,!1),this.props.onAuthentication(!1)))}async performAuthenticationRequest(e){try{const t=new URL(e.url).searchParams.get("code"),s=await v()({path:"yoast/v1/semrush/authenticate",method:"POST",data:{code:t}});200===s.status?(this.props.onAuthentication(!0),this.onModalOpen(),this.popup.close()):console.error(s.error)}catch(e){console.error(e.message)}}render(){const{keyphrase:e,location:n,whichModalOpen:a,isLoggedIn:l,shouldCloseOnClickOutside:c,onClose:d}=this.props;return(0,t.createElement)(i.Fragment,null,l&&(0,t.createElement)("div",{className:"yoast"},(0,t.createElement)(o.NewButton,{variant:"secondary",id:`yoast-get-related-keyphrases-${n}`,onClick:this.onModalOpen},(0,s.__)("Get related keyphrases","wordpress-seo"))),e&&a===n&&(0,t.createElement)(L,{title:(0,s.__)("Related keyphrases","wordpress-seo"),onRequestClose:d,icon:(0,t.createElement)(A,null),additionalClassName:"yoast-related-keyphrases-modal",shouldCloseOnClickOutside:c},(0,t.createElement)(N,{className:"yoast-gutenberg-modal__content yoast-related-keyphrases-modal__content"},(0,t.createElement)(r.Slot,{name:"YoastRelatedKeyphrases"}))),!l&&(0,t.createElement)("div",{className:"yoast"},(0,t.createElement)(o.ButtonStyledLink,{variant:"secondary",id:`yoast-get-related-keyphrases-${n}`,href:"https://oauth.semrush.com/oauth2/authorize?ref=1513012826&client_id=yoast&redirect_uri=https%3A%2F%2Foauth.semrush.com%2Foauth2%2Fyoast%2Fsuccess&response_type=code&scope=user.id",onClick:this.onLinkClick},(0,s.__)("Get related keyphrases","wordpress-seo"),(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,s.__)("(Opens in a new browser tab)","wordpress-seo")))))}}M.propTypes={keyphrase:l().string,location:l().string,whichModalOpen:l().oneOf(["none","metabox","sidebar"]),isLoggedIn:l().bool,onOpen:l().func.isRequired,onOpenWithNoKeyphrase:l().func.isRequired,onClose:l().func.isRequired,onAuthentication:l().func.isRequired,shouldCloseOnClickOutside:l().bool},M.defaultProps={keyphrase:"",location:"",whichModalOpen:"none",isLoggedIn:!1,shouldCloseOnClickOutside:!0};const P=M,T=(0,k.compose)([(0,E.withSelect)((e=>{const{getSEMrushModalOpen:t,getSEMrushLoginStatus:s,getIsElementorEditor:r}=e("yoast-seo/editor");return{whichModalOpen:t(),isLoggedIn:s(),shouldCloseOnClickOutside:!r()}})),(0,E.withDispatch)((e=>{const{setSEMrushNoKeyphraseMessage:t,setSEMrushOpenModal:s,setSEMrushDismissModal:r,setSEMrushLoginStatus:o}=e("yoast-seo/editor");return{onOpenWithNoKeyphrase:()=>{t()},onOpen:e=>{s(e)},onClose:()=>{r()},onAuthentication:e=>{o(e)}}}))])(P),$=window.yoast.styleGuide,F=(0,n.makeOutboundLink)(d().a` + display: inline-block; + position: relative; + outline: none; + text-decoration: none; + border-radius: 100%; + width: 24px; + height: 24px; + margin: -4px 0; + vertical-align: middle; + + color: ${$.colors.$color_help_text}; + + &:hover, + &:focus { + color: ${$.colors.$color_snippet_focus}; + } + + // Overwrite the default blue active color for links. + &:active { + color: ${$.colors.$color_help_text}; + } + + &::before { + position: absolute; + top: 0; + left: 0; + padding: 2px; + content: "\f223"; + } +`),q=window.lodash,K=$.colors.$color_bad,U=$.colors.$palette_error_background,z=$.colors.$color_grey_text_light,H=$.colors.$palette_error_text,j=d().div` + display: flex; + flex-direction: column; +`,D=d().label` + font-size: var(--yoast-font-size-default); + font-weight: var(--yoast-font-weight-bold); + ${(0,n.getDirectionalStyle)("margin-right: 4px","margin-left: 4px")}; +`,Y=d().span` + margin-bottom: 0.5em; +`,W=d()(o.InputField)` + flex: 1 !important; + box-sizing: border-box; + max-width: 100%; + margin: 0; // Reset margins inherited from WordPress. + + // Hide native X in Edge and IE11. + &::-ms-clear { + display: none; + } + + &.has-error { + border-color: ${K} !important; + background-color: ${U} !important; + + &:focus { + box-shadow: 0 0 2px ${K} !important; + } + } +`,G=d().ul` + color: ${H}; + list-style-type: disc; + list-style-position: outside; + margin: 0; + margin-left: 1.2em; +`,V=d().li` + color: ${H}; + margin: 0 0 0.5em 0; +`,Q=(0,o.addFocusStyle)(d().button` + border: 1px solid transparent; + box-shadow: none; + background: none; + flex: 0 0 32px; + height: 32px; + max-width: 32px; + padding: 0; + cursor: pointer; + `);Q.propTypes={type:l().string,focusColor:l().string,focusBackgroundColor:l().string,focusBorderColor:l().string},Q.defaultProps={type:"button",focusColor:$.colors.$color_button_text_hover,focusBackgroundColor:"transparent",focusBorderColor:$.colors.$color_blue};const Z=d()(o.SvgIcon)` + margin-top: 4px; +`,J=d().div` + display: flex; + flex-direction: row; + align-items: center; + + &.has-remove-keyword-button { + ${W} { + ${(0,n.getDirectionalStyle)("padding-right: 40px","padding-left: 40px")}; + } + + ${Q} { + ${(0,n.getDirectionalStyle)("margin-left: -32px","margin-right: -32px")}; + } + } +`;class X extends i.Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}handleChange(e){this.props.onChange(e.target.value)}renderLabel(){const{id:e,label:s,helpLink:r}=this.props;return(0,t.createElement)(Y,null,(0,t.createElement)(D,{htmlFor:e},s),r)}renderErrorMessages(){const e=[...this.props.errorMessages];return!(0,q.isEmpty)(e)&&(0,t.createElement)(G,null,e.map(((e,s)=>(0,t.createElement)(V,{key:s},(0,t.createElement)("span",{role:"alert"},e)))))}render(){const{id:e,showLabel:s,keyword:r,onRemoveKeyword:o,onBlurKeyword:n,onFocusKeyword:a,hasError:l}=this.props,i=!s,c=o!==q.noop;return(0,t.createElement)(j,null,s&&this.renderLabel(),l&&this.renderErrorMessages(),(0,t.createElement)(J,{className:c?"has-remove-keyword-button":null},(0,t.createElement)(W,{"aria-label":i?this.props.label:null,type:"text",id:e,className:l?"has-error":null,onChange:this.handleChange,onFocus:a,onBlur:n,value:r,autoComplete:"off"}),c&&(0,t.createElement)(Q,{onClick:o,focusBoxShadowColor:"#084A67"},(0,t.createElement)(Z,{size:"18px",icon:"times-circle",color:z}))))}}X.propTypes={id:l().string.isRequired,showLabel:l().bool,keyword:l().string,onChange:l().func.isRequired,onRemoveKeyword:l().func,onBlurKeyword:l().func,onFocusKeyword:l().func,label:l().string.isRequired,helpLink:l().node,hasError:l().bool,errorMessages:l().arrayOf(l().string)},X.defaultProps={showLabel:!0,keyword:"",onRemoveKeyword:q.noop,onBlurKeyword:q.noop,onFocusKeyword:q.noop,helpLink:null,hasError:!1,errorMessages:[]};const ee=X,te=d().div` + padding: 16px; + /* Necessary to compensate negative top margin of the collapsible after the keyword input. */ + border-bottom: 1px solid transparent; +`;class se extends i.Component{constructor(e){super(e),this.validate=this.validate.bind(this)}static renderHelpLink(){return(0,t.createElement)(F,{href:wpseoAdminL10n["shortlinks.focus_keyword_info"],className:"dashicons"},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,s.__)("Help on choosing the perfect focus keyphrase","wordpress-seo")))}validate(){const e=[...this.props.errors];return 0===this.props.keyword.trim().length&&this.props.displayNoKeyphraseMessage&&e.push((0,s.__)("Please enter a focus keyphrase first to get related keyphrases","wordpress-seo")),0===this.props.keyword.trim().length&&this.props.displayNoKeyphrasForTrackingMessage&&e.push((0,s.__)("Please enter a focus keyphrase first to track keyphrase performance","wordpress-seo")),this.props.keyword.includes(",")&&e.push((0,s.__)("Are you trying to use multiple keyphrases? You should add them separately below.","wordpress-seo")),this.props.keyword.length>191&&e.push((0,s.__)("Your keyphrase is too long. It can be a maximum of 191 characters.","wordpress-seo")),e}render(){const e=this.validate();return(0,t.createElement)(x.LocationConsumer,null,(o=>(0,t.createElement)("div",{style:"sidebar"===o?{borderBottom:"1px solid #f0f0f0"}:{}},(0,t.createElement)(te,{location:o},(0,t.createElement)(ee,{id:`focus-keyword-input-${o}`,onChange:this.props.onFocusKeywordChange,keyword:this.props.keyword,label:(0,s.__)("Focus keyphrase","wordpress-seo"),helpLink:se.renderHelpLink(),onBlurKeyword:this.props.onBlurKeyword,onFocusKeyword:this.props.onFocusKeyword,hasError:e.length>0,errorMessages:e}),this.props.isSEMrushIntegrationActive&&(0,t.createElement)(T,{location:o,keyphrase:this.props.keyword})),(0,t.createElement)(r.Slot,{name:`YoastAfterKeywordInput${o.charAt(0).toUpperCase()+o.slice(1)}`}))))}}se.propTypes={keyword:l().string,onFocusKeywordChange:l().func.isRequired,onFocusKeyword:l().func.isRequired,onBlurKeyword:l().func.isRequired,isSEMrushIntegrationActive:l().bool,displayNoKeyphraseMessage:l().bool,displayNoKeyphrasForTrackingMessage:l().bool,errors:l().arrayOf(l().string)},se.defaultProps={keyword:"",isSEMrushIntegrationActive:!1,displayNoKeyphraseMessage:!1,displayNoKeyphrasForTrackingMessage:!1,errors:[]};const re=(0,k.compose)([(0,E.withSelect)((e=>{const{getFocusKeyphrase:t,getSEMrushNoKeyphraseMessage:s,hasWincherNoKeyphrase:r,getFocusKeyphraseErrors:o}=e("yoast-seo/editor");return{keyword:t(),displayNoKeyphraseMessage:s(),displayNoKeyphrasForTrackingMessage:r(),errors:o()}})),(0,E.withDispatch)((e=>{const{setFocusKeyword:t,setMarkerPauseStatus:s}=e("yoast-seo/editor");return{onFocusKeywordChange:t,onFocusKeyword:()=>s(!0),onBlurKeyword:()=>s(!1)}}))])(se),oe=window.yoast.analysis;function ne(e,t=""){const s=e.getIdentifier(),r={score:e.score,rating:oe.interpreters.scoreToRating(e.score),hasMarks:e.hasMarks(),marker:e.getMarker(),id:s,text:e.text,markerId:t.length>0?`${t}:${s}`:s,hasBetaBadge:e.hasBetaBadge(),hasJumps:e.hasJumps(),hasAIFixes:e.hasAIFixes(),editFieldName:e.editFieldName};return"ok"===r.rating&&(r.rating="OK"),r}function ae(e,t){switch(e.rating){case"error":t.errorsResults.push(e);break;case"feedback":t.considerationsResults.push(e);break;case"bad":t.problemsResults.push(e);break;case"OK":t.improvementsResults.push(e);break;case"good":t.goodResults.push(e)}return t}function le(e){switch(e){case"loading":return{icon:"loading-spinner",color:$.colors.$color_green_medium_light};case"not-set":return{icon:"seo-score-none",color:$.colors.$color_score_icon};case"noindex":return{icon:"seo-score-none",color:$.colors.$color_noindex};case"good":return{icon:"seo-score-good",color:$.colors.$color_green_medium};case"ok":return{icon:"seo-score-ok",color:$.colors.$color_ok};default:return{icon:"seo-score-bad",color:$.colors.$color_red}}}function ie(e,t=""){let s={errorsResults:[],problemsResults:[],improvementsResults:[],goodResults:[],considerationsResults:[]};if(!e)return s;for(let r=0;r(0,t.createElement)(ce,{target:e},(0,t.createElement)(o.SvgIcon,{...le(s)}));de.propTypes={target:l().string.isRequired,scoreIndicator:l().string.isRequired};const pe=de,ue=window.yoast.analysisReport,me=window.yoast.uiLibrary,he=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z",clipRule:"evenodd"}))})),ye=window.wp.hooks,ge=window.wp.url,be=()=>[(0,s.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,s.__)("%1$sAI%2$s: Better SEO titles and meta descriptions, faster.","wordpress-seo"),"",""),(0,s.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,s.__)("%1$sMultiple keywords%2$s: Rank higher for more searches.","wordpress-seo"),"",""),(0,s.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,s.__)("%1$sSuper fast%2$s internal linking suggestions.","wordpress-seo"),"",""),(0,s.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,s.__)("%1$sNo more broken links%2$s: Automatic redirect manager.","wordpress-seo"),"",""),(0,s.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,s.__)("%1$sAppealing social previews%2$s people actually want to click on.","wordpress-seo"),"",""),(0,s.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,s.__)("%1$s24/7 support%2$s: Also on evenings and weekends.","wordpress-seo"),"","")],we=d().div` + padding: 25px 32px 32px; + color: #303030; +`,fe=d().ul` + margin: 0; + padding: 0; + + li { + list-style-image: var(--yoast-svg-icon-check); + margin: 0.5rem 0 0 1.5rem; + line-height: 1.4em; + + &::marker { + font-size: 1.5rem; + } + } +`,ke=d().span` + display: block; + margin-top: 4px; +`,Ee=d().h2` + margin-top: 0; + margin-bottom: 0.25rem; + color: #303030; + font-size: 0.8125rem; + font-weight: 600; +`,xe=d().p` + display: block; + margin: 0.25rem 0 1rem 0 !important; + max-width: 420px; +`,_e=d().hr` + margin-top: 1.5rem; + margin-bottom: 1rem; + border-top: 0; + border-bottom: 1px solid #E2E8F0; +`,ve=d().div` + text-align: center; +`,Ne=d().a` + width: 100%; +`,Re=(0,n.makeOutboundLink)(Ne);class Be extends i.Component{constructor(e){super(e),this.state={defaultPrice:"99"}}createBenefitsList(e){return e.length>0&&(0,t.createElement)(fe,{role:"list"},e.map(((e,s)=>(0,t.createElement)("li",{key:`upsell-benefit-${s}`},(0,i.createInterpolateElement)(e,{strong:(0,t.createElement)("strong",null)})))))}render(){const e=(0,E.select)("yoast-seo/editor").isPromotionActive("black-friday-2023-promotion"),{defaultPrice:r}=this.state,o=e?"69.30":null,n=o||r;return(0,t.createElement)(i.Fragment,null,e&&(0,t.createElement)("div",{className:"yst-flex yst-justify-between yst-items-center yst-text-lg yst-content-between yst-bg-black yst-text-amber-300 yst-h-9 yst-border-amber-300 yst-border-y yst-border-x-0 yst-border-solid yst-px-6"},(0,t.createElement)("div",null,(0,s.__)("BLACK FRIDAY","wordpress-seo")),(0,t.createElement)("div",null,(0,s.__)("30% OFF","wordpress-seo"))),(0,t.createElement)(we,null,(0,t.createElement)(Ee,null,this.props.title),(0,t.createElement)(xe,null,this.props.description),(0,t.createElement)(ve,null,(0,t.createElement)(Re,{...this.props.upsellButton},this.props.upsellButtonText,this.props.upsellButtonHasCaret&&(0,t.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),(0,t.createElement)("div",{className:"yst-text-slate-600 yst-my-4"},o&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-500 yst-line-through"},r)," "),(0,t.createElement)("span",{className:"yst-text-slate-900 yst-text-2xl yst-font-bold"},n)," ",(0,s.__)("$ USD / € EUR / £ GBP per year (ex. VAT)","wordpress-seo")),(0,t.createElement)(ke,{id:this.props.upsellButton["aria-describedby"]},this.props.upsellButtonLabel)),(0,t.createElement)(_e,null),(0,t.createElement)(Ee,null,this.props.benefitsTitle),this.createBenefitsList(this.props.benefits)))}}Be.propTypes={title:l().node,benefits:l().array,benefitsTitle:l().node,description:l().node,upsellButton:l().object,upsellButtonText:l().string.isRequired,upsellButtonLabel:l().string,upsellButtonHasCaret:l().bool},Be.defaultProps={title:null,description:null,benefits:[],benefitsTitle:null,upsellButton:{href:"",className:"button button-primary"},upsellButtonLabel:"",upsellButtonHasCaret:!0};const Ce=Be,Le=(0,s.__)("Check your text on even more SEO criteria and get an enhanced keyphrase analysis, making it easier to optimize your content.","wordpress-seo"),Se=e=>{const{locationContext:r}=(0,x.useRootContext)(),o=(0,ge.addQueryArgs)(wpseoAdminL10n[e.buyLink],{context:r});return(0,t.createElement)(Ce,{title:(0,s.__)("Get more help with writing content that ranks","wordpress-seo"),description:e.description,benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,s.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:be(),upsellButtonText:(0,s.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,s.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:o,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,s.__)("1 year of premium support and updates included!","wordpress-seo")})};Se.propTypes={buyLink:l().string.isRequired,description:l().string},Se.defaultProps={description:Le};const Ie=Se;class Oe extends i.Component{constructor(e){super(e);const t=this.props.results;this.state={mappedResults:{}},null!==t&&(this.state={mappedResults:ie(t,this.props.keywordKey)}),this.handleMarkButtonClick=this.handleMarkButtonClick.bind(this),this.handleEditButtonClick=this.handleEditButtonClick.bind(this),this.handleResultsChange=this.handleResultsChange.bind(this),this.renderHighlightingUpsell=this.renderHighlightingUpsell.bind(this),this.createMarkButton=this.createMarkButton.bind(this)}componentDidUpdate(e){null!==this.props.results&&this.props.results!==e.results&&this.setState({mappedResults:ie(this.props.results,this.props.keywordKey)})}createMarkButton({ariaLabel:e,id:s,className:r,status:n,onClick:a,isPressed:l}){return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(o.IconButtonToggle,{marksButtonStatus:n,className:r,onClick:a,id:s,icon:"eye",pressed:l,ariaLabel:e}),this.props.shouldUpsellHighlighting&&(0,t.createElement)("div",{className:"yst-root"},(0,t.createElement)(me.Badge,{className:"yst-absolute yst-px-[3px] yst-py-[3px] yst--right-[6.5px] yst--top-[6.5px]",size:"small",variant:"upsell"},(0,t.createElement)(he,{className:"yst-w-2.5 yst-h-2.5 yst-shrink-0",role:"img","aria-hidden":!0,focusable:!1}))))}deactivateMarker(){this.props.setActiveMarker(null),this.props.setMarkerPauseStatus(!1),this.removeMarkers()}activateMarker(e,t){this.props.setActiveMarker(e),t()}handleMarkButtonClick(e,t){const s=this.props.keywordKey.length>0?`${this.props.keywordKey}:${e}`:e;this.props.activeAIFixesButton&&this.props.setActiveAIFixesButton(null),s===this.props.activeMarker?this.deactivateMarker():this.activateMarker(s,t)}handleResultsChange(e,t,s){const r=this.props.keywordKey.length>0?`${this.props.keywordKey}:${e}`:e;r===this.props.activeMarker&&(s?(0,q.isUndefined)(t)||this.activateMarker(r,t):this.deactivateMarker())}focusOnKeyphraseField(e){const t=this.props.keywordKey,s=""===t?"focus-keyword-input-"+e:"yoast-keyword-input-"+t+"-"+e,r=document.getElementById(s);r.focus(),r.scrollIntoView({behavior:"auto",block:"center",inline:"center"})}focusOnGooglePreviewField(e,t){let s;s="metaDescriptionKeyword"===e||"metaDescriptionLength"===e?"description":"titleWidth"===e||"keyphraseInSEOTitle"===e?"title":"slug";const r=document.getElementById("yoast-google-preview-"+s+"-"+t);r.focus(),r.scrollIntoView({behavior:"auto",block:"center",inline:"center"})}handleEditButtonClick(e){const t=this.props.location;"functionWordsInKeyphrase"!==e&&"keyphraseLength"!==e?(["metaDescriptionKeyword","metaDescriptionLength","titleWidth","keyphraseInSEOTitle","slugKeyword"].includes(e)&&this.handleGooglePreviewFocus(t,e),(0,ye.doAction)("yoast.focus.input",e)):this.focusOnKeyphraseField(t)}handleGooglePreviewFocus(e,t){if("sidebar"===e)document.getElementById("yoast-search-appearance-modal-open-button").click(),setTimeout((()=>this.focusOnGooglePreviewField(t,"modal")),500);else{const s=document.getElementById("yoast-snippet-editor-metabox");s&&"false"===s.getAttribute("aria-expanded")?(s.click(),setTimeout((()=>this.focusOnGooglePreviewField(t,e)),100)):this.focusOnGooglePreviewField(t,e)}}removeMarkers(){window.YoastSEO.analysis.applyMarks(new oe.Paper("",{}),[])}renderHighlightingUpsell(e,r){const o=(0,s.__)("Highlight areas of improvement in your text, no more searching for a needle in a haystack, straight to optimizing! Now also in Elementor!","wordpress-seo");return e&&(0,t.createElement)(L,{title:(0,s.__)("Unlock Premium SEO analysis","wordpress-seo"),onRequestClose:r,additionalClassName:"",className:`${B} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,id:"yoast-premium-seo-analysis-highlighting-modal",shouldCloseOnClickOutside:!0},(0,t.createElement)(R,null,(0,t.createElement)(Ie,{buyLink:this.props.highlightingUpsellLink,description:o})))}render(){const{mappedResults:e}=this.state,{errorsResults:r,improvementsResults:o,goodResults:n,considerationsResults:a,problemsResults:l}=e,{upsellResults:c,resultCategoryLabels:d}=this.props,p={errors:(0,s.__)("Errors","wordpress-seo"),problems:(0,s.__)("Problems","wordpress-seo"),improvements:(0,s.__)("Improvements","wordpress-seo"),considerations:(0,s.__)("Considerations","wordpress-seo"),goodResults:(0,s.__)("Good results","wordpress-seo")},u=Object.assign(p,d);let m=this.props.marksButtonStatus;return"enabled"===m&&this.props.shortcodesForParsing.length>0&&(m="disabled"),(0,t.createElement)(i.Fragment,null,(0,t.createElement)(ue.ContentAnalysis,{errorsResults:r,problemsResults:l,upsellResults:c,improvementsResults:o,considerationsResults:a,goodResults:n,activeMarker:this.props.activeMarker,onMarkButtonClick:this.handleMarkButtonClick,onEditButtonClick:this.handleEditButtonClick,marksButtonClassName:this.props.marksButtonClassName,editButtonClassName:this.props.editButtonClassName,marksButtonStatus:m,headingLevel:3,keywordKey:this.props.keywordKey,isPremium:this.props.isPremium,resultCategoryLabels:u,onResultChange:this.handleResultsChange,shouldUpsellHighlighting:this.props.shouldUpsellHighlighting,renderAIFixesButton:this.props.renderAIFixesButton,renderHighlightingUpsell:this.renderHighlightingUpsell,markButtonFactory:this.createMarkButton}))}}Oe.propTypes={results:l().array,upsellResults:l().array,marksButtonClassName:l().string,editButtonClassName:l().string,marksButtonStatus:l().oneOf(["enabled","disabled","hidden"]),setActiveMarker:l().func.isRequired,setMarkerPauseStatus:l().func.isRequired,setActiveAIFixesButton:l().func.isRequired,activeMarker:l().string,activeAIFixesButton:l().string,keywordKey:l().string,location:l().string,isPremium:l().bool,resultCategoryLabels:l().shape({errors:l().string,problems:l().string,improvements:l().string,considerations:l().string,goodResults:l().string}),shortcodesForParsing:l().array,shouldUpsellHighlighting:l().bool,highlightingUpsellLink:l().string,renderAIFixesButton:l().func},Oe.defaultProps={results:null,upsellResults:[],marksButtonStatus:"enabled",marksButtonClassName:"",editButtonClassName:"",activeMarker:null,activeAIFixesButton:null,keywordKey:"",location:"",isPremium:!1,resultCategoryLabels:{},shortcodesForParsing:[],shouldUpsellHighlighting:!1,highlightingUpsellLink:"",renderAIFixesButton:()=>{}};const Ae=Oe,Me=(0,k.compose)([(0,E.withSelect)((e=>{const{getActiveMarker:t,getIsPremium:s,getShortcodesForParsing:r,getActiveAIFixesButton:o}=e("yoast-seo/editor");return{activeMarker:t(),isPremium:s(),shortcodesForParsing:r(),activeAIFixesButton:o()}})),(0,E.withDispatch)((e=>{const{setActiveMarker:t,setMarkerPauseStatus:s,setActiveAIFixesButton:r}=e("yoast-seo/editor");return{setActiveMarker:t,setMarkerPauseStatus:s,setActiveAIFixesButton:r}}))])(Ae);function Pe(e){return(0,q.isNil)(e)||(e/=10),function(e){switch(e){case"feedback":return{className:"na",screenReaderText:(0,s.__)("Feedback","wordpress-seo"),screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""};case"bad":return{className:"bad",screenReaderText:(0,s.__)("Needs improvement","wordpress-seo"),screenReaderReadabilityText:(0,s.__)("Needs improvement","wordpress-seo"),screenReaderInclusiveLanguageText:(0,s.__)("Needs improvement","wordpress-seo")};case"ok":return{className:"ok",screenReaderText:(0,s.__)("OK SEO score","wordpress-seo"),screenReaderReadabilityText:(0,s.__)("OK","wordpress-seo"),screenReaderInclusiveLanguageText:(0,s.__)("Potentially non-inclusive","wordpress-seo")};case"good":return{className:"good",screenReaderText:(0,s.__)("Good SEO score","wordpress-seo"),screenReaderReadabilityText:(0,s.__)("Good","wordpress-seo"),screenReaderInclusiveLanguageText:(0,s.__)("Good","wordpress-seo")};default:return{className:"loading",screenReaderText:"",screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""}}}(oe.interpreters.scoreToRating(e))}function Te({target:e,children:s}){return(0,t.createElement)(ce,{target:e},s)}Te.propTypes={target:l().string.isRequired,children:l().node.isRequired};const $e=d().span` + font-size: 1em; + font-weight: bold; + margin: 0 0 8px; + display: block; +`,Fe=d().div` + padding: 16px; +`,qe=d()(F)` + margin: -8px 0 -4px 4px; +`;class Ke extends i.Component{renderResults(e){return(0,t.createElement)(i.Fragment,null,(0,t.createElement)($e,null,(0,s.__)("Analysis results","wordpress-seo"),(0,t.createElement)(qe,{href:wpseoAdminL10n["shortlinks.readability_analysis_info"],className:"dashicons"},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,s.__)("Learn more about the readability analysis","wordpress-seo")))),(0,t.createElement)(Me,{results:this.props.results,upsellResults:e,marksButtonClassName:"yoast-tooltip yoast-tooltip-w",marksButtonStatus:this.props.marksButtonStatus,highlightingUpsellLink:"shortlinks.upsell.sidebar.highlighting_readability_analysis",shouldUpsellHighlighting:this.props.shouldUpsellHighlighting}))}getUpsellResults(e,t){let r=wpseoAdminL10n["shortlinks.upsell.metabox.word_complexity"];return"sidebar"===e&&(r=wpseoAdminL10n["shortlinks.upsell.sidebar.word_complexity"]),r=(0,ge.addQueryArgs)(r,{context:t}),function(){const e=oe.helpers.getLanguagesWithWordComplexity(),t=window.wpseoScriptData.metabox.contentLocale,s=oe.languageProcessing.getLanguage(t);return e.includes(s)}()?[{score:0,rating:"upsell",hasMarks:!1,id:"wordComplexity",text:(0,s.sprintf)( +/* Translators: %1$s is a span tag that adds styling to 'Word complexity', %2$s is a closing span tag. + %3$s is an anchor tag with a link to yoast.com, %4$s is a closing anchor tag.*/ +(0,s.__)("%1$sWord complexity%2$s: Is your vocabulary suited for a larger audience? %3$sYoast SEO Premium will tell you!%4$s","wordpress-seo"),"","",``,""),markerId:"wordComplexity"}]:[]}render(){const e=Pe(this.props.overallScore);return(0,q.isNil)(this.props.overallScore)&&(e.className="loading"),(0,t.createElement)(x.LocationConsumer,null,(r=>(0,t.createElement)(x.RootContext.Consumer,null,(({locationContext:o})=>{let n=[];return this.props.shouldUpsell&&(n=this.getUpsellResults(r,o)),"sidebar"===r?(0,t.createElement)(b,{title:(0,s.__)("Readability analysis","wordpress-seo"),titleScreenReaderText:e.screenReaderReadabilityText,prefixIcon:le(e.className),prefixIconCollapsed:le(e.className),id:`yoast-readability-analysis-collapsible-${r}`},this.renderResults(n)):"metabox"===r?(0,t.createElement)(Te,{target:"wpseo-metabox-readability-root"},(0,t.createElement)(Fe,null,(0,t.createElement)(pe,{target:"wpseo-readability-score-icon",scoreIndicator:e.className}),this.renderResults(n))):void 0}))))}}Ke.propTypes={results:l().array.isRequired,marksButtonStatus:l().string.isRequired,overallScore:l().number,shouldUpsell:l().bool,shouldUpsellHighlighting:l().bool},Ke.defaultProps={overallScore:null,shouldUpsell:!1,shouldUpsellHighlighting:!1};const Ue=(0,E.withSelect)((e=>{const{getReadabilityResults:t,getMarkButtonStatus:s}=e("yoast-seo/editor");return{...t(),marksButtonStatus:s()}}))(Ke);function ze(e){return ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ze(e)}function He(){return(0,q.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}const je=d().p` + color: ${$.colors.$color_upsell_text}; + margin: 0; + padding-right: 8px; +`,De=d().div` + font-size: 1em; + display: flex; + flex-direction: ${e=>"horizontal"===e.alignment?"row":"column"}; + ${(0,n.getDirectionalStyle)("border-left","border-right")}: 4px solid ${$.colors.$color_pink_dark}; + margin: 16px 0; + padding: 0 0 0 8px; + max-width: 600px; + + > ${je} { + margin-bottom: ${e=>"vertical"===e.alignment&&"16px"}; + } +`,Ye=d()(o.SvgIcon)` + margin: ${(0,n.getDirectionalStyle)("0 0 0 4px","0 4px 0 0")}; + transform: ${(0,n.getDirectionalStyle)("rotate(0deg)","rotate(180deg)")}; +`,We=(0,n.makeOutboundLink)(o.UpsellLinkButton),Ge=e=>{const{alignment:r,url:o}=e;return(0,t.createElement)(De,{alignment:r},(0,t.createElement)(je,null,(0,s.sprintf)(/* translators: %s expands to Yoast SEO Premium */ +(0,s.__)("%s looks at more than just your main keyword. It analyzes different word forms, plurals, and past tenses. This helps your website perform even better in searches!","wordpress-seo"),"Yoast SEO Premium")),(0,t.createElement)("div",null,(0,t.createElement)(We,{href:o,className:"UpsellLinkButton","data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2"},(0,s.sprintf)(/* translators: %s expands to Premium */ +(0,s.__)("Go %s!","wordpress-seo"),"Premium"),(0,t.createElement)(Ye,{icon:"arrow-right",size:"8px",color:$.colors.$color_black}))))};Ge.propTypes={alignment:l().oneOf(["horizontal","vertical"]),url:l().string.isRequired},Ge.defaultProps={alignment:"vertical"};const Ve=Ge,Qe=e=>(0,t.createElement)(Ce,{title:(0,s.__)("Write more natural and engaging content","wordpress-seo"),description:(0,s.sprintf)(/* translators: %s expands to "Yoast SEO Premium" */ +(0,s.__)("Synonyms help users understand your copy better. It’s easier to read for both users and Google. In %s, you can add synonyms for your focus keyphrase, and we’ll help you optimize for them.","wordpress-seo"),"Yoast SEO Premium"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,s.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:be(),upsellButtonText:(0,s.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,s.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:e.buyLink,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,s.__)("1 year free support and updates included!","wordpress-seo")});Qe.propTypes={buyLink:l().string.isRequired};const Ze=Qe,Je=e=>(0,t.createElement)(Ce,{title:(0,s.__)("Reach a wider audience","wordpress-seo"),description:(0,s.__)("Get help optimizing for up to 5 related keyphrases. This helps you reach a wider audience and get more traffic.","wordpress-seo"),benefitsTitle:/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,s.sprintf)("%s also gives you:","Yoast SEO Premium"),benefits:be(),upsellButtonText:(0,s.sprintf)(/* translators: %s expands to 'Yoast SEO Premium'. */ +(0,s.__)("Unlock with %s","wordpress-seo"),"Yoast SEO Premium"),upsellButton:{href:e.buyLink,className:"yoast-button-upsell",rel:null,"data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2","data-action":"load-nfd-ctb"},upsellButtonLabel:(0,s.__)("1 year free support and updates included!","wordpress-seo")});Je.propTypes={buyLink:l().string.isRequired};const Xe=Je,et=d().button` + // Increase specificity to override WP rules. + && { + display: flex; + align-items: center; + } + + .yoast-svg-icon { + margin: 1px 7px 0 0; + fill: currentColor; + } +`,tt={open:(0,s.__)("Open","wordpress-seo"),heading:"",closeIconButton:(0,s.__)("Close","wordpress-seo"),closeButton:""},st=e=>{const[s,r]=(0,i.useState)(!1),n=Object.assign({},tt,e.labels),a=(0,i.useCallback)((()=>r(!1)),[]),l=(0,i.useCallback)((()=>r(!0)),[]);return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(et,{type:"button",onClick:l,className:`${e.classes.openButton} yoast-modal__button-open`},e.openButtonIcon&&(0,t.createElement)(o.SvgIcon,{icon:e.openButtonIcon,size:"13px"}),n.open),s&&(0,t.createElement)(L,{onRequestClose:a,className:e.className,title:n.heading},e.children))};st.propTypes={openButtonIcon:l().string,labels:l().shape({open:l().string,modalAriaLabel:l().string.isRequired,heading:l().string,closeIconButton:l().string,closeButton:l().string}).isRequired,classes:l().shape({openButton:l().string,closeIconButton:l().string,closeButton:l().string}),className:l().string,children:l().any.isRequired},st.defaultProps={className:B,openButtonIcon:"",classes:{}};const rt=st;function ot({location:e}){return(0,t.createElement)(r.Slot,{name:`yoast-synonyms-${e}`})}ot.propTypes={location:l().string.isRequired},l().string.isRequired;const nt=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),at=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),lt=({learnMoreLink:e,thumbnail:r,wistiaEmbedPermission:o,upsellLink:n,isProductCopy:a,title:l,upsellLabel:c,newToText:d,bundleNote:p})=>{const{onClose:u,initialFocus:m}=(0,me.useModalContext)(),h={a:(0,t.createElement)(pt,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,t.createElement)(at,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})};return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,t.createElement)("div",{className:"yst-relative yst-w-full"},(0,t.createElement)($t,{videoId:"vmrahpfjxp",thumbnail:r,wistiaEmbedPermission:o}),(0,t.createElement)(me.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,t.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,t.createElement)("span",{className:"yst-logo-icon"}),d))),(0,t.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,t.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},l),(0,t.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},a?(0,i.createInterpolateElement)((0,s.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,s.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for product titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),h):(0,i.createInterpolateElement)((0,s.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,s.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),h))),(0,t.createElement)("div",{className:"yst-w-full yst-flex yst-mt-10"},(0,t.createElement)(me.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:n,target:"_blank",ref:m},(0,t.createElement)(nt,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),c,(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,s.__)("(Opens in a new browser tab)","wordpress-seo")))),p,(0,t.createElement)(me.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:u},(0,s.__)("Close","wordpress-seo"))))};lt.propTypes={learnMoreLink:l().string.isRequired,upsellLink:l().string.isRequired,thumbnail:l().shape({src:l().string.isRequired,width:l().string,height:l().string}).isRequired,wistiaEmbedPermission:l().shape({value:l().bool.isRequired,status:l().string.isRequired,set:l().func.isRequired}).isRequired,title:l().string,upsellLabel:l().string,newToText:l().string,isProductCopy:l().bool,bundleNote:l().oneOfType([l().string,l().element])},lt.defaultProps={title:(0,s.__)("Use AI to write your titles & meta descriptions!","wordpress-seo"),upsellLabel:(0,s.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,s.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),newToText:"Yoast SEO Premium",isProductCopy:!1,bundleNote:""};var it;function ct(){return ct=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",ct({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1000 1000"},e),it||(it=t.createElement("path",{fill:"#fff",d:"M500 0C223.9 0 0 223.9 0 500s223.9 500 500 500 500-223.9 500-500S776.1 0 500 0Zm87.2 412.4c0-21.9 4.3-40.2 13.1-54.4s24-27.1 45.9-38.2l10.1-4.9c17.8-9 22.4-16.7 22.4-26 0-11.1-9.5-19.1-25-19.1-18.3 0-32.2 9.5-41.8 28.9l-24.7-24.8c5.4-11.6 14.1-20.9 25.8-28.1a70.8 70.8 0 0 1 38.9-11.1c17.8 0 33.3 4.6 45.9 14.2s19.4 22.7 19.4 39.4c0 26.6-15 42.9-43.1 57.3l-15.7 8c-16.8 8.5-25.1 16-27.4 29.4h85.4v35.4H587.2Zm-82.1 373.3c-157.8 0-285.7-127.9-285.7-285.7s127.9-285.7 285.7-285.7a286.4 286.4 0 0 1 55.9 5.5l-55.9 116.9c-90 0-163.3 73.3-163.3 163.3s73.3 163.3 163.3 163.3a162.8 162.8 0 0 0 106.4-39.6l61.8 107.2a283.9 283.9 0 0 1-168.2 54.8ZM705 704.1l-70.7-122.5H492.9l70.7-122.4H705l70.7 122.4Z"}))),pt=({href:e,children:r,...o})=>(0,t.createElement)(me.Link,{target:"_blank",rel:"noopener noreferrer",...o,href:e},r,(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,s.__)("(Opens in a new browser tab)","wordpress-seo")));pt.propTypes={href:l().string.isRequired,children:l().node},pt.defaultProps={children:null};const ut=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 8l4 4m0 0l-4 4m4-4H3"}))}));var mt,ht,yt;function gt(){return gt=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",gt({xmlns:"http://www.w3.org/2000/svg",id:"star-rating-half_svg__Layer_1","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),mt||(mt=t.createElement("defs",null,t.createElement("style",null,".star-rating-half_svg__cls-1{fill:#fbbf24}"))),ht||(ht=t.createElement("path",{d:"M250 392.04 98.15 471.87l29-169.09L4.3 183.03l169.77-24.67L250 4.52l75.93 153.84 169.77 24.67-122.85 119.75 29 169.09L250 392.04z",className:"star-rating-half_svg__cls-1"})),yt||(yt=t.createElement("path",{d:"m250 9.04 73.67 149.27.93 1.88 2.08.3 164.72 23.94-119.19 116.19-1.51 1.47.36 2.07 28.14 164.06-147.34-77.46-1.86-1-1.86 1-147.34 77.46 28.14-164.06.36-2.07-1.51-1.47L8.6 184.43l164.72-23.9 2.08-.3.93-1.88L250 9.04m0-9-77.25 156.49L0 181.64l125 121.89-29.51 172L250 394.3l154.51 81.23-29.51-172 125-121.89-172.75-25.11L250 0Z",className:"star-rating-half_svg__cls-1"})),t.createElement("path",{d:"m500 181.64-172.75-25.11L250 0v394.3l154.51 81.23L375 303.48l125-121.84z",style:{fill:"#f3f4f6"}}));function wt(){return wt=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",wt({xmlns:"http://www.w3.org/2000/svg","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),t.createElement("path",{d:"m250 0 77.25 156.53L500 181.64 375 303.48l29.51 172.05L250 394.3 95.49 475.53 125 303.48 0 181.64l172.75-25.11L250 0z",style:{fill:"#fbbf24"}}));var kt,Et,xt,_t,vt,Nt,Rt,Bt,Ct;function Lt(){return Lt=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",Lt({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 500 500"},e),kt||(kt=t.createElement("path",{fill:"#a4286a",d:"M80 0h340a80 80 0 0 1 80 80v420H80a80 80 0 0 1-80-80V80A80 80 0 0 1 80 0z"})),Et||(Et=t.createElement("path",{fill:"#6c2548",d:"M437.61 2 155.89 500H500V80a80 80 0 0 0-62.39-78z"})),xt||(xt=t.createElement("path",{fill:"#fff",d:"M74.4 337.3v34.9c21.6-.9 38.5-8 52.8-22.5s27.4-38 39.9-72.9l92.6-248h-44.8L140.3 236l-37-116.2h-41l54.4 139.8a57.54 57.54 0 0 1 0 41.8c-5.5 14.2-15.4 30.9-42.3 35.9z"})),_t||(_t=t.createElement("circle",{cx:368.33,cy:124.68,r:97.34,fill:"#9fda4f",transform:"rotate(-45 368.335 124.68)"})),vt||(vt=t.createElement("path",{fill:"#77b227",d:"m416.2 39.93-95.74 169.51A97.34 97.34 0 1 0 416.2 39.93z"})),Nt||(Nt=t.createElement("path",{fill:"#fec228",d:"m294.78 254.75-.15-.08-.13-.07a63.6 63.6 0 0 0-62.56 110.76h.13a63.6 63.6 0 0 0 62.71-110.67z"})),Rt||(Rt=t.createElement("path",{fill:"#f49a00",d:"m294.5 254.59-62.56 110.76a63.6 63.6 0 1 0 62.56-110.76z"})),Bt||(Bt=t.createElement("path",{fill:"#ff4e47",d:"M222.31 450.07A38.16 38.16 0 0 0 203 416.83a38.18 38.18 0 1 0 19.41 33.27z"})),Ct||(Ct=t.createElement("path",{fill:"#ed261f",d:"m202.9 416.8-37.54 66.48a38.17 38.17 0 0 0 37.54-66.48z"}))),It=({link:e,linkProps:r,promotions:o})=>{const n=(0,i.useMemo)((()=>(0,s.__)("Use AI to generate titles and meta descriptions, automatically redirect deleted pages, get 24/7 support, and much, much more!","wordpress-seo")),[]),a=(0,i.createInterpolateElement)((0,s.sprintf)(/* translators: %1$s and %2$s expand to a span wrap to avoid linebreaks. %3$s expands to "Yoast SEO Premium". */ +(0,s.__)("%1$sGet%2$s %3$s","wordpress-seo"),"","","Yoast SEO Premium"),{nowrap:(0,t.createElement)("span",{className:"yst-whitespace-nowrap"})}),l=o.includes("black-friday-2023-promotion"),c=(0,i.createInterpolateElement)((0,s.sprintf)(/* translators: %1$s and %2$s expand to strong tags. */ +(0,s.__)("%1$sSAVE 30%%%2$s on your 12 month subscription","wordpress-seo"),"",""),{strong:(0,t.createElement)("strong",null)});return(0,t.createElement)("div",{className:"yst-p-6 yst-rounded-lg yst-text-white yst-bg-primary-500 yst-shadow"},(0,t.createElement)("figure",{className:"yst-logo-square yst-w-16 yst-h-16 yst-mx-auto yst-overflow-hidden yst-border yst-border-white yst-rounded-xl yst-rounded-br-none yst-relative yst-z-10 yst-mt-[-2.6rem]"},(0,t.createElement)(St,null)),l&&(0,t.createElement)("div",{className:"sidebar__sale_banner_container"},(0,t.createElement)("div",{className:"sidebar__sale_banner"},(0,t.createElement)("span",{className:"banner_text"},(0,s.__)("BLACK FRIDAY - 30% OFF","wordpress-seo")))),(0,t.createElement)(me.Title,{as:"h2",className:"yst-mt-6 yst-text-base yst-font-extrabold yst-text-white"},a),(0,t.createElement)("p",{className:"yst-mt-2"},n),l&&(0,t.createElement)("div",{className:"yst-text-center yst-border-t-[1px] yst-border-white yst-italic yst-mt-3"},(0,t.createElement)("p",{className:"yst-text-[10px] yst-my-3 yst-mx-0"},c)),(0,t.createElement)(me.Button,{as:"a",variant:"upsell",href:e,target:"_blank",rel:"noopener",className:"yst-flex yst-justify-center yst-gap-2 yst-mt-4 focus:yst-ring-offset-primary-500",...r},(0,t.createElement)("span",null,l?(0,s.__)("Claim your 30% off now!","wordpress-seo"):a),(0,t.createElement)(ut,{className:"yst-w-4 yst-h-4 yst-icon-rtl"})),(0,t.createElement)("p",{className:"yst-text-center yst-text-xs yst-mx-2 yst-font-light yst-leading-5 yst-mt-2"},(0,s.__)("Only $/€/£99 per year (ex VAT)","wordpress-seo"),(0,t.createElement)("br",null),(0,s.__)("30-day money back guarantee.","wordpress-seo")),(0,t.createElement)("hr",{className:"yst-border-t yst-border-primary-300 yst-my-4"}),(0,t.createElement)("a",{className:"yst-block yst-mt-4 yst-no-underline",href:"https://www.g2.com/products/yoast-yoast/reviews",target:"_blank",rel:"noopener noreferrer"},(0,t.createElement)("span",{className:"yst-font-medium yst-text-white hover:yst-underline"},(0,s.__)("Read reviews from real users","wordpress-seo")),(0,t.createElement)("span",{className:"yst-flex yst-gap-2 yst-mt-2 yst-items-center"},(0,t.createElement)(dt,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)("span",{className:"yst-flex yst-gap-1"},(0,t.createElement)(ft,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(ft,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(ft,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(ft,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(bt,{className:"yst-w-5 yst-h-5"})),(0,t.createElement)("span",{className:"yst-text-sm yst-font-semibold yst-text-white"},"4.6 / 5"))))};It.propTypes={link:l().string.isRequired,linkProps:l().object,promotions:l().array},It.defaultProps={linkProps:{},promotions:[]},l().node.isRequired;const Ot=window.yoast.reactHelmet,At="loading",Mt="showPlay",Pt="askPermission",Tt="isPlaying",$t=({videoId:e,thumbnail:r,wistiaEmbedPermission:o})=>{const[n,a]=(0,i.useState)(o.value?Tt:Mt),l=(0,i.useCallback)((()=>a(Tt)),[a]),c=(0,i.useCallback)((()=>{o.value?l():a(Pt)}),[o.value,l,a]),d=(0,i.useCallback)((()=>a(Mt)),[a]),p=(0,i.useCallback)((()=>{o.set(!0),l()}),[o.set,l]);return(0,t.createElement)(t.Fragment,null,o.value&&(0,t.createElement)(Ot.Helmet,null,(0,t.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,t.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},n===Mt&&(0,t.createElement)("button",{type:"button",className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:c},(0,t.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...r})),n===Pt&&(0,t.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,t.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},o.status===At&&(0,t.createElement)(me.Spinner,null),o.status!==At&&(0,s.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,s.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo"),"Yoast SEO","Wistia")),(0,t.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,t.createElement)(me.Button,{type:"button",variant:"secondary",onClick:d,disabled:o.status===At},(0,s.__)("Deny","wordpress-seo")),(0,t.createElement)(me.Button,{type:"button",variant:"primary",onClick:p,disabled:o.status===At},(0,s.__)("Allow","wordpress-seo")))),o.value&&n===Tt&&(0,t.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===e&&(0,t.createElement)(me.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==e&&(0,t.createElement)("div",{className:`wistia_embed wistia_async_${e} videoFoam=true`}))))};$t.propTypes={videoId:l().string.isRequired,thumbnail:l().shape({src:l().string.isRequired,width:l().string,height:l().string}).isRequired,wistiaEmbedPermission:l().shape({value:l().bool.isRequired,status:l().string.isRequired,set:l().func.isRequired}).isRequired};const Ft=({learnMoreLink:e,thumbnail:r,wistiaEmbedPermission:o,upsellLink:n,upsellLabel:a})=>{const{onClose:l,initialFocus:c}=(0,me.useModalContext)(),d={a:(0,t.createElement)(pt,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,t.createElement)(at,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"}),br:(0,t.createElement)("br",null)};return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,t.createElement)("div",{className:"yst-relative yst-w-full"},(0,t.createElement)($t,{videoId:"vun9z1dpfh",thumbnail:r,wistiaEmbedPermission:o}),(0,t.createElement)(me.Badge,{className:"yst-absolute yst-right-0 yst-mr-4 yst-text-center yst-justify-center",variant:"info",style:{top:"-8px"}},(0,s.__)("Beta","wordpress-seo-premium"))),(0,t.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,t.createElement)("span",{className:"yst-logo-icon"}),"Yoast SEO Premium"))),(0,t.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,t.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,s.sprintf)(/* translators: %s: Expands to "Yoast AI" */ +(0,s.__)("Optimize your SEO content with %s","wordpress-seo"),"Yoast AI")),(0,t.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,i.createInterpolateElement)((0,s.sprintf)(/* translators: %1$s is a break tag; %2$s and %3$s are anchor tags; %4$s is the arrow icon. */ +(0,s.__)("Make content editing a breeze! Optimize your SEO content with quick, actionable suggestions at the click of a button.%1$s%2$sLearn more%3$s%4$s","wordpress-seo"),"
            ","","",""),d))),(0,t.createElement)("div",{className:"yst-w-full yst-flex yst-mt-6"},(0,t.createElement)(me.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:n,target:"_blank",ref:c},(0,t.createElement)(nt,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),a,(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,s.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,t.createElement)(me.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:l},(0,s.__)("Close","wordpress-seo"))))};Ft.propTypes={learnMoreLink:l().string.isRequired,upsellLink:l().string.isRequired,thumbnail:l().shape({src:l().string.isRequired,width:l().string,height:l().string}).isRequired,wistiaEmbedPermission:l().shape({value:l().bool.isRequired,status:l().string.isRequired,set:l().func.isRequired}).isRequired,upsellLabel:l().string},Ft.defaultProps={upsellLabel:(0,s.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,s.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")};const qt="yoast-seo/editor",Kt=()=>{const e=(0,E.useSelect)((e=>e(qt).selectLink("https://yoa.st/ai-fix-assessments-upsell-learn-more")),[]),r={upsellLink:(0,E.useSelect)((e=>e(qt).selectLink("https://yoa.st/ai-fix-assessments-upsell")),[]),title:(0,s.__)("Fix assessments with AI!","wordpress-seo"),upsellLabel:(0,s.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,s.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")},o=(0,E.useSelect)((e=>e(qt).selectImageLink("ai-fix-assessments-thumbnail.png")),[]),n=(0,i.useMemo)((()=>({src:o,width:"432",height:"244"})),[o]),a=(0,E.useSelect)((e=>e(qt).selectWistiaEmbedPermissionValue()),[]),l=(0,E.useSelect)((e=>e(qt).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:c}=(0,E.useDispatch)(qt),d=(0,i.useMemo)((()=>({value:a,status:l,set:c})),[a,l,c]);return(0,t.createElement)(Ft,{learnMoreLink:e,thumbnail:n,wistiaEmbedPermission:d,...r})},Ut=e=>{let t=[...e];return e.forEach((e=>{e.innerBlocks&&e.innerBlocks.length>0&&(t=[...t,...Ut(e.innerBlocks)])})),t},zt=({id:e,isPremium:r})=>{const n=e+"AIFixes",[a,,,l,c]=(0,me.useToggleState)(!1),d=(0,E.useSelect)((e=>e("yoast-seo/editor").getActiveAIFixesButton()),[]),p=(0,E.useSelect)((e=>e("yoast-seo/editor").getActiveMarker()),[]),{setActiveAIFixesButton:u,setActiveMarker:m,setMarkerPauseStatus:h,setMarkerStatus:y}=(0,E.useDispatch)("yoast-seo/editor"),g=(0,i.useRef)(null),[b,w]=(0,i.useState)(""),f=(0,s.__)("Optimize with AI","wordpress-seo"),k=(0,s.__)("Please switch to the visual editor to optimize with AI.","wordpress-seo"),x=d===n,{isEnabled:_,ariaLabel:v}=(0,E.useSelect)((e=>{if(null!==d&&!x)return{isEnabled:!1,ariaLabel:null};const t=e("yoast-seo/editor").getDisabledAIFixesButtons();if(Object.keys(t).includes(n))return{isEnabled:!1,ariaLabel:t[n]};if("visual"!==e("core/edit-post").getEditorMode())return{isEnabled:!1,ariaLabel:k};const s=Ut(e("core/block-editor").getBlocks()).every((t=>"visual"===e("core/block-editor").getBlockMode(t.clientId)));return{isEnabled:s,ariaLabel:s?f:k}}),[x,d]),N=()=>{p&&(m(null),h(!1),window.YoastSEO.analysis.applyMarks(new oe.Paper("",{}),[])),n===d?(u(null),y("enabled")):(u(n),y("disabled")),w("")},R=(0,i.useCallback)((()=>{r?((0,ye.doAction)("yoast.ai.fixAssessments",n),N()):l()}),[N,l]),B=(0,i.useCallback)((()=>{v&&w("yoast-tooltip yoast-tooltip-multiline "+(_?"yoast-tooltip-w":"yoast-tooltip-nw"))}),[_,v]),C=(0,i.useCallback)((()=>{w("")}),[]);return(0,t.createElement)(o.IconAIFixesButton,{onClick:R,ariaLabel:v,onPointerEnter:B,onPointerLeave:C,id:n,className:`ai-button ${b}`,pressed:x,disabled:!_},!r&&(0,t.createElement)(he,{className:"yst-fixes-button__lock-icon yst-text-amber-900"}),(0,t.createElement)(o.SparklesIcon,{pressed:x}),a&&(0,t.createElement)(me.Modal,{className:"yst-introduction-modal",isOpen:a,onClose:c,initialFocus:g},(0,t.createElement)(me.Modal.Panel,{className:"yst-max-w-lg yst-p-0 yst-rounded-3xl yst-introduction-modal-panel"},(0,t.createElement)(Kt,{onClose:c,focusElementRef:g}))))};zt.propTypes={id:l().string.isRequired,isPremium:l().bool},zt.defaultProps={isPremium:!1};const Ht=zt,jt=d().span` + font-size: 1em; + font-weight: bold; + margin: 1.5em 0 1em; + display: block; +`;class Dt extends i.Component{constructor(...e){var s,r,o,n,a;super(...e),s=this,o=(e,s)=>{const r=He().isPremium;if(!r||this.props.isAiFeatureEnabled)return e&&window.wpseoScriptData&&"1"===window.wpseoScriptData.isBlockEditor&&!this.props.isElementor&&!document.body.classList.contains("elementor-editor-active")&&(0,t.createElement)(Ht,{id:s,isPremium:r})},n=r="renderAIFixesButton",a=function(e,t){if("object"!=ze(e)||!e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var r=s.call(e,"string");if("object"!=ze(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(n),(r="symbol"==ze(a)?a:String(a))in s?Object.defineProperty(s,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):s[r]=o}renderSynonymsUpsell(e,r){const o={className:`${B} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,classes:{openButton:"wpseo-keyword-synonyms button-link"},labels:{open:"+ "+(0,s.__)("Add synonyms","wordpress-seo"),modalAriaLabel:(0,s.__)("Add synonyms","wordpress-seo"),heading:(0,s.__)("Add synonyms","wordpress-seo")}},n=wpseoAdminL10n["sidebar"===e.toLowerCase()?"shortlinks.upsell.sidebar.focus_keyword_synonyms_button":"shortlinks.upsell.metabox.focus_keyword_synonyms_button"];return(0,t.createElement)(rt,{...o},(0,t.createElement)(R,null,(0,t.createElement)(Ze,{buyLink:(0,ge.addQueryArgs)(n,{context:r})})))}renderMultipleKeywordsUpsell(e,r){const o={className:`${B} yoast-gutenberg-modal__box yoast-gutenberg-modal__no-padding`,classes:{openButton:"wpseo-multiple-keywords button-link"},labels:{open:"+ "+(0,s.__)("Add related keyphrase","wordpress-seo"),modalAriaLabel:(0,s.__)("Add related keyphrases","wordpress-seo"),heading:(0,s.__)("Add related keyphrases","wordpress-seo")}},n=wpseoAdminL10n["sidebar"===e.toLowerCase()?"shortlinks.upsell.sidebar.focus_keyword_additional_button":"shortlinks.upsell.metabox.focus_keyword_additional_button"];return(0,t.createElement)(rt,{...o},(0,t.createElement)(R,null,(0,t.createElement)(Xe,{buyLink:(0,ge.addQueryArgs)(n,{context:r})})))}renderWordFormsUpsell(e,s){let r="sidebar"===e?wpseoAdminL10n["shortlinks.upsell.sidebar.morphology_upsell_sidebar"]:wpseoAdminL10n["shortlinks.upsell.sidebar.morphology_upsell_metabox"];return r=(0,ge.addQueryArgs)(r,{context:s}),(0,t.createElement)(Ve,{url:r,alignment:"sidebar"===e?"vertical":"horizontal"})}renderTabIcon(e,s){return"metabox"!==e?null:(0,t.createElement)(pe,{target:"wpseo-seo-score-icon",scoreIndicator:s})}getUpsellResults(e,t){let r=wpseoAdminL10n["shortlinks.upsell.metabox.keyphrase_distribution"];return"sidebar"===e&&(r=wpseoAdminL10n["shortlinks.upsell.sidebar.keyphrase_distribution"]),r=(0,ge.addQueryArgs)(r,{context:t}),[{score:0,rating:"upsell",hasMarks:!1,hasJumps:!1,id:"keyphraseDistribution",text:(0,s.sprintf)( +/* Translators: %1$s is a span tag that adds styling to 'Keyphrase distribution', %2$s is a closing span tag. + %3%s is an anchor tag with a link to yoast.com, %4$s is a closing anchor tag.*/ +(0,s.__)("%1$sKeyphrase distribution%2$s: Have you evenly distributed your focus keyphrase throughout the whole text? %3$sYoast SEO Premium will tell you!%4$s","wordpress-seo"),"","",``,""),markerId:"keyphraseDistribution"}]}render(){const e=Pe(this.props.overallScore),r=He().isPremium;return"loading"!==e.className&&""===this.props.keyword&&(e.className="na",e.screenReaderReadabilityText=(0,s.__)("Enter a focus keyphrase to calculate the SEO score","wordpress-seo")),(0,t.createElement)(x.LocationConsumer,null,(o=>(0,t.createElement)(x.RootContext.Consumer,null,(({locationContext:n})=>{const a="metabox"===o?y:b;let l=[];return this.props.shouldUpsell&&(l=this.getUpsellResults(o,n)),(0,t.createElement)(i.Fragment,null,(0,t.createElement)(a,{title:r?(0,s.__)("Premium SEO analysis","wordpress-seo"):(0,s.__)("SEO analysis","wordpress-seo"),titleScreenReaderText:e.screenReaderReadabilityText,prefixIcon:le(e.className),prefixIconCollapsed:le(e.className),subTitle:this.props.keyword,id:`yoast-seo-analysis-collapsible-${o}`},(0,t.createElement)(ot,{location:o}),this.props.shouldUpsell&&(0,t.createElement)(i.Fragment,null,this.renderSynonymsUpsell(o,n),this.renderMultipleKeywordsUpsell(o,n)),this.props.shouldUpsellWordFormRecognition&&this.renderWordFormsUpsell(o,n),(0,t.createElement)(jt,null,(0,s.__)("Analysis results","wordpress-seo")),(0,t.createElement)(Me,{results:this.props.results,upsellResults:l,marksButtonClassName:"yoast-tooltip yoast-tooltip-w",editButtonClassName:"yoast-tooltip yoast-tooltip-w",marksButtonStatus:this.props.marksButtonStatus,location:o,shouldUpsellHighlighting:this.props.shouldUpsellHighlighting,highlightingUpsellLink:"shortlinks.upsell.sidebar.highlighting_seo_analysis",renderAIFixesButton:this.renderAIFixesButton})),this.renderTabIcon(o,e.className))}))))}}Dt.propTypes={results:l().array,marksButtonStatus:l().string,keyword:l().string,shouldUpsell:l().bool,shouldUpsellWordFormRecognition:l().bool,overallScore:l().number,shouldUpsellHighlighting:l().bool,isElementor:l().bool,isAiFeatureEnabled:l().bool},Dt.defaultProps={results:[],marksButtonStatus:null,keyword:"",shouldUpsell:!1,shouldUpsellWordFormRecognition:!1,overallScore:null,shouldUpsellHighlighting:!1,isElementor:!1,isAiFeatureEnabled:!1};const Yt=(0,E.withSelect)(((e,t)=>{const{getFocusKeyphrase:s,getMarksButtonStatus:r,getResultsForKeyword:o,getIsElementorEditor:n,getPreference:a}=e("yoast-seo/editor"),l=s();return{...o(l),marksButtonStatus:t.hideMarksButtons?"disabled":r(),keyword:l,isElementor:n(),isAiFeatureEnabled:a("isAiFeatureActive",!1)}}))(Dt);function Wt(){const e=He();return(0,q.get)(e,"multilingualPluginActive",!1)}const Gt=d().span` + font-size: 1em; + font-weight: bold; + margin: 0 0 8px; + display: block; +`,Vt=d().div` + padding: 16px; +`,Qt=d()(F)` + margin: -8px 0 -4px 4px; +`,Zt=d().p` + min-height: 24px; + margin: 12px 0 0 0; + padding: 0; + display: flex; + align-items: flex-start; +`,Jt=d()(o.SvgIcon)` + margin: 3px 11px 0 0; // icon 13 + 11 right margin = 24 for the 8px grid. +`,Xt=e=>{const r=wpseoAdminL10n["shortlinks.inclusive_language_analysis_info"];function n(){return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(Gt,null,(0,s.__)("Analysis results","wordpress-seo"),(0,t.createElement)(Qt,{href:r,className:"dashicons"},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,s.__)("Learn more about the inclusive language analysis","wordpress-seo")))),(0,t.createElement)(Me,{results:e.results,marksButtonClassName:"yoast-tooltip yoast-tooltip-w",marksButtonStatus:e.marksButtonStatus,resultCategoryLabels:{problems:(0,s.__)("Non-inclusive","wordpress-seo"),improvements:(0,s.__)("Potentially non-inclusive","wordpress-seo")},highlightingUpsellLink:"shortlinks.upsell.sidebar.highlighting_inclusive_analysis",shouldUpsellHighlighting:e.shouldUpsellHighlighting}))}const a=(0,i.createInterpolateElement)((0,s.sprintf)(/* Translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */ +(0,s.__)("%1$sInclusive language%2$s: We haven't detected any potentially non-inclusive phrases. Great work!","wordpress-seo"),"",""),{a:(0,t.createElement)("a",{href:r,target:"_blank",rel:"noreferrer"})});function l(){const e=(0,s.__)("We noticed that you are using a multilingual plugin. Please be aware that this analysis feedback is intended only for texts written in English.","wordpress-seo");return(0,t.createElement)(o.Alert,{type:"info"},e)}function c(){return(0,t.createElement)(i.Fragment,null,(0,t.createElement)(Gt,null,(0,s.__)("Analysis results","wordpress-seo"),(0,t.createElement)(Qt,{href:r,className:"dashicons"},(0,t.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,s.__)("Learn more about the inclusive language analysis","wordpress-seo")))),(0,t.createElement)(Zt,null,(0,t.createElement)(Jt,{icon:"circle",color:"#7ad03a",size:"13px"}),(0,t.createElement)("span",null,a)))}const d=Pe(e.overallScore);return(0,q.isNil)(e.overallScore)&&(d.className="loading"),(0,t.createElement)(x.LocationConsumer,null,(r=>{return"sidebar"===r?(o=e.results,a=d,(0,t.createElement)(b,{title:(0,s.__)("Inclusive language","wordpress-seo"),titleScreenReaderText:a.screenReaderInclusiveLanguageText,prefixIcon:le(a.className),prefixIconCollapsed:le(a.className),id:"yoast-inclusive-language-analysis-collapsible-sidebar"},Wt()?l():null,o.length>=1?n():c())):"metabox"===r?function(e,s){return(0,t.createElement)(ce,{target:"wpseo-metabox-inclusive-language-root"},(0,t.createElement)(Vt,null,(0,t.createElement)(pe,{target:"wpseo-inclusive-language-score-icon",scoreIndicator:s.className}),Wt()?l():null,e.length>=1?n():c()))}(e.results,d):void 0;var o,a}))};Xt.propTypes={results:l().array,marksButtonStatus:l().oneOf(["enabled","disabled","hidden"]).isRequired,overallScore:l().number,shouldUpsellHighlighting:l().bool},Xt.defaultProps={results:[],overallScore:null,shouldUpsellHighlighting:!1};const es=(0,E.withSelect)((e=>{const{getInclusiveLanguageResults:t,getMarkButtonStatus:s}=e("yoast-seo/editor");return{...t(),marksButtonStatus:s()}}))(Xt);window.yoast=window.yoast||{},window.yoast.externals=window.yoast.externals||{},window.yoast.externals.components={CollapsibleCornerstone:f,KeywordInput:re,ReadabilityAnalysis:Ue,SeoAnalysis:Yt,InclusiveLanguageAnalysis:es}})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals-contexts.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals-contexts.js new file mode 100644 index 00000000..413d43a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals-contexts.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:o=>{var t=o&&o.__esModule?()=>o.default:()=>o;return e.d(t,{a:t}),t},d:(o,t)=>{for(var n in t)e.o(t,n)&&!e.o(o,n)&&Object.defineProperty(o,n,{enumerable:!0,get:t[n]})},o:(e,o)=>Object.prototype.hasOwnProperty.call(e,o)};const o=window.wp.element,t=(0,o.createContext)("location"),n=t.Provider,r=t.Consumer,a=window.React,s=window.yoast.propTypes;var i=e.n(s);const c={},d=(0,o.createContext)(c),w=({children:e,context:o={}})=>(0,a.createElement)(d.Provider,{value:{...c,...o}},e);w.propTypes={children:i().node.isRequired,context:i().object};const l=w;window.yoast=window.yoast||{},window.yoast.externals=window.yoast.externals||{},window.yoast.externals.contexts={LocationContext:t,LocationProvider:n,LocationConsumer:r,RootContext:d,Root:l,useRootContext:()=>(0,o.useContext)(d)}})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals-redux.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals-redux.js new file mode 100644 index 00000000..8c05d6a9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals-redux.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{ADD_CHECKLIST:()=>Ee,CHANGE_COUNTRY:()=>Mt,CLEAR_FACEBOOK_IMAGE:()=>Kr,CLEAR_TWITTER_IMAGE:()=>Pr,CLOSE_EDITOR_MODAL:()=>et,CUSTOM_FIELD_RESULTS:()=>ar,DISMISS_ALERT:()=>pt,DISMISS_ALERT_SUCCESS:()=>Et,FIND_CUSTOM_FIELDS:()=>sr,GET_SCHEMA_ARTICLE_DATA:()=>Rt,GET_SCHEMA_PAGE_DATA:()=>At,HIDE_REPLACEMENT_VARIABLES:()=>lr,LOAD_ADVANCED_SETTINGS:()=>ee,LOAD_CORNERSTONE_CONTENT:()=>ke,LOAD_ESTIMATED_READING_TIME:()=>L,LOAD_FACEBOOK_PREVIEW:()=>Br,LOAD_FOCUS_KEYWORD:()=>it,LOAD_SNIPPET_EDITOR_DATA:()=>Er,LOAD_TWITTER_PREVIEW:()=>vr,MODAL_DISMISS:()=>Pt,MODAL_OPEN:()=>vt,MODAL_OPEN_NO_KEYPHRASE:()=>bt,NEW_REQUEST:()=>Ft,NO_DATA_FOUND:()=>Kt,OPEN_EDITOR_MODAL:()=>Ze,REFRESH:()=>dr,REMOVE_REPLACEMENT_VARIABLE:()=>ur,RUN_ANALYSIS:()=>ce,SET_ACTIVE_AI_FIXES_BUTTON:()=>V,SET_ACTIVE_MARKER:()=>H,SET_ADVANCED:()=>z,SET_ARTICLE_TYPE:()=>It,SET_BREADCRUMBS_TITLE:()=>J,SET_CANONICAL_URL:()=>Z,SET_CONTENT_IMAGE:()=>Qt,SET_CORNERSTONE_CONTENT:()=>We,SET_CURRENT_PROMOTIONS:()=>xe,SET_DISABLED_AI_FIXES_BUTTONS:()=>q,SET_DISMISSED_ALERTS:()=>gt,SET_EDITOR_DATA_CONTENT:()=>Ge,SET_EDITOR_DATA_EXCERPT:()=>qe,SET_EDITOR_DATA_IMAGE_URL:()=>Ye,SET_EDITOR_DATA_SLUG:()=>je,SET_EDITOR_DATA_TITLE:()=>Ve,SET_ESTIMATED_READING_TIME:()=>N,SET_FACEBOOK_DESCRIPTION:()=>Wr,SET_FACEBOOK_IMAGE:()=>Fr,SET_FACEBOOK_TITLE:()=>Ur,SET_FLESCH_READING_EASE:()=>M,SET_FOCUS_KEYWORD:()=>st,SET_IS_PREMIUM:()=>hn,SET_LOGIN_STATUS:()=>Bt,SET_MARKER_PAUSE_STATUS:()=>ut,SET_MARKER_STATUS:()=>ct,SET_NO_FOLLOW:()=>X,SET_NO_INDEX:()=>Q,SET_PAGE_TYPE:()=>wt,SET_POST_ID:()=>Dn,SET_PRIMARY_TAXONOMY:()=>St,SET_PROMINENT_WORDS:()=>k,SET_REQUEST_FAILED:()=>Ut,SET_REQUEST_LIMIT_REACHED:()=>Wt,SET_REQUEST_SUCCEEDED:()=>kt,SET_SETTINGS:()=>$t,SET_SHOPPING_DATA:()=>er,SET_TEXT_LENGTH:()=>U,SET_TWITTER_DESCRIPTION:()=>Dr,SET_TWITTER_IMAGE:()=>Or,SET_TWITTER_TITLE:()=>fr,SET_WARNING_MESSAGE:()=>Yr,SWITCH_MODE:()=>nr,TOGGLE_CORNERSTONE_CONTENT:()=>Ue,UPDATE_DATA:()=>ir,UPDATE_REPLACEMENT_VARIABLE:()=>or,UPDATE_REPLACEMENT_VARIABLES_BATCH:()=>cr,UPDATE_SETTINGS:()=>Xt,UPDATE_SHORTCODES_FOR_PARSING:()=>le,UPDATE_SNIPPET_DATA:()=>oe,UPDATE_WORDS_TO_HIGHLIGHT:()=>pr,WINCHER_MODAL_DISMISS:()=>$r,WINCHER_MODAL_OPEN:()=>Qr,WINCHER_MODAL_OPEN_NO_KEYPHRASE:()=>Xr,WINCHER_NEW_REQUEST:()=>nn,WINCHER_SET_AUTOMATICALLY_TRACK_ALL_REQUEST:()=>on,WINCHER_SET_KEYPHRASE_LIMIT_REACHED:()=>rn,WINCHER_SET_LOGIN_STATUS:()=>sn,WINCHER_SET_REQUEST_FAILED:()=>tn,WINCHER_SET_REQUEST_SUCCEEDED:()=>en,WINCHER_SET_SEO_PERFORMANCE_TRACKED_KEYPHRASES:()=>yn,WINCHER_SET_SEO_PERFORMANCE_TRACKING_FOR_KEYPHRASE:()=>Sn,WINCHER_SET_TRACK_ALL_REQUEST:()=>an,WINCHER_SET_WEBSITE_ID:()=>mn,WINCHER_UNSET_SEO_PERFORMANCE_TRACKING_FOR_KEYPHRASE:()=>Tn,addChecklist:()=>ge,clearFacebookPreviewImage:()=>Vr,clearTwitterPreviewImage:()=>Lr,closeEditorModal:()=>rt,dismissAlert:()=>mt,findCustomFields:()=>_r,getSchemaArticleData:()=>Ot,getSchemaPageData:()=>Dt,hideReplacementVariables:()=>Ar,loadAdvancedSettingsData:()=>ae,loadCornerstoneContent:()=>Fe,loadEstimatedReadingTime:()=>F,loadFacebookPreviewData:()=>qr,loadFocusKeyword:()=>at,loadTwitterPreviewData:()=>Mr,openEditorModal:()=>tt,refreshSnippetEditor:()=>Ir,removeReplacementVariable:()=>wr,runAnalysis:()=>de,setActiveAIFixesButton:()=>Y,setActiveMarker:()=>G,setAdminUrl:()=>Pn,setAdvanced:()=>ne,setArticleType:()=>ft,setBreadcrumbsTitle:()=>ie,setCanonical:()=>se,setContentImage:()=>Jt,setCornerstoneContent:()=>Ke,setCurrentPromotions:()=>He,setDisabledAIFixesButtons:()=>j,setDismissedAlerts:()=>_t,setEditorDataContent:()=>$e,setEditorDataExcerpt:()=>Xe,setEditorDataImageUrl:()=>ze,setEditorDataSlug:()=>Je,setEditorDataTitle:()=>Qe,setEstimatedReadingTime:()=>W,setFacebookPreviewDescription:()=>Hr,setFacebookPreviewImage:()=>Gr,setFacebookPreviewTitle:()=>xr,setFleschReadingEase:()=>K,setFocusKeyword:()=>ot,setInclusiveLanguageResults:()=>be,setIsPremium:()=>fn,setLinkParams:()=>vn,setMarkerPauseStatus:()=>dt,setMarkerStatus:()=>lt,setNoFollow:()=>re,setNoIndex:()=>te,setOverallInclusiveLanguageScore:()=>Le,setOverallReadabilityScore:()=>Ce,setOverallSeoScore:()=>Ne,setPageType:()=>ht,setPluginUrl:()=>bn,setPostId:()=>On,setPrimaryTaxonomyId:()=>Tt,setProminentWords:()=>B,setReadabilityResults:()=>ve,setSEMrushChangeCountry:()=>qt,setSEMrushDismissModal:()=>Ct,setSEMrushLoginStatus:()=>jt,setSEMrushNewRequest:()=>xt,setSEMrushNoKeyphraseMessage:()=>Lt,setSEMrushNoResultsFound:()=>Yt,setSEMrushOpenModal:()=>Nt,setSEMrushRequestFailed:()=>Gt,setSEMrushRequestSucceeded:()=>Ht,setSEMrushSetRequestLimitReached:()=>Vt,setSeoResultsForKeyword:()=>Pe,setSettings:()=>zt,setShoppingData:()=>tr,setTextLength:()=>x,setTwitterPreviewDescription:()=>Cr,setTwitterPreviewImage:()=>Nr,setTwitterPreviewTitle:()=>br,setWarningMessage:()=>jr,setWincherAutomaticKeyphaseTracking:()=>gn,setWincherDismissModal:()=>zr,setWincherLoginStatus:()=>pn,setWincherNewRequest:()=>cn,setWincherNoKeyphrase:()=>Zr,setWincherOpenModal:()=>Jr,setWincherRequestFailed:()=>un,setWincherRequestSucceeded:()=>ln,setWincherSetKeyphraseLimitReached:()=>dn,setWincherTrackAllKeyphrases:()=>En,setWincherTrackedKeyphrases:()=>Rn,setWincherTrackingForKeyphrase:()=>In,setWincherWebsiteId:()=>wn,setWistiaEmbedPermission:()=>Cn,setWistiaEmbedPermissionValue:()=>Nn,switchMode:()=>gr,toggleCornerstoneContent:()=>Be,unsetWincherTrackingForKeyphrase:()=>An,updateAnalysisData:()=>ue,updateData:()=>mr,updateReplacementVariable:()=>Sr,updateReplacementVariablesBatch:()=>Tr,updateSettings:()=>Zt,updateShortcodesForParsing:()=>pe,updateWordsToHighlight:()=>yr});var r={};e.r(r),e.d(r,{getActiveAIFixesButton:()=>hi,getActiveMarker:()=>qs,getAdvanced:()=>Pi,getAnalysisData:()=>Is,getAnalysisTimestamp:()=>ys,getArticleType:()=>pa,getBaseUrlFromSettings:()=>es,getBreadcrumbsTitle:()=>vi,getCanonical:()=>bi,getChecklistItems:()=>Rs,getContentImage:()=>Ds,getContentLocale:()=>Hi,getDateFromSettings:()=>ts,getDefaultArticleType:()=>da,getDefaultPageType:()=>la,getDescription:()=>Ss,getDisabledAIFixesButtons:()=>fi,getEditorContext:()=>Mi,getEditorDataContent:()=>Vi,getEditorDataExcerpt:()=>Yi,getEditorDataExcerptWithFallback:()=>ji,getEditorDataImageFallback:()=>Qi,getEditorDataImageUrl:()=>$i,getEditorDataSlug:()=>Xi,getEditorDataTitle:()=>qi,getEditorType:()=>xi,getEstimatedReadingTime:()=>Ti,getFacebookAltText:()=>Ks,getFacebookDescription:()=>Us,getFacebookDescriptionFallback:()=>Gs,getFacebookDescriptionOrFallback:()=>Vs,getFacebookImageSrc:()=>Fs,getFacebookImageUrl:()=>Ws,getFacebookTitle:()=>ks,getFacebookTitleFallback:()=>xs,getFacebookTitleOrFallback:()=>Hs,getFacebookWarnings:()=>Bs,getFleschReadingEaseDifficulty:()=>wi,getFleschReadingEaseScore:()=>yi,getFocusKeyphrase:()=>zi,getFocusKeyphraseErrors:()=>Ji,getImageFallback:()=>Os,getInclusiveLanguageResults:()=>sa,getIsBlockEditor:()=>Wi,getIsDraft:()=>Bi,getIsElementorEditor:()=>Fi,getIsKeywordAnalysisActive:()=>Js,getIsLoading:()=>Ci,getIsModalOpen:()=>fs,getIsPremium:()=>Za,getIsProduct:()=>Ui,getIsTerm:()=>Ki,getIsWooCommerceActive:()=>ro,getIsWooSeoActive:()=>to,getIsWooSeoUpsell:()=>eo,getMarkButtonStatus:()=>ca,getMarkerPauseStatus:()=>Ys,getMarksButtonStatus:()=>$s,getNoFollow:()=>Oi,getNoIndex:()=>Di,getPageType:()=>ua,getPermalink:()=>Ts,getPostId:()=>no,getPostOrPageString:()=>ki,getPreference:()=>Xs,getPreferences:()=>zs,getPrimaryTaxonomyId:()=>Zs,getReadabilityResults:()=>ia,getRecommendedReplaceVars:()=>rs,getReplaceVars:()=>is,getReplacedExcerpt:()=>Ms,getResultById:()=>oa,getResultsForFocusKeyword:()=>aa,getResultsForKeyword:()=>na,getSEMrushIsRequestPending:()=>ma,getSEMrushLoginStatus:()=>Aa,getSEMrushModalOpen:()=>Ea,getSEMrushNoKeyphraseMessage:()=>ga,getSEMrushRequestHasData:()=>Ia,getSEMrushRequestIsSuccess:()=>_a,getSEMrushRequestKeyphrase:()=>ya,getSEMrushRequestLimitReached:()=>Ta,getSEMrushRequestResponse:()=>Sa,getSEMrushSelectedCountry:()=>wa,getSeoDescriptionTemplate:()=>Ns,getSeoResults:()=>ra,getSeoTitle:()=>_s,getSeoTitleTemplate:()=>vs,getSeoTitleTemplateNoFallback:()=>bs,getShoppingData:()=>Ra,getShortcodesForParsing:()=>ws,getSiteIconUrlFromSettings:()=>ns,getSiteName:()=>Zi,getSiteUrl:()=>Ps,getSnippetEditorData:()=>ps,getSnippetEditorDescription:()=>ls,getSnippetEditorDescriptionWithTemplate:()=>us,getSnippetEditorIsLoading:()=>gs,getSnippetEditorMode:()=>as,getSnippetEditorPreviewImageUrl:()=>ms,getSnippetEditorSlug:()=>ds,getSnippetEditorTemplates:()=>ss,getSnippetEditorTitle:()=>os,getSnippetEditorTitleWithTemplate:()=>cs,getSnippetEditorWordsToHighlight:()=>Es,getSocialDescriptionTemplate:()=>Ls,getSocialTitleTemplate:()=>Cs,getTextLength:()=>Ai,getTwitterAltText:()=>va,getTwitterDescription:()=>fa,getTwitterDescriptionFallback:()=>La,getTwitterDescriptionOrFallback:()=>Ma,getTwitterImageSrc:()=>Pa,getTwitterImageType:()=>Oa,getTwitterImageUrl:()=>Da,getTwitterTitle:()=>ha,getTwitterTitleFallback:()=>Ca,getTwitterTitleOrFallback:()=>Na,getTwitterWarnings:()=>ba,getWarningMessage:()=>ka,getWincherAllKeyphrasesMissRanking:()=>za,getWincherHistoryDaysLimit:()=>Va,getWincherKeyphraseLimitReached:()=>Ba,getWincherLimit:()=>Ga,getWincherLoginStatus:()=>xa,getWincherModalOpen:()=>Ua,getWincherPermalink:()=>Ja,getWincherRequestIsSuccess:()=>Fa,getWincherRequestResponse:()=>Ka,getWincherTrackableKeyphrases:()=>Xa,getWincherTrackedKeyphrases:()=>$a,getWincherWebsiteId:()=>ja,hasWincherNoKeyphrase:()=>Wa,hasWincherTrackedKeyphrases:()=>Qa,isAlertDismissed:()=>Qs,isCornerstoneContent:()=>As,isFleschReadingEaseAvailable:()=>Ii,isFormalitySupported:()=>Ri,isMarkingAvailable:()=>js,isPromotionActive:()=>hs,isWincherNewlyAuthenticated:()=>Ha,selectAdminLink:()=>so,selectAdminUrl:()=>io,selectImageLink:()=>uo,selectLink:()=>co,selectLinkParam:()=>oo,selectLinkParams:()=>ao,selectPluginUrl:()=>lo,selectWistiaEmbedPermission:()=>po,selectWistiaEmbedPermissionError:()=>mo,selectWistiaEmbedPermissionStatus:()=>go,selectWistiaEmbedPermissionValue:()=>Eo,shouldWincherAutomaticallyTrackAll:()=>Ya,shouldWincherTrackAll:()=>qa});const n=window.yoast.reduxJsToolkit,i=window.lodash,s="adminUrl",a=(0,n.createSlice)({name:s,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),o=(a.getInitialState,{selectAdminUrl:e=>(0,i.get)(e,s,"")});o.selectAdminLink=(0,n.createSelector)([o.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}}));const c=a.actions,l=a.reducer,u=window.wp.url,d="linkParams",p=(0,n.createSlice)({name:d,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),E=(p.getInitialState,{selectLinkParam:(e,t,r={})=>(0,i.get)(e,`${d}.${t}`,r),selectLinkParams:e=>(0,i.get)(e,d,{})});E.selectLink=(0,n.createSelector)([E.selectLinkParams,(e,t)=>t,(e,t,r={})=>r],((e,t,r)=>(0,u.addQueryArgs)(t,{...e,...r})));const g=p.actions,m=p.reducer,_=(0,n.createSlice)({name:"notifications",initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:r="default",title:i,description:s})=>({payload:{id:e||(0,n.nanoid)(),variant:t,size:r,title:i||"",description:s}})},removeNotification:(e,{payload:t})=>(0,i.omit)(e,t)}}),S=(_.getInitialState,_.actions,_.reducer,"pluginUrl"),T=(0,n.createSlice)({name:S,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),y=(T.getInitialState,{selectPluginUrl:e=>(0,i.get)(e,S,"")});y.selectImageLink=(0,n.createSelector)([y.selectPluginUrl,(e,t,r="images")=>r,(e,t)=>t],((e,t,r)=>[(0,i.trimEnd)(e,"/"),(0,i.trim)(t,"/"),(0,i.trimStart)(r,"/")].join("/")));const w=T.actions,I=T.reducer;window.wp.apiFetch;const A="request",R="success",h="error",f="idle",D="wistiaEmbedPermission",O=(0,n.createSlice)({name:D,initialState:{value:!1,status:f,error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${D}/${A}`,(e=>{e.status="loading"})),e.addCase(`${D}/${R}`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${D}/${h}`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,i.get)(t,"error.code",500),message:(0,i.get)(t,"error.message","Unknown")}}))}}),P=(O.getInitialState,{selectWistiaEmbedPermission:e=>(0,i.get)(e,D,{value:!1,status:f}),selectWistiaEmbedPermissionValue:e=>(0,i.get)(e,[D,"value"],!1),selectWistiaEmbedPermissionStatus:e=>(0,i.get)(e,[D,"status"],f),selectWistiaEmbedPermissionError:e=>(0,i.get)(e,[D,"error"],{})}),v={...O.actions,setWistiaEmbedPermission:function*(e){yield{type:`${D}/${A}`};try{return yield{type:D,payload:e},{type:`${D}/${R}`,payload:{value:e}}}catch(t){return{type:`${D}/${h}`,payload:{error:t,value:e}}}}},b=O.reducer;class C{static get estimatedReadingTimeElement(){return document.getElementById("yoast_wpseo_estimated-reading-time-minutes")}static get estimatedReadingTime(){return C.estimatedReadingTimeElement&&C.estimatedReadingTimeElement.value||""}static set estimatedReadingTime(e){C.estimatedReadingTimeElement&&(C.estimatedReadingTimeElement.value=e)}}const N="SET_ESTIMATED_READING_TIME",L="LOAD_ESTIMATED_READING_TIME",M="SET_FLESCH_READING_EASE",k="SET_PROMINENT_WORDS",U="SET_TEXT_LENGTH",W=e=>(C.estimatedReadingTime=e.toString(),{type:N,payload:e}),F=()=>({type:L,payload:(0,i.toSafeInteger)(C.estimatedReadingTime)}),K=({score:e,difficulty:t})=>({type:M,payload:{score:e,difficulty:t}}),B=e=>({type:k,payload:e}),x=e=>({type:U,payload:e}),H="WPSEO_SET_ACTIVE_MARKER";function G(e){return{type:H,activeMarker:e}}const V="SET_ACTIVE_AI_FIXES_BUTTON",q="SET_DISABLED_AI_FIXES_BUTTONS";function Y(e){return{type:V,activeAIButton:e}}function j(e){return{type:q,disabledAIButtons:e}}class ${static get noIndexElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_meta-robots-noindex":"hidden_wpseo_noindex")}static get noFollowElement(){return document.getElementById("yoast_wpseo_meta-robots-nofollow")}static get advancedElement(){return document.getElementById("yoast_wpseo_meta-robots-adv")}static get breadcrumbsTitleElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_bctitle":"hidden_wpseo_bctitle")}static get canonicalElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_canonical":"hidden_wpseo_canonical")}static get noIndex(){return $.noIndexElement&&$.noIndexElement.value||""}static set noIndex(e){$.noIndexElement.value=e}static get noFollow(){return $.noFollowElement&&$.noFollowElement.value||""}static set noFollow(e){$.noFollowElement.value=e}static get advanced(){return $.advancedElement&&$.advancedElement.value||""}static set advanced(e){$.advancedElement.value=e}static get breadcrumbsTitle(){return $.breadcrumbsTitleElement&&$.breadcrumbsTitleElement.value||""}static set breadcrumbsTitle(e){$.breadcrumbsTitleElement.value=e}static get canonical(){return $.canonicalElement&&$.canonicalElement.value||""}static set canonical(e){$.canonicalElement.value=e}}const Q="SET_NO_INDEX",X="SET_NO_FOLLOW",z="SET_ADVANCED",J="SET_BREADCRUMBS_TITLE",Z="SET_CANONICAL_URL",ee="LOAD_ADVANCED_SETTINGS",te=e=>($.noIndex=e,{type:Q,value:e}),re=e=>($.noFollow=e,{type:X,value:e}),ne=e=>($.advanced=e.join(","),{type:z,value:e}),ie=e=>($.breadcrumbsTitle=e,{type:J,value:e}),se=e=>($.canonical=e,{type:Z,value:e}),ae=()=>({type:ee,settings:{noIndex:$.noIndex,noFollow:$.noFollow,advanced:$.advanced.split(","),breadcrumbsTitle:$.breadcrumbsTitle,canonical:$.canonical,isLoading:!1}}),oe="SNIPPET_EDITOR_UPDATE_ANALYSIS_DATA",ce="RUN_ANALYSIS",le="UPDATE_SHORTCODES_FOR_PARSING";function ue(e){return{type:oe,data:e}}function de(){return{type:ce,timestamp:Date.now()}}function pe(e){return{type:le,shortcodesForParsing:e}}const Ee="ADD_CHECKLIST";function ge(e,t){return{type:Ee,name:e,data:t}}class me{static get keyphraseElement(){var e;return document.getElementById(null!==(e=window.wpseoScriptData)&&void 0!==e&&e.isPost?"yoast_wpseo_focuskw":"hidden_wpseo_focuskw")}static get isCornerstoneElement(){var e;return document.getElementById(null!==(e=window.wpseoScriptData)&&void 0!==e&&e.isPost?"yoast_wpseo_is_cornerstone":"hidden_wpseo_is_cornerstone")}static get seoScoreElement(){var e;return document.getElementById(null!==(e=window.wpseoScriptData)&&void 0!==e&&e.isPost?"yoast_wpseo_linkdex":"hidden_wpseo_linkdex")}static get readabilityScoreElement(){var e;return document.getElementById(null!==(e=window.wpseoScriptData)&&void 0!==e&&e.isPost?"yoast_wpseo_content_score":"hidden_wpseo_content_score")}static get inclusiveLanguageScoreElement(){var e;return document.getElementById(null!==(e=window.wpseoScriptData)&&void 0!==e&&e.isPost?"yoast_wpseo_inclusive_language_score":"hidden_wpseo_inclusive_language_score")}static set keyphrase(e){me.keyphraseElement&&(me.keyphraseElement.value=e)}static get keyphrase(){var e,t;return null!==(e=null===(t=me.keyphraseElement)||void 0===t?void 0:t.value)&&void 0!==e?e:""}static set isCornerstone(e){me.isCornerstoneElement&&(me.isCornerstoneElement.value=e?"1":"0")}static get isCornerstone(){var e;return"1"===(null===(e=me.isCornerstoneElement)||void 0===e?void 0:e.value)}static set seoScore(e){me.seoScoreElement&&(me.seoScoreElement.value=e)}static get seoScore(){var e,t;return null!==(e=null===(t=me.seoScoreElement)||void 0===t?void 0:t.value)&&void 0!==e?e:""}static set readabilityScore(e){me.readabilityScoreElement&&(me.readabilityScoreElement.value=e)}static get readabilityScore(){var e,t;return null!==(e=null===(t=me.readabilityScoreElement)||void 0===t?void 0:t.value)&&void 0!==e?e:""}static set inclusiveLanguageScore(e){me.inclusiveLanguageScoreElement&&(me.inclusiveLanguageScoreElement.value=e)}static get inclusiveLanguageScore(){var e,t;return null!==(e=null===(t=me.inclusiveLanguageScoreElement)||void 0===t?void 0:t.value)&&void 0!==e?e:""}}const _e="CONTENT_ANALYSIS_",Se=`${_e}SET_SEO_RESULTS`,Te=`${_e}SET_SEO_RESULTS_FOR_KEYWORD`,ye=`${_e}UPDATE_SEO_RESULT`,we=`${_e}REMOVE_KEYWORD`,Ie=`${_e}SET_READABILITY_RESULTS`,Ae=`${_e}UPDATE_READABILITY_RESULT`,Re=`${_e}SET_INCLUSIVE_LANGUAGE_RESULTS`,he=`${_e}UPDATE_INCLUSIVE_LANGUAGE_RESULT`,fe=`${_e}SET_OVERALL_READABILITY_SCORE`,De=`${_e}SET_OVERALL_SEO_SCORE`,Oe=`${_e}SET_OVERALL_INCLUSIVE_LANGUAGE_SCORE`;function Pe(e,t){return{type:Te,keyword:e,results:t}}function ve(e){return{type:Ie,results:e}}function be(e){return{type:Re,results:e}}function Ce(e){return me.readabilityScore=e,{type:fe,overallScore:e}}function Ne(e,t){return me.seoScore=e,{type:De,keyword:t,overallScore:e}}function Le(e){return me.inclusiveLanguageScore=e,{type:Oe,overallScore:e}}const Me="WPSEO_",ke=`${Me}LOAD_CORNERSTONE_CONTENT`,Ue=`${Me}TOGGLE_CORNERSTONE_CONTENT`,We=`${Me}SET_CORNERSTONE_CONTENT`,Fe=()=>({type:We,isCornerstone:me.isCornerstone}),Ke=e=>(me.isCornerstone=e,{type:We,isCornerstone:e}),Be=()=>(me.isCornerstone=!me.isCornerstone,{type:Ue}),xe="SET_CURRENT_PROMOTIONS";function He(e){return{type:xe,payload:e}}const Ge="SET_EDITOR_DATA_CONTENT",Ve="SET_EDITOR_DATA_TITLE",qe="SET_EDITOR_DATA_EXCERPT",Ye="SET_EDITOR_DATA_IMAGE_URL",je="SET_EDITOR_DATA_SLUG";function $e(e){return{type:Ge,content:e}}function Qe(e){return{type:Ve,title:e}}function Xe(e){return{type:qe,excerpt:e}}function ze(e){return{type:Ye,imageUrl:e}}function Je(e){return{type:je,slug:e}}const Ze="OPEN_MODAL",et="CLOSE_MODAL";function tt(e){return{type:Ze,modalKey:e}}function rt(){return{type:et}}const nt="WPSEO_",it=`${nt}LOAD_FOCUS_KEYWORD`,st=`${nt}SET_FOCUS_KEYWORD`,at=()=>({type:it,keyword:me.keyphrase}),ot=function(e){return me.keyphrase=e,{type:st,keyword:e}},ct="WPSEO_SET_MARKER_STATUS",lt=function(e){return{type:ct,marksButtonStatus:e}},ut="WPSEO_SET_MARKER_PAUSE_STATUS";function dt(e){return{type:ut,isMarkerPaused:e}}const pt="DISMISS_ALERT",Et="DISMISS_ALERT_SUCCESS",gt="SET_DISMISSED_ALERTS";function*mt(e){return yield{type:pt,alertKey:e},{type:Et,alertKey:e}}function _t(e){return{type:gt,payload:e}}const St="WPSEO_SET_PRIMARY_TAXONOMY",Tt=(e,t)=>({type:St,taxonomy:e,termId:t});class yt{static get articleTypeInput(){return document.getElementById("yoast_wpseo_schema_article_type")}static get defaultArticleType(){return yt.articleTypeInput.getAttribute("data-default")}static get articleType(){return yt.articleTypeInput.value}static set articleType(e){yt.articleTypeInput.value=e}static get pageTypeInput(){return document.getElementById("yoast_wpseo_schema_page_type")}static get defaultPageType(){return yt.pageTypeInput.getAttribute("data-default")}static get pageType(){return yt.pageTypeInput.value}static set pageType(e){yt.pageTypeInput.value=e}}const wt="SET_PAGE_TYPE",It="SET_ARTICLE_TYPE",At="GET_SCHEMA_PAGE_DATA",Rt="GET_SCHEMA_ARTICLE_DATA",ht=e=>(yt.pageType=e,{type:wt,pageType:e}),ft=e=>(yt.articleType=e,{type:It,articleType:e}),Dt=()=>({type:At,pageType:yt.pageType,defaultPageType:yt.defaultPageType}),Ot=()=>({type:Rt,articleType:yt.articleType,defaultArticleType:yt.defaultArticleType}),Pt="MODAL_DISMISS",vt="MODAL_OPEN",bt="MODAL_OPEN_NO_KEYPHRASE";function Ct(){return{type:Pt}}function Nt(e){return{type:vt,location:e}}function Lt(){return{type:bt}}const Mt="CHANGE_COUNTRY",kt="SET_REQUEST_SUCCEEDED",Ut="SET_REQUEST_FAILED",Wt="SET_LIMIT_REACHED",Ft="NEW_REQUEST",Kt="NO_DATA_FOUND",Bt="SET_LOGIN_STATUS";function xt(e,t){return{type:Ft,countryCode:e,keyphrase:t}}function Ht(e){return{type:kt,response:e}}function Gt(e){return{type:Ut,response:e}}function Vt(){return{type:Wt}}function qt(e){return{type:Mt,countryCode:e}}function Yt(){return{type:Kt}}function jt(e){return{type:Bt,loginStatus:e}}const $t="SET_SETTINGS",Qt="SET_CONTENT_IMAGE",Xt="UPDATE_SNIPPET_EDITOR_SETTINGS",zt=function(e){return{type:$t,settings:e}},Jt=function(e){return{type:Qt,src:e}},Zt=function(e){return{type:Xt,snippetEditor:e}},er="SET_SHOPPING_DATA";function tr(e){return{type:er,shoppingData:e}}const rr=window.yoast.helpers,nr="SNIPPET_EDITOR_SWITCH_MODE",ir="SNIPPET_EDITOR_UPDATE_DATA",sr="SNIPPET_EDITOR_FIND_CUSTOM_FIELDS",ar="SNIPPET_EDITOR_CUSTOM_FIELD_RESULTS",or="SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLE",cr="SNIPPET_EDITOR_UPDATE_REPLACEMENT_VARIABLES_BATCH",lr="SNIPPET_EDITOR_HIDE_REPLACEMENT_VARIABLES",ur="SNIPPET_EDITOR_REMOVE_REPLACEMENT_VARIABLE",dr="SNIPPET_EDITOR_REFRESH",pr="SNIPPET_EDITOR_UPDATE_WORDS_TO_HIGHLIGHT",Er="LOAD_SNIPPET_EDITOR_DATA";function gr(e){return{type:nr,mode:e}}function mr(e){return{type:ir,data:e}}function*_r(e,t){const r=yield{type:sr,query:e,postId:t};return{type:ar,results:r}}function Sr(e,t,r="",n=!1){const i="string"==typeof t?(0,rr.decodeHTML)(t):t;return{type:or,name:e,value:i,label:r,hidden:n}}function Tr(e){return{type:cr,updatedVariables:e}}function yr(e){return{type:pr,wordsToHighlight:e}}function wr(e){return{type:ur,name:e}}function Ir(){return{type:dr,time:(new Date).getMilliseconds()}}function Ar(e){return{type:lr,data:e}}const Rr=window.wp.data;class hr{static get titleElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_twitter-title":"hidden_wpseo_twitter-title")}static get descriptionElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_twitter-description":"hidden_wpseo_twitter-description")}static get imageIdElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_twitter-image-id":"hidden_wpseo_twitter-image-id")}static get imageUrlElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_twitter-image":"hidden_wpseo_twitter-image")}static get title(){return hr.titleElement.value}static set title(e){hr.titleElement.value=e}static set description(e){hr.descriptionElement.value=e}static get description(){return hr.descriptionElement.value}static set imageId(e){hr.imageIdElement.value=e}static get imageId(){return hr.imageIdElement.value}static set imageUrl(e){hr.imageUrlElement.value=e}static get imageUrl(){return hr.imageUrlElement.value}}const fr="SET_TWITTER_TITLE",Dr="SET_TWITTER_DESCRIPTION",Or="SET_TWITTER_IMAGE",Pr="CLEAR_TWITTER_IMAGE",vr="LOAD_TWITTER_PREVIEW",br=e=>(e.trim()===(0,Rr.select)("yoast-seo/editor").getSocialTitleTemplate().trim()?hr.title="":hr.title=e,{type:fr,title:e}),Cr=e=>(e.trim()===(0,Rr.select)("yoast-seo/editor").getSocialDescriptionTemplate().trim()?hr.description="":hr.description=e,{type:Dr,description:e}),Nr=e=>(hr.imageId=e.id,hr.imageUrl=e.url,{type:Or,image:e}),Lr=()=>(hr.imageId="",hr.imageUrl="",{type:Pr}),Mr=()=>{const{getSocialDescriptionTemplate:e,getSocialTitleTemplate:t}=(0,Rr.select)("yoast-seo/editor");return{type:vr,imageId:hr.imageId,imageUrl:hr.imageUrl,description:hr.description||e(),title:hr.title||t()}};class kr{static get titleElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_opengraph-title":"hidden_wpseo_opengraph-title")}static get descriptionElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_opengraph-description":"hidden_wpseo_opengraph-description")}static get imageIdElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_opengraph-image-id":"hidden_wpseo_opengraph-image-id")}static get imageUrlElement(){return document.getElementById(window.wpseoScriptData.isPost?"yoast_wpseo_opengraph-image":"hidden_wpseo_opengraph-image")}static get title(){return kr.titleElement.value}static set title(e){kr.titleElement.value=e}static set description(e){kr.descriptionElement.value=e}static get description(){return kr.descriptionElement.value}static set imageId(e){kr.imageIdElement.value=e}static get imageId(){return kr.imageIdElement.value}static set imageUrl(e){kr.imageUrlElement.value=e}static get imageUrl(){return kr.imageUrlElement.value}}const Ur="SET_FACEBOOK_TITLE",Wr="SET_FACEBOOK_DESCRIPTION",Fr="SET_FACEBOOK_IMAGE",Kr="CLEAR_FACEBOOK_IMAGE",Br="LOAD_FACEBOOK_PREVIEW",xr=e=>(e.trim()===(0,Rr.select)("yoast-seo/editor").getSocialTitleTemplate().trim()?kr.title="":kr.title=e,{type:Ur,title:e}),Hr=e=>(e.trim()===(0,Rr.select)("yoast-seo/editor").getSocialDescriptionTemplate().trim()?kr.description="":kr.description=e,{type:Wr,description:e}),Gr=e=>(kr.imageUrl=e.url,kr.imageId=e.id,{type:Fr,image:e}),Vr=()=>(kr.imageId="",kr.imageUrl="",{type:Kr}),qr=()=>{const{getSocialDescriptionTemplate:e,getSocialTitleTemplate:t}=(0,Rr.select)("yoast-seo/editor");return{type:Br,imageId:kr.imageId,imageUrl:kr.imageUrl,description:kr.description||e(),title:kr.title||t()}},Yr="SET_WARNING_MESSAGE";function jr(e){return{type:Yr,message:e}}const $r="WINCHER_MODAL_DISMISS",Qr="WINCHER_MODAL_OPEN",Xr="WINCHER_MODAL_OPEN_NO_KEYPHRASE";function zr(){return{type:$r}}function Jr(e){return{type:Qr,location:e}}function Zr(){return{type:Xr}}const en="WINCHER_SET_REQUEST_SUCCEEDED",tn="WINCHER_SET_REQUEST_FAILED",rn="WINCHER_SET_KEYPHRASE_LIMIT_REACHED",nn="WINCHER_NEW_REQUEST",sn="WINCHER_SET_LOGIN_STATUS",an="WINCHER_FORCE_SEO_PERFORMANCE_TRACKED_KEYPHRASES",on="WINCHER_SET_AUTOMATICALLY_TRACK_ALL_REQUEST";function cn(){return{type:nn}}function ln(e){return{type:en,response:e}}function un(e){return{type:tn,response:e}}function dn(e){return{type:rn,limit:e}}function pn(e,t){return{type:sn,loginStatus:e,newlyAuthenticated:t}}function En(e){return{type:an,trackAll:e}}function gn(e){return{type:on,automaticallyTrack:e}}const mn="WINCHER_SET_WEBSITE_ID",Sn="WINCHER_SET_SEO_PERFORMANCE_TRACKING_FOR_KEYPHRASE",Tn="WINCHER_UNSET_SEO_PERFORMANCE_TRACKING_FOR_KEYPHRASE",yn="WINCHER_SET_SEO_PERFORMANCE_TRACKED_KEYPHRASES";function wn(e){return{type:mn,websiteId:e}}function In(e){return{type:Sn,keyphraseObject:e}}function An(e){return{type:Tn,untrackedKeyphrase:e}}function Rn(e){return{type:yn,trackedKeyphrases:e}}const hn="SET_IS_PREMIUM",fn=e=>({type:hn,payload:e}),Dn="SET_POST_ID",On=e=>({type:Dn,payload:e}),{setAdminUrl:Pn}=c,{setLinkParams:vn}=g,{setPluginUrl:bn}=w,{setWistiaEmbedPermission:Cn,setWistiaEmbedPermissionValue:Nn}=v,Ln={estimatedReadingTime:0,textLength:{}},Mn={results:[],overallScore:null},kn={};function Un(e,t,r){return Object.assign({},e,{[t]:{results:r}})}const Wn={},Fn=(0,Rr.combineReducers)({seo:function(e=kn,t){switch(t.type){case Se:return function(e){const t={};return e.resultsPerKeyword.forEach((function(e){t[e.keyword]={results:e.results}})),t}(t);case ye:return function(e,t){return e[t.keyword]?-1!==(0,i.findIndex)(e[t.keyword].results,{id:t.result.id})?function(e,t){const r=Array.from(e[t.keyword].results,(e=>e.id===t.result.id?t.result:e));return Object.assign({},e,{[t.keyword]:{results:r}})}(e,t):Object.assign({},e,{[t.keyword]:{results:[...e[t.keyword].results,t.result]}}):Un(e,t.keyword,[t.result])}(e,t);case we:return(0,i.omit)(e,t.keyword);case Te:return function(e,t){return e[t.keyword]?Object.assign({},e,{[t.keyword]:{results:t.results}}):Un(e,t.keyword,t.results)}(e,t);case De:return function(e,t){return Object.assign({},e,{[t.keyword]:{...e[t.keyword],overallScore:t.overallScore}})}(e,t);default:return e}},readability:function(e=Wn,t){switch(t.type){case Ie:return function(e,t){return Object.assign({},e,{results:t.results})}(e,t);case Ae:return function(e,t){if((0,i.isUndefined)(e.results))return Object.assign({},e,{results:[t.result]});const r=(0,i.findIndex)(e.results,{id:t.result.id});if(-1!==r){const n=e.results.filter((function(t){return t!==e.results[r]}));return Object.assign({},e,{results:n.concat(t.result)})}return Object.assign({},e,{results:[...e.results,t.result]})}(e,t);case fe:return function(e,t){return Object.assign({},e,{overallScore:t.overallScore})}(e,t);default:return e}},inclusiveLanguage:function(e=Mn,t){switch(t.type){case Re:return function(e,t){return Object.assign({},e,{results:t.results})}(e,t);case he:return function(e,t){if((0,i.isUndefined)(e.results))return Object.assign({},e,{results:[t.result]});const r=(0,i.findIndex)(e.results,{id:t.result.id});if(-1!==r){const n=e.results.filter((function(t){return t!==e.results[r]}));return Object.assign({},e,{results:n.concat(t.result)})}return Object.assign({},e,{results:[...e.results,t.result]})}(e,t);case Oe:return function(e,t){return Object.assign({},e,{overallScore:t.overallScore})}(e,t);default:return e}}}),Kn={noIndex:"",noFollow:"",advanced:[],breadcrumbsTitle:"",canonical:"",isLoading:!0},Bn={activeAIButton:null,disabledAIButtons:{}},xn={snippet:{},timestamp:0,shortcodesForParsing:[]},Hn={checklistItems:{}},Gn={content:"",excerpt:"",imageUrl:"",slug:"",title:""},Vn={openedModal:""},qn={title:"",description:"",warnings:[],image:{url:"",id:"",alt:""}};function Yn(){return(0,i.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}function jn(){const e=Yn();return!0===(0,i.get)(e,"contentAnalysisActive",!1)}function $n(){const e=Yn();return!0===(0,i.get)(e,"keywordAnalysisActive",!1)}function Qn(){const e=Yn();return!0===(0,i.get)(e,"inclusiveLanguageAnalysisActive",!1)}function Xn(){const e=Yn();return!0===(0,i.get)(e,"cornerstoneActive",!1)}const zn=function(){const e=Yn();return(0,i.get)(e,"wordFormRecognitionActive",!1)};function Jn(){const e=Yn();return!0===(0,i.get)(e,"semrushIntegrationActive",!1)}function Zn(){const e=Yn();return!0===(0,i.get)(e,"wincherIntegrationActive",!1)}const ei={},ti={pageType:"",defaultPageType:"",articleType:"",defaultArticleType:""},ri={whichModalOpen:"none",displayNoKeyphraseMessage:!1},ni={isRequestPending:!1,keyphrase:"",countryCode:"us",isSuccess:!1,response:null,limitReached:!1,hasData:!0,isLoggedIn:!1},ii={},si=window.wp.i18n,ai=window.wp.sanitize;function oi(e){return e.charAt(0).toUpperCase()+e.slice(1)}window.React,window.wp.element;const{stripHTMLTags:ci}=rr.strings;function li(e){return e=function(e){if(!["ct_","cf_","pt_"].includes(e.substring(0,3)))return e.replace(/_/g," ");const t=e.slice(0,3);switch(-1!==(e=e.slice(3)).indexOf("desc_")&&(e=e.slice(5)+" description"),t){case"ct_":e+=" (custom taxonomy)";break;case"cf_":e+=" (custom field)";break;case"pt_":e="Post type ("+(e=e.replace("single","singular"))+")"}return e}(e),oi(e)}function ui(e,t="_"){return e.replace(/\s/g,t)}const di={title:"",description:"",warnings:[],image:{url:"",id:"",alt:""}},pi={message:[]},Ei={whichModalOpen:"none",hasNoKeyphrase:!1},gi={isSuccess:!1,response:null,limitReached:!1,isLoggedIn:!1,isNewlyAuthenticated:!1,limit:10,trackAll:!1,automaticallyTrack:!1,historyDaysLimit:0},mi={websiteId:"",trackedKeyphrases:null,trackAll:!1},_i={activeMarker:function(e=null,t){return t.type===H?t.activeMarker:e},[s]:l,advancedSettings:(e=Kn,t)=>{switch(t.type){case ee:return{...e,...t.settings};case Q:return{...e,noIndex:t.value};case X:return{...e,noFollow:t.value};case z:return{...e,advanced:t.value};case Z:return{...e,canonical:t.value};case J:return{...e,breadcrumbsTitle:t.value};default:return e}},AIButton:function(e=Bn,t){switch(t.type){case V:return{...e,activeAIButton:t.activeAIButton};case q:return{...e,disabledAIButtons:t.disabledAIButtons};default:return e}},analysis:Fn,analysisData:function(e=xn,t){switch(t.type){case oe:return{...e,snippet:t.data};case ce:return{...e,timestamp:t.timestamp};case le:return{...e,shortcodesForParsing:t.shortcodesForParsing}}return e},checklist:function(e=Hn,t){if(t.type===Ee){const r=Object.assign({},e);return r.checklistItems[t.name]=t.data,r}return e},currentPromotions:function(e={},t){return t.type===xe?{promotions:t.payload}:e},dismissedAlerts:function(e={},t){return t.type===Et&&t.alertKey?{...e,[t.alertKey]:!0}:t.type===gt?{...t.payload}:e},editorContext:function(e=function(){return{contentLocale:(0,i.get)(window,"wpseoScriptData.metabox.contentLocale",""),isBlockEditor:"1"===(0,i.get)(window,"wpseoScriptData.isBlockEditor","0"),isElementorEditor:"1"===(0,i.get)(window,"wpseoScriptData.isElementorEditor","0"),isPost:(0,i.get)(window,"wpseoScriptData",{}).hasOwnProperty("isPost"),isTerm:(0,i.get)(window,"wpseoScriptData",{}).hasOwnProperty("isTerm"),noIndex:"1"===(0,i.get)(window,"wpseoAdminL10n.noIndex","0"),postTypeNameSingular:(0,i.get)(window,"wpseoAdminL10n.postTypeNameSingular",""),postTypeNamePlural:(0,i.get)(window,"wpseoAdminL10n.postTypeNamePlural",""),postStatus:(0,i.get)(window,"wpseoScriptData.postStatus","")}}()){return e},editorData:(e=Gn,t)=>{switch(t.type){case Ge:return{...e,content:t.content};case qe:return{...e,excerpt:t.excerpt};case Ye:return{...e,imageUrl:t.imageUrl};case je:return{...e,slug:t.slug};case Ve:return{...e,title:t.title}}return e},editorModals:function(e=Vn,t){switch(t.type){case Ze:return{...e,openedModal:t.modalKey};case et:return{...e,openedModal:""}}return e},facebookEditor:(e=qn,t)=>{switch(t.type){case Br:return{...e,title:t.title,description:t.description,image:{id:t.id,url:t.imageUrl}};case Ur:return{...e,title:t.title};case Wr:return{...e,description:t.description};case Fr:return{...e,warnings:t.image.warnings,image:{id:t.image.id,url:t.image.url,alt:t.image.alt||""}};case Kr:return{...e,image:{url:"",id:"",alt:""},warnings:[]};default:return e}},focusKeyword:function(e="",t){switch(t.type){case it:case st:return t.keyword;default:return e}},insights:(e=Ln,{type:t,payload:r})=>{switch(t){case L:case N:return{...e,estimatedReadingTime:r};case M:return{...e,fleschReadingEaseScore:r.score,fleschReadingEaseDifficulty:r.difficulty};case U:return{...e,textLength:r};default:return e}},isCornerstone:function(e=!1,t){switch(t.type){case Ue:return!e;case We:return t.isCornerstone;default:return e}},isMarkerPaused:function(e=!1,t){return t.type===ut?function(e,t){return t.isMarkerPaused}(0,t):e},isPremium:(e=!1,t)=>t.type===hn?t.payload:e,[d]:m,[S]:I,postId:(e=!1,t)=>t.type===Dn?t.payload:e,marksButtonStatus:function(e="disabled",t){return t.type===ct?t.marksButtonStatus:e},preferences:function(e=function(){const e=!!window.wpseoAdminL10n.displayAdvancedTab;return{isContentAnalysisActive:jn(),isKeywordAnalysisActive:$n(),isInclusiveLanguageAnalysisActive:Qn(),isWordFormRecognitionActive:(0,i.isUndefined)(window.wpseoPremiumMetaboxData)&&zn(),isCornerstoneActive:Xn(),isBreadcrumbsDisabled:!!window.wpseoAdminL10n.isBreadcrumbsDisabled,isPrivateBlog:!!window.wpseoAdminL10n.isPrivateBlog,isSEMrushIntegrationActive:Jn(),shouldUpsell:(0,i.isUndefined)(window.wpseoPremiumMetaboxData),displayAdvancedTab:e,displaySchemaSettings:e&&!!window.wpseoScriptData.isPost,displaySchemaSettingsFooter:window.wpseoScriptData.metabox.schema.displayFooter,useOpenGraphData:window.wpseoScriptData.metabox.showSocial.facebook,useTwitterData:window.wpseoScriptData.metabox.showSocial.twitter,isWincherIntegrationActive:Zn(),isInsightsEnabled:(0,i.get)(window,"wpseoScriptData.metabox.isInsightsEnabled",!1),isNewsEnabled:!!window.wpseoAdminL10n.news_seo_is_active,isAiFeatureActive:Boolean(window.wpseoAdminL10n.isAiFeatureActive)}}()){return e},primaryTaxonomies:function(e=ei,t){return t.type===St?{...e,[t.taxonomy]:t.termId}:e},schemaTab:(e=ti,t)=>{switch(t.type){case wt:return{...e,pageType:t.pageType};case It:return{...e,articleType:t.articleType};case At:return{...e,pageType:t.pageType,defaultPageType:t.defaultPageType};case Rt:return{...e,articleType:t.articleType,defaultArticleType:t.defaultArticleType};default:return e}},SEMrushModal:function(e=ri,t){switch(t.type){case bt:return{whichModalOpen:"none",displayNoKeyphraseMessage:!0};case vt:return{whichModalOpen:t.location,displayNoKeyphraseMessage:!1};case Pt:return{whichModalOpen:"none",displayNoKeyphraseMessage:!1}}return e},SEMrushRequest:function(e=ni,t){switch(t.type){case Ft:return{...e,isRequestPending:!0,keyphrase:t.keyphrase,countryCode:t.countryCode,isSuccess:!1,response:null};case kt:return{...e,isRequestPending:!1,isSuccess:!0,response:t.response,hasData:!0};case Ut:return{...e,isRequestPending:!1,isSuccess:!1,response:t.response,hasData:!1};case Wt:return{...e,isRequestPending:!1,limitReached:!0,hasData:!1};case Mt:return{...e,countryCode:t.countryCode};case Kt:return{...e,isSuccess:!0,isRequestPending:!1,hasData:!1,response:null};case Bt:return{...e,isLoggedIn:t.loginStatus};default:return e}},settings:function(e={},t){switch(t.type){case $t:return{...e,...t.settings};case Qt:{const r=Object.assign({},e.socialPreviews,{contentImage:t.src});return{...e,socialPreviews:{...r}}}case Xt:{const r=Object.assign({},e.snippetEditor,t.snippetEditor);return{...e,snippetEditor:{...r}}}default:return e}},shoppingData:function(e=ii,t){if(t.type===er){const r=(0,i.pick)(t.shoppingData,["rating","reviewCount","availability","price"]);return{...e,...r}}return e},snippetEditor:function(e=function(){return{mode:"mobile",data:{title:"",description:"",slug:""},wordsToHighlight:[],replacementVariables:[{name:"date",label:(0,si.__)("Date","wordpress-seo"),value:""},{name:"id",label:(0,si.__)("ID","wordpress-seo"),value:""},{name:"page",label:(0,si.__)("Page","wordpress-seo"),value:""},{name:"searchphrase",label:(0,si.__)("Search phrase","wordpress-seo"),value:""},{name:"sitedesc",label:(0,si.__)("Tagline","wordpress-seo"),value:""},{name:"sitename",label:(0,si.__)("Site title","wordpress-seo"),value:""},{name:"category",label:(0,si.__)("Category","wordpress-seo"),value:""},{name:"focuskw",label:(0,si.__)("Focus keyphrase","wordpress-seo"),value:""},{name:"title",label:(0,si.__)("Title","wordpress-seo"),value:""},{name:"parent_title",label:(0,si.__)("Parent title","wordpress-seo"),value:""},{name:"excerpt",label:(0,si.__)("Excerpt","wordpress-seo"),value:""},{name:"primary_category",label:(0,si.__)("Primary category","wordpress-seo"),value:""},{name:"sep",label:(0,si.__)("Separator","wordpress-seo"),value:""},{name:"excerpt_only",label:(0,si.__)("Excerpt only","wordpress-seo"),value:""},{name:"category_description",label:(0,si.__)("Category description","wordpress-seo"),value:""},{name:"tag_description",label:(0,si.__)("Tag description","wordpress-seo"),value:""},{name:"term_description",label:(0,si.__)("Term description","wordpress-seo"),value:""},{name:"currentyear",label:(0,si.__)("Current year","wordpress-seo"),value:""}],uniqueRefreshValue:"",templates:{title:"",description:""},isLoading:!0}}(),t){switch(t.type){case nr:return{...e,mode:t.mode};case ir:return{...e,data:{...e.data,...t.data}};case or:return function(e,t){let r=!0,n=e.replacementVariables.map((e=>e.name===t.name?(r=!1,{name:t.name,label:t.label||e.label,value:t.value,hidden:e.hidden}):e));return r&&(n=function(e,t){return e.push({name:t.name,label:t.label||li(t.name),value:t.value}),e}(n,t)),{...e,replacementVariables:n}}(e,t);case cr:return function(e,t){const r={},n=e.replacementVariables.map((e=>{const n=t.updatedVariables[e.name];return n?(r[e.name]=!0,{name:e.name,label:n.label||e.label,value:n.value,hidden:e.hidden}):e}));return Object.keys(t.updatedVariables).forEach((e=>{r[e]||n.push({name:e,label:t.updatedVariables[e].label||li(e),value:t.updatedVariables[e].value,hidden:!1})})),{...e,replacementVariables:n}}(e,t);case ar:return function(e,t){const r=t.results.filter((t=>!e.replacementVariables.some((e=>e.name==="cf_"+t.key))));if(0===r.length)return e;const n=[...r.map((e=>({name:"cf_"+ui(e.key),label:oi(e.key+" (custom field)"),value:e.value,hidden:!1}))),...e.replacementVariables];return{...e,replacementVariables:n}}(e,t);case lr:{const r=e.replacementVariables.map((e=>({name:e.name,label:e.label,value:e.value,hidden:t.data.includes(e.name)})));return{...e,replacementVariables:r}}case ur:return{...e,replacementVariables:e.replacementVariables.filter((e=>e.name!==t.name))};case dr:return{...e,uniqueRefreshValue:t.time};case pr:return{...e,wordsToHighlight:t.wordsToHighlight};case Er:return{...e,data:{...e.data,title:t.data.title,description:t.data.description,slug:t.data.slug},templates:{...e.templates,title:t.templates.title,description:t.templates.description},isLoading:!1}}return e},twitterEditor:(e=di,t)=>{switch(t.type){case vr:return{...e,title:t.title,description:t.description,image:{id:t.id,url:t.imageUrl}};case fr:return{...e,title:t.title};case Dr:return{...e,description:t.description};case Or:return{...e,image:{id:t.image.id,url:t.image.url,alt:t.image.alt||""},warnings:t.image.warnings};case Pr:return{...e,image:{url:"",id:"",alt:""},warnings:[]};default:return e}},warning:function(e=pi,t){return t.type===Yr?{...e,message:t.message}:e},WincherModal:function(e=Ei,t){switch(t.type){case Xr:return{whichModalOpen:"none",hasNoKeyphrase:!0};case Qr:return{...e,hasNoKeyphrase:!1,whichModalOpen:t.location};case $r:return{...e,whichModalOpen:"none",hasNoKeyphrase:!1}}return e},WincherRequest:function(e=gi,t){switch(t.type){case nn:return{...e,limitReached:!1,isSuccess:!1,response:null,isNewlyAuthenticated:!1};case en:return{...e,isSuccess:!0,response:t.response};case tn:return{...e,isSuccess:!1,response:t.response};case rn:return{...e,limitReached:!0,limit:t.limit};case sn:return{...e,isLoggedIn:t.loginStatus,isNewlyAuthenticated:t.newlyAuthenticated};case an:return{...e,trackAll:t.trackAll};case on:return{...e,automaticallyTrack:t.automaticallyTrack};default:return e}},WincherSEOPerformance:function(e=mi,t){switch(t.type){case mn:return{...e,websiteId:t.websiteId};case Sn:return{...e,trackedKeyphrases:{...e.trackedKeyphrases,...t.keyphraseObject}};case Tn:return{...e,trackedKeyphrases:(0,i.pickBy)(e.trackedKeyphrases,((e,r)=>r!==t.untrackedKeyphrase))};case yn:return{...e,trackedKeyphrases:t.trackedKeyphrases}}return e},[D]:b};function Si(){const e=Yn();return(0,i.get)(e,"contentLocale","en_US")}const Ti=e=>(0,i.get)(e,"insights.estimatedReadingTime",0),yi=e=>(0,i.get)(e,"insights.fleschReadingEaseScore",null),wi=e=>(0,i.get)(e,"insights.fleschReadingEaseDifficulty",null),Ii=e=>null!==yi(e)&&null!==wi(e),Ai=e=>(0,i.get)(e,"insights.textLength",{}),Ri=()=>{const e="en"===Si().split("_")[0],t=Yn().isPremium;return!!e&&(!t||window.wp.data.select("yoast-seo-premium/editor").hasOwnProperty("getTextFormalityLevel"))},hi=e=>(0,i.get)(e,"AIButton.activeAIButton",""),fi=e=>(0,i.get)(e,"AIButton.disabledAIButtons",{}),Di=e=>(0,i.get)(e,"advancedSettings.noIndex",""),Oi=e=>(0,i.get)(e,"advancedSettings.noFollow",""),Pi=e=>(0,i.get)(e,"advancedSettings.advanced",""),vi=e=>(0,i.get)(e,"advancedSettings.breadcrumbsTitle","summary"),bi=e=>(0,i.get)(e,"advancedSettings.canonical",""),Ci=e=>(0,i.get)(e,"advancedSettings.isLoading",!0),Ni="yoast-measurement-element";function Li(e){let t=document.getElementById(Ni);return t||(t=function(){const e=document.createElement("div");return e.id=Ni,e.style.position="absolute",e.style.left="-9999em",e.style.top=0,e.style.height=0,e.style.overflow="hidden",e.style.fontFamily="arial, sans-serif",e.style.fontSize="20px",e.style.fontWeight="400",document.body.appendChild(e),e}()),t.innerText=e,t.offsetWidth}function Mi(e){return e.editorContext}function ki(e){return"Page"===(0,i.get)(e,"editorContext.postTypeNameSingular")?"page":"post"}function Ui(e){return"Product"===(0,i.get)(e,"editorContext.postTypeNameSingular")}function Wi(e){return(0,i.get)(e,"editorContext.isBlockEditor",!1)}function Fi(e){return(0,i.get)(e,"editorContext.isElementorEditor",!1)}function Ki(e){return(0,i.get)(e,"editorContext.isTerm",!1)}function Bi(e){return["draft","auto-draft"].includes((0,i.get)(e,"editorContext.postStatus",""))}function xi(e){return Fi(e)?"elementorEditor":Wi(e)?"blockEditor":"classicEditor"}function Hi(e){return(0,i.get)(e,"editorContext.contentLocale","en_US")}const Gi=window.wp.hooks,Vi=e=>(0,i.get)(e,"editorData.content",""),qi=e=>(0,i.get)(e,"editorData.title",""),Yi=e=>(0,i.get)(e,"editorData.excerpt"),ji=e=>{let t=(0,i.get)(e,"editorData.excerpt","");if(""===t){const r="ja"===Si()?80:156;t=function(e,t=156){return(e=(e=(0,ai.stripTags)(e)).trim()).length<=t||(e=e.substring(0,t),/\s/.test(e)&&(e=e.substring(0,e.lastIndexOf(" ")))),e}((0,i.get)(e,"editorData.content",""),r)}return t},$i=e=>(0,i.get)(e,"editorData.imageUrl",""),Qi=e=>{const t=[{featuredOrFirstImage:(0,i.get)(e,"editorData.imageUrl","")},{socialImage:(0,i.get)(window,"wpseoScriptData.metabox.social_image_template","")},{siteWideImage:(0,i.get)(window.wpseoScriptData,"metabox.showSocial.facebook")&&(0,i.get)(e,"settings.socialPreviews.sitewideImage","")}];(0,Gi.applyFilters)("yoast.socials.imageFallback",t);for(const e of t)if(Object.values(e)[0])return Object.values(e)[0];return""},Xi=e=>(0,i.get)(e,"editorData.slug","");function zi(e){return(0,i.get)(e,"focusKeyword","")}const Ji=e=>{const t=(0,Gi.applyFilters)("yoast.focusKeyphrase.errors",[],zi(e));return(0,i.isArray)(t)?t.filter(i.isString):[]},Zi=e=>(0,i.get)(e,"settings.socialPreviews.siteName",""),es=e=>(0,i.get)(e,"settings.snippetEditor.baseUrl",""),ts=e=>(0,i.get)(e,"settings.snippetEditor.date",""),rs=e=>(0,i.get)(e,"settings.snippetEditor.recommendedReplacementVariables",[]),ns=e=>(0,i.get)(e,"settings.snippetEditor.siteIconUrl",""),is=e=>(0,i.get)(e,"snippetEditor.replacementVariables",[]),ss=e=>(0,i.get)(e,"snippetEditor.templates",{title:"",description:""}),as=e=>(0,i.get)(e,"snippetEditor.mode","mobile"),os=e=>(0,i.get)(e,"snippetEditor.data.title",""),cs=e=>(0,i.get)(e,"snippetEditor.data.title","")||ss(e).title,ls=e=>(0,i.get)(e,"snippetEditor.data.description",""),us=e=>ls(e)||ss(e).description,ds=e=>(0,i.get)(e,"snippetEditor.data.slug",""),ps=e=>(0,i.get)(e,"snippetEditor.data",{title:os(e),description:ls(e),slug:ds(e)}),Es=e=>(0,i.get)(e,"snippetEditor.wordsToHighlight",[]),gs=e=>(0,i.get)(e,"snippetEditor.isLoading",!0),ms=e=>(0,i.get)(e,"snippetEditor.data.snippetPreviewImageURL",""),_s=e=>(0,i.get)(e,"analysisData.snippet.title",""),Ss=e=>(0,i.get)(e,"analysisData.snippet.description",""),Ts=e=>(0,i.get)(e,"analysisData.snippet.url",""),ys=e=>parseInt((0,i.get)(e,"analysisData.timestamp",0),10),ws=e=>(0,i.get)(e,"analysisData.shortcodesForParsing",[]),Is=e=>{const t=_s(e)||os(e),r=ds(e);return{text:Vi(e),title:t,keyword:zi(e),description:Ss(e)||ls(e),locale:Hi(e),titleWidth:Li(t),slug:r,permalink:es(e)+r}};function As(e){return e.isCornerstone}function Rs(e){return e.checklist.checklistItems}function hs(e,t){return e.currentPromotions.promotions.includes(t)}const fs=(e,t)=>(0,i.get)(e,"editorModals.openedModal","")===t,Ds=e=>(0,i.get)(e,"socialPreviews.contentImage",""),Os=e=>{const t=[{featuredImage:(0,i.get)(e,"snippetEditor.data.snippetPreviewImageURL","")},{contentImage:(0,i.get)(e,"settings.socialPreviews.contentImage","")},{socialImage:(0,i.get)(window,"wpseoScriptData.metabox.social_image_template","")},{siteWideImage:(0,i.get)(window,"wpseoScriptData.metabox.showSocial.facebook")&&(0,i.get)(e,"settings.socialPreviews.sitewideImage","")}];(0,Gi.applyFilters)("yoast.socials.imageFallback",t);for(const e of t)if(Object.values(e)[0])return Object.values(e)[0];return""},Ps=()=>{let e=(0,i.get)(window,"wpseoScriptData.metabox.base_url","");return""===e?"":(e=new URL(e),e.host)},vs=()=>(0,i.get)(window,"wpseoScriptData.metabox.title_template",""),bs=()=>(0,i.get)(window,"wpseoScriptData.metabox.title_template_no_fallback",""),Cs=()=>(0,i.get)(window,"wpseoScriptData.metabox.social_title_template",""),Ns=()=>(0,i.get)(window,"wpseoScriptData.metabox.metadesc_template",""),Ls=()=>(0,i.get)(window,"wpseoScriptData.metabox.social_description_template",""),Ms=e=>{let t="";return(0,i.get)(e,"snippetEditor.replacementVariables",[]).forEach((e=>{"excerpt"===e.name&&(t=e.value)})),t},ks=e=>(0,i.get)(e,"facebookEditor.title",""),Us=e=>(0,i.get)(e,"facebookEditor.description",""),Ws=e=>(0,i.get)(e,"facebookEditor.image.url"),Fs=e=>(0,i.get)(e,"facebookEditor.image.src",""),Ks=e=>(0,i.get)(e,"facebookEditor.image.alt",""),Bs=e=>(0,i.get)(e,"facebookEditor.warnings",[]),xs=(0,n.createSelector)([Cs,_s,bs,vs],((...e)=>e.find(Boolean)||"")),Hs=(0,n.createSelector)([ks,xs],((e,t)=>e||t)),Gs=(0,n.createSelector)([Ls,Ss,Ns,Ms,ji],((...e)=>{var t;return null!==(t=e.find(Boolean))&&void 0!==t?t:""})),Vs=(0,n.createSelector)([Us,Gs],((e,t)=>e||t));function qs(e){return e.activeMarker}function Ys(e){return e.isMarkerPaused}function js(e){return"enabled"===e.marksButtonStatus}function $s(e){return e.marksButtonStatus}function Qs(e,t){return!0===e.dismissedAlerts[t]}const Xs=(e,t,r=null)=>(0,i.get)(e,`preferences.${t}`,r),zs=e=>e.preferences,Js=e=>(0,i.get)(e,"preferences.isKeywordAnalysisActive",!1);function Zs(e,t){return e.primaryTaxonomies[t]}const ea=[],ta={};function ra(e){const t=(0,i.get)(e,"analysis.seo",ta);return(0,i.isEmpty)(t)?{results:ea,overallScore:null}:t}function na(e,t){const r=ra(e);return(0,i.get)(r,t,ta)}function ia(e){const t=(0,i.get)(e,"analysis.readability",{});return(0,i.isEmpty)(t)?{results:ea,overallScore:null}:t}function sa(e){return(0,i.get)(e,"analysis.inclusiveLanguage",{results:ea,overallScore:null})}function aa(e){return na(e,e.focusKeyword)}function oa(e,t){return[...aa(e).results||ea,...ia(e).results||ea,...sa(e).results||ea].find((e=>e._identifier===t))}function ca(e){return e.marksButtonStatus}const la=e=>(0,i.get)(e,"schemaTab.defaultPageType",""),ua=e=>(0,i.get)(e,"schemaTab.pageType",""),da=e=>(0,i.get)(e,"schemaTab.defaultArticleType",""),pa=e=>(0,i.get)(e,"schemaTab.articleType","");function Ea(e){return e.SEMrushModal.whichModalOpen}function ga(e){return e.SEMrushModal.displayNoKeyphraseMessage}function ma(e){return e.SEMrushRequest.isRequestPending}function _a(e){return e.SEMrushRequest.isSuccess}function Sa(e){return e.SEMrushRequest.response}function Ta(e){return e.SEMrushRequest.limitReached}function ya(e){return e.SEMrushRequest.keyphrase}function wa(e){return e.SEMrushRequest.countryCode}function Ia(e){return e.SEMrushRequest.hasData}function Aa(e){return e.SEMrushRequest.isLoggedIn}const Ra=e=>(0,i.get)(e,"shoppingData",{}),ha=e=>(0,i.get)(e,"twitterEditor.title",""),fa=e=>(0,i.get)(e,"twitterEditor.description",""),Da=e=>(0,i.get)(e,"twitterEditor.image.url",""),Oa=e=>(0,i.get)(e,"settings.socialPreviews.twitterCardType","summary"),Pa=e=>(0,i.get)(e,"twitterEditor.image.src",""),va=e=>(0,i.get)(e,"twitterEditor.image.alt",""),ba=e=>(0,i.get)(e,"twitterEditor.warnings",[]),Ca=(0,n.createSelector)([Cs,ks,_s,bs,vs],((...e)=>e.find(Boolean)||"")),Na=(0,n.createSelector)([ha,Ca],((e,t)=>e||t)),La=(0,n.createSelector)([Ls,Us,Ss,Ns,Ms,ji],((...e)=>{var t;return null!==(t=e.find(Boolean))&&void 0!==t?t:""})),Ma=(0,n.createSelector)([fa,La],((e,t)=>e||t));function ka(e){return(0,i.get)(e,"warning.message",[])}function Ua(e){return e.WincherModal.whichModalOpen}function Wa(e){return e.WincherModal.hasNoKeyphrase}function Fa(e){return e.WincherRequest.isSuccess}function Ka(e){return e.WincherRequest.response}function Ba(e){return e.WincherRequest.limitReached}function xa(e){return e.WincherRequest.isLoggedIn}function Ha(e){return e.WincherRequest.isNewlyAuthenticated}function Ga(e){return e.WincherRequest.limit}function Va(e){return e.WincherRequest.historyDays}function qa(e){return!0===e.WincherRequest.trackAll}function Ya(e){return e.WincherRequest.automaticallyTrack&&Bi(e)}function ja(e){return e.WincherSEOPerformance.websiteId}function $a(e){return e.WincherSEOPerformance.trackedKeyphrases}function Qa(e){return!(0,i.isEmpty)(e.WincherSEOPerformance.trackedKeyphrases)}function Xa(e){const t=Yn().isPremium,r=window.wp.data.select("yoast-seo-premium/editor"),n=[e.focusKeyword.trim()];return t&&r&&n.push(...r.getKeywords().filter((e=>void 0!==e.keyword)).map((e=>e.keyword.trim()))),(0,i.uniq)(n.filter((e=>!!e)).map((e=>e.replace(/["+:\s]+/g," ").trim().toLocaleLowerCase()))).sort()}function za(e){const{trackedKeyphrases:t}=e.WincherSEOPerformance;return!(0,i.isEmpty)(t)&&(0,i.filter)(t,(e=>(0,i.isEmpty)(e.updated_at))).length===Object.keys(t).length}function Ja(e){const t=Is(e);return t.slug?t.permalink:""}const Za=e=>(0,i.get)(e,"isPremium",!1),eo=()=>(0,i.get)(window,"wpseoScriptData.woocommerceUpsell",!1),to=()=>Boolean((0,i.get)(window,"wpseoScriptData.isWooCommerceSeoActive",!1)),ro=()=>Boolean((0,i.get)(window,"wpseoScriptData.isWooCommerceActive",!1)),no=e=>(0,i.get)(e,"postId",null),{selectAdminUrl:io,selectAdminLink:so}=o,{selectLinkParams:ao,selectLinkParam:oo,selectLink:co}=E,{selectPluginUrl:lo,selectImageLink:uo}=y,{selectWistiaEmbedPermission:po,selectWistiaEmbedPermissionValue:Eo,selectWistiaEmbedPermissionStatus:go,selectWistiaEmbedPermissionError:mo}=P;window.yoast=window.yoast||{},window.yoast.externals=window.yoast.externals||{},window.yoast.externals.redux={selectors:r,reducers:_i,actions:t,utils:{createFreezeReducer:(e,t)=>{let r=!1,n=null;return{freezeReducer:(i=t,s)=>r?n:e(i,s),toggleFreeze:(e,t=!r)=>{n=t?(0,i.cloneDeep)(e()):null,r=Boolean(t)}}},createSnapshotReducer:(e,t)=>{let r,n=!1,s=!1;return{snapshotReducer:(i=t,s)=>n?(n=!1,r):e(i,s),takeSnapshot:(e,t)=>{t({type:"CREATE_SNAPSHOT"}),r=(0,i.cloneDeep)(e()),s=!0},restoreSnapshot:e=>{s&&(n=!0,e({type:"RESTORE_SNAPSHOT"}))}}}}}})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysis.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysis.js new file mode 100644 index 00000000..4c2b5cac --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysis.js @@ -0,0 +1,368 @@ +(()=>{var e={12552:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=g(r(85551)),a=r(49061),o=g(r(96908)),l=g(r(20019)),u=g(r(70021)),c=g(r(93334)),d=g(r(47899)),h=g(r(4855)),p=g(r(63745)),f=g(r(82304));function g(e){return e&&e.__esModule?e:{default:e}}var m={callbacks:{bindElementEvents:s.noop,updateSnippetValues:s.noop,saveScores:s.noop,saveContentScore:s.noop,updatedContentResults:s.noop,updatedKeywordsResults:s.noop},sampleText:{baseUrl:"example.org/",snippetCite:"example-post/",title:"",keyword:"Choose a focus keyword",meta:"",text:"Start writing your text!"},queue:["wordCount","keywordDensity","subHeadings","stopwords","fleschReading","linkCount","imageCount","slugKeyword","urlLength","metaDescription","pageTitleKeyword","pageTitleWidth","firstParagraph","'keywordDoubles"],typeDelay:3e3,typeDelayStep:1500,maxTypeDelay:5e3,dynamicDelay:!0,locale:"en_US",translations:{domain:"wordpress-seo",locale_data:{"wordpress-seo":{"":{}}}},replaceTarget:[],resetTarget:[],elementTarget:[],marker:s.noop,keywordAnalysisActive:!0,contentAnalysisActive:!0,debounceRefresh:!0},_=function(e){(0,s.isObject)(e)||(e={}),(0,s.defaultsDeep)(e,m),function(e){if(!(0,s.isObject)(e.callbacks.getData))throw new i.default("The app requires an object with a getdata callback.");if(!(0,s.isObject)(e.targets))throw new i.default("`targets` is a required App argument, `targets` is not an object.")}(e),this.config=e,!0===e.debouncedRefresh&&(this.refresh=(0,s.debounce)(this.refresh.bind(this),800)),this._pureRefresh=(0,s.throttle)(this._pureRefresh.bind(this),this.config.typeDelay),this.callbacks=this.config.callbacks,(0,n.setLocaleData)(this.config.translations.locale_data["wordpress-seo"],"wordpress-seo"),this.initializeAssessors(e),this.pluggable=new l.default(this),this.getData(),this.defaultOutputElement=this.getDefaultOutputElement(e),""!==this.defaultOutputElement&&this.showLoadingDialog(),this._assessorOptions={useCornerStone:!1},this.initAssessorPresenters()};_.prototype.getDefaultOutputElement=function(e){return e.keywordAnalysisActive?e.targets.output:e.contentAnalysisActive?e.targets.contentOutput:""},_.prototype.changeAssessorOptions=function(e){this._assessorOptions=(0,s.merge)(this._assessorOptions,e),this.seoAssessor=this.getSeoAssessor(),this.contentAssessor=this.getContentAssessor(),this.initAssessorPresenters(),this.refresh()},_.prototype.getSeoAssessor=function(){const{useCornerStone:e}=this._assessorOptions;return e?this.cornerStoneSeoAssessor:this.defaultSeoAssessor},_.prototype.getContentAssessor=function(){const{useCornerStone:e}=this._assessorOptions;return e?this.cornerStoneContentAssessor:this.defaultContentAssessor},_.prototype.initializeAssessors=function(e){this.initializeSEOAssessor(e),this.initializeContentAssessor(e)},_.prototype.initializeSEOAssessor=function(e){e.keywordAnalysisActive&&(this.defaultSeoAssessor=new p.default({marker:this.config.marker}),this.cornerStoneSeoAssessor=new d.default({marker:this.config.marker}),(0,s.isUndefined)(e.seoAssessor)?this.seoAssessor=this.defaultSeoAssessor:this.seoAssessor=e.seoAssessor)},_.prototype.initializeContentAssessor=function(e){e.contentAnalysisActive&&(this.defaultContentAssessor=new u.default({marker:this.config.marker,locale:this.config.locale}),this.cornerStoneContentAssessor=new c.default({marker:this.config.marker,locale:this.config.locale}),(0,s.isUndefined)(e._contentAssessor)?this.contentAssessor=this.defaultContentAssessor:this.contentAssessor=e._contentAssessor)},_.prototype.extendConfig=function(e){return e.sampleText=this.extendSampleText(e.sampleText),e.locale=e.locale||"en_US",e},_.prototype.extendSampleText=function(e){var t=m.sampleText;if((0,s.isUndefined)(e))return t;for(var r in e)(0,s.isUndefined)(e[r])&&(e[r]=t[r]);return e},_.prototype.registerCustomDataCallback=function(e){this.callbacks.custom||(this.callbacks.custom=[]),(0,s.isFunction)(e)&&this.callbacks.custom.push(e)},_.prototype.getData=function(){this.rawData=this.callbacks.getData(),(0,s.isArray)(this.callbacks.custom)&&this.callbacks.custom.forEach((e=>{const t=e();this.rawData=(0,s.merge)(this.rawData,t)})),this.pluggable.loaded&&(this.rawData.metaTitle=this.pluggable._applyModifications("data_page_title",this.rawData.metaTitle),this.rawData.meta=this.pluggable._applyModifications("data_meta_desc",this.rawData.meta)),this.rawData.titleWidth=(0,a.measureTextWidth)(this.rawData.metaTitle),this.rawData.locale=this.config.locale},_.prototype.refresh=function(){this.pluggable.loaded&&this._pureRefresh()},_.prototype._pureRefresh=function(){this.getData(),this.runAnalyzer()},_.prototype.initAssessorPresenters=function(){(0,s.isUndefined)(this.config.targets.output)||(this.seoAssessorPresenter=new h.default({targets:{output:this.config.targets.output},assessor:this.seoAssessor})),(0,s.isUndefined)(this.config.targets.contentOutput)||(this.contentAssessorPresenter=new h.default({targets:{output:this.config.targets.contentOutput},assessor:this.contentAssessor}))},_.prototype.startTime=function(){this.startTimestamp=(new Date).getTime()},_.prototype.endTime=function(){this.endTimestamp=(new Date).getTime(),this.endTimestamp-this.startTimestamp>this.config.typeDelay&&this.config.typeDelay"+t+"
            "+e.status+"
            "})),r.innerHTML+=""}},_.prototype.removeLoadingDialog=function(){var e=document.getElementById(this.defaultOutputElement),t=document.getElementById("YoastSEO-plugin-loading");""===this.defaultOutputElement||(0,s.isEmpty)(e)||(0,s.isEmpty)(t)||document.getElementById(this.defaultOutputElement).removeChild(document.getElementById("YoastSEO-plugin-loading"))},_.prototype.registerPlugin=function(e,t){return this.pluggable._registerPlugin(e,t)},_.prototype.pluginReady=function(e){return this.pluggable._ready(e)},_.prototype.pluginReloaded=function(e){return this.pluggable._reloaded(e)},_.prototype.registerModification=function(e,t,r,n){return this.pluggable._registerModification(e,t,r,n)},_.prototype.registerAssessment=function(e,t,r){if(!(0,s.isUndefined)(this.seoAssessor))return this.pluggable._registerAssessment(this.defaultSeoAssessor,e,t,r)&&this.pluggable._registerAssessment(this.cornerStoneSeoAssessor,e,t,r)},_.prototype.disableMarkers=function(){(0,s.isUndefined)(this.seoAssessorPresenter)||this.seoAssessorPresenter.disableMarker(),(0,s.isUndefined)(this.contentAssessorPresenter)||this.contentAssessorPresenter.disableMarker()},_.prototype._renderAnalysisResults=function(){this.config.contentAnalysisActive&&!(0,s.isUndefined)(this.contentAssessorPresenter)&&this.contentAssessorPresenter.renderIndividualRatings(),this.config.keywordAnalysisActive&&!(0,s.isUndefined)(this.seoAssessorPresenter)&&(this.seoAssessorPresenter.setKeyword(this.paper.getKeyword()),this.seoAssessorPresenter.render())},_.prototype.analyzeTimer=function(){this.refresh()},_.prototype.registerTest=function(){console.error("This function is deprecated, please use registerAssessment")},_.prototype.switchAssessors=function(e){console.warn("Switch assessor is deprecated since YoastSEO.js version 1.35.0"),this.changeAssessorOptions({useCornerStone:e})},t.default=_},74059:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"usedKeywords",{enumerable:!0,get:function(){return s.default}});var n,s=(n=r(41156))&&n.__esModule?n:{default:n}},41156:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(85551)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}var u=function(e,t){if((0,s.isUndefined)(e))throw new i.default("The previously keyword plugin requires the YoastSEO app");(0,s.isUndefined)(t)&&(t={usedKeywords:{},usedKeywordsPostTypes:{},searchUrl:"",postUrl:""}),this.app=e,this.usedKeywords=t.usedKeywords,this.usedKeywordsPostTypes=t.usedKeywordsPostTypes,this.searchUrl=t.searchUrl,this.postUrl=t.postUrl,this.urlTitle=(0,a.createAnchorOpeningTag)("https://yoa.st/33x"),this.urlCallToAction=(0,a.createAnchorOpeningTag)("https://yoa.st/33y")};u.prototype.registerPlugin=function(){this.app.registerAssessment("usedKeywords",{getResult:this.assess.bind(this),isApplicable:function(e){return e.hasKeyword()}},"previouslyUsedKeywords")},u.prototype.updateKeywordUsage=function(e,t){this.usedKeywords=e,this.usedKeywordsPostTypes=t},u.prototype.scoreAssessment=function(e,t){const r=e.count,s=e.id,i=e.postTypeToDisplay;let a;return 0===r?{text:(0,n.sprintf)( +/* translators: + %1$s expands to a link to an article on yoast.com, + %2$s expands to an anchor end tag. */ +(0,n.__)("%1$sPreviously used keyphrase%2$s: You've not used this keyphrase before, very good.","wordpress-seo"),this.urlTitle,""),score:9}:1===r?(a=``,{ +/* translators: %1$s expands to an admin link where the keyphrase is already used, + %2$s expands to the anchor end tag, %3$s and %4$s expand to links on yoast.com. */ +text:(0,n.sprintf)((0,n.__)("%3$sPreviously used keyphrase%2$s: You've used this keyphrase %1$sonce before%2$s. %4$sDo not use your keyphrase more than once%2$s.","wordpress-seo"),a,"",this.urlTitle,this.urlCallToAction),score:6}):r>1?(a=i?``:``,{ +/* translators: %1$s expands to a link to the admin search page for the keyphrase, + %2$s expands to the anchor end tag, %3$s and %4$s expand to links to yoast.com */ +text:(0,n.sprintf)((0,n.__)("%3$sPreviously used keyphrase%2$s: You've used this keyphrase %1$smultiple times before%2$s. %4$sDo not use your keyphrase more than once%2$s.","wordpress-seo"),a,"",this.urlTitle,this.urlCallToAction),score:1}):void 0},u.prototype.researchPreviouslyUsedKeywords=function(e){const t=e.getKeyword();let r=0,n="",i=0;return!(0,s.isUndefined)(this.usedKeywords[t])&&this.usedKeywords[t].length>0&&(r=this.usedKeywords[t].length,t in this.usedKeywordsPostTypes&&(n=this.usedKeywordsPostTypes[t][0]),i=this.usedKeywords[t][0]),{id:i,count:r,postTypeToDisplay:n}},u.prototype.assess=function(e){var t=this.researchPreviouslyUsedKeywords(e),r=this.scoreAssessment(t,e),n=new o.default;return n.setScore(r.score),n.setText(r.text),n},t.default=u},24910:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return[{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}]}},43879:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if((0,i.isUndefined)(e))return[];const t=(0,s.default)(e);return"nb"===t||"nn"===t?a.nbnn:"bal"===t||"ca"===t?a.ca:a[t]||[]},t.transliterations=void 0;var n,s=(n=r(67404))&&n.__esModule?n:{default:n},i=r(92819);const a=t.transliterations={es:[{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u00FA\u00FC]/g,alternative:"u"},{letter:/[\u00DA\u00DC]/g,alternative:"U"}],pl:[{letter:/[\u0105]/g,alternative:"a"},{letter:/[\u0104]/g,alternative:"A"},{letter:/[\u0107]/g,alternative:"c"},{letter:/[\u0106]/g,alternative:"C"},{letter:/[\u0119]/g,alternative:"e"},{letter:/[\u0118]/g,alternative:"E"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u0141]/g,alternative:"L"},{letter:/[\u0144]/g,alternative:"n"},{letter:/[\u0143]/g,alternative:"N"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u015B]/g,alternative:"s"},{letter:/[\u015A]/g,alternative:"S"},{letter:/[\u017A\u017C]/g,alternative:"z"},{letter:/[\u0179\u017B]/g,alternative:"Z"}],de:[{letter:/[\u00E4]/g,alternative:"ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00FC]/g,alternative:"ue"},{letter:/[\u00DC]/g,alternative:"Ue"},{letter:/[\u00F6]/g,alternative:"oe"},{letter:/[\u00D6]/g,alternative:"Oe"},{letter:/[\u00DF]/g,alternative:"ss"},{letter:/[\u1E9E]/g,alternative:"SS"}],nbnn:[{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00D8]/g,alternative:"Oe"},{letter:/[\u00E9\u00E8\u00EA]/g,alternative:"e"},{letter:/[\u00C9\u00C8\u00CA]/g,alternative:"E"},{letter:/[\u00F3\u00F2\u00F4]/g,alternative:"o"},{letter:/[\u00D3\u00D2\u00D4]/g,alternative:"O"}],sv:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E4]/g,alternative:"ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00F6]/g,alternative:"oe"},{letter:/[\u00D6]/g,alternative:"Oe"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00C0]/g,alternative:"A"}],fi:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"},{letter:/[\u00F6]/g,alternative:"o"},{letter:/[\u00D6]/g,alternative:"O"},{letter:/[\u017E]/g,alternative:"zh"},{letter:/[\u017D]/g,alternative:"Zh"},{letter:/[\u0161]/g,alternative:"sh"},{letter:/[\u0160]/g,alternative:"Sh"}],da:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00D8]/g,alternative:"Oe"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"}],tr:[{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u011F]/g,alternative:"g"},{letter:/[\u011E]/g,alternative:"G"},{letter:/[\u00F6]/g,alternative:"o"},{letter:/[\u00D6]/g,alternative:"O"},{letter:/[\u015F]/g,alternative:"s"},{letter:/[\u015E]/g,alternative:"S"},{letter:/[\u00E2]/g,alternative:"a"},{letter:/[\u00C2]/g,alternative:"A"},{letter:/[\u0131\u00EE]/g,alternative:"i"},{letter:/[\u0130\u00CE]/g,alternative:"I"},{letter:/[\u00FC\u00FB]/g,alternative:"u"},{letter:/[\u00DC\u00DB]/g,alternative:"U"}],lv:[{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u010D]/g,alternative:"c"},{letter:/[\u010C]/g,alternative:"C"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u0123]/g,alternative:"g"},{letter:/[\u0122]/g,alternative:"G"},{letter:/[\u012B]/g,alternative:"i"},{letter:/[\u012A]/g,alternative:"I"},{letter:/[\u0137]/g,alternative:"k"},{letter:/[\u0136]/g,alternative:"K"},{letter:/[\u013C]/g,alternative:"l"},{letter:/[\u013B]/g,alternative:"L"},{letter:/[\u0146]/g,alternative:"n"},{letter:/[\u0145]/g,alternative:"N"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u016B]/g,alternative:"u"},{letter:/[\u016A]/g,alternative:"U"},{letter:/[\u017E]/g,alternative:"z"},{letter:/[\u017D]/g,alternative:"Z"}],is:[{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00F0]/g,alternative:"d"},{letter:/[\u00D0]/g,alternative:"D"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00F3\u00F6]/g,alternative:"o"},{letter:/[\u00D3\u00D6]/g,alternative:"O"},{letter:/[\u00FA]/g,alternative:"u"},{letter:/[\u00DA]/g,alternative:"U"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u00FE]/g,alternative:"th"},{letter:/[\u00DE]/g,alternative:"Th"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"}],fa:[{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00F0]/g,alternative:"d"},{letter:/[\u00D0]/g,alternative:"D"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u00FA]/g,alternative:"u"},{letter:/[\u00DA]/g,alternative:"U"},{letter:/[\u00F3\u00F8]/g,alternative:"o"},{letter:/[\u00D3\u00D8]/g,alternative:"O"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"}],cs:[{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u010D]/g,alternative:"c"},{letter:/[\u010C]/g,alternative:"C"},{letter:/[\u010F]/g,alternative:"d"},{letter:/[\u010E]/g,alternative:"D"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u0148]/g,alternative:"n"},{letter:/[\u0147]/g,alternative:"N"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u0159]/g,alternative:"r"},{letter:/[\u0158]/g,alternative:"R"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0165]/g,alternative:"t"},{letter:/[\u0164]/g,alternative:"T"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u017E]/g,alternative:"z"},{letter:/[\u017D]/g,alternative:"Z"},{letter:/[\u00E9\u011B]/g,alternative:"e"},{letter:/[\u00C9\u011A]/g,alternative:"E"},{letter:/[\u00FA\u016F]/g,alternative:"u"},{letter:/[\u00DA\u016E]/g,alternative:"U"}],ru:[{letter:/[\u0430]/g,alternative:"a"},{letter:/[\u0410]/g,alternative:"A"},{letter:/[\u0431]/g,alternative:"b"},{letter:/[\u0411]/g,alternative:"B"},{letter:/[\u0432]/g,alternative:"v"},{letter:/[\u0412]/g,alternative:"V"},{letter:/[\u0433]/g,alternative:"g"},{letter:/[\u0413]/g,alternative:"G"},{letter:/[\u0434]/g,alternative:"d"},{letter:/[\u0414]/g,alternative:"D"},{letter:/[\u0435]/g,alternative:"e"},{letter:/[\u0415]/g,alternative:"E"},{letter:/[\u0436]/g,alternative:"zh"},{letter:/[\u0416]/g,alternative:"Zh"},{letter:/[\u0437]/g,alternative:"z"},{letter:/[\u0417]/g,alternative:"Z"},{letter:/[\u0456\u0438\u0439]/g,alternative:"i"},{letter:/[\u0406\u0418\u0419]/g,alternative:"I"},{letter:/[\u043A]/g,alternative:"k"},{letter:/[\u041A]/g,alternative:"K"},{letter:/[\u043B]/g,alternative:"l"},{letter:/[\u041B]/g,alternative:"L"},{letter:/[\u043C]/g,alternative:"m"},{letter:/[\u041C]/g,alternative:"M"},{letter:/[\u043D]/g,alternative:"n"},{letter:/[\u041D]/g,alternative:"N"},{letter:/[\u0440]/g,alternative:"r"},{letter:/[\u0420]/g,alternative:"R"},{letter:/[\u043E]/g,alternative:"o"},{letter:/[\u041E]/g,alternative:"O"},{letter:/[\u043F]/g,alternative:"p"},{letter:/[\u041F]/g,alternative:"P"},{letter:/[\u0441]/g,alternative:"s"},{letter:/[\u0421]/g,alternative:"S"},{letter:/[\u0442]/g,alternative:"t"},{letter:/[\u0422]/g,alternative:"T"},{letter:/[\u0443]/g,alternative:"u"},{letter:/[\u0423]/g,alternative:"U"},{letter:/[\u0444]/g,alternative:"f"},{letter:/[\u0424]/g,alternative:"F"},{letter:/[\u0445]/g,alternative:"kh"},{letter:/[\u0425]/g,alternative:"Kh"},{letter:/[\u0446]/g,alternative:"ts"},{letter:/[\u0426]/g,alternative:"Ts"},{letter:/[\u0447]/g,alternative:"ch"},{letter:/[\u0427]/g,alternative:"Ch"},{letter:/[\u0448]/g,alternative:"sh"},{letter:/[\u0428]/g,alternative:"Sh"},{letter:/[\u0449]/g,alternative:"shch"},{letter:/[\u0429]/g,alternative:"Shch"},{letter:/[\u044A]/g,alternative:"ie"},{letter:/[\u042A]/g,alternative:"Ie"},{letter:/[\u044B]/g,alternative:"y"},{letter:/[\u042B]/g,alternative:"Y"},{letter:/[\u044C]/g,alternative:""},{letter:/[\u042C]/g,alternative:""},{letter:/[\u0451\u044D]/g,alternative:"e"},{letter:/[\u0401\u042D]/g,alternative:"E"},{letter:/[\u044E]/g,alternative:"iu"},{letter:/[\u042E]/g,alternative:"Iu"},{letter:/[\u044F]/g,alternative:"ia"},{letter:/[\u042F]/g,alternative:"Ia"}],eo:[{letter:/[\u0109]/g,alternative:"ch"},{letter:/[\u0108]/g,alternative:"Ch"},{letter:/[\u011d]/g,alternative:"gh"},{letter:/[\u011c]/g,alternative:"Gh"},{letter:/[\u0125]/g,alternative:"hx"},{letter:/[\u0124]/g,alternative:"Hx"},{letter:/[\u0135]/g,alternative:"jx"},{letter:/[\u0134]/g,alternative:"Jx"},{letter:/[\u015d]/g,alternative:"sx"},{letter:/[\u015c]/g,alternative:"Sx"},{letter:/[\u016d]/g,alternative:"ux"},{letter:/[\u016c]/g,alternative:"Ux"}],af:[{letter:/[\u00E8\u00EA\u00EB]/g,alternative:"e"},{letter:/[\u00CB\u00C8\u00CA]/g,alternative:"E"},{letter:/[\u00EE\u00EF]/g,alternative:"i"},{letter:/[\u00CE\u00CF]/g,alternative:"I"},{letter:/[\u00F4\u00F6]/g,alternative:"o"},{letter:/[\u00D4\u00D6]/g,alternative:"O"},{letter:/[\u00FB\u00FC]/g,alternative:"u"},{letter:/[\u00DB\u00DC]/g,alternative:"U"}],ca:[{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00C0]/g,alternative:"A"},{letter:/[\u00E9|\u00E8]/g,alternative:"e"},{letter:/[\u00C9|\u00C8]/g,alternative:"E"},{letter:/[\u00ED|\u00EF]/g,alternative:"i"},{letter:/[\u00CD|\u00CF]/g,alternative:"I"},{letter:/[\u00F3|\u00F2]/g,alternative:"o"},{letter:/[\u00D3|\u00D2]/g,alternative:"O"},{letter:/[\u00FA|\u00FC]/g,alternative:"u"},{letter:/[\u00DA|\u00DC]/g,alternative:"U"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"}],ast:[{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"}],an:[{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00F1]/g,alternative:"ny"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00D1]/g,alternative:"Ny"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u00C1]/g,alternative:"A"}],ay:[{letter:/(([\u00EF])|([\u00ED]))/g,alternative:"i"},{letter:/(([\u00CF])|([\u00CD]))/g,alternative:"I"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u0027]/g,alternative:""},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"}],en:[{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0152]/g,alternative:"Oe"},{letter:/[\u00EB\u00E9]/g,alternative:"e"},{letter:/[\u00C9\u00CB]/g,alternative:"E"},{letter:/[\u00F4\u00F6]/g,alternative:"o"},{letter:/[\u00D4\u00D6]/g,alternative:"O"},{letter:/[\u00EF]/g,alternative:"i"},{letter:/[\u00CF]/g,alternative:"I"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"}],fr:[{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0152]/g,alternative:"Oe"},{letter:/[\u00E9\u00E8\u00EB\u00EA]/g,alternative:"e"},{letter:/[\u00C9\u00C8\u00CB\u00CA]/g,alternative:"E"},{letter:/[\u00E0\u00E2]/g,alternative:"a"},{letter:/[\u00C0\u00C2]/g,alternative:"A"},{letter:/[\u00EF\u00EE]/g,alternative:"i"},{letter:/[\u00CF\u00CE]/g,alternative:"I"},{letter:/[\u00F9\u00FB\u00FC]/g,alternative:"u"},{letter:/[\u00D9\u00DB\u00DC]/g,alternative:"U"},{letter:/[\u00F4]/g,alternative:"o"},{letter:/[\u00D4]/g,alternative:"O"},{letter:/[\u00FF]/g,alternative:"y"},{letter:/[\u0178]/g,alternative:"Y"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"}],it:[{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00C0]/g,alternative:"A"},{letter:/[\u00E9\u00E8]/g,alternative:"e"},{letter:/[\u00C9\u00C8]/g,alternative:"E"},{letter:/[\u00EC\u00ED\u00EE]/g,alternative:"i"},{letter:/[\u00CC\u00CD\u00CE]/g,alternative:"I"},{letter:/[\u00F3\u00F2]/g,alternative:"o"},{letter:/[\u00D3\u00D2]/g,alternative:"O"},{letter:/[\u00F9\u00FA]/g,alternative:"u"},{letter:/[\u00D9\u00DA]/g,alternative:"U"}],nl:[{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00E9\u00E8\u00EA\u00EB]/g,alternative:"e"},{letter:/[\u00C9\u00C8\u00CA\u00CB]/g,alternative:"E"},{letter:/[\u00F4\u00F6]/g,alternative:"o"},{letter:/[\u00D4\u00D6]/g,alternative:"O"},{letter:/[\u00EF]/g,alternative:"i"},{letter:/[\u00CF]/g,alternative:"I"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"}],bm:[{letter:/[\u025B]/g,alternative:"e"},{letter:/[\u0190]/g,alternative:"E"},{letter:/[\u0272]/g,alternative:"ny"},{letter:/[\u019D]/g,alternative:"Ny"},{letter:/[\u014B]/g,alternative:"ng"},{letter:/[\u014A]/g,alternative:"Ng"},{letter:/[\u0254]/g,alternative:"o"},{letter:/[\u0186]/g,alternative:"O"}],uk:[{letter:/[\u0431]/g,alternative:"b"},{letter:/[\u0411]/g,alternative:"B"},{letter:/[\u0432]/g,alternative:"v"},{letter:/[\u0412]/g,alternative:"V"},{letter:/[\u0433]/g,alternative:"h"},{letter:/[\u0413]/g,alternative:"H"},{letter:/[\u0491]/g,alternative:"g"},{letter:/[\u0490]/g,alternative:"G"},{letter:/[\u0434]/g,alternative:"d"},{letter:/[\u0414]/g,alternative:"D"},{letter:/[\u043A]/g,alternative:"k"},{letter:/[\u041A]/g,alternative:"K"},{letter:/[\u043B]/g,alternative:"l"},{letter:/[\u041B]/g,alternative:"L"},{letter:/[\u043C]/g,alternative:"m"},{letter:/[\u041C]/g,alternative:"M"},{letter:/[\u0070]/g,alternative:"r"},{letter:/[\u0050]/g,alternative:"R"},{letter:/[\u043F]/g,alternative:"p"},{letter:/[\u041F]/g,alternative:"P"},{letter:/[\u0441]/g,alternative:"s"},{letter:/[\u0421]/g,alternative:"S"},{letter:/[\u0442]/g,alternative:"t"},{letter:/[\u0422]/g,alternative:"T"},{letter:/[\u0443]/g,alternative:"u"},{letter:/[\u0423]/g,alternative:"U"},{letter:/[\u0444]/g,alternative:"f"},{letter:/[\u0424]/g,alternative:"F"},{letter:/[\u0445]/g,alternative:"kh"},{letter:/[\u0425]/g,alternative:"Kh"},{letter:/[\u0446]/g,alternative:"ts"},{letter:/[\u0426]/g,alternative:"Ts"},{letter:/[\u0447]/g,alternative:"ch"},{letter:/[\u0427]/g,alternative:"Ch"},{letter:/[\u0448]/g,alternative:"sh"},{letter:/[\u0428]/g,alternative:"Sh"},{letter:/[\u0449]/g,alternative:"shch"},{letter:/[\u0429]/g,alternative:"Shch"},{letter:/[\u044C\u042C]/g,alternative:""},{letter:/[\u0436]/g,alternative:"zh"},{letter:/[\u0416]/g,alternative:"Zh"},{letter:/[\u0437]/g,alternative:"z"},{letter:/[\u0417]/g,alternative:"Z"},{letter:/[\u0438]/g,alternative:"y"},{letter:/[\u0418]/g,alternative:"Y"},{letter:/^[\u0454]/g,alternative:"ye"},{letter:/[\s][\u0454]/g,alternative:" ye"},{letter:/[\u0454]/g,alternative:"ie"},{letter:/^[\u0404]/g,alternative:"Ye"},{letter:/[\s][\u0404]/g,alternative:" Ye"},{letter:/[\u0404]/g,alternative:"IE"},{letter:/^[\u0457]/g,alternative:"yi"},{letter:/[\s][\u0457]/g,alternative:" yi"},{letter:/[\u0457]/g,alternative:"i"},{letter:/^[\u0407]/g,alternative:"Yi"},{letter:/[\s][\u0407]/g,alternative:" Yi"},{letter:/[\u0407]/g,alternative:"I"},{letter:/^[\u0439]/g,alternative:"y"},{letter:/[\s][\u0439]/g,alternative:" y"},{letter:/[\u0439]/g,alternative:"i"},{letter:/^[\u0419]/g,alternative:"Y"},{letter:/[\s][\u0419]/g,alternative:" Y"},{letter:/[\u0419]/g,alternative:"I"},{letter:/^[\u044E]/g,alternative:"yu"},{letter:/[\s][\u044E]/g,alternative:" yu"},{letter:/[\u044E]/g,alternative:"iu"},{letter:/^[\u042E]/g,alternative:"Yu"},{letter:/[\s][\u042E]/g,alternative:" Yu"},{letter:/[\u042E]/g,alternative:"IU"},{letter:/^[\u044F]/g,alternative:"ya"},{letter:/[\s][\u044F]/g,alternative:" ya"},{letter:/[\u044F]/g,alternative:"ia"},{letter:/^[\u042F]/g,alternative:"Ya"},{letter:/[\s][\u042F]/g,alternative:" Ya"},{letter:/[\u042F]/g,alternative:"IA"}],br:[{letter:/\u0063\u0027\u0068/g,alternative:"ch"},{letter:/\u0043\u0027\u0048/g,alternative:"CH"},{letter:/[\u00e2]/g,alternative:"a"},{letter:/[\u00c2]/g,alternative:"A"},{letter:/[\u00ea]/g,alternative:"e"},{letter:/[\u00ca]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00f4]/g,alternative:"o"},{letter:/[\u00d4]/g,alternative:"O"},{letter:/[\u00fb\u00f9\u00fc]/g,alternative:"u"},{letter:/[\u00db\u00d9\u00dc]/g,alternative:"U"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"}],ch:[{letter:/[\u0027]/g,alternative:""},{letter:/[\u00e5]/g,alternative:"a"},{letter:/[\u00c5]/g,alternative:"A"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"}],co:[{letter:/[\u00e2\u00e0]/g,alternative:"a"},{letter:/[\u00c2\u00c0]/g,alternative:"A"},{letter:/[\u00e6\u04d5]/g,alternative:"ae"},{letter:/[\u00c6\u04d4]/g,alternative:"Ae"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e9\u00ea\u00e8\u00eb]/g,alternative:"e"},{letter:/[\u00c9\u00ca\u00c8\u00cb]/g,alternative:"E"},{letter:/[\u00ec\u00ee\u00ef]/g,alternative:"i"},{letter:/[\u00cc\u00ce\u00cf]/g,alternative:"I"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"},{letter:/[\u00f4\u00f2]/g,alternative:"o"},{letter:/[\u00d4\u00d2]/g,alternative:"O"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0152]]/g,alternative:"Oe"},{letter:/[\u00f9\u00fc]/g,alternative:"u"},{letter:/[\u00d9\u00dc]/g,alternative:"U"},{letter:/[\u00ff]/g,alternative:"y"},{letter:/[\u0178]/g,alternative:"Y"}],csb:[{letter:/[\u0105\u00e3]/g,alternative:"a"},{letter:/[\u0104\u00c3]/g,alternative:"A"},{letter:/[\u00e9\u00eb]/g,alternative:"e"},{letter:/[\u00c9\u00cb]/g,alternative:"E"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u0141]/g,alternative:"L"},{letter:/[\u0144]/g,alternative:"n"},{letter:/[\u0143]/g,alternative:"N"},{letter:/[\u00f2\u00f3\u00f4]/g,alternative:"o"},{letter:/[\u00d2\u00d3\u00d4]/g,alternative:"O"},{letter:/[\u00f9]/g,alternative:"u"},{letter:/[\u00d9]/g,alternative:"U"},{letter:/[\u017c]/g,alternative:"z"},{letter:/[\u017b]/g,alternative:"Z"}],cy:[{letter:/[\u00e2]/g,alternative:"a"},{letter:/[\u00c2]/g,alternative:"A"},{letter:/[\u00ea]/g,alternative:"e"},{letter:/[\u00ca]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00f4]/g,alternative:"o"},{letter:/[\u00d4]/g,alternative:"O"},{letter:/[\u00fb]/g,alternative:"u"},{letter:/[\u00db]/g,alternative:"U"},{letter:/[\u0175]/g,alternative:"w"},{letter:/[\u0174]/g,alternative:"W"},{letter:/[\u0177]/g,alternative:"y"},{letter:/[\u0176]/g,alternative:"Y"}],ee:[{letter:/[\u0256]/g,alternative:"d"},{letter:/[\u0189]/g,alternative:"D"},{letter:/[\u025b]/g,alternative:"e"},{letter:/[\u0190]/g,alternative:"E"},{letter:/[\u0192]/g,alternative:"f"},{letter:/[\u0191]/g,alternative:"F"},{letter:/[\u0263]/g,alternative:"g"},{letter:/[\u0194]/g,alternative:"G"},{letter:/[\u014b]/g,alternative:"ng"},{letter:/[\u014a]/g,alternative:"Ng"},{letter:/[\u0254]/g,alternative:"o"},{letter:/[\u0186]/g,alternative:"O"},{letter:/[\u028b]/g,alternative:"w"},{letter:/[\u01b2]/g,alternative:"W"},{letter:/\u0061\u0303/g,alternative:"a"},{letter:/[\u00e1\u00e0\u01ce\u00e2\u00e3]/g,alternative:"a"},{letter:/\u0041\u0303/g,alternative:"A"},{letter:/[\u00c1\u00c0\u01cd\u00c2\u00c3]/g,alternative:"A"},{letter:/[\u00e9\u00e8\u011b\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u011a\u00ca]/g,alternative:"E"},{letter:/[\u00f3\u00f2\u01d2\u00f4]/g,alternative:"o"},{letter:/[\u00d3\u00d2\u01d1\u00d4]/g,alternative:"O"},{letter:/[\u00fa\u00f9\u01d4\u00fb]/g,alternative:"u"},{letter:/[\u00da\u00d9\u01d3\u00db]/g,alternative:"U"},{letter:/[\u00ed\u00ec\u01d0\u00ee]/g,alternative:"i"},{letter:/[\u00cd\u00cc\u01cf\u00ce]/g,alternative:"I"}],et:[{letter:/[\u0161]/g,alternative:"sh"},{letter:/[\u0160]/g,alternative:"Sh"},{letter:/[\u017e]/g,alternative:"zh"},{letter:/[\u017d]/g,alternative:"Zh"},{letter:/[\u00f5\u00f6]/g,alternative:"o"},{letter:/[\u00d6\u00d5]/g,alternative:"O"},{letter:/[\u00e4]/g,alternative:"a"},{letter:/[\u00c4]/g,alternative:"A"},{letter:/[\u00fc]/g,alternative:"u"},{letter:/[\u00dc]/g,alternative:"U"}],eu:[{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00fc]/g,alternative:"u"},{letter:/[\u00dc]/g,alternative:"U"}],fuc:[{letter:/[\u0253]/g,alternative:"b"},{letter:/[\u0181]/g,alternative:"B"},{letter:/[\u0257]/g,alternative:"d"},{letter:/[\u018a]/g,alternative:"D"},{letter:/[\u014b]/g,alternative:"ng"},{letter:/[\u014a]/g,alternative:"Ng"},{letter:/[\u0272\u00f1]/g,alternative:"ny"},{letter:/[\u019d\u00d1]/g,alternative:"Ny"},{letter:/[\u01b4]/g,alternative:"y"},{letter:/[\u01b3]/g,alternative:"Y"},{letter:/[\u0260]/g,alternative:"g"},{letter:/[\u0193]/g,alternative:"G"}],fj:[{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u012b]/g,alternative:"i"},{letter:/[\u012a]/g,alternative:"I"},{letter:/[\u016b]/g,alternative:"u"},{letter:/[\u016a]/g,alternative:"U"},{letter:/[\u014d]/g,alternative:"o"},{letter:/[\u014c]/g,alternative:"O"}],frp:[{letter:/[\u00e2]/g,alternative:"a"},{letter:/[\u00c2]/g,alternative:"A"},{letter:/[\u00ea\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00ca\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00fb\u00fc]/g,alternative:"u"},{letter:/[\u00db\u00dc]/g,alternative:"U"},{letter:/[\u00f4]/g,alternative:"o"},{letter:/[\u00d4]/g,alternative:"O"}],fur:[{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00e0\u00e2]/g,alternative:"a"},{letter:/[\u00c0\u00c2]/g,alternative:"A"},{letter:/[\u00e8\u00ea]/g,alternative:"e"},{letter:/[\u00c8\u00ca]/g,alternative:"E"},{letter:/[\u00ec\u00ee]/g,alternative:"i"},{letter:/[\u00cc\u00ce]/g,alternative:"I"},{letter:/[\u00f2\u00f4]/g,alternative:"o"},{letter:/[\u00d2\u00d4]/g,alternative:"O"},{letter:/[\u00f9\u00fb]/g,alternative:"u"},{letter:/[\u00d9\u00db]/g,alternative:"U"},{letter:/[\u010d]/g,alternative:"c"},{letter:/[\u010c]/g,alternative:"C"},{letter:/[\u011f]/g,alternative:"g"},{letter:/[\u011e]/g,alternative:"G"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"}],fy:[{letter:/[\u00e2\u0101\u00e4\u00e5]/g,alternative:"a"},{letter:/[\u00c2\u0100\u00c4\u00c5]/g,alternative:"A"},{letter:/[\u00ea\u00e9\u0113]/g,alternative:"e"},{letter:/[\u00ca\u00c9\u0112]/g,alternative:"E"},{letter:/[\u00f4\u00f6]/g,alternative:"o"},{letter:/[\u00d4\u00d6]/g,alternative:"O"},{letter:/[\u00fa\u00fb\u00fc]/g,alternative:"u"},{letter:/[\u00da\u00db\u00dc]/g,alternative:"U"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u0111\u00f0]/g,alternative:"d"},{letter:/[\u0110\u00d0]/g,alternative:"D"}],ga:[{letter:/[\u00e1]/g,alternative:"a"},{letter:/[\u00c1]/g,alternative:"A"},{letter:/[\u00e9]/g,alternative:"e"},{letter:/[\u00c9]/g,alternative:"E"},{letter:/[\u00f3]/g,alternative:"o"},{letter:/[\u00d3]/g,alternative:"O"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"}],gd:[{letter:/[\u00e0]/g,alternative:"a"},{letter:/[\u00c0]/g,alternative:"A"},{letter:/[\u00e8]/g,alternative:"e"},{letter:/[\u00c8]/g,alternative:"E"},{letter:/[\u00f2]/g,alternative:"o"},{letter:/[\u00d2]/g,alternative:"O"},{letter:/[\u00f9]/g,alternative:"u"},{letter:/[\u00d9]/g,alternative:"U"},{letter:/[\u00ec]/g,alternative:"i"},{letter:/[\u00cc]/g,alternative:"I"}],gl:[{letter:/[\u00e1\u00e0]/g,alternative:"a"},{letter:/[\u00c1\u00c0]/g,alternative:"A"},{letter:/[\u00e9\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00ca]/g,alternative:"E"},{letter:/[\u00ed\u00ef]/g,alternative:"i"},{letter:/[\u00cd\u00cf]/g,alternative:"I"},{letter:/[\u00f3]/g,alternative:"o"},{letter:/[\u00d3]/g,alternative:"O"},{letter:/[\u00fa\u00fc]/g,alternative:"u"},{letter:/[\u00da\u00dc]/g,alternative:"U"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"}],gn:[{letter:/[\u2019]/g,alternative:""},{letter:/\u0067\u0303/g,alternative:"g"},{letter:/\u0047\u0303/g,alternative:"G"},{letter:/[\u00e3]/g,alternative:"a"},{letter:/[\u00c3]/g,alternative:"A"},{letter:/[\u1ebd]/g,alternative:"e"},{letter:/[\u1ebc]/g,alternative:"E"},{letter:/[\u0129]/g,alternative:"i"},{letter:/[\u0128]/g,alternative:"I"},{letter:/[\u00f5]/g,alternative:"o"},{letter:/[\u00d5]/g,alternative:"O"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"},{letter:/[\u0169]/g,alternative:"u"},{letter:/[\u0168]/g,alternative:"U"},{letter:/[\u1ef9]/g,alternative:"y"},{letter:/[\u1ef8]/g,alternative:"Y"}],gsw:[{letter:/[\u00e4]/g,alternative:"a"},{letter:/[\u00c4]/g,alternative:"A"},{letter:/[\u00f6]/g,alternative:"o"},{letter:/[\u00d6]/g,alternative:"O"},{letter:/[\u00fc]/g,alternative:"u"},{letter:/[\u00dc]/g,alternative:"U"}],hat:[{letter:/[\u00e8]/g,alternative:"e"},{letter:/[\u00c8]/g,alternative:"E"},{letter:/[\u00f2]/g,alternative:"o"},{letter:/[\u00d2]/g,alternative:"O"}],haw:[{letter:/[\u02bb\u0027\u2019]/g,alternative:""},{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u012b]/g,alternative:"i"},{letter:/[\u014d]/g,alternative:"o"},{letter:/[\u016b]/g,alternative:"u"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u012a]/g,alternative:"I"},{letter:/[\u014c]/g,alternative:"O"},{letter:/[\u016a]/g,alternative:"U"}],hr:[{letter:/[\u010d\u0107]/g,alternative:"c"},{letter:/[\u010c\u0106]/g,alternative:"C"},{letter:/[\u0111]/g,alternative:"dj"},{letter:/[\u0110]/g,alternative:"Dj"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"},{letter:/[\u01c4]/g,alternative:"DZ"},{letter:/[\u01c5]/g,alternative:"Dz"},{letter:/[\u01c6]/g,alternative:"dz"}],ka:[{letter:/[\u10d0]/g,alternative:"a"},{letter:/[\u10d1]/g,alternative:"b"},{letter:/[\u10d2]/g,alternative:"g"},{letter:/[\u10d3]/g,alternative:"d"},{letter:/[\u10d4]/g,alternative:"e"},{letter:/[\u10d5]/g,alternative:"v"},{letter:/[\u10d6]/g,alternative:"z"},{letter:/[\u10d7]/g,alternative:"t"},{letter:/[\u10d8]/g,alternative:"i"},{letter:/[\u10d9]/g,alternative:"k"},{letter:/[\u10da]/g,alternative:"l"},{letter:/[\u10db]/g,alternative:"m"},{letter:/[\u10dc]/g,alternative:"n"},{letter:/[\u10dd]/g,alternative:"o"},{letter:/[\u10de]/g,alternative:"p"},{letter:/[\u10df]/g,alternative:"zh"},{letter:/[\u10e0]/g,alternative:"r"},{letter:/[\u10e1]/g,alternative:"s"},{letter:/[\u10e2]/g,alternative:"t"},{letter:/[\u10e3]/g,alternative:"u"},{letter:/[\u10e4]/g,alternative:"p"},{letter:/[\u10e5]/g,alternative:"k"},{letter:/[\u10e6]/g,alternative:"gh"},{letter:/[\u10e7]/g,alternative:"q"},{letter:/[\u10e8]/g,alternative:"sh"},{letter:/[\u10e9]/g,alternative:"ch"},{letter:/[\u10ea]/g,alternative:"ts"},{letter:/[\u10eb]/g,alternative:"dz"},{letter:/[\u10ec]/g,alternative:"ts"},{letter:/[\u10ed]/g,alternative:"ch"},{letter:/[\u10ee]/g,alternative:"kh"},{letter:/[\u10ef]/g,alternative:"j"},{letter:/[\u10f0]/g,alternative:"h"}],kal:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00D8]/g,alternative:"Oe"}],kin:[{letter:/[\u2019\u0027]/g,alternative:""}],lb:[{letter:/[\u00e4]/g,alternative:"a"},{letter:/[\u00c4]/g,alternative:"A"},{letter:/[\u00eb\u00e9]/g,alternative:"e"},{letter:/[\u00cb\u00c9]/g,alternative:"E"}],li:[{letter:/[\u00e1\u00e2\u00e0\u00e4]/g,alternative:"a"},{letter:/[\u00c1\u00c2\u00c0\u00c4]/g,alternative:"A"},{letter:/[\u00eb\u00e8\u00ea]/g,alternative:"e"},{letter:/[\u00cb\u00c8\u00ca]/g,alternative:"E"},{letter:/[\u00f6\u00f3]/g,alternative:"o"},{letter:/[\u00d6\u00d3]/g,alternative:"O"}],lin:[{letter:/[\u00e1\u00e2\u01ce]/g,alternative:"a"},{letter:/[\u00c1\u00c2\u01cd]/g,alternative:"A"},{letter:/\u025b\u0301/g,alternative:"e"},{letter:/\u025b\u0302/g,alternative:"e"},{letter:/\u025b\u030c/g,alternative:"e"},{letter:/[\u00e9\u00ea\u011b\u025b]/g,alternative:"e"},{letter:/\u0190\u0301/g,alternative:"E"},{letter:/\u0190\u0302/g,alternative:"E"},{letter:/\u0190\u030c/g,alternative:"E"},{letter:/[\u00c9\u00ca\u011a\u0190]/g,alternative:"E"},{letter:/[\u00ed\u00ee\u01d0]/g,alternative:"i"},{letter:/[\u00cd\u00ce\u01cf]/g,alternative:"I"},{letter:/\u0254\u0301/g,alternative:"o"},{letter:/\u0254\u0302/g,alternative:"o"},{letter:/\u0254\u030c/g,alternative:"o"},{letter:/[\u00f3\u00f4\u01d2\u0254]/g,alternative:"o"},{letter:/\u0186\u0301/g,alternative:"O"},{letter:/\u0186\u0302/g,alternative:"O"},{letter:/\u0186\u030c/g,alternative:"O"},{letter:/[\u00d3\u00d4\u01d1\u0186]/g,alternative:"O"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"}],lt:[{letter:/[\u0105]/g,alternative:"a"},{letter:/[\u0104]/g,alternative:"A"},{letter:/[\u010d]/g,alternative:"c"},{letter:/[\u010c]/g,alternative:"C"},{letter:/[\u0119\u0117]/g,alternative:"e"},{letter:/[\u0118\u0116]/g,alternative:"E"},{letter:/[\u012f]/g,alternative:"i"},{letter:/[\u012e]/g,alternative:"I"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0173\u016b]/g,alternative:"u"},{letter:/[\u0172\u016a]/g,alternative:"U"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"}],mg:[{letter:/[\u00f4]/g,alternative:"ao"},{letter:/[\u00d4]/g,alternative:"Ao"}],mk:[{letter:/[\u0430]/g,alternative:"a"},{letter:/[\u0410]/g,alternative:"A"},{letter:/[\u0431]/g,alternative:"b"},{letter:/[\u0411]/g,alternative:"B"},{letter:/[\u0432]/g,alternative:"v"},{letter:/[\u0412]/g,alternative:"V"},{letter:/[\u0433]/g,alternative:"g"},{letter:/[\u0413]/g,alternative:"G"},{letter:/[\u0434]/g,alternative:"d"},{letter:/[\u0414]/g,alternative:"D"},{letter:/[\u0453]/g,alternative:"gj"},{letter:/[\u0403]/g,alternative:"Gj"},{letter:/[\u0435]/g,alternative:"e"},{letter:/[\u0415]/g,alternative:"E"},{letter:/[\u0436]/g,alternative:"zh"},{letter:/[\u0416]/g,alternative:"Zh"},{letter:/[\u0437]/g,alternative:"z"},{letter:/[\u0417]/g,alternative:"Z"},{letter:/[\u0455]/g,alternative:"dz"},{letter:/[\u0405]/g,alternative:"Dz"},{letter:/[\u0438]/g,alternative:"i"},{letter:/[\u0418]/g,alternative:"I"},{letter:/[\u0458]/g,alternative:"j"},{letter:/[\u0408]/g,alternative:"J"},{letter:/[\u043A]/g,alternative:"k"},{letter:/[\u041A]/g,alternative:"K"},{letter:/[\u043B]/g,alternative:"l"},{letter:/[\u041B]/g,alternative:"L"},{letter:/[\u0459]/g,alternative:"lj"},{letter:/[\u0409]/g,alternative:"Lj"},{letter:/[\u043C]/g,alternative:"m"},{letter:/[\u041C]/g,alternative:"M"},{letter:/[\u043D]/g,alternative:"n"},{letter:/[\u041D]/g,alternative:"N"},{letter:/[\u045A]/g,alternative:"nj"},{letter:/[\u040A]/g,alternative:"Nj"},{letter:/[\u043E]/g,alternative:"o"},{letter:/[\u041E]/g,alternative:"O"},{letter:/[\u0440]/g,alternative:"r"},{letter:/[\u0420]/g,alternative:"R"},{letter:/[\u043F]/g,alternative:"p"},{letter:/[\u041F]/g,alternative:"P"},{letter:/[\u0441]/g,alternative:"s"},{letter:/[\u0421]/g,alternative:"S"},{letter:/[\u0442]/g,alternative:"t"},{letter:/[\u0422]/g,alternative:"T"},{letter:/[\u045C]/g,alternative:"kj"},{letter:/[\u040C]/g,alternative:"Kj"},{letter:/[\u0443]/g,alternative:"u"},{letter:/[\u0423]/g,alternative:"U"},{letter:/[\u0444]/g,alternative:"f"},{letter:/[\u0424]/g,alternative:"F"},{letter:/[\u0445]/g,alternative:"h"},{letter:/[\u0425]/g,alternative:"H"},{letter:/[\u0446]/g,alternative:"c"},{letter:/[\u0426]/g,alternative:"C"},{letter:/[\u0447]/g,alternative:"ch"},{letter:/[\u0427]/g,alternative:"Ch"},{letter:/[\u045F]/g,alternative:"dj"},{letter:/[\u040F]/g,alternative:"Dj"},{letter:/[\u0448]/g,alternative:"sh"},{letter:/[\u0428]/g,alternative:"Sh"}],mri:[{letter:/[\u0101]/g,alternative:"aa"},{letter:/[\u0100]/g,alternative:"Aa"},{letter:/[\u0113]/g,alternative:"ee"},{letter:/[\u0112]/g,alternative:"Ee"},{letter:/[\u012b]/g,alternative:"ii"},{letter:/[\u012a]/g,alternative:"Ii"},{letter:/[\u014d]/g,alternative:"oo"},{letter:/[\u014c]/g,alternative:"Oo"},{letter:/[\u016b]/g,alternative:"uu"},{letter:/[\u016a]/g,alternative:"Uu"}],mwl:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e1]/g,alternative:"a"},{letter:/[\u00c1]/g,alternative:"A"},{letter:/[\u00e9\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00ca]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u00f3\u00f4]/g,alternative:"o"},{letter:/[\u00d3\u00d4]/g,alternative:"O"},{letter:/[\u00fa\u0169]/g,alternative:"u"},{letter:/[\u00da\u0168]/g,alternative:"U"}],oci:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e0\u00e1]/g,alternative:"a"},{letter:/[\u00c0\u00c1]/g,alternative:"A"},{letter:/[\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00ed\u00ef]/g,alternative:"i"},{letter:/[\u00cd\u00cf]/g,alternative:"I"},{letter:/[\u00f2\u00f3]/g,alternative:"o"},{letter:/[\u00d2\u00d3]/g,alternative:"O"},{letter:/[\u00fa\u00fc]/g,alternative:"u"},{letter:/[\u00da\u00dc]/g,alternative:"U"},{letter:/[\u00b7]/g,alternative:""}],orm:[{letter:/[\u0027]/g,alternative:""}],pt:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e1\u00e2\u00e3\u00e0]/g,alternative:"a"},{letter:/[\u00c1\u00c2\u00c3\u00c0]/g,alternative:"A"},{letter:/[\u00e9\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00ca]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u00f3\u00f4\u00f5]/g,alternative:"o"},{letter:/[\u00d3\u00d4\u00d5]/g,alternative:"O"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"}],roh:[{letter:/[\u00e9\u00e8\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u00ca]/g,alternative:"E"},{letter:/[\u00ef]/g,alternative:"i"},{letter:/[\u00cf]/g,alternative:"I"},{letter:/[\u00f6]/g,alternative:"oe"},{letter:/[\u00d6]/g,alternative:"Oe"},{letter:/[\u00fc]/g,alternative:"ue"},{letter:/[\u00dc]/g,alternative:"Ue"},{letter:/[\u00e4]/g,alternative:"ae"},{letter:/[\u00c4]/g,alternative:"Ae"}],rup:[{letter:/[\u00e3]/g,alternative:"a"},{letter:/[\u00c3]/g,alternative:"A"}],ro:[{letter:/[\u0103\u00e2]/g,alternative:"a"},{letter:/[\u0102\u00c2]/g,alternative:"A"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u0219\u015f]/g,alternative:"s"},{letter:/[\u0218\u015e]/g,alternative:"S"},{letter:/[\u021b\u0163]/g,alternative:"t"},{letter:/[\u021a\u0162]/g,alternative:"T"}],tlh:[{letter:/[\u2019\u0027]/g,alternative:""}],sk:[{letter:/[\u01c4]/g,alternative:"DZ"},{letter:/[\u01c5]/g,alternative:"Dz"},{letter:/[\u01c6]/g,alternative:"dz"},{letter:/[\u00e1\u00e4]/g,alternative:"a"},{letter:/[\u00c1\u00c4]/g,alternative:"A"},{letter:/[\u010d]/g,alternative:"c"},{letter:/[\u010c]/g,alternative:"C"},{letter:/[\u010f]/g,alternative:"d"},{letter:/[\u010e]/g,alternative:"D"},{letter:/[\u00e9]/g,alternative:"e"},{letter:/[\u00c9]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u013e\u013a]/g,alternative:"l"},{letter:/[\u013d\u0139]/g,alternative:"L"},{letter:/[\u0148]/g,alternative:"n"},{letter:/[\u0147]/g,alternative:"N"},{letter:/[\u00f3\u00f4]/g,alternative:"o"},{letter:/[\u00d3\u00d4]/g,alternative:"O"},{letter:/[\u0155]/g,alternative:"r"},{letter:/[\u0154]/g,alternative:"R"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0165]/g,alternative:"t"},{letter:/[\u0164]/g,alternative:"T"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"},{letter:/[\u00fd]/g,alternative:"y"},{letter:/[\u00dd]/g,alternative:"Y"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"}],sl:[{letter:/[\u010d\u0107]/g,alternative:"c"},{letter:/[\u010c\u0106]/g,alternative:"C"},{letter:/[\u0111]/g,alternative:"d"},{letter:/[\u0110]/g,alternative:"D"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"},{letter:/[\u00e0\u00e1\u0203\u0201]/g,alternative:"a"},{letter:/[\u00c0\u00c1\u0202\u0200]/g,alternative:"A"},{letter:/[\u00e8\u00e9\u0207\u0205]/g,alternative:"e"},{letter:/\u01dd\u0300/g,alternative:"e"},{letter:/\u01dd\u030f/g,alternative:"e"},{letter:/\u1eb9\u0301/g,alternative:"e"},{letter:/\u1eb9\u0311/g,alternative:"e"},{letter:/[\u00c8\u00c9\u0206\u0204]/g,alternative:"E"},{letter:/\u018e\u030f/g,alternative:"E"},{letter:/\u018e\u0300/g,alternative:"E"},{letter:/\u1eb8\u0311/g,alternative:"E"},{letter:/\u1eb8\u0301/g,alternative:"E"},{letter:/[\u00ec\u00ed\u020b\u0209]/g,alternative:"i"},{letter:/[\u00cc\u00cd\u020a\u0208]/g,alternative:"I"},{letter:/[\u00f2\u00f3\u020f\u020d]/g,alternative:"o"},{letter:/\u1ecd\u0311/g,alternative:"o"},{letter:/\u1ecd\u0301/g,alternative:"o"},{letter:/\u1ecc\u0311/g,alternative:"O"},{letter:/\u1ecc\u0301/g,alternative:"O"},{letter:/[\u00d2\u00d3\u020e\u020c]/g,alternative:"O"},{letter:/[\u00f9\u00fa\u0217\u0215]/g,alternative:"u"},{letter:/[\u00d9\u00da\u0216\u0214]/g,alternative:"U"},{letter:/[\u0155\u0213]/g,alternative:"r"},{letter:/[\u0154\u0212]/g,alternative:"R"}],sq:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00eb]/g,alternative:"e"},{letter:/[\u00cb]/g,alternative:"E"}],hu:[{letter:/[\u00e1]/g,alternative:"a"},{letter:/[\u00c1]/g,alternative:"A"},{letter:/[\u00e9]/g,alternative:"e"},{letter:/[\u00c9]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u00f3\u00f6\u0151]/g,alternative:"o"},{letter:/[\u00d3\u00d6\u0150]/g,alternative:"O"},{letter:/[\u00fa\u00fc\u0171]/g,alternative:"u"},{letter:/[\u00da\u00dc\u0170]/g,alternative:"U"}],srd:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e0\u00e1]/g,alternative:"a"},{letter:/[\u00c0\u00c1]/g,alternative:"A"},{letter:/[\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00ed\u00ef]/g,alternative:"i"},{letter:/[\u00cd\u00cf]/g,alternative:"I"},{letter:/[\u00f2\u00f3]/g,alternative:"o"},{letter:/[\u00d2\u00d3]/g,alternative:"O"},{letter:/[\u00fa\u00f9]/g,alternative:"u"},{letter:/[\u00da\u00d9]/g,alternative:"U"}],szl:[{letter:/[\u0107]/g,alternative:"c"},{letter:/[\u0106]/g,alternative:"C"},{letter:/[\u00e3]/g,alternative:"a"},{letter:/[\u00c3]/g,alternative:"A"},{letter:/[\u0142]/g,alternative:"u"},{letter:/[\u0141]/g,alternative:"U"},{letter:/[\u006e]/g,alternative:"n"},{letter:/[\u004e]/g,alternative:"N"},{letter:/[\u014f\u014d\u00f4\u00f5]/g,alternative:"o"},{letter:/[\u014e\u014c\u00d4\u00d5]/g,alternative:"O"},{letter:/[\u015b]/g,alternative:"s"},{letter:/[\u015a]/g,alternative:"S"},{letter:/[\u017a\u017c\u017e]/g,alternative:"z"},{letter:/[\u0179\u017b\u017d]/g,alternative:"Z"},{letter:/[\u016f]/g,alternative:"u"},{letter:/[\u016e]/g,alternative:"U"},{letter:/[\u010d]/g,alternative:"cz"},{letter:/[\u010c]/g,alternative:"Cz"},{letter:/[\u0159]/g,alternative:"rz"},{letter:/[\u0158]/g,alternative:"Rz"},{letter:/[\u0161]/g,alternative:"sz"},{letter:/[\u0160]/g,alternative:"Sz"}],tah:[{letter:/[\u0101\u00e2\u00e0]/g,alternative:"a"},{letter:/[\u0100\u00c2\u00c0]/g,alternative:"A"},{letter:/[\u00ef\u00ee\u00ec]/g,alternative:"i"},{letter:/[\u00cf\u00ce\u00cc]/g,alternative:"I"},{letter:/[\u0113\u00ea\u00e9]/g,alternative:"e"},{letter:/[\u0112\u00ca\u00c9]/g,alternative:"E"},{letter:/[\u016b\u00fb\u00fa]/g,alternative:"u"},{letter:/[\u016a\u00db\u00da]/g,alternative:"U"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00f2\u00f4\u014d]/g,alternative:"o"},{letter:/[\u00d2\u00d4\u014c]/g,alternative:"O"},{letter:/[\u2019\u0027\u2018]/g,alternative:""}],vec:[{letter:/\u0073\u002d\u0063/g,alternative:"sc"},{letter:/\u0053\u002d\u0043/g,alternative:"SC"},{letter:/\u0073\u0027\u0063/g,alternative:"sc"},{letter:/\u0053\u0027\u0043/g,alternative:"SC"},{letter:/\u0073\u2019\u0063/g,alternative:"sc"},{letter:/\u0053\u2019\u0043/g,alternative:"SC"},{letter:/\u0073\u2018\u0063/g,alternative:"sc"},{letter:/\u0053\u2018\u0043/g,alternative:"SC"},{letter:/\u0053\u002d\u0063/g,alternative:"Sc"},{letter:/\u0053\u0027\u0063/g,alternative:"Sc"},{letter:/\u0053\u2019\u0063/g,alternative:"Sc"},{letter:/\u0053\u2018\u0063/g,alternative:"Sc"},{letter:/\u0063\u2019/g,alternative:"c"},{letter:/\u0043\u2019/g,alternative:"C"},{letter:/\u0063\u2018/g,alternative:"c"},{letter:/\u0043\u2018/g,alternative:"C"},{letter:/\u0063\u0027/g,alternative:"c"},{letter:/\u0043\u0027/g,alternative:"C"},{letter:/[\u00e0\u00e1\u00e2]/g,alternative:"a"},{letter:/[\u00c0\u00c1\u00c2]/g,alternative:"A"},{letter:/[\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00f2\u00f3]/g,alternative:"o"},{letter:/[\u00d2\u00d3]/g,alternative:"O"},{letter:/[\u00f9\u00fa]/g,alternative:"u"},{letter:/[\u00d9\u00da]/g,alternative:"U"},{letter:/[\u00e7\u010d\u010b]/g,alternative:"c"},{letter:/[\u00c7\u010c\u010a]/g,alternative:"C"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u00a3\u0141]/g,alternative:"L"},{letter:/\ud835\udeff/g,alternative:"dh"},{letter:/[\u0111\u03b4]/g,alternative:"dh"},{letter:/[\u0110\u0394]/g,alternative:"Dh"}],wa:[{letter:/[\u00e2\u00e5]/g,alternative:"a"},{letter:/[\u00c2\u00c5]/g,alternative:"A"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/\u0065\u030a/g,alternative:"e"},{letter:/\u0045\u030a/g,alternative:"E"},{letter:/[\u00eb\u00ea\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u00ca\u00cb]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00f4\u00f6]/g,alternative:"o"},{letter:/[\u00d6\u00d4]/g,alternative:"O"},{letter:/[\u00fb]/g,alternative:"u"},{letter:/[\u00db]/g,alternative:"U"}],yor:[{letter:/[\u00e1\u00e0]/g,alternative:"a"},{letter:/[\u00c1\u00c0]/g,alternative:"A"},{letter:/[\u00ec\u00ed]/g,alternative:"i"},{letter:/[\u00cc\u00cd]/g,alternative:"I"},{letter:/\u1ecd\u0301/g,alternative:"o"},{letter:/\u1ecc\u0301/g,alternative:"O"},{letter:/\u1ecd\u0300/g,alternative:"o"},{letter:/\u1ecc\u0300/g,alternative:"O"},{letter:/[\u00f3\u00f2\u1ecd]/g,alternative:"o"},{letter:/[\u00d3\u00d2\u1ecc]/g,alternative:"O"},{letter:/[\u00fa\u00f9]/g,alternative:"u"},{letter:/[\u00da\u00d9]/g,alternative:"U"},{letter:/\u1eb9\u0301/g,alternative:"e"},{letter:/\u1eb8\u0301/g,alternative:"E"},{letter:/\u1eb9\u0300/g,alternative:"e"},{letter:/\u1eb8\u0300/g,alternative:"E"},{letter:/[\u00e9\u00e8\u1eb9]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u1eb8]/g,alternative:"E"},{letter:/[\u1e63]/g,alternative:"s"},{letter:/[\u1e62]/g,alternative:"S"}]}},78035:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"presenter",{enumerable:!0,get:function(){return s.default}});var n,s=(n=r(1456))&&n.__esModule?n:{default:n}},1456:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){const e=(0,n.__)("Content optimization:","wordpress-seo");return{feedback:{className:"na",screenReaderText:(0,n.__)("Feedback","wordpress-seo"),fullText:`${e} ${(0,n.__)("Has feedback","wordpress-seo")}`,screenReaderReadabilityText:""},bad:{className:"bad",screenReaderText:(0,n.__)("Needs improvement","wordpress-seo"),fullText:`${e} ${(0,n.__)("Needs improvement","wordpress-seo")}`,screenReaderReadabilityText:(0,n.__)("Needs improvement","wordpress-seo")},ok:{className:"ok",screenReaderText:(0,n.__)("OK SEO score","wordpress-seo"),fullText:`${e} ${(0,n.__)("OK SEO score","wordpress-seo")}`,screenReaderReadabilityText:(0,n.__)("OK","wordpress-seo")},good:{className:"good",screenReaderText:(0,n.__)("Good SEO score","wordpress-seo"),fullText:`${e} ${(0,n.__)("Good SEO score","wordpress-seo")}`,screenReaderReadabilityText:(0,n.__)("Good","wordpress-seo")}}};var n=r(65736)},23324:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if((0,i.isUndefined)(e))return[];let t=a;return t=t.concat(d((0,s.default)(e))),t};var n,s=(n=r(67404))&&n.__esModule?n:{default:n},i=r(92819);const a=[{letter:/[\u00A3]/g,alternative:""},{letter:/[\u20AC]/g,alternative:"E"},{letter:/[\u00AA]/g,alternative:"a"},{letter:/[\u00BA]/g,alternative:"o"},{letter:/[\u00C0]/g,alternative:"A"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00C2]/g,alternative:"A"},{letter:/[\u00C3]/g,alternative:"A"},{letter:/[\u00C4]/g,alternative:"A"},{letter:/[\u00C5]/g,alternative:"A"},{letter:/[\u00C6]/g,alternative:"AE"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00C8]/g,alternative:"E"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00CA]/g,alternative:"E"},{letter:/[\u00CB]/g,alternative:"E"},{letter:/[\u00CC]/g,alternative:"I"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00CE]/g,alternative:"I"},{letter:/[\u00CF]/g,alternative:"I"},{letter:/[\u00D0]/g,alternative:"D"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00D2]/g,alternative:"O"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u00D4]/g,alternative:"O"},{letter:/[\u00D5]/g,alternative:"O"},{letter:/[\u00D6]/g,alternative:"O"},{letter:/[\u00D8]/g,alternative:"O"},{letter:/[\u00D9]/g,alternative:"U"},{letter:/[\u00DA]/g,alternative:"U"},{letter:/[\u00DB]/g,alternative:"U"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u00DE]/g,alternative:"TH"},{letter:/[\u00DF]/g,alternative:"s"},{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00E2]/g,alternative:"a"},{letter:/[\u00E3]/g,alternative:"a"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00E5]/g,alternative:"a"},{letter:/[\u00E6]/g,alternative:"ae"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00E8]/g,alternative:"e"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00EA]/g,alternative:"e"},{letter:/[\u00EB]/g,alternative:"e"},{letter:/[\u00EC]/g,alternative:"i"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00EE]/g,alternative:"i"},{letter:/[\u00EF]/g,alternative:"i"},{letter:/[\u00F0]/g,alternative:"d"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00F2]/g,alternative:"o"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00F4]/g,alternative:"o"},{letter:/[\u00F5]/g,alternative:"o"},{letter:/[\u00F6]/g,alternative:"o"},{letter:/[\u00F8]/g,alternative:"o"},{letter:/[\u00F9]/g,alternative:"u"},{letter:/[\u00FA]/g,alternative:"u"},{letter:/[\u00FB]/g,alternative:"u"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00FE]/g,alternative:"th"},{letter:/[\u00FF]/g,alternative:"y"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0102]/g,alternative:"A"},{letter:/[\u0103]/g,alternative:"a"},{letter:/[\u0104]/g,alternative:"A"},{letter:/[\u0105]/g,alternative:"a"},{letter:/[\u0106]/g,alternative:"C"},{letter:/[\u0107]/g,alternative:"c"},{letter:/[\u0108]/g,alternative:"C"},{letter:/[\u0109]/g,alternative:"c"},{letter:/[\u010A]/g,alternative:"C"},{letter:/[\u010B]/g,alternative:"c"},{letter:/[\u010C]/g,alternative:"C"},{letter:/[\u010D]/g,alternative:"c"},{letter:/[\u010E]/g,alternative:"D"},{letter:/[\u010F]/g,alternative:"d"},{letter:/[\u0110]/g,alternative:"D"},{letter:/[\u0111]/g,alternative:"d"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u0114]/g,alternative:"E"},{letter:/[\u0115]/g,alternative:"e"},{letter:/[\u0116]/g,alternative:"E"},{letter:/[\u0117]/g,alternative:"e"},{letter:/[\u0118]/g,alternative:"E"},{letter:/[\u0119]/g,alternative:"e"},{letter:/[\u011A]/g,alternative:"E"},{letter:/[\u011B]/g,alternative:"e"},{letter:/[\u011C]/g,alternative:"G"},{letter:/[\u011D]/g,alternative:"g"},{letter:/[\u011E]/g,alternative:"G"},{letter:/[\u011F]/g,alternative:"g"},{letter:/[\u0120]/g,alternative:"G"},{letter:/[\u0121]/g,alternative:"g"},{letter:/[\u0122]/g,alternative:"G"},{letter:/[\u0123]/g,alternative:"g"},{letter:/[\u0124]/g,alternative:"H"},{letter:/[\u0125]/g,alternative:"h"},{letter:/[\u0126]/g,alternative:"H"},{letter:/[\u0127]/g,alternative:"h"},{letter:/[\u0128]/g,alternative:"I"},{letter:/[\u0129]/g,alternative:"i"},{letter:/[\u012A]/g,alternative:"I"},{letter:/[\u012B]/g,alternative:"i"},{letter:/[\u012C]/g,alternative:"I"},{letter:/[\u012D]/g,alternative:"i"},{letter:/[\u012E]/g,alternative:"I"},{letter:/[\u012F]/g,alternative:"i"},{letter:/[\u0130]/g,alternative:"I"},{letter:/[\u0131]/g,alternative:"i"},{letter:/[\u0132]/g,alternative:"IJ"},{letter:/[\u0133]/g,alternative:"ij"},{letter:/[\u0134]/g,alternative:"J"},{letter:/[\u0135]/g,alternative:"j"},{letter:/[\u0136]/g,alternative:"K"},{letter:/[\u0137]/g,alternative:"k"},{letter:/[\u0138]/g,alternative:"k"},{letter:/[\u0139]/g,alternative:"L"},{letter:/[\u013A]/g,alternative:"l"},{letter:/[\u013B]/g,alternative:"L"},{letter:/[\u013C]/g,alternative:"l"},{letter:/[\u013D]/g,alternative:"L"},{letter:/[\u013E]/g,alternative:"l"},{letter:/[\u013F]/g,alternative:"L"},{letter:/[\u0140]/g,alternative:"l"},{letter:/[\u0141]/g,alternative:"L"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u0143]/g,alternative:"N"},{letter:/[\u0144]/g,alternative:"n"},{letter:/[\u0145]/g,alternative:"N"},{letter:/[\u0146]/g,alternative:"n"},{letter:/[\u0147]/g,alternative:"N"},{letter:/[\u0148]/g,alternative:"n"},{letter:/[\u0149]/g,alternative:"n"},{letter:/[\u014A]/g,alternative:"N"},{letter:/[\u014B]/g,alternative:"n"},{letter:/[\u014C]/g,alternative:"O"},{letter:/[\u014D]/g,alternative:"o"},{letter:/[\u014E]/g,alternative:"O"},{letter:/[\u014F]/g,alternative:"o"},{letter:/[\u0150]/g,alternative:"O"},{letter:/[\u0151]/g,alternative:"o"},{letter:/[\u0152]/g,alternative:"OE"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0154]/g,alternative:"R"},{letter:/[\u0155]/g,alternative:"r"},{letter:/[\u0156]/g,alternative:"R"},{letter:/[\u0157]/g,alternative:"r"},{letter:/[\u0158]/g,alternative:"R"},{letter:/[\u0159]/g,alternative:"r"},{letter:/[\u015A]/g,alternative:"S"},{letter:/[\u015B]/g,alternative:"s"},{letter:/[\u015C]/g,alternative:"S"},{letter:/[\u015D]/g,alternative:"s"},{letter:/[\u015E]/g,alternative:"S"},{letter:/[\u015F]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0162]/g,alternative:"T"},{letter:/[\u0163]/g,alternative:"t"},{letter:/[\u0164]/g,alternative:"T"},{letter:/[\u0165]/g,alternative:"t"},{letter:/[\u0166]/g,alternative:"T"},{letter:/[\u0167]/g,alternative:"t"},{letter:/[\u0168]/g,alternative:"U"},{letter:/[\u0169]/g,alternative:"u"},{letter:/[\u016A]/g,alternative:"U"},{letter:/[\u016B]/g,alternative:"u"},{letter:/[\u016C]/g,alternative:"U"},{letter:/[\u016D]/g,alternative:"u"},{letter:/[\u016E]/g,alternative:"U"},{letter:/[\u016F]/g,alternative:"u"},{letter:/[\u0170]/g,alternative:"U"},{letter:/[\u0171]/g,alternative:"u"},{letter:/[\u0172]/g,alternative:"U"},{letter:/[\u0173]/g,alternative:"u"},{letter:/[\u0174]/g,alternative:"W"},{letter:/[\u0175]/g,alternative:"w"},{letter:/[\u0176]/g,alternative:"Y"},{letter:/[\u0177]/g,alternative:"y"},{letter:/[\u0178]/g,alternative:"Y"},{letter:/[\u0179]/g,alternative:"Z"},{letter:/[\u017A]/g,alternative:"z"},{letter:/[\u017B]/g,alternative:"Z"},{letter:/[\u017C]/g,alternative:"z"},{letter:/[\u017D]/g,alternative:"Z"},{letter:/[\u017E]/g,alternative:"z"},{letter:/[\u017F]/g,alternative:"s"},{letter:/[\u01A0]/g,alternative:"O"},{letter:/[\u01A1]/g,alternative:"o"},{letter:/[\u01AF]/g,alternative:"U"},{letter:/[\u01B0]/g,alternative:"u"},{letter:/[\u01CD]/g,alternative:"A"},{letter:/[\u01CE]/g,alternative:"a"},{letter:/[\u01CF]/g,alternative:"I"},{letter:/[\u01D0]/g,alternative:"i"},{letter:/[\u01D1]/g,alternative:"O"},{letter:/[\u01D2]/g,alternative:"o"},{letter:/[\u01D3]/g,alternative:"U"},{letter:/[\u01D4]/g,alternative:"u"},{letter:/[\u01D5]/g,alternative:"U"},{letter:/[\u01D6]/g,alternative:"u"},{letter:/[\u01D7]/g,alternative:"U"},{letter:/[\u01D8]/g,alternative:"u"},{letter:/[\u01D9]/g,alternative:"U"},{letter:/[\u01DA]/g,alternative:"u"},{letter:/[\u01DB]/g,alternative:"U"},{letter:/[\u01DC]/g,alternative:"u"},{letter:/[\u0218]/g,alternative:"S"},{letter:/[\u0219]/g,alternative:"s"},{letter:/[\u021A]/g,alternative:"T"},{letter:/[\u021B]/g,alternative:"t"},{letter:/[\u0251]/g,alternative:"a"},{letter:/[\u1EA0]/g,alternative:"A"},{letter:/[\u1EA1]/g,alternative:"a"},{letter:/[\u1EA2]/g,alternative:"A"},{letter:/[\u1EA3]/g,alternative:"a"},{letter:/[\u1EA4]/g,alternative:"A"},{letter:/[\u1EA5]/g,alternative:"a"},{letter:/[\u1EA6]/g,alternative:"A"},{letter:/[\u1EA7]/g,alternative:"a"},{letter:/[\u1EA8]/g,alternative:"A"},{letter:/[\u1EA9]/g,alternative:"a"},{letter:/[\u1EAA]/g,alternative:"A"},{letter:/[\u1EAB]/g,alternative:"a"},{letter:/[\u1EA6]/g,alternative:"A"},{letter:/[\u1EAD]/g,alternative:"a"},{letter:/[\u1EAE]/g,alternative:"A"},{letter:/[\u1EAF]/g,alternative:"a"},{letter:/[\u1EB0]/g,alternative:"A"},{letter:/[\u1EB1]/g,alternative:"a"},{letter:/[\u1EB2]/g,alternative:"A"},{letter:/[\u1EB3]/g,alternative:"a"},{letter:/[\u1EB4]/g,alternative:"A"},{letter:/[\u1EB5]/g,alternative:"a"},{letter:/[\u1EB6]/g,alternative:"A"},{letter:/[\u1EB7]/g,alternative:"a"},{letter:/[\u1EB8]/g,alternative:"E"},{letter:/[\u1EB9]/g,alternative:"e"},{letter:/[\u1EBA]/g,alternative:"E"},{letter:/[\u1EBB]/g,alternative:"e"},{letter:/[\u1EBC]/g,alternative:"E"},{letter:/[\u1EBD]/g,alternative:"e"},{letter:/[\u1EBE]/g,alternative:"E"},{letter:/[\u1EBF]/g,alternative:"e"},{letter:/[\u1EC0]/g,alternative:"E"},{letter:/[\u1EC1]/g,alternative:"e"},{letter:/[\u1EC2]/g,alternative:"E"},{letter:/[\u1EC3]/g,alternative:"e"},{letter:/[\u1EC4]/g,alternative:"E"},{letter:/[\u1EC5]/g,alternative:"e"},{letter:/[\u1EC6]/g,alternative:"E"},{letter:/[\u1EC7]/g,alternative:"e"},{letter:/[\u1EC8]/g,alternative:"I"},{letter:/[\u1EC9]/g,alternative:"i"},{letter:/[\u1ECA]/g,alternative:"I"},{letter:/[\u1ECB]/g,alternative:"i"},{letter:/[\u1ECC]/g,alternative:"O"},{letter:/[\u1ECD]/g,alternative:"o"},{letter:/[\u1ECE]/g,alternative:"O"},{letter:/[\u1ECF]/g,alternative:"o"},{letter:/[\u1ED0]/g,alternative:"O"},{letter:/[\u1ED1]/g,alternative:"o"},{letter:/[\u1ED2]/g,alternative:"O"},{letter:/[\u1ED3]/g,alternative:"o"},{letter:/[\u1ED4]/g,alternative:"O"},{letter:/[\u1ED5]/g,alternative:"o"},{letter:/[\u1ED6]/g,alternative:"O"},{letter:/[\u1ED7]/g,alternative:"o"},{letter:/[\u1ED8]/g,alternative:"O"},{letter:/[\u1ED9]/g,alternative:"o"},{letter:/[\u1EDA]/g,alternative:"O"},{letter:/[\u1EDB]/g,alternative:"o"},{letter:/[\u1EDC]/g,alternative:"O"},{letter:/[\u1EDD]/g,alternative:"o"},{letter:/[\u1EDE]/g,alternative:"O"},{letter:/[\u1EDF]/g,alternative:"o"},{letter:/[\u1EE0]/g,alternative:"O"},{letter:/[\u1EE1]/g,alternative:"o"},{letter:/[\u1EE2]/g,alternative:"O"},{letter:/[\u1EE3]/g,alternative:"o"},{letter:/[\u1EE4]/g,alternative:"U"},{letter:/[\u1EE5]/g,alternative:"u"},{letter:/[\u1EE6]/g,alternative:"U"},{letter:/[\u1EE7]/g,alternative:"u"},{letter:/[\u1EE8]/g,alternative:"U"},{letter:/[\u1EE9]/g,alternative:"u"},{letter:/[\u1EEA]/g,alternative:"U"},{letter:/[\u1EEB]/g,alternative:"u"},{letter:/[\u1EEC]/g,alternative:"U"},{letter:/[\u1EED]/g,alternative:"u"},{letter:/[\u1EEE]/g,alternative:"U"},{letter:/[\u1EEF]/g,alternative:"u"},{letter:/[\u1EF0]/g,alternative:"U"},{letter:/[\u1EF1]/g,alternative:"u"},{letter:/[\u1EF2]/g,alternative:"Y"},{letter:/[\u1EF3]/g,alternative:"y"},{letter:/[\u1EF4]/g,alternative:"Y"},{letter:/[\u1EF5]/g,alternative:"y"},{letter:/[\u1EF6]/g,alternative:"Y"},{letter:/[\u1EF7]/g,alternative:"y"},{letter:/[\u1EF8]/g,alternative:"Y"},{letter:/[\u1EF9]/g,alternative:"y"}],o=[{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00E4]/g,alternative:"ae"},{letter:/[\u00D6]/g,alternative:"Oe"},{letter:/[\u00F6]/g,alternative:"oe"},{letter:/[\u00DC]/g,alternative:"Ue"},{letter:/[\u00FC]/g,alternative:"ue"},{letter:/[\u1E9E]/g,alternative:"SS"},{letter:/[\u00DF]/g,alternative:"ss"}],l=[{letter:/[\u00C6]/g,alternative:"Ae"},{letter:/[\u00E6]/g,alternative:"ae"},{letter:/[\u00D8]/g,alternative:"Oe"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E5]/g,alternative:"aa"}],u=[{letter:/[\u00B7]/g,alternative:"ll"}],c=[{letter:/[\u0110]/g,alternative:"DJ"},{letter:/[\u0111]/g,alternative:"dj"}],d=function(e){switch(e){case"de":return o;case"da":return l;case"ca":return u;case"sr":case"bs":return c;default:return[]}}},35468:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return[" ","\\n","\\r","\\t"," ","Û”","ØŸ","ØŒ","Ø›"," ",".",",","'","(",")",'"',"+","-",";","!","?",":","/","»","«","‹","›","<",">","â€","“","ã€","〞","〟","‟","„"]}},10152:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WORD_BOUNDARY_WITH_HYPHEN=t.WORD_BOUNDARY_WITHOUT_HYPHEN=void 0,t.WORD_BOUNDARY_WITH_HYPHEN="[\\s\\u2013\\u002d]",t.WORD_BOUNDARY_WITHOUT_HYPHEN="[\\s\\u2013]"},62887:(e,t,r)=>{"use strict";var n;function s(e){Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,((n=r(89539))&&n.__esModule?n:{default:n}).default.inherits(s,Error),t.default=s},85551:(e,t,r)=>{"use strict";var n;function s(e){Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.message=e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,((n=r(89539))&&n.__esModule?n:{default:n}).default.inherits(s,Error),t.default=s},25003:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.measureTextWidth=void 0;const r="yoast-measurement-element";t.measureTextWidth=function(e){let t=document.getElementById(r);return t||(t=function(){const e=document.createElement("div");return e.id=r,e.style.position="absolute",e.style.left="-9999em",e.style.top=0,e.style.height=0,e.style.overflow="hidden",e.style.fontFamily="arial, sans-serif",e.style.fontSize="20px",e.style.fontWeight="400",document.body.appendChild(e),e}()),t.innerText=e,t.offsetWidth}},47661:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.showTrace=s;var n=r(92819);function s(e){(0,n.isUndefined)(e)&&(e=""),(0,n.isUndefined)(console)||(0,n.isUndefined)(console.trace)||console.trace(e)}t.default={showTrace:s}},52453:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819);const s=function(){};s.prototype.buildMockElement=function(){const e=[];return e.nodeType=1,e},s.prototype.buildMockResearcher=function(e,t=!1,r=!1,s=!1,i=!1){return!t||"object"!=typeof e&&"object"!=typeof i&&"object"!=typeof s?{getResearch:function(){return e},getData:function(){return r},getHelper:function(){return i},hasHelper:function(){return e},getConfig:function(){return s},hasConfig:function(t){return!(0,n.isUndefined)(e[t])}}:{getResearch:function(t){return e[t]},hasResearch:function(t){return!(0,n.isUndefined)(e[t])},addResearch:function(t,r){e[t]=r},getData:function(){return r},getHelper:function(e){return i[e]},hasHelper:function(e){return!(0,n.isUndefined)(i[e])},addHelper:function(e,t){i||(i={}),i[e]=t},getConfig:function(e){return s[e]},hasConfig:function(e){return!(0,n.isUndefined)(s[e])},addConfig:function(e,t){s[e]=t}}},s.prototype.buildMockString=function(e,t){let r="";e=e||"Test ",t=t||1;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return Math.round(e)===e?Math.round(e):Math.round(10*e)/10}},54057:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r="%%"){r=(0,n.escapeRegExp)(r);const s=new RegExp(`${r}(.+?)${r}`,"g");let i,a=e;for(;null!==(i=s.exec(e));){const e=i[1],s=new RegExp(`${r}${(0,n.escapeRegExp)(e)}${r}`,"g");e in t&&(a=a.replace(s,t[e]))}return a};var n=r(92819)},89175:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getLanguagesWithWordComplexity=function(){return["en","es","de","fr"]}},73816:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getLanguagesWithWordFormSupport=function(){return["en","de","es","fr","it","nl","ru","id","pt","pl","ar","sv","he","hu","nb","tr","cs","sk","el","ja"]}},33888:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.htmlEntitiesRegex=t.htmlEntities=t.hashedHtmlEntitiesRegexStart=t.hashedHtmlEntitiesRegexEnd=t.hashedHtmlEntities=void 0;const r=t.htmlEntities=new Map([["amp;","&"],["lt;","<"],["gt;",">"],["quot;",'"'],["apos;","'"],["ndash;","–"],["mdash;","—"],["copy;","©"],["reg;","®"],["trade;","â„¢"],["pound;","£"],["yen;","Â¥"],["euro;","€"],["dollar;","$"],["deg;","°"],["asymp;","≈"],["ne;","≠"],["nbsp;"," "]]),n=(t.htmlEntitiesRegex=new RegExp("&("+[...r.keys()].join("|")+")","ig"),t.hashedHtmlEntities=new Map);r.forEach(((e,t)=>n.set("#"+t,e))),t.hashedHtmlEntitiesRegexStart=new RegExp("^("+[...n.keys()].join("|")+")"),t.hashedHtmlEntitiesRegexEnd=new RegExp("("+[...n.keys()].join("|")+")$")},64495:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){for(let r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createAnchorOpeningTag",{enumerable:!0,get:function(){return l.createAnchorOpeningTag}}),Object.defineProperty(t,"formatNumber",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"getLanguagesWithWordComplexity",{enumerable:!0,get:function(){return o.getLanguagesWithWordComplexity}}),Object.defineProperty(t,"getLanguagesWithWordFormSupport",{enumerable:!0,get:function(){return i.getLanguagesWithWordFormSupport}}),t.htmlEntities=void 0,Object.defineProperty(t,"measureTextWidth",{enumerable:!0,get:function(){return s.measureTextWidth}});var n,s=r(25003),i=r(73816),a=(n=r(17179))&&n.__esModule?n:{default:n},o=r(89175),l=r(33140),u=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=s?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}(r(33888));function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}t.htmlEntities=u},23319:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class r{constructor(e={}){this.configure(e)}configure(e){this._config={params:{},...e}}static createQueryString(e){return Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&")}append(e,t={}){let n=encodeURI(e);const s=r.createQueryString({...this._config.params,...t});return""!==s&&(n+="?"+s),n}createAnchorOpeningTag(e,t={}){return``}}t.default=r},33140:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(28774);Object.keys(n).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===n[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return n[e]}}))}))},28774:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.configureShortlinker=function(e){a().configure(e)},t.createAnchorOpeningTag=function(e,t={}){return a().createAnchorOpeningTag(e,t)},t.createShortlink=function(e,t={}){return a().append(e,t)};var n,s=(n=r(23319))&&n.__esModule?n:{default:n};let i;function a(){return null===i.yoast.shortlinker&&(i.yoast.shortlinker=new s.default),i.yoast.shortlinker}i="undefined"==typeof window?"undefined"==typeof self?r.g:self:window,i.yoast=i.yoast||{},i.yoast.shortlinker=i.yoast.shortlinker||null},67986:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=H(r(62887)),i=H(r(85551)),a=H(r(40027)),o=H(r(99447)),l=H(r(86232)),u=H(r(14117)),c=H(r(69564)),d=H(r(3479)),h=H(r(63216)),p=H(r(82163)),f=G(r(78160)),g=H(r(901)),m=H(r(45095)),_=H(r(41564)),y=H(r(72619)),E=H(r(52364)),T=H(r(18807)),A=H(r(58743)),v=H(r(62987)),b=H(r(21706)),S=H(r(31051)),I=H(r(52948)),O=H(r(57419)),C=G(r(82242)),N=r(74066),D=H(r(72286)),w=H(r(90497)),P=H(r(96458)),R=H(r(31015)),k=H(r(7045)),L=H(r(48799)),M=H(r(25969)),x=H(r(99074)),F=H(r(44518)),U=H(r(47647));function B(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(B=function(e){return e?r:t})(e)}function G(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=B(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=s?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}function H(e){return e&&e.__esModule?e:{default:e}}t.default=class{constructor(e){this.paper=e,this.defaultResearches={altTagCount:a.default,countSentencesFromText:o.default,findKeywordInFirstParagraph:l.default,findKeyphraseInSEOTitle:u.default,findTransitionWords:c.default,functionWordsInKeyphrase:d.default,getAnchorsWithKeyphrase:h.default,getFleschReadingScore:p.default,getKeyphraseCount:C.default,getKeyphraseDensity:f.default,getKeywordDensity:f.getKeywordDensity,getLinks:g.default,getLinkStatistics:m.default,getParagraphs:_.default,getParagraphLength:y.default,getProminentWordsForInsights:T.default,getProminentWordsForInternalLinking:A.default,getSentenceBeginnings:v.default,getSubheadingTextLengths:b.default,h1s:S.default,imageCount:I.default,keyphraseLength:O.default,keywordCount:C.keywordCount,keywordCountInSlug:N.keywordCountInSlug,keywordCountInUrl:N.keywordCountInUrl,matchKeywordInSubheadings:D.default,metaDescriptionKeyword:w.default,metaDescriptionLength:P.default,morphology:R.default,pageTitleWidth:k.default,readingTime:L.default,sentences:M.default,wordCountInText:F.default,videoCount:x.default,getPassiveVoiceResult:E.default},this._data={},this.customResearches={},this.helpers={memoizedTokenizer:U.default},this.config={areHyphensWordBoundaries:!0}}setPaper(e){this.paper=e}addResearch(e,t){if((0,n.isUndefined)(e)||(0,n.isEmpty)(e))throw new i.default("Research name cannot be empty");if(!(t instanceof Function))throw new s.default("The research requires a Function callback.");this.customResearches[e]=t}addResearchData(e,t){this._data[e]=t}addHelper(e,t){if((0,n.isUndefined)(e)||(0,n.isEmpty)(e))throw new i.default("Helper name cannot be empty");if(!(t instanceof Function))throw new s.default("The research requires a Function callback.");this.helpers[e]=t}addConfig(e,t){if((0,n.isUndefined)(e)||(0,n.isEmpty)(e))throw new i.default("Failed to add the custom researcher config. Config name cannot be empty.");if((0,n.isUndefined)(t)||(0,n.isEmpty)(t)&&t===Object(t))throw new i.default("Failed to add the custom researcher config. Config cannot be empty.");this.config[e]=t}hasResearch(e){return Object.keys(this.getAvailableResearches()).filter((function(t){return t===e})).length>0}hasHelper(e){return Object.keys(this.getAvailableHelpers()).filter((function(t){return t===e})).length>0}hasConfig(e){return Object.keys(this.getAvailableConfig()).filter((function(t){return t===e})).length>0}hasResearchData(e){return Object.keys(this.getAvailableResearchData()).filter((function(t){return t===e})).length>0}getAvailableResearches(){return(0,n.merge)(this.defaultResearches,this.customResearches)}getAvailableHelpers(){return this.helpers}getAvailableConfig(){return this.config}getAvailableResearchData(){return this._data}getResearch(e){if((0,n.isUndefined)(e)||(0,n.isEmpty)(e))throw new i.default("Research name cannot be empty");return!!this.hasResearch(e)&&this.getAvailableResearches()[e](this.paper,this)}getData(e){return!!this.hasResearchData(e)&&this._data[e]}getConfig(e){return!!this.hasConfig(e)&&this.config[e]}getHelper(e){return!!this.hasHelper(e)&&this.helpers[e]}}},82676:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(41054))&&n.__esModule?n:{default:n};t.default=function(e,t){if(0===t.length)return[];const r=((e,t)=>{const r=e.tokens,n=[];for(let e=r.length-1;e>=0;e--){const s=r[e];t.some((e=>e.sourceCodeRange.startOffset===s.sourceCodeRange.startOffset||e.sourceCodeRange.endOffset===s.sourceCodeRange.endOffset))?n.unshift("",s.text,""):n.unshift(s.text)}return n.join("").replace(new RegExp("([  ]?)","ig"),"$1")})(e,t);return(e=>{const t=[];return e.sort((function(e,t){return e.getPositionStart()-t.getPositionStart()})),e.forEach((e=>{if(0===t.length)return void t.push(e);const r=t[t.length-1];r.getPositionEnd()+1===e.getPositionStart()||e.getPositionStart()<=r.getPositionEnd()?(r.setPositionEnd(e.getPositionEnd()),r.setBlockPositionEnd(e.getBlockPositionEnd())):t.push(e)})),t})(t.map((t=>{const n=t.sourceCodeRange.startOffset,i=t.sourceCodeRange.endOffset;return new s.default({position:{startOffset:n,endOffset:i,startOffsetBlock:n-(e.parentStartOffset||0),endOffsetBlock:i-(e.parentStartOffset||0),clientId:e.parentClientId||"",attributeId:e.parentAttributeId||"",isFirstSection:e.isParentFirstSectionOfBlock||!1},marked:r,original:e.text})})))}},29368:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFieldsToMark=function(e,t){const r=(0,n.uniq)((0,n.flatten)(e.map((e=>{if(!(0,n.isUndefined)(e.getFieldsToMark()))return e.getFieldsToMark()})))),i=[];return r.forEach((e=>{"heading"===e&&(0,s.getSubheadings)(t).forEach((e=>{i.push(e[0])}))})),{fieldsToMark:r,selectedHTML:i}};var n=r(92819),s=r(84285)},89272:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=[...e.matchAll(new RegExp("]+)?>(.*?)<\\/h\\1>","ig"))],r=[];return t.forEach(((e,s)=>{const i=e[0],a=e.index,o=t[s+1];let l;l=(0,n.isUndefined)(o)?e.input.length:o.index;const u=e.input.slice(a+i.length,l);r.push({subheading:i,text:u,index:a})})),r};var n=r(92819)},84285:(e,t)=>{"use strict";function r(e){const t=[],r=/]+)?>(.*?)<\/h\1>/gi;let n;for(;null!==(n=r.exec(e));)t.push(n);return t}function n(e){const t=[],r=/]+)?>(.*?)<\/h\1>/gi;let n;for(;null!==(n=r.exec(e));)t.push(n);return t}function s(e){return r(e).map((e=>e[0]))}function i(e){return n(e).map((e=>e[0]))}function a(e){return e.replace(/]+)?>(.*?)<\/h\1>/gi,"")}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.getSubheadingContents=s,t.getSubheadingContentsTopLevel=i,t.getSubheadings=r,t.getSubheadingsTopLevel=n,t.removeSubheadingsTopLevel=a,t.default={getSubheadings:r,getSubheadingsTopLevel:n,getSubheadingContents:s,getSubheadingContentsTopLevel:i,removeSubheadingsTopLevel:a}},1831:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.inlineElements=t.getBlocks=t.default=t.blockElements=void 0,t.isBlockElement=A,t.isInlineElement=v;var n,s=r(92819),i=(n=r(14429))&&n.__esModule?n:{default:n};const a=t.blockElements=["address","article","aside","blockquote","canvas","dd","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","noscript","ol","output","p","pre","section","table","tfoot","ul","video"],o=t.inlineElements=["b","big","i","small","tt","abbr","acronym","cite","code","dfn","em","kbd","strong","samp","time","var","a","bdo","br","img","map","object","q","script","span","sub","sup","button","input","label","select","textarea"],l=new RegExp("^("+a.join("|")+")$","i"),u=new RegExp("^("+o.join("|")+")$","i"),c=new RegExp("^<("+a.join("|")+")[^>]*?>$","i"),d=new RegExp("^]*?>$","i"),h=new RegExp("^<("+o.join("|")+")[^>]*>$","i"),p=new RegExp("^]*>$","i"),f=/^<([^>\s/]+)[^>]*>$/,g=/^<\/([^>\s]+)[^>]*>$/,m=/^[^<]+$/,_=/^<[^><]*$/,y=//g;let E,T=[];function A(e){return l.test(e)}function v(e){return u.test(e)}const b=t.getBlocks=(0,s.memoize)((function(e){const t=[];let r=0,n="",a="",o="";return e=e.replace(y,""),T=[],E=(0,i.default)((function(e){T.push(e)})),E.addRule(m,"content"),E.addRule(_,"greater-than-sign-content"),E.addRule(c,"block-start"),E.addRule(d,"block-end"),E.addRule(h,"inline-start"),E.addRule(p,"inline-end"),E.addRule(f,"other-element-start"),E.addRule(g,"other-element-end"),E.onText(e),E.end(),(0,s.forEach)(T,(function(e,s){const i=T[s+1];switch(e.type){case"content":case"greater-than-sign-content":case"inline-start":case"inline-end":case"other-tag":case"other-element-start":case"other-element-end":case"greater than sign":i&&(0!==r||"block-start"!==i.type&&"block-end"!==i.type)?a+=e.src:(a+=e.src,t.push(a),n="",a="",o="");break;case"block-start":0!==r&&(""!==a.trim()&&t.push(a),a="",o=""),r++,n=e.src;break;case"block-end":r--,o=e.src,""!==n&&""!==o?t.push(n+a+o):""!==a.trim()&&t.push(a),n="",a="",o=""}r<0&&(r=0)})),t}));t.default={blockElements:a,inlineElements:o,isBlockElement:A,isInlineElement:v,getBlocks:b}},96908:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return i=[],a=!1,o=[],c.write(e),c.parseComplete(),i.join("")};var n,s=(n=r(23719))&&n.__esModule?n:{default:n};let i=[],a=!1,o=[];const l=["script","style","code","pre","blockquote","textarea"],u=["yoast-table-of-contents","yoast-reading-time__wrapper","elementor-button-wrapper","elementor-divider","elementor-spacer","elementor-custom-embed","elementor-icon-wrapper","elementor-icon-box-wrapper","elementor-counter","elementor-progress-wrapper","elementor-alert","elementor-soundcloud-wrapper","elementor-shortcode","elementor-menu-anchor","elementor-title"],c=new s.default.Parser({onopentag:function(e,t){if(a)return void o.push(e);const r=t.class?t.class.split(" "):[];if(l.includes(e)||r.some((e=>u.includes(e))))return a=!0,void o.push(e);const n=Object.keys(t);let s="";n.forEach((function(e){s+=" "+e+"='"+t[e]+"'"})),i.push("<"+e+s+">")},ontext:function(e){a||i.push(e)},onclosetag:function(e){if(1===o.length&&o[0]===e)return a=!1,void(o=[]);a?o.pop():i.push("")}},{decodeEntities:!0})},62932:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=i(e);if(t.length>0)return t;let r=(0,s.getBlocks)(e);return r=(0,n.filter)(r,(function(e){return 0!==e.indexOf("0?t:[e]};var n=r(92819),s=r(1831);const i=function(e){let t=[];const r=/]+)?>(.*?)<\/p>/gi;let s;for(;null!==(s=r.exec(e));)t.push(s);return t=(0,n.map)(t,(function(e){return e[1]})),t.filter((e=>e.length>0))}},88567:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(new DOMParser).parseFromString(e,"text/html").body.innerHTML.replace(/ /g," ")}},15770:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t="";return"img"===e.name&&(t=(0,s.default)(e.attributes.alt||""),t=t.replace(/"/g,'"'),t=t.replace(/'/g,"'")),t};var n,s=(n=r(47793))&&n.__esModule?n:{default:n}},92017:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=e.getTree();return t?t.findAll((e=>"img"===e.name)):[]}},61440:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(0,s.default)(e,i)},t.imageRegex=void 0;var n,s=(n=r(13617))&&n.__esModule?n:{default:n};const i=t.imageRegex=new RegExp("]+)?>()*","ig")},29866:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createShortcodeTagsRegex",{enumerable:!0,get:function(){return i.createShortcodeTagsRegex}}),Object.defineProperty(t,"filterShortcodesFromHTML",{enumerable:!0,get:function(){return i.filterShortcodesFromHTML}}),Object.defineProperty(t,"matchStringWithRegex",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"normalize",{enumerable:!0,get:function(){return s.normalize}}),Object.defineProperty(t,"processExactMatchRequest",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"removeHtmlBlocks",{enumerable:!0,get:function(){return o.default}});var n=l(r(13617)),s=r(37361),i=r(24533),a=l(r(83927)),o=l(r(96908));function l(e){return e&&e.__esModule?e:{default:e}}},67404:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.split("_")[0]}},88782:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t="Dofollow";const r=new s.default.Parser({onopentag:function(e,r){"a"===e&&r.rel&&r.rel.toLowerCase().split(/\s/).includes("nofollow")&&(t="Nofollow")}});return r.write(e),r.end(),t};var n,s=(n=r(23719))&&n.__esModule?n:{default:n}},30341:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t;return t=e.match(/]+)>((?:.|[\n\r\u2028\u2029])*?)<\/a>/gi),null===t&&(t=[]),t}},25930:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=s.default.getFromAnchorTag(e),n=s.default.getProtocol(r);return n&&!s.default.protocolIsHttpScheme(n)||s.default.isRelativeFragmentURL(r)?"other":s.default.isInternalLink(r,t)?"internal":"external"};var n,s=(n=r(20917))&&n.__esModule?n:{default:n}},36478:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.findWordFormsInString=t.findTopicFormsInString=void 0;var n,s=r(92819),i=(n=r(7407))&&n.__esModule?n:{default:n};const a=function(e,t,r,n){const a=e.length,o=Array(a);let l=[],u=[];for(let s=0;s0?1:0,l.push(a.position),u=u.concat(a.matches)}const c=(0,s.sum)(o),d={countWordMatches:c,percentWordMatches:0,matches:u};return a>0&&(d.percentWordMatches=Math.round(c/a*100)),l=l.filter((e=>e>=0)),d.position=0===l.length?-1:Math.min(...l),d};t.findWordFormsInString=a,t.findTopicFormsInString=function(e,t,r,n,i){let o=a(e.keyphraseForms,t,n,i);if(o.keyphraseOrSynonym="keyphrase",100===o.percentWordMatches||!1===r||(0,s.isEmpty)(e.synonymsForms))return o;const l=[];for(let r=0;re.percentWordMatches)),c=u.indexOf(Math.max(...u));return o.percentWordMatches>=l[c].percentWordMatches||(o=l[c],o.keyphraseOrSynonym="synonym"),o}},23116:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(21389))&&n.__esModule?n:{default:n},i=r(92819);t.default=e=>(0,i.includes)(s.default,e[0])&&(0,i.includes)(s.default,e[e.length-1])},7407:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r="en_EN",n){let a=0,o=[],l=[];return(0,i.uniq)(t).forEach((function(t){const i=(0,s.default)(e,t,r,n);a+=i.count,o=o.concat(i.matches),l.push(i.position)})),l=l.filter((e=>e>=0)),{count:a,matches:o,position:0===l.length?-1:Math.min(...l)}};var n,s=(n=r(75118))&&n.__esModule?n:{default:n},i=r(92819)},95785:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){const c=(0,u.getLanguage)(r);let h=d(t,c);if("tr"===c){const e=(0,l.replaceTurkishIsMemoized)(t);h=new RegExp(e.map((e=>(0,s.default)(e))).join("|"),"ig")}const p=e.match(h)||[];e=e.replace(h,"");const f=(0,a.default)(t,r),g=d(f,c),m=e.match(g)||[];let _=p.concat(m);const y=(0,o.default)(t,r);if(y!==f){const t=d(y,c),r=e.match(t)||[];_=_.concat(r)}return(0,n.map)(_,(function(e){return(0,i.default)(e)}))};var n=r(92819),s=c(r(28875)),i=c(r(47793)),a=c(r(36064)),o=c(r(78087)),l=r(81011),u=r(58677);function c(e){return e&&e.__esModule?e:{default:e}}const d=function(e,t){return e=(0,s.default)(e,!1,"",t),new RegExp(e,"ig")}},75118:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r,c){e=(0,n.default)(e),e=(0,a.unifyAllSpaces)(e),e=(0,l.normalize)(e),t=(0,l.normalize)(t);let d=c?c(e,t):(0,o.default)(e,t,r);d=(0,u.map)(d,(function(e){return(0,s.default)((0,i.default)(e))}));const h=(0,u.map)(d,(function(t){return e.indexOf(t)}));return{count:d.length,matches:d,position:0===h.length?-1:Math.min(...h)}};var n=c(r(57719)),s=c(r(47793)),i=c(r(8737)),a=r(81831),o=c(r(95785)),l=r(37361),u=r(92819);function c(e){return e&&e.__esModule?e:{default:e}}},57329:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.tokenizeKeyphraseFormsForExactMatching=t.default=void 0;var n=i(r(95785)),s=i(r(7337));function i(e){return e&&e.__esModule?e:{default:e}}const a=(e,t)=>{const r=e[0];return t?t(r):(0,s.default)(r)};t.tokenizeKeyphraseFormsForExactMatching=a;t.default=(e,t,r,s,i=!1,o)=>i&&!s?((e,t,r,s)=>{const i={count:0,matches:[]},o=a(t,s),l=e.tokens;let u=0,c=0,d=[];for(;c0?(d.push(l[c]),u++):(u=0,d=[]),d.length===o.length&&(i.matches.push(...d),i.count++,u=0,d=[]),c++}return i})(e,t,r,o):((e,t,r,s)=>{const i={count:0,matches:[]};return t.forEach((t=>{let a=[];a=s?s(e,t):((e,t,r)=>{let s=[];return e.forEach((e=>{(0,n.default)(e.text,t,r).length>0&&(s=s.concat(e))})),s})(e.tokens.slice(),t,r),i.count+=a.length,i.matches=i.matches.concat(a)})),i})(e,t,r,s)},83927:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t={exactMatchRequested:!1,keyphrase:e};return(0,s.default)(e)&&(t.keyphrase=e.substring(1,e.length-1),t.exactMatchRequested=!0),t};var n,s=(n=r(23116))&&n.__esModule?n:{default:n}},42992:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e}},19605:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(t.includes(null))return e;for(let r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StemOriginalPair=c,t.TopicPhrase=u,t.buildStems=void 0,t.collectStems=function(e,t,r,n,s){return h(r,n,s)(e,t)},t.primeLanguageSpecificData=void 0;var n=l(r(1105)),s=r(37361),i=r(10152),a=r(92819),o=l(r(23116));function l(e){return e&&e.__esModule?e:{default:e}}function u(e=[],t=!1){this.stemOriginalPairs=e,this.exactMatch=t}function c(e,t){this.stem=e,this.original=t}u.prototype.getStems=function(){return this.exactMatch?[]:this.stemOriginalPairs.map((e=>e.stem))};const d=function(e,t,r,l){if((0,a.isUndefined)(e)||""===e)return new u;if((0,o.default)(e))return e=e.substring(1,e.length-1),new u([new c((0,a.escapeRegExp)(e),e)],!0);let d=l?(0,n.default)(e,i.WORD_BOUNDARY_WITH_HYPHEN):(0,n.default)(e,i.WORD_BOUNDARY_WITHOUT_HYPHEN);const h=d.filter((e=>!r.includes(e)));return h.length>0&&(d=h),new u(d.map((e=>new c(t((0,s.normalizeSingle)((0,a.escapeRegExp)(e))),e))))};t.buildStems=d;const h=t.primeLanguageSpecificData=(0,a.memoize)(((e,t,r)=>(0,a.memoize)(((n,s)=>function(e,t,r,n,s){return{keyphraseStems:d(e,r,n,s),synonymsStems:t.map((e=>d(e,r,n,s)))}}(n,s,e,t,r)),((e,t)=>e+","+t.join(",")))))},53371:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.createSingleRuleFromArray=t.createRulesFromArrays=void 0;const r=function(e,t="i"){return 2===e.length?{reg:new RegExp(e[0],t),repl:e[1]}:3===e.length?{reg:new RegExp(e[0],t),repl1:e[1],repl2:e[2]}:null};t.createSingleRuleFromArray=r;const n=function(e,t="i"){return e.map((e=>r(e,t)))};t.createRulesFromArrays=n,t.default=n},74252:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkExceptionListWithTwoStems=function(e,t){for(const r of e){const e=r.find((e=>t.endsWith(e)));if(e)return t.slice(0,t.length-e.length)+r[0]}},t.checkIfWordEndingIsOnExceptionList=function(e,t){for(let r=0;re.startsWith(t)));let i="";return"string"==typeof n&&(i=e.slice(n.length),i.length>2&&(e=i)),t.includes(e)};var n,s=(n=r(44949))&&n.__esModule?n:{default:n}},30259:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=[];for(const n in t)e.endsWith(t[n])&&r.push(t[n]);const n=r.sort((function(e,t){return t.length-e.length}))[0];return n||""}},44949:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(0,n.flatten)(Object.values(e)).sort(((e,t)=>t.length-e.length||e.localeCompare(t)))};var n=r(92819)},90831:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=e.getText(),c=(0,l.default)(e).map((e=>(0,s.default)(e))),d=[r,e.getTitle(),e.getSlug(),(0,a.default)(e.getSlug()),e.getDescription(),c.join(" ")].join(" ");return(t?(0,o.default)(d,u.WORD_BOUNDARY_WITH_HYPHEN):(0,o.default)(d,u.WORD_BOUNDARY_WITHOUT_HYPHEN)).map((e=>(0,i.normalizeSingle)((0,n.escapeRegExp)(e))))};var n=r(92819),s=c(r(15770)),i=r(37361),a=c(r(84159)),o=c(r(1105)),l=c(r(92017)),u=r(10152);function c(e){return e&&e.__esModule?e:{default:e}}},64396:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.applyAllReplacements=function(e,t){return t.forEach((function(t){e=e.replace(new RegExp(t[0]),t[1])})),e},t.doesWordMatchRegex=function(e,t){return RegExp(t).test(e)},t.searchAndReplaceWithRegex=function(e,t){for(const r of t)if(-1!==e.search(new RegExp(r[0])))return e.replace(new RegExp(r[0]),r[1])}},74694:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeSuffixFromFullForm=function(e,t,r){for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.stemPrefixedFunctionWords=function(e,t){let r=e,n="";const s=e.match(t);return s&&(n=s[0],r=e.slice(n.length)),{stem:r,prefix:n}}},23107:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r=[]){const n=(0,i.default)(e).map((e=>e.toLowerCase())),a=n.indexOf(t.toLowerCase());if(a<1)return!1;const o=n[a-1];return(0,s.includes)(r,o)};var n,s=r(92819),i=(n=r(1105))&&n.__esModule?n:{default:n}},80053:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(92819),i=(n=r(47793))&&n.__esModule?n:{default:n};t.default=function(e,t){const r=t.regexes.auxiliaryRegex;if(null===e.match(r))return[];let n;const a=e.match(t.regexes.stopwordRegex)||[];return n=function(e,t){const r=[];return(0,s.forEach)(t,(function(t){const n=e.split(t);(0,s.isEmpty)(n[0])||r.push(n[0]);const a=e.indexOf(t),o=e.length;e=(0,i.default)(e.substring(a,o))})),r.push(e),r}(e,a),void 0!==t.regexes.stopCharacterRegex&&1===n.length&&(n=function(e,t){const r=e.split(t);for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r,o){const l=(0,n.uniq)(r),u=(0,a.getIndicesByWordListSorted)(l,e),c=e.indexOf(t),d=(0,s.default)(o),h=u.filter((e=>e.indexe.index>p.index&&e.index0};var n=r(92819),s=o(r(18072)),i=o(r(40404)),a=r(61403);function o(e){return e&&e.__esModule?e:{default:e}}},43527:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return p(e,t)};var n=r(61403),s=c(r(47793)),i=r(37361),a=c(r(40404)),o=c(r(9803)),l=c(r(89032)),u=r(92819);function c(e){return e&&e.__esModule?e:{default:e}}const d=function(e,t,r){const n=(0,a.default)(e,r);return(0,u.forEach)(t,(function(e){(0,o.default)(n,e.index)&&(t=t.filter((function(t){return t.index!==e.index})))})),t},h=function(e,t){const{auxiliaryRegex:r,directPrecedenceExceptionRegex:i,followingAuxiliaryExceptionRegex:o}=t;let c=e.match(r)||[];if(void 0!==i||void 0!==o){let t=(0,n.getIndicesByWordList)(c,e);void 0!==i&&(t=d(e,t,i)),t=function(e,t,r){const n=(0,a.default)(e,r);return(0,u.forEach)(t,(function(e){(0,l.default)(n,e)&&(t=t.filter((function(t){return t.index!==e.index})))})),t}(e,t,o),c=[],(0,u.forEach)(t,(function(e){c.push(e.match)}))}return(0,u.map)(c,(function(e){return(0,s.default)(e)}))},p=function(e,t){const r=[],l=t.regexes.auxiliaryRegex;if(null===(e=(0,i.normalizeSingle)(e)).match(l))return r;const c=function(e,t){e=e.toLocaleLowerCase();const{regexes:r}=t;let s=(0,n.getIndicesByWordList)(t.auxiliaries,e);const i=function(e,t){let r;const n=[];for(t.lastIndex=0;null!==(r=t.exec(e));)n.push({index:r.index,match:r[0]});return n}(e,r.stopCharacterRegex);let l=(0,n.getIndicesByWordList)(t.stopwords,e);t.otherStopWordIndices&&t.otherStopWordIndices.length>0&&(l=l.concat(t.otherStopWordIndices)),void 0!==r.directPrecedenceExceptionRegex&&(s=d(e,s,r.directPrecedenceExceptionRegex)),void 0!==r.elisionAuxiliaryExceptionRegex&&(s=function(e,t,r){const n=(0,a.default)(e,r);return(0,u.forEach)(t,(function(e){(0,o.default)(n,e.index,!1)&&(t=t.filter((function(t){return t.index!==e.index})))})),t}(e,s,r.elisionAuxiliaryExceptionRegex));let c=s.concat(l,i);return c=(0,n.filterIndices)(c),(0,n.sortIndices)(c)}(e,t);for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=[];for(let n=t.exec(e);null!==n;n=t.exec(e))r.push({match:n[0],index:n.index});return r}},2329:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=[];return t.forEach((function(t){const n=e.match(t);null!==n&&r.push(n)})),r=(0,n.flattenDeep)(r),r};var n=r(92819)},14456:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r=[]){const n=(0,i.default)(e).map((e=>e.toLowerCase())),a=n.indexOf(t.toLowerCase());if(a<1)return!1;for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.collapseProminentWordsOnStem=d,t.default=void 0,t.filterProminentWords=u,t.getProminentWords=g,t.getProminentWordsFromPaperAttributes=m,t.retrieveAbbreviations=h,t.sortProminentWords=c;var n=r(92819),s=o(r(1105)),i=r(37361),a=o(r(4446));function o(e){return e&&e.__esModule?e:{default:e}}const l=/[1234567890‘’“â€"'.…?!:;,¿¡«»&*@#±^%$|~=+§`[\](){}⟨⟩<>/\\–\-\u2014\u00d7\s]/g;function u(e,t=2){return e.filter((function(e){return e.getOccurrences()>=t&&""!==e.getWord().replace(l,"")}))}function c(e){e.sort((function(e,t){const r=t.getOccurrences()-e.getOccurrences();return 0!==r?r:e.getStem().localeCompare(t.getStem())}))}function d(e){if(0===e.length)return[];e.sort((function(e,t){return e.getStem().localeCompare(t.getStem())}));const t=[];let r=new a.default(e[0].getWord(),e[0].getStem(),e[0].getOccurrences());for(let n=1;n1&&e.length<5&&e===e.toLocaleUpperCase()&&r.push(e.toLocaleLowerCase())})),(0,n.uniq)(r)}function p(e,t,r,s){if(0===e.length)return[];const i=(0,n.uniq)(e.filter((e=>!s.includes(e.trim())))),o=[];return i.forEach((function(n){t.includes(n)?o.push(new a.default(n.toLocaleUpperCase(),n,e.filter((e=>e===n)).length)):o.push(new a.default(n,r(n),e.filter((e=>e===n)).length))})),d(o)}const f=(0,n.memoize)(((e,t,r,n)=>p(e,t,r,n)),((e,t)=>e.join(",")+","+t.join(",")));function g(e,t,r,n,a){if(""===e)return[];const o=a?a((0,i.normalizeSingle)(e).toLocaleLowerCase()):(0,s.default)((0,i.normalizeSingle)(e).toLocaleLowerCase());return f(o,t,r,n)}function m(e,t,r,n,i){return p(i?i(e.join(" ").toLocaleLowerCase()):(0,s.default)(e.join(" ").toLocaleLowerCase()),t,r,n)}t.default={getProminentWords:g,getProminentWordsFromPaperAttributes:m,filterProminentWords:u,sortProminentWords:c,collapseProminentWordsOnStem:d,retrieveAbbreviations:h}},18072:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t=!1,r="",o=!1){const l="("+(e=(0,n.map)(e,(function(e){return o&&(e=(0,i.default)(e)),e=(0,a.default)(e),t?e:(0,s.default)(e,!0,r)}))).join(")|(")+")";return new RegExp(l,"ig")};var n=r(92819),s=o(r(28875)),i=o(r(74169)),a=o(r(86697));function o(e){return e&&e.__esModule?e:{default:e}}},55508:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t="("+(e=e.map((function(e){return i(e)}))).join(")|(")+")";return new RegExp(t,"ig")};var n,s=(n=r(28875))&&n.__esModule?n:{default:n};const i=function(e){return(e=e.map((function(e){return(0,s.default)(e)}))).join("(.*?)")}},13617:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=e.match(t);return null===r&&(r=[]),r}},21389:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=["“","â€","ã€","〞","〟","‟","„",'"',"「","ã€","『","ã€"]},24533:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filterShortcodesFromHTML=t.default=t.createShortcodeTagsRegex=void 0;const r=e=>{const t=`\\[\\/?(${e.join("|")})[^\\]]*\\]`;return new RegExp(t,"g")};t.createShortcodeTagsRegex=r,t.filterShortcodesFromHTML=(e,t)=>{if(!t||0===t.length)return e;const n=r(t);return e.replace(n,"")};const n=(e,t,r,n)=>n&&r.includes(e[t].text)&&(((e,t)=>e[t-1]&&"["===e[t-1].text)(e,t)||((e,t)=>e[t-1]&&"/"===e[t-1].text&&e[t-2]&&"["===e[t-2].text)(e,t)),s=(e,t,r)=>{e.sentences&&e.sentences.forEach((e=>{((e,t,r)=>{const s=e.tokens;let i=!1;for(let e=s.length-1;e>=0;e--)if("]"===s[e].text&&(i=!0),n(s,e,t,i)){for(;"]"!==s[e].text;)s.splice(e,1);for(s.splice(e,1),i=!1;s[e-1]&&"[/".includes(s[e-1].text);)s.splice(e-1,1),e--}e.tokens=s,e.text=e.text.replace(r,"")})(e,t,r)})),e.childNodes&&e.childNodes.forEach((e=>{s(e,t,r)}))};t.default=(e,t)=>{if(!t||0===t.length)return;const n=r(t);s(e,t,n)}},10840:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mergeListItems=function(e){return(e=(e=e.replace(/<\/?(o|ul)(?:[^>]+)?>/g,"")).replace(/\s?<\/?li(?:[^>]+)?>\s?/g," ")).replace(/\s+/g," ")}},73481:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=e.split(",");return t=t.map((e=>(0,s.default)((0,n.default)(e)))).filter((e=>e)),t};var n=i(r(47793)),s=i(r(50544));function i(e){return e&&e.__esModule?e:{default:e}}},37361:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.SINGLE_QUOTES_REGEX=t.SINGLE_QUOTES_ARRAY=void 0,t.normalize=a,t.normalizeDouble=i,t.normalizeSingle=s;const r=t.SINGLE_QUOTES_ARRAY=["'","‘","’","‛","`","‹","›"],n=t.SINGLE_QUOTES_REGEX=new RegExp("["+r.join("")+"]","g");function s(e){return e.replace(n,"'")}function i(e){return e.replace(/[“â€ã€ã€žã€Ÿâ€Ÿâ€žã€Žã€Â«Â»]/g,'"')}function a(e){return i(s(e))}t.default={normalizeSingle:s,normalizeDouble:i,normalize:a}},32879:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.replace(r,"")};const r=new RegExp("[^\\s@]+@[^\\s@]+\\.[^\\s@]+","igm")},8737:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){e=(e=(0,n.unifyNonBreakingSpace)(e)).replace("&","");const t=new RegExp("(\\\\)","g");return(e=(e=e.replace(t,"")).replace(i,"")).replace(a,"")},t.punctuationRegexString=t.punctuationRegexStart=t.punctuationRegexEnd=t.punctuationList=void 0;var n=r(81831);const s=t.punctuationRegexString="\\–\\-\\(\\)_\\[\\]’‘“â€ã€ã€žã€Ÿâ€Ÿâ€ž\"'.?!:;,¿¡«»‹›—×+&۔؟،؛。。ï¼â€¼ï¼Ÿâ‡â‰âˆâ€¥â€¦ãƒ»ãƒ¼ã€ã€ƒã€„〆〇〈〉《》「ã€ã€Žã€ã€ã€‘〒〓〔〕〖〗〘〙〚〛〜ã€ã€žã€Ÿã€ ã€¶ã€¼ã€½ï½›ï½ï½œï½žï½Ÿï½ ï½¢ï½£ï½¤ï¼»ï¼½ï½¥ï¿¥ï¼„%@&'()*ï¼ï¼šï¼›ï¼œï¼žï¼¼\\<>",i=(t.punctuationList=s.split(""),t.punctuationRegexStart=new RegExp("^["+s+"]+")),a=t.punctuationRegexEnd=new RegExp("["+s+"]+$")},50544:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(e=e.replace(n,"")).replace(s,"")};const r="[\\–\\-\\(\\)_\\[\\]’'.?!:;,¿¡«»‹›—×+&<>]+",n=new RegExp("^"+r),s=new RegExp(r+"$")},85476:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.replace(r,"")};const r=new RegExp("(ftp|http(s)?:\\/\\/.)(www\\\\.)?[-a-zA-Z0-9@:%._\\/+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:;%_\\/+.~#?&()=]*)|www\\.[-a-zA-Z0-9@:%._\\/+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:;%_\\/+.~#?&()=]*)","igm")},65510:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.replace(/\s*<.*?br.*?>/gm,"

            ")}},86697:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e=(0,s.unifyAllSpaces)(e),(0,n.stripFullTags)(e)};var n=r(62240),s=r(81831)},62240:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.stripIncompleteTags=t.stripFullTags=t.stripBlockTagsAtStartEnd=t.default=void 0;var n,s=(n=r(47793))&&n.__esModule?n:{default:n},i=r(1831);const a=new RegExp("^<("+i.blockElements.join("|")+")[^>]*?>","i"),o=new RegExp("]*?>$","i"),l=function(e){return(e=e.replace(/^(<\/([^>]+)>)+/i,"")).replace(/(<([^/>]+)>)+$/i,"")};t.stripIncompleteTags=l;const u=function(e){return(e=e.replace(a,"")).replace(o,"")};t.stripBlockTagsAtStartEnd=u;const c=function(e){return e=e.replace(/(<([^>]+)>)/gi," "),(0,s.default)(e)};t.stripFullTags=c,t.default={stripFullTags:c,stripIncompleteTags:l,stripBlockTagsAtStartEnd:u}},57719:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e=e.replace(/<(?!li|\/li|p|\/p|h1|\/h1|h2|\/h2|h3|\/h3|h4|\/h4|h5|\/h5|h6|\/h6|dd).*?>/g,""),(0,s.default)(e)};var n,s=(n=r(47793))&&n.__esModule?n:{default:n}},86812:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e=e.replace(/\b[0-9]+\b/g,""),"."===(e=(0,s.default)(e))&&(e=""),e};var n,s=(n=r(47793))&&n.__esModule?n:{default:n}},47793:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(e=(e=(e=(e=e.replace(/\s{2,}/g," ")).replace(/\s\.$/,".")).replace(/^\s+|\s+$/g,"")).replace(/\s。/g,"。")).replace(/。\s/g,"。")}},52731:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.stripWordBoundariesStart=t.stripWordBoundariesEverywhere=t.stripWordBoundariesEnd=t.default=void 0;const r="[ \\u00a0\\u06d4\\u061f\\u060C\\u061B \\n\\r\\t.,'()\"+\\-;!?:/»«‹›<>]",n=new RegExp("^("+r+"+)","ig"),s=new RegExp("("+r+"+$)","ig"),i=function(e){return e.replace(n,"")};t.stripWordBoundariesStart=i;const a=function(e){return e.replace(s,"")};t.stripWordBoundariesEnd=a;const o=function(e){return(e=e.replace(n,"")).replace(s,"")};t.stripWordBoundariesEverywhere=o,t.default={stripWordBoundariesStart:i,stripWordBoundariesEnd:a,stripWordBoundariesEverywhere:o}},81831:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.unifyWhiteSpace=t.unifyNonBreakingSpace=t.unifyEmDash=t.unifyAllSpaces=t.default=void 0;const r=function(e){return e.replace(/ /g," ")};t.unifyNonBreakingSpace=r;const n=function(e){return e.replace(/\u2014/g," ")};t.unifyEmDash=n;const s=function(e){return e.replace(/\s/g," ")};t.unifyWhiteSpace=s;const i=function(e){return e=r(e),e=n(e),s(e)};t.unifyAllSpaces=i,t.default={unifyNonBreakingSpace:r,unifyEmDash:n,unifyWhiteSpace:s,unifyAllSpaces:i}},29003:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=u(r(14429)),i=r(37361),a=u(r(31946)),o=u(r(18072)),l=u(r(35468));function u(e){return e&&e.__esModule?e:{default:e}}const c=new RegExp("^[.]$"),d=/^<[^><]*$/,h=/^<([^>\s/]+)[^>]*>$/im,p=/^<\/([^>\s]+)[^>]*>$/im,f=/^\s*[[({]\s*$/,g=/^\s*[\])}]\s*$/,m=a.default.map((e=>e.replace(".","\\."))),_=(0,o.default)(m),y="(^|$|["+(0,l.default)().map((e=>"\\"+e)).join("")+"])",E=new RegExp(y+"[A-Za-z]$"),T=/<\/?([^\s]+?)(\s|>)/,A=["p","div","h1","h2","h3","h4","h5","h6","span","li","main"];t.default=class{constructor(){this.sentenceDelimiters='â€ã€žã€Ÿâ€žã€â€ºÂ»â€™â€›`"?!…۔؟'}getSentenceDelimiters(){return this.sentenceDelimiters}isNumber(e){return!(0,n.isNaN)(parseInt(e,10))}isBreakTag(e){return/<\/?br/.test(e)}isQuotation(e){return"'"===(e=(0,i.normalize)(e))||'"'===e}endsWithOrdinalDot(){return!1}isPunctuation(e){return"¿"===e||"¡"===e}removeDuplicateWhitespace(e){return e.replace(/\s+/," ")}isCapitalLetter(e){return e!==e.toLocaleLowerCase()}isSmallerThanSign(e){return"<"===e}getNextTwoCharacters(e){let t="";return(0,n.isUndefined)(e[0])||(t+=e[0].src),(0,n.isUndefined)(e[1])||(t+=e[1].src),t=this.removeDuplicateWhitespace(t),t}isLetterFromSpecificLanguage(e){return[/^[\u0590-\u05fe]+$/i,/^[\u0600-\u06FF]+$/i,/^[\uFB8A\u067E\u0686\u06AF]+$/i].some((t=>t.test(e)))}isValidSentenceBeginning(e){return this.isCapitalLetter(e)||this.isLetterFromSpecificLanguage(e)||this.isNumber(e)||this.isQuotation(e)||this.isPunctuation(e)||this.isSmallerThanSign(e)}isSentenceStart(e){return!(0,n.isUndefined)(e)&&("html-start"===e.type||"html-end"===e.type||"block-start"===e.type)}isSentenceEnding(e){return!(0,n.isUndefined)(e)&&("full-stop"===e.type||"sentence-delimiter"===e.type)}isPartOfPersonInitial(e,t,r,s){return!(0,n.isUndefined)(e)&&!(0,n.isUndefined)(r)&&!(0,n.isUndefined)(s)&&!(0,n.isUndefined)(t)&&"full-stop"===e.type&&"sentence"===t.type&&E.test(t.src)&&"sentence"===r.type&&1===r.src.trim().length&&"full-stop"===s.type}tokenizeSmallerThanContent(e,t,r){const s=e.src.substring(1),i=this.createTokenizer();this.tokenize(i.tokenizer,s);const a=this.getSentencesFromTokens(i.tokens,!1);if(a[0]=(0,n.isUndefined)(a[0])?"<":"<"+a[0],this.isValidSentenceBeginning(a[0])&&(t.push(r),r=""),r+=a[0],a.length>1){t.push(r),r="",a.shift();const e=a.pop();a.forEach((e=>{t.push(e)}));const n=new RegExp("[."+this.getSentenceDelimiters()+"]$");e.match(n)?t.push(e):r=e}return{tokenSentences:t,currentSentence:r}}createTokenizer(){const e=new RegExp("^["+this.getSentenceDelimiters()+"]$"),t=new RegExp("^[^."+this.getSentenceDelimiters()+"<\\(\\)\\[\\]]+$"),r=[],n=(0,s.default)((function(e){r.push(e)}));return n.addRule(c,"full-stop"),n.addRule(d,"smaller-than-sign-content"),n.addRule(h,"html-start"),n.addRule(p,"html-end"),n.addRule(f,"block-start"),n.addRule(g,"block-end"),n.addRule(e,"sentence-delimiter"),n.addRule(t,"sentence"),{tokenizer:n,tokens:r}}tokenize(e,t){e.onText(t);try{e.end()}catch(e){console.error("Tokenizer end error:",e,e.tokenizer2)}}endsWithAbbreviation(e){const t=e.match(_);if(!t)return!1;const r=t.pop();return e.endsWith(r)}isValidTagPair(e,t){const r=e.src,n=t.src,s=r.match(T)[1];return s===n.match(T)[1]&&A.includes(s)}getSentencesFromTokens(e,t=!0){let r,s,i=[],a="";do{s=!1;const t=e[0],r=e[e.length-1];t&&r&&"html-start"===t.type&&"html-end"===r.type&&this.isValidTagPair(t,r)&&(e=e.slice(1,e.length-1),s=!0)}while(s&&e.length>1);return e.forEach(((t,s)=>{let o,l,u;const c=e[s+1],d=e[s-1],h=e[s+2];switch(l=this.getNextTwoCharacters([c,h]),o=l.length>=2,r=o?l[1]:"",t.type){case"html-start":case"html-end":this.isBreakTag(t.src)?(i.push(a),a=""):a+=t.src;break;case"smaller-than-sign-content":u=this.tokenizeSmallerThanContent(t,i,a),i=u.tokenSentences,a=u.currentSentence;break;case"sentence":case"block-start":a+=t.src;break;case"sentence-delimiter":if(a+=t.src,!(0,n.isUndefined)(c)&&"block-end"!==c.type&&"sentence-delimiter"!==c.type&&this.isCharacterASpace(c.src[0])){if(this.isQuotation(t.src)&&d&&"."!==d.src)break;this.isQuotation(t.src)||"…"===t.src?a=this.getValidSentence(o,r,l,c,i,a):(i.push(a),a="")}break;case"full-stop":if(a+=t.src,l=this.getNextTwoCharacters([c,h]),o=l.length>=2,r=o?l[1]:"",this.endsWithAbbreviation(a))break;if(o&&this.isNumber(l[0]))break;if(this.isPartOfPersonInitial(t,d,c,h))break;if(this.endsWithOrdinalDot(a))break;a=this.getValidSentence(o,r,l,c,i,a);break;case"block-end":if(a+=t.src,l=this.getNextTwoCharacters([c,h]),o=l.length>=2,r=o?l[0]:"",o&&this.isNumber(l[0])||this.isSentenceEnding(d)&&!this.isValidSentenceBeginning(r)&&!this.isSentenceStart(c))break;this.isSentenceEnding(d)&&(this.isSentenceStart(c)||this.isValidSentenceBeginning(r))&&(i.push(a),a="")}})),""!==a&&i.push(a),t&&(i=(0,n.map)(i,(function(e){return e.trim()}))),i}getValidSentence(e,t,r,n,s,i){return(e&&this.isValidSentenceBeginning(t)&&this.isCharacterASpace(r[0])||this.isSentenceStart(n))&&(s.push(i),i=""),i}isCharacterASpace(e){return/\s/.test(e)}}},55473:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=(0,s.default)(e,t);let n=0;for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t=u.default){e=(e=(0,l.unifyNonBreakingSpace)(e)).replace(a.imageRegex,"");let r=(0,i.getBlocks)(e);r=(0,s.flatMap)(r,(function(e){return e.split(c)})),r=r.filter((e=>!d.test(e)));let n=r.map((e=>t(e))).flat();return n=n.map((e=>(0,o.stripBlockTagsAtStartEnd)(e).trim())),(0,s.filter)(n,(0,s.negate)(s.isEmpty))};var n,s=r(92819),i=r(1831),a=r(61440),o=r(62240),l=r(81831),u=(n=r(47647))&&n.__esModule?n:{default:n};const c=new RegExp("\n\r|\n|\r"),d=new RegExp("^(

            |

            )$")},54241:(e,t)=>{"use strict";function r(e){return e.sourceCodeLocation&&(e.sourceCodeLocation.startTag&&e.sourceCodeLocation.startTag.endOffset||e.sourceCodeLocation.startOffset)||0}function n(e,t){return e.getTree().findAll((e=>e.childNodes&&e.childNodes.includes(t)))[0]||t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.getTree().findAll((e=>!!e.sentences)).flatMap((t=>t.sentences.map((s=>{let i=t;return t.isImplicit&&(i=n(e,t)),{...s,parentStartOffset:r(i),parentClientId:i.clientId||"",parentAttributeId:t.attributeId||"",isParentFirstSectionOfBlock:t.isFirstSection||!1}}))))},t.getParentNode=n},47647:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(29003))&&n.__esModule?n:{default:n},i=r(92819);t.default=(0,i.memoize)((function(e,t=!0){const r=new s.default,{tokenizer:n,tokens:i}=r.createTokenizer();return r.tokenize(n,e),0===i.length?[]:r.getSentencesFromTokens(i,t)}),((...e)=>JSON.stringify(e)))},91916:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=[];return(0,i.forEach)(e,(function(e){const n=(0,a.stripFullTags)(e),i=t.getHelper("customCountLength"),o=i?i(n):(0,s.default)(n);o<=0||r.push({sentence:e,sentenceLength:o})})),r};var n,s=(n=r(33870))&&n.__esModule?n:{default:n},i=r(92819),a=r(62240)},58766:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819);function s(e){this._location=e.location,this._fragment=e.word,this._syllables=e.syllables,this._regex=null,this._options=(0,n.pick)(e,["notFollowedBy","alsoFollowedBy"])}s.prototype.createRegex=function(){let e="";const t=this._options;let r=this._fragment;switch((0,n.isUndefined)(t.notFollowedBy)||(r+="(?!["+t.notFollowedBy.join("")+"])"),(0,n.isUndefined)(t.alsoFollowedBy)||(r+="["+t.alsoFollowedBy.join("")+"]?"),this._location){case"atBeginning":e="^"+r;break;case"atEnd":e=r+"$";break;case"atBeginningOrEnd":e="(^"+r+")|("+r+"$)";break;default:e=r}this._regex=new RegExp(e)},s.prototype.getRegex=function(){return null===this._regex&&this.createRegex(),this._regex},s.prototype.occursIn=function(e){return this.getRegex().test(e)},s.prototype.removeFrom=function(e){return e.replace(this._fragment," ")},s.prototype.getSyllables=function(){return this._syllables},t.default=s},39617:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=o(r(1105)),s=r(92819),i=o(r(15495)),a=o(r(58766));function o(e){return e&&e.__esModule?e:{default:e}}const l=(0,s.memoize)((function(e){let t=[];const r=e.deviations;return t=(0,s.flatMap)(r.words.fragments,(function(e,t){return(0,s.map)(e,(function(e){return e.location=t,new a.default(e)}))})),t})),u=function(e,t){let r=0;if(!(0,s.isUndefined)(t.deviations)&&!(0,s.isUndefined)(t.deviations.words)){if(!(0,s.isUndefined)(t.deviations.words.full)){const r=function(e,t){const r=t.deviations.words.full,n=(0,s.find)(r,(function(t){return t.word===e}));return(0,s.isUndefined)(n)?0:n.syllables}(e,t);if(0!==r)return r}if(!(0,s.isUndefined)(t.deviations.words.fragments)){const n=function(e,t){const r=l(t);let n=e,i=0;return(0,s.forEach)(r,(function(e){e.occursIn(n)&&(n=e.removeFrom(n),i+=e.getSyllables())})),{word:n,syllableCount:i}}(e,t);e=n.word,r+=n.syllableCount}}return r+=function(e,t){let r=0;return r+=function(e,t){let r=0;const n=new RegExp("[^"+t.vowels+"]","ig"),i=e.split(n);return r+=(0,s.filter)(i,(function(e){return""!==e})).length,r}(e,t),(0,s.isUndefined)(t.deviations)||(0,s.isUndefined)(t.deviations.vowels)||(r+=function(e,t){return new i.default(t).countSyllables(e)}(e,t)),r}(e,t),r};t.default=function(e,t){e=e.toLocaleLowerCase();const r=(0,n.default)(e),i=(0,s.map)(r,(function(e){return u(e,t)}));return(0,s.sum)(i)}},15495:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(87743))&&n.__esModule?n:{default:n},i=r(92819);const a=function(e){this.countSteps=[],(0,i.isUndefined)(e)||this.createSyllableCountSteps(e.deviations.vowels)};a.prototype.createSyllableCountSteps=function(e){(0,i.forEach)(e,function(e){this.countSteps.push(new s.default(e))}.bind(this))},a.prototype.getAvailableSyllableCountSteps=function(){return this.countSteps},a.prototype.countSyllables=function(e){let t=0;return(0,i.forEach)(this.countSteps,(function(r){t+=r.countSyllables(e)})),t},t.default=a},87743:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(92819),i=(n=r(18072))&&n.__esModule?n:{default:n};const a=function(e){this._hasRegex=!1,this._regex="",this._multiplier="",this.createRegex(e)};a.prototype.hasRegex=function(){return this._hasRegex},a.prototype.createRegex=function(e){(0,s.isUndefined)(e)||(0,s.isUndefined)(e.fragments)||(this._hasRegex=!0,this._regex=(0,i.default)(e.fragments,!0),this._multiplier=e.countModifier)},a.prototype.getRegex=function(){return this._regex},a.prototype.countSyllables=function(e){return this._hasRegex?(e.match(this._regex)||[]).length*this._multiplier:0},t.default=a},85336:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=e;return e.forEach((r=>{(r=r.split("-")).length>0&&r.filter((t=>!e.includes(t))).length>0&&(t=t.concat(r))})),t}},74169:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=(0,s.default)();for(let r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.arraysDifference=l,t.arraysOverlap=u,t.combinations=c,t.getIndicesOfCharacter=o,t.getIndicesOfWords=a,t.replaceTurkishIs=h,t.replaceTurkishIsMemoized=void 0;var n,s=r(92819),i=(n=r(1105))&&n.__esModule?n:{default:n};function a(e){const t=[],r=(0,i.default)(e);let n=0;return r.forEach((function(r){const s=e.indexOf(r,n);t.push(s),n=s+r.length})),t}function o(e,t){const r=[];if(e.indexOf(t)>-1)for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=(0,s.default)(t);for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=(0,s.default)(t);for(let t=r.length-1;t>=0;t--)e=e.replace(r[t].letter,r[t].alternative);return e};var n,s=(n=r(23324))&&n.__esModule?n:{default:n}},84159:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.replace(/[-_]/gi," ")}},20917:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(8575))&&n.__esModule?n:{default:n};const i=/href=(["'])([^"']+)\1/i;function a(e){return e.split("#")[0]}function o(e){return e.split("?")[0]}function l(e){return e.replace(/\/$/,"")}function u(e){return l(e)+"/"}t.default={removeHash:a,removeQueryArgs:o,removeTrailingSlash:l,addTrailingSlash:u,getFromAnchorTag:function(e){const t=i.exec(e);return null===t?"":t[2]},areEqual:function(e,t){return e=o(a(e)),t=o(a(t)),u(e)===u(t)},getHostname:function(e){return(e=s.default.parse(e)).hostname},getProtocol:function(e){return s.default.parse(e).protocol},isInternalLink:function(e,t){const r=s.default.parse(e,!1,!0).hostname;return-1===e.indexOf("//")&&0===e.indexOf("/")||0!==e.indexOf("#")&&(!r||r===t||r===s.default.parse(t).hostname)},protocolIsHttpScheme:function(e){return!!e&&("http:"===e||"https:"===e)},isRelativeFragmentURL:function(e){return 0===e.indexOf("#")}}},28875:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t=!1,r="",n=""){let s,i;return s="id"===n?'[ \\u00a0\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+;!¡?¿:/»«‹›'+r+"<>":'[ \\u00a0\\u2014\\u06d4\\u061f\\u060C\\u061B\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+\\-;!¡?¿:/»«‹›'+r+"<>",i=t?"($|((?="+s+"]))|((['‘’‛`])("+s+"])))":"($|("+s+"])|((['‘’‛`])("+s+"])))","(^|"+s+"'‘’‛`])"+e+i}},11475:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return 0!==(0,s.filter)((0,i.default)(t),(function(t){return e.includes(t.toLocaleLowerCase())})).length};var n,s=r(92819),i=(n=r(1105))&&n.__esModule?n:{default:n}},40231:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=t.length;return""!==e&&r>0&&(r+=e.length+3),r}},33870:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(0,s.default)(e).length};var n,s=(n=r(1105))&&n.__esModule?n:{default:n}},16431:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(8737),s=r(33888);t.default=e=>{const t=[];return e.forEach((e=>{const r=[],i=[];for(;n.punctuationRegexStart.test(e)&&!s.hashedHtmlEntitiesRegexStart.test(e);)r.push(e[0]),e=e.slice(1);for(;n.punctuationRegexEnd.test(e)&&!s.hashedHtmlEntitiesRegexEnd.test(e);)i.unshift(e[e.length-1]),e=e.slice(0,-1);let a=[...r,e,...i];a=a.filter((e=>""!==e)),t.push(...a)})),t}},49325:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t=[]){return(0,n.filter)(e,(function(e){return!(0,n.includes)(t,e.trim().toLocaleLowerCase())}))};var n=r(92819)},89032:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if((0,n.isEmpty)(e))return!1;const r=t.index+t.match.length,s=[];return(0,n.forEach)(e,(function(e){s.push(e.index)})),(0,n.includes)(s,r)};var n=r(92819)},60914:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=(0,n.default)(e).map((e=>e.tokens));let r=(0,s.flatMap)(t).map((e=>e.text));return r=r.map((e=>(0,i.default)(e))),r.filter((e=>""!==e.trim()))};var n=a(r(54241)),s=r(92819),i=a(r(8737));function a(e){return e&&e.__esModule?e:{default:e}}},1105:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t="\\s",r=!0){if(""===(e=(0,s.default)(e)))return[];const n=new RegExp(t,"g");let o=e.split(n);return o=r?o.map(a.default):(0,i.flatMap)(o,(e=>e.replace(l," $1 ").split(" "))),(0,i.filter)(o,(function(e){return""!==e.trim()}))};var n,s=(n=r(86697))&&n.__esModule?n:{default:n},i=r(92819),a=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=o(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=s?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}(r(8737));function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(o=function(e){return e?r:t})(e)}const l=new RegExp(`([${a.punctuationRegexString}])`,"g")},9803:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r=!0){const s=r?1:0;if((0,n.isEmpty)(e))return!1;const i=[];return(0,n.forEach)(e,(function(e){const t=e.index+e.match.length+s;i.push(t)})),(0,n.includes)(i,t)};var n=r(92819)},61403:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filterIndices=t.default=void 0,t.getIndicesByWord=o,t.sortIndices=t.getIndicesByWordListSorted=t.getIndicesByWordList=void 0;var n,s=r(92819),i=(n=r(47793))&&n.__esModule?n:{default:n},a=r(30043);function o(e,t){let r=0;const n=e.length;let s;const i=[];for(;(s=t.indexOf(e,r))>-1;){const o=(0,a.characterInBoundary)(t[s-1])||0===s,l=(0,a.characterInBoundary)(t[s+n])||t.length===s+n;o&&l&&i.push({index:s,match:e}),r=s+n}return i}const l=function(e,t){let r=[];return(0,s.forEach)(e,(function(e){e=(0,i.default)(e),(0,a.isWordInSentence)(e,t)&&(r=r.concat(o(e,t)))})),r};t.getIndicesByWordList=l;const u=function(e){return e.sort((function(e,t){return e.index-t.index}))};t.sortIndices=u;const c=function(e){e=u(e);const t=[];for(let r=0;rt.index?1:0})),r};t.getIndicesByWordListSorted=d,t.default={getIndicesByWord:o,getIndicesByWordList:l,filterIndices:c,sortIndices:u,getIndicesByWordListSorted:d}},48024:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.deConstructAnchor=t.collectMarkingsInSentence=void 0,t.markWordsInASentence=g,t.markWordsInSentences=function(e,t,r,s){let i=[],a=[];return t.forEach((function(t){i=(0,n.default)(t,e,r,s).matches,i.length>0&&(a=a.concat(g(t,i,s)))})),a},t.reConstructAnchor=void 0;var n=c(r(7407)),s=c(r(18072)),i=c(r(5262)),a=c(r(41054)),o=r(92819),l=c(r(30341)),u=r(37361);function c(e){return e&&e.__esModule?e:{default:e}}const d=/(]+>)([^]*?)(<\/a>)/,h=function(e){const[,t,r]=e.match(d);return{openTag:t,content:r}};t.deConstructAnchor=h;const p=function(e,t){return`${e}${t}
            `};t.reConstructAnchor=p;const f=function(e,t,r){const n=[];t.forEach((e=>{const t=e.match(u.SINGLE_QUOTES_REGEX);t?u.SINGLE_QUOTES_ARRAY.forEach((r=>{t.forEach((t=>{n.push((0,o.escapeRegExp)(e.replace(new RegExp(t,"g"),r)))}))})):n.push((0,o.escapeRegExp)(e))}));const a=r?(0,s.default)(n,!0):(0,s.default)(n),{anchors:c,markedAnchors:d}=function(e,t){const r=(0,l.default)(e),n=r.map((e=>{const{openTag:r,content:n}=h(e),s=n.replace(t,(e=>(0,i.default)(e)));return p(r,s)}));return{anchors:r,markedAnchors:n}}(e,a);let f=e.replace(a,(function(e){return(0,i.default)(e)}));if(c.length>0){const e=(0,l.default)(f);for(let t=0;t ","ig")," ")};function g(e,t,r){return[new a.default({original:e,marked:f(e,t,r)})]}t.collectMarkingsInSentence=f},30043:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isWordInSentence=t.default=t.characterInBoundary=void 0;var n=a(r(35468)),s=r(92819),i=a(r(28875));function a(e){return e&&e.__esModule?e:{default:e}}const o=(0,n.default)(),l=function(e){return(0,s.includes)(o,e)};t.characterInBoundary=l;const u=function(e,t){e=e.toLocaleLowerCase(),t=t.toLocaleLowerCase();const r=(0,i.default)((0,s.escapeRegExp)(e));let n=t.search(new RegExp(r,"ig"));if(-1===n)return!1;n>0&&(n+=1);const a=n+e.length,o=l(t[n-1])||0===n,u=l(t[a])||a===t.length;return o&&u};t.isWordInSentence=u,t.default={characterInBoundary:l,isWordInSentence:u}},7337:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(16431))&&n.__esModule?n:{default:n};const i=/([\s\t\u00A0\u2013\u2014\u002d[\]]|#nbsp;)/;t.default=e=>{if(!e)return[];const t=e.split(i).filter((e=>""!==e));return(0,s.default)(t)}},58677:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AbstractResearcher",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"areWordsInSentence",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(t,"baseStemmer",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"buildFormRule",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(t,"collectMarkingsInSentence",{enumerable:!0,get:function(){return G.collectMarkingsInSentence}}),Object.defineProperty(t,"countMetaDescriptionLength",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(t,"createRegexFromArray",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"createRulesFromArrays",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"createSingleRuleFromArray",{enumerable:!0,get:function(){return f.createSingleRuleFromArray}}),Object.defineProperty(t,"directPrecedenceException",{enumerable:!0,get:function(){return m.default}}),t.exceptionListHelpers=void 0,Object.defineProperty(t,"findMatchingEndingInArray",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(t,"findWordFormsInString",{enumerable:!0,get:function(){return B.findWordFormsInString}}),Object.defineProperty(t,"flattenSortLength",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"getClauses",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(t,"getClausesSplitOnStopWords",{enumerable:!0,get:function(){return O.default}}),Object.defineProperty(t,"getFieldsToMark",{enumerable:!0,get:function(){return M.getFieldsToMark}}),Object.defineProperty(t,"getLanguage",{enumerable:!0,get:function(){return k.default}}),Object.defineProperty(t,"getSentences",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(t,"getWords",{enumerable:!0,get:function(){return u.default}}),t.helpers=void 0,Object.defineProperty(t,"imageInText",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"indices",{enumerable:!0,get:function(){return h.default}}),t.languageHelpers=t.languageConfigs=void 0,Object.defineProperty(t,"markWordsInSentences",{enumerable:!0,get:function(){return G.markWordsInSentences}}),Object.defineProperty(t,"matchRegularParticiples",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(t,"mergeListItems",{enumerable:!0,get:function(){return U.mergeListItems}}),Object.defineProperty(t,"nonDirectPrecedenceException",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(t,"normalizeHTML",{enumerable:!0,get:function(){return P.default}}),Object.defineProperty(t,"normalizeSingle",{enumerable:!0,get:function(){return x.normalizeSingle}}),Object.defineProperty(t,"parseSynonyms",{enumerable:!0,get:function(){return F.default}}),Object.defineProperty(t,"precedenceException",{enumerable:!0,get:function(){return _.default}}),t.regexHelpers=void 0,Object.defineProperty(t,"removePunctuation",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(t,"replaceDiacritics",{enumerable:!0,get:function(){return n.default}}),t.researches=void 0,Object.defineProperty(t,"sanitizeString",{enumerable:!0,get:function(){return N.default}}),t.stemHelpers=void 0,Object.defineProperty(t,"stripBlockTagsAtStartEnd",{enumerable:!0,get:function(){return C.stripBlockTagsAtStartEnd}}),Object.defineProperty(t,"stripHTMLTags",{enumerable:!0,get:function(){return C.stripFullTags}}),Object.defineProperty(t,"stripSpaces",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"transliterate",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"unifyAllSpaces",{enumerable:!0,get:function(){return D.unifyAllSpaces}}),t.values=void 0;var n=Z(r(74169)),s=Z(r(36064)),i=Z(r(18072)),a=Z(r(61440)),o=Z(r(47793)),l=Z(r(42992)),u=Z(r(1105)),c=Z(r(67986)),d=Z(r(44949)),h=Z(r(61403)),p=Z(r(19605)),f=J(r(53371)),g=Z(r(2329)),m=Z(r(23107)),_=Z(r(14456)),y=Z(r(95580)),E=Z(r(30259)),T=J(r(64396));t.regexHelpers=T;var A=J(r(74252));t.exceptionListHelpers=A;var v=J(r(74694));t.stemHelpers=v;var b=J(r(62390));t.values=b;var S=Z(r(11475)),I=Z(r(43527)),O=Z(r(80053)),C=r(62240),N=Z(r(86697)),D=r(81831),w=Z(r(8737)),P=Z(r(88567)),R=Z(r(40231)),k=Z(r(67404)),L=Z(r(9862)),M=r(29368),x=r(37361),F=Z(r(73481)),U=r(10840),B=r(36478),G=r(48024),H=J(r(29866));t.helpers=H;var j=J(r(42299));t.researches=j;var $=Z(r(46882)),q=Z(r(60645)),W=Z(r(66676)),V=Z(r(8920)),Y=Z(r(92518)),z=Z(r(24081)),K=Z(r(45072)),Q=Z(r(20712));function X(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(X=function(e){return e?r:t})(e)}function J(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=X(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=s?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}function Z(e){return e&&e.__esModule?e:{default:e}}t.languageHelpers={wordComplexityHelperEnglish:$.default,wordComplexityHelperGerman:q.default,wordComplexityHelperSpanish:W.default,wordComplexityHelperFrench:V.default},t.languageConfigs={wordComplexityConfigEnglish:Y.default,wordComplexityConfigGerman:z.default,wordComplexityConfigSpanish:K.default,wordComplexityConfigFrench:Q.default}},24081:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={wordLength:10}},60645:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){const s=e.wordLength,i=n.frequencyList.list;return!((t=t.toLowerCase()).length<=s)&&(!i.includes(t)&&(!r.test(t)||(t=t.replace(r,""),!i.includes(t))))};const r=new RegExp("(en|e|s)$")},31946:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=["A.D.","Adm.","Adv.","B.C.","Br.","Brig.","Cmrd.","Col.","Cpl.","Cpt.","Dr.","Esq.","Fr.","Gen.","Gov.","Hon.","Jr.","Lieut.","Lt.","Maj.","Mr.","Mrs.","Ms.","Msgr.","Mx.","No.","Pfc.","Pr.","Prof.","Pvt.","Rep.","Reps.","Rev.","Rt. Hon.","Sen.","Sens.","Sgt.","Sps.","Sr.","St.","vs.","i.e.","e.g.","viz.","Mt."]},89456:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.nonNouns=t.filteredAtEnding=t.filteredAtBeginningAndEnding=t.filteredAnywhere=t.default=t.cannotDirectlyPrecedePassiveParticiple=t.cannotBeBetweenPassiveAuxiliaryAndParticiple=t.all=void 0;var n,s=r(64998),i=r(27350),a=(n=r(85336))&&n.__esModule?n:{default:n};const o=["the","an","a"],l=["one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty","hundred","hundreds","thousand","thousands","million","millions","billion","billions"],u=["first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth","thirteenth","fourteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","twentieth"],c=["i","you","he","she","it","we","they"],d=["me","him","us","them"],h=["this","that","these","those"],p=["my","your","his","her","its","their","our","mine","yours","hers","theirs","ours"],f=["all","some","many","lot","lots","ton","tons","bit","no","every","enough","little","much","more","most","plenty","several","few","fewer","kind","kinds"],g=["myself","yourself","himself","herself","itself","oneself","ourselves","yourselves","themselves"],m=["none","nobody","everyone","everybody","someone","somebody","anyone","anybody","nothing","everything","something","anything","each","other","whatever","whichever","whoever","whomever","whomsoever","whosoever","others","neither","both","either","any","such"],_=["one's","nobody's","everyone's","everybody's","someone's","somebody's","anyone's","anybody's","nothing's","everything's","something's","anything's","whoever's","others'","other's","another's","neither's","either's"],y=["which","what","whose"],E=["who","whom"],T=["where","how","why","whether","wherever","whyever","wheresoever","whensoever","howsoever","whysoever","whatsoever","whereso","whomso","whenso","howso","whyso","whoso","whatso"],A=["therefor","therein","hereby","hereto","wherein","therewith","herewith","wherewith","thereby"],v=["there","here","whither","thither","hither","whence","thence"],b=["always","once","twice","thrice"],S=["can","cannot","can't","could","couldn't","could've","dare","dares","dared","do","don't","does","doesn't","did","didn't","done","have","haven't","had","hadn't","has","hasn't","i've","you've","we've","they've","i'd","you'd","he'd","she'd","it'd","we'd","they'd","would","wouldn't","would've","may","might","must","need","needn't","needs","ought","shall","shalln't","shan't","should","shouldn't","will","won't","i'll","you'll","he'll","she'll","it'll","we'll","they'll","there's","there're","there'll","here's","here're","there'll"],I=["appear","appears","appeared","become","becomes","became","come","comes","came","keep","keeps","kept","remain","remains","remained","stay","stays","stayed","turn","turns","turned"],O=["doing","daring","having","appearing","becoming","coming","keeping","remaining","staying","saying","asking","stating","seeming","letting","making","setting","showing","putting","adding","going","using","trying","containing"],C=["in","from","with","under","throughout","atop","for","on","of","to","aboard","about","above","abreast","absent","across","adjacent","after","against","along","alongside","amid","mid","among","apropos","apud","around","as","astride","at","ontop","afore","tofore","behind","ahind","below","ablow","beneath","neath","beside","between","atween","beyond","ayond","by","chez","circa","spite","down","except","into","less","like","minus","near","nearer","nearest","anear","notwithstanding","off","onto","opposite","out","outen","over","past","per","pre","qua","sans","sithence","through","thru","truout","toward","underneath","up","upon","upside","versus","via","vis-à-vis","without","ago","apart","aside","aslant","away","withal","towards","amidst","amongst","midst","whilst"],N=["back","within","forward","backward","ahead"],D=["and","or","and/or","yet"],w=["sooner","just","only"],P=["if","even"],R=["say","says","said","claimed","ask","asks","asked","stated","explain","explains","explained","think","thinks","talks","talked","announces","announced","tells","told","discusses","discussed","suggests","suggested","understands","understood"],k=["again","definitely","eternally","expressively","instead","expressly","immediately","including","instantly","namely","naturally","next","notably","now","nowadays","ordinarily","positively","truly","ultimately","uniquely","usually","almost","maybe","probably","granted","initially","too","actually","already","e.g","i.e","often","regularly","simply","optionally","perhaps","sometimes","likely","never","ever","else","inasmuch","provided","currently","incidentally","elsewhere","particular","recently","relatively","f.i","clearly","apparently"],L=["highly","very","really","extremely","absolutely","completely","totally","utterly","quite","somewhat","seriously","fairly","fully","amazingly"],M=["seem","seems","seemed","let","let's","lets","make","makes","made","want","showed","shown","go","goes","went","gone","take","takes","took","taken","put","puts","use","used","try","tries","tried","mean","means","meant","called","based","add","adds","added","contain","contains","contained","consist","consists","consisted","ensure","ensures","ensured"],x=["new","newer","newest","old","older","oldest","previous","good","well","better","best","big","bigger","biggest","easy","easier","easiest","fast","faster","fastest","far","hard","harder","hardest","least","own","large","larger","largest","long","longer","longest","low","lower","lowest","high","higher","highest","regular","simple","simpler","simplest","small","smaller","smallest","tiny","tinier","tiniest","short","shorter","shortest","main","actual","nice","nicer","nicest","real","same","able","certain","usual","so-called","mainly","mostly","recent","anymore","complete","lately","possible","commonly","constantly","continually","directly","easily","nearly","slightly","somewhere","estimated","latest","different","similar","widely","bad","worse","worst","great","specific","available","average","awful","awesome","basic","beautiful","busy","current","entire","everywhere","important","major","multiple","normal","necessary","obvious","partly","special","last","early","earlier","earliest","young","younger","youngest"],F=["oh","wow","tut-tut","tsk-tsk","ugh","whew","phew","yeah","yea","shh","oops","ouch","aha","yikes"],U=["tbs","tbsp","spk","lb","qt","pk","bu","oz","pt","mod","doz","hr","f.g","ml","dl","cl","l","mg","g","kg","quart"],B=["seconds","minute","minutes","hour","hours","day","days","week","weeks","month","months","year","years","today","tomorrow","yesterday"],G=["thing","things","way","ways","matter","case","likelihood","ones","piece","pieces","stuff","times","part","parts","percent","instance","instances","aspect","aspects","item","items","idea","theme","person","instance","instances","detail","details","factor","factors","difference","differences"],H=["not","yes","sure","top","bottom","ok","okay","amen","aka","etc","etcetera","sorry","please"],j=["jr","sr"],$=t.filteredAtEnding=(0,a.default)([].concat(u,O,x)),q=t.filteredAtBeginningAndEnding=(0,a.default)([].concat(o,C,D,h,L,f,p)),W=t.filteredAnywhere=(0,a.default)([].concat(i.singleWords,b,c,d,g,F,l,s.filteredAuxiliaries,S,I,R,M,m,w,P,y,E,T,v,H,N,A,U,B,G)),V=t.cannotDirectlyPrecedePassiveParticiple=(0,a.default)([].concat(o,C,h,p,u,O,f)),Y=t.cannotBeBetweenPassiveAuxiliaryAndParticiple=(0,a.default)([].concat(S,I,R,M)),z=(t.nonNouns=(0,a.default)([].concat(o,l,u,h,p,g,c,d,f,m,O,_,y,E,T,A,v,b,N,s.filteredAuxiliaries,s.notFilteredAuxiliaries,S,I,C,D,w,P,R,i.singleWords,k,L,M,F,x,U,H,j)),t.all=(0,a.default)([].concat(o,l,u,h,p,g,c,d,f,m,O,_,y,E,T,A,v,b,N,s.filteredAuxiliaries,s.notFilteredAuxiliaries,S,I,C,D,w,P,R,i.singleWords,k,L,M,F,x,U,G,H,B,["ms","mss","mrs","mr","dr","prof"],j)));t.default={filteredAtEnding:$,filteredAtBeginningAndEnding:q,filteredAnywhere:W,cannotDirectlyPrecedePassiveParticiple:V,cannotBeBetweenPassiveAuxiliaryAndParticiple:Y,all:z}},64998:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.notFilteredAuxiliaries=t.filteredAuxiliaries=t.default=t.all=void 0;const r=t.filteredAuxiliaries=["am","is","are","was","were","been","get","gets","got","gotten","be","she's","he's","it's","i'm","we're","they're","you're","that's","isn't","weren't","wasn't","aren't"],n=t.notFilteredAuxiliaries=["being","getting","having","what's"],s=t.all=r.concat(n);t.default=s},89597:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=["arisen","awoken","reawoken","babysat","backslid","backslidden","beat","beaten","become","begun","bent","unbent","bet","bid","outbid","rebid","underbid","overbid","bidden","bitten","blown","bought","overbought","bound","unbound","rebound","broadcast","rebroadcast","broken","brought","browbeat","browbeaten","built","prebuilt","rebuilt","overbuilt","burnt","burst","bust","cast","miscast","recast","caught","chosen","clung","come","overcome","cost","crept","cut","undercut","recut","daydreamt","dealt","misdealt","redealt","disproven","done","predone","outdone","misdone","redone","overdone","undone","drawn","outdrawn","redrawn","overdrawn","dreamt","driven","outdriven","drunk","outdrunk","overdrunk","dug","dwelt","eaten","overeaten","fallen","felt","fit","refit","retrofit","flown","outflown","flung","forbidden","forecast","foregone","foreseen","foretold","forgiven","forgotten","forsaken","fought","outfought","found","frostbitten","frozen","unfrozen","given","gone","undergone","gotten","ground","reground","grown","outgrown","regrown","had","handwritten","heard","reheard","misheard","overheard","held","hewn","hidden","unhidden","hit","hung","rehung","overhung","unhung","hurt","inlaid","input","interwound","interwoven","jerry-built","kept","knelt","knit","reknit","unknit","known","laid","mislaid","relaid","overlaid","lain","underlain","leant","leapt","outleapt","learnt","unlearnt","relearnt","mislearnt","left","lent","let","lip-read","lit","relit","lost","made","premade","remade","meant","met","mown","offset","paid","prepaid","repaid","overpaid","partaken","proofread","proven","put","quick-frozen","quit","read","misread","reread","retread","rewaken","rid","ridden","outridden","overridden","risen","roughcast","run","outrun","rerun","overrun","rung","said","sand-cast","sat","outsat","sawn","seen","overseen","sent","resent","set","preset","reset","misset","sewn","resewn","oversewn","unsewn","shaken","shat","shaven","shit","shone","outshone","shorn","shot","outshot","overshot","shown","shrunk","preshrunk","shut","sight-read","slain","slept","outslept","overslept","slid","slit","slung","unslung","slunk","smelt","outsmelt","snuck","sold","undersold","presold","outsold","resold","oversold","sought","sown","spat","spelt","misspelt","spent","underspent","outspent","misspent","overspent","spilt","overspilt","spit","split","spoilt","spoken","outspoken","misspoken","overspoken","spread","sprung","spun","unspun","stolen","stood","understood","misunderstood","strewn","stricken","stridden","striven","struck","strung","unstrung","stuck","unstuck","stung","stunk","sublet","sunburnt","sung","outsung","sunk","sweat","swept","swollen","sworn","outsworn","swum","outswum","swung","taken","undertaken","mistaken","retaken","overtaken","taught","mistaught","retaught","telecast","test-driven","test-flown","thought","outthought","rethought","overthought","thrown","outthrown","overthrown","thrust","told","retold","torn","retorn","trod","trodden","typecast","typeset","upheld","upset","waylaid","wept","wet","rewet","withdrawn","withheld","withstood","woken","won","rewon","worn","reworn","wound","rewound","overwound","unwound","woven","rewoven","unwoven","written","typewritten","underwritten","outwritten","miswritten","rewritten","overwritten","wrung"]},74016:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.regularParticiplesRegex=void 0,t.regularParticiplesRegex=/\w+ed($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi},27350:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.singleWords=t.multipleWords=t.default=t.allWords=void 0;const r=t.singleWords=["accordingly","additionally","afterward","afterwards","albeit","also","although","altogether","another","basically","because","before","besides","but","certainly","chiefly","comparatively","concurrently","consequently","contrarily","conversely","correspondingly","despite","doubtedly","during","e.g.","earlier","emphatically","equally","especially","eventually","evidently","explicitly","finally","firstly","following","formerly","forthwith","fourthly","further","furthermore","generally","hence","henceforth","however","i.e.","identically","indeed","initially","instead","last","lastly","later","lest","likewise","markedly","meanwhile","moreover","nevertheless","nonetheless","nor","notwithstanding","obviously","occasionally","otherwise","overall","particularly","presently","previously","rather","regardless","secondly","shortly","significantly","similarly","simultaneously","since","so","soon","specifically","still","straightaway","subsequently","surely","surprisingly","than","then","thereafter","therefore","thereupon","thirdly","though","thus","till","undeniably","undoubtedly","unless","unlike","unquestionably","until","when","whenever","whereas","while"],n=t.multipleWords=["above all","after all","after that","all in all","all of a sudden","all things considered","analogous to","although this may be true","analogous to","another key point","as a matter of fact","as a result","as an illustration","as can be seen","as has been noted","as I have noted","as I have said","as I have shown","as long as","as much as","as opposed to","as shown above","as soon as","as well as","at any rate","at first","at last","at least","at length","at the present time","at the same time","at this instant","at this point","at this time","balanced against","being that","by all means","by and large","by comparison","by the same token","by the time","compared to","be that as it may","coupled with","different from","due to","equally important","even if","even more","even so","even though","first thing to remember","for example","for fear that","for instance","for one thing","for that reason","for the most part","for the purpose of","for the same reason","for this purpose","for this reason","from time to time","given that","given these points","important to realize","in a word","in addition","in another case","in any case","in any event","in brief","in case","in conclusion","in contrast","in detail","in due time","in effect","in either case","in essence","in fact","in general","in light of","in like fashion","in like manner","in order that","in order to","in other words","in particular","in reality","in short","in similar fashion","in spite of","in sum","in summary","in that case","in the event that","in the final analysis","in the first place","in the fourth place","in the hope that","in the light of","in the long run","in the meantime","in the same fashion","in the same way","in the second place","in the third place","in this case","in this situation","in time","in truth","in view of","inasmuch as","most compelling evidence","most important","must be remembered","not only","not to mention","note that","now that","of course","on account of","on balance","on condition that","on one hand","on the condition that","on the contrary","on the negative side","on the other hand","on the positive side","on the whole","on this occasion","once","once in a while","only if","owing to","point often overlooked","prior to","provided that","seeing that","so as to","so far","so long as","so that","sooner or later","such as","summing up","take the case of","that is","that is to say","then again","this time","to be sure","to begin with","to clarify","to conclude","to demonstrate","to emphasize","to enumerate","to explain","to illustrate","to list","to point out","to put it another way","to put it differently","to repeat","to rephrase it","to say nothing of","to sum up","to summarize","to that end","to the end that","to this end","together with","under those circumstances","until now","up against","up to the present time","vis a vis","what's more","while it may be true","while this may be true","with attention to","with the result that","with this in mind","with this intention","with this purpose in mind","without a doubt","without delay","without doubt","without reservation"],s=t.allWords=r.concat(n);t.default=s},92518:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={wordLength:7,doesUpperCaseDecreaseComplexity:!0}},46882:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){const i=e.wordLength,a=r.frequencyList.list,o=e.doesUpperCaseDecreaseComplexity;if(t.length<=i)return!1;if(o&&t[0].toLowerCase()!==t[0])return!1;if(a.includes(t))return!1;if(r){const e=(0,n.default)(t,(0,s.default)(r.nouns.regexNoun.singularize));return!a.includes(e)}return!0};var n=i(r(19605)),s=i(r(53371));function i(e){return e&&e.__esModule?e:{default:e}}},45072:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={wordLength:7}},66676:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,i){const a=e.wordLength,o=i.frequencyList.list;return!(t.length<=a)&&(t[0].toLowerCase()===t[0]&&(!o.includes(t)&&(n.test(t)?(t=t.replace(s,""),!o.includes(t)):!r.test(t)||(t=t.replace(s,""),!o.includes(t)))))};const r=new RegExp("[aeiuoyáéíóúñ](s)$"),n=new RegExp("[bcdfghjklmnpqrstvwxzñ](es)$"),s=new RegExp("(s|es)$")},20712:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={wordLength:9}},8920:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){const i=e.wordLength,a=r.frequencyList.list;if(t=(0,n.normalizeSingle)(t),s.test(t)&&(t=t.replace(s,"")),t.length<=i)return!1;if(a.includes(t))return!1;if(t[0].toLowerCase()===t[0]){const e=new RegExp(r.suffixGroupsComplexity.standardSuffixesWithSplural),n=new RegExp(r.suffixGroupsComplexity.standardSuffixesWithXplural),s=r.suffixGroupsComplexity.irregularPluralSingularSuffixes,i=new RegExp(s[0]);return e.test(t)||n.test(t)?t=t.substring(0,t.length-1):i.test(t)&&(t=t.replace(i,s[1])),!a.includes(t)}return!1};var n=r(37361);const s=new RegExp("^(c'|d'|l'|s')")},49581:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={recommendedMaximumLength:60,maximumLength:80}},40027:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=(0,a.default)(e),n=t.getResearch("morphology"),s=t.getHelper("matchWordCustomHelper");return l(r,n,e.getLocale(),s)};var n=o(r(15770)),s=r(36478),i=r(92819),a=o(r(92017));function o(e){return e&&e.__esModule?e:{default:e}}const l=function(e,t,r,a){const o={noAlt:0,withAlt:0,withAltKeyword:0,withAltNonKeyword:0};return e.forEach((e=>{const l=(0,n.default)(e);""!==l?(0,i.isEmpty)(t.keyphraseForms)?o.withAlt++:(0,s.findTopicFormsInString)(t,l,!0,r,a).percentWordMatches>=50?o.withAltKeyword++:o.withAltNonKeyword++:o.noAlt++})),o}},99447:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getHelper("memoizedTokenizer");let o=e.getText();o=(0,i.default)(o),o=(0,a.filterShortcodesFromHTML)(o,e._attributes&&e._attributes.shortcodes);const l=(0,n.default)(o,r);return(0,s.default)(l,t)};var n=o(r(9862)),s=o(r(91916)),i=o(r(96908)),a=r(29866);function o(e){return e&&e.__esModule?e:{default:e}}},14117:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=c(r(75118)),i=r(36478),a=r(66382),o=c(r(83927)),l=c(r(1105)),u=r(10152);function c(e){return e&&e.__esModule?e:{default:e}}let d=[];const h=function(e,t){return 0===t||0===d.length?t:function(e){e=e.toLocaleLowerCase();let t=(0,l.default)(e.toLocaleLowerCase(),u.WORD_BOUNDARY_WITH_HYPHEN);return t=(0,n.filter)(t,(function(e){return!(0,n.includes)(d,e.trim().toLocaleLowerCase())})),(0,n.isEmpty)(t)}(e.substring(0,t))?0:t};t.default=function(e,t){d=t.getConfig("functionWords");let r=(0,n.escapeRegExp)(e.getKeyword());const l=e.getTitle(),u=e.getLocale();let c={exactMatchFound:!1,allWordsFound:!1,position:-1,exactMatchKeyphrase:!1};const p=(0,o.default)(r);p.exactMatchRequested&&(r=p.keyphrase,c.exactMatchKeyphrase=!0);const f=t.getConfig("prefixedFunctionWordsRegex"),g=(0,s.default)(l,r,u,!1);return g.count>0&&!f?(c.exactMatchFound=!0,c.allWordsFound=!0,c.position=h(l,g.position),c):(c=function(e,t,r,o,l){const u=e.getTitle(),c=e.getLocale(),d=t.getResearch("morphology"),p=(0,i.findTopicFormsInString)(d,u,!1,c,!1);if(100===p.percentWordMatches){if(l){const{exactMatchFound:e,position:t}=function(e,t,r,i,o,l){let u=[];e.matches.forEach((e=>{const{prefix:t}=(0,a.stemPrefixedFunctionWords)(e,i);u.push(t)}));const c=t.split(" ");let d=[];u=(0,n.uniq)(u.concat([""]));const p=[];return c.forEach((e=>{p.push(u.map((t=>t+e)))})),d=function(...e){return e.reduce(((e,t)=>e.flatMap((e=>t.map((t=>[e,t].flat()))))))}(...p),d=d.map((e=>Array.isArray(e)?e.join(" "):e)),d.forEach((e=>{const t=(0,s.default)(o,e,l,!1);t.count>0&&(r.exactMatchFound=!0,r.position=h(o,t.position))})),0===e.position&&(r.position=0),r}(p,r,o,l,u,c);o={...o,exactMatchFound:e,position:t}}o.allWordsFound=!0}return o}(e,t,r,c,f),c)}},86232:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=t.getResearch("getParagraphs");r=r.filter((t=>{const r=(0,i.getParentNode)(e,t);return!(t.isImplicit&&r&&"figcaption"===r.name)})),r=r.filter((e=>!(e.childNodes&&e.childNodes[0]&&(0,a.createShortcodeTagsRegex)(["caption"]).test(e.childNodes[0].value))));const o=r[0],l=t.getResearch("morphology"),u=t.getHelper("matchWordCustomHelper"),c=e.getLocale(),d=o&&o.sourceCodeLocation.startOffset,h=e._attributes.wpBlocks,p={foundInOneSentence:!1,foundInParagraph:!1,keyphraseOrSynonym:"",introduction:o,parentBlock:h&&h.filter((e=>(0,n.inRange)(d,e.startOffset,e.endOffset)))[0]||null};if((0,n.isEmpty)(o))return p;const f=o.sentences.map((e=>e.text));if(!(0,n.isEmpty)(f)){const e=f.map((e=>(0,s.findTopicFormsInString)(l,e,!0,c,u))).find((e=>100===e.percentWordMatches));if(e)return p.foundInOneSentence=!0,p.foundInParagraph=!0,p.keyphraseOrSynonym=e.keyphraseOrSynonym,p;const t=(0,s.findTopicFormsInString)(l,o.innerText(),!0,c,u);if(100===t.percentWordMatches)return p.foundInParagraph=!0,p.keyphraseOrSynonym=t.keyphraseOrSynonym,p}return p};var n=r(92819),s=r(36478),i=r(54241),a=r(29866)},69564:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getHelper("matchTransitionWordsHelper"),n=t.getConfig("transitionWords"),i=t.getConfig("twoPartTransitionWords"),a=t.getHelper("memoizedTokenizer");let l=e.getText();l=(0,o.default)(l),l=(0,u.filterShortcodesFromHTML)(l,e._attributes&&e._attributes.shortcodes);const c=(0,s.default)(l,a),d=p(c,n,i,r);return{totalSentences:c.length,sentenceResults:d,transitionWordSentences:d.length}};var n=c(r(55508)),s=c(r(9862)),i=r(37361),a=r(30043),o=c(r(96908)),l=r(92819),u=r(29866);function c(e){return e&&e.__esModule?e:{default:e}}let d=null,h="";const p=function(e,t,r,s){const o=[];return e.forEach((e=>{if(r){const t=function(e,t){e=(0,i.normalizeSingle)(e);const r=function(e){const t=(0,l.flattenDeep)(e).join("");return h===t&&null!==d||(h=t,d=(0,n.default)(e)),d}(t);return e.match(r)}(e,r);if(null!==t)return void o.push({sentence:e,transitionWords:t})}const u=s?s(e,t):function(e,t){return e=(0,i.normalizeSingle)(e),t.filter((t=>(0,a.isWordInSentence)(t,e)))}(e,t);0!==u.length&&o.push({sentence:e,transitionWords:u})})),o}},3479:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getConfig("functionWords"),o=t.getHelper("getWordsCustomHelper"),l=e.getKeyword();if((0,i.default)(l).exactMatchRequested)return!1;let u=o?o(l):(0,s.default)(l,a.WORD_BOUNDARY_WITH_HYPHEN);return u=(0,n.filter)(u,(function(e){return!(0,n.includes)(r,e.trim().toLocaleLowerCase())})),(0,n.isEmpty)(u)};var n=r(92819),s=o(r(1105)),i=o(r(83927)),a=r(10152);function o(e){return e&&e.__esModule?e:{default:e}}},63216:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){p=t.getConfig("functionWords");const r=t.getConfig("areHyphensWordBoundaries"),h={anchorsWithKeyphrase:[],anchorsWithKeyphraseCount:0};if(""===e.getText())return h;const f=e.getKeyword();if(""===f)return h;const g=(0,l.default)(e.getSynonyms());g.push(f);let m=e.getTree().findAll((e=>"a"===e.name));if(m=function(e,t){const r=e.map((function(e){const r=e.attributes.href;return!!r&&function(e,t){return Boolean(c.default.areEqual(e,t)||c.default.isRelativeFragmentURL(e))}(r,t)}));return e.filter(((e,t)=>!r[t]))}(m,e.getPermalink()),0===m.length)return h;const _=e.getLocale(),y=t.getResearch("morphology"),E={matchWordCustomHelper:t.getHelper("matchWordCustomHelper"),getWordsCustomHelper:t.getHelper("getWordsCustomHelper")};if(m=function(e,t,r,n){const s=e.map((function(e){const s=e.innerText();return 100===(0,i.findTopicFormsInString)(t,s,!0,r,n).percentWordMatches}));return e.filter(((e,t)=>s[t]))}(m,y,_,E.matchWordCustomHelper),0===m.length)return h;return m=function(e,t,r,i,l,u){const c=i.matchWordCustomHelper,h=i.getWordsCustomHelper,f=[(0,n.flatten)(t.keyphraseForms)];t.synonymsForms.forEach((e=>f.push((0,n.flatten)(e))));const g=[];return e.forEach((function(e){const t=e.innerText();let i;i=h?(0,n.uniq)(h(t)):u?(0,n.uniq)((0,a.default)(t,d.WORD_BOUNDARY_WITH_HYPHEN)):(0,n.uniq)((0,a.default)(t,d.WORD_BOUNDARY_WITHOUT_HYPHEN));const m=(0,s.default)(i,p);m.length>0&&(i=m),l.forEach((e=>{e.exactMatchRequested&&i.every((t=>e.keyphrase.includes(t)))&&g.push(!0)}));for(let e=0;e(0,o.default)(e,t,r,c).count>0))){g.push(!0);break}}})),e.filter(((e,t)=>g[t]))}(m,y,_,E,g.map((e=>(0,u.default)(e))),r),{anchorsWithKeyphrase:m,anchorsWithKeyphraseCount:m.length}};var n=r(92819),s=h(r(49325)),i=r(36478),a=h(r(1105)),o=h(r(7407)),l=h(r(73481)),u=h(r(83927)),c=h(r(20917)),d=r(10152);function h(e){return e&&e.__esModule?e:{default:e}}let p=[]},82163:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DIFFICULTY=void 0,t.default=function(e,t){const r=t.getConfig("syllables"),l=t.getHelper("memoizedTokenizer"),d=function(e){return e.getConfig("fleschReadingEaseScores")||{borders:{veryEasy:90,easy:80,fairlyEasy:70,okay:60,fairlyDifficult:50,difficult:30,veryDifficult:0},scores:{veryEasy:9,easy:9,fairlyEasy:9,okay:9,fairlyDifficult:6,difficult:3,veryDifficult:3}}}(t);let h=e.getText();if(""===h)return{score:-1,difficulty:c.NO_DATA};h=(0,n.default)(h);const p=(0,s.default)(h,l),f=(0,i.default)(h);if(p<1||f<=10)return{score:-1,difficulty:c.NO_DATA};const g=(0,a.default)(h,r),m={numberOfSentences:p,numberOfWords:f,numberOfSyllables:g,averageWordsPerSentence:u(f,p),syllablesPer100Words:g*(100/f)},_=t.getHelper("fleschReadingScore"),y=(0,o.clamp)(_(m),0,100),E=function(e,t){return e>=t.borders.veryEasy?c.VERY_EASY:(0,o.inRange)(e,t.borders.easy,t.borders.veryEasy)?c.EASY:(0,o.inRange)(e,t.borders.fairlyEasy,t.borders.easy)?c.FAIRLY_EASY:(0,o.inRange)(e,t.borders.okay,t.borders.fairlyEasy)?c.OKAY:(0,o.inRange)(e,t.borders.fairlyDifficult,t.borders.okay)?c.FAIRLY_DIFFICULT:(0,o.inRange)(e,t.borders.difficult,t.borders.fairlyDifficult)?c.DIFFICULT:c.VERY_DIFFICULT}(y,d);return{score:y,difficulty:E}};var n=l(r(86812)),s=l(r(55473)),i=l(r(33870)),a=l(r(39617)),o=r(92819);function l(e){return e&&e.__esModule?e:{default:e}}const u=function(e,t){return e/t},c=t.DIFFICULTY={NO_DATA:-1,VERY_EASY:0,EASY:1,FAIRLY_EASY:2,OKAY:3,FAIRLY_DIFFICULT:4,DIFFICULT:5,VERY_DIFFICULT:6}},78160:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,t.getKeywordDensity=function(e,t){return console.warn("This function is deprecated, use getKeyphraseDensity instead."),i(e,t)};var n,s=(n=r(60914))&&n.__esModule?n:{default:n};function i(e,t){const r=t.getHelper("getWordsCustomHelper");let n=0;return n=r?r(e.getText()).length:(0,s.default)(e).length,0===n?0:t.getResearch("getKeyphraseCount").count/n*100}},45095:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=(0,s.default)(e.getText()),r=e.getPermalink(),a={total:t.length,internalTotal:0,internalDofollow:0,internalNofollow:0,externalTotal:0,externalDofollow:0,externalNofollow:0,otherTotal:0,otherDofollow:0,otherNofollow:0};for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=(0,n.default)(e.getText());return(0,s.map)(t,i.default.getFromAnchorTag)};var n=a(r(30341)),s=r(92819),i=a(r(20917));function a(e){return e&&e.__esModule?e:{default:e}}},37228:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=e.getText();t=(0,s.default)(t),t=(0,o.filterShortcodesFromHTML)(t,e._attributes&&e._attributes.shortcodes);const r=(0,i.default)(t,c),a=(0,i.default)(t,d),l=h(r,"paragraph"),u=h(a,"heading");return(0,n.flatten)(l.concat(u))};var n=r(92819),s=l(r(96908)),i=l(r(13617)),a=l(r(86697)),o=r(24533);function l(e){return e&&e.__esModule?e:{default:e}}const u=/class=["'].*?has-text-align-center.*?["']/i,c=/]+)?>(.*?)<\/p>/gi,d=/]+)?>(.*?)<\/h\1>/gi;function h(e,t){return e.filter((e=>u.test(e)&&(0,a.default)(e).length>50)).map((e=>({text:e,elementType:t})))}},72619:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=e.getText();r=(0,l.default)(r),r=(0,u.filterShortcodesFromHTML)(r,e._attributes&&e._attributes.shortcodes),r=r.replace(n.imageRegex,""),r=(0,s.default)(r);const c=(0,a.default)(r),d=[],h=t.getHelper("customCountLength");return c.map((function(e){d.push({countLength:h?h(e):(0,i.default)(e),text:e})})),(0,o.filter)(d,(function(e){return e.countLength>0}))};var n=r(61440),s=c(r(65510)),i=c(r(33870)),a=c(r(62932)),o=r(92819),l=c(r(96908)),u=r(29866);function c(e){return e&&e.__esModule?e:{default:e}}},41564:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=e.getTree().findAll((e=>"p"===e.name));return t=(0,n.reject)(t,(e=>0===e.sentences.length)),t=(0,n.reject)(t,(e=>e.childNodes.every((e=>"a"===e.name)))),t};var n=r(92819)},52364:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getConfig("passiveConstructionType");return"periphrastic"===r?d(e,t):"morphological"===r?c(e,t):h(e,t)},t.getPeriphrasticPassives=t.getMorphologicalPassives=void 0;var n=u(r(9862)),s=r(62240),i=u(r(18812)),a=r(92819),o=u(r(96908)),l=r(29866);function u(e){return e&&e.__esModule?e:{default:e}}const c=function(e,t){const r=t.getHelper("isPassiveSentence");let u=e.getText();u=(0,o.default)(u),u=(0,l.filterShortcodesFromHTML)(u,e._attributes&&e._attributes.shortcodes);const c=t.getHelper("memoizedTokenizer"),d=(0,n.default)(u,c).map((function(e){return new i.default(e)})),h=d.length,p=[];return(0,a.forEach)(d,(function(e){const t=(0,s.stripFullTags)(e.getSentenceText()).toLocaleLowerCase();e.setPassive(r(t)),!0===e.isPassive()&&p.push(e.getSentenceText())})),{total:h,passives:p}};t.getMorphologicalPassives=c;const d=function(e,t){const r=t.getHelper("getClauses");let u=e.getText();u=(0,o.default)(u),u=(0,l.filterShortcodesFromHTML)(u,e._attributes&&e._attributes.shortcodes);const c=t.getHelper("memoizedTokenizer"),d=(0,n.default)(u,c).map((function(e){return new i.default(e)})),h=d.length,p=[];return(0,a.forEach)(d,(function(e){const t=(0,s.stripFullTags)(e.getSentenceText()).toLocaleLowerCase(),n=r(t);e.setClauses(n),e.isPassive()&&p.push(e.getSentenceText())})),{total:h,passives:p}};t.getPeriphrasticPassives=d;const h=function(e,t){const r=c(e,t),n=d(e,t).passives;return{total:r.total,passives:n.concat(r.passives)}}},18807:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=r(85683),i=o(r(85476)),a=o(r(32879));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){const r=t.getConfig("functionWords"),o=t.getHelper("customGetStemmer"),l=o?o(t):t.getHelper("getStemmer")(t),u=t.getHelper("getWordsCustomHelper");let c=e.getText();c=(0,i.default)(c),c=(0,a.default)(c);const d=u?[]:(0,s.retrieveAbbreviations)(c),h=(0,s.getProminentWords)(c,d,l,r,u),p=(0,s.collapseProminentWordsOnStem)(h);return(0,s.sortProminentWords)(p),(0,n.take)((0,s.filterProminentWords)(p,5),20)}},58743:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=c(r(33870)),i=r(85683),a=r(84285),o=c(r(42992)),l=c(r(85476)),u=c(r(32879));function c(e){return e&&e.__esModule?e:{default:e}}const d=function(e){return e=(0,l.default)(e),(0,u.default)(e)};t.default=function(e,t){const r=t.getConfig("functionWords"),l=t.getHelper("customGetStemmer"),u=l?l(t):t.getHelper("getStemmer")(t),c=t.getHelper("getWordsCustomHelper"),h=t.getHelper("customCountLength"),p=d(e.getText()),f=d(e.getDescription()),g=d(e.getTitle()),m={};if(m.hasMetaDescription=""!==f,m.hasTitle=""!==g,m.prominentWords=[],h){if(h(p)<200)return m}else if((0,s.default)(p)<100)return m;const _=(0,a.getSubheadingsTopLevel)(p).map((e=>e[2])),y=[e.getKeyword(),e.getSynonyms(),g,f,_.join(" ")],E=c?[]:(0,i.retrieveAbbreviations)(p.concat(y.join(" "))),T=(0,a.removeSubheadingsTopLevel)(p),A=(0,i.getProminentWords)(T,E,u,r,c),v=(0,i.getProminentWordsFromPaperAttributes)(y,E,u,r,c);v.forEach((e=>e.setOccurrences(3*e.getOccurrences())));const b=(0,i.collapseProminentWordsOnStem)(v.concat(A));(0,i.sortProminentWords)(b);let S=4;return u===o.default&&(S=2),m.prominentWords=(0,n.take)((0,i.filterProminentWords)(b,S),100),m}},62987:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getConfig("firstWordExceptions"),c=t.getConfig("secondWordExceptions"),h=t.getHelper("getWordsCustomHelper"),p=t.getHelper("memoizedTokenizer");let f=e.getText();f=(0,l.default)(f),f=(0,u.filterShortcodesFromHTML)(f,e._attributes&&e._attributes.shortcodes),f=f.replace(/[\s\n]+/g," "),f=f.replace(/
            .*<\/figure>/gs,""),f=f.replace(/]+)?>(.*?)<\/li>/gi,"");let g=(0,s.default)(f,p),m=g.map((function(e){return function(e,t,r,s){const o=(0,a.stripFullTags)((0,i.default)(e)),l=s?s(o):(0,n.default)(o);if(0===l.length)return"";let u=l[0].toLocaleLowerCase();return t.indexOf(u)>-1&&l.length>1&&(u=u+" "+l[1],r&&r.includes(l[1])&&(u=u+" "+l[2])),u}(e,r,c,h)}));return g=g.filter((function(e){const t=(0,i.default)(e);return(h?h(t):(0,n.default)(t)).length>0})),m=(0,o.filter)(m),d(m,g)};var n=c(r(1105)),s=c(r(9862)),i=c(r(47793)),a=r(62240),o=r(92819),l=c(r(96908)),u=r(29866);function c(e){return e&&e.__esModule?e:{default:e}}const d=function(e,t){const r=[];let n=[],s=1;return(0,o.forEach)(e,(function(i,a){const l=i,u=e[a+1];n.push(t[a]),function(e,t){return!(0,o.isEmpty)(e)&&e===t}(l,u)?s++:(r.push({word:l,count:s,sentences:n}),s=1,n=[])})),r}},21706:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let r=e.getText();r=(0,a.default)(r),r=(0,o.filterShortcodesFromHTML)(r,e._attributes&&e._attributes.shortcodes);const l=(0,n.default)(r),u=t.getHelper("customCountLength"),c=[];(0,i.forEach)(l,(function(e){c.push({subheading:e.subheading,text:e.text,countLength:u?u(e.text):(0,s.default)(e.text),index:e.index})}));let d=0,h="";if(c.length>0){const e=c[0];h=r.slice(0,e.index),d=u?u(h):(0,s.default)(h)}return d>0&&""!==h&&c.unshift({subheading:"",text:h,countLength:d}),c};var n=l(r(89272)),s=l(r(33870)),i=r(92819),a=l(r(96908)),o=r(29866);function l(e){return e&&e.__esModule?e:{default:e}}},31015:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getConfig("functionWords"),n=t.getHelper("getStemmer")(t),i=t.getHelper("createBasicWordForms"),l=t.getConfig("language"),p=t.getConfig("areHyphensWordBoundaries"),f=(0,a.default)(e,p).map((e=>e.toLocaleLowerCase(l)));return function(e,t,r,n,i,a,o){const l=(0,s.collectStems)(e,t,i,n,o),p=l.keyphraseStems,f=l.synonymsStems;if(0===p.stemOriginalPairs.length&&0===f.length)return new c;if([p,...f].every((e=>!0===e.exactMatch)))return new c([[p.stemOriginalPairs[0].stem]],f.map((e=>[[e.stemOriginalPairs[0].stem]])));const g=[...new Set(d(p,f))],m=[...new Set(r.filter((e=>!n.includes(e))))].map((e=>new s.StemOriginalPair(i(e),e))).filter((e=>g.includes(e.stem))).sort(((e,t)=>e.stem.localeCompare(t.stem))).reduce((function(e,t){const r=e[e.length-1];return 0===e.length||r.stem!==t.stem?e.push(new u(t.stem,[t.original])):r.forms.push(t.original),e}),[]);return new c(h(p,m,a),f.map((e=>h(e,m,a))))}(e.getKeyword().toLocaleLowerCase(l).trim(),(0,o.default)(e.getSynonyms().toLocaleLowerCase(l).trim()),f,r,n,i,p)};var n=r(37361),s=r(17811),i=r(92819),a=l(r(90831)),o=l(r(73481));function l(e){return e&&e.__esModule?e:{default:e}}function u(e,t){this.stem=e,this.forms=t}function c(e=[],t=[]){this.keyphraseForms=e,this.synonymsForms=t}function d(e,t){const r=0===e.stemOriginalPairs.length?[]:e.getStems(),n=0===t.length?[]:t.map((e=>e.getStems()));return[...r,...(0,i.flattenDeep)(n)]}function h(e,t,r){return 0===e.stemOriginalPairs.length?[]:e.exactMatch?[[e.stemOriginalPairs[0].stem]]:e.stemOriginalPairs.map((function(e){return function(e,t,r){const s=t.find((t=>t.stem===e.stem)),a=(0,n.normalizeSingle)((0,i.escapeRegExp)(e.original)),o=s?[a,...s.forms]:[a];return r&&o.push(...r(e.original)),[...new Set(o)]}(e,t,r)}))}},31051:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.getTree().findAll((e=>"h1"===e.name)).map((e=>({tag:"h1",content:e.findAll((e=>"#text"===e.name)).map((e=>e.value)).join(""),position:{startOffset:e.sourceCodeLocation.startTag.endOffset,endOffset:e.sourceCodeLocation.endTag.startOffset,clientId:e.clientId||""}}))).filter((e=>!!e.content))}},52948:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(0,s.default)(e).length};var n,s=(n=r(92017))&&n.__esModule?n:{default:n}},42299:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getLongCenterAlignedTexts",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"keyphraseDistribution",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"wordComplexity",{enumerable:!0,get:function(){return s.default}});var n=a(r(37228)),s=a(r(53201)),i=a(r(53127));function a(e){return e&&e.__esModule?e:{default:e}}},53127:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.maximizeSentenceScores=t.keyphraseDistributionResearcher=t.getDistraction=t.default=t.computeScoresPerSentenceShortTopic=t.computeScoresPerSentenceLongTopic=void 0;var n=r(92819),s=r(36478),i=r(48024),a=d(r(9862)),o=d(r(73481)),l=r(10840),u=d(r(96908)),c=r(24533);function d(e){return e&&e.__esModule?e:{default:e}}const h=function(e,t,r,n){const i=Array(t.length);for(let a=0;a=50?i[a]=9:i[a]=3;return i};t.computeScoresPerSentenceLongTopic=h;const p=function(e,t,r,n){const i=Array(t.length);for(let a=0;a3&&r.push(n);const s=r.length;if(0===s)return t;r.unshift(-1),r.push(t);const i=[];for(let e=1;ev.push(d(e)))));const b=e.getLocale(),S=[A.keyphraseForms];A.synonymsForms.forEach((function(e){S.push(e)}));const I=(0,n.uniq)((0,n.flattenDeep)(S)).sort(((e,t)=>t.length-e.length)),O=function(e,t,r,s,i,a=4,o,l){const u=t.length,c=Array(u);if(s.length>0)for(let n=0;n({sentence:e,score:t}))).filter((e=>e.score>3)).map((e=>e.sentence))}}(T,S,b,r,s,y,v,m),C=O.maximizedSentenceScores,N=g(C);return{sentencesToHighlight:(0,i.markWordsInSentences)(I,O.sentencesWithTopic,b,s),keyphraseDistributionScore:N/T.length*100}};t.keyphraseDistributionResearcher=m,t.default=m},57419:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getResearch("morphology"),n=t.getConfig("functionWords");return{keyphraseLength:r.keyphraseForms.length,functionWords:n}}},82242:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.countKeyphraseInText=p,t.default=f,t.keywordCount=function(e,t){return console.warn("This function is deprecated, use getKeyphraseCount instead."),f(e,t)};var n=r(92819),s=h(r(54241)),i=r(37361),a=h(r(82676)),o=h(r(57329)),l=h(r(23116)),u=r(48024),c=h(r(9862)),d=r(29866);function h(e){return e&&e.__esModule?e:{default:e}}function p(e,t,r,s,i,l){const c={count:0,markings:[]};return e.forEach((e=>{const d=t.map((t=>(0,o.default)(e,t,r,s,i,l)));if(d.every((e=>e.count>0))){const t=d.map((e=>e.count)),r=Math.min(...t),i=(0,n.flattenDeep)(d.map((e=>e.matches)));let o=[];o=s?(0,u.markWordsInASentence)(e,i,s):(0,a.default)(e,i),c.count+=r,c.markings.push(o)}})),c}function f(e,t){const r={count:0,markings:[],keyphraseLength:0};let a=t.getResearch("morphology").keyphraseForms;const o=a.length;if(a=a.map((e=>e.map((e=>(0,i.normalizeSingle)(e))))),0===o)return r;const u=t.getHelper("matchWordCustomHelper"),h=t.getHelper("memoizedTokenizer"),f=t.getHelper("splitIntoTokensCustom"),g=e.getLocale(),m=u?(0,d.filterShortcodesFromHTML)(e.getText(),e._attributes&&e._attributes.shortcodes):e.getText(),_=p(u?(0,c.default)(m,h):(0,s.default)(e),a,g,u,(0,l.default)(e.getKeyword()),f);return r.count=_.count,r.markings=(0,n.flatten)(_.markings),r.keyphraseLength=o,r}},74066:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.keywordCountInSlug=o,t.keywordCountInUrl=function(e,t){return console.warn("This function is deprecated, use keywordCountInSlug instead."),o(e,t)};var n,s=(n=r(84159))&&n.__esModule?n:{default:n},i=r(36478),a=r(92819);function o(e,t){const r=(0,a.cloneDeep)(t);r.addConfig("areHyphensWordBoundaries",!0);const n=r.getResearch("morphology"),o=(0,s.default)(e.getSlug()),l=e.getLocale(),u=(0,i.findTopicFormsInString)(n,o,!1,l,!1);return{keyphraseLength:n.keyphraseForms.length,percentWordMatches:u.percentWordMatches}}t.default=o},72286:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getConfig("functionWords"),i=t.getHelper("matchWordCustomHelper");let l=e.getText();l=(0,a.default)(l),l=(0,o.filterShortcodesFromHTML)(l,e._attributes&&e._attributes.shortcodes),l=(0,s.default)(l);const c=t.getResearch("morphology"),d=e.getLocale(),h={count:0,matches:0,percentReflectingTopic:0},p=(0,n.getSubheadingContentsTopLevel)(l);return 0!==p.length&&(h.count=p.length,h.matches=u(c,p,!0,d,r,i),h.percentReflectingTopic=h.matches/h.count*100),h};var n=r(84285),s=l(r(57719)),i=r(36478),a=l(r(96908)),o=r(29866);function l(e){return e&&e.__esModule?e:{default:e}}const u=function(e,t,r,n,s,a){return t.filter((t=>{const o=(0,i.findTopicFormsInString)(e,t,r,n,a);return 0===s.length?100===o.percentWordMatches:o.percentWordMatches>50})).length}},90497:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=e.getDescription(),n=e.getLocale(),i=t.getResearch("morphology"),a=t.getHelper("matchWordCustomHelper"),l=t.getHelper("memoizedTokenizer");return(0,s.default)(r,l).map((e=>o(e,i,n,a))).reduce(((e,t)=>e+t),0)};var n=i(r(7407)),s=i(r(9862));function i(e){return e&&e.__esModule?e:{default:e}}const a=function(e,t,r){return t.forEach((t=>t.matches.slice(0,r).forEach((t=>{e=e.replace(t,"")})))),e},o=function(e,t,r,s){const i=t.keyphraseForms.map((t=>(0,n.default)(e,t,r,s))),o=Math.min(...i.map((e=>e.count)));return e=a(e,i,o),[o,...t.synonymsForms.map((t=>{const o=t.map((t=>(0,n.default)(e,t,r,s))),l=Math.min(...o.map((e=>e.count)));return e=a(e,i,l),l}))].reduce(((e,t)=>e+t),0)}},96458:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(0,s.default)(e.getDate(),e.getDescription())};var n,s=(n=r(40231))&&n.__esModule?n:{default:n}},7045:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.hasTitle()?e.getTitleWidth():0}},48799:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=(0,n.default)(e.getLocale()),a=t.getHelper("getWordsCustomHelper"),o=t.getHelper("wordsCharacterCount"),l={ar:138,cn:158,de:179,en:228,es:218,fi:161,fr:195,he:187,it:188,nl:202,pl:166,pt:181,ru:184,sl:180,sv:199,tr:166},u=l[r],c={ja:357}[r];let d,h=(0,s.default)(e).count;c?(h=o(a(e.getText())),d=h/c):d=u?h/u:h/(Object.values(l).reduce(((e,t)=>e+t))/Object.keys(l).length);const p=(0,i.default)(e);return Math.ceil(d+.2*p)};var n=a(r(67404)),s=a(r(44518)),i=a(r(52948));function a(e){return e&&e.__esModule?e:{default:e}}},25969:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getHelper("memoizedTokenizer");let a=e.getText();return a=(0,s.default)(a),a=(0,i.filterShortcodesFromHTML)(a,e._attributes&&e._attributes.shortcodes),(0,n.default)(a,r)};var n=a(r(9862)),s=a(r(96908)),i=r(29866);function a(e){return e&&e.__esModule?e:{default:e}}},99074:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=new RegExp("()","igs");let r=e.getText().match(t);return null===r&&(r=[]),r.length}},53201:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=t.getHelper("memoizedTokenizer");let n=e.getText();n=(0,a.default)(n),n=(0,o.filterShortcodesFromHTML)(n,e._attributes&&e._attributes.shortcodes);const l=(0,s.default)(n,r),u=t.getResearch("morphology");let h=l.map((e=>c(e,t,u)));h=h.filter((e=>0!==e.complexWords.length));const p=(0,i.default)(n);return{complexWords:h,percentage:d(h,p)}};var n=r(92819),s=u(r(9862)),i=u(r(1105)),a=u(r(96908)),o=r(29866),l=r(36478);function u(e){return e&&e.__esModule?e:{default:e}}const c=function(e,t,r){const s=t.getConfig("language"),a=t.getHelper("checkIfWordIsComplex"),o=t.getConfig("functionWords"),u=t.getConfig("wordComplexity"),c=t.getHelper("checkIfWordIsFunction"),d=(0,n.get)(t.getData("morphology"),s,!1);let h=(0,i.default)(e);const p=t.getHelper("matchWordCustomHelper"),f=(0,l.findTopicFormsInString)(r,e,!1,t.paper.getLocale(),p);h=h.filter((e=>!f.matches.includes(e))),h=h.filter((e=>!(c?c(e):o.includes(e))));const g={complexWords:[],sentence:e};return d?(h.forEach((e=>{a(u,e,d)&&g.complexWords.push(e)})),g):g},d=function(e,t){return+((0,n.flatMap)(e,(e=>e.complexWords)).length/t.length*100).toFixed(2)}},44518:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t=e.getText();return t=(0,s.default)(t),t=(0,i.filterShortcodesFromHTML)(t,e._attributes&&e._attributes.shortcodes),{text:t,count:(0,n.default)(t),unit:"word"}};var n=a(r(33870)),s=a(r(96908)),i=r(29866);function a(e){return e&&e.__esModule?e:{default:e}}},83937:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class r{constructor(e,t){this._clauseText=e,this._auxiliaries=t,this._isPassive=!1,this._participles=[]}getClauseText(){return this._clauseText}isPassive(){return this._isPassive}getAuxiliaries(){return this._auxiliaries}setPassive(e){this._isPassive=e}setParticiples(e){this._participles=e}getParticiples(){return this._participles}serialize(){return{_parseClass:"Clause",clauseText:this._clauseText,auxiliaries:this._auxiliaries,isPassive:this._isPassive,participles:this._participles}}parse(e){const t=new r(e.clauseText,e.auxiliaries);return t.setPassive(e.isPassive),t}}t.default=r},4446:(e,t)=>{"use strict";function r(e,t,r){this._word=e,this._stem=t||e,this._occurrences=r||0}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,r.prototype.setWord=function(e){this._word=e},r.prototype.getWord=function(){return this._word},r.prototype.getStem=function(){return this._stem},r.prototype.setOccurrences=function(e){this._occurrences=e},r.prototype.getOccurrences=function(){return this._occurrences},r.prototype.serialize=function(){return{_parseClass:"ProminentWord",word:this._word,stem:this._stem,occurrences:this._occurrences}},r.parse=function(e){return new r(e.word,e.stem,e.occurrences)},t.default=r},18812:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class r{constructor(e){this._sentenceText=e||"",this._isPassive=!1,this._clauses=[]}getSentenceText(){return this._sentenceText}isPassive(){return this._isPassive}setPassive(e){this._isPassive=e}getClauses(){return this._clauses}setClauses(e){this._clauses=e,this.setSentencePassiveness()}setSentencePassiveness(){const e=this.getClauses().filter((e=>!0===e.isPassive()));this.setPassive(e.length>0)}serialize(){return{_parseClass:"Sentence",sentenceText:this._sentenceText,isPassive:this._isPassive,clauses:this._clauses}}parse(e){const t=new r(e.sentenceText);return t.setClauses(e.clauses),t.setPassive(e.isPassive),t}}t.default=r},62390:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"Clause",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"ProminentWord",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"Sentence",{enumerable:!0,get:function(){return i.default}});var n=a(r(83937)),s=a(r(4446)),i=a(r(18812));function a(e){return e&&e.__esModule?e:{default:e}}},15010:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return""+e+""}},5262:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=(0,n.stripWordBoundariesStart)(e);let r="",i="";if(t!==e){const n=e.search((0,s.escapeRegExp)(t));r=e.substring(0,n)}const a=(0,n.stripWordBoundariesEnd)(t);if(a!==t){const e=t.search((0,s.escapeRegExp)(a))+a.length;i=t.substring(e)}return r+""+a+""+i};var n=r(52731),s=r(92819)},84476:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addMark",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"removeMarks",{enumerable:!0,get:function(){return n.default}});var n=i(r(78970)),s=i(r(15010));function i(e){return e&&e.__esModule?e:{default:e}}},52505:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819);t.default=function(e){return e&&(0===e.length||e[0].hasPosition())?e:(0,n.uniqBy)(e,(function(e){return e.getOriginal()}))}},78970:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.replace(new RegExp("]*>","g"),"").replace(new RegExp("","g"),"")}},87908:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){let h=e.getText();h=h.replace(d.htmlEntitiesRegex,"#$1");let p=(0,s.default)((0,n.parseFragment)(h,{sourceCodeLocationInfo:!0}));return p.childNodes&&p.childNodes.length>0&&(0,u.default)(e,p),p=(0,l.filterBeforeTokenizing)(p),p=(0,i.default)(p,t),r&&(0,c.default)(p,r),(0,a.default)(p,o.default)};var n=r(37015),s=h(r(70734)),i=h(r(63596)),a=h(r(46705)),o=h(r(67929)),l=r(12045),u=h(r(85990)),c=h(r(24533)),d=r(33888);function h(e){return e&&e.__esModule?e:{default:e}}},7104:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"build",{enumerable:!0,get:function(){return s.default}});var n,s=(n=r(87908))&&n.__esModule?n:{default:n}},70734:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){if("#text"===t.nodeName)return new o.Text(t);let r=[],l=!1;(0,a.isEmpty)(t.childNodes)||(r=t.childNodes.map(e),function(e){return!(u(e)||(0,i.default)(e)||c(e))}(t.nodeName)&&(r=(0,n.default)(r,t.sourceCodeLocation)),function(e,t){return u(e)&&t.some(((e,t,r)=>{const n=r.length-1!==t&&r[t+1];return"br"===e.name&&n&&"br"===n.name}))}(t.nodeName,r)&&(l=!0,r=(0,n.default)(r,t.sourceCodeLocation)));const d=(0,s.default)(t.attrs);if(u(t.nodeName))return new o.Paragraph(d,r,t.sourceCodeLocation,!1,l);if(c(t.nodeName)){const e=parseInt(t.nodeName[1],10);return new o.Heading(e,d,r,t.sourceCodeLocation)}return new o.Node(t.nodeName,d,r,t.sourceCodeLocation)};var n=l(r(38884)),s=l(r(54637)),i=l(r(33319)),a=r(92819),o=r(67330);function l(e){return e&&e.__esModule?e:{default:e}}function u(e){return"p"===e}function c(e){return["h1","h2","h3","h4","h5","h6"].includes(e)}},54637:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(90666))&&n.__esModule?n:{default:n};t.default=function(e){if(!e)return{};const t={};return e.forEach((({name:e,value:r})=>{"class"===e&&(r=(0,s.default)(r)),t[e]=r})),t}},67929:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.canBeChildOfParagraph=void 0;var n=r(59603);t.canBeChildOfParagraph=["code","kbd","math","q","samp","script","var","#comment","cite","form","map","noscript","output"];const s=[(0,n.elementHasClass)("yoast-table-of-contents"),(0,n.elementHasClass)("yoast-reading-time__wrapper"),(0,n.elementHasID)("breadcrumbs"),(0,n.elementHasClass)("elementor-button-wrapper"),(0,n.elementHasClass)("elementor-divider"),(0,n.elementHasClass)("elementor-spacer"),(0,n.elementHasClass)("elementor-custom-embed"),(0,n.elementHasClass)("elementor-icon-wrapper"),(0,n.elementHasClass)("elementor-icon-box-wrapper"),(0,n.elementHasClass)("elementor-counter"),(0,n.elementHasClass)("elementor-progress-wrapper"),(0,n.elementHasClass)("elementor-title"),(0,n.elementHasClass)("elementor-alert"),(0,n.elementHasClass)("elementor-soundcloud-wrapper"),(0,n.elementHasClass)("elementor-shortcode"),(0,n.elementHasClass)("elementor-menu-anchor"),(0,n.elementHasClass)("e-rating"),(0,n.elementHasName)("base"),(0,n.elementHasName)("blockquote"),(0,n.elementHasName)("canvas"),(0,n.elementHasName)("code"),(0,n.elementHasName)("head"),(0,n.elementHasName)("iframe"),(0,n.elementHasName)("input"),(0,n.elementHasName)("kbd"),(0,n.elementHasName)("link"),(0,n.elementHasName)("math"),(0,n.elementHasName)("meta"),(0,n.elementHasName)("meter"),(0,n.elementHasName)("noscript"),(0,n.elementHasName)("object"),(0,n.elementHasName)("portal"),(0,n.elementHasName)("pre"),(0,n.elementHasName)("progress"),(0,n.elementHasName)("q"),(0,n.elementHasName)("samp"),(0,n.elementHasName)("script"),(0,n.elementHasName)("slot"),(0,n.elementHasName)("style"),(0,n.elementHasName)("svg"),(0,n.elementHasName)("template"),(0,n.elementHasName)("textarea"),(0,n.elementHasName)("title"),(0,n.elementHasName)("var"),(0,n.elementHasName)("#comment"),(0,n.elementHasName)("cite"),(0,n.elementHasName)("form"),(0,n.elementHasName)("map"),(0,n.elementHasName)("noscript"),(0,n.elementHasName)("output")];t.default=s},38884:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=o(r(33319)),s=r(67330),i=r(92819),a=o(r(42036));function o(e){return e&&e.__esModule?e:{default:e}}function l(e){return e&&e.childNodes.length>0}const u=e=>{const[t]=e.childNodes.slice(0),[r]=e.childNodes.slice(-1);if((t.sourceCodeRange||t.sourceCodeLocation)&&(r.sourceCodeRange||r.sourceCodeLocation)){const n=t.sourceCodeRange?t.sourceCodeRange.startOffset:t.sourceCodeLocation.startOffset,s=r.sourceCodeRange?r.sourceCodeRange.endOffset:r.sourceCodeLocation.endOffset;e.sourceCodeLocation=new a.default({startOffset:n,endOffset:s})}};t.default=function(e,t={}){const r=[];let o={};if((0,i.isEmpty)(t)){const t=e[0],r=e[e.length-1];t&&r&&t.sourceCodeLocation&&r.sourceCodeLocation&&(o=new a.default({startOffset:t.sourceCodeLocation.startOffset,endOffset:r.sourceCodeLocation.endOffset}))}else o=new a.default({startOffset:t.startTag?t.startTag.endOffset:t.startOffset,endOffset:t.endTag?t.endTag.startOffset:t.endOffset});let c=s.Paragraph.createImplicit({},[],o);return e.forEach(((e,t,i)=>{const a=0!==t&&i[t-1],d=i.length-1!==t&&i[t+1];!(0,n.default)(e.name)||function(e){return"#text"===e.name&&e.value&&e.value.match(/^[\n\s]+$/g)}(e)||((e,t,r)=>{const n=t&&"br"===t.name,s=r&&"br"===r.name;return"br"===e.name&&(n||s)})(e,a,d)?(l(c)&&(u(c),e.sourceCodeLocation&&(o.startOffset=e.sourceCodeLocation.endOffset),r.push(c),c=s.Paragraph.createImplicit({},[],o)),r.push(e)):c.childNodes.push(e)})),l(c)&&(u(c),r.push(c)),r}},12045:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filterBeforeTokenizing=function e(t){return s.canBeChildOfParagraph.includes(t.name)&&(t.childNodes=[]),(0,n.isEmpty)(t.childNodes)||t.childNodes.map(e),t};var n=r(92819),s=r(67929)},59603:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.elementHasClass=function(e){return t=>!!t.attributes.class&&t.attributes.class.has(e)},t.elementHasID=function(e){return t=>t.attributes.id===e},t.elementHasName=function(e){return t=>t.name===e}},46705:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t,r){if(!(function(e,t){return"#text"!==e.name&&t.some((t=>t(e)))}(t,r)||t.childNodes&&(t.childNodes=t.childNodes.filter((t=>e(t,r))),0===t.childNodes.length&&t instanceof n.Paragraph&&t.isImplicit)))return t};var n=r(67330)},35261:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r=-1){if(0===t.length||!e.sourceCodeLocation)return t;let n,a=r>=0?r:i(e),o=[];if(e.findAll){const t=e.findAll((e=>e.sourceCodeLocation),!0);t.length>0&&(o=function(e){const t=[];return e.forEach((e=>{if(s.canBeChildOfParagraph.includes(e.name))t.push(e.sourceCodeLocation);else{if(e.sourceCodeLocation.startTag){const r={startOffset:e.sourceCodeLocation.startTag.startOffset,endOffset:e.sourceCodeLocation.startTag.endOffset};"br"===e.name&&(r.endOffset=r.endOffset-1),t.push(r)}e.sourceCodeLocation.endTag&&t.push(e.sourceCodeLocation.endTag)}})),t.sort(((e,t)=>e.startOffset-t.startOffset)),t}(t))}return t.forEach((e=>{n=a+e.text.length,o.length>0&&(n=function(e,t,r){return e.forEach((e=>{e.startOffset>=t&&e.startOffset{e.startOffset===t&&(t+=e.endOffset-e.startOffset)})),t}(o,a)),e.sourceCodeRange={startOffset:a,endOffset:n},a=n})),t};var n=r(67330),s=r(67929);const i=e=>e instanceof n.Paragraph&&e.isImplicit?e.sourceCodeLocation.startOffset:e.sourceCodeLocation.startTag.endOffset},90666:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return new Set(e.split(" "))}},33319:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const r=["b","big","i","small","tt","abbr","acronym","cite","code","dfn","em","kbd","strong","samp","time","var","a","bdo","br","img","map","object","q","script","span","sub","sup","button","input","label","select","textarea"];t.default=function(e){return r.includes(e)||"#text"===e}},85990:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=e._attributes.wpBlocks||[];s.lastIndex=0,a(r,e.getText());o(t,i(e),void 0)},t.updateBlocksOffset=a;var n=r(92819);const s=/)[^])*)\5|[^]*?)}\s+)?(\/)?-->/g,i=e=>{const t=e._attributes.wpBlocks,r=[];return t&&t.length>0?(t.forEach((e=>{if(e.innerBlocks.length>0){const t=e.innerBlocks;r.push(e,...t)}else r.push(e)})),r):[]};function a(e,t){0!==e.length&&e.forEach(((r,n)=>{const i=s.exec(t);if("core/freeform"===r.name){const t=e[n-1];if(t){const e=t.endOffset+2;r.startOffset=e,r.endOffset=e+r.blockLength,r.contentOffset=e}else r.startOffset=0,r.endOffset=0+r.blockLength,r.contentOffset=0}else{if(null===i)return;const[e]=i,t=i.index,n=e.length;r.startOffset=t,r.endOffset=t+r.blockLength,r.contentOffset=t+n+1}r.innerBlocks&&r.innerBlocks.length>0&&a(r.innerBlocks,t)}))}function o(e,t,r){if(!e)return;let s=r;if(e.sourceCodeLocation&&!(0,n.isUndefined)(e.sourceCodeLocation.startOffset)){const r=t.find((t=>t.contentOffset===e.sourceCodeLocation.startOffset));r&&(s=r.clientId)}s&&(e.clientId=s),(e.childNodes||[]).forEach((e=>{e.attributes&&e.attributes.id&&e.childNodes&&e.childNodes.length>3&&(e.childNodes[0].attributeId=e.attributes.id,e.childNodes[0].isFirstSection=!0,e.childNodes[2].attributeId=e.attributes.id,e.childNodes[2].isFirstSection=!1),o(e,t,s)}))}},63596:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(67330),i=(n=r(35261))&&n.__esModule?n:{default:n},a=r(33888);t.default=function e(t,r){return(t instanceof s.Paragraph&&"p-overarching"!==t.name||t instanceof s.Heading)&&(t.sentences=function(e,t){let r=t.splitIntoSentences(e.innerText());return r=(0,i.default)(e,r),r.map((r=>(r=function(e,t,r){return t.tokens=r.splitIntoTokens(t),t.tokens=(0,i.default)(e,t.tokens,t.sourceCodeRange.startOffset),t}(e,r,t),a.hashedHtmlEntities.forEach(((e,t)=>{const n=new RegExp(t,"g");r.text=r.text.replace(n,e),r.tokens.map((t=>(t.text=t.text.replace(n,e),t)))})),r)))}(t,r)),t.childNodes&&(t.childNodes=t.childNodes.map((t=>e(t,r)))),t}},49781:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=a(r(99286)),s=a(r(82615)),i=a(r(7337));function a(e){return e&&e.__esModule?e:{default:e}}const o=/^\s+$/;t.default=class{constructor(e){this.researcher=e}splitIntoSentences(e){const t=this.researcher.getHelper("memoizedTokenizer")(e,!1);return o.test(t[t.length-1])&&t.pop(),t.map((function(e){return new n.default(e)}))}splitIntoTokens(e){const t=e.text,r=this.researcher.getHelper("splitIntoTokensCustom");return r?r(t).map((e=>new s.default(e))):(0,i.default)(t).map((e=>new s.default(e)))}}},71927:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(81056))&&n.__esModule?n:{default:n};class i extends s.default{constructor(e,t={},r=[],n={}){super(`h${e}`,t,r,n),this.level=e}}t.default=i},81056:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(93078),i=(n=r(42036))&&n.__esModule?n:{default:n},a=r(92819);t.default=class{constructor(e,t={},r=[],n={}){this.name=e,this.attributes=t,this.childNodes=r,(0,a.isEmpty)(n)||(this.sourceCodeLocation=new i.default(n))}findAll(e,t=!1){return(0,s.findAllInTree)(this,e,t)}innerText(){return(0,s.innerText)(this)}}},66741:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(81056))&&n.__esModule?n:{default:n};class i extends s.default{constructor(e={},t=[],r={},n=!1,s=!1){super(s?"p-overarching":"p",e,t,r),this.isImplicit=n}static createImplicit(e={},t=[],r={}){return new i(e,t,r,!0)}}t.default=i},99286:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor(e){this.text=e,this.tokens=[],this.sourceCodeRange={}}}},42036:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor(e){e.startTag&&(this.startTag={startOffset:e.startTag.startOffset,endOffset:e.startTag.endOffset}),e.endTag&&(this.endTag={startOffset:e.endTag.startOffset,endOffset:e.endTag.endOffset}),this.startOffset=e.startOffset,this.endOffset=e.endOffset}}},76342:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(42036))&&n.__esModule?n:{default:n};t.default=class{constructor(e){this.name="#text",this.value=e.value,this.sourceCodeRange=new s.default({startOffset:e.sourceCodeLocation.startOffset,endOffset:e.sourceCodeLocation.endOffset})}}},82615:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(58677);t.default=class{constructor(e,t={}){this.text=(0,n.normalizeSingle)(e),this.sourceCodeRange=t}}},67330:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"Heading",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"Node",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"Paragraph",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"Text",{enumerable:!0,get:function(){return a.default}});var n=o(r(81056)),s=o(r(71927)),i=o(r(66741)),a=o(r(76342));function o(e){return e&&e.__esModule?e:{default:e}}},45613:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t,r,n=!1){const s=[];return t.childNodes?(t.childNodes.forEach((t=>{r(t)?(s.push(t),n&&s.push(...e(t,r,n))):s.push(...e(t,r,n))})),s):s}},93078:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"findAllInTree",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"innerText",{enumerable:!0,get:function(){return s.default}});var n=i(r(45613)),s=i(r(41225));function i(e){return e&&e.__esModule?e:{default:e}}},41225:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){let r="";return(0,n.isEmpty)(t.childNodes)||t.childNodes.forEach((t=>{"#text"===t.name?r+=t.value:"br"===t.name?r+="\n":r+=e(t)})),r};var n=r(92819)},20019:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(92819),i=(n=r(62887))&&n.__esModule?n:{default:n},a=function(e){this.app=e,this.loaded=!1,this.preloadThreshold=3e3,this.plugins={},this.modifications={},this.customTests=[],setTimeout(this._pollLoadingPlugins.bind(this),1500)};a.prototype._registerPlugin=function(e,t){return"string"!=typeof e?(console.error("Failed to register plugin. Expected parameter `pluginName` to be a string."),!1):(0,s.isUndefined)(t)||"object"==typeof t?!1===this._validateUniqueness(e)?(console.error("Failed to register plugin. Plugin with name "+e+" already exists"),!1):(this.plugins[e]=t,!0):(console.error("Failed to register plugin "+e+". Expected parameters `options` to be a object."),!1)},a.prototype._ready=function(e){return"string"!=typeof e?(console.error("Failed to modify status for plugin "+e+". Expected parameter `pluginName` to be a string."),!1):(0,s.isUndefined)(this.plugins[e])?(console.error("Failed to modify status for plugin "+e+". The plugin was not properly registered."),!1):(this.plugins[e].status="ready",!0)},a.prototype._reloaded=function(e){return"string"!=typeof e?(console.error("Failed to reload Content Analysis for "+e+". Expected parameter `pluginName` to be a string."),!1):(0,s.isUndefined)(this.plugins[e])?(console.error("Failed to reload Content Analysis for plugin "+e+". The plugin was not properly registered."),!1):(this.app.refresh(),!0)},a.prototype._registerModification=function(e,t,r,n){if("string"!=typeof e)return console.error("Failed to register modification for plugin "+r+". Expected parameter `modification` to be a string."),!1;if("function"!=typeof t)return console.error("Failed to register modification for plugin "+r+". Expected parameter `callable` to be a function."),!1;if("string"!=typeof r)return console.error("Failed to register modification for plugin "+r+". Expected parameter `pluginName` to be a string."),!1;if(!1===this._validateOrigin(r))return console.error("Failed to register modification for plugin "+r+". The integration has not finished loading yet."),!1;var i={callable:t,origin:r,priority:"number"==typeof n?n:10};return(0,s.isUndefined)(this.modifications[e])&&(this.modifications[e]=[]),this.modifications[e].push(i),!0},a.prototype._registerTest=function(){console.error("This function is deprecated, please use _registerAssessment")},a.prototype._registerAssessment=function(e,t,r,n){if(!(0,s.isString)(t))throw new i.default("Failed to register test for plugin "+n+". Expected parameter `name` to be a string.");if(!(0,s.isObject)(r))throw new i.default("Failed to register assessment for plugin "+n+". Expected parameter `assessment` to be a function.");if(!(0,s.isString)(n))throw new i.default("Failed to register assessment for plugin "+n+". Expected parameter `pluginName` to be a string.");return t=n+"-"+t,e.addAssessment(t,r),!0},a.prototype._pollLoadingPlugins=function(e){e=(0,s.isUndefined)(e)?0:e,!0===this._allReady()?(this.loaded=!0,this.app.pluginsLoaded()):e>=this.preloadThreshold?this._pollTimeExceeded():(e+=50,setTimeout(this._pollLoadingPlugins.bind(this,e),50))},a.prototype._allReady=function(){return(0,s.reduce)(this.plugins,(function(e,t){return e&&"ready"===t.status}),!0)},a.prototype._pollTimeExceeded=function(){(0,s.forEach)(this.plugins,(function(e,t){(0,s.isUndefined)(e.options)||"ready"===e.options.status||(console.error("Error: Plugin "+t+". did not finish loading in time."),delete this.plugins[t])})),this.loaded=!0,this.app.pluginsLoaded()},a.prototype._applyModifications=function(e,t,r){var n=this.modifications[e];return n instanceof Array&&n.length>0&&((n=this._stripIllegalModifications(n)).sort((function(e,t){return e.priority-t.priority})),(0,s.forEach)(n,(function(n){var s=(0,n.callable)(t,r);typeof s==typeof t?t=s:console.error("Modification with name "+e+" performed by plugin with name "+n.origin+" was ignored because the data that was returned by it was of a different type than the data we had passed it.")}))),t},a.prototype._addPluginTests=function(e){this.customTests.map((function(t){this._addPluginTest(e,t)}),this)},a.prototype._addPluginTest=function(e,t){e.addAnalysis({name:t.name,callable:t.analysis}),e.analyzeScorer.addScoring({name:t.name,scoring:t.scoring})},a.prototype._stripIllegalModifications=function(e){return(0,s.forEach)(e,function(t,r){!1===this._validateOrigin(t.origin)&&delete e[r]}.bind(this)),e},a.prototype._validateOrigin=function(e){return"ready"===this.plugins[e].status},a.prototype._validateUniqueness=function(e){return!!(0,s.isUndefined)(this.plugins[e])},t.default=a},9017:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(58677),s=r(29866);t.default=class{getResult(e,t){throw"The method getResult is not implemented"}isApplicable(e,t){return!0}hasEnoughContentForAssessment(e,t=50){let r=e.getText();return r=(0,s.removeHtmlBlocks)(r),r=(0,s.filterShortcodesFromHTML)(r,e._attributes&&e._attributes.shortcodes),(0,n.sanitizeString)(r).length>=t}}},96682:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=d(r(73054)),a=d(r(41054)),o=d(r(15010)),l=r(33140),u=r(58677),c=r(88626);function d(e){return e&&e.__esModule?e:{default:e}}t.default=class{constructor({identifier:e,nonInclusivePhrases:t,inclusiveAlternatives:r,score:n,feedbackFormat:i,learnMoreUrl:a,rule:o,caseSensitive:u,category:d}){this.identifier=e,this.nonInclusivePhrases=t,this.inclusiveAlternatives=r,(0,s.isString)(this.inclusiveAlternatives)&&(this.inclusiveAlternatives=[this.inclusiveAlternatives]),this.score=n,this.feedbackFormat=i,this.learnMoreUrl=(0,l.createAnchorOpeningTag)(a),this.rule=o||c.includesConsecutiveWords,this.caseSensitive=u||!1,this.category=d}isApplicable(e,t){const r=t.getResearch("sentences"),n=e.getTextTitle();return r.push(n),this.foundPhrases=[],r.forEach((e=>{let t=(0,u.getWords)(e,"\\s",!1);this.caseSensitive||(t=t.map((e=>e.toLocaleLowerCase())));const r=this.nonInclusivePhrases.find((e=>this.rule(t,(0,u.getWords)(e,"\\s",!1)).length>=1));r&&this.foundPhrases.push({sentence:e,phrase:r})})),this.foundPhrases.length>=1}getResult(){const e=(0,n.sprintf)("%1$sLearn more.%2$s",this.learnMoreUrl,""),t=(0,n.sprintf)(this.feedbackFormat,this.foundPhrases[0].phrase,...this.inclusiveAlternatives),r=new i.default({score:this.score,text:`${t} ${e}`});return r.setIdentifier(this.identifier),r.setHasMarks(!0),r}getMarks(){return this.foundPhrases?this.foundPhrases.map((e=>new a.default({original:e.sentence,marked:(0,o.default)(e.sentence)}))):[]}}},46176:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(6653),i=r(17864),a=r(64948),o=r(88626),l=r(28045),u=(n=r(77965))&&n.__esModule?n:{default:n};const c="Or, if possible, be specific about the group you are referring to (e.g. %3$s).",d=[{identifier:"seniorCitizen",nonInclusivePhrases:["senior citizen"],inclusiveAlternatives:["older person, older citizen","person older than 70"],score:l.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,c].join(" ")},{identifier:"seniorCitizens",nonInclusivePhrases:["senior citizens"],inclusiveAlternatives:["older people, older citizens","people older than 70"],score:l.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,c].join(" ")},{identifier:"agingDependants",nonInclusivePhrases:["aging dependants"],inclusiveAlternatives:["older people","people older than 70"],score:l.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,c].join(" ")},{identifier:"elderly",nonInclusivePhrases:["elderly"],inclusiveAlternatives:["older people","people older than 70"],score:l.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,c].join(" ")},{identifier:"senile",nonInclusivePhrases:["senile"],inclusiveAlternatives:"",score:l.SCORES.NON_INCLUSIVE,feedbackFormat:[s.harmfulNonInclusive,"Consider using an alternative, such as a specific characteristic or experience if it is known (e.g. has Alzheimer's)."].join(" ")},{identifier:"senility",nonInclusivePhrases:["senility"],inclusiveAlternatives:"dementia",score:l.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"seniors",nonInclusivePhrases:["seniors"],inclusiveAlternatives:["older people","people older than 70"],score:l.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,c].join(" "),rule:(e,t)=>(0,o.includesConsecutiveWords)(e,t).filter((0,i.isNotPrecededByException)(e,["high school","college","graduating","juniors and"])).filter((0,a.isNotFollowedByException)(e,t,["in high school","in college","who are graduating"]))},{identifier:"theAged",nonInclusivePhrases:["the aged"],inclusiveAlternatives:["older people","people older than 70"],score:l.SCORES.NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmful,c].join(" "),rule:(e,t)=>(0,o.includesConsecutiveWords)(e,t).filter((0,u.default)(e,t))}];d.forEach((e=>{e.category="age",e.learnMoreUrl="https://yoa.st/inclusive-language-age"})),t.default=d},9214:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(6653),i=r(28045),a=r(88626),o=(n=r(77965))&&n.__esModule?n:{default:n};const l=[{identifier:"albinos",nonInclusivePhrases:["albinos"],inclusiveAlternatives:"people with albinism, albino people",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"anAlbino",nonInclusivePhrases:["an albino"],inclusiveAlternatives:"person with albinism, albino person",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless,rule:(e,t)=>(0,a.includesConsecutiveWords)(e,t).filter((0,o.default)(e,t))},{identifier:"obese",nonInclusivePhrases:["obese","overweight"],inclusiveAlternatives:"has a higher weight, higher-weight person, person in higher weight body, heavier person",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,s.preferredDescriptorIfKnown].join(" ")},{identifier:"obesitySingular",nonInclusivePhrases:["person with obesity","fat person"],inclusiveAlternatives:"person who has a higher weight, higher-weight person, person in higher weight body, heavier person",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,s.preferredDescriptorIfKnown].join(" ")},{identifier:"obesityPlural",nonInclusivePhrases:["people with obesity","fat people"],inclusiveAlternatives:"people who have a higher weight, higher-weight people, people in higher weight bodies, heavier people",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless].join(" ")},{identifier:"verticallyChallenged",nonInclusivePhrases:["vertically challenged"],inclusiveAlternatives:"little person, has short stature, someone with dwarfism",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"midget",nonInclusivePhrases:["midget"],inclusiveAlternatives:"little person, has short stature, someone with dwarfism",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"midgets",nonInclusivePhrases:["midgets"],inclusiveAlternatives:"little people, have short stature, people with dwarfism",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"harelip",nonInclusivePhrases:["harelip"],inclusiveAlternatives:"cleft lip, cleft palate",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful}];l.forEach((e=>{e.category="appearance",e.learnMoreUrl="https://yoa.st/inclusive-language-appearance"})),t.default=l},20117:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(28045),s=r(88626),i=r(64948),a=r(6653);const o="Be careful when using %1$s as it is potentially harmful. Consider using an alternative, such as %2$s instead, unless you are referring to the culture in which this term originated.",l=[{identifier:"firstWorld",nonInclusivePhrases:["First World"],inclusiveAlternatives:"the specific name for the region or country",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful,caseSensitive:!0,rule:(e,t)=>(0,s.includesConsecutiveWords)(e,t).filter((0,i.isNotFollowedByException)(e,t,["War","war","Assembly","assembly"]))},{identifier:"thirdWorld",nonInclusivePhrases:["Third World"],inclusiveAlternatives:"the specific name for the region or country",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful,caseSensitive:!0,rule:(e,t)=>(0,s.includesConsecutiveWords)(e,t).filter((0,i.isNotFollowedByException)(e,t,["War","war","Quarterly","quarterly","country"]))},{identifier:"tribe",nonInclusivePhrases:["tribe"],inclusiveAlternatives:"group, cohort, crew, league, guild, team, union",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:o.slice(0,-42)+"a culture that uses this term."},{identifier:"tribes",nonInclusivePhrases:["tribes"],inclusiveAlternatives:"groups, cohorts, crews, leagues, guilds, teams, unions",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:o.slice(0,-42)+"a culture that uses this term."},{identifier:"exotic",nonInclusivePhrases:["exotic"],inclusiveAlternatives:"unfamiliar, foreign, peculiar, fascinating, alluring, bizarre, non-native, introduced",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:a.harmfulPotentiallyNonInclusive+" Unless you are referring to animals, consider using an alternative, such as %2$s.",rule:(e,t)=>(0,s.includesConsecutiveWords)(e,t).filter((0,i.isNotFollowedByException)(e,t,["longhair","longhairs","shorthair","shorthairs"]))},{identifier:"sherpa",nonInclusivePhrases:["sherpa"],inclusiveAlternatives:"commander, coach, mastermind, coach, mentor",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:o},{identifier:"guru",nonInclusivePhrases:["guru"],inclusiveAlternatives:"mentor, doyen, coach, mastermind, virtuoso, expert",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:o},{identifier:"gurus",nonInclusivePhrases:["gurus"],inclusiveAlternatives:"mentors, doyens, coaches, masterminds, virtuosos, experts",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:o},{identifier:"nonWhite",nonInclusivePhrases:["non-white"],inclusiveAlternatives:"people of color, POC, BIPOC or specifying the racial groups mentioned",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"oriental",nonInclusivePhrases:["oriental"],inclusiveAlternatives:"Asian. When possible, be more specific (e.g. East Asian)",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmfulUnlessAnimalsObjects},{identifier:"asianAmerican",nonInclusivePhrases:["Asian-American"],inclusiveAlternatives:"Asian American",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful,caseSensitive:!0},{identifier:"asianAmericans",nonInclusivePhrases:["Asian-Americans"],inclusiveAlternatives:"Asian Americans",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful,caseSensitive:!0},{identifier:"africanAmerican",nonInclusivePhrases:["African-American"],inclusiveAlternatives:"African American, Black, American of African descent",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful,caseSensitive:!0},{identifier:"africanAmericans",nonInclusivePhrases:["African-Americans"],inclusiveAlternatives:"African Americans, Black, Americans of African descent",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful,caseSensitive:!0},{identifier:"whiteRace",nonInclusivePhrases:["the White race"],inclusiveAlternatives:"",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.harmfulNonInclusive,caseSensitive:!0},{identifier:"whitelist",nonInclusivePhrases:["whitelist"],inclusiveAlternatives:"allowlist",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"whitelists",nonInclusivePhrases:["whitelists"],inclusiveAlternatives:"allowlists",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"whitelisting",nonInclusivePhrases:["whitelisting"],inclusiveAlternatives:"allowlisting",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"whitelisted",nonInclusivePhrases:["whitelisted"],inclusiveAlternatives:"allowlisted",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"blacklist",nonInclusivePhrases:["blacklist"],inclusiveAlternatives:"blocklist, denylist, faillist, redlist",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"blacklists",nonInclusivePhrases:["blacklists"],inclusiveAlternatives:"blocklists, denylists, faillists, redlists",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"blacklisting",nonInclusivePhrases:["blacklisting"],inclusiveAlternatives:"blocklisting, denylisting, faillisting, redlisting",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"blacklisted",nonInclusivePhrases:["blacklisted"],inclusiveAlternatives:"blocklisted, denylisted, faillisted, redlisted",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"gyp",nonInclusivePhrases:["gyp"],inclusiveAlternatives:"fraud, cheat, swindle, rip-off",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"gyps",nonInclusivePhrases:["gyps"],inclusiveAlternatives:"frauds, cheats, swindles, rips off, rip-offs",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"gypped",nonInclusivePhrases:["gypped"],inclusiveAlternatives:"cheated, swindled, ripped off",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"gypping",nonInclusivePhrases:["gypping"],inclusiveAlternatives:"cheating, swindling, ripping off",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"gypsy",nonInclusivePhrases:["gypsy","gipsy"],inclusiveAlternatives:["Rom, Roma person, Romani, Romani person","traveler, wanderer, free-spirited"],score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[a.potentiallyHarmfulUnless,"If you are referring to a lifestyle rather than the ethnic group or their music, consider using an alternative such as %3$s."].join(" ")},{identifier:"gypsies",nonInclusivePhrases:["gypsies","gipsies"],inclusiveAlternatives:["Roma, Romani, Romani people","travelers, wanderers, free-spirited"],score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[a.potentiallyHarmfulUnless,"If you are referring to a lifestyle rather than the ethnic group or their music, consider using an alternative such as %3$s."].join(" ")},{identifier:"eskimo",nonInclusivePhrases:["eskimo","eskimos"],inclusiveAlternatives:"the specific name of the Indigenous community (for example, Inuit)",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmfulUnless},{identifier:"coloredPerson",nonInclusivePhrases:["colored person"],inclusiveAlternatives:"person of color, POC, BIPOC",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"coloredPeople",nonInclusivePhrases:["colored people"],inclusiveAlternatives:"people of color, POC, BIPOC",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"americanIndians",nonInclusivePhrases:["American Indian","American Indians"],inclusiveAlternatives:"Native American(s), Indigenous peoples of America",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmfulUnless,caseSensitive:!0},{identifier:"mulatto",nonInclusivePhrases:["mulatto","mulattos","mulattoes"],inclusiveAlternatives:"mixed, biracial, multiracial",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"savage",nonInclusivePhrases:["savage"],inclusiveAlternatives:"severe, dreadful, untamed, brutal, fearless, fierce, brilliant, amazing",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"civilized",nonInclusivePhrases:["civilized"],inclusiveAlternatives:"proper, well-mannered, enlightened, respectful",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"primitive",nonInclusivePhrases:["primitive"],inclusiveAlternatives:"early, rudimentary",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"powWow",nonInclusivePhrases:["pow-wow"],inclusiveAlternatives:"chat, brief conversation, brainstorm, huddle",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:o},{identifier:"lowManOnTheTotemPole",nonInclusivePhrases:["low man on the totem pole"],inclusiveAlternatives:"person of lower rank, junior-level",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"spiritAnimal",nonInclusivePhrases:["spirit animal"],inclusiveAlternatives:"inspiration, hero, icon, idol",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:o},{identifier:"firstWorldCountries",nonInclusivePhrases:["first world countries"],inclusiveAlternatives:"the specific name for the regions or countries",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"firstWorldHyphen",nonInclusivePhrases:["first-world"],inclusiveAlternatives:"the specific name for the region or country",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"third-worldCountry",nonInclusivePhrases:["third-world country"],inclusiveAlternatives:"low-income country, developing country",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"third-worldCountry",nonInclusivePhrases:["third world country"],inclusiveAlternatives:"low-income country, developing country",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:a.potentiallyHarmful},{identifier:"underdevelopedCountry",nonInclusivePhrases:["underdeveloped country"],inclusiveAlternatives:"developing country",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:"Avoid using %1$s as it is potentially harmful. Consider using an alternative, such as %2$s instead or be more specific about what aspect this word refers to."},{identifier:"underdevelopedCountries",nonInclusivePhrases:["underdeveloped countries"],inclusiveAlternatives:"developing countries",score:n.SCORES.NON_INCLUSIVE,feedbackFormat:"Avoid using %1$s as it is potentially harmful. Consider using an alternative, such as %2$s instead or be more specific about what aspect this word refers to."}];l.forEach((e=>{e.category="culture",e.learnMoreUrl="https://yoa.st/inclusive-language-culture"})),t.default=l},77018:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(6653),i=r(17864),a=r(64948),o=r(5719),l=r(88626),u=r(28045),c=(n=r(77965))&&n.__esModule?n:{default:n},d=r(538),h=r(65736);const p="Avoid using %1$s as it is derogatory. Consider using an alternative, such as %2$s.",f=s.harmfulPotentiallyNonInclusive+" Unless you are referencing the specific medical condition, consider using another alternative to describe the trait or behavior, such as %2$s.",g=[{identifier:"binge",nonInclusivePhrases:["binge"],inclusiveAlternatives:"indulge, satiate, wallow, spree, marathon, consume excessively",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s, unless talking about a symptom of a medical condition. If you are not referencing a symptom, consider other alternatives to describe the trait or behavior, such as %2$s.",rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["drink","drinks","drinking","eating disorder","and purge","behavior","behaviors","behaviour","behaviours"]))},{identifier:"bingeing",nonInclusivePhrases:["bingeing","binging"],inclusiveAlternatives:"indulging, satiating, wallowing, spreeing, marathoning, consuming excessively",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s, unless talking about a symptom of a medical condition. If you are not referencing a symptom, consider other alternatives to describe the trait or behavior, such as %2$s.",rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["and purging","behavior","behaviors","behaviour","behaviours"]))},{identifier:"binged",nonInclusivePhrases:["binged"],inclusiveAlternatives:"indulged, satiated, wallowed, spreed, marathoned, consumed excessively",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s, unless talking about a symptom of a medical condition. If you are not referencing a symptom, consider other alternatives to describe the trait or behavior, such as %2$s.",rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["and purged"]))},{identifier:"binges",nonInclusivePhrases:["binges"],inclusiveAlternatives:"indulges, satiates, wallows, sprees, marathons, consumes excessively",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s, unless talking about a symptom of a medical condition. If you are not referencing a symptom, consider other alternatives to describe the trait or behavior, such as %2$s.",rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["and purges"]))},{identifier:"wheelchairBound",nonInclusivePhrases:["wheelchair-bound","wheelchair bound","confined to a wheelchair"],inclusiveAlternatives:"uses a wheelchair, is a wheelchair user",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"mentallyRetarded",nonInclusivePhrases:["mentally retarded"],inclusiveAlternatives:"person with an intellectual disability",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"retarded",nonInclusivePhrases:["retarded"],inclusiveAlternatives:"uninformed, ignorant, foolish, irrational, insensible",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:p,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isNotPrecededByException)(e,["mentally"]))},{identifier:"alcoholic",nonInclusivePhrases:["an alcoholic"],inclusiveAlternatives:"person with alcohol use disorder",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["drink","beverage"]))},{identifier:"alcoholics",nonInclusivePhrases:["alcoholics"],inclusiveAlternatives:"people with alcohol use disorder",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["anonymous"]))},{identifier:"cripple",nonInclusivePhrases:["a cripple"],inclusiveAlternatives:"person with a physical disability, a physically disabled person",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:p},{identifier:"crippled",nonInclusivePhrases:["crippled"],inclusiveAlternatives:"has a physical disability, is physically disabled",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"daft",nonInclusivePhrases:["daft"],inclusiveAlternatives:"uninformed, ignorant, foolish, inconsiderate, irrational, reckless",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"handicapped",nonInclusivePhrases:["handicapped"],inclusiveAlternatives:"disabled, person with a disability",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"handicap",nonInclusivePhrases:["handicap"],inclusiveAlternatives:"disability",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["toilet","toilets","parking","bathroom","bathrooms","stall","stalls"]))},{identifier:"insane",nonInclusivePhrases:["insane"],inclusiveAlternatives:"wild, confusing, unpredictable, impulsive, reckless, out of control, unbelievable, amazing, incomprehensible, nonsensical, outrageous, ridiculous",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"imbecile",nonInclusivePhrases:["imbecile"],inclusiveAlternatives:"uninformed, ignorant, foolish, inconsiderate, irrational, reckless",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:p},{identifier:"specialNeeds",nonInclusivePhrases:["special needs"],inclusiveAlternatives:["functional needs, support needs","disabled, person with a disability"],score:u.SCORES.NON_INCLUSIVE,feedbackFormat:"Avoid using %1$s as it is potentially harmful. Consider using an alternative, such as %2$s when referring to someone's needs, or %3$s when referring to a person."},{identifier:"hardOfHearing",nonInclusivePhrases:["hard-of-hearing"],inclusiveAlternatives:"hard of hearing, partially deaf, has partial hearing loss",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"hearingImpaired",nonInclusivePhrases:["hearing impaired"],inclusiveAlternatives:"deaf or hard of hearing, partially deaf, has partial hearing loss",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"functioning",nonInclusivePhrases:["high functioning","low functioning"],inclusiveAlternatives:"describing the specific characteristic or experience",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s as it is potentially harmful. Consider using an alternative, such as %2$s, unless referring to how you characterize your own condition.",rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["autism"]))},{identifier:"autismHigh",nonInclusivePhrases:["high functioning autism","high-functioning autism"],inclusiveAlternatives:"autism with high support needs or describing the specific characteristic or experience",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:"Avoid using %1$s as it is potentially harmful. Consider using an alternative, such as %2$s, unless referring to how you characterize your own condition."},{identifier:"autismLow",nonInclusivePhrases:["low functioning autism","low-functioning autism"],inclusiveAlternatives:"autism with low support needs or describing the specific characteristic or experience",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:"Avoid using %1$s as it is potentially harmful. Consider using an alternative, such as %2$s, unless referring to how you characterize your own condition."},{identifier:"lame",nonInclusivePhrases:["lame"],inclusiveAlternatives:"boring, lousy, unimpressive, sad, corny",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"lamer",nonInclusivePhrases:["lamer"],inclusiveAlternatives:"more boring, lousier, more unimpressive, sadder, cornier",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"lamest",nonInclusivePhrases:["lamest"],inclusiveAlternatives:"most boring, lousiest, most unimpressive, saddest, corniest",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"commitSuicide",nonInclusivePhrases:["commit suicide"],inclusiveAlternatives:"take one's life, die by suicide, kill oneself",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"committingSuicide",nonInclusivePhrases:["committing suicide"],inclusiveAlternatives:"taking one's life, dying by suicide, killing oneself",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"commitsSuicide",nonInclusivePhrases:["commits suicide"],inclusiveAlternatives:"takes one's life, dies by suicide, kills oneself",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"committedSuicide",nonInclusivePhrases:["committed suicide"],inclusiveAlternatives:"took one's life, died by suicide, killed themself",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"handicapParking",nonInclusivePhrases:["handicap parking"],inclusiveAlternatives:"accessible parking",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"fellOnDeafEars",nonInclusivePhrases:["fell on deaf ears"],inclusiveAlternatives:"was not addressed, was ignored, was disregarded",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"turnOnBlindEye",nonInclusivePhrases:["turn a blind eye"],inclusiveAlternatives:"ignore, pretend not to notice",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"blindLeadingBlind",nonInclusivePhrases:["the blind leading the blind"],inclusiveAlternatives:"ignorant, misguided, incompetent, unqualified, insensitive, unaware",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"handicapBathroom",nonInclusivePhrases:["handicap bathroom","handicap bathrooms"],inclusiveAlternatives:"accessible bathroom(s)",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"handicapToilet",nonInclusivePhrases:["handicap toilet","handicap toilets"],inclusiveAlternatives:"accessible toilet(s)",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"handicapStall",nonInclusivePhrases:["handicap stall","handicap stalls"],inclusiveAlternatives:"accessible stall(s)",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"stupid",nonInclusivePhrases:["stupid"],inclusiveAlternatives:["uninformed, ignorant, foolish, inconsiderate, irrational, reckless"],score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"dumb",nonInclusivePhrases:["dumb","dumber","dumbest"],inclusiveAlternatives:["uninformed, ignorant, foolish, inconsiderate, irrational, reckless"],score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isNotPrecededByException)(e,["deaf and"]))},{identifier:"deaf",nonInclusivePhrases:["deaf-mute","deaf and dumb"],inclusiveAlternatives:"deaf",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"addict",nonInclusivePhrases:["addict"],inclusiveAlternatives:"person with a (drug, alcohol, ...) addiction, person with substance abuse disorder",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"addicts",nonInclusivePhrases:["addicts"],inclusiveAlternatives:"people with a (drug, alcohol, ...) addiction, people with substance abuse disorder",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"brainDamaged",nonInclusivePhrases:["brain-damaged"],inclusiveAlternatives:"person with a (traumatic) brain injury",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"differentlyAbled",nonInclusivePhrases:["differently abled","differently-abled"],inclusiveAlternatives:"disabled, person with a disability",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"epilepticFit",nonInclusivePhrases:["epileptic fit"],inclusiveAlternatives:"epileptic seizure",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"epilepticFits",nonInclusivePhrases:["epileptic fits"],inclusiveAlternatives:"epileptic seizures",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"sanityCheck",nonInclusivePhrases:["sanity check"],inclusiveAlternatives:"final check, confidence check, rationality check, soundness check",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"to not be crazy about",nonInclusivePhrases:["crazy about"],inclusiveAlternatives:"to not be impressed by, to not be enthusiastic about, to not be into, to not like",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:["Avoid using to not be crazy about as it is potentially harmful.",s.alternative].join(" "),rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isPrecededByException)(e,d.formsOfToBeNotWithOptionalIntensifier))},{identifier:"to be crazy about",nonInclusivePhrases:["crazy about"],inclusiveAlternatives:"to love, to be obsessed with, to be infatuated with",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:["Avoid using to be crazy about as it is potentially harmful.",s.alternative].join(" "),rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isPrecededByException)(e,d.formsOfToBeWithOptionalIntensifier))},{identifier:"crazy in love",nonInclusivePhrases:["crazy in love"],inclusiveAlternatives:"wildly in love, head over heels, infatuated",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"to go crazy",nonInclusivePhrases:["crazy"],inclusiveAlternatives:"to go wild, to go out of control, to go up the wall, to be aggravated, to get confused",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:["Avoid using to go crazy as it is potentially harmful.",s.alternative].join(" "),rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isPrecededByException)(e,d.formsOfToGo))},{identifier:"to drive crazy",nonInclusivePhrases:["crazy"],inclusiveAlternatives:"to drive one to their limit, to get on one's last nerve, to make one livid, to aggravate, to make one's blood boil, to exasperate, to get into one's head",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:["Avoid using to drive crazy as it is potentially harmful.",s.alternative].join(" "),rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isPrecededByException)(e,d.combinationsOfDriveAndObjectPronoun))},{identifier:"crazy",nonInclusivePhrases:["crazy"],inclusiveAlternatives:"wild, baffling, out of control, inexplicable, unbelievable, aggravating, shocking, intense, impulsive, chaotic, confused, mistaken, obsessed",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isNotPrecededByException)(e,d.shouldNotPrecedeStandaloneCrazy)).filter((0,a.isNotFollowedByException)(e,t,d.shouldNotFollowStandaloneCrazy)).filter((0,o.isNotFollowedAndPrecededByException)(e,t,d.shouldNotPrecedeStandaloneCrazyWhenFollowedByAbout,d.shouldNotFollowStandaloneCrazyWhenPrecededByToBe))},{identifier:"crazier",nonInclusivePhrases:["crazier"],inclusiveAlternatives:"more wild, baffling, out of control, inexplicable, unbelievable, aggravating, shocking, intense, impulsive, chaotic, confused, mistaken, obsessed",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"craziest",nonInclusivePhrases:["craziest"],inclusiveAlternatives:"most wild, baffling, out of control, inexplicable, unbelievable, aggravating, shocking, intense, impulsive, chaotic, confused, mistaken, obsessed",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"psychopathic",nonInclusivePhrases:["psychopath","psychopaths","psychopathic"],inclusiveAlternatives:"toxic, manipulative, unpredictable, impulsive, reckless, out of control",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"schizophrenic",nonInclusivePhrases:["schizophrenic","bipolar"],inclusiveAlternatives:"of two minds, chaotic, confusing",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:f,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["disorder"]))},{identifier:"paranoid",nonInclusivePhrases:["paranoid"],inclusiveAlternatives:"overly suspicious, unreasonable, defensive",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:f,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["personality disorder","delusion","delusions","ideation"]))},{identifier:"manic",nonInclusivePhrases:["manic"],inclusiveAlternatives:"excited, raving, unbalanced, wild",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:f,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["episode","episodes","state","states","symptoms","and depressive episodes","and hypomanic","or hypomanic"]))},{identifier:"hysterical",nonInclusivePhrases:["hysterical"],inclusiveAlternatives:"intense, vehement, piercing, chaotic",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"psycho",nonInclusivePhrases:["psycho","psychos"],inclusiveAlternatives:"toxic, distraught, unpredictable, reckless, out of control",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"neurotic",nonInclusivePhrases:["neurotic","lunatic"],inclusiveAlternatives:"distraught, unstable, startling, confusing, baffling",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"sociopath",nonInclusivePhrases:["sociopath"],inclusiveAlternatives:["person with antisocial personality disorder","toxic, manipulative, cruel"],score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s as it is potentially harmful. If you are referencing the medical condition, use %2$s instead, unless referring to someone who explicitly wants to be referred to with this term. If you are not referencing the medical condition, consider other alternatives to describe the trait or behavior, such as %3$s."},{identifier:"sociopaths",nonInclusivePhrases:["sociopaths"],inclusiveAlternatives:["people with antisocial personality disorder","toxic, manipulative, cruel"],score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s as it is potentially harmful. If you are referencing the medical condition, use %2$s instead, unless referring to someone who explicitly wants to be referred to with this term. If you are not referencing the medical condition, consider other alternatives to describe the trait or behavior, such as %3$s."},{identifier:"narcissistic",nonInclusivePhrases:["narcissistic"],inclusiveAlternatives:["person with narcissistic personality disorder","selfish, egotistical, self-centered, self-absorbed, vain, toxic, manipulative"],score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s as it is potentially harmful. If you are referencing the medical condition, use %2$s instead, unless referring to someone who explicitly wants to be referred to with this term. If you are not referencing the medical condition, consider other alternatives to describe the trait or behavior, such as %3$s.",rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,a.isNotFollowedByException)(e,t,["personality disorder"]))},{identifier:"OCD",nonInclusivePhrases:["ocd"],inclusiveAlternatives:"pedantic, obsessed, perfectionist",score:u.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[(0,h.sprintf)(f,"OCD","%2$s"),"If you are referring to someone who has the medical condition, then state that they have OCD rather than that they are OCD."].join(" "),rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,i.isPrecededByException)(e,d.formsOfToBeAndToBeNotWithOptionalIntensifier))},{identifier:"theMentallyIll",nonInclusivePhrases:["the mentally ill"],inclusiveAlternatives:"people who are mentally ill, mentally ill people",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,c.default)(e,t))},{identifier:"theDisabled",nonInclusivePhrases:["the disabled"],inclusiveAlternatives:"people who have a disability, disabled people",score:u.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,l.includesConsecutiveWords)(e,t).filter((0,c.default)(e,t))}];g.forEach((e=>{e.category="disability",e.learnMoreUrl="https://yoa.st/inclusive-language-disability"})),t.default=g},538:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.shouldNotPrecedeStandaloneCrazyWhenFollowedByAbout=t.shouldNotPrecedeStandaloneCrazy=t.shouldNotFollowStandaloneCrazyWhenPrecededByToBe=t.shouldNotFollowStandaloneCrazy=t.formsOfToGo=t.formsOfToBeWithOptionalIntensifier=t.formsOfToBeNotWithOptionalIntensifier=t.formsOfToBeAndToBeNotWithOptionalIntensifier=t.default=t.combinationsOfDriveAndObjectPronoun=void 0;var n,s=(n=r(64998))&&n.__esModule?n:{default:n},i=r(92819);const a=["so","very","a bit","really","pretty","kind of","that","too","totally","completely","absolutely","even","also","as"],o=s.default.slice(0,-2),l=o.splice(19,4),u=function(e,t){return(0,i.flatMap)(e,(e=>(0,i.flatMap)(t,(t=>`${e} ${t}`))))},c=u(o,a),d=t.formsOfToBeWithOptionalIntensifier=c.concat(o);let h=(0,i.flatMap)(o,(e=>`${e} not`));h=h.concat(l);const p=u(h,a),f=t.formsOfToBeNotWithOptionalIntensifier=p.concat(h),g=t.formsOfToBeAndToBeNotWithOptionalIntensifier=d.concat(f),m=t.combinationsOfDriveAndObjectPronoun=u(["driving","drive","drove","drives","driven"],["me","you","them","him","her","someone","somebody","anyone","anybody","everyone","everybody"]),_=t.formsOfToGo=["go","goes","going","gone","went"],y=t.shouldNotPrecedeStandaloneCrazy=m.concat(_),E=t.shouldNotFollowStandaloneCrazy=["in love"],T=t.shouldNotPrecedeStandaloneCrazyWhenFollowedByAbout=d.concat(f),A=t.shouldNotFollowStandaloneCrazyWhenPrecededByToBe=["about"];t.default={formsOfToBeWithOptionalIntensifier:d,formsOfToBeNotWithOptionalIntensifier:f,formsOfToBeAndToBeNotWithOptionalIntensifier:g,combinationsOfDriveAndObjectPronoun:m,formsOfToGo:_,shouldNotPrecedeStandaloneCrazy:y,shouldNotFollowStandaloneCrazy:E,shouldNotPrecedeStandaloneCrazyWhenFollowedByAbout:T,shouldNotFollowStandaloneCrazyWhenPrecededByToBe:A}},6653:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.preferredDescriptorIfKnown=t.potentiallyHarmfulUnlessAnimalsObjects=t.potentiallyHarmfulUnless=t.potentiallyHarmfulCareful=t.potentiallyHarmful=t.harmfulPotentiallyNonInclusive=t.harmfulNonInclusive=t.alternative=void 0;const r=t.harmfulNonInclusive="Avoid using %1$s as it is potentially harmful.",n=t.harmfulPotentiallyNonInclusive="Be careful when using %1$s as it is potentially harmful.",s=t.alternative="Consider using an alternative, such as %2$s.";t.potentiallyHarmful=[r,s].join(" "),t.potentiallyHarmfulCareful=[n,s].join(" "),t.potentiallyHarmfulUnless=[n,"Consider using an alternative, such as %2$s, unless referring to someone who explicitly wants to be referred to with this term."].join(" "),t.preferredDescriptorIfKnown="Alternatively, if talking about a specific person, use their preferred descriptor if known.",t.potentiallyHarmfulUnlessAnimalsObjects=[n,"Unless you are referring to objects or animals, consider using an alternative, such as %2$s."].join(" ")},556:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(6653),i=r(28045),a=r(88626),o=(n=r(77965))&&n.__esModule?n:{default:n};const l="Avoid using %1$s as it is exclusionary. Consider using an alternative, such as %2$s.",u="Be careful when using %1$s as it is potentially exclusionary. Consider using an alternative, such as %2$s.",c="Avoid using %1$s as it is potentially exclusionary. Consider using an alternative, such as %2$s.",d="Be careful when using %1$s as it can be exclusionary. Unless you are sure that the group you refer to only consists of %1$s, use an alternative, such as %2$s.",h="Be careful when using %1$s as it can be exclusionary. Unless you are sure that the group you refer to only consists of men, use an alternative, such as %2$s.",p="Avoid using %1$s as it is derogatory.",f=[{identifier:"firemen",nonInclusivePhrases:["firemen"],inclusiveAlternatives:"firefighters",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:h},{identifier:"policemen",nonInclusivePhrases:["policemen"],inclusiveAlternatives:"police officers",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:h},{identifier:"menAndWomen",nonInclusivePhrases:["men and women","women and men"],inclusiveAlternatives:"people, people of all genders, individuals, human beings",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:d},{identifier:"boysAndGirls",nonInclusivePhrases:["boys and girls","girls and boys"],inclusiveAlternatives:"kids, children",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:d},{identifier:"heOrShe",nonInclusivePhrases:["he/she","he or she","she or he","(s)he"],inclusiveAlternatives:"they",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:u},{identifier:"birthSex",nonInclusivePhrases:["birth sex","natal sex"],inclusiveAlternatives:"assigned sex, assigned sex at birth",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"mankind",nonInclusivePhrases:["mankind"],inclusiveAlternatives:"individuals, people, persons, human beings, humanity",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:l},{identifier:"preferredPronouns",nonInclusivePhrases:["preferred pronouns"],inclusiveAlternatives:"pronouns",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulCareful.slice(0,-1),", unless referring to someone who explicitly wants to use this term to describe their own pronouns."].join("")},{identifier:"oppositeGender",nonInclusivePhrases:["opposite gender"],inclusiveAlternatives:"another gender",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:l},{identifier:"oppositeSex",nonInclusivePhrases:["opposite sex"],inclusiveAlternatives:"another sex",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:l},{identifier:"femaleBodied",nonInclusivePhrases:["female-bodied"],inclusiveAlternatives:"assigned female at birth",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:c.slice(0,-1)+" if you are discussing a person based on their sex or assigned gender at birth. If talking about human anatomy, use the specific anatomical phrase as opposed to %1$s."},{identifier:"maleBodied",nonInclusivePhrases:["male-bodied"],inclusiveAlternatives:"assigned male at birth",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:c.slice(0,-1)+" if you are discussing a person based on their sex or assigned gender at birth. If talking about human anatomy, use the specific anatomical phrase as opposed to %1$s."},{identifier:"hermaphrodite",nonInclusivePhrases:["hermaphrodite"],inclusiveAlternatives:"intersex",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"hermaphrodites",nonInclusivePhrases:["hermaphrodites"],inclusiveAlternatives:"intersex people",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"bothGenders",nonInclusivePhrases:["both genders"],inclusiveAlternatives:"people, folks, human beings, all genders",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s as it can be exclusionary. Unless you are sure that the group you refer to only consists of two genders, use an alternative, such as %2$s."},{identifier:"ladiesAndGentleman",nonInclusivePhrases:["ladies and gentlemen"],inclusiveAlternatives:"everyone, folks, honored guests",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s as it can be exclusionary. Unless you are sure that the group you refer to only consists of men and women, use an alternative, such as %2$s."},{identifier:"husbandAndWife",nonInclusivePhrases:["husband and wife","husbands and wives"],inclusiveAlternatives:"spouses, partners",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:u.slice(0,-1)+", unless referring to someone who explicitly wants to be referred to with this term."},{identifier:"mothersAndFathers",nonInclusivePhrases:["mothers and fathers","fathers and mothers"],inclusiveAlternatives:"parents",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:"Be careful when using %1$s as it can be exclusionary. Unless you are sure that the group you refer to only consists of people who use this term, use an alternative, such as %2$s."},{identifier:"manHours",nonInclusivePhrases:["man-hours"],inclusiveAlternatives:"person-hours, business hours",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:l},{identifier:"preferredName",nonInclusivePhrases:["preferred name"],inclusiveAlternatives:"name, affirming name",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulCareful.slice(0,-1),", unless referring to someone who explicitly wants to use this term to describe their own name."].join("")},{identifier:"transgenders",nonInclusivePhrases:["transgenders"],inclusiveAlternatives:"trans people, transgender people",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:[p,s.alternative].join(" ")},{identifier:"transsexual",nonInclusivePhrases:["transsexual"],inclusiveAlternatives:"transgender",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"transsexuals",nonInclusivePhrases:["transsexuals"],inclusiveAlternatives:"trans people, transgender people",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"transWoman",nonInclusivePhrases:["transwoman"],inclusiveAlternatives:"trans woman, transgender woman",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"transWomen",nonInclusivePhrases:["transwomen"],inclusiveAlternatives:"trans women, transgender women",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"transMan",nonInclusivePhrases:["transman"],inclusiveAlternatives:"trans man, transgender man",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"transMen",nonInclusivePhrases:["transmen"],inclusiveAlternatives:"trans men, transgender men",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"transgendered",nonInclusivePhrases:["transgendered"],inclusiveAlternatives:["transgender, trans","transitioned, went through a gender transition"],score:i.SCORES.NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmful.slice(0,-1),"if referring to a person. If referring to a transition process, consider using an alternative such as %3$s."].join(" ")},{identifier:"maleToFemale",nonInclusivePhrases:["male-to-female","mtf"],inclusiveAlternatives:"trans woman, transgender woman",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"femaleToMale",nonInclusivePhrases:["female-to-male","ftm"],inclusiveAlternatives:"trans man, transgender man",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"heShe",nonInclusivePhrases:["he-she"],inclusiveAlternatives:"",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:p},{identifier:"shemale",nonInclusivePhrases:["shemale","she-male"],inclusiveAlternatives:"",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:p},{identifier:"manMade",nonInclusivePhrases:["man-made","manmade"],inclusiveAlternatives:"artificial, synthetic, machine-made",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:l},{identifier:"toEachTheirOwn",nonInclusivePhrases:["to each his own"],inclusiveAlternatives:"to each their own",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:l},{identifier:"manned",nonInclusivePhrases:["manned"],inclusiveAlternatives:"crewed",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:l},{identifier:"aTransgender",nonInclusivePhrases:["a transgender","the transgender"],inclusiveAlternatives:"transgender person",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,a.includesConsecutiveWords)(e,t).filter((0,o.default)(e,t))}];f.forEach((e=>{e.category="gender",e.learnMoreUrl="https://yoa.st/inclusive-language-gender"})),t.default=f},90529:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=d(r(46176)),s=d(r(9214)),i=d(r(77018)),a=d(r(556)),o=d(r(20117)),l=d(r(27540)),u=d(r(12297)),c=d(r(32296));function d(e){return e&&e.__esModule?e:{default:e}}t.default=[...n.default,...s.default,...i.default,...a.default,...o.default,...l.default,...u.default,...c.default]},12297:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(28045),s=r(6653),i=r(88626),a=r(17864);const o=[{identifier:"minorities",nonInclusivePhrases:["minorities"],inclusiveAlternatives:["members of the LGBTQ+ community","Indigenous peoples","marginalized groups","religious minorities"],score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.harmfulPotentiallyNonInclusive,"Consider using an alternative by being specific about which group(s) of people you are referring to. For example: %2$s, %3$s, %4$s. In case an alternative is not available, make sure to specify the type of minorities you are referring to, e.g., %5$s."].join(" ")},{identifier:"normalPerson",nonInclusivePhrases:["normal person"],inclusiveAlternatives:["typical person, average person or describing the person's specific trait, experience, or behavior"],score:n.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,i.includesConsecutiveWords)(e,t).filter((0,a.isNotPrecededByException)(e,["mentally","behaviorally","behaviourally"]))},{identifier:"normalPeople",nonInclusivePhrases:["normal people","Normal people"],inclusiveAlternatives:["typical people, average people or describing people's specific trait, experience, or behavior"],score:n.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,caseSensitive:!0,rule:(e,t)=>(0,i.includesConsecutiveWords)(e,t).filter((0,a.isNotPrecededByException)(e,["mentally","behaviorally","behaviourally"]))},{identifier:"mentallyNormal",nonInclusivePhrases:["mentally normal"],inclusiveAlternatives:["people without mental health conditions, mentally healthy people"],score:n.SCORES.NON_INCLUSIVE,feedbackFormat:[s.harmfulNonInclusive,"Consider using an alternative, such as %2$s. If possible, be more specific. For example: people who don’t have anxiety disorders, people who haven't experienced trauma, etc. Be careful when using mental health descriptors and try to avoid making assumptions about someone's mental health."].join(" ")},{identifier:"behaviorallyNormal",nonInclusivePhrases:["behaviorally normal","behaviourally normal"],inclusiveAlternatives:["showing typical behavior or describing the specific behavior"],score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnlessAnimalsObjects},{identifier:"abnormalPerson",nonInclusivePhrases:["abnormal person"],inclusiveAlternatives:["describing the person's specific trait, experience, or behavior"],score:n.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"abnormalPeople",nonInclusivePhrases:["abnormal people"],inclusiveAlternatives:["describing people's specific trait, experience, or behavior"],score:n.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"mentallyAbnormal",nonInclusivePhrases:["mentally abnormal"],inclusiveAlternatives:["people with a mental health condition, people with mental health problems"],score:n.SCORES.NON_INCLUSIVE,feedbackFormat:[s.harmfulNonInclusive,"Consider using an alternative, such as %2$s. If possible, be more specific. For example: people who have anxiety disorders, people who have experienced trauma, etc. Be careful when using mental health descriptors and try to avoid making assumptions about someone's mental health."].join(" ")},{identifier:"behaviorallyAbnormal",nonInclusivePhrases:["behaviorally abnormal","behaviourally abnormal"],inclusiveAlternatives:["showing atypical behavior, showing dysfunctional behavior or describing the specific behavior"],score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnlessAnimalsObjects},{identifier:"abnormalBehavior",nonInclusivePhrases:["abnormal behavior","abnormal behaviour"],inclusiveAlternatives:["atypical behavior, unusual behavior or describing the specific behavior"],score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnlessAnimalsObjects}];o.forEach((e=>{e.category="other",e.learnMoreUrl="https://yoa.st/inclusive-language-other"})),t.default=o},28045:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SCORES=void 0,t.SCORES={NON_INCLUSIVE:3,POTENTIALLY_NON_INCLUSIVE:6}},27540:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(6653),i=r(28045),a=r(88626),o=(n=r(77965))&&n.__esModule?n:{default:n};const l=[{identifier:"illegalImmigrant",nonInclusivePhrases:["illegal immigrant","illegal alien"],inclusiveAlternatives:"undocumented person, person without papers, immigrant without papers",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"illegalImmigrants",nonInclusivePhrases:["illegal immigrants","illegal aliens"],inclusiveAlternatives:"undocumented people, people without papers, immigrants without papers",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"povertyStricken",nonInclusivePhrases:["poverty stricken"],inclusiveAlternatives:"people whose income is below the poverty threshold, people with low-income",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"welfareReliant",nonInclusivePhrases:["welfare reliant"],inclusiveAlternatives:"receiving welfare",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"prostitute",nonInclusivePhrases:["prostitute"],inclusiveAlternatives:"sex worker",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"prostitutes",nonInclusivePhrases:["prostitutes"],inclusiveAlternatives:"sex workers",score:i.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmfulUnless},{identifier:"ex-con",nonInclusivePhrases:["ex-con"],inclusiveAlternatives:"person who has had felony convictions, person who has been incarcerated",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"ex-cons",nonInclusivePhrases:["ex-cons"],inclusiveAlternatives:"people who have had felony convictions, people who have been incarcerated",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"felon",nonInclusivePhrases:["felon"],inclusiveAlternatives:"person with felony convictions, person who has been incarcerated",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"felons",nonInclusivePhrases:["felons"],inclusiveAlternatives:"people with felony convictions, people who have been incarcerated",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"ex-offender",nonInclusivePhrases:["ex-offender"],inclusiveAlternatives:"formerly incarcerated person",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"ex-offenders",nonInclusivePhrases:["ex-offenders"],inclusiveAlternatives:"formerly incarcerated people",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful},{identifier:"theHomeless",nonInclusivePhrases:["the homeless"],inclusiveAlternatives:"people experiencing homelessness",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,a.includesConsecutiveWords)(e,t).filter((0,o.default)(e,t))},{identifier:"theUndocumented",nonInclusivePhrases:["the undocumented"],inclusiveAlternatives:"people who are undocumented, undocumented people, people without papers",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,a.includesConsecutiveWords)(e,t).filter((0,o.default)(e,t))},{identifier:"thePoor",nonInclusivePhrases:["the poor"],inclusiveAlternatives:"people whose income is below the poverty threshold, people with low-income",score:i.SCORES.NON_INCLUSIVE,feedbackFormat:s.potentiallyHarmful,rule:(e,t)=>(0,a.includesConsecutiveWords)(e,t).filter((0,o.default)(e,t))}];l.forEach((e=>{e.category="ses",e.learnMoreUrl="https://yoa.st/inclusive-language-ses"})),t.default=l},32296:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(28045),s=r(6653);const i=[{identifier:"homosexuals",nonInclusivePhrases:["homosexuals"],inclusiveAlternatives:"gay people, queer people, lesbians, gay men, people in same-gender relationships",score:n.SCORES.POTENTIALLY_NON_INCLUSIVE,feedbackFormat:[s.potentiallyHarmfulUnless,"Be as specific possible and use people's preferred labels if they are known."].join(" ")}];i.forEach((e=>{e.category="sexualOrientation",e.learnMoreUrl="https://yoa.st/inclusive-language-orientation"})),t.default=i},88626:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.includesConsecutiveWords=function(e,t){const r=[];return e.forEach(((s,i)=>{(0,n.includesWordsAtPosition)(t,i,e)&&r.push(i)})),r};var n=r(40880)},40880:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.includesWordsAtPosition=function(e,t,r){return e.every(((e,n)=>r[t+n]===e))}},5719:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isFollowedAndPrecededByException=i,t.isNotFollowedAndPrecededByException=function(e,t,r,n){return s=>!i(e,t,r,n)(s)};var n=r(64948),s=r(17864);function i(e,t,r,i){return a=>(0,n.isFollowedByException)(e,t,i)(a)&&(0,s.isPrecededByException)(e,r)(a)}},64948:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isFollowedByException=i,t.isNotFollowedByException=function(e,t,r){return n=>!i(e,t,r)(n)};var n=r(58677),s=r(40880);function i(e,t,r){const i=r.map((e=>(0,n.getWords)(e,"\\s",!1)));return r=>i.some((n=>{const i=r+t.length;return i>=0&&(0,s.includesWordsAtPosition)(n,i,e)}))}},88883:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isFollowedByParticiple=function(e,t){return r=>{const n=r+t.length;return n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isNotPrecededByException=function(e,t){return r=>!i(e,t)(r)},t.isPrecededByException=i;var n=r(58677),s=r(40880);function i(e,t){const r=t.map((e=>(0,n.getWords)(e,"\\s",!1)));return t=>r.some((r=>{const n=t-r.length;return n>=0&&(0,s.includesWordsAtPosition)(r,n,e)}))}},77965:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return r=>(0,n.isFollowedByException)(e,t,i.nonNouns)(r)||(0,s.isFollowedByParticiple)(e,t)(r)||(0,n.isFollowedByException)(e,t,l)(r)};var n=r(64948),s=r(88883),i=r(89456),a=r(8737),o=r(58677);const l=a.punctuationList.filter((e=>(0,o.getWords)(e,"\\s",!1).length>0))},43947:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.seo=t.readability=t.inclusiveLanguage=void 0;var n=F(r(40774)),s=F(r(25636)),i=F(r(38196)),a=F(r(86089)),o=F(r(7261)),l=F(r(35780)),u=F(r(62318)),c=F(r(57749)),d=F(r(50791)),h=F(r(97758)),p=F(r(36832)),f=F(r(92922)),g=F(r(90575)),m=F(r(99815)),_=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=x(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=s?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}(r(70966)),y=F(r(34847)),E=F(r(70476)),T=F(r(27661)),A=F(r(46430)),v=F(r(47502)),b=F(r(17915)),S=F(r(69360)),I=F(r(57480)),O=F(r(46787)),C=r(80009),N=F(r(8980)),D=F(r(38754)),w=F(r(58850)),P=F(r(77428)),R=F(r(40826)),k=F(r(76369)),L=F(r(11842)),M=F(r(96682));function x(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(x=function(e){return e?r:t})(e)}function F(e){return e&&e.__esModule?e:{default:e}}t.readability={ListAssessment:h.default,ParagraphTooLongAssessment:n.default,PassiveVoiceAssessment:s.default,SentenceBeginningsAssessment:i.default,SentenceLengthInTextAssessment:a.default,SubheadingDistributionTooLongAssessment:o.default,TextAlignmentAssessment:c.default,TextPresenceAssessment:l.default,TransitionWordsAssessment:u.default,WordComplexityAssessment:d.default},t.seo={FunctionWordsInKeyphraseAssessment:p.default,ImageAltTagsAssessment:R.default,ImageCountAssessment:D.default,ImageKeyphraseAssessment:N.default,InternalLinksAssessment:f.default,IntroductionKeywordAssessment:g.default,KeyphraseDistributionAssessment:w.default,KeyphraseInSEOTitleAssessment:O.default,KeyphraseLengthAssessment:m.default,KeyphraseDensityAssessment:_.default,KeywordDensityAssessment:_.KeywordDensityAssessment,MetaDescriptionKeywordAssessment:y.default,MetaDescriptionLengthAssessment:E.default,OutboundLinksAssessment:T.default,PageTitleWidthAssessment:A.default,ProductIdentifiersAssessment:k.default,ProductSKUAssessment:L.default,SingleH1Assessment:v.default,SubheadingsKeywordAssessment:b.default,TextCompetingLinksAssessment:S.default,TextLengthAssessment:I.default,TextTitleAssessment:P.default,SlugKeywordAssessment:C.SlugKeywordAssessment,UrlKeywordAssessment:C.UrlKeywordAssessment},t.inclusiveLanguage={InclusiveLanguageAssessment:M.default}},97758:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=u(r(9017)),a=u(r(73054)),o=r(49061),l=u(r(96908));function u(e){return e&&e.__esModule?e:{default:e}}class c extends i.default{constructor(e={}){super();const t={urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/shopify38"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/shopify39"),scores:{bad:3,good:9}};this._config=(0,s.merge)(t,e),this.identifier="listsPresence"}findList(e){let t=e.getText();return t=(0,l.default)(t),/<[uo]l.*>[\s\S]*<\/[uo]l>/.test(t)}getResult(e){this.textContainsList=this.findList(e);const t=this.calculateResult(),r=new a.default;return r.setScore(t.score),r.setText(t.resultText),r}isApplicable(e){return this.hasEnoughContentForAssessment(e)}calculateResult(){return this.textContainsList?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sLists%2$s: There is at least one list on this page. Great!","yoast-woo-seo"),this._config.urlTitle,"")}:{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: %1$s expands to a link on yoast.com, + * %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sLists%3$s: No lists appear on this page. %2$sAdd at least one ordered or unordered list%3$s!","yoast-woo-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}}t.default=c},40774:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=r(62240),a=h(r(15010)),o=r(33140),l=r(76663),u=h(r(73054)),c=h(r(41054)),d=h(r(9017));function h(e){return e&&e.__esModule?e:{default:e}}class p extends d.default{constructor(e={},t=!1){super();const r={urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/35d"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/35e"),countTextIn:(0,n.__)("words","wordpress-seo"),parameters:{recommendedLength:150,maximumRecommendedLength:200}};this.identifier="textParagraphTooLong",this._config=(0,s.merge)(r,e),this._isProduct=t}getTooLongParagraphs(e,t){const r=t.parameters.recommendedLength;return(0,s.filter)(e,(function(e){return e.countLength>r}))}getConfig(e){const t=this._config,r=e.getConfig("paragraphLength");return r&&(t.parameters=this._isProduct?r.productPageParams:r.defaultPageParams),t}calculateResult(e,t,r){let s;if(0===e.length)return{};const i=e[0].countLength;return i<=r.parameters.recommendedLength&&(s=9),(0,l.inRangeEndInclusive)(i,r.parameters.recommendedLength,r.parameters.maximumRecommendedLength)&&(s=6),i>r.parameters.maximumRecommendedLength&&(s=3),s>=7?{score:s,hasMarks:!1,text:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sParagraph length%2$s: None of the paragraphs are too long. Great job!","wordpress-seo"),r.urlTitle,"")}:{score:s,hasMarks:!0,text:(0,n.sprintf)( +/* translators: %1$s and %5$s expand to a link on yoast.com, %2$s expands to the anchor end tag, + %3$d expands to the number of paragraphs over the recommended word / character limit, %4$d expands to the word / character limit, + %6$s expands to the word 'words' or 'characters'. */ +(0,n._n)("%1$sParagraph length%2$s: %3$d of the paragraphs contains more than the recommended maximum of %4$d %6$s. %5$sShorten your paragraphs%2$s!","%1$sParagraph length%2$s: %3$d of the paragraphs contain more than the recommended maximum of %4$d %6$s. %5$sShorten your paragraphs%2$s!",t.length,"wordpress-seo"),r.urlTitle,"",t.length,r.parameters.recommendedLength,r.urlCallToAction,this._config.countTextIn)}}sortParagraphs(e){return e.sort((function(e,t){return t.countLength-e.countLength}))}getMarks(e,t){const r=t.getResearch("getParagraphLength"),n=this.getTooLongParagraphs(r,this.getConfig(t));return(0,s.map)(n,(function(e){const t=(0,i.stripBlockTagsAtStartEnd)(e.text),r=(0,a.default)(t);return new c.default({original:t,marked:r})}))}getResult(e,t){let r=t.getResearch("getParagraphLength");t.getConfig("countCharacters")&&(this._config.countTextIn=(0,n.__)("characters","wordpress-seo")),r=this.sortParagraphs(r);const s=this.getConfig(t),i=this.getTooLongParagraphs(r,s),a=this.calculateResult(r,i,s),o=new u.default;return o.setScore(a.score),o.setText(a.text),o.setHasMarks(a.hasMarks),o}isApplicable(e){return this.hasEnoughContentForAssessment(e)}}t.default=p},25636:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=p(r(17179)),a=r(76663),o=p(r(15010)),l=r(33140),u=r(62240),c=p(r(73054)),d=p(r(41054)),h=p(r(9017));function p(e){return e&&e.__esModule?e:{default:e}}class f extends h.default{constructor(e={}){super();const t={urlTitle:(0,l.createAnchorOpeningTag)("https://yoa.st/34t"),urlCallToAction:(0,l.createAnchorOpeningTag)("https://yoa.st/34u")};this.identifier="passiveVoice",this._config=(0,s.merge)(t,e)}calculatePassiveVoiceResult(e){let t,r=0;0!==e.total&&(r=(0,i.default)(e.passives.length/e.total*100));const s=r>0;return r<=10&&(t=9),(0,a.inRangeEndInclusive)(r,10,15)&&(t=6),r>15&&(t=3),t>=7?{score:t,hasMarks:s,text:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sPassive voice%2$s: You're using enough active voice. That's great!","wordpress-seo"),this._config.urlTitle,"")}:{score:t,hasMarks:s,text:(0,n.sprintf)( +/* translators: %1$s and %5$s expand to a link on yoast.com, %2$s expands to the anchor end tag, + %3$s expands to the percentage of sentences in passive voice, %4$s expands to the recommended value. */ +(0,n.__)("%1$sPassive voice%2$s: %3$s of the sentences contain passive voice, which is more than the recommended maximum of %4$s. %5$sTry to use their active counterparts%2$s.","wordpress-seo"),this._config.urlTitle,"",r+"%","10%",this._config.urlCallToAction)}}getMarks(e,t){const r=t.getResearch("getPassiveVoiceResult");return(0,s.map)(r.passives,(function(e){e=(0,u.stripIncompleteTags)(e);const t=(0,o.default)(e);return new d.default({original:e,marked:t})}))}getResult(e,t){const r=t.getResearch("getPassiveVoiceResult"),n=this.calculatePassiveVoiceResult(r),s=new c.default;return s.setScore(n.score),s.setText(n.text),s.setHasMarks(n.hasMarks),s}isApplicable(e,t){return this.hasEnoughContentForAssessment(e)&&t.hasResearch("getPassiveVoiceResult")}}t.default=f},38196:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=r(65736),i=d(r(15010)),a=r(33140),o=r(62240),l=d(r(73054)),u=d(r(41054)),c=d(r(9017));function d(e){return e&&e.__esModule?e:{default:e}}class h extends c.default{constructor(e={}){super();const t={urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/35f"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/35g")};this.identifier="sentenceBeginnings",this._config=(0,n.merge)(t,e)}groupSentenceBeginnings(e){const t=(0,n.partition)(e,(function(e){return e.count>2}));if(0===t[0].length)return{total:0};const r=(0,n.sortBy)(t[0],(function(e){return e.count}));return{total:t[0].length,lowestCount:r[0].count}}calculateSentenceBeginningsResult(e){return e.total>0?{score:3,hasMarks:!0,text:(0,s.sprintf)( +/* translators: %1$s and %5$s expand to a link on yoast.com, %2$s expands to the anchor end tag, + %3$d expands to the number of consecutive sentences starting with the same word, + %4$d expands to the number of instances where 3 or more consecutive sentences start with the same word. */ +(0,s._n)("%1$sConsecutive sentences%2$s: The text contains %3$d consecutive sentences starting with the same word. %5$sTry to mix things up%2$s!","%1$sConsecutive sentences%2$s: The text contains %4$d instances where %3$d or more consecutive sentences start with the same word. %5$sTry to mix things up%2$s!",e.total,"wordpress-seo"),this._config.urlTitle,"",e.lowestCount,e.total,this._config.urlCallToAction)}:{score:9,hasMarks:!1,text:(0,s.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,s.__)("%1$sConsecutive sentences%2$s: There is enough variety in your sentences. That's great!","wordpress-seo"),this._config.urlTitle,"")}}getMarks(e,t){let r=t.getResearch("getSentenceBeginnings");r=(0,n.filter)(r,(function(e){return e.count>2}));const s=(0,n.map)(r,(function(e){return e.sentences}));return(0,n.map)((0,n.flatten)(s),(function(e){e=(0,o.stripIncompleteTags)(e);const t=(0,i.default)(e);return new u.default({original:e,marked:t})}))}getResult(e,t){const r=t.getResearch("getSentenceBeginnings"),n=this.groupSentenceBeginnings(r),s=this.calculateSentenceBeginningsResult(n),i=new l.default;return i.setScore(s.score),i.setText(s.text),i.setHasMarks(s.hasMarks),i}isApplicable(e,t){return this.hasEnoughContentForAssessment(e)&&t.hasResearch("getSentenceBeginnings")}}t.default=h},86089:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=f(r(9017)),a=f(r(90327)),o=f(r(17179)),l=r(76663),u=f(r(15010)),c=r(33140),d=r(62240),h=f(r(73054)),p=f(r(41054));function f(e){return e&&e.__esModule?e:{default:e}}class g extends i.default{constructor(e={},t=!1,r=!1){super();const i={recommendedLength:20,slightlyTooMany:25,farTooMany:30,urlTitle:(0,c.createAnchorOpeningTag)("https://yoa.st/34v"),urlCallToAction:(0,c.createAnchorOpeningTag)("https://yoa.st/34w"),countTextIn:(0,n.__)("words","wordpress-seo")};this._config=(0,s.merge)(i,e),this._isCornerstone=t,this._isProduct=r,this.identifier="textSentenceLength"}getResult(e,t){const r=t.getResearch("countSentencesFromText");t.getConfig("sentenceLength")&&(this._config=this.getLanguageSpecificConfig(t)),t.getConfig("countCharacters")&&(this._config.countTextIn=(0,n.__)("characters","wordpress-seo"));const s=this.calculatePercentage(r),i=this.calculateScore(s),a=new h.default;return a.setScore(i),a.setText(this.translateScore(i,s)),a.setHasMarks(s>0),a}isApplicable(e){return this.hasEnoughContentForAssessment(e)}getMarks(e,t){const r=t.getResearch("countSentencesFromText");t.getConfig("sentenceLength")&&(this._config=this.getLanguageSpecificConfig(t));const n=this.getTooLongSentences(r);return(0,s.map)(n,(function(e){const t=(0,d.stripIncompleteTags)(e.sentence);return new p.default({original:t,marked:(0,u.default)(t)})}))}getLanguageSpecificConfig(e){const t=this._config,r=e.getConfig("sentenceLength");return r.hasOwnProperty("recommendedLength")&&(t.recommendedLength=r.recommendedLength),!0===this._isCornerstone&&!1===this._isProduct&&r.hasOwnProperty("cornerstonePercentages")?(0,s.merge)(t,r.cornerstonePercentages):!1===this._isCornerstone&&!1===this._isProduct&&r.hasOwnProperty("percentages")?(0,s.merge)(t,r.percentages):t}translateScore(e,t){return e>=7?(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sSentence length%2$s: Great!","wordpress-seo"),this._config.urlTitle,""):(0,n.sprintf)( +/* translators: %1$s and %6$s expand to a link on yoast.com, %2$s expands to the anchor end tag, + %3$d expands to percentage of sentences, %4$s expands to the recommended maximum sentence length, + %5$s expands to the recommended maximum percentage, %7$s expands to the word 'words' or 'characters'. */ +(0,n.__)("%1$sSentence length%2$s: %3$s of the sentences contain more than %4$s %7$s, which is more than the recommended maximum of %5$s. %6$sTry to shorten the sentences%2$s.","wordpress-seo"),this._config.urlTitle,"",t+"%",this._config.recommendedLength,this._config.slightlyTooMany+"%",this._config.urlCallToAction,this._config.countTextIn)}calculatePercentage(e){let t=0;if(0!==e.length){const r=this.countTooLongSentences(e);t=(0,o.default)(r/e.length*100)}return t}calculateScore(e){let t;return e<=this._config.slightlyTooMany&&(t=9),(0,l.inRangeEndInclusive)(e,this._config.slightlyTooMany,this._config.farTooMany)&&(t=6),e>this._config.farTooMany&&(t=3),t}getTooLongSentences(e){return(0,a.default)(e,this._config.recommendedLength)}countTooLongSentences(e){return this.getTooLongSentences(e).length}}t.default=g},7261:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=m(r(15010)),a=m(r(41054)),o=m(r(9017)),l=r(76663),u=r(33140),c=r(84285),d=m(r(1105)),h=m(r(73054)),p=r(62240),f=m(r(96908)),g=r(29866);function m(e){return e&&e.__esModule?e:{default:e}}class _ extends o.default{constructor(e={}){super();const t={parameters:{recommendedMaximumLength:300,slightlyTooMany:300,farTooMany:350},countTextIn:(0,n.__)("words","wordpress-seo"),urlTitle:(0,u.createAnchorOpeningTag)("https://yoa.st/34x"),urlCallToAction:(0,u.createAnchorOpeningTag)("https://yoa.st/34y"),scores:{goodShortTextNoSubheadings:9,goodSubheadings:9,okSubheadings:6,badSubheadings:3,badLongTextNoSubheadings:2},applicableIfTextLongerThan:300,shouldNotAppearInShortText:!1,cornerstoneContent:!1};this.identifier="subheadingsTooLong",this._config=(0,s.merge)(t,e)}checkTextBeforeFirstSubheadingLength(e){let t={isLong:!1,isVeryLong:!1};if(e.length>0&&""===e[0].subheading&&""!==e[0].text){const r=e[0].countLength;t={isLong:(0,l.inRangeEndInclusive)(r,this._config.parameters.slightlyTooMany,this._config.parameters.farTooMany),isVeryLong:r>this._config.parameters.farTooMany}}return t}getTextLength(e,t){const r=t.getHelper("customCountLength");let n=e.getText();return n=(0,f.default)(n),n=(0,g.filterShortcodesFromHTML)(n,e._attributes&&e._attributes.shortcodes),r?r(n):(0,d.default)(n).length}getResult(e,t){this._subheadingTextsLength=t.getResearch("getSubheadingTextLengths"),t.getConfig("subheadingsTooLong")&&(this._config=this.getLanguageSpecificConfig(t)),t.getConfig("countCharacters")&&(this._config.countTextIn=(0,n.__)("characters","wordpress-seo"));const r=this.checkTextBeforeFirstSubheadingLength(this._subheadingTextsLength);this._subheadingTextsLength=this._subheadingTextsLength.sort((function(e,t){return t.countLength-e.countLength}));const s=new h.default;s.setIdentifier(this.identifier),this._hasSubheadings=this.hasSubheadings(e),this._tooLongTextsNumber=this.getTooLongSubheadingTexts().length,this._textLength=this.getTextLength(e,t);const i=this.calculateResult(r);return i.resultTextPlural=i.resultTextPlural||"",s.setScore(i.score),s.setText(i.resultText),s.setHasMarks(i.hasMarks),s}getLanguageSpecificConfig(e){const t=this._config,r=e.getConfig("subheadingsTooLong");return!0===t.cornerstoneContent&&r.hasOwnProperty("cornerstoneParameters")?(0,s.merge)(t,r.cornerstoneParameters):(0,s.merge)(t,r.defaultParameters)}isApplicable(e,t){return this._config.shouldNotAppearInShortText?(t.getConfig("subheadingsTooLong")&&(this._config=this.getLanguageSpecificConfig(t)),this.getTextLength(e,t)>this._config.applicableIfTextLongerThan):this.hasEnoughContentForAssessment(e)}hasSubheadings(e){return(0,c.getSubheadings)(e.getText()).length>0}getMarks(){const e=(0,s.map)(this.getTooLongSubheadingTexts(),(function({subheading:e}){e=(0,p.stripFullTags)(e);const t=(0,i.default)(e);return new a.default({original:e,marked:t,fieldsToMark:["heading"]})}));return(0,s.filter)(e,(e=>""!==e.getOriginal()))}getTooLongSubheadingTexts(){return(0,s.filter)(this._subheadingTextsLength,function(e){return e.countLength>this._config.parameters.recommendedMaximumLength}.bind(this))}calculateResult(e){if(this._textLength>this._config.applicableIfTextLongerThan){if(this._hasSubheadings){if(e.isLong&&this._tooLongTextsNumber<2)return{score:this._config.scores.okSubheadings,hasMarks:!1,resultText:(0,n.sprintf)( +/* translators: %1$s and %3$s expand to a link to https://yoa.st/headings, %2$s expands to the link closing tag. + * %4$s expands to the recommended number of words following a subheading, + * %5$s expands to the word 'words' or 'characters'. + */ +(0,n.__)("%1$sSubheading distribution%2$s: The beginning of your text is longer than %4$s %5$s and is not separated by any subheadings. %3$sAdd subheadings to improve readability.%2$s","wordpress-seo"),this._config.urlTitle,"",this._config.urlCallToAction,this._config.parameters.recommendedMaximumLength,this._config.countTextIn)};if(e.isVeryLong&&this._tooLongTextsNumber<2)return{score:this._config.scores.badSubheadings,hasMarks:!1,resultText:(0,n.sprintf)( +/* translators: %1$s and %3$s expand to a link to https://yoa.st/headings, %2$s expands to the link closing tag. + * %4$s expands to the recommended number of words following a subheading, + * %5$s expands to the word 'words' or 'characters'. + */ +(0,n.__)("%1$sSubheading distribution%2$s: The beginning of your text is longer than %4$s %5$s and is not separated by any subheadings. %3$sAdd subheadings to improve readability.%2$s","wordpress-seo"),this._config.urlTitle,"",this._config.urlCallToAction,this._config.parameters.recommendedMaximumLength,this._config.countTextIn)};const t=this._subheadingTextsLength[0].countLength;return t<=this._config.parameters.slightlyTooMany?{score:this._config.scores.goodSubheadings,hasMarks:!1,resultText:(0,n.sprintf)( +// translators: %1$s expands to a link to https://yoa.st/headings, %2$s expands to the link closing tag. +(0,n.__)("%1$sSubheading distribution%2$s: Great job!","wordpress-seo"),this._config.urlTitle,"")}:(0,l.inRangeEndInclusive)(t,this._config.parameters.slightlyTooMany,this._config.parameters.farTooMany)?{score:this._config.scores.okSubheadings,hasMarks:!0,resultText:(0,n.sprintf)( +/* translators: %1$s and %5$s expand to a link on yoast.com, %3$d to the number of text sections + not separated by subheadings, %4$d expands to the recommended number of words or characters following a + subheading, %6$s expands to the word 'words' or 'characters', %2$s expands to the link closing tag. */ +(0,n._n)("%1$sSubheading distribution%2$s: %3$d section of your text is longer than %4$d %6$s and is not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.","%1$sSubheading distribution%2$s: %3$d sections of your text are longer than %4$d %6$s and are not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.",this._tooLongTextsNumber,"wordpress-seo"),this._config.urlTitle,"",this._tooLongTextsNumber,this._config.parameters.recommendedMaximumLength,this._config.urlCallToAction,this._config.countTextIn)}:{score:this._config.scores.badSubheadings,hasMarks:!0,resultText:(0,n.sprintf)( +/* translators: %1$s and %5$s expand to a link on yoast.com, %3$d to the number of text sections + not separated by subheadings, %4$d expands to the recommended number of words or characters following a + subheading, %6$s expands to the word 'words' or 'characters', %2$s expands to the link closing tag. */ +(0,n._n)("%1$sSubheading distribution%2$s: %3$d section of your text is longer than %4$d %6$s and is not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.","%1$sSubheading distribution%2$s: %3$d sections of your text are longer than %4$d %6$s and are not separated by any subheadings. %5$sAdd subheadings to improve readability%2$s.",this._tooLongTextsNumber,"wordpress-seo"),this._config.urlTitle,"",this._tooLongTextsNumber,this._config.parameters.recommendedMaximumLength,this._config.urlCallToAction,this._config.countTextIn)}}return{score:this._config.scores.badLongTextNoSubheadings,hasMarks:!1,resultText:(0,n.sprintf)(/* translators: %1$s and %3$s expand to a link to https://yoa.st/headings, %2$s expands to the link closing tag. */ +(0,n.__)("%1$sSubheading distribution%2$s: You are not using any subheadings, although your text is rather long. %3$sTry and add some subheadings%2$s.","wordpress-seo"),this._config.urlTitle,"",this._config.urlCallToAction)}}return this._hasSubheadings?{score:this._config.scores.goodSubheadings,hasMarks:!1,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link to https://yoa.st/headings, %2$s expands to the link closing tag. */ +(0,n.__)("%1$sSubheading distribution%2$s: Great job!","wordpress-seo"),this._config.urlTitle,"")}:{score:this._config.scores.goodShortTextNoSubheadings,hasMarks:!1,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link to https://yoa.st/headings, %2$s expands to the link closing tag. */ +(0,n.__)("%1$sSubheading distribution%2$s: You are not using any subheadings, but your text is short enough and probably doesn't need them.","wordpress-seo"),this._config.urlTitle,"")}}}t.default=_},57749:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=d(r(9017)),a=d(r(41054)),o=d(r(15010)),l=d(r(73054)),u=r(49061),c=r(62240);function d(e){return e&&e.__esModule?e:{default:e}}class h extends i.default{constructor(e={}){super();const t={urlTitle:(0,u.createAnchorOpeningTag)("https://yoa.st/assessment-alignment"),urlCallToAction:(0,u.createAnchorOpeningTag)("https://yoa.st/assessment-alignment-cta"),scores:{bad:2}};this._config=(0,s.merge)(t,e),this.identifier="textAlignment"}getResult(e,t){const r=t.getResearch("getLongCenterAlignedTexts").length,n=new l.default;if(0===r)return n;const s=this.calculateResult(e,r);return n.setScore(s.score),n.setText(s.resultText),n.setHasMarks(!0),n}getMarks(e,t){return t.getResearch("getLongCenterAlignedTexts").map((e=>{const t=e.text,r=e.elementType,n=(0,o.default)((0,c.stripBlockTagsAtStartEnd)(t));return new a.default({original:t,marked:n,fieldsToMark:r})}))}isApplicable(e,t){return this.hasEnoughContentForAssessment(e)&&t.hasResearch("getLongCenterAlignedTexts")}calculateResult(e,t){if(t>0)return"RTL"===e.getWritingDirection()?{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag, + %4$s expands to the number of the long center-aligned sections in the text */ +(0,n._n)("%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it right-aligned%3$s.","%1$sAlignment%3$s: There are %4$s long sections of center-aligned text. %2$sWe recommend making them right-aligned%3$s.",t,"wordpress-seo-premium"),this._config.urlTitle,this._config.urlCallToAction,"",t)}:{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag, + %4$s expands to the number of the long center-aligned sections in the text */ +(0,n._n)("%1$sAlignment%3$s: There is a long section of center-aligned text. %2$sWe recommend making it left-aligned%3$s.","%1$sAlignment%3$s: There are %4$s long sections of center-aligned text. %2$sWe recommend making them left-aligned%3$s.",t,"wordpress-seo-premium"),this._config.urlTitle,this._config.urlCallToAction,"",t)}}}t.default=h},35780:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(33140),i=l(r(73054)),a=l(r(9017)),o=r(92819);function l(e){return e&&e.__esModule?e:{default:e}}class u extends a.default{constructor(e={}){super();const t={urlTitle:(0,s.createAnchorOpeningTag)("https://yoa.st/35h"),urlCallToAction:(0,s.createAnchorOpeningTag)("https://yoa.st/35i")};this.identifier="textPresence",this._config=(0,o.merge)(t,e)}getResult(e){if(!this.hasEnoughContentForAssessment(e)){const e=new i.default;return e.setText((0,n.sprintf)( +/* translators: %1$s and %3$s expand to links to articles on Yoast.com, + %2$s expands to the anchor end tag*/ +(0,n.__)("%1$sNot enough content%2$s: %3$sPlease add some content to enable a good analysis%2$s.","wordpress-seo"),this._config.urlTitle,"",this._config.urlCallToAction)),e.setScore(3),e}return new i.default}}t.default=u},62318:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=m(r(17179)),a=r(76663),o=r(33140),l=r(62240),u=m(r(73054)),c=m(r(41054)),d=m(r(15010)),h=m(r(9017)),p=m(r(96908)),f=m(r(1105)),g=r(29866);function m(e){return e&&e.__esModule?e:{default:e}}class _ extends h.default{constructor(e={}){super();const t={urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/34z"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/35a"),applicableIfTextLongerThan:200};this.identifier="textTransitionWords",this._config=(0,s.merge)(t,e)}calculateTransitionWordPercentage(e){return 0===e.transitionWordSentences||0===e.totalSentences?0:(0,i.default)(e.transitionWordSentences/e.totalSentences*100)}calculateScoreFromPercentage(e){return e<20?3:(0,a.inRangeStartInclusive)(e,20,30)?6:9}calculateTransitionWordResult(e){const t=this.calculateTransitionWordPercentage(e),r=this.calculateScoreFromPercentage(t),s=t>0;return r<7&&0===t?{score:(0,i.default)(r),hasMarks:s,text:(0,n.sprintf)(/* translators: %1$s and %3$s expand to a link to yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sTransition words%2$s: None of the sentences contain transition words. %3$sUse some%2$s.","wordpress-seo"),this._config.urlTitle,"",this._config.urlCallToAction)}:r<7?{score:(0,i.default)(r),hasMarks:s,text:(0,n.sprintf)( +/* translators: %1$s and %4$s expand to a link to yoast.com, %2$s expands to the anchor end tag, + %3$s expands to the percentage of sentences containing transition words */ +(0,n.__)("%1$sTransition words%2$s: Only %3$s of the sentences contain transition words, which is not enough. %4$sUse more of them%2$s.","wordpress-seo"),this._config.urlTitle,"",t+"%",this._config.urlCallToAction)}:{score:(0,i.default)(r),hasMarks:s,text:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$sTransition words%2$s: Well done!","wordpress-seo"),this._config.urlTitle,"")}}getResult(e,t){const r=t.getResearch("findTransitionWords"),n=this.calculateTransitionWordResult(r),s=new u.default;return s.setScore(n.score),s.setText(n.text),s.setHasMarks(n.hasMarks),s}getMarks(e,t){const r=t.getResearch("findTransitionWords");return(0,s.map)(r.sentenceResults,(function(e){let t=e.sentence;return t=(0,l.stripIncompleteTags)(t),new c.default({original:t,marked:(0,d.default)(t)})}))}isApplicable(e,t){const r=t.getHelper("customCountLength"),n=t.getConfig("assessmentApplicability").transitionWords;n&&(this._config.applicableIfTextLongerThan=n);let s=e.getText();return s=(0,p.default)(s),s=(0,g.filterShortcodesFromHTML)(s,e._attributes&&e._attributes.shortcodes),(r?r(s):(0,f.default)(s).length)>=this._config.applicableIfTextLongerThan&&t.hasResearch("findTransitionWords")}}t.default=_},50791:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=c(r(9017)),a=c(r(41054)),o=c(r(73054)),l=r(49061),u=r(48024);function c(e){return e&&e.__esModule?e:{default:e}}class d extends i.default{constructor(e={}){super(), +/* + * translators: This is the name of the 'Word complexity' readability assessment. + * It appears before the feedback in the analysis, for example in the feedback string: + * "Word complexity: You are not using too many complex words, which makes your text easy to read. Good job!" + */ +this.name=(0,n.__)("Word complexity","wordpress-seo-premium"),this.identifier="wordComplexity",this._config=(0,s.merge)({scores:{acceptableAmount:6,goodAmount:9},urlTitle:"https://yoa.st/4ls",urlCallToAction:"https://yoa.st/4lt"},e),this._config.urlTitle=(0,l.createAnchorOpeningTag)(this._config.urlTitle),this._config.urlCallToAction=(0,l.createAnchorOpeningTag)(this._config.urlCallToAction)}getResult(e,t){this._wordComplexity=t.getResearch("wordComplexity");const r=this.calculateResult(),n=new o.default;return n.setScore(r.score),n.setText(r.resultText),n.setHasMarks(r.hasMarks),n}calculateResult(){const e=this._wordComplexity.percentage,t=e>0,r=this._config.urlTitle+this.name+"";return e<10?{score:this._config.scores.goodAmount,hasMarks:t,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Word complexity" assessment (translated to the current language) + and links to an article on yoast.com.*/ +(0,n.__)("%1$s: You are not using too many complex words, which makes your text easy to read. Good job!","wordpress-seo-premium"),r)}:{score:this._config.scores.acceptableAmount,hasMarks:t,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Word complexity" assessment (translated to the current language) + and links to an article on yoast.com. %2$s expand to the percentage of the complex words found in the text. + %3$s expand to a link on yoast.com, %4$s expands to the anchor end tag. */ +(0,n.__)("%1$s: %2$s of the words in your text are considered complex. %3$sTry to use shorter and more familiar words to improve readability%4$s.","wordpress-seo-premium"),r,e+"%",this._config.urlCallToAction,"")}}getMarks(e,t){const r=t.getResearch("wordComplexity").complexWords,n=t.getHelper("matchWordCustomHelper"),s=[];return r.forEach((e=>{const t=e.complexWords,r=e.sentence;t.length>0&&s.push(new a.default({original:r,marked:(0,u.collectMarkingsInSentence)(r,t,n)}))})),s}isApplicable(e,t){return this.hasEnoughContentForAssessment(e)&&t.hasResearch("wordComplexity")}}t.default=d},36832:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={scores:{onlyFunctionWords:0},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/functionwordskeyphrase-1"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/functionwordskeyphrase-2")};this.identifier="functionWordsInKeyphrase",this._config=(0,s.merge)(t,e)}getResult(e,t){this._functionWordsInKeyphrase=t.getResearch("functionWordsInKeyphrase"),this._keyword=(0,s.escape)(e.getKeyword());const r=new o.default;return this._functionWordsInKeyphrase&&(r.setScore(this._config.scores.onlyFunctionWords),r.setText((0,n.sprintf)( +/** + * translators: + * %1$s and %2$s expand to links on yoast.com, + * %3$s expands to the anchor end tag, + * %4$s expands to the focus keyphrase of the article. + */ +(0,n.__)('%1$sFunction words in keyphrase%3$s: Your keyphrase "%4$s" contains function words only. %2$sLearn more about what makes a good keyphrase.%3$s',"wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"",this._keyword)),r.setHasJumps(!0),r.setEditFieldName((0,n.__)("keyphrase","wordpress-seo"))),r}isApplicable(e,t){return e.hasKeyword()&&t.hasResearch("functionWordsInKeyphrase")}}t.default=u},40826:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=l(r(73054)),o=r(49061);function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={scores:{bad:3,good:9},urlTitle:(0,o.createAnchorOpeningTag)(""),urlCallToAction:(0,o.createAnchorOpeningTag)("")};this.identifier="imageAltTags",this._config=(0,s.merge)(t,e)}getResult(e,t){this.altTagsProperties=t.getResearch("altTagCount"),this.imageCount=t.getResearch("imageCount");const r=this.calculateResult(),n=new a.default;return n.setScore(r.score),n.setText(r.resultText),n}isApplicable(e,t){return this.imageCount=t.getResearch("imageCount"),e.hasText()&&this.imageCount>0}calculateResult(){const e=this.altTagsProperties.noAlt;return e===this.imageCount?{score:this._config.scores.bad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sImage alt tags%3$s: None of the images has alt attributes. %2$sAdd alt attributes to your images%3$s!","yoast-woo-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:e>0?{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: %3$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag, + * %1$d expands to the number of images without alt tags, + * %2$d expands to the number of images found in the text, */ +(0,n._n)("%3$sImage alt tags%5$s: %1$d image out of %2$d doesn't have alt attributes. %4$sAdd alt attributes to your images%5$s!","%3$sImage alt tags%5$s: %1$d images out of %2$d don't have alt attributes. %4$sAdd alt attributes to your images%5$s!",e,"yoast-woo-seo"),e,this.imageCount,this._config.urlTitle,this._config.urlCallToAction,"")}:{score:this._config.scores.good,resultText:(0,n.sprintf)( +/* translators: %1$s expands to a link on yoast.com, + * %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sImage alt tags%2$s: All images have alt attributes. Good job!","yoast-woo-seo"),this._config.urlTitle,"")}}}t.default=u},38754:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=r(76663),a=u(r(9017)),o=r(33140),l=u(r(73054));function u(e){return e&&e.__esModule?e:{default:e}}class c extends a.default{constructor(e={},t=!1){super();const r={scores:{bad:3,good:9},recommendedCount:1,urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/4f4"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/4f5")};this.identifier="images",this._config=(0,s.merge)(r,e),this._countVideos=t}getResult(e,t){this.imageCount=t.getResearch("imageCount"),this.videoCount=t.getResearch("videoCount");const r=this.calculateResult(),n=new l.default;return n.setScore(r.score),n.setText(r.resultText),n}isApplicable(e){return e.hasText()}calculateResult(){const e=this._countVideos?this.imageCount+this.videoCount:this.imageCount;if(0===e)return this._countVideos?{score:this._config.scores.bad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sImages and videos%3$s: No images or videos appear on this page. %2$sAdd some%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:{score:this._config.scores.bad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sImages%3$s: No images appear on this page. %2$sAdd some%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")};if(this._config.scores.okay){if((0,i.inRangeStartEndInclusive)(e,1,3)&&!this._countVideos)return{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: %3$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag, + * %1$d expands to the number of images found in the text, + * %2$d expands to the recommended number of images in the text, */ +(0,n._n)("%3$sImages%5$s: Only %1$d image appears on this page. We recommend at least %2$d. %4$sAdd more relevant images%5$s!","%3$sImages%5$s: Only %1$d images appear on this page. We recommend at least %2$d. %4$sAdd more relevant images%5$s!",e,"wordpress-seo"),e,this._config.recommendedCount,this._config.urlTitle,this._config.urlCallToAction,"")};if((0,i.inRangeStartEndInclusive)(e,1,3)&&this._countVideos)return{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: %3$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag, + * %1$d expands to the number of images found in the text, + * %2$d expands to the recommended number of images in the text, */ +(0,n._n)("%3$sImages and videos%5$s: Only %1$d image or video appears on this page. We recommend at least %2$d. %4$sAdd more relevant images or videos%5$s!","%3$sImages and videos%5$s: Only %1$d images or videos appear on this page. We recommend at least %2$d. %4$sAdd more relevant images or videos%5$s!",e,"wordpress-seo"),e,this._config.recommendedCount,this._config.urlTitle,this._config.urlCallToAction,"")}}return this._countVideos?{score:this._config.scores.good,resultText:(0,n.sprintf)( +/* translators: %1$s expands to a link on yoast.com, + * %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sImages and videos%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"")}:{score:this._config.scores.good,resultText:(0,n.sprintf)( +/* translators: %1$s expands to a link on yoast.com, + * %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sImages%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"")}}}t.default=c},92922:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={parameters:{recommendedMinimum:1},scores:{allInternalFollow:9,someInternalFollow:8,noneInternalFollow:7,noInternal:3},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/33z"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/34a")};this.identifier="internalLinks",this._config=(0,s.merge)(t,e)}getResult(e,t){this.linkStatistics=t.getResearch("getLinkStatistics");const r=new o.default,n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),r}isApplicable(e){return e.hasText()}calculateResult(){return 0===this.linkStatistics.internalTotal?{score:this._config.scores.noInternal,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sInternal links%3$s: No internal links appear in this page, %2$smake sure to add some%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this.linkStatistics.internalNofollow===this.linkStatistics.internalTotal?{score:this._config.scores.noneInternalFollow,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sInternal links%3$s: The internal links in this page are all nofollowed. %2$sAdd some good internal links%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this.linkStatistics.internalDofollow===this.linkStatistics.internalTotal?{score:this._config.scores.allInternalFollow,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sInternal links%2$s: You have enough internal links. Good job!","wordpress-seo"),this._config.urlTitle,"")}:{score:this._config.scores.someInternalFollow,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sInternal links%2$s: There are both nofollowed and normal internal links on this page. Good job!","wordpress-seo"),this._config.urlTitle,"")}}}t.default=u},90575:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={scores:{good:9,okay:6,bad:3},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/33e"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/33f")};this.identifier="introductionKeyword",this._config=(0,s.merge)(t,e)}getResult(e,t){const r=new o.default;this._firstParagraphMatches=t.getResearch("findKeywordInFirstParagraph");const n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),n.score<9&&r.setHasAIFixes(!0),r}isApplicable(e){return e.hasKeyword()&&e.hasText()}calculateResult(){return this._firstParagraphMatches.foundInOneSentence?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase in introduction%2$s: Well done!","wordpress-seo"),this._config.urlTitle,"")}:this._firstParagraphMatches.foundInParagraph?{score:this._config.scores.okay,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase in introduction%3$s: Your keyphrase or its synonyms appear in the first paragraph of the copy, but not within one sentence. %2$sFix that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:{score:this._config.scores.bad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase in introduction%3$s: Your keyphrase or its synonyms do not appear in the first paragraph. %2$sMake sure the topic is clear immediately%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}}t.default=u},58850:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=d(r(9017)),a=d(r(73054)),o=r(49061),l=d(r(9862)),u=d(r(96908)),c=r(29866);function d(e){return e&&e.__esModule?e:{default:e}}class h extends i.default{constructor(e={}){super(),this.identifier="keyphraseDistribution",this._config=(0,s.merge)({parameters:{goodDistributionScore:30,acceptableDistributionScore:50},scores:{good:9,okay:6,bad:1,consideration:0},urlTitle:"https://yoa.st/33q",urlCallToAction:"https://yoa.st/33u"},e),this._config.urlTitle=(0,o.createAnchorOpeningTag)(this._config.urlTitle),this._config.urlCallToAction=(0,o.createAnchorOpeningTag)(this._config.urlCallToAction)}getResult(e,t){this._keyphraseDistribution=t.getResearch("keyphraseDistribution");const r=new a.default,n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),r.setHasMarks(n.hasMarks),n.score<9&&r.setHasAIFixes(!0),r}calculateResult(){const e=this._keyphraseDistribution.keyphraseDistributionScore,t=this._keyphraseDistribution.sentencesToHighlight.length>0;return 100===e?{score:this._config.scores.consideration,hasMarks:t,resultText:(0,n.sprintf)( +/* translators: %1$s and %2$s expand to links to Yoast.com articles, + %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase distribution%3$s: %2$sInclude your keyphrase or its synonyms in the text so that we can check keyphrase distribution%3$s.","wordpress-seo-premium"),this._config.urlTitle,this._config.urlCallToAction,"")}:e>this._config.parameters.acceptableDistributionScore?{score:this._config.scores.bad,hasMarks:t,resultText:(0,n.sprintf)( +/* translators: %1$s and %2$s expand to links to Yoast.com articles, + %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase distribution%3$s: Very uneven. Large parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.","wordpress-seo-premium"),this._config.urlTitle,this._config.urlCallToAction,"")}:e>this._config.parameters.goodDistributionScore&&e<=this._config.parameters.acceptableDistributionScore?{score:this._config.scores.okay,hasMarks:t,resultText:(0,n.sprintf)( +/* translators: %1$s and %2$s expand to links to Yoast.com articles, + %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase distribution%3$s: Uneven. Some parts of your text do not contain the keyphrase or its synonyms. %2$sDistribute them more evenly%3$s.","wordpress-seo-premium"),this._config.urlTitle,this._config.urlCallToAction,"")}:{score:this._config.scores.good,hasMarks:t,resultText:(0,n.sprintf)(/* translators: %1$s expands to links to Yoast.com articles, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase distribution%2$s: Good job!","wordpress-seo-premium"),this._config.urlTitle,"")}}getMarks(){return this._keyphraseDistribution.sentencesToHighlight}isApplicable(e,t){const r=t.getHelper("memoizedTokenizer");let n=e.getText();n=(0,u.default)(n),n=(0,c.filterShortcodesFromHTML)(n,e._attributes&&e._attributes.shortcodes);const s=(0,l.default)(n,r);return e.hasText()&&e.hasKeyword()&&s.length>=15&&t.hasResearch("keyphraseDistribution")}}t.default=h},8980:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=u(r(9017)),a=r(76663),o=r(33140),l=u(r(73054));function u(e){return e&&e.__esModule?e:{default:e}}class c extends i.default{constructor(e={}){super();const t={parameters:{lowerBoundary:.3,upperBoundary:.75},scores:{withAltGoodNumberOfKeywordMatches:9,withAltTooFewKeywordMatches:6,withAltTooManyKeywordMatches:6,withAltNonKeyword:6,withAlt:6,noAlt:6},urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/4f7"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/4f6")};this.identifier="imageKeyphrase",this._config=(0,s.merge)(t,e)}getResult(e,t){this.imageCount=t.getResearch("imageCount"),this.altProperties=t.getResearch("altTagCount"),this._minNumberOfKeywordMatches=Math.ceil(this.imageCount*this._config.parameters.lowerBoundary),this._maxNumberOfKeywordMatches=Math.floor(this.imageCount*this._config.parameters.upperBoundary);const r=this.calculateResult(),n=new l.default;return n.setScore(r.score),n.setText(r.resultText),n}isApplicable(e,t){return this.imageCount=t.getResearch("imageCount"),e.hasText()&&this.imageCount>0}hasTooFewMatches(){return this.imageCount>4&&this.altProperties.withAltKeyword>0&&this.altProperties.withAltKeyword0||5===this.imageCount&&(0,a.inRangeStartEndInclusive)(this.altProperties.withAltKeyword,2,4)||this.imageCount>4&&(0,a.inRangeStartEndInclusive)(this.altProperties.withAltKeyword,this._minNumberOfKeywordMatches,this._maxNumberOfKeywordMatches)}hasTooManyMatches(){return this.imageCount>4&&this.altProperties.withAltKeyword>this._maxNumberOfKeywordMatches}calculateResult(){return this.altProperties.withAlt>0?{score:this._config.scores.withAlt,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sImage Keyphrase%3$s: Images on this page have alt attributes, but you have not set your keyphrase. %2$sFix that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this.altProperties.withAltNonKeyword>0&&0===this.altProperties.withAltKeyword?{score:this._config.scores.withAltNonKeyword,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sImage Keyphrase%3$s: Images on this page do not have alt attributes with at least half of the words from your keyphrase. %2$sFix that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this.hasTooFewMatches()?{score:this._config.scores.withAltTooFewKeywordMatches,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of images containing an alt attribute with the keyword, + * %2$d expands to the total number of images, %3$s and %4$s expand to links on yoast.com, + * %5$s expands to the anchor end tag. */ +(0,n._n)("%3$sImage Keyphrase%5$s: Out of %2$d images on this page, only %1$d has an alt attribute that reflects the topic of your text. %4$sAdd your keyphrase or synonyms to the alt tags of more relevant images%5$s!","%3$sImage Keyphrase%5$s: Out of %2$d images on this page, only %1$d have alt attributes that reflect the topic of your text. %4$sAdd your keyphrase or synonyms to the alt tags of more relevant images%5$s!",this.altProperties.withAltKeyword,"wordpress-seo"),this.altProperties.withAltKeyword,this.imageCount,this._config.urlTitle,this._config.urlCallToAction,"")}:this.hasGoodNumberOfMatches()?{score:this._config.scores.withAltGoodNumberOfKeywordMatches,resultText:(0,n.sprintf)( +/* translators: %1$s expands to a link on yoast.com, + * %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sImage Keyphrase%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"")}:this.hasTooManyMatches()?{score:this._config.scores.withAltTooManyKeywordMatches,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of images containing an alt attribute with the keyword, + * %2$d expands to the total number of images, %3$s and %4$s expand to a link on yoast.com, + * %5$s expands to the anchor end tag. */ +(0,n.__)("%3$sImage Keyphrase%5$s: Out of %2$d images on this page, %1$d have alt attributes with words from your keyphrase or synonyms. That's a bit much. %4$sOnly include the keyphrase or its synonyms when it really fits the image%5$s.","wordpress-seo"),this.altProperties.withAltKeyword,this.imageCount,this._config.urlTitle,this._config.urlCallToAction,"")}:{score:this._config.scores.noAlt,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sImage Keyphrase%3$s: Images on this page do not have alt attributes that reflect the topic of your text. %2$sAdd your keyphrase or synonyms to the alt tags of relevant images%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}}t.default=c},46787:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=u(r(67404)),a=u(r(9017)),o=r(33140),l=u(r(73054));function u(e){return e&&e.__esModule?e:{default:e}}class c extends a.default{constructor(e={}){super();const t={parameters:{recommendedPosition:0},scores:{good:9,okay:6,bad:2},urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/33g"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/33h"),feedbackStrings:{bad:(0,n.__)("For the best SEO results write the exact match of your keyphrase in the SEO title, and put the keyphrase at the beginning of the title","wordpress-seo")}};this.identifier="keyphraseInSEOTitle", +/* translators: This is the name of the 'Keyphrase in SEO title' SEO assessment. + It appears before the feedback in the analysis, for example in the feedback string: + "Keyphrase in SEO title: The focus keyphrase appears at the beginning of the SEO title. Good job!" */ +this.name=(0,n.__)("Keyphrase in SEO title","wordpress-seo"),this._config=(0,s.merge)(t,e)}getResult(e,t){const r=(0,i.default)(e.getLocale());this._keyphraseMatches=t.getResearch("findKeyphraseInSEOTitle"),this._keyphrase=(0,s.escape)(e.getKeyword());const a=new l.default,o=this.calculateResult(this._keyphrase,r);return a.setScore(o.score),a.setText(o.resultText),a.getScore()<9&&(a.setHasJumps(!0),a.setEditFieldName((0,n.__)("SEO title","wordpress-seo"))),a}isApplicable(e){return e.hasKeyword()&&e.hasTitle()}calculateResult(e,t){const r=this._config.feedbackStrings;"ja"===t&&(r.bad=(0,n.__)("For the best SEO results include all words of your keyphrase in the SEO title, and put the keyphrase at the beginning of the title","wordpress-seo"));const s=this._keyphraseMatches.exactMatchFound,i=this._keyphraseMatches.position,a=this._keyphraseMatches.allWordsFound,o=this._keyphraseMatches.exactMatchKeyphrase,l=this._config.urlTitle+this.name+"";return!0===s?0===i?{score:this._config.scores.good,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language) + and links to an article on yoast.com. */ +(0,n.__)("%1$s: The exact match of the focus keyphrase appears at the beginning of the SEO title. Good job!","wordpress-seo"),l)}:{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language) + and links to an article on yoast.com. %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$s: The exact match of the focus keyphrase appears in the SEO title, but not at the beginning. %2$sMove it to the beginning for the best results%3$s.","wordpress-seo"),l,this._config.urlCallToAction,"")}:a?"ja"===t?0===i?{score:this._config.scores.good,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language) + and links to an article on yoast.com. */ +(0,n.__)("%1$s: The focus keyphrase appears at the beginning of the SEO title. Good job!","wordpress-seo"),l,"")}:{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language) + and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$s: Title does not begin with the focus keyphrase. %2$sMove your focus keyphrase to the beginning of the title%3$s.","wordpress-seo"),l,this._config.urlCallToAction,"")}:{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language) + and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$s: Does not contain the exact match. %2$sTry to write the exact match of your keyphrase in the SEO title and put it at the beginning of the title%3$s.","wordpress-seo"),l,this._config.urlCallToAction,"")}:o?{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language) + and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$s: Does not contain the exact match. %2$sTry to write the exact match of your keyphrase in the SEO title and put it at the beginning of the title%3$s.","wordpress-seo"),l,this._config.urlCallToAction,"",e)}:{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: %1$s expands to the title of the "Keyphrase in SEO title" assessment (translated to the current language) + and links to an article on yoast.com. %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag, + %4$s expands to the keyphrase of the article, %5$s expands to the call to action text. */ +(0,n.__)('%1$s: Not all the words from your keyphrase "%4$s" appear in the SEO title. %2$s%5$s%3$s.',"wordpress-seo"),l,this._config.urlCallToAction,"",e,r.bad)}}}t.default=c},99815:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=c(r(9017)),a=r(49061),o=c(r(73054)),l=r(76663),u=c(r(83927));function c(e){return e&&e.__esModule?e:{default:e}}class d extends i.default{constructor(e,t=!1){super(),this.defaultConfig={parameters:{recommendedMinimum:1,recommendedMaximum:4,acceptableMaximum:8},parametersNoFunctionWordSupport:{recommendedMaximum:6,acceptableMaximum:9},scores:{veryBad:-999,bad:3,okay:6,good:9},countTextIn:{singular:(0,n.__)("word","wordpress-seo"),plural:(0,n.__)("words","wordpress-seo")},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/33i"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/33j"),isRelatedKeyphrase:!1},this.identifier="keyphraseLength",this._config=(0,s.merge)(this.defaultConfig,e),this._isProductPage=t}getResult(e,t){this._keyphraseLengthData=t.getResearch("keyphraseLength");const r=new o.default;t.getConfig("countCharacters")&&(this._config.countTextIn.singular=(0,n.__)("character","wordpress-seo"),this._config.countTextIn.plural=(0,n.__)("characters","wordpress-seo"));const i=e.getKeyword();this._keyphraseLengthData.functionWords.length>0&&!(0,u.default)(i).exactMatchRequested&&(this._config.countTextIn.singular=(0,n.__)("content word","wordpress-seo"),this._config.countTextIn.plural=(0,n.__)("content words","wordpress-seo")),t.getConfig("keyphraseLength")?this._config=this.getCustomConfig(t):0===this._keyphraseLengthData.functionWords.length&&(this._config.parameters=(0,s.merge)({},this._config.parameters,this._config.parametersNoFunctionWordSupport)),this._boundaries=this._config.parameters;const a=this.calculateResult();return r.setScore(a.score),r.setText(a.resultText),r.getScore()<9&&(r.setHasJumps(!0),r.setEditFieldName((0,n.__)("keyphrase","wordpress-seo"))),r}getCustomConfig(e){const t=e.getConfig("keyphraseLength");return this._isProductPage&&t.hasOwnProperty("productPages")?(0,s.merge)(this._config,t.productPages):(0,s.merge)(this._config,t.defaultAnalysis)}calculateResultForProduct(){return 0===this._keyphraseLengthData.keyphraseLength?this._config.isRelatedKeyphrase?{score:this._config.scores.veryBad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase length%3$s: %2$sSet a keyphrase in order to calculate your SEO score%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:{score:this._config.scores.veryBad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase length%3$s: No focus keyphrase was set for this page. %2$sSet a keyphrase in order to calculate your SEO score%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this._keyphraseLengthData.keyphraseLength<=this._boundaries.acceptableMinimum?{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: + %1$d expands to the number of words / characters in the keyphrase, + %2$d expands to the recommended maximum of words / characters in the keyphrase, + %3$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag, + %6$s expands to the word 'word' or 'character' or 'content word', + %7$s expands to the word 'words' or 'characters' or 'content words'. */ +(0,n._n)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's way less than the recommended minimum of %2$d %7$s. %4$sMake it longer%5$s!","%3$sKeyphrase length%5$s: The keyphrase contains %1$d %7$s. That's way less than the recommended minimum of %2$d %7$s. %4$sMake it longer%5$s!",this._keyphraseLengthData.keyphraseLength,"wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._config.urlTitle,this._config.urlCallToAction,"",this._config.countTextIn.singular,this._config.countTextIn.plural)}:this._keyphraseLengthData.keyphraseLength>this._boundaries.acceptableMaximum?{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: + %1$d expands to the number of words / characters in the keyphrase, + %2$d expands to the recommended maximum of words / characters in the keyphrase, + %3$s and %4$s expand to links on yoast.com, + %5$s expands to the anchor end tag, + %6$s expands to the word 'words' or 'characters' or 'content words'. */ +(0,n.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's way more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"",this._config.countTextIn.plural)}:(0,s.inRange)(this._keyphraseLengthData.keyphraseLength,this._boundaries.acceptableMinimum,this._boundaries.recommendedMinimum)?{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: + %1$d expands to the number of words / characters in the keyphrase, + %2$d expands to the recommended maximum of words / characters in the keyphrase, + %3$s and %4$s expand to links on yoast.com, + %5$s expands to the anchor end tag, + %6$s expands to the word 'words' or 'characters' or 'content words'. */ +(0,n.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's less than the recommended minimum of %2$d %6$s. %4$sMake it longer%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._config.urlTitle,this._config.urlCallToAction,"",this._config.countTextIn.plural)}:(0,l.inRangeEndInclusive)(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._boundaries.acceptableMaximum)?{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: + %1$d expands to the number of words / characters in the keyphrase, + %2$d expands to the recommended maximum of words / characters in the keyphrase, + %3$s and %4$s expand to links on yoast.com, + %5$s expands to the anchor end tag, + %6$s expands to the word 'words' or 'characters' or 'content words'. */ +(0,n.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"",this._config.countTextIn.plural)}:(0,l.inRangeStartEndInclusive)(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._boundaries.recommendedMaximum)?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase length%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"")}:void 0}calculateResult(){return this._isProductPage?this.calculateResultForProduct():this._keyphraseLengthData.keyphraseLength")}:{score:this._config.scores.veryBad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase length%3$s: No focus keyphrase was set for this page. %2$sSet a keyphrase in order to calculate your SEO score%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:(0,s.inRange)(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMinimum,this._boundaries.recommendedMaximum+1)?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase length%2$s: Good job!","wordpress-seo"),this._config.urlTitle,"")}:(0,s.inRange)(this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum+1,this._boundaries.acceptableMaximum+1)?{score:this._config.scores.okay,resultText:(0,n.sprintf)( +/* translators: + %1$d expands to the number of words / characters in the keyphrase, + %2$d expands to the recommended maximum of words / characters in the keyphrase, + %3$s and %4$s expand to links on yoast.com, + %5$s expands to the anchor end tag, + %6$s expands to the word 'words' or 'characters' or 'content words'. */ +(0,n.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"",this._config.countTextIn.plural)}:{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/* translators: + %1$d expands to the number of words / characters in the keyphrase, + %2$d expands to the recommended maximum of words / characters in the keyphrase, + %3$s and %4$s expand to links on yoast.com, + %5$s expands to the anchor end tag, + %6$s expands to the word 'words' or 'characters' or 'content words'. */ +(0,n.__)("%3$sKeyphrase length%5$s: The keyphrase contains %1$d %6$s. That's way more than the recommended maximum of %2$d %6$s. %4$sMake it shorter%5$s!","wordpress-seo"),this._keyphraseLengthData.keyphraseLength,this._boundaries.recommendedMaximum,this._config.urlTitle,this._config.urlCallToAction,"",this._config.countTextIn.plural)}}}t.default=d},70966:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.KeywordDensityAssessment=t.KeyphraseDensityAssessment=void 0;var n=r(65736),s=r(92819),i=h(r(68055)),a=h(r(9017)),o=h(r(73054)),l=r(76663),u=r(49061),c=h(r(4913)),d=h(r(60914));function h(e){return e&&e.__esModule?e:{default:e}}class p extends a.default{constructor(e={}){super();const t={parameters:{noWordForms:{overMaximum:4,maximum:3,minimum:.5},multipleWordForms:{overMaximum:4,maximum:3.5,minimum:.5}},scores:{wayOverMaximum:-50,overMaximum:-10,correctDensity:9,underMinimum:4},urlTitle:(0,u.createAnchorOpeningTag)("https://yoa.st/33v"),urlCallToAction:(0,u.createAnchorOpeningTag)("https://yoa.st/33w"),applicableIfTextLongerThan:100};this.identifier="keyphraseDensity",this._config=(0,s.merge)(t,e)}setBoundaries(e,t,r){this._hasMorphologicalForms?this._boundaries=this._config.parameters.multipleWordForms:this._boundaries=this._config.parameters.noWordForms,this._minRecommendedKeyphraseCount=(0,i.default)(e,t,this._boundaries.minimum,"min",r),this._maxRecommendedKeyphraseCount=(0,i.default)(e,t,this._boundaries.maximum,"max",r)}getResult(e,t){const r=t.getHelper("getWordsCustomHelper");this._keyphraseCount=t.getResearch("getKeyphraseCount");const n=this._keyphraseCount.keyphraseLength,s=new o.default;this._keyphraseDensity=t.getResearch("getKeyphraseDensity"),this._hasMorphologicalForms=!1!==t.getData("morphology"),this.setBoundaries(e,n,r),this._keyphraseDensity=this._keyphraseDensity*(0,c.default)(n);const i=this.calculateResult();return s.setScore(i.score),s.setText(i.resultText),s.setHasMarks(this._keyphraseCount.count>0),i.score===this._config.scores.underMinimum&&s.setHasAIFixes(!0),s}hasNoMatches(){return 0===this._keyphraseCount.count}hasTooFewMatches(){return(0,l.inRangeStartInclusive)(this._keyphraseDensity,0,this._boundaries.minimum)||1===this._keyphraseCount.count}hasGoodNumberOfMatches(){return(0,l.inRangeStartEndInclusive)(this._keyphraseDensity,this._boundaries.minimum,this._boundaries.maximum)||2===this._keyphraseCount.count&&this._minRecommendedKeyphraseCount<=2}hasTooManyMatches(){return(0,l.inRangeEndInclusive)(this._keyphraseDensity,this._boundaries.maximum,this._boundaries.overMaximum)}calculateResult(){return this.hasNoMatches()?{score:this._config.scores.underMinimum,resultText:(0,n.sprintf)( +/* translators: + %1$s and %4$s expand to links to Yoast.com, + %2$s expands to the anchor end tag, + %3$d expands to the recommended minimal number of times the keyphrase should occur in the text. */ +(0,n.__)("%1$sKeyphrase density%2$s: The keyphrase was found 0 times. That's less than the recommended minimum of %3$d times for a text of this length. %4$sFocus on your keyphrase%2$s!","wordpress-seo"),this._config.urlTitle,"",this._minRecommendedKeyphraseCount,this._config.urlCallToAction)}:this.hasTooFewMatches()?{score:this._config.scores.underMinimum,resultText:(0,n.sprintf)( +/* translators: + %1$s and %4$s expand to links to Yoast.com, + %2$s expands to the anchor end tag, + %3$d expands to the recommended minimal number of times the keyphrase should occur in the text, + %5$d expands to the number of times the keyphrase occurred in the text. */ +(0,n._n)("%1$sKeyphrase density%2$s: The keyphrase was found %5$d time. That's less than the recommended minimum of %3$d times for a text of this length. %4$sFocus on your keyphrase%2$s!","%1$sKeyphrase density%2$s: The keyphrase was found %5$d times. That's less than the recommended minimum of %3$d times for a text of this length. %4$sFocus on your keyphrase%2$s!",this._keyphraseCount.count,"wordpress-seo"),this._config.urlTitle,"",this._minRecommendedKeyphraseCount,this._config.urlCallToAction,this._keyphraseCount.count)}:this.hasGoodNumberOfMatches()?{score:this._config.scores.correctDensity,resultText:(0,n.sprintf)( +/* translators: + %1$s expands to a link to Yoast.com, + %2$s expands to the anchor end tag, + %3$d expands to the number of times the keyphrase occurred in the text. */ +(0,n._n)("%1$sKeyphrase density%2$s: The keyphrase was found %3$d time. This is great!","%1$sKeyphrase density%2$s: The keyphrase was found %3$d times. This is great!",this._keyphraseCount.count,"wordpress-seo"),this._config.urlTitle,"",this._keyphraseCount.count)}:this.hasTooManyMatches()?{score:this._config.scores.overMaximum,resultText:(0,n.sprintf)( +/* translators: + %1$s and %4$s expand to links to Yoast.com, + %2$s expands to the anchor end tag, + %3$d expands to the recommended maximal number of times the keyphrase should occur in the text, + %5$d expands to the number of times the keyphrase occurred in the text. */ +(0,n._n)("%1$sKeyphrase density%2$s: The keyphrase was found %5$d time. That's more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!","%1$sKeyphrase density%2$s: The keyphrase was found %5$d times. That's more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!",this._keyphraseCount.count,"wordpress-seo"),this._config.urlTitle,"",this._maxRecommendedKeyphraseCount,this._config.urlCallToAction,this._keyphraseCount.count)}:{score:this._config.scores.wayOverMaximum,resultText:(0,n.sprintf)( +/* translators: + %1$s and %4$s expand to links to Yoast.com, + %2$s expands to the anchor end tag, + %3$d expands to the recommended maximal number of times the keyphrase should occur in the text, + %5$d expands to the number of times the keyphrase occurred in the text. */ +(0,n._n)("%1$sKeyphrase density%2$s: The keyphrase was found %5$d time. That's way more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!","%1$sKeyphrase density%2$s: The keyphrase was found %5$d times. That's way more than the recommended maximum of %3$d times for a text of this length. %4$sDon't overoptimize%2$s!",this._keyphraseCount.count,"wordpress-seo"),this._config.urlTitle,"",this._maxRecommendedKeyphraseCount,this._config.urlCallToAction,this._keyphraseCount.count)}}getMarks(){return this._keyphraseCount.markings}isApplicable(e,t){const r=t.getHelper("customCountLength"),n=t.getConfig("assessmentApplicability").keyphraseDensity;n&&(this._config.applicableIfTextLongerThan=n);const s=r?r(e.getText()):(0,d.default)(e).length;return e.hasText()&&e.hasKeyword()&&s>=this._config.applicableIfTextLongerThan}}t.KeyphraseDensityAssessment=p,t.KeywordDensityAssessment=class extends p{constructor(e={}){super(e),this.identifier="keywordDensity",console.warn("This object is deprecated, use KeyphraseDensityAssessment instead.")}},t.default=p},34847:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={parameters:{recommendedMinimum:1},scores:{good:9,ok:6,bad:3},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/33k"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/33l")};this.identifier="metaDescriptionKeyword",this._config=(0,s.merge)(t,e)}getResult(e,t){this._keyphraseCounts=t.getResearch("metaDescriptionKeyword");const r=new o.default,s=this.calculateResult();return r.setScore(s.score),r.setText(s.resultText),r.getScore()<9&&(r.setHasJumps(!0),r.setEditFieldName((0,n.__)("meta description","wordpress-seo"))),r}calculateResult(){return 1===this._keyphraseCounts||2===this._keyphraseCounts?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase in meta description%2$s: Keyphrase or synonym appear in the meta description. Well done!","wordpress-seo"),this._config.urlTitle,"")}:this._keyphraseCounts>=3?{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/** + * translators: + * %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag, + * %3$s expands to the number of sentences containing the keyphrase, + * %4$s expands to a link on yoast.com, %5$s expands to the anchor end tag. + */ +(0,n.__)("%1$sKeyphrase in meta description%2$s: The meta description contains the keyphrase %3$s times, which is over the advised maximum of 2 times. %4$sLimit that%5$s!","wordpress-seo"),this._config.urlTitle,"",this._keyphraseCounts,this._config.urlCallToAction,"")}:{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/** + * translators: + * %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. + * %3$s expands to a link on yoast.com, %4$s expands to the anchor end tag. + */ +(0,n.__)("%1$sKeyphrase in meta description%2$s: The meta description has been specified, but it does not contain the keyphrase. %3$sFix that%4$s!","wordpress-seo"),this._config.urlTitle,"",this._config.urlCallToAction,"")}}isApplicable(e){return e.hasKeyword()&&e.hasDescription()}}t.default=u},70476:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=u(r(9017)),a=r(33140),o=u(r(73054)),l=u(r(49581));function u(e){return e&&e.__esModule?e:{default:e}}class c extends i.default{constructor(e={}){super();const t={recommendedMaximumLength:120,maximumLength:156,scores:{noMetaDescription:1,tooLong:6,tooShort:6,correctLength:9},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/34d"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/34e")};this.identifier="metaDescriptionLength",this._config=(0,s.merge)(t,e)}getMaximumLength(e){return this.getConfig(e).maximumLength}getConfig(e){let t=this._config;return"ja"===e&&(t=(0,s.merge)(t,l.default)),t}getResult(e,t){const r=t.getResearch("metaDescriptionLength"),s=new o.default,i=t.getConfig("language"),a=this.getConfig(i);return s.setScore(this.calculateScore(r,i)),s.setText(this.translateScore(r,a)),s.getScore()<9&&(s.setHasJumps(!0),s.setEditFieldName((0,n.__)("meta description","wordpress-seo"))),s.max=a.maximumLength,s.actual=r,s}calculateScore(e,t){const r=this.getConfig(t);return 0===e?r.scores.noMetaDescription:e<=this._config.recommendedMaximumLength?r.scores.tooShort:e>this._config.maximumLength?r.scores.tooLong:r.scores.correctLength}translateScore(e,t){return 0===e?(0,n.sprintf)(/* translators: %1$s and %2$s expand to a links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sMeta description length%3$s: No meta description has been specified. Search engines will display copy from the page instead. %2$sMake sure to write one%3$s!","wordpress-seo"),t.urlTitle,t.urlCallToAction,""):e<=t.recommendedMaximumLength?(0,n.sprintf)( +/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag, + %4$d expands to the number of characters in the meta description, %5$d expands to + the total available number of characters in the meta description */ +(0,n.__)("%1$sMeta description length%3$s: The meta description is too short (under %4$d characters). Up to %5$d characters are available. %2$sUse the space%3$s!","wordpress-seo"),t.urlTitle,t.urlCallToAction,"",t.recommendedMaximumLength,t.maximumLength):e>t.maximumLength?(0,n.sprintf)( +/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag, + %4$d expands to the total available number of characters in the meta description */ +(0,n.__)("%1$sMeta description length%3$s: The meta description is over %4$d characters. To ensure the entire description will be visible, %2$syou should reduce the length%3$s!","wordpress-seo"),t.urlTitle,t.urlCallToAction,"",t.maximumLength):(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sMeta description length%2$s: Well done!","wordpress-seo"),t.urlTitle,"")}}t.default=c},27661:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={scores:{noLinks:3,allNofollowed:7,someNoFollowed:8,allFollowed:9},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/34f"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/34g")};this.identifier="externalLinks",this._config=(0,s.merge)(t,e)}getResult(e,t){const r=t.getResearch("getLinkStatistics"),n=new o.default;return(0,s.isEmpty)(r)||(n.setScore(this.calculateScore(r)),n.setText(this.translateScore(r))),n}isApplicable(e){return e.hasText()}calculateScore(e){return 0===e.externalTotal?this._config.scores.noLinks:e.externalNofollow===e.externalTotal?this._config.scores.allNofollowed:e.externalDofollow"):e.externalNofollow===e.externalTotal?(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sOutbound links%3$s: All outbound links on this page are nofollowed. %2$sAdd some normal links%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,""):e.externalDofollow===e.externalTotal?(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sOutbound links%2$s: Good job!","wordpress-seo"),this._config.urlTitle,""):e.externalDofollow"):""}}t.default=u},46430:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=u(r(9017)),a=r(76663),o=r(33140),l=u(r(73054));function u(e){return e&&e.__esModule?e:{default:e}}class c extends i.default{constructor(e={},t=!1){super();const r={minLength:400,maxLength:600,scores:{noTitle:1,widthTooShort:6,widthTooLong:3,widthCorrect:9},urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/34h"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/34i")};this._allowShortTitle=t,this.identifier="titleWidth",this._config=(0,s.merge)(r,e)}getMaximumLength(){return 600}getResult(e,t){const r=t.getResearch("pageTitleWidth"),s=new l.default;return s.setScore(this.calculateScore(r)),s.setText(this.translateScore(r)),s.getScore()<9&&(s.setHasJumps(!0),s.setEditFieldName((0,n.__)("SEO title","wordpress-seo"))),s.max=this._config.maxLength,s.actual=r,s}calculateScore(e){return(0,a.inRangeEndInclusive)(e,1,400)?this._config.scores.widthTooShort:(0,a.inRangeEndInclusive)(e,this._config.minLength,this._config.maxLength)?this._config.scores.widthCorrect:e>this._config.maxLength?this._config.scores.widthTooLong:this._config.scores.noTitle}translateScore(e){return(0,a.inRangeEndInclusive)(e,1,400)?this._allowShortTitle?(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sSEO title width%2$s: Good job!","wordpress-seo"),this._config.urlTitle,""):(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sSEO title width%3$s: The SEO title is too short. %2$sUse the space to add keyphrase variations or create compelling call-to-action copy%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,""):(0,a.inRangeEndInclusive)(e,this._config.minLength,this._config.maxLength)?(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sSEO title width%2$s: Good job!","wordpress-seo"),this._config.urlTitle,""):e>this._config.maxLength?(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sSEO title width%3$s: The SEO title is wider than the viewable limit. %2$sTry to make it shorter%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,""):(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sSEO title width%3$s: %2$sPlease create an SEO title%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}t.default=c},76369:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=r(65736),i=l(r(9017)),a=l(r(73054)),o=r(49061);function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={scores:{good:9,ok:6},urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/4ly"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/4lz"),assessVariants:!0,productIdentifierOrBarcode:"Product identifier",shouldShowEditButton:!0};this.identifier="productIdentifier",this._config=(0,n.merge)(t,e),this.name=(0,s.__)(this._config.productIdentifierOrBarcode,"yoast-woo-seo")}getResult(e){const t=e.getCustomData(),r=this.scoreProductIdentifier(t,this._config),n=new a.default;return r&&(n.setScore(r.score),n.setText(r.text)),n.getScore()<9&&this._config.shouldShowEditButton&&(n.setHasJumps(!0),n.setEditFieldName((0,s.__)("Product identifiers","yoast-woo-seo"))),n}isApplicable(e){const t=e.getCustomData();return!(!1===t.canRetrieveGlobalIdentifier&&(["simple","external","grouped"].includes(t.productType)||!1===t.hasVariants)||!1===t.canRetrieveVariantIdentifiers&&!0===t.hasVariants&&"variable"===t.productType||!1===this._config.assessVariants&&t.hasVariants)}scoreProductIdentifier(e,t){let r;return r="Product identifier"===this._config.productIdentifierOrBarcode?{okNoVariants:(0,s.__)("Your product is missing an identifier (like a GTIN code)","yoast-woo-seo"),goodNoVariants:(0,s.__)("Your product has an identifier","yoast-woo-seo"),okWithVariants:(0,s.__)("Not all your product variants have an identifier","yoast-woo-seo"),goodWithVariants:(0,s.__)("All your product variants have an identifier","yoast-woo-seo")}:{okNoVariants:(0,s.__)("Your product is missing a barcode (like a GTIN code)","yoast-woo-seo"),goodNoVariants:(0,s.__)("Your product has a barcode","yoast-woo-seo"),okWithVariants:(0,s.__)("Not all your product variants have a barcode","yoast-woo-seo"),goodWithVariants:(0,s.__)("All your product variants have a barcode","yoast-woo-seo")},["simple","grouped","external"].includes(e.productType)||"variable"===e.productType&&!e.hasVariants?e.hasGlobalIdentifier?{score:t.scores.good,text:(0,s.sprintf)( +/* translators: %1$s expands to a link on yoast.com, %4$s expands to the anchor end tag, + * %2$s expands to the string "Barcode" or "Product identifier", %3$s expands to the feedback string + * "Your product has a product identifier" or "Your product has a barcode" */ +(0,s.__)("%1$s%2$s%4$s: %3$s. Good job!","yoast-woo-seo"),this._config.urlTitle,this.name,r.goodNoVariants,"")}:{score:t.scores.ok,text:(0,s.sprintf)( +/* translators: %1$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag, + * %2$s expands to the string "Barcode" or "Product identifier", %3$s expands to the feedback string + * "Your product is missing a product identifier (like a GTIN code)" + * or "Your product is missing a barcode (like a GTIN code)" */ +(0,s.__)("%1$s%2$s%5$s: %3$s. %4$sInclude it if you can, as it will help search engines to better understand your content.%5$s","yoast-woo-seo"),this._config.urlTitle,this.name,r.okNoVariants,this._config.urlCallToAction,"")}:"variable"===e.productType&&e.hasVariants?e.doAllVariantsHaveIdentifier?{score:t.scores.good,text:(0,s.sprintf)( +/* translators: %1$s expands to a link on yoast.com, %4$s expands to the anchor end tag, + * %2$s expands to the string "Barcode" or "Product identifier" , %3$s expands to the feedback string + * "All your product variants have a product identifier" or "All your product variants have a barcode" */ +(0,s.__)("%1$s%2$s%4$s: %3$s. Good job!","yoast-woo-seo"),this._config.urlTitle,this.name,r.goodWithVariants,"")}:{score:t.scores.ok,text:(0,s.sprintf)( +/* translators: %1$s and %4$s expand to links on yoast.com, %5$s expands to the anchor end tag, + * %2$s expands to the string "Barcode" or "Product identifier", %3$s expands to the string + * "Not all your product variants have a product identifier" + * or "Not all your product variants have a barcode" */ +(0,s.__)("%1$s%2$s%5$s: %3$s. %4$sInclude it if you can, as it will help search engines to better understand your content.%5$s","yoast-woo-seo"),this._config.urlTitle,this.name,r.okWithVariants,this._config.urlCallToAction,"")}:{}}}t.default=u},11842:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=r(65736),i=l(r(9017)),a=l(r(73054)),o=r(49061);function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={scores:{good:9,ok:6},urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/4lw"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/4lx"),assessVariants:!0,addSKULocation:!1};this.identifier="productSKU",this._config=(0,n.merge)(t,e)}getResult(e){const t=e.getCustomData(),r=this.scoreProductSKU(t,this._config),n=new a.default;return r&&(n.setScore(r.score),n.setText(r.text)),n.getScore()<9&&this._config.shouldShowEditButton&&(n.setHasJumps(!0),n.setEditFieldName((0,s.__)("SKU","yoast-woo-seo"))),n}isApplicable(e){const t=e.getCustomData();return!(!1===t.canRetrieveGlobalSku&&(["simple","external"].includes(t.productType)||!1===t.hasVariants)||!1===t.canRetrieveVariantSkus&&!0===t.hasVariants&&"variable"===t.productType||!1===this._config.assessVariants&&t.hasVariants)}scoreProductSKU(e,t){return["simple","external","grouped"].includes(e.productType)||"variable"===e.productType&&!e.hasVariants?e.hasGlobalSKU?{score:t.scores.good,text:(0,s.sprintf)( +// translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. +(0,s.__)("%1$sSKU%2$s: Your product has a SKU. Good job!","yoast-woo-seo"),this._config.urlTitle,"")}:{score:t.scores.ok,text:(0,s.sprintf)( +// translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag. +(0,s.__)("%1$sSKU%3$s: Your product is missing a SKU. %2$sInclude it if you can, as it will help search engines to better understand your content.%3$s","yoast-woo-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:"variable"===e.productType&&e.hasVariants?e.doAllVariantsHaveSKU?{score:t.scores.good,text:(0,s.sprintf)( +// translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. +(0,s.__)("%1$sSKU%2$s: All your product variants have a SKU. Good job!","yoast-woo-seo"),this._config.urlTitle,"")}:{score:t.scores.ok,text:(0,s.sprintf)( +// translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag. +(0,s.__)('%1$sSKU%3$s: Not all your product variants have a SKU. You can add a SKU via the "Variations" tab in the Product data box. %2$sInclude it if you can, as it will help search engines to better understand your content.%3$s',"yoast-woo-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:{}}}t.default=u},47502:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=c(r(9017)),a=r(49061),o=c(r(15010)),l=c(r(73054)),u=c(r(41054));function c(e){return e&&e.__esModule?e:{default:e}}class d extends i.default{constructor(e={}){super();const t={scores:{textContainsSuperfluousH1:1},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/3a6"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/3a7")};this.identifier="singleH1",this._config=(0,s.merge)(t,e)}getResult(e,t){this._h1s=t.getResearch("h1s");const r=new l.default,n=this.calculateResult();return(0,s.isUndefined)(n)||(r.setScore(n.score),r.setText(n.resultText),r.setHasMarks(!0)),r}calculateResult(){if(!(this._h1s.length<=1))return{score:this._config.scores.textContainsSuperfluousH1,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sSingle title%3$s: H1s should only be used as your main title. Find all H1s in your text that aren't your main title and %2$schange them to a lower heading level%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}getMarks(){return this._h1s.map((function(e){return new u.default({original:"

            "+e.content+"

            ",marked:"

            "+(0,o.default)(e.content)+"

            ",position:{startOffset:e.position.startOffset,endOffset:e.position.endOffset,startOffsetBlock:0,endOffsetBlock:e.position.endOffset-e.position.startOffset,clientId:e.position.clientId}})}))}isApplicable(e){return e.hasText()}}t.default=d},17915:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=r(84285),a=c(r(9017)),o=r(33140),l=r(76663),u=c(r(73054));function c(e){return e&&e.__esModule?e:{default:e}}class d extends a.default{constructor(e={}){super();const t={parameters:{lowerBoundary:.3,upperBoundary:.75},scores:{noMatches:3,tooFewMatches:3,goodNumberOfMatches:9,tooManyMatches:3},urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/33m"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/33n")};this.identifier="subheadingsKeyword",this._config=(0,s.merge)(t,e)}getResult(e,t){this._subHeadings=t.getResearch("matchKeywordInSubheadings");const r=new u.default;this._minNumberOfSubheadings=Math.ceil(this._subHeadings.count*this._config.parameters.lowerBoundary),this._maxNumberOfSubheadings=Math.floor(this._subHeadings.count*this._config.parameters.upperBoundary);const n=this.calculateResult();return r.setScore(n.score),r.setText(n.resultText),r}hasSubheadings(e){return(0,i.getSubheadingsTopLevel)(e.getText()).length>0}isApplicable(e){return e.hasText()&&e.hasKeyword()&&this.hasSubheadings(e)}hasTooFewMatches(){return this._subHeadings.matches>0&&this._subHeadings.matches1&&this._subHeadings.matches>this._maxNumberOfSubheadings}isOneOfOne(){return 1===this._subHeadings.count&&1===this._subHeadings.matches}hasGoodNumberOfMatches(){return(0,l.inRangeStartEndInclusive)(this._subHeadings.matches,this._minNumberOfSubheadings,this._maxNumberOfSubheadings)}calculateResult(){return this.hasTooFewMatches()?{score:this._config.scores.tooFewMatches,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase in subheading%3$s: %2$sUse more keyphrases or synonyms in your H2 and H3 subheadings%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this.hasTooManyMatches()?{score:this._config.scores.tooManyMatches,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase in subheading%3$s: More than 75%% of your H2 and H3 subheadings reflect the topic of your copy. That's too much. %2$sDon't over-optimize%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this.isOneOfOne()?{score:this._config.scores.goodNumberOfMatches,resultText:(0,n.sprintf)( +/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag, + %3$d expands to the number of subheadings containing the keyphrase. */ +(0,n.__)("%1$sKeyphrase in subheading%2$s: Your H2 or H3 subheading reflects the topic of your copy. Good job!","wordpress-seo"),this._config.urlTitle,"",this._subHeadings.matches)}:this.hasGoodNumberOfMatches()?{score:this._config.scores.goodNumberOfMatches,resultText:(0,n.sprintf)( +/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag, + %3$d expands to the number of subheadings containing the keyphrase. */ +(0,n._n)("%1$sKeyphrase in subheading%2$s: %3$s of your H2 and H3 subheadings reflects the topic of your copy. Good job!","%1$sKeyphrase in subheading%2$s: %3$s of your H2 and H3 subheadings reflect the topic of your copy. Good job!",this._subHeadings.matches,"wordpress-seo"),this._config.urlTitle,"",this._subHeadings.matches)}:{score:this._config.scores.noMatches,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$sKeyphrase in subheading%3$s: %2$sUse more keyphrases or synonyms in your H2 and H3 subheadings%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}}t.default=d},69360:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(49061),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={parameters:{recommendedMaximum:0},scores:{bad:2},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/34l"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/34m")};this.identifier="textCompetingLinks",this._config=(0,s.merge)(t,e)}getResult(e,t){const r=new o.default;this.totalAnchorsWithKeyphrase=t.getResearch("getAnchorsWithKeyphrase").anchorsWithKeyphraseCount;const n=this.calculateResult();return(0,s.isUndefined)(n)||(r.setScore(n.score),r.setText(n.resultText),r.setHasMarks(!1)),r}isApplicable(e){return e.hasText()&&e.hasKeyword()}calculateResult(){if(this.totalAnchorsWithKeyphrase>this._config.parameters.recommendedMaximum)return{score:this._config.scores.bad,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sLink keyphrase%3$s: You're linking to another page with the words you want this page to rank for. %2$sDon't do that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}}t.default=u},57480:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={recommendedMinimum:300,slightlyBelowMinimum:250,belowMinimum:200,veryFarBelowMinimum:100,scores:{recommendedMinimum:9,slightlyBelowMinimum:6,belowMinimum:3,farBelowMinimum:-10,veryFarBelowMinimum:-20},countTextIn:{singular:(0,n.__)("word","wordpress-seo"),plural:(0,n.__)("words","wordpress-seo")},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/34n"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/34o"),cornerstoneContent:!1,customContentType:""};this.identifier="textLength",this._config=(0,s.merge)(t,e)}getResult(e,t){const r=t.getResearch("wordCountInText");t.getConfig("textLength")&&(this._config=this.getLanguageSpecificConfig(t)),t.getConfig("countCharacters")&&(this._config.countTextIn.singular=(0,n.__)("character","wordpress-seo"),this._config.countTextIn.plural=(0,n.__)("characters","wordpress-seo"));const s=this.calculateResult(r.count),i=new o.default;return i.setScore(s.score),i.setText(s.resultText),i}getLanguageSpecificConfig(e){const t=this._config,r=e.getConfig("textLength");return r.hasOwnProperty(t.customContentType)?(0,s.merge)(t,r[t.customContentType]):!0===t.cornerstoneContent&&""===t.customContentType&&r.hasOwnProperty("defaultCornerstone")?(0,s.merge)(t,r.defaultCornerstone):(0,s.merge)(t,r.defaultAnalysis)}calculateTaxonomyResult(e){return e>=this._config.recommendedMinimum?{score:this._config.scores.recommendedMinimum,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag, + %4$s expands to the word 'words' or 'characters'. */ +(0,n.__)("%2$sText length%3$s: The text contains %1$d %4$s. Good job!","wordpress-seo"),e,this._config.urlTitle,"",this._config.countTextIn.plural)}:(0,s.inRange)(e,this._config.slightlyBelowMinimum,this._config.recommendedMinimum)?{score:this._config.scores.slightlyBelowMinimum,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com, + %4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters, + %6$s expands to the word 'words' or 'characters'. */ +(0,n.__)("%2$sText length%4$s: The text contains %1$d %6$s. This is slightly below the recommended minimum of %5$d %6$s. %3$sAdd more content%4$s.","wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"",this._config.recommendedMinimum,this._config.countTextIn.plural)}:(0,s.inRange)(e,this._config.veryFarBelowMinimum,this._config.slightlyBelowMinimum)?{score:this._config.scores.belowMinimum,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com, + %4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters, + %6$s expands to the word 'word' or 'character', %7$s expands to the word 'words' or 'characters'. */ +(0,n._n)("%2$sText length%4$s: The text contains %1$d %6$s. This is below the recommended minimum of %5$d %7$s. %3$sAdd more content%4$s.","%2$sText length%4$s: The text contains %1$d %7$s. This is below the recommended minimum of %5$d %7$s. %3$sAdd more content%4$s.",e,"wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"",this._config.recommendedMinimum,this._config.countTextIn.singular,this._config.countTextIn.plural)}:{score:this._config.scores.veryFarBelowMinimum,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. */ +(0,n.__)("%1$sText length%3$s: %2$sPlease add some content%3$s.","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}calculateResult(e){if(["taxonomyAssessor","collectionSEOAssessor","collectionCornerstoneSEOAssessor"].includes(this._config.customContentType))return this.calculateTaxonomyResult(e);if(e>=this._config.recommendedMinimum)return{score:this._config.scores.recommendedMinimum,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag, + %4$s expands to the word 'words' or 'characters'. */ +(0,n.__)("%2$sText length%3$s: The text contains %1$d %4$s. Good job!","wordpress-seo"),e,this._config.urlTitle,"",this._config.countTextIn.plural)};if((0,s.inRange)(e,0,this._config.belowMinimum)){let t=this._config.scores.farBelowMinimum;return(0,s.inRange)(e,0,this._config.veryFarBelowMinimum)&&(t=this._config.scores.veryFarBelowMinimum),{score:t,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com, + %4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters, + %6$s expands to the word 'word' or 'character', %7$s expands to the word 'words' or 'characters'. */ +(0,n._n)("%2$sText length%4$s: The text contains %1$d %6$s. This is far below the recommended minimum of %5$d %7$s. %3$sAdd more content%4$s.","%2$sText length%4$s: The text contains %1$d %7$s. This is far below the recommended minimum of %5$d %7$s. %3$sAdd more content%4$s.",e,"wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"",this._config.recommendedMinimum,this._config.countTextIn.singular,this._config.countTextIn.plural)}}return(0,s.inRange)(e,this._config.slightlyBelowMinimum,this._config.recommendedMinimum)?!1===this._config.cornerstoneContent?{score:this._config.scores.slightlyBelowMinimum,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com, + %4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters, + %6$s expands to the word 'words' or 'characters'. */ +(0,n.__)("%2$sText length%4$s: The text contains %1$d %6$s. This is slightly below the recommended minimum of %5$d %6$s. %3$sAdd a bit more copy%4$s.","wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"",this._config.recommendedMinimum,this._config.countTextIn.plural)}:{score:this._config.scores.slightlyBelowMinimum,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com, + %4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters, + %6$s expands to the word 'words' or 'characters'. */ +(0,n.__)("%2$sText length%4$s: The text contains %1$d %6$s. This is below the recommended minimum of %5$d %6$s. %3$sAdd more content%4$s.","wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"",this._config.recommendedMinimum,this._config.countTextIn.plural)}:{score:this._config.scores.belowMinimum,resultText:(0,n.sprintf)( +/* translators: %1$d expands to the number of words / characters in the text, + %2$s expands to a link on yoast.com, %3$s expands to a link on yoast.com, + %4$s expands to the anchor end tag, %5$d expands to the recommended minimum of words / characters, + %6$s expands to the word 'words' or 'characters'. */ +(0,n.__)("%2$sText length%4$s: The text contains %1$d %6$s. This is below the recommended minimum of %5$d %6$s. %3$sAdd more content%4$s.","wordpress-seo"),e,this._config.urlTitle,this._config.urlCallToAction,"",this._config.recommendedMinimum,this._config.countTextIn.plural)}}}t.default=u},77428:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(65736),s=r(92819),i=u(r(9017)),a=u(r(73054)),o=r(49061),l=r(81831);function u(e){return e&&e.__esModule?e:{default:e}}class c extends i.default{constructor(e={}){super();const t={scores:{good:9,bad:-1e4},urlTitle:(0,o.createAnchorOpeningTag)("https://yoa.st/4nh"),urlCallToAction:(0,o.createAnchorOpeningTag)("https://yoa.st/4ni")};this.identifier="textTitleAssessment",this._config=(0,s.merge)(t,e)}getTextTitle(e){let t=e.getTextTitle();return t=(0,l.unifyAllSpaces)(t),t=t.trim(),t.length>0}getResult(e){const t=this.getTextTitle(e),r=this.calculateResult(t),n=new a.default;return n.setScore(r.score),n.setText(r.resultText),n}calculateResult(e){return e?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag. */ +(0,n.__)("%1$sTitle%2$s: Your page has a title. Well done!","wordpress-seo-premium"),this._config.urlTitle,"")}:{score:this._config.scores.bad,resultText:(0,n.sprintf)( +/** + * translators: + * %1$s and %2$s expands to a link on yoast.com, %3$s expands to the anchor end tag. + */ +(0,n.__)("%1$sTitle%3$s: Your page does not have a title yet. %2$sAdd one%3$s!","wordpress-seo-premium"),this._config.urlTitle,this._config.urlCallToAction,"")}}}t.default=c},80009:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.UrlKeywordAssessment=t.SlugKeywordAssessment=void 0;var n=r(65736),s=r(92819),i=l(r(9017)),a=r(33140),o=l(r(73054));function l(e){return e&&e.__esModule?e:{default:e}}class u extends i.default{constructor(e={}){super();const t={scores:{okay:6,good:9},urlTitle:(0,a.createAnchorOpeningTag)("https://yoa.st/33o"),urlCallToAction:(0,a.createAnchorOpeningTag)("https://yoa.st/33p")};this.identifier="slugKeyword",this._config=(0,s.merge)(t,e)}getResult(e,t){this._keywordInSlug=t.getResearch("keywordCountInSlug");const r=new o.default,s=this.calculateResult();return r.setScore(s.score),r.setText(s.resultText),r.getScore()<9&&(r.setHasJumps(!0),r.setEditFieldName((0,n.__)("slug","wordpress-seo"))),r}isApplicable(e,t){return e.hasKeyword()&&e.hasSlug()&&t.hasResearch("keywordCountInSlug")}calculateResult(){return this._keywordInSlug.keyphraseLength<3?100===this._keywordInSlug.percentWordMatches?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase in slug%2$s: Great work!","wordpress-seo"),this._config.urlTitle,"")}:{score:this._config.scores.okay,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase in slug%3$s: (Part of) your keyphrase does not appear in the slug. %2$sChange that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}:this._keywordInSlug.percentWordMatches>50?{score:this._config.scores.good,resultText:(0,n.sprintf)(/* translators: %1$s expands to a link on yoast.com, %2$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase in slug%2$s: More than half of your keyphrase appears in the slug. That's great!","wordpress-seo"),this._config.urlTitle,"")}:{score:this._config.scores.okay,resultText:(0,n.sprintf)(/* translators: %1$s and %2$s expand to links on yoast.com, %3$s expands to the anchor end tag */ +(0,n.__)("%1$sKeyphrase in slug%3$s: (Part of) your keyphrase does not appear in the slug. %2$sChange that%3$s!","wordpress-seo"),this._config.urlTitle,this._config.urlCallToAction,"")}}}t.SlugKeywordAssessment=u,t.UrlKeywordAssessment=class extends u{constructor(e={}){super(e),this.identifier="urlKeyword",console.warn("This object is deprecated, use SlugKeywordAssessment instead.")}},t.default=u},25859:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=d(r(85551)),s=d(r(52505)),i=d(r(73054)),a=r(47661),o=r(65736),l=r(92819),u=d(r(49781)),c=r(7104);function d(e){return e&&e.__esModule?e:{default:e}}const h=function(e,t){this.type="assessor",this.setResearcher(e),this._assessments=[],this._options=t||{}};h.prototype.setResearcher=function(e){if((0,l.isUndefined)(e))throw new n.default("The assessor requires a researcher.");this._researcher=e},h.prototype.getAvailableAssessments=function(){return this._assessments},h.prototype.isApplicable=function(e,t,r){return!e.hasOwnProperty("isApplicable")&&"function"!=typeof e.isApplicable||e.isApplicable(t,r)},h.prototype.hasMarker=function(e){return(0,l.isFunction)(this._options.marker)&&(e.hasOwnProperty("getMarks")||"function"==typeof e.getMarks)},h.prototype.getSpecificMarker=function(){return this._options.marker},h.prototype.getPaper=function(){return this._lastPaper},h.prototype.getMarker=function(e,t,r){const n=this._options.marker;return function(){let i=e.getMarks(t,r);i=(0,s.default)(i),n(t,i)}},h.prototype.assess=function(e){this._researcher.setPaper(e);const t=new u.default(this._researcher),r=e._attributes&&e._attributes.shortcodes;e.setTree((0,c.build)(e,t,r));let n=this.getAvailableAssessments();this.results=[],n=(0,l.filter)(n,function(t){return this.isApplicable(t,e,this._researcher)}.bind(this)),this.setHasMarkers(!1),this.results=(0,l.map)(n,this.executeAssessment.bind(this,e,this._researcher)),this._lastPaper=e},h.prototype.setHasMarkers=function(e){this._hasMarkers=e},h.prototype.hasMarkers=function(){return this._hasMarkers},h.prototype.executeAssessment=function(e,t,r){let n;try{n=r.getResult(e,t),n.setIdentifier(r.identifier),n.hasMarks()&&(n.marks=r.getMarks(e,t),n.marks=(0,s.default)(n.marks)),n.hasMarks()&&this.hasMarker(r)&&(this.setHasMarkers(!0),n.setMarker(this.getMarker(r,e,t)))}catch(e){(0,a.showTrace)(e),n=new i.default,n.setScore(-1),n.setText((0,o.sprintf)(/* translators: %1$s expands to the name of the assessment. */ +(0,o.__)("An error occurred in the '%1$s' assessment","wordpress-seo"),r.identifier,e))}return n},h.prototype.getValidResults=function(){return(0,l.filter)(this.results,function(e){return this.isValidResult(e)}.bind(this))},h.prototype.isValidResult=function(e){return e.hasScore()&&e.hasText()},h.prototype.calculateOverallScore=function(){const e=this.getValidResults(),t=e.reduce(((e,t)=>e+t.getScore()),0);return Math.round(t/(9*e.length)*100)||0},h.prototype.addAssessment=function(e,t){return t.hasOwnProperty("identifier")||(t.identifier=e),this.getAssessment(t.identifier)&&this.removeAssessment(t.identifier),this._assessments.push(t),!0},h.prototype.removeAssessment=function(e){const t=(0,l.findIndex)(this._assessments,(function(t){return t.hasOwnProperty("identifier")&&e===t.identifier}));-1!==t&&this._assessments.splice(t,1)},h.prototype.getAssessment=function(e){return(0,l.find)(this._assessments,(function(t){return t.hasOwnProperty("identifier")&&e===t.identifier}))},h.prototype.getApplicableAssessments=function(){const e=this.getAvailableAssessments();return(0,l.filter)(e,function(e){return this.isApplicable(e,this.getPaper(),this._researcher)}.bind(this))},t.default=h},70021:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=p(r(25859)),s=p(r(40774)),i=p(r(86089)),a=p(r(7261)),o=p(r(62318)),l=p(r(25636)),u=p(r(38196)),c=p(r(35780)),d=p(r(17413)),h=r(92819);function p(e){return e&&e.__esModule?e:{default:e}}const f=function(e,t={}){n.default.call(this,e,t),this.type="contentAssessor",this._assessments=[new a.default,new s.default,new i.default,new o.default,new l.default,new c.default,new u.default]};r(89539).inherits(f,n.default),f.prototype.calculatePenaltyPointsFullSupport=function(e){switch(e){case"bad":return 3;case"ok":return 2;default:return 0}},f.prototype.calculatePenaltyPointsPartialSupport=function(e){switch(e){case"bad":return 4;case"ok":return 2;default:return 0}},f.prototype._allAssessmentsSupported=function(){const e=this._assessments.length;return this.getApplicableAssessments().length===e},f.prototype.calculatePenaltyPoints=function(){const e=this.getValidResults(),t=(0,h.map)(e,function(e){const t=(0,d.default)(e.getScore());return this._allAssessmentsSupported()?this.calculatePenaltyPointsFullSupport(t):this.calculatePenaltyPointsPartialSupport(t)}.bind(this));return(0,h.sum)(t)},f.prototype._ratePenaltyPoints=function(e){if(1===this.getValidResults().length)return 30;if(this._allAssessmentsSupported()){if(e>6)return 30;if(e>4)return 60}else{if(e>4)return 30;if(e>2)return 60}return 90},f.prototype.calculateOverallScore=function(){if(0===this.getValidResults().length)return 30;const e=this.calculatePenaltyPoints();return this._ratePenaltyPoints(e)},t.default=f},93334:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=h(r(25859)),s=h(r(70021)),i=h(r(40774)),a=h(r(86089)),o=h(r(7261)),l=h(r(62318)),u=h(r(25636)),c=h(r(38196)),d=h(r(35780));function h(e){return e&&e.__esModule?e:{default:e}}const p=function(e,t={}){n.default.call(this,e,t),this.type="cornerstoneContentAssessor",this._assessments=[new o.default({parameters:{slightlyTooMany:250,farTooMany:300,recommendedMaximumLength:250},applicableIfTextLongerThan:250,cornerstoneContent:!0}),new i.default,new a.default({slightlyTooMany:20,farTooMany:25},!0),new l.default,new u.default,new d.default,new c.default]};r(89539).inherits(p,s.default),t.default=p},55122:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(89539),s=h(r(25859)),i=h(r(90575)),a=h(r(99815)),o=h(r(70966)),l=h(r(34847)),u=h(r(69360)),c=h(r(36832)),d=h(r(8980));function h(e){return e&&e.__esModule?e:{default:e}}const p=function(e,t){s.default.call(this,e,t),this.type="cornerstoneRelatedKeywordAssessor",this._assessments=[new i.default,new a.default({isRelatedKeyphrase:!0}),new o.default,new l.default,new u.default,new c.default,new d.default({scores:{withAltNonKeyword:3,withAlt:3,noAlt:3}})]};(0,n.inherits)(p,s.default),t.default=p},47899:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(89539),s=b(r(90575)),i=b(r(99815)),a=b(r(70966)),o=b(r(34847)),l=b(r(69360)),u=b(r(92922)),c=b(r(46787)),d=b(r(80009)),h=b(r(25859)),p=b(r(63745)),f=b(r(70476)),g=b(r(17915)),m=b(r(8980)),_=b(r(38754)),y=b(r(57480)),E=b(r(27661)),T=b(r(46430)),A=b(r(36832)),v=b(r(47502));function b(e){return e&&e.__esModule?e:{default:e}}const S=function(e,t){h.default.call(this,e,t),this.type="cornerstoneSEOAssessor",this._assessments=[new s.default,new i.default,new a.default,new o.default,new f.default({scores:{tooLong:3,tooShort:3}}),new g.default,new l.default,new m.default({scores:{withAltNonKeyword:3,withAlt:3,noAlt:3}}),new _.default,new y.default({recommendedMinimum:900,slightlyBelowMinimum:400,belowMinimum:300,scores:{belowMinimum:-20,farBelowMinimum:-20},cornerstoneContent:!0}),new E.default({scores:{noLinks:3}}),new c.default,new u.default,new T.default({scores:{widthTooShort:9}},!0),new d.default({scores:{okay:3}}),new A.default,new v.default]};(0,n.inherits)(S,p.default),t.default=S},90327:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return(0,n.filter)(e,(function(e){return e.sentenceLength>t}))};var n=r(92819)},76663:(e,t)=>{"use strict";function r(e,t,r){return e>t&&e<=r}function n(e,t,r){return e>=t&&e=t&&e<=r}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.inRangeEndInclusive=t.inRange=r,t.inRangeStartEndInclusive=s,t.inRangeStartInclusive=n,t.default={inRange:r,inRangeStartInclusive:n,inRangeEndInclusive:r,inRangeStartEndInclusive:s}},4913:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return.7+e/3}},68055:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r,i,a){const o=a?a(e.getText()).length:(0,n.default)(e).length;if(0===o)return 0;const l=r*o/(100*(0,s.default)(t));return l<2?2:"min"===i?Math.ceil(l):Math.floor(l)};var n=i(r(60914)),s=i(r(4913));function i(e){return e&&e.__esModule?e:{default:e}}},97679:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=a(r(25859)),s=a(r(90529)),i=a(r(96682));function a(e){return e&&e.__esModule?e:{default:e}}const o={infoLinks:{}};class l extends n.default{constructor(e,t={}){super(e,t),this.type="inclusiveLanguageAssessor",this._options=Object.assign({},o,t);const r=this._options.infoLinks;this._assessments=s.default.map((e=>(r[e.category]&&(e.learnMoreUrl=r[e.category]),new i.default(e))))}calculateOverallScore(){const e=this.getValidResults(),t=e.filter((e=>6===e.getScore()));return e.filter((e=>3===e.getScore())).length>=1?30:t.length>=1?60:90}}t.default=l},80572:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"scoreToRating",{enumerable:!0,get:function(){return s.default}});var n,s=(n=r(17413))&&n.__esModule?n:{default:n}},17413:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=function(e){return-1===e?"error":0===e?"feedback":e<=4?"bad":e>4&&e<=7?"ok":e>7?"good":""}},12028:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(89539),s=h(r(25859)),i=h(r(90575)),a=h(r(99815)),o=h(r(70966)),l=h(r(34847)),u=h(r(8980)),c=h(r(69360)),d=h(r(36832));function h(e){return e&&e.__esModule?e:{default:e}}const p=function(e,t){s.default.call(this,e,t),this.type="relatedKeywordAssessor",this._assessments=[new i.default,new a.default({isRelatedKeyphrase:!0}),new o.default,new l.default,new c.default,new d.default,new u.default]};(0,n.inherits)(p,s.default),t.default=p},88533:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(89539),s=c(r(90575)),i=c(r(99815)),a=c(r(70966)),o=c(r(34847)),l=c(r(25859)),u=c(r(36832));function c(e){return e&&e.__esModule?e:{default:e}}const d=function(e,t){l.default.call(this,e,t),this.type="relatedKeywordsTaxonomyAssessor",this._assessments=[new s.default,new i.default({isRelatedKeyphrase:!0}),new a.default,new o.default,new u.default]};(0,n.inherits)(d,l.default),t.default=d},4855:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819),s=a(r(17413)),i=a(r(1456));function a(e){return e&&e.__esModule?e:{default:e}}var o=function(e){this.keyword=e.keyword,this.assessor=e.assessor,this.output=e.targets.output,this.overall=e.targets.overall||"overallScore",this.presenterConfig=(0,i.default)(),this._disableMarkerButtons=!1,this._activeMarker=!1};o.prototype.setKeyword=function(e){this.keyword=e},o.prototype.configHasProperty=function(e){return this.presenterConfig.hasOwnProperty(e)},o.prototype.getIndicator=function(e){return{className:this.getIndicatorColorClass(e),screenReaderText:this.getIndicatorScreenReaderText(e),fullText:this.getIndicatorFullText(e),screenReaderReadabilityText:this.getIndicatorScreenReaderReadabilityText(e)}},o.prototype.getIndicatorColorClass=function(e){return this.configHasProperty(e)?this.presenterConfig[e].className:""},o.prototype.getIndicatorScreenReaderText=function(e){return this.configHasProperty(e)?this.presenterConfig[e].screenReaderText:""},o.prototype.getIndicatorScreenReaderReadabilityText=function(e){return this.configHasProperty(e)?this.presenterConfig[e].screenReaderReadabilityText:""},o.prototype.getIndicatorFullText=function(e){return this.configHasProperty(e)?this.presenterConfig[e].fullText:""},o.prototype.resultToRating=function(e){return(0,n.isObject)(e)?(e.rating=(0,s.default)(e.score),e):""},o.prototype.getIndividualRatings=function(){var e={},t=this.sort(this.assessor.getValidResults()).map(this.resultToRating);return(0,n.forEach)(t,function(t,r){e[r]=this.addRating(t)}.bind(this)),e},o.prototype.excludeFromResults=function(e,t){return(0,n.difference)(e,t)},o.prototype.sort=function(e){var t=this.getUndefinedScores(e),r=this.excludeFromResults(e,t);return r.sort((function(e,t){return e.score-t.score})),t.concat(r)},o.prototype.getUndefinedScores=function(e){return e.filter((function(e){return(0,n.isUndefined)(e.score)||0===e.score}))},o.prototype.addRating=function(e){var t=this.getIndicator(e.rating);return t.text=e.text,t.identifier=e.getIdentifier(),e.hasMarker()&&(t.marker=e.getMarker()),t},o.prototype.getOverallRating=function(e){var t=0;return""===this.keyword||(0,n.isNumber)(e)&&(t=e/10),this.resultToRating({score:t})},o.prototype.markAssessment=function(e,t){this._activeMarker===e?(this.removeAllMarks(),this._activeMarker=!1):(t(),this._activeMarker=e),this.render()},o.prototype.disableMarker=function(){this._activeMarker=!1,this.render()},o.prototype.disableMarkerButtons=function(){this._disableMarkerButtons=!0,this.render()},o.prototype.enableMarkerButtons=function(){this._disableMarkerButtons=!1,this.render()},o.prototype.addMarkerEventHandler=function(e,t){document.getElementById(this.output).getElementsByClassName("js-assessment-results__mark-"+e)[0].addEventListener("click",this.markAssessment.bind(this,e,t))},o.prototype.render=function(){this.renderIndividualRatings(),this.renderOverallRating()},o.prototype.bindMarkButtons=function(e){(0,n.forEach)(e,function(e){e.hasOwnProperty("marker")&&this.addMarkerEventHandler(e.identifier,e.marker)}.bind(this))},o.prototype.removeAllMarks=function(){this.assessor.getSpecificMarker()(this.assessor.getPaper(),[])},o.prototype.renderIndividualRatings=function(){},o.prototype.renderOverallRating=function(){var e=this.getOverallRating(this.assessor.calculateOverallScore()),t=document.getElementById(this.overall);t&&(t.className="overallScore "+this.getIndicatorColorClass(e.rating))},t.default=o},9286:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.READABILITY_SCORES=void 0;var n=a(r(67404)),s=r(80572),i=a(r(34115));function a(e){return e&&e.__esModule?e:{default:e}}const o={bad:3,ok:2,good:0},l={bad:4,ok:2,good:0},u=t.READABILITY_SCORES={GOOD:90,OKAY:60,NEEDS_IMPROVEMENT:30,NOT_AVAILABLE:0},c=["en","nl","de","it","ru","fr","es"];class d extends i.default{isFullySupported(e){if(e&&e.includes("_")){const t=(0,n.default)(e);return c.includes(t)}return!1}calculateScore(e,t){if(e){if(t>6)return u.NEEDS_IMPROVEMENT;if(t>4)return u.OKAY}else{if(t>4)return u.NEEDS_IMPROVEMENT;if(t>2)return u.OKAY}return u.GOOD}calculatePenalty(e){return e.reduce(((e,t)=>{const r=(0,s.scoreToRating)(t.getScore()),n=this.isFullySupported(this.locale)?o[r]:l[r];return n?e+n:e}),0)}getValidResults(e){return e.filter((e=>e.hasScore()&&e.hasText()))}setLocale(e){this.locale=e}aggregate(e){const t=this.getValidResults(e);if(t.length<=1)return u.NOT_AVAILABLE;const r=this.calculatePenalty(t),n=this.isFullySupported(this.locale);return this.calculateScore(n,r)}}t.default=d},50734:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(34115))&&n.__esModule?n:{default:n};class i extends s.default{aggregate(e){const t=e.reduce(((e,t)=>e+t.getScore()),0);return Math.round(100*t/(9*e.length))||0}}t.default=i},34115:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{aggregate(e){console.warn("'aggregate' must be implemented by a child class of 'ScoreAggregator'")}}},83819:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ReadabilityScoreAggregator",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"SEOScoreAggregator",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"ScoreAggregator",{enumerable:!0,get:function(){return s.default}});var n=a(r(9286)),s=a(r(34115)),i=a(r(50734));function a(e){return e&&e.__esModule?e:{default:e}}},63745:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(89539),s=v(r(90575)),i=v(r(99815)),a=v(r(70966)),o=v(r(34847)),l=v(r(69360)),u=v(r(92922)),c=v(r(46787)),d=v(r(80009)),h=v(r(25859)),p=v(r(70476)),f=v(r(17915)),g=v(r(8980)),m=v(r(38754)),_=v(r(57480)),y=v(r(27661)),E=v(r(46430)),T=v(r(36832)),A=v(r(47502));function v(e){return e&&e.__esModule?e:{default:e}}const b=function(e,t){h.default.call(this,e,t),this.type="SEOAssessor",this._assessments=[new s.default,new i.default,new a.default,new o.default,new p.default,new f.default,new l.default,new g.default,new m.default,new _.default,new y.default,new c.default,new u.default,new E.default({scores:{widthTooShort:9}},!0),new d.default,new T.default,new A.default]};(0,n.inherits)(b,h.default),t.default=b},74437:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getTextLengthAssessment=t.default=void 0;var n=r(89539),s=_(r(90575)),i=_(r(99815)),a=_(r(70966)),o=_(r(34847)),l=_(r(46787)),u=_(r(80009)),c=_(r(25859)),d=_(r(70476)),h=_(r(57480)),p=_(r(46430)),f=_(r(36832)),g=_(r(47502)),m=r(49061);function _(e){return e&&e.__esModule?e:{default:e}}const y=function(){return new h.default({recommendedMinimum:30,slightlyBelowMinimum:10,veryFarBelowMinimum:1,urlTitle:(0,m.createAnchorOpeningTag)("https://yoa.st/34j"),urlCallToAction:(0,m.createAnchorOpeningTag)("https://yoa.st/34k"),customContentType:"taxonomyAssessor"})};t.getTextLengthAssessment=y;const E=function(e,t){c.default.call(this,e,t),this.type="taxonomyAssessor",this._assessments=[new s.default,new i.default,new a.default,new o.default,new d.default,y(),new l.default,new p.default({scores:{widthTooShort:9}},!0),new u.default,new f.default,new g.default]};(0,n.inherits)(E,c.default),t.default=E},73054:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(92819),i=(n=r(41054))&&n.__esModule?n:{default:n},a=function(){return[]},o=function(e){this._hasScore=!1,this._identifier="",this._hasAIFixes=!1,this._hasMarks=!1,this._hasJumps=!1,this._hasEditFieldName=!1,this._marker=a,this._hasBetaBadge=!1,this.score=0,this.text="",this.marks=[],this.editFieldName="",(0,s.isUndefined)(e)&&(e={}),(0,s.isUndefined)(e.score)||this.setScore(e.score),(0,s.isUndefined)(e.text)||this.setText(e.text),(0,s.isUndefined)(e.marks)||this.setMarks(e.marks),(0,s.isUndefined)(e._hasBetaBadge)||this.setHasBetaBadge(e._hasBetaBadge),(0,s.isUndefined)(e._hasJumps)||this.setHasJumps(e._hasJumps),(0,s.isUndefined)(e.editFieldName)||this.setEditFieldName(e.editFieldName),(0,s.isUndefined)(e._hasAIFixes)||this.setHasAIFixes(e._hasAIFixes)};o.prototype.hasScore=function(){return this._hasScore},o.prototype.getScore=function(){return this.score},o.prototype.setScore=function(e){(0,s.isNumber)(e)&&(this.score=e,this._hasScore=!0)},o.prototype.hasText=function(){return""!==this.text},o.prototype.getText=function(){return this.text},o.prototype.setText=function(e){(0,s.isUndefined)(e)&&(e=""),this.text=e},o.prototype.getMarks=function(){return this.marks},o.prototype.setMarks=function(e){(0,s.isArray)(e)&&(this.marks=e,this._hasMarks=e.length>0)},o.prototype.setIdentifier=function(e){this._identifier=e},o.prototype.getIdentifier=function(){return this._identifier},o.prototype.setMarker=function(e){this._marker=e},o.prototype.hasMarker=function(){return this._hasMarks&&this._marker!==this.emptyMarker},o.prototype.getMarker=function(){return this._marker},o.prototype.setHasMarks=function(e){this._hasMarks=e},o.prototype.hasMarks=function(){return this._hasMarks},o.prototype.setHasBetaBadge=function(e){this._hasBetaBadge=e},o.prototype.hasBetaBadge=function(){return this._hasBetaBadge},o.prototype.setHasJumps=function(e){this._hasJumps=e},o.prototype.hasJumps=function(){return this._hasJumps},o.prototype.hasEditFieldName=function(){return this._hasEditFieldName},o.prototype.getEditFieldName=function(){return this.editFieldName},o.prototype.setEditFieldName=function(e){""!==e&&(this.editFieldName=e,this._hasEditFieldName=!0)},o.prototype.setHasAIFixes=function(e){this._hasAIFixes=e},o.prototype.hasAIFixes=function(){return this._hasAIFixes},o.prototype.serialize=function(){return{_parseClass:"AssessmentResult",identifier:this._identifier,score:this.score,text:this.text,marks:this.marks.map((e=>e.serialize())),_hasBetaBadge:this._hasBetaBadge,_hasJumps:this._hasJumps,_hasAIFixes:this._hasAIFixes,editFieldName:this.editFieldName}},o.parse=function(e){const t=new o({text:e.text,score:e.score,marks:e.marks.map((e=>i.default.parse(e))),_hasBetaBadge:e._hasBetaBadge,_hasJumps:e._hasJumps,_hasAIFixes:e._hasAIFixes,editFieldName:e.editFieldName});return t.setIdentifier(e.identifier),t},t.default=o},41054:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819);function s(e){(0,n.defaults)(e,{original:"",marked:"",fieldsToMark:[]}),this._properties=e,this.isValid()}s.prototype.getOriginal=function(){return this._properties.original},s.prototype.getMarked=function(){return this._properties.marked},s.prototype.getFieldsToMark=function(){return this._properties.fieldsToMark},s.prototype.getPosition=function(){return this._properties.position},s.prototype.getPositionStart=function(){return this._properties.position&&this._properties.position.startOffset},s.prototype.getPositionEnd=function(){return this._properties.position&&this._properties.position.endOffset},s.prototype.setPositionStart=function(e){this._properties.position.startOffset=e},s.prototype.setPositionEnd=function(e){this._properties.position.endOffset=e},s.prototype.setBlockPositionStart=function(e){this._properties.position.startOffsetBlock=e},s.prototype.setBlockPositionEnd=function(e){this._properties.position.endOffsetBlock=e},s.prototype.getBlockClientId=function(){return this._properties.position&&this._properties.position.clientId},s.prototype.getBlockAttributeId=function(){return this._properties.position&&this._properties.position.attributeId},s.prototype.isMarkForFirstBlockSection=function(){return this._properties.position&&this._properties.position.isFirstSection},s.prototype.getBlockPositionStart=function(){return this._properties.position&&this._properties.position.startOffsetBlock},s.prototype.getBlockPositionEnd=function(){return this._properties.position&&this._properties.position.endOffsetBlock},s.prototype.applyWithReplace=function(e){return e.split(this._properties.original).join(this._properties.marked)},s.prototype.applyWithPosition=function(e){const t=this.getPositionEnd()+35;return(e=e.substring(0,this.getPositionStart())+""+e.substring(this.getPositionStart())).substring(0,t)+""+e.substring(t)},s.prototype.serialize=function(){return{_parseClass:"Mark",...this._properties}},s.prototype.isValid=function(){if(!(0,n.isUndefined)(this.getPositionStart())&&this.getPositionStart()<0)throw new RangeError("positionStart should be larger or equal than 0.");if(!(0,n.isUndefined)(this.getPositionEnd())&&this.getPositionEnd()<=0)throw new RangeError("positionEnd should be larger than 0.");if(!(0,n.isUndefined)(this.getPositionStart())&&!(0,n.isUndefined)(this.getPositionEnd())&&this.getPositionStart()>=this.getPositionEnd())throw new RangeError("The positionStart should be smaller than the positionEnd.");if((0,n.isUndefined)(this.getPositionStart())&&!(0,n.isUndefined)(this.getPositionEnd())||(0,n.isUndefined)(this.getPositionEnd())&&!(0,n.isUndefined)(this.getPositionStart()))throw new Error("A mark object should either have start and end defined or start and end undefined.")},s.prototype.hasPosition=function(){return!(0,n.isUndefined)(this.getPositionStart())},s.prototype.hasBlockPosition=function(){return!(0,n.isUndefined)(this.getBlockPositionStart())},s.parse=function(e){return delete e._parseClass,new s(e)},t.default=s},82304:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819);const s={keyword:"",synonyms:"",description:"",title:"",titleWidth:0,slug:"",locale:"en_US",permalink:"",date:"",customData:{},textTitle:"",writingDirection:"LTR",wpBlocks:[]};function i(e,t){this._text=e||"",this._tree=null,t=t||{},(0,n.defaults)(t,s),""===t.locale&&(t.locale=s.locale),t.hasOwnProperty("url")&&(console.warn("The 'url' attribute is deprecated, use 'slug' instead."),t.slug=t.url||t.slug);const r=t.keyword.replace(/[‘’“â€"'.?!:;,¿¡«»&*@#±^%|~`[\](){}⟨⟩<>/\\–\-\u2014\u00d7\u002b\u0026\s]/g,"");(0,n.isEmpty)(r)&&(t.keyword=s.keyword),this._attributes=t}i.prototype.hasKeyword=function(){return""!==this._attributes.keyword},i.prototype.getKeyword=function(){return this._attributes.keyword},i.prototype.hasSynonyms=function(){return""!==this._attributes.synonyms},i.prototype.getSynonyms=function(){return this._attributes.synonyms},i.prototype.hasText=function(){return""!==this._text},i.prototype.getText=function(){return this._text},i.prototype.setTree=function(e){this._tree=e},i.prototype.getTree=function(){return this._tree},i.prototype.hasDescription=function(){return""!==this._attributes.description},i.prototype.getDescription=function(){return this._attributes.description},i.prototype.hasTitle=function(){return""!==this._attributes.title},i.prototype.getTitle=function(){return this._attributes.title},i.prototype.hasTitleWidth=function(){return 0!==this._attributes.titleWidth},i.prototype.getTitleWidth=function(){return this._attributes.titleWidth},i.prototype.hasSlug=function(){return""!==this._attributes.slug},i.prototype.getSlug=function(){return this._attributes.slug},i.prototype.hasUrl=function(){return console.warn("This function is deprecated, use hasSlug instead"),this.hasSlug()},i.prototype.getUrl=function(){return console.warn("This function is deprecated, use getSlug instead"),this.getSlug()},i.prototype.hasLocale=function(){return""!==this._attributes.locale},i.prototype.getLocale=function(){return this._attributes.locale},i.prototype.getWritingDirection=function(){return this._attributes.writingDirection},i.prototype.hasPermalink=function(){return""!==this._attributes.permalink},i.prototype.getPermalink=function(){return this._attributes.permalink},i.prototype.hasDate=function(){return""!==this._attributes.date},i.prototype.getDate=function(){return this._attributes.date},i.prototype.hasCustomData=function(){return!(0,n.isEmpty)(this._attributes.customData)},i.prototype.getCustomData=function(){return this._attributes.customData},i.prototype.hasTextTitle=function(){return""!==this._attributes.textTitle&&!(0,n.isNil)(this._attributes.textTitle)},i.prototype.getTextTitle=function(){return this._attributes.textTitle},i.prototype.serialize=function(){return{_parseClass:"Paper",text:this._text,...this._attributes}},i.prototype.equals=function(e){return this._text===e.getText()&&(0,n.isEqual)(this._attributes,e._attributes)},i.parse=function(e){if(e instanceof i)return e;const{text:t,_parseClass:r,...n}=e;return new i(t,n)},t.default=i},73728:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AssessmentResult",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"Mark",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"Paper",{enumerable:!0,get:function(){return i.default}});var n=a(r(73054)),s=a(r(41054)),i=a(r(82304));function a(e){return e&&e.__esModule?e:{default:e}}},86912:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(14715),s=r(65736),i=r(92819),a=r(2043),o=N(r(63745)),l=N(r(70021)),u=N(r(74437)),c=N(r(82304)),d=N(r(73054)),h=N(r(12028)),p=N(r(97679)),f=r(7104),g=N(r(49781)),m=N(r(93334)),_=N(r(55122)),y=N(r(47899)),E=N(r(62887)),T=N(r(85551)),A=N(r(64495)),v=r(33140),b=N(r(88533)),S=N(r(96224)),I=N(r(46746)),O=N(r(72557)),C=r(83819);function N(e){return e&&e.__esModule?e:{default:e}}const D=(0,a.getLogger)("yoast-analysis-worker");D.setDefaultLevel("error");class w{constructor(e,t){this._scope=e,this._configuration={contentAnalysisActive:!0,keywordAnalysisActive:!0,inclusiveLanguageAnalysisActive:!1,useCornerstone:!1,useTaxonomy:!1,locale:"en_US",customAnalysisType:""},this._scheduler=new S.default,this._paper=null,this._relatedKeywords={},this._researcher=t,this._contentAssessor=null,this._seoAssessor=null,this._relatedKeywordAssessor=null,this.additionalAssessors={},this._inclusiveLanguageOptions={},this._results={readability:{results:[],score:0},seo:{"":{results:[],score:0}},inclusiveLanguage:{results:[],score:0}},this._registeredAssessments=[],this._registeredMessageHandlers={},this._registeredParsers=[],this.setupTreeAnalysis(),this.bindActions(),this.assessRelatedKeywords=this.assessRelatedKeywords.bind(this),this.registerAssessment=this.registerAssessment.bind(this),this.registerMessageHandler=this.registerMessageHandler.bind(this),this.refreshAssessment=this.refreshAssessment.bind(this),this.setCustomContentAssessorClass=this.setCustomContentAssessorClass.bind(this),this.setCustomCornerstoneContentAssessorClass=this.setCustomCornerstoneContentAssessorClass.bind(this),this.setCustomSEOAssessorClass=this.setCustomSEOAssessorClass.bind(this),this.setCustomCornerstoneSEOAssessorClass=this.setCustomCornerstoneSEOAssessorClass.bind(this),this.setCustomRelatedKeywordAssessorClass=this.setCustomRelatedKeywordAssessorClass.bind(this),this.setCustomCornerstoneRelatedKeywordAssessorClass=this.setCustomCornerstoneRelatedKeywordAssessorClass.bind(this),this.registerAssessor=this.registerAssessor.bind(this),this.registerResearch=this.registerResearch.bind(this),this.registerHelper=this.registerHelper.bind(this),this.registerResearcherConfig=this.registerResearcherConfig.bind(this),this.setInclusiveLanguageOptions=this.setInclusiveLanguageOptions.bind(this),this.handleMessage=this.handleMessage.bind(this),this.analyzeRelatedKeywords=(0,O.default)(D,this.analyze,"An error occurred while running the related keywords analysis."),this.analyze=(0,O.default)(D,this.analyze,"An error occurred while running the analysis."),this.runResearch=(0,O.default)(D,this.runResearch,"An error occurred after running the '%%name%%' research.")}bindActions(){this.analyze=this.analyze.bind(this),this.analyzeDone=this.analyzeDone.bind(this),this.analyzeRelatedKeywordsDone=this.analyzeRelatedKeywordsDone.bind(this),this.loadScript=this.loadScript.bind(this),this.loadScriptDone=this.loadScriptDone.bind(this),this.customMessage=this.customMessage.bind(this),this.customMessageDone=this.customMessageDone.bind(this),this.clearCache=this.clearCache.bind(this),this.runResearch=this.runResearch.bind(this),this.runResearchDone=this.runResearchDone.bind(this)}setCustomContentAssessorClass(e,t,r){this._CustomContentAssessorClasses[t]=e,this._CustomContentAssessorOptions[t]=r,this._contentAssessor=this.createContentAssessor()}setCustomCornerstoneContentAssessorClass(e,t,r){this._CustomCornerstoneContentAssessorClasses[t]=e,this._CustomCornerstoneContentAssessorOptions[t]=r,this._contentAssessor=this.createContentAssessor()}setCustomSEOAssessorClass(e,t,r){this._CustomSEOAssessorClasses[t]=e,this._CustomSEOAssessorOptions[t]=r,this._seoAssessor=this.createSEOAssessor()}setCustomCornerstoneSEOAssessorClass(e,t,r){this._CustomCornerstoneSEOAssessorClasses[t]=e,this._CustomCornerstoneSEOAssessorOptions[t]=r,this._seoAssessor=this.createSEOAssessor()}setCustomRelatedKeywordAssessorClass(e,t,r){this._CustomRelatedKeywordAssessorClasses[t]=e,this._CustomRelatedKeywordAssessorOptions[t]=r,this._relatedKeywordAssessor=this.createRelatedKeywordsAssessor()}setCustomCornerstoneRelatedKeywordAssessorClass(e,t,r){this._CustomCornerstoneRelatedKeywordAssessorClasses[t]=e,this._CustomCornerstoneRelatedKeywordAssessorOptions[t]=r,this._relatedKeywordAssessor=this.createRelatedKeywordsAssessor()}setInclusiveLanguageOptions(e){this._inclusiveLanguageOptions=e}setupTreeAnalysis(){this._treeResearcher=null,this._contentTreeAssessor=null,this._seoTreeAssessor=null,this._relatedKeywordTreeAssessor=null,this._CustomSEOAssessorClasses={},this._CustomCornerstoneSEOAssessorClasses={},this._CustomContentAssessorClasses={},this._CustomCornerstoneContentAssessorClasses={},this._CustomRelatedKeywordAssessorClasses={},this._CustomCornerstoneRelatedKeywordAssessorClasses={},this._CustomSEOAssessorOptions={},this._CustomCornerstoneSEOAssessorOptions={},this._CustomContentAssessorOptions={},this._CustomCornerstoneContentAssessorOptions={},this._CustomRelatedKeywordAssessorOptions={},this._CustomCornerstoneRelatedKeywordAssessorOptions={},this._registeredTreeAssessments=[],this._seoScoreAggregator=new C.SEOScoreAggregator,this._contentScoreAggregator=new C.ReadabilityScoreAggregator,this._tree=null,this._treeBuilder=null}register(){this._scope.onmessage=this.handleMessage,this._scope.analysisWorker=this}handleMessage({data:{type:e,id:t,payload:r}}){switch(r=I.default.parse(r),D.debug("AnalysisWebWorker incoming:",e,t,r),e){case"initialize":this.initialize(t,r),this._scheduler.startPolling();break;case"analyze":this._scheduler.schedule({id:t,execute:this.analyze,done:this.analyzeDone,data:r,type:e});break;case"analyzeRelatedKeywords":this._scheduler.schedule({id:t,execute:this.analyzeRelatedKeywords,done:this.analyzeRelatedKeywordsDone,data:r,type:e});break;case"loadScript":this._scheduler.schedule({id:t,execute:this.loadScript,done:this.loadScriptDone,data:r,type:e});break;case"runResearch":this._scheduler.schedule({id:t,execute:this.runResearch,done:this.runResearchDone,data:r});break;case"customMessage":{const n=r.name;if(n&&this._registeredMessageHandlers[n]){this._scheduler.schedule({id:t,execute:this.customMessage,done:this.customMessageDone,data:r,type:e});break}this.customMessageDone(t,{error:new Error("No message handler registered for messages with name: "+n)});break}default:console.warn("AnalysisWebWorker unrecognized action:",e)}}createContentAssessor(){const{contentAnalysisActive:e,useCornerstone:t,customAnalysisType:r}=this._configuration;if(!1===e)return null;let n;return!0===t?(n=this._CustomCornerstoneContentAssessorClasses[r]?new this._CustomCornerstoneContentAssessorClasses[r](this._researcher,this._CustomCornerstoneContentAssessorOptions[r]):new m.default(this._researcher),this._registeredAssessments.forEach((({name:e,assessment:t,type:r})=>{(0,i.isUndefined)(n.getAssessment(e))&&"cornerstoneReadability"===r&&n.addAssessment(e,t)}))):(n=this._CustomContentAssessorClasses[r]?new this._CustomContentAssessorClasses[r](this._researcher,this._CustomContentAssessorOptions[r]):new l.default(this._researcher),this._registeredAssessments.forEach((({name:e,assessment:t,type:r})=>{(0,i.isUndefined)(n.getAssessment(e))&&"readability"===r&&n.addAssessment(e,t)}))),n}createSEOAssessor(){const{keywordAnalysisActive:e,useCornerstone:t,useTaxonomy:r,customAnalysisType:n}=this._configuration;if(!1===e)return null;let s;return s=!0===r?new u.default(this._researcher):!0===t?this._CustomCornerstoneSEOAssessorClasses[n]?new this._CustomCornerstoneSEOAssessorClasses[n](this._researcher,this._CustomCornerstoneSEOAssessorOptions[n]):new y.default(this._researcher):this._CustomSEOAssessorClasses[n]?new this._CustomSEOAssessorClasses[n](this._researcher,this._CustomSEOAssessorOptions[n]):new o.default(this._researcher),this._registeredAssessments.forEach((({name:e,assessment:t,type:r})=>{(0,i.isUndefined)(s.getAssessment(e))&&"seo"===r&&s.addAssessment(e,t)})),s}createInclusiveLanguageAssessor(){const{inclusiveLanguageAnalysisActive:e}=this._configuration;return!1===e?null:new p.default(this._researcher,this._inclusiveLanguageOptions)}createRelatedKeywordsAssessor(){const{keywordAnalysisActive:e,useCornerstone:t,useTaxonomy:r,customAnalysisType:n}=this._configuration;if(!1===e)return null;let s;return s=!0===r?new b.default(this._researcher):!0===t?this._CustomCornerstoneRelatedKeywordAssessorClasses[n]?new this._CustomCornerstoneRelatedKeywordAssessorClasses[n](this._researcher,this._CustomCornerstoneRelatedKeywordAssessorOptions[n]):new _.default(this._researcher):this._CustomRelatedKeywordAssessorClasses[n]?new this._CustomRelatedKeywordAssessorClasses[n](this._researcher,this._CustomRelatedKeywordAssessorOptions[n]):new h.default(this._researcher),this._registeredAssessments.forEach((({name:e,assessment:t,type:r})=>{(0,i.isUndefined)(s.getAssessment(e))&&"relatedKeyphrase"===r&&s.addAssessment(e,t)})),s}send(e,t,r={}){D.debug("AnalysisWebWorker outgoing:",e,t,r),r=I.default.serialize(r),this._scope.postMessage({type:e,id:t,payload:r})}static shouldAssessorsUpdate(e,t=null,r=null,n=null){const s=Object.keys(e);return{readability:(0,i.isNull)(t)||(0,A.default)(s,["contentAnalysisActive","useCornerstone","locale","translations","customAnalysisType"]),seo:(0,i.isNull)(r)||(0,A.default)(s,["keywordAnalysisActive","useCornerstone","useTaxonomy","locale","translations","researchData","customAnalysisType"]),inclusiveLanguage:(0,i.isNull)(n)||(0,A.default)(s,["inclusiveLanguageAnalysisActive","locale","translations"])}}initialize(e,t){const r=w.shouldAssessorsUpdate(t,this._contentAssessor,this._seoAssessor,this._inclusiveLanguageAssessor);(0,i.has)(t,"translations")&&Object.values(t.translations).forEach((e=>{if(e){const{domain:t,locale_data:r}=e;(0,s.setLocaleData)(r[t],t)}})),(0,i.has)(t,"researchData")&&((0,i.forEach)(t.researchData,((e,t)=>{this._researcher.addResearchData(t,e)})),delete t.researchData),(0,i.has)(t,"defaultQueryParams")&&((0,v.configureShortlinker)({params:t.defaultQueryParams}),delete t.defaultQueryParams),(0,i.has)(t,"logLevel")&&(D.setLevel(t.logLevel,!1),delete t.logLevel),(0,i.has)(t,"enabledFeatures")&&((0,n.enableFeatures)(t.enabledFeatures),delete t.enabledFeatures),this._configuration=(0,i.merge)(this._configuration,t),r.readability&&(this._contentAssessor=this.createContentAssessor(),this._contentTreeAssessor=null),r.seo&&(this._seoAssessor=this.createSEOAssessor(),this._relatedKeywordAssessor=this.createRelatedKeywordsAssessor()),r.inclusiveLanguage&&(this._inclusiveLanguageAssessor=this.createInclusiveLanguageAssessor()),this.clearCache(),this.send("initialize:done",e)}registerAssessor(e,t,r){const n=new t(this._researcher);this.additionalAssessors[e]={assessor:n,shouldUpdate:r}}registerAssessment(e,t,r,n="seo"){const{useCornerstone:s}=this._configuration;if(!(0,i.isString)(e))throw new E.default("Failed to register assessment for plugin "+r+". Expected parameter `name` to be a string.");if(!(0,i.isObject)(t))throw new E.default("Failed to register assessment for plugin "+r+". Expected parameter `assessment` to be a function.");if(!(0,i.isString)(r))throw new E.default("Failed to register assessment for plugin "+r+". Expected parameter `pluginName` to be a string.");const a=r+"-"+e;return null!==this._seoAssessor&&"seo"===n&&this._seoAssessor.addAssessment(a,t),null!==this._contentAssessor&&"readability"===n&&this._contentAssessor.addAssessment(a,t),null!==this._contentAssessor&&"cornerstoneReadability"===n&&s&&this._contentAssessor.addAssessment(a,t),null!==this._relatedKeywordAssessor&&"relatedKeyphrase"===n&&this._relatedKeywordAssessor.addAssessment(a,t),this._registeredAssessments.push({combinedName:a,assessment:t,type:n}),this.refreshAssessment(e,r),!0}registerMessageHandler(e,t,r){if(!(0,i.isString)(e))throw new E.default("Failed to register handler for plugin "+r+". Expected parameter `name` to be a string.");if(!(0,i.isObject)(t))throw new E.default("Failed to register handler for plugin "+r+". Expected parameter `handler` to be a function.");if(!(0,i.isString)(r))throw new E.default("Failed to register handler for plugin "+r+". Expected parameter `pluginName` to be a string.");e=r+"-"+e,this._registeredMessageHandlers[e]=t}refreshAssessment(e,t){if(!(0,i.isString)(e))throw new E.default("Failed to refresh assessment for plugin "+t+". Expected parameter `name` to be a string.");if(!(0,i.isString)(t))throw new E.default("Failed to refresh assessment for plugin "+t+". Expected parameter `pluginName` to be a string.");this.clearCache()}registerParser(e){if("function"!=typeof e.isApplicable)throw new E.default("Failed to register the custom parser. Expected parameter 'parser' to have a method 'isApplicable'.");if("function"!=typeof e.parse)throw new E.default("Failed to register the custom parser. Expected parameter 'parser' to have a method 'parse'.");this._registeredParsers.push(e)}clearCache(){this._paper=null}setLocale(e){this._configuration.locale!==e&&(this._configuration.locale=e,this._contentAssessor=this.createContentAssessor())}shouldReadabilityUpdate(e){return null===this._paper||this._paper.getText()!==e.getText()||this._paper.getKeyword()!==e.getKeyword()||this._paper.getLocale()!==e.getLocale()}shouldInclusiveLanguageUpdate(e){return null===this._paper||this._paper.getText()!==e.getText()||this._paper.getTextTitle()!==e.getTextTitle()||this._paper.getLocale()!==e.getLocale()}updateInclusiveLanguageAssessor(e){this._configuration.inclusiveLanguageAnalysisActive&&this._inclusiveLanguageAssessor&&e&&(this._inclusiveLanguageAssessor.assess(this._paper),this._results.inclusiveLanguage={results:this._inclusiveLanguageAssessor.results,score:this._inclusiveLanguageAssessor.calculateOverallScore()})}shouldSeoUpdate(e,{keyword:t,synonyms:r}){return!!(0,i.isUndefined)(this._relatedKeywords[e])||this._relatedKeywords[e].keyword!==t||this._relatedKeywords[e].synonyms!==r}shouldAdditionalAssessorsUpdate(e){const t={};return Object.keys(this.additionalAssessors).forEach((r=>{t[r]=this.additionalAssessors[r].shouldUpdate(this._paper,e)})),t}updateAdditionalAssessors(e){Object.keys(this.additionalAssessors).forEach((t=>{const{assessor:r}=this.additionalAssessors[t];this._results[t]&&!e[t]||(r.assess(this._paper),this._results[t]={results:r.results,score:r.calculateOverallScore()})}))}async analyze(e,{paper:t,relatedKeywords:r={}}){const n=null===this._paper||!this._paper.equals(t),s=this.shouldReadabilityUpdate(t),a=this.shouldInclusiveLanguageUpdate(t),o=this.shouldAdditionalAssessorsUpdate(t);if(n){this._paper=t,this._researcher.setPaper(this._paper);const e=new g.default(this._researcher),r=this._paper._attributes&&this._paper._attributes.shortcodes;this._paper.setTree((0,f.build)(this._paper,e,r)),this.setLocale(this._paper.getLocale())}if(this._configuration.keywordAnalysisActive&&this._seoAssessor&&(n&&(this._results.seo[""]=await this.assess(this._paper,this._tree,{oldAssessor:this._seoAssessor,treeAssessor:this._seoTreeAssessor,scoreAggregator:this._seoScoreAggregator})),!(0,i.isEmpty)(r))){const e=Object.keys(r);(await this.assessRelatedKeywords(t,this._tree,r)).forEach((e=>{this._results.seo[e.key]=e.results})),e.length>1&&(this._results.seo=(0,i.pickBy)(this._results.seo,((t,r)=>(0,i.includes)(e,r)||""===r)))}if(this._configuration.contentAnalysisActive&&this._contentAssessor&&s){const e={oldAssessor:this._contentAssessor,treeAssessor:this._contentTreeAssessor,scoreAggregator:this._contentScoreAggregator};e.scoreAggregator.setLocale(this._configuration.locale),this._results.readability=await this.assess(this._paper,this._tree,e)}return this.updateInclusiveLanguageAssessor(a),this.updateAdditionalAssessors(o),this._results}async assess(e,t,r){const{oldAssessor:n,scoreAggregator:s}=r;n.assess(e);const i=[...n.results];return{results:i,score:s.aggregate(i)}}generateAssessmentError(e){const t=new d.default;return t.setScore(-1),t.setText((0,s.sprintf)(/* translators: %1$s expands to the name of the assessment. */ +(0,s.__)("An error occurred in the '%1$s' assessment","wordpress-seo"),e.name)),t}async assessRelatedKeywords(e,t,r){const n=Object.keys(r);return await Promise.all(n.map((n=>{this._relatedKeywords[n]=r[n];const s=c.default.parse({...e.serialize(),keyword:this._relatedKeywords[n].keyword,synonyms:this._relatedKeywords[n].synonyms}),i={oldAssessor:this._relatedKeywordAssessor,treeAssessor:this._relatedKeywordTreeAssessor,scoreAggregator:this._seoScoreAggregator};return this.assess(s,t,i).then((e=>({key:n,results:e})))})))}loadScript(e,{url:t}){if((0,i.isUndefined)(t))return{loaded:!1,url:t,message:"Load Script was called without an URL."};try{this._scope.importScripts(t)}catch(e){return{loaded:!1,url:t,message:e.message}}return{loaded:!0,url:t}}loadScriptDone(e,t){t.loaded?this.send("loadScript:done",e,t):this.send("loadScript:failed",e,t)}analyzeDone(e,t){t.error?this.send("analyze:failed",e,t):this.send("analyze:done",e,t)}analyzeRelatedKeywordsDone(e,t){t.error?this.send("analyzeRelatedKeywords:failed",e,t):this.send("analyzeRelatedKeywords:done",e,t)}customMessage(e,{name:t,data:r}){try{return{success:!0,data:this._registeredMessageHandlers[t](r)}}catch(e){return{error:e}}}customMessageDone(e,t){t.success?this.send("customMessage:done",e,t.data):this.send("customMessage:failed",t.error)}registerResearch(e,t){if(!(0,i.isString)(e))throw new E.default("Failed to register the custom research. Expected parameter `name` to be a string.");if(!(0,i.isObject)(t))throw new E.default("Failed to register the custom research. Expected parameter `research` to be a function.");const r=this._researcher;r.hasResearch(e)||r.addResearch(e,t)}runResearch(e,{name:t,paper:r=null}){const n=this._researcher.getData("morphology"),s=this._researcher;if(null!==r&&(s.setPaper(r),s.addResearchData("morphology",n),null===r.getTree())){const e=new g.default(s),t=r._attributes&&r._attributes.shortcodes;r.setTree((0,f.build)(r,e,t))}return s.getResearch(t)}runResearchDone(e,t){t.error?this.send("runResearch:failed",e,t):this.send("runResearch:done",e,t)}registerHelper(e,t){if(!(0,i.isString)(e))throw new E.default("Failed to register the custom helper. Expected parameter `name` to be a string.");if(!(0,i.isObject)(t))throw new E.default("Failed to register the custom helper. Expected parameter `helper` to be a function.");const r=this._researcher;r.hasHelper(e)||r.addHelper(e,t)}registerResearcherConfig(e,t){if(!(0,i.isString)(e))throw new E.default("Failed to register the custom researcher config. Expected parameter `name` to be a string.");if((0,i.isUndefined)(t)||(0,i.isEmpty)(t))throw new T.default("Failed to register the custom researcher config. Expected parameter `researcherConfig` to be defined.");const r=this._researcher;r.hasConfig(e)||r.addConfig(e,t)}}t.default=w},49326:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=i(r(31769)),s=i(r(46746));function i(e){return e&&e.__esModule?e:{default:e}}t.default=class{constructor(e){this._worker=e,this._requests={},this._autoIncrementedRequestId=-1,this.initialize=this.initialize.bind(this),this.analyze=this.analyze.bind(this),this.analyzeRelatedKeywords=this.analyzeRelatedKeywords.bind(this),this.loadScript=this.loadScript.bind(this),this.sendMessage=this.sendMessage.bind(this),this.runResearch=this.runResearch.bind(this),this.handleMessage=this.handleMessage.bind(this),this.handleMessageError=this.handleMessageError.bind(this),this.handleError=this.handleError.bind(this),this._worker.onmessage=this.handleMessage,this._worker.onmessageerror=this.handleMessageError,this._worker.onerror=this.handleError}handleMessage({data:{type:e,id:t,payload:r}}){const n=this._requests[t];if(n){switch(r=s.default.parse(r),e){case"initialize:done":case"loadScript:done":case"customMessage:done":case"runResearch:done":case"analyzeRelatedKeywords:done":case"analyze:done":n.resolve(r);break;case"analyze:failed":case"loadScript:failed":case"customMessage:failed":case"runResearch:failed":case"analyzeRelatedKeywords:failed":n.reject(r);break;default:console.warn("AnalysisWebWorker unrecognized action:",e)}delete this._requests[t]}else console.warn("AnalysisWebWorker unmatched response:",r)}handleMessageError(e){console.warn("AnalysisWebWorker message error:",e)}handleError(e){const t=Object.keys(this._requests),r=t[t.length-1],n=this._requests[r];n?n.reject(e):console.error("AnalysisWebWorker error:",e)}createRequestId(){return this._autoIncrementedRequestId++,this._autoIncrementedRequestId}createRequestPromise(e,t={}){return new Promise(((r,s)=>{this._requests[e]=new n.default(r,s,t)}))}sendRequest(e,t,r={}){const n=this.createRequestId(),s=this.createRequestPromise(n,r);return this.send(e,n,t),s}send(e,t,r={}){r=s.default.serialize(r),this._worker.postMessage({type:e,id:t,payload:r})}initialize(e){return this.sendRequest("initialize",e)}analyzeRelatedKeywords(e,t={}){return this.sendRequest("analyzeRelatedKeywords",{paper:e,relatedKeywords:t})}analyze(e){return this.sendRequest("analyze",{paper:e})}loadScript(e){return this.sendRequest("loadScript",{url:e})}sendMessage(e,t,r){return e=r+"-"+e,this.sendRequest("customMessage",{name:e,data:t},t)}runResearch(e,t=null){return this.sendRequest("runResearch",{name:e,paper:t})}}},7718:(e,t)=>{"use strict";function r(e){return`\n\t\ttry {\n\t\t\t${e}\n\t\t} catch ( error ) {\n\t\t\tconsole.log( "Error occurred during worker initialization:" );\n\t\t\tconsole.log( error );\n\t\t}\n\t`}function n(e){return`\n\t\tself.yoastOriginalUrl = '${e}';\n\t\timportScripts('${e}');\n\t`}function s(e,t){const r=new URL(e,window.location.origin),n=new URL(t,window.location.origin);return r.hostname===n.hostname&&r.port===n.port&&r.protocol===n.protocol}function i(e){const t=window.URL||window.webkitURL,s=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,i=r(n(e));let a;try{a=new Blob([i],{type:"application/javascript"})}catch(e){const t=new s;t.append(i),a=t.getBlob("application/javascript")}return t.createObjectURL(a)}function a(e){const t=i(e);return new Worker(t)}function o(e){if(!s(window.location,e)||window.wpseoAdminL10n&&"1"===window.wpseoAdminL10n.isWebStoriesIntegrationActive)return a(e);let t=null;try{t=new Worker(e)}catch(r){t=a(e)}return t}Object.defineProperty(t,"__esModule",{value:!0}),t.createBlobScript=n,t.createBlobURL=i,t.createExceptionHandler=r,t.createWorker=o,t.createWorkerFallback=a,t.default=void 0,t.isSameOrigin=s,t.default=o},77687:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"AnalysisWebWorker",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"AnalysisWorkerWrapper",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"createWorker",{enumerable:!0,get:function(){return i.default}});var n=a(r(86912)),s=a(r(49326)),i=a(r(7718));function a(e){return e&&e.__esModule?e:{default:e}}},90256:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(19832))&&n.__esModule?n:{default:n};t.default=class{constructor(e,t,r={}){this._resolve=e,this._reject=t,this._data=r}resolve(e={}){const t=new s.default(e,this._data);this._resolve(t)}reject(e={}){const t=new s.default(e,this._data);this._reject(t)}}},19832:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor(e,t={}){this.result=e,this.data=t}}},31769:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(90256))&&n.__esModule?n:{default:n};t.default=s.default},30271:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=r(92819),i=(n=r(11506))&&n.__esModule?n:{default:n};const a={pollTime:50};t.default=class{constructor(e={}){this._configuration=(0,s.merge)(a,e),this._tasks={standard:[],extensions:[],analyze:[],analyzeRelatedKeywords:[]},this._pollHandle=null,this._started=!1,this.startPolling=this.startPolling.bind(this),this.stopPolling=this.stopPolling.bind(this),this.tick=this.tick.bind(this)}startPolling(){this._started||(this._started=!0,this.tick())}tick(){this.executeNextTask().then((()=>{this._pollHandle=setTimeout(this.tick,this._configuration.pollTime)}))}stopPolling(){clearTimeout(this._pollHandle),this._pollHandle=null,this._started=!1}schedule({id:e,execute:t,done:r,data:n,type:s}){const a=new i.default(e,t,r,n,s);switch(s){case"customMessage":case"loadScript":this._tasks.extensions.push(a);break;case"analyze":this._tasks.analyze=[a];break;case"analyzeRelatedKeywords":this._tasks.analyzeRelatedKeywords=[a];break;default:this._tasks.standard.push(a)}}getNextTask(){return this._tasks.extensions.length>0?this._tasks.extensions.shift():this._tasks.analyze.length>0?this._tasks.analyze.shift():this._tasks.analyzeRelatedKeywords.length>0?this._tasks.analyzeRelatedKeywords.shift():this._tasks.standard.length>0?this._tasks.standard.shift():null}executeNextTask(){const e=this.getNextTask();return null===e?Promise.resolve(null):Promise.resolve().then((()=>e.execute(e.id,e.data))).then((t=>(e.done(e.id,t),t)))}}},11506:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(92819);t.default=class{constructor(e,t,r,s={},i="analyze"){if(!(0,n.isNumber)(e))throw new Error("Task.id should be a number.");if(!(0,n.isFunction)(t))throw new Error("Task.execute should be a function.");if(!(0,n.isFunction)(r))throw new Error("Task.done should be a function.");if(!(0,n.isObject)(s))throw new Error("Task.data should be an object.");this.id=e,this.execute=t,this.done=r,this.data=s,this.type=i}}},96224:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n,s=(n=r(30271))&&n.__esModule?n:{default:n};t.default=s.default},46746:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=i(r(6658)),s=i(r(61854));function i(e){return e&&e.__esModule?e:{default:e}}t.default={parse:n.default,serialize:s.default}},6658:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){if((0,n.isArray)(t))return t.map(e);const r=(0,n.isObject)(t);return r&&t._parseClass&&d[t._parseClass]?"Sentence"===t._parseClass||"Clause"===t._parseClass?d[t._parseClass].prototype.parse(t):d[t._parseClass].parse(t):r?(0,n.mapValues)(t,(t=>e(t))):t};var n=r(92819),s=c(r(73054)),i=c(r(41054)),a=c(r(82304)),o=c(r(18812)),l=c(r(83937)),u=c(r(4446));function c(e){return e&&e.__esModule?e:{default:e}}const d={AssessmentResult:s.default,Mark:i.default,Paper:a.default,Sentence:o.default,Clause:l.default,ProminentWord:u.default}},61854:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){if((0,n.isArray)(t))return t.map(e);const r=(0,n.isObject)(t);return r&&t.serialize?t.serialize():r?(0,n.mapValues)(t,(t=>e(t))):t};var n=r(92819)},72557:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r=""){return async(...n)=>{try{return await t(...n)}catch(t){return{error:i(e,t,n[1],r)}}}};var n,s=(n=r(54057))&&n.__esModule?n:{default:n};const i=function(e,t,r,n=""){r&&(n=(0,s.default)(n,r));let i=n?[n]:[];return t.name&&t.message&&(t.stack&&e.debug(t.stack),i.push(`${t.name}: ${t.message}`)),i=i.join("\n\t"),e.error(i),i}},79742:(e,t)=>{"use strict";t.byteLength=function(e){var t=o(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,i=o(e),a=i[0],l=i[1],u=new s(function(e,t,r){return 3*(t+r)/4-r}(0,a,l)),c=0,d=l>0?a-4:a;for(r=0;r>16&255,u[c++]=t>>8&255,u[c++]=255&t;return 2===l&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[c++]=255&t),1===l&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,s=n%3,i=[],a=16383,o=0,u=n-s;ou?u:o+a));return 1===s?(t=e[n-1],i.push(r[t>>2]+r[t<<4&63]+"==")):2===s&&(t=(e[n-2]<<8)+e[n-1],i.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),i.join("")};for(var r=[],n=[],s="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=i[a],n[i.charCodeAt(a)]=a;function o(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function l(e,t,n){for(var s,i,a=[],o=t;o>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},48764:(e,t,r)=>{"use strict";var n=r(79742),s=r(80645),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){return+e!=e&&(e=0),l.alloc(+e)},t.INSPECT_MAX_BYTES=50;var a=2147483647;function o(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return d(e)}return u(e,t,r)}function u(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|g(e,t),n=o(r),s=n.write(e,t);return s!==r&&(n=n.slice(0,s)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(H(e,Uint8Array)){var t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(H(e,ArrayBuffer)||e&&H(e.buffer,ArrayBuffer))return p(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(H(e,SharedArrayBuffer)||e&&H(e.buffer,SharedArrayBuffer)))return p(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return l.from(n,t,r);var s=function(e){if(l.isBuffer(e)){var t=0|f(e.length),r=o(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||j(e.length)?o(0):h(e):"Buffer"===e.type&&Array.isArray(e.data)?h(e.data):void 0}(e);if(s)return s;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function d(e){return c(e),o(e<0?0:0|f(e))}function h(e){for(var t=e.length<0?0:0|f(e.length),r=o(t),n=0;n=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function g(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||H(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var s=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return U(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return B(e).length;default:if(s)return n?-1:U(e).length;t=(""+t).toLowerCase(),s=!0}}function m(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return w(this,t,r);case"utf8":case"utf-8":return O(this,t,r);case"ascii":return N(this,t,r);case"latin1":case"binary":return D(this,t,r);case"base64":return I(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function _(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function y(e,t,r,n,s){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),j(r=+r)&&(r=s?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(s)return-1;r=e.length-1}else if(r<0){if(!s)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:E(e,t,r,n,s);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):E(e,[t],r,n,s);throw new TypeError("val must be string, number or Buffer")}function E(e,t,r,n,s){var i,a=1,o=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,o/=2,l/=2,r/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(s){var c=-1;for(i=r;io&&(r=o-l),i=r;i>=0;i--){for(var d=!0,h=0;hs&&(n=s):n=s;var i=t.length;n>i/2&&(n=i/2);for(var a=0;a>8,s=r%256,i.push(s),i.push(n);return i}(t,e.length-r),e,r,n)}function I(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function O(e,t,r){r=Math.min(e.length,r);for(var n=[],s=t;s239?4:u>223?3:u>191?2:1;if(s+d<=r)switch(d){case 1:u<128&&(c=u);break;case 2:128==(192&(i=e[s+1]))&&(l=(31&u)<<6|63&i)>127&&(c=l);break;case 3:i=e[s+1],a=e[s+2],128==(192&i)&&128==(192&a)&&(l=(15&u)<<12|(63&i)<<6|63&a)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:i=e[s+1],a=e[s+2],o=e[s+3],128==(192&i)&&128==(192&a)&&128==(192&o)&&(l=(15&u)<<18|(63&i)<<12|(63&a)<<6|63&o)>65535&&l<1114112&&(c=l)}null===c?(c=65533,d=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),s+=d}return function(e){var t=e.length;if(t<=C)return String.fromCharCode.apply(String,e);for(var r="",n=0;nn.length?l.from(i).copy(n,s):Uint8Array.prototype.set.call(n,i,s);else{if(!l.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(n,s)}s+=i.length}return n},l.byteLength=g,l.prototype._isBuffer=!0,l.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;tr&&(e+=" ... "),""},i&&(l.prototype[i]=l.prototype.inspect),l.prototype.compare=function(e,t,r,n,s){if(H(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===s&&(s=this.length),t<0||r>e.length||n<0||s>this.length)throw new RangeError("out of range index");if(n>=s&&t>=r)return 0;if(n>=s)return-1;if(t>=r)return 1;if(this===e)return 0;for(var i=(s>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),o=Math.min(i,a),u=this.slice(n,s),c=e.slice(t,r),d=0;d>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var s=this.length-t;if((void 0===r||r>s)&&(r=s),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return T(this,e,t,r);case"utf8":case"utf-8":return A(this,e,t,r);case"ascii":case"latin1":case"binary":return v(this,e,t,r);case"base64":return b(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;function N(e,t,r){var n="";r=Math.min(e.length,r);for(var s=t;sn)&&(r=n);for(var s="",i=t;ir)throw new RangeError("Trying to access beyond buffer length")}function k(e,t,r,n,s,i){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||te.length)throw new RangeError("Index out of range")}function L(e,t,r,n,s,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function M(e,t,r,n,i){return t=+t,r>>>=0,i||L(e,0,r,4),s.write(e,t,r,n,23,4),r+4}function x(e,t,r,n,i){return t=+t,r>>>=0,i||L(e,0,r,8),s.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||R(e,t,this.length);for(var n=this[e],s=1,i=0;++i>>=0,t>>>=0,r||R(e,t,this.length);for(var n=this[e+--t],s=1;t>0&&(s*=256);)n+=this[e+--t]*s;return n},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||R(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||R(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||R(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||R(e,t,this.length);for(var n=this[e],s=1,i=0;++i=(s*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||R(e,t,this.length);for(var n=t,s=1,i=this[e+--n];n>0&&(s*=256);)i+=this[e+--n]*s;return i>=(s*=128)&&(i-=Math.pow(2,8*t)),i},l.prototype.readInt8=function(e,t){return e>>>=0,t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||R(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){e>>>=0,t||R(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return e>>>=0,t||R(e,4,this.length),s.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||R(e,4,this.length),s.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||R(e,8,this.length),s.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||R(e,8,this.length),s.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||k(this,e,t,r,Math.pow(2,8*r)-1,0);var s=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,n||k(this,e,t,r,Math.pow(2,8*r)-1,0);var s=r-1,i=1;for(this[t+s]=255&e;--s>=0&&(i*=256);)this[t+s]=e/i&255;return t+r},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var s=Math.pow(2,8*r-1);k(this,e,t,r,s-1,-s)}var i=0,a=1,o=0;for(this[t]=255&e;++i>0)-o&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var s=Math.pow(2,8*r-1);k(this,e,t,r,s-1,-s)}var i=r-1,a=1,o=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===o&&0!==this[t+i+1]&&(o=1),this[t+i]=(e/a>>0)-o&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||k(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeFloatLE=function(e,t,r){return M(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return M(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return x(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return x(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&r<57344){if(!s){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&i.push(239,191,189);continue}s=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),s=r;continue}r=65536+(s-55296<<10|r-56320)}else s&&(t-=3)>-1&&i.push(239,191,189);if(s=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function B(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(F,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function G(e,t,r,n){for(var s=0;s=t.length||s>=e.length);++s)t[s+r]=e[s];return s}function H(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function j(e){return e!=e}var $=function(){for(var e="0123456789abcdef",t=new Array(256),r=0;r<16;++r)for(var n=16*r,s=0;s<16;++s)t[n+s]=e[r]+e[s];return t}()},21924:(e,t,r)=>{"use strict";var n=r(10492),s=r(55559),i=s(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?s(r):r}},55559:(e,t,r)=>{"use strict";var n=r(58612),s=r(10492),i=s("%Function.prototype.apply%"),a=s("%Function.prototype.call%"),o=s("%Reflect.apply%",!0)||n.call(a,i),l=s("%Object.getOwnPropertyDescriptor%",!0),u=s("%Object.defineProperty%",!0),c=s("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var t=o(n,a,arguments);return l&&u&&l(t,"length").configurable&&u(t,"length",{value:1+c(0,e.length-(arguments.length-1))}),t};var d=function(){return o(n,i,arguments)};u?u(e.exports,"apply",{value:d}):e.exports.apply=d},10492:(e,t,r)=>{"use strict";var n,s=SyntaxError,i=Function,a=TypeError,o=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var u=function(){throw new a},c=l?function(){try{return u}catch(e){try{return l(arguments,"callee").get}catch(e){return u}}}():u,d=r(38626)(),h=Object.getPrototypeOf||function(e){return e.__proto__},p={},f="undefined"==typeof Uint8Array?n:h(Uint8Array),g={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":d?h([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":d?h(h([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&d?h((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&d?h((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":d?h(""[Symbol.iterator]()):n,"%Symbol%":d?Symbol:n,"%SyntaxError%":s,"%ThrowTypeError%":c,"%TypedArray%":f,"%TypeError%":a,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet},m=function e(t){var r;if("%AsyncFunction%"===t)r=o("async function () {}");else if("%GeneratorFunction%"===t)r=o("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=o("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var s=e("%AsyncGenerator%");s&&(r=h(s.prototype))}return g[t]=r,r},_={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=r(58612),E=r(17642),T=y.call(Function.call,Array.prototype.concat),A=y.call(Function.apply,Array.prototype.splice),v=y.call(Function.call,String.prototype.replace),b=y.call(Function.call,String.prototype.slice),S=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,I=/\\(\\)?/g,O=function(e,t){var r,n=e;if(E(_,n)&&(n="%"+(r=_[n])[0]+"%"),E(g,n)){var i=g[n];if(i===p&&(i=m(n)),void 0===i&&!t)throw new a("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');var r=function(e){var t=b(e,0,1),r=b(e,-1);if("%"===t&&"%"!==r)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var n=[];return v(e,S,(function(e,t,r,s){n[n.length]=r?v(s,I,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",i=O("%"+n+"%",t),o=i.name,u=i.value,c=!1,d=i.alias;d&&(n=d[0],A(r,T([0,1],d)));for(var h=1,p=!0;h=r.length){var y=l(u,f);u=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:u[f]}else p=E(u,f),u=u[f];p&&!c&&(g[o]=u)}}return u}},38626:(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,s=r(19305);e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&s()}},19305:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var s=Object.getOwnPropertyDescriptor(e,t);if(42!==s.value||!0!==s.enumerable)return!1}return!0}},12296:(e,t,r)=>{"use strict";var n=r(31044)(),s=r(40210),i=n&&s("%Object.defineProperty%",!0);if(i)try{i({},"a",{value:1})}catch(e){i=!1}var a=s("%SyntaxError%"),o=s("%TypeError%"),l=r(27296);e.exports=function(e,t,r){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new o("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new o("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new o("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new o("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new o("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new o("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,u=arguments.length>5?arguments[5]:null,c=arguments.length>6&&arguments[6],d=!!l&&l(e,t);if(i)i(e,t,{configurable:null===u&&d?d.configurable:!u,enumerable:null===n&&d?d.enumerable:!n,value:r,writable:null===s&&d?d.writable:!s});else{if(!c&&(n||s||u))throw new a("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=r}}},17187:e=>{"use strict";var t,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};t=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise((function(r,n){function s(r){e.removeListener(t,i),n(r)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",s),r([].slice.call(arguments))}g(e,t,i,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&g(e,"error",t,{once:!0})}(e,s)}))},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function o(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,r,n){var s,i,a,u;if(o(r),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),a=i[t]),void 0===a)a=i[t]=r,++e._eventsCount;else if("function"==typeof a?a=i[t]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),(s=l(e))>0&&a.length>s&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},s=c.bind(n);return s.listener=r,n.wrapFn=s,s}function h(e,t,r){var n=e._events;if(void 0===n)return[];var s=n[t];return void 0===s?[]:"function"==typeof s?r?[s.listener||s]:[s]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var u=l.length,c=f(l,u);for(r=0;r=0;i--)if(r[i]===t||r[i].listener===t){a=r[i].listener,s=i;break}if(s<0)return this;0===s?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},i.prototype.listeners=function(e){return h(this,e,!0)},i.prototype.rawListeners=function(e){return h(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},94029:(e,t,r)=>{"use strict";var n=r(95320),s=Object.prototype.toString,i=Object.prototype.hasOwnProperty;e.exports=function(e,t,r){if(!n(t))throw new TypeError("iterator must be a function");var a;arguments.length>=3&&(a=r),"[object Array]"===s.call(e)?function(e,t,r){for(var n=0,s=e.length;n{"use strict";var t=Array.prototype.slice,r=Object.prototype.toString;e.exports=function(e){var n=this;if("function"!=typeof n||"[object Function]"!==r.call(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var s,i=t.call(arguments,1),a=Math.max(0,n.length-i.length),o=[],l=0;l{"use strict";var n=r(17648);e.exports=Function.prototype.bind||n},40210:(e,t,r)=>{"use strict";var n,s=SyntaxError,i=Function,a=TypeError,o=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var u=function(){throw new a},c=l?function(){try{return u}catch(e){try{return l(arguments,"callee").get}catch(e){return u}}}():u,d=r(41405)(),h=r(28185)(),p=Object.getPrototypeOf||(h?function(e){return e.__proto__}:null),f={},g="undefined"!=typeof Uint8Array&&p?p(Uint8Array):n,m={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":d&&p?p([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":f,"%AsyncGenerator%":f,"%AsyncGeneratorFunction%":f,"%AsyncIteratorPrototype%":f,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":f,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":d&&p?p(p([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&d&&p?p((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&d&&p?p((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":d&&p?p(""[Symbol.iterator]()):n,"%Symbol%":d?Symbol:n,"%SyntaxError%":s,"%ThrowTypeError%":c,"%TypedArray%":g,"%TypeError%":a,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};if(p)try{null.error}catch(e){var _=p(p(e));m["%Error.prototype%"]=_}var y=function e(t){var r;if("%AsyncFunction%"===t)r=o("async function () {}");else if("%GeneratorFunction%"===t)r=o("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=o("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var s=e("%AsyncGenerator%");s&&p&&(r=p(s.prototype))}return m[t]=r,r},E={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},T=r(22544),A=r(48824),v=T.call(Function.call,Array.prototype.concat),b=T.call(Function.apply,Array.prototype.splice),S=T.call(Function.call,String.prototype.replace),I=T.call(Function.call,String.prototype.slice),O=T.call(Function.call,RegExp.prototype.exec),C=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,N=/\\(\\)?/g,D=function(e,t){var r,n=e;if(A(E,n)&&(n="%"+(r=E[n])[0]+"%"),A(m,n)){var i=m[n];if(i===f&&(i=y(n)),void 0===i&&!t)throw new a("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');if(null===O(/^%?[^%]*%?$/,e))throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(e){var t=I(e,0,1),r=I(e,-1);if("%"===t&&"%"!==r)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var n=[];return S(e,C,(function(e,t,r,s){n[n.length]=r?S(s,N,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",i=D("%"+n+"%",t),o=i.name,u=i.value,c=!1,d=i.alias;d&&(n=d[0],b(r,v([0,1],d)));for(var h=1,p=!0;h=r.length){var y=l(u,f);u=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:u[f]}else p=A(u,f),u=u[f];p&&!c&&(m[o]=u)}}return u}},73146:e=>{"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n{"use strict";var n=r(73146);e.exports=Function.prototype.bind||n},27296:(e,t,r)=>{"use strict";var n=r(10505)("%Object.getOwnPropertyDescriptor%",!0);if(n)try{n([],"length")}catch(e){n=null}e.exports=n},10505:(e,t,r)=>{"use strict";var n,s=SyntaxError,i=Function,a=TypeError,o=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var u=function(){throw new a},c=l?function(){try{return u}catch(e){try{return l(arguments,"callee").get}catch(e){return u}}}():u,d=r(41405)(),h=Object.getPrototypeOf||function(e){return e.__proto__},p={},f="undefined"==typeof Uint8Array?n:h(Uint8Array),g={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":d?h([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":d?h(h([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&d?h((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&d?h((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":d?h(""[Symbol.iterator]()):n,"%Symbol%":d?Symbol:n,"%SyntaxError%":s,"%ThrowTypeError%":c,"%TypedArray%":f,"%TypeError%":a,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet},m=function e(t){var r;if("%AsyncFunction%"===t)r=o("async function () {}");else if("%GeneratorFunction%"===t)r=o("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=o("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var s=e("%AsyncGenerator%");s&&(r=h(s.prototype))}return g[t]=r,r},_={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=r(58612),E=r(17642),T=y.call(Function.call,Array.prototype.concat),A=y.call(Function.apply,Array.prototype.splice),v=y.call(Function.call,String.prototype.replace),b=y.call(Function.call,String.prototype.slice),S=y.call(Function.call,RegExp.prototype.exec),I=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,O=/\\(\\)?/g,C=function(e,t){var r,n=e;if(E(_,n)&&(n="%"+(r=_[n])[0]+"%"),E(g,n)){var i=g[n];if(i===p&&(i=m(n)),void 0===i&&!t)throw new a("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');if(null===S(/^%?[^%]*%?$/,e))throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(e){var t=b(e,0,1),r=b(e,-1);if("%"===t&&"%"!==r)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var n=[];return v(e,I,(function(e,t,r,s){n[n.length]=r?v(s,O,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",i=C("%"+n+"%",t),o=i.name,u=i.value,c=!1,d=i.alias;d&&(n=d[0],A(r,T([0,1],d)));for(var h=1,p=!0;h=r.length){var y=l(u,f);u=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:u[f]}else p=E(u,f),u=u[f];p&&!c&&(g[o]=u)}}return u}},31044:(e,t,r)=>{"use strict";var n=r(56181)("%Object.defineProperty%",!0),s=function(){if(n)try{return n({},"a",{value:1}),!0}catch(e){return!1}return!1};s.hasArrayLengthDefineBug=function(){if(!s())return null;try{return 1!==n([],"length",{value:1}).length}catch(e){return!0}},e.exports=s},56181:(e,t,r)=>{"use strict";var n,s=SyntaxError,i=Function,a=TypeError,o=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var u=function(){throw new a},c=l?function(){try{return u}catch(e){try{return l(arguments,"callee").get}catch(e){return u}}}():u,d=r(88194)(),h=Object.getPrototypeOf||function(e){return e.__proto__},p={},f="undefined"==typeof Uint8Array?n:h(Uint8Array),g={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":d?h([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":d?h(h([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&d?h((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&d?h((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":d?h(""[Symbol.iterator]()):n,"%Symbol%":d?Symbol:n,"%SyntaxError%":s,"%ThrowTypeError%":c,"%TypedArray%":f,"%TypeError%":a,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet},m=function e(t){var r;if("%AsyncFunction%"===t)r=o("async function () {}");else if("%GeneratorFunction%"===t)r=o("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=o("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var s=e("%AsyncGenerator%");s&&(r=h(s.prototype))}return g[t]=r,r},_={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=r(58612),E=r(17642),T=y.call(Function.call,Array.prototype.concat),A=y.call(Function.apply,Array.prototype.splice),v=y.call(Function.call,String.prototype.replace),b=y.call(Function.call,String.prototype.slice),S=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,I=/\\(\\)?/g,O=function(e,t){var r,n=e;if(E(_,n)&&(n="%"+(r=_[n])[0]+"%"),E(g,n)){var i=g[n];if(i===p&&(i=m(n)),void 0===i&&!t)throw new a("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');var r=function(e){var t=b(e,0,1),r=b(e,-1);if("%"===t&&"%"!==r)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var n=[];return v(e,S,(function(e,t,r,s){n[n.length]=r?v(s,I,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",i=O("%"+n+"%",t),o=i.name,u=i.value,c=!1,d=i.alias;d&&(n=d[0],A(r,T([0,1],d)));for(var h=1,p=!0;h=r.length){var y=l(u,f);u=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:u[f]}else p=E(u,f),u=u[f];p&&!c&&(g[o]=u)}}return u}},88194:(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,s=r(87797);e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&s()}},87797:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var s=Object.getOwnPropertyDescriptor(e,t);if(42!==s.value||!0!==s.enumerable)return!1}return!0}},28185:e=>{"use strict";var t={foo:{}},r=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof r)}},41405:(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,s=r(55419);e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&s()}},55419:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var s=Object.getOwnPropertyDescriptor(e,t);if(42!==s.value||!0!==s.enumerable)return!1}return!0}},99608:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var s=Object.getOwnPropertyDescriptor(e,t);if(42!==s.value||!0!==s.enumerable)return!1}return!0}},96410:(e,t,r)=>{"use strict";var n=r(99608);e.exports=function(){return n()&&!!Symbol.toStringTag}},17642:(e,t,r)=>{"use strict";var n=r(58612);e.exports=n.call(Function.call,Object.prototype.hasOwnProperty)},48824:(e,t,r)=>{"use strict";var n=Function.prototype.call,s=Object.prototype.hasOwnProperty,i=r(24753);e.exports=i.call(n,s)},61454:e=>{"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n{"use strict";var n=r(61454);e.exports=Function.prototype.bind||n},95449:(e,t,r)=>{function n(e){this._cbs=e||{},this.events=[]}e.exports=n;var s=r(23719).EVENTS;Object.keys(s).forEach((function(e){if(0===s[e])e="on"+e,n.prototype[e]=function(){this.events.push([e]),this._cbs[e]&&this._cbs[e]()};else if(1===s[e])e="on"+e,n.prototype[e]=function(t){this.events.push([e,t]),this._cbs[e]&&this._cbs[e](t)};else{if(2!==s[e])throw Error("wrong number of arguments");e="on"+e,n.prototype[e]=function(t,r){this.events.push([e,t,r]),this._cbs[e]&&this._cbs[e](t,r)}}})),n.prototype.onreset=function(){this.events=[],this._cbs.onreset&&this._cbs.onreset()},n.prototype.restart=function(){this._cbs.onreset&&this._cbs.onreset();for(var e=0,t=this.events.length;e{var n=r(29730),s=r(29443);function i(e,t){this.init(e,t)}function a(e,t){return s.getElementsByTagName(e,t,!0)}function o(e,t){return s.getElementsByTagName(e,t,!0,1)[0]}function l(e,t,r){return s.getText(s.getElementsByTagName(e,t,r,1)).trim()}function u(e,t,r,n,s){var i=l(r,n,s);i&&(e[t]=i)}r(35717)(i,n),i.prototype.init=n;var c=function(e){return"rss"===e||"feed"===e||"rdf:RDF"===e};i.prototype.onend=function(){var e,t,r={},s=o(c,this.dom);s&&("feed"===s.name?(t=s.children,r.type="atom",u(r,"id","id",t),u(r,"title","title",t),(e=o("link",t))&&(e=e.attribs)&&(e=e.href)&&(r.link=e),u(r,"description","subtitle",t),(e=l("updated",t))&&(r.updated=new Date(e)),u(r,"author","email",t,!0),r.items=a("entry",t).map((function(e){var t,r={};return u(r,"id","id",e=e.children),u(r,"title","title",e),(t=o("link",e))&&(t=t.attribs)&&(t=t.href)&&(r.link=t),(t=l("summary",e)||l("content",e))&&(r.description=t),(t=l("updated",e))&&(r.pubDate=new Date(t)),r}))):(t=o("channel",s.children).children,r.type=s.name.substr(0,3),r.id="",u(r,"title","title",t),u(r,"link","link",t),u(r,"description","description",t),(e=l("lastBuildDate",t))&&(r.updated=new Date(e)),u(r,"author","managingEditor",t,!0),r.items=a("item",s.children).map((function(e){var t,r={};return u(r,"id","guid",e=e.children),u(r,"title","title",e),u(r,"link","link",e),u(r,"description","description",e),(t=l("pubDate",e))&&(r.pubDate=new Date(t)),r})))),this.dom=r,n.prototype._handleCallback.call(this,s?null:Error("couldn't find root of feed"))},e.exports=i},50763:(e,t,r)=>{var n=r(39889),s={input:!0,option:!0,optgroup:!0,select:!0,button:!0,datalist:!0,textarea:!0},i={tr:{tr:!0,th:!0,td:!0},th:{th:!0},td:{thead:!0,th:!0,td:!0},body:{head:!0,link:!0,script:!0},li:{li:!0},p:{p:!0},h1:{p:!0},h2:{p:!0},h3:{p:!0},h4:{p:!0},h5:{p:!0},h6:{p:!0},select:s,input:s,output:s,button:s,datalist:s,textarea:s,option:{option:!0},optgroup:{optgroup:!0}},a={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},o={__proto__:null,math:!0,svg:!0},l={__proto__:null,mi:!0,mo:!0,mn:!0,ms:!0,mtext:!0,"annotation-xml":!0,foreignObject:!0,desc:!0,title:!0},u=/\s|\//;function c(e,t){this._options=t||{},this._cbs=e||{},this._tagname="",this._attribname="",this._attribvalue="",this._attribs=null,this._stack=[],this._foreignContext=[],this.startIndex=0,this.endIndex=null,this._lowerCaseTagNames="lowerCaseTags"in this._options?!!this._options.lowerCaseTags:!this._options.xmlMode,this._lowerCaseAttributeNames="lowerCaseAttributeNames"in this._options?!!this._options.lowerCaseAttributeNames:!this._options.xmlMode,this._options.Tokenizer&&(n=this._options.Tokenizer),this._tokenizer=new n(this._options,this),this._cbs.onparserinit&&this._cbs.onparserinit(this)}r(35717)(c,r(17187).EventEmitter),c.prototype._updatePosition=function(e){null===this.endIndex?this._tokenizer._sectionStart<=e?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-e:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},c.prototype.ontext=function(e){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(e)},c.prototype.onopentagname=function(e){if(this._lowerCaseTagNames&&(e=e.toLowerCase()),this._tagname=e,!this._options.xmlMode&&e in i)for(var t;(t=this._stack[this._stack.length-1])in i[e];this.onclosetag(t));!this._options.xmlMode&&e in a||(this._stack.push(e),e in o?this._foreignContext.push(!0):e in l&&this._foreignContext.push(!1)),this._cbs.onopentagname&&this._cbs.onopentagname(e),this._cbs.onopentag&&(this._attribs={})},c.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&this._tagname in a&&this._cbs.onclosetag(this._tagname),this._tagname=""},c.prototype.onclosetag=function(e){if(this._updatePosition(1),this._lowerCaseTagNames&&(e=e.toLowerCase()),(e in o||e in l)&&this._foreignContext.pop(),!this._stack.length||e in a&&!this._options.xmlMode)this._options.xmlMode||"br"!==e&&"p"!==e||(this.onopentagname(e),this._closeCurrentTag());else{var t=this._stack.lastIndexOf(e);if(-1!==t)if(this._cbs.onclosetag)for(t=this._stack.length-t;t--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=t;else"p"!==e||this._options.xmlMode||(this.onopentagname(e),this._closeCurrentTag())}},c.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing||this._foreignContext[this._foreignContext.length-1]?this._closeCurrentTag():this.onopentagend()},c.prototype._closeCurrentTag=function(){var e=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===e&&(this._cbs.onclosetag&&this._cbs.onclosetag(e),this._stack.pop())},c.prototype.onattribname=function(e){this._lowerCaseAttributeNames&&(e=e.toLowerCase()),this._attribname=e},c.prototype.onattribdata=function(e){this._attribvalue+=e},c.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname="",this._attribvalue=""},c.prototype._getInstructionName=function(e){var t=e.search(u),r=t<0?e:e.substr(0,t);return this._lowerCaseTagNames&&(r=r.toLowerCase()),r},c.prototype.ondeclaration=function(e){if(this._cbs.onprocessinginstruction){var t=this._getInstructionName(e);this._cbs.onprocessinginstruction("!"+t,"!"+e)}},c.prototype.onprocessinginstruction=function(e){if(this._cbs.onprocessinginstruction){var t=this._getInstructionName(e);this._cbs.onprocessinginstruction("?"+t,"?"+e)}},c.prototype.oncomment=function(e){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(e),this._cbs.oncommentend&&this._cbs.oncommentend()},c.prototype.oncdata=function(e){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(e),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment("[CDATA["+e+"]]")},c.prototype.onerror=function(e){this._cbs.onerror&&this._cbs.onerror(e)},c.prototype.onend=function(){if(this._cbs.onclosetag)for(var e=this._stack.length;e>0;this._cbs.onclosetag(this._stack[--e]));this._cbs.onend&&this._cbs.onend()},c.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname="",this._attribname="",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},c.prototype.parseComplete=function(e){this.reset(),this.end(e)},c.prototype.write=function(e){this._tokenizer.write(e)},c.prototype.end=function(e){this._tokenizer.end(e)},c.prototype.pause=function(){this._tokenizer.pause()},c.prototype.resume=function(){this._tokenizer.resume()},c.prototype.parseChunk=c.prototype.write,c.prototype.done=c.prototype.end,e.exports=c},76321:(e,t,r)=>{function n(e){this._cbs=e||{}}e.exports=n;var s=r(23719).EVENTS;Object.keys(s).forEach((function(e){if(0===s[e])e="on"+e,n.prototype[e]=function(){this._cbs[e]&&this._cbs[e]()};else if(1===s[e])e="on"+e,n.prototype[e]=function(t){this._cbs[e]&&this._cbs[e](t)};else{if(2!==s[e])throw Error("wrong number of arguments");e="on"+e,n.prototype[e]=function(t,r){this._cbs[e]&&this._cbs[e](t,r)}}}))},89924:(e,t,r)=>{e.exports=s;var n=r(83621);function s(e){n.call(this,new i(this),e)}function i(e){this.scope=e}r(35717)(s,n),s.prototype.readable=!0;var a=r(23719).EVENTS;Object.keys(a).forEach((function(e){if(0===a[e])i.prototype["on"+e]=function(){this.scope.emit(e)};else if(1===a[e])i.prototype["on"+e]=function(t){this.scope.emit(e,t)};else{if(2!==a[e])throw Error("wrong number of arguments!");i.prototype["on"+e]=function(t,r){this.scope.emit(e,t,r)}}}))},39889:(e,t,r)=>{e.exports=me;var n=r(58894),s=r(23042),i=r(60317),a=r(51373),o=0,l=o++,u=o++,c=o++,d=o++,h=o++,p=o++,f=o++,g=o++,m=o++,_=o++,y=o++,E=o++,T=o++,A=o++,v=o++,b=o++,S=o++,I=o++,O=o++,C=o++,N=o++,D=o++,w=o++,P=o++,R=o++,k=o++,L=o++,M=o++,x=o++,F=o++,U=o++,B=o++,G=o++,H=o++,j=o++,$=o++,q=o++,W=o++,V=o++,Y=o++,z=o++,K=o++,Q=o++,X=o++,J=o++,Z=o++,ee=o++,te=o++,re=o++,ne=o++,se=o++,ie=o++,ae=o++,oe=o++,le=o++,ue=0,ce=ue++,de=ue++,he=ue++;function pe(e){return" "===e||"\n"===e||"\t"===e||"\f"===e||"\r"===e}function fe(e,t,r){var n=e.toLowerCase();return e===n?function(e){e===n?this._state=t:(this._state=r,this._index--)}:function(s){s===n||s===e?this._state=t:(this._state=r,this._index--)}}function ge(e,t){var r=e.toLowerCase();return function(n){n===r||n===e?this._state=t:(this._state=c,this._index--)}}function me(e,t){this._state=l,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=l,this._special=ce,this._cbs=t,this._running=!0,this._ended=!1,this._xmlMode=!(!e||!e.xmlMode),this._decodeEntities=!(!e||!e.decodeEntities)}me.prototype._stateText=function(e){"<"===e?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=u,this._sectionStart=this._index):this._decodeEntities&&this._special===ce&&"&"===e&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=l,this._state=se,this._sectionStart=this._index)},me.prototype._stateBeforeTagName=function(e){"/"===e?this._state=h:"<"===e?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):">"===e||this._special!==ce||pe(e)?this._state=l:"!"===e?(this._state=v,this._sectionStart=this._index+1):"?"===e?(this._state=S,this._sectionStart=this._index+1):(this._state=this._xmlMode||"s"!==e&&"S"!==e?c:U,this._sectionStart=this._index)},me.prototype._stateInTagName=function(e){("/"===e||">"===e||pe(e))&&(this._emitToken("onopentagname"),this._state=g,this._index--)},me.prototype._stateBeforeCloseingTagName=function(e){pe(e)||(">"===e?this._state=l:this._special!==ce?"s"===e||"S"===e?this._state=B:(this._state=l,this._index--):(this._state=p,this._sectionStart=this._index))},me.prototype._stateInCloseingTagName=function(e){(">"===e||pe(e))&&(this._emitToken("onclosetag"),this._state=f,this._index--)},me.prototype._stateAfterCloseingTagName=function(e){">"===e&&(this._state=l,this._sectionStart=this._index+1)},me.prototype._stateBeforeAttributeName=function(e){">"===e?(this._cbs.onopentagend(),this._state=l,this._sectionStart=this._index+1):"/"===e?this._state=d:pe(e)||(this._state=m,this._sectionStart=this._index)},me.prototype._stateInSelfClosingTag=function(e){">"===e?(this._cbs.onselfclosingtag(),this._state=l,this._sectionStart=this._index+1):pe(e)||(this._state=g,this._index--)},me.prototype._stateInAttributeName=function(e){("="===e||"/"===e||">"===e||pe(e))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=_,this._index--)},me.prototype._stateAfterAttributeName=function(e){"="===e?this._state=y:"/"===e||">"===e?(this._cbs.onattribend(),this._state=g,this._index--):pe(e)||(this._cbs.onattribend(),this._state=m,this._sectionStart=this._index)},me.prototype._stateBeforeAttributeValue=function(e){'"'===e?(this._state=E,this._sectionStart=this._index+1):"'"===e?(this._state=T,this._sectionStart=this._index+1):pe(e)||(this._state=A,this._sectionStart=this._index,this._index--)},me.prototype._stateInAttributeValueDoubleQuotes=function(e){'"'===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=g):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=se,this._sectionStart=this._index)},me.prototype._stateInAttributeValueSingleQuotes=function(e){"'"===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=g):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=se,this._sectionStart=this._index)},me.prototype._stateInAttributeValueNoQuotes=function(e){pe(e)||">"===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=g,this._index--):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=se,this._sectionStart=this._index)},me.prototype._stateBeforeDeclaration=function(e){this._state="["===e?D:"-"===e?I:b},me.prototype._stateInDeclaration=function(e){">"===e&&(this._cbs.ondeclaration(this._getSection()),this._state=l,this._sectionStart=this._index+1)},me.prototype._stateInProcessingInstruction=function(e){">"===e&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=l,this._sectionStart=this._index+1)},me.prototype._stateBeforeComment=function(e){"-"===e?(this._state=O,this._sectionStart=this._index+1):this._state=b},me.prototype._stateInComment=function(e){"-"===e&&(this._state=C)},me.prototype._stateAfterComment1=function(e){this._state="-"===e?N:O},me.prototype._stateAfterComment2=function(e){">"===e?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=l,this._sectionStart=this._index+1):"-"!==e&&(this._state=O)},me.prototype._stateBeforeCdata1=fe("C",w,b),me.prototype._stateBeforeCdata2=fe("D",P,b),me.prototype._stateBeforeCdata3=fe("A",R,b),me.prototype._stateBeforeCdata4=fe("T",k,b),me.prototype._stateBeforeCdata5=fe("A",L,b),me.prototype._stateBeforeCdata6=function(e){"["===e?(this._state=M,this._sectionStart=this._index+1):(this._state=b,this._index--)},me.prototype._stateInCdata=function(e){"]"===e&&(this._state=x)},me.prototype._stateAfterCdata1=function(e){this._state="]"===e?F:M},me.prototype._stateAfterCdata2=function(e){">"===e?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=l,this._sectionStart=this._index+1):"]"!==e&&(this._state=M)},me.prototype._stateBeforeSpecial=function(e){"c"===e||"C"===e?this._state=G:"t"===e||"T"===e?this._state=Q:(this._state=c,this._index--)},me.prototype._stateBeforeSpecialEnd=function(e){this._special!==de||"c"!==e&&"C"!==e?this._special!==he||"t"!==e&&"T"!==e?this._state=l:this._state=ee:this._state=W},me.prototype._stateBeforeScript1=ge("R",H),me.prototype._stateBeforeScript2=ge("I",j),me.prototype._stateBeforeScript3=ge("P",$),me.prototype._stateBeforeScript4=ge("T",q),me.prototype._stateBeforeScript5=function(e){("/"===e||">"===e||pe(e))&&(this._special=de),this._state=c,this._index--},me.prototype._stateAfterScript1=fe("R",V,l),me.prototype._stateAfterScript2=fe("I",Y,l),me.prototype._stateAfterScript3=fe("P",z,l),me.prototype._stateAfterScript4=fe("T",K,l),me.prototype._stateAfterScript5=function(e){">"===e||pe(e)?(this._special=ce,this._state=p,this._sectionStart=this._index-6,this._index--):this._state=l},me.prototype._stateBeforeStyle1=ge("Y",X),me.prototype._stateBeforeStyle2=ge("L",J),me.prototype._stateBeforeStyle3=ge("E",Z),me.prototype._stateBeforeStyle4=function(e){("/"===e||">"===e||pe(e))&&(this._special=he),this._state=c,this._index--},me.prototype._stateAfterStyle1=fe("Y",te,l),me.prototype._stateAfterStyle2=fe("L",re,l),me.prototype._stateAfterStyle3=fe("E",ne,l),me.prototype._stateAfterStyle4=function(e){">"===e||pe(e)?(this._special=ce,this._state=p,this._sectionStart=this._index-5,this._index--):this._state=l},me.prototype._stateBeforeEntity=fe("#",ie,ae),me.prototype._stateBeforeNumericEntity=fe("X",le,oe),me.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+16&&(t=6);t>=2;){var r=this._buffer.substr(e,t);if(i.hasOwnProperty(r))return this._emitPartial(i[r]),void(this._sectionStart+=t+1);t--}},me.prototype._stateInNamedEntity=function(e){";"===e?(this._parseNamedEntityStrict(),this._sectionStart+1"z")&&(e<"A"||e>"Z")&&(e<"0"||e>"9")&&(this._xmlMode||this._sectionStart+1===this._index||(this._baseState!==l?"="!==e&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},me.prototype._decodeNumericEntity=function(e,t){var r=this._sectionStart+e;if(r!==this._index){var s=this._buffer.substring(r,this._index),i=parseInt(s,t);this._emitPartial(n(i)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},me.prototype._stateInNumericEntity=function(e){";"===e?(this._decodeNumericEntity(2,10),this._sectionStart++):(e<"0"||e>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},me.prototype._stateInHexEntity=function(e){";"===e?(this._decodeNumericEntity(3,16),this._sectionStart++):(e<"a"||e>"f")&&(e<"A"||e>"F")&&(e<"0"||e>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},me.prototype._cleanup=function(){this._sectionStart<0?(this._buffer="",this._bufferOffset+=this._index,this._index=0):this._running&&(this._state===l?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer="",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer="",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},me.prototype.write=function(e){this._ended&&this._cbs.onerror(Error(".write() after done!")),this._buffer+=e,this._parse()},me.prototype._parse=function(){for(;this._index{e.exports=o;var n=r(50763),s=r(50247).Writable,i=r(48645).s,a=r(48764).Buffer;function o(e,t){var r=this._parser=new n(e,t),a=this._decoder=new i;s.call(this,{decodeStrings:!1}),this.once("finish",(function(){r.end(a.end())}))}r(35717)(o,s),o.prototype._write=function(e,t,r){e instanceof a&&(e=this._decoder.write(e)),this._parser.write(e),r()}},23719:(e,t,r)=>{var n=r(50763),s=r(29730);function i(t,r){return delete e.exports[t],e.exports[t]=r,r}e.exports={Parser:n,Tokenizer:r(39889),ElementType:r(62391),DomHandler:s,get FeedHandler(){return i("FeedHandler",r(63870))},get Stream(){return i("Stream",r(89924))},get WritableStream(){return i("WritableStream",r(83621))},get ProxyHandler(){return i("ProxyHandler",r(76321))},get DomUtils(){return i("DomUtils",r(29443))},get CollectingHandler(){return i("CollectingHandler",r(95449))},DefaultHandler:s,get RssHandler(){return i("RssHandler",this.FeedHandler)},parseDOM:function(e,t){var r=new s(t);return new n(r,t).end(e),r.dom},parseFeed:function(t,r){var s=new e.exports.FeedHandler(r);return new n(s,r).end(t),s.dom},createDomStream:function(e,t,r){var i=new s(e,t,r);return new n(i,t)},EVENTS:{attribute:2,cdatastart:0,cdataend:0,text:1,processinginstruction:2,comment:1,commentend:0,closetag:1,opentag:2,opentagname:1,error:1,end:0}}},88066:(e,t,r)=>{var n=r(82570),s=r(81137),i=r(79004);i.elementNames.__proto__=null,i.attributeNames.__proto__=null;var a={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},o={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},l=e.exports=function(e,t){Array.isArray(e)||e.cheerio||(e=[e]),t=t||{};for(var r="",s=0;s=0&&(t=Object.assign({},t,{xmlMode:!1}))),!t.xmlMode&&["svg","math"].indexOf(e.name)>=0&&(t=Object.assign({},t,{xmlMode:"foreign"}));var r="<"+e.name,n=function(e,t){if(e){var r,n="";for(var a in e)r=e[a],n&&(n+=" "),"foreign"===t.xmlMode&&(a=i.attributeNames[a]||a),n+=a,(null!==r&&""!==r||t.xmlMode)&&(n+='="'+(t.decodeEntities?s.encodeXML(r):r.replace(/\"/g,"""))+'"');return n}}(e.attribs,t);return n&&(r+=" "+n),!t.xmlMode||e.children&&0!==e.children.length?(r+=">",e.children&&(r+=l(e.children,t)),o[e.name]&&!t.xmlMode||(r+="")):r+="/>",r}function d(e){return"<"+e.data+">"}function h(e,t){var r=e.data||"";return!t.decodeEntities||e.parent&&e.parent.name in a||(r=s.encodeXML(r)),r}function p(e){return""}function f(e){return"\x3c!--"+e.data+"--\x3e"}},82570:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Doctype=t.CDATA=t.Tag=t.Style=t.Script=t.Comment=t.Directive=t.Text=t.Root=t.isTag=void 0,t.isTag=function(e){return"tag"===e.type||"script"===e.type||"style"===e.type},t.Root="root",t.Text="text",t.Directive="directive",t.Comment="comment",t.Script="script",t.Style="style",t.Tag="tag",t.CDATA="cdata",t.Doctype="doctype"},80162:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decodeHTML=t.decodeHTMLStrict=t.decodeXML=void 0;var s=n(r(53082)),i=n(r(23195)),a=n(r(61210)),o=n(r(64914)),l=/&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;function u(e){var t=d(e);return function(e){return String(e).replace(l,t)}}t.decodeXML=u(a.default),t.decodeHTMLStrict=u(s.default);var c=function(e,t){return e65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+String.fromCharCode(e)};t.default=function(e){return e>=55296&&e<=57343||e>1114111?"�":(e in s.default&&(e=s.default[e]),i(e))}},60670:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=void 0;var s=c(n(r(61210)).default),i=d(s);t.encodeXML=m(s);var a,o,l=c(n(r(53082)).default),u=d(l);function c(e){return Object.keys(e).sort().reduce((function(t,r){return t[e[r]]="&"+r+";",t}),{})}function d(e){for(var t=[],r=[],n=0,s=Object.keys(e);n1?p(e):e.charCodeAt(0)).toString(16).toUpperCase()+";"}var g=new RegExp(i.source+"|"+h.source,"g");function m(e){return function(t){return t.replace(g,(function(t){return e[t]||f(t)}))}}t.escape=function(e){return e.replace(g,f)},t.escapeUTF8=function(e){return e.replace(i,f)}},81137:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXMLStrict=t.decodeHTML5Strict=t.decodeHTML4Strict=t.decodeHTML5=t.decodeHTML4=t.decodeHTMLStrict=t.decodeHTML=t.decodeXML=t.encodeHTML5=t.encodeHTML4=t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=t.encode=t.decodeStrict=t.decode=void 0;var n=r(80162),s=r(60670);t.decode=function(e,t){return(!t||t<=0?n.decodeXML:n.decodeHTML)(e)},t.decodeStrict=function(e,t){return(!t||t<=0?n.decodeXML:n.decodeHTMLStrict)(e)},t.encode=function(e,t){return(!t||t<=0?s.encodeXML:s.encodeHTML)(e)};var i=r(60670);Object.defineProperty(t,"encodeXML",{enumerable:!0,get:function(){return i.encodeXML}}),Object.defineProperty(t,"encodeHTML",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(t,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return i.encodeNonAsciiHTML}}),Object.defineProperty(t,"escape",{enumerable:!0,get:function(){return i.escape}}),Object.defineProperty(t,"escapeUTF8",{enumerable:!0,get:function(){return i.escapeUTF8}}),Object.defineProperty(t,"encodeHTML4",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(t,"encodeHTML5",{enumerable:!0,get:function(){return i.encodeHTML}});var a=r(80162);Object.defineProperty(t,"decodeXML",{enumerable:!0,get:function(){return a.decodeXML}}),Object.defineProperty(t,"decodeHTML",{enumerable:!0,get:function(){return a.decodeHTML}}),Object.defineProperty(t,"decodeHTMLStrict",{enumerable:!0,get:function(){return a.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML4",{enumerable:!0,get:function(){return a.decodeHTML}}),Object.defineProperty(t,"decodeHTML5",{enumerable:!0,get:function(){return a.decodeHTML}}),Object.defineProperty(t,"decodeHTML4Strict",{enumerable:!0,get:function(){return a.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML5Strict",{enumerable:!0,get:function(){return a.decodeHTMLStrict}}),Object.defineProperty(t,"decodeXMLStrict",{enumerable:!0,get:function(){return a.decodeXML}})},62391:e=>{e.exports={Text:"text",Directive:"directive",Comment:"comment",Script:"script",Style:"style",Tag:"tag",CDATA:"cdata",Doctype:"doctype",isTag:function(e){return"tag"===e.type||"script"===e.type||"style"===e.type}}},29730:(e,t,r)=>{var n=r(62391),s=/\s+/g,i=r(16805),a=r(7359);function o(e,t,r){"object"==typeof e?(r=t,t=e,e=null):"function"==typeof t&&(r=t,t=l),this._callback=e,this._options=t||l,this._elementCB=r,this.dom=[],this._done=!1,this._tagStack=[],this._parser=this._parser||null}var l={normalizeWhitespace:!1,withStartIndices:!1,withEndIndices:!1};o.prototype.onparserinit=function(e){this._parser=e},o.prototype.onreset=function(){o.call(this,this._callback,this._options,this._elementCB)},o.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this._handleCallback(null))},o.prototype._handleCallback=o.prototype.onerror=function(e){if("function"==typeof this._callback)this._callback(e,this.dom);else if(e)throw e},o.prototype.onclosetag=function(){var e=this._tagStack.pop();this._options.withEndIndices&&e&&(e.endIndex=this._parser.endIndex),this._elementCB&&this._elementCB(e)},o.prototype._createDomElement=function(e){if(!this._options.withDomLvl1)return e;var t;for(var r in t="tag"===e.type?Object.create(a):Object.create(i),e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t},o.prototype._addDomElement=function(e){var t=this._tagStack[this._tagStack.length-1],r=t?t.children:this.dom,n=r[r.length-1];e.next=null,this._options.withStartIndices&&(e.startIndex=this._parser.startIndex),this._options.withEndIndices&&(e.endIndex=this._parser.endIndex),n?(e.prev=n,n.next=e):e.prev=null,r.push(e),e.parent=t||null},o.prototype.onopentag=function(e,t){var r={type:"script"===e?n.Script:"style"===e?n.Style:n.Tag,name:e,attribs:t,children:[]},s=this._createDomElement(r);this._addDomElement(s),this._tagStack.push(s)},o.prototype.ontext=function(e){var t,r=this._options.normalizeWhitespace||this._options.ignoreWhitespace;if(!this._tagStack.length&&this.dom.length&&(t=this.dom[this.dom.length-1]).type===n.Text)r?t.data=(t.data+e).replace(s," "):t.data+=e;else if(this._tagStack.length&&(t=this._tagStack[this._tagStack.length-1])&&(t=t.children[t.children.length-1])&&t.type===n.Text)r?t.data=(t.data+e).replace(s," "):t.data+=e;else{r&&(e=e.replace(s," "));var i=this._createDomElement({data:e,type:n.Text});this._addDomElement(i)}},o.prototype.oncomment=function(e){var t=this._tagStack[this._tagStack.length-1];if(t&&t.type===n.Comment)t.data+=e;else{var r={data:e,type:n.Comment},s=this._createDomElement(r);this._addDomElement(s),this._tagStack.push(s)}},o.prototype.oncdatastart=function(){var e={children:[{data:"",type:n.Text}],type:n.CDATA},t=this._createDomElement(e);this._addDomElement(t),this._tagStack.push(t)},o.prototype.oncommentend=o.prototype.oncdataend=function(){this._tagStack.pop()},o.prototype.onprocessinginstruction=function(e,t){var r=this._createDomElement({name:e,data:t,type:n.Directive});this._addDomElement(r)},e.exports=o},7359:(e,t,r)=>{var n=r(16805),s=e.exports=Object.create(n),i={tagName:"name"};Object.keys(i).forEach((function(e){var t=i[e];Object.defineProperty(s,e,{get:function(){return this[t]||null},set:function(e){return this[t]=e,e}})}))},16805:e=>{var t=e.exports={get firstChild(){var e=this.children;return e&&e[0]||null},get lastChild(){var e=this.children;return e&&e[e.length-1]||null},get nodeType(){return n[this.type]||n.element}},r={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"},n={element:1,text:3,cdata:4,comment:8};Object.keys(r).forEach((function(e){var n=r[e];Object.defineProperty(t,e,{get:function(){return this[n]||null},set:function(e){return this[n]=e,e}})}))},29443:(e,t,r)=>{var n=e.exports;[r(72178),r(61699),r(26167),r(46754),r(55355),r(99256)].forEach((function(e){Object.keys(e).forEach((function(t){n[t]=e[t].bind(n)}))}))},99256:(e,t)=>{t.removeSubsets=function(e){for(var t,r,n,s=e.length;--s>-1;){for(t=r=e[s],e[s]=null,n=!0;r;){if(e.indexOf(r)>-1){n=!1,e.splice(s,1);break}r=r.parent}n&&(e[s]=t)}return e};var r=t.compareDocumentPosition=function(e,t){var r,n,s,i,a,o,l=[],u=[];if(e===t)return 0;for(r=e;r;)l.unshift(r),r=r.parent;for(r=t;r;)u.unshift(r),r=r.parent;for(o=0;l[o]===u[o];)o++;return 0===o?1:(s=(n=l[o-1]).children,i=l[o],a=u[o],s.indexOf(i)>s.indexOf(a)?n===t?20:4:n===e?10:2)};t.uniqueSort=function(e){var t,n,s=e.length;for(e=e.slice();--s>-1;)t=e[s],(n=e.indexOf(t))>-1&&n{var n=r(62391),s=t.isTag=n.isTag;t.testElement=function(e,t){for(var r in e)if(e.hasOwnProperty(r))if("tag_name"===r){if(!s(t)||!e.tag_name(t.name))return!1}else if("tag_type"===r){if(!e.tag_type(t.type))return!1}else if("tag_contains"===r){if(s(t)||!e.tag_contains(t.data))return!1}else if(!t.attribs||!e[r](t.attribs[r]))return!1;return!0};var i={tag_name:function(e){return"function"==typeof e?function(t){return s(t)&&e(t.name)}:"*"===e?s:function(t){return s(t)&&t.name===e}},tag_type:function(e){return"function"==typeof e?function(t){return e(t.type)}:function(t){return t.type===e}},tag_contains:function(e){return"function"==typeof e?function(t){return!s(t)&&e(t.data)}:function(t){return!s(t)&&t.data===e}}};function a(e,t){return"function"==typeof t?function(r){return r.attribs&&t(r.attribs[e])}:function(r){return r.attribs&&r.attribs[e]===t}}function o(e,t){return function(r){return e(r)||t(r)}}t.getElements=function(e,t,r,n){var s=Object.keys(e).map((function(t){var r=e[t];return t in i?i[t](r):a(t,r)}));return 0===s.length?[]:this.filter(s.reduce(o),t,r,n)},t.getElementById=function(e,t,r){return Array.isArray(t)||(t=[t]),this.findOne(a("id",e),t,!1!==r)},t.getElementsByTagName=function(e,t,r,n){return this.filter(i.tag_name(e),t,r,n)},t.getElementsByTagType=function(e,t,r,n){return this.filter(i.tag_type(e),t,r,n)}},26167:(e,t)=>{t.removeElement=function(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){var t=e.parent.children;t.splice(t.lastIndexOf(e),1)}},t.replaceElement=function(e,t){var r=t.prev=e.prev;r&&(r.next=t);var n=t.next=e.next;n&&(n.prev=t);var s=t.parent=e.parent;if(s){var i=s.children;i[i.lastIndexOf(e)]=t}},t.appendChild=function(e,t){if(t.parent=e,1!==e.children.push(t)){var r=e.children[e.children.length-2];r.next=t,t.prev=r,t.next=null}},t.append=function(e,t){var r=e.parent,n=e.next;if(t.next=n,t.prev=e,e.next=t,t.parent=r,n){if(n.prev=t,r){var s=r.children;s.splice(s.lastIndexOf(n),0,t)}}else r&&r.children.push(t)},t.prepend=function(e,t){var r=e.parent;if(r){var n=r.children;n.splice(n.lastIndexOf(e),0,t)}e.prev&&(e.prev.next=t),t.parent=r,t.prev=e.prev,t.next=e,e.prev=t}},46754:(e,t,r)=>{var n=r(62391).isTag;function s(e,t,r,n){for(var i,a=[],o=0,l=t.length;o0&&(i=s(e,i,r,n),a=a.concat(i),(n-=i.length)<=0)));o++);return a}e.exports={filter:function(e,t,r,n){return Array.isArray(t)||(t=[t]),"number"==typeof n&&isFinite(n)||(n=1/0),s(e,t,!1!==r,n)},find:s,findOneChild:function(e,t){for(var r=0,n=t.length;r0&&(s=e(t,r[i].children)));return s},existsOne:function e(t,r){for(var s=0,i=r.length;s0&&e(t,r[s].children)))return!0;return!1},findAll:function(e,t){for(var r=[],s=t.slice();s.length;){var i=s.shift();n(i)&&(i.children&&i.children.length>0&&s.unshift.apply(s,i.children),e(i)&&r.push(i))}return r}}},72178:(e,t,r)=>{var n=r(62391),s=r(88066),i=n.isTag;e.exports={getInnerHTML:function(e,t){return e.children?e.children.map((function(e){return s(e,t)})).join(""):""},getOuterHTML:s,getText:function e(t){return Array.isArray(t)?t.map(e).join(""):i(t)?"br"===t.name?"\n":e(t.children):t.type===n.CDATA?e(t.children):t.type===n.Text?t.data:""}}},61699:(e,t)=>{var r=t.getChildren=function(e){return e.children},n=t.getParent=function(e){return e.parent};t.getSiblings=function(e){var t=n(e);return t?r(t):[e]},t.getAttributeValue=function(e,t){return e.attribs&&e.attribs[t]},t.hasAttrib=function(e,t){return!!e.attribs&&hasOwnProperty.call(e.attribs,t)},t.getName=function(e){return e.name}},58894:(e,t,r)=>{var n=r(42968);e.exports=function(e){if(e>=55296&&e<=57343||e>1114111)return"�";e in n&&(e=n[e]);var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+String.fromCharCode(e)}},48645:(e,t,r)=>{"use strict";var n=r(89509).Buffer,s=n.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(n.isEncoding===s||!s(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=l,this.end=u,t=4;break;case"utf8":this.fillLast=o,t=4;break;case"base64":this.text=c,this.end=d,t=3;break;default:return this.write=h,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function o(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function c(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function d(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.s=i,i.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0?(s>0&&(e.lastNeed=s-1),s):--n=0?(s>0&&(e.lastNeed=s-2),s):--n=0?(s>0&&(2===s?s=0:e.lastNeed=s-3),s):0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},80645:(e,t)=>{t.read=function(e,t,r,n,s){var i,a,o=8*s-n-1,l=(1<>1,c=-7,d=r?s-1:0,h=r?-1:1,p=e[t+d];for(d+=h,i=p&(1<<-c)-1,p>>=-c,c+=o;c>0;i=256*i+e[t+d],d+=h,c-=8);for(a=i&(1<<-c)-1,i>>=-c,c+=n;c>0;a=256*a+e[t+d],d+=h,c-=8);if(0===i)i=1-u;else{if(i===l)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,n),i-=u}return(p?-1:1)*a*Math.pow(2,i-n)},t.write=function(e,t,r,n,s,i){var a,o,l,u=8*i-s-1,c=(1<>1,h=23===s?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,f=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+d>=1?h/l:h*Math.pow(2,1-d))*l>=2&&(a++,l/=2),a+d>=c?(o=0,a=c):a+d>=1?(o=(t*l-1)*Math.pow(2,s),a+=d):(o=t*Math.pow(2,d-1)*Math.pow(2,s),a=0));s>=8;e[r+p]=255&o,p+=f,o/=256,s-=8);for(a=a<0;e[r+p]=255&a,p+=f,a/=256,u-=8);e[r+p-f]|=128*g}},35717:e=>{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},82584:(e,t,r)=>{"use strict";var n=r(96410)(),s=r(21924)("Object.prototype.toString"),i=function(e){return!(n&&e&&"object"==typeof e&&Symbol.toStringTag in e)&&"[object Arguments]"===s(e)},a=function(e){return!!i(e)||null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Array]"!==s(e)&&"[object Function]"===s(e.callee)},o=function(){return i(arguments)}();i.isLegacyArguments=a,e.exports=o?i:a},95320:e=>{"use strict";var t,r,n=Function.prototype.toString,s="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof s&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw r}}),r={},s((function(){throw 42}),null,t)}catch(e){e!==r&&(s=null)}else s=null;var i=/^\s*class\b/,a=function(e){try{var t=n.call(e);return i.test(t)}catch(e){return!1}},o=Object.prototype.toString,l="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,u="object"==typeof document&&void 0===document.all&&void 0!==document.all?document.all:{};e.exports=s?function(e){if(e===u)return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if("function"==typeof e&&!e.prototype)return!0;try{s(e,null,t)}catch(e){if(e!==r)return!1}return!a(e)}:function(e){if(e===u)return!0;if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if("function"==typeof e&&!e.prototype)return!0;if(l)return function(e){try{return!a(e)&&(n.call(e),!0)}catch(e){return!1}}(e);if(a(e))return!1;var t=o.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t}},48662:(e,t,r)=>{"use strict";var n,s=Object.prototype.toString,i=Function.prototype.toString,a=/^\s*(?:function)?\*/,o=r(96410)(),l=Object.getPrototypeOf;e.exports=function(e){if("function"!=typeof e)return!1;if(a.test(i.call(e)))return!0;if(!o)return"[object GeneratorFunction]"===s.call(e);if(!l)return!1;if(void 0===n){var t=function(){if(!o)return!1;try{return Function("return function*() {}")()}catch(e){}}();n=!!t&&l(t)}return l(e)===n}},85692:(e,t,r)=>{"use strict";var n=r(65025);e.exports=function(e){return!!n(e)}},4318:(e,t,r)=>{"use strict";var n=r(40210),s=r(78073),i=s(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?s(r):r}},78073:(e,t,r)=>{"use strict";var n=r(86718),s=r(40210),i=r(67771),a=s("%TypeError%"),o=s("%Function.prototype.apply%"),l=s("%Function.prototype.call%"),u=s("%Reflect.apply%",!0)||n.call(l,o),c=s("%Object.defineProperty%",!0),d=s("%Math.max%");if(c)try{c({},"a",{value:1})}catch(e){c=null}e.exports=function(e){if("function"!=typeof e)throw new a("a function is required");var t=u(n,l,arguments);return i(t,1+d(0,e.length-(arguments.length-1)),!0)};var h=function(){return u(n,o,arguments)};c?c(e.exports,"apply",{value:h}):e.exports.apply=h},5761:e=>{"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n{"use strict";var n=r(5761);e.exports=Function.prototype.bind||n},28202:(e,t,r)=>{"use strict";var n=r(55419);e.exports=function(){return n()&&!!Symbol.toStringTag}},65025:(e,t,r)=>{"use strict";var n=r(94029),s=r(63083),i=r(78073),a=r(4318),o=r(27296),l=a("Object.prototype.toString"),u=r(28202)(),c="undefined"==typeof globalThis?r.g:globalThis,d=s(),h=a("String.prototype.slice"),p=Object.getPrototypeOf,f=a("Array.prototype.indexOf",!0)||function(e,t){for(var r=0;r-1?t:"Object"===t&&function(e){var t=!1;return n(g,(function(r,n){if(!t)try{r(e),t=h(n,1)}catch(e){}})),t}(e)}return o?function(e){var t=!1;return n(g,(function(r,n){if(!t)try{"$"+r(e)===n&&(t=h(n,1))}catch(e){}})),t}(e):null}},2043:function(e,t,r){var n,s;!function(i,a){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"];function s(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function i(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function a(t,r){for(var s=0;s=0&&r<=o.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(i=r,!1!==s&&function(e){var r=(n[e]||"silent").toUpperCase();if(typeof window!==t&&u){try{return void(window.localStorage[u]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(u)+"="+r+";"}catch(e){}}}(r),a.call(o,r,e),typeof console===t&&r{"use strict";e.exports=["Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]},89509:(e,t,r)=>{var n=r(48764),s=n.Buffer;function i(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return s(e,t,r)}s.from&&s.alloc&&s.allocUnsafe&&s.allocUnsafeSlow?e.exports=n:(i(n,t),t.Buffer=a),a.prototype=Object.create(s.prototype),i(s,a),a.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return s(e,t,r)},a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=s(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return s(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},67771:(e,t,r)=>{"use strict";var n=r(40210),s=r(12296),i=r(31044)(),a=r(27296),o=n("%TypeError%"),l=n("%Math.floor%");e.exports=function(e,t){if("function"!=typeof e)throw new o("`fn` is not a function");if("number"!=typeof t||t<0||t>4294967295||l(t)!==t)throw new o("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],n=!0,u=!0;if("length"in e&&a){var c=a(e,"length");c&&!c.configurable&&(n=!1),c&&!c.writable&&(u=!1)}return(n||u||!r)&&(i?s(e,"length",t,!0,!0):s(e,"length",t)),e}},37478:(e,t,r)=>{"use strict";var n=r(45388),s=r(21924),i=r(27470),a=n("%TypeError%"),o=n("%WeakMap%",!0),l=n("%Map%",!0),u=s("WeakMap.prototype.get",!0),c=s("WeakMap.prototype.set",!0),d=s("WeakMap.prototype.has",!0),h=s("Map.prototype.get",!0),p=s("Map.prototype.set",!0),f=s("Map.prototype.has",!0),g=function(e,t){for(var r,n=e;null!==(r=n.next);n=r)if(r.key===t)return n.next=r.next,r.next=e.next,e.next=r,r};e.exports=function(){var e,t,r,n={assert:function(e){if(!n.has(e))throw new a("Side channel does not contain "+i(e))},get:function(n){if(o&&n&&("object"==typeof n||"function"==typeof n)){if(e)return u(e,n)}else if(l){if(t)return h(t,n)}else if(r)return function(e,t){var r=g(e,t);return r&&r.value}(r,n)},has:function(n){if(o&&n&&("object"==typeof n||"function"==typeof n)){if(e)return d(e,n)}else if(l){if(t)return f(t,n)}else if(r)return function(e,t){return!!g(e,t)}(r,n);return!1},set:function(n,s){o&&n&&("object"==typeof n||"function"==typeof n)?(e||(e=new o),c(e,n,s)):l?(t||(t=new l),p(t,n,s)):(r||(r={key:{},next:null}),function(e,t,r){var n=g(e,t);n?n.value=r:e.next={key:t,next:e.next,value:r}}(r,n,s))}};return n}},45388:(e,t,r)=>{"use strict";var n,s=SyntaxError,i=Function,a=TypeError,o=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var u=function(){throw new a},c=l?function(){try{return u}catch(e){try{return l(arguments,"callee").get}catch(e){return u}}}():u,d=r(19193)(),h=Object.getPrototypeOf||function(e){return e.__proto__},p={},f="undefined"==typeof Uint8Array?n:h(Uint8Array),g={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":d?h([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":d?h(h([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&d?h((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&d?h((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":d?h(""[Symbol.iterator]()):n,"%Symbol%":d?Symbol:n,"%SyntaxError%":s,"%ThrowTypeError%":c,"%TypedArray%":f,"%TypeError%":a,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet},m=function e(t){var r;if("%AsyncFunction%"===t)r=o("async function () {}");else if("%GeneratorFunction%"===t)r=o("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=o("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var s=e("%AsyncGenerator%");s&&(r=h(s.prototype))}return g[t]=r,r},_={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=r(58612),E=r(17642),T=y.call(Function.call,Array.prototype.concat),A=y.call(Function.apply,Array.prototype.splice),v=y.call(Function.call,String.prototype.replace),b=y.call(Function.call,String.prototype.slice),S=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,I=/\\(\\)?/g,O=function(e,t){var r,n=e;if(E(_,n)&&(n="%"+(r=_[n])[0]+"%"),E(g,n)){var i=g[n];if(i===p&&(i=m(n)),void 0===i&&!t)throw new a("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');var r=function(e){var t=b(e,0,1),r=b(e,-1);if("%"===t&&"%"!==r)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var n=[];return v(e,S,(function(e,t,r,s){n[n.length]=r?v(s,I,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",i=O("%"+n+"%",t),o=i.name,u=i.value,c=!1,d=i.alias;d&&(n=d[0],A(r,T([0,1],d)));for(var h=1,p=!0;h=r.length){var y=l(u,f);u=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:u[f]}else p=E(u,f),u=u[f];p&&!c&&(g[o]=u)}}return u}},19193:(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,s=r(6105);e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&s()}},6105:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var s=Object.getOwnPropertyDescriptor(e,t);if(42!==s.value||!0!==s.enumerable)return!1}return!0}},27470:(e,t,r)=>{var n="function"==typeof Map&&Map.prototype,s=Object.getOwnPropertyDescriptor&&n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=n&&s&&"function"==typeof s.get?s.get:null,a=n&&Map.prototype.forEach,o="function"==typeof Set&&Set.prototype,l=Object.getOwnPropertyDescriptor&&o?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,u=o&&l&&"function"==typeof l.get?l.get:null,c=o&&Set.prototype.forEach,d="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p=Boolean.prototype.valueOf,f=Object.prototype.toString,g=Function.prototype.toString,m=String.prototype.match,_="function"==typeof BigInt?BigInt.prototype.valueOf:null,y=Object.getOwnPropertySymbols,E="function"==typeof Symbol?Symbol.prototype.toString:null,T=Object.prototype.propertyIsEnumerable,A=r(47165).custom,v=A&&O(A)?A:null;function b(e,t,r){var n="double"===(r.quoteStyle||t)?'"':"'";return n+e+n}function S(e){return String(e).replace(/"/g,""")}function I(e){return"[object Array]"===D(e)}function O(e){return"[object Symbol]"===D(e)}e.exports=function e(t,r,n,s){var o=r||{};if(N(o,"quoteStyle")&&"single"!==o.quoteStyle&&"double"!==o.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(N(o,"maxStringLength")&&("number"==typeof o.maxStringLength?o.maxStringLength<0&&o.maxStringLength!==1/0:null!==o.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=!N(o,"customInspect")||o.customInspect;if("boolean"!=typeof l)throw new TypeError('option "customInspect", if provided, must be `true` or `false`');if(N(o,"indent")&&null!==o.indent&&"\t"!==o.indent&&!(parseInt(o.indent,10)===o.indent&&o.indent>0))throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`');if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return P(t,o);if("number"==typeof t)return 0===t?1/0/t>0?"0":"-0":String(t);if("bigint"==typeof t)return String(t)+"n";var f=void 0===o.depth?5:o.depth;if(void 0===n&&(n=0),n>=f&&f>0&&"object"==typeof t)return I(t)?"[Array]":"[Object]";var y,T=function(e,t){var r;if("\t"===e.indent)r="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;r=Array(e.indent+1).join(" ")}return{base:r,prev:Array(t+1).join(r)}}(o,n);if(void 0===s)s=[];else if(w(s,t)>=0)return"[Circular]";function A(t,r,i){if(r&&(s=s.slice()).push(r),i){var a={depth:o.depth};return N(o,"quoteStyle")&&(a.quoteStyle=o.quoteStyle),e(t,a,n+1,s)}return e(t,o,n+1,s)}if("function"==typeof t){var C=function(e){if(e.name)return e.name;var t=m.call(g.call(e),/^function\s*([\w$]+)/);return t?t[1]:null}(t),R=F(t,A);return"[Function"+(C?": "+C:" (anonymous)")+"]"+(R.length>0?" { "+R.join(", ")+" }":"")}if(O(t)){var U=E.call(t);return"object"==typeof t?k(U):U}if((y=t)&&"object"==typeof y&&("undefined"!=typeof HTMLElement&&y instanceof HTMLElement||"string"==typeof y.nodeName&&"function"==typeof y.getAttribute)){for(var B="<"+String(t.nodeName).toLowerCase(),G=t.attributes||[],H=0;H"}if(I(t)){if(0===t.length)return"[]";var j=F(t,A);return T&&!function(e){for(var t=0;t=0)return!1;return!0}(j)?"["+x(j,T)+"]":"[ "+j.join(", ")+" ]"}if(function(e){return"[object Error]"===D(e)}(t)){var $=F(t,A);return 0===$.length?"["+String(t)+"]":"{ ["+String(t)+"] "+$.join(", ")+" }"}if("object"==typeof t&&l){if(v&&"function"==typeof t[v])return t[v]();if("function"==typeof t.inspect)return t.inspect()}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{u.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var q=[];return a.call(t,(function(e,r){q.push(A(r,t,!0)+" => "+A(e,t))})),M("Map",i.call(t),q,T)}if(function(e){if(!u||!e||"object"!=typeof e)return!1;try{u.call(e);try{i.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var W=[];return c.call(t,(function(e){W.push(A(e,t))})),M("Set",u.call(t),W,T)}if(function(e){if(!d||!e||"object"!=typeof e)return!1;try{d.call(e,d);try{h.call(e,h)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return L("WeakMap");if(function(e){if(!h||!e||"object"!=typeof e)return!1;try{h.call(e,h);try{d.call(e,d)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return L("WeakSet");if(function(e){return"[object Number]"===D(e)}(t))return k(A(Number(t)));if(function(e){return"[object BigInt]"===D(e)}(t))return k(A(_.call(t)));if(function(e){return"[object Boolean]"===D(e)}(t))return k(p.call(t));if(function(e){return"[object String]"===D(e)}(t))return k(A(String(t)));if(!function(e){return"[object Date]"===D(e)}(t)&&!function(e){return"[object RegExp]"===D(e)}(t)){var V=F(t,A);return 0===V.length?"{}":T?"{"+x(V,T)+"}":"{ "+V.join(", ")+" }"}return String(t)};var C=Object.prototype.hasOwnProperty||function(e){return e in this};function N(e,t){return C.call(e,t)}function D(e){return f.call(e)}function w(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;rt.maxStringLength){var r=e.length-t.maxStringLength,n="... "+r+" more character"+(r>1?"s":"");return P(e.slice(0,t.maxStringLength),t)+n}return b(e.replace(/(['\\])/g,"\\$1").replace(/[\x00-\x1f]/g,R),"single",t)}function R(e){var t=e.charCodeAt(0),r={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return r?"\\"+r:"\\x"+(t<16?"0":"")+t.toString(16).toUpperCase()}function k(e){return"Object("+e+")"}function L(e){return e+" { ? }"}function M(e,t,r,n){return e+" ("+t+") {"+(n?x(r,n):r.join(", "))+"}"}function x(e,t){if(0===e.length)return"";var r="\n"+t.prev+t.base;return r+e.join(","+r)+"\n"+t.prev}function F(e,t){var r=I(e),n=[];if(r){n.length=e.length;for(var s=0;s{var t=function(e,t){var r;for(r=0;r1?1:a)+n[n.length-1].length};return{addRule:function(e,t){s.push({regex:e,type:t})},onText:function(e){for(var t=n+e,i=r(s,t);i&&i.max_index!==t.length;)o(t.substring(0,i.max_index),i.rule.type),t=t.substring(i.max_index),i=r(s,t);n=t},end:function(){if(0!==n.length){var e=t(s,n);if(!e){var r=new Error("unable to tokenize");throw r.tokenizer2={buffer:n,line:i,col:a},r}o(n,e.type)}}}}},52511:function(e,t,r){var n;e=r.nmd(e),function(s){t&&t.nodeType,e&&e.nodeType;var i="object"==typeof r.g&&r.g;i.global!==i&&i.window!==i&&i.self;var a,o=2147483647,l=36,u=26,c=38,d=700,h=/^xn--/,p=/[^\x20-\x7E]/,f=/[\x2E\u3002\uFF0E\uFF61]/g,g={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},m=l-1,_=Math.floor,y=String.fromCharCode;function E(e){throw new RangeError(g[e])}function T(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function A(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+T((e=e.replace(f,".")).split("."),t).join(".")}function v(e){for(var t,r,n=[],s=0,i=e.length;s=55296&&t<=56319&&s65535&&(t+=y((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+y(e)})).join("")}function S(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function I(e,t,r){var n=0;for(e=r?_(e/d):e>>1,e+=_(e/t);e>m*u>>1;n+=l)e=_(e/m);return _(n+(m+1)*e/(e+c))}function O(e){var t,r,n,s,i,a,c,d,h,p,f,g=[],m=e.length,y=0,T=128,A=72;for((r=e.lastIndexOf("-"))<0&&(r=0),n=0;n=128&&E("not-basic"),g.push(e.charCodeAt(n));for(s=r>0?r+1:0;s=m&&E("invalid-input"),((d=(f=e.charCodeAt(s++))-48<10?f-22:f-65<26?f-65:f-97<26?f-97:l)>=l||d>_((o-y)/a))&&E("overflow"),y+=d*a,!(d<(h=c<=A?1:c>=A+u?u:c-A));c+=l)a>_(o/(p=l-h))&&E("overflow"),a*=p;A=I(y-i,t=g.length+1,0==i),_(y/t)>o-T&&E("overflow"),T+=_(y/t),y%=t,g.splice(y++,0,T)}return b(g)}function C(e){var t,r,n,s,i,a,c,d,h,p,f,g,m,T,A,b=[];for(g=(e=v(e)).length,t=128,r=0,i=72,a=0;a=t&&f_((o-r)/(m=n+1))&&E("overflow"),r+=(c-t)*m,t=c,a=0;ao&&E("overflow"),f==t){for(d=r,h=l;!(d<(p=h<=i?1:h>=i+u?u:h-i));h+=l)A=d-p,T=l-p,b.push(y(S(p+A%T,0))),d=_(A/T);b.push(y(S(d,0))),i=I(r,m,n==s),r=0,++n}++r,++t}return b.join("")}a={version:"1.4.1",ucs2:{decode:v,encode:b},decode:O,encode:C,toASCII:function(e){return A(e,(function(e){return p.test(e)?"xn--"+C(e):e}))},toUnicode:function(e){return A(e,(function(e){return h.test(e)?O(e.slice(4).toLowerCase()):e}))}},void 0===(n=function(){return a}.call(t,r,t,e))||(e.exports=n)}()},39532:e=>{"use strict";var t=String.prototype.replace,r=/%20/g,n="RFC3986";e.exports={default:n,formatters:{RFC1738:function(e){return t.call(e,r,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:n}},35984:(e,t,r)=>{"use strict";var n=r(24730),s=r(7325),i=r(39532);e.exports={formats:i,parse:s,stringify:n}},7325:(e,t,r)=>{"use strict";var n=r(19368),s=Object.prototype.hasOwnProperty,i=Array.isArray,a={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:n.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},o=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},l=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},u=function(e,t,r,n){if(e){var i=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,o=r.depth>0&&/(\[[^[\]]*])/.exec(i),u=o?i.slice(0,o.index):i,c=[];if(u){if(!r.plainObjects&&s.call(Object.prototype,u)&&!r.allowPrototypes)return;c.push(u)}for(var d=0;r.depth>0&&null!==(o=a.exec(i))&&d=0;--i){var a,o=e[i];if("[]"===o&&r.parseArrays)a=[].concat(s);else{a=r.plainObjects?Object.create(null):{};var u="["===o.charAt(0)&&"]"===o.charAt(o.length-1)?o.slice(1,-1):o,c=parseInt(u,10);r.parseArrays||""!==u?!isNaN(c)&&o!==u&&String(c)===u&&c>=0&&r.parseArrays&&c<=r.arrayLimit?(a=[])[c]=s:"__proto__"!==u&&(a[u]=s):a={0:s}}s=a}return s}(c,t,r,n)}};e.exports=function(e,t){var r=function(e){if(!e)return a;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?a.charset:e.charset;return{allowDots:void 0===e.allowDots?a.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:a.comma,decoder:"function"==typeof e.decoder?e.decoder:a.decoder,delimiter:"string"==typeof e.delimiter||n.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:a.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling}}(t);if(""===e||null==e)return r.plainObjects?Object.create(null):{};for(var c="string"==typeof e?function(e,t){var r,u={__proto__:null},c=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,d=t.parameterLimit===1/0?void 0:t.parameterLimit,h=c.split(t.delimiter,d),p=-1,f=t.charset;if(t.charsetSentinel)for(r=0;r-1&&(m=i(m)?[m]:m),s.call(u,g)?u[g]=n.combine(u[g],m):u[g]=m}return u}(e,r):e,d=r.plainObjects?Object.create(null):{},h=Object.keys(c),p=0;p{"use strict";var n=r(37478),s=r(19368),i=r(39532),a=Object.prototype.hasOwnProperty,o={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},l=Array.isArray,u=Array.prototype.push,c=function(e,t){u.apply(e,l(t)?t:[t])},d=Date.prototype.toISOString,h=i.default,p={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:s.encode,encodeValuesOnly:!1,format:h,formatter:i.formatters[h],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},f={},g=function e(t,r,i,a,o,u,d,h,g,m,_,y,E,T,A,v){for(var b,S=t,I=v,O=0,C=!1;void 0!==(I=I.get(f))&&!C;){var N=I.get(t);if(O+=1,void 0!==N){if(N===O)throw new RangeError("Cyclic object value");C=!0}void 0===I.get(f)&&(O=0)}if("function"==typeof h?S=h(r,S):S instanceof Date?S=_(S):"comma"===i&&l(S)&&(S=s.maybeMap(S,(function(e){return e instanceof Date?_(e):e}))),null===S){if(o)return d&&!T?d(r,p.encoder,A,"key",y):r;S=""}if("string"==typeof(b=S)||"number"==typeof b||"boolean"==typeof b||"symbol"==typeof b||"bigint"==typeof b||s.isBuffer(S))return d?[E(T?r:d(r,p.encoder,A,"key",y))+"="+E(d(S,p.encoder,A,"value",y))]:[E(r)+"="+E(String(S))];var D,w=[];if(void 0===S)return w;if("comma"===i&&l(S))T&&d&&(S=s.maybeMap(S,d)),D=[{value:S.length>0?S.join(",")||null:void 0}];else if(l(h))D=h;else{var P=Object.keys(S);D=g?P.sort(g):P}for(var R=a&&l(S)&&1===S.length?r+"[]":r,k=0;k0?A+T:""}},19368:(e,t,r)=>{"use strict";var n=r(39532),s=Object.prototype.hasOwnProperty,i=Array.isArray,a=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),o=function(e,t){for(var r=t&&t.plainObjects?Object.create(null):{},n=0;n1;){var t=e.pop(),r=t.obj[t.prop];if(i(r)){for(var n=[],s=0;s=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122||i===n.RFC1738&&(40===c||41===c)?l+=o.charAt(u):c<128?l+=a[c]:c<2048?l+=a[192|c>>6]+a[128|63&c]:c<55296||c>=57344?l+=a[224|c>>12]+a[128|c>>6&63]+a[128|63&c]:(u+=1,c=65536+((1023&c)<<10|1023&o.charCodeAt(u)),l+=a[240|c>>18]+a[128|c>>12&63]+a[128|c>>6&63]+a[128|63&c])}return l},isBuffer:function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(i(e)){for(var r=[],n=0;n{"use strict";var n=r(52511);function s(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var i=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,o=/^(\/\/?(?!\/)[^?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(l),c=["%","/","?",";","#"].concat(u),d=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,p=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},g={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},_=r(35984);function y(e,t,r){if(e&&"object"==typeof e&&e instanceof s)return e;var n=new s;return n.parse(e,t,r),n}s.prototype.parse=function(e,t,r){if("string"!=typeof e)throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var s=e.indexOf("?"),a=-1!==s&&s127?R+="x":R+=P[k];if(!R.match(h)){var M=D.slice(0,O),x=D.slice(O+1),F=P.match(p);F&&(M.push(F[1]),x.unshift(F[2])),x.length&&(y="/"+x.join(".")+y),this.hostname=M.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),N||(this.hostname=n.toASCII(this.hostname));var U=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+U,this.href+=this.host,N&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==y[0]&&(y="/"+y))}if(!f[A])for(O=0,w=u.length;O0)&&r.host.split("@"))&&(r.auth=N.shift(),r.hostname=N.shift(),r.host=r.hostname)),r.search=e.search,r.query=e.query,null===r.pathname&&null===r.search||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;if(!v.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var S=v.slice(-1)[0],I=(r.host||e.host||v.length>1)&&("."===S||".."===S)||""===S,O=0,C=v.length;C>=0;C--)"."===(S=v[C])?v.splice(C,1):".."===S?(v.splice(C,1),O++):O&&(v.splice(C,1),O--);if(!T&&!A)for(;O--;O)v.unshift("..");!T||""===v[0]||v[0]&&"/"===v[0].charAt(0)||v.unshift(""),I&&"/"!==v.join("/").substr(-1)&&v.push("");var N,D=""===v[0]||v[0]&&"/"===v[0].charAt(0);return b&&(r.hostname=D?"":v.length?v.shift():"",r.host=r.hostname,(N=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=N.shift(),r.hostname=N.shift(),r.host=r.hostname)),(T=T||r.host&&v.length)&&!D&&v.unshift(""),v.length>0?r.pathname=v.join("/"):(r.pathname=null,r.path=null),null===r.pathname&&null===r.search||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},s.prototype.parseHost=function(){var e=this.host,t=a.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},t.parse=y,t.resolve=function(e,t){return y(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?y(e,!1,!0).resolveObject(t):t},t.format=function(e){return"string"==typeof e&&(e=y(e)),e instanceof s?e.format():s.prototype.format.call(e)},t.Url=s},88778:(e,t,r)=>{"use strict";var n=r(40210),s=r(86036),i=s(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?s(r):r}},86036:(e,t,r)=>{"use strict";var n=r(92087),s=r(40210),i=r(67771),a=s("%TypeError%"),o=s("%Function.prototype.apply%"),l=s("%Function.prototype.call%"),u=s("%Reflect.apply%",!0)||n.call(l,o),c=s("%Object.defineProperty%",!0),d=s("%Math.max%");if(c)try{c({},"a",{value:1})}catch(e){c=null}e.exports=function(e){if("function"!=typeof e)throw new a("a function is required");var t=u(n,l,arguments);return i(t,1+d(0,e.length-(arguments.length-1)),!0)};var h=function(){return u(n,o,arguments)};c?c(e.exports,"apply",{value:h}):e.exports.apply=h},56705:e=>{"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n{"use strict";var n=r(56705);e.exports=Function.prototype.bind||n},3391:(e,t,r)=>{"use strict";var n=r(55419);e.exports=function(){return n()&&!!Symbol.toStringTag}},23395:(e,t,r)=>{"use strict";var n=r(94029),s=r(63083),i=r(86036),a=r(88778),o=r(27296),l=a("Object.prototype.toString"),u=r(3391)(),c="undefined"==typeof globalThis?r.g:globalThis,d=s(),h=a("String.prototype.slice"),p=Object.getPrototypeOf,f=a("Array.prototype.indexOf",!0)||function(e,t){for(var r=0;r-1?t:"Object"===t&&function(e){var t=!1;return n(g,(function(r,n){if(!t)try{r(e),t=h(n,1)}catch(e){}})),t}(e)}return o?function(e){var t=!1;return n(g,(function(r,n){if(!t)try{"$"+r(e)===n&&(t=h(n,1))}catch(e){}})),t}(e):null}},20384:e=>{e.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},55955:(e,t,r)=>{"use strict";var n=r(82584),s=r(48662),i=r(23395),a=r(85692);function o(e){return e.call.bind(e)}var l="undefined"!=typeof BigInt,u="undefined"!=typeof Symbol,c=o(Object.prototype.toString),d=o(Number.prototype.valueOf),h=o(String.prototype.valueOf),p=o(Boolean.prototype.valueOf);if(l)var f=o(BigInt.prototype.valueOf);if(u)var g=o(Symbol.prototype.valueOf);function m(e,t){if("object"!=typeof e)return!1;try{return t(e),!0}catch(e){return!1}}function _(e){return"[object Map]"===c(e)}function y(e){return"[object Set]"===c(e)}function E(e){return"[object WeakMap]"===c(e)}function T(e){return"[object WeakSet]"===c(e)}function A(e){return"[object ArrayBuffer]"===c(e)}function v(e){return"undefined"!=typeof ArrayBuffer&&(A.working?A(e):e instanceof ArrayBuffer)}function b(e){return"[object DataView]"===c(e)}function S(e){return"undefined"!=typeof DataView&&(b.working?b(e):e instanceof DataView)}t.isArgumentsObject=n,t.isGeneratorFunction=s,t.isTypedArray=a,t.isPromise=function(e){return"undefined"!=typeof Promise&&e instanceof Promise||null!==e&&"object"==typeof e&&"function"==typeof e.then&&"function"==typeof e.catch},t.isArrayBufferView=function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):a(e)||S(e)},t.isUint8Array=function(e){return"Uint8Array"===i(e)},t.isUint8ClampedArray=function(e){return"Uint8ClampedArray"===i(e)},t.isUint16Array=function(e){return"Uint16Array"===i(e)},t.isUint32Array=function(e){return"Uint32Array"===i(e)},t.isInt8Array=function(e){return"Int8Array"===i(e)},t.isInt16Array=function(e){return"Int16Array"===i(e)},t.isInt32Array=function(e){return"Int32Array"===i(e)},t.isFloat32Array=function(e){return"Float32Array"===i(e)},t.isFloat64Array=function(e){return"Float64Array"===i(e)},t.isBigInt64Array=function(e){return"BigInt64Array"===i(e)},t.isBigUint64Array=function(e){return"BigUint64Array"===i(e)},_.working="undefined"!=typeof Map&&_(new Map),t.isMap=function(e){return"undefined"!=typeof Map&&(_.working?_(e):e instanceof Map)},y.working="undefined"!=typeof Set&&y(new Set),t.isSet=function(e){return"undefined"!=typeof Set&&(y.working?y(e):e instanceof Set)},E.working="undefined"!=typeof WeakMap&&E(new WeakMap),t.isWeakMap=function(e){return"undefined"!=typeof WeakMap&&(E.working?E(e):e instanceof WeakMap)},T.working="undefined"!=typeof WeakSet&&T(new WeakSet),t.isWeakSet=function(e){return T(e)},A.working="undefined"!=typeof ArrayBuffer&&A(new ArrayBuffer),t.isArrayBuffer=v,b.working="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView&&b(new DataView(new ArrayBuffer(1),0,1)),t.isDataView=S;var I="undefined"!=typeof SharedArrayBuffer?SharedArrayBuffer:void 0;function O(e){return"[object SharedArrayBuffer]"===c(e)}function C(e){return void 0!==I&&(void 0===O.working&&(O.working=O(new I)),O.working?O(e):e instanceof I)}function N(e){return m(e,d)}function D(e){return m(e,h)}function w(e){return m(e,p)}function P(e){return l&&m(e,f)}function R(e){return u&&m(e,g)}t.isSharedArrayBuffer=C,t.isAsyncFunction=function(e){return"[object AsyncFunction]"===c(e)},t.isMapIterator=function(e){return"[object Map Iterator]"===c(e)},t.isSetIterator=function(e){return"[object Set Iterator]"===c(e)},t.isGeneratorObject=function(e){return"[object Generator]"===c(e)},t.isWebAssemblyCompiledModule=function(e){return"[object WebAssembly.Module]"===c(e)},t.isNumberObject=N,t.isStringObject=D,t.isBooleanObject=w,t.isBigIntObject=P,t.isSymbolObject=R,t.isBoxedPrimitive=function(e){return N(e)||D(e)||w(e)||P(e)||R(e)},t.isAnyArrayBuffer=function(e){return"undefined"!=typeof Uint8Array&&(v(e)||C(e))},["isProxy","isExternal","isModuleNamespaceObject"].forEach((function(e){Object.defineProperty(t,e,{enumerable:!1,value:function(){throw new Error(e+" is not supported in userland")}})}))},89539:(e,t,r)=>{var n=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n=i)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),l=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),f(r)?n.showHidden=r:r&&t._extend(n,r),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),c(n,e,n.depth)}function l(e,t){var r=o.styles[t];return r?"["+o.colors[r][0]+"m"+e+"["+o.colors[r][1]+"m":e}function u(e,t){return e}function c(e,r,n){if(e.customInspect&&r&&b(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var s=r.inspect(n,e);return _(s)||(s=c(e,s,n)),s}var i=function(e,t){if(y(t))return e.stylize("undefined","undefined");if(_(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return m(t)?e.stylize(""+t,"number"):f(t)?e.stylize(""+t,"boolean"):g(t)?e.stylize("null","null"):void 0}(e,r);if(i)return i;var a=Object.keys(r),o=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(r)),v(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return d(r);if(0===a.length){if(b(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(E(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(A(r))return e.stylize(Date.prototype.toString.call(r),"date");if(v(r))return d(r)}var u,T="",S=!1,I=["{","}"];return p(r)&&(S=!0,I=["[","]"]),b(r)&&(T=" [Function"+(r.name?": "+r.name:"")+"]"),E(r)&&(T=" "+RegExp.prototype.toString.call(r)),A(r)&&(T=" "+Date.prototype.toUTCString.call(r)),v(r)&&(T=" "+d(r)),0!==a.length||S&&0!=r.length?n<0?E(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),u=S?function(e,t,r,n,s){for(var i=[],a=0,o=t.length;a60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}(u,T,I)):I[0]+T+I[1]}function d(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,r,n,s,i){var a,o,l;if((l=Object.getOwnPropertyDescriptor(t,s)||{value:t[s]}).get?o=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(o=e.stylize("[Setter]","special")),C(n,s)||(a="["+s+"]"),o||(e.seen.indexOf(l.value)<0?(o=g(r)?c(e,l.value,null):c(e,l.value,r-1)).indexOf("\n")>-1&&(o=i?o.split("\n").map((function(e){return" "+e})).join("\n").slice(2):"\n"+o.split("\n").map((function(e){return" "+e})).join("\n")):o=e.stylize("[Circular]","special")),y(a)){if(i&&s.match(/^\d+$/))return o;(a=JSON.stringify(""+s)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.slice(1,-1),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+o}function p(e){return Array.isArray(e)}function f(e){return"boolean"==typeof e}function g(e){return null===e}function m(e){return"number"==typeof e}function _(e){return"string"==typeof e}function y(e){return void 0===e}function E(e){return T(e)&&"[object RegExp]"===S(e)}function T(e){return"object"==typeof e&&null!==e}function A(e){return T(e)&&"[object Date]"===S(e)}function v(e){return T(e)&&("[object Error]"===S(e)||e instanceof Error)}function b(e){return"function"==typeof e}function S(e){return Object.prototype.toString.call(e)}function I(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(e=e.toUpperCase(),!i[e])if(a.test(e)){var r=process.pid;i[e]=function(){var n=t.format.apply(t,arguments);console.error("%s %d: %s",e,r,n)}}else i[e]=function(){};return i[e]},t.inspect=o,o.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},o.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.types=r(55955),t.isArray=p,t.isBoolean=f,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=m,t.isString=_,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=y,t.isRegExp=E,t.types.isRegExp=E,t.isObject=T,t.isDate=A,t.types.isDate=A,t.isError=v,t.types.isNativeError=v,t.isFunction=b,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(20384);var O=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function C(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,r;console.log("%s - %s",(r=[I((e=new Date).getHours()),I(e.getMinutes()),I(e.getSeconds())].join(":"),[e.getDate(),O[e.getMonth()],r].join(" ")),t.format.apply(t,arguments))},t.inherits=r(35717),t._extend=function(e,t){if(!t||!T(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e};var N="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function D(e,t){if(!e){var r=new Error("Promise was rejected with a falsy value");r.reason=e,e=r}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(N&&e[N]){var t;if("function"!=typeof(t=e[N]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,N,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,n=new Promise((function(e,n){t=e,r=n})),s=[],i=0;i=c.ZERO&&e<=c.NINE}Object.defineProperty(t,"replaceCodePoint",{enumerable:!0,get:function(){return f.replaceCodePoint}}),Object.defineProperty(t,"fromCodePoint",{enumerable:!0,get:function(){return f.fromCodePoint}}),function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"}(c||(c={})),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(d=t.BinTrieFlags||(t.BinTrieFlags={})),function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"}(h||(h={})),function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"}(p=t.DecodingMode||(t.DecodingMode={}));var m=function(){function e(e,t,r){this.decodeTree=e,this.emitCodePoint=t,this.errors=r,this.state=h.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=p.Strict}return e.prototype.startEntity=function(e){this.decodeMode=e,this.state=h.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},e.prototype.write=function(e,t){switch(this.state){case h.EntityStart:return e.charCodeAt(t)===c.NUM?(this.state=h.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=h.NamedEntity,this.stateNamedEntity(e,t));case h.NumericStart:return this.stateNumericStart(e,t);case h.NumericDecimal:return this.stateNumericDecimal(e,t);case h.NumericHex:return this.stateNumericHex(e,t);case h.NamedEntity:return this.stateNamedEntity(e,t)}},e.prototype.stateNumericStart=function(e,t){return t>=e.length?-1:(32|e.charCodeAt(t))===c.LOWER_X?(this.state=h.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=h.NumericDecimal,this.stateNumericDecimal(e,t))},e.prototype.addToNumericResult=function(e,t,r,n){if(t!==r){var s=r-t;this.result=this.result*Math.pow(n,s)+parseInt(e.substr(t,s),n),this.consumed+=s}},e.prototype.stateNumericHex=function(e,t){for(var r,n=t;t=c.UPPER_A&&r<=c.UPPER_F||r>=c.LOWER_A&&r<=c.LOWER_F)))return this.addToNumericResult(e,n,t,16),this.emitNumericEntity(s,3);t+=1}return this.addToNumericResult(e,n,t,16),-1},e.prototype.stateNumericDecimal=function(e,t){for(var r=t;t>14;t=c.UPPER_A&&e<=c.UPPER_Z||e>=c.LOWER_A&&e<=c.LOWER_Z||g(e)}(a)))?0:this.emitNotTerminatedNamedEntity();if(0!=(s=((n=r[this.treeIndex])&d.VALUE_LENGTH)>>14)){if(i===c.SEMI)return this.emitNamedEntityData(this.treeIndex,s,this.consumed+this.excess);this.decodeMode!==p.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}var a;return-1},e.prototype.emitNotTerminatedNamedEntity=function(){var e,t=this.result,r=(this.decodeTree[t]&d.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,r,this.consumed),null===(e=this.errors)||void 0===e||e.missingSemicolonAfterCharacterReference(),this.consumed},e.prototype.emitNamedEntityData=function(e,t,r){var n=this.decodeTree;return this.emitCodePoint(1===t?n[e]&~d.VALUE_LENGTH:n[e+1],r),3===t&&this.emitCodePoint(n[e+2],r),r},e.prototype.end=function(){var e;switch(this.state){case h.NamedEntity:return 0===this.result||this.decodeMode===p.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case h.NumericDecimal:return this.emitNumericEntity(0,2);case h.NumericHex:return this.emitNumericEntity(0,3);case h.NumericStart:return null===(e=this.errors)||void 0===e||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case h.EntityStart:return 0}},e}();function _(e){var t="",r=new m(e,(function(e){return t+=(0,u.fromCodePoint)(e)}));return function(e,n){for(var s=0,i=0;(i=e.indexOf("&",i))>=0;){t+=e.slice(s,i),r.startEntity(n);var a=r.write(e,i+1);if(a<0){s=i+r.end();break}s=i+a,i=0===a?s+1:s}var o=t+e.slice(s);return t="",o}}function y(e,t,r,n){var s=(t&d.BRANCH_LENGTH)>>7,i=t&d.JUMP_TABLE;if(0===s)return 0!==i&&n===i?r:-1;if(i){var a=n-i;return a<0||a>=s?-1:e[r+a]-1}for(var o=r,l=o+s-1;o<=l;){var u=o+l>>>1,c=e[u];if(cn))return e[u+s];l=u-1}}return-1}t.EntityDecoder=m,t.determineBranch=y;var E=_(o.default),T=_(l.default);t.decodeHTML=function(e,t){return void 0===t&&(t=p.Legacy),E(e,t)},t.decodeHTMLAttribute=function(e){return E(e,p.Attribute)},t.decodeHTMLStrict=function(e){return E(e,p.Strict)},t.decodeXML=function(e){return T(e,p.Strict)}},10057:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.replaceCodePoint=t.fromCodePoint=void 0;var n=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function s(e){var t;return e>=55296&&e<=57343||e>1114111?65533:null!==(t=n.get(e))&&void 0!==t?t:e}t.fromCodePoint=null!==(r=String.fromCodePoint)&&void 0!==r?r:function(e){var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+String.fromCharCode(e)},t.replaceCodePoint=s,t.default=function(e){return(0,t.fromCodePoint)(s(e))}},41594:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.escapeText=t.escapeAttribute=t.escapeUTF8=t.escape=t.encodeXML=t.getCodePoint=t.xmlReplacer=void 0,t.xmlReplacer=/["&'<>$\x80-\uFFFF]/g;var r=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);function n(e){for(var n,s="",i=0;null!==(n=t.xmlReplacer.exec(e));){var a=n.index,o=e.charCodeAt(a),l=r.get(o);void 0!==l?(s+=e.substring(i,a)+l,i=a+1):(s+="".concat(e.substring(i,a),"&#x").concat((0,t.getCodePoint)(e,a).toString(16),";"),i=t.xmlReplacer.lastIndex+=Number(55296==(64512&o)))}return s+e.substr(i)}function s(e,t){return function(r){for(var n,s=0,i="";n=e.exec(r);)s!==n.index&&(i+=r.substring(s,n.index)),i+=t.get(n[0].charCodeAt(0)),s=n.index+1;return i+r.substring(s)}}t.getCodePoint=null!=String.prototype.codePointAt?function(e,t){return e.codePointAt(t)}:function(e,t){return 55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t)},t.encodeXML=n,t.escape=n,t.escapeUTF8=s(/[&<>'"]/g,r),t.escapeAttribute=s(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),t.escapeText=s(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))},38099:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array('áµ<ÕıʊÒÕ»×ٵ۞ޢߖà à©Šàª‘ඡ๭༉༦჊ረዡá•á’ᓃᓟᔥ\0\0\0\0\0\0á•«á›á¦á°’á·á½¾â â†°âŠâ€â»â‘‚⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹Â•˜¦³¹ÈÃlig耻Æ䃆P耻&䀦cute耻Ãäƒreve;ä„‚Ä€iyx}rc耻Â䃂;är;쀀ð”„rave耻À䃀pha;䎑acr;ä„€d;æ©“Ä€gp¡on;ä„„f;쀀ð”¸plyFunction;æ¡ing耻Å䃅Ācs¾Ãr;쀀ð’œign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;æ«§ed;挆y;䑯€crtąċĔause;戵noullis;愬a;䎒r;쀀ð”…pf;쀀ð”¹eve;䋘còēmpeq;扎܀HOacdefhilorsuÅőŖƀƞƢƵƷƺǜȕɳɸɾcy;ä§PY耻©䂩ƀcpyÅŢźute;䄆Ā;iŧŨ拒talDifferentialD;æ……leys;æ„­È€aeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleÈ€DMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oÄ€csǢǸkwiseContourIntegral;戲eCurlyÄ€DQȃÈoubleQuote;æ€uote;怙ȀlnpuȞȨɇɕonÄ€;eȥȦ户;æ©´Æ€gitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;æ„‚oduct;æˆnterClockwiseContourIntegral;戳oss;樯cr;쀀ð’žpÄ€;Cʄʅ拓ap;æ‰Ö€DJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ÒÄ€;oŹʥtrahd;椑cy;ä‚cy;ä…cy;䯀grsʿ˄ˇger;怡r;憡hv;櫤ĀayËË•ron;䄎;ä”lÄ€;tË˞戇a;䎔r;쀀ð”‡Ä€af˫̧Ācm˰̢riticalÈ€ADGT̖̜̀̆cute;ä‚´oÅ´Ì‹Ì;ä‹™bleAcute;ä‹rave;ä ilde;䋜ond;æ‹„ferentialD;慆Ѱ̽\0\0\0͔͂\0Ð…f;ì€€ð”»Æ€;DE͈͉Í䂨ot;惜qual;æ‰bleÌ€CDLRUVͣͲ΂ÏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftÆ€ARTÎΖΡrrow;æ‡ightArrow;懔eåˊngÄ€LRΫτeftÄ€ARγιrrow;柸ightArrow;柺ightArrow;柹ightÄ€ATϘϞrrow;懒ee;抨pÉÏ©\0\0ϯrrow;懑ownArrow;懕erticalBar;戥nÌ€ABLRTaВЪаўѿͼrrowÆ€;BUÐОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ÑightVector;æ¥eeVector;楞ectorÄ€;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorÄ€;BѺѻæ‡ar;楗eeÄ€;A҆҇护rrow;憧ĀctÒ’Ò—r;쀀ð’Ÿrok;ä„à €NTacdfglmopqstuxÒ½Ó€Ó„Ó‹ÓžÓ¢Ó§Ó®ÓµÔ¡Ô¯Ô¶Õ’ÕÕ Õ¥G;ä…ŠH耻Ãäƒcute耻É䃉ƀaiyÓ’Ó—Óœron;䄚rc耻Ê䃊;ä­ot;ä„–r;쀀ð”ˆrave耻È䃈ement;戈ĀapÓºÓ¾cr;ä„’tyɓԆ\0\0Ô’mallSquare;æ—»erySmallSquare;æ–«Ä€gpÔ¦Ôªon;䄘f;쀀ð”¼silon;䎕uÄ€aiÔ¼Õ‰lÄ€;TՂՃ橵ilde;扂librium;懌ĀciÕ—Õšr;æ„°m;橳a;䎗ml耻Ë䃋ĀipÕªÕ¯sts;戃onentialE;慇ʀcfiosÖ…ÖˆÖֲ׌y;ä¤r;쀀ð”‰lledɓ֗\0\0Ö£mallSquare;æ—¼erySmallSquare;斪Ͱֺ\0Ö¿\0\0ׄf;쀀ð”½All;戀riertrf;愱cò׋؀JTabcdfgorst×¨×¬×¯×ºØ€Ø’Ø–Ø›ØØ£Ù¬Ù²cy;äƒè€»>䀾mmaÄ€;d׷׸䎓;äœreve;䄞ƀeiy؇،Ødil;ä„¢rc;䄜;ä“ot;ä„ r;쀀ð”Š;æ‹™pf;쀀ð”¾eaterÌ€EFGLSTصلَٖٛ٦qualÄ€;Lؾؿ扥ess;æ‹›ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀ð’¢;扫ЀAacfiosuÚ…Ú‹Ú–Ú›ÚžÚªÚ¾ÛŠRDcy;äªÄ€ctÚÚ”ek;䋇;äžirc;䄤r;愌lbertSpace;愋ǰگ\0Ú²f;æ„izontalLine;攀Āctۃۅòکrok;䄦mpÅ„ÛÛ˜ownHumðįqual;æ‰Ü€EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދÞÞ•cy;ä•lig;䄲cy;äcute耻ÃäƒÄ€iyܓܘrc耻Î䃎;ä˜ot;ä„°r;æ„‘rave耻Ì䃌ƀ;apܠܯܿĀcgÜ´Ü·r;䄪inaryI;æ…ˆlieóÏǴ݉\0ݢĀ;eÝݎ戬Āgrݓݘral;戫section;æ‹‚isibleÄ€CTݬݲomma;æ£imes;æ¢Æ€gptݿރވon;ä„®f;쀀ð•€a;䎙cr;æ„ilde;䄨ǫޚ\0Þžcy;ä†l耻ÃäƒÊ€cfosuެ޷޼߂ßÄ€iyÞ±Þµrc;ä„´;ä™r;쀀ð”pf;쀀ð•ǣ߇\0ߌr;쀀ð’¥rcy;äˆkcy;ä„΀HJacfosߤߨ߽߬߱ࠂࠈcy;ä¥cy;äŒppa;䎚Āeyß¶ß»dil;ä„¶;äšr;쀀ð”Žpf;쀀ð•‚cr;쀀ð’¦Ö€JTaceflmostࠥࠩࠬà¡à¡£à¦³à¦¸à§‡à§à¨·à©‡cy;ä‰è€»<䀼ʀcmnprà ·à ¼à¡à¡„à¡ute;䄹bda;䎛g;柪lacetrf;æ„’r;憞ƀaeyࡗ࡜ࡡron;䄽dil;ä„»;ä›Ä€fsࡨ॰tÔ€ACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़Î४Ānrࢃà¢gleBracket;柨rowÆ€;BR࢙࢚࢞æ†ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorÄ€;Bࣛࣜ懃ar;楙loor;挊ightÄ€AV࣯ࣵrrow;憔ector;楎Āerà¤à¤—eÆ€;AVà¤‰à¤Šà¤æŠ£rrow;憤ector;楚iangleÆ€;BEतथऩ抲ar;æ§qual;抴pÆ€DTVषूौownVector;楑eeVector;楠ectorÄ€;Bॖॗ憿ar;楘ectorÄ€;B॥०憼ar;楒ightáΜsÌ€EFGLSTॾঋকà¦à¦¢à¦­qualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀ð”Ä€;eঽা拘ftarrow;懚idot;ä„¿Æ€npw৔ਖਛgÈ€LRlr৞৷ਂà¨eftÄ€AR০৬rrow;柵ightArrow;柷ightArrow;柶eftÄ€arγਊightáοightáϊf;쀀ð•ƒerÄ€LRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;ä…;扪Ѐacefiosuਗ਼à©à© à©·à©¼àª…ઋ઎p;椅y;äœÄ€dl੥੯iumSpace;æŸlintrf;愳r;쀀ð”nusPlus;戓pf;쀀ð•„cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;äŠcute;䅃ƀaey઴હાron;ä…‡dil;ä……;䯀gswે૰଎ativeÆ€MTV૓૟૨ediumSpace;怋hiÄ€cn૦૘ë૙eryThiî૙tedÄ€GL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀ð”‘È€Bnptଢନଷ଺reak;æ BreakingSpace;ä‚ f;æ„•Ú€;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualÄ€;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀â‰Ì¸eÄ€fsà°Šà°§tTriangleÆ€;BEచఛడ拪ar;쀀â§Ì¸qual;括sÌ€;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedÄ€GL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesÆ€;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleÆ€;BEೋೌ೒拫ar;쀀â§Ì¸qual;æ‹­Ä€quà³à´ŒuareSuÄ€bp೨೹setÄ€;E೰ೳ쀀âŠÌ¸qual;æ‹¢ersetÄ€;Eഃആ쀀âŠÌ¸qual;拣ƀbcpഓതൎsetÄ€;Eഛഞ쀀⊂⃒qual;抈ceedsÈ€;ESTലള഻െæŠqual;쀀⪰̸lantEqual;æ‹¡ilde;쀀≿̸ersetÄ€;E൘൛쀀⊃⃒qual;抉ildeÈ€;EFT൮൯൵ൿæ‰qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀ð’©ilde耻Ñ䃑;äŽÜ€Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;ä…’cute耻Ó䃓Āiyà·Žà·“rc耻Ô䃔;äžblac;ä…r;쀀ð”’rave耻Ò䃒ƀaei෮ෲ෶cr;ä…Œga;䎩cron;䎟pf;쀀ð•†enCurlyÄ€DQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀ð’ªash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erÄ€BP๋๠Āarà¹à¹“r;怾acÄ€ek๚๜;æžet;掴arenthesis;æœÒ€acfhilors๿ງຊàºàº’ດàºàº°à»¼rtialD;戂y;äŸr;쀀ð”“i;䎦;䎠usMinus;䂱ĀipຢອncareplanÃ¥Úf;愙Ȁ;eio຺ູ໠໤檻cedesÈ€;EST່້à»à»šæ‰ºqual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;æˆortionÄ€;aȥ໹l;æˆÄ€cià¼à¼†r;쀀ð’«;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀ð””pf;愚cr;ì€€ð’¬Ø€BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;æ¤G耻®䂮ƀcnrཎནབute;ä…”g;柫rÄ€;tà½œà½æ† l;椖ƀaeyཧཬཱron;ä…˜dil;ä…–;ä Ä€;vླྀཹ愜erseÄ€EUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVaà¿à¿«à¿³á€¢á€¨á›á‚‡Ï˜Ä€nr࿆࿒gleBracket;柩rowÆ€;BL࿜à¿à¿¡æ†’ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;æ¥ectorÄ€;Bá€á€žæ‡‚ar;楕loor;挋ĀerိáƒeÆ€;AVဵံြ抢rrow;憦ector;楛iangleÆ€;BEáá‘á•æŠ³ar;æ§qual;抵pÆ€DTVá£á®á¸ownVector;æ¥eeVector;楜ectorÄ€;Bႂႃ憾ar;楔ectorÄ€;B႑႒懀ar;楓Āpuႛ႞f;æ„ndImplies;楰ightarrow;懛ĀchႹႼr;æ„›;憱leDelayed;æ§´Ú€HOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;ä©y;ä¨FTcy;ä¬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;ä… dil;ä…žrc;ä…œ;ä¡r;쀀ð”–ortÈ€DLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»à¿pArrow;憑gma;䎣allCircle;战pf;쀀ð•ŠÉ²á…­\0\0á…°t;戚areÈ€;ISUᅻᅼᆉᆯ斡ntersection;抓uÄ€bpá†á†žsetÄ€;EᆗᆘæŠqual;抑ersetÄ€;EᆨᆩæŠqual;抒nion;抔cr;쀀ð’®ar;拆ȀbcmpᇈᇛሉላĀ;sá‡á‡Žæ‹etÄ€;Eá‡á‡•qual;抆ĀchᇠህeedsÈ€;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetÄ€;EáˆœáˆæŠƒqual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;ä‹y;ä¦Ä€buቚቜ;䀉;䎤ƀaeyብቪቯron;ä…¤dil;ä…¢;ä¢r;쀀ð”—Ä€eiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀âŸâ€ŠSpace;怉ldeÈ€;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀ð•‹ipleDot;惛Āctá‹–á‹›r;쀀ð’¯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽá·áŽ…\0á¿á„áŠáÄ€crá‹»áŒute耻Ú䃚rÄ€;oጇገ憟cir;楉rǣጓ\0጖y;äŽve;䅬Āiyጞጣrc耻Û䃛;ä£blac;ä…°r;쀀ð”˜rave耻Ù䃙acr;䅪Ādiáá©erÄ€BPáˆáÄ€aráár;äŸacÄ€eká—á™;æŸet;掵arenthesis;æonÄ€;Pá°á±æ‹ƒlus;抎Āgpá»á¿on;ä…²f;쀀ð•ŒÐ€ADETadps᎕ᎮᎸá„Ϩá’á—á³rrowÆ€;BDá…ᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeÄ€;Aá‹áŒæŠ¥rrow;憥ownáϳerÄ€LRážá¨eftArrow;憖ightArrow;憗iÄ€;lá¹áºä’on;䎥ing;ä…®cr;쀀ð’°ilde;ä…¨ml耻Ü䃜ҀDbcdefosvá§á¬á°á³á¾á’…á’Šá’á’–ash;披ar;æ««y;ä’ashÄ€;lá»á¼æŠ©;櫦Āerᑃᑅ;æ‹Æ€btyᑌá‘ᑺar;怖Ā;iá‘á‘•calÈ€BLSTᑡᑥᑪᑴar;戣ine;ä¼eparator;æ˜ilde;所ThinSpace;怊r;쀀ð”™pf;쀀ð•cr;쀀ð’±dash;抪ʀcefosᒧᒬᒱᒶᒼirc;ä…´dge;æ‹€r;쀀ð”špf;쀀ð•Žcr;쀀ð’²È€fiosá“‹á“ᓒᓘr;쀀ð”›;䎞pf;쀀ð•cr;쀀ð’³Ò€AIUacfosuᓱᓵᓹᓽᔄá”ᔔᔚᔠcy;ä¯cy;ä‡cy;ä®cute耻ÃäƒÄ€iyᔉá”rc;ä…¶;ä«r;쀀ð”œpf;쀀ð•cr;쀀ð’´ml;䅸ЀHacdefosᔵᔹᔿᕋá•á•ᕠᕤcy;ä–cute;䅹Āayᕄᕉron;ä…½;ä—ot;䅻Dzᕔ\0á•›oWidtè૙a;䎖r;愨pf;愤cr;쀀ð’µà¯¡á–ƒá–Šá–\0á–°á–¶á–¿\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0áš¾cute耻á䃡reve;䄃̀;Ediuyá–œá–ᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;ä°lig耻æ䃦Ā;r²ᖺ;쀀ð”žrave耻à䃠Āepá—Šá—–Ä€fpá—á—”sym;愵èᗓha;䎱Āapá—ŸcÄ€clᗤᗧr;ä„g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿá˜á˜‡æˆ§nd;æ©•;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿá™á™™æˆ ;榤e»ᘙsdÄ€;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tÄ€;vᙅᙆ戟bÄ€;dá™Œá™æŠ¾;æ¦Ä€ptᙔᙗh;戢»¹arr;æ¼Ä€gpᙣᙧon;ä„…f;쀀ð•’΀;Eaeiopá‹á™»á™½áš‚ᚄᚇᚊ;æ©°cir;橯;扊d;手s;䀧roxÄ€;eá‹áš’ñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀ð’¶;䀪mpÄ€;eá‹áš¯Ã±Êˆilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼áƒáˆá¸á½áŸ áŸ¦á ¹á¡áœá¤½á¥ˆá¥°ot;æ«­Ä€crᛶ᜞kÈ€cepsᜀᜅáœáœ“ong;扌psilon;ä¶rime;怵imÄ€;e᜚᜛戽q;æ‹Å¶áœ¢áœ¦ee;抽edÄ€;gᜬᜭ挅e»ᜭrkÄ€;táœáœ·brk;掶Āoyáœá;ä±quo;怞ʀcmprtá“á›á¡á¤á¨ausÄ€;eĊĉptyv;榰séᜌnoõēƀahwá¯á±á³;䎲;æ„¶een;扬r;쀀ð”Ÿg΀costuvwážážáž³áŸáŸ•៛៞ƀaiuបពរðݠrc;æ—¯pÂ»á±Æ€dptឤឨឭot;樀lus;æ¨imes;樂ɱឹ\0\0áž¾cup;樆ar;昅riangleÄ€duáŸáŸ’own;æ–½p;æ–³plus;樄eåᑄåᒭarow;æ¤Æ€ako៭ᠦᠵĀcn៲ᠣkÆ€lst៺֫᠂ozenge;æ§«riangleÈ€;dlrá ’á “á ˜á æ–´own;æ–¾eft;æ—‚ight;æ–¸k;æ£Æ±á «\0ᠳƲᠯ\0á ±;æ–’;æ–‘4;æ–“ck;斈Āeoá ¾á¡Ä€;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;æŒÈ€ptwxᡙᡞᡧᡬf;쀀ð•“Ä€;tá‹á¡£om»áŒtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊá¤á¤¡È€LRlrᢎá¢á¢’ᢔ;æ•—;æ•”;æ•–;æ•“Ê€;DUduᢡᢢᢤᢦᢨæ•;敦;æ•©;敤;æ•§È€LRlrᢳᢵᢷᢹ;æ•;敚;敜;教΀;HLRhlrᣊᣋá£á£á£‘ᣓᣕ救;敬;æ•£;æ• ;æ•«;æ•¢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;æ••;æ•’;æ”;攌ʀ;DUduڽ᣷᣹᣻᣽;æ•¥;敨;攬;æ”´inus;抟lus;択imes;抠ȀLRlrᤙᤛá¤á¤Ÿ;æ•›;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;æ•¡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀ð’·mi;æmÄ€;e᜚᜜lÆ€;bhᥨᥩᥫäœ;æ§…sub;柈Ŭᥴ᥾lÄ€;e᥹᥺怢t»᥺pÆ€;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷá©\0\0᪴\0\0á«\0\0ᬡᬮá­á­’\0᯽\0ᰌƀcpr᦭ᦲá§ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;æ©„rcup;橉Āauá§á§’p;æ©‹p;橇ot;æ©€;쀀∩︀Āeo᧢᧥t;æÃ®Ú“È€aeiuá§°á§»á¨á¨…ǰ᧵\0᧸s;æ©on;ä„dil耻ç䃧rc;䄉psÄ€;sá¨Œá¨æ©Œm;æ©ot;ä„‹Æ€dmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;ì€€ð” Æ€ceiᨽᩀá©y;䑇ckÄ€;mᩇᩈ朓ark»ᩈ;ä‡r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowÄ€lr᩼áªeft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;æŠnint;æ¨id;櫯cir;æ§‚ubsÄ€;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonÄ€;eá«á«Žä€ºÄ€;qÇÆɭ᫙\0\0á«¢aÄ€;t᫞᫟䀬;䀯€;fl᫨᫩᫫æˆÃ®á… eÄ€mx᫱᫶ent»᫩eóÉǧ᫾\0ᬇĀ;dኻᬂot;æ©­nôɆƀfryá¬á¬”ᬗ;쀀ð•”oäɔ脀©;sÅ•á¬r;æ„—Ä€aoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀ð’¸Ä€bpᬼ᭄Ā;eá­á­‚æ«;æ«‘Ä€;eᭉᭊæ«;æ«’dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrÄ€lr᭨᭪;椸;椵ɰ᭲\0\0á­µr;拞c;拟arrÄ€;p᭿ᮀ憶;椽̀;bcdosá®á®á®–ᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;æŠr;æ©…;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrÄ€;mᮼᮽ憷;椼yÆ€evwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;æ‹en耻¤䂤earrowÄ€lrᯮ᯳eft»ᮀight»ᮽeäá¯Ä€ciá°á°‡oninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿á±á±©á±µá²Šá²žá²¬á²·á³»á³¿á´áµ»á¶‘ᶫᶻ᷆á·ròÎar;楥Ȁglrs᱈á±á±’á±”ger;怠eth;愸òᄳhÄ€;vᱚᱛæ€Â»à¤ŠÅ«á±¡á±§arow;æ¤aã̕Āayᱮᱳron;ä„;ä´Æ€;ao̲ᱼᲄĀgrÊ¿á²r;懊tseq;æ©·Æ€glmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀ð”¡arÄ€lrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mÆ€;oș᳊᳔ndÄ€;ș᳑uit;晦amma;äin;拲ƀ;io᳧᳨᳸䃷de脀÷;oá³§á³°ntimes;拇nø᳷cy;ä‘’cɯᴆ\0\0á´Šrn;挞op;æŒÊ€lptuwá´˜á´á´¢áµ‰áµ•lar;䀤f;쀀ð••Ê€;emps̋ᴭᴷᴽᵂqÄ€;dÍ’á´³ot;扑inus;戸lus;戔quare;抡blebarwedgåúnÆ€adhá„®áµáµ§ownarrowóᲃarpoonÄ€lrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0á¶Žrn;挟op;挌ƀcotᶘᶣᶦĀryá¶á¶¡;쀀ð’¹;ä‘•l;æ§¶rok;ä„‘Ä€drá¶°á¶´ot;拱iÄ€;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āciá·’á·•y;䑟grarr;柿ऀDacdefglmnopqrstuxá¸á¸‰á¸™á¸¸Õ¸á¸¼á¹‰á¹¡á¹¾áº¥áº¯áº½á»¡á¼ªá¼·á½„὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;ä„›rÄ€;cḭḮ扖耻ê䃪lon;払;ä‘ot;ä„—Ä€Drá¹á¹…ot;扒;ì€€ð”¢Æ€;rsá¹á¹‘ṗ檚ave耻è䃨Ā;dá¹œá¹æª–ot;檘Ȁ;ilsṪṫṲṴ檙nters;æ§;æ„“Ä€;dṹṺ檕ot;檗ƀapsẅẉẗcr;ä„“tyÆ€;svẒẓẕ戅et»ẓpÄ€1;áºáº¤Ä³áº¡áº£;怄;怅怃ĀgsẪẬ;ä…‹p;怂ĀgpẴẸon;ä„™f;ì€€ð•–Æ€alsỄỎỒrÄ€;sỊị拕l;æ§£us;橱iÆ€;lvỚớở䎵on»ớ;äµÈ€csuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantÄ€glἂἆtr»á¹ess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vÄ€;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiá¼¾á½á»¸r;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0á¿“\0ῦῪ \0 âšllingdotseñṄy;ä‘„male;晀ƀilrá¾­á¾³á¿lig;耀ffiɩᾹ\0\0á¾½g;耀ffig;耀ffl;쀀ð”£lig;耀ï¬lig;쀀fjÆ€altῙ῜ῡt;æ™­ig;耀flns;æ–±of;䆒ǰ΅\0ῳf;쀀ð•—Ä€akÖ¿á¿·Ä€;vῼ´拔;æ«™artint;æ¨Ä€ao‌â•Ä€cs‑â’ႉ‸â…âˆ\0âβ•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;æ…•;æ…™;慛Ƴ‴\0‶;æ…”;慖ʴ‾â\0\0âƒè€»Â¾ä‚¾;æ…—;æ…œ5;慘ƶâŒ\0âŽ;æ…š;æ…8;æ…žl;æ„wn;挢cr;쀀ð’»à¢€Eabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lÙ₇;檌ƀcmpâ‚â‚•â‚ute;䇵maÄ€;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;ä„;ä³ot;ä„¡È€;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otÄ€;oâƒœâƒæª€Ä€;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀ð”¤Ä€;gٳ؛mel;æ„·cy;ä‘“È€;Eajٚℌℎâ„;檒;檥;檤ȀEaesâ„›â„â„©â„´;扩pÄ€;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;æ‹§pf;쀀ð•˜Ä€ci⅃ⅆr;愊mÆ€;elÙ«â…Žâ…;檎;æªèŒ€>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;æ‹—Par;榕uest;橼ʀadelsↄⅪâ†Ù–↛ǰ↉\0↎proø₞r;楸qÄ€lqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘âˆâˆ¯â‰¨â‰½ròΠȀilmrâ‡â‡”⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;æ„irc;䄥ƀalrâˆâˆŽâˆ“rtsÄ€;u∉∊晥it»∊lip;怦con;抹r;쀀ð”¥sÄ€ew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kÄ€lr≉≓eftarrow;憩ightarrow;憪f;쀀ð•™bar;怕ƀclt≯≴≸r;쀀ð’½asè⇴rok;ä„§Ä€bp⊂⊇ull;æƒhen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢â§â¢â¿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;ä¸Ä€cx⊼⊿y;äµcl耻¡䂡ĀfrΟ⋉;쀀ð”¦rave耻ì䃬Ȁ;inoܾâ‹â‹©â‹®Ä€in⋢⋦nt;樌t;戭fin;æ§œta;æ„©lig;䄳ƀaopâ‹¾âŒšâŒÆ€cgt⌅⌈⌗r;ä„«Æ€elpÜŸâŒâŒ“inÃ¥ÞŽarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽âare;æ„…inÄ€;t⌸⌹戞ie;æ§doô⌙ʀ;celpÝ—âŒââ›â¡al;抺Āgrâ•â™eróᕣãâarhk;樗rod;樼Ȁcgptâ¯â²â¶â»y;ä‘‘on;䄯f;쀀ð•ša;䎹uest耻¿䂿Āci⎊âŽr;쀀ð’¾nÊ€;EdsvӴ⎛âŽâޡӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;ä‘–l耻ï䃯̀cfmosuâŒâ—âœâ¡â§âµÄ€iyâ‘â•rc;䄵;ä¹r;쀀ð”§ath;䈷pf;쀀ð•›Ç£â¬\0â±r;쀀ð’¿rcy;䑘kcy;䑔Ѐacfghjosâ‹â–â¢â§â­â±âµâ»ppaÄ€;vâ“â”䎺;ä°Ä€eyâ›â dil;ä„·;äºr;쀀ð”¨reen;䄸cy;ä‘…cy;䑜pf;쀀ð•œcr;쀀ð“€à®€ABEHabcdefghjlmnoprstuvâ‘°â’â’†â’⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘ââ¨âž‹âŸ€â â ’Æ€art⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0â’ª\0â’±\0\0\0\0\0⒵Ⓔ\0ⓆⓈâ“\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gÆ€;dlࢎâ“Ⓝ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;fà¢â“£s;椟s;æ¤Ã«â‰’p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙â”rr;椌rk;æ²Ä€ak┢┬cÄ€ek┨┪;ä»;ä›Ä€es┱┳;榋lÄ€du┹┻;æ¦;æ¦È€aeuy╆╋╖╘ron;䄾Ādiâ•â•”il;䄼ìࢰâ┩;ä»È€cqrs╣╦╭╽a;椶uoÄ€;rนá†Ä€du╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tÊ€ahlrt▘▤▷◂◨rrowÄ€;t࢙□aé⓶arpoonÄ€du▯▴own»њp»०eftarrows;懇ightÆ€ahsâ—â—–â—žrrowÄ€;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;æ‹‹Æ€;qs▋ও◺lanôবʀ;cdgsব☊â˜â˜â˜¨c;檨otÄ€;o☔☕橿Ā;r☚☛æª;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;æ‹–qÄ€gq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀ð”©Ä€;Eজ♣;檑š♩♶rÄ€du▲♮Ā;l॥♳;楪lk;æ–„cy;䑙ʀ;achtੈ⚈⚋⚑⚖ròâ—orneòᴈard;楫ri;旺Āio⚟⚤dot;ä…€ustÄ€;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pÄ€;p⛃⛄檉rox»⛄Ā;qâ›Žâ›æª‡Ä€;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯ââ‡âÄ€nr⛮⛱g;柬r;懽rëà£gÆ€lmr⛿âœâœ”eftÄ€ar০✇ightá৲apsto;柼ightá৽parrowÄ€lr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀ð•us;樭imes;樴šâ‹âst;æˆ—Ã¡áŽÆ€;efâ—â˜á €æ—Šnge»â˜arÄ€;lâ¤â¥ä€¨t;榓ʀachmtâ³â¶â¼âž…➇ròࢨorneòᶌarÄ€;d྘➃;業;怎ri;抿̀achiqt➘âžà©€âž¢âž®âž»quo;怹r;쀀ð“mÆ€;egল➪➬;æª;æªÄ€bu┪➳oÄ€;rฟ➹;怚rok;ä…‚è€<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rÄ€duâ ‡â shar;楊har;楦Āenâ —â ¡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āetâ¡—â¡™;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toÈ€;dluျ⡳⡷⡻owîҌefôà¤Ã°á‘ker;斮Āoy⢇⢌mma;権;ä¼ash;怔asuredangle»ᘦr;쀀ð”ªo;æ„§Æ€cdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;æ«°ot肻·ƵusÆ€;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðàªÄ€dp⣩⣮els;抧f;쀀ð•žÄ€ct⣸⣽r;쀀ð“‚posÂ»á–Æ€;lm⤉⤊â¤ä޼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘â©âªƒâª•⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;vâ¥à¯ì€€â‰«âƒ’Æ€elt⥚⥲⥶ftÄ€ar⥡⥧rrow;æ‡ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;æ‡Ä€Dd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;ä…„g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;ä…‰roø඄urÄ€;a⧓⧔普lÄ€;s⧓ସdz⧟\0â§£p肻 ଷmpÄ€;e௹ఀʀaeouy⧴⧾⨃â¨â¨“ǰ⧹\0â§»;橃on;ä…ˆdil;ä…†ngÄ€;dൾ⨊ot;쀀⩭̸p;æ©‚;ä½ash;怓΀;Aadqsxஒ⨩⨭⨻â©â©…â©rr;懗rÄ€hr⨳⨶k;椤Ā;oá²á°ot;쀀â‰Ì¸uiöୣĀei⩊⩎ar;椨í஘istÄ€;s஠டr;쀀ð”«È€Eest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rà®¶âªÂ»à®·Æ€Aap⪊âªâª‘rò⥱rr;憮ar;櫲ƀ;svà¾âªœà¾ŒÄ€;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tÄ€ar⫔⫙rro÷â«ightarroÃ·âªÆ€;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíà±Ä€;rవ⫾iÄ€;eà°šà°¥iäà¶Ä€pt⬌⬑f;쀀ð•Ÿè†€Â¬;in⬙⬚⬶䂬nÈ€;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;æ‹·;æ‹¶iÄ€;vಸ⬼ǡಸâ­â­ƒ;拾;拽ƀaor⭋⭣⭩rÈ€;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋â®â®§rò⦈rrÆ€;cw⮔⮕⮙憛;쀀⤳̸;쀀â†Ì¸ghtarrow»⮕riÄ€;eೋೖ΀chimpqu⮽â¯â¯™â¬„୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀ð“ƒortɭ⬅\0\0⯖ará⭖mÄ€;e൮⯟Ā;q൴൳suÄ€bp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etÄ€;eഛⰋqÄ€;qണⰀcÄ€;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etÄ€;e൘ⰮqÄ€;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleÄ€lrⱒⱜeftÄ€;eచⱚñదightÄ€;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;æ„–p;怇ҀDHadgilrsâ²â²”ⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀â‰âƒ’ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetâ²½â³â³…rr;椂;쀀≤⃒Ā;rⳊâ³ì€€<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAanâ³°â³´â´‚rr;懖rÄ€hr⳺⳽k;椣Ā;oá§á¥ear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0â´­\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0â¶â¶«\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrÄ€;c᪞ⵂ耻ô䃴;ä¾Ê€abios᪠ⵒⵗLjⵚlac;ä…‘v;樸old;榼lig;ä…“Ä€cr⵩⵭ir;榿;쀀ð”¬Í¯âµ¹\0\0âµ¼\0â¶‚n;ä‹›ave耻ò䃲;æ§Ä€bmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āirâ¶â¶ r;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;ä…ga;䉯€cdnⷀⷅÇron;䎿;榶pf;ì€€ð• Æ€aelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈â¸â¸â¸–戨rò᪆Ȁ;efmⷷⷸ⸂⸅æ©rÄ€;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;æ©–lope;æ©—;橛ƀclo⸟⸡⸧òâ¸ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esÄ€;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0â¹½\0⺀âº\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rÈ€;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0â¹»m;櫳;櫽y;ä¿rÊ€cimpt⺋âºâº“ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;ì€€ð”­Æ€imo⺨⺰⺴Ā;v⺭⺮ä†;ä•maô੶ne;明ƀ;tv⺿⻀⻈ä€chfork»´;ä–Ä€auâ»â»ŸnÄ€ck⻕â»kÄ€;h⇴⻛;愎ö⇴sÒ€;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±àºim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀ð•¡nd耻£䂣Ԁ;Eaceinosu່⼿â½â½„⽇â¾â¾‰â¾’⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeÄ€;s⾈ຮ怲ƀEas⽸â¾â½ºÃ°â½µÆ€dfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀ð“…;äˆncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀ð”®pf;쀀ð•¢rime;æ—cr;ì€€ð“†Æ€aeo⿸〉〓tÄ€ei⿾々rnionóڰnt;樖stÄ€;eã€ã€‘䀿ñἙô༔઀ABHabcdefhilmnoprstuxã€ã‘ã•ã™ãƒ ã„Žã„«ã…‡ã…¢ã…²ã†Žãˆ†ãˆ•㈤㈩㉘㉮㉲ãŠãŠ°ãŠ·Æ€artã‡ãŠãŒròႳòÏail;検aròᱥar;楤΀cdenqrtã¨ãµã¸ã¿ã‚ゔヌĀeuã­ã±;쀀∽̱te;ä…•iãᅮmptyv;榳gÈ€;del࿑らるã‚;榒;榥å࿑uo耻»䂻rÖ€;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;fà¿ ã‚´s;椠;椳s;椞ëâ‰Ã°âœ®l;楅im;楴l;憣;æ†Ä€aiパフil;椚oÄ€;nホボ戶aló༞ƀabrョリヮrò៥rk;æ³Ä€akンヽcÄ€ekヹ・;ä½;äÄ€esã„‚ã„„;榌lÄ€duㄊㄌ;榎;æ¦È€aeuyㄗㄜㄧㄩron;䅙Ādiã„¡ã„¥il;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoÄ€;rÈŽÈh;憳ƀacgㅎㅟངlÈ€;ipsླྀㅘㅛႜnåႻarôྩt;æ–­Æ€ilrㅩဣㅮsht;楽;쀀ð”¯Ä€aoㅷㆆrÄ€duㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌä;䱯€gns㆕ㇹㇼhtÌ€ahlrstㆤㆰ㇂㇘㇤㇮rrowÄ€;t࿜ㆭaéトarpoonÄ€duㆻㆿowîㅾp»႒eftÄ€ah㇊ã‡rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahmãˆãˆãˆ“rò࿪aòՑ;æ€oustÄ€;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀ð•£us;樮imes;樵Āapã‰ã‰§rÄ€;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀ð“‡Ä€bu・㊊oÄ€;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iÈ€;efl㊪á™á ¡ãŠ«æ–¹tri;æ§Žluhar;楨;愞ൡ㋕㋛㋟㌬㌸ã±\0ãºãޤ\0\0ã¬ã°\0ã¨ã‘ˆã‘šã’­ã’±ã“Šã“±\0㘖\0\0㘳cute;ä…›quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋ãŒãŒŸãŒ¦ãŒ©;檴ǰ㋺\0㋼;檸on;ä…¡uåᇾĀ;dᇳ㌇il;ä…Ÿrc;ä…Æ€Eas㌖㌘㌛;檶p;檺im;æ‹©olint;樓iíሄ;ä‘otÆ€;be㌴ᵇ㌵担;橦΀Aacmstxã†ãŠã—ã›ãžã£ã­rr;懘rÄ€hrãã’ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mÄ€inã©Ã°nuóñt;朶rÄ€;oã¶â•쀀ð”°È€acoy㎂㎆㎑㎠rp;景Āhy㎋ãŽcy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maÆ€;fv㎱㎲㎲äƒ;ä‚Ѐ;deglnprካã…ã‰ãŽã–ãžã¡ã¦ot;橪Ā;q኱ኰĀ;Eã“ã”æªž;檠Ā;Eã›ãœæª;檟e;扆lus;樤arr;楲aròᄽȀaeitã¸ãˆãã—Ä€lsã½ã„lsetméãªhp;樳parsl;槤Ādlá‘£ã”e;挣Ā;eãœã檪Ā;sã¢ã£æª¬;쀀⪬︀ƀflpã®ã³ã‘‚tcy;䑌Ā;bã¸ã¹ä€¯Ä€;aã¾ã¿æ§„r;挿f;쀀ð•¤aÄ€drã‘ЂesÄ€;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pÄ€;sᆈ㑫;쀀⊓︀pÄ€;sᆴ㑵;쀀⊔︀uÄ€bpã‘¿ã’Æ€;esᆗᆜ㒆etÄ€;eᆗã’Ã±á†Æ€;esᆨᆭ㒖etÄ€;eᆨã’ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀ð“ˆtmîñiìã•aræᆾĀar㓎㓕rÄ€;f㓔ឿ昆Āan㓚㓭ightÄ€ep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎ã”㔑㔕㔞㔣㔬㔱㔶抂;æ«…ot;檽Ā;dᇚ㔚ot;櫃ult;æ«Ä€Ee㔨㔪;æ«‹;把lus;檿arr;楹ƀeiu㔽㕒㕕tÆ€;en㔎㕅㕋qÄ€;qᇚã”eqÄ€;q㔫㔨m;櫇Ābp㕚㕜;æ«•;æ«“cÌ€;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;æ«„sÄ€ouã—ã—’l;柉b;æ«—arr;楻ult;æ«‚Ä€Ee㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tÆ€;enሜ㗼㘂qÄ€;qሢ㖲eqÄ€;qã—§ã—¤m;櫈Ābp㘑㘓;æ«”;æ«–Æ€Aan㘜㘠㘭rr;懙rÄ€hr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑ã™ã™ á‹Žã™³ã™¹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉ã¬\0\0\0㞇ɲ㙖\0\0ã™›get;挖;ä„rë๟ƀaey㙦㙫㙰ron;ä…¥dil;ä…£;ä‘‚lrec;挕r;쀀ð”±È€eiko㚆ãšãšµãš¼Ç²ãš‹\0ãš‘eÄ€4fኄáŠaÆ€;sv㚘㚙㚛䎸ym;ä‘Ä€cn㚢㚲kÄ€as㚨㚮pproøá‹im»ኬsðኞĀas㚺㚮ðá‹rn耻þ䃾Ǭ̟㛆⋧es膀×;bdã›ã›ã›˜äƒ—Ä€;aá¤ã›•r;樱;樰ƀeps㛡㛣㜀áâ©È€;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀ð•¥rk;櫚áã¢rime;怴ƀaipãœãœ’ã¤dåቈ΀adempst㜡ãã€ã‘ã—ãœãŸngleÊ€;dlqr㜰㜱㜶ã€ã‚æ–µown»ᶻeftÄ€;e⠀㜾ñम;扜ightÄ€;e㊪ã‹Ã±ášot;æ—¬inus;樺lus;樹b;æ§ime;樻ezium;æ¢Æ€chtã²ã½ãžÄ€ryã·ã»;쀀ð“‰;䑆cy;ä‘›rok;ä…§Ä€io㞋㞎xôá·headÄ€lrãž—ãž eftarro÷à¡ightarrow»à½à¤€AHabcdfghlmoprstuwãŸãŸ“㟗㟤㟰㟼㠎㠜㠣㠴㡑ã¡ã¡«ã¢©ã£Œã£’㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òá…rǣ㟪\0㟭y;䑞ve;ä…­Ä€iy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;ä…±aòáƒÄ€irã “ã ˜sht;楾;쀀ð”²rave耻ù䃹š㠧㠱rÄ€lr㠬㠮»ॗ»ႃlk;斀Āctã ¹ã¡É¯ã ¿\0\0㡊rnÄ€;e㡅㡆挜r»㡆op;æŒri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;ä…³f;쀀ð•¦Ì€adhlsuᅋ㡸㡽á²ã¢‘㢠ownáᎳarpoonÄ€lr㢈㢌efô㠭ighô㠯iÆ€;hl㢙㢚㢜ä…»áºon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0ã£rnÄ€;e㢼㢽æŒr»㢽op;挎ng;ä…¯ri;æ—¹cr;ì€€ð“ŠÆ€dir㣙ã£ã£¢ot;æ‹°lde;ä…©iÄ€;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽ã¨ã¨ ròϷarÄ€;v㤦㤧櫨;æ«©asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒ã¥ã¥¤ã¦–appáâ•othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïã†Ä€iu㥩㥭gmá㎳Ābp㥲㦄setneqÄ€;q㥽㦀쀀⊊︀;쀀⫋︀setneqÄ€;qã¦ã¦’쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleÄ€lr㦪㦯eft»थight»á‘y;ä²ash»ံƀelrã§„ã§’ã§—Æ€;beⷪ㧋ã§ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀ð”³tré㦮suÄ€bp㧯㧱»ജ»൙pf;쀀ð•§roð໻tré㦴Ācu㨆㨋r;쀀ð“‹Ä€bpã¨ã¨˜nÄ€Ee㦀㨖»㥾nÄ€Ee㦒㨞»ã¦igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eÄ€;qá—ºã©;扙erp;愘r;쀀ð”´pf;쀀ð•¨Ä€;eᑹ㩦atèᑹcr;쀀ð“Œà«£ážŽãª‡\0㪋\0ãªãª›\0\0ãªãª¨ãª«ãª¯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀ð”µÄ€Aa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀ð•©imåឲĀAa㫇㫊ròώròà¨Ä€cq㫒ីr;쀀ð“Ä€pt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cÄ€uyã«¶ã«»te耻ý䃽;ä‘Ä€iy㬂㬆rc;ä…·;ä‘‹n耻¥䂥r;쀀ð”¶cy;ä‘—pf;쀀ð•ªcr;쀀ð“ŽÄ€cm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āayã­ã­’ron;ä…¾;ä·ot;䅼Āetã­ã­¡træᕟa;䎶r;쀀ð”·cy;ä¶grarr;æ‡pf;쀀ð•«cr;쀀ð“Ä€jn㮅㮇;æ€j;怌'.split("").map((function(e){return e.charCodeAt(0)})))},93350:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array("È€aglq\tÉ­\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((function(e){return e.charCodeAt(0)})))},92819:e=>{"use strict";e.exports=window.lodash},65736:e=>{"use strict";e.exports=window.wp.i18n},14715:e=>{"use strict";e.exports=window.yoast.featureFlag},50247:()=>{},47165:()=>{},63083:(e,t,r)=>{"use strict";var n=r(89908),s="undefined"==typeof globalThis?r.g:globalThis;e.exports=function(){for(var e=[],t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getDocumentMode=t.isConforming=void 0;const n=r(96854),s="html",i=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],a=[...i,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],o=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),l=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],u=[...l,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function c(e,t){return t.some((t=>e.startsWith(t)))}t.isConforming=function(e){return e.name===s&&null===e.publicId&&(null===e.systemId||"about:legacy-compat"===e.systemId)},t.getDocumentMode=function(e){if(e.name!==s)return n.DOCUMENT_MODE.QUIRKS;const{systemId:t}=e;if(t&&"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"===t.toLowerCase())return n.DOCUMENT_MODE.QUIRKS;let{publicId:r}=e;if(null!==r){if(r=r.toLowerCase(),o.has(r))return n.DOCUMENT_MODE.QUIRKS;let e=null===t?a:i;if(c(r,e))return n.DOCUMENT_MODE.QUIRKS;if(e=null===t?l:u,c(r,e))return n.DOCUMENT_MODE.LIMITED_QUIRKS}return n.DOCUMENT_MODE.NO_QUIRKS}},13246:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.ERR=void 0,(r=t.ERR||(t.ERR={})).controlCharacterInInputStream="control-character-in-input-stream",r.noncharacterInInputStream="noncharacter-in-input-stream",r.surrogateInInputStream="surrogate-in-input-stream",r.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",r.endTagWithAttributes="end-tag-with-attributes",r.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",r.unexpectedSolidusInTag="unexpected-solidus-in-tag",r.unexpectedNullCharacter="unexpected-null-character",r.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",r.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",r.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",r.missingEndTagName="missing-end-tag-name",r.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",r.unknownNamedCharacterReference="unknown-named-character-reference",r.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",r.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",r.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",r.eofBeforeTagName="eof-before-tag-name",r.eofInTag="eof-in-tag",r.missingAttributeValue="missing-attribute-value",r.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",r.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",r.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",r.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",r.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",r.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",r.missingDoctypePublicIdentifier="missing-doctype-public-identifier",r.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",r.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",r.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",r.cdataInHtmlContent="cdata-in-html-content",r.incorrectlyOpenedComment="incorrectly-opened-comment",r.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",r.eofInDoctype="eof-in-doctype",r.nestedComment="nested-comment",r.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",r.eofInComment="eof-in-comment",r.incorrectlyClosedComment="incorrectly-closed-comment",r.eofInCdata="eof-in-cdata",r.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",r.nullCharacterReference="null-character-reference",r.surrogateCharacterReference="surrogate-character-reference",r.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",r.controlCharacterReference="control-character-reference",r.noncharacterCharacterReference="noncharacter-character-reference",r.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",r.missingDoctypeName="missing-doctype-name",r.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",r.duplicateAttribute="duplicate-attribute",r.nonConformingDoctype="non-conforming-doctype",r.missingDoctype="missing-doctype",r.misplacedDoctype="misplaced-doctype",r.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",r.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",r.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",r.openElementsLeftAfterEof="open-elements-left-after-eof",r.abandonedHeadElementChild="abandoned-head-element-child",r.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",r.nestedNoscriptInHead="nested-noscript-in-head",r.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"},34589:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isIntegrationPoint=t.adjustTokenSVGTagName=t.adjustTokenXMLAttrs=t.adjustTokenSVGAttrs=t.adjustTokenMathMLAttrs=t.causesExit=t.SVG_TAG_NAMES_ADJUSTMENT_MAP=void 0;const n=r(96854),s="text/html",i="application/xhtml+xml",a=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),o=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:n.NS.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:n.NS.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:n.NS.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:n.NS.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:n.NS.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:n.NS.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:n.NS.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:n.NS.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:n.NS.XML}],["xml:space",{prefix:"xml",name:"space",namespace:n.NS.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:n.NS.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:n.NS.XMLNS}]]);t.SVG_TAG_NAMES_ADJUSTMENT_MAP=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e=>[e.toLowerCase(),e])));const l=new Set([n.TAG_ID.B,n.TAG_ID.BIG,n.TAG_ID.BLOCKQUOTE,n.TAG_ID.BODY,n.TAG_ID.BR,n.TAG_ID.CENTER,n.TAG_ID.CODE,n.TAG_ID.DD,n.TAG_ID.DIV,n.TAG_ID.DL,n.TAG_ID.DT,n.TAG_ID.EM,n.TAG_ID.EMBED,n.TAG_ID.H1,n.TAG_ID.H2,n.TAG_ID.H3,n.TAG_ID.H4,n.TAG_ID.H5,n.TAG_ID.H6,n.TAG_ID.HEAD,n.TAG_ID.HR,n.TAG_ID.I,n.TAG_ID.IMG,n.TAG_ID.LI,n.TAG_ID.LISTING,n.TAG_ID.MENU,n.TAG_ID.META,n.TAG_ID.NOBR,n.TAG_ID.OL,n.TAG_ID.P,n.TAG_ID.PRE,n.TAG_ID.RUBY,n.TAG_ID.S,n.TAG_ID.SMALL,n.TAG_ID.SPAN,n.TAG_ID.STRONG,n.TAG_ID.STRIKE,n.TAG_ID.SUB,n.TAG_ID.SUP,n.TAG_ID.TABLE,n.TAG_ID.TT,n.TAG_ID.U,n.TAG_ID.UL,n.TAG_ID.VAR]);t.causesExit=function(e){const t=e.tagID;return t===n.TAG_ID.FONT&&e.attrs.some((({name:e})=>e===n.ATTRS.COLOR||e===n.ATTRS.SIZE||e===n.ATTRS.FACE))||l.has(t)},t.adjustTokenMathMLAttrs=function(e){for(let t=0;t{"use strict";var r,n,s,i,a;Object.defineProperty(t,"__esModule",{value:!0}),t.hasUnescapedText=t.isNumberedHeader=t.SPECIAL_ELEMENTS=t.getTagID=t.TAG_ID=t.TAG_NAMES=t.DOCUMENT_MODE=t.ATTRS=t.NS=void 0,function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"}(r=t.NS||(t.NS={})),(a=t.ATTRS||(t.ATTRS={})).TYPE="type",a.ACTION="action",a.ENCODING="encoding",a.PROMPT="prompt",a.NAME="name",a.COLOR="color",a.FACE="face",a.SIZE="size",(i=t.DOCUMENT_MODE||(t.DOCUMENT_MODE={})).NO_QUIRKS="no-quirks",i.QUIRKS="quirks",i.LIMITED_QUIRKS="limited-quirks",function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"}(n=t.TAG_NAMES||(t.TAG_NAMES={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SECTION=94]="SECTION",e[e.SELECT=95]="SELECT",e[e.SOURCE=96]="SOURCE",e[e.SMALL=97]="SMALL",e[e.SPAN=98]="SPAN",e[e.STRIKE=99]="STRIKE",e[e.STRONG=100]="STRONG",e[e.STYLE=101]="STYLE",e[e.SUB=102]="SUB",e[e.SUMMARY=103]="SUMMARY",e[e.SUP=104]="SUP",e[e.TABLE=105]="TABLE",e[e.TBODY=106]="TBODY",e[e.TEMPLATE=107]="TEMPLATE",e[e.TEXTAREA=108]="TEXTAREA",e[e.TFOOT=109]="TFOOT",e[e.TD=110]="TD",e[e.TH=111]="TH",e[e.THEAD=112]="THEAD",e[e.TITLE=113]="TITLE",e[e.TR=114]="TR",e[e.TRACK=115]="TRACK",e[e.TT=116]="TT",e[e.U=117]="U",e[e.UL=118]="UL",e[e.SVG=119]="SVG",e[e.VAR=120]="VAR",e[e.WBR=121]="WBR",e[e.XMP=122]="XMP"}(s=t.TAG_ID||(t.TAG_ID={}));const o=new Map([[n.A,s.A],[n.ADDRESS,s.ADDRESS],[n.ANNOTATION_XML,s.ANNOTATION_XML],[n.APPLET,s.APPLET],[n.AREA,s.AREA],[n.ARTICLE,s.ARTICLE],[n.ASIDE,s.ASIDE],[n.B,s.B],[n.BASE,s.BASE],[n.BASEFONT,s.BASEFONT],[n.BGSOUND,s.BGSOUND],[n.BIG,s.BIG],[n.BLOCKQUOTE,s.BLOCKQUOTE],[n.BODY,s.BODY],[n.BR,s.BR],[n.BUTTON,s.BUTTON],[n.CAPTION,s.CAPTION],[n.CENTER,s.CENTER],[n.CODE,s.CODE],[n.COL,s.COL],[n.COLGROUP,s.COLGROUP],[n.DD,s.DD],[n.DESC,s.DESC],[n.DETAILS,s.DETAILS],[n.DIALOG,s.DIALOG],[n.DIR,s.DIR],[n.DIV,s.DIV],[n.DL,s.DL],[n.DT,s.DT],[n.EM,s.EM],[n.EMBED,s.EMBED],[n.FIELDSET,s.FIELDSET],[n.FIGCAPTION,s.FIGCAPTION],[n.FIGURE,s.FIGURE],[n.FONT,s.FONT],[n.FOOTER,s.FOOTER],[n.FOREIGN_OBJECT,s.FOREIGN_OBJECT],[n.FORM,s.FORM],[n.FRAME,s.FRAME],[n.FRAMESET,s.FRAMESET],[n.H1,s.H1],[n.H2,s.H2],[n.H3,s.H3],[n.H4,s.H4],[n.H5,s.H5],[n.H6,s.H6],[n.HEAD,s.HEAD],[n.HEADER,s.HEADER],[n.HGROUP,s.HGROUP],[n.HR,s.HR],[n.HTML,s.HTML],[n.I,s.I],[n.IMG,s.IMG],[n.IMAGE,s.IMAGE],[n.INPUT,s.INPUT],[n.IFRAME,s.IFRAME],[n.KEYGEN,s.KEYGEN],[n.LABEL,s.LABEL],[n.LI,s.LI],[n.LINK,s.LINK],[n.LISTING,s.LISTING],[n.MAIN,s.MAIN],[n.MALIGNMARK,s.MALIGNMARK],[n.MARQUEE,s.MARQUEE],[n.MATH,s.MATH],[n.MENU,s.MENU],[n.META,s.META],[n.MGLYPH,s.MGLYPH],[n.MI,s.MI],[n.MO,s.MO],[n.MN,s.MN],[n.MS,s.MS],[n.MTEXT,s.MTEXT],[n.NAV,s.NAV],[n.NOBR,s.NOBR],[n.NOFRAMES,s.NOFRAMES],[n.NOEMBED,s.NOEMBED],[n.NOSCRIPT,s.NOSCRIPT],[n.OBJECT,s.OBJECT],[n.OL,s.OL],[n.OPTGROUP,s.OPTGROUP],[n.OPTION,s.OPTION],[n.P,s.P],[n.PARAM,s.PARAM],[n.PLAINTEXT,s.PLAINTEXT],[n.PRE,s.PRE],[n.RB,s.RB],[n.RP,s.RP],[n.RT,s.RT],[n.RTC,s.RTC],[n.RUBY,s.RUBY],[n.S,s.S],[n.SCRIPT,s.SCRIPT],[n.SECTION,s.SECTION],[n.SELECT,s.SELECT],[n.SOURCE,s.SOURCE],[n.SMALL,s.SMALL],[n.SPAN,s.SPAN],[n.STRIKE,s.STRIKE],[n.STRONG,s.STRONG],[n.STYLE,s.STYLE],[n.SUB,s.SUB],[n.SUMMARY,s.SUMMARY],[n.SUP,s.SUP],[n.TABLE,s.TABLE],[n.TBODY,s.TBODY],[n.TEMPLATE,s.TEMPLATE],[n.TEXTAREA,s.TEXTAREA],[n.TFOOT,s.TFOOT],[n.TD,s.TD],[n.TH,s.TH],[n.THEAD,s.THEAD],[n.TITLE,s.TITLE],[n.TR,s.TR],[n.TRACK,s.TRACK],[n.TT,s.TT],[n.U,s.U],[n.UL,s.UL],[n.SVG,s.SVG],[n.VAR,s.VAR],[n.WBR,s.WBR],[n.XMP,s.XMP]]);t.getTagID=function(e){var t;return null!==(t=o.get(e))&&void 0!==t?t:s.UNKNOWN};const l=s;t.SPECIAL_ELEMENTS={[r.HTML]:new Set([l.ADDRESS,l.APPLET,l.AREA,l.ARTICLE,l.ASIDE,l.BASE,l.BASEFONT,l.BGSOUND,l.BLOCKQUOTE,l.BODY,l.BR,l.BUTTON,l.CAPTION,l.CENTER,l.COL,l.COLGROUP,l.DD,l.DETAILS,l.DIR,l.DIV,l.DL,l.DT,l.EMBED,l.FIELDSET,l.FIGCAPTION,l.FIGURE,l.FOOTER,l.FORM,l.FRAME,l.FRAMESET,l.H1,l.H2,l.H3,l.H4,l.H5,l.H6,l.HEAD,l.HEADER,l.HGROUP,l.HR,l.HTML,l.IFRAME,l.IMG,l.INPUT,l.LI,l.LINK,l.LISTING,l.MAIN,l.MARQUEE,l.MENU,l.META,l.NAV,l.NOEMBED,l.NOFRAMES,l.NOSCRIPT,l.OBJECT,l.OL,l.P,l.PARAM,l.PLAINTEXT,l.PRE,l.SCRIPT,l.SECTION,l.SELECT,l.SOURCE,l.STYLE,l.SUMMARY,l.TABLE,l.TBODY,l.TD,l.TEMPLATE,l.TEXTAREA,l.TFOOT,l.TH,l.THEAD,l.TITLE,l.TR,l.TRACK,l.UL,l.WBR,l.XMP]),[r.MATHML]:new Set([l.MI,l.MO,l.MN,l.MS,l.MTEXT,l.ANNOTATION_XML]),[r.SVG]:new Set([l.TITLE,l.FOREIGN_OBJECT,l.DESC]),[r.XLINK]:new Set,[r.XML]:new Set,[r.XMLNS]:new Set},t.isNumberedHeader=function(e){return e===l.H1||e===l.H2||e===l.H3||e===l.H4||e===l.H5||e===l.H6};const u=new Set([n.STYLE,n.SCRIPT,n.XMP,n.IFRAME,n.NOEMBED,n.NOFRAMES,n.PLAINTEXT]);t.hasUnescapedText=function(e,t){return u.has(e)||t&&e===n.NOSCRIPT}},14708:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.getTokenAttr=t.TokenType=void 0,(r=t.TokenType||(t.TokenType={}))[r.CHARACTER=0]="CHARACTER",r[r.NULL_CHARACTER=1]="NULL_CHARACTER",r[r.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",r[r.START_TAG=3]="START_TAG",r[r.END_TAG=4]="END_TAG",r[r.COMMENT=5]="COMMENT",r[r.DOCTYPE=6]="DOCTYPE",r[r.EOF=7]="EOF",r[r.HIBERNATION=8]="HIBERNATION",t.getTokenAttr=function(e,t){for(let r=e.attrs.length-1;r>=0;r--)if(e.attrs[r].name===t)return e.attrs[r].value;return null}},6746:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isUndefinedCodePoint=t.isControlCodePoint=t.getSurrogatePairCodePoint=t.isSurrogatePair=t.isSurrogate=t.SEQUENCES=t.CODE_POINTS=t.REPLACEMENT_CHARACTER=void 0;const r=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]);var n;t.REPLACEMENT_CHARACTER="�",(n=t.CODE_POINTS||(t.CODE_POINTS={}))[n.EOF=-1]="EOF",n[n.NULL=0]="NULL",n[n.TABULATION=9]="TABULATION",n[n.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",n[n.LINE_FEED=10]="LINE_FEED",n[n.FORM_FEED=12]="FORM_FEED",n[n.SPACE=32]="SPACE",n[n.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",n[n.QUOTATION_MARK=34]="QUOTATION_MARK",n[n.NUMBER_SIGN=35]="NUMBER_SIGN",n[n.AMPERSAND=38]="AMPERSAND",n[n.APOSTROPHE=39]="APOSTROPHE",n[n.HYPHEN_MINUS=45]="HYPHEN_MINUS",n[n.SOLIDUS=47]="SOLIDUS",n[n.DIGIT_0=48]="DIGIT_0",n[n.DIGIT_9=57]="DIGIT_9",n[n.SEMICOLON=59]="SEMICOLON",n[n.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",n[n.EQUALS_SIGN=61]="EQUALS_SIGN",n[n.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",n[n.QUESTION_MARK=63]="QUESTION_MARK",n[n.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",n[n.LATIN_CAPITAL_F=70]="LATIN_CAPITAL_F",n[n.LATIN_CAPITAL_X=88]="LATIN_CAPITAL_X",n[n.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",n[n.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",n[n.GRAVE_ACCENT=96]="GRAVE_ACCENT",n[n.LATIN_SMALL_A=97]="LATIN_SMALL_A",n[n.LATIN_SMALL_F=102]="LATIN_SMALL_F",n[n.LATIN_SMALL_X=120]="LATIN_SMALL_X",n[n.LATIN_SMALL_Z=122]="LATIN_SMALL_Z",n[n.REPLACEMENT_CHARACTER=65533]="REPLACEMENT_CHARACTER",t.SEQUENCES={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"},t.isSurrogate=function(e){return e>=55296&&e<=57343},t.isSurrogatePair=function(e){return e>=56320&&e<=57343},t.getSurrogatePairCodePoint=function(e,t){return 1024*(e-55296)+9216+t},t.isControlCodePoint=function(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159},t.isUndefinedCodePoint=function(e){return e>=64976&&e<=65007||r.has(e)}},37015:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseFragment=t.parse=t.TokenizerMode=t.Tokenizer=t.Token=t.html=t.foreignContent=t.ErrorCodes=t.serializeOuter=t.serialize=t.Parser=t.defaultTreeAdapter=void 0;const n=r(62314);var s=r(53384);Object.defineProperty(t,"defaultTreeAdapter",{enumerable:!0,get:function(){return s.defaultTreeAdapter}});var i=r(62314);Object.defineProperty(t,"Parser",{enumerable:!0,get:function(){return i.Parser}});var a=r(37742);Object.defineProperty(t,"serialize",{enumerable:!0,get:function(){return a.serialize}}),Object.defineProperty(t,"serializeOuter",{enumerable:!0,get:function(){return a.serializeOuter}});var o=r(13246);Object.defineProperty(t,"ErrorCodes",{enumerable:!0,get:function(){return o.ERR}}),t.foreignContent=r(34589),t.html=r(96854),t.Token=r(14708);var l=r(73783);Object.defineProperty(t,"Tokenizer",{enumerable:!0,get:function(){return l.Tokenizer}}),Object.defineProperty(t,"TokenizerMode",{enumerable:!0,get:function(){return l.TokenizerMode}}),t.parse=function(e,t){return n.Parser.parse(e,t)},t.parseFragment=function(e,t,r){"string"==typeof e&&(r=t,t=e,e=null);const s=n.Parser.getFragmentParser(e,r);return s.tokenizer.write(t,!0),s.getFragment()}},83129:(e,t)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.FormattingElementList=t.EntryType=void 0,function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"}(r=t.EntryType||(t.EntryType={}));const n={type:r.Marker};t.FormattingElementList=class{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,t){const n=[],s=t.length,i=this.treeAdapter.getTagName(e),a=this.treeAdapter.getNamespaceURI(e);for(let e=0;e[e.name,e.value])));let s=0;for(let e=0;en.get(e.name)===e.value))&&(s+=1,s>=3&&this.entries.splice(t.idx,1))}}insertMarker(){this.entries.unshift(n)}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({type:r.Element,element:e,token:t})}insertElementAfterBookmark(e,t){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:r.Element,element:e,token:t})}removeEntry(e){const t=this.entries.indexOf(e);t>=0&&this.entries.splice(t,1)}clearToLastMarker(){const e=this.entries.indexOf(n);e>=0?this.entries.splice(0,e+1):this.entries.length=0}getElementEntryInScopeWithTagName(e){const t=this.entries.find((t=>t.type===r.Marker||this.treeAdapter.getTagName(t.element)===e));return t&&t.type===r.Element?t:null}getElementEntry(e){return this.entries.find((t=>t.type===r.Element&&t.element===e))}}},62314:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=void 0;const n=r(73783),s=r(21982),i=r(83129),a=r(53384),o=r(58993),l=r(34589),u=r(13246),c=r(6746),d=r(96854),h=r(14708),p="hidden",f=8,g=3;var m;!function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"}(m||(m={}));const _={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},y=new Set([d.TAG_ID.TABLE,d.TAG_ID.TBODY,d.TAG_ID.TFOOT,d.TAG_ID.THEAD,d.TAG_ID.TR]),E={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:a.defaultTreeAdapter,onParseError:null};function T(e,t){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(t.tagID)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):W(e,t),r}function A(e,t){let r=null,n=e.openElements.stackTop;for(;n>=0;n--){const s=e.openElements.items[n];if(s===t.element)break;e._isSpecialElement(s,e.openElements.tagIDs[n])&&(r=s)}return r||(e.openElements.shortenToLength(n<0?0:n),e.activeFormattingElements.removeEntry(t)),r}function v(e,t,r){let n=t,s=e.openElements.getCommonAncestor(t);for(let i=0,a=s;a!==r;i++,a=s){s=e.openElements.getCommonAncestor(a);const r=e.activeFormattingElements.getElementEntry(a),o=r&&i>=g;!r||o?(o&&e.activeFormattingElements.removeEntry(r),e.openElements.remove(a)):(a=b(e,r),n===t&&(e.activeFormattingElements.bookmark=r),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(a,n),n=a)}return n}function b(e,t){const r=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,r,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function S(e,t,r){const n=e.treeAdapter.getTagName(t),s=(0,d.getTagID)(n);if(e._isElementCausesFosterParenting(s))e._fosterParentElement(r);else{const n=e.treeAdapter.getNamespaceURI(t);s===d.TAG_ID.TEMPLATE&&n===d.NS.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,r)}}function I(e,t,r){const n=e.treeAdapter.getNamespaceURI(r.element),{token:s}=r,i=e.treeAdapter.createElement(s.tagName,n,s.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,s),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(t,i,s.tagID)}function O(e,t){for(let r=0;r=r;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const r=e.openElements.items[0],n=e.treeAdapter.getNodeSourceCodeLocation(r);if(n&&!n.endTag&&(e._setEndLocation(r,t),e.openElements.stackTop>=1)){const r=e.openElements.items[1],n=e.treeAdapter.getNodeSourceCodeLocation(r);n&&!n.endTag&&e._setEndLocation(r,t)}}}}function D(e,t){e._err(t,u.ERR.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,d.DOCUMENT_MODE.QUIRKS),e.insertionMode=m.BEFORE_HTML,e._processToken(t)}function w(e,t){e._insertFakeRootElement(),e.insertionMode=m.BEFORE_HEAD,e._processToken(t)}function P(e,t){e._insertFakeElement(d.TAG_NAMES.HEAD,d.TAG_ID.HEAD),e.headElement=e.openElements.current,e.insertionMode=m.IN_HEAD,e._processToken(t)}function R(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.BASE:case d.TAG_ID.BASEFONT:case d.TAG_ID.BGSOUND:case d.TAG_ID.LINK:case d.TAG_ID.META:e._appendElement(t,d.NS.HTML),t.ackSelfClosing=!0;break;case d.TAG_ID.TITLE:e._switchToTextParsing(t,n.TokenizerMode.RCDATA);break;case d.TAG_ID.NOSCRIPT:e.options.scriptingEnabled?e._switchToTextParsing(t,n.TokenizerMode.RAWTEXT):(e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_HEAD_NO_SCRIPT);break;case d.TAG_ID.NOFRAMES:case d.TAG_ID.STYLE:e._switchToTextParsing(t,n.TokenizerMode.RAWTEXT);break;case d.TAG_ID.SCRIPT:e._switchToTextParsing(t,n.TokenizerMode.SCRIPT_DATA);break;case d.TAG_ID.TEMPLATE:e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=m.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(m.IN_TEMPLATE);break;case d.TAG_ID.HEAD:e._err(t,u.ERR.misplacedStartTagForHeadElement);break;default:L(e,t)}}function k(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==d.TAG_ID.TEMPLATE&&e._err(t,u.ERR.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(d.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,u.ERR.endTagWithoutMatchingOpenElement)}function L(e,t){e.openElements.pop(),e.insertionMode=m.AFTER_HEAD,e._processToken(t)}function M(e,t){const r=t.type===h.TokenType.EOF?u.ERR.openElementsLeftAfterEof:u.ERR.disallowedContentInNoscriptInHead;e._err(t,r),e.openElements.pop(),e.insertionMode=m.IN_HEAD,e._processToken(t)}function x(e,t){e._insertFakeElement(d.TAG_NAMES.BODY,d.TAG_ID.BODY),e.insertionMode=m.IN_BODY,F(e,t)}function F(e,t){switch(t.type){case h.TokenType.CHARACTER:B(e,t);break;case h.TokenType.WHITESPACE_CHARACTER:U(e,t);break;case h.TokenType.COMMENT:C(e,t);break;case h.TokenType.START_TAG:q(e,t);break;case h.TokenType.END_TAG:V(e,t);break;case h.TokenType.EOF:Y(e,t)}}function U(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function B(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function G(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,d.NS.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function H(e){const t=(0,h.getTokenAttr)(e,d.ATTRS.TYPE);return null!=t&&t.toLowerCase()===p}function j(e,t){e._switchToTextParsing(t,n.TokenizerMode.RAWTEXT)}function $(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,d.NS.HTML)}function q(e,t){switch(t.tagID){case d.TAG_ID.I:case d.TAG_ID.S:case d.TAG_ID.B:case d.TAG_ID.U:case d.TAG_ID.EM:case d.TAG_ID.TT:case d.TAG_ID.BIG:case d.TAG_ID.CODE:case d.TAG_ID.FONT:case d.TAG_ID.SMALL:case d.TAG_ID.STRIKE:case d.TAG_ID.STRONG:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,d.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case d.TAG_ID.A:!function(e,t){const r=e.activeFormattingElements.getElementEntryInScopeWithTagName(d.TAG_NAMES.A);r&&(O(e,t),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(t,d.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case d.TAG_ID.H1:case d.TAG_ID.H2:case d.TAG_ID.H3:case d.TAG_ID.H4:case d.TAG_ID.H5:case d.TAG_ID.H6:!function(e,t){e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),(0,d.isNumberedHeader)(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,d.NS.HTML)}(e,t);break;case d.TAG_ID.P:case d.TAG_ID.DL:case d.TAG_ID.OL:case d.TAG_ID.UL:case d.TAG_ID.DIV:case d.TAG_ID.DIR:case d.TAG_ID.NAV:case d.TAG_ID.MAIN:case d.TAG_ID.MENU:case d.TAG_ID.ASIDE:case d.TAG_ID.CENTER:case d.TAG_ID.FIGURE:case d.TAG_ID.FOOTER:case d.TAG_ID.HEADER:case d.TAG_ID.HGROUP:case d.TAG_ID.DIALOG:case d.TAG_ID.DETAILS:case d.TAG_ID.ADDRESS:case d.TAG_ID.ARTICLE:case d.TAG_ID.SECTION:case d.TAG_ID.SUMMARY:case d.TAG_ID.FIELDSET:case d.TAG_ID.BLOCKQUOTE:case d.TAG_ID.FIGCAPTION:!function(e,t){e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._insertElement(t,d.NS.HTML)}(e,t);break;case d.TAG_ID.LI:case d.TAG_ID.DD:case d.TAG_ID.DT:!function(e,t){e.framesetOk=!1;const r=t.tagID;for(let t=e.openElements.stackTop;t>=0;t--){const n=e.openElements.tagIDs[t];if(r===d.TAG_ID.LI&&n===d.TAG_ID.LI||(r===d.TAG_ID.DD||r===d.TAG_ID.DT)&&(n===d.TAG_ID.DD||n===d.TAG_ID.DT)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n);break}if(n!==d.TAG_ID.ADDRESS&&n!==d.TAG_ID.DIV&&n!==d.TAG_ID.P&&e._isSpecialElement(e.openElements.items[t],n))break}e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._insertElement(t,d.NS.HTML)}(e,t);break;case d.TAG_ID.BR:case d.TAG_ID.IMG:case d.TAG_ID.WBR:case d.TAG_ID.AREA:case d.TAG_ID.EMBED:case d.TAG_ID.KEYGEN:G(e,t);break;case d.TAG_ID.HR:!function(e,t){e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._appendElement(t,d.NS.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t);break;case d.TAG_ID.RB:case d.TAG_ID.RTC:!function(e,t){e.openElements.hasInScope(d.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,d.NS.HTML)}(e,t);break;case d.TAG_ID.RT:case d.TAG_ID.RP:!function(e,t){e.openElements.hasInScope(d.TAG_ID.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(d.TAG_ID.RTC),e._insertElement(t,d.NS.HTML)}(e,t);break;case d.TAG_ID.PRE:case d.TAG_ID.LISTING:!function(e,t){e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._insertElement(t,d.NS.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}(e,t);break;case d.TAG_ID.XMP:!function(e,t){e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,n.TokenizerMode.RAWTEXT)}(e,t);break;case d.TAG_ID.SVG:!function(e,t){e._reconstructActiveFormattingElements(),l.adjustTokenSVGAttrs(t),l.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,d.NS.SVG):e._insertElement(t,d.NS.SVG),t.ackSelfClosing=!0}(e,t);break;case d.TAG_ID.HTML:!function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t);break;case d.TAG_ID.BASE:case d.TAG_ID.LINK:case d.TAG_ID.META:case d.TAG_ID.STYLE:case d.TAG_ID.TITLE:case d.TAG_ID.SCRIPT:case d.TAG_ID.BGSOUND:case d.TAG_ID.BASEFONT:case d.TAG_ID.TEMPLATE:R(e,t);break;case d.TAG_ID.BODY:!function(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,t.attrs))}(e,t);break;case d.TAG_ID.FORM:!function(e,t){const r=e.openElements.tmplCount>0;e.formElement&&!r||(e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._insertElement(t,d.NS.HTML),r||(e.formElement=e.openElements.current))}(e,t);break;case d.TAG_ID.NOBR:!function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(d.TAG_ID.NOBR)&&(O(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,d.NS.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case d.TAG_ID.MATH:!function(e,t){e._reconstructActiveFormattingElements(),l.adjustTokenMathMLAttrs(t),l.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,d.NS.MATHML):e._insertElement(t,d.NS.MATHML),t.ackSelfClosing=!0}(e,t);break;case d.TAG_ID.TABLE:!function(e,t){e.treeAdapter.getDocumentMode(e.document)!==d.DOCUMENT_MODE.QUIRKS&&e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._insertElement(t,d.NS.HTML),e.framesetOk=!1,e.insertionMode=m.IN_TABLE}(e,t);break;case d.TAG_ID.INPUT:!function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,d.NS.HTML),H(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t);break;case d.TAG_ID.PARAM:case d.TAG_ID.TRACK:case d.TAG_ID.SOURCE:!function(e,t){e._appendElement(t,d.NS.HTML),t.ackSelfClosing=!0}(e,t);break;case d.TAG_ID.IMAGE:!function(e,t){t.tagName=d.TAG_NAMES.IMG,t.tagID=d.TAG_ID.IMG,G(e,t)}(e,t);break;case d.TAG_ID.BUTTON:!function(e,t){e.openElements.hasInScope(d.TAG_ID.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(d.TAG_ID.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,d.NS.HTML),e.framesetOk=!1}(e,t);break;case d.TAG_ID.APPLET:case d.TAG_ID.OBJECT:case d.TAG_ID.MARQUEE:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,d.NS.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}(e,t);break;case d.TAG_ID.IFRAME:!function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,n.TokenizerMode.RAWTEXT)}(e,t);break;case d.TAG_ID.SELECT:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,d.NS.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===m.IN_TABLE||e.insertionMode===m.IN_CAPTION||e.insertionMode===m.IN_TABLE_BODY||e.insertionMode===m.IN_ROW||e.insertionMode===m.IN_CELL?m.IN_SELECT_IN_TABLE:m.IN_SELECT}(e,t);break;case d.TAG_ID.OPTION:case d.TAG_ID.OPTGROUP:!function(e,t){e.openElements.currentTagId===d.TAG_ID.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,d.NS.HTML)}(e,t);break;case d.TAG_ID.NOEMBED:j(e,t);break;case d.TAG_ID.FRAMESET:!function(e,t){const r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_FRAMESET)}(e,t);break;case d.TAG_ID.TEXTAREA:!function(e,t){e._insertElement(t,d.NS.HTML),e.skipNextNewLine=!0,e.tokenizer.state=n.TokenizerMode.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=m.TEXT}(e,t);break;case d.TAG_ID.NOSCRIPT:e.options.scriptingEnabled?j(e,t):$(e,t);break;case d.TAG_ID.PLAINTEXT:!function(e,t){e.openElements.hasInButtonScope(d.TAG_ID.P)&&e._closePElement(),e._insertElement(t,d.NS.HTML),e.tokenizer.state=n.TokenizerMode.PLAINTEXT}(e,t);break;case d.TAG_ID.COL:case d.TAG_ID.TH:case d.TAG_ID.TD:case d.TAG_ID.TR:case d.TAG_ID.HEAD:case d.TAG_ID.FRAME:case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:case d.TAG_ID.CAPTION:case d.TAG_ID.COLGROUP:break;default:$(e,t)}}function W(e,t){const r=t.tagName,n=t.tagID;for(let t=e.openElements.stackTop;t>0;t--){const s=e.openElements.items[t],i=e.openElements.tagIDs[t];if(n===i&&(n!==d.TAG_ID.UNKNOWN||e.treeAdapter.getTagName(s)===r)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=t&&e.openElements.shortenToLength(t);break}if(e._isSpecialElement(s,i))break}}function V(e,t){switch(t.tagID){case d.TAG_ID.A:case d.TAG_ID.B:case d.TAG_ID.I:case d.TAG_ID.S:case d.TAG_ID.U:case d.TAG_ID.EM:case d.TAG_ID.TT:case d.TAG_ID.BIG:case d.TAG_ID.CODE:case d.TAG_ID.FONT:case d.TAG_ID.NOBR:case d.TAG_ID.SMALL:case d.TAG_ID.STRIKE:case d.TAG_ID.STRONG:O(e,t);break;case d.TAG_ID.P:!function(e){e.openElements.hasInButtonScope(d.TAG_ID.P)||e._insertFakeElement(d.TAG_NAMES.P,d.TAG_ID.P),e._closePElement()}(e);break;case d.TAG_ID.DL:case d.TAG_ID.UL:case d.TAG_ID.OL:case d.TAG_ID.DIR:case d.TAG_ID.DIV:case d.TAG_ID.NAV:case d.TAG_ID.PRE:case d.TAG_ID.MAIN:case d.TAG_ID.MENU:case d.TAG_ID.ASIDE:case d.TAG_ID.BUTTON:case d.TAG_ID.CENTER:case d.TAG_ID.FIGURE:case d.TAG_ID.FOOTER:case d.TAG_ID.HEADER:case d.TAG_ID.HGROUP:case d.TAG_ID.DIALOG:case d.TAG_ID.ADDRESS:case d.TAG_ID.ARTICLE:case d.TAG_ID.DETAILS:case d.TAG_ID.SECTION:case d.TAG_ID.SUMMARY:case d.TAG_ID.LISTING:case d.TAG_ID.FIELDSET:case d.TAG_ID.BLOCKQUOTE:case d.TAG_ID.FIGCAPTION:!function(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}(e,t);break;case d.TAG_ID.LI:!function(e){e.openElements.hasInListItemScope(d.TAG_ID.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(d.TAG_ID.LI),e.openElements.popUntilTagNamePopped(d.TAG_ID.LI))}(e);break;case d.TAG_ID.DD:case d.TAG_ID.DT:!function(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}(e,t);break;case d.TAG_ID.H1:case d.TAG_ID.H2:case d.TAG_ID.H3:case d.TAG_ID.H4:case d.TAG_ID.H5:case d.TAG_ID.H6:!function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e);break;case d.TAG_ID.BR:!function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(d.TAG_NAMES.BR,d.TAG_ID.BR),e.openElements.pop(),e.framesetOk=!1}(e);break;case d.TAG_ID.BODY:!function(e,t){if(e.openElements.hasInScope(d.TAG_ID.BODY)&&(e.insertionMode=m.AFTER_BODY,e.options.sourceCodeLocationInfo)){const r=e.openElements.tryPeekProperlyNestedBodyElement();r&&e._setEndLocation(r,t)}}(e,t);break;case d.TAG_ID.HTML:!function(e,t){e.openElements.hasInScope(d.TAG_ID.BODY)&&(e.insertionMode=m.AFTER_BODY,de(e,t))}(e,t);break;case d.TAG_ID.FORM:!function(e){const t=e.openElements.tmplCount>0,{formElement:r}=e;t||(e.formElement=null),(r||t)&&e.openElements.hasInScope(d.TAG_ID.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(d.TAG_ID.FORM):r&&e.openElements.remove(r))}(e);break;case d.TAG_ID.APPLET:case d.TAG_ID.OBJECT:case d.TAG_ID.MARQUEE:!function(e,t){const r=t.tagID;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}(e,t);break;case d.TAG_ID.TEMPLATE:k(e,t);break;default:W(e,t)}}function Y(e,t){e.tmplInsertionModeStack.length>0?ce(e,t):N(e,t)}function z(e,t){if(y.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=m.IN_TABLE_TEXT,t.type){case h.TokenType.CHARACTER:Z(e,t);break;case h.TokenType.WHITESPACE_CHARACTER:J(e,t)}else X(e,t)}function K(e,t){switch(t.tagID){case d.TAG_ID.TD:case d.TAG_ID.TH:case d.TAG_ID.TR:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(d.TAG_NAMES.TBODY,d.TAG_ID.TBODY),e.insertionMode=m.IN_TABLE_BODY,se(e,t)}(e,t);break;case d.TAG_ID.STYLE:case d.TAG_ID.SCRIPT:case d.TAG_ID.TEMPLATE:R(e,t);break;case d.TAG_ID.COL:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(d.TAG_NAMES.COLGROUP,d.TAG_ID.COLGROUP),e.insertionMode=m.IN_COLUMN_GROUP,re(e,t)}(e,t);break;case d.TAG_ID.FORM:!function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,d.NS.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t);break;case d.TAG_ID.TABLE:!function(e,t){e.openElements.hasInTableScope(d.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(d.TAG_ID.TABLE),e._resetInsertionMode(),e._processStartTag(t))}(e,t);break;case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_TABLE_BODY}(e,t);break;case d.TAG_ID.INPUT:!function(e,t){H(t)?e._appendElement(t,d.NS.HTML):X(e,t),t.ackSelfClosing=!0}(e,t);break;case d.TAG_ID.CAPTION:!function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_CAPTION}(e,t);break;case d.TAG_ID.COLGROUP:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_COLUMN_GROUP}(e,t);break;default:X(e,t)}}function Q(e,t){switch(t.tagID){case d.TAG_ID.TABLE:e.openElements.hasInTableScope(d.TAG_ID.TABLE)&&(e.openElements.popUntilTagNamePopped(d.TAG_ID.TABLE),e._resetInsertionMode());break;case d.TAG_ID.TEMPLATE:k(e,t);break;case d.TAG_ID.BODY:case d.TAG_ID.CAPTION:case d.TAG_ID.COL:case d.TAG_ID.COLGROUP:case d.TAG_ID.HTML:case d.TAG_ID.TBODY:case d.TAG_ID.TD:case d.TAG_ID.TFOOT:case d.TAG_ID.TH:case d.TAG_ID.THEAD:case d.TAG_ID.TR:break;default:X(e,t)}}function X(e,t){const r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,F(e,t),e.fosterParentingEnabled=r}function J(e,t){e.pendingCharacterTokens.push(t)}function Z(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function ee(e,t){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r0&&this._setContextModes(e,t)}onItemPop(e,t){var r,n;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),null===(n=(r=this.treeAdapter).onItemPop)||void 0===n||n.call(r,e,this.openElements.current),t){let e,t;0===this.openElements.stackTop&&this.fragmentContext?(e=this.fragmentContext,t=this.fragmentContextID):({current:e,currentTagId:t}=this.openElements),this._setContextModes(e,t)}}_setContextModes(e,t){const r=e===this.document||this.treeAdapter.getNamespaceURI(e)===d.NS.HTML;this.currentNotInHTML=!r,this.tokenizer.inForeignNode=!r&&!this._isIntegrationPoint(t,e)}_switchToTextParsing(e,t){this._insertElement(e,d.NS.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=m.TEXT}switchToPlaintextParsing(){this.insertionMode=m.TEXT,this.originalInsertionMode=m.IN_BODY,this.tokenizer.state=n.TokenizerMode.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===d.TAG_NAMES.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(this.fragmentContext&&this.treeAdapter.getNamespaceURI(this.fragmentContext)===d.NS.HTML)switch(this.fragmentContextID){case d.TAG_ID.TITLE:case d.TAG_ID.TEXTAREA:this.tokenizer.state=n.TokenizerMode.RCDATA;break;case d.TAG_ID.STYLE:case d.TAG_ID.XMP:case d.TAG_ID.IFRAME:case d.TAG_ID.NOEMBED:case d.TAG_ID.NOFRAMES:case d.TAG_ID.NOSCRIPT:this.tokenizer.state=n.TokenizerMode.RAWTEXT;break;case d.TAG_ID.SCRIPT:this.tokenizer.state=n.TokenizerMode.SCRIPT_DATA;break;case d.TAG_ID.PLAINTEXT:this.tokenizer.state=n.TokenizerMode.PLAINTEXT}}_setDocumentType(e){const t=e.name||"",r=e.publicId||"",n=e.systemId||"";if(this.treeAdapter.setDocumentType(this.document,t,r,n),e.location){const t=this.treeAdapter.getChildNodes(this.document).find((e=>this.treeAdapter.isDocumentTypeNode(e)));t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}}_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo){const r=t&&Object.assign(Object.assign({},t),{startTag:t});this.treeAdapter.setNodeSourceCodeLocation(e,r)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const r=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(r,e.location)}_insertElement(e,t){const r=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(r,e.location),this.openElements.push(r,e.tagID)}_insertFakeElement(e,t){const r=this.treeAdapter.createElement(e,d.NS.HTML,[]);this._attachElementToTree(r,null),this.openElements.push(r,t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,d.NS.HTML,e.attrs),r=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,r),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(r,null)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(d.TAG_NAMES.HTML,d.NS.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,d.TAG_ID.HTML)}_appendCommentNode(e,t){const r=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,r),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(r,e.location)}_insertCharacters(e){let t,r;if(this._shouldFosterParentOnInsertion()?(({parent:t,beforeElement:r}=this._findFosterParentingLocation()),r?this.treeAdapter.insertTextBefore(t,e.chars,r):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(t,e.chars)),!e.location)return;const n=this.treeAdapter.getChildNodes(t),s=r?n.lastIndexOf(r):n.length,i=n[s-1];if(this.treeAdapter.getNodeSourceCodeLocation(i)){const{endLine:t,endCol:r,endOffset:n}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(i,{endLine:t,endCol:r,endOffset:n})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(i,e.location)}_adoptNodes(e,t){for(let r=this.treeAdapter.getFirstChild(e);r;r=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(r),this.treeAdapter.appendChild(t,r)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const r=t.location,n=this.treeAdapter.getTagName(e),s=t.type===h.TokenType.END_TAG&&n===t.tagName?{endTag:Object.assign({},r),endLine:r.endLine,endCol:r.endCol,endOffset:r.endOffset}:{endLine:r.startLine,endCol:r.startCol,endOffset:r.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,s)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let t,r;return 0===this.openElements.stackTop&&this.fragmentContext?(t=this.fragmentContext,r=this.fragmentContextID):({current:t,currentTagId:r}=this.openElements),(e.tagID!==d.TAG_ID.SVG||this.treeAdapter.getTagName(t)!==d.TAG_NAMES.ANNOTATION_XML||this.treeAdapter.getNamespaceURI(t)!==d.NS.MATHML)&&(this.tokenizer.inForeignNode||(e.tagID===d.TAG_ID.MGLYPH||e.tagID===d.TAG_ID.MALIGNMARK)&&!this._isIntegrationPoint(r,t,d.NS.HTML))}_processToken(e){switch(e.type){case h.TokenType.CHARACTER:this.onCharacter(e);break;case h.TokenType.NULL_CHARACTER:this.onNullCharacter(e);break;case h.TokenType.COMMENT:this.onComment(e);break;case h.TokenType.DOCTYPE:this.onDoctype(e);break;case h.TokenType.START_TAG:this._processStartTag(e);break;case h.TokenType.END_TAG:this.onEndTag(e);break;case h.TokenType.EOF:this.onEof(e);break;case h.TokenType.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e)}}_isIntegrationPoint(e,t,r){const n=this.treeAdapter.getNamespaceURI(t),s=this.treeAdapter.getAttrList(t);return l.isIntegrationPoint(e,n,s,r)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.entries.length;if(e){const t=this.activeFormattingElements.entries.findIndex((e=>e.type===i.EntryType.Marker||this.openElements.contains(e.element)));for(let r=t<0?e-1:t-1;r>=0;r--){const e=this.activeFormattingElements.entries[r];this._insertElement(e.token,this.treeAdapter.getNamespaceURI(e.element)),e.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=m.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(d.TAG_ID.P),this.openElements.popUntilTagNamePopped(d.TAG_ID.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(0===e&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case d.TAG_ID.TR:return void(this.insertionMode=m.IN_ROW);case d.TAG_ID.TBODY:case d.TAG_ID.THEAD:case d.TAG_ID.TFOOT:return void(this.insertionMode=m.IN_TABLE_BODY);case d.TAG_ID.CAPTION:return void(this.insertionMode=m.IN_CAPTION);case d.TAG_ID.COLGROUP:return void(this.insertionMode=m.IN_COLUMN_GROUP);case d.TAG_ID.TABLE:return void(this.insertionMode=m.IN_TABLE);case d.TAG_ID.BODY:return void(this.insertionMode=m.IN_BODY);case d.TAG_ID.FRAMESET:return void(this.insertionMode=m.IN_FRAMESET);case d.TAG_ID.SELECT:return void this._resetInsertionModeForSelect(e);case d.TAG_ID.TEMPLATE:return void(this.insertionMode=this.tmplInsertionModeStack[0]);case d.TAG_ID.HTML:return void(this.insertionMode=this.headElement?m.AFTER_HEAD:m.BEFORE_HEAD);case d.TAG_ID.TD:case d.TAG_ID.TH:if(e>0)return void(this.insertionMode=m.IN_CELL);break;case d.TAG_ID.HEAD:if(e>0)return void(this.insertionMode=m.IN_HEAD)}this.insertionMode=m.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.tagIDs[t];if(e===d.TAG_ID.TEMPLATE)break;if(e===d.TAG_ID.TABLE)return void(this.insertionMode=m.IN_SELECT_IN_TABLE)}this.insertionMode=m.IN_SELECT}_isElementCausesFosterParenting(e){return y.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){const t=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case d.TAG_ID.TEMPLATE:if(this.treeAdapter.getNamespaceURI(t)===d.NS.HTML)return{parent:this.treeAdapter.getTemplateContent(t),beforeElement:null};break;case d.TAG_ID.TABLE:{const r=this.treeAdapter.getParentNode(t);return r?{parent:r,beforeElement:t}:{parent:this.openElements.items[e-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_isSpecialElement(e,t){const r=this.treeAdapter.getNamespaceURI(e);return d.SPECIAL_ELEMENTS[r].has(t)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e);else switch(this.insertionMode){case m.INITIAL:D(this,e);break;case m.BEFORE_HTML:w(this,e);break;case m.BEFORE_HEAD:P(this,e);break;case m.IN_HEAD:L(this,e);break;case m.IN_HEAD_NO_SCRIPT:M(this,e);break;case m.AFTER_HEAD:x(this,e);break;case m.IN_BODY:case m.IN_CAPTION:case m.IN_CELL:case m.IN_TEMPLATE:B(this,e);break;case m.TEXT:case m.IN_SELECT:case m.IN_SELECT_IN_TABLE:this._insertCharacters(e);break;case m.IN_TABLE:case m.IN_TABLE_BODY:case m.IN_ROW:z(this,e);break;case m.IN_TABLE_TEXT:Z(this,e);break;case m.IN_COLUMN_GROUP:ne(this,e);break;case m.AFTER_BODY:he(this,e);break;case m.AFTER_AFTER_BODY:pe(this,e)}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){t.chars=c.REPLACEMENT_CHARACTER,e._insertCharacters(t)}(this,e);else switch(this.insertionMode){case m.INITIAL:D(this,e);break;case m.BEFORE_HTML:w(this,e);break;case m.BEFORE_HEAD:P(this,e);break;case m.IN_HEAD:L(this,e);break;case m.IN_HEAD_NO_SCRIPT:M(this,e);break;case m.AFTER_HEAD:x(this,e);break;case m.TEXT:this._insertCharacters(e);break;case m.IN_TABLE:case m.IN_TABLE_BODY:case m.IN_ROW:z(this,e);break;case m.IN_COLUMN_GROUP:ne(this,e);break;case m.AFTER_BODY:he(this,e);break;case m.AFTER_AFTER_BODY:pe(this,e)}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML)C(this,e);else switch(this.insertionMode){case m.INITIAL:case m.BEFORE_HTML:case m.BEFORE_HEAD:case m.IN_HEAD:case m.IN_HEAD_NO_SCRIPT:case m.AFTER_HEAD:case m.IN_BODY:case m.IN_TABLE:case m.IN_CAPTION:case m.IN_COLUMN_GROUP:case m.IN_TABLE_BODY:case m.IN_ROW:case m.IN_CELL:case m.IN_SELECT:case m.IN_SELECT_IN_TABLE:case m.IN_TEMPLATE:case m.IN_FRAMESET:case m.AFTER_FRAMESET:C(this,e);break;case m.IN_TABLE_TEXT:ee(this,e);break;case m.AFTER_BODY:!function(e,t){e._appendCommentNode(t,e.openElements.items[0])}(this,e);break;case m.AFTER_AFTER_BODY:case m.AFTER_AFTER_FRAMESET:!function(e,t){e._appendCommentNode(t,e.document)}(this,e)}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case m.INITIAL:!function(e,t){e._setDocumentType(t);const r=t.forceQuirks?d.DOCUMENT_MODE.QUIRKS:o.getDocumentMode(t);o.isConforming(t)||e._err(t,u.ERR.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=m.BEFORE_HTML}(this,e);break;case m.BEFORE_HEAD:case m.IN_HEAD:case m.IN_HEAD_NO_SCRIPT:case m.AFTER_HEAD:this._err(e,u.ERR.misplacedDoctype);break;case m.IN_TABLE_TEXT:ee(this,e)}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,u.ERR.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?function(e,t){if(l.causesExit(t))fe(e),e._startTagOutsideForeignContent(t);else{const r=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(r);n===d.NS.MATHML?l.adjustTokenMathMLAttrs(t):n===d.NS.SVG&&(l.adjustTokenSVGTagName(t),l.adjustTokenSVGAttrs(t)),l.adjustTokenXMLAttrs(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=!0}}(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case m.INITIAL:D(this,e);break;case m.BEFORE_HTML:!function(e,t){t.tagID===d.TAG_ID.HTML?(e._insertElement(t,d.NS.HTML),e.insertionMode=m.BEFORE_HEAD):w(e,t)}(this,e);break;case m.BEFORE_HEAD:!function(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.HEAD:e._insertElement(t,d.NS.HTML),e.headElement=e.openElements.current,e.insertionMode=m.IN_HEAD;break;default:P(e,t)}}(this,e);break;case m.IN_HEAD:R(this,e);break;case m.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.BASEFONT:case d.TAG_ID.BGSOUND:case d.TAG_ID.HEAD:case d.TAG_ID.LINK:case d.TAG_ID.META:case d.TAG_ID.NOFRAMES:case d.TAG_ID.STYLE:R(e,t);break;case d.TAG_ID.NOSCRIPT:e._err(t,u.ERR.nestedNoscriptInHead);break;default:M(e,t)}}(this,e);break;case m.AFTER_HEAD:!function(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.BODY:e._insertElement(t,d.NS.HTML),e.framesetOk=!1,e.insertionMode=m.IN_BODY;break;case d.TAG_ID.FRAMESET:e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_FRAMESET;break;case d.TAG_ID.BASE:case d.TAG_ID.BASEFONT:case d.TAG_ID.BGSOUND:case d.TAG_ID.LINK:case d.TAG_ID.META:case d.TAG_ID.NOFRAMES:case d.TAG_ID.SCRIPT:case d.TAG_ID.STYLE:case d.TAG_ID.TEMPLATE:case d.TAG_ID.TITLE:e._err(t,u.ERR.abandonedHeadElementChild),e.openElements.push(e.headElement,d.TAG_ID.HEAD),R(e,t),e.openElements.remove(e.headElement);break;case d.TAG_ID.HEAD:e._err(t,u.ERR.misplacedStartTagForHeadElement);break;default:x(e,t)}}(this,e);break;case m.IN_BODY:q(this,e);break;case m.IN_TABLE:K(this,e);break;case m.IN_TABLE_TEXT:ee(this,e);break;case m.IN_CAPTION:!function(e,t){const r=t.tagID;te.has(r)?e.openElements.hasInTableScope(d.TAG_ID.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(d.TAG_ID.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=m.IN_TABLE,K(e,t)):q(e,t)}(this,e);break;case m.IN_COLUMN_GROUP:re(this,e);break;case m.IN_TABLE_BODY:se(this,e);break;case m.IN_ROW:ae(this,e);break;case m.IN_CELL:!function(e,t){const r=t.tagID;te.has(r)?(e.openElements.hasInTableScope(d.TAG_ID.TD)||e.openElements.hasInTableScope(d.TAG_ID.TH))&&(e._closeTableCell(),ae(e,t)):q(e,t)}(this,e);break;case m.IN_SELECT:le(this,e);break;case m.IN_SELECT_IN_TABLE:!function(e,t){const r=t.tagID;r===d.TAG_ID.CAPTION||r===d.TAG_ID.TABLE||r===d.TAG_ID.TBODY||r===d.TAG_ID.TFOOT||r===d.TAG_ID.THEAD||r===d.TAG_ID.TR||r===d.TAG_ID.TD||r===d.TAG_ID.TH?(e.openElements.popUntilTagNamePopped(d.TAG_ID.SELECT),e._resetInsertionMode(),e._processStartTag(t)):le(e,t)}(this,e);break;case m.IN_TEMPLATE:!function(e,t){switch(t.tagID){case d.TAG_ID.BASE:case d.TAG_ID.BASEFONT:case d.TAG_ID.BGSOUND:case d.TAG_ID.LINK:case d.TAG_ID.META:case d.TAG_ID.NOFRAMES:case d.TAG_ID.SCRIPT:case d.TAG_ID.STYLE:case d.TAG_ID.TEMPLATE:case d.TAG_ID.TITLE:R(e,t);break;case d.TAG_ID.CAPTION:case d.TAG_ID.COLGROUP:case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:e.tmplInsertionModeStack[0]=m.IN_TABLE,e.insertionMode=m.IN_TABLE,K(e,t);break;case d.TAG_ID.COL:e.tmplInsertionModeStack[0]=m.IN_COLUMN_GROUP,e.insertionMode=m.IN_COLUMN_GROUP,re(e,t);break;case d.TAG_ID.TR:e.tmplInsertionModeStack[0]=m.IN_TABLE_BODY,e.insertionMode=m.IN_TABLE_BODY,se(e,t);break;case d.TAG_ID.TD:case d.TAG_ID.TH:e.tmplInsertionModeStack[0]=m.IN_ROW,e.insertionMode=m.IN_ROW,ae(e,t);break;default:e.tmplInsertionModeStack[0]=m.IN_BODY,e.insertionMode=m.IN_BODY,q(e,t)}}(this,e);break;case m.AFTER_BODY:!function(e,t){t.tagID===d.TAG_ID.HTML?q(e,t):he(e,t)}(this,e);break;case m.IN_FRAMESET:!function(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.FRAMESET:e._insertElement(t,d.NS.HTML);break;case d.TAG_ID.FRAME:e._appendElement(t,d.NS.HTML),t.ackSelfClosing=!0;break;case d.TAG_ID.NOFRAMES:R(e,t)}}(this,e);break;case m.AFTER_FRAMESET:!function(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.NOFRAMES:R(e,t)}}(this,e);break;case m.AFTER_AFTER_BODY:!function(e,t){t.tagID===d.TAG_ID.HTML?q(e,t):pe(e,t)}(this,e);break;case m.AFTER_AFTER_FRAMESET:!function(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.NOFRAMES:R(e,t)}}(this,e)}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?function(e,t){if(t.tagID===d.TAG_ID.P||t.tagID===d.TAG_ID.BR)return fe(e),void e._endTagOutsideForeignContent(t);for(let r=e.openElements.stackTop;r>0;r--){const n=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(n)===d.NS.HTML){e._endTagOutsideForeignContent(t);break}const s=e.treeAdapter.getTagName(n);if(s.toLowerCase()===t.tagName){t.tagName=s,e.openElements.shortenToLength(r);break}}}(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case m.INITIAL:D(this,e);break;case m.BEFORE_HTML:!function(e,t){const r=t.tagID;r!==d.TAG_ID.HTML&&r!==d.TAG_ID.HEAD&&r!==d.TAG_ID.BODY&&r!==d.TAG_ID.BR||w(e,t)}(this,e);break;case m.BEFORE_HEAD:!function(e,t){const r=t.tagID;r===d.TAG_ID.HEAD||r===d.TAG_ID.BODY||r===d.TAG_ID.HTML||r===d.TAG_ID.BR?P(e,t):e._err(t,u.ERR.endTagWithoutMatchingOpenElement)}(this,e);break;case m.IN_HEAD:!function(e,t){switch(t.tagID){case d.TAG_ID.HEAD:e.openElements.pop(),e.insertionMode=m.AFTER_HEAD;break;case d.TAG_ID.BODY:case d.TAG_ID.BR:case d.TAG_ID.HTML:L(e,t);break;case d.TAG_ID.TEMPLATE:k(e,t);break;default:e._err(t,u.ERR.endTagWithoutMatchingOpenElement)}}(this,e);break;case m.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case d.TAG_ID.NOSCRIPT:e.openElements.pop(),e.insertionMode=m.IN_HEAD;break;case d.TAG_ID.BR:M(e,t);break;default:e._err(t,u.ERR.endTagWithoutMatchingOpenElement)}}(this,e);break;case m.AFTER_HEAD:!function(e,t){switch(t.tagID){case d.TAG_ID.BODY:case d.TAG_ID.HTML:case d.TAG_ID.BR:x(e,t);break;case d.TAG_ID.TEMPLATE:k(e,t);break;default:e._err(t,u.ERR.endTagWithoutMatchingOpenElement)}}(this,e);break;case m.IN_BODY:V(this,e);break;case m.TEXT:!function(e,t){var r;t.tagID===d.TAG_ID.SCRIPT&&(null===(r=e.scriptHandler)||void 0===r||r.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}(this,e);break;case m.IN_TABLE:Q(this,e);break;case m.IN_TABLE_TEXT:ee(this,e);break;case m.IN_CAPTION:!function(e,t){const r=t.tagID;switch(r){case d.TAG_ID.CAPTION:case d.TAG_ID.TABLE:e.openElements.hasInTableScope(d.TAG_ID.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(d.TAG_ID.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=m.IN_TABLE,r===d.TAG_ID.TABLE&&Q(e,t));break;case d.TAG_ID.BODY:case d.TAG_ID.COL:case d.TAG_ID.COLGROUP:case d.TAG_ID.HTML:case d.TAG_ID.TBODY:case d.TAG_ID.TD:case d.TAG_ID.TFOOT:case d.TAG_ID.TH:case d.TAG_ID.THEAD:case d.TAG_ID.TR:break;default:V(e,t)}}(this,e);break;case m.IN_COLUMN_GROUP:!function(e,t){switch(t.tagID){case d.TAG_ID.COLGROUP:e.openElements.currentTagId===d.TAG_ID.COLGROUP&&(e.openElements.pop(),e.insertionMode=m.IN_TABLE);break;case d.TAG_ID.TEMPLATE:k(e,t);break;case d.TAG_ID.COL:break;default:ne(e,t)}}(this,e);break;case m.IN_TABLE_BODY:ie(this,e);break;case m.IN_ROW:oe(this,e);break;case m.IN_CELL:!function(e,t){const r=t.tagID;switch(r){case d.TAG_ID.TD:case d.TAG_ID.TH:e.openElements.hasInTableScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=m.IN_ROW);break;case d.TAG_ID.TABLE:case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:case d.TAG_ID.TR:e.openElements.hasInTableScope(r)&&(e._closeTableCell(),oe(e,t));break;case d.TAG_ID.BODY:case d.TAG_ID.CAPTION:case d.TAG_ID.COL:case d.TAG_ID.COLGROUP:case d.TAG_ID.HTML:break;default:V(e,t)}}(this,e);break;case m.IN_SELECT:ue(this,e);break;case m.IN_SELECT_IN_TABLE:!function(e,t){const r=t.tagID;r===d.TAG_ID.CAPTION||r===d.TAG_ID.TABLE||r===d.TAG_ID.TBODY||r===d.TAG_ID.TFOOT||r===d.TAG_ID.THEAD||r===d.TAG_ID.TR||r===d.TAG_ID.TD||r===d.TAG_ID.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(d.TAG_ID.SELECT),e._resetInsertionMode(),e.onEndTag(t)):ue(e,t)}(this,e);break;case m.IN_TEMPLATE:!function(e,t){t.tagID===d.TAG_ID.TEMPLATE&&k(e,t)}(this,e);break;case m.AFTER_BODY:de(this,e);break;case m.IN_FRAMESET:!function(e,t){t.tagID!==d.TAG_ID.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(),e.fragmentContext||e.openElements.currentTagId===d.TAG_ID.FRAMESET||(e.insertionMode=m.AFTER_FRAMESET))}(this,e);break;case m.AFTER_FRAMESET:!function(e,t){t.tagID===d.TAG_ID.HTML&&(e.insertionMode=m.AFTER_AFTER_FRAMESET)}(this,e);break;case m.AFTER_AFTER_BODY:pe(this,e)}}onEof(e){switch(this.insertionMode){case m.INITIAL:D(this,e);break;case m.BEFORE_HTML:w(this,e);break;case m.BEFORE_HEAD:P(this,e);break;case m.IN_HEAD:L(this,e);break;case m.IN_HEAD_NO_SCRIPT:M(this,e);break;case m.AFTER_HEAD:x(this,e);break;case m.IN_BODY:case m.IN_TABLE:case m.IN_CAPTION:case m.IN_COLUMN_GROUP:case m.IN_TABLE_BODY:case m.IN_ROW:case m.IN_CELL:case m.IN_SELECT:case m.IN_SELECT_IN_TABLE:Y(this,e);break;case m.TEXT:!function(e,t){e._err(t,u.ERR.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}(this,e);break;case m.IN_TABLE_TEXT:ee(this,e);break;case m.IN_TEMPLATE:ce(this,e);break;case m.AFTER_BODY:case m.IN_FRAMESET:case m.AFTER_FRAMESET:case m.AFTER_AFTER_BODY:case m.AFTER_AFTER_FRAMESET:N(this,e)}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===c.CODE_POINTS.LINE_FEED)){if(1===e.chars.length)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode)this._insertCharacters(e);else switch(this.insertionMode){case m.IN_HEAD:case m.IN_HEAD_NO_SCRIPT:case m.AFTER_HEAD:case m.TEXT:case m.IN_COLUMN_GROUP:case m.IN_SELECT:case m.IN_SELECT_IN_TABLE:case m.IN_FRAMESET:case m.AFTER_FRAMESET:this._insertCharacters(e);break;case m.IN_BODY:case m.IN_CAPTION:case m.IN_CELL:case m.IN_TEMPLATE:case m.AFTER_BODY:case m.AFTER_AFTER_BODY:case m.AFTER_AFTER_FRAMESET:U(this,e);break;case m.IN_TABLE:case m.IN_TABLE_BODY:case m.IN_ROW:z(this,e);break;case m.IN_TABLE_TEXT:J(this,e)}}};const te=new Set([d.TAG_ID.CAPTION,d.TAG_ID.COL,d.TAG_ID.COLGROUP,d.TAG_ID.TBODY,d.TAG_ID.TD,d.TAG_ID.TFOOT,d.TAG_ID.TH,d.TAG_ID.THEAD,d.TAG_ID.TR]);function re(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.COL:e._appendElement(t,d.NS.HTML),t.ackSelfClosing=!0;break;case d.TAG_ID.TEMPLATE:R(e,t);break;default:ne(e,t)}}function ne(e,t){e.openElements.currentTagId===d.TAG_ID.COLGROUP&&(e.openElements.pop(),e.insertionMode=m.IN_TABLE,e._processToken(t))}function se(e,t){switch(t.tagID){case d.TAG_ID.TR:e.openElements.clearBackToTableBodyContext(),e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_ROW;break;case d.TAG_ID.TH:case d.TAG_ID.TD:e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(d.TAG_NAMES.TR,d.TAG_ID.TR),e.insertionMode=m.IN_ROW,ae(e,t);break;case d.TAG_ID.CAPTION:case d.TAG_ID.COL:case d.TAG_ID.COLGROUP:case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=m.IN_TABLE,K(e,t));break;default:K(e,t)}}function ie(e,t){const r=t.tagID;switch(t.tagID){case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:e.openElements.hasInTableScope(r)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=m.IN_TABLE);break;case d.TAG_ID.TABLE:e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=m.IN_TABLE,Q(e,t));break;case d.TAG_ID.BODY:case d.TAG_ID.CAPTION:case d.TAG_ID.COL:case d.TAG_ID.COLGROUP:case d.TAG_ID.HTML:case d.TAG_ID.TD:case d.TAG_ID.TH:case d.TAG_ID.TR:break;default:Q(e,t)}}function ae(e,t){switch(t.tagID){case d.TAG_ID.TH:case d.TAG_ID.TD:e.openElements.clearBackToTableRowContext(),e._insertElement(t,d.NS.HTML),e.insertionMode=m.IN_CELL,e.activeFormattingElements.insertMarker();break;case d.TAG_ID.CAPTION:case d.TAG_ID.COL:case d.TAG_ID.COLGROUP:case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:case d.TAG_ID.TR:e.openElements.hasInTableScope(d.TAG_ID.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=m.IN_TABLE_BODY,se(e,t));break;default:K(e,t)}}function oe(e,t){switch(t.tagID){case d.TAG_ID.TR:e.openElements.hasInTableScope(d.TAG_ID.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=m.IN_TABLE_BODY);break;case d.TAG_ID.TABLE:e.openElements.hasInTableScope(d.TAG_ID.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=m.IN_TABLE_BODY,ie(e,t));break;case d.TAG_ID.TBODY:case d.TAG_ID.TFOOT:case d.TAG_ID.THEAD:(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(d.TAG_ID.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=m.IN_TABLE_BODY,ie(e,t));break;case d.TAG_ID.BODY:case d.TAG_ID.CAPTION:case d.TAG_ID.COL:case d.TAG_ID.COLGROUP:case d.TAG_ID.HTML:case d.TAG_ID.TD:case d.TAG_ID.TH:break;default:Q(e,t)}}function le(e,t){switch(t.tagID){case d.TAG_ID.HTML:q(e,t);break;case d.TAG_ID.OPTION:e.openElements.currentTagId===d.TAG_ID.OPTION&&e.openElements.pop(),e._insertElement(t,d.NS.HTML);break;case d.TAG_ID.OPTGROUP:e.openElements.currentTagId===d.TAG_ID.OPTION&&e.openElements.pop(),e.openElements.currentTagId===d.TAG_ID.OPTGROUP&&e.openElements.pop(),e._insertElement(t,d.NS.HTML);break;case d.TAG_ID.INPUT:case d.TAG_ID.KEYGEN:case d.TAG_ID.TEXTAREA:case d.TAG_ID.SELECT:e.openElements.hasInSelectScope(d.TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(d.TAG_ID.SELECT),e._resetInsertionMode(),t.tagID!==d.TAG_ID.SELECT&&e._processStartTag(t));break;case d.TAG_ID.SCRIPT:case d.TAG_ID.TEMPLATE:R(e,t)}}function ue(e,t){switch(t.tagID){case d.TAG_ID.OPTGROUP:e.openElements.stackTop>0&&e.openElements.currentTagId===d.TAG_ID.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===d.TAG_ID.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===d.TAG_ID.OPTGROUP&&e.openElements.pop();break;case d.TAG_ID.OPTION:e.openElements.currentTagId===d.TAG_ID.OPTION&&e.openElements.pop();break;case d.TAG_ID.SELECT:e.openElements.hasInSelectScope(d.TAG_ID.SELECT)&&(e.openElements.popUntilTagNamePopped(d.TAG_ID.SELECT),e._resetInsertionMode());break;case d.TAG_ID.TEMPLATE:k(e,t)}}function ce(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(d.TAG_ID.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):N(e,t)}function de(e,t){var r;if(t.tagID===d.TAG_ID.HTML){if(e.fragmentContext||(e.insertionMode=m.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===d.TAG_ID.HTML){e._setEndLocation(e.openElements.items[0],t);const n=e.openElements.items[1];n&&!(null===(r=e.treeAdapter.getNodeSourceCodeLocation(n))||void 0===r?void 0:r.endTag)&&e._setEndLocation(n,t)}}else he(e,t)}function he(e,t){e.insertionMode=m.IN_BODY,F(e,t)}function pe(e,t){e.insertionMode=m.IN_BODY,F(e,t)}function fe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==d.NS.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}},21982:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OpenElementStack=void 0;const n=r(96854),s=new Set([n.TAG_ID.DD,n.TAG_ID.DT,n.TAG_ID.LI,n.TAG_ID.OPTGROUP,n.TAG_ID.OPTION,n.TAG_ID.P,n.TAG_ID.RB,n.TAG_ID.RP,n.TAG_ID.RT,n.TAG_ID.RTC]),i=new Set([...s,n.TAG_ID.CAPTION,n.TAG_ID.COLGROUP,n.TAG_ID.TBODY,n.TAG_ID.TD,n.TAG_ID.TFOOT,n.TAG_ID.TH,n.TAG_ID.THEAD,n.TAG_ID.TR]),a=new Map([[n.TAG_ID.APPLET,n.NS.HTML],[n.TAG_ID.CAPTION,n.NS.HTML],[n.TAG_ID.HTML,n.NS.HTML],[n.TAG_ID.MARQUEE,n.NS.HTML],[n.TAG_ID.OBJECT,n.NS.HTML],[n.TAG_ID.TABLE,n.NS.HTML],[n.TAG_ID.TD,n.NS.HTML],[n.TAG_ID.TEMPLATE,n.NS.HTML],[n.TAG_ID.TH,n.NS.HTML],[n.TAG_ID.ANNOTATION_XML,n.NS.MATHML],[n.TAG_ID.MI,n.NS.MATHML],[n.TAG_ID.MN,n.NS.MATHML],[n.TAG_ID.MO,n.NS.MATHML],[n.TAG_ID.MS,n.NS.MATHML],[n.TAG_ID.MTEXT,n.NS.MATHML],[n.TAG_ID.DESC,n.NS.SVG],[n.TAG_ID.FOREIGN_OBJECT,n.NS.SVG],[n.TAG_ID.TITLE,n.NS.SVG]]),o=[n.TAG_ID.H1,n.TAG_ID.H2,n.TAG_ID.H3,n.TAG_ID.H4,n.TAG_ID.H5,n.TAG_ID.H6],l=[n.TAG_ID.TR,n.TAG_ID.TEMPLATE,n.TAG_ID.HTML],u=[n.TAG_ID.TBODY,n.TAG_ID.TFOOT,n.TAG_ID.THEAD,n.TAG_ID.TEMPLATE,n.TAG_ID.HTML],c=[n.TAG_ID.TABLE,n.TAG_ID.TEMPLATE,n.TAG_ID.HTML],d=[n.TAG_ID.TD,n.TAG_ID.TH];t.OpenElementStack=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(e,t,r){this.treeAdapter=t,this.handler=r,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=n.TAG_ID.UNKNOWN,this.current=e}_indexOf(e){return this.items.lastIndexOf(e,this.stackTop)}_isInTemplate(){return this.currentTagId===n.TAG_ID.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===n.NS.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(e,t){this.stackTop++,this.items[this.stackTop]=e,this.current=e,this.tagIDs[this.stackTop]=t,this.currentTagId=t,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(e,t,!0)}pop(){const e=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,t){const r=this._indexOf(e);this.items[r]=t,r===this.stackTop&&(this.current=t)}insertAfter(e,t,r){const n=this._indexOf(e)+1;this.items.splice(n,0,t),this.tagIDs.splice(n,0,r),this.stackTop++,n===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,n===this.stackTop)}popUntilTagNamePopped(e){let t=this.stackTop+1;do{t=this.tagIDs.lastIndexOf(e,t-1)}while(t>0&&this.treeAdapter.getNamespaceURI(this.items[t])!==n.NS.HTML);this.shortenToLength(t<0?0:t)}shortenToLength(e){for(;this.stackTop>=e;){const t=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,this.stackTop=0;r--)if(e.includes(this.tagIDs[r])&&this.treeAdapter.getNamespaceURI(this.items[r])===t)return r;return-1}clearBackTo(e,t){const r=this._indexOfTagNames(e,t);this.shortenToLength(r+1)}clearBackToTableContext(){this.clearBackTo(c,n.NS.HTML)}clearBackToTableBodyContext(){this.clearBackTo(u,n.NS.HTML)}clearBackToTableRowContext(){this.clearBackTo(l,n.NS.HTML)}remove(e){const t=this._indexOf(e);t>=0&&(t===this.stackTop?this.pop():(this.items.splice(t,1),this.tagIDs.splice(t,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===n.TAG_ID.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){const t=this._indexOf(e)-1;return t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.tagIDs[0]===n.TAG_ID.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t],s=this.treeAdapter.getNamespaceURI(this.items[t]);if(r===e&&s===n.NS.HTML)return!0;if(a.get(r)===s)return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e],r=this.treeAdapter.getNamespaceURI(this.items[e]);if((0,n.isNumberedHeader)(t)&&r===n.NS.HTML)return!0;if(a.get(t)===r)return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t],s=this.treeAdapter.getNamespaceURI(this.items[t]);if(r===e&&s===n.NS.HTML)return!0;if((r===n.TAG_ID.UL||r===n.TAG_ID.OL)&&s===n.NS.HTML||a.get(r)===s)return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t],s=this.treeAdapter.getNamespaceURI(this.items[t]);if(r===e&&s===n.NS.HTML)return!0;if(r===n.TAG_ID.BUTTON&&s===n.NS.HTML||a.get(r)===s)return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===n.NS.HTML){if(r===e)return!0;if(r===n.TAG_ID.TABLE||r===n.TAG_ID.TEMPLATE||r===n.TAG_ID.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e];if(this.treeAdapter.getNamespaceURI(this.items[e])===n.NS.HTML){if(t===n.TAG_ID.TBODY||t===n.TAG_ID.THEAD||t===n.TAG_ID.TFOOT)return!0;if(t===n.TAG_ID.TABLE||t===n.TAG_ID.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const r=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===n.NS.HTML){if(r===e)return!0;if(r!==n.TAG_ID.OPTION&&r!==n.TAG_ID.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;s.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;i.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==e&&i.has(this.currentTagId);)this.pop()}}},37742:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.serializeOuter=t.serialize=void 0;const n=r(96854),s=r(41594),i=r(53384),a=new Set([n.TAG_NAMES.AREA,n.TAG_NAMES.BASE,n.TAG_NAMES.BASEFONT,n.TAG_NAMES.BGSOUND,n.TAG_NAMES.BR,n.TAG_NAMES.COL,n.TAG_NAMES.EMBED,n.TAG_NAMES.FRAME,n.TAG_NAMES.HR,n.TAG_NAMES.IMG,n.TAG_NAMES.INPUT,n.TAG_NAMES.KEYGEN,n.TAG_NAMES.LINK,n.TAG_NAMES.META,n.TAG_NAMES.PARAM,n.TAG_NAMES.SOURCE,n.TAG_NAMES.TRACK,n.TAG_NAMES.WBR]);function o(e,t){return t.treeAdapter.isElementNode(e)&&t.treeAdapter.getNamespaceURI(e)===n.NS.HTML&&a.has(t.treeAdapter.getTagName(e))}const l={treeAdapter:i.defaultTreeAdapter,scriptingEnabled:!0};function u(e,t){let r="";const s=t.treeAdapter.isElementNode(e)&&t.treeAdapter.getTagName(e)===n.TAG_NAMES.TEMPLATE&&t.treeAdapter.getNamespaceURI(e)===n.NS.HTML?t.treeAdapter.getTemplateContent(e):e,i=t.treeAdapter.getChildNodes(s);if(i)for(const e of i)r+=c(e,t);return r}function c(e,t){return t.treeAdapter.isElementNode(e)?function(e,t){const r=t.treeAdapter.getTagName(e);return`<${r}${function(e,{treeAdapter:t}){let r="";for(const i of t.getAttrList(e)){if(r+=" ",i.namespace)switch(i.namespace){case n.NS.XML:r+=`xml:${i.name}`;break;case n.NS.XMLNS:"xmlns"!==i.name&&(r+="xmlns:"),r+=i.name;break;case n.NS.XLINK:r+=`xlink:${i.name}`;break;default:r+=`${i.prefix}:${i.name}`}else r+=i.name;r+=`="${(0,s.escapeAttribute)(i.value)}"`}return r}(e,t)}>${o(e,t)?"":`${u(e,t)}`}`}(e,t):t.treeAdapter.isTextNode(e)?function(e,t){const{treeAdapter:r}=t,i=r.getTextNodeContent(e),a=r.getParentNode(e),o=a&&r.isElementNode(a)&&r.getTagName(a);return o&&r.getNamespaceURI(a)===n.NS.HTML&&(0,n.hasUnescapedText)(o,t.scriptingEnabled)?i:(0,s.escapeText)(i)}(e,t):t.treeAdapter.isCommentNode(e)?function(e,{treeAdapter:t}){return`\x3c!--${t.getCommentNodeContent(e)}--\x3e`}(e,t):t.treeAdapter.isDocumentTypeNode(e)?function(e,{treeAdapter:t}){return``}(e,t):""}t.serialize=function(e,t){const r=Object.assign(Object.assign({},l),t);return o(e,r)?"":u(e,r)},t.serializeOuter=function(e,t){return c(e,Object.assign(Object.assign({},l),t))}},73783:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Tokenizer=t.TokenizerMode=void 0;const n=r(70601),s=r(6746),i=r(14708),a=r(98824),o=r(13246),l=r(96854),u=new Map([[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);var c;function d(e){return e>=s.CODE_POINTS.DIGIT_0&&e<=s.CODE_POINTS.DIGIT_9}function h(e){return e>=s.CODE_POINTS.LATIN_CAPITAL_A&&e<=s.CODE_POINTS.LATIN_CAPITAL_Z}function p(e){return function(e){return e>=s.CODE_POINTS.LATIN_SMALL_A&&e<=s.CODE_POINTS.LATIN_SMALL_Z}(e)||h(e)}function f(e){return p(e)||d(e)}function g(e){return e>=s.CODE_POINTS.LATIN_CAPITAL_A&&e<=s.CODE_POINTS.LATIN_CAPITAL_F}function m(e){return e>=s.CODE_POINTS.LATIN_SMALL_A&&e<=s.CODE_POINTS.LATIN_SMALL_F}function _(e){return e+32}function y(e){return e===s.CODE_POINTS.SPACE||e===s.CODE_POINTS.LINE_FEED||e===s.CODE_POINTS.TABULATION||e===s.CODE_POINTS.FORM_FEED}function E(e){return y(e)||e===s.CODE_POINTS.SOLIDUS||e===s.CODE_POINTS.GREATER_THAN_SIGN}!function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.NAMED_CHARACTER_REFERENCE=72]="NAMED_CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=73]="AMBIGUOUS_AMPERSAND",e[e.NUMERIC_CHARACTER_REFERENCE=74]="NUMERIC_CHARACTER_REFERENCE",e[e.HEXADEMICAL_CHARACTER_REFERENCE_START=75]="HEXADEMICAL_CHARACTER_REFERENCE_START",e[e.HEXADEMICAL_CHARACTER_REFERENCE=76]="HEXADEMICAL_CHARACTER_REFERENCE",e[e.DECIMAL_CHARACTER_REFERENCE=77]="DECIMAL_CHARACTER_REFERENCE",e[e.NUMERIC_CHARACTER_REFERENCE_END=78]="NUMERIC_CHARACTER_REFERENCE_END"}(c||(c={})),t.TokenizerMode={DATA:c.DATA,RCDATA:c.RCDATA,RAWTEXT:c.RAWTEXT,SCRIPT_DATA:c.SCRIPT_DATA,PLAINTEXT:c.PLAINTEXT,CDATA_SECTION:c.CDATA_SECTION},t.Tokenizer=class{constructor(e,t){this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=c.DATA,this.returnState=c.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new n.Preprocessor(t),this.currentLocation=this.getCurrentLocation(-1)}_err(e){var t,r;null===(r=(t=this.handler).onParseError)||void 0===r||r.call(t,this.preprocessor.getError(e))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,this.inLoop||(this._runParsingLoop(),this.paused||null==e||e())}write(e,t,r){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(),this.paused||null==r||r()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return!!this.preprocessor.endOfChunkHit&&(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0)}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(e){this.consumedAfterSnapshot-=e,this.preprocessor.retreat(e)}_reconsumeInState(e,t){this.state=e,this._callState(t)}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let t=0;t0&&this._err(o.ERR.endTagWithAttributes),e.selfClosing&&this._err(o.ERR.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case i.TokenType.CHARACTER:this.handler.onCharacter(this.currentCharacterToken);break;case i.TokenType.NULL_CHARACTER:this.handler.onNullCharacter(this.currentCharacterToken);break;case i.TokenType.WHITESPACE_CHARACTER:this.handler.onWhitespaceCharacter(this.currentCharacterToken)}this.currentCharacterToken=null}}_emitEOFToken(){const e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:i.TokenType.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,t){if(this.currentCharacterToken){if(this.currentCharacterToken.type===e)return void(this.currentCharacterToken.chars+=t);this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk()}this._createCharacterToken(e,t)}_emitCodePoint(e){const t=y(e)?i.TokenType.WHITESPACE_CHARACTER:e===s.CODE_POINTS.NULL?i.TokenType.NULL_CHARACTER:i.TokenType.CHARACTER;this._appendCharToCurrentCharacterToken(t,String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(i.TokenType.CHARACTER,e)}_matchNamedCharacterReference(e){let t=null,r=0,n=!1;for(let o=0,l=a.htmlDecodeTree[0];o>=0&&(o=(0,a.determineBranch)(a.htmlDecodeTree,l,o+1,e),!(o<0));e=this._consume()){r+=1,l=a.htmlDecodeTree[o];const u=l&a.BinTrieFlags.VALUE_LENGTH;if(u){const l=(u>>14)-1;if(e!==s.CODE_POINTS.SEMICOLON&&this._isCharacterReferenceInAttribute()&&((i=this.preprocessor.peek(1))===s.CODE_POINTS.EQUALS_SIGN||f(i))?(t=[s.CODE_POINTS.AMPERSAND],o+=l):(t=0===l?[a.htmlDecodeTree[o]&~a.BinTrieFlags.VALUE_LENGTH]:1===l?[a.htmlDecodeTree[++o]]:[a.htmlDecodeTree[++o],a.htmlDecodeTree[++o]],r=0,n=e!==s.CODE_POINTS.SEMICOLON),0===l){this._consume();break}}}var i;return this._unconsume(r),n&&!this.preprocessor.endOfChunkHit&&this._err(o.ERR.missingSemicolonAfterCharacterReference),this._unconsume(1),t}_isCharacterReferenceInAttribute(){return this.returnState===c.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===c.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===c.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case c.DATA:this._stateData(e);break;case c.RCDATA:this._stateRcdata(e);break;case c.RAWTEXT:this._stateRawtext(e);break;case c.SCRIPT_DATA:this._stateScriptData(e);break;case c.PLAINTEXT:this._statePlaintext(e);break;case c.TAG_OPEN:this._stateTagOpen(e);break;case c.END_TAG_OPEN:this._stateEndTagOpen(e);break;case c.TAG_NAME:this._stateTagName(e);break;case c.RCDATA_LESS_THAN_SIGN:this._stateRcdataLessThanSign(e);break;case c.RCDATA_END_TAG_OPEN:this._stateRcdataEndTagOpen(e);break;case c.RCDATA_END_TAG_NAME:this._stateRcdataEndTagName(e);break;case c.RAWTEXT_LESS_THAN_SIGN:this._stateRawtextLessThanSign(e);break;case c.RAWTEXT_END_TAG_OPEN:this._stateRawtextEndTagOpen(e);break;case c.RAWTEXT_END_TAG_NAME:this._stateRawtextEndTagName(e);break;case c.SCRIPT_DATA_LESS_THAN_SIGN:this._stateScriptDataLessThanSign(e);break;case c.SCRIPT_DATA_END_TAG_OPEN:this._stateScriptDataEndTagOpen(e);break;case c.SCRIPT_DATA_END_TAG_NAME:this._stateScriptDataEndTagName(e);break;case c.SCRIPT_DATA_ESCAPE_START:this._stateScriptDataEscapeStart(e);break;case c.SCRIPT_DATA_ESCAPE_START_DASH:this._stateScriptDataEscapeStartDash(e);break;case c.SCRIPT_DATA_ESCAPED:this._stateScriptDataEscaped(e);break;case c.SCRIPT_DATA_ESCAPED_DASH:this._stateScriptDataEscapedDash(e);break;case c.SCRIPT_DATA_ESCAPED_DASH_DASH:this._stateScriptDataEscapedDashDash(e);break;case c.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataEscapedLessThanSign(e);break;case c.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:this._stateScriptDataEscapedEndTagOpen(e);break;case c.SCRIPT_DATA_ESCAPED_END_TAG_NAME:this._stateScriptDataEscapedEndTagName(e);break;case c.SCRIPT_DATA_DOUBLE_ESCAPE_START:this._stateScriptDataDoubleEscapeStart(e);break;case c.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break;case c.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:this._stateScriptDataDoubleEscapedDash(e);break;case c.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:this._stateScriptDataDoubleEscapedDashDash(e);break;case c.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataDoubleEscapedLessThanSign(e);break;case c.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e);break;case c.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break;case c.ATTRIBUTE_NAME:this._stateAttributeName(e);break;case c.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break;case c.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break;case c.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e);break;case c.ATTRIBUTE_VALUE_SINGLE_QUOTED:this._stateAttributeValueSingleQuoted(e);break;case c.ATTRIBUTE_VALUE_UNQUOTED:this._stateAttributeValueUnquoted(e);break;case c.AFTER_ATTRIBUTE_VALUE_QUOTED:this._stateAfterAttributeValueQuoted(e);break;case c.SELF_CLOSING_START_TAG:this._stateSelfClosingStartTag(e);break;case c.BOGUS_COMMENT:this._stateBogusComment(e);break;case c.MARKUP_DECLARATION_OPEN:this._stateMarkupDeclarationOpen(e);break;case c.COMMENT_START:this._stateCommentStart(e);break;case c.COMMENT_START_DASH:this._stateCommentStartDash(e);break;case c.COMMENT:this._stateComment(e);break;case c.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break;case c.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break;case c.COMMENT_LESS_THAN_SIGN_BANG_DASH:this._stateCommentLessThanSignBangDash(e);break;case c.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:this._stateCommentLessThanSignBangDashDash(e);break;case c.COMMENT_END_DASH:this._stateCommentEndDash(e);break;case c.COMMENT_END:this._stateCommentEnd(e);break;case c.COMMENT_END_BANG:this._stateCommentEndBang(e);break;case c.DOCTYPE:this._stateDoctype(e);break;case c.BEFORE_DOCTYPE_NAME:this._stateBeforeDoctypeName(e);break;case c.DOCTYPE_NAME:this._stateDoctypeName(e);break;case c.AFTER_DOCTYPE_NAME:this._stateAfterDoctypeName(e);break;case c.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._stateAfterDoctypePublicKeyword(e);break;case c.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:this._stateBeforeDoctypePublicIdentifier(e);break;case c.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypePublicIdentifierDoubleQuoted(e);break;case c.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypePublicIdentifierSingleQuoted(e);break;case c.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:this._stateAfterDoctypePublicIdentifier(e);break;case c.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break;case c.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e);break;case c.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:this._stateBeforeDoctypeSystemIdentifier(e);break;case c.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypeSystemIdentifierDoubleQuoted(e);break;case c.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypeSystemIdentifierSingleQuoted(e);break;case c.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:this._stateAfterDoctypeSystemIdentifier(e);break;case c.BOGUS_DOCTYPE:this._stateBogusDoctype(e);break;case c.CDATA_SECTION:this._stateCdataSection(e);break;case c.CDATA_SECTION_BRACKET:this._stateCdataSectionBracket(e);break;case c.CDATA_SECTION_END:this._stateCdataSectionEnd(e);break;case c.CHARACTER_REFERENCE:this._stateCharacterReference(e);break;case c.NAMED_CHARACTER_REFERENCE:this._stateNamedCharacterReference(e);break;case c.AMBIGUOUS_AMPERSAND:this._stateAmbiguousAmpersand(e);break;case c.NUMERIC_CHARACTER_REFERENCE:this._stateNumericCharacterReference(e);break;case c.HEXADEMICAL_CHARACTER_REFERENCE_START:this._stateHexademicalCharacterReferenceStart(e);break;case c.HEXADEMICAL_CHARACTER_REFERENCE:this._stateHexademicalCharacterReference(e);break;case c.DECIMAL_CHARACTER_REFERENCE:this._stateDecimalCharacterReference(e);break;case c.NUMERIC_CHARACTER_REFERENCE_END:this._stateNumericCharacterReferenceEnd(e);break;default:throw new Error("Unknown state")}}_stateData(e){switch(e){case s.CODE_POINTS.LESS_THAN_SIGN:this.state=c.TAG_OPEN;break;case s.CODE_POINTS.AMPERSAND:this.returnState=c.DATA,this.state=c.CHARACTER_REFERENCE;break;case s.CODE_POINTS.NULL:this._err(o.ERR.unexpectedNullCharacter),this._emitCodePoint(e);break;case s.CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case s.CODE_POINTS.AMPERSAND:this.returnState=c.RCDATA,this.state=c.CHARACTER_REFERENCE;break;case s.CODE_POINTS.LESS_THAN_SIGN:this.state=c.RCDATA_LESS_THAN_SIGN;break;case s.CODE_POINTS.NULL:this._err(o.ERR.unexpectedNullCharacter),this._emitChars(s.REPLACEMENT_CHARACTER);break;case s.CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case s.CODE_POINTS.LESS_THAN_SIGN:this.state=c.RAWTEXT_LESS_THAN_SIGN;break;case s.CODE_POINTS.NULL:this._err(o.ERR.unexpectedNullCharacter),this._emitChars(s.REPLACEMENT_CHARACTER);break;case s.CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case s.CODE_POINTS.LESS_THAN_SIGN:this.state=c.SCRIPT_DATA_LESS_THAN_SIGN;break;case s.CODE_POINTS.NULL:this._err(o.ERR.unexpectedNullCharacter),this._emitChars(s.REPLACEMENT_CHARACTER);break;case s.CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case s.CODE_POINTS.NULL:this._err(o.ERR.unexpectedNullCharacter),this._emitChars(s.REPLACEMENT_CHARACTER);break;case s.CODE_POINTS.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateTagOpen(e){if(p(e))this._createStartTagToken(),this.state=c.TAG_NAME,this._stateTagName(e);else switch(e){case s.CODE_POINTS.EXCLAMATION_MARK:this.state=c.MARKUP_DECLARATION_OPEN;break;case s.CODE_POINTS.SOLIDUS:this.state=c.END_TAG_OPEN;break;case s.CODE_POINTS.QUESTION_MARK:this._err(o.ERR.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=c.BOGUS_COMMENT,this._stateBogusComment(e);break;case s.CODE_POINTS.EOF:this._err(o.ERR.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break;default:this._err(o.ERR.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=c.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(p(e))this._createEndTagToken(),this.state=c.TAG_NAME,this._stateTagName(e);else switch(e){case s.CODE_POINTS.GREATER_THAN_SIGN:this._err(o.ERR.missingEndTagName),this.state=c.DATA;break;case s.CODE_POINTS.EOF:this._err(o.ERR.eofBeforeTagName),this._emitChars("");break;case s.CODE_POINTS.NULL:this._err(o.ERR.unexpectedNullCharacter),this.state=c.SCRIPT_DATA_ESCAPED,this._emitChars(s.REPLACEMENT_CHARACTER);break;case s.CODE_POINTS.EOF:this._err(o.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=c.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===s.CODE_POINTS.SOLIDUS?this.state=c.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:p(e)?(this._emitChars("<"),this.state=c.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"),this.state=c.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){p(e)?(this.state=c.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("");break;case s.CODE_POINTS.NULL:this._err(o.ERR.unexpectedNullCharacter),this.state=c.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(s.REPLACEMENT_CHARACTER);break;case s.CODE_POINTS.EOF:this._err(o.ERR.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=c.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===s.CODE_POINTS.SOLIDUS?(this.state=c.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=c.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(s.SEQUENCES.SCRIPT,!1)&&E(this.preprocessor.peek(s.SEQUENCES.SCRIPT.length))){this._emitCodePoint(e);for(let e=0;e1114111)this._err(o.ERR.characterReferenceOutsideUnicodeRange),this.charRefCode=s.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,s.isSurrogate)(this.charRefCode))this._err(o.ERR.surrogateCharacterReference),this.charRefCode=s.CODE_POINTS.REPLACEMENT_CHARACTER;else if((0,s.isUndefinedCodePoint)(this.charRefCode))this._err(o.ERR.noncharacterCharacterReference);else if((0,s.isControlCodePoint)(this.charRefCode)||this.charRefCode===s.CODE_POINTS.CARRIAGE_RETURN){this._err(o.ERR.controlCharacterReference);const e=u.get(this.charRefCode);void 0!==e&&(this.charRefCode=e)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,e)}}},70601:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Preprocessor=void 0;const n=r(6746),s=r(13246);t.Preprocessor=class{constructor(e){this.handler=e,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e){const{line:t,col:r,offset:n}=this;return{code:e,startLine:t,endLine:t,startCol:r,endCol:r,startOffset:n,endOffset:n}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){const t=this.html.charCodeAt(this.pos+1);if((0,n.isSurrogatePair)(t))return this.pos++,this._addGap(),(0,n.getSurrogatePairCodePoint)(e,t)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,n.CODE_POINTS.EOF;return this._err(s.ERR.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,t){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,t){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(t)return this.html.startsWith(e,this.pos);for(let t=0;t=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,n.CODE_POINTS.EOF;const r=this.html.charCodeAt(t);return r===n.CODE_POINTS.CARRIAGE_RETURN?n.CODE_POINTS.LINE_FEED:r}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,n.CODE_POINTS.EOF;let e=this.html.charCodeAt(this.pos);return e===n.CODE_POINTS.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,n.CODE_POINTS.LINE_FEED):e===n.CODE_POINTS.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,(0,n.isSurrogate)(e)&&(e=this._processSurrogate(e)),null===this.handler.onParseError||e>31&&e<127||e===n.CODE_POINTS.LINE_FEED||e===n.CODE_POINTS.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e)}_checkForProblematicCharacters(e){(0,n.isControlCodePoint)(e)?this._err(s.ERR.controlCharacterInInputStream):(0,n.isUndefinedCodePoint)(e)&&this._err(s.ERR.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultTreeAdapter=void 0;const n=r(96854);function s(e){return{nodeName:"#text",value:e,parentNode:null}}t.defaultTreeAdapter={createDocument:()=>({nodeName:"#document",mode:n.DOCUMENT_MODE.NO_QUIRKS,childNodes:[]}),createDocumentFragment:()=>({nodeName:"#document-fragment",childNodes:[]}),createElement:(e,t,r)=>({nodeName:e,tagName:e,attrs:r,namespaceURI:t,childNodes:[],parentNode:null}),createCommentNode:e=>({nodeName:"#comment",data:e,parentNode:null}),appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,r){const n=e.childNodes.indexOf(r);e.childNodes.splice(n,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent:e=>e.content,setDocumentType(e,r,n,s){const i=e.childNodes.find((e=>"#documentType"===e.nodeName));if(i)i.name=r,i.publicId=n,i.systemId=s;else{const i={nodeName:"#documentType",name:r,publicId:n,systemId:s,parentNode:null};t.defaultTreeAdapter.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode:e=>e.mode,detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,r){if(e.childNodes.length>0){const n=e.childNodes[e.childNodes.length-1];if(t.defaultTreeAdapter.isTextNode(n))return void(n.value+=r)}t.defaultTreeAdapter.appendChild(e,s(r))},insertTextBefore(e,r,n){const i=e.childNodes[e.childNodes.indexOf(n)-1];i&&t.defaultTreeAdapter.isTextNode(i)?i.value+=r:t.defaultTreeAdapter.insertBefore(e,s(r),n)},adoptAttributes(e,t){const r=new Set(e.attrs.map((e=>e.name)));for(let n=0;ne.childNodes[0],getChildNodes:e=>e.childNodes,getParentNode:e=>e.parentNode,getAttrList:e=>e.attrs,getTagName:e=>e.tagName,getNamespaceURI:e=>e.namespaceURI,getTextNodeContent:e=>e.value,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName:e=>e.name,getDocumentTypeNodePublicId:e=>e.publicId,getDocumentTypeNodeSystemId:e=>e.systemId,isTextNode:e=>"#text"===e.nodeName,isCommentNode:e=>"#comment"===e.nodeName,isDocumentTypeNode:e=>"#documentType"===e.nodeName,isElementNode:e=>Object.prototype.hasOwnProperty.call(e,"tagName"),setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation=Object.assign(Object.assign({},e.sourceCodeLocation),t)}}},79004:e=>{"use strict";e.exports=JSON.parse('{"elementNames":{"altglyph":"altGlyph","altglyphdef":"altGlyphDef","altglyphitem":"altGlyphItem","animatecolor":"animateColor","animatemotion":"animateMotion","animatetransform":"animateTransform","clippath":"clipPath","feblend":"feBlend","fecolormatrix":"feColorMatrix","fecomponenttransfer":"feComponentTransfer","fecomposite":"feComposite","feconvolvematrix":"feConvolveMatrix","fediffuselighting":"feDiffuseLighting","fedisplacementmap":"feDisplacementMap","fedistantlight":"feDistantLight","fedropshadow":"feDropShadow","feflood":"feFlood","fefunca":"feFuncA","fefuncb":"feFuncB","fefuncg":"feFuncG","fefuncr":"feFuncR","fegaussianblur":"feGaussianBlur","feimage":"feImage","femerge":"feMerge","femergenode":"feMergeNode","femorphology":"feMorphology","feoffset":"feOffset","fepointlight":"fePointLight","fespecularlighting":"feSpecularLighting","fespotlight":"feSpotLight","fetile":"feTile","feturbulence":"feTurbulence","foreignobject":"foreignObject","glyphref":"glyphRef","lineargradient":"linearGradient","radialgradient":"radialGradient","textpath":"textPath"},"attributeNames":{"definitionurl":"definitionURL","attributename":"attributeName","attributetype":"attributeType","basefrequency":"baseFrequency","baseprofile":"baseProfile","calcmode":"calcMode","clippathunits":"clipPathUnits","diffuseconstant":"diffuseConstant","edgemode":"edgeMode","filterunits":"filterUnits","glyphref":"glyphRef","gradienttransform":"gradientTransform","gradientunits":"gradientUnits","kernelmatrix":"kernelMatrix","kernelunitlength":"kernelUnitLength","keypoints":"keyPoints","keysplines":"keySplines","keytimes":"keyTimes","lengthadjust":"lengthAdjust","limitingconeangle":"limitingConeAngle","markerheight":"markerHeight","markerunits":"markerUnits","markerwidth":"markerWidth","maskcontentunits":"maskContentUnits","maskunits":"maskUnits","numoctaves":"numOctaves","pathlength":"pathLength","patterncontentunits":"patternContentUnits","patterntransform":"patternTransform","patternunits":"patternUnits","pointsatx":"pointsAtX","pointsaty":"pointsAtY","pointsatz":"pointsAtZ","preservealpha":"preserveAlpha","preserveaspectratio":"preserveAspectRatio","primitiveunits":"primitiveUnits","refx":"refX","refy":"refY","repeatcount":"repeatCount","repeatdur":"repeatDur","requiredextensions":"requiredExtensions","requiredfeatures":"requiredFeatures","specularconstant":"specularConstant","specularexponent":"specularExponent","spreadmethod":"spreadMethod","startoffset":"startOffset","stddeviation":"stdDeviation","stitchtiles":"stitchTiles","surfacescale":"surfaceScale","systemlanguage":"systemLanguage","tablevalues":"tableValues","targetx":"targetX","targety":"targetY","textlength":"textLength","viewbox":"viewBox","viewtarget":"viewTarget","xchannelselector":"xChannelSelector","ychannelselector":"yChannelSelector","zoomandpan":"zoomAndPan"}}')},33523:e=>{"use strict";e.exports=JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}')},53082:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Ã","aacute":"á","Abreve":"Ä‚","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"Ð","acy":"а","AElig":"Æ","aelig":"æ","af":"â¡","Afr":"ð”„","afr":"ð”ž","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ä€","amacr":"Ä","amalg":"⨿","amp":"&","AMP":"&","andand":"â©•","And":"â©“","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"â¦","angsph":"∢","angst":"Ã…","angzarr":"â¼","Aogon":"Ä„","aogon":"Ä…","Aopf":"ð”¸","aopf":"ð•’","apacir":"⩯","ap":"≈","apE":"â©°","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"â¡","approx":"≈","approxeq":"≊","Aring":"Ã…","aring":"Ã¥","Ascr":"ð’œ","ascr":"ð’¶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"â‰","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"â‹","Backslash":"∖","Barv":"â«§","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Î’","beta":"β","beth":"â„¶","between":"≬","Bfr":"ð”…","bfr":"ð”Ÿ","bigcap":"â‹‚","bigcirc":"â—¯","bigcup":"⋃","bigodot":"⨀","bigoplus":"â¨","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"â–½","bigtriangleup":"â–³","biguplus":"⨄","bigvee":"â‹","bigwedge":"â‹€","bkarow":"â¤","blacklozenge":"â§«","blacksquare":"â–ª","blacktriangle":"â–´","blacktriangledown":"â–¾","blacktriangleleft":"â—‚","blacktriangleright":"â–¸","blank":"â£","blk12":"â–’","blk14":"â–‘","blk34":"â–“","block":"â–ˆ","bne":"=⃥","bnequiv":"≡⃥","bNot":"â«­","bnot":"âŒ","Bopf":"ð”¹","bopf":"ð•“","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"â”","boxdL":"â••","boxDl":"â•–","boxDL":"â•—","boxdr":"┌","boxdR":"â•’","boxDr":"â•“","boxDR":"â•”","boxh":"─","boxH":"â•","boxhd":"┬","boxHd":"╤","boxhD":"â•¥","boxHD":"╦","boxhu":"â”´","boxHu":"â•§","boxhU":"╨","boxHU":"â•©","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"â•›","boxUl":"╜","boxUL":"â•","boxur":"â””","boxuR":"╘","boxUr":"â•™","boxUR":"╚","boxv":"│","boxV":"â•‘","boxvh":"┼","boxvH":"╪","boxVh":"â•«","boxVH":"╬","boxvl":"┤","boxvL":"â•¡","boxVl":"â•¢","boxVL":"â•£","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"â• ","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"ð’·","Bscr":"ℬ","bsemi":"â","bsim":"∽","bsime":"â‹","bsolb":"â§…","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"â‰","Bumpeq":"≎","bumpeq":"â‰","Cacute":"Ć","cacute":"ć","capand":"â©„","capbrcup":"⩉","capcap":"â©‹","cap":"∩","Cap":"â‹’","capcup":"⩇","capdot":"â©€","CapitalDifferentialD":"â……","caps":"∩︀","caret":"â","caron":"ˇ","Cayleys":"â„­","ccaps":"â©","Ccaron":"ÄŒ","ccaron":"Ä","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"â©","Cdot":"ÄŠ","cdot":"Ä‹","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"ð” ","Cfr":"â„­","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"âŠ","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"â—‹","cirE":"⧃","cire":"≗","cirfnint":"â¨","cirmid":"⫯","cirscir":"â§‚","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"â€","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"â©´","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"âˆ","compfn":"∘","complement":"âˆ","complexes":"â„‚","cong":"≅","congdot":"â©­","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"ð•”","Copf":"â„‚","coprod":"âˆ","Coproduct":"âˆ","copy":"©","COPY":"©","copysr":"â„—","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"ð’ž","cscr":"ð’¸","csub":"â«","csube":"â«‘","csup":"â«","csupe":"â«’","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"â‰","cup":"∪","Cup":"â‹“","cupcup":"⩊","cupdot":"âŠ","cupor":"â©…","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"â‹","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"â‹","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"â€","Dashv":"⫤","dashv":"⊣","dbkarow":"â¤","dblac":"Ë","Dcaron":"ÄŽ","dcaron":"Ä","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"â……","dd":"â…†","DDotrahd":"⤑","ddotseq":"â©·","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"ð”‡","dfr":"ð”¡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"Ë™","DiacriticalDoubleAcute":"Ë","DiacriticalGrave":"`","DiacriticalTilde":"Ëœ","diam":"â‹„","diamond":"â‹„","Diamond":"â‹„","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"â…†","digamma":"Ï","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"Ñ’","dlcorn":"⌞","dlcrop":"âŒ","dollar":"$","Dopf":"ð”»","dopf":"ð••","Dot":"¨","dot":"Ë™","DotDot":"⃜","doteq":"â‰","doteqdot":"≑","DotEqual":"â‰","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"â‡","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"Ì‘","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"â¥","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"â‡","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"â¤","drcorn":"⌟","drcrop":"⌌","Dscr":"ð’Ÿ","dscr":"ð’¹","DScy":"Ð…","dscy":"Ñ•","dsol":"â§¶","Dstrok":"Ä","dstrok":"Ä‘","dtdot":"⋱","dtri":"â–¿","dtrif":"â–¾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Ð","dzcy":"ÑŸ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"â©®","Ecaron":"Äš","ecaron":"Ä›","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"Ñ","eDDot":"â©·","Edot":"Ä–","edot":"Ä—","eDot":"≑","ee":"â…‡","efDot":"≒","Efr":"ð”ˆ","efr":"ð”¢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"â§","ell":"â„“","els":"⪕","elsdot":"⪗","Emacr":"Ä’","emacr":"Ä“","empty":"∅","emptyset":"∅","EmptySmallSquare":"â—»","emptyv":"∅","EmptyVerySmallSquare":"â–«","emsp13":" ","emsp14":" ","emsp":" ","ENG":"ÅŠ","eng":"Å‹","ensp":" ","Eogon":"Ę","eogon":"Ä™","Eopf":"ð”¼","eopf":"ð•–","epar":"â‹•","eparsl":"â§£","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"â§¥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"â„°","esdot":"â‰","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ã","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"â„°","exponentiale":"â…‡","ExponentialE":"â…‡","fallingdotseq":"≒","Fcy":"Ф","fcy":"Ñ„","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"ð”‰","ffr":"ð”£","filig":"ï¬","FilledSmallSquare":"â—¼","FilledVerySmallSquare":"â–ª","fjlig":"fj","flat":"â™­","fllig":"fl","fltns":"â–±","fnof":"Æ’","Fopf":"ð”½","fopf":"ð•—","forall":"∀","ForAll":"∀","fork":"â‹”","forkv":"â«™","Fouriertrf":"ℱ","fpartint":"â¨","frac12":"½","frac13":"â…“","frac14":"¼","frac15":"â…•","frac16":"â…™","frac18":"â…›","frac23":"â…”","frac25":"â…–","frac34":"¾","frac35":"â…—","frac38":"â…œ","frac45":"â…˜","frac56":"â…š","frac58":"â…","frac78":"â…ž","frasl":"â„","frown":"⌢","fscr":"ð’»","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ïœ","gammad":"Ï","gap":"⪆","Gbreve":"Äž","gbreve":"ÄŸ","Gcedil":"Ä¢","Gcirc":"Äœ","gcirc":"Ä","Gcy":"Г","gcy":"г","Gdot":"Ä ","gdot":"Ä¡","ge":"≥","gE":"≧","gEl":"⪌","gel":"â‹›","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"ð”Š","gfr":"ð”¤","gg":"≫","Gg":"â‹™","ggg":"â‹™","gimel":"â„·","GJcy":"Ѓ","gjcy":"Ñ“","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"â‹§","Gopf":"ð”¾","gopf":"ð•˜","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"â‹›","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"ð’¢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"âª","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"â‹—","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"â‹—","gtreqless":"â‹›","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"â„‹","HARDcy":"Ъ","hardcy":"ÑŠ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"â„","Hcirc":"Ĥ","hcirc":"Ä¥","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"ð”¥","Hfr":"ℌ","HilbertSpace":"â„‹","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"ð•™","Hopf":"â„","horbar":"―","HorizontalLine":"─","hscr":"ð’½","Hscr":"â„‹","hslash":"â„","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"â‰","hybull":"âƒ","hyphen":"â€","Iacute":"Ã","iacute":"í","ic":"â£","Icirc":"ÃŽ","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"ð”¦","Ifr":"â„‘","Igrave":"ÃŒ","igrave":"ì","ii":"â…ˆ","iiiint":"⨌","iiint":"∭","iinfin":"â§œ","iiota":"â„©","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"Ä«","image":"â„‘","ImaginaryI":"â…ˆ","imagline":"â„","imagpart":"â„‘","imath":"ı","Im":"â„‘","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"â„…","in":"∈","infin":"∞","infintie":"â§","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"â‹‚","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"â£","InvisibleTimes":"â¢","IOcy":"Ð","iocy":"Ñ‘","Iogon":"Ä®","iogon":"į","Iopf":"ð•€","iopf":"ð•š","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"ð’¾","Iscr":"â„","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"â‹´","isinsv":"⋳","isinv":"∈","it":"â¢","Itilde":"Ĩ","itilde":"Ä©","Iukcy":"І","iukcy":"Ñ–","Iuml":"Ã","iuml":"ï","Jcirc":"Ä´","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"ð”","jfr":"ð”§","jmath":"È·","Jopf":"ð•","jopf":"ð•›","Jscr":"ð’¥","jscr":"ð’¿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"Ñ”","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"Ä·","Kcy":"К","kcy":"к","Kfr":"ð”Ž","kfr":"ð”¨","kgreen":"ĸ","KHcy":"Ð¥","khcy":"Ñ…","KJcy":"ÐŒ","kjcy":"Ñœ","Kopf":"ð•‚","kopf":"ð•œ","Kscr":"ð’¦","kscr":"ð“€","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"â„’","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"â„’","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"â†","Larr":"↞","lArr":"â‡","larrfs":"â¤","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"â²","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"â¦","lbrkslu":"â¦","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ä»","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"â†","LeftArrow":"â†","Leftarrow":"â‡","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"â‹‹","LeftTriangleBar":"â§","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"â©¿","lesdoto":"âª","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"â‹–","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"ð”","lfr":"ð”©","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"â–„","LJcy":"Љ","ljcy":"Ñ™","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"â—º","Lmidot":"Ä¿","lmidot":"Å€","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"ð•ƒ","lopf":"ð•","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"â—Š","lozenge":"â—Š","lozf":"â§«","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"‎","lrtri":"⊿","lsaquo":"‹","lscr":"ð“","Lscr":"â„’","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"âª","lsimg":"âª","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Å","lstrok":"Å‚","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"â‹–","lthree":"â‹‹","ltimes":"⋉","ltlarr":"⥶","ltquest":"â©»","ltri":"â—ƒ","ltrie":"⊴","ltrif":"â—‚","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"â–®","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":"âŸ","Mellintrf":"ℳ","Mfr":"ð”","mfr":"ð”ª","mho":"â„§","micro":"µ","midast":"*","midcir":"â«°","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"â«›","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"ð•„","mopf":"ð•ž","mp":"∓","mscr":"ð“‚","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"Å„","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"â™®","naturals":"â„•","natur":"â™®","nbsp":" ","nbump":"≎̸","nbumpe":"â‰Ì¸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Å…","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"â©‚","Ncy":"Ð","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"â‰Ì¸","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"ð”‘","nfr":"ð”«","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"Ñš","nlarr":"↚","nlArr":"â‡","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"â‡","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"â ","NonBreakingSpace":" ","nopf":"ð•Ÿ","Nopf":"â„•","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"â‰Ì¸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"â‹·","notinvc":"â‹¶","NotLeftTriangleBar":"â§Ì¸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"â‹ ","NotReverseElement":"∌","NotRightTriangleBar":"â§Ì¸","NotRightTriangle":"â‹«","NotRightTriangleEqual":"â‹­","NotSquareSubset":"âŠÌ¸","NotSquareSubsetEqual":"â‹¢","NotSquareSuperset":"âŠÌ¸","NotSquareSupersetEqual":"â‹£","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"âŠ","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"â‹¡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"â‰","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"â‹ ","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"â‡","nrarrw":"â†Ì¸","nrightarrow":"↛","nRightarrow":"â‡","nrtri":"â‹«","nrtrie":"â‹­","nsc":"âŠ","nsccue":"â‹¡","nsce":"⪰̸","Nscr":"ð’©","nscr":"ð“ƒ","nshortmid":"∤","nshortparallel":"∦","nsim":"â‰","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"â‹¢","nsqsupe":"â‹£","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"âŠ","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"â‹«","ntrianglerighteq":"â‹­","Nu":"Î","nu":"ν","num":"#","numero":"â„–","numsp":" ","nvap":"â‰âƒ’","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"â§ž","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"âŠ","Odblac":"Å","odblac":"Å‘","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Å’","oelig":"Å“","ofcir":"⦿","Ofr":"ð”’","ofr":"ð”¬","ogon":"Ë›","Ograve":"Ã’","ograve":"ò","ogt":"â§","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"â§€","Omacr":"ÅŒ","omacr":"Å","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"ð•†","oopf":"ð• ","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"â©”","or":"∨","ord":"â©","order":"â„´","orderof":"â„´","ordf":"ª","ordm":"º","origof":"⊶","oror":"â©–","orslope":"â©—","orv":"â©›","oS":"Ⓢ","Oscr":"ð’ª","oscr":"â„´","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"âž","OverBracket":"⎴","OverParenthesis":"âœ","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"ð”“","pfr":"ð”­","Phi":"Φ","phi":"φ","phiv":"Ï•","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"Ï€","pitchfork":"â‹”","piv":"Ï–","planck":"â„","planckh":"ℎ","plankv":"â„","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"ð•¡","Popf":"â„™","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"â„™","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"âˆ","Product":"âˆ","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"âˆ","Proportional":"âˆ","Proportion":"∷","propto":"âˆ","prsim":"≾","prurel":"⊰","Pscr":"ð’«","pscr":"ð“…","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"ð””","qfr":"ð”®","qint":"⨌","qopf":"ð•¢","Qopf":"ℚ","qprime":"â—","Qscr":"ð’¬","qscr":"ð“†","quaternions":"â„","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Å”","racute":"Å•","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"â†","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"â¤","rBarr":"â¤","RBarr":"â¤","rbbrk":"â³","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"â¦","Rcaron":"Ř","rcaron":"Å™","Rcedil":"Å–","rcedil":"Å—","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"Ñ€","rdca":"⤷","rdldhar":"⥩","rdquo":"â€","rdquor":"â€","rdsh":"↳","real":"ℜ","realine":"â„›","realpart":"ℜ","reals":"â„","Re":"ℜ","rect":"â–­","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"ð”¯","Rfr":"ℜ","rHar":"⥤","rhard":"â‡","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"Ï","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"â¥","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"â‡","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"â†","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"â§","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"â¥","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"Ëš","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"â€","rmoustache":"⎱","rmoust":"⎱","rnmid":"â«®","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"ð•£","Ropf":"â„","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"ð“‡","Rscr":"â„›","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"â–¹","rtrie":"⊵","rtrif":"â–¸","rtriltri":"â§Ž","RuleDelayed":"â§´","ruluhar":"⥨","rx":"℞","Sacute":"Åš","sacute":"Å›","sbquo":"‚","scap":"⪸","Scaron":"Å ","scaron":"Å¡","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Åž","scedil":"ÅŸ","Scirc":"Åœ","scirc":"Å","scnap":"⪺","scnE":"⪶","scnsim":"â‹©","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"Ñ","sdotb":"⊡","sdot":"â‹…","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"ð”–","sfr":"ð”°","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"â†","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"Ï‚","sigmav":"Ï‚","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"âª","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"â†","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ÑŒ","solbar":"⌿","solb":"â§„","sol":"/","Sopf":"ð•Š","sopf":"ð•¤","spades":"â™ ","spadesuit":"â™ ","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"âŠ","sqsube":"⊑","sqsubset":"âŠ","sqsubseteq":"⊑","sqsup":"âŠ","sqsupe":"⊒","sqsupset":"âŠ","sqsupseteq":"⊒","square":"â–¡","Square":"â–¡","SquareIntersection":"⊓","SquareSubset":"âŠ","SquareSubsetEqual":"⊑","SquareSuperset":"âŠ","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"â–ª","squ":"â–¡","squf":"â–ª","srarr":"→","Sscr":"ð’®","sscr":"ð“ˆ","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"Ï•","strns":"¯","sub":"⊂","Sub":"â‹","subdot":"⪽","subE":"â«…","sube":"⊆","subedot":"⫃","submult":"â«","subnE":"â«‹","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"â‹","subseteq":"⊆","subseteqq":"â«…","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"â«‹","subsim":"⫇","subsub":"â«•","subsup":"â«“","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"â‹©","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"â‹‘","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"â«„","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"â«—","suplarr":"⥻","supmult":"â«‚","supnE":"⫌","supne":"⊋","supplus":"â«€","supset":"⊃","Supset":"â‹‘","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"â«”","supsup":"â«–","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"Ï„","tbrk":"⎴","Tcaron":"Ť","tcaron":"Å¥","Tcedil":"Å¢","tcedil":"Å£","Tcy":"Т","tcy":"Ñ‚","tdot":"⃛","telrec":"⌕","Tfr":"ð”—","tfr":"ð”±","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"Ï‘","thetav":"Ï‘","thickapprox":"≈","thicksim":"∼","ThickSpace":"âŸâ€Š","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"Ëœ","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"ð•‹","topf":"ð•¥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"â„¢","TRADE":"â„¢","triangle":"â–µ","triangledown":"â–¿","triangleleft":"â—ƒ","trianglelefteq":"⊴","triangleq":"≜","triangleright":"â–¹","trianglerighteq":"⊵","tridot":"â—¬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"â§","tritime":"⨻","trpezium":"â¢","Tscr":"ð’¯","tscr":"ð“‰","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"Ñ›","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"ÐŽ","ubrcy":"Ñž","Ubreve":"Ŭ","ubreve":"Å­","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"ð”˜","ufr":"ð”²","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"â–€","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"âŒ","ultri":"â—¸","Umacr":"Ū","umacr":"Å«","uml":"¨","UnderBar":"_","UnderBrace":"âŸ","UnderBracket":"⎵","UnderParenthesis":"â","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"ð•Œ","uopf":"ð•¦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"Ï…","Upsi":"Ï’","upsih":"Ï’","Upsilon":"Î¥","upsilon":"Ï…","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"âŒ","urcorner":"âŒ","urcrop":"⌎","Uring":"Å®","uring":"ů","urtri":"â—¹","Uscr":"ð’°","uscr":"ð“Š","utdot":"â‹°","Utilde":"Ũ","utilde":"Å©","utri":"â–µ","utrif":"â–´","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"Ï•","varpi":"Ï–","varpropto":"âˆ","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"Ï‚","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"Ï‘","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"â««","vBarv":"â«©","Vcy":"Ð’","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"â‹","veeeq":"≚","vellip":"â‹®","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"â˜","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"ð”™","vfr":"ð”³","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"ð•","vopf":"ð•§","vprop":"âˆ","vrtri":"⊳","Vscr":"ð’±","vscr":"ð“‹","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Å´","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"â‹€","wedgeq":"≙","weierp":"℘","Wfr":"ð”š","wfr":"ð”´","Wopf":"ð•Ž","wopf":"ð•¨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"ð’²","wscr":"ð“Œ","xcap":"â‹‚","xcirc":"â—¯","xcup":"⋃","xdtri":"â–½","Xfr":"ð”›","xfr":"ð”µ","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"â‹»","xodot":"⨀","Xopf":"ð•","xopf":"ð•©","xoplus":"â¨","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"ð’³","xscr":"ð“","xsqcup":"⨆","xuplus":"⨄","xutri":"â–³","xvee":"â‹","xwedge":"â‹€","Yacute":"Ã","yacute":"ý","YAcy":"Я","yacy":"Ñ","Ycirc":"Ŷ","ycirc":"Å·","Ycy":"Ы","ycy":"Ñ‹","yen":"Â¥","Yfr":"ð”œ","yfr":"ð”¶","YIcy":"Ї","yicy":"Ñ—","Yopf":"ð•","yopf":"ð•ª","Yscr":"ð’´","yscr":"ð“Ž","YUcy":"Ю","yucy":"ÑŽ","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Å»","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"ð”·","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"â‡","zopf":"ð•«","Zopf":"ℤ","Zscr":"ð’µ","zscr":"ð“","zwj":"â€","zwnj":"‌"}')},23195:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Ã","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Ã…","aring":"Ã¥","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ã","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Ã","iacute":"í","Icirc":"ÃŽ","icirc":"î","iexcl":"¡","Igrave":"ÃŒ","igrave":"ì","iquest":"¿","Iuml":"Ã","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ã’","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"­","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ã","yacute":"ý","yen":"Â¥","yuml":"ÿ"}')},61210:e=>{"use strict";e.exports=JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}')},42968:e=>{"use strict";e.exports=JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}')},23042:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Ã","aacute":"á","Abreve":"Ä‚","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"Ð","acy":"а","AElig":"Æ","aelig":"æ","af":"â¡","Afr":"ð”„","afr":"ð”ž","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ä€","amacr":"Ä","amalg":"⨿","amp":"&","AMP":"&","andand":"â©•","And":"â©“","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"â¦","angsph":"∢","angst":"Ã…","angzarr":"â¼","Aogon":"Ä„","aogon":"Ä…","Aopf":"ð”¸","aopf":"ð•’","apacir":"⩯","ap":"≈","apE":"â©°","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"â¡","approx":"≈","approxeq":"≊","Aring":"Ã…","aring":"Ã¥","Ascr":"ð’œ","ascr":"ð’¶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"â‰","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"â‹","Backslash":"∖","Barv":"â«§","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Î’","beta":"β","beth":"â„¶","between":"≬","Bfr":"ð”…","bfr":"ð”Ÿ","bigcap":"â‹‚","bigcirc":"â—¯","bigcup":"⋃","bigodot":"⨀","bigoplus":"â¨","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"â–½","bigtriangleup":"â–³","biguplus":"⨄","bigvee":"â‹","bigwedge":"â‹€","bkarow":"â¤","blacklozenge":"â§«","blacksquare":"â–ª","blacktriangle":"â–´","blacktriangledown":"â–¾","blacktriangleleft":"â—‚","blacktriangleright":"â–¸","blank":"â£","blk12":"â–’","blk14":"â–‘","blk34":"â–“","block":"â–ˆ","bne":"=⃥","bnequiv":"≡⃥","bNot":"â«­","bnot":"âŒ","Bopf":"ð”¹","bopf":"ð•“","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"â”","boxdL":"â••","boxDl":"â•–","boxDL":"â•—","boxdr":"┌","boxdR":"â•’","boxDr":"â•“","boxDR":"â•”","boxh":"─","boxH":"â•","boxhd":"┬","boxHd":"╤","boxhD":"â•¥","boxHD":"╦","boxhu":"â”´","boxHu":"â•§","boxhU":"╨","boxHU":"â•©","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"â•›","boxUl":"╜","boxUL":"â•","boxur":"â””","boxuR":"╘","boxUr":"â•™","boxUR":"╚","boxv":"│","boxV":"â•‘","boxvh":"┼","boxvH":"╪","boxVh":"â•«","boxVH":"╬","boxvl":"┤","boxvL":"â•¡","boxVl":"â•¢","boxVL":"â•£","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"â• ","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"ð’·","Bscr":"ℬ","bsemi":"â","bsim":"∽","bsime":"â‹","bsolb":"â§…","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"â‰","Bumpeq":"≎","bumpeq":"â‰","Cacute":"Ć","cacute":"ć","capand":"â©„","capbrcup":"⩉","capcap":"â©‹","cap":"∩","Cap":"â‹’","capcup":"⩇","capdot":"â©€","CapitalDifferentialD":"â……","caps":"∩︀","caret":"â","caron":"ˇ","Cayleys":"â„­","ccaps":"â©","Ccaron":"ÄŒ","ccaron":"Ä","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"â©","Cdot":"ÄŠ","cdot":"Ä‹","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"ð” ","Cfr":"â„­","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"âŠ","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"â—‹","cirE":"⧃","cire":"≗","cirfnint":"â¨","cirmid":"⫯","cirscir":"â§‚","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"â€","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"â©´","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"âˆ","compfn":"∘","complement":"âˆ","complexes":"â„‚","cong":"≅","congdot":"â©­","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"ð•”","Copf":"â„‚","coprod":"âˆ","Coproduct":"âˆ","copy":"©","COPY":"©","copysr":"â„—","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"ð’ž","cscr":"ð’¸","csub":"â«","csube":"â«‘","csup":"â«","csupe":"â«’","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"â‰","cup":"∪","Cup":"â‹“","cupcup":"⩊","cupdot":"âŠ","cupor":"â©…","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"â‹","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"â‹","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"â€","Dashv":"⫤","dashv":"⊣","dbkarow":"â¤","dblac":"Ë","Dcaron":"ÄŽ","dcaron":"Ä","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"â……","dd":"â…†","DDotrahd":"⤑","ddotseq":"â©·","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"ð”‡","dfr":"ð”¡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"Ë™","DiacriticalDoubleAcute":"Ë","DiacriticalGrave":"`","DiacriticalTilde":"Ëœ","diam":"â‹„","diamond":"â‹„","Diamond":"â‹„","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"â…†","digamma":"Ï","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"Ñ’","dlcorn":"⌞","dlcrop":"âŒ","dollar":"$","Dopf":"ð”»","dopf":"ð••","Dot":"¨","dot":"Ë™","DotDot":"⃜","doteq":"â‰","doteqdot":"≑","DotEqual":"â‰","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"â‡","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"Ì‘","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"â¥","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"â‡","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"â¤","drcorn":"⌟","drcrop":"⌌","Dscr":"ð’Ÿ","dscr":"ð’¹","DScy":"Ð…","dscy":"Ñ•","dsol":"â§¶","Dstrok":"Ä","dstrok":"Ä‘","dtdot":"⋱","dtri":"â–¿","dtrif":"â–¾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Ð","dzcy":"ÑŸ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"â©®","Ecaron":"Äš","ecaron":"Ä›","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"Ñ","eDDot":"â©·","Edot":"Ä–","edot":"Ä—","eDot":"≑","ee":"â…‡","efDot":"≒","Efr":"ð”ˆ","efr":"ð”¢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"â§","ell":"â„“","els":"⪕","elsdot":"⪗","Emacr":"Ä’","emacr":"Ä“","empty":"∅","emptyset":"∅","EmptySmallSquare":"â—»","emptyv":"∅","EmptyVerySmallSquare":"â–«","emsp13":" ","emsp14":" ","emsp":" ","ENG":"ÅŠ","eng":"Å‹","ensp":" ","Eogon":"Ę","eogon":"Ä™","Eopf":"ð”¼","eopf":"ð•–","epar":"â‹•","eparsl":"â§£","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"â§¥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"â„°","esdot":"â‰","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ã","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"â„°","exponentiale":"â…‡","ExponentialE":"â…‡","fallingdotseq":"≒","Fcy":"Ф","fcy":"Ñ„","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"ð”‰","ffr":"ð”£","filig":"ï¬","FilledSmallSquare":"â—¼","FilledVerySmallSquare":"â–ª","fjlig":"fj","flat":"â™­","fllig":"fl","fltns":"â–±","fnof":"Æ’","Fopf":"ð”½","fopf":"ð•—","forall":"∀","ForAll":"∀","fork":"â‹”","forkv":"â«™","Fouriertrf":"ℱ","fpartint":"â¨","frac12":"½","frac13":"â…“","frac14":"¼","frac15":"â…•","frac16":"â…™","frac18":"â…›","frac23":"â…”","frac25":"â…–","frac34":"¾","frac35":"â…—","frac38":"â…œ","frac45":"â…˜","frac56":"â…š","frac58":"â…","frac78":"â…ž","frasl":"â„","frown":"⌢","fscr":"ð’»","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ïœ","gammad":"Ï","gap":"⪆","Gbreve":"Äž","gbreve":"ÄŸ","Gcedil":"Ä¢","Gcirc":"Äœ","gcirc":"Ä","Gcy":"Г","gcy":"г","Gdot":"Ä ","gdot":"Ä¡","ge":"≥","gE":"≧","gEl":"⪌","gel":"â‹›","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"ð”Š","gfr":"ð”¤","gg":"≫","Gg":"â‹™","ggg":"â‹™","gimel":"â„·","GJcy":"Ѓ","gjcy":"Ñ“","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"â‹§","Gopf":"ð”¾","gopf":"ð•˜","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"â‹›","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"ð’¢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"âª","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"â‹—","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"â‹—","gtreqless":"â‹›","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"â„‹","HARDcy":"Ъ","hardcy":"ÑŠ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"â„","Hcirc":"Ĥ","hcirc":"Ä¥","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"ð”¥","Hfr":"ℌ","HilbertSpace":"â„‹","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"ð•™","Hopf":"â„","horbar":"―","HorizontalLine":"─","hscr":"ð’½","Hscr":"â„‹","hslash":"â„","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"â‰","hybull":"âƒ","hyphen":"â€","Iacute":"Ã","iacute":"í","ic":"â£","Icirc":"ÃŽ","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"ð”¦","Ifr":"â„‘","Igrave":"ÃŒ","igrave":"ì","ii":"â…ˆ","iiiint":"⨌","iiint":"∭","iinfin":"â§œ","iiota":"â„©","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"Ä«","image":"â„‘","ImaginaryI":"â…ˆ","imagline":"â„","imagpart":"â„‘","imath":"ı","Im":"â„‘","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"â„…","in":"∈","infin":"∞","infintie":"â§","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"â‹‚","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"â£","InvisibleTimes":"â¢","IOcy":"Ð","iocy":"Ñ‘","Iogon":"Ä®","iogon":"į","Iopf":"ð•€","iopf":"ð•š","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"ð’¾","Iscr":"â„","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"â‹´","isinsv":"⋳","isinv":"∈","it":"â¢","Itilde":"Ĩ","itilde":"Ä©","Iukcy":"І","iukcy":"Ñ–","Iuml":"Ã","iuml":"ï","Jcirc":"Ä´","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"ð”","jfr":"ð”§","jmath":"È·","Jopf":"ð•","jopf":"ð•›","Jscr":"ð’¥","jscr":"ð’¿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"Ñ”","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"Ä·","Kcy":"К","kcy":"к","Kfr":"ð”Ž","kfr":"ð”¨","kgreen":"ĸ","KHcy":"Ð¥","khcy":"Ñ…","KJcy":"ÐŒ","kjcy":"Ñœ","Kopf":"ð•‚","kopf":"ð•œ","Kscr":"ð’¦","kscr":"ð“€","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"â„’","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"â„’","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"â†","Larr":"↞","lArr":"â‡","larrfs":"â¤","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"â²","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"â¦","lbrkslu":"â¦","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ä»","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"â†","LeftArrow":"â†","Leftarrow":"â‡","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"â‹‹","LeftTriangleBar":"â§","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"â©¿","lesdoto":"âª","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"â‹–","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"ð”","lfr":"ð”©","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"â–„","LJcy":"Љ","ljcy":"Ñ™","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"â—º","Lmidot":"Ä¿","lmidot":"Å€","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"ð•ƒ","lopf":"ð•","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"â—Š","lozenge":"â—Š","lozf":"â§«","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"‎","lrtri":"⊿","lsaquo":"‹","lscr":"ð“","Lscr":"â„’","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"âª","lsimg":"âª","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Å","lstrok":"Å‚","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"â‹–","lthree":"â‹‹","ltimes":"⋉","ltlarr":"⥶","ltquest":"â©»","ltri":"â—ƒ","ltrie":"⊴","ltrif":"â—‚","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"â–®","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":"âŸ","Mellintrf":"ℳ","Mfr":"ð”","mfr":"ð”ª","mho":"â„§","micro":"µ","midast":"*","midcir":"â«°","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"â«›","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"ð•„","mopf":"ð•ž","mp":"∓","mscr":"ð“‚","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"Å„","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"â™®","naturals":"â„•","natur":"â™®","nbsp":" ","nbump":"≎̸","nbumpe":"â‰Ì¸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Å…","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"â©‚","Ncy":"Ð","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"â‰Ì¸","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"ð”‘","nfr":"ð”«","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"Ñš","nlarr":"↚","nlArr":"â‡","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"â‡","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"â ","NonBreakingSpace":" ","nopf":"ð•Ÿ","Nopf":"â„•","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"â‰Ì¸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"â‹·","notinvc":"â‹¶","NotLeftTriangleBar":"â§Ì¸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"â‹ ","NotReverseElement":"∌","NotRightTriangleBar":"â§Ì¸","NotRightTriangle":"â‹«","NotRightTriangleEqual":"â‹­","NotSquareSubset":"âŠÌ¸","NotSquareSubsetEqual":"â‹¢","NotSquareSuperset":"âŠÌ¸","NotSquareSupersetEqual":"â‹£","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"âŠ","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"â‹¡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"â‰","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"â‹ ","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"â‡","nrarrw":"â†Ì¸","nrightarrow":"↛","nRightarrow":"â‡","nrtri":"â‹«","nrtrie":"â‹­","nsc":"âŠ","nsccue":"â‹¡","nsce":"⪰̸","Nscr":"ð’©","nscr":"ð“ƒ","nshortmid":"∤","nshortparallel":"∦","nsim":"â‰","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"â‹¢","nsqsupe":"â‹£","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"âŠ","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"â‹«","ntrianglerighteq":"â‹­","Nu":"Î","nu":"ν","num":"#","numero":"â„–","numsp":" ","nvap":"â‰âƒ’","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"â§ž","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"âŠ","Odblac":"Å","odblac":"Å‘","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Å’","oelig":"Å“","ofcir":"⦿","Ofr":"ð”’","ofr":"ð”¬","ogon":"Ë›","Ograve":"Ã’","ograve":"ò","ogt":"â§","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"â§€","Omacr":"ÅŒ","omacr":"Å","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"ð•†","oopf":"ð• ","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"â©”","or":"∨","ord":"â©","order":"â„´","orderof":"â„´","ordf":"ª","ordm":"º","origof":"⊶","oror":"â©–","orslope":"â©—","orv":"â©›","oS":"Ⓢ","Oscr":"ð’ª","oscr":"â„´","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"âž","OverBracket":"⎴","OverParenthesis":"âœ","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"ð”“","pfr":"ð”­","Phi":"Φ","phi":"φ","phiv":"Ï•","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"Ï€","pitchfork":"â‹”","piv":"Ï–","planck":"â„","planckh":"ℎ","plankv":"â„","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"ð•¡","Popf":"â„™","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"â„™","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"âˆ","Product":"âˆ","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"âˆ","Proportional":"âˆ","Proportion":"∷","propto":"âˆ","prsim":"≾","prurel":"⊰","Pscr":"ð’«","pscr":"ð“…","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"ð””","qfr":"ð”®","qint":"⨌","qopf":"ð•¢","Qopf":"ℚ","qprime":"â—","Qscr":"ð’¬","qscr":"ð“†","quaternions":"â„","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Å”","racute":"Å•","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"â†","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"â¤","rBarr":"â¤","RBarr":"â¤","rbbrk":"â³","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"â¦","Rcaron":"Ř","rcaron":"Å™","Rcedil":"Å–","rcedil":"Å—","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"Ñ€","rdca":"⤷","rdldhar":"⥩","rdquo":"â€","rdquor":"â€","rdsh":"↳","real":"ℜ","realine":"â„›","realpart":"ℜ","reals":"â„","Re":"ℜ","rect":"â–­","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"ð”¯","Rfr":"ℜ","rHar":"⥤","rhard":"â‡","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"Ï","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"â¥","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"â‡","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"â†","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"â§","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"â¥","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"Ëš","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"â€","rmoustache":"⎱","rmoust":"⎱","rnmid":"â«®","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"ð•£","Ropf":"â„","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"ð“‡","Rscr":"â„›","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"â–¹","rtrie":"⊵","rtrif":"â–¸","rtriltri":"â§Ž","RuleDelayed":"â§´","ruluhar":"⥨","rx":"℞","Sacute":"Åš","sacute":"Å›","sbquo":"‚","scap":"⪸","Scaron":"Å ","scaron":"Å¡","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Åž","scedil":"ÅŸ","Scirc":"Åœ","scirc":"Å","scnap":"⪺","scnE":"⪶","scnsim":"â‹©","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"Ñ","sdotb":"⊡","sdot":"â‹…","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"ð”–","sfr":"ð”°","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"â†","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"Ï‚","sigmav":"Ï‚","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"âª","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"â†","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ÑŒ","solbar":"⌿","solb":"â§„","sol":"/","Sopf":"ð•Š","sopf":"ð•¤","spades":"â™ ","spadesuit":"â™ ","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"âŠ","sqsube":"⊑","sqsubset":"âŠ","sqsubseteq":"⊑","sqsup":"âŠ","sqsupe":"⊒","sqsupset":"âŠ","sqsupseteq":"⊒","square":"â–¡","Square":"â–¡","SquareIntersection":"⊓","SquareSubset":"âŠ","SquareSubsetEqual":"⊑","SquareSuperset":"âŠ","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"â–ª","squ":"â–¡","squf":"â–ª","srarr":"→","Sscr":"ð’®","sscr":"ð“ˆ","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"Ï•","strns":"¯","sub":"⊂","Sub":"â‹","subdot":"⪽","subE":"â«…","sube":"⊆","subedot":"⫃","submult":"â«","subnE":"â«‹","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"â‹","subseteq":"⊆","subseteqq":"â«…","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"â«‹","subsim":"⫇","subsub":"â«•","subsup":"â«“","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"â‹©","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"â‹‘","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"â«„","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"â«—","suplarr":"⥻","supmult":"â«‚","supnE":"⫌","supne":"⊋","supplus":"â«€","supset":"⊃","Supset":"â‹‘","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"â«”","supsup":"â«–","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"Ï„","tbrk":"⎴","Tcaron":"Ť","tcaron":"Å¥","Tcedil":"Å¢","tcedil":"Å£","Tcy":"Т","tcy":"Ñ‚","tdot":"⃛","telrec":"⌕","Tfr":"ð”—","tfr":"ð”±","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"Ï‘","thetav":"Ï‘","thickapprox":"≈","thicksim":"∼","ThickSpace":"âŸâ€Š","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"Ëœ","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"ð•‹","topf":"ð•¥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"â„¢","TRADE":"â„¢","triangle":"â–µ","triangledown":"â–¿","triangleleft":"â—ƒ","trianglelefteq":"⊴","triangleq":"≜","triangleright":"â–¹","trianglerighteq":"⊵","tridot":"â—¬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"â§","tritime":"⨻","trpezium":"â¢","Tscr":"ð’¯","tscr":"ð“‰","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"Ñ›","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"ÐŽ","ubrcy":"Ñž","Ubreve":"Ŭ","ubreve":"Å­","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"ð”˜","ufr":"ð”²","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"â–€","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"âŒ","ultri":"â—¸","Umacr":"Ū","umacr":"Å«","uml":"¨","UnderBar":"_","UnderBrace":"âŸ","UnderBracket":"⎵","UnderParenthesis":"â","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"ð•Œ","uopf":"ð•¦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"Ï…","Upsi":"Ï’","upsih":"Ï’","Upsilon":"Î¥","upsilon":"Ï…","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"âŒ","urcorner":"âŒ","urcrop":"⌎","Uring":"Å®","uring":"ů","urtri":"â—¹","Uscr":"ð’°","uscr":"ð“Š","utdot":"â‹°","Utilde":"Ũ","utilde":"Å©","utri":"â–µ","utrif":"â–´","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"Ï•","varpi":"Ï–","varpropto":"âˆ","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"Ï‚","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"Ï‘","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"â««","vBarv":"â«©","Vcy":"Ð’","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"â‹","veeeq":"≚","vellip":"â‹®","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"â˜","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"ð”™","vfr":"ð”³","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"ð•","vopf":"ð•§","vprop":"âˆ","vrtri":"⊳","Vscr":"ð’±","vscr":"ð“‹","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Å´","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"â‹€","wedgeq":"≙","weierp":"℘","Wfr":"ð”š","wfr":"ð”´","Wopf":"ð•Ž","wopf":"ð•¨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"ð’²","wscr":"ð“Œ","xcap":"â‹‚","xcirc":"â—¯","xcup":"⋃","xdtri":"â–½","Xfr":"ð”›","xfr":"ð”µ","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"â‹»","xodot":"⨀","Xopf":"ð•","xopf":"ð•©","xoplus":"â¨","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"ð’³","xscr":"ð“","xsqcup":"⨆","xuplus":"⨄","xutri":"â–³","xvee":"â‹","xwedge":"â‹€","Yacute":"Ã","yacute":"ý","YAcy":"Я","yacy":"Ñ","Ycirc":"Ŷ","ycirc":"Å·","Ycy":"Ы","ycy":"Ñ‹","yen":"Â¥","Yfr":"ð”œ","yfr":"ð”¶","YIcy":"Ї","yicy":"Ñ—","Yopf":"ð•","yopf":"ð•ª","Yscr":"ð’´","yscr":"ð“Ž","YUcy":"Ю","yucy":"ÑŽ","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Å»","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"ð”·","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"â‡","zopf":"ð•«","Zopf":"ℤ","Zscr":"ð’µ","zscr":"ð“","zwj":"â€","zwnj":"‌"}')},60317:e=>{"use strict";e.exports=JSON.parse('{"Aacute":"Ã","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Ã…","aring":"Ã¥","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ã","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Ã","iacute":"í","Icirc":"ÃŽ","icirc":"î","iexcl":"¡","Igrave":"ÃŒ","igrave":"ì","iquest":"¿","Iuml":"Ã","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ã’","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"­","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ã","yacute":"ý","yen":"Â¥","yuml":"ÿ"}')},51373:e=>{"use strict";e.exports=JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}')}},t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n={};(()=>{"use strict";var e=n;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"AnalysisWebWorker",{enumerable:!0,get:function(){return t.AnalysisWebWorker}}),Object.defineProperty(e,"AnalysisWorkerWrapper",{enumerable:!0,get:function(){return t.AnalysisWorkerWrapper}}),Object.defineProperty(e,"App",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(e,"Assessment",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(e,"AssessmentResult",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(e,"Assessor",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(e,"ContentAssessor",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(e,"DIFFICULTY",{enumerable:!0,get:function(){return A.DIFFICULTY}}),Object.defineProperty(e,"Factory",{enumerable:!0,get:function(){return v.default}}),Object.defineProperty(e,"Paper",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(e,"Pluggable",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(e,"SeoAssessor",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(e,"TaxonomyAssessor",{enumerable:!0,get:function(){return m.default}}),e.config=e.bundledPlugins=e.assessments=void 0,Object.defineProperty(e,"createWorker",{enumerable:!0,get:function(){return t.createWorker}}),e.values=e.markers=e.languageProcessing=e.interpreters=e.helpers=e.default=void 0;var t=r(77687),s=I(r(43947));e.assessments=s;var i=I(r(74059));e.bundledPlugins=i;var a=I(r(49061));e.helpers=a;var o=I(r(84476));e.markers=o;var l=I(r(80572));e.interpreters=l;var u=I(r(78035));e.config=u;var c=I(r(58677));e.languageProcessing=c;var d=I(r(73728));e.values=d;var h=b(r(12552)),p=b(r(25859)),f=b(r(70021)),g=b(r(63745)),m=b(r(74437)),_=b(r(20019)),y=b(r(82304)),E=b(r(73054)),T=b(r(9017)),A=r(82163),v=b(r(52453));function b(e){return e&&e.__esModule?e:{default:e}}function S(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(S=function(e){return e?r:t})(e)}function I(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=S(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=s?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}e.default={App:h.default,Assessor:p.default,ContentAssessor:f.default,TaxonomyAssessor:m.default,Pluggable:_.default,Paper:y.default,AssessmentResult:E.default,AnalysisWebWorker:t.AnalysisWebWorker,AnalysisWorkerWrapper:t.AnalysisWorkerWrapper,createWorker:t.createWorker,assessments:s,bundledPlugins:i,config:u,helpers:a,markers:o,interpreters:l,languageProcessing:c,values:d}})(),(window.yoast=window.yoast||{}).analysis=n})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysisReport.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysisReport.js new file mode 100644 index 00000000..d76365c8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/analysisReport.js @@ -0,0 +1,44 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var r in s)e.o(s,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:s[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{AnalysisList:()=>I,AnalysisResult:()=>R,ContentAnalysis:()=>A,SiteSEOReport:()=>F,renderRatingToColor:()=>w});const s=window.React;var r=e.n(s);const o=window.wp.i18n,n=window.yoast.styledComponents;var i=e.n(n);const a=window.yoast.propTypes;var l=e.n(a);const u=window.lodash.noop;var d=e.n(u);const m=window.yoast.styleGuide,p=window.lodash,g=window.yoast.componentsNew,c=window.yoast.helpers,{stripTagsFromHtmlString:h}=c.strings,B=["a","b","strong","em","i"],k=i().div` + display: grid; + grid-template-rows: 1fr; + max-width: 32px; + // This gap value is half the gap value between assessment result list items, which is 12px. + gap: 6px; +`,b=i().li` + // This is the height of the IconButtonToggle. + min-height: 24px; + margin-bottom: 12px; + padding: 0; + display: flex; + align-items: flex-start; + position: relative; + gap: 12px; +`,C=i()(g.SvgIcon)` + margin: 3px 0 0 0; +`,x=i().p` + margin: 0; + flex: 1 1 auto; + color: ${e=>e.suppressedText?"rgba(30,30,30,0.5)":"inherit"}; +`,y=({ariaLabel:e,id:t,className:r,status:o,onClick:n,isPressed:i})=>(0,s.createElement)(g.IconButtonToggle,{marksButtonStatus:o,className:r,onClick:n,id:t,icon:"eye",pressed:i,ariaLabel:e}),f=({markButtonFactory:e,...t})=>{const[r,o]=(0,s.useState)(!1),n=(0,s.useCallback)((()=>o(!1)),[]),i=(0,s.useCallback)((()=>o(!0)),[]);e=e||y;const{id:a,marker:l,hasMarksButton:u}=t;let d=null;return function(e){return!e.hasMarksButton||"hidden"===e.marksButtonStatus}(t)||(d=e({onClick:t.shouldUpsellHighlighting?i:t.onButtonClickMarks,status:t.marksButtonStatus,className:t.marksButtonClassName,id:t.buttonIdMarks,isPressed:t.pressed,ariaLabel:t.ariaLabelMarks})),(0,s.useEffect)((()=>{t.onResultChange(a,l,u)}),[a,l,u]),(0,s.createElement)(b,null,(0,s.createElement)(C,{icon:"circle",color:t.bulletColor,size:"13px"}),(0,s.createElement)(x,{suppressedText:t.suppressedText},t.hasBetaBadgeLabel&&(0,s.createElement)(g.BetaBadge,null),(0,s.createElement)("span",{dangerouslySetInnerHTML:{__html:h(t.text,B)}})),(0,s.createElement)(k,null,d,t.renderHighlightingUpsell(r,n),t.hasEditButton&&t.isPremium&&(0,s.createElement)(g.IconCTAEditButton,{className:t.editButtonClassName,onClick:t.onButtonClickEdit,id:t.buttonIdEdit,icon:"edit",ariaLabel:t.ariaLabelEdit}),t.renderAIFixesButton(t.hasAIFixes,t.id)))};f.propTypes={text:l().string.isRequired,suppressedText:l().bool,bulletColor:l().string.isRequired,hasMarksButton:l().bool.isRequired,hasEditButton:l().bool,hasAIButton:l().bool,hasAIFixes:l().bool,buttonIdMarks:l().string.isRequired,buttonIdEdit:l().string,pressed:l().bool.isRequired,ariaLabelMarks:l().string.isRequired,ariaLabelEdit:l().string,onButtonClickMarks:l().func.isRequired,onButtonClickEdit:l().func,marksButtonStatus:l().string,marksButtonClassName:l().string,markButtonFactory:l().func,editButtonClassName:l().string,hasBetaBadgeLabel:l().bool,isPremium:l().bool,onResultChange:l().func,id:l().string,marker:l().oneOfType([l().func,l().array]),shouldUpsellHighlighting:l().bool,renderHighlightingUpsell:l().func,renderAIFixesButton:l().func},f.defaultProps={suppressedText:!1,marksButtonStatus:"enabled",marksButtonClassName:"",editButtonClassName:"",hasBetaBadgeLabel:!1,hasEditButton:!1,hasAIFixes:!1,buttonIdEdit:"",ariaLabelEdit:"",onButtonClickEdit:p.noop,isPremium:!1,onResultChange:p.noop,id:"",marker:p.noop,shouldUpsellHighlighting:!1,renderHighlightingUpsell:p.noop,renderAIFixesButton:p.noop};const R=f,E=i().ul` + margin: 8px 0; + padding: 0; + list-style: none; +`;function w(e){switch(e){case"good":return m.colors.$color_good;case"OK":return m.colors.$color_ok;case"bad":return m.colors.$color_bad;default:return m.colors.$color_score_icon}}function I(e){return(0,s.createElement)(E,{role:"list"},e.results.map((t=>{const r=w(t.rating),n=t.markerId===e.marksButtonActivatedResult,i=t.id+"Mark",a=t.id+"Edit";let l="";l="disabled"===e.marksButtonStatus?(0,o.__)("Marks are disabled in current view","wordpress-seo"):n?(0,o.__)("Remove highlight from the text","wordpress-seo"):(0,o.__)("Highlight this result in the text","wordpress-seo");const u=t.editFieldName,d=""===u?"":(0,o.sprintf)( +/* Translators: %1$s refers to the name of the field that should be edited (keyphrase, meta description, + slug or SEO title). */ +(0,o.__)("Edit your %1$s","wordpress-seo"),u);return(0,s.createElement)(R,{key:t.id,id:t.id,text:t.text,marker:t.marker,bulletColor:r,hasMarksButton:t.hasMarks,hasEditButton:t.hasJumps,hasAIFixes:t.hasAIFixes,ariaLabelMarks:l,ariaLabelEdit:d,pressed:n,suppressedText:"upsell"===t.rating,buttonIdMarks:i,buttonIdEdit:a,onButtonClickMarks:()=>e.onMarksButtonClick(t.id,t.marker),onButtonClickEdit:()=>e.onEditButtonClick(t.id),marksButtonClassName:e.marksButtonClassName,editButtonClassName:e.editButtonClassName,marksButtonStatus:e.marksButtonStatus,hasBetaBadgeLabel:t.hasBetaBadge,isPremium:e.isPremium,onResultChange:e.onResultChange,markButtonFactory:e.markButtonFactory,shouldUpsellHighlighting:e.shouldUpsellHighlighting,renderAIFixesButton:e.renderAIFixesButton,renderHighlightingUpsell:e.renderHighlightingUpsell})})))}I.propTypes={results:l().array.isRequired,marksButtonActivatedResult:l().string,marksButtonStatus:l().string,marksButtonClassName:l().string,editButtonClassName:l().string,markButtonFactory:l().func,onMarksButtonClick:l().func,onEditButtonClick:l().func,isPremium:l().bool,onResultChange:l().func,shouldUpsellHighlighting:l().bool,renderHighlightingUpsell:l().func,renderAIFixesButton:l().func},I.defaultProps={marksButtonActivatedResult:"",marksButtonStatus:"enabled",marksButtonClassName:"",editButtonClassName:"",onMarksButtonClick:d(),onEditButtonClick:d(),isPremium:!1,onResultChange:d(),shouldUpsellHighlighting:!1,renderHighlightingUpsell:d(),renderAIFixesButton:d()};const v=i().div` + width: 100%; + background-color: white; + border-bottom: 1px solid transparent; // Avoid parent and child margin collapsing. +`,N=i()(g.Collapsible)` + margin-bottom: 8px; + + ${g.StyledIconsButton} { + padding: 8px 0; + color: ${m.colors.$color_blue}; + margin: -2px 8px 0 -2px; // Compensate icon size set to 18px. + } +`;class _ extends r().Component{renderCollapsible(e,t,r){return(0,s.createElement)(N,{initialIsOpen:!0,title:`${e} (${r.length})`,prefixIcon:{icon:"angle-up",color:m.colors.$color_grey_dark,size:"18px"},prefixIconCollapsed:{icon:"angle-down",color:m.colors.$color_grey_dark,size:"18px"},suffixIcon:null,suffixIconCollapsed:null,headingProps:{level:t,fontSize:"13px",fontWeight:"500",color:"#1e1e1e"}},(0,s.createElement)(I,{results:r,marksButtonActivatedResult:this.props.activeMarker,marksButtonStatus:this.props.marksButtonStatus,marksButtonClassName:this.props.marksButtonClassName,editButtonClassName:this.props.editButtonClassName,markButtonFactory:this.props.markButtonFactory,onMarksButtonClick:this.props.onMarkButtonClick,onEditButtonClick:this.props.onEditButtonClick,renderAIFixesButton:this.props.renderAIFixesButton,isPremium:this.props.isPremium,onResultChange:this.props.onResultChange,shouldUpsellHighlighting:this.props.shouldUpsellHighlighting,renderHighlightingUpsell:this.props.renderHighlightingUpsell}))}render(){const{problemsResults:e,improvementsResults:t,goodResults:r,considerationsResults:n,errorsResults:i,upsellResults:a,headingLevel:l,resultCategoryLabels:u}=this.props,d=i.length,m=e.length,p=t.length,g=n.length,c=r.length,h=a.length,B={errors:(0,o.__)("Errors","wordpress-seo"),problems:(0,o.__)("Problems","wordpress-seo"),improvements:(0,o.__)("Improvements","wordpress-seo"),considerations:(0,o.__)("Considerations","wordpress-seo"),goodResults:(0,o.__)("Good results","wordpress-seo")},k=Object.assign(B,u);return(0,s.createElement)(v,null,d>0&&this.renderCollapsible(k.errors,l,i),m+h>0&&this.renderCollapsible(k.problems,l,[...a,...e]),p>0&&this.renderCollapsible(k.improvements,l,t),g>0&&this.renderCollapsible(k.considerations,l,n),c>0&&this.renderCollapsible(k.goodResults,l,r))}}_.propTypes={onMarkButtonClick:l().func,onEditButtonClick:l().func,problemsResults:l().array,improvementsResults:l().array,goodResults:l().array,considerationsResults:l().array,errorsResults:l().array,upsellResults:l().array,headingLevel:l().number,marksButtonStatus:l().string,marksButtonClassName:l().string,markButtonFactory:l().func,editButtonClassName:l().string,activeMarker:l().string,isPremium:l().bool,resultCategoryLabels:l().shape({errors:l().string,problems:l().string,improvements:l().string,considerations:l().string,goodResults:l().string}),onResultChange:l().func,shouldUpsellHighlighting:l().bool,renderHighlightingUpsell:l().func,renderAIFixesButton:l().func},_.defaultProps={onMarkButtonClick:()=>{},onEditButtonClick:()=>{},problemsResults:[],improvementsResults:[],goodResults:[],considerationsResults:[],errorsResults:[],upsellResults:[],headingLevel:4,marksButtonStatus:"enabled",marksButtonClassName:"",markButtonFactory:null,editButtonClassName:"",activeMarker:"",isPremium:!1,resultCategoryLabels:{},onResultChange:()=>{},shouldUpsellHighlighting:!1,renderHighlightingUpsell:()=>{},renderAIFixesButton:()=>{}};const A=_,M=i().div` +`,S=i().p` + font-size: 14px; +`,H=e=>(0,s.createElement)(M,{className:e.className},(0,s.createElement)(S,{className:`${e.className}__text`},e.seoAssessmentText),(0,s.createElement)(g.StackedProgressBar,{className:"progress",items:e.seoAssessmentItems,barHeight:e.barHeight}),(0,s.createElement)(g.ScoreAssessments,{className:"assessments",items:e.seoAssessmentItems}));H.propTypes={className:l().string,seoAssessmentText:l().string,seoAssessmentItems:l().arrayOf(l().shape({html:l().string.isRequired,value:l().number.isRequired,color:l().string.isRequired})),barHeight:l().string},H.defaultProps={className:"seo-assessment",seoAssessmentText:"SEO Assessment",seoAssessmentItems:null,barHeight:"24px"};const F=H;(window.yoast=window.yoast||{}).analysisReport=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/chart.js.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/chart.js.js new file mode 100644 index 00000000..b3b36d5f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/chart.js.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function i(t){return t+.5|0}t.r(e),t.d(e,{Animation:()=>wi,Animations:()=>ki,ArcElement:()=>Dn,BarController:()=>Yi,BarElement:()=>jn,BasePlatform:()=>vs,BasicPlatform:()=>Ms,BubbleController:()=>Ui,CategoryScale:()=>Ho,Chart:()=>wn,Colors:()=>Gn,DatasetController:()=>zi,Decimation:()=>Qn,DomPlatform:()=>Fs,DoughnutController:()=>Xi,Element:()=>Bs,Filler:()=>mo,Interaction:()=>ls,Legend:()=>yo,LineController:()=>qi,LineElement:()=>In,LinearScale:()=>Yo,LogarithmicScale:()=>Go,PieController:()=>Gi,PointElement:()=>Fn,PolarAreaController:()=>Ki,RadarController:()=>Zi,RadialLinearScale:()=>sa,Scale:()=>qs,ScatterController:()=>Ji,SubTitle:()=>ko,Ticks:()=>Gt,TimeScale:()=>da,TimeSeriesScale:()=>fa,Title:()=>Mo,Tooltip:()=>Bo,_adapters:()=>is,_detectPlatform:()=>Vs,animator:()=>yi,controllers:()=>Qi,defaults:()=>ie,elements:()=>$n,layouts:()=>ys,plugins:()=>Wo,registerables:()=>pa,registry:()=>Zs,scales:()=>ga});const s=(t,e,i)=>Math.max(Math.min(t,i),e);function n(t){return s(i(2.55*t),0,255)}function o(t){return s(i(255*t),0,255)}function a(t){return s(i(t/2.55)/100,0,1)}function r(t){return s(i(100*t),0,100)}const l={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},h=[..."0123456789ABCDEF"],c=t=>h[15&t],d=t=>h[(240&t)>>4]+h[15&t],u=t=>(240&t)>>4==(15&t);const f=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function g(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function p(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function m(t,e,i){const s=g(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function b(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(et<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,P=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function D(t,e,i){if(t){let s=b(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=_(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function C(t,e){return t?Object.assign(e||{},t):t}function O(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=o(t[3]))):(e=C(t,{r:0,g:0,b:0,a:1})).a=o(e.a),e}function A(t){return"r"===t.charAt(0)?function(t){const e=k.exec(t);let i,o,a,r=255;if(e){if(e[7]!==i){const t=+e[7];r=e[8]?n(t):s(255*t,0,255)}return i=+e[1],o=+e[3],a=+e[5],i=255&(e[2]?n(i):s(i,0,255)),o=255&(e[4]?n(o):s(o,0,255)),a=255&(e[6]?n(a):s(a,0,255)),{r:i,g:o,b:a,a:r}}}(t):function(t){const e=f.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?n(+e[5]):o(+e[5]));const a=y(+e[2]),r=+e[3]/100,l=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return x(m,t,e,i)}(a,r,l):"hsv"===e[1]?function(t,e,i){return x(p,t,e,i)}(a,r,l):_(a,r,l),{r:i[0],g:i[1],b:i[2],a:s}}(t)}class T{constructor(t){if(t instanceof T)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=O(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*l[s[1]],g:255&17*l[s[2]],b:255&17*l[s[3]],a:5===o?17*l[s[4]]:255}:7!==o&&9!==o||(n={r:l[s[1]]<<4|l[s[2]],g:l[s[3]]<<4|l[s[4]],b:l[s[5]]<<4|l[s[6]],a:9===o?l[s[7]]<<4|l[s[8]]:255})),i=n||function(t){w||(w=function(){const t={},e=Object.keys(M),i=Object.keys(v);let s,n,o,a,r;for(s=0;s>16&255,o>>8&255,255&o]}return t}(),w.transparent=[0,0,0,0]);const e=w[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}(t)||A(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=C(this._rgb);return t&&(t.a=a(t.a)),t}set rgb(t){this._rgb=O(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${a(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?(t=this._rgb,e=(t=>u(t.r)&&u(t.g)&&u(t.b)&&u(t.a))(t)?c:d,t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0):void 0;var t,e}hslString(){return this._valid?function(t){if(!t)return;const e=b(t),i=e[0],s=r(e[1]),n=r(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${a(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=P(a(t.r)),n=P(a(t.g)),r=P(a(t.b));return{r:o(S(s+i*(P(a(e.r))-s))),g:o(S(n+i*(P(a(e.g))-n))),b:o(S(r+i*(P(a(e.b))-r))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new T(this.rgb)}alpha(t){return this._rgb.a=o(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=i(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return D(this._rgb,2,t),this}darken(t){return D(this._rgb,2,-t),this}saturate(t){return D(this._rgb,1,t),this}desaturate(t){return D(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=b(t);i[0]=y(i[0]+e),i=_(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function L(){}const E=(()=>{let t=0;return()=>t++})();function R(t){return null==t}function I(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function z(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function F(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function V(t,e){return F(t)?t:e}function B(t,e){return void 0===t?e:t}const W=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function N(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function H(t,e,i,s){let n,o,a;if(I(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;nt,x:t=>t.x,y:t=>t.y};function Z(t,e){const i=G[e]||(G[e]=function(t){const e=function(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function J(t){return t.charAt(0).toUpperCase()+t.slice(1)}const Q=t=>void 0!==t,tt=t=>"function"==typeof t,et=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0},it=Math.PI,st=2*it,nt=st+it,ot=Number.POSITIVE_INFINITY,at=it/180,rt=it/2,lt=it/4,ht=2*it/3,ct=Math.log10,dt=Math.sign;function ut(t,e,i){return Math.abs(t-e)l&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Pt(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const Dt=(t,e,i,s)=>Pt(t,i,s?s=>{const n=t[s][e];return nt[s][e]Pt(t,i,(s=>t[s][e]>=i)),Ot=["push","pop","shift","splice","unshift"];function At(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(Ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function Tt(t){const e=new Set;let i,s;for(i=0,s=t.length;i{s=!1,t.apply(e,i)})))}}const Rt=t=>"start"===t?"left":"end"===t?"right":"center",It=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2;function zt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=kt(Math.min(Dt(r,a.axis,h).lo,i?s:Dt(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?kt(Math.max(Dt(r,a.axis,c,!0).hi+1,i?0:Dt(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function Ft(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}const Vt=t=>0===t||1===t,Bt=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*st/i),Wt=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*st/i)+1,Nt={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*rt),easeOutSine:t=>Math.sin(t*rt),easeInOutSine:t=>-.5*(Math.cos(it*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Vt(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Vt(t)?t:Bt(t,.075,.3),easeOutElastic:t=>Vt(t)?t:Wt(t,.075,.3),easeInOutElastic(t){const e=.1125;return Vt(t)?t:t<.5?.5*Bt(2*t,e,.45):.5+.5*Wt(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Nt.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*Nt.easeInBounce(2*t):.5*Nt.easeOutBounce(2*t-1)+.5};function Ht(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function jt(t){return Ht(t)?t:new T(t)}function $t(t){return Ht(t)?t:new T(t).saturate(.5).darken(.1).hexString()}const Yt=["x","y","borderWidth","radius","tension"],Ut=["color","borderColor","backgroundColor"],Xt=new Map;function qt(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=Xt.get(i);return s||(s=new Intl.NumberFormat(t,e),Xt.set(i,s)),s}(e,i).format(t)}const Kt={values:t=>I(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;return Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t)),i}(t,i)}const a=ct(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),qt(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(ct(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?Kt.numeric.call(this,t,e,i):""}};var Gt={formatters:Kt};const Zt=Object.create(null),Jt=Object.create(null);function Qt(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>$t(e.backgroundColor),this.hoverBorderColor=(t,e)=>$t(e.borderColor),this.hoverColor=(t,e)=>$t(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return te(this,t,e)}get(t){return Qt(this,t)}describe(t,e){return te(Jt,t,e)}override(t,e){return te(Zt,t,e)}route(t,e,i,s){const n=Qt(this,t),o=Qt(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return z(t)?Object.assign({},e,t):B(t,e)},set(t){this[a]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ie=new ee({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:Ut},numbers:{type:"number",properties:Yt}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Gt.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function se(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function ne(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,h,c,d,u;for(l=0;li.length){for(l=0;l0&&t.stroke()}}function he(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==o.strokeColor;let l,h;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),R(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),l=0;l+t||0;function Me(t,e){const i={},s=z(e),n=s?Object.keys(e):e,o=z(t)?s?i=>B(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=ve(o(t));return i}function we(t){return Me(t,{top:"y",right:"x",bottom:"y",left:"x"})}function ke(t){return Me(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Se(t){const e=we(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Pe(t,e){t=t||{},e=e||ie.font;let i=B(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=B(t.style,e.style);s&&!(""+s).match(_e)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:B(t.family,e.family),lineHeight:ye(B(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:B(t.weight,e.weight),string:""};return n.string=function(t){return!t||R(t.size)||R(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n}function De(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;nt[0])){Q(s)||(s=We("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>Oe([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Re(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=We(Le(o,t),i),Q(n))return Ee(t,n)?Ve(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>Ne(t).includes(e),ownKeys:t=>Ne(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function Ae(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Te(t,s),setContext:e=>Ae(t,e,i,s),override:n=>Ae(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Re(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];return tt(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);return r.add(t),e=e(o,a||s),r.delete(t),Ee(t,e)&&(e=Ve(n._scopes,n,t,e)),e}(e,r,t,i)),I(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(Q(o.index)&&s(t))e=e[o.index%e.length];else if(z(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=Ve(s,n,t,l);e.push(Ae(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable)),Ee(e,r)&&(r=Ae(r,n,o&&o[e],a)),r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Te(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:tt(i)?i:()=>i,isIndexable:tt(s)?s:()=>s}}const Le=(t,e)=>t?t+J(e):e,Ee=(t,e)=>z(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Re(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Ie(t,e,i){return tt(t)?t(e,i):t}const ze=(t,e)=>!0===t?e:"string"==typeof t?Z(e,t):void 0;function Fe(t,e,i,s,n){for(const o of e){const e=ze(i,o);if(e){t.add(e);const o=Ie(e._fallback,i,n);if(Q(o)&&o!==i&&o!==s)return o}else if(!1===e&&Q(s)&&i!==s)return null}return!1}function Ve(t,e,i,s){const n=e._rootScopes,o=Ie(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let l=Be(r,a,i,o||i,s);return null!==l&&(!Q(o)||o===i||(l=Be(r,a,o,l,s),null!==l))&&Oe(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];return I(n)&&z(i)?i:n||{}}(e,i,s)))}function Be(t,e,i,s,n){for(;i;)i=Fe(t,e,i,s,n);return i}function We(t,e){for(const i of e){if(!i)continue;const e=i[t];if(Q(e))return e}}function Ne(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function He(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function Ue(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=yt(o,n),l=yt(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Xe(t,e,i){return Math.max(Math.min(t,i),e)}function qe(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)!function(t,e="x"){const i=Ye(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=$e(t,0);for(a=0;at.ownerDocument.defaultView.getComputedStyle(t,null),Qe=["top","right","bottom","left"];function ti(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=Qe[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const ei=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ii(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=Je(i),o="border-box"===n.boxSizing,a=ti(n,"padding"),r=ti(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(ei(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const si=t=>Math.round(10*t)/10;function ni(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const oi=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function ai(t,e){const i=function(t,e){return Je(t).getPropertyValue(e)}(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function ri(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function li(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function hi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=ri(t,n,i),r=ri(n,o,i),l=ri(o,e,i),h=ri(a,r,i),c=ri(r,l,i);return ri(h,c,i)}function ci(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function di(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function ui(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function fi(t){return"angle"===t?{between:wt,compare:vt,normalize:Mt}:{between:St,compare:(t,e)=>t-e,normalize:t=>t}}function gi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function pi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=fi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=fi(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hs({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=Lt.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var yi=new _i;const vi="transparent",Mi={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=jt(t||vi),n=s.valid&&jt(e||vi);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class wi{constructor(t,e,i,s){const n=e[i];s=De([t.to,s,n,t.from]);const o=De([t.from,n,s]);this._active=!0,this._fn=t.fn||Mi[t.type||typeof o],this._easing=Nt[t.easing]||Nt.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=De([t.to,e,s,t.from]),this._from=De([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const n=t[s];if(!z(n))return;const o={};for(const t of e)o[t]=n[t];(I(n.properties)&&n.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,o)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(i)return i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}})),i;t.options=e}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new wi(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(yi.add(this._chart,i),!0):void 0}}function Si(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Pi(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Ti(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Ei(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Ri=t=>"reset"===t||"none"===t,Ii=(t,e)=>e?t:Object.assign({},t);class zi{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Ci(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Ei(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=B(i.xAxisID,Li(t,"x")),o=e.yAxisID=B(i.yAxisID,Li(t,"y")),a=e.rAxisID=B(i.rAxisID,Li(t,"r")),r=e.indexAxis,l=e.iAxisID=s(r,n,o,a),h=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&At(this._data,this),t._stacked&&Ei(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(z(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s{const e="_onData"+J(t),i=s[t];Object.defineProperty(s,t,{configurable:!0,enumerable:!1,value(...t){const n=i.apply(this,t);return s._chartjs.listeners.forEach((i=>{"function"==typeof i[e]&&i[e](...t)})),n}})})))),this._syncList=[],this._data=e}var s}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=Ci(e.vScale,e),e.stack!==i.stack&&(s=!0,Ei(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&Ti(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,a=n.axis;let r,l,h,c=0===t&&e===s.length||i._sorted,d=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,h=s;else{h=I(s[t])?this.parseArrayData(i,s,t,e):z(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===l[a]||d&&l[a]t&&!e.hidden&&e._stacked&&{keys:Pi(i,!0),values:null})(e,i,this.chart),l={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!F(u[t.axis])||h>e||c=0;--d)if(!f()){this.updateRangeFromParsed(l,t,u,r);break}return l}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ii(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new ki(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ri(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Ri(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ri(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;at-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(Q(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Bi(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.baset.controller.options.grouped)),n=i.options.stacked,o=[],a=t=>{const i=t.controller.getParsed(e),s=i&&i[t.vScale.axis];if(R(s)||isNaN(s))return!0};for(const i of s)if((void 0===e||!a(i))&&((!1===n||-1===o.indexOf(i.stack)||void 0===n&&void 0===i.stack)&&o.push(i.stack),i.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(d,e,a)*o,u===a&&(m-=d/2);const t=e.getPixelForDecimal(0),n=e.getPixelForDecimal(1),l=Math.min(t,n),f=Math.max(t,n);m=Math.max(Math.min(m,f),l),c=m+d,i&&!h&&(r._stacks[e.axis]._visualValues[s]=e.getValueForPixel(c)-e.getValueForPixel(m))}if(m===e.getPixelForValue(a)){const t=dt(d)*e.getLineWidthForValue(a)/2;m+=t,d-=t}return{size:d,base:m,head:c,center:c+d/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=B(s.maxBarThickness,1/0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,l="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d"spacing"!==t,_indexable:t=>"spacing"!==t};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(z(i[t])){const{key:t="value"}=this._parsing;a=e=>+Z(i[e],t)}for(n=t,o=t+e;nwt(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>wt(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(rt,c,u),b=g(it,h,d),x=g(it+rt,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=W(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*c,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/st)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?st*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=qt(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s0&&this.getParsed(e-1);for(let i=0;i=b){x.skip=!0;continue}const y=this.getParsed(i),v=R(y[u]),M=x[d]=o.getPixelForValue(y[d],i),w=x[u]=n||v?a.getBasePixel():a.getPixelForValue(r?this.applyStack(a,y,r):y[u],i);x.skip=isNaN(M)||isNaN(w)||v,x.stop=i>0&&Math.abs(y[d]-_[d])>p,g&&(x.parsed=y,x.raw=l.data[i]),c&&(x.options=h||this.resolveDataElementOptions(i,f.active?"active":s)),m||this.updateElement(f,i,x,s),_=y}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}class Ki extends zi{static id="polarArea";static defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=qt(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return He.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*it;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?mt(this.resolveDataElementOptions(t,e).angle||i):0}}class Gi extends Xi{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}}class Zi extends zi{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return He.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let h=e;h0&&Math.abs(i[u]-x[u])>m,p&&(g.parsed=i,g.raw=l.data[h]),d&&(g.options=c||this.resolveDataElementOptions(h,e.active?"active":s)),b||this.updateElement(e,h,g,s),x=i}this.updateSharedOptions(c,s,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}var Qi=Object.freeze({__proto__:null,BarController:Yi,BubbleController:Ui,DoughnutController:Xi,LineController:qi,PolarAreaController:Ki,PieController:Gi,RadarController:Zi,ScatterController:Ji});function ts(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class es{static override(t){Object.assign(es.prototype,t)}constructor(t){this.options=t||{}}init(){}formats(){return ts()}parse(){return ts()}format(){return ts()}add(){return ts()}diff(){return ts()}startOf(){return ts()}endOf(){return ts()}}var is={_date:es};function ss(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?Ct:Dt;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function ns(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var ls={evaluateInteractionItems:ns,modes:{index(t,e,i,s){const n=ii(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?os(t,n,o,s,a):as(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ii(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?os(t,n,o,s,a):as(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tos(t,ii(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ii(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return as(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>rs(t,ii(e,t),"x",i.intersect,s),y:(t,e,i,s)=>rs(t,ii(e,t),"y",i.intersect,s)}};const hs=["left","top","right","bottom"];function cs(t,e){return t.filter((t=>t.pos===e))}function ds(t,e){return t.filter((t=>-1===hs.indexOf(t.pos)&&t.box.axis===e))}function us(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function fs(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function gs(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function ps(t,e,i,s){const{pos:n,box:o}=i,a=t.maxPadding;if(!z(n)){i.size&&(t[n]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?o.height:o.width),i.size=e.size/e.count,t[n]+=i.size}o.getPadding&&gs(a,o.getPadding());const r=Math.max(0,e.outerWidth-fs(a,t,"left","right")),l=Math.max(0,e.outerHeight-fs(a,t,"top","bottom")),h=r!==t.w,c=l!==t.h;return t.w=r,t.h=l,i.horizontal?{same:h,other:c}:{same:c,other:h}}function ms(t,e){const i=e.maxPadding;return function(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}(t?["left","right"]:["top","bottom"])}function bs(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=us(cs(e,"left"),!0),n=us(cs(e,"right")),o=us(cs(e,"top"),!0),a=us(cs(e,"bottom")),r=ds(e,"x"),l=ds(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:cs(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;H(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);gs(u,Se(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=function(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!hs.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};class vs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class Ms extends vs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ws="$chartjs",ks={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ss=t=>null===t||""===t,Ps=!!oi&&{passive:!0};function Ds(t,e,i){t.canvas.removeEventListener(e,i,Ps)}function Cs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Os(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Cs(i.addedNodes,s),e=e&&!Cs(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function As(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Cs(i.removedNodes,s),e=e&&!Cs(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const Ts=new Map;let Ls=0;function Es(){const t=window.devicePixelRatio;t!==Ls&&(Ls=t,Ts.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Rs(t,e,i){const s=t.canvas,n=s&&Ge(s);if(!n)return;const o=Et(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){Ts.size||window.addEventListener("resize",Es),Ts.set(t,e)}(t,o),a}function Is(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){Ts.delete(t),Ts.size||window.removeEventListener("resize",Es)}(t)}function zs(t,e,i){const s=t.canvas,n=Et((e=>{null!==t.ctx&&i(function(t,e){const i=ks[t.type]||t.type,{x:s,y:n}=ii(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,Ps)}(s,e,n),n}class Fs extends vs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[ws]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ss(n)){const e=ai(t,"width");void 0!==e&&(t.width=e)}if(Ss(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=ai(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[ws])return!1;const i=e[ws].initial;["height","width"].forEach((t=>{const s=i[t];R(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e[ws],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Os,detach:As,resize:Rs}[e]||zs;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];s&&(({attach:Is,detach:Is,resize:Is}[e]||Ds)(t,e,s),i[e]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return function(t,e,i,s){const n=Je(t),o=ti(n,"margin"),a=Ze(n.maxWidth,t,"clientWidth")||ot,r=Ze(n.maxHeight,t,"clientHeight")||ot,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=Ge(t);if(o){const t=o.getBoundingClientRect(),a=Je(o),r=ti(a,"border","width"),l=ti(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=Ze(a.maxWidth,o,"clientWidth"),n=Ze(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||ot,maxHeight:n||ot}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=ti(n,"border","width"),e=ti(n,"padding");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=si(Math.min(h,a,l.maxWidth)),c=si(Math.min(c,r,l.maxHeight)),h&&!c&&(c=si(h/2)),(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=si(Math.floor(c*s))),{width:h,height:c}}(t,e,i,s)}isAttached(t){const e=Ge(t);return!(!e||!e.isConnected)}}function Vs(t){return!Ke()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Ms:Fs}class Bs{static defaults={};static defaultRoutes=void 0;active=!1;tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return gt(this.x)&>(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ws(t,e,i,s,n){const o=B(s,0),a=Math.min(B(n,t.length),t.length);let r,l,h,c=0;for(i=Math.ceil(i),n&&(r=n-s,i=r/Math.floor(r/i)),h=o;h<0;)c++,h=Math.round(o+c*i);for(l=Math.max(o,0);l"top"===e||"left"===e?t[e]+i:t[e]-i,Hs=(t,e)=>Math.min(e||t,t);function js(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Ys(t){return t.drawTicks?t.tickLength:0}function Us(t,e){if(!t.display)return 0;const i=Pe(t.font,e),s=Se(t.padding);return(I(t.text)?t.text.length:1)*i.lineHeight+s.height}function Xs(t,e,i){let s=Rt(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class qs extends Bs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=V(t,Number.POSITIVE_INFINITY),e=V(e,Number.NEGATIVE_INFINITY),i=V(i,Number.POSITIVE_INFINITY),s=V(s,Number.NEGATIVE_INFINITY),{min:V(t,i),max:V(e,s),minDefined:F(t),maxDefined:F(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:V(i,V(s,i)),max:V(s,V(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){N(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=function(t,e,i){const{min:s,max:n}=t,o=W(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=an)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nt-e)).pop(),e}(s);for(let t=0,e=o.length-1;tn)return e}return Math.max(n,1)}(o,e,n);if(a>0){let t,i;const s=a>1?Math.round((l-r)/(a-1)):null;for(Ws(e,h,c,R(s)?0:r-s,r),t=0,i=a-1;t=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=kt(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ys(t.grid)-e.padding-Us(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=bt(Math.min(Math.asin(kt((h.highest.height+6)/o,-1,1)),Math.asin(kt(a/r,-1,1))-Math.asin(kt(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){N(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){N(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Us(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ys(n)+o):(t.height=this.maxHeight,t.width=Ys(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=mt(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){N(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:o[t]||0,height:a[t]||0});return{first:w(0),last:w(e-1),widest:w(v),highest:w(M),widths:o,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return kt(this._alignToPixels?oe(this.chart,e,0):e,-32768,32767)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o,border:a}=s,r=n.offset,l=this.isHorizontal(),h=this.ticks.length+(r?1:0),c=Ys(n),d=[],u=a.setContext(this.getContext()),f=u.display?u.width:0,g=f/2,p=function(t){return oe(i,t,f)};let m,b,x,_,y,v,M,w,k,S,P,D;if("top"===o)m=p(this.bottom),v=this.bottom-c,w=m-g,S=p(t.top)+g,D=t.bottom;else if("bottom"===o)m=p(this.top),S=t.top,D=p(t.bottom)-g,v=m+g,w=this.top+c;else if("left"===o)m=p(this.right),y=this.right-c,M=m-g,k=p(t.left)+g,P=t.right;else if("right"===o)m=p(this.left),k=t.left,P=p(t.right)-g,y=m+g,M=this.left+c;else if("x"===e){if("center"===o)m=p((t.top+t.bottom)/2+.5);else if(z(o)){const t=Object.keys(o)[0],e=o[t];m=p(this.chart.scales[t].getPixelForValue(e))}S=t.top,D=t.bottom,v=m+g,w=v+c}else if("y"===e){if("center"===o)m=p((t.left+t.right)/2);else if(z(o)){const t=Object.keys(o)[0],e=o[t];m=p(this.chart.scales[t].getPixelForValue(e))}y=m-g,M=y-c,k=t.left,P=t.right}const C=B(s.ticks.maxTicksLimit,h),O=Math.max(1,Math.ceil(h/C));for(b=0;be.value===t));return i>=0?e.setContext(this.getContext(i)).lineWidth:0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ie.route(o,n,l,r)}))}(e,t.defaultRoutes),t.descriptors&&ie.describe(e,t.descriptors)}(t,o,i),this.override&&ie.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ie[s]&&(delete ie[s][i],this.override&&delete Zt[i])}}class Gs{constructor(){this.controllers=new Ks(zi,"datasets",!0),this.elements=new Ks(Bs,"elements"),this.plugins=new Ks(Object,"plugins"),this.scales=new Ks(qs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):H(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=J(t);N(i["before"+s],[],i),e[t](i),N(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Qs(t,e){return e||!1!==t?!0===t?{}:t:null}function tn(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function en(t,e){const i=ie.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function sn(t,e){if("x"===t||"y"===t||"r"===t)return t;var i;if(t=e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&sn(t[0].toLowerCase(),e))return t;throw new Error(`Cannot determine type of '${name}' axis. Please provide 'axis' or 'position' option.`)}function nn(t){const e=t.options||(t.options={});e.plugins=B(e.plugins,{}),e.scales=function(t,e){const i=Zt[t.type]||{scales:{}},s=e.scales||{},n=en(t.type,e),o=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!z(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const a=sn(t,e),r=function(t,e){return t===e?"_index_":"_value_"}(a,n),l=i.scales||{};o[t]=q(Object.create(null),[{axis:a},e,l[a],l[r]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,a=i.indexAxis||en(n,e),r=(Zt[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,a),n=i[e+"AxisID"]||e;o[n]=o[n]||Object.create(null),q(o[n],[{axis:e},s[n],r[t]])}))})),Object.keys(o).forEach((t=>{const e=o[t];q(e,[ie.scales[e.type],ie.scale])})),o}(t,e)}function on(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const an=new Map,rn=new Set;function ln(t,e){let i=an.get(t);return i||(i=e(),an.set(t,i),rn.add(i)),i}const hn=(t,e,i)=>{const s=Z(e,i);void 0!==s&&t.add(s)};class cn{constructor(t){this._config=function(t){return(t=t||{}).data=on(t.data),nn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=on(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),nn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return ln(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return ln(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return ln(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return ln(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>hn(r,t,e)))),e.forEach((t=>hn(r,s,t))),e.forEach((t=>hn(r,Zt[n]||{},t))),e.forEach((t=>hn(r,ie,t))),e.forEach((t=>hn(r,Jt,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),rn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,Zt[e]||{},ie.datasets[e]||{},{type:e},ie,Jt]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:a}=dn(this._resolverCache,t,s);let r=o;(function(t,e){const{isScriptable:i,isIndexable:s}=Te(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(tt(a)||un(a))||o&&I(a))return!0}return!1})(o,e)&&(n.$shared=!1,r=Ae(o,i=tt(i)?i():i,this.createResolver(t,i,a)));for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=dn(this._resolverCache,t,i);return z(e)?Ae(n,e,void 0,s):n}}function dn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);return o||(o={resolver:Oe(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)),o}const un=t=>z(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||tt(t[i])),!1),fn=["top","bottom","left","right","chartArea"];function gn(t,e){return"top"===t||"bottom"===t||-1===fn.indexOf(t)&&"x"===e}function pn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function mn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),N(i&&i.onComplete,[t],e)}function bn(t){const e=t.chart,i=e.options.animation;N(i&&i.onProgress,[t],e)}function xn(t){return Ke()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const yn={},vn=t=>{const e=xn(t);return Object.values(yn).filter((t=>t.canvas===e)).pop()};function Mn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class wn{static defaults=ie;static instances=yn;static overrides=Zt;static registry=Zs;static version="4.2.1";static getChart=vn;static register(...t){Zs.add(...t),kn()}static unregister(...t){Zs.remove(...t),kn()}constructor(t,e){const i=this.config=new cn(e),s=xn(t),n=vn(s);if(n)throw new Error("Canvas is already in use. Chart with ID '"+n.id+"' must be destroyed before the canvas with ID '"+n.canvas.id+"' can be reused.");const o=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||Vs(s)),this.platform.updateConfig(i);const a=this.platform.acquireContext(s,o.aspectRatio),r=a&&a.canvas,l=r&&r.height,h=r&&r.width;this.id=E(),this.ctx=a,this.canvas=r,this.width=h,this.height=l,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Js,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=function(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}((t=>this.update(t)),o.resizeDelay||0),this._dataChanges=[],yn[this.id]=this,a&&r?(yi.listen(this,"complete",mn),yi.listen(this,"progress",bn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return R(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Zs}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ni(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return ae(this.canvas,this.ctx),this}stop(){return yi.stop(this),this}resize(t,e){yi.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ni(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),N(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){H(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=sn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),H(n,(e=>{const n=e.options,o=n.id,a=sn(o,n),r=B(n.type,e.dtype);void 0!==n.position&&gn(n.position,a)===gn(e.dposition)||(n.position=e.dposition),s[o]=!0;let l=null;o in i&&i[o].type===r?l=i[o]:(l=new(Zs.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[l.id]=l),l.init(n,t)})),H(s,((t,e)=>{t||delete i[e]})),H(i,(t=>{ys.configure(this,t,t.options),ys.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(pn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){H(this.scales,(t=>{ys.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);et(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e)Mn(t,s,"_removeElements"===i?-n:n)}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ys.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],H(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t){const{xScale:e,yScale:i}=t;if(e&&i)return{left:e.left,right:e.right,top:i.top,bottom:i.bottom}}(t)||this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&ce(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&de(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return he(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=ls.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ce(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);Q(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),yi.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};H(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){H(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},H(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!j(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=function(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,N(n.onHover,[t,a,this],this),r&&N(n.onClick,[t,a,this],this));const h=!j(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function kn(){return H(wn.instances,(t=>t._plugins.invalidate()))}function Sn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Pn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/it)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=function(t,e,i,s){const n=Me(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]),o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return kt(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:kt(n.innerStart,0,a),innerEnd:kt(n.innerEnd,0,a)}}(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,C=m+y/P,O=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Sn(w,S,a,r);t.arc(e.x,e.y,_,S,b+rt)}const i=Sn(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Sn(D,O,a,r);t.arc(e.x,e.y,v,b+rt,O+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Sn(P,C,a,r);t.arc(e.x,e.y,y,C+Math.PI,m-rt)}const n=Sn(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=Sn(M,k,a,r);t.arc(e.x,e.y,x,m-rt,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}class Dn extends Bs{static id="arc";static defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};static defaultRoutes={backgroundColor:"backgroundColor"};constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=_t(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:l,outerRadius:h,circumference:c}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),d=this.options.spacing/2,u=B(c,r-a)>=st||wt(n,a,r),f=St(o,l+d,h+d);return u&&f}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>st?Math.floor(i/st):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(it,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Pn(t,e,i,s,l,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+rt,s-rt),t.closePath(),t.clip()}(t,e,u),o||(Pn(t,e,i,s,u,n),t.stroke())}(t,this,r,n,o),t.restore()}}function Cn(t,e,i=e){t.lineCap=B(i.borderCapStyle,e.borderCapStyle),t.setLineDash(B(i.borderDash,e.borderDash)),t.lineDashOffset=B(i.borderDashOffset,e.borderDashOffset),t.lineJoin=B(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=B(i.borderWidth,e.borderWidth),t.strokeStyle=B(i.borderColor,e.borderColor)}function On(t,e,i){t.lineTo(i.x,i.y)}function An(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function En(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i?Tn:Ln}const Rn="function"==typeof Path2D;class In extends Bs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;qe(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=function(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);return function(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=bi(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u<=t.end;u++){const r=i[u%l];e=bi(s.setContext(Ce(n,{type:"segment",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),xi(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}dt.replace("rgb(","rgba(").replace(")",", 0.5)")));function Xn(t){return Yn[t%Yn.length]}function qn(t){return Un[t%Un.length]}function Kn(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Gn={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n;if(!i.forceOverride&&(Kn(s)||(a=n)&&(a.borderColor||a.backgroundColor)||o&&Kn(o)))return;var a;const r=function(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof Xi?e=function(t,e){return t.backgroundColor=t.data.map((()=>Xn(e++))),e}(i,e):n instanceof Ki?e=function(t,e){return t.backgroundColor=t.data.map((()=>qn(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Xn(e),t.backgroundColor=qn(e),++e}(i,e))}}(t);s.forEach(r)}};function Zn(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Jn(t){t.data.datasets.forEach((t=>{Zn(t)}))}var Qn={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Jn(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:o,indexAxis:a}=e,r=t.getDatasetMeta(n),l=o||e.data;if("y"===De([a,t.options.indexAxis]))return;if(!r.controller.supportsDecimation)return;const h=t.scales[r.xAxisID];if("linear"!==h.type&&"time"!==h.type)return;if(t.options.parsing)return;let c,{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=kt(Dt(e,o.axis,a).lo,0,i-1)),s=h?kt(Dt(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(r,l);if(u<=(i.threshold||4*s))Zn(e);else{switch(R(o)&&(e._data=l,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":c=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(l,d,u,s,i);break;case"min-max":c=function(t,e,i,s){let n,o,a,r,l,h,c,d,u,f,g=0,p=0;const m=[],b=e+i-1,x=t[e].x,_=t[b].x-x;for(n=e;nf&&(f=r,c=n),g=(p*g+o.x)/++p;else{const i=n-1;if(!R(h)&&!R(c)){const e=Math.min(h,c),s=Math.max(h,c);e!==d&&e!==i&&m.push({...t[e],x:g}),s!==d&&s!==i&&m.push({...t[s],x:g})}n>0&&i!==d&&m.push(t[i]),m.push(o),l=e,p=0,u=f=r,h=c=d=n}}return m}(l,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=c}}))},destroy(t){Jn(t)}};function to(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=Mt(n),o=Mt(o)),{property:t,start:n,end:o}}function eo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function io(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function so(t,e){let i=[],s=!1;return I(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=eo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new In({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function no(t){return t&&!1!==t.fill}function oo(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!F(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function ao(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=B(i&&i.target,i);return void 0===s&&(s=!!e.backgroundColor),!1!==s&&null!==s&&(!0===s?"origin":s)}(t);if(z(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return F(n)&&Math.floor(n)===n?function(t,e,i,s){return"-"!==t&&"+"!==t||(i=e+i),!(i===e||i<0||i>=s)&&i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function ro(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&co(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;no(i)&&co(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;no(s)&&"beforeDatasetDraw"===i.drawTime&&co(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const bo=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class xo extends Bs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=N(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Pe(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=bo(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;return n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e))),e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;return"string"!=typeof e.text&&(s=_o(e,i)),s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=ci(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=It(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=It(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=It(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=It(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;ce(t,this),this._draw(),de(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ie.color,r=ci(t.rtl,this.left,this.width),l=Pe(o.font),{padding:h}=o,c=l.size,d=c/2;let u;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=l.string;const{boxWidth:f,boxHeight:g,itemHeight:p}=bo(o,c),m=this.isHorizontal(),b=this._computeTitleHeight();u=m?{x:It(n,this.left+h,this.right-i[0]),y:this.top+h+b,line:0}:{x:this.left+h,y:It(n,this.top+b+h,this.bottom-e[0].height),line:0},di(this.ctx,t.textDirection);const x=p+h;this.legendItems.forEach(((_,y)=>{s.strokeStyle=_.fontColor,s.fillStyle=_.fontColor;const v=s.measureText(_.text).width,M=r.textAlign(_.textAlign||(_.textAlign=o.textAlign)),w=f+d+v;let k=u.x,S=u.y;if(r.setWidth(this.width),m?y>0&&k+w+h>this.right&&(S=u.y+=x,u.line++,k=u.x=It(n,this.left+h,this.right-i[u.line])):y>0&&S+x>this.bottom&&(k=u.x=k+e[u.line].width+h,u.line++,S=u.y=It(n,this.top+b+h,this.bottom-e[u.line].height)),function(t,e,i){if(isNaN(f)||f<=0||isNaN(g)||g<0)return;s.save();const n=B(i.lineWidth,1);if(s.fillStyle=B(i.fillStyle,a),s.lineCap=B(i.lineCap,"butt"),s.lineDashOffset=B(i.lineDashOffset,0),s.lineJoin=B(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=B(i.strokeStyle,a),s.setLineDash(B(i.lineDash,[])),o.usePointStyle){const a={radius:g*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,f/2);le(s,a,l,e+d,o.pointStyleWidth&&f)}else{const o=e+Math.max((c-g)/2,0),a=r.leftForLtr(t,f),l=ke(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?be(s,{x:a,y:o,w:f,h:g,radius:l}):s.rect(a,o,f,g),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(k),S,_),k=((t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e)(M,k+f+d,m?k+w:this.right,t.rtl),function(t,e,i){ge(s,i.text,t,e+p/2,l,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(k),S,_),m)u.x+=w+h;else if("string"!=typeof _.text){const t=l.lineHeight;u.y+=_o(_,t)}else u.y+=x})),ui(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Pe(e.font),s=Se(e.padding);if(!e.display)return;const n=ci(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=It(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+It(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=It(a,c,c+d);o.textAlign=n.textAlign(Rt(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,ge(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=Pe(t.font),i=Se(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(St(t,this.left,this.right)&&St(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=Se(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class vo extends Bs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=I(i.text)?i.text.length:1;this._padding=Se(i.padding);const n=s*Pe(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=It(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=It(a,s,e),c=-.5*it):(l=n-t,h=It(a,e,s),c=.5*it),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Pe(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);ge(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:Rt(e.align),textBaseline:"middle",translation:[n,o]})}}var Mo={id:"title",_element:vo,start(t,e,i){!function(t,e){const i=new vo({ctx:t.ctx,options:e,chart:t});ys.configure(t,i,e),ys.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ys.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ys.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const wo=new WeakMap;var ko={id:"subtitle",start(t,e,i){const s=new vo({ctx:t.ctx,options:i,chart:t});ys.configure(t,s,i),ys.addBox(t,s),wo.set(t,s)},stop(t){ys.removeBox(t,wo.get(t)),wo.delete(t)},beforeUpdate(t,e,i){const s=wo.get(t);ys.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const So={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function Co(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Oo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=Pe(e.bodyFont),h=Pe(e.titleFont),c=Pe(e.footerFont),d=o.length,u=n.length,f=s.length,g=Se(e.padding);let p=g.height,m=0,b=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);b+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b&&(p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(b-f)*l.lineHeight+(b-1)*e.bodySpacing),u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let x=0;const _=function(t){m=Math.max(m,i.measureText(t).width+x)};return i.save(),i.font=h.string,H(t.title,_),i.font=l.string,H(t.beforeBody.concat(t.afterBody),_),x=e.displayColors?a+2+e.boxPadding:0,H(s,(t=>{H(t.before,_),H(t.lines,_),H(t.after,_)})),x=0,i.font=c.string,H(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function Ao(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function To(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Ao(t,e,i,s),yAlign:s}}function Lo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=ke(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:kt(g,0,s.width-e.width),y:kt(p,0,s.height-e.height)}}function Eo(t,e,i){const s=Se(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Ro(t){return Po([],Do(t))}function Io(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const zo={beforeTitle:L,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Io(i,t);Po(e.before,Do(Fo(n,"beforeLabel",this,t))),Po(e.lines,Fo(n,"label",this,t)),Po(e.after,Do(Fo(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Ro(Fo(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Fo(i,"beforeFooter",this,t),n=Fo(i,"footer",this,t),o=Fo(i,"afterFooter",this,t);let a=[];return a=Po(a,Do(s)),a=Po(a,Do(n)),a=Po(a,Do(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),H(l,(e=>{const i=Io(t.callbacks,e);s.push(Fo(i,"labelColor",this,e)),n.push(Fo(i,"labelPointStyle",this,e)),o.push(Fo(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=So[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Oo(this,i),a=Object.assign({},t,e),r=To(this.chart,i,a),l=Lo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=ke(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=ci(i.rtl,this.x,this.width);for(t.x=Eo(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=Pe(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,be(t,{x:e,y:g,w:l,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),be(t,{x:i,y:g+1,w:l-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,l,r),t.strokeRect(e,g,l,r),t.fillStyle=o.backgroundColor,t.fillRect(i,g+1,l-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=Pe(i.bodyFont);let d=c.lineHeight,u=0;const f=ci(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d/2),t.y+=d+n},p=f.textAlign(o);let m,b,x,_,y,v,M;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Eo(this,p,i),e.fillStyle=i.bodyColor,H(this.beforeBody,g),u=a&&"right"!==p?"center"===o?l/2+h:l+2+h:0,_=0,v=s.length;_0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=So[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Oo(this,t),a=Object.assign({},i,this._size),r=To(e,t,a),l=Lo(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Se(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),di(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),ui(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!j(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!j(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=So[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Bo={id:"tooltip",_element:Vo,positioners:So,afterInit(t,e,i){i&&(t.tooltip=new Vo({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:zo},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Wo=Object.freeze({__proto__:null,Colors:Gn,Decimation:Qn,Filler:mo,Legend:yo,SubTitle:ko,Title:Mo,Tooltip:Bo});function No(t){const e=this.getLabels();return t>=0&&tnull===t?null:kt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:function(t,e,i,s){const n=t.indexOf(e);return-1===n?((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s):n!==t.lastIndexOf(e)?i:n}(i,t,B(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return No.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function jo(t,e,{horizontal:i,minRotation:s}){const n=mt(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}class $o extends qs{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return R(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=dt(s),e=dt(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=function(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:l,maxTicks:h,maxDigits:c,includeBounds:d}=t,u=n||1,f=h-1,{min:g,max:p}=e,m=!R(o),b=!R(a),x=!R(l),_=(p-g)/(c+1);let y,v,M,w,k=ft((p-g)/f/u)*u;if(k<1e-14&&!m&&!b)return[{value:g},{value:p}];w=Math.ceil(p/k)-Math.floor(g/k),w>f&&(k=ft(w*k/f/u)*u),R(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)/y),"ticks"===s?(v=Math.floor(g/k)*k,M=Math.ceil(p/k)*k):(v=g,M=p),m&&b&&n&&function(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}((a-o)/n,k/1e3)?(w=Math.round(Math.min((a-o)/k,h)),k=(a-o)/w,v=o,M=a):x?(v=m?o:v,M=b?a:M,w=l-1,k=(M-v)/w):(w=(M-v)/k,w=ut(w,Math.round(w),k/1e3)?Math.round(w):Math.ceil(w));const S=Math.max(xt(k),xt(v));y=Math.pow(10,R(r)?S:r),v=Math.round(v*y)/y,M=Math.round(M*y)/y;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),vMath.floor(ct(t)),Xo=(t,e)=>Math.pow(10,Uo(t)+e);function qo(t){return 1==t/Math.pow(10,Uo(t))}function Ko(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}class Go extends qs{static id="logarithmic";static defaults={ticks:{callback:Gt.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=$o.prototype.parse.apply(this,[t,e]);if(0!==i)return F(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=F(t)?Math.max(0,t):null,this.max=F(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!F(this._userMin)&&(this.min=t===Xo(this.min,0)?Xo(this.min,-1):Xo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(Xo(i,-1)),o(Xo(s,1)))),i<=0&&n(Xo(s,-1)),s<=0&&o(Xo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,{min:e,max:i}){e=V(t.min,e);const s=[],n=Uo(e);let o=function(t,e){let i=Uo(e-t);for(;Ko(t,e,i)>10;)i++;for(;Ko(t,e,i)<10;)i--;return Math.min(i,Uo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,h=Math.round((e-l)*a)/a,c=Math.floor((e-l)/r/10)*r*10;let d=Math.floor((h-c)/Math.pow(10,o)),u=V(t.min,Math.round((l+c+d*Math.pow(10,o))*a)/a);for(;u=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+c+d*Math.pow(10,o))*a)/a;const f=V(t.max,u);return s.push({value:f,major:qo(f),significand:d}),s}({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&pt(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":qt(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=ct(t),this._valueRange=ct(this.max)-ct(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(ct(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function Zo(t){const e=t.ticks;if(e.display&&t.display){const t=Se(e.backdropPadding);return B(e.font&&e.font.size,ie.font.size)+t.height}return 0}function Jo(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function Qo(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.starte.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function ta(t){return 0===t||180===t?"center":t<180?"left":"right"}function ea(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function ia(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,st);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=Se(Zo(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=F(t)&&!isNaN(t)?t:0,this.max=F(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Zo(this.options))}generateTickLabels(t){$o.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=N(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?function(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,a=t.options.pointLabels,r=a.centerPointLabels?it/o:0;for(let d=0;d=0&&t=0;n--){const e=s.setContext(t.getPointLabelContext(n)),o=Pe(e.font),{x:a,y:r,textAlign:l,left:h,top:c,right:d,bottom:u}=t._pointLabelItems[n],{backdropColor:f}=e;if(!R(f)){const t=ke(e.borderRadius),s=Se(e.backdropPadding);i.fillStyle=f;const n=h-s.left,o=c-s.top,a=d-h+s.width,r=u-c+s.height;Object.values(t).some((t=>0!==t))?(i.beginPath(),be(i,{x:n,y:o,w:a,h:r,radius:t}),i.fill()):i.fillRect(n,o,a,r)}ge(i,t._pointLabels[n],a,r+o.lineHeight/2,o,{color:e.color,textAlign:l,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),l=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),ia(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,l)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=Pe(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Se(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}ge(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}const na={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},oa=Object.keys(na);function aa(t,e){return t-e}function ra(t,e){if(R(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:o}=t._parseOpts;let a=e;return"function"==typeof s&&(a=s(a)),F(a)||(a="string"==typeof s?i.parse(a,s):i.parse(a)),null===a?null:(n&&(a="week"!==n||!gt(o)&&!0!==o?i.startOf(a,n):i.startOf(a,"isoWeek",o)),+a)}function la(t,e,i,s){const n=oa.length;for(let o=oa.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function ca(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class da extends qs{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new is._date(t.adapters.date);s.init(e),q(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:ra(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||r(this.getMinMax(!1))),s=F(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=F(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=function(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n=oa.indexOf(i);o--){const i=oa[o];if(na[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return oa[i?oa.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=oa.indexOf(t)+1,i=oa.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=kt(s,0,o),n=kt(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||la(n.minUnit,e,i,this._getLabelCapacity(e)),a=B(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,l=gt(r)||!0===r,h={};let c,d,u=e;if(l&&(u=+t.startOf(u,"isoWeek",r)),u=+t.startOf(u,l?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const f="data"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;ct-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return N(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],d=i[e],u=l&&c&&d&&d.major;return this._adapter.format(t,s||(u?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=Dt(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=Dt(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}class fa extends da{static id="timeseries";static defaults=da.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=ua(e,this.min),this._tableRange=ua(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o{var e={74102:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(98487)),n=r(37188),a=l(r(64213));function l(e){return e&&e.__esModule?e:{default:e}}const s="#A5B4FC",i="to bottom right",u={defaultStateBackground:`linear-gradient(${i}, #FAF3F7, #EEF2FF)`,defaultStateBorder:`linear-gradient(${i}, #CD82AB, ${s}) 1`,hoverStateBackground:`linear-gradient(${i}, #F3E5ED, #E0E7FF)`,pressedStateBackground:`linear-gradient(${i}, #A61E69, #6366F1)`},d=(0,o.default)(a.default)` + position: relative; + border: ${e=>e.pressed?"none":`1px solid ${s}`}; + background-image: ${e=>e.pressed?u.pressedStateBackground:u.defaultStateBackground} !important; + box-shadow: ${e=>e.pressed?"inset 0 -2px 0 #B94986":`0 1px 0 ${(0,n.rgba)(e.unpressedBoxShadowColor,.7)}`}; + &:hover { + background-image: ${e=>e.pressed?u.pressedStateBackground:u.hoverStateBackground} !important; + } +`;t.default=d},57990:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=c(r(85890)),n=c(r(99196)),a=c(r(98487)),l=r(65736),s=r(23695),i=r(37188),u=c(r(46362)),d=c(r(78386));function c(e){return e&&e.__esModule?e:{default:e}}const f=a.default.div` + display: flex; + align-items: flex-start; + font-size: 13px; + line-height: 1.5; + border: 1px solid rgba(0, 0, 0, 0.2); + padding: 16px; + color: ${e=>e.alertColor}; + background: ${e=>e.alertBackground}; + margin-bottom: 20px; +`,p=a.default.div` + flex-grow: 1; + + a { + color: ${i.colors.$color_alert_link_text}; + } + + p { + margin-top: 0; + } +`,h=(0,a.default)(d.default)` + margin-top: 0.1rem; + ${(0,s.getDirectionalStyle)("margin-right: 8px","margin-left: 8px")}; +`,b=(0,a.default)(u.default)` + ${(0,s.getDirectionalStyle)("margin: -8px -12px -8px 8px","margin: -8px 8px -12px -8px")}; + font-size: 24px; + line-height: 1.4; + color: ${e=>e.alertDismissColor}; + flex-shrink: 0; + min-width: 36px; + height: 36px; + + // Override the base button style: get rid of the button styling. + padding: 0; + + &, &:hover, &:active { + /* Inherits box-sizing: border-box so this doesn't change the rendered size. */ + border: 2px solid transparent; + background: transparent; + box-shadow: none; + color: ${e=>e.alertDismissColor}; + } + + /* Inherits focus style from the Button component. */ + &:focus { + background: transparent; + color: ${e=>e.alertDismissColor}; + border-color: ${i.colors.$color_yoast_focus}; + box-shadow: 0px 0px 0px 3px ${i.colors.$color_yoast_focus_outer}; + } +`;class g extends n.default.Component{getTypeDisplayOptions(e){switch(e){case"error":return{color:i.colors.$color_alert_error_text,background:i.colors.$color_alert_error_background,icon:"alert-error"};case"info":return{color:i.colors.$color_alert_info_text,background:i.colors.$color_alert_info_background,icon:"alert-info"};case"success":return{color:i.colors.$color_alert_success_text,background:i.colors.$color_alert_success_background,icon:"alert-success"};case"warning":return{color:i.colors.$color_alert_warning_text,background:i.colors.$color_alert_warning_background,icon:"alert-warning"}}}render(){if(!0===this.props.isAlertDismissed)return null;const e=this.getTypeDisplayOptions(this.props.type),t=this.props.dismissAriaLabel||(0,l.__)("Dismiss this alert","wordpress-seo"); +/* translators: Hidden accessibility text. */return n.default.createElement(f,{alertColor:e.color,alertBackground:e.background,className:this.props.className},n.default.createElement(h,{icon:e.icon,color:e.color}),n.default.createElement(p,null,this.props.children),"function"==typeof this.props.onDismissed?n.default.createElement(b,{alertDismissColor:e.color,onClick:this.props.onDismissed,"aria-label":t},"×"):null)}}g.propTypes={children:o.default.any.isRequired,type:o.default.oneOf(["error","info","success","warning"]).isRequired,onDismissed:o.default.func,isAlertDismissed:o.default.bool,dismissAriaLabel:o.default.string,className:o.default.string},g.defaultProps={onDismissed:null,isAlertDismissed:!1,dismissAriaLabel:"",className:""},t.default=g},47529:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=s(r(99196)),n=s(r(85890)),a=s(r(98487)),l=r(23695);function s(e){return e&&e.__esModule?e:{default:e}}const i=a.default.div` + box-sizing: border-box; + + p { + margin: 0; + font-size: 14px; + } +`,u=a.default.h3` + margin: 8px 0; + font-size: 1em; +`,d=a.default.ul` + margin: 0; + list-style: none; + padding: 0; +`,c=(0,l.makeOutboundLink)(a.default.a` + display: inline-block; + margin-bottom: 4px; + font-size: 14px; +`),f=a.default.li` + margin: 8px 0; +`,p=a.default.div` + a { + margin: 8px 0 0; + } +`,h=e=>o.default.createElement(f,{className:e.className},o.default.createElement(c,{className:`${e.className}-link`,href:e.link},e.title),o.default.createElement("p",{className:`${e.className}-description`},e.description));h.propTypes={className:n.default.string.isRequired,title:n.default.string.isRequired,link:n.default.string.isRequired,description:n.default.string.isRequired};const b=e=>o.default.createElement(i,{className:e.className},o.default.createElement(u,{className:`${e.className}__header`},e.title?e.title:e.feed.title),o.default.createElement(d,{className:`${e.className}__posts`,role:"list"},e.feed.items.map((t=>o.default.createElement(h,{className:`${e.className}__post`,key:t.link,title:t.title,link:t.link,description:t.description})))),e.footerLinkText&&o.default.createElement(p,{className:`${e.className}__footer`},o.default.createElement(c,{className:`${e.className}__footer-link`,href:e.feedLink?e.feedLink:e.feed.link},e.footerLinkText)));b.propTypes={className:n.default.string,feed:n.default.object.isRequired,title:n.default.string,footerLinkText:n.default.string,feedLink:n.default.string},b.defaultProps={className:"articlelist-feed"},t.default=b},79743:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.FullHeightCard=void 0;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(99196)),n=u(r(85890)),a=u(r(98487)),l=r(37188),s=r(23695),i=u(r(97230));function u(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}const c=a.default.div` + position: relative; + display: flex; + flex-direction: column; + background-color: ${l.colors.$color_white}; + width: 100%; + box-shadow: 0 2px 4px 0 rgba(0,0,0,0.2); +`,f=a.default.img` + width: 100%; + vertical-align: bottom; +`,p=a.default.div` + padding: 12px 16px; + display: flex; + flex-direction: column; + flex-grow: 1; +`,h=a.default.a` + text-decoration: none; + color: ${l.colors.$color_pink_dark}; + /* IE11 bug header image height see https://github.com/philipwalton/flexbugs#flexbug-5 */ + overflow: hidden; + + &:hover, + &:focus, + &:active { + text-decoration: underline; + color: ${l.colors.$color_pink_dark}; + } + + &:focus, + &:active { + box-shadow: none; + } +`,b=a.default.h2` + margin: 16px 16px 0 16px; + font-weight: 400; + font-size: 1.5em; + line-height: 1.2; + color: currentColor; +`,g=(0,s.makeOutboundLink)(h);class m extends o.default.Component{getHeader(){return this.props.header?this.props.header.link?o.default.createElement(g,{href:this.props.header.link},o.default.createElement(f,{src:this.props.header.image,alt:""}),o.default.createElement(b,null,this.props.header.title)):o.default.createElement(o.Fragment,null,o.default.createElement(f,{src:this.props.header.image,alt:""}),";",o.default.createElement(b,null,this.props.header.title)):null}getBanner(){return this.props.banner?o.default.createElement(i.default,this.props.banner,this.props.banner.text):null}render(){return o.default.createElement(c,{className:this.props.className,id:this.props.id},this.getHeader(),this.getBanner(),o.default.createElement(p,null,this.props.children))}}t.default=m,t.FullHeightCard=(0,a.default)(m)` + height: 100%; +`,m.propTypes={className:n.default.string,id:n.default.string,header:n.default.shape({title:n.default.string,image:n.default.string.isRequired,link:n.default.string}),banner:n.default.shape({text:n.default.string.isRequired,textColor:n.default.string,backgroundColor:n.default.string}),children:n.default.any},m.defaultProps={className:"",id:"",header:null,banner:null,children:null}},97230:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=c;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(99196)),n=s(r(85890)),a=s(r(98487)),l=r(37188);function s(e){return e&&e.__esModule?e:{default:e}}function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}const u=a.default.span` + position: absolute; + + top: 8px; + left: -8px; + + font-weight: 500; + color: ${e=>e.textColor}; + line-height: 16px; + + background-color: ${e=>e.backgroundColor}; + padding: 8px 16px; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2); +`,d=a.default.span` + position: absolute; + + top: 40px; + left: -8px; + + /* This code makes the triangle. */ + border-top: 8px solid ${l.colors.$color_purple_dark}; + border-left: 8px solid transparent; +`;function c(e){return o.default.createElement(o.Fragment,null,o.default.createElement(u,{backgroundColor:e.backgroundColor,textColor:e.textColor},e.children),o.default.createElement(d,null))}c.propTypes={backgroundColor:n.default.string,textColor:n.default.string,children:n.default.any},c.defaultProps={backgroundColor:l.colors.$color_pink_dark,textColor:l.colors.$color_white,children:null}},57272:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Collapsible=void 0,t.CollapsibleStateless=v,t.default=t.StyledIconsButton=t.StyledContainerTopLevel=t.StyledContainer=void 0,t.wrapInHeading=m;var o=r(23695),n=r(37188),a=r(92819),l=c(r(85890)),s=c(r(99196)),i=c(r(98487)),u=c(r(71875)),d=r(91752);function c(e){return e&&e.__esModule?e:{default:e}}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;te.hasSubTitle?"align-self: flex-start;":""} + &:first-child { + ${(0,o.getDirectionalStyle)("margin-right: 8px","margin-left: 8px")}; + } + &:last-child { + ${(0,o.getDirectionalStyle)("margin-left: 8px","margin-right: 8px")}; + } + } +`;function m(e,t){const r=`h${t.level}`,o=(0,i.default)(r)` + margin: 0 !important; + padding: 0 !important; + font-size: ${t.fontSize} !important; + font-weight: ${t.fontWeight} !important; + color: ${t.color} !important; + + ${d.StyledTitle} { + font-weight: ${t.fontWeight}; + color: ${t.color}; + } + `;return function(t){return s.default.createElement(o,null,s.default.createElement(e,t))}}const y=m(g,{level:2,fontSize:"1rem",fontWeight:"normal"});function v(e){const{children:t,className:r,hasPadding:o,hasSeparator:n,Heading:a,id:l,isOpen:i,onToggle:u,prefixIcon:c,prefixIconCollapsed:f,suffixIcon:g,suffixIconCollapsed:m,subTitle:y,title:v,titleScreenReaderText:_}=e;let x=t;i&&o&&(x=s.default.createElement(p,{className:"collapsible_content"},t));const C=n?b:h;return s.default.createElement(C,{className:r},s.default.createElement(a,{id:l,"aria-expanded":i,onClick:u,prefixIcon:i?c:f,suffixIcon:i?g:m,hasSubTitle:!!y},s.default.createElement(d.SectionTitle,{title:v,titleScreenReaderText:_,subTitle:y})),x)}v.propTypes={children:l.default.oneOfType([l.default.arrayOf(l.default.node),l.default.node]),className:l.default.string,Heading:l.default.func,isOpen:l.default.bool.isRequired,hasSeparator:l.default.bool,hasPadding:l.default.bool,onToggle:l.default.func.isRequired,prefixIcon:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),prefixIconCollapsed:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),subTitle:l.default.string,suffixIcon:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),suffixIconCollapsed:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),title:l.default.string.isRequired,titleScreenReaderText:l.default.string,id:l.default.string},v.defaultProps={Heading:y,id:null,children:null,className:null,subTitle:null,titleScreenReaderText:null,hasSeparator:!1,hasPadding:!1,prefixIcon:null,prefixIconCollapsed:null,suffixIcon:null,suffixIconCollapsed:null};class _ extends s.default.Component{constructor(e){super(e),this.state={isOpen:e.initialIsOpen,headingProps:e.headingProps,Heading:m(g,e.headingProps)},this.toggleCollapse=this.toggleCollapse.bind(this)}static getDerivedStateFromProps(e,t){return e.headingProps.level!==t.headingProps.level||e.headingProps.fontSize!==t.headingProps.fontSize||e.headingProps.fontWeight!==t.headingProps.fontWeight||e.headingProps.color!==t.headingProps.color?{...t,headingProps:e.headingProps,Heading:m(g,e.headingProps)}:null}toggleCollapse(){const{isOpen:e}=this.state,{onToggle:t}=this.props;t&&!1===t(e)||this.setState({isOpen:!e})}render(){const{isOpen:e}=this.state,{children:t}=this.props,r=(0,a.omit)(this.props,["children","onToggle"]);return s.default.createElement(v,f({Heading:this.state.Heading,isOpen:e,onToggle:this.toggleCollapse},r),e&&t)}}t.Collapsible=_,_.propTypes={children:l.default.oneOfType([l.default.arrayOf(l.default.node),l.default.node]),className:l.default.string,initialIsOpen:l.default.bool,hasSeparator:l.default.bool,hasPadding:l.default.bool,prefixIcon:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),prefixIconCollapsed:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),suffixIcon:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),suffixIconCollapsed:l.default.shape({icon:l.default.string,color:l.default.string,size:l.default.string}),title:l.default.string.isRequired,titleScreenReaderText:l.default.string,subTitle:l.default.string,headingProps:l.default.shape({level:l.default.number,fontSize:l.default.string,fontWeight:l.default.string,color:l.default.string}),onToggle:l.default.func},_.defaultProps={hasSeparator:!1,hasPadding:!1,initialIsOpen:!1,subTitle:null,titleScreenReaderText:null,children:null,className:null,prefixIcon:null,prefixIconCollapsed:null,suffixIcon:{icon:"chevron-up",color:n.colors.$black,size:"24px"},suffixIconCollapsed:{icon:"chevron-down",color:n.colors.$black,size:"24px"},headingProps:{level:2,fontSize:"1rem",fontWeight:"normal",color:n.colors.$color_headings},onToggle:null},t.default=_},69424:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(99196)),n=i(r(85890)),a=i(r(98487)),l=r(37188),s=r(23695);function i(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}const d=a.default.a` + color: ${l.colors.$color_black}; + white-space: nowrap; + display: block; + border-radius: 4px; + background-color: ${l.colors.$color_grey_cta}; + padding: 12px 16px; + box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.2); + border: none; + text-decoration: none; + font-weight: bold; + font-size: inherit; + margin-bottom: 8px; + + &:hover, + &:focus, + &:active { + color: ${l.colors.$color_black}; + background-color: ${l.colors.$color_grey_hover}; + } + + &:active { + background-color: ${l.colors.$color_grey_hover}; + transform: translateY( 1px ); + box-shadow: none; + filter: none; + } +`,c=a.default.a` + cursor: pointer; + color: ${l.colors.$color_black}; + white-space: nowrap; + display: block; + border-radius: 4px; + background-color: ${l.colors.$color_button_upsell}; + padding: 12px 16px; + box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.2); + border: none; + text-decoration: none; + font-weight: bold; + font-size: inherit; + margin-top: 0; + margin-bottom: 8px; + + &:hover, + &:focus, + &:active { + color: ${l.colors.$color_black}; + background: ${l.colors.$color_button_upsell_hover}; + } + + &:active { + background-color: ${l.colors.$color_button_hover_upsell}; + transform: translateY( 1px ); + box-shadow: none; + filter: none; + } +`,f=a.default.a` + font-weight: bold; +`,p=(0,s.makeOutboundLink)(f),h=a.default.div` + text-align: center; +`,b=a.default.div` + ul { + list-style-type: none; + margin: 0; + padding: 0; + } + + li { + position: relative; + ${(0,s.getDirectionalStyle)("margin-left","margin-right")}: 16px; + + &:before { + content: "✓"; + color: ${l.colors.$color_green}; + position: absolute; + font-weight: bold; + display: inline-block; + ${(0,s.getDirectionalStyle)("left","right")}: -16px; + } + } +`,g=a.default.div` + margin-bottom: 12px; + border-bottom: 1px ${l.colors.$color_grey} solid; + flex-grow: 1; +`;class m extends o.default.Component{getActionBlock(e,t){const r=(0,s.makeOutboundLink)(e);return"true"===t?o.default.createElement(h,null,o.default.createElement(r,{href:this.props.courseUrl},this.props.ctaButtonData.ctaButtonCopy)):o.default.createElement(h,null,o.default.createElement(r,{href:this.props.ctaButtonData.ctaButtonUrl},this.props.ctaButtonData.ctaButtonCopy),o.default.createElement(p,{href:this.props.courseUrl},this.props.readMoreLinkText))}render(){const e="regular"===this.props.ctaButtonData.ctaButtonType?d:c;return o.default.createElement(o.Fragment,null,o.default.createElement(g,null,o.default.createElement(b,{dangerouslySetInnerHTML:{__html:this.props.description}})),this.getActionBlock(e,this.props.isBundle))}}t.default=m,m.propTypes={description:n.default.string,courseUrl:n.default.string,ctaButtonData:n.default.object,readMoreLinkText:n.default.string,isBundle:n.default.string},m.defaultProps={description:"",courseUrl:"",ctaButtonData:{},readMoreLinkText:"",isBundle:""}},27938:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=u(r(99196)),n=u(r(85890)),a=u(r(98487)),l=r(65736),s=r(25158),i=r(37188);function u(e){return e&&e.__esModule?e:{default:e}}const d=a.default.p` + text-align: center; + margin: 0 0 16px; + padding: 16px 16px 8px 16px; + border-bottom: 4px solid ${i.colors.$color_bad}; + background: ${i.colors.$color_white}; +`;class c extends o.default.Component{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){if(this.state.hasError){const e=(0,l.__)("Something went wrong. Please reload the page.","wordpress-seo");return(0,s.speak)(e,"assertive"),o.default.createElement(d,null,e)}return this.props.children}}t.default=c,c.propTypes={children:n.default.any},c.defaultProps={children:null}},9802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getId=t.default=void 0;const r=()=>Math.random().toString(36).substring(2,6);t.getId=e=>e||r(),t.default=r},33014:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}const l=e=>{const t=`h${e.level}`;return o.default.createElement(t,{className:e.className},e.children)};l.propTypes={level:n.default.number,className:n.default.string,children:n.default.any},l.defaultProps={level:1},t.default=l},30812:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.helpTextPropType=t.default=void 0;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(99196)),n=s(r(85890)),a=s(r(98487)),l=r(37188);function s(e){return e&&e.__esModule?e:{default:e}}function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}const u=a.default.p` + color: ${e=>e.textColor}; + font-size: ${e=>e.textFontSize}; + margin-top: 0; +`;class d extends o.PureComponent{render(){const{children:e,textColor:t,textFontSize:r}=this.props;return o.default.createElement(u,{textColor:t,textFontSize:r},e)}}t.default=d;const c=t.helpTextPropType={children:n.default.oneOfType([n.default.string,n.default.array]),textColor:n.default.string,textFontSize:n.default.string};d.propTypes={...c,children:c.children.isRequired},d.defaultProps={textColor:l.colors.$color_help_text}},77844:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=s;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=s(r(99196)),n=s(r(85890)),a=s(r(98487)),l=s(r(16653));function s(e){return e&&e.__esModule?e:{default:e}}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const t=(0,a.default)(e.icon)` + width: ${e.width}; + height: ${e.height}; + ${e.color?`fill: ${e.color};`:""} + flex: 0 0 auto; + `,r=(0,l.default)(e,["icon","width","height","color"]);return o.default.createElement(t,i({role:"img","aria-hidden":"true",focusable:"false"},r))};u.propTypes={icon:n.default.func.isRequired,width:n.default.string,height:n.default.string,color:n.default.string},u.defaultProps={width:"16px",height:"16px"},t.default=u},30856:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=s(r(99196)),n=s(r(85890)),a=r(37188),l=s(r(74102));function s(e){return e&&e.__esModule?e:{default:e}}const i=function(e){return o.default.createElement(l.default,{disabled:e.disabled,type:"button",onClick:e.onClick,pressed:e.pressed,onPointerEnter:e.onPointerEnter,onPointerLeave:e.onPointerLeave,unpressedBoxShadowColor:e.unpressedBoxShadowColor,pressedBoxShadowColor:e.pressedBoxShadowColor,pressedBackground:e.pressedBackground,unpressedBackground:e.unpressedBackground,id:e.id,"aria-label":e.ariaLabel,"aria-pressed":e.pressed,pressedIconColor:e.pressedIconColor,className:e.className},e.children)};i.propTypes={disabled:n.default.bool,children:n.default.node,id:n.default.string.isRequired,ariaLabel:n.default.string,onClick:n.default.func,onPointerEnter:n.default.func,onPointerLeave:n.default.func,unpressedBoxShadowColor:n.default.string,pressedBoxShadowColor:n.default.string,pressedBackground:n.default.string,unpressedBackground:n.default.string,pressedIconColor:n.default.string,pressed:n.default.bool.isRequired,className:n.default.string},i.defaultProps={disabled:!1,unpressedBoxShadowColor:a.colors.$color_button_border,pressedBoxShadowColor:a.colors.$color_purple,pressedBackground:"linear- gradient(to bottom right, #A61E69, #3B82F6)",unpressedBackground:"linear-gradient(to bottom right, #FAF3F7, #EFF6FF)",pressedIconColor:a.colors.$color_white,onClick:()=>{},onPointerEnter:()=>{},onPointerLeave:()=>{}},t.default=i},64213:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o,n=(o=r(98487))&&o.__esModule?o:{default:o},a=r(37188);const l=n.default.button` + align-items: center; + justify-content: center; + box-sizing: border-box; + min-width: 32px; + display: inline-flex; + border: 1px solid ${a.colors.$color_button_border}; + background-color: ${e=>e.pressed?e.pressedBackground:e.unpressedBackground}; + box-shadow: ${e=>e.pressed?`inset 0 2px 0 ${(0,a.rgba)(e.pressedBoxShadowColor,.7)}`:`0 1px 0 ${(0,a.rgba)(e.unpressedBoxShadowColor,.7)}`}; + border-radius: 3px; + cursor: pointer; + padding: 0; + height: 24px; + + &:hover { + border-color: ${e=>e.hoverBorderColor}; + } + &:disabled { + background-color: ${e=>e.unpressedBackground}; + box-shadow: none; + border: none; + cursor: default; + } +`;t.default=l},21529:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(r(99196)),n=i(r(85890)),a=r(37188),l=i(r(78386)),s=i(r(64213));function i(e){return e&&e.__esModule?e:{default:e}}const u=function(e){const t="disabled"===e.marksButtonStatus;let r;return r=t?e.disabledIconColor:e.pressed?e.pressedIconColor:e.unpressedIconColor,o.default.createElement(s.default,{disabled:t,type:"button",onClick:e.onClick,pressed:e.pressed,unpressedBoxShadowColor:e.unpressedBoxShadowColor,pressedBoxShadowColor:e.pressedBoxShadowColor,pressedBackground:e.pressedBackground,unpressedBackground:e.unpressedBackground,id:e.id,"aria-label":e.ariaLabel,"aria-pressed":e.pressed,unpressedIconColor:t?e.disabledIconColor:e.unpressedIconColor,pressedIconColor:e.pressedIconColor,hoverBorderColor:e.hoverBorderColor,className:e.className},o.default.createElement(l.default,{icon:e.icon,color:r,size:"18px"}))};u.propTypes={id:n.default.string.isRequired,ariaLabel:n.default.string.isRequired,onClick:n.default.func.isRequired,unpressedBoxShadowColor:n.default.string,pressedBoxShadowColor:n.default.string,pressedBackground:n.default.string,unpressedBackground:n.default.string,pressedIconColor:n.default.string,unpressedIconColor:n.default.string,icon:n.default.string.isRequired,pressed:n.default.bool.isRequired,hoverBorderColor:n.default.string,marksButtonStatus:n.default.string,disabledIconColor:n.default.string,className:n.default.string},u.defaultProps={unpressedBoxShadowColor:a.colors.$color_button_border,pressedBoxShadowColor:a.colors.$color_purple,pressedBackground:a.colors.$color_pink_dark,unpressedBackground:a.colors.$color_button,pressedIconColor:a.colors.$color_white,unpressedIconColor:a.colors.$color_button_text,hoverBorderColor:a.colors.$color_white,marksButtonStatus:"enabled",disabledIconColor:a.colors.$color_grey},t.default=u},22027:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(r(99196)),n=i(r(98487)),a=i(r(85890)),l=r(37188),s=i(r(78386));function i(e){return e&&e.__esModule?e:{default:e}}const u=n.default.button` + align-items: center; + justify-content: center; + box-sizing: border-box; + min-width: 32px; + display: inline-flex; + border: 1px solid ${l.colors.$color_button_border}; + background-color: ${e=>e.background}; + box-shadow: ${e=>e.boxShadowColor}; + border-radius: 3px; + cursor: pointer; + padding: 0; + height: 24px; + &:hover { + border-color: ${e=>e.hoverBorderColor}; + } +`,d=function(e){return o.default.createElement(u,{type:"button",onClick:e.onClick,boxShadowColor:e.boxShadowColor,background:e.background,id:e.id,"aria-label":e.ariaLabel,iconColor:e.iconColor,hoverBorderColor:e.hoverBorderColor,className:e.className},o.default.createElement(s.default,{icon:e.icon,color:e.iconColor,size:"18px"}))};d.propTypes={id:a.default.string.isRequired,ariaLabel:a.default.string.isRequired,onClick:a.default.func.isRequired,boxShadowColor:a.default.string,background:a.default.string,iconColor:a.default.string,icon:a.default.string.isRequired,hoverBorderColor:a.default.string,className:a.default.string},d.defaultProps={boxShadowColor:l.colors.$color_button_border,background:l.colors.$color_button,iconColor:l.colors.$color_button_text,hoverBorderColor:l.colors.$color_white},t.default=d},1453:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.SimulatedLabel=void 0;var o=l(r(99196)),n=l(r(85890)),a=l(r(98487));function l(e){return e&&e.__esModule?e:{default:e}}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;to.default.createElement("label",s({htmlFor:e.for,className:e.className},e.optionalAttributes),e.children);i.propTypes={for:n.default.string.isRequired,optionalAttributes:n.default.shape({"aria-label":n.default.string,onClick:n.default.func,className:n.default.string}),children:n.default.any.isRequired,className:n.default.string},i.defaultProps={className:"",optionalAttributes:{}},t.default=i},44722:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.languageNoticePropType=t.default=void 0;var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(99196)),n=u(r(85890)),a=u(r(98487)),l=r(65736),s=u(r(96746)),i=r(23695);function u(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}const c=a.default.p` + margin: 1em 0; +`,f=(0,i.makeOutboundLink)(a.default.a` + margin-left: 4px; +`);class p extends o.PureComponent{render(){const{changeLanguageLink:e,canChangeLanguage:t,language:r,showLanguageNotice:n}=this.props;if(!n)return null; +/* Translators: %s expands to the actual language. */let a=(0,l.__)("Your site language is set to %s. ","wordpress-seo");return t||( +/* Translators: %s expands to the actual language. */ +a=(0,l.__)("Your site language is set to %s. If this is not correct, contact your site administrator.","wordpress-seo")),a=(0,l.sprintf)(a,`{{strong}}${r}{{/strong}}`),a=(0,s.default)({mixedString:a,components:{strong:o.default.createElement("strong",null)}}),o.default.createElement(c,null,a,t&&o.default.createElement(f,{href:e},(0,l.__)("Change language","wordpress-seo")))}}t.default=p;const h=t.languageNoticePropType={changeLanguageLink:n.default.string.isRequired,canChangeLanguage:n.default.bool,language:n.default.string.isRequired,showLanguageNotice:n.default.bool};p.propTypes=h,p.defaultProps={canChangeLanguage:!1,showLanguageNotice:!1}},50933:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=s(r(99196)),n=s(r(85890)),a=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=n?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(o,a,s):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(98487));function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function s(e){return e&&e.__esModule?e:{default:e}}const i=({className:e})=>(""!==e&&(e+=" "),e+="yoast-loader",o.default.createElement("svg",{version:"1.1",id:"Y__x2B__bg",x:"0px",y:"0px",viewBox:"0 0 500 500",className:e},o.default.createElement("g",null,o.default.createElement("g",null,o.default.createElement("linearGradient",{id:"SVGID_1_",gradientUnits:"userSpaceOnUse",x1:"250",y1:"428.6121",x2:"250",y2:"77.122"},o.default.createElement("stop",{offset:"0",style:{stopColor:"#570732"}}),o.default.createElement("stop",{offset:"2.377558e-02",style:{stopColor:"#5D0936"}}),o.default.createElement("stop",{offset:"0.1559",style:{stopColor:"#771549"}}),o.default.createElement("stop",{offset:"0.3019",style:{stopColor:"#8B1D58"}}),o.default.createElement("stop",{offset:"0.4669",style:{stopColor:"#992362"}}),o.default.createElement("stop",{offset:"0.6671",style:{stopColor:"#A12768"}}),o.default.createElement("stop",{offset:"1",style:{stopColor:"#A4286A"}})),o.default.createElement("path",{fill:"url(#SVGID_1_)",d:"M454.7,428.6H118.4c-40.2,0-73.2-32.9-73.2-73.2V150.3c0-40.2,32.9-73.2,73.2-73.2h263.1 c40.2,0,73.2,32.9,73.2,73.2V428.6z"})),o.default.createElement("g",null,o.default.createElement("g",null,o.default.createElement("g",null,o.default.createElement("g",null,o.default.createElement("path",{fill:"#A4286A",d:"M357.1,102.4l-43.8,9.4L239.9,277l-47.2-147.8h-70.2l78.6,201.9c6.7,17.2,6.7,36.3,0,53.5 c-6.7,17.2,45.1-84.1,24.7-75.7c0,0,34.9,97.6,36.4,94.5c7-14.3,13.7-30.3,20.2-48.5L387.4,72 C387.4,72,358.4,102.4,357.1,102.4z"}))))),o.default.createElement("g",null,o.default.createElement("linearGradient",{id:"SVGID_2_",gradientUnits:"userSpaceOnUse",x1:"266.5665",y1:"-6.9686",x2:"266.5665",y2:"378.4586"},o.default.createElement("stop",{offset:"0",style:{stopColor:"#77B227"}}),o.default.createElement("stop",{offset:"0.4669",style:{stopColor:"#75B027"}}),o.default.createElement("stop",{offset:"0.635",style:{stopColor:"#6EAB27"}}),o.default.createElement("stop",{offset:"0.7549",style:{stopColor:"#63A027"}}),o.default.createElement("stop",{offset:"0.8518",style:{stopColor:"#529228"}}),o.default.createElement("stop",{offset:"0.9339",style:{stopColor:"#3C7F28"}}),o.default.createElement("stop",{offset:"1",style:{stopColor:"#246B29"}})),o.default.createElement("path",{fill:"url(#SVGID_2_)",d:"M337,6.1l-98.6,273.8l-47.2-147.8H121L199.6,334c6.7,17.2,6.7,36.3,0,53.5 c-8.8,22.5-23.4,41.8-59,46.6v59.9c69.4,0,106.9-42.6,140.3-136.1L412.1,6.1H337z"}),o.default.createElement("path",{fill:"#FFFFFF",d:"M140.6,500h-6.1v-71.4l5.3-0.7c34.8-4.7,46.9-24.2,54.1-42.7c6.2-15.8,6.2-33.2,0-49l-81.9-210.3h83.7 l43.1,134.9L332.7,0h88.3L286.7,359.9c-17.9,50-36.4,83.4-58.1,105.3C205,488.9,177,500,140.6,500z M146.7,439.2v48.3 c29.9-1.2,53.3-11.1,73.1-31.1c20.4-20.5,38-52.6,55.3-100.9L403.2,12.3h-61.9L238.1,299l-51.3-160.8H130l75.3,193.5 c7.3,18.7,7.3,39.2,0,57.9C197.7,409.3,184.1,432.4,146.7,439.2z"})))));i.propTypes={className:n.default.string},i.defaultProps={className:""};const u=a.keyframes` + 0% { transform: scale( 0.70 ); opacity: 0.4; } + 80% { opacity: 1 } + 100% { transform: scale( 0.95 ); opacity: 1 } +`;t.default=(0,a.default)(i)` + animation: ${u} 1.15s infinite; + animation-direction: alternate; + animation-timing-function: cubic-bezier(0.96, 0.02, 0.63, 0.86); +`},73028:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o,n=(o=r(99196))&&o.__esModule?o:{default:o};function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.default.createElement("svg",a({},e,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 520 240"}),n.default.createElement("linearGradient",{id:"a",gradientUnits:"userSpaceOnUse",x1:"476.05",y1:"194.48",x2:"476.05",y2:"36.513"},n.default.createElement("stop",{offset:"0",style:{stopColor:"#570732"}}),n.default.createElement("stop",{offset:".038",style:{stopColor:"#610b39"}}),n.default.createElement("stop",{offset:".155",style:{stopColor:"#79164b"}}),n.default.createElement("stop",{offset:".287",style:{stopColor:"#8c1e59"}}),n.default.createElement("stop",{offset:".44",style:{stopColor:"#9a2463"}}),n.default.createElement("stop",{offset:".633",style:{stopColor:"#a22768"}}),n.default.createElement("stop",{offset:"1",style:{stopColor:"#a4286a"}})),n.default.createElement("path",{fill:"url(#a)",d:"M488.7 146.1v-56h20V65.9h-20V36.5h-30.9v29.3h-15.7v24.3h15.7v52.8c0 30 20.9 47.8 43 51.5l9.2-24.8c-12.9-1.6-21.2-11.2-21.3-23.5z"}),n.default.createElement("linearGradient",{id:"b",gradientUnits:"userSpaceOnUse",x1:"287.149",y1:"172.553",x2:"287.149",y2:"61.835"},n.default.createElement("stop",{offset:"0",style:{stopColor:"#570732"}}),n.default.createElement("stop",{offset:".038",style:{stopColor:"#610b39"}}),n.default.createElement("stop",{offset:".155",style:{stopColor:"#79164b"}}),n.default.createElement("stop",{offset:".287",style:{stopColor:"#8c1e59"}}),n.default.createElement("stop",{offset:".44",style:{stopColor:"#9a2463"}}),n.default.createElement("stop",{offset:".633",style:{stopColor:"#a22768"}}),n.default.createElement("stop",{offset:"1",style:{stopColor:"#a4286a"}})),n.default.createElement("path",{fill:"url(#b)",d:"M332.8 137.3V95.2c0-1.5-.1-3-.2-4.4-2.7-34-51-33.9-88.3-20.9L255 91.7c24.3-11.6 38.9-8.6 44-2.9l.4.4v.1c2.6 3.5 2 9 2 13.4-31.8 0-65.7 4.2-65.7 39.1 0 26.5 33.2 43.6 68 18.3l5.2 12.4h29.8c-2.8-14.5-5.9-27-5.9-35.2zm-31.2-.3c-24.5 27.4-46.9 1.6-23.9-9.6 6.8-2.3 15.9-2.4 23.9-2.4v12z"}),n.default.createElement("linearGradient",{id:"c",gradientUnits:"userSpaceOnUse",x1:"390.54",y1:"172.989",x2:"390.54",y2:"61.266"},n.default.createElement("stop",{offset:"0",style:{stopColor:"#570732"}}),n.default.createElement("stop",{offset:".038",style:{stopColor:"#610b39"}}),n.default.createElement("stop",{offset:".155",style:{stopColor:"#79164b"}}),n.default.createElement("stop",{offset:".287",style:{stopColor:"#8c1e59"}}),n.default.createElement("stop",{offset:".44",style:{stopColor:"#9a2463"}}),n.default.createElement("stop",{offset:".633",style:{stopColor:"#a22768"}}),n.default.createElement("stop",{offset:"1",style:{stopColor:"#a4286a"}})),n.default.createElement("path",{fill:"url(#c)",d:"M380.3 92.9c0-10.4 16.6-15.2 42.8-3.3l9.1-22C397 57 348.9 56 348.6 92.8c-.1 17.7 11.2 27.2 27.5 33.2 11.3 4.2 27.6 6.4 27.6 15.4-.1 11.8-25.3 13.6-48.4-2.3l-9.3 23.8c31.4 15.6 89.7 16.1 89.4-23.1-.4-38.5-55.1-31.9-55.1-46.9z"}),n.default.createElement("linearGradient",{id:"d",gradientUnits:"userSpaceOnUse",x1:"76.149",y1:"3.197",x2:"76.149",y2:"178.39"},n.default.createElement("stop",{offset:"0",style:{stopColor:"#77b227"}}),n.default.createElement("stop",{offset:".467",style:{stopColor:"#75b027"}}),n.default.createElement("stop",{offset:".635",style:{stopColor:"#6eab27"}}),n.default.createElement("stop",{offset:".755",style:{stopColor:"#63a027"}}),n.default.createElement("stop",{offset:".852",style:{stopColor:"#529228"}}),n.default.createElement("stop",{offset:".934",style:{stopColor:"#3c7f28"}}),n.default.createElement("stop",{offset:"1",style:{stopColor:"#246b29"}})),n.default.createElement("path",{fill:"url(#d)",d:"M108.2 9.2L63.4 133.6 41.9 66.4H10l35.7 91.8c3 7.8 3 16.5 0 24.3-4 10.2-10.6 19-26.8 21.2v27.2c31.5 0 48.6-19.4 63.8-61.9L142.3 9.2h-34.1z"}),n.default.createElement("linearGradient",{id:"e",gradientUnits:"userSpaceOnUse",x1:"175.228",y1:"172.923",x2:"175.228",y2:"62.17"},n.default.createElement("stop",{offset:"0",style:{stopColor:"#570732"}}),n.default.createElement("stop",{offset:".038",style:{stopColor:"#610b39"}}),n.default.createElement("stop",{offset:".155",style:{stopColor:"#79164b"}}),n.default.createElement("stop",{offset:".287",style:{stopColor:"#8c1e59"}}),n.default.createElement("stop",{offset:".44",style:{stopColor:"#9a2463"}}),n.default.createElement("stop",{offset:".633",style:{stopColor:"#a22768"}}),n.default.createElement("stop",{offset:"1",style:{stopColor:"#a4286a"}})),n.default.createElement("path",{fill:"url(#e)",d:"M175.2 62.2c-38.6 0-54 27.3-54 56.2 0 30 15.1 54.6 54 54.6 38.7 0 54.1-27.6 54-54.6-.1-33-16.8-56.2-54-56.2zm0 87.1c-15.7 0-23.4-11.7-23.4-30.9s8.3-32.9 23.4-32.9c15 0 23.2 13.7 23.2 32.9s-7.5 30.9-23.2 30.9z"}))},79610:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=u(r(99196)),n=u(r(85890)),a=u(r(83253)),l=u(r(98487)),s=r(37188),i=u(r(78386));function u(e){return e&&e.__esModule?e:{default:e}}const d=l.default.h1` + float: left; + margin: -4px 0 2rem; + font-size: 1rem; +`,c=l.default.button` + float: right; + width: 44px; + height: 44px; + background: transparent; + border: 0; + margin: -16px -16px 0 0; + padding: 0; + cursor: pointer; +`;class f extends o.default.Component{constructor(e){super(e)}render(){return o.default.createElement(a.default,{isOpen:this.props.isOpen,onRequestClose:this.props.onClose,role:"dialog",contentLabel:this.props.modalAriaLabel,overlayClassName:`yoast-modal__overlay ${this.props.className}`,className:`yoast-modal__content ${this.props.className}`,appElement:this.props.appElement,bodyOpenClassName:"yoast-modal_is-open"},o.default.createElement("div",null,this.props.heading&&o.default.createElement(d,{className:"yoast-modal__title"},this.props.heading),this.props.closeIconButton&&o.default.createElement(c,{type:"button",onClick:this.props.onClose,className:`yoast-modal__button-close-icon ${this.props.closeIconButtonClassName}`,"aria-label":this.props.closeIconButton},o.default.createElement(i.default,{icon:"times",color:s.colors.$color_grey_text}))),o.default.createElement("div",{className:"yoast-modal__inside"},this.props.children),this.props.closeButton&&o.default.createElement("div",{className:"yoast-modal__actions"},o.default.createElement("button",{type:"button",onClick:this.props.onClose,className:`yoast-modal__button-close ${this.props.closeButtonClassName}`},this.props.closeButton)))}}f.propTypes={children:n.default.any,className:n.default.string,isOpen:n.default.bool,onClose:n.default.func.isRequired,modalAriaLabel:n.default.string.isRequired,appElement:n.default.object.isRequired,heading:n.default.string,closeIconButton:n.default.string,closeIconButtonClassName:n.default.string,closeButton:n.default.string,closeButtonClassName:n.default.string},f.defaultProps={children:null,className:"",heading:"",closeIconButton:"",closeIconButtonClassName:"",closeButton:"",closeButtonClassName:"",isOpen:!1};const p=(0,l.default)(f)` + &.yoast-modal__overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.6); + transition: background 100ms ease-out; + z-index: 999999; + } + + &.yoast-modal__content { + position: absolute; + top: 50%; + left: 50%; + right: auto; + bottom: auto; + width: auto; + max-width: 90%; + max-height: 90%; + border: 0; + border-radius: 0; + margin-right: -50%; + padding: 24px; + transform: translate(-50%, -50%); + background-color: #fff; + outline: none; + + @media screen and ( max-width: 500px ) { + overflow-y: auto; + } + + @media screen and ( max-height: 640px ) { + overflow-y: auto; + } + } + + .yoast-modal__inside { + clear: both; + } + + .yoast-modal__actions { + text-align: right; + } + + .yoast-modal__actions button { + margin: 24px 0 0 8px; + } +`;t.default=p},64737:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(r(99196)),n=i(r(85890)),a=i(r(98487)),l=r(37188),s=i(r(78386));function i(e){return e&&e.__esModule?e:{default:e}}const u=a.default.div` + padding: 8px; +`,d=a.default.ol` + padding: 0; + margin: 0; + + list-style: none; + counter-reset: multi-step-progress-counter; + + li { + counter-increment: multi-step-progress-counter; + } +`,c=a.default.li` + display: flex; + align-items: baseline; + + margin: 8px 0; + + :first-child { + margin-top: 0; + } + + :last-child { + margin-bottom: 0; + } + + span { + margin: 0 8px; + } + + svg { + position: relative; + top: 2px; + } + + ::before { + content: counter( multi-step-progress-counter ); + font-size: 12px; + background: ${l.colors.$color_pink_dark}; + border-radius: 50%; + min-width: 16px; + height: 16px; + padding: 4px; + color: ${l.colors.$color_white}; + text-align: center; + } +`,f=(0,a.default)(c)` + span { + color: ${l.colors.$palette_grey_text_light}; + } + + ::before { + background-color: ${l.colors.$palette_grey_medium_dark}; + } +`,p=(0,a.default)(c)` + ::before { + background-color: ${l.colors.$palette_grey_medium_dark}; + } +`;class h extends o.default.Component{render(){return o.default.createElement(u,{role:"status","aria-live":"polite","aria-relevant":"additions text","aria-atomic":!0},o.default.createElement(d,null,this.props.steps.map((e=>{switch(e.status){case"running":return this.renderRunningState(e);case"failed":return this.renderFailedState(e);case"finished":return this.renderFinishedState(e);default:return this.renderPendingState(e)}}))))}renderPendingState(e){return o.default.createElement(f,{key:e.id},o.default.createElement("span",null,e.text))}renderRunningState(e){return o.default.createElement(p,{key:e.id},o.default.createElement("span",null,e.text),o.default.createElement(s.default,{icon:"loading-spinner"}))}renderFinishedState(e){return o.default.createElement(c,{key:e.id},o.default.createElement("span",null,e.text),o.default.createElement(s.default,{icon:"check",color:l.colors.$color_green_medium_light}))}renderFailedState(e){return o.default.createElement(c,{key:e.id},o.default.createElement("span",null,e.text),o.default.createElement(s.default,{icon:"times",color:l.colors.$color_red}))}}h.defaultProps={steps:[]},h.propTypes={steps:n.default.arrayOf(n.default.shape({status:n.default.oneOf(["pending","running","finished","failed"]).isRequired,text:n.default.string.isRequired,id:n.default.string.isRequired}))},t.default=h},18506:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=d(r(99196)),n=d(r(85890)),a=d(r(98487)),l=r(65736),s=r(37188),i=d(r(8272)),u=d(r(78386));function d(e){return e&&e.__esModule?e:{default:e}}const c=a.default.div` + display: flex; + align-items: center; + padding: 24px; + + h1, h2, h3, h4, h5, h6 { + font-size: 1.4em; + line-height: 1; + margin: 0 0 4px 0; + + @media screen and ( max-width: ${s.breakpoints.mobile} ) { + ${e=>e.isDismissable?"margin-right: 30px;":""} + } + } + + p:last-child { + margin: 0; + } + + @media screen and ( max-width: ${s.breakpoints.mobile} ) { + display: block; + position: relative; + padding: 16px; + } +`,f=a.default.img` + flex: 0 0 ${e=>e.imageWidth?e.imageWidth:"auto"}; + height: ${e=>e.imageHeight?e.imageHeight:"auto"}; + margin-right: 24px; + + @media screen and ( max-width: ${s.breakpoints.mobile} ) { + display: none; + } +`,p=a.default.div` + flex: 1 1 auto; +`,h=a.default.button` + flex: 0 0 40px; + height: 40px; + border: 0; + margin: 0 0 0 10px; + padding: 0; + background: transparent; + cursor: pointer; + + @media screen and ( max-width: ${s.breakpoints.mobile} ) { + width: 40px; + position: absolute; + top: 5px; + right: 5px; + margin: 0; + } +`,b=(0,a.default)(u.default)` + vertical-align: middle; +`;function g(e){const t=`${e.headingLevel}`;return o.default.createElement(i.default,null,o.default.createElement(c,{isDismissable:e.isDismissable},e.imageSrc&&o.default.createElement(f,{src:e.imageSrc,imageWidth:e.imageWidth,imageHeight:e.imageHeight,alt:""}),o.default.createElement(p,null,o.default.createElement(t,null,e.title),o.default.createElement("p",{className:"prova",dangerouslySetInnerHTML:{__html:e.html}})),e.isDismissable&&o.default.createElement(h,{onClick:e.onClick,type:"button","aria-label":(0,l.__)("Dismiss this notice","wordpress-seo")},o.default.createElement(b,{icon:"times",color:s.colors.$color_grey_text,size:"24px"}))))}g.propTypes={imageSrc:n.default.string,imageWidth:n.default.string,imageHeight:n.default.string,title:n.default.string,html:n.default.string,isDismissable:n.default.bool,onClick:n.default.func,headingLevel:n.default.string},g.defaultProps={isDismissable:!1,headingLevel:"h3"},t.default=g},8272:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(85890)),n=l(r(98487)),a=r(37188);function l(e){return e&&e.__esModule?e:{default:e}}const s=n.default.div` + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + background-color: ${e=>e.backgroundColor}; + min-height: ${e=>e.minHeight}; +`;s.propTypes={backgroundColor:o.default.string,minHeight:o.default.string},s.defaultProps={backgroundColor:a.colors.$color_white,minHeight:"0"},t.default=s},57186:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(85890)),n=l(r(98487)),a=r(37188);function l(e){return e&&e.__esModule?e:{default:e}}const s=n.default.progress` + box-sizing: border-box; + width: 100%; + height: 8px; + display: block; + margin-top: 8px; + appearance: none; + background-color: ${e=>e.backgroundColor}; + border: 1px solid ${e=>e.borderColor}; + + ::-webkit-progress-bar { + background-color: ${e=>e.backgroundColor}; + } + + ::-webkit-progress-value { + background-color: ${e=>e.progressColor}; + transition: width 250ms; + } + + ::-moz-progress-bar { + background-color: ${e=>e.progressColor}; + } + + ::-ms-fill { + background-color: ${e=>e.progressColor}; + border: 0; + } +`;s.defaultProps={max:1,value:0,progressColor:a.colors.$color_good,backgroundColor:a.colors.$color_background_light,borderColor:a.colors.$color_input_border,"aria-hidden":"true"},s.propTypes={max:o.default.number,value:o.default.number,progressColor:o.default.string,backgroundColor:o.default.string,borderColor:o.default.string,"aria-hidden":o.default.string},t.default=s},5180:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(23695),n=s(r(99196)),a=s(r(85890)),l=s(r(98487));function s(e){return e&&e.__esModule?e:{default:e}}const{stripTagsFromHtmlString:i}=o.strings,u=["a","b","strong","em","i","span","p","ul","ol","li","div"],d=l.default.li` + display: table-row; + font-size: 14px; +`,c=l.default.span` + display: table-cell; + padding: 2px; +`,f=(0,l.default)(c)` + position: relative; + top: 1px; + display: inline-block; + height: 8px; + width: 8px; + border-radius: 50%; + background-color: ${e=>e.scoreColor}; +`;f.propTypes={scoreColor:a.default.string.isRequired};const p=(0,l.default)(c)` + padding-left: 8px; + width: 100%; +`,h=(0,l.default)(c)` + font-weight: 600; + text-align: right; + padding-left: 16px; +`,b=e=>n.default.createElement(d,{className:`${e.className}`},n.default.createElement(f,{className:`${e.className}-bullet`,scoreColor:e.scoreColor}),n.default.createElement(p,{className:`${e.className}-text`,dangerouslySetInnerHTML:{__html:i(e.html,u)}}),e.value&&n.default.createElement(h,{className:`${e.className}-score`},e.value));b.propTypes={className:a.default.string.isRequired,scoreColor:a.default.string.isRequired,html:a.default.string.isRequired,value:a.default.number};const g=l.default.ul` + display: table; + box-sizing: border-box; + list-style: none; + max-width: 100%; + min-width: 200px; + margin: 8px 0; + padding: 0 8px; +`,m=e=>n.default.createElement(g,{className:e.className,role:"list"},e.items.map(((t,r)=>n.default.createElement(b,{className:`${e.className}__item`,key:r,scoreColor:t.color,html:t.html,value:t.value}))));m.propTypes={className:a.default.string,items:a.default.arrayOf(a.default.shape({color:a.default.string.isRequired,html:a.default.string.isRequired,value:a.default.number}))},m.defaultProps={className:"score-assessments"},t.default=m},37553:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=l(r(33014));function l(e){return e&&e.__esModule?e:{default:e}}const s=e=>o.default.createElement("section",{className:e.className},e.headingText&&o.default.createElement(a.default,{level:e.headingLevel,className:e.headingClassName},e.headingText),e.children);s.propTypes={className:n.default.string,headingText:n.default.string,headingLevel:n.default.number,headingClassName:n.default.string,children:n.default.any},s.defaultProps={headingLevel:1},t.default=s},91752:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StyledTitleContainer=t.StyledTitle=t.StyledSubTitle=t.SectionTitle=void 0;var o=i(r(99196)),n=i(r(85890)),a=i(r(98487)),l=r(37188),s=i(r(42479));function i(e){return e&&e.__esModule?e:{default:e}}const u=t.StyledTitleContainer=a.default.span` + flex-grow: 1; + overflow-x: hidden; + line-height: normal; // Avoid vertical scrollbar in IE 11 when rendered in the WP sidebar. +`,d=t.StyledTitle=a.default.span` + display: block; + line-height: 1.5; + text-overflow: ellipsis; + overflow: hidden; + color: ${l.colors.$color_headings}; +`,c=t.StyledSubTitle=a.default.span` + display: block; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-size: 0.8125rem; + margin-top: 2px; +`,f=e=>o.default.createElement(u,null,o.default.createElement(d,null,e.title,e.titleScreenReaderText&&o.default.createElement(s.default,null," "+e.titleScreenReaderText)),e.subTitle&&o.default.createElement(c,null,e.subTitle));t.SectionTitle=f,f.propTypes={title:n.default.string.isRequired,titleScreenReaderText:n.default.string,subTitle:n.default.string}},27177:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SparklesIcon=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}const l=({pressed:e=!1,className:t=""})=>{const r=`gradient-${Math.random().toString(36).substring(2,9)}`;return o.default.createElement("svg",{width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:t},o.default.createElement("path",{d:"M3.33284 2.96991V5.63658M1.99951 4.30324H4.66618M3.99951 12.3032V14.9699M2.66618 13.6366H5.33284M8.66618 2.96991L10.19 7.54134L13.9995 8.96991L10.19 10.3985L8.66618 14.9699L7.14237 10.3985L3.33284 8.96991L7.14237 7.54134L8.66618 2.96991Z",strokeLinecap:"round",strokeLinejoin:"round",stroke:e?"white":`url(#${r})`,strokeWidth:"1.33333"}),o.default.createElement("defs",null,o.default.createElement("linearGradient",{id:r,x1:"1.99951",y1:"2.96991",x2:"15.3308",y2:"4.69764",gradientUnits:"userSpaceOnUse"},o.default.createElement("stop",{offset:"0%",stopColor:"#A61E69"}),o.default.createElement("stop",{offset:"100%",stopColor:"#6366F1"}))))};t.SparklesIcon=l,l.propTypes={pressed:n.default.bool,className:n.default.string}},49526:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=l(r(98487));function l(e){return e&&e.__esModule?e:{default:e}}const s=a.default.div` + margin: 8px 0; + height: ${e=>e.barHeight}; + overflow: hidden; +`,i=a.default.span` + display: inline-block; + vertical-align: top; + width: ${e=>`${e.progressWidth}%`}; + background-color: ${e=>e.progressColor}; + height: 100%; +`;i.propTypes={progressWidth:n.default.number.isRequired,progressColor:n.default.string.isRequired};const u=e=>{let t=0;for(let r=0;ro.default.createElement(i,{className:`${e.className}__part`,key:n,progressColor:r.color,progressWidth:r.value/t*100}))))};u.propTypes={className:n.default.string,items:n.default.arrayOf(n.default.shape({value:n.default.number.isRequired,color:n.default.string.isRequired})),barHeight:n.default.string},u.defaultProps={className:"stacked-progress-bar",barHeight:"24px"},t.default=u},78538:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.StyledSectionBase=t.StyledIcon=t.StyledHeading=void 0;var o=c(r(99196)),n=c(r(85890)),a=c(r(98487)),l=r(37188),s=r(23695),i=c(r(37553)),u=c(r(33014)),d=c(r(78386));function c(e){return e&&e.__esModule?e:{default:e}}const f=t.StyledHeading=(0,a.default)(u.default)` + margin-left: ${(0,s.getDirectionalStyle)("0","20px")}; + padding: ${(0,s.getDirectionalStyle)("0","20px")}; +`,p=t.StyledIcon=(0,a.default)(d.default)``,h=t.StyledSectionBase=(0,a.default)(i.default)` + box-shadow: ${e=>e.hasPaperStyle?`0 1px 2px ${(0,l.rgba)(l.colors.$color_black,.2)}`:"none"}; + background-color: ${e=>e.hasPaperStyle?l.colors.$color_white:"transparent"}; + padding-right: ${e=>e.hasPaperStyle?"20px":"0"}; + padding-left: ${e=>e.hasPaperStyle?"20px":"0"}; + padding-bottom: ${e=>e.headingText?"0":"10px"}; + padding-top: ${e=>e.headingText?"0":"10px"}; + + *, & { + box-sizing: border-box; + + &:before, &:after { + box-sizing: border-box; + } + } + + & ${f} { + display: flex; + align-items: center; + padding: 8px 0 0; + font-size: 1rem; + line-height: 1.5; + margin: 0 0 16px; + font-family: "Open Sans", sans-serif; + font-weight: 300; + color: ${e=>e.headingColor?e.headingColor:`${l.colors.$color_grey_dark}`}; + } + + & ${p} { + flex: 0 0 auto; + ${(0,s.getDirectionalStyle)("margin-right","margin-left")}: 8px; + } +`,b=e=>o.default.createElement(h,{className:e.className,headingColor:e.headingColor,hasPaperStyle:e.hasPaperStyle},e.headingText&&o.default.createElement(f,{level:e.headingLevel,className:e.headingClassName},e.headingIcon&&o.default.createElement(p,{icon:e.headingIcon,color:e.headingIconColor,size:e.headingIconSize}),e.headingText),e.children);b.propTypes={className:n.default.string,headingLevel:n.default.number,headingClassName:n.default.string,headingColor:n.default.string,headingIcon:n.default.string,headingIconColor:n.default.string,headingIconSize:n.default.string,headingText:n.default.string,hasPaperStyle:n.default.bool,children:n.default.any},b.defaultProps={className:"yoast-section",headingLevel:2,hasPaperStyle:!0},t.default=b},78386:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.icons=t.default=void 0;var o=l(r(99196)),n=l(r(98487)),a=r(23695);function l(e){return e&&e.__esModule?e:{default:e}}const s=n.default.svg` + width: ${e=>e.size}; + height: ${e=>e.size}; + flex: none; + + animation: loadingSpinnerRotator 1.4s linear infinite; + + & .path { + stroke: ${e=>e.fill}; + stroke-dasharray: 187; + stroke-dashoffset: 0; + transform-origin: center; + animation: loadingSpinnerDash 1.4s ease-in-out infinite; + } + + @keyframes loadingSpinnerRotator { + 0% { transform: rotate( 0deg ); } + 100% { transform: rotate( 270deg ); } + } + + @keyframes loadingSpinnerDash { + 0% { stroke-dashoffset: 187; } + 50% { + stroke-dashoffset: 47; + transform:rotate( 135deg ); + } + 100% { + stroke-dashoffset: 187; + transform: rotate( 450deg ); + } + } +`,i="0 0 1792 1792",u=t.icons={"chevron-down":{viewbox:"0 0 24 24",width:"24px",path:[o.default.createElement("g",{key:"1"},o.default.createElement("path",{fill:"none",d:"M0,0h24v24H0V0z"})),o.default.createElement("g",{key:"2"},o.default.createElement("path",{d:"M7.41,8.59L12,13.17l4.59-4.58L18,10l-6,6l-6-6L7.41,8.59z"}))]},"chevron-up":{viewbox:"0 0 24 24",width:"24px",path:[o.default.createElement("g",{key:"1"},o.default.createElement("path",{fill:"none",d:"M0,0h24v24H0V0z"})),o.default.createElement("g",{key:"2"},o.default.createElement("path",{d:"M12,8l-6,6l1.41,1.41L12,10.83l4.59,4.58L18,14L12,8z"}))]},clipboard:{viewbox:i,path:"M768 1664h896v-640h-416q-40 0-68-28t-28-68v-416h-384v1152zm256-1440v-64q0-13-9.5-22.5t-22.5-9.5h-704q-13 0-22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h704q13 0 22.5-9.5t9.5-22.5zm256 672h299l-299-299v299zm512 128v672q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-160h-544q-40 0-68-28t-28-68v-1344q0-40 28-68t68-28h1088q40 0 68 28t28 68v328q21 13 36 28l408 408q28 28 48 76t20 88z"},check:{viewbox:i,path:"M249.2,431.2c-23,0-45.6,9.4-61.8,25.6L25.6,618.6C9.4,634.8,0,657.4,0,680.4c0,23,9.4,45.6,25.6,61.8 l593.1,593.1c16.2,16.2,38.8,25.6,61.8,25.6c23,0,45.6-9.4,61.8-25.6L1766.4,311c16.2-16.2,25.6-38.8,25.6-61.8 s-9.4-45.6-25.6-61.8L1604.5,25.6C1588.3,9.4,1565.8,0,1542.8,0c-23,0-45.6,9.4-61.8,25.6L680.4,827L311,456.3 C294.8,440.5,272.3,431.2,249.2,431.2z"},"angle-down":{viewbox:i,path:"M1395 736q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23z"},"angle-left":{viewbox:i,path:"M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l50 50q10 10 10 23z"},"angle-right":{viewbox:i,path:"M1171 960q0 13-10 23l-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23z"},"angle-up":{viewbox:i,path:"M1395 1184q0 13-10 23l-50 50q-10 10-23 10t-23-10l-393-393-393 393q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l466-466q10-10 23-10t23 10l466 466q10 10 10 23z"},"arrow-down":{viewbox:i,path:"M896 1791L120.91 448.5L1671.09 448.5z"},"arrow-left":{viewbox:i,path:"M1343.5 1671.09L1 896L1343.5 120.91z"},"arrow-right":{viewbox:i,path:"M1791 896L448.5 1671.09L448.5 120.91z"},"arrow-up":{viewbox:i,path:"M1671.09 1343.5L120.91 1343.5L896 1z"},"caret-right":{viewbox:"0 0 192 512",path:"M 0 384.662 V 127.338 c 0 -17.818 21.543 -26.741 34.142 -14.142 l 128.662 128.662 c 7.81 7.81 7.81 20.474 0 28.284 L 34.142 398.804 C 21.543 411.404 0 402.48 0 384.662 Z"},circle:{viewbox:i,path:"M1664 896q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"},desktop:{viewbox:i,path:"M1728 992v-832q0-13-9.5-22.5t-22.5-9.5h-1600q-13 0-22.5 9.5t-9.5 22.5v832q0 13 9.5 22.5t22.5 9.5h1600q13 0 22.5-9.5t9.5-22.5zm128-832v1088q0 66-47 113t-113 47h-544q0 37 16 77.5t32 71 16 43.5q0 26-19 45t-45 19h-512q-26 0-45-19t-19-45q0-14 16-44t32-70 16-78h-544q-66 0-113-47t-47-113v-1088q0-66 47-113t113-47h1600q66 0 113 47t47 113z"},edit:{viewbox:i,path:"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"},eye:{viewbox:i,path:"M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5t-316.5 131.5-316.5-131.5-131.5-316.5q0-121 61-225-229 117-381 353 133 205 333.5 326.5t434.5 121.5 434.5-121.5 333.5-326.5zm-720-384q0-20-14-34t-34-14q-125 0-214.5 89.5t-89.5 214.5q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5t-499.5 138.5-499.5-139-376.5-368q-20-35-20-69t20-69q140-229 376.5-368t499.5-139 499.5 139 376.5 368q20 35 20 69z"},"exclamation-triangle":{viewbox:i,path:"M1024 1375v-190q0-14-9.5-23.5T992 1152H800q-13 0-22.5 9.5T768 1185v190q0 14 9.5 23.5t22.5 9.5h192q13 0 22.5-9.5t9.5-23.5zm-2-374l18-459q0-12-10-19-13-11-24-11H786q-11 0-24 11-10 7-10 21l17 457q0 10 10 16.5t24 6.5h185q14 0 23.5-6.5t10.5-16.5zm-14-934l768 1408q35 63-2 126-17 29-46.5 46t-63.5 17H128q-34 0-63.5-17T18 1601q-37-63-2-126L784 67q17-31 47-49t65-18 65 18 47 49z"},"file-text":{viewbox:i,path:"M1596 380q28 28 48 76t20 88v1152q0 40-28 68t-68 28h-1344q-40 0-68-28t-28-68v-1600q0-40 28-68t68-28h896q40 0 88 20t76 48zm-444-244v376h376q-10-29-22-41l-313-313q-12-12-41-22zm384 1528v-1024h-416q-40 0-68-28t-28-68v-416h-768v1536h1280zm-1024-864q0-14 9-23t23-9h704q14 0 23 9t9 23v64q0 14-9 23t-23 9h-704q-14 0-23-9t-9-23v-64zm736 224q14 0 23 9t9 23v64q0 14-9 23t-23 9h-704q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h704zm0 256q14 0 23 9t9 23v64q0 14-9 23t-23 9h-704q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h704z"},gear:{viewbox:i,path:"M1800 800h-218q-26 -107 -81 -193l154 -154l-210 -210l-154 154q-88 -55 -191 -79v-218h-300v218q-103 24 -191 79l-154 -154l-212 212l154 154q-55 88 -79 191h-218v297h217q23 101 80 194l-154 154l210 210l154 -154q85 54 193 81v218h300v-218q103 -24 191 -79 l154 154l212 -212l-154 -154q57 -93 80 -194h217v-297zM950 650q124 0 212 88t88 212t-88 212t-212 88t-212 -88t-88 -212t88 -212t212 -88z"},key:{viewbox:i,path:"M832 512q0-80-56-136t-136-56-136 56-56 136q0 42 19 83-41-19-83-19-80 0-136 56t-56 136 56 136 136 56 136-56 56-136q0-42-19-83 41 19 83 19 80 0 136-56t56-136zm851 704q0 17-49 66t-66 49q-9 0-28.5-16t-36.5-33-38.5-40-24.5-26l-96 96 220 220q28 28 28 68 0 42-39 81t-81 39q-40 0-68-28l-671-671q-176 131-365 131-163 0-265.5-102.5t-102.5-265.5q0-160 95-313t248-248 313-95q163 0 265.5 102.5t102.5 265.5q0 189-131 365l355 355 96-96q-3-3-26-24.5t-40-38.5-33-36.5-16-28.5q0-17 49-66t66-49q13 0 23 10 6 6 46 44.5t82 79.5 86.5 86 73 78 28.5 41z"},list:{viewbox:i,path:"M384 1408q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm0-512q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5h-1216q-13 0-22.5-9.5t-9.5-22.5v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zm-1408-928q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm1408 416v192q0 13-9.5 22.5t-22.5 9.5h-1216q-13 0-22.5-9.5t-9.5-22.5v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5zm0-512v192q0 13-9.5 22.5t-22.5 9.5h-1216q-13 0-22.5-9.5t-9.5-22.5v-192q0-13 9.5-22.5t22.5-9.5h1216q13 0 22.5 9.5t9.5 22.5z"},"loading-spinner":{viewbox:"0 0 66 66",CustomComponent:s,path:[o.default.createElement("circle",{key:"5",className:"path",fill:"none",strokeWidth:"6",strokeLinecap:"round",cx:"33",cy:"33",r:"30"})]},mobile:{viewbox:i,path:"M976 1408q0-33-23.5-56.5t-56.5-23.5-56.5 23.5-23.5 56.5 23.5 56.5 56.5 23.5 56.5-23.5 23.5-56.5zm208-160v-704q0-13-9.5-22.5t-22.5-9.5h-512q-13 0-22.5 9.5t-9.5 22.5v704q0 13 9.5 22.5t22.5 9.5h512q13 0 22.5-9.5t9.5-22.5zm-192-848q0-16-16-16h-160q-16 0-16 16t16 16h160q16 0 16-16zm288-16v1024q0 52-38 90t-90 38h-512q-52 0-90-38t-38-90v-1024q0-52 38-90t90-38h512q52 0 90 38t38 90z"},"pencil-square":{viewbox:i,path:"M888 1184l116-116-152-152-116 116v56h96v96h56zm440-720q-16-16-33 1l-350 350q-17 17-1 33t33-1l350-350q17-17 1-33zm80 594v190q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q63 0 117 25 15 7 18 23 3 17-9 29l-49 49q-14 14-32 8-23-6-45-6h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-126q0-13 9-22l64-64q15-15 35-7t20 29zm-96-738l288 288-672 672h-288v-288zm444 132l-92 92-288-288 92-92q28-28 68-28t68 28l152 152q28 28 28 68t-28 68z"},plus:{viewbox:i,path:"M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"},"plus-circle":{viewbox:i,path:"M1344 960v-128q0-26-19-45t-45-19h-256v-256q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v256h-256q-26 0-45 19t-19 45v128q0 26 19 45t45 19h256v256q0 26 19 45t45 19h128q26 0 45-19t19-45v-256h256q26 0 45-19t19-45zm320-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"},"question-circle":{viewbox:i,path:"M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"},search:{viewbox:i,path:"M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"},"seo-score-bad":{viewbox:"0 0 496 512",path:"M248 8C111 8 0 119 0 256s111 248 248 248s248-111 248-248S385 8 248 8z M328 176c17.7 0 32 14.3 32 32 s-14.3 32-32 32s-32-14.3-32-32S310.3 176 328 176z M168 176c17.7 0 32 14.3 32 32s-14.3 32-32 32s-32-14.3-32-32S150.3 176 168 176 z M338.2 394.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320 s86.3 19.6 114.7 53.8C376.3 390 351.7 410.5 338.2 394.2L338.2 394.2z"},"seo-score-good":{viewbox:"0 0 496 512",path:"M248 8C111 8 0 119 0 256s111 248 248 248s248-111 248-248S385 8 248 8z M328 176c17.7 0 32 14.3 32 32 s-14.3 32-32 32s-32-14.3-32-32S310.3 176 328 176z M168 176c17.7 0 32 14.3 32 32s-14.3 32-32 32s-32-14.3-32-32S150.3 176 168 176 z M362.8 346.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5c22.4 26.9 55.2 42.2 90.2 42.2 s67.8-15.4 90.2-42.2C351.6 309.5 376.3 329.9 362.8 346.2L362.8 346.2z"},"seo-score-none":{viewbox:"0 0 496 512",path:"M248 8C111 8 0 119 0 256s111 248 248 248s248-111 248-248S385 8 248 8z"},"seo-score-ok":{viewbox:"0 0 496 512",path:"M248 8c137 0 248 111 248 248S385 504 248 504S0 393 0 256S111 8 248 8z M360 208c0-17.7-14.3-32-32-32 s-32 14.3-32 32s14.3 32 32 32S360 225.7 360 208z M344 368c21.2 0 21.2-32 0-32H152c-21.2 0-21.2 32 0 32H344z M200 208 c0-17.7-14.3-32-32-32s-32 14.3-32 32s14.3 32 32 32S200 225.7 200 208z"},times:{viewbox:i,path:"M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"},"times-circle":{viewbox:"0 0 20 20",path:"M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8zm5 11l-3-3 3-3-2-2-3 3-3-3-2 2 3 3-3 3 2 2 3-3 3 3z"},"alert-info":{viewbox:"0 0 512 512",path:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},"alert-error":{viewbox:"0 0 512 512",path:"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"},"alert-success":{viewbox:"0 0 512 512",path:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},"alert-warning":{viewbox:"0 0 576 512",path:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},"chart-square-bar":{viewbox:"0 0 24 24",path:[o.default.createElement("path",{key:"1",fill:"#ffffff",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M16 8v8m-4-5v5m-4-2v2m-2 4h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})]}};t.default=(0,a.createSvgIconComponent)(u)},97485:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=d(r(99196)),n=d(r(85890)),a=d(r(98487)),l=r(3199),s=r(23613),i=r(82572),u=r(23695);function d(e){return e&&e.__esModule?e:{default:e}}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{label:t,helpLink:r,...n}=e;return o.default.createElement(l.InputContainer,null,o.default.createElement(f,null,o.default.createElement(p,{htmlFor:n.id},t),r),o.default.createElement(s.InputField,c({},n,{autoComplete:"off"})))};h.propTypes={type:n.default.string,id:n.default.string.isRequired,label:n.default.string,helpLink:n.default.node},h.defaultProps={type:"text",label:"",helpLink:null},t.default=h},51316:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(r(99196)),n=i(r(98487)),a=i(r(85890)),l=r(340),s=r(37188);function i(e){return e&&e.__esModule?e:{default:e}}const u=n.default.div` + font-size: 1em; + + .react-tabs__tab-list { + display: flex; + flex-wrap: wrap; + justify-content: center; + list-style: none; + padding: 0; + margin: 0; + border-bottom: 4px solid ${s.colors.$color_grey_light}; + } + + .react-tabs__tab { + flex: 0 1 ${e=>e.tabsBaseWidth}; + text-align: center; + margin: 0 16px; + padding: 16px 0; + cursor: pointer; + font-family: "Open Sans", sans-serif; + font-size: ${e=>e.tabsFontSize}; + line-height: 1.33333333; + font-weight: ${e=>e.tabsFontWeight}; + color: ${e=>e.tabsTextColor}; + text-transform: ${e=>e.tabsTextTransform}; + + &.react-tabs__tab--selected { + box-shadow: 0 4px 0 0 ${s.colors.$color_pink_dark}; + } + } + + .react-tabs__tab-panel { + display: none; + padding: 24px 40px; + + @media screen and ( max-width: ${s.breakpoints.mobile} ) { + padding: 16px 16px; + } + + :focus { + outline: none; + } + + &.react-tabs__tab-panel--selected { + display: block; + } + } +`;u.propTypes={tabsTextColor:a.default.string,tabsTextTransform:a.default.string,tabsFontSize:a.default.string,tabsFontWeight:a.default.string,tabsBaseWidth:a.default.string};class d extends o.default.Component{getTabs(){return this.props.items.map((e=>o.default.createElement(l.Tab,{key:e.id},e.label)))}getTabPanels(){return this.props.items.map((e=>o.default.createElement(l.TabPanel,{key:e.id,tabIndex:"0"},e.content)))}render(){return o.default.createElement(u,{tabsTextColor:this.props.tabsTextColor,tabsTextTransform:this.props.tabsTextTransform,tabsFontSize:this.props.tabsFontSize,tabsFontWeight:this.props.tabsFontWeight,tabsBaseWidth:this.props.tabsBaseWidth},o.default.createElement(l.Tabs,{onSelect:this.props.onTabSelect},o.default.createElement(l.TabList,null,this.getTabs()),this.getTabPanels()))}componentDidMount(){this.props.onTabsMounted()}}d.propTypes={items:a.default.arrayOf(a.default.shape({id:a.default.string.isRequired,label:a.default.string.isRequired,content:a.default.object.isRequired})),tabsTextColor:a.default.string,tabsTextTransform:a.default.string,tabsFontSize:a.default.string,tabsFontWeight:a.default.string,tabsBaseWidth:a.default.string,onTabSelect:a.default.func,onTabsMounted:a.default.func},d.defaultProps={items:[],tabsTextColor:s.colors.$color_grey_dark,tabsTextTransform:"none",tabsFontSize:"1.5em",tabsFontWeight:"200",tabsBaseWidth:"200px",onTabSelect:()=>{},onTabsMounted:()=>{}},t.default=d},22386:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(r(99196)),n=i(r(85890)),a=i(r(1453)),l=i(r(66763)),s=i(r(22386));function i(e){return e&&e.__esModule?e:{default:e}}class u extends o.default.Component{constructor(e){super(e),this.optionalAttributes=this.parseOptionalAttributes()}render(){return this.optionalAttributes=this.parseOptionalAttributes(),this.props.class&&(this.optionalAttributes.container.className=this.props.class),o.default.createElement("div",this.optionalAttributes.container,o.default.createElement(a.default,{for:this.props.name,optionalAttributes:this.optionalAttributes.label},this.props.label),this.getTextField())}getTextField(){return!0===this.props.multiline?o.default.createElement("div",null,o.default.createElement(s.default,{name:this.props.name,id:this.props.name,onChange:this.props.onChange,optionalAttributes:this.optionalAttributes.field,hasFocus:this.props.hasFocus,value:this.props.value}),this.props.explanation&&o.default.createElement("p",null,this.props.explanation)):o.default.createElement("div",null,o.default.createElement(l.default,{name:this.props.name,id:this.props.name,type:"text",onChange:this.props.onChange,value:this.props.value,hasFocus:this.props.hasFocus,autoComplete:this.props.autoComplete,optionalAttributes:this.optionalAttributes.field}),this.props.explanation&&o.default.createElement("p",null,this.props.explanation))}parseOptionalAttributes(){const e={},t={},r={id:this.props.name};return Object.keys(this.props).forEach(function(o){o.startsWith("label-")&&(t[o.split("-").pop()]=this.props[o]),o.startsWith("field-")&&(r[o.split("-").pop()]=this.props[o]),o.startsWith("container-")&&(e[o.split("-").pop()]=this.props[o])}.bind(this)),{label:t,field:r,container:e}}}u.propTypes={label:n.default.string.isRequired,name:n.default.string.isRequired,onChange:n.default.func.isRequired,value:n.default.string,optionalAttributes:n.default.object,multiline:n.default.bool,hasFocus:n.default.bool,class:n.default.string,explanation:n.default.string,autoComplete:n.default.string},u.defaultProps={optionalAttributes:{},multiline:!1,hasFocus:!1,value:null,class:null,explanation:!1,autoComplete:null},t.default=u},47816:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=u(r(85890)),n=u(r(99196)),a=u(r(98487)),l=r(65736),s=r(23695),i=r(37188);function u(e){return e&&e.__esModule?e:{default:e}}const d=a.default.div` + display: flex; + width: 100%; + justify-content: space-between; + align-items: center; + position: relative; +`,c=a.default.span` + ${(0,s.getDirectionalStyle)("margin-right","margin-left")}: 16px; + flex: 1; + cursor: pointer; +`,f=a.default.div` + background-color: ${e=>e.isEnabled?"#a5d6a7":i.colors.$color_button_border}; + border-radius: 7px; + height: 14px; + width: 30px; + cursor: pointer; + margin: 0; + outline: 0; + &:focus > span { + box-shadow: inset 0 0 0 1px ${i.colors.$color_white}, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); + } +`,p=a.default.span` + background-color: ${e=>e.isEnabled?i.colors.$color_green_medium_light:i.colors.$color_grey_medium_dark}; + ${e=>e.isEnabled?(0,s.getDirectionalStyle)("margin-left: 12px;","margin-right: 12px;"):(0,s.getDirectionalStyle)("margin-left: -2px;","margin-right: -2px;")}; + box-shadow: 0 2px 2px 2px rgba(0, 0, 0, 0.1); + border-radius: 100%; + height: 20px; + width: 20px; + position: absolute; + margin-top: -3px; +`,h=a.default.span` + font-size: 14px; + line-height: 20px; + ${(0,s.getDirectionalStyle)("margin-left","margin-right")}: 8px; + font-style: italic; +`;class b extends n.default.Component{constructor(e){super(e),this.onClick=this.props.onToggleDisabled,this.onKeyUp=this.props.onToggleDisabled,this.setToggleState=this.setToggleState.bind(this),this.handleOnKeyDown=this.handleOnKeyDown.bind(this),!0!==e.disable&&(this.onClick=this.setToggleState.bind(this),this.onKeyUp=this.setToggleState.bind(this))}setToggleState(e){"keyup"===e.type&&32!==e.keyCode||this.props.onSetToggleState(!this.props.isEnabled)}handleOnKeyDown(e){32===e.keyCode&&e.preventDefault()}render(){return n.default.createElement(d,null,this.props.labelText&&n.default.createElement(c,{id:this.props.id,onClick:this.onClick},this.props.labelText),n.default.createElement(f,{isEnabled:this.props.isEnabled,onKeyDown:this.handleOnKeyDown,onClick:this.onClick,onKeyUp:this.onKeyUp,tabIndex:"0",role:"checkbox","aria-labelledby":this.props.id,"aria-checked":this.props.isEnabled,"aria-disabled":this.props.disable},n.default.createElement(p,{isEnabled:this.props.isEnabled})),this.props.showToggleStateLabel&&n.default.createElement(h,{"aria-hidden":"true"},this.props.isEnabled?(0,l.__)("On","wordpress-seo"):(0,l.__)("Off","wordpress-seo")))}}b.propTypes={isEnabled:o.default.bool,onSetToggleState:o.default.func,disable:o.default.bool,onToggleDisabled:o.default.func,id:o.default.string.isRequired,labelText:o.default.string,showToggleStateLabel:o.default.bool},b.defaultProps={isEnabled:!1,onSetToggleState:()=>{},labelText:"",disable:!1,onToggleDisabled:()=>{},showToggleStateLabel:!0},t.default=b},1382:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=d(r(66366)),n=d(r(85890)),a=d(r(99196)),l=d(r(98487)),s=r(37188),i=r(23695),u=d(r(78386));function d(e){return e&&e.__esModule?e:{default:e}}const c=l.default.div` + display: flex; + padding: 16px; + background: ${s.colors.$color_alert_warning_background}; + color: ${s.colors.$color_alert_warning_text}; +`,f=(0,l.default)(u.default)` + margin-top: 2px; +`,p=l.default.div` + margin: ${(0,i.getDirectionalStyle)("0 0 0 8px","0 8px 0 0")}; +`;class h extends a.default.Component{render(){const{message:e}=this.props;return(0,o.default)(e)?null:a.default.createElement(c,null,a.default.createElement(f,{icon:"exclamation-triangle",size:"16px"}),a.default.createElement(p,null,e))}}h.propTypes={message:n.default.array},h.defaultProps={message:[]},t.default=h},64385:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}const l=e=>{console.warn("The WordList component has been deprecated and will be removed in a future release.");const{title:t,classNamePrefix:r,words:n,header:a,footer:l}=e,s=o.default.createElement("ol",{className:r+"__list"},n.map((e=>o.default.createElement("li",{key:e,className:r+"__item"},e))));return o.default.createElement("div",{className:r},o.default.createElement("p",null,o.default.createElement("strong",null,t)),a,s,l)};l.propTypes={words:n.default.array.isRequired,title:n.default.string.isRequired,header:n.default.string,footer:n.default.string,classNamePrefix:n.default.string},l.defaultProps={classNamePrefix:"",header:"",footer:""},t.default=l},1993:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i(r(99196)),n=i(r(85890)),a=i(r(96746)),l=r(65736),s=i(r(31367));function i(e){return e&&e.__esModule?e:{default:e}}const u=({words:e,researchArticleLink:t})=>{const r=o.default.createElement("p",{className:"yoast-field-group__title"},(0,l.__)("Prominent words","wordpress-seo")),n=o.default.createElement("p",null,0===e.length?(0,l.__)("Once you add a bit more copy, we'll give you a list of words that occur the most in the content. These give an indication of what your content focuses on.","wordpress-seo"):(0,l.__)("The following words occur the most in the content. These give an indication of what your content focuses on. If the words differ a lot from your topic, you might want to rewrite your content accordingly. ","wordpress-seo")),i=o.default.createElement("p",null,(e=>{const t=(0,l.sprintf)((0,l.__)("Read our %1$sultimate guide to keyword research%2$s to learn more about keyword research and keyword strategy.","wordpress-seo"),"{{a}}","{{/a}}");return(0,a.default)({mixedString:t,components:{a:o.default.createElement("a",{href:e,target:"_blank",rel:"noreferrer"})}})})(t));return o.default.createElement(s.default,{words:e,header:r,introduction:n,footer:i})};u.propTypes={words:n.default.arrayOf(n.default.object).isRequired,researchArticleLink:n.default.string.isRequired},t.default=u},31367:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=l(r(74643));function l(e){return e&&e.__esModule?e:{default:e}}class s extends o.default.Component{constructor(e){super(e),this.state={words:[]}}static getDerivedStateFromProps(e){const t=[...e.words];t.sort(((e,t)=>t.getOccurrences()-e.getOccurrences()));const r=t.map((e=>e.getOccurrences())),o=Math.max(...r);return{words:t.map((e=>{const t=e.getOccurrences();return{name:e.getWord(),number:t,width:t/o*100}}))}}render(){return o.default.createElement("div",null,this.props.header,this.props.introduction,o.default.createElement(a.default,{items:this.state.words}),this.props.footer)}}s.propTypes={words:n.default.array.isRequired,header:n.default.element,introduction:n.default.element,footer:n.default.element},s.defaultProps={header:null,introduction:null,footer:null},t.default=s},14085:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o,n=(o=r(99196))&&o.__esModule?o:{default:o};function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.default.createElement("svg",a({},e,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 500 500"}),n.default.createElement("path",{d:"M80,0H420a80,80,0,0,1,80,80V500a0,0,0,0,1,0,0H80A80,80,0,0,1,0,420V80A80,80,0,0,1,80,0Z",fill:"#a4286a"}),n.default.createElement("path",{d:"M437.61,2,155.89,500H500V80A80,80,0,0,0,437.61,2Z",fill:"#6c2548"}),n.default.createElement("path",{d:"M74.4,337.3v34.9c21.6-.9,38.5-8,52.8-22.5s27.4-38,39.9-72.9l92.6-248H214.9L140.3, 236l-37-116.2h-41l54.4,139.8a57.54,57.54,0,0,1,0,41.8C111.2,315.6,101.3,332.3,74.4,337.3Z",fill:"#fff"}),n.default.createElement("circle",{cx:"368.33",cy:"124.68",r:"97.34",transform:"translate(19.72 296.97) rotate(-45)",fill:"#9fda4f"}),n.default.createElement("path",{d:"M416.2,39.93,320.46,209.44A97.34,97.34,0,1,0,416.2,39.93Z",fill:"#77b227"}),n.default.createElement("path",{d:"M294.78,254.75h0l-.15-.08-.13-.07h0a63.6,63.6,0,0,0-62.56,110.76h0l.07,0,.06,0h0a63.6,63.6,0,0,0,62.71-110.67Z",fill:"#fec228"}),n.default.createElement("path",{d:"M294.5,254.59,231.94,365.35A63.6,63.6,0,1,0,294.5,254.59Z",fill:"#f49a00"}),n.default.createElement("path",{d:"M222.31,450.07A38.16,38.16,0,0,0,203,416.83h0l0,0h0a38.18,38.18,0,1,0,19.41,33.27Z",fill:"#ff4e47"}),n.default.createElement("path",{d:"M202.9,416.8l-37.54,66.48A38.17,38.17,0,0,0,202.9,416.8Z",fill:"#ed261f"}))},72768:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=u;var o=s(r(99196)),n=s(r(85890)),a=s(r(98487)),l=s(r(77844));function s(e){return e&&e.__esModule?e:{default:e}}const i=a.default.div` + position: relative; + padding-bottom: 56.25%; /* 16:9 */ + height: 0; + overflow: hidden; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +`;function u(e){return o.default.createElement(i,null,o.default.createElement(l.default,e))}u.propTypes={width:n.default.number,height:n.default.number,src:n.default.string.isRequired,title:n.default.string.isRequired,frameBorder:n.default.number,allowFullScreen:n.default.bool},u.defaultProps={width:560,height:315,frameBorder:0,allowFullScreen:!0}},76916:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=l(r(43905));function l(e){return e&&e.__esModule?e:{default:e}}class s extends o.default.Component{constructor(){super(),this.focus=this.focus.bind(this),this.blur=this.blur.bind(this),this.state={focused:!1}}focus(){this.setState({focused:!0})}blur(){this.setState({focused:!1})}getStyles(){return!0===this.state.focused?a.default.ScreenReaderText.focused:a.default.ScreenReaderText.default}render(){return o.default.createElement("a",{href:"#"+this.props.anchor,className:"screen-reader-shortcut",style:this.getStyles(),onFocus:this.focus,onBlur:this.blur},this.props.children)}}s.propTypes={anchor:n.default.string.isRequired,children:n.default.string.isRequired},t.default=s},42479:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=l(r(43905));function l(e){return e&&e.__esModule?e:{default:e}}const s=e=>o.default.createElement("span",{className:"screen-reader-text",style:a.default.ScreenReaderText.default},e.children);s.propTypes={children:n.default.string.isRequired},t.default=s},43905:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default={ScreenReaderText:{default:{clip:"rect(1px, 1px, 1px, 1px)",position:"absolute",height:"1px",width:"1px",overflow:"hidden"},focused:{clip:"auto",display:"block",left:"5px",top:"5px",height:"auto",width:"auto",zIndex:"100000",position:"absolute",backgroundColor:"#eeeeee ",padding:"10px"}}}},75377:(e,t,r)=>{"use strict";r(89364),r(26242),r(91370),r(68798),r(16798)},41834:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o,n=(o=r(99196))&&o.__esModule?o:{default:o},a=r(65736);t.default=()=>n.default.createElement("span",{className:"yoast-badge yoast-beta-badge"},(0,a.__)("Beta","wordpress-seo"))},40815:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"BetaBadge",{enumerable:!0,get:function(){return n.default}}),r(15446),r(54760);var o,n=(o=r(41834))&&o.__esModule?o:{default:o}},22490:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonStyledLink=t.Button=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let r=u[e];return t&&(r+=" yoast-button--small"),r},c=e=>i[e]||null,f=e=>{const{children:t,className:r,variant:n,small:a,type:s,buttonRef:i,...u}=e,f=c(n),p=f&&f.iconBefore,h=f&&f.iconAfter;return o.default.createElement("button",l({ref:i,className:r||d(n,a),type:s},u),!!p&&o.default.createElement("span",{className:p}),t,!!h&&o.default.createElement("span",{className:h}))};t.Button=f,f.propTypes={onClick:n.default.func,type:n.default.string,className:n.default.string,buttonRef:n.default.object,small:n.default.bool,variant:n.default.oneOf(Object.keys(u)),children:n.default.oneOfType([n.default.node,n.default.arrayOf(n.default.node)])},f.defaultProps={className:"",type:"button",variant:"primary",small:!1,children:null,onClick:null,buttonRef:null};const p=e=>{const{children:t,className:r,variant:n,small:a,buttonRef:s,...i}=e,u=c(n),f=u&&u.iconBefore,p=u&&u.iconAfter;return o.default.createElement("a",l({className:r||d(n,a),ref:s},i),!!f&&o.default.createElement("span",{className:f}),t,!!p&&o.default.createElement("span",{className:p}))};t.ButtonStyledLink=p,p.propTypes={href:n.default.string.isRequired,variant:n.default.oneOf(Object.keys(u)),small:n.default.bool,className:n.default.string,buttonRef:n.default.object,children:n.default.oneOfType([n.default.node,n.default.arrayOf(n.default.node)])},p.defaultProps={className:"",variant:"primary",small:!1,children:null,buttonRef:null}},13537:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CloseButton=void 0;var o=l(r(99196)),n=l(r(85890));r(40367);var a=r(65736);function l(e){return e&&e.__esModule?e:{default:e}}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;to.default.createElement("button",s({className:"yoast-close","aria-label":(0,a.__)("Close","wordpress-seo"),type:"button"},e),i);t.CloseButton=u,u.propTypes={onClick:n.default.func.isRequired}},76149:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ButtonStyledLink",{enumerable:!0,get:function(){return o.ButtonStyledLink}}),Object.defineProperty(t,"CloseButton",{enumerable:!0,get:function(){return n.CloseButton}}),Object.defineProperty(t,"NewButton",{enumerable:!0,get:function(){return o.Button}}),r(40367);var o=r(22490),n=r(13537)},46362:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BaseButton=void 0,t.addActiveStyle=h,t.addBaseStyle=c,t.addButtonStyles=void 0,t.addFocusStyle=f,t.addHoverStyle=p,t.default=void 0;var o=i(r(98487)),n=i(r(57349)),a=i(r(85890)),l=r(37188),s=r(23695);function i(e){return e&&e.__esModule?e:{default:e}}const u={minHeight:32,verticalPadding:4,borderWidth:1},d=u.minHeight-2*u.verticalPadding-2*u.borderWidth;function c(e){return(0,o.default)(e)` + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; + border-width: ${`${u.borderWidth}px`}; + border-style: solid; + margin: 0; + padding: ${`${u.verticalPadding}px`} 10px; + border-radius: 3px; + cursor: pointer; + box-sizing: border-box; + font-size: inherit; + font-family: inherit; + font-weight: inherit; + text-align: ${(0,s.getDirectionalStyle)("left","right")}; + overflow: visible; + min-height: ${`${u.minHeight}px`}; + transition: var(--yoast-transition-default); + + svg { + // Safari 10 + align-self: center; + } + + // Only needed for IE 10+. Don't add spaces within brackets for this to work. + @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + ::after { + display: inline-block; + content: ""; + min-height: ${`${d}px`}; + } + } + `}function f(e){return(0,o.default)(e)` + &::-moz-focus-inner { + border-width: 0; + } + + &:focus { + outline: none; + border-color: ${e=>e.focusBorderColor}; + color: ${e=>e.focusColor}; + background-color: ${e=>e.focusBackgroundColor}; + box-shadow: 0 0 3px ${e=>(0,l.rgba)(e.focusBoxShadowColor,.8)} + } + `}function p(e){return(0,o.default)(e)` + &:hover { + color: ${e=>e.hoverColor}; + background-color: ${e=>e.hoverBackgroundColor}; + border-color: var(--yoast-color-border--default); + } + `}function h(e){return(0,o.default)(e)` + &:active { + color: ${e=>e.activeColor}; + background-color: ${e=>e.activeBackgroundColor}; + border-color: ${e=>e.hoverBorderColor}; + box-shadow: inset 0 2px 5px -3px ${e=>(0,l.rgba)(e.activeBorderColor,.5)} + } + `}const b=t.addButtonStyles=(0,n.default)([h,f,p,c]),g=t.BaseButton=b(o.default.button` + color: ${e=>e.textColor}; + border-color: ${e=>e.borderColor}; + background: ${e=>e.backgroundColor}; + box-shadow: 0 1px 0 ${e=>(0,l.rgba)(e.boxShadowColor,1)}; + `);g.propTypes={type:a.default.string,backgroundColor:a.default.string,textColor:a.default.string,borderColor:a.default.string,boxShadowColor:a.default.string,hoverColor:a.default.string,hoverBackgroundColor:a.default.string,activeColor:a.default.string,activeBackgroundColor:a.default.string,activeBorderColor:a.default.string,focusColor:a.default.string,focusBackgroundColor:a.default.string,focusBorderColor:a.default.string,focusBoxShadowColor:a.default.string},g.defaultProps={type:"button",backgroundColor:l.colors.$color_button,textColor:l.colors.$color_button_text,borderColor:l.colors.$color_button_border,boxShadowColor:l.colors.$color_button_border,hoverColor:l.colors.$color_button_text_hover,hoverBackgroundColor:l.colors.$color_button_hover,activeColor:l.colors.$color_button_text_hover,activeBackgroundColor:l.colors.$color_button,activeBorderColor:l.colors.$color_button_border_active,focusColor:l.colors.$color_button_text_hover,focusBackgroundColor:l.colors.$color_white,focusBorderColor:l.colors.$color_blue,focusBoxShadowColor:l.colors.$color_blue_dark},t.default=g},4532:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=d(r(99196)),n=d(r(85890)),a=d(r(98487)),l=d(r(16653)),s=r(23695),i=d(r(46362)),u=r(95235);function d(e){return e&&e.__esModule?e:{default:e}}const c=e=>{const{children:t,icon:r,iconColor:n}=e;let d=u.SvgIcon;t&&(d=function(e){return(0,a.default)(e)` + margin: ${(0,s.getDirectionalStyle)("0 8px 0 0","0 0 0 8px")}; + flex-shrink: 0; + `}(d));const c=(0,l.default)(e,"icon");return o.default.createElement(i.default,c,o.default.createElement(d,{icon:r,color:n}),t)};c.propTypes={icon:n.default.string.isRequired,iconColor:n.default.string,children:n.default.oneOfType([n.default.arrayOf(n.default.node),n.default.node,n.default.string])},c.defaultProps={iconColor:"#000"},t.default=c},3234:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=c(r(99196)),n=c(r(98487)),a=c(r(85890)),l=c(r(57349)),s=c(r(16653)),i=r(37188),u=c(r(78386)),d=r(46362);function c(e){return e&&e.__esModule?e:{default:e}}const f=(0,l.default)([d.addActiveStyle,d.addFocusStyle,d.addHoverStyle])(n.default.button` + display: inline-flex; + flex-direction: column; + justify-content: center; + align-items: center; + cursor: pointer; + box-sizing: border-box; + border: 1px solid transparent; + margin: 0; + padding: 8px; + overflow: visible; + font-family: inherit; + font-weight: inherit; + color: ${e=>e.textColor}; + background: ${e=>e.backgroundColor}; + font-size: ${e=>e.textFontSize}; + + svg { + margin: 0 0 8px; + flex-shrink: 0; + fill: currentColor; + // Safari 10 + align-self: center; + } + + &:active { + box-shadow: none; + } + `),p=e=>{const{children:t,icon:r,textColor:n}=e,a=(0,s.default)(e,"icon");return o.default.createElement(f,a,o.default.createElement(u.default,{icon:r,color:n}),t)};p.propTypes={type:a.default.string,icon:a.default.string.isRequired,textColor:a.default.string,textFontSize:a.default.string,backgroundColor:a.default.string,borderColor:a.default.string,hoverColor:a.default.string,hoverBackgroundColor:a.default.string,hoverBorderColor:a.default.string,activeColor:a.default.string,activeBackgroundColor:a.default.string,activeBorderColor:a.default.string,focusColor:a.default.string,focusBackgroundColor:a.default.string,focusBorderColor:a.default.string,focusBoxShadowColor:a.default.string,children:a.default.oneOfType([a.default.arrayOf(a.default.node),a.default.node,a.default.string]).isRequired},p.defaultProps={type:"button",textColor:i.colors.$color_blue,textFontSize:"inherit",backgroundColor:"transparent",borderColor:"transparent",hoverColor:i.colors.$color_white,hoverBackgroundColor:i.colors.$color_blue,hoverBorderColor:i.colors.$color_button_border_hover,activeColor:i.colors.$color_white,activeBackgroundColor:i.colors.$color_blue,activeBorderColor:i.colors.$color_button_border_active,focusColor:i.colors.$color_white,focusBackgroundColor:i.colors.$color_blue,focusBorderColor:i.colors.$color_blue,focusBoxShadowColor:i.colors.$color_blue_dark},t.default=p},71875:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=s(r(99196)),n=s(r(85890)),a=s(r(46362)),l=r(95235);function s(e){return e&&e.__esModule?e:{default:e}}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{children:t,className:r,prefixIcon:n,suffixIcon:s,...u}=e;return o.default.createElement(a.default,i({className:r},u),n&&n.icon&&o.default.createElement(l.SvgIcon,{icon:n.icon,color:n.color,size:n.size}),t,s&&s.icon&&o.default.createElement(l.SvgIcon,{icon:s.icon,color:s.color,size:s.size}))};u.propTypes={className:n.default.string,prefixIcon:n.default.shape({icon:n.default.string,color:n.default.string,size:n.default.string}),suffixIcon:n.default.shape({icon:n.default.string,color:n.default.string,size:n.default.string}),children:n.default.oneOfType([n.default.arrayOf(n.default.node),n.default.node,n.default.string])},t.default=u},16785:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LinkButton=void 0;var o=s(r(98487)),n=s(r(85890)),a=r(37188),l=r(46362);function s(e){return e&&e.__esModule?e:{default:e}}const i=t.LinkButton=(0,l.addButtonStyles)(o.default.a` + text-decoration: none; + color: ${e=>e.textColor}; + border-color: ${e=>e.borderColor}; + background: ${e=>e.backgroundColor}; + box-shadow: 0 1px 0 ${e=>(0,a.rgba)(e.boxShadowColor,1)}; + `);i.propTypes={backgroundColor:n.default.string,textColor:n.default.string,borderColor:n.default.string,boxShadowColor:n.default.string,hoverColor:n.default.string,hoverBackgroundColor:n.default.string,hoverBorderColor:n.default.string,activeColor:n.default.string,activeBackgroundColor:n.default.string,activeBorderColor:n.default.string,focusColor:n.default.string,focusBackgroundColor:n.default.string,focusBorderColor:n.default.string,focusBoxShadowColor:n.default.string},i.defaultProps={backgroundColor:a.colors.$color_button,textColor:a.colors.$color_button_text,borderColor:a.colors.$color_button_border,boxShadowColor:a.colors.$color_button_border,hoverColor:a.colors.$color_button_text_hover,hoverBackgroundColor:a.colors.$color_button_hover,hoverBorderColor:a.colors.$color_button_border_hover,activeColor:a.colors.$color_button_text_hover,activeBackgroundColor:a.colors.$color_button,activeBorderColor:a.colors.$color_button_border_hover,focusColor:a.colors.$color_button_text_hover,focusBackgroundColor:a.colors.$color_white,focusBorderColor:a.colors.$color_blue,focusBoxShadowColor:a.colors.$color_blue_dark}},60813:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UpsellButtonBase=t.UpsellButton=void 0,t.addButtonStyles=p;var o=u(r(99196)),n=u(r(85890)),a=u(r(98487)),l=r(37188),s=u(r(78386)),i=r(83908);function u(e){return e&&e.__esModule?e:{default:e}}const d={minHeight:48,verticalPadding:8,borderWidth:0},c=d.minHeight-2*d.verticalPadding-2*d.borderWidth,f=(0,a.default)(s.default)` + margin: 2px 4px 0 4px; + flex-shrink: 0; +`;function p(e){return(0,a.default)(e)` + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; + min-height: ${`${d.minHeight}px`}; + margin: 0; + overflow: auto; + min-width: 152px; + padding: 0 16px; + padding: ${`${d.verticalPadding}px`} 8px ${`${d.verticalPadding}px`} 16px; + border: 0; + border-radius: 4px; + box-sizing: border-box; + font: 400 16px/24px "Open Sans", sans-serif; + box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.2); + filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2)); + transition: box-shadow 150ms ease-out; + + &:hover, + &:focus, + &:active { + background: ${l.colors.$color_button_upsell_hover}; + } + + &:active { + transform: translateY( 1px ); + box-shadow: none; + filter: none; + } + + // Only needed for IE 10+. Don't add spaces within brackets for this to work. + @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + ::after { + display: inline-block; + content: ""; + min-height: ${`${c}px`}; + } + } + `}const h=t.UpsellButtonBase=p((0,a.default)(i.YoastButtonBase)` + color: ${e=>e.textColor}; + background: ${e=>e.backgroundColor}; + overflow: visible; + cursor: pointer; + + &::-moz-focus-inner { + border-width: 0; + } + + // Only needed for Safari 10 and only for buttons. + span { + display: inherit; + align-items: inherit; + justify-content: inherit; + width: 100%; + } + `);h.propTypes={backgroundColor:n.default.string,hoverColor:n.default.string,textColor:n.default.string},h.defaultProps={backgroundColor:l.colors.$color_button_upsell,hoverColor:l.colors.$color_button_hover_upsell,textColor:l.colors.$color_black};const b=e=>{const{children:t}=e;return o.default.createElement(h,e,t,o.default.createElement(f,{icon:"caret-right",color:l.colors.$color_black,size:"16px"}))};t.UpsellButton=b,b.propTypes={backgroundColor:n.default.string,hoverColor:n.default.string,textColor:n.default.string,children:n.default.oneOfType([n.default.arrayOf(n.default.node),n.default.node])}},71732:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UpsellLinkButton=void 0;var o,n=(o=r(98487))&&o.__esModule?o:{default:o},a=r(37188);t.UpsellLinkButton=n.default.a` + align-items: center; + justify-content: center; + vertical-align: middle; + color: ${a.colors.$color_black}; + white-space: nowrap; + display: inline-flex; + border-radius: 4px; + background-color: ${a.colors.$color_button_upsell}; + padding: 4px 8px 8px; + box-shadow: inset 0 -4px 0 rgba(0, 0, 0, 0.2); + border: none; + text-decoration: none; + font-size: inherit; + + &:hover, + &:focus, + &:active { + color: ${a.colors.$color_black}; + background: ${a.colors.$color_button_upsell_hover}; + } + + &:active { + background-color: ${a.colors.$color_button_hover_upsell}; + transform: translateY( 1px ); + box-shadow: none; + filter: none; + } +`},83908:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.YoastButtonBase=t.YoastButton=void 0,t.addButtonStyles=d;var o=s(r(99196)),n=s(r(85890)),a=s(r(98487)),l=r(37188);function s(e){return e&&e.__esModule?e:{default:e}}const i={minHeight:48,verticalPadding:0,borderWidth:0},u=i.minHeight-2*i.verticalPadding-2*i.borderWidth;function d(e){return(0,a.default)(e)` + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; + min-height: ${`${i.minHeight}px`}; + margin: 0; + padding: 0 16px; + padding: ${`${i.verticalPadding}px`} 16px; + border: 0; + border-radius: 4px; + box-sizing: border-box; + font: 400 14px/24px "Open Sans", sans-serif; + text-transform: uppercase; + box-shadow: 0 2px 8px 0 ${(0,l.rgba)(l.colors.$color_black,.3)}; + transition: box-shadow 150ms ease-out; + + &:hover, + &:focus, + &:active { + box-shadow: + 0 4px 10px 0 ${(0,l.rgba)(l.colors.$color_black,.2)}, + inset 0 0 0 100px ${(0,l.rgba)(l.colors.$color_black,.1)}; + color: ${e=>e.textColor}; + } + + &:active { + transform: translateY( 1px ); + box-shadow: none; + } + + // Only needed for IE 10+. Don't add spaces within brackets for this to work. + @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + ::after { + display: inline-block; + content: ""; + min-height: ${`${u}px`}; + } + } + `}const c=({className:e,onClick:t,type:r,children:n,isExpanded:a})=>o.default.createElement("button",{className:e,onClick:t,type:r,"aria-expanded":a},o.default.createElement("span",null,n));t.YoastButtonBase=c,c.propTypes={className:n.default.string,onClick:n.default.func,type:n.default.string,isExpanded:n.default.bool,children:n.default.oneOfType([n.default.arrayOf(n.default.node),n.default.node,n.default.string])},c.defaultProps={type:"button"};const f=t.YoastButton=d((0,a.default)(c)` + color: ${e=>e.textColor}; + background: ${e=>e.backgroundColor}; + min-width: 152px; + ${e=>e.withTextShadow?`text-shadow: 0 0 2px ${l.colors.$color_black}`:""}; + overflow: visible; + cursor: pointer; + + &::-moz-focus-inner { + border-width: 0; + } + + // Only needed for Safari 10 and only for buttons. + span { + display: inherit; + align-items: inherit; + justify-content: inherit; + width: 100%; + } + `);f.propTypes={backgroundColor:n.default.string,textColor:n.default.string,withTextShadow:n.default.bool},f.defaultProps={backgroundColor:l.colors.$color_green_medium_light,textColor:l.colors.$color_white,withTextShadow:!0}},78892:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.YoastLinkButton=void 0;var o=s(r(85890)),n=s(r(98487)),a=r(37188),l=r(83908);function s(e){return e&&e.__esModule?e:{default:e}}const i=t.YoastLinkButton=(0,l.addButtonStyles)(n.default.a` + text-decoration: none; + color: ${e=>e.textColor}; + background: ${e=>e.backgroundColor}; + min-width: 152px; + ${e=>e.withTextShadow?`text-shadow: 0 0 2px ${a.colors.$color_black}`:""}; + `);i.propTypes={backgroundColor:o.default.string,textColor:o.default.string,withTextShadow:o.default.bool},i.defaultProps={backgroundColor:a.colors.$color_green_medium_light,textColor:a.colors.$color_white,withTextShadow:!0}},24764:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o,n=(o=r(85890))&&o.__esModule?o:{default:o},a=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(99196)),l=r(36925);function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}function i(e){const t=(0,a.useCallback)((t=>{e.onChange(t.target.value)}),[e.onChange]);return a.default.createElement(l.FieldGroup,{wrapperClassName:"yoast-field-group yoast-field-group__checkbox"},a.default.createElement("input",{type:"checkbox",id:e.id,checked:e.checked,onChange:t}),a.default.createElement("label",{htmlFor:e.id},e.label))}r(79520),i.propTypes={id:n.default.string.isRequired,label:n.default.oneOfType([n.default.string,n.default.arrayOf(n.default.node),n.default.node]).isRequired,checked:n.default.bool,onChange:n.default.func.isRequired},i.defaultProps={checked:!1}},16236:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return n.default}}),r(79520);var o,n=(o=r(24764))&&o.__esModule?o:{default:o}},74643:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=r(65736);function l(e){return e&&e.__esModule?e:{default:e}}r(8436);const s={width:n.default.number.isRequired,name:n.default.string.isRequired,number:n.default.number.isRequired},i=e=>{ +/* translators: Hidden accessibility text; %d expands to number of occurrences. */ +const t=(0,a.sprintf)((0,a.__)("%d occurrences","wordpress-seo"),e.number);return o.default.createElement("li",{key:e.name+"_dataItem",style:{"--yoast-width":`${e.width}%`}},e.name,o.default.createElement("span",null,e.number),o.default.createElement("span",{className:"screen-reader-text"},t))};i.propTypes=s;const u=e=>o.default.createElement("ul",{className:"yoast-data-model","aria-label":(0,a.__)("Prominent words","wordpress-seo")},e.items.map(i));u.propTypes={items:n.default.arrayOf(n.default.shape(s))},u.defaultProps={items:[]},t.default=u},35957:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"DataModel",{enumerable:!0,get:function(){return n.default}}),r(8436);var o,n=(o=r(74643))&&o.__esModule?o:{default:o}},84084:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.FieldGroupProps=t.FieldGroupDefaultProps=void 0;var o=u(r(99196)),n=u(r(85890));r(86264);var a=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(14764)),l=u(r(70610)),s=u(r(46708));function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}function u(e){return e&&e.__esModule?e:{default:e}}const d=({htmlFor:e,label:t,linkTo:r,linkText:n,description:i,children:u,wrapperClassName:d,titleClassName:c,hasNewBadge:f,hasPremiumBadge:p})=>{const h=e?o.default.createElement("label",{htmlFor:e},t):o.default.createElement("b",null,t);return o.default.createElement("div",{className:d},""!==t&&o.default.createElement("div",{className:c},h,p&&o.default.createElement(s.default,{inLabel:!0}),f&&o.default.createElement(l.default,{inLabel:!0}),""!==r&&o.default.createElement(a.default,{linkTo:r,linkText:n})),""!==i&&o.default.createElement("p",{className:"field-group-description"},i),u)},c=t.FieldGroupProps={label:n.default.string,description:n.default.string,children:n.default.oneOfType([n.default.node,n.default.arrayOf(n.default.node)]),wrapperClassName:n.default.string,titleClassName:n.default.string,htmlFor:n.default.string,...a.helpIconProps},f=t.FieldGroupDefaultProps={label:"",description:"",children:[],wrapperClassName:"yoast-field-group",titleClassName:"yoast-field-group__title",htmlFor:"",...a.helpIconDefaultProps};d.propTypes=c,d.defaultProps=f,t.default=d},36925:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"FieldGroup",{enumerable:!0,get:function(){return n.default}}),r(86264);var o,n=(o=r(84084))&&o.__esModule?o:{default:o}},14764:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.helpIconProps=t.helpIconDefaultProps=t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=r(65736);function l(e){return e&&e.__esModule?e:{default:e}}r(14640);const s=t.helpIconProps={linkTo:n.default.string,linkText:n.default.string},i=t.helpIconDefaultProps={linkTo:"",linkText:""},u=({linkTo:e,linkText:t})=>o.default.createElement("a",{className:"yoast-help",target:"_blank",href:e,rel:"noopener noreferrer"},o.default.createElement("span",{className:"yoast-help__icon"},o.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",role:"img","aria-hidden":"true",focusable:"false"},o.default.createElement("path",{d:"M12 6A6 6 0 110 6a6 6 0 0112 0zM6.2 2C4.8 2 4 2.5 3.3 3.5l.1.4.8.7.4-.1c.5-.5.8-.9 1.4-.9.5 0 1.1.4 1.1.8s-.3.6-.7.9C5.8 5.6 5 6 5 7c0 .2.2.4.3.4h1.4L7 7c0-.8 2-.8 2-2.6C9 3 7.5 2 6.2 2zM6 8a1.1 1.1 0 100 2.2A1.1 1.1 0 006 8z"}))),o.default.createElement("span",{className:"screen-reader-text"},t),o.default.createElement("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,a.__)("(Opens in a new browser tab)","wordpress-seo")));u.propTypes=s,u.defaultProps=i,t.default=u},86631:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HelpIcon",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"helpIconDefaultProps",{enumerable:!0,get:function(){return o.helpIconDefaultProps}}),Object.defineProperty(t,"helpIconProps",{enumerable:!0,get:function(){return o.helpIconProps}}),r(14640);var o=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var s=a?Object.getOwnPropertyDescriptor(e,l):null;s&&(s.get||s.set)?Object.defineProperty(o,l,s):o[l]=e[l]}return o.default=e,r&&r.set(e,o),o}(r(14764));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}},42345:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=u(r(99196)),n=r(65736),a=u(r(67967)),l=u(r(85890)),s=u(r(84084)),i=u(r(57990));function u(e){return e&&e.__esModule?e:{default:e}}function d(e){const t=!1===e.usingFallback&&""!==e.imageUrl,r=e.imageUrl||e.defaultImageUrl||"",l=e.warnings.length>0&&t;let u=l?"yoast-image-select__preview yoast-image-select__preview-has-warnings":"yoast-image-select__preview";""===r&&(u="yoast-image-select__preview yoast-image-select__preview--no-preview");const d={imageSelected:t,onClick:e.onClick,onRemoveImageClick:e.onRemoveImageClick,selectImageButtonId:e.selectImageButtonId,replaceImageButtonId:e.replaceImageButtonId,removeImageButtonId:e.removeImageButtonId,isDisabled:e.isDisabled},c=()=>o.default.createElement("span",{className:"screen-reader-text"},t?(0,n.__)("Replace image","wordpress-seo"):(0,n.__)("Select image","wordpress-seo"));return o.default.createElement("div",{className:"yoast-image-select",onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave},o.default.createElement(s.default,{label:e.label,hasNewBadge:e.hasNewBadge,hasPremiumBadge:e.hasPremiumBadge},e.hasPreview&&o.default.createElement("button",{className:u,onClick:e.onClick,type:"button",disabled:e.isDisabled},""!==r&&o.default.createElement("img",{src:r,alt:e.imageAltText,className:"yoast-image-select__preview--image"}),o.default.createElement(c,null)),l&&o.default.createElement("div",{role:"alert"},e.warnings.map(((e,t)=>o.default.createElement(i.default,{key:`warning${t}`,type:"warning"},e)))),o.default.createElement(a.default,d)))}t.default=d,d.propTypes={defaultImageUrl:l.default.string,imageUrl:l.default.string,imageAltText:l.default.string,hasPreview:l.default.bool.isRequired,label:l.default.string.isRequired,onClick:l.default.func,onMouseEnter:l.default.func,onMouseLeave:l.default.func,onRemoveImageClick:l.default.func,selectImageButtonId:l.default.string,replaceImageButtonId:l.default.string,removeImageButtonId:l.default.string,warnings:l.default.arrayOf(l.default.string),hasNewBadge:l.default.bool,isDisabled:l.default.bool,usingFallback:l.default.bool,hasPremiumBadge:l.default.bool},d.defaultProps={defaultImageUrl:"",imageUrl:"",imageAltText:"",onClick:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},onRemoveImageClick:()=>{},selectImageButtonId:"",replaceImageButtonId:"",removeImageButtonId:"",warnings:[],hasNewBadge:!1,isDisabled:!1,usingFallback:!1,hasPremiumBadge:!1}},67967:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o,n=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(99196)),a=r(76149),l=r(65736),s=(o=r(85890))&&o.__esModule?o:{default:o};function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}const u=e=>{const{imageSelected:t,onClick:r,onRemoveImageClick:o,selectImageButtonId:s,replaceImageButtonId:i,removeImageButtonId:u,isDisabled:d}=e,c=(0,n.useCallback)((e=>{e.target.previousElementSibling.focus(),o()}),[o]);return n.default.createElement("div",{className:"yoast-image-select-buttons"},n.default.createElement(a.NewButton,{variant:"secondary",id:t?i:s,onClick:r,disabled:d},t?(0,l.__)("Replace image","wordpress-seo"):(0,l.__)("Select image","wordpress-seo")),t&&n.default.createElement(a.NewButton,{variant:"remove",id:u,onClick:c,disabled:d},(0,l.__)("Remove image","wordpress-seo")))};t.default=u,u.propTypes={imageSelected:s.default.bool,onClick:s.default.func,onRemoveImageClick:s.default.func,selectImageButtonId:s.default.string,replaceImageButtonId:s.default.string,removeImageButtonId:s.default.string,isDisabled:s.default.bool},u.defaultProps={imageSelected:!1,onClick:()=>{},onRemoveImageClick:()=>{},selectImageButtonId:"",replaceImageButtonId:"",removeImageButtonId:"",isDisabled:!1}},38951:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ImageSelect",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"ImageSelectButtons",{enumerable:!0,get:function(){return n.default}}),r(55022);var o=a(r(42345)),n=a(r(67967));function a(e){return e&&e.__esModule?e:{default:e}}},95235:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o={StyledSection:!0,StyledHeading:!0,StyledSectionBase:!0,LinkButton:!0,Button:!0,BaseButton:!0,addHoverStyle:!0,addActiveStyle:!0,addFocusStyle:!0,addBaseStyle:!0,addButtonStyles:!0,Collapsible:!0,CollapsibleStateless:!0,StyledIconsButton:!0,StyledContainer:!0,StyledContainerTopLevel:!0,wrapInHeading:!0,SparklesIcon:!0,IconAIFixesButton:!0,Alert:!0,ArticleList:!0,Card:!0,FullHeightCard:!0,CardBanner:!0,CourseDetails:!0,IconLabeledButton:!0,IconButton:!0,IconsButton:!0,ErrorBoundary:!0,Heading:!0,HelpText:!0,Icon:!0,AIFixesButton:!0,IconButtonBase:!0,IconButtonToggle:!0,IconCTAEditButton:!0,IFrame:!0,Input:!0,WordOccurrenceInsights:!0,KeywordSuggestions:!0,Label:!0,SimulatedLabel:!0,LanguageNotice:!0,languageNoticePropType:!0,Loader:!0,MultiStepProgress:!0,Notification:!0,Paper:!0,ProgressBar:!0,Section:!0,SectionTitle:!0,ScoreAssessments:!0,StackedProgressBar:!0,SvgIcon:!0,icons:!0,SynonymsInput:!0,Textarea:!0,Textfield:!0,Toggle:!0,UpsellButton:!0,UpsellLinkButton:!0,YoastButton:!0,InputField:!0,YoastLinkButton:!0,Logo:!0,Modal:!0,YoastSeoIcon:!0,Tabs:!0,Warning:!0,YouTubeVideo:!0,WordList:!0,WordOccurrences:!0,VariableEditorInputContainer:!0,ListTable:!0,ZebrafiedListTable:!0,Row:!0,ScreenReaderText:!0,ScreenReaderShortcut:!0};Object.defineProperty(t,"AIFixesButton",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(t,"Alert",{enumerable:!0,get:function(){return k.default}}),Object.defineProperty(t,"ArticleList",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(t,"BaseButton",{enumerable:!0,get:function(){return C.BaseButton}}),Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(t,"Card",{enumerable:!0,get:function(){return j.default}}),Object.defineProperty(t,"CardBanner",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(t,"Collapsible",{enumerable:!0,get:function(){return O.default}}),Object.defineProperty(t,"CollapsibleStateless",{enumerable:!0,get:function(){return O.CollapsibleStateless}}),Object.defineProperty(t,"CourseDetails",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(t,"ErrorBoundary",{enumerable:!0,get:function(){return q.default}}),Object.defineProperty(t,"FullHeightCard",{enumerable:!0,get:function(){return j.FullHeightCard}}),Object.defineProperty(t,"Heading",{enumerable:!0,get:function(){return N.default}}),Object.defineProperty(t,"HelpText",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(t,"IFrame",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(t,"IconAIFixesButton",{enumerable:!0,get:function(){return P.default}}),Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return $.default}}),Object.defineProperty(t,"IconButtonBase",{enumerable:!0,get:function(){return z.default}}),Object.defineProperty(t,"IconButtonToggle",{enumerable:!0,get:function(){return F.default}}),Object.defineProperty(t,"IconCTAEditButton",{enumerable:!0,get:function(){return D.default}}),Object.defineProperty(t,"IconLabeledButton",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(t,"IconsButton",{enumerable:!0,get:function(){return B.default}}),Object.defineProperty(t,"Input",{enumerable:!0,get:function(){return W.default}}),Object.defineProperty(t,"InputField",{enumerable:!0,get:function(){return de.InputField}}),Object.defineProperty(t,"KeywordSuggestions",{enumerable:!0,get:function(){return H.default}}),Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return U.default}}),Object.defineProperty(t,"LanguageNotice",{enumerable:!0,get:function(){return V.default}}),Object.defineProperty(t,"LinkButton",{enumerable:!0,get:function(){return a.LinkButton}}),Object.defineProperty(t,"ListTable",{enumerable:!0,get:function(){return xe.ListTable}}),Object.defineProperty(t,"Loader",{enumerable:!0,get:function(){return G.default}}),Object.defineProperty(t,"Logo",{enumerable:!0,get:function(){return fe.default}}),Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return pe.default}}),Object.defineProperty(t,"MultiStepProgress",{enumerable:!0,get:function(){return Y.default}}),Object.defineProperty(t,"Notification",{enumerable:!0,get:function(){return K.default}}),Object.defineProperty(t,"Paper",{enumerable:!0,get:function(){return Z.default}}),Object.defineProperty(t,"ProgressBar",{enumerable:!0,get:function(){return X.default}}),Object.defineProperty(t,"Row",{enumerable:!0,get:function(){return Ce.Row}}),Object.defineProperty(t,"ScoreAssessments",{enumerable:!0,get:function(){return ee.default}}),Object.defineProperty(t,"ScreenReaderShortcut",{enumerable:!0,get:function(){return we.default}}),Object.defineProperty(t,"ScreenReaderText",{enumerable:!0,get:function(){return Oe.default}}),Object.defineProperty(t,"Section",{enumerable:!0,get:function(){return J.default}}),Object.defineProperty(t,"SectionTitle",{enumerable:!0,get:function(){return Q.SectionTitle}}),Object.defineProperty(t,"SimulatedLabel",{enumerable:!0,get:function(){return U.SimulatedLabel}}),Object.defineProperty(t,"SparklesIcon",{enumerable:!0,get:function(){return w.SparklesIcon}}),Object.defineProperty(t,"StackedProgressBar",{enumerable:!0,get:function(){return te.default}}),Object.defineProperty(t,"StyledContainer",{enumerable:!0,get:function(){return O.StyledContainer}}),Object.defineProperty(t,"StyledContainerTopLevel",{enumerable:!0,get:function(){return O.StyledContainerTopLevel}}),Object.defineProperty(t,"StyledHeading",{enumerable:!0,get:function(){return n.StyledHeading}}),Object.defineProperty(t,"StyledIconsButton",{enumerable:!0,get:function(){return O.StyledIconsButton}}),Object.defineProperty(t,"StyledSection",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"StyledSectionBase",{enumerable:!0,get:function(){return n.StyledSectionBase}}),Object.defineProperty(t,"SvgIcon",{enumerable:!0,get:function(){return re.default}}),Object.defineProperty(t,"SynonymsInput",{enumerable:!0,get:function(){return oe.default}}),Object.defineProperty(t,"Tabs",{enumerable:!0,get:function(){return be.default}}),Object.defineProperty(t,"Textarea",{enumerable:!0,get:function(){return ne.default}}),Object.defineProperty(t,"Textfield",{enumerable:!0,get:function(){return ae.default}}),Object.defineProperty(t,"Toggle",{enumerable:!0,get:function(){return le.default}}),Object.defineProperty(t,"UpsellButton",{enumerable:!0,get:function(){return se.UpsellButton}}),Object.defineProperty(t,"UpsellLinkButton",{enumerable:!0,get:function(){return ie.UpsellLinkButton}}),Object.defineProperty(t,"VariableEditorInputContainer",{enumerable:!0,get:function(){return _e.VariableEditorInputContainer}}),Object.defineProperty(t,"Warning",{enumerable:!0,get:function(){return ge.default}}),Object.defineProperty(t,"WordList",{enumerable:!0,get:function(){return ye.default}}),Object.defineProperty(t,"WordOccurrenceInsights",{enumerable:!0,get:function(){return H.default}}),Object.defineProperty(t,"WordOccurrences",{enumerable:!0,get:function(){return ve.default}}),Object.defineProperty(t,"YoastButton",{enumerable:!0,get:function(){return ue.YoastButton}}),Object.defineProperty(t,"YoastLinkButton",{enumerable:!0,get:function(){return ce.YoastLinkButton}}),Object.defineProperty(t,"YoastSeoIcon",{enumerable:!0,get:function(){return he.default}}),Object.defineProperty(t,"YouTubeVideo",{enumerable:!0,get:function(){return me.default}}),Object.defineProperty(t,"ZebrafiedListTable",{enumerable:!0,get:function(){return xe.ZebrafiedListTable}}),Object.defineProperty(t,"addActiveStyle",{enumerable:!0,get:function(){return C.addActiveStyle}}),Object.defineProperty(t,"addBaseStyle",{enumerable:!0,get:function(){return C.addBaseStyle}}),Object.defineProperty(t,"addButtonStyles",{enumerable:!0,get:function(){return C.addButtonStyles}}),Object.defineProperty(t,"addFocusStyle",{enumerable:!0,get:function(){return C.addFocusStyle}}),Object.defineProperty(t,"addHoverStyle",{enumerable:!0,get:function(){return C.addHoverStyle}}),Object.defineProperty(t,"icons",{enumerable:!0,get:function(){return re.icons}}),Object.defineProperty(t,"languageNoticePropType",{enumerable:!0,get:function(){return V.languageNoticePropType}}),Object.defineProperty(t,"wrapInHeading",{enumerable:!0,get:function(){return O.wrapInHeading}}),r(75377),r(37704);var n=Ee(r(78538)),a=r(16785),l=r(76149);Object.keys(l).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===l[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return l[e]}}))}));var s=r(16236);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===s[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return s[e]}}))}));var i=r(35957);Object.keys(i).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===i[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}}))}));var u=r(36925);Object.keys(u).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===u[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return u[e]}}))}));var d=r(38951);Object.keys(d).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===d[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return d[e]}}))}));var c=r(24420);Object.keys(c).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===c[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return c[e]}}))}));var f=r(54297);Object.keys(f).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===f[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return f[e]}}))}));var p=r(46465);Object.keys(p).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===p[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return p[e]}}))}));var h=r(55138);Object.keys(h).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===h[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return h[e]}}))}));var b=r(5185);Object.keys(b).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===b[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return b[e]}}))}));var g=r(86631);Object.keys(g).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===g[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return g[e]}}))}));var m=r(43781);Object.keys(m).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===m[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return m[e]}}))}));var y=r(8850);Object.keys(y).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===y[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return y[e]}}))}));var v=r(51495);Object.keys(v).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===v[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return v[e]}}))}));var _=r(40815);Object.keys(_).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===_[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return _[e]}}))}));var x=r(31233);Object.keys(x).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===x[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return x[e]}}))}));var C=Ee(r(46362)),O=Ee(r(57272)),w=r(27177),P=Pe(r(30856)),k=Pe(r(57990)),E=Pe(r(47529)),j=Ee(r(79743)),S=Pe(r(97230)),M=Pe(r(69424)),T=Pe(r(3234)),$=Pe(r(4532)),B=Pe(r(71875)),q=Pe(r(27938)),N=Pe(r(33014)),I=Pe(r(30812)),R=Pe(r(7992)),L=Pe(r(74102)),z=Pe(r(64213)),F=Pe(r(21529)),D=Pe(r(22027)),A=Pe(r(77844)),W=Pe(r(66763)),H=Pe(r(1993)),U=Ee(r(1453)),V=Ee(r(44722)),G=Pe(r(50933)),Y=Pe(r(64737)),K=Pe(r(18506)),Z=Pe(r(8272)),X=Pe(r(57186)),J=Pe(r(37553)),Q=r(91752),ee=Pe(r(5180)),te=Pe(r(49526)),re=Ee(r(78386)),oe=Pe(r(97485)),ne=Pe(r(22386)),ae=Pe(r(18547)),le=Pe(r(47816)),se=r(60813),ie=r(71732),ue=r(83908),de=r(23613),ce=r(78892),fe=Pe(r(73028)),pe=Pe(r(79610)),he=Pe(r(14085)),be=Pe(r(51316)),ge=Pe(r(1382)),me=Pe(r(72768)),ye=Pe(r(64385)),ve=Pe(r(31367)),_e=r(3199),xe=r(98872),Ce=r(87923),Oe=Pe(r(42479)),we=Pe(r(76916));function Pe(e){return e&&e.__esModule?e:{default:e}}function ke(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(ke=function(e){return e?r:t})(e)}function Ee(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=ke(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}},66763:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.VariableEditorInputContainer=t.InputContainer=void 0;var o,n=(o=r(98487))&&o.__esModule?o:{default:o};t.VariableEditorInputContainer=n.default.div.attrs({})` + flex: 0 1 100%; + border: 1px solid ${e=>e.isActive?"#5b9dd9":"#ddd"}; + padding: 4px 5px; + box-sizing: border-box; + box-shadow: ${e=>e.isActive?"0 0 2px rgba(30,140,190,.8);":"inset 0 1px 2px rgba(0,0,0,.07)"}; + background-color: #fff; + color: #32373c; + outline: 0; + transition: 50ms border-color ease-in-out; + position: relative; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 14px; + cursor: text; +`,t.InputContainer=n.default.div` + display: flex; + flex-direction: column; + margin: 1em 0; +`},23613:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InputField=void 0;var o,n=(o=r(98487))&&o.__esModule?o:{default:o},a=r(37188);t.InputField=n.default.input` + &&& { + padding: 0 8px; + min-height: 34px; + font-size: 1em; + box-shadow: inset 0 1px 2px ${(0,a.rgba)(a.colors.$color_black,.07)}; + border: 1px solid ${a.colors.$color_input_border}; + border-radius: 0; + + &:focus { + border-color: #5b9dd9; + box-shadow: 0 0 2px ${(0,a.rgba)(a.colors.$color_snippet_focus,.8)}; + } + } +`},82572:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InputLabel=void 0;var o,n=(o=r(98487))&&o.__esModule?o:{default:o};t.InputLabel=n.default.label` + font-size: 1em; + font-weight: bold; + margin-bottom: 0.5em; + display: block; +`},91315:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=u(r(99196)),n=u(r(85890)),a=r(92819),l=r(65736);r(60526);var s=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(84084));function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}function u(e){return e&&e.__esModule?e:{default:e}}function d(e){return{hours:Math.floor(e/3600),minutes:Math.floor(e%3600/60),seconds:e%3600%60}}class c extends o.default.Component{constructor(e){super(e),this.state={...d(e.duration)},this.onHoursChange=this.onHoursChange.bind(this),this.onMinutesChange=this.onMinutesChange.bind(this),this.onSecondsChange=this.onSecondsChange.bind(this)}formatValue(e,t=Number.MIN_VALUE,r=Number.MAX_VALUE){const o=parseInt(e.target.value,10)||0;return(0,a.clamp)(o,t,r)}onHoursChange(e){this.props.onChange(3600*this.formatValue(e,0)+60*this.state.minutes+this.state.seconds)}onMinutesChange(e){this.props.onChange(3600*this.state.hours+60*this.formatValue(e,0,59)+this.state.seconds)}onSecondsChange(e){this.props.onChange(3600*this.state.hours+60*this.state.minutes+this.formatValue(e,0,59))}static getDerivedStateFromProps(e,t){const r=d(e.duration);return(0,a.isEqual)(r,t)?null:{...r}}render(){const e=this.props,t=e.id;return o.default.createElement(s.default,e,o.default.createElement("div",{className:"duration-inputs__wrapper"},o.default.createElement("div",{className:"duration-inputs__input-wrapper"},o.default.createElement("label",{htmlFor:t+"-hours"},(0,l.__)("hours","wordpress-seo")),o.default.createElement("input",{id:t+"-hours",name:"hours",value:this.state.hours,type:"number",className:"yoast-field-group__inputfield duration-inputs__input","aria-describedby":e.hoursAriaDescribedBy,readOnly:e.readOnly,min:0,onChange:this.onHoursChange})),o.default.createElement("div",{className:"duration-inputs__input-wrapper"},o.default.createElement("label",{htmlFor:t+"-minutes"},(0,l.__)("minutes","wordpress-seo")),o.default.createElement("input",{id:t+"-minutes",name:"minutes",value:this.state.minutes,type:"number",className:"yoast-field-group__inputfield duration-inputs__input","aria-describedby":e.minutesAriaDescribedBy,readOnly:e.readOnly,min:0,max:59,onChange:this.onMinutesChange})),o.default.createElement("div",{className:"duration-inputs__input-wrapper"},o.default.createElement("label",{htmlFor:t+"-seconds"},(0,l.__)("seconds","wordpress-seo")),o.default.createElement("input",{id:t+"-seconds",name:"seconds",value:this.state.seconds,type:"number",className:"yoast-field-group__inputfield duration-inputs__input","aria-describedby":e.secondsAriaDescribedBy,readOnly:e.readOnly,min:0,max:59,onChange:this.onSecondsChange}))))}}c.propTypes={duration:n.default.number.isRequired,hoursAriaDescribedBy:n.default.string,minutesAriaDescribedBy:n.default.string,secondsAriaDescribedBy:n.default.string,id:n.default.string.isRequired,...s.FieldGroupProps},c.defaultProps={hoursAriaDescribedBy:"",minutesAriaDescribedBy:"",secondsAriaDescribedBy:"",...s.FieldGroupDefaultProps},t.default=c},70399:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.inputTypes=t.default=void 0;var o=s(r(99196)),n=s(r(85890)),a=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=n?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(o,a,s):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}(r(84084));function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function s(e){return e&&e.__esModule?e:{default:e}}r(60526);const i=t.inputTypes=["text","color","date","datetime-local","email","hidden","month","number","password","search","tel","time","url","week","range"],u=e=>{const t={...e};return e.id&&(t.htmlFor=e.id),o.default.createElement(a.default,t,o.default.createElement("input",{id:e.id,name:e.name,value:e.value,type:e.type,className:"yoast-field-group__inputfield","aria-describedby":e.ariaDescribedBy,placeholder:e.placeholder,readOnly:e.readOnly,min:e.min,max:e.max,step:e.step,onChange:(r=e.onChange,e=>{r(e.target.value)})}));var r};u.propTypes={id:n.default.string,name:n.default.string,value:n.default.string,type:n.default.oneOf(i),ariaDescribedBy:n.default.string,placeholder:n.default.string,readOnly:n.default.bool,min:n.default.number,max:n.default.number,step:n.default.number,onChange:n.default.func,...a.FieldGroupProps},u.defaultProps={id:"",name:"",value:"",ariaDescribedBy:"",readOnly:!1,type:"text",placeholder:void 0,min:void 0,max:void 0,step:void 0,onChange:void 0,...a.FieldGroupDefaultProps},t.default=u},24420:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"DurationInput",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return o.default}}),r(60526);var o=a(r(70399)),n=a(r(91315));function a(e){return e&&e.__esModule?e:{default:e}}},77509:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=r(36925);function l(e){return e&&e.__esModule?e:{default:e}}class s extends o.default.Component{getInsightsCardContent(){return o.default.createElement("div",{className:"yoast-insights-card__content"},o.default.createElement("p",{className:"yoast-insights-card__score"},o.default.createElement("span",{className:"yoast-insights-card__amount"},this.props.amount),this.props.unit),this.props.description&&o.default.createElement("div",{className:"yoast-insights-card__description"},this.props.description))}render(){return o.default.createElement(a.FieldGroup,{label:this.props.title,linkTo:this.props.linkTo,linkText:this.props.linkText,wrapperClassName:"yoast-insights-card"},this.getInsightsCardContent())}}t.default=s,s.propTypes={title:n.default.string,amount:n.default.oneOfType([n.default.number,n.default.oneOf(["?"])]).isRequired,description:n.default.element,unit:n.default.string,linkTo:n.default.string,linkText:n.default.string},s.defaultProps={title:"",description:null,unit:"",linkTo:"",linkText:""}},54297:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"InsightsCard",{enumerable:!0,get:function(){return n.default}}),r(70418);var o,n=(o=r(77509))&&o.__esModule?o:{default:o}},70610:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=l(r(99196)),n=l(r(85890)),a=r(65736);function l(e){return e&&e.__esModule?e:{default:e}}const s=({inLabel:e})=>o.default.createElement("span",{className:e?"yoast-badge yoast-badge__in-label yoast-new-badge":"yoast-badge yoast-new-badge"},(0,a.__)("New","wordpress-seo"));s.propTypes={inLabel:n.default.bool},s.defaultProps={inLabel:!1},t.default=s},8850:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NewBadge",{enumerable:!0,get:function(){return n.default}}),r(15446),r(15210);var o,n=(o=r(70610))&&o.__esModule?o:{default:o}},46708:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}const l=({inLabel:e})=>o.default.createElement("span",{className:e?"yoast-badge yoast-badge__in-label yoast-premium-badge":"yoast-badge yoast-premium-badge"},"Premium");l.propTypes={inLabel:n.default.bool},l.defaultProps={inLabel:!1},t.default=l},51495:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PremiumBadge",{enumerable:!0,get:function(){return n.default}}),r(15446),r(29001);var o,n=(o=r(46708))&&o.__esModule?o:{default:o}},17230:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o,n=d(r(99196)),a=(o=r(85890))&&o.__esModule?o:{default:o},l=r(92819),s=d(r(84084)),i=r(9802);function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}function d(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.default.createElement(n.Fragment,null,n.default.createElement("input",{type:"radio",name:a,id:l,value:e,onChange:o,checked:r}),n.default.createElement("label",{htmlFor:l},t));h.propTypes={value:a.default.oneOfType([a.default.string,a.default.number]).isRequired,label:a.default.string.isRequired,checked:a.default.bool,groupName:a.default.string.isRequired,onChange:a.default.func,id:a.default.string.isRequired},h.defaultProps={checked:!1,onChange:l.noop};const b=({options:e,onChange:t,groupName:r,id:o,selected:a})=>n.default.createElement("div",{className:"yoast-field-group__radiobutton"},e.map((e=>n.default.createElement(h,c({key:e.value,groupName:r,checked:a===e.value,onChange:t,id:`${o}_${e.value}`},e)))));b.propTypes=f,b.defaultProps=p;const g=({options:e,onChange:t,groupName:r,id:o,selected:a})=>n.default.createElement("div",{onChange:t},e.map((e=>n.default.createElement("div",{className:"yoast-field-group__radiobutton yoast-field-group__radiobutton--vertical",key:e.value},n.default.createElement(h,c({groupName:r,checked:a===e.value,id:`${o}_${e.value}`},e))))));g.propTypes=f,g.defaultProps=p;const m=e=>{const{id:t,options:r,groupName:o,onChange:a,vertical:l,selected:u,...d}=e,c={options:r,groupName:o,selected:u,onChange:e=>a(e.target.value),id:(0,i.getId)(t)};return n.default.createElement(s.default,d,l?n.default.createElement(g,c):n.default.createElement(b,c))};m.propTypes={id:a.default.string,groupName:a.default.string.isRequired,options:a.default.arrayOf(a.default.shape({value:a.default.oneOfType([a.default.string,a.default.number]).isRequired,label:a.default.string.isRequired})).isRequired,selected:a.default.oneOfType([a.default.string,a.default.number]),onChange:a.default.func,vertical:a.default.bool,...s.FieldGroupProps},m.defaultProps={id:"",vertical:!1,selected:null,onChange:()=>{},...s.FieldGroupDefaultProps},t.default=m},46465:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"RadioButtonGroup",{enumerable:!0,get:function(){return n.default}}),r(17672);var o,n=(o=r(17230))&&o.__esModule?o:{default:o}},69970:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.YoastReactSelect=t.SingleSelect=t.Select=t.MultiSelect=void 0;var o=r(92819),n=d(r(99196)),a=i(r(85890)),l=d(r(84084)),s=i(r(92651));function i(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}function d(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=n?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t{},disabled:!1,...l.FieldGroupDefaultProps},b=({name:e,value:t})=>n.default.createElement("option",{key:t,value:t},e);b.propTypes={name:a.default.string.isRequired,value:a.default.string.isRequired};const g=e=>{const{id:t,isMulti:r,isSearchable:o,inputId:a,selected:i,options:u,name:d,onChange:f,...p}=e,h=Array.isArray(i)?i:[i],b=(e=>e.map((e=>({value:e.value,label:e.name}))))(u),g=b.filter((e=>h.includes(e.value)));return n.default.createElement(l.default,c({},p,{htmlFor:a}),n.default.createElement(s.default,{isMulti:r,id:t,name:d,inputId:a,value:g,options:b,hideSelectedOptions:!1,onChange:f,className:"yoast-select-container",classNamePrefix:"yoast-select",isClearable:!1,isSearchable:o,placeholder:""}))};t.YoastReactSelect=g,g.propTypes=p,g.defaultProps=h;const m=e=>{const{onChange:t}=e,r=(0,n.useCallback)((e=>t(e.value)));return n.default.createElement(g,c({},e,{isMulti:!1,isSearchable:!0,onChange:r}))};t.SingleSelect=m,m.propTypes=p,m.defaultProps=h;const y=e=>{const{onChange:t}=e,r=(0,n.useCallback)((e=>{e||(e=[]),t(e.map((e=>e.value)))}));return n.default.createElement(g,c({},e,{isMulti:!0,isSearchable:!1,onChange:r}))};t.MultiSelect=y,y.propTypes=p,y.defaultProps=h;class v extends n.default.Component{constructor(e){super(e),this.onBlurHandler=this.onBlurHandler.bind(this),this.onInputHandler=this.onInputHandler.bind(this),this.state={selected:this.props.selected}}onBlurHandler(e){this.props.onChange(e.target.value)}onInputHandler(e){this.setState({selected:e.target.value}),this.props.onOptionFocus&&this.props.onOptionFocus(e.target.name,e.target.value)}componentDidUpdate(e){e.selected!==this.props.selected&&this.setState({selected:this.props.selected})}render(){const{id:e,options:t,name:r,disabled:a,...s}=this.props;return n.default.createElement(l.default,c({},s,{htmlFor:e}),n.default.createElement("select",{id:e,name:r,value:this.state.selected,onBlur:this.onBlurHandler,onInput:this.onInputHandler,onChange:o.noop,disabled:a},t.map(b)))}}t.Select=v,v.propTypes={...p,onOptionFocus:a.default.func},v.defaultProps={...h,onOptionFocus:null}},55138:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"MultiSelect",{enumerable:!0,get:function(){return o.MultiSelect}}),Object.defineProperty(t,"Select",{enumerable:!0,get:function(){return o.Select}}),Object.defineProperty(t,"SingleSelect",{enumerable:!0,get:function(){return o.SingleSelect}}),r(67496);var o=r(69970)},37677:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=a(r(99196)),n=a(r(85890));function a(e){return e&&e.__esModule?e:{default:e}}function l(e){let t=e.rating;t<0&&(t=0),t>5&&(t=5);const r=20*t;return o.default.createElement("div",{"aria-hidden":"true",className:"yoast-star-rating"},o.default.createElement("span",{className:"yoast-star-rating__placeholder",role:"img"},o.default.createElement("span",{className:"yoast-star-rating__fill",style:{width:r+"%"}})))}t.default=l,l.propTypes={rating:n.default.number.isRequired}},5185:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"StarRating",{enumerable:!0,get:function(){return n.default}}),r(10205);var o,n=(o=r(37677))&&o.__esModule?o:{default:o}},98872:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ZebrafiedListTable=t.ListTable=void 0,t.makeFullWidth=function(e){return(0,a.default)(e)` + @media screen and ( max-width: 800px ) { + min-width: 100%; + margin-top: 1em; + padding-right: 0; + padding-left: 0; + } + `};var o=s(r(85890)),n=s(r(99196)),a=s(r(98487)),l=r(37188);function s(e){return e&&e.__esModule?e:{default:e}}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t span::before { + left: auto; + } + } +`;u.propTypes={children:o.default.any};class d extends n.default.Component{constructor(e){super(e)}getChildren(){return 1===this.props.children?[this.props.children]:this.props.children}render(){const e=this.getChildren();return n.default.createElement(u,{role:"list"},e)}}t.ListTable=d,t.ZebrafiedListTable=class extends d{constructor(e){super(e),this.zebraProps=Object.assign({},e)}zebrafyChildren(){let e=this.props.children;this.props.children.map||(e=[e]),this.zebraProps.children=e.map(((e,t)=>n.default.cloneElement(e,{background:t%2==1?l.colors.$color_white:l.colors.$color_background_light,key:t})))}render(){return this.zebrafyChildren(),n.default.createElement(u,i({role:"list"},this.zebraProps))}},d.propTypes={children:o.default.oneOfType([o.default.arrayOf(o.default.node),o.default.node])},d.defaultProps={children:[]}},87923:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RowResponsiveWrap=t.Row=void 0;var o=l(r(85890)),n=l(r(98487)),a=r(37188);function l(e){return e&&e.__esModule?e:{default:e}}const s=t.Row=n.default.li` + background: ${e=>e.background}; + display: flex; + min-height: ${e=>e.rowHeight}; + align-items: center; + justify-content: space-between; +`;s.propTypes={background:o.default.string,hasHeaderLabels:o.default.bool,rowHeight:o.default.string},s.defaultProps={background:a.colors.$color_white,hasHeaderLabels:!0},t.RowResponsiveWrap=(0,n.default)(s)` + @media screen and ( max-width: 800px ) { + flex-wrap: wrap; + align-items: flex-start; + + &:first-child { + margin-top: ${e=>e.hasHeaderLabels?"24px":"0"}; + } + + // Use the column headers (if any) as labels. + & > span::before { + position: static; + display: inline-block; + padding-right: 0.5em; + font-size: inherit; + } + & > span { + padding-left: 0; + } + } +`},43781:(e,t,r)=>{"use strict";r(20784)},37704:(e,t,r)=>{"use strict";r(82221)},31233:(e,t,r)=>{"use strict";r(40265)},94184:(e,t)=>{var r;!function(){"use strict";var o={}.hasOwnProperty;function n(){for(var e=[],t=0;t{var o;!function(){"use strict";var n=!("undefined"==typeof window||!window.document||!window.document.createElement),a={canUseDOM:n,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:n&&!!window.screen};void 0===(o=function(){return a}.call(t,r,t,e))||(e.exports=o)}()},96746:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=s(r(99196)),a=s(r(49156)),l=s(r(76743));function s(e){return e&&e.__esModule?e:{default:e}}var i=void 0;function u(e,t){var r,l,s,d,c,f,p,h,b=[],g={};for(f=0;f "+i);if("componentClose"===c.type)throw new Error("Missing opening component token: `"+c.value+"`");if("componentOpen"===c.type){r=t[c.value],s=f;break}b.push(t[c.value])}else b.push(c.value);return r&&(d=function(e,t){var r,o,n=t[e],a=0;for(o=e+1;o{"use strict";function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},15446:(e,t,r)=>{"use strict";r.r(t)},89364:(e,t,r)=>{"use strict";r.r(t)},26242:(e,t,r)=>{"use strict";r.r(t)},91370:(e,t,r)=>{"use strict";r.r(t)},68798:(e,t,r)=>{"use strict";r.r(t)},16798:(e,t,r)=>{"use strict";r.r(t)},54760:(e,t,r)=>{"use strict";r.r(t)},40367:(e,t,r)=>{"use strict";r.r(t)},79520:(e,t,r)=>{"use strict";r.r(t)},8436:(e,t,r)=>{"use strict";r.r(t)},86264:(e,t,r)=>{"use strict";r.r(t)},14640:(e,t,r)=>{"use strict";r.r(t)},55022:(e,t,r)=>{"use strict";r.r(t)},60526:(e,t,r)=>{"use strict";r.r(t)},70418:(e,t,r)=>{"use strict";r.r(t)},15210:(e,t,r)=>{"use strict";r.r(t)},29001:(e,t,r)=>{"use strict";r.r(t)},17672:(e,t,r)=>{"use strict";r.r(t)},67496:(e,t,r)=>{"use strict";r.r(t)},10205:(e,t,r)=>{"use strict";r.r(t)},20784:(e,t,r)=>{"use strict";r.r(t)},82221:(e,t,r)=>{"use strict";r.r(t)},40265:(e,t,r)=>{"use strict";r.r(t)},49156:(e,t,r)=>{"use strict";var o=r(99196),n="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,a=r(47942),l=r(29179),s=r(70397),i=".",u=":",d="function"==typeof Symbol&&Symbol.iterator,c="@@iterator";function f(e,t){return e&&"object"==typeof e&&null!=e.key?(r=e.key,o={"=":"=0",":":"=2"},"$"+(""+r).replace(/[=:]/g,(function(e){return o[e]}))):t.toString(36);var r,o}function p(e,t,r,o){var a,s=typeof e;if("undefined"!==s&&"boolean"!==s||(e=null),null===e||"string"===s||"number"===s||"object"===s&&e.$$typeof===n)return r(o,e,""===t?i+f(e,0):t),1;var h=0,b=""===t?i:t+u;if(Array.isArray(e))for(var g=0;g{"use strict";function t(e){return function(){return e}}var r=function(){};r.thatReturns=t,r.thatReturnsFalse=t(!1),r.thatReturnsTrue=t(!0),r.thatReturnsNull=t(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(e){return e},e.exports=r},29179:e=>{"use strict";e.exports=function(e,t,r,o,n,a,l,s){if(!e){var i;if(void 0===t)i=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[r,o,n,a,l,s],d=0;(i=new Error(t.replace(/%s/g,(function(){return u[d++]})))).name="Invariant Violation"}throw i.framesToPop=1,i}}},70397:(e,t,r)=>{"use strict";var o=r(47942);e.exports=o},46871:(e,t,r)=>{"use strict";function o(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!=e&&this.setState(e)}function n(e){this.setState(function(t){var r=this.constructor.getDerivedStateFromProps(e,t);return null!=r?r:null}.bind(this))}function a(e,t){try{var r=this.props,o=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(r,o)}finally{this.props=r,this.state=o}}function l(e){var t=e.prototype;if(!t||!t.isReactComponent)throw new Error("Can only polyfill class components");if("function"!=typeof e.getDerivedStateFromProps&&"function"!=typeof t.getSnapshotBeforeUpdate)return e;var r=null,l=null,s=null;if("function"==typeof t.componentWillMount?r="componentWillMount":"function"==typeof t.UNSAFE_componentWillMount&&(r="UNSAFE_componentWillMount"),"function"==typeof t.componentWillReceiveProps?l="componentWillReceiveProps":"function"==typeof t.UNSAFE_componentWillReceiveProps&&(l="UNSAFE_componentWillReceiveProps"),"function"==typeof t.componentWillUpdate?s="componentWillUpdate":"function"==typeof t.UNSAFE_componentWillUpdate&&(s="UNSAFE_componentWillUpdate"),null!==r||null!==l||null!==s){var i=e.displayName||e.name,u="function"==typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+i+" uses "+u+" but also contains the following legacy lifecycles:"+(null!==r?"\n "+r:"")+(null!==l?"\n "+l:"")+(null!==s?"\n "+s:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"==typeof e.getDerivedStateFromProps&&(t.componentWillMount=o,t.componentWillReceiveProps=n),"function"==typeof t.getSnapshotBeforeUpdate){if("function"!=typeof t.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");t.componentWillUpdate=a;var d=t.componentDidUpdate;t.componentDidUpdate=function(e,t,r){var o=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:r;d.call(this,e,t,o)}}return e}r.r(t),r.d(t,{polyfill:()=>l}),o.__suppressDeprecationWarning=!0,n.__suppressDeprecationWarning=!0,a.__suppressDeprecationWarning=!0},29983:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.bodyOpenClassName=t.portalClassName=void 0;var o=Object.assign||function(e){for(var t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t0&&0==(m-=1)&&d.show(t),r.props.shouldFocusAfterRender&&(r.props.shouldReturnFocusAfterClose?(i.returnFocus(r.props.preventScroll),i.teardownScopedFocus()):i.popWithoutFocus()),r.props.onAfterClose&&r.props.onAfterClose(),p.default.deregister(r)},r.open=function(){r.beforeOpen(),r.state.afterOpen&&r.state.beforeClose?(clearTimeout(r.closeTimer),r.setState({beforeClose:!1})):(r.props.shouldFocusAfterRender&&(i.setupScopedFocus(r.node),i.markForFocusLater()),r.setState({isOpen:!0},(function(){r.setState({afterOpen:!0}),r.props.isOpen&&r.props.onAfterOpen&&r.props.onAfterOpen({overlayEl:r.overlay,contentEl:r.content})})))},r.close=function(){r.props.closeTimeoutMS>0?r.closeWithTimeout():r.closeWithoutTimeout()},r.focusContent=function(){return r.content&&!r.contentHasFocus()&&r.content.focus({preventScroll:!0})},r.closeWithTimeout=function(){var e=Date.now()+r.props.closeTimeoutMS;r.setState({beforeClose:!0,closesAt:e},(function(){r.closeTimer=setTimeout(r.closeWithoutTimeout,r.state.closesAt-Date.now())}))},r.closeWithoutTimeout=function(){r.setState({beforeClose:!1,isOpen:!1,afterOpen:!1,closesAt:null},r.afterClose)},r.handleKeyDown=function(e){9===e.keyCode&&(0,u.default)(r.content,e),r.props.shouldCloseOnEsc&&27===e.keyCode&&(e.stopPropagation(),r.requestClose(e))},r.handleOverlayOnClick=function(e){null===r.shouldClose&&(r.shouldClose=!0),r.shouldClose&&r.props.shouldCloseOnOverlayClick&&(r.ownerHandlesClose()?r.requestClose(e):r.focusContent()),r.shouldClose=null},r.handleContentOnMouseUp=function(){r.shouldClose=!1},r.handleOverlayOnMouseDown=function(e){r.props.shouldCloseOnOverlayClick||e.target!=r.overlay||e.preventDefault()},r.handleContentOnClick=function(){r.shouldClose=!1},r.handleContentOnMouseDown=function(){r.shouldClose=!1},r.requestClose=function(e){return r.ownerHandlesClose()&&r.props.onRequestClose(e)},r.ownerHandlesClose=function(){return r.props.onRequestClose},r.shouldBeClosed=function(){return!r.state.isOpen&&!r.state.beforeClose},r.contentHasFocus=function(){return document.activeElement===r.content||r.content.contains(document.activeElement)},r.buildClassName=function(e,t){var o="object"===(void 0===t?"undefined":n(t))?t:{base:g[e],afterOpen:g[e]+"--after-open",beforeClose:g[e]+"--before-close"},a=o.base;return r.state.afterOpen&&(a=a+" "+o.afterOpen),r.state.beforeClose&&(a=a+" "+o.beforeClose),"string"==typeof t&&t?a+" "+t:a},r.attributesFromObject=function(e,t){return Object.keys(t).reduce((function(r,o){return r[e+"-"+o]=t[o],r}),{})},r.state={afterOpen:!1,beforeClose:!1},r.shouldClose=null,r.moveFromContentToOverlay=null,r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"componentDidMount",value:function(){this.props.isOpen&&this.open()}},{key:"componentDidUpdate",value:function(e,t){this.props.isOpen&&!e.isOpen?this.open():!this.props.isOpen&&e.isOpen&&this.close(),this.props.shouldFocusAfterRender&&this.state.isOpen&&!t.isOpen&&this.focusContent()}},{key:"componentWillUnmount",value:function(){this.state.isOpen&&this.afterClose(),clearTimeout(this.closeTimer)}},{key:"beforeOpen",value:function(){var e=this.props,t=e.appElement,r=e.ariaHideApp,o=e.htmlOpenClassName,n=e.bodyOpenClassName;n&&c.add(document.body,n),o&&c.add(document.getElementsByTagName("html")[0],o),r&&(m+=1,d.hide(t)),p.default.register(this)}},{key:"render",value:function(){var e=this.props,t=e.id,r=e.className,n=e.overlayClassName,a=e.defaultStyles,l=e.children,s=r?{}:a.content,i=n?{}:a.overlay;if(this.shouldBeClosed())return null;var u={ref:this.setOverlayRef,className:this.buildClassName("overlay",n),style:o({},i,this.props.style.overlay),onClick:this.handleOverlayOnClick,onMouseDown:this.handleOverlayOnMouseDown},d=o({id:t,ref:this.setContentRef,style:o({},s,this.props.style.content),className:this.buildClassName("content",r),tabIndex:"-1",onKeyDown:this.handleKeyDown,onMouseDown:this.handleContentOnMouseDown,onMouseUp:this.handleContentOnMouseUp,onClick:this.handleContentOnClick,role:this.props.role,"aria-label":this.props.contentLabel},this.attributesFromObject("aria",o({modal:!0},this.props.aria)),this.attributesFromObject("data",this.props.data||{}),{"data-testid":this.props.testId}),c=this.props.contentElement(d,l);return this.props.overlayElement(u,c)}}]),t}(l.Component);y.defaultProps={style:{overlay:{},content:{}},defaultStyles:{}},y.propTypes={isOpen:s.default.bool.isRequired,defaultStyles:s.default.shape({content:s.default.object,overlay:s.default.object}),style:s.default.shape({content:s.default.object,overlay:s.default.object}),className:s.default.oneOfType([s.default.string,s.default.object]),overlayClassName:s.default.oneOfType([s.default.string,s.default.object]),bodyOpenClassName:s.default.string,htmlOpenClassName:s.default.string,ariaHideApp:s.default.bool,appElement:s.default.instanceOf(f.default),onAfterOpen:s.default.func,onAfterClose:s.default.func,onRequestClose:s.default.func,closeTimeoutMS:s.default.number,shouldFocusAfterRender:s.default.bool,shouldCloseOnOverlayClick:s.default.bool,shouldReturnFocusAfterClose:s.default.bool,preventScroll:s.default.bool,role:s.default.string,contentLabel:s.default.string,aria:s.default.object,data:s.default.object,children:s.default.node,shouldCloseOnEsc:s.default.bool,overlayRef:s.default.func,contentRef:s.default.func,id:s.default.string,overlayElement:s.default.func,contentElement:s.default.func,testId:s.default.string},t.default=y,e.exports=t.default},57149:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assertNodeList=s,t.setElement=function(e){var t=e;if("string"==typeof t&&a.canUseDOM){var r=document.querySelectorAll(t);s(r,t),t="length"in r?r[0]:r}return l=t||l},t.validateElement=i,t.hide=function(e){i(e)&&(e||l).setAttribute("aria-hidden","true")},t.show=function(e){i(e)&&(e||l).removeAttribute("aria-hidden")},t.documentNotReadyOrSSRTesting=function(){l=null},t.resetForTesting=function(){l=null};var o,n=(o=r(42473))&&o.__esModule?o:{default:o},a=r(51112),l=null;function s(e,t){if(!e||!e.length)throw new Error("react-modal: No elements were found for selector "+t+".")}function i(e){return!(!e&&!l&&((0,n.default)(!1,["react-modal: App element is not defined.","Please use `Modal.setAppElement(el)` or set `appElement={el}`.","This is needed so screen readers don't see main content","when modal is opened. It is not recommended, but you can opt-out","by setting `ariaHideApp={false}`."].join(" ")),1))}},35063:(e,t,r)=>{"use strict";var o,n=(o=r(89623))&&o.__esModule?o:{default:o},a=void 0,l=void 0,s=[];function i(){0!==s.length&&s[s.length-1].focusContent()}n.default.subscribe((function(e,t){a&&l||((a=document.createElement("div")).setAttribute("data-react-modal-body-trap",""),a.style.position="absolute",a.style.opacity="0",a.setAttribute("tabindex","0"),a.addEventListener("focus",i),(l=a.cloneNode()).addEventListener("focus",i)),(s=t).length>0?(document.body.firstChild!==a&&document.body.insertBefore(a,document.body.firstChild),document.body.lastChild!==l&&document.body.appendChild(l)):(a.parentElement&&a.parentElement.removeChild(a),l.parentElement&&l.parentElement.removeChild(l))}))},32409:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dumpClassLists=function(){};var r={},o={};t.add=function(e,t){return n=e.classList,a="html"==e.nodeName.toLowerCase()?r:o,void t.split(" ").forEach((function(e){!function(e,t){e[t]||(e[t]=0),e[t]+=1}(a,e),n.add(e)}));var n,a},t.remove=function(e,t){return n=e.classList,a="html"==e.nodeName.toLowerCase()?r:o,void t.split(" ").forEach((function(e){!function(e,t){e[t]&&(e[t]-=1)}(a,e),0===a[e]&&n.remove(e)}));var n,a}},99685:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.handleBlur=i,t.handleFocus=u,t.markForFocusLater=function(){a.push(document.activeElement)},t.returnFocus=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=null;try{return void(0!==a.length&&(t=a.pop()).focus({preventScroll:e}))}catch(e){console.warn(["You tried to return focus to",t,"but it is not in the DOM anymore"].join(" "))}},t.popWithoutFocus=function(){a.length>0&&a.pop()},t.setupScopedFocus=function(e){l=e,window.addEventListener?(window.addEventListener("blur",i,!1),document.addEventListener("focus",u,!0)):(window.attachEvent("onBlur",i),document.attachEvent("onFocus",u))},t.teardownScopedFocus=function(){l=null,window.addEventListener?(window.removeEventListener("blur",i),document.removeEventListener("focus",u)):(window.detachEvent("onBlur",i),document.detachEvent("onFocus",u))};var o,n=(o=r(37845))&&o.__esModule?o:{default:o},a=[],l=null,s=!1;function i(){s=!0}function u(){if(s){if(s=!1,!l)return;setTimeout((function(){l.contains(document.activeElement)||((0,n.default)(l)[0]||l).focus()}),0)}}},89623:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=new function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.register=function(e){-1===t.openInstances.indexOf(e)&&(t.openInstances.push(e),t.emit("register"))},this.deregister=function(e){var r=t.openInstances.indexOf(e);-1!==r&&(t.openInstances.splice(r,1),t.emit("deregister"))},this.subscribe=function(e){t.subscribers.push(e)},this.emit=function(e){t.subscribers.forEach((function(r){return r(e,t.openInstances.slice())}))},this.openInstances=[],this.subscribers=[]};t.default=r,e.exports=t.default},51112:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.canUseDOM=void 0;var o,n=((o=r(58875))&&o.__esModule?o:{default:o}).default,a=n.canUseDOM?window.HTMLElement:{};t.canUseDOM=n.canUseDOM,t.default=a},88338:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var r=(0,n.default)(e);if(r.length){var o=void 0,a=t.shiftKey,l=r[0],s=r[r.length-1];if(e===document.activeElement){if(!a)return;o=s}if(s!==document.activeElement||a||(o=l),l===document.activeElement&&a&&(o=s),o)return t.preventDefault(),void o.focus();var i=/(\bChrome\b|\bSafari\b)\//.exec(navigator.userAgent);if(null!=i&&"Chrome"!=i[1]&&null==/\biPod\b|\biPad\b/g.exec(navigator.userAgent)){var u=r.indexOf(document.activeElement);if(u>-1&&(u+=a?-1:1),void 0===(o=r[u]))return t.preventDefault(),void(o=a?s:l).focus();t.preventDefault(),o.focus()}}else t.preventDefault()};var o,n=(o=r(37845))&&o.__esModule?o:{default:o};e.exports=t.default},37845:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return[].slice.call(e.querySelectorAll("*"),0).filter(n)};var r=/input|select|textarea|button|object/;function o(e){var t=e.offsetWidth<=0&&e.offsetHeight<=0;if(t&&!e.innerHTML)return!0;var r=window.getComputedStyle(e);return t?"visible"!==r.getPropertyValue("overflow")||e.scrollWidth<=0&&e.scrollHeight<=0:"none"==r.getPropertyValue("display")}function n(e){var t=e.getAttribute("tabindex");null===t&&(t=void 0);var n=isNaN(t);return(n||t>=0)&&function(e,t){var n=e.nodeName.toLowerCase();return(r.test(n)&&!e.disabled||"a"===n&&e.href||t)&&function(e){for(var t=e;t&&t!==document.body;){if(o(t))return!1;t=t.parentNode}return!0}(e)}(e,!n)}e.exports=t.default},83253:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,n=(o=r(29983))&&o.__esModule?o:{default:o};t.default=n.default,e.exports=t.default},340:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Tab:()=>j,TabList:()=>P,TabPanel:()=>T,Tabs:()=>O,resetIdCounter:()=>g}),r(85890);var o=r(99196),n=r.n(o);function a(e){return e.type&&"Tab"===e.type.tabsRole}function l(e){return e.type&&"TabPanel"===e.type.tabsRole}function s(e){return e.type&&"TabList"===e.type.tabsRole}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){return o.Children.map(e,(function(e){return null===e?null:function(e){return a(e)||s(e)||l(e)}(e)?t(e):e.props&&e.props.children&&"object"==typeof e.props.children?(0,o.cloneElement)(e,function(e){for(var t=1;t=this.getTabsCount())){var r=this.props;(0,r.onSelect)(e,r.selectedIndex,t)}},f.getNextTab=function(e){for(var t=this.getTabsCount(),r=e+1;re;)if(!x(this.getTab(t)))return t;return e},f.getFirstTab=function(){for(var e=this.getTabsCount(),t=0;t=0||(n[r]=e[r]);return n}(t,["children","className","disabledTabClassName","domRef","focus","forceRenderTabPanel","onSelect","selectedIndex","selectedTabClassName","selectedTabPanelClassName"]));return n().createElement("div",y({},a,{className:p()(r),onClick:this.handleClick,onKeyDown:this.handleKeyDown,ref:function(t){e.node=t,o&&o(t)},"data-tabs":!0}),this.getChildren())},i}(o.Component);C.defaultProps={className:"react-tabs",focus:!1},C.propTypes={};var O=function(e){var t,r;function o(t){var r;return(r=e.call(this,t)||this).handleSelected=function(e,t,n){var a=r.props.onSelect;if("function"!=typeof a||!1!==a(e,t,n)){var l={focus:"keydown"===n.type};o.inUncontrolledMode(r.props)&&(l.selectedIndex=e),r.setState(l)}},r.state=o.copyPropsToState(r.props,{},t.defaultFocus),r}r=e,(t=o).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=o.prototype;return a.componentWillReceiveProps=function(e){this.setState((function(t){return o.copyPropsToState(e,t)}))},o.inUncontrolledMode=function(e){return null===e.selectedIndex},o.copyPropsToState=function(e,t,r){void 0===r&&(r=!1);var n={focus:r};if(o.inUncontrolledMode(e)){var a,l=m(e.children)-1;a=null!=t.selectedIndex?Math.min(t.selectedIndex,l):e.defaultIndex||0,n.selectedIndex=a}return n},a.render=function(){var e=this.props,t=e.children,r=(e.defaultIndex,e.defaultFocus,function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o=0||(n[r]=e[r]);return n}(e,["children","defaultIndex","defaultFocus"])),o=this.state,a=o.focus,l=o.selectedIndex;return r.focus=a,r.onSelect=this.handleSelected,null!=l&&(r.selectedIndex=l),n().createElement(C,r,t)},o}(o.Component);function w(){return w=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,["children","className"]);return n().createElement("ul",w({},o,{className:p()(r),role:"tablist"}),t)},o}(o.Component);function k(){return k=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}(r,["children","className","disabled","disabledClassName","focus","id","panelId","selected","selectedClassName","tabIndex","tabRef"]);return n().createElement("li",k({},b,{className:p()(a,(e={},e[c]=d,e[s]=l,e)),ref:function(e){t.node=e,h&&h(e)},role:"tab",id:i,"aria-selected":d?"true":"false","aria-disabled":l?"true":"false","aria-controls":u,tabIndex:f||(d?"0":null)}),o)},o}(o.Component);function S(){return S=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}(t,["children","className","forceRender","id","selected","selectedClassName","tabId"]);return n().createElement("div",S({},d,{className:p()(o,(e={},e[i]=s,e)),role:"tabpanel",id:l,"aria-labelledby":u}),a||s?r:null)},o}(o.Component);T.defaultProps={className:M,forceRender:!1,selectedClassName:M+"--selected"},T.propTypes={},T.tabsRole="TabPanel"},42473:e=>{"use strict";e.exports=function(){}},99196:e=>{"use strict";e.exports=window.React},91850:e=>{"use strict";e.exports=window.ReactDOM},92819:e=>{"use strict";e.exports=window.lodash},57349:e=>{"use strict";e.exports=window.lodash.flow},66366:e=>{"use strict";e.exports=window.lodash.isEmpty},16653:e=>{"use strict";e.exports=window.lodash.omit},25158:e=>{"use strict";e.exports=window.wp.a11y},65736:e=>{"use strict";e.exports=window.wp.i18n},23695:e=>{"use strict";e.exports=window.yoast.helpers},85890:e=>{"use strict";e.exports=window.yoast.propTypes},92651:e=>{"use strict";e.exports=window.yoast.reactSelect},37188:e=>{"use strict";e.exports=window.yoast.styleGuide},98487:e=>{"use strict";e.exports=window.yoast.styledComponents}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o=r(95235);(window.yoast=window.yoast||{}).componentsNew=o})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/draftJs.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/draftJs.js new file mode 100644 index 00000000..607a24ea --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/draftJs.js @@ -0,0 +1 @@ +(()=>{var t={19785:(t,e,r)=>{"use strict";function n(t){for(var e=1;e{"use strict";var n=r(43393).OrderedMap,i={createFromArray:function(t){return n(t.map((function(t){return[t.getKey(),t]})))}};t.exports=i},34365:(t,e,r)=>{"use strict";function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i=r(29407),o=r(96495),a=r(43393),s=a.List,u=a.Repeat,c=a.Record,l=function(){return!0},f=c({start:null,end:null}),p=c({start:null,end:null,decoratorKey:null,leaves:null}),h={generate:function(t,e,r){var n=e.getLength();if(!n)return s.of(new p({start:0,end:0,decoratorKey:null,leaves:s.of(new f({start:0,end:0}))}));var o=[],a=r?r.getDecorations(e,t):s(u(null,n)),c=e.getCharacterList();return i(a,d,l,(function(t,e){var r,n,u,h;o.push(new p({start:t,end:e,decoratorKey:a.get(t),leaves:(r=c.slice(t,e).toList(),n=t,u=[],h=r.map((function(t){return t.getStyle()})).toList(),i(h,d,l,(function(t,e){u.push(new f({start:t+n,end:e+n}))})),s(u))}))})),s(o)},fromJS:function(t){var e=t.leaves,r=function(t,e){if(null==t)return{};var r,n,i={},o=Object.keys(t);for(n=0;n=0||(i[r]=t[r]);return i}(t,["leaves"]);return new p(function(t){for(var e=1;e{"use strict";var n=r(43393),i=n.Map,o=n.OrderedSet,a=n.Record,s=o(),u={style:s,entity:null},c=function(t){var e,r;function n(){return t.apply(this,arguments)||this}r=t,(e=n).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var a=n.prototype;return a.getStyle=function(){return this.get("style")},a.getEntity=function(){return this.get("entity")},a.hasStyle=function(t){return this.getStyle().includes(t)},n.applyStyle=function(t,e){var r=t.set("style",t.getStyle().add(e));return n.create(r)},n.removeStyle=function(t,e){var r=t.set("style",t.getStyle().remove(e));return n.create(r)},n.applyEntity=function(t,e){var r=t.getEntity()===e?t:t.set("entity",e);return n.create(r)},n.create=function(t){if(!t)return l;var e=i({style:s,entity:null}).merge(t),r=f.get(e);if(r)return r;var o=new n(e);return f=f.set(e,o),o},n.fromJS=function(t){var e=t.style,r=t.entity;return new n({style:Array.isArray(e)?o(e):e,entity:Array.isArray(r)?o(r):r})},n}(a(u)),l=new c,f=i([[i(u),l]]);c.EMPTY=l,t.exports=c},25369:(t,e,r)=>{"use strict";var n=r(43393).List,i=function(){function t(t){var e,r;r=void 0,(e="_decorators")in this?Object.defineProperty(this,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):this[e]=r,this._decorators=t.slice()}var e=t.prototype;return e.getDecorations=function(t,e){var r=Array(t.getText().length).fill(null);return this._decorators.forEach((function(n,i){var o=0;(0,n.strategy)(t,(function(t,e){(function(t,e,r){for(var n=e;n{"use strict";var n=r(4516),i=r(29407),o=r(43393),a=o.List,s=o.Map,u=o.OrderedSet,c=o.Record,l=o.Repeat,f=u(),p=function(t){var e,r;function o(e){return t.call(this,function(t){if(!t)return t;var e=t.characterList,r=t.text;return r&&!e&&(t.characterList=a(l(n.EMPTY,r.length))),t}(e))||this}r=t,(e=o).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var s=o.prototype;return s.getKey=function(){return this.get("key")},s.getType=function(){return this.get("type")},s.getText=function(){return this.get("text")},s.getCharacterList=function(){return this.get("characterList")},s.getLength=function(){return this.getText().length},s.getDepth=function(){return this.get("depth")},s.getData=function(){return this.get("data")},s.getInlineStyleAt=function(t){var e=this.getCharacterList().get(t);return e?e.getStyle():f},s.getEntityAt=function(t){var e=this.getCharacterList().get(t);return e?e.getEntity():null},s.findStyleRanges=function(t,e){i(this.getCharacterList(),h,t,e)},s.findEntityRanges=function(t,e){i(this.getCharacterList(),d,t,e)},o}(c({key:"",type:"unstyled",text:"",characterList:a(),depth:0,data:s()}));function h(t,e){return t.getStyle()===e.getStyle()}function d(t,e){return t.getEntity()===e.getEntity()}t.exports=p},67953:(t,e,r)=>{"use strict";var n=r(4516),i=r(29407),o=r(43393),a=o.List,s=o.Map,u=o.OrderedSet,c=o.Record,l=o.Repeat,f=u(),p={parent:null,characterList:a(),data:s(),depth:0,key:"",text:"",type:"unstyled",children:a(),prevSibling:null,nextSibling:null},h=function(t,e){return t.getStyle()===e.getStyle()},d=function(t,e){return t.getEntity()===e.getEntity()},g=function(t){var e,r;function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p;return t.call(this,function(t){if(!t)return t;var e=t.characterList,r=t.text;return r&&!e&&(t.characterList=a(l(n.EMPTY,r.length))),t}(e))||this}r=t,(e=o).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var s=o.prototype;return s.getKey=function(){return this.get("key")},s.getType=function(){return this.get("type")},s.getText=function(){return this.get("text")},s.getCharacterList=function(){return this.get("characterList")},s.getLength=function(){return this.getText().length},s.getDepth=function(){return this.get("depth")},s.getData=function(){return this.get("data")},s.getInlineStyleAt=function(t){var e=this.getCharacterList().get(t);return e?e.getStyle():f},s.getEntityAt=function(t){var e=this.getCharacterList().get(t);return e?e.getEntity():null},s.getChildKeys=function(){return this.get("children")},s.getParentKey=function(){return this.get("parent")},s.getPrevSiblingKey=function(){return this.get("prevSibling")},s.getNextSiblingKey=function(){return this.get("nextSibling")},s.findStyleRanges=function(t,e){i(this.getCharacterList(),h,t,e)},s.findEntityRanges=function(t,e){i(this.getCharacterList(),d,t,e)},o}(c(p));t.exports=g},66912:(t,e,r)=>{"use strict";function n(t){for(var e=1;e1||escape(t.first().getText()).replace(/%u200B/g,"").length>0},s.createEntity=function(t,e,r){return c.__create(t,e,r),this},s.mergeEntityData=function(t,e){return c.__mergeData(t,e),this},s.replaceEntityData=function(t,e){return c.__replaceData(t,e),this},s.addEntity=function(t){return c.__add(t),this},s.getEntity=function(t){return c.__get(t)},s.getAllEntities=function(){return c.__getAll()},s.loadWithEntities=function(t){return c.__loadWithEntities(t)},i.createFromBlockArray=function(t,e){var r=Array.isArray(t)?t:t.contentBlocks,n=o.createFromArray(r),a=n.isEmpty()?new l:l.createEmpty(n.first().getKey());return new i({blockMap:n,entityMap:e||c,selectionBefore:a,selectionAfter:a})},i.createFromText=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:/\r\n?|\n/g,r=t.split(e).map((function(t){return t=g(t),new w({key:f(),text:t,type:"unstyled",characterList:y(m(a.EMPTY,t.length))})}));return i.createFromBlockArray(r)},i.fromJS=function(t){return new i(n({},t,{blockMap:b(t.blockMap).map(i.createContentBlockFromJS),selectionBefore:new l(t.selectionBefore),selectionAfter:new l(t.selectionAfter)}))},i.createContentBlockFromJS=function(t){var e=t.characterList;return new w(n({},t,{data:_(t.data),characterList:null!=e?y((Array.isArray(e)?e:p(e)).map((function(t){return a.fromJS(t)}))):void 0}))},i}(S);t.exports=x},13483:(t,e,r)=>{"use strict";var n=r(4516),i=r(43393).Map,o={add:function(t,e,r){return a(t,e,r,!0)},remove:function(t,e,r){return a(t,e,r,!1)}};function a(t,e,r,o){var a=t.getBlockMap(),s=e.getStartKey(),u=e.getStartOffset(),c=e.getEndKey(),l=e.getEndOffset(),f=a.skipUntil((function(t,e){return e===s})).takeUntil((function(t,e){return e===c})).concat(i([[c,a.get(c)]])).map((function(t,e){var i,a;s===c?(i=u,a=l):(i=e===s?u:0,a=e===c?l:t.getLength());for(var f,p=t.getCharacterList();i{"use strict";function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i=r(4856),o=r(69270),a=r(48083),s=r(43393),u=r(73759),c=r(22045),l=s.Map,f={subtree:!0,characterData:!0,childList:!0,characterDataOldValue:!1,attributes:!1},p=i.isBrowser("IE <= 11"),h=function(){function t(t){var e=this;n(this,"observer",void 0),n(this,"container",void 0),n(this,"mutations",void 0),n(this,"onCharData",void 0),this.container=t,this.mutations=l();var r=a(t);r.MutationObserver&&!p?this.observer=new r.MutationObserver((function(t){return e.registerMutations(t)})):this.onCharData=function(t){t.target instanceof Node||u(!1),e.registerMutation({type:"characterData",target:t.target})}}var e=t.prototype;return e.start=function(){this.observer?this.observer.observe(this.container,f):this.container.addEventListener("DOMCharacterDataModified",this.onCharData)},e.stopAndFlushMutations=function(){var t=this.observer;t?(this.registerMutations(t.takeRecords()),t.disconnect()):this.container.removeEventListener("DOMCharacterDataModified",this.onCharData);var e=this.mutations;return this.mutations=l(),e},e.registerMutations=function(t){for(var e=0;e{"use strict";var n=r(99196),i=r(62620),o=(0,r(43393).Map)({"header-one":{element:"h1"},"header-two":{element:"h2"},"header-three":{element:"h3"},"header-four":{element:"h4"},"header-five":{element:"h5"},"header-six":{element:"h6"},section:{element:"section"},article:{element:"article"},"unordered-list-item":{element:"li",wrapper:n.createElement("ul",{className:i("public/DraftStyleDefault/ul")})},"ordered-list-item":{element:"li",wrapper:n.createElement("ol",{className:i("public/DraftStyleDefault/ol")})},blockquote:{element:"blockquote"},atomic:{element:"figure"},"code-block":{element:"pre",wrapper:n.createElement("pre",{className:i("public/DraftStyleDefault/pre")})},unstyled:{element:"div",aliasedElements:["p"]}});t.exports=o},37619:t=>{"use strict";t.exports={BOLD:{fontWeight:"bold"},CODE:{fontFamily:"monospace",wordWrap:"break-word"},ITALIC:{fontStyle:"italic"},STRIKETHROUGH:{textDecoration:"line-through"},UNDERLINE:{textDecoration:"underline"}}},9041:(t,e,r)=>{"use strict";var n=r(19785),i=r(10329),o=r(4516),a=r(25369),s=r(38777),u=r(66912),c=r(526),l=r(37619),f=r(87210),p=r(37898),h=r(82222),d=r(42307),g=r(39006),y=r(14289),v=r(47387),m=r(70054),_=r(41947),b=r(25110),S=r(79981),w=r(99607),x=r(25027),k=r(41714),C=r(96629),E={Editor:f,EditorBlock:p,EditorState:y,CompositeDecorator:a,Entity:h,EntityInstance:g,BlockMapBuilder:i,CharacterMetadata:o,ContentBlock:s,ContentState:u,RawDraftContentState:m,SelectionState:b,AtomicBlockUtils:n,KeyBindingUtil:v,Modifier:d,RichUtils:_,DefaultDraftBlockRenderMap:c,DefaultDraftInlineStyle:l,convertFromHTML:r(67841),convertFromRaw:w,convertToRaw:S,genKey:x,getDefaultKeyBinding:k,getVisibleSelectionRect:C};t.exports=E},87210:(t,e,r)=>{"use strict";var n=r(27418);function i(){return i=n||function(t){for(var e=1;e{"use strict";var n=r(27418);function i(){return i=n||function(t){for(var e=1;e0&&window.scrollTo(o.x,o.y+n+10)}else v(r)||y(!1),(n=r.offsetHeight+r.offsetTop-(i.offsetTop+i.offsetHeight+o.y))>0&&u.setTop(i,u.getTop(i)+n+10)}}}},b._renderChildren=function(){var t=this,e=this.props.block,r=e.getKey(),n=e.getText(),u=this.props.tree.size-1,c=_(this.props.selection,r);return this.props.tree.map((function(p,h){var d=p.get("leaves");if(0===d.size)return null;var g=d.size-1,y=d.map((function(i,l){var f=a.encode(r,h,l),p=i.get("start"),d=i.get("end");return s.createElement(o,{key:f,offsetKey:f,block:e,start:p,selection:c?t.props.selection:null,forceSelection:t.props.forceSelection,text:n.slice(p,d),styleSet:e.getInlineStyleAt(p),customStyleMap:t.props.customStyleMap,customStyleFn:t.props.customStyleFn,isLast:h===u&&l===g})})).toArray(),v=p.get("decoratorKey");if(null==v)return y;if(!t.props.decorator)return y;var _=m(t.props.decorator),b=_.getComponentForKey(v);if(!b)return y;var S=_.getPropsForKey(v),w=a.encode(r,h,0),x=d.first().get("start"),k=d.last().get("end"),C=n.slice(x,k),E=e.getEntityAt(p.get("start")),O=f.getHTMLDirIfDifferent(l.getDirection(C),t.props.direction),D={contentState:t.props.contentState,decoratedText:C,dir:O,start:x,end:k,blockKey:r,entityKey:E,offsetKey:w};return s.createElement(b,i({},S,D,{key:w}),y)})).toArray()},b.render=function(){var t=this,e=this.props,r=e.direction,n=e.offsetKey,i=p({"public/DraftStyleDefault/block":!0,"public/DraftStyleDefault/ltr":"LTR"===r,"public/DraftStyleDefault/rtl":"RTL"===r});return s.createElement("div",{"data-offset-key":n,className:i,ref:function(e){return t._node=e}},this._renderChildren())},n}(s.Component);t.exports=b},25821:(t,e,r)=>{"use strict";var n=r(27418);function i(){return i=n||function(t){for(var e=1;e0&&window.scrollTo(o.x,o.y+n+10)}else{v(r)||y(!1);var s=r;(n=s.offsetHeight+s.offsetTop-(i.offsetHeight+o.y))>0&&l.setTop(i,l.getTop(i)+n+10)}}}},g.render=function(){var t=this,e=this.props,r=e.block,a=e.blockRenderMap,l=e.blockRendererFn,f=e.blockStyleFn,p=e.contentState,h=e.decorator,d=e.editorKey,g=e.editorState,y=e.customStyleFn,v=e.customStyleMap,w=e.direction,x=e.forceSelection,k=e.selection,C=e.tree,E=null;r.children.size&&(E=r.children.reduce((function(e,r){var i=u.encode(r,0,0),s=p.getBlockForKey(r),h=b(s,l),y=h.CustomComponent||n,v=_(s,a),m=v.Element,w=v.wrapperTemplate,x=S(s,d,i,f,h,null),k=o({},t.props,{tree:g.getBlockTree(r),blockProps:h.customProps,offsetKey:i,block:s});return e.push(c.createElement(m,x,c.createElement(y,k))),!w||function(t,e){var r=t.getNextSiblingKey();return!!r&&e.getBlockForKey(r).getType()===t.getType()}(s,p)||function(t,e,r){var n=[],i=!0,o=!1,a=void 0;try{for(var s,l=r.reverse()[Symbol.iterator]();!(i=(s=l.next()).done);i=!0){var f=s.value;if(f.type!==e)break;n.push(f)}}catch(t){o=!0,a=t}finally{try{i||null==l.return||l.return()}finally{if(o)throw a}}r.splice(r.indexOf(n[0]),n.length+1);var p=n.reverse(),h=p[0].key;r.push(c.cloneElement(t,{key:"".concat(h,"-wrap"),"data-offset-key":u.encode(h,0,0)},p))}(w,m,e),e}),[]));var O=r.getKey(),D=u.encode(O,0,0),K=b(r,l),T=K.CustomComponent,M=null!=T?c.createElement(T,i({},this.props,{tree:g.getBlockTree(O),blockProps:K.customProps,offsetKey:D,block:r})):c.createElement(s,{block:r,children:E,contentState:p,customStyleFn:y,customStyleMap:v,decorator:h,direction:w,forceSelection:x,hasSelection:m(k,O),selection:k,tree:C});if(r.getParentKey())return M;var A=_(r,a).Element,I=S(r,d,D,f,K,this.wrapperRef);return c.createElement(A,I,M)},n}(c.Component);t.exports=w},33418:(t,e,r)=>{"use strict";var n=r(77907),i=r(42307),o=r(22146),a=r(14289),s=r(25399),u=r(4856),c=r(14507),l=r(84907),f=r(1244),p=r(42128),h=r(22045),d=u.isBrowser("IE"),g=!1,y=!1,v=null,m={onCompositionStart:function(t){y=!0,function(t){v||(v=new n(l(t))).start()}(t)},onCompositionEnd:function(t){g=!1,y=!1,setTimeout((function(){g||m.resolveComposition(t)}),20)},onSelect:c,onKeyDown:function(t,e){if(!y)return m.resolveComposition(t),void t._onKeyDown(e);e.which!==s.RIGHT&&e.which!==s.LEFT||e.preventDefault()},onKeyPress:function(t,e){e.which===s.RETURN&&e.preventDefault()},resolveComposition:function(t){if(!y){var e=h(v).stopAndFlushMutations();v=null,g=!0;var r=a.set(t._latestEditorState,{inCompositionMode:!1});if(t.exitCurrentMode(),e.size){var n=r.getCurrentContent();e.forEach((function(t,e){var s=o.decode(e),u=s.blockKey,c=s.decoratorKey,l=s.leafKey,f=r.getBlockTree(u).getIn([c,"leaves",l]),h=f.start,d=f.end,g=r.getSelection().merge({anchorKey:u,focusKey:u,anchorOffset:h,focusOffset:d,isBackward:!1}),y=p(n,g),v=n.getBlockForKey(u).getInlineStyleAt(h);n=i.replaceText(n,g,t,v,y),r=a.set(r,{currentContent:n})}));var s=f(r,l(t)).selectionState;t.restoreEditorDOM();var u=d?a.forceSelection(r,s):a.acceptSelection(r,s);t.update(a.push(u,n,"insert-characters"))}else t.update(r)}}};t.exports=m},88795:(t,e,r)=>{"use strict";var n=r(27418);function i(){return i=n||function(t){for(var e=1;e=4,"public/DraftStyleDefault/listLTR":"LTR"===n,"public/DraftStyleDefault/listRTL":"RTL"===n})},d=function(t){var e,r;function n(){return t.apply(this,arguments)||this}r=t,(e=n).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var a=n.prototype;return a.shouldComponentUpdate=function(t){var e=this.props.editorState,r=t.editorState;if(e.getDirectionMap()!==r.getDirectionMap())return!0;if(e.getSelection().getHasFocus()!==r.getSelection().getHasFocus())return!0;var n=r.getNativelyRenderedContent(),i=e.isInCompositionMode(),o=r.isInCompositionMode();if(e===r||null!==n&&r.getCurrentContent()===n||i&&o)return!1;var a=e.getCurrentContent(),s=r.getCurrentContent(),u=e.getDecorator(),c=r.getDecorator();return i!==o||a!==s||u!==c||r.mustForceSelection()},a.render=function(){for(var t=this.props,e=t.blockRenderMap,r=t.blockRendererFn,n=t.blockStyleFn,a=t.customStyleMap,l=t.customStyleFn,d=t.editorState,g=t.editorKey,y=t.preventScroll,v=t.textDirectionality,m=d.getCurrentContent(),_=d.getSelection(),b=d.mustForceSelection(),S=d.getDecorator(),w=p(d.getDirectionMap()),x=m.getBlocksAsArray(),k=[],C=null,E=null,O=0;OC,L)));var q=A||s,H={className:U,"data-block":!0,"data-editor":g,"data-offset-key":R,key:K};void 0!==B&&(H=o({},H,{contentEditable:B,suppressContentEditableWarning:!0}));var W=c.createElement(z,H,c.createElement(q,i({},N,{key:K})));k.push({block:W,wrapperTemplate:P,key:K,offsetKey:R}),C=P?D.getDepth():null,E=P}for(var V=[],G=0;G{"use strict";var n=r(68642)("draft_tree_data_support");t.exports=r(n?69459:88795)},69459:(t,e,r)=>{"use strict";var n=r(27418);function i(){return i=n||function(t){for(var e=1;e{"use strict";var n=r(27418);function i(){return i=n||function(t){for(var e=1;e{"use strict";var n=r(44891),i=r(42307),o=r(14289),a=r(69270),s=r(75795),u=r(21738),c=r(94486),l=r(48083),f=r(42177),p=r(22045),h={onDragEnd:function(t){t.exitCurrentMode(),d(t)},onDrop:function(t,e){var r=new n(e.nativeEvent.dataTransfer),l=t._latestEditorState,h=function(t,e){var r=null,n=null,i=s(t.currentTarget);if("function"==typeof i.caretRangeFromPoint){var o=i.caretRangeFromPoint(t.x,t.y);r=o.startContainer,n=o.startOffset}else{if(!t.rangeParent)return null;r=t.rangeParent,n=t.rangeOffset}r=p(r),n=p(n);var u=p(a(r));return c(e,u,n,u,n)}(e.nativeEvent,l);if(e.preventDefault(),t._dragCount=0,t.exitCurrentMode(),null!=h){var y=r.getFiles();if(y.length>0){if(t.props.handleDroppedFiles&&f(t.props.handleDroppedFiles(h,y)))return;u(y,(function(e){e&&t.update(g(l,h,e))}))}else{var v=t._internalDrag?"internal":"external";t.props.handleDrop&&f(t.props.handleDrop(h,r,v))||(t._internalDrag?t.update(function(t,e){var r=i.moveText(t.getCurrentContent(),t.getSelection(),e);return o.push(t,r,"insert-fragment")}(l,h)):t.update(g(l,h,r.getText()))),d(t)}}}};function d(t){t._internalDrag=!1;var e=t.editorContainer;if(e){var r=new MouseEvent("mouseup",{view:l(e),bubbles:!0,cancelable:!0});e.dispatchEvent(r)}}function g(t,e,r){var n=i.insertText(t.getCurrentContent(),e,r,t.getCurrentInlineStyle());return o.push(t,n,"insert-fragment")}t.exports=h},19394:(t,e,r)=>{"use strict";var n=r(4856),i=r(26396),o=r(43421),a=r(6155),s=r(69328),u=r(73935),c=r(39499),l=r(80981),f=r(62186),p=r(29971),h=r(46397),d=r(6089),g=r(14507),y=n.isBrowser("Chrome"),v=n.isBrowser("Firefox"),m=y||v?g:function(t){},_={onBeforeInput:i,onBlur:o,onCompositionStart:a,onCopy:s,onCut:u,onDragOver:c,onDragStart:l,onFocus:f,onInput:p,onKeyDown:h,onPaste:d,onSelect:g,onMouseUp:m,onKeyUp:m};t.exports=_},4083:(t,e,r)=>{"use strict";var n=r(91850).unstable_flushControlled;t.exports=n},42282:(t,e,r)=>{"use strict";var n=r(27418),i=r(80052),o=r(99196),a=r(73759),s=r(16581),u=r(45412).setDraftEditorSelection,c=function(t){var e,r;function c(){for(var e,r,n,i,o=arguments.length,a=new Array(o),s=0;s{"use strict";var n=r(3259),i=r(42282),o=r(22146),a=r(43393),s=r(99196),u=r(62620),c=(a.List,function(t){var e,r;function a(){return t.apply(this,arguments)||this}return r=t,(e=a).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r,a.prototype.render=function(){var t=this.props,e=t.block,r=t.contentState,a=t.customStyleFn,c=t.customStyleMap,l=t.decorator,f=t.direction,p=t.forceSelection,h=t.hasSelection,d=t.selection,g=t.tree,y=e.getKey(),v=e.getText(),m=g.size-1,_=this.props.children||g.map((function(t,u){var g=t.get("decoratorKey"),_=t.get("leaves"),b=_.size-1,S=_.map((function(t,r){var n=o.encode(y,u,r),l=t.get("start"),f=t.get("end");return s.createElement(i,{key:n,offsetKey:n,block:e,start:l,selection:h?d:null,forceSelection:p,text:v.slice(l,f),styleSet:e.getInlineStyleAt(l),customStyleMap:c,customStyleFn:a,isLast:g===m&&r===b})})).toArray();return g&&l?s.createElement(n,{block:e,children:S,contentState:r,decorator:l,decoratorKey:g,direction:f,leafSet:t,text:v,key:u}):S})).toArray();return s.createElement("div",{"data-offset-key":o.encode(y,0,0),className:u({"public/DraftStyleDefault/block":!0,"public/DraftStyleDefault/ltr":"LTR"===f,"public/DraftStyleDefault/rtl":"RTL"===f})},_)},a}(s.Component));t.exports=c},28094:(t,e,r)=>{"use strict";var n=r(99196),i=r(62620),o=function(t){var e,r;function o(){return t.apply(this,arguments)||this}r=t,(e=o).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var a=o.prototype;return a.shouldComponentUpdate=function(t){return this.props.text!==t.text||this.props.editorState.getSelection().getHasFocus()!==t.editorState.getSelection().getHasFocus()},a.render=function(){var t=this.props.editorState.getSelection().getHasFocus(),e=i({"public/DraftEditorPlaceholder/root":!0,"public/DraftEditorPlaceholder/hasFocus":t});return n.createElement("div",{className:e},n.createElement("div",{className:i("public/DraftEditorPlaceholder/inner"),id:this.props.accessibilityID,style:{whiteSpace:"pre-wrap"}},this.props.text))},o}(n.Component);t.exports=o},80052:(t,e,r)=>{"use strict";function n(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var o=r(99196),a=r(4856),s=r(73759),u=r(84368),c=a.isBrowser("IE <= 11"),l=function(t){var e,r;function a(e){var r;return i(n(r=t.call(this,e)||this),"_forceFlag",void 0),i(n(r),"_node",void 0),r._forceFlag=!1,r}r=t,(e=a).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var l=a.prototype;return l.shouldComponentUpdate=function(t){var e=this._node,r=""===t.children;u(e)||s(!1);var n=e;return r?!function(t){return c?"\n"===t.textContent:"BR"===t.tagName}(n):n.textContent!==t.children},l.componentDidMount=function(){this._forceFlag=!this._forceFlag},l.componentDidUpdate=function(){this._forceFlag=!this._forceFlag},l.render=function(){var t,e=this;return""===this.props.children?this._forceFlag?(t=function(t){return e._node=t},c?o.createElement("span",{key:"A","data-text":"true",ref:t},"\n"):o.createElement("br",{key:"A","data-text":"true",ref:t})):function(t){return c?o.createElement("span",{key:"B","data-text":"true",ref:t},"\n"):o.createElement("br",{key:"B","data-text":"true",ref:t})}((function(t){return e._node=t})):o.createElement("span",{key:this._forceFlag?"A":"B","data-text":"true",ref:function(t){return e._node=t}},this.props.children)},a}(o.Component);t.exports=l},5880:t=>{"use strict";t.exports={initODS:function(){},handleExtensionCausedError:function(){}}},82222:(t,e,r)=>{"use strict";function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i=r(39006),o=r(43393),a=r(73759),s=r(76363),u=(0,o.Map)(),c=s();function l(t,e){console.warn("WARNING: "+t+' will be deprecated soon!\nPlease use "'+e+'" instead.')}var f={getLastCreatedEntityKey:function(){return l("DraftEntity.getLastCreatedEntityKey","contentState.getLastCreatedEntityKey"),f.__getLastCreatedEntityKey()},create:function(t,e,r){return l("DraftEntity.create","contentState.createEntity"),f.__create(t,e,r)},add:function(t){return l("DraftEntity.add","contentState.addEntity"),f.__add(t)},get:function(t){return l("DraftEntity.get","contentState.getEntity"),f.__get(t)},__getAll:function(){return u},__loadWithEntities:function(t){u=t,c=s()},mergeData:function(t,e){return l("DraftEntity.mergeData","contentState.mergeEntityData"),f.__mergeData(t,e)},replaceData:function(t,e){return l("DraftEntity.replaceData","contentState.replaceEntityData"),f.__replaceData(t,e)},__getLastCreatedEntityKey:function(){return c},__create:function(t,e,r){return f.__add(new i({type:t,mutability:e,data:r||{}}))},__add:function(t){return c=s(),u=u.set(c,t),c},__get:function(t){var e=u.get(t);return e||a(!1),e},__mergeData:function(t,e){var r=f.__get(t),i=function(t){for(var e=1;e{"use strict";var n=function(t){var e,r;function n(){return t.apply(this,arguments)||this}r=t,(e=n).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var i=n.prototype;return i.getType=function(){return this.get("type")},i.getMutability=function(){return this.get("mutability")},i.getData=function(){return this.get("data")},n}((0,r(43393).Record)({type:"TOKEN",mutability:"IMMUTABLE",data:Object}));t.exports=n},5195:t=>{"use strict";t.exports={getRemovalRange:function(t,e,r,n,i){var o=r.split(" ");o=o.map((function(t,e){if("forward"===i){if(e>0)return" "+t}else if(e{"use strict";t.exports={logBlockedSelectionEvent:function(){return null},logSelectionStateFailure:function(){return null}}},42307:(t,e,r)=>{"use strict";var n=r(4516),i=r(13483),o=r(68750),a=r(81446),s=r(88687),u=r(43393),c=r(54542),l=r(18467),f=r(73759),p=r(57429),h=r(14017),d=r(54879),g=r(36043),y=u.OrderedSet,v={replaceText:function(t,e,r,i,o){var a=h(t,e),s=d(a,e),u=n.create({style:i||y(),entity:o||null});return l(s,s.getSelectionAfter(),r,u)},insertText:function(t,e,r,n,i){return e.isCollapsed()||f(!1),v.replaceText(t,e,r,n,i)},moveText:function(t,e,r){var n=s(t,e),i=v.removeRange(t,e,"backward");return v.replaceWithFragment(i,r,n)},replaceWithFragment:function(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"REPLACE_WITH_NEW_DATA",i=h(t,e),o=d(i,e);return c(o,o.getSelectionAfter(),r,n)},removeRange:function(t,e,r){var n,i,o,s;e.getIsBackward()&&(e=e.merge({anchorKey:e.getFocusKey(),anchorOffset:e.getFocusOffset(),focusKey:e.getAnchorKey(),focusOffset:e.getAnchorOffset(),isBackward:!1})),n=e.getAnchorKey(),i=e.getFocusKey(),o=t.getBlockForKey(n),s=t.getBlockForKey(i);var u=e.getStartOffset(),c=e.getEndOffset(),l=o.getEntityAt(u),f=s.getEntityAt(c-1);if(n===i&&l&&l===f){var p=a(t.getEntityMap(),o,s,e,r);return d(t,p)}var g=h(t,e);return d(g,e)},splitBlock:function(t,e){var r=h(t,e),n=d(r,e);return g(n,n.getSelectionAfter())},applyInlineStyle:function(t,e,r){return i.add(t,e,r)},removeInlineStyle:function(t,e,r){return i.remove(t,e,r)},setBlockType:function(t,e,r){return p(t,e,(function(t){return t.merge({type:r,depth:0})}))},setBlockData:function(t,e,r){return p(t,e,(function(t){return t.merge({data:r})}))},mergeBlockData:function(t,e,r){return p(t,e,(function(t){return t.merge({data:t.getData().merge(r)})}))},applyEntity:function(t,e,r){var n=h(t,e);return o(n,e,r)}};t.exports=v},22146:t=>{"use strict";var e="-",r={encode:function(t,r,n){return t+e+r+e+n},decode:function(t){var r=t.split(e).reverse(),n=r[0],i=r[1];return{blockKey:r.slice(2).reverse().join(e),decoratorKey:parseInt(i,10),leafKey:parseInt(n,10)}}};t.exports=r},45712:(t,e,r)=>{"use strict";function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i=r(38777),o=r(67953),a=r(67841),s=r(25027),u=r(69769),c=r(68642),l=r(43393),f=r(55283),p=l.List,h=l.Repeat,d=c("draft_tree_data_support"),g=d?o:i,y={processHTML:function(t,e){return a(t,u,e)},processText:function(t,e,r){return t.reduce((function(t,i,o){i=f(i);var a=s(),u={key:a,type:r,text:i,characterList:p(h(e,i.length))};if(d&&0!==o){var c=o-1;u=function(t){for(var e=1;e{"use strict";var n="['‘’]",i="\\s|(?![_])"+r(65724).getPunctuation(),o=new RegExp("^(?:"+i+")*(?:"+n+"|(?!"+i+").)*(?:(?!"+i+").)"),a=new RegExp("(?:(?!"+i+").)(?:"+n+"|(?!"+i+").)*(?:"+i+")*$");function s(t,e){var r=e?a.exec(t):o.exec(t);return r?r[0]:t}var u={getBackward:function(t){return s(t,!0)},getForward:function(t){return s(t,!1)}};t.exports=u},86155:t=>{"use strict";var e={stringify:function(t){return"_"+String(t)},unstringify:function(t){return t.slice(1)}};t.exports=e},68957:(t,e,r)=>{"use strict";function n(t){for(var e=1;e0)||(delete l.children,r.push(l));var u=o.children;Array.isArray(u)||a(!1),i=i.concat([].concat(u.reverse()))}var c,l}(e),t.blocks=r,n({},t,{blocks:r})):t},fromRawStateToRawTreeState:function(t){var e=[],r=[];return t.blocks.forEach((function(t){var i=s(t),a=t.depth||0,u=n({},t,{children:[]});if(i){var c=r[0];if(null==c&&0===a)e.push(u);else if(null==c||c.depth=a;)r.shift(),c=r[0];a>0?c.children.push(u):e.push(u)}}else e.push(u)})),n({},t,{blocks:e})}};t.exports=u},12119:(t,e,r)=>{"use strict";r(63620),t.exports={isValidBlock:function(t,e){var r=t.getKey(),n=t.getParentKey();if(null!=n&&!e.get(n).getChildKeys().includes(r))return!1;if(!t.getChildKeys().map((function(t){return e.get(t)})).every((function(t){return t.getParentKey()===r})))return!1;var i=t.getPrevSiblingKey();if(null!=i&&e.get(i).getNextSiblingKey()!==r)return!1;var o=t.getNextSiblingKey();return(null==o||e.get(o).getPrevSiblingKey()===r)&&!(null!==o&&null!==i&&i===o||""!=t.text&&t.getChildKeys().size>0)},isConnectedTree:function(t){var e=t.toArray().filter((function(t){return null==t.getParentKey()&&null==t.getPrevSiblingKey()}));if(1!==e.length)return!1;for(var r=0,n=e.shift().getKey(),i=[];null!=n;){var o=t.get(n),a=o.getChildKeys(),s=o.getNextSiblingKey();if(a.size>0){null!=s&&i.unshift(s);var u=a.map((function(e){return t.get(e)})).find((function(t){return null==t.getPrevSiblingKey()}));if(null==u)return!1;n=u.getKey()}else n=null!=o.getNextSiblingKey()?o.getNextSiblingKey():i.shift();r++}return r===t.size},isValidTree:function(t){var e=this;return!!t.toArray().every((function(r){return e.isValidBlock(r,t)}))&&this.isConnectedTree(t)}}},33337:(t,e,r)=>{"use strict";var n,i=r(7902),o=r(43393),a=r(22045),s=o.OrderedMap,u={getDirectionMap:function(t,e){n?n.reset():n=new i;var r=t.getBlockMap(),u=r.valueSeq().map((function(t){return a(n).getDirection(t.getText())})),c=s(r.keySeq().zip(u));return null!=e&&o.is(e,c)?e:c}};t.exports=u},14289:(t,e,r)=>{"use strict";function n(t){for(var e=1;e0?i.getInlineStyleAt(n-1):i.getLength()?i.getInlineStyleAt(0):_(t,r)}(e,r):function(t,e){var r=e.getStartKey(),n=e.getStartOffset(),i=t.getBlockForKey(r);return n0?i.getInlineStyleAt(n-1):_(t,r)}(e,r)},t.getBlockTree=function(t){return this.getImmutable().getIn(["treeMap",t])},t.isSelectionAtStartOfContent=function(){var t=this.getCurrentContent().getBlockMap().first().getKey();return this.getSelection().hasEdgeWithin(t,0,0)},t.isSelectionAtEndOfContent=function(){var t=this.getCurrentContent().getBlockMap().last(),e=t.getLength();return this.getSelection().hasEdgeWithin(t.getKey(),e,e)},t.getDirectionMap=function(){return this.getImmutable().get("directionMap")},e.acceptSelection=function(t,e){return v(t,e,!1)},e.forceSelection=function(t,e){return e.getHasFocus()||(e=e.set("hasFocus",!0)),v(t,e,!0)},e.moveSelectionToEnd=function(t){var r=t.getCurrentContent().getLastBlock(),n=r.getKey(),i=r.getLength();return e.acceptSelection(t,new u({anchorKey:n,anchorOffset:i,focusKey:n,focusOffset:i,isBackward:!1}))},e.moveFocusToEnd=function(t){var r=e.moveSelectionToEnd(t);return e.forceSelection(r,r.getSelection())},e.push=function(t,r,n){var i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(t.getCurrentContent()===r)return t;var o=s.getDirectionMap(r,t.getDirectionMap());if(!t.getAllowUndo())return e.set(t,{currentContent:r,directionMap:o,lastChangeType:n,selection:r.getSelectionAfter(),forceSelection:i,inlineStyleOverride:null});var a=t.getSelection(),u=t.getCurrentContent(),c=t.getUndoStack(),l=r;a!==u.getSelectionAfter()||function(t,e){return e!==t.getLastChangeType()||"insert-characters"!==e&&"backspace-character"!==e&&"delete-character"!==e}(t,n)?(c=c.push(u),l=l.set("selectionBefore",a)):"insert-characters"!==n&&"backspace-character"!==n&&"delete-character"!==n||(l=l.set("selectionBefore",u.getSelectionBefore()));var f=t.getInlineStyleOverride();-1===["adjust-depth","change-block-type","split-block"].indexOf(n)&&(f=null);var h={currentContent:l,directionMap:o,undoStack:c,redoStack:p(),lastChangeType:n,selection:r.getSelectionAfter(),forceSelection:i,inlineStyleOverride:f};return e.set(t,h)},e.undo=function(t){if(!t.getAllowUndo())return t;var r=t.getUndoStack(),n=r.peek();if(!n)return t;var i=t.getCurrentContent(),o=s.getDirectionMap(n,t.getDirectionMap());return e.set(t,{currentContent:n,directionMap:o,undoStack:r.shift(),redoStack:t.getRedoStack().push(i),forceSelection:!0,inlineStyleOverride:null,lastChangeType:"undo",nativelyRenderedContent:null,selection:i.getSelectionBefore()})},e.redo=function(t){if(!t.getAllowUndo())return t;var r=t.getRedoStack(),n=r.peek();if(!n)return t;var i=t.getCurrentContent(),o=s.getDirectionMap(n,t.getDirectionMap());return e.set(t,{currentContent:n,directionMap:o,undoStack:t.getUndoStack().push(i),redoStack:r.shift(),forceSelection:!0,inlineStyleOverride:null,lastChangeType:"redo",nativelyRenderedContent:null,selection:n.getSelectionAfter()})},t.getImmutable=function(){return this._immutable},e}();function v(t,e,r){return y.set(t,{selection:e,forceSelection:r,nativelyRenderedContent:null,inlineStyleOverride:null})}function m(t,e){return t.getBlockMap().map((function(r){return o.generate(t,r,e)})).toOrderedMap()}function _(t,e){var r=t.getBlockMap().reverse().skipUntil((function(t,r){return r===e})).skip(1).skipUntil((function(t,e){return t.getLength()})).first();return r?r.getInlineStyleAt(r.getLength()-1):l()}t.exports=y},47387:(t,e,r)=>{"use strict";var n=r(4856),i=r(17797),o=n.isPlatform("Mac OS X"),a={isCtrlKeyCommand:function(t){return!!t.ctrlKey&&!t.altKey},isOptionKeyCommand:function(t){return o&&t.altKey},usesMacOSHeuristics:function(){return o},hasCommandModifier:function(t){return o?!!t.metaKey&&!t.altKey:a.isCtrlKeyCommand(t)},isSoftNewlineEvent:i};t.exports=a},70054:()=>{},41947:(t,e,r)=>{"use strict";var n=r(42307),i=r(14289),o=r(1665),a=r(22045),s={currentBlockContainsLink:function(t){var e=t.getSelection(),r=t.getCurrentContent(),n=r.getEntityMap();return r.getBlockForKey(e.getAnchorKey()).getCharacterList().slice(e.getStartOffset(),e.getEndOffset()).some((function(t){var e=t.getEntity();return!!e&&"LINK"===n.__get(e).getType()}))},getCurrentBlockType:function(t){var e=t.getSelection();return t.getCurrentContent().getBlockForKey(e.getStartKey()).getType()},getDataObjectForLinkURL:function(t){return{url:t.toString()}},handleKeyCommand:function(t,e,r){switch(e){case"bold":return s.toggleInlineStyle(t,"BOLD");case"italic":return s.toggleInlineStyle(t,"ITALIC");case"underline":return s.toggleInlineStyle(t,"UNDERLINE");case"code":return s.toggleCode(t);case"backspace":case"backspace-word":case"backspace-to-start-of-line":return s.onBackspace(t);case"delete":case"delete-word":case"delete-to-end-of-block":return s.onDelete(t);default:return null}},insertSoftNewline:function(t){var e=n.insertText(t.getCurrentContent(),t.getSelection(),"\n",t.getCurrentInlineStyle(),null),r=i.push(t,e,"insert-characters");return i.forceSelection(r,e.getSelectionAfter())},onBackspace:function(t){var e=t.getSelection();if(!e.isCollapsed()||e.getAnchorOffset()||e.getFocusOffset())return null;var r=t.getCurrentContent(),n=e.getStartKey(),o=r.getBlockBefore(n);if(o&&"atomic"===o.getType()){var a=r.getBlockMap().delete(o.getKey()),u=r.merge({blockMap:a,selectionAfter:e});if(u!==r)return i.push(t,u,"remove-range")}var c=s.tryToRemoveBlockStyle(t);return c?i.push(t,c,"change-block-type"):null},onDelete:function(t){var e=t.getSelection();if(!e.isCollapsed())return null;var r=t.getCurrentContent(),o=e.getStartKey(),a=r.getBlockForKey(o).getLength();if(e.getStartOffset(){"use strict";var n=r(42307),i=r(14289),o=r(88687),a=r(22045),s=null,u={cut:function(t){var e=t.getCurrentContent(),r=t.getSelection(),u=null;if(r.isCollapsed()){var c=r.getAnchorKey(),l=e.getBlockForKey(c).getLength();if(l===r.getAnchorOffset()){var f=e.getKeyAfter(c);if(null==f)return t;u=r.set("focusKey",f).set("focusOffset",0)}else u=r.set("focusOffset",l)}else u=r;u=a(u),s=o(e,u);var p=n.removeRange(e,u,"forward");return p===e?t:i.push(t,p,"remove-range")},paste:function(t){if(!s)return t;var e=n.replaceWithFragment(t.getCurrentContent(),t.getSelection(),s);return i.push(t,e,"insert-fragment")}};t.exports=u},25110:(t,e,r)=>{"use strict";var n=function(t){var e,r;function n(){return t.apply(this,arguments)||this}r=t,(e=n).prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r;var i=n.prototype;return i.serialize=function(){return"Anchor: "+this.getAnchorKey()+":"+this.getAnchorOffset()+", Focus: "+this.getFocusKey()+":"+this.getFocusOffset()+", Is Backward: "+String(this.getIsBackward())+", Has Focus: "+String(this.getHasFocus())},i.getAnchorKey=function(){return this.get("anchorKey")},i.getAnchorOffset=function(){return this.get("anchorOffset")},i.getFocusKey=function(){return this.get("focusKey")},i.getFocusOffset=function(){return this.get("focusOffset")},i.getIsBackward=function(){return this.get("isBackward")},i.getHasFocus=function(){return this.get("hasFocus")},i.hasEdgeWithin=function(t,e,r){var n=this.getAnchorKey(),i=this.getFocusKey();if(n===i&&n===t){var o=this.getStartOffset(),a=this.getEndOffset();return e<=o&&o<=r||e<=a&&a<=r}if(t!==n&&t!==i)return!1;var s=t===n?this.getAnchorOffset():this.getFocusOffset();return e<=s&&r>=s},i.isCollapsed=function(){return this.getAnchorKey()===this.getFocusKey()&&this.getAnchorOffset()===this.getFocusOffset()},i.getStartKey=function(){return this.getIsBackward()?this.getFocusKey():this.getAnchorKey()},i.getStartOffset=function(){return this.getIsBackward()?this.getFocusOffset():this.getAnchorOffset()},i.getEndKey=function(){return this.getIsBackward()?this.getAnchorKey():this.getFocusKey()},i.getEndOffset=function(){return this.getIsBackward()?this.getAnchorOffset():this.getFocusOffset()},n.createEmpty=function(t){return new n({anchorKey:t,anchorOffset:0,focusKey:t,focusOffset:0,isBackward:!1,hasFocus:!1})},n}((0,r(43393).Record)({anchorKey:"",anchorOffset:0,focusKey:"",focusOffset:0,isBackward:!1,hasFocus:!1}));t.exports=n},1665:t=>{"use strict";t.exports=function(t,e,r,n){var i=e.getStartKey(),o=e.getEndKey(),a=t.getBlockMap(),s=a.toSeq().skipUntil((function(t,e){return e===i})).takeUntil((function(t,e){return e===o})).concat([[o,a.get(o)]]).map((function(t){var e=t.getDepth()+r;return e=Math.max(0,Math.min(e,n)),t.set("depth",e)}));return a=a.merge(s),t.merge({blockMap:a,selectionBefore:e,selectionAfter:e})}},2835:(t,e,r)=>{"use strict";var n=r(4516);t.exports=function(t,e,r,i){for(var o=e,a=t.getCharacterList();o{"use strict";var n=r(2835),i=r(43393);t.exports=function(t,e,r){var o=t.getBlockMap(),a=e.getStartKey(),s=e.getStartOffset(),u=e.getEndKey(),c=e.getEndOffset(),l=o.skipUntil((function(t,e){return e===a})).takeUntil((function(t,e){return e===u})).toOrderedMap().merge(i.OrderedMap([[u,o.get(u)]])).map((function(t,e){var i=e===a?s:0,o=e===u?c:t.getLength();return n(t,i,o,r)}));return t.merge({blockMap:o.merge(l),selectionBefore:e,selectionAfter:e})}},79981:(t,e,r)=>{"use strict";function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i=r(38777),o=r(67953),a=r(86155),s=r(56265),u=r(31487),c=r(73759),l=function(t,e){return{key:t.getKey(),text:t.getText(),type:t.getType(),depth:t.getDepth(),inlineStyleRanges:u(t),entityRanges:s(t,e),data:t.getData().toObject()}};t.exports=function(t){var e={entityMap:{},blocks:[]};return e=function(t,e){var r=e.entityMap,s=[],u={},f={},p=0;return t.getBlockMap().forEach((function(t){t.findEntityRanges((function(t){return null!==t.getEntity()}),(function(e){var n=t.getEntityAt(e),i=a.stringify(n);f[i]||(f[i]=n,r[i]="".concat(p),p++)})),function(t,e,r,a){if(t instanceof i)r.push(l(t,e));else{t instanceof o||c(!1);var s=t.getParentKey(),u=a[t.getKey()]=function(t){for(var e=1;e{"use strict";var n;function i(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:0;return Object.keys(L).some((function(r){t.classList.contains(r)&&(e=L[r])})),e},P=function(t){if(!b(t))return!1;var e=t;if(!e.href||"http:"!==e.protocol&&"https:"!==e.protocol&&"mailto:"!==e.protocol&&"tel:"!==e.protocol)return!1;try{return new f(e.href),!0}catch(t){return!1}},z=function(t){if(!x(t))return!1;var e=t;return!(!e.attributes.getNamedItem("src")||!e.attributes.getNamedItem("src").value)},j=function(t,e){if(!w(t))return e;var r=t,n=r.style.fontWeight,i=r.style.fontStyle,o=r.style.textDecoration;return e.withMutations((function(t){M.indexOf(n)>=0?t.add("BOLD"):A.indexOf(n)>=0&&t.remove("BOLD"),"italic"===i?t.add("ITALIC"):"normal"===i&&t.remove("ITALIC"),"underline"===o&&t.add("UNDERLINE"),"line-through"===o&&t.add("STRIKETHROUGH"),"none"===o&&(t.remove("UNDERLINE"),t.remove("STRIKETHROUGH"))}))},U=function(t){return"ul"===t||"ol"===t},q=function(){function t(t,e){o(this,"characterList",v()),o(this,"currentBlockType","unstyled"),o(this,"currentDepth",0),o(this,"currentEntity",null),o(this,"currentText",""),o(this,"wrapper",null),o(this,"blockConfigs",[]),o(this,"contentBlocks",[]),o(this,"entityMap",l),o(this,"blockTypeMap",void 0),o(this,"disambiguate",void 0),this.clear(),this.blockTypeMap=t,this.disambiguate=e}var e=t.prototype;return e.clear=function(){this.characterList=v(),this.blockConfigs=[],this.currentBlockType="unstyled",this.currentDepth=0,this.currentEntity=null,this.currentText="",this.entityMap=l,this.wrapper=null,this.contentBlocks=[]},e.addDOMNode=function(t){var e;return this.contentBlocks=[],this.currentDepth=0,(e=this.blockConfigs).push.apply(e,this._toBlockConfigs([t],_())),this._trimCurrentText(),""!==this.currentText&&this.blockConfigs.push(this._makeBlockConfig()),this},e.getContentBlocks=function(){return 0===this.contentBlocks.length&&(k?this._toContentBlocks(this.blockConfigs):this._toFlatContentBlocks(this.blockConfigs)),{contentBlocks:this.contentBlocks,entityMap:this.entityMap}},e._makeBlockConfig=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=i({key:t.key||h(),type:this.currentBlockType,text:this.currentText,characterList:this.characterList,depth:this.currentDepth,parent:null,children:v(),prevSibling:null,nextSibling:null,childConfigs:[]},t);return this.characterList=v(),this.currentBlockType="unstyled",this.currentText="",e},e._toBlockConfigs=function(t,e){for(var r=[],n=0;n(r=void 0!==(n=this.characterList.reverse().findEntry((function(t){return null!==t.getEntity()})))?Math.max(r,t-n[0]):r)?(this.currentText="",this.characterList=v()):(this.currentText=this.currentText.slice(e,r),this.characterList=this.characterList.slice(e,r))},e._addTextNode=function(t,e){var r=t.textContent;""===r.trim()&&"pre"!==this.wrapper&&(r=" "),"pre"!==this.wrapper&&(r=(r=r.replace(O,"")).replace(E," ")),this._appendText(r,e)},e._addBreakNode=function(t,e){S(t)&&this._appendText("\n",e)},e._addImgNode=function(t,e){if(x(t)){var r=t,n={};B.forEach((function(t){var e=r.getAttribute(t);e&&(n[t]=e)})),this.currentEntity=this.entityMap.__create("IMAGE","IMMUTABLE",n),g("draftjs_fix_paste_for_img")?"presentation"!==r.getAttribute("role")&&this._appendText("📷",e):this._appendText("📷",e),this.currentEntity=null}},e._addAnchorNode=function(t,e,r){if(b(t)){var n=t,i={};I.forEach((function(t){var e=n.getAttribute(t);e&&(i[t]=e)})),i.url=new f(n.href).toString(),this.currentEntity=this.entityMap.__create("LINK","MUTABLE",i||{}),e.push.apply(e,this._toBlockConfigs(Array.from(t.childNodes),r)),this.currentEntity=null}},e._toContentBlocks=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=t.length-1,n=0;n<=r;n++){var o=t[n];o.parent=e,o.prevSibling=n>0?t[n-1].key:null,o.nextSibling=n2&&void 0!==arguments[2]?arguments[2]:c,r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:d)(t=t.trim().replace(C,"").replace(D," ").replace(K,"").replace(T,""));if(!r)return null;var n=function(t){var e={};return t.mapKeys((function(t,r){var n=[r.element];void 0!==r.aliasedElements&&n.push.apply(n,r.aliasedElements),n.forEach((function(r){void 0===e[r]?e[r]=t:"string"==typeof e[r]?e[r]=[e[r],t]:e[r].push(t)}))})),m(e)}(e);return new q(n,(function(t,e){return"li"===t?"ol"===e?"ordered-list-item":"unordered-list-item":null})).addDOMNode(r).getContentBlocks()}},99607:(t,e,r)=>{"use strict";function n(t){for(var e=1;e0})),i=m&&!r?c.fromRawStateToRawTreeState(t).blocks:t.blocks;if(!m)return function(t,e){return S(t.map((function(t){var r=new o(w(t,e));return[r.getKey(),r]})))}(r?c.fromRawTreeStateToRawState(t).blocks:i,e);var s=function(t,e){return t.map(k).reduce((function(r,i,o){Array.isArray(i.children)||v(!1);var s=i.children.map(k),u=new a(n({},w(i,e),{prevSibling:0===o?null:t[o-1].key,nextSibling:o===t.length-1?null:t[o+1].key,children:_(s.map((function(t){return t.key})))}));r=r.set(u.getKey(),u);for(var c=C([],s,u);c.length>0;){var l=c.pop(),f=l.parentRef,p=f.getChildKeys(),h=p.indexOf(l.key),d=Array.isArray(l.children);if(!d){d||v(!1);break}var g=l.children.map(k),y=new a(n({},w(l,e),{parent:f.getKey(),children:_(g.map((function(t){return t.key}))),prevSibling:0===h?null:p.get(h-1),nextSibling:h===p.size-1?null:p.get(h+1)}));r=r.set(y.getKey(),y),c=C(c,g,y)}return r}),S())}(i,e);return s}(t,e),i=r.isEmpty()?new l:l.createEmpty(r.first().getKey());return new s({blockMap:r,entityMap:e,selectionBefore:i,selectionAfter:i})}},86019:(t,e,r)=>{"use strict";var n=r(4516),i=r(43393).List;t.exports=function(t,e){var r=t.map((function(t,r){var i=e[r];return n.create({style:t,entity:i})}));return i(r)}},67134:(t,e,r)=>{"use strict";var n=r(38935).substr;t.exports=function(t,e){var r=Array(t.length).fill(null);return e&&e.forEach((function(e){for(var i=n(t,0,e.offset).length,o=i+n(t,e.offset,e.length).length,a=i;a{"use strict";var n=r(38935),i=r(43393).OrderedSet,o=n.substr,a=i();t.exports=function(t,e){var r=Array(t.length).fill(a);return e&&e.forEach((function(e){for(var n=o(t,0,e.offset).length,i=n+o(t,e.offset,e.length).length;n{"use strict";t.exports={notEmptyKey:function(t){return null!=t&&""!=t}}},26396:(t,e,r)=>{"use strict";var n=r(42307),i=r(14289),o=r(4856),a=r(42128),s=r(42177),u=r(40258),c=r(22045),l=r(56926),f=o.isBrowser("Firefox");function p(t,e,r,o,a){var s=n.replaceText(t.getCurrentContent(),t.getSelection(),e,r,o);return i.push(t,s,"insert-characters",a)}t.exports=function(t,e){void 0!==t._pendingStateFromBeforeInput&&(t.update(t._pendingStateFromBeforeInput),t._pendingStateFromBeforeInput=void 0);var r=t._latestEditorState,n=e.data;if(n)if(t.props.handleBeforeInput&&s(t.props.handleBeforeInput(n,r,e.timeStamp)))e.preventDefault();else{var o=r.getSelection(),h=o.getStartOffset(),d=o.getAnchorKey();if(!o.isCollapsed())return e.preventDefault(),void t.update(p(r,n,r.getCurrentInlineStyle(),a(r.getCurrentContent(),r.getSelection()),!0));var g,y=p(r,n,r.getCurrentInlineStyle(),a(r.getCurrentContent(),r.getSelection()),!1),v=!1;if(v||(v=u(t._latestCommittedEditorState)),!v){var m=r.getBlockTree(d),_=y.getBlockTree(d);v=m.size!==_.size||m.zip(_).some((function(t){var e=t[0],r=t[1],i=e.get("start"),o=i+(i>=h?n.length:0),a=e.get("end"),s=a+(a>=h?n.length:0),u=r.get("start"),c=r.get("end"),l=r.get("decoratorKey");return e.get("decoratorKey")!==l||e.get("leaves").size!==r.get("leaves").size||o!==u||s!==c||null!=l&&c-u!=a-i}))}if(v||(g=n,v=f&&("'"==g||"/"==g)),v||(v=c(y.getDirectionMap()).get(d)!==c(r.getDirectionMap()).get(d)),v)return e.preventDefault(),y=i.set(y,{forceSelection:!0}),void t.update(y);y=i.set(y,{nativelyRenderedContent:y.getCurrentContent()}),t._pendingStateFromBeforeInput=y,l((function(){void 0!==t._pendingStateFromBeforeInput&&(t.update(t._pendingStateFromBeforeInput),t._pendingStateFromBeforeInput=void 0)}))}}},43421:(t,e,r)=>{"use strict";var n=r(14289),i=r(67476),o=r(31003);t.exports=function(t,e){var r=e.currentTarget.ownerDocument;if(!Boolean(t.props.preserveSelectionOnBlur)&&o(r)===r.body){var a=r.defaultView.getSelection(),s=t.editor;1===a.rangeCount&&i(s,a.anchorNode)&&i(s,a.focusNode)&&a.removeAllRanges()}var u=t._latestEditorState,c=u.getSelection();if(c.getHasFocus()){var l=c.set("hasFocus",!1);t.props.onBlur&&t.props.onBlur(e),t.update(n.acceptSelection(u,l))}}},6155:(t,e,r)=>{"use strict";var n=r(14289);t.exports=function(t,e){t.setMode("composite"),t.update(n.set(t._latestEditorState,{inCompositionMode:!0})),t._onCompositionStart(e)}},69328:(t,e,r)=>{"use strict";var n=r(94882);t.exports=function(t,e){t._latestEditorState.getSelection().isCollapsed()?e.preventDefault():t.setClipboard(n(t._latestEditorState))}},73935:(t,e,r)=>{"use strict";var n=r(42307),i=r(14289),o=r(19051),a=r(94882),s=r(79749),u=r(80809);t.exports=function(t,e){var r,c=t._latestEditorState,l=c.getSelection(),f=e.target;if(l.isCollapsed())e.preventDefault();else{if(u(f)){var p=f;r=s(o.getScrollParent(p))}var h=a(c);t.setClipboard(h),t.setMode("cut"),setTimeout((function(){t.restoreEditorDOM(r),t.exitCurrentMode(),t.update(function(t){var e=n.removeRange(t.getCurrentContent(),t.getSelection(),"forward");return i.push(t,e,"remove-range")}(c))}),0)}}},39499:t=>{"use strict";t.exports=function(t,e){t.setMode("drag"),e.preventDefault()}},80981:t=>{"use strict";t.exports=function(t){t._internalDrag=!0,t.setMode("drag")}},62186:(t,e,r)=>{"use strict";var n=r(14289),i=r(4856);t.exports=function(t,e){var r=t._latestEditorState,o=r.getSelection();if(!o.getHasFocus()){var a=o.set("hasFocus",!0);t.props.onFocus&&t.props.onFocus(e),i.isBrowser("Chrome < 60.0.3081.0")?t.update(n.forceSelection(r,a)):t.update(n.acceptSelection(r,a))}}},29971:(t,e,r)=>{"use strict";var n=r(42307),i=r(22146),o=r(14289),a=r(4856),s=r(99407).notEmptyKey,u=r(69270),c=r(62800),l=r(22045),f=a.isEngine("Gecko");t.exports=function(t,e){void 0!==t._pendingStateFromBeforeInput&&(t.update(t._pendingStateFromBeforeInput),t._pendingStateFromBeforeInput=void 0);var r=t.editor.ownerDocument.defaultView.getSelection(),a=r.anchorNode,p=r.isCollapsed,h=(null==a?void 0:a.nodeType)!==Node.TEXT_NODE&&(null==a?void 0:a.nodeType)!==Node.ELEMENT_NODE;if(null!=a&&!h){if(a.nodeType===Node.TEXT_NODE&&(null!==a.previousSibling||null!==a.nextSibling)){var d=a.parentNode;if(null==d)return;a.nodeValue=d.textContent;for(var g=d.firstChild;null!=g;g=g.nextSibling)g!==a&&d.removeChild(g)}var y=a.textContent,v=t._latestEditorState,m=l(u(a)),_=i.decode(m),b=_.blockKey,S=_.decoratorKey,w=_.leafKey,x=v.getBlockTree(b).getIn([S,"leaves",w]),k=x.start,C=x.end,E=v.getCurrentContent(),O=E.getBlockForKey(b),D=O.getText().slice(k,C);if(y.endsWith("\n\n")&&(y=y.slice(0,-1)),y!==D){var K,T,M,A,I=v.getSelection(),B=I.merge({anchorOffset:k,focusOffset:C,isBackward:!1}),L=O.getEntityAt(k),R=s(L)?E.getEntity(L):null,N="MUTABLE"===(null!=R?R.getMutability():null),F=N?"spellcheck-change":"apply-entity",P=n.replaceText(E,B,y,O.getInlineStyleAt(k),N?O.getEntityAt(k):null);if(f)K=r.anchorOffset,T=r.focusOffset,A=(M=k+Math.min(K,T))+Math.abs(K-T),K=M,T=A;else{var z=y.length-D.length;M=I.getStartOffset(),A=I.getEndOffset(),K=p?A+z:M,T=A+z}var j=P.merge({selectionBefore:E.getSelectionAfter(),selectionAfter:I.merge({anchorOffset:K,focusOffset:T})});t.update(o.push(v,j,F))}else{var U=e.nativeEvent.inputType;if(U){var q=function(t,e){return"deleteContentBackward"===t?c(e):e}(U,v);if(q!==v)return t.restoreEditorDOM(),void t.update(q)}}}}},46397:(t,e,r)=>{"use strict";var n=r(42307),i=r(14289),o=r(47387),a=r(25399),s=r(83751),u=r(4856),c=r(42177),l=r(49779),f=r(51050),p=r(13767),h=r(77978),d=r(67217),g=r(8425),y=r(62800),v=r(13998),m=r(53318),_=r(87051),b=o.isOptionKeyCommand,S=u.isBrowser("Chrome");t.exports=function(t,e){var r=e.which,o=t._latestEditorState;function u(r){var n=t.props[r];return!!n&&(n(e),!0)}switch(r){case a.RETURN:if(e.preventDefault(),t.props.handleReturn&&c(t.props.handleReturn(e,o)))return;break;case a.ESC:if(e.preventDefault(),u("onEscape"))return;break;case a.TAB:if(u("onTab"))return;break;case a.UP:if(u("onUpArrow"))return;break;case a.RIGHT:if(u("onRightArrow"))return;break;case a.DOWN:if(u("onDownArrow"))return;break;case a.LEFT:if(u("onLeftArrow"))return;break;case a.SPACE:S&&b(e)&&e.preventDefault()}var w=t.props.keyBindingFn(e);if(null!=w&&""!==w)if("undo"!==w){if(e.preventDefault(),!t.props.handleKeyCommand||!c(t.props.handleKeyCommand(w,o,e.timeStamp))){var x=function(t,e,r){switch(t){case"redo":return i.redo(e);case"delete":return v(e);case"delete-word":return p(e);case"backspace":return y(e);case"backspace-word":return f(e);case"backspace-to-start-of-line":return l(e,r);case"split-block":return h(e);case"transpose-characters":return m(e);case"move-selection-to-start-of-block":return g(e);case"move-selection-to-end-of-block":return d(e);case"secondary-cut":return s.cut(e);case"secondary-paste":return s.paste(e);default:return e}}(w,o,e);x!==o&&t.update(x)}}else _(e,o,t.update);else if(r===a.SPACE&&S&&b(e)){var k=n.replaceText(o.getCurrentContent(),o.getSelection()," ");t.update(i.push(o,k,"insert-characters"))}}},6089:(t,e,r)=>{"use strict";var n=r(10329),i=r(4516),o=r(44891),a=r(42307),s=r(45712),u=r(14289),c=r(41947),l=r(42128),f=r(21738),p=r(42177),h=r(44300);function d(t,e,r){var n=a.replaceWithFragment(t.getCurrentContent(),t.getSelection(),e);return u.push(t,n.set("entityMap",r),"insert-fragment")}t.exports=function(t,e){e.preventDefault();var r=new o(e.clipboardData);if(!r.isRichText()){var g=r.getFiles(),y=r.getText();if(g.length>0){if(t.props.handlePastedFiles&&p(t.props.handlePastedFiles(g)))return;return void f(g,(function(e){if(e=e||y){var r=t._latestEditorState,o=h(e),f=i.create({style:r.getCurrentInlineStyle(),entity:l(r.getCurrentContent(),r.getSelection())}),p=c.getCurrentBlockType(r),d=s.processText(o,f,p),g=n.createFromArray(d),v=a.replaceWithFragment(r.getCurrentContent(),r.getSelection(),g);t.update(u.push(r,v,"insert-fragment"))}}))}}var v=[],m=r.getText(),_=r.getHTML(),b=t._latestEditorState;if(t.props.formatPastedText){var S=t.props.formatPastedText(m,_);m=S.text,_=S.html}if(!t.props.handlePastedText||!p(t.props.handlePastedText(m,_,b))){if(m&&(v=h(m)),!t.props.stripPastedStyles){var w,x=t.getClipboard();if(!t.props.formatPastedText&&r.isRichText()&&x){if(-1!==(null===(w=_)||void 0===w?void 0:w.indexOf(t.getEditorKey()))||1===v.length&&1===x.size&&x.first().getText()===m)return void t.update(d(t._latestEditorState,x))}else if(x&&r.types.includes("com.apple.webarchive")&&!r.types.includes("text/html")&&function(t,e){return t.length===e.size&&e.valueSeq().every((function(e,r){return e.getText()===t[r]}))}(v,x))return void t.update(d(t._latestEditorState,x));if(_){var k=s.processHTML(_,t.props.blockRenderMap);if(k){var C=k.contentBlocks,E=k.entityMap;if(C){var O=n.createFromArray(C);return void t.update(d(t._latestEditorState,O,E))}}}t.setClipboard(null)}if(v.length){var D=i.create({style:b.getCurrentInlineStyle(),entity:l(b.getCurrentContent(),b.getSelection())}),K=c.getCurrentBlockType(b),T=s.processText(v,D,K),M=n.createFromArray(T);t.update(d(t._latestEditorState,M))}}}},14507:(t,e,r)=>{"use strict";var n=r(97432),i=r(14289),o=r(84907),a=r(1244);t.exports=function(t){if(t._blockSelectEvents||t._latestEditorState!==t.props.editorState){if(t._blockSelectEvents){var e=t.props.editorState.getSelection();n.logBlockedSelectionEvent({anonymizedDom:"N/A",extraParams:JSON.stringify({stacktrace:(new Error).stack}),selectionState:JSON.stringify(e.toJS())})}}else{var r=t.props.editorState,s=a(r,o(t)),u=s.selectionState;u!==r.getSelection()&&(r=s.needsRecovery?i.forceSelection(r,u):i.acceptSelection(r,u),t.update(r))}}},56265:(t,e,r)=>{"use strict";var n=r(86155),i=r(38935).strlen;t.exports=function(t,e){var r=[];return t.findEntityRanges((function(t){return!!t.getEntity()}),(function(o,a){var s=t.getText(),u=t.getEntityAt(o);r.push({offset:i(s.slice(0,o)),length:i(s.slice(o,a)),key:Number(e[n.stringify(u)])})})),r}},31487:(t,e,r)=>{"use strict";var n=r(38935),i=r(29407),o=function(t,e){return t===e},a=function(t){return!!t},s=[];t.exports=function(t){var e=t.getCharacterList().map((function(t){return t.getStyle()})).toList(),r=e.flatten().toSet().map((function(r){return function(t,e,r){var s=[],u=e.map((function(t){return t.has(r)})).toList();return i(u,o,a,(function(e,i){var o=t.getText();s.push({offset:n.strlen(o.slice(0,e)),length:n.strlen(o.slice(e,i)),style:r})})),s}(t,e,r)}));return Array.prototype.concat.apply(s,r.toJS())}},88182:(t,e,r)=>{"use strict";var n=r(38935),i=r(75795),o=r(6092),a=r(73759);function s(t,e){for(var r=1/0,n=1/0,i=-1/0,o=-1/0,a=0;a=0;d--)if(!(null!=h&&d>0&&n.isSurrogatePair(h,d-1))){if(t.setStart(f,d),!s(o(t),r))break;c=f,l=d}if(-1===d||0===f.childNodes.length)break;p=u(f=f.childNodes[d])}return t.setStart(c,l),t}},69270:(t,e,r)=>{"use strict";var n=r(75795),i=r(93578);t.exports=function(t){for(var e=t;e&&e!==n(t).documentElement;){var r=i(e);if(null!=r)return r;e=e.parentNode}return null}},29407:t=>{"use strict";t.exports=function(t,e,r,n){if(t.size){var i=0;t.reduce((function(t,o,a){return e(t,o)||(r(t)&&n(i,a),i=a),o})),r(t.last())&&n(i,t.count())}}},25027:t=>{"use strict";var e={},r=Math.pow(2,24);t.exports=function(){for(var t;void 0===t||e.hasOwnProperty(t)||!isNaN(+t);)t=Math.floor(Math.random()*r).toString(32);return e[t]=!0,t}},81446:(t,e,r)=>{"use strict";var n=r(5195),i=r(64994),o=r(73759);function a(t,e,r,a,s,u,c){var l=r.getStartOffset(),f=r.getEndOffset(),p=t.__get(s).getMutability(),h=c?l:f;if("MUTABLE"===p)return r;var d=i(e,s).filter((function(t){return h<=t.end&&h>=t.start}));1!=d.length&&o(!1);var g=d[0];if("IMMUTABLE"===p)return r.merge({anchorOffset:g.start,focusOffset:g.end,isBackward:!1});u||(c?f=g.end:l=g.start);var y=n.getRemovalRange(l,f,e.getText().slice(g.start,g.end),g.start,a);return r.merge({anchorOffset:y.start,focusOffset:y.end,isBackward:!1})}t.exports=function(t,e,r,n,i){var o=n.getStartOffset(),s=n.getEndOffset(),u=e.getEntityAt(o),c=r.getEntityAt(s-1);if(!u&&!c)return n;var l=n;if(u&&u===c)l=a(t,e,l,i,u,!0,!0);else if(u&&c){var f=a(t,e,l,i,u,!1,!0),p=a(t,r,l,i,c,!1,!1);l=l.merge({anchorOffset:f.getAnchorOffset(),focusOffset:p.getFocusOffset(),isBackward:!1})}else if(u){var h=a(t,e,l,i,u,!1,!0);l=l.merge({anchorOffset:h.getStartOffset(),isBackward:!1})}else if(c){var d=a(t,r,l,i,c,!1,!1);l=l.merge({focusOffset:d.getEndOffset(),isBackward:!1})}return l}},84907:(t,e,r)=>{"use strict";var n=r(73759),i=r(20717);t.exports=function(t){var e=t.editorContainer;return e||n(!1),i(e.firstChild)||n(!1),e.firstChild}},88687:(t,e,r)=>{"use strict";var n=r(98555),i=r(14017);t.exports=function(t,e){var r=e.getStartKey(),o=e.getStartOffset(),a=e.getEndKey(),s=e.getEndOffset(),u=i(t,e).getBlockMap(),c=u.keySeq(),l=c.indexOf(r),f=c.indexOf(a)+1;return n(u.slice(l,f).map((function(t,e){var n=t.getText(),i=t.getCharacterList();return r===a?t.merge({text:n.slice(o,s),characterList:i.slice(o,s)}):e===r?t.merge({text:n.slice(o),characterList:i.slice(o)}):e===a?t.merge({text:n.slice(0,s),characterList:i.slice(0,s)}):t})))}},75795:t=>{"use strict";t.exports=function(t){return t&&t.ownerDocument?t.ownerDocument:document}},41714:(t,e,r)=>{"use strict";var n=r(47387),i=r(25399),o=r(4856),a=o.isPlatform("Mac OS X"),s=a&&o.isBrowser("Firefox < 29"),u=n.hasCommandModifier,c=n.isCtrlKeyCommand;function l(t){return a&&t.altKey||c(t)}t.exports=function(t){switch(t.keyCode){case 66:return u(t)?"bold":null;case 68:return c(t)?"delete":null;case 72:return c(t)?"backspace":null;case 73:return u(t)?"italic":null;case 74:return u(t)?"code":null;case 75:return a&&c(t)?"secondary-cut":null;case 77:case 79:return c(t)?"split-block":null;case 84:return a&&c(t)?"transpose-characters":null;case 85:return u(t)?"underline":null;case 87:return a&&c(t)?"backspace-word":null;case 89:return c(t)?a?"secondary-paste":"redo":null;case 90:return function(t){return u(t)?t.shiftKey?"redo":"undo":null}(t)||null;case i.RETURN:return"split-block";case i.DELETE:return function(t){return!a&&t.shiftKey?null:l(t)?"delete-word":"delete"}(t);case i.BACKSPACE:return function(t){return u(t)&&a?"backspace-to-start-of-line":l(t)?"backspace-word":"backspace"}(t);case i.LEFT:return s&&u(t)?"move-selection-to-start-of-block":null;case i.RIGHT:return s&&u(t)?"move-selection-to-end-of-block":null;default:return null}}},1244:(t,e,r)=>{"use strict";var n=r(8101);t.exports=function(t,e){var r=e.ownerDocument.defaultView.getSelection(),i=r.anchorNode,o=r.anchorOffset,a=r.focusNode,s=r.focusOffset;return 0===r.rangeCount||null==i||null==a?{selectionState:t.getSelection().set("hasFocus",!1),needsRecovery:!1}:n(t,e,i,o,a,s)}},8101:(t,e,r)=>{"use strict";var n=r(69270),i=r(93578),o=r(94486),a=r(73759),s=r(84368),u=r(22045);function c(t,e,r){var o=e,c=n(o);if(null!=c||t&&(t===o||t.firstChild===o)||a(!1),t===o&&(o=o.firstChild,s(o)||a(!1),"true"!==o.getAttribute("data-contents")&&a(!1),r>0&&(r=o.childNodes.length)),0===r){var f=null;if(null!=c)f=c;else{var p=function(t){for(;t.firstChild&&(s(t.firstChild)&&"true"===t.firstChild.getAttribute("data-blocks")||i(t.firstChild));)t=t.firstChild;return t}(o);f=u(i(p))}return{key:f,offset:0}}var h=o.childNodes[r-1],d=null,g=null;if(i(h)){var y=function(t){for(;t.lastChild&&(s(t.lastChild)&&"true"===t.lastChild.getAttribute("data-blocks")||i(t.lastChild));)t=t.lastChild;return t}(h);d=u(i(y)),g=l(y)}else d=u(c),g=l(h);return{key:d,offset:g}}function l(t){var e=t.textContent;return"\n"===e?0:e.length}t.exports=function(t,e,r,i,a,s){var l=r.nodeType===Node.TEXT_NODE,f=a.nodeType===Node.TEXT_NODE;if(l&&f)return{selectionState:o(t,u(n(r)),i,u(n(a)),s),needsRecovery:!1};var p=null,h=null,d=!0;return l?(p={key:u(n(r)),offset:i},h=c(e,a,s)):f?(h={key:u(n(a)),offset:s},p=c(e,r,i)):(p=c(e,r,i),h=c(e,a,s),r===a&&i===s&&(d=!!r.firstChild&&"BR"!==r.firstChild.nodeName)),{selectionState:o(t,p.key,p.offset,h.key,h.offset),needsRecovery:d}}},42128:(t,e,r)=>{"use strict";var n=r(99407).notEmptyKey;function i(t,e){return n(e)&&"MUTABLE"===t.__get(e).getMutability()?e:null}t.exports=function(t,e){var r;if(e.isCollapsed()){var n=e.getAnchorKey(),o=e.getAnchorOffset();return o>0?(r=t.getBlockForKey(n).getEntityAt(o-1))!==t.getBlockForKey(n).getEntityAt(o)?null:i(t.getEntityMap(),r):null}var a=e.getStartKey(),s=e.getStartOffset(),u=t.getBlockForKey(a);return r=s===u.getLength()?null:u.getEntityAt(s),i(t.getEntityMap(),r)}},94882:(t,e,r)=>{"use strict";var n=r(88687);t.exports=function(t){var e=t.getSelection();return e.isCollapsed()?null:n(t.getCurrentContent(),e)}},39506:(t,e,r)=>{"use strict";var n=r(67953);t.exports=function(t,e){if(!(t instanceof n))return null;var r=t.getNextSiblingKey();if(r)return r;var i=t.getParentKey();if(!i)return null;for(var o=e.get(i);o&&!o.getNextSiblingKey();){var a=o.getParentKey();o=a?e.get(a):null}return o?o.getNextSiblingKey():null}},96495:t=>{"use strict";t.exports=function(t){return Object.keys(t).map((function(e){return t[e]}))}},98056:(t,e,r)=>{"use strict";var n=r(6092);t.exports=function(t){var e=n(t),r=0,i=0,o=0,a=0;if(e.length){if(e.length>1&&0===e[0].width){var s=e[1];r=s.top,i=s.right,o=s.bottom,a=s.left}else{var u=e[0];r=u.top,i=u.right,o=u.bottom,a=u.left}for(var c=1;c{"use strict";var n=r(4856),i=r(73759),o=n.isBrowser("Chrome")?function(t){for(var e=t.cloneRange(),r=[],n=t.endContainer;null!=n;n=n.parentNode){var o=n===t.commonAncestorContainer;o?e.setStart(t.startContainer,t.startOffset):e.setStart(e.endContainer,0);var a,s=Array.from(e.getClientRects());if(r.push(s),o)return r.reverse(),(a=[]).concat.apply(a,r);e.setEndBefore(n)}i(!1)}:function(t){return Array.from(t.getClientRects())};t.exports=o},64994:(t,e,r)=>{"use strict";var n=r(73759);t.exports=function(t,e){var r=[];return t.findEntityRanges((function(t){return t.getEntity()===e}),(function(t,e){r.push({start:t,end:e})})),r.length||n(!1),r}},69769:(t,e,r)=>{"use strict";var n=r(4856),i=r(73759),o=n.isBrowser("IE <= 9");t.exports=function(t){var e,r=null;return!o&&document.implementation&&document.implementation.createHTMLDocument&&((e=document.implementation.createHTMLDocument("foo")).documentElement||i(!1),e.documentElement.innerHTML=t,r=e.getElementsByTagName("body")[0]),r}},93578:(t,e,r)=>{"use strict";var n=r(84368);t.exports=function t(e){if(n(e)){var r=e,i=r.getAttribute("data-offset-key");if(i)return i;for(var o=0;o{"use strict";var n=r(73759),i=/\.textClipping$/,o={"text/plain":!0,"text/html":!0,"text/rtf":!0};t.exports=function(t,e){var a=0,s=[];t.forEach((function(u){!function(t,e){if(!r.g.FileReader||t.type&&!(t.type in o))e("");else{if(""===t.type){var a="";return i.test(t.name)&&(a=t.name.replace(i,"")),void e(a)}var s=new FileReader;s.onload=function(){var t=s.result;"string"!=typeof t&&n(!1),e(t)},s.onerror=function(){e("")},s.readAsText(t)}}(u,(function(r){a++,r&&s.push(r.slice(0,5e3)),a==t.length&&e(s.join("\r"))}))}))}},94486:(t,e,r)=>{"use strict";var n=r(22146),i=r(22045);t.exports=function(t,e,r,o,a){var s=i(t.getSelection());if(!e||!o)return s;var u=n.decode(e),c=u.blockKey,l=t.getBlockTree(c),f=l&&l.getIn([u.decoratorKey,"leaves",u.leafKey]),p=n.decode(o),h=p.blockKey,d=t.getBlockTree(h),g=d&&d.getIn([p.decoratorKey,"leaves",p.leafKey]);if(!f||!g)return s;var y=f.get("start"),v=g.get("start"),m=f?y+r:null,_=g?v+a:null;if(s.getAnchorKey()===c&&s.getAnchorOffset()===m&&s.getFocusKey()===h&&s.getFocusOffset()===_)return s;var b=!1;if(c===h){var S=f.get("end"),w=g.get("end");b=v===y&&w===S?a{"use strict";var n=r(98056);t.exports=function(t){var e=t.getSelection();if(!e.rangeCount)return null;var r=e.getRangeAt(0),i=n(r),o=i.top,a=i.right,s=i.bottom,u=i.left;return 0===o&&0===a&&0===s&&0===u?null:i}},48083:t=>{"use strict";t.exports=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView?t.ownerDocument.defaultView:window}},68642:t=>{"use strict";t.exports=function(t){return!("undefined"==typeof window||!window.__DRAFT_GKX||!window.__DRAFT_GKX[t])}},54542:(t,e,r)=>{"use strict";var n=r(10329),i=r(67953),o=r(43393),a=r(40779),s=r(73759),u=r(98555),c=o.List;t.exports=function(t,e,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"REPLACE_WITH_NEW_DATA";e.isCollapsed()||s(!1);var l=t.getBlockMap(),f=u(r),p=e.getStartKey(),h=e.getStartOffset(),d=l.get(p);return d instanceof i&&(d.getChildKeys().isEmpty()||s(!1)),1===f.size?function(t,e,r,n,i,o){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"REPLACE_WITH_NEW_DATA",u=r.get(i),c=u.getText(),l=u.getCharacterList(),f=i,p=o+n.getText().length,h=null;switch(s){case"MERGE_OLD_DATA_TO_NEW_DATA":h=n.getData().merge(u.getData());break;case"REPLACE_WITH_NEW_DATA":h=n.getData()}var d=u.getType();c&&"unstyled"===d&&(d=n.getType());var g=u.merge({text:c.slice(0,o)+n.getText()+c.slice(o),characterList:a(l,n.getCharacterList(),o),type:d,data:h});return t.merge({blockMap:r.set(i,g),selectionBefore:e,selectionAfter:e.merge({anchorKey:f,anchorOffset:p,focusKey:f,focusOffset:p,isBackward:!1})})}(t,e,l,f.first(),p,h,o):function(t,e,r,o,a,s){var u=r.first()instanceof i,l=[],f=o.size,p=r.get(a),h=o.first(),d=o.last(),g=d.getLength(),y=d.getKey(),v=u&&(!p.getChildKeys().isEmpty()||!h.getChildKeys().isEmpty());r.forEach((function(t,e){e===a?(v?l.push(t):l.push(function(t,e,r){var n=t.getText(),i=t.getCharacterList(),o=n.slice(0,e),a=i.slice(0,e),s=r.first();return t.merge({text:o+s.getText(),characterList:a.concat(s.getCharacterList()),type:o?t.getType():s.getType(),data:s.getData()})}(t,s,o)),o.slice(v?0:1,f-1).forEach((function(t){return l.push(t)})),l.push(function(t,e,r){var n=t.getText(),i=t.getCharacterList(),o=n.length,a=n.slice(e,o),s=i.slice(e,o),u=r.last();return u.merge({text:u.getText()+a,characterList:u.getCharacterList().concat(s),data:u.getData()})}(t,s,o))):l.push(t)}));var m=n.createFromArray(l);return u&&(m=function(t,e,r,n){return t.withMutations((function(e){var i=r.getKey(),o=n.getKey(),a=r.getNextSiblingKey(),s=r.getParentKey(),u=function(t,e){var r=t.getKey(),n=t,i=[];for(e.get(r)&&i.push(r);n&&n.getNextSiblingKey();){var o=n.getNextSiblingKey();if(!o)break;i.push(o),n=e.get(o)}return i}(n,t),l=u[u.length-1];if(e.get(o)?(e.setIn([i,"nextSibling"],o),e.setIn([o,"prevSibling"],i)):(e.setIn([i,"nextSibling"],n.getNextSiblingKey()),e.setIn([n.getNextSiblingKey(),"prevSibling"],i)),e.setIn([l,"nextSibling"],a),a&&e.setIn([a,"prevSibling"],l),u.forEach((function(t){return e.setIn([t,"parent"],s)})),s){var f=t.get(s).getChildKeys(),p=f.indexOf(i)+1,h=f.toArray();h.splice.apply(h,[p,0].concat(u)),e.setIn([s,"children"],c(h))}}))}(m,0,p,h)),t.merge({blockMap:m,selectionBefore:e,selectionAfter:e.merge({anchorKey:y,anchorOffset:g,focusKey:y,focusOffset:g,isBackward:!1})})}(t,e,l,f,p,h)}},40779:t=>{"use strict";t.exports=function(t,e,r){var n=t;if(r===n.count())e.forEach((function(t){n=n.push(t)}));else if(0===r)e.reverse().forEach((function(t){n=n.unshift(t)}));else{var i=n.slice(0,r),o=n.slice(r);n=i.concat(e,o).toList()}return n}},18467:(t,e,r)=>{"use strict";var n=r(43393),i=r(40779),o=r(73759),a=n.Repeat;t.exports=function(t,e,r,n){e.isCollapsed()||o(!1);var s=null;if(null!=r&&(s=r.length),null==s||0===s)return t;var u=t.getBlockMap(),c=e.getStartKey(),l=e.getStartOffset(),f=u.get(c),p=f.getText(),h=f.merge({text:p.slice(0,l)+r+p.slice(l,f.getLength()),characterList:i(f.getCharacterList(),a(n,s).toList(),l)}),d=l+s;return t.merge({blockMap:u.set(c,h),selectionAfter:e.merge({anchorOffset:d,focusOffset:d})})}},84368:t=>{"use strict";t.exports=function(t){return!(!t||!t.ownerDocument)&&t.nodeType===Node.ELEMENT_NODE}},42177:t=>{"use strict";t.exports=function(t){return"handled"===t||!0===t}},78241:(t,e,r)=>{"use strict";var n=r(84368);t.exports=function(t){return!(!t||!t.ownerDocument)&&n(t)&&"A"===t.nodeName}},16581:(t,e,r)=>{"use strict";var n=r(84368);t.exports=function(t){return!(!t||!t.ownerDocument)&&n(t)&&"BR"===t.nodeName}},20717:t=>{"use strict";t.exports=function(t){return!(!t||!t.ownerDocument)&&(t.ownerDocument.defaultView?t instanceof t.ownerDocument.defaultView.HTMLElement:t instanceof HTMLElement)}},35039:(t,e,r)=>{"use strict";var n=r(84368);t.exports=function(t){return!(!t||!t.ownerDocument)&&n(t)&&"IMG"===t.nodeName}},80809:t=>{"use strict";t.exports=function(t){if(!t||!("ownerDocument"in t))return!1;if("ownerDocument"in t){var e=t;if(!e.ownerDocument.defaultView)return e instanceof Node;if(e instanceof e.ownerDocument.defaultView.Node)return!0}return!1}},40258:t=>{"use strict";t.exports=function(t){var e=t.getSelection(),r=e.getAnchorKey(),n=t.getBlockTree(r),i=e.getStartOffset(),o=!1;return n.some((function(t){return i===t.get("start")?(o=!0,!0):i{"use strict";var n=r(25399);t.exports=function(t){return t.which===n.RETURN&&(t.getModifierState("Shift")||t.getModifierState("Alt")||t.getModifierState("Control"))}},49779:(t,e,r)=>{"use strict";var n=r(14289),i=r(88182),o=r(8101),a=r(53268),s=r(14730);t.exports=function(t,e){var r=s(t,(function(t){var r=t.getSelection();if(r.isCollapsed()&&0===r.getAnchorOffset())return a(t,1);var n=e.currentTarget.ownerDocument.defaultView.getSelection().getRangeAt(0);return n=i(n),o(t,null,n.endContainer,n.endOffset,n.startContainer,n.startOffset).selectionState}),"backward");return r===t.getCurrentContent()?t:n.push(t,r,"remove-range")}},51050:(t,e,r)=>{"use strict";var n=r(73932),i=r(14289),o=r(53268),a=r(14730);t.exports=function(t){var e=a(t,(function(t){var e=t.getSelection(),r=e.getStartOffset();if(0===r)return o(t,1);var i=e.getStartKey(),a=t.getCurrentContent().getBlockForKey(i).getText().slice(0,r),s=n.getBackward(a);return o(t,s.length||1)}),"backward");return e===t.getCurrentContent()?t:i.push(t,e,"remove-range")}},13767:(t,e,r)=>{"use strict";var n=r(73932),i=r(14289),o=r(19417),a=r(14730);t.exports=function(t){var e=a(t,(function(t){var e=t.getSelection(),r=e.getStartOffset(),i=e.getStartKey(),a=t.getCurrentContent().getBlockForKey(i).getText().slice(r),s=n.getForward(a);return o(t,s.length||1)}),"forward");return e===t.getCurrentContent()?t:i.push(t,e,"remove-range")}},77978:(t,e,r)=>{"use strict";var n=r(42307),i=r(14289);t.exports=function(t){var e=n.splitBlock(t.getCurrentContent(),t.getSelection());return i.push(t,e,"split-block")}},67217:(t,e,r)=>{"use strict";var n=r(14289);t.exports=function(t){var e=t.getSelection(),r=e.getEndKey(),i=t.getCurrentContent().getBlockForKey(r).getLength();return n.set(t,{selection:e.merge({anchorKey:r,anchorOffset:i,focusKey:r,focusOffset:i,isBackward:!1}),forceSelection:!0})}},8425:(t,e,r)=>{"use strict";var n=r(14289);t.exports=function(t){var e=t.getSelection(),r=e.getStartKey();return n.set(t,{selection:e.merge({anchorKey:r,anchorOffset:0,focusKey:r,focusOffset:0,isBackward:!1}),forceSelection:!0})}},62800:(t,e,r)=>{"use strict";var n=r(14289),i=r(38935),o=r(53268),a=r(14730);t.exports=function(t){var e=a(t,(function(t){var e=t.getSelection(),r=t.getCurrentContent(),n=e.getAnchorKey(),a=e.getAnchorOffset(),s=r.getBlockForKey(n).getText()[a-1];return o(t,s?i.getUTF16Length(s,0):1)}),"backward");if(e===t.getCurrentContent())return t;var r=t.getSelection();return n.push(t,e.set("selectionBefore",r),r.isCollapsed()?"backspace-character":"remove-range")}},13998:(t,e,r)=>{"use strict";var n=r(14289),i=r(38935),o=r(19417),a=r(14730);t.exports=function(t){var e=a(t,(function(t){var e=t.getSelection(),r=t.getCurrentContent(),n=e.getAnchorKey(),a=e.getAnchorOffset(),s=r.getBlockForKey(n).getText()[a];return o(t,s?i.getUTF16Length(s,0):1)}),"forward");if(e===t.getCurrentContent())return t;var r=t.getSelection();return n.push(t,e.set("selectionBefore",r),r.isCollapsed()?"delete-character":"remove-range")}},53318:(t,e,r)=>{"use strict";var n=r(42307),i=r(14289),o=r(88687);t.exports=function(t){var e=t.getSelection();if(!e.isCollapsed())return t;var r=e.getAnchorOffset();if(0===r)return t;var a,s,u=e.getAnchorKey(),c=t.getCurrentContent(),l=c.getBlockForKey(u).getLength();if(l<=1)return t;r===l?(a=e.set("anchorOffset",r-1),s=e):s=(a=e.set("focusOffset",r+1)).set("anchorOffset",r+1);var f=o(c,a),p=n.removeRange(c,a,"backward"),h=p.getSelectionAfter(),d=h.getAnchorOffset()-1,g=h.merge({anchorOffset:d,focusOffset:d}),y=n.replaceWithFragment(p,g,f),v=i.push(t,y,"insert-fragment");return i.acceptSelection(v,s)}},87051:(t,e,r)=>{"use strict";var n=r(14289);t.exports=function(t,e,r){var i=n.undo(e);if("spellcheck-change"!==e.getLastChangeType())t.preventDefault(),e.getNativelyRenderedContent()?(r(n.set(e,{nativelyRenderedContent:null})),setTimeout((function(){r(i)}),0)):r(i);else{var o=i.getCurrentContent();r(n.set(i,{nativelyRenderedContent:o}))}}},57429:(t,e,r)=>{"use strict";var n=r(43393).Map;t.exports=function(t,e,r){var i=e.getStartKey(),o=e.getEndKey(),a=t.getBlockMap(),s=a.toSeq().skipUntil((function(t,e){return e===i})).takeUntil((function(t,e){return e===o})).concat(n([[o,a.get(o)]])).map(r);return t.merge({blockMap:a.merge(s),selectionBefore:e,selectionAfter:e})}},61173:(t,e,r)=>{"use strict";var n=r(67953),i=r(39506),o=r(43393),a=r(73759),s=o.OrderedMap,u=o.List,c=function(t,e,r){if(t){var n=e.get(t);n&&e.set(t,r(n))}},l=function(t,e,r,n,i){if(!i)return t;var o="after"===n,a=e.getKey(),s=r.getKey(),l=e.getParentKey(),f=e.getNextSiblingKey(),p=e.getPrevSiblingKey(),h=r.getParentKey(),d=o?r.getNextSiblingKey():s,g=o?s:r.getPrevSiblingKey();return t.withMutations((function(t){c(l,t,(function(t){var e=t.getChildKeys();return t.merge({children:e.delete(e.indexOf(a))})})),c(p,t,(function(t){return t.merge({nextSibling:f})})),c(f,t,(function(t){return t.merge({prevSibling:p})})),c(d,t,(function(t){return t.merge({prevSibling:a})})),c(g,t,(function(t){return t.merge({nextSibling:a})})),c(h,t,(function(t){var e=t.getChildKeys(),r=e.indexOf(s),n=o?r+1:0!==r?r-1:0,i=e.toArray();return i.splice(n,0,a),t.merge({children:u(i)})})),c(a,t,(function(t){return t.merge({nextSibling:d,prevSibling:g,parent:h})}))}))};t.exports=function(t,e,r,o){"replace"===o&&a(!1);var u=r.getKey(),c=e.getKey();c===u&&a(!1);var f=t.getBlockMap(),p=e instanceof n,h=[e],d=f.delete(c);p&&(h=[],d=f.withMutations((function(t){var r=e.getNextSiblingKey(),n=i(e,t);t.toSeq().skipUntil((function(t){return t.getKey()===c})).takeWhile((function(t){var e=t.getKey(),i=e===c,o=r&&e!==r,a=!r&&t.getParentKey()&&(!n||e!==n);return!!(i||o||a)})).forEach((function(e){h.push(e),t.delete(e.getKey())}))})));var g=d.toSeq().takeUntil((function(t){return t===r})),y=d.toSeq().skipUntil((function(t){return t===r})).skip(1),v=h.map((function(t){return[t.getKey(),t]})),m=s();if("before"===o){var _=t.getBlockBefore(u);_&&_.getKey()===e.getKey()&&a(!1),m=g.concat([].concat(v,[[u,r]]),y).toOrderedMap()}else if("after"===o){var b=t.getBlockAfter(u);b&&b.getKey()===c&&a(!1),m=g.concat([[u,r]].concat(v),y).toOrderedMap()}return t.merge({blockMap:l(m,e,r,o,p),selectionBefore:t.getSelectionAfter(),selectionAfter:t.getSelectionAfter().merge({anchorKey:c,focusKey:c})})}},53268:(t,e,r)=>{"use strict";r(63620),t.exports=function(t,e){var r=t.getSelection(),n=t.getCurrentContent(),i=r.getStartKey(),o=r.getStartOffset(),a=i,s=0;if(e>o){var u=n.getKeyBefore(i);null==u?a=i:(a=u,s=n.getBlockForKey(u).getText().length)}else s=o-e;return r.merge({focusKey:a,focusOffset:s,isBackward:!0})}},19417:(t,e,r)=>{"use strict";r(63620),t.exports=function(t,e){var r,n=t.getSelection(),i=n.getStartKey(),o=n.getStartOffset(),a=t.getCurrentContent(),s=i;return e>a.getBlockForKey(i).getText().length-o?(s=a.getKeyAfter(i),r=0):r=o+e,n.merge({focusKey:s,focusOffset:r})}},98555:(t,e,r)=>{"use strict";var n=r(67953),i=r(25027),o=r(43393).OrderedMap;t.exports=function(t){return t.first()instanceof n?function(t){var e,r={};return o(t.withMutations((function(t){t.forEach((function(n,o){var a=n.getKey(),s=n.getNextSiblingKey(),u=n.getPrevSiblingKey(),c=n.getChildKeys(),l=n.getParentKey(),f=i();if(r[a]=f,s&&(t.get(s)?t.setIn([s,"prevSibling"],f):t.setIn([a,"nextSibling"],null)),u&&(t.get(u)?t.setIn([u,"nextSibling"],f):t.setIn([a,"prevSibling"],null)),l&&t.get(l)){var p=t.get(l).getChildKeys();t.setIn([l,"children"],p.set(p.indexOf(n.getKey()),f))}else t.setIn([a,"parent"],null),e&&(t.setIn([e.getKey(),"nextSibling"],f),t.setIn([a,"prevSibling"],r[e.getKey()])),e=t.get(a);c.forEach((function(e){t.get(e)?t.setIn([e,"parent"],f):t.setIn([a,"children"],n.getChildKeys().filter((function(t){return t!==e})))}))}))})).toArray().map((function(t){return[r[t.getKey()],t.set("key",r[t.getKey()])]})))}(t):function(t){return o(t.toArray().map((function(t){var e=i();return[e,t.set("key",e)]})))}(t)}},14017:(t,e,r)=>{"use strict";var n=r(4516),i=r(29407),o=r(73759);function a(t,e,r){var a=e.getCharacterList(),s=r>0?a.get(r-1):void 0,u=r=r&&(n={start:t,end:e})})),"object"!=typeof n&&o(!1),n}(a,l,r),h=p.start,d=p.end;h{"use strict";var n=r(67953),i=r(39506),o=r(43393),a=(o.List,o.Map),s=function(t,e,r){if(t){var n=e.get(t);n&&e.set(t,r(n))}},u=function(t,e){var r=[];if(!t)return r;for(var n=e.get(t);n&&n.getParentKey();){var i=n.getParentKey();i&&r.push(i),n=i?e.get(i):null}return r},c=function(t,e,r){if(!t)return null;for(var n=r.get(t.getKey()).getNextSiblingKey();n&&!e.get(n);)n=r.get(n).getNextSiblingKey()||null;return n},l=function(t,e,r){if(!t)return null;for(var n=r.get(t.getKey()).getPrevSiblingKey();n&&!e.get(n);)n=r.get(n).getPrevSiblingKey()||null;return n};t.exports=function(t,e){if(e.isCollapsed())return t;var r,o=t.getBlockMap(),f=e.getStartKey(),p=e.getStartOffset(),h=e.getEndKey(),d=e.getEndOffset(),g=o.get(f),y=o.get(h),v=g instanceof n,m=[];if(v){var _=y.getChildKeys(),b=u(h,o);y.getNextSiblingKey()&&(m=m.concat(b)),_.isEmpty()||(m=m.concat(b.concat([h]))),m=m.concat(u(i(y,o),o))}r=g===y?function(t,e,r){if(0===e)for(;ee;)t=t.pop(),r--;else{var n=t.slice(0,e),i=t.slice(r);t=n.concat(i).toList()}return t}(g.getCharacterList(),p,d):g.getCharacterList().slice(0,p).concat(y.getCharacterList().slice(d));var S=g.merge({text:g.getText().slice(0,p)+y.getText().slice(d),characterList:r}),w=v&&0===p&&0===d&&y.getParentKey()===f&&null==y.getPrevSiblingKey()?a([[f,null]]):o.toSeq().skipUntil((function(t,e){return e===f})).takeUntil((function(t,e){return e===h})).filter((function(t,e){return-1===m.indexOf(e)})).concat(a([[h,null]])).map((function(t,e){return e===f?S:null})),x=o.merge(w).filter((function(t){return!!t}));return v&&g!==y&&(x=function(t,e,r,n){return t.withMutations((function(o){if(s(e.getKey(),o,(function(t){return t.merge({nextSibling:c(t,o,n),prevSibling:l(t,o,n)})})),s(r.getKey(),o,(function(t){return t.merge({nextSibling:c(t,o,n),prevSibling:l(t,o,n)})})),u(e.getKey(),n).forEach((function(t){return s(t,o,(function(t){return t.merge({children:t.getChildKeys().filter((function(t){return o.get(t)})),nextSibling:c(t,o,n),prevSibling:l(t,o,n)})}))})),s(e.getNextSiblingKey(),o,(function(t){return t.merge({prevSibling:e.getPrevSiblingKey()})})),s(e.getPrevSiblingKey(),o,(function(t){return t.merge({nextSibling:c(t,o,n)})})),s(r.getNextSiblingKey(),o,(function(t){return t.merge({prevSibling:l(t,o,n)})})),s(r.getPrevSiblingKey(),o,(function(t){return t.merge({nextSibling:r.getNextSiblingKey()})})),u(r.getKey(),n).forEach((function(t){s(t,o,(function(t){return t.merge({children:t.getChildKeys().filter((function(t){return o.get(t)})),nextSibling:c(t,o,n),prevSibling:l(t,o,n)})}))})),function(t,e){var r=[];if(!t)return r;for(var n=i(t,e);n&&e.get(n);){var o=e.get(n);r.push(n),n=o.getParentKey()?i(o,e):null}return r}(r,n).forEach((function(t){return s(t,o,(function(t){return t.merge({nextSibling:c(t,o,n),prevSibling:l(t,o,n)})}))})),null==t.get(e.getKey())&&null!=t.get(r.getKey())&&r.getParentKey()===e.getKey()&&null==r.getPrevSiblingKey()){var a=e.getPrevSiblingKey();s(r.getKey(),o,(function(t){return t.merge({prevSibling:a})})),s(a,o,(function(t){return t.merge({nextSibling:r.getKey()})}));var f=a?t.get(a):null,p=f?f.getParentKey():null;if(e.getChildKeys().forEach((function(t){s(t,o,(function(t){return t.merge({parent:p})}))})),null!=p){var h=t.get(p);s(p,o,(function(t){return t.merge({children:h.getChildKeys().concat(e.getChildKeys())})}))}s(e.getChildKeys().find((function(e){return null===t.get(e).getNextSiblingKey()})),o,(function(t){return t.merge({nextSibling:e.getNextSiblingKey()})}))}}))}(x,g,y,o)),t.merge({blockMap:x,selectionBefore:e,selectionAfter:e.merge({anchorKey:f,anchorOffset:p,focusKey:f,focusOffset:p,isBackward:!1})})}},14730:(t,e,r)=>{"use strict";var n=r(42307),i=r(68642)("draft_tree_data_support");t.exports=function(t,e,r){var o=t.getSelection(),a=t.getCurrentContent(),s=o,u=o.getAnchorKey(),c=o.getFocusKey(),l=a.getBlockForKey(u);if(i&&"forward"===r&&u!==c)return a;if(o.isCollapsed()){if("forward"===r){if(t.isSelectionAtEndOfContent())return a;if(i&&o.getAnchorOffset()===a.getBlockForKey(u).getLength()){var f=a.getBlockForKey(l.nextSibling);if(!f||0===f.getLength())return a}}else if(t.isSelectionAtStartOfContent())return a;if((s=e(t))===o)return a}return n.removeRange(a,s,r)}},55283:t=>{"use strict";var e=new RegExp("\r","g");t.exports=function(t){return t.replace(e,"")}},45412:(t,e,r)=>{"use strict";var n=r(5880),i=r(97432),o=r(4856),a=r(67476),s=r(31003),u=r(75795),c=r(73759),l=r(84368),f=o.isBrowser("IE");function p(t,e){if(!t)return"[empty]";var r=h(t,e);return r.nodeType===Node.TEXT_NODE?r.textContent:(l(r)||c(!1),r.outerHTML)}function h(t,e){var r=void 0!==e?e(t):[];if(t.nodeType===Node.TEXT_NODE){var n=t.textContent.length;return u(t).createTextNode("[text "+n+(r.length?" | "+r.join(", "):"")+"]")}var i=t.cloneNode();1===i.nodeType&&r.length&&i.setAttribute("data-labels",r.join(", "));for(var o=t.childNodes,a=0;ag(e)&&i.logSelectionStateFailure({anonymizedDom:d(e),extraParams:JSON.stringify({offset:r}),selectionState:JSON.stringify(n.toJS())});var u=e===t.focusNode;try{t.rangeCount>0&&t.extend&&t.extend(e,r)}catch(a){throw i.logSelectionStateFailure({anonymizedDom:d(e,(function(e){var r=[];return e===o&&r.push("active element"),e===t.anchorNode&&r.push("selection anchor node"),e===t.focusNode&&r.push("selection focus node"),r})),extraParams:JSON.stringify({activeElementName:o?o.nodeName:null,nodeIsFocus:e===t.focusNode,nodeWasFocus:u,selectionRangeCount:t.rangeCount,selectionAnchorNodeName:t.anchorNode?t.anchorNode.nodeName:null,selectionAnchorOffset:t.anchorOffset,selectionFocusNodeName:t.focusNode?t.focusNode.nodeName:null,selectionFocusOffset:t.focusOffset,message:a?""+a:null,offset:r},null,2),selectionState:JSON.stringify(n.toJS(),null,2)}),a}}else if(e&&t.rangeCount>0){var c=t.getRangeAt(0);c.setEnd(e,r),t.addRange(c.cloneRange())}}function v(t,e,r,o){var a=u(e).createRange();if(r>g(e)&&(i.logSelectionStateFailure({anonymizedDom:d(e),extraParams:JSON.stringify({offset:r}),selectionState:JSON.stringify(o.toJS())}),n.handleExtensionCausedError()),a.setStart(e,r),f)try{t.addRange(a)}catch(t){}else t.addRange(a)}t.exports={setDraftEditorSelection:function(t,e,r,n,i){var o=u(e);if(a(o.documentElement,e)){var s=o.defaultView.getSelection(),c=t.getAnchorKey(),l=t.getAnchorOffset(),f=t.getFocusKey(),p=t.getFocusOffset(),h=t.getIsBackward();if(!s.extend&&h){var d=c,g=l;c=f,l=p,f=d,p=g,h=!1}var m=c===r&&n<=l&&i>=l,_=f===r&&n<=p&&i>=p;if(m&&_)return s.removeAllRanges(),v(s,e,l-n,t),void y(s,e,p-n,t);if(h){if(_&&(s.removeAllRanges(),v(s,e,p-n,t)),m){var b=s.focusNode,S=s.focusOffset;s.removeAllRanges(),v(s,e,l-n,t),y(s,b,S,t)}}else m&&(s.removeAllRanges(),v(s,e,l-n,t)),_&&y(s,e,p-n,t)}},addFocusToSelection:y}},36043:(t,e,r)=>{"use strict";var n=r(67953),i=r(25027),o=r(43393),a=r(73759),s=r(57429),u=o.List,c=o.Map,l=function(t,e,r){if(t){var n=e.get(t);n&&e.set(t,r(n))}};t.exports=function(t,e){e.isCollapsed()||a(!1);var r=e.getAnchorKey(),o=t.getBlockMap(),f=o.get(r),p=f.getText();if(!p){var h=f.getType();if("unordered-list-item"===h||"ordered-list-item"===h)return s(t,e,(function(t){return t.merge({type:"unstyled",depth:0})}))}var d=e.getAnchorOffset(),g=f.getCharacterList(),y=i(),v=f instanceof n,m=f.merge({text:p.slice(0,d),characterList:g.slice(0,d)}),_=m.merge({key:y,text:p.slice(d),characterList:g.slice(d),data:c()}),b=o.toSeq().takeUntil((function(t){return t===f})),S=o.toSeq().skipUntil((function(t){return t===f})).rest(),w=b.concat([[r,m],[y,_]],S).toOrderedMap();return v&&(f.getChildKeys().isEmpty()||a(!1),w=function(t,e,r){return t.withMutations((function(t){var n=e.getKey(),i=r.getKey();l(e.getParentKey(),t,(function(t){var e=t.getChildKeys(),r=e.indexOf(n)+1,o=e.toArray();return o.splice(r,0,i),t.merge({children:u(o)})})),l(e.getNextSiblingKey(),t,(function(t){return t.merge({prevSibling:i})})),l(n,t,(function(t){return t.merge({nextSibling:i})})),l(i,t,(function(t){return t.merge({prevSibling:n})}))}))}(w,m,_)),t.merge({blockMap:w,selectionBefore:e,selectionAfter:e.merge({anchorKey:y,anchorOffset:0,focusKey:y,focusOffset:0,isBackward:!1})})}},44300:t=>{"use strict";var e=/\r\n?|\n/g;t.exports=function(t){return t.split(e)}},76363:t=>{"use strict";t.exports=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(t){var e=16*Math.random()|0;return("x"==t?e:3&e|8).toString(16)}))}},44891:(t,e,r)=>{"use strict";var n=r(51006),i=r(89825),o=r(60139),a=new RegExp("\r\n","g"),s={"text/rtf":1,"text/html":1};function u(t){if("file"==t.kind)return t.getAsFile()}var c=function(){function t(t){this.data=t,this.types=t.types?i(t.types):[]}var e=t.prototype;return e.isRichText=function(){return!(!this.getHTML()||!this.getText())||!this.isImage()&&this.types.some((function(t){return s[t]}))},e.getText=function(){var t;return this.data.getData&&(this.types.length?-1!=this.types.indexOf("text/plain")&&(t=this.data.getData("text/plain")):t=this.data.getData("Text")),t?t.replace(a,"\n"):null},e.getHTML=function(){if(this.data.getData){if(!this.types.length)return this.data.getData("Text");if(-1!=this.types.indexOf("text/html"))return this.data.getData("text/html")}},e.isLink=function(){return this.types.some((function(t){return-1!=t.indexOf("Url")||-1!=t.indexOf("text/uri-list")||t.indexOf("text/x-moz-url")}))},e.getLink=function(){return this.data.getData?-1!=this.types.indexOf("text/x-moz-url")?this.data.getData("text/x-moz-url").split("\n")[0]:-1!=this.types.indexOf("text/uri-list")?this.data.getData("text/uri-list"):this.data.getData("url"):null},e.isImage=function(){var t=this.types.some((function(t){return-1!=t.indexOf("application/x-moz-file")}));if(t)return!0;for(var e=this.getFiles(),r=0;r0},t}();t.exports=c},25399:t=>{"use strict";t.exports={BACKSPACE:8,TAB:9,RETURN:13,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46,COMMA:188,PERIOD:190,A:65,Z:90,ZERO:48,NUMPAD_0:96,NUMPAD_9:105}},51006:t=>{"use strict";var e={isImage:function(t){return"image"===r(t)[0]},isJpeg:function(t){var n=r(t);return e.isImage(t)&&("jpeg"===n[1]||"pjpeg"===n[1])}};function r(t){return t.split("/")}t.exports=e},65994:t=>{"use strict";function e(t,e){return!!e&&(t===e.documentElement||t===e.body)}var r={getTop:function(t){var r=t.ownerDocument;return e(t,r)?r.body.scrollTop||r.documentElement.scrollTop:t.scrollTop},setTop:function(t,r){var n=t.ownerDocument;e(t,n)?n.body.scrollTop=n.documentElement.scrollTop=r:t.scrollTop=r},getLeft:function(t){var r=t.ownerDocument;return e(t,r)?r.body.scrollLeft||r.documentElement.scrollLeft:t.scrollLeft},setLeft:function(t,r){var n=t.ownerDocument;e(t,n)?n.body.scrollLeft=n.documentElement.scrollLeft=r:t.scrollLeft=r}};t.exports=r},19051:(t,e,r)=>{"use strict";function n(t,e){var r=i.get(t,e);return"auto"===r||"scroll"===r}var i={get:r(85466),getScrollParent:function(t){if(!t)return null;for(var e=t.ownerDocument;t&&t!==e.body;){if(n(t,"overflow")||n(t,"overflowY")||n(t,"overflowX"))return t;t=t.parentNode}return e.defaultView||e.parentWindow}};t.exports=i},65724:t=>{"use strict";t.exports={getPunctuation:function(){return"[.,+*?$|#{}()'\\^\\-\\[\\]\\\\\\/!@%\"~=<>_:;・ã€ã€‚〈-】〔-〟:-?ï¼-ï¼ï¼»-`{-・⸮؟٪-٬؛،Øï´¾ï´¿á à¥¤áŠá‹â€-‧‰-âžÂ¡-±´-¸º»¿]"}}},61425:t=>{"use strict";var e=function(){function t(t){var e,r;r=void 0,(e="_uri")in this?Object.defineProperty(this,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):this[e]=r,this._uri=t}return t.prototype.toString=function(){return this._uri},t}();t.exports=e},54191:(t,e,r)=>{"use strict";var n=r(16633),i=r(73759),o="Ö־׀׃׆׈-××-ת׫-ׯװ-ײ׳-×´×µ-׿߀-߉ߊ-ߪߴ-ߵߺ߻-߿ࠀ-ࠕࠚࠤࠨ࠮-࠯࠰-࠾࠿ࡀ-ࡘ࡜-à¡à¡žà¡Ÿ-࢟â€ï¬ï¬Ÿ-ﬨשׁ-זּ﬷טּ-לּ﬽מּ﬿נּ-ï­ï­‚ï­ƒ-ï­„ï­…ï­†-ï­",a="ØˆØ‹ØØ›ØœØØž-؟ؠ-ؿـÙ-ي٭ٮ-ٯٱ-Û“Û”Û•Û¥-Û¦Û®-Û¯Ûº-Û¼Û½-Û¾Û¿Ü€-ÜÜŽÜÜÜ’-ܯ݋-ÝŒÝ-Þ¥Þ±Þ²-޿ࢠ-ࢲࢳ-ࣣï­-ﮱ﮲-ï¯ï¯‚-﯒ﯓ-ﴽ﵀-ïµïµ-ï¶ï¶-ï¶‘ï¶’-ﷇ﷈-ï·ï·°-ﷻ﷼﷾-ï·¿ï¹°-ﹴ﹵ﹶ-ﻼ﻽-﻾",s=new RegExp("[A-Za-zªµºÀ-ÖØ-öø-ƺƻƼ-ƿǀ-ǃDŽ-ʓʔʕ-ʯʰ-ʸʻ-ËË-ˑˠ-ˤˮͰ-ͳͶ-ͷͺͻ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ÒÒ‚ÒŠ-Ô¯Ô±-Õ–Õ™Õš-ÕŸÕ¡-և։ःऄ-हऻऽा-ीॉ-ौॎ-à¥à¥à¥˜-ॡ।-॥०-९॰ॱॲ-ঀং-ঃঅ-ঌà¦-à¦à¦“-নপ-রলশ-হঽা-ীে-ৈো-ৌৎৗড়-à§à§Ÿ-ৡ০-৯ৰ-ৱ৴-৹৺ਃਅ-ਊà¨-à¨à¨“-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹਾ-ੀਖ਼-ੜਫ਼੦-੯ੲ-ੴઃઅ-àªàª-ઑઓ-નપ-રલ-ળવ-હઽા-ીૉો-ૌà«à« -ૡ૦-૯૰ଂ-ଃଅ-ଌà¬-à¬à¬“-ନପ-ରଲ-ଳଵ-ହଽାୀେ-ୈୋ-ୌୗଡ଼-à­à­Ÿ-à­¡à­¦-୯୰ୱ୲-୷ஃஅ-ஊஎ-à®à®’-கங-சஜஞ-டண-தந-பம-ஹா-ிà¯-ூெ-ைொ-ௌà¯à¯—௦-௯௰-௲à°-ఃఅ-ఌఎ-à°à°’-నప-హఽà±-ౄౘ-ౙౠ-ౡ౦-౯౿ಂ-ಃಅ-ಌಎ-à²à²’-ನಪ-ಳವ-ಹಽಾಿೀ-ೄೆೇ-ೈೊ-ೋೕ-ೖೞೠ-ೡ೦-೯ೱ-ೲം-ഃഅ-ഌഎ-à´à´’-ഺഽാ-ീെ-ൈൊ-ൌൎൗൠ-ൡ൦-൯൰-൵൹ൺ-ൿං-ඃඅ-à¶–à¶š-නඳ-රලව-à·†à·-à·‘à·˜-à·Ÿà·¦-෯ෲ-ෳ෴à¸-ะา-ำเ-ๅๆà¹à¹-๙๚-๛àº-ຂຄງ-ຈຊàºàº”-ທນ-ຟມ-ຣລວສ-ຫອ-ະາ-ຳຽເ-ໄໆà»-໙ໜ-ໟༀà¼-༃༄-༒༓༔༕-༗༚-༟༠-༩༪-༳༴༶༸༾-༿ཀ-ཇཉ-ཬཿ྅ྈ-ྌ྾-࿅࿇-࿌࿎-à¿à¿-࿔࿕-࿘࿙-࿚က-ဪါ-ာေးျ-ြဿá€-á‰áŠ-áá-á•á–-á—áš-áá¡á¢-á¤á¥-á¦á§-á­á®-á°áµ-á‚ႃ-ႄႇ-ႌႎá‚á‚-႙ႚ-ႜ႞-႟Ⴀ-ჅჇáƒáƒ-ჺ჻ჼჽ-ቈቊ-á‰á‰-ቖቘቚ-á‰á‰ -ኈኊ-áŠáŠ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-áŒáŒ’-ጕጘ-ášá -á¨á©-á¼áŽ€-áŽáŽ -á´á-ᙬ᙭-᙮ᙯ-ᙿáš-áššáš -ᛪ᛫-á›­á›®-á›°á›±-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱ᜵-᜶á€-á‘á -á¬á®-á°áž€-ឳាើ-ៅះ-ៈ។-៖ៗ៘-៚ៜ០-៩á -᠙ᠠ-ᡂᡃᡄ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᤣ-ᤦᤩ-ᤫᤰ-ᤱᤳ-ᤸ᥆-á¥á¥-ᥭᥰ-ᥴᦀ-ᦫᦰ-á§€á§-ᧇᧈ-ᧉá§-᧙᧚ᨀ-ᨖᨙ-ᨚ᨞-᨟ᨠ-ᩔᩕᩗᩡᩣ-ᩤᩭ-ᩲ᪀-᪉áª-᪙᪠-᪦ᪧ᪨-᪭ᬄᬅ-ᬳᬵᬻᬽ-á­á­ƒ-á­„á­…-á­‹á­-᭙᭚-á­ á­¡-᭪᭴-᭼ᮂᮃ-ᮠᮡᮦ-ᮧ᮪ᮮ-ᮯ᮰-᮹ᮺ-ᯥᯧᯪ-ᯬᯮ᯲-᯳᯼-᯿ᰀ-ᰣᰤ-á°«á°´-ᰵ᰻-á°¿á±€-᱉á±-á±á±-᱙ᱚ-ᱷᱸ-ᱽ᱾-᱿᳀-᳇᳓᳡ᳩ-ᳬᳮ-ᳱᳲ-ᳳᳵ-á³¶á´€-á´«á´¬-ᵪᵫ-ᵷᵸᵹ-á¶šá¶›-ᶿḀ-ἕἘ-á¼á¼ -ὅὈ-á½á½-ὗὙὛá½á½Ÿ-ώᾀ-á¾´á¾¶-ᾼιῂ-ῄῆ-ῌá¿-á¿“á¿–-Ίῠ-Ῥῲ-á¿´á¿¶-ῼ‎â±â¿â‚-ₜℂℇℊ-â„“â„•â„™-â„ℤΩℨK-ℭℯ-ℴℵ-ℸℹℼ-â„¿â……-ⅉⅎâ…â… -ↂↃ-ↄↅ-ↈ⌶-âºâŽ•â’œ-ⓩ⚬⠀-⣿Ⰰ-Ⱞⰰ-ⱞⱠ-ⱻⱼ-ⱽⱾ-ⳤⳫ-ⳮⳲ-ⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵰ⶀ-â¶–â¶ -ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-â·Žâ·-â·–â·˜-ⷞ々〆〇〡-〩〮-〯〱-〵〸-〺〻〼ã-ã‚–ã‚-ゞゟァ-ヺー-ヾヿㄅ-ㄭㄱ-ㆎã†-㆑㆒-㆕㆖-㆟ㆠ-ㆺㇰ-ㇿ㈀-㈜㈠-㈩㈪-㉇㉈-ã‰ã‰ -㉻㉿㊀-㊉㊊-㊰㋀-ã‹‹ã‹-㋾㌀-ã¶ã»-ãã -ã¾ã€-䶵一-鿌ꀀ-ꀔꀕꀖ-ê’Œê“-ꓷꓸ-ꓽ꓾-꓿ꔀ-ꘋꘌê˜-ꘟ꘠-꘩ꘪ-ꘫꙀ-ꙭꙮꚀ-ꚛꚜ-êšêš -ꛥꛦ-ꛯ꛲-꛷Ꜣ-ê¯ê°ê±-ꞇ꞉-꞊Ꞌ-ꞎêž-êž­êž°-Ʇꟷꟸ-ꟹꟺꟻ-ê ê ƒ-ê …ê ‡-ê Šê Œ-ꠢꠣ-ꠤꠧ꠰-꠵꠶-ê ·ê¡€-ꡳꢀ-ê¢ê¢‚-ꢳꢴ-ꣃ꣎-ê£ê£-꣙ꣲ-ꣷ꣸-꣺ꣻ꤀-꤉ꤊ-ꤥ꤮-꤯ꤰ-ꥆꥒ-꥓꥟ꥠ-ꥼꦃꦄ-ꦲꦴ-ꦵꦺ-ꦻꦽ-ê§€ê§-ê§ê§ê§-꧙꧞-ê§Ÿê§ -ꧤꧦꧧ-ꧯ꧰-꧹ꧺ-ꧾꨀ-ꨨꨯ-ꨰꨳ-ꨴꩀ-ê©‚ê©„-ê©‹ê©ê©-꩙꩜-꩟ꩠ-ꩯꩰꩱ-ê©¶ê©·-꩹ꩺꩻꩽꩾ-ꪯꪱꪵ-ꪶꪹ-ꪽꫀꫂꫛ-ꫜê«ê«ž-꫟ꫠ-ꫪꫫꫮ-ꫯ꫰-꫱ꫲꫳ-ꫴꫵê¬-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚ꭛ꭜ-ê­Ÿê­¤-ꭥꯀ-ꯢꯣ-ꯤꯦ-ꯧꯩ-ꯪ꯫꯬꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ-豈-ï©­ï©°-龎ff-stﬓ-ﬗA-Zï½-zヲ-ッーア-ï¾ï¾ž-゚ᅠ-하-ᅦᅧ-ï¿ï¿’-ᅲᅳ-ᅵ"+o+a+"]"),u=new RegExp("["+o+a+"]");function c(t){var e=s.exec(t);return null==e?null:e[0]}function l(t){var e=c(t);return null==e?n.NEUTRAL:u.exec(e)?n.RTL:n.LTR}function f(t,e){if(e=e||n.NEUTRAL,!t.length)return e;var r=l(t);return r===n.NEUTRAL?e:r}function p(t,e){return e||(e=n.getGlobalDir()),n.isStrong(e)||i(!1),f(t,e)}var h={firstStrongChar:c,firstStrongCharDir:l,resolveBlockDir:f,getDirection:p,isDirectionLTR:function(t,e){return p(t,e)===n.LTR},isDirectionRTL:function(t,e){return p(t,e)===n.RTL}};t.exports=h},16633:(t,e,r)=>{"use strict";var n=r(73759),i="LTR",o="RTL",a=null;function s(t){return t===i||t===o}function u(t){return s(t)||n(!1),t===i?"ltr":"rtl"}function c(t){a=t}var l={NEUTRAL:"NEUTRAL",LTR:i,RTL:o,isStrong:s,getHTMLDir:u,getHTMLDirIfDifferent:function(t,e){return s(t)||n(!1),s(e)||n(!1),t===e?null:u(t)},setGlobalDir:c,initGlobalDir:function(){c(i)},getGlobalDir:function(){return a||this.initGlobalDir(),a||n(!1),a}};t.exports=l},7902:(t,e,r)=>{"use strict";function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var i=r(54191),o=r(16633),a=r(73759),s=function(){function t(t){n(this,"_defaultDir",void 0),n(this,"_lastDir",void 0),t?o.isStrong(t)||a(!1):t=o.getGlobalDir(),this._defaultDir=t,this.reset()}var e=t.prototype;return e.reset=function(){this._lastDir=this._defaultDir},e.getDirection=function(t){return this._lastDir=i.getDirection(t,this._lastDir),this._lastDir},t}();t.exports=s},38935:(t,e,r)=>{"use strict";var n=r(73759),i=55296,o=57343,a=/[\uD800-\uDFFF]/;function s(t){return i<=t&&t<=o}function u(t){return a.test(t)}function c(t,e){return 1+s(t.charCodeAt(e))}function l(t,e,r){if(e=e||0,r=void 0===r?1/0:r||0,!u(t))return t.substr(e,r);var n=t.length;if(n<=0||e>n||r<=0)return"";var i=0;if(e>0){for(;e>0&&i=n)return""}else if(e<0){for(i=n;e<0&&00&&o{"use strict";var n=r(95845),i=r(59859),o=r(79467),a=r(51767);function s(t,e,r,n){if(t===r)return!0;if(!r.startsWith(t))return!1;var o=r.slice(t.length);return!!e&&(o=n?n(o):o,i.contains(o,e))}function u(t){return"Windows"===n.platformName?t.replace(/^\s*NT/,""):t}var c={isBrowser:function(t){return s(n.browserName,n.browserFullVersion,t)},isBrowserArchitecture:function(t){return s(n.browserArchitecture,null,t)},isDevice:function(t){return s(n.deviceName,null,t)},isEngine:function(t){return s(n.engineName,n.engineVersion,t)},isPlatform:function(t){return s(n.platformName,n.platformFullVersion,t,u)},isPlatformArchitecture:function(t){return s(n.platformArchitecture,null,t)}};t.exports=o(c,a)},95845:(t,e,r)=>{"use strict";var n,i="Unknown",o=(new(r(42238))).getResult(),a=function(t){if(!t)return{major:"",minor:""};var e=t.split(".");return{major:e[0],minor:e[1]}}(o.browser.version),s={browserArchitecture:o.cpu.architecture||i,browserFullVersion:o.browser.version||i,browserMinorVersion:a.minor||i,browserName:o.browser.name||i,browserVersion:o.browser.major||i,deviceName:o.device.model||i,engineName:o.engine.name||i,engineVersion:o.engine.version||i,platformArchitecture:o.cpu.architecture||i,platformName:(n=o.os.name,{"Mac OS":"Mac OS X"}[n]||n||i),platformVersion:o.os.version||i,platformFullVersion:o.os.version||i};t.exports=s},59859:(t,e,r)=>{"use strict";var n=r(73759),i=/\./,o=/\|\|/,a=/\s+\-\s+/,s=/^(<=|<|=|>=|~>|~|>|)?\s*(.+)/,u=/^(\d*)(.*)/;function c(t,e){if(""===(t=t.trim()))return!0;var r,n=e.split(i),o=p(t),a=o.modifier,s=o.rangeComponents;switch(a){case"<":return l(n,s);case"<=":return-1===(r=m(n,s))||0===r;case">=":return f(n,s);case">":return 1===m(n,s);case"~":case"~>":return function(t,e){var r=e.slice(),n=e.slice();n.length>1&&n.pop();var i=n.length-1,o=parseInt(n[i],10);return h(o)&&(n[i]=o+1+""),f(t,r)&&l(t,n)}(n,s);default:return function(t,e){return 0===m(t,e)}(n,s)}}function l(t,e){return-1===m(t,e)}function f(t,e){var r=m(t,e);return 1===r||0===r}function p(t){var e=t.split(i),r=e[0].match(s);return r||n(!1),{modifier:r[1],rangeComponents:[r[2]].concat(e.slice(1))}}function h(t){return!isNaN(t)&&isFinite(t)}function d(t){return!p(t).modifier}function g(t,e){for(var r=t.length;re?1:t1?r.some((function(t){return _.contains(t,e)})):function(t,e){var r=t.split(a);if(r.length>0&&r.length<=2||n(!1),1===r.length)return c(r[0],e);var i=r[0],o=r[1];return d(i)&&d(o)||n(!1),c(">="+i,e)&&c("<="+o,e)}(t=r[0].trim(),e)}(t.trim(),e.trim())}};t.exports=_},52297:t=>{"use strict";var e=/-(.)/g;t.exports=function(t){return t.replace(e,(function(t,e){return e.toUpperCase()}))}},67476:(t,e,r)=>{"use strict";var n=r(52334);t.exports=function t(e,r){return!(!e||!r)&&(e===r||!n(e)&&(n(r)?t(e,r.parentNode):"contains"in e?e.contains(r):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(r))))}},89825:(t,e,r)=>{"use strict";var n=r(73759);t.exports=function(t){return function(t){return!!t&&("object"==typeof t||"function"==typeof t)&&"length"in t&&!("setInterval"in t)&&"number"!=typeof t.nodeType&&(Array.isArray(t)||"callee"in t||"item"in t)}(t)?Array.isArray(t)?t.slice():function(t){var e=t.length;if((Array.isArray(t)||"object"!=typeof t&&"function"!=typeof t)&&n(!1),"number"!=typeof e&&n(!1),0===e||e-1 in t||n(!1),"function"==typeof t.callee&&n(!1),t.hasOwnProperty)try{return Array.prototype.slice.call(t)}catch(t){}for(var r=Array(e),i=0;i{"use strict";function e(t){return t.replace(/\//g,"-")}t.exports=function(t){return"object"==typeof t?Object.keys(t).filter((function(e){return t[e]})).map(e).join(" "):Array.prototype.map.call(arguments,e).join(" ")}},60139:t=>{"use strict";function e(t){return function(){return t}}var r=function(){};r.thatReturns=e,r.thatReturnsFalse=e(!1),r.thatReturnsTrue=e(!0),r.thatReturnsNull=e(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(t){return t},t.exports=r},31003:t=>{"use strict";t.exports=function(t){if(void 0===(t=t||("undefined"!=typeof document?document:void 0)))return null;try{return t.activeElement||t.body}catch(e){return t.body}}},35179:t=>{"use strict";var e="undefined"!=typeof navigator&&navigator.userAgent.indexOf("AppleWebKit")>-1;t.exports=function(t){return(t=t||document).scrollingElement?t.scrollingElement:e||"CSS1Compat"!==t.compatMode?t.body:t.documentElement}},55258:(t,e,r)=>{"use strict";var n=r(23123);t.exports=function(t){var e=n(t);return{x:e.left,y:e.top,width:e.right-e.left,height:e.bottom-e.top}}},23123:(t,e,r)=>{"use strict";var n=r(67476);t.exports=function(t){var e=t.ownerDocument.documentElement;if(!("getBoundingClientRect"in t)||!n(e,t))return{left:0,right:0,top:0,bottom:0};var r=t.getBoundingClientRect();return{left:Math.round(r.left)-e.clientLeft,right:Math.round(r.right)-e.clientLeft,top:Math.round(r.top)-e.clientTop,bottom:Math.round(r.bottom)-e.clientTop}}},79749:(t,e,r)=>{"use strict";var n=r(35179),i=r(30787);t.exports=function(t){var e=n(t.ownerDocument||t.document);t.Window&&t instanceof t.Window&&(t=e);var r=i(t),o=t===e?t.ownerDocument.documentElement:t,a=t.scrollWidth-o.clientWidth,s=t.scrollHeight-o.clientHeight;return r.x=Math.max(0,Math.min(r.x,a)),r.y=Math.max(0,Math.min(r.y,s)),r}},85466:(t,e,r)=>{"use strict";var n=r(52297),i=r(89349);function o(t){return null==t?t:String(t)}t.exports=function(t,e){var r;if(window.getComputedStyle&&(r=window.getComputedStyle(t,null)))return o(r.getPropertyValue(i(e)));if(document.defaultView&&document.defaultView.getComputedStyle){if(r=document.defaultView.getComputedStyle(t,null))return o(r.getPropertyValue(i(e)));if("display"===e)return"none"}return t.currentStyle?o("float"===e?t.currentStyle.cssFloat||t.currentStyle.styleFloat:t.currentStyle[n(e)]):o(t.style&&t.style[n(e)])}},30787:t=>{"use strict";t.exports=function(t){return t.Window&&t instanceof t.Window?{x:t.pageXOffset||t.document.documentElement.scrollLeft,y:t.pageYOffset||t.document.documentElement.scrollTop}:{x:t.scrollLeft,y:t.scrollTop}}},70746:t=>{"use strict";function e(){var t;return document.documentElement&&(t=document.documentElement.clientWidth),!t&&document.body&&(t=document.body.clientWidth),t||0}function r(){var t;return document.documentElement&&(t=document.documentElement.clientHeight),!t&&document.body&&(t=document.body.clientHeight),t||0}function n(){return{width:window.innerWidth||e(),height:window.innerHeight||r()}}n.withoutScrollbars=function(){return{width:e(),height:r()}},t.exports=n},89349:t=>{"use strict";var e=/([A-Z])/g;t.exports=function(t){return t.replace(e,"-$1").toLowerCase()}},73759:t=>{"use strict";t.exports=function(t,e){for(var r=arguments.length,n=new Array(r>2?r-2:0),i=2;i{"use strict";t.exports=function(t){var e=(t?t.ownerDocument||t:document).defaultView||window;return!(!t||!("function"==typeof e.Node?t instanceof e.Node:"object"==typeof t&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName))}},52334:(t,e,r)=>{"use strict";var n=r(20901);t.exports=function(t){return n(t)&&3==t.nodeType}},71108:t=>{"use strict";t.exports=function(t){var e=t||"",r=arguments.length;if(r>1)for(var n=1;n{"use strict";var e=Object.prototype.hasOwnProperty;t.exports=function(t,r,n){if(!t)return null;var i={};for(var o in t)e.call(t,o)&&(i[o]=r.call(n,t[o],o,t));return i}},51767:t=>{"use strict";t.exports=function(t){var e={};return function(r){return e.hasOwnProperty(r)||(e[r]=t.call(this,r)),e[r]}}},22045:t=>{"use strict";t.exports=function(t){if(null!=t)return t;throw new Error("Got unexpected null or undefined")}},56926:(t,e,r)=>{"use strict";r(24889),t.exports=r.g.setImmediate},63620:(t,e,r)=>{"use strict";var n=r(60139);t.exports=n},43393:function(t){t.exports=function(){"use strict";var t=Array.prototype.slice;function e(t,e){e&&(t.prototype=Object.create(e.prototype)),t.prototype.constructor=t}function r(t){return a(t)?t:G(t)}function n(t){return s(t)?t:J(t)}function i(t){return u(t)?t:X(t)}function o(t){return a(t)&&!c(t)?t:Y(t)}function a(t){return!(!t||!t[f])}function s(t){return!(!t||!t[p])}function u(t){return!(!t||!t[h])}function c(t){return s(t)||u(t)}function l(t){return!(!t||!t[d])}e(n,r),e(i,r),e(o,r),r.isIterable=a,r.isKeyed=s,r.isIndexed=u,r.isAssociative=c,r.isOrdered=l,r.Keyed=n,r.Indexed=i,r.Set=o;var f="@@__IMMUTABLE_ITERABLE__@@",p="@@__IMMUTABLE_KEYED__@@",h="@@__IMMUTABLE_INDEXED__@@",d="@@__IMMUTABLE_ORDERED__@@",g="delete",y=5,v=1<>>0;if(""+r!==e||4294967295===r)return NaN;e=r}return e<0?E(t)+e:e}function D(){return!0}function K(t,e,r){return(0===t||void 0!==r&&t<=-r)&&(void 0===e||void 0!==r&&e>=r)}function T(t,e){return A(t,e,0)}function M(t,e){return A(t,e,e)}function A(t,e,r){return void 0===t?r:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}var I=0,B=1,L=2,R="function"==typeof Symbol&&Symbol.iterator,N="@@iterator",F=R||N;function P(t){this.next=t}function z(t,e,r,n){var i=0===t?e:1===t?r:[e,r];return n?n.value=i:n={value:i,done:!1},n}function j(){return{value:void 0,done:!0}}function U(t){return!!W(t)}function q(t){return t&&"function"==typeof t.next}function H(t){var e=W(t);return e&&e.call(t)}function W(t){var e=t&&(R&&t[R]||t[N]);if("function"==typeof e)return e}function V(t){return t&&"number"==typeof t.length}function G(t){return null==t?at():a(t)?t.toSeq():function(t){var e=ct(t)||"object"==typeof t&&new rt(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}(t)}function J(t){return null==t?at().toKeyedSeq():a(t)?s(t)?t.toSeq():t.fromEntrySeq():st(t)}function X(t){return null==t?at():a(t)?s(t)?t.entrySeq():t.toIndexedSeq():ut(t)}function Y(t){return(null==t?at():a(t)?s(t)?t.entrySeq():t:ut(t)).toSetSeq()}P.prototype.toString=function(){return"[Iterator]"},P.KEYS=I,P.VALUES=B,P.ENTRIES=L,P.prototype.inspect=P.prototype.toSource=function(){return this.toString()},P.prototype[F]=function(){return this},e(G,r),G.of=function(){return G(arguments)},G.prototype.toSeq=function(){return this},G.prototype.toString=function(){return this.__toString("Seq {","}")},G.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},G.prototype.__iterate=function(t,e){return lt(this,t,e,!0)},G.prototype.__iterator=function(t,e){return ft(this,t,e,!0)},e(J,G),J.prototype.toKeyedSeq=function(){return this},e(X,G),X.of=function(){return X(arguments)},X.prototype.toIndexedSeq=function(){return this},X.prototype.toString=function(){return this.__toString("Seq [","]")},X.prototype.__iterate=function(t,e){return lt(this,t,e,!1)},X.prototype.__iterator=function(t,e){return ft(this,t,e,!1)},e(Y,G),Y.of=function(){return Y(arguments)},Y.prototype.toSetSeq=function(){return this},G.isSeq=ot,G.Keyed=J,G.Set=Y,G.Indexed=X;var $,Z,Q,tt="@@__IMMUTABLE_SEQ__@@";function et(t){this._array=t,this.size=t.length}function rt(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function nt(t){this._iterable=t,this.size=t.length||t.size}function it(t){this._iterator=t,this._iteratorCache=[]}function ot(t){return!(!t||!t[tt])}function at(){return $||($=new et([]))}function st(t){var e=Array.isArray(t)?new et(t).fromEntrySeq():q(t)?new it(t).fromEntrySeq():U(t)?new nt(t).fromEntrySeq():"object"==typeof t?new rt(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function ut(t){var e=ct(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function ct(t){return V(t)?new et(t):q(t)?new it(t):U(t)?new nt(t):void 0}function lt(t,e,r,n){var i=t._cache;if(i){for(var o=i.length-1,a=0;a<=o;a++){var s=i[r?o-a:a];if(!1===e(s[1],n?s[0]:a,t))return a+1}return a}return t.__iterateUncached(e,r)}function ft(t,e,r,n){var i=t._cache;if(i){var o=i.length-1,a=0;return new P((function(){var t=i[r?o-a:a];return a++>o?{value:void 0,done:!0}:z(e,n?t[0]:a-1,t[1])}))}return t.__iteratorUncached(e,r)}function pt(t,e){return e?ht(e,t,"",{"":t}):dt(t)}function ht(t,e,r,n){return Array.isArray(e)?t.call(n,r,X(e).map((function(r,n){return ht(t,r,n,e)}))):gt(e)?t.call(n,r,J(e).map((function(r,n){return ht(t,r,n,e)}))):e}function dt(t){return Array.isArray(t)?X(t).map(dt).toList():gt(t)?J(t).map(dt).toMap():t}function gt(t){return t&&(t.constructor===Object||void 0===t.constructor)}function yt(t,e){if(t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if((t=t.valueOf())===(e=e.valueOf())||t!=t&&e!=e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function vt(t,e){if(t===e)return!0;if(!a(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||s(t)!==s(e)||u(t)!==u(e)||l(t)!==l(e))return!1;if(0===t.size&&0===e.size)return!0;var r=!c(t);if(l(t)){var n=t.entries();return e.every((function(t,e){var i=n.next().value;return i&&yt(i[1],t)&&(r||yt(i[0],e))}))&&n.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var f=!0,p=e.__iterate((function(e,n){if(r?!t.has(e):i?!yt(e,t.get(n,_)):!yt(t.get(n,_),e))return f=!1,!1}));return f&&t.size===p}function mt(t,e){if(!(this instanceof mt))return new mt(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(Z)return Z;Z=this}}function _t(t,e){if(!t)throw new Error(e)}function bt(t,e,r){if(!(this instanceof bt))return new bt(t,e,r);if(_t(0!==r,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),r=void 0===r?1:Math.abs(r),en?{value:void 0,done:!0}:z(t,i,r[e?n-i++:i++])}))},e(rt,J),rt.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},rt.prototype.has=function(t){return this._object.hasOwnProperty(t)},rt.prototype.__iterate=function(t,e){for(var r=this._object,n=this._keys,i=n.length-1,o=0;o<=i;o++){var a=n[e?i-o:o];if(!1===t(r[a],a,this))return o+1}return o},rt.prototype.__iterator=function(t,e){var r=this._object,n=this._keys,i=n.length-1,o=0;return new P((function(){var a=n[e?i-o:o];return o++>i?{value:void 0,done:!0}:z(t,a,r[a])}))},rt.prototype[d]=!0,e(nt,X),nt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var r=H(this._iterable),n=0;if(q(r))for(var i;!(i=r.next()).done&&!1!==t(i.value,n++,this););return n},nt.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=H(this._iterable);if(!q(r))return new P(j);var n=0;return new P((function(){var e=r.next();return e.done?e:z(t,n++,e.value)}))},e(it,X),it.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var r,n=this._iterator,i=this._iteratorCache,o=0;o=n.length){var e=r.next();if(e.done)return e;n[i]=e.value}return z(t,i,n[i++])}))},e(mt,X),mt.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},mt.prototype.get=function(t,e){return this.has(t)?this._value:e},mt.prototype.includes=function(t){return yt(this._value,t)},mt.prototype.slice=function(t,e){var r=this.size;return K(t,e,r)?this:new mt(this._value,M(e,r)-T(t,r))},mt.prototype.reverse=function(){return this},mt.prototype.indexOf=function(t){return yt(this._value,t)?0:-1},mt.prototype.lastIndexOf=function(t){return yt(this._value,t)?this.size:-1},mt.prototype.__iterate=function(t,e){for(var r=0;r1?" by "+this._step:"")+" ]"},bt.prototype.get=function(t,e){return this.has(t)?this._start+O(this,t)*this._step:e},bt.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e=0&&rr?{value:void 0,done:!0}:z(t,o++,a)}))},bt.prototype.equals=function(t){return t instanceof bt?this._start===t._start&&this._end===t._end&&this._step===t._step:vt(this,t)},e(St,r),e(wt,St),e(xt,St),e(kt,St),St.Keyed=wt,St.Indexed=xt,St.Set=kt;var Ct="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){var r=65535&(t|=0),n=65535&(e|=0);return r*n+((t>>>16)*n+r*(e>>>16)<<16>>>0)|0};function Et(t){return t>>>1&1073741824|3221225471&t}function Ot(t){if(!1===t||null==t)return 0;if("function"==typeof t.valueOf&&(!1===(t=t.valueOf())||null==t))return 0;if(!0===t)return 1;var e=typeof t;if("number"===e){var r=0|t;for(r!==t&&(r^=4294967295*t);t>4294967295;)r^=t/=4294967295;return Et(r)}if("string"===e)return t.length>Lt?function(t){var e=Ft[t];return void 0===e&&(e=Dt(t),Nt===Rt&&(Nt=0,Ft={}),Nt++,Ft[t]=e),e}(t):Dt(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return function(t){var e;if(At&&void 0!==(e=Mt.get(t)))return e;if(void 0!==(e=t[Bt]))return e;if(!Tt){if(void 0!==(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[Bt]))return e;if(void 0!==(e=function(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}(t)))return e}if(e=++It,1073741824&It&&(It=0),At)Mt.set(t,e);else{if(void 0!==Kt&&!1===Kt(t))throw new Error("Non-extensible objects are not allowed as keys.");if(Tt)Object.defineProperty(t,Bt,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[Bt]=e;else{if(void 0===t.nodeType)throw new Error("Unable to set a non-enumerable property on object.");t[Bt]=e}}return e}(t);if("function"==typeof t.toString)return Dt(t.toString());throw new Error("Value type "+e+" cannot be hashed.")}function Dt(t){for(var e=0,r=0;r>>r)&m,s=(0===r?n:n>>>r)&m;return new Vt(e,1<>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135,127&(t+=t>>8)+(t>>16)}function fe(t,e,r,n){var i=n?t:C(t);return i[e]=r,i}Ht[qt]=!0,Ht[g]=Ht.remove,Ht.removeIn=Ht.deleteIn,Wt.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,a=i.length;o=pe)return function(t,e,r,n){t||(t=new k);for(var i=new Xt(t,Ot(r),[r,n]),o=0;o>>t)&m),o=this.bitmap;return 0==(o&i)?n:this.nodes[le(o&i-1)].get(t+y,e,r,n)},Vt.prototype.update=function(t,e,r,n,i,o,a){void 0===r&&(r=Ot(n));var s=(0===e?r:r>>>e)&m,u=1<=he)return function(t,e,r,n,i){for(var o=0,a=new Array(v),s=0;0!==r;s++,r>>>=1)a[s]=1&r?e[o++]:void 0;return a[n]=i,new Gt(t,o+1,a)}(t,p,c,s,d);if(l&&!d&&2===p.length&&ne(p[1^f]))return p[1^f];if(l&&d&&1===p.length&&ne(d))return d;var g=t&&t===this.ownerID,b=l?d?c:c^u:c|u,S=l?d?fe(p,f,d,g):function(t,e,r){var n=t.length-1;if(r&&e===n)return t.pop(),t;for(var i=new Array(n),o=0,a=0;a>>t)&m,o=this.nodes[i];return o?o.get(t+y,e,r,n):n},Gt.prototype.update=function(t,e,r,n,i,o,a){void 0===r&&(r=Ot(n));var s=(0===e?r:r>>>e)&m,u=i===_,c=this.nodes,l=c[s];if(u&&!l)return this;var f=re(l,t,e+y,r,n,i,o,a);if(f===l)return this;var p=this.count;if(l){if(!f&&--p0&&n=0&&t=t.size||e<0)return t.withMutations((function(t){e<0?Ke(t,e).set(0,r):Ke(t,0,e+1).set(e,r)}));e+=t._origin;var n=t._tail,i=t._root,o=w(S);return e>=Me(t._capacity)?n=Ee(n,t.__ownerID,0,e,r,o):i=Ee(i,t.__ownerID,t._level,e,r,o),o.value?t.__ownerID?(t._root=i,t._tail=n,t.__hash=void 0,t.__altered=!0,t):ke(t._origin,t._capacity,t._level,i,n):t}(this,t,e)},ge.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},ge.prototype.insert=function(t,e){return this.splice(t,0,e)},ge.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=y,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):Ce()},ge.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations((function(r){Ke(r,0,e+t.length);for(var n=0;n>>e&m;if(n>=this.array.length)return new _e([],t);var i,o=0===n;if(e>0){var a=this.array[n];if((i=a&&a.removeBefore(t,e-y,r))===a&&o)return this}if(o&&!i)return this;var s=Oe(this,t);if(!o)for(var u=0;u>>e&m;if(i>=this.array.length)return this;if(e>0){var o=this.array[i];if((n=o&&o.removeAfter(t,e-y,r))===o&&i===this.array.length-1)return this}var a=Oe(this,t);return a.array.splice(i+1),n&&(a.array[i]=n),a};var be,Se,we={};function xe(t,e){var r=t._origin,n=t._capacity,i=Me(n),o=t._tail;return a(t._root,t._level,0);function a(t,s,u){return 0===s?function(t,a){var s=a===i?o&&o.array:t&&t.array,u=a>r?0:r-a,c=n-a;return c>v&&(c=v),function(){if(u===c)return we;var t=e?--c:u++;return s&&s[t]}}(t,u):function(t,i,o){var s,u=t&&t.array,c=o>r?0:r-o>>i,l=1+(n-o>>i);return l>v&&(l=v),function(){for(;;){if(s){var t=s();if(t!==we)return t;s=null}if(c===l)return we;var r=e?--l:c++;s=a(u&&u[r],i-y,o+(r<>>r&m,u=t&&s0){var c=t&&t.array[s],l=Ee(c,e,r-y,n,i,o);return l===c?t:((a=Oe(t,e)).array[s]=l,a)}return u&&t.array[s]===i?t:(x(o),a=Oe(t,e),void 0===i&&s===a.array.length-1?a.array.pop():a.array[s]=i,a)}function Oe(t,e){return e&&t&&e===t.ownerID?t:new _e(t?t.array.slice():[],e)}function De(t,e){if(e>=Me(t._capacity))return t._tail;if(e<1<0;)r=r.array[e>>>n&m],n-=y;return r}}function Ke(t,e,r){void 0!==e&&(e|=0),void 0!==r&&(r|=0);var n=t.__ownerID||new k,i=t._origin,o=t._capacity,a=i+e,s=void 0===r?o:r<0?o+r:i+r;if(a===i&&s===o)return t;if(a>=s)return t.clear();for(var u=t._level,c=t._root,l=0;a+l<0;)c=new _e(c&&c.array.length?[void 0,c]:[],n),l+=1<<(u+=y);l&&(a+=l,i+=l,s+=l,o+=l);for(var f=Me(o),p=Me(s);p>=1<f?new _e([],n):h;if(h&&p>f&&ay;v-=y){var _=f>>>v&m;g=g.array[_]=Oe(g.array[_],n)}g.array[f>>>y&m]=h}if(s=p)a-=p,s-=p,u=y,c=null,d=d&&d.removeBefore(n,0,a);else if(a>i||p>>u&m;if(b!==p>>>u&m)break;b&&(l+=(1<i&&(c=c.removeBefore(n,u,a-l)),c&&po&&(o=c.size),a(u)||(c=c.map((function(t){return pt(t)}))),n.push(c)}return o>t.size&&(t=t.setSize(o)),ue(t,e,n)}function Me(t){return t>>y<=v&&a.size>=2*o.size?(n=(i=a.filter((function(t,e){return void 0!==t&&s!==e}))).toKeyedSeq().map((function(t){return t[0]})).flip().toMap(),t.__ownerID&&(n.__ownerID=i.__ownerID=t.__ownerID)):(n=o.remove(e),i=s===a.size-1?a.pop():a.set(s,void 0))}else if(u){if(r===a.get(s)[1])return t;n=o,i=a.set(s,[e,r])}else n=o.set(e,a.size),i=a.set(a.size,[e,r]);return t.__ownerID?(t.size=n.size,t._map=n,t._list=i,t.__hash=void 0,t):Be(n,i)}function Ne(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function Fe(t){this._iter=t,this.size=t.size}function Pe(t){this._iter=t,this.size=t.size}function ze(t){this._iter=t,this.size=t.size}function je(t){var e=rr(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=nr,e.__iterateUncached=function(e,r){var n=this;return t.__iterate((function(t,r){return!1!==e(r,t,n)}),r)},e.__iteratorUncached=function(e,r){if(e===L){var n=t.__iterator(e,r);return new P((function(){var t=n.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t}))}return t.__iterator(e===B?I:B,r)},e}function Ue(t,e,r){var n=rr(t);return n.size=t.size,n.has=function(e){return t.has(e)},n.get=function(n,i){var o=t.get(n,_);return o===_?i:e.call(r,o,n,t)},n.__iterateUncached=function(n,i){var o=this;return t.__iterate((function(t,i,a){return!1!==n(e.call(r,t,i,a),i,o)}),i)},n.__iteratorUncached=function(n,i){var o=t.__iterator(L,i);return new P((function(){var i=o.next();if(i.done)return i;var a=i.value,s=a[0];return z(n,s,e.call(r,a[1],s,t),i)}))},n}function qe(t,e){var r=rr(t);return r._iter=t,r.size=t.size,r.reverse=function(){return t},t.flip&&(r.flip=function(){var e=je(t);return e.reverse=function(){return t.flip()},e}),r.get=function(r,n){return t.get(e?r:-1-r,n)},r.has=function(r){return t.has(e?r:-1-r)},r.includes=function(e){return t.includes(e)},r.cacheResult=nr,r.__iterate=function(e,r){var n=this;return t.__iterate((function(t,r){return e(t,r,n)}),!r)},r.__iterator=function(e,r){return t.__iterator(e,!r)},r}function He(t,e,r,n){var i=rr(t);return n&&(i.has=function(n){var i=t.get(n,_);return i!==_&&!!e.call(r,i,n,t)},i.get=function(n,i){var o=t.get(n,_);return o!==_&&e.call(r,o,n,t)?o:i}),i.__iterateUncached=function(i,o){var a=this,s=0;return t.__iterate((function(t,o,u){if(e.call(r,t,o,u))return s++,i(t,n?o:s-1,a)}),o),s},i.__iteratorUncached=function(i,o){var a=t.__iterator(L,o),s=0;return new P((function(){for(;;){var o=a.next();if(o.done)return o;var u=o.value,c=u[0],l=u[1];if(e.call(r,l,c,t))return z(i,n?c:s++,l,o)}}))},i}function We(t,e,r,n){var i=t.size;if(void 0!==e&&(e|=0),void 0!==r&&(r|=0),K(e,r,i))return t;var o=T(e,i),a=M(r,i);if(o!=o||a!=a)return We(t.toSeq().cacheResult(),e,r,n);var s,u=a-o;u==u&&(s=u<0?0:u);var c=rr(t);return c.size=0===s?s:t.size&&s||void 0,!n&&ot(t)&&s>=0&&(c.get=function(e,r){return(e=O(this,e))>=0&&es)return{value:void 0,done:!0};var t=i.next();return n||e===B?t:z(e,u-1,e===I?void 0:t.value[1],t)}))},c}function Ve(t,e,r,n){var i=rr(t);return i.__iterateUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,u=0;return t.__iterate((function(t,o,c){if(!s||!(s=e.call(r,t,o,c)))return u++,i(t,n?o:u-1,a)})),u},i.__iteratorUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterator(i,o);var s=t.__iterator(L,o),u=!0,c=0;return new P((function(){var t,o,l;do{if((t=s.next()).done)return n||i===B?t:z(i,c++,i===I?void 0:t.value[1],t);var f=t.value;o=f[0],l=f[1],u&&(u=e.call(r,l,o,a))}while(u);return i===L?t:z(i,o,l,t)}))},i}function Ge(t,e,r){var n=rr(t);return n.__iterateUncached=function(n,i){var o=0,s=!1;return function t(u,c){var l=this;u.__iterate((function(i,u){return(!e||c0}function $e(t,e,n){var i=rr(t);return i.size=new et(n).map((function(t){return t.size})).min(),i.__iterate=function(t,e){for(var r,n=this.__iterator(B,e),i=0;!(r=n.next()).done&&!1!==t(r.value,i++,this););return i},i.__iteratorUncached=function(t,i){var o=n.map((function(t){return t=r(t),H(i?t.reverse():t)})),a=0,s=!1;return new P((function(){var r;return s||(r=o.map((function(t){return t.next()})),s=r.some((function(t){return t.done}))),s?{value:void 0,done:!0}:z(t,a++,e.apply(null,r.map((function(t){return t.value}))))}))},i}function Ze(t,e){return ot(t)?e:t.constructor(e)}function Qe(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function tr(t){return Pt(t.size),E(t)}function er(t){return s(t)?n:u(t)?i:o}function rr(t){return Object.create((s(t)?J:u(t)?X:Y).prototype)}function nr(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):G.prototype.cacheResult.call(this)}function ir(t,e){return t>e?1:t=0;r--)e={value:arguments[r],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Tr(t,e)},Cr.prototype.pushAll=function(t){if(0===(t=i(t)).size)return this;Pt(t.size);var e=this.size,r=this._head;return t.reverse().forEach((function(t){e++,r={value:t,next:r}})),this.__ownerID?(this.size=e,this._head=r,this.__hash=void 0,this.__altered=!0,this):Tr(e,r)},Cr.prototype.pop=function(){return this.slice(1)},Cr.prototype.unshift=function(){return this.push.apply(this,arguments)},Cr.prototype.unshiftAll=function(t){return this.pushAll(t)},Cr.prototype.shift=function(){return this.pop.apply(this,arguments)},Cr.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Mr()},Cr.prototype.slice=function(t,e){if(K(t,e,this.size))return this;var r=T(t,this.size);if(M(e,this.size)!==this.size)return xt.prototype.slice.call(this,t,e);for(var n=this.size-r,i=this._head;r--;)i=i.next;return this.__ownerID?(this.size=n,this._head=i,this.__hash=void 0,this.__altered=!0,this):Tr(n,i)},Cr.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Tr(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Cr.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var r=0,n=this._head;n&&!1!==t(n.value,r++,this);)n=n.next;return r},Cr.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var r=0,n=this._head;return new P((function(){if(n){var e=n.value;return n=n.next,z(t,r++,e)}return{value:void 0,done:!0}}))},Cr.isStack=Er;var Or,Dr="@@__IMMUTABLE_STACK__@@",Kr=Cr.prototype;function Tr(t,e,r,n){var i=Object.create(Kr);return i.size=t,i._head=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function Mr(){return Or||(Or=Tr(0))}function Ar(t,e){var r=function(r){t.prototype[r]=e[r]};return Object.keys(e).forEach(r),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(r),t}Kr[Dr]=!0,Kr.withMutations=Ht.withMutations,Kr.asMutable=Ht.asMutable,Kr.asImmutable=Ht.asImmutable,Kr.wasAltered=Ht.wasAltered,r.Iterator=P,Ar(r,{toArray:function(){Pt(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate((function(e,r){t[r]=e})),t},toIndexedSeq:function(){return new Fe(this)},toJS:function(){return this.toSeq().map((function(t){return t&&"function"==typeof t.toJS?t.toJS():t})).__toJS()},toJSON:function(){return this.toSeq().map((function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t})).__toJS()},toKeyedSeq:function(){return new Ne(this,!0)},toMap:function(){return zt(this.toKeyedSeq())},toObject:function(){Pt(this.size);var t={};return this.__iterate((function(e,r){t[r]=e})),t},toOrderedMap:function(){return Ae(this.toKeyedSeq())},toOrderedSet:function(){return _r(s(this)?this.valueSeq():this)},toSet:function(){return fr(s(this)?this.valueSeq():this)},toSetSeq:function(){return new Pe(this)},toSeq:function(){return u(this)?this.toIndexedSeq():s(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Cr(s(this)?this.valueSeq():this)},toList:function(){return ge(s(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){return Ze(this,function(t,e){var r=s(t),i=[t].concat(e).map((function(t){return a(t)?r&&(t=n(t)):t=r?st(t):ut(Array.isArray(t)?t:[t]),t})).filter((function(t){return 0!==t.size}));if(0===i.length)return t;if(1===i.length){var o=i[0];if(o===t||r&&s(o)||u(t)&&u(o))return o}var c=new et(i);return r?c=c.toKeyedSeq():u(t)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=i.reduce((function(t,e){if(void 0!==t){var r=e.size;if(void 0!==r)return t+r}}),0),c}(this,t.call(arguments,0)))},includes:function(t){return this.some((function(e){return yt(e,t)}))},entries:function(){return this.__iterator(L)},every:function(t,e){Pt(this.size);var r=!0;return this.__iterate((function(n,i,o){if(!t.call(e,n,i,o))return r=!1,!1})),r},filter:function(t,e){return Ze(this,He(this,t,e,!0))},find:function(t,e,r){var n=this.findEntry(t,e);return n?n[1]:r},findEntry:function(t,e){var r;return this.__iterate((function(n,i,o){if(t.call(e,n,i,o))return r=[i,n],!1})),r},findLastEntry:function(t,e){return this.toSeq().reverse().findEntry(t,e)},forEach:function(t,e){return Pt(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){Pt(this.size),t=void 0!==t?""+t:",";var e="",r=!0;return this.__iterate((function(n){r?r=!1:e+=t,e+=null!=n?n.toString():""})),e},keys:function(){return this.__iterator(I)},map:function(t,e){return Ze(this,Ue(this,t,e))},reduce:function(t,e,r){var n,i;return Pt(this.size),arguments.length<2?i=!0:n=e,this.__iterate((function(e,o,a){i?(i=!1,n=e):n=t.call(r,n,e,o,a)})),n},reduceRight:function(t,e,r){var n=this.toKeyedSeq().reverse();return n.reduce.apply(n,arguments)},reverse:function(){return Ze(this,qe(this,!0))},slice:function(t,e){return Ze(this,We(this,t,e,!0))},some:function(t,e){return!this.every(Nr(t),e)},sort:function(t){return Ze(this,Je(this,t))},values:function(){return this.__iterator(B)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(t,e){return E(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return function(t,e,r){var n=zt().asMutable();return t.__iterate((function(i,o){n.update(e.call(r,i,o,t),0,(function(t){return t+1}))})),n.asImmutable()}(this,t,e)},equals:function(t){return vt(this,t)},entrySeq:function(){var t=this;if(t._cache)return new et(t._cache);var e=t.toSeq().map(Rr).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(Nr(t),e)},findLast:function(t,e,r){return this.toKeyedSeq().reverse().find(t,e,r)},first:function(){return this.find(D)},flatMap:function(t,e){return Ze(this,function(t,e,r){var n=er(t);return t.toSeq().map((function(i,o){return n(e.call(r,i,o,t))})).flatten(!0)}(this,t,e))},flatten:function(t){return Ze(this,Ge(this,t,!0))},fromEntrySeq:function(){return new ze(this)},get:function(t,e){return this.find((function(e,r){return yt(r,t)}),void 0,e)},getIn:function(t,e){for(var r,n=this,i=or(t);!(r=i.next()).done;){var o=r.value;if((n=n&&n.get?n.get(o,_):_)===_)return e}return n},groupBy:function(t,e){return function(t,e,r){var n=s(t),i=(l(t)?Ae():zt()).asMutable();t.__iterate((function(o,a){i.update(e.call(r,o,a,t),(function(t){return(t=t||[]).push(n?[a,o]:o),t}))}));var o=er(t);return i.map((function(e){return Ze(t,o(e))}))}(this,t,e)},has:function(t){return this.get(t,_)!==_},hasIn:function(t){return this.getIn(t,_)!==_},isSubset:function(t){return t="function"==typeof t.includes?t:r(t),this.every((function(e){return t.includes(e)}))},isSuperset:function(t){return(t="function"==typeof t.isSubset?t:r(t)).isSubset(this)},keySeq:function(){return this.toSeq().map(Lr).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},max:function(t){return Xe(this,t)},maxBy:function(t,e){return Xe(this,e,t)},min:function(t){return Xe(this,t?Fr(t):jr)},minBy:function(t,e){return Xe(this,e?Fr(e):jr,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return Ze(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return Ze(this,Ve(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(Nr(t),e)},sortBy:function(t,e){return Ze(this,Je(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return Ze(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return Ze(this,function(t,e,r){var n=rr(t);return n.__iterateUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterate(n,i);var a=0;return t.__iterate((function(t,i,s){return e.call(r,t,i,s)&&++a&&n(t,i,o)})),a},n.__iteratorUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterator(n,i);var a=t.__iterator(L,i),s=!0;return new P((function(){if(!s)return{value:void 0,done:!0};var t=a.next();if(t.done)return t;var i=t.value,u=i[0],c=i[1];return e.call(r,c,u,o)?n===L?t:z(n,u,c,t):(s=!1,{value:void 0,done:!0})}))},n}(this,t,e))},takeUntil:function(t,e){return this.takeWhile(Nr(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function(t){if(t.size===1/0)return 0;var e=l(t),r=s(t),n=e?1:0;return function(t,e){return e=Ct(e,3432918353),e=Ct(e<<15|e>>>-15,461845907),e=Ct(e<<13|e>>>-13,5),e=Ct((e=(e+3864292196|0)^t)^e>>>16,2246822507),Et((e=Ct(e^e>>>13,3266489909))^e>>>16)}(t.__iterate(r?e?function(t,e){n=31*n+Ur(Ot(t),Ot(e))|0}:function(t,e){n=n+Ur(Ot(t),Ot(e))|0}:e?function(t){n=31*n+Ot(t)|0}:function(t){n=n+Ot(t)|0}),n)}(this))}});var Ir=r.prototype;Ir[f]=!0,Ir[F]=Ir.values,Ir.__toJS=Ir.toArray,Ir.__toStringMapper=Pr,Ir.inspect=Ir.toSource=function(){return this.toString()},Ir.chain=Ir.flatMap,Ir.contains=Ir.includes,function(){try{Object.defineProperty(Ir,"length",{get:function(){if(!r.noLengthWarning){var t;try{throw new Error}catch(e){t=e.stack}if(-1===t.indexOf("_wrapObject"))return console&&console.warn&&console.warn("iterable.length has been deprecated, use iterable.size or iterable.count(). This warning will become a silent error in a future version. "+t),this.size}}})}catch(t){}}(),Ar(n,{flip:function(){return Ze(this,je(this))},findKey:function(t,e){var r=this.findEntry(t,e);return r&&r[0]},findLastKey:function(t,e){return this.toSeq().reverse().findKey(t,e)},keyOf:function(t){return this.findKey((function(e){return yt(e,t)}))},lastKeyOf:function(t){return this.findLastKey((function(e){return yt(e,t)}))},mapEntries:function(t,e){var r=this,n=0;return Ze(this,this.toSeq().map((function(i,o){return t.call(e,[o,i],n++,r)})).fromEntrySeq())},mapKeys:function(t,e){var r=this;return Ze(this,this.toSeq().flip().map((function(n,i){return t.call(e,n,i,r)})).flip())}});var Br=n.prototype;function Lr(t,e){return e}function Rr(t,e){return[e,t]}function Nr(t){return function(){return!t.apply(this,arguments)}}function Fr(t){return function(){return-t.apply(this,arguments)}}function Pr(t){return"string"==typeof t?JSON.stringify(t):t}function zr(){return C(arguments)}function jr(t,e){return te?-1:0}function Ur(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}return Br[p]=!0,Br[F]=Ir.entries,Br.__toJS=Ir.toObject,Br.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+Pr(t)},Ar(i,{toKeyedSeq:function(){return new Ne(this,!1)},filter:function(t,e){return Ze(this,He(this,t,e,!1))},findIndex:function(t,e){var r=this.findEntry(t,e);return r?r[0]:-1},indexOf:function(t){var e=this.toKeyedSeq().keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.toKeyedSeq().reverse().keyOf(t);return void 0===e?-1:e},reverse:function(){return Ze(this,qe(this,!1))},slice:function(t,e){return Ze(this,We(this,t,e,!1))},splice:function(t,e){var r=arguments.length;if(e=Math.max(0|e,0),0===r||2===r&&!e)return this;t=T(t,t<0?this.count():this.size);var n=this.slice(0,t);return Ze(this,1===r?n:n.concat(C(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var r=this.toKeyedSeq().findLastKey(t,e);return void 0===r?-1:r},first:function(){return this.get(0)},flatten:function(t){return Ze(this,Ge(this,t,!1))},get:function(t,e){return(t=O(this,t))<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find((function(e,r){return r===t}),void 0,e)},has:function(t){return(t=O(this,t))>=0&&(void 0!==this.size?this.size===1/0||t{"use strict";var e=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(t){n[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,i){for(var o,a,s=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),u=1;u0?2==u.length?typeof u[1]==a?this[u[0]]=u[1].call(this,l):this[u[0]]=u[1]:3==u.length?typeof u[1]!==a||u[1].exec&&u[1].test?this[u[0]]=l?l.replace(u[1],u[2]):o:this[u[0]]=l?u[1].call(this,l,u[2]):o:4==u.length&&(this[u[0]]=l?u[3].call(this,l.replace(u[1],u[2])):o):this[u]=l||o;f+=2}},str:function(t,e){for(var r in e)if(typeof e[r]===s&&e[r].length>0){for(var n=0;n{"use strict";t.exports=window.React},91850:t=>{"use strict";t.exports=window.ReactDOM}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}();var n=r(9041);(window.yoast=window.yoast||{}).draftJs=n})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/featureFlag.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/featureFlag.js new file mode 100644 index 00000000..1746bb84 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/featureFlag.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,s={};e=s,Object.defineProperty(e,"__esModule",{value:!0}),e.isFeatureEnabled=e.enabledFeatures=e.enableFeatures=void 0,e.isFeatureEnabled=function(e){return!!self.wpseoFeatureFlags&&self.wpseoFeatureFlags.includes(e)},e.enableFeatures=function(e){self.wpseoFeatureFlags||(self.wpseoFeatureFlags=[]),e.forEach((e=>{self.wpseoFeatureFlags.includes(e)||self.wpseoFeatureFlags.push(e)}))},e.enabledFeatures=function(){return self.wpseoFeatureFlags||[]},(window.yoast=window.yoast||{}).featureFlag=s})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/helpers.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/helpers.js new file mode 100644 index 00000000..71801dca --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/helpers.js @@ -0,0 +1,26 @@ +(()=>{var e={61117:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,n(57147);const r=(e,t)=>{const n=((e,t)=>{for(const n in t)t.hasOwnProperty(n)&&(void 0!==e[n]&&""!==e[n]||(e[n]=t[n]));return e})(e,{dataType:"json",method:"POST",contentType:"application/json"});return void 0===n.headers&&""===n.headers||((e,t)=>{"jquery"===e&&Object.assign(t,{beforeSend:e=>{jQuery.each(t.headers,((t,n)=>{e.setRequestHeader(t,n)}))}}),"fetch"===e&&"json"===t.dataType&&Object.assign(t.headers,{Accepts:"application/json","Content-Type":"application/json"})})(t,n),"json"===n.dataType&&(n.data=JSON.stringify(n.data)),"fetch"===t&&Object.assign(n,{body:n.data}),n};t.default=(e,t)=>"undefined"!=typeof jQuery&&jQuery&&jQuery.ajax?((e,t)=>(Object.assign(t,{url:e}),new Promise(((e,n)=>{jQuery.ajax(t).done((t=>{e(t)})).fail((()=>{n("Wrong request")}))}))))(e,r(t,"jquery")):((e,t)=>{const n=fetch(e,t);return new Promise(((e,t)=>{n.then((n=>200===n.status?e(n.json()):t("Response status is not 200"))).catch((()=>t("Wrong request")))}))})(e,r(t,"fetch"))},70636:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.StyledSvg=void 0;var r=s(n(85890)),o=s(n(99196)),i=s(n(98487)),a=n(92819);function s(e){return e&&e.__esModule?e:{default:e}}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;te.size}; + height: ${e=>e.size}; + flex: none; +`;class c extends o.default.Component{render(){const{iconSet:e,icon:t,className:n,color:r,size:i}=this.props,s=e[t];if(!s)return console.warn(`Invalid icon name ("${t}") passed to the SvgIcon component.`),null;const u=s.path,c=s.viewbox,f=["yoast-svg-icon","yoast-svg-icon-"+t,n].filter(Boolean).join(" "),p=s.CustomComponent?s.CustomComponent:l;return o.default.createElement(p,{"aria-hidden":!0,role:"img",focusable:"false",size:i,className:f,xmlns:"http://www.w3.org/2000/svg",viewBox:c,fill:r},(0,a.isArray)(u)?u:o.default.createElement("path",{d:u}))}}c.propTypes={icon:r.default.string.isRequired,iconSet:r.default.object.isRequired,color:r.default.string,size:r.default.string,className:r.default.string},c.defaultProps={size:"16px",color:"currentColor",className:""},t.default=e=>{const t=t=>o.default.createElement(c,u({},t,{iconSet:e}));return t.propTypes={icon:r.default.string.isRequired,color:r.default.string,size:r.default.string,className:r.default.string},t.defaultProps={size:"16px",color:"currentColor",className:""},t}},47305:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return(0,r.default)(e,t,i)};var r=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=o(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=i?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=e[a]}return r.default=e,n&&n.set(e,r),r}(n(56362));function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(o=function(e){return e?n:t})(e)}function i(e,t,n){const o={};return o.id=(0,r.getXPathText)("child::content:slug",e,t,n),o.title=(0,r.getXPathText)("child::title",e,t),o.link=(0,r.getXPathText)("child::link",e,t),o.content=(0,r.getXPathText)("child::content:encoded",e,t,n),o.image=(0,r.getXPathText)("child::content:image",e,t,n),o.ctaButtonCopy=(0,r.getXPathText)("child::content:cta_button_copy",e,t,n),o.ctaButtonType=(0,r.getXPathText)("child::content:cta_button_type",e,t,n),o.ctaButtonUrl=(0,r.getXPathText)("child::content:cta_button_url",e,t,n),o.readMoreLinkText=(0,r.getXPathText)("child::content:read_more_link_text",e,t,n),o.isFree=(0,r.getXPathText)("child::content:is_free",e,t,n),o.isBundle=(0,r.getXPathText)("child::content:is_bundle",e,t,n),o}},56362:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t=0,n=i.parseFeedItem){return fetch(e).then((function(e){return e.text()})).then((function(e){return s(e,t,n)}))},t.getXPathText=a,t.parseFeed=s;var r,o=(r=n(22932))&&r.__esModule?r:{default:r},i=n(93435);function a(e,t,n=null,r=null){if(0===t.evaluate("count("+e+")",n||t,r,XPathResult.ANY_TYPE,null).numberValue)return;const o=t.evaluate(e,n||t,r,XPathResult.STRING_TYPE,null);return o.stringValue?o.stringValue:null}function s(e,t=0,n=i.parseFeedItem){return new Promise((function(r,i){try{"evaluate"in document==0&&o.default.install();const i=(new DOMParser).parseFromString(e,"application/xml"),s=i.createNSResolver(i.documentElement),u=function(e){const t={};return t.title=a("/rss/channel/title",e),t.description=a("/rss/channel/description",e),t.link=a("/rss/channel/link",e),t}(i);u.items=function(e,t,n,r){const o=function(e,t,n=null,r=null){return t.evaluate(e,n||t,r,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null)}("/rss/channel/item",e);let i=o.snapshotLength;const a=[];0!==n&&(i=Math.min(i,n));for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return(0,r.default)(e,t,i)},t.parseFeedItem=i;var r=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=o(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=i?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=e[a]}return r.default=e,n&&n.set(e,r),r}(n(56362));function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(o=function(e){return e?n:t})(e)}function i(e,t,n){const o={};return o.title=(0,r.getXPathText)("child::title",e,t),o.link=(0,r.getXPathText)("child::link",e,t),o.content=(0,r.getXPathText)("child::content:encoded",e,t,n),o.description=(0,r.getXPathText)("child::description",e,t),o.creator=(0,r.getXPathText)("child::dc:creator",e,t,n),o.date=(0,r.getXPathText)("child::pubDate",e,t),o}},5878:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getValueFromHiddenInput=t.curryUpdateToHiddenInput=void 0;const n=e=>document.querySelector(e);t.curryUpdateToHiddenInput=(e,t=null)=>r=>{const o=n(e);if(o){const e=Array.isArray(r)?r.join(","):r;o.value=e}t&&t(r)},t.getValueFromHiddenInput=e=>{const t=n(e);return t?t.value:null}},59956:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.inlineElements=t.getBlocks=t.default=t.blockElements=void 0,t.isBlockElement=E,t.isInlineElement=_;var r,o,i=n(92819),a=(r=n(14429))&&r.__esModule?r:{default:r},s=t.blockElements=["address","article","aside","blockquote","canvas","dd","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","noscript","ol","output","p","pre","section","table","tfoot","ul","video"],u=t.inlineElements=["b","big","i","small","tt","abbr","acronym","cite","code","dfn","em","kbd","strong","samp","time","var","a","bdo","br","img","map","object","q","script","span","sub","sup","button","input","label","select","textarea"],l=new RegExp("^("+s.join("|")+")$","i"),c=new RegExp("^("+u.join("|")+")$","i"),f=new RegExp("^<("+s.join("|")+")[^>]*?>$","i"),p=new RegExp("^]*?>$","i"),d=new RegExp("^<("+u.join("|")+")[^>]*>$","i"),h=new RegExp("^]*>$","i"),y=/^<([^>\s/]+)[^>]*>$/,g=/^<\/([^>\s]+)[^>]*>$/,b=/^[^<]+$/,m=/^<[^><]*$/,v=//g,w=[];function E(e){return l.test(e)}function _(e){return c.test(e)}const x=t.getBlocks=(0,i.memoize)((function(e){var t=[],n=0,r="",s="",u="";return e=e.replace(v,""),w=[],(o=(0,a.default)((function(e){w.push(e)}))).addRule(b,"content"),o.addRule(m,"greater-than-sign-content"),o.addRule(f,"block-start"),o.addRule(p,"block-end"),o.addRule(d,"inline-start"),o.addRule(h,"inline-end"),o.addRule(y,"other-element-start"),o.addRule(g,"other-element-end"),o.onText(e),o.end(),(0,i.forEach)(w,(function(e,o){var i=w[o+1];switch(e.type){case"content":case"greater-than-sign-content":case"inline-start":case"inline-end":case"other-tag":case"other-element-start":case"other-element-end":case"greater than sign":i&&(0!==n||"block-start"!==i.type&&"block-end"!==i.type)?s+=e.src:(s+=e.src,t.push(s),r="",s="",u="");break;case"block-start":0!==n&&(""!==s.trim()&&t.push(s),s="",u=""),n++,r=e.src;break;case"block-end":n--,u=e.src,""!==r&&""!==u?t.push(r+s+u):""!==s.trim()&&t.push(s),r="",s="",u=""}n<0&&(n=0)})),t}));t.default={blockElements:s,inlineElements:u,isBlockElement:E,isInlineElement:_,getBlocks:x}},29938:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=e=>{var t=document.createElement("textarea");return t.innerHTML=e,t.value}},56101:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={getDirectionalStyle:!0,sendRequest:!0,decodeHTML:!0,getFeed:!0,getCourseFeed:!0,getPostFeed:!0,createSvgIconComponent:!0,getWordBoundaries:!0,strings:!0,join:!0,makeOutboundLink:!0,validateFacebookImage:!0,validateTwitterImage:!0};Object.defineProperty(t,"createSvgIconComponent",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"decodeHTML",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"getCourseFeed",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"getDirectionalStyle",{enumerable:!0,get:function(){return o.getDirectionalStyle}}),Object.defineProperty(t,"getFeed",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"getPostFeed",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"getWordBoundaries",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"join",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"makeOutboundLink",{enumerable:!0,get:function(){return h.makeOutboundLink}}),Object.defineProperty(t,"sendRequest",{enumerable:!0,get:function(){return i.default}}),t.strings=void 0,Object.defineProperty(t,"validateFacebookImage",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(t,"validateTwitterImage",{enumerable:!0,get:function(){return g.default}});var o=n(79124),i=v(n(61117)),a=v(n(29938)),s=v(n(56362)),u=v(n(47305)),l=v(n(93435)),c=v(n(70636)),f=v(n(93988)),p=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=m(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(r,i,a):r[i]=e[i]}return r.default=e,n&&n.set(e,r),r}(n(80292));t.strings=p;var d=v(n(15421)),h=n(5850),y=v(n(11192)),g=v(n(69871)),b=n(5878);function m(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(m=function(e){return e?n:t})(e)}function v(e){return e&&e.__esModule?e:{default:e}}Object.keys(b).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===b[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return b[e]}}))}))},15421:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t="-"){return e.filter(Boolean).join(t)}},5850:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeOutboundLink=void 0;var r=s(n(99196)),o=s(n(85890)),i=n(65736),a=n(1571);function s(e){return e&&e.__esModule?e:{default:e}}t.makeOutboundLink=(e="a")=>{class t extends r.default.Component{constructor(e){super(e),this.isYoastLink=this.isYoastLink.bind(this)}isYoastLink(e){return/yoast\.com|yoast\.test|yoa\.st/.test(e)}render(){if(!this.props.href)return null;const t=this.isYoastLink(this.props.href),n=Object.assign({},this.props,{target:"_blank",rel:t?this.props.rel:"noopener"});return r.default.createElement(e,n,this.props.children,r.default.createElement(a.A11yNotice,null,/* translators: Hidden accessibility text. */ +(0,i.__)("(Opens in a new browser tab)","wordpress-seo")))}}return t.propTypes={children:o.default.oneOfType([o.default.node]),href:o.default.string,rel:o.default.string},t.defaultProps={children:null,href:null,rel:null},t}},11192:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateType=t.validateSize=t.default=void 0;var r,o=n(65736),i=(r=n(59994))&&r.__esModule?r:{default:r};const a=e=>{const{width:t,height:n}=e,r=(0,o.sprintf)(/* Translators: %d expands to the minimum width, %d expands to the minimum hight */ +(0,o.__)("Your image dimensions are not suitable. The minimum dimensions are %dx%d pixels.","wordpress-seo"),200,200);return!(t<200||n<200)||r};t.validateSize=a;const s=e=>{const{type:t}=e,n=(0,o.sprintf)(/* Translators: %s expands to the jpg format, %s expands to the png format, %s expands to the gif format. */ +(0,o.__)("The format of the uploaded image is not supported. The supported formats are: %s, %s, %s and %s.","wordpress-seo"),"JPG","PNG","WEBP","GIF");return!!["jpg","png","gif","jpeg","webp"].includes(t)||n};t.validateType=s;const u=(0,i.default)([a,s]);t.default=u},69871:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validatesBytes=t.validateType=t.validateSize=t.default=void 0;var r,o=n(65736),i=(r=n(59994))&&r.__esModule?r:{default:r};const a=4096,s=4096,u=(e,t)=>{const{width:n,height:r}=e,i=(0,o.__)("Your image dimensions are not suitable. The minimum dimensions are %dx%d pixels. The maximum dimensions are %dx%d pixels.","wordpress-seo"),u=n>a||r>s; +/* Translators: %d expands to the minimum width, %d expands to the minimum height, + %d expands to the maximum width, %d expands to the maximum height. */return t&&(n<300||r<157||u)?(0,o.sprintf)(i,300,157,a,s):!(n<200||r<200||u)||(0,o.sprintf)(i,200,200,a,s)};t.validateSize=u;const l=e=>{const{type:t}=e,n=(0,o.sprintf)(/* Translators: %s expands to the gif format, %s expands to the gif format. */ +(0,o.__)("You have uploaded a %s. Please note that, if it’s an animated %s, only the first frame will be used.","wordpress-seo"),"GIF","GIF"),r=(0,o.sprintf)(/* Translators: %s expands to the jpg format, %s expands to the png format, %s expands to the gif format. */ +(0,o.__)("The format of the uploaded image is not supported. The supported formats are: %s, %s, %s and %s.","wordpress-seo"),"JPG","PNG","WEBP","GIF");return!!["jpg","jpeg","png","webp"].includes(t)||("gif"===t?n:r)};t.validateType=l;const c=e=>{const{bytes:t}=e,n=(0,o.sprintf)(/* translators: %s expands to X, %s expands to the 5MB size. */ +(0,o.__)("The file size of the uploaded image is too large for %s. File size must be less than %s.","wordpress-seo"),"X","5MB");return!(t>=5)||n};t.validatesBytes=c;const f=(0,i.default)([u,l,c]);t.default=f},59994:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=e=>t=>e.map((e=>e(t))).filter((e=>!0!==e))},80292:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"stripHTMLTags",{enumerable:!0,get:function(){return o.stripFullTags}}),Object.defineProperty(t,"stripSpaces",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"stripTagsFromHtmlString",{enumerable:!0,get:function(){return a.stripTagsFromHtmlString}});var r,o=n(49583),i=(r=n(15008))&&r.__esModule?r:{default:r},a=n(57427)},49583:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.stripIncompleteTags=t.stripFullTags=t.stripBlockTagsAtStartEnd=t.default=void 0;var r,o=(r=n(15008))&&r.__esModule?r:{default:r},i=n(59956),a=new RegExp("^<("+i.blockElements.join("|")+")[^>]*?>","i"),s=new RegExp("]*?>$","i"),u=function(e){return(e=e.replace(/^(<\/([^>]+)>)+/i,"")).replace(/(<([^/>]+)>)+$/i,"")};t.stripIncompleteTags=u;var l=function(e){return(e=e.replace(a,"")).replace(s,"")};t.stripBlockTagsAtStartEnd=l;var c=function(e){return e=e.replace(/(<([^>]+)>)/gi," "),(0,o.default)(e)};t.stripFullTags=c,t.default={stripFullTags:c,stripIncompleteTags:u,stripBlockTagsAtStartEnd:l}},15008:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(e=(e=e.replace(/\s{2,}/g," ")).replace(/\s\.$/,".")).replace(/^\s+|\s+$/g,"")}},57427:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.stripTagsFromHtmlString=void 0;const n=["script","style"],r=[":","https:","http:"],o={a:["href","target","rel"]},i=(e,t,a)=>{const s=[];e.forEach((e=>{if(e.nodeType!==Node.ELEMENT_NODE)return;const u=e.nodeName.toLowerCase();n.includes(u)?e.remove():(i(e.childNodes,t,a),t.includes(u)?((e,t)=>{e.getAttributeNames().forEach((n=>{t.includes(n)?"href"===n&&"a"===e.nodeName.toLowerCase()&&(r.includes(e.protocol)||e.removeAttribute(n)):e.removeAttribute(n)}))})(e,a[u]||o[u]||[]):s.push(e))})),s.forEach((e=>e.replaceWith(...e.childNodes)))};t.stripTagsFromHtmlString=(e,t=[],n={})=>{const r=(new DOMParser).parseFromString(e,"text/html");return i(r.body.childNodes,t,n),r.body.innerHTML}},79124:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getDirectionalStyle=function(e,t){return n=>n.theme.isRtl?t:e}},1571:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.A11yNotice=void 0;var r,o=(r=n(98487))&&r.__esModule?r:{default:r};t.A11yNotice=o.default.span` + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; + // Safari+VoiceOver bug see PR 308 and My Yoast issues 445, 712 and PR 715. + transform: translateY(1em); +`},93988:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return[" ","\\n","\\r","\\t"," "," ",".",",","'","(",")",'"',"+","-",";","!","?",":","/","»","«","‹","›","<",">"]}},14429:e=>{var t=function(e,t){var n;for(n=0;n1?1:a)+r[r.length-1].length};return{addRule:function(e,t){o.push({regex:e,type:t})},onText:function(e){for(var t=r+e,i=n(o,t);i&&i.max_index!==t.length;)s(t.substring(0,i.max_index),i.rule.type),t=t.substring(i.max_index),i=n(o,t);r=t},end:function(){if(0!==r.length){var e=t(o,r);if(!e){var n=new Error("unable to tokenize");throw n.tokenizer2={buffer:r,line:i,col:a},n}s(r,e.type)}}}}},57147:function(){!function(e){"use strict";if(!e.fetch){var t="URLSearchParams"in e,n="Symbol"in e&&"iterator"in Symbol,r="FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),o="FormData"in e,i="ArrayBuffer"in e;if(i)var a=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],s=function(e){return e&&DataView.prototype.isPrototypeOf(e)},u=ArrayBuffer.isView||function(e){return e&&a.indexOf(Object.prototype.toString.call(e))>-1};h.prototype.append=function(e,t){e=f(e),t=p(t);var n=this.map[e];n||(n=[],this.map[e]=n),n.push(t)},h.prototype.delete=function(e){delete this.map[f(e)]},h.prototype.get=function(e){var t=this.map[f(e)];return t?t[0]:null},h.prototype.getAll=function(e){return this.map[f(e)]||[]},h.prototype.has=function(e){return this.map.hasOwnProperty(f(e))},h.prototype.set=function(e,t){this.map[f(e)]=[p(t)]},h.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach((function(n){this.map[n].forEach((function(r){e.call(t,r,n,this)}),this)}),this)},h.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),d(e)},h.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),d(e)},h.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),d(e)},n&&(h.prototype[Symbol.iterator]=h.prototype.entries);var l=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];w.prototype.clone=function(){return new w(this,{body:this._bodyInit})},v.call(w.prototype),v.call(_.prototype),_.prototype.clone=function(){return new _(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new h(this.headers),url:this.url})},_.error=function(){var e=new _(null,{status:0,statusText:""});return e.type="error",e};var c=[301,302,303,307,308];_.redirect=function(e,t){if(-1===c.indexOf(t))throw new RangeError("Invalid status code");return new _(null,{status:t,headers:{location:e}})},e.Headers=h,e.Request=w,e.Response=_,e.fetch=function(e,t){return new Promise((function(n,o){var i=new w(e,t),a=new XMLHttpRequest;a.onload=function(){var e,t,r={status:a.status,statusText:a.statusText,headers:(e=a.getAllResponseHeaders()||"",t=new h,e.split("\r\n").forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}})),t)};r.url="responseURL"in a?a.responseURL:r.headers.get("X-Request-URL");var o="response"in a?a.response:a.responseText;n(new _(o,r))},a.onerror=function(){o(new TypeError("Network request failed"))},a.ontimeout=function(){o(new TypeError("Network request failed"))},a.open(i.method,i.url,!0),"include"===i.credentials&&(a.withCredentials=!0),"responseType"in a&&r&&(a.responseType="blob"),i.headers.forEach((function(e,t){a.setRequestHeader(t,e)})),a.send(void 0===i._bodyInit?null:i._bodyInit)}))},e.fetch.polyfill=!0}function f(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function p(e){return"string"!=typeof e&&(e=String(e)),e}function d(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return n&&(t[Symbol.iterator]=function(){return t}),t}function h(e){this.map={},e instanceof h?e.forEach((function(e,t){this.append(t,e)}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function y(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function g(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function b(e){var t=new FileReader,n=g(t);return t.readAsArrayBuffer(e),n}function m(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function v(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,e)if("string"==typeof e)this._bodyText=e;else if(r&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(o&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(t&&URLSearchParams.prototype.isPrototypeOf(e))this._bodyText=e.toString();else if(i&&r&&s(e))this._bodyArrayBuffer=m(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!i||!ArrayBuffer.prototype.isPrototypeOf(e)&&!u(e))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=m(e)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):t&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},r&&(this.blob=function(){var e=y(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?y(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(b)}),this.text=function(){var e,t,n,r=y(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,n=g(t=new FileReader),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r-1?r:n),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function E(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function _(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new h(t.headers),this.url=t.url||"",this._initBody(e)}}("undefined"!=typeof self?self:this)},22932:(e,t,n)=>{(function(){"use strict";var t=this;function n(e){return"string"==typeof e}function r(e,t,n){return e.call.apply(e.bind,arguments)}function o(e,t,n){if(!e)throw Error();if(2t?1:0}var c,f=Array.prototype.indexOf?function(e,t,n){return Array.prototype.indexOf.call(e,t,n)}:function(e,t,r){if(r=null==r?0:0>r?Math.max(0,e.length+r):r,n(e))return n(t)&&1==t.length?e.indexOf(t,r):-1;for(;rparseFloat(O)){m=String(N);break e}}m=O}var S={};function A(e){if(!S[e]){for(var t=0,n=s(String(m)).split("."),r=s(String(e)).split("."),o=Math.max(n.length,r.length),i=0;0==t&&i",4,2,(function(e,t,n){return he((function(e,t){return e>t}),e,t,n)})),be("<=",4,2,(function(e,t,n){return he((function(e,t){return e<=t}),e,t,n)})),be(">=",4,2,(function(e,t,n){return he((function(e,t){return e>=t}),e,t,n)}));var me=be("=",3,2,(function(e,t,n){return he((function(e,t){return e==t}),e,t,n,!0)}));function ve(e,t,n){this.a=e,this.b=t||1,this.f=n||1}function we(e,t){if(t.a.length&&4!=e.i)throw Error("Primary expression must evaluate to nodeset if filter has predicate(s).");ae.call(this,e.i),this.c=e,this.h=t,this.g=e.g,this.b=e.b}function Ee(e,t){if(t.lengthe.v)throw Error("Function "+e.j+" expects at most "+e.v+" arguments, "+t.length+" given");e.B&&p(t,(function(t,n){if(4!=t.i)throw Error("Argument "+n+" to function "+e.j+" is not of type Nodeset: "+t)})),ae.call(this,e.i),this.h=e,this.c=t,ue(this,e.g||y(t,(function(e){return e.g}))),le(this,e.D&&!t.length||e.C&&!!t.length||y(t,(function(e){return e.b})))}function _e(e,t,n,r,o,i,a,s,u){this.j=e,this.i=t,this.g=n,this.D=r,this.C=o,this.m=i,this.A=a,this.v=void 0!==s?s:a,this.B=!!u}be("!=",3,2,(function(e,t,n){return he((function(e,t){return e!=t}),e,t,n,!0)})),be("and",2,2,(function(e,t,n){return pe(e,n)&&pe(t,n)})),be("or",1,2,(function(e,t,n){return pe(e,n)||pe(t,n)})),a(we),we.prototype.a=function(e){return e=this.c.a(e),Ye(this.h,e)},we.prototype.toString=function(){return"Filter:"+se(this.c)+se(this.h)},a(Ee),Ee.prototype.a=function(e){return this.h.m.apply(null,function(e){return Array.prototype.concat.apply(Array.prototype,arguments)}(e,this.c))},Ee.prototype.toString=function(){var e="Function: "+this.h;if(this.c.length){var t=h(this.c,(function(e,t){return e+se(t)}),"Arguments:");e+=se(t)}return e},_e.prototype.toString=function(){return this.j};var xe={};function Te(e,t,n,r,o,i,a,s){if(xe.hasOwnProperty(e))throw Error("Function already created: "+e+".");xe[e]=new _e(e,t,n,r,!1,o,i,a,s)}function Pe(e,t){switch(this.h=e,this.c=void 0!==t?t:null,this.b=null,e){case"comment":this.b=8;break;case"text":this.b=3;break;case"processing-instruction":this.b=7;break;case"node":break;default:throw Error("Unexpected argument")}}function Oe(e){return"comment"==e||"text"==e||"processing-instruction"==e||"node"==e}function je(e){this.b=e,this.a=0}Te("boolean",2,!1,!1,(function(e,t){return pe(t,e)}),1),Te("ceiling",1,!1,!1,(function(e,t){return Math.ceil(ce(t,e))}),1),Te("concat",3,!1,!1,(function(e,t){return h(function(e,t,n){return 2>=arguments.length?Array.prototype.slice.call(e,t):Array.prototype.slice.call(e,t,n)}(arguments,1),(function(t,n){return t+fe(n,e)}),"")}),2,null),Te("contains",2,!1,!1,(function(e,t,n){return u(fe(t,e),fe(n,e))}),2),Te("count",1,!1,!1,(function(e,t){return t.a(e).l}),1,1,!0),Te("false",2,!1,!1,(function(){return!1}),0),Te("floor",1,!1,!1,(function(e,t){return Math.floor(ce(t,e))}),1),Te("id",4,!1,!1,(function(e,t){var r=9==(o=e.a).nodeType?o:o.ownerDocument,o=fe(t,e).split(/\s+/),i=[];p(o,(function(e){!(e=function(e){if(I){var t=r.all[e];if(t){if(t.nodeType&&e==t.id)return t;if(t.length)return function(e,t){var r;e:{r=e.length;for(var o=n(e)?e.split(""):e,i=0;ir?null:n(e)?e.charAt(r):e[r]}(t,(function(t){return e==t.id}))}return null}return r.getElementById(e)}(e))||0<=f(i,e)||i.push(e)})),i.sort(z);var a=new Q;return p(i,(function(e){ee(a,e)})),a}),1),Te("lang",2,!1,!1,(function(){return!1}),1),Te("last",1,!0,!1,(function(e){if(1!=arguments.length)throw Error("Function last expects ()");return e.f}),0),Te("local-name",3,!1,!0,(function(e,t){var n=t?te(t.a(e)):e.a;return n?n.localName||n.nodeName.toLowerCase():""}),0,1,!0),Te("name",3,!1,!0,(function(e,t){var n=t?te(t.a(e)):e.a;return n?n.nodeName.toLowerCase():""}),0,1,!0),Te("namespace-uri",3,!0,!1,(function(){return""}),0,1,!0),Te("normalize-space",3,!1,!0,(function(e,t){return(t?fe(t,e):F(e.a)).replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")}),0,1),Te("not",2,!1,!1,(function(e,t){return!pe(t,e)}),1),Te("number",1,!1,!0,(function(e,t){return t?ce(t,e):+F(e.a)}),0,1),Te("position",1,!0,!1,(function(e){return e.b}),0),Te("round",1,!1,!1,(function(e,t){return Math.round(ce(t,e))}),1),Te("starts-with",2,!1,!1,(function(e,t,n){return t=fe(t,e),e=fe(n,e),0==t.lastIndexOf(e,0)}),2),Te("string",3,!1,!0,(function(e,t){return t?fe(t,e):F(e.a)}),0,1),Te("string-length",1,!1,!0,(function(e,t){return(t?fe(t,e):F(e.a)).length}),0,1),Te("substring",3,!1,!1,(function(e,t,n,r){if(n=ce(n,e),isNaN(n)||1/0==n||-1/0==n)return"";if(r=r?ce(r,e):1/0,isNaN(r)||-1/0===r)return"";n=Math.round(n)-1;var o=Math.max(n,0);return e=fe(t,e),1/0==r?e.substring(o):e.substring(o,n+Math.round(r))}),2,3),Te("substring-after",3,!1,!1,(function(e,t,n){return t=fe(t,e),e=fe(n,e),-1==(n=t.indexOf(e))?"":t.substring(n+e.length)}),2),Te("substring-before",3,!1,!1,(function(e,t,n){return t=fe(t,e),e=fe(n,e),-1==(e=t.indexOf(e))?"":t.substring(0,e)}),2),Te("sum",1,!1,!1,(function(e,t){for(var n=re(t.a(e)),r=0,o=ie(n);o;o=ie(n))r+=+F(o);return r}),1,1,!0),Te("translate",3,!1,!1,(function(e,t,n,r){t=fe(t,e),n=fe(n,e);var o=fe(r,e);for(e={},r=0;r]=|\s+|./g,Se=/^\s/;function Ae(e,t){return e.b[e.a+(t||0)]}function Re(e){return e.b[e.a++]}function ke(e){return e.b.length<=e.a}function Ie(e){ae.call(this,3),this.c=e.substring(1,e.length-1)}function De(e,t){var n;this.j=e.toLowerCase(),n="*"==this.j?"*":"http://www.w3.org/1999/xhtml",this.c=t?t.toLowerCase():n}function Me(e,t){if(ae.call(this,e.i),this.h=e,this.c=t,this.g=e.g,this.b=e.b,1==this.c.length){var n=this.c[0];n.u||n.c!=Ve||"*"!=(n=n.o).f()&&(this.f={name:n.f(),s:null})}}function Be(){ae.call(this,4)}function Fe(){ae.call(this,4)}function Ce(e){return"/"==e||"//"==e}function Ue(e){ae.call(this,4),this.c=e,ue(this,y(this.c,(function(e){return e.g}))),le(this,y(this.c,(function(e){return e.b})))}function Le(e,t){this.a=e,this.b=!!t}function Ye(e,t,n){for(n=n||0;n(e=Re(e.a)).length)throw Error("Unclosed literal string");return new Ie(e)}function st(e){var t,n,r=[];if(Ce(Ae(e.a))){if(t=Re(e.a),n=Ae(e.a),"/"==t&&(ke(e.a)||"."!=n&&".."!=n&&"@"!=n&&"*"!=n&&!/(?![0-9])[\w]/.test(n)))return new Be;n=new Be,rt(e,"Missing next location step."),t=ut(e,t),r.push(t)}else{e:{switch(n=(t=Ae(e.a)).charAt(0)){case"$":throw Error("Variable reference not allowed in HTML XPath");case"(":Re(e.a),t=nt(e),rt(e,'unclosed "("'),ot(e,")");break;case'"':case"'":t=at(e);break;default:if(isNaN(+t)){if(Oe(t)||!/(?![0-9])[\w]/.test(n)||"("!=Ae(e.a,1)){t=null;break e}for(t=Re(e.a),t=xe[t]||null,Re(e.a),n=[];")"!=Ae(e.a)&&(rt(e,"Missing function argument list."),n.push(nt(e)),","==Ae(e.a));)Re(e.a);rt(e,"Unclosed function argument list."),it(e),t=new Ee(t,n)}else t=new et(+Re(e.a))}"["==Ae(e.a)&&(t=new we(t,n=new Le(lt(e))))}if(t){if(!Ce(Ae(e.a)))return t;n=t}else t=ut(e,"/"),n=new Fe,r.push(t)}for(;Ce(Ae(e.a));)t=Re(e.a),rt(e,"Missing next location step."),t=ut(e,t),r.push(t);return new Me(n,r)}function ut(e,t){var n,r,o,i;if("/"!=t&&"//"!=t)throw Error('Step op should be "/" or "//"');if("."==Ae(e.a))return r=new Xe(Ke,new Pe("node")),Re(e.a),r;if(".."==Ae(e.a))return r=new Xe(Qe,new Pe("node")),Re(e.a),r;if("@"==Ae(e.a))i=Ve,Re(e.a),rt(e,"Missing attribute name");else if("::"==Ae(e.a,1)){if(!/(?![0-9])[\w]/.test(Ae(e.a).charAt(0)))throw Error("Bad token: "+Re(e.a));if(n=Re(e.a),!(i=$e[n]||null))throw Error("No axis with name: "+n);Re(e.a),rt(e,"Missing node name")}else i=ze;if(n=Ae(e.a),!/(?![0-9])[\w\*]/.test(n.charAt(0)))throw Error("Bad token: "+Re(e.a));if("("==Ae(e.a,1)){if(!Oe(n))throw Error("Invalid node type: "+n);if(!Oe(n=Re(e.a)))throw Error("Invalid type name: "+n);ot(e,"("),rt(e,"Bad nodetype");var a=null;'"'!=(o=Ae(e.a).charAt(0))&&"'"!=o||(a=at(e)),rt(e,"Bad nodetype"),it(e),n=new Pe(n,a)}else if(-1==(o=(n=Re(e.a)).indexOf(":")))n=new De(n);else{var s;if("*"==(a=n.substring(0,o)))s="*";else if(!(s=e.b(a)))throw Error("Namespace prefix not declared: "+a);n=new De(n=n.substr(o+1),s)}return o=new Le(lt(e),i.a),r||new Xe(i,n,o,"//"==t)}function lt(e){for(var t=[];"["==Ae(e.a);){Re(e.a),rt(e,"Missing predicate expression.");var n=nt(e);t.push(n),rt(e,"Unclosed predicate expression."),ot(e,"]")}return t}function ct(e){if("-"==Ae(e.a))return Re(e.a),new Ze(ct(e));var t=st(e);if("|"!=Ae(e.a))e=t;else{for(t=[t];"|"==Re(e.a);)rt(e,"Missing next union location path."),t.push(st(e));e.a.a--,e=new Ue(t)}return e}function ft(e){switch(e.nodeType){case 1:return function(e,t){var n=Array.prototype.slice.call(arguments,1);return function(){var t=n.slice();return t.push.apply(t,arguments),e.apply(this,t)}}(dt,e);case 9:return ft(e.documentElement);case 11:case 10:case 6:case 12:return pt;default:return e.parentNode?ft(e.parentNode):pt}}function pt(){return null}function dt(e,t){if(e.prefix==t)return e.namespaceURI||"http://www.w3.org/1999/xhtml";var n=e.getAttributeNode("xmlns:"+t);return n&&n.specified?n.value||null:e.parentNode&&9!=e.parentNode.nodeType?dt(e.parentNode,t):null}function ht(e,t){if(!e.length)throw Error("Empty XPath expression.");var n=function(e){e=e.match(Ne);for(var t=0;t=n.length?null:n[i++]},this.snapshotItem=function(e){if(6!=t&&7!=t)throw Error("snapshotItem called with wrong result type");return e>=n.length||0>e?null:n[e]}}function gt(e){this.lookupNamespaceURI=ft(e)}function bt(e,n){var r=e||t,o=r.Document&&r.Document.prototype||r.document;o.evaluate&&!n||(r.XPathResult=yt,o.evaluate=function(e,t,n,r){return new ht(e,n).evaluate(t,r)},o.createExpression=function(e,t){return new ht(e,t)},o.createNSResolver=function(e){return new gt(e)})}a(Ze),Ze.prototype.a=function(e){return-ce(this.c,e)},Ze.prototype.toString=function(){return"Unary Expression: -"+se(this.c)},a(et),et.prototype.a=function(){return this.c},et.prototype.toString=function(){return"Number: "+this.c},yt.ANY_TYPE=0,yt.NUMBER_TYPE=1,yt.STRING_TYPE=2,yt.BOOLEAN_TYPE=3,yt.UNORDERED_NODE_ITERATOR_TYPE=4,yt.ORDERED_NODE_ITERATOR_TYPE=5,yt.UNORDERED_NODE_SNAPSHOT_TYPE=6,yt.ORDERED_NODE_SNAPSHOT_TYPE=7,yt.ANY_UNORDERED_NODE_TYPE=8,yt.FIRST_ORDERED_NODE_TYPE=9;var mt,vt=["wgxpath","install"],wt=t;vt[0]in wt||!wt.execScript||wt.execScript("var "+vt[0]);for(;vt.length&&(mt=vt.shift());)vt.length||void 0===bt?wt=wt[mt]?wt[mt]:wt[mt]={}:wt[mt]=bt;e.exports.install=bt,e.exports.XPathResultType={ANY_TYPE:0,NUMBER_TYPE:1,STRING_TYPE:2,BOOLEAN_TYPE:3,UNORDERED_NODE_ITERATOR_TYPE:4,ORDERED_NODE_ITERATOR_TYPE:5,UNORDERED_NODE_SNAPSHOT_TYPE:6,ORDERED_NODE_SNAPSHOT_TYPE:7,ANY_UNORDERED_NODE_TYPE:8,FIRST_ORDERED_NODE_TYPE:9}}).call(n.g)},99196:e=>{"use strict";e.exports=window.React},92819:e=>{"use strict";e.exports=window.lodash},65736:e=>{"use strict";e.exports=window.wp.i18n},85890:e=>{"use strict";e.exports=window.yoast.propTypes},98487:e=>{"use strict";e.exports=window.yoast.styledComponents}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var r=n(56101);(window.yoast=window.yoast||{}).helpers=r})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/jed.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/jed.js new file mode 100644 index 00000000..954ff130 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/jed.js @@ -0,0 +1 @@ +(()=>{var t={42353:function(t,e){!function(r,n){var i=Array.prototype,s=Object.prototype,o=i.slice,l=s.hasOwnProperty,a=i.forEach,h={},c={forEach:function(t,e,r){var n,i,s;if(null!==t)if(a&&t.forEach===a)t.forEach(e,r);else if(t.length===+t.length){for(n=0,i=t.length;no.length?(this.options.missing_key_callback&&this.options.missing_key_callback(h,t),l=[r,n],!0===this.options.debug&&console.log(l[p(y)(i)]),l[p()(i)]):(l=o[a])||(l=[r,n])[p()(i)]}});var g,y=function(){function t(t){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()}function e(t,e){for(var r=[];e>0;r[--e]=t);return r.join("")}var r=function(){return r.cache.hasOwnProperty(arguments[0])||(r.cache[arguments[0]]=r.parse(arguments[0])),r.format.call(null,r.cache[arguments[0]],arguments)};return r.format=function(r,n){var i,s,o,l,a,h,c,u=1,p=r.length,f="",g=[];for(s=0;s=0?"+"+i:i,h=l[4]?"0"==l[4]?"0":l[4].charAt(1):" ",c=l[6]-String(i).length,a=l[6]?e(h,c):"",g.push(l[5]?i+a:a+i)}return g.join("")},r.cache={},r.parse=function(t){for(var e=t,r=[],n=[],i=0;e;){if(null!==(r=/^[^\x25]+/.exec(e)))n.push(r[0]);else if(null!==(r=/^\x25{2}/.exec(e)))n.push("%");else{if(null===(r=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(e)))throw"[sprintf] huh?";if(r[2]){i|=1;var s=[],o=r[2],l=[];if(null===(l=/^([a-z_][a-z_\d]*)/i.exec(o)))throw"[sprintf] huh?";for(s.push(l[1]);""!==(o=o.substring(l[0].length));)if(null!==(l=/^\.([a-z_][a-z_\d]*)/i.exec(o)))s.push(l[1]);else{if(null===(l=/^\[(\d+)\]/.exec(o)))throw"[sprintf] huh?";s.push(l[1])}r[2]=s}else i|=2;if(3===i)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";n.push(r)}e=e.substring(r[0].length)}return n},r}();u.parse_plural=function(t,e){return t=t.replace(/n/g,e),u.parse_expression(t)},u.sprintf=function(t,e){return"[object Array]"=={}.toString.call(e)?function(t,e){return e.unshift(t),y.apply(null,e)}(t,[].slice.call(e)):y.apply(this,[].slice.call(arguments))},u.prototype.sprintf=function(){return u.sprintf.apply(this,arguments)},(u.PF={}).parse=function(t){var e=u.PF.extractPluralExpr(t);return u.PF.parser.parse.call(u.PF.parser,e)},u.PF.compile=function(t){var e=u.PF.parse(t);return function(t){return!0===(r=u.PF.interpreter(e)(t))?1:r||0;var r}},u.PF.interpreter=function(t){return function(e){switch(t.type){case"GROUP":return u.PF.interpreter(t.expr)(e);case"TERNARY":return u.PF.interpreter(t.expr)(e)?u.PF.interpreter(t.truthy)(e):u.PF.interpreter(t.falsey)(e);case"OR":return u.PF.interpreter(t.left)(e)||u.PF.interpreter(t.right)(e);case"AND":return u.PF.interpreter(t.left)(e)&&u.PF.interpreter(t.right)(e);case"LT":return u.PF.interpreter(t.left)(e)u.PF.interpreter(t.right)(e);case"LTE":return u.PF.interpreter(t.left)(e)<=u.PF.interpreter(t.right)(e);case"GTE":return u.PF.interpreter(t.left)(e)>=u.PF.interpreter(t.right)(e);case"EQ":return u.PF.interpreter(t.left)(e)==u.PF.interpreter(t.right)(e);case"NEQ":return u.PF.interpreter(t.left)(e)!=u.PF.interpreter(t.right)(e);case"MOD":return u.PF.interpreter(t.left)(e)%u.PF.interpreter(t.right)(e);case"VAR":return e;case"NUM":return t.val;default:throw new Error("Invalid Token found.")}}},u.PF.extractPluralExpr=function(t){t=t.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(t)||(t=t.concat(";"));var e,r=/nplurals\=(\d+);/,n=t.match(r);if(!(n.length>1))throw new Error("nplurals not found in plural_forms string: "+t);if(n[1],!((e=(t=t.replace(r,"")).match(/plural\=(.*);/))&&e.length>1))throw new Error("`plural` expression not found: "+t);return e[1]},u.PF.parser=((g={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(t,e,r,n,i,s,o){var l=s.length-1;switch(i){case 1:return{type:"GROUP",expr:s[l-1]};case 2:this.$={type:"TERNARY",expr:s[l-4],truthy:s[l-2],falsey:s[l]};break;case 3:this.$={type:"OR",left:s[l-2],right:s[l]};break;case 4:this.$={type:"AND",left:s[l-2],right:s[l]};break;case 5:this.$={type:"LT",left:s[l-2],right:s[l]};break;case 6:this.$={type:"LTE",left:s[l-2],right:s[l]};break;case 7:this.$={type:"GT",left:s[l-2],right:s[l]};break;case 8:this.$={type:"GTE",left:s[l-2],right:s[l]};break;case 9:this.$={type:"NEQ",left:s[l-2],right:s[l]};break;case 10:this.$={type:"EQ",left:s[l-2],right:s[l]};break;case 11:this.$={type:"MOD",left:s[l-2],right:s[l]};break;case 12:this.$={type:"GROUP",expr:s[l-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(t)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(t,e){throw new Error(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,o="",l=0,a=0,h=0;this.lexer.setInput(t),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var c=this.lexer.yylloc;function u(){var t;return"number"!=typeof(t=e.lexer.lex()||1)&&(t=e.symbols_[t]||t),t}i.push(c),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var p,f,g,y,d,x,m,_,b,w={};;){if(g=r[r.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=u()),y=s[g]&&s[g][p]),void 0===y||!y.length||!y[0]){if(!h){for(x in b=[],s[g])this.terminals_[x]&&x>2&&b.push("'"+this.terminals_[x]+"'");var P="";P=this.lexer.showPosition?"Parse error on line "+(l+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+b.join(", ")+", got '"+this.terminals_[p]+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(P,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:c,expected:b})}if(3==h){if(1==p)throw new Error(P||"Parsing halted.");a=this.lexer.yyleng,o=this.lexer.yytext,l=this.lexer.yylineno,c=this.lexer.yylloc,p=u()}for(;!(2..toString()in s[g]);){if(0==g)throw new Error(P||"Parsing halted.");1,r.length=r.length-2,n.length=n.length-1,i.length=i.length-1,g=r[r.length-1]}f=p,p=2,y=s[g=r[r.length-1]]&&s[g][2],h=3}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:r.push(p),n.push(this.lexer.yytext),i.push(this.lexer.yylloc),r.push(y[1]),p=null,f?(p=f,f=null):(a=this.lexer.yyleng,o=this.lexer.yytext,l=this.lexer.yylineno,c=this.lexer.yylloc,h>0&&h--);break;case 2:if(m=this.productions_[y[1]][1],w.$=n[n.length-m],w._$={first_line:i[i.length-(m||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(m||1)].first_column,last_column:i[i.length-1].last_column},void 0!==(d=this.performAction.call(w,o,a,l,this.yy,y[1],n,i)))return d;m&&(r=r.slice(0,-1*m*2),n=n.slice(0,-1*m),i=i.slice(0,-1*m)),r.push(this.productions_[y[1]][0]),n.push(w.$),i.push(w._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}}).lexer={EOF:1,parseError:function(t,e){if(!this.yy.parseError)throw new Error(t);this.yy.parseError(t,e)},setInput:function(t){return this._input=t,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.match+=t,this.matched+=t,t.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),t},unput:function(t){return this._input=t+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},next:function(){if(this.done)return this.EOF;var t,e;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;n=/,/^/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}},g),t.exports&&(e=t.exports=u),e.Jed=u}()}},e={},r=function r(n){var i=e[n];if(void 0!==i)return i.exports;var s=e[n]={exports:{}};return t[n].call(s.exports,s,s.exports,r),s.exports}(42353);(window.yoast=window.yoast||{}).jed=r})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/propTypes.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/propTypes.js new file mode 100644 index 00000000..431369cb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/propTypes.js @@ -0,0 +1 @@ +(()=>{var e={92703:(e,r,t)=>{"use strict";var o=t(50414);function n(){}function p(){}p.resetWarningCache=n,e.exports=function(){function e(e,r,t,n,p,s){if(s!==o){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function r(){return e}e.isRequired=e;var t={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:r,element:e,elementType:e,instanceOf:r,node:e,objectOf:r,oneOf:r,oneOfType:r,shape:r,exact:r,checkPropTypes:p,resetWarningCache:n};return t.PropTypes=t,t}},45697:(e,r,t)=>{e.exports=t(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},r={},t=function t(o){var n=r[o];if(void 0!==n)return n.exports;var p=r[o]={exports:{}};return e[o](p,p.exports,t),p.exports}(45697);(window.yoast=window.yoast||{}).propTypes=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/reactHelmet.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/reactHelmet.js new file mode 100644 index 00000000..d7386035 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/reactHelmet.js @@ -0,0 +1 @@ +(()=>{var e={27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(e){n[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var i,a,u=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c{var t="undefined"!=typeof Element,r="function"==typeof Map,n="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,a){if(e===a)return!0;if(e&&a&&"object"==typeof e&&"object"==typeof a){if(e.constructor!==a.constructor)return!1;var u,c,s,f;if(Array.isArray(e)){if((u=e.length)!=a.length)return!1;for(c=u;0!=c--;)if(!i(e[c],a[c]))return!1;return!0}if(r&&e instanceof Map&&a instanceof Map){if(e.size!==a.size)return!1;for(f=e.entries();!(c=f.next()).done;)if(!a.has(c.value[0]))return!1;for(f=e.entries();!(c=f.next()).done;)if(!i(c.value[1],a.get(c.value[0])))return!1;return!0}if(n&&e instanceof Set&&a instanceof Set){if(e.size!==a.size)return!1;for(f=e.entries();!(c=f.next()).done;)if(!a.has(c.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(a)){if((u=e.length)!=a.length)return!1;for(c=u;0!=c--;)if(e[c]!==a[c])return!1;return!0}if(e.constructor===RegExp)return e.source===a.source&&e.flags===a.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===a.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===a.toString();if((u=(s=Object.keys(e)).length)!==Object.keys(a).length)return!1;for(c=u;0!=c--;)if(!Object.prototype.hasOwnProperty.call(a,s[c]))return!1;if(t&&e instanceof Element)return!1;for(c=u;0!=c--;)if(("_owner"!==s[c]&&"__v"!==s[c]&&"__o"!==s[c]||!e.$$typeof)&&!i(e[s[c]],a[s[c]]))return!1;return!0}return e!=e&&a!=a}e.exports=function(e,t){try{return i(e,t)}catch(e){if((e.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw e}}},83524:(e,t,r)=>{"use strict";var n,o=r(99196),i=(n=o)&&"object"==typeof n&&"default"in n?n.default:n;function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var u=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,r){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==r&&"function"!=typeof r)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(n){if("function"!=typeof n)throw new Error("Expected WrappedComponent to be a React component.");var c,s=[];function f(){c=e(s.map((function(e){return e.props}))),l.canUseDOM?t(c):r&&(c=r(c))}var l=function(e){var t,r;function o(){return e.apply(this,arguments)||this}r=e,(t=o).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,o.peek=function(){return c},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=c;return c=void 0,s=[],e};var a=o.prototype;return a.UNSAFE_componentWillMount=function(){s.push(this),f()},a.componentDidUpdate=function(){f()},a.componentWillUnmount=function(){var e=s.indexOf(this);s.splice(e,1),f()},a.render=function(){return i.createElement(n,this.props)},o}(o.PureComponent);return a(l,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(n)+")"),a(l,"canUseDOM",u),l}}},99196:e=>{"use strict";e.exports=window.React}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";r.r(n),r.d(n,{Helmet:()=>re,default:()=>ne});const e=window.yoast.propTypes;var t,o,i,a,u=r.n(e),c=r(83524),s=r.n(c),f=r(69590),l=r.n(f),p=r(99196),d=r.n(p),y=r(27418),h=r.n(y),b="bodyAttributes",m="htmlAttributes",T={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},g=(Object.keys(T).map((function(e){return T[e]})),"charset"),v="cssText",w="href",O="innerHTML",A="itemprop",C="rel",S={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},j=Object.keys(S).reduce((function(e,t){return e[S[t]]=t,e}),{}),E=[T.NOSCRIPT,T.SCRIPT,T.STYLE],P="data-react-helmet",k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x=function(){function e(e,t){for(var r=0;r=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r},M=function(e){return!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},N=function(e){var t=B(e,T.TITLE),r=B(e,"titleTemplate");if(r&&t)return r.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var n=B(e,"defaultTitle");return t||n||void 0},R=function(e){return B(e,"onChangeClientState")||function(){}},_=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return L({},e,t)}),{})},H=function(e,t){return t.filter((function(e){return void 0!==e[T.BASE]})).map((function(e){return e[T.BASE]})).reverse().reduce((function(t,r){if(!t.length)for(var n=Object.keys(r),o=0;o=0;r--){var n=e[r];if(n.hasOwnProperty(t))return n[t]}return null},D=(t=Date.now(),function(e){var r=Date.now();r-t>16?(t=r,e(r)):setTimeout((function(){D(e)}),0)}),F=function(e){return clearTimeout(e)},Y="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||D:r.g.requestAnimationFrame||D,U="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||F:r.g.cancelAnimationFrame||F,z=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},K=null,V=function(e,t){var r=e.baseTag,n=e.bodyAttributes,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,u=e.noscriptTags,c=e.onChangeClientState,s=e.scriptTags,f=e.styleTags,l=e.title,p=e.titleAttributes;G(T.BODY,n),G(T.HTML,o),$(l,p);var d={baseTag:J(T.BASE,r),linkTags:J(T.LINK,i),metaTags:J(T.META,a),noscriptTags:J(T.NOSCRIPT,u),scriptTags:J(T.SCRIPT,s),styleTags:J(T.STYLE,f)},y={},h={};Object.keys(d).forEach((function(e){var t=d[e],r=t.newTags,n=t.oldTags;r.length&&(y[e]=r),n.length&&(h[e]=d[e].oldTags)})),t&&t(),c(e,y,h)},W=function(e){return Array.isArray(e)?e.join(""):e},$=function(e,t){void 0!==e&&document.title!==e&&(document.title=W(e)),G(T.TITLE,t)},G=function(e,t){var r=document.getElementsByTagName(e)[0];if(r){for(var n=r.getAttribute(P),o=n?n.split(","):[],i=[].concat(o),a=Object.keys(t),u=0;u=0;l--)r.removeAttribute(i[l]);o.length===i.length?r.removeAttribute(P):r.getAttribute(P)!==a.join(",")&&r.setAttribute(P,a.join(","))}},J=function(e,t){var r=document.head||document.querySelector(T.HEAD),n=r.querySelectorAll(e+"["+P+"]"),o=Array.prototype.slice.call(n),i=[],a=void 0;return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var n in t)if(t.hasOwnProperty(n))if(n===O)r.innerHTML=t.innerHTML;else if(n===v)r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText));else{var u=void 0===t[n]?"":t[n];r.setAttribute(n,u)}r.setAttribute(P,"true"),o.some((function(e,t){return a=t,r.isEqualNode(e)}))?o.splice(a,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},Q=function(e){return Object.keys(e).reduce((function(t,r){var n=void 0!==e[r]?r+'="'+e[r]+'"':""+r;return t?t+" "+n:n}),"")},X=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,r){return t[S[r]||r]=e[r],t}),t)},Z=function(e,t,r){switch(e){case T.TITLE:return{toComponent:function(){return e=t.title,r=t.titleAttributes,(n={key:e})[P]=!0,o=X(r,n),[d().createElement(T.TITLE,o,e)];var e,r,n,o},toString:function(){return function(e,t,r,n){var o=Q(r),i=W(t);return o?"<"+e+" "+P+'="true" '+o+">"+M(i,n)+"":"<"+e+" "+P+'="true">'+M(i,n)+""}(e,t.title,t.titleAttributes,r)}};case b:case m:return{toComponent:function(){return X(t)},toString:function(){return Q(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,r){var n,o=((n={key:r})[P]=!0,n);return Object.keys(t).forEach((function(e){var r=S[e]||e;if(r===O||r===v){var n=t.innerHTML||t.cssText;o.dangerouslySetInnerHTML={__html:n}}else o[r]=t[e]})),d().createElement(e,o)}))}(e,t)},toString:function(){return function(e,t,r){return t.reduce((function(t,n){var o=Object.keys(n).filter((function(e){return!(e===O||e===v)})).reduce((function(e,t){var o=void 0===n[t]?t:t+'="'+M(n[t],r)+'"';return e?e+" "+o:o}),""),i=n.innerHTML||n.cssText||"",a=-1===E.indexOf(e);return t+"<"+e+" "+P+'="true" '+o+(a?"/>":">"+i+"")}),"")}(e,t,r)}}}},ee=function(e){var t=e.baseTag,r=e.bodyAttributes,n=e.encode,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,u=e.noscriptTags,c=e.scriptTags,s=e.styleTags,f=e.title,l=void 0===f?"":f,p=e.titleAttributes;return{base:Z(T.BASE,t,n),bodyAttributes:Z(b,r,n),htmlAttributes:Z(m,o,n),link:Z(T.LINK,i,n),meta:Z(T.META,a,n),noscript:Z(T.NOSCRIPT,u,n),script:Z(T.SCRIPT,c,n),style:Z(T.STYLE,s,n),title:Z(T.TITLE,{title:l,titleAttributes:p},n)}},te=s()((function(e){return{baseTag:H([w,"target"],e),bodyAttributes:_(b,e),defer:B(e,"defer"),encode:B(e,"encodeSpecialCharacters"),htmlAttributes:_(m,e),linkTags:q(T.LINK,[C,w],e),metaTags:q(T.META,["name",g,"http-equiv","property",A],e),noscriptTags:q(T.NOSCRIPT,[O],e),onChangeClientState:R(e),scriptTags:q(T.SCRIPT,["src",O],e),styleTags:q(T.STYLE,[v],e),title:N(e),titleAttributes:_("titleAttributes",e)}}),(function(e){K&&U(K),e.defer?K=Y((function(){V(e,(function(){K=null}))})):(V(e),K=null)}),ee)((function(){return null})),re=(o=te,a=i=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!l()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case T.SCRIPT:case T.NOSCRIPT:return{innerHTML:t};case T.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,r=e.child,n=e.arrayTypeChildren,o=e.newChildProps,i=e.nestedChildren;return L({},n,((t={})[r.type]=[].concat(n[r.type]||[],[L({},o,this.mapNestedChildrenToProps(r,i))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,r,n=e.child,o=e.newProps,i=e.newChildProps,a=e.nestedChildren;switch(n.type){case T.TITLE:return L({},o,((t={})[n.type]=a,t.titleAttributes=L({},i),t));case T.BODY:return L({},o,{bodyAttributes:L({},i)});case T.HTML:return L({},o,{htmlAttributes:L({},i)})}return L({},o,((r={})[n.type]=L({},i),r))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var r=L({},t);return Object.keys(e).forEach((function(t){var n;r=L({},r,((n={})[t]=e[t],n))})),r},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var r=this,n={};return d().Children.forEach(e,(function(e){if(e&&e.props){var o=e.props,i=o.children,a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,r){return t[j[r]||r]=e[r],t}),t)}(I(o,["children"]));switch(r.warnOnInvalidChildren(e,i),e.type){case T.LINK:case T.META:case T.NOSCRIPT:case T.SCRIPT:case T.STYLE:n=r.flattenArrayTypeChildren({child:e,arrayTypeChildren:n,newChildProps:a,nestedChildren:i});break;default:t=r.mapObjectTypeChildren({child:e,newProps:t,newChildProps:a,nestedChildren:i})}}})),t=this.mapArrayTypeChildrenToProps(n,t)},t.prototype.render=function(){var e=this.props,t=e.children,r=I(e,["children"]),n=L({},r);return t&&(n=this.mapChildrenToProps(t,n)),d().createElement(o,n)},x(t,null,[{key:"canUseDOM",set:function(e){o.canUseDOM=e}}]),t}(d().Component),i.propTypes={base:u().object,bodyAttributes:u().object,children:u().oneOfType([u().arrayOf(u().node),u().node]),defaultTitle:u().string,defer:u().bool,encodeSpecialCharacters:u().bool,htmlAttributes:u().object,link:u().arrayOf(u().object),meta:u().arrayOf(u().object),noscript:u().arrayOf(u().object),onChangeClientState:u().func,script:u().arrayOf(u().object),style:u().arrayOf(u().object),title:u().string,titleAttributes:u().object,titleTemplate:u().string},i.defaultProps={defer:!0,encodeSpecialCharacters:!0},i.peek=o.peek,i.rewind=function(){var e=o.rewind();return e||(e=ee({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},a);re.renderStatic=re.rewind;const ne=re})(),(window.yoast=window.yoast||{}).reactHelmet=n})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/redux.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/redux.js new file mode 100644 index 00000000..3430b0d0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/redux.js @@ -0,0 +1 @@ +(()=>{"use strict";var r={d:(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o:(r,t)=>Object.prototype.hasOwnProperty.call(r,t),r:r=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})}},t={};function e(r){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},e(r)}function n(r){var t=function(r,t){if("object"!=e(r)||!r)return r;var n=r[Symbol.toPrimitive];if(void 0!==n){var o=n.call(r,"string");if("object"!=e(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}(r);return"symbol"==e(t)?t:String(t)}function o(r,t){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.push.apply(e,n)}return e}function i(r){for(var t=1;ty,applyMiddleware:()=>v,bindActionCreators:()=>b,combineReducers:()=>a,compose:()=>s,createStore:()=>p});var u="function"==typeof Symbol&&Symbol.observable||"@@observable",c=function(){return Math.random().toString(36).substring(7).split("").join(".")},y={INIT:"@@redux/INIT"+c(),REPLACE:"@@redux/REPLACE"+c(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+c()}};function p(r,t,e){var n;if("function"==typeof t&&"function"==typeof e||"function"==typeof e&&"function"==typeof arguments[3])throw new Error(f(0));if("function"==typeof t&&void 0===e&&(e=t,t=void 0),void 0!==e){if("function"!=typeof e)throw new Error(f(1));return e(p)(r,t)}if("function"!=typeof r)throw new Error(f(2));var o=r,i=t,c=[],a=c,l=!1;function b(){a===c&&(a=c.slice())}function s(){if(l)throw new Error(f(3));return i}function v(r){if("function"!=typeof r)throw new Error(f(4));if(l)throw new Error(f(5));var t=!0;return b(),a.push(r),function(){if(t){if(l)throw new Error(f(6));t=!1,b();var e=a.indexOf(r);a.splice(e,1),c=null}}}function w(r){if(!function(r){if("object"!=typeof r||null===r)return!1;for(var t=r;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(r)===t}(r))throw new Error(f(7));if(void 0===r.type)throw new Error(f(8));if(l)throw new Error(f(9));try{l=!0,i=o(i,r)}finally{l=!1}for(var t=c=a,e=0;e{"use strict";var e={65139:(e,t,n)=>{function r(e){return function(t){var n=t.dispatch,r=t.getState;return function(t){return function(i){return"function"==typeof i?i(n,r,e):t(i)}}}}n.d(t,{Z:()=>o});var i=r();i.withExtraArgument=r;const o=i},20573:(e,t,n)=>{n.d(t,{P1:()=>a});var r="NOT_FOUND",i=function(e,t){return e===t};function o(e,t){var n,o,u="object"==typeof t?t:{equalityCheck:t},a=u.equalityCheck,c=void 0===a?i:a,f=u.maxSize,l=void 0===f?1:f,s=u.resultEqualityCheck,d=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var r=t.length,i=0;i-1){var o=n[i];return i>0&&(n.splice(i,1),n.unshift(o)),o.value}return r}return{get:i,put:function(t,o){i(t)===r&&(n.unshift({key:t,value:o}),n.length>e&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(l,d);function v(){var t=p.get(arguments);if(t===r){if(t=e.apply(null,arguments),s){var n=p.getEntries().find((function(e){return s(e.value,t)}));n&&(t=n.value)}p.put(arguments,t)}return t}return v.clearCache=function(){return p.clear()},v}function u(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{e.exports=window.yoast.redux},12902:(e,t,n)=>{function r(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r3?t.i-4:t.i:Array.isArray(e)?1:d(e)?2:p(e)?3:0}function f(e,t){return 2===c(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function l(e,t,n){var r=c(e);2===r?e.set(t,n):3===r?(e.delete(t),e.add(n)):e[t]=n}function s(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function d(e){return N&&e instanceof Map}function p(e){return W&&e instanceof Set}function v(e){return e.o||e.t}function y(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=$(e);delete t[K];for(var n=J(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=g),Object.freeze(e),t&&a(e,(function(e,t){return h(t,!0)}),!0)),e}function g(){r(2)}function b(e){return null==e||"object"!=typeof e||Object.isFrozen(e)}function m(e){var t=G[e];return t||r(18,e),t}function w(){return F}function O(e,t){t&&(m("Patches"),e.u=[],e.s=[],e.v=t)}function P(e){j(e),e.p.forEach(S),e.p=null}function j(e){e===F&&(F=e.l)}function A(e){return F={p:[],l:F,h:e,m:!0,_:0}}function S(e){var t=e[K];0===t.i||1===t.i?t.j():t.O=!0}function E(e,t){t._=t.p.length;var n=t.p[0],i=void 0!==e&&e!==n;return t.h.g||m("ES5").S(t,e,i),i?(n[K].P&&(P(t),r(4)),o(e)&&(e=k(t,e),t.l||x(t,e)),t.u&&m("Patches").M(n[K].t,e,t.u,t.s)):e=k(t,n,[]),P(t),t.u&&t.v(t.u,t.s),e!==X?e:void 0}function k(e,t,n){if(b(t))return t;var r=t[K];if(!r)return a(t,(function(i,o){return _(e,r,t,i,o,n)}),!0),t;if(r.A!==e)return t;if(!r.P)return x(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=4===r.i||5===r.i?r.o=y(r.k):r.o;a(3===r.i?new Set(i):i,(function(t,o){return _(e,r,i,t,o,n)})),x(e,i,!1),n&&e.u&&m("Patches").R(r,n,e.u,e.s)}return r.o}function _(e,t,n,r,u,a){if(i(u)){var c=k(e,u,a&&t&&3!==t.i&&!f(t.D,r)?a.concat(r):void 0);if(l(n,r,c),!i(c))return;e.m=!1}if(o(u)&&!b(u)){if(!e.h.F&&e._<1)return;k(e,u),t&&t.A.l||x(e,u)}}function x(e,t,n){void 0===n&&(n=!1),e.h.F&&e.m&&h(t,n)}function I(e,t){var n=e[K];return(n?v(n):e)[t]}function M(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function D(e){e.P||(e.P=!0,e.l&&D(e.l))}function T(e){e.o||(e.o=y(e.t))}function R(e,t,n){var r=d(t)?m("MapSet").N(t,n):p(t)?m("MapSet").T(t,n):e.g?function(e,t){var n=Array.isArray(e),r={i:n?1:0,A:t?t.A:w(),P:!1,I:!1,D:{},l:t,t:e,k:null,o:null,j:null,C:!1},i=r,o=H;n&&(i=[r],o=Q);var u=Proxy.revocable(i,o),a=u.revoke,c=u.proxy;return r.k=c,r.j=a,c}(t,n):m("ES5").J(t,n);return(n?n.A:w()).p.push(r),r}function C(e){return i(e)||r(22,e),function e(t){if(!o(t))return t;var n,r=t[K],i=c(t);if(r){if(!r.P&&(r.i<4||!m("ES5").K(r)))return r.t;r.I=!0,n=z(t,i),r.I=!1}else n=z(t,i);return a(n,(function(t,i){r&&function(e,t){return 2===c(e)?e.get(t):e[t]}(r.t,t)===i||l(n,t,e(i))})),3===i?new Set(n):n}(e)}function z(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return y(e)}function L(){function e(e,t){var n=o[e];return n?n.enumerable=t:o[e]=n={configurable:!0,enumerable:t,get:function(){var t=this[K];return H.get(t,e)},set:function(t){var n=this[K];H.set(n,e,t)}},n}function t(e){for(var t=e.length-1;t>=0;t--){var i=e[t][K];if(!i.P)switch(i.i){case 5:r(i)&&D(i);break;case 4:n(i)&&D(i)}}}function n(e){for(var t=e.t,n=e.k,r=J(n),i=r.length-1;i>=0;i--){var o=r[i];if(o!==K){var u=t[o];if(void 0===u&&!f(t,o))return!0;var a=n[o],c=a&&a[K];if(c?c.t!==u:!s(a,u))return!0}}var l=!!t[K];return r.length!==J(t).length+(l?0:1)}function r(e){var t=e.k;if(t.length!==e.t.length)return!0;var n=Object.getOwnPropertyDescriptor(t,t.length-1);if(n&&!n.get)return!0;for(var r=0;ru,Vk:()=>C,ZP:()=>ne,mv:()=>i,o$:()=>o,pV:()=>L,vV:()=>h});var V,F,q="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),N="undefined"!=typeof Map,W="undefined"!=typeof Set,U="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,X=q?Symbol.for("immer-nothing"):((V={})["immer-nothing"]=!0,V),Z=q?Symbol.for("immer-draftable"):"__$immer_draftable",K=q?Symbol.for("immer-state"):"__$immer_state",B=("undefined"!=typeof Symbol&&Symbol.iterator,""+Object.prototype.constructor),J="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,$=Object.getOwnPropertyDescriptors||function(e){var t={};return J(e).forEach((function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)})),t},G={},H={get:function(e,t){if(t===K)return e;var n=v(e);if(!f(n,t))return function(e,t,n){var r,i=M(t,n);return i?"value"in i?i.value:null===(r=i.get)||void 0===r?void 0:r.call(e.k):void 0}(e,n,t);var r=n[t];return e.I||!o(r)?r:r===I(e.t,t)?(T(e),e.o[t]=R(e.A.h,r,e)):r},has:function(e,t){return t in v(e)},ownKeys:function(e){return Reflect.ownKeys(v(e))},set:function(e,t,n){var r=M(v(e),t);if(null==r?void 0:r.set)return r.set.call(e.k,n),!0;if(!e.P){var i=I(v(e),t),o=null==i?void 0:i[K];if(o&&o.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(s(n,i)&&(void 0!==n||f(e.t,t)))return!0;T(e),D(e)}return e.o[t]===n&&"number"!=typeof n&&(void 0!==n||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return void 0!==I(e.t,t)||t in e.t?(e.D[t]=!1,T(e),D(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=v(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r?{writable:!0,configurable:1!==e.i||"length"!==t,enumerable:r.enumerable,value:n[t]}:r},defineProperty:function(){r(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){r(12)}},Q={};a(H,(function(e,t){Q[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),Q.deleteProperty=function(e,t){return Q.set.call(this,e,t,void 0)},Q.set=function(e,t,n){return H.set.call(this,e[0],t,n,e[0])};var Y=function(){function e(e){var t=this;this.g=U,this.F=!0,this.produce=function(e,n,i){if("function"==typeof e&&"function"!=typeof n){var u=n;n=e;var a=t;return function(e){var t=this;void 0===e&&(e=u);for(var r=arguments.length,i=Array(r>1?r-1:0),o=1;o1?r-1:0),o=1;o=0;n--){var r=t[n];if(0===r.path.length&&"replace"===r.op){e=r.value;break}}n>-1&&(t=t.slice(n+1));var o=m("Patches").$;return i(e)?o(e,t):this.produce(e,(function(e){return o(e,t)}))},e}(),ee=new Y,te=ee.produce;ee.produceWithPatches.bind(ee),ee.setAutoFreeze.bind(ee),ee.setUseProxies.bind(ee),ee.applyPatches.bind(ee),ee.createDraft.bind(ee),ee.finishDraft.bind(ee);const ne=te}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{n.r(r),n.d(r,{MiddlewareArray:()=>A,TaskAbortError:()=>Oe,addListener:()=>Ce,clearAllListeners:()=>ze,configureStore:()=>T,createAction:()=>R,createAsyncThunk:()=>H,createDraftSafeSelector:()=>O,createEntityAdapter:()=>Z,createImmutableStateInvariantMiddleware:()=>k,createListenerMiddleware:()=>qe,createNextState:()=>e.ZP,createReducer:()=>V,createSelector:()=>u.P1,createSerializableStateInvariantMiddleware:()=>I,createSlice:()=>F,current:()=>e.Vk,findNonSerializableValue:()=>x,freeze:()=>e.vV,getDefaultMiddleware:()=>M,getType:()=>z,isAllOf:()=>te,isAnyOf:()=>ee,isAsyncThunkAction:()=>ce,isDraft:()=>e.mv,isFulfilled:()=>ae,isImmutableDefault:()=>E,isPending:()=>ie,isPlain:()=>_,isPlainObject:()=>j,isRejected:()=>oe,isRejectedWithValue:()=>ue,miniSerializeError:()=>G,nanoid:()=>K,original:()=>e.Js,removeListener:()=>Le,unwrapResult:()=>Q});var e=n(12902),t=n(7185),i={};for(const e in t)["default","MiddlewareArray","TaskAbortError","addListener","clearAllListeners","configureStore","createAction","createAsyncThunk","createDraftSafeSelector","createEntityAdapter","createImmutableStateInvariantMiddleware","createListenerMiddleware","createNextState","createReducer","createSelector","createSerializableStateInvariantMiddleware","createSlice","current","findNonSerializableValue","freeze","getDefaultMiddleware","getType","isAllOf","isAnyOf","isAsyncThunkAction","isDraft","isFulfilled","isImmutableDefault","isPending","isPlain","isPlainObject","isRejected","isRejectedWithValue","miniSerializeError","nanoid","original","removeListener","unwrapResult"].indexOf(e)<0&&(i[e]=()=>t[e]);n.d(r,i);var o,u=n(20573),a=n(65139),c=(o=function(e,t){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},o(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function __(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(__.prototype=t.prototype,new __)}),f=function(e,t){var n,r,i,o,u={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return u.label++,{value:o[1],done:!1};case 5:u.label++,r=o[1],o=[0];continue;case 7:o=u.ops.pop(),u.trys.pop();continue;default:if(!((i=(i=u.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){u=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]",value:e};if("object"!=typeof e||null===e)return!1;for(var u=null!=r?r(e):Object.entries(e),a=i.length>0,c=0,f=u;c=0)){if(!n(d))return{keyPath:p,value:d};if("object"==typeof d&&(o=x(d,p,n,r,i)))return o}}return!1}function I(e){return void 0===e&&(e={}),function(){return function(e){return function(t){return e(t)}}}}function M(e){void 0===e&&(e={});var t=e.thunk,n=void 0===t||t,r=(e.immutableCheck,e.serializableCheck,new A);return n&&("boolean"==typeof n?r.push(a.Z):r.push(a.Z.withExtraArgument(n.extraArgument))),r}var D=!0;function T(e){var n,r=function(e){return M(e)},i=e||{},o=i.reducer,u=void 0===o?void 0:o,a=i.middleware,c=void 0===a?r():a,f=i.devTools,s=void 0===f||f,d=i.preloadedState,p=void 0===d?void 0:d,v=i.enhancers,y=void 0===v?void 0:v;if("function"==typeof u)n=u;else{if(!j(u))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');n=(0,t.combineReducers)(u)}var h=c;if("function"==typeof h&&(h=h(r),!D&&!Array.isArray(h)))throw new Error("when using a middleware builder function, an array of middleware must be returned");if(!D&&h.some((function(e){return"function"!=typeof e})))throw new Error("each middleware provided to configureStore must be a function");var g=t.applyMiddleware.apply(void 0,h),m=t.compose;s&&(m=P(b({trace:!D},"object"==typeof s&&s)));var w=[g];Array.isArray(y)?w=l([g],y):"function"==typeof y&&(w=y(w));var O=m.apply(void 0,w);return(0,t.createStore)(n,p,O)}function R(e,t){function n(){for(var n=[],r=0;r-1}function z(e){return""+e}function L(e){var t,n={},r=[],i={addCase:function(e,t){var r="string"==typeof e?e:e.type;if(r in n)throw new Error("addCase cannot be called with two reducers for the same action type");return n[r]=t,i},addMatcher:function(e,t){return r.push({matcher:e,reducer:t}),i},addDefaultCase:function(e){return t=e,i}};return e(i),[n,r,t]}function V(t,n,r,i){void 0===r&&(r=[]);var o,u="function"==typeof n?L(n):[n,r,i],a=u[0],c=u[1],f=u[2];if("function"==typeof t)o=function(){return S(t())};else{var s=S(t);o=function(){return s}}function d(t,n){void 0===t&&(t=o());var r=l([a[n.type]],c.filter((function(e){return(0,e.matcher)(n)})).map((function(e){return e.reducer})));return 0===r.filter((function(e){return!!e})).length&&(r=[f]),r.reduce((function(t,r){if(r){var i;if((0,e.mv)(t))return void 0===(i=r(t,n))?t:i;if((0,e.o$)(t))return(0,e.ZP)(t,(function(e){return r(e,n)}));if(void 0===(i=r(t,n))){if(null===t)return t;throw Error("A case reducer on a non-draftable value must not return undefined")}return i}return t}),t)}return d.getInitialState=o,d}function F(e){var t=e.name;if(!t)throw new Error("`name` is a required option for createSlice");var n,r="function"==typeof e.initialState?e.initialState:S(e.initialState),i=e.reducers||{},o=Object.keys(i),u={},a={},c={};function f(){var t="function"==typeof e.extraReducers?L(e.extraReducers):[e.extraReducers],n=t[0],i=void 0===n?{}:n,o=t[1],u=void 0===o?[]:o,c=t[2],f=void 0===c?void 0:c,l=b(b({},i),a);return V(r,l,u,f)}return o.forEach((function(e){var n,r,o=i[e],f=t+"/"+e;"reducer"in o?(n=o.reducer,r=o.prepare):n=o,u[e]=n,a[f]=n,c[e]=r?R(f,r):R(f)})),{name:t,reducer:function(e,t){return n||(n=f()),n(e,t)},actions:c,caseReducers:u,getInitialState:function(){return n||(n=f()),n.getInitialState()}}}function q(t){return function(n,r){var i=function(e){var n;j(n=r)&&"string"==typeof n.type&&Object.keys(n).every(C)?t(r.payload,e):t(r,e)};return(0,e.mv)(n)?(i(n),n):(0,e.ZP)(n,i)}}function N(e,t){return t(e)}function W(e){return Array.isArray(e)||(e=Object.values(e)),e}function U(e,t,n){for(var r=[],i=[],o=0,u=e=W(e);o0){var o=t.filter((function(t){return function(t,n,r){var i=r.entities[n.id],o=Object.assign({},i,n.changes),u=N(o,e),a=u!==n.id;return a&&(t[n.id]=u,delete r.entities[n.id]),r.entities[u]=o,a}(r,t,n)})).length>0;o&&(n.ids=n.ids.map((function(e){return r[e]||e})))}}function u(t,r){var i=U(t,e,r),u=i[0];o(i[1],r),n(u,r)}return{removeAll:(a=function(e){Object.assign(e,{ids:[],entities:{}})},c=q((function(e,t){return a(t)})),function(e){return c(e,void 0)}),addOne:q(t),addMany:q(n),setOne:q(r),setMany:q((function(e,t){for(var n=0,i=e=W(e);n-1;return n&&r}function re(e){return"function"==typeof e[0]&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function ie(){for(var e=[],t=0;t0)for(var d=e.getState(),p=Array.from(n.values()),v=0,y=p;v{var t={37166:(t,e,n)=>{"use strict";n.r(e),n.d(e,{composeDecorators:()=>w,createEditorStateWithText:()=>b,default:()=>S});var r=n(7206),i=n(99196),o=n.n(i),s=n(85890),a=n.n(s),u=n(43393),c=n.n(u);function f(){return f=Object.assign||function(t){for(var e=1;e=0||(i[n]=t[n]);return i}function h(t){var e=t.getCurrentContent().getBlockMap(),n=e.last().getKey(),i=e.last().getLength(),o=new r.SelectionState({anchorKey:n,anchorOffset:i,focusKey:n,focusOffset:i});return r.EditorState.acceptSelection(t,o)}var p="-",d=function(){function t(t){this.decorators=void 0,this.decorators=c().List(t)}var e=t.prototype;return e.getDecorations=function(t,e){var n=new Array(t.getText().length).fill(null);return this.decorators.forEach((function(r,i){r.getDecorations(t,e).forEach((function(t,e){t&&(n[e]=i+p+t)}))})),c().List(n)},e.getComponentForKey=function(e){return this.getDecoratorForKey(e).getComponentForKey(t.getInnerKey(e))},e.getPropsForKey=function(e){return this.getDecoratorForKey(e).getPropsForKey(t.getInnerKey(e))},e.getDecoratorForKey=function(t){var e=t.split(p),n=Number(e[0]);return this.decorators.get(n)},t.getInnerKey=function(t){return t.split(p).slice(1).join(p)},t}(),v=function(t){return"function"==typeof t.getDecorations&&"function"==typeof t.getComponentForKey&&"function"==typeof t.getPropsForKey};function _(t){return(0,r.getDefaultKeyBinding)(t)}function y(t,e,n,i){var o,s=i.setEditorState;switch(t){case"backspace":case"backspace-word":case"backspace-to-start-of-line":o=r.RichUtils.onBackspace(e);break;case"delete":case"delete-word":case"delete-to-end-of-block":o=r.RichUtils.onDelete(e);break;default:return"not-handled"}return null!=o?(s(o),"handled"):"not-handled"}var g=function(t){var e,n;return null!=(null==t?void 0:t.decorators)?null==(e=t.decorators)?void 0:e.size:null!=(null==t?void 0:t._decorators)?null==(n=t._decorators)?void 0:n.length:void 0},m=function(t){var e,n;function i(e){var n;return(n=t.call(this,e)||this).editor=null,n.state={readOnly:!1},n.onChange=function(t){var e=t;n.resolvePlugins().forEach((function(t){t.onChange&&(e=t.onChange(e,n.getPluginMethods()))})),n.props.onChange&&n.props.onChange(e)},n.getPlugins=function(){return[].concat(n.props.plugins)},n.getProps=function(){return f({},n.props)},n.getReadOnly=function(){return n.props.readOnly||n.state.readOnly},n.setReadOnly=function(t){t!==n.state.readOnly&&n.setState({readOnly:t})},n.getEditorRef=function(){return n.editor},n.getEditorState=function(){return n.props.editorState},n.getPluginMethods=function(){return{getPlugins:n.getPlugins,getProps:n.getProps,setEditorState:n.onChange,getEditorState:n.getEditorState,getReadOnly:n.getReadOnly,setReadOnly:n.setReadOnly,getEditorRef:n.getEditorRef}},n.createPluginHooks=function(){return t=[n.props].concat(n.resolvePlugins()),e=n.getPluginMethods(),r={},i=new Set(["onChange"]),t.forEach((function(n){Object.keys(n).forEach((function(n){i.has(n)||(i.add(n),n.startsWith("on")?r[n]=function(t,e,n){return function(){for(var r=arguments.length,i=new Array(r),o=0;o=0;n-=1)t=(0,e[n])(t);return t}};const S=m},95423:(t,e,n)=>{"use strict";n.r(e),n.d(e,{MentionSuggestions:()=>Jt,addMention:()=>Pt,default:()=>te,defaultSuggestionsFilter:()=>ee,defaultTheme:()=>Xt});var r=n(43393),i=n(99196),o=n.n(i);function s(t){var e,n,r="";if("string"==typeof t||"number"==typeof t)r+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;e0&&(r=m(n.width)/s||1),o>0&&(i=m(n.height)/o||1)}return{width:n.width/r,height:n.height/i,top:n.top/i,right:n.right/r,bottom:n.bottom/i,left:n.left/r,x:n.left/r,y:n.top/i}}function w(t){var e=p(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function S(t){return t?(t.nodeName||"").toLowerCase():null}function E(t){return((d(t)?t.ownerDocument:t.document)||window.document).documentElement}function O(t){return b(E(t)).left+w(t).scrollLeft}function x(t){return p(t).getComputedStyle(t)}function I(t){var e=x(t),n=e.overflow,r=e.overflowX,i=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+i+r)}function z(t,e,n){void 0===n&&(n=!1);var r,i,o=v(e),s=v(e)&&function(t){var e=t.getBoundingClientRect(),n=m(e.width)/t.offsetWidth||1,r=m(e.height)/t.offsetHeight||1;return 1!==n||1!==r}(e),a=E(e),u=b(t,s),c={scrollLeft:0,scrollTop:0},f={x:0,y:0};return(o||!o&&!n)&&(("body"!==S(e)||I(a))&&(c=(r=e)!==p(r)&&v(r)?{scrollLeft:(i=r).scrollLeft,scrollTop:i.scrollTop}:w(r)),v(e)?((f=b(e,!0)).x+=e.clientLeft,f.y+=e.clientTop):a&&(f.x=O(a))),{x:u.left+c.scrollLeft-f.x,y:u.top+c.scrollTop-f.y,width:u.width,height:u.height}}function M(t){var e=b(t),n=t.offsetWidth,r=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:r}}function C(t){return"html"===S(t)?t:t.assignedSlot||t.parentNode||(_(t)?t.host:null)||E(t)}function D(t){return["html","body","#document"].indexOf(S(t))>=0?t.ownerDocument.body:v(t)&&I(t)?t:D(C(t))}function k(t,e){var n;void 0===e&&(e=[]);var r=D(t),i=r===(null==(n=t.ownerDocument)?void 0:n.body),o=p(r),s=i?[o].concat(o.visualViewport||[],I(r)?r:[]):r,a=e.concat(s);return i?a:a.concat(k(C(s)))}function R(t){return["table","td","th"].indexOf(S(t))>=0}function A(t){return v(t)&&"fixed"!==x(t).position?t.offsetParent:null}function q(t){for(var e=p(t),n=A(t);n&&R(n)&&"static"===x(n).position;)n=A(n);return n&&("html"===S(n)||"body"===S(n)&&"static"===x(n).position)?e:n||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&v(t)&&"fixed"===x(t).position)return null;for(var n=C(t);v(n)&&["html","body"].indexOf(S(n))<0;){var r=x(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||e&&"filter"===r.willChange||e&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(t)||e}var j="top",P="bottom",B="right",T="left",F="auto",K=[j,P,B,T],V="start",L="end",U="viewport",W="popper",N=K.reduce((function(t,e){return t.concat([e+"-"+V,e+"-"+L])}),[]),H=[].concat(K,[F]).reduce((function(t,e){return t.concat([e,e+"-"+V,e+"-"+L])}),[]),J=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function $(t){var e=new Map,n=new Set,r=[];function i(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!n.has(t)){var r=e.get(t);r&&i(r)}})),r.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||i(t)})),r}var Y={placement:"bottom",modifiers:[],strategy:"absolute"};function X(){for(var t=arguments.length,e=new Array(t),n=0;n=0?"x":"y"}function nt(t){var e,n=t.reference,r=t.element,i=t.placement,o=i?Z(i):null,s=i?tt(i):null,a=n.x+n.width/2-r.width/2,u=n.y+n.height/2-r.height/2;switch(o){case j:e={x:a,y:n.y-r.height};break;case P:e={x:a,y:n.y+n.height};break;case B:e={x:n.x+n.width,y:u};break;case T:e={x:n.x-r.width,y:u};break;default:e={x:n.x,y:n.y}}var c=o?et(o):null;if(null!=c){var f="y"===c?"height":"width";switch(s){case V:e[c]=e[c]-(n[f]/2-r[f]/2);break;case L:e[c]=e[c]+(n[f]/2-r[f]/2)}}return e}var rt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function it(t){var e,n=t.popper,r=t.popperRect,i=t.placement,o=t.variation,s=t.offsets,a=t.position,u=t.gpuAcceleration,c=t.adaptive,f=t.roundOffsets,l=t.isFixed,h=!0===f?function(t){var e=t.x,n=t.y,r=window.devicePixelRatio||1;return{x:m(e*r)/r||0,y:m(n*r)/r||0}}(s):"function"==typeof f?f(s):s,d=h.x,v=void 0===d?0:d,_=h.y,y=void 0===_?0:_,g=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),w=T,S=j,O=window;if(c){var I=q(n),z="clientHeight",M="clientWidth";I===p(n)&&"static"!==x(I=E(n)).position&&"absolute"===a&&(z="scrollHeight",M="scrollWidth"),(i===j||(i===T||i===B)&&o===L)&&(S=P,y-=(l&&O.visualViewport?O.visualViewport.height:I[z])-r.height,y*=u?1:-1),i!==T&&(i!==j&&i!==P||o!==L)||(w=B,v-=(l&&O.visualViewport?O.visualViewport.width:I[M])-r.width,v*=u?1:-1)}var C,D=Object.assign({position:a},c&&rt);return u?Object.assign({},D,((C={})[S]=b?"0":"",C[w]=g?"0":"",C.transform=(O.devicePixelRatio||1)<=1?"translate("+v+"px, "+y+"px)":"translate3d("+v+"px, "+y+"px, 0)",C)):Object.assign({},D,((e={})[S]=b?y+"px":"",e[w]=g?v+"px":"",e.transform="",e))}var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function st(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function ut(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&_(n)){var r=e;do{if(r&&t.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function lt(t,e){return e===U?ft(function(t){var e=p(t),n=E(t),r=e.visualViewport,i=n.clientWidth,o=n.clientHeight,s=0,a=0;return r&&(i=r.width,o=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=r.offsetLeft,a=r.offsetTop)),{width:i,height:o,x:s+O(t),y:a}}(t)):d(e)?function(t){var e=b(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):ft(function(t){var e,n=E(t),r=w(t),i=null==(e=t.ownerDocument)?void 0:e.body,o=y(n.scrollWidth,n.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),s=y(n.scrollHeight,n.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),a=-r.scrollLeft+O(t),u=-r.scrollTop;return"rtl"===x(i||n).direction&&(a+=y(n.clientWidth,i?i.clientWidth:0)-o),{width:o,height:s,x:a,y:u}}(E(t)))}function ht(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function pt(t,e){return e.reduce((function(e,n){return e[n]=t,e}),{})}function dt(t,e){void 0===e&&(e={});var n=e,r=n.placement,i=void 0===r?t.placement:r,o=n.boundary,s=void 0===o?"clippingParents":o,a=n.rootBoundary,u=void 0===a?U:a,c=n.elementContext,f=void 0===c?W:c,l=n.altBoundary,h=void 0!==l&&l,p=n.padding,_=void 0===p?0:p,m=ht("number"!=typeof _?_:pt(_,K)),w=f===W?"reference":W,O=t.rects.popper,I=t.elements[h?w:f],z=function(t,e,n){var r="clippingParents"===e?function(t){var e=k(C(t)),n=["absolute","fixed"].indexOf(x(t).position)>=0,r=n&&v(t)?q(t):t;return d(r)?e.filter((function(t){return d(t)&&ct(t,r)&&"body"!==S(t)&&(!n||"static"!==x(t).position)})):[]}(t):[].concat(e),i=[].concat(r,[n]),o=i[0],s=i.reduce((function(e,n){var r=lt(t,n);return e.top=y(r.top,e.top),e.right=g(r.right,e.right),e.bottom=g(r.bottom,e.bottom),e.left=y(r.left,e.left),e}),lt(t,o));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}(d(I)?I:I.contextElement||E(t.elements.popper),s,u),M=b(t.elements.reference),D=nt({reference:M,element:O,strategy:"absolute",placement:i}),R=ft(Object.assign({},O,D)),A=f===W?R:M,T={top:z.top-A.top+m.top,bottom:A.bottom-z.bottom+m.bottom,left:z.left-A.left+m.left,right:A.right-z.right+m.right},F=t.modifiersData.offset;if(f===W&&F){var V=F[i];Object.keys(T).forEach((function(t){var e=[B,P].indexOf(t)>=0?1:-1,n=[j,P].indexOf(t)>=0?"y":"x";T[t]+=V[n]*e}))}return T}function vt(t,e,n){return y(t,g(e,n))}function _t(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function yt(t){return[j,B,P,T].some((function(e){return t[e]>=0}))}var gt=G({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,n=t.instance,r=t.options,i=r.scroll,o=void 0===i||i,s=r.resize,a=void 0===s||s,u=p(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",n.update,Q)})),a&&u.addEventListener("resize",n.update,Q),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",n.update,Q)})),a&&u.removeEventListener("resize",n.update,Q)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,n=t.name;e.modifiersData[n]=nt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,n=t.options,r=n.gpuAcceleration,i=void 0===r||r,o=n.adaptive,s=void 0===o||o,a=n.roundOffsets,u=void 0===a||a,c={placement:Z(e.placement),variation:tt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,it(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:u})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,it(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var n=e.styles[t]||{},r=e.attributes[t]||{},i=e.elements[t];v(i)&&S(i)&&(Object.assign(i.style,n),Object.keys(r).forEach((function(t){var e=r[t];!1===e?i.removeAttribute(t):i.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach((function(t){var r=e.elements[t],i=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]).reduce((function(t,e){return t[e]="",t}),{});v(r)&&S(r)&&(Object.assign(r.style,o),Object.keys(i).forEach((function(t){r.removeAttribute(t)})))}))}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,n=t.options,r=t.name,i=n.offset,o=void 0===i?[0,0]:i,s=H.reduce((function(t,n){return t[n]=function(t,e,n){var r=Z(t),i=[T,j].indexOf(r)>=0?-1:1,o="function"==typeof n?n(Object.assign({},e,{placement:t})):n,s=o[0],a=o[1];return s=s||0,a=(a||0)*i,[T,B].indexOf(r)>=0?{x:a,y:s}:{x:s,y:a}}(n,e.rects,o),t}),{}),a=s[e.placement],u=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=u,e.modifiersData.popperOffsets.y+=c),e.modifiersData[r]=s}},{name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,r=t.name;if(!e.modifiersData[r]._skip){for(var i=n.mainAxis,o=void 0===i||i,s=n.altAxis,a=void 0===s||s,u=n.fallbackPlacements,c=n.padding,f=n.boundary,l=n.rootBoundary,h=n.altBoundary,p=n.flipVariations,d=void 0===p||p,v=n.allowedAutoPlacements,_=e.options.placement,y=Z(_),g=u||(y!==_&&d?function(t){if(Z(t)===F)return[];var e=st(t);return[ut(t),e,ut(e)]}(_):[st(_)]),m=[_].concat(g).reduce((function(t,n){return t.concat(Z(n)===F?function(t,e){void 0===e&&(e={});var n=e,r=n.placement,i=n.boundary,o=n.rootBoundary,s=n.padding,a=n.flipVariations,u=n.allowedAutoPlacements,c=void 0===u?H:u,f=tt(r),l=f?a?N:N.filter((function(t){return tt(t)===f})):K,h=l.filter((function(t){return c.indexOf(t)>=0}));0===h.length&&(h=l);var p=h.reduce((function(e,n){return e[n]=dt(t,{placement:n,boundary:i,rootBoundary:o,padding:s})[Z(n)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[e]}))}(e,{placement:n,boundary:f,rootBoundary:l,padding:c,flipVariations:d,allowedAutoPlacements:v}):n)}),[]),b=e.rects.reference,w=e.rects.popper,S=new Map,E=!0,O=m[0],x=0;x=0,D=C?"width":"height",k=dt(e,{placement:I,boundary:f,rootBoundary:l,altBoundary:h,padding:c}),R=C?M?B:T:M?P:j;b[D]>w[D]&&(R=st(R));var A=st(R),q=[];if(o&&q.push(k[z]<=0),a&&q.push(k[R]<=0,k[A]<=0),q.every((function(t){return t}))){O=I,E=!1;break}S.set(I,q)}if(E)for(var L=function(t){var e=m.find((function(e){var n=S.get(e);if(n)return n.slice(0,t).every((function(t){return t}))}));if(e)return O=e,"break"},U=d?3:1;U>0&&"break"!==L(U);U--);e.placement!==O&&(e.modifiersData[r]._skip=!0,e.placement=O,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,r=t.name,i=n.mainAxis,o=void 0===i||i,s=n.altAxis,a=void 0!==s&&s,u=n.boundary,c=n.rootBoundary,f=n.altBoundary,l=n.padding,h=n.tether,p=void 0===h||h,d=n.tetherOffset,v=void 0===d?0:d,_=dt(e,{boundary:u,rootBoundary:c,padding:l,altBoundary:f}),m=Z(e.placement),b=tt(e.placement),w=!b,S=et(m),E="x"===S?"y":"x",O=e.modifiersData.popperOffsets,x=e.rects.reference,I=e.rects.popper,z="function"==typeof v?v(Object.assign({},e.rects,{placement:e.placement})):v,C="number"==typeof z?{mainAxis:z,altAxis:z}:Object.assign({mainAxis:0,altAxis:0},z),D=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(O){if(o){var R,A="y"===S?j:T,F="y"===S?P:B,K="y"===S?"height":"width",L=O[S],U=L+_[A],W=L-_[F],N=p?-I[K]/2:0,H=b===V?x[K]:I[K],J=b===V?-I[K]:-x[K],$=e.elements.arrow,Y=p&&$?M($):{width:0,height:0},X=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},G=X[A],Q=X[F],nt=vt(0,x[K],Y[K]),rt=w?x[K]/2-N-nt-G-C.mainAxis:H-nt-G-C.mainAxis,it=w?-x[K]/2+N+nt+Q+C.mainAxis:J+nt+Q+C.mainAxis,ot=e.elements.arrow&&q(e.elements.arrow),st=ot?"y"===S?ot.clientTop||0:ot.clientLeft||0:0,at=null!=(R=null==D?void 0:D[S])?R:0,ut=L+it-at,ct=vt(p?g(U,L+rt-at-st):U,L,p?y(W,ut):W);O[S]=ct,k[S]=ct-L}if(a){var ft,lt="x"===S?j:T,ht="x"===S?P:B,pt=O[E],_t="y"===E?"height":"width",yt=pt+_[lt],gt=pt-_[ht],mt=-1!==[j,T].indexOf(m),bt=null!=(ft=null==D?void 0:D[E])?ft:0,wt=mt?yt:pt-x[_t]-I[_t]-bt+C.altAxis,St=mt?pt+x[_t]+I[_t]-bt-C.altAxis:gt,Et=p&&mt?function(t,e,n){var r=vt(t,e,n);return r>n?n:r}(wt,pt,St):vt(p?wt:yt,pt,p?St:gt);O[E]=Et,k[E]=Et-pt}e.modifiersData[r]=k}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,n=t.state,r=t.name,i=t.options,o=n.elements.arrow,s=n.modifiersData.popperOffsets,a=Z(n.placement),u=et(a),c=[T,B].indexOf(a)>=0?"height":"width";if(o&&s){var f=function(t,e){return ht("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:pt(t,K))}(i.padding,n),l=M(o),h="y"===u?j:T,p="y"===u?P:B,d=n.rects.reference[c]+n.rects.reference[u]-s[u]-n.rects.popper[c],v=s[u]-n.rects.reference[u],_=q(o),y=_?"y"===u?_.clientHeight||0:_.clientWidth||0:0,g=d/2-v/2,m=f[h],b=y-l[c]-f[p],w=y/2-l[c]/2+g,S=vt(m,w,b),E=u;n.modifiersData[r]=((e={})[E]=S,e.centerOffset=S-w,e)}},effect:function(t){var e=t.state,n=t.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=e.elements.popper.querySelector(r)))&&ct(e.elements.popper,r)&&(e.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,n=t.name,r=e.rects.reference,i=e.rects.popper,o=e.modifiersData.preventOverflow,s=dt(e,{elementContext:"reference"}),a=dt(e,{altBoundary:!0}),u=_t(s,r),c=_t(a,i,o),f=yt(u),l=yt(c);e.modifiersData[n]={referenceClippingOffsets:u,popperEscapeOffsets:c,isReferenceHidden:f,hasPopperEscaped:l},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":f,"data-popper-escaped":l})}}]}),mt=n(69590),bt=n.n(mt),wt=function(t){return t.reduce((function(t,e){var n=e[0],r=e[1];return t[n]=r,t}),{})},St="undefined"!=typeof window&&window.document&&window.document.createElement?i.useLayoutEffect:i.useEffect,Et=[];const Ot=window.lodash;function xt(){return xt=Object.assign||function(t){for(var e=1;e=0||(i[n]=t[n]);return i}function Mt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(i.matchAll(s));!(r=c()).done;){var f=r.value,l=f[1].length,p=f[2].length;u=(a=(f.index||0)+l)+p}var d=i.slice(u);return{begin:a,end:i.length,matchingString:d}}(t.getCurrentContent().getBlockForKey(r).getText(),i,n)};function jt(t){return"@"===t?"mention":t+"mention"}function Pt(t,e,n,r,i){var o=t.getCurrentContent().createEntity(jt(r),i,{mention:e}).getLastCreatedEntityKey(),s=t.getSelection(),a=qt(t,s,[r]),u=a.begin,c=a.end,l=s.merge({anchorOffset:u,focusOffset:c}),h=f.Modifier.replaceText(t.getCurrentContent(),l,""+n+e.name,void 0,o),p=l.getAnchorKey();t.getCurrentContent().getBlockForKey(p).getLength()===c&&(h=f.Modifier.insertText(h,h.getSelectionAfter()," "));var d=f.EditorState.push(t,h,"insert-fragment");return f.EditorState.forceSelection(d,h.getSelectionAfter())}function Bt(t){var e=t.mention,n=t.theme,r=void 0===n?{}:n;return e.avatar?o().createElement("img",{src:e.avatar,className:r.mentionSuggestionsEntryAvatar,role:"presentation"}):null}var Tt=["mention","theme","isFocused","searchValue","selectMention"];function Ft(t){var e=t.mention,n=t.theme;t.isFocused,t.searchValue,t.selectMention;var r=zt(t,Tt);return o().createElement("div",r,o().createElement(Bt,{mention:e,theme:n}),o().createElement("span",{className:null==n?void 0:n.mentionSuggestionsEntryText},e.name))}var Kt=function t(e){return e?"static"!==window.getComputedStyle(e).getPropertyValue("position")?e:t(e.parentElement):null};function Vt(t){var e,n=t.decoratorRect,r=t.popover,i=t.props,o=Kt(r.parentElement);if(o){var s=o.getBoundingClientRect();e={scrollLeft:o.scrollLeft,scrollTop:o.scrollTop,left:n.left-s.left,top:n.bottom-s.top}}else e={scrollTop:window.pageYOffset||document.documentElement.scrollTop,scrollLeft:window.pageXOffset||document.documentElement.scrollLeft,top:n.bottom,left:n.left};var a,u,c=e.left+e.scrollLeft,f=e.top+e.scrollTop;return i.open&&(i.suggestions.length>0?(a="scale(1)",u="all 0.25s cubic-bezier(.3,1.2,.2,1)"):(a="scale(0)",u="all 0.35s cubic-bezier(.3,1,.2,1)")),{left:c+"px",top:f+"px",transform:a,transformOrigin:"1em 0%",transition:u}}function Lt(t){return void 0!==t}function Ut(t){var e=t.store,n=t.children,r=t.theme,s=t.popperOptions,u=void 0===s?{placement:"bottom-start"}:s,c=(0,i.useState)((function(){return a(r.mentionSuggestions,r.mentionSuggestionsPopup)})),f=c[0],l=c[1],h=(0,i.useState)(null),p=h[0],d=h[1],v=function(t,e,n){void 0===n&&(n={});var r=i.useRef(null),o={onFirstUpdate:n.onFirstUpdate,placement:n.placement||"bottom",strategy:n.strategy||"absolute",modifiers:n.modifiers||Et},s=i.useState({styles:{popper:{position:o.strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),a=s[0],u=s[1],c=i.useMemo((function(){return{name:"updateState",enabled:!0,phase:"write",fn:function(t){var e=t.state,n=Object.keys(e.elements);u({styles:wt(n.map((function(t){return[t,e.styles[t]||{}]}))),attributes:wt(n.map((function(t){return[t,e.attributes[t]]})))})},requires:["computeStyles"]}}),[]),f=i.useMemo((function(){var t={onFirstUpdate:o.onFirstUpdate,placement:o.placement,strategy:o.strategy,modifiers:[].concat(o.modifiers,[c,{name:"applyStyles",enabled:!1}])};return bt()(r.current,t)?r.current||t:(r.current=t,t)}),[o.onFirstUpdate,o.placement,o.strategy,o.modifiers,c]),l=i.useRef();return St((function(){l.current&&l.current.setOptions(f)}),[f]),St((function(){if(null!=t&&null!=e){var r=(n.createPopper||gt)(t,e,f);return l.current=r,function(){r.destroy(),l.current=null}}}),[t,e,n.createPopper]),{state:l.current?l.current.state:null,styles:a.styles,attributes:a.attributes,update:l.current?l.current.update:null,forceUpdate:l.current?l.current.forceUpdate:null}}(e.getReferenceElement(),p,u),_=v.styles,y=v.attributes;return(0,i.useEffect)((function(){requestAnimationFrame((function(){return l(a(r.mentionSuggestions,r.mentionSuggestionsPopup,r.mentionSuggestionsPopupVisible))}))}),[r]),o().createElement("div",xt({ref:d,style:_.popper},y.popper,{className:f}),n)}var Wt=(0,Ot.once)((function(t){})),Nt=["entryComponent","popoverComponent","popperOptions","popoverContainer","onOpenChange","onAddMention","onSearchChange","suggestions","ariaProps","callbacks","theme","store","entityMutability","positionSuggestions","mentionTriggers","mentionPrefix"],Ht=function(t){var e,n;function r(e){var n;return(n=t.call(this,e)||this).state={focusedOptionIndex:0},n.key=(0,f.genKey)(),n.popover=void 0,n.activeOffsetKey=void 0,n.lastSearchValue=void 0,n.lastActiveTrigger="",n.lastSelectionIsInsideWord=void 0,n.onEditorStateChange=function(t){var e=n.props.store.getAllSearches();if(0===e.size)return t;var r=function(t,e,n){var r=t.getSelection(),i=r.getAnchorKey(),o=r.getAnchorOffset();if(!r.isCollapsed()||!r.getHasFocus())return null;var s=e.map((function(t){return function(t){var e=t.split("-"),n=e[0],r=e[1],i=e[2];return{blockKey:n,decoratorKey:parseInt(r,10),leafKey:parseInt(i,10)}}(t)})).filter((function(t){return t.blockKey===i})).map((function(e){return t.getBlockTree(e.blockKey).getIn([e.decoratorKey])}));if(s.every((function(t){return void 0===t})))return null;var a=t.getCurrentContent().getBlockForKey(i).getText(),u=s.filter(Lt).map((function(t){var e=t.start,r=t.end;return n.map((function(t){return 0===e&&o>=e+t.length&&a.substr(0,t.length)===t&&o<=r||n.length>1&&o>=e+t.length&&(a.substr(e+1,t.length)===t||a.substr(e,t.length)===t)&&o<=r||1===n.length&&o>=e+t.length&&o<=r?t:void 0})).filter(Lt)[0]})).filter(Lt);if(u.isEmpty())return null;var c=u.entrySeq().first();return{activeOffsetKey:c[0],activeTrigger:c[1]}}(t,e,n.props.mentionTriggers);if(!r)return n.props.store.resetEscapedSearch(),n.closeDropdown(),t;var i=n.activeOffsetKey;return n.activeOffsetKey=r.activeOffsetKey,n.onSearchChange(t,t.getSelection(),n.activeOffsetKey,i,r.activeTrigger),n.props.store.isEscaped(n.activeOffsetKey||"")||n.props.store.resetEscapedSearch(),n.props.open||n.props.store.isEscaped(n.activeOffsetKey||"")||n.openDropdown(),i!==n.activeOffsetKey&&n.setState({focusedOptionIndex:0}),t},n.onSearchChange=function(t,e,r,i,o){var s=qt(t,e,[o]).matchingString;n.lastActiveTrigger===o&&n.lastSearchValue===s&&r===i||(n.lastActiveTrigger=o,n.lastSearchValue=s,n.props.onSearchChange({trigger:o,value:s}),n.setState({focusedOptionIndex:0}))},n.onDownArrow=function(t){t.preventDefault();var e=n.state.focusedOptionIndex+1;n.onMentionFocus(e>=n.props.suggestions.length?0:e)},n.onTab=function(t){t.preventDefault(),n.commitSelection()},n.onUpArrow=function(t){if(t.preventDefault(),n.props.suggestions.length>0){var e=n.state.focusedOptionIndex-1;n.onMentionFocus(e<0?n.props.suggestions.length-1:e)}},n.onEscape=function(t){t.preventDefault(),n.props.store.escapeSearch(n.activeOffsetKey||""),n.closeDropdown(),n.props.store.setEditorState(n.props.store.getEditorState())},n.onMentionSelect=function(t){if(t){n.props.onAddMention&&n.props.onAddMention(t),n.closeDropdown();var e=Pt(n.props.store.getEditorState(),t,n.props.mentionPrefix,n.lastActiveTrigger||"",n.props.entityMutability);n.props.store.setEditorState(e)}},n.onMentionFocus=function(t){var e="mention-option-"+n.key+"-"+t;n.props.ariaProps.ariaActiveDescendantID=e,n.setState({focusedOptionIndex:t}),n.props.store.setEditorState(n.props.store.getEditorState())},n.commitSelection=function(){var t=n.props.suggestions[n.state.focusedOptionIndex];return n.props.store.getIsOpened()&&t?(n.onMentionSelect(t),"handled"):"not-handled"},n.openDropdown=function(){n.props.callbacks.handleReturn=n.commitSelection,n.props.callbacks.keyBindingFn=function(t){40===t.keyCode&&n.onDownArrow(t),38===t.keyCode&&n.onUpArrow(t),27===t.keyCode&&n.onEscape(t),9===t.keyCode&&n.onTab(t)};var t="mention-option-"+n.key+"-"+n.state.focusedOptionIndex;n.props.ariaProps.ariaActiveDescendantID=t,n.props.ariaProps.ariaOwneeID="mentions-list-"+n.key,n.props.ariaProps.ariaHasPopup="true",n.props.ariaProps.ariaExpanded=!0,n.props.onOpenChange(!0)},n.closeDropdown=function(){n.props.callbacks.handleReturn=void 0,n.props.callbacks.keyBindingFn=void 0,n.props.ariaProps.ariaHasPopup="false",n.props.ariaProps.ariaExpanded=!1,n.props.ariaProps.ariaActiveDescendantID=void 0,n.props.ariaProps.ariaOwneeID=void 0,n.props.onOpenChange(!1)},n.props.callbacks.onChange=n.onEditorStateChange,n}n=t,(e=r).prototype=Object.create(n.prototype),e.prototype.constructor=e,It(e,n);var i=r.prototype;return i.componentDidUpdate=function(){if(this.popover){var t=this.props.suggestions.length;if(t>0&&this.state.focusedOptionIndex>=t&&this.setState({focusedOptionIndex:t-1}),!this.props.store.getAllSearches().has(this.activeOffsetKey))return;for(var e=this.props.store.getPortalClientRect(this.activeOffsetKey),n=(this.props.positionSuggestions||Vt)({decoratorRect:e,props:this.props,popover:this.popover}),r=0,i=Object.entries(n);r-1})),o=i.length<5?i.length:5;return i.slice(0,o)}},82080:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Mention=void 0;var r=a(n(99196)),i=a(n(98487)),o=a(n(85890)),s=a(n(70602));function a(t){return t&&t.__esModule?t:{default:t}}const u=i.default.span` + color: rgb(15 23 42); + background-color: rgb(226 232 240); + padding: 0.125rem 0.5rem; + margin: 0 0.125rem; + border-radius: 17px; + font-size: .75rem; + font-weight: 500; + line-height: 1.25; +} + &:hover { + color: rgb(15 23 42); + background-color: rgb(226 232 240); + cursor: auto; + } +`,c=({children:t,className:e})=>r.default.createElement(u,{className:(0,s.default)("yst-replacevar__mention",e),spellCheck:!1},t);e.Mention=c,c.propTypes={children:o.default.node.isRequired,className:o.default.string.isRequired}},51381:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var r=n(92694),i=function(t,e){if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=v(e);if(n&&n.has(t))return n.get(t);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var s=i?Object.getOwnPropertyDescriptor(t,o):null;s&&(s.get||s.set)?Object.defineProperty(r,o,s):r[o]=t[o]}return r.default=t,n&&n.set(t,r),r}(n(99196)),o=d(n(85890)),s=d(n(12049)),a=n(65736),u=n(55609),c=d(n(42578)),f=n(37188),l=n(32183),h=n(34353),p=n(81413);function d(t){return t&&t.__esModule?t:{default:t}}function v(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(v=function(t){return t?n:e})(t)}class _ extends i.default.Component{constructor(t){super(t),this.uniqueId=(0,s.default)("replacement-variable-editor-field-"),"description"===t.type?this.InputContainer=l.DescriptionInputContainer:this.InputContainer=l.TitleInputContainer,t.withCaret&&(this.InputContainer=(0,f.withCaretStyles)(this.InputContainer)),this.triggerReplacementVariableSuggestions=this.triggerReplacementVariableSuggestions.bind(this)}triggerReplacementVariableSuggestions(){this.ref.triggerReplacementVariableSuggestions()}render(){const{label:t,onChange:e,content:n,onFocus:o,onBlur:s,isActive:f,isHovered:h,onSearchChange:d,replacementVariables:v,recommendedReplacementVariables:_,editorRef:y,placeholder:g,fieldId:m,onMouseEnter:b,onMouseLeave:w,hasNewBadge:S,isDisabled:E,hasPremiumBadge:O,type:x}=this.props,I=this.InputContainer,z=(0,r.applyFilters)("yoast.replacementVariableEditor.additionalButtons",[],{fieldId:m,type:x});return i.default.createElement(l.FormSection,{className:["yst-replacevar",E&&"yst-replacevar--disabled"].filter(Boolean).join(" "),onMouseEnter:b,onMouseLeave:w},i.default.createElement(p.SimulatedLabel,{className:"yst-replacevar__label",id:this.uniqueId,onClick:o},t),O&&i.default.createElement(p.PremiumBadge,{inLabel:!0}),S&&i.default.createElement(p.NewBadge,{inLabel:!0}),i.default.createElement(l.ButtonsContainer,{className:"yst-replacevar__buttons"},i.default.createElement(u.Slot,{name:`yoast.replacementVariableEditor.additionalButtons.${m}`}),z.map(((t,e)=>i.default.createElement(i.Fragment,{key:`additional-button-${e}-${m}`},t))),i.default.createElement(u.Slot,{key:`PluginComponent-${m}`,name:`PluginComponent-${m}`}),i.default.createElement(l.TriggerReplacementVariableSuggestionsButton,{className:"yst-replacevar__button-insert",onClick:this.triggerReplacementVariableSuggestions,disabled:E},(0,a.__)("Insert variable","wordpress-seo"))),i.default.createElement(I,{className:"yst-replacevar__editor",onClick:o,isActive:f&&!E,isHovered:h},i.default.createElement(c.default,{fieldId:m,placeholder:g,content:n,onChange:e,onFocus:o,onBlur:s,onSearchChange:d,replacementVariables:v,recommendedReplacementVariables:_,ref:t=>{this.ref=t,y(t)},ariaLabelledBy:this.uniqueId,isDisabled:E})))}}_.propTypes={editorRef:o.default.func,content:o.default.string.isRequired,onChange:o.default.func.isRequired,onBlur:o.default.func,onSearchChange:o.default.func,replacementVariables:h.replacementVariablesShape,recommendedReplacementVariables:h.recommendedReplacementVariablesShape,isActive:o.default.bool,isHovered:o.default.bool,withCaret:o.default.bool,onFocus:o.default.func,label:o.default.string,placeholder:o.default.string,type:o.default.oneOf(["title","description"]).isRequired,fieldId:o.default.string,onMouseEnter:o.default.func,onMouseLeave:o.default.func,hasNewBadge:o.default.bool,isDisabled:o.default.bool,hasPremiumBadge:o.default.bool},_.defaultProps={onFocus:()=>{},onBlur:()=>{},onSearchChange:null,replacementVariables:[],recommendedReplacementVariables:[],fieldId:"",placeholder:"",label:"",withCaret:!1,isHovered:!1,isActive:!1,editorRef:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},hasNewBadge:!1,isDisabled:!1,hasPremiumBadge:!1},e.default=_},42578:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ReplacementVariableEditorStandaloneInnerComponent=void 0;var r=E(n(99196)),i=E(n(37166)),o=E(n(95423)),s=E(n(60940)),a=E(n(25853)),u=E(n(66366)),c=E(n(1843)),f=E(n(16965)),l=E(n(18491)),h=E(n(85890)),p=n(25158),d=n(92694),v=n(65736),_=function(t,e){if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=S(e);if(n&&n.has(t))return n.get(t);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var s=i?Object.getOwnPropertyDescriptor(t,o):null;s&&(s.get||s.set)?Object.defineProperty(r,o,s):r[o]=t[o]}return r.default=t,n&&n.set(t,r),r}(n(98487)),y=n(34353),g=n(82080),m=n(31689),b=n(17481),w=n(45608);function S(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(S=function(t){return t?n:e})(t)}function E(t){return t&&t.__esModule?t:{default:t}}const O=_.default.div` + div { + z-index: 10995; + } + > div { + max-height: 450px; + overflow-y: auto; + } +`,x=new RegExp("(?:\\p{RI}\\p{RI}|\\p{Emoji}(?:\\p{Emoji_Modifier}|\\u{FE0F}\\u{20E3}?|[\\u{E0020}-\\u{E007E}]+\\u{E007F})?(?:\\u{200D}\\p{Emoji}(?:\\p{Emoji_Modifier}|\\u{FE0F}\\u{20E3}?|[\\u{E0020}-\\u{E007E}]+\\u{E007F})?)*)","gu");class I extends r.default.Component{constructor(t){super(t);const{content:e,replacementVariables:n,recommendedReplacementVariables:r}=this.props,i=(0,m.unserializeEditor)(e,n),o=this.determineCurrentReplacementVariables(n,r);this.state={editorState:i,searchValue:"",isSuggestionsOpen:!1,editorKey:this.props.fieldId,suggestions:this.mapReplacementVariablesToSuggestions(o)},this._serializedContent=e,this.initializeBinds(),this.initializeDraftJsPlugins()}initializeBinds(){this.onChange=this.onChange.bind(this),this.handleKeyCommand=this.handleKeyCommand.bind(this),this.onSearchChange=this.onSearchChange.bind(this),this.setEditorRef=this.setEditorRef.bind(this),this.handleCopyCutEvent=this.handleCopyCutEvent.bind(this),this.debouncedA11ySpeak=(0,a.default)(p.speak.bind(this),500),this.onSuggestionsOpenChange=this.onSuggestionsOpenChange.bind(this)}initializeDraftJsPlugins(){const t=(0,o.default)({mentionTrigger:"%",entityMutability:"IMMUTABLE",mentionComponent:g.Mention}),e=(0,s.default)({stripEntities:!1});this.pluginList={mentionsPlugin:t,singleLinePlugin:{...e,handleReturn:()=>{}}},this.pluginList=(0,d.applyFilters)("yoast.replacementVariableEditor.pluginList",this.pluginList)}serializeContent(t){const e=(0,m.serializeEditor)(t.getCurrentContent());this._serializedContent!==e&&(this._serializedContent=e,this.props.onChange(this._serializedContent))}onChange(t){return new Promise((e=>{t=(0,m.replaceReplacementVariables)(t,this.props.replacementVariables),t=(0,w.selectReplacementVariables)(t,this.state.editorState),this.setState({editorState:t},(()=>{this.serializeContent(t),e()}))}))}handleKeyCommand(t){if("backspace"!==t&&"delete"!==t)return"not-handled";let e=(0,b.removeSelectedText)(this.state.editorState);const n=e.getCurrentContent(),r=e.getSelection();if(!r.isCollapsed())return"not-handled";const i=r.getStartOffset();if(i<0)return"not-handled";const o=n.getBlockForKey(r.getStartKey()).getText(),s="backspace"===t?i-1:i+1;if((o.codePointAt(s)||0)<=127)return"not-handled";let a;return a="backspace"===t?this.getBackwardMatch(o,i):this.getForwardMatch(o,i),a?(e=(0,b.removeEmojiCompletely)(e,a,t),this.onChange(e).then((()=>this.focus())),"handled"):"not-handled"}getForwardMatch(t,e){let n=1;return[2,3,4,5,6,7,8,9,10,11,12,13,14].every((r=>{const i=t.slice(e,e+r);return!(null===i.match(x)||i.match(x).length>1||(n=r,0))})),t.slice(e,e+n).match(x)}getBackwardMatch(t,e){return t.slice(0,e).match(x)}mapReplacementVariablesToSuggestions(t){return t.map((t=>({...t,name:t.label,replaceName:t.name})))}suggestionsFilter(t,e){const n=t.toLowerCase();return e.filter((function(t){return!(t.hidden||n&&0!==t.name.toLowerCase().indexOf(n))}))}determineCurrentReplacementVariables(t,e,n=""){if(""===n&&!(0,u.default)(e)){const n=(0,c.default)(t,(t=>(0,f.default)(e,t.name)));if(0!==n.length)return n}return t}onSearchChange({value:t}){this.props.onSearchChange&&this.props.onSearchChange(t);const e=this.determineCurrentReplacementVariables(this.props.replacementVariables,this.props.recommendedReplacementVariables,t),n=this.mapReplacementVariablesToSuggestions(e);this.setState({searchValue:t,suggestions:this.suggestionsFilter(t,n)}),setTimeout((()=>{this.announceSearchResults()}))}onSuggestionsOpenChange(t){this.setState({isSuggestionsOpen:t})}announceSearchResults(){const{suggestions:t}=this.state;t.length?this.debouncedA11ySpeak((0,v.sprintf)((0,v._n)("%d result found, use up and down arrow keys to navigate","%d results found, use up and down arrow keys to navigate",t.length,"wordpress-seo"),t.length),"assertive"):this.debouncedA11ySpeak((0,v.__)("No results","wordpress-seo"),"assertive")}focus(){this.editor.focus()}setEditorRef(t){this.editor=t}setEditorFieldId(){(0,l.default)(this.editor,"editor.editor").id=this.props.fieldId}triggerReplacementVariableSuggestions(){let t=(0,b.removeSelectedText)(this.state.editorState);const e=t.getSelection(),n=t.getCurrentContent(),r=(0,b.getAnchorBlock)(n,e).getText(),i=(0,b.getCaretOffset)(e),o=!(0,b.hasWhitespaceAt)(r,i-1),s=!(0,b.hasWhitespaceAt)(r,i),a=(0,b.getTrigger)(o,s);if(t=(0,b.insertText)(t,a),s){const e=i+a.length-1;t=(0,b.moveCaret)(t,e)}this.onChange(t).then((()=>this.focus()))}componentDidUpdate(t,e){const{content:n,replacementVariables:r,recommendedReplacementVariables:i}=t,{searchValue:o}=this.state,s={},a=this.props,u=a.content!==this._serializedContent&&a.content!==n,c=a.replacementVariables!==r,f=a.replacementVariables.map((t=>t.name)).filter((t=>!r.map((t=>t.name)).includes(t))).some((t=>n.includes("%%"+t+"%%")));if(u&&(this._serializedContent=a.content,s.editorState=(0,m.unserializeEditor)(a.content,a.replacementVariables)),!u&&c&&f&&(this._serializedContent=a.content,s.editorState=(0,m.unserializeEditor)(a.content,a.replacementVariables)),c){const t=this.determineCurrentReplacementVariables(a.replacementVariables,i,o);s.suggestions=this.suggestionsFilter(o,this.mapReplacementVariablesToSuggestions(t))}(c||u)&&this.setState({...e,...s})}handleCopyCutEvent(t){const{editorState:e}=this.state,n=e.getSelection();if(n.getHasFocus())try{const r=t.clipboardData,i=e.getCurrentContent(),o=(0,m.serializeSelection)(i,n);r.setData("text/plain",o),t.preventDefault()}catch(t){console.error("Couldn't copy content of editor to clipboard, defaulting to browser copy behavior."),console.error("Original error: ",t)}}componentDidMount(){document.addEventListener("copy",this.handleCopyCutEvent),document.addEventListener("cut",this.handleCopyCutEvent),this.setEditorFieldId()}componentWillUnmount(){this.debouncedA11ySpeak.cancel(),document.removeEventListener("copy",this.handleCopyCutEvent),document.removeEventListener("cut",this.handleCopyCutEvent)}render(){const{MentionSuggestions:t}=this.pluginList.mentionsPlugin,{onFocus:e,onBlur:n,ariaLabelledBy:o,placeholder:s,theme:a,isDisabled:u,fieldId:c}=this.props,{editorState:f,suggestions:l,isSuggestionsOpen:h}=this.state;return r.default.createElement(r.default.Fragment,null,r.default.createElement(i.default,{key:this.state.editorKey,textDirectionality:a.isRtl?"RTL":"LTR",editorState:f,handleKeyCommand:this.handleKeyCommand,onChange:this.onChange,onFocus:e,onBlur:n,plugins:Object.values(this.pluginList),ref:this.setEditorRef,stripPastedStyles:!0,ariaLabelledBy:o,placeholder:s,spellCheck:!0,readOnly:u}),(0,d.applyFilters)("yoast.replacementVariableEditor.additionalPlugins",r.default.createElement(r.default.Fragment,null),this.pluginList,c),r.default.createElement(O,null,r.default.createElement(t,{onSearchChange:this.onSearchChange,suggestions:l,onOpenChange:this.onSuggestionsOpenChange,open:h})))}}e.ReplacementVariableEditorStandaloneInnerComponent=I,I.propTypes={content:h.default.string.isRequired,replacementVariables:y.replacementVariablesShape.isRequired,recommendedReplacementVariables:y.recommendedReplacementVariablesShape,ariaLabelledBy:h.default.string.isRequired,onSearchChange:h.default.func,onChange:h.default.func.isRequired,onFocus:h.default.func,onBlur:h.default.func,theme:h.default.object,placeholder:h.default.string,fieldId:h.default.string.isRequired,isDisabled:h.default.bool},I.defaultProps={onSearchChange:null,onFocus:()=>{},onBlur:()=>{},placeholder:"",theme:{isRtl:!1},recommendedReplacementVariables:[],isDisabled:!1},e.default=(0,_.withTheme)(I)},26895:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var r=u(n(99196)),i=u(n(85890)),o=n(81413),s=u(n(9283)),a=n(34353);function u(t){return t&&t.__esModule?t:{default:t}}class c extends r.default.Component{constructor(t){super(t),this.state={activeField:null,hoveredField:null},this.setFieldFocus=this.setFieldFocus.bind(this),this.handleChange=this.handleChange.bind(this),this.onClick=this.onClick.bind(this),this.onBlur=this.onBlur.bind(this)}handleChange(t,e){this.props.onChange(t,e)}setFieldFocus(t){this.setState({activeField:t})}onBlur(){this.setState({activeField:null})}onClick(t){this.setFieldFocus(t)}render(){const{data:t,replacementVariables:e,recommendedReplacementVariables:n,descriptionEditorFieldPlaceholder:i,hasPaperStyle:a,fieldIds:u,labels:c,hasNewBadge:f,isDisabled:l,hasPremiumBadge:h}=this.props,{activeField:p,hoveredField:d}=this.state;return r.default.createElement(o.ErrorBoundary,null,r.default.createElement(s.default,{descriptionEditorFieldPlaceholder:i,data:t,activeField:p,hoveredField:d,onChange:this.handleChange,onFocus:this.setFieldFocus,onBlur:this.onBlur,replacementVariables:e,recommendedReplacementVariables:n,containerPadding:a?"0 20px":"0",fieldIds:u,labels:c,hasNewBadge:f,isDisabled:l,hasPremiumBadge:h}))}}c.propTypes={replacementVariables:a.replacementVariablesShape,recommendedReplacementVariables:a.recommendedReplacementVariablesShape,data:i.default.shape({title:i.default.string.isRequired,description:i.default.string.isRequired}).isRequired,onChange:i.default.func.isRequired,descriptionEditorFieldPlaceholder:i.default.string,hasPaperStyle:i.default.bool,fieldIds:i.default.shape({title:i.default.string.isRequired,description:i.default.string.isRequired}).isRequired,labels:i.default.shape({title:i.default.string,description:i.default.string}),hasNewBadge:i.default.bool,isDisabled:i.default.bool,hasPremiumBadge:i.default.bool},c.defaultProps={replacementVariables:[],recommendedReplacementVariables:[],hasPaperStyle:!0,descriptionEditorFieldPlaceholder:null,labels:{},hasNewBadge:!1,isDisabled:!1,hasPremiumBadge:!1},e.default=c},9283:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.StyledEditor=void 0;var r=c(n(99196)),i=c(n(85890)),o=n(65736),s=c(n(98487)),a=c(n(51381)),u=n(34353);function c(t){return t&&t.__esModule?t:{default:t}}const f=e.StyledEditor=s.default.section` + padding: ${t=>t.padding?t.padding:"0 20px"}; +`;class l extends r.default.Component{constructor(t){super(t),this.elements={title:null,description:null},this.setRef=this.setRef.bind(this),this.setTitleRef=this.setTitleRef.bind(this),this.setDescriptionRef=this.setDescriptionRef.bind(this),this.triggerReplacementVariableSuggestions=this.triggerReplacementVariableSuggestions.bind(this),this.onFocusTitle=this.onFocusTitle.bind(this),this.onChangeTitle=this.onChangeTitle.bind(this),this.onFocusDescription=this.onFocusDescription.bind(this),this.onChangeDescription=this.onChangeDescription.bind(this)}setRef(t,e){this.elements[t]=e}setTitleRef(t){this.setRef("title",t)}setDescriptionRef(t){this.setRef("description",t)}componentDidUpdate(t){this.focusOnActiveFieldChange(t.activeField)}focusOnActiveFieldChange(t){const{activeField:e}=this.props;e&&e!==t&&this.elements[e].focus()}triggerReplacementVariableSuggestions(t){this.elements[t].triggerReplacementVariableSuggestions()}onFocusTitle(){this.props.onFocus("title")}onChangeTitle(t){this.props.onChange("title",t)}onFocusDescription(){this.props.onFocus("description")}onChangeDescription(t){this.props.onChange("description",t)}render(){const{descriptionEditorFieldPlaceholder:t,activeField:e,hoveredField:n,replacementVariables:i,recommendedReplacementVariables:s,onBlur:u,data:{title:c,description:l},containerPadding:h,fieldIds:p,labels:d,hasNewBadge:v,isDisabled:_,hasPremiumBadge:y}=this.props;return r.default.createElement(f,{padding:h},r.default.createElement(a.default,{type:"title",label:d.title||(0,o.__)("SEO title","wordpress-seo"),onFocus:this.onFocusTitle,onBlur:u,isActive:"title"===e,isHovered:"title"===n,editorRef:this.setTitleRef,replacementVariables:i,recommendedReplacementVariables:s,content:c,onChange:this.onChangeTitle,fieldId:p.title,hasNewBadge:v,isDisabled:_,hasPremiumBadge:y}),r.default.createElement(a.default,{type:"description",placeholder:t,label:d.description||(0,o.__)("Meta description","wordpress-seo"),onFocus:this.onFocusDescription,onBlur:u,isActive:"description"===e,isHovered:"description"===n,editorRef:this.setDescriptionRef,replacementVariables:i,recommendedReplacementVariables:s,content:l,onChange:this.onChangeDescription,fieldId:p.description,hasNewBadge:v,isDisabled:_,hasPremiumBadge:y}))}}l.propTypes={replacementVariables:u.replacementVariablesShape,recommendedReplacementVariables:u.recommendedReplacementVariablesShape,onChange:i.default.func.isRequired,onFocus:i.default.func,onBlur:i.default.func,data:i.default.shape({title:i.default.string,description:i.default.string}).isRequired,activeField:i.default.oneOf(["title","description"]),hoveredField:i.default.oneOf(["title","description"]),descriptionEditorFieldPlaceholder:i.default.string,containerPadding:i.default.string,fieldIds:i.default.shape({title:i.default.string.isRequired,description:i.default.string.isRequired}).isRequired,labels:i.default.shape({title:i.default.string,description:i.default.string}),hasNewBadge:i.default.bool,isDisabled:i.default.bool,hasPremiumBadge:i.default.bool},l.defaultProps={replacementVariables:[],recommendedReplacementVariables:[],onFocus:()=>{},onBlur:()=>{},containerPadding:"0 20px",descriptionEditorFieldPlaceholder:null,labels:{},hasNewBadge:!1,isDisabled:!1,hasPremiumBadge:!1,activeField:"",hoveredField:""},e.default=l},34353:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.replacementVariablesShape=e.recommendedReplacementVariablesShape=void 0;var r,i=(r=n(85890))&&r.__esModule?r:{default:r};e.replacementVariablesShape=i.default.arrayOf(i.default.shape({name:i.default.string.isRequired,value:i.default.string.isRequired,label:i.default.string,description:i.default.string,hidden:i.default.bool})),e.recommendedReplacementVariablesShape=i.default.arrayOf(i.default.string)},17481:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.removeSelectedText=e.removeEmojiCompletely=e.moveCaret=e.insertText=e.hasWhitespaceAt=e.getTrigger=e.getCaretOffset=e.getAnchorBlock=void 0;var r=n(7206);e.getTrigger=(t,e)=>{let n="%";return t&&(n=" "+n),e&&(n+=" "),n},e.hasWhitespaceAt=(t,e)=>{const n=t.charAt(e);return 0===n.length||/\s/.test(n)},e.getCaretOffset=t=>t.getIsBackward()?t.getEndOffset():t.getStartOffset();const i=(t,e)=>{const n=e.getAnchorKey();return t.getBlockForKey(n)};e.getAnchorBlock=i,e.insertText=(t,e)=>{const n=t.getCurrentContent(),i=t.getSelection();if(!i.isCollapsed())return t;const o=r.Modifier.insertText(n,i,e);return r.EditorState.push(t,o,"insert-characters")},e.removeSelectedText=t=>{const e=t.getCurrentContent(),n=t.getSelection(),i=r.Modifier.removeRange(e,n,"backward");return r.EditorState.push(t,i,"remove-range")},e.moveCaret=(t,e,n="")=>{const o=t.getCurrentContent(),s=t.getSelection();""===n&&(n=i(o,s).getKey());const a=r.SelectionState.createEmpty(n).merge({anchorOffset:e,focusOffset:e});return r.EditorState.acceptSelection(t,a)},e.removeEmojiCompletely=(t,e,n)=>{const i=t.getSelection(),o=t.getCurrentContent(),s=i.getStartOffset(),a=o.getBlockForKey(i.getStartKey()),u=e[e.length-1].length,c="backspace"===n?s-u:s+u,f=new r.SelectionState({anchorOffset:c,anchorKey:a.getKey(),focusOffset:s,focusKey:a.getKey(),isBackward:"delete"===n,hasFocus:i.getHasFocus()});return r.EditorState.push(t,r.Modifier.replaceText(o,f,""),"remove-range")}},45608:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getEntityAtPosition=o,e.getEntityRange=i,e.selectReplacementVariables=function(t,e){const n=t.getSelection(),u=e.getSelection(),c=t.getCurrentContent();if(n===u)return t;const f=function(t,e,n){const r=t.getStartOffset(),u=t.getStartKey(),c=t.getEndOffset(),f=t.getEndKey(),{startOffsetProperty:l,endOffsetProperty:h}=s(t.getIsBackward()),p=o(n,u,r);if(null!==p){const r=i(n,u,p),{start:o,end:s}=r;t=a(e,r)?t.merge({[l]:s}):t.merge({[l]:o})}const d=o(n,f,c);if(null!==d){const r=i(n,u,d),{start:o,end:s}=r;t=a(e,r)?t.merge({[h]:o}):t.merge({[h]:s})}return t}(n,u,c);return f!==n&&(t=r.EditorState.forceSelection(t,f)),t};var r=n(7206);function i(t,e,n){const r=t.getBlockForKey(e);let i=null;return r.findEntityRanges((t=>t.getEntity()===n),((t,e)=>{i={start:t,end:e}})),i}function o(t,e,n){const r=t.getBlockForKey(e).getEntityAt(n),o=i(t,e,r);return null===o||o.start===n?null:r}const s=function(t){let e="anchorOffset",n="focusOffset";return t&&(e="focusOffset",n="anchorOffset"),{startOffsetProperty:e,endOffsetProperty:n}};function a(t,e){const{start:n,end:r}=e;return t.getStartOffset()<=n&&t.getEndOffset()>=r}},31689:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.addLabel=v,e.addPositionInformation=_,e.createEntityInContent=g,e.findReplacementVariables=d,e.getReplacementVariableLabel=p,e.getSelectedText=b,e.moveSelectionAfterReplacement=y,e.replaceByPosition=f,e.replaceReplacementVariables=w,e.replaceVariableWithEntity=m,e.serializeBlock=h,e.serializeEditor=function(t,e=" "){return t.getBlockMap().map((e=>h(e,(e=>t.getEntity(e))))).join(e)},e.serializeSelection=function(t,e,n=" "){const r=e.getStartKey(),i=e.getEndKey(),o=t.getBlockMap();let s=!1;return o.skipUntil((function(t){return t.getKey()===r})).takeUntil((function(t){const e=s;return t.getKey()===i&&(s=!0),e})).map((function(n){const o=n.getKey(),s={};return o===r&&(s.start=e.getStartOffset()),o===i&&(s.end=e.getEndOffset()),h(n,(e=>t.getEntity(e)),s)})).join(n)},e.serializeVariable=c,e.unserializeEditor=function(t,e){return w(r.EditorState.createWithContent(r.ContentState.createFromText(t)),e)};var r=n(7206),i=n(23695);const o="%%",s=/%%([A-Za-z0-9_]+)%%/g,a="%mention",u="IMMUTABLE";function c(t){return o+t+o}function f(t,e=[]){return[...e].reverse().forEach((e=>{const{start:n,end:r,replacementText:i}=e,o=t.slice(0,n),s=t.slice(r,t.length);t=o+i+s})),t}function l(t,e,n){return t>=e&&t<=n}function h(t,e,{start:n=0,end:r=t.getText().length}={}){const i=t.getText().slice(n,r),o=[];return t.findEntityRanges((t=>!!t.getEntity()),((i,s)=>{if(l(i,n,r)&&l(s,n,r)){const r=e(t.getEntityAt(i));r.data.mention&&o.push({start:i-n,end:s-n,replacementText:c(r.data.mention.replaceName)})}})),f(i,o)}function p(t,e){let n=e;return t.forEach((t=>{t.name===e&&t.label&&(n=t.label)})),n}function d(t){const e=[];let n;for(;n=s.exec(t);){const[t,r]=n;e.push({name:r,start:n.index,length:t.length})}return e}function v(t,e){return{...t,label:p(e,t.name)}}function _(t){return{...t,start:t.start,end:t.start+t.length,delta:t.label.length-t.length}}function y(t,e,n){const{start:r,end:i,delta:o}=n;if(t.hasEdgeWithin(e,r,i)){const e=i+o;t=t.merge({anchorOffset:e,focusOffset:e})}else t.focusOffset>i&&(t=t.merge({anchorOffset:t.anchorOffset+o,focusOffset:t.focusOffset+o}));return t}function g(t,e){const n={mention:{replaceName:e.name}};return t.createEntity(a,u,n)}function m(t,e,n){let i=t.getCurrentContent();const o=r.SelectionState.createEmpty(n).merge({anchorOffset:e.start,focusOffset:e.end});i=g(i,e);const s=r.Modifier.replaceText(i,o,e.label,null,i.getLastCreatedEntityKey());return r.EditorState.push(t,s,"apply-entity")}function b(t,e){const n=e.getAnchorKey(),r=t.getCurrentContent().getBlockForKey(n),i=e.getStartOffset(),o=e.getEndOffset();return r.getText().slice(i,o)}function w(t,e){const n=t.getCurrentContent().getBlockMap();let o=t;return n.forEach((t=>{const{text:n,key:s}=t;[...d(n)].reverse().forEach((t=>{t=_(t=v(t,e));let n=o.getSelection();n=y(n,s,t);const a=function(t,e,n,o){const s=t.getCurrentContent(),a=b(t,r.SelectionState.createEmpty(n).merge({anchorOffset:o.end,focusOffset:o.end+1}));if(!(0,i.getWordBoundaries)().includes(a)){const i=r.SelectionState.createEmpty(n).merge({anchorOffset:o.end,focusOffset:o.end}),a=r.Modifier.insertText(s,i," ");t=r.EditorState.push(t,a,"insert-characters"),e.getAnchorOffset()>=o.start&&(e=e.merge({anchorOffset:e.getAnchorOffset()+1,focusOffset:e.getFocusOffset()+1}))}return{editorState:t,selection:e}}(o,n,s,t);o=m(a.editorState,t,s),o=r.EditorState.acceptSelection(o,a.selection)}))})),o}},32183:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TriggerReplacementVariableSuggestionsButton=e.TitleInputContainer=e.StandardButton=e.FormSection=e.DescriptionInputContainer=e.ButtonsContainer=void 0;var r,i=(r=n(98487))&&r.__esModule?r:{default:r},o=n(23695),s=n(37188),a=n(81413);const u="#707070",c=(e.TitleInputContainer=(0,i.default)(a.VariableEditorInputContainer)` + .public-DraftStyleDefault-block { + line-height: 1.85714285; // 26px based on 14px font-size + } + + .public-DraftEditorPlaceholder-root { + color: ${u}; + line-height: 1.85714285; // 26px based on 14px font-size + } + + .public-DraftEditorPlaceholder-hasFocus { + color: ${u}; + } +`,e.DescriptionInputContainer=(0,i.default)(a.VariableEditorInputContainer)` + min-height: 72px; + padding: 4px 5px; + line-height: 1.85714285; // 26px based on 14px font-size + + .public-DraftEditorPlaceholder-root { + color: ${u}; + position: absolute; + line-height: 1.85714285; // 26px based on 14px font-size + } + + .public-DraftEditorPlaceholder-hasFocus { + color: ${u}; + position: absolute; + } +`,e.FormSection=i.default.div` + display: flex; + flex-wrap: wrap; + align-items: center; + margin: 16px 0 0 0; +`,e.StandardButton=(0,i.default)(a.Button)` + color: #303030; + box-sizing: border-box; + border-radius: 4px; + box-shadow: inset 0 -2px 0 0 rgba(0,0,0,0.1); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + padding: 4px; + border: 1px solid #dbdbdb; + font-size: 14px; + font-weight: 400; + line-height: 1.5; + margin-bottom: 5px; + max-width: 200px; + padding: 0 0.5em; +`);e.TriggerReplacementVariableSuggestionsButton=(0,i.default)(c)` + font-size: 13px; + margin-bottom: 0; /* Override StandardButton margin instead of changing that. */ + & svg { + ${(0,o.getDirectionalStyle)("margin-right","margin-left")}: 7px; + fill: ${s.colors.$color_grey_dark}; + } +`,e.ButtonsContainer=i.default.div` + display: inline-flex; + gap: 0.5em; + margin-inline-start: auto; + margin-bottom: 5px; +`},60940:(t,e,n)=>{"use strict";n.r(e),n.d(e,{default:()=>c});var r=n(66581),i=n(7206),o=/\n/g;function s(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";return t.replace(o,e)}function a(t){return t.set("entity",null)}var u={stripEntities:!0};const c=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t=Object.assign({},u,t),{blockRenderMap:(0,r.Map)({unstyled:{element:"div"}}),onChange:function(e){var n=e.getCurrentContent().getBlocksAsArray();if(n.length>1)e=function(t,e,n){e=e||t.getCurrentContent().getBlocksAsArray();var o=(0,r.List)(),u=(0,r.List)();e.forEach((function(t){"atomic"!==t.getType()&&(o=o.push(s(t.getText())),u=u.concat(t.getCharacterList()))})),n.stripEntities&&(u=u.map(a));var c=new i.ContentBlock({key:(0,i.genKey)(),text:o.join(""),type:"unstyled",characterList:u,depth:0}),f=i.ContentState.createFromBlockArray([c]);return t=i.EditorState.push(t,f,"remove-range"),i.EditorState.moveFocusToEnd(t)}(e,n,t);else{var u=n[0],c=u.getText(),f=u.getCharacterList(),l=t.stripEntities&&function(t){var e=!1;return t.forEach((function(t){null!==t.get("entity")&&(e=!0)})),e}(f);if(o.test(c)||l){c=s(c),t.stripEntities&&(f=f.map(a)),u=new i.ContentBlock({key:(0,i.genKey)(),text:c,type:"unstyled",characterList:f,depth:0});var h=i.ContentState.createFromBlockArray([u]);e=i.EditorState.push(e,h,"insert-characters")}}return e},handleReturn:function(t){return"handled"}}}},66581:function(t){t.exports=function(){"use strict";var t=Array.prototype.slice;function e(t,e){e&&(t.prototype=Object.create(e.prototype)),t.prototype.constructor=t}function n(t){return s(t)?t:J(t)}function r(t){return a(t)?t:$(t)}function i(t){return u(t)?t:Y(t)}function o(t){return s(t)&&!c(t)?t:X(t)}function s(t){return!(!t||!t[l])}function a(t){return!(!t||!t[h])}function u(t){return!(!t||!t[p])}function c(t){return a(t)||u(t)}function f(t){return!(!t||!t[d])}e(r,n),e(i,n),e(o,n),n.isIterable=s,n.isKeyed=a,n.isIndexed=u,n.isAssociative=c,n.isOrdered=f,n.Keyed=r,n.Indexed=i,n.Set=o;var l="@@__IMMUTABLE_ITERABLE__@@",h="@@__IMMUTABLE_KEYED__@@",p="@@__IMMUTABLE_INDEXED__@@",d="@@__IMMUTABLE_ORDERED__@@",v="delete",_=5,y=1<<_,g=y-1,m={},b={value:!1},w={value:!1};function S(t){return t.value=!1,t}function E(t){t&&(t.value=!0)}function O(){}function x(t,e){e=e||0;for(var n=Math.max(0,t.length-e),r=new Array(n),i=0;i>>0;if(""+n!==e||4294967295===n)return NaN;e=n}return e<0?I(t)+e:e}function M(){return!0}function C(t,e,n){return(0===t||void 0!==n&&t<=-n)&&(void 0===e||void 0!==n&&e>=n)}function D(t,e){return R(t,e,0)}function k(t,e){return R(t,e,e)}function R(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}var A=0,q=1,j=2,P="function"==typeof Symbol&&Symbol.iterator,B="@@iterator",T=P||B;function F(t){this.next=t}function K(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function V(){return{value:void 0,done:!0}}function L(t){return!!N(t)}function U(t){return t&&"function"==typeof t.next}function W(t){var e=N(t);return e&&e.call(t)}function N(t){var e=t&&(P&&t[P]||t[B]);if("function"==typeof e)return e}function H(t){return t&&"number"==typeof t.length}function J(t){return null==t?st():s(t)?t.toSeq():function(t){var e=ct(t)||"object"==typeof t&&new nt(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}(t)}function $(t){return null==t?st().toKeyedSeq():s(t)?a(t)?t.toSeq():t.fromEntrySeq():at(t)}function Y(t){return null==t?st():s(t)?a(t)?t.entrySeq():t.toIndexedSeq():ut(t)}function X(t){return(null==t?st():s(t)?a(t)?t.entrySeq():t:ut(t)).toSetSeq()}F.prototype.toString=function(){return"[Iterator]"},F.KEYS=A,F.VALUES=q,F.ENTRIES=j,F.prototype.inspect=F.prototype.toSource=function(){return this.toString()},F.prototype[T]=function(){return this},e(J,n),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString("Seq {","}")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(t,e){return ft(this,t,e,!0)},J.prototype.__iterator=function(t,e){return lt(this,t,e,!0)},e($,J),$.prototype.toKeyedSeq=function(){return this},e(Y,J),Y.of=function(){return Y(arguments)},Y.prototype.toIndexedSeq=function(){return this},Y.prototype.toString=function(){return this.__toString("Seq [","]")},Y.prototype.__iterate=function(t,e){return ft(this,t,e,!1)},Y.prototype.__iterator=function(t,e){return lt(this,t,e,!1)},e(X,J),X.of=function(){return X(arguments)},X.prototype.toSetSeq=function(){return this},J.isSeq=ot,J.Keyed=$,J.Set=X,J.Indexed=Y;var G,Q,Z,tt="@@__IMMUTABLE_SEQ__@@";function et(t){this._array=t,this.size=t.length}function nt(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function rt(t){this._iterable=t,this.size=t.length||t.size}function it(t){this._iterator=t,this._iteratorCache=[]}function ot(t){return!(!t||!t[tt])}function st(){return G||(G=new et([]))}function at(t){var e=Array.isArray(t)?new et(t).fromEntrySeq():U(t)?new it(t).fromEntrySeq():L(t)?new rt(t).fromEntrySeq():"object"==typeof t?new nt(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function ut(t){var e=ct(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function ct(t){return H(t)?new et(t):U(t)?new it(t):L(t)?new rt(t):void 0}function ft(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,s=0;s<=o;s++){var a=i[n?o-s:s];if(!1===e(a[1],r?a[0]:s,t))return s+1}return s}return t.__iterateUncached(e,n)}function lt(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,s=0;return new F((function(){var t=i[n?o-s:s];return s++>o?{value:void 0,done:!0}:K(e,r?t[0]:s-1,t[1])}))}return t.__iteratorUncached(e,n)}function ht(t,e){return e?pt(e,t,"",{"":t}):dt(t)}function pt(t,e,n,r){return Array.isArray(e)?t.call(r,n,Y(e).map((function(n,r){return pt(t,n,r,e)}))):vt(e)?t.call(r,n,$(e).map((function(n,r){return pt(t,n,r,e)}))):e}function dt(t){return Array.isArray(t)?Y(t).map(dt).toList():vt(t)?$(t).map(dt).toMap():t}function vt(t){return t&&(t.constructor===Object||void 0===t.constructor)}function _t(t,e){if(t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if((t=t.valueOf())===(e=e.valueOf())||t!=t&&e!=e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function yt(t,e){if(t===e)return!0;if(!s(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||a(t)!==a(e)||u(t)!==u(e)||f(t)!==f(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!c(t);if(f(t)){var r=t.entries();return e.every((function(t,e){var i=r.next().value;return i&&_t(i[1],t)&&(n||_t(i[0],e))}))&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var l=!0,h=e.__iterate((function(e,r){if(n?!t.has(e):i?!_t(e,t.get(r,m)):!_t(t.get(r,m),e))return l=!1,!1}));return l&&t.size===h}function gt(t,e){if(!(this instanceof gt))return new gt(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(Q)return Q;Q=this}}function mt(t,e){if(!t)throw new Error(e)}function bt(t,e,n){if(!(this instanceof bt))return new bt(t,e,n);if(mt(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),er?{value:void 0,done:!0}:K(t,i,n[e?r-i++:i++])}))},e(nt,$),nt.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},nt.prototype.has=function(t){return this._object.hasOwnProperty(t)},nt.prototype.__iterate=function(t,e){for(var n=this._object,r=this._keys,i=r.length-1,o=0;o<=i;o++){var s=r[e?i-o:o];if(!1===t(n[s],s,this))return o+1}return o},nt.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new F((function(){var s=r[e?i-o:o];return o++>i?{value:void 0,done:!0}:K(t,s,n[s])}))},nt.prototype[d]=!0,e(rt,Y),rt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var n=W(this._iterable),r=0;if(U(n))for(var i;!(i=n.next()).done&&!1!==t(i.value,r++,this););return r},rt.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=W(this._iterable);if(!U(n))return new F(V);var r=0;return new F((function(){var e=n.next();return e.done?e:K(t,r++,e.value)}))},e(it,Y),it.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var n,r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return K(t,i,r[i++])}))},e(gt,Y),gt.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},gt.prototype.get=function(t,e){return this.has(t)?this._value:e},gt.prototype.includes=function(t){return _t(this._value,t)},gt.prototype.slice=function(t,e){var n=this.size;return C(t,e,n)?this:new gt(this._value,k(e,n)-D(t,n))},gt.prototype.reverse=function(){return this},gt.prototype.indexOf=function(t){return _t(this._value,t)?0:-1},gt.prototype.lastIndexOf=function(t){return _t(this._value,t)?this.size:-1},gt.prototype.__iterate=function(t,e){for(var n=0;n=0&&e=0&&nn?{value:void 0,done:!0}:K(t,o++,s)}))},bt.prototype.equals=function(t){return t instanceof bt?this._start===t._start&&this._end===t._end&&this._step===t._step:yt(this,t)},e(wt,n),e(St,wt),e(Et,wt),e(Ot,wt),wt.Keyed=St,wt.Indexed=Et,wt.Set=Ot;var xt="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){var n=65535&(t|=0),r=65535&(e|=0);return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0};function It(t){return t>>>1&1073741824|3221225471&t}function zt(t){if(!1===t||null==t)return 0;if("function"==typeof t.valueOf&&(!1===(t=t.valueOf())||null==t))return 0;if(!0===t)return 1;var e=typeof t;if("number"===e){if(t!=t||t===1/0)return 0;var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)n^=t/=4294967295;return It(n)}if("string"===e)return t.length>jt?function(t){var e=Tt[t];return void 0===e&&(e=Mt(t),Bt===Pt&&(Bt=0,Tt={}),Bt++,Tt[t]=e),e}(t):Mt(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return function(t){var e;if(Rt&&void 0!==(e=kt.get(t)))return e;if(void 0!==(e=t[qt]))return e;if(!Dt){if(void 0!==(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[qt]))return e;if(void 0!==(e=function(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}(t)))return e}if(e=++At,1073741824&At&&(At=0),Rt)kt.set(t,e);else{if(void 0!==Ct&&!1===Ct(t))throw new Error("Non-extensible objects are not allowed as keys.");if(Dt)Object.defineProperty(t,qt,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[qt]=e;else{if(void 0===t.nodeType)throw new Error("Unable to set a non-enumerable property on object.");t[qt]=e}}return e}(t);if("function"==typeof t.toString)return Mt(t.toString());throw new Error("Value type "+e+" cannot be hashed.")}function Mt(t){for(var e=0,n=0;n=e.length)throw new Error("Missing value for key: "+e[n]);t.set(e[n],e[n+1])}}))},Kt.prototype.toString=function(){return this.__toString("Map {","}")},Kt.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Kt.prototype.set=function(t,e){return ee(this,t,e)},Kt.prototype.setIn=function(t,e){return this.updateIn(t,m,(function(){return e}))},Kt.prototype.remove=function(t){return ee(this,t,m)},Kt.prototype.deleteIn=function(t){return this.updateIn(t,(function(){return m}))},Kt.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Kt.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=ce(this,sn(t),e,n);return r===m?void 0:r},Kt.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):te()},Kt.prototype.merge=function(){return oe(this,void 0,arguments)},Kt.prototype.mergeWith=function(e){return oe(this,e,t.call(arguments,1))},Kt.prototype.mergeIn=function(e){var n=t.call(arguments,1);return this.updateIn(e,te(),(function(t){return"function"==typeof t.merge?t.merge.apply(t,n):n[n.length-1]}))},Kt.prototype.mergeDeep=function(){return oe(this,se,arguments)},Kt.prototype.mergeDeepWith=function(e){var n=t.call(arguments,1);return oe(this,ae(e),n)},Kt.prototype.mergeDeepIn=function(e){var n=t.call(arguments,1);return this.updateIn(e,te(),(function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,n):n[n.length-1]}))},Kt.prototype.sort=function(t){return Re($e(this,t))},Kt.prototype.sortBy=function(t,e){return Re($e(this,e,t))},Kt.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Kt.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new O)},Kt.prototype.asImmutable=function(){return this.__ensureOwner()},Kt.prototype.wasAltered=function(){return this.__altered},Kt.prototype.__iterator=function(t,e){return new Xt(this,t,e)},Kt.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate((function(e){return r++,t(e[1],e[0],n)}),e),r},Kt.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Zt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Kt.isMap=Vt;var Lt,Ut="@@__IMMUTABLE_MAP__@@",Wt=Kt.prototype;function Nt(t,e){this.ownerID=t,this.entries=e}function Ht(t,e,n){this.ownerID=t,this.bitmap=e,this.nodes=n}function Jt(t,e,n){this.ownerID=t,this.count=e,this.nodes=n}function $t(t,e,n){this.ownerID=t,this.keyHash=e,this.entries=n}function Yt(t,e,n){this.ownerID=t,this.keyHash=e,this.entry=n}function Xt(t,e,n){this._type=e,this._reverse=n,this._stack=t._root&&Qt(t._root)}function Gt(t,e){return K(t,e[0],e[1])}function Qt(t,e){return{node:t,index:0,__prev:e}}function Zt(t,e,n,r){var i=Object.create(Wt);return i.size=t,i._root=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function te(){return Lt||(Lt=Zt(0))}function ee(t,e,n){var r,i;if(t._root){var o=S(b),s=S(w);if(r=ne(t._root,t.__ownerID,0,void 0,e,n,o,s),!s.value)return t;i=t.size+(o.value?n===m?-1:1:0)}else{if(n===m)return t;i=1,r=new Nt(t.__ownerID,[[e,n]])}return t.__ownerID?(t.size=i,t._root=r,t.__hash=void 0,t.__altered=!0,t):r?Zt(i,r):te()}function ne(t,e,n,r,i,o,s,a){return t?t.update(e,n,r,i,o,s,a):o===m?t:(E(a),E(s),new Yt(e,r,[i,o]))}function re(t){return t.constructor===Yt||t.constructor===$t}function ie(t,e,n,r,i){if(t.keyHash===r)return new $t(e,r,[t.entry,i]);var o,s=(0===n?t.keyHash:t.keyHash>>>n)&g,a=(0===n?r:r>>>n)&g;return new Ht(e,1<>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135,127&(t+=t>>8)+(t>>16)}function le(t,e,n,r){var i=r?t:x(t);return i[e]=n,i}Wt[Ut]=!0,Wt[v]=Wt.remove,Wt.removeIn=Wt.deleteIn,Nt.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,s=i.length;o=he)return function(t,e,n,r){t||(t=new O);for(var i=new Yt(t,zt(n),[n,r]),o=0;o>>t)&g),o=this.bitmap;return 0==(o&i)?r:this.nodes[fe(o&i-1)].get(t+_,e,n,r)},Ht.prototype.update=function(t,e,n,r,i,o,s){void 0===n&&(n=zt(r));var a=(0===e?n:n>>>e)&g,u=1<=pe)return function(t,e,n,r,i){for(var o=0,s=new Array(y),a=0;0!==n;a++,n>>>=1)s[a]=1&n?e[o++]:void 0;return s[r]=i,new Jt(t,o+1,s)}(t,h,c,a,d);if(f&&!d&&2===h.length&&re(h[1^l]))return h[1^l];if(f&&d&&1===h.length&&re(d))return d;var v=t&&t===this.ownerID,b=f?d?c:c^u:c|u,w=f?d?le(h,l,d,v):function(t,e,n){var r=t.length-1;if(n&&e===r)return t.pop(),t;for(var i=new Array(r),o=0,s=0;s>>t)&g,o=this.nodes[i];return o?o.get(t+_,e,n,r):r},Jt.prototype.update=function(t,e,n,r,i,o,s){void 0===n&&(n=zt(r));var a=(0===e?n:n>>>e)&g,u=i===m,c=this.nodes,f=c[a];if(u&&!f)return this;var l=ne(f,t,e+_,n,r,i,o,s);if(l===f)return this;var h=this.count;if(f){if(!l&&--h0&&r=0&&t=t.size||e<0)return t.withMutations((function(t){e<0?Ce(t,e).set(0,n):Ce(t,0,e+1).set(e,n)}));e+=t._origin;var r=t._tail,i=t._root,o=S(w);return e>=ke(t._capacity)?r=Ie(r,t.__ownerID,0,e,n,o):i=Ie(i,t.__ownerID,t._level,e,n,o),o.value?t.__ownerID?(t._root=i,t._tail=r,t.__hash=void 0,t.__altered=!0,t):Oe(t._origin,t._capacity,t._level,i,r):t}(this,t,e)},ve.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},ve.prototype.insert=function(t,e){return this.splice(t,0,e)},ve.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=_,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):xe()},ve.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations((function(n){Ce(n,0,e+t.length);for(var r=0;r>>e&g;if(r>=this.array.length)return new me([],t);var i,o=0===r;if(e>0){var s=this.array[r];if((i=s&&s.removeBefore(t,e-_,n))===s&&o)return this}if(o&&!i)return this;var a=ze(this,t);if(!o)for(var u=0;u>>e&g;if(i>=this.array.length)return this;if(e>0){var o=this.array[i];if((r=o&&o.removeAfter(t,e-_,n))===o&&i===this.array.length-1)return this}var s=ze(this,t);return s.array.splice(i+1),r&&(s.array[i]=r),s};var be,we,Se={};function Ee(t,e){var n=t._origin,r=t._capacity,i=ke(r),o=t._tail;return s(t._root,t._level,0);function s(t,a,u){return 0===a?function(t,s){var a=s===i?o&&o.array:t&&t.array,u=s>n?0:n-s,c=r-s;return c>y&&(c=y),function(){if(u===c)return Se;var t=e?--c:u++;return a&&a[t]}}(t,u):function(t,i,o){var a,u=t&&t.array,c=o>n?0:n-o>>i,f=1+(r-o>>i);return f>y&&(f=y),function(){for(;;){if(a){var t=a();if(t!==Se)return t;a=null}if(c===f)return Se;var n=e?--f:c++;a=s(u&&u[n],i-_,o+(n<>>n&g,u=t&&a0){var c=t&&t.array[a],f=Ie(c,e,n-_,r,i,o);return f===c?t:((s=ze(t,e)).array[a]=f,s)}return u&&t.array[a]===i?t:(E(o),s=ze(t,e),void 0===i&&a===s.array.length-1?s.array.pop():s.array[a]=i,s)}function ze(t,e){return e&&t&&e===t.ownerID?t:new me(t?t.array.slice():[],e)}function Me(t,e){if(e>=ke(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&g],r-=_;return n}}function Ce(t,e,n){void 0!==e&&(e|=0),void 0!==n&&(n|=0);var r=t.__ownerID||new O,i=t._origin,o=t._capacity,s=i+e,a=void 0===n?o:n<0?o+n:i+n;if(s===i&&a===o)return t;if(s>=a)return t.clear();for(var u=t._level,c=t._root,f=0;s+f<0;)c=new me(c&&c.array.length?[void 0,c]:[],r),f+=1<<(u+=_);f&&(s+=f,i+=f,a+=f,o+=f);for(var l=ke(o),h=ke(a);h>=1<l?new me([],r):p;if(p&&h>l&&s_;y-=_){var m=l>>>y&g;v=v.array[m]=ze(v.array[m],r)}v.array[l>>>_&g]=p}if(a=h)s-=h,a-=h,u=_,c=null,d=d&&d.removeBefore(r,0,s);else if(s>i||h>>u&g;if(b!==h>>>u&g)break;b&&(f+=(1<i&&(c=c.removeBefore(r,u,s-f)),c&&ho&&(o=c.size),s(u)||(c=c.map((function(t){return ht(t)}))),r.push(c)}return o>t.size&&(t=t.setSize(o)),ue(t,e,r)}function ke(t){return t>>_<<_}function Re(t){return null==t?je():Ae(t)?t:je().withMutations((function(e){var n=r(t);Ft(n.size),n.forEach((function(t,n){return e.set(n,t)}))}))}function Ae(t){return Vt(t)&&f(t)}function qe(t,e,n,r){var i=Object.create(Re.prototype);return i.size=t?t.size:0,i._map=t,i._list=e,i.__ownerID=n,i.__hash=r,i}function je(){return we||(we=qe(te(),xe()))}function Pe(t,e,n){var r,i,o=t._map,s=t._list,a=o.get(e),u=void 0!==a;if(n===m){if(!u)return t;s.size>=y&&s.size>=2*o.size?(r=(i=s.filter((function(t,e){return void 0!==t&&a!==e}))).toKeyedSeq().map((function(t){return t[0]})).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=a===s.size-1?s.pop():s.set(a,void 0))}else if(u){if(n===s.get(a)[1])return t;r=o,i=s.set(a,[e,n])}else r=o.set(e,s.size),i=s.set(s.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):qe(r,i)}function Be(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function Te(t){this._iter=t,this.size=t.size}function Fe(t){this._iter=t,this.size=t.size}function Ke(t){this._iter=t,this.size=t.size}function Ve(t){var e=nn(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=rn,e.__iterateUncached=function(e,n){var r=this;return t.__iterate((function(t,n){return!1!==e(n,t,r)}),n)},e.__iteratorUncached=function(e,n){if(e===j){var r=t.__iterator(e,n);return new F((function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t}))}return t.__iterator(e===q?A:q,n)},e}function Le(t,e,n){var r=nn(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,m);return o===m?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate((function(t,i,s){return!1!==r(e.call(n,t,i,s),i,o)}),i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(j,i);return new F((function(){var i=o.next();if(i.done)return i;var s=i.value,a=s[0];return K(r,a,e.call(n,s[1],a,t),i)}))},r}function Ue(t,e){var n=nn(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=Ve(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=rn,n.__iterate=function(e,n){var r=this;return t.__iterate((function(t,n){return e(t,n,r)}),!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function We(t,e,n,r){var i=nn(t);return r&&(i.has=function(r){var i=t.get(r,m);return i!==m&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,m);return o!==m&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var s=this,a=0;return t.__iterate((function(t,o,u){if(e.call(n,t,o,u))return a++,i(t,r?o:a-1,s)}),o),a},i.__iteratorUncached=function(i,o){var s=t.__iterator(j,o),a=0;return new F((function(){for(;;){var o=s.next();if(o.done)return o;var u=o.value,c=u[0],f=u[1];if(e.call(n,f,c,t))return K(i,r?c:a++,f,o)}}))},i}function Ne(t,e,n,r){var i=t.size;if(void 0!==e&&(e|=0),void 0!==n&&(n===1/0?n=i:n|=0),C(e,n,i))return t;var o=D(e,i),s=k(n,i);if(o!=o||s!=s)return Ne(t.toSeq().cacheResult(),e,n,r);var a,u=s-o;u==u&&(a=u<0?0:u);var c=nn(t);return c.size=0===a?a:t.size&&a||void 0,!r&&ot(t)&&a>=0&&(c.get=function(e,n){return(e=z(this,e))>=0&&ea)return{value:void 0,done:!0};var t=i.next();return r||e===q?t:K(e,u-1,e===A?void 0:t.value[1],t)}))},c}function He(t,e,n,r){var i=nn(t);return i.__iterateUncached=function(i,o){var s=this;if(o)return this.cacheResult().__iterate(i,o);var a=!0,u=0;return t.__iterate((function(t,o,c){if(!a||!(a=e.call(n,t,o,c)))return u++,i(t,r?o:u-1,s)})),u},i.__iteratorUncached=function(i,o){var s=this;if(o)return this.cacheResult().__iterator(i,o);var a=t.__iterator(j,o),u=!0,c=0;return new F((function(){var t,o,f;do{if((t=a.next()).done)return r||i===q?t:K(i,c++,i===A?void 0:t.value[1],t);var l=t.value;o=l[0],f=l[1],u&&(u=e.call(n,f,o,s))}while(u);return i===j?t:K(i,o,f,t)}))},i}function Je(t,e,n){var r=nn(t);return r.__iterateUncached=function(r,i){var o=0,a=!1;return function t(u,c){var f=this;u.__iterate((function(i,u){return(!e||c0}function Ge(t,e,r){var i=nn(t);return i.size=new et(r).map((function(t){return t.size})).min(),i.__iterate=function(t,e){for(var n,r=this.__iterator(q,e),i=0;!(n=r.next()).done&&!1!==t(n.value,i++,this););return i},i.__iteratorUncached=function(t,i){var o=r.map((function(t){return t=n(t),W(i?t.reverse():t)})),s=0,a=!1;return new F((function(){var n;return a||(n=o.map((function(t){return t.next()})),a=n.some((function(t){return t.done}))),a?{value:void 0,done:!0}:K(t,s++,e.apply(null,n.map((function(t){return t.value}))))}))},i}function Qe(t,e){return ot(t)?e:t.constructor(e)}function Ze(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function tn(t){return Ft(t.size),I(t)}function en(t){return a(t)?r:u(t)?i:o}function nn(t){return Object.create((a(t)?$:u(t)?Y:X).prototype)}function rn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function on(t,e){return t>e?1:t=0;n--)e={value:arguments[n],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Rn(t,e)},zn.prototype.pushAll=function(t){if(0===(t=i(t)).size)return this;Ft(t.size);var e=this.size,n=this._head;return t.reverse().forEach((function(t){e++,n={value:t,next:n}})),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):Rn(e,n)},zn.prototype.pop=function(){return this.slice(1)},zn.prototype.unshift=function(){return this.push.apply(this,arguments)},zn.prototype.unshiftAll=function(t){return this.pushAll(t)},zn.prototype.shift=function(){return this.pop.apply(this,arguments)},zn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):An()},zn.prototype.slice=function(t,e){if(C(t,e,this.size))return this;var n=D(t,this.size);if(k(e,this.size)!==this.size)return Et.prototype.slice.call(this,t,e);for(var r=this.size-n,i=this._head;n--;)i=i.next;return this.__ownerID?(this.size=r,this._head=i,this.__hash=void 0,this.__altered=!0,this):Rn(r,i)},zn.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Rn(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},zn.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var n=0,r=this._head;r&&!1!==t(r.value,n++,this);)r=r.next;return n},zn.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new F((function(){if(r){var e=r.value;return r=r.next,K(t,n++,e)}return{value:void 0,done:!0}}))},zn.isStack=Mn;var Cn,Dn="@@__IMMUTABLE_STACK__@@",kn=zn.prototype;function Rn(t,e,n,r){var i=Object.create(kn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function An(){return Cn||(Cn=Rn(0))}function qn(t,e){var n=function(n){t.prototype[n]=e[n]};return Object.keys(e).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(n),t}kn[Dn]=!0,kn.withMutations=Wt.withMutations,kn.asMutable=Wt.asMutable,kn.asImmutable=Wt.asImmutable,kn.wasAltered=Wt.wasAltered,n.Iterator=F,qn(n,{toArray:function(){Ft(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate((function(e,n){t[n]=e})),t},toIndexedSeq:function(){return new Te(this)},toJS:function(){return this.toSeq().map((function(t){return t&&"function"==typeof t.toJS?t.toJS():t})).__toJS()},toJSON:function(){return this.toSeq().map((function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t})).__toJS()},toKeyedSeq:function(){return new Be(this,!0)},toMap:function(){return Kt(this.toKeyedSeq())},toObject:function(){Ft(this.size);var t={};return this.__iterate((function(e,n){t[n]=e})),t},toOrderedMap:function(){return Re(this.toKeyedSeq())},toOrderedSet:function(){return wn(a(this)?this.valueSeq():this)},toSet:function(){return hn(a(this)?this.valueSeq():this)},toSetSeq:function(){return new Fe(this)},toSeq:function(){return u(this)?this.toIndexedSeq():a(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return zn(a(this)?this.valueSeq():this)},toList:function(){return ve(a(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){return Qe(this,function(t,e){var n=a(t),i=[t].concat(e).map((function(t){return s(t)?n&&(t=r(t)):t=n?at(t):ut(Array.isArray(t)?t:[t]),t})).filter((function(t){return 0!==t.size}));if(0===i.length)return t;if(1===i.length){var o=i[0];if(o===t||n&&a(o)||u(t)&&u(o))return o}var c=new et(i);return n?c=c.toKeyedSeq():u(t)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=i.reduce((function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}}),0),c}(this,t.call(arguments,0)))},includes:function(t){return this.some((function(e){return _t(e,t)}))},entries:function(){return this.__iterator(j)},every:function(t,e){Ft(this.size);var n=!0;return this.__iterate((function(r,i,o){if(!t.call(e,r,i,o))return n=!1,!1})),n},filter:function(t,e){return Qe(this,We(this,t,e,!0))},find:function(t,e,n){var r=this.findEntry(t,e);return r?r[1]:n},forEach:function(t,e){return Ft(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){Ft(this.size),t=void 0!==t?""+t:",";var e="",n=!0;return this.__iterate((function(r){n?n=!1:e+=t,e+=null!=r?r.toString():""})),e},keys:function(){return this.__iterator(A)},map:function(t,e){return Qe(this,Le(this,t,e))},reduce:function(t,e,n){var r,i;return Ft(this.size),arguments.length<2?i=!0:r=e,this.__iterate((function(e,o,s){i?(i=!1,r=e):r=t.call(n,r,e,o,s)})),r},reduceRight:function(t,e,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return Qe(this,Ue(this,!0))},slice:function(t,e){return Qe(this,Ne(this,t,e,!0))},some:function(t,e){return!this.every(Fn(t),e)},sort:function(t){return Qe(this,$e(this,t))},values:function(){return this.__iterator(q)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(t,e){return I(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return function(t,e,n){var r=Kt().asMutable();return t.__iterate((function(i,o){r.update(e.call(n,i,o,t),0,(function(t){return t+1}))})),r.asImmutable()}(this,t,e)},equals:function(t){return yt(this,t)},entrySeq:function(){var t=this;if(t._cache)return new et(t._cache);var e=t.toSeq().map(Tn).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(Fn(t),e)},findEntry:function(t,e,n){var r=n;return this.__iterate((function(n,i,o){if(t.call(e,n,i,o))return r=[i,n],!1})),r},findKey:function(t,e){var n=this.findEntry(t,e);return n&&n[0]},findLast:function(t,e,n){return this.toKeyedSeq().reverse().find(t,e,n)},findLastEntry:function(t,e,n){return this.toKeyedSeq().reverse().findEntry(t,e,n)},findLastKey:function(t,e){return this.toKeyedSeq().reverse().findKey(t,e)},first:function(){return this.find(M)},flatMap:function(t,e){return Qe(this,function(t,e,n){var r=en(t);return t.toSeq().map((function(i,o){return r(e.call(n,i,o,t))})).flatten(!0)}(this,t,e))},flatten:function(t){return Qe(this,Je(this,t,!0))},fromEntrySeq:function(){return new Ke(this)},get:function(t,e){return this.find((function(e,n){return _t(n,t)}),void 0,e)},getIn:function(t,e){for(var n,r=this,i=sn(t);!(n=i.next()).done;){var o=n.value;if((r=r&&r.get?r.get(o,m):m)===m)return e}return r},groupBy:function(t,e){return function(t,e,n){var r=a(t),i=(f(t)?Re():Kt()).asMutable();t.__iterate((function(o,s){i.update(e.call(n,o,s,t),(function(t){return(t=t||[]).push(r?[s,o]:o),t}))}));var o=en(t);return i.map((function(e){return Qe(t,o(e))}))}(this,t,e)},has:function(t){return this.get(t,m)!==m},hasIn:function(t){return this.getIn(t,m)!==m},isSubset:function(t){return t="function"==typeof t.includes?t:n(t),this.every((function(e){return t.includes(e)}))},isSuperset:function(t){return(t="function"==typeof t.isSubset?t:n(t)).isSubset(this)},keyOf:function(t){return this.findKey((function(e){return _t(e,t)}))},keySeq:function(){return this.toSeq().map(Bn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return Ye(this,t)},maxBy:function(t,e){return Ye(this,e,t)},min:function(t){return Ye(this,t?Kn(t):Un)},minBy:function(t,e){return Ye(this,e?Kn(e):Un,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return Qe(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return Qe(this,He(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(Fn(t),e)},sortBy:function(t,e){return Qe(this,$e(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return Qe(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return Qe(this,function(t,e,n){var r=nn(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var s=0;return t.__iterate((function(t,i,a){return e.call(n,t,i,a)&&++s&&r(t,i,o)})),s},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var s=t.__iterator(j,i),a=!0;return new F((function(){if(!a)return{value:void 0,done:!0};var t=s.next();if(t.done)return t;var i=t.value,u=i[0],c=i[1];return e.call(n,c,u,o)?r===j?t:K(r,u,c,t):(a=!1,{value:void 0,done:!0})}))},r}(this,t,e))},takeUntil:function(t,e){return this.takeWhile(Fn(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function(t){if(t.size===1/0)return 0;var e=f(t),n=a(t),r=e?1:0;return function(t,e){return e=xt(e,3432918353),e=xt(e<<15|e>>>-15,461845907),e=xt(e<<13|e>>>-13,5),e=xt((e=(e+3864292196|0)^t)^e>>>16,2246822507),It((e=xt(e^e>>>13,3266489909))^e>>>16)}(t.__iterate(n?e?function(t,e){r=31*r+Wn(zt(t),zt(e))|0}:function(t,e){r=r+Wn(zt(t),zt(e))|0}:e?function(t){r=31*r+zt(t)|0}:function(t){r=r+zt(t)|0}),r)}(this))}});var jn=n.prototype;jn[l]=!0,jn[T]=jn.values,jn.__toJS=jn.toArray,jn.__toStringMapper=Vn,jn.inspect=jn.toSource=function(){return this.toString()},jn.chain=jn.flatMap,jn.contains=jn.includes,qn(r,{flip:function(){return Qe(this,Ve(this))},mapEntries:function(t,e){var n=this,r=0;return Qe(this,this.toSeq().map((function(i,o){return t.call(e,[o,i],r++,n)})).fromEntrySeq())},mapKeys:function(t,e){var n=this;return Qe(this,this.toSeq().flip().map((function(r,i){return t.call(e,r,i,n)})).flip())}});var Pn=r.prototype;function Bn(t,e){return e}function Tn(t,e){return[e,t]}function Fn(t){return function(){return!t.apply(this,arguments)}}function Kn(t){return function(){return-t.apply(this,arguments)}}function Vn(t){return"string"==typeof t?JSON.stringify(t):String(t)}function Ln(){return x(arguments)}function Un(t,e){return te?-1:0}function Wn(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}return Pn[h]=!0,Pn[T]=jn.entries,Pn.__toJS=jn.toObject,Pn.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+Vn(t)},qn(i,{toKeyedSeq:function(){return new Be(this,!1)},filter:function(t,e){return Qe(this,We(this,t,e,!1))},findIndex:function(t,e){var n=this.findEntry(t,e);return n?n[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return Qe(this,Ue(this,!1))},slice:function(t,e){return Qe(this,Ne(this,t,e,!1))},splice:function(t,e){var n=arguments.length;if(e=Math.max(0|e,0),0===n||2===n&&!e)return this;t=D(t,t<0?this.count():this.size);var r=this.slice(0,t);return Qe(this,1===n?r:r.concat(x(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var n=this.findLastEntry(t,e);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(t){return Qe(this,Je(this,t,!1))},get:function(t,e){return(t=z(this,t))<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find((function(e,n){return n===t}),void 0,e)},has:function(t){return(t=z(this,t))>=0&&(void 0!==this.size?this.size===1/0||t>>0;if(""+n!==e||4294967295===n)return NaN;e=n}return e<0?I(t)+e:e}function M(){return!0}function C(t,e,n){return(0===t||void 0!==n&&t<=-n)&&(void 0===e||void 0!==n&&e>=n)}function D(t,e){return R(t,e,0)}function k(t,e){return R(t,e,e)}function R(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}var A=0,q=1,j=2,P="function"==typeof Symbol&&Symbol.iterator,B="@@iterator",T=P||B;function F(t){this.next=t}function K(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function V(){return{value:void 0,done:!0}}function L(t){return!!N(t)}function U(t){return t&&"function"==typeof t.next}function W(t){var e=N(t);return e&&e.call(t)}function N(t){var e=t&&(P&&t[P]||t[B]);if("function"==typeof e)return e}function H(t){return t&&"number"==typeof t.length}function J(t){return null==t?st():s(t)?t.toSeq():function(t){var e=ct(t)||"object"==typeof t&&new nt(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}(t)}function $(t){return null==t?st().toKeyedSeq():s(t)?a(t)?t.toSeq():t.fromEntrySeq():at(t)}function Y(t){return null==t?st():s(t)?a(t)?t.entrySeq():t.toIndexedSeq():ut(t)}function X(t){return(null==t?st():s(t)?a(t)?t.entrySeq():t:ut(t)).toSetSeq()}F.prototype.toString=function(){return"[Iterator]"},F.KEYS=A,F.VALUES=q,F.ENTRIES=j,F.prototype.inspect=F.prototype.toSource=function(){return this.toString()},F.prototype[T]=function(){return this},e(J,n),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString("Seq {","}")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(t,e){return ft(this,t,e,!0)},J.prototype.__iterator=function(t,e){return lt(this,t,e,!0)},e($,J),$.prototype.toKeyedSeq=function(){return this},e(Y,J),Y.of=function(){return Y(arguments)},Y.prototype.toIndexedSeq=function(){return this},Y.prototype.toString=function(){return this.__toString("Seq [","]")},Y.prototype.__iterate=function(t,e){return ft(this,t,e,!1)},Y.prototype.__iterator=function(t,e){return lt(this,t,e,!1)},e(X,J),X.of=function(){return X(arguments)},X.prototype.toSetSeq=function(){return this},J.isSeq=ot,J.Keyed=$,J.Set=X,J.Indexed=Y;var G,Q,Z,tt="@@__IMMUTABLE_SEQ__@@";function et(t){this._array=t,this.size=t.length}function nt(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function rt(t){this._iterable=t,this.size=t.length||t.size}function it(t){this._iterator=t,this._iteratorCache=[]}function ot(t){return!(!t||!t[tt])}function st(){return G||(G=new et([]))}function at(t){var e=Array.isArray(t)?new et(t).fromEntrySeq():U(t)?new it(t).fromEntrySeq():L(t)?new rt(t).fromEntrySeq():"object"==typeof t?new nt(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function ut(t){var e=ct(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function ct(t){return H(t)?new et(t):U(t)?new it(t):L(t)?new rt(t):void 0}function ft(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,s=0;s<=o;s++){var a=i[n?o-s:s];if(!1===e(a[1],r?a[0]:s,t))return s+1}return s}return t.__iterateUncached(e,n)}function lt(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,s=0;return new F((function(){var t=i[n?o-s:s];return s++>o?{value:void 0,done:!0}:K(e,r?t[0]:s-1,t[1])}))}return t.__iteratorUncached(e,n)}function ht(t,e){return e?pt(e,t,"",{"":t}):dt(t)}function pt(t,e,n,r){return Array.isArray(e)?t.call(r,n,Y(e).map((function(n,r){return pt(t,n,r,e)}))):vt(e)?t.call(r,n,$(e).map((function(n,r){return pt(t,n,r,e)}))):e}function dt(t){return Array.isArray(t)?Y(t).map(dt).toList():vt(t)?$(t).map(dt).toMap():t}function vt(t){return t&&(t.constructor===Object||void 0===t.constructor)}function _t(t,e){if(t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if((t=t.valueOf())===(e=e.valueOf())||t!=t&&e!=e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function yt(t,e){if(t===e)return!0;if(!s(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||a(t)!==a(e)||u(t)!==u(e)||f(t)!==f(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!c(t);if(f(t)){var r=t.entries();return e.every((function(t,e){var i=r.next().value;return i&&_t(i[1],t)&&(n||_t(i[0],e))}))&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var l=!0,h=e.__iterate((function(e,r){if(n?!t.has(e):i?!_t(e,t.get(r,m)):!_t(t.get(r,m),e))return l=!1,!1}));return l&&t.size===h}function gt(t,e){if(!(this instanceof gt))return new gt(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(Q)return Q;Q=this}}function mt(t,e){if(!t)throw new Error(e)}function bt(t,e,n){if(!(this instanceof bt))return new bt(t,e,n);if(mt(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),er?{value:void 0,done:!0}:K(t,i,n[e?r-i++:i++])}))},e(nt,$),nt.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},nt.prototype.has=function(t){return this._object.hasOwnProperty(t)},nt.prototype.__iterate=function(t,e){for(var n=this._object,r=this._keys,i=r.length-1,o=0;o<=i;o++){var s=r[e?i-o:o];if(!1===t(n[s],s,this))return o+1}return o},nt.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new F((function(){var s=r[e?i-o:o];return o++>i?{value:void 0,done:!0}:K(t,s,n[s])}))},nt.prototype[d]=!0,e(rt,Y),rt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var n=W(this._iterable),r=0;if(U(n))for(var i;!(i=n.next()).done&&!1!==t(i.value,r++,this););return r},rt.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=W(this._iterable);if(!U(n))return new F(V);var r=0;return new F((function(){var e=n.next();return e.done?e:K(t,r++,e.value)}))},e(it,Y),it.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var n,r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return K(t,i,r[i++])}))},e(gt,Y),gt.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},gt.prototype.get=function(t,e){return this.has(t)?this._value:e},gt.prototype.includes=function(t){return _t(this._value,t)},gt.prototype.slice=function(t,e){var n=this.size;return C(t,e,n)?this:new gt(this._value,k(e,n)-D(t,n))},gt.prototype.reverse=function(){return this},gt.prototype.indexOf=function(t){return _t(this._value,t)?0:-1},gt.prototype.lastIndexOf=function(t){return _t(this._value,t)?this.size:-1},gt.prototype.__iterate=function(t,e){for(var n=0;n1?" by "+this._step:"")+" ]"},bt.prototype.get=function(t,e){return this.has(t)?this._start+z(this,t)*this._step:e},bt.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e=0&&nn?{value:void 0,done:!0}:K(t,o++,s)}))},bt.prototype.equals=function(t){return t instanceof bt?this._start===t._start&&this._end===t._end&&this._step===t._step:yt(this,t)},e(wt,n),e(St,wt),e(Et,wt),e(Ot,wt),wt.Keyed=St,wt.Indexed=Et,wt.Set=Ot;var xt="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){var n=65535&(t|=0),r=65535&(e|=0);return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0};function It(t){return t>>>1&1073741824|3221225471&t}function zt(t){if(!1===t||null==t)return 0;if("function"==typeof t.valueOf&&(!1===(t=t.valueOf())||null==t))return 0;if(!0===t)return 1;var e=typeof t;if("number"===e){var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)n^=t/=4294967295;return It(n)}if("string"===e)return t.length>jt?function(t){var e=Tt[t];return void 0===e&&(e=Mt(t),Bt===Pt&&(Bt=0,Tt={}),Bt++,Tt[t]=e),e}(t):Mt(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return function(t){var e;if(Rt&&void 0!==(e=kt.get(t)))return e;if(void 0!==(e=t[qt]))return e;if(!Dt){if(void 0!==(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[qt]))return e;if(void 0!==(e=function(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}(t)))return e}if(e=++At,1073741824&At&&(At=0),Rt)kt.set(t,e);else{if(void 0!==Ct&&!1===Ct(t))throw new Error("Non-extensible objects are not allowed as keys.");if(Dt)Object.defineProperty(t,qt,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[qt]=e;else{if(void 0===t.nodeType)throw new Error("Unable to set a non-enumerable property on object.");t[qt]=e}}return e}(t);if("function"==typeof t.toString)return Mt(t.toString());throw new Error("Value type "+e+" cannot be hashed.")}function Mt(t){for(var e=0,n=0;n>>n)&g,a=(0===n?r:r>>>n)&g;return new Ht(e,1<>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135,127&(t+=t>>8)+(t>>16)}function le(t,e,n,r){var i=r?t:x(t);return i[e]=n,i}Wt[Ut]=!0,Wt[v]=Wt.remove,Wt.removeIn=Wt.deleteIn,Nt.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,s=i.length;o=he)return function(t,e,n,r){t||(t=new O);for(var i=new Yt(t,zt(n),[n,r]),o=0;o>>t)&g),o=this.bitmap;return 0==(o&i)?r:this.nodes[fe(o&i-1)].get(t+_,e,n,r)},Ht.prototype.update=function(t,e,n,r,i,o,s){void 0===n&&(n=zt(r));var a=(0===e?n:n>>>e)&g,u=1<=pe)return function(t,e,n,r,i){for(var o=0,s=new Array(y),a=0;0!==n;a++,n>>>=1)s[a]=1&n?e[o++]:void 0;return s[r]=i,new Jt(t,o+1,s)}(t,h,c,a,d);if(f&&!d&&2===h.length&&re(h[1^l]))return h[1^l];if(f&&d&&1===h.length&&re(d))return d;var v=t&&t===this.ownerID,b=f?d?c:c^u:c|u,w=f?d?le(h,l,d,v):function(t,e,n){var r=t.length-1;if(n&&e===r)return t.pop(),t;for(var i=new Array(r),o=0,s=0;s>>t)&g,o=this.nodes[i];return o?o.get(t+_,e,n,r):r},Jt.prototype.update=function(t,e,n,r,i,o,s){void 0===n&&(n=zt(r));var a=(0===e?n:n>>>e)&g,u=i===m,c=this.nodes,f=c[a];if(u&&!f)return this;var l=ne(f,t,e+_,n,r,i,o,s);if(l===f)return this;var h=this.count;if(f){if(!l&&--h0&&r=0&&t=t.size||e<0)return t.withMutations((function(t){e<0?Ce(t,e).set(0,n):Ce(t,0,e+1).set(e,n)}));e+=t._origin;var r=t._tail,i=t._root,o=S(w);return e>=ke(t._capacity)?r=Ie(r,t.__ownerID,0,e,n,o):i=Ie(i,t.__ownerID,t._level,e,n,o),o.value?t.__ownerID?(t._root=i,t._tail=r,t.__hash=void 0,t.__altered=!0,t):Oe(t._origin,t._capacity,t._level,i,r):t}(this,t,e)},ve.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},ve.prototype.insert=function(t,e){return this.splice(t,0,e)},ve.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=_,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):xe()},ve.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations((function(n){Ce(n,0,e+t.length);for(var r=0;r>>e&g;if(r>=this.array.length)return new me([],t);var i,o=0===r;if(e>0){var s=this.array[r];if((i=s&&s.removeBefore(t,e-_,n))===s&&o)return this}if(o&&!i)return this;var a=ze(this,t);if(!o)for(var u=0;u>>e&g;if(i>=this.array.length)return this;if(e>0){var o=this.array[i];if((r=o&&o.removeAfter(t,e-_,n))===o&&i===this.array.length-1)return this}var s=ze(this,t);return s.array.splice(i+1),r&&(s.array[i]=r),s};var be,we,Se={};function Ee(t,e){var n=t._origin,r=t._capacity,i=ke(r),o=t._tail;return s(t._root,t._level,0);function s(t,a,u){return 0===a?function(t,s){var a=s===i?o&&o.array:t&&t.array,u=s>n?0:n-s,c=r-s;return c>y&&(c=y),function(){if(u===c)return Se;var t=e?--c:u++;return a&&a[t]}}(t,u):function(t,i,o){var a,u=t&&t.array,c=o>n?0:n-o>>i,f=1+(r-o>>i);return f>y&&(f=y),function(){for(;;){if(a){var t=a();if(t!==Se)return t;a=null}if(c===f)return Se;var n=e?--f:c++;a=s(u&&u[n],i-_,o+(n<>>n&g,u=t&&a0){var c=t&&t.array[a],f=Ie(c,e,n-_,r,i,o);return f===c?t:((s=ze(t,e)).array[a]=f,s)}return u&&t.array[a]===i?t:(E(o),s=ze(t,e),void 0===i&&a===s.array.length-1?s.array.pop():s.array[a]=i,s)}function ze(t,e){return e&&t&&e===t.ownerID?t:new me(t?t.array.slice():[],e)}function Me(t,e){if(e>=ke(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&g],r-=_;return n}}function Ce(t,e,n){void 0!==e&&(e|=0),void 0!==n&&(n|=0);var r=t.__ownerID||new O,i=t._origin,o=t._capacity,s=i+e,a=void 0===n?o:n<0?o+n:i+n;if(s===i&&a===o)return t;if(s>=a)return t.clear();for(var u=t._level,c=t._root,f=0;s+f<0;)c=new me(c&&c.array.length?[void 0,c]:[],r),f+=1<<(u+=_);f&&(s+=f,i+=f,a+=f,o+=f);for(var l=ke(o),h=ke(a);h>=1<l?new me([],r):p;if(p&&h>l&&s_;y-=_){var m=l>>>y&g;v=v.array[m]=ze(v.array[m],r)}v.array[l>>>_&g]=p}if(a=h)s-=h,a-=h,u=_,c=null,d=d&&d.removeBefore(r,0,s);else if(s>i||h>>u&g;if(b!==h>>>u&g)break;b&&(f+=(1<i&&(c=c.removeBefore(r,u,s-f)),c&&ho&&(o=c.size),s(u)||(c=c.map((function(t){return ht(t)}))),r.push(c)}return o>t.size&&(t=t.setSize(o)),ue(t,e,r)}function ke(t){return t>>_<<_}function Re(t){return null==t?je():Ae(t)?t:je().withMutations((function(e){var n=r(t);Ft(n.size),n.forEach((function(t,n){return e.set(n,t)}))}))}function Ae(t){return Vt(t)&&f(t)}function qe(t,e,n,r){var i=Object.create(Re.prototype);return i.size=t?t.size:0,i._map=t,i._list=e,i.__ownerID=n,i.__hash=r,i}function je(){return we||(we=qe(te(),xe()))}function Pe(t,e,n){var r,i,o=t._map,s=t._list,a=o.get(e),u=void 0!==a;if(n===m){if(!u)return t;s.size>=y&&s.size>=2*o.size?(r=(i=s.filter((function(t,e){return void 0!==t&&a!==e}))).toKeyedSeq().map((function(t){return t[0]})).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=a===s.size-1?s.pop():s.set(a,void 0))}else if(u){if(n===s.get(a)[1])return t;r=o,i=s.set(a,[e,n])}else r=o.set(e,s.size),i=s.set(s.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):qe(r,i)}function Be(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function Te(t){this._iter=t,this.size=t.size}function Fe(t){this._iter=t,this.size=t.size}function Ke(t){this._iter=t,this.size=t.size}function Ve(t){var e=nn(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=rn,e.__iterateUncached=function(e,n){var r=this;return t.__iterate((function(t,n){return!1!==e(n,t,r)}),n)},e.__iteratorUncached=function(e,n){if(e===j){var r=t.__iterator(e,n);return new F((function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t}))}return t.__iterator(e===q?A:q,n)},e}function Le(t,e,n){var r=nn(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,m);return o===m?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate((function(t,i,s){return!1!==r(e.call(n,t,i,s),i,o)}),i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(j,i);return new F((function(){var i=o.next();if(i.done)return i;var s=i.value,a=s[0];return K(r,a,e.call(n,s[1],a,t),i)}))},r}function Ue(t,e){var n=nn(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=Ve(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=rn,n.__iterate=function(e,n){var r=this;return t.__iterate((function(t,n){return e(t,n,r)}),!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function We(t,e,n,r){var i=nn(t);return r&&(i.has=function(r){var i=t.get(r,m);return i!==m&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,m);return o!==m&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var s=this,a=0;return t.__iterate((function(t,o,u){if(e.call(n,t,o,u))return a++,i(t,r?o:a-1,s)}),o),a},i.__iteratorUncached=function(i,o){var s=t.__iterator(j,o),a=0;return new F((function(){for(;;){var o=s.next();if(o.done)return o;var u=o.value,c=u[0],f=u[1];if(e.call(n,f,c,t))return K(i,r?c:a++,f,o)}}))},i}function Ne(t,e,n,r){var i=t.size;if(void 0!==e&&(e|=0),void 0!==n&&(n|=0),C(e,n,i))return t;var o=D(e,i),s=k(n,i);if(o!=o||s!=s)return Ne(t.toSeq().cacheResult(),e,n,r);var a,u=s-o;u==u&&(a=u<0?0:u);var c=nn(t);return c.size=0===a?a:t.size&&a||void 0,!r&&ot(t)&&a>=0&&(c.get=function(e,n){return(e=z(this,e))>=0&&ea)return{value:void 0,done:!0};var t=i.next();return r||e===q?t:K(e,u-1,e===A?void 0:t.value[1],t)}))},c}function He(t,e,n,r){var i=nn(t);return i.__iterateUncached=function(i,o){var s=this;if(o)return this.cacheResult().__iterate(i,o);var a=!0,u=0;return t.__iterate((function(t,o,c){if(!a||!(a=e.call(n,t,o,c)))return u++,i(t,r?o:u-1,s)})),u},i.__iteratorUncached=function(i,o){var s=this;if(o)return this.cacheResult().__iterator(i,o);var a=t.__iterator(j,o),u=!0,c=0;return new F((function(){var t,o,f;do{if((t=a.next()).done)return r||i===q?t:K(i,c++,i===A?void 0:t.value[1],t);var l=t.value;o=l[0],f=l[1],u&&(u=e.call(n,f,o,s))}while(u);return i===j?t:K(i,o,f,t)}))},i}function Je(t,e,n){var r=nn(t);return r.__iterateUncached=function(r,i){var o=0,a=!1;return function t(u,c){var f=this;u.__iterate((function(i,u){return(!e||c0}function Ge(t,e,r){var i=nn(t);return i.size=new et(r).map((function(t){return t.size})).min(),i.__iterate=function(t,e){for(var n,r=this.__iterator(q,e),i=0;!(n=r.next()).done&&!1!==t(n.value,i++,this););return i},i.__iteratorUncached=function(t,i){var o=r.map((function(t){return t=n(t),W(i?t.reverse():t)})),s=0,a=!1;return new F((function(){var n;return a||(n=o.map((function(t){return t.next()})),a=n.some((function(t){return t.done}))),a?{value:void 0,done:!0}:K(t,s++,e.apply(null,n.map((function(t){return t.value}))))}))},i}function Qe(t,e){return ot(t)?e:t.constructor(e)}function Ze(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function tn(t){return Ft(t.size),I(t)}function en(t){return a(t)?r:u(t)?i:o}function nn(t){return Object.create((a(t)?$:u(t)?Y:X).prototype)}function rn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function on(t,e){return t>e?1:t=0;n--)e={value:arguments[n],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Rn(t,e)},zn.prototype.pushAll=function(t){if(0===(t=i(t)).size)return this;Ft(t.size);var e=this.size,n=this._head;return t.reverse().forEach((function(t){e++,n={value:t,next:n}})),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):Rn(e,n)},zn.prototype.pop=function(){return this.slice(1)},zn.prototype.unshift=function(){return this.push.apply(this,arguments)},zn.prototype.unshiftAll=function(t){return this.pushAll(t)},zn.prototype.shift=function(){return this.pop.apply(this,arguments)},zn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):An()},zn.prototype.slice=function(t,e){if(C(t,e,this.size))return this;var n=D(t,this.size);if(k(e,this.size)!==this.size)return Et.prototype.slice.call(this,t,e);for(var r=this.size-n,i=this._head;n--;)i=i.next;return this.__ownerID?(this.size=r,this._head=i,this.__hash=void 0,this.__altered=!0,this):Rn(r,i)},zn.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Rn(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},zn.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var n=0,r=this._head;r&&!1!==t(r.value,n++,this);)r=r.next;return n},zn.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new F((function(){if(r){var e=r.value;return r=r.next,K(t,n++,e)}return{value:void 0,done:!0}}))},zn.isStack=Mn;var Cn,Dn="@@__IMMUTABLE_STACK__@@",kn=zn.prototype;function Rn(t,e,n,r){var i=Object.create(kn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function An(){return Cn||(Cn=Rn(0))}function qn(t,e){var n=function(n){t.prototype[n]=e[n]};return Object.keys(e).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(n),t}kn[Dn]=!0,kn.withMutations=Wt.withMutations,kn.asMutable=Wt.asMutable,kn.asImmutable=Wt.asImmutable,kn.wasAltered=Wt.wasAltered,n.Iterator=F,qn(n,{toArray:function(){Ft(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate((function(e,n){t[n]=e})),t},toIndexedSeq:function(){return new Te(this)},toJS:function(){return this.toSeq().map((function(t){return t&&"function"==typeof t.toJS?t.toJS():t})).__toJS()},toJSON:function(){return this.toSeq().map((function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t})).__toJS()},toKeyedSeq:function(){return new Be(this,!0)},toMap:function(){return Kt(this.toKeyedSeq())},toObject:function(){Ft(this.size);var t={};return this.__iterate((function(e,n){t[n]=e})),t},toOrderedMap:function(){return Re(this.toKeyedSeq())},toOrderedSet:function(){return wn(a(this)?this.valueSeq():this)},toSet:function(){return hn(a(this)?this.valueSeq():this)},toSetSeq:function(){return new Fe(this)},toSeq:function(){return u(this)?this.toIndexedSeq():a(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return zn(a(this)?this.valueSeq():this)},toList:function(){return ve(a(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){return Qe(this,function(t,e){var n=a(t),i=[t].concat(e).map((function(t){return s(t)?n&&(t=r(t)):t=n?at(t):ut(Array.isArray(t)?t:[t]),t})).filter((function(t){return 0!==t.size}));if(0===i.length)return t;if(1===i.length){var o=i[0];if(o===t||n&&a(o)||u(t)&&u(o))return o}var c=new et(i);return n?c=c.toKeyedSeq():u(t)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=i.reduce((function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}}),0),c}(this,t.call(arguments,0)))},includes:function(t){return this.some((function(e){return _t(e,t)}))},entries:function(){return this.__iterator(j)},every:function(t,e){Ft(this.size);var n=!0;return this.__iterate((function(r,i,o){if(!t.call(e,r,i,o))return n=!1,!1})),n},filter:function(t,e){return Qe(this,We(this,t,e,!0))},find:function(t,e,n){var r=this.findEntry(t,e);return r?r[1]:n},findEntry:function(t,e){var n;return this.__iterate((function(r,i,o){if(t.call(e,r,i,o))return n=[i,r],!1})),n},findLastEntry:function(t,e){return this.toSeq().reverse().findEntry(t,e)},forEach:function(t,e){return Ft(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){Ft(this.size),t=void 0!==t?""+t:",";var e="",n=!0;return this.__iterate((function(r){n?n=!1:e+=t,e+=null!=r?r.toString():""})),e},keys:function(){return this.__iterator(A)},map:function(t,e){return Qe(this,Le(this,t,e))},reduce:function(t,e,n){var r,i;return Ft(this.size),arguments.length<2?i=!0:r=e,this.__iterate((function(e,o,s){i?(i=!1,r=e):r=t.call(n,r,e,o,s)})),r},reduceRight:function(t,e,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return Qe(this,Ue(this,!0))},slice:function(t,e){return Qe(this,Ne(this,t,e,!0))},some:function(t,e){return!this.every(Fn(t),e)},sort:function(t){return Qe(this,$e(this,t))},values:function(){return this.__iterator(q)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(t,e){return I(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return function(t,e,n){var r=Kt().asMutable();return t.__iterate((function(i,o){r.update(e.call(n,i,o,t),0,(function(t){return t+1}))})),r.asImmutable()}(this,t,e)},equals:function(t){return yt(this,t)},entrySeq:function(){var t=this;if(t._cache)return new et(t._cache);var e=t.toSeq().map(Tn).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(Fn(t),e)},findLast:function(t,e,n){return this.toKeyedSeq().reverse().find(t,e,n)},first:function(){return this.find(M)},flatMap:function(t,e){return Qe(this,function(t,e,n){var r=en(t);return t.toSeq().map((function(i,o){return r(e.call(n,i,o,t))})).flatten(!0)}(this,t,e))},flatten:function(t){return Qe(this,Je(this,t,!0))},fromEntrySeq:function(){return new Ke(this)},get:function(t,e){return this.find((function(e,n){return _t(n,t)}),void 0,e)},getIn:function(t,e){for(var n,r=this,i=sn(t);!(n=i.next()).done;){var o=n.value;if((r=r&&r.get?r.get(o,m):m)===m)return e}return r},groupBy:function(t,e){return function(t,e,n){var r=a(t),i=(f(t)?Re():Kt()).asMutable();t.__iterate((function(o,s){i.update(e.call(n,o,s,t),(function(t){return(t=t||[]).push(r?[s,o]:o),t}))}));var o=en(t);return i.map((function(e){return Qe(t,o(e))}))}(this,t,e)},has:function(t){return this.get(t,m)!==m},hasIn:function(t){return this.getIn(t,m)!==m},isSubset:function(t){return t="function"==typeof t.includes?t:n(t),this.every((function(e){return t.includes(e)}))},isSuperset:function(t){return(t="function"==typeof t.isSubset?t:n(t)).isSubset(this)},keySeq:function(){return this.toSeq().map(Bn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},max:function(t){return Ye(this,t)},maxBy:function(t,e){return Ye(this,e,t)},min:function(t){return Ye(this,t?Kn(t):Un)},minBy:function(t,e){return Ye(this,e?Kn(e):Un,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return Qe(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return Qe(this,He(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(Fn(t),e)},sortBy:function(t,e){return Qe(this,$e(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return Qe(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return Qe(this,function(t,e,n){var r=nn(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var s=0;return t.__iterate((function(t,i,a){return e.call(n,t,i,a)&&++s&&r(t,i,o)})),s},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var s=t.__iterator(j,i),a=!0;return new F((function(){if(!a)return{value:void 0,done:!0};var t=s.next();if(t.done)return t;var i=t.value,u=i[0],c=i[1];return e.call(n,c,u,o)?r===j?t:K(r,u,c,t):(a=!1,{value:void 0,done:!0})}))},r}(this,t,e))},takeUntil:function(t,e){return this.takeWhile(Fn(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function(t){if(t.size===1/0)return 0;var e=f(t),n=a(t),r=e?1:0;return function(t,e){return e=xt(e,3432918353),e=xt(e<<15|e>>>-15,461845907),e=xt(e<<13|e>>>-13,5),e=xt((e=(e+3864292196|0)^t)^e>>>16,2246822507),It((e=xt(e^e>>>13,3266489909))^e>>>16)}(t.__iterate(n?e?function(t,e){r=31*r+Wn(zt(t),zt(e))|0}:function(t,e){r=r+Wn(zt(t),zt(e))|0}:e?function(t){r=31*r+zt(t)|0}:function(t){r=r+zt(t)|0}),r)}(this))}});var jn=n.prototype;jn[l]=!0,jn[T]=jn.values,jn.__toJS=jn.toArray,jn.__toStringMapper=Vn,jn.inspect=jn.toSource=function(){return this.toString()},jn.chain=jn.flatMap,jn.contains=jn.includes,function(){try{Object.defineProperty(jn,"length",{get:function(){if(!n.noLengthWarning){var t;try{throw new Error}catch(e){t=e.stack}if(-1===t.indexOf("_wrapObject"))return console&&console.warn&&console.warn("iterable.length has been deprecated, use iterable.size or iterable.count(). This warning will become a silent error in a future version. "+t),this.size}}})}catch(t){}}(),qn(r,{flip:function(){return Qe(this,Ve(this))},findKey:function(t,e){var n=this.findEntry(t,e);return n&&n[0]},findLastKey:function(t,e){return this.toSeq().reverse().findKey(t,e)},keyOf:function(t){return this.findKey((function(e){return _t(e,t)}))},lastKeyOf:function(t){return this.findLastKey((function(e){return _t(e,t)}))},mapEntries:function(t,e){var n=this,r=0;return Qe(this,this.toSeq().map((function(i,o){return t.call(e,[o,i],r++,n)})).fromEntrySeq())},mapKeys:function(t,e){var n=this;return Qe(this,this.toSeq().flip().map((function(r,i){return t.call(e,r,i,n)})).flip())}});var Pn=r.prototype;function Bn(t,e){return e}function Tn(t,e){return[e,t]}function Fn(t){return function(){return!t.apply(this,arguments)}}function Kn(t){return function(){return-t.apply(this,arguments)}}function Vn(t){return"string"==typeof t?JSON.stringify(t):t}function Ln(){return x(arguments)}function Un(t,e){return te?-1:0}function Wn(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}return Pn[h]=!0,Pn[T]=jn.entries,Pn.__toJS=jn.toObject,Pn.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+Vn(t)},qn(i,{toKeyedSeq:function(){return new Be(this,!1)},filter:function(t,e){return Qe(this,We(this,t,e,!1))},findIndex:function(t,e){var n=this.findEntry(t,e);return n?n[0]:-1},indexOf:function(t){var e=this.toKeyedSeq().keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.toKeyedSeq().reverse().keyOf(t);return void 0===e?-1:e},reverse:function(){return Qe(this,Ue(this,!1))},slice:function(t,e){return Qe(this,Ne(this,t,e,!1))},splice:function(t,e){var n=arguments.length;if(e=Math.max(0|e,0),0===n||2===n&&!e)return this;t=D(t,t<0?this.count():this.size);var r=this.slice(0,t);return Qe(this,1===n?r:r.concat(x(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var n=this.toKeyedSeq().findLastKey(t,e);return void 0===n?-1:n},first:function(){return this.get(0)},flatten:function(t){return Qe(this,Je(this,t,!1))},get:function(t,e){return(t=z(this,t))<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find((function(e,n){return n===t}),void 0,e)},has:function(t){return(t=z(this,t))>=0&&(void 0!==this.size?this.size===1/0||t{var e="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,i="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(t,s){if(t===s)return!0;if(t&&s&&"object"==typeof t&&"object"==typeof s){if(t.constructor!==s.constructor)return!1;var a,u,c,f;if(Array.isArray(t)){if((a=t.length)!=s.length)return!1;for(u=a;0!=u--;)if(!o(t[u],s[u]))return!1;return!0}if(n&&t instanceof Map&&s instanceof Map){if(t.size!==s.size)return!1;for(f=t.entries();!(u=f.next()).done;)if(!s.has(u.value[0]))return!1;for(f=t.entries();!(u=f.next()).done;)if(!o(u.value[1],s.get(u.value[0])))return!1;return!0}if(r&&t instanceof Set&&s instanceof Set){if(t.size!==s.size)return!1;for(f=t.entries();!(u=f.next()).done;)if(!s.has(u.value[0]))return!1;return!0}if(i&&ArrayBuffer.isView(t)&&ArrayBuffer.isView(s)){if((a=t.length)!=s.length)return!1;for(u=a;0!=u--;)if(t[u]!==s[u])return!1;return!0}if(t.constructor===RegExp)return t.source===s.source&&t.flags===s.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===s.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===s.toString();if((a=(c=Object.keys(t)).length)!==Object.keys(s).length)return!1;for(u=a;0!=u--;)if(!Object.prototype.hasOwnProperty.call(s,c[u]))return!1;if(e&&t instanceof Element)return!1;for(u=a;0!=u--;)if(("_owner"!==c[u]&&"__v"!==c[u]&&"__o"!==c[u]||!t.$$typeof)&&!o(t[c[u]],s[c[u]]))return!1;return!0}return t!=t&&s!=s}t.exports=function(t,e){try{return o(t,e)}catch(t){if((t.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw t}}},70602:(t,e)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function i(){for(var t=[],e=0;e{"use strict";t.exports=window.React},25853:t=>{"use strict";t.exports=window.lodash.debounce},1843:t=>{"use strict";t.exports=window.lodash.filter},18491:t=>{"use strict";t.exports=window.lodash.get},16965:t=>{"use strict";t.exports=window.lodash.includes},66366:t=>{"use strict";t.exports=window.lodash.isEmpty},12049:t=>{"use strict";t.exports=window.lodash.uniqueId},25158:t=>{"use strict";t.exports=window.wp.a11y},55609:t=>{"use strict";t.exports=window.wp.components},92694:t=>{"use strict";t.exports=window.wp.hooks},65736:t=>{"use strict";t.exports=window.wp.i18n},81413:t=>{"use strict";t.exports=window.yoast.componentsNew},7206:t=>{"use strict";t.exports=window.yoast.draftJs},23695:t=>{"use strict";t.exports=window.yoast.helpers},85890:t=>{"use strict";t.exports=window.yoast.propTypes},37188:t=>{"use strict";t.exports=window.yoast.styleGuide},98487:t=>{"use strict";t.exports=window.yoast.styledComponents}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={exports:{}};return t[r].call(o.exports,o,o.exports,n),o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";var t=r;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ReplacementVariableEditor",{enumerable:!0,get:function(){return e.default}}),Object.defineProperty(t,"ReplacementVariableEditorStandalone",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"SettingsSnippetEditor",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"StandardButton",{enumerable:!0,get:function(){return a.StandardButton}}),Object.defineProperty(t,"StyledEditor",{enumerable:!0,get:function(){return s.StyledEditor}}),Object.defineProperty(t,"TriggerReplacementVariableSuggestionsButton",{enumerable:!0,get:function(){return a.TriggerReplacementVariableSuggestionsButton}}),Object.defineProperty(t,"recommendedReplacementVariablesShape",{enumerable:!0,get:function(){return u.recommendedReplacementVariablesShape}}),Object.defineProperty(t,"replacementVariablesShape",{enumerable:!0,get:function(){return u.replacementVariablesShape}});var e=c(n(51381)),i=c(n(42578)),o=c(n(26895)),s=n(9283),a=n(32183),u=n(34353);function c(t){return t&&t.__esModule?t:{default:t}}})(),(window.yoast=window.yoast||{}).replacementVariableEditor=r})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/externals/searchMetadataPreviews.js b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/searchMetadataPreviews.js new file mode 100644 index 00000000..e93f7035 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/externals/searchMetadataPreviews.js @@ -0,0 +1,317 @@ +(()=>{var e={30888:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.YoastSlideToggle=void 0;var r=l(n(99196)),i=l(n(85890)),o=l(n(98487)),s=n(64317),a=n(90876);function l(e){return e&&e.__esModule?e:{default:e}}const d=o.default.div` + & > :first-child { + overflow: hidden; + transition: height ${e=>`${e.duration}ms`} ease-out; + } +`;class u extends r.default.Component{resetHeight(e){e.style.height="0"}setHeight(e){const t=(0,a.getHeight)(e);e.style.height=t+"px"}removeHeight(e){e.style.height=null}render(){return r.default.createElement(d,{duration:this.props.duration},r.default.createElement(s.CSSTransition,{in:this.props.isOpen,timeout:this.props.duration,classNames:"slide",unmountOnExit:!0,onEnter:this.resetHeight,onEntering:this.setHeight,onEntered:this.removeHeight,onExit:this.setHeight,onExiting:this.resetHeight},this.props.children))}}t.YoastSlideToggle=u,u.propTypes={isOpen:i.default.bool.isRequired,duration:i.default.number,children:i.default.node},u.defaultProps={duration:300,children:[]}},90876:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getHeight=function(e){return Math.max(e.clientHeight,e.offsetHeight,e.scrollHeight)}},76990:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getTitleProgress=t.getDescriptionProgress=void 0;var r=n(42982);t.getTitleProgress=e=>{const t=r.helpers.measureTextWidth(e),n=new r.assessments.seo.PageTitleWidthAssessment({scores:{widthTooShort:9}},!0),i=n.calculateScore(t);return{max:n.getMaximumLength(),actual:t,score:i}},t.getDescriptionProgress=(e,t,n,i,o)=>{const s=r.languageProcessing.countMetaDescriptionLength(t,e),a=n&&!i?new r.assessments.seo.MetaDescriptionLengthAssessment({scores:{tooLong:3,tooShort:3}}):new r.assessments.seo.MetaDescriptionLengthAssessment,l=a.calculateScore(s,o);return{max:a.getMaximumLength(o),actual:s,score:l}}},90695:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var s=i?Object.getOwnPropertyDescriptor(e,o):null;s&&(s.get||s.set)?Object.defineProperty(r,o,s):r[o]=e[o]}return r.default=e,n&&n.set(e,r),r}(n(99196)),i=p(n(98487)),o=n(65736),s=p(n(85890)),a=n(81413),l=n(23695),d=n(37188),u=n(99806);function p(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}const f=i.default.fieldset` + border: 0; + padding: 0; + margin: 0 0 16px; +`,h=i.default.legend` + margin: 8px 0; + padding: 0; + color: ${d.colors.$color_headings}; + font-size: 14px; + font-weight: 600; +`,g=(0,i.default)(a.Label)` + ${(0,l.getDirectionalStyle)("margin-right: 16px","margin-left: 16px")}; + color: inherit; + font-size: 14px; + line-height: 1.71428571; + cursor: pointer; + /* Helps RTL in Chrome */ + display: inline-block; +`,m=(0,i.default)(a.Input)` + && { + ${(0,l.getDirectionalStyle)("margin: 0 8px 0 0","margin: 0 0 0 8px")}; + cursor: pointer; + } +`;class v extends r.Component{constructor(e){super(e),this.switchToMobile=this.props.onChange.bind(this,"mobile"),this.switchToDesktop=this.props.onChange.bind(this,"desktop")}render(){const{active:e,mobileModeInputId:t,desktopModeInputId:n}=this.props,i=t.length>0?t:"yoast-google-preview-mode-mobile",s=n.length>0?n:"yoast-google-preview-mode-desktop";return r.default.createElement(f,null,r.default.createElement(h,null,(0,o.__)("Preview as:","wordpress-seo")),r.default.createElement(m,{onChange:this.switchToMobile,type:"radio",name:"screen",value:"mobile",optionalAttributes:{id:i,checked:e===u.MODE_MOBILE}}),r.default.createElement(g,{for:i},(0,o.__)("Mobile result","wordpress-seo")),r.default.createElement(m,{onChange:this.switchToDesktop,type:"radio",name:"screen",value:"desktop",optionalAttributes:{id:s,checked:e===u.MODE_DESKTOP}}),r.default.createElement(g,{for:s},(0,o.__)("Desktop result","wordpress-seo")))}}v.propTypes={onChange:s.default.func.isRequired,active:s.default.oneOf(u.MODES),mobileModeInputId:s.default.string,desktopModeInputId:s.default.string},v.defaultProps={active:u.MODE_MOBILE,mobileModeInputId:"",desktopModeInputId:""},t.default=v},24861:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=b(n(98487)),i=b(n(99196)),o=b(n(85890)),s=n(65736),a=n(92819),l=n(42982),d=n(81413),u=n(37188),p=n(23695),c=n(10224),f=n(76990),h=n(99806),g=b(n(64475)),m=b(n(17582)),v=n(95157),E=b(n(90695));function b(e){return e&&e.__esModule?e:{default:e}}function y(){return y=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.setState({isOpen:!0},e)}))}close(){this.setState({isOpen:!1,activeField:null},(()=>{this._editButton.focus()}))}processReplacementVariables(e,t=this.props.replacementVariables){if(this.props.applyReplacementVariables)return this.props.applyReplacementVariables(e);for(const{name:n,value:r}of t)e=e.replace(new RegExp("%%"+(0,a.escapeRegExp)(n)+"%%","g"),r);return e}mapDataToMeasurements(e,t=this.props.replacementVariables){const{baseUrl:n,mapEditorDataToPreview:r}=this.props;let i=this.processReplacementVariables(e.description,t);i=l.languageProcessing.stripSpaces(i);const o=n.replace(/^https?:\/\//i,""),s=e.title.replace(S,""),a={title:this.processReplacementVariables(e.title,t),url:n+e.slug,description:i,filteredSEOTitle:this.processReplacementVariables(s,t)};return r?r(a,{shortenedBaseUrl:o}):a}mapDataToPreview(e){return{title:e.title,url:e.url,description:e.description}}mapFieldToPreview(e){return"slug"===e&&(e="url"),e}mapFieldToEditor(e){return"url"===e&&(e="slug"),e}setEditButtonRef(e){this._editButton=e}render(){const{data:e,mode:t,date:n,locale:r,keyword:o,wordsToHighlight:a,showCloseButton:l,faviconSrc:u,mobileImageSrc:c,idSuffix:f,shoppingData:h,siteName:m}=this.props,{activeField:v,hoveredField:b,isOpen:w}=this.state,M=this.mapDataToMeasurements(e),S=this.mapDataToPreview(M);return i.default.createElement(d.ErrorBoundary,null,i.default.createElement("div",null,i.default.createElement(x,null,(0,s.__)("Determine how your post should look in the search results.","wordpress-seo")),i.default.createElement(E.default,{onChange:this.onChangeMode,active:t,mobileModeInputId:(0,p.join)(["yoast-google-preview-mode-mobile",f]),desktopModeInputId:(0,p.join)(["yoast-google-preview-mode-desktop",f])}),i.default.createElement(g.default,y({keyword:o,wordsToHighlight:a,mode:t,date:n,siteName:m,activeField:this.mapFieldToPreview(v),hoveredField:this.mapFieldToPreview(b),onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onMouseUp:this.onMouseUp,locale:r,faviconSrc:u,mobileImageSrc:c,shoppingData:h},S)),l&&i.default.createElement(_,{onClick:w?this.close:this.open,"aria-expanded":w,ref:this.setEditButtonRef},i.default.createElement(d.SvgIcon,{icon:"edit"}),(0,s.__)("Edit snippet","wordpress-seo")),this.renderEditor()))}}O.propTypes={onReplacementVariableSearchChange:o.default.func,replacementVariables:c.replacementVariablesShape,recommendedReplacementVariables:c.recommendedReplacementVariablesShape,data:o.default.shape({title:o.default.string.isRequired,slug:o.default.string.isRequired,description:o.default.string.isRequired}).isRequired,descriptionEditorFieldPlaceholder:o.default.string,baseUrl:o.default.string.isRequired,mode:o.default.oneOf(h.MODES),date:o.default.string,onChange:o.default.func.isRequired,onChangeAnalysisData:o.default.func,titleLengthProgress:v.lengthProgressShape,descriptionLengthProgress:v.lengthProgressShape,applyReplacementVariables:o.default.func,mapEditorDataToPreview:o.default.func,keyword:o.default.string,wordsToHighlight:o.default.array,locale:o.default.string,hasPaperStyle:o.default.bool,showCloseButton:o.default.bool,faviconSrc:o.default.string,mobileImageSrc:o.default.string,idSuffix:o.default.string,shoppingData:o.default.object,isCornerstone:o.default.bool,isTaxonomy:o.default.bool,siteName:o.default.string.isRequired},O.defaultProps={mode:h.DEFAULT_MODE,date:"",wordsToHighlight:[],onReplacementVariableSearchChange:null,replacementVariables:[],recommendedReplacementVariables:[],titleLengthProgress:{max:600,actual:0,score:0},descriptionLengthProgress:{max:156,actual:0,score:0},applyReplacementVariables:null,mapEditorDataToPreview:null,keyword:"",locale:"en",descriptionEditorFieldPlaceholder:"",onChangeAnalysisData:a.noop,hasPaperStyle:!0,showCloseButton:!0,faviconSrc:"",mobileImageSrc:"",idSuffix:"",shoppingData:{},isCornerstone:!1,isTaxonomy:!1},t.default=O},17582:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=c(n(99196)),i=c(n(98487)),o=c(n(85890)),s=c(n(12049)),a=n(65736),l=n(37188),d=n(10224),u=n(81413),p=n(95157);function c(e){return e&&e.__esModule?e:{default:e}}const f=i.default.input` + border: none; + width: 100%; + height: inherit; + line-height: 1.71428571; // 24px based on 14px font-size + font-family: inherit; + font-size: inherit; + color: inherit; + + &:focus { + outline: 0; + } +`,h=(0,l.withCaretStyles)(u.VariableEditorInputContainer);class g extends r.default.Component{constructor(e){super(e),this.elements={title:null,slug:null,description:null},this.uniqueId=(0,s.default)("snippet-editor-field-"),this.setRef=this.setRef.bind(this),this.setTitleRef=this.setTitleRef.bind(this),this.setSlugRef=this.setSlugRef.bind(this),this.setDescriptionRef=this.setDescriptionRef.bind(this),this.triggerReplacementVariableSuggestions=this.triggerReplacementVariableSuggestions.bind(this),this.onFocusTitle=this.onFocusTitle.bind(this),this.onChangeTitle=this.onChangeTitle.bind(this),this.onFocusSlug=this.onFocusSlug.bind(this),this.focusSlug=this.focusSlug.bind(this),this.onChangeSlug=this.onChangeSlug.bind(this),this.onFocusDescription=this.onFocusDescription.bind(this),this.onChangeDescription=this.onChangeDescription.bind(this)}setRef(e,t){this.elements[e]=t}setTitleRef(e){this.setRef("title",e)}setSlugRef(e){this.setRef("slug",e)}setDescriptionRef(e){this.setRef("description",e)}componentDidUpdate(e){e.activeField!==this.props.activeField&&this.focusOnActiveFieldChange()}focusOnActiveFieldChange(){const{activeField:e}=this.props,t=e?this.elements[e]:null;t&&t.focus()}triggerReplacementVariableSuggestions(e){this.elements[e].triggerReplacementVariableSuggestions()}onFocusTitle(){this.props.onFocus("title")}onChangeTitle(e){this.props.onChange("title",e)}onFocusSlug(){this.props.onFocus("slug")}focusSlug(){this.elements.slug.focus()}onChangeSlug(e){this.props.onChange("slug",e.target.value)}onFocusDescription(){this.props.onFocus("description")}onChangeDescription(e){this.props.onChange("description",e)}render(){const{activeField:e,hoveredField:t,onReplacementVariableSearchChange:n,replacementVariables:i,recommendedReplacementVariables:o,titleLengthProgress:s,descriptionLengthProgress:l,onBlur:p,descriptionEditorFieldPlaceholder:c,data:{title:g,slug:m,description:v},containerPadding:E,titleInputId:b,slugInputId:y,descriptionInputId:x}=this.props,w=`${this.uniqueId}-slug`;return r.default.createElement(d.StyledEditor,{padding:E},r.default.createElement(d.ReplacementVariableEditor,{withCaret:!0,label:(0,a.__)("SEO title","wordpress-seo"),onFocus:this.onFocusTitle,onBlur:p,isActive:"title"===e,isHovered:"title"===t,editorRef:this.setTitleRef,replacementVariables:i,recommendedReplacementVariables:o,content:g,onChange:this.onChangeTitle,onSearchChange:n,fieldId:b,type:"title"}),r.default.createElement(u.ProgressBar,{max:s.max,value:s.actual,progressColor:this.getProgressColor(s.score)}),r.default.createElement(u.SimulatedLabel,{id:w,onClick:this.onFocusSlug},(0,a.__)("Slug","wordpress-seo")),r.default.createElement(h,{onClick:this.focusSlug,isActive:"slug"===e,isHovered:"slug"===t},r.default.createElement(f,{value:m,onChange:this.onChangeSlug,onFocus:this.onFocusSlug,onBlur:p,ref:this.setSlugRef,"aria-labelledby":this.uniqueId+"-slug",id:y})),r.default.createElement(d.ReplacementVariableEditor,{withCaret:!0,type:"description",placeholder:c,label:(0,a.__)("Meta description","wordpress-seo"),onFocus:this.onFocusDescription,onBlur:p,isActive:"description"===e,isHovered:"description"===t,editorRef:this.setDescriptionRef,replacementVariables:i,recommendedReplacementVariables:o,content:v,onChange:this.onChangeDescription,onSearchChange:n,fieldId:x}),r.default.createElement(u.ProgressBar,{max:l.max,value:l.actual,progressColor:this.getProgressColor(l.score)}))}getProgressColor(e){return e>=7?l.colors.$color_good:e>=5?l.colors.$color_ok:l.colors.$color_bad}}g.propTypes={replacementVariables:d.replacementVariablesShape,recommendedReplacementVariables:d.recommendedReplacementVariablesShape,onChange:o.default.func.isRequired,onFocus:o.default.func,onBlur:o.default.func,onReplacementVariableSearchChange:o.default.func,data:o.default.shape({title:o.default.string.isRequired,slug:o.default.string.isRequired,description:o.default.string.isRequired}).isRequired,activeField:o.default.oneOf(["title","slug","description"]),hoveredField:o.default.oneOf(["title","slug","description"]),titleLengthProgress:p.lengthProgressShape,descriptionLengthProgress:p.lengthProgressShape,descriptionEditorFieldPlaceholder:o.default.string,containerPadding:o.default.string,titleInputId:o.default.string,slugInputId:o.default.string,descriptionInputId:o.default.string},g.defaultProps={replacementVariables:[],recommendedReplacementVariables:[],onFocus:()=>{},onBlur:()=>{},onReplacementVariableSearchChange:null,activeField:null,hoveredField:null,titleLengthProgress:{max:600,actual:0,score:0},descriptionLengthProgress:{max:156,actual:0,score:0},descriptionEditorFieldPlaceholder:null,containerPadding:"0 20px",titleInputId:"yoast-google-preview-title",slugInputId:"yoast-google-preview-slug",descriptionInputId:"yoast-google-preview-description"},t.default=g},95157:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.lengthProgressShape=void 0;var r,i=(r=n(85890))&&r.__esModule?r:{default:r};t.lengthProgressShape=i.default.shape({max:i.default.number,actual:i.default.number,score:i.default.number})},12330:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=d(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var s=i?Object.getOwnPropertyDescriptor(e,o):null;s&&(s.get||s.set)?Object.defineProperty(r,o,s):r[o]=e[o]}return r.default=e,n&&n.set(e,r),r}(n(99196)),i=l(n(98487)),o=l(n(85890)),s=l(n(25853)),a=n(65736);function l(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}const u=/mobi/i,p=i.default.div` + overflow: auto; + width: ${e=>e.widthValue}px; + padding: 0 ${e=>e.paddingValue}px; + max-width: 100%; + box-sizing: border-box; +`,c=i.default.div` + width: ${e=>e.widthValue}px; +`,f=i.default.div` + text-align: center; + margin: 1rem 0 0.5rem; +`,h=i.default.div` + display: inline-block; + box-sizing: border-box; + + &:before{ + display: inline-block; + margin-right: 10px; + font-size: 20px; + line-height: 20px; + vertical-align: text-top; + content: "\\21c4"; + box-sizing: border-box; + } +`;class g extends r.Component{constructor(e){super(e),this.state={showScrollHint:!1,isMobileUserAgent:!1},this.setContainerRef=this.setContainerRef.bind(this),this.determineSize=(0,s.default)(this.determineSize.bind(this),100)}setContainerRef(e){if(!e)return null;this._container=e,this.determineSize(),window.addEventListener("resize",this.determineSize)}determineSize(){var e,t,n,r;this.setState({showScrollHint:(null===(e=this._container)||void 0===e?void 0:e.offsetWidth)!==(null===(t=this._container)||void 0===t?void 0:t.scrollWidth),isMobileUserAgent:u.test(null===(n=window)||void 0===n||null===(r=n.navigator)||void 0===r?void 0:r.userAgent)})}componentWillUnmount(){window.removeEventListener("resize",this.determineSize)}render(){const{width:e,padding:t,children:n,className:i,id:o}=this.props,s=i||o,l=e-2*t;return r.default.createElement("div",{className:`${s}__wrapper`},r.default.createElement(p,{id:o,className:s,widthValue:e,paddingValue:t,ref:this.setContainerRef},r.default.createElement(c,{widthValue:l},n)),this.state.showScrollHint&&r.default.createElement(f,null,r.default.createElement(h,null,this.state.isMobileUserAgent?(0,a.__)("Drag to view the full preview.","wordpress-seo"):(0,a.__)("Scroll to see the preview content.","wordpress-seo"))))}}t.default=g,g.propTypes={id:o.default.string,width:o.default.number.isRequired,padding:o.default.number,children:o.default.node.isRequired,className:o.default.string},g.defaultProps={id:"",padding:0,className:""}},97775:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=p(n(99196)),i=p(n(85890)),o=p(n(98487)),s=p(n(12049)),a=n(81413),l=n(23695),d=n(37188),u=n(30888);function p(e){return e&&e.__esModule?e:{default:e}}const c=o.default.div` + max-width: 600px; + font-weight: normal; + // Don't apply a bottom margin to avoid "jumpiness". + margin: ${(0,l.getDirectionalStyle)("0 20px 0 25px","0 20px 0 15px")}; +`,f=o.default.div` + max-width: ${e=>e.panelMaxWidth}; +`,h=(0,o.default)(a.Button)` + min-width: 14px; + min-height: 14px; + width: 30px; + height: 30px; + border-radius: 50%; + border: 1px solid transparent; + box-shadow: none; + display: block; + margin: -44px -10px 10px 0; + background-color: transparent; + float: ${(0,l.getDirectionalStyle)("right","left")}; + padding: ${(0,l.getDirectionalStyle)("3px 0 0 6px","3px 0 0 5px")}; + + &:hover { + color: ${d.colors.$color_blue}; + } + &:focus { + border: 1px solid ${d.colors.$color_blue}; + outline: none; + box-shadow: 0 0 3px ${(0,d.rgba)(d.colors.$color_blue_dark,.8)}; + + svg { + fill: ${d.colors.$color_blue}; + color: ${d.colors.$color_blue}; + } + } + &:active { + box-shadow: none; + } +`,g=(0,o.default)(a.SvgIcon)` + &:hover { + fill: ${d.colors.$color_blue}; + } +`;class m extends r.default.Component{constructor(e){super(e),this.state={isExpanded:!1},this.uniqueId=(0,s.default)("yoast-help-"),this.onButtonClick=this.onButtonClick.bind(this)}onButtonClick(){this.setState((e=>({isExpanded:!e.isExpanded})))}render(){const e=`${this.uniqueId}-panel`,{isExpanded:t}=this.state;return r.default.createElement(c,{className:this.props.className},r.default.createElement(h,{className:this.props.className+"__button",onClick:this.onButtonClick,"aria-expanded":t,"aria-controls":t?e:null,"aria-label":this.props.helpTextButtonLabel},r.default.createElement(g,{size:"16px",color:d.colors.$color_grey_text,icon:"question-circle"})),r.default.createElement(u.YoastSlideToggle,{isOpen:t},r.default.createElement(f,{id:e,className:this.props.className+"__panel",panelMaxWidth:this.props.panelMaxWidth},r.default.createElement(a.HelpText,null,this.props.helpText))))}}m.propTypes={className:i.default.string,helpTextButtonLabel:i.default.string.isRequired,panelMaxWidth:i.default.string,helpText:i.default.oneOfType([i.default.string,i.default.array])},m.defaultProps={className:"yoast-help",panelMaxWidth:null,helpText:""},t.default=m},72676:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=u(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var s=i?Object.getOwnPropertyDescriptor(e,o):null;s&&(s.get||s.set)?Object.defineProperty(r,o,s):r[o]=e[o]}return r.default=e,n&&n.set(e,r),r}(n(99196)),i=d(n(85890)),o=d(n(98487)),s=n(65736),a=n(92819),l=n(81413);function d(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(u=function(e){return e?n:t})(e)}const p=o.default.span` + color: #70757a; + line-height: 1.7; +`;function c(e){const{shoppingData:t}=e,n=(0,s.sprintf)((0,s.__)("Rating: %s","wordpress-seo"),(0,a.round)(2*t.rating,1)+"/10"),i=(0,s.sprintf)((0,s.__)("%s reviews","wordpress-seo"),t.reviewCount); +/* Translators: %s expands to the actual rating, e.g. 8/10. */return r.default.createElement(p,null,t.reviewCount>0&&r.default.createElement(r.Fragment,null,r.default.createElement(l.StarRating,{rating:t.rating}),r.default.createElement("span",null," ",n," · "),r.default.createElement("span",null,i," · ")),t.price&&r.default.createElement(r.Fragment,null,r.default.createElement("span",{dangerouslySetInnerHTML:{__html:t.price}})),t.availability&&r.default.createElement("span",null,` · ${(0,a.capitalize)(t.availability)}`))}t.default=c,c.propTypes={shoppingData:i.default.shape({rating:i.default.number,reviewCount:i.default.number,availability:i.default.string,price:i.default.string}).isRequired}},98463:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=d(n(99196)),i=d(n(85890)),o=d(n(98487)),s=n(65736),a=n(92819),l=n(81413);function d(e){return e&&e.__esModule?e:{default:e}}const u=o.default.div` + display: flex; + margin-top: -16px; + line-height: 1.6; +`,p=o.default.div` + flex: 1; + max-width: 50%; +`,c=o.default.div` + flex: 1; + max-width: 25%; +`,f=o.default.div` + color: #70757a; +`;function h(e){const{shoppingData:t}=e;return r.default.createElement(u,null,t.rating>0&&r.default.createElement(p,{className:"yoast-shopping-data-preview__column"},r.default.createElement("div",{className:"yoast-shopping-data-preview__upper"},(0,s.__)("Rating","wordpress-seo")),r.default.createElement(f,{className:"yoast-shopping-data-preview__lower"},r.default.createElement("span",null,(0,a.round)(2*t.rating,1),"/10 "),r.default.createElement(l.StarRating,{rating:t.rating}),r.default.createElement("span",null," (",t.reviewCount,")"))),t.price&&r.default.createElement(c,{className:"yoast-shopping-data-preview__column"},r.default.createElement("div",{className:"yoast-shopping-data-preview__upper"},(0,s.__)("Price","wordpress-seo")),r.default.createElement(f,{className:"yoast-shopping-data-preview__lower",dangerouslySetInnerHTML:{__html:t.price}})),t.availability&&r.default.createElement(c,{className:"yoast-shopping-data-preview__column"},r.default.createElement("div",{className:"yoast-shopping-data-preview__upper"},(0,s.__)("Availability","wordpress-seo")),r.default.createElement(f,{className:"yoast-shopping-data-preview__lower"},(0,a.capitalize)(t.availability))))}t.default=h,h.propTypes={shoppingData:i.default.shape({rating:i.default.number,reviewCount:i.default.number,availability:i.default.string,price:i.default.string}).isRequired}},64475:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=E(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var s=i?Object.getOwnPropertyDescriptor(e,o):null;s&&(s.get||s.set)?Object.defineProperty(r,o,s):r[o]=e[o]}return r.default=e,n&&n.set(e,r),r}(n(99196)),i=v(n(98487)),o=v(n(96746)),s=v(n(85890)),a=v(n(38550)),l=n(65736),d=n(37188),u=n(42982),p=n(23695),c=n(81413),f=v(n(12330)),h=v(n(72676)),g=v(n(98463)),m=n(99806);function v(e){return e&&e.__esModule?e:{default:e}}function E(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(E=function(e){return e?n:t})(e)}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t
            ").addClass("yoast-measure yoast-import-failure").html(i);o.after(l)}function j(t){P(t,"import")}function k(t){P(t,"cleanup")}function S(t){u.val()===p&&(t.preventDefault(),new d(window.yoastImportData).index(window.yoastImportData.restApi.importing_endpoints.aioseo,b).then(O).catch(j))}function C(t){l.val()===p&&(t.preventDefault(),new d(window.yoastImportData).index(window.yoastImportData.restApi.cleanup_endpoints.aioseo,D).then(E).catch(k))}function T(t){var e,a,i,o=t.closest("form").find("input[type=submit]");t.on("change",(function(){""!==(e=s()(this).find("option:selected").attr("value"))?(o.prop("disabled",!1),t===u&&(a=(0,n.sprintf)(window.yoastImportData.assets.replacing_texts.select_header,s()(this).find("option:selected").text()),i=e===p?window.yoastImportData.assets.replacing_texts.plugins.aioseo:window.yoastImportData.assets.replacing_texts.plugins.other,a+="
              ",i.forEach((function(t){a+="
            • "+t.data_name+"
              "+t.data_note+"
            • "})),a+="
            ",I.html(a))):o.prop("disabled",!0)}))}s()((function(){c=s()("[name='clean_external']"),c.val(window.yoastImportData.assets.replacing_texts.cleanup_button),l=s()("[name='clean_external_plugin']"),m=s()(c).parents("form:first"),h=s()("[name='import_external']"),u=s()("[name='import_external_plugin']"),g=s()(h).parents("form:first"),g.after(s()("

            ").html(""+window.yoastImportData.assets.note+""+window.yoastImportData.assets.cleanup_after_import_msg)),w=s()("").addClass("yoast-import-spinner").attr("src",window.yoastImportData.assets.spinner).css({display:"inline-block","margin-left":"10px","vertical-align":"middle"}).hide(),y=s()("").html(window.yoastImportData.assets.loading_msg_import).css({"margin-left":"5px","vertical-align":"middle"}).hide(),f=s()("").html(window.yoastImportData.assets.loading_msg_cleanup).css({"margin-left":"5px","vertical-align":"middle"}).hide(),x=s()("").addClass("dashicons dashicons-yes-alt yoast-import-success-mark").css({"margin-left":"10px","vertical-align":"middle",color:"green"}).hide(),I=s()(".yoast-import-explanation"),I.html(window.yoastImportData.assets.replacing_texts.import_explanation),_=s()(".yoast-cleanup-explanation"),_.html(window.yoastImportData.assets.replacing_texts.cleanup_explanation),u&&(T(u),u.append("").trigger("change")),l&&(T(l),l.append("").trigger("change")),g&&g.on("submit",S),m&&m.on("submit",C),s()(x).insertAfter([h,c]),s()(y).insertAfter(h),s()(f).insertAfter(c),s()(w).insertAfter([h,c])}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/indexation.js b/wp/wp-content/plugins/wordpress-seo/js/dist/indexation.js new file mode 100644 index 00000000..cd9b7cac --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/indexation.js @@ -0,0 +1,8 @@ +(()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var s in n)e.o(n,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:n[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,n=window.wp.element,s=window.jQuery;var r=e.n(s);const i=window.wp.i18n,o=window.yoast.componentsNew,a=window.yoast.styleGuide,d=window.yoast.propTypes;var l=e.n(d);const c=window.yoast.helpers,p=window.yoast.styledComponents;var u=e.n(p);class g extends Error{constructor(e,t,n,s,r){super(e),this.name="RequestError",this.url=t,this.method=n,this.statusCode=s,this.stackTrace=r}}const{stripTagsFromHtmlString:h}=c.strings,m=["a","p"],w=u().div` + margin-top: 8px; +`,x=u().pre` + overflow-x: scroll; + max-width: 500px; + border: 1px solid; + padding: 16px; +`;function y({title:e,value:n}){return n?(0,t.createElement)("p",null,(0,t.createElement)("strong",null,e),(0,t.createElement)("br",null),n):null}function E({title:e,value:n}){return n?(0,t.createElement)("details",null,(0,t.createElement)("summary",null,e),(0,t.createElement)(x,null,n)):null}function S({message:e,error:n}){return(0,t.createElement)(o.Alert,{type:"error"},(0,t.createElement)("div",{dangerouslySetInnerHTML:{__html:h(e,m)}}),(0,t.createElement)("details",null,(0,t.createElement)("summary",null,(0,i.__)("Error details","wordpress-seo")),(0,t.createElement)(w,null,(0,t.createElement)(y,{title:(0,i.__)("Request URL","wordpress-seo"),value:n.url}),(0,t.createElement)(y,{title:(0,i.__)("Request method","wordpress-seo"),value:n.method}),(0,t.createElement)(y,{title:(0,i.__)("Status code","wordpress-seo"),value:n.statusCode}),(0,t.createElement)(y,{title:(0,i.__)("Error message","wordpress-seo"),value:n.message}),(0,t.createElement)(E,{title:(0,i.__)("Response","wordpress-seo"),value:n.parseString}),(0,t.createElement)(E,{title:(0,i.__)("Error stack trace","wordpress-seo"),value:n.stackTrace}))))}y.propTypes={title:l().string.isRequired,value:l().any},y.defaultProps={value:""},E.propTypes={title:l().string.isRequired,value:l().string},E.defaultProps={value:""},S.propTypes={message:l().string.isRequired,error:l().oneOfType([l().instanceOf(Error),l().instanceOf(g)]).isRequired};class f extends Error{constructor(e,t){super(e),this.name="ParseError",this.parseString=t}}const _="idle",I="in_progress",A="errored",v="completed";class T extends n.Component{constructor(e){super(e),this.settings=yoastIndexingData,this.state={state:_,processed:0,error:null,amount:parseInt(this.settings.amount,10),firstTime:"1"===this.settings.firstTime},this.startIndexing=this.startIndexing.bind(this),this.stopIndexing=this.stopIndexing.bind(this)}async doIndexingRequest(e,t){const n=await fetch(e,{method:"POST",headers:{"X-WP-Nonce":t}}),s=await n.text();let r;try{r=JSON.parse(s)}catch(e){throw new f("Error parsing the response to JSON.",s)}if(!n.ok){const t=r.data?r.data.stackTrace:"";throw new g(r.message,e,"POST",n.status,t)}return r}async doPreIndexingAction(e){"function"==typeof this.props.preIndexingActions[e]&&await this.props.preIndexingActions[e](this.settings)}async doPostIndexingAction(e,t){"function"==typeof this.props.indexingActions[e]&&await this.props.indexingActions[e](t.objects,this.settings)}async doIndexing(e){let t=this.settings.restApi.root+this.settings.restApi.indexing_endpoints[e];for(;this.isState(I)&&!1!==t;)try{await this.doPreIndexingAction(e);const s=await this.doIndexingRequest(t,this.settings.restApi.nonce);await this.doPostIndexingAction(e,s),(0,n.flushSync)((()=>{this.setState((e=>({processed:e.processed+s.objects.length,firstTime:!1})))})),t=s.next_url}catch(e){(0,n.flushSync)((()=>{this.setState({state:A,error:e,firstTime:!1})}))}}async index(){for(const e of Object.keys(this.settings.restApi.indexing_endpoints))await this.doIndexing(e);this.isState(A)||this.isState(_)||this.completeIndexing()}async startIndexing(){this.setState({processed:0,state:I},this.index)}completeIndexing(){this.setState({state:v})}stopIndexing(){this.setState((e=>({state:_,processed:0,amount:e.amount-e.processed})))}componentDidMount(){var e,t;if(!this.settings.disabled&&(this.props.indexingStateCallback(0===this.state.amount?"completed":this.state.state),"true"===new URLSearchParams(window.location.search).get("start-indexation"))){const n=function(e,t){const n=new URL(e);return n.searchParams.delete("start-indexation"),n.href}(window.location.href);null,e=document.title,t=n,window.history.pushState(null,e,t),this.startIndexing()}}componentDidUpdate(e,t){this.state.state!==t.state&&this.props.indexingStateCallback(this.state.state)}isState(e){return this.state.state===e}renderFirstIndexationNotice(){return(0,t.createElement)(o.Alert,{type:"info"},(0,i.__)("This feature includes and replaces the Text Link Counter and Internal Linking Analysis","wordpress-seo"))}renderStartButton(){return(0,t.createElement)(o.NewButton,{variant:"primary",onClick:this.startIndexing},(0,i.__)("Start SEO data optimization","wordpress-seo"))}renderStopButton(){return(0,t.createElement)(o.NewButton,{variant:"secondary",onClick:this.stopIndexing},(0,i.__)("Stop SEO data optimization","wordpress-seo"))}renderDisabledTool(){return(0,t.createElement)(n.Fragment,null,(0,t.createElement)("p",null,(0,t.createElement)(o.NewButton,{variant:"secondary",disabled:!0},(0,i.__)("Start SEO data optimization","wordpress-seo"))),(0,t.createElement)(o.Alert,{type:"info"},(0,i.__)("SEO data optimization is disabled for non-production environments.","wordpress-seo")))}renderProgressBar(){return(0,t.createElement)(n.Fragment,null,(0,t.createElement)(o.ProgressBar,{style:{height:"16px",margin:"8px 0"},progressColor:a.colors.$color_pink_dark,max:parseInt(this.state.amount,10),value:this.state.processed}),(0,t.createElement)("p",{style:{color:a.colors.$palette_grey_text}},(0,i.__)("Optimizing SEO data... This may take a while.","wordpress-seo")))}renderErrorAlert(){return(0,t.createElement)(S,{message:yoastIndexingData.errorMessage,error:this.state.error})}renderTool(){return(0,t.createElement)(n.Fragment,null,this.isState(I)&&this.renderProgressBar(),this.isState(A)&&this.renderErrorAlert(),this.isState(_)&&this.state.firstTime&&this.renderFirstIndexationNotice(),this.isState(I)?this.renderStopButton():this.renderStartButton())}render(){return this.settings.disabled?this.renderDisabledTool():this.isState(v)||0===this.state.amount?(0,t.createElement)(o.Alert,{type:"success"},(0,i.__)("SEO data optimization complete","wordpress-seo")):this.renderTool()}}T.propTypes={indexingActions:l().object,preIndexingActions:l().object,indexingStateCallback:l().func},T.defaultProps={indexingActions:{},preIndexingActions:{},indexingStateCallback:()=>{}};const b=T;let P;function O(){P||(P=document.getElementById("yoast-seo-indexing-action")),P&&(0,n.render)((0,t.createElement)(b,{preIndexingActions:window.yoast.indexing.preIndexingActions,indexingActions:window.yoast.indexing.indexingActions}),P)}window.yoast=window.yoast||{},window.yoast.indexing=window.yoast.indexing||{},window.yoast.indexing.preIndexingActions={},window.yoast.indexing.indexingActions={},window.yoast.indexing.registerPreIndexingAction=(e,t)=>{window.yoast.indexing.preIndexingActions[e]=t,O()},window.yoast.indexing.registerIndexingAction=(e,t)=>{window.yoast.indexing.indexingActions[e]=t,O()},r()((function(){O()}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/installation-success.js b/wp/wp-content/plugins/wordpress-seo/js/dist/installation-success.js new file mode 100644 index 00000000..2844262c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/installation-success.js @@ -0,0 +1,6 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var n in s)e.o(s,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:s[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,s=window.wp.domReady;var n=e.n(s);const r=window.wp.i18n,a=window.wp.element,o=window.wp.components,l=window.lodash,i=window.yoast.propTypes;var c=e.n(i);const y=window.yoast.styledComponents,m=window.yoast.externals.contexts,d=({theme:e,location:s,children:n})=>(0,t.createElement)(m.LocationProvider,{value:s},(0,t.createElement)(y.ThemeProvider,{theme:e},n));d.propTypes={theme:c().object.isRequired,location:c().oneOf(["sidebar","metabox","modal"]).isRequired,children:c().element.isRequired};const u=d,p=[];let f=null;class w extends a.Component{constructor(e){super(e),this.state={registeredComponents:[]}}registerComponent(e,t){this.setState({registeredComponents:[...this.state.registeredComponents,{key:e,Component:t}]})}render(){return this.state.registeredComponents.map((({Component:e,key:s})=>(0,t.createElement)(e,{key:s})))}}const g=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"}))})),h=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14 5l7 7m0 0l-7 7m7-7H3"}))}));function x(){return(0,t.createElement)("div",{className:"yst-root yst-my-auto yst-flex yst-flex-col yst-h-[90vh] yst-justify-center"},(0,t.createElement)("h1",{className:"yst-text-4xl yst-text-gray-900 yst-w-[350px] yst-font-extrabold yst-leading-10 yst-mx-auto yst-mt-6 yst-mb-16 yst-text-center yst-tracking-tight"},(0,a.createInterpolateElement)((0,r.sprintf)(/* translators: %s expands to Yoast SEO. */ +(0,r.__)("You've successfully installed %s!","wordpress-seo"),"Yoast SEO"),{span:(0,t.createElement)("span",{className:"yst-text-primary-500"})})),(0,t.createElement)("div",{className:"installation-success-content"},(0,t.createElement)("div",{className:"yst-flex yst-flex-col md:yst-flex-row yst-justify-center yst-items-center yst-gap-8"},(0,t.createElement)("div",{id:"installation-success-card-optimized-site",className:"yst-shrink-0 yst-bg-white yst-rounded-lg yst-p-6 yst-flex yst-flex-col yst-max-w-sm yst-shadow-md yst-h-4/5 yst-leading-6"},(0,t.createElement)("h2",{className:"yst-tracking-tight yst-text-gray-900 yst-text-2xl yst-leading-8 yst-font-extrabold"},(0,r.__)("Your site is already easier to find for search engines.","wordpress-seo")),(0,t.createElement)("p",{className:"yst-text-gray-500 yst-text-base yst-my-4"},(0,r.sprintf)(/* translators: %s expands to Yoast SEO. */ +(0,r.__)("%s rolls out the red carpet for the search bots, which helps your site perform better in search engines.","wordpress-seo"),"Yoast SEO")),(0,t.createElement)("div",{className:"card-button-section"}),(0,t.createElement)("div",{className:"yst-bg-green-100 yst-w-20 yst-h-20 yst-rounded-full yst-mx-auto yst-my-2 yst-flex yst-items-center yst-justify-center"},(0,t.createElement)(g,{className:"yst-w-8 yst-text-green-600"}))),(0,t.createElement)("div",null,(0,t.createElement)(h,{className:"yst-w-8 yst-text-gray-500"})),(0,t.createElement)("div",{id:"installation-success-card-configuration",className:"yst-shrink-0 yst-shadow-xl yst-bg-primary-500 yst-rounded-lg yst-p-6 yst-flex yst-flex-col yst-max-w-sm yst-h-4/5 yst-leading-6"},(0,t.createElement)("h2",{className:" yst-text-white yst-text-2xl yst-leading-8 yst-font-extrabold"},(0,r.sprintf)(/* translators: %s expands to Yoast SEO. */ +(0,r.__)("For the best ranking results: configure %s!","wordpress-seo"),"Yoast SEO")),(0,t.createElement)("p",{className:"yst-font-medium yst-text-white yst-text-base yst-my-4"},(0,r.sprintf)(/* translators: %s expands to Yoast SEO. */ +(0,r.__)("Set the essential %s settings for your site in a few steps.","wordpress-seo"),"Yoast SEO")),(0,t.createElement)("img",{className:"yst-my-6 yst-mx-auto yst-w-[150px] yst-h-[120px]",src:window.wpseoInstallationSuccess.pluginUrl+"/images/indexables_3_left_bubble_optm.svg",alt:""}),(0,t.createElement)("div",{className:"yst-flex yst-grow-1 yst-mt-auto"},(0,t.createElement)("a",{id:"installation-successful-configuration-link",href:window.wpseoInstallationSuccess.firstTimeConfigurationUrl,className:"yst-inline-flex yst-items-center yst-w-full yst-justify-center yst-no-underline yst-px-6 yst-py-3 yst-border yst-border-transparent yst-text-base yst-font-medium yst-rounded-md yst-shadow-none yst-text-primary-500 yst-bg-white hover:yst-bg-gray-50 focus:yst-outline-none focus:yst-ring-2 focus:yst-ring-offset-2 focus:yst-ring-white yst-ring-offset-2 yst-ring-offset-primary-500","data-hiive-event-name":"clicked_start_first_time_configuration"},(0,r.__)("Start first-time configuration!","wordpress-seo"),(0,t.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"yst-ml-3 yst-mr-1 yst-h-5 yst-w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},(0,t.createElement)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M14 5l7 7m0 0l-7 7m7-7H3"}))))),(0,t.createElement)("a",{id:"installation-success-skip-link",className:"yst-bottom-12 yst-right-0 yst-mr-5 yst-self-end yst-text-base md:yst-absolute",href:window.wpseoInstallationSuccess.dashboardUrl,"data-hiive-event-name":"clicked_skip_button | installation successful screen"},/* translators: %s expands to ' »'. */ +(0,r.sprintf)((0,r.__)("Skip%s","wordpress-seo")," »")))))}n()((()=>{!function(e,s){const n=(0,l.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1});f=(0,a.createRef)();const r={isRtl:n.isRtl};(0,a.render)((0,t.createElement)(u,{theme:r,location:"sidebar"},(0,t.createElement)(o.SlotFillProvider,null,(0,t.createElement)(a.Fragment,null,s,(0,t.createElement)(w,{ref:f})))),document.getElementById(e)),p.forEach((e=>{f.current.registerComponent(e.key,e.Component)}))}("wpseo-installation-successful-free",(0,t.createElement)(x,null))}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/integrations-page.js b/wp/wp-content/plugins/wordpress-seo/js/dist/integrations-page.js new file mode 100644 index 00000000..372d9fe5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/integrations-page.js @@ -0,0 +1,43 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var a in s)e.o(s,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:s[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,s=window.lodash,a=window.wp.domReady;var n=e.n(a);const r=window.yoast.uiLibrary,o=window.wp.i18n,l=window.yoast.propTypes;var c=e.n(l);const i=window.wp.element,m=window.wp.apiFetch;var p=e.n(m);const h=Boolean(window.wpseoScriptData.isPremium),y=e=>{const t=`${e.slug}_integration_active`;return Boolean(window.wpseoIntegrationsData[t])},g=e=>{if(!window.wpseoIntegrationsData.is_multisite)return!0;const t=`allow_${e.slug}_integration`;return Boolean(window.wpseoIntegrationsData[t])},d=e=>!window.wpseoIntegrationsData.is_multisite||e.isMultisiteAvailable,v=e=>e.isPremium&&h||!e.isPremium,u=(e,t)=>{const s=t,a=g(e),n=d(e);return v(e)?s&&a&&n:a&&n},w=async(e,t)=>{const s=await p()({path:"yoast/v1/integrations/set_active",method:"POST",data:{active:t,integration:e.slug}});return await s.json};var f,E;function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t(0,t.createElement)("header",{className:"yst-relative yst-flex yst-items-center yst-justify-center yst-h-24 yst-bg-slate-100 yst--mx-6 yst--mt-6 yst-py-6"},e);_.propTypes={children:l.PropTypes.node};const P=({children:e})=>(0,t.createElement)("div",{className:"yst-flex-grow"},e);P.propTypes={children:l.PropTypes.node};const M=({children:e})=>(0,t.createElement)("footer",{className:"yst-border-t yst-border-slate-200 yst-pt-6"},e);function k({children:e}){return(0,t.createElement)("div",{className:"yst-relative yst-flex yst-flex-col yst-bg-white yst-rounded-lg yst-border yst-p-6 yst-space-y-6 yst-overflow-hidden yst-transition-transform yst-ease-in-out yst-duration-200 yst-shadow-sm"},e)}M.propTypes={children:l.PropTypes.node},k.propTypes={children:l.PropTypes.node},k.Header=_,k.Content=P,k.Footer=M;const Z=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M10.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 11H5a1 1 0 110-2h7.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),T=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"}))})),x=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),N=window.wp.components,L=({integration:e,initialActivationState:s,isNetworkControlEnabled:a,isMultisiteAvailable:n,toggleLabel:l,beforeToggle:c})=>{const[m,p]=(0,i.useState)(s),h=(0,i.useCallback)((async()=>{let t=!0;const s=!m;p(s),c&&(t=!1,t=await c(e,s)),t||p(!s)}),[m,c,p]),y=e.logo;return(0,t.createElement)(k,null,(0,t.createElement)(k.Header,null,(0,t.createElement)(r.Link,{href:e.logoLink,target:"_blank"},e.logo&&(0,t.createElement)(y,{alt:(0,o.sprintf)(/* translators: 1: Yoast SEO, 2: integration name */ +(0,o.__)("%1$s integrates with %2$s","wordpress-seo"),"Yoast SEO",e.name),className:u(e,m)?"":"yst-opacity-50 yst-filter yst-grayscale"}),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo"))),!a&&n&&(0,t.createElement)(r.Badge,{className:"yst-absolute yst-top-2 yst-right-2"},(0,o.__)("Network Disabled","wordpress-seo")),a&&e.isNew&&(0,t.createElement)(r.Badge,{className:"yst-absolute yst-top-2 yst-right-2"},(0,o.__)("New","wordpress-seo"))),(0,t.createElement)(k.Content,null,(0,t.createElement)("div",null,e.claim&&(0,t.createElement)("h4",{className:"yst-text-base yst-mb-3 yst-font-medium yst-text-[#111827] yst-leading-tight"},e.claim),(0,t.createElement)("p",null," ",e.description,e.learnMoreLink&&(0,t.createElement)(r.Link,{href:e.learnMoreLink,className:"yst-flex yst-items-center yst-mt-3 yst-no-underline yst-font-medium",target:"_blank"},"Learn more",(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo")),(0,t.createElement)(Z,{className:"yst-h-4 yst-w-4 yst-ml-1 yst-icon-rtl"})))),m&&(0,t.createElement)(N.Slot,{name:`${e.name}Slot`})),(0,t.createElement)(k.Footer,null,!v(e)&&(0,t.createElement)(r.Button,{id:`${e.name}-upsell-button`,type:"button",as:"a",href:e.upsellLink,variant:"upsell","data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2",className:"yst-w-full yst-text-slate-800",target:"_blank"},(0,t.createElement)(x,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5 yst-text-yellow-900"}),(0,o.__)("Unlock with Premium","wordpress-seo"),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo"))),v(e)&&!d(e)&&(0,t.createElement)("p",{className:"yst-flex yst-items-start yst-justify-between"},(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Integration unavailable for multisites","wordpress-seo")),(0,t.createElement)(T,{className:"yst-h-5 yst-w-5 yst-text-red-500 yst-flex-shrink-0"})),v(e)&&d(e)&&(0,t.createElement)(r.ToggleField,{id:`${e.name}-toggle`,checked:m,label:l,onChange:h,disabled:!a||!n})))};L.propTypes={integration:l.PropTypes.shape({name:l.PropTypes.string,claim:l.PropTypes.node,learnMoreLink:l.PropTypes.string,logoLink:l.PropTypes.string,slug:l.PropTypes.string,description:l.PropTypes.string,usps:l.PropTypes.array,logo:l.PropTypes.func,isPremium:l.PropTypes.bool,isNew:l.PropTypes.bool,isMultisiteAvailable:l.PropTypes.bool,upsellLink:l.PropTypes.string}),initialActivationState:l.PropTypes.bool,isNetworkControlEnabled:l.PropTypes.bool,isMultisiteAvailable:l.PropTypes.bool,toggleLabel:l.PropTypes.string,beforeToggle:l.PropTypes.func};const A=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"}))})),O=({integration:e,isActive:s,children:a})=>{const n=e.logo;return(0,t.createElement)(k,null,(0,t.createElement)(k.Header,null,(0,t.createElement)(r.Link,{href:e.logoLink,target:"_blank"},e.logo&&(0,t.createElement)(n,{alt:`${e.name} logo`,className:s?"":"yst-opacity-50 yst-filter yst-grayscale"}),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo"))),e.isNew&&(0,t.createElement)(r.Badge,{className:"yst-absolute yst-top-2 yst-right-2"},(0,o.__)("New","wordpress-seo"))),(0,t.createElement)(k.Content,null,(0,t.createElement)("div",null,e.claim&&(0,t.createElement)("h4",{className:"yst-text-base yst-mb-3 yst-font-medium yst-text-[#111827] yst-leading-tight"},e.claim),e.description&&(0,t.createElement)("p",null," ",e.description," "),e.usps&&(0,t.createElement)("ul",{className:"yst-space-y-3"},e.usps.map(((e,s)=>(0,t.createElement)("li",{key:s,className:"yst-flex yst-items-start"},(0,t.createElement)(A,{className:"yst-h-5 yst-w-5 yst-mr-2 yst-text-green-400 yst-flex-shrink-0"}),(0,t.createElement)("span",null," ",e," "))))),e.learnMoreLink&&(0,t.createElement)(r.Link,{href:e.learnMoreLink,className:"yst-flex yst-items-center yst-mt-3 yst-no-underline yst-font-medium",target:"_blank"},"Learn more",(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo")),(0,t.createElement)(Z,{className:"yst-h-4 yst-w-4 yst-ml-1 yst-icon-rtl"})))),(0,t.createElement)(k.Footer,null,!v(e)&&(0,t.createElement)(r.Button,{id:`${e.name}-upsell-button`,type:"button",as:"a",href:e.upsellLink,variant:"upsell","data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2",className:"yst-w-full yst-text-slate-800",target:"_blank"},(0,t.createElement)(x,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5 yst-text-yellow-900"}),(0,o.__)("Unlock with Premium","wordpress-seo"),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo"))),v(e)&&(0,t.createElement)("p",{className:"yst-flex yst-items-start yst-justify-between"},a)))};O.propTypes={integration:l.PropTypes.shape({name:l.PropTypes.string,claim:l.PropTypes.node,learnMoreLink:l.PropTypes.string,logoLink:l.PropTypes.string,slug:l.PropTypes.string,description:l.PropTypes.string,usps:l.PropTypes.array,logo:l.PropTypes.func.isRequired,isNew:l.PropTypes.bool,upsellLink:l.PropTypes.string}).isRequired,isActive:l.PropTypes.bool,children:l.PropTypes.oneOfType([l.PropTypes.node,l.PropTypes.arrayOf(l.PropTypes.node)])},O.defaultProps={isActive:!0,children:[]};const $=({integration:e,isActive:s})=>(0,t.createElement)(O,{integration:e,isActive:s},s&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Mastodon profile added","wordpress-seo")),(0,t.createElement)(A,{className:"yst-h-5 yst-w-5 yst-text-green-400 yst-flex-shrink-0"})),!s&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Mastodon profile not yet added","wordpress-seo")),(0,t.createElement)(T,{className:"yst-h-5 yst-w-5 yst-text-red-500 yst-flex-shrink-0"})));$.propTypes={integration:l.PropTypes.shape({name:l.PropTypes.string,claim:l.PropTypes.node,slug:l.PropTypes.string,description:l.PropTypes.string,usps:l.PropTypes.array,logo:l.PropTypes.func,isNew:l.PropTypes.bool}).isRequired,isActive:l.PropTypes.bool},$.defaultProps={isActive:!0};const V={name:"Mastodon",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: Mastodon; 3: bold close tag. */ +(0,o.__)("Verify your site on %1$s%2$s%3$s","wordpress-seo"),"","Mastodon",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-mastodon",logoLink:"https://yoa.st/integrations-logo-mastodon",slug:"mastodon",description:(0,o.sprintf)(/* translators: 1: Mastodon, 2: Yoast SEO Premium */ +(0,o.__)("Add trustworthiness to your %1$s profile by verifying your site with %2$s.","wordpress-seo"),"Mastodon","Yoast SEO Premium"),isPremium:!0,isNew:!0,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",b({xmlns:"http://www.w3.org/2000/svg",width:140,viewBox:"0 0 713.359 175.868"},e),f||(f=t.createElement("path",{fill:"#2b90d9",d:"M160.555 105.431c-2.413 12.407-21.598 25.983-43.634 28.614-11.491 1.373-22.804 2.631-34.867 2.079-19.73-.904-35.298-4.71-35.298-4.71 0 1.921.119 3.75.355 5.46 2.565 19.47 19.308 20.637 35.166 21.181 16.007.548 30.258-3.947 30.258-3.947l.659 14.472s-11.197 6.011-31.14 7.116c-11 .605-24.654-.276-40.56-4.485C6.999 162.08 1.066 125.31.159 88-.12 76.923.052 66.476.052 57.741.052 19.59 25.05 8.406 25.05 8.406 37.652 2.617 59.279.184 81.764 0h.552c22.484.184 44.125 2.618 56.729 8.406 0 0 24.996 11.183 24.996 49.335 0 0 .313 28.148-3.486 47.69"})),E||(E=t.createElement("path",{fill:"#282c37",d:"M34.658 48.494c0-5.554 4.502-10.055 10.055-10.055s10.055 4.501 10.055 10.055c0 5.553-4.502 10.055-10.055 10.055s-10.055-4.502-10.055-10.055M178.865 60.7v46.195h-18.301V62.057c0-9.452-3.978-14.248-11.933-14.248-8.794 0-13.202 5.69-13.202 16.943v24.542h-18.194V64.751c0-11.252-4.409-16.943-13.203-16.943-7.955 0-11.932 4.796-11.932 14.248v44.838H73.799V60.7c0-9.442 2.403-16.944 7.232-22.495 4.98-5.55 11.501-8.395 19.595-8.395 9.366 0 16.459 3.599 21.146 10.799l4.56 7.642 4.559-7.642c4.689-7.2 11.78-10.8 21.148-10.8 8.093 0 14.613 2.846 19.593 8.396 4.829 5.551 7.233 13.054 7.233 22.495m63.048 22.964c3.776-3.99 5.595-9.015 5.595-15.075 0-6.06-1.819-11.085-5.595-14.928-3.636-3.991-8.254-5.911-13.849-5.911-5.596 0-10.212 1.92-13.849 5.911-3.637 3.843-5.456 8.868-5.456 14.928 0 6.06 1.819 11.085 5.456 15.075 3.637 3.842 8.253 5.763 13.849 5.763 5.595 0 10.213-1.92 13.849-5.763m5.595-52.025h18.046v73.9h-18.046v-8.722c-5.455 7.243-13.01 10.79-22.801 10.79-9.373 0-17.347-3.695-24.062-11.233-6.573-7.538-9.931-16.85-9.931-27.785 0-10.79 3.358-20.102 9.931-27.64 6.715-7.537 14.689-11.38 24.062-11.38 9.79 0 17.346 3.548 22.8 10.79v-8.72zm78.762 35.62c5.315 3.99 7.973 9.606 7.833 16.7 0 7.538-2.658 13.45-8.113 17.588-5.457 3.992-12.03 6.06-20.004 6.06-14.409 0-24.201-5.912-29.378-17.588l15.669-9.31c2.098 6.353 6.714 9.606 13.709 9.606 6.434 0 9.652-2.07 9.652-6.356 0-3.104-4.197-5.912-12.73-8.128a117.46 117.46 0 0 1-7.973-2.514c-2.938-1.18-5.455-2.512-7.554-4.137-5.176-3.99-7.834-9.313-7.834-16.11 0-7.243 2.518-13.006 7.554-17.145 5.176-4.286 11.47-6.355 19.025-6.355 12.03 0 20.844 5.172 26.577 15.666l-15.386 8.868c-2.239-5.024-6.015-7.537-11.191-7.537-5.456 0-8.114 2.07-8.114 6.06 0 3.103 4.196 5.91 12.73 8.128 6.575 1.477 11.75 3.695 15.528 6.504m57.357-17.293h-15.808V80.71c0 3.695 1.4 5.91 4.058 6.945 1.958.74 5.875.887 11.75.59v17.295c-12.17 1.477-20.983.295-26.16-3.697-5.174-3.842-7.693-10.936-7.693-21.133V49.966h-12.17V31.64h12.17V16.71l18.045-5.764V31.64h15.808v18.327zm57.498 33.255c3.637-3.844 5.455-8.722 5.455-14.633s-1.818-10.789-5.455-14.631c-3.638-3.844-8.114-5.764-13.57-5.764-5.455 0-9.931 1.92-13.569 5.764-3.497 3.99-5.316 8.867-5.316 14.631 0 5.765 1.819 10.643 5.316 14.633 3.638 3.842 8.114 5.763 13.569 5.763 5.456 0 9.932-1.921 13.57-5.763m-39.869 13.153c-7.134-7.537-10.631-16.701-10.631-27.786 0-10.937 3.497-20.1 10.631-27.637 7.134-7.538 15.948-11.38 26.299-11.38 10.352 0 19.165 3.842 26.3 11.38 7.135 7.537 10.771 16.848 10.771 27.637 0 10.938-3.636 20.249-10.771 27.786-7.135 7.539-15.808 11.233-26.3 11.233-10.491 0-19.165-3.694-26.299-11.233m123.665-12.71c3.638-3.99 5.455-9.015 5.455-15.075 0-6.06-1.817-11.085-5.455-14.928-3.636-3.991-8.253-5.911-13.848-5.911-5.597 0-10.213 1.92-13.99 5.911-3.635 3.843-5.455 8.868-5.455 14.928 0 6.06 1.82 11.085 5.456 15.075 3.776 3.842 8.532 5.763 13.989 5.763 5.595 0 10.212-1.92 13.848-5.763m5.455-81.585h18.047v103.46h-18.047v-8.722c-5.315 7.243-12.87 10.79-22.661 10.79-9.372 0-17.485-3.695-24.2-11.233-6.575-7.538-9.932-16.85-9.932-27.785 0-10.79 3.357-20.102 9.932-27.64 6.715-7.537 14.828-11.38 24.2-11.38 9.791 0 17.346 3.548 22.661 10.79V2.079zm81.42 81.142c3.637-3.844 5.455-8.722 5.455-14.633s-1.818-10.789-5.455-14.631c-3.637-3.844-8.113-5.764-13.57-5.764-5.455 0-9.932 1.92-13.568 5.764-3.5 3.99-5.317 8.867-5.317 14.631 0 5.765 1.818 10.643 5.317 14.633 3.636 3.842 8.113 5.763 13.568 5.763 5.457 0 9.933-1.921 13.57-5.764m-39.868 13.154c-7.135-7.537-10.632-16.701-10.632-27.786 0-10.937 3.497-20.1 10.632-27.637 7.135-7.538 15.947-11.38 26.298-11.38 10.353 0 19.165 3.842 26.3 11.38 7.135 7.537 10.772 16.848 10.772 27.637 0 10.938-3.637 20.249-10.772 27.786-7.135 7.539-15.807 11.233-26.3 11.233-10.491 0-19.163-3.694-26.298-11.233m141.43-36.21v45.374h-18.045v-43.01c0-4.877-1.26-8.572-3.777-11.38-2.378-2.512-5.736-3.843-10.072-3.843-10.213 0-15.388 6.06-15.388 18.328v39.905H648.03v-73.9h18.046v8.277c4.337-6.946 11.19-10.345 20.844-10.345 7.694 0 13.989 2.66 18.885 8.129 5.035 5.469 7.554 12.859 7.554 22.465"}))),upsellLink:"https://yoa.st/get-mastodon-integration"},I=[[].map(((e,s)=>(0,t.createElement)(L,{key:s,integration:e,toggleLabel:(0,o.__)("Enable integration","wordpress-seo"),initialActivationState:y(e),isNetworkControlEnabled:g(e),isMultisiteAvailable:d(e),beforeToggle:w}))),(0,t.createElement)($,{key:3,integration:V,isActive:Boolean(window.wpseoIntegrationsData.mastodon_active)})];var S,z,C,j,R,F,B,H;function D(){return D=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",G({xmlns:"http://www.w3.org/2000/svg",width:153,height:58,"aria-hidden":"true",viewBox:"0 0 107.51 40.69"},e),j||(j=t.createElement("path",{fill:"#7c579f",fillRule:"evenodd",d:"M16.75 23.78h23.13c1.46 0 2.65 1.19 2.65 2.65v8.82c0 1.46-1.18 2.65-2.65 2.65h-8.3l1.14 2.79-5.01-2.79H16.75c-1.46 0-2.65-1.18-2.65-2.65v-8.82c0-1.46 1.19-2.65 2.65-2.65Z"})),R||(R=t.createElement("path",{fill:"#fff",d:"M15.53 26.18c.17-.22.41-.34.73-.36.59-.04.93.24 1.02.83.36 2.42.75 4.48 1.17 6.17L21 27.98c.23-.44.52-.67.87-.69.51-.04.83.29.96.97.29 1.54.66 2.86 1.1 3.97.3-2.95.82-5.08 1.53-6.4a.92.92 0 0 1 .77-.52c.27-.02.52.06.73.23.22.17.34.39.35.67.01.2-.02.39-.11.55-.45.84-.83 2.24-1.12 4.2-.29 1.89-.4 3.37-.32 4.43.02.29-.02.55-.13.76-.14.26-.35.4-.62.42-.31.02-.61-.12-.92-.43-1.08-1.11-1.94-2.76-2.57-4.94-.75 1.49-1.31 2.6-1.68 3.35-.68 1.31-1.27 1.99-1.75 2.02-.32.02-.59-.24-.81-.8-.6-1.52-1.24-4.46-1.92-8.82-.04-.3.02-.57.18-.78ZM40.51 28c-.42-.73-1.04-1.18-1.86-1.35-.22-.05-.43-.07-.63-.07-1.11 0-2.02.58-2.73 1.74-.6.99-.9 2.08-.9 3.27 0 .9.19 1.66.56 2.3.42.73 1.04 1.18 1.86 1.35.22.05.43.07.63.07 1.13 0 2.03-.58 2.73-1.74.6-1 .9-2.1.9-3.29 0-.9-.19-1.66-.56-2.28Zm-1.47 3.22c-.16.76-.45 1.34-.89 1.72-.34.31-.65.43-.94.37-.28-.06-.51-.31-.68-.75-.14-.36-.2-.72-.2-1.06a3.847 3.847 0 0 1 .7-2.23c.39-.57.79-.81 1.21-.72.28.06.51.31.68.75.14.36.2.72.2 1.06 0 .3-.03.58-.09.85ZM33.22 28c-.42-.73-1.04-1.18-1.86-1.35-.22-.05-.43-.07-.63-.07-1.11 0-2.02.58-2.73 1.74-.6.99-.9 2.08-.9 3.27 0 .9.19 1.66.56 2.3.42.73 1.04 1.18 1.86 1.35.22.05.43.07.63.07 1.12 0 2.03-.58 2.73-1.74.6-1 .9-2.1.9-3.29 0-.9-.19-1.66-.56-2.28Zm-1.47 3.22c-.16.76-.45 1.34-.89 1.72-.34.31-.65.43-.94.37-.28-.06-.51-.31-.68-.75-.14-.36-.2-.72-.2-1.06a3.847 3.847 0 0 1 .7-2.23c.39-.57.79-.81 1.21-.72.28.06.51.31.68.75.14.36.2.72.2 1.06 0 .3-.03.58-.09.85Z"})),F||(F=t.createElement("path",{d:"M45.47 27.9c-.78.77-1.16 1.74-1.16 2.92 0 1.27.38 2.3 1.15 3.08.77.78 1.77 1.17 3.01 1.17.36 0 .76-.06 1.21-.18v-1.88c-.4.12-.76.18-1.06.18-.62 0-1.11-.21-1.48-.62-.37-.41-.55-.97-.55-1.69 0-.66.18-1.2.55-1.63.37-.43.83-.64 1.38-.64.36 0 .75.06 1.16.17V26.9c-.39-.1-.81-.15-1.27-.15-1.19 0-2.17.38-2.94 1.15Zm8.06-1.15c-1.07 0-1.91.36-2.51 1.07-.6.71-.9 1.71-.9 2.98 0 1.38.3 2.44.9 3.17.6.73 1.46 1.1 2.6 1.1s1.95-.37 2.54-1.1c.59-.73.89-1.76.89-3.09s-.3-2.35-.91-3.06c-.6-.71-1.48-1.07-2.62-1.07Zm.92 6.04c-.21.33-.52.49-.92.49-.37 0-.65-.16-.85-.49-.2-.33-.29-.98-.29-1.96 0-1.52.39-2.28 1.16-2.28.82 0 1.23.77 1.23 2.32 0 .96-.11 1.6-.32 1.93Zm8.36-5.82-.42 1.78c-.11.45-.21.92-.3 1.4l-.23 1.23c-.22-1.23-.52-2.7-.91-4.4h-2.7l-1.02 7.91h2.02l.55-5.45 1.38 5.45h1.45l1.32-5.44.57 5.44h2.12l-1.07-7.91h-2.76Zm9.68 0-.42 1.78c-.11.45-.21.92-.3 1.4l-.23 1.23c-.22-1.23-.52-2.7-.91-4.4h-2.7l-1.02 7.91h2.02l.55-5.45 1.38 5.45h1.45l1.32-5.44.57 5.44h2.12l-1.07-7.91h-2.76Zm6.57 4.78h1.9v-1.64h-1.9v-1.46h2.19v-1.68h-4.32v7.91h4.34v-1.69h-2.2v-1.44Zm8.22-1.25c.22-.36.33-.73.33-1.11 0-.75-.29-1.34-.87-1.77-.58-.43-1.38-.65-2.38-.65h-2.49v7.91h2.14v-3.6h.04l1.73 3.6h2.26l-1.71-3.57c.42-.18.75-.45.97-.81ZM84 30.37v-1.88c.51.01.87.1 1.09.25.22.16.33.42.33.79 0 .54-.47.82-1.42.84Zm4.88-2.47c-.78.77-1.16 1.74-1.16 2.92 0 1.27.38 2.3 1.15 3.08.77.78 1.77 1.17 3.01 1.17.36 0 .76-.06 1.21-.18v-1.88c-.4.12-.76.18-1.06.18-.62 0-1.11-.21-1.48-.62-.37-.41-.55-.97-.55-1.69 0-.66.18-1.2.55-1.63.37-.43.83-.64 1.38-.64.36 0 .75.06 1.16.17V26.9c-.39-.1-.81-.15-1.27-.15-1.18 0-2.17.38-2.94 1.15Zm6.94 5.29v-1.44h1.9v-1.64h-1.9v-1.46h2.19v-1.68h-4.32v7.91h4.34v-1.69h-2.2Z"})),B||(B=t.createElement("path",{fill:"#a71d69",d:"M21.21 6.8c-4.96 0-6.94 3.33-6.94 7.03s1.95 7.18 6.94 7.18 6.93-3.48 6.92-6.95c-.01-4.22-2.15-7.26-6.92-7.26Zm-3 7.24c.12-4.96 3.93-4.95 5.2-3.18 1.16 1.62 1.4 7.15-2.2 7.11-1.66-.02-2.96-1.14-3-3.94Zm43.22 3.54V10.4H64V7.28h-2.57V3.51h-3.97v3.77h-2.01v3.12h2.01v6.77c0 3.85 2.68 6.14 5.52 6.61l1.18-3.19c-1.65-.21-2.72-1.44-2.74-3.02Zm-20.01-1.14v-5.4c0-.2-.01-.38-.03-.56-.34-4.36-6.54-4.35-11.34-2.68l1.39 2.79c3.12-1.48 4.99-1.1 5.65-.37.02.02.03.04.05.06.33.45.25 1.16.25 1.72-4.08 0-8.43.54-8.43 5.02 0 3.4 4.27 5.59 8.72 2.35l.66 1.6h3.82c-.34-1.87-.75-3.48-.75-4.53Zm-3.99-.03c-3.14 3.51-6.02.21-3.07-1.24.87-.3 2.04-.31 3.07-.31v1.55Zm10.08-5.66c0-1.33 2.13-1.95 5.49-.42l1.16-2.82c-4.52-1.37-10.69-1.49-10.73 3.24-.02 2.27 1.43 3.48 3.53 4.26 1.45.54 3.54.82 3.54 1.97 0 1.51-3.25 1.74-6.2-.29l-1.19 3.06c4.03 2 11.52 2.06 11.48-2.96-.04-4.97-7.06-4.12-7.06-6.04ZM12.6 0 6.85 15.97 4.1 7.35H0l4.58 11.78c.39 1 .39 2.12 0 3.12-.51 1.31-1.37 2.44-3.44 2.72v3.49c4.05 0 6.23-2.49 8.19-7.94L16.98 0H12.6ZM76.58 17.69c0 1.05-.38 1.87-1.14 2.46s-1.8.89-3.14.89-2.42-.21-3.27-.62V18.6c.54.25 1.11.45 1.71.6s1.17.22 1.69.22c.76 0 1.33-.14 1.69-.43s.54-.68.54-1.17c0-.44-.17-.81-.5-1.12-.33-.31-1.02-.67-2.06-1.09-1.07-.43-1.83-.93-2.27-1.49-.44-.56-.66-1.23-.66-2.01 0-.98.35-1.76 1.05-2.32.7-.56 1.64-.85 2.81-.85s2.25.25 3.37.74l-.61 1.57c-1.05-.44-1.98-.66-2.81-.66-.62 0-1.1.14-1.42.41-.32.27-.48.63-.48 1.08 0 .31.06.57.19.79s.34.42.64.62c.3.19.83.45 1.6.77.86.36 1.5.7 1.9 1.01.4.31.7.66.89 1.06.19.39.28.85.28 1.39Zm8.78 3.2h-6.67V9.12h6.67v1.63h-4.74v3.21h4.44v1.61h-4.44v3.7h4.74v1.63Zm12.85-5.91c0 1.92-.48 3.41-1.44 4.47-.96 1.06-2.32 1.59-4.07 1.59s-3.14-.53-4.1-1.58c-.95-1.06-1.43-2.55-1.43-4.5s.48-3.44 1.44-4.48c.96-1.04 2.33-1.56 4.11-1.56s3.11.53 4.06 1.59c.96 1.06 1.43 2.55 1.43 4.47Zm-9 0c0 1.45.29 2.55.88 3.3.59.75 1.45 1.12 2.6 1.12s2.01-.37 2.59-1.11c.58-.74.87-1.84.87-3.31s-.29-2.54-.87-3.29c-.58-.75-1.44-1.12-2.58-1.12s-2.03.37-2.62 1.12c-.59.75-.88 1.84-.88 3.29Z"})),H||(H=t.createElement("path",{fill:"#77b22b",d:"m101.16 21.06 4.62-12.17h1.73l-4.61 12.17h-1.74z"}))),U=({integration:e,isActive:s,isInstalled:a,isPrerequisiteActive:n,activationLink:l})=>(0,t.createElement)(O,{integration:e,isActive:s},!n&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Plugin not detected","wordpress-seo")),(0,t.createElement)(T,{className:"yst-h-5 yst-w-5 yst-text-red-500 yst-flex-shrink-0"})),n&&s&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Integration active","wordpress-seo")),(0,t.createElement)(A,{className:"yst-h-5 yst-w-5 yst-text-green-400 yst-flex-shrink-0"})),n&&!s&&a&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(r.Button,{id:`${e.name}-upsell-button`,type:"button",as:"a",variant:"secondary",href:l,className:"yst-w-full yst-text-slate-800 yst-text-center"},(0,o.sprintf)(/* translators: 1: Yoast WooCommerce SEO */ +(0,o.__)("Activate %s","wordpress-seo"),"Yoast WooCommerce SEO"))),n&&!s&&!a&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(r.Button,{id:`${e.name}-upsell-button`,type:"button",as:"a",href:e.upsellLink,variant:"upsell",className:"yst-w-full yst-text-slate-800",target:"_blank"},(0,t.createElement)(x,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5 yst-text-yellow-900"}),(0,o.sprintf)(/* translators: 1: Yoast WooCommerce SEO */ +(0,o.__)("Buy %s","wordpress-seo"),"Yoast WooCommerce SEO"),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo")))));U.propTypes={integration:l.PropTypes.shape({name:l.PropTypes.string,claim:l.PropTypes.node,slug:l.PropTypes.string,description:l.PropTypes.string,usps:l.PropTypes.array,logo:l.PropTypes.func,isNew:l.PropTypes.bool,upsellLink:l.PropTypes.string}).isRequired,isActive:l.PropTypes.bool,isInstalled:l.PropTypes.bool,isPrerequisiteActive:l.PropTypes.bool,activationLink:l.PropTypes.string.isRequired},U.defaultProps={isActive:!0,isInstalled:!0,isPrerequisiteActive:!0};const J=e=>(0,t.createElement)("img",{src:window.wpseoIntegrationsData.plugin_url+"/images/acf-logo.png",height:"50",width:"50",alt:(0,o.sprintf)(/* translators: 1: Yoast SEO, 2: ACF */ +(0,o.__)("%1$s integrates with %2$s","wordpress-seo"),"Yoast SEO","ACF"),...e}),K=({integration:e,isActive:s,isInstalled:a,isPrerequisiteActive:n,installationLink:l,activationLink:c})=>(e.logo=J,(0,t.createElement)(O,{integration:e,isActive:s},!n&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Plugin not detected","wordpress-seo")),(0,t.createElement)(T,{className:"yst-h-5 yst-w-5 yst-text-red-500 yst-flex-shrink-0"})),n&&s&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Integration active","wordpress-seo")),(0,t.createElement)(A,{className:"yst-h-5 yst-w-5 yst-text-green-400 yst-flex-shrink-0"})),n&&!s&&a&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(r.Button,{id:`${e.name}-upsell-button`,type:"button",as:"a",variant:"secondary",href:c,className:"yst-w-full yst-text-slate-800 yst-text-center"},(0,o.sprintf)(/* translators: 1: ACF, 2: Yoast SEO */ +(0,o.__)("Activate %1$s Content Analysis for %2$s","wordpress-seo"),"ACF","Yoast SEO"))),n&&!s&&!a&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)(r.Button,{id:`${e.name}-upsell-button`,type:"button",as:"a",href:l,variant:"secondary",className:"yst-w-full yst-text-slate-800 yst-text-center"},(0,o.sprintf)(/* translators: 1: ACF, 2: Yoast SEO */ +(0,o.__)("Install %1$s Content Analysis for %2$s","wordpress-seo"),"ACF","Yoast SEO")))));K.propTypes={integration:l.PropTypes.shape({name:l.PropTypes.string,claim:l.PropTypes.node,slug:l.PropTypes.string,description:l.PropTypes.string,usps:l.PropTypes.array,logo:l.PropTypes.func,isNew:l.PropTypes.bool}).isRequired,isActive:l.PropTypes.bool,isInstalled:l.PropTypes.bool,isPrerequisiteActive:l.PropTypes.bool,installationLink:l.PropTypes.string,activationLink:l.PropTypes.string},K.defaultProps={isActive:!0,isInstalled:!0};const Q=({integration:e,isActive:s})=>(0,t.createElement)(O,{integration:e,isActive:s},s&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Integration active","wordpress-seo")),(0,t.createElement)(A,{className:"yst-h-5 yst-w-5 yst-text-green-400 yst-flex-shrink-0"})),!s&&(0,t.createElement)(i.Fragment,null,(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Plugin not detected","wordpress-seo")),(0,t.createElement)(T,{className:"yst-h-5 yst-w-5 yst-text-red-500 yst-flex-shrink-0"})));Q.propTypes={integration:l.PropTypes.shape({name:l.PropTypes.string,claim:l.PropTypes.node,slug:l.PropTypes.string,description:l.PropTypes.string,usps:l.PropTypes.array,logo:l.PropTypes.func,isNew:l.PropTypes.bool}).isRequired,isActive:l.PropTypes.bool},Q.defaultProps={isActive:!0};const X=({integration:e,initialActivationState:s,isNetworkControlEnabled:a,isMultisiteAvailable:n,toggleLabel:l,beforeToggle:c,isPrerequisiteActive:m})=>{const[p,h]=(0,i.useState)(s),y=(0,i.useCallback)((async()=>{let t=!0;const s=!p;h(s),c&&(t=!1,t=await c(e,s)),t||h(!s)}),[p,c,h]),g=e.logo;return(0,t.createElement)(k,null,(0,t.createElement)(k.Header,null,(0,t.createElement)(r.Link,{href:e.logoLink,target:"_blank"},e.logo&&(0,t.createElement)(g,{alt:(0,o.sprintf)(/* translators: 1: Yoast SEO, 2: integration name */ +(0,o.__)("%1$s integrates with %2$s","wordpress-seo"),"Yoast SEO",e.name),className:m&&u(e,p)?"":"yst-opacity-50 yst-filter yst-grayscale"}),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo"))),!a&&n&&(0,t.createElement)(r.Badge,{className:"yst-absolute yst-top-2 yst-right-2"},(0,o.__)("Network Disabled","wordpress-seo")),a&&e.isNew&&(0,t.createElement)(r.Badge,{className:"yst-absolute yst-top-2 yst-right-2"},(0,o.__)("New","wordpress-seo"))),(0,t.createElement)(k.Content,null,(0,t.createElement)("div",null,e.claim&&(0,t.createElement)("h4",{className:"yst-text-base yst-mb-3 yst-font-medium yst-text-[#111827] yst-leading-tight"},e.claim),(0,t.createElement)("p",null," ",e.description,e.learnMoreLink&&(0,t.createElement)(r.Link,{href:e.learnMoreLink,className:"yst-flex yst-items-center yst-mt-3 yst-no-underline yst-font-medium",target:"_blank"},"Learn more",(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo")),(0,t.createElement)(Z,{className:"yst-h-4 yst-w-4 yst-ml-1 yst-icon-rtl"})))),p&&(0,t.createElement)(N.Slot,{name:`${e.name}Slot`})),(0,t.createElement)(k.Footer,null,!m&&(0,t.createElement)("p",{className:"yst-flex yst-items-start yst-justify-between"},(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Plugin not detected","wordpress-seo")),(0,t.createElement)(T,{className:"yst-h-5 yst-w-5 yst-text-red-500 yst-flex-shrink-0"})),m&&!v(e)&&(0,t.createElement)(r.Button,{id:`${e.name}-upsell-button`,type:"button",as:"a",href:e.upsellLink,variant:"upsell",className:"yst-w-full yst-text-slate-800",target:"_blank"},(0,t.createElement)(x,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5 yst-text-yellow-900"}),(0,o.__)("Unlock with Premium","wordpress-seo"),(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,o.__)("(Opens in a new browser tab)","wordpress-seo"))),m&&v(e)&&!d(e)&&(0,t.createElement)("p",{className:"yst-flex yst-items-start yst-justify-between"},(0,t.createElement)("span",{className:"yst-text-slate-700 yst-font-medium"},(0,o.__)("Integration unavailable for multisites","wordpress-seo")),(0,t.createElement)(T,{className:"yst-h-5 yst-w-5 yst-text-red-500 yst-flex-shrink-0"})),m&&v(e)&&d(e)&&(0,t.createElement)(r.ToggleField,{checked:p,label:l,onChange:y,disabled:!a||!n})))};X.propTypes={integration:l.PropTypes.shape({name:l.PropTypes.string,claim:l.PropTypes.node,learnMoreLink:l.PropTypes.string,logoLink:l.PropTypes.string,slug:l.PropTypes.string,description:l.PropTypes.string,usps:l.PropTypes.array,logo:l.PropTypes.func,isPremium:l.PropTypes.bool,isNew:l.PropTypes.bool,isMultisiteAvailable:l.PropTypes.bool,upsellLink:l.PropTypes.string}),initialActivationState:l.PropTypes.bool,isNetworkControlEnabled:l.PropTypes.bool,isMultisiteAvailable:l.PropTypes.bool,toggleLabel:l.PropTypes.string,beforeToggle:l.PropTypes.func,isPrerequisiteActive:l.PropTypes.bool};const ee={elementor:{name:"Elementor",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: Yoast SEO; 2: bold open tag; 3: Elementor; 4: bold close tag. */ +(0,o.__)("Get %1$s tools and functionality in %2$s%3$s%4$s","wordpress-seo"),"Yoast SEO","","Elementor",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-elementor",logoLink:"https://yoa.st/integrations-logo-elementor",slug:"elementor",description:(0,o.__)("Take advantage of your favorite SEO & content analysis tools with your favorite page builder.","wordpress-seo"),isPremium:!1,isNew:!1,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",Y({xmlns:"http://www.w3.org/2000/svg",width:170,height:70,fill:"none",viewBox:"0 0 810 160"},e),z||(z=t.createElement("g",{fill:"#92003B",clipPath:"url(#elementor-logo_svg__a)"},t.createElement("path",{d:"M505.95 73.98s-6.873 1.642-12.688 3.029l-8.839 2.015h-.081c0-2.388.174-4.905.744-7.224.733-2.97 2.338-6.443 5.129-7.969 3.035-1.654 6.734-1.853 9.944-.57 3.326 1.316 4.849 4.532 5.501 7.864.186.932.302 1.864.395 2.808l-.105.046Zm23.051 5.044c0-23.104-14.526-33.03-33.087-33.03-20.981 0-34.123 14.551-34.123 33.147 0 20.215 11.188 33.38 35.274 33.38 13.026 0 20.399-2.307 29.168-6.699l-3.338-15.135c-6.687 3.006-12.909 4.847-21.213 4.847-9.106 0-14.293-3.46-16.259-9.927h42.997c.348-1.736.581-3.705.581-6.583ZM312.998 73.98s-6.874 1.642-12.689 3.029l-8.838 2.015h-.082c0-2.388.175-4.905.744-7.224.733-2.97 2.338-6.443 5.129-7.969 3.036-1.654 6.734-1.853 9.944-.57 3.326 1.316 4.85 4.532 5.501 7.864.186.932.302 1.864.395 2.808l-.104.046Zm23.05 5.044c0-23.104-14.526-33.03-33.087-33.03-20.98 0-34.122 14.551-34.122 33.147 0 20.215 11.188 33.38 35.273 33.38 13.026 0 20.399-2.307 29.168-6.699l-3.337-15.135c-6.688 3.006-12.91 4.847-21.214 4.847-9.106 0-14.293-3.46-16.258-9.927h42.996c.349-1.736.581-3.705.581-6.583ZM259.814 29.017h-21.295v81.186h21.295V29.017ZM533.49 48.067h22.364l4.71 14.354c2.943-7.084 9.572-16.195 21.33-16.195 16.142 0 24.899 8.203 24.899 29.338v34.65h-22.364c0-7.223.012-14.435.023-21.66 0-3.308-.058-6.617-.011-9.926.034-3.052.255-6.21-1.373-8.948-1.105-1.853-2.907-3.216-4.849-4.148-3.943-1.887-8.223-1.84-12.096.187-.953.5-5.559 2.994-5.559 4.147v40.348H538.2v-45.38l-4.71-16.767ZM623.704 64.355h-10.258V48.067h10.258V37.884l22.364-5.278v15.461h22.481v16.288h-22.481v18.246c0 7.166 3.455 10.51 8.642 10.51 5.303 0 8.303-.7 12.792-2.19l2.652 16.858c-6.106 2.657-13.712 3.927-21.446 3.927-16.258 0-25.016-7.737-25.016-22.755V64.355h.012ZM710.394 94.031c8.187 0 13.025-5.896 13.025-15.356 0-9.461-4.605-14.902-12.676-14.902-8.188 0-12.909 5.43-12.909 15.24 0 9.25 4.605 15.018 12.56 15.018Zm.233-48.387c20.98 0 36.308 13.166 36.308 33.602 0 20.552-15.328 32.914-36.541 32.914-21.097 0-36.088-12.7-36.088-32.914 0-20.436 14.875-33.602 36.321-33.602ZM441.754 47.88c-3.954-1.63-8.432-2.236-12.712-1.619-2.175.315-4.303.944-6.28 1.923-5.42 2.68-9.641 8.796-11.909 14.25-1.489-6.28-5.827-11.92-12.165-14.542-3.954-1.63-8.432-2.237-12.712-1.62-2.174.316-4.303.945-6.28 1.923-5.408 2.668-9.618 8.762-11.897 14.203v-.396L363.24 48.09h-22.365l4.711 16.766v45.37h22.213V69.668c.081-.303 1.07-.862 1.244-.99 2.605-1.852 5.664-3.763 8.92-3.996 3.327-.245 6.606 1.444 8.583 4.09.21.29.407.582.593.885 1.629 2.738 1.408 5.895 1.373 8.948-.035 3.309.011 6.618.011 9.927-.011 7.224-.023 14.436-.023 21.659h22.365V69.692c.046-.291 1.07-.874 1.256-1.002 2.605-1.853 5.663-3.764 8.92-3.997 3.326-.244 6.606 1.445 8.583 4.09.209.291.407.582.593.885 1.628 2.738 1.407 5.896 1.372 8.949-.035 3.308.012 6.617.012 9.926-.012 7.224-.023 14.436-.023 21.66h22.364v-34.65c0-10.16-1.454-23.245-12.188-27.672ZM799.827 46.226c-11.758 0-18.375 9.123-21.329 16.195l-4.711-14.354h-22.364l4.71 16.766v45.37h22.365V68.282c3.186-.56 20.48 2.633 23.76 3.833V46.308a40.988 40.988 0 0 0-2.431-.082ZM206.444 73.98s-6.873 1.642-12.688 3.029l-8.839 2.015h-.081c0-2.388.174-4.905.744-7.224.733-2.97 2.338-6.443 5.129-7.969 3.035-1.654 6.734-1.853 9.944-.57 3.326 1.316 4.849 4.532 5.501 7.864.186.932.302 1.864.395 2.808l-.105.046Zm23.051 5.044c0-23.104-14.526-33.03-33.087-33.03-20.981 0-34.123 14.551-34.123 33.147 0 20.215 11.188 33.38 35.274 33.38 13.026 0 20.399-2.307 29.168-6.699l-3.338-15.135c-6.687 3.006-12.909 4.847-21.213 4.847-9.106 0-14.293-3.46-16.259-9.927h42.996c.349-1.736.582-3.705.582-6.583ZM66.141 16.05c-35.285 0-63.883 28.65-63.883 64 0 35.338 28.598 64 63.883 64 35.285 0 63.883-28.651 63.883-64-.011-35.35-28.609-64-63.883-64Zm-15.968 90.657H39.532V53.38h10.641v53.327Zm42.577 0H60.815v-10.66H92.75v10.66Zm0-21.333H60.815v-10.66H92.75v10.66Zm0-21.333H60.815V53.38H92.75v10.66Z"}))),C||(C=t.createElement("defs",null,t.createElement("clipPath",{id:"elementor-logo_svg__a"},t.createElement("path",{fill:"#fff",d:"M2.258 16.05h795.828v127.9H2.258z"})))))},jetpack:{name:"Jetpack",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: Jetpack; 3: bold close tag; 4: Yoast. */ +(0,o.__)("Get the most out of %1$s%2$s%3$s and %4$s, together","wordpress-seo"),"","Jetpack","","Yoast"),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-jetpack",logoLink:"https://yoa.st/integrations-logo-jetpack",slug:"jetpack",description:(0,o.__)("Upgrade your meta tags and social previews and manage your SEO settings in one place.","wordpress-seo"),isPremium:!1,isNew:!1,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",q({xmlns:"http://www.w3.org/2000/svg",width:153,height:108,viewBox:"0 0 595.276 841.89"},e),t.createElement("path",{d:"M-81.143 289.235c26.67-1.36 53.71 5.84 76.08 20.45 27.82 17.89 48.24 46.9 55.47 79.2 8.2 35.481.51 74.32-21.03 103.74-19.52 27.24-50.08 46.29-83.19 51.61-26.43 4.39-54.23.4-78.22-11.59-25.21-12.43-46.11-33.38-58.42-58.65-13.52-27.32-16.65-59.52-8.909-88.98 7.17-27.76 24.06-52.86 47-70.06 20.419-15.49 45.599-24.609 71.22-25.72zm-.42 25.35c-21.33 41.53-42.75 83.02-64.13 124.52 21.39-.02 42.79.01 64.18-.01-.02-41.51.09-83.01-.05-124.51zm13.05 81.5c-.01 41.51.02 83.03-.01 124.54 21.55-41.44 42.76-83.05 64.25-124.52-21.41-.07-42.82-.03-64.24-.02z",style:{fill:"#00be28",fillRule:"evenodd"}}),t.createElement("path",{d:"M-81.563 314.586c.14 41.5.03 83 .05 124.51-21.39.02-42.79-.01-64.18.01 21.38-41.5 42.8-82.99 64.13-124.52zm13.05 81.5c21.42-.01 42.83-.05 64.24.019-21.49 41.47-42.7 83.08-64.25 124.52.03-41.51 0-83.03.01-124.54z",style:{fill:"#fff",fillRule:"evenodd"}}),t.createElement("path",{d:"M120.697 334.555c15.17-.07 30.34-.01 45.51-.03-.02 37.16.01 74.32-.02 111.48-.09 10.56-1.43 21.5-6.7 30.851-6.76 12.1-19.02 19.62-31.07 25.68-3.69-5.51-7.02-11.241-10.68-16.76 7.79-4.801 15.83-10.2 20.31-18.44 2.9-5.291 3.87-11.39 3.92-17.361-.02-32.3 0-64.61-.01-96.92-7.06-.01-14.12 0-21.18 0-.08-6.17.03-12.34-.08-18.5zm535.206.05c7.607-.16 15.224-.06 22.83-.06-.09 25.501.172 51.01-.13 76.51 10.734-12.889 21.105-26.08 31.839-38.97 9.816.08 19.622-.03 29.439.06-12.339 14.3-24.506 28.74-36.844 43.03 13.428 15.98 26.916 31.91 40.375 47.88-9.898-.01-19.784 0-29.681-.01a28313.007 28313.007 0 0 0-35.008-42.99c.02 14.29-.01 28.57.02 42.86-7.576.29-15.173.07-22.76.12-.08-42.81.081-85.62-.08-128.43zm-359.887 11.81c7.611.05 15.231-.18 22.841.11-.16 8.53-.05 17.06-.06 25.58 9.48.02 18.97-.009 28.46.02-.03 5.87-.03 11.74-.01 17.61-9.49.04-18.98 0-28.47.02.05 16.09-.07 32.19.06 48.28-.08 4.02 2.87 7.8 6.86 8.52 6.67 1.39 13.36-.93 19.81-2.41-.07 5.77-.05 11.53-.011 17.3a72.497 72.497 0 0 1-26.859 3.76c-6.021-.39-12.33-2.21-16.58-6.7-4.47-4.61-6.01-11.27-6.02-17.51-.01-17.079.01-34.16-.01-51.24-4.18-.009-8.36.011-12.53-.02 0-5.81-.03-11.62.02-17.44 4.17 0 8.349 0 12.53-.01-.03-8.63.02-17.249-.03-25.87zm-93.4 32.47c10.68-8.83 25.611-10.97 38.91-8.21 9.32 1.82 17.92 7.52 22.64 15.84 6.37 10.76 6.201 23.79 4.82 35.82-19.459.02-38.92-.03-58.369.03.29 6.44 1.56 13.46 6.45 18.1 5.71 5.41 14.04 6.27 21.55 6.32 9.65.23 19.09-2.33 28.11-5.54-.01 6.28 0 12.56 0 18.84-14.54 4.51-30.08 6.5-45.21 4.34-9.97-1.5-19.89-6.06-26.05-14.26-7.42-9.68-9.37-22.32-9.25-34.21.14-13.85 5.47-28.16 16.4-37.07zm14.811 12.87c-4.2 4.08-5.83 9.94-6.68 15.55 11.8.08 23.6.01 35.4.04-.18-6.47-1.2-14.04-6.86-18.12-6.65-4.32-16.3-3.05-21.86 2.53zm170.06-11.52c8.569-6.66 19.19-10.9 30.15-10.67 10.46-.16 21.1 4.42 27.369 12.96 8.3 11.19 9.76 25.93 8.561 39.41-1.261 14.51-8.321 29.24-21.24 36.74-13.13 7.94-29.32 7.37-43.84 4.35-.01 16.03-.01 32.07 0 48.1-7.56.01-15.12 0-22.68.01.03-46.43-.04-92.85.04-139.27 7.2.11 14.41.08 21.61.01.03 2.78.049 5.57.03 8.36zm.99 17.91c-.05 15.72.12 31.45-.09 47.17 5.95 1.46 12.119 1.98 18.23 1.87 7-.13 14.28-3.06 18.28-9.01 5.06-7.329 5.8-16.63 5.49-25.27-.32-6.6-1.25-13.68-5.52-18.98-3.36-4.25-8.99-5.94-14.23-5.67-8.35.28-15.9 4.66-22.16 9.89zm83.38-22.6c11.48-3.94 23.63-6 35.769-5.97 9.17.13 19.08 1.86 26.01 8.35 6.78 6.37 8.91 16.07 9.11 25.04.04 20.02.01 40.05.01 60.07-7.02.04-14.04 0-21.05.03-.24-3.43-.16-6.87-.16-10.3-8.31 6.47-18.11 11.83-28.9 11.91-8.77.58-17.77-3.76-22.33-11.35-4.68-7.84-4.92-17.92-1.64-26.32 3.2-7.92 10.961-12.87 18.89-15.17 10.58-3.04 21.67-3.53 32.49-5.34-.04-4.82.14-10.2-2.98-14.21-2.9-3.78-8.03-4.52-12.47-4.64-10.59.06-20.96 2.7-30.95 5.99-.38-6.05-1.16-12.07-1.8-18.09zm28.88 48.07c-4.591.65-9.041 3.73-10.22 8.37-1.84 5.98.65 14.26 7.55 15.4 8.13.99 15.56-3.67 21.989-8.07-.09-6.25-.03-12.49-.04-18.73-6.42 1.08-12.87 1.94-19.28 3.03zm75.628-43.94c9.856-7.9 22.91-10.53 35.29-10.08 7.879.12 15.617 1.9 23.082 4.35.02 6.43-.01 12.86.02 19.28-10.754-3.83-22.558-6.81-33.908-4.12-8.08 1.91-14.174 8.91-15.859 16.9-1.907 8.81-1.715 18.34 1.513 26.83 2.442 6.53 8.313 11.52 15.123 12.99 11.552 2.62 23.477-.42 34.281-4.6-.02 6.29-.01 12.59 0 18.891-14.76 5.21-31.062 7.08-46.306 2.93-8.99-2.39-17.312-7.87-22.236-15.87-6.529-10.401-7.808-23.18-6.999-35.19.92-12.26 6.152-24.62 15.999-32.31z",style:{fill:"#000",fillRule:"evenodd"}}))},algolia:{name:"Algolia",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: Algolia; 3: bold close tag. */ +(0,o.__)("Improve your internal search results with %1$s%2$s%3$s","wordpress-seo"),"","Algolia",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-algolia",logoLink:"https://yoa.st/integrations-logo-algolia",slug:"algolia",description:(0,o.sprintf)(/* translators: 1: Algolia, 2: Yoast SEO */ +(0,o.__)("Connect your %1$s account to improve your site’s search results using %2$s data.","wordpress-seo"),"Algolia","Yoast SEO"),isPremium:!0,isNew:!1,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",D({xmlns:"http://www.w3.org/2000/svg",width:150,height:40,viewBox:"100 100 525 160"},e),S||(S=t.createElement("g",{fill:"none",fillRule:"evenodd"},t.createElement("path",{fill:"#5468FF",d:"M135.8 120.999h88.4c8.7 0 15.8 7.065 15.8 15.8v88.405c0 8.7-7.065 15.795-15.8 15.795h-88.4c-8.7 0-15.8-7.06-15.8-15.795v-88.445c0-8.695 7.06-15.76 15.8-15.76"}),t.createElement("path",{fill:"#FFF",d:"M192.505 147.788v-4.115a5.209 5.209 0 0 0-5.21-5.205H175.15a5.209 5.209 0 0 0-5.21 5.205v4.225c0 .47.435.8.91.69a37.966 37.966 0 0 1 10.57-1.49c3.465 0 6.895.47 10.21 1.38.44.11.875-.215.875-.69m-33.285 5.385-2.075-2.075a5.206 5.206 0 0 0-7.365 0l-2.48 2.475a5.185 5.185 0 0 0 0 7.355l2.04 2.04c.33.325.805.25 1.095-.075a39.876 39.876 0 0 1 3.975-4.66 37.68 37.68 0 0 1 4.7-4c.364-.22.4-.73.11-1.06m22.164 13.065v17.8c0 .51.55.875 1.02.62l15.825-8.19c.36-.18.47-.62.29-.98-3.28-5.755-9.37-9.685-16.405-9.94-.365 0-.73.29-.73.69m0 42.88c-13.195 0-23.915-10.705-23.915-23.88 0-13.175 10.72-23.875 23.915-23.875 13.2 0 23.916 10.7 23.916 23.875s-10.68 23.88-23.916 23.88m0-57.8c-18.74 0-33.94 15.18-33.94 33.92 0 18.745 15.2 33.89 33.94 33.89s33.94-15.18 33.94-33.925c0-18.745-15.165-33.885-33.94-33.885"}),t.createElement("path",{fill:"#5468FF",d:"M359.214 216.177c-23.365.11-23.365-18.855-23.365-21.875l-.04-71.045 14.254-2.26v70.61c0 1.715 0 12.56 9.15 12.595v11.975zm-57.78-11.61c4.374 0 7.62-.255 9.88-.69v-14.485a29.196 29.196 0 0 0-3.43-.695 33.742 33.742 0 0 0-4.956-.365c-1.57 0-3.175.11-4.775.365-1.605.22-3.065.655-4.34 1.275-1.275.62-2.335 1.495-3.1 2.62-.8 1.13-1.165 1.785-1.165 3.495 0 3.345 1.165 5.28 3.28 6.55 2.115 1.275 4.995 1.93 8.606 1.93zm-1.24-51.685c4.7 0 8.674.585 11.884 1.75 3.206 1.165 5.796 2.8 7.69 4.875 1.935 2.11 3.245 4.915 4.046 7.9.84 2.985 1.24 6.26 1.24 9.86v36.62c-2.185.47-5.506 1.015-9.95 1.67-4.446.655-9.44.985-14.986.985-3.68 0-7.07-.365-10.095-1.055-3.065-.69-5.65-1.82-7.84-3.385-2.15-1.565-3.825-3.57-5.065-6.04-1.205-2.48-1.825-5.97-1.825-9.61 0-3.495.69-5.715 2.045-8.12 1.38-2.4 3.24-4.365 5.575-5.895 2.37-1.53 5.065-2.62 8.165-3.275 3.1-.655 6.345-.985 9.695-.985 1.57 0 3.21.11 4.96.29 1.715.185 3.575.515 5.545.985v-2.33c0-1.635-.185-3.2-.585-4.655a10.012 10.012 0 0 0-2.045-3.895c-.985-1.13-2.255-2.005-3.86-2.62-1.605-.62-3.65-1.095-6.09-1.095-3.28 0-6.27.4-9.005.875-2.735.47-4.995 1.02-6.71 1.635l-1.71-11.68c1.785-.62 4.445-1.24 7.875-1.855 3.425-.66 7.11-.95 11.045-.95zm281.51 51.285c4.375 0 7.615-.255 9.875-.695v-14.48c-.8-.22-1.93-.475-3.425-.695a33.813 33.813 0 0 0-4.96-.365c-1.565 0-3.17.11-4.775.365-1.6.22-3.06.655-4.335 1.275-1.28.62-2.335 1.495-3.1 2.62-.805 1.13-1.165 1.785-1.165 3.495 0 3.345 1.165 5.28 3.28 6.55 2.15 1.31 4.995 1.93 8.605 1.93zm-1.205-51.645c4.7 0 8.674.58 11.884 1.745 3.205 1.165 5.795 2.8 7.69 4.875 1.895 2.075 3.245 4.915 4.045 7.9.84 2.985 1.24 6.26 1.24 9.865v36.615c-2.185.47-5.505 1.015-9.95 1.675-4.445.655-9.44.98-14.985.98-3.68 0-7.07-.365-10.094-1.055-3.065-.69-5.65-1.82-7.84-3.385-2.15-1.565-3.825-3.57-5.065-6.04-1.205-2.475-1.825-5.97-1.825-9.61 0-3.495.695-5.715 2.045-8.12 1.38-2.4 3.24-4.365 5.575-5.895 2.37-1.525 5.065-2.62 8.165-3.275 3.1-.655 6.345-.98 9.7-.98 1.565 0 3.205.11 4.955.29s3.575.51 5.54.985v-2.33c0-1.64-.18-3.205-.58-4.66a9.977 9.977 0 0 0-2.045-3.895c-.985-1.13-2.255-2.005-3.86-2.62-1.606-.62-3.65-1.09-6.09-1.09-3.28 0-6.27.4-9.005.87-2.735.475-4.995 1.02-6.71 1.64l-1.71-11.685c1.785-.62 4.445-1.235 7.875-1.855 3.425-.62 7.105-.945 11.045-.945zm-42.8-6.77c4.774 0 8.68-3.86 8.68-8.63 0-4.765-3.866-8.625-8.68-8.625-4.81 0-8.675 3.86-8.675 8.625 0 4.77 3.9 8.63 8.675 8.63zm7.18 70.425h-14.326v-61.44l14.325-2.255v63.695zm-25.116 0c-23.365.11-23.365-18.855-23.365-21.875l-.04-71.045 14.255-2.26v70.61c0 1.715 0 12.56 9.15 12.595v11.975zm-46.335-31.445c0-6.155-1.35-11.285-3.974-14.85-2.625-3.605-6.305-5.385-11.01-5.385-4.7 0-8.386 1.78-11.006 5.385-2.625 3.6-3.904 8.695-3.904 14.85 0 6.225 1.315 10.405 3.94 14.01 2.625 3.64 6.305 5.425 11.01 5.425 4.7 0 8.385-1.82 11.01-5.425 2.624-3.64 3.934-7.785 3.934-14.01zm14.58-.035c0 4.805-.69 8.44-2.114 12.41-1.42 3.965-3.425 7.35-6.01 10.155-2.59 2.8-5.69 4.985-9.336 6.515-3.644 1.525-9.26 2.4-12.065 2.4-2.81-.035-8.385-.835-11.995-2.4-3.61-1.565-6.71-3.715-9.295-6.515-2.59-2.805-4.594-6.19-6.054-10.155-1.456-3.97-2.185-7.605-2.185-12.41s.654-9.43 2.114-13.36c1.46-3.93 3.5-7.28 6.125-10.08 2.625-2.805 5.76-4.955 9.33-6.48 3.61-1.53 7.585-2.255 11.885-2.255 4.305 0 8.275.76 11.92 2.255 3.65 1.525 6.786 3.675 9.336 6.48 2.584 2.8 4.59 6.15 6.05 10.08 1.53 3.93 2.295 8.555 2.295 13.36zm-107.284 0c0 5.965 1.31 12.59 3.935 15.355 2.625 2.77 6.014 4.15 10.175 4.15 2.26 0 4.41-.325 6.414-.945 2.005-.62 3.606-1.35 4.886-2.22v-35.34c-1.02-.22-5.286-1.095-9.41-1.2-5.175-.15-9.11 1.965-11.88 5.345-2.736 3.39-4.12 9.32-4.12 14.855zm39.625 28.095c0 9.72-2.48 16.815-7.476 21.33-4.99 4.51-12.61 6.77-22.89 6.77-3.755 0-11.555-.73-17.79-2.11l2.295-11.285c5.215 1.09 12.105 1.385 15.715 1.385 5.72 0 9.805-1.165 12.245-3.495 2.445-2.33 3.645-5.785 3.645-10.375v-2.33c-1.42.69-3.28 1.385-5.575 2.115-2.295.69-4.955 1.055-7.95 1.055-3.935 0-7.51-.62-10.75-1.86-3.245-1.235-6.055-3.055-8.35-5.46-2.295-2.4-4.12-5.42-5.395-9.025-1.275-3.605-1.935-10.045-1.935-14.775 0-4.44.695-10.01 2.046-13.725 1.384-3.71 3.35-6.915 6.014-9.57 2.626-2.655 5.835-4.695 9.59-6.19 3.755-1.49 8.16-2.435 12.935-2.435 4.635 0 8.9.58 13.055 1.275 4.155.69 7.69 1.415 10.57 2.215v56.49z"})))),upsellLink:"https://yoa.st/get-algolia-integration"},woocommerce:{name:"WooCommerce",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: WooCommerce; 3: bold close tag. */ +(0,o.__)("Upgrade your %1$s%2$s%3$s SEO","wordpress-seo"),"","WooCommerce",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-woocommerce",logoLink:"https://yoa.st/integrations-logo-woocommerce",slug:"woocommerce",description:(0,o.__)("Improve your technical SEO, meta tags and unlock more SEO ecommerce tools.","wordpress-seo"),isPremium:!1,isNew:!1,isMultisiteAvailable:!0,logo:W,upsellLink:"https://yoa.st/integrations-get-woocommerce"},acf:{name:"ACF",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: ACF; 3: bold close tag. */ +(0,o.__)("Integrate your custom fields and SEO data from %1$s%2$s%3$s","wordpress-seo"),"","ACF",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-acf",logoLink:"https://yoa.st/integrations-logo-acf",slug:"acf",description:(0,o.sprintf)(/* translators: 1: ACF */ +(0,o.__)("Use %s fields to power your meta tags and templates, and analyze all of your content.","wordpress-seo"),"ACF"),isPremium:!1,isNew:!1,isMultisiteAvailable:!0}},te=[(0,t.createElement)(Q,{key:0,integration:ee.elementor,isActive:y(ee.elementor)}),(0,t.createElement)(Q,{key:1,integration:ee.jetpack,isActive:y(ee.jetpack)}),(0,t.createElement)(X,{key:2,integration:ee.algolia,toggleLabel:(0,o.__)("Enable integration","wordpress-seo"),initialActivationState:y(ee.algolia),isNetworkControlEnabled:g(ee.algolia),isMultisiteAvailable:d(ee.algolia),beforeToggle:w,isPrerequisiteActive:Boolean(window.wpseoIntegrationsData.algolia_active)}),(0,t.createElement)(U,{key:3,integration:ee.woocommerce,isActive:Boolean(window.wpseoIntegrationsData.woocommerce_seo_active),isInstalled:Boolean(window.wpseoIntegrationsData.woocommerce_seo_installed),isPrerequisiteActive:Boolean(window.wpseoIntegrationsData.woocommerce_active),upsellLink:window.wpseoIntegrationsData.woocommerce_seo_upsell_url,activationLink:window.wpseoIntegrationsData.woocommerce_seo_activate_url}),(0,t.createElement)(K,{key:4,integration:ee.acf,isActive:Boolean(window.wpseoIntegrationsData.acf_seo_active),isInstalled:Boolean(window.wpseoIntegrationsData.acf_seo_installed),isPrerequisiteActive:Boolean(window.wpseoIntegrationsData.acf_active),installationLink:window.wpseoIntegrationsData.acf_seo_install_url,activationLink:window.wpseoIntegrationsData.acf_seo_activate_url})];var se,ae,ne,re,oe,le,ce,ie,me,pe,he,ye,ge,de,ve,ue,we,fe,Ee;function be(){return be=Object.assign?Object.assign.bind():function(e){for(var t=1;t","
            "),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-tec",logoLink:"https://yoa.st/integrations-logo-tec",slug:"tec",description:(0,o.sprintf)(/* translators: 1: The Events Calendar, 2: Yoast SEO */ +(0,o.__)("%1$s integrates with %2$s's Schema API to get rich snippets for your events!","wordpress-seo"),"The Events Calendar","Yoast SEO"),isPremium:!1,isNew:!1,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",_e({xmlns:"http://www.w3.org/2000/svg",width:280,height:50,fill:"none",viewBox:"0 0 280 119"},e),ie||(ie=t.createElement("path",{fill:"#0F1031",fillRule:"evenodd",d:"M143.062 49.198c-2.457.997-4.731 1.535-6.384 1.446-2.141-.12-3.055-1.064-3.058-1.42-.002-.252.796-1.044 3.261-1.224.386-.027.794-.045 1.214-.045 1.684 0 3.558.277 4.967 1.243m4.595 21.714c-9.008 2.484-18.527.192-24.255-5.844-4.053-4.271-5.412-9.617-3.729-14.665 3.385-10.158 19.608-16.255 29.976-16.255.112 0 .223 0 .333.002 3.863.05 6.539.984 6.983 2.439.248.814-.34 2.24-1.573 3.812-2.175 2.774-5.481 5.288-8.844 7.133-2.132-2.34-5.552-3.404-9.925-3.089-4.869.354-6.585 2.717-6.568 4.81.02 2.282 2.233 4.715 6.425 4.948 2.538.138 5.571-.643 8.616-1.976.447 1.754.309 4.054-.423 6.798a1.783 1.783 0 0 0 3.444.918c.994-3.728 1.068-6.854.225-9.337 3.976-2.232 7.651-5.196 9.855-8.006 2.068-2.636 2.8-5.009 2.177-7.052-.452-1.483-1.517-2.66-3.122-3.494.122-13.393 2.496-22.644 4.634-22.657h.013c.314 0 .739.07 1.259.588 1.737 1.726 3.806 7.392 3.806 24.587 0 16.966-1.452 31.41-19.307 36.34M130.651 31.34c-.002-.045.004-.089-.002-.134l-.024-.198c-.256-3.658.183-6.54 1.298-8.086.554-.767 1.249-1.178 2.188-1.294 1.308-.157 2.372.18 3.266 1.039 1.731 1.664 2.741 5.262 2.645 9.198a49.245 49.245 0 0 0-8.894 3.117 38.759 38.759 0 0 1-.477-3.642m15.354-6.21c.657-.715 1.494-1.062 2.562-1.062 1.698 0 2.435.555 2.843.973.975.999 1.501 2.936 1.573 5.757a23.71 23.71 0 0 0-3.317-.215c-1.609 0-3.363.14-5.193.405-.079-2.585.461-4.692 1.532-5.858m19.667-17.675c-1.07-1.063-2.375-1.624-3.776-1.624h-.032c-4.696.028-6.316 7.035-7.127 12.303a80.347 80.347 0 0 0-.564 4.65c-.07-.078-.138-.159-.212-.233-1.325-1.359-3.141-2.047-5.394-2.047-2.063 0-3.857.765-5.187 2.214a7.868 7.868 0 0 0-1 1.406c-.588-1.547-1.409-2.947-2.533-4.027-1.668-1.604-3.801-2.298-6.171-2.007-1.91.235-3.516 1.184-4.644 2.746-.004.007-.008.015-.013.021-1.953-9.74-5.666-21.503-12.145-20.83-1.595.167-3.003 1.025-4.074 2.48-4.998 6.794-2.653 26.999-.48 37.866a1.784 1.784 0 0 0 2.098 1.398 1.782 1.782 0 0 0 1.398-2.097c-3.639-18.196-2.827-31.408-.144-35.054.63-.858 1.201-1.01 1.575-1.048 3.576-.372 7.982 12.124 9.842 27.896.149 1.953.445 3.782.73 5.203.001.007.004.013.006.02-5.356 3.087-9.776 7.308-11.534 12.584-2.113 6.337-.463 12.988 4.525 18.246 4.871 5.132 12.057 7.938 19.6 7.938 2.714 0 5.475-.363 8.19-1.113 20.246-5.588 21.923-22.003 21.923-39.775 0-15.205-1.544-23.821-4.857-27.116M16.222 96.908H.344A.344.344 0 0 0 0 97.25v2.724c0 .19.154.343.344.343h6.063v17.578c0 .189.154.344.344.344h3.094c.19 0 .344-.155.344-.344v-17.578h6.033c.19 0 .343-.153.343-.343V97.25a.344.344 0 0 0-.343-.344M27.218 102.231c-1.757 0-3.596.733-4.95 1.966v-6.946a.344.344 0 0 0-.343-.344H19.14a.344.344 0 0 0-.344.344v20.645c0 .19.154.344.344.344h2.785c.19 0 .343-.154.343-.344v-10.564c.74-.967 2.188-1.937 3.774-1.937 1.994 0 2.844.86 2.844 2.875v9.626c0 .19.154.344.344.344h2.786c.189 0 .343-.154.343-.344v-10.555c0-3.342-1.778-5.11-5.14-5.11M42.795 105.209c2.618 0 3.98 1.881 4.182 3.769H38.6c.288-1.888 1.686-3.769 4.196-3.769m0-2.978c-4.466 0-7.834 3.515-7.834 8.175 0 4.831 3.324 8.205 8.082 8.205 2.53 0 4.69-.805 6.245-2.326a.342.342 0 0 0 .04-.445l-1.3-1.826a.342.342 0 0 0-.527-.041c-.997 1.024-2.598 1.66-4.18 1.66-3 0-4.395-2.112-4.687-3.955h11.435c.19 0 .343-.154.343-.343v-.682c0-4.959-3.132-8.422-7.617-8.422M72.55 96.908H58.682a.344.344 0 0 0-.344.343v20.645c0 .189.155.344.344.344h13.866c.19 0 .344-.155.344-.344v-2.724a.344.344 0 0 0-.344-.343H62.122v-5.751h10.211c.19 0 .344-.154.344-.343v-2.724a.344.344 0 0 0-.344-.344h-10.21v-5.349h10.427c.19 0 .344-.153.344-.343V97.25a.344.344 0 0 0-.344-.344M89.791 102.603h-3.003a.342.342 0 0 0-.319.216l-4.354 10.93-4.355-10.93a.341.341 0 0 0-.319-.216H74.47a.344.344 0 0 0-.317.474l6.159 14.95a.342.342 0 0 0 .317.212h3.002c.14 0 .264-.083.318-.212l6.16-14.95a.343.343 0 0 0-.318-.474M98.372 105.209c2.618 0 3.979 1.881 4.182 3.769h-8.378c.287-1.888 1.686-3.769 4.196-3.769m0-2.978c-4.466 0-7.834 3.515-7.834 8.175 0 4.831 3.323 8.205 8.082 8.205 2.531 0 4.689-.805 6.245-2.326a.343.343 0 0 0 .039-.445l-1.3-1.826a.342.342 0 0 0-.526-.041c-.997 1.024-2.598 1.66-4.18 1.66-3.002 0-4.395-2.112-4.688-3.955h11.436a.344.344 0 0 0 .343-.343v-.682c0-4.959-3.132-8.422-7.617-8.422M116.983 102.231c-2.476 0-4.218 1.296-4.95 1.964v-1.249a.344.344 0 0 0-.344-.343h-2.785a.344.344 0 0 0-.344.343v14.95c0 .19.154.344.344.344h2.785c.19 0 .344-.154.344-.344v-10.564c.74-.967 2.188-1.937 3.773-1.937 1.967 0 2.845.905 2.845 2.937v9.564c0 .19.153.344.343.344h2.786a.345.345 0 0 0 .344-.344v-10.492c0-3.384-1.778-5.173-5.141-5.173M133.156 115.093a.344.344 0 0 0-.254-.226.358.358 0 0 0-.327.106c-.206.229-.688.475-1.261.475-1.031 0-1.111-1.135-1.111-1.483v-8.23h2.69a.344.344 0 0 0 .343-.343v-2.446a.344.344 0 0 0-.343-.343h-2.69v-3.742a.344.344 0 0 0-.344-.344h-2.785a.344.344 0 0 0-.344.344v3.742h-2.132a.344.344 0 0 0-.344.343v2.446c0 .189.154.343.344.343h2.132v8.849c0 2.597 1.386 4.027 3.903 4.027 1.369 0 2.397-.345 3.146-1.053a.345.345 0 0 0 .089-.36l-.712-2.105ZM142.473 108.616c-1.874-.437-3.201-.825-3.201-1.832 0-.991 1.043-1.606 2.721-1.606 1.677 0 3.31.668 4.161 1.701a.341.341 0 0 0 .265.125l.021-.001a.34.34 0 0 0 .269-.158l1.238-1.951a.345.345 0 0 0-.054-.433c-1.534-1.458-3.584-2.23-5.931-2.23-4.149 0-6.039 2.473-6.039 4.77 0 3.485 3.204 4.227 5.778 4.823 1.834.414 3.353.857 3.353 2.079 0 1.123-1.075 1.793-2.875 1.793-1.996 0-3.867-1.05-4.761-2.025a.344.344 0 0 0-.253-.112l-.028.002a.346.346 0 0 0-.26.155l-1.331 2.043a.343.343 0 0 0 .043.428c1.554 1.585 3.79 2.424 6.466 2.424 3.875 0 6.379-1.933 6.379-4.924 0-3.721-3.304-4.469-5.961-5.071M167.004 100.009c2.162 0 4.185 1.088 5.279 2.84a.351.351 0 0 0 .453.123l2.631-1.393a.344.344 0 0 0 .125-.494c-1.999-2.998-4.854-4.518-8.488-4.518-6.231 0-10.93 4.738-10.93 11.022s4.699 11.022 10.93 11.022c3.596 0 6.45-1.519 8.487-4.515a.346.346 0 0 0-.124-.497l-2.631-1.393a.352.352 0 0 0-.453.123c-1.095 1.752-3.117 2.84-5.279 2.84-3.89 0-6.504-3.046-6.504-7.58 0-4.605 2.553-7.58 6.504-7.58M187.429 112.195v2.302c-.746.925-2.05 1.477-3.494 1.477-1.821 0-3.092-1.081-3.092-2.627 0-1.548 1.271-2.629 3.092-2.629 1.444 0 2.748.552 3.494 1.477m-2.875-9.964c-2.507 0-4.65.856-6.369 2.544a.345.345 0 0 0-.05.428l1.207 1.92a.345.345 0 0 0 .534.059c1.264-1.265 2.653-1.88 4.244-1.88 2.01 0 3.309 1.031 3.309 2.628v1.649c-1.149-.98-2.717-1.498-4.546-1.498-2.67 0-5.544 1.638-5.544 5.234 0 3.44 2.856 5.296 5.544 5.296 1.781 0 3.349-.534 4.546-1.546v.831c0 .19.154.344.344.344h2.785c.19 0 .344-.154.344-.344v-10.09c0-3.543-2.314-5.575-6.348-5.575M198.111 96.908h-2.785a.344.344 0 0 0-.344.343v20.645c0 .189.154.344.344.344h2.785c.19 0 .344-.155.344-.344V97.251a.344.344 0 0 0-.344-.344M209.409 105.209c2.618 0 3.979 1.881 4.182 3.769h-8.378c.288-1.888 1.686-3.769 4.196-3.769m0-2.978c-4.466 0-7.833 3.515-7.833 8.175 0 4.831 3.323 8.205 8.081 8.205 2.531 0 4.69-.805 6.245-2.326a.343.343 0 0 0 .039-.445l-1.3-1.826a.342.342 0 0 0-.253-.144.369.369 0 0 0-.273.103c-.997 1.024-2.598 1.66-4.179 1.66-3.002 0-4.395-2.112-4.688-3.955h11.435c.19 0 .343-.154.343-.343v-.682c0-4.959-3.132-8.422-7.617-8.422M228.019 102.231c-2.476 0-4.217 1.296-4.949 1.964v-1.249a.344.344 0 0 0-.344-.343h-2.785a.344.344 0 0 0-.344.343v14.95c0 .19.154.344.344.344h2.785c.19 0 .344-.154.344-.344v-10.564c.74-.967 2.188-1.937 3.773-1.937 1.967 0 2.844.905 2.844 2.937v9.564c0 .19.154.344.344.344h2.786a.344.344 0 0 0 .343-.344v-10.492c0-3.384-1.777-5.173-5.141-5.173M247.307 107.352v6.17c-.775 1.134-2.335 1.926-3.804 1.926-2.497 0-4.175-2.014-4.175-5.011 0-3.016 1.678-5.042 4.175-5.042 1.432 0 3.028.822 3.804 1.957m3.129-10.445h-2.785a.344.344 0 0 0-.344.344v6.935c-1.238-1.262-2.846-1.955-4.546-1.955-4.205 0-7.03 3.298-7.03 8.206 0 4.889 2.825 8.174 7.03 8.174 1.674 0 3.321-.702 4.546-1.93v1.215c0 .189.154.344.344.344h2.785c.19 0 .344-.155.344-.344V97.251a.344.344 0 0 0-.344-.344M264.084 112.195v2.302c-.746.925-2.05 1.477-3.495 1.477-1.82 0-3.091-1.081-3.091-2.627 0-1.548 1.271-2.629 3.091-2.629 1.445 0 2.749.552 3.495 1.477m-2.875-9.964c-2.507 0-4.65.856-6.37 2.544a.345.345 0 0 0-.049.428l1.207 1.92a.343.343 0 0 0 .533.059c1.265-1.265 2.653-1.88 4.245-1.88 2.01 0 3.309 1.031 3.309 2.628v1.649c-1.149-.98-2.718-1.498-4.547-1.498-2.67 0-5.543 1.638-5.543 5.234 0 3.44 2.856 5.296 5.543 5.296 1.781 0 3.35-.534 4.547-1.546v.831c0 .19.154.344.344.344h2.785c.19 0 .344-.154.344-.344v-10.09c0-3.543-2.314-5.575-6.348-5.575M279.656 102.262c-1.614 0-3.262.748-4.546 2.057v-1.373a.344.344 0 0 0-.344-.343h-2.786a.344.344 0 0 0-.343.343v14.95c0 .189.154.343.343.343h2.786a.344.344 0 0 0 .344-.343v-10.304c.645-1.006 2.349-1.919 3.587-1.919.34 0 .629.028.885.085a.343.343 0 0 0 .418-.335v-2.817a.344.344 0 0 0-.344-.344",clipRule:"evenodd"})))},{name:"Seriously Simple Podcasting",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: bold close tag. */ +(0,o.__)("Get %1$srich results for your podcast%2$s in Google search","wordpress-seo"),"",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-ssp",logoLink:"https://yoa.st/integrations-logo-ssp",slug:"ssp",description:(0,o.sprintf)(/* translators: 1: Seriously Simple Podcasting, 2: Yoast SEO */ +(0,o.__)("%1$s integrates with %2$s's Schema API to get rich snippets for your podcasts!","wordpress-seo"),"Seriously Simple Podcasting","Yoast SEO"),isPremium:!1,isNew:!0,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",be({xmlns:"http://www.w3.org/2000/svg",width:280,height:50},e),se||(se=t.createElement("path",{fill:"#2a2a2a",d:"M107.367 25c0 12.905-10.462 23.367-23.367 23.367-12.905 0-23.367-10.462-23.367-23.367C60.633 12.095 71.095 1.633 84 1.633c12.905 0 23.367 10.462 23.367 23.367Z"})),ae||(ae=t.createElement("path",{fill:"#2a2a2a",fillRule:"evenodd",d:"M84 50c13.807 0 25-11.193 25-25S97.807 0 84 0 59 11.193 59 25s11.193 25 25 25Zm0-1.02c13.243 0 23.98-10.737 23.98-23.98 0-13.244-10.737-23.98-23.98-23.98-13.244 0-23.98 10.736-23.98 23.98 0 13.243 10.736 23.98 23.98 23.98Z"})),ne||(ne=t.createElement("path",{fill:"#fff",fillRule:"evenodd",d:"M72.282 16.767c.295-.179.675-.41 1.106-.338.235.039.486.229.774.448.463.35 1.023.776 1.777.776.87 0 1.327-.206 1.593-.325.108-.049.184-.083.244-.083.204 0 .51.306.102.612-.068.05-.152.12-.252.204-.507.422-1.43 1.19-2.708 1.53-.243.066-.468.12-.675.17-1.102.267-1.72.417-1.978 1.361-.306 1.123-.102 5.613 3.674 5.613 1.564 0 2.795-.613 4.237-1.33 2.04-1.016 4.503-2.242 8.926-2.242 7.551 0 9.082 6.429 9.082 9.694 0 3.265-3.674 7.755-10 7.755-4.45 0-5.966-1.499-6.753-2.277-.108-.107-.202-.2-.288-.274.51 1.327 3.061 4.163 7.959 4.082-.068.374-1.755 1.122-7.96 1.122-7.754 0-13.775-6.938-13.775-13.163 0-4.43 1.138-7 1.793-8.481.266-.6.452-1.02.452-1.315 0-.95-1.062-1.9-2.033-2.769l-.212-.19c-1.02-.918-1.224-2.653-1.122-2.96.102-.305.51-.407.612.205.102.612 1.123 1.224 1.837 1.224.292 0 .448-.034.6-.067.219-.048.43-.095 1.033-.035.51.051 1.126.697 1.482 1.07l.15.155c.09-.03.2-.097.323-.172Zm9.473 18.54a.714.714 0 1 0 0-1.43.714.714 0 0 0 0 1.43Z"})),re||(re=t.createElement("path",{fill:"#cf3529",d:"M78.184 12.449c-.408.317-.47 1.124-.05 1.536.42.476.968.467 1.535.05 3.82-2.81 13.923-2.708 18.31-.05.498.3 1.091.374 1.472-.013l.031-.033c.412-.42.436-1.176-.077-1.534-5.2-3.63-16.63-3.527-21.221.044Z"})),oe||(oe=t.createElement("path",{fill:"#cf3529",d:"M80.633 16.122c-.613.307-.613 1.02-.306 1.531.306.51.95.52 1.53.204 4.318-1.928 9.46-2.147 13.878.102.493.251 1.326.306 1.632-.306.293-.584.306-1.122-.408-1.53-4.376-2.5-11.34-2.792-16.326 0Z"})),le||(le=t.createElement("path",{fill:"#cf3529",d:"M82.878 20.102c-.613.306-.715.97-.409 1.429.477.714 1.123.494 1.673.292 3.736-1.377 5.776-1.313 9.348-.05.724.255 1.224.268 1.632-.242.307-.51.245-1.2-.51-1.531-4.384-1.927-8.061-1.939-11.734.102Z"})),ce||(ce=t.createElement("path",{fillRule:"evenodd",d:"M208.695 24.455V13.416h1.504l.098.752c.341-.31.714-.538 1.119-.688.405-.149.885-.224 1.44-.224 1.087 0 1.936.297 2.544.889.608.592.912 1.57.912 2.935s-.315 2.387-.945 3.065c-.63.677-1.486 1.015-2.574 1.015-.917 0-1.703-.214-2.354-.64v3.935h-1.744Zm-33.47-.639c-.576 0-1.068-.075-1.473-.224v-1.295c.181.064.35.105.504.127.155.021.313.031.473.031.33 0 .596-.051.798-.158.203-.107.383-.275.537-.504.155-.23.323-.526.504-.889l-3.377-7.488H175l2.432 5.633 2.464-5.633h1.792l-3.088 7.152c-.267.64-.552 1.203-.856 1.688-.304.485-.657.867-1.056 1.144-.4.278-.887.416-1.463.416Zm-23.649-2.656c-1.365 0-2.365-.34-3-1.023-.635-.683-.953-1.66-.953-2.93 0-1.27.321-2.245.961-2.928.64-.682 1.637-1.023 2.992-1.023 1.366 0 2.368.34 3.008 1.023.64.683.96 1.659.96 2.928 0 1.27-.318 2.247-.952 2.93-.635.682-1.64 1.023-3.016 1.023Zm7.44 0c-.907 0-1.603-.25-2.088-.752-.486-.501-.729-1.238-.729-2.209v-4.783h1.744v4.783c0 .566.139.982.416 1.248.278.267.706.4 1.282.4.426 0 .82-.08 1.183-.24a3.07 3.07 0 0 0 .944-.638v-5.553h1.728V21h-1.584l-.08-.783c-.341.266-.747.49-1.217.672-.47.181-1.002.271-1.6.271Zm8.08 0a9.626 9.626 0 0 1-1.496-.111 7.027 7.027 0 0 1-1.176-.274v-1.47c.362.138.762.243 1.199.318.437.075.853.113 1.248.113.597 0 1.025-.053 1.281-.16.256-.106.383-.315.383-.625 0-.224-.076-.4-.23-.527-.155-.128-.386-.245-.69-.352-.304-.106-.69-.235-1.16-.384a7.635 7.635 0 0 1-1.168-.489 2.035 2.035 0 0 1-.767-.68c-.182-.277-.272-.64-.272-1.087 0-.694.25-1.23.752-1.608.501-.378 1.307-.568 2.416-.568.437 0 .853.032 1.248.096s.73.144 1.008.24v1.457a5.193 5.193 0 0 0-.984-.274 5.69 5.69 0 0 0-1-.095c-.555 0-.974.048-1.256.144-.283.096-.424.288-.424.576 0 .3.146.509.44.631.293.123.765.29 1.415.504.598.181 1.072.374 1.424.576.352.203.607.446.762.729.154.283.23.648.23 1.096 0 .746-.27 1.303-.814 1.671-.544.368-1.335.553-2.37.553Zm5.824 0c-.619 0-1.088-.153-1.408-.457-.32-.304-.48-.808-.48-1.512v-8.974h1.743v8.814c0 .299.054.503.16.61.107.106.268.16.481.16.256 0 .502-.034.736-.098v1.266a2.857 2.857 0 0 1-.584.15 4.627 4.627 0 0 1-.648.041Zm15.04 0c-1.332 0-2.405-.17-3.216-.512v-1.537c.459.171.953.31 1.48.416.529.107 1.054.16 1.577.16.821 0 1.437-.095 1.847-.287.411-.192.616-.576.616-1.152 0-.352-.086-.634-.256-.848-.17-.213-.453-.398-.848-.552-.395-.155-.94-.318-1.633-.489-1.109-.288-1.888-.653-2.336-1.095-.448-.443-.671-1.054-.671-1.832 0-.907.33-1.615.992-2.127.661-.512 1.649-.77 2.96-.77.598 0 1.16.044 1.688.13.528.084.942.18 1.24.286v1.537c-.81-.31-1.706-.465-2.687-.465-.768 0-1.366.102-1.793.305-.427.203-.64.57-.64 1.104 0 .309.075.56.224.752.15.192.407.357.775.496.368.138.879.294 1.53.465.842.213 1.495.466 1.959.76.464.293.79.633.976 1.023.187.39.28.83.28 1.32 0 .907-.336 1.62-1.008 2.137-.672.517-1.69.775-3.055.775Zm30.976 0c-.62 0-1.089-.153-1.409-.457-.32-.304-.478-.808-.478-1.512v-8.974h1.744v8.814c0 .299.052.503.158.61.107.106.267.16.48.16.257 0 .502-.034.737-.098v1.266a2.858 2.858 0 0 1-.584.15 4.627 4.627 0 0 1-.648.041Zm5.472 0c-1.322 0-2.347-.326-3.072-.976-.725-.651-1.088-1.649-1.088-2.993 0-1.216.31-2.174.928-2.878.618-.705 1.558-1.057 2.816-1.057 1.152 0 2.018.301 2.6.904.581.603.873 1.379.873 2.328v1.408h-5.553c.085.736.353 1.243.8 1.52.449.277 1.13.416 2.048.416.384 0 .778-.037 1.183-.111a5.763 5.763 0 0 0 1.057-.29v1.282a5.01 5.01 0 0 1-1.176.336 8.517 8.517 0 0 1-1.416.111ZM139.561 21v-7.584h1.6l.095.88a6.995 6.995 0 0 1 1.297-.64 7.164 7.164 0 0 1 1.486-.4v.97l.098-.81h2.734V21h-1.742v-6.256h-1.152l.017-.15a9.345 9.345 0 0 0-.922.222c-.346.102-.675.214-.984.336-.31.123-.57.247-.783.375V21h-1.744Zm53.584 0v-6.256h-1.153l.16-1.328h2.737V21h-1.744Zm2.816 0v-7.584h1.6l.08.8a4.552 4.552 0 0 1 1.23-.704c.448-.171.93-.256 1.441-.256.545 0 .968.088 1.272.264.304.176.535.419.695.728a4.714 4.714 0 0 1 1.217-.713c.459-.187 1.009-.28 1.649-.28.874 0 1.52.225 1.935.673.416.448.623 1.136.623 2.064V21h-1.71v-4.832c0-.587-.125-.998-.37-1.232-.245-.235-.644-.352-1.2-.352-.362 0-.705.063-1.03.191-.326.128-.606.32-.84.577.032.117.052.24.062.369.01.128.018.266.018.416V21h-1.617v-4.816c0-.555-.095-.96-.287-1.215-.192-.256-.555-.385-1.088-.385-.374 0-.729.088-1.065.264a4.223 4.223 0 0 0-.904.632V21h-1.711Zm16.383-1.152c1.472 0 2.209-.928 2.209-2.784 0-.896-.166-1.533-.496-1.912-.331-.378-.886-.568-1.664-.568-.78 0-1.43.267-1.954.8v3.792c.246.202.52.365.825.488.304.123.664.184 1.08.184Zm-60.768-.16c.8 0 1.367-.195 1.703-.584.336-.39.504-1.022.504-1.897s-.168-1.503-.504-1.887c-.336-.384-.903-.576-1.703-.576-.79 0-1.351.192-1.687.576-.336.384-.504 1.012-.504 1.887s.168 1.507.504 1.897c.336.389.898.584 1.687.584Zm70.336-2.928h4.016v-.528c0-.522-.144-.93-.432-1.224-.288-.294-.774-.44-1.457-.44-.81 0-1.368.176-1.672.528-.304.352-.455.906-.455 1.664Zm-76.928-4.928v-1.44h1.905v1.44h-1.905Zm48.016 0v-1.44h1.904v1.44H193Zm-57.232 9.328c-1.323 0-2.347-.325-3.072-.976-.725-.65-1.088-1.648-1.088-2.992 0-1.216.31-2.176.928-2.88.619-.704 1.557-1.056 2.816-1.056 1.152 0 2.019.301 2.6.904s.872 1.379.872 2.328v1.408h-5.552c.085.736.352 1.243.8 1.52.448.277 1.13.416 2.048.416a6.53 6.53 0 0 0 1.184-.112c.405-.075.757-.17 1.056-.288v1.28c-.341.15-.733.261-1.176.336a8.515 8.515 0 0 1-1.416.112Zm-2.496-4.4h4.016v-.528c0-.523-.144-.93-.432-1.224-.288-.293-.773-.44-1.456-.44-.81 0-1.368.176-1.672.528-.304.352-.456.907-.456 1.664Zm-6.144 4.4c-1.333 0-2.405-.17-3.216-.512v-1.536c.459.17.952.31 1.48.416.528.107 1.053.16 1.576.16.821 0 1.437-.096 1.848-.288.41-.192.616-.576.616-1.152 0-.352-.085-.635-.256-.848-.17-.213-.453-.397-.848-.552-.395-.155-.939-.317-1.632-.488-1.11-.288-1.888-.653-2.336-1.096-.448-.443-.672-1.053-.672-1.832 0-.907.33-1.616.992-2.128.661-.512 1.648-.768 2.96-.768.597 0 1.16.043 1.688.128s.941.181 1.24.288v1.536c-.81-.31-1.707-.464-2.688-.464-.768 0-1.365.101-1.792.304-.427.203-.64.57-.64 1.104 0 .31.075.56.224.752.15.192.408.357.776.496.368.139.877.293 1.528.464.843.213 1.496.467 1.96.76.464.293.79.635.976 1.024.187.39.28.83.28 1.32 0 .907-.336 1.619-1.008 2.136-.672.517-1.69.776-3.056.776ZM206.4 38.816a13.94 13.94 0 0 1-1.697-.103 6.935 6.935 0 0 1-1.44-.313v-1.343c.427.138.919.245 1.473.32.555.075 1.083.111 1.584.111.768 0 1.328-.043 1.68-.129.352-.085.527-.277.527-.576 0-.224-.085-.38-.256-.47-.17-.091-.494-.137-.974-.137h-2.049c-1.376 0-2.064-.485-2.064-1.455 0-.31.09-.599.271-.866.181-.266.47-.468.865-.607-.437-.213-.76-.507-.968-.88-.208-.374-.313-.822-.313-1.345 0-.97.292-1.674.873-2.11.581-.438 1.453-.657 2.615-.657.246 0 .503.02.77.056.267.038.474.072.623.104h2.783l-.047 1.137h-1.279c.203.17.351.382.447.638.096.256.145.534.145.832 0 .811-.246 1.449-.737 1.913-.49.464-1.232.697-2.224.697-.17 0-.329-.01-.473-.026-.144-.016-.3-.033-.47-.054-.32.032-.61.117-.866.256-.256.138-.383.324-.383.558 0 .16.064.277.192.346.128.07.342.103.64.103h2.127c.758 0 1.342.163 1.752.489.411.325.618.797.618 1.416 0 .746-.324 1.282-.97 1.607-.645.325-1.57.488-2.775.488Zm-23.44-2.656a9.626 9.626 0 0 1-1.495-.111 7.056 7.056 0 0 1-1.178-.274v-1.47c.363.138.764.243 1.201.318.438.075.854.113 1.248.113.598 0 1.024-.053 1.28-.16.256-.106.384-.315.384-.625 0-.224-.077-.4-.232-.527-.155-.128-.384-.245-.688-.352-.304-.106-.69-.235-1.16-.385a7.634 7.634 0 0 1-1.168-.488 2.035 2.035 0 0 1-.767-.68c-.182-.277-.274-.64-.274-1.087 0-.694.251-1.23.752-1.608.502-.378 1.307-.568 2.416-.568.438 0 .854.032 1.248.096.395.064.73.144 1.008.24v1.457a5.173 5.173 0 0 0-.982-.274 5.69 5.69 0 0 0-1-.095c-.555 0-.973.048-1.256.144-.283.096-.426.288-.426.576 0 .3.148.509.441.631.294.123.766.29 1.417.504.597.181 1.071.374 1.423.576.352.203.605.446.76.729.155.283.233.648.233 1.096 0 .746-.273 1.303-.817 1.671-.544.368-1.332.553-2.367.553Zm6.593 0c-.81 0-1.417-.216-1.817-.648-.4-.432-.6-1.021-.6-1.768v-3.969h-1.12v-1.359h1.12v-1.744l1.727-.527v2.271h2.018l-.113 1.36h-1.905v3.872c0 .438.102.744.305.92.203.176.533.264.992.264.288 0 .592-.053.912-.16v1.232c-.416.171-.922.256-1.52.256Zm2.672-.16v-6.256h-1.153l.16-1.328h2.737V36h-1.744Zm2.814 0v-7.584h1.602l.08.8a4.863 4.863 0 0 1 1.222-.68c.475-.188 1-.28 1.577-.28.98 0 1.696.229 2.144.687.448.459.672 1.174.672 2.145V36h-1.729v-4.832c0-.587-.119-.998-.359-1.232-.24-.235-.69-.352-1.352-.352-.394 0-.781.08-1.16.24-.378.16-.697.367-.953.623V36h-1.744Zm11.488-3.473c.694 0 1.178-.117 1.45-.351.272-.235.408-.634.408-1.2 0-.565-.136-.976-.408-1.232-.272-.256-.756-.385-1.45-.385-.65 0-1.125.124-1.423.37-.3.245-.448.66-.448 1.248 0 .544.141.938.424 1.183.283.245.765.367 1.447.367Zm-14.447-5.695v-1.44h1.904v1.44h-1.904Zm-17.072 9.328c-.48 0-.925-.085-1.336-.256a2.22 2.22 0 0 1-.984-.776c-.245-.347-.368-.776-.368-1.288 0-.725.248-1.31.744-1.752.496-.443 1.261-.664 2.296-.664h2.432v-.336c0-.363-.056-.65-.168-.864-.112-.213-.315-.368-.608-.464-.293-.096-.723-.144-1.288-.144-.896 0-1.733.133-2.512.4V28.72c.341-.139.757-.25 1.248-.336a9.251 9.251 0 0 1 1.584-.128c1.11 0 1.955.224 2.536.672.581.448.872 1.179.872 2.192V36h-1.488l-.112-.768a3.11 3.11 0 0 1-1.144.688c-.453.16-1.021.24-1.704.24Zm.464-1.248c.523 0 .979-.088 1.368-.264.39-.176.707-.413.952-.712v-1.328h-2.4c-.512 0-.883.099-1.112.296-.23.197-.344.499-.344.904 0 .395.133.677.4.848.267.17.645.256 1.136.256Zm-5.728 1.248c-1.333 0-2.341-.339-3.024-1.016-.683-.677-1.024-1.656-1.024-2.936 0-1.333.376-2.325 1.128-2.976.752-.65 1.757-.976 3.016-.976.523 0 .963.037 1.32.112.357.075.701.192 1.032.352v1.296c-.555-.277-1.227-.416-2.016-.416-.875 0-1.547.195-2.016.584-.47.39-.704 1.064-.704 2.024 0 .907.208 1.57.624 1.992.416.421 1.104.632 2.064.632.757 0 1.445-.144 2.064-.432v1.328a6.149 6.149 0 0 1-1.128.32c-.4.075-.845.112-1.336.112Zm-8.784 0c-.683 0-1.285-.117-1.808-.352-.523-.235-.928-.624-1.216-1.168-.288-.544-.432-1.275-.432-2.192 0-.907.155-1.672.464-2.296.31-.624.739-1.096 1.288-1.416.55-.32 1.17-.48 1.864-.48.459 0 .867.053 1.224.16.357.107.701.272 1.032.496v-3.696h1.744V36h-1.488l-.112-.752c-.341.31-.715.539-1.12.688-.405.15-.885.224-1.44.224Zm.464-1.312c.779 0 1.43-.267 1.952-.8v-3.792c-.501-.448-1.13-.672-1.888-.672-.736 0-1.29.245-1.664.736-.373.49-.56 1.205-.56 2.144 0 .907.173 1.53.52 1.872.347.341.893.512 1.64.512Zm-8.304 1.312c-1.365 0-2.365-.341-3-1.024-.635-.683-.952-1.659-.952-2.928 0-1.27.32-2.245.96-2.928.64-.683 1.637-1.024 2.992-1.024 1.365 0 2.368.341 3.008 1.024.64.683.96 1.659.96 2.928 0 1.27-.317 2.245-.952 2.928-.635.683-1.64 1.024-3.016 1.024Zm0-1.472c.8 0 1.368-.195 1.704-.584.336-.39.504-1.021.504-1.896s-.168-1.504-.504-1.888c-.336-.384-.904-.576-1.704-.576-.79 0-1.352.192-1.688.576-.336.384-.504 1.013-.504 1.888s.168 1.507.504 1.896c.336.39.899.584 1.688.584ZM141.008 36V25.696h4.592c.79 0 1.44.15 1.952.448.512.299.89.707 1.136 1.224.245.517.368 1.107.368 1.768 0 1.024-.317 1.845-.952 2.464s-1.49.928-2.568.928h-2.784V36Zm1.744-4.848h2.464c.693 0 1.216-.181 1.568-.544.352-.363.528-.853.528-1.472 0-.661-.168-1.173-.504-1.536-.336-.363-.84-.544-1.512-.544h-2.544Z"})))},{name:"Easy Digital Downloads",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: bold close tag. */ +(0,o.__)("Get %1$srich results for your digital products%2$s in Google search","wordpress-seo"),"",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-edd",logoLink:"https://yoa.st/integrations-logo-edd",upsellLink:"https://yoa.st/get-edd-integration",slug:"edd",description:(0,o.sprintf)(/* translators: 1: Easy Digital Downloads, 2: Yoast SEO */ +(0,o.__)("%2$s integrates %1$s' Schema output into its own to get rich snippets for your digital products!","wordpress-seo"),"Easy Digital Downloads","Yoast SEO"),isPremium:!0,isNew:!0,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",Me({xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",width:130,height:60,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinejoin:"round",strokeMiterlimit:1.41421},viewBox:"0 0 339 157"},e),t.createElement("path",{d:"M206.613 15.378C197.114 5.876 183.985 0 169.488 0c-14.501 0-27.628 5.876-37.13 15.378-9.504 9.502-15.38 22.631-15.38 37.13 0 14.499 5.876 27.628 15.378 37.13 9.502 9.504 22.631 15.378 37.132 15.378 14.499 0 27.628-5.879 37.127-15.378 9.502-9.504 15.378-22.631 15.378-37.13 0-14.499-5.878-27.628-15.38-37.13Zm-1.732 72.524c-9.057 9.058-21.572 14.661-35.395 14.661-13.823 0-26.339-5.603-35.397-14.661s-14.661-21.572-14.661-35.394c0-13.823 5.603-26.337 14.661-35.395 9.058-9.058 21.572-14.661 35.395-14.661 13.823 0 26.337 5.603 35.395 14.661 9.058 9.058 14.66 21.572 14.66 35.395.002 13.822-5.601 26.337-14.658 35.394Z",style:{fill:"#35495c",fillRule:"nonzero"}}),t.createElement("path",{d:"M214.656 52.07c-.236-24.746-20.367-44.734-45.168-44.734-24.803 0-44.936 19.99-45.168 44.736l20.712-20.712 6.946 6.946-15.157 15.157h65.333l-15.157-15.157 6.946-6.946 20.713 20.71Zm-45.17-7.762L150.24 24.112h12.79v-9.955c0-2.584 2.906-4.702 6.456-4.702 3.55 0 6.456 2.116 6.456 4.702v9.955h12.79l-19.246 20.196ZM175.1 77.93c-1.026-.667-2.326-1.267-3.894-1.788-1.199-.413-2.186-.803-2.956-1.179-.764-.372-1.328-.785-1.689-1.221-.37-.444-.543-.976-.543-1.586 0-.488.147-.952.462-1.391.309-.438.792-.803 1.448-1.079.663-.28 1.507-.431 2.555-.436.844.004 1.615.072 2.312.193.689.125 1.3.276 1.823.449.53.179.958.348 1.295.507l1.166-3.516c-.705-.354-1.588-.648-2.66-.886-.91-.201-1.952-.317-3.135-.357v-3.638h-3.205v3.82c-.514.083-1.007.195-1.473.33-1.179.348-2.192.831-3.03 1.462-.831.628-1.475 1.363-1.917 2.205-.444.842-.663 1.77-.672 2.768.006 1.155.309 2.173.906 3.052.597.88 1.448 1.643 2.547 2.297 1.094.652 2.4 1.214 3.91 1.687 1.133.363 2.057.742 2.761 1.131.705.387 1.221.814 1.542 1.28.328.466.49 1.006.484 1.61 0 .663-.195 1.238-.575 1.735-.376.49-.932.875-1.663 1.148-.731.276-1.623.411-2.669.42a15.281 15.281 0 0 1-2.481-.217 15.934 15.934 0 0 1-2.24-.562 11.92 11.92 0 0 1-1.838-.766l-1.127 3.662c.51.28 1.146.532 1.925.764.779.234 1.636.42 2.575.562.932.138 1.89.208 2.864.217l.171-.002v3.761h3.205v-4.063a12.43 12.43 0 0 0 1.162-.282c1.286-.387 2.354-.915 3.199-1.591.851-.67 1.481-1.446 1.899-2.321a6.4 6.4 0 0 0 .624-2.787c0-1.155-.247-2.177-.757-3.056-.515-.887-1.281-1.664-2.311-2.336ZM3.999 141.181c0 .701.099 1.38.298 2.034a4.99 4.99 0 0 0 .894 1.719c.397.491.9.883 1.508 1.175.608.293 1.333.439 2.175.439 1.169 0 2.11-.251 2.824-.754.713-.502 1.245-1.256 1.596-2.262h3.788a7.544 7.544 0 0 1-1.087 2.631 7.563 7.563 0 0 1-1.859 1.946 8.036 8.036 0 0 1-2.438 1.193 9.852 9.852 0 0 1-2.824.403c-1.427 0-2.689-.234-3.788-.701a7.828 7.828 0 0 1-2.789-1.965c-.76-.842-1.333-1.847-1.719-3.016-.385-1.17-.578-2.456-.578-3.859 0-1.286.205-2.508.614-3.665a9.387 9.387 0 0 1 1.754-3.052 8.378 8.378 0 0 1 2.754-2.087c1.075-.514 2.291-.772 3.648-.772 1.426 0 2.706.298 3.841.894a8.437 8.437 0 0 1 2.824 2.368c.748.982 1.292 2.111 1.631 3.385.339 1.275.427 2.59.263 3.946H3.999Zm9.33-2.631a6.468 6.468 0 0 0-.404-1.824 4.885 4.885 0 0 0-.912-1.526 4.534 4.534 0 0 0-1.403-1.052 4.132 4.132 0 0 0-1.841-.404c-.702 0-1.339.123-1.912.369a4.369 4.369 0 0 0-1.473 1.017 5.038 5.038 0 0 0-.982 1.526 5.306 5.306 0 0 0-.403 1.894h9.33ZM35.567 145.18c0 .491.064.842.193 1.052.128.21.38.316.754.316h.421c.163 0 .351-.023.561-.07v2.771c-.14.047-.322.099-.544.158-.223.058-.45.111-.684.158a7.387 7.387 0 0 1-1.298.14c-.819 0-1.497-.164-2.034-.491-.538-.327-.889-.9-1.052-1.719-.795.771-1.771 1.333-2.929 1.683-1.157.351-2.274.526-3.35.526a8.215 8.215 0 0 1-2.35-.333 6.15 6.15 0 0 1-1.982-.982 4.705 4.705 0 0 1-1.368-1.649c-.339-.666-.509-1.444-.509-2.333 0-1.122.204-2.034.614-2.736a4.557 4.557 0 0 1 1.613-1.649 7.278 7.278 0 0 1 2.245-.859c.83-.175 1.666-.31 2.508-.404.725-.14 1.415-.239 2.069-.298a9.71 9.71 0 0 0 1.736-.298c.503-.14.9-.356 1.193-.649.292-.292.438-.73.438-1.315 0-.514-.123-.935-.368-1.263a2.479 2.479 0 0 0-.912-.754 3.972 3.972 0 0 0-1.21-.351 9.788 9.788 0 0 0-1.263-.088c-1.122 0-2.047.234-2.771.702-.725.468-1.135 1.193-1.228 2.175h-3.999c.07-1.169.351-2.14.842-2.911a5.816 5.816 0 0 1 1.877-1.859 7.688 7.688 0 0 1 2.578-.982 15.35 15.35 0 0 1 2.946-.281c.888 0 1.765.094 2.631.281a7.5 7.5 0 0 1 2.333.912 5.065 5.065 0 0 1 1.666 1.631c.421.666.631 1.479.631 2.438v9.331h.002Zm-3.998-5.052c-.608.398-1.356.638-2.245.719-.889.082-1.777.205-2.666.369-.421.07-.83.17-1.228.298a3.69 3.69 0 0 0-1.052.526 2.316 2.316 0 0 0-.719.877c-.175.363-.263.801-.263 1.315 0 .445.128.819.386 1.123.257.304.567.543.93.719.362.175.759.298 1.193.368.432.071.824.105 1.175.105.444 0 .924-.058 1.438-.175.514-.117 1-.316 1.456-.596.456-.28.836-.636 1.14-1.07.304-.432.456-.964.456-1.596v-2.982h-.001ZM42.898 143.39c.117 1.17.561 1.988 1.333 2.456.772.468 1.695.701 2.771.701.374 0 .801-.029 1.28-.088.479-.058.93-.169 1.351-.333a2.531 2.531 0 0 0 1.035-.719c.268-.316.391-.731.368-1.245-.024-.514-.21-.935-.561-1.263-.351-.327-.801-.59-1.35-.789a13.15 13.15 0 0 0-1.877-.509 85.428 85.428 0 0 1-2.14-.456 19.787 19.787 0 0 1-2.157-.596 6.942 6.942 0 0 1-1.859-.947 4.36 4.36 0 0 1-1.315-1.526c-.328-.619-.491-1.386-.491-2.298 0-.982.239-1.806.719-2.473a5.506 5.506 0 0 1 1.824-1.613 7.934 7.934 0 0 1 2.455-.859c.9-.163 1.759-.245 2.578-.245.935 0 1.829.1 2.683.298a7.311 7.311 0 0 1 2.315.965 5.684 5.684 0 0 1 1.719 1.736c.456.714.742 1.573.86 2.578h-4.174c-.188-.958-.626-1.601-1.316-1.929-.69-.327-1.479-.491-2.368-.491-.281 0-.614.024-.999.07a4.647 4.647 0 0 0-1.087.263 2.29 2.29 0 0 0-.859.561c-.234.246-.351.567-.351.965 0 .491.169.889.509 1.193.339.304.783.556 1.333.754.549.199 1.175.368 1.876.508.702.14 1.426.293 2.175.456.724.164 1.438.363 2.14.596.701.234 1.327.55 1.877.947a4.6 4.6 0 0 1 1.333 1.508c.339.609.508 1.356.508 2.245 0 1.076-.246 1.988-.737 2.736a5.805 5.805 0 0 1-1.912 1.824 8.677 8.677 0 0 1-2.613 1.017c-.959.21-1.906.316-2.841.316-1.146 0-2.204-.129-3.174-.386-.971-.257-1.812-.649-2.525-1.175a5.66 5.66 0 0 1-1.684-1.964c-.409-.784-.626-1.713-.649-2.789h3.997ZM56.086 131.079h4.385l4.735 13.539h.07l4.595-13.539h4.174l-7.05 19.116a142.32 142.32 0 0 1-.965 2.35 8.449 8.449 0 0 1-1.157 1.982 5 5 0 0 1-1.701 1.368c-.678.339-1.543.509-2.596.509-.936 0-1.859-.07-2.771-.21v-3.368c.327.047.643.1.947.158.304.058.619.088.947.088.467 0 .853-.058 1.157-.175a1.93 1.93 0 0 0 .754-.509c.198-.223.368-.486.509-.79.14-.304.268-.655.386-1.052l.456-1.403-6.875-18.064ZM90.18 149.213v-3.438h-.07a5.2 5.2 0 0 1-1.035 1.614 6.68 6.68 0 0 1-1.561 1.245 8.07 8.07 0 0 1-1.877.789 7.308 7.308 0 0 1-1.982.281c-1.38 0-2.578-.251-3.595-.754a7.19 7.19 0 0 1-2.543-2.069c-.679-.877-1.181-1.894-1.508-3.052a13.386 13.386 0 0 1-.491-3.666c0-1.286.163-2.508.491-3.665.327-1.157.83-2.175 1.508-3.052a7.37 7.37 0 0 1 2.543-2.087c1.017-.514 2.215-.772 3.595-.772.678 0 1.339.082 1.982.245a6.668 6.668 0 0 1 1.807.754 6.366 6.366 0 0 1 1.491 1.245 5.244 5.244 0 0 1 1 1.719h.07v-10.382h2.21v25.044H90.18v.001Zm-12.119-6.261a7.713 7.713 0 0 0 1.052 2.473 5.783 5.783 0 0 0 1.842 1.771c.748.456 1.649.684 2.701.684 1.169 0 2.157-.228 2.964-.684a5.854 5.854 0 0 0 1.964-1.771 7.272 7.272 0 0 0 1.087-2.473c.222-.924.333-1.853.333-2.789 0-.935-.111-1.864-.333-2.788a7.32 7.32 0 0 0-1.087-2.473 5.857 5.857 0 0 0-1.964-1.772c-.807-.456-1.795-.684-2.964-.684-1.052 0-1.953.228-2.701.684a5.786 5.786 0 0 0-1.842 1.772 7.69 7.69 0 0 0-1.052 2.473 11.893 11.893 0 0 0-.333 2.788c0 .936.111 1.866.333 2.789ZM98.668 124.169v3.543h-2.21v-3.543h2.21Zm0 6.945v18.099h-2.21v-18.099h2.21ZM117.767 151.353c-.293 1.076-.754 1.988-1.386 2.736-.632.748-1.456 1.321-2.473 1.719-1.017.397-2.263.596-3.736.596a11.21 11.21 0 0 1-2.666-.316 7.566 7.566 0 0 1-2.332-.982 5.83 5.83 0 0 1-1.719-1.701c-.456-.69-.719-1.514-.789-2.473h2.21c.117.678.345 1.245.684 1.702.339.456.748.824 1.228 1.105a5.45 5.45 0 0 0 1.596.614 8.33 8.33 0 0 0 1.789.193c2.057 0 3.543-.585 4.455-1.754.912-1.17 1.368-2.853 1.368-5.051v-2.456h-.07a6.466 6.466 0 0 1-2.262 2.701c-.994.678-2.157 1.017-3.49 1.017-1.45 0-2.689-.24-3.718-.719s-1.877-1.14-2.543-1.982c-.666-.842-1.152-1.829-1.456-2.964a13.97 13.97 0 0 1-.456-3.63c0-1.239.181-2.414.544-3.525.362-1.11.888-2.081 1.578-2.911a7.341 7.341 0 0 1 2.561-1.964c1.017-.479 2.18-.719 3.49-.719a6.36 6.36 0 0 1 1.912.281c.596.188 1.14.45 1.631.789.491.339.93.731 1.316 1.175.386.445.684.912.894 1.403h.07v-3.122h2.21v16.626c-.001 1.332-.148 2.536-.44 3.612Zm-5.068-4.823a5.762 5.762 0 0 0 1.824-1.613 7.108 7.108 0 0 0 1.105-2.297 9.7 9.7 0 0 0 .368-2.666c0-.888-.105-1.777-.316-2.666a7.709 7.709 0 0 0-1.017-2.42 5.534 5.534 0 0 0-1.806-1.754c-.737-.444-1.631-.666-2.683-.666-1.052 0-1.953.216-2.701.649a5.76 5.76 0 0 0-1.859 1.701 7.118 7.118 0 0 0-1.07 2.403c-.223.9-.333 1.818-.333 2.754 0 .912.117 1.801.351 2.666a6.82 6.82 0 0 0 1.087 2.297 5.616 5.616 0 0 0 1.859 1.613c.748.41 1.636.614 2.666.614.958-.001 1.8-.205 2.525-.615ZM124.66 124.169v3.543h-2.21v-3.543h2.21Zm0 6.945v18.099h-2.21v-18.099h2.21ZM136.094 131.114v1.859h-3.683v12.207c0 .725.099 1.292.298 1.701.198.41.696.638 1.491.684.631 0 1.263-.035 1.894-.105v1.859c-.328 0-.655.011-.982.035-.328.023-.655.035-.982.035-1.473 0-2.503-.286-3.087-.86-.585-.573-.865-1.631-.842-3.174v-12.382h-3.157v-1.859h3.157v-5.437h2.21v5.437h3.683ZM139.742 133.92a5.183 5.183 0 0 1 1.526-1.894c.643-.491 1.397-.853 2.262-1.087.865-.233 1.824-.351 2.877-.351.794 0 1.59.076 2.385.228a5.785 5.785 0 0 1 2.14.859c.631.421 1.146 1.012 1.543 1.772s.596 1.748.596 2.964v9.611c0 .888.433 1.332 1.298 1.332.257 0 .491-.047.701-.14v1.859c-.257.047-.486.082-.684.105a6.52 6.52 0 0 1-.754.035c-.561 0-1.011-.075-1.35-.228a1.819 1.819 0 0 1-.79-.649 2.432 2.432 0 0 1-.368-1 8.508 8.508 0 0 1-.088-1.281h-.07a14.82 14.82 0 0 1-1.21 1.561 5.98 5.98 0 0 1-1.368 1.14 6.291 6.291 0 0 1-1.719.701c-.643.163-1.409.246-2.297.246-.842 0-1.631-.1-2.367-.298a5.292 5.292 0 0 1-1.929-.947 4.52 4.52 0 0 1-1.298-1.649c-.316-.666-.474-1.455-.474-2.367 0-1.263.281-2.251.842-2.964.562-.713 1.303-1.256 2.227-1.631.924-.374 1.965-.637 3.122-.789 1.157-.152 2.333-.298 3.525-.438.467-.047.877-.105 1.228-.175.351-.07.643-.193.877-.368.233-.175.414-.415.543-.719.128-.304.193-.702.193-1.193 0-.748-.123-1.362-.369-1.841a2.918 2.918 0 0 0-1.017-1.14 4.098 4.098 0 0 0-1.508-.579 10.227 10.227 0 0 0-1.842-.158c-1.403 0-2.549.333-3.437 1-.889.666-1.356 1.736-1.404 3.209h-2.21c.071-1.052.293-1.964.668-2.736Zm11.049 5.402c-.141.258-.41.445-.807.561a8.058 8.058 0 0 1-1.052.245c-.936.164-1.9.311-2.894.439-.994.129-1.9.322-2.718.579-.819.258-1.491.626-2.017 1.105-.526.48-.789 1.163-.789 2.052 0 .562.111 1.059.333 1.491.222.433.52.807.894 1.123.374.316.807.556 1.298.719.491.164.994.246 1.508.246.842 0 1.649-.128 2.42-.386a5.951 5.951 0 0 0 2.017-1.123 5.455 5.455 0 0 0 1.368-1.789c.339-.702.509-1.496.509-2.385v-2.876h-.07v-.001ZM157.525 124.169h2.21v25.044h-2.21zM181.061 149.213h-3.788v-2.455h-.07c-.538 1.052-1.321 1.806-2.35 2.262a7.965 7.965 0 0 1-3.262.684c-1.427 0-2.672-.251-3.736-.754-1.064-.502-1.947-1.186-2.648-2.052-.702-.865-1.228-1.888-1.578-3.069-.351-1.18-.526-2.449-.526-3.806 0-1.636.222-3.052.666-4.244.444-1.193 1.035-2.175 1.772-2.946a6.852 6.852 0 0 1 2.525-1.701 8.047 8.047 0 0 1 2.894-.544 9.62 9.62 0 0 1 1.719.158 7.559 7.559 0 0 1 1.683.509 6.659 6.659 0 0 1 1.491.894c.456.363.836.789 1.14 1.28h.071v-9.26h3.998v25.044h-.001Zm-13.96-8.874c0 .772.099 1.532.298 2.28.198.748.503 1.415.912 1.999.409.585.93 1.053 1.561 1.404.632.35 1.379.526 2.245.526.888 0 1.654-.187 2.298-.561a4.758 4.758 0 0 0 1.578-1.473 6.672 6.672 0 0 0 .912-2.052c.198-.76.298-1.538.298-2.333 0-2.01-.45-3.577-1.351-4.7-.901-1.123-2.122-1.684-3.665-1.684-.936 0-1.725.193-2.368.579a4.862 4.862 0 0 0-1.578 1.508 6.281 6.281 0 0 0-.877 2.105 10.981 10.981 0 0 0-.263 2.402ZM193.724 149.704c-1.45 0-2.742-.24-3.876-.719-1.135-.479-2.093-1.14-2.876-1.982-.784-.842-1.38-1.847-1.789-3.017-.409-1.169-.613-2.455-.613-3.859 0-1.379.204-2.653.613-3.823.409-1.169 1.006-2.175 1.789-3.017.783-.842 1.742-1.502 2.876-1.982 1.134-.479 2.426-.719 3.876-.719 1.45 0 2.742.24 3.876.719 1.134.48 2.093 1.14 2.877 1.982.783.842 1.379 1.848 1.789 3.017.409 1.17.614 2.444.614 3.823 0 1.404-.205 2.69-.614 3.859-.409 1.17-1.006 2.175-1.789 3.017-.784.842-1.743 1.503-2.877 1.982-1.134.479-2.427.719-3.876.719Zm0-3.157c.888 0 1.66-.187 2.315-.561a4.876 4.876 0 0 0 1.614-1.473 6.434 6.434 0 0 0 .93-2.052 9.219 9.219 0 0 0 0-4.648 6.204 6.204 0 0 0-.93-2.052 4.969 4.969 0 0 0-1.614-1.456c-.655-.374-1.427-.561-2.315-.561-.889 0-1.66.188-2.315.561a4.943 4.943 0 0 0-1.613 1.456 6.204 6.204 0 0 0-.93 2.052 9.174 9.174 0 0 0 0 4.648c.198.76.509 1.444.93 2.052a4.873 4.873 0 0 0 1.613 1.473c.654.375 1.426.561 2.315.561ZM204.562 131.079h4.244l3.543 13.539h.071l3.402-13.539h4.034l3.262 13.539h.071l3.683-13.539h4.069l-5.682 18.134h-4.104l-3.367-13.469h-.07l-3.332 13.469h-4.209l-5.615-18.134ZM233.499 131.079h3.788v2.666l.07.07a6.711 6.711 0 0 1 2.385-2.368c.982-.573 2.069-.859 3.262-.859 1.987 0 3.554.515 4.7 1.543 1.146 1.029 1.719 2.573 1.719 4.63v12.452h-3.998v-11.4c-.047-1.426-.351-2.461-.912-3.104-.562-.643-1.438-.965-2.631-.965-.678 0-1.286.123-1.824.369a3.953 3.953 0 0 0-1.368 1.017 4.807 4.807 0 0 0-.877 1.526 5.438 5.438 0 0 0-.316 1.859v10.698h-3.998v-18.134ZM253.738 124.169h3.999v25.044h-3.999zM270.399 149.704c-1.45 0-2.742-.24-3.876-.719-1.135-.479-2.093-1.14-2.876-1.982-.784-.842-1.38-1.847-1.789-3.017-.409-1.169-.613-2.455-.613-3.859 0-1.379.204-2.653.613-3.823.409-1.169 1.006-2.175 1.789-3.017.783-.842 1.742-1.502 2.876-1.982 1.134-.479 2.426-.719 3.876-.719 1.45 0 2.742.24 3.876.719 1.134.48 2.093 1.14 2.877 1.982.783.842 1.379 1.848 1.789 3.017.409 1.17.614 2.444.614 3.823 0 1.404-.205 2.69-.614 3.859-.409 1.17-1.006 2.175-1.789 3.017-.784.842-1.743 1.503-2.877 1.982-1.135.479-2.427.719-3.876.719Zm0-3.157c.888 0 1.66-.187 2.315-.561a4.876 4.876 0 0 0 1.614-1.473 6.434 6.434 0 0 0 .93-2.052 9.219 9.219 0 0 0 0-4.648 6.204 6.204 0 0 0-.93-2.052 4.969 4.969 0 0 0-1.614-1.456c-.655-.374-1.427-.561-2.315-.561-.889 0-1.66.188-2.315.561a4.943 4.943 0 0 0-1.613 1.456 6.204 6.204 0 0 0-.93 2.052 9.174 9.174 0 0 0 0 4.648c.198.76.509 1.444.93 2.052a4.873 4.873 0 0 0 1.613 1.473c.654.375 1.426.561 2.315.561ZM298.073 145.18c0 .491.064.842.193 1.052.128.21.38.316.754.316h.421c.163 0 .35-.023.561-.07v2.771c-.14.047-.321.099-.543.158-.223.058-.451.111-.684.158a7.387 7.387 0 0 1-1.298.14c-.818 0-1.497-.164-2.034-.491-.538-.327-.889-.9-1.052-1.719-.795.771-1.772 1.333-2.929 1.683-1.158.351-2.274.526-3.349.526a8.215 8.215 0 0 1-2.35-.333 6.15 6.15 0 0 1-1.982-.982 4.705 4.705 0 0 1-1.368-1.649c-.339-.666-.509-1.444-.509-2.333 0-1.122.205-2.034.614-2.736a4.552 4.552 0 0 1 1.614-1.649 7.282 7.282 0 0 1 2.244-.859c.83-.175 1.666-.31 2.508-.404.725-.14 1.415-.239 2.069-.298a9.695 9.695 0 0 0 1.736-.298c.503-.14.9-.356 1.193-.649.292-.292.439-.73.439-1.315 0-.514-.123-.935-.369-1.263a2.479 2.479 0 0 0-.912-.754 3.972 3.972 0 0 0-1.21-.351 9.788 9.788 0 0 0-1.263-.088c-1.123 0-2.047.234-2.771.702-.725.468-1.135 1.193-1.228 2.175h-3.999c.071-1.169.351-2.14.842-2.911a5.806 5.806 0 0 1 1.877-1.859 7.671 7.671 0 0 1 2.578-.982 15.36 15.36 0 0 1 2.947-.281c.888 0 1.765.094 2.631.281a7.5 7.5 0 0 1 2.333.912 5.065 5.065 0 0 1 1.666 1.631c.421.666.631 1.479.631 2.438v9.331h-.001Zm-3.998-5.052c-.609.398-1.357.638-2.245.719-.889.082-1.777.205-2.666.369-.421.07-.83.17-1.228.298a3.71 3.71 0 0 0-1.053.526 2.326 2.326 0 0 0-.719.877c-.175.363-.263.801-.263 1.315 0 .445.128.819.386 1.123a2.8 2.8 0 0 0 .929.719c.363.175.76.298 1.193.368.432.071.824.105 1.175.105a6.51 6.51 0 0 0 1.438-.175c.515-.117 1-.316 1.456-.596a3.82 3.82 0 0 0 1.14-1.07c.304-.432.456-.964.456-1.596v-2.982h.001ZM319.47 149.213h-3.788v-2.455h-.07c-.538 1.052-1.321 1.806-2.35 2.262a7.965 7.965 0 0 1-3.262.684c-1.427 0-2.672-.251-3.736-.754-1.064-.502-1.947-1.186-2.648-2.052-.702-.865-1.228-1.888-1.578-3.069-.351-1.18-.526-2.449-.526-3.806 0-1.636.222-3.052.666-4.244.444-1.193 1.035-2.175 1.772-2.946a6.852 6.852 0 0 1 2.525-1.701 8.047 8.047 0 0 1 2.894-.544 9.62 9.62 0 0 1 1.719.158 7.559 7.559 0 0 1 1.683.509 6.659 6.659 0 0 1 1.491.894c.456.363.836.789 1.14 1.28h.071v-9.26h3.998v25.044h-.001Zm-13.96-8.874c0 .772.099 1.532.298 2.28.198.748.503 1.415.912 1.999.409.585.93 1.053 1.561 1.404.632.35 1.379.526 2.245.526.888 0 1.654-.187 2.298-.561a4.758 4.758 0 0 0 1.578-1.473 6.672 6.672 0 0 0 .912-2.052c.198-.76.298-1.538.298-2.333 0-2.01-.45-3.577-1.351-4.7-.901-1.123-2.122-1.684-3.665-1.684-.936 0-1.725.193-2.368.579a4.862 4.862 0 0 0-1.578 1.508 6.281 6.281 0 0 0-.877 2.105 10.92 10.92 0 0 0-.263 2.402ZM326.836 143.39c.117 1.17.561 1.988 1.333 2.456.772.468 1.695.701 2.771.701.373 0 .801-.029 1.28-.088.479-.058.93-.169 1.351-.333a2.528 2.528 0 0 0 1.034-.719c.269-.316.392-.731.369-1.245-.024-.514-.211-.935-.561-1.263-.351-.327-.801-.59-1.351-.789a13.17 13.17 0 0 0-1.876-.509 85.428 85.428 0 0 1-2.14-.456 19.787 19.787 0 0 1-2.157-.596 6.942 6.942 0 0 1-1.859-.947 4.36 4.36 0 0 1-1.315-1.526c-.328-.619-.491-1.386-.491-2.298 0-.982.24-1.806.719-2.473a5.495 5.495 0 0 1 1.824-1.613 7.934 7.934 0 0 1 2.455-.859c.9-.163 1.76-.245 2.578-.245.935 0 1.83.1 2.684.298a7.311 7.311 0 0 1 2.315.965 5.684 5.684 0 0 1 1.719 1.736c.456.714.742 1.573.86 2.578h-4.174c-.187-.958-.626-1.601-1.315-1.929-.69-.327-1.479-.491-2.367-.491-.281 0-.614.024-1 .07a4.647 4.647 0 0 0-1.087.263 2.303 2.303 0 0 0-.86.561c-.234.245-.35.567-.35.965 0 .491.169.889.508 1.193.339.304.784.556 1.333.754.549.199 1.175.368 1.877.508.701.14 1.426.293 2.174.456.725.164 1.438.363 2.14.596a6.93 6.93 0 0 1 1.876.947 4.6 4.6 0 0 1 1.333 1.508c.339.609.509 1.356.509 2.245 0 1.076-.246 1.988-.737 2.736a5.824 5.824 0 0 1-1.912 1.824 8.688 8.688 0 0 1-2.613 1.017c-.959.21-1.906.316-2.841.316-1.146 0-2.204-.129-3.174-.386-.971-.257-1.813-.649-2.526-1.175a5.647 5.647 0 0 1-1.683-1.964c-.41-.784-.626-1.713-.649-2.789h3.996Z",style:{fill:"#35495c",fillRule:"nonzero"}}))},{name:"WP Recipe Maker",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: bold close tag. */ +(0,o.__)("Get %1$srich results for your recipes%2$s in Google search","wordpress-seo"),"",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-wp-recipemaker",logoLink:"https://yoa.st/integrations-logo-wp-recipemaker",slug:"wp-recipe-maker",description:(0,o.sprintf)(/* translators: 1: Seriously Simple Podcasting, 2: Yoast SEO */ +(0,o.__)("%1$s integrates with %2$s's Schema API to get rich snippets for your recipes!","wordpress-seo"),"WP Recipe Maker","Yoast SEO"),isPremium:!1,isNew:!0,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",Pe({xmlns:"http://www.w3.org/2000/svg",width:185,"aria-hidden":"true",viewBox:"0 0 1488.21 189.15"},e),me||(me=t.createElement("rect",{width:23.81,height:26.01,x:113.83,y:17.03,fill:"#3a5160",rx:4,ry:4,transform:"rotate(-10 125.733 30.062)"})),pe||(pe=t.createElement("rect",{width:23.81,height:26.01,x:119.56,y:49.62,fill:"#3a5160",rx:4,ry:4,transform:"rotate(-10 131.463 62.64)"})),he||(he=t.createElement("path",{fill:"#010101",d:"M1120.63 107.35c-2.45 8.59-4.88 17.07-7.33 25.62-3.61-.29-7.03-.55-10.43-.83-1.86-.15-3.71-.42-5.57-.45-1.3-.02-1.94-.36-2.25-1.74-3.51-15.67-7.15-31.32-10.65-47-2.81-12.58-5.48-25.18-8.27-37.77-.26-1.17-.89-2.26-1.69-3.33.53 34.76 1.77 69.45 3.62 104.35-8.55-.78-16.89-1.54-25.37-2.31-1.24-42.47-3.33-84.87 1.77-127.36 3.42.26 6.78.51 10.13.77 8.19.65 16.38 1.33 24.58 1.92 1.11.08 1.54.43 1.82 1.46 4.04 14.57 7.19 29.33 9.99 44.17 1.23 6.51 2.43 13.02 3.64 19.53.03.18.1.35.27.93 7.73-24.53 13.76-49.07 18.93-73.99 2.23.17 4.42.31 6.61.5 8.44.73 16.87 1.47 25.31 2.21 1.05.09 2.11.21 3.17.25.97.03 1.37.34 1.39 1.41.21 8.53.65 17.05.74 25.58.26 23.65.55 47.3.48 70.95-.03 11.06-.84 22.13-1.31 33.19-.03.73-.14 1.45-.22 2.28-8.85-.83-17.5-1.63-26.35-2.46 3.22-33.66 3.51-67.33 4.22-100.99-.27-.06-.54-.13-.81-.19-.52 1.33-1.18 2.62-1.53 3.99-1.39 5.46-2.64 10.95-4.02 16.42-3.6 14.26-7.23 28.51-10.87 42.88ZM265.8 87.29c-2.62 11.14-5.09 22.19-7.86 33.17-1.9 7.51-4.21 14.92-6.35 22.37-.08.28-.24.53-.4.89-3.54-.27-7.05-.53-10.56-.8-2.11-.16-4.22-.4-6.33-.49-1.11-.05-1.61-.3-1.85-1.54-2.74-14.44-5.65-28.85-8.35-43.29-2.31-12.35-4.52-24.72-6.57-37.11-1.61-9.76-2.95-19.56-4.35-29.35-.85-5.96-1.59-11.93-2.36-17.9-.06-.48 0-.98 0-1.63 8.26.69 16.46 1.38 24.63 2.06 3.21 29.25 6.41 58.4 9.61 87.54.24.02.47.03.71.05 3.2-12.67 5.75-25.49 8.2-38.32 2.46-12.87 4.49-25.83 6.73-38.86 6.2.55 12.56 1.12 19.02 1.7 2.28 25.19 5.32 50.17 8.09 75.17.25 0 .5.02.76.03 7.1-29.92 13.76-59.93 17.67-90.72 8.43.7 16.82 1.39 25.32 2.09-.87 4.78-1.66 9.33-2.54 13.86-4.56 23.44-9.8 46.74-16.01 69.81-3.96 14.69-8.3 29.28-12.41 43.93-.38 1.34-.9 1.62-2.31 1.47-5.21-.56-10.44-.94-15.66-1.32-.85-.06-1.19-.3-1.4-1.15-3.78-14.91-7.62-29.81-11.4-44.72-.93-3.65-1.66-7.36-2.49-11.04-.06-.28-.23-.54-.44-1.02-.39 1.82-.74 3.41-1.11 5.13Zm317.9 32.76c4.39 6.04 8.71 11.99 13.09 18.03-6.24 4.56-12.38 9.05-18.32 13.39-14.44-19.46-28.78-38.78-43.12-58.11-.16.08-.32.15-.48.23-.58 17.99-1.16 35.99-1.74 54.13-8.88-.97-17.46-1.9-25.78-2.81 0-3.14-.13-6.08.02-9 1.29-25.57 1.83-51.15 1.74-76.75-.05-13.67.09-27.34.09-41.01 0-1.21.45-1.72 1.52-2.18 10.29-4.43 21.01-7.33 32.16-8.52 7.54-.81 15.09-1.09 22.51 1.03 14.48 4.15 23.19 13.68 26.52 28.08 2.34 10.1 1.28 19.78-4.3 28.79-3.46 5.59-7.73 10.49-12.74 14.71-4.37 3.68-8.98 7.08-13.47 10.6l22.3 29.38m-15.29-80.78c-2.59-6.62-7.63-9.99-15.03-10.21-5.83-.18-11.4 1.07-16.93 2.68-1.11.32-1.49.79-1.49 1.95-.02 14.86-.1 29.71-.15 44.57 0 .47.05.94.09 1.68 2.3-1.2 4.41-2.23 6.46-3.37 9.2-5.15 17.52-11.34 23.96-19.78 4-5.25 5.34-10.95 3.1-17.51ZM378.34 8.76c9.83-1.09 19.28-.47 28.16 3.98 13.54 6.79 21.67 17.63 24.2 32.39 2.72 15.86-2.85 28.92-14.5 39.69-8.92 8.25-19.54 13.61-31 17.5-1.8.61-3.61 1.25-5.46 1.69-1.04.25-1.22.73-1.2 1.66.16 9.93.28 19.86.41 29.78.05 3.69.1 7.38.14 11.08 0 .34-.05.67-.08 1.15-8.68-.82-17.28-1.63-25.92-2.44-.1-2.25-.23-4.39-.29-6.52-.63-24.35-.69-48.69-.14-73.04.28-12.47.64-24.94.99-37.4.12-4.34.34-8.67.49-13.01.03-.78.23-1.22 1.08-1.51 7.48-2.51 15.12-4.24 23.12-5m11.61 68.82c1.39-.99 2.84-1.91 4.15-2.99 9.26-7.68 13.24-18.64 9.7-30.14-1.47-4.78-4.18-8.72-8.41-11.53-4.72-3.12-9.85-2.69-15.01-1.49-.33.08-.66.89-.68 1.38-.18 4.03-.31 8.07-.4 12.1-.29 12.36-.56 24.72-.83 37.08 0 .24.04.49.07.83 4.01-1.24 7.74-2.94 11.42-5.25Zm503.41 1.2c.89 5.83.84 11.57.28 17.28-.97 9.85-3.39 19.35-7.54 28.38-2.81 6.12-6.3 11.76-11.28 16.45-4.45 4.2-9.67 5.49-15.58 4.64-2.72-.39-5.42-.91-8.27-1.4.43 14.95.87 29.85 1.3 45.02-7.34-.73-14.77-1.46-22.39-2.21-1.11-46.35-2-92.64 1.68-139.13 6.73.77 13.3 1.53 20.11 2.31-.2 5.13-.4 10.22-.61 15.52 1.57-1.65 2.9-3.25 4.43-4.63 4.64-4.2 10.02-6.6 16.45-6.23 6.49.37 11.49 3.39 15.26 8.48 3.18 4.29 4.97 9.17 5.9 14.38.06.34.16.68.26 1.15m-33.25-3.25c-3.68 3.79-5.8 8.45-7.53 13.3-.66 1.85-1.25 3.82-1.3 5.75-.24 9.12-.29 18.24-.4 27.37 0 .34.02.72.18 1.01 2.28 4.2 6.74 4.88 10.26 1.62 3.54-3.28 5.38-7.54 6.89-11.93 3.1-9.04 4.05-18.33 2.74-27.8-.47-3.4-1.34-6.73-3.24-9.7-1.19-1.85-2.59-2.36-4.63-1.49-1 .43-1.87 1.14-2.96 1.87Z"})),ye||(ye=t.createElement("path",{fill:"#020202",d:"M1307.39 122.54c-4.09-4.4-8.1-8.72-12.12-13.04-.13.05-.27.11-.4.16.26 12.07.51 24.13.77 36.33-7.46-.69-14.9-1.39-22.48-2.09-1.58-46.55-.61-92.99 1.71-139.57 7.62.58 15.04 1.15 22.22 1.7-.99 29.54-1.98 58.88-2.97 88.23.22.05.45.11.67.16 11.62-14.1 21.84-29.09 29.48-46.04 5.39 4.5 10.64 8.88 15.99 13.35-6.1 13.98-13.95 26.91-22.87 39.14 4.19 5.22 8.5 10.29 12.47 15.62 3.97 5.32 7.6 10.9 11.43 16.43-5.06 4.7-9.91 9.2-14.91 13.85-5.74-8.57-12.06-16.56-18.99-24.21Zm-65.12 6.6-1.25 17.55c-2.51-.14-4.87-.27-7.22-.42-2.72-.18-5.43-.34-8.14-.61-.43-.04-1.04-.55-1.18-.96-.51-1.55-.85-3.16-1.27-4.82-2.52 1.06-4.86 2.17-7.29 3.04-5.96 2.15-12 2.34-18.07.46-8.06-2.5-13.54-9.59-14.3-17.91-1.04-11.52 4.12-19.78 13.51-25.88 5.95-3.87 12.56-5.98 19.6-6.82l4.69-.55c.08-4.79.21-9.47-.99-14.05-.26-1-.76-1.97-1.32-2.84-2.02-3.17-5.77-3.61-8.52-1.02-3.26 3.07-4.74 7.11-6.04 11.23-.34 1.09-.41 2.55-1.16 3.13-.65.5-2.1.02-3.19-.07-4.71-.41-9.42-.83-14.45-1.28.73-2.67 1.34-5.26 2.15-7.79 2.55-7.94 6.21-15.24 12.46-21.07 9.36-8.75 24.76-8.96 33.63-.29 4.33 4.24 6.71 9.6 7.92 15.38.89 4.22 1.58 8.55 1.71 12.86.43 14.22-.32 28.42-1.29 42.75m-30.89-1.07c2.98-.63 5.97-1.23 8.94-1.94.33-.08.69-.78.71-1.21.14-3.53.21-7.07.28-10.6.03-1.48 0-2.95 0-4.55-2.22.45-4.3.79-6.32 1.31-4.43 1.15-8.39 3.07-10.92 7.1-2.63 4.19-.79 8.59 4.04 9.62.97.21 1.99.18 3.27.26Zm160.42-70.27c8.98-6.55 18.49-7.72 28.52-3.01 4.13 1.94 6.94 5.4 9.16 9.29 3.27 5.71 5.06 11.94 5.77 18.39.77 6.97 1 14 1.5 21.01.07.96-.17 1.34-1.2 1.59-11.84 2.91-23.83 5.07-35.89 6.86-.93.14-1.85.33-2.92.52.63 5.04 1.1 10 4.13 14.24 1.56 2.19 3.14 2.71 5.76 1.99 3.43-.94 5.86-3.28 8-5.88 1.96-2.39 3.66-4.99 5.6-7.67 4.79 2.81 9.66 5.66 14.63 8.56-5.15 8.94-10.94 17.18-21.11 20.95-14 5.18-27.62.46-34.85-13.06-3.12-5.83-4.61-12.13-4.89-18.64-.56-13.37 1.19-26.44 6.29-38.94 2.54-6.23 6.12-11.79 11.5-16.2m13.65 38.82c3.16-.74 6.31-1.47 9.73-2.27-.41-4.68-.62-9.31-1.28-13.87-.37-2.61-1.2-5.23-2.29-7.64-1.23-2.71-3.63-3.09-5.88-1.06a15.806 15.806 0 0 0-3.3 4.2c-3.7 6.95-4.77 14.55-5.43 22.39 2.83-.6 5.51-1.17 8.45-1.76ZM662.46 58.62c5.16 5.37 7.48 11.97 9.02 18.88 1.99 8.95 2.28 18.05 2.26 27.28-13.11 3.37-26.44 5.61-39.9 7.64.55 4.32.98 8.51 2.94 12.35 2.14 4.2 4.64 5.91 10.18 2.42 3.65-2.3 6.08-5.77 8.4-9.29.6-.91 1.2-1.82 1.85-2.82 4.93 2.89 9.77 5.72 14.72 8.63-5.15 9.05-11.04 17.34-21.36 21.04-13.9 4.98-27.46.44-34.72-13.4-3.78-7.21-4.95-14.99-4.88-23.01.1-11.04 1.74-21.83 5.6-32.22 2.44-6.59 5.86-12.58 11.2-17.34 5.32-4.74 11.59-6.87 18.7-6.72 6.15.13 11.54 2.1 15.98 6.58m-27.88 35.11c-.16 1.51-.33 3.01-.52 4.72 6.16-1.36 12.07-2.67 18.31-4.04-.54-5.21-.9-10.32-1.65-15.36-.35-2.3-1.28-4.59-2.32-6.71-.96-1.97-2.75-2.41-4.57-1.16-1.41.96-2.73 2.26-3.62 3.7-3.51 5.69-4.81 12.08-5.64 18.86Z"})),ge||(ge=t.createElement("path",{fill:"#010101",d:"M926.11 142.76c-6.82-4.43-10.73-10.77-13.02-18.22-2.25-7.3-2.43-14.78-1.91-22.33.5-7.21 1.61-14.31 3.71-21.24 2.46-8.09 5.94-15.64 12.2-21.65 8.54-8.2 22.19-9.77 31.91-3.54 4.52 2.89 7.31 7.22 9.39 12.01 2.69 6.18 4 12.71 4.56 19.38.48 5.81.69 11.63 1.02 17.53-13.29 3.43-26.63 5.68-40.17 7.71.69 5.07 1.11 10.09 4.18 14.37 1.51 2.1 3.16 2.63 5.65 1.93 4.12-1.17 6.78-4.18 9.25-7.35 1.53-1.96 2.87-4.07 4.38-6.24 4.84 2.84 9.67 5.68 14.63 8.59-3.06 5.33-6.32 10.41-10.89 14.59-6.25 5.71-13.56 8.6-22.11 8.33-4.57-.14-8.82-1.35-12.78-3.86m11.79-63.33c-2.35 6.08-3.34 12.41-3.81 19.02l18.22-4.04c-.44-4.8-.64-9.44-1.35-14-.43-2.75-1.43-5.47-2.58-8.02-.94-2.08-2.67-2.37-4.69-1.2-.85.49-1.73 1.14-2.25 1.94-1.27 1.96-2.34 4.04-3.55 6.3Z"})),de||(de=t.createElement("path",{fill:"#020202",d:"M714.55 110.73c.03 3.69.1 7.24 1.51 10.56.51 1.21 1.25 2.4 2.14 3.38 1.73 1.91 3.74 2.13 5.98.81 3.13-1.84 5.16-4.73 7.06-7.66 2.39-3.67 4.59-7.47 6.94-11.33 4.68 3.34 9.4 6.71 14.16 10.12-3.09 7.86-6.75 15.32-12.56 21.6-10.5 11.33-24.8 10.15-34.82 3.47-6.67-4.44-10.21-10.98-11.89-18.58-1.53-6.9-1.26-13.85-.65-20.83.72-8.31 2.2-16.45 4.89-24.37 2.26-6.66 5.24-12.93 10.19-18.13 7.32-7.69 18.53-9.76 27.48-4.89 5.24 2.85 8.71 7.36 11.2 12.59 3.44 7.25 5.07 14.87 4.04 22.9-.24 1.89-.75 3.75-1.13 5.62-6.29-.59-12.34-1.16-18.19-1.71 0-2.32.05-4.5-.01-6.68-.1-3.57-.73-7.03-2.51-10.19-2.07-3.66-5.08-3.78-7.55-.35-2.46 3.42-3.31 7.42-4.13 11.41-1.5 7.29-1.91 14.7-2.13 22.27Zm764.13-35.84c-5.02-1.18-8.22 1.08-10.32 5.16-2.82 5.49-4.74 11.24-4.7 17.53.08 11.92.08 23.84.02 35.76-.02 4.38-.32 8.76-.5 13.35-7.53-.61-14.93-1.2-22.48-1.81.75-28.07 1.59-55.97-2.83-83.89 2.83.27 5.42.51 8.01.76 1.75.17 3.5.43 5.26.52.99.05 1.4.46 1.65 1.34.79 2.72 1.64 5.43 2.5 8.23 1.62-2.77 3.14-5.46 4.74-8.1 1.99-3.27 4.39-6.23 7.39-8.64 4.54-3.64 9.55-3.86 15.17-.59 1.81 1.05 3.4 2.47 5.04 3.79.32.26.64.88.54 1.23-1.53 5.58-3.13 11.14-4.74 16.82-1.61-.5-3.13-.96-4.77-1.46Z"})),ve||(ve=t.createElement("path",{fill:"#010101",d:"M775.99 52.99c.82-.19 1.63-.32 2.43-.25 6.42.59 12.84 1.21 19.25 1.83.09 0 .17.09.31.17v91.03c-7.34-.7-14.59-1.38-22.01-2.09 0-30.22 0-60.38.01-90.69Z"})),ue||(ue=t.createElement("path",{fill:"#020202",d:"M798.68 26.96c-.47 5.38-.93 10.63-1.41 16.04-7.27-.88-14.35-1.73-21.71-2.62.63-7.04 1.26-14.05 1.91-21.28 7.31.83 14.48 1.65 21.74 2.48-.19 1.88-.36 3.56-.53 5.38Z"})),we||(we=t.createElement("path",{fill:"#607983",d:"m8.856 20.455 97.89-17.26c6.795-1.199 13.282 3.344 14.48 10.139l20.88 118.413c1.198 6.795-3.344 13.283-10.14 14.48l-97.89 17.261a7.097 7.097 0 0 1-8.213-5.75L3.105 28.667a7.097 7.097 0 0 1 5.75-8.213Z"})),fe||(fe=t.createElement("path",{fill:"#3a5160",d:"M21.37 18.25 8.86 20.46c-3.84.68-6.43 4.37-5.75 8.21l22.76 129.08c.68 3.84 4.37 6.43 8.21 5.75l12.51-2.21L21.37 18.25Z"})),Ee||(Ee=t.createElement("path",{fill:"#d2e0e4",d:"M89.24 39.48c-1.9.34-3.17 2.15-2.84 4.05l3.83 21.7c.45 2.57-1.29 5.02-3.85 5.47s-4.99-1.26-5.44-3.83l-3.83-21.7c-.34-1.9-2.15-3.17-4.05-2.84s-3.17 2.15-2.84 4.05l3.83 21.7c.45 2.57-1.29 5.02-3.85 5.47s-4.99-1.26-5.44-3.83l-3.83-21.7c-.34-1.9-2.15-3.17-4.05-2.84s-3.17 2.15-2.84 4.05l4.46 25.28c1.49 8.45 8.11 14.69 16.08 16.14l6.09 34.55c.66 3.75 4.24 6.26 8 5.6s6.26-4.24 5.6-8l-6.09-34.55c7-4.09 11.08-12.21 9.59-20.66l-4.46-25.28a3.507 3.507 0 0 0-4.05-2.84Z"})))}],Ze={name:"WooCommerce",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: bold close tag. */ +(0,o.__)("Get %1$srich product results%2$s in Google search","wordpress-seo"),"",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-woocommerce",logoLink:"https://yoa.st/integrations-logo-woocommerce",slug:"woocommerce",description:(0,o.sprintf)(/* translators: 1: Yoast WooCommerce SEO */ +(0,o.__)("Unlock rich snippets for your product pages by using %1$s.","wordpress-seo"),"Yoast WooCommerce SEO"),isPremium:!1,isNew:!1,isMultisiteAvailable:!0,logo:W,upsellLink:"https://yoa.st/integrations-get-woocommerce"},Te=[ke.map(((e,s)=>(0,t.createElement)(Q,{key:s,integration:e,isActive:y(e)})))];Te.push((0,t.createElement)(U,{key:ke.length+1,integration:Ze,isActive:Boolean(window.wpseoIntegrationsData.woocommerce_seo_active),isInstalled:Boolean(window.wpseoIntegrationsData.woocommerce_seo_installed),isPrerequisiteActive:Boolean(window.wpseoIntegrationsData.woocommerce_active),upsellLink:window.wpseoIntegrationsData.woocommerce_seo_upsell_url,activationLink:window.wpseoIntegrationsData.woocommerce_seo_activate_url}));const xe=Te;var Ne,Le,Ae;function Oe(){return Oe=Object.assign?Object.assign.bind():function(e){for(var t=1;t","Semrush","
            "),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-semrush",logoLink:"http://yoa.st/semrush-prices-wordpress",slug:"semrush",description:(0,o.sprintf)(/* translators: 1: Semrush */ +(0,o.__)("Find out what your audience is searching for with %s data right in your sidebar.","wordpress-seo"),"Semrush"),isPremium:!1,isNew:!1,isMultisiteAvailable:!0,logo:e=>t.createElement("svg",Oe({xmlns:"http://www.w3.org/2000/svg",width:170,height:27,fill:"none",viewBox:"0 0 200 27"},e),Ne||(Ne=t.createElement("path",{fill:"#171A22",d:"M138.086 10.413c0-3.276-2.013-5.651-5.869-5.651h-12.466v16.976h4.099v-5.797h4.85l4.753 5.795h4.619v-.374l-4.619-5.518c2.882-.594 4.633-2.71 4.633-5.431Zm-6.329 2.1h-7.907V8.277h7.907c1.462 0 2.401.779 2.401 2.123-.001 1.366-.908 2.111-2.401 2.111ZM200 4.762h-3.833v6.436h-10.331V4.762h-4.147v16.976h4.147v-6.685h10.331v6.685H200V4.762ZM108.78 4.762l-4.558 14.284h-.25L99.388 4.762h-7.3v16.976h3.905V7.793h.243l4.558 13.945h6.289l4.584-13.945h.241v13.945h4.027V4.762h-7.155ZM64.176 11.708c-1.448-.15-4.148-.397-5.597-.547-1.425-.146-2.249-.569-2.249-1.51 0-.903.875-1.665 4.403-1.665 3.113 0 5.986.666 8.494 1.876V6.064c-2.508-1.196-5.264-1.78-8.706-1.78-4.829 0-8.172 2.019-8.172 5.432 0 2.89 1.962 4.468 5.898 4.898 1.425.156 3.847.369 5.537.508 1.84.153 2.388.715 2.388 1.554 0 1.152-1.29 1.867-4.56 1.867-3.328 0-6.697-1.088-9.093-2.61v3.909c1.925 1.287 5.258 2.38 8.97 2.38 5.275 0 8.66-2.035 8.66-5.677 0-2.74-1.807-4.404-5.973-4.837ZM72.834 4.762v16.976h15.835V18.27H76.737v-3.444h11.729v-3.442H76.737V8.229H88.67V4.762H72.834ZM173.218 11.708c-1.448-.15-4.148-.398-5.597-.547-1.425-.146-2.249-.569-2.249-1.51 0-.903.875-1.665 4.402-1.665 3.114 0 5.987.666 8.495 1.876V6.064c-2.51-1.195-5.264-1.78-8.706-1.78-4.829 0-8.172 2.018-8.172 5.432 0 2.89 1.962 4.468 5.898 4.897 1.425.157 3.847.37 5.537.509 1.841.153 2.388.715 2.388 1.554 0 1.151-1.291 1.866-4.56 1.866-3.328 0-6.697-1.087-9.093-2.61v3.91c1.925 1.287 5.258 2.38 8.97 2.38 5.275 0 8.661-2.035 8.661-5.677 0-2.74-1.806-4.404-5.974-4.837ZM154.503 4.762v8.69c0 3.293-2 5.1-5.008 5.1-3.024 0-5.008-1.78-5.008-5.15v-8.64h-4.075v8.254c0 6.164 3.852 9.207 9.142 9.207 5.09 0 9.021-2.924 9.021-9.006V4.762h-4.072Z"})),Le||(Le=t.createElement("path",{fill:"#FF642D",d:"M38.307 13.152c0 .827-.415.955-1.466.955-1.114 0-1.305-.192-1.433-1.02-.223-2.132-1.657-3.948-4.075-4.138-.764-.064-.955-.35-.955-1.306 0-.891.128-1.306.828-1.306 4.202 0 7.1 3.376 7.1 6.815Zm6.114 0C44.42 6.752 40.09 0 30.09 0H10.214c-.4 0-.65.21-.65.576 0 .2.15.379.286.485.729.572 1.79 1.201 3.213 1.913 1.38.69 2.445 1.138 3.527 1.578.447.18.625.379.625.644 0 .346-.244.566-.747.566H.69c-.466 0-.691.3-.691.604 0 .258.09.465.31.693 1.281 1.336 3.317 2.947 6.293 4.809a92.427 92.427 0 0 0 8.386 4.617c.43.206.58.445.57.691-.012.286-.237.527-.734.527H7.593c-.411 0-.64.217-.64.549 0 .185.15.42.344.598 1.645 1.491 4.275 3.123 7.78 4.615 4.674 1.99 9.432 3.187 14.776 3.187 10.127 0 14.568-7.578 14.568-13.5Zm-13.215 9.074c-4.968 0-9.107-4.044-9.107-9.074 0-4.968 4.139-8.948 9.107-8.948 5.095 0 9.074 3.981 9.074 8.948 0 5.03-3.98 9.074-9.074 9.074Z"})))},{name:"Wincher",claim:(0,i.createInterpolateElement)((0,o.sprintf)(/* translators: 1: bold open tag; 2: Wincher; 3: bold close tag. */ +(0,o.__)("Track your rankings through time with %1$s%2$s%3$s","wordpress-seo"),"","Wincher",""),{strong:(0,t.createElement)("strong",null)}),learnMoreLink:"https://yoa.st/integrations-about-wincher",logoLink:"https://yoa.st/integrations-logo-wincher",slug:"wincher",description:(0,o.sprintf)(/* translators: 1: Wincher */ +(0,o.__)("Keep an eye on how your posts are ranking by connecting to your %s account.","wordpress-seo"),"Wincher"),isPremium:!1,isNew:!1,isMultisiteAvailable:!1,logo:e=>t.createElement("svg",$e({xmlns:"http://www.w3.org/2000/svg",width:140,viewBox:"0 0 566 122"},e),Ae||(Ae=t.createElement("g",{fill:"none",fillRule:"evenodd"},t.createElement("g",{fillRule:"nonzero",transform:"translate(183.8 37)"},t.createElement("circle",{cx:375.8,cy:58.2,r:5.6,fill:"#FFA23A"}),t.createElement("path",{fill:"#37343B",d:"M31.805 62.112a2.4 2.4 0 0 1-2.282 1.656h-7.337a2.4 2.4 0 0 1-2.277-1.641L.323 3.365A2.4 2.4 0 0 1 2.6.206h8.895a2.4 2.4 0 0 1 2.298 1.708l12.37 41.04 13.974-41.12A2.4 2.4 0 0 1 42.409.206h4.7a2.4 2.4 0 0 1 2.268 1.616l14.228 41.131 12.2-41.03A2.4 2.4 0 0 1 78.107.205H87a2.4 2.4 0 0 1 2.278 3.156L69.77 62.124a2.4 2.4 0 0 1-2.278 1.644h-7.335a2.4 2.4 0 0 1-2.282-1.656L44.84 22.139 31.805 62.112zm74.538-45.22a2.4 2.4 0 0 1 2.4 2.4v42.076a2.4 2.4 0 0 1-2.4 2.4H98.95a2.4 2.4 0 0 1-2.4-2.4V19.292a2.4 2.4 0 0 1 2.4-2.4h7.393zM102.555 0c3.095 0 5.605 2.496 5.605 5.575s-2.51 5.574-5.605 5.574c-3.095 0-5.605-2.495-5.605-5.574 0-3.08 2.51-5.575 5.605-5.575zm29.076 61.368a2.4 2.4 0 0 1-2.4 2.4h-7.392a2.4 2.4 0 0 1-2.4-2.4V19.292a2.4 2.4 0 0 1 2.4-2.4h7.133a2.4 2.4 0 0 1 2.4 2.4v4.937c1.268-2.35 3.228-4.243 5.88-5.677 2.651-1.433 5.62-2.15 8.906-2.15 5.13 0 9.483 1.692 13.057 5.075s5.361 8.2 5.361 14.45v25.44a2.4 2.4 0 0 1-2.4 2.4h-7.392a2.4 2.4 0 0 1-2.4-2.4V39.196c0-3.67-.894-6.523-2.68-8.558-1.788-2.036-4.209-3.054-7.264-3.054-3.228 0-5.837.304-7.826 2.512-1.989 2.207-2.983 5.86-2.983 9.358v21.915zM198.736 64c-7.131 0-13.018-2.242-17.66-6.725-4.584-4.427-6.876-10.172-6.876-17.233s2.32-12.806 6.962-17.233C185.86 18.27 191.83 16 199.076 16c4.754 0 9.07 1.12 12.947 3.363 3.38 1.953 5.996 4.589 7.849 7.905.643 1.151.272 1.78-.517 2.208l-6.947 3.774c-1.003.545-1.63.246-2.293-.654-2.74-3.722-6.363-5.584-10.87-5.584-3.848 0-6.99 1.261-9.423 3.783-2.49 2.466-3.736 5.548-3.736 9.247 0 3.81 1.217 6.95 3.65 9.415 2.491 2.466 5.576 3.699 9.255 3.699 2.434 0 4.754-.645 6.962-1.934 1.73-1.01 3.094-2.243 4.094-3.7.47-.685 1.14-1.03 2.077-.484l7.195 4.187c.738.43.968 1.038.538 1.742-1.954 3.2-4.679 5.784-8.173 7.755C207.806 62.907 203.49 64 198.736 64zm44.522-2.632a2.4 2.4 0 0 1-2.4 2.4h-7.393a2.4 2.4 0 0 1-2.4-2.4V2.4a2.4 2.4 0 0 1 2.4-2.4h7.047a2.4 2.4 0 0 1 2.4 2.4v21.399c1.268-2.179 3.257-3.957 5.966-5.333 2.71-1.376 5.679-2.064 8.907-2.064 5.073 0 9.396 1.692 12.97 5.075 3.575 3.383 5.362 8.2 5.362 14.45v25.44a2.4 2.4 0 0 1-2.4 2.4h-7.393a2.4 2.4 0 0 1-2.4-2.4V39.196c0-3.67-.879-6.523-2.637-8.558-1.758-2.036-4.165-3.054-7.22-3.054-3.229 0-5.837 1.104-7.826 3.312-1.989 2.207-2.983 5.06-2.983 8.558v21.915zM311.177 64c-8.045 0-14.233-2.326-18.564-6.977-4.275-4.596-6.413-10.256-6.413-16.981 0-7.005 2.222-12.75 6.666-17.233C297.31 18.27 303.076 16 310.164 16c6.694 0 12.207 2.074 16.539 6.22 4.331 4.148 6.497 9.752 6.497 16.813 0 1.087-.085 2.375-.254 3.866-.104.92-.483 1.346-1.483 1.346h-33.197c1.688 6.501 6.16 9.752 13.417 9.752 4.807 0 9.295-1.247 13.464-3.74.787-.471 1.621-.471 2.059.299l3.324 5.854c.565.997.43 1.514-.38 2.05-5.582 3.693-11.907 5.54-18.973 5.54zM321.2 36c-.554-3.1-1.827-5.54-3.82-7.325-1.992-1.783-4.483-2.675-7.472-2.675-2.934 0-5.439.892-7.515 2.675-2.076 1.784-3.473 4.226-4.193 7.325h23zm34.954 25.368a2.4 2.4 0 0 1-2.4 2.4h-7.393a2.4 2.4 0 0 1-2.4-2.4V19.292a2.4 2.4 0 0 1 2.4-2.4h6.874a2.4 2.4 0 0 1 2.4 2.4v5.472c2.825-5.046 7.148-7.57 12.97-7.57 1.491 0 2.982.212 4.472.635.86.243 1.193.871 1.11 1.796l-.778 8.712c-.097 1.091-.567 1.348-1.636 1.091-1.487-.357-2.86-.536-4.119-.536-3.574 0-6.384 1.19-8.43 3.57-2.047 2.38-3.07 5.92-3.07 10.622v18.284z"})),t.createElement("path",{fill:"#FF8F3B",d:"M154.949.162a3.423 3.423 0 0 1 2.235 4.308l-37.107 115.146a3.446 3.446 0 0 1-3.285 2.384H94.376c-.356 0-.71-.055-1.049-.162a3.423 3.423 0 0 1-2.235-4.308L128.199 2.384A3.446 3.446 0 0 1 131.484 0h24.485c.356 0-1.36.055-1.02.162zm-70.7 14.231c.355 0 .707.055 1.046.162a3.423 3.423 0 0 1 2.24 4.305L55.247 119.613A3.446 3.446 0 0 1 51.962 122H29.545c-.355 0-.708-.055-1.047-.162a3.423 3.423 0 0 1-2.239-4.305L58.545 16.78a3.446 3.446 0 0 1 3.286-2.387h22.417z"}),t.createElement("path",{fill:"#FF7F3B",d:"m107.849 65.53 14.936 45.68-2.708 8.406a3.446 3.446 0 0 1-3.285 2.384l-11.788-47.64 2.845-8.83zm-64.877-.151 14.976 45.805-2.7 8.429a3.425 3.425 0 0 1-.157.4l-15.13-45.236 3.011-9.398z"}),t.createElement("path",{fill:"#FFA23A",d:"M84.376 14.393c1.501 0 2.83.966 3.285 2.387l32.287 100.753a3.423 3.423 0 0 1-2.24 4.305 3.468 3.468 0 0 1-1.046.162H94.245a3.446 3.446 0 0 1-3.286-2.387L58.673 18.86a3.423 3.423 0 0 1 2.24-4.305 3.468 3.468 0 0 1 1.045-.162zM26.454 37.011c1.497 0 2.823.96 3.282 2.376l25.363 78.135a3.423 3.423 0 0 1-2.224 4.313c-.342.11-.699.165-1.058.165H29.408a3.446 3.446 0 0 1-3.282-2.376L.763 41.49a3.423 3.423 0 0 1 2.224-4.314 3.485 3.485 0 0 1 1.058-.165z"}))))}].map(((e,s)=>(0,t.createElement)(L,{key:s,integration:e,toggleLabel:(0,o.__)("Enable integration","wordpress-seo"),initialActivationState:y(e),isNetworkControlEnabled:g(e),isMultisiteAvailable:d(e),beforeToggle:w})))];function Ie(e,s,a=""){return(0,i.createInterpolateElement)(e,{a:(0,t.createElement)("a",{id:a,href:s,target:"_blank",rel:"noopener noreferrer"})})}const Se=({title:e,description:s,elements:a})=>(0,t.createElement)("section",null,(0,t.createElement)("div",{className:"yst-mb-8"},(0,t.createElement)("h2",{className:"yst-mb-2 yst-text-lg yst-font-medium"},e),(0,t.createElement)("p",{className:"yst-text-tiny"},s)),(0,t.createElement)("div",{className:"yst-grid yst-grid-cols-1 yst-gap-6 sm:yst-grid-cols-2 md:yst-grid-cols-3 lg:yst-grid-cols-4"},a));function ze(){return(0,t.createElement)("div",{className:"yst-h-full yst-flex yst-flex-col yst-bg-white yst-rounded-lg yst-shadow"},(0,t.createElement)("header",{className:"yst-border-b yst-border-slate-200"},(0,t.createElement)("div",{className:"yst-max-w-screen-sm yst-p-8"},(0,t.createElement)(r.Title,{as:"h1",className:"yst-flex yst-items-center"},(0,o.__)("Integrations","wordpress-seo")),(0,t.createElement)("p",{className:"yst-text-tiny yst-mt-3"},(0,o.sprintf)(/* translators: 1: Yoast SEO */ +(0,o.__)("%s can integrate with other products, to help you further improve your website. You can enable or disable these integrations below.","wordpress-seo"),"Yoast SEO")))),(0,t.createElement)("div",{className:"yst-flex-grow yst-max-w-6xl yst-p-8"},(0,t.createElement)(Se,{title:(0,o.__)("Recommended integrations","wordpress-seo"),elements:Ve}),(0,t.createElement)("hr",{className:"yst-my-12"}),(0,t.createElement)(Se,{title:(0,o.__)("Schema API integrations","wordpress-seo"),description:Ie((0,o.sprintf)(/* translators: 1: anchor tag linking to our schema API docs; 2: closing anchor tag. */ +(0,o.__)("Unlock rich results in Google search by using plugins that integrate with the %1$sYoast Schema API%2$s.","wordpress-seo"),"",""),"https://developer.yoast.com/features/schema/api/","schema-api-link"),elements:xe}),(0,t.createElement)("hr",{className:"yst-my-12"}),(0,t.createElement)(Se,{title:(0,o.__)("Plugin integrations","wordpress-seo"),elements:te}),(0,t.createElement)("hr",{className:"yst-my-12"}),(0,t.createElement)(Se,{title:(0,o.__)("Other integrations","wordpress-seo"),elements:I})))}Se.propTypes={title:l.PropTypes.string,description:l.PropTypes.node,elements:l.PropTypes.array};const Ce=window.yoast.styledComponents,je=window.yoast.externals.contexts,Re=({theme:e,location:s,children:a})=>(0,t.createElement)(je.LocationProvider,{value:s},(0,t.createElement)(Ce.ThemeProvider,{theme:e},a));Re.propTypes={theme:c().object.isRequired,location:c().oneOf(["sidebar","metabox","modal"]).isRequired,children:c().element.isRequired};const Fe=Re,Be=[];let He=null;class De extends i.Component{constructor(e){super(e),this.state={registeredComponents:[]}}registerComponent(e,t){this.setState({registeredComponents:[...this.state.registeredComponents,{key:e,Component:t}]})}render(){return this.state.registeredComponents.map((({Component:e,key:s})=>(0,t.createElement)(e,{key:s})))}}window.YoastSEO=window.YoastSEO||{},window.YoastSEO._registerReactComponent=function(e,t){null===He||null===He.current?Be.push({key:e,Component:t}):He.current.registerComponent(e,t)},n()((()=>{const e={isRtl:Boolean((0,s.get)(window,"wpseoScriptData.metabox.isRtl",!1))};!function(e,a){const n=(0,s.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1});He=(0,i.createRef)();const r={isRtl:n.isRtl};(0,i.render)((0,t.createElement)(Fe,{theme:r,location:"sidebar"},(0,t.createElement)(N.SlotFillProvider,null,(0,t.createElement)(i.Fragment,null,a,(0,t.createElement)(De,{ref:He})))),document.getElementById(e)),Be.forEach((e=>{He.current.registerComponent(e.key,e.Component)}))}("wpseo-integrations",(0,t.createElement)(r.Root,{context:e},(0,t.createElement)(ze,null)))}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/introductions.js b/wp/wp-content/plugins/wordpress-seo/js/dist/introductions.js new file mode 100644 index 00000000..b62bdf67 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/introductions.js @@ -0,0 +1,13 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var a in s)e.o(s,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:s[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.React,s=window.wp.data,a=window.wp.domReady;var r=e.n(a);const n=window.wp.element,l=window.wp.hooks,i=window.yoast.uiLibrary,o=window.lodash,c=window.yoast.reduxJsToolkit,m="adminUrl",d=(0,c.createSlice)({name:m,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),y=(d.getInitialState,{selectAdminUrl:e=>(0,o.get)(e,m,"")});y.selectAdminLink=(0,c.createSelector)([y.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}})),d.actions,d.reducer;const u=window.wp.url,p="linkParams",w=(0,c.createSlice)({name:p,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),g=w.getInitialState,f={selectLinkParam:(e,t,s={})=>(0,o.get)(e,`${p}.${t}`,s),selectLinkParams:e=>(0,o.get)(e,p,{})};f.selectLink=(0,c.createSelector)([f.selectLinkParams,(e,t)=>t,(e,t,s={})=>s],((e,t,s)=>(0,u.addQueryArgs)(t,{...e,...s})));const h=w.actions,E=w.reducer,v=(0,c.createSlice)({name:"notifications",initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:s="default",title:a,description:r})=>({payload:{id:e||(0,c.nanoid)(),variant:t,size:s,title:a||"",description:r}})},removeNotification:(e,{payload:t})=>(0,o.omit)(e,t)}}),b=(v.getInitialState,v.actions,v.reducer,"pluginUrl"),x=(0,c.createSlice)({name:b,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),N=x.getInitialState,_={selectPluginUrl:e=>(0,o.get)(e,b,"")};_.selectImageLink=(0,c.createSelector)([_.selectPluginUrl,(e,t,s="images")=>s,(e,t)=>t],((e,t,s)=>[(0,o.trimEnd)(e,"/"),(0,o.trim)(t,"/"),(0,o.trimStart)(s,"/")].join("/")));const k=x.actions,L=x.reducer,P=window.wp.apiFetch;var S=e.n(P);const R="request",I="success",O="error",C="idle",$="loading",q="showPlay",j="askPermission",A="isPlaying",M="wistiaEmbedPermission",z=(0,c.createSlice)({name:M,initialState:{value:!1,status:C,error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${M}/${R}`,(e=>{e.status=$})),e.addCase(`${M}/${I}`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${M}/${O}`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,o.get)(t,"error.code",500),message:(0,o.get)(t,"error.message","Unknown")}}))}}),B=z.getInitialState,T={selectWistiaEmbedPermission:e=>(0,o.get)(e,M,{value:!1,status:C}),selectWistiaEmbedPermissionValue:e=>(0,o.get)(e,[M,"value"],!1),selectWistiaEmbedPermissionStatus:e=>(0,o.get)(e,[M,"status"],C),selectWistiaEmbedPermissionError:e=>(0,o.get)(e,[M,"error"],{})},U={...z.actions,setWistiaEmbedPermission:function*(e){yield{type:`${M}/${R}`};try{return yield{type:M,payload:e},{type:`${M}/${I}`,payload:{value:e}}}catch(t){return{type:`${M}/${O}`,payload:{error:t,value:e}}}}},W={[M]:async({payload:e})=>S()({path:"/yoast/v1/wistia_embed_permission",method:"POST",data:{value:Boolean(e)}})},F=z.reducer,Y=window.wp.i18n,H=window.yoast.propTypes;var V=e.n(H);V().string.isRequired;const Z=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),D=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),G=({learnMoreLink:e,thumbnail:s,wistiaEmbedPermission:a,upsellLink:r,isProductCopy:l,title:o,upsellLabel:c,newToText:m,bundleNote:d})=>{const{onClose:y,initialFocus:u}=(0,i.useModalContext)(),p={a:(0,t.createElement)(X,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,t.createElement)(D,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})};return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,t.createElement)("div",{className:"yst-relative yst-w-full"},(0,t.createElement)(be,{videoId:"vmrahpfjxp",thumbnail:s,wistiaEmbedPermission:a}),(0,t.createElement)(i.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,t.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,t.createElement)("span",{className:"yst-logo-icon"}),m))),(0,t.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,t.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},o),(0,t.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},l?(0,n.createInterpolateElement)((0,Y.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,Y.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for product titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),p):(0,n.createInterpolateElement)((0,Y.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,Y.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),p))),(0,t.createElement)("div",{className:"yst-w-full yst-flex yst-mt-10"},(0,t.createElement)(i.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:r,target:"_blank",ref:u},(0,t.createElement)(Z,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),c,(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,Y.__)("(Opens in a new browser tab)","wordpress-seo")))),d,(0,t.createElement)(i.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:y},(0,Y.__)("Close","wordpress-seo"))))};G.propTypes={learnMoreLink:V().string.isRequired,upsellLink:V().string.isRequired,thumbnail:V().shape({src:V().string.isRequired,width:V().string,height:V().string}).isRequired,wistiaEmbedPermission:V().shape({value:V().bool.isRequired,status:V().string.isRequired,set:V().func.isRequired}).isRequired,title:V().string,upsellLabel:V().string,newToText:V().string,isProductCopy:V().bool,bundleNote:V().oneOfType([V().string,V().element])},G.defaultProps={title:(0,Y.__)("Use AI to write your titles & meta descriptions!","wordpress-seo"),upsellLabel:(0,Y.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,Y.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),newToText:"Yoast SEO Premium",isProductCopy:!1,bundleNote:""};var J;function K(){return K=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",K({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1000 1000"},e),J||(J=t.createElement("path",{fill:"#fff",d:"M500 0C223.9 0 0 223.9 0 500s223.9 500 500 500 500-223.9 500-500S776.1 0 500 0Zm87.2 412.4c0-21.9 4.3-40.2 13.1-54.4s24-27.1 45.9-38.2l10.1-4.9c17.8-9 22.4-16.7 22.4-26 0-11.1-9.5-19.1-25-19.1-18.3 0-32.2 9.5-41.8 28.9l-24.7-24.8c5.4-11.6 14.1-20.9 25.8-28.1a70.8 70.8 0 0 1 38.9-11.1c17.8 0 33.3 4.6 45.9 14.2s19.4 22.7 19.4 39.4c0 26.6-15 42.9-43.1 57.3l-15.7 8c-16.8 8.5-25.1 16-27.4 29.4h85.4v35.4H587.2Zm-82.1 373.3c-157.8 0-285.7-127.9-285.7-285.7s127.9-285.7 285.7-285.7a286.4 286.4 0 0 1 55.9 5.5l-55.9 116.9c-90 0-163.3 73.3-163.3 163.3s73.3 163.3 163.3 163.3a162.8 162.8 0 0 0 106.4-39.6l61.8 107.2a283.9 283.9 0 0 1-168.2 54.8ZM705 704.1l-70.7-122.5H492.9l70.7-122.4H705l70.7 122.4Z"}))),X=({href:e,children:s,...a})=>(0,t.createElement)(i.Link,{target:"_blank",rel:"noopener noreferrer",...a,href:e},s,(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,Y.__)("(Opens in a new browser tab)","wordpress-seo")));X.propTypes={href:V().string.isRequired,children:V().node},X.defaultProps={children:null};const ee=t.forwardRef((function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 8l4 4m0 0l-4 4m4-4H3"}))}));var te,se,ae;function re(){return re=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",re({xmlns:"http://www.w3.org/2000/svg",id:"star-rating-half_svg__Layer_1","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),te||(te=t.createElement("defs",null,t.createElement("style",null,".star-rating-half_svg__cls-1{fill:#fbbf24}"))),se||(se=t.createElement("path",{d:"M250 392.04 98.15 471.87l29-169.09L4.3 183.03l169.77-24.67L250 4.52l75.93 153.84 169.77 24.67-122.85 119.75 29 169.09L250 392.04z",className:"star-rating-half_svg__cls-1"})),ae||(ae=t.createElement("path",{d:"m250 9.04 73.67 149.27.93 1.88 2.08.3 164.72 23.94-119.19 116.19-1.51 1.47.36 2.07 28.14 164.06-147.34-77.46-1.86-1-1.86 1-147.34 77.46 28.14-164.06.36-2.07-1.51-1.47L8.6 184.43l164.72-23.9 2.08-.3.93-1.88L250 9.04m0-9-77.25 156.49L0 181.64l125 121.89-29.51 172L250 394.3l154.51 81.23-29.51-172 125-121.89-172.75-25.11L250 0Z",className:"star-rating-half_svg__cls-1"})),t.createElement("path",{d:"m500 181.64-172.75-25.11L250 0v394.3l154.51 81.23L375 303.48l125-121.84z",style:{fill:"#f3f4f6"}}));function le(){return le=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",le({xmlns:"http://www.w3.org/2000/svg","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),t.createElement("path",{d:"m250 0 77.25 156.53L500 181.64 375 303.48l29.51 172.05L250 394.3 95.49 475.53 125 303.48 0 181.64l172.75-25.11L250 0z",style:{fill:"#fbbf24"}}));var oe,ce,me,de,ye,ue,pe,we,ge;function fe(){return fe=Object.assign?Object.assign.bind():function(e){for(var t=1;tt.createElement("svg",fe({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 500 500"},e),oe||(oe=t.createElement("path",{fill:"#a4286a",d:"M80 0h340a80 80 0 0 1 80 80v420H80a80 80 0 0 1-80-80V80A80 80 0 0 1 80 0z"})),ce||(ce=t.createElement("path",{fill:"#6c2548",d:"M437.61 2 155.89 500H500V80a80 80 0 0 0-62.39-78z"})),me||(me=t.createElement("path",{fill:"#fff",d:"M74.4 337.3v34.9c21.6-.9 38.5-8 52.8-22.5s27.4-38 39.9-72.9l92.6-248h-44.8L140.3 236l-37-116.2h-41l54.4 139.8a57.54 57.54 0 0 1 0 41.8c-5.5 14.2-15.4 30.9-42.3 35.9z"})),de||(de=t.createElement("circle",{cx:368.33,cy:124.68,r:97.34,fill:"#9fda4f",transform:"rotate(-45 368.335 124.68)"})),ye||(ye=t.createElement("path",{fill:"#77b227",d:"m416.2 39.93-95.74 169.51A97.34 97.34 0 1 0 416.2 39.93z"})),ue||(ue=t.createElement("path",{fill:"#fec228",d:"m294.78 254.75-.15-.08-.13-.07a63.6 63.6 0 0 0-62.56 110.76h.13a63.6 63.6 0 0 0 62.71-110.67z"})),pe||(pe=t.createElement("path",{fill:"#f49a00",d:"m294.5 254.59-62.56 110.76a63.6 63.6 0 1 0 62.56-110.76z"})),we||(we=t.createElement("path",{fill:"#ff4e47",d:"M222.31 450.07A38.16 38.16 0 0 0 203 416.83a38.18 38.18 0 1 0 19.41 33.27z"})),ge||(ge=t.createElement("path",{fill:"#ed261f",d:"m202.9 416.8-37.54 66.48a38.17 38.17 0 0 0 37.54-66.48z"}))),Ee=({link:e,linkProps:s,promotions:a})=>{const r=(0,n.useMemo)((()=>(0,Y.__)("Use AI to generate titles and meta descriptions, automatically redirect deleted pages, get 24/7 support, and much, much more!","wordpress-seo")),[]),l=(0,n.createInterpolateElement)((0,Y.sprintf)(/* translators: %1$s and %2$s expand to a span wrap to avoid linebreaks. %3$s expands to "Yoast SEO Premium". */ +(0,Y.__)("%1$sGet%2$s %3$s","wordpress-seo"),"","","Yoast SEO Premium"),{nowrap:(0,t.createElement)("span",{className:"yst-whitespace-nowrap"})}),o=a.includes("black-friday-2023-promotion"),c=(0,n.createInterpolateElement)((0,Y.sprintf)(/* translators: %1$s and %2$s expand to strong tags. */ +(0,Y.__)("%1$sSAVE 30%%%2$s on your 12 month subscription","wordpress-seo"),"",""),{strong:(0,t.createElement)("strong",null)});return(0,t.createElement)("div",{className:"yst-p-6 yst-rounded-lg yst-text-white yst-bg-primary-500 yst-shadow"},(0,t.createElement)("figure",{className:"yst-logo-square yst-w-16 yst-h-16 yst-mx-auto yst-overflow-hidden yst-border yst-border-white yst-rounded-xl yst-rounded-br-none yst-relative yst-z-10 yst-mt-[-2.6rem]"},(0,t.createElement)(he,null)),o&&(0,t.createElement)("div",{className:"sidebar__sale_banner_container"},(0,t.createElement)("div",{className:"sidebar__sale_banner"},(0,t.createElement)("span",{className:"banner_text"},(0,Y.__)("BLACK FRIDAY - 30% OFF","wordpress-seo")))),(0,t.createElement)(i.Title,{as:"h2",className:"yst-mt-6 yst-text-base yst-font-extrabold yst-text-white"},l),(0,t.createElement)("p",{className:"yst-mt-2"},r),o&&(0,t.createElement)("div",{className:"yst-text-center yst-border-t-[1px] yst-border-white yst-italic yst-mt-3"},(0,t.createElement)("p",{className:"yst-text-[10px] yst-my-3 yst-mx-0"},c)),(0,t.createElement)(i.Button,{as:"a",variant:"upsell",href:e,target:"_blank",rel:"noopener",className:"yst-flex yst-justify-center yst-gap-2 yst-mt-4 focus:yst-ring-offset-primary-500",...s},(0,t.createElement)("span",null,o?(0,Y.__)("Claim your 30% off now!","wordpress-seo"):l),(0,t.createElement)(ee,{className:"yst-w-4 yst-h-4 yst-icon-rtl"})),(0,t.createElement)("p",{className:"yst-text-center yst-text-xs yst-mx-2 yst-font-light yst-leading-5 yst-mt-2"},(0,Y.__)("Only $/€/£99 per year (ex VAT)","wordpress-seo"),(0,t.createElement)("br",null),(0,Y.__)("30-day money back guarantee.","wordpress-seo")),(0,t.createElement)("hr",{className:"yst-border-t yst-border-primary-300 yst-my-4"}),(0,t.createElement)("a",{className:"yst-block yst-mt-4 yst-no-underline",href:"https://www.g2.com/products/yoast-yoast/reviews",target:"_blank",rel:"noopener noreferrer"},(0,t.createElement)("span",{className:"yst-font-medium yst-text-white hover:yst-underline"},(0,Y.__)("Read reviews from real users","wordpress-seo")),(0,t.createElement)("span",{className:"yst-flex yst-gap-2 yst-mt-2 yst-items-center"},(0,t.createElement)(Q,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)("span",{className:"yst-flex yst-gap-1"},(0,t.createElement)(ie,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(ie,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(ie,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(ie,{className:"yst-w-5 yst-h-5"}),(0,t.createElement)(ne,{className:"yst-w-5 yst-h-5"})),(0,t.createElement)("span",{className:"yst-text-sm yst-font-semibold yst-text-white"},"4.6 / 5"))))};Ee.propTypes={link:V().string.isRequired,linkProps:V().object,promotions:V().array},Ee.defaultProps={linkProps:{},promotions:[]},V().node.isRequired;const ve=window.yoast.reactHelmet,be=({videoId:e,thumbnail:s,wistiaEmbedPermission:a})=>{const[r,l]=(0,n.useState)(a.value?A:q),o=(0,n.useCallback)((()=>l(A)),[l]),c=(0,n.useCallback)((()=>{a.value?o():l(j)}),[a.value,o,l]),m=(0,n.useCallback)((()=>l(q)),[l]),d=(0,n.useCallback)((()=>{a.set(!0),o()}),[a.set,o]);return(0,t.createElement)(t.Fragment,null,a.value&&(0,t.createElement)(ve.Helmet,null,(0,t.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,t.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},r===q&&(0,t.createElement)("button",{type:"button",className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:c},(0,t.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...s})),r===j&&(0,t.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,t.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},a.status===$&&(0,t.createElement)(i.Spinner,null),a.status!==$&&(0,Y.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,Y.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo"),"Yoast SEO","Wistia")),(0,t.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,t.createElement)(i.Button,{type:"button",variant:"secondary",onClick:m,disabled:a.status===$},(0,Y.__)("Deny","wordpress-seo")),(0,t.createElement)(i.Button,{type:"button",variant:"primary",onClick:d,disabled:a.status===$},(0,Y.__)("Allow","wordpress-seo")))),a.value&&r===A&&(0,t.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===e&&(0,t.createElement)(i.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==e&&(0,t.createElement)("div",{className:`wistia_embed wistia_async_${e} videoFoam=true`}))))};be.propTypes={videoId:V().string.isRequired,thumbnail:V().shape({src:V().string.isRequired,width:V().string,height:V().string}).isRequired,wistiaEmbedPermission:V().shape({value:V().bool.isRequired,status:V().string.isRequired,set:V().func.isRequired}).isRequired};const xe=({learnMoreLink:e,thumbnail:s,wistiaEmbedPermission:a,upsellLink:r,upsellLabel:l})=>{const{onClose:o,initialFocus:c}=(0,i.useModalContext)(),m={a:(0,t.createElement)(X,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,t.createElement)(D,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"}),br:(0,t.createElement)("br",null)};return(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,t.createElement)("div",{className:"yst-relative yst-w-full"},(0,t.createElement)(be,{videoId:"vun9z1dpfh",thumbnail:s,wistiaEmbedPermission:a}),(0,t.createElement)(i.Badge,{className:"yst-absolute yst-right-0 yst-mr-4 yst-text-center yst-justify-center",variant:"info",style:{top:"-8px"}},(0,Y.__)("Beta","wordpress-seo-premium"))),(0,t.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,t.createElement)("span",{className:"yst-logo-icon"}),"Yoast SEO Premium"))),(0,t.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,t.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,t.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,Y.sprintf)(/* translators: %s: Expands to "Yoast AI" */ +(0,Y.__)("Optimize your SEO content with %s","wordpress-seo"),"Yoast AI")),(0,t.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,n.createInterpolateElement)((0,Y.sprintf)(/* translators: %1$s is a break tag; %2$s and %3$s are anchor tags; %4$s is the arrow icon. */ +(0,Y.__)("Make content editing a breeze! Optimize your SEO content with quick, actionable suggestions at the click of a button.%1$s%2$sLearn more%3$s%4$s","wordpress-seo"),"
            ","","",""),m))),(0,t.createElement)("div",{className:"yst-w-full yst-flex yst-mt-6"},(0,t.createElement)(i.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:r,target:"_blank",ref:c},(0,t.createElement)(Z,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),l,(0,t.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,Y.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,t.createElement)(i.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:o},(0,Y.__)("Close","wordpress-seo"))))};xe.propTypes={learnMoreLink:V().string.isRequired,upsellLink:V().string.isRequired,thumbnail:V().shape({src:V().string.isRequired,width:V().string,height:V().string}).isRequired,wistiaEmbedPermission:V().shape({value:V().bool.isRequired,status:V().string.isRequired,set:V().func.isRequired}).isRequired,upsellLabel:V().string},xe.defaultProps={upsellLabel:(0,Y.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,Y.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")};const Ne="yoast-seo/introductions",_e=()=>{const e=(0,s.useSelect)((e=>e(Ne).selectLink("https://yoa.st/ai-fix-assessments-upsell-learn-more")),[]),a=(0,s.useSelect)((e=>e(Ne).selectLink("https://yoa.st/ai-fix-assessments-upsell")),[]),r=(0,s.useSelect)((e=>e(Ne).selectImageLink("ai-fix-assessments-thumbnail.png")),[]),l=(0,n.useMemo)((()=>({src:r,width:"432",height:"244"})),[r]),i=(0,s.useSelect)((e=>e(Ne).selectWistiaEmbedPermissionValue()),[]),o=(0,s.useSelect)((e=>e(Ne).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:c}=(0,s.useDispatch)(Ne),m=(0,n.useMemo)((()=>({value:i,status:o,set:c})),[i,o,c]);return(0,t.createElement)(xe,{learnMoreLink:e,upsellLink:a,thumbnail:l,wistiaEmbedPermission:m})};window.YoastSEO=window.YoastSEO||{};const ke=(0,n.createContext)({}),Le=({children:e,initialComponents:a})=>{const[r,l]=(0,n.useState)(a),i=(0,s.useSelect)((e=>e(Ne).selectIntroductions()),[]),c=(0,n.useCallback)(((e,t)=>{(0,o.find)(i,{id:e})?l((s=>({...s,[e]:t}))):console.error("Warning: Introductions received a registration for an unknown key:",e)}),[i,l]);return(0,n.useEffect)((()=>{window.YoastSEO._registerIntroductionComponent=c}),[c]),(0,t.createElement)(ke.Provider,{value:r},e)};Le.propTypes={children:V().node.isRequired,initialComponents:V().object.isRequired};const Pe=()=>{const e=(0,s.useSelect)((e=>e(Ne).selectCurrentIntroduction()),[]),a=(0,n.useContext)(ke),r=(0,n.useMemo)((()=>null==a?void 0:a[null==e?void 0:e.id]),[e,a]);return r?(0,t.createElement)(r,null):null},Se=({children:e})=>{const[s,a]=(0,n.useState)(!0),r=(0,n.useRef)(null),l=(0,n.useCallback)((()=>a(!1)),[]);return(0,t.createElement)(i.Modal,{className:"yst-introduction-modal yst-h-[calc(100vh - 1rem)] sm:yst-h-[calc(100vh - 2rem)] md:yst-h-[calc(100vh - 5rem)]) yst-overflow-y-auto",isOpen:s,onClose:l,initialFocus:r},(0,t.createElement)(i.Modal.Panel,{className:"yst-max-w-lg yst-p-0 yst-rounded-3xl"},e))};Se.propTypes={children:V().node.isRequired};const Re="introductions",Ie=(0,c.createEntityAdapter)({selectId:e=>e.id,sortComparer:(e,t)=>e.priority===t.priority?0:e.priority({id:e.id||(0,c.nanoid)(),priority:e.priority||0}),Ce=(0,c.createSlice)({name:Re,initialState:Ie.getInitialState({current:0}),reducers:{addIntroduction:{reducer:Ie.addOne,prepare:e=>({payload:Oe(e)})},addIntroductions:{reducer:Ie.addMany,prepare:e=>({payload:(0,o.map)(e,Oe)})},setIntroductions:{reducer:Ie.setAll,prepare:e=>({payload:(0,o.map)(e,Oe)})}}}),$e=Ce.getInitialState,qe=Ie.getSelectors((e=>(0,o.get)(e,Re,{}))),je={selectCurrentIntroductionIndex:e=>(0,o.get)(e,[Re,"current"],0),selectIntroduction:qe.selectById,selectIntroductions:qe.selectAll};je.selectCurrentIntroduction=(0,c.createSelector)([je.selectCurrentIntroductionIndex,je.selectIntroductions],((e,t)=>t[e]));const Ae=Ce.actions,Me=Ce.reducer,ze="wpseoIntroductions";r()((()=>{const e=(0,o.get)(window,`${ze}.introductions`,[]);if((0,o.isEmpty)(e))return;((e={})=>{(0,s.register)((e=>(0,s.createReduxStore)(Ne,{actions:{...Ae,...h,...k,...U},selectors:{...je,...f,..._,...T},initialState:(0,o.merge)({},{[Re]:$e(),[p]:g(),[b]:N(),[M]:B()},e),reducer:(0,s.combineReducers)({[Re]:Me,[p]:E,[b]:L,[M]:F}),controls:{...W}}))(e))})({[p]:(0,o.get)(window,`${ze}.linkParams`,{}),[b]:(0,o.get)(window,`${ze}.pluginUrl`,""),[M]:{value:"1"===(0,o.get)(window,`${ze}.wistiaEmbedPermission`,!1)}}),(0,s.dispatch)(Ne).setIntroductions(e);const a={isRtl:Boolean((0,o.get)(window,`${ze}.isRtl`,!1))},r={"ai-fix-assessments-upsell":_e},c=document.createElement("div");c.id="wpseo-introductions",document.body.appendChild(c),(0,n.render)((0,t.createElement)(i.Root,{context:a},(0,t.createElement)(Le,{initialComponents:r},(0,t.createElement)(Se,null,(0,t.createElement)(Pe,null)))),c,(()=>{(0,l.doAction)("yoast.introductions.ready")}))}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/ar.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/ar.js new file mode 100644 index 00000000..27845ed5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/ar.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>de});const r=window.yoast.analysis,n=["قليل","بعض","واحد","واحد","إثنان","ثلاثة","أربعة","خمسة","ستة","سبعة","ثمانية","تسعة","عشرة","هذا","هذه","ذلك","تلك","هذين","هذان","هتين","هتان","هؤلا","أولائك","هؤلاء"],o=["كذلك","ولكن","ولذلك","حاليا","أخيرا","بالطبع","ثم","بما","كما","لما","إنما","ليتما","إما","أينما","حيثما","كيÙما","أيما","أيّما","بينما","ممّا","إلاّ","ألّا","لئلّا","حبّذا","سيّما","لكن","بالتالي","هكذا","أو","أم","لذلك","مثلا","تحديدا","عموما","لاسيما","خصوصا","بالأخص","خاصة","بالمثل","لأن","بسبب","إذا","عندما","حين","متى","قبل","بعد","منذ","أيضا","ريثما","بين"],s=o.concat(["إلا إذا","إلا أن","إلى آخره","إلى الأبد","إلى أن","آن لك أن","آن له أن","آن لعلي","بعد ذلك","بما أن","بما Ùيه","حتى لا","حتى لو","عليك أن","علينا أن","عليه أن","عليكم أن","Ùيما بعد","لا أحد","لا بأس أن","لا بد من","لا بد من أن","لا سيما","لا شيء","لا غير","لا هذا ولا ذاك","له أن","لها أن","لك أن","لكم أن","ما لم","مع هذا ØŒ مع ذلك","من أجل أن","من أجلك","من أجلها","من أجل","من دون ØŒ بدون","منذ ذلك الحين","Ø¨Ø§Ù„Ø¥Ø¶Ø§ÙØ© إلى ذلك","ÙÙŠ نهاية المطاÙ","ÙÙŠ الوقت الحالي","علاوة على ذلك","بدلا من ذلك","ÙÙŠ الواقع","بناء على ذلك","ومع ذلك","ÙÙŠ الحقيقة","من ناحية أخرى","لا يزال","ÙˆÙÙŠ الوقت Ù†ÙØ³Ù‡","زيادة على ذلك","زيادة على","علاوة على","ما عدا","مع ذلك","غير أن","من جهة أخرى","على عكس ذلك","نتيجة لذلك","من ثم","على سبيل المثال","على وجه الخصوص","على وجه التحديد","Ø¨ØµÙØ© عامة","قبل كل شيء","ÙÙŠ النهاية","بصورة شاملة","رغم أن","مع ان","على الرغم من","من هنا"," لهذا السبب","ÙÙŠ حالة","ÙÙŠ أقرب وقت","على أي حال","ÙÙŠ Ù†ÙØ³ الوقت","من بين"]);function i(e){let t=e;return e.forEach((r=>{(r=r.split("-")).length>0&&r.filter((t=>!e.includes(t))).length>0&&(t=t.concat(r))})),t}const c=["الـ"],a=["ØµÙØ±","واحد","واحدة","أحد","إحدى","إثنان","اثنتان","إثنين","ثنتين","إثنتين","إثنا","إثنى","إثنتا","إثنتي","ثلاث","ثلاثة","أربع","أربعة","خمس","خمسة","ست","ستة","سبع","سبعة","ثمان","ثمانية","تسع","تسعة","عشر","عشرة","عشرون","ثلاثون","أربعين","أربعون","خمسون","ستون","سبعون","ثمانون","تسعون","مئة","مائة","مئتان","ثلاثمئة","ثلاثمائة","أربعمئة","أربعمائة","خمسمئة","خمسمائة","ستمئة","ستمائة","سبعمئة","سبعمائة","ثمانمئة","ثمانمائة","تسعمئة","تسعمائة","ألÙ","ألآÙ","Ø£Ù„ÙØ§","ألÙين","مليون","ملايين","مليار"],u=["الأول","الأولى","الثاني","الثانية","الثالث","الثالثة","الرابع","الرابعة","الخامس","الخامسة","السادس","السادسة","السابع","السابعة","الثامن","الثامنة","التاسع","التاسعة","العاشر","العاشرة","الحادي","الحادية","العشرون","الثلاثون","الأربعون","الخمسون","الستون","السبعون","الثمانون","التسعون","المئة","المائة"],l=["أنا","انت","هو","هي","نحن","أنتما","هما","أنتم","أنتن","هم","هن","وأنا","وأنت","وهو","وانا","ونحن","وهي","وانت","أنتي","Ùهو","وهم","وأنتما"],d=["إياه","إياهما","إياهم","إياها","إياكما","إياهن","إياك","إياكم","إياكن","إياي","إيانا"],f=["هذا","هذه","هذان","هذين","هتان","هـتين","ذا","ذان","ذين","أولئ","ذلك","ذانك","ذينك","تلك","تانك","تينك","أولئك","هؤلاء","ذاك","هاتان","هاتين","ذه","هأولئ","ذلكم","ذلكم","وهذا","هذة","أولئك"],m=["يا","أي","هيا","Ø£","Ø¢","أيها","أيتها"],h=["جميع","كل","بعض","كثير","كثيرة","عديد","عديدة","لبعض","قليلا","كاÙية","كاÙÙŠ","صغير","صغيرة","قليل","قليلة","كثيرا","بالكثير","أكثر","اكبر","اغلب","عديدة","عديد","قليلون","أقل","كل","الكثير","المزيد","اكثر","الأقل","يكÙÙŠ","العديد","كله","جميعا","كلها","وكل","كلنا","كثيرة","الأكثر","ببعض","بضعة","عدة"],g=["Ù†ÙØ³ÙŠ","Ù†ÙØ³Ùƒ","Ù†ÙØ³Ù‡","Ù†ÙØ³Ù‡Ø§","Ø£Ù†ÙØ³Ù†Ø§","أنسÙكم","Ø£Ù†ÙØ³Ù‡Ù…","Ø£Ù†ÙØ³Ù‡Ù…ا","Ø£Ù†ÙØ³ÙƒÙ…ا","Ø£Ù†ÙØ³ÙƒÙ†","Ø£Ù†ÙØ³Ù‡Ù†","Ø¨Ù†ÙØ³ÙŠ"],w=["ليس","جميع","الكل","الجميع","شخص","شيء","شيئا","أخرى","آخرين","أي","أيا","من","الآخرين","أحد","شئ","أخرى","شىء","احد","أية","اخرى","البعض","أخر","الآخر","أحدهم","الأخرى","الشئ","بعضنا","بشيء","شي","الغير"],p=["الذي","التي","الذى","التى","الذين","مالذي","اللذان","الذين","اللتان","اللاتي","الذي","اللتين","اللذين","اللواتي"],x=["جدا","حقا","للغاية","تماما","ÙØ¹Ù„ا"],S=["ماذا","لمن","ما","أي","أى","وماذا","وما","بماذا","ماهو","ماهذا"],R=["من","ومن"],W=["اين","كيÙ","لماذا","لم","سواء","أينما","كيÙما","مـتى","كم","هل","أين","أهذا","وكيÙ","وهل"],v=["هنا","هناك","هنالك"],y=["دائما","مرة","مرتين"],F=["يجب","سوÙ","قد","أستطيع","يستطيع","نستطيع","تستطيع","استطيع","تستطيعين","استطعت","استطاعت","استطاع","استطعتما","استطاعتا","استطاعا","استطعنا","استطعتن","استطعتم","استطعن","استطاعوا","تستطيعان","يستطيعان","تستطعن","تستطيعون","يستطعن","يستطيعون","تستطيعي","تستطيعا","يستطيعا","تستطيعوا","يستطيعوا","استطيعت","استطيعتا","استطيعا","استطيعوا","تستطاعين","تستطاع","يستطاع","نستطاع","تستطاعان","يستطاعان","تستطاعون","يستطاعون","أستطاع","تستطاعي","تستطاعا","يستطاعا","يستطاعوا","تستطاعوا","استطيعي","يمكنني","يمكن","يمكننى","بإمكانك","لابد","ينبغي","وسوÙ","هلا","بد","وقد","ولقد","يمكنه","يمكنهما","يمكنهم","يمكنها","يمكنكما","يمكنهن","يمكنك","يمكنكم","يمكنكن","يمكني","يمكننا"],b=["لدي","لديك","لدينا","لديه","لديها","لديهم","لديهما","لديكم","لديكما","لديهن","لديكن","صبحت","صبح","صبحتما","صبحا","صبحتا","صبحنا","صبحتن","صبحتم","صبحن","صبحوا","أصبح","تصبحين","تصبح","يصبح","تصبحان","يصبحان","نصبح","تصبحن","تصبحون","تصبحي","تصبحا","يصبحا","تصبحوا","يصبحوا","اصبحي","اصبحوا","اصبحا","ابقى","كان","كنت","كانت","يكون","كنتما","كانتا","كانا","كنا","كن","كانوا","كنتم","أكون","تكونين","تكون","تكونان","يكونان","نكون","تكونون","يكن","يكونون","تكوني","تكونا","يكونا","تكونوا","يكونوا","كونا","كونوا","كن","أكن","اكون","وكان","كوني","اكن","سنكون","كنا","سيكون","يكن","ستكون","تكن","سأكون","بت","باتت","بات","بتما","باتتا","باتا","بتنا","بتن","بتم","باتوا","أبيت","بت","صرت","صرت","صار","صرتما","صارتا","صارا","صرنا","صرتن","صرتم","صرن","صاروا","أصير","تصيرين","تصير","يصير","تصيران","يصيران","نصير","تصرن","يصرن","تصيرون","يصيرون","تصيري","تصيرا","يصيرا","تصيروا","يصيروا","ليس","وليس","ليست","ليسوا","ليسا","ليسنا","ليسن","أليس","اليس","لست","لسنا"],L=["أن","ÙÙŠ","على","إلى","ان","عن","ÙÙ‰","مع","الى","بعد","بدون","تحت","طوال","علي","غير","لدى","حول","خلال","لكي","بين","الي","خارج","بشأن","Ùوق","دون","لـ","بـ","بلا","بواسطة","ضد","أمام","ÙˆÙÙŠ","وشك","نحو","ذو","أسÙÙ„","ب","خلÙ","بجانب","عدا","طبقا","بعد","عكس","منذ"],z=["إليه","إليهما","إليهم","إليها","إليكما","إليهن","إليك","إليكم","إليكن","إلي","إلينا","عليه","عليهما","عليهم","عليها","عليكما","عليهن","عليك","عليكم","عليكن","علي","علينا","عنه","عنهما","عنهم","عنها","عنكما","عنهن","عنك","عنكم","عنكن","عني","عننا","له","لهما","لهم","لها","لكما","لهن","لك","لكم","لكن","لي","لنا","معه","معهما","معهم","معها","معكما","معهن","معك","معكم","معكن","معي","معنا","منه","منهما","منهم","منها","منكم","منهن","منك","منكم","منكن","مني","منا","Ùيه","Ùيهما","Ùيهم","Ùيها","Ùيكما","Ùيهن","Ùيك","Ùيكم","به","بهما","بهم","بها","بكما","بهن","بك","بكم","بكن","بي","بنا","بينهم","بينهما","بينكما","بينكم","بتلك","بذلك","ÙØ£Ù†Øª","بيننا","بهذا","بهذه","ÙØ£Ù†Ø§","Ùهذا","Ùيما","أجلك","كهذا","لأي","لذلك","لما","Ù„Ù†ÙØ³Ùƒ","لهذا","لهذه"],E=["داخل","ضمن","قدما"],O=["Ùˆ","Ùˆ/او","او","أو"],P=["إذا","لو","اذا","وإذا","أذا"],_=["أقول","تقول","تقولين","تقولان","يقول","تقول","يقولان","تقولان","نقول","تقولون","تقلن","يقولون","قلت","قلتما","قال","قالت","قالا","قالتا","قلنا","قلتما","قلتن","قالوا","قلنا","تدعي","يدعي","تدعيان","تدعون","يدعون","يدعين","ادعيت","ادعيت","ادعيتما","ادعى","ادعت","ادعينا","ادعيتما","ادعيتن","ادعوا","ادعينا","تسأل","تسألين","يسأل","تسأل","نسأل","تسألون","تسألن","يسألون","يسألن","سألت","سألنا","سألتم","سألتن","سألوا","سألنا","تشرح","تشرحين","يشرح","تشرح","نشرح","تشرحون","تشرحن","يشرحون","يشرحن","شرحت","شرح","شرحت","شرحنا","شرحتم","شرحتن","شرحوا","شرحنا","شرحن","أعتقد","تعتقد","تعتقدين","يعتقد","تعتقد","تعتقدون","تعتقدن","يعتقدون","يعتقدن","اعتقدت","اعتق","اعتقدت","أتحدث","تتحدث","تتحدثين","يتحدث","تتحدث","نتحدث","تحدثت","تحدث","تحدثت","تحدثوا","تحدثن","أعلن","تعلن","تعلنين","يعلن","تعلن","نعلن","يعلنون","يعلن","أعلنت","أعلن","أعلنت","أعلنا","أعلنوا","أعلن","أناقش","تناقش","تناقشين","يناقش","تناقش","نناقش","تناقشون","تناقشن","يناقشون","يناقشن","ناقشت","ناقشت","ناقشت","ناقشت","ناقشت","ناقشنا","ناقشتم","ناقشتن","ناقشوا","ناقشن","Ø£Ùهم","تÙهم","تÙهمين","ÙŠÙهم","تÙهم","Ù†Ùهم","ÙŠÙهمون","ÙŠÙهمن","Ùهمت","Ùهم","Ùهمت","Ùهمنا","Ùهموا","Ùهمن"],M=["يعني","أحتاج","يعمل","تعني","تقوم","أود","عندك","البقاء","حاولت","توجد","دعونا","تÙكر","جئت","يريدون","أتيت","ÙØ¹Ù„ته","تقصد","زال","إرادة‎","مريد‎","مراد‎","أردت‎","أردت‎","أردت‎","أرادت‎","أريد‎","تريد‎","تريدين‎","يريد‎","تريد‎","أريد‎","تريد‎","يريد‎","تريد‎","أرد‎","ترد‎","يرد‎","ترد‎","أرد‎","أريدي‎","أردتما","تريدان‎","تريدا‎","تريدا‎","أريدا‎","أرادا‎","أرادتا‎","يريدان‎","تريدان‎","يريدا‎","تريدا‎","أردنا‎","نريد‎","نريد‎","نرد‎","أردتم‎","أردتن‎","تريدون‎","تردن‎","تريدوا‎","تردن‎","تريدوا‎","تردن‎","أريدوا‎","أردن‎","أرادوا‎","أردن‎","يريدون‎","يردن‎","يريدوا‎","أردت‎","أراد","أراد","أرد‎","أردت‎","أريد‎","أردتما‎","أريدا‎","أردنا‎","أردتم‎","أريدوا‎","أردت‎","أريدت‎","أريدتا‎","أردتن‎","أردن‎","تراد‎","يراد‎","ترادان‎","يرادان‎","نراد‎","ترادون‎","يرادون‎","ترادين‎","تراد‎","ترادان‎","تردن‎","يردن‎","تراد‎","يراد‎","ترادا‎","يرادا‎","نراد‎","ترادوا‎","يرادوا‎","ترادي‎","تراد‎","ترادا‎","تردن‎","يردن‎","ترد‎","يرد‎","ترادا‎","يرادا‎","نرد‎","ترادوا‎","يرادوا‎","ترادي‎","ترد‎","ترادا‎","تردن‎","يردن‎","أرد‎","اعتقاد‎","معتقد‎","معتقد‎","اعتقدت‎","اعتقدت‎","اعتقد","اعتقدتما‎","اعتقدا‎","اعتقدنا‎","اعتقدتم‎","اعتقدوا‎","اعتقدت‎","اعتقدت‎","اعتقدتا‎","اعتقدتن‎","اعتقدن‎","تعتقد‎","يعتقد‎","تعتقدان‎","يعتقدان‎","نعتقد‎","تعتقدون‎","يعتقدون‎","تعتقدين‎","تعتقد‎","تعتقدان‎","تعتقدن‎","يعتقدن‎","تعتقد‎","يعتقد‎","تعتقدا‎","يعتقدا‎","نعتقد‎","تعتقدوا‎","يعتقدوا‎","تعتقدي‎","تعتقد‎","تعتقدا‎","تعتقدن‎","يعتقدن‎","تعتقد‎","يعتقد‎","تعتقدا‎","يعتقدا‎","نعتقد‎","تعتقدوا‎","يعتقدوا‎","تعتقدي‎","تعتقد‎","تعتقدا‎","تعتقدن‎","يعتقدن‎","اعتقدي‎","اعتقدن‎","اعتقد","اعتقدا‎","اعتقدوا‎","اعتقدت‎","اعتقدت‎","اعتقد","اعتقدتما‎","اعتقدا‎","اعتقدنا‎","اعتقدتم‎","اعتقدوا‎","اعتقدت‎","اعتقدت‎","اعتقدتا‎","اعتقدتن‎","اعتقدن‎","أعتقد‎","تعتقد‎","يعتقد‎","تعتقدان‎","يعتقدان‎","نعتقد‎","تعتقدون‎","يعتقدون‎","تعتقدين‎","تعتقد‎","تعتقدان‎","تعتقدن‎","يعتقدن‎","أعتقد‎","تعتقد‎","يعتقد‎","تعتقدا‎","يعتقدا‎","نعتقد‎","تعتقدوا‎","يعتقدوا‎","تعتقدي‎","تعتقد‎","تعتقدا‎","تعتقدن‎","يعتقدن‎","أعتقد‎","تعتقد‎","يعتقد‎","تعتقدا‎","يعتقدا‎","نعتقد‎","تعتقدوا‎","يعتقدوا‎","تعتقدي‎","تعتقد‎","تعتقدا‎","تعتقدن‎","يعتقدن‎","اعتقد","اعتقدا‎","اعتقدوا‎","إيجاد‎","موجد‎","موجد‎","أوجدت‎","أوجدت‎","أوجد","أوجدتما‎","أوجدا‎","أوجدنا‎","أوجدتم‎","أوجدوا‎","أوجدت‎","أوجدت‎","أوجدتا‎","أوجدتن‎","أوجدن‎","أوجد","توجد‎","يوجد‎","توجدان‎","يوجدان‎","نوجد‎","توجدون‎","يوجدون‎","توجدين‎","توجد‎","توجدان‎","توجدن‎","يوجدن‎","أوجد","توجد‎","يوجد‎","توجدا‎","يوجدا‎","نوجد‎","توجدوا‎","يوجدوا‎","توجدي‎","توجد‎","توجدا‎","توجدن‎","يوجدن‎","أوجد","توجد‎","يوجد‎","توجدا‎","يوجدا‎","نوجد‎","توجدوا‎","يوجدوا‎","توجدي‎","توجد‎","توجدا‎","توجدن‎","يوجدن‎","أوجد","أوجدا‎","أوجدوا‎","أوجدي‎","أوجدن‎","أوجدت‎","أوجدت‎","أوجد","أوجدتما‎","أوجدا‎","أوجدنا‎","أوجدتم‎","أوجدوا‎","أوجدت‎","أوجدت‎","أوجدتا‎","أوجدتن‎","أوجدن‎","أوجد","توجد‎","يوجد‎","توجدان‎","يوجدان‎","نوجد‎","توجدون‎","يوجدون‎","توجدين‎","توجد‎","توجدان‎","توجدن‎","يوجدن‎","أوجد","توجد‎","يوجد‎","توجدا‎","يوجدا‎","نوجد‎","توجدوا‎","يوجدوا‎","توجدي‎","توجد‎","توجدا‎","توجدن‎","يوجدن‎","أوجد","توجد‎","يوجد‎","توجدا‎","يوجدا‎","نوجد‎","توجدوا‎","يوجدوا‎","توجدي‎","توجد‎","توجدا‎","توجدن‎","يوجدن‎","اعتقد","اريد","أذهب","إذهاب‎","مذهب‎","مذهب‎","أذهبت‎","أذهبت‎","أذهب","أذهبتما‎","أذهبا‎","أذهبنا‎","أذهبتم‎","أذهبوا‎","أذهبت‎","أذهبت‎","أذهبتا‎","أذهبتن‎","أذهبن‎","أذهب","تذهب‎","يذهب‎","تذهبان‎","يذهبان‎","نذهب‎","تذهبون‎","يذهبون‎","تذهبين‎","تذهب‎","تذهبان‎","تذهبن‎","يذهبن‎","أذهب","تذهب‎","يذهب‎","تذهبا‎","يذهبا‎","نذهب‎","تذهبوا‎","يذهبوا‎","تذهبي‎","تذهب‎","تذهبا‎","تذهبن‎","يذهبن‎","أذهب","تذهب‎","يذهب‎","تذهبا‎","يذهبا‎","نذهب‎","تذهبوا‎","يذهبوا‎","تذهبي‎","تذهب‎","تذهبا‎","تذهبن‎","يذهبن‎","أذهب","أذهبا‎","أذهبوا‎","أذهبي‎","أذهبن‎","أذهبت‎","أذهبت‎","أذهب","أذهبتما‎","أذهبا‎","أذهبنا‎","أذهبتم‎","أذهبوا‎","أذهبت‎","أذهبت‎","أذهبتا‎","أذهبتن‎","أذهبن‎","أذهب","تذهب‎","يذهب‎","تذهبان‎","يذهبان‎","نذهب‎","تذهبون‎","يذهبون‎","تذهبين‎","تذهب‎","تذهبان‎","تذهبن‎","يذهبن‎","أذهب","تذهب‎","يذهب‎","تذهبا‎","يذهبا‎","نذهب‎","تذهبوا‎","يذهبوا‎","تذهبي‎","تذهب‎","تذهبا‎","تذهبن‎","يذهبن‎","أذهب","تذهب‎","يذهب‎","تذهبا‎","يذهبا‎","نذهب‎","تذهبوا‎","يذهبوا‎","تذهبي‎","تذهب‎","تذهبا‎","تذهبن‎","يذهبن‎","نذهب","مذهب‎","ذاهب‎","مذهوب‎","ذهبت‎","ذهبت‎","ذهب","ذهبتما‎","ذهبا‎","ذهبنا‎","ذهبتم‎","ذهبوا‎","ذهبت‎","ذهبت‎","ذهبتا‎","ذهبتن‎","ذهبن‎","أذهب‎","تذهب‎","يذهب‎","تذهبان‎","يذهبان‎","نذهب‎","تذهبون‎","يذهبون‎","تذهبين‎","تذهب‎","تذهبان‎","تذهبن‎","يذهبن‎","أذهب‎","تذهب‎","يذهب‎","تذهبا‎","يذهبا‎","نذهب‎","تذهبوا‎","يذهبوا‎","تذهبي‎","تذهب‎","تذهبا‎","تذهبن‎","يذهبن‎","أذهب‎","تذهب‎","يذهب‎","تذهبا‎","يذهبا‎","نذهب‎","تذهبوا‎","يذهبوا‎","تذهبي‎","تذهب‎","تذهبا‎","تذهبن‎","يذهبن‎","اذهب‎","اذهبا‎","اذهبوا‎","اذهبي‎","اذهبن‎","ذهب","يذهب‎","يذهب‎","يذهب‎","أظن","ظن","ظان‎","مظنون‎","ظننت‎","ظننت‎","ظن","ظننتما‎","ظنا‎","ظننا‎","ظننتم‎","ظنوا‎","ظننت‎","ظنت‎","ظنتا‎","ظننتن‎","ظنن‎","أظن‎","تظن‎","يظن‎","تظنان‎","يظنان‎","نظن‎","تظنون‎","يظنون‎","تظنين‎","تظن‎","تظنان‎","تظنن‎","يظنن‎","أظن‎","تظن‎","يظن‎","تظنا‎","يظنا‎","نظن‎","تظنوا‎","يظنوا‎","تظني‎","تظن‎","تظنا‎","تظنن‎","يظنن‎","أظنن‎","تظنا‎","يظنا‎","تظنوا‎","يظنوا‎","تظنن‎","تظني‎","تظنا‎","تظنن‎","يظنن‎","أظن","أظن","تظن‎","تظن‎","يظنن‎","يظن‎","ظني‎","اظنن‎","يظن‎","نظنن‎","نظن‎","نظن‎","تظنن‎","تظن‎","تظن‎","ظنا‎","اظنن‎","ظن","ظن","ظنوا‎","اذهب‎","اذهبا‎","اذهبوا‎","ظننت‎","ظننت‎","ظن","ظننتما‎","ظنا‎","ظننا‎","ظننتم‎","ظنوا‎","ظننت‎","ظنت‎","ظنتا‎","ظننتن‎","ظنن‎","أظن‎","تظن‎","يظن‎","تظنان‎","يظنان‎","نظن‎","تظنون‎","يظنون‎","تظنين‎","تظن‎","تظنان‎","تظنن‎","يظنن‎","أظن‎","تظن‎","يظن‎","تظنا‎","يظنا‎","نظن‎","تظنوا‎","يظنوا‎","تظني‎","تظن‎","تظنا‎","تظنن‎","يظنن‎","أظنن‎","تظنا‎","يظنا‎","تظنوا‎","يظنوا‎","أظن‎","تظني‎","تظنا‎","تظنن‎","يظنن‎","تظنن‎","تظن‎","تظن‎","يظنن‎","يظن‎","يظن‎","نظنن‎","نظن‎","نظن‎","تظنن‎","تظن‎","تظن‎","ذهبت","تظن","توجدت‎","توجدت‎","توجد","توجدتما‎","توجدا‎","توجدنا‎","توجدتم‎","توجدوا‎","توجدت‎","توجدت‎","توجدتا‎","توجدتن‎","توجدن‎","أتوجد‎","ʾتتوجد‎","يتوجد‎","تتوجدان‎","يتوجدان‎","نتوجد‎","تتوجدون‎","يتوجدون‎","تتوجدين‎","تتوجد‎","تتوجدان‎","تتوجدن‎","يتوجدن‎","أتوجد‎","ʾتتوجد‎","يتوجد‎","تتوجدا‎","يتوجدا‎","نتوجد‎","تتوجدوا‎","يتوجدوا‎","تتوجدي‎","تتوجد‎","تتوجدا‎","تتوجدن‎","يتوجدن‎","أتوجد‎","ʾتتوجد‎","يتوجد‎","تتوجدا‎","يتوجدا‎","نتوجد‎","تتوجدوا‎","يتوجدوا‎","تتوجدي‎","تتوجد‎","تتوجدا‎","تتوجدن‎","يتوجدن‎","توجد","توجدا‎","توجدوا‎","توجدي‎","توجدن‎","توجد","يتوجد‎","يتوجد‎","يتوجد‎","توجد","متوجد‎","متوجد‎","دعاء‎","داع‎","مدعو‎","دعوت‎","دعوت‎","دعا","دعوتما‎","دعوا‎","دعونا‎","دعوتم‎","دعوا‎","دعوت‎","دعت‎","دعتا‎","دعوتن‎","دعون‎","أدعو‎","تدعو‎","يدعو‎","تدعوان‎","يدعوان‎","ندعو‎","تدعون‎","يدعون‎","تدعين‎","تدعو‎","تدعوان‎","تدعون‎","يدعون‎","أدعو‎","تدعو‎","يدعو‎","تدعوا‎","يدعوا‎","ندعو‎","تدعوا‎","يدعوا‎","تدعي‎","تدعو‎","تدعوا‎","تدعون‎","يدعون‎","أدع‎","تدع‎","يدع‎","تدعوا‎","يدعوا‎","ندع‎","تدعوا‎","يدعوا‎","تدعي‎","تدع‎","تدعوا‎","تدعون‎","يدعون‎","ادع‎","ادعوا‎","ادعوا‎","ادعي‎","ادعون‎","دعيت‎","دعيت‎","دعي‎","دعيتما‎","دعيا‎","دعينا‎","دعيتم‎","دعوا‎","دعيت‎","دعيت‎","دعيتا‎","دعيتن‎","دعين‎","أدعى‎","تدعى‎","يدعى‎","تدعيان‎","يدعيان‎","ندعى‎","تدعون‎","يدعون‎","تدعين‎","تدعى‎","تدعيان‎","تدعين‎","يدعين‎","أدعى‎","تدعى‎","يدعى‎","تدعيا‎","يدعيا‎","ندعى‎","تدعوا‎","يدعوا‎","تدعي‎","تدعى‎","تدعيا‎","تدعين‎","يدعين‎","أدع‎","تدع‎","يدع‎","تدعيا‎","يدعيا‎","ندع‎","تدعوا‎","يدعوا‎","تدعي‎","تدع‎","تدعيا‎","تدعين‎","يدعين‎","تÙكر","متÙكر‎","متÙكر‎","تÙكرت‎","تÙكرت‎","تÙكر","تÙكرتما‎","تÙكرا‎","تÙكرنا‎","تÙكرتم‎","تÙكروا‎","تÙكرت‎","تÙكرت‎","تÙكرتا‎","تÙكرتن‎","تÙكرن‎","أتÙكر‎","تتÙكر‎","يتÙكر‎","تتÙكران‎","يتÙكران‎","نتÙكر‎","تتÙكرون‎","يتÙكرون‎","تتÙكرين‎","تتÙكر‎","تتÙكران‎","تتÙكرن‎","يتÙكرن‎","أتÙكر‎","تتÙكر‎","يتÙكر‎","تتÙكرا‎","يتÙكرا‎","نتÙكر‎","تتÙكروا‎","يتÙكروا‎","تتÙكري‎","تتÙكر‎","تتÙكرا‎","تتÙكرن‎","يتÙكرن‎","أتÙكر‎","تتÙكر‎","يتÙكر‎","تتÙكرا‎","يتÙكرا‎","نتÙكر‎","تتÙكروا‎","يتÙكروا‎","تتÙكري‎","تتÙكر‎","تتÙكرا‎","تتÙكرن‎","يتÙكرن‎","تÙكر","تÙكرا‎","تÙكروا‎","تÙكري‎","تÙكرن‎","تÙكر","يتÙكر‎","يتÙكر‎","يتÙكر‎","مجيء‎","جيء‎","جيئة‎","جيئة‎","جاء","مجيء‎","جئت‎","جئت‎","جاء","جئتما‎","جاءا‎","جئنا‎","جئتم‎","جائوا‎","جاؤوا‎","جئت‎","جاءت‎","جاءتا‎","جئتن‎","جئن‎","أجيء‎","تجيء‎","يجيء‎","تجيئان‎","يجيئان‎","نجيء‎","تجيئون‎","تجيؤون‎","يجيئون‎","يجيؤون‎","تجيئين‎","تجيء‎","تجيئان‎","تجئن‎","يجئن‎","أجيء‎","تجيء‎","يجيء‎","تجيئا‎","يجيئا‎","نجيء‎","تجيئوا‎","تجيؤوا‎","يجيئوا‎","يجيؤوا‎","تجيئي‎","تجيء‎","تجيئا‎","تجئن‎","يجئن‎","أجئ‎","تجئ‎","يجئ‎","تجيئا‎","يجيئا‎","نجئ‎","تجيئوا‎","تجيؤوا‎","يجيئوا‎","يجيؤوا‎","تجيئي‎","تجئ‎","تجيئا‎","تجئن‎","يجئن‎","جئ‎","جيئا‎","جيئوا‎","جيؤوا‎","جيئي‎","جئن‎","جئت‎","جئت‎","جيء‎","جئتما‎","جيئا‎","جئنا‎","جئتم‎","جيئوا‎","جيؤوا‎","جئت‎","جيئت‎","جيئتا‎","جئتن‎","جئن‎","أجاء‎","تجاء‎","يجاء‎","تجاءان‎","يجاءان‎","نجاء‎","تجائون‎","تجاؤون‎","يجائون‎","يجاؤون‎","تجائين‎","تجاء‎","تجاءان‎","تجأن‎","يجأن‎","أجاء‎","تجاء‎","يجاء‎","تجاءا‎","يجاءا‎","نجاء‎","تجائوا‎","تجاؤوا‎","يجائوا‎","يجاؤوا‎","تجائي‎","تجاء‎","تجاءا‎","تجأن‎","يجأن‎","أجأ‎","تجأ‎","يجأ‎","تجاءا‎","يجاءا‎","نجأ‎","تجائوا‎","تجاؤوا‎","يجائوا‎","يجاؤوا‎","تجائي‎","تجأ‎","تجاءا‎","تجأن‎","يجأن‎","إرادة‎","مريد‎","مراد‎","أردت‎","أردت‎","أراد","أردتما‎","أرادا‎","أردنا‎","أردتم‎","أرادوا‎","أردت‎","أرادت‎","أرادتا‎","أردتن‎","أردن‎","أريد‎","تريد‎","يريد‎","تريدان‎","يريدان‎","نريد‎","تريدون‎","يريدون‎","تريدين‎","تريد‎","تريدان‎","تردن‎","يردن‎","أريد‎","تريد‎","يريد‎","تريدا‎","يريدا‎","نريد‎","تريدوا‎","يريدوا‎","تريدي‎","تريد‎","تريدا‎","تردن‎","يردن‎","أرد‎","ترد‎","يرد‎","تريدا‎","يريدا‎","نرد‎","تريدوا‎","يريدوا‎","تريدي‎","ترد‎","تريدا‎","تردن‎","يردن‎","أرد‎","أريدا‎","أريدوا‎","أريدي‎","أردن‎","أردت‎","أردت‎","أريد‎","أردتما‎","أريدا‎","أردنا‎","أردتم‎","أريدوا‎","أردت‎","أريدت‎","أريدتا‎","أردتن‎","أردن‎","أراد","تراد‎","يراد‎","ترادان‎","يرادان‎","نراد‎","ترادون‎","يرادون‎","ترادين‎","تراد‎","ترادان‎","تردن‎","يردن‎","أراد","تراد‎","يراد‎","ترادا‎","يرادا‎","نراد‎","ترادوا‎","يرادوا‎","ترادي‎","تراد‎","ترادا‎","تردن‎","يردن‎","أرد‎","ترد‎","يرد‎","ترادا‎","يرادا‎","نرد‎","ترادوا‎","يرادوا‎","ترادي‎","ترد‎","ترادا‎","تردن‎","يردن‎","إتيان‎","أتي‎","مأتاة‎","مأتى‎","آت‎","مأتي‎","أتيت‎","أتيت‎","أتى","أتيتما‎","أتيا‎","أتينا‎","أتيتم‎","أتوا‎","أتيت‎","أتت‎","أتتا‎","أتيتن‎","أتين‎","آتي‎","تأتي‎","يأتي‎","تأتيان‎","يأتيان‎","نأتي‎","تأتون‎","يأتون‎","تأتين‎","تأتي‎","تأتيان‎","تأتين‎","يأتين‎","آتي‎","تأتي‎","يأتي‎","تأتيا‎","يأتيا‎","نأتي‎","تأتوا‎","يأتوا‎","تأتي‎","تأتي‎","تأتيا‎","تأتين‎","يأتين‎","آت‎","تأت‎","يأت‎","تأتيا‎","يأتيا‎","نأت‎","تأتوا‎","يأتوا‎","تأتي‎","تأت‎","تأتيا‎","تأتين‎","يأتين‎","ايت‎","ايتيا‎","ايتوا‎","ايتي‎","ايتين‎","أتيت‎","أتيت‎","أتي‎","أتيتما‎","أتيا‎","أتينا‎","أتيتم‎","أتوا‎","أتيت‎","أتيت‎","أتيتا‎","أتيتن‎","أتين‎","أوتى‎","تؤتى‎","يؤتى‎","تؤتيان‎","يؤتيان‎","نؤتى‎","تؤتون‎","يؤتون‎","تؤتين‎","تؤتى‎","تؤتيان‎","تؤتين‎","يؤتين‎","أوتى‎","تؤتى‎","يؤتى‎","تؤتيا‎","يؤتيا‎","نؤتى‎","تؤتوا‎","يؤتوا‎","تؤتي‎","تؤتى‎","تؤتيا‎","تؤتين‎","يؤتين‎","أوت‎","تؤت‎","يؤت‎","تؤتيا‎","يؤتيا‎","نؤت‎","تؤتوا‎","يؤتوا‎","تؤتي‎","تؤت‎","تؤتيا‎","تؤتين‎","يؤتين‎","ÙØ¹Ù„ته","ÙØ¹Ù„","ÙØ¹Ù„","ÙØ§Ø¹Ù„‎","Ù…ÙØ¹ÙˆÙ„‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„","ÙØ¹Ù„تما‎","ÙØ¹Ù„ا‎","ÙØ¹Ù„نا‎","ÙØ¹Ù„تم‎","ÙØ¹Ù„وا‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„تا‎","ÙØ¹Ù„تن‎","ÙØ¹Ù„ن‎","Ø£ÙØ¹Ù„‎","ØªÙØ¹Ù„‎","ÙŠÙØ¹Ù„‎","ØªÙØ¹Ù„ان‎","ÙŠÙØ¹Ù„ان‎","Ù†ÙØ¹Ù„‎","ØªÙØ¹Ù„ون‎","ÙŠÙØ¹Ù„ون‎","ØªÙØ¹Ù„ين‎","ØªÙØ¹Ù„‎","ØªÙØ¹Ù„ان‎","ØªÙØ¹Ù„ن‎","ÙŠÙØ¹Ù„ن‎","Ø£ÙØ¹Ù„‎","ØªÙØ¹Ù„‎","ÙŠÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ÙŠÙØ¹Ù„ا‎","Ù†ÙØ¹Ù„‎","ØªÙØ¹Ù„وا‎","ÙŠÙØ¹Ù„وا‎","ØªÙØ¹Ù„ي‎","ØªÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ØªÙØ¹Ù„ن‎","ÙŠÙØ¹Ù„ن‎","Ø£ÙØ¹Ù„‎","ØªÙØ¹Ù„‎","ÙŠÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ÙŠÙØ¹Ù„ا‎","Ù†ÙØ¹Ù„‎","ØªÙØ¹Ù„وا‎","ÙŠÙØ¹Ù„وا‎","ØªÙØ¹Ù„ي‎","ØªÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ØªÙØ¹Ù„ن‎","ÙŠÙØ¹Ù„ن‎","Ø§ÙØ¹Ù„‎","Ø§ÙØ¹Ù„ا‎","Ø§ÙØ¹Ù„وا‎","Ø§ÙØ¹Ù„ي‎","Ø§ÙØ¹Ù„ن‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„","ÙØ¹Ù„تما‎","ÙØ¹Ù„ا‎","ÙØ¹Ù„نا‎","ÙØ¹Ù„تم‎","ÙØ¹Ù„وا‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„ت‎","ÙØ¹Ù„تا‎","ÙØ¹Ù„تن‎","ÙØ¹Ù„ن‎","Ø£ÙØ¹Ù„‎","ØªÙØ¹Ù„‎","ÙŠÙØ¹Ù„‎","ØªÙØ¹Ù„ان‎","ÙŠÙØ¹Ù„ان‎","Ù†ÙØ¹Ù„‎","ØªÙØ¹Ù„ون‎","ÙŠÙØ¹Ù„ون‎","ØªÙØ¹Ù„ين‎","ØªÙØ¹Ù„‎","ØªÙØ¹Ù„ان‎","ØªÙØ¹Ù„ن‎","ÙŠÙØ¹Ù„ن‎","Ø£ÙØ¹Ù„‎","ØªÙØ¹Ù„‎","ÙŠÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ÙŠÙØ¹Ù„ا‎","Ù†ÙØ¹Ù„‎","ØªÙØ¹Ù„وا‎","ÙŠÙØ¹Ù„وا‎","ØªÙØ¹Ù„ي‎","ØªÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ØªÙØ¹Ù„ن‎","ÙŠÙØ¹Ù„ن‎","Ø£ÙØ¹Ù„‎","ØªÙØ¹Ù„‎","ÙŠÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ÙŠÙØ¹Ù„ا‎","Ù†ÙØ¹Ù„‎","ØªÙØ¹Ù„وا‎","ÙŠÙØ¹Ù„وا‎","ØªÙØ¹Ù„ي‎","ØªÙØ¹Ù„‎","ØªÙØ¹Ù„ا‎","ØªÙØ¹Ù„ن‎","ÙŠÙØ¹Ù„ن‎","قصد","مقصد‎","قاصد‎","مقصود‎","قصدت‎","قصدت‎","قصد","قصدتما‎","قصدا‎","قصدنا‎","قصدتم‎","قصدوا‎","قصدت‎","قصدت‎","قصدتا‎","قصدتن‎","قصدن‎","أقصد‎","تقصد‎","يقصد‎","تقصدان‎","يقصدان‎","نقصد‎","تقصدون‎","يقصدون‎","تقصدين‎","تقصد‎","تقصدان‎","تقصدن‎","يقصدن‎","أقصد‎","تقصد‎","يقصد‎","تقصدا‎","يقصدا‎","نقصد‎","تقصدوا‎","يقصدوا‎","تقصدي‎","تقصد‎","تقصدا‎","تقصدن‎","يقصدن‎","أقصد‎","تقصد‎","يقصد‎","تقصدا‎","يقصدا‎","نقصد‎","تقصدوا‎","يقصدوا‎","تقصدي‎","تقصد‎","تقصدا‎","تقصدن‎","يقصدن‎","اقصد‎","اقصدا‎","اقصدوا‎","اقصدي‎","اقصدن‎","قصدت‎","قصدت‎","قصد","قصدتما‎","قصدا‎","قصدنا‎","قصدتم‎","قصدوا‎","قصدت‎","قصدت‎","قصدتا‎","قصدتن‎","قصدن‎","أقصد‎","تقصد‎","يقصد‎","تقصدان‎","يقصدان‎","نقصد‎","تقصدون‎","يقصدون‎","تقصدين‎","تقصد‎","تقصدان‎","تقصدن‎","يقصدن‎","أقصد‎","تقصد‎","يقصد‎","تقصدا‎","يقصدا‎","نقصد‎","تقصدوا‎","يقصدوا‎","تقصدي‎","تقصد‎","تقصدا‎","تقصدن‎","يقصدن‎","أقصد‎","تقصد‎","يقصد‎","تقصدا‎","يقصدا‎","نقصد‎","تقصدوا‎","يقصدوا‎","تقصدي‎","تقصد‎","تقصدا‎","تقصدن‎","يقصدن‎","زائل‎","زلت‎","زلت‎","زال","زلتما‎","زالا‎","زلنا‎","زلتم‎","زالوا‎","زلت‎","زالت‎","زالتا‎","زلتن‎","زلن‎","أزال‎","تزال‎","يزال‎","تزالان‎","يزالان‎","نزال‎","تزالون‎","يزالون‎","تزالين‎","تزال‎","تزالان‎","تزلن‎","يزلن‎","أزال‎","تزال‎","يزال‎","تزالا‎","يزالا‎","نزال‎","تزالوا‎","يزالوا‎","تزالي‎","تزال‎","تزالا‎","تزلن‎","يزلن‎","أزل‎","تزل‎","يزل‎","تزالا‎","يزالا‎","نزل‎","تزالوا‎","يزالوا‎","تزالي‎","تزل‎","تزالا‎","تزلن‎","يزلن‎","زل‎","زالا‎","زالوا‎","زالي‎","زلن‎","عملت‎","عملت‎","عمل","عملتما‎","عملا‎","عملنا‎","عملتم‎","عملوا‎","عملت‎","عملت‎","عملتا‎","عملتن‎","عملن‎","أعمل‎","تعمل‎","يعمل‎","تعملان‎","يعملان‎","نعمل‎","تعملون‎","يعملون‎","تعملين‎","تعملن‎","يعملن‎","أعمل‎","تعمل‎","يعمل‎","تعملا‎","يعملا‎","نعمل‎","تعملوا‎","يعملوا‎","تعملي‎","أعمل‎","تعمل‎","يعمل‎","نعمل‎","اعمل‎","اعملا‎","اعملوا‎","اعملي‎","اعملن‎","عملت‎","عملت‎","عمل","عملتما‎","عملا‎","عملنا‎","عملتم‎","عملوا‎","عملت‎","عملت‎","عملتا‎","عملتن‎","عملن‎","أعمل‎","تعمل‎","يعمل‎","تعملان‎","يعملان‎","نعمل‎","تعملون‎","يعملون‎","تعملين‎","تعملن‎","يعملن‎","أعمل","تعمل‎","يعمل‎","تعملا‎","يعملا‎","نعمل‎","تعملوا‎","يعملوا‎","تعملي‎","أعمل‎","تعمل‎","يعمل‎","نعمل‎","عملت‎","عننت‎","عننت‎","عن","عننتما‎","عنا‎","عننا‎","عننتم‎","عنوا‎","عننت‎","عنت‎","عنتا‎","عننتن‎","عنن‎","أعن‎","أعن‎","تعن‎","تعن‎","يعن‎","يعن‎","تعنان‎","تعنان‎","يعنان‎","يعنان‎","نعن‎","نعن‎","تعنون‎","تعنون‎","يعنون‎","يعنون‎","تعنين‎","تعنين‎","تعنن‎","تعنن‎","يعنن‎","يعنن‎","أعن‎","أعن‎","تعن‎","تعن‎","يعن‎","يعن‎","تعنا‎","تعنا‎","يعنا‎","يعنا‎","نعن‎","نعن‎","تعنوا‎","تعنوا‎","يعنوا‎","يعنوا‎","تعني‎","تعني‎","أعن‎","أعنن‎","أعن‎","أعنن‎","تعن‎","تعنن‎","تعن‎","تعنن‎","يعن‎","يعنن‎","يعن‎","يعنن‎","نعن‎","نعنن‎","نعن‎","نعنن‎","عن","عن","اعنن‎","عن","عن","اعنن‎","عنا‎","عنا‎","‎عنوا‎","عني‎","عني‎","اعنن‎","اعنن‎","يعن‎","يعن‎","يعن‎","يعنن‎","قمت‎","قمت‎","قام","قمتما‎","قاما‎","قمنا‎","قمتم‎","قاموا‎","قمت‎","قامت‎","قامتا‎","قمتن‎","قمن‎","أقوم‎","تقوم‎","يقوم‎","تقومان‎","يقومان‎","نقوم‎","تقومون‎","يقومون‎","تقومين‎","تقمن‎","يقمن‎","أقوم‎","تقوم‎","يقوم‎","تقوما‎","يقوما‎","نقوم‎","تقوموا‎","يقوموا‎","تقومي‎","أقم‎","تقم‎","يقم‎","نقم‎","قم‎","قوما‎","قوموا‎","قومي‎","قيم‎","يقام‎","يقام‎","يقم‎","وددت‎","وددت‎","ود","وددتما‎","ودا‎","وددنا‎","وددتم‎","ودوا‎","وددت‎","ودت‎","ودتا‎","وددتن‎","وددن‎","أود‎","تود‎","يود‎","تودان‎","يودان‎","نود‎","تودون‎","يودون‎","تودين‎","توددن‎","يوددن‎","أود‎","تود‎","يود‎","تودا‎","يودا‎","نود‎","تودوا‎","يودوا‎","تودي‎","أود‎","أودد‎","تود‎","تودد‎","يود‎","يودد‎","نود‎","نودد‎","ود","ايدد‎","ودي‎","ايددن‎","وددت‎","وددت‎","ود","وددتما‎","ودا‎","وددنا‎","وددتم‎","ودوا‎","وددت‎","ودت‎","ودتا‎","وددتن‎","وددن‎","أود‎","تود‎","يود‎","تودان‎","يودان‎","نود‎","تودون‎","يودون‎","تودين‎","توددن‎","يوددن‎","أود‎","تود‎","يود‎","تودا‎","يودا‎","نود‎","تودوا‎","يودوا‎","تودي‎","أود‎","أودد‎","تود‎","تودد‎","يود‎","يودد‎","نود‎","نودد‎","حاولت‎","حاولت‎","حاول","حاولتما‎","حاولا‎","حاولنا‎","حاولتم‎","حاولوا‎","حاولت‎","حاولت‎","حاولتا‎","حاولتن‎","حاولن‎","أحاول‎","تحاول‎","يحاول‎","تحاولان‎","يحاولان‎","نحاول‎","تحاولون‎","يحاولون‎","تحاولين‎","تحاولن‎","يحاولن‎","أحاول‎","تحاول‎","يحاول‎","تحاولا‎","يحاولا‎","نحاول‎","تحاولوا‎","يحاولوا‎","تحاولي‎","أحاول‎","تحاول‎","يحاول‎","نحاول‎","حاول","حاولا‎","حاولوا‎","حاولي‎","حاولن‎","حوولت‎","حوولت‎","حوول‎","حوولتما‎","حوولا‎","حوولنا‎","حوولتم‎","حوولوا‎","حوولت‎","حوولت‎","حوولتا‎","حوولتن‎","حوولن‎","أحاول‎","تحاول‎","يحاول‎","تحاولان‎","يحاولان‎","نحاول‎","تحاولون‎","يحاولون‎","تحاولين‎","تحاولن‎","يحاولن‎","أحاول‎","تحاول‎","يحاول‎","تحاولا‎","يحاولا‎","نحاول‎","تحاولوا‎","يحاولوا‎","تحاولي‎","أحاول‎","تحاول‎","يحاول‎","نحاول‎","احتجت‎","احتجت‎","احتاج","احتجتما‎","احتاجا‎","احتجنا‎","احتجتم‎","احتاجوا‎","احتجت‎","احتاجت‎","احتاجتا‎","احتجتن‎","احتجن‎","أحتاج‎","تحتاج‎","يحتاج‎","تحتاجان‎","يحتاجان‎","نحتاج‎","تحتاجون‎","يحتاجون‎","تحتاجين‎","تحتجن‎","يحتجن‎","أحتاج‎","تحتاج‎","يحتاج‎","تحتاجا‎","يحتاجا‎","نحتاج‎","تحتاجوا‎","يحتاجوا‎","تحتاجي‎","أحتج‎","تحتج‎","يحتج‎","نحتج‎","احتج‎","احتاجي‎","احتجت‎","احتجت‎","احتيج‎","احتجتما‎","احتيجا‎","احتجنا‎","احتجتم‎","احتيجوا‎","احتجت‎","احتيجت‎","احتيجتا‎","احتجتن‎","احتجن‎","أحتاج‎","تحتاج‎","يحتاج‎","تحتاجان‎","يحتاجان‎","نحتاج‎","تحتاجون‎","يحتاجون‎","تحتاجين‎","تحتجن‎","يحتجن‎","أحتاج‎","تحتاج‎","يحتاج‎","تحتاجا‎","يحتاجا‎","نحتاج‎","تحتاجوا‎","يحتاجوا‎","تحتاجي‎","أحتج‎","تحتج‎","يحتج‎","نحتج‎","عنيت‎","عنيت‎","عنى","عنيتما‎","عنيا‎","عنينا‎","عنيتم‎","عنوا‎","عنيت‎","عنت‎","عنتا‎","عنيتن‎","عنين‎","أعني‎","تعني‎","يعني‎","تعنيان‎","يعنيان‎","نعني‎","تعنون‎","يعنون‎","تعنين‎","يعنين‎","أعني‎","تعني‎","يعني‎","تعنيا‎","يعنيا‎","نعني‎","تعنوا‎","يعنوا‎","أعن‎","تعن‎","يعن‎","نعن‎","اعن‎","اعنيا‎","اعنوا‎","اعني‎","اعنين‎","عنيت‎","عنيت‎","عني‎","عنيتما‎","عنيا‎","عنينا‎","عنيتم‎","عنوا‎","عنيت‎","عنيت‎","عنيتا‎","عنيتن‎","عنين‎","أعنى‎","تعنى‎","يعنى‎","تعنيان‎","يعنيان‎","نعنى‎","تعنون‎","يعنون‎","تعنين‎","يعنين‎","تعنيا‎","يعنيا‎","تعنوا‎","يعنوا‎","تعني‎","أعن‎","تعن‎","يعن‎","نعن‎","يعنين","عندي‎","عندنا‎","عندك‎","عندك‎","عندكما‎","عندكم‎","عندكن‎","عنده‎","عندها‎","عندهما‎","عندهم‎","عندهن‎","بقاء","البقاء‎","بقاء","البقاء‎","بقاء","بقاء","البقاء‎","بقاء","بقاء","البقاء‎","بقاء"],j=["جيد","آخر","رائع","Ø£ÙØ¶Ù„","جيدة","Ù†ÙØ³","Ùقط","مجرد","كبير","Ø§Ù„Ø£ÙØ¶Ù„","عظيم","جميلة","كبيرة","رائعة","جديد","صغيرة","الصغير","متأكد","مهما","صغير","جيدا","الصغيرة","أكبر","جديدة","Ø§ÙØ¶Ù„","الجديد","طويلة","ممكن","اخر","طويل","الممكن","الخاصة","سيئة","الكبير","حقيقي","بعيدا","الجيد","مهم","الجديدة","كثير","الكبيرة","القليل","ممتاز","الحقيقي","سيء","معا","قليل","بعيد","واضح","مختلÙ","متأكدة","الصعب","أسوأ","حوالي","كامل","سيئ","بالإمكان","بكثير","خاص","سوية","Ù…Ø®ØªÙ„ÙØ©","قريب","الأخير","الأخيرة","Ø§Ù„Ø§ÙØ¶Ù„","خير"],A=["واو","هيا","آه","هيه","هاى","أوه","أخخ","هووه","صه","أوبس","أها","آخ","أح","شو","ههههه"],H=["كلغ","ملغ","الكوارت","جرام","جالون","ربع ","كوارتات","لتر","سنتيلتر","مليمتر","دزينة","ملاعق","ذراع","قبضة","عربية","قصبة","بريد","قدم","ربع"],k=["الأمر","الأشياء","الشيء","الأمور","الامر","أشياء","جزء","الاشياء","الامور","الطريقة","طريقا","طرق","قطعة","الأجزاء","مادة","مرات","بالمئة","جانب","جوانب","بند","عنصر","عناصر","بنود","Ùكرة","موضوع","ØªÙØµÙŠÙ„","ØªÙØ§ØµÙŠÙ„","ÙØ±Ù‚","ÙØ±ÙˆÙ‚","كيÙية"],D=["نعم","حسنا","إنه","إني","إنها","إنك","إنكم","إنهم","إنكما","إنهما","إننا","إنهن","ÙØ¥Ù†","إنني","كلا","أجل","أنه","أنك","انها","أنها","بأن","أنني","أنكم","أنهما","أنكما","أنهن","أنهم","انك","أني","أننا","انهم","بأنك","لأنه","بأنه","اني","أننى","انني","اننا","بأنني","اننى","بأني","بأنها","وأن","بأننا","للتو","ها","رجاء","ØªÙØ¶Ù„","اجل","حالك","ÙØ¶Ù„Ùƒ","أرجوك","هكذا","انة","بلى","أعلى","انى","لا","لن","لم","ولا","ألا","ولم","ولن","عدم","Ùلا","Ùلن","يلا","يلة"],T=["عندما","مثل","بالطبع","لأن","إذن","بشكل","متى","حتى","قبل","ثم","عند","حيث","بينما","لمدة","مثلك","حين","بأي","زلت","وعندما","أثناء","حينما","أولا","لاحقا","أما","وإلا","Ù„ÙØªØ±Ø©","كلما","عندنا","إلا","الا"],Y=(i([].concat(u,j)),i([].concat(c,L,z,O,f,x,h)),i([].concat(T,o,y,l,d,g,A,a,F,b,_,M,w,P,S,R,W,v,D,E,H,["اليوم","يوم","ليلة","دقيقة","ساعة","عام","دقائق","سنة","الساعة","أيام","العام","الأسبوع","غدا","ساعات","أمس","أشهر","الأيام","شهر","السنة","الغد","يوما","ثانية","ثوان","أسبوع","أسابيع","أسبوعا","بالأمس"],k,m,p)),i([].concat(c,a,u,f,g,l,d,h,w,S,R,W,v,y,E,F,b,L,O,P,_,T,o,["الآن","كذلك","ربما","كما","لذا","الان","الأن","بما","أيضا","بالنسبة","ÙØ­Ø³Ø¨","والآن","بكل","مما","ايضا","بخصوص","القادمة","المحتمل","مازال","مازلت","طالما","بالتأكيد","بدلا","بوضوح","Ùورا","حالا","التالي","حاليا","بالعادة","تقريبا","ببساطة","اختياريا","أحيانا","أبدا","بالمناسبة","خاصة","مؤخرا","نسبيا"],x,M,A,j,H,k,D,["السيد","السيدة","اÙندم","سعادتك","استاذة","استاذ","مدام","أستاذ","أسـتاذة","الأخ","الأخت"],m,p,z))),B=[["لا","ولا"],["إما","أو"],["ربما","ربما"],["حينئذ","عندئذ"],["إما","وإما"],["كل من","Ùˆ"]],C=["Ù„","ب","Ùƒ","Ùˆ","Ù","س","Ø£","ال","وب","ول","لل","ÙØ³","ÙØ¨","ÙÙ„","وس","وال","بال","ÙØ§Ù„","كال","ولل","وبال"],$=[...C].sort(((e,t)=>t.length-e.length)),q=new RegExp(`^(${$.join("|")})`);function G(e){const t=[];t.push(...C.map((t=>t+e)));const{stem:r,prefix:n}=function(e,t){let r=e,n="";const o=e.match(t);return o&&(n=o[0],r=e.slice(n.length)),{stem:r,prefix:n}}(e,q);return""!==n&&(t.push(r),t.push(...C.map((e=>e+r)))),t}const I=window.lodash,J=function(e,t){const r=t.externalStemmer,n=r.characters;return r.wordsWithLastAlefRemoved.includes(e)?e+n.alef:r.wordsWithLastHamzaRemoved.includes(e)?e+n.alef_hamza_above:r.wordsWithLastMaksoraRemoved.includes(e)?e+n.yeh_maksorah:r.wordsWithLastYehRemoved.includes(e)?e+n.yeh:void 0},K=function(e,t){const r=t.externalStemmer,n=r.characters;return r.wordsWithMiddleWawRemoved.includes(e)?e[0]+n.waw+e[1]:r.wordsWithMiddleYehRemoved.includes(e)?e[0]+n.yeh+e[1]:void 0},N=function(e,t,r,n){const o=e.replace(new RegExp(r[0]),r[1]);if(o!==e)return n(o,t)},Q=function(e,t){const r=t.externalStemmer.characters;if(t.externalStemmer.threeLetterRoots.includes(e))return e;e[0]!==r.alef&&e[0]!==r.waw_hamza&&e[0]!==r.yeh_hamza||(e=r.alef_hamza_above+e.slice(1));const n=N(e,t,t.externalStemmer.regexRemoveLastWeakLetterOrHamza,J);if(n)return n;const o=N(e,t,t.externalStemmer.regexRemoveMiddleWeakLetterOrHamza,K);if(o)return o;const s=t.externalStemmer.regexReplaceMiddleLetterWithAlef,i=t.externalStemmer.regexReplaceMiddleLetterWithAlefWithHamza,c=e.replace(new RegExp(s[0]),s[1]);e=c===e?e.replace(new RegExp(i[0]),i[1]):c;const a=t.externalStemmer.regexRemoveShaddaAndDuplicateLastLetter;return e.replace(new RegExp(a[0]),a[1])},U=function(e,t,r){return 6===e.length&&e[3]===e[5]&&2===t?Q(e.substring(1,4),r):e},V=function(e,t,r,n){const o=n.externalStemmer.characters;if(e.length-3<=r){let r="";for(let n=0;nfunction(e,t){const r=t.externalStemmer.regexRemovingDiacritics;e.replace(new RegExp(r),"");const n=ee(e,t);if(n)return n;const o=Z(e,t);if(o){if(!0===o.rootFound)return o.word;e=o.word}const s=function(e,t){const r=te(e,t.externalStemmer.definiteArticles);if(r!==e)return oe(r,t)||{word:r,rootFound:!1}}(e,t);if(s){if(!0===s.rootFound)return s.word;e=s.word}const i=function(e,t){let r="";if(e.length>3&&e.startsWith(t.externalStemmer.characters.waw)){r=e.substring(1);const n=oe(r,t);if(n)return n}}(e,t);if(i){if(!0===i.rootFound)return i.word;e=i.word}const c=re(e,t);if(c)return c.word;const a=ne(e,t);return a?a.word:e}(e,t):se}const ce=["غودرت","غودر","غودرتما","غودرا","غودرتا","غودرنا","غودرتم","غودرتنّ","غودروا","غودرن","مغادر","محثوث","تجرى","يجرى","مجرى","تبقى","يبقى","مبقى","تجوهلت","تجوهل","تجوهلت","تجوهلتما","تجوهلا","تجوهلتا","تجوهلنا","تجوهلتم","تجوهلتنّ","تجوهلوا","تجوهلن","متجاهل","تشوورت","تشوور","تشوورتما","تشوورا","تشوورتا","تشوورنا","تشوورتم","تشوورتنّ","تشووروا","تشوورن","متشاور","نوقشت","نوقش","نوقشتما","نوقشا","نوقشتا","نوقشنا","نوقشتم","نوقشتنّ","نوقشوا","نوقشن","مناقش","معود","ترتدى","يرتدى","نرتدى","مرتدى","تنتهى","ينتهى","ننتهى","تجووزت","تجووز","تجووزتما","تجووزا","تجووزتا","تجووزنا","تجووزتم","تجووزتنّ","تجووزوا","تجووزن","حوولت","حوول","حوولتما","حوولا","حوولتا","حوولنا","حوولتم","حوولتنّ","حوولوا","حوولن","تعولجت","تعولج","تعولجتما","تعولجا","تعولجتا","تعولجنا","تعولجتم","تعولجتنّ","تعولجوا","تعولجن","متعالج","أشير","أشيرا","أشيرتا","أشيروا","تشار","تشارين","يشار","تشاران","يشاران","نشار","تشارون","يشارون","جيء","جيئت","جيئا","جيئتا","جيئوا","أجاء","تجاء","تجائين","يجاء","تجاءان","يجاءان","نجاء","تجائون","تجأن","يجائون","يجأن","يوصى","توصى","نوصى","موصى","احتيج","احتيجت","احتيجا","احتيجتا","احتيجوا","تعطى","يعطى","نعطى","معطى","تعوليت","تعولي","تعوليتما","تعوليا","تعوليتا","تعولينا","تعوليتم","تعوليتنّ","تعولوا","تعولين"," شوركت","شورك","شوركتما","شوركا","شوركتا","شوركنا","شوركتم","شوركتنّ","شوركوا","شوركن","تتولّى","يتولّى","نتولّى","زيد","زيدت","زيدا","زيدتا","زيدوا","أزاد","تزاد","تزادين","يزاد","تزادان","يزادان","نزاد","تزادون","يزادون","سوعدت","سوعد","سوعدتما","سوعدا","سوعدتا","سوعدنا","سوعدتم","سوعدتنّ","سوعدوا","سوعدن","رئيت","رئي","رئيتما","رئيا","رئيتا","رئينا","رئيتم","رئيتنّ","رؤوا","رئين","تÙووضت","تÙووض","تÙووضتما","تÙووضا","تÙووضتا","تÙووضنا","تÙووضتم","تÙووضتنّ","تÙووضوا","تÙووضن","تزويدت","تزويد","تزويدتما","تزويدا","تزويدتا","تزويدنا","تزويدتم","تزويدتنّ","تزويدوا","تزويدن","تتلقّى","يتلقّى","نتلقّى","لوحظت","لوحظ","لوحظتما","لوحظا","لوحظتا","لوحظنا","لوحظتم","لوحظتنّ","لوحظوا","لوحظن","تسعى","يسعى","نسعى","أوتيت","أوتي","أوتيتما","أوتيا","أوتيتا","أوتينا","أوتيتم","أوتيتنّ","أوتوا","أوتين","ووÙقت","ووÙÙ‚","ووÙقتما","ووÙقا","ووÙقتا","ووÙقنا","ووÙقتم","ووÙقتنّ","ووÙقوا","ووÙقن","إين","إينت","إينا","إينتا","إينوا","أؤان","تؤان","تؤانين","يؤان","تؤانان","يؤانان","نؤان","تؤانون","يؤانون","أوخذت","أوخذ","أوخذتما","أوخذا","أوخذتا","أوخذنا","أوخذتم","أوخذتنّ","أوخذوا","أوخذن","لهيت","لهي","لهيتما","لهيا","لهيتا","لهينا","لهيتم","لهيتم","لهوا","لهين","ألهى","تلهى","يلهى","تلهى","تلهيان","يلهيان","نلهى","يلهين","تتبقّى","يتبقّى","نتبقّى","تنوولت","تنوول","تنوولتما","تنوولا","تنوولتا","تنوولنا","تنوولتم","تنوولتنّ","تنوولوا","تنوولن","تووجهت","تووجه","تووجهتما","تووجها","تووجهتا","تووجهنا","تووجهتم","تووجهتنّ","تووجهوا","تووجهن","تبودلت","تبودل","تبودلتما","تبودلا","تبودلتا","تبودلنا","تبودلتم","تبودلتم","تبودلوا","تبودلن","تعورضت","تعورض","تعورضتما","تعورضا","تعورضتا","تعورضنا","تعورضتم","تعورضتنّ","تعورضوا","تعورضن","تعورضن","تعنى","يعنى","نعنى","طولبت","طولب","طولبتما","طولبا","طولبتا","طولبنا","طولبتم","طولبتنّ","طولبوا","طولبن","قيم","قيمت","قيما","قيمتا","قيموا","أقام","تقام","تقامين","يقام","تقامان","يقامان","نقام","تقامون","يقامون","أنشئت","أنشئ","أنشئتما","أنشئا","أنشئتا","أنشئنا","أنشئتم","أنشئتنّ","أنشئوا","أنشئن","تنشأ","تنشئين","ينشأ","تنشآن","ينشآن","ننشأ","تنشأون","ينشأون","ينشأن","تنشأن","غطّي","تغطّى","يغطّى","نغطّى","قوتلت","قوتل","قوتلتما","قوتلا","قوتلتا","قوتلنا","قوتلنا","قوتلتنّ","قوتلوا","قوتلن","أسمى","تسمى","يسمى","نسمى","أوثرت","أوثر","أوثرتما","أوثرا","أوثرتا","أوثرنا","أوثرتم","أوثرتنّ","أوثروا","أوثرن","غنّي","أغنّى","تغنّى","يغنّى","نغنّى","استÙيد","استÙيدت","استÙيدا","استÙيدتا","استÙيدوا","Ø£Ø³ØªÙØ§Ø¯","ØªØ³ØªÙØ§Ø¯","ØªØ³ØªÙØ§Ø¯ÙŠÙ†","ÙŠØ³ØªÙØ§Ø¯","ØªØ³ØªÙØ§Ø¯Ø§Ù†","ÙŠØ³ØªÙØ§Ø¯Ø§Ù†","Ù†Ø³ØªÙØ§Ø¯","ØªØ³ØªÙØ§Ø¯ÙˆÙ†","ÙŠØ³ØªÙØ§Ø¯ÙˆÙ†","أثير","أثيرت","أثيرا","أثيرا","أثيروا","أثار","تثار","تثارين","يثار","تثاران","يثاران","نثار","تثارون","يثارون","تدّعى","يدّعى","ندّعى","عيش","عيشت","عيشا","عيشتا","عيشوا","أعاش","تعاش","تعاشين","يعاش","تعاشان","يعاشان","نعاش","تعاشون","يعاشون","ووجهت","ووجه","ووجهتما","ووجها","ووجهتا","ووجهنا","ووجهتم","ووجهتنّ","ووجهوا","ووجهن","دعيت","دعي","دعيا","دعيتا","دعينا","دعيتم","دعيتنّ","دعوا","دعين","أدعى","تدعى","تدعين","تدعين","تدعيان","يدعيان","يدعين","اختير","اختيرت","اختيرا","اختيرتا","اختيروا","اخترن","شوهدت","شوهد","شوهدتما","شوهدا","شوهدتا","شوهدنا","شوهدتم","شوهدتنّ","شوهدوا","شوهدن","أدّي","أؤدّى","تؤدّى","يؤدّى","نؤدّى","Ø£Ùيدت","Ø£Ùيدا","Ø£Ùيدتا","Ø£Ùيدوا","ÙŠÙØ§Ø¯ÙˆÙ†","ØªÙØ§Ø¯ÙˆÙ†","Ù†ÙØ§Ø¯","ØªÙØ§Ø¯Ø§Ù†","ÙŠÙØ§Ø¯Ø§Ù†","ØªÙØ§Ø¯","ÙŠÙØ§Ø¯","ØªÙØ§Ø¯ÙŠÙ†","Ø£ÙØ§Ø¯","تكوملت","تكومل","تكوملتما","تكوملا","تكوملتا","تكوملنا","تكوملتم","تكوملتنّ","تكوملوا","تكوملن","أهنّئ","تهنّئ","تهنّئين","يهنّئ","يهنّئ","يهنّئان","تهنّئان","نهنّئ","تهنّئون","تهنّئن","هنّئوا","هنّئن","أهنّأ","تهنّأ","يهنّأ","تهنّآن","نهنّأ","تهنّأون","تهنّأن","يهنّأون","يهنّأن","سوهمت","سوهم","سوهمتما","سوهما","سوهمتا","سوهمنا","سوهمتم","سوهمتنّ","سوهموا","سوهمن","أرمى","ترمى","يرمى","نرمى","أبلغت"],{getWords:ae}=r.languageProcessing;function ue(e){const t=ae(e),r=[];for(let e of t){e.startsWith("Ùˆ")&&(e=e.slice(1));let t=-1;e.length>=2&&(t=e[1].search("Ù")),(-1!==t||ce.includes(e))&&r.push(e)}return 0!==r.length}const{AbstractResearcher:le}=r.languageProcessing;class de extends le{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"ar",passiveConstructionType:"morphological",firstWordExceptions:n,functionWords:Y,transitionWords:s,twoPartTransitionWords:B,prefixedFunctionWordsRegex:q}),Object.assign(this.helpers,{createBasicWordForms:G,getStemmer:ie,isPassiveSentence:ue})}}(window.yoast=window.yoast||{}).Researcher=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/ca.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/ca.js new file mode 100644 index 00000000..7f170cb1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/ca.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(a,t)=>{for(var r in t)e.o(t,r)&&!e.o(a,r)&&Object.defineProperty(a,r,{enumerable:!0,get:t[r]})},o:(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},a={};e.r(a),e.d(a,{default:()=>c});const t=window.yoast.analysis,r=["abans","així","alhora","aleshores","altrament","anteriorment","breument","bàsicament","contràriament","després","doncs","efectivament","endemés","especialment","evidentment","finalment","fins a","fins que","generalment","igualment","malgrat","mentre","mentrestant","parallelament","paral·lelament","però","perquè","quan","primerament","resumidament","resumint","segurament","segons això","sens dubte","sinó","sobretot","també","tanmateix"].concat(["a banda d'això","a continuació","a diferència de","a fi de","a fi que","a força de","a manera de resum","a més","a partir d'aquí","a partir d'ara","a tall d'exemple","a tall de recapitulació","a tall de resum","al capdavall","al contrari","al mateix temps","amb relació a","tot plegat","ara bé","atès que","com a conseqüència","com a exemple","com a resultat","com a resum","com que","comptat i debatut","considerant que","convé destacar","convé recalcar","convé ressaltar que","d'altra banda","d’una banda","d’una forma breu","de la mateixa manera","de manera parallela","de manera paral·lela","de manera que","de tota manera","degut a","deixant de banda","dit d'una altra manera","donat que","en a resum","en lloc de","en altres paraules","en aquest sentit","en canvi","en conclusió","en conjunt","en conseqüència","encara que","en darrer lloc","en darrer terme","en definitiva","en efecte","en general","en particular","en pocs mots","en poques paraules","en primer lloc","en relació amb","en resum","en segon lloc","en síntesi","en suma","en tercer lloc","en últim terme","és a dir","és més","és per això que","fins i tot","gràcies a","gràcies de","igual com","igual que","ja que","llevat que","més aviat","més tard","més endavant","no obstant","o sia","o sigui","òbviament","pel fet que","pel general","pel que","per acabar","per això","per altra banda","per aquest motiu","per causa de","per causa que","per cert","per començar","per concloure","per concretar","per contra","per exemple","per illustrar","per il·lustrar","per l'altra part","per l'altre cantó","per la qual cosa","per mitjà de","per posar un exemple","per raó de","per raó que","per tal de","per tal que","per tant","per últim","per un cantó","per un costat","per una altra banda","per una part","quant a","recapitulant","respecte de","s'ha de tenir en compte que","sempre que","tal com s’ha dit","tan bon punt","tan aviat com","tenint en compte que","tot i","tot seguit","val a dir","val la pena dir que","vist que"]),n=[["ara","ara"],["ni","ni"]],s={recommendedLength:25},{baseStemmer:l}=t.languageProcessing;function i(){return l}const{AbstractResearcher:o}=t.languageProcessing;class c extends o{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,delete this.defaultResearches.getPassiveVoiceResult,delete this.defaultResearches.getSentenceBeginnings,delete this.defaultResearches.functionWordsInKeyphrase,Object.assign(this.config,{language:"ca",functionWords:[],transitionWords:r,twoPartTransitionWords:n,sentenceLength:s}),Object.assign(this.helpers,{getStemmer:i})}}(window.yoast=window.yoast||{}).Researcher=a})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/cs.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/cs.js new file mode 100644 index 00000000..7db77a40 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/cs.js @@ -0,0 +1 @@ +(()=>{"use strict";var i={d:(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o:(i,e)=>Object.prototype.hasOwnProperty.call(i,e),r:i=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})}},e={};i.r(e),i.d(e,{default:()=>h});const t=window.yoast.analysis,n=["ten","nula","jeden","jedné","jedna","jedno","dva","dvÄ›","dvou","tÅ™i","ÄtyÅ™i","pÄ›t","Å¡est","sedm","osm","devÄ›t","deset","sto","tisíc","tento","ta","tato","to","toto","ti","tito","kdo","co"],s=["protože","když","sbohem","sotva","kdo","co","kde","odkud","kdy","odkdy","aÄkoli","navzdory","aÄkoli","když","kde","aby","pořádku","kdyby","jak","do","že","jako","pÅ™esnÄ›","jako","než","aby","kdo","kde","kdo","koho","kde","kolik","odkud","proÄ","kolik","nebo"],a=["pÅ™edtím","vždyÅ¥","definitely","koneÄnÄ›","jasné","možné","ale","demzufolge","vÅ¡ak","aÄkoliv","protože","ovÅ¡em","zkrátka","potom","stejnÄ›","tím","jinak","zatímco","když","co","kdežto","aÄkoli","pÅ™estože","Äas","chvíle","chvilka","avÅ¡ak","jenže","nicménÄ›","pÅ™itom","aniž","a","proto","tedy","teda","totiž","mimoto","Äímž","což","než","nejenže","také","jenom","pÅ™esto","jak","jelikož","takže","zda","sice","tudíž","jakoby","nýbrž","neboli","jen","Äili","pak","jenomže","kdežto","leÄ","ponÄ›vadž","tÅ™eba","pÅ™ece","nežli","zdali","buÄto","totiž","jenom","leda","pakliže","tÅ™ebaže","jakože","jakkoli","nechÅ¥","sotva","kterak","sic","jakkoliv","ledaže","ježto","tÅ™ebas","jakž","pakli","zdalipak","takž","jakže","pokavaÄ","jakby","pokudž","sotvaže","pokad","kdyžtÄ›","mezitímco","buÄsi","byÅ¥si","pokadž","tedyÅ¥","buÄže","dle","vzhledem","místo","vedle","okolo","uprostÅ™ed","namísto","navzdory","krom","poblíž","blízko","nedaleko","zaÄátkem","naproti","poÄátkem","poÄínaje","postupem","vlivem","vyjma","následkem","dík","zpoza","zásluhou","nevyjímaje","doprostÅ™ed","zpod","zespoda","závÄ›rem","úvodem","pÅ™ese","prostÅ™ed","nepoÄítaje","úmÄ›rnÄ›","vprostÅ™ed","navrch","vevnitÅ™","zespodu","poblíže","poÄínajíc","nadtoÅ¥","zpozad","vyjímaje","zaÄínaje","zespod","navrchu","vyjímajíc","navzdor","dál","veprostÅ™ed","konÄíc","zaÄínajíc","nepoÄítajíc","zvíce","vprostÅ™edku","opodále","podále","naprostÅ™ed","vlastnÄ›","podle","samozÅ™ejmÄ›","vždyÅ¥","zatím","dřív","radÅ¡i","spíš","poprvé","nakonec","navíc","záleží","zbytek","kým","jakmile","skuteÄnÄ›","tentokrát","pÅ™edstavit","jménem"],o=a.concat(["a proto","i když","i pÅ™estože","z tohoto důvodu","kromÄ› toho","nÄ›jaký Äas","k tomu","na jedné stranÄ›","struÄnÄ› Å™eÄeno","jinými slovy","důvod je","důvodem je","hlavnÄ› protože","možným důvodem je","a potom","mimo to","z uvedených důvodů","z tÄ›chto důvodů","důvod je jednoduchý","teprve potom","hlavní důvod proÄ","nejdřív potom","pÅ™esto vÅ¡ak","ale zároveň","ale také","bÄ›hem toho"]),u=function(i){let e=i;return i.forEach((t=>{(t=t.split("-")).length>0&&t.filter((e=>!i.includes(e))).length>0&&(e=e.concat(t))})),e}([].concat([],["nula","jeden","jedné","jedna","jedno","dva","dvÄ›","dvou","tÅ™i","ÄtyÅ™i","pÄ›t","Å¡est","sedm","osm","devÄ›t","deset","jedenáct","dvanáct","tÅ™ináct","Ätrnáct","patnáct","Å¡estnáct","sedmnáct","osmnáct","devatenáct","dvacet","dvacet jedna","dvacet dva","dvacet tÅ™i","tÅ™icet","ÄtyÅ™icet","padesát","Å¡edesát","sedmdesát","osmdesát","devadesát","sto","dvÄ› stÄ›","tÅ™i sta","ÄtyÅ™i sta","pÄ›t set","Å¡est set","sedm set","osm set","devÄ›t set","tisíc","dva tisíce","jedenáct tisíc","dvacet pÄ›t tisíc","sto tÅ™icet osm tisíc","milión","dva milióny","pÄ›t miliónů","Å¡est miliónů","sedm miliónů","miliarda"],["první","druhý","druhé","tÅ™etí","Ätvrtý","pátý","Å¡estý","sedmý","osmý","devátý","desátý"],["já","ty","on","ona","ono","my","mÄ›","mne","mi","mnÄ›","vy","oni","ony","tÄ›","ti","tebe","tobÄ›","jeho","nÄ›ho","ho","jej","nÄ›j","ji","jí","ní","je","nÄ›","jim","nim","jimi","nimi","jich","nich","jemu","nÄ›mu","nÄ›m","mém","mým","mých","mou","mými","ním","mu","nás","nám","námi","vás","vám","mnou","námi","tebou","vámi","naÅ¡ich","tys","naÅ¡i","můj","má","mé","mí","moje","mého","mojí","mých","mému","moji","tvůj","tvoje","tvá","tvé","tví","tvoji","tvého","tvojí","tvých","tvojích","tvému","tvým","tvou","tvém","tvých","tvými","jeho","její","náš","naÅ¡e","váš","vaÅ¡e","jejich","vaší","naší","ten","tento","ta","tato","to","toto","ti","tito","tyto","ty","tato","tohle","toho","abych","tÄ›ch","tenhle","abyste","abychom","tyhle","tuhle","tohoto","Äeho","Äemu","téhle","tÄ›mi","této","tomhle","tou","tahle","žes","tímhle","tÄ›m","tÄ›chto","tomu","tu","ten","tom","tím","který","která","které","kterého","kterému","kterou","kterém","kterým","kteří","kterých","kterými","jenž","jež","jehož","jejž","nÄ›hož","nÄ›jž","jíž","níž","jemuž","nÄ›muž","jež","něž","nÄ›mž","jímž","nímž","již","jichž","nichž","jimž","nimž","jimiž","nimiž","kdo","co","koho","Äeho","komu","Äemu","koho","kom","Äem","kým","Äím","cože","což","koho","jakou"],["co","Äí","Äím","jak","jaký","jaké","kde","kdo","kdý","kolik","který","jenž","proÄ"],["nÄ›jaký","nÄ›jaká","nÄ›jaké","žádný","nijaký","lecjaký","ledajaký","ledasjaký","kdejaký","kdekterý","vÅ¡elijaký","veÅ¡kerý","pár","hodnÄ›","celý","tolik","celou","celé","oba","buÄ","zbytek","žádná","nÄ›jakou","spoustu","nÄ›kolik"],["se","si","sebe","sobÄ›","sebou","svůj","svoje","svá","své","svého","svojí","svému","svoji","svou","svém","svým","sví","svých","svými"],["nÄ›kdo","nÄ›koho","nÄ›komu","nÄ›kom","nÄ›kým","nÄ›co","nic","nÄ›Äeho","nÄ›Äemu","nÄ›co","cokoli","cokoliv","nÄ›Äem","nÄ›Äím","nÄ›která","nÄ›které","nÄ›kterého","nÄ›kterému","nÄ›který","nÄ›kterou","nÄ›kterém","nÄ›kterým","nÄ›kteří","nÄ›kterých","nÄ›kterými","nÄ›jaká","nÄ›jaké","nÄ›jakého","nÄ›jakému","nÄ›jaký","nÄ›jakou","nÄ›jakém","nÄ›jakým","nÄ›jací","nÄ›jakých","nÄ›jakými","nÄ›Äí","nÄ›Äího","nÄ›Äímu","nÄ›Äím","nÄ›Äí","niÄí","nÄ›Äích","nÄ›Äími","ledakdo","ledaco","ledajaký","ledakterý","kdokoliv","kdokoli","kohokoli","komukoli","kohokoli","komkoli","kýmkoli","cokoli","jakýkoli","jakýkoliv","kterýkoli","Äíkoli","kdos","kdosi","cosi","kterýsi","jakýsi","nikdo","Äísi","leckdo","leckdos","ledakdo","ledaskdo","kdekdo","lecco","leccos","ledaco","ledacos","ledaco","ledasco","leckterý","kdekdo","kdeÄí","kdeco","lecÄí","ledaÄí","ledasÄí","nÄ›kde","nikde","kdekoliv","kdekoli","vÅ¡ude","leckde","ledaskde","ledakde","nÄ›kudy","kudysi","nikudy","kdekudy","odnÄ›kud","odkudsi","odnikud","odevÅ¡ad","kdesi","vÅ¡echen","málokdo","máloco","málokterý","zřídkakdo","zřídkaco","sotvakdo","sotvaco","sotva který","každý","každá","každé","každého","každému","každému","každou","každém","každým","každí","každých","každým","každými","vÅ¡echen","vÅ¡echna","vÅ¡echno","vÅ¡e","vÅ¡eho","vší","vÅ¡emu","vÅ¡echnu","vším","vÅ¡ichni","vÅ¡echny","vÅ¡ech","vÅ¡em","vÅ¡emi","takový","takové ","takového","takovou","cokoliv","jiného","jiný","taková","jiné","odtud"],["bÄ›hem","bez","blízko","do","od","okolo","kolem","u","vedle","z","ze","k","ke","kvůli","navzdor","navzdory","krom, vedle","kromÄ›, vedle","místo","namísto","ohlednÄ›","podél","pomocí","oproti","naproti","proti","prostÅ™ednictvím","s","u","vlivem","vyjma","využitím","stran","díky","kvůli","podle","vůÄi","na","té","o","pro","pÅ™es","za","po","v","ve","mezi","s","se","nad","pod","pÅ™ed","mimo","skrz","pÅ™i","jako","asi","dokud","ven","běž","odkud","ode","nahoÅ™e","nahoru","dovnitÅ™","dne","beze","napříÄ","versus","via","vnÄ›","dovnitÅ™","vpÅ™edu","vůkol","vespod","opodál","vepÅ™edu","svrchu","vnitÅ™","zprostÅ™ed","naspodu","zdéli","okol","podál","naspod","kontra","vespodu","zponad","ponad","nadtož","kolkolem","zdélí","veskrz","popod","daleko","vůkolem"],["a","i","aby","ale","že","protože","neboÅ¥","když","až","jestli","jestliže","pokud","kdyby","nebo","anebo","Äi","proto","který","jenž","aniž","než","tak","takže","kvůli","kdybych","ach","zdá","zatím","bÄ›hem","kdybyste","jakožto","jakož","neb"],["Å™ekl","říkala","Å™ekla","Å™ekne","říkal","říká","podle","neÅ™ekl","říkat","chtÄ›jí","nevidÄ›l","vypadáš","mluvil","rozumím","znám","cítím","nemyslím","víme","nevěřím","myslíte"],["jasnÄ›","velmi","vůbec","pÅ™esnÄ›","urÄitÄ›","úplnÄ›","samozÅ™ejmÄ›","docela","skuteÄnÄ›","rozhodnÄ›","vážnÄ›","spolu","jistÄ›","naprosto","velice","hroznÄ›","straÅ¡nÄ›","opravdu"],["mÄ›lo","pÅ™ijít","podívat","dÄ›lej","dá","dala","pÅ™ijde","stojí","udÄ›lám","mohlo","nechte","nemáme","dám","pÅ™iÅ¡la","dÄ›lal","dejte"],["dobÅ™e","dobrý","dobrá","dobré","dost","dlouho","dlouha","nejlepší","poslední","rychle","lepší","vlastní","ostatní","velký","starý","líp","malé","Å¡patný","lépe","hlavní","právo","úžasné","pÄ›kný","stejné","spousta","skvÄ›lá","dobrej","horší","novou","stará","nového","nejdřív","druhou","naposledy","hezký","dlouhý","dobrý","malý","těžký","velký","zlý","delší","lepší","menší","těžší","vÄ›tší","horší","nejdelší","nejlepší","nejmenší","nejtěžší","nejvÄ›tší","nejhorší","pÄ›knÄ›","vÅ¡elijak","nÄ›jak","jaksi","tak nÄ›jak","ijak","nikterak","akkoli","akkoliv","kdejak","už","jen","tady","teÄ","jeÅ¡tÄ›","možná","nikdy","ani","taky","pak","trochu","prostÄ›","víc","jenom","další","právÄ›","zpátky","vždycky","pryÄ","zase","nÄ›kdy","také","chvíli","znovu","snad","tÅ™eba","stále","zrovna","příliÅ¡","nÄ›jak","vždy","skoro","kolem","pozdÄ›ji","zpÄ›t","najednou","támhle","nÄ›kam","hlavnÄ›","Äasto","obÄas","spoleÄnÄ›","dokonce","zde","aspoň","jediný","pouze","staÄí","mnohem","zas","nikam","dávno","již","dvakrát","vzhůru","pomalu","bohužel","radÄ›ji","nejspíš","náhodou","okamžitÄ›"],["jo","hej","oh","uh ","hele","fajn","ok","proboha","ah","okay"],[],["den","dnes","Äas","ráno","zítra","dneska","minut","vÄera","Äasu","dní","dni","dny","hodinu","hodin","týdny","mÄ›síce","roku","mÄ›síců"],["vÄ›c","vÄ›ci","můžeÅ¡","ÄlovÄ›k","lidi","ÄlovÄ›ka","ÄlovÄ›ku","ÄlovÄ›Äe","ÄlovÄ›ku","ÄlovÄ›kovi","lidech","lidem","lidé","lidí","ÄlovÄ›kem","lidmi","chlap","místa"],["atd.","bůhvíkdo","bůhvíjaký","bůhvíÄí","nevímco","nevímkdo a podobnÄ›","si","ne","nÄ›","pan","pane","pana","paní","prosím","pořádku","líto","chlape","sleÄno","mimochodem"],a)),r=[["buÄ","nebo"],["buÄ","anebo"],["ani","ani"],["nejen","ale i"],["jak","tak"],["sice","ale"],["sice","vÅ¡ak"],["jednak","jednak"]],d=["án","ána","áno","áni","ány","ován","ána","áno","áni","ány","en","ena","eno","eni","eny","Ä›n","Ä›na","Ä›no","Ä›ni","Ä›ny","et","eta","eto","eti","ety","it","ita","ito","iti","ity","at","ata","ato","ati","aty","yt","yta","yto","yti","yty","ut","uta","uto","uti","uty"],{getWords:f}=t.languageProcessing,{values:l}=t.languageProcessing,{Clause:c}=l,{getClausesSplitOnStopWords:k,createRegexFromArray:v}=t.languageProcessing,m={Clause:class extends c{constructor(i,e){super(i,e),this._participles=function(i){return f(i).filter((i=>d.some((e=>i.endsWith(e)))))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){this.setPassive(this.getParticiples().length>0)}},regexes:{auxiliaryRegex:v(["být","byl","byla","bylo","byli","byly","je","jsem","jsi","jste","jste","jsme","jste","jsou","budu","budeÅ¡","budete","bude","budeme","budete","budou","nebyl","nebyla","nebylo","nebyli","nebily","nebudu","nebudeÅ¡","nebudete","nebude","nebudeme","nebudete","nebudou"]),stopCharacterRegex:/([:,])(?=[ \n\r\t'"+\-»«‹›<>])/gi,stopwordRegex:v(s)}};function b(i){return k(i,m)}const g=window.lodash,S=function(i,e){const t=e.externalStemmer.palataliseSuffixes,n=i.length;return i.substring(n-2,n)===t.palataliseSuffixCi||i.substring(n-2,n)===t.palataliseSuffixCe||i.substring(n-2,n)===t.palataliseSuffixCiCaron||i.substring(n-2,n)===t.palataliseSuffixCeCaron?i.replace(i.substring(n-2,n),t.palataliseSuffixK):i.substring(n-2,n)===t.palataliseSuffixZi||i.substring(n-2,n)===t.palataliseSuffixZe||i.substring(n-2,n)===t.palataliseSuffixZiCaron||i.substring(n-2,n)===t.palataliseSuffixZeCaron?i.replace(i.substring(n-2,n),t.palataliseSuffixH):i.substring(n-3,n)===t.palataliseSuffixCte||i.substring(n-3,n)===t.palataliseSuffixCti||i.substring(n-3,n)===t.palataliseSuffixCtiAccented?i.replace(i.substring(n-3,n),t.palataliseSuffixCk):i.substring(n-3,n)===t.palataliseSuffixSte||i.substring(n-3,n)===t.palataliseSuffixSti||i.substring(n-3,n)===t.palataliseSuffixStiAccented?i.replace(i.substring(n-3,n),t.palataliseSuffixSk):i.slice(0,-1)},{baseStemmer:x}=t.languageProcessing;function p(i){const e=(0,g.get)(i.getData("morphology"),"cs",!1);return e?i=>function(i,e){return i=function(i,e){for(const t of e.externalStemmer.exceptionStemsWithFullForms)if(t[1].includes(i))return t[0];return i}(i=i.toLowerCase(),e),i=function(i,e){const t=e.externalStemmer.caseSuffixes,n=i.length;if(n>7&&i.substring(n-5,n)===t.caseSuffixAtech)return i.slice(0,-5);if(n>6){if(i.substring(n-4,n)===t.caseSuffixEtem)return i=i.slice(0,-3),S(i,e);if(i.substring(n-4,n)===t.caseSuffixAtum)return i.slice(0,-4)}if(n>5){if(i.substring(n-3,n)===t.caseSuffixEch||i.substring(n-3,n)===t.caseSuffixIch||i.substring(n-3,n)===t.caseSuffixIchAccented||i.substring(n-3,n)===t.caseSuffixEho||i.substring(n-3,n)===t.caseSuffixEmiCaron||i.substring(n-3,n)===t.caseSuffixEmi||i.substring(n-3,n)===t.caseSuffixEmuAccented||i.substring(n-3,n)===t.caseSuffixEte||i.substring(n-3,n)===t.caseSuffixEti||i.substring(n-3,n)===t.caseSuffixIho||i.substring(n-3,n)===t.caseSuffixIhoAccented||i.substring(n-3,n)===t.caseSuffixImi||i.substring(n-3,n)===t.caseSuffixImu)return i=i.slice(0,-2),S(i,e);if(i.substring(n-3,n)===t.caseSuffixAchAccented||i.substring(n-3,n)===t.caseSuffixAta||i.substring(n-3,n)===t.caseSuffixAty||i.substring(n-3,n)===t.caseSuffixYch||i.substring(n-3,n)===t.caseSuffixAma||i.substring(n-3,n)===t.caseSuffixAmi||i.substring(n-3,n)===t.caseSuffixOve||i.substring(n-3,n)===t.caseSuffixOvi||i.substring(n-3,n)===t.caseSuffixYmi)return i.slice(0,-3)}if(n>4){if(i.substring(n-2,n)===t.caseSuffixEm)return i=i.slice(0,-1),S(i,e);if(i.substring(n-2,n)===t.caseSuffixEs||i.substring(n-2,n)===t.caseSuffixEmAccented||i.substring(n-2,n)===t.caseSuffixIm)return i=i.slice(0,-2),S(i,e);if(i.substring(n-2,n)===t.caseSuffixUm||i.substring(n-2,n)===t.caseSuffixAt||i.substring(n-2,n)===t.caseSuffixAm||i.substring(n-2,n)===t.caseSuffixOs||i.substring(n-2,n)===t.caseSuffixUs||i.substring(n-2,n)===t.caseSuffixYm||i.substring(n-2,n)===t.caseSuffixMi||i.substring(n-2,n)===t.caseSuffixOu)return i.slice(0,-2)}if(n>3){if(i.substring(n-1,n)===t.caseSuffixE||i.substring(n-1,n)===t.caseSuffixI||i.substring(n-1,n)===t.caseSuffixIAccented||i.substring(n-1,n)===t.caseSuffixECaron)return S(i,e);if(i.substring(n-1,n)===t.caseSuffixU||i.substring(n-1,n)===t.caseSuffixY||i.substring(n-1,n)===t.caseSuffixURing||i.substring(n-1,n)===t.caseSuffixA||i.substring(n-1,n)===t.caseSuffixO||i.substring(n-1,n)===t.caseSuffixAAccented||i.substring(n-1,n)===t.caseSuffixEAccented||i.substring(n-1,n)===t.caseSuffixYAccented)return i.slice(0,-1)}return i}(i,e),i=function(i,e){const t=e.externalStemmer.possessiveSuffixes,n=i.length;if(n>5){if(i.substring(n-2,n)===t.possessiveSuffixOv)return i.slice(0,-2);if(i.substring(n-2,n)===t.possessiveSuffixesUv)return i.slice(0,-2);if(i.substring(n-2,n)===t.possessiveSuffixIn)return i=i.slice(0,-1),S(i,e)}return i}(i,e),i=function(i,e){const t=e.externalStemmer.comparativeSuffixes,n=i.length;return n>5&&i.substring(n-3,n)===t.comparativeSuffixesEjs||i.substring(n-3,n)===t.comparativeSuffixesEjsCaron?(i=i.slice(0,-2),S(i,e)):i}(i,e),i=function(i,e){const t=e.externalStemmer.diminutiveSuffixes,n=i.length;if(n>7&&i.substring(n-5,n)===t.diminutiveSuffixOusek)return i.slice(0,-5);if(n>6){if(i.substring(n-4,n)===t.diminutiveSuffixEcek||i.substring(n-4,n)===t.diminutiveSuffixEcekAccented||i.substring(n-4,n)===t.diminutiveSuffixIcek||i.substring(n-4,n)===t.diminutiveSuffixIcekAccented||i.substring(n-4,n)===t.diminutiveSuffixEnek||i.substring(n-4,n)===t.diminutiveSuffixEnekAccented||i.substring(n-4,n)===t.diminutiveSuffixInek||i.substring(n-4,n)===t.diminutiveSuffixInekAccented)return i=i.slice(0,-3),S(i,e);if(i.substring(n-4,n)===t.diminutiveSuffixAcekAccented||i.substring(n-4,n)===t.diminutiveSuffixAcek||i.substring(n-4,n)===t.diminutiveSuffixOcek||i.substring(n-4,n)===t.diminutiveSuffixUcek||i.substring(n-4,n)===t.diminutiveSuffixAnek||i.substring(n-4,n)===t.diminutiveSuffixOnek||i.substring(n-4,n)===t.diminutiveSuffixUnek||i.substring(n-4,n)===t.diminutiveSuffixAnekAccented)return i.slice(0,-4)}if(n>5){if(i.substring(n-3,n)===t.diminutiveSuffixEck||i.substring(n-3,n)===t.diminutiveSuffixEckAccented||i.substring(n-3,n)===t.diminutiveSuffixIck||i.substring(n-3,n)===t.diminutiveSuffixIckAccented||i.substring(n-3,n)===t.diminutiveSuffixEnk||i.substring(n-3,n)===t.diminutiveSuffixEnkAccented||i.substring(n-3,n)===t.diminutiveSuffixInk||i.substring(n-3,n)===t.diminutiveSuffixInkAccented)return i=i.slice(0,-3),S(i,e);if(i.substring(n-3,n)===t.diminutiveSuffixAckAccented||i.substring(n-3,n)===t.diminutiveSuffixAck||i.substring(n-3,n)===t.diminutiveSuffixOck||i.substring(n-3,n)===t.diminutiveSuffixUck||i.substring(n-3,n)===t.diminutiveSuffixAnk||i.substring(n-3,n)===t.diminutiveSuffixOnk||i.substring(n-3,n)===t.diminutiveSuffixUnk)return i.slice(0,-3);if(i.substring(n-3,n)===t.diminutiveSuffixAtk||i.substring(n-3,n)===t.diminutiveSuffixAnkAccented||i.substring(n-3,n)===t.diminutiveSuffixUsk)return i.slice(0,-3)}if(n>4){if(i.substring(n-2,n)===t.diminutiveSuffixEk||i.substring(n-2,n)===t.diminutiveSuffixEkAccented||i.substring(n-2,n)===t.diminutiveSuffixIkAccented||i.substring(n-2,n)===t.diminutiveSuffixIk)return i=i.slice(0,-1),S(i,e);if(i.substring(n-2,n)===t.diminutiveSuffixAkAccented||i.substring(n-2,n)===t.diminutiveSuffixAk||i.substring(n-2,n)===t.diminutiveSuffixOk||i.substring(n-2,n)===t.diminutiveSuffixUk)return i.slice(0,-1)}return n>3&&i.substring(n-1,n)===t.diminutiveSuffixK?i.slice(0,-1):i}(i,e),i=function(i,e){const t=e.externalStemmer.augmentativeSuffixes,n=i.length;return n>6&&i.substring(n-4,n)===t.augmentativeSuffixAjzn?i.slice(0,-4):n>5&&i.substring(n-3,n)===t.augmentativeSuffixIzn||i.substring(n-3,n)===t.augmentativeSuffixIsk?(i=i.slice(0,-2),S(i,e)):i}(i,e),i=function(i,e){const t=e.externalStemmer.derivationalSuffixes,n=i.length;if(n>8&&i.substring(n-6,n)===t.derivationalSuffixObinec)return i.slice(0,-6);if(n>7){if(i.substring(n-5,n)===t.derivationalSuffixIonar)return i=i.slice(0,-4),S(i,e);if(i.substring(n-5,n)===t.derivationalSuffixOvisk||i.substring(n-5,n)===t.derivationalSuffixOvstv||i.substring(n-5,n)===t.derivationalSuffixOvist||i.substring(n-5,n)===t.derivationalSuffixOvnik)return i.slice(0,-5)}if(n>6){if(i.substring(n-4,n)===t.derivationalSuffixAsek||i.substring(n-4,n)===t.derivationalSuffixLoun||i.substring(n-4,n)===t.derivationalSuffixNost||i.substring(n-4,n)===t.derivationalSuffixTeln||i.substring(n-4,n)===t.derivationalSuffixOvec||i.substring(n-5,n)===t.derivationalSuffixOvik||i.substring(n-4,n)===t.derivationalSuffixOvtv||i.substring(n-4,n)===t.derivationalSuffixOvin||i.substring(n-4,n)===t.derivationalSuffixStin)return i.slice(0,-4);if(i.substring(n-4,n)===t.derivationalSuffixEnic||i.substring(n-4,n)===t.derivationalSuffixInec||i.substring(n-4,n)===t.derivationalSuffixItel)return i=i.slice(0,-3),S(i,e)}if(n>5){if(i.substring(n-3,n)===t.derivationalSuffixEnk||i.substring(n-3,n)===t.derivationalSuffixIan||i.substring(n-3,n)===t.derivationalSuffixIst||i.substring(n-3,n)===t.derivationalSuffixIsk||i.substring(n-3,n)===t.derivationalSuffixIstCaron||i.substring(n-3,n)===t.derivationalSuffixItb||i.substring(n-3,n)===t.derivationalSuffixIrn)return i=i.slice(0,-2),S(i,e);if(i.substring(n-3,n)===t.derivationalSuffixArn||i.substring(n-3,n)===t.derivationalSuffixOch||i.substring(n-3,n)===t.derivationalSuffixOst||i.substring(n-3,n)===t.derivationalSuffixOvn||i.substring(n-3,n)===t.derivationalSuffixOun||i.substring(n-3,n)===t.derivationalSuffixOut||i.substring(n-3,n)===t.derivationalSuffixOus||i.substring(n-3,n)===t.derivationalSuffixUsk||i.substring(n-3,n)===t.derivationalSuffixKyn||i.substring(n-3,n)===t.derivationalSuffixCan||i.substring(n-3,n)===t.derivationalSuffixKar||i.substring(n-3,n)===t.derivationalSuffixNer||i.substring(n-3,n)===t.derivationalSuffixNik||i.substring(n-3,n)===t.derivationalSuffixCtv||i.substring(n-3,n)===t.derivationalSuffixStv)return i.slice(0,-3)}if(n>4){if(i.substring(n-2,n)===t.derivationalSuffixAcAccented||i.substring(n-2,n)===t.derivationalSuffixAc||i.substring(n-2,n)===t.derivationalSuffixAnAccented||i.substring(n-2,n)===t.derivationalSuffixAn||i.substring(n-2,n)===t.derivationalSuffixAr||i.substring(n-2,n)===t.derivationalSuffixAs)return i.slice(0,-2);if(i.substring(n-2,n)===t.derivationalSuffixEc||i.substring(n-2,n)===t.derivationalSuffixEn||i.substring(n-2,n)===t.derivationalSuffixEnCaron||i.substring(n-2,n)===t.derivationalSuffixEr||i.substring(n-2,n)===t.derivationalSuffixIr||i.substring(n-2,n)===t.derivationalSuffixIc||i.substring(n-2,n)===t.derivationalSuffixIn||i.substring(n-2,n)===t.derivationalSuffixInAccented||i.substring(n-2,n)===t.derivationalSuffixIt||i.substring(n-2,n)===t.derivationalSuffixIv)return i=i.slice(0,-1),S(i,e);if(i.substring(n-2,n)===t.derivationalSuffixOb||i.substring(n-2,n)===t.derivationalSuffixOt||i.substring(n-2,n)===t.derivationalSuffixOv||i.substring(n-2,n)===t.derivationalSuffixOn||i.substring(n-2,n)===t.derivationalSuffixUl||i.substring(n-2,n)===t.derivationalSuffixYn||i.substring(n-2,n)===t.derivationalSuffixCk||i.substring(n-2,n)===t.derivationalSuffixCn||i.substring(n-2,n)===t.derivationalSuffixDl||i.substring(n-2,n)===t.derivationalSuffixNk||i.substring(n-2,n)===t.derivationalSuffixTv||i.substring(n-2,n)===t.derivationalSuffixTk||i.substring(n-2,n)===t.derivationalSuffixVk)return i.slice(0,-2)}return n>3&&(i.charAt(i.length-1)===t.derivationalSuffixC||i.charAt(i.length-1)===t.derivationalSuffixCCaron||i.charAt(i.length-1)===t.derivationalSuffixK||i.charAt(i.length-1)===t.derivationalSuffixL||i.charAt(i.length-1)===t.derivationalSuffixN||i.charAt(i.length-1)===t.derivationalSuffixT)?i.slice(0,-1):i}(i,e),function(i,e){for(const t of e.externalStemmer.stemsThatBelongToOneWord.nouns)if(t.includes(i))return t[0];return i}(i,e)}(i,e):x}const{AbstractResearcher:j}=t.languageProcessing;class h extends j{constructor(i){super(i),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"cs",passiveConstructionType:"periphrastic",firstWordExceptions:n,stopWords:s,functionWords:u,transitionWords:o,twoPartTransitionWords:r}),Object.assign(this.helpers,{getClauses:b,getStemmer:p})}}(window.yoast=window.yoast||{}).Researcher=e})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/de.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/de.js new file mode 100644 index 00000000..74194666 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/de.js @@ -0,0 +1 @@ +(()=>{var e={429:e=>{var t=function(e,t){var r;for(r=0;r1?1:a)+s[s.length-1].length};return{addRule:function(e,t){n.push({regex:e,type:t})},onText:function(e){for(var t=s+e,l=r(n,t);l&&l.max_index!==t.length;)i(t.substring(0,l.max_index),l.rule.type),t=t.substring(l.max_index),l=r(n,t);s=t},end:function(){if(0!==s.length){var e=t(n,s);if(!e){var r=new Error("unable to tokenize");throw r.tokenizer2={buffer:s,line:l,col:a},r}i(s,e.type)}}}}}},t={};function r(s){var n=t[s];if(void 0!==n)return n.exports;var l=t[s]={exports:{}};return e[s](l,l.exports,r),l.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};(()=>{"use strict";r.r(s),r.d(s,{default:()=>jt});const e=window.yoast.analysis,t=["das","dem","den","der","des","die","ein","eine","einem","einen","einer","eines","eins","zwei","drei","vier","fünf","sechs","sieben","acht","neun","zehn","denen","deren","derer","dessen","diese","diesem","diesen","dieser","dieses","jene","jenem","jenen","jener","jenes","welch","welcher","welches"],n=["bekommst","bekommt","bekamst","bekommest","bekommet","bekämest","bekämst","bekämet","bekämt","gekriegt","gehörst","gehört","gehörtest","gehörtet","gehörest","gehöret","erhältst","erhält","erhaltet","erhielt","erhieltest","erhieltst","erhieltet","erhaltest"],l=["werde","wirst","wird","werden","werdet","wurde","ward","wurdest","wardst","wurden","wurdet","worden","werdest","würde","würdest","würden","würdet","bekomme","bekommen","bekam","bekamen","bekäme","bekämen","kriege","kriegst","kriegt","kriegen","kriegte","kriegtest","kriegten","kriegtet","kriegest","krieget","gehöre","gehören","gehörte","gehörten","erhalte","erhalten","erhielten","erhielte"],a=["werden","bekommen","kriegen","gehören","erhalten"],i={participleLike:n,otherAuxiliaries:l.concat(a),filteredAuxiliaries:n.concat(l),infinitiveAuxiliaries:a,all:n.concat(l,a)},b=["aber","abschließend","abschliessend","alldieweil","allerdings","also","anderenteils","andererseits","andernteils","anfaenglich","anfänglich","anfangs","angenommen","anschliessend","anschließend","aufgrund","ausgenommen","ausserdem","außerdem","beispielsweise","bevor","beziehungsweise","bspw","bzw","d.h","da","dabei","dadurch","dafuer","dafür","dagegen","daher","dahingegen","danach","dann","darauf","darum","dass","davor","dazu","dementgegen","dementsprechend","demgegenüber","demgegenueber","demgemaess","demgemäß","demzufolge","denn","dennoch","dergestalt","derweil","desto","deshalb","desungeachtet","deswegen","doch","dort","drittens","ebenfalls","ebenso","endlich","ehe","einerseits","einesteils","entsprechend","entweder","erst","erstens","falls","ferner","folgerichtig","folglich","fürderhin","fuerderhin","genauso","hierdurch","hierzu","hingegen","immerhin","indem","indes","indessen","infolge","infolgedessen","insofern","insoweit","inzwischen","jedenfalls","jedoch","kurzum","m.a.w","mitnichten","mitunter","möglicherweise","moeglicherweise","nachdem","nebenher","nichtsdestotrotz","nichtsdestoweniger","ob","obenrein","obgleich","obschon","obwohl","obzwar","ohnehin","richtigerweise","schliesslich","schließlich","seit","seitdem","sobald","sodass","so dass","sofern","sogar","solang","solange","somit","sondern","sooft","soviel","soweit","sowie","sowohl","statt","stattdessen","trotz","trotzdem","überdies","übrigens","ueberdies","uebrigens","ungeachtet","vielmehr","vorausgesetzt","vorher","waehrend","während","währenddessen","waehrenddessen","weder","wegen","weil","weiter","weiterhin","wenn","wenngleich","wennschon","wennzwar","weshalb","widrigenfalls","wiewohl","wobei","wohingegen","z.b","zudem","zuerst","zufolge","zuletzt","zumal","zuvor","zwar","zweitens"],u=b.concat(["abgesehen von","abgesehen davon","als dass","als ob","als wenn","anders ausgedrückt","anders ausgedrueckt","anders formuliert","anders gefasst","anders gefragt","anders gesagt","anders gesprochen","anstatt dass","auch wenn","auf grund","auf jeden fall","aus diesem grund","ausser dass","außer dass","ausser wenn","außer wenn","besser ausgedrückt","besser ausgedrueckt","besser formuliert","besser gesagt","besser gesprochen","bloss dass","bloß dass","darüber hinaus","das heisst","das heißt","des weiteren","dessen ungeachtet","ebenso wie","genauso wie","geschweige denn","im fall","im falle","im folgenden","im gegensatz dazu","im gegenteil","im grunde genommen","in diesem sinne","je nachdem","kurz gesagt","mit anderen worten","ohne dass","so dass","umso mehr als","umso weniger als","umso mehr, als","umso weniger, als","unbeschadet dessen","und zwar","ungeachtet dessen","unter dem strich","zum beispiel","zunächst einmal"]);function g(e){let t=e;return e.forEach((r=>{(r=r.split("-")).length>0&&r.filter((t=>!e.includes(t))).length>0&&(t=t.concat(r))})),t}const h=i.filteredAuxiliaries,o=["das","dem","den","der","des","die","ein","eine","einem","einen","einer","eines"],c=["eins","zwei","drei","vier","fünf","sechs","sieben","acht","neun","zehn","elf","zwölf","zwoelf","dreizehn","vierzehn","fünfzehn","fuenfzehn","sechzehn","siebzehn","achtzehn","neunzehn","zwanzig","hundert","einhundert","zweihundert","dreihundert","vierhundert","fünfhundert","fuenfhundert","sechshundert","siebenhundert","achthundert","neunhundert","tausend","million","milliarde","billion","billiarde"],d=["erste","erster","ersten","erstem","erstes","zweite","zweites","zweiter","zweitem","zweiten","dritte","dritter","drittes","dritten","drittem","vierter","vierten","viertem","viertes","vierte","fünfte","fünfter","fünftes","fünften","fünftem","fuenfte","fuenfter","fuenftem","fuenften","fuenftes","sechste","sechster","sechstes","sechsten","sechstem","siebte","siebter","siebten","siebtem","siebtes","achte","achter","achten","achtem","achtes","neunte","neunter","neuntes","neunten","neuntem","zehnte","zehnter","zehnten","zehntem","zehntes","elfte","elfter","elftes","elften","elftem","zwölfte","zwölfter","zwölften","zwölftem","zwölftes","zwoelfte","zwoelfter","zwoelften","zwoelftem","zwoelftes","dreizehnte","dreizehnter","dreizehntes","dreizehnten","dreizehntem","vierzehnte","vierzehnter","vierzehntes","vierzehnten","vierzehntem","fünfzehnte","fünfzehnten","fünfzehntem","fünfzehnter","fünfzehntes","fuenfzehnte","fuenfzehnten","fuenfzehntem","fuenfzehnter","fuenfzehntes","sechzehnte","sechzehnter","sechzehnten","sechzehntes","sechzehntem","siebzehnte","siebzehnter","siebzehntes","siebzehntem","siebzehnten","achtzehnter","achtzehnten","achtzehntem","achtzehntes","achtzehnte","nehnzehnte","nehnzehnter","nehnzehntem","nehnzehnten","nehnzehntes","zwanzigste","zwanzigster","zwanzigstem","zwanzigsten","zwanzigstes"],w=["ich","du","er","sie","es","wir","ihr"],m=["mich","dich","ihn","uns","euch"],f=["denen","deren","derer","dessen","diese","diesem","diesen","dieser","dieses","jene","jenem","jenen","jener","jenes","welch","welcher","welches","derjenige","desjenigen","demjenigen","denjenigen","diejenige","derjenigen","dasjenige","diejenigen"],p=["mein","meine","meinem","meiner","meines","meinen","dein","deine","deinem","deiner","deines","deinen","sein","seine","seinem","seiner","seines","ihre","ihrem","ihren","ihrer","ihres","unser","unsere","unserem","unseren","unserer","unseres","euer","eure","eurem","euren","eurer","eures","einanders"],k=["manche","manch","viele","viel","vieler","vielen","vielem","all","alle","aller","alles","allen","allem","allerlei","solcherlei","einige","etliche","wenige","weniger","wenigen","wenigem","weniges","wenig","wenigerer","wenigeren","wenigerem","wenigere","wenigeres","wenig","bisschen","paar","kein","keines","keinem","keinen","keine","mehr","genug","mehrere","mehrerer","mehreren","mehrerem","mehreres","verschiedene","verschiedener","verschiedenen","verschiedenem","verschiedenes","verschiedne","verschiedner","verschiednen","verschiednem","verschiednes","art","arten","sorte","sorten"],y=["sich"],z=["einander"],v=["andere","anderer","anderem","anderen","anderes","andren","andern","andrem","anderm","andre","andrer","andres","beide","beides","beidem","beider","beiden","etwas","irgendetwas","irgendein","irgendeinen","irgendeinem","irgendeines","irgendeine","irgendeiner","irgendwas","irgendwessen","irgendwer","irgendwen","irgendwem","irgendwelche","irgendwelcher","irgendwelchem","irgendwelchen","irgendwelches","irgendjemand","irgendjemanden","irgendjemandem","irgendjemandes","irgendwie","wer","wen","wem","wessen","was","welchen","welchem","welche","jeder","jedes","jedem","jeden","jede","jedweder","jedweden","jedwedem","jedwedes","jedwede","jeglicher","jeglichen","jeglichem","jegliches","jegliche","jedermann","jedermanns","jemand","jemanden","jemandem","jemands","jemandes","man","meinesgleichen","sämtlich","saemtlich","sämtlicher","saemtlicher","sämtlichen","saemtlichen","sämtlichem","saemtlichem","sämtliches","saemtliches","sämtliche","saemtliche","solche","solcher","solchen","solchem","solches","niemand","niemanden","niemandem","niemandes","niemands","nichts","zweiter"],E=["warum","wie","wo","woher","wohin","wann"],F=["dahinter","damit","daneben","daran","daraus","darin","darunter","darüber","darueber","davon","dazwischen","hieran","hierauf","hieraus","hierbei","hierfuer","hierfür","hiergegen","hierhinter","hierin","hiermit","hiernach","hierum","hierunter","hierueber","hierüber","hiervor","hierzwischen","hierneben","hiervon","wodurch","wofür","wofuer","wogegen","wohinter","womit","wonach","woneben","woran","worauf","woraus","worin","worum","worunter","worüber","worueber","wovon","wovor","wozu","wozwischen"],B=["hier","dorthin","hierher","dorther"],j=["allenfalls","keinesfalls","anderenfalls","andernfalls","andrenfalls","äußerstenfalls","bejahendenfalls","bestenfalls","eintretendenfalls","entgegengesetztenfalls","erforderlichenfalls","gegebenenfalls","geringstenfalls","gleichfalls","günstigenfalls","günstigstenfalls","höchstenfalls","möglichenfalls","notfalls","nötigenfalls","notwendigenfalls","schlimmstenfalls","vorkommendenfalls","zutreffendenfalls","keineswegs","durchwegs","geradenwegs","geradeswegs","geradewegs","gradenwegs","halbwegs","mittwegs","unterwegs"],x=["habe","hast","hat","habt","habest","habet","hatte","hattest","hatten","hätte","haette","hättest","haettest","hätten","haetten","haettet","hättet","hab","bin","bist","ist","sind","sei","seiest","seien","seiet","war","warst","waren","wart","wäre","waere","wärest","waerest","wärst","waerst","wären","waeren","wäret","waeret","wärt","waert","seid","darf","darfst","dürft","duerft","dürfe","duerfe","dürfest","duerfest","dürfet","duerfet","durfte","durftest","durften","durftet","dürfte","duerfte","dürftest","duerftest","dürften","duerften","dürftet","duerftet","kann","kannst","könnt","koennt","könne","koenne","könnest","koennest","könnet","koennet","konnte","konntest","konnten","konntet","könnte","koennte","könntest","koenntest","könnten","koennten","könntet","koenntet","mag","magst","mögt","moegt","möge","moege","mögest","moegest","möget","moeget","mochte","mochtest","mochten","mochtet","möchte","moechte","möchtest","moechtest","möchten","moechten","möchtet","moechtet","muss","muß","musst","mußt","müsst","muesst","müßt","mueßt","müsse","muesse","müssest","muessest","müsset","muesset","musste","mußte","musstest","mußtest","mussten","mußten","musstet","mußtet","müsste","muesste","müßte","mueßte","müsstest","muesstest","müßtest","mueßtest","müssten","muessten","müßten","mueßten","müsstet","muesstet","müßtet","mueßtet","soll","sollst","sollt","solle","sollest","sollet","sollte","solltest","sollten","solltet","will","willst","wollt","wolle","wollest","wollet","wollte","wolltest","wollten","wolltet","lasse","lässt","laesst","läßt","laeßt","lasst","laßt","lassest","lasset","ließ","ließest","ließt","ließen","ließe","ließet","liess","liessest","liesst","liessen","liesse","liesset"],A=["haben","dürfen","duerfen","können","koennen","mögen","moegen","müssen","muessen","sollen","wollen","lassen"],D=["bleibe","bleibst","bleibt","bleibest","bleibet","blieb","bliebst","bliebt","blieben","bliebe","bliebest","bliebet","heiße","heißt","heißest","heißet","heisse","heisst","heissest","heisset","hieß","hießest","hießt","hießen","hieße","hießet","hiess","hiessest","hiesst","hiessen","hiesse","hiesset","giltst","gilt","geltet","gelte","geltest","galt","galtest","galtst","galten","galtet","gälte","gaelte","gölte","goelte","gältest","gaeltest","göltest","goeltest","gälten","gaelten","gölten","goelten","gältet","gaeltet","göltet","goeltet","aussehe","aussiehst","aussieht","ausseht","aussehest","aussehet","aussah","aussahst","aussahen","aussaht","aussähe","aussaehe","aussähest","aussaehest","aussähst","aussaehst","aussähet","aussaehet","aussäht","aussaeht","aussähen","aussaehen","scheine","scheinst","scheint","scheinest","scheinet","schien","schienst","schienen","schient","schiene","schienest","schienet","erscheine","erscheinst","erscheint","erscheinest","erscheinet","erschien","erschienst","erschienen","erschient","erschiene","erschienest","erschienet"],S=["bleiben","heißen","heissen","gelten","aussehen","scheinen","erscheinen"],$=["a","à","ab","abseits","abzüglich","abzueglich","als","am","an","angelegentlich","angesichts","anhand","anlässlich","anlaesslich","ans","anstatt","anstelle","auf","aufs","aufseiten","aus","ausgangs","ausschließlich","ausschliesslich","außerhalb","ausserhalb","ausweislich","bar","behufs","bei","beidseits","beiderseits","beim","betreffs","bezüglich","bezueglich","binnen","bis","contra","dank","diesseits","durch","einbezüglich","einbezueglich","eingangs","eingedenk","einschließlich","einschliesslich","entgegen","entlang","exklusive","fern","fernab","fuer","für","fuers","fürs","gegen","gegenüber","gegenueber","gelegentlich","gemäß","gemaeß","gen","getreu","gleich","halber","hinsichtlich","hinter","hinterm","hinters","im","in","inklusive","inmitten","innerhalb","innert","ins","je","jenseits","kontra","kraft","längs","laengs","längsseits","laengsseits","laut","links","mangels","minus","mit","mithilfe","mitsamt","mittels","nach","nächst","naechst","nah","namens","neben","nebst","nördlich","noerdlich","nordöstlich","nordoestlich","nordwestlich","oberhalb","ohne","östlich","oestlich","per","plus","pro","quer","rechts","rücksichtlich","ruecksichtlich","samt","seitens","seitlich","seitwärts","seitwaerts","südlich","suedlich","südöstlich","suedoestlich","südwestlich","suedwestlich","über","ueber","überm","ueberm","übern","uebern","übers","uebers","um","ums","unbeschadet","unerachtet","unfern","unter","unterhalb","unterm","untern","unters","unweit","vermittels","vermittelst","vermöge","vermoege","via","vom","von","vonseiten","vor","vorbehaltlich","wegen","wider","zeit","zu","zugunsten","zulieb","zuliebe","zum","zur","zusätzlich","zusaetzlich","zuungunsten","zuwider","zuzüglich","zuzueglich","zwecks","zwischen"],C=["und","oder","umso"],R=["auch","noch","nur"],q=["nun","so","gleichwohl"],W=["sage","sagst","sagt","sagest","saget","sagte","sagtest","sagten","sagtet","gesagt","fragst","fragt","fragest","fraget","fragte","fragtest","fragten","fragtet","gefragt","erkläre","erklärst","erklärt","erklaere","erklaerst","erklaert","erklärte","erklärtest","erklärtet","erklärten","erklaerte","erklaertest","erklaertet","erklaerten","denke","denkst","denkt","denkest","denket","dachte","dachtest","dachten","dachtet","dächte","dächtest","dächten","dächtet","daechte","daechtest","daechten","daechtet","finde","findest","findet","gefunden"],T=["sagen","erklären","erklaeren","denken","finden"],P=["sehr","recht","überaus","ueberaus","ungemein","weitaus","einigermaßen","einigermassen","ganz","schwer","tierisch","ungleich","ziemlich","übelst","uebelst","stark","volkommen","durchaus","gar"],M=["geschienen","meinst","meint","meinest","meinet","meinte","meintest","meinten","meintet","gemeint","stehe","stehst","steht","gehe","gehst","geht","gegangen","ging","gingst","gingen","gingt"],O=["tun","machen","stehen","wissen","gehen","kommen"],U=["einerlei","egal","neu","neue","neuer","neuen","neues","neuem","neuerer","neueren","neuerem","neueres","neuere","neuester","neuster","neuesten","neusten","neuestem","neustem","neuestes","neustes","neueste","neuste","alt","alter","alten","altem","altes","alte","ältere","älteren","älterer","älteres","ältester","ältesten","ältestem","ältestes","älteste","aeltere","aelteren","aelterer","aelteres","aeltester","aeltesten","aeltestem","aeltestes","aelteste","gut","guter","gutem","guten","gutes","gute","besser","besserer","besseren","besserem","besseres","bester","besten","bestem","bestes","beste","größte","grösste","groß","großer","großen","großem","großes","große","großerer","großerem","großeren","großeres","großere","großter","großten","großtem","großtes","großte","gross","grosser","grossen","grossem","grosses","grosse","grosserer","grosserem","grosseren","grosseres","grossere","grosster","grossten","grosstem","grosstes","grosste","einfacher","einfachen","einfachem","einfaches","einfache","einfacherer","einfacheren","einfacherem","einfacheres","einfachere","einfachste","einfachster","einfachsten","einfachstes","einfachstem","schnell","schneller","schnellen","schnellem","schnelles","schnelle","schnellere","schnellerer","schnelleren","schnelleres","schnellerem","schnellster","schnellste","schnellsten","schnellstem","schnellstes","weit","weiten","weitem","weites","weiterer","weiteren","weiterem","weiteres","weitere","weitester","weitesten","weitestem","weitestes","weiteste","eigen","eigener","eigenen","eigenes","eigenem","eigene","eigenerer","eignerer","eigeneren","eigneren","eigenerem","eignerem","eigeneres","eigneres","eigenere","eignere","eigenster","eigensten","eigenstem","eigenstes","eigenste","wenigster","wenigsten","wenigstem","wenigstes","wenigste","minderer","minderen","minderem","mindere","minderes","mindester","mindesten","mindestes","mindestem","mindeste","lang","langer","langen","langem","langes","längerer","längeren","längerem","längeres","längere","längster","längsten","längstem","längstes","längste","laengerer","laengeren","laengerem","laengeres","laengere","laengster","laengsten","laengstem","laengstes","laengste","tief","tiefer","tiefen","tiefem","tiefes","tiefe","tieferer","tieferen","tieferem","tieferes","tiefere","tiefster","tiefsten","tiefstem","tiefste","tiefstes","hoch","hoher","hohen","hohem","hohes","hohe","höher","höherer","höhere","höheren","höherem","höheres","hoeherer","hoehere","hoeheren","hoeherem","hoeheres","höchster","höchste","höchsten","höchstem","höchstes","hoechster","hoechste","hoechsten","hoechstem","hoechstes","regulär","regulärer","regulären","regulärem","reguläres","reguläre","regulaer","regulaerer","regulaeren","regulaerem","regulaeres","regulaere","regulärerer","reguläreren","regulärerem","reguläreres","regulärere","regulaererer","regulaereren","regulaererem","regulaereres","regulaerere","regulärster","regulärsten","regulärstem","regulärstes","regulärste","regulaerster","regulaersten","regulaerstem","regulaerstes","regulaerste","normal","normaler","normalen","normalem","normales","normale","normalerer","normaleren","normalerem","normaleres","normalere","normalster","normalsten","normalstem","normalstes","normalste","klein","kleiner","kleinen","kleinem","kleines","kleine","kleinerer","kleineres","kleineren","kleinerem","kleinere","kleinster","kleinsten","kleinstem","kleinstes","kleinste","winzig","winziger","winzigen","winzigem","winziges","winzigerer","winzigeren","winzigerem","winzigeres","winzigere","winzigster","winzigsten","winzigstem","winzigste","winzigstes","sogenannt","sogenannter","sogenannten","sogenanntem","sogenanntes","sogenannte","kurz","kurzer","kurzen","kurzem","kurzes","kurze","kürzerer","kürzeres","kürzeren","kürzerem","kürzere","kuerzerer","kuerzeres","kuerzeren","kuerzerem","kuerzere","kürzester","kürzesten","kürzestem","kürzestes","kürzeste","kuerzester","kuerzesten","kuerzestem","kuerzestes","kuerzeste","wirklicher","wirklichen","wirklichem","wirkliches","wirkliche","wirklicherer","wirklicheren","wirklicherem","wirklicheres","wirklichere","wirklichster","wirklichsten","wirklichstes","wirklichstem","wirklichste","eigentlicher","eigentlichen","eigentlichem","eigentliches","eigentliche","schön","schöner","schönen","schönem","schönes","schöne","schönerer","schöneren","schönerem","schöneres","schönere","schönster","schönsten","schönstem","schönstes","schönste","real","realer","realen","realem","reales","realerer","realeren","realerem","realeres","realere","realster","realsten","realstem","realstes","realste","derselbe","denselben","demselben","desselben","dasselbe","dieselbe","derselben","dieselben","gleicher","gleichen","gleichem","gleiches","gleiche","gleicherer","gleicheren","gleicherem","gleicheres","gleichere","gleichster","gleichsten","gleichstem","gleichstes","gleichste","bestimmter","bestimmten","bestimmtem","bestimmtes","bestimmte","bestimmtere","bestimmterer","bestimmterem","bestimmteren","bestimmteres","bestimmtester","bestimmtesten","bestimmtestem","bestimmtestes","bestimmteste","überwiegend","ueberwiegend","zumeist","meistens","meisten","meiste","meistem","meistes","großenteils","grossenteils","meistenteils","weithin","ständig","staendig","laufend","dauernd","andauernd","immerfort","irgendwo","irgendwann","ähnlicher","ähnlichen","ähnlichem","ähnliches","ähnliche","ähnlich","ähnlicherer","ähnlicheren","ähnlicherem","ähnlicheres","ähnlichere","ähnlichster","ähnlichsten","ähnlichstem","ähnlichstes","ähnlichste","schlecht","schlechter","schlechten","schlechtem","schlechtes","schlechte","schlechterer","schlechteren","schlechterem","schlechteres","schlechtere","schlechtester","schlechtesten","schlechtestem","schlechtestes","schlechteste","schlimm","schlimmer","schlimmen","schlimmem","schlimmes","schlimme","schlimmerer","schlimmeren","schlimmerem","schlimmeres","schlimmere","schlimmster","schlimmsten","schlimmstem","schlimmstes","schlimmste","toll","toller","tollen","tollem","tolles","tolle","tollerer","tolleren","tollerem","tollere","tolleres","tollster","tollsten","tollstem","tollstes","tollste","super","mögliche","möglicher","mögliches","möglichen","möglichem","möglich","moegliche","moeglicher","moegliches","moeglichen","moeglichem","moeglich","nächsten","nächster","nächstem","nächste","nächstes","naechsten","voll","voller","vollen","vollem","volle","volles","vollerer","volleren","vollerem","vollere","volleres","vollster","vollsten","vollstem","vollste","vollstes","außen","ganzer","ganzen","ganzem","ganze","ganzes","gern","gerne","oben","unten","zurück","zurueck","nicht","eher","ehere","eherem","eheren","eheres","eheste","ehestem","ehensten","ehesten"],I=["ach","aha","oh","au","bäh","baeh","igitt","huch","hurra","hoppla","nanu","oha","olala","pfui","tja","uups","wow","grr","äh","aeh","ähm","aehm","öhm","oehm","hm","mei","mhm","okay","richtig","eijeijeijei"],N=["g","el","tl","wg","be","bd","cl","dl","dag","do","gl","gr","kg","kl","cb","ccm","l","ms","mg","ml","mi","pk","pr","pp","sc","sp","st","sk","ta","tr","cm","mass"],V=["sekunde","sekunden","minute","minuten","stunde","stunden","uhr","tag","tages","tags","tage","tagen","woche","wochen","monat","monate","monates","monats","monaten","jahr","jahres","jahrs","jahre","jahren","morgens","mittags","abends","nachts","heute","gestern","morgen","vorgestern","übermorgen","uebermorgen"],L=["ding","dinge","dinges","dinger","dingern","dingen","sache","sachen","weise","weisen","wahrscheinlichkeit","zeug","zeuge","zeuges","zeugen","mal","einmal","teil","teile","teiles","teilen","prozent","prozents","prozentes","prozente","prozenten","beispiel","beispiele","beispieles","beispiels","beispielen","aspekt","aspekte","aspektes","aspekts","aspekten","idee","ideen","ahnung","ahnungen","thema","themas","themata","themen","fall","falle","falles","fälle","fällen","faelle","faellen","mensch","menschen","leute"],_=["nix","nixe","nixes","nixen","usw.","amen","ja","nein","euro"],H=(g([].concat(A,a,O,S,T)),g([].concat(d,U)),g([].concat(o,$,C,f,P,k)),g([].concat(b,j,w,m,["mir","dir","ihm","ihnen"],y,I,c,D,W,x,h,M,v,R,q,E,B,_,F,N,V,L,z,p)),g([].concat(o,c,d,f,p,y,z,w,m,k,v,E,F,B,j,h,a,x,A,D,S,$,C,R,q,W,T,b,["etwa","absolut","unbedingt","wieder","definitiv","bestimmt","immer","äußerst","aeußerst","höchst","hoechst","sofort","augenblicklich","umgehend","direkt","unmittelbar","nämlich","naemlich","natürlich","natuerlich","besonders","hauptsächlich","hauptsaechlich","jetzt","eben","heutzutage","eindeutig","wirklich","echt","wahrhaft","ehrlich","aufrichtig","wahrheitsgemäß","letztlich","einmalig","unübertrefflich","normalerweise","gewöhnlich","gewoehnlich","üblicherweise","ueblicherweise","sonst","fast","nahezu","beinahe","knapp","annähernd","annaehernd","geradezu","bald","vielleicht","wahrscheinlich","wohl","voraussichtlich","zugegeben","ursprünglich","insgesamt","tatsächlich","eigentlich","wahrhaftig","bereits","schon","oft","häufig","haeufig","regelmäßig","regelmaeßig","gleichmäßig","gleichmaeßig","einfach","lediglich","bloß","bloss","halt","wahlweise","eventuell","manchmal","teilweise","nie","niemals","nimmer","jemals","allzeit","irgendeinmal","anders","momentan","gegenwärtig","gegenwaertig","nebenbei","anderswo","woanders","anderswohin","anderorts","insbesondere","namentlich","sonderlich","ausdrücklich","ausdruecklich","vollends","kürzlich","kuerzlich","jüngst","juengst","unlängst","unlaengst","neuerdings","neulich","letztens","neuerlich","verhältnismäßig","verhaeltnismaessig","deutlich","klar","offenbar","anscheinend","genau","u.a","damals","zumindest"],P,M,O,I,U,N,L,_,V,["fr","hr","dr","prof"],["jr","jun","sen","sr"]))),G=[":","aber","als","bevor","bis","da","damit","daß","dass","denn","doch","ehe","falls","gleichwohl","indem","indes","indessen","insofern","insoweit","nachdem","nun","ob","obgleich","obschon","obwohl","obzwar","oder","seitdem","sobald","sodass","sofern","solange","sondern","sooft","soviel","soweit","sowie","trotz","und","ungeachtet","waehrend","während","weil","welche","welchem","welchen","welcher","welches","wem","wen","wenn","wenngleich","wennschon","wer","wes","wessen","wie","wiewohl","wohingegen","zumal"],Z=[["anstatt","dass"],["bald","bald"],["dadurch","dass"],["dessen ungeachtet","dass"],["entweder","oder"],["einerseits","andererseits"],["erst","wenn"],["je","desto"],["je","umso"],["umso","umso"],["mal","mal"],["nicht nur","sondern auch"],["ob","oder"],["ohne","dass"],["so","dass"],["sowohl","als auch"],["sowohl","wie auch"],["teils","teils"],["unbeschadet dessen","dass"],["weder","noch"],["wenn","auch"],["wenn","schon"],["nicht weil","sondern"]],Q=JSON.parse('{"vowels":"aeiouyäöüáéâàèîêâûôœ","deviations":{"vowels":[{"fragments":["ouil","deaux","deau$","oard","äthiop","euil","veau","eau$","ueue","lienisch","ance$","ence$","time$","once$","ziat","guette","ête","ôte$","[hp]omme$","[qdscn]ue$","aire$","ture$","êpe$","[^q]ui$","tiche$","vice$","oile$","zial","cruis","leas","coa[ct]","[^i]deal","[fw]eat","[lsx]ed$"],"countModifier":-1},{"fragments":["aau","a[äöüo]","äue","äeu","aei","aue","aeu","ael","ai[aeo]","saik","aismus","ä[aeoi]","auä","éa","e[äaoö]","ei[eo]","ee[aeiou]","eu[aäe]","eum$","eü","o[aäöü]","poet","oo[eo]","oie","oei[^l]","oeu[^f]","öa","[fgrz]ieu","mieun","tieur","ieum","i[aiuü]","[^l]iä","[^s]chien","io[bcdfhjkmpqtuvwx]","[bdhmprv]ion","[lr]ior","[^g]io[gs]","[dr]ioz","elioz","zioni","bio[lnorz]","iö[^s]","ie[ei]","rier$","öi[eg]","[^r]öisch","[^gqv]u[aeéioöuü]","quie$","quie[^s]","uäu","^us-","^it-","üe","naiv","aisch$","aische$","aische[nrs]$","[lst]ien","dien$","gois","[^g]rient","[aeiou]y[aeiou]","byi","yä","[a-z]y[ao]","yau","koor","scient","eriel","[dg]oing"],"countModifier":1},{"fragments":["eauü","ioi","ioo","ioa","iii","oai","eueu"],"countModifier":1}],"words":{"full":[{"word":"beach","syllables":1},{"word":"beat","syllables":1},{"word":"beau","syllables":1},{"word":"beaune","syllables":1},{"word":"belle","syllables":1},{"word":"bouche","syllables":1},{"word":"brake","syllables":1},{"word":"cache","syllables":1},{"word":"chaiselongue","syllables":2},{"word":"choke","syllables":1},{"word":"cordiale","syllables":3},{"word":"core","syllables":1},{"word":"dope","syllables":1},{"word":"eat","syllables":1},{"word":"eye","syllables":1},{"word":"fake","syllables":1},{"word":"fame","syllables":1},{"word":"fatigue","syllables":2},{"word":"femme","syllables":1},{"word":"force","syllables":1},{"word":"game","syllables":1},{"word":"games","syllables":1},{"word":"gate","syllables":1},{"word":"grande","syllables":1},{"word":"ice","syllables":1},{"word":"ion","syllables":2},{"word":"joke","syllables":1},{"word":"jupe","syllables":1},{"word":"maisch","syllables":1},{"word":"maische","syllables":2},{"word":"move","syllables":1},{"word":"native","syllables":2},{"word":"nice","syllables":1},{"word":"one","syllables":1},{"word":"pipe","syllables":1},{"word":"prime","syllables":1},{"word":"rate","syllables":1},{"word":"rhythm","syllables":2},{"word":"ride","syllables":1},{"word":"rides","syllables":1},{"word":"rien","syllables":2},{"word":"save","syllables":1},{"word":"science","syllables":2},{"word":"siècle","syllables":1},{"word":"site","syllables":1},{"word":"suite","syllables":1},{"word":"take","syllables":1},{"word":"taupe","syllables":1},{"word":"universe","syllables":3},{"word":"vogue","syllables":1},{"word":"wave","syllables":1},{"word":"zion","syllables":2}],"fragments":{"global":[{"word":"abreaktion","syllables":4},{"word":"adware","syllables":2},{"word":"affaire","syllables":3},{"word":"aiguière","syllables":2},{"word":"anisette","syllables":3},{"word":"appeal","syllables":2},{"word":"backstage","syllables":2},{"word":"bankrate","syllables":2},{"word":"baseball","syllables":2},{"word":"basejump","syllables":2},{"word":"beachcomber","syllables":3},{"word":"beachvolleyball","syllables":4},{"word":"beagle","syllables":2},{"word":"beamer","syllables":2},{"word":"beamer","syllables":2},{"word":"béarnaise","syllables":3},{"word":"beaufort","syllables":2},{"word":"beaujolais","syllables":3},{"word":"beauté","syllables":2},{"word":"beauty","syllables":2},{"word":"belgier","syllables":3},{"word":"bestien","syllables":2},{"word":"biskuit","syllables":2},{"word":"bleach","syllables":1},{"word":"blue","syllables":1},{"word":"board","syllables":1},{"word":"boat","syllables":1},{"word":"bodysuit","syllables":3},{"word":"bordelaise","syllables":3},{"word":"break","syllables":1},{"word":"build","syllables":1},{"word":"bureau","syllables":2},{"word":"business","syllables":2},{"word":"cabrio","syllables":3},{"word":"cabriolet","syllables":4},{"word":"cachesexe","syllables":2},{"word":"camaieu","syllables":3},{"word":"canyon","syllables":2},{"word":"case","syllables":1},{"word":"catsuit","syllables":2},{"word":"centime","syllables":3},{"word":"chaise","syllables":2},{"word":"champion","syllables":2},{"word":"championat","syllables":3},{"word":"chapiteau","syllables":3},{"word":"chateau","syllables":2},{"word":"château","syllables":2},{"word":"cheat","syllables":1},{"word":"cheese","syllables":1},{"word":"chihuahua","syllables":3},{"word":"choice","syllables":1},{"word":"circonflexe","syllables":3},{"word":"clean","syllables":1},{"word":"cloche","syllables":1},{"word":"close","syllables":1},{"word":"clothes","syllables":1},{"word":"commerce","syllables":2},{"word":"crime","syllables":1},{"word":"crossrate","syllables":2},{"word":"cuisine","syllables":2},{"word":"culotte","syllables":2},{"word":"death","syllables":1},{"word":"defense","syllables":2},{"word":"détente","syllables":2},{"word":"dread","syllables":1},{"word":"dream","syllables":1},{"word":"dresscode","syllables":2},{"word":"dungeon","syllables":2},{"word":"easy","syllables":2},{"word":"engagement","syllables":3},{"word":"entente","syllables":2},{"word":"eye-catcher","syllables":3},{"word":"eyecatcher","syllables":3},{"word":"eyeliner","syllables":3},{"word":"eyeword","syllables":2},{"word":"fashion","syllables":2},{"word":"feature","syllables":2},{"word":"ferien","syllables":3},{"word":"fineliner","syllables":3},{"word":"fisheye","syllables":2},{"word":"flake","syllables":1},{"word":"flambeau","syllables":2},{"word":"flatrate","syllables":2},{"word":"fleece","syllables":1},{"word":"fraîche","syllables":1},{"word":"freak","syllables":1},{"word":"frites","syllables":1},{"word":"future","syllables":2},{"word":"gaelic","syllables":2},{"word":"game-show","syllables":2},{"word":"gameboy","syllables":2},{"word":"gamepad","syllables":2},{"word":"gameplay","syllables":2},{"word":"gameport","syllables":2},{"word":"gameshow","syllables":2},{"word":"garigue","syllables":2},{"word":"garrigue","syllables":2},{"word":"gatefold","syllables":2},{"word":"gateway","syllables":2},{"word":"geflashed","syllables":2},{"word":"georgier","syllables":4},{"word":"goal","syllables":1},{"word":"grapefruit","syllables":2},{"word":"great","syllables":1},{"word":"groupware","syllables":2},{"word":"gueule","syllables":1},{"word":"guide","syllables":1},{"word":"guilloche","syllables":2},{"word":"gynäzeen","syllables":4},{"word":"gynözeen","syllables":4},{"word":"haircare","syllables":2},{"word":"hardcore","syllables":2},{"word":"hardware","syllables":2},{"word":"head","syllables":1},{"word":"hearing","syllables":2},{"word":"heart","syllables":1},{"word":"heavy","syllables":2},{"word":"hedge","syllables":1},{"word":"heroin","syllables":3},{"word":"inclusive","syllables":3},{"word":"initiative","syllables":4},{"word":"inside","syllables":2},{"word":"jaguar","syllables":3},{"word":"jalousette","syllables":3},{"word":"jeans","syllables":1},{"word":"jeunesse","syllables":2},{"word":"juice","syllables":1},{"word":"jukebox","syllables":2},{"word":"jumpsuit","syllables":2},{"word":"kanarien","syllables":4},{"word":"kapriole","syllables":4},{"word":"karosserielinie","syllables":6},{"word":"konopeen","syllables":4},{"word":"lacrosse","syllables":2},{"word":"laplace","syllables":2},{"word":"late-","syllables":1},{"word":"lead","syllables":1},{"word":"league","syllables":1},{"word":"learn","syllables":1},{"word":"légière","syllables":2},{"word":"lizenziat","syllables":4},{"word":"load","syllables":1},{"word":"lotterielos","syllables":4},{"word":"lounge","syllables":1},{"word":"lyzeen","syllables":3},{"word":"madame","syllables":2},{"word":"mademoiselle","syllables":3},{"word":"magier","syllables":3},{"word":"make-up","syllables":2},{"word":"malware","syllables":2},{"word":"management","syllables":3},{"word":"manteau","syllables":2},{"word":"mausoleen","syllables":4},{"word":"mauve","syllables":1},{"word":"medien","syllables":3},{"word":"mesdames","syllables":2},{"word":"mesopotamien","syllables":6},{"word":"milliarde","syllables":3},{"word":"missile","syllables":2},{"word":"miszellaneen","syllables":5},{"word":"mousse","syllables":1},{"word":"mousseline","syllables":3},{"word":"museen","syllables":3},{"word":"musette","syllables":2},{"word":"nahuatl","syllables":2},{"word":"noisette","syllables":2},{"word":"notebook","syllables":2},{"word":"nuance","syllables":3},{"word":"nuklease","syllables":4},{"word":"odeen","syllables":3},{"word":"offline","syllables":2},{"word":"offside","syllables":2},{"word":"oleaster","syllables":4},{"word":"on-stage","syllables":2},{"word":"online","syllables":2},{"word":"orpheen","syllables":3},{"word":"parforceritt","syllables":3},{"word":"patiens","syllables":2},{"word":"patient","syllables":2},{"word":"peace","syllables":1},{"word":"peace","syllables":1},{"word":"peanuts","syllables":2},{"word":"people","syllables":2},{"word":"perineen","syllables":4},{"word":"peritoneen","syllables":5},{"word":"picture","syllables":2},{"word":"piece","syllables":1},{"word":"pipeline","syllables":2},{"word":"plateau","syllables":2},{"word":"poesie","syllables":3},{"word":"poleposition","syllables":4},{"word":"portemanteau","syllables":3},{"word":"portemonnaie","syllables":3},{"word":"primerate","syllables":2},{"word":"primerate","syllables":2},{"word":"primetime","syllables":2},{"word":"protease","syllables":4},{"word":"protein","syllables":3},{"word":"prytaneen","syllables":4},{"word":"quotient","syllables":2},{"word":"radio","syllables":3},{"word":"reader","syllables":2},{"word":"ready","syllables":2},{"word":"reallife","syllables":2},{"word":"repeat","syllables":2},{"word":"retake","syllables":2},{"word":"rigole","syllables":2},{"word":"risolle","syllables":2},{"word":"road","syllables":1},{"word":"roaming","syllables":2},{"word":"roquefort","syllables":2},{"word":"safe","syllables":1},{"word":"savonette","syllables":3},{"word":"sciencefiction","syllables":3},{"word":"search","syllables":1},{"word":"selfmade","syllables":2},{"word":"septime","syllables":3},{"word":"serapeen","syllables":4},{"word":"service","syllables":2},{"word":"serviette","syllables":2},{"word":"share","syllables":1},{"word":"shave","syllables":1},{"word":"shore","syllables":1},{"word":"sidebar","syllables":2},{"word":"sideboard","syllables":2},{"word":"sidekick","syllables":2},{"word":"silhouette","syllables":3},{"word":"sitemap","syllables":2},{"word":"slide","syllables":1},{"word":"sneak","syllables":1},{"word":"soap","syllables":1},{"word":"softcore","syllables":2},{"word":"software","syllables":2},{"word":"soutanelle","syllables":3},{"word":"speak","syllables":1},{"word":"special","syllables":2},{"word":"spracheinstellung","syllables":5},{"word":"spyware","syllables":2},{"word":"square","syllables":1},{"word":"stagediving","syllables":3},{"word":"stakeholder","syllables":3},{"word":"statement","syllables":2},{"word":"steady","syllables":2},{"word":"steak","syllables":1},{"word":"stealth","syllables":1},{"word":"steam","syllables":1},{"word":"stoned","syllables":1},{"word":"stracciatella","syllables":4},{"word":"stream","syllables":1},{"word":"stride","syllables":1},{"word":"strike","syllables":1},{"word":"suitcase","syllables":2},{"word":"sweepstake","syllables":2},{"word":"t-bone","syllables":2},{"word":"t-shirt","syllables":1},{"word":"tailgate","syllables":2},{"word":"take-off","syllables":2},{"word":"take-over","syllables":3},{"word":"takeaway","syllables":3},{"word":"takeoff","syllables":2},{"word":"takeover","syllables":3},{"word":"throat","syllables":1},{"word":"time-out","syllables":2},{"word":"timelag","syllables":2},{"word":"timeline","syllables":2},{"word":"timesharing","syllables":3},{"word":"toast","syllables":1},{"word":"traubenmaische","syllables":4},{"word":"tristesse","syllables":2},{"word":"usenet","syllables":2},{"word":"varietät","syllables":4},{"word":"varieté","syllables":4},{"word":"vinaigrette","syllables":3},{"word":"vintage","syllables":2},{"word":"violett","syllables":3},{"word":"voice","syllables":1},{"word":"wakeboard","syllables":2},{"word":"washed","syllables":1},{"word":"waveboard","syllables":2},{"word":"wear","syllables":1},{"word":"wear","syllables":1},{"word":"website","syllables":2},{"word":"white","syllables":1},{"word":"widescreen","syllables":2},{"word":"wire","syllables":1},{"word":"yacht","syllables":1},{"word":"yorkshire","syllables":2},{"word":"éprouvette","syllables":3,"notFollowedBy":["n"]},{"word":"galette","syllables":2,"notFollowedBy":["n"]},{"word":"gigue","syllables":1,"notFollowedBy":["n"]},{"word":"groove","syllables":1,"notFollowedBy":["n"]},{"word":"morgue","syllables":1,"notFollowedBy":["n"]},{"word":"paillette","syllables":2,"notFollowedBy":["n"]},{"word":"raclette","syllables":2,"notFollowedBy":["n"]},{"word":"roulette","syllables":2,"notFollowedBy":["n"]},{"word":"spike","syllables":1,"notFollowedBy":["n"]},{"word":"style","syllables":1,"notFollowedBy":["n"]},{"word":"tablette","syllables":2,"notFollowedBy":["n"]},{"word":"grunge","syllables":1,"notFollowedBy":["r"]},{"word":"size","syllables":1,"notFollowedBy":["r"]},{"word":"value","syllables":1,"notFollowedBy":["r"]},{"word":"quiche","syllables":1,"notFollowedBy":["s"]},{"word":"house","syllables":1,"notFollowedBy":["n","s"]},{"word":"sauce","syllables":1,"notFollowedBy":["n","s"]},{"word":"space","syllables":1,"notFollowedBy":["n","s"]},{"word":"airline","syllables":2,"notFollowedBy":["n","r"]},{"word":"autosave","syllables":3,"notFollowedBy":["n","r"]},{"word":"bagpipe","syllables":2,"notFollowedBy":["n","r"]},{"word":"bike","syllables":1,"notFollowedBy":["n","r"]},{"word":"dance","syllables":1,"notFollowedBy":["n","r"]},{"word":"deadline","syllables":2,"notFollowedBy":["n","r"]},{"word":"halfpipe","syllables":2,"notFollowedBy":["n","r"]},{"word":"headline","syllables":2,"notFollowedBy":["n","r"]},{"word":"home","syllables":1,"notFollowedBy":["n","r"]},{"word":"hornpipe","syllables":2,"notFollowedBy":["n","r"]},{"word":"hotline","syllables":2,"notFollowedBy":["n","r"]},{"word":"infoline","syllables":3,"notFollowedBy":["n","r"]},{"word":"inline","syllables":2,"notFollowedBy":["n","r"]},{"word":"kite","syllables":1,"notFollowedBy":["n","r"]},{"word":"rollerblade","syllables":1,"notFollowedBy":["n","r"]},{"word":"score","syllables":1,"notFollowedBy":["n","r"]},{"word":"skyline","syllables":2,"notFollowedBy":["n","r"]},{"word":"slackline","syllables":2,"notFollowedBy":["n","r"]},{"word":"slice","syllables":1,"notFollowedBy":["n","r","s"]},{"word":"snooze","syllables":1,"notFollowedBy":["n","r"]},{"word":"storyline","syllables":3,"notFollowedBy":["n","r"]},{"word":"office","syllables":2,"notFollowedBy":["s","r"]},{"word":"space","syllables":1,"notFollowedBy":["n","s","r"]},{"word":"tease","syllables":1,"notFollowedBy":["n","s","r"]},{"word":"cache","syllables":1,"notFollowedBy":["t"]}],"atBeginningOrEnd":[{"word":"case","syllables":1},{"word":"life","syllables":1},{"word":"teak","syllables":1},{"word":"team","syllables":1},{"word":"creme","syllables":1,"notFollowedBy":["n","r"]},{"word":"crème","syllables":1,"notFollowedBy":["n","r"]},{"word":"drive","syllables":1,"notFollowedBy":["n","r"]},{"word":"skate","syllables":1,"notFollowedBy":["n","r"]},{"word":"update","syllables":2,"notFollowedBy":["n","r"]},{"word":"upgrade","syllables":2,"notFollowedBy":["n","r"]}],"atBeginning":[{"word":"anion","syllables":3},{"word":"facelift","syllables":2},{"word":"jiu","syllables":1},{"word":"pace","syllables":1},{"word":"shake","syllables":1},{"word":"tea","syllables":1},{"word":"trade","syllables":1},{"word":"deal","syllables":1}],"atEnd":[{"word":"face","syllables":1},{"word":"file","syllables":1},{"word":"mousse","syllables":1},{"word":"plate","syllables":1},{"word":"tape","syllables":1},{"word":"byte","syllables":1,"alsoFollowedBy":["s"]},{"word":"cape","syllables":1,"alsoFollowedBy":["s"]},{"word":"five","syllables":1,"alsoFollowedBy":["s"]},{"word":"hype","syllables":1,"alsoFollowedBy":["s"]},{"word":"leak","syllables":1,"alsoFollowedBy":["s"]},{"word":"like","syllables":1,"alsoFollowedBy":["s"]},{"word":"make","syllables":1,"alsoFollowedBy":["s"]},{"word":"phone","syllables":1,"alsoFollowedBy":["s"]},{"word":"rave","syllables":1,"alsoFollowedBy":["s"]},{"word":"regime","syllables":2,"alsoFollowedBy":["s"]},{"word":"statue","syllables":2,"alsoFollowedBy":["s"]},{"word":"store","syllables":1,"alsoFollowedBy":["s"]},{"word":"wave","syllables":1,"alsoFollowedBy":["s"]},{"word":"date","syllables":1,"notFollowedBy":["n"]},{"word":"image","syllables":2,"notFollowedBy":["s"]}]}}}}'),J={productPages:{parameters:{recommendedMinimum:3,recommendedMaximum:6,acceptableMaximum:7,acceptableMinimum:1}}},Y=window.lodash;var K=r(429),X=r.n(K);const ee=new RegExp("["+["'","‘","’","‛","`","‹","›"].join("")+"]","g");function te(e){return function(e){return e.replace(/[“â€ã€ã€žã€Ÿâ€Ÿâ€žã€Žã€Â«Â»]/g,'"')}(function(e){return e.replace(ee,"'")}(e))}const re=["address","article","aside","blockquote","canvas","dd","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","noscript","ol","output","p","pre","section","table","tfoot","ul","video"],se=["b","big","i","small","tt","abbr","acronym","cite","code","dfn","em","kbd","strong","samp","time","var","a","bdo","br","img","map","object","q","script","span","sub","sup","button","input","label","select","textarea"],ne=(new RegExp("^("+re.join("|")+")$","i"),new RegExp("^("+se.join("|")+")$","i"),new RegExp("^<("+re.join("|")+")[^>]*?>$","i")),le=new RegExp("^]*?>$","i"),ae=new RegExp("^<("+se.join("|")+")[^>]*>$","i"),ie=new RegExp("^]*>$","i"),be=/^<([^>\s/]+)[^>]*>$/,ue=/^<\/([^>\s]+)[^>]*>$/,ge=/^[^<]+$/,he=/^<[^><]*$/,oe=//g;let ce,de=[];(0,Y.memoize)((function(e){const t=[];let r=0,s="",n="",l="";return e=e.replace(oe,""),de=[],ce=X()((function(e){de.push(e)})),ce.addRule(ge,"content"),ce.addRule(he,"greater-than-sign-content"),ce.addRule(ne,"block-start"),ce.addRule(le,"block-end"),ce.addRule(ae,"inline-start"),ce.addRule(ie,"inline-end"),ce.addRule(be,"other-element-start"),ce.addRule(ue,"other-element-end"),ce.onText(e),ce.end(),(0,Y.forEach)(de,(function(e,a){const i=de[a+1];switch(e.type){case"content":case"greater-than-sign-content":case"inline-start":case"inline-end":case"other-tag":case"other-element-start":case"other-element-end":case"greater than sign":i&&(0!==r||"block-start"!==i.type&&"block-end"!==i.type)?n+=e.src:(n+=e.src,t.push(n),s="",n="",l="");break;case"block-start":0!==r&&(""!==n.trim()&&t.push(n),n="",l=""),r++,s=e.src;break;case"block-end":r--,l=e.src,""!==s&&""!==l?t.push(s+n+l):""!==n.trim()&&t.push(n),s="",n="",l=""}r<0&&(r=0)})),t})),new RegExp("^<("+re.join("|")+")[^>]*?>","i"),new RegExp("]*?>$","i");const we=new RegExp("^[.]$"),me=/^<[^><]*$/,fe=/^<([^>\s/]+)[^>]*>$/im,pe=/^<\/([^>\s]+)[^>]*>$/im,ke=/^\s*[[({]\s*$/,ye=/^\s*[\])}]\s*$/,ze=function(e,t=!1,r="",s=!1){const n="("+(e=(0,Y.map)(e,(function(e){return s&&(e=function(e){const t=[{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];for(let r=0;r]+)>)/gi," "))}(function(e){return function(e){return e.replace(/\s/g," ")}(e=function(e){return e.replace(/\u2014/g," ")}(e=function(e){return e.replace(/ /g," ")}(e)))}(e)),t?e:function(e,t=!1,r="",s=""){let n,l;return n="id"===s?'[ \\u00a0\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+;!¡?¿:/»«‹›'+r+"<>":'[ \\u00a0\\u2014\\u06d4\\u061f\\u060C\\u061B\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+\\-;!¡?¿:/»«‹›'+r+"<>",l=t?"($|((?="+n+"]))|((['‘’‛`])("+n+"])))":"($|("+n+"])|((['‘’‛`])("+n+"])))","(^|"+n+"'‘’‛`])"+e+l}(e,!0,r)}))).join(")|(")+")";return new RegExp(n,"ig")}(["A.D.","Adm.","Adv.","B.C.","Br.","Brig.","Cmrd.","Col.","Cpl.","Cpt.","Dr.","Esq.","Fr.","Gen.","Gov.","Hon.","Jr.","Lieut.","Lt.","Maj.","Mr.","Mrs.","Ms.","Msgr.","Mx.","No.","Pfc.","Pr.","Prof.","Pvt.","Rep.","Reps.","Rev.","Rt. Hon.","Sen.","Sens.","Sgt.","Sps.","Sr.","St.","vs.","i.e.","e.g.","viz.","Mt."].map((e=>e.replace(".","\\.")))),ve="(^|$|["+[" ","\\n","\\r","\\t"," ","Û”","ØŸ","ØŒ","Ø›"," ",".",",","'","(",")",'"',"+","-",";","!","?",":","/","»","«","‹","›","<",">","â€","“","ã€","〞","〟","‟","„"].map((e=>"\\"+e)).join("")+"])",Ee=new RegExp(ve+"[A-Za-z]$"),Fe=/<\/?([^\s]+?)(\s|>)/,Be=["p","div","h1","h2","h3","h4","h5","h6","span","li","main"];class je{constructor(){this.sentenceDelimiters='â€ã€žã€Ÿâ€žã€â€ºÂ»â€™â€›`"?!…۔؟'}getSentenceDelimiters(){return this.sentenceDelimiters}isNumber(e){return!(0,Y.isNaN)(parseInt(e,10))}isBreakTag(e){return/<\/?br/.test(e)}isQuotation(e){return"'"===(e=te(e))||'"'===e}endsWithOrdinalDot(){return!1}isPunctuation(e){return"¿"===e||"¡"===e}removeDuplicateWhitespace(e){return e.replace(/\s+/," ")}isCapitalLetter(e){return e!==e.toLocaleLowerCase()}isSmallerThanSign(e){return"<"===e}getNextTwoCharacters(e){let t="";return(0,Y.isUndefined)(e[0])||(t+=e[0].src),(0,Y.isUndefined)(e[1])||(t+=e[1].src),t=this.removeDuplicateWhitespace(t),t}isLetterFromSpecificLanguage(e){return[/^[\u0590-\u05fe]+$/i,/^[\u0600-\u06FF]+$/i,/^[\uFB8A\u067E\u0686\u06AF]+$/i].some((t=>t.test(e)))}isValidSentenceBeginning(e){return this.isCapitalLetter(e)||this.isLetterFromSpecificLanguage(e)||this.isNumber(e)||this.isQuotation(e)||this.isPunctuation(e)||this.isSmallerThanSign(e)}isSentenceStart(e){return!(0,Y.isUndefined)(e)&&("html-start"===e.type||"html-end"===e.type||"block-start"===e.type)}isSentenceEnding(e){return!(0,Y.isUndefined)(e)&&("full-stop"===e.type||"sentence-delimiter"===e.type)}isPartOfPersonInitial(e,t,r,s){return!(0,Y.isUndefined)(e)&&!(0,Y.isUndefined)(r)&&!(0,Y.isUndefined)(s)&&!(0,Y.isUndefined)(t)&&"full-stop"===e.type&&"sentence"===t.type&&Ee.test(t.src)&&"sentence"===r.type&&1===r.src.trim().length&&"full-stop"===s.type}tokenizeSmallerThanContent(e,t,r){const s=e.src.substring(1),n=this.createTokenizer();this.tokenize(n.tokenizer,s);const l=this.getSentencesFromTokens(n.tokens,!1);if(l[0]=(0,Y.isUndefined)(l[0])?"<":"<"+l[0],this.isValidSentenceBeginning(l[0])&&(t.push(r),r=""),r+=l[0],l.length>1){t.push(r),r="",l.shift();const e=l.pop();l.forEach((e=>{t.push(e)}));const s=new RegExp("[."+this.getSentenceDelimiters()+"]$");e.match(s)?t.push(e):r=e}return{tokenSentences:t,currentSentence:r}}createTokenizer(){const e=new RegExp("^["+this.getSentenceDelimiters()+"]$"),t=new RegExp("^[^."+this.getSentenceDelimiters()+"<\\(\\)\\[\\]]+$"),r=[],s=X()((function(e){r.push(e)}));return s.addRule(we,"full-stop"),s.addRule(me,"smaller-than-sign-content"),s.addRule(fe,"html-start"),s.addRule(pe,"html-end"),s.addRule(ke,"block-start"),s.addRule(ye,"block-end"),s.addRule(e,"sentence-delimiter"),s.addRule(t,"sentence"),{tokenizer:s,tokens:r}}tokenize(e,t){e.onText(t);try{e.end()}catch(e){console.error("Tokenizer end error:",e,e.tokenizer2)}}endsWithAbbreviation(e){const t=e.match(ze);if(!t)return!1;const r=t.pop();return e.endsWith(r)}isValidTagPair(e,t){const r=e.src,s=t.src,n=r.match(Fe)[1];return n===s.match(Fe)[1]&&Be.includes(n)}getSentencesFromTokens(e,t=!0){let r,s,n=[],l="";do{s=!1;const t=e[0],r=e[e.length-1];t&&r&&"html-start"===t.type&&"html-end"===r.type&&this.isValidTagPair(t,r)&&(e=e.slice(1,e.length-1),s=!0)}while(s&&e.length>1);return e.forEach(((t,s)=>{let a,i,b;const u=e[s+1],g=e[s-1],h=e[s+2];switch(i=this.getNextTwoCharacters([u,h]),a=i.length>=2,r=a?i[1]:"",t.type){case"html-start":case"html-end":this.isBreakTag(t.src)?(n.push(l),l=""):l+=t.src;break;case"smaller-than-sign-content":b=this.tokenizeSmallerThanContent(t,n,l),n=b.tokenSentences,l=b.currentSentence;break;case"sentence":case"block-start":l+=t.src;break;case"sentence-delimiter":if(l+=t.src,!(0,Y.isUndefined)(u)&&"block-end"!==u.type&&"sentence-delimiter"!==u.type&&this.isCharacterASpace(u.src[0])){if(this.isQuotation(t.src)&&g&&"."!==g.src)break;this.isQuotation(t.src)||"…"===t.src?l=this.getValidSentence(a,r,i,u,n,l):(n.push(l),l="")}break;case"full-stop":if(l+=t.src,i=this.getNextTwoCharacters([u,h]),a=i.length>=2,r=a?i[1]:"",this.endsWithAbbreviation(l))break;if(a&&this.isNumber(i[0]))break;if(this.isPartOfPersonInitial(t,g,u,h))break;if(this.endsWithOrdinalDot(l))break;l=this.getValidSentence(a,r,i,u,n,l);break;case"block-end":if(l+=t.src,i=this.getNextTwoCharacters([u,h]),a=i.length>=2,r=a?i[0]:"",a&&this.isNumber(i[0])||this.isSentenceEnding(g)&&!this.isValidSentenceBeginning(r)&&!this.isSentenceStart(u))break;this.isSentenceEnding(g)&&(this.isSentenceStart(u)||this.isValidSentenceBeginning(r))&&(n.push(l),l="")}})),""!==l&&n.push(l),t&&(n=(0,Y.map)(n,(function(e){return e.trim()}))),n}getValidSentence(e,t,r,s,n,l){return(e&&this.isValidSentenceBeginning(t)&&this.isCharacterASpace(r[0])||this.isSentenceStart(s))&&(n.push(l),l=""),l}isCharacterASpace(e){return/\s/.test(e)}}const xe="(^|["+[" ","\\n","\\r","\\t"," ","Û”","ØŸ","ØŒ","Ø›"," ",".",",","'","(",")",'"',"+","-",";","!","?",":","/","»","«","‹","›","<",">","â€","“","ã€","〞","〟","‟","„"].map((e=>"\\"+e)).join("")+"])",Ae=new RegExp(xe+"\\d{1,3}\\.$");class De extends je{constructor(){super()}endsWithOrdinalDot(e){return Ae.test(e.trim())}}const Se=(0,Y.memoize)((function(e,t=!0){const r=new De,{tokenizer:s,tokens:n}=r.createTokenizer();return r.tokenize(s,e),0===n.length?[]:r.getSentencesFromTokens(n,t)}),((...e)=>JSON.stringify(e))),$e=/^((ge)\S+t($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>]))/gi,Ce=/^(((be|ent|er|her|ver|zer|über|ueber)\S+([^s]t|sst))($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>]))/gi,Re=/(ab|an|auf|aus|vor|wieder|zurück)(ge)\S+t($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi,qe=/((ab|an|auf|aus|vor|wieder|zurück)(be|ent|er|her|ver|zer|über|ueber)\S+([^s]t|sst))($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi,We=/\S+iert($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi,Te=function(e){return e.match($e)||[]},Pe=function(e){return e.match(Ce)||[]},Me=function(e){return e.match(Re)||[]},Oe=function(e){return e.match(qe)||[]},Ue=function(e){return e.match(We)||[]};function Ie(){return{verbsBeginningWithGe:Te,verbsBeginningWithErVerEntBeZerHerUber:Pe,verbsWithGeInMiddle:Me,verbsWithErVerEntBeZerHerUberInMiddle:Oe,verbsEndingWithIert:Ue}}const Ne=["angefangen","aufgerissen","ausgesehen","befohlen","befunden","begonnen","bekommen","bewiesen","beworben","empfohlen","empfunden","entschieden","erschrocken","erwogen","gebacken","gebeten","gebissen","geblasen","geblieben","gebogen","geboren","geborgen","geboten","gebraten","gebrochen","gebunden","gediehen","gedroschen","gedrungen","gefahren","gefallen","gefangen","geflogen","geflohen","geflossen","gefressen","gefroren","gefunden","gegangen","gegeben","gegessen","geglichen","geglitten","gelungen","gegolten","gegoren","gegossen","gegraben","gegriffen","gehalten","gehangen","gehauen","geheissen","geheißen","gehoben","geholfen","geklungen","gekniffen","gekommen","gekrochen","geladen","gelassen","gelaufen","gelegen","gelesen","geliehen","gelitten","gelogen","gelungen","gemessen","gemieden","genesen","genommen","genossen","gepfiffen","gepriesen","gequollen","geraten","gerieben","gerissen","geritten","gerochen","geronnen","gerufen","gerungen","geschaffen","geschehen","geschieden","geschienen","geschlafen","geschlagen","geschlichen","geschliffen","geschlossen","geschlungen","geschmissen","geschmolzen","geschnitten","geschoben","gescholten","geschoren","geschossen","geschrieben","geschrien","geschritten","geschunden","geschwiegen","geschwollen","geschwommen","geschworen","geschwunden","geschwungen","gesehen","gesessen","gesoffen","gesonnen","gespien","gesponnen","gesprochen","gesprossen","gesprungen","gestanden","gestiegen","gestochen","gestohlen","gestorben","gestoßen","gestossen","gestrichen","gestritten","gesungen","gesunken","getan","getragen","getreten","getrieben","getroffen","getrogen","getrunken","gewachsen","gewaschen","gewichen","gewiesen","gewoben","gewogen","gewonnen","geworben","geworfen","gewrungen","gezogen","gezwungen","misslungen","überbacken","ueberbacken","überbehalten","ueberbehalten","überbekommen","ueberbekommen","überbelegen","ueberbelegen","überbezahlen","ueberbezahlen","überboten","ueberboten","übergebunden","uebergebunden","überbunden","ueberbunden","überblasen","ueberblasen","überbraten","ueberbraten","übergebraten","uebergebraten","überbremst","ueberbremst","übergeblieben","uebergeblieben","übereinandergelegen","uebereinandergelegen","übereinandergeschlagen","uebereinandergeschlagen","übereinandergesessen","uebereinandergesessen","übereinandergestanden","uebereinandergestanden","übereingefallen","uebereingefallen","übereingekommen","uebereingekommen","übereingetroffen","uebereingetroffen","übergefallen","uebergefallen","übergessen","uebergessen","überfahren","ueberfahren","übergefahren","uebergefahren","überfallen","ueberfallen","überfangen","ueberfangen","überflogen","ueberflogen","überflossen","ueberflossen","übergeflossen","uebergeflossen","überfressen","ueberfressen","überfroren","ueberfroren","übergegeben","uebergegeben","übergeben","uebergeben","übergegangen","uebergegangen","übergangen","uebergangen","übergangen","uebergangen","übergossen","uebergossen","übergriffen","uebergriffen","übergegriffen","uebergegriffen","übergehalten","uebergehalten","überhandgenommen","ueberhandgenommen","überhangen","ueberhangen","übergehangen","uebergehangen","übergehoben","uebergehoben","überhoben","ueberhoben","überkommen","ueberkommen","übergekommen","uebergekommen","überladen","ueberladen","übergeladen","uebergeladen","überlassen","ueberlassen","übergelassen","uebergelassen","überlaufen","ueberlaufen","übergelaufen","uebergelaufen","überlesen","ueberlesen","übergelegen","uebergelegen","übergenommen","uebergenommen","übernommen","uebernommen","übergequollen","uebergequollen","überrissen","ueberrissen","überritten","ueberritten","übergeschossen","uebergeschossen","überschlafen","ueberschlafen","überschlagen","ueberschlagen","übergeschlagen","uebergeschlagen","übergeschlossen","uebergeschlossen","überschnitten","ueberschnitten","überschrieben","ueberschrieben","überschrieen","ueberschrieen","überschrien","ueberschrien","überschritten","ueberschritten","überschwungen","ueberschwungen","übergesehen","uebergesehen","übersehen","uebersehen","übergesotten","uebergesotten","übergesotten","uebergesotten","übersponnen","uebersponnen","übersprochen","uebersprochen","übersprungen","uebersprungen","übergesprungen","uebergesprungen","überstochen","ueberstochen","übergestochen","uebergestochen","überstanden","ueberstanden","übergestanden","uebergestanden","überstiegen","ueberstiegen","übergestiegen","uebergestiegen","übergestrichen","uebergestrichen","überstrichen","ueberstrichen","übertragen","uebertragen","übertroffen","uebertroffen","übertrieben","uebertrieben","übertreten","uebertreten","übergetreten","uebergetreten","überwachsen","ueberwachsen","überwiesen","ueberwiesen","überworfen","ueberworfen","übergeworfen","uebergeworfen","überwogen","ueberwogen","überwunden","ueberwunden","überzogen","ueberzogen","übergezogen","uebergezogen","verdorben","vergessen","verglichen","verloren","verstanden","verschwunden","vorgeschlagen"],{getWords:Ve}=e.languageProcessing,Le=Ie(),_e=Le.verbsBeginningWithErVerEntBeZerHerUber,He=Le.verbsBeginningWithGe,Ge=Le.verbsWithGeInMiddle,Ze=Le.verbsWithErVerEntBeZerHerUberInMiddle,Qe=Le.verbsEndingWithIert,Je=["geht","gämsbart","gemsbart","geäst","gebarungsbericht","geähnelt","geartet","gebäudetrakt","gebet","gebiet","gebietsrepräsentant","gebildbrot","gebirgsart","gebirgsgrat","gebirgskurort","gebirgsluft","gebirgsschlucht","geblüt","geblütsrecht","gebohntkraut","gebot","gebrauchsgut","gebrauchstext","gebrauchsverlust","gebrauchtgerät","gebrauchtwagengeschäft","gebrauchtwagenmarkt","geburt","geburtsakt","geburtsgeschwulst","geburtsgewicht","geburtsort","geburtsrecht","geburtsstadt","geburtstagsfest","geckenart","gedächtniskonzert","gedächtniskunst","gedächtnisverlust","gedankenarmut","gedankenexperiment","gedankenflucht","gedankengut","gedankenschritt","gedankenwelt","gedenkkonzert","gedicht","geest","gefahrengebiet","gefahrenmoment","gefahrenpunkt","gefahrgut","gefahrguttransport","gefährt","gefälligkeitsakzept","gefallsucht","gefangenenanstalt","gefangenentransport","gefängnisarzt","gefängniskluft","gefäßnaht","gefecht","gefechtsabschnitt","gefechtsbereit","gefechtsgebiet","gefechtsgewicht","gefechtshut","gefechtsmast","gefechtsmast","geflecht","geflügelaufzucht","geflügelleberwurst","geflügelmarkt","geflügelmast","geflügelpest","geflügelsalat","geflügelwurst","geflügelzucht","gefolgsleute","gefrett","gefriergerät","gefriergut","gefrierobst","gefrierpunkt","gefrierschnitt","gefühlsarmut","gefühlswelt","gegenangebot","gegenansicht","gegenargument","gegengeschäft","gegengewalt","gegengewicht","gegenkandidat","gegenkompliment","gegenkonzept","gegenlicht","gegenmacht","gegenpapst","gegenpart","gegensatzwort","gegenstandpunkt","gegenstandsgebiet","gegenwart","gegenwartskunst","gegenwelt","gegenwort","gehaart","gehandicapt","gehandikapt","geheimagent","geheimbericht","geheimdokument","geheimfavorit","geheimkontakt","geheimkult","geheimnisverrat","geheimpolizist","geheimrat","geheimrezept","geheimtext","gehirnakrobat","gehirngeschwulst","gehirnhaut","gehirnsandgeschwulst","gehirntot","gehirntrust","gehöft","gehörlosensport","geigenkonzert","geißbart","geißblatt","geißhirte","geißhirt","geist","geisterfahrt","geisterstadt","geisterwelt","geistesarmut","geistesart","geistesfürst","geistesgegenwart","geistesgestört","geistesprodukt","geistestat","geistesverwandt","geisteswelt","geklüft","geländefahrt","geländeritt","geländesport","gelangweilt","gelaut","geläut","gelblicht","gelbrost","gelbsucht","gelbwurst","gelcoat","geldausgabeautomat","geldautomat","geldgeschäft","geldheirat","geldinstitut","geldmarkt","geldsurrogat","geldtransport","geldverlust","gelehrtenstreit","gelehrtenwelt","geleit","geleitboot","geleitwort","gelenkgicht","gelenkwassersucht","geleucht","geltungssucht","gelüst","gemächt","gemeindeamt","gemeindebürgerrecht","gemeindegut","gemeindekirchenrat","gemeindepräsident","gemeinderat","gemeingeist","gemeingut","gemeinschaftsgeist","gemeinschaftsprojekt","gemeinschaftsunterkunft","gemengesaat","gemüseart","gemüsebeet","gemüsegeschäft","gemüsemarkt","gemüsesaft","gemüsesalat","gemüsezucht","gemüt","gemütsarmut","gemütsart","gemütsathlet","gemütskalt","genausogut","genausooft","genausoweit","gendefekt","generalagent","generalarzt","generalat","generalbassinstrument","generalbaßinstrument","generalbundesanwalt","generalgouvernement","generalintendant","generalist","generalkonsulat","generalleutnant","generaloberst","generalresident","generalsekretariat","generalstaaten","generalstaatsanwalt","generalsuperintendent","generalüberholt","generalvikariat","generalvollmacht","generationenkonflikt","generativist","genist","genitivattribut","genitivobjekt","genmanipuliert","gennesaret","genotzüchtigt","gent","genuasamt","genussgift","genußgift","genusssucht","genuss-sucht","genußsucht","genverändert","geobiont","geodät","geografieunterricht","geographieunterricht","geokrat","geophyt","gepäckfracht","geradeausfahrt","geradesogut","gefälligst","gerant","gerät","gerätewart","geräuschlaut","gerbextrakt","gericht","gerichtsarzt","gerichtsort","gerichtspräsident","germanisiert","germanist","germanistikstudent","gerodelt","geröllschicht","geröllschutt","geront","gerontokrat","gerstenbrot","gerstensaft","gerstenschrot","gerücht","gerüst","gesamtansicht","gesamtaspekt","gesamtdurchschnitt","gesamtgewicht","gesamtgut","gesamt","gesamtklassement","gesamtunterricht","gesandtschaftsrat","gesangskunst","gesangspart","gesangssolist","gesangsunterricht","gesangunterricht","geschäft","geschäftsaufsicht","geschäftsbericht","geschäftsgeist","geschäftswelt","geschenkpaket","geschichtsunterricht","geschicklichkeitstest","geschicklichkeitstest","geschlecht","geschlechtsakt","geschlechtslust","geschlechtsprodukt","geschlechtswort","geschmackstest","geschwindigkeitslimit","geschworenengericht","geschwulst","gesellschaftsfahrt","gesellschaftsschicht","gesetzblatt","gesetzespaket","gesetzestext","gesicht","gesichtshaut","gesichtspunkt","gesichtsschnitt","gesichtsverlust","gespenst","gespensterfurcht","gespinst","gespött","gesprächstherapeut","gestalt","gestaltungselement","gesteinsart","gesteinschutt","gesteinsschicht","gestüt","gestüthengst","verantwortungsbewusst","verantwortungsbewußt","getast","getränkeabholmarkt","getränkeautomat","getränkemarkt","getreideart","getreideaussaat","getreideexport","getreideimport","getreideprodukt","getreideschnitt","getreidevorrat","gewährfrist","gewalt","gewaltakt","gewaltbereit","gewalttat","gesprächsbereit","gewaltverbot","gewaltverzicht","gewässerbett","gewässerwart","gewebeschicht","gewebsrest","gewicht","gewichtsprozent","gewichtsverlust","gewerbeamt","gewerbearzt","gewerbeaufsicht","gewerbeaufsichtsamt","gewerbegebiet","gewerberecht","gewerbsunzucht","gewerkschaft","gewerkschaftsjournalist","gewindestift","gewinnsucht","gewinst","gewissensangst","gewissenskonflikt","gewitterfront","gewitterluft","gewohnheitsrecht","gewürzextrakt","gewürzkraut","gezücht","erbbaurecht","erbfolgerecht","erbfolgestreit","erbgut","erbhofrecht","erblast","erbpacht","erbrecht","erbschaftsstreit","erbsenkraut","erbbedingt","erbberechtigt","erblasst","erblaßt","erbswurst","erbverzicht","erbwort","erbzinsgut","erdbebengebiet","erdbeerjogurt","erdbeerjoghurt","erdbeeryoghurt","erdbeerkompott","erdbeerrot","erdbeersaft","erdbeersekt","erdengut","erdenlust","erdfrucht","erdgeist","erdkundeunterricht","erdlicht","erdmittelpunkt","erdnussfett","erdölprodukt","erdölproduzent","erdsatellit","erdschicht","erdsicht","erdtrabant","erdverhaftet","eremit","erfahrungsbericht","erfahrungshorizont","erfahrungswelt","erfindergeist","erfolgsaussicht","erfolgsorientiert","erfolgsrezept","erfolgsverwöhnt","erfüllungsort","erfurt","ergänzungsheft","ergänzungssport","ergänzungstest","ergostat","ergotherapeut","erholungsgebiet","erholungsort","erkundungsfahrt","erlaucht","erläuterungstext","erlebnisbericht","erlebnisorientiert","erlebniswelt","ernährungsamt","ernst","ernstgemeint","ernteaussicht","erntedankfest","erntefest","erntemonat","ernteresultat","eroberungsabsicht","eroberungsgeist","eroberungslust","eroberungssucht","eröffnungskonzert","ersatzgeschwächt","ersatzgut","ersatzkandidat","ersatzobjekt","ersatzpräparat","ersatzreservist","ersatztorwart","erscheinungsfest","erscheinungsort","erscheinungswelt","erschließungsgebiet","erst","erstbundesligist","erstfahrt","erstgebot","erstgeburt","erstgeburtsrecht","erstklassbillett","erstklaßbillett","erstkommunikant","erstkonsument","erstligist","erstplatziert","erstplaciert","erstplaziert","erstrecht","ertragsaussicht","erwartungsangst","erwartungshorizont","erwerbseinkünfte","erythrit","erythroblast","erythrozyt","erzählertalent","erzählgut","erzählkunst","erzähltalent","erzamt","erzdemokrat","erzeugungsschlacht","erzfaschist","erziehungsanstalt","erziehungsberechtigt","erziehungsinstitut","erzkommunist","erzprotestant","veranlassungswort","veranschaulicht","veranschlagt","verantwortungsbewusst","verantwortungsbewußt","veräußerungsverbot","verbalist","verbalkontrakt","verbändestaat","verbannungsort","verbildlicht","verbindungspunkt","verbindungsstudent","verbraucherkredit","verbrauchermarkt","verbrauchsgut","verbrechernest","verbrechersyndikat","verbrecherwelt","verbreitungsgebiet","verbrennungsprodukt","verdachtsmoment","verdampfungsgerät","verdauungstrakt","verdikt","veredelungsprodukt","verehrerpost","vereinspräsident","vereinsrecht","vereinssport","verfahrensrecht","verfassungsfahrt","verfassungsgericht","verfassungsrecht","verfassungsstaat","verfolgungsrecht","verfremdungseffekt","verfügungsgewalt","verfügungsrecht","verfügungsberechtigt","verführungskunst","vergegenständlicht","vergegenwärtigt","vergeltungsakt","vergenossenschaftlicht","vergissmeinnicht","vergißmeinnicht","vergleichsmonat","vergleichsobjekt","vergleichspunkt","vergnügungsetablissement","vergnügungsfahrt","vergnügungssucht","vergrößerungsgerät","verhaltensgestört","verhältniswahlrecht","verhältniswort","verhandlungsangebot","verhandlungsbereit","versandbereit","verteidigungsbereit","verhandlungsmandat","verhandlungsort","verhandlungspunkt","verhöramt","verist","verjährungsfrist","verkaufsagent","verkaufsangebot","verkaufsargument","verkaufsautomat","verkaufsfront","verkaufshit","verkaufsobjekt","verkaufsorientiert","verkaufspunkt","verkehrsamt","verkehrsdelikt","verkehrsinfarkt","verkehrsknotenpunkt","verkehrslicht","verkehrsnachricht","verkehrspolizist","verkehrsrecht","verkehrsunterricht","verkehrsverbot","verklarungsbericht","verknüpfungspunkt","verkündungsblatt","verlagsanstalt","verlagsprospekt","verlagsrecht","verlagsrepräsentant","verlagssignet","verlust","verlustgeschäft","verlust","verlustgeschäft","verlustpunkt","vermessungsamt","vermittlungsamt","vermögensrecht","vermont","vermummungsverbot","verneinungswort","vernichtungswut","vernunft","vernunftheirat","verordnungsblatt","verpackungsflut","verpflichtungsgeschäft","verrat","versammlungsort","versammlungsrecht","versandgeschäft","versandgut","versart","verschlusslaut","verschnitt","verschwendungssucht","versehrtensport","versicherungsagent","versicherungsanstalt","versicherungsrecht","verskunst","versöhnungsfest","versorgungsamt","versorgungsberechtigt","versorgungsgebiet","versorgungsgut","versorgungsstaat","verstakt","verständigungsbereit","verstellungskunst","verstürznaht","versuchsanstalt","versuchsobjekt","versuchsprojekt","vertebrat","verteidigungsbudget","verteidigungsetat","verteidigungspakt","verteilungskonflikt","verteilungszahlwort","vertikalschnitt","vertikutiergerät","vertragsgerecht","vertragspunkt","vertragsrecht","vertragsstaat","vertragstext","vertragswerkstatt","vertrauensanwalt","vertrauensarzt","vertrauensverlust","vertriebsrecht","vervielfältigungsrecht","vervielfältigungszahlwort","verwaltungsakt","verwaltungsgericht","verwaltungsrat","verwaltungsrecht","verwundetentransport","verzicht","verzweiflungsakt","verzweiflungstat","entbindungsanstalt","entdeckungsfahrt","entenbrust","entenfett","entertainment","enthusiast","entlastungsmoment","entlüftungsschacht","entnazifizierungsgericht","entoblast","entoparasit","entrechat","entrefilet","entrepot","entscheidungsfurcht","entscheidungsgewalt","entscheidungsrecht","entscheidungsschlacht","entstehungsort","entsteht","entwässerungsschacht","entwicklungsabschnitt","entwicklungsinstitut","entwicklungsprojekt","entwicklungsschritt","entziehungsanstalt","zerat","zerebrallaut","zerfallsprodukt","zergliederungskunst","zerit","zermatt","zersetzungsprodukt","zerstörungslust","zerstörungswut","zertifikat","zerussit","zervelat","zervelatwurst","beamtenrecht","beamtenschicht","beamtenstaat","beat","beatmungsgerät","beaufort","becherfrucht","beckengurt","becquereleffekt","bedarfsgut","bedenkfrist","bedienungselement","bedienungsgerät","bedienungskomfort","bedingtgut","bedürfnisanstalt","beeinflusst","beeinflußt","beerdigungsanstalt","beerdigungsinstitut","beerenfrucht","beerenobst","beerensaft","beet","befasst","befaßt","befehlsgewalt","beförderungsentgelt","beförderungsrecht","begabungstest","begegnungsort","begleitinstrument","begleittext","begleitwort","begnadigungsrecht","begräbt","begrenzungslicht","begriffswelt","begriffswort","begrüßungswort","behaviorist","behebungsfrist","behelfsausfahrt","behelfsunterkunft","behindertengerecht","behindertensport","behindertentransport","behmlot","beiblatt","beiboot","beignet","beiheft","beikost","beilast","beileidswort","beinamputiert","beinhaut","beirat","beirut","beistandskredit","beistandspakt","beitritt","beitrittsabsicht","beitrittsgebiet","beiwacht","beiwort","beizgerät","bekehrungswut","bekennergeist","bekennermut","bekleidungsamt","bekommen","belegarzt","belegbett","belegfrist","belehrungssucht","belemnit","belesprit","beleuchtungseffekt","beleuchtungsgerät","belfast","belkantist","belcantist","belletrist","bellizist","belt","benedikt","benediktenkraut","benefiziant","benefiziat","benefizkonzert","beneluxstaat","bentonit","benzindunst","beratungspunkt","bereit","bereicherungsabsicht","bereitschaftsarzt","bergamt","bergeslast","bergfahrt","bergfest","berggeist","berggrat","bergluft","bergpredigt","bergsport","berg-und-Tal-Fahrt","bergwacht","bergwelt","bericht","berichtsmonat","beritt","bermudashort","bernbiet","berserkerwut","berufsaussicht","berufssoldat","berufssport","berufsstart","berufstracht","berufsverbot","berufungsfrist","berufungsgericht","berufungsrecht","berührungsangst","berührungspunkt","besanmast","besatzungsgebiet","besatzungsmacht","besatzungsrecht","besatzungssoldat","besatzungsstatut","beschaffungsamt","beschäftigungstherapeut","beschlächt","beschlussrecht","beschlußrecht","beschmet","beschneidungsfest","beschlächt","beschlussrecht","beschlußrecht","beschmet","beschneidungsfest","beschwerdefrist","beschwerderecht","beschwörungskunst","beseitigungsanstalt","besetzungsgebiet","besetzungsmacht","besetzungsstatut","besichtigungsfahrt","besitzrecht","besoldungsrecht","besprechungspunkt","besserungsanstalt","bestattungsinstitut","bestimmungsort","bestimmungswort","bestinformiert","bestqualifiziert","bestrahlungsgerät","bestrenommiert","bestsituiert","bestverkauft","besucherrat","besuchsrecht","betpult","betracht","betreibungsamt","betriebsarzt","betriebsfest","betriebsrat","betriebswirt","bett","bettelmusikant","bettelvogt","bettstatt","bettwurst","beulenpest","beutegut","beutekunst","beuterecht","bevölkerungsschicht","bewahranstalt","bewährungsfrist","bewegungsarmut","beweislast","bewußt","bewusst","beziehungsgeflecht","bezirksamt","bezirksarzt","bezirksgericht","bezirkskabinett","bezirksschulrat","bezirksstadt","bezugspunkt","bezugsrecht","heraklit","herat","herbalist","herbst","herbstmonat","herbstpunkt","herdbuchzucht","herdeninstinkt","herfahrt","heringsfilet","heringssalat","herkuleskraut","herkunft","herkunftsort","hermaphrodit","heroenkult","heroinsucht","heroldsamt","heroldskunst","herostrat","herrenabfahrt","herrenbrot","herrendienst","herrenfest","herrenhut","herrenrecht","herrenschnitt","herrenwelt","herrgott","herrnhut","herrschaftsgebiet","herrschaftsgewalt","herrschaftsinstrument","herrschergeschlecht","herrscherkult","herrschsucht","herstellungsart","herzacht","herzangst","herzblatt","herzblut","herzensangst","herzensgut","herzenslust","herzenstrost","herzgeliebt","herzinfarkt","herzinnenhaut","herzklappendefekt","herzogshut","herzlichst","herzpatient","herzpunkt","herzspezialist","überbackt","ueberbackt","überbacktet","ueberbacktet","überbietet","ueberbietet","überbot","ueberbot","überbotet","ueberbotet","überbindet","ueberbindet","überbandet","ueberbandet","überbläst","ueberblaest","überbliest","ueberbliest","überbrät","ueberbraet","überbratet","ueberbratet","überbriet","ueberbriet","überbrietet","ueberbrietet","überbringt","ueberbringt","überbrachtet","ueberbrachtet","überbrücktet","ueberbruecktet","überbrühtet","ueberbrühtet","überbrülltet","ueberbruelltet","überbuchtet","ueberbuchtet","überbürdetet","ueberbuerdetet","überdecktet","ueberdecktet","überdehntet","ueberdehntet","überdenkt","ueberdenkt","überdachtet","ueberdachtet","überdosiertet","ueberdosiertet","überdrehtet","ueberdrehtet","überdrucktet","ueberdrucktet","überdüngtet","ueberdüngtet","übereignetet","uebereignetet","übereiltet","uebereiltet","übererfülltet","uebererfuelltet","überißt","ueberisst","ueberißt","überisst","überesst","ueberesst","übereßt","uebereßt","überaßt","ueberaßt","überesset","ueberesset","überäßet","ueberaesset","überfährt","ueberfaehrt","überfahrt","ueberfahrt","überfuhrt","ueberfuhrt","überfällt","ueberfaellt","überfallet","ueberfallet","überfielt","ueberfielt","überfielet","ueberfielet","überfängt","ueberfaengt","überfingt","ueberfingt","überfinget","ueberfinget","überfärbet","ueberfaerbet","überfettetet","ueberfettetet","überfirnisset","ueberfirnisset","überfirnißtet","ueberfirnisstet","überfischet","ueberfischet","überfischtet","ueberfischtet","überflanktet","ueberflanktet","überflanktet","ueberflanktet","überfliegt","ueberfliegt","überflieget","ueberflieget","überflöget","ueberflöget","überflösset","ueberfloesset","überflosst","ueberflosst","überfloßt","ueberflosst","überfließt","ueberfliesst","überflutetet","ueberflutetet","überformet","ueberformet","überformtet","ueberformtet","überfrachtetet","ueberfrachtetet","überfracht","ueberfracht","überfraget","ueberfraget","überfragtet","ueberfragtet","überfremdetet","ueberfremdetet","überfrisst","ueberfrisst","überfrißt","ueberfrißt","überfresst","ueberfresst","überfreßt","ueberfreßt","überfresset","ueberfresset","überfraßt","ueberfraßt","ueberfrasst","überfräßet","ueberfraesset","überfriert","ueberfriert","überfrieret","ueberfrieret","überfrort","ueberfrort","überfröret","ueberfroeret","überfrört","ueberfroert","überführet","ueberfuehret","überführtet","ueberfuehrtet","überfüllet","ueberfuellet","übergibt","uebergibt","übergebt","uebergebt","übergebet","uebergebet","übergabt","uebergabt","übergäbet","uebergaebet","übergäbt","uebergaebt","übergeht","uebergeht","übergehet","uebergehet","übergingt","uebergingt","übergewichtetet","uebergewichtetet","übergießet","uebergiesset","übergießt","uebergiesst","übergösset","uebergoesset","übergosst","uebergosst","uebergoßt","übergipset","uebergipset","übergipstet","uebergipstet","übergipset","uebergipset","übergipstet","uebergipstet","überglänzet","ueberglaenzet","überglänztet","ueberglaenztet","überglaset","ueberglaset","überglastet","ueberglastet","überglühet","uebergluehet","überglühtet","uebergluehtet","übergoldetet","uebergoldetet","übergraset","uebergraset","übergrastet","uebergrastet","übergrätschet","uebergraetschet","übergrätschtet","uebergraetschtet","übergreift","uebergreift","übergreifet","uebergreifet","übergrifft","uebergrifft","übergriffet","uebergriffet","übergreift","uebergreift","übergreifet","uebergreifet","übergriffet","uebergriffet","übergrifft","uebergrifft","übergrünet","uebergruenet","übergrüntet","uebergruentet","überhat","ueberhat","überhabt","ueberhabt","überhabet","ueberhabet","überhattet","ueberhattet","überhättet","ueberhaettet","überhält","ueberhaelt","überhaltet","ueberhaltet","überhielt","ueberhielt","überhieltet","ueberhieltet","überhändiget","ueberhaendiget","überhändigtet","ueberhaendigtet","überhängt","ueberhaengt","überhänget","ueberhaenget","überhingt","ueberhingt","überhinget","ueberhinget","überhängt","ueberhaengt","überhänget","ueberhaenget","überhängtet","ueberhaengtet","überhänget","ueberhaenget","überhängtet","ueberhaengtet","überhängt","ueberhaengt","überhänget","ueberhaenget","überhingt","ueberhingt","überhinget","ueberhinget","überhastetet","ueberhastetet","überhäufet","ueberhaeufet","überhäuftet","ueberhaeuftet","überhebt","ueberhebt","überhebet","ueberhebet","überhobt","ueberhobt","überhöbet","ueberhoebet","überhebt","ueberhebt","überhebet","ueberhebet","überhobt","ueberhobt","überheiztet","ueberheiztet","überheizet","ueberheizet","überhöhet","ueberhoehet","überhöhtet","ueberhoehtet","überhitzet","ueberhitzet","überhitztet","ueberhitztet","überholet","ueberholet","überholtet","ueberholtet","überhöret","ueberhoeret","überhörtet","ueberhoertet","überinterpretieret","ueberinterpretieret","überinterpretiertet","ueberinterpretiertet","überinterpretieret","ueberinterpretieret","überinterpretiertet","ueberinterpretiertet","überklebet","ueberklebet","überklebtet","ueberklebtet","überkleidetet","ueberkleidetet","überkochet","ueberkochet","überkochtet","ueberkochtet","überkommet","ueberkommet","überkamt","ueberkamt","überkämet","ueberkaemet","überkämt","ueberkaemt","überkompensieret","ueberkompensieret","überkompensiertet","ueberkompensiertet","überkreuzet","ueberkreuzet","überkreuztet","ueberkreuztet","überkronet","ueberkronet","überkrontet","ueberkrontet","überkrustetet","ueberkrustetet","überladet","ueberladet","überludet","ueberludet","überlüdet","ueberluedet","überlappet","ueberlappet","überlapptet","ueberlapptet","überlasset","ueberlasset","überlaßt","ueberlaßt","ueberlasst","ueberlasst","überlässt","ueberlaesst","überließt","ueberließt","ueberliesst","überließet","ueberließet","ueberliesset","überlastet","ueberlastet","überlastetet","ueberlastetet","überläuft","ueberlaeuft","überlaufet","ueberlaufet","überlieft","ueberlieft","überliefet","ueberliefet","überlebet","ueberlebet","überlebtet","ueberlebtet","überleget","ueberleget","überlegtet","ueberlegtet","überlegt","ueberlegt","überleget","ueberleget","überlegtet","ueberlegtet","überleitet","ueberleitet","überleitetet","ueberleitetet","überleset","ueberleset","überlast","ueberlast","überläset","ueberlaeset","überliegt","ueberliegt","überlieget","ueberlieget","überlagt","ueberlagt","überläget","ueberlaeget","überlägt","ueberlaegt","überlistetet","ueberlistetet","übermachet","uebermachet","übermachtet","uebermachtet","übermalet","uebermalet","übermaltet","uebermaltet","übermalet","uebermalet","übermaltet","uebermaltet","übermannet","uebermannet","übermanntet","uebermanntet","übermarchtet","uebermarchtet","übermarchet","uebermarchet","übermästetet","uebermaestetet","übermüdetet","uebermuedetet","übernächtiget","uebernaechtiget","übernächtigtet","uebernaechtigtet","übernimmt","uebernimmt","übernehmt","uebernehmt","übernehmet","uebernehmet","übernahmt","uebernahmt","übernähmet","uebernaehmet","übernähmt","uebernaehmt","übernutzet","uebernutzet","übernutztet","uebernutztet","überpflanzt","ueberpflanzt","überpflanzet","ueberpflanzet","überpflanztet","ueberpflanztet","überplanet","ueberplanet","überplantet","ueberplantet","überprüfet","ueberpruefet","überprüftet","ueberprueftet","überquillt","ueberquillt","überquellt","ueberquellt","überquellet","ueberquellet","überquollt","ueberquollt","überquöllet","ueberquoellet","ueberquöllt","ueberquoellt","überqueret","ueberqueret","überquertet","ueberquertet","überraget","ueberraget","überragtet","ueberragtet","überragt","ueberragt","überraget","ueberraget","überragtet","ueberragtet","überraschet","ueberraschet","überraschtet","ueberraschtet","überreagieret","ueberreagieret","überreagiertet","ueberreagiertet","überrechnetet","ueberrechnetet","überredetet","ueberredetet","überreglementieret","ueberreglementieret","überreglementiertet","ueberreglementiertet","überregulieret","ueberregulieret","überreguliertet","ueberreguliertet","überreichet","ueberreichet","überreichtet","ueberreichtet","überreißet","ueberreisset","überrisset","ueberrisset","überreitet","ueberreitet","überrittet","ueberrittet","überreizet","ueberreizet","überreiztet","ueberreiztet","überrennet","ueberrennet","überrenntet","ueberrenntet","überrollet","ueberrollet","überrolltet","ueberrolltet","überrundetet","ueberrundetet","übersäet","uebersaeet","übersätet","uebersaetet","übersättiget","uebersaettiget","uebersaettigtet","übersättigtet","überschattetet","ueberschattetet","überschätzet","ueberschaetzet","überschätztet","ueberschaetztet","überschauet","ueberschauet","überschautet","ueberschautet","überschäumt","ueberschaeumt","überschäumet","ueberschaeumet","überschäumtet","ueberschaeumtet","überschießt","ueberschießt","ueberschiesst","überschießet","ueberschiesset","ueberschießet","überschosst","ueberschosst","überschosst","ueberschosst","überschoßt","ueberschoßt","überschösset","ueberschoesset","überschlafet","ueberschlafet","überschliefet","ueberschliefet","überschlieft","ueberschlieft","überschlaget","ueberschlaget","überschlüget","ueberschlueget","überschlügt","ueberschluegt","überschlägt","ueberschlaegt","überschlagt","ueberschlagt","überschlaget","ueberschlaget","überschlugt","ueberschlugt","überschlüget","ueberschlueget","überschlügt","ueberschluegt","überschlägt","ueberschlaegt","überschlagt","ueberschlagt","überschlaget","ueberschlaget","überschlugt","ueberschlugt","überschlüget","ueberschlueget","ueberschluegt","überschlügt","überschließt","ueberschließt","ueberschliesst","überschließet","ueberschliesset","überschlosst","ueberschlosst","überschloßt","ueberschlosst","überschlösset","ueberschloesset","überschmieret","ueberschmieret","überschmiertet","ueberschmiertet","überschminket","ueberschminket","überschminktet","ueberschminktet","überschnappt","ueberschnappt","überschnappet","ueberschnappet","überschnapptet","ueberschnapptet","überschneidet","ueberschneidet","überschnittet","ueberschnittet","überschneiet","ueberschneiet","überschneitet","ueberschneitet","überschreibet","ueberschreibet","überschriebet","ueberschriebet","überschriebt","ueberschriebt","überschreiet","ueberschreiet","überschrieet","ueberschrieet","überschriet","ueberschriet","überschriet","ueberschriet","überschreitet","ueberschreitet","überschritt","ueberschritt","überschrittet","ueberschrittet","überschuldetet","ueberschuldetet","überschüttet","ueberschüttet","überschüttetet","ueberschüttetet","überschüttetet","ueberschuettetet","überschwappt","ueberschwappt","überschwappet","ueberschwappet","überschwapptet","ueberschwapptet","überschwemmet","ueberschwemmet","überschwemmtet","ueberschwemmtet","überschwinget","ueberschwinget","überschwangt","ueberschwangt","überschwänget","ueberschwaenget","überschwängt","ueberschwaengt","übersieht","uebersieht","überseht","ueberseht","übersehet","uebersehet","übersaht","uebersaht","übersähet","uebersaehet","übersäht","uebersaeht","übersähet","uebersaehet","übersäht","uebersaeht","übersandtet","uebersandtet","übersendetet","uebersendetet","übersensibilisieret","uebersensibilisieret","übersensibilisiertet","uebersensibilisiertet","übersetzt","uebersetzt","übersetzet","uebersetzet","übersetztet","uebersetztet","übersetzet","uebersetzet","übersetztet","uebersetztet","übersiedet","uebersiedet","übersiedetet","uebersiedetet","übersott","uebersott","übersottet","uebersottet","übersöttet","uebersoettet","übersiedet","uebersiedet","übersiedetet","uebersiedetet","übersott","uebersott","übersottet","uebersottet","übersöttet","uebersoettet","überspannet","ueberspannet","überspanntet","ueberspanntet","überspielet","ueberspielet","überspieltet","ueberspieltet","überspinnet","ueberspinnet","überspännet","ueberspaennet","überspännt","ueberspaennt","überspönnet","ueberspoennet","überspönnt","ueberspoennt","überspitzet","ueberspitzet","überspitztet","ueberspitztet","übersprechet","uebersprechet","überspracht","ueberspracht","übersprächet","ueberspraechet","übersprächt","ueberspraecht","überspringt","ueberspringt","überspringet","ueberspringet","überspränget","ueberspraenget","übersprängt","ueberspraengt","überspringt","ueberspringt","überspringet","ueberspringet","übersprangt","uebersprangt","überspränget","ueberspraenget","übersprängt","ueberspraengt","übersprühet","ueberspruehet","übersprühtet","ueberspruehtet","übersprühet","ueberspruehet","übersprühtet","ueberspruehtet","überspület","ueberspuelet","überspültet","überspueltet","übersticht","uebersticht","überstecht","ueberstecht","überstechet","ueberstechet","überstacht","ueberstacht","überstächet","ueberstaechet","überstächt","ueberstaecht","übersticht","uebersticht","überstecht","ueberstecht","überstechet","ueberstechet","überstacht","ueberstacht","überstächet","ueberstaechet","überstächt","ueberstaecht","überstehet","ueberstehet","überstandet","überstandet","überständet","überstaendet","überstündet","überstuendet","übersteht","uebersteht","überstehet","ueberstehet","überstandet","ueberstandet","überständet","ueberstaendet","überstündet","ueberstuendet","übersteiget","uebersteiget","überstieget","ueberstieget","überstiegt","ueberstiegt","übersteigt","uebersteigt","übersteiget","uebersteiget","überstiegt","ueberstiegt","überstieget","ueberstieget","überstellet","ueberstellet","überstilisieret","ueberstilisieret","überstimmet","ueberstimmet","überstimmtet","ueberstimmtet","überstrahlet","ueberstrahlet","überstrahltet","ueberstrahltet","überstrapazieret","ueberstrapazieret","überstrapaziertet","ueberstrapaziertet","überstreicht","ueberstreicht","überstreichet","ueberstreichet","überstricht","ueberstricht","überstrichet","ueberstrichet","überstreichet","ueberstreichet","überstrichet","ueberstrichet","überstricht","ueberstricht","überstreift","ueberstreift","überstreifet","ueberstreifet","überstreiftet","ueberstreiftet","überstreuet","ueberstreuet","überstreutet","ueberstreutet","überströmet","ueberstroemet","überströmtet","überstroemtet","überstülpt","überstuelpt","ueberstuelpet","überstülpet","überstülptet","ueberstuelptet","überstürzet","ueberstuerzet","überstürztet","ueberstuerztet","übertäubet","uebertaeubet","übertäubtet","uebertaeubtet","übertauchet","uebertauchet","übertauchtet","uebertauchtet","übertippet","uebertippet","übertipptet","uebertipptet","übertönet","uebertoenet","übertöntet","uebertoentet","übertouret","uebertouret","übertourtet","uebertourtet","überträgt","uebertraegt","übertragt","uebertragt","übertraget","uebertraget","übertrugt","uebertrugt","übertrüget","uebertrueget","übertrügt","uebertruegt","übertrainieret","uebertrainieret","übertrainiertet","uebertrainiertet","übertreffet","uebertreffet","übertraft","uebertraft","überträfet","uebertraefet","überträft","uebertraeft","übertreibt","uebertreibt","übertreibet","uebertreibet","übertriebet","uebertriebet","übertriebt","uebertriebt","übertritt","uebertritt","übertretet","uebertretet","übertrat","uebertrat","übertratet","uebertratet","überträtet","uebertraetet","übertritt","uebertritt","übertretet","uebertretet","übertrat","uebertrat","übertratet","uebertratet","überträtet","uebertraetet","übertrumpfet","uebertrumpfet","übertrumpftet","uebertrumpftet","übertünchet","uebertuenchet","übertünchtet","überversorget","ueberversorget","überversorgtet","ueberversorgtet","übervorteilet","uebervorteilet","übervorteiltet","uebervorteiltet","überwachet","ueberwachet","überwachtet","ueberwachtet","überwachset","ueberwachset","überwüchset","ueberwuechset","überwallt","ueberwallt","überwallet","ueberwallet","überwalltet","ueberwalltet","überwallet","ueberwallet","überwalltet","ueberwalltet","überwältiget","ueberwaeltiget","überwältigtet","ueberwaeltigtet","überwalzet","ueberwalzet","überwalztet","ueberwalztet","überwälzet","ueberwaelzet","überwälztet","ueberwaelztet","überwechtetet","ueberwechtetet","überwächtetet","ueberwaechtetet","überwehet","ueberwehet","überwehtet","ueberwehtet","überweidetet","ueberweidetet","überweist","ueberweist","überweiset","ueberweiset","überwiest","ueberwiest","überwieset","ueberwieset","überweißet","ueberweisset","überweißtet","ueberweisstet","überwirft","ueberwirft","überwerft","ueberwerft","überwerfet","ueberwerfet","überwarft","ueberwarft","überwürfet","ueberwuerfet","überwürft","ueberwuerft","überwirft","ueberwirft","überwerft","ueberwerft","überwerfet","ueberwerfet","überwarft","ueberwarft","überwürfet","ueberwuerfet","überwürft","ueberwuerft","überwertetet","ueberwertetet","überwiegt","ueberwiegt","überwieget","ueberwieget","überwogt","ueberwogt","überwöget","ueberwoeget","überwögt","ueberwoegt","überwindet","ueberwindet","überwandet","ueberwandet","überwändet","ueberwaendet","überwölbet","ueberwoelbet","überwölbtet","ueberwoelbtet","ueberwuerzet","ueberwuerzet","überwürztet","ueberwuerztet","überzahlet","ueberzahlet","überzahltet","ueberzahltet","überzahltet","ueberzahltet","überzeichnetet","ueberzeichnetet","überzeuget","ueberzeuget","überzeugtet","ueberzeugtet","überzieht","ueberzieht","überziehet","ueberziehet","überzogt","ueberzogt","überzöget","ueberzoeget","überzögt","ueberzoegt","überzüchtetet","ueberzuechtetet","überangebot","ueberangebot","überbrückungskredit","ueberbrückungskredit","übereinkunft","uebereinkunft","überfahrt","ueberfahrt","überflugverbot","ueberflugverbot","überflutungsgebiet","ueberflutungsgebiet","überfracht","ueberfracht","überfrucht","ueberfrucht","übergangslaut","uebergangslaut","übergebot","uebergebot","übergewicht","uebergewicht","überhangmandat","ueberhangmandat","überhangsrecht","ueberhangsrecht","überholverbot","ueberholverbot","überladenheit","ueberladenheit","überlandfahrt","ueberlandfahrt","überlast","ueberlast","überlegenheit","ueberlegenheit","übermacht","uebermacht","übermaßverbot","uebermassverbot","übermut","uebermut","überraschungseffekt","ueberraschungseffekt","überraschungsgast","ueberraschungsgast","überraschungsmoment","ueberraschungsmoment","überredungskunst","ueberredungskunst","überreiztheit","ueberreiztheit","überrest","ueberrest","überschicht","ueberschicht","überschnitt","ueberschnitt","überschrift","ueberschrift","überschwemmungsgebiet","ueberschwemmungsgebiet","überseegebiet","ueberseegebiet","überseegeschäft","ueberseegeschaeft","übersicht","uebersicht","überspanntheit","ueberspanntheit","überspitztheit","ueberspitztheit","übertragungsrecht","uebertragungsrecht","übertriebenheit","uebertriebenheit","übertritt","uebertritt","überwachungsdienst","ueberwachungsdienst","überwachungsstaat","ueberwachungsstaat","überwelt","ueberwelt","überwinterungsgebiet","ueberwinterungsgebiet","überzeugtheit","ueberzeugtheit","überzeugungstat","ueberzeugungstat","überziehungskredit","ueberziehungskredit"],{indices:Ye,values:Ke}=e.languageProcessing,{getIndicesByWord:Xe,getIndicesByWordList:et}=Ye,{Clause:tt}=Ke,rt=/\S+(apparat|arbeit|dienst|haft|halt|keit|kraft|not|pflicht|schaft|schrift|tät|wert|zeit)($|[ \n\r\t.,'()"+-;!?:/»«‹›<>])/gi,{getClausesSplitOnStopWords:st,createRegexFromArray:nt}=e.languageProcessing,lt={Clause:class extends tt{constructor(e,t){super(e,t),this._participles=function(e){const t=Ve(e),r=[];return(0,Y.forEach)(t,(function(e){(0!==He(e).length||0!==Ge(e).length||0!==_e(e).length||0!==Ze(e).length||0!==Qe(e).length||Ne.includes(e))&&r.push(e)})),r}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const e=this.getParticiples().filter((e=>!(this.hasNounSuffix(e)||(0,Y.includes)(Je,e)||this.hasHabenSeinException(e)||(0,Y.includes)(n,e))));this.setPassive(e.length>0)}hasNounSuffix(e){return null!==e.match(rt)}hasHabenSeinException(e){const t=Xe(e,this.getClauseText());let r=et(["haben","sein"],this.getClauseText());if(0===t.length||0===r.length)return!1;r=(0,Y.map)(r,"index");const s=t[0];return(0,Y.includes)(r,s.index+s.match.length+1)}},regexes:{auxiliaryRegex:nt(i.all),stopwordRegex:nt(G)}};function at(e){return st(e,lt)}const it=function(e,t){const r=new RegExp("^"+e.participleStemmingClasses[1].regex);return new RegExp("^"+e.participleStemmingClasses[0].regex).test(t)?t.slice(2,t.length-2):r.test(t)?t.slice(2,t.length-1):null},bt=function(e,t,r,s,n){for(const l of t)if(new RegExp("^"+l+r).test(e)){const t=e.slice(l.length-e.length);return l+t.slice(s,t.length-n)}return null},ut=function(e,t){const r=e.prefixes.separableOrInseparable;for(const s of e.participleStemmingClasses){const n=s.regex,l=s.startStem,a=s.endStem,i=s.separable?e.prefixes.separable:e.prefixes.inseparable;let b=bt(t,i,n,l,a);if(b)return b;if(b=bt(t,r,n,l,a),b)return b}return null},gt=function(e){let t=e.search(/[aeiouyäöü][^aeiouyäöü]/);return-1!==t&&(t+=2),-1!==t&&t<3&&(t=3),t},ht=function(e){const t=e.search(/(em|ern|er)$/g),r=e.search(/(e|en|es)$/g);let s=e.search(/([bdfghklmnrt]s)$/g);-1!==s&&s++;let n="",l=1e4;return-1!==t?(n="a",l=t,{index1:l,optionUsed1:n}):-1!==r?(n="b",l=r,{index1:l,optionUsed1:n}):-1!==s?(n="c",l=s,{index1:l,optionUsed1:n}):{index1:l,optionUsed1:n}},ot=function(e){const t=e.search(/(en|er|est)$/g);let r=e.search(/(.{3}[bdfghklmnt]st)$/g);-1!==r&&(r+=4);let s=1e4;return-1!==t?s=t:-1!==r&&(s=r),s},ct=function(e,t,r,s){return 1e4!==t&&-1!==s&&t>=s&&(e=e.substring(0,t),"b"===r&&-1!==e.search(/niss$/)&&(e=e.substring(0,e.length-1))),e},dt=function(e,t,r){return 1e4!==t&&-1!==r&&t>=r&&(e=e.substring(0,t)),e},wt=function(e,t){const r=e.veryIrregularVerbs.find((e=>e.forms.includes(t)));return r?r.stem:null},{flattenSortLength:mt}=e.languageProcessing,ft=function(e,t){const r=e.exceptionStems;for(const e of r){const r=e.find((e=>t.endsWith(e)));if(r)return t.slice(0,t.length-r.length)+e[0]}return null},pt=function(e,t){const r=e.exceptions;for(const e of Object.keys(r)){const s=r[e];for(const e of s)if(e.includes(t))return e[0]}return null},kt=function(e,t){let r=t;const s=e.strongAndIrregularVerbs.stems;let n=mt(e.prefixes).find((e=>t.startsWith(e)));if(n){const e=r.slice(n.length,r.length);e.length>2?r=e:n=null}for(const e of s){let t=e.stems;if(t=(0,Y.flatten)(Object.values(t)),t.includes(r))return n?n+e.stems.present:e.stems.present}return null};const{baseStemmer:yt}=e.languageProcessing;function zt(e){const t=(0,Y.get)(e.getData("morphology"),"de",!1);return t?e=>function(e,t){const r=t.verbs,s=function(e,t){const r=wt(e,t);if(r)return r;t=(t=(t=(t=t.replace(/([aeiouyäöü])u([aeiouyäöü])/g,"$1U$2")).replace(/([aeiouyäöü])y([aeiouyäöü])/g,"$1Y$2")).replace(/([aeiouyäöü])i([aeiouyäöü])/g,"$1I$2")).replace(/([aeiouyäöü])e([aeiouyäöü])/g,"$1E$2");const s=gt(t),n=ht(t).index1,l=ht(t).optionUsed1;t=ct(t,n,l,s);const a=ot(t);return(t=(t=(t=(t=dt(t,a,s)).replace(/U/g,"u")).replace(/Y/g,"y")).replace(/I/g,"i")).replace(/E/g,"e")}(r,e);return ft(t.nouns,s)||pt(t.adjectives,s)||kt(r,s)||function(e,t){if(Ie().length>0||Je.includes(t))return"";let r=it(e,t);return r||(r=ut(e,t),r||null)}(r,e)||s}(e,t):yt}const{formatNumber:vt}=e.helpers;function Et(e){const t=180-e.averageWordsPerSentence-58.5*e.numberOfSyllables/e.numberOfWords;return vt(t)}function Ft(e){return e=e.toLowerCase(),H.includes(e)}const{AbstractResearcher:Bt}=e.languageProcessing;class jt extends Bt{constructor(e){super(e),Object.assign(this.config,{language:"de",passiveConstructionType:"periphrastic",firstWordExceptions:t,functionWords:H,stopWords:G,transitionWords:u,twoPartTransitionWords:Z,syllables:Q,keyphraseLength:J}),Object.assign(this.helpers,{getClauses:at,getStemmer:zt,fleschReadingScore:Et,memoizedTokenizer:Se,checkIfWordIsFunction:Ft})}}})(),(window.yoast=window.yoast||{}).Researcher=s})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/default.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/default.js new file mode 100644 index 00000000..9a231b5a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/default.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(t,s)=>{for(var r in s)e.o(s,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:s[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>o});const s=window.yoast.analysis,{baseStemmer:r}=s.languageProcessing;function n(){return r}const{AbstractResearcher:a}=s.languageProcessing;class o extends a{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,delete this.defaultResearches.getPassiveVoiceResult,delete this.defaultResearches.getSentenceBeginnings,delete this.defaultResearches.findTransitionWords,delete this.defaultResearches.functionWordsInKeyphrase,Object.assign(this.config,{functionWords:[]}),Object.assign(this.helpers,{getStemmer:n})}}(window.yoast=window.yoast||{}).Researcher=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/el.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/el.js new file mode 100644 index 00000000..ab3bf88d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/el.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>C});const r=window.yoast.analysis,n={firstWords:["o","του","τον ","ο","των","τους","η","της","την","τις","το","τα","ένας","ενός","έναν","μία","μίας","μία","ένα","μια","μιας","μια","ένα","δÏο","Ï„Ïία","τέσσεÏα","πέντε ","έξι","επτά","εφτά","οκτώ","οχτώ","εννέα","εννιά","δέκα","αυτός","αυτοÏ","αυτόν","αυτοί","αυτών","αυτοÏÏ‚","αυτή","αυτής","αυτή","αυτό","αυτά","εκείνος","εκείνου","εκείνον","εκείνοι","εκείνων","εκείνη","εκείνης","εκείνη","εκείνες","εκείνο","εκείνα","τέτοιος","τέτοιου","τέτοιον","τέτοιοι","τέτοιων","τέτοιους","τέτοια","τέτοιας","τέτοιαν","τέτοιες","τέτοιο","τέτοια","τόσος","τόσου","τόσον","τόσοι","τόσων","τόσους","τόση","τόσης","τόσες","τόσο","τόσα","τοÏτος","τοÏτου","τοÏτον","τοÏτοι","τοÏτων","τοÏτους","τοÏτη ","τοÏτης","τοÏτην ","τοÏτες","τοÏτο","τοÏτα","εδώ","εκεί"],secondWords:["o","του","τον ","ο","των","τους","η","της","την","τις","το","τα","που","τον","οι"]},s=["εξαιτίας","επειδή","γιατί","διότι","καθώς","ώστε","λοιπόν","αλλά","μα","όμως ","παÏά","μόνο","μόλο","ωστόσο","εντοÏτοις","έπειτα","μολαταÏτα","μάλιστα","εξάλλου","αντίθετα","απεναντίας","διαφοÏετικά","ειδάλλως ","ειδεμή","αλλιώς ","αλλιώτικα","πάλι","ενώ","μολονότι","αντίστÏοφα","αÏχικά","Ï€Ïογουμένως","Ï€Ïώτα","ÏστεÏα","Ï€Ïιν","εντωμεταξÏ","τέλος","όταν","καθ΄ψς","όποτε","μόλις","αÏγότεÏα","αν","δηλαδή","ειδικότεÏα","ήτοι","συγκεκÏιμένα","ειδικά","καταÏχήν","κατόπιν","Ï€ÏωταÏχικα","συγκεφαλαιωτικά","συγκεφαλαιώνοντας","συγκεντÏωτικά","συνοπτικά","επιλογικά","ανακεφαλαιώνοντας","τελικά","γενικά","ευÏÏτεÏα","επιπλέον","επιπÏόσθετα","επίσης","ακόμη","Ï€Ïόσθετα","όπως","ομοίως","σαν","επομένως","συνεπώς","Ï€Ïάγματι","βέβαια","όντως","αφοÏ","αφότου","καταÏχάς","ακολοÏθως","εφόσον","κυÏίως","φυσικά","ασφαλώς","οπωσδήποτε","αναντίÏÏητα","Ï€Ïοφανώς"],g=s.concat(["παÏόλο που","ένας ακόμα λόγος","αυτό οφείλεται","αυτό εξηγείται","αυτό δικαιλογείται","η αιτία είναι","ο λόγος είναι","γι'αυτό τον λόγο","παÏόλα ταÏτα","ως επακόλουθο","ως αποτέλεσμα","κατά συνέπεια","έτσι που","και όμως","και γι'αυτό","σε αντίθεση","από την άλλη πλευÏά","αν και","και αν","στον αντίποδα","ακόμη κι αν","παÏ'όλα αυτά","στη συνέχεια","είναι γεγονός ότι","αξίζει να σημειωθεί","με άλλα λόγια","αυτό σημαίνει ότι","για παÏάδειγμα","παÏαδείγματος χάÏιν","λόγου χάÏιν","σε πεÏίπτωση που","εκτός κι αν","εξαιτίας αυτοÏ","με τον ίδιο Ï„Ïόπο","με παÏόμοιο Ï„Ïόπο","με την Ï€Ïοϋπόθεση να","υπό τον ÏŒÏο να","εν κατακλείδι ","χάÏη σε αυτό","από την στιγμή που","έχει μεγάλη σημασία να","είναι απαÏαίτητο να","είναι αναγκαίο να","είναι αξιοσημείωτο","στο μεταξÏ","στην αÏχή","με δεδομένο"]),o=[["όχι μόνο","αλλά και"],["όχι μόνο να μην","αλλά οÏτε και να"],["από την μία","από την άλλη"],["αφενός","αφετέÏου"],["μεν","δε"],["είτε","είτε"]],l=function(e){let t=e;return e.forEach((r=>{(r=r.split("-")).length>0&&r.filter((t=>!e.includes(t))).length>0&&(t=t.concat(r))})),t}([].concat(["μιανής","στους","στον","στου","στην","στης","ένας","ενός","έναν","μίας","μιάς","την","του","τον","των","τις","της","στο","στα","μία","μια","ένα","το","η ","τα","οι","τη","ο"],["ένα","δÏο ","Ï„Ïία ","τέσσεÏα","πέντε","έξι","εφτά","οχτώ","εννιά","οκτώ","εννέα","δέκα","εκατό","χίλια","εκατομμÏÏιο","εκατομμÏÏια","δισεκατομμÏÏιο","δισεκατομμÏÏια","έντεκα","ένδεκα","δώδεκα","δεκατÏία","δεκατέσσεÏα","δεκαπέντε","δεκαέξι","δεκαεπτά","δεκαοκτώ","δεκαεννέα","είκοσι"],["Ï€Ïώτος","δεÏτεÏος","Ï„Ïίτος","τέταÏτος","πέμπτος","έκτος","έβδομος","όγδοος","ένατος","δέκατος","Ï€Ïώτη","δεÏτεÏη","Ï„Ïίτη","τέταÏτη","πέμπτη","έκτη","έβδομη","όγδοη","ένατη","δέκατη","Ï€Ïώτο ","δεÏτεÏο","Ï„Ïίτο","τέταÏτο","πέμπτο","έκτο","έβδομο","όγδοο","ένατο","δέκατο","διπλάσιος","διπλάσια","διπλάσιο","Ï„Ïιπλάσιος","Ï„Ïιπλάσια","Ï„Ïιπλάσιο","διπλός","διπλή","Ï„Ïιπλός","Ï„Ïιπλή","χίλιοι","χίλιες","εκατοντάδες","χιλιάδες"],["μισός","μισή","μισό","τέταÏτο","Ï„Ïίτο","ολόκληÏο","ολόκληÏος"],["εγώ","εσÏ","αυτός","αυτή","αυτό","εμείς","εσείς","αυτοί","αυτές","αυτά","αυτοÏÏ‚","εμένα","εσένα","αυτών","μένα","σένα","εμάς","εσάς","μου","σου","μας","σας","με","σε"],["τέτοιους","εκείνος","εκείνου","εκείνον","εκείνοι","εκείνων","εκείνης","εκείνες","τέτοιος","τέτοιου","τέτοιον","τέτοιοι","τέτοιων","τέτοιας","τέτοιαν","τέτοιες","τοÏτους","τοÏτην ","εκείνη","εκείνη","εκείνο","εκείνα","τέτοια","τέτοιο","τέτοια","τόσους","τοÏτος","τοÏτου","τοÏτον","τοÏτοι","τοÏτων","τοÏτη ","τοÏτης","τοÏτες","αυτοÏ","αυτόν","αυτής","τόσος","τόσου","τόσον","τόσοι","τόσων","τόσης","τόσες","τοÏτο","τοÏτα","τόση","τόσο","τόσα","εκεί","εδώ"],["ποιανοÏ","ποιανής","ποιανών","ποιους","πόσους","ποιος","ποιου","ποιον","ποιας","πόσος","πόσου","πόσον","πόσης","ποιοι","ποιων","ποιες","πόσοι","πόσων","πόσες","ποια","ποιο","πόση","πόσα","τί","τι"],["πώς","ποÏ","πόσο","πότε"],["πεÏισσότεÏο","λιγότεÏο","ελάχιστα","καθόλου","αÏκετά","εξίσου","κάπως","τόσο ","πολÏ","τόσο","πιο","όσο"],["εαυτός","εαυτοÏ","εαυτό","εαυτοÏÏ‚"],["δικός","δικοÏ","δικό","δική","δικής","τους","δικοί","δικών","δικοÏÏ‚","δικές","δικά"],["κάμποσου","κάμποσον","κάμποση","κάμποσης ","κάμποσο","τίποτε","καθένας","καθενός","καθένα ","καθεμία","καθεμιά","καθεμίας","καθεμιάς","καθέναν","δείνα","τάδε","μεÏικοί","μεÏικών","μεÏικοÏÏ‚","μεÏικές","μεÏικά","κάποιοι","κάποιων","κάποιους","κάποιες","κάποια","άλλοι","άλλων","αλλονών","άλλους","άλλες","άλλα","κάμποσοι","κάμποσων","κάμποσες","κάμποσα"],["σε","με","από","για","ως","Ï€Ïιν","Ï€Ïος","σαν","αντί","δίχως","έως","κατά","μετά","μέχÏι","χωÏίς","παÏά","εναντίον","εξαιτίας","μεταξÏ","ίσαμε","άνευ","αμφί","ανά","διά","εκ","εις","εξ","εκτός","εν","ένεκα","εντός","επί","λόγω","πεÏί","Ï€ÏÏŒ","συν","υπέÏ","υπό","χάÏιν","χάÏη"],["δεν","θα","δεν","μη","μην","όχι","ναι","ας","για","μα"],["να","και","που","ότι","αν","αλλά","οÏτε","ουδέ","μηδέ","μήτε","ή","είτε","μα","παÏά","όμως","ωστόσο","ενώ","μολονότι","μόνο","μόνο που","λοιπόν","ώστε","άÏα","επομένως","οπότε","δηλαδή","πως","μην","μήπως","άμα","όταν","καθώς","αφοÏ","αφότου","Ï€Ïιν","μόλις","Ï€ÏοτοÏ","ώσπου","ωσότου","σαν","γιατί","επειδή"],["συνηθίζεται","μποÏοÏσαμε","ενδέχεται","εξαÏτάται","εννοείται","παίÏνουμε","είθισται","μποÏοÏμε","μποÏείτε","υπάÏχουν","παίÏνεις","παίÏνετε","παίÏνουν","βασικοÏÏ‚","μποÏοÏμε","είμαστε","είσαστε","υπάÏχει","μποÏείς","μποÏοÏν","κάνουμε","υπήÏχαν","γίνεται","γινόταν","παίÏνει","βάζουμε","δίνουμε","μποÏεί","παίÏνω","Ï€Ïέπει","έχουμε","πήγαμε","πήγατε","κάνεις","κάνετε","κάνουν","έκανες","κάναμε","κάνατε","έκαναν","υπήÏχε","πήÏαμε","πήÏατε","πήÏανε","Ïίχνει","φάγαμε","βάζεις","βάζετε","βάζουν","έβαλες","βάλαμε","βάλατε","έβαλαν","βάλανε","δίνεις","δίνεις","δίνετε","δίνουν","έδωσες","έδωσες","δώσαμε","δώσατε","έδωσαν","δώσανε","έδινες","δίναμε","δίνατε","δίνανε","έδιναν","είχαμε","είχατε","είναι","είμαι","είσαι","είστε","Ïίχνω","μποÏÏŽ","πήγες","πήγαν","κάνει","έκανα","έκανε","πήÏες","πήÏαν","έÏιξα","έÏιξε","Ï„Ïώει","Ï„Ïώμε","έφαγε","βάζει","έβαλα","έβαλε","έδωσα","έδινα","έδινε","έχεις","έχετε","έχουν","είχες","είχαν","κάνω","Ï„Ïώω","βάζω","δίνω","πάμε","πάει","πάμε","πάτε","πάνε","πήγα","πήγε","πήÏε","έχει","είχα","είχε","πάω","έχω","πας"],["πολÏ","παÏά ","παÏα","απίστευτα","εκπληκτικά","αναπάντεχα","αφάνταστα","Ï€Ïαγματικά","εντελώς","απόλυτα","καθολικά","τελείως"],["συνηθίζεται","ενδέχεται","εξαÏτάται","εννοείται","είθισται","είμαστε","είσαστε","υπάÏχει","μποÏεί","παίÏνω","Ï€Ïέπει","έχουμε","είναι","είμαι","είσαι","είστε","Ïίχνω","μποÏÏŽ","κάνω","Ï„Ïώω","βάζω","δίνω","πάμε","πάω","έχω"],["καλός","καλά","καλή","καλÏτεÏος","καλÏτεÏη","σοβαÏά","ωÏαίος","ωÏαία","ωÏαίο","απλός","απλή","απλό","πεÏίπλοκος","πεÏίπλοκη","πεÏίπλοκο","μεγάλο","μεγαλÏτεÏος","βασική","βασικός","βασικό","ουσιαστικός","κανονικός","κανονική","κανονικό","άσχημο","Ï„ÏομεÏÏŒ","απαίσιο","αδιανόητο","μέσος","Ï€Ïαγματικός","Ï€Ïαγματική","Ï€Ïαγματικό","Ï€Ïώην","σπάνιος","σπάνια","συνηθισμένος ","συνηθισμένη","συνηθισμένο","σχετικός","σχετική","σχετικό","καλÏτεÏα","τέλεια","υπέÏοχα","έντονα","παÏαλίγο","απλά","κυÏίως","συνήθως","ευθέως","συνεχώς","αδιάκοπα","ασταμάτητα","ατελείωτα","ατέÏμονα","βασικά","ουσιαστικά","κανονικά","άσχημα","εντάξει","τελικά","φυσικά","μπÏοστά","πίσω","επάνω","κάτω","ευτυχώς","δυστυχώς","ξαφνικά","ειλικÏινά","απÏοσδόκητα","απότομα","ανάμεσα","κοντά","σιμά","μακÏιά","δίπλα","σχετικά"],["α","αα","αχ","αι","αλί","αλίμονο","αμάν","αμέ","αμποτε","άιντε","άντε","άου","άχου","αχοÏ","βαχ","Î²Î¿Ï…Ï ","βÏε","ε","ει","εμ","επ","ζήτω","εÏγε","μμμ","μπα","μπαμ","μπÏάβο","μωÏέ","μωÏή","ω","ου","οÏου","ουστ","οιμέ","οϊμέ","ωπ","οπ","πωπω","ποπο","απαπα","ουφ","ώπα","ώπατης","όπα","όπατης","ωχ","οχ","όχου","ώχου","όφου","ποπό","πωπώ","πουφ","Ï€Ïιτς","πφ","Ïε","σουτ","τσου","τσα","φτου","χα","χαχαχα","χμ","ωω","ωωω","ωχοÏ","ουάου"],["γÏαμ.","γÏαμμ.","γÏαμμάÏια","κ/γ","κ.γ.","κ.σ.","γÏ.","ματσ.","κιλό","φλ.","φλυτζάνι","κοÏπα","ποτ.","ποτήÏι","σκ.","ξÏσμα","φλοÏδα","λίτÏο","λίτÏα"],["δευτεÏόλεπτο","δευτεÏόλεπτα","δεÏτεÏα","ÏŽÏα","ÏŽÏας","τέταÏτο","μισάωÏο","ÏŽÏες","μέÏα","μέÏας","μέÏες","ημέÏα","ημέÏες","σήμεÏα","αÏÏιο","εχθές","χθές","βδομάδα","βδομάδες","βδομάδας","εβδομάδα","εβδομάδες","μισαωÏάκι","τεταÏτάκι","δεκάλεπτο","πεντάλεπτο","φέτος","πέÏσι","χÏόνος","πέÏυσι","χÏόνου","Ï€ÏόπεÏσι","Ï€Ïοχθές"],["Ï€Ïάγμα","Ï€Ïάγματα","υπόθεση","πεÏίπτωση","Ï€Ïόβλημα","Ï€Ïοβλήματα","αντικείμενο","αντικείμενα","θέμα","θέματα","πεÏίσταση","συνθήκες","πεÏιστάσεις","ζήτημα","ζητήματα","ζητημάτων","υποθέσεις","γεγονός","γεγονότα","κατάσταση","καταστάσεις","ουσία","Ï„Ïόπος","μέθοδος","παÏάγοντας","παÏάγοντες","αιτία","επίπτωση","αιτίες","επιπτώσεις","μέÏος","μέÏη","άποψη","απόψεις","γνώμη","γνώμες","άτομο","άτομα","ομάδα","Ï€Ïαγματικότητα","διαφοÏά","διαφοÏές","ομοιότητες"],["δεσποινίς","καθηγητής","διδάκτωÏ","κÏÏιος","κÏÏιοι","κυÏίες","καθηγ","κυÏία","διδα","καθ","κος","δÏ","κα"],s)),c=window.lodash;function x(e,t,r,n){let s;for(let g=0;gfunction(e,t){const r=e=(e=e.replace(/[ΆΑά]/g,"α").replace(/[ΈΕέ]/g,"ε").replace(/[ΉΗή]/g,"η").replace(/[ΊΪΙίÎÏŠ]/g,"ι").replace(/[ΌΟό]/g,"ο").replace(/[ΎΫΥÏΰϋ]/g,"Ï…").replace(/[ÎΩώ]/g,"ω").replace(/[Σς]/g,"σ")).toLocaleUpperCase("el"),n=t.externalStemmer.doNotStemWords;if(e.length<3||n.includes(e))return e.toLocaleLowerCase("el");e=function(e,t){const r=t.externalStemmer.step1Exceptions,n=new RegExp("(.*)("+Object.keys(r).join("|")+")$").exec(e);return null!==n&&(e=n[1]+r[n[2]]),e}(e,t),e=function(e,t){const r=t.externalStemmer.regexesStep1,n=r.regexesArrays;let s;return null!==(s=new RegExp(r.regex1a).exec(e))&&(e=s[1],new RegExp(r.regex1b).test(e)||(e+="ΑΔ")),x(e,n[0],n[1],n[2])}(e,t),e=function(e,t){const r=t.externalStemmer.regexesStep2,n=new RegExp(t.externalStemmer.vowelRegex1);let s;return null!==(s=new RegExp(r.regex2a).exec(e))&&s[1].length>4&&(e=s[1]),null!==(s=new RegExp(r.regex2b).exec(e))&&(e=s[1],(n.test(e)||e.length<2||new RegExp(r.regex2c).test(s[1]))&&(e+="Ι"),new RegExp(r.regex2d).test(s[1])&&(e+="ΑΙ")),e}(e,t),e=function(e,t){const r=new RegExp(t.externalStemmer.vowelRegex1),n=t.externalStemmer.regexesStep3;let s;return null!==(s=new RegExp(n.regex3a).exec(e))&&(e=s[1],(r.test(e)||new RegExp(n.regex3b).test(e)||new RegExp(n.regex3c).test(e))&&(e+="ΙΚ")),e}(e,t),e=function(e,t){const r=t.externalStemmer.regexesStep4,n=r.regexesArrays,s=t.externalStemmer.vowelRegex1,g=t.externalStemmer.vowelRegex2;let o;return"ΑΓΑΜΕ"===e?"ΑΓΑΜ":(e=a(e,r.regex4a),e=a(e=i(e=x(e,n.arrays1[0],n.arrays1[1],n.arrays1[2]),r.regex4b,g,r.regex4c,"ΑÎ"),r.regex4d),null!==(o=new RegExp(r.regex4e).exec(e))&&(e=o[1],(new RegExp(g).test(e)||new RegExp(r.regex4f).test(e)||new RegExp(r.regex4g).test(e))&&(e+="ΕΤ")),null!==(o=new RegExp(r.regex4h).exec(e))&&(e=o[1],new RegExp(r.regex4i).test(o[1])?e+="ΟÎΤ":new RegExp(r.regex4j).test(o[1])&&(e+="ΩÎΤ")),e=i(e=a(e=x(e,n.arrays2[0],n.arrays2[1],n.arrays2[2]),r.regex4k),r.regex4l,r.regex4m,r.regex4n,"ΗΚ"),null!==(o=new RegExp(r.regex4o).exec(e))&&(e=o[1],(new RegExp(s).test(e)||new RegExp(r.regex4p).test(o[1])||new RegExp(r.regex4q).test(o[1]))&&(e+="ΟΥΣ")),null!==(o=new RegExp(r.regex4r).exec(e))&&(e=o[1],(new RegExp(r.regex4s).test(e)||new RegExp(r.regex4t).test(e)&&!new RegExp(r.regex4u).test(e))&&(e+="ΑΓ")),e=x(e,n.arrays3[0],n.arrays3[1],n.arrays3[2]))}(e,t),e=function(e,t){const r=t.externalStemmer.regexesStep5;let n;return null!==(n=new RegExp(r.regex5a).exec(e))&&(e=n[1]+"Μ",new RegExp(r.regex5b).test(n[1])?e+="Α":new RegExp(r.regex5c).test(n[1])&&(e+="ΑΤ")),null!==(n=new RegExp(r.regex5d).exec(e))&&(e=n[1]+"ΟΥ"),e}(e,t);const s=t.externalStemmer.longWordRegex;return r.length===e.length&&(e=a(e,s)),e=function(e,t){const r=t.externalStemmer.regexesStep6;let n;return null!==(n=new RegExp(r.regex6a).exec(e))&&(new RegExp(r.regex6b).test(n[1])||(e=n[1]),new RegExp(r.regex6c).test(n[1])&&(e+="ΥΤ")),e}(e,t),e.toLocaleLowerCase("el")}(e,t):p}const{getWords:w}=r.languageProcessing,{values:R}=r.languageProcessing,{Clause:d}=R,{getClausesSplitOnStopWords:E,createRegexFromArray:f}=r.languageProcessing,m={Clause:class extends d{constructor(e,t){super(e,t),this._participles=function(e){return w(e).filter((e=>new RegExp("(οÏμενους|ημένους|οÏμενος|οÏμενου|οÏμενον|οÏμενης|οÏμενοι|οÏμενων|οÏμενες|μένους|ημένος|ημένου|ημένον|ημένοι|ημένων|ημένης|ημένες|οÏμενη|οÏμενο|οÏμενα|μένος|μένου|μένον|μένοι|μένης|μένες|μένων|ημένη|ημένο|ημένα|μένη|μένο|μένα)$").test(e)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const e=this.getParticiples();this.setPassive(e.length>0)}},regexes:{auxiliaryRegex:f(["είμαι","είσαι","είναι","είμαστε","είστε","είσαστε","ήμουν","ήσουν","ήταν","ήμαστε","ήμασταν","ήσαστε","ήσασταν"]),stopwordRegex:f(["ένα","έναν","ένας","αι","ακομα","ακομη","ακÏιβως","αληθεια","αληθινα","αλλα","αλλαχου","αλλες","αλλη","αλλην","αλλης","αλλιως","αλλιωτικα","αλλο","αλλοι","αλλοιως","αλλοιωτικα","αλλον","αλλος","αλλοτε","αλλου","αλλους","αλλων","αμα","αμεσα","αμεσως","αν","ανα","αναμεσα","αναμεταξυ","ανευ","αντι","αντιπεÏα","αντις","ανω","ανωτεÏω","αξαφνα","απ","απεναντι","απο","αποψε","από","αÏα","αÏαγε","αÏγα","αÏγοτεÏο","αÏιστεÏα","αÏκετα","αÏχικα","ας","αυÏιο","αυτα","αυτες","αυτεσ","αυτη","αυτην","αυτης","αυτο","αυτοι","αυτον","αυτος","αυτοσ","αυτου","αυτους","αυτουσ","αυτων","αφοτου","αφου","αἱ","αἳ","αἵ","αá½Ï„όσ","αá½Ï„ὸς","αὖ","α∆ιακοπα","βεβαια","βεβαιοτατα","γάÏ","γα","γα^","γε","γι","για","γοῦν","γÏηγοÏα","γυÏω","γὰÏ","δ'","δέ","δή","δαί","δαίσ","δαὶ","δαὶς","δε","δεν","δι","δι'","διά","δια","διὰ","δὲ","δὴ","δ’","εαν","εαυτο","εαυτον","εαυτου","εαυτους","εαυτων","εγκαιÏα","εγκαιÏως","εγω","ειθε","ειμαι","ειμαστε","ειναι","εις","εισαι","εισαστε","ειστε","ειτε","ειχα","ειχαμε","ειχαν","ειχατε","ειχε","ειχες","ει∆εμη","εκ","εκαστα","εκαστες","εκαστη","εκαστην","εκαστης","εκαστο","εκαστοι","εκαστον","εκαστος","εκαστου","εκαστους","εκαστων","εκει","εκεινα","εκεινες","εκεινεσ","εκεινη","εκεινην","εκεινης","εκεινο","εκεινοι","εκεινον","εκεινος","εκεινοσ","εκεινου","εκεινους","εκεινουσ","εκεινων","εκτος","εμας","εμεις","εμενα","εμπÏος","εν","ενα","εναν","ενας","ενος","εντελως","εντος","εντωμεταξυ","ενω","ενός","εξ","εξαφνα","εξης","εξισου","εξω","επ","επί","επανω","επειτα","επει∆η","επι","επισης","επομενως","εσας","εσεις","εσενα","εστω","εσυ","ετεÏα","ετεÏαι","ετεÏας","ετεÏες","ετεÏη","ετεÏης","ετεÏο","ετεÏοι","ετεÏον","ετεÏος","ετεÏου","ετεÏους","ετεÏων","ετουτα","ετουτες","ετουτη","ετουτην","ετουτης","ετουτο","ετουτοι","ετουτον","ετουτος","ετουτου","ετουτους","ετουτων","ετσι","ευγε","ευθυς","ευτυχως","εφεξης","εχει","εχεις","εχετε","εχθες","εχομε","εχουμε","εχουν","εχτες","εχω","εως","εἰ","εἰμί","εἰμὶ","εἰς","εἰσ","εἴ","εἴμι","εἴτε","ε∆ω","η","ημασταν","ημαστε","ημουν","ησασταν","ησαστε","ησουν","ηταν","ητανε","ητοι","ηττον","η∆η","θα","ι","ιι","ιιι","ισαμε","ισια","ισως","ισωσ","ι∆ια","ι∆ιαν","ι∆ιας","ι∆ιες","ι∆ιο","ι∆ιοι","ι∆ιον","ι∆ιος","ι∆ιου","ι∆ιους","ι∆ιων","ι∆ιως","κ","καί","καίτοι","καθ","καθε","καθεμια","καθεμιας","καθενα","καθενας","καθενος","καθετι","καθολου","καθως","και","κακα","κακως","καλα","καλως","καμια","καμιαν","καμιας","καμποσα","καμποσες","καμποση","καμποσην","καμποσης","καμποσο","καμποσοι","καμποσον","καμποσος","καμποσου","καμποσους","καμποσων","κανεις","κανεν","κανενα","κανεναν","κανενας","κανενος","καποια","καποιαν","καποιας","καποιες","καποιο","καποιοι","καποιον","καποιος","καποιου","καποιους","καποιων","καποτε","καπου","καπως","κατ","κατά","κατα","κατι","κατιτι","κατοπιν","κατω","κατὰ","καὶ","κι","κιολας","κλπ","κοντα","κτλ","κυÏιως","κἀν","κἂν","λιγακι","λιγο","λιγωτεÏο","λογω","λοιπα","λοιπον","μέν","μέσα","μή","μήτε","μία","μα","μαζι","μακαÏι","μακÏυα","μαλιστα","μαλλον","μας","με","μεθ","μεθαυÏιο","μειον","μελει","μελλεται","μεμιας","μεν","μεÏικα","μεÏικες","μεÏικοι","μεÏικους","μεÏικων","μεσα","μετ","μετά","μετα","μεταξυ","μετὰ","μεχÏι","μη","μην","μηπως","μητε","μη∆ε","μιά","μια","μιαν","μιας","μολις","μολονοτι","μοναχα","μονες","μονη","μονην","μονης","μονο","μονοι","μονομιας","μονος","μονου","μονους","μονων","μου","μποÏει","μποÏουν","μπÏαβο","μπÏος","μá¼Î½","μὲν","μὴ","μὴν","να","ναι","νωÏις","ξανα","ξαφνικα","ο","οι","ολα","ολες","ολη","ολην","ολης","ολο","ολογυÏα","ολοι","ολον","ολονεν","ολος","ολοτελα","ολου","ολους","ολων","ολως","ολως∆ιολου","ομως","ομωσ","οποια","οποιαν","οποιαν∆ηποτε","οποιας","οποιας∆ηποτε","οποια∆ηποτε","οποιες","οποιες∆ηποτε","οποιο","οποιοι","οποιον","οποιον∆ηποτε","οποιος","οποιος∆ηποτε","οποιου","οποιους","οποιους∆ηποτε","οποιου∆ηποτε","οποιο∆ηποτε","οποιων","οποιων∆ηποτε","οποι∆ηποτε","οποτε","οποτε∆ηποτε","οπου","οπου∆ηποτε","οπως","οπωσ","οÏισμενα","οÏισμενες","οÏισμενων","οÏισμενως","οσα","οσα∆ηποτε","οσες","οσες∆ηποτε","οση","οσην","οσην∆ηποτε","οσης","οσης∆ηποτε","οση∆ηποτε","οσο","οσοι","οσοι∆ηποτε","οσον","οσον∆ηποτε","οσος","οσος∆ηποτε","οσου","οσους","οσους∆ηποτε","οσου∆ηποτε","οσο∆ηποτε","οσων","οσων∆ηποτε","οταν","οτι","οτι∆ηποτε","οτου","ου","ουτε","ου∆ε","οχι","οἱ","οἳ","οἷς","οá½","οá½Î´","οá½Î´Î­","οá½Î´ÎµÎ¯Ïƒ","οá½Î´Îµá½¶Ï‚","οá½Î´á½²","οá½Î´á½²Î½","οá½Îº","οá½Ï‡","οá½Ï‡á½¶","οὓς","οὔτε","οὕτω","οὕτως","οὕτωσ","οὖν","οὗ","οὗτος","οὗτοσ","παλι","παντοτε","παντου","παντως","παÏ","παÏά","παÏα","παÏá½°","πεÏί","πεÏα","πεÏι","πεÏιπου","πεÏισσοτεÏο","πεÏσι","πεÏυσι","πεÏá½¶","πια","πιθανον","πιο","πισω","πλαι","πλεον","πλην","ποια","ποιαν","ποιας","ποιες","ποιεσ","ποιο","ποιοι","ποιον","ποιος","ποιοσ","ποιου","ποιους","ποιουσ","ποιων","πολυ","ποσες","ποση","ποσην","ποσης","ποσοι","ποσος","ποσους","ποτε","που","πουθε","πουθενα","ποῦ","Ï€Ïεπει","Ï€Ïιν","Ï€Ïο","Ï€Ïοκειμενου","Ï€Ïοκειται","Ï€ÏοπεÏσι","Ï€Ïος","Ï€Ïοσ","Ï€Ïοτου","Ï€Ïοχθες","Ï€Ïοχτες","Ï€ÏωτυτεÏα","Ï€Ïόσ","Ï€Ïὸ","Ï€Ïὸς","πως","πωσ","σαν","σας","σε","σεις","σημεÏα","σιγα","σου","στα","στη","στην","στης","στις","στο","στον","στου","στους","στων","συγχÏονως","συν","συναμα","συνεπως","συνηθως","συχνα","συχνας","συχνες","συχνη","συχνην","συχνης","συχνο","συχνοι","συχνον","συχνος","συχνου","συχνους","συχνων","συχνως","σχε∆ον","σωστα","σόσ","σÏ","σÏν","σὸς","σὺ","σὺν","τά","τήν","τί","τίς","τίσ","τα","ταυτα","ταυτες","ταυτη","ταυτην","ταυτης","ταυτο,ταυτον","ταυτος","ταυτου","ταυτων","ταχα","ταχατε","ταῖς","τα∆ε","τε","τελικα","τελικως","τες","τετοια","τετοιαν","τετοιας","τετοιες","τετοιο","τετοιοι","τετοιον","τετοιος","τετοιου","τετοιους","τετοιων","τη","την","της","τησ","τι","τινα","τιποτα","τιποτε","τις","τισ","το","τοί","τοι","τοιοῦτος","τοιοῦτοσ","τον","τος","τοσα","τοσες","τοση","τοσην","τοσης","τοσο","τοσοι","τοσον","τοσος","τοσου","τοσους","τοσων","τοτε","του","τουλαχιστο","τουλαχιστον","τους","τουτα","τουτες","τουτη","τουτην","τουτης","τουτο","τουτοι","τουτοις","τουτον","τουτος","τουτου","τουτους","τουτων","τοÏσ","τοὺς","τοῖς","τοῦ","τυχον","των","τωÏα","τό","τόν","τότε","τὰ","τὰς","τὴν","τὸ","τὸν","τῆς","τῆσ","τῇ","τῶν","τῷ","Ï…Ï€","υπεÏ","υπο","υποψη","υποψιν","υπό","υστεÏα","φετος","χαμηλα","χθες","χτες","χωÏις","χωÏιστα","ψηλα","ω","ωÏαια","ως","ωσ","ωσαν","ωσοτου","ωσπου","ωστε","ωστοσο","ωχ","ἀλλ'","ἀλλά","ἀλλὰ","ἀλλ’","ἀπ","ἀπό","ἀπὸ","ἀφ","ἂν","ἃ","ἄλλος","ἄλλοσ","ἄν","ἄÏα","ἅμα","á¼Î¬Î½","á¼Î³ÏŽ","á¼Î³á½¼","á¼Îº","á¼Î¼ÏŒÏƒ","á¼Î¼á½¸Ï‚","á¼Î½","á¼Î¾","á¼Ï€Î¯","á¼Ï€Îµá½¶","á¼Ï€á½¶","á¼ÏƒÏ„ι","á¼Ï†","á¼á½°Î½","ἑαυτοῦ","ἔτι","ἡ","á¼¢","á¼£","ἤ","á¼¥","á¼§Ï‚","ἵνα","á½","ὃ","ὃν","ὃς","á½…","ὅδε","ὅθεν","ὅπεÏ","á½…Ï‚","ὅσ","ὅστις","ὅστισ","ὅτε","ὅτι","ὑμόσ","ὑπ","ὑπέÏ","ὑπό","ὑπὲÏ","ὑπὸ","ὡς","ὡσ","ὥς","ὥστε","ὦ","á¾§","∆α","∆ε","∆εινα","∆εν","∆εξια","∆ηθεν","∆ηλα∆η","∆ι","∆ια","∆ιαÏκως","∆ικα","∆ικο","∆ικοι","∆ικος","∆ικου","∆ικους","∆ιολου","∆ιπλα","∆ιχως"])}};function h(e){return E(e,m)}const S=["διαπÏαγματεÏ","αισθάν","ανέχ","ανταγωνίζ","αντιλαμβάν","αντιστÏατεÏ","απεχθάν","αÏν","αφουγκÏάζ","βαÏιέμαι","γεÏ","δέχ","διανο","διηγ","εγγυ","καταÏιέμαι","λιγουÏεÏ","λυπάμαι","μάχ","μέμφ","μεταχειÏίζ","μιμ","νυμφεÏ","ονειÏεÏ","οÏαματίζ","οσμίζ","πεÏιποι","Ï€Ïοασπίζ","Ï€Ïοοιωνίζ","Ï€Ïοφασίζ","ειÏωνεÏ","εισηγ","εκδικ","εκμεταλλεÏ","εμπιστεÏ","επιβουλεÏ","επικαλ","επισκέπτ","επωμίζ","εÏωτεÏ","ευαγγελίζ","εχθÏεÏ","θυμάμαι","καπηλεÏ","καÏπών","σέβ","σιχαίν","σκαÏφίζ","σκέφτ","σπλαχνίζ","συλλογίζ","συμμεÏίζ","υπαινίσσ","υποκÏίν","υποπτεÏ","υπόσχ","υποψιάζ","φοβάμαι","χειÏίζ","χÏειάζ","Ï€ÏαγματεÏ","μαθεÏ","ξαναγίν","ξεκαÏδίζ","ξεκουμπίζ","ξεχÏν","ξημεÏοβÏαδιάζ","οδÏÏ","παÏαιτ","παÏαλογίζ","παÏαστέκ","παÏεκτÏέπ","πειÏαματίζ","πεÏιπλαν","πολιτεÏ","αγωνίζ","αθλ","ακÏοβολίζ","αμιλλ","αμÏν","αναδιπλών","αναδÏ","αναÏωτιέμαι","αντιστέκ","γεÏ","γκÏεμοτσακίζ","διαπληκτίζ","εισέÏχ","εκÏήγνυμαι","εμφοÏ","Ï€ÏοποÏεÏ","ÏεÏ","σκυλοβαÏιέμαι","σοβαÏεÏ","συγκÏοÏ","συμπαÏατάσσ","συμπεÏιφέÏ","συνδικαλίζ","συνεννο","συνεÏγάζ","υπεισέÏχ","υπεÏηφανεÏ","φαγών","φÏ","χαμοκυλιέμαι","εναντιών","ενίσταμαι","επαίÏ","επιτίθεμαι","ευθÏν","ηγ","ηττ","ίπταμαι","καμών","καταγίν","κατάγ","κλυδωνίζ","κοκοÏεÏ","λογοδίν","μαίν","ανεβαιν","ανεβηκα","κατεβαιν","κατέβηκα","συγχαίÏ","συγχάÏκα"],y=["ιόμασταν","ιόσασταν","οÏμασταν","οÏσασταν","ομασταν","οσασταν","όμασταν","όσασταν","ιόμαστε","ιοÏνται","ιόσαστε","ηθήκαμε","ηθήκατε","ιοÏνταν","οÏμαστε","θήκαμε","θήκατε","τήκαμε","τήκατε","όμαστε","όσαστε","ηθοÏμε","ηθείτε","ήθηκες","ήθηκαν","ιόμουν","ιόσουν","οÏνται","οÏμουν","οÏσουν","οÏνταν","μαστε","σαστε","θοÏμε","θείτε","τοÏμε","τείτε","θηκες","θηκαν","τηκες","τηκαν","ονται","όμουν","όσουν","ονταν","ιέμαι","ιέσαι","ιέται","ιέστε","ηθείς","ηθοÏν","ήθηκα","ήθηκε","ιόταν","οÏμαι","είσαι","είται","είστε","θείς","θοÏν","τείς","τοÏν","θηκα","θηκε","τηκα","τηκε","μουν","σουν","νταν","ομαι","εσαι","εται","εστε","όταν","ηθεί","μαι","σαι","ται","στε","θεί","τεί","ταν","ηθώ","θώ","τώ"],{getWords:b,directPrecedenceException:P}=r.languageProcessing,W=["να"];function v(e){const t=b(e);for(const r of t)for(const t of y)if(r.endsWith(t)&&r.length>4){const n=r.slice(0,-t.length);return/^(θεί|τεί)$/.test(t)?!S.includes(n)&&!P(e,r,W):!S.includes(n)}return!1}const{AbstractResearcher:j}=r.languageProcessing;class C extends j{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"el",functionWords:l,passiveConstructionType:"morphologicalAndPeriphrastic",transitionWords:g,twoPartTransitionWords:o,firstWordExceptions:n.firstWords,secondWordExceptions:n.secondWords}),Object.assign(this.helpers,{getStemmer:u,getClauses:h,isPassiveSentence:v})}}(window.yoast=window.yoast||{}).Researcher=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/en.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/en.js new file mode 100644 index 00000000..2e25881b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/en.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(d,n)=>{for(var t in n)e.o(n,t)&&!e.o(d,t)&&Object.defineProperty(d,t,{enumerable:!0,get:n[t]})},o:(e,d)=>Object.prototype.hasOwnProperty.call(e,d),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},d={};e.r(d),e.d(d,{default:()=>Fe});const n=window.yoast.analysis,t=["the","a","an","one","two","three","four","five","six","seven","eight","nine","ten","this","that","these","those"],i=["am","is","are","was","were","been","get","gets","got","gotten","be","she's","he's","it's","i'm","we're","they're","you're","that's","isn't","weren't","wasn't","aren't"],a=["being","getting","having","what's"],r=i.concat(a),o=["accordingly","additionally","afterward","afterwards","albeit","also","although","altogether","another","basically","because","before","besides","but","certainly","chiefly","comparatively","concurrently","consequently","contrarily","conversely","correspondingly","despite","doubtedly","during","e.g.","earlier","emphatically","equally","especially","eventually","evidently","explicitly","finally","firstly","following","formerly","forthwith","fourthly","further","furthermore","generally","hence","henceforth","however","i.e.","identically","indeed","initially","instead","last","lastly","later","lest","likewise","markedly","meanwhile","moreover","nevertheless","nonetheless","nor","notwithstanding","obviously","occasionally","otherwise","overall","particularly","presently","previously","rather","regardless","secondly","shortly","significantly","similarly","simultaneously","since","so","soon","specifically","still","straightaway","subsequently","surely","surprisingly","than","then","thereafter","therefore","thereupon","thirdly","though","thus","till","undeniably","undoubtedly","unless","unlike","unquestionably","until","when","whenever","whereas","while"],s=o.concat(["above all","after all","after that","all in all","all of a sudden","all things considered","analogous to","although this may be true","analogous to","another key point","as a matter of fact","as a result","as an illustration","as can be seen","as has been noted","as I have noted","as I have said","as I have shown","as long as","as much as","as opposed to","as shown above","as soon as","as well as","at any rate","at first","at last","at least","at length","at the present time","at the same time","at this instant","at this point","at this time","balanced against","being that","by all means","by and large","by comparison","by the same token","by the time","compared to","be that as it may","coupled with","different from","due to","equally important","even if","even more","even so","even though","first thing to remember","for example","for fear that","for instance","for one thing","for that reason","for the most part","for the purpose of","for the same reason","for this purpose","for this reason","from time to time","given that","given these points","important to realize","in a word","in addition","in another case","in any case","in any event","in brief","in case","in conclusion","in contrast","in detail","in due time","in effect","in either case","in essence","in fact","in general","in light of","in like fashion","in like manner","in order that","in order to","in other words","in particular","in reality","in short","in similar fashion","in spite of","in sum","in summary","in that case","in the event that","in the final analysis","in the first place","in the fourth place","in the hope that","in the light of","in the long run","in the meantime","in the same fashion","in the same way","in the second place","in the third place","in this case","in this situation","in time","in truth","in view of","inasmuch as","most compelling evidence","most important","must be remembered","not only","not to mention","note that","now that","of course","on account of","on balance","on condition that","on one hand","on the condition that","on the contrary","on the negative side","on the other hand","on the positive side","on the whole","on this occasion","once","once in a while","only if","owing to","point often overlooked","prior to","provided that","seeing that","so as to","so far","so long as","so that","sooner or later","such as","summing up","take the case of","that is","that is to say","then again","this time","to be sure","to begin with","to clarify","to conclude","to demonstrate","to emphasize","to enumerate","to explain","to illustrate","to list","to point out","to put it another way","to put it differently","to repeat","to rephrase it","to say nothing of","to sum up","to summarize","to that end","to the end that","to this end","together with","under those circumstances","until now","up against","up to the present time","vis a vis","what's more","while it may be true","while this may be true","with attention to","with the result that","with this in mind","with this intention","with this purpose in mind","without a doubt","without delay","without doubt","without reservation"]);function u(e){let d=e;return e.forEach((n=>{(n=n.split("-")).length>0&&n.filter((d=>!e.includes(d))).length>0&&(d=d.concat(n))})),d}const l=["the","an","a"],c=["one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty","hundred","hundreds","thousand","thousands","million","millions","billion","billions"],h=["first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth","thirteenth","fourteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","twentieth"],p=["i","you","he","she","it","we","they"],m=["me","him","us","them"],f=["this","that","these","those"],g=["my","your","his","her","its","their","our","mine","yours","hers","theirs","ours"],b=["all","some","many","lot","lots","ton","tons","bit","no","every","enough","little","much","more","most","plenty","several","few","fewer","kind","kinds"],w=["myself","yourself","himself","herself","itself","oneself","ourselves","yourselves","themselves"],y=["none","nobody","everyone","everybody","someone","somebody","anyone","anybody","nothing","everything","something","anything","each","other","whatever","whichever","whoever","whomever","whomsoever","whosoever","others","neither","both","either","any","such"],v=["one's","nobody's","everyone's","everybody's","someone's","somebody's","anyone's","anybody's","nothing's","everything's","something's","anything's","whoever's","others'","other's","another's","neither's","either's"],z=["which","what","whose"],k=["who","whom"],x=["where","how","why","whether","wherever","whyever","wheresoever","whensoever","howsoever","whysoever","whatsoever","whereso","whomso","whenso","howso","whyso","whoso","whatso"],q=["therefor","therein","hereby","hereto","wherein","therewith","herewith","wherewith","thereby"],j=["there","here","whither","thither","hither","whence","thence"],P=["always","once","twice","thrice"],L=["can","cannot","can't","could","couldn't","could've","dare","dares","dared","do","don't","does","doesn't","did","didn't","done","have","haven't","had","hadn't","has","hasn't","i've","you've","we've","they've","i'd","you'd","he'd","she'd","it'd","we'd","they'd","would","wouldn't","would've","may","might","must","need","needn't","needs","ought","shall","shalln't","shan't","should","shouldn't","will","won't","i'll","you'll","he'll","she'll","it'll","we'll","they'll","there's","there're","there'll","here's","here're","there'll"],E=["appear","appears","appeared","become","becomes","became","come","comes","came","keep","keeps","kept","remain","remains","remained","stay","stays","stayed","turn","turns","turned"],W=["doing","daring","having","appearing","becoming","coming","keeping","remaining","staying","saying","asking","stating","seeming","letting","making","setting","showing","putting","adding","going","using","trying","containing"],R=["in","from","with","under","throughout","atop","for","on","of","to","aboard","about","above","abreast","absent","across","adjacent","after","against","along","alongside","amid","mid","among","apropos","apud","around","as","astride","at","ontop","afore","tofore","behind","ahind","below","ablow","beneath","neath","beside","between","atween","beyond","ayond","by","chez","circa","spite","down","except","into","less","like","minus","near","nearer","nearest","anear","notwithstanding","off","onto","opposite","out","outen","over","past","per","pre","qua","sans","sithence","through","thru","truout","toward","underneath","up","upon","upside","versus","via","vis-à-vis","without","ago","apart","aside","aslant","away","withal","towards","amidst","amongst","midst","whilst"],$=["back","within","forward","backward","ahead"],F=["and","or","and/or","yet"],T=["sooner","just","only"],I=["if","even"],S=["say","says","said","claimed","ask","asks","asked","stated","explain","explains","explained","think","thinks","talks","talked","announces","announced","tells","told","discusses","discussed","suggests","suggested","understands","understood"],C=["again","definitely","eternally","expressively","instead","expressly","immediately","including","instantly","namely","naturally","next","notably","now","nowadays","ordinarily","positively","truly","ultimately","uniquely","usually","almost","maybe","probably","granted","initially","too","actually","already","e.g","i.e","often","regularly","simply","optionally","perhaps","sometimes","likely","never","ever","else","inasmuch","provided","currently","incidentally","elsewhere","particular","recently","relatively","f.i","clearly","apparently"],O=["highly","very","really","extremely","absolutely","completely","totally","utterly","quite","somewhat","seriously","fairly","fully","amazingly"],H=["seem","seems","seemed","let","let's","lets","make","makes","made","want","showed","shown","go","goes","went","gone","take","takes","took","taken","put","puts","use","used","try","tries","tried","mean","means","meant","called","based","add","adds","added","contain","contains","contained","consist","consists","consisted","ensure","ensures","ensured"],A=["new","newer","newest","old","older","oldest","previous","good","well","better","best","big","bigger","biggest","easy","easier","easiest","fast","faster","fastest","far","hard","harder","hardest","least","own","large","larger","largest","long","longer","longest","low","lower","lowest","high","higher","highest","regular","simple","simpler","simplest","small","smaller","smallest","tiny","tinier","tiniest","short","shorter","shortest","main","actual","nice","nicer","nicest","real","same","able","certain","usual","so-called","mainly","mostly","recent","anymore","complete","lately","possible","commonly","constantly","continually","directly","easily","nearly","slightly","somewhere","estimated","latest","different","similar","widely","bad","worse","worst","great","specific","available","average","awful","awesome","basic","beautiful","busy","current","entire","everywhere","important","major","multiple","normal","necessary","obvious","partly","special","last","early","earlier","earliest","young","younger","youngest"],B=["oh","wow","tut-tut","tsk-tsk","ugh","whew","phew","yeah","yea","shh","oops","ouch","aha","yikes"],M=["tbs","tbsp","spk","lb","qt","pk","bu","oz","pt","mod","doz","hr","f.g","ml","dl","cl","l","mg","g","kg","quart"],N=["seconds","minute","minutes","hour","hours","day","days","week","weeks","month","months","year","years","today","tomorrow","yesterday"],U=["thing","things","way","ways","matter","case","likelihood","ones","piece","pieces","stuff","times","part","parts","percent","instance","instances","aspect","aspects","item","items","idea","theme","person","instance","instances","detail","details","factor","factors","difference","differences"],V=["not","yes","sure","top","bottom","ok","okay","amen","aka","etc","etcetera","sorry","please"],_=["jr","sr"],D=(u([].concat(h,W,A)),u([].concat(l,R,F,f,O,b,g)),u([].concat(o,P,p,m,w,B,c,i,L,E,S,H,y,T,I,z,k,x,j,V,$,q,M,N,U)),u([].concat(l,R,f,g,h,W,b))),J=u([].concat(L,E,S,H)),G=(u([].concat(l,c,h,f,g,w,p,m,b,y,W,v,z,k,x,q,j,P,$,i,a,L,E,R,F,T,I,S,o,C,O,H,B,A,M,V,_)),u([].concat(l,c,h,f,g,w,p,m,b,y,W,v,z,k,x,q,j,P,$,i,a,L,E,R,F,T,I,S,o,C,O,H,B,A,M,U,V,N,["ms","mss","mrs","mr","dr","prof"],_))),K=["to","which","who","whom","that","whose","after","although","as","because","before","even if","even though","if","in order that","inasmuch","lest","once","provided","since","so that","than","though","till","unless","until","when","whenever","where","whereas","wherever","whether","while","why","by the time","supposing","no matter","how","what","won't","do","does","–","and","but","or"],Q=[["both","and"],["if","then"],["not only","but also"],["neither","nor"],["either","or"],["not","but"],["whether","or"],["no sooner","than"]],X=JSON.parse('{"vowels":"aeiouy","deviations":{"vowels":[{"fragments":["cial","tia","cius","giu","ion","[^bdnprv]iou","sia$","[^aeiuot]{2,}ed$","[aeiouy][^aeiuoyts]{1,}e$","[a-z]ely$","[cgy]ed$","rved$","[aeiouy][dt]es?$","eau","ieu","oeu","[aeiouy][^aeiouydt]e[sd]?$","[aeouy]rse$","^eye"],"countModifier":-1},{"fragments":["ia","iu","ii","io","[aeio][aeiou]{2}","[aeiou]ing","[^aeiou]ying","ui[aeou]"],"countModifier":1},{"fragments":["^ree[jmnpqrsx]","^reele","^reeva","riet","dien","[aeiouym][bdp]le$","uei","uou","^mc","ism$","[^l]lien","^coa[dglx].","[^gqauieo]ua[^auieo]","dn\'t$","uity$","ie(r|st)","[aeiouw]y[aeiou]","[^ao]ire[ds]","[^ao]ire$"],"countModifier":1},{"fragments":["eoa","eoo","ioa","ioe","ioo"],"countModifier":1}],"words":{"full":[{"word":"business","syllables":2},{"word":"coheiress","syllables":3},{"word":"colonel","syllables":2},{"word":"heiress","syllables":2},{"word":"i.e","syllables":2},{"word":"shoreline","syllables":2},{"word":"simile","syllables":3},{"word":"unheired","syllables":2},{"word":"wednesday","syllables":2}],"fragments":{"global":[{"word":"coyote","syllables":3},{"word":"graveyard","syllables":2},{"word":"lawyer","syllables":2}]}}}}'),Y=window.lodash,Z=["ablebodied","abovementioned","absentminded","accoladed","accompanied","acculturized","accursed","acerated","acerbated","acetylized","achromatised","achromatized","acidified","acned","actualised","adrenalised","adulated","adversed","aestheticised","affectioned","affined","affricated","aforementioned","agerelated","aggrieved","airbed","aircooled","airspeed","alcoholized","alcoved","alkalised","allianced","aluminized","alveolated","ambered","ammonified","amplified","anagrammatised","anagrammatized","anathematised","aniseed","ankled","annualized","anonymised","anthologized","antlered","anucleated","anviled","anvilshaped","apostrophised","apostrophized","appliqued","apprized","arbitrated","armored","articled","ashamed","assented","atomised","atrophied","auricled","auriculated","aurified","autopsied","axled","babied","backhoed","badmannered","badtempered","balustered","baned","barcoded","bareboned","barefooted","barelegged","barnacled","based","bayoneted","beadyeyed","beaked","beaned","beatified","beautified","beavered","bed","bedamned","bedecked","behoved","belated","bellbottomed","bellshaped","benighted","bequeathed","berried","bespectacled","bewhiskered","bighearted","bigmouthed","bigoted","bindweed","binucleated","biopsied","bioturbed","biped","bipinnated","birdfeed","birdseed","bisegmented","bitterhearted","blabbermouthed","blackhearted","bladed","blankminded","blearyeyed","bleed","blissed","blobbed","blondhaired","bloodied","bloodred","bloodshed","blueblooded","boatshaped","bobsled","bodied","boldhearted","boogied","boosed","bosomed","bottlefed","bottlefeed","bottlenecked","bouldered","bowlegged","bowlshaped","brandied","bravehearted","breastfed","breastfeed","breed","brighteyed","brindled","broadhearted","broadleaved","broadminded","brokenhearted","broomed","broomweed","buccaned","buckskinned","bucktoothed","buddied","buffaloed","bugeyed","bugleweed","bugweed","bulletined","bunked","busied","butterfingered","cabbed","caddied","cairned","calcified","canalized","candied","cannulated","canoed","canopied","canvased","caped","capsulated","cassocked","castellated","catabolised","catheterised","caudated","cellmediated","cellulosed","certified","chagrined","chambered","chested","chevroned","chickenfeed","chickenhearted","chickweed","chilblained","childbed","chinned","chromatographed","ciliated","cindered","cingulated","circumstanced","cisgendered","citrullinated","clappered","clarified","classified","clawshaped","claysized","cleanhearted","clearminded","clearsighted","cliched","clodded","cloistered","closefisted","closehearted","closelipped","closemouthed","closeted","cloudseed","clubfooted","clubshaped","clued","cockeyed","codified","coed","coevolved","coffined","coiffed","coinfected","coldblooded","coldhearted","collateralised","colonialised","colorcoded","colorised","colourised","columned","commoditized","compactified","companioned","complexioned","conceited","concerned","concussed","coneshaped","congested","contented","convexed","coralled","corymbed","cottonseed","countrified","countrybred","courtmartialled","coved","coveralled","cowshed","cozied","cragged","crayoned","credentialed","creed","crenulated","crescentshaped","cressweed","crewed","cricked","crispated","crossbarred","crossbed","crossbred","crossbreed","crossclassified","crosseyed","crossfertilised","crossfertilized","crossindexed","crosslegged","crossshaped","crossstratified","crossstriated","crotched","crucified","cruelhearted","crutched","cubeshaped","cubified","cuckolded","cucumbershaped","cumbered","cuminseed","cupshaped","curated","curded","curfewed","curlicued","curlycued","curried","curtsied","cyclized","cylindershaped","damed","dandified","dangered","darkhearted","daybed","daylighted","deacidified","deacylated","deadhearted","deadlined","deaminized","deathbed","decalcified","decertified","deckbed","declassified","declutched","decolourated","decreed","deed","deeprooted","deepseated","defensed","defied","deflexed","deglamorised","degunkified","dehumidified","deified","deled","delegitimised","demoded","demystified","denasalized","denazified","denied","denitrified","denticulated","deseed","desexualised","desposited","detoxified","deuced","devitrified","dewlapped","dezincified","diagonalised","dialogued","died","digitated","dignified","dilled","dimwitted","diphthonged","disaffected","disaggregated","disarrayed","discalced","discolorated","discolourated","discshaped","diseased","disembodied","disencumbered","disfranchised","diskshaped","disproportionated","disproportioned","disqualified","distempered","districted","diversified","diverticulated","divested","divvied","dizzied","dogged","dogsbodied","dogsled","domeshaped","domiciled","dormered","doublebarrelled","doublestranded","doublewalled","downhearted","duckbilled","eared","echeloned","eddied","edified","eggshaped","elasticated","electrified","elegized","embed","embodied","emceed","empaneled","empanelled","emptyhearted","emulsified","engined","ennobled","envied","enzymecatalysed","enzymecatalyzed","epitomised","epoxidized","epoxied","etherised","etherized","evilhearted","evilminded","exceed","excited","exemplified","exponentiated","expurgated","extravasated","extraverted","extroverted","fabled","facelifted","facsimiled","fainthearted","falcated","falsehearted","falsified","famed","fancified","fanged","fanshaped","fantasied","farsighted","fated","fatted","fazed","featherbed","fed","federalized","feeblehearted","feebleminded","feeblewitted","feed","fendered","fenestrated","ferried","fevered","fibered","fibred","ficklehearted","fiercehearted","figged","filigreed","filterfeed","fireweed","firmhearted","fissured","flanged","flanneled","flannelled","flatbed","flatfooted","flatted","flawed","flaxenhaired","flaxseed","flaxweed","flighted","floodgenerated","flowerbed","fluidised","fluidized","flurried","fobbed","fonded","forcefeed","foreshortened","foresighted","forkshaped","formfeed","fortified","fortressed","foulmouthed","foureyed","foxtailed","fractionalised","fractionalized","frankhearted","freed","freehearted","freespirited","frenzied","friezed","frontiered","fructified","frumped","fullblooded","fullbodied","fullfledged","fullhearted","funnelshaped","furnaced","gaitered","galleried","gangliated","ganglionated","gangrened","gargoyled","gasified","gaunted","gauntleted","gauzed","gavelled","gelatinised","gemmed","genderized","gentled","gentlehearted","gerrymandered","gladhearted","glamored","globed","gloried","glorified","glycosylated","goateed","gobletshaped","godspeed","goodhearted","goodhumored","goodhumoured","goodnatured","goodtempered","goosed","goosenecked","goutweed","grainfed","grammaticalized","grapeseed","gratified","graved","gravelbed","grayhaired","greathearted","greed","greenweed","grommeted","groundspeed","groved","gruffed","guiled","gulled","gumshoed","gunkholed","gussied","guyed","gyrostabilized","hackneyed","hagged","haired","halfcivilized","halfhearted","halfwitted","haloed","handballed","handfed","handfeed","hardcoded","hardhearted","hardnosed","hared","harelipped","hasted","hatred","haunched","hawkeyed","hayseed","hayweed","hearsed","hearted","heartshaped","heavenlyminded","heavyfooted","heavyhearted","heed","heired","heisted","helicoptered","helmed","helmeted","hemagglutinated","hemolyzed","hempseed","hempweed","heparinised","heparinized","herbed","highheeled","highminded","highpriced","highspeed","highspirited","hilled","hipped","hispanicised","hocked","hoed","hogweed","holstered","homaged","hoodooed","hoofed","hooknosed","hooved","horned","horrified","horseshoed","horseweed","hotbed","hotblooded","hothearted","hotted","hottempered","hued","humansized","humidified","humped","hundred","hutched","hyperinflated","hyperpigmented","hyperstimulated","hypertrophied","hyphened","hypophysectomised","hypophysectomized","hypopigmented","hypostatised","hysterectomized","iconified","iconised","iconized","ideologised","illbred","illconceived","illdefined","illdisposed","illequipped","illfated","illfavored","illfavoured","illflavored","illfurnished","illhumored","illhumoured","illimited","illmannered","illnatured","illomened","illproportioned","illqualified","illscented","illtempered","illumed","illusioned","imbed","imbossed","imbued","immatured","impassioned","impenetrated","imperfected","imperialised","imperturbed","impowered","imputed","inarticulated","inbred","inbreed","incapsulated","incased","incrustated","incrusted","indebted","indeed","indemnified","indentured","indigested","indisposed","inexperienced","infrared","intensified","intentioned","interbedded","interbred","interbreed","interluded","introverted","inured","inventoried","iodinated","iodised","irked","ironfisted","ironweed","itchweed","ivied","ivyweed","jagged","jellified","jerseyed","jetlagged","jetpropelled","jeweled","jewelled","jewelweed","jiggered","jimmyweed","jimsonweed","jointweed","joyweed","jungled","juried","justiceweed","justified","karstified","kerchiefed","kettleshaped","kibbled","kidneyshaped","kimonoed","kindhearted","kindred","kingsized","kirtled","knacked","knapweed","kneed","knobbed","knobweed","knopweed","knotweed","lakebed","lakeweed","lamed","lamellated","lanceshaped","lanceted","landbased","lapeled","lapelled","largehearted","lariated","lased","latticed","lauded","lavaged","lavendered","lawned","led","lefteyed","legitimatised","legitimatized","leisured","lensshaped","leveed","levied","lichened","lichenized","lidded","lifesized","lightfingered","lightfooted","lighthearted","lightminded","lightspeed","lignified","likeminded","lilylivered","limbed","linearised","linearized","linefeed","linseed","lionhearted","liquefied","liquified","lithified","liveried","lobbied","located","locoweed","longarmed","longhaired","longhorned","longlegged","longnecked","longsighted","longwinded","lopsided","loudmouthed","louvered","louvred","lowbred","lowpriced","lowspirited","lozenged","lunated","lyrated","lysinated","maced","macroaggregated","macrodissected","maculated","madweed","magnified","maidenweed","maladapted","maladjusted","malnourished","malrotated","maned","mannered","manuevered","manyhued","manyshaped","manysided","masted","mealymouthed","meanspirited","membered","membraned","metaled","metalized","metallised","metallized","metamerized","metathesized","meted","methylated","mettled","microbrecciated","microminiaturized","microstratified","middleaged","midsized","miffed","mildhearted","milkweed","miniskirted","misactivated","misaligned","mischiefed","misclassified","misdeed","misdemeaned","mismannered","misnomered","misproportioned","miswired","mitred","mitted","mittened","moneyed","monocled","mononucleated","monospaced","monotoned","monounsaturated","mortified","moseyed","motorised","motorized","moussed","moustached","muddied","mugweed","multiarmed","multibarreled","multibladed","multicelled","multichambered","multichanneled","multichannelled","multicoated","multidirected","multiengined","multifaceted","multilaminated","multilaned","multilayered","multilobed","multilobulated","multinucleated","multipronged","multisegmented","multisided","multispeed","multistemmed","multistoried","multitalented","multitoned","multitowered","multivalued","mummied","mummified","mustached","mustachioed","mutinied","myelinated","mystified","mythicised","naked","narcotised","narrowminded","natured","neaped","nearsighted","necrosed","nectared","need","needleshaped","newfangled","newlywed","nibbed","nimblewitted","nippled","nixed","nobled","noduled","noised","nonaccented","nonactivated","nonadsorbed","nonadulterated","nonaerated","nonaffiliated","nonaliased","nonalienated","nonaligned","nonarchived","nonarmored","nonassociated","nonattenuated","nonblackened","nonbreastfed","nonbrecciated","nonbuffered","nonbuttered","noncarbonated","noncarbonized","noncatalogued","noncatalyzed","noncategorized","noncertified","nonchlorinated","nonciliated","noncircumcised","noncivilized","nonclassified","noncoated","noncodified","noncoerced","noncommercialized","noncommissioned","noncompacted","noncompiled","noncomplicated","noncomposed","noncomputed","noncomputerized","nonconcerted","nonconditioned","nonconfirmed","noncongested","nonconjugated","noncooled","noncorrugated","noncoupled","noncreated","noncrowded","noncultured","noncurated","noncushioned","nondecoded","nondecomposed","nondedicated","nondeferred","nondeflated","nondegenerated","nondegraded","nondelegated","nondelimited","nondelineated","nondemarcated","nondeodorized","nondeployed","nonderivatized","nonderived","nondetached","nondetailed","nondifferentiated","nondigested","nondigitized","nondilapidated","nondilated","nondimensionalised","nondimensionalized","nondirected","nondisabled","nondisciplined","nondispersed","nondisputed","nondisqualified","nondisrupted","nondisseminated","nondissipated","nondissolved","nondistressed","nondistributed","nondiversified","nondiverted","nondocumented","nondomesticated","nondoped","nondrafted","nondrugged","nondubbed","nonducted","nonearthed","noneclipsed","nonedged","nonedited","nonelasticized","nonelectrified","nonelectroplated","nonelectroporated","nonelevated","noneliminated","nonelongated","nonembedded","nonembodied","nonemphasized","nonencapsulated","nonencoded","nonencrypted","nonendangered","nonengraved","nonenlarged","nonenriched","nonentangled","nonentrenched","nonepithelized","nonequilibrated","nonestablished","nonetched","nonethoxylated","nonethylated","nonetiolated","nonexaggerated","nonexcavated","nonexhausted","nonexperienced","nonexpired","nonfabricated","nonfalsified","nonfeathered","nonfeatured","nonfed","nonfederated","nonfeed","nonfenestrated","nonfertilized","nonfilamented","nonfinanced","nonfinished","nonfinned","nonfissured","nonflagellated","nonflagged","nonflared","nonflavored","nonfluidized","nonfluorinated","nonfluted","nonforested","nonformalized","nonformatted","nonfragmented","nonfragranced","nonfranchised","nonfreckled","nonfueled","nonfumigated","nonfunctionalized","nonfunded","nongalvanized","nongated","nongelatinized","nongendered","nongeneralized","nongenerated","nongifted","nonglazed","nonglucosated","nonglucosylated","nonglycerinated","nongraded","nongrounded","nonhalogenated","nonhandicapped","nonhospitalised","nonhospitalized","nonhydrated","nonincorporated","nonindexed","noninfected","noninfested","noninitialized","noninitiated","noninoculated","noninseminated","noninstitutionalized","noninsured","nonintensified","noninterlaced","noninterpreted","nonintroverted","noninvestigated","noninvolved","nonirrigated","nonisolated","nonisomerized","nonissued","nonitalicized","nonitemized","noniterated","nonjaded","nonlabelled","nonlaminated","nonlateralized","nonlayered","nonlegalized","nonlegislated","nonlesioned","nonlexicalized","nonliberated","nonlichenized","nonlighted","nonlignified","nonlimited","nonlinearized","nonlinked","nonlobed","nonlobotomized","nonlocalized","nonlysed","nonmachined","nonmalnourished","nonmandated","nonmarginalized","nonmassaged","nonmatriculated","nonmatted","nonmatured","nonmechanized","nonmedicated","nonmedullated","nonmentioned","nonmetabolized","nonmetallized","nonmetastasized","nonmetered","nonmethoxylated","nonmilled","nonmineralized","nonmirrored","nonmodeled","nonmoderated","nonmodified","nonmonetized","nonmonitored","nonmortgaged","nonmotorized","nonmottled","nonmounted","nonmultithreaded","nonmutilated","nonmyelinated","nonnormalized","nonnucleated","nonobjectified","nonobligated","nonoccupied","nonoiled","nonopinionated","nonoxygenated","nonpaginated","nonpaired","nonparalyzed","nonparameterized","nonparasitized","nonpasteurized","nonpatterned","nonphased","nonphosphatized","nonphosphorized","nonpierced","nonpigmented","nonpiloted","nonpipelined","nonpitted","nonplussed","nonpuffed","nonrandomized","nonrated","nonrefined","nonregistered","nonregulated","nonrelated","nonretarded","nonsacred","nonsalaried","nonsanctioned","nonsaturated","nonscented","nonscheduled","nonseasoned","nonsecluded","nonsegmented","nonsegregated","nonselected","nonsolidified","nonspecialized","nonspored","nonstandardised","nonstandardized","nonstratified","nonstressed","nonstriated","nonstriped","nonstructured","nonstylised","nonstylized","nonsubmerged","nonsubscripted","nonsubsidised","nonsubsidized","nonsubstituted","nonsyndicated","nonsynthesised","nontabulated","nontalented","nonthreaded","nontinted","nontolerated","nontranslated","nontunnelled","nonunified","nonunionised","nonupholstered","nonutilised","nonutilized","nonvalued","nonvaried","nonverbalized","nonvitrified","nonvolatilised","nonvolatilized","normed","nosebleed","notated","notified","nuanced","nullified","numerated","oarweed","objectified","obliqued","obtunded","occupied","octupled","odored","oilseed","oinked","oldfashioned","onesided","oophorectomized","opaqued","openhearted","openminded","openmouthed","opiated","opinionated","oracled","oreweed","ossified","outbreed","outmoded","outrigged","outriggered","outsized","outskated","outspeed","outtopped","outtrumped","outvoiced","outweed","ovated","overadorned","overaged","overalled","overassured","overbred","overbreed","overcomplicated","overdamped","overdetailed","overdiversified","overdyed","overequipped","overfatigued","overfed","overfeed","overindebted","overintensified","overinventoried","overmagnified","overmodified","overpreoccupied","overprivileged","overproportionated","overqualified","overseed","oversexed","oversimplified","oversized","oversophisticated","overstudied","oversulfated","ovicelled","ovoidshaped","ozonated","pacified","packeted","palatalized","paled","palsied","paned","panicled","parabled","parallelepiped","parallelized","parallelopiped","parenthesised","parodied","parqueted","passioned","paunched","pauperised","pedigreed","pedimented","pedunculated","pegged","peglegged","penanced","pencilshaped","permineralized","personified","petrified","photodissociated","photoduplicated","photoed","photoinduced","photolysed","photolyzed","pied","pigeoned","pigtailed","pigweed","pilastered","pillared","pilloried","pimpled","pinealectomised","pinealectomized","pinfeathered","pinnacled","pinstriped","pixellated","pixilated","pixillated","plainclothed","plantarflexed","pled","plumaged","pocked","pokeweed","polychlorinated","polyunsaturated","ponytailed","pooched","poorspirited","popeyed","poppyseed","porcelainized","porched","poshed","pottered","poxed","preachified","precertified","preclassified","preconized","preinoculated","premed","prenotified","preoccupied","preposed","prequalified","preshaped","presignified","prespecified","prettified","pried","principled","proceed","prophesied","propounded","prosed","protonated","proudhearted","proxied","pulpified","pumpkinseed","puppied","purebred","pured","pureed","purified","pustuled","putrefied","pyjamaed","quadruped","qualified","quantified","quantised","quantized","quarried","queried","questoned","quicktempered","quickwitted","quiesced","quietened","quizzified","racemed","radiosensitised","ragweed","raindrenched","ramped","rapeseed","rarefied","rarified","ratified","razoredged","reaccelerated","reaccompanied","reachieved","reacknowledged","readdicted","readied","reamplified","reannealed","reassociated","rebadged","rebiopsied","recabled","recategorised","receipted","recentred","recertified","rechoreographed","reclarified","reclassified","reconferred","recrystalized","rectified","recursed","red","redblooded","redefied","redenied","rednecked","redshifted","redweed","redyed","reed","reembodied","reenlighted","refeed","refereed","reflexed","refortified","refronted","refuged","reglorified","reimpregnated","reinitialized","rejustified","related","reliquefied","remedied","remodified","remonetized","remythologized","renotified","renullified","renumerated","reoccupied","repacified","repurified","reputed","requalified","rescinded","reseed","reshoed","resolidified","resorbed","respecified","restudied","retabulated","reticulated","retinted","retreed","retroacted","reunified","reverified","revested","revivified","rewed","ridgepoled","riffled","rightminded","rigidified","rinded","riped","rited","ritualised","riverbed","rivered","roached","roadbed","robotised","robotized","romanized","rosetted","rosined","roughhearted","rubied","ruddied","runcinated","russeted","sabled","sabred","sabretoothed","sacheted","sacred","saddlebred","sainted","salaried","samoyed","sanctified","satellited","savvied","sawtoothed","scandalled","scarified","scarped","sceptred","scissored","screed","screwshaped","scrupled","sculked","scurried","scuttled","seabed","seaweed","seed","seedbed","selfassured","selforganized","semicivilized","semidetached","semidisassembled","semidomesticated","semipetrified","semipronated","semirefined","semivitrified","sentineled","sepaled","sepalled","sequinned","sexed","shagged","shaggycoated","shaggyhaired","shaled","shammed","sharpangled","sharpclawed","sharpcornered","sharpeared","sharpedged","sharpeyed","sharpflavored","sharplimbed","sharpnosed","sharpsighted","sharptailed","sharptongued","sharptoothed","sharpwitted","sharpworded","shed","shellbed","shieldshaped","shimmied","shinned","shirted","shirtsleeved","shoed","shortbeaked","shortbilled","shortbodied","shorthaired","shortlegged","shortlimbed","shortnecked","shortnosed","shortsighted","shortsleeved","shortsnouted","shortstaffed","shorttailed","shorttempered","shorttoed","shorttongued","shortwinded","shortwinged","shotted","shred","shrewsized","shrined","shrinkproofed","sickbed","sickleshaped","sickleweed","signalised","signified","silicified","siliconized","silkweed","siltsized","silvertongued","simpleminded","simplified","singlebarreled","singlebarrelled","singlebed","singlebladed","singlebreasted","singlecelled","singlefooted","singlelayered","singleminded","singleseeded","singleshelled","singlestranded","singlevalued","sissified","sistered","sixgilled","sixmembered","sixsided","sixstoried","skulled","slickered","slipcased","slowpaced","slowwitted","slurried","smallminded","smoothened","smoothtongued","snaggletoothed","snouted","snowballed","snowcapped","snowshed","snowshoed","snubnosed","so-called","sofabed","softhearted","sogged","soled","solidified","soliped","sorbed","souled","spearshaped","specified","spectacled","sped","speeched","speechified","speed","spied","spiffied","spindleshaped","spiritualised","spirted","splayfooted","spoonfed","spoonfeed","spoonshaped","spreadeagled","squarejawed","squareshaped","squareshouldered","squaretoed","squeegeed","staled","starshaped","starspangled","starstudded","statechartered","statesponsored","statued","steadied","steampowered","steed","steelhearted","steepled","sterned","stiffnecked","stilettoed","stimied","stinkweed","stirrupshaped","stockinged","storeyed","storied","stouthearted","straitlaced","stratified","strawberryflavored","streambed","stressinduced","stretchered","strictured","strongbodied","strongboned","strongflavored","stronghearted","stronglimbed","strongminded","strongscented","strongwilled","stubbled","studied","stultified","stupefied","styed","stymied","subclassified","subcommissioned","subminiaturised","subsaturated","subulated","suburbanised","suburbanized","suburbed","succeed","sueded","sugarrelated","sulfurized","sunbed","superhardened","superinfected","supersimplified","surefooted","sweetscented","swifted","swordshaped","syllabified","syphilized","tabularized","talented","tarpapered","tautomerized","teated","teed","teenaged","teetotaled","tenderhearted","tentacled","tenured","termed","ternated","testbed","testified","theatricalised","theatricalized","themed","thicketed","thickskinned","thickwalled","thighed","thimbled","thimblewitted","thonged","thoroughbred","thralled","threated","throated","throughbred","thyroidectomised","thyroidectomized","tiaraed","ticktocked","tidied","tightassed","tightfisted","tightlipped","timehonoured","tindered","tined","tinselled","tippytoed","tiptoed","titled","toed","tomahawked","tonged","toolshed","toothplated","toplighted","torchlighted","toughhearted","traditionalized","trajected","tranced","transgendered","transliterated","translocated","transmogrified","treadled","treed","treelined","tressed","trialled","triangled","trifoliated","trifoliolated","trilobed","trucklebed","truehearted","trumpetshaped","trumpetweed","tuberculated","tumbleweed","tunnelshaped","turbaned","turreted","turtlenecked","tuskshaped","tweed","twigged","typified","ulcered","ultracivilised","ultracivilized","ultracooled","ultradignified","ultradispersed","ultrafiltered","ultrared","ultrasimplified","ultrasophisticated","unabandoned","unabashed","unabbreviated","unabetted","unabolished","unaborted","unabraded","unabridged","unabsolved","unabsorbed","unaccelerated","unaccented","unaccentuated","unacclimatised","unacclimatized","unaccompanied","unaccomplished","unaccosted","unaccredited","unaccrued","unaccumulated","unaccustomed","unacidulated","unacquainted","unacquitted","unactivated","unactuated","unadapted","unaddicted","unadjourned","unadjudicated","unadjusted","unadmonished","unadopted","unadored","unadorned","unadsorbed","unadulterated","unadvertised","unaerated","unaffiliated","unaggregated","unagitated","unaimed","unaired","unaliased","unalienated","unaligned","unallocated","unalloyed","unalphabetized","unamassed","unamortized","unamplified","unanaesthetised","unanaesthetized","unaneled","unanesthetised","unanesthetized","unangered","unannealed","unannexed","unannihilated","unannotated","unanointed","unanticipated","unappareled","unappendaged","unapportioned","unapprenticed","unapproached","unappropriated","unarbitrated","unarched","unarchived","unarmored","unarmoured","unarticulated","unascertained","unashamed","unaspirated","unassembled","unasserted","unassessed","unassociated","unassorted","unassuaged","unastonished","unastounded","unatoned","unattained","unattainted","unattenuated","unattributed","unauctioned","unaudited","unauthenticated","unautographed","unaverted","unawaked","unawakened","unawarded","unawed","unbaffled","unbaited","unbalconied","unbanded","unbanished","unbaptised","unbaptized","unbarreled","unbarrelled","unbattered","unbeaded","unbearded","unbeneficed","unbesotted","unbetrayed","unbetrothed","unbiased","unbiassed","unbigoted","unbilled","unblackened","unblanketed","unblasphemed","unblazoned","unblistered","unblockaded","unbloodied","unbodied","unbonded","unbothered","unbounded","unbracketed","unbranded","unbreaded","unbrewed","unbridged","unbridled","unbroached","unbudgeted","unbuffed","unbuffered","unburnished","unbutchered","unbuttered","uncached","uncaked","uncalcified","uncalibrated","uncamouflaged","uncamphorated","uncanceled","uncancelled","uncapitalized","uncarbonated","uncarpeted","uncased","uncashed","uncastrated","uncatalogued","uncatalysed","uncatalyzed","uncategorised","uncatered","uncaulked","uncelebrated","uncensored","uncensured","uncertified","unchambered","unchanneled","unchannelled","unchaperoned","uncharacterized","uncharted","unchartered","unchastened","unchastised","unchelated","uncherished","unchilled","unchristened","unchronicled","uncircumcised","uncircumscribed","uncited","uncivilised","uncivilized","unclarified","unclassed","unclassified","uncleaved","unclimbed","unclustered","uncluttered","uncoagulated","uncoded","uncodified","uncoerced","uncoined","uncollapsed","uncollated","uncolonised","uncolonized","uncolumned","uncombined","uncommented","uncommercialised","uncommercialized","uncommissioned","uncommitted","uncompacted","uncompartmentalized","uncompartmented","uncompensated","uncompiled","uncomplicated","uncompounded","uncomprehened","uncomputed","unconcealed","unconceded","unconcluded","uncondensed","unconditioned","unconfined","unconfirmed","uncongested","unconglomerated","uncongratulated","unconjugated","unconquered","unconsecrated","unconsoled","unconsolidated","unconstipated","unconstricted","unconstructed","unconsumed","uncontacted","uncontracted","uncontradicted","uncontrived","unconverted","unconveyed","unconvicted","uncooked","uncooled","uncoordinated","uncopyrighted","uncored","uncorrelated","uncorroborated","uncosted","uncounseled","uncounselled","uncounterfeited","uncoveted","uncrafted","uncramped","uncrannied","uncrazed","uncreamed","uncreased","uncreated","uncredentialled","uncredited","uncrested","uncrevassed","uncrippled","uncriticised","uncriticized","uncropped","uncrosslinked","uncrowded","uncrucified","uncrumbled","uncrystalized","uncrystallised","uncrystallized","uncubed","uncuddled","uncued","unculled","uncultivated","uncultured","uncupped","uncurated","uncurbed","uncurried","uncurtained","uncushioned","undamped","undampened","undappled","undarkened","undated","undaubed","undazzled","undeadened","undeafened","undebated","undebunked","undeceased","undecimalized","undeciphered","undecked","undeclared","undecomposed","undeconstructed","undedicated","undefeated","undeferred","undefied","undefined","undeflected","undefrauded","undefrayed","undegassed","undejected","undelegated","undeleted","undelimited","undelineated","undemented","undemolished","undemonstrated","undenatured","undenied","undented","undeodorized","undepicted","undeputized","underaged","underarmed","underassessed","underbred","underbudgeted","undercapitalised","undercapitalized","underdiagnosed","underdocumented","underequipped","underexploited","underexplored","underfed","underfeed","underfurnished","undergoverned","undergrazed","underinflated","underinsured","underinvested","underived","undermaintained","undermentioned","undermotivated","underperceived","underpowered","underprivileged","underqualified","underrehearsed","underresourced","underripened","undersaturated","undersexed","undersized","underspecified","understaffed","understocked","understressed","understudied","underutilised","underventilated","undescaled","undesignated","undetached","undetailed","undetained","undeteriorated","undeterred","undetonated","undevised","undevoted","undevoured","undiagnosed","undialed","undialysed","undialyzed","undiapered","undiffracted","undigested","undignified","undiluted","undiminished","undimmed","undipped","undirected","undisciplined","undiscouraged","undiscussed","undisfigured","undisguised","undisinfected","undismayed","undisposed","undisproved","undisputed","undisrupted","undissembled","undissipated","undissociated","undissolved","undistilled","undistorted","undistracted","undistributed","undisturbed","undiversified","undiverted","undivulged","undoctored","undocumented","undomesticated","undosed","undramatised","undrilled","undrugged","undubbed","unduplicated","uneclipsed","unedged","unedited","unejaculated","unejected","unelaborated","unelapsed","unelected","unelectrified","unelevated","unelongated","unelucidated","unemaciated","unemancipated","unemasculated","unembalmed","unembed","unembellished","unembodied","unemboldened","unemerged","unenacted","unencoded","unencrypted","unencumbered","unendangered","unendorsed","unenergized","unenfranchised","unengraved","unenhanced","unenlarged","unenlivened","unenraptured","unenriched","unentangled","unentitled","unentombed","unentranced","unentwined","unenumerated","unenveloped","unenvied","unequaled","unequalised","unequalized","unequalled","unequipped","unerased","unerected","uneroded","unerupted","unescorted","unestablished","unevaluated","unexaggerated","unexampled","unexcavated","unexceeded","unexcelled","unexecuted","unexerted","unexhausted","unexpensed","unexperienced","unexpired","unexploited","unexplored","unexposed","unexpurgated","unextinguished","unfabricated","unfaceted","unfanned","unfashioned","unfathered","unfathomed","unfattened","unfavored","unfavoured","unfazed","unfeathered","unfed","unfeigned","unfermented","unfertilised","unfertilized","unfilleted","unfiltered","unfinished","unflavored","unflavoured","unflawed","unfledged","unfleshed","unflurried","unflushed","unflustered","unfluted","unfocussed","unforested","unformatted","unformulated","unfortified","unfractionated","unfractured","unfragmented","unfrequented","unfretted","unfrosted","unfueled","unfunded","unfurnished","ungarbed","ungarmented","ungarnished","ungeared","ungerminated","ungifted","unglazed","ungoverned","ungraded","ungrasped","ungratified","ungroomed","ungrounded","ungrouped","ungummed","ungusseted","unhabituated","unhampered","unhandicapped","unhardened","unharvested","unhasped","unhatched","unheralded","unhindered","unhomogenised","unhomogenized","unhonored","unhonoured","unhooded","unhusked","unhyphenated","unified","unillustrated","unimpacted","unimpaired","unimpassioned","unimpeached","unimpelled","unimplemented","unimpregnated","unimprisoned","unimpugned","unincorporated","unincubated","unincumbered","unindemnified","unindexed","unindicted","unindorsed","uninduced","unindustrialised","unindustrialized","uninebriated","uninfected","uninflated","uninflected","uninhabited","uninhibited","uninitialised","uninitialized","uninitiated","uninoculated","uninseminated","uninsulated","uninsured","uninterpreted","unintimidated","unintoxicated","unintroverted","uninucleated","uninverted","uninvested","uninvolved","unissued","unjaundiced","unjointed","unjustified","unkeyed","unkindled","unlabelled","unlacquered","unlamented","unlaminated","unlarded","unlaureled","unlaurelled","unleaded","unleavened","unled","unlettered","unlicenced","unlighted","unlimbered","unlimited","unlined","unlipped","unliquidated","unlithified","unlittered","unliveried","unlobed","unlocalised","unlocalized","unlocated","unlogged","unlubricated","unmagnified","unmailed","unmaimed","unmaintained","unmalted","unmangled","unmanifested","unmanipulated","unmannered","unmanufactured","unmapped","unmarred","unmastered","unmatriculated","unmechanised","unmechanized","unmediated","unmedicated","unmentioned","unmerged","unmerited","unmetabolised","unmetabolized","unmetamorphosed","unmethylated","unmineralized","unmitigated","unmoderated","unmodernised","unmodernized","unmodified","unmodulated","unmolded","unmolested","unmonitored","unmortgaged","unmotivated","unmotorised","unmotorized","unmounted","unmutated","unmutilated","unmyelinated","unnaturalised","unnaturalized","unnotched","unnourished","unobligated","unobstructed","unoccupied","unoiled","unopposed","unoptimised","unordained","unorganised","unorganized","unoriented","unoriginated","unornamented","unoxidized","unoxygenated","unpacified","unpackaged","unpaired","unparalleled","unparallelled","unparasitized","unpardoned","unparodied","unpartitioned","unpasteurised","unpasteurized","unpatented","unpaved","unpedigreed","unpenetrated","unpenned","unperfected","unperjured","unpersonalised","unpersuaded","unperturbed","unperverted","unpestered","unphosphorylated","unphotographed","unpigmented","unpiloted","unpledged","unploughed","unplumbed","unpoised","unpolarized","unpoliced","unpolled","unpopulated","unposed","unpowered","unprecedented","unpredicted","unprejudiced","unpremeditated","unprescribed","unpressurised","unpressurized","unpriced","unprimed","unprincipled","unprivileged","unprized","unprocessed","unprofaned","unprofessed","unprohibited","unprompted","unpronounced","unproposed","unprospected","unproved","unpruned","unpublicised","unpublicized","unpublished","unpuckered","unpunctuated","unpurified","unqualified","unquantified","unquenched","unquoted","unranked","unrated","unratified","unrebuked","unreckoned","unrecompensed","unreconciled","unreconstructed","unrectified","unredeemed","unrefined","unrefreshed","unrefrigerated","unregarded","unregimented","unregistered","unregulated","unrehearsed","unrelated","unrelieved","unrelinquished","unrenewed","unrented","unrepealed","unreplicated","unreprimanded","unrequited","unrespected","unrestricted","unretained","unretarded","unrevised","unrevived","unrevoked","unrifled","unripened","unrivaled","unrivalled","unroasted","unroofed","unrounded","unruffled","unsalaried","unsalted","unsanctified","unsanctioned","unsanded","unsaponified","unsated","unsatiated","unsatisfied","unsaturated","unscaled","unscarred","unscathed","unscented","unscheduled","unschooled","unscreened","unscripted","unseamed","unseared","unseasoned","unseeded","unsegmented","unsegregated","unselected","unserviced","unsexed","unshamed","unshaped","unsharpened","unsheared","unshielded","unshifted","unshirted","unshoed","unshuttered","unsifted","unsighted","unsilenced","unsimplified","unsized","unskewed","unskinned","unslaked","unsliced","unsloped","unsmoothed","unsoiled","unsoldered","unsolicited","unsolved","unsophisticated","unsorted","unsourced","unsoured","unspaced","unspanned","unspecialised","unspecialized","unspecified","unspiced","unstaged","unstandardised","unstandardized","unstapled","unstarched","unstarred","unstated","unsteadied","unstemmed","unsterilised","unsterilized","unstickered","unstiffened","unstifled","unstigmatised","unstigmatized","unstilted","unstippled","unstipulated","unstirred","unstocked","unstoked","unstoppered","unstratified","unstressed","unstriped","unstructured","unstudied","unstumped","unsubdued","unsubmitted","unsubsidised","unsubsidized","unsubstantiated","unsubstituted","unsugared","unsummarized","unsupervised","unsuprised","unsurveyed","unswayed","unsweetened","unsyllabled","unsymmetrized","unsynchronised","unsynchronized","unsyncopated","unsyndicated","unsynthesized","unsystematized","untagged","untainted","untalented","untanned","untaped","untapered","untargeted","untarnished","untattooed","untelevised","untempered","untenanted","unterminated","untextured","unthickened","unthinned","unthrashed","unthreaded","unthrottled","unticketed","untiled","untilled","untilted","untimbered","untinged","untinned","untinted","untitled","untoasted","untoggled","untoothed","untopped","untoughened","untracked","untrammeled","untrammelled","untranscribed","untransduced","untransferred","untranslated","untransmitted","untraumatized","untraversed","untufted","untuned","untutored","unupgraded","unupholstered","unutilised","unutilized","unuttered","unvaccinated","unvacuumed","unvalidated","unvalued","unvandalized","unvaned","unvanquished","unvapourised","unvapourized","unvaried","unvariegated","unvarnished","unvented","unventilated","unverbalised","unverbalized","unverified","unversed","unvetted","unvictimized","unviolated","unvitrified","unvocalized","unvoiced","unwaged","unwarped","unwarranted","unwaxed","unweakened","unweaned","unwearied","unweathered","unwebbed","unwed","unwedded","unweeded","unweighted","unwelded","unwinterized","unwired","unwitnessed","unwonted","unwooded","unworshipped","unwounded","unzoned","uprated","uprighted","upsized","upswelled","vacuolated","valanced","valueoriented","varied","vascularised","vascularized","vasectomised","vaunted","vectorised","vectorized","vegged","verdured","verified","vermiculated","vernacularized","versified","verticillated","vesiculated","vied","vilified","virtualised","vitrified","vivified","volumed","vulcanised","wabbled","wafered","waisted","walleyed","wared","warmblooded","warmhearted","warted","waterbased","waterbed","watercooled","watersaturated","watershed","wavegenerated","waxweed","weakhearted","weakkneed","weakminded","wearied","weatherised","weatherstriped","webfooted","wedgeshaped","weed","weeviled","welladapted","welladjusted","wellbred","wellconducted","welldefined","welldisposed","welldocumented","wellequipped","wellestablished","wellfavored","wellfed","wellgrounded","wellintentioned","wellmannered","wellminded","wellorganised","wellrounded","wellshaped","wellstructured","whinged","whinnied","whiplashed","whiskered","wholehearted","whorled","widebased","wideeyed","widemeshed","widemouthed","widenecked","widespaced","wilded","wildered","wildeyed","willinghearted","windspeed","winterfed","winterfeed","winterised","wirehaired","wised","witchweed","woaded","wombed","wooded","woodshed","wooled","woolled","woollyhaired","woollystemmed","woolyhaired","woolyminded","wormholed","wormshaped","wrappered","wretched","wronghearted","ycleped","yolked","zincified","zinckified","zinkified","zombified"],ee=["arisen","awoken","reawoken","babysat","backslid","backslidden","beat","beaten","become","begun","bent","unbent","bet","bid","outbid","rebid","underbid","overbid","bidden","bitten","blown","bought","overbought","bound","unbound","rebound","broadcast","rebroadcast","broken","brought","browbeat","browbeaten","built","prebuilt","rebuilt","overbuilt","burnt","burst","bust","cast","miscast","recast","caught","chosen","clung","come","overcome","cost","crept","cut","undercut","recut","daydreamt","dealt","misdealt","redealt","disproven","done","predone","outdone","misdone","redone","overdone","undone","drawn","outdrawn","redrawn","overdrawn","dreamt","driven","outdriven","drunk","outdrunk","overdrunk","dug","dwelt","eaten","overeaten","fallen","felt","fit","refit","retrofit","flown","outflown","flung","forbidden","forecast","foregone","foreseen","foretold","forgiven","forgotten","forsaken","fought","outfought","found","frostbitten","frozen","unfrozen","given","gone","undergone","gotten","ground","reground","grown","outgrown","regrown","had","handwritten","heard","reheard","misheard","overheard","held","hewn","hidden","unhidden","hit","hung","rehung","overhung","unhung","hurt","inlaid","input","interwound","interwoven","jerry-built","kept","knelt","knit","reknit","unknit","known","laid","mislaid","relaid","overlaid","lain","underlain","leant","leapt","outleapt","learnt","unlearnt","relearnt","mislearnt","left","lent","let","lip-read","lit","relit","lost","made","premade","remade","meant","met","mown","offset","paid","prepaid","repaid","overpaid","partaken","proofread","proven","put","quick-frozen","quit","read","misread","reread","retread","rewaken","rid","ridden","outridden","overridden","risen","roughcast","run","outrun","rerun","overrun","rung","said","sand-cast","sat","outsat","sawn","seen","overseen","sent","resent","set","preset","reset","misset","sewn","resewn","oversewn","unsewn","shaken","shat","shaven","shit","shone","outshone","shorn","shot","outshot","overshot","shown","shrunk","preshrunk","shut","sight-read","slain","slept","outslept","overslept","slid","slit","slung","unslung","slunk","smelt","outsmelt","snuck","sold","undersold","presold","outsold","resold","oversold","sought","sown","spat","spelt","misspelt","spent","underspent","outspent","misspent","overspent","spilt","overspilt","spit","split","spoilt","spoken","outspoken","misspoken","overspoken","spread","sprung","spun","unspun","stolen","stood","understood","misunderstood","strewn","stricken","stridden","striven","struck","strung","unstrung","stuck","unstuck","stung","stunk","sublet","sunburnt","sung","outsung","sunk","sweat","swept","swollen","sworn","outsworn","swum","outswum","swung","taken","undertaken","mistaken","retaken","overtaken","taught","mistaught","retaught","telecast","test-driven","test-flown","thought","outthought","rethought","overthought","thrown","outthrown","overthrown","thrust","told","retold","torn","retorn","trod","trodden","typecast","typeset","upheld","upset","waylaid","wept","wet","rewet","withdrawn","withheld","withstood","woken","won","rewon","worn","reworn","wound","rewound","overwound","unwound","woven","rewoven","unwoven","written","typewritten","underwritten","outwritten","miswritten","rewritten","overwritten","wrung"],{matchRegularParticiples:de,getWords:ne}=n.languageProcessing,{precedenceException:te,directPrecedenceException:ie,values:ae}=n.languageProcessing,re=ae.Clause;function oe(e){return(e=(e=(e=(e=e.replace(/\s{2,}/g," ")).replace(/\s\.$/,".")).replace(/^\s+|\s+$/g,"")).replace(/\s。/g,"。")).replace(/。\s/g,"。")}const se=[" ","\\n","\\r","\\t"," ","Û”","ØŸ","ØŒ","Ø›"," ",".",",","'","(",")",'"',"+","-",";","!","?",":","/","»","«","‹","›","<",">","â€","“","ã€","〞","〟","‟","„"],ue=function(e){return(0,Y.includes)(se,e)};const le=function(e,d){let n=[];return(0,Y.forEach)(e,(function(e){(function(e,d){e=e.toLocaleLowerCase(),d=d.toLocaleLowerCase();const n=function(e,d=!1,n="",t=""){let i,a;return i="id"===t?'[ \\u00a0\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+;!¡?¿:/»«‹›'+n+"<>":'[ \\u00a0\\u2014\\u06d4\\u061f\\u060C\\u061B\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+\\-;!¡?¿:/»«‹›'+n+"<>",a=d?"($|((?="+i+"]))|((['‘’‛`])("+i+"])))":"($|("+i+"])|((['‘’‛`])("+i+"])))","(^|"+i+"'‘’‛`])"+e+a}((0,Y.escapeRegExp)(e));let t=d.search(new RegExp(n,"ig"));if(-1===t)return!1;t>0&&(t+=1);const i=t+e.length,a=ue(d[t-1])||0===t,r=ue(d[i])||i===d.length;return a&&r})(e=oe(e),d)&&(n=n.concat(function(e,d){let n=0;const t=e.length;let i;const a=[];for(;(i=d.indexOf(e,n))>-1;){const r=ue(d[i-1])||0===i,o=ue(d[i+t])||d.length===i+t;r&&o&&a.push({index:i,match:e}),n=i+t}return a}(e,d)))})),n},{createRegexFromArray:ce,getClauses:he}=n.languageProcessing,pe={Clause:class extends re{constructor(e,d){super(e,d),this._participles=function(e){const d=ne(e),n=[];return(0,Y.forEach)(d,(function(e){(0!==de(e,[/\w+ed($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi]).length||(0,Y.includes)(ee,e))&&n.push(e)})),n}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const e=this.getClauseText(),d=this.getParticiples().filter((d=>!((0,Y.includes)(Z,d)||this.hasRidException(d)||ie(e,d,D)||te(e,d,J))));this.setPassive(d.length>0)}hasRidException(e){if("rid"===e){const e=["get","gets","getting","got","gotten"];return!(0,Y.isEmpty)((0,Y.intersection)(e,this.getAuxiliaries()))}return!1}},stopwords:K,auxiliaries:r,ingExclusions:["king","cling","ring","being","thing","something","anything"],regexes:{auxiliaryRegex:ce(r),stopCharacterRegex:/([:,]|('ll)|('ve))(?=[ \n\r\t'"+\-»«‹›<>])/gi,verbEndingInIngRegex:/\w+ing(?=$|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi},otherStopWordIndices:[]};function me(e){return pe.otherStopWordIndices=function(e){let d=e.match(pe.regexes.verbEndingInIngRegex)||[];return d=d.filter((e=>!(0,Y.includes)(pe.ingExclusions,oe(e)))),le(d,e)}(e),he(e,pe)}const{buildFormRule:fe,createRulesFromArrays:ge}=n.languageProcessing,be=function(e,d,n){return t=>{const i=t.length;return!(i1&&e.length>4&&"ing"===e.substring(e.length-3,e.length)},{buildFormRule:ke,createRulesFromArrays:xe}=n.languageProcessing;function qe(e,d){for(let n=0;n3&&"s"===e[e.length-1]}(e)?{infinitive:we(e,n),guessedForm:"s"}:ze(e)?{infinitive:we(e,t),guessedForm:"ing"}:function(e){const d=(e.match(ve)||[]).length;return(d>1||1===d&&"e"!==e.substring(e.length-3,e.length-2))&&"ed"===e.substring(e.length-2,e.length)}(e)?{infinitive:we(e,i)||e,guessedForm:"ed"}:{infinitive:e,guessedForm:"inf"}}(e,n).infinitive;r.push(o);const s=function(e,d,n){if(be("er",4,n.erExceptions)(e)){const n=ge(d.comparativeToBase);return{base:fe(e,n)||e,guessedForm:"er"}}if(be("est",5,n.estExceptions)(e)){const n=ge(d.superlativeToBase);return{base:fe(e,n)||e,guessedForm:"est"}}if(be("ly",5,n.lyExceptions)(e)){const n=ge(d.adverbToBase);return{base:fe(e,n),guessedForm:"ly"}}return{base:e,guessedForm:"base"}}(e,i,d.adjectives.stopAdjectives).base;return r.push(s),function(e){const d=(0,Y.flatten)(e);let n=d.pop();return d.forEach((e=>{const d=e.length-n.length;0===d?e.localeCompare(n)<0&&(n=e):d<0&&(n=e)})),n}(r)}const Pe=function(e,d){const n=d.nouns,t=ke(e,xe(n.regexNoun.possessiveToBase));let i,a;return(0,Y.isUndefined)(t)?(i=e,a=qe(e,n.irregularNouns)||qe(e,d.adjectives.irregularAdjectives)||function(e,d){const n=function(e,d,n){let t;if(d.forEach((function(d){d.forEach((function(n){n===e&&(t=d)}))})),(0,Y.isUndefined)(t)){const i=function(e,d){for(const e in d)d.hasOwnProperty&&(d[e]=new RegExp(d[e],"i"));return!0===d.sevenLetterHyphenPrefixes.test(e)?{normalizedWord:e.replace(d.sevenLetterHyphenPrefixes,""),prefix:e.substring(0,8)}:!0===d.sevenLetterPrefixes.test(e)?{normalizedWord:e.replace(d.sevenLetterPrefixes,""),prefix:e.substring(0,7)}:!0===d.fiveLetterHyphenPrefixes.test(e)?{normalizedWord:e.replace(d.fiveLetterHyphenPrefixes,""),prefix:e.substring(0,6)}:!0===d.fiveLetterPrefixes.test(e)?{normalizedWord:e.replace(d.fiveLetterPrefixes,""),prefix:e.substring(0,5)}:!0===d.fourLetterHyphenPrefixes.test(e)?{normalizedWord:e.replace(d.fourLetterHyphenPrefixes,""),prefix:e.substring(0,5)}:!0===d.fourLetterPrefixes.test(e)?{normalizedWord:e.replace(d.fourLetterPrefixes,""),prefix:e.substring(0,4)}:!0===d.threeLetterHyphenPrefixes.test(e)?{normalizedWord:e.replace(d.threeLetterHyphenPrefixes,""),prefix:e.substring(0,4)}:!0===d.threeLetterPrefixes.test(e)?{normalizedWord:e.replace(d.threeLetterPrefixes,""),prefix:e.substring(0,3)}:!0===d.twoLetterHyphenPrefixes.test(e)?{normalizedWord:e.replace(d.twoLetterHyphenPrefixes,""),prefix:e.substring(0,3)}:!0===d.twoLetterPrefixes.test(e)?{normalizedWord:e.replace(d.twoLetterPrefixes,""),prefix:e.substring(0,2)}:!0===d.oneLetterPrefixes.test(e)?{normalizedWord:e.replace(d.oneLetterPrefixes,""),prefix:e.substring(0,1)}:void 0}(e,n);(0,Y.isUndefined)(i)||d.forEach((function(e){e.forEach((function(d){d===i.normalizedWord&&(t=e.map((function(e){return i.prefix.concat(e)})))}))}))}return t}(e,d.irregularVerbs,d.regexVerb.verbPrefixes);return(0,Y.isUndefined)(n)?null:n[0]}(e,d.verbs)):(i=t,a=qe(t,n.irregularNouns)),a||je(i,d)},{baseStemmer:Le}=n.languageProcessing;function Ee(e){const d=(0,Y.get)(e.getData("morphology"),"en",!1);return d?e=>Pe(e,d):Le}const{formatNumber:We}=n.helpers;function Re(e){const d=206.835-1.015*e.averageWordsPerSentence-e.numberOfSyllables/e.numberOfWords*84.6;return We(d)}const{AbstractResearcher:$e}=n.languageProcessing;class Fe extends $e{constructor(e){super(e),Object.assign(this.config,{language:"en",passiveConstructionType:"periphrastic",firstWordExceptions:t,functionWords:G,stopWords:K,transitionWords:s,twoPartTransitionWords:Q,syllables:X}),Object.assign(this.helpers,{getClauses:me,getStemmer:Ee,fleschReadingScore:Re})}}(window.yoast=window.yoast||{}).Researcher=d})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/es.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/es.js new file mode 100644 index 00000000..6b5d2103 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/es.js @@ -0,0 +1 @@ +(()=>{"use strict";var a={d:(d,e)=>{for(var i in e)a.o(e,i)&&!a.o(d,i)&&Object.defineProperty(d,i,{enumerable:!0,get:e[i]})},o:(a,d)=>Object.prototype.hasOwnProperty.call(a,d),r:a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})}},d={};a.r(d),a.d(d,{default:()=>Ca});const e=window.yoast.analysis,i=["el","los","la","las","un","una","unas","unos","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","este","estos","esta","estas","ese","esos","esa","esas","aquel","aquellos","aquella","aquellas","esto","eso","aquello"],r=["además","adicional","así","asimismo","aún","aunque","ciertamente","como","concluyendo","conque","contrariamente","cuando","decididamente","decisivamente","después","diferentemente","efectivamente","entonces","especialmente","específicamente","eventualmente","evidentemente","finalmente","frecuentemente","generalmente","igualmente","lógicamente","luego","mas","mientras","pero","por","porque","posteriormente","primero","principalmente","pronto","próximamente","pues","raramente","realmente","seguidamente","segundo","semejantemente","si","siguiente","sino","súbitamente","supongamos","también","tampoco","tercero","verbigracia","vice-versa","ya"],s=r.concat(["a causa de","a continuación","a diferencia de","a fin de cuentas","a la inversa","a la misma vez","a más de","a más de esto","a menos que","a no ser que","a pesar de","a pesar de eso","a pesar de todo","a peser de","a propósito","a saber","a todo esto","ahora bien","al contrario","al fin y al cabo","al final","al inicio","al mismo tiempo","al principio","ante todo","antes bien","antes de","antes de nada","antes que nada","aparte de","as así como","así como","así mismo","así pues","así que","así y todo","aún así","claro está que","claro que","claro que sí","como caso típico","como decíamos","como era de esperar","como es de esperar","como muestra","como resultado","como se ha notado","como sigue","comparado con","con el objeto de","con el propósito de","con que","con relación a","con tal de que","con todo","dado que","de ahí","de cierta manera","de cualquier manera","de cualquier modo","de ello resulta que","de este modo","de golpe","de hecho","de igual manera","de igual modo","de igualmanera","de la manera siguiente","de la misma forma","de la misma manera","de manera semejante","del mismo modo","de modo que","de nuevo","de otra manera","de otro modo","de pronto","de qualquier manera","de repente","de suerte que","de tal modo","de todas formas","de todas maneras","de todos modos","de veras","debido a","debido a que","del mismo modo","dentro de poco","desde entonces","después de","después de todo","ejemplo de esto","el caso es que","en aquel tiempo","en cambio","en cierto modo","en comparación con","en conclusión","en concreto","en conformidad con","en consecuencia","en consiguiente","en contraste con","en cualquier caso","en cuanto","en cuanto a","en definitiva","en efecto","en el caso de que","en este sentido","en fin","en fin de cuentas","en general","en lugar de","en otras palabras","en otro orden","en otros términos","en particular","en primer lugar","en primer término","en primera instancia","en realidad","en relación a","en relación con","en representación de","en resumen","en resumidas cuentas","en segundo lugar","en seguida","en síntesis","en suma","en todo caso","en último término","en verdad","en vez de","en virtud de","entre ellas figura","entre ellos figura","es cierto que","es decir","es evidente que","es incuestionable","es indudable","es más","está claro que","esto indica","excepto si","generalmente por ejemplo","gracias a","hasta aquí","hasta cierto punto","hasta el momento","hay que añadir","igual que","la mayor parte del tiempo","la mayoría del tiempo","lo que es peor","más tarde","mejor dicho","mientras tanto","mirándolo todo","nadie puede ignorar","no faltaría más","no obstante","o sea","otra vez","otro aspecto","para ilustrar","para concluir","para conclusión","para continuar","para empezar","para finalizar","para mencionar una cosa","para que","para resumir","para terminar","pongamos por caso","por añadidura","por cierto","por consiguiente","por ejemplo","por el consiguiente","por el contrario","por el hecho que","por eso","por esta razón","por esto","por fin","por la mayor parte","por lo general","por lo que","por lo tanto","por otro lado","por otra parte","por otro lado","por supuesto","por tanto","por último","por un lado","por una parte","primero que nada","primero que todo","pues bien","puesto que","rara vez","resulta que","sea como sea","seguidamente entre tanto","si bien","siempre que","siempre y cuando","sigue que","sin duda","sin embargo","sin ir más lejos","sobre todo","supuesto que","tal como","tales como","tan pronto como","tanto como","una vez","ya que"]);function n(a){let d=a;return a.forEach((e=>{(e=e.split("-")).length>0&&e.filter((d=>!a.includes(d))).length>0&&(d=d.concat(e))})),d}const o=["el","la","los","las","un","una","unos","unas"],c=["dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce","trece","catorce","quince","dieciseis","diecisiete","dieciocho","diecinueve","veinte","cien","centena","mil","millon","millones"],t=["primera","segunda","tercera","cuarto","cuarta","quinto","quinta","sexto","sexta","septimo","septima","octavo","octava","noveno","novena","décimo","décima","vigésimo","vigésima","primeros","primeras","segundos","segundas","terceros","terceras","cuartos","cuartas","quintos","quintas","sextos","sextas","septimos","septimas","octavos","octavas","novenos","novenas","décimos","décimas","vigésimos","vigésimas"],l=["yo","yos","yoes","tú","él","ella","ello","nosotros","nosotras","vosotros","vosotras","ustedes","ellos","ellas"],u=["me","te","lo","se","nos","os","les"],m=["mí","ti","ud","uds","usted"],p=["conmigo","contigo","consigo"],b=["este","ese","aquel","esta","esa","aquella","estos","esos","aquellos","estas","esas","aquellas","esto","eso","aquello"],g=["mi","mis","mío","míos","mía","mías","nuestro","nuestros","nuestra","nuestras","tuyo","tuyos","tuya","tuyas","tu","tus","vuestro","vuestros","vuestra","vuestras","suyo","suyos","suya","suyas","su","sus"],z=["bastante","bastantes","mucho","muchas","mucha","muchos","más","muchísimo","muchísima","muchísimos","muchísimas","demasiado","demasiada","demasiados","demasiadas","poco","poca","pocos","pocas","menos","poquísimo","poquísima","poquísimos","poquísimas","demás","otros","otras","todo","toda","todos","todas"],f=["alguien","algo","algún","alguno","alguna","algunos","algunas","nadie","nada","ningún","ninguno","ninguna","ningunos","ningunas","tanto","tantos","tanta","tantas"],v=["cuyas","cual"],h=["cuyo"],j=["comoquiera","cualesquiera","cualquier","cuanta","cuantas","cuanto","cuantos","cuál","cuáles","cuánta","cuántas","cuánto","cuántos","cómo","dondequiera","dónde","quien","quienes","quienquiera","quién","quiénes","qué"],q=["allí","ahí","allá","aquí","acá","adónde","delante","detrás","debajo","adelante","atrás","adentro","afuera"],x=["he","has","ha","hay","hemos","habéis","han","hube","hubiste","hubo","hubimos","hubisteis","hubieron","había","habías","habíamos","habíais","habían","habría","habrías","habríais","habrían","habré","habrás","habrá","habremos","habréis","habrán","haya","hayas","hayamos","hayáis","hayan","hubiera","hubieras","hubiéramos","hubierais","hubieran","hubiese","hubieses","hubiésemos","hubieseis","hubiesen","hubiere","hubieres","hubiéremos","hubiereis","hubieren","habed","habido","debo","debes","debe","debemos","debéis","deben","debí","debiste","debió","debimos","debisteis","debieron","debía","debías","debíamos","debíais","debían","debería","deberías","deberíamos","deberíais","deberían","deberé","deberás","deberá","deberemos","deberéis","deberán","deba","debas","debamos","debáis","deban","debiera","debieras","debiéramos","debierais","debieran","debiese","debieses","debiésemos","debieseis","debiesen","debiere","debieres","debiéremos","debiereis","debieren","debed","debido","empiezo","empiezas","empieza","empezáis","empiezan","empecé","empezaste","empezó","empezamos","empezasteis","empezaron","empezaba","empezabas","empezábamos","empezabais","empezaban","empezaría","empezarías","empezaríamos","empezaríais","empezarían","empezaré","empezarás","empezará","empezaremos","empezaréis","empezarán","empiece","empieces","empecemos","empecéis","empiecen","empezara","empezaras","empezáramos","empezarais","empezaran","empezase","empezases","empezásemos","empezaseis","empezasen","empezare","empezares","empezáremos","empezareis","empezaren","empezad","empezado","comienzo","comienzas","comienza","comenzamos","comenzáis","comienzan","comencé","comenzaste","comenzó","comenzasteis","comenzaron","comenzaba","comenzabas","comenzábamos","comenzabais","comenzaban","comenzaría","comenzarías","comenzaríamos","comenzaríais","comenzarían","comenzaré","comenzarás","comenzará","comenzaremos","comenzaréis","comenzarán","comience","comiences","comencemos","comencéis","comiencen","comenzara","comenzaras","comenzáramos","comenzarais","comenzaran","comenzase","comenzases","comenzásemos","comenzaseis","comenzasen","comenzare","comenzares","comenzáremos","comenzareis","comenzaren","comenzad","comenzado","sigo","sigues","sigue","seguimos","seguis","siguen","seguí","seguiste","siguió","seguisteis","siguieron","seguía","seguías","seguíamos","seguíais","seguían","seguiría","seguirías","seguiríamos","seguiríais","seguirían","seguiré","seguirás","seguirá","seguiremos","seguiréis","seguirán","siga","sigas","sigamos","sigáis","sigan","siguiera","siguieras","siguiéramos","siguierais","siguieran","siguiese","siguieses","siguiésemos","siguieseis","siguiesen","siguiere","siguieres","siguiéremos","siguiereis","siguieren","seguid","seguido","tengo","tienes","tiene","tenemos","tenéis","tienen","tuve","tuviste","tuvo","tuvimos","tuvisteis","tuvieron","tenía","tenías","teníamos","teníais","tenían","tendría","tendrías","tendríamos","tendríais","tendrían","tendré","tendrás","tendrá","tendremos","tendréis","tendrán","tenga","tengas","tengamos","tengáis","tengan","tuviera","tuvieras","tuviéramos","tuvierais","tuvieran","tuviese","tuvieses","tuviésemos","tuvieseis","tuviesen","tuviere","tuvieres","tuviéremos","tuviereis","tuvieren","ten","tened","tenido","ando","andas","andamos","andáis","andan","anduve","anduviste","anduvo","anduvimos","anduvisteis","anduvieron","andaba","andabas","andábamos","andabais","andaban","andaría","andarías","andaríamos","andaríais","andarían","andaré","andarás","andará","andaremos","andaréis","andarán","ande","andes","andemos","andéis","anden","anduviera","anduvieras","anduviéramos","anduvierais","anduvieran","anduviese","anduvieses","anduviésemos","anduvieseis","anduviesen","anduviere","anduvieres","anduviéremos","anduviereis","anduvieren","andad","andado","quedo","quedas","queda","quedamos","quedáis","quedan","quedé","quedasteis","quedaron","quedaba","quedabas","quedábamos","quedabais","quedaban","quedaría","quedarías","quedaríamos","quedaríais","quedarían","quedaré","quedarás","quedará","quedaremos","quedaréis","quedarán","quede","quedes","quedemos","quedéis","queden","quedara","quedaras","quedáramos","quedarais","quedaran","quedase","quedases","quedásemos","quedaseis","quedasen","quedare","quedares","quedáremos","quedareis","quedaren","quedad","quedado","hallo","hallas","halla","hallamos","halláis","hallan","hallé","hallaste","halló","hallasteis","hallaron","hallaba","hallabas","hallábamos","hallabais","hallaban","hallaría","hallarías","hallaríamos","hallaríais","hallarían","hallaré","hallarás","hallará","hallaremos","hallaréis","hallarán","halle","halles","hallemos","halléis","hallen","hallara","hallaras","halláramos","hallarais","hallaran","hallase","hallases","hallásemos","hallaseis","hallasen","hallare","hallares","halláremos","hallareis","hallaren","hallad","hallado","vengo","vienes","viene","venimos","venis","vienen","vine","viniste","vino","vinimos","vinisteis","vinieron","venía","vanías","verníamos","veníais","venían","vendría","vendrías","vendríamos","vendíais","vendrían","vendré","vendrás","vendrá","vendremos","vendréis","vendrán","venga","vengas","vengamos","vengáis","vengan","viniera","vinieras","viniéramos","vinierais","vinieran","viniese","vinieses","viniésemos","vinieseis","viniesen","viniere","vinieres","viniéremos","viniereis","vinieren","ven","venid","venido","abro","abres","abre","abrismos","abrís","abren","abrí","abriste","abrió","abristeis","abrieron","abría","abrías","abríais","abrían","abriría","abrirías","abriríamos","abriríais","abrirían","abriré","abrirás","abrirá","abriremos","abriréis","abrirán","abra","abras","abramos","abráis","abran","abriera","abrieras","abriéramos","abrierais","abrieran","abriese","abrieses","abriésemos","abrieseis","abriesen","abriere","abrieres","abriéremos","abriereis","abrieren","abrid","abierto","voy","vas","va","vamos","vais","van","iba","ibas","íbamos","ibais","iban","iría","irías","iríamos","iríais","irían","iré","irás","irá","iremos","iréis","irán","vaya","vayas","vayamos","vayáis","vayan","ve","id","ido","acabo","acabas","acaba","acabamos","acabáis","acaban","acabé","acabaste","acabó","acabasteis","acabaron","acababa","acababas","acabábamos","acababais","acababan","acabaría","acabarías","acabaríamos","acabaríais","acabarían","acabaré","acabarás","acabará","acabaremos","acabaréis","acabarán","acabe","acabes","acabemos","acabéis","acaben","acabara","acabaras","acabáramos","acabarais","acabaran","acabase","acabases","acabásemos","acabaseis","acabasen","acabare","acabares","acabáremos","acabareis","acabaren","acabad","acabado","llevo","llevas","lleva","llevamos","lleváis","llevan","llevé","llevaste","llevó","llevasteis","llevaron","llevaba","llevabas","llevábamos","llevabais","llevaban","llevaría","llevarías","llevaríamos","llevaríais","llevarían","llevaré","llevarás","llevará","llevaremos","llevaréis","llevarán","lleve","lleves","llevemos","llevéis","lleven","llevara","llevaras","lleváramos","llevarais","llevaran","llevase","llevases","llevásemos","llevaseis","llevasen","llevare","llevares","lleváremos","llevareis","llevaren","llevad","llevado","alcanzo","alcanzas","alcanza","alcanzamos","alcanzáis","alcanzan","alcancé","alcanzaste","alcanzó","alcanzasteis","alcanzaron","alcanzaba","alcanzabas","alcanzábamos","alcanzabais","alcanzaban","alcanzaría","alcanzarías","alcanzaríamos","alcanzaríais","alcanzarían","alcanzaré","alcanzarás","alcanzará","alcanzaremos","alcanzaréis","alcanzarán","alcance","alcances","alcancemos","alcancéis","alcancen","alcanzara","alcanzaras","alcanzáramos","alcanzarais","alcanzaran","alcanzase","alcanzases","alcanzásemos","alcanzaseis","alcanzasen","alcanzare","alcanzares","alcanzáremos","alcanzareis","alcanzaren","alcanzad","alcanzado","digo","dices","dice","decimos","decís","dicen","dije","dijiste","dijo","dijimos","dijisteis","dijeron","decía","decías","decíamos","decíais","decían","diría","dirías","diríamos","diríais","dirían","diré","dirás","dirá","diremos","diréis","dirán","diga","digas","digamos","digáis","digan","dijera","dijeras","dijéramos","dijerais","dijeran","dijese","dijeses","dijésemos","dijeseis","dijesen","dijere","dijeres","dijéremos","dijereis","dijeren","di","decid","dicho","continúo","continúas","continúa","continuamos","continuáis","continúan","continué","continuaste","continuó","continuasteis","continuaron","continuaba","continuabas","continuábamos","continuabais","continuaban","continuaría","continuarías","continuaríamos","continuaríais","continuarían","continuaré","continuarás","continuará","continuaremos","continuaréis","continuarán","continúe","continúes","continuemos","continuéis","continúen","continuara","continuaras","continuáramos","continuarais","continuaran","continuase","continuases","continuásemos","continuaseis","continuasen","continuare","continuares","continuáremos","continuareis","continuaren","continuad","continuado","resulto","resultas","resulta","resultamos","resultáis","resultan","resulté","resultaste","resultó","resultasteis","resultaron","resultaba","resultabas","resultábamos","resultabais","resultaban","resultaría","resultarías","resultaríamos","resultaríais","resultarían","resultaré","resultarás","resultará","resultaremos","resultaréis","resultarán","resulte","resultes","resultemos","resultéis","resulten","resultara","resultaras","resultáramos","resultarais","resultaran","resultase","resultases","resultásemos","resultaseis","resultasen","resultare","resultares","resultáremos","resultareis","resultaren","resultad","resultado","puedo","puedes","puede","podemos","podéis","pueden","pude","pudiste","pudo","pudimos","pudisteis","pudieron","podía","podías","podíamos","podíais","podían","podría","podrías","podríamos","podríais","podrían","podré","podrás","podrá","podremos","podréis","podrán","pueda","puedas","podamos","podáis","puedan","pudiera","pudieras","pudiéramos","pudierais","pudieran","pudiese","pudieses","pudiésemos","pudieseis","pudiesen","pudiere","pudieres","pudiéremos","pudiereis","pudieren","poded","podido","quiero","quieres","quiere","queremos","queréis","quieren","quise","quisiste","quiso","quisimos","quisisteis","quisieron","quería","querías","queríamos","queríais","querían","querría","querrías","querríamos","querríais","querrían","querré","querrás","querrá","querremos","querréis","querrán","quiera","quieras","queramos","queráis","quieran","quisiera","quisieras","quisiéramos","quisierais","quisieran","quisiese","quisieses","quisiésemos","quisieseis","quisiesen","quisiere","quisieres","quisiéremos","quisiereis","quisieren","quered","querido","sabes","sabe","sabemos","sabéis","saben","supe","supiste","supo","supimos","supisteis","supieron","sabía","sabías","sabíamos","sabíais","sabían","sabría","sabrías","sabríamos","sabríais","sabrían","sabré","sabrás","sabrá","sabremos","sabréis","sabrán","sepa","sepas","sepamos","sepáis","sepan","supiera","supieras","supiéramos","supierais","supieran","supiese","supieses","supiésemos","supieseis","supiesen","supiere","supieres","supiéremos","supiereis","supieren","sabed","sabido","suelo","sueles","suele","solemos","soléis","suelen","solí","soliste","solió","solimos","solisteis","solieron","solía","solías","solíamos","solíais","solían","solería","solerías","soleríamos","soleríais","solerían","soleré","solerás","solerá","soleremos","soleréis","solerán","suela","suelas","solamos","soláis","suelan","soliera","solieras","soliéramos","solierais","solieran","soliese","solieses","soliésemos","solieseis","soliesen","soliere","solieres","soliéremos","soliereis","solieren","soled","solido","necesito","necesitas","necesitamos","necesitáis","necesitan","necesité","necesitaste","necesitó","necesitasteis","necesitaron","necesitaba","necesitabas","necesitábamos","necesitabais","necesitaban","necesitaría","necesitarías","necesitaríamos","necesitaríais","necesitarían","necesitaré","necesitarás","necesitará","necesitaremos","necesitaréis","necesitarán","necesite","necesites","necesitemos","necesitéis","necesiten","necesitara","necesitaras","necesitáramos","necesitarais","necesitaran","necesitase","necesitases","necesitásemos","necesitaseis","necesitasen","necesitare","necesitares","necesitáremos","necesitareis","necesitaren","necesita","necesitad","necesitado"],y=["haber","deber","empezar","comenzar","seguir","tener","andar","quedar","hallar","venir","abrir","ir","acabar","llevar","alcanzar","decir","continuar","resultar","poder","querer","saber","soler","necesitar"],w=["estoy","estás","está","estamos","estáis","están","estuve","estuviste","estuvo","estuvimos","estuvisteis","estuvieron","estuba","estabas","estábamos","estabais","estaban","estraría","estarías","estaríamos","estaríais","estarían","estaré","estarás","estará","estaremos","estaréis","estarán","esté","estés","estemos","estéis","estén","estuviera","estuviese","estuvieras","estuviéramos","estuvierais","estuvieran","estuvieses","estuviésemos","estuvieseis","estuviesen","estuviere","estuvieres","estuviéremos","estuviereis","estuvieren","estad","estado"],k=["soy","eres","es","somos","sois","son","fui","fuiste","fuimos","fuisteis","fueron","era","eras","éramos","erais","eran","sería","serías","seríamos","seríais","serían","seré","serás","seremos","seréis","serán","sea","seas","seamos","seáis","sean","fueras","fuéramos","fuerais","fueran","fuese","fueses","fuésemos","fueseis","fuesen","fuere","fueres","fuéremos","fuereis","fueren","sé","sed","sido"],S=["estar"],P=["ser"],T=["a","ante","abajo","adonde","al","allende","alrededor","amén","antes","arriba","aun","bajo","cabe","cabo","con","contigo","contra","de","dejante","del","dentro","desde","donde","durante","en","encima","entre","excepto","fuera","hacia","hasta","incluso","mediante","más","opuesto","par","para","próximo","salvo","según","sin","so","sobre","tras","versus","vía"],O=["cerca"],W=["o","y","entonces","e","u","ni","bien","ora"],R=["igual"],E=["apenas","segun","que"],C=["apunto","apunta","confieso","confiesa","confesaba","revelado","revelo","revela","revelaba","declarado","declaro","declara","declaba","señalo","señala","señalaba","declaraba","comento","comenta"],A=["muy","tan","completamente","suficiente","tal","tales"],L=["hago","haces","hace","hacemos","hacéis","hacen","hice","hiciste","hizo","hicimos","hicisteis","hicieron","hacía","hacías","hacíamos","hacíais","hacían","haría,","harías","haríamos","haríais","harían","haré","harás","hará","haremos","haréis","harán","haga","hagas","hagamos","hagáis","hagan","hiciera","hicieras","hiciéramos","hicierais","hicieran","hiciese","hicieses","hiciésemos","hicieseis","hiciesen","hiciere","hicieres","hiciéremos","hiciereis","hicieren","haz","haced","hecho","parezco","pareces","parece","parecemos","parecéis","parecen","parecí","pareciste","pareció","parecimos","parecisteis","parecieron","parecía","parecías","parecíamos","parecíais","parecían","parecería","parecerías","pareceríamos","pareceríais","parecerían","pareceré","parecerás","parecerá","pareceremos","pareceréis","parecerán","parezca","parezcas","parezcamos","parezcáis","parezcan","pareciera","parecieras","pareciéramos","parecierais","parecieran","pareciese","parecieses","pareciésemos","parecieseis","pareciesen","pareciere","parecieres","pareciéremos","pareciereis","parecieren","pareced","parecido","iba","ibais","iban","ibas","id","ido","iremos","irá","irán","irás","iré","iréis","iría","iríais","iríamos","irían","irías","va","vais","vamos","van","vas","vaya","vayamos","vayan","vayas","vayáis","ve","voy","yendo","íbamos"],M=["hacer","parecer","ir"],F=["enfrente","claro","bueno","mejor","mejores","buena","buenos","buenas","óptimo","óptimos","óptimas","bonísimo","bonísima","bonísimos","bonísimas","buenísimo","buenísima","buenísimos","buenísimas","buenérrimo","buenérrima","buenérrimos","buenérrimas","nuevo","nueva","nuevos","nuevas","novísimo","novísima","novísimos","novísimas","nuevísimo","nuevísima","nuevísimos","nuevísimas","viejo","viejos","vieja","viejas","anterior","grande","gran","grandes","mayores","mayor","máximo","máxima","grandísimo","grandísima","máximos","máximas","grandísimos","grandísimas","fácil","fáciles","rápido","rápida","rápidos","rápidas","lejos","lejas","lejote","lejotes","difícil","difíciles","propio","propios","propia","propias","largo","larga","largos","largas","bajos","baja","bajas","inferior","ínfimo","ínfima","ínfimos","ínfimas","bajísimo","bajísima","bajísimos","bajísimas","alto","alta","altos","altas","superior","superiores","supremo","suprema","supremos","supremas","sumo","suma","sumos","sumas","altísimo","altísima","altísimos","altísimas","regular","regulares","normal","pequeño","pequeña","pequeños","pequeñas","menor","pequeñísimo","pequeñísima","pequeñísimos","pequeñísimas","mínimo","mínima","mínimos","mínimas","diminuta","diminuto","diminutas","diminutos","chiquitito","chiquititos","chiquitita","chiquititas","corta","corto","cortas","cortos","principal","principales","mismo","mismos","misma","mismas","capaz","capaces","cierta","cierto","ciertas","ciertos","certísimos","certísimas","ciertísimo","ciertísima","ciertísimos","ciertísimas","llamado","llamada","llamados","llamadas","mayormente","reciente","recientes","completa","completo","completas","completos","absoluta","absoluto","absolutas","absolutos","últimamente","posible","común","comúnes","comúnmente","constantemente","continuamente","directamente","fácilmente","casi","ligeramente","estima","estimada","estimado","aproximada","aproximadamente","última","últimas","último","últimos","diferente","diferentes","similar","mal","malo","malos","mala","malas","peor","pésimo","pésima","malísimo","malísima","pésimos","pésimas","malísimos","malísimas","perfectamente","excelente","final","general"],N=["ah","eh","ejem","ele","achís","adiós","agur","ajá","ajajá","ala","alá","albricias","aleluya","alerta","alirón","aló","amalaya","ar","aro","arrarray","arre","arsa","atatay","aúpa","ax","ay","ayayay","bah","banzai","barajo","bla","bravo","buf","bum","ca","caguendiós","canastos","caracho","caracoles","carajo","caramba","carape","caray","cáscaras","cáspita","cataplum","ce","chao","chau","che","chis","chist","chitón","cho","chucho","chus","cielos","clo","coche","cochi","cojones","concho","coño","córcholis","cuchí","cuidado","cuz","demonio","demontre","despacio","diablo","diantre","dios","ea","epa","equilicuá","estúpido","eureka","evohé","exacto","fantástico","firmes","fo","forte","gua","gualá","guarte","guay","hala","hale","he","hi","hin","hola","hopo","huesque","huiche","huichó","huifa","hurra","huy","ja","jajajá","jajay","jaque","jau","jo","jobar","joder","jolín","jopo","leñe","listo","malhayas","mamola","mecachis","miéchica","mondo","moste","mutis","nanay","narices","oh","ojalá","ojo","okay","ole","olé","órdiga","oste","ostras","ox","oxte","paf","pardiez","paso","pucha","puf","puff","pumba","puñeta","quia","quiúbole","recórcholis","rediez","rediós","salve","sanseacabó","sniff","socorro","ta","tararira","tate","tururú","uf","uh","ui","upa","uste","uy","victoria","vítor","viva","za","zambomba","zapateta","zape","zas"],B=["kg","mg","gr","g","km","m","l","ml","cl"],D=["minuto","minutos","hora","horas","día","días","semana","semanas","mes","meses","año","años","hoy","mañana","ayer"],_=["cosa","cosas","manera","maneras","caso","casos","pieza","piezas","vez","veces","parte","partes","porcentaje","instancia","aspecto","aspectos","punto","puntos","objeto","objectos","persona","personas"],I=["no","euros","sí","síes","noes"],V=(n(F),n([].concat(t,y,S,P,M)),n([].concat(o,T,W,b,A,z,g)),n([].concat(r,l,u,m,p,N,c,x,w,k,C,L,f,R,E,v,h,j,q,I,O,B,D,_)),n([].concat(o,T,u,g,f,j,c,t,L,M,C,v,h,p,m,O))),J=n([].concat(w,S)),G=n([].concat(o,c,t,b,g,l,p,m,u,z,f,v,h,j,q,O,x,y,w,k,S,P,T,W,R,E,C,r,["básicamente","esencialmente","primeramente","siempre","nunca","ahora","quizá","acaso","inclusive","probablemente","verdaderamente","seguramente","jamás","obviamente","indiscutiblement","inmediatamente","previamente"],A,L,M,N,F,B,_,I,D,["sra","sras","srta","sr","sres","dra","dr","profa","prof"],["jr","sr"])),H=["pero","ora","aunque","aun","mientras","porque","apenas","si","antes","después","cómo","como","empero","que","cuanto","cuando","cual","cuales","quién","quien","quienes","dónde","adónde","cuyo","cuyos","cuya","cuyas"],K=[["de un lado","de otra parte"],["de un lado","de otro"],["no","sino que"],["no","sino"],["por un lado","por otro lado"],["por una parte","por otra parte"],["por una parte","por otra"],["tanto","como"],["bien","bien"]],Q=JSON.parse('{"vowels":"aeiouáéíóúü","deviations":{"vowels":[{"fragments":["i[ií]","[íú][aeo]","o[aáeéíóú]","uu","flu[iea]","ru[ie]","eio","eu[aá]","oi[aó]","[iu]ei","ui[éu]","^anti[aeoá]","^zoo","coo","microo"],"countModifier":1},{"fragments":["[eéó][aáeéíoóú]"],"countModifier":1},{"fragments":["[aáü][aáeéiíoóú]","eoi","oeu","[eu]au"],"countModifier":1}],"words":{"full":[{"word":"scooter","syllables":2},{"word":"y","syllables":1},{"word":"beat","syllables":1},{"word":"via","syllables":2},{"word":"ok","syllables":2}],"fragments":{"global":[{"word":"business","syllables":2},{"word":"coach","syllables":1},{"word":"reggae","syllables":2},{"word":"mail","syllables":1},{"word":"airbag","syllables":2},{"word":"affaire","syllables":2},{"word":"training","syllables":2},{"word":"hawaian","syllables":3},{"word":"saharaui","syllables":3},{"word":"nouveau","syllables":2},{"word":"chapeau","syllables":2},{"word":"free","syllables":1},{"word":"green","syllables":1},{"word":"jeep","syllables":1},{"word":"toffee","syllables":2},{"word":"tweet","syllables":1},{"word":"tweed","syllables":1},{"word":"semiautomátic","syllables":6},{"word":"estadou","syllables":4},{"word":"broadway","syllables":2},{"word":"board","syllables":1},{"word":"load","syllables":1},{"word":"roaming","syllables":2},{"word":"heavy","syllables":2},{"word":"break","syllables":1}]}}}}'),U={recommendedLength:25},X=["ababillad","abacorad","abadernad","abajad","abalanzad","abaldonad","abalead","abaluartad","abanad","abancalad","abanderad","abanderizad","abandonad","abanicad","abañad","abaratad","abarbetad","abarcad","abarload","abarquillad","abarracad","abarrad","abarrotad","abastad","abastardad","abastecid","abastionad","abatanad","abatatad","abatid","abatojad","abdicad","abducid","abejead","abejonead","abejorread","abeldad","abemolad","aberrad","abetunad","abiert","abigarrad","abisagrad","abismad","abjurad","ablacionad","ablandad","abluid","abnegad","abobad","abocad","abocetad","abochornad","abocinad","abofad","abofetead","abogad","abolid","abollad","abombad","abominad","abonad","abordad","aborrascad","aborrecid","aborregad","abortad","abotagad","abotargad","abotonad","abovedad","aboyad","abracad","abrasad","abrazad","abrevad","abreviad","abribonad","abrigad","abrillantad","abrochad","abrogad","abroncad","abrotoñad","abrumad","abscedid","abscondid","absolutizad","absorbid","abstenid","abstergid","abstraíd","absuelt","abuchead","abultad","abundad","abuñolad","aburguesad","aburrid","aburujad","abusad","acabad","acaballad","acachetead","academizad","acaecid","acairelad","acalambrad","acalenturad","acallad","acalmad","acalorad","acamad","acampad","acampanad","acanalad","acantilad","acantonad","acañonead","acaparad","acaramelad","acardenalad","acariciad","acarread","acartonad","acastillad","acatad","acatarrad","acaudillad","accedid","accesad","accidentad","accionad","acechad","acedad","aceitad","acelerad","acendrad","acensad","acensuad","acentuad","acepillad","aceptad","acerad","acercad","acerrojad","acertad","acervad","acetad","acetificad","acezad","achacad","achaflanad","achantad","achaparrad","achatad","achatarrad","achicad","achicharrad","achicopalad","achinad","achispad","achocolatad","acholad","achorad","achuchad","acibarad","acicalad","acicatead","acidificad","acidulad","aciemad","acitronad","aclamad","aclarad","aclimatad","acobardad","acobijad","acodad","acoderad","acogid","acogotad","acojinad","acojonad","acolad","acolchad","acolchonad","acolitad","acollad","acollarad","acometid","acomodad","acompañad","acompasad","acomplejad","acondicionad","aconductad","acongojad","aconsejad","acontecid","acopiad","acoplad","acoquinad","acorad","acorazad","acorchad","acordad","acordonad","acorralad","acorrid","acortad","acosad","acostad","acostumbrad","acotad","acotejad","acotolad","acovachad","acrecentad","acrecid","acreditad","acreíd","acremad","acrianzad","acribillad","acriminad","acrisolad","acristalad","activad","actuad","actualizad","acuantiad","acuarelad","acuartelad","acuatizad","acuchillad","acuciad","acuclillad","acudid","acuerpad","acuitad","aculad","aculebrad","aculturad","acumulad","acunad","acuñad","acurrucad","acusad","adamad","adamascad","adaptad","adarvad","adecentad","adecuad","adehesad","adelantad","adelgazad","ademad","adentrad","aderezad","adestrad","adeudad","adherid","adiad","adicionad","adiestrad","adietad","adinerad","adivinad","adjetivad","adjudicad","adjuntad","administrad","admirad","admitid","adobad","adocenad","adoctrinad","adolecid","adoptad","adoquinad","adorad","adormecid","adormid","adormilad","adornad","adosad","adquirid","adscript","adscrit","aducid","adueñad","adujad","adulad","adulterad","adurid","advenid","adverad","adversad","advertid","advocad","adyacid","aerad","aerografiad","aerotransportad","afamad","afanad","afantasmad","afead","afectad","afeitad","afelpad","afeminad","aferrad","afianzad","aficionad","afiebrad","afilad","afiliad","afiligranad","afinad","afincad","afirmad","aflamencad","afligid","aflojad","aflorad","afluid","aforad","aforrad","afortunad","afrancesad","afrentad","africanizad","afrontad","agachad","agarrad","agarrotad","agasajad","agavillad","agazapad","agenciad","agendad","agermanad","aggiornad","agigantad","agilipollad","agilizad","agitad","agitanad","aglomerad","aglutinad","agobiad","agolpad","agonizad","agorad","agostad","agotad","agraciad","agradad","agradecid","agrandad","agravad","agraviad","agredid","agregad","agremiad","agriad","agrietad","agringad","agripad","agrisad","agrumad","agrupad","aguad","aguaitad","aguantad","aguapad","aguardad","agudizad","agüevad","aguijad","aguijonead","aguisad","agüitad","agujerad","agujeread","agusanad","aguzad","ahajad","ahechad","aherrojad","aherrumbrad","ahijad","ahilad","ahincad","ahinojad","ahitad","ahogad","ahondad","ahorcad","ahorcajad","ahormad","ahorquillad","ahorrad","ahuecad","ahumad","ahusad","ahuyentad","airad","airead","aislad","ajad","ajamonad","ajardinad","ajetread","ajuarad","ajuntad","ajustad","ajusticiad","alabad","alabead","alaciad","alambicad","alambrad","alampad","alancead","alardead","alargad","alarmad","albead","albergad","alboread","alborotad","alborozad","alburead","alcahuetead","alcalinizad","alcanforad","alcantarillad","alcanzad","alcoholad","alcoholizad","alcorzad","alead","aleatorizad","alebrestad","aleccionad","alechugad","alegad","alegorizad","alegrad","alejad","alelad","alentad","alertad","aletargad","aletead","alevantad","alfabetizad","alfalfad","alfombrad","algodonad","alhajad","aliad","alicatad","alienad","aligerad","alijad","alijarad","alimentad","alindad","alinead","aliñad","alisad","alistad","aliviad","alivianad","allanad","allegad","almacenad","almagrad","almenad","almendrad","almibarad","almidonad","almizclad","almohadillad","almohazad","almorzad","alocad","alojad","alongad","alquilad","alquitarad","alquitranad","altead","alterad","altercad","alternad","aluciflipad","alucinad","aludid","alumbrad","alunizad","aluzad","alzad","amacollad","amad","amadrinad","amaestrad","amagad","amainad","amaitinad","amalgamad","amamantad","amancebad","amancillad","amanecid","amanerad","amansad","amanzanad","amañad","amarad","amargad","amariconad","amarillead","amarillecid","amarizad","amarrad","amartelad","amartillad","amartizad","amasad","amasijad","ambicionad","ambientad","amblad","ambulad","amedrentad","amelcochad","amenazad","amenguad","amenizad","americanizad","ameritad","amerizad","ametrallad","amigad","amilanad","aminorad","amistad","amnistiad","amoblad","amodorrad","amohinad","amojamad","amojonad","amolad","amoldad","amonad","amonedad","amonestad","amontonad","amoratad","amordazad","amorrad","amortajad","amortiguad","amortizad","amoscad","amostazad","amotinad","amovid","amparad","ampliad","amplificad","ampollad","amputad","amueblad","amurad","amurallad","amurrad","amusgad","anadead","analizad","anarquizad","anastomosad","anatematizad","anchad","anclad","ancorad","andad","andaluzad","andamiad","aneblad","anegad","anestesiad","anexad","anexionad","anglicanizad","anglificad","angostad","angulad","angustiad","anhelad","anidad","anihilad","anillad","animad","animalizad","aniñad","aniquilad","anisad","anochecid","anodizad","anonadad","anonimizad","anotad","anoticiad","anquilosad","ansiad","antagonizad","antecedid","antecogid","antedatad","antedich","antepagad","antepasad","antepuest","antevenid","antevist","anticipad","anticuad","antiguad","antojad","antologad","antologizad","antropizad","antropomorfizad","anualizad","anublad","anudad","anulad","anunciad","añadid","añejad","añorad","añublad","añudad","aojad","aovad","apabullad","apacentad","apachad","apachurrad","apaciguad","apadrinad","apagad","apalabrad","apalancad","apalead","apalizad","apanad","apandad","apaniguad","apantallad","apañad","apapachad","aparad","aparatad","aparcad","aparead","aparecid","aparejad","aparentad","apartad","apasionad","apatrullad","apayasad","apead","apechugad","apedazad","apedrad","apedread","apegad","apelad","apellidad","apelmazad","apelotad","apelotonad","apenad","apencad","apercibid","aperrad","aperread","apersonad","apertrechad","aperturad","apesadumbrad","apesarad","apestad","apetecid","apiadad","apilad","apiñad","apiolad","apipad","apisonad","aplacad","aplanad","aplanchad","aplastad","aplatanad","aplaudid","aplazad","aplegad","aplicad","aplomad","apocad","apocopad","apodad","apoderad","apolillad","apoltronad","apoquinad","aporread","aportad","aposentad","apostad","apostatad","apostillad","apostrofad","apoyad","apreciad","aprehendid","apremiad","aprendid","apresad","aprestad","apresurad","apretad","apretujad","apriscad","aprisionad","aprobad","aproblemad","aprontad","apropiad","apropriad","aprovechad","aprovisionad","aproximad","aptad","apuest","apuntad","apuntalad","apuntillad","apuñalad","apurad","aquejad","aquerenciad","aquietad","aquilatad","arabizad","arad","arañad","araucanizad","arbitrad","arbolad","arborizad","archivad","arcillad","ardid","arenad","arengad","argentad","argüendead","argüid","argumentad","arietad","armad","armonizad","aromad","aromatizad","arpegiad","arponad","arponead","arquead","arrabalizad","arracimad","arraigad","arramblad","arramplad","arrancad","arranchad","arrasad","arrastrad","arread","arrebañad","arrebatad","arrebolad","arrebujad","arreciad","arrecid","arredrad","arregazad","arreglad","arrejuntad","arrellanad","arremangad","arrematad","arremedad","arremetid","arremolinad","arrempujad","arrendad","arrepentid","arrestad","arriad","arribad","arriesgad","arrimad","arrinconad","arriostrad","arriscad","arrobad","arrodillad","arrogad","arrojad","arrollad","arromad","arropad","arrostrad","arroyad","arruad","arrugad","arruinad","arrullad","arrumad","arrumbad","articulad","artillad","aruñad","asad","asaetead","asalariad","asaltad","ascendid","asead","asechad","asediad","asegurad","asemejad","asenderead","asentad","asentid","aserrad","aserruchad","asesinad","asesorad","asestad","aseverad","asfaltad","asfixiad","asid","asignad","asilad","asilvestrad","asimilad","asistid","asociad","asolad","asolead","asomad","asombrad","asonantad","asordad","aspad","asperjad","aspirad","asquead","astillad","astreñid","astringid","astriñid","asturianizad","asumid","asustad","atacad","atad","atajad","atalayad","atañid","atarantad","atarazad","ataread","atarragad","atarugad","atascad","ataviad","atemorizad","atemperad","atenacead","atenazad","atendid","atenid","atentad","atenuad","aterid","aterrad","aterrazad","aterrizad","aterrorizad","atesad","atesorad","atestad","atestiguad","atezad","atiborrad","atiesad","atildad","atinad","atirantad","atisbad","atizad","atollad","atolondrad","atomizad","atontad","atorad","atorgad","atormentad","atornillad","atorrad","atosigad","atracad","atragantad","atraíd","atraillad","atrancad","atrapad","atrasad","atravesad","atreguad","atrevid","atribuid","atribulad","atrincherad","atrofiad","atrojad","atronad","atropad","atropellad","atufad","aturad","aturdid","aturrullad","aturullad","atusad","audicionad","auditad","augmentad","augurad","aullad","aumentad","aunad","aupad","aureolad","auscultad","ausentad","auspiciad","autenticad","autentificad","autoabastecid","autoadiestrad","autoadministrad","autoafirmad","autoaislad","autoalimentad","autoanalizad","autoaplicad","autoasignad","autobautizad","autobloquead","autobombead","autocalificad","autocensurad","autocompletad","autoconducid","autoconsiderad","autoconsumid","autoconvocad","autocoronad","autocorregid","autocremad","autodeclarad","autodefendid","autodefinid","autodelatad","autodenominad","autodescartad","autodescript","autodescrit","autodestruid","autodeterminad","autodirigid","autodisuelt","autoeditad","autoeliminad","autoengañad","autoensamblad","autoevacuad","autoevaluad","autoexcluid","autoexigid","autoexiliad","autoexplotad","autofinanciad","autogestionad","autogobernad","autografiad","autoidentificad","autoimpuest","autoinculpad","autoinmolad","autolesionad","autolimitad","automarginad","automatizad","automedicad","automejorad","automutilad","autonombrad","autonomizad","autopagad","autoparodiad","autopreparad","autopresentad","autoproclamad","autoproducid","autoprogramad","autopromocionad","autopropagad","autoprotegid","autopublicad","autoreconocid","autoregulad","autorizad","autorrealizad","autorreconocid","autorregulad","autorreportad","autorreproducid","autorretratad","autosabotead","autotitulad","auxiliad","avalad","avalentad","avalorad","avaluad","avanzad","avasallad","avecinad","avecindad","avellanad","avenid","aventad","aventajad","aventurad","averad","avergonzad","averiad","averiguad","avezad","aviad","avinagrad","avisad","avispad","avistad","avituallad","avivad","avizorad","avocad","avulsionad","ayudad","ayunad","ayuntad","ayustad","azadonad","azafranad","azarad","azogad","azolvad","azorad","azotad","azucarad","azufrad","azulad","azulead","azulejad","azuzad","babead","babosead","bachaquead","bachead","badajead","bailad","bailotead","bajad","bajonead","balacead","balad","balancead","balbucead","balbucid","balcanizad","balconead","baldad","baldead","balead","balizad","balotad","balsead","bambolead","banalizad","bancad","bancarizad","bandead","banderillead","banead","banquetead","bañad","baptizad","baquetead","baquiad","barajad","barajead","baratad","barbad","barbarizad","barbechad","barbotad","barbotead","baremad","barequead","barloventead","barnizad","barrad","barread","barrenad","barretead","barrid","barritad","barruntad","basad","basculad","bastad","bastardead","bastid","bastonead","basuread","batallad","batead","batid","bautizad","baylad","beatificad","bebid","becad","becerread","bendecid","bendit","beneficiad","berread","besad","besucad","besuquead","bichead","bifurcad","bilateralizad","binad","bioacumulad","bioconcentrad","biodegradad","biodiversificad","biofortificad","biografiad","biosintetizad","birlad","bisad","bisbisad","bisecad","biselad","bizcad","bizmad","bizquead","blandead","blandid","blanquead","blanquecid","blasfemad","blasonad","blindad","blocad","blofead","bloguead","bloquead","bobead","bobinad","bochad","bocinad","bofetead","bogad","boicotead","bojad","bojead","bolead","boletead","boletinad","bolivianizad","bolsead","bombardead","bombead","bonificad","bootead","boquead","borbollad","borbotad","borbotead","bordad","bordead","bordonead","borrad","borrajead","borronead","bosad","bosquejad","bostezad","botad","botanizad","botead","botonad","botonead","boxead","boyad","bracead","bramad","brasead","bread","bregad","brezad","bridad","brillad","brincad","brindad","britanizad","brizad","bromead","broncead","brotad","brujulead","bruñid","brutalizad","bucead","buelt","bufad","bufonead","buitread","bulead","bullid","burbujead","burilad","burlad","burocratizad","buscad","buzad","buzonead","bypasead","cabalgad","cabecead","cabestrad","cabestread","cabid","cabildead","cabizbajad","cablead","cablegrafiad","cabrahigad","cabread","cabrestead","cabrillead","cabriolad","cabriolead","çabullid","caçad","cacaread","cachad","cachead","cachetead","cachimbead","cachiporread","cachondead","cachuread","caducad","cafichad","cafichead","cagad","caíd","cairelad","cajonead","calabriad","calad","calafatead","calcad","calcetad","calcificad","calcinad","calculad","caldead","calefaccionad","calefactad","calendarizad","calentad","calibrad","calificad","caligrafiad","callad","callejead","calmad","calumniad","calzad","cambalachad","cambalachead","cambiad","camelad","caminad","camorread","camotead","campad","campanead","campead","campeonad","camuflad","camuflajead","canalizad","cancanead","cancelad","cancerad","candad","candidatad","candidatead","candidatizad","canead","canibalizad","canjead","canonizad","cansad","cantad","cantead","cantinflead","canturread","canturriad","cañonead","caotizad","capacitad","capad","capead","capitalizad","capitanead","capitulad","capolad","capotad","capotead","capsulad","captad","capturad","capuzad","caracolead","caracterizad","caramelizad","caratulad","carbonad","carbonead","carbonizad","carburad","carburizad","carcajead","carcomid","cardad","caread","carecid","carenad","cargad","cariad","caricaturad","caricaturizad","cariciad","carminad","carnavalead","carnavalizad","carnead","carnetizad","carpid","carraspead","carretead","carrilead","carrozad","cartead","cartelizad","carteread","cartografiad","casad","cascabelead","cascad","castañead","castañetead","castellanizad","castigad","castrad","catabolizad","catad","catalanizad","catalizad","catalogad","catapultad","catead","categorizad","catequizad","cativad","catolizad","caucionad","causad","cautelad","cauterizad","cautivad","cavad","cavilad","cazad","cebad","cecead","cedid","cedulad","cegad","cejad","celad","celebrad","cementad","cenad","cencerread","cendrad","censad","censurad","centellad","centellead","centrad","centralizad","centrifugad","centuplicad","ceñid","cepillad","cercad","cercenad","cerchad","cerciorad","cerdead","cernid","cerrad","certificad","cesad","cesantead","cespitad","chachad","chacharead","chacotead","chafad","chafardead","chalad","chamarilead","chambead","champurrad","chamullad","chamuscad","chamuyad","chancead","chancletead","chanelad","changuead","chantajead","chantead","chapad","chapalead","chapead","chapotead","chapucead","chapurrad","chapurread","chapuzad","chaquetead","charlad","charlatanead","charlotead","charolad","charquead","chascad","chasquead","chatead","chavetead","checad","chequead","chicanead","chichad","chicharrad","chicotead","chiflad","chillad","chinchad","chinead","chingad","chinguead","chipead","chiquead","chirlad","chirriad","chismead","chismorread","chismosead","chispad","chispead","chisporrotead","chistad","chivad","chivatead","chocad","chochead","chollad","chopead","choread","chorizad","chorread","chotad","chotead","chufad","chulead","chupad","chupetead","churrascad","churrasquead","churruscad","chusmead","chutad","chuzad","ciad","ciberacosad","cicatrizad","cifrad","cilindrad","cimad","cimblad","cimbrad","cimbread","cimentad","cincelad","cinchad","cinematografiad","cinglad","cintilad","circuid","circulad","circuncidad","circundad","circunferid","circunnavegad","circunscript","circunscrit","circunstanciad","circunvalad","circunvenid","circunvolad","ciscad","citad","ciudadanizad","civilizad","cizallad","cizañad","cizañead","clamad","clamoread","claread","clarificad","clasificad","claudicad","clausurad","clavad","clavetead","clicad","climatizad","cliquead","clocad","clonad","cloquead","clorad","clorinad","cloroformizad","coaccionad","coactuad","coadyuvad","coagulad","coaligad","coanimad","coartad","coauspiciad","cobijad","cobrad","cocead","cocid","cocinad","cocread","codead","codesarrollad","codescubiert","codiciad","codificad","codirigid","coeditad","coescript","coescrit","coestructurad","coevolucionad","coexistid","cofabricad","cofinanciad","cofundad","cogid","cogitad","cogobernad","cohabitad","cohechad","cohesionad","cohibid","cohondid","cohonestad","coimead","coincidid","cojead","colaborad","colad","colapsad","colchad","colead","coleccionad","colectad","colectivizad","colegiad","colegid","coleguead","colgad","colidid","coligad","colimad","colindad","colisionad","colmad","colmatad","colocad","colonizad","colorad","coloread","colorid","coludid","columbrad","columpiad","comadread","comandad","combad","combatid","combinad","comedid","comentad","comenzad","comerciad","comercializad","cometid","comid","comisad","comisariad","comiscad","comisionad","comisquead","compactad","compadecid","compadrad","compadread","compaginad","comparad","comparecid","compartid","compartimentad","compartimentalizad","compasad","compatibilizad","compelid","compendiad","compenetrad","compensad","competid","compilad","compinchad","complacid","complejizad","complementad","completad","complicad","complotad","comportad","compostad","comprad","comprehendid","comprendid","comprimid","comprobad","comprometid","compuest","compulsad","compungid","compurgad","computad","computarizad","computerizad","comulgad","comunicad","comunitarizad","concadenad","concatenad","concebid","concedid","concelebrad","concentrad","conceptuad","conceptualizad","concernid","concertad","concesionad","conchabad","concienciad","concientizad","conciliad","concitad","concluid","concordad","concretad","concretizad","conculcad","concurrid","concursad","condecorad","condenad","condensad","condesad","condescendid","condich","condicionad","condimentad","condolid","condonad","conducid","conectad","conexionad","confabulad","confeccionad","confederad","conferenciad","conferid","confesad","confiad","configurad","confinad","confirmad","confiscad","confitad","conflictuad","confligid","confluid","conformad","confortad","confraternizad","confrontad","confundid","congelad","congeniad","congestionad","conglomerad","congojad","congraciad","congratulad","congregad","conhortad","conjeturad","conjugad","conjuntad","conjurad","conllevad","conmemorad","conmensurad","conminad","conmocionad","conmovid","conmutad","connaturalizad","connotad","conocid","conquistad","consagrad","conseguid","consejad","consensuad","consentid","conservad","considerad","consignad","consistid","consolad","consolidad","consonad","consorciad","conspirad","constad","constatad","constelad","consternad","constipad","constitucionalizad","constituid","constreñid","construid","consultad","consumad","consumid","contabilizad","contactad","contad","contagiad","contaminad","contemplad","contemporizad","contendid","contenid","contentad","contestad","contextuad","contextualizad","continuad","contonead","contornad","contornead","contorsionad","contraargumentad","contraatacad","contrabalancead","contrabandead","contrademandad","contradich","contragolpead","contrahech","contraíd","contraindicad","contramandad","contramarchad","contrapesad","contraprogramad","contrapuest","contrapuntead","contrargumentad","contrariad","contrarrestad","contrastad","contratacad","contratad","contravenid","contribuid","contristad","controlad","controvertid","contundid","conturbad","contusionad","convalecid","convalidad","convencid","convenid","convergid","conversad","convertid","convidad","convivid","convocad","convulsionad","conzederad","cooperad","cooperativizad","cooptad","coordenad","coordinad","coorganizad","copad","copatrocinad","copead","copetead","copiad","copilotad","copresentad","copresidid","coproducid","coprotagonizad","copulad","coquetead","coquificad","corcovead","coread","coreografiad","corlad","corlead","cornead","coronad","corporizad","corregid","correlacionad","correspondid","corresponsabilizad","corretead","corrid","corroborad","corroíd","corrompid","corrugad","cortad","cortejad","cortocircuitad","corvad","coscad","cosechad","cosid","cosificad","cosmetizad","cosquillead","costad","costead","cotejad","cotillead","cotizad","cotorread","crackead","cranead","cread","crecid","creíd","cremad","creosotad","crepitad","crespad","crevad","criad","cribad","criminad","criminalizad","crinad","criogenizad","criopreservad","crismad","crispad","cristalizad","cristianad","cristianizad","cristinead","criticad","croad","cromad","cronificad","cronometrad","crotorad","crotoread","crucificad","crujid","cruzad","cuadrad","cuadriculad","cuadriplicad","cuadruplicad","cuajad","cualificad","cuantificad","cuantizad","cuartead","cuartelad","cuatriplicad","cubanizad","cubicad","cubiert","cubijad","cuchad","cucharead","cuchichead","cuchuchead","cueread","cuerpead","cuestionad","cuetead","cuidad","cuitad","culead","culebread","culiad","culminad","culpabilizad","culpad","cultivad","culturad","culturalizad","culturizad","cumplid","cumplimentad","cumulad","cundid","cunead","cuñad","cuotead","curad","curiosead","currad","currelad","cursad","curtid","curvad","curvead","custodiad","customizad","dactilografiad","dad","damnificad","danzad","dañad","dañinead","darlusad","datad","datead","deambulad","debatid","debelad","debid","debilitad","debitad","debutad","decaíd","decantad","decapad","decapitad","decebid","decelerad","decepcionad","decidid","decimalizad","declamad","declarad","declinad","decodificad","decolad","decolorad","decomisad","decomisionad","deconstruid","decorad","decrecid","decrementad","decretad","decuplad","decuplicad","decusad","dedead","dedicad","deducid","defecad","defeccionad","defendid","defenestrad","defensad","deferid","definid","deflagrad","deflectad","deflorad","defoliad","deforestad","deformad","defosforilad","defraudad","degenerad","deglutid","degollad","degradad","degustad","deificad","dejad","delaminad","delatad","delegad","deleitad","deletread","deleznad","delgazad","deliberad","delimitad","delinead","delinquid","delirad","deludid","demacrad","demandad","demaquillad","demarcad","demarrad","demediad","demeritad","democratizad","demodulad","demolid","demonizad","demorad","demostrad","demudad","denegad","denigrad","denodad","denominad","denostad","denotad","densificad","dentad","dentellead","dentrad","denudad","denunciad","deparad","departid","depauperad","dependid","depilad","deplorad","deportad","depositad","depravad","deprecad","depreciad","depredad","deprimid","depuest","depurad","deputad","derechizad","derelinquid","derivad","derogad","derramad","derrapad","derrelinquid","derrengad","derretid","derribad","derrocad","derrochad","derrot","derrotad","derruid","derrumbad","desabastecid","desabejad","desabotonad","desabrid","desabrigad","desabrochad","desacatad","desacelerad","desacertad","desacomodad","desaconsejad","desacoplad","desacordad","desacostumbrad","desacralizad","desacreditad","desactivad","desactualizad","desaduanizad","desafectad","desafiad","desafilad","desafiliad","desafinad","desaforad","desagotad","desagradad","desagradecid","desagraviad","desagregad","desaguad","desahijad","desahogad","desahuciad","desainad","desairad","desajustad","desalad","desalentad","desalinead","desalinizad","desaliñad","desalmacenad","desalojad","desalquilad","desamad","desamarrad","desambiguad","desamistad","desamortizad","desamparad","desandad","desangrad","desanimad","desanudad","desapalancad","desaparead","desaparecid","desapasionad","desapegad","desaplicad","desaprendid","desaprobad","desaprovechad","desarbolad","desarchivad","desarenad","desarmad","desarraigad","desarreglad","desarrollad","desarropad","desarrugad","desarticulad","desasid","desasnad","desasosegad","desatad","desatascad","desatendid","desatentad","desatinad","desatornillad","desatracad","desatraillad","desatrancad","desautorizad","desavenid","desayunad","desazolvad","desazonad","desballestad","desbancad","desbandad","desbarajustad","desbaratad","desbarrad","desbarrancad","desbastad","desbloquead","desbocad","desbordad","desbotonad","desbravad","desbrozad","descabalgad","descabellad","descabezad","descachad","descachimbad","descaecid","descafeinad","descalabrad","descalibrad","descalificad","descalzad","descambiad","descaminad","descampad","descansad","descapitalizad","descarad","descarapelad","descarbonatad","descarbonizad","descarboxilad","descargad","descarnad","descarriad","descarrilad","descartad","descasad","descascarad","descascarillad","descastad","descatalogad","descendid","descentrad","descentralizad","desceñid","descerebrad","descerrajad","descertificad","deschavad","deschongad","descifrad","desclasad","desclasificad","desclavad","descobijad","descocad","descocid","descodificad","descogid","descogollad","descohesionad","descojonad","descolgad","descollad","descolocad","descolonizad","descombrad","descomedid","descomid","descompensad","descompilad","descompresionad","descomprimid","descompuest","descomulgad","desconcentrad","desconceptuad","desconcertad","desconchad","desconectad","desconfiad","descongelad","descongestionad","desconocid","desconsagrad","desconsiderad","desconsolad","desconsolidad","descontad","descontaminad","descontentad","descontextualizad","descontinuad","descontracturad","descontratad","descontrolad","desconvenid","desconvocad","descoordinad","descorazonad","descorchad","descordad","descornad","descorrid","descortezad","descosid","descostillad","descoyuntad","descreíd","descriminalizad","descript","descrit","descruzad","descuadrad","descuajad","descualificad","descuartizad","descubiert","descuidad","desdeñad","desdibujad","desdich","desdoblad","desdolarizad","desdorad","desdramatizad","desead","desecad","desechad","desembalad","desembalsad","desembarazad","desembarcad","desembargad","desembarrancad","desembocad","desembolsad","desembolsillad","desemborrachad","desembozad","desembragad","desembrollad","desembrujad","desembuchad","desempacad","desempalmad","desempañad","desempaquetad","desempatad","desempedrad","desempeñad","desempolvad","desenamorad","desencabestrad","desencadenad","desencajad","desencallad","desencaminad","desencantad","desencasillad","desencerrad","desenchufad","desenclavad","desencontrad","desencorsetad","desencorvad","desencriptad","desendeudad","desenfadad","desenfardelad","desenfocad","desenfrenad","desenfundad","desenganchad","desengañad","desengrasad","desenlazad","desenmarañad","desenmascarad","desenojad","desenredad","desenrollad","desenroscad","desensamblad","desensibilizad","desensillad","desentendid","desenterrad","desentonad","desentrañad","desentubad","desentumecid","desenvainad","desenvuelt","desequilibrad","desertad","desertificad","desertizad","desescalad","desescolarizad","desescombrad","desesperad","desesperanzad","desestabilizad","desestacionalizad","desestimad","desestimulad","desestresad","desestructurad","desfalcad","desfallecid","desfasad","desfascistizad","desfavorecid","desfigurad","desfilad","desfinanciad","desflecad","desflorad","desfogad","desfondad","desforzad","desfragmentad","desgajad","desganad","desgañitad","desgarrad","desgastad","desglasad","desglosad","desgobernad","desgonzad","desgraciad","desgranad","desgravad","desguanguañad","desguarnecid","desguazad","desgubernamentalizad","desguinzad","deshabilitad","deshabitad","deshabituad","deshebrad","deshech","deshelad","desheredad","deshidratad","deshidrogenizad","deshilachad","deshilad","deshilvanad","deshinchad","deshojad","deshonorad","deshonrad","deshuesad","deshumanizad","deshumidificad","desidentificad","desideologizad","designad","desilusionad","desimpresionad","desimputad","desincentivad","desincorporad","desincronizad","desincrustad","desindustrializad","desinfectad","desinflad","desinflamad","desinformad","desinhibid","desinsectad","desinstalad","desintegrad","desinteresad","desintoxicad","desinvertid","desionizad","desistid","desjarretad","desjudicializad","deslastrad","deslavad","deslazad","deslegitimad","desleíd","deslenguad","desliad","desligad","deslindad","deslizad","deslocalizad","deslomad","deslucid","deslumbrad","deslustrad","desmadejad","desmadrad","desmalezad","desmandad","desmantelad","desmaquillad","desmarcad","desmarimbad","desmasculinizad","desmaterializad","desmayad","desmedid","desmedrad","desmejorad","desmelenad","desmembrad","desmentid","desmenuzad","desmerecid","desmeritad","desmesurad","desmigad","desmigajad","desmilitarizad","desminad","desmitificad","desmochad","desmoldad","desmonetizad","desmontad","desmonterad","desmoralizad","desmoronad","desmotad","desmotivad","desmovilizad","desmuert","desnacid","desnacionalizad","desnatad","desnaturalizad","desnivelad","desnortad","desnucad","desnuclearizad","desnudad","desnutrid","desobedecid","desobligad","desobstruid","desoccidentalizad","desocupad","desodorizad","desoíd","desolad","desoldad","desollad","desorbitad","desordenad","desorejad","desorganizad","desorientad","desornamentad","desosad","desosegad","desovad","desovillad","desoxigenad","despabilad","despachad","despachurrad","despampanad","despanzurrad","desparasitad","desparecid","desparpajad","desparramad","despartidizad","despatarrad","despechad","despedazad","despedid","despegad","despeinad","despejad","despellejad","despelotad","despeluzad","despenad","despenalizad","despeñad","despepitad","desperad","despercudid","desperdiciad","desperdigad","desperecid","desperezad","despersonalizad","despertad","despezad","despicad","despiezad","despilfarrad","despintad","despiojad","despistad","desplantad","desplazad","desplegad","desplomad","desplumad","despoblad","despoetizad","despojad","despolarizad","despolitizad","despollad","despolvad","despolvoread","desportillad","desposad","desposeíd","despotizad","despotricad","despreciad","desprecintad","desprendid","despreocupad","desprestigiad","desprivatizad","desprofesionalizad","desprogramad","desprotegid","desprotonad","desproveíd","desprovist","despuntad","desquebrajad","desquiciad","desquitad","desrabad","desrabotad","desratizad","desregulad","desregularizad","destacad","destapad","destartalad","destazad","destechad","destejid","destellad","destemplad","destendid","destensad","desteñid","desternillad","desterrad","destetad","destilad","destinad","destituid","destocad","destorcid","destornillad","destorvad","destrabad","destrancad","destratad","destrenzad","destrepad","destripad","destrocad","destronad","destroncad","destrozad","destruid","destupid","desturcad","desubicad","desunid","desuscript","desuscrit","desvaíd","desvainad","desvalijad","desvalorizad","desvanecid","desvariad","desvasad","desvelad","desvenad","desvencijad","desventad","desventajad","desventrad","desvertebrad","desvestid","desviad","desvinculad","desvirgad","desvirtuad","desvivid","detallad","detectad","detenid","detentad","detergid","deteriorad","determinad","detestad","detonad","detoxificad","detraíd","deturpad","devaluad","devanad","devastad","develad","devengad","devenid","devid","devisad","devorad","devuelt","dexad","dezmad","diabolizad","diafragmad","diagnosticad","diagonalizad","diagramad","dializad","dialogad","diamantad","dibujad","dich","dicotomizad","dictad","dictaminad","dietad","diezmad","difamad","diferenciad","diferid","dificultad","difractad","difuminad","difundid","digerid","digitad","digitalizad","dignad","dignificad","dilapidad","dilatad","diligenciad","dilucidad","diluid","dimanad","dimensionad","dimerizad","dimidiad","dimisionad","dimitid","dinamitad","dinamizad","diñad","diplomad","dippead","diptongad","diputad","direccionad","dirigid","dirimid","discad","discapacitad","discernid","disciplinad","discontinuad","discordad","discrepad","discretead","discriminad","disculpad","discurrid","discursad","discursead","discutid","disecad","diseccionad","disectad","diseminad","disentid","diseñad","disertad","disfamad","disfrazad","disfrutad","disgregad","disgustad","disimulad","disipad","dislocad","disminuid","disociad","disonad","disparad","disparatad","dispensad","dispensarizad","dispersad","dispuest","disputad","distad","distanciad","distendid","distilad","distinguid","distorsionad","distraíd","distribuid","disturbad","disuadid","disuelt","divagad","divergid","diversificad","divertid","dividid","divinad","divinizad","divisad","divorciad","divulgad","doblad","doblegad","dobletead","doctorad","doctrinad","documentad","dogmatizad","dolad","dolarizad","dolid","domad","domeñad","domesticad","domiciliad","dominad","donad","doñead","dopad","dorad","dormid","dormitad","dosificad","dotad","dovelad","draftead","dragad","dragonead","dramatizad","drapead","drenad","driblad","driblead","drogad","dubdad","duchad","dudad","dulcificad","duplicad","durad","echad","eclipsad","eclosionad","economizad","ecualizad","edificad","editad","editorializad","educad","educid","edulcorad","efectivizad","efectuad","efeminad","eficientad","eficientizad","efundid","egresad","ejecutad","ejecutoriad","ejemplarizad","ejemplificad","ejercid","ejercitad","elaborad","elect","electoralizad","electrificad","electrizad","electrocutad","elegid","elevad","elidid","eligid","elijad","eliminad","elogiad","elongad","elucidad","elucubrad","eludid","eluid","emanad","emancipad","emasculad","embadurnad","embaíd","embalad","embaldosad","embalsad","embalsamad","embanderad","embarazad","embarcad","embargad","embarrad","embarrancad","embarullad","embasad","embastad","embaucad","embaulad","embazad","embebecid","embebid","embejucad","embelecad","embelesad","embellecid","embestid","embetunad","emblanquecid","embobad","embocad","embodegad","embolad","embolizad","embolsad","embolsillad","embonad","emboquillad","emborrachad","emborronad","emboscad","embotad","embotellad","embovedad","embozad","embozalad","embragad","embravecid","embrazad","embread","embretad","embriagad","embridad","embrollad","embromad","embrujad","embrutecid","embuchad","embullad","embustead","embustid","embutid","emendad","emergid","emigrad","emitid","emocionad","empacad","empachad","empadronad","empalad","empalagad","empalidecid","empalizad","empalmad","empanad","empanizad","empantanad","empañad","empapad","empapelad","empapuciad","empapuzad","empaquetad","emparedad","emparejad","emparentad","emparrillad","empastad","empastillad","empatad","empatizad","empavad","empavesad","empecid","empecinad","empedernid","empedrad","empelad","empellad","empellid","empenachad","empeñad","empeorad","empequeñecid","emperad","emperejilad","emperifollad","emperrad","empezad","empiltrad","empinad","empingorotad","empitonad","emplatad","emplazad","emplead","emplomad","emplumad","empobrecid","empoderad","empodrecid","empollad","empolvad","emponzoñad","empotrad","empozad","emprendid","empreñad","emprestad","emproblemad","empujad","empuñad","emputad","emputecid","emulad","emulgid","emulsificad","emulsionad","emungid","enajenad","enalmagrad","enaltecid","enamorad","enamoriscad","enarbolad","enarcad","enardecid","enarenad","enastad","enbiad","encabad","encabalgad","encabestrad","encabezad","encabritad","encabronad","encachimbad","encadenad","encajad","encajonad","encalabozad","encalabrinad","encalad","encallad","encallecid","encalmad","encalzad","encamad","encaminad","encandilad","encanecid","encantad","encañonad","encaperuzad","encapotad","encaprichad","encapsulad","encapuchad","encapuzad","encarad","encaramad","encarcelad","encarecid","encargad","encariñad","encarnad","encarnecid","encarnizad","encarrilad","encartad","encasillad","encasquetad","encasquillad","encastad","encastillad","encastrad","encatusad","encausad","encauzad","encebad","enceguecid","encelad","encenagad","encendid","encenizad","encerad","encerrad","encestad","encetad","enchachad","enchapad","enchapopotad","encharcad","enchilad","enchinad","enchiquerad","enchironad","enchuecad","enchufad","enchuflad","enchulad","encimad","encintad","enclaustrad","enclavad","encofrad","encogid","encolad","encolerizad","encolumnad","encomendad","encomenzad","encomiad","enconad","enconchad","encontrad","encoñad","encopetad","encorajinad","encorazad","encordad","encornudad","encorsetad","encorvad","encostad","encostalad","encrespad","encriptad","encuadernad","encuadrad","encuartelad","encubad","encubertad","encubiert","encuclillad","encuerad","encuestad","enculad","encumbrad","encunetad","encurtid","endechad","endemoniad","enderezad","endeudad","endiablad","endilgad","endiñad","endiosad","endomingad","endosad","endrogad","endulzad","endurecid","enemistad","energizad","enervad","enfadad","enfangad","enfardad","enfatizad","enfebrecid","enfermad","enfervorizad","enfeudad","enfilad","enflacad","enflaquecid","enflorad","enfocad","enforcad","enfoscad","enfrascad","enfrenad","enfrentad","enfriad","enfrontad","enfundad","enfurecid","enfurruñad","engalanad","engalgad","engallad","enganchad","engangrenad","engañad","engarruchad","engarzad","engastad","engatillad","engatusad","engavetad","engendrad","englobad","engolfad","engolondrinad","engolosinad","engomad","engominad","engordad","engranad","engrandad","engrandecid","engrapad","engrasad","engravecid","engreíd","engrillad","engrilletad","engrosad","engrudad","engruesad","engrupid","enguacalad","enguantad","enguatad","enguirnaldad","engullid","enharinad","enhebrad","enherbolad","enhilad","enhornad","enjabonad","enjaezad","enjaguad","enjalbegad","enjalmad","enjambrad","enjaretad","enjaulad","enjoyad","enjuagad","enjugad","enjuiciad","enjuncad","enjutad","enlaciad","enladrillad","enlatad","enlazad","enlentecid","enlenzad","enlistad","enlodad","enloquecid","enlosad","enlozad","enlucid","enlutad","enmaderad","enmadrad","enmallad","enmanillad","enmarañad","enmarcad","enmarrocad","enmascarad","enmasillad","enmendad","enmohecid","enmoquetad","enmudecid","enmugrad","ennegrecid","ennoblecid","enojad","enorgullecid","enquistad","enrabietad","enracimad","enraizad","enramad","enranciad","enrarecid","enrasad","enratonad","enredad","enrejad","enrevesad","enrielad","enripiad","enriquecid","enriscad","enristrad","enrocad","enrojecid","enrolad","enrollad","enronquecid","enroscad","enrostrad","enrubiad","enrumbad","enrutad","ensalzad","ensamblad","ensanchad","ensangrentad","ensañad","ensartad","ensayad","ensebad","ensecad","enseñad","enseñoread","ensillad","ensimismad","ensoberbecid","ensobrad","ensogad","ensombrecid","ensoñad","ensopad","ensordecid","ensortijad","ensuciad","entablad","entablillad","entallad","entapizad","entecad","entendid","entenebrecid","enterad","entercad","enternecid","enterrad","entesad","entibiad","entiesad","entintad","entoldad","entomatad","entonad","entontecid","entorchad","entornad","entorpecid","entortijad","entrabad","entrad","entramad","entrampad","entrañad","entreabiert","entrecerrad","entrechocad","entrecomillad","entrecortad","entrecruzad","entredich","entregad","entrelazad","entremetid","entremezclad","entrenad","entreoíd","entresacad","entretejid","entretenid","entrevenid","entreverad","entrevist","entrevistad","entripad","entristecid","entrojad","entrometid","entronad","entroncad","entronizad","entropezad","entrujad","entubad","entumecid","entunicad","enturbiad","entusiasmad","enumerad","enunciad","envainad","envalentonad","envanecid","envarad","envasad","envejecid","envenenad","envergad","envergonzad","envestid","enviad","enviciad","envidad","envidiad","envigad","envilecid","enviscad","enviudad","envuelt","enyerbad","enyesad","enzacatad","enzarzad","epatad","epitomad","equidistad","equilibrad","equipad","equiparad","equivalid","equivocad","erguid","erigid","erizad","erogad","erosionad","erotizad","errad","erradicad","eructad","erupcionad","esbarad","esbozad","escabechad","escabiad","escabullid","escachad","escaecid","escalad","escaldad","escalentad","escalfad","escalofriad","escalonad","escamad","escamotead","escampad","escanciad","escandalizad","escandid","escanead","escapad","escaquead","escarabajead","escaramuzad","escarapelad","escarbad","escarchad","escardad","escariad","escarificad","escarmenad","escarmentad","escarnecid","escarpad","escasead","escatimad","escavad","escayolad","escenificad","escenografiad","escindid","esclarecid","esclavizad","esclerosad","esclerotizad","escobad","escobillad","escocid","escodad","escofinad","escogid","escolarizad","escoltad","escombrad","escondid","escoplead","escorad","escoriad","escorzad","escotad","escrachad","escript","escrit","escriturad","escrudiñad","escrupulizad","escrutad","escuadrad","escuadronad","escuchad","escudad","escudriñad","esculpid","escupid","escurrid","escusad","esencializad","esfollad","esforzad","esfumad","esgrafiad","esgrimid","esguazad","eslabonad","esleíd","esmaltad","esmerad","esmerilad","esmorecid","esnifad","espabilad","espachurrad","espaciad","espacializad","espantad","españolizad","esparcid","espartad","especiad","especializad","especificad","especulad","espejead","espeluznad","esperad","esperanzad","espesad","espetad","espiad","espichad","espigad","espinad","espirad","espiritualizad","esplanad","esplendid","esplicad","espolead","espoliad","espolvoread","esponjad","esponsorizad","espontanead","esposad","espresad","esprintad","espulgad","espumad","espumead","esputad","esquematizad","esquiad","esquilad","esquilmad","esquinad","esquinzad","esquivad","estabilizad","establecid","estabulad","estacad","estacionad","estacionalizad","estad","estafad","estallad","estampad","estampillad","estancad","estandarizad","estañad","estaquillad","estarcid","estatizad","estatuid","estelarizad","estendid","esterad","estercolad","estereotipad","esterificad","esterilizad","estetizad","estibad","estigmatizad","estilad","estilizad","estimad","estimulad","estipulad","estirad","estofad","estoquead","estorbad","estornudad","estozolad","estragad","estrangulad","estratificad","estrechad","estregad","estrellad","estremecid","estrenad","estreñid","estresad","estriad","estribad","estropead","estruchad","estructurad","estrujad","estucad","estudiad","esvarad","eterizad","eternizad","etimologizad","etiquetad","etoxilad","europeizad","euscaldunizad","euskaldunizad","evacuad","evadid","evaluad","evanescid","evangelizad","evaporad","evidenciad","eviscerad","evitad","evocad","evolucionad","exacerbad","exagerad","exaltad","examinad","exasperad","excarcelad","excavad","excedid","exceptuad","excitad","exclamad","exclaustrad","excluid","excomulgad","excoriad","excretad","exculpad","excusad","execrad","executad","exentad","exercitad","exfiltrad","exfoliad","exhalad","exhibid","exhortad","exhumad","exigid","exilad","exiliad","eximid","existid","existimad","exonerad","exorcizad","exornad","expandid","expansionad","expatriad","expectad","expectorad","expedicionad","expedid","expedientad","expeditad","expelid","expendid","experienciad","experimentad","expiad","expirad","explanad","explayad","explicad","explicitad","explorad","explosionad","explotad","expoliad","exponenciad","exportad","expresad","exprimid","expropiad","expuest","expugnad","expulsad","expurgad","extasiad","extendid","extenuad","exteriorizad","exterminad","externad","externalizad","extinguid","extirpad","extorsionad","extractad","extraditad","extraíd","extralimitad","extrañad","extrapolad","extravasad","extraviad","extremad","extrudid","extruid","extubad","exudad","exulcerad","exultad","eyaculad","eyectad","fabricad","fabulad","fachad","facilitad","factorizad","facturad","facultad","faenad","fagocitad","fajad","falagad","falcacead","faldead","fallad","fallecid","fallid","falsad","falsead","falsificad","faltad","familiarizad","fanatizad","fanfarronead","fantasead","fantasiad","fantasmead","farandulead","fardad","farfullad","farolead","farread","fascinad","fastidiad","fatigad","favelizad","favorecid","fech","fechad","fecundad","fecundizad","fedatad","fedatead","federad","federalizad","felicitad","femad","feminizad","fenecid","feriad","fermentad","ferrad","fertilizad","fervorizad","festejad","festinad","festonad","festonead","fetichizad","fiad","fibrilad","ficad","ficcionad","ficcionalizad","fichad","fidelizad","figurad","fijad","filad","fildead","filetead","filiad","filmad","filosofad","filtrad","finad","finalizad","financiad","fincad","fingid","finid","finiquitad","fintad","firmad","fiscalizad","fisgad","fisgonead","fisionad","fisurad","flagelad","flambead","flamead","flanquead","flaquead","flechad","fletad","flexead","flexibilizad","flexionad","flipad","flirtead","flojead","florad","floread","florecid","floretead","flotad","fluctuad","fluid","fluidizad","fluorad","focalizad","foguead","folgad","foliad","follad","folletead","fomentad","fondead","forcejad","forcejead","forestad","forjad","formad","formalizad","formatead","formulad","fornicad","forrad","forrajead","fortalecid","fortificad","forzad","fosfatad","fosfatizad","fosforecid","fosforescid","fosforilad","fosilizad","fotocopiad","fotografiad","fotoshopead","fracasad","fraccionad","fracturad","fragilizad","fragmentad","fraguad","franelead","frangid","franjead","franquead","franquiciad","frasead","fraternizad","frecuentad","fregad","fregotead","freíd","frenad","frentead","fresad","frezad","friccionad","frisad","frit","fritad","frivolizad","frizad","frotad","fructificad","fruid","fruncid","frustrad","frutad","fufad","fugad","fulgid","fulgurad","fulminad","fumad","fumblead","fumigad","funad","funcionad","fundad","fundamentad","fundid","fungid","fuñid","furtad","furulad","fusilad","fusionad","fustigad","gafad","gaguead","galantead","galardonad","galguead","gallardead","gallead","gallofead","galonead","galopad","galopead","galvanizad","gamberread","gambetead","ganad","gandujad","gandulead","gangrenad","ganguead","gañid","garabatead","garantid","garantizad","garapiñad","garbad","garchad","gargarizad","garlad","garpad","garrapatead","garrapiñad","garronead","garrotead","gasead","gasificad","gastad","gatead","gatillad","gayad","gelatinizad","gelificad","gemid","geminad","generad","generalizad","genotipad","gentrificad","geobloquead","geolocalizad","georeferenciad","georreferenciad","gerenciad","germanizad","germinad","gestad","gesticulad","gestionad","gibad","gilipollead","gimotead","girad","giroelongad","gitanead","glasead","globalizad","gloriad","glorificad","glosad","glotalizad","glotonead","gobernad","golead","golfead","golosead","golpead","golpetead","googlead","gorgotead","gorjead","gorread","gorronead","gostead","gotead","gozad","grabad","gradad","graduad","graffitead","graficad","grafitead","granad","granead","granizad","granjead","granulad","grapad","gratificad","gratinad","gravad","gravitad","graznad","grillad","griñotad","gripad","gritad","gruñid","guacaread","guadañad","guapead","guarachead","guardad","guarecid","guarid","guarnecid","guarnid","guasapead","guataquead","guayad","guerread","guglead","guiad","guillotinad","guinchad","guindad","guiñad","guionad","guionizad","guisad","guitarread","gulusmead","gustad","habid","habilitad","habitad","habituad","hablad","hacendad","hachad","hacinad","hackead","halad","halagad","hallad","halogenad","hamacad","hamaquead","hambread","hanguead","haraganead","hartad","hastiad","hech","hechizad","hedid","hegemonizad","helad","helenizad","helitransportad","henchid","hendid","heñid","herbad","herborizad","heredad","herid","hermanad","hermandad","hermetizad","hermosead","herniad","herrad","herrumbrad","hervid","hesitad","hibernad","hibridad","hidratad","hidrogenad","hidrolizad","higienizad","hilad","hilvanad","hincad","hinchad","hipad","hiperactivad","hiperbolizad","hipertrofiad","hiperventilad","hipnotizad","hipotecad","hipotetizad","hisopad","hispanizad","hispid","historiad","hocicad","hociquead","hojaldrad","hojead","holgad","holgazanead","hollad","hombread","homenajead","homogeneizad","homologad","homosexualizad","honestad","honorad","honrad","horadad","horizontalizad","hormigonad","hormiguead","hornead","horripilad","horrorizad","hospedad","hospitalizad","hostiad","hostigad","hostilizad","hozad","huevead","huid","humad","humanad","humanizad","humead","humectad","humedecid","humidificad","humillad","hundid","hurgad","huronead","hurtad","husmad","husmead","idead","idealizad","identificad","ideologizad","idiotizad","idolatrad","ignorad","igualad","ilegalizad","ilegitimad","iludid","iluminad","ilusionad","ilustrad","imaginad","imanad","imantad","imbecilizad","imbricad","imbuid","imitad","impacientad","impactad","impagad","impartid","impedid","impelid","impendid","imperad","impermeabilizad","impersonalizad","impetrad","implantad","implementad","implicad","implorad","implosionad","importad","importunad","imposibilitad","impostad","imprecad","impregnad","impres","impresionad","imprimad","imprimid","improbad","improvisad","impuest","impugnad","impulsad","impurificad","imputad","inactivad","inadmitid","inaugurad","incapacitad","incardinad","incautad","incendiad","incensad","incentivad","incidentad","incidid","incinerad","incitad","inclinad","incluid","incoad","incomodad","incomunicad","inconformad","incordiad","incorporad","incrementad","increpad","incriminad","incrustad","incubad","inculcad","inculpad","incumbid","incumplid","incurrid","incursionad","indagad","indemnizad","independizad","indexad","indicad","indiciad","indigestad","indignad","indisciplinad","indispuest","individualizad","indizad","inducid","indultad","industriad","industrializad","inejecutad","inervad","infamad","infantilizad","infartad","infatuad","infeccionad","infectad","inferid","infestad","infeudad","inficionad","infiltrad","inflacionad","inflad","inflamad","infligid","influenciad","influid","informad","informalizad","informatizad","infraccionad","infraexplotad","infrautilizad","infravalorad","infringid","infundid","infusionad","ingeniad","ingerid","ingresad","ingurgitad","inhabilitad","inhalad","inhibid","inhumad","iniciad","inicializad","injerid","injertad","injuriad","inmatriculad","inmigrad","inmiscuid","inmolad","inmortalizad","inmovilizad","inmunizad","inmutad","innovad","inobservad","inoculad","inquietad","inquinad","inquirid","inscript","inscrit","inseminad","insensibilizad","inserid","insertad","insidiad","insinuad","insistid","insolentad","insonorizad","inspeccionad","inspirad","instad","instalad","instanciad","instaurad","instigad","instilad","institucionalizad","instituid","instruid","instrumentad","instrumentalizad","insubordinad","insuflad","insultad","insumid","insurreccionad","integrad","inteligid","intencionad","intendid","intensificad","intentad","interaccionad","interactuad","intercalad","intercambiad","intercedid","interceptad","intercomunicad","interconectad","interconvertid","interdich","interesad","interferid","interfoliad","intergradad","interiorizad","interlocutad","intermediad","intermezclad","internacionalizad","internad","internalizad","interoperad","interpelad","interpolad","interpretad","interpuest","interrelacionad","interrogad","interrumpid","intersecad","intersectad","intervenid","intestad","intimad","intimidad","intitulad","intoxicad","intranquilizad","intricad","intrigad","intrincad","introducid","intrusad","intubad","intuid","inundad","inutilizad","invadid","invaginad","invalidad","invenid","inventad","inventariad","invernad","invertid","investid","investigad","inviabilizad","invisibilizad","invitad","invocad","involucionad","involucrad","inyectad","iñocid","ionizad","irisad","ironizad","irradiad","irrespetad","irrigad","irritad","irrogad","irrumpid","islamizad","italianizad","iterad","itinerad","izad","jabonad","jactad","jadead","jalad","jalbegad","jalead","jalonad","jalonead","jaquead","jaquid","jaranead","jaspead","jech","jerarquizad","jeringad","jibarizad","jimad","jinetead","jiñad","jodid","jonronead","jorobad","josead","jotead","jubilad","judaizad","judicializad","jugad","juguetead","jumad","juntad","jurad","juramentad","justad","justificad","justipreciad","juzgad","labializad","laborad","labrad","laburad","lacad","lacead","lacerad","lacrad","lacrimad","lactad","ladead","ladrad","lagartead","lagrimad","lagrimead","laicizad","lalad","lambid","lambiscad","lamentad","lamid","laminad","lampad","lampasead","lancead","languidecid","lanzad","lapidad","lapizad","laquead","largad","lascad","lastimad","lastrad","lateralizad","latid","latinad","latinizad","laudad","lauread","lavad","laxad","lazad","lechad","legad","legalizad","legislad","legitimad","legitimizad","leíd","lematizad","lengüetead","lentificad","leñad","lesead","lesionad","leudad","levad","levantad","levigad","levitad","lexicalizad","liad","libad","liberad","liberalizad","libertad","librad","licenciad","licitad","licuad","liderad","lideread","liderizad","lidiad","ligad","lignificad","lijad","likead","limad","limitad","limosnead","limpiad","linchad","lindad","linead","linealizad","liofilizad","liquenizad","liquidad","lisiad","lisonjead","listad","litad","litigad","litografiad","lixiviad","llagad","llamad","llamead","llavead","llegad","llenad","llevad","llorad","lloriquead","llovid","lloviznad","load","lobotomizad","localizad","locutad","logad","lograd","loguead","lonchead","loncotead","loquead","lotead","lotificad","lubricad","lubrificad","luchad","lucid","lucrad","ludid","ludificad","lustrad","luxad","macad","macerad","machacad","machad","machetead","machihembrad","machucad","macizad","macollad","maculad","madread","madrugad","madurad","magancead","magnetizad","magnificad","magread","magulad","magullad","maicead","majad","malabaread","malacostumbrad","malbaratad","malcriad","maldecid","maldit","malead","maleducad","maleficiad","malentendid","malfuncionad","malgastad","malherid","maliciad","malinformad","malinterpretad","mallad","malmatad","malograd","malparad","malparid","malpuest","malquerid","malquistad","maltead","maltraíd","maltratad","malvendid","malversad","malvivid","mamad","mamonead","mampostead","manad","mancad","manchad","mancillad","mancomunad","mancornad","mandad","mandatad","mandonead","mandrilad","manducad","manead","manejad","mangad","mangonead","manguead","maniatad","manifestad","maniobrad","manipulad","manosead","manotead","mantead","mantenid","manufacturad","manumitid","manuscript","manuscrit","manutenid","mañanead","mapead","mapuchizad","maquead","maquetad","maquilad","maquillad","maquinad","maravillad","marcad","marchad","marchitad","maread","marginad","marginalizad","maridad","marinad","mariposead","mariscad","marmolead","marrad","martillad","martillead","martirizad","masacrad","masad","masajead","mascad","mascujad","masculinizad","mascullad","masificad","masterizad","masticad","masturbad","matad","matasellad","matead","materializad","matizad","matonead","matraquead","matriculad","matrimoniad","maullad","maximizad","mayad","mazad","maznad","mead","mecanizad","mecanografiad","mecatead","mechad","mecid","mediad","mediatizad","medicad","medicalizad","medicinad","medid","meditad","medrad","mejorad","melad","melezinad","melgad","mellad","membretad","memorad","memorializad","memorizad","menad","mencionad","mendigad","menead","menguad","menoscabad","menospreciad","mensajead","menstruad","mensurad","mentad","mentalizad","mentid","mentorizad","menudead","menuzad","mercad","mercadead","mercantilizad","mercerizad","merecid","merendad","merengad","meritad","mermad","merodead","mesad","mestizad","mesturad","mesurad","metabolizad","metaforizad","metalizad","metamorfizad","metamorfosead","metastatizad","metastizad","meteorizad","metid","metilad","metodizad","metrificad","mexicanizad","mezclad","mezquinad","microfilmad","microfinanciad","microperforad","microscopiad","mielinizad","migad","migrad","militad","militarizad","mimad","mimeografiad","mimetizad","mimid","minad","mineralizad","miniad","miniaturizad","minimalizad","minimizad","ministerializad","ministrad","minorad","minusvalorad","mirad","misad","misionad","mistificad","mitificad","mitigad","mixturad","mocad","mochad","mochilead","mocionad","modelad","modelizad","moderad","modernizad","modificad","modorrad","modulad","modularizad","mofad","mojad","mojonad","mojonead","molad","moldad","moldead","moldurad","molestad","molid","molinad","momificad","mondad","monetarizad","monetizad","monitoread","monitorizad","monologad","monopolizad","montad","mopead","moquead","morad","moralizad","mordid","mordiscad","mordisquead","morfad","morigerad","morread","mortificad","moscad","mosquead","mostrad","mostread","motead","motejad","motivad","motorizad","movid","movilizad","mudad","muert","muertead","muestread","mufad","mugid","mulcid","muletead","mulgid","mullid","multad","multiplexad","multiplicad","mundializad","municionad","municipalizad","munid","muñid","murad","murmurad","musealizad","musicad","musicalizad","musid","musitad","mutad","mutilad","nacid","nacionalizad","nadad","nalguead","narcotizad","narrad","nasalizad","naturalizad","naufragad","navalizad","navegad","nebulizad","necead","necesitad","negad","negligid","negociad","negread","negrecid","negrificad","neocolonizad","neutralizad","nevad","neviscad","nidificad","nimbad","ningunead","niquelad","nitrificad","nivelad","nixtamalizad","nombrad","nominad","nominalizad","noquead","normad","normalizad","normativizad","notad","notariad","notarizad","noticiad","notificad","novad","novelad","novelizad","noviad","nublad","nuclead","nudrid","nukead","nulificad","numerad","nutrid","ñangotad","ñoñead","obcecad","obedecid","obispad","objetad","objetivad","obligad","obliterad","obnubilad","obrad","obscurecid","obsequiad","observad","obsesionad","obstaculizad","obstad","obstinad","obstruid","obtenid","obturad","obviad","ocasionad","occidentalizad","ocluid","ocultad","ocupad","ocurrid","odiad","ofendid","ofertad","oficiad","oficializad","ofrecid","ofrendad","ofuscad","oíd","ojead","okupad","olead","olfatead","olid","oliscad","olisquead","olvidad","ominad","omitid","ondead","ondulad","opacad","operad","operativizad","opinad","opositad","opresad","oprimid","optad","optimad","optimizad","opuest","opugnad","orad","oralizad","orbitad","ordenad","ordeñad","oread","organizad","orientad","orientalizad","originad","orillad","orinad","orlad","ornad","ornamentad","orquestad","ortigad","osad","oscilad","oscurecid","osead","osificad","ostentad","otad","otead","otorgad","ovacionad","ovad","ovillad","ovulad","oxead","oxidad","oxigenad","pacid","pacificad","pactad","padecid","pagad","paginad","pajaread","pajaronead","pajead","palabread","paladead","palatalizad","palead","paletizad","paliad","palidecid","paliquead","pallad","palmad","palmead","palmotead","palpad","palpitad","pandead","paniaguad","papad","parabolizad","parad","parafrasead","paralelad","paralelizad","paralizad","parametrad","parametrizad","parangonad","parapetad","parapetead","parasitad","parcelad","parchad","parchead","parcializad","paread","parecid","parid","parlad","parlamentad","parlotead","parodiad","parpad","parpadead","parquead","parquizad","partead","particionad","participad","particularizad","partid","partidizad","pasad","pasead","pasmad","pastad","pastead","pastelead","pasterizad","pasteurizad","pastoread","patalead","patead","patentad","patentizad","patinad","patologizad","patrimonializad","patrocinad","patronead","patrullad","patullad","pauperizad","pausad","pautad","pavimentad","pavonad","pavonead","payasead","peatonalizad","pecad","pechad","pedalead","pedid","pedorread","pegad","pegotead","peíd","peinad","pelad","pelead","pelechad","peletizad","peligrad","pellizcad","pelotead","peluquead","penad","penalizad","pendejead","pendid","pendonead","penetrad","penitenciad","pensad","pensionad","pepead","pepenad","peraltad","percatad","perchad","percibid","percolad","percudid","percutad","percutid","perdid","perdonad","perdurad","perecead","perecid","peregrinad","perennizad","perfeccionad","perfilad","perforad","performad","perfumad","pergeñad","periclitad","perifonead","perimetrad","periodizad","peritad","perjudicad","perjurad","perlad","permanecid","permeabilizad","permead","permitid","permutad","pernead","pernoctad","peronizad","perorad","perpetrad","perpetuad","perquirid","perread","perseguid","perseverad","persignad","persistid","personad","personalizad","personificad","persuadid","pertenecid","pertenid","pertrechad","perturbad","pervertid","pervivid","pesad","pescad","pescuecead","pespuntad","pespuntead","pesquisad","pestañead","petad","petardead","petead","peticionad","petrificad","photoshopead","piad","piafad","pialad","picad","pichad","pichicatead","pichulead","picotead","pifead","pifiad","pigmentad","pignorad","pilad","pillad","pilotad","pilotead","pimplad","pincelad","pinchad","pingad","pintad","pintarrajead","pintead","pintorread","pintorretead","pinzad","pipad","pipiad","piquetead","pirad","piratead","pirograbad","piropead","pirrad","pisad","pisotead","pispad","pispead","pistead","pitad","pitchead","pitorread","pivotad","pivotead","pixelad","pizcad","placad","placead","placid","plagad","plagiad","planchad","planchead","planead","planificad","planillad","plantad","plantead","plañid","plasmad","plastificad","platead","platicad","plebiscitad","plegad","pleitead","plisad","plorad","pluralizad","pluriemplead","plurinacionalizad","poblad","pochad","pochead","podad","podemizad","podid","podrid","poetizad","polarizad","polemizad","policromad","polid","polimerizad","polinizad","politiquead","politizad","pololead","ponchad","ponderad","pontificad","ponzoñad","popularizad","pordiosead","porfiad","pormenorizad","portad","portead","posad","poseíd","posesionad","posibilitad","posicionad","positivad","pospuest","postead","postensad","postergad","postpuest","postrad","postulad","posturead","potabilizad","potad","potenciad","potencializad","practicad","pread","preagrupad","prealimentad","preanunciad","preaprobad","prearmad","preavisad","prebendad","precalentad","precalificad","precargad","precarizad","precautelad","precavid","precedid","preceptuad","preciad","precintad","precipitad","precisad","precocid","precocinad","precompilad","precomprad","preconcebid","preconfigurad","preconizad","preconocid","preconstituid","preconvocad","predad","predestinad","predeterminad","predicad","predich","prediseñad","predispuest","predominad","preelaborad","preenvasad","preestablecid","preestrenad","preferid","prefigurad","prefijad","preformad","pregad","pregonad","preguntad","pregustad","preinscript","preinscrit","preinstalad","prejubilad","prejuiciad","prejuzgad","preludiad","premeditad","premiad","premostrad","premuert","prenasalizad","prendad","prendid","prensad","preñad","preocupad","preordenad","prepagad","preparad","prepintad","preponderad","preprogramad","presagiad","prescindid","prescript","prescrit","preseleccionad","presenciad","presentad","presentid","preservad","presidid","presionad","presolicitad","prestad","prestigiad","presumid","presupuest","presupuestad","presurizad","pretendid","pretensad","preterid","pretermitid","pretextad","prevalecid","prevalid","prevaricad","prevenid","previsionad","previst","previsualizad","primad","principalizad","principiad","pringad","priorizad","privad","privatizad","privilegiad","probad","problematizad","procedid","procesad","procesionad","proclamad","procrastinad","procread","procurad","prodigad","producid","profanad","proferid","profesad","profesionalizad","profetizad","profugad","profundad","profundizad","programad","progresad","prohibid","prohijad","proletarizad","proliferad","prologad","prolongad","promediad","promesad","prometid","promiscuad","promocionad","promovid","promulgad","pronominalizad","pronosticad","pronunciad","propagad","propalad","propasad","propendid","propiciad","propinad","proporcionad","propuest","propugnad","propulsad","prorratead","prorrogad","prorrumpid","proscript","proscrit","proseguid","prospectad","prosperad","prosternad","prostituid","protagonizad","protegid","protestad","protocolizad","protonad","prototipad","protruid","proveíd","provenid","provincializad","provisionad","provist","provocad","proyectad","psicoanalizad","publicad","publicitad","puentead","puest","pugnad","pujad","pulid","pulimentad","pulsad","pulsead","pululad","pulverizad","punchad","puncionad","pungid","punid","puntad","puntead","puntuad","puntualizad","punzad","punzonad","puñad","puñetead","purgad","purificad","purpurad","putañead","putead","puyad","quebrad","quebrantad","quedad","quejad","quelad","quemad","querellad","querid","quietad","quilatad","quimbad","quintaesenciad","quintuplicad","quitad","rabead","rabiad","racanead","racializad","raciocinad","racionad","racionalizad","radiad","radicad","radicalizad","radiodifundid","radiografiad","rafaguead","raíd","rajad","rajuñad","ralbad","ralead","ralentizad","rallad","ramblead","ramificad","ramonead","rancad","ranchad","ranchead","randomizad","rankead","ranquead","ranurad","rapad","rapead","rapiñad","raptad","raquead","rarificad","rasad","rascad","rascañad","rascuñad","rasgad","rasguead","rasguñad","raspad","rasquetead","rasterizad","rastrad","rastread","rastrillad","rasurad","ratead","ratificad","ratonad","rayad","razonad","reabastecid","reabiert","reabsorbid","reaccionad","reacomodad","reacondicionad","reactivad","reactualizad","readaptad","readecuad","readiestrad","readmitid","readquirid","reafirmad","reagrupad","reajustad","realimentad","realinead","realistad","realizad","realojad","realquilad","realzad","reanimad","reanudad","reaparecid","reaplicad","reaprendid","reaprovechad","reaprovisionad","reargüid","rearmad","rearticulad","reasegurad","reasentad","reasfaltad","reasignad","reasumid","reatad","reautorizad","reavivad","rebajad","rebalancead","rebalsad","rebanad","rebañad","rebasad","rebatad","rebatid","rebautizad","rebelad","reblandecid","rebobinad","rebordad","rebordead","rebosad","rebotad","rebozad","rebramad","rebrillad","rebrincad","rebrotad","rebullid","rebuscad","rebuznad","recabad","recaíd","recalad","recalcad","recalculad","recalendarizad","recalentad","recalibrad","recalificad","recamad","recapacitad","recapitalizad","recapitulad","recapturad","recargad","recatad","recatead","recategorizad","recauchutad","recaudad","recebid","recelad","recentad","recentralizad","recepcionad","receptad","recercad","recertificad","recesad","recetad","rechazad","rechinad","rechistad","recibid","reciclad","reciprocad","recirculad","recitad","reclamad","reclasificad","reclinad","recluid","reclutad","recobrad","recochinead","recocid","recocinad","recodad","recodificad","recogid","recolad","recolectad","recolegid","recolocad","recolonizad","recombinad","recomendad","recomenzad","recompensad","recompilad","recomprad","recompuest","reconcentrad","reconceptualizad","reconciliad","reconcomid","reconducid","reconectad","reconfigurad","reconfirmad","reconfortad","reconocid","reconquistad","reconsagrad","reconsiderad","reconstituid","reconstruid","recontad","recontextualizad","recontratad","reconvenid","reconvertid","recopilad","recordad","recorrid","recortad","recosid","recostad","recovad","recread","recrecid","recriad","recriminad","recristalizad","recrudecid","rectificad","rectorad","recuadrad","recubiert","recudid","reculad","recuperad","recurrid","recurvad","recusad","redactad","redargüid","redecorad","rededicad","redefinid","redemocratizad","redenominad","redensificad","redescript","redescrit","redescubiert","redesignad","redibujad","redich","redimensionad","redimid","redireccionad","redirigid","rediscutid","rediseñad","redistribuid","redituad","redoblad","redondead","reducid","redundad","reedificad","reeditad","reeducad","reelaborad","reelect","reelegid","reembarcad","reembolsad","reemitid","reemplazad","reemprendid","reenamorad","reencaminad","reencantad","reencarnad","reencauzad","reencontrad","reencuadernad","reenergizad","reenfocad","reenganchad","reensamblad","reenterrad","reentrad","reentrenad","reenvasad","reenviad","reequilibrad","reequipad","reescript","reescrit","reestabilizad","reestablecid","reestatizad","reestilizad","reestrenad","reestructurad","reevaluad","reexaminad","reexpedid","refaccionad","refacturad","refanfinflad","referenciad","referid","refigurad","refilad","refinad","refinanciad","reflectad","reflejad","reflexionad","reflotad","refluid","refocilad","reforestad","reforjad","reformad","reformalizad","reformatead","reformulad","reforzad","refotografiad","refractad","refregad","refreíd","refrenad","refrendad","refrescad","refrigerad","refrit","refugiad","refulgid","refundad","refundid","refunfuñad","refutad","regad","regalad","regalonead","regañad","regatead","regazad","regenerad","regentad","regentead","regid","regimentad","regionalizad","registrad","reglad","reglamentad","regobernad","regocijad","regodead","regoldad","regrabad","regresad","reguetonead","regulad","regularizad","regurgitad","rehabilitad","rehech","rehidratad","rehilad","rehogad","rehuid","rehundid","rehusad","reíd","reimaginad","reimplantad","reimpres","reimprimid","reimpuest","reimpulsad","reinad","reinaugurad","reincidid","reincorporad","reindustrializad","reingresad","reiniciad","reinscript","reinscrit","reinsertad","reinstalad","reinstaurad","reinstitucionalizad","reintegrad","reintensificad","reintentad","reinterpretad","reintroducid","reinventad","reinvertid","reiterad","reivindicad","rejuvenecid","relacionad","relajad","relamid","relampaguead","relanzad","relatad","relativizad","relegad","relegitimad","releíd","relevad","religad","relinchad","rellamad","rellenad","relocalizad","relojead","reluchad","relucid","relumbrad","remachad","remad","remangad","remansad","remanufacturad","remarcad","remasterizad","rematad","rembolsad","remecid","remedad","remediad","rememorad","remendad","remezclad","remirad","remitid","remixad","remodelad","remojad","remolcad","remoldead","remolinead","remolonead","remontad","remordid","remotorizad","removid","remozad","remplazad","rempujad","remudad","remunerad","remusgad","renacid","renacionalizad","renderizad","rendid","renegad","renegociad","renguead","renombrad","renovad","renquead","rentabilizad","rentad","renumerad","renunciad","reñid","reocupad","reordenad","reorganizad","reorientad","repagad","repanchigad","repantigad","repantingad","reparad","repartid","repasad","repatead","repatriad","repautad","repavimentad","repechad","repelad","repelid","repensad","repentizad","repercutid","reperfilad","repescad","repetid","repicad","repintad","repiquetead","repisad","replantad","replantead","replegad","repletad","replicad","repoblad","repolarizad","repolitizad","repollad","reportad","reportead","reposad","reposicionad","repostad","repostead","repostulad","repotenciad","repreguntad","reprehendid","reprendid","represad","represaliad","representad","reprimid","reprobad","reprocesad","reprochad","reproducid","reprogramad","reptad","republicad","repudiad","repuest","repugnad","repujad","repulsad","repuntad","reputad","requebrad","requemad","requerid","requintad","requisad","resabid","resacad","resaltad","resanad","resarcid","resbalad","rescaldad","rescatad","rescindid","rescript","resecad","resellad","resemblad","resembrad","resentid","reseñad","reservad","resetead","resfriad","resguardad","residenciad","residid","resignad","resignificad","resincronizad","resintonizad","resistid","resituad","resobad","resocializad","resollad","resonad","resondrad","resoplad","resorbid","respaldad","respectad","respetad","respingad","respirad","resplandecid","respondid","responsabilizad","resquebrad","resquebrajad","restablecid","restad","restallad","restañad","restaurad","restead","restituid","restregad","restringid","restructurad","resucitad","resuelt","resultad","resumid","resurgid","retad","retardad","retemblad","retemplad","retenid","reteñid","retimbrad","retipificad","retirad","retitulad","retocad","retomad","retoñad","retorcid","retornad","retortijad","retozad","retractad","retraducid","retraíd","retranquead","retransmitid","retrasad","retrasmitid","retratad","retrepad","retribuid","retroalimentad","retrocad","retrocedid","retrogradad","retroiluminad","retrotraíd","retrovendid","retrucad","retuitead","retumbad","retundid","retwitead","retwittead","reubicad","reunid","reunificad","reurbanizad","reusad","reutilizad","revacunad","revalidad","revalorad","revalorizad","revaluad","revelad","revencid","revendid","revenid","reventad","reverberad","reverdecid","reverenciad","reversad","reversionad","revertid","revesad","revestid","revictimizad","revinculad","revirad","revisad","revisionad","revisitad","revist","revistad","revitalizad","revivid","revivificad","revocad","revolad","revolcad","revolead","revolotead","revolucionad","revuelt","rezad","rezagad","rezongad","rezumad","rezurcid","ribetead","ridiculizad","rielad","rifad","rilad","rimad","rimbombad","ringad","ripead","ripiad","ripostad","ritualizad","rivalizad","rizad","robad","robotizad","robustecid","rochad","rociad","rockanrolead","rockead","rodad","rodead","rogad","roíd","rojead","rolad","romancead","romanizad","romantizad","romanzad","rompid","roncad","rondad","ronead","ronronead","ronzad","rootead","roquead","roscad","rosead","rostizad","rot","rotad","rotomoldead","rotulad","roturad","rozad","ruborizad","rubricad","rugad","rugid","ruinad","rulad","rumbead","rumbiad","rumiad","rumorad","rumoread","runrunead","ruralizad","rusificad","rusticad","rutead","rutilad","sabid","sablead","saboread","saborizad","sabotead","sacad","sacarificad","sachad","saciad","sacodid","sacralizad","sacramentad","sacrificad","sacudid","saetad","saetead","sahumad","sajad","salad","salariad","saldad","salid","salinizad","salivad","sallad","salmodiad","salpicad","salpimentad","salpresad","salsead","saltad","saltead","saludad","salvad","salvaguardad","sambenitad","samplead","sanad","sancionad","sancochad","sandunguead","sanead","sangrad","sanitizad","sanjad","santificad","santiguad","sapead","saponificad","saquead","sargentead","sarmentad","satanizad","satinad","satirizad","satisfech","saturad","sazonad","secad","seccionad","secretad","secretead","sectorizad","secuenciad","secuestrad","secularizad","secundad","sedad","sedentarizad","sedimentad","seducid","segad","segmentad","segregad","seguid","segundad","segurad","seleccionad","selfiad","sellad","semaforizad","semblad","sembrad","semejad","sementad","sensibilizad","sentad","sentenciad","sentid","señad","señalad","señalizad","señoread","separad","sepultad","sequestrad","serenad","seriad","serializad","serigrafiad","sermonead","serpead","serpentead","serrad","serruchad","servid","sesead","sesgad","sesionad","sestead","setead","sexad","sextuplicad","sexualizad","shockead","sicoanalizad","sid","sigilad","signad","significad","silabad","silabead","silbad","silenciad","siluetead","simbolizad","simpatizad","simplificad","simulad","simultanead","sincerad","sincopad","sincretizad","sincronizad","sindicad","sindicalizad","singad","singularizad","sinonimizad","sinterizad","sintetizad","sintonizad","sirgad","sisad","sisead","sistematizad","sitiad","situad","sobad","sobajad","sobornad","sobrad","sobreactuad","sobrealimentad","sobreasad","sobrecalentad","sobrecargad","sobrecogid","sobreconsumid","sobrecumplid","sobredemandad","sobredeterminad","sobredimensionad","sobredorad","sobredosificad","sobreentendid","sobreescript","sobreescrit","sobreestimad","sobreestimulad","sobreexcitad","sobreexplotad","sobreexpresad","sobreexpuest","sobregirad","sobregrabad","sobreimpres","sobreimprimid","sobreinfectad","sobrellenad","sobrellevad","sobremedicad","sobrenadad","sobrentendid","sobrepasad","sobrepoblad","sobreprotegid","sobrepuest","sobrepujad","sobrerreaccionad","sobrerrepresentad","sobresalid","sobresaltad","sobresaturad","sobrescript","sobrescrit","sobreseíd","sobrestimad","sobrevalorad","sobrevaluad","sobrevenid","sobrevirad","sobrevivid","sobrevolad","socarrad","socavad","sociabilizad","socializad","socorrid","sodomizad","sofisticad","sofocad","sofreíd","sofrenad","sofrit","soguead","sojuzgad","solad","solapad","solarizad","solazad","soldad","solead","solemnizad","solevad","solfead","solicitad","solid","solidad","solidarizad","solidificad","soliviantad","sollozad","soltad","solubilizad","solucionad","solventad","somatizad","sombrad","sombread","sometid","somorgujad","sompesad","sonad","sondad","sondead","sonorizad","sonreíd","sonrojad","sonrosad","sonsacad","soñad","sopad","sopesad","soplad","soportad","sorbid","sorprendid","sortead","sosegad","soslayad","sospechad","sostenid","sotad","soterrad","stalkead","suavizad","subalimentad","subalquilad","subalternizad","subarrendad","subastad","subclasificad","subcontratad","subdividid","subducid","subentendid","subestimad","subid","sublevad","sublimad","subministrad","subordinad","subrayad","subrogad","subsanad","subscript","subscrit","subseguid","subsidiad","subsistid","substanciad","substantivad","substituid","substraíd","subsumid","subtendid","subtitulad","subutilizad","subvaluad","subvencionad","subvenid","subvertid","subvirad","subyacid","subyugad","succionad","sucedid","sucitad","sucumbid","sudad","suelt","sufijad","sufragad","sufrid","sugerid","sugestionad","suicidad","sujetad","sujuzgad","sulcad","sulfatad","sulfurad","sumad","sumariad","sumergid","sumid","suministrad","supeditad","superad","superimpuest","superpoblad","superpuest","supervalorad","supervenid","supervigilad","supervisad","supervivid","suplantad","suplementad","suplicad","suplid","suprimid","supuest","supurad","suputad","surcad","surcid","surfead","surgid","surtid","suscitad","suscript","suscrit","suspendid","suspirad","sustanciad","sustantivad","sustentad","sustituid","sustraíd","susurrad","sutilizad","suturad","tabicad","tablad","tabletead","tabulad","tachad","tachonad","tacid","tacklead","taclead","taconead","tajad","talad","taladrad","tallad","tambalead","tamboread","tamborilead","tamizad","tamponad","tangad","tanquead","tantead","tañid","tapad","tapead","tapiad","tapiscad","tapizad","taponad","taponead","taquead","taquillad","taracead","tarad","tararead","tardad","tarifad","tarificad","tarjad","tartamudead","tasad","tascad","tatemad","tatuad","taxiad","teatralizad","techad","teclead","tecnificad","tejad","tejid","telefonead","telegrafiad","teleportad","teletrabajad","teletransportad","televisad","telonead","temad","tematizad","temblad","temblequead","temid","temperad","templad","temporizad","tendid","tenid","tensad","tensionad","tentad","teñid","teorizad","tercerizad","terciad","terciarizad","tergiversad","terminad","ternad","terracead","terraformad","terraplenad","territorializad","tertuliad","tesad","testad","testead","testificad","testiguad","testimoniad","textead","texturizad","tictaquead","tijeretead","tildad","timad","timbead","timbrad","timonead","tincad","tintad","tintinead","tinturad","tipad","tipead","tipificad","tipologizad","tirad","tiranizad","tiritad","tironead","tirotead","titilad","titrad","titubad","titubead","titulad","titularizad","tiznad","tocad","togad","toldad","tolerad","tollid","tomad","tongonead","tonificad","tonsurad","tontead","topad","topead","topetad","toquetead","torcid","toread","tormientad","tornad","tornead","torpedead","torrad","torturad","tosid","tostad","totalizad","toxificad","trabad","trabajad","trabucad","traccionad","traducid","traficad","tragad","traicionad","traíd","trajead","trajinad","tramad","tramitad","trampead","trancad","tranquead","tranquilizad","transad","transbordad","transcendid","transcodificad","transcript","transcrit","transcurrid","transfectad","transferid","transfigurad","transformad","transfundid","transgredid","transicionad","transigid","transistorizad","transitad","transladad","transliterad","translocad","translucid","transmigrad","transmitid","transmutad","transparentad","transpirad","transplantad","transportad","transpuest","transtornad","transustanciad","transvasad","transversalizad","tranzad","trapacead","trapalead","trapead","trapichead","traquetead","trasbordad","trascendid","trascript","trascrit","trascurrid","trasegad","trasferid","trasfigurad","trasformad","trasgredid","trashumad","trasladad","traslapad","trasliterad","trasluchad","traslucid","trasmigrad","trasmitid","trasmontad","trasmutad","trasnochad","trasoíd","traspalad","traspapelad","trasparentad","traspasad","traspillad","traspirad","trasplantad","trasportad","traspuest","trasquilad","trastabillad","trastabillead","trastead","trastocad","trastornad","trastrabillad","trastrocad","trasudad","trasuntad","trasvasad","tratad","traumad","traumatizad","travestid","trazad","trebejad","trechad","trefilad","tremid","tremolad","trenad","trenzad","trepad","trepanad","trepidad","triangulad","tribulad","tributad","tricotad","trillad","trinad","trincad","trinchad","triplicad","triptongad","tripulad","triscad","trisecad","tristead","triturad","triunfad","trivializad","trocad","trocead","trolead","trompetead","trompezad","trompicad","tronad","troncad","tronchad","tropezad","tropicalizad","troquelad","trotad","trovad","trozad","trucad","trucidad","trufad","truncad","truquead","tugurizad","tuitead","tullid","tumbad","tumultuad","tunad","tundid","tunead","tunelad","tupid","turbad","turbinad","turboalimentad","turbocargad","turistead","turistificad","turnad","turquead","tusad","tutead","tutelad","twitead","twittead","ubicad","ufanad","ulcerad","ultimad","ultracentrifugad","ultrajad","ululad","uncid","ungid","unid","unificad","uniformad","uniformizad","universalizad","untad","upad","urbanizad","urdid","urgid","uruguayizad","usad","ustedead","usucapid","usufructuad","usurpad","utilizad","vacacionad","vacad","vaciad","vacilad","vacunad","vadead","vagabundead","vagad","vaguead","valid","validad","vallad","valorad","valorizad","valsad","valuad","vampirizad","vanagloriad","vandalizad","vapead","vaporizad","vapulead","varad","varead","variad","vascularizad","vaticinad","vectorizad","vedad","vegetad","vehiculad","vehiculizad","vejad","velad","velarizad","velicad","venadead","vencid","vendad","vendid","vendimiad","venenciad","venerad","vengad","venid","ventad","ventead","ventilad","ventosead","veranead","verbalizad","verberad","verdead","verdeguead","verguead","verificad","versad","versead","versificad","versionad","versionead","vertebrad","verticalizad","vertid","vestid","vetad","vetead","vezad","viabilizad","viajad","viboread","vibrad","vichead","viciad","victimad","victimizad","victoread","videograbad","vidriad","vigilad","vigorizad","vilipendiad","vinculad","vindicad","vinificad","violad","violentad","virad","viralizad","virtualizad","visad","visibilizad","visionad","visitad","vislumbrad","visoriad","vist","visualizad","vitalizad","vitoread","vitrificad","vituperad","vivad","vivaquead","vivenciad","vivid","vivificad","vocalizad","vocead","vociferad","volad","volantead","volatilizad","volcad","volead","voltead","voltejead","vomitad","vosead","votad","voznad","vuelt","vulcanizad","vulgarizad","vulnerad","wasapead","whatsappead","wikificad","xerocopiad","xerografiad","yacid","yantad","yapad","yerad","yermad","yirad","yodurad","yugulad","yuxtapuest","zabordad","zabullid","zafad","zaherid","zamarread","zambullid","zampad","zancadillead","zancajead","zanganead","zanjad","zanquead","zapad","zapatead","zapead","zarandead","zarpad","zascandilead","zigzaguead","zombificad","zonificad","zorread","zozobrad","zumbad","zurcid","zuread","zurrad","zurriad","zurrid","zuzad"],{getWords:Y}=e.languageProcessing;const{precedenceException:Z,directPrecedenceException:$,values:aa}=e.languageProcessing,da=aa.Clause,ea=["ser","soy","eres","es","somos","sois","son","fui","fuiste","fue","fuimos","fuisteis","fueron","era","eras","era","éramos","erais","eran","sería","serías","seríamos","seríais","serían","seré","serás","será","seremos","seréis","serán","seas","sea","seamos","seáis","sean","fuera","fueras","fuéramos","fuerais","fueran","fuese","fueses","fuésemos","fueseis","fuesen","fuere","fueres","fuéremos","fuereis","fueren","sé","sed","siendo","sido"],{createRegexFromArray:ia,getClauses:ra}=e.languageProcessing,sa={Clause:class extends da{constructor(a,d){super(a,d),this._participles=function(a){return Y(a).filter((a=>function(a){return["a","o","as","os"].some((d=>{if(a.length>3&&a.endsWith(d)){const e=a.slice(0,-d.length);return X.includes(e)}}))}(a)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const a=this.getClauseText(),d=this.getParticiples().filter((d=>!$(a,d,V)&&!Z(a,d,J)));this.setPassive(d.length>0)}},stopwords:H,auxiliaries:ea,regexes:{auxiliaryRegex:ia(ea),stopCharacterRegex:/([:,])(?=[ \n\r\t'"+\-»«‹›<>])/gi,followingAuxiliaryExceptionRegex:ia(["el","la","los","las","una"])}};function na(a){return ra(a,sa)}const oa=window.lodash,ca=function(a,d="i"){return a.map((a=>function(a,d="i"){return 2===a.length?{reg:new RegExp(a[0],d),repl:a[1]}:3===a.length?{reg:new RegExp(a[0],d),repl1:a[1],repl2:a[2]}:null}(a,d)))};function ta(a,d){if(-1!==a.search(new RegExp(d[0])))return a.replace(new RegExp(d[0]),d[1])}const{buildFormRule:la,createRulesFromArrays:ua,findMatchingEndingInArray:ma}=e.languageProcessing,pa=function(a){return/[aeiouáéíóú]/gi.test(a)},ba=function(a){const d=["á","é","í","ó","ú"],e=["a","e","i","o","u"];for(let i=0;i3&&(i=pa(a[1])?pa(a[0])&&pa(a[1])?function(a,d){const e=a.length;for(let d=2;dfunction(a,d){a.toLowerCase();const e=fa(a,d.exceptionStemsWithFullForms);if(e)return e;if(d.wordsThatLookLikeButAreNot.nonPluralsOnS.includes(a))return ba(a);if(a.length<2)return ba(a);const[i,r,s]=wa(a);let n=a.slice(i),o=a.slice(r),c=a.slice(s);const t=a,l=va(a,n);if(l!==a)return ba(l);(a=ka(a,c,d))!==t&&(n=a.slice(i),o=a.slice(r),c=a.slice(s));const u=a;a=Sa(a,o);const m=ha(a,n,d.menteStemming);if(m!==a)return ba(m);const p=ja(a,n,d.superlativesStemming);if(p!==a)return ba(p);const b=qa(a,d.diminutivesStemming);if(b!==a)return ba(b);a!==u&&(c=a.slice(s));const g=a;let z=!1;const f=d.wordsThatLookLikeButAreNot.notVerbForms;if(u===g){let d=a;a.endsWith("s")&&(d=a.slice(0,-1)),f.includes(d)?(a=d,z=!0):a=ya(a,g,c,s)}c=a.slice(s),a=Pa(a,c,s);const v=xa(a,d.stemsThatBelongToOneWord);if(v)return v;if(!z){const e=function(a,d){const e=d.verbStemModifications,i=ta(a,e.quToC);if(i)return ta(i,e.ueToOSimple)||i;const r=function(a,d){if(d.includes(null))return a;for(let e=0;e{"use strict";var e={d:(t,n)=>{for(var s in n)e.o(n,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:n[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>b});const n=window.yoast.analysis,s=["اگر","اما","باری","پس","تا","چون","  چه","خواه"," را","زیرا","Ú©Ù‡","لیکن","نه","نیز","Ùˆ","ولی","هم"," یا"],r=s.concat(["ازآنکه","ازآنجا Ú©Ù‡","از این رو","از این گذشته","از بس","از بس Ú©Ù‡","از بهر آ‌نکه","اکنون Ú©Ù‡","اگرچه","اگر چنانچه","اگرچنانکه","الا اینکه","آنجا Ú©Ù‡","آنگاه Ú©Ù‡","با این حال","بااینکه","بالعکس","با وجود این","با وجود اینکه","بس Ú©Ù‡","بلکه","بنابراین","به جز","به شرط آ‌نکه","به طوری Ú©Ù‡","به هر حال","بی آنکه","تااینکه","تا آنکه","تا جایی Ú©Ù‡","چنانچه","چنانکه","چندان Ú©Ù‡","چون Ú©Ù‡","در حالیکه","در صورتی Ú©Ù‡","در نتیجه","زیرا Ú©Ù‡","سپس","علیرغم اینکه","مگر این Ú©Ù‡","وانگهی","وقتی Ú©Ù‡","وگرنه","ولو","هر چند","هر گاه Ú©Ù‡","هر وقت Ú©Ù‡","همان طور Ú©Ù‡","همان Ú©Ù‡","همچنین","همین Ú©Ù‡"]),o=function(e){let t=e;return e.forEach((n=>{(n=n.split("-")).length>0&&n.filter((t=>!e.includes(t))).length>0&&(t=t.concat(n))})),t}([].concat(["یک","دو","سه","چهار","پنج","شش","Ù‡ÙØª","هشت","نه","ده","یازده","دوازده","سیزده","چهارده","پانزده","شانزده","Ù‡ÙØ¯Ù‡","هجده","نوزده","بیست","صد","هزار","میلیون","میلیارد","Ù‡ÙØªØ¯Ù‡","نونزده","بیست Ùˆ یک","سی","چهل","پنجاه","شصت ","Ù‡ÙØªØ§Ø¯","هشتاد","نود","صد Ùˆ یک","دویست","تریلیارد"],["اول","اوّل","دوم","سوم","چهارم","پنجم","ششم","Ù‡ÙØªÙ…","هشتم","نهم","دهم","یازدهم","دوازدهم","سیزدهم","چهاردهم","پانزدهم","شانزدهم","Ù‡ÙØ¯Ù‡Ù…","هجدهم","نوزدهم","بیستم","پانزدهمین","Ù‡ÙØªÙ‡Ù…ین","هجدهمین","نوزدهمین","بیستمین ","بیست Ùˆ یکم","سی ام ","چهلم","پنجاهم","شصتم","Ù‡ÙØªØ§Ø¯Ù…","هشتادم","نودم","صدم","صد Ùˆ یکم","دویستم","هزارم","میلیونم","میلیاردم","Ù‡ÙØªÙ‡Ù…"],["مرا","من را","من‌را","به من","تو را","شما را","شما","به تو","به شما","اون رو","اونو","به اون","اون","او را","به او","او","به ایشان","ایشان را","ایشان","به ایشون","ایشون رو","ایشون را","ایشون","این","این را","آن","به این","به آن","آن را","این رو","اینو","ما را","به ما","به اونا","آن‌ها","آنها را","آن‌ها را","به آنها","به آن‌ها","اونا","اونارو","اونا رو","من","تو","ما","آنها","همین","همان","اینان","آنان"],["Ú©ÛŒ","Ú©ÙÛŒ","کجا","Ú†Ù‡","چرا","چطور","آیا"],["Ú©Ù…ÛŒ","زیاد","ÙØ±Ø§ÙˆØ§Ù†","بیشتر","بسیار","Ú©Ù… Ú©Ù…","مشتی","تعداد بسیارکم","مقداربسیارکم","تعداد زیادی","مقدارزیادی","بخش","تعداد","مقداری","چند","تمام","خیلی زیاد"],["خودم","خودت","خودش","یک Ù†ÙØ± خودش","خودمان","خودتان","خودشان"],["هر کس","کسی","هیچ","Ùلان","هیچ کس","شخصی","هیچ چیز","همه چیز","چیزی","یکی دیگر","هر کدام","هر یک","هیچ کدام","Ú©Ù…ÛŒ","خیلی","دیگری","همه","بعضی","هر دو","معدود","اندکی","خیلی","دیگران ","چندین"],["با","باری","نیز","چندان Ú©Ù‡","تا اینکه","چون‌که","اگرچه","باوجوداین","به شروطی Ú©Ù‡","واسه‎ی","بی","بر","چون","چندان‌که","تااینکه","چون Ú©Ù‡","اگر چنانچه","با این وجود","بعد از","برای","در","چونان Ú©Ù‡","زیرا Ú©Ù‡","تا آنکه","از این رو","اگرچنانچه","بس Ú©Ù‡","قبل از","واسه","را","برای این","چونان‌که","زیراکه","تاآنکه","ازاین‌رو","الا این‌که","از بس Ú©Ù‡","از بعد از","یا","برای این Ú©Ù‡","چنان","همین Ú©Ù‡","آن‌جا Ú©Ù‡","ازین‌رو","با این حال","بس‌که","از قبل از","اگر","برای آن Ú©Ù‡","چنان‌چه","همین‌که","آن‌گاه Ú©Ù‡","از بس","بااین‌حال","از بس‌که","اندر","نه","از برای","چنان‌که","همان‌که","ازآنجاکه","بااین‌که","به‌شرط آن‌که","علیه","مگر","برای آن","چنانچه","همان Ú©Ù‡","از آن‌جا Ú©Ù‡","ازبس","با این‌که","به شرط آن‌که","بدون","Ú†Ù‡","خواه","چونکه","بلکه","از آن‌که","ازبس‌که","بااینکه","به شرطی Ú©Ù‡","ضد","زیرا","جز","ازآنکه","از بهر آن‌که","با وجود این","الی","غیر","Ú©Ù‡","الا","اکنون Ú©Ù‡","الاّ","از","بیرون","به","پایین","پشت","پهلوی","Ù¾ÛŒ","تا","توی","درون","دنبال","روی","زیر","کنار","مانند","مثل","مقابل","شبیه","نزدیک","میان","پیش","برخی","پر","زی","سوای","بهر","به غیر ","به اضاÙÙ‡ ÛŒ","به علاوه ÛŒ","به وسیله ÛŒ","به استثنای","به مجرد","به جهت","به خاطر","از نظر","از روی","ازسر","از قبیل","از لحاظ","از حیث","از جمله ÛŒ","در برابر","در مقابل","درباره ÛŒ","درمورد","درمیان","درخصوص","براثر","براساس","برطبق","برحسب","با وجود"],["اگر","اما","پس","تا","چون","Ú†Ù‡","خواه","زیرا","Ú©Ù‡","لیکن","نه","نیز","Ùˆ","ولی","هم","یا","Ú©Ù‡","همین Ú©Ù‡","آنجا Ú©Ù‡","از آنجا Ú©Ù‡","از این روی","از بس","از بس Ú©Ù‡","اکنون Ú©Ù‡","اگر چنانچه","اگر چنانکه","اگر Ú†Ù‡","الا اینکه","با این حال","با اینکه","با وجود اینکه","با وجود این","بس Ú©Ù‡","به شرط آن Ú©Ù‡","به طوری Ú©Ù‡","بلکه","بنابراین","به هر حال","بی آنکه","تا اینکه","تا جایی Ú©Ù‡","چنانچه","چندانکه","چون Ú©Ù‡","در حالی Ú©Ù‡","در صورتی Ú©Ù‡","در نتیجه","زیرا Ú©Ù‡","وانگهی","وقتی Ú©Ù‡","وگرنه","هرچند","هر گاه Ú©Ù‡","هر وقت Ú©Ù‡","همانطور Ú©Ù‡"],["Ú¯ÙØªÙ†","توضیح دادن","اظهار کردن","پرسیدن","درخواست کردن","بحث کردن","اعلام کردن","Ú¯ÙØªÚ¯Ùˆ کردن","Ùهمیدن","درک کردن","پیشنهاد کردن","بیان کردن","Ùکر کردن","عقیده داشتن","مکالمه داشتن","ابراز کردن","مبادله کردن"],["خیلی","زیاد","کاملا زیاد","تقریباً","Ø§Ù†ØµØ§ÙØ§Ù‹","به طرز حیرت انگیزی","به طور عظیمی","بیش ازحد","بخصوص","Ùوق العاده","وحشتناک","به طور Ø´Ú¯ÙØª آوری","به معنای واقعی کلمه","نسبتا","واقعاً","بسیار","به طور Ùوق العاده"],["خواستن","بایستن","شایستن","توانستن","جرات کردن","داشتن","شدن"],["سیاه","سÙید","آبی","قهوه ایی","خاکستری","سبز","نارنجی","ارغوانی","قرمز","سÙید","زرد","دایره","راست","مربع","مثلث","تازه","تلخ","شور","ترش","تند","شیرین","بد","تمیز","پاک","تاریک","دشوار","تار","کثیÙ","خشک","ساده","خالی","گران","سریع","خارجی","کامل","خوب","سخت","سنگین","Ø³ÙØª","ارزان","سبک","محلی","جدید","پرسروصدا","قدیمی","قوی","ساکت","درست","کند","نرم","بسیار","ضعیÙ","مرطوب","اشتباه","جوان","بزرگ","عمیق","طولانی","دراز","کشیده","باریک","کوتاه","Ú©ÙˆÚ†Ú©","وسیع","ضخیم","نازک","ناخواسته","ناپاک","نااهل","بعضی وقت ها","شب","امروز","امسال","ÙØ±Ø¯Ø§","همیشه","اینجا","آنجا","مدرسه","هر کجا","مسجد","خوب","با آرامی","Ø§ÙØªØ§Ù† Ùˆ خیزان","گریان","Ø§ÙØ³ÙˆØ³","Ù…ØªØ§Ø³ÙØ§Ù†Ù‡","عجبا","Ø´Ú¯ÙØªØ§","حتماً","یقیناً","چگونه","چرا","شاید","پنداری","به گمانم","اندک اندک","قطره قطره","به جان","به خدا","مانا","همانا","چنان","چنین","بکردار","بسان","کاش","ای کاش","کاشکی","اگر","اگرچه","وگر","ور","چنانچه","نه","هرگز","هیچ","به هیچ وجه","اصلاً","ابداً","اول","دوم","نخست","درآغاز","پیاپی","گروه گروه","دسته دسته","دوتا دوتا","جز","مگر","جزکه","مگر Ú©Ù‡","Ø§ØªÙØ§Ù‚اً","احتمالاً","دائماً"," اجباراً","معمولاً","سریعاً","مخصوصاً","تقریباً"," آخرالامر","الآن","بالعکس ","ÙÛŒ الÙور","بالطبع","مادام","حتی المقدور ","هنوز","از نو","دوباره","باز","مجدد","خارج","بالا","زیر","عقب","کنار","همه جا","باز","امیدوارم","الهی","خداکند","آرزومندم","ان شالله ","به نظرم","مثل اینکه","احتمال دارد","امکان دارد","تند","کند","آهسته","سریع","بد","آسان","ارزان","نیک","زشت ","نالان","دیروز"],["اÙÙ‡","دÙ","به به","اَه اَه","آخ","آخیش","آخیییی","وا","ای بابا","ای وای","اÙواا","Ù†ÙÚ†Ù‘","اَاَ بابا","هیس","ای وای من ","اÙوه حالا","اÙوه "],["شکستن","آب کردن","پخش کردن","لایه","ورقه","رول کردن","سرخ کردن","پوست کندن","مخلوط کردن","هم زدن","ØªÙØª دادن","قاطی کردن","چشیدن","برش","تکه کردن","نص٠کردن","رنده کردن","جوشیدن","بخار کردن","ریختن","آبکش کردن","اضاÙÙ‡ کردن","دم کردن","تخمیر کردن","باربیکیو","پختن","وزن کردن","رل کردن","خورد کردن","بخار پز کردن","غل زدن","آشپزی","مواد اولیه","دستور پخت","دستورالعمل","چرب کردن","در ÙØ± پختن","با ملاقه کشیدن","ریزریز کردن","مکعب خورد کردن","چرخ کردن","تیکه تیکه کردن","به آرامی جوشاندن","سریع هم زدن","با دست هم زدن","هم زن برقی","هم زدن با حرکت دایره ایی","گرم کردن","هم زدن باحرکت جلووعقب","تزیین کردن","ورز دادن","بریان کردن","گریل کردن","کباب کردن","با آتش مستقیم پختن","ادویه زدن","روغن اضاÙÛŒ را Ú¯Ø±ÙØªÙ†","طعم دار کردن","پیچیدن","پخته نشده","زیاد پخته شده","کاملا پخته شده","نیم پز","خام","یخ زده","قاشق چایخوری","ÙØ± ","گاز","سطح روی گاز","حرارت ملایم","عصاره مرغ","عصاره گوشت","عصاره سبزیجات","سبک پخت وپز","ادویه","خمیر","بی ادویه","کتاب آشپزی"],["ÙØ±ÙˆØ±Ø¯ÛŒÙ†","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسÙند","صبح","ظهر","عصر","نص٠شب","مغرب","غروب","پیش از ظهر","بامداد","قبل از ظهر","نیمه ظهر","ساعت","روز","زمان","تقویم","سال","دقیقه","اوایل شب","سر شب","Ù‡ÙØªÙ‡","گذشته","آینده","حال","بهار","تابستان","پاییز","زمستان","گرینویچ","دهه","تقویم قمری","تقویم شمسی","تقویم نجومی","ساعت شنی","ساعت عقربه ایی","ساعت جهانی","سریع","سال کبیسه","ساعت خورشیدی","لحظه لحظه","ماه","الان","وقت","نص٠النهار","حال حاضر","اکنون","ربع","روزمره","روزانه","زمان سنج","تاخیر","دیروز","امروز"],["هر","همه","هیچ","Ùلان","چندین","خیلی ","Ú©Ù…ÛŒ","بسیاری","اندکی","قدری","برخی","بعضی","پاره ایی","چندان"],["آقا","خانم","دوشیزه","جناب","سرکار خانم","سرکار آقا","دکتر","جناب آقا"],["دوباره","قطعاً","حتماً","اصلاً","قاعدتاً","ظبیعتاً","شاید","کاملاً","به","از","Ùˆ","همچنین","هم","مانند","مثل","شبیه به","ولی","اما","امّا","لیکن","ولو","در ضمن","در کنار","ترجیحاً","وگرنه","پس","سپس","وقتی","زمانی Ú©Ù‡","به خاطر","مخصوصاً","مشخصاً","در Ú©Ù„","بعد","قبل","تا"],["را"],["همدیگر","یکدیگر"],["مال من","مال تو","مال او","مال آن","مال ما ","مال شما","مال ایشان","مال آنها"],["نیم","یک سوم","یک چهارم","یک پنجم","یک ششم","یک Ù‡ÙØªÙ…","یک هشتم","یک نهم","یک دهم","دو سوم","دو چهارم","دو پنجم","دو ششم","دو Ù‡ÙØªÙ…","دو هشتم","دو نهم","سه چهارم","سه پنجم"],["ÛŒ","یک","برخی از","معدود","چندتا","مقداری"],s)),a=[["Ú†Ù‡","Ú†Ù‡"],["خواه","خواه"],["نه","نه"],["هم","هم"],["یا","یا"]],c={recommendedLength:25},i=["برخی از","یک","ÛŒ","مقداری","چندتا","معدود","یک","دو","سه","چهار","پنج","شش","Ù‡ÙØª","هشت","نه","ده","همان","همین","آنها","اینان","آنان","اینها","این","آن"],{regexHelpers:{searchAndReplaceWithRegex:u}}=n.languageProcessing,l=function(e){const t=[];return t.push("Ù†"+e),e.endsWith("ها")?t.push(...["یی","ÛŒ"].map((t=>e+t))):/([^وای]Ù‡)$/i.test(e)?t.push(...["‌ای","‌یی","‌ام","‌ات","‌اش"].map((t=>e+t))):/([وا])$/i.test(e)?t.push(...["یی","یم","یت","یش"].map((t=>e+t))):(e.endsWith("ÛŒ")&&t.push(e+"‌ای"),t.push(...["مان","شان","تان","Ø´","ت","Ù…","ÛŒ"].map((t=>e+t)))),t};function g(e){const t=[];t.push(...l(e));const n=function(e){return e.startsWith("Ù†")?e.slice(1,e.length):u(e,[["(Ùˆ|ا)(یش|یت|یم|یی)$","$1"],["([^وای]Ù‡)(‌یی|‌ای|‌اش|‌ات|‌ام)$","$1"],["(ÛŒ)‌ای$","$1"],["(ها)یی$","$1"],["(مان|شان|تان|Ø´|ت|Ù…|ÛŒ)$",""]])}(e);return n&&(t.push(n),t.push(...l(n))),t}const{baseStemmer:h}=n.languageProcessing;function d(){return h}const p=["آراسته","آزرده","آزموده","Ø¢Ø´ÙØªÙ‡","آغشته","Ø¢ÙØ±ÛŒØ¯Ù‡","آلوده","آمده","آورده","آمیخته","آورده","آویخته","اÙÙØªØ§Ø¯Ù‡","Ø§ÙŽÙØ±Ø§Ø´ØªÙ‡","Ø§ÙŽÙØ±ÙˆØ®ØªÙ‡","Ø§ÙŽÙØ²ÙˆØ¯Ù‡","Ø§ÙŽÙØ´Ø§Ù†Ø¯Ù‡","اَنباشته","اَنداخته","اَندوخته","اÙنگاشته","برانگیخته","باریده","Ø¨Ø§ÙØªÙ‡","بخشوده","بخشیده","برده","برگردانده","برگزیده","بسته","بلعیده","بوسیده","بوییده","پاشیده","پخته","Ù¾Ø°ÛŒØ±ÙØªÙ‡","پراکنده","پرداخته","پرستیده","پرسیده","پژمرده","پسندیده","پنداریده","پوشیده","پوشانده","پیچیده","پیوسته","پیموده","ØªØ§ÙØªÙ‡","تراشیده","ترسانده","ترکیده","ترکانده","تَکانده","تنیده","توانسته","جوشانده","جوشیده","جَویده","جوییده","چاپیده","چرخیده","چسبانده","چسبیده","چشیده","چیده","خاسته","خشکیده","خراشیده","خریده","خوانده","خورده","داده","دریده","دزدیده","دوخته","دوشیده","دیده","رانده","ربوده","رسانده","رسیده","رشته","Ø±ÙØªÙ‡","ریخته","زاده","زده","زدوده","ساخته","سابیده","ساییده","ستانده","ستوده","سرشته","سروده","سوخته","سوزانده","شده","شسته","Ø´Ú©Ø§ÙØªÙ‡","شکانده","شکسته","Ø´Ú©ÙØªÙ‡","شکاÙیده","شمرده","شناسانده","Ø´Ù†ÙØªÙ‡","شنیده","طلبیده","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù‡","ÙØ±Ø³ØªØ§Ø¯Ù‡","ÙØ±Ø³ÙˆØ¯Ù‡","ÙØ±Ù…وده","ÙØ±ÙˆØ®ØªÙ‡","ÙØ±ÛŒÙته","ÙØ´Ø±Ø¯Ù‡","کاسته","کاشته","کشته","کشیده","Ú¯ÙØªÙ‡","کوبیده","گداخته","گذاشته","گردانده","Ú¯Ø±ÙØªÙ‡","گزارده","گَزیده","Ú¯ÙØ³ØªØ±Ø§Ù†Ø¯Ù‡","Ú¯ÙØ³ØªØ±Ø¯Ù‡","گسسته","گسیخته","گشته","گشوده","Ú¯ÙØªÙ‡","گماشته","مالیده","نامیده","نگاشته","نواخته","نوردیده","Ù†ÙÙˆÙØ´ØªÙ‡","نوشیده","نهاده","Ù†Ù‡ÙØªÙ‡","وابسته","واگذاشته","ÙˆØ§Ú¯ÙØªÙ‡","وانهاده","انداخته","Ø§ÙØªØ§Ø¯Ù‡","ورانداخته","ورزیده","وزیده","ویرایش شده","ÛŒØ§ÙØªÙ‡","ستانده شده","آغازشده","آماده","اَرزیده","آمده","پذیرایی شده","تولید شده","Ø§Ø³ØªÙØ§Ø¯Ù‡ شده","Ø¢Ø³ÙØ§Ù„ت شده","اخراج شده","خلق شده","خیس شده","آماده شده","باز شده","بازپس Ú¯Ø±ÙØªÙ‡ شده","بشمار آمده","بررسی شده","پاره شده","پیدا شده","زخم خورده","انعام داده شده","زخم شده","ضایع شده","شکست ÛŒØ§ÙØªÙ‡","شروع شده","گول خورده","دزدی Ø±ÙØªÙ‡","انجام Ú¯Ø±ÙØªÙ‡","ÙØ±Ù…ایش داده","ÙØ±Ù…ایش شده","به سر برده","سر Ø±ÙØªÙ‡","سر آمده","روشن شده","راهنمایی شده","تکان خورده","زمین خورده","دیده شده","بر آمده","تلÙیق شده","تخلیه شده","تواÙÙ‚ شده","توجه شده","توق٠شده","توقی٠شده","حمله شده","خبردار شده","Ú¯Ø±ÙØªØ§Ø± شده","مسخره شده","مقصر شناخته شده","مضاع٠شده","ممکن شده","نقشه کشیده","آغازشدن","آماده شدن","ارزیابی شدن","پذیرایی شدن","تولید شدن","Ø§Ø³ØªÙØ§Ø¯Ù‡ شدن","Ø¢Ø³ÙØ§Ù„ت شدن","اخراج شدن","خلق شدن","خیس شدن","آماده شدن","باز کردن","باز پس Ú¯Ø±ÙØªÙ†","بشمار آمدن","بررسی شدن","پاره شدن","پیدا شدن","زخم خوردن","انعام Ú¯Ø±ÙØªÙ†","زخم شدن","ضایع شدن","شکست ÛŒØ§ÙØªÙ†","شروع شدن","گول خوردن","دزدی Ø±ÙØªÙ†","انجام Ú¯Ø±ÙØªÙ†","ÙØ±Ù…ایش دادن","ÙØ±Ù…ایش شدن","به سر بردن","سر Ø±ÙØªÙ†","سر آمدن","روشن شدن","راهنمایی کردن","تکان خوردن","زمین خوردن","دیده شدن","بر آمدن","تلÙیق شدن","تخلیه شدن","تواÙÙ‚ شدن","توجه شدن","توق٠کردن","توقی٠شدن","حمله شدن","خبردار شدن","Ú¯Ø±ÙØªØ§Ø± آمدن","مسخره شدن","مقصر شناخته شدن","مضاع٠کردن","ممکن شدن","نقشه کشیدن","آغاز شده","آماده شد","ارزیابی شدم","پذیرایی شدم","تولید شد","Ø§Ø³ØªÙØ§Ø¯Ù‡ شد","Ø¢Ø³ÙØ§Ù„ت شد","اخراج شدم","خلق شدم","خیس شدم","آماده شد","باز شد","باز پس Ú¯Ø±ÙØªÙ‡ شد","بشمار آمد","بررسی شد","پاره شد","پیدا شد","زخم خورد","انعام Ú¯Ø±ÙØªÙ…","زخم شد","ضایع شد","شکست ÛŒØ§ÙØªÙ…","شروع شد","گول خوردم","دزدی Ø±ÙØª","انجام Ú¯Ø±ÙØª","سر Ø±ÙØª","سر آمد","روشن شد","راهنمایی شدم","تکان خورد","زمین خورد","دیده شدم","تلÙیق شد","تخلیه شد","تواÙÙ‚ شد","توجه شد","توق٠کرد","توقی٠شدم","حمله شد","خبردار شدم","Ú¯Ø±ÙØªØ§Ø± آمد","مسخره شدم","مقصر شناخته شدم","مضاع٠شد","ممکن شد","نقشه کشیده شد","آغاز شده است","آماده می‌شد","ارزیابی شدی","پذیرایی شدی","تولید می‌شد","Ø§Ø³ØªÙØ§Ø¯Ù‡ می‌شد","Ø¢Ø³ÙØ§Ù„ت می‌شد","اخراج شدی","خلق شدی","خیس شدی","آماده می‌شد","باز شدند","باز پس Ú¯Ø±ÙØªÙ‡ شد","بشمار آمدند","بررسی شدند","پاره شدند","پیدا شدند","زخم خوردند","انعام Ú¯Ø±ÙØªÛŒ","زخم شدند","ضایع شدند","شکست ÛŒØ§ÙØªÛŒ","شروع می‌شد","گول خوردی","دزدی Ø±ÙØªÙ‡","انجام Ú¯Ø±ÙØªÙ†Ø¯","سر Ù…ÛŒâ€ŒØ±ÙØª","داشت سر می‌آمد","روشن شدند","راهنمایی شدی","تکان خوردند","زمین خواهد خورد","دیده شدی","تلÙیق شدند","تخلیه شدند","تواÙÙ‚ شده","توجه می‌شد","توق٠کردند","توقی٠شدی","حمله می‌شد","خبردار شدی","Ú¯Ø±ÙØªØ§Ø± آمده","مسخره شدی","مقصر شناخته شدی","مضاع٠شده","ممکن شده","نقشه کشیده شده است","داشت آغاز می‌شد","داشت آماده می‌شد","ارزیابی شد","پذیرایی شد","داشت تولید می‌شد","داشت Ø§Ø³ØªÙØ§Ø¯Ù‡ می‌شد","داشت Ø¢Ø³ÙØ§Ù„ت می‌شد","اخراج شد","خلق شد","خیس شد","آماده می‌شدند","باز می‌شد","داشت باز پس Ú¯Ø±ÙØªÙ‡ می‌شد","بشمار می‌آمد","بررسی می‌شد","پاره می‌شد","پیدا شده","زخم خورده","انعام Ú¯Ø±ÙØª","زخم شده","ضایع شده","شکست ÛŒØ§ÙØª","داشت شروع می‌شد","گول خورد","دزدی Ø±ÙØªÙ‡ است","انجام Ù…ÛŒâ€ŒÚ¯Ø±ÙØª","سر Ø±ÙØªÙ‡","سر آمده","روشن می‌شد","راهنمایی شد","تکان می‌خورد","دیده شد","تلÙیق می‌شد","تخلیه می‌شد","تواÙÙ‚ شده است","توجه شده","توق٠کرده","توقی٠شد","داشت حمله می‌شد","خبردار شد","Ú¯Ø±ÙØªØ§Ø± آمده است","مسخره شد","مقصر شناخته شد","مضاع٠شده است","ممکن شده است","نقشه کشیده خواهد شد","آغاز شده بود","آماده شده","ارزیابی شدیم","پذیرایی شدیم","تولید شده ","Ø§Ø³ØªÙØ§Ø¯Ù‡ شده","Ø¢Ø³ÙØ§Ù„ت شده","اخراج شدیم","خلق شدیم","خیس شدیم","داشت آماده می‌شد","باز می‌شدند","داشتند باز پس Ú¯Ø±ÙØªÙ‡ می‌شدند","بشمار می‌آمدند","بررسی می‌شدند","پاره می‌شدند","پیدا شده است","زخم خورده است","انعام Ú¯Ø±ÙØªÛŒÙ…","زخم شده است","ضایع شده است","شکست ÛŒØ§ÙØªÛŒÙ…","شروع شده","گول خوردیم","دزدی Ø±ÙØªÙ‡ بود","انجام Ù…ÛŒâ€ŒÚ¯Ø±ÙØªÙ†Ø¯"," سر Ø±ÙØªÙ‡ است","سر آمده است","روشن می‌شدند","راهنمایی شدیم","تکان می‌خوردند","دیده شدیم","تلÙیق می‌شدند","تخلیه می‌شدند","تواÙÙ‚ شده بود","توجه شده است","توق٠کرده است","توقی٠شدیم","حمله شده","خبردار شدیم","Ú¯Ø±ÙØªØ§Ø± آمده بود","مسخره شدیم","مقصر شناخته شدیم","مضاع٠شده بود","ممکن شده بود","آغاز شود","آماده شده است","ارزیابی شدید","پذیرایی شدید","تولید شده است","Ø§Ø³ØªÙØ§Ø¯Ù‡ شده است","Ø¢Ø³ÙØ§Ù„ت شده است","اخراج شدید","خلق شدید","خیس شدید","داشتند آماده می‌شدند","داشت باز می‌شد","باز پس Ú¯Ø±ÙØªÙ‡ شده","داشت بشمار می‌آمد","داشت بررسی می‌شد","پاره شده","پیدا شده بود","زخم خورده بود","انعام Ú¯Ø±ÙØªÛŒØ¯","زخم شده‌اند","ضایع شده بود","شکست ÛŒØ§ÙØªÛŒØ¯","شروع شده است","گول خوردید","دزدی می‌رود","داشت انجام Ù…ÛŒâ€ŒÚ¯Ø±ÙØª","سر Ø±ÙØªÙ‡ بود","سر آمده بود","داشت روشن می‌شد","راهنمایی شدید","داشت تکان می‌خورد","دیده شدید","داشت تلÙیق می‌شد","داشت تخلیه می‌شد","تواÙÙ‚ شود","توجه شده بود","توق٠کرده بود","توقی٠شدید","حمله شده است","خبردار شدید","Ú¯Ø±ÙØªØ§Ø± خواهد آمد","مسخره شدید","مقصر شناخته شدید","مضاع٠شود","ممکن شود","آغاز می‌شود","آماده شده بود","ارزیابی شدند","پذیرایی شدند","تولید شده بود","Ø§Ø³ØªÙØ§Ø¯Ù‡ شده بود","Ø¢Ø³ÙØ§Ù„ت شده بود","اخراج شدند","خلق شدند","خیس شدند","آماده شده","داشتند باز می‌شدند","باز پس Ú¯Ø±ÙØªÙ‡ شده است","داشتند بشمار می‌آمدند","داشتند بررسی می‌شدند","پاره شده است","پیدا شده بودند","زخم خورده بودند","انعام Ú¯Ø±ÙØªÙ†Ø¯","زخم شده بود","ضایع شده بودند","شکست ÛŒØ§ÙØªÙ†Ø¯","شروع شده‌اند","گول خوردند","دزدی Ø±ÙØªÙ‡ باشد","داشتند انجام Ù…ÛŒâ€ŒÚ¯Ø±ÙØªÙ†Ø¯","دارد سر می‌رود","سر خواهد آمد","داشتند روشن می‌شدند","راهنمایی شدند","داشتند تکان می‌خوردند","دیده شدند","داشتند تلÙیق می‌شدند","داشتند تخلیه می‌شدند","تواÙÙ‚ می‌شود","توجه می‌شود","توق٠می‌کند","توقی٠شدند","حمله شده بود","خبردار شدند","مسخره شدند","مقصر شناخته شدند","مضاع٠می‌شود","ممکن خواهد شد","آراستن","آزردن","آزمودن","Ø¢Ø´ÙØªÙ†","آغشتن","Ø¢ÙØ±ÛŒØ¯Ù†","آلودن","آمدن","آمیختن","آوردن","آویختن","اÙÙØªØ§Ø¯Ù†","Ø§ÙŽÙØ±Ø§Ø´ØªÙ†","Ø§ÙŽÙØ±ÙˆØ®ØªÙ†","Ø§ÙŽÙØ²ÙˆØ¯Ù†","Ø§ÙŽÙØ´Ø§Ù†Ø¯Ù†","اَنباشتن","اَنداختن","اَندوختن","برانگیختن","Ø¨Ø§ÙØªÙ†","بخشودن","بخشیدن","بردن","برگرداندن","برگزیدن","بستن","بلعیدن","بوسیدن","بوییدن","پاشیدن","پختن","Ù¾Ø°ÛŒØ±ÙØªÙ†","پراکندن","پرداختن","پرستیدن","پرسیدن","پژمردن","پسندیدن","پوشیدن","پوشاندن","پیچیدن","پیوستن","پیمودن","ØªØ§ÙØªÙ†","تراشیدن","ترساندن","ترکیدن","ترکاندن","تَکاندن","تنیدن","توانستن","جوشاندن","جوشیدن","جَویدن","جوییدن","چاپیدن","چرخییدن","چسباندن","چسبیدن","چشیدن","چیدن","خاستن","خشکاندن","خراشیدن","خریدن","خواندن","خوردن","دادن","دریدن","دزدیدن","دوختن","دوشیدن","راندن","ربودن","رساندن","رسیدن","ریختن","زادن","زدن","زدودن","ساختن","سابیدن","ساییدن","ستاندن","ستودن","سرشتن","سرودن","سوختن","سوزاندن","انجام شدن","شستن","Ø´Ú©Ø§ÙØªÙ†","شکاندن","شکستن","Ø´Ú©ÙÙØªÙ†","شمردن","شناساندن","Ø´ÙÙ†ÙÙØªÙ†","شنیدن","طلبیدن","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù†","ÙØ±Ø³ØªØ§Ø¯Ù†","ÙØ±Ø³ÙˆØ¯Ù†","ÙØ±Ù…ودن","ÙØ±ÙˆØ®ØªÙ†","ÙØ±ÛŒÙتن","ÙÙØ´Ùردن","کاستن","کاشتن","Ú©ÙØ´ØªÙ†","کشیدن","Ú©ÙŽÙØªÙ†","کوبیدن","Ú¯ÙØ¯Ø§Ø®ØªÙ†","گذاشتن","گرداندن","Ú¯Ø±ÙØªÙ†","گزاردن","گَزیدن","Ú¯ÙØ³ØªØ±Ø§Ù†Ø¯Ù†","Ú¯ÙØ³ØªÙŽØ±Ø¯Ù†","Ú¯ÙØ³Ø³ØªÙ†","Ú¯ÙØ³ÛŒØ®ØªÙ†","گشودن","Ú¯ÙØªÙ†","Ú¯Ùماشتن","مالیدن","نامیدن","نگاشتن","نواختن","نَوردیدن","Ù†ÙÙˆÙØ´ØªÙ†","نوشیدن","نهادن","Ù†Ù‡ÙØªÙ†","واگذاشتن","وانهادن","Ø§ÙØªØ§Ø¯Ù†","ورانداختن","ورزیدن","ویرایش کردن","ÛŒØ§ÙØªÙ†","ستاندن","آراسته شد","آزرده شدم","آزموده شدم","Ø¢Ø´ÙØªÙ‡ شدم","آغشته شد","Ø¢ÙØ±ÛŒØ¯Ù‡ شد","آلوده شد","آمد","آمیخته شد","آورده شد","آویخته شد","Ø§ÙØªØ§Ø¯Ù‡ شده","Ø§ÙØ±Ø§Ø´ØªÙ‡ شد","Ø§ÙØ±ÙˆØ®ØªÙ‡ شد","Ø§ÙØ²ÙˆØ¯Ù‡ شد","Ø§ÙØ´Ø§Ù†Ø¯Ù‡ شد","انباشته شد","انداخته شد","اندوخته شد","برانگیخته شد","Ø¨Ø§ÙØªÙ‡ شد","بخشوده شد","بخشیده شد","برده شد","برگردانده شد","برگزیده شده","بسته شد","بلعیده شد","بوسیده شدم","بوییده شد","پاشیده شد","پخته شد","Ù¾Ø°ÛŒØ±ÙØªÙ‡ شدم","پراکنده شد","پرداخته شد","پرستیده شد","پرسیده شد","پژمرده شد","پسندیده شد","پوشیده شد","پیچیده شد","پیوسته شده","پیموده شد","ØªØ§ÙØªÙ‡ شد","تراشیده شد","ترسانده شدم","ترکیده شد","تکانده شد","تنیده شد","جوشانده شد","جوشیده شد","جویده شد","جوییده شده","چاپیده شدم","چرخیده شد","چسبانده شد","چسبیده شد","چشیده شد","چیده شد","خاسته شد","خشکیده شد","خراشیده شد","خریده شد","خوانده شد","خورده شد","داده شد","دریده شد","دزدیده شد","دوخته شد","دوشیده شد","رانده شد","ربوده شد","رسانده شد","رسیده شد","ریخته شد","زاده شد","زده شد","زدوده شد","ساخته شد","سابیده شد","ستانده شد","ستوده شد","سرشته شد","سروده می‌شود","سوخته شد","سوزانده شد","انجام شد","شسته شد","Ø´Ú©Ø§ÙØªÙ‡ شد","شکانده شد","شکسته شد","Ø´Ú©ÙØªÙ‡ شد","شمرده شد","شناسانده شد","Ø´Ù†ÙØªÙ‡ شد","شنیده شد","طلبیده شدم","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù‡ شد","ÙØ±Ø³ØªØ§Ø¯Ù‡ شد","ÙØ±Ø³ÙˆØ¯Ù‡ شد","ÙØ±Ù…وده شد","ÙØ±ÙˆØ®ØªÙ‡ شد","ÙØ±ÛŒÙته شد","ÙØ´Ø±Ø¯Ù‡ شد","کاسته شد","کاشته شد","کشته شد","کشیده شد","Ú¯ÙØªÙ‡ شد","کوبیده شد","گداخته شده","گذاشته شد","گردانده شد","Ú¯Ø±ÙØªÙ‡ شد","گزارده شد","گزیده شد","گسترانده شد","گسترده شد","گسسته شد","گسیخته شد","گشوده شد","Ú¯ÙØªÙ‡ شد","گماشته شده","مالیده شد","نامیده شد","نگاشته شد","نواخته شد","نوردیده شد","نوشته شد","نوشیده شد","نهاده شد","Ù†Ù‡ÙØªÙ‡ شده","واگذاشته شد","وانهاده شد","Ø§ÙØªØ§Ø¯Ù‡ شد","ورانداخته شد","ورزیده شد","ویرایش شد","ÛŒØ§ÙØªÙ‡ شد","ستانده شد","آراسته شدند","آزرده شدی","آزموده شدی","Ø¢Ø´ÙØªÙ‡ شدی","آغشته شده","Ø¢ÙØ±ÛŒØ¯Ù‡ شدیم","آلوده شدند","آمدند","آمیخته شدند","آورده شدند","آویخته شدند","Ø§ÙØªØ§Ø¯Ù‡ شده است","Ø§ÙØ±Ø§Ø´ØªÙ‡ شدند","داشت Ø§ÙØ±ÙˆØ®ØªÙ‡ می‌شد","Ø§ÙØ²ÙˆØ¯Ù‡ شدند","Ø§ÙØ´Ø§Ù†Ø¯Ù‡ شدند","انباشته شدند","انداخته شدند","اندوخته شدند","برانگیخته می‌شد","Ø¨Ø§ÙØªÙ‡ شدند","بخشوده شدند","بخشیده شدند","برده شدند","برگردانده شدند","برگزیده شده است","بسته شدند","بلعیده شدند","بوسیده شد","بوییده شده","پاشیده شده","پخته شدند","Ù¾Ø°ÛŒØ±ÙØªÙ‡ شد","پراکنده شدند","پرداخته شده","پرستیده می‌شود","پرسیده شدند","پژمرده شدند","پسندیده شدند","پوشیده شدند","پیچیده شده","پیوسته شده است","پیموده شده","ØªØ§ÙØªÙ‡ شدند","تراشیده شدند","ترسانده شد","ترکیده شده","تکانده شدند","تنیده شده","داشت جوشانده می‌شد","داشت جوشیده می‌شد","جویده شده","جوییده شده است","چاپیده شدی","چرخیده شدند","چسبانده شدند","چسبیده شدند","چشیده شدند","چیده شدند","خاسته شدند","خشکیده شدند","خراشیده شدند","خریده شدند","خوانده شدند","خورده شدند","داده شدند","دریده شدند","دزدیده شدند","دوخته شدند","دوشیده شدند","رانده شدند","ربوده شدند","رسانده شده","رسیده شده","داشت ریخته می‌شد","زاده شده","داشت زده می‌شد","زدوده شده","ساخته شدند","سابیده شدند","ستانده شده","ستوده می‌شد","سرشته شده","سروده شوده","داشت سوخته می‌شد","سوزانده شدند","انجام شدند","شسته شدند","Ø´Ú©Ø§ÙØªÙ‡ شدند","شکانده شدند","شکسته شدند","Ø´Ú©ÙØªÙ‡ شدند","شمرده شدند","شناسانده شدند","Ø´Ù†ÙØªÙ‡ می‌شد","شنیده می‌شد","طلبیده شدی","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù‡ شدند","ÙØ±Ø³ØªØ§Ø¯Ù‡ شدند","ÙØ±Ø³ÙˆØ¯Ù‡ شدند","ÙØ±Ù…وده شده","ÙØ±ÙˆØ®ØªÙ‡ شدند","داشت ÙØ±ÛŒÙته Ù…ÛŒ شد","ÙØ´Ø±Ø¯Ù‡ شده","کاسته می‌شد","کاشته شده","کشته شدند","کشیده شدند","Ú¯ÙØªÙ‡ شده","داشت کوبیده می‌شد","گداخته شده است","داشت گذاشته می‌شد","گردانده شده","داشت Ú¯Ø±ÙØªÙ‡ می‌شد","گزارده شده","گزیده شدم","گسترانده شده","گسترده شده","گسسته شده","گسیخته شده","داشت گشوده می‌شد","داشت Ú¯ÙØªÙ‡ می‌شد","گماشته شده است","مالیده شده","نامیده شده","داشت نگاشته می‌شد","نواخته می‌شد","نوردیده شده","نوشته شدند","نوشیده شده","نهاده شده","Ù†Ù‡ÙØªÙ‡ شده است","واگذاشته شده","وانهاده شده","Ø§ÙØªØ§Ø¯Ù‡ شدند","ورانداخته شده","ورزیده شده","ویرایش شدند","ÛŒØ§ÙØªÙ‡ شدند","ستانده شده","آراسته شده","آزرده شد","آزموده شد","Ø¢Ø´ÙØªÙ‡ شد"," آغشته شده است","Ø¢ÙØ±ÛŒØ¯Ù‡ شدند","داشت آلوده می‌شد","داشت می‌آمد","آمیخته می‌شد","آورده می‌شد","آویخته شده","Ø§ÙØªØ§Ø¯Ù‡ شده بود","Ø§ÙØ±Ø§Ø´ØªÙ‡ شده","Ø§ÙØ±ÙˆØ®ØªÙ‡ شده","داشت Ø§ÙØ²ÙˆØ¯Ù‡ می‌شد","Ø§ÙØ´Ø§Ù†Ø¯Ù‡ شده","داشت انباشته می‌شد","انداخته می‌شد","اندوخته می‌شد","برانگیخته شده","داشت Ø¨Ø§ÙØªÙ‡ می‌شد","بخشوده شده","بخشیده شده","داشت برده می‌شد","برگردانده شده","برگزیده شده بود","بسته می‌شد","بلعیده شده","بوییده شده است","پاشیده شده است","پخته می‌شد","Ù¾Ø°ÛŒØ±ÙØªÙ‡ شدند","پراکنده می‌شد","پرداخته شده است","پرستیده خواهد شد","داشت پرسیده می‌شد","پژمرده می‌شد","پسندیده شده","داشت پوشیده می‌شد","پیچیده شده است","پیموده شده است","ØªØ§ÙØªÙ‡ شده","داشت تراشیده می‌شد","ترسانده شدند","ترکیده شده است","تکانده شده","تنیده شده است","جوشانده شده","جوشیده شده","جویده شده است","چاپیده شد","چرخیده شده","داشت چسبانده می‌شد","چسبیده شده","چشیده شده","داشت چیده می‌شد","خاسته شده","خشکیده شده","خراشیده شده","خریده شده","داشت خوانده می‌شد","خورده می‌شد","داده شده","دریده شده","داشت دزدیده می‌شد","داشت دوخته می‌شد","داشت دوشیده می‌شد","رانده شده","ربوده شده","رسانده شده است","رسیده شده است","ریخته شده","زاده شده است","زده شده","زدوده شده است","داشت ساخته می‌شد","داشت سابیده می‌شد","ستانده شده است","ستوده شده","سرشته شده است","سروده شوده است","داشتند سوخته می‌شدند","داشت سوزانده می‌شد","انجام می‌شد","شسته می‌شد","داشت Ø´Ú©Ø§ÙØªÙ‡ می‌شد","داشت شکانده می‌شد","شکسته می‌شد","Ø´Ú©ÙØªÙ‡ می‌شد","شمرده شده","شناسانده شده","داشت Ø´Ù†ÙØªÙ‡ می‌شد","داشت شنیده می‌شد","طلبیده شد","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù‡ شده","ÙØ±Ø³ØªØ§Ø¯Ù‡ شده","داشت ÙØ±Ø³ÙˆØ¯Ù‡ می‌شد","ÙØ±Ù…وده شده است","ÙØ±ÙˆØ®ØªÙ‡ می‌شد","ÙØ±ÛŒÙته شده","ÙØ´Ø±Ø¯Ù‡ شده است","داشت کاسته می‌شد","کاشته شده است","کشته شده","داشت کشیده می‌شد","Ú¯ÙØªÙ‡ شده است","کوبیده می‌شود","گداخته شد","گذاشته شده","گردانده شده است","Ú¯Ø±ÙØªÙ‡ شده","گزارده شده است","گزیده شدی","گسترانده شده است","گسترده شده است","گسسته شده است","گسیخته شده است","گشوده شده","Ú¯ÙØªÙ‡ شده","گماشته خواهد شد","مالیده شده است","نامیده شده است","نگاشته شده","داشت نواخته می‌شد","نوردیده شده است","داشت نوشته می‌شد","نوشیده شده است","نهاده شده است","Ù†Ù‡ÙØªÙ‡ شده بود","واگذاشته شده است","وانهاده شده است","Ø§ÙØªØ§Ø¯Ù‡ شده","ورانداخته شده است","ورزیده شده است","ویرایش شده","ÛŒØ§ÙØªÙ‡ شده","ستانده شده","آراسته شده است","آزرده شدیم","آزموده شدیم","Ø¢Ø´ÙØªÙ‡ شدیم","آغشته شده بود","Ø¢ÙØ±ÛŒØ¯Ù‡ شده‌ام","داشتند آلوده می‌شدند","آمیخته می‌شدند","آورده می‌شدند","آویخته شده است","Ø§ÙØªØ§Ø¯Ù‡ شده بودند","Ø§ÙØ±Ø§Ø´ØªÙ‡ شده است","Ø§ÙØ±ÙˆØ®ØªÙ‡ شده است","داشتند Ø§ÙØ²ÙˆØ¯Ù‡ می‌شدند","Ø§ÙØ´Ø§Ù†Ø¯Ù‡ شده است","داشتند انباشته می‌شدند","انداخته می‌شدند","اندوخته می‌شدند","برانگیخته شده است","داشتند Ø¨Ø§ÙØªÙ‡ می‌شدند","بخشوده شده است","بخشیده شده است","داشتند برده می‌شدند","برگردانده شده است","برگزیده خواهد شد","بسته می‌شدند","بلعیده شده است","پاشیده شده بود","پخته می‌شدند","Ù¾Ø°ÛŒØ±ÙØªÙ‡ شده‌ام","پراکنده می‌شدند","پرداخته شده بود","پرستیده بشود","پرسیده شده","پژمرده می‌شدند","پسندیده شده است","داشتند پوشیده می‌شدند","پیچیده شده بود","پیموده شده بود","ØªØ§ÙØªÙ‡ شده است","داشتند تراشیده می‌شدند","ترسانده شده","تکانده شده است","تنیده شده بود","جوشانده شده است","جوشیده شده است","جویده بشود","چاپیده شدیم","چرخیده شده است","چسبانده شده","چسبیده شده است","چشیده شده است","داشتند چیده می‌شدند","خاسته شده است","خشکیده شده است","خراشیده شده است","خریده شده است","داشتند خوانده می‌شدند","خورده می‌شدند","داده شده است","دریده شده است","دزدیده شده","داشتند دوخته می‌شدند","داشتند دوشیده می‌شدند","رانده شده است","ربوده شده است","رسانده شده بود","رسیده شده بود","ریخته شده است","زاده شده بود","زده شده است","زدوده شده بود","داشتند ساخته می‌شدند","داشتند سابیده می‌شدند","ستانده شده بود","ستوده شده است","سروده شوده بود","سوخته شده","داشتند سوزانده می‌شدند","انجام می‌شدند","شسته می‌شدند","داشتند Ø´Ú©Ø§ÙØªÙ‡ می‌شدند","داشتند شکانده می‌شدند","شکسته می‌شدند","Ø´Ú©ÙØªÙ‡ می‌شدند","شمرده شده است","شناسانده شده است","Ø´Ù†ÙØªÙ‡ شده","شنیده شده","طلبیده شدیم","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù‡ شده است","ÙØ±Ø³ØªØ§Ø¯Ù‡ شده است","ÙØ±Ø³ÙˆØ¯Ù‡ شده","ÙØ±ÙˆØ®ØªÙ‡ می‌شدند","ÙØ±ÛŒÙته شده است","ÙØ´Ø±Ø¯Ù‡ شده بود","کاسته شده","کاشته شده بود","کشته شده است","کشیده شده","Ú¯ÙØªÙ‡ شده بود","گذاشته شده است","گردانده بشود","Ú¯Ø±ÙØªÙ‡ شده است","گزارده شده باشد","گزیده شد","گسترانده شده بود","گسترده شده بود","گسسته شده بود","گشوده شده است","Ú¯ÙØªÙ‡ شده است","مالیده می‌شود","نگاشته شده است","نواخته شده","دارد نوردیده می‌شود","داشتند نوشته می‌شدند","نوشیده شده بود","Ø§ÙØªØ§Ø¯Ù‡ شده است","ورانداخته شده بود","ویرایش شده است","ÛŒØ§ÙØªÙ‡ شده است","ستانده شده بود","آراسته شده بود","آزرده شدید","آزموده شدید","Ø¢Ø´ÙØªÙ‡ شدید","آغشته شده بودند","Ø¢ÙØ±ÛŒØ¯Ù‡ شده‌ای","آلوده شده","آمده است","داشت آمیخته می‌شد","داشت آورده می‌شد","آویخته شده‌اند","Ø§ÙØªØ§Ø¯Ù‡ خواهد شد","Ø§ÙØ±Ø§Ø´ØªÙ‡ شده بود","Ø§ÙØ±ÙˆØ®ØªÙ‡ شده بود","Ø§ÙØ²ÙˆØ¯Ù‡ شده","Ø§ÙØ´Ø§Ù†Ø¯Ù‡ شده بود","انباشته شده","داشت انداخته می‌شد","داشت اندوخته می‌شد","برانگیخته شده بود","Ø¨Ø§ÙØªÙ‡ شده","بخشوده شده‌اند","بخشیده شده اند","برده شده","برگردانده شده‌اند","داشت بسته می‌شد","داشت پخته می‌شد","Ù¾Ø°ÛŒØ±ÙØªÙ‡ شده","داشت پراکنده می‌شد","پرداخته شود","پرسیده شده است","داشت پژمرده می‌شد","پسندیده شده بود","پوشیده شده","پیموده خواهد شد","ØªØ§ÙØªÙ‡ شود","تراشیده شده","ترسانده شده است","تکانده شده‌اند","جوشانده شده بود","جوشیده شده بود","چاپیده شدید","چرخیده شده بود","چسبانده شده است","چسبیده شده‌اند","چشیده شده بود","چیده شده","خاسته شده بود","خشکیده شده‌اند","خراشیده شده بود","خریده شده بودند","خوانده شده","داشت خورده می‌شد","داده شده‌اند","دزدیده شده است","دوخته شده","دوشیده شده","رانده شده بود","ربوده شده‌اند","رسانده می‌شود","رسیده خواهد شد","ریخته شده بود","زده شده بود","زدوده خواهد شد","ساخته شده","سابیده شده","ستانده شود","ستوده می‌شود","سوخته شده است","سوزانده شده","داشت انجام می‌شد","داشت شسته می‌شد","Ø´Ú©Ø§ÙØªÙ‡ شده","شکانده شده","داشت شکسته می‌شد","داشت Ø´Ú©ÙØªÙ‡ می‌شد","شمرده شده بود","شناسانده خواهد شد","Ø´Ù†ÙØªÙ‡ شده است","شنیده شده است","طلبیده شدید","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù‡ شده بود","ÙØ±Ø³ØªØ§Ø¯Ù‡ شده بود","ÙØ±Ø³ÙˆØ¯Ù‡ شده است","داشت ÙØ±ÙˆØ®ØªÙ‡ می‌شد","دارد ÙØ´Ø±Ø¯Ù‡ می‌شود","کاسته شده است","کاشته شود","کشته شده‌اند","کشیده شده است","Ú¯ÙØªÙ‡ بشود","گذاشته شده بود","Ú¯Ø±ÙØªÙ‡ شده بود","گزیده شدیم","گسسته خواهد شد","گشوده شده بود","Ú¯ÙØªÙ‡ شده بود","مالیده بشود","نواخته شده است","نوردیده بشود","نوشته شده","Ø§ÙØªØ§Ø¯Ù‡ شده بود","ورانداخته خواهد شد","ویرایش شده‌اند","ÛŒØ§ÙØªÙ‡ شده‌اند","ستانده شود","آراسته شود","آزرده شدند","آزموده شدند","Ø¢Ø´ÙØªÙ‡ شدند","Ø¢ÙØ±ÛŒØ¯Ù‡ شده","آلوده شده است","آمده‌اند","داشتند آمیخته می‌شدند","داشتند آورده می‌شدند","آویخته شده بود","Ø§ÙØªØ§Ø¯Ù‡ خواهند شد","Ø§ÙØ±Ø§Ø´ØªÙ‡ بشود","Ø§ÙØ±ÙˆØ®ØªÙ‡ می‌شود","Ø§ÙØ²ÙˆØ¯Ù‡ شده است","Ø§ÙØ´Ø§Ù†Ø¯Ù‡ شده بودند","انباشته شده است","داشتند انداخته می‌شدند","اندوخته شده","برانگیخته شود","Ø¨Ø§ÙØªÙ‡ شده است","بخشوده شود","بخشیده شود","برده شده است","برگردانده شده بود","داشتند بسته می‌شدند","پخته شده","Ù¾Ø°ÛŒØ±ÙØªÙ‡ شده است","داشتند پراکنده می‌شدند","پرداخته خواهد شد","پرسیده شده‌اند","داشتند پژمرده می‌شدند","پسندیده شود","پوشیده شده است","پیموده بشود","ØªØ§ÙØªÙ‡ بشود","تراشیده شده است","ترسانده شده‌اند","دارد جوشانده می‌شود","جوشیده شود","چاپیده شدند","چرخیده شده بودند","چسبانده شده بود","چسبیده شده بود","چشیده شود","چیده شده است","خشکیده خواهد شد","خراشیده شده بودند","خریده خواهد شد","خوانده شده است","داشتند خورده می‌شدند","داده شده بود","دزدیده شده‌اند","دوخته شده است","دوشیده شده است","رانده شده باشد","ربوده شده بود","رسانده خواهد شد","رسیده شده باشد","دارد ریخته می‌شود","دارد زده می‌شود","ساخته شده است"," سابیده شده است","ستانده خواهد شد","ستوده می‌شوند","سوخته شده‌اند","سوزانده شده است","داشتند انجام می‌شدند","داشتند شسته می‌شدند","Ø´Ú©Ø§ÙØªÙ‡ شده است","شکانده شده است","داشتند شکسته می‌شدند","داشتند Ø´Ú©ÙØªÙ‡ می‌شدند","شمرده شده بودند","شناسانده خواهند شد","Ø´Ù†ÙØªÙ‡ می‌شود","شنیده شده بود","طلبیده شدند","ÙØ±Ø³Ø§ÛŒÛŒØ¯Ù‡ خواهد شد","ÙØ±Ø³ØªØ§Ø¯Ù‡ خواهد شد","ÙØ±Ø³ÙˆØ¯Ù‡ شده بود","داشتند ÙØ±ÙˆØ®ØªÙ‡ می‌شدند","ÙØ´Ø±Ø¯Ù‡ خواهد شد","کاسته شده بود","کاشته خواهد شد","کشته شده بود","کشیده شده بود","Ú¯Ø±ÙØªÙ‡ می‌شود","گزیده شدید","گشوده شده بودند","Ú¯ÙØªÙ‡ شده باشد","نواخته شده بود","نوشته شده است","Ø§ÙØªØ§Ø¯Ù‡ شده بودند","ورانداخته خواهند شد","ویرایش شده بود","ÛŒØ§ÙØªÙ‡ شده بود","ستانده خواهد شد"],{areWordsInSentence:f}=n.languageProcessing;function m(e){return f(p,e)}const{AbstractResearcher:y}=n.languageProcessing;class b extends y{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{passiveConstructionType:"morphological",language:"fa",functionWords:o,transitionWords:r,twoPartTransitionWords:a,sentenceLength:c,firstWordExceptions:i}),Object.assign(this.helpers,{createBasicWordForms:g,getStemmer:d,isPassiveSentence:m})}}(window.yoast=window.yoast||{}).Researcher=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/fr.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/fr.js new file mode 100644 index 00000000..51f8178a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/fr.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(i,t)=>{for(var s in t)e.o(t,s)&&!e.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:t[s]})},o:(e,i)=>Object.prototype.hasOwnProperty.call(e,i),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},i={};e.r(i),e.d(i,{default:()=>qe});const t=window.yoast.analysis,s=["le","la","les","un","une","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","celui","celle","ceux","celles","celui-ci","celle-là","celui-là","celle-ci"],l=["ainsi","alors","aussi","car","cependant","certainement","certes","conséquemment","d'abord","d'ailleurs","d'après","davantage","désormais","deuxièmement","donc","dorénavant","effectivement","également","enfin","ensuite","entre-temps","essentiellement","excepté","finalement","globalement","jusqu'ici","là-dessus","lorsque","mais","malgré","néanmoins","notamment","partant","plutôt","pourtant","précédemment","premièrement","probablement","puis","puisque","quoique","sauf","selon","semblablement","sinon","suivant","toutefois","troisièmement"],r=l.concat(["à cause de","à ce jour","à ce propos","à ce sujet","à cet égard","à cette fin","à compter de","à condition que","à défaut de","à force de","à juste titre","à la lumière de","à la suite de","à l'aide de","à l'appui de","à l'encontre de","à l'époque actuelle","à l'exception de","à l'exclusion de","à l'heure actuelle","à l'image de","à l'instar de","à l'inverse","à l'inverse de","à l'opposé","à la condition que","à mesure que","à moins que","à nouveau","à partir de","à première vue","à savoir","à seule fin que","à supposer que","à tel point que","à tout prendre","à vrai dire","afin de","afin d'attirer l'attention sur","afin que","ainsi donc","ainsi que","alors que","antérieurement","après cela","après quoi","après que","à propos de","en l'occurence","après réflexion","après tout","attendu que","au cas où","au contraire","au fond","au fur et à mesure","au lieu de","au même temps","au moment où","au moyen de","au point que","au risque de","au surplus","au total","aussi bien que","aussitôt que","autant que","autrement dit","avant que","avant tout","ayant fini","bien que","c'est à dire que","c'est ainsi que","c'est dans ce but que","c'est dire","c'est le cas de","c'est la raison pour laquelle","c'est pourquoi","c'est qu'en effet","c'est-à-dire","ça confirme que","ça montre que","ça prouve que","cela étant","cela dit","cependant que","compte tenu","comme l'illustre","comme le souligne","comme on pouvait s'y attendre","comme quoi","comme si","commençons par examiner","comparativement à","conformément à","contrairement à","considérons par exemple","d'autant plus","d'autant que","d'autre part","d'ici là","d'où","d'un autre côté","d'un côté","d'une façon générale","dans ce cas","dans ces conditions","dans cet esprit","dans l'ensemble","dans l'état actuel des choses","dans l'éventualité où","dans l'hypothèse où","dans la mesure où","dans le but de","dans le cadre de","dans le cas où","dans les circonstances actuelles","dans les grandes lignes","dans un autre ordre d'idée","dans un délai de","de ce fait","de cette façon","de crainte que","de façon à","de façon à ce que","de façon que","de fait","de l'autre côté","de la même manière","de la même façon que","de manière que","de même","de même qu'à","de même que","de nos jours","de peur que","de prime abord","de sorte que","de surcroît","de telle manière que","de telle sorte que","de toute évidence","de toute façon","de toute manière","depuis que","dès lors que","dès maintenant","dès qua","dès que","du fait que","du moins","du moment que","du point de vue de","du reste","d'ici là","d'ores et déjà","en admettant que","en attendant que","en bref","en cas de","en cas que","en ce cas","en ce domaine","en ce moment","en ce qui a trait à","en ce qui concerne","en ce sens","en cela","en comparaison de","en conclusion","en conformité avec","en conséquence","en d'autres termes","en définitive","en dépit de","pour cela","en dernier lieu","en deuxième lieu","en effet","en face de","en fait","en fin de compte","en général","en guise de conclusion","en matière de","en même temps que","en outre","en particulier","en plus","en premier lieu","en principe","en raison de","en réalité","en règle générale","en résumé","en revanche","en second lieu","en somme","en sorte que","en supposant que","en tant que","en terminant","en théorie","en tout cas","en tout premier lieu","en troisième lieu","en un mot","en vérité","en vue que","encore que","encore une fois","entre autres","et même","et puis","étant donné qu'à","étant donné que","face à","grâce à","il est à noter que","il est indéniable que","il est question de","il est vrai que","il faut dire aussi que","il faut reconnaître que","il faut souligner que","il ne faut pas oublier que","il s'ensuit que","il suffit de prendre pour exemple","jusqu'ici","il y a aussi","jusqu'à ce que","jusqu'à ce jour","jusqu'à maintenant","jusqu'à présent","jusqu'au moment où","jusqu'ici","l'aspect le plus important de","l'exemple le plus significatif","jusqu'au moment où","la preuve c'est que","loin que","mais en réalité","malgré cela","malgré tout","même si","mentionnons que","mis à part le fait que","notons que","nul doute que","ou bien","outre cela","où que","par ailleurs","par conséquent","par contre","par exception","par exemple","par la suite","par l'entremise de","par l'intermédiaire de","par rapport à","par suite","par suite de","par surcroît","parce que","pareillement","partant de ce fait","pas du tout","pendant que","plus précisément","plus tard","pour ainsi dire","pour autant que","pour ce qui est de","pour ces motifs","pour ces raisons","pour cette raison","pour commencer","pour conclure","pour le moment","pour marquer la causalité","pour l'instant","pour peu que","pour prendre un autre exemple","pour que","pour résumé","pour terminer","pour tout dire","pour toutes ces raisons","pourvu que","prenons le cas de","quand bien même que","quand même","quant à","quel que soit","qui plus est","surtout quand","qui que","quitte à","quoi qu'il en soit","quoi que","quoiqu'il en soit","sans délai","sans doute","sans parler de","sans préjuger","sans tarder","sauf si","selon que","si bien que","si ce n'est que","si l'on songe que","sitôt que","somme toute","sur ce point","surtout si","sous cette réserve","sous prétexte que","sous réserve de","sous réserve que","suivant que","supposé que","sur le plan de","tandis que","tant et si bien que","tant que","tel que","tellement que","touchant à","tout à fait","tout bien pesé","tout compte fait","tout d'abord","tout de même","tout en reconnaissant que","une fois de plus","vu que"]);function n(e){let i=e;return e.forEach((t=>{(t=t.split("-")).length>0&&t.filter((i=>!e.includes(i))).length>0&&(i=i.concat(t))})),i}const a=["le","la","les","un","une","des","aux","du","au","d'un","d'une","l'un","l'une"],o=["deux","trois","quatre","cinq","six","sept","huit","neuf","dix","onze","douze","treize","quatorze","quinze","seize","dix-sept","dix-huit","dix-neuf","vingt","trente","quarante","cinquante","soixante","soixante-dix","quatre-vingt","quatre-vingt-dix","septante","huitante","octante","nonante","cent","mille","million","milliard"],u=["second","secondes","deuxième","deuxièmes","troisième","troisièmes","quatrième","quatrièmes","cinquième","cinquièmes","sixième","sixièmes","septième","septièmes","huitième","huitièmes","neuvième","neuvièmes","dixième","dixièmes","onzième","onzièmes","douzième","douzièmes","treizième","treizièmes","quatorzième","quatorzièmes","quinzième","quinzièmes","seizième","seizièmes","dix-septième","dix-septièmes","dix-huitième","dix-huitièmes","dix-neuvième","dix-neuvièmes","vingtième","vingtièmes"],d=["je","tu","il","elle","on","nous","vous","ils","elles","qu'il","qu'elle","qu'ils","qu'elles","qu'on","d'elle","d'elles"],c=["moi","toi","lui","soi","eux","d'eux","qu'eux"],m=["me","te"],p=["celui","celle","ceux","celles","ce","celui-ci","celui-là","celle-ci","celle-là","ceux-ci","ceux-là","celles-ci","celles-là","ceci","cela","ça","cette","cet","ces"],b=["mon","ton","son","ma","ta","sa","mes","tes","ses","notre","votre","leur","nos","vos","leurs"],f=["beaucoup","peu","quelque","quelques","tous","tout","toute","toutes","plusieurs","plein","chaque","suffisant","suffisante","suffisantes","suffisants","faible","moins","tant","plus","divers","diverse","diverses"],v=["se"],g=["aucun","aucune","autre","autres","d'autres","certain","certaine","certaines","certains","chacun","chacune","même","mêmes","quelqu'un","quelqu'une","quelques'uns","quelques'unes","autrui","nul","personne","quiconque","rien","d'aucunes","d'aucuns","nuls","nules","l'autre","tel","telle","tels","telles"],y=["qui","que","lequel","laquelle","auquel","auxquels","auxquelles","duquel","desquels","desquelles","dont","où","quoi"],w=["combien","comment","pourquoi","d'où"],h=["quel","quels","quelle"],q=["y","n'y"],x=["là","ici","d'ici","voici"],z=["a","a-t-elle","a-t-il","a-t-on","ai","ai-je","aie","as","as-tu","aura","aurai","auraient","aurais","aurait","auras","aurez","auriez","aurons","auront","avaient","avais","avait","avez","avez-vous","aviez","avions","avons","avons-nous","ayez","ayons","eu","eûmes","eurent","eus","eut","eûtes","j'ai","j'aurai","j'avais","j'eus","ont","ont-elles","ont-ils","vais","vas","va","allons","allez","vont","vais-je","vas-tu","va-t-il","va-t-elle","va-t-on","allons-nous","allez-vous","vont-elles","vont-ils","allé","allés","j'allai","allai","allas","alla","allâmes","allâtes","allèrent","j'allais","allais","allait","allions","alliez","allaient","j'irai","iras","ira","irons","irez","iront","j'aille","aille","ailles","aillent","j'allasse","allasse","allasses","allât","allassions","allassiez","allassent","j'irais","irais","irait","irions","iriez","iraient","allant","viens","vient","venons","venez","viennent","viens-je","viens-de","vient-il","vient-elle","vient-on","venons-nous","venez-vous","viennent-elles","viennent-ils","vins","vint","vînmes","vîntes","vinrent","venu","venus","venais","venait","venions","veniez","venaient","viendrai","viendras","viendra","viendrons","viendrez","viendront","vienne","viennes","vinsse","vinsses","vînt","vinssions","vinssiez","vinssent","viendrais","viendrait","viendrions","viendriez","viendraient","venant","dois","doit","devons","devez","doivent","dois-je","dois-tu","doit-il","doit-elle","doit-on","devons-nous","devez-vous","doivent-elles","doivent-ils","dus","dut","dûmes","dûtes","durent","dû","devais","devait","devions","deviez","devaient","devrai","devras","devra","devrons","devrez","devront","doive","doives","dusse","dusses","dût","dussions","dussiez","dussent","devrais","devrait","devrions","devriez","devraient","peux","peut","pouvons","pouvez","peuvent","peux-je","peux-tu","peut-il","peut-elle","peut-on","pouvons-nous","pouvez-vous","peuvent-ils","peuvent-elles","pus","put","pûmes","pûtes","purent","pu","pouvais","pouvait","pouvions","pouviez","pouvaient","pourrai","pourras","pourra","pourrons","pourrez","pourront","puisse","puisses","puissions","puissiez","puissent","pusse","pusses","pût","pussions","pussiez","pussent","pourrais","pourrait","pourrions","pourriez","pourraient","pouvant","semble","sembles","semblons","semblez","semblent","semble-je","sembles-il","sembles-elle","sembles-on","semblons-nous","semblez-vous","semblent-ils","semblent-elles","semblai","semblas","sembla","semblâmes","semblâtes","semblèrent","semblais","semblait","semblions","sembliez","semblaient","semblerai","sembleras","semblera","semblerons","semblerez","sembleront","semblé","semblasse","semblasses","semblât","semblassions","semblassiez","semblassent","semblerais","semblerait","semblerions","sembleriez","sembleraient","parais","paraît","ait","paraissons","paraissez","paraissent","parais-je","parais-tu","paraît-il","paraît-elle","paraît-on","ait-il","ait-elle","ait-on","paraissons-nous","paraissez-vous","paraissent-ils","paraissent-elles","parus","parut","parûmes","parûtes","parurent","paraissais","paraissait","paraissions","paraissiez","paraissaient","paraîtrai","paraîtras","paraîtra","paraîtrons","paraîtrez","paraîtront","paru","paraisse","paraisses","parusse","parusses","parût","parussions","parussiez","parussent","paraîtrais","paraîtrait","paraîtrions","paraîtriez","paraîtraient","paraitrais","paraitrait","paraitrions","paraitriez","paraitraient","paraissant","mets","met","mettons","mettez","mettent","mets-je","mets-tu","met-il","met-elle","met-on","mettons-nous","mettez-vous","mettent-ils","mettent-elles","mis","mit","mîmes","mîtes","mirent","mettais","mettait","mettions","mettiez","mettaient","mettrai","mettras","mettra","mettrons","mettrez","mettront","mette","mettes","misse","misses","mît","missions","missiez","missent","mettrais","mettrait","mettrions","mettriez","mettraient","mettant","finis","finit","finissons","finissez","finissent","finis-je","finis-tu","finit-il","finit-elle","finit-on","finissons-nous","finissez-vous","finissent-ils","finissent-elles","finîmes","finîtes","finirent","finissais","finissait","finissions","finissiez","finissaient","finirai","finiras","finira","finirons","finirez","finiront","fini","finisse","finisses","finît","finirais","finirait","finirions","finiriez","finiraient","finissant","n'a","n'ai","n'aie","n'as","n'aura","n'aurai","n'auraient","n'aurais","n'aurait","n'auras","n'aurez","n'auriez","n'aurons","n'auront","n'avaient","n'avais","n'avait","n'avez","n'avez-vous","n'aviez","n'avions","n'avons","n'avons-nous","n'ayez","n'ayons","n'ont","n'ont-elles","n'ont-ils","n'allons","n'allez","n'allais","n'allait","n'allions","n'alliez","n'allaient","n'iras","n'ira","n'irons","n'irez","n'iront","qu'a"],j=["avoir","aller","venir","devoir","pouvoir","sembler","paraître","paraitre","mettre","finir","d'avoir","d'aller","n'avoir","l'avoir"],E=["suis","es","est","est-ce","n'est","sommes","êtes","sont","suis-je","es-tu","est-il","est-elle","est-on","sommes-nous","êtes-vous","sont-ils","sont-elles","étais","était","étions","étiez","étaient","serai","seras","sera","serons","serez","seront","serais","serait","serions","seriez","seraient","sois","soit","soyons","soyez","soient","été","n'es","n'est-ce","n'êtes","n'était","n'étais","n'étions","n'étiez","n'étaient","qu'est"],S=["être","d'être"],R=["à","après","d'après","au-delà","au-dessous","au-dessus","avant","avec","concernant","chez","contre","dans","de","depuis","derrière","dès","devant","durant","en","entre","envers","environ","hormis","hors","jusque","jusqu'à","jusqu'au","jusqu'aux","loin","moyennant","outre","par","parmi","pendant","pour","près","quant","sans","sous","sur","travers","vers","voilà"],P=["et","ni","or","ou"],C=["non","pas","seulement","sitôt","aussitôt","d'autre"],W=["afin","autant","comme","d'autant","d'ici","quand","lors","parce","si","tandis"],k=["dit","disent","dit-il","dit-elle","disent-ils","disent-elles","disait","disait-il","disait-elle","disaient-ils","disaient-elles","dirent","demande","demandent","demande-t-il","demande-t-elle","demandent-ils","demandent-elles","demandait","demandaient","demandait-il","demandait-elle","demandaient-ils","demandaient-elles","demanda","demanda-t-il","demanda-t-elle","demandé","pense","pensent","pense-t-il","pense-t-elle","pensent-ils","pensent-elles","pensait","pensaient","pensait-il","pensait-elle","pensaient-ils","pensaient-elles","pensa","pensa-t-il","pensa-t-elle","pensé","affirme","affirme-t-il","affirme-t-elle","affirmé","avoue","avoue-t-il","avoue-t-elle","avoué","concède","concède-t-il","concède-t-elle","concédé","confie","confie-t-il","confie-t-elle","confié","continue","continue-t-il","continue-t-elle","continué","déclame","déclame-t-il","déclame-t-elle","déclamé","déclare","déclare-t-il","déclare-t-elle","déclaré","déplore","déplore-t-il","déplore-t-elle","déploré","explique","explique-t-il","explique-t-elle","expliqué","lance","lance-t-il","lance-t-elle","lancé","narre","narre-t-il","narre-t-elle","narré","raconte","raconte-t-il","raconte-t-elle","raconté","rappelle","rappelle-t-il","rappelle-t-elle","rappelé","réagit","réagit-il","réagit-elle","réagi","répond","répond-il","répond-elle","répondu","rétorque","rétorque-t-il","rétorque-t-elle","rétorqué","souligne","souligne-t-il","souligne-t-elle","souligné","affirme-t-il","affirme-t-elle","ajoute-t-il","ajoute-t-elle","analyse-t-il","analyse-t-elle","avance-t-il","avance-t-elle","écrit-il","écrit-elle","indique-t-il","indique-t-elle","poursuit-il","poursuit-elle","précise-t-il","précise-t-elle","résume-t-il","résume-t-elle","souvient-il","souvient-elle","témoigne-t-il","témoigne-t-elle"],O=["dire","penser","demander","concéder","continuer","confier","déclamer","déclarer","déplorer","expliquer","lancer","narrer","raconter","rappeler","réagir","répondre","rétorquer","souligner","affirmer","ajouter","analyser","avancer","écrire","indiquer","poursuivre","préciser","résumer","témoigner"],A=["assez","trop","tellement","presque","très","absolument","extrêmement","quasi","quasiment","fort"],L=["fais","fait","faisons","faites","font","fais-je","fait-il","fait-elle","fait-on","faisons-nous","faites-vous","font-ils","font-elles","fis","fit","fîmes","fîtes","firent","faisais","faisait","faisions","faisiez","faisaient","ferai","feras","fera","ferons","ferez","feront","veux","veut","voulons","voulez","veulent","voulus","voulut","voulûmes","voulûtes","voulurent","voulais","voulait","voulions","vouliez","voulaient","voudrai","voudras","voudra","voudrons","voudrez","voudront","voulu","veux-je","veux-tu","veut-il","veut-elle","veut-on","voulons-nous","voulez-vous","veulent-ils","veulent-elles","voudrais","voudrait","voudrions","voudriez","voudraient","voulant"],T=["faire","vouloir"],$=["antérieur","antérieures","antérieurs","antérieure","précédent","précédents","précédente","précédentes","facile","faciles","simple","simples","vite","vites","vitesse","vitesses","difficile","difficiles","propre","propres","long","longe","longs","longes","longue","longues","bas","basse","basses","ordinaire","ordinaires","bref","brefs","brève","brèves","sûr","sûrs","sûre","sûres","sure","sures","surs","habituel","habituels","habituelle","habituelles","soi-disant","surtout","récent","récents","récente","récentes","total","totaux","totale","totales","complet","complets","complète","complètes","possible","possibles","communément","constamment","facilement","continuellement","directement","légèrement","dernier","derniers","dernière","dernières","différent","différents","différente","différentes","similaire","similaires","pareil","pareils","pareille","pareilles","largement","mal","super","bien","pire","pires","suivants","suivante","suivantes","prochain","prochaine","prochains","prochaines","proche","proches","fur"],M=["nouveau","nouvel","nouvelle","nouveaux","nouvelles","vieux","vieil","vieille","vieilles","beau","bel","belle","belles","bon","bons","bonne","bonnes","grand","grande","grands","grandes","haut","hauts","haute","hautes","petit","petite","petits","petites","meilleur","meilleurs","meilleure","meilleures","joli","jolis","jolie","jolies","gros","grosse","grosses","mauvais","mauvaise","mauvaises","dernier","derniers","dernière","dernières"],N=["ah","ha","oh","ho","bis","plouf","vlan","ciel","pouf","paf","crac","hurrah","allo","stop","bravo","ô","eh","hé","aïe","oef","ahi","fi","zest","hem","holà","chut"],V=["mg","g","kg","ml","dl","cl","l","grammes","gram","once","onces","oz","lbs","càc","cc","càd","càs","càt","cd","cs","ct"],B=["minute","minutes","heure","heures","journée","journées","semaine","semaines","mois","année","années","aujourd'hui","demain","hier","après-demain","avant-hier"],I=["chose","choses","façon","façons","pièce","pièces","truc","trucs","fois","cas","aspect","aspects","objet","objets","idée","idées","thème","thèmes","sujet","sujets","personnes","manière","manières","sorte","sortes"],D=["ne","oui","d'accord","amen","euro","euros","etc"],F=(n([].concat(u,j,T,S,O,M)),n($),n([].concat(a,R,P,p,A,f,b)),n([].concat(l,d,m,c,v,N,o,E,k,z,L,g,C,W,h,y,x,D,q,V,B,I)),[].concat(a,R,c,m,b,v,g,w,h,o,u,L,k,T)),_=[].concat(z,j),H=n([].concat(a,o,u,p,b,v,d,m,y,f,g,w,q,x,z,j,h,E,S,R,P,C,W,k,O,l,["encore","éternellement","immédiatement","compris","comprenant","inclus","naturellement","particulièrement","notablement","actuellement","maintenant","ordinairement","généralement","habituellement","d'habitude","vraiment","finalement","uniquement","peut-être","initialement","déjà","c.-à-d","souvent","fréquemment","régulièrement","simplement","éventuellement","quelquefois","parfois","probable","plausible","jamais","toujours","incidemment","accidentellement","récemment","dernièrement","relativement","clairement","évidemment","apparemment","pourvu"],A,L,T,N,$,M,V,I,D,B,["mme","mmes","mlle","mlles","mm","dr","pr"],["jr","sr"],c)),J=["et","ou","car","or","puisque","puisqu'il","puisqu'ils","puisqu'elle","puisqu'elles","puisqu'un","puisqu'une","puisqu'on","quand","lorsque","lorsqu'il","lorsqu'elle","lorsqu'ils","lorsqu'elles","lorsqu'on","lorsqu'un","lorsqu'une","quoique","quoiqu'il","quoiqu'ils","quoiqu'elle","quoiqu'elles","quoiqu'on","quoiqu'un","quoiqu'une","qu'elle","qu'il","qu'ils","qu'elles","qu'on","qu'un","qu'une","si","s'ils","s'il","quand bien même","pourquoi","après","avant","afin de","compte tenu de","pour ne pas dire","sinon","une fois","sitôt","dont","lequel","laquelle","lesquels","lesquelles","auquel","auxquels","auxquelles","duquel","desquels","desquelles","qui","où","d'où",":","allé","entré","resté","retombé","apparu","réapparu","devenu","redevenu","intervenu","provenu","resurvenu","survenu","allés","entrés","restés","retombés","apparus","réapparus","devenus","redevenus","intervenus","provenus","resurvenus","survenus","allée","entrée","restée","retombée","apparue","réapparue","devenue","redevenue","intervenue","provenue","resurvenue","survenue","allées","entrées","restées","retombées","apparues","réapparues","devenues","redevenues","intervenues","provenues","resurvenues","survenues"],U=[["à première vue","mais à bien considérer les choses"],["à première vue","mais toute réflexion faite"],["aussi","que"],["autant de","que"],["certes","mais"],["d'un côté","de l'autre côté"],["d'un côté","de l'autre"],["d'un côté","d'un autre côté"],["d'une part","d'autre part"],["d'une parte","de l'autre parte"],["moins de","que"],["non seulement","mais aussi"],["non seulement","mais en outre"],["non seulement","mais encore"],["plus de","que"],["quelque","que"],["si","que"],["soit","soit"],["tantôt","tantôt"],["tout d'abord","ensuite"],["tout","que"]],X=JSON.parse('{"vowels":"aeiouyàâéèêëîïûüùôæœ","deviations":{"vowels":[{"fragments":["[ptf]aon(ne)?[s]?$"],"countModifier":-1},{"fragments":["aoul","[^eéiïou]e(s|nt)?$","[qg]ue(s|nt)?$"],"countModifier":-1},{"fragments":["o[ëaéèï]"],"countModifier":1},{"fragments":["a[eéèïüo]","é[aâèéiîuo]","ii[oe]","[aeéuo]y[aâeéèoui]","coe[^u]","zoo","coop","coord","poly[ae]","[bcd]ry[oa]","[bcdfgptv][rl](ou|u|i)[aéèouâ]","ouez","[blmnt]uio","uoia","ment$","yua","[bcdfgptv][rl](i|u|eu)e([ltz]|r[s]?$|n[^t])","[^aeiuyàâéèêëîïûüùôæœqg]uie[rz]$"],"countModifier":1}],"words":{"full":[{"word":"ok","syllables":2},{"word":"eyeliner","syllables":3},{"word":"coati","syllables":3},{"word":"que","syllables":1},{"word":"flouer","syllables":2},{"word":"relouer","syllables":3},{"word":"évaluons","syllables":4},{"word":"instituons","syllables":4},{"word":"atténuons","syllables":4},{"word":"remuons","syllables":3},{"word":"redestribuons","syllables":5},{"word":"suons","syllables":2},{"word":"reconstituons","syllables":5},{"word":"dent","syllables":1},{"word":"fréquent","syllables":2},{"word":"permanent","syllables":3},{"word":"mécontent","syllables":3},{"word":"grandiloquent","syllables":4},{"word":"continent","syllables":3},{"word":"occident","syllables":3},{"word":"référent","syllables":3},{"word":"indigent","syllables":3},{"word":"concurrent","syllables":3},{"word":"gent","syllables":1},{"word":"différent","syllables":3},{"word":"strident","syllables":2},{"word":"équivalent","syllables":4},{"word":"ardent","syllables":2},{"word":"impotent","syllables":3},{"word":"argent","syllables":2},{"word":"immanent","syllables":3},{"word":"indécent","syllables":3},{"word":"effluent","syllables":3},{"word":"agent","syllables":2},{"word":"dolent","syllables":2},{"word":"contingent","syllables":3},{"word":"impénitent","syllables":4},{"word":"adjacent","syllables":3},{"word":"incident","syllables":3},{"word":"content","syllables":2},{"word":"incontinent","syllables":4},{"word":"éloquent","syllables":3},{"word":"convent","syllables":2},{"word":"dissident","syllables":3},{"word":"innocent","syllables":3},{"word":"ventripotent","syllables":4},{"word":"convalescent","syllables":4},{"word":"accident","syllables":3},{"word":"récent","syllables":2},{"word":"absent","syllables":2},{"word":"décadent","syllables":3},{"word":"réticent","syllables":3},{"word":"évent","syllables":2},{"word":"souvent","syllables":2},{"word":"intelligent","syllables":3},{"word":"inhérent","syllables":3},{"word":"adolescent","syllables":4},{"word":"couvent","syllables":2},{"word":"cent","syllables":1},{"word":"urgent","syllables":2},{"word":"précédent","syllables":3},{"word":"imprudent","syllables":3},{"word":"torrent","syllables":2},{"word":"abstinent","syllables":3},{"word":"indifférent","syllables":4},{"word":"excédent","syllables":3},{"word":"déférent","syllables":3},{"word":"incandescent","syllables":4},{"word":"intermittent","syllables":4},{"word":"présent","syllables":3},{"word":"astringent","syllables":3},{"word":"trident","syllables":2},{"word":"impertinent","syllables":4},{"word":"détergent","syllables":3},{"word":"évident","syllables":3},{"word":"influent","syllables":3},{"word":"pertinent","syllables":3},{"word":"subséquent","syllables":3},{"word":"féculent","syllables":3},{"word":"déférent","syllables":3},{"word":"ambivalent","syllables":4},{"word":"omnipotent","syllables":4},{"word":"décent","syllables":2},{"word":"compétent","syllables":3},{"word":"adhérent","syllables":3},{"word":"afférent","syllables":3},{"word":"luminescent","syllables":4},{"word":"lent","syllables":1},{"word":"apparent","syllables":3},{"word":"effervescent","syllables":4},{"word":"parent","syllables":2},{"word":"pénitent","syllables":3},{"word":"fluorescent","syllables":3},{"word":"impudent","syllables":3},{"word":"diligent","syllables":3},{"word":"entregent","syllables":3},{"word":"flatulent","syllables":3},{"word":"serpent","syllables":2},{"word":"violent","syllables":2},{"word":"somnolent","syllables":3},{"word":"déliquescent","syllables":4},{"word":"proéminent","syllables":4},{"word":"résident","syllables":3},{"word":"putrescent","syllables":3},{"word":"talent","syllables":2},{"word":"spumescent","syllables":3},{"word":"tangent","syllables":2},{"word":"chiendent","syllables":2},{"word":"négligent","syllables":3},{"word":"antécédent","syllables":4},{"word":"régent","syllables":2},{"word":"polyvalent","syllables":4},{"word":"latent","syllables":2},{"word":"opulent","syllables":3},{"word":"arpent","syllables":2},{"word":"adent","syllables":2},{"word":"concupiscent","syllables":4},{"word":"sanguinolent","syllables":4},{"word":"opalescent","syllables":4},{"word":"prudent","syllables":2},{"word":"conséquent","syllables":3},{"word":"pourcent","syllables":2},{"word":"transparent","syllables":3},{"word":"sergent","syllables":2},{"word":"diligent","syllables":3},{"word":"inconséquent","syllables":4},{"word":"turbulent","syllables":3},{"word":"fervent","syllables":2},{"word":"truculent","syllables":3},{"word":"interférent","syllables":4},{"word":"confluent","syllables":3},{"word":"succulent","syllables":3},{"word":"purulent","syllables":3},{"word":"patent","syllables":2},{"word":"indulgent","syllables":3},{"word":"engoulevent","syllables":4},{"word":"auvent","syllables":2},{"word":"président","syllables":3},{"word":"confident","syllables":3},{"word":"incompétent","syllables":4},{"word":"accent","syllables":2},{"word":"arborescent","syllables":4},{"word":"contrevent","syllables":3},{"word":"cohérent","syllables":3},{"word":"relent","syllables":2},{"word":"insolent","syllables":3},{"word":"virulent","syllables":3},{"word":"rémanent","syllables":3},{"word":"vent","syllables":1},{"word":"turgescent","syllables":3},{"word":"incohérent","syllables":4},{"word":"malcontent","syllables":3},{"word":"lactescent","syllables":3},{"word":"inintelligent","syllables":5},{"word":"omniprésent","syllables":4},{"word":"récurrent","syllables":3},{"word":"covalent","syllables":3},{"word":"éminent","syllables":3},{"word":"onguent","syllables":2},{"word":"indolent","syllables":3},{"word":"event","syllables":2},{"word":"corpulent","syllables":3},{"word":"divergent","syllables":3},{"word":"excellent","syllables":3},{"word":"phosphorescent","syllables":4},{"word":"évanescent","syllables":4},{"word":"paravent","syllables":3},{"word":"avent","syllables":2},{"word":"iridescent","syllables":4},{"word":"prénomment","syllables":2},{"word":"consument","syllables":2},{"word":"dégomment","syllables":2},{"word":"enveniment","syllables":3},{"word":"proclament","syllables":2},{"word":"chôment","syllables":1},{"word":"infirment","syllables":2},{"word":"briment","syllables":1},{"word":"fument","syllables":1},{"word":"acclament","syllables":2},{"word":"referment","syllables":2},{"word":"impriment","syllables":2},{"word":"paument","syllables":1},{"word":"déciment","syllables":2},{"word":"accoutument","syllables":3},{"word":"essaiment","syllables":2},{"word":"ferment","syllables":1},{"word":"dépriment","syllables":2},{"word":"raniment","syllables":2},{"word":"programment","syllables":2},{"word":"fantasment","syllables":2},{"word":"animent","syllables":2},{"word":"affirment","syllables":2},{"word":"filment","syllables":1},{"word":"dament","syllables":1},{"word":"parsèment","syllables":3},{"word":"priment","syllables":1},{"word":"assomment","syllables":2},{"word":"rament","syllables":1},{"word":"pâment","syllables":1},{"word":"conforment","syllables":2},{"word":"embaument","syllables":2},{"word":"calment","syllables":1},{"word":"blasphèment","syllables":2},{"word":"désarment","syllables":2},{"word":"consomment","syllables":2},{"word":"griment","syllables":1},{"word":"abîment","syllables":2},{"word":"blâment","syllables":1},{"word":"endorment","syllables":2},{"word":"allument","syllables":2},{"word":"blâment","syllables":1},{"word":"confirment","syllables":2},{"word":"escriment","syllables":2},{"word":"trament","syllables":1},{"word":"hument","syllables":1},{"word":"surnomment","syllables":2},{"word":"écument","syllables":2},{"word":"triment","syllables":1},{"word":"estiment","syllables":2},{"word":"rallument","syllables":2},{"word":"enflamment","syllables":2},{"word":"riment","syllables":1},{"word":"plument","syllables":1},{"word":"suppriment","syllables":2},{"word":"gomment","syllables":1},{"word":"affament","syllables":2},{"word":"friment","syllables":1},{"word":"clament","syllables":1},{"word":"dorment","syllables":1},{"word":"dénomment","syllables":2},{"word":"entament","syllables":2},{"word":"arriment","syllables":2},{"word":"résument","syllables":2},{"word":"enrhument","syllables":2},{"word":"rendorment","syllables":2},{"word":"compriment","syllables":2},{"word":"aiment","syllables":1},{"word":"rythment","syllables":1},{"word":"périment","syllables":2},{"word":"réclament","syllables":2},{"word":"subliment","syllables":2},{"word":"brument","syllables":1},{"word":"embrument","syllables":2},{"word":"germent","syllables":1},{"word":"renferment","syllables":2},{"word":"sèment","syllables":1},{"word":"reforment","syllables":2},{"word":"liment","syllables":1},{"word":"cament","syllables":1},{"word":"parfument","syllables":2},{"word":"arment","syllables":1},{"word":"brament","syllables":1},{"word":"déforment","syllables":2},{"word":"assument","syllables":2},{"word":"crament","syllables":1},{"word":"exclament","syllables":2},{"word":"forment","syllables":1},{"word":"diffament","syllables":2},{"word":"somment","syllables":1},{"word":"oppriment","syllables":2},{"word":"miment","syllables":1},{"word":"enferment","syllables":2},{"word":"nomment","syllables":1},{"word":"reprogramment","syllables":3},{"word":"transforment","syllables":2},{"word":"expriment","syllables":2},{"word":"informent","syllables":2},{"word":"légitiment","syllables":3},{"word":"de","syllables":1},{"word":"le","syllables":1},{"word":"je","syllables":1},{"word":"te","syllables":1},{"word":"ce","syllables":1},{"word":"ne","syllables":1},{"word":"re","syllables":1},{"word":"me","syllables":1},{"word":"se","syllables":1},{"word":"ses","syllables":1},{"word":"mes","syllables":1},{"word":"mes","syllables":1},{"word":"ces","syllables":1},{"word":"des","syllables":1},{"word":"tes","syllables":1},{"word":"les","syllables":1},{"word":"oye","syllables":1},{"word":"es","syllables":1},{"word":"remerciâmes","syllables":4},{"word":"herniaires","syllables":3},{"word":"autopsiais","syllables":4},{"word":"août","syllables":1}],"fragments":{"global":[{"word":"business","syllables":2},{"word":"skate","syllables":1},{"word":"board","syllables":1},{"word":"coach","syllables":1},{"word":"roadster","syllables":2},{"word":"soap","syllables":1},{"word":"goal","syllables":1},{"word":"coaltar","syllables":2},{"word":"loader","syllables":2},{"word":"coat","syllables":1},{"word":"baseball","syllables":2},{"word":"foëne","syllables":1},{"word":"cacaoyer","syllables":4},{"word":"scoop","syllables":1},{"word":"zoom","syllables":1},{"word":"bazooka","syllables":3},{"word":"tatoueu","syllables":3},{"word":"cloueu","syllables":2},{"word":"déchouer","syllables":2},{"word":"écrouelles","syllables":3},{"word":"maestria","syllables":3},{"word":"maestro","syllables":3},{"word":"vitae","syllables":3},{"word":"paella","syllables":3},{"word":"vae","syllables":2},{"word":"thaï","syllables":1},{"word":"skaï","syllables":1},{"word":"masaï","syllables":2},{"word":"samouraï","syllables":3},{"word":"bonsaï","syllables":2},{"word":"bonzaï","syllables":2},{"word":"aïkido","syllables":3},{"word":"daïquiri","syllables":3},{"word":"pagaïe","syllables":2},{"word":"chiite","syllables":2},{"word":"pays","syllables":2},{"word":"antiaérien","syllables":5},{"word":"bleui","syllables":2},{"word":"remerciai","syllables":4},{"word":"monstrueu","syllables":3},{"word":"niakoué","syllables":3},{"word":"minoen","syllables":3},{"word":"groenlandais","syllables":4},{"word":"remerciant","syllables":4},{"word":"skiant","syllables":2},{"word":"ruade","syllables":2},{"word":"weltanschauung","syllables":4}],"atBeginning":[{"word":"roast","syllables":1},{"word":"taï","syllables":1}],"atEnd":[{"word":"écrouer","syllables":3},{"word":"clouer","syllables":2}]}}}}'),G=window.lodash,K=["abâtardi","abattu","abêti","aboli","abouti","abruti","abstenu","abstrait","accompli","accouru","accroupi","accru","accueilli","adjoint","adouci","advenu","affadi","affaibli","affermi","agi","agrandi","aguerri","ahuri","aigri","alangui","alenti","alourdi","aluni","amaigri","amati","amerri","aminci","amoindri","amolli","amorti","anéanti","apâli","aperçu","aplani","appartenu","appauvri","appendu","appesanti","applaudi","approfondi","arrondi","assagi","assailli","assaini","asservi","assombri","assorti","assoupi","assoupli","assourdi","assouvi","assujetti","astreint","attendri","attendu","atterri","attiédi","attrait","autodétruit","avachi","aveuli","avili","banni","barri","bâti","battu","béni","blanchi","blêmi","bleui","blondi","blotti","bonni","bouffi","bouilli","bruni","bu","calmi","candi","ceint","chéri","choisi","circonscrit","circonvenu","combattu","comparu","compati","conclu","concouru","condescendu","conduit","confit","confondu","conjoint","connu","consenti","construit","contenu","contraint","contredit","contrefait","contrevenu","convaincu","convenu","converti","coproduit","correspondu","couru","cousu","craint","cramoisi","crépi","croupi","cru","cueilli","cuit","débattu","décati","déchu","déconfit","déconstruit","décousu","découvert","décrépi","décrit","décru","déçu","dédit","déduit","défailli","défendu","défini","défleuri","défraîchi","dégarni","dégluti","dégourdi","démenti","démoli","démordu","démuni","départi","dépeint","dépendu","dépéri","déplu","dépoli","dépourvu","désobéi","desservi","déteint","détendu","détenu","détruit","dévêtu","discouru","disjoint","disparu","distendu","distrait","dit","diverti","dormi","durci","ébahi","ébaubi","ébaudi","éclairci","éconduit","écrit","élargi","élu","embelli","embouti","émoulu","empli","empreint","empuanti","ému","enchéri","encouru","endolori","endormi","enduit","endurci","enfoui","enfreint","enfui","englouti","engourdi","enhardi","enjoint","enlaidi","ennobli","enorgueilli","enrichi","enseveli","entendu","entr'aperçu","entraperçu","entreclos","entremis","entretenu","entrevu","entrouvert","envahi","épanoui","éperdu","équarri","équivalu","estourbi","établi","éteint","étendu","étourdi","étréci","étreint","eu","évanoui","exclu","extrait","faibli","fait","fallu","farci","feint","fendu","fini","fléchi","fleuri","fondu","forci","foui","fourbi","fourni","foutu","fraîchi","franchi","frémi","frit","fui","garanti","garni","gauchi","gémi","glapi","grandi","grossi","guéri","haï","imparti","induit","infléchi","inscrit","instruit","interdit","interrompu","interverti","introduit","inverti","investi","jailli","jauni","joint","joui","langui","loti","lu","maintenu","méconnu","mécru","médit","menti","minci","moisi","moiti","molli","mordu","morfondu","moulu","mugi","muni","nanti","noirci","nourri","nui","obéi","obscurci","obtenu","offert","oint","ouï","ourdi","ouvert","pâli","parcouru","paru","pâti","peint","pendu","perçu","péri","perverti","pétri","plaint","portrait","pourfendu","pourri","poursuivi","pourvu","prédéfini","prédit","préétabli","prémuni","prescrit","prétendu","prévalu","prévenu","prévu","produit","promu","proscrit","pu","puni","rabattu","rabougri","radouci","raffermi","ragaillardi","raidi","rajeuni","ralenti","ramolli","ranci","ravi","réadmis","réagi","réappris","rebâti","rebattu","rebondi","rebu","reconnu","reconstruit","reconverti","recouru","recouvert","recrépi","récrit","recru","reçu","recueilli","recuit","redécouvert","redéfini","redit","réduit","réécrit","réélu","réentendu","refendu","réfléchi","refondu","refoutu","refroidi","regarni","régi","réinscrit","réintroduit","réinvesti","rejoint","réjoui","relu","relui","rembruni","remordu","rempli","renchéri","rendormi","rendu","rentrait","répandu","reparcouru","réparti","reparu","repeint","rependu","repenti","reperdu","répondu","reproduit","résolu","resplendi","ressaisi","resservi","restreint","resurgi","rétabli","retendu","retenu","retraduit","retrait","retranscrit","rétréci","réuni","réussi","revécu","revendu","reverdi","reverni","revêtu","revu","ri","roidi","rosi","rôti","rougi","roussi","rousti","rouvert","rugi","saisi","sali","satisfait","sauri","secouru","séduit","senti","serti","servi","sévi","souffert","souri","sous-entendu","sous-tendu","souscrit","soustrait","soutenu","souvenu","su","subi","subvenu","suffi","suivi","surenchéri","surgi","suri","survécu","suspendu","tapi","tari","teint","tendu","tenu","terni","terri","tiédi","tondu","tordu","traduit","trahi","trait","transcrit","transi","travesti","tressailli","uni","vagi","vaincu","valu","vécu","vendu","verdi","verni","vêtu","vieilli","vomi","voulu","vu"],Q=["absous","absoute","absoutes","dissous","dissoute","dissoutes","crû","crus","crue","crues","dû","dus","dues","mû","mus","mue","mues"],Y=["repris","démis","omis","dépris","retransmis","assis","promis","circoncis","permis","compris","mépris","inclus","soumis","rassis","sursis","enclos","acquis","compromis","commis","désappris","appris","conquis","transmis","remis","surpris","reconquis","mis","enquis","pris","admis","clos","émis","entrepris","épris","requis"],{getWords:Z,matchRegularParticiples:ee}=t.languageProcessing,ie=function(e,i,t){const s=[];return(0,G.forEach)(i,(function(i){const l=new RegExp("^"+i+t+"?$","ig"),r=e.match(l);r&&s.push(r[0])})),s};const te=["allé","arrivé","décédé","demeuré","entré","été","né","resté","retombé","tombé","achalandé","aéroporté","affilé","affixé","âgé","aîné","aisé","aligoté","alizé","alliacé","alluré","alphabétisé","alvéolé","aminé","ammoniaqué","ampoulé","archi-prouvé","archi-usé","asexué","autoguidé","autopropulsé","aviné","baleiné","barbelé","baryté","bien-aimé","bisexué","bouqueté","brioché","burkinabé","cagoulé","calamistré","cannelé","carabiné","carboné","caréné","carié","carminé","carné","carpé","censé","cérusé","charançonné","chenillé","chocolaté","chtarbé","citronné","cofondé","contrecollé","côtelé","courbaturé","crawlé","crossé","crustacé","cutané","damasquiné","damassé","débellé","décavé","déguenillé","demi-paralysé","denté","dépenaillé","désenchanté","désodé","diapré","ébranché","écervelé","effréné","effronté","éhonté","embourgeoisé","embroussaillé","embruiné","émerillonné","encalminé","encaustiqué","encorné","endiablé","endiamanté","enfoiré","enfouraillé","ensellé","entrelardé","éploré","ergoté","erroné","étagé","éthéré","éversé","éwé","ex-associé","exorbité","expansé","famé","férié","fibré","filoguidé","flammé","fleurdelisé","fliqué","flûté","forcené","fortuné","foulbé","frelaté","friqué","futé","gazonné","gracieusé","gradé","granulé","herminé","hiérarchisé","huppé","hydrogéné","igné","illettré","illimité","imbriqué","immaculé","immérité","immodéré","immunodéprimé","impayé","impensé","impollué","imprononcé","inaccoutumé","inachevé","inactivé","inadapté","inaltéré","inanimé","inapproprié","inarticulé","inavoué","inchangé","inconditionné","inconsidéré","inconsolé","incontesté","incontrôlé","incréé","indéfriché","indéterminé","indifférencié","indiscipliné","indiscuté","indivisé","indompté","inébranlé","inemployé","inentamé","inespéré","inexpérimenté","inexpliqué","inexploité","inexploré","inexprimé","infondé","informulé","infortuné","inhabité","inimité","injustifié","inné","innommé","inoccupé","inopiné","inorganisé","inoublié","insensé","insoupçonné","instantané","insubordonné","insurpassé","intentionné","interallié","intouché","inusité","inutilisé","invertébré","inviolé","iodé","irraisonné","irréalisé","lacté","lamé","lamifié","larvé","laryngé","léopardé","lettré","lié","lifté","losangé","luné","lunetté","madré","maillé","malaisé","malavisé","maléficié","malfamé","malformé","malintentionné","mendé","ménopausé","mentholé","mi-accablé","mi-allongé","mi-café","mi-consterné","mi-enterré","mi-étonné","mi-pincé","mi-terrorisé","miellé","millimétré","miraculé","momentané","monoclé","monté","mordoré","mort-né","névrosé","nitré","non-initié","nouveau-né","olé-olé","ongulé","paillé","palé","papilionacé","paqueté","paraffiné","passé","pasteurisé","patenté","paysagé","pédonculé","pestiféré","platiné","pocheté","polychromé","poplité","potelé","pourpré","praliné","précité","prédigéré","préencollé","préfabriqué","prématuré","premier-né","préprogrammé","prostré","protéiné","pyramidé","quadrilobé","racé","re-café","re-rêvé","re-vérifié","rebarré","redécoré","relargué","remonté","rentré","résiné","ressuscité","réticulé","retourné","revérifié","revivifié","rose-thé","safrané","satiné","saumoné","sébacé","sensé","sexué","sigillé","silicosé","simultané","sinistré","soufré","sous-cutané","sous-développé","sous-qualifié","soussigné","spiralé","spontané","stratifié","sulfaté","sulfuré","sulfurisé","suractivé","suranné","surbooké","surbrodé","surdéveloppé","surdimensionné","surdoué","surentraîné","suroxygéné","surpeuplé","surqualifié","susmentionné","susnommé","systématisé","tarabiscoté","taupé","thrombosé","tiercé","timoré","tiqueté","transcutané","triphasé","usagé","usité","vallonné","vanillé","vascularisé","veinulé","venté","vergé","vert-de-grisé","vertébré","vitaminé","vulcanisé","zélé"],se=["à-côté","abbé","absurdité","accessibilité","acerbité","acidité","acmé","acné","âcreté","activité","actualité","acuité","adaptabilité","adiposité","admissibilité","adversité","affabilité","affectivité","affidé","affinité","agilité","agressivité","alacrité","alcalinité","altérité","amabilité","ambiguïté","amé","aménité","américanité","amirauté","amitié","amoralité","ancestralité","ancienneté","anfractuosité","angulosité","animalité","animosité","anormalité","anti-acné","anti-cité","anti-criminalité","anti-gravité","anti-intimité","anti-société","antigravité","antiquité","anxiété","aparté","applicabilité","âpreté","archevêché","aridité","artificialité","asexualité","asociabilité","aspérité","assiduité","astarté","atrocité","austérité","authenticité","autodafé","autorité","avé","aveugle-né","avidité","ébriété","effectivité","efficacité","égalité","élasticité","électricité","élément-clé","élémentarité","éligibilité","émotivité","empaffé","énormité","entièreté","entité","enviandé","épitomé","équanimité","équité","étanchéité","éternité","ethnicité","étrangéité","étrangeté","euromarché","évêché","éventualité","ex-abbé","ex-fiancé","excentricité","exclusivité","exemplarité","exhaustivité","exiguïté","extériorité","externalité","exterritorialité","extrémité","idée-clé","identité","illégalité","illégitimité","imbécillité","immatérialité","immaturité","immédiateté","immensité","immobilité","immoralité","immortalité","immuabilité","immunité","immutabilité","impalpabilité","impartialité","impassibilité","impeccabilité","impécuniosité","impénétrabilité","imperméabilité","impersonnalité","impétuosité","impiété","implacabilité","impopularité","impossibilité","impraticabilité","imprévisibilité","improbabilité","impudicité","impulsivité","impunité","impureté","inaccessibilité","inactivité","inanité","inauthenticité","incapacité","incommodité","incommunicabilité","incompatibilité","incongruité","incorruptibilité","incrédibilité","incrédulité","incuriosité","indemnité","indestructibilité","indignité","indisponibilité","individualité","indivisibilité","indocilité","industrie-clé","inefficacité","inégalité","inéligibilité","inéluctabilité","inévitabilité","inexorabilité","infaillibilité","infécondité","infériorité","infertilité","infidélité","infinité","infirmité","inflammabilité","inflexibilité","ingéniosité","ingénuité","inhospitalité","inhumanité","inimitié","iniquité","innocuité","inopportunité","insalubrité","insanité","insécurité","insensibilité","inséparabilité","insincérité","insipidité","insonorité","instabilité","instantanéité","insularité","intangibilité","intégralité","intégrité","intelligibilité","intemporalité","intensité","intentionnalité","interactivité","intériorité","intimité","intrépidité","inusabilité","inutilité","invalidité","inventivité","invincibilité","inviolabilité","invisibilité","invulnérabilité","irrationalité","irréalité","irrecevabilité","irrégularité","irréligiosité","irresponsabilité","irréversibilité","irrévocabilité","irritabilité","obésité","objectivité","obliquité","obscénité","obscurité","obséquiosité","officialité","oiseau-clé","oisiveté","okoumé","onctuosité","opacité","opiniâtreté","opportunité","oralité","originalité","ubiquité","ukulélé","unanimité","unicité","uniformité","unilatéralité","unité","universalité","université","urbanité","utilité","yé-yé","yéyé","achillée","almée","aménorrhée","année","anti-nausée","apnée","apogée","araignée","arrière-pensée","assiettée","athénée","auloffée","aveugle-née","avrillée","azalée","échauffourée","écuellée","élysée","embardée","empyrée","épée","épopée","étuvée","ex-allée","ex-dulcinée","ex-fiancée","ex-lycée","idée","ipomée","odyssée","onomatopée","orchidée","orée","orphée","urée","banalité","bas-côté","beaupré","beauté","bébé","bédé","bénédicité","bénignité","bestialité","bien-fondé","biodiversité","bipolarité","bisexualité","blé","bonté","bout-rimé","bovidé","brièveté","brutalité","caducité","café","callosité","camélidé","canapé","capacité","capillarité","captivité","carte-clé","caté","catholicité","causalité","causticité","cavité","cécité","célébrité","célérité","cérébralité","cétacé","charité","chassé-croisé","chasteté","cherté","chétivité","chimpanzé","chrétienté","ciné","cinéma-vérité","circularité","citoyenneté","civilité","clandé","clandestinité","clarté","clé","clergé","co-propriété","coaccusé","cochonceté","code-clé","collectivité","collégialité","combativité","comestibilité","comité","commodité","communauté","communicabilité","compacité","comparabilité","compatibilité","compétitivité","complémentarité","complexité","complicité","comptabilité","comté","concavité","condé","conductibilité","conductivité","confidentialité","conformité","confraternité","congé","conjugalité","connectivité","consanguinité","constitutionnalité","contiguïté","continuité","contrariété","contre-gré","contre-plaqué","contre-vérité","contreplaqué","contrevérité","convexité","convivialité","coopé","copropriété","cordialité","coré","coriacité","corporalité","côté","créativité","crédibilité","crédulité","crétacé","criminalité","cruauté","crudité","culpabilité","cupidité","curiosité","cybercafé","cyprinidé","dangerosité","daphné","dé","débotté","décimalité","décision-clé","déclivité","déductibilité","défectuosité","degré","déité","déloyauté","demi-clarté","demi-degré","demi-liberté","demi-obscurité","demi-vérité","dénatalité","densité","député","dératé","dernier-né","désirabilité","dextérité","difficulté","difformité","dignité","discontinuité","disparité","disponibilité","diversité","divinité","docilité","domesticité","doyenné","dualité","duché","duplicité","durabilité","dureté","faculté","faillibilité","faisabilité","familiarité","fatalité","fatuité","fausseté","fébrilité","fécondité","félidé","félinité","féminité","féodalité","fermeté","férocité","ferté","fertilité","festivité","fétidité","fiabilité","fibrillé","fidélité","fierté","finalité","fiscalité","fixité","flaccidité","flatuosité","flexibilité","flexuosité","flottabilité","fluidité","fonctionnalité","formalité","fossé","fragilité","francité","fraternité","friabilité","frigidité","frilosité","fringillidé","frivolité","frugalité","fugacité","furtivité","futilité","gaieté","gaîté","gallinacé","gémellité","généralité","générosité","génialité","génitalité","germanité","gibbosité","globalité","godemiché","gracieuseté","gracilité","grand-duché","granité","gratuité","gravidité","gré","grossièreté","habileté","habitabilité","haute-fidélité","henné","hérédité","hétérogénéité","hétérosexualité","hilarité","histocompatibilité","historicité","homme-clé","homogénéité","homosexualité","honnêteté","honorabilité","horizontalité","hospitalité","hostilité","humanité","humidité","humilité","hyperacidité","hyperactivité","hypercoagulabilité","hyperémotivité","hypermarché","hyperréactivité","hypersensibilité","jovialité","joyeuseté","jubé","judaïcité","judaïté","judéité","juvénilité","karaoké","karaté","karité","kiné","koré","lâcheté","laïcité","lamedé","lascivité","latéralité","latinité","laubé","laxité","lé","légalité","légèreté","légitimité","lèse-majesté","létalité","lettre-clé","libéralité","liberté","licéité","limpidité","liquidité","lisibilité","littéralité","lividité","localité","longanimité","longévité","loquacité","loyauté","lubricité","lucidité","luminosité","macramé","magnanimité","majesté","majorité","mal-aimé","mal-baisé","malhonnêteté","malignité","malinké","malléabilité","malpropreté","maniabilité","manoeuvrabilité","marginalité","masculinité","maskinongé","massivité","matérialité","maternité","matité","maturité","mauvaiseté","méchanceté","médiocrité","médiumnité","mémé","mémorabilité","mendicité","mensualité","mentalité","merveillosité","méticulosité","mi-capacité","mi-été","mi-meublé","mi-porté","mi-réalité","mi-résigné","miché","microgravité","minorité","mitoyenneté","mixité","mobilité","mocheté","modalité","modernité","modicité","moment-clé","mondanité","monstruosité","mont-de-piété","monumentalité","mooré","moralité","morbidité","morosité","mortalité","mot-clé","motilité","motricité","mousmé","mucosité","multiplicité","multipropriété","municipalité","musicalité","mutabilité","mutité","mutualité","naïveté","narghilé","narguilé","natalité","nationalité","nativité","navigabilité","nébulosité","négativité","néné","nervosité","nescafé","netteté","neutralité","névé","niakoué","niébé","nocivité","non-conformité","non-culpabilité","nordicité","normalité","notabilité","notoriété","nouveauté","nouvelleté","nubilité","nudité","nue-propriété","nullité","nuptialité","papauté","papé","parenté","parité","partialité","particularité","passiveté","passivité","pâté","paternité","pause-café","pauses-café","pauvreté","pédé","pédégé","pénalité","pépé","pérennité","perfectibilité","périodicité","perméabilité","permissivité","péroné","perpétuité","perplexité","perré","personnage-clé","personnalité","perspicacité","perversité","pèse-bébé","petit-salé","photosensibilité","phrase-clé","pilosité","pisé","pitié","placidité","plasticité","plausibilité","pluralité","pluviosité","point-clé","poiré","poire-vérité","polarité","polycopié","polytonalité","ponctualité","pongé","popularité","porosité","portabilité","porte-bébé","porte-clé","position-clé","positivité","possessivité","possibilité","poste-clé","postérité","potentialité","pousse-café","pré","pré-salé","précarité","préciosité","précocité","prématurité","prévisibilité","prévôté","prieuré","primauté","principauté","priorité","privauté","probabilité","probité","prodigalité","productivité","profitabilité","prolixité","promiscuité","proportionnalité","propreté","propriété","prospérité","proximité","psyché","puberté","publicité","pudicité","puérilité","pugnacité","puîné","pureté","pusillanimité","qualité","quantité","quarté","quasi-impossibilité","quasi-impunité","quasi-nudité","quasi-totalité","quasi-unanimité","question-clé","quinté","quotidienneté","quotité","radioactivité","raisiné","rapacité","raphé","rapidité","rareté","rationalité","raucité","ré","réactivité","réalité","récépissé","réceptivité","recevabilité","réciprocité","récré","régularité","relativité","religiosité","rentabilité","reportage-vérité","respectabilité","responsabilité","réversibilité","rigidité","risibilité","rivalité","romanité","rotondité","roulé-boulé","royauté","rugosité","rusticité","sagacité","saint-honoré","sainteté","saké","salacité","saleté","salinité","salmonidé","salubrité","santé","sapidité","satiété","sauveté","scène-clé","scientificité","scissiparité","scolarité","scrupulosité","sécurité","sédentarité","sélectivité","semi-liberté","séné","sénevé","sénilité","sensibilité","sensorialité","sensualité","sentimentalité","septicité","sérénité","sergé","séropositivité","sérosité","serviabilité","servilité","sévérité","sexualité","similarité","simplicité","simultanéité","sincérité","singularité","sinuosité","sobriété","sociabilité","société","solennité","solidarité","solidité","solubilité","soluté","solvabilité","sommité","somptuosité","sonorité","sordidité","sororité","soudaineté","sous-comité","sous-humanité","souveraineté","spasticité","spécialité","spécificité","sphéricité","spiritualité","spontanéité","sportivité","spumosité","stabilité","sténopé","stérilité","stupidité","suavité","subjectivité","sublimité","subtilité","succédané","suggestibilité","suggestivité","superficialité","superfluité","supériorité","supermarché","supraconductivité","suractivité","surcapacité","surdité","sûreté","surgé","surhumanité","surintensité","surréalité","susceptibilité","suzeraineté","synthé","taboulé","taciturnité","tamouré","tangibilité","tarpé","technicité","télé","témérité","témoin-clé","temporalité","ténacité","tendreté","ténébrionidé","ténuité","territorialité","tévé","thé","théâtralité","tiaré","timidité","tollé","tonalité","tonicité","totalité","toxicité","traçabilité","tranquillité","translucidité","transsexualité","trinité","trivialité","tsé-tsé","tubérosité","turbé","vacuité","vahiné","validité","vanité","variabilité","variété","vassalité","vastité","velléité","vélocité","vénalité","vénusté","véracité","verbosité","vérité","versatilité","verticalité","vétusté","viabilité","vicinalité","vicomté","viduité","virginité","virilité","virtualité","virtuosité","viscosité","visibilité","vitalité","vivacité","volatilité","volonté","volubilité","volupté","voracité","vulgarité","vulnérabilité","batée","becquée","billevesée","bolée","bondrée","borée","bouée","bougainvillée","brouettée","buée","caducée","canne-épée","casserolée","cavée","centaurée","cépée","céphalée","charretée","chaudronnée","chicorée","chorée","cochlée","cochonnée","colée","contre-allée","contre-plongée","corvée","coryphée","cucurbitacée","cuillerée","culée","cylindrée","demi-journée","demi-volée","denrée","dernière-née","diarrhée","diatomée","dionée","dragée","dulcinée","dysménorrhée","dyspnée","fée","feuillée","flopée","fournée","fricassée","friselée","galathée","galée","giboulée","giroflée","gonorrhée","goulée","graminée","guinée","gynécée","haquenée","hottée","hyménée","hyperborée","hypogée","journée","lance-fusée","litée","logorrhée","lycée","macchabée","mainlevée","maisonnée","mal-aimée","mal-baisée","maréchaussée","marée","mausolée","mélopée","mi-effrontée","mi-journée","miellée","mijaurée","mosquée","moteur-fusée","muflée","nausée","nuée","nuitée","panacée","pâtée","peignée","pelletée","pépée","périgée","périnée","pharmacopée","pipée","platée","pochetée","pochetée","poignée","poirée","poisson-épée","porte-épée","potée","poupée","première-née","prérentrée","presse-purée","prytanée","purée","quasi-fiancée","ramée","raz-de-marée","resucée","rétrofusée","rez-de-chaussée","risée","ruchée","scarabée","séborrhée","sigisbée","simagrée","singe-araignée","soirée","solanacée","tablée","tinée","trachée","trâlée","transfusée","travée","trépanée","trochée","trophée","vallée","ventrée","vesprée"],le=["bé","cré","crédié","é","loucedé","eussé","hé","malgré","moitié-moitié","ohé","olé","ollé","sacrédié","quasi-instantanée"],{precedenceException:re,directPrecedenceException:ne,values:ae}=t.languageProcessing,{Clause:oe}=ae,ue=["être","d'être","suis","es","est","sommes","êtes","sont","n'est","n'es","n'êtes","été","j'étais","étais","était","étions","étiez","étaient","c'était","n'étais","n'était","n'étions","n'étiez","n'étaient","serai","seras","sera","serons","serez","seront","sois","soit","soyons","soyez","soient","fusse","fusses","fût","fussions","fussiez","fussent","serais","serait","serions","seriez","seraient","fus","fut","fûmes","fûtes","furent","suis-je","es-tu","est-il","est-elle","est-on","sommes-nous","êtes-vous","sont-ils","sont-elles","est-ce","étais-je","étais-tu","était-il","était-elle","était-on","était-ce","étions-nous","étiez-vous","étaient-ils","étaient-elles","serai-je","seras-tu","sera-t-il","sera-t-elle","sera-t-on","sera-ce","serons-nous","serez-vous","seront-ils","seront-elles","serais-je","serais-tu","serait-il","serait-elle","serait-on","serait-ce","serions-nous","seriez-vous","seraient-ils","seraient-elles","fus-je","fus-tu","fut-il","fut-elle","fut-on","fut-ce","fûmes-nous","fûtes-vous","furent-ils","furent-elles"],{createRegexFromArray:de,getClauses:ce}=t.languageProcessing,me={Clause:class extends oe{constructor(e,i){super(e,i),this._participles=function(e){const i=Z(e),t=[];return(0,G.forEach)(i,(function(e){0===ee(e,[/\S+(é|ée|és|ées)($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi]).length&&0===function(e){let i=[].concat(ie(e,K,"(e|s|es)"));return i=i.concat(ie(e,Y,"(e|es)")),(0,G.includes)(Q,e)&&i.push(e),i}(e).length||t.push(e)})),t}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const e=this.getClauseText(),i=this.getParticiples().filter((i=>!(i.startsWith("l'")||i.startsWith("d'")||(0,G.includes)(le,i)||this.isOnAdjectiveVerbExceptionList(i)||this.isOnNounExceptionList(i)||ne(e,i,F)||re(e,i,_))));this.setPassive(i.length>0)}isOnAdjectiveVerbExceptionList(e){return!!te.includes(e)||(e.endsWith("es")?e=e.slice(0,-2):(e.endsWith("e")||e.endsWith("s"))&&(e=e.slice(0,-1)),te.includes(e))}isOnNounExceptionList(e){return!!se.includes(e)||(e.endsWith("s")&&(e=e.slice(0,-1)),se.includes(e))}},stopwords:J,auxiliaries:ue,regexes:{auxiliaryRegex:de(ue),stopCharacterRegex:/(,)(?=[ \n\r\t'"+\-»«‹›<>])/gi,followingAuxiliaryExceptionRegex:de(["le","la","les","une","l'un","l'une"]),directPrecedenceExceptionRegex:de(["se","me","te","s'y","m'y","t'y","nous nous","vous vous"]),elisionAuxiliaryExceptionRegex:de(["c'","s'","peut-"],!0)}};function pe(e){return ce(e,me)}const{exceptionListHelpers:{checkIfWordEndingIsOnExceptionList:be},regexHelpers:{applyAllReplacements:fe}}=t.languageProcessing,{baseStemmer:ve}=t.languageProcessing;function ge(e){const i=(0,G.get)(e.getData("morphology"),"fr",!1);return i?e=>function(e,i){const t=e=e.toLowerCase(),s=function(e,i){for(const t of i.cannotTakeExtraSuffixS)if(t[0]===e)return t[1];e.endsWith("s")&&(e=e.slice(0,-1));for(const t of i.canTakeExtraSuffixS)if(t[0]===e)return t[1]}(e,i.shortWordsAndStems);if(s)return s;const l=function(e,i){for(const t of i)if(t[1].includes(e))return t[0];return null}(e,i.exceptionStemsWithFullForms);if(l)return l;if(e.endsWith("x")&&i.pluralsWithXSuffix.includes(e))return e.slice(0,-1);if(e.endsWith("s")&&i.sShouldNotBeStemmed.includes(e))return e;const r=i.nonVerbsOnEnt;if(e.endsWith("ent")&&r.includes(e))return e;if(e.endsWith("ents")&&r.includes(e.slice(0,-1)))return e.slice(0,-1);const n=i.nonVerbsOnOns;if(e.endsWith("ons")&&n.includes(e))return e.slice(0,-1);e=fe(e,i.regularStemmer.preProcessingStepsRegexes);const[a,o,u]=function(e,i){let t;-1!==e.search(new RegExp(i.rvRegex1))||-1!==e.search(new RegExp(i.rvRegex2))?t=3:(t=e.substring(1).search(new RegExp(i.rvRegex3)),-1===t?t=e.length:t+=2);const s=new RegExp(i.r1Regex);let l=e.search(s),r="";-1===l?l=e.length:(l+=2,r=e.substring(l));let n=r.search(s);return-1===n?n=e.length:(n+=2,n+=l),-1!==l&&l<3&&(l=3),[l,n,t]}(e,i.regularStemmer.rIntervals),d=e=function(e,i,t,s,l){const r=e.search(new RegExp(i.standardSuffixes1)),n=e.search(new RegExp(i.standardSuffixes2)),a=e.search(new RegExp(i.standardSuffixes3[0])),o=e.search(new RegExp(i.standardSuffixes4[0])),u=e.search(new RegExp(i.standardSuffixes5[0])),d=e.search(new RegExp(i.standardSuffixes6)),c=e.search(new RegExp(i.standardSuffixes7)),m=e.search(new RegExp(i.standardSuffixes8)),p=e.search(new RegExp(i.standardSuffixes9[0])),b=e.search(new RegExp(i.standardSuffixes10[0])),f=e.search(new RegExp(i.standardSuffixes11[0])),v=e.search(new RegExp(i.standardSuffixes12)),g=e.search(new RegExp(i.standardSuffixes13[0])),y=e.search(new RegExp(i.standardSuffixes14[0])),w=e.search(new RegExp(i.standardSuffixes15));if(-1!==r&&r>=s)e=e.substring(0,r);else if(-1!==n&&n>=s){const t=(e=e.substring(0,n)).search(new RegExp(i.suffixesPrecedingChar1[0]));e=-1!==t&&t>=s?e.substring(0,t):e.replace(new RegExp(i.suffixesPrecedingChar1[0]),i.suffixesPrecedingChar1[1])}else if(-1!==a&&a>=s)e=e.slice(0,a)+i.standardSuffixes3[1];else if(-1!==o&&o>=s)e=e.slice(0,o)+i.standardSuffixes4[1];else if(-1!==u&&u>=s)e=e.slice(0,u)+i.standardSuffixes5[1];else if(-1!==v&&v>=t)e=e.substring(0,v+1);else if(-1!==d&&d>=l){const r=(e=e.substring(0,d)).search(new RegExp(i.suffixesPrecedingChar2[0])),n=e.search(new RegExp(i.suffixesPrecedingChar4[0])),a=e.search(new RegExp(i.suffixesPrecedingChar5[0])),o=e.search(new RegExp(i.suffixesPrecedingChar6[0]));if(r>=s){const t=(e=e.slice(0,r)+i.suffixesPrecedingChar2[1]).search(new RegExp(i.suffixesPrecedingChar3[0]));t>=s&&(e=e.slice(0,t)+i.suffixesPrecedingChar3[1])}else-1!==e.search(new RegExp(i.suffixesPrecedingChar4[0]))?n>=s?e=e.substring(0,n):n>=t&&(e=e.substring(0,n)+i.suffixesPrecedingChar4[1]):a>=s?e=e.slice(0,a)+i.suffixesPrecedingChar5[1]:o>=l&&(e=e.slice(0,o)+i.suffixesPrecedingChar6[1])}else if(-1!==c&&c>=s){const t=(e=e.substring(0,c)).search(new RegExp(i.suffixesPrecedingChar7[0])),l=e.search(new RegExp(i.suffixesPrecedingChar1[0]));-1!==t?e=t>=s?e.substring(0,t):e.substring(0,t)+i.suffixesPrecedingChar7[1]:-1!==l?e=-1!==l&&l>=s?e.substring(0,l):e.substring(0,l)+i.suffixesPrecedingChar1[1]:e.search(new RegExp(i.suffixesPrecedingChar2[0]))>=s&&(e=e.replace(new RegExp(i.suffixesPrecedingChar2[0]),i.suffixesPrecedingChar2[1]))}else if(-1!==m&&m>=s)(e=e.substring(0,m)).search(new RegExp(i.suffixesPrecedingChar3[0]))>=s&&(e=(e=e.replace(new RegExp(i.suffixesPrecedingChar3[0]),i.suffixesPrecedingChar3[1])).search(new RegExp(i.suffixesPrecedingChar1[0]))>=s?e.replace(new RegExp(i.suffixesPrecedingChar1[0]),""):e.replace(new RegExp(i.suffixesPrecedingChar1[0]),i.suffixesPrecedingChar1[1]));else if(-1!==p)e=e.replace(new RegExp(i.standardSuffixes9[0]),i.standardSuffixes9[1]);else if(b>=t)e=e.replace(new RegExp(i.standardSuffixes10[0]),i.standardSuffixes10[1]);else if(-1!==f){const l=e.search(new RegExp(i.standardSuffixes11[0]));l>=s?e=e.substring(0,l):l>=t&&(e=e.substring(0,l)+i.standardSuffixes11[1])}else-1!==g&&g>=l?e=e.replace(new RegExp(i.standardSuffixes13[0]),i.standardSuffixes13[1]):-1!==y&&y>=l?e=e.replace(new RegExp(i.standardSuffixes14[0]),i.standardSuffixes14[1]):-1!==w&&w>=l&&(e=e.substring(0,w+1));return e}(e,i.regularStemmer.standardSuffixes,a,o,u),c=function(e,i,t,s){let l=!1;if(i===e.toLowerCase()||be(i,s.exceptions)){l=!0;const i=new RegExp(s.suffixes[0]);e.search(i)>=t&&(e=e.replace(i,s.suffixes[1]))}return{word:e,step2aDone:l}}(e,t,u,i.regularStemmer.verbSuffixesWithIBeginning);e=c.word;const m=c.step2aDone;if(r.includes(e)||(e=function(e,i,t,s,l,r){const n=r.regularStemmer.otherVerbSuffixes;if(i&&t===e){const i=new RegExp(n[0]);if(e.search(i)>=s)return e.replace(i,"");for(let i=1;i=l)return e.replace(t,"")}if(e.endsWith("ions"))return e;const t=new RegExp(r.regularStemmer.verbSuffixOns);e.search(t)>=l&&(e=e.replace(t,""))}return e}(e,m,d,o,u,i)),t===e.toLowerCase())e=function(e,i,t,s){const l=s.residualSuffixes;e.search(new RegExp(l.residualSuffixes1[0]))>=i&&(e=e.replace(new RegExp(l.residualSuffixes1[0]),l.residualSuffixes1[1]));const r=e.search(new RegExp(l.residualSuffix2));if(r>=t&&e.search(new RegExp(l.residualSuffix3))>=i)e=e.substring(0,r);else{let t=e.search(new RegExp(l.residualSuffixes4[0]));t>=i?e=e.substring(0,t)+l.residualSuffixes4[1]:(t=e.search(new RegExp(l.residualSuffix5)),t>=i?e=e.substring(0,t):(t=e.search(new RegExp(l.residualSuffix6[0])),t>=i&&(e=e.substring(0,t)+l.residualSuffix6[1])))}return e}(e,u,o,i.regularStemmer);else{const t=i.regularStemmer.yAndSoftCEndingAndReplacement.yEndingAndReplacement,s=i.regularStemmer.yAndSoftCEndingAndReplacement.softCEndingAndReplacement;e.endsWith(t[0])?e=e.slice(0,-1)+t[1]:e.endsWith(s[0])&&(e=e.slice(0,-1)+s[1])}e=fe(e,i.regularStemmer.finalConsonantUndoubling);const p=i.regularStemmer.unaccentERegex;return function(e,i){for(const t of i.adjectives)if(t.includes(e))return t[0];for(const t of i.verbs)if(t.includes(e))return t[0]}(e=(e=e.replace(new RegExp(p[0]),p[1])).toLowerCase(),i.stemsThatBelongToOneWord)||e}(e,i):ve}const{formatNumber:ye}=t.helpers;function we(e){const i=207-1.015*e.numberOfWords/e.numberOfSentences-73.6*e.numberOfSyllables/e.numberOfWords;return ye(i)}const{AbstractResearcher:he}=t.languageProcessing;class qe extends he{constructor(e){super(e),Object.assign(this.config,{language:"fr",passiveConstructionType:"periphrastic",firstWordExceptions:s,functionWords:H,stopWords:J,transitionWords:r,twoPartTransitionWords:U,syllables:X}),Object.assign(this.helpers,{getClauses:pe,getStemmer:ge,fleschReadingScore:we})}}(window.yoast=window.yoast||{}).Researcher=i})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/he.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/he.js new file mode 100644 index 00000000..66918f63 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/he.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>R});const r=window.yoast.analysis,n=["לכן","משו×‎","בגלל","מפני","×חרי","לפני","חוץ","בזכות","כתוצ××”","הודות","בשביל","למרות‎","בשל‎","ו","×ו","×בל","×ול×","×ך","××","×’×","רק","×כן","×ל×","עדיין","×›×שר","××–","לכן","כבר","ל×חר","×פילו","××£","כך","כדי","על","עד","בשנת","כמו","שני","ב×ופן","במהלך","במקו×","וכן","בעיקר","מ××–"," בינתיי×","במקו×","תחת","מתוך","מול","כגון","ב×מצעות","מכן","במשך","ו××£","ועל","לעתי×","בנוסף","בעקבות","לפי","בקרב","×›×™","ר×שית","שנית","תחילה","לבסוף","הב×","בר×","ו×ילו","להפך","כנגד","מנגד","×מנ×","×דרב×","לחילופין","בייחוד","במיוחד","וד××™","ו×פילו","לו","×ילו","לול×","×למל×","×ילול×","מ×חורי","בקרבת","×›×ן","ש×","כן","למעט","בלבד","מלבד","שוב","כלומר","דהיינו","ל×מור","×›×מור","כידוע","כש","×חר-כך","כעבור","ל×חרונה","בטר×","עכשיו","עתה","מלכתחילה","למען","פן","לבל","שמ×","עקב","לרגל","מפ×ת","בגין","בהת××","לפיכך","למשל","לדוגמה","כדוגמת","לסיכו×","בהתחשב","בקיצור","בקצרה","חרף"],s=n.concat(["כתוצ××” מכך","כתוצ××” מ","בעקבות ×”","בעקבות ×–×ת","לעומת ×–×ת","××œ× ×× ×›×Ÿ","בזמן ש","מתי ש","××£ על פי ש","××£ על פי","חוץ מ","×חרי ש","לפני ש","בעוד ש","בגלל ×”","הודות ל","בניגוד ל","מפני ש","××œ× ×©","×§×•×“× ×›×œ","והחשוב ביותר","לפני כן","ל×חר מכן","×חר כך","שלב ר×שון","בניגוד לכך","ר×וי לציין","יש להדגיש","×œ×œ× ×¡×¤×§","קל וחומר","×ין ספק ש","×œ× ×›×œ שכן","בתנ××™ ש","בדומה ל","×›×©× ×©","כפי ש","כך ×’×","יחסית ל","בהשוו××” ל","×œ×©× ×›×š","במקביל ל","במידה ש","×‘×ž×§×•× ×©","על יד","בסמוך ל","במרחק מה","×ל ×שר","מעבר ל","כמו כן","יתר על כן","×–×ת ועוד","נוסף על כך","פרט ל","למעלה מכך","×¤× ×™× × ×•×¡×¤×•×ª לעניין","יתרה מכך","×ך ורק","מעבר לכך","×–×ת ×ומרת","×‘×ž×™×œ×™× ×חרות","רוצה לומר","הווה ×ומר","משתמע מז×ת","×”×•× ×שר","ללמד ש","פירושו של דבר","לשון ×חרת","בהקשר ×–×”","דרך ×גב","כדי ש","כנזכר לעיל","בקשר לכך","במסגרת זו","עד ש","בשעה ש","כל זמן ש","לפי שעה","בזמן ×”×חרון","עד ×›×”","בו בזמן","כל ×ימת ש","על מנת","לתכלית זו","במטרה ל","מחמת ×”","הו×יל ו","מ×חר ש","היות ש","כיוון ש","יען ×›×™","ב×ופן ש","בצורה ש","כמו ש","×× ×›×Ÿ","×פו×","על כן","×ž×©×•× ×›×š","עקב כך","בשל כך","××™ לכך","נובע מכך","הודות לכך","כמו למשל","סיכומו של דבר","מכל ×”×מור ניתן לומר","בסך הכול","בכל מקרה","×‘×¡×™×›×•× ×›×•×œ×œ","לטווח ×רוך","על כל פני×","××£ על פי כן","על ××£ ש","על ××£ ×–×ת","××£ ש","למרות ×–×ת","בכל ×ופן","×¢× ×–×ת","×× ×›×™","×’× ××"]),i=function(e){let t=e;return e.forEach((r=>{(r=r.split("-")).length>0&&r.filter((t=>!e.includes(t))).length>0&&(t=t.concat(r))})),t}([].concat(["×חת","×חד","שתי×","שני×","שתיי×","שלש","שלשה","×רבע","×רבעה","חמש","חמשה","שש","ששה","שבע","שבעה","שמונה","שמונה","תשע","תשעה","עשר","עשרה","עשרי×","מ××”","×לף","מיליון","מילירד"],["ר×שון","ר×שונה","שני","שניה","שלישי","שלישית","רביעי","רביעית","חמישי","חמישית","ששי","ששית","שביעי","שביעית","שמיני","שמינית","תשיעי","תשיעית","עשירי","עשירית"],["×ני‎","×נחנו‎","×נו‎","×תה‎","×ת‎","×ת×‎","×תן‎","הו×‎","×”×™×‎","×”×‎","הן‎","ש×× ×™","ש×תה","שהו×","ו×× ×™","שהי×"],["×–×”","×–×ת","זו","ההו×","×”×”×™×","××™×–×”","×יזו","×לה","×לו","×”×”×","ההן","×ילו","לזה","×”×–×”","שזה"],["מה","מי","למה","כמה","×”××","×יפה","××™×–×”","×יזו","×ילו","מתי","×›×שר","×יך","××™","×למל×"],["כול×","כול","רוב","חלק","פחות","מעט","הרבה","רב","רבה","רבי×","רבות","לפחות"],["עצמי","לעצמי","בעצמי","עצמך","לעצמך","בעצמך","עצמך","לעצמך","בעצמך","עצמו","עצמה","עצמנו","עצמכ×","עצמכן","עצמ×","עצמן"],["משהו","מישהו","מישהי","כלו×"],["×ת","×ותי","×ותנו","×ותך","×תכ×","×תכן","×ותו","×ותה","×ות×","×ותן","ש×ת","של","שלי","שלנו","שלך","שלכ×","שלכן","שלו","שלה×","שלהן","לי","לך","לו","לה","לנו","לכ×","לכן","לה×","להן","על","עליי","עלינו","עליך","עלייך","עליכ×","עליכן","עליו","עליה","עליה×","עליהן","גבי","גבנו","גבך","גבה","גבנו","גבכ×","גבכן","גב×","גבן","×ל","×ליי","×לינו","×ליך","×לייך","×ליכ×","×ליכן","×ליו","×ליה","×ליה×","×ליהן","ו×ל","×¢×","×יתי","עימי","×יתנו","עימנו","×יתך","עימך","×יתכ×","×יתכן","×יתו","×יתה","×ית×","עימ×","כמו","כמוני","כמונו","כמוך","כמוך","כמוכ×","כמוכן","כמוהו","כמוה","כמוה×","כמוהן","כמוכ×","כמוכן","לפני","לפניי","לפנינו","לפניך","לפנייך","לפניו","לפניה","לפניכ×","לפניכן","לפניה×","לפניהן","ובכן","בן","בי","בנו","בך","בכ×","בכן","בו","בה","בה×","בהן","בגלל","בגללי","בגללנו","בגללך","בגללכ×","בגללכן","בגללו","בגללה","בגלל×","בגללן","×חר","×חריי","×חרינו","×חריך","×חרייך","×חריכ×","×חריכן","×חריו","×חריה","×חריה×","×חריהן","בשביל","בשבילי","בשבילנו","בשבילך","בשבילו","בשבילה","בשבילכ×","בשבילכן","בשביל×","בשבילן","במקו×","במקומי","במקומנו","במקומך","במקומו","במקומה","במקומכ×","במקומכן","במקומ×","במקומן","עד","×ודות","×ודותי","×ודותנו","×ודותך","×ודותכ×","×ודותכן","×ודותו","×ודותה","×ודות×","×ודותן","מ×חורי","מ×חוריי","מ×חורינו","מ×חוריך","מ×חורייך","מ×חוריכ×","מ×חוריכן","מ×חוריו","מ×חוריה","מ×חוריה×","מ×חוריהן","×צל","×צלי","×צלנו","×צלך","×צלך","×צלכ×","×צלכן","×צלו","×צלה","×צל×","×צלן","ב×מצעות","ב×מצעותי","ב×מצעותנו","ב×מצעותך","ב×מצעותכ×","ב×מצעותכן","ב×מצעותו","ב×מצעותה","ב×מצעות×","ב×מצעותן","בזכות","בזכותי","בזכותנו","בזכותך","בזכותכ×","בזכותכן","בזכותו","בזכותה","בזכות×","בזכותן","ביני","בינינו","בינך","ביניכ×","ביניכן","בינו","בינה","ביניה×","ביניהן","בלעדיי","בלעדינו","בלעדיך","בלעדייך","בלעדיכ×","בלעדיכן","בלעדיו","בלעדיה","בלעדיה×","בלעדיהן","בעד","בעדי","בעדנו","בעדך","בעדך","בעדכ×","בעדכן","בעדו","בעדה","בעד×","בעדן","בעקבות","בעקבי","בעקביי","בעקבינו","בעקביך","בעקבייך","בעקביכ×","בעקביכן","בעקביו","בעקביה","בעקביה×","בעקביהן","בפני","בפניי","בפנינו","בפניך","בפנייך","בפניכ×","בפניכן","בפניו","בפניה","בפניה×","בפניהן","בקרב","בקרבי","בקרבנו","בקרבך","בקרבך","בקרבכ×","בקרבכן","בקרבו","בקרבה","בקרב×","בקרבן","בש×","בשמי","בשמנו","בשמך","בשמך","בשמכ×","בשמכן","בשמו","בשמה","בשמ×","בשמן","בתוך","בתוכי","בתוכנו","בתוכך","בתוכך","בתוככ×","בתוככן","בתוכו","בתוכה","בתוכ×","בתוכן","כמוני","כמונו","כמוך","כמוך","כמוכ×","כמוכן","כמוהו","כמוה","כמוה×","כמוהן","כלפי","כלפיי","כלפינו","כלפיך","כלפייך","כלפיכ×","כלפיכן","כלפיו","כלפיה","כלפיה×","כלפיהן","כנגד","כנגדי","כנגדנו","כנגדך","כנגדך","כנגדכ×","כנגדכן","כנגדו","כנגדה","כנגד×","כנגדן","ל×ורך","ל×ורכי","ל×ורכנו","ל×ורכך","ל×ורכך","ל×ורככ×","ל×ורככן","ל×ורכו","ל×ורכה","ל×ורכ×","ל×ורכן","לגבי","לגביי","לגבינו","לגביך","לגבייך","לגביכ×","לגביכן","לגביו","לגביה","לגביה×","לגביהן","לדברי","לדבריי","לדברינו","לדבריך","לדברייך","לדבריכ×","לדבריכן","לדבריו","לדבריה","לדבריה×","לדבריהן","ליד","לידי","לידנו","לידך","לידך","לידכ×","לידכן","לידו","לידה","ליד×","לידן","למען","למעני","למעננו","למענך","למענך","למענכ×","למענכן","למענו","למענה","למענ×","למענן","לפי","לפי","לפינו","לפיך","לפיך","לפיכ×","לפיכן","לפיו","לפיהו","לפיה","לפיה×","לפיהן","לקר×ת","לקר×תי","לקר×תנו","לקר×תך","לקר×תך","לקר×תכ×","לקר×תכן","לקר×תו","לקר×תה","לקר×ת×","לקר×תן","לרוחב","לרוחבי","לרוחבנו","לרוחבך","לרוחבך","לרוחבכ×","לרוחבכן","לרוחבו","לרוחבה","לרוחב×","לרוחבן","מול","מולי","מולנו","מולך","מולך","מולכ×","מולכן","מולו","מולה","מול×","מולן","מן","ממני","ממנו","מ×יתנו","ממך","ממך","מכ×","מכן","ממנו","ממנה","מה×","מהן","מעל","מעליי","מעלינו","מעליך","מעלייך","מעליכ×","מעליכן","מעליו","מעליה","מעליה×","מעליהן","מפני","מפניי","מפנינו","מפניך","מפנייך","מפניכ×","מפניכן","מפניו","מפניה","מפניה×","מפניהן","מתחת","מתחתיי","מתחתינו","מתחתיך","מתחתייך","מתחתיכ×","מתחתיכן","מתחתיו","מתחתיה","מתחתיה×","מתחת×","מתחתיהן","מתחתן","עבור","עבורי","עבורנו","עבורך","עבורכ×","עבורכן","עבורו","עבורה","עבור×","עבורן","תחת","תחתיי","תחתינו","תחתיך","תחתייך","תחתיכ×","תחתיכן","תחתיו","תחתיה","תחתיה×","תחת×","תחתיהן","תחתן","לעומת","לעומתי","לעומתנו","לעומתך","לעומתך","לעומתכ×","לעומתכן","לעומתו","לעומתה","לעומת×","לעומתן","פי"],["×בל","×ך","×ל×","××","××–","×ו","כדי","×›×™","×כן","×גב","×ול×","×ע״פ","×שר","בעוד","ו/×ו","יען","לול×","פן"],["×ומר","×ומרת","×ומרי×","×ומרות","×מרתי","×מרנו","×מרת","×מרת×","×מרתן","×מר","×מרה","×מרו","× ×מר","ת×מר","ת×מרי","ת×מרו","ת×מרנה","×™×מר","ת×מר","ת×מרנה","×™×מר","×™×מרו","×מור","×מרי","×מורנה","מדבר","מדברת","מדברי×","מדברות","דיברתי","דיברנו","דיברת","דיברת×","דיברתן","דיבר","דיברה","דיברו","×דבר","נדבר","תדבר","תדברי","תדברו","תדברנה","ידבר","ידברו","דברâ€","דבריâ€","דברוâ€","דברנהâ€","לדבר","מבין","מבינה","מביני×","מבינות","הבנתי","הבינותי","הבנו","הבינונו","הבנת","הבינות","הבנת×","הבינות×","הבנתן","הבינותן","הבין","הבינה","הבינו","×בין","נבין","תבין","תביני","תבינו","תבנה","יבין","יבינו","תבינינה","הבןâ€","הביניâ€","הבנהâ€","להבין","מ×מין","מ×מינה","מ×מיני×","מ×מינות","×”×מנתי","×”×מנו","×”×מנת","×”×מנת×","×”×מנתן","×”×מין","×”×מינה","×”×מינו","××מין","× ×מין","ת×מין","ת×מיני","ת×מינו","ת×מנה","×™×מין","×™×מינו","×”×מןâ€","×”×מיניâ€","×”×מינוâ€","×”××”â€","לה×מין","יודע","יודעת","יודעי×","יודעות","ידעתי","ידענו","ידעת","ידעת×","ידעתן","ידע","ידעה","ידעו","×דע","נדע","תדע","תדעי","תדעו","תדענה","דעâ€","דעיâ€","דעוâ€","דענהâ€","לדעת","שו×ל","שו×לת","שו×לי×","שו×לות","ש×לתי","ש×לנו","ש×לת","ש×לת×","ש×לתן","ש×ל","ש×לה","ש×לו","×ש×ל","נש×ל","תש×ל","תש×לי","תש×לו","תש×לנה","יש×ל","יש×לו","ש×לâ€","ש×ליâ€","ש×לוâ€","ש×לנהâ€","לש×ול"],["מ×וד","בהחלט","ביותר","נור×","לגמרי","די"],["להיות","×”×™×™","הייתי","×™×”×™×”","היית","הייתה","היינו","היית×","הייתן","היו","××”×™×”","תהיה","תהיי","×™×”×™×”","× ×”×™×”","תהיו","תהיינה","יהיו","×”×™×™× ×”","יש","שיש","×”× ×”","×ין","רוצה","רוצי×","רציתי","רצה","יכול","יכולה","יכולי×","נוכל","צריך","צריכה","חייב","לעשות","עושה","חושב","חשבתי","חושבת","נר××”","לר×ות","רו××”","בו×","הולך","ללכת","הולכת","הלכתי","הלכת","הלכת","הלך","הלכה","×לך","תלך","תלכי","ילך","לכי","הולכי×","הולכות","הלכנו","הלכת×","הלכתן","הלכו","נלך","תלכו","תלכנה","ילכו","לכו","לכנה","מצטער","קרה","קורה","×והב","שו×","להשתמש","לנסות","מנסה","לוקח","××§×—","לשי×","נותן","נותנת","נותני×","נותנות","נת","תינתנו","נתת","נתת×","נתתן","נתן","נתנה","נתנו","×תן","ניתן","תיתן","תיתני","תיתנותיתנה","ייתןנתתתיתן","ייתנו","תיתנה","תןâ€","תניâ€","תנוâ€","תנהâ€","לתת"],["רק","כל","יותר","×›×ן","כך","×›×”","נכון","עכשיו","עכשיו","ש×","קדימה","××£","עוד","ב×מת","ממש","×ולי","כבר","פה","קצת","עדיין","בדיוק","שוב","תמיד","×פילו","בטח","מ×וחר","ל×חרונה","בקרוב","מיד","בחוץ","מהר","קשה","ל×ט","לרוב","כמעט","בדרך","כלל","לפעמי×","יחד","לבד","×חורה","×›×ילו","×’×","בערך","×”×›×™","מל×","מל××”","מל××™×","מל×ות","טוב","טובה","טובי×","טובות","חדש","חדשה","חדשי×","חדשות","ישן","ישנה","ישני×","ישנות","צעיn","צעירה","צעירי×","צעירות","גדול","גדולה","גדולי×","גדולות","קל","קלה","קלי×","קלות","מהיר","מהירה","מהירי×","מהירות","רחוק","רחוקה","רחוקי×","רחוקות","נחמד","נחמדה","נחמדי×","נחמדות","מיוחד","מיוחדת","מיוחדי×","מיוחדות","פשוט","פשוטה","פשוטי×","פשוטות","קטן","קטנה","קטני×","קטנות","×רוך","×רוכה","×רוכי×","×רוכות","קצר","קצרה","קצרי×","קצרות","נמוך","נמוכה","נמוכי×","נמוכות","של×","שלמה","שלמי×","שלמות","גבוה","גבוהה","גבוהי×","גבוהות","חשוב","חשובה","חשובי×","חשובות"],["×—","הו","וו×ו"],['×§"×’',"×’'","גר×",'סמ"×§','מ"ל',"ליטר","×›×£","כפית","כוס","כוסות"],["היו×","×תמול","מחר","יו×","ימי×","שבוע","בשבוע","שבועות","שעה","שעות","דקה","דקות","רגע","רגעי×","חודש","חודשי×","שנה","שני×","השנה"],["דבר","פע×","פעמי×","זמן","הזמן","הכל","בכל","×נשי×","מקו×","לעתי×","מספר","×חוז","×חוזי×"],["כן","ל×","של×","בסדר","תודה","בבקשה","שלו×","×חוז","מר","×דוני","גברת","×ד×"],n)),o=[["×ו","×ו"],["×ין","×ל×"],["ל×","×ל×"],["מצד ×חד","מצד ×חר"],["מחד גיס×","מ×ידך גיס×"],["ר×שית","שנית"],["תחילה","לבסוף"],["×ž×©×•× ×©","מפני ש"],["לכ×ורה","×ך"]],f=["×חד","כמה","מעטי×","×חת","שני×","שתי×","שלשה","שלש","×רבעה","×רבע","חמשה","חמש","ששה","שש","שבעה","שבע","שמונה","שמונה","תשעה","תשע","עשרה","עשר","×–×”","×–×ת","×לה","×וה","×”×™×","×לה","המה","×”×","×”× ×”"],c={recommendedLength:15},u=["ב","×”","ו","×›","ל","מ","ש"],a=new RegExp(`^(${u.join("|")})`);function x(e){const t=[];t.push(...u.map((t=>t+e)));const{stem:r,prefix:n}=function(e,t){let r=e,n="";const s=e.match(t);return s&&(n=s[0],r=e.slice(n.length)),{stem:r,prefix:n}}(e,a);return""!==n&&(t.push(r),t.push(...u.map((e=>e+r)))),t}const p=window.lodash,g=function(e,t){return t.some((t=>e.startsWith(t)))?e.slice(1):e},{baseStemmer:l}=r.languageProcessing;function d(e){const t=(0,p.get)(e.getData("morphology"),"he",!1);return t?e=>function(e,t){const r=t.dictionary;let n=r[e];if(n)return n;const s=g(e,t.prefixes);if(s!==e){if(n=r[s],n)return n;const e=g(s,t.prefixes);if(e!==s&&(n=r[e],n))return n}return e}(e,t):l}const h=["×כל","דבר","עבר","עמד","קר×","שמע","זכר","×—×–×§","חט×","כתב","מלך","מצ×","נגד","נפל","עבר","פקד","רו×","שכב","×בד","×מן","גדל","חשב","יטב","כבד","לבש","קדש","קרב","שנ×","ש×ל","ש×ר","שבע","שחת","שכן","שכח","שלך","של×","בער","בקע","בר×","ברח","דבק","דרך","×–×¢×§","חלק","חר×","חרש","כעס","כשל","מ×ס","משל","נבט","נחל","נצח","סגר","סתר","ערך","פרה","פל×","פלל","פעל","פרד","פרש","צלח","צרר","קלל","×§× ×”","רחק","רכב","רעע","שבע","שכל","שכ×","×ש×","בדל","בהל","בחן","בשל","גבה","גנב","זרק","חל×","חלף","חרב","חרד","חרף","חשך","חת×","טמן","טרף","כל×","×›× ×¢","כרע","משך","× ×”×’","סמך","פחד","פרד","פרח","פשט","צדק","צמח","צפן","קד×","קצף","קשב","רבץ","רגז","רגל","רחב","רעש","רשע","שפל","שקט","ברר","גבר","געל","טע×","כזב","כחש","כנס","לחץ","מטר","מעט","מרד","משל","נגש","נזל","על×","עצב","עשר","פגש","פרע","צב×","צמת","קס×","רבע","רגע","רעב","רע×","רקע","ש×ב","שבח","שחר","שכל","שכר","שען","שקף","שתל","שלכ‎","מלכ‎","דרכ‎","ערכ‎","חשכ‎","משכ‎","סמכ‎","×מנ","שכנ","בחנ","טמנ","צפנ","שענ","רומ","שלמ","חרמ","שכמ","×שמ","חלמ","חתמ","כלמ","קדמ","עלמ","טעמ","חלפ","חרפ","טרפ","קצפ","שקפ","רבצ","לחצ"],m=["×כל","×מר","לקח","נש×","נתן","קר×","שלח","שמע","×הב","×סף","כרת","כתב","מצ×","פקד","שמר","שפט","×בד","×מן","×’×ל","דרש","הרג","חשב","טמ×","יתר","לכד","ספר","עזב","קבץ","קבר","רדף","שרף","ש×ל","שבר","שחת","שכח","של×","שפך","×סר","בחר","בלע","בקע","בר×","דרך","זרע","חלק","חנן","חרש","טהר","למד","מכר","משל","סגר","סתר","עזר","ערך","פרד","פרש","צפה","×§× ×”","קרע","רחץ","רפ×","שבע","שחט","שמר","תפש","תקע","×ש×","בגד","בדל","בחן","גזל","גמל","גנב","הרס","זרק","חב×","חבש","חלץ","חצב","חקר","חרב","חת×","טמן","טרף","לקט","מנע","סלח","סמך","ספר","עצר","פגע","פלט","פרד","פרץ","פשט","צפן","קצר","קשר","רעש","רצח","שחק","שטף","×ט×","×ל×","×רג","בצע","×’×ל","גדר","×’×–×–","גזר","גלח","גרע","דחה","דקר","חבל","חרש","×—×›×”","חפר","×—×§×§","חרץ","חשק","טבח","טבל","טבע","כבש","כל×","לחץ","מחץ","מסס","משל","נש×","סחר","סלל","סער","סקל","סת×","עטף","עכר","פרע","פרק","רמס","ש×ב","ש××£","שבר","שכר","שלל","שלף","שקל","שקף","שתל","תכן","תמך","תעב","שפכ‎","דרכ‎","ערכ‎","סמכ‎","תמכ‎","נתנ","×מנ","×—× × ","בחנ","טמנ","צפנ","תכנ","שלמ","×שמ","חתמ","×טמ","×למ","סתמ","×ספ","רדפ","שרפ","טרפ","שטפ","עטפ","ש×פ","שלפ","שקפ","קבצ","רחצ","חלצ","פרצ","חרצ","לחצ","מחצ"],y=["×כל","דבר","עבר","שלח","בקש","ברך","×—×–×§","חט×","כתב","נצל","עבר","פקד","רו×","שמר","×בד","×מן","בטח","גדל","הלל","חלל","חשב","טמ×","יתר","כבד","כסה","כפר","לח×","לכד","נב×","× ×’×¢","סבב","ספר","קבץ","קדש","קרב","שמח","שבר","שכן","של×","שרת","בער","בקע","בר×","חלק","חנן","טהר","כבס","למד","מרר","מהר","מלט","נכר","נצח","פלל","פרש","צפה","קלל","רח×","רחק","רנן","רפ×","שמר","בדל","בצר","בשל","גרש","דמ×","זמר","חבר","מ×ן","נשק","נתץ","נתק","ספר","ערב","פשט","צרף","קד×","×§× ×","קצר","קשר","רגל","שחק","בצע","ברר","בשר","גדר","גלל","דכ×","דשן","חבל","חבק","חמ×","חפש","חשק","כהן","כזב","כנס","מסס","מעט","מרר","נגן","נדב","נהל","נחש","נער","נפח","נפץ","נשך","סכך","סכן","סקל","עלל","×¢× ×’","עצב","פ×ר","פזר","פצה","פקח","פרק","פתה","קבל","קדד","קצץ","רמה","רצץ","רקע","שבח","שבר","שנה","שקר","שקף","תכן","תעב","ברכ‎","נשכ‎","סככ‎","×מנ","שכנ","×—× × ","רננ","מ×× ","דשנ","×›×”× ","× ×’× ","סכנ","תכנ","רומ","לחמ","שלמ","רחמ","דממ","קדמ","חממ","צרפ","שקפ","קבצ","נתצ","קצצ","רצצ","נפצ"],{getWords:w}=r.languageProcessing,b=function(e,t,r){return t.some((t=>r.some((function(r){return new RegExp("^"+r.prefix+t+r.suffix+"$").test(e)}))))};function P(e){const t=w(e);for(const e of t){if(b(e,m,[{prefix:"(× |××™|תי|×”×™|×™×™|× ×™|להי)",suffix:""},{prefix:"(תי|×”×™)",suffix:"(×™|ו|× ×”)"},{prefix:"× ",suffix:"(×™×|ת|ות|תי|×”|נו|ת×|תן|ו)"},{prefix:"×™×™",suffix:"ו"}]))return!0;const t=[{prefix:"(מ|×|ת|×™|× )",suffix:""},{prefix:"תי",suffix:"× ×”"},{prefix:"מ",suffix:"(ת|×™×|ות)"},{prefix:"ת",suffix:"(×™|ו|× ×”)"},{prefix:"×™",suffix:"ו"},{prefix:"",suffix:"(תי|ת|×”|נו|ת×|תן|ו)"},{prefix:"",suffix:""}],r="ו";if(y.some((n=>t.some((function(t){return new RegExp("^"+t.prefix+n[0]+r+n[1]+n[2]+t.suffix+"$").test(e)})))))return!0;if(b(e,h,[{prefix:"(מו|הו|×ו|תו|יו|נו)",suffix:""},{prefix:"מו",suffix:"(ת|×™×|ות)"},{prefix:"הו",suffix:"(תי|ת|ית|×”|נו|ת×|תן|ו)"},{prefix:"תו",suffix:"(ו|× ×”|×™)"},{prefix:"יו",suffix:"ו"}]))return!0}return!1}const{AbstractResearcher:S}=r.languageProcessing;class R extends S{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"he",passiveConstructionType:"morphological",firstWordExceptions:f,functionWords:i,transitionWords:s,twoPartTransitionWords:o,sentenceLength:c,prefixedFunctionWordsRegex:a}),Object.assign(this.helpers,{createBasicWordForms:x,getStemmer:d,isPassiveSentence:P})}}(window.yoast=window.yoast||{}).Researcher=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/hu.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/hu.js new file mode 100644 index 00000000..2165f62d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/hu.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(a,n)=>{for(var l in n)e.o(n,l)&&!e.o(a,l)&&Object.defineProperty(a,l,{enumerable:!0,get:n[l]})},o:(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},a={};e.r(a),e.d(a,{default:()=>_});const n=window.yoast.analysis,l=["ahányszor","ahelyett","ahogy","ahol","ahonnan","ahová","akár","akárcsak","akkor","alapvetÅ‘en","alighogy","ám","ámbár","ámde","ameddig","amennyiben","amennyire","amennyiszer","amíg","amikor","amikorra","aminthogy","amióta","amire","annálfogva","annyira","avagy","azaz","azazhogy","azért","azonban","azonkívül","azután","bár","befejezésül","bizony","csakhogy","de","dehát","dehogy","egybehangzóan","egyidejűleg","egyöntetűen","egyöntetűleg","ekképpen","ellenben","elÅ‘ször","elÅ‘zÅ‘leg","elsÅ‘sorban","ennélfogva","eredményeképp","eredményeképpen","és","eszerint","ezért","feltétlenül","fÅ‘ként","fÅ‘leg","függetlenül","ha","habár","hanem","hányszor","harmadjára","harmadszor","hasonlóan","hasonlóképpen","hát","hirtelen","hirtelenjében","hisz","hiszen","hogy","hogyha","hol","holott","honnan","hová","így","illetÅ‘leg","illetve","immár","is","jóllehet","kár","kétségtelenül","kifejezetten","kiváltképp","következésképpen","legalábbis","legfÅ‘képp","maga","máskülönben","másodsorban","másodszor","meg","mégis","megkérdÅ‘jelezhetetlenül","megkérdÅ‘jelezhetÅ‘en","mégpedig","mégsem","mennél","mennyiszer","merre","mert","merthogy","midÅ‘n","mielÅ‘tt","míg","mihelyt","miként","miképp","mikor","mikorra","mindamellett","mindazáltal","mindazonáltal","mindenekelÅ‘tt","minél","mint","mintha","minthogy","mióta","mire","miután","mivel","mivelhogy","nahát","nehogy","noha","nos","nyilvánvalóan","óh","összefoglalva","összehasonlításképp","összehasonlításképpen","pedig","például","plusz","s","sajna","satöbbi","se","sem","sÅ‘t","szintén","tagadhatatlanul","tehát","továbbá","tudniillik","úgy","ugyan","ugyanis","úgyhogy","vagy","vagyis","valamennyi","valamint","valóban","végezetül","végül","végülis","viszont","amerrÅ‘l","hiába","miközben","egyszersmind","csakugyan","különben","mialatt","mintegy","miszerint","nemde","ugye","vajon","semmint","hacsak","úgymint","mintsem"],k=l.concat(["a továbbiakban","abba, hogy","abban, hogy","abból, hogy","addig, amíg","addig, hogy","addig, míg","afelé, hogy","ahelyett, hogy","ahhoz, hogy","ahogy fent látható","ahogy írtam","ahogy megmutattam","ahogy megjegyeztem","akként, hogy","akkorra, hogy","amiatt, hogy","amellett, hogy","amint azt megjegyeztük","amint csak","amint láthatjuk","anélkül, hogy","annak érdekében, hogy","annak okáért","annyi, hogy","annyi, mint","annyira, hogy","annyira, mint","arra, hogy","arról, hogy","attól fogva, hogy","attól, hogy","avégett, hogy","avégre, hogy","az ellen, hogy","az elsÅ‘ dolog","az elsÅ‘ dolog, amit meg kell jegyezni","az iránt, hogy","azelÅ‘tt, hogy","azért, hogy","azonos módon","azok után, hogy","azon, hogy","azonkívül, hogy","azóta, hogy","azt követÅ‘en","aztán pedig","azután, hogy","azzal a feltétellel, hogy","azzal, hogy","bár igaz lehet","ebbÅ‘l a célból","ebbÅ‘l az okból","elÅ‘bb vagy utóbb","ennek eredményeként","ennek folytán","ennek megfelelÅ‘en","éppen ellenkezÅ‘leg","éppen úgy","erre a célra","ezen felül","fenntartás nélkül","ha egyébként","ha egyszer","ha különben","ha ugyan","hasonló módon","hogy sem","hogy sem mint","hol hol","holott pedig","idÅ‘rÅ‘l idÅ‘re","igaz, hogy","így tehát","ilyen körülmények között","késedelem nélkül","kétség nélkül","más szóval","más szavakkal","másképpen fogalmazva","még akkor is","még ha","mert különben","mert tény, hogy","mind mind","mindaddig, amíg","mindezek után","mint sem hogy","nem is beszélve","nem különben","nem úgy, mint","oda, hogy","oly módon, hogy","sem hogy","szem elÅ‘tt tartva","tény, hogy","úgy, hogy","úgy, mint","ugyanazon okból","ugyanolyan okból","olybá tűnik","egyszer s mindenkorra","akkor, amikor","azóta, mióta","attól kezdve, mióta","attól kezdve, hogy","akkorra, amikorra","akkor, ha","azóta, amióta","akkorra, amikorra","addigra, amikorra","akkor, hogyha","akkor, ha","úgy-ahogy","mintsem hogy"]),t=function(e){let a=e;return e.forEach((n=>{(n=n.split("-")).length>0&&n.filter((a=>!e.includes(a))).length>0&&(a=a.concat(n))})),a}([].concat(["a","az","egy"],["egy","kettÅ‘","három","négy","öt","hat","hét","nyolc","kilenc","tíz","tizenegy","tizenkettÅ‘","tizenhárom","tizennégy","tizenöt","tizenhat","tizenhét","tizennyolc","tizenkilenc","húsz","száz","ezer","tízezer","százezer","millió","félmillió","egymillió"],["elsÅ‘","második","harmadik","negyedik","ötödik","hatodik","hetedik","nyolcadik","kilencedik","tizedik","tizenegyedik","tizenkettedik","tizenharmadik","tizennegyedik","tizenötödik","tizenhatodik","tizenhetedik","tizennyolcadik","tizenkilencedik","huszadik","századik","ezredik","tízezredik","százezredik","milliomodik","egymilliomodik"],["én","engem","enyém","nekem","velem","értem","bennem","belém","belÅ‘lem","nálam","hozzám","tÅ‘lem","rajtam","rám","rólam","te","téged","tiéd","neked","veled","érted","benned","beléd","belÅ‘led","nálad","hozzád","tÅ‘led","rajtad","rád","rólad","Å‘","Å‘t","övé","neki","vele","érte","benne","bele","belé","nála","hozzá","tÅ‘le","rajta","rá","róla","mi","minket","mienk","nekünk","velünk","értünk","bennünk","belénk","nálunk","hozzánk","tÅ‘lünk","rajtunk","ránk","rólunk","ti","titeket","tiétek","nektek","veletek","értetek","bennetek","belétek","nálatok","hozzátok","tÅ‘letek","rajtatok","rátok","rólatok","Å‘k","Å‘ket","övék","nekik","velük","értük","bennük","beléjük","náluk","hozzájuk","tÅ‘lük","rajtuk","rájuk","róluk","Ön","Önt","Öné","Önnek","Önnel","Önért","Önben","Önbe","Ön","Önt","Öné","Önnek","Önnel","Önért","Önben","Önbe","ÖnbÅ‘l","Önnél","Önhöz","ÖntÅ‘l","Önön","Önre","ÖnrÅ‘l","Önök","Önöket","Önöké","Önöknek","Önökkel","Önökért","Önökben","Önökbe","ÖnökbÅ‘l","Önöknél","Önökhöz","ÖnöktÅ‘l","Önökön","Önökre","ÖnökrÅ‘l","ez","emez","ugyanez","ezt","emezt","ugyanezt","ezé","emezé","ugyanezé","ennek","emennek","ugyanennek","ezzel","emezzel","ugyanezzel","ezért","emezért","ugyanezért","ebben","emebben","ugyanebben","ebbe","emebbe","ugyanebbe","ebbÅ‘l","emebbÅ‘l","ugyanebbÅ‘l","ennél","emennél","ugyanennél","ehhez","emehhez","ugyanehhez","ettÅ‘l","emettÅ‘l","ugyanettÅ‘l","ezen","emezen","ugyanezen","erre","emerre","ugyanerre","errÅ‘l","emerrÅ‘l","ugyanerrÅ‘l","eddig","emeddig","ugyaneddig","ekkor","emekkor","ugyanekkor","ezzé","emezzé","ugyanezzé","ekként","emekként","ugyanekként","az","amaz","ugyanaz","azt","amazt","ugyanazt","azé","amazé","ugyanazé","annak","amannak","ugyanannak","azzal","amazzal","ugyanazzal","azért","amazért","ugyanazért","abban","amabban","ugyanabban","abba","amabba","ugyanabba","abból","amabból","ugyanabból","annál","amannál","ugyanannál","ahhoz","amahhoz","ugyanahhoz","attól","amattól","ugyanattól","azon","amazon","ugyanazon","arra","amarra","ugyanarra","arról","amarról","ugyanarról","addig","amaddig","ugyanaddig","akkor","amakkor","ugyanakkor","azzá","amazzá","ugyanazzá","akként","amakként","ugyanakként","ilyen","emilyen","ugyanilyen","ilyet","emilyet","ugyanilyet","ilyennek","emilyennek","ugyanilyennek","ilyennel","emilyennel","ugyanilyennel","ilyenért","emilyenért","ugyanilyenért","ilyenben","emilyenben","ugyanilyenben","ilyenbe","emilyenbe","ugyanilyenbe","ilyenbÅ‘l","emilyenbÅ‘l","ugyanilyenbÅ‘l","ilyennél","emilyennél","ugyanilyennél","ilyenhez","emilyenhez","ugyanilyenhez","ilyentÅ‘l","emilyentÅ‘l","ugyanilyentÅ‘l","ilyenen","emilyenen","ugyanilyenen","ilyenre","emilyenre","ugyanilyenre","ilyenrÅ‘l","emilyenrÅ‘l","ugyanilyenrÅ‘l","ilyenkor","emilyenkor","ugyanilyenkor","ilyenné","emilyenné","ugyanilyenné","olyan","amolyan","ugyanolyan","olyat","amolyat","ugyanolyat","olyannak","amolyannak","ugyanolyannak","olyannal","amolyannal","ugyanolyannal","olyanért","amolyanért","ugyanolyanért","olyanban","amolyanban","ugyanolyanban","olyanba","amolyanba","ugyanolyanba","olyanból","amolyanból","ugyanolyanból","olyannál","amolyannál","ugyanolyannál","olyanhoz","amolyanhoz","ugyanolyanhoz","olyantól","amolyantól","ugyanolyantól","olyanon","amolyanon","ugyanolyanon","olyanra","amolyanra","ugyanolyanra","olyanról","amolyanról","ugyanolyanról","olyankor","amolyankor","ugyanolyankor","olyanná","amolyanná","ugyanolyanná","ennyi","emennyi","ugyanennyi","ennyit","emennyit","ugyanennyit","ennyinek","emennyinek","ugyanennyinek","ennyivel","emennyivel","ugyanennyivel","ennyiért","emennyiért","ugyanennyiért","ennyiben","emennyiben","ugyanennyiben","ennyibe","emennyibe","ugyanennyibe","ennyibÅ‘l","emennyibÅ‘l","ugyanennyibÅ‘l","ennyinél","emennyinél","ugyanennyinél","ennyihez","emennyihez","ugyanennyihez","ennyitÅ‘l","emennyitÅ‘l","ugyanennyitÅ‘l","ennyin","emennyin","ugyanennyin","ennyire","emennyire","ugyenennyire","ennyirÅ‘l","emennyirÅ‘l","ugyanennyirÅ‘l","ennyivé","emennyivé","ugyanennyivé","annyi","amannyi","ugyanannyi","annyit","amannyit","ugyanannyit","annyinak","amannyinak","ugyanannyinak","annyival","amannyival","ugyanannyival","annyiért","amannyiért","ugyanannyiért","annyiban","amannyiban","ugyanannyiban","annyiba","amannyiba","ugyanannyiba","annyiból","amannyiból","ugyanannyiból","annyinál","amannyinál","ugyanannyinál","annyihoz","amannyihoz","ugyanannyihoz","annyitól","amannyitól","ugyananyitól","annyin","amannyin","ugyanannyin","annyira","amannyira","ugyanannyira","annyiról","amannyiról","ugyanannyiról","annyivá","amannyivá","ugyanannyivá","így","emígy","ugyanígy","úgy","amúgy","ugyanúgy","itt","ott","ugyanitt","ogyanott","ide","oda","ugyanide","ugyanoda","amoda","emide","innen","onnan","ugyaninnen","ogyanonnan","amonnan","eminnen","eddig","addig","ezután","azután","ezelÅ‘tt","azelÅ‘tt","ugyaneddig","ugyanaddig","emeddig","amaddig","ekkora","ekkorát","ekkorának","ekkorával","ekkoráért","ekkorában","ekkorába","ekkorából","ekkoránál","ekkorához","ekkorától","ekkorán","ekkorára","ekkoráról","ekkorává","akkora","akkorát","akkorának","akkorával","akkoráért","akkorában","akkorába","akkorából","akkoránál","akkorához","akkorától","akkorán","akkorára","akkoráról","akkorává","ekképpen","akképpen","ezek","emezek","ugyanezek","ezeket","emezeket","ugyanezeket","ezeké","emezeké","ugyanezeké","ezeknek","emezeknek","ugyanezeknek","ezekkel","emezekkel","ugyanezekkel","ezekért","emezekért","ugyanezekért","ezekben","emezekben","ugyanezekben","ezekbe","emezekbe","ugyanezekbe","ezekbÅ‘l","emezekbÅ‘l","ugyanezekbÅ‘l","ezeknél","emezeknél","ugyanezeknél","ezekhez","emezekhez","ugyanezekhez","ezektÅ‘l","emezektÅ‘l","ugyanezektÅ‘l","ezekre","emezekre","ugyanezekre","ezekrÅ‘l","emezekrÅ‘l","ugyanezekrÅ‘l","ezekig","emezekig","ugyanezekig","ezekké","emezekké","ugyanezekké","ezekként","emezekként","ugyanezekként","azok","amazok","ugyanazok","azokat","amazokat","ugyanazokat","azoké","amazoké","ugyanazoké","azoknak","amazoknak","ugyanazoknak","azokkal","amazokkal","ugyanazokkal","azokért","amazokért","ugyanazokért","azokban","amazokban","ugyanazokban","azokba","amazokba","ugyanazokba","azokból","amazokból","ugyanazokból","azoknál","amazoknál","ugyanazoknál","azokhoz","amazokhoz","ugyanazokhoz","azoktól","amazoktól","ugyanazoktól","azokra","amazokra","ugyanazokra","azokról","amazokról","ugyanazokról","azokig","amazokig","ugyanazokig","azokká","amazokká","ugyanazokká","ilyenek","emilyenek","ugyanilyenek","ilyeneket","emilyeneket","ugyanilyeneket","ilyeneknek","emilyeneknek","ugyanilyeneknek","ilyenekkel","emilyenekkel","ugyanilyenekkel","ilyenekért","emilyenekért","ugyanilyenekért","ilyenekben","emilyenekben","ugyanilyenekben","ilyenekbe","emilyenekbe","ugyanilyenekbe","ilyenekbÅ‘l","emilyenekbÅ‘l","ugyanilyenekbÅ‘l","ilyeneknél","emilyeneknél","ugyanilyeneknél","ilyenekhez","emilyenekhez","ugyanilyenekhez","ilyenektÅ‘l","emilyenektÅ‘l","ugyanilyenektÅ‘l","ilyeneken","emilyeneken","ugyanilyeneken","ilyenekre","emilyenekre","ugyanilyenekre","ilyenekrÅ‘l","emilyenekrÅ‘l","ugyanilyenekrÅ‘l","ilyenekké","emilyenekké","ugyanilyenekké","olyanok","amolyanok","ugyanolyanok","olyanokat","amolyanokat","ugyanolyanokat","olyanoknak","amolyanoknak","ugyanolyanoknak","olyanokkal","amolyanokkal","ugyanolyanokkal","olyanokért","amolyanokért","ugyanolyanokért","olyanokban","amolyanokban","ugyanolyanokban","olyanokba","amolyanokba","ugyanolyanokba","olyanokból","amolyanokból","ugyanolyanokból","olyanoknál","amolyanoknál","ugyanolyanoknál","olyanokhoz","amolyanokhoz","ugyanolyanokhoz","olyanoktól","amolyanoktól","ugyanolyanoktól","olyanokon","amolyanokon","ugyanolyanokon","olyanokra","amolyanokra","ugyanolyanokra","olyanokról","amolyanokról","ugyanolyanokról","olyanokká","amolyanokká","ugyanolyanokká","aki","akit","akié","akinek","akivel","akiért","akiben","akibe","akibÅ‘l","akinél","akihez","akitÅ‘l","akin","akire","akirÅ‘l","akivé","ami","amit","amié","aminek","amivel","amiért","amiben","amibe","amibÅ‘l","aminél","amihez","amitÅ‘l","amin","amire","amirÅ‘l","amivé","amilyen","amilyet","amilyennek","amilyennel","amilyenért","amilyenben","amilyenbe","amilyenbÅ‘l","amilyennél","amilyenhez","amilyentÅ‘l","amilyenen","amilyenre","amilyenrÅ‘l","amilyenné","amekkora","amekkorát","amekkorának","amekkorával","amekkoráért","amekkorában","amekkorába","amekkorából","amekkoránál","amekkorához","amekkorától","amekkorán","amekkorára","amekkoráról","amekkorává","amely","amelyet","amelynek","amellyel","amelyért","amelyben","amelybe","amelybÅ‘l","amelynél","amelyhez","amelytÅ‘l","amelyen","amelyre","amelyrÅ‘l","amellyé","ahány","ahányat","ahánynak","ahánnyal","ahányért","ahányban","ahányba","ahányból","ahánynál","ahányhoz","ahánytól","ahányan","ahányra","ahányról","ahánnyá","amennyi","amennyit","amennyinek","amennyivel","amennyiért","amennyiben","amennyibe","amennyibÅ‘l","amennyinél","amennyihez","amennyitÅ‘l","amennyin","amennyire","amennyirÅ‘l","amennyivé","ahányadik","ahányadikat","ahányadiknak","ahányadika","ahányadikért","ahányadikban","ahányadikba","ahányadikból","ahányadiknál","ahányadikhoz","ahányadiktól","ahányadikon","ahányadikra","ahányadikról","ahányadikká","ahová","ahonnan","ahonnantól","amerre","amerrÅ‘l","ahogy","ahogyan","amiért","amikor","amikortól","amikorra","akik","akiket","akiké","akiknek","akikkel","akikért","akikben","akikbe","akikból","akiknél","akikhez","akiktÅ‘l","akiken","akikre","akikrÅ‘l","akikké","amik","amiket","amiké","amiknek","amikkel","amikért","amikben","amikbe","amikból","amiknél","amikhez","amiktÅ‘l","amiken","amikre","amikrÅ‘l","amikké","amilyenek","amilyeneket","amilyeneknek","amilyenekkel","amilyenekért","amilyenekben","amilyenekbe","amilyenekbÅ‘l","amilyeneknél","amilyenekhez","amilyenektÅ‘l","amilyeneken","amilyenekre","amilyenekrÅ‘l","amekkorák","amekkorákat","amekkoráknak","amekkorákkal","amekkorákért","amekkorákban","amekkorákba","amekkorákból","amekkoráknál","amekkorákhoz","amekkoráktól","amekkorákon","amekkorákra","amekkorákról","amekkorákká","amelyek","amelyeket","amelyeknek","amelyekkel","amelyekért","amelyekben","amelyekbe","amelyekbÅ‘l","amelyeknél","amelyekhez","amelyektÅ‘l","amelyeken","amelyekre","amelyekrÅ‘l","ahányak","ahányakat","ahányaknak","ahányakkal","ahányakért","ahányakban","ahányakba","ahányakból","ahányaknál","ahányakhoz","ahányaktól","ahányakon","ahányakra","ahányakról","ahányakká","amennyik","amennyiket","amennyiknek","amennyikkel","amennyikért","amennyikben","amennyikbe","amennyikbÅ‘l","amennyiknél","amennyikhez","amennyiktÅ‘l","amennyiken","amennyikre","amennyikrÅ‘l","amennyikké","ahányadikak","ahányadikat","ahányadiknak","ahányadikkal","ahányadikért","ahányadikban","ahányadikba","ahányadikból","ahányadiknál","ahányadikhoz","ahányadiktól","ahányadikon","ahányadikra","ahányadikról","ahányadikká","amikért","egymás","egymást","egymásé","egymásnak","egymással","egymásért","egymásban","egymásba","egymásból","egymásnál","egymáshoz","egymástól","egymáson","egymásra","egymásról","egymássá"],["ki","kit","kié","kinek","kivel","kiért","kiben","kibe","kibÅ‘l","kinél","kihez","kitÅ‘l","kin","kire","kirÅ‘l","kicsoda","kicsodát","kicsodának","kicsodával","kicsodáért","kicsodában","kicsodába","kicsodából","kicsodánál","kicsodához","kicsodától","kicsodán","kicsodára","kicsodáról","mi","mit","minek","mivel","miért","miben","mibe","mibÅ‘l","minél","mihez","mitÅ‘l","min","mire","mirÅ‘l","micsoda","micsodát","micsodának","micsodával","micsodáért","micsodában","micsodába","micsodából","micsodánál","micsodához","micsodától","micsodán","micsodára","micsodáról","milyen","milyet","milyennek","milyennel","milyenért","milyenben","milyenbe","milyenbÅ‘l","milyennél","milyenhez","milyentÅ‘l","milyenen","milyenre","milyenrÅ‘l","mekkora","mekkorát","mekkorának","mekkorával","mekkoráért","mekkorában","mekkorába","mekkorából","mekkoránál","mekkorához","mekkorától","mekkorán","mekkorára","mekkoráról","miféle","mifélét","mifélének","mifélével","miféléért","mifélében","mifélébe","mifélébÅ‘l","mifélénél","miféléhez","mifélétÅ‘l","mifélén","mifélére","mifélérÅ‘l","melyik","melyiket","melyiknek","melyikkel","melyikért","melyikben","melyikbe","melyikbÅ‘l","melyiknél","melyikhez","melyiktÅ‘l","melyiken","melyikre","melyikrÅ‘l","hány","hányat","hánynak","hánnyal","hányért","hányban","hányba","hányból","hánynál","hányhoz","hánytól","hányon","hányra","hányról","mennyi","mennyit","mennyinek","mennyivel","mennyiért","mennyiben","mennyibe","mennyibÅ‘l","mennyinél","mennyihez","mennyitÅ‘l","mennyin","mennyire","mennyirÅ‘l","hányadik","hányadikat","hányadiknak","hányadikkal","hányadikért","hányadikban","hányadikba","hányadikból","hányadiknál","hányadikhoz","hányadiktól","hányadikon","hányadikra","hányadikról","hol","hová","honnan","honnantól","honnanról","merre","mettÅ‘l","merrÅ‘l","meddig","meddigtÅ‘l","meddigrÅ‘l","mióta","hogyan","miként","kik","kiket","kiknek","kikkel","kikért","kikben","kikbe","kikbÅ‘l","kiknél","kikhez","kiktÅ‘l","kiken","kikre","kikrÅ‘l","kicsodák","kicsodákat","kicsodáknak","kicsodákkal","kicsodákért","kicsodákban","kicsodákba","kicsodákból","kicsodáknál","kicsodákhoz","kicsodáktól","kicsodákon","kicsodákra","kicsodáról","mik","miket","miknek","mikkel","mikért","mikben","mikbe","mikbÅ‘l","miknél","mikhez","miktÅ‘l","miken","mikre","mikrÅ‘l","micsodák","micsodákat","micsodáknak","micsodákkal","micsodákért","micsodákban","micsodákba","micsodákból","micsodáknál","micsodákhoz","micsodáktól","micsodákon","micsodákra","micsodákról","milyenek","milyeneket","milyeneknek","milyenekkel","milyenekért","milyenekben","milyenekbe","milyenekbÅ‘l","milyeneknél","milyenekhez","milyenektÅ‘l","milyeneken","milyenekre","milyenekrÅ‘l","mekkorák","mekkorákat","mekkoráknak","mekkorákkal","mekkorákért","mekkorákban","mekkorákba","mekkorákból","mekkoráknál","mekkorákhoz","mekkoráktól","mekkorákon","mekkorákra","mekkorákról","mifélék","miféléket","miféléknek","mifélékkel","mifélékért","mifélékben","mifélékbe","mifélékbÅ‘l","miféléknél","mifélékhez","miféléktÅ‘l","miféléken","mifélékre","mifélékrÅ‘l","melyikek","melyikeket","melyikeknek","melyikekkel","melyikekért","melyikekben","melyikekbe","melyikekbÅ‘l","melyikeknél","melyikekhez","melyikektÅ‘l","melyikeken","melyikekre","melyikekrÅ‘l","hányak","hányakat","hányaknak","hányakkal","hányakért","hányakban","hányakba","hányakból","hányaknál","hányakhoz","hányaktól","hányakon","hányakra","hányakról","mennyik","mennyiket","mennyiknek","mennyikkel","mennyikért","mennyikben","mennyikbe","mennyikbÅ‘l","mennyiknél","mennyikhez","mennyiktÅ‘l","mennyiken","mennyikre","mennyikrÅ‘l","hányadikak","hányadikakat","hányadikaknak","hányadikakkal","hányadikakért","hányadikakban","hányadikakba","hányadikakból","hányadikaknál","hányadikakhoz","hányadikaktól","hányadikakon","hányadikakra","hányadikakról"],["sok","kevés","elég","jónéhány","néhány","rengeteg","töredék","temérdek","tengernyi","számtalan","számos","elegendÅ‘","kevéske","egy csomó","egy rakás","egy halom"],["magam","magamat","magamé","magamnak","magammal","magamért","magamban","magamba","magamból","magamnál","magamhoz","magamtól","magamon","magamra","magamról","magammá","magad","magadat","magadé","magadnak","magaddal","magadért","magadban","magadba","magadból","magadnál","magadhoz","magadtól","magadon","magadra","magadról","magaddá","maga","magát","magáé","magának","magával","magáért","magában","magába","magából","magánál","magához","magától","magán","magára","magáról","magává","magunk","magunkat","magunké","magunknak","magunkkal","magunkért","magunkban","magunkba","magunkból","magunknál","magunkhoz","magunktól","magunkon","magunkra","magunkról","magunkká","magatok","magatokat","magatoké","magatoknak","magatokkal","magatokért","magatokban","magatokba","magatokból","magatoknál","magatokhoz","magatoktól","magatokon","magatokra","magatokról","magatokká","maguk","magukat","maguké","maguknak","magukkal","magukért","magukban","magukba","magukból","maguknál","magukhoz","maguktól","magukon","magukra","magukról","magukká"],["valaki","valakit","valakié","valakinek","valakivel","valakiért","valakiben","valakibe","valakibÅ‘l","valakinél","valakihez","valakitÅ‘l","valakin","valakire","valakirÅ‘l","valakivé","valami","valamit","valamié","valaminek","valamivel","valamiért","valamiben","valamibe","valamibÅ‘l","valaminél","valamihez","valamitÅ‘l","valamin","valamire","valamirÅ‘l","valamivé","valamilyen","valamilyet","valamilyennek","valamilyennel","valamilyenért","valamilyenben","valamilyenbe","valamilyenbÅ‘l","valamilyennél","valamilyenhez","valamilyentÅ‘l","valamilyenen","valamilyenre","valamilyenrÅ‘l","valaminÅ‘","valamelyes","valamelyest","valamekkora","valamekkorát","valamekkorának","valamekkorával","valamekkoráért","valamekkorában","valamekkorába","valamekkorából","valamekkoránál","valamekkorához","valamekkorától","valamekkorán","valamekkorára","valamekkoráról","valamekkorává","valamely","valamelyet","valamelynek","valamellyel","valamelyért","valamelyben","valamelybe","valamelybÅ‘l","valamelynél","valamelyhez","valamelytÅ‘l","valamelyen","valamelyre","valamelyrÅ‘l","valamellyé","valamelyik","valamelyiket","valemelyiknek","valamelyikkel","valamelyikért","valamelyikben","valamelyikbe","valamelyikbÅ‘l","valamelyiknél","valamelyikhez","valamelyiktÅ‘l","valamelyiken","valamelyikre","valamelyikrÅ‘l","valamelyikké","valamiféle","valamifélét","valamifélének","valamifélével","valamiféléért","valamifélében","valamifélébe","valamifélébÅ‘l","valamifélénél","valamiféléhez","valamifélétÅ‘l","valamifélén","valamifélére","valamifélérÅ‘l","valamennyi","valamennyit","valamennyié","valamennyinek","valamennyivel","valamennyiért","valamennyiben","valamennyibe","valamennyibÅ‘l","valamennyinél","valamennyihez","valamennyitÅ‘l","valamennyin","valamennyire","valamennyirÅ‘l","valamennyivé","valahány","valahányat","valahánynak","valahánnyal","valahányért","valahányban","valahányba","valahányból","valahánynál","valahányhoz","valahánytól","valahányon","valahányra","valahányról","valahánnyá","némely","némelyet","némelynek","némelynél","némelyért","némelyben","némelybe","némelybÅ‘l","némelynél","némelyhez","némelytÅ‘l","némelyen","némelyre","némelyrÅ‘l","némi","némelyik","némelyiket","némelyiknek","némelyikkel","némelyikért","némelyikben","némelyikbe","némelyikbÅ‘l","némelyiknél","némelyikhez","némelyiktÅ‘l","némelyiken","némelyikre","némelyikrÅ‘l","néminemű","néhány","néhányat","néhánynak","néhánnyal","néhányért","néhányban","néhányba","néhányból","néhánynál","néhányhoz","néhánytól","néhányon","néhányra","néhányról","valahol","valahová","valamerre","valahonnan","valamikor","valaha","valaha","valahogyan","valamiképpen","valamiért","néhol","néha","némelykor","némiképpen","némileg","mindenki","mindenféle","mindegyik","mindahány","mindenhol","mindenütt","mindenhová","mindenhonnan","mindenkor","mindenhogyan","mindenképpen","bárki","bármi","bármelyik","bármilyen","bármennyi","bárhol","bárhová","bárhonnan","bármikor","bármeddig","bárhogyan","akárki","akármi","akármelyik","akármilyen","akármennyi","akárhány","akárhol","akárhová","akárhonnan","akármikor","akárhogyan","senki","semmi","semmilyen","semennyi","sehány","sehol","sehová","sehonnan","semmikor","sehogy","semmiképp","valakik","valakiket","valakiké","valakiknek","valakikkel","valakikért","valakikben","valakikbe","valakikbÅ‘l","valakiknél","valakikhez","valakiktÅ‘l","valakiken","valakikre","valakikrÅ‘l","valakikké","valamik","valamiket","valamiké","valamiknek","valamikkel","valamikért","valamikben","valamikbe","valamikbÅ‘l","valamiknél","valamikhez","valamiktÅ‘l","valamiken","valamikre","valamikrÅ‘l","valamikké","valamilyenek","valamilyeneket","valamilyeneknek","valamilyenekkel","valamilyenekért","valamilyenekben","valamilyenekbe","valamilyenekbÅ‘l","valamilyeneknél","valamilyenekhez","valamilyenektÅ‘l","valamilyeneken","valamilyenekre","valamilyenekrÅ‘l","valamilyenekké","valaminÅ‘k","valamekkorák","valamekkorákat","valamekkoráknak","valamekkorákkal","valamekkorákért","valamekkorákban","valamekkorákba","valamekkorákból","valamekkoráknál","valamekkorákhoz","valamekkoráktól","valamekkorákon","valamekkorákra","valamekkorákról","valamelyek","valamelyeket","valamelyeknek","valamelyekkel","valamelyekért","valamelyekben","valamelyekbe","valamelyekbÅ‘l","valamelyeknél","valamelyekhez","valamelyektÅ‘l","valamelyeken","valamelyekre","valamelyekrÅ‘l","valamelyekké","valamelyikek","valamelyikeket","valamelyikeknek","valamelyikekkel","valamelyikekért","valamelyikekben","valamelyikekbe","valamelyikekbÅ‘l","valamelyikeknél","valamelyikekhez","valamelyikektÅ‘l","valamelyikeken","valamelyikekre","valamelyikekrÅ‘l","valamifélék","valamiféléket","valamiféléknek","valamifélékkel","valamifélékért","valamifélékben","valamifélékbe","valamifélékbÅ‘l","valamiféléknél","valamifélékhez","valamiféléktÅ‘l","valamiféléken","valamifélékre","valamifélékrÅ‘l","valamennyik","valamennyiket","valamennyiknek","valamennyikkel","valamennyikért","valamennyikben","valamennyikbe","valamennyikbÅ‘l","valamennyiknél","valamennyikhez","valamennyiktÅ‘l","valamennyiken","valamennyikre","valamennyikrÅ‘l","valahányak","valahányakat","valahányaknak","valahányakkal","valahányakért","valahányakban","valahányakba","valahányakból","valahányaknál","valahányakhoz","valahányaktól","valahányakon","valahányakra","valahányakról","némelyek","némelyeket","némelyeknek","némelyekkel","némelyekért","némelyekben","némelyekbe","némelyekbÅ‘l","némelyeknél","némelyekhez","némelyektÅ‘l","némelyeken","némelyekre","némelyekrÅ‘l","némelyikek","némelyikeket","némelyikeknek","némelyikekkel","némelyikekért","némelyikekben","némelyikekbe","némelyikekbÅ‘l","némelyikeknél","némelyikekhez","némelyikektÅ‘l","némelyikeken","némelyikekre","némelyikekrÅ‘l","néhányak","néhányakat","néhányaknak","néhányakkal","néhányakért","néhányakban","néhányakba","néhányakból","néhányaknál","néhányakhoz","néhányaktól","néhányakon","néhányakra","néhányakról"],["elÅ‘tt","elé","elÅ‘l","alatt","alá","alól","túl","alatt","belül","elÅ‘tt","fogva","hosszat","múlva","óta","tájt","ellen","helyett","iránt","miatt","nélkül","részére","számára","végett","között"],["és","s","se","sem","vagy","is","de"],["mond","bejelent","megerÅ‘sít","kijelent","javasol","említ","tájékoztat","értesít","kérdez","beszél","megkérdez","állít","elmagyaráz","magyaráz","gondol","hisz","megtárgyal","tárgyal","vitat","megvitat","ért","megért","elmond","elmesél","tud","megtud","megbeszél","megmond","megmagyaráz"],["alig","kissé","különösen","nagyon","teljesen","túl","túlságosan","kevésbé","nagyrészt","kicsit","picit","szörnyen","borzasztóan","iszonyatosan","irtó","irtózatosan","komolyan","súlyosan","könnyedén","nehezen"],["fog","volna","akar","bír","kell","kíván","látszik","lehet","tud","szabad","tetszik","méltóztatik","szokott"],["nagy","kicsi","gyors","lassú","jó","rossz","drága","olcsó","vastag","vékony","keskeny","széles","puha","hangos","halk","intelligens","buta","nedves","száraz","nehéz","könnyű","kemény","lágy","sekély","mély","gyönge","erÅ‘s","gazdag","szegény","fiatal","öreg","hosszú","rövid","magas","alacsony","bÅ‘kezű","fukar","igaz","hamis","gyönyörű","csúnya","új","régi","boldog","szomorú","idÅ‘s","gyenge","biztonságos","veszélyes","korán","késÅ‘n","világos","sötét","nyitva","zárva","szoros","laza","teli","üres","sok","kevés","élÅ‘","halott","meleg","hideg","érdekes","unalmas","szerencsés","szerencsétlen","fontos","lényegtelen","messze","közel","tiszta","piszkos","kedves","gonosz","kellemes","kellemetlen","kiváló","borzalmas","normális","szép","nagyon","kicsit","gyorsan","lassan","jól","rosszul","drágán","olcsón","hangosan","halkan","nehezen","könnyen","gyengén","erÅ‘sen","gazdagon","fiatalon","öreg","hosszan","röviden","magasan","alacsonyan","bÅ‘kezűen","gyönyörűen","csúnyán","boldogan","szomorúan","gyengéden","biztonságosan","veszélyesen","világosan","szorosan","lazán","sokan","kevesen","élve","melegen","hidegen","érdekesen","unalmasan","szerencsésen","szerencsétlenül","tisztán","piszkosan","kedvesen","gonoszan","kellemesen","kellemetlenül","kiválóan","borzalmasan","normálisan","szépen"],["ó","óh","jaj","a kutyafáját","a fenébe","a csudába","a francba","atyaég","atyavilág","azta","aztamindenit","juj","juhú","éljen","jé","hű","hú","ajjaj","pszt","csitt","hess","hé","ej","ejnye","na","nicsak","nocsak","natessék","nahát","rajta","hajrá","juhú","teringettét","nosza","uccu","csitt","kuss","dirr","durr"],["liter","l","deciliter","dl","milliliter","gramm","g","dekagramm","dkg","kilogramm","kg","milligramm","mg","tucat","centiliter","cl","méter","m","deciméter","dm","centiméter","cm","milliméter","mm","evÅ‘kanál","ek.","mokkáskanál","mk.","kávéskanál","kk.","gyermekkanál","gyk.","kávéscsésze","kcs.","teáscsésze","tcs.","csésze","csé.","bögre","bgr.","mélytányér","ujjnyi","csomag","gerezd","csokor"],["másodperc","perc","óra","nap","hét","hónap","év","évtized","évszázad","évezred","ma","holnap","tegnap","jövÅ‘ héten","jövÅ‘ hónapban","jövÅ‘ évben","múlt héten","múlt hónapban","múlt évben","tavaly","jövÅ‘re","reggel","délben","este","éjszaka","hajnalban","délután","délelÅ‘tt"],["dolog","izé","valami","személy","ember","alkalom","eset","ügy","tárgy","valamicsoda","téma","ötlet"],["stb.","fél","harmad","negyed","ötöd","hatod","heted","nyolcad","kilenced","tized","egyharmad","egynegyed","egyötöd","egyhatod","egyheted","egynyolcad","egykilenced","egytized","század","ezred"],l)),r=[["nemcsak","hanem","is"],["ahogy","akkor"],["ahogy","azonnal"],["ahogy","azután"],["ahogy","máris"],["ahogy","nyomban"],["ahogy","tüstént"],["akkor","amikor"],["akkor","ha"],["akkor","hogy"],["akkor","hogyha"],["akkor","mikor"],["akkorra","amikorra"],["akkorra","mikorra"],["akkorra","mire"],["akkortól","amikor"],["akkortól","mikor"],["alighogy","máris"],["alighogy","nyomban"],["alighogy","tüstént"],["addig","ameddig"],["ameddig","addig"],["abba","hogy"],["abban","hogy"],["abból","hogy"],["addig","amíg"],["addig","hogy"],["addig","míg"],["afelé","hogy"],["ahelyett","hogy"],["ahhoz","hogy"],["akként","hogy"],["akkorra","hogy"],["amiatt","hogy"],["amellett","hogy"],["anélkül","hogy"],["annyi","hogy"],["annyi","mint"],["annyira","hogy"],["annyira","mint"],["arra","hogy"],["arról","hogy"],["attól fogva","hogy"],["attól","hogy"],["avégett","hogy"],["avégre","hogy"],["az ellen","hogy"],["az iránt","hogy"],["azelÅ‘tt","hogy"],["azért","hogy"],["azon","hogy"],["azonkívül","hogy"],["azóta","hogy"],["azután","hogy"],["azzal","hogy"],["hol","hol"],["igaz","hogy"],["mind","mind"],["nem úgy","mint"],["oly módon","hogy"],["inkább","semhogy"],["úgy","hogy"],["úgy","mint"],["vagy","vagy"],["se","se"],["sem","sem"],["is","is"],["akár","akár"],["is","meg"],["nem","hanem"],["egyrészt","másrészt"],["minél","annál"],["amíg","addig"],["amíg","addigra"],["amikor","akkor"],["akkor","amikor"],["amikor","aközben"],["amikor","azalatt"],["addigra","amikorra"],["amikorra","addigra"],["amikorra","akkorra"],["amint","akkor"],["amint","azonnal"],["amint","máris"],["amint","nyomban"],["amint","tüstént"],["amióta","attól kezdve"],["azóta","amióta"],["amióta","azóta"],["amire","addig"],["amire","addigra"],["azóta","hogy"],["ha","akkor"],["hogyha","akkor"],["is","is"],["azalatt","mialatt"],["mialatt","azalatt"],["mielÅ‘tt","azelÅ‘tt"],["azelÅ‘tt","mielÅ‘tt"],["mihelyt","azonnal"],["mihelyt","máris"],["mihelyt","nyomban"],["mihelyt","tüstént"],["mikor","akkor"],["mikor","aközben"],["mikor","azalatt"],["mikor","azután"],["mikorra","addigra"],["akkorra","mikorra"],["mikorra","akkorra"],["miközben","azalatt"],["mióta","attól kezdve"],["mire","addigra"],["miután","azután"],["attól kezdve","mióta"],["mióta","azóta"],["azóta","mióta"],["mire","addig"],["addigra","mire"],["azután","miután"],["nemcsak","hanem"],["sem","sem"],["vagy","vagy"]],i=["az","a","egy","nulla","egy","kettÅ‘","kettÅ‘","három","négy","öt","hat","hét","nyolc","kilenc","tíz","száz","ezer","és","se","sem","vagy","de","aztán","ezután","azután","majd","ezek után","nagyon","kicsit","nagy","kevés","sok","sokan","kevesen","jól","ez","ezek","az","azok","néhány","aki","ami","én","mi","Å‘","Å‘k","engem","nekem","velem","nálam","hozzám","tÅ‘lem","rajtam","rám","rólam","téged","neked","veled","érted","nálad","hozzád","tÅ‘led","rólad","Å‘t","neki","vele","érte","nála","hozzá","tÅ‘le","rajta","rá","róla","minket","nekünk","velünk","értünk","nálunk","hozzánk","tÅ‘lünk","rólunk","titeket","nektek","veletek","értetek","nálatok","hozzátok","tÅ‘letek","rajtatok","rátok","rólatok","Å‘ket","nekik","velük","értük","bennük","náluk","hozzájuk","tÅ‘lük","rajtuk","rájuk","róluk","azonban","ám","ha","szerintem","míg","bár","habár","hát","ha","amennyiben","mivel","azonban","amíg","azért","ezért","mi","mit","miért","meddig","mikor","hány","mennyi","ki","kit","merre","hogy","hogyan","miként","hol","honnan","hová","mivel","milyen","ó","óh","jaj","kék","zöld","fekete","sárga","piros","szürke","ne","nem","hát","nos"],m=["a","ahogy","ahol","aki","akik","akkor","alatt","által","általában","amely","amelyek","amelyekben","amelyeket","amelyet","amelynek","ami","amit","amolyan","amíg","amikor","át","abban","ahhoz","annak","arra","arról","az","azok","azon","azt","azzal","azért","aztán","azután","azonban","bár","be","belül","benne","cikk","cikkek","cikkeket","csak","de","e","eddig","egész","egy","egyes","egyetlen","egyéb","egyik","egyre","ekkor","el","elég","ellen","elé","elÅ‘ször","elÅ‘tt","elsÅ‘","én","éppen","ebben","ehhez","emilyen","ennek","erre","ez","ezt","ezek","ezen","ezzel","ezért","és","fel","felé","hanem","hiszen","hogy","hogyan","igen","így","illetve","ill.","ill","ilyen","ilyenkor","ismét","itt","jó","jól","jobban","kell","kellett","keresztül","keressünk","ki","kívül","között","közül","legalább","lehet","lehetett","legyen","lenne","lenni","lesz","lett","maga","magát","majd","majd","már","más","másik","meg","még","mellett","mert","mely","melyek","mi","mit","míg","miért","milyen","mikor","minden","mindent","mindenki","mindig","mint","mintha","mivel","most","nagy","nagyobb","nagyon","ne","néha","nekem","neki","nem","néhány","nélkül","nincs","olyan","ott","össze","Å‘","Å‘k","Å‘ket","pedig","persze","rá","s","saját","sem","semmi","sok","sokat","sokkal","számára","szemben","szerint","szinte","talán","tehát","teljes","tovább","továbbá","több","úgy","ugyanis","új","újabb","újra","után","utána","utolsó","vagy","vagyis","valaki","valami","valamint","való","vissza","viszont"],y=window.lodash,s=function(e,a){const n=function(e,a){const n=e.externalStemmer.vowels,l=new RegExp(n);return a.search(l)}(e,a);if(0===n){const n=function(e,a){const n=new RegExp(e.externalStemmer.digraphs),l=new RegExp(e.externalStemmer.consonants),k=a.search(n),t=a.search(l);return k===t?k+1:t}(e,a);return n+1}return n+1},{baseStemmer:o}=n.languageProcessing;function g(e){const a=(0,y.get)(e.getData("morphology"),"hu",!1);return a?e=>function(e,a){const n=function(e,a){if(e.length<3)return e;const n=s(a,e);if(e.search(new RegExp(a.externalStemmer.suffixes1))>=n){let n=e.slice(0,-2);const l=new RegExp(a.externalStemmer.doubleConsonants);-1!==n.search(l)&&(n=n.slice(0,-1));const k=new RegExp(a.externalStemmer.tripleDoubleConsonants);if(-1!==n.search(k)&&(n=n.slice(0,-2)+n.charAt(n.length-1)),n.length!==e.slice(0,-2).length)return n}return e}(e,a),l=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));if(k>=l){const a=e.substring(0,k);return a.endsWith("á")?a.replace(/á$/i,"a"):a.endsWith("é")?a.replace(/é$/i,"e"):a}return e}(n,a.externalStemmer.suffixes2,a),k=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));return k>=l?e.substring(0,k)+"a":e}(l,a.externalStemmer.suffixes3,a),t=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));return k>=l?e.substring(0,k):e}(k,a.externalStemmer.suffixes4,a),r=function(e,a,n){if(e.length<3)return e;const l=s(n,e);if(e.search(new RegExp(a))>=l){let a=e.slice(0,-1);const l=new RegExp(n.externalStemmer.doubleConsonants);return-1!==a.search(l)&&(a=a.slice(0,-1)),a}return e}(t,a.externalStemmer.suffixes5,a),i=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));return k>=l?e.substring(0,k):e}(r,a.externalStemmer.suffixes6,a),m=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));return k>=l?e.substring(0,k):e}(i,a.externalStemmer.suffixes7,a),y=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));return k>=l?e.substring(0,k):e}(m,a.externalStemmer.suffixes8,a),o=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a.suffixes9a));if(k>=l)return e.substring(0,k)+"a";const t=e.search(new RegExp(a.suffixes9b));return t>=l?e.substring(0,t)+"e":e}(y,a.externalStemmer.suffixes9,a),g=function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));return k>=l?e.substring(0,k)+"a":e}(o,a.externalStemmer.suffixes10,a),z=function(e,a,n){if(e.length<3)return e;const l=s(n,e);return e.search(new RegExp(a.suffixes11a))>=l?e.slice(0,-2)+"a":e.search(new RegExp(a.suffixes11b))>=l?e.slice(0,-2)+"e":e}(g,a.externalStemmer.suffixes11,a);return function(e,a,n){if(e.length<3)return e;const l=s(n,e),k=e.search(new RegExp(a));return k>=l?e.substring(0,k):e}(z,a.externalStemmer.suffixes12,a)}(e,a):o}const z=["megvételre","megrendezésre","képzésre","kifejezésre","következtetésre","fejlesztésre","bevezetésre","kezelésre","ellenÅ‘rzésre","elhelyezésre","értékesítésre","cselekvésre","beépítésre","intézkedésre","kifizetésre","működésre","értékelésre","egyeztetésre","rögzítésre","megjelenésre","meghirdetésre","fizetésre","megbeszélésre","bejelentésre","bekezdésre","közreműködésre","teljesítésre","elküldésre","kivitelezésre","kihirdetésre","korszerűsítésre","elÅ‘terjesztésre","üzemeltetésre","szerzÅ‘déskötésre","visszafizetésre","befektetésre","minÅ‘sítésre","telepítésre","megfigyelésre","berendezésre","megerÅ‘sítésre","megtekintésre","feltüntetésre","megkülönböztetésre","befizetésre","megszüntetésre","kinevezésre","elÅ‘készítésre","felmentésre","megszervezésre","gyógykezelésre","mérlegelésre","végkielégítésre","engedélyezésre","kihelyezésre","megsemmisítésre","elÅ‘relépésre","tenyésztésre","elnevezésre","befejezésre","ismétlésre","egyesülésre","közvetítésre","lekérdezésre","szervezésre","csökkentésre","területfejlesztésre","költségtérítésre","felfüggesztésre","frissítésre","vámfizetésre","kifejlesztésre","elhelyezkedésre","teremtésre","megjelölésre","töltésre","kiegyenlítésre","kifejtésre","megépítésre","átszervezésre","termesztésre","felemelkedésre","átépítésre","áremelésre","áthelyezésre","újjáépítésre","megbecsülésre","átültetésre","visszaigénylésre","feljegyzésre","törlesztésre","helyettesítésre","követelésre","érvelésre","elkülönítésre","átképzésre","kiértékelésre","térítésre","továbbfejlesztésre","ösztönzésre","szerkesztésre","megítélésre","letöltésre","selejtezésre","segélyezésre","érintkezésre","emelkedésre","megküldésre","erÅ‘sítésre","felderítésre","védésre","elbeszélgetésre","megemlítésre","felépítésre","megfejtésre","mentesítésre","elÅ‘fizetésre","megtervezésre","szakképesítésre","hitelesítésre","megnevezésre","érvényesítésre","számonkérésre","terjeszkedésre","beterjesztésre","összevetésre","jogsértésre","véglegesítésre","kiküldetésre","megörökítésre","kivégzésre","költözésre","megtérülésre","kézbesítésre","közmegegyezésre","idézésre","kirekesztésre","visszaesésre","beszerelésre","beültetésre","kiterjesztésre","kifüggesztésre","leépítésre","megismerkedésre","végzésre","részletfizetésre","megfizetésre","kiürítésre","ízesítésre","méregtelenítésre","rendszerezésre","felterjesztésre","szemléltetésre","megtermékenyítésre","lekötésre","kiegyezésre","elÅ‘rejelzésre","ellenvetésre","növelésre","képesítésre","beszedésre","ellenjegyzésre","áttelepítésre","egységesítésre","akadálymentesítésre","elÅ‘törlesztésre","azonosításra","aktiválásra","hasznosításra","foglalkoztatásra","finanszírozásra","megfinanszírozásra","benyújtásra","pontosításra","forgalmazásra","beszállításra","felzárkózásra","továbbításra","differenciálásra","folyósításra","kiszállításra","átcsoportosításra","kártalanításra","továbbgondolásra","felzárkóztatásra","megválaszolásra","átállásra","számlázásra","fotózásra","megvásárlásra","felszámításra","kiszámlázásra","lehívásra","leszámlázásra","továbbjutásra","szaporításra","raktározásra","kinyomtatásra","reklámozásra","újrahasznosításra","archiválásra","elÅ‘vásárlásra","visszautalásra","létrehozásra","tanúsításra","ártalmatlanításra","adományozásra","kisorsolásra","utalványozásra","átgondolásra","azonosulásra","postázásra","televíziózásra","átsorolásra","finomításra","privatizálásra","dokumentálásra","beiskolázásra","digitalizálásra","újragondolásra","aktualizálásra","delegálásra","pályáztatásra","voksolásra","felhordásra","moderálásra","áthaladásra","gyámolításra","lajstromozásra","sokszorosításra","elsajátításra","szigorításra","klónozásra","elhatárolódásra","elbontásra","kiaknázásra","befolyásolásra","renoválásra","kivárásra","feliratozásra","akkreditálásra","parkosításra","szakosodásra","legyártásra","továbbgondolkodásra","magánosításra","összehangolásra","megvilágosodásra","titkosításra","integrálásra","visszaadásra","rangsorolásra","kilábalásra","szponzorálásra","szankcionálásra","modernizálásra","leltározásra","koordinálásra","apostolkodásra","definiálásra","komposztálásra","elvándorlásra","átváltásra","kódolásra","naplózásra","adagolásra","megtámadásra","exportálásra","betáplálásra","kompenzálásra","kapaszkodásra","áthallgatásra","dedikálásra","beindításra","kimunkálásra","hamisításra","megigazulásra","újratárgyalásra","visszaszállításra","megalapításra","szabványosításra","tartósításra","meditálásra","palackozásra","bírságolásra","listázásra","liberalizálásra","iskoláztatásra","auditálásra","monitorozásra","visszapótlásra","sugalmazásra","kipostázásra","elÅ‘rejutásra","gyarapításra","visszaosztásra","konzerválásra","adóztatásra","decentralizálásra","diagnosztizálásra","harmonizálásra","konszolidálásra","átszállításra","realizálásra","beazonosításra","szelektálásra","újraszabályozásra","kihúzásra","optimalizálásra","bevizsgálásra","kiválogatásra","leosztásra","szállítmányozásra","torzításra","visszaigazolásra","visszaszolgáltatásra","rehabilitálásra","továbbtartásra","darabolásra","felhasználásra","bemutatásra","ellátásra","felújításra","kialakításra","átadásra","kiállításra","feldolgozásra","módosításra","változásra","kiosztásra","beavatkozásra","megvalósításra","megállapodásra","jóváhagyásra","szabályozásra","változtatásra","elszámolásra","felhívásra","meghallgatásra","elbírálásra","végrehajtásra","lemondásra","elhatározásra","kiírásra","megfogalmazásra","népszavazásra","kiválasztásra","hozzájárulásra","bemutatkozásra","felszólalásra","elutasításra","megvitatásra","levonásra","átutalásra","kizárásra","előállításra","bizonyításra","kárpótlásra","nyomtatásra","felállításra","beszámításra","pótlásra","publikálásra","megbízásra","felbontásra","megválasztásra","kibocsátásra","kivizsgálásra","lebontásra","feltárásra","felosztásra","visszavonásra","elosztásra","felvásárlásra","megbocsátásra","szétosztásra","megújításra","megnyitásra","korlátozásra","bérbeadásra","eltiltásra","elbocsátásra","meghosszabbításra","bebocsátásra","levágásra","restaurálásra","felajánlásra","kivágásra","kormányalakításra","megmunkálásra","osztályozásra","sorozatgyártásra","betakarításra","leszámolásra"],{getWords:v}=n.languageProcessing,h=["éva","szava","moszkva","alternatíva","normatíva","java","jelszava","direktíva","perspektíva","dráva","lova","kurva","szilva","páva","kollektíva","lárva","szarva","tava","láva","díva","ponyva","hava","offenzíva","elÅ‘szava","borotva","színe-java","hamva","káva","legjava","mályva","murva","olíva","híre-hamva","pelyva","címszava","dudva","sava","csóva","golyva","árva","fénycsóva","utószava","antikva","közjava","aktíva","hadiárva","morotva","gyomorsava","villanyborotva","alapszava","szerva","odva","naiva","szupernova","félárva","harangszava","szlalomozva","halastava","vezényszava","falova","defenzíva","lángcsóva","varázsszava","végszava","hadova","dzsuva","pányva","sátorponyva","parancsszava","vezérszava","falva","durva","gyáva","tétova","zagyva","mogorva","morva","híva","báva","hova","fordítva","ahova","felváltva","valahova","kurva","sehova","kisvártatva","játszva","hivatva","mindenhova","tova","bárhova","lopva","idestova","elragadtatva","lélekszakadva","fejcsóválva","akárhova","fogcsikorgatva","tárva-nyitva","hagyatva","szájtátva","készakarva","karonfogva","szívdobogva","lélegzet-visszafojtva","szívszorongva","orozva","fogvacogva","szívszakadva","fogvicsorítva","bélapátfalva","albertfalva","éve","neve","könyve","szíve","teve","elve","műve","kedve","terve","nyelve","szerve","medve","híve","alapelve","törvénykönyve","életműve","irányelve","kézikönyve","felhasználóneve","jegyzÅ‘könyve","diáknyelve","leve","ismérve","tanterve","hírneve","objektíve","íve","emlékműve","anyanyelve","beceneve","forgatókönyve","féléve","orgonaműve","tankönyve","alapköve","jókedve","évkönyve","járműve","köve","keresztneve","ráckeve","munkaterve","vezetékneve","remekműve","túrkeve","töve","öve","futóműve","heve","sarokköve","életéve","vendégkönyve","negyedéve","jegesmedve","csöve","szócsöve","keve","üdve","nedve","gyűjtÅ‘neve","fedÅ‘neve","mérföldköve","kéve","ütemterve","próbaköve","gépjárműve","domborműve","ékköve","rokonszenve","érzékszerve","kollektíve","életkedve","örve","sérve","verseskönyve","füve","építÅ‘köve","ellenszenve","álneve","tanulmányterve","szakácskönyve","erÅ‘műve","sarkköve","barnamedve","hajtóműve","mesterműve","színműve","törzskönyve","utóneve","családneve","formanyelve","távcsöve","tanéve","mosómedve","talpköve","szövegkönyve","sírköve","keserve","boltíve","márkaneve","munkakedve","kérdőíve","rosszkedve","emlékkönyve","gúnyneve","szakkönyve","pályaműve","olvasókönyve","elÅ‘neve","csúcsszerve","személyneve","atomerÅ‘műve","útikönyve","cséve","telefonkönyve","képeskönyve","szabálykönyve","nyakörve","cseppköve","látószerve","mozgásszerve","daloskönyve","halászleve","heresérve","jogelve","köldöksérve","utcaneve","eleve","közvetve","elvétve","relatíve","karöltve","együttvéve","vállvetve"],{values:d}=n.languageProcessing,{Clause:b}=d,u=["kerülök","kerülsz","kerül","kerülünk","kerültök","kerülnek","kerüljek","kerülj","kerüljön","kerüljünk","kerüljetek","kerüljenek","kerülnék","kerülnél","kerülne","kerülnénk","kerülnétek","kerülnének","kerültem","kerültél","került","kerültünk","kerültetek","kerültek","kerültem volna","kerültél volna","került volna","kerültünk volna","kerültetek vola","kerültek volna","fogok kerülni","fogsz kerülni","fog kerülni","fogunk kerülni","fogtok kerülni","fognak kerülni"],c=["vagyok","vagy","van","vagyunk","vagytok","vannak","legyek","legyél","legyen","legyünk","legyetek","legyenek","lennék","lennél","lenne","lennénk","lennétek","lennének","leszek","leszel","lesz","leszünk","lesztek","lesznek","voltam","voltál","volt","voltunk","voltatok","voltak","lettem volna","lettél volna","lett volna","lettünk volna","lettetek volna","lettek volna"],f=["fogok","fogsz","fog","fogunk","fogtok","fognak"],p={auxiliaries1:u,auxiliaries2:c,auxiliaries3:f,allAuxiliaries:[].concat(u,c,f)},{getClausesSplitOnStopWords:j,createRegexFromArray:x}=n.languageProcessing,w={Clause:class extends b{constructor(e,a){super(e,a),this._participles=function(e){const a=v(e),n=new RegExp("(ve|va|ódni|Å‘dni)$");return a.filter((e=>n.test(e)||z.includes(e)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const e=this.getParticiples().filter((e=>!h.includes(e)));this.setPassive(e.length>0)}},regexes:{auxiliaryRegex:x(p.allAuxiliaries),stopwordRegex:x(m)}};function S(e){return j(e,w)}const R=["ábrázol","ad","adományoz","ajándékoz","akadályoz","alakít","alapít","álcáz","áldoz","alkalmaz","alkot","állít","arat","ás","automatizál","azonosít","befolyásol","bírál","bizonyít","bocsát","bont","bonyolít","csatol","definiál","deklarál","digitalizál","dob","dokumentál","dolgoz","finanszíroz","fogalmaz","foglal","foglalkoztat","fogyaszt","fojt","fokoz","fontol","fordít","forgalmaz","garantál","gyakorl","gyárt","gyógyít","hagy","hajt","hálál","hallgat","hamisít","hárít","használ","határoz","hidal","hoz","igazít","igazol","illusztrál","importál","indít","ír","irányít","istáz","javasol","javít","jutalmaz","kattint","kínál","kombinál","kompenzál","komponál","kritizál","kutat","lapoz","listáz","locsol","magyaráz","másol","moderál","mond","motivál","mozgósít","mulaszt","mutat","nyomtat","nyújt","olvas","oszt","parancsol","postáz","pótl","próbál","produkál","ragaszt","rak","ráz","regisztrál","reklámoz","rombol","ront","ruház","sajátít","sorol","strukturál","sugárz","szabályoz","szakít","szállít","számít","számláz","számol","szavaz","szimbolizál","szólít","szorít","talál","támogat","tanít","tárol","tart","taszít","távolít","tilt","tisztít","továbbít","tudósít","tulajdonít","újít","utal","utasít","válaszol","választ","válogat","vált","változtat","varázsol","világít","világosít","vitat","vizsgál","von"],E=["beszél","böngész","bÅ‘vít","címz","cserél","derít","díszít","dönt","egészít","egyeztet","egyszerűsít","elégít","emel","említ","engedélyez","enyhít","épít","érint","erÅ‘sít","ért","értékel","értelmez","érzékeltet","ev","fedez","fejleszt","fejt","fektet","felejt","feltev","figyel","fizet","gyÅ‘z","gyűjt","hegeszt","helyettesít","helyez","hirdet","idéz","igényl","illeszt","intéz","ismer","ítél","ízesít","jegyz","jelenít","jelent","jelentkez","jelöl","kényszerít","képvisel","kérdez","kerekít","keresztel","készít","késztet","kezel","kivitelez","kölcsönz","köt","követ","közl","közvetít","küld","különít","küszöböl","melegít","mellékl","mér","nevez","néz","nyel","nyer","örökít","Å‘rz","összegz","összesít","rendel","rendez","rögzít","semmisít","sürget","szed","szeg","szennyez","szerel","szerkeszt","szervez","szigetel","színez","tekint","telepít","teljesít","tenyészt","teremt","térít","terjeszt","tervez","testesít","tesztel","tev","tölt","tömörít","törl","üldöz","ültet","végz","veszélyeztet","vet","vetít","vev","vezet"],P={odikVerbStems1:R,odikVerbStems2:E,all:R.concat(E)},W=["ódom","ódsz","ódik","ódunk","ódtok","ódnak","ódtam","ódtál","ódott","ódtunk","ódtatok","ódtak","ódjak","ódj","ódjon","ódjunk","ódjatok","ódjanak","ódnék","ódnál","ódna","ódnánk","ódnátok","ódnának"],C=["Å‘döm","Å‘dsz","Å‘dik","Å‘dünk","Å‘dtök","Å‘dnek","Å‘dtem","Å‘dtél","Å‘dött","Å‘dtünk","Å‘dtetek","Å‘dtek","Å‘djek","Å‘dj","Å‘djön","Å‘djünk","Å‘djetek","Å‘djenek","Å‘dnék","Å‘dnél","Å‘dne","dnénk","Å‘dnétek","Å‘dnének"],O=["abba","agyon","alul","alá","alább","által","át","be","bele","belé","benn","egybe","együtt","el","ellen","elÅ‘","elÅ‘re","észre","fel","föl","félbe","félre","felül","fölül","fenn","fönn","hátra","haza","helyre","hozzá","ide","jóvá","keresztül","ketté","ki","kölcsön","körül","körbe","közbe","közre","közzé","külön","le","létre","meg","mellé","neki","oda","össze","rá","rajta","széjjel","szembe","szerte","szét","tele","teli","tova","tovább","tönkre","utol","túl","újjá","újra","utána","végbe","végig","vissza"],{getWords:A}=n.languageProcessing,T=function(e,a,n,l){return a.some((a=>l.some((function(l){const k=a+l;if(e.endsWith(k)){const a=e.slice(0,e.indexOf(k));return""===a||n.includes(a)}}))))};function V(e){const a=A(e),n=P.odikVerbStems1,l=P.odikVerbStems2;return a.some((e=>T(e,n,O,W)||T(e,l,O,C)))}const{AbstractResearcher:$}=n.languageProcessing;class _ extends ${constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"hu",passiveConstructionType:"morphologicalAndPeriphrastic",functionWords:t,transitionWords:k,twoPartTransitionWords:r,firstWordExceptions:i,stopWords:m}),Object.assign(this.helpers,{getStemmer:g,getClauses:S,isPassiveSentence:V})}}(window.yoast=window.yoast||{}).Researcher=a})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/id.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/id.js new file mode 100644 index 00000000..0b4235f6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/id.js @@ -0,0 +1 @@ +(()=>{"use strict";var a={d:(i,e)=>{for(var n in e)a.o(e,n)&&!a.o(i,n)&&Object.defineProperty(i,n,{enumerable:!0,get:e[n]})},o:(a,i)=>Object.prototype.hasOwnProperty.call(a,i),r:a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})}},i={};a.r(i),a.d(i,{default:()=>pa});const e=window.yoast.analysis,n=["sebuah","seorang","sang","si","satu","dua","tiga","empat","lima","enam","tujuh","delapan","sembilan","sepuluh","sebelas","seratus","seribu","sejuta","semiliar","setriliun","ini","itu","hal","ia"],s=["adakalanya","agak","agar","akhirnya","alhasil","andaikan","bahkan","bahwasannya","berikut","betapapun","biarpun","biasanya","contohnya","dahulunya","diantaranya","dikarenakan","disebabkan","dulunya","faktanya","hasilnya","intinya","jadi","jua","juga","kadang-kadang","kapanpun","karena","karenanya","kedua","kelak","kemudian","kesimpulannya","khususnya","langsung","lantaran","maka","makanya","masih","memang","meski","meskipun","misalnya","mulanya","nantinya","nyatanya","pendeknya","pertama","ringkasnya","rupanya","seakan-akan","sebaliknya","sebelum","sebetulnya","sedangkan","segera","sehingga","sekali-sekali","sekalipun","sekiranya","selagi","selain","selama","selanjutnya","semasa","semasih","semenjak","sementara","semula","sepanjang","serasa","seraya","seringkali","sesungguhnya","setelahnya","seterusnya","setidak-tidaknya","setidaknya","sewaktu-waktu","sewaktu","tadinya","tentunya","terakhir","terdahulu","terlebih","ternyata","terpenting","terutama","terutamanya","tetapi","umpamanya","umumnya","utamanya","walau","walaupun","yaitu","yakni","akibatnya","hingga","kadang","kendatipun","ketiga","lainnya","manakala","namun","pastinya","pertama-tama","sampai-sampai","sebaliknya","sebelumnya","sebetulnya","sesekali"],t=s.concat(["agar supaya","akan tetapi","apa lagi","asal saja","bagaimanapun juga","bahkan jika","bahkan lebih","begitu juga","berbeda dari","biarpun begitu","biarpun demikian","bilamana saja","cepat atau lambat","dalam hal ini","dalam jangka panjang","dalam kasus ini","dalam kasus lain","dalam kedua kasus","dalam kenyataannya","dalam pandangan","dalam situasi ini","dalam situasi seperti itu","dan lagi","dari awal","dari pada","dari waktu ke waktu","demikian juga","demikian pula","dengan serentak","dengan cara yang sama","dengan jelas","dengan kata lain","dengan ketentuan","dengan nyata","dengan panjang lebar","dengan pemikiran ini","dengan syarat bahwa","dengan terang","di pihak lain","di sisi lain","dibandingkan dengan","disebabkan oleh","ditambah dengan","hanya jika","harus diingat","hasil dari","hingga kini","kalau tidak","kalau-kalau","kali ini","kapan saja","karena alasan itulah","karena alasan tersebut","kecuali kalau","kendatipun begitu","kendatipun demikian","lebih jauh","lebih lanjut","maka dari itu","meskipun demikian","oleh karena itu","oleh karenanya","oleh sebab itu","pada akhirnya","pada awalnya","pada dasarnya","pada intinya","pada kenyataannya","pada kesempatan ini","pada mulanya","pada saat ini","pada saat","pada situasi ini","pada umumnya","pada waktu yang sama","pada waktunya","paling tidak","pendek kata","penting untuk disadari","poin penting lainnya","saat ini","sama halnya","sama pentingnya","sama sekali","sampai sekarang","sebab itu","sebagai akibatnya","sebagai contoh","sebagai gambaran","sebagai gantinya","sebagai hasilnya","sebagai tambahan","sebelum itu","secara bersamaan","secara eksplisit","secara keseluruhan","secara keseluruhan","secara khusus","secara menyeluruh","secara signifikan","secara singkat","secara umum","sejalan dengan ini","sejalan dengan itu","sejauh ini","sekali lagi","sekalipun begitu","sekalipun demikian","sementara itu","seperti yang bisa dilihat","seperti yang sudah saya katakan","seperti yang sudah saya tunjukkan","sesudah itu","setelah ini","setelah itu","tak pelak lagi","tanpa menunda-nunda lagi","tentu saja","terutama sekali","tidak perlu dipertanyakan lagi","tidak sama","tidak seperti","untuk alasan ini","untuk alasan yang sama","untuk memperjelas","untuk menekankan","untuk menyimpulkan","untuk satu hal","untuk sebagian besar","untuk selanjutnya","untuk tujuan ini","walaupun demikian","yang lain","yang terakhir","yang terpenting","begitu pula","berbeda dengan","betapapun juga","dalam hal itu","di samping itu","hal pertama yang perlu diingat","kadang kala","karena itu","lagi pula","lambat laun","mengingat bahwa","meskipun begitu","pada umumnya","pada waktu","saat ini juga","sampai saat ini","sebagian besar","secara terperinci","selain itu","seperti yang sudah dijelaskan","seperti yang tertera di","tak seperti","tanpa memperhatikan","tentu saja","untuk memastikan","untuk menggambarkan","walaupun begitu"]);function u(a){let i=a;return a.forEach((e=>{(e=e.split("-")).length>0&&e.filter((i=>!a.includes(i))).length>0&&(i=i.concat(e))})),i}const r=["si","sang","kaum","sri","hang","dang","para"],d=["nol","satu","dua","tiga","empat","lima","enam","tujuh","delapan","sembilan","sepuluh","sebelas","seratus","seribu","sejuta","semiliar","setriliun"],k=["kesatu","pertama","kedua","ketiga","keempat","kelima","keenam","ketujuh","kedelapan","kesembilan","kesepuluh","kesebelas","keseratus","keseribu"],l=["aku","saya","engkau","kau","kamu","anda","kita","kami","kalian","ia","dia","beliau","mereka","dikau","daku","beta","sayalah","engkaulah","kaulah","kamulah","andalah","kitalah","kamilah","kalianlah","dialah","kamu-kamu","saya-saya","mereka-mereka","beliau-beliau","anda-anda","mereka-merekalah","beliau-beliaulah","kamu-kamulah","anda-andalah"],m=["yang"],g=["ini","itu","tersebut","tadi","inilah","itulah"],p=["milikku","milikmu","miliknya","punyanya","punyaku","punyamu","kepunyaannya","kepunyaanmu","kepunyaanku"],h=["belasan","puluhan","ribuan","miliaran","triliunan","setengah","seperdua","sepertiga","seperempat","seperlima","seperenam","sepertujuh","seperdelapan","sepersembilan","sepersepuluh","sedikit","setiap","banyak","semua","lebih","kurang","sebagian","cukup","beberapa","berpuluh-puluh","beratus-ratus","beribu-ribu","berjuta-juta","ratusan","paling","tiap-tiap"],o=["diriku","dirinya","dirimu"],b=["lain","lainnya","seseorang","sesuatu","siapa-siapa","apa-apa","semuanya","segalanya","seluruhnya","keduanya","ketiganya","ketiga-tiganya","kedua-duanya","dua-duanya","tiga-tiganya","masing-masing","apapun","siapapun","manapun","sedemikian","demikian"],y=["apa","manakah","mana","apanya","inikah","itukah","manalagi"],c=["siapa","siapakah","kamukah","andakah","sayakah","akukah","diakah","merekakah","engkaukah","kamikah","kitakah","beliaukah","iakah","dirinyakah","dirikukah","siapatah","siapalah","siapanya"],f=["bagaimana","mengapa","kenapa","kapan","berapa","kapankah","berapakah","bagaimanakah","apakah","kapanpun","apatah","apalah","berapatah","berapalah","mengapakah","mengapatah","mengapalah","kenapakah","kenapatah","kenapalah","kapantah","kapanlah","manatah","mananya","manalah","bagaimanatah","bagaimanalah","bilamana","bilamanakah","bilamanatah","bilamananya","bilamanalah","keberapa","mampukah","beginikah","begitukah"],j=["selalu","sekali","berkali-kali"],S=["dapat","dapatkah","bisa","bisakah","boleh","bolehkah","akan","akankah","bukan","dapatlah","bisatah","bisanya","bisalah","bolehtah","bolehnya","bolehlah","akantah","akannya","akanlah","harus","haruskah","harustah","harusnya","haruslah","bukankah","bukantah","bukannya","bukanlah","mungkin","mungkinkah","mungkintah","mungkinlah","belum","belumkah","belumlah","sudah","sudahkah","sudahlah","takkan","masih","masihkah","pernah","pernahkah"],w=["adalah","ialah","merupakan","ada","berada"],W=["antara","seantero","bagai","bagaikan","bagi","buat","dari","demi","dengan","di","terhadap","menjelang","ke","kecuali","sekeliling","mengenai","sekitar","melalui","selama","lepas","lewat","oleh","selewat","pada","sepanjang","per","seputar","bersama","sejak","semenjak","seperti","serta","tentang","menuju","menurut","untuk","tanpa","adapun","antar","diantara","silam","lalu","selaku","melalui","sebagai","bahwasanya"],x=["atas","bawah","dalam","luar","depan","belakang","sebelah","samping"],P=["dan","atau","lalu","kemudian","serta","sedangkan","sementara","sambil","seraya","ataupun","ataukah"],N=["maupun","bukan","begitu","baru","hanya"],v=["setelah","sehabis","sejak","sampai","ketika","waktu","tatkala","saat","kalau","jika","jikalau","bila","bilamana","apabila","asal","asalkan","seandainya","andaikata","sekiranya","karena","sebab","lantaran","gara-gara","mentang-mentang","kalau-kalau","supaya","agar","guna","sehingga","hingga","sampai","sebelum","sesudah","meski","meskipun","kendati","kendatipun","walau","walaupun","sekalipun","biarpun","sungguhpun","padahal","seakan-akan","seolah-olah","daripada","alih-alih","melainkan","apalagi","bahwa","saja"],R=["kata","bilang","berkata","mengeklaim","bertanya","menayakan","menyatakan","tanya","klaim","jelas","jelaskan","menjelaskan","dijelaskan","ditanya","pikir","berpikir","berbicara","membicarakan","mengumumkan","diumumkan","dibicarakan","mendiskusikan","menyarankan","disarankan","mengerti"],O=["sangat","amat","terlalu","terlampau","sungguh","serba","agak","begitu","demikian","makin","semakin","kian","tambah","bertambah","begini","amatlah"],B=["ada","punya","milik","terlihat","kelihatan","mari","marilah","membuat","dibuat","menunjukkan","ditunjukkan","pergi","ambil","diambil","meletkakkan","letakkan","ambilkan","mencoba","dicoba","bermakna","berarti","terdiri","memastikan","dipastikan","mengandung","termasuk","maknanya","artinya","ingin","inginkan"],E=["terbesar","besar","terkecil","kecil","terbaru","baru","tertua","tua","lalu","semudah","termudah","mudah","cepat","jauh","susah","keras","panjang","rendah","pendek","tinggi","biasa","simpel","kebanyakan","baru-baru","lagi","selesai","mungkin","umum","baik","buruk","bagus","utama","sama","tertentu","biasanya","spesifik","langsung","dekat","terbaru","berbeda","beda","sibuk","terkini","penting","terpenting","sebesar","sekecil","setua","termuda","semuda","muda","tercepat","secepat","termudah","semudah","terjauh","sejauh","tersusah","sesusah","terkeras","sekeras","sepanjang","terpanjang","terpendek","sependek","terbiasa","tersimpel","sesimpel","terbaik","sebaik","terburuk","seburuk","sebagus","terbagus","terutama","terdekat","sedekat","tersibuk","sepenting","lambat","terlambat","luas","terluas","seluas","keren","tersedia","cepat-cepat","erat-erat","betul-betul","diam-diam","keras-keras","jauh-jauh","secepat-cepatnya","baik-baik","sebaik-baiknya","sekeras-kerasnya","lekas-lekas","selekas-lekasnya","tinggi-tinggi","setinggi-tingginya","seberat-beratnya","sejauh-jauhnya","sedikit-dikitnya","sekurang-kurangnya","setidak-tidaknya","sedapat-dapatnya","seenak-enaknya","seenaknya","seadanya","sekenanya","selambat-lambatnya","selebih-lebihnya","sedikitnya","sepenuhnya","besar-besaran","kecil-kecilan","habis-habisan","mati-matian","terang-terangan","terus-terusan","untung-untungan","kesekian","berdua-dua","bertiga-tiga","berdua","bertiga","berempat","berlima","berenam","bertujuh","berdelapan","bersembilan","bersepuluh","bersebelas","berseratus","berseribu","berduaan","agaknya","sepenting-pentingnya","sepanjang-panjangnya","spesifik","spesial","semuda-mudanya","setua-tuanya","seburuk-buruknya","seluas-luasnya","terlebih","selamanya","selama-lamanya","mampu","begini","beginilah","begitu","begitulah","sebegini","sebegitu","semula","pasti","pastilah","pastinya","dini","sedini","sering","seringnya","jarang","terbanyak"],F=["bah","cis","ih","idih","sialan","buset","aduh","waduh","duh","aduhai","amboi","asyik","wah","syukur","alhamdulillah","untung","aduh","aih","aih","lo","duilah","eh","oh","ah","astaga","astagfirullah","masyaallah","masa","alamak","gila","ayo","yuk","mari","hai","he","hai","halo"],M=["sdm","sdt","gr","kg","cm","mg","ml","l","dl","cl","ons","lbr","cc","bh","ltr","pon"],T=["detik","menit","jam","detik-detik","menit-menit","jam-jam","hari","hari-hari","minggu","minggu-minggu","bulan","bulan-bulan","tahun","tahun-tahun","besok","kemarin","lusa","malam-malam","siang-siang","subuh","bedug","keesokan"],A=["cara","barang","masalah","bagian","bagian-bagian","aspek","aspek-aspek","ide","item","tema","hal","perkara","faktor","faktor-faktor","detil","perbedaan","adanya","beginian","rupanya","diri"],C=["tidak","iya","tak","tentu","ok","oke","amin","dll","maaf","tolong","mohon","jangan","sebagainya","hanya","cuma","jangankan","janganlah","tolonglah"],$=(u(["lah","pun","dong","kan","sih","toh","nah","lho","kok","ding"]),u([].concat(k,["sebuah","seorang","seekor","sebiji","selembar","secarik","sehelai","sebutir","sebatang","sebidang","sebentuk","sebilah","sekuntum","sepatah","sepucuk","setangkai","seutas","sebelah","segenggam","segugus","sepiring","sejenis","semacam","sepotong","setetes","suatu"])),u([].concat(r,P,g,O,p,["bu","pak","bang","nak","kak","dik"])),u([].concat(j,l,o,F,d,S,w,R,B,b,N,v,y,c,f,["putus-putusnya","jemu-jemunya","jera-jeranya","puas-puasnya","bosan-bosannya","henti-hentinya","berhenti-hentinya"],C,x,M,T,A,E,m,W,h,s)),u([].concat(r,d,k,g,p,o,l,h,b,y,c,f,x,j,S,w,W,P,N,v,R,["yakni","yaitu","artinya","awalnya","akhirnya","makanya","malahan","malah","memang","nantinya","nanti","pula","seketika","sekarang","benar-benar","kadang","justru","tetapi","tapi"],O,B,F,E,M,A,C,["tuan","nyonya","nona","bang","pak","bu","bang","kak","prof","gus","ning","kyai","ustad","ustadzah","nyai","raden","tengku"],m,s,T))),_=[["baik","maupun"],["bukan","melainkan"],["bukan","tetapi"],["bukannya","melainkan"],["bukannya","tetapi"],["tidak","melainkan"],["tidak","tetapi"],["tidak hanya","tetapi juga"],["begitu","sehingga"],["begitu","sampai"],["demikian","sehingga"],["demikian","sampai"],["sedemikian","sehingga"],["sedemikian","sampai"],["meskipun","namun"],["biarpun","namun"],["bukan hanya","melainkan juga"],["sedemikian rupa","sehingga"],["sebaiknya","daripada"],["entah","entah"],["kalau","maka"],["apabila","maka"],["apa","atau"],["jangankan","pun"],["saja","apalagi"],["apakah","atau"]],L=window.lodash,{buildFormRule:q,createRulesFromArrays:z}=e.languageProcessing,D=["a","e","i","o","u"];function H(a){let i=0;for(let n=0;nn.startsWith(a)))}const{flattenSortLength:G,buildFormRule:J,createRulesFromArrays:Q}=e.languageProcessing,U=function(a,i){if((a.startsWith("ber")||a.startsWith("per"))&&K(a,3,i.stemming.beginningModification.rBeginning))return a.replace(/^(ber|per)/i,"r");if(/^peng/i.test(a)&&K(a,4,i.stemming.beginningModification.kBeginning))return a.replace(/^peng/i,"k");const e=Q(i.stemming.regexRules.removeSecondOrderPrefixes);return J(a,e)||a},V=function(a,i){let e=a.length;const n=i.stemming.regexRules.removeSuffixes,s=i.stemming.doNotStemWords.doNotStemSuffix,t=G(i.stemming.doNotStemWords.doNotStemPrefix.doNotStemFirstOrderPrefix),u=G(i.stemming.doNotStemWords.doNotStemPrefix.doNotStemSecondOrderPrefix);return t.some((i=>a.startsWith(i)))||(a=function(a,i){const e=function(a,i){const e=i.stemming.beginningModification;if(/^[mp]en/i.test(a)&&K(a,3,e.nBeginning))return a.replace(/^[mp]en/i,"n");if(/^[mp]eng/i.test(a)&&K(a,4,e.kBeginning))return a.replace(/^[mp]eng/i,"k");if(/^[mp]em/i.test(a)){if(K(a,3,e.pBeginning))return a.replace(/^(mem|pem)/i,"p");if(K(a,3,e.mBeginning))return a.replace(/^(mem|pem)/i,"m")}const n=function(a,i){const e=a.stemming.doNotStemWords.doNotStemPrefix.doNotStemFirstOrderPrefix.doNotStemTer;if(i.startsWith("keter")&&(i=i.substring(2,i.length)),i.startsWith("ter"))return e.some((a=>i.startsWith(a)))?i:K(i,3,a.stemming.beginningModification.rBeginning)?i.replace(/^ter/i,"r"):i.substring(3,i.length)}(i,a);return n||void 0}(a,i);if(e)return e;const n=Q(i.stemming.regexRules.removeFirstOrderPrefixes);return J(a,n)||a}(a,i)),e===a.length?(u.some((i=>a.startsWith(i)))||(a=U(a,i)),H(a)>2&&(a=I(a,n,s,i))):(e=a.length,H(a)>2&&(a=I(a,n,s,i)),e===a.length||u.includes(a)||H(a)>2&&(a=U(a,i))),a},X=function(a,i){a=function(a,i){const e=i.stemming.singleSyllableWords,n=i.stemming.singleSyllableWordsSuffixes,s=a;if(a=function(a,i){return a.startsWith("di")&&K(a,2,i.stemming.singleSyllableWords)?a.substring(2,a.length):/^[mp]enge/i.test(a)&&K(a,5,i.stemming.singleSyllableWords)?a.substring(5,a.length):a}(a,i),e.some((i=>a.startsWith(i)))&&H(a)<=3&&function(a,i){for(const e of i)if(a.match(e))return!0}(a,n)){a=I(a,i.stemming.regexRules.removeParticle,i.stemming.doNotStemWords.doNotStemParticle,i),a=I(a,i.stemming.regexRules.removePronoun,i.stemming.doNotStemWords.doNotStemPronounSuffix,i);const n=I(a,i.stemming.regexRules.removeSuffixes,i.stemming.doNotStemWords.doNotStemSuffix,i);e.includes(n)&&(a=n)}return(H(a)>1||1===a.length)&&(a=s),a}(a,i);const e=i.stemming.doNotStemWords.doNotStemParticle,n=i.stemming.doNotStemWords.doNotStemPronounSuffix;if(H(a)<=2)return a;const s=V(a,i);return e.includes(s)||n.includes(s)?s:(H(a=I(a,i.stemming.regexRules.removeParticle,e,i))>2&&(a=I(a,i.stemming.regexRules.removePronoun,n,i)),H(a)>2&&(a=V(a,i)),a)},{baseStemmer:Y}=e.languageProcessing;function Z(a){const i=(0,L.get)(a.getData("morphology"),"id",!1);return i?a=>function(a,i){if(i.stemming.shouldNotBeStemmed.includes(a))return a;const e=function(a,i){if(-1===a.indexOf("-"))return null;const e=a.split("-");if(2===e.length){let a=e[0],n=e[1];if(a=X(a,i),n=X(n,i),a.substring(1)===(n.startsWith("ng")||n.startsWith("ny")?n.substring(2):n.substring(1))){const e=i.stemming.nonPluralReduplications;return e.includes(a)&&e.includes(n)?a+"-"+a:a}}return null}(a,i);return e||X(a,i)}(a,i):Y}const aa=["diskontinuitas","diskualifikasi","diskriminatif","diskriminator","digitalisasi","disinformasi","disintegrasi","diskriminasi","disorientasi","distabilitas","diktatorial","disinfektan","disinsentif","diskrepansi","distributor","diagnostik","dialketika","diktatoris","dinosaurus","diplomatik","diplomatis","direktorat","dirgantara","disimilasi","diskontinu","diskulpasi","disparitas","dispensasi","distilator","distingtif","distribusi","diversitas","diafragma","diagnosis","diakritik","diakronis","dialektal","dialektik","dialektis","digenesis","digitalis","dilematik","diminutif","dinamisme","dingklang","diplomasi","dirgahayu","disertasi","disfungsi","diskredit","diskursif","disleksia","dislokasi","dismutasi","disonansi","disosiasi","dispenser","disposisi","distilasi","distingsi","divestasi","diabeter","diagonal","dialisis","diameter","diaspora","difraksi","digestif","diglosia","dikotomi","diktator","dilatasi","dimorfik","dinamika","dioksida","diopsida","diplomat","direktur","disentri","disensus","disiplin","diskotek","diskresi","dispersi","disrupsi","distansi","distorsi","diagram","difabel","digdaya","digital","digresi","diletan","dimensi","dinamik","dinamis","dinamit","dinasti","dioksin","diorama","diploma","diptera","direksi","dirigen","disagio","disiden","disjoki","diskoid","diskusi","disuasi","dividen","diadem","diakon","dialek","dialog","diaper","diayah","diesel","dilasi","dinamo","diniah","diorit","diare","diode","didih","didik","didis","digit","dikau","dikir","diksi","dikte","dinas","dipan","dirah","direk","disko","dinda","difusi","dilema","dingin","diniah","diorit","dirham","disket","diskon","divisi","diftong","difteri","dinding","dingkis","dingkit","dioksin","diorama","diploma","dirigen","disiden","displin","disjoki","diskusi","distrik","dividen","digestif","diglosia","dikotomi","dingklik","dioksida","diplomat","direktur","disentri","diskresi","disorder","dispersi","distansi","disrupsi","divergen","dingklang","diplomasi","dirgahayu","disertasi","disfungsi","disilabik","diskredit","disleksia","dislokasi","disosiasi","dispenser","disposisi","distilasi","dinosaurus","diplomatik","diplomatis","dirgantara","disimilasi","diskontinu","disparitas","distilator","distribusi","divergensi","diversitas","disabilitas","disinfektan","diskrepansi","disintegrasi","diskriminasi","diskriminatif","diskontinuitas","diskualifikasi"],{getWords:ia}=e.languageProcessing;function ea(a){const i=ia(a.toLowerCase());let e=i.filter((a=>a.length>4));if(e=e.filter((a=>a.startsWith("di"))),0===e.length)return!1;for(const a of aa)e=e.filter((i=>!i.startsWith(a)));return e=e.filter((function(a){let e=!0;const n=i.indexOf(a);return"untuk"===i[n-1]&&(e=!1),e})),0!==e.length}const na="\\–\\-\\(\\)_\\[\\]’‘“â€ã€ã€žã€Ÿâ€Ÿâ€ž\"'.?!:;,¿¡«»‹›—×+&۔؟،؛。。ï¼â€¼ï¼Ÿâ‡â‰âˆâ€¥â€¦ãƒ»ãƒ¼ã€ã€ƒã€„〆〇〈〉《》「ã€ã€Žã€ã€ã€‘〒〓〔〕〖〗〘〙〚〛〜ã€ã€žã€Ÿã€ ã€¶ã€¼ã€½ï½›ï½ï½œï½žï½Ÿï½ ï½¢ï½£ï½¤ï¼»ï¼½ï½¥ï¿¥ï¼„%@&'()*ï¼ï¼šï¼›ï¼œï¼žï¼¼\\<>",sa=(na.split(""),new RegExp("^["+na+"]+")),ta=new RegExp("["+na+"]+$"),ua=new Map([["amp;","&"],["lt;","<"],["gt;",">"],["quot;",'"'],["apos;","'"],["ndash;","–"],["mdash;","—"],["copy;","©"],["reg;","®"],["trade;","â„¢"],["pound;","£"],["yen;","Â¥"],["euro;","€"],["dollar;","$"],["deg;","°"],["asymp;","≈"],["ne;","≠"],["nbsp;"," "]]),ra=(new RegExp("&("+[...ua.keys()].join("|")+")","ig"),new Map);ua.forEach(((a,i)=>ra.set("#"+i,a)));const da=new RegExp("^("+[...ra.keys()].join("|")+")"),ka=new RegExp("("+[...ra.keys()].join("|")+")$"),la=/([\s\t\u00A0\u2013\u2014[\]])/,ma=function(a){if(!a)return[];return(a=>{const i=[];return a.forEach((a=>{const e=[],n=[];for(;sa.test(a)&&!da.test(a);)e.push(a[0]),a=a.slice(1);for(;ta.test(a)&&!ka.test(a);)n.unshift(a[a.length-1]),a=a.slice(0,-1);let s=[...e,a,...n];s=s.filter((a=>""!==a)),i.push(...s)})),i})(a.split(la).filter((a=>""!==a)))},{AbstractResearcher:ga}=e.languageProcessing;class pa extends ga{constructor(a){super(a),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"id",passiveConstructionType:"morphological",firstWordExceptions:n,functionWords:$,transitionWords:t,twoPartTransitionWords:_,areHyphensWordBoundaries:!1}),Object.assign(this.helpers,{getStemmer:Z,isPassiveSentence:ea,splitIntoTokensCustom:ma})}}(window.yoast=window.yoast||{}).Researcher=i})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/it.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/it.js new file mode 100644 index 00000000..d27c32a8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/it.js @@ -0,0 +1 @@ +(()=>{"use strict";var a={d:(t,i)=>{for(var e in i)a.o(i,e)&&!a.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:i[e]})},o:(a,t)=>Object.prototype.hasOwnProperty.call(a,t),r:a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})}},t={};a.r(t),a.d(t,{default:()=>ha});const i=window.yoast.analysis,e=["il","lo","la","i","gli","le","uno","un","una","due","tre","quattro","cinque","sei","sette","otto","nove","dieci","questo","questa","quello","quella","questi","queste","quelli","quelle","codesto","codesti","codesta","codeste"],r=["abbastanza","acciocché","acciocchè","adesso","affinché","affinchè","allora","almeno","alquanto","altrettanto","altrimenti","analogamente","anche","ancora","antecedentemente","anzi","anzitutto","apertamente","appena","assai","attualmente","benché","benchè","beninteso","bensì","brevemente","bruscamente","casomai","celermente","certamente","certo","chiaramente","ciononostante","cioé","cioè","comparabilmente","come","complessivamente","completamente","comunque","concisamente","concludendo","conformemente","congiuntamente","conseguentemente","considerando","considerato","considerevolmente","contemporaneamente","continuamente","contrariamente","controbilanciato","così","cosicché","cosicchè","dapprima","dato","davvero","definitivamente","dettagliatamente","differentemente","diversamente","dopo","dopodiché","dopodichè","durante","dunque","eccetto","eccome","effettivamente","egualmente","elencando","enfaticamente","eppure","esaurientemente","esplicitamente","espressamente","estesamente","evidentemente","finalmente","finché","finchè","fino","finora","fintanto","fintanto che","fintantoché","fintantochè","fondamentalmente","frattanto","frequentemente","generalmente","già","gradualmente","illustrando","immantinente","immediatamente","importantissimo","incontestabilmente","incredibilmente","indipendentemente","indiscutibilmente","indubbiamente","infatti","infine","innanzitutto","innegabilmente","inoltre","insomma","intanto","interamente","istantaneamente","invece","logicamente","lentamente","ma","malgrado","marcatamente","memorabile","mentre","motivatamente","naturalmente","né","nè","neanche","neppure","nonché","nonchè","nondimeno","nonostante","notevolmente","occasionalmente","oltretutto","onde","onestamente","ossia","ostinatamente","ovvero","ovviamente","parimenti","particolarmente","peraltro","perché","perchè","perciò","perlomeno","però","pertanto","pesantemente","piuttosto","poi","poiché","poichè","praticamente","precedentemente","preferibilmente","precisamente","prematuramente","presto","prima","primariamente","primo","principalmente","prontamente","proporzionalmente","pure","purché","purchè","quando","quanto","quantomeno","quindi","raramente","realmente","relativamente","riassumendo","riformulando","ripetutamente","saltuariamente","schiettamente","sebbene","secondariamente","secondo","sempre","sennò","seguente","sensibilmente","seppure","seriamente","siccome","sicuramente","significativamente","similmente","simultaneamente","singolarmente","sinteticamente","solitamente","solo","soltanto","soprattutto","sopravvalutato","sorprendentemente","sostanzialmente","sottolineando","sottovalutato","specialmente","specificamente","specificatamente","subitamente","subito","successivamente","successivo","talmente","terzo","totalmente","tranne","tuttavia","ugualmente","ulteriormente","ultimamente","veramente","verosimilmente","visto"],s=r.concat(["a breve","a causa","a causa di","a condizione che","a conseguenza","a conti fatti","a differenza di","a differenza del","a differenza della","a differenza dei","a differenza degli","a differenza delle","a dire il vero","a dire la verità","a dirla tutta","a dispetto di","a lungo","a lungo termine","a maggior ragione","a meno che non","a parte","a patto che","a prescindere","a prima vista","a proposito","a qualunque costo","a quanto","a quel proposito","a quel tempo","a quell'epoca","a questo fine","a questo proposito","a questo punto","a questo riguardo","a questo scopo","a riguardo","a seguire","a seguito","a sottolineare","a tal fine","a tal proposito","a tempo debito","a tutti gli effetti","a tutti i costi","a una prima occhiata","ad eccezione di","ad esempio","ad essere maliziosi","ad essere sinceri","ad ogni buon conto","ad ogni costo","ad ogni modo","ad una prima occhiata","adesso che","al che","al contrario","al contrario di","al fine di","al fine di fare","al giorno d'oggi","al momento","al momento giusto","al momento opportuno","al più presto","al posto di","al suo posto","al termine","all'epoca","all'infuori di","all'inizio","all'opposto","all'ultimo","alla fine","alla fine della fiera","alla luce","alla luce di","alla lunga","alla moda","alla stessa maniera","allo scopo di","allo stesso modo","allo stesso tempo","anch'esso","anch'io","anche se","ancora più","ancora di più","assumendo che","bisogna chiarire che","bisogna considerare che","causato da","ciò nondimeno","ciò nonostante","col tempo","con il tempo","come a dire","come abbiamo dimostrato","come è stato notato","come è stato detto","come è stato dimostrato","come hanno detto","come ho detto","come ho dimostrato","come ho notato","come potete notare","come potete vedere","come puoi notare","come puoi vedere","come si è dimostrato","come si può vedere","come si può notare","come sopra indicato","comunque sia","con attenzione","con enfasi","con il risultato che","con l'obiettivo di","con ostinazione","con questa intenzione","con questa idea","con queste idee","con questo in testa","con questo scopo","così che","così da","d'altra parte","d'altro canto","d'altro lato","d'altronde","d'ora in avanti","d'ora in poi","da allora","da quando","da quanto","da quel momento","da quella volta","da questo momento in poi","da questo momento","da qui","da ultimo","da un certo punto di vista","da un lato","da una parte","dall'altro lato","dall'epoca","dal che","dato che","dato per assunto che","davanti a","del tutto","dell'epoca","detto questo","di certo","di colpo","di conseguenza","di fatto","di fronte","di fronte a","di lì a poco","di punto in bianco","di quando in quando","di quanto non sia","di quel tempo","di qui a","di rado","di seguito","di si","di sicuro","di solito","di tanto in tanto","di tutt'altra pasta","di quando in quando","differente da","diversamente da","diverso da","dopotutto","dovuto a","e anche","e inoltre","entro breve","fermo restando che","faccia a faccia","fin da","fin dall'inizio","fin quando","finché non","finchè non","fin dal primo momento","fin dall'inizio","fino a","fino a questo momento","fino ad oggi","fino ai giorni nostri","fino adesso","fino a un certo punto","fino adesso","fra quanto","il prima possibile","in aggiunta","in altre parole","in altri termini","in ambo i casi","in breve","in caso di","in conclusione","in conformità","in confronto","in confronto a","in conseguenza","in considerazione","in considerazione di","in definitiva","in dettaglio","importante rendersi conto","in effetti","in entrambi i casi","in fin dei conti","in generale","in genere","in linea di massima","in poche parole","il più possibile","in maggior parte","in maniera analoga","in maniera convincente","in maniera esauriente","in maniera esaustiva","in maniera esplicita","in maniera evidente","in maniera incontestabile","in maniera indiscutibile","in maniera innegabile","in maniera significativa","in maniera simile","in modo allusivo","in modo analogo","in modo che","in modo convincente","in modo da","in modo identico","in modo notevole","in modo significativo","in modo significativo","in modo simile","in ogni caso","in ogni modo","in ogni momento","in parte considerevole","in parti uguali","in particolare","in particolare per","in particolare","in più","in pratica","in precedenza","in prima battuta","in prima istanza","in primo luogo","in rapporto","in qualche modo","in qualsiasi modo","in qualsiasi momento","in qualunque modo","in qualunque momento","in quarta battuta","in quarta istanza","in quarto luogo","in quel caso","in quelle circostanze","in questa occasione","in questa situazione","in questo caso","in questo caso particolare","in questo istante","in questo momento","in rare occasioni","in realtà","in seconda battuta","in seconda istanza","in secondo luogo","in seguito","in sintesi","in sostanza","in tempo","in terza battuta","in terza istanza","in terzo luogo","in totale","in tutto","in ugual maniera","in ugual misura","in ugual modo","in ultima analisi","in ultima istanza","in un altro caso","in una parola","in verità","insieme a","insieme con","invece che","invece di","la prima cosa da considerare","la prima cosa da tenere a mente","lo stesso","mentre potrebbe essere vero","motivo per cui","motivo per il quale","ne consegue che","ne deriva che","nei dettagli","nel caso","nel caso che","nel caso in cui","nel complesso","nel corso del","nel corso di","nel frattempo","nel lungo periodo","nel mentre","nell'eventualità che","nella misura in cui","nella speranza che","nella stessa maniera","nella stessa misura","nello specifico","nello stesso modo","nello stesso momento","nello stesso stile","non appena","non per essere maliziosi","non più da","nonostante ciò","nonostante tutto","ogni qualvolta","ogni tanto","ogni volta","oltre a","oltre a ciò","ora che","passo dopo passo","per causa di","per certo","per chiarezza","per chiarire","per come","per concludere","per conto di","per contro","per cui","per davvero","per di più","per dirla in altro modo","per dirla meglio","per dirla tutta","per es.","per esempio","per essere sinceri","per far vedere","per farla breve","per finire","per l'avvenire","per l'ultima volta","per la maggior parte","per la stessa ragione","per la verità","per lo più","per mettere in luce","per metterla in altro modo","per non dire di","per non parlare di","per ora","per ovvi motivi","per paura di","per paura dei","per paura delle","per paura degli","per prima cosa","per quanto","per questa ragione","per questo motivo","per riassumere","per sottolineare","per timore","per trarre le conclusioni","per ultima","per ultime","per ultimi","per ultimo","per via di","perché si","perchè si","perfino se","piano piano","più di ogni altra cosa","più di tutto","più facilmente","più importante","più tardi","poco a poco","poco dopo","prendiamo il caso di","presto o tardi","prima che","prima di","prima di ogni cosa","prima di tutto","prima o dopo","prima o poi","questo è probabilmente vero","questo potrebbe essere vero","restando inteso che","riassumendo","quanto prima","questa volta","se confrontato con","se e solo se","se no","seduta stante","sempreché","semprechè","sempre che","senz'altro","senza alcun riguardo","senza dubbio","senz'ombra di dubbio","senza ombra di dubbio","senza riguardo per","senza tregua","senza ulteriore ritardo","sia quel che sia","solo se","sotto questa luce","sperando che","sta volta","su tutto","subito dopo","sul serio","tanto per cominciare","tanto quanto","tra breve","tra l'altro","tra poco","tra quanto","tutte le volte","tutti insieme","tutto a un tratto","tutto ad un tratto","tutto d'un tratto","tutto considerato","tutto sommato","un passo alla volta","un tempo","una volta","una volta ogni tanto","unito a","va chiarito che","va considerato che","vada come vada","vale a dire","visto che"]);function o(a){let t=a;return a.forEach((i=>{(i=i.split("-")).length>0&&i.filter((t=>!a.includes(t))).length>0&&(t=t.concat(i))})),t}const n=["il","i","la","le","lo","gli","un","uno","una"],c=["due","tre","quattro","cinque","sette","otto","nove","dieci","undici","dodici","tredici","quattordici","quindici","sedici","diciassette","diciotto","diciannove","venti","cento","mille","mila","duemila","tremila","quattromila","cinquemila","seimila","settemila","ottomila","novemila","diecimila","milione","milioni","miliardo","miliardi"],l=["prima","primi","prime","secondo","seconda","secondi","seconde","terzo","terza","terzi","terze","quarto","quarta","quarti","quarte","quinto","quinta","quinti","quinte","sesto","sesta","sesti","seste","settimo","settima","settimi","settime","ottavo","ottava","ottavi","ottave","nono","nona","noni","none","decimo","decima","decimi","decime","undicesimo","undicesima","undicesimi","undicesime","dodicesimo","dodicesima","dodicesimi","dodicesime","tredicesimo","tredicesima","tredicesimi","tredicesime","quattordicesimo","quattordicesima","quattordicesimi","quattordicesime","quindicesimo","quindicesima","quindicesimi","quindicesime","sedicesimo","sedicesima","sedicesimi","sedicesime","diciassettesimo","diciassettesima","diciassettesimi","diciassettesime","diciannovesimo","diciannovesima","diciannovesimi","diciannovesime","ventesimo","ventesima","ventesimi","ventesime"],p=["io","tu","egli","esso","lui","ella","essa","lei","noi","voi","essi","esse","loro"],m=["mi","ti","si","ci","vi","li","me","te","se","glie","glielo","gliela","glieli","gliele","gliene","ce","ve"],d=["sé"],u=["ciò","codesto","codesta","codesti","codeste","colei","colui","coloro","costei","costui","costoro","medesimo","medesima","medesimi","medesime","questo","questa","questi","queste","quello","quella","quelli","quelle","quel","quei","quegli"],g=["mio","mia","miei","mie","tuo","tua","tuoi","tue","suo","sua","suoi","sue","nostro","nostra","nostri","nostre","vostro","vostra","vostri","vostre"],z=["affatto","alcun","alcuna","alcune","alcuni","alcuno","bastantemente","grandemente","massimamente","meno","minimamente","molta","molte","molti","moltissimo","molto","nessun","nessuna","nessuno","niente","nulla","ogni","più","po'","poca","poche","pochi","poco","pochissime","pochissimi","qualche","qualsiasi","qualunque","quintali","rara","rarissima","rarissimo","raro","spesso","spessissimo","sufficientemente","taluno","taluna","taluni","talune","tanta","tante","tanti","tantissime","tantissimi","tanto","tonnellate","troppa","troppe","troppi","troppo","tutta","tutte","tutti","tutto"],f=["alcunché","alcunchè","altro","altra","altri","altre","certa","certi","certe","checché","checchè","chicchessia","chiunque","ciascuno","ciascuna","ciascun","diverso","diversa","diversi","diverse","parecchio","parecchia","parecchi","parecchie","qualcosa","qualcuno","qualcuna","vario","varia","vari","varie"],v=["che","cosa","cui","qual","quale","quali"],b=["chi","quanta","quante","quanti","quanto"],h=["com'è","com'era","com'erano","donde","d'onde","dove","dov'è","dov'era","dov'erano","dovunque"],q=["ne"],w=["accanto","altrove","attorno","dappertutto","giù","là","laggiù","lassù","lì","ovunque","qua","quaggiù","quassù","qui"],y=["vengano","vengo","vengono","veniamo","veniate","venimmo","venisse","venissero","venissi","venissimo","veniste","venisti","venite","veniva","venivamo","venivano","venivate","venivi","venivo","venne","vennero","venni","verrà","verrai","verranno","verrebbe","verrebbero","verrei","verremmo","verremo","verreste","verresti","verrete","verrò","viene","vieni"],x=["venire","venir"],B=["abbi","abbia","abbiamo","abbiano","abbiate","abbiente","avemmo","avendo","avente","avesse","avessero","avessi","avessimo","aveste","avesti","avete","aveva","avevamo","avevano","avevate","avevi","avevo","avrà","avrai","avranno","avrebbe","avrebbero","avrei","avremmo","avremo","avreste","avresti","avrete","avrò","avuto","ebbe","ebbero","ebbi","ha","hai","hanno","ho","l'abbi","l'abbia","l'abbiamo","l'abbiano","l'abbiate","l'abbiente","l'avemmo","l'avendo","l'avente","l'avesse","l'avessero","l'avessi","l'avessimo","l'aveste","l'avesti","l'avete","l'aveva","l'avevamo","l'avevano","l'avevate","l'avevi","l'avevo","l'avrà","l'avrai","l'avranno","l'avrebbe","l'avrebbero","l'avrei","l'avremmo","l'avremo","l'avreste","l'avresti","l'avrete","l'avrò","l'avuto","l'ebbe","l'ebbero","l'ebbi","l'ha","l'hai","l'hanno","l'ho","possa","possano","possiamo","possiate","posso","possono","poté","potei","potemmo","potendo","potente","poterono","potesse","potessero","potessi","potessimo","poteste","potesti","potete","potette","potettero","potetti","poteva","potevamo","potevano","potevate","potevi","potevo","potrà","potrai","potranno","potrebbe","potrebbero","potrei","potremmo","potremo","potreste","potresti","potrete","potrò","potuto","può","puoi","voglia","vogliamo","vogliano","vogliate","voglio","vogliono","volemmo","volendo","volente","volesse","volessero","volessi","volessimo","voleste","volesti","volete","voleva","volevamo","volevano","volevate","volevi","volevo","volle","vollero","volli","voluto","vorrà","vorrai","vorranno","vorrebbe","vorrebbero","vorrei","vorremmo","vorremo","vorreste","vorresti","vorrete","vorrò","vuoi","vuole","debba","debbano","debbono","deva","deve","devi","devo","devono","dobbiamo","dobbiate","dové","dovei","dovemmo","dovendo","doverono","dovesse","dovessero","dovessi","dovessimo","doveste","dovesti","dovete","dovette","dovettero","dovetti","doveva","dovevamo","dovevano","dovevate","dovevi","dovevo","dovrà","dovrai","dovranno","dovrebbe","dovrebbero","dovrei","dovremmo","dovremo","dovreste","dovresti","dovrete","dovrò","dovuto","sa","sai","sanno","sapemmo","sapendo","sapesse","sapessero","sapessi","sapessimo","sapeste","sapesti","sapete","sapeva","sapevamo","sapevano","sapevate","sapevi","sapevo","sappi","sappia","sappiamo","sappiano","sappiate","saprà","saprai","sapranno","saprebbe","saprebbero","saprei","sapremmo","sapremo","sapreste","sapresti","saprete","saprò","saputo","seppe","seppero","seppi","so","soglia","sogliamo","sogliano","sogliate","soglio","sogliono","solesse","solessero","solessi","solessimo","soleste","solete","soleva","solevamo","solevano","solevate","solevi","solevo","suoli","sta","stai","stando","stanno","stante","starà","starai","staranno","staremo","starete","starò","stava","stavamo","stavano","stavate","stavi","stavo","stemmo","stessero","stessimo","steste","stesti","stette","stettero","stetti","stia","stiamo","stiano","stiate","sto"],F=["avere","l'avere","aver","l'aver","potere","poter","volere","voler","dovere","dover","sapere","saper","solere","stare","star"],S=["è","e'","era","erano","eravamo","eravate","eri","ero","essendo","essente","fosse","fossero","fossi","fossimo","foste","fosti","fu","fui","fummo","furono","sarà","sarai","saranno","sarebbe","sarebbero","sarei","saremmo","saremo","sareste","saresti","sarete","sarò","sei","sia","siamo","siano","siate","siete","sii","sono","stata","state","stati","stato"],k=["essere","esser"],P=["di","del","dello","della","dei","degli","delle","a","ad","al","allo","alla","ai","agli","alle","da","dal","dallo","dalla","dai","dagli","dalle","in","nel","nello","nella","nei","negli","nelle","con","col","collo","colla","coi","cogli","colle","su","sul","sullo","sulla","sui","sugli","sulle","per","pel","pello","pella","pei","pegli","tra","fra","attraverso","circa","contro","davanti","dentro","dietro","entro","escluso","fuori","insieme","intorno","lontano","lungo","mediante","oltre","presso","rasente","riguardo","senza","sopra","sotto","tramite","vicino"],C=["e","ed","o","oppure"],W=["tale","l'uno","l'altro","tali","dall'altra"],R=["anziché","anzichè","fuorché","fuorchè","giacché","giacchè","laddove","modo","ove","qualora","quantunque","volta"],O=["dice","dicono","diceva","dicevano","disse","dissero","detto","domanda","domandano","domandava","domandavano","domandò","domandarono","domandato","afferma","affermato","aggiunge","aggiunto","ammette","ammesso","annuncia","annunciato","assicura","assicurato","chiede","chiesto","commentato","conclude","concluso","continua","continuato","denuncia","denunciato","dichiara","dichiarato","esordisce","esordito","inizia","iniziato","precisato","prosegue","proseguito","racconta","raccontato","recita","recitato","replica","replicato","risponde","risposto","rimarca","rimarcato","rivela","rivelato","scandisce","scandito","segnala","segnalato","sottolinea","sottolineato","spiega","spiegato"],j=["affermare","aggiungere","ammettere","annunciare","assicurare","chiedere","commentare","concludere","continuare","denunciare","dichiarare","esordire","iniziare","precisare","proseguire","raccontare","recitare","replicare","rispondere","rimarcare","rivelare","scandire","segnalare","sottolineare","spiegare"],E=["addirittura","assolutamente","ben","estremamente","mica","nemmeno","quasi"],T=["fa","fa'","faccia","facciamo","facciano","facciate","faccio","facemmo","facendo","facente","facesse","facessero","facessi","facessimo","faceste","facesti","faceva","facevamo","facevano","facevate","facevi","facevo","fai","fanno","farà","farai","faranno","farebbe","farebbero","farei","faremmo","faremo","fareste","faresti","farete","farò","fate","fatto","fece","fecero","feci","fo"],A=["fare"],M=["anteriore","anteriori","precedente","precedenti","facile","facili","facilissimo","facilissima","facilissimi","facilissime","semplice","semplici","semplicissima","semplicissimo","semplicissimi","semplicissime","semplicemente","rapido","rapida","rapidi","rapide","veloce","veloci","differente","difficile","difficili","difficilissimo","difficilissima","difficilissimi","difficilissime","basso","bassa","bassi","basse","alto","alta","alti","alte","normale","normali","normalmente","corto","corta","corti","corte","breve","brevi","recente","recenti","totale","totali","completo","completa","completi","complete","possibile","possibili","ultimo","ultima","ultimi","ultime","differenti","simile","simili","prossimo","prossima","prossimi","prossime","giusto","giusta","giusti","giuste","giustamente","cosiddetto","bene","meglio","benissimo","male","peggio","malissimo","comunemente","constantemente","direttamente","esattamente","facilmente","generalmente","leggermente","personalmente","recentemente","sinceramente","solamente","avanti","indietro"],L=["nuovo","nuova","nuovi","nuove","vecchio","vecchia","vecchi","vecchie","bello","bella","belli","belle","bei","begli","bellissimo","bellissima","bellissimi","bellissime","buono","buona","buoni","buone","buonissimo","buonissima","buonissimi","buonissime","grande","grandi","grandissimo","grandissima","grandissimi","grandissime","lunga","lunghi","lunghe","piccolo","piccola","piccoli","piccole","piccolissimo","piccolissima","piccolissimi","piccolissime","proprio","propria","propri","proprie","solito","solita","soliti","solite","stesso","stessa","stessi","stesse"],N=["accidenti","acciderba","ah","aah","ahi","ahia","ahimé","bah","beh","boh","ca","caspita","chissà","de'","diamine","ecco","eh","ehi","eeh","ehilà","ehm","gna","ih","magari","macché","macchè","mah","mhm","nca","neh","oibò","oh","ohe","ohé","ohilá","ohibò","ohimé","okay","ok","olà","poh","pota","puah","sorbole","to'","toh","ts","uff","uffa","uh","uhi"],$=["cc","g","hg","hl","kg","l","prs","pz","q.b.","qb","ta","tz"],_=["minuto","minuti","ora","ore","giorno","giorni","giornata","giornate","settimana","settimane","mese","mesi","anno","anni","oggi","domani","ieri","stamattina","stanotte","stasera","tardi"],D=["aspetto","aspetti","caso","casi","cose","idea","idee","istanza","maniera","oggetto","oggetti","parte","parti","persona","persone","pezzo","pezzi","punto","punti","sorta","sorte","tema","temi","volte"],G=["sì","no","non","€","euro","euros","ecc","eccetera"],I=(o(M),o([].concat(l,j,x,F,k,A,L)),o([].concat(n,P,C,u,E,z,g)),o([].concat(r,p,m,d,N,c,y,B,S,O,T,f,W,R,v,b,h,w,G,q,$,_,D)),o([].concat(n,P,m,g,f,c,l,T,A,O,v,b,d,h))),J=o([].concat(B,F)),U=o([].concat(n,c,l,u,g,p,m,d,z,f,b,h,v,q,w,y,x,B,F,S,k,P,C,W,R,O,j,r,["eventualmente","forse","mai","probabilmente"],E,T,A,N,M,L,$,D,G,_,["sig.na","sig.ra","sig","sigg","dr","dr.ssa","dott","dott.ssa","prof","prof.ssa","gent","gent.mo","gent.mi","gent.ma","gent.me","egr","egr.i","egr.ia","egr.ie","preg.mo","preg.mo","preg.ma","preg.me","ill","ill.mo","ill.mi","ill.ma","ill.me","cav","on","spett"])),V=["a condizione che","a meno che non","a patto che","a seconda che","acché","affinché","al fine di","allorché","allorquando","anche se","anziché","avvegnaché","basta que","benché","beninteso que","chi","cui","dal momento che","dopo che","dove","finché non","fintantoché","i quali","il quale","in caso","in modo che","la quale","le quali","malgrado","mentre","nel caso in cui","nel eventualità che","nonostante che","ogni volta che","per il fatto che","perché","piuttosto che","piuttosto di","poiche","prima che","purché","qualora","quando","quantunque","quello che","sebbene","senza che","siccome","tranne che","una volta che"],H=[["né","né"],["non","ma"],["non prima","che"],["non prima","di"],["non solo","ma anche"],["o","o"],["se","allora"],["se","o"],["sia","che"]],K=JSON.parse('{"vowels":"aeiouyàèéìîïòù","deviations":{"vowels":[{"fragments":["a[íúeo]","e[íúao]","o[íúaeè]","í[aeo]","ú[aeo]","ai[aeou]","àii","aiì","au[eé]","ei[aàeèé]","èia","ia[èiì]","iài","oi[aàeèo]","òia","óio","uí","ui[aàó]","ùio","ouï","coo[cmnpr]","lcool","coòf","[aeuioìùèéàò]y[aeuioíìùèàó]","ìa$","èa$"],"countModifier":1},{"fragments":["aoi","aoì","ioe","riae","ïa$"],"countModifier":1}],"words":{"full":[{"word":"via","syllables":2},{"word":"guaime","syllables":3},{"word":"guaina","syllables":3},{"word":"coke","syllables":1},{"word":"frame","syllables":1},{"word":"goal","syllables":1},{"word":"live","syllables":1},{"word":"mouse","syllables":1},{"word":"coon","syllables":1}],"fragments":{"global":[{"word":"mayoyào","syllables":4},{"word":"eye-liner","syllables":3},{"word":"scooner","syllables":2},{"word":"cocoon","syllables":2},{"word":"silhouette","syllables":4},{"word":"circuíto","syllables":4},{"word":"cruento","syllables":3},{"word":"cruènto","syllables":3},{"word":"rituale","syllables":4},{"word":"duello","syllables":3},{"word":"fuorviante","syllables":4},{"word":"league","syllables":1},{"word":"leader","syllables":2},{"word":"appeal","syllables":2},{"word":"backstage","syllables":2},{"word":"badge","syllables":1},{"word":"baseball","syllables":2},{"word":"beauty","syllables":2},{"word":"bondage","syllables":2,"notFollowedBy":["s"]},{"word":"break","syllables":1},{"word":"brokerage","syllables":3},{"word":"business","syllables":2},{"word":"cache","syllables":2,"notFollowedBy":["s","r"]},{"word":"cashmere","syllables":2},{"word":"challenge","syllables":2,"notFollowedBy":["s","r"]},{"word":"charleston","syllables":2},{"word":"cheap","syllables":1},{"word":"cottage","syllables":2,"notFollowedBy":["s"]},{"word":"cruise","syllables":1,"notFollowedBy":["s","r"]},{"word":"device","syllables":2,"notFollowedBy":["s"]},{"word":"downgrade","syllables":2,"notFollowedBy":["d"]},{"word":"download","syllables":2},{"word":"drive","syllables":1,"notFollowedBy":["r"]},{"word":"endorsement","syllables":3},{"word":"drive","syllables":1,"notFollowedBy":["r"]},{"word":"executive","syllables":4},{"word":"firmware","syllables":2},{"word":"fobia","syllables":3},{"word":"float","syllables":1},{"word":"freak","syllables":1},{"word":"game","syllables":1,"notFollowedBy":["r"]},{"word":"guideline","syllables":2},{"word":"hardware","syllables":2},{"word":"homeless","syllables":2},{"word":"hardware","syllables":1,"notFollowedBy":["r"]},{"word":"hardware","syllables":1,"notFollowedBy":["r"]},{"word":"hardware","syllables":1,"notFollowedBy":["r"]},{"word":"hospice","syllables":2,"notFollowedBy":["s"]},{"word":"impeachment","syllables":3},{"word":"jeans","syllables":1},{"word":"jukebox","syllables":2},{"word":"leasing","syllables":2},{"word":"lease","syllables":1,"notFollowedBy":["s"]},{"word":"lounge","syllables":1,"notFollowedBy":["r","s"]},{"word":"magazine","syllables":3},{"word":"notebook","syllables":2},{"word":"office","syllables":2,"notFollowedBy":["r","s"]},{"word":"online","syllables":2},{"word":"offline","syllables":2},{"word":"overcoat","syllables":3},{"word":"offside","syllables":2,"notFollowedBy":["r"]},{"word":"overdrive","syllables":3},{"word":"oversize","syllables":3},{"word":"pacemaker","syllables":3},{"word":"package","syllables":2,"notFollowedBy":["r","s"]},{"word":"pancake","syllables":2},{"word":"performance","syllables":3},{"word":"premium","syllables":3},{"word":"ragtime","syllables":2},{"word":"reading","syllables":2},{"word":"residence","syllables":3,"notFollowedBy":["s"]},{"word":"roaming","syllables":2},{"word":"rollerblade","syllables":3,"notFollowedBy":["r"]},{"word":"royalty","syllables":3},{"word":"shake","syllables":1,"notFollowedBy":["r"]},{"word":"shale","syllables":1},{"word":"shampooing","syllables":3},{"word":"shareware","syllables":2},{"word":"shearling","syllables":2},{"word":"sidecar","syllables":2},{"word":"hardware","syllables":1,"notFollowedBy":["r"]},{"word":"skate","syllables":1,"notFollowedBy":["n","r"]},{"word":"trial","syllables":2},{"word":"toast","syllables":1},{"word":"texture","syllables":2},{"word":"testimonial","syllables":5},{"word":"teaser","syllables":2},{"word":"sweater","syllables":2},{"word":"suspense","syllables":2,"notFollowedBy":["r"]},{"word":"subroutine","syllables":3},{"word":"steadicam","syllables":3},{"word":"spread","syllables":1},{"word":"speaker","syllables":2},{"word":"board","syllables":1},{"word":"sneaker","syllables":2},{"word":"smartphone","syllables":2},{"word":"slide","syllables":1,"notFollowedBy":["r"]},{"word":"skyline","syllables":2},{"word":"skinhead","syllables":2},{"word":"update","syllables":2,"notFollowedBy":["r"]},{"word":"upgrade","syllables":2,"notFollowedBy":["r"]},{"word":"upload","syllables":2},{"word":"vintage","syllables":2},{"word":"wakeboard","syllables":2},{"word":"website","syllables":2},{"word":"welfare","syllables":2},{"word":"yeah","syllables":1},{"word":"yearling","syllables":2}],"atEnd":[{"word":"byte","syllables":1,"alsoFollowedBy":["s"]},{"word":"bite","syllables":1,"alsoFollowedBy":["s"]},{"word":"beat","syllables":1,"alsoFollowedBy":["s"]},{"word":"coach","syllables":1},{"word":"line","syllables":1,"alsoFollowedBy":["s"]}],"atBeginning":[{"word":"cheese","syllables":1},{"word":"head","syllables":1},{"word":"streak","syllables":1}],"atBeginningOrEnd":[{"word":"team","syllables":1},{"word":"stream","syllables":1}]}}}}'),Q={recommendedLength:25},X=["abalienat","abbacchiat","abbacinat","abbadat","abbagliat","abbaiat","abballat","abbambinat","abbancat","abbandonat","abbarbagliat","abbarbat","abbarcat","abbaruffat","abbassat","abbatacchiat","abbattut","abbatuffolat","abbelit","abbellat","abbellit","abbendat","abbeverat","abbiadat","abbicat","abbigliat","abbinat","abbindolat","abbioccat","abbiosciat","abbisciat","abbittat","abboccat","abboffat","abbominat","abbonacciat","abbonat","abbonit","abbordat","abborracciat","abborrat","abborrit","abbottinat","abbottonat","abbozzacchiat","abbozzat","abbozzolat","abbracciat","abbraciat","abbrancat","abbreviat","abbriccat","abbrigliat","abbrivat","abbriviat","abbrividit","abbronzat","abbrostolat","abbrostolit","abbruciacchiat","abbruciat","abbrunat","abbrunit","abbruscat","abbrusciat","abbrustiat","abbrustolat","abbrustolit","abbrutit","abbruttit","abbuffat","abbuiat","abbuonat","abburattat","abbuzzit","abdicat","abdott","abiettat","abilitat","abissat","abitat","abituat","abiurat","abolit","abominat","abondat","aborrit","abortit","abras","abrogat","abusat","accaffat","accagionat","accagliat","accalappiat","accalcat","accaldat","accallat","accalorat","accalorit","accambiat","accampat","accampionat","accanalat","accanat","accaneggiat","accanit","accantonat","accaparrat","accapezzat","accapigliat","accapottat","accappiat","accappiettat","accapponat","accappucciat","accaprettat","accareggiat","accarezzat","accarnat","accarpionat","accartocciat","accasat","accasciat","accasellat","accasermat","accastellat","accastellinat","accatarrat","accatastat","accattat","accattivat","accavalcat","accavalciat","accavallat","accavezzat","accecat","acceffat","accelerat","accellerat","accennat","accensat","accentat","accentrat","accentuat","acceppat","accerchiat","accercinat","accertat","acces","accessoriat","accettat","acchetat","acchiappat","acchiocciolat","acchitat","acchiudut","acciabattat","acciaiat","acciambellat","acciarpat","acciecat","accigliat","acciglionat","accignut","accincignat","accint","acciocchit","acciottolat","accipigliat","accismat","accis","acciucchit","acciuffat","accivettat","acclamat","acclarat","acclimatat","acclus","accoccat","accoccolat","accoccovat","accodat","accollat","accoltellat","accolt","accomandat","accomiatat","accommiatat","accomodat","accompagnat","accomunat","acconciat","acconigliat","accontat","accontentat","accoppat","accoppiat","accorat","accorciat","accorcit","accordat","accordellat","accorpat","accort","accosciat","accostat","accostumat","accotonat","accottimat","accovacciat","accovat","accovonat","accozzat","accreditat","accresciut","accrespat","accucciat","accucciolat","accudit","acculat","acculturat","accumulat","accumunat","accusat","acetificat","acetilat","acetit","acidat","acidificat","acidulat","acquadernat","acquarellat","acquartierat","acquat","acquattat","acquerellat","acquetat","acquietat","acquisit","acquistat","acromatizzat","acuit","acuminat","acutizzat","adacquat","adagiat","adattat","addaziat","addebbiat","addebitat","addecimat","addensat","addentat","addentellat","addentrat","addestrat","addett","addiacciat","addimandat","addimesticat","addimorat","addimostrat","addipanat","addirizzat","additat","additivat","addizionat","addobbat","addocilit","addogliat","addolcat","addolciat","addolcit","addolorat","addomandat","addomesticat","addoppiat","addormentat","addossat","addott","addottorat","addottrinat","addrizzat","adduat","addugliat","adeguat","adempit","adempiut","adequat","aderizzat","adescat","adibit","adirat","adit","adiuvat","adizzat","adocchiat","adombrat","adonat","adonestat","adontat","adoperat","adoprat","adorat","adornat","adottat","adsorbit","aduggiat","adugnat","adulat","adulterat","adunat","adunghiat","adusat","aerat","aereat","aerotrainat","aerotrasportat","affabulat","affaccendat","affacchinat","affacciat","affagottat","affaldat","affamat","affamigliat","affannat","affardellat","affascinat","affastellat","affaticat","affattucchiat","affatturat","affermat","afferrat","affettat","affezionat","affiancat","affiatat","affibbiat","affidat","affienat","affievolit","affigliat","affigurat","affilat","affilettat","affiliat","affinat","affiochit","affiorat","affisat","affissat","affiss","affittat","affittit","afflitt","afflosciat","affocat","affogat","affogliat","affollat","affoltat","affondat","afforcat","afforestat","afforzat","affossat","affralit","affrancat","affrant","affratellat","affrenat","affrenellat","affrescat","affrettat","affrittellat","affrontat","affumat","affumicat","affumigat","affuocat","affusolat","africanizzat","ageminat","agevolat","aggallat","agganciat","aggangherat","aggarbat","aggattonat","aggavignat","aggelat","aggettivat","agghiacciat","agghiadat","agghiaiat","agghindat","aggiaccat","aggiogat","aggiornat","aggirat","aggiucchit","aggiudicat","aggiuntat","aggiunt","aggiustat","agglomerat","agglutinat","aggomitolat","aggottat","aggradit","aggraffat","aggranchiat","aggranchit","aggrandit","aggrappat","aggraticciat","aggravat","aggredit","aggregat","aggrevat","aggricciat","aggrinzat","aggrinzit","aggrommat","aggrondat","aggroppat","aggrottat","aggrovigliat","aggrumat","aggruppat","aggruzzolat","agguagliat","agguantat","agguardat","agguatat","aggueffat","agitat","agognat","agrarizzat","aguatat","agucchiat","agunat","agurat","aguzzat","aitat","aiutat","aizzat","alat","alberat","albergat","alcalinizzat","alchilat","alchimiat","alchimizzat","alcolizzat","alcoolizzat","alenat","alesat","alettat","alfabetat","alfabetizzat","alidit","alienat","alimentat","allacciat","allagat","allappat","allargat","allascat","allattat","alleat","allegat","alleggerit","alleggiat","allegorizzat","alleluiat","allenat","allenit","allentat","allertat","allessat","allestit","allettat","allevat","alleviat","allibat","allibit","allibrat","allicciat","allietat","allindat","allineat","allis","allocat","allogat","alloggiat","allontanat","allottat","allucchettat","allucciolat","allucinat","allumat","alluminat","alluminiat","allungat","allupat","allus","alluzzat","alogenat","alonat","alpeggiat","alterat","alternat","alzat","amalgamat","amareggiat","amaricat","amat","ambientat","ambiguat","ambit","americanizzat","amicat","ammaccat","ammaestrat","ammainat","ammalat","ammaliat","ammalinconit","ammaltat","ammanettat","ammanicat","ammanierat","ammanigliat","ammannat","ammannellat","ammannit","ammansat","ammansit","ammantat","ammantellat","ammarat","ammarezzat","ammassat","ammassellat","ammassicciat","ammatassat","ammattonat","ammazzat","ammelmat","ammencit","ammendat","ammennicolat","ammess","ammetat","ammezzit","amministrat","amminutat","ammirat","ammiserit","ammobiliat","ammodernat","ammodernizzat","ammogliat","ammoinat","ammollat","ammollit","ammonit","ammonticchiat","ammonticellat","ammorbat","ammorbidat","ammorbidit","ammorsat","ammortat","ammortit","ammortizzat","ammorzat","ammosciat","ammoscit","ammostat","ammotinat","ammucchiat","ammulinat","ammusat","ammutat","ammutinat","amnistiat","amoracciat","ampiat","ampliat","amplificat","amputat","anagrammat","analizzat","anamorfizzat","anastomizzat","anatematizzat","anatomizzat","anchilosat","ancis","ancorat","andicappat","anellat","anemizzat","anestetizzat","angariat","anglicizzat","angolat","angosciat","angustiat","animat","annacquat","annaffiat","annasat","annaspat","annaspicat","annebbiat","annegat","annerat","annerit","anness","annestat","annichilat","annichilit","annidat","annientat","annitrit","annobilit","annodat","annodicchiat","annoiat","annotat","annottat","annottolat","annoverat","annullat","annunciat","annunziat","annusat","annuvolat","anodizzat","anonimizzat","antecedut","antepost","antergat","anticheggiat","antichizzat","anticipat","anticonosciut","antidatat","antivedut","antivist","antologizzat","antropizzat","antropomorfizzat","aocchiat","aombrat","aonestat","aontat","apert","apocopat","apologizzat","apostatat","apostrofat","appaciat","appacificat","appagat","appaiat","appalesat","appallottolat","appaltat","appanettat","appannat","apparat","apparecchiat","apparentat","apparigliat","apparit","appartat","appassionat","appastat","appastellat","appellat","appennellat","appercepit","appertizzat","appesantit","appesit","appes","appestat","appetit","appezzat","appiacevolit","appianat","appiastrat","appiatat","appiattat","appiattit","appiccat","appiccicat","appiccolit","appiedat","appigionat","appigliat","appinzat","appiombat","appioppat","appisolat","applaudit","applicat","appoderat","appoggiat","appollaiat","appoppat","apportat","appostat","appost","appratit","appresentat","appres","appressat","apprestat","apprettat","apprezzat","approcciat","approfittat","approfondat","approfondit","approntat","appropinquat","appropriat","approssimat","approvat","approvisionat","approvvigionat","appruat","appulcrat","appuntat","appuntellat","appuntit","appurat","appuzzat","arabescat","arabizzat","arat","arbitrat","arborat","arcaizzat","arcat","architettat","archiviat","arcuat","ardit","areat","argentat","arginat","argomentat","arguit","arianizzat","arieggiat","armat","armonizzat","aromatizzat","arpeggiat","arpionat","arponat","arrabattat","arraffat","arraffiat","arrandellat","arrangiat","arrapat","arrapinat","arrappat","arrazzat","arrecat","arredat","arreggimentat","arrembat","arrenat","arresis","arres","arrestat","arretrat","arricchit","arricciat","arricciolat","arriffat","arringat","arrischiat","arrisicat","arris","arrocat","arroccat","arrochit","arrogat","arrolat","arroncat","arronzat","arrosat","arrossat","arrostat","arrostit","arrotat","arrotolat","arrotondat","arrovellat","arroventat","arroventit","arrovesciat","arrubinat","arruffat","arruffianat","arrugginit","arruncigliat","arruolat","arruvidit","arsicciat","ars","artefatt","articolat","artigliat","asces","asciat","asciolvut","asciugat","ascoltat","ascos","ascost","ascritt","asfaltat","asfissiat","aspers","aspettat","aspirat","asportat","aspreggiat","assaettat","assaggiat","assalit","assaltat","assaporat","assaporit","assassinat","assecondat","assecurat","assediat","asseggiat","assegnat","assembiat","assemblat","assembrat","assemprat","assentat","asserit","asserragliat","asservit","assestat","assetat","assettat","asseverat","assibilat","assicurat","assiderat","assiemat","assiepat","assillat","assimigliat","assimilat","assiomatizzat","assis","assistit","associat","assodat","assoggettat","assolcat","assoldat","assolt","assolutizzat","assomat","assommat","assonat","assonnat","assopit","assorbit","assordat","assordit","assortit","assottigliat","assuefatt","assunt","asteggiat","astenut","asters","astratt","astrett","atomizzat","atrofizzat","atrovat","attaccat","attagliat","attanagliat","attardat","attediat","atteggiat","attempat","attendat","attentat","attenuat","attenut","attergat","atterrat","atterrit","atterzat","attes","attestat","atticizzat","attillat","attint","attirat","attivat","attivizzat","attizzat","attorcigliat","attorniat","attort","attoscat","attossicat","attraccat","attrappit","attratt","attraversat","attrezzat","attribuit","attristat","attristit","attruppat","attualizzat","attuat","attuffat","attutat","attutit","auggiat","augumentat","augurat","aulit","aumentat","aunghiat","ausat","auscultat","auspicat","autenticat","autentificat","autoaccusat","autoaffondat","autoalimentat","autoassolt","autocandidat","autocensurat","autocitat","autocommiserat","autoconsumat","autoconvint","autodefinit","autodenunciat","autodistrutt","autofinanziat","autogestit","autogovernat","autografat","autoincensat","autointersecat","autoinvitat","autolesionat","autolimitat","automaticizzat","automatizzat","automotivat","autonominat","autoproclamat","autoprodott","autoprotett","autopubblicat","autopubblicizzat","autoregolamentat","autoregolat","autoridott","autoriparat","autorizzat","autosomministrat","autosostenut","autosuggestionat","autotassat","autotrapiantat","autotrasportat","autovalutat","avallat","avampat","avanzat","avariat","avint","aviolanciat","aviotrasportat","avocat","avolterat","avuls","avutacel","avut","avvallat","avvalorat","avvals","avvantaggiat","avvelat","avvelenat","avventat","avventurat","avverat","avversat","avvertit","avvezzat","avviat","avvicendat","avvicinat","avvignat","avvilit","avviluppat","avvinat","avvinchiat","avvinghiat","avvint","avvisat","avvistat","avvitat","avviticchiat","avvitit","avvivat","avvolt","avvoltolat","aziendalizzat","azionat","azotat","azzannat","azzardat","azzeccat","azzerat","azzimat","azzittat","azzittit","azzoppat","azzoppit","azzuffat","azzurrat","bacat","baccagliat","bacchettat","bacchiat","baciat","badat","bagnat","baipassat","balbettat","balcanizzat","ballat","baloccat","balzat","banalizzat","bancat","bandit","bannat","baraccat","barattat","barbarizzat","barcamenat","bardat","barellat","barrat","barricat","basat","basciat","basculat","bassat","bastat","bastionat","bastit","bastonat","battezzat","battut","bazzicat","beatificat","beat","beccat","beccheggiat","becchettat","beffat","beffeggiat","bendat","benedett","beneficat","benvolut","berlusconizzat","bersagliat","bestemmiat","bevut","biadat","bianchettat","bianchit","biascicat","biasimat","biasmat","bidonat","biennalizzat","biforcat","bigiat","bilanciat","binat","bindolat","biodegradat","biografat","bipartit","bisbigliat","biscottat","bisecat","bisellat","bisognat","bissat","bistrat","bistrattat","bitumat","bituminat","blandit","bleffat","blindat","bloccat","bloggat","bluffat","bobinat","boccheggiat","bocciat","boicottat","bollat","bollit","bombardat","bombat","bonderizzat","bonificat","bootat","borbottat","bordat","boriat","borrat","borseggiat","braccat","bracciat","bramat","bramit","brancicat","brandeggiat","brandit","brasat","bravat","brevettat","breviat","brillantat","brillat","brinat","broccat","brocciat","broccolat","brontolat","bronzat","brucat","bruciacchiat","bruciat","brunit","bruscat","bruschinat","brutalizzat","bruttat","bucat","bucherellat","bufat","buffat","bufferizzat","buggerat","bugnat","bulicat","bulinat","bullettat","bullonat","burattat","burlat","burocratizzat","burrificat","buscat","buttat","butterat","bypassat","cablat","cabrat","cacat","cacciat","cadenzat","cadmiat","caducat","cagat","caggiat","cagionat","cagliat","calafatat","calamitat","calandrat","calat","calcat","calciat","calcificat","calcolat","caldeggiat","calettat","calibrat","calmat","calmierat","calpestat","calumat","calunniat","calzat","cambiat","camerat","campionat","campit","camuffat","canalizzat","cancellat","cancerizzat","candeggiat","candidat","candit","canforat","cangiat","cannat","canneggiat","cannibalizzat","cannoneggiat","canonizzat","cantat","canterellat","canticchiat","cantilenat","canzonat","caolinizzat","capacitat","capeggiat","capillarizzat","capitalizzat","capitanat","capitaneggiat","capit","capitozzat","capivolt","caponat","capotat","capottat","capovolt","capponat","captat","caramellat","caramellizzat","caratat","caratterizzat","carbonizzat","carbossilat","carburat","carcat","carcerat","cardat","carenat","carezzat","cariat","caricat","caricaturat","caricaturizzat","carotat","carpionat","carpit","carreggiat","carrozzat","cartavetrat","carteggiat","cartellinat","cartografat","cartolarizzat","cartonat","cascolat","cassat","cass","castigat","castrat","casualizzat","catabolizzat","catalizzat","catalogat","catapultat","catechizzat","categorizzat","cateterizzat","catramat","cattolicizzat","catturat","causat","cautelat","cauterizzat","cauzionat","cavalcat","cavatasel","cavat","cazzat","cazziat","cazzottat","cedrat","cedut","celat","celebrat","cellofanat","cementat","cementificat","cennat","censit","censurat","centellat","centellinat","centimetrat","centinat","centralizzat","centrat","centrifugat","centuplicat","cerat","cercat","cerchiat","cernut","certificat","cesellat","cessat","cestinat","cheratinizzat","chetat","chiamat","chiappat","chiarificat","chiarit","chiaroscurat","chiavat","chiazzat","chiest","chilificat","chilometrat","chimificat","chinat","chinizzat","chiodat","chiosat","chius","choccat","ciancicat","cianfrinat","cianfrugliat","ciangottat","ciattat","cibat","cicatrizzat","ciccat","cicchettat","ciclizzat","ciclostilat","cifrat","cilindrat","cimat","cimentat","cincischiat","cinematografat","cintat","cint","cioncat","ciondolat","circolat","circoncint","circoncis","circondat","circondott","circonfless","circonfluit","circonfus","circonscritt","circonvenut","circoscritt","circostanziat","circuit","circumcint","circumnavigat","citat","ciucciat","ciurmat","civettat","civilizzat","clamat","classat","classicizzat","classificat","cliccat","climatizzat","clivat","clonat","cloroformizzat","clorurat","clusterizzat","co-dirett","coacervat","coadiuvat","coagulat","coalizzat","coartat","coccolat","codificat","coeditat","coesistit","cofinanziat","cofirmat","cofondat","cogestit","cogitat","coglionat","cognosciut","coibentat","coincis","cointeressat","cointestat","coinvolt","cokificat","colat","colettat","collassat","collaudat","collazionat","collegat","collettivizzat","collezionat","collimat","colliquat","collis","collocat","colluttat","colmat","colonizzat","colorat","colorit","colorizzat","colpevolizzat","colpit","coltellat","coltivat","colt","coltrat","comandat","combattut","combinat","comburut","comicizzat","cominciat","commemorat","commendat","commensurat","commentat","commercializzat","commess","comminat","commiserat","commissariat","commissionat","commisurat","commoss","commutat","comodat","compaginat","comparit","compartimentalizzat","compartit","compassionat","compatibilizzat","compatit","compattat","compendiat","compenetrat","compensat","comperat","compiaciut","compiant","compilat","compitat","compiut","complessat","complessificat","compless","completat","complicat","complimentat","comportat","compostat","compost","comprat","compravendut","compres","compress","compromess","comprovat","compulsat","compunt","computat","computerizzat","comunicat","comunistizzat","concatenat","concedut","concelebrat","concentrat","concepit","concertat","concess","concettat","concettualizzat","conchius","conciat","conciliat","concimat","concitat","conclamat","conclus","concordat","concott","concretat","concretizzat","conculcat","concupit","condannat","condensat","condit","condivis","condizionat","condolut","condonat","condott","confatt","confederat","conferit","confermat","confessat","confettat","confezionat","conficcat","confidat","configurat","confinat","confint","confiscat","confitt","conformat","confortat","confricat","confrontat","confus","confutat","congedat","congegnat","congelat","congestionat","congetturat","congiunt","conglobat","conglomerat","conglutinat","congratulat","congregat","conguagliat","coniat","coniugat","connaturat","conness","connotat","connumerat","conosciut","conquistat","consacrat","consapevolizzat","consegnat","conseguit","consentit","conservat","considerat","consigliat","consistit","consociat","consolat","consolidat","consorziat","conspars","conspers","constatat","constrett","construit","consultat","consumat","consunt","contabilizzat","contagiat","containerizzat","contaminat","contat","contattat","conteggiat","contemperat","contemplat","contentat","contenut","contes","contestat","contestualizzat","contingentat","continuat","contornat","contort","contrabbandat","contraccambiat","contraddett","contraddistint","contradett","contraffatt","contrappesat","contrappost","contrappuntat","contrariat","contrassegnat","contrastat","contrat","contrattaccat","contrattat","contratt","contravvals","contristat","controbattut","controbilanciat","controdatat","controfirmat","controindicat","controllat","controminat","contronotat","contropropost","controprovat","controquerelat","controsoffittat","controstampat","controventat","conturbat","contus","convalidat","convenut","convenzionat","convertit","convint","convitat","convocat","convogliat","convolt","coobat","cooptat","coordinat","coperchiat","copert","copiaincollat","copiat","copolimerizzat","coppellat","coprodott","corazzat","corbellat","corcat","cordonat","coreografat","coricat","cornificat","coronat","corredat","correlat","corresponsabilizzat","corrett","corricchiat","corrispost","corroborat","corros","corrott","corrucciat","corrugat","cors","corteat","corteggiat","cortocircuitat","coruscat","cosat","coscritt","cospars","cospers","costatat","costeggiat","costellat","costernat","costicchiat","costipat","costituit","costituzionalizzat","costrett","costruit","costudit","cotonat","cott","covat","coventrizzat","coverchiat","craccat","creat","credut","cremat","crepat","cresciut","cresimat","crespat","criminalizzat","crioconcentrat","criptat","cristallizzat","cristianizzat","criticat","crittat","crittografat","crivellat","crocchiat","crocefiss","crocefitt","crocifiss","crocifitt","crogiolat","cromat","cronicizzat","cronometrat","crostat","crucciat","crucifiss","crucifitt","cuccat","cucinat","cucit","cullat","cumulat","cuntat","curat","curvat","curvat","custodit","customizzat","damascat","damaschinat","damat","dannat","danneggiat","danzat","dardeggiat","datat","dat","dattilografat","dattiloscritt","daziat","deacidificat","deattivat","debbiat","debellat","debilitat","decaffeinat","decaffeinizzat","decalcat","decalcificat","decantat","decapat","decapitat","decappottat","decarbossilat","decarburat","decatizzat","decelerat","decentralizzat","decentrat","decerebrat","decernut","decespugliat","deciferat","decifrat","decimalizzat","decimat","decis","declamat","declassat","declassificat","declinat","declorat","decodificat","decolonizzat","decolorat","decompartimentat","decompilat","decompost","decompress","deconcentrat","decondizionat","decongelat","decongestionat","decontaminat","decontestualizzat","decontratt","decorat","decorticat","decostruit","decrementat","decretat","decriminalizzat","decriptat","decrittat","decuplicat","decurtat","dedicat","dedott","defacciat","defalcat","defascistizzat","defecat","defenestrat","deferit","defilat","definit","defiscalizzat","defitt","deflazionat","deflemmat","deflorat","defogliat","defoliat","deforestat","deformat","defosforat","defosforilat","deframmentat","defraudat","degassat","degassificat","deglutit","degnat","degradat","degustat","deidratat","deidrogenat","deificat","deindicizzat","deindustrializzat","deionizzat","delegat","delegificat","delegittimat","delibat","deliberat","delimitat","delineat","delirat","deliziat","delocalizzat","delucidat","delus","demagnetizzat","demandat","demanializzat","demarcat","demeritat","demers","demetallizzat","demilitarizzat","demineralizzat","demistificat","demitizzat","democratizzat","demodulat","demolit","demoltiplicat","demonetat","demonetizzat","demonizzat","demoralizzat","demors","demotivat","denaturalizzat","denaturat","denazificat","denazionalizzat","denicotinizzat","denigrat","denitrificat","denocciolat","denominat","denotat","dentellat","denuclearizzat","denudat","denunciat","denunziat","deodorat","deossidat","deossigenat","deostruit","depauperat","depenalizzat","depennat","depilat","depint","depistat","deplorat","depolarizzat","depolimerizzat","depoliticizzat","depolverizzat","deportat","depositat","depost","depotenziat","depravat","deprecat","depredat","depress","depressurizzat","deprezzat","deprivat","deprotonat","depuls","depurat","dequalificat","deratizzat","derattizzat","dereferenziat","deregolamentat","deregolat","derequisit","deresponsabilizzat","deris","derubat","derubricat","desacralizzat","desalat","desalinizzat","descolarizzat","descritt","desecretat","desegretat","deselezionat","desensibilizzat","desessualizzat","desiat","desiderat","designat","desinat","desirat","desolat","desolforat","desonorizzat","desorbit","desossidat","desquamat","destabilizzat","destagionalizzat","destalinizzat","destatalizzat","destatizzat","destat","destinat","destituit","destoricizzat","destreggiat","destrutt","destrutturat","desunt","detassat","detenut","deteriorat","determinat","deters","detestat","detonat","detort","detossificat","detratt","detronizzat","dettagliat","dettat","dett","deturpat","deumidificat","devastat","deventat","deviat","deviscerat","devitalizzat","devitaminizzat","devolut","dezippat","diaframmat","diagnosticat","diagonalizzat","diagrammat","dializzat","dialogat","dialogizzat","diazotat","dibattut","diboscat","dichiarat","diesat","diesizzat","difes","diffamat","differit","diffidat","diffrant","diffratt","diffus","digerit","digitalizzat","digitat","digiunt","digrassat","digrignat","digrossat","dilacerat","dilaniat","dilapidat","dilatat","dilavat","dilazionat","dileggiat","dileguat","dilettat","dilett","diliscat","dilucidat","diluit","dilungat","dimagrat","dimandat","dimenat","dimensionat","dimenticat","dimerizzat","dimess","dimezzat","diminuit","dimissionat","dimostrat","dimunt","dinamizzat","dinoccat","dipanat","dipelat","dipint","diplomat","dipost","diradat","diramat","dirett","direzionat","dirimut","diroccat","dirottat","dirott","dirozzat","disabilitat","disabituat","disaccentat","disaccoppiat","disaccordat","disacerbat","disacidat","disacidificat","disacidit","disaerat","disaffezionat","disaggregat","disalberat","disallineat","disamat","disambiguat","disaminat","disamorat","disancorat","disanimat","disappannat","disapplicat","disappres","disapprovat","disarcionat","disarmat","disarticolat","disascost","disassemblat","disassuefatt","disatomizzat","disattes","disattivat","disattrezzat","disavvezzat","disboscat","disbrigat","discacciat","discalzat","discantat","discaricat","discernut","disces","disceverat","dischiest","dischius","discint","disciolt","disciplinat","discolorat","discolpat","discommess","discompagnat","discompost","disconclus","disconfitt","discongiunt","disconness","disconosciut","discopert","discordat","discosces","discostat","discreditat","discresciut","discriminat","discritt","discucit","discuoiat","discuss","disdegnat","disdettat","disdett","diseccat","diseccitat","diseducat","disegnat","diserbat","diseredat","disertat","disert","disfatt","disgelat","disgiunt","disgraziat","disgregat","disgustat","disidentificat","disiderat","disidratat","disillus","disimballat","disimparat","disimpegnat","disimpress","disincagliat","disincantat","disincentivat","disincrostat","disindustrializzat","disinfestat","disinfettat","disinflazionat","disinformat","disingannat","disingranat","disinibit","disinnamorat","disinnescat","disinnestat","disinquinat","disinserit","disinstallat","disintasat","disintegrat","disinteressat","disintes","disintossicat","disinvestit","disinvolt","disistimat","dislocat","dismess","disobbedit","disobbligat","disonorat","disordinat","disorganizzat","disorientat","disormeggiat","disossat","disossidat","disostruit","disotterrat","disparit","dispensat","dispent","disperdut","dispers","dispes","dispiegat","dispint","dispogliat","dispost","dispregiat","disprezzat","dispromess","disproporzionat","disputat","disqualificat","disrott","dissacrat","dissalat","dissaldat","dissanguat","dissecat","disseccat","disselciat","dissellat","disseminat","dissepolt","disseppellit","dissequestrat","disserrat","dissestat","dissetat","dissezionat","dissigillat","dissimulat","dissipat","dissociat","dissodat","dissolt","dissomigliat","dissotterrat","dissuas","dissuggellat","distaccat","distanziat","distes","distillat","distint","distolt","distort","distratt","distrett","distribuit","districat","distrigat","distrutt","disturbat","disubbidit","disumanat","disumanizzat","disunit","disusat","disvedut","disvelat","disvestit","disviat","disvist","disvolt","disvolut","dittongat","divallat","divaricat","divelt","diversificat","divertit","divezzat","divinat","divincolat","divinizzat","divis","divolt","divorat","divorziat","divulgat","documentat","dogat","dogmatizzat","dolcificat","dollarizzat","dolorat","dolut","domandat","domat","domesticat","domiciliat","dominat","donat","dondolat","dopat","doppiat","dorat","dosat","dotat","dovut","dragat","drammatizzat","drappeggiat","drenat","dribblat","drizzat","drogat","dugliat","duplicat","duramificat","ebraizzat","eccedut","eccepit","eccettuat","eccitat","echeggiat","eclissat","economizzat","edificat","editat","edott","educat","edulcorat","effettuat","efficientat","effigiat","effint","effluit","effus","egemonizzat","eguagliat","eiettat","elaborat","elargit","elasticizzat","elementarizzat","elemosinat","elencat","elett","elettrificat","elettrizzat","elettrocoagulat","elettrolizzat","elevat","eliminat","elis","elitrasportat","ellenizzat","elogiat","elucidat","elucubrat","eluit","elus","emanat","emancipat","emarginat","embricat","emendat","emess","emozionat","empit","empiut","emulat","emulsionat","emunt","encomiat","endocitat","energizzat","enfatizzat","enfiat","entusiasmat","enucleat","enumerat","enunciat","epicureggiat","epurat","equalizzat","equilibrat","equipaggiat","equiparat","eradicat","eras","ereditat","erett","erogat","eroicizzat","eros","erotizzat","erpicat","ers","erudit","eruttat","esacerbat","esagerat","esagitat","esalat","esaltat","esaminat","esasperat","esaudit","esaurit","esautorat","esborsat","esclamat","esclus","escogitat","escomiat","escoriat","escoss","escuss","esecrat","esecutat","eseguit","esemplificat","esentat","esercitat","esfoliat","esibit","esilarat","esiliat","esimut","esitat","esonerat","esorbitat","esorcizzat","esortat","espans","espars","esperimentat","esperit","espettorat","espiantat","espiat","espirat","espletat","esplicat","esplicitat","esplorat","esplos","esportat","espost","espress","espropriat","espugnat","espuls","espunt","espurgat","essiccat","essut","estasiat","estenuat","esterificat","esteriorizzat","esterminat","esternalizzat","esternat","estes","estimat","estint","estirpat","estivat","estort","estradat","estraniat","estrapolat","estratt","estremizzat","estrinsecat","estromess","estrus","estubat","esulcerat","esultat","esumat","eterificat","eterizzat","eternat","eternizzat","etichettat","etossilat","euforizzat","europeizzat","evacuat","evangelizzat","evas","evet","evidenziat","evint","evirat","eviscerat","evitat","evocat","evolt","evolut","evuls","fabbricat","faccettat","facilitat","fagocitat","falciat","falcidiat","fallit","falsat","falsificat","familiarizzat","fanatizzat","fantasticat","farcit","farfugliat","fasciat","fascicolat","fascistizzat","fattacel","fatt","fattorizzat","fatturat","favellat","favoreggiat","favorit","faxat","fecondat","fedecommess","federalizzat","federat","felicitat","felpat","feltrat","femminilizzat","fendut","ferit","fermat","fermentat","ferrat","fertilizzat","fess","fessurat","festeggiat","festonat","feudalizzat","fiaccat","fiammeggiat","fiancheggiat","ficcat","fidanzat","fidat","fidecommess","fidelizzat","figliat","figurat","filat","filettat","filmat","filosofat","filtrat","finalizzat","finanziat","finital","finit","finlandizzat","fintat","fint","fiocinat","fiondat","fiorettat","firmat","fiscalizzat","fischiat","fischiettat","fissat","fissionat","fitt","fiutat","flagellat","flaggat","flambat","flangiat","flemmatizzat","fless","flippat","flottat","fluidificat","fluidizzat","fluorizzat","fluorurat","focalizzat","focheggiat","foderat","foggiat","fognat","folgorat","follat","fomentat","fonat","fondat","foracchiat","foraggiat","forat","forestat","forfettizzat","forgiat","formalizzat","format","formattat","formilat","formulat","fornit","fortificat","forviat","forwardat","forzat","fosfatat","fosforat","fosforilat","fossilizzat","fotocompost","fotocopiat","fotografat","fottut","fracassat","fraintes","framess","frammentat","frammess","frammezzat","frammischiat","franceseggiat","francesizzat","frangiat","frant","frantumat","frappat","frappost","fraseggiat","frastagliat","frastornat","fratturat","frazionat","freddat","fregat","fregiat","frenat","frequentat","fresat","frettat","friendzonat","fritt","frizionat","frodat","frollat","fronteggiat","frugat","fruit","frullat","frusciat","frustat","frustrat","fruttat","fucilat","fucinat","fugat","fuggit","fulminat","fumat","fumigat","funestat","funt","funzionat","fuoriuscit","fuorviat","fus","fustellat","fustigat","gabbat","gabellat","gallat","gallicizzat","gallonat","galvanizzat","gambizzat","garantit","garnettat","garrotat","garzat","gasat","gassat","gassificat","gazat","gelatinizzat","gelat","gelificat","gemellat","gemicat","geminat","generalizzat","generat","gentrificat","genufless","geometrizzat","georeferenziat","gerarchizzat","germanizzat","gestit","gettat","gettonat","ghermit","ghettizzat","ghigliottinat","ghindat","gibollat","gingillat","ginnat","giocat","gioit","gionglat","giovaneggiat","giovat","girandolat","girat","giudicat","giulebbat","giuntat","giunt","giuracchiat","giurat","giustappost","giustificat","giustiziat","glamourizzat","glassat","glissat","globalizzat","gloriat","glorificat","glossat","godronat","godut","goffrat","gommat","gonfiat","googlat","gottat","governat","gradinat","gradit","gradualizzat","graduat","graffat","graffiat","graffit","graficat","grafitat","gramolat","granagliat","grandinat","granellat","granit","granulat","graticciat","graticolat","gratificat","gratinat","grattat","grattugiat","gravat","graziat","grecheggiat","grecizzat","gremit","gridat","griffat","grigliat","grippat","groccat","grondat","grugat","grugnit","guadagnat","gualcit","guardat","guarit","guarnit","guastat","guatat","guerreggiat","gufat","guidat","gustat","hackerat","handicappat","ibernat","ibridat","idealizzat","ideat","identificat","ideologizzat","idolatrat","idoleggiat","idratat","idrogenat","idrolizzat","iettat","igienizzat","ignifugat","ignorat","illanguidit","illeggiadrit","illividit","illuminat","illus","illustrat","imbacuccat","imbaldanzit","imballat","imbalsamat","imbambolat","imbandierat","imbandit","imbarbarit","imbarcat","imbarilat","imbastardit","imbastit","imbattut","imbavagliat","imbeccat","imbellettat","imbellit","imbestialit","imbestiat","imbevut","imbiaccat","imbiancat","imbianchit","imbibit","imbiettat","imbiondit","imbizzarrit","imboccat","imbonit","imborghesit","imboscat","imboschit","imbottat","imbottigliat","imbottit","imbozzimat","imbracat","imbracciat","imbragat","imbrancat","imbrattat","imbrecciat","imbrigliat","imbrillantinat","imbroccat","imbrodat","imbrogliat","imbronciat","imbruttit","imbucat","imbudellat","imbullettat","imbullonat","imburrat","imbussolat","imbustat","imbutit","imitat","immagazzinat","immaginat","immalinconit","immatricolat","immedesimat","immers","immess","immischiat","immiserit","immobilizzat","immolat","immortalat","immunizzat","immusonit","impaccat","impacchettat","impacciat","impadronit","impaginat","impagliat","impalat","impalcat","impallat","impallinat","impalmat","impaludat","impanat","impaniat","impannat","impantanat","impaperat","impapocchiat","impappinat","imparentat","imparruccat","impartit","impastat","impasticcat","impasticciat","impastocchiat","impastoiat","impataccat","impattat","impaurit","impavesat","impeciat","impedicat","impedit","impegnat","impegolat","impelagat","impellicciat","impennacchiat","impennat","impensierit","impepat","imperlat","impermalit","impermeabilizzat","imperniat","impersonat","impersonificat","impestat","impetrat","impiallacciat","impiantat","impiastrat","impiastricciat","impiccat","impicciat","impicciolit","impiccolit","impidocchiat","impiegat","impietosit","impietrit","impigliat","impigrit","impilat","impillaccherat","impinguat","impint","impinzat","impiombat","impipat","impiumat","implementat","implicat","implorat","impollinat","impolpat","impoltronit","impolverat","impomatat","imporcat","imporporat","importat","importunat","impossessat","impossibilitat","impostat","impost","impratichit","impregnat","impres","impressionat","impress","imprestat","impreziosit","imprigionat","impromess","improntat","improsciuttit","impugnat","impuntit","impunturat","impupat","imputat","impuzzolentit","inabilitat","inabissat","inacerbit","inacetit","inacidit","inacutit","inaffiat","inalat","inalberat","inalveat","inalzat","inamidat","inanellat","inarcat","inargentat","inaridit","inasprit","inastat","inattivat","inaugurat","incacchiat","incalcinat","incalorit","incalzat","incamerat","incamiciat","incamminat","incanaglit","incanalat","incannat","incannucciat","incaponit","incappottat","incappucciat","incaprettat","incapricciat","incapsulat","incarcerat","incardinat","incaricat","incarnat","incarrozzat","incartat","incartocciat","incartonat","incasellat","incasinat","incassat","incastellat","incastonat","incastrat","incatenat","incatramat","incattivit","incavat","incavigliat","incavolat","incazzat","incellofanat","incendiat","incenerit","incensat","incentivat","incentrat","inceppat","incerat","incernierat","incerottat","inces","incettat","inchiappettat","inchiavardat","inchiest","inchinat","inchiodat","inchiostrat","incipriat","incis","incistat","incitat","inciuccat","incivilit","inclinat","inclus","incoccat","incocciat","incoiat","incollat","incolonnat","incolpat","incominciat","incomodat","incontrat","incoraggiat","incordat","incornat","incorniciat","incoronat","incorporat","incott","incravattat","incrementat","increspat","incretinit","incriminat","incrinat","incrociat","incrostat","incrudelit","incrudit","incruscat","incubat","inculat","inculcat","incuneat","incuoiat","incuorat","incupit","incuriosit","incurvat","incuss","indagat","indebitat","indebolit","indemaniat","indennizzat","indett","indicat","indicizzat","indignat","indirett","indirizzat","indispettit","indispost","individualizzat","individuat","indolenzit","indorat","indossat","indott","indottom","indottrinat","indovinat","indugiat","indult","indurat","indurit","industrializzat","industriat","inebetit","inebriat","inerit","inerpicat","infagottat","infamat","infangat","infarcit","infarinat","infastidit","infatuat","infeltrit","inferit","inferocit","infert","infervorat","infestat","infettat","infeudat","infiacchit","infialat","infialettat","infiammat","infiascat","infibulat","inficiat","infilat","infiltrat","infilzat","infingardit","infinocchiat","infint","infioccat","infiocchettat","infiochit","infiorat","infirmat","infischiat","infiss","infittit","inflazionat","infless","inflitt","influenzat","infocat","infoderat","infognat","infoibat","infoltit","inforcat","informatizzat","informat","informicolat","informicolit","infornaciat","infornat","infortunat","infoscat","infossat","infradiciat","inframess","inframezzat","inframmess","inframmezzat","infrancesat","infrappost","infrascat","infrattat","infreddat","infronzolat","infuocat","infurbit","infuriat","ingabbiat","ingaggiat","ingagliardit","ingannat","ingarbugliat","ingavonat","ingegnat","ingegnerizzat","ingelosit","ingemmat","ingenerat","ingentilit","ingerit","ingessat","inghiaiat","inghiottit","inghirlandat","ingiallit","ingigantit","inginocchiat","ingioiellat","ingiunt","ingiuriat","inglesizzat","inglobat","ingoffit","ingoiat","ingolfat","ingollat","ingolosit","ingombrat","ingommat","ingorgat","ingozzat","ingranat","ingrandit","ingrassat","ingraticciat","ingraticolat","ingravidat","ingraziat","ingraziosit","ingrigit","ingrommat","ingrossat","ingrullit","inguaiat","inguainat","ingualdrappat","inguantat","ingurgitat","inibit","iniettat","inimicat","inizializzat","iniziat","inmillat","innacquat","innaffiat","innalzat","innamorat","innastat","innervat","innervosit","innescat","innestat","innevat","innocentat","innocuizzat","innovat","inoculat","inoltrat","inondat","inorgoglit","inorpellat","inorridit","inquadrat","inquietat","inquisit","insabbiat","insacchettat","insalat","insaldat","insalivat","insanguinat","insaponat","insaporit","inscatolat","inscenat","inscritt","insecchit","insediat","insegnat","inseguit","insellat","inselvatichit","inserit","insidiat","insignit","insilat","insinuat","insolentit","insonnolit","insonorizzat","insordit","insospettit","insozzat","inspessit","inspirat","installat","instaurat","insterilit","instillat","instituit","instradat","insudiciat","insufflat","insultat","insuperbit","intabaccat","intabarrat","intaccat","intagliat","intarsiat","intasat","intascat","intavolat","integrat","intelaiat","intelat","intellettualizzat","intenebrat","intenerit","intensificat","intentat","intepidit","intercalat","intercambiat","intercettat","intercis","interclus","intercollegat","interconness","interconvertit","interdett","interessat","interfacciat","interfogliat","interfoliat","interiorizzat","interlacciat","interlineat","intermess","intermezzat","internalizzat","internat","internazionalizzat","interpellat","interpenetrat","interpolat","interpost","interpretat","interpunt","interrat","interrogat","interrott","intersecat","intervallat","intervistat","intes","intessut","intestardit","intestat","intiepidit","intimat","intimidit","intimorit","intint","intirizzit","intitolat","intonacat","intonat","intontit","intorbidat","intorbidit","intorpidit","intortat","intossicat","intralciat","intramess","intramezzat","intrappolat","intrapres","intrattenut","intravedut","intravist","intravvedut","intravvist","intrecciat","intricat","intrigat","intrinsecat","intrippat","intris","introdott","introfless","introiettat","introitat","intromess","intronat","intronizzat","intrudut","intrufolat","intrugliat","intruppat","intrus","intubat","intubettat","intuit","inumat","inumidit","inurbat","inutilizzat","invaghit","invaginat","invalidat","invasat","invas","invelenit","inventariat","inventat","invenut","inverdit","invergat","inverniciat","investigat","investit","invetriat","inviat","invidiat","invigorit","inviluppat","invischiat","invitat","invocat","invogliat","involat","involgarit","involtat","involt","inzaccherat","inzeppat","inzigat","inzolfat","inzuccat","inzuccherat","inzuppat","iodurat","ionizzat","ipertrofizzat","ipnotizzat","ipostatizzat","ipotecat","ipotizzat","iridat","irradiat","irraggiat","irreggimentat","irretit","irrigat","irrigidit","irris","irritat","irrobustit","irrogat","irrorat","irrugginit","irruvidit","ischeletrit","iscritt","islamizzat","isolat","isomerizzat","ispanizzat","ispessit","ispezionat","ispirat","issat","istallat","istanziat","istaurat","isterilit","istigat","istillat","istituit","istituzionalizzat","istoriat","istradat","istruit","istupidit","italianeggiat","italianizzat","iterat","iudicat","killerat","labbreggiat","labializzat","laccat","lacerat","laconizzat","lacrimat","ladroneggiat","lagnat","lagrimat","laicizzat","lambiccat","lambit","lamentat","laminat","lanciat","lapidat","lappat","lardat","lardellat","largit","larvat","lascat","lasciat","lastricat","latinizzat","laudat","laureat","lavat","lavorat","leccat","legalizzat","legat","leggicchiat","leggiucchiat","legittimat","legittimizzat","legnat","lemmatizzat","lenit","lesinat","lesionat","les","lessat","lett","levat","levigat","liberalizzat","liberat","licenziat","lievitat","liftat","lignificat","limat","limitat","linciat","linearizzat","lineat","linkat","liofilizzat","liquefatt","liquidat","lisat","lisciat","lisciviat","listat","litografat","livellat","lizzat","lobotomizzat","localizzat","locat","lodat","logorat","lordat","lottat","lottizzat","lubrificat","lucchettat","lucidat","lucrat","lumeggiat","luppolizzat","lusingat","lussat","lustrat","macadamizzat","macchiat","macchinat","macellat","macerat","macinat","maciullat","maggesat","maggiorat","magnat","magnetizzat","magnificat","maiolicat","maledett","malfatt","malignat","malmenat","malmess","maltat","maltrattat","malvedut","malversat","malvist","malvolut","mandat","mandrinat","manducat","maneggiat","manganat","manganellat","mangiat","mangiucchiat","manifatturat","manifestat","manimess","manipolat","manlevat","manomess","manoscritt","manovrat","mansuefatt","mantecat","mantenutas","mantenut","manualizzat","manutenut","mappat","marcat","marchiat","marcit","marezzat","marginalizzat","marginat","margottat","marimess","marinat","maritat","marmorizzat","marnat","marocchinat","martellat","martellinat","martirizzat","martoriat","mascherat","maschiat","maschiettat","mascolinizzat","massacrat","massaggiat","massellat","massicciat","massificat","massimat","massimizzat","mastectomizzat","masterizzat","masticat","masturbat","matematizzat","materializzat","matricolat","mattonat","maturat","mazziat","mazzolat","meccanizzat","medagliat","mediat","medicalizzat","medicat","meditat","membrat","memorizzat","menat","mendicat","menomat","mentovat","menzionat","meravigliat","mercanteggiat","mercerizzat","mercificat","meriat","meridionalizzat","meritat","merlat","merlettat","mers","mesciat","mesciut","mescolat","mescut","mesmerizzat","messaggiat","mess","messoc","mestat","mesticat","mestruat","metabolizzat","metaforeggiat","metaforizzat","metallizzat","metamorfizzat","metamorfosat","metanizzat","metilat","metodizzat","microfilmat","microfonat","microminiaturizzat","micronizzat","mietut","migliorat","militarizzat","millantat","millimetrat","mimat","mimeografat","mimetizzat","minacciat","minat","minchionat","mineralizzat","miniat","miniaturizzat","minimizzat","minuit","minuzzat","miracolat","miscelat","mischiat","misconosciut","missat","mistificat","misturat","misurat","miticizzat","mitigat","mitizzat","mitragliat","mitrat","mixat","mobiliat","mobilitat","mobilizzat","modanat","modellat","modellizzat","moderat","modernizzat","modificat","modulat","molat","molestat","mollat","molleggiat","moltiplicat","monacat","mondat","mondializzat","monetarizzat","monetat","monetizzat","monitorat","monitorizzat","monocromatizzat","monopolizzat","monottongat","montat","monumentalizzat","mordenzat","mordicchiat","mormorat","morphat","morsicat","morsicchiat","mors","mortasat","mortificat","moss","mostrat","motivat","motorizzat","motteggiat","movimentat","mozzat","mugolat","mulcit","multat","multiplexat","mummificat","municipalizzat","munit","munt","murat","musat","musicat","mussat","mutat","mutilat","mutizzat","mutuat","nappat","narcotizzat","narrativizzat","narrat","nasalizzat","nascos","nascost","nastrat","naturaleggiat","naturalizzat","nauseat","naverat","navicat","navigat","nazificat","nazionalizzat","nebulizzat","necessitat","necrosat","necrotizzat","negat","negativizzat","neglett","negoziat","negreggiat","neologizzat","nerbat","nericat","nettat","neutralizzat","nevat","nevicat","nevischiat","nevrotizzat","nichelat","niellat","ninfeggiat","ninnat","ninnolat","nitratat","nitrificat","nobilitat","noiat","noleggiat","nomat","nominalizzat","nominat","normalizzat","normat","notat","notificat","notiziat","notricat","noverat","nuclearizzat","nudricat","nullificat","numerat","numerizzat","nuotat","nutrit","obbiettat","obbliat","obbligat","oberat","obiettat","obiettivat","obiettivizzat","obiurgat","obliat","obliterat","obnubilat","occasionat","occhieggiat","occidentalizzat","occis","occlus","occultat","occupat","ocheggiat","odiat","odorat","odorizzat","offerit","offert","offes","officiat","offiziat","offuscat","ofiziat","oggettivat","oggettivizzat","oggettualizzat","oliat","olit","olografat","oltraggiat","oltrapassat","oltrepassat","omaggiat","ombrat","ombreggiat","omess","omogeneizzat","omogenizzat","omologat","ondat","ondulat","onestat","onnubilat","onorat","opacat","opacizzat","operat","opinat","oppiat","oppignorat","oppilat","oppost","oppress","oppugnat","oprat","opsonizzat","optat","opzionat","orbitat","orchestrat","ordinat","ordit","orecchiat","organat","organicat","organizzat","orgasmat","orientalizzat","orientat","originat","origliat","orizzontat","orlat","orlettat","ormat","ormeggiat","ornat","orpellat","orrat","orripilat","ortogonalizzat","osannat","osat","osculat","oscurat","ospedalizzat","ospitat","ossedut","ossequiat","osservat","ossessionat","ossidat","ossificat","ossitonizzat","ostacolat","osteggiat","ostentat","ostinat","ostracizzat","ostruit","ottemperat","ottenebrat","ottenut","ottimalizzat","ottimat","ottimizzat","ottonat","ottriat","ottuplicat","otturat","ottus","ottuss","ovalizzat","ovariectomizzat","ovattat","overcloccat","ovrat","ovviat","ozieggiat","ozonizzat","pacat","pacciamat","pacificat","padroneggiat","paganizzat","pagat","paginat","palafittat","palatalizzat","palat","palesat","palettat","palettizzat","palificat","palleggiat","pallettizzat","palpat","palpeggiat","panat","panneggiat","panoramicat","pappat","paracadutat","parafat","paraffinat","parafrasat","paragonat","paragrafat","paralizzat","parallelizzat","parametrat","parametrizzat","parassitat","parat","parcat","parcellizzat","parcheggiat","pareggiat","parificat","parkerizzat","parlat","parlucchiat","parodiat","partecipat","particolareggiat","particolarizzat","partizionat","partorit","parzializzat","pasciut","pascolat","passat","passeggiat","passionat","passivat","pasticciat","pastorizzat","pasturat","patinat","patit","patrocinat","patteggiat","pattugliat","pattuit","paventat","pavesat","pavimentat","pavoneggiat","pazziat","pedinat","pedonalizzat","peggiorat","pelat","pellettizzat","penalizzat","penetrat","pennellat","pensat","pensionat","pentit","pepat","peptonizzat","peragrat","percentualizzat","percepit","percolat","percors","percoss","perdonat","perdott","perdut","perequat","perfatt","perfezionat","perforat","performat","perit","periziat","perlustrat","permeat","permess","perorat","perpetrat","perpetuat","perplimut","perquisit","perscrutat","perseguitat","perseguit","pers","personalizzat","personificat","persuas","perturbat","pervas","pervertit","pesat","pescat","pestat","petrarcheggiat","pettegolat","pettinat","piagat","piaggiat","piallat","pianeggiat","pianificat","piantat","piantatal","piantat","piant","piantonat","piantumat","piastrellat","piatit","piazzat","picchettat","picchiat","picchierellat","picchiettat","picconat","piegat","pieghettat","pietrificat","pigiat","pigliat","pigmentat","pignorat","pigolat","pilotat","pimentat","pint","pinzat","piombat","piovigginat","piovut","pipat","pippat","piratat","pirogenat","pisciat","pitoccat","pittat","pitturat","pizzicat","pizzicottat","placat","placcat","plagiat","plasmat","plasticat","plastificat","platinat","plissettat","pluralizzat","poetat","poeticizzat","poggiat","polarizzat","poligrafat","polimerizzat","politicizzat","polverizzat","pomiciat","pompat","ponderat","ponzat","popolarizzat","popolat","poppat","porcellanat","porfirizzat","portat","portes","port","porzionat","posat","posdatat","positivizzat","posizionat","pospost","possedut","postat","postdatat","posteggiat","posticipat","postillat","post","postsincronizzat","postulat","potabilizzat","potat","potenziat","potut","pralinat","praticat","preaccennat","preannunciat","preannunziat","preavvertit","preavvisat","precaricat","precedut","precettat","precint","precisat","preclus","precompilat","precompress","preconfezionat","preconizzat","preconosciut","precors","precostituit","predat","predefinit","predestinat","predeterminat","predett","predicat","predigerit","predilett","predispost","preelett","preesistut","prefabbricat","prefat","prefatt","prefazionat","preferit","prefigurat","prefinanziat","prefissat","prefiss","preformat","pregat","pregiat","pregiudicat","pregustat","preimpregnat","prelevat","premeditat","premescolat","premess","premiat","premonit","premunit","premurat","premut","prenotat","preoccupat","preordinat","preparat","prepensionat","prepigmentat","prepost","preprogrammat","preraffreddat","prerefrigerat","preregistrat","preregolat","preriscaldat","pres","presagit","presaput","presasel","prescelt","prescritt","presedut","presegnalat","preselezionat","presentat","presentit","preservat","presidiat","presiedut","pres","pressat","press","pressurizzat","prestabilit","prestampat","prestat","prestigiat","presunt","presuppost","pretermess","pretes","pretrattat","prevaricat","prevedut","prevendut","preventivat","prevenut","previst","prezzat","prezzolat","principiat","privatizzat","privat","privilegiat","problematizzat","procacciat","processat","proclamat","procrastinat","procreat","procurat","prodigat","prodott","profanat","proferit","professat","professionalizzat","profetat","profetizzat","profferit","profilat","profondat","profumat","profus","progettat","prognosticat","programmat","proibit","proiettat","proletarizzat","prolungat","promanat","promess","promoss","promozionat","promulgat","pronosticat","pronunciat","pronunziat","propagandat","propagat","propagginat","propalat","propinat","propiziat","proporzionat","propost","propugnat","propuls","prorogat","prosciolt","prosciugat","proscritt","proseguit","prospettat","prosternat","prostes","prostituit","prostrat","prosunt","protes","protestat","protett","protocollat","protonat","protratt","protrus","provat","provedut","provincializzat","provist","provocat","provvedut","provvist","psicanalizzat","psichiatrizzat","psicoanalizzat","psicologizzat","pubblicat","pubblicizzat","puddellat","pugnalat","pulit","pungolat","punit","puntat","punteggiat","puntellat","punt","puntualizzat","punzecchiat","punzonat","purgat","purificat","putit","putrefatt","putrit","quadrat","quadrettat","quadriennalizzat","quadruplicat","qualificat","quantificat","quantizzat","querelat","questuat","quetat","quietanzat","quietat","quintessenziat","quintuplicat","quotat","quotizzat","rabberciat","rabboccat","rabbonit","rabbuffat","rabuffat","raccapezzat","raccapricciat","raccattat","raccerchiat","racces","racchetat","racchius","raccolt","raccolt","raccomandat","raccomodat","raccontat","raccorciat","raccorcit","raccordat","raccostat","raccozzat","racemizzat","racimolat","radazzat","raddensat","raddobbat","raddolcit","raddoppiat","raddott","raddrizzat","radiat","radicalizzat","radioassistit","radioattivat","radiocomandat","radiodiffus","radiografat","radioguidat","radiolocalizzat","radiomarcat","radiotelegrafat","radiotrasmess","radunat","raffazzonat","raffermat","raffigurat","raffilat","raffinat","rafforzat","raffreddat","raffrenat","raffrescat","raffrontat","raggelat","raggentilit","ragghiat","raggirat","raggiunt","raggiustat","raggomitolat","raggranchiat","raggranchit","raggranellat","raggrinzat","raggrinzit","raggrumat","raggruppat","raggruzzolat","ragguagliat","ralingat","rallegrat","rallentat","ramat","ramazzat","rammagliat","rammaricat","rammemorat","rammendat","rammentat","rammodernat","rammollit","rammorbidit","rampognat","randellat","randomizzat","rannicchiat","rannuvolat","ranzat","rapat","rapinat","rapit","rappacificat","rappat","rappattumat","rappezzat","rapportat","rappresantat","rappresentat","rappres","rarefatt","rasat","raschiat","raschiettat","rasentat","ras","raspat","rassegnat","rasserenat","rassettat","rassicurat","rassodat","rassomigliat","rassottigliat","rassunt","rastrellat","rastremat","rateat","rateizzat","ratificat","ratinat","rattizzat","rattoppat","rattort","rattrappit","rattristat","rattristit","raunat","ravvalorat","ravvedut","ravviat","ravvicinat","ravviluppat","ravvisat","ravvist","ravvivat","ravvolt","ravvoltolat","razionalizzat","razionat","razziat","razzolat","realizzat","reassunt","recapitat","recat","recedut","recensit","recepit","recidivat","recintat","recint","reciprocat","recis","recitat","reclamat","reclamizzat","reclinat","reclus","reclutat","recuperat","redarguit","redatt","redazzat","reddut","redent","redistribuit","redott","referenziat","refertat","refilat","refless","reflettut","refrant","refrigerat","regalat","regimat","regimentat","regionalizzat","registrat","regolamentat","regolarizzat","regolat","reidratat","reificat","reimbarcat","reimmers","reimmess","reimparat","reimpastat","reimpiantat","reimpiegat","reimportat","reimpostat","reincarcerat","reincaricat","reincarnat","reincis","reincontrat","reindirizzat","reindustrializzat","reinfettat","reingaggiat","reinizializzat","reinnestat","reinoltrat","reinscritt","reinsediat","reinserit","reinstallat","reinstaurat","reintegrat","reinterpretat","reintitolat","reintrodott","reinventat","reinvestit","reiterat","relativizzat","relazionat","relegat","remixat","remunerat","renderizzat","reperit","repertat","replicat","repress","repuls","reputat","requisit","resciss","resecat","resettat","residuat","resinificat","res","resolat","resolt","respint","respirat","responsabilizzat","respost","restaurat","restituit","resunt","resuscitat","reticolat","retinat","retribuit","retrocedut","retrocess","retrodatat","rettificat","rett","reumatizzat","revisionat","revocat","riabbassat","riabbellit","riabbonat","riabbottonat","riabbracciat","riabilitat","riabitat","riabituat","riaccadut","riaccasat","riacces","riaccettat","riacchiappat","riacciuffat","riaccolt","riaccomodat","riaccompagnat","riaccordat","riaccostat","riaccreditat","riacquisit","riacquistat","riacutizzat","riadattat","riaddestrat","riaddormentat","riadoperat","riaffacciat","riaffermat","riafferrat","riaffiorat","riaffittat","riaffrontat","riagganciat","riaggiornat","riaggiustat","riaggravat","riaggregat","riagguantat","rialimentat","riallacciat","riallargat","riallineat","riallocat","riallungat","rialzat","riamat","riambientat","riammalat","riammess","riammodernat","riammogliat","rianimat","rianness","riannodat","riannunciat","riapert","riappacificat","riappaltat","riapparecchiat","riapparit","riappes","riappiccicat","riapplicat","riappres","riapprodat","riappropriat","riapprovat","riarmat","riarrangiat","riarredat","riascoltat","riasfaltat","riassalit","riassaporat","riassegnat","riassemblat","riassestat","riassettat","riassicurat","riassociat","riassopit","riassorbit","riassunt","riattaccat","riattat","riattes","riattint","riattivat","riattizzat","riattraversat","riaumentat","riavut","riavventat","riavvertit","riavviat","riavvicinat","riavvint","riavvisat","riavvistat","riavvolt","riazzuffat","ribaciat","ribadit","ribaltat","ribassat","ribattezzat","ribattut","ribellat","ribenedett","ribevut","ributtat","ricacciat","ricalat","ricalcat","ricalcificat","ricalcitrat","ricalcolat","ricalibrat","ricamat","ricambiat","ricanalizzat","ricandidat","ricantat","ricapitalizzat","ricapitolat","ricaricat","ricategorizzat","ricattat","ricavat","ricelebrat","ricercat","ricetrasmess","ricettat","ricevut","richiamat","richiest","richius","riciclat","ricint","ricircolat","riclassificat","ricodificat","ricollegat","ricollocat","ricolmat","ricolonizzat","ricolorat","ricolorit","ricoltivat","ricombinat","ricominciat","ricommess","ricomparit","ricompattat","ricompensat","ricomperat","ricompilat","ricompiut","ricompost","ricomprat","ricompress","ricomunicat","riconcedut","riconcess","riconciliat","ricondizionat","ricondott","riconfermat","riconfezionat","riconfigurat","riconfortat","riconfus","ricongelat","ricongiunt","riconness","riconosciut","riconquistat","riconsacrat","riconsegnat","riconsiderat","riconsigliat","riconsolat","ricontat","ricontattat","ricontrattat","ricontratt","ricontrollat","riconvalidat","riconvenut","riconvertit","riconvint","riconvocat","riconvogliat","ricopert","ricopiat","ricordat","ricoricat","ricorrett","ricospars","ricostituit","ricostrett","ricostruit","ricott","ricoverat","ricreat","ricristallizzat","ricrocifiss","ricucit","ricuperat","ricusat","ridat","ridecorat","ridefinit","ridenominat","ridestat","rideterminat","ridett","ridicolizzat","ridigitat","ridimensionat","ridipint","ridisces","ridisciolt","ridisciplinat","ridiscuss","ridisegnat","ridisfatt","ridispost","ridistes","ridistint","ridistribuit","ridivis","ridomandat","ridonat","ridondat","ridorat","ridotat","ridott","ridovut","riecheggiat","riedificat","rieducat","rielaborat","rielett","riemess","riempit","riempiut","rientrat","riepilogat","riequilibrat","riequipaggiat","riesaminat","rieseguit","riesercitat","riesplos","riesportat","riespost","riespress","riespuls","riestes","riesumat","rietichettat","rievaporat","rievocat","rifabbricat","rifasciat","rifatt","rifendut","riferit","rifermat","rifermentat","rifess","rificcat","rifilat","rifiltrat","rifinanziat","rifinit","rifirmat","rifischiat","rifiss","rifiutat","rifless","riflettut","rifocillat","rifoderat","rifondat","riforestat","riforgiat","riformat","riformattat","riformulat","rifornit","rifrant","rifritt","rifrugat","rifuggit","rifugiat","rifus","rigassificat","rigat","rigelat","rigenerat","rigettat","righettat","rigiocat","rigirat","rigiudicat","rigiunt","rigodut","rigonfiat","rigovernat","riguadagnat","riguardat","rigurgitat","rilanciat","rilasciat","rilassat","rilavat","rilavorat","rilegat","rilett","rilevat","rilocalizzat","rimagliat","rimandat","rimaneggiat","rimangiat","rimappat","rimarcat","rimarchiat","rimarginat","rimaritat","rimasticat","rimat","rimbacuccat","rimbaldanzit","rimbarcat","rimbeccat","rimbecillit","rimbellit","rimbiancat","rimbiondit","rimboccat","rimbombat","rimborsat","rimboscat","rimboschit","rimbrottat","rimediat","rimembrat","rimemorat","rimenat","rimeritat","rimescolat","rimess","rimestat","rimilitarizzat","rimirat","rimischiat","rimisurat","rimodellat","rimodernat","rimodulat","rimondat","rimontat","rimorchiat","rimors","rimoss","rimostrat","rimotivat","rimpacchettat","rimpadronit","rimpaginat","rimpagliat","rimpannucciat","rimpastat","rimpatriat","rimpiallacciat","rimpiant","rimpiattat","rimpiazzat","rimpicciolit","rimpiccolit","rimpiegat","rimpinguat","rimpinzat","rimpolpat","rimpossessat","rimpress","rimproverat","rimuginat","rimunerat","rimunt","rimusicat","rimutat","rinarrat","rinascost","rincalcat","rincalzat","rincamminat","rincantucciat","rincarat","rincarcerat","rincarnat","rincentrat","rinchiest","rinchiodat","rinchius","rincitrullit","rincivilit","rincoglionit","rincollat","rincominciat","rincontrat","rincoraggiat","rincorat","rincorporat","rincors","rincretinit","rincrudit","rinculcat","rincuorat","rindossat","rindurit","rinegoziat","rinfacciat","rinfagottat","rinfiammat","rinfiancat","rinfilat","rinfittit","rinfocolat","rinfoderat","rinforzat","rinfrancat","rinfrant","rinfrescat","rinfus","ringagliardit","ringalluzzit","ringiovanit","ringiovenit","ringoiat","ringorgat","ringraziat","ringuainat","rinnamorat","rinnegat","rinnestat","rinnovat","rinnovellat","rinociut","rinomat","rinominat","rinormalizzat","rinquadrat","rinsaccat","rinsaldat","rinsanguat","rinselvatichit","rinselvat","rinserrat","rintanat","rintasat","rintascat","rintavolat","rintenerit","rinterrat","rinterrogat","rintes","rintiepidit","rintoccat","rintonacat","rintontit","rintorpidit","rintracciat","rintrodott","rintronat","rintuzzat","rinunciat","rinunziat","rinutrit","rinvangat","rinvasat","rinvenut","rinverdit","rinvestit","rinviat","rinvigorit","rinvilit","rinvitat","rinvoltat","rinvolt","rinvoltolat","rinzaffat","rinzeppat","riobbligat","rioccupat","rioffert","rioffes","rioperat","riordinat","riorganizzat","riorientat","riosservat","riottenut","riottimizzat","riotturat","ripagat","riparametrizzat","riparat","ripartit","ripassat","ripercors","ripercoss","riperdut","ripers","ripesat","ripescat","ripestat","ripetut","ripianat","ripianificat","ripiantat","ripiant","ripicchiat","ripiegat","ripigliat","ripint","ripiovut","ripitturat","riplasmat","ripolarizzat","ripopolat","riportat","riport","riposat","riposizionat","ripossedut","ripost","ripotut","ripresentat","ripres","riprestat","ripretes","riprincipiat","ripristinat","riprivatizzat","riprodott","riprogettat","riprogrammat","ripromess","ripropost","riprotett","riprovat","riprovvedut","riprovvist","ripubblicat","ripudiat","ripugnat","ripulit","ripuntat","ripunt","ripurgat","riputat","riquadrat","riqualificat","rires","rirott","risaldat","risalit","risaltat","risalutat","risanat","risaput","risarcit","riscalat","riscaldat","riscattat","riscelt","risces","rischiarat","rischiat","risciacquat","risciolt","riscommess","riscontat","riscontrat","risconvolt","riscopert","riscoppiat","riscors","riscoss","riscritt","risecat","risedut","risegat","risegnat","riselciat","riselezionat","riseminat","risentit","riseppellit","riserbat","riservat","risicat","risigillat","risistemat","ris","risoffiat","risoggiunt","risolat","risolidificat","risollevat","risolt","risommat","risommers","risonat","risorpassat","risospes","risospint","risottomess","risparmiat","rispars","rispecchiat","rispedit","rispent","rispers","rispettat","rispiegat","rispint","rispolverat","risposat","rispost","rissat","ristabilit","ristagnat","ristampat","ristaurat","ristes","ristilizzat","ristorat","ristrett","ristrutt","ristrutturat","ristuccat","ristudiat","risucchiat","risultat","risuolat","risuonat","risuscitat","risvegliat","risvolt","ritagliat","ritarat","ritardat","ritemprat","ritentat","ritenut","riters","rites","ritint","ritirat","ritoccat","ritolt","ritort","ritracciat","ritradott","ritrascors","ritrascritt","ritrasferit","ritrasformat","ritrasmess","ritraspost","ritrattat","ritratt","ritrovat","ritualizzat","rituffat","riudit","riunificat","riunit","riusat","riutilizzat","rivaccinat","rivaleggiat","rivalorizzat","rivals","rivalutat","rivangat","rivedut","rivelat","rivendicat","rivendut","riverberat","riverit","riverniciat","riversat","rivestit","rivettat","rivint","rivisitat","rivissut","rivist","rivitalizzat","rivivificat","rivoltat","rivolt","rivoltolat","rivolut","rivoluzionat","rizappat","rizzat","robotizzat","rodat","rogat","rollat","romanizzat","romanticizzat","romanzat","roncolat","rosicat","rosicchiat","ros","rosolat","rotacizzat","rotat","roteat","rotolat","rottamat","rott","rovesciat","rovinat","rovistat","rubacchiat","rubat","rullat","ruminat","ruotat","russificat","ruzzolat","sabbiat","sabotat","saccarificat","saccheggiat","sacralizzat","sacramentat","sacrificat","saettat","saggiat","sagginat","sagomat","salamoiat","salariat","salassat","salat","saldat","salificat","salinizzat","salit","salmeggiat","salmistrat","salpat","saltat","salutat","salvaguardat","salvat","sanat","sancit","sanforizzat","sanificat","sanitizzat","santificat","sanzionat","saponificat","saput","sarchiat","sarchiellat","sartiat","satellizzat","satinat","satireggiat","satisfatt","satollat","saturat","saziat","sbaccellat","sbaciucchiat","sbafat","sbaffat","sbalestrat","sballat","sballottat","sballottolat","sbalordit","sbalzat","sbancat","sbandat","sbandierat","sbandit","sbaraccat","sbaragliat","sbarazzat","sbarbat","sbarcat","sbardat","sbarrat","sbassat","sbastit","sbatacchiat","sbattezzat","sbattut","sbeccat","sbeffeggiat","sbellicat","sbendat","sbertucciat","sbiadit","sbiancat","sbianchit","sbiellat","sbiettat","sbigottit","sbilanciat","sbirbat","sbirciat","sbizzarrit","sbloccat","sbobinat","sboccat","sbocconcellat","sbollentat","sbolognat","sborniat","sborsat","sboscat","sbottonat","sbozzat","sbozzimat","sbozzolat","sbracat","sbracciat","sbraciat","sbraitat","sbranat","sbrancat","sbrattat","sbreccat","sbriciolat","sbrigat","sbrigliat","sbrinat","sbrindellat","sbrodolat","sbrogliat","sbronzat","sbruffat","sbucciat","sbudellat","sbuffat","sbugiardat","sbullettat","sbullonat","sburrat","scacazzat","scacchiat","scacciat","scaccolat","scadenzat","scafat","scaffalat","scagionat","scagliat","scaglionat","scalat","scalcat","scalcinat","scaldat","scalettat","scalfat","scalfit","scalmanat","scaloppat","scalpat","scalpellat","scalpellinat","scaltrit","scalzat","scambiat","scamiciat","scamosciat","scamozzat","scampat","scampatal","scampat","scamuffat","scanalat","scancellat","scandagliat","scandalizzat","scandit","scannat","scannellat","scannerat","scannerizat","scannerizzat","scansat","scansionat","scapecchiat","scapezzat","scapicollat","scapigliat","scapitozzat","scapocchiat","scappat","scappellat","scappottat","scapricciat","scapsulat","scarabocchiat","scaracchiat","scaraventat","scarcerat","scardassat","scardat","scardinat","scaricat","scarificat","scarmigliat","scarnat","scarnificat","scarnit","scarrellat","scarrocciat","scarrozzat","scarruffat","scartabellat","scartat","scartavetrat","scartinat","scartocciat","scassat","scassinat","scatenat","scattat","scavalcat","scavallat","scavat","scavezzat","scazzottat","scekerat","scelt","scempiat","sceneggiat","scernut","scervellat","sces","sceverat","schedat","schedulat","scheggiat","scheletrit","schematizzat","schermat","schermit","schermografat","schernit","schiacciat","schiaffat","schiaffeggiat","schiantat","schiarit","schiavardat","schiavizzat","schiccherat","schierat","schifat","schinciat","schioccat","schiodat","schiumat","schius","schivat","schizzat","schizzettat","sciabolat","sciabordat","sciacquat","scialacquat","sciamanizzat","sciamannat","sciancat","sciancrat","scimmieggiat","scimmiottat","scint","scioccat","sciolinat","sciolt","sciorinat","scippat","sciroppat","sciss","sciupacchiat","sciupat","sclamat","sclerosat","sclerotizzat","scoccat","scocciat","scodat","scodellat","scoiat","scolarizzat","scolat","scollacciat","scollat","scollegat","scolorat","scolorit","scolpat","scolpit","scombaciat","scombinat","scombussolat","scommess","scomodat","scompaginat","scompagnat","scompartit","scompattat","scompensat","scompiacut","scompigliat","scompost","scomputat","scomunicat","sconcertat","sconciat","sconclus","sconfessat","sconficcat","sconï¬tt","sconfortat","sconfus","scongelat","scongiurat","sconness","sconosciut","sconquassat","sconsacrat","sconsigliat","sconsolat","scontat","scontentat","scontornat","scontort","scontrat","sconvolt","scopat","scoperchiat","scopert","scopiazzat","scoraggiat","scoraggit","scorat","scorazzat","scorciat","scorcit","scordat","scoreggiat","scorificat","scornat","scorniciat","scoronat","scorporat","scorrazzat","scorreggiat","scorrett","scors","scortat","scortecciat","scorticat","scort","scorzat","scosces","scosciat","scoss","scostat","scostolat","scotennat","scoticat","scotolat","scotomizzat","scottat","scott","scovat","scovert","scozzat","scozzonat","screditat","scremat","screpolat","screziat","scribacchiat","scriminat","scristianizzat","scritt","scritturat","scroccat","scrocchiat","scrollat","scrostat","scrutat","scrutinat","scucit","scudisciat","scuffiat","sculacciat","sculettat","scuoiat","scuriosat","scurit","scusat","sdaziat","sdebitat","sdegnat","sdemanializzat","sdentat","sdilinquit","sdoganat","sdolut","sdoppiat","sdraiat","sdrammatizzat","sdrucit","secat","seccat","secernut","secolarizzat","secondat","secretat","secret","sedat","sedentarizzat","sedott","segat","seghettat","segmentat","segnalat","segnat","segnoreggiat","segregat","segretat","seguitat","seguit","selciat","selezionat","sellat","sembrat","sementat","semicint","seminat","semplificat","senilizzat","sensibilizzat","sensorizzat","sentenziat","sentit","sentitasel","sentit","sentit","separat","sepolt","seppellit","sequenziat","sequestrat","serbat","serrat","servit","servoassistit","sessualizzat","sestuplicat","setacciat","setificat","settat","settorializzat","settuplicat","seviziat","sezionat","sfaccettat","sfagliat","sfaldat","sfalsat","sfamat","sfanalat","sfangat","sfarinat","sfasat","sfasciat","sfatat","sfatt","sfavillat","sfavorit","sfegatat","sfeltrat","sfendut","sferragliat","sferrat","sferzat","sfess","sfiancat","sfiatat","sfiat","sfibbiat","sfibrat","sfidat","sfiduciat","sfigurat","sfilat","sfilettat","sfinit","sfioccat","sfiorat","sfittat","sfocat","sfociat","sfoderat","sfogat","sfoggiat","sfogliat","sfollat","sfoltit","sfondat","sforacchiat","sforat","sforbiciat","sformat","sfornaciat","sfornat","sfornit","sforzat","sfottut","sfracellat","sfrangiat","sfrascat","sfratat","sfrattat","sfrecciat","sfregat","sfregiat","sfrenat","sfrisat","sfrondat","sfrucugliat","sfruculiat","sfruttat","sfumat","sfuocat","sgamat","sganasciat","sganciat","sgarbugliat","sgattaiolat","sgelat","sghiacciat","sgocciolat","sgolat","sgomberat","sgombrat","sgomentat","sgominat","sgomitat","sgomitolat","sgonfiat","sgorbiat","sgottat","sgovernat","sgozzat","sgraffiat","sgraffignat","sgranat","sgranchit","sgranellat","sgrassat","sgravat","sgretolat","sgridat","sgrommat","sgrondat","sgroppat","sgrossat","sgrovigliat","sgrugnat","sguainat","sgualcit","sguanciat","sguarnit","sguinzagliat","sgusciat","shakerat","shoccat","shuntat","sigillat","siglat","significat","signoreggiat","silenziat","silicizzat","sillabat","sillogizzat","silurat","simboleggiat","simbolizzat","simmetrizzat","simpatizzat","simulat","sincerat","sincopat","sincretizzat","sincronizzat","sindacalizzat","sindacat","singolarizzat","sinistrat","sinizzat","sinterizzat","sintetizzat","sintonizzat","siringat","sistematizzat","sistemat","situat","slabbrat","slacciat","slamat","slanciat","slappolat","slargat","slavizzat","slegat","slentat","slinguat","slogat","sloggat","sloggiat","slombat","slungat","smaccat","smacchiat","smagliat","smagnetizzat","smagrit","smaliziat","smallat","smaltat","smaltit","smammat","smanacciat","smangiat","smantellat","smarcat","smarginat","smarrit","smascellat","smascherat","smaterializzat","smattonat","smembrat","smentit","smerciat","smerdat","smerigliat","smerlat","smerlettat","smessal","smess","smezzat","smidollat","smielat","smilitarizzat","sminat","sminuit","sminuzzat","smistat","smitizzat","smobiliat","smobilitat","smobilizzat","smoccolat","smollicat","smonacat","smontat","smorbat","smorzat","smoss","smozzicat","smunt","smurat","smussat","smutandat","snaturat","snazionalizzat","snebbiat","snellit","snervat","snidat","sniffat","snobbat","snocciolat","snodat","snudat","sobbarcat","sobbollit","sobillat","socchius","soccors","soddisfatt","sodisfatt","sodomizzat","sofferit","soffermat","soffert","soffiat","soffocat","soffregat","soffritt","soffus","sofisticat","soggettivat","soggettivizzat","sogghignat","soggiogat","soggiunt","sogguardat","sognat","solarizzat","solcat","soleggiat","solennizzat","solfeggiat","solfitat","solfonat","solforat","solidificat","solit","sollazzat","sollecitat","solleticat","sollevat","solt","solubilizzat","solut","soluzionat","solvatat","somatizzat","someggiat","somigliat","sommat","sommers","sommess","somministrat","sommoss","sonat","sondat","sonorizzat","sopit","soppalcat","soppesat","soppiantat","sopportat","soppost","soppress","sopraddotat","sopraeccitat","sopraedificat","sopraelevat","sopraffat","sopraffatt","sopraggiunt","sopraintes","soprammess","soprannominat","soprapost","soprappres","soprascritt","sopraspes","soprassaturat","soprassedut","sopravanzat","sopravvalutat","sopravvedut","sopravvint","sopravvist","sopreccitat","sopredificat","soprelevat","soprintes","sorbettat","sorbit","sorgiunt","sormontat","sorpassat","sorpres","sorras","sorrett","sorseggiat","sorteggiat","sortit","sorvegliat","sorvolat","soscritt","sospes","sospettat","sospint","sospirat","sostantivat","sostanziat","sostentat","sostenut","sostituit","sottaciut","sotterrat","sottes","sottintes","sottoalimentat","sottocapitalizzat","sottodivis","sottoespost","sottofirmat","sottolineat","sottomess","sottomurat","sottopagat","sottopassat","sottopost","sottorappresentat","sottoris","sottoscritt","sottostimat","sottosviluppat","sottotitolat","sottovalutat","sottratt","soverchiat","sovesciat","sovietizzat","sovracapitalizzat","sovraccaricat","sovradimensionat","sovraeccitat","sovraespost","sovraffaticat","sovraffollat","sovraggiunt","sovraimpost","sovraintes","sovralimentat","sovramodulat","sovrappopolat","sovrappost","sovrariscaldat","sovrasaturat","sovrascritt","sovrastampat","sovrastat","sovrastimat","sovrautilizzat","sovreccitat","sovrespost","sovrimpost","sovrintes","sovvenut","sovvenzionat","sovvertit","spaccat","spacchettat","spacciat","spaginat","spaiat","spalancat","spalat","spalcat","spalleggiat","spalmat","spammat","spampanat","spampinat","spanat","spanciat","spandut","spannat","spannocchiat","spans","spantanat","spant","spaparacchiat","spaparanzat","spappolat","sparat","sparecchiat","sparigliat","sparit","sparlat","sparpagliat","spartit","spassat","spassatosel","spastoiat","spaurat","spaurit","spaventat","spazializzat","spaziat","spazieggiat","spazientit","spazzat","spazzolat","specchiat","specializzat","specificat","specillat","specolat","spedit","spegnat","spelacchiat","spelat","spellat","spennacchiat","spennat","spennellat","spent","spenzolat","sperat","sperimentat","spernacchiat","speronat","sperperat","spersonalizzat","sperticat","spesat","spes","spessit","spettacolarizzat","spettinat","spezzat","spezzettat","spezziat","spezzonat","spiaccicat","spianat","spiantat","spiat","spiattellat","spiazzat","spiccat","spicciat","spiccicat","spicciolat","spicconat","spidocchiat","spiegat","spiegazzat","spietrat","spifferat","spigionat","spignorat","spigolat","spigrit","spillat","spilluzzicat","spiluccat","spint","spintonat","spiombat","spiralizzat","spirantizzat","spirat","spiritualizzat","spiumat","spizzicat","spodestat","spoetizzat","spogliat","spolettat","spoliat","spoliticizzat","spollonat","spolmonat","spolpat","spoltronit","spolverat","spolverizzat","spompat","spompinat","sponsorizzat","spopolat","spoppat","sporcat","sportat","sport","sposat","spossedut","spossessat","spostat","spost","sprangat","sprecat","spregiat","spremut","spretat","sprezzat","sprigionat","sprimacciat","spromess","spronat","sprotett","sprovincializzat","sprovvedut","sprovvist","spruzzat","spugnat","spulat","spulciat","spuntat","spuntellat","spupazzat","spurgat","sputacchiat","sputat","sputtanat","squadernat","squadrat","squagliat","squagliatasel","squagliat","squalificat","squamat","squarciat","squartat","squassat","squattrinat","squilibrat","squinternat","sradicat","srotolat","srugginit","stabbiat","stabilit","stabilizzat","stabulat","staccat","stacciat","staffat","staffilat","staggiat","staggit","stagionat","stagliat","stagnat","stamburat","stampat","stampigliat","stanat","stancat","standardizzat","stangat","stanziat","stappat","starat","starnazzat","stasat","statalizzat","statizzat","statuit","stazzat","stazzonat","steccacciat","steccat","stecchit","stecconat","stemperat","stempiat","stenografat","stereotipat","sterilit","sterilizzat","sterminat","sterpat","sterrat","sterzat","stes","stigliat","stigmatizzat","stilat","stilettat","stilizzat","stillat","stimat","stimolat","stint","stipat","stipendiat","stipulat","stiracchiat","stirat","stivat","stizzit","stoccat","stolt","stomacat","stonat","stondat","stoppat","stordit","storicizzat","stornat","storpiat","stortat","stort","stozzat","strabenedett","strabuzzat","stracannat","straccat","stracciat","stracott","strafogat","stragodut","stralciat","stralodat","stralunat","stramaledett","stramortit","strangolat","straniat","stranit","straorzat","strapagat","strapazzat","straperdut","strapers","strappat","strasaput","strascicat","strascinat","strasformat","stratificat","strattonat","stravaccat","stravint","stravolt","stravolut","straziat","stregat","stremat","stressat","striat","stridulat","strigat","strigliat","strillat","striminzit","strimpellat","strinat","stringat","strisciat","stritolat","strizzat","strofinat","strombat","strombazzat","stroncat","stronzat","stropicciat","stroppat","stroppiat","strozzat","struccat","strumentalizzat","strumentat","strusciat","strutt","strutturalizzat","strutturat","stuccat","studiacchiat","studiat","stuellat","stufat","stupefatt","stupit","stuprat","sturat","stutat","stuzzicat","suas","subaffittat","subappaltat","subbiat","subdelegat","subissat","subit","sublicenziat","sublimat","sublocat","subodorat","subordinat","subornat","suburbanizzat","sucat","succhiat","succhiellat","succiat","succint","succis","suddistint","suddivis","suffissat","suffiss","suffragat","suffumicat","suffus","suggellat","suggerit","suggestionat","suicidat","sunteggiat","sunt","suolat","suonat","superat","superpagat","superraffreddat","supervalutat","supervisionat","supplicat","supplit","supportat","suppost","suppurat","surclassat","surfat","surgelat","surraffreddat","surriscaldat","surrogat","survoltat","suscitat","susseguit","sussidiat","sussunt","sussurrat","suturat","svaccat","svagat","svaligiat","svalutat","svapat","svariat","svasat","svecchiat","svegliat","svelat","svelenit","sveltit","svelt","svenat","svendut","sventagliat","sventat","sventolat","sventrat","sverginat","svergognat","svergolat","sverminat","sverniciat","svestit","svettat","svezzat","sviat","svignatosel","svigorit","svilit","svillaneggiat","sviluppat","svinat","svincolat","sviolinat","svirgolat","svirilizzat","svisat","sviscerat","svitat","sviticchiat","svolat","svolazzat","svolt","svolut","svuotat","tabuizzat","tabulat","taccat","taccheggiat","tacciat","tacitat","taciut","tagliat","taglieggiat","tagliuzzat","talebanizzat","tallonat","tampinat","tamponat","tangut","tannat","tappat","tappezzat","tarat","tardat","targat","tariffat","tarlat","tarmat","taroccat","tarpat","tartagliat","tartassat","tartufat","tassat","tassellat","tastat","tasteggiat","tatuat","tecnicizzat","tecnologizzat","tedeschizzat","tediat","teflonat","telecomandat","telecontrollat","telediffus","telefonat","telegrafat","teleguidat","telematizzat","telemetrat","teleradiotrasmess","teletrasmess","teletrasportat","tematizzat","temperat","tempestat","tempificat","templatizzat","temporizzat","temprat","temut","tentat","tenut","teologizzat","teorizzat","tepefatt","terebrat","terminat","termostatat","terrazzat","terrificat","terrorizzat","ters","terzarolat","terziarizzat","terziat","tesat","tesaurizzat","tes","tesserat","testat","testificat","testimoniat","timbrat","tindalizzat","tinteggiat","tint","tipicizzat","tipizzat","tippat","tiranneggiat","tirat","titillat","titolat","toccat","toelettat","tollerat","tolt","tonalizzat","tonificat","tonneggiat","tonsurat","torchiat","tormentat","tornit","torrefatt","tort","tortoreggiat","torturat","tosat","toscaneggiat","toscanizzat","tostat","totalizzat","traboccat","trabuccat","tracannat","tracciat","tradit","tradott","trafficat","trafilat","trafitt","traforat","trafugat","traghettat","traguardat","trainat","tralasciat","tralignat","tramandat","tramat","trambasciat","tramess","tramestat","tramezzat","tramortit","tramutat","tranciat","trangugiat","tranquillat","tranquillizzat","transatt","transces","transcodificat","transcors","transcritt","transennat","transfluit","transfus","transistorizzat","translitterat","transpost","transricevut","transustanziat","transvedut","transvist","trapanat","trapassat","trapiantat","traportat","trapost","trappost","trapuntat","trapunt","trarott","trasandat","trasbordat","trascelt","trasces","trascinat","trascors","trascritt","trascurat","trasdott","trasferit","trasfigurat","trasformat","trasfus","trasgredit","traslat","traslitterat","traslocat","trasmess","trasmutat","trasparit","traspirat","trasportat","traspost","trastullat","trasudat","trasvolat","trasvolt","trattat","tratteggiat","trattenut","tratt","traumatizzat","travagliat","travalicat","travasat","travedut","traversat","travestit","traviat","travisat","travist","travolt","trebbiat","triangolat","tribbiat","tribolat","tributat","triennalizzat","trimestralizzat","trincat","trincerat","trinciat","tripartit","triplicat","trisecat","trisezionat","tritat","triturat","trivellat","trollat","trombat","troncat","tropicalizzat","trovat","truccat","trucidat","truffat","tuffat","tumefatt","tumulat","turat","turbat","turlupinat","tutelat","twittat","ubbidit","ubbligat","ubicat","ubidit","ubiquitinat","ubriacat","uccellat","uccellinat","uccis","udit","ufficializzat","ufficiat","uggit","ugnat","uguagliat","ulcerat","ulit","ulolat","ultimat","ultracentrifugat","ululat","umanat","umanizzat","umettat","umidificat","umidit","umiliat","uncinat","unguentat","unificat","uniformat","unit","univerbat","universaleggiat","universalizzat","untat","unt","uperizzat","urbanizzat","urgenzat","urlat","urtacchiat","urtat","urticchiat","usat","usciolat","usolat","ustionat","usucapit","usurat","usurpat","utilitat","utilizzat","vaccinat","vagabondeggiat","vagellat","vagheggiat","vagillat","vagliat","valcat","valicat","validat","valorizzat","vals","valutat","vanagloriat","vanat","vandalizzat","vangat","vangelizzat","vanificat","vanit","vantaggiat","vantat","vaporat","vaporizzat","varat","varcat","variat","vasectomizzat","vaticinat","vedovat","vedut","vegetat","veggiat","vegliat","veicolat","velarizzat","velat","velettat","velinat","vellicat","vellutat","velocizzat","vendemmiat","vendicat","vendicchiat","venducchiat","vendut","venerat","vengiat","ventagliat","ventilat","ventolat","verbalizzat","vergat","vergheggiat","vergognat","vergolat","verificat","verminat","vernalizzat","verniciat","verrinat","versat","verseggiat","versificat","verticalizzat","vessat","vestit","vestit","vetrificat","vetrinat","vetrioleggiat","vettovagliat","vezzeggiat","viaggiat","vicinat","vicitat","videochattat","videochiamat","videocomunicat","videoregistrat","videotrasmess","vidimat","vigilat","vigliat","vigoreggiat","vigorit","vilificat","vilipes","villaneggiat","vincolat","vint","violat","violentat","violinat","virgolat","virgoleggiat","virgolettat","virilizzat","virtualizzat","visionat","visitat","vissut","vistat","vist","visualizzat","vitaliziat","vitalizzat","vitaminizzat","vittimizzat","vituperat","vivacizzat","vivandat","vivificat","vivisezionat","viziat","vocabolarizzat","vocalizzat","vocat","vociferat","volantinat","volatilizzat","volgarizzat","volicchiat","volpeggiat","voltat","volt","voltolat","volturat","voluminizzat","volut","volutoc","vomitat","vorat","votat","vulcanizzat","vuotat","wappat","wikificat","xerocopiat","zaffat","zampat","zampettat","zampillat","zannat","zappat","zappettat","zapponat","zavorrat","zeppat","zigrinat","zigzagat","zimbellat","zincat","zinnat","zipolat","zippat","zirlat","zittit","zizzagat","zoccolat","zollat","zombat","zonat","zonizzat","zoppat","zoppeggiat","zoppicat","zucconat","zufolat","zumat","zuppat"],{getWords:Y}=i.languageProcessing;const{directPrecedenceException:Z,precedenceException:aa,values:ta}=i.languageProcessing,{Clause:ia}=ta,ea=["fui","fu","fosti","fummo","foste","furono","stato","stati","stata","state","venire","vengo","vieni","viene","veniamo","venite","vengono","venivo","venivi","veniva","venivamo","venivate","venivano","verrò","verrai","verrà","verremo","verrete","verranno","venni","venisti","venne","venimmo","veniste","vennero","verrei","verresti","verrebbe","verremmo","verreste","verrebbero","venga","veniamo","venite","vengano","veniate","venissi","venisse","venissimo","veniste","venissero","andare","vado","vai","va","andiamo","andate","vanno","andavo","andavi","andava","andavamo","andavate","andavano","vada","andiate","andante","andato","andassi","andasse","andassimo","andaste","andassero","andai","andasti","andò","andammo","andarono","andrò","andrai","andrà","andremo","andrete","andranno","andrei","andresti","andrebbe","andremmo","andreste","andrebbero","vadano","andando"],{createRegexFromArray:ra,getClauses:sa}=i.languageProcessing,oa={Clause:class extends ia{constructor(a,t){super(a,t),this._participles=function(a){return Y(a).filter((a=>function(a){return["a","o","e","i"].some((t=>{if(a.length>3&&a.endsWith(t)){const t=a.slice(0,-1);return X.includes(t)}}))}(a)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const a=this.getClauseText(),t=this.getParticiples().filter((t=>!Z(a,t,I)&&!aa(a,t,J)));this.setPassive(t.length>0)}},stopwords:V,auxiliaries:ea,regexes:{auxiliaryRegex:ra(ea),stopCharacterRegex:/([:,])(?=[ \n\r\t'"+\-»«‹›<>])/gi,followingAuxiliaryExceptionRegex:ra(["il","i","la","le","lo","gli","uno","una"]),directPrecedenceExceptionRegex:ra(["mi","ti","si","ci","vi"])}};function na(a){return sa(a,oa)}const ca=window.lodash,{createSingleRuleFromArray:la,createRulesFromArrays:pa}=i.languageProcessing;function ma(a,t){return t.externalStemmer.vowels.includes(a)}function da(a,t){for(let i=0;ifunction(a,t){const i=ua(a,t.irregularPluralNounsAndAdjectives);if(i)return i;const e=ua(a,t.irregularVerbs);if(e)return e;if((a=function(a,t){a=function(a,t){const i=pa(t.externalStemmer.preProcessing.acuteReplacements,"gi");for(const t of i)a=a.replace(t.reg,t.repl);return a}(a=a.toLowerCase(),t);const i=la(t.externalStemmer.preProcessing.quReplacement,"g");return a=function(a,t){return a.replace(new RegExp(t.externalStemmer.preProcessing.vowelMarking,"g"),((a,t,i,e)=>t+i.toUpperCase()+e))}(a=a.replace(i.reg,i.repl),t),a}(a,t)).length<3)return a;const{r1:r,r2:s,rv:o}=function(a,t){let i=a.length,e=a.length,r=a.length;for(let e=0;e3&&(r=ma(a[1],t)?ma(a[0],t)&&ma(a[1],t)?function(a,t,i){const e=a.length;for(let i=2;i{var e={771:e=>{function t(){var e={"[一二三四五六七八ä¹å百åƒä¸‡å„„å…†]":"M","[一-龠々〆ヵヶ]":"H","[ã-ã‚“]":"I","[ã‚¡-ヴーア-ï¾ï¾žï½°]":"K","[a-zA-Zï½-zA-Z]":"A","[0-9ï¼-ï¼™]":"N"};for(var t in this.chartype_=[],e){var r=new RegExp;r.compile(t),this.chartype_.push([r,e[t]])}return this.BIAS__=-332,this.BC1__={HH:6,II:2461,KH:406,OH:-1378},this.BC2__={AA:-3267,AI:2744,AN:-878,HH:-4070,HM:-1711,HN:4012,HO:3761,IA:1327,IH:-1184,II:-1332,IK:1721,IO:5492,KI:3831,KK:-8741,MH:-3132,MK:3334,OO:-2920},this.BC3__={HH:996,HI:626,HK:-721,HN:-1307,HO:-836,IH:-301,KK:2762,MK:1079,MM:4034,OA:-1652,OH:266},this.BP1__={BB:295,OB:304,OO:-125,UB:352},this.BP2__={BO:60,OO:-1762},this.BQ1__={BHH:1150,BHM:1521,BII:-1158,BIM:886,BMH:1208,BNH:449,BOH:-91,BOO:-2597,OHI:451,OIH:-296,OKA:1851,OKH:-1020,OKK:904,OOO:2965},this.BQ2__={BHH:118,BHI:-1159,BHM:466,BIH:-919,BKK:-1720,BKO:864,OHH:-1139,OHM:-181,OIH:153,UHI:-1146},this.BQ3__={BHH:-792,BHI:2664,BII:-299,BKI:419,BMH:937,BMM:8335,BNN:998,BOH:775,OHH:2174,OHM:439,OII:280,OKH:1798,OKI:-793,OKO:-2242,OMH:-2402,OOO:11699},this.BQ4__={BHH:-3895,BIH:3761,BII:-4654,BIK:1348,BKK:-1806,BMI:-3385,BOO:-12396,OAH:926,OHH:266,OHK:-2036,ONN:-973},this.BW1__={",ã¨":660,",åŒ":727,B1ã‚:1404,B1åŒ:542,"ã€ã¨":660,"ã€åŒ":727,"ã€ã¨":1682,ã‚ã£:1505,ã„ã†:1743,ã„ã£:-2055,ã„ã‚‹:672,ã†ã—:-4817,ã†ã‚“:665,ã‹ã‚‰:3472,ãŒã‚‰:600,ã“ã†:-790,ã“ã¨:2083,ã“ã‚“:-1262,ã•ら:-4143,ã•ã‚“:4573,ã—ãŸ:2641,ã—ã¦:1104,ã™ã§:-3399,ãã“:1977,ãれ:-871,ãŸã¡:1122,ãŸã‚:601,ã£ãŸ:3463,ã¤ã„:-802,ã¦ã„:805,ã¦ã:1249,ã§ã:1127,ã§ã™:3445,ã§ã¯:844,ã¨ã„:-4915,ã¨ã¿:1922,ã©ã“:3887,ãªã„:5713,ãªã£:3015,ãªã©:7379,ãªã‚“:-1113,ã«ã—:2468,ã«ã¯:1498,ã«ã‚‚:1671,ã«å¯¾:-912,ã®ä¸€:-501,ã®ä¸­:741,ã¾ã›:2448,ã¾ã§:1711,ã¾ã¾:2600,ã¾ã‚‹:-2155,ã‚„ã‚€:-1947,よã£:-2565,れãŸ:2369,れã§:-913,ã‚’ã—:1860,を見:731,亡ã:-1886,京都:2558,å–り:-2784,大ã:-2604,大阪:1497,平方:-2314,引ã:-1336,日本:-195,本当:-2423,毎日:-2113,目指:-724,B1ã‚:1404,B1åŒ:542,"ï½£ã¨":1682},this.BW2__={"..":-11822,11:-669,"――":-5730,"−−":-13175,ã„ã†:-1609,ã†ã‹:2490,ã‹ã—:-1350,ã‹ã‚‚:-602,ã‹ã‚‰:-7194,ã‹ã‚Œ:4612,ãŒã„:853,ãŒã‚‰:-3198,ããŸ:1941,ããª:-1597,ã“ã¨:-8392,ã“ã®:-4193,ã•ã›:4533,ã•れ:13168,ã•ã‚“:-3977,ã—ã„:-1819,ã—ã‹:-545,ã—ãŸ:5078,ã—ã¦:972,ã—ãª:939,ãã®:-3744,ãŸã„:-1253,ãŸãŸ:-662,ãŸã :-3857,ãŸã¡:-786,ãŸã¨:1224,ãŸã¯:-939,ã£ãŸ:4589,ã£ã¦:1647,ã£ã¨:-2094,ã¦ã„:6144,ã¦ã:3640,ã¦ã:2551,ã¦ã¯:-3110,ã¦ã‚‚:-3065,ã§ã„:2666,ã§ã:-1528,ã§ã—:-3828,ã§ã™:-4761,ã§ã‚‚:-4203,ã¨ã„:1890,ã¨ã“:-1746,ã¨ã¨:-2279,ã¨ã®:720,ã¨ã¿:5168,ã¨ã‚‚:-3941,ãªã„:-2488,ãªãŒ:-1313,ãªã©:-6509,ãªã®:2614,ãªã‚“:3099,ã«ãŠ:-1615,ã«ã—:2748,ã«ãª:2454,ã«ã‚ˆ:-7236,ã«å¯¾:-14943,ã«å¾“:-4688,ã«é–¢:-11388,ã®ã‹:2093,ã®ã§:-7059,ã®ã«:-6041,ã®ã®:-6125,ã¯ã„:1073,ã¯ãŒ:-1033,ã¯ãš:-2532,ã°ã‚Œ:1813,ã¾ã—:-1316,ã¾ã§:-6621,ã¾ã‚Œ:5409,ã‚ã¦:-3153,ã‚‚ã„:2230,ã‚‚ã®:-10713,らã‹:-944,らã—:-1611,らã«:-1897,りã—:651,りã¾:1620,れãŸ:4270,れã¦:849,れã°:4114,ã‚ã†:6067,ã‚れ:7901,を通:-11877,ã‚“ã :728,ã‚“ãª:-4115,一人:602,一方:-1375,一日:970,一部:-1051,上ãŒ:-4479,会社:-1116,出ã¦:2163,分ã®:-7758,åŒå…š:970,åŒæ—¥:-913,大阪:-2471,委員:-1250,å°‘ãª:-1050,年度:-8669,å¹´é–“:-1626,府県:-2363,手権:-1982,æ–°èž:-4066,日新:-722,日本:-7068,日米:3372,曜日:-601,æœé®®:-2355,本人:-2697,æ±äº¬:-1543,ç„¶ã¨:-1384,社会:-1276,ç«‹ã¦:-990,第ã«:-1612,米国:-4268,"11":-669},this.BW3__={ã‚ãŸ:-2194,ã‚り:719,ã‚ã‚‹:3846,"ã„.":-1185,"ã„。":-1185,ã„ã„:5308,ã„ãˆ:2079,ã„ã:3029,ã„ãŸ:2056,ã„ã£:1883,ã„ã‚‹:5600,ã„ã‚:1527,ã†ã¡:1117,ã†ã¨:4798,ãˆã¨:1454,"ã‹.":2857,"ã‹ã€‚":2857,ã‹ã‘:-743,ã‹ã£:-4098,ã‹ã«:-669,ã‹ã‚‰:6520,ã‹ã‚Š:-2670,"ãŒ,":1816,"ãŒã€":1816,ãŒã:-4855,ãŒã‘:-1127,ãŒã£:-913,ãŒã‚‰:-4977,ãŒã‚Š:-2064,ããŸ:1645,ã‘ã©:1374,ã“ã¨:7397,ã“ã®:1542,ã“ã‚:-2757,ã•ã„:-714,ã•ã‚’:976,"ã—,":1557,"ã—ã€":1557,ã—ã„:-3714,ã—ãŸ:3562,ã—ã¦:1449,ã—ãª:2608,ã—ã¾:1200,"ã™.":-1310,"ã™ã€‚":-1310,ã™ã‚‹:6521,"ãš,":3426,"ãšã€":3426,ãšã«:841,ãã†:428,"ãŸ.":8875,"ãŸã€‚":8875,ãŸã„:-594,ãŸã®:812,ãŸã‚Š:-1183,ãŸã‚‹:-853,"ã .":4098,"ã ã€‚":4098,ã ã£:1004,ã£ãŸ:-4748,ã£ã¦:300,ã¦ã„:6240,ã¦ãŠ:855,ã¦ã‚‚:302,ã§ã™:1437,ã§ã«:-1482,ã§ã¯:2295,ã¨ã†:-1387,ã¨ã—:2266,ã¨ã®:541,ã¨ã‚‚:-3543,ã©ã†:4664,ãªã„:1796,ãªã:-903,ãªã©:2135,"ã«,":-1021,"ã«ã€":-1021,ã«ã—:1771,ã«ãª:1906,ã«ã¯:2644,"ã®,":-724,"ã®ã€":-724,ã®å­:-1e3,"ã¯,":1337,"ã¯ã€":1337,ã¹ã:2181,ã¾ã—:1113,ã¾ã™:6943,ã¾ã£:-1549,ã¾ã§:6154,ã¾ã‚Œ:-793,らã—:1479,られ:6820,ã‚‹ã‚‹:3818,"れ,":854,"れã€":854,れãŸ:1850,れã¦:1375,れã°:-3246,れる:1091,ã‚れ:-605,ã‚“ã :606,ã‚“ã§:798,カ月:990,会議:860,入り:1232,大会:2217,å§‹ã‚:1681,市:965,æ–°èž:-5055,"æ—¥,":974,"æ—¥ã€":974,社会:2024,カ月:990},this.TC1__={AAA:1093,HHH:1029,HHM:580,HII:998,HOH:-390,HOM:-331,IHI:1169,IOH:-142,IOI:-1015,IOM:467,MMH:187,OOI:-1832},this.TC2__={HHO:2088,HII:-1023,HMM:-1154,IHI:-1965,KKH:703,OII:-2649},this.TC3__={AAA:-294,HHH:346,HHI:-341,HII:-1088,HIK:731,HOH:-1486,IHH:128,IHI:-3041,IHO:-1935,IIH:-825,IIM:-1035,IOI:-542,KHH:-1216,KKA:491,KKH:-1217,KOK:-1009,MHH:-2694,MHM:-457,MHO:123,MMH:-471,NNH:-1689,NNO:662,OHO:-3393},this.TC4__={HHH:-203,HHI:1344,HHK:365,HHM:-122,HHN:182,HHO:669,HIH:804,HII:679,HOH:446,IHH:695,IHO:-2324,IIH:321,III:1497,IIO:656,IOO:54,KAK:4845,KKA:3386,KKK:3065,MHH:-405,MHI:201,MMH:-241,MMM:661,MOM:841},this.TQ1__={BHHH:-227,BHHI:316,BHIH:-132,BIHH:60,BIII:1595,BNHH:-744,BOHH:225,BOOO:-908,OAKK:482,OHHH:281,OHIH:249,OIHI:200,OIIH:-68},this.TQ2__={BIHH:-1401,BIII:-1033,BKAK:-543,BOOO:-5591},this.TQ3__={BHHH:478,BHHM:-1073,BHIH:222,BHII:-504,BIIH:-116,BIII:-105,BMHI:-863,BMHM:-464,BOMH:620,OHHH:346,OHHI:1729,OHII:997,OHMH:481,OIHH:623,OIIH:1344,OKAK:2792,OKHH:587,OKKA:679,OOHH:110,OOII:-685},this.TQ4__={BHHH:-721,BHHM:-3604,BHII:-966,BIIH:-607,BIII:-2181,OAAA:-2763,OAKK:180,OHHH:-294,OHHI:2446,OHHO:480,OHIH:-1573,OIHH:1935,OIHI:-493,OIIH:626,OIII:-4007,OKAK:-8156},this.TW1__={ã«ã¤ã„:-4681,æ±äº¬éƒ½:2026},this.TW2__={ã‚る程:-2049,ã„ã£ãŸ:-1256,ã“ã‚ãŒ:-2434,ã—ょã†:3873,ãã®å¾Œ:-4430,ã ã£ã¦:-1049,ã¦ã„ãŸ:1833,ã¨ã—ã¦:-4657,ã¨ã‚‚ã«:-4517,ã‚‚ã®ã§:1882,一気ã«:-792,åˆã‚ã¦:-1512,åŒæ™‚ã«:-8097,大ããª:-1255,対ã—ã¦:-2721,社会党:-3216},this.TW3__={ã„ãŸã :-1734,ã—ã¦ã„:1314,ã¨ã—ã¦:-4314,ã«ã¤ã„:-5483,ã«ã¨ã£:-5989,ã«å½“ãŸ:-6247,"ã®ã§,":-727,"ã®ã§ã€":-727,ã®ã‚‚ã®:-600,れã‹ã‚‰:-3752,å二月:-2287},this.TW4__={"ã„ã†.":8576,"ã„ã†ã€‚":8576,ã‹ã‚‰ãª:-2348,ã—ã¦ã„:2958,"ãŸãŒ,":1516,"ãŸãŒã€":1516,ã¦ã„ã‚‹:1538,ã¨ã„ã†:1349,ã¾ã—ãŸ:5543,ã¾ã›ã‚“:1097,よã†ã¨:-4258,よるã¨:5865},this.UC1__={A:484,K:93,M:645,O:-505},this.UC2__={A:819,H:1059,I:409,M:3987,N:5775,O:646},this.UC3__={A:-1370,I:2311},this.UC4__={A:-2643,H:1809,I:-1032,K:-3450,M:3565,N:3876,O:6646},this.UC5__={H:313,I:-1238,K:-799,M:539,O:-831},this.UC6__={H:-506,I:-253,K:87,M:247,O:-387},this.UP1__={O:-214},this.UP2__={B:69,O:935},this.UP3__={B:189},this.UQ1__={BH:21,BI:-12,BK:-99,BN:142,BO:-56,OH:-95,OI:477,OK:410,OO:-2422},this.UQ2__={BH:216,BI:113,OK:1759},this.UQ3__={BA:-479,BH:42,BI:1913,BK:-7198,BM:3160,BN:6427,BO:14761,OI:-827,ON:-3212},this.UW1__={",":156,"ã€":156,"「":-463,ã‚:-941,ã†:-127,ãŒ:-553,ã:121,ã“:505,ã§:-201,ã¨:-547,ã©:-123,ã«:-789,ã®:-185,ã¯:-847,ã‚‚:-466,ã‚„:-470,よ:182,ら:-292,り:208,れ:169,ã‚’:-446,ã‚“:-137,"・":-135,主:-402,京:-268,区:-912,åˆ:871,国:-460,大:561,å§”:729,市:-411,æ—¥:-141,ç†:361,生:-408,県:-386,都:-718,"ï½¢":-463,"ï½¥":-135},this.UW2__={",":-829,"ã€":-829,〇:892,"「":-645,"ã€":3145,ã‚:-538,ã„:505,ã†:134,ãŠ:-502,ã‹:1454,ãŒ:-856,ã:-412,ã“:1141,ã•:878,ã–:540,ã—:1529,ã™:-675,ã›:300,ã:-1011,ãŸ:188,ã :1837,ã¤:-949,ã¦:-291,ã§:-268,ã¨:-981,ã©:1273,ãª:1063,ã«:-1764,ã®:130,ã¯:-409,ã²:-1273,ã¹:1261,ã¾:600,ã‚‚:-1263,ã‚„:-402,よ:1639,り:-579,ã‚‹:-694,れ:571,ã‚’:-2516,ã‚“:2095,ã‚¢:-587,ã‚«:306,ã‚­:568,ッ:831,三:-758,ä¸:-2150,世:-302,中:-968,主:-861,事:492,人:-123,会:978,ä¿:362,å…¥:548,åˆ:-3025,副:-1566,北:-3414,区:-422,大:-1769,天:-865,太:-483,å­:-1519,å­¦:760,実:1023,å°:-2009,市:-813,å¹´:-1060,å¼·:1067,手:-1519,æº:-1033,政:1522,æ–‡:-1355,æ–°:-1682,æ—¥:-1815,明:-1462,最:-630,æœ:-1843,本:-1650,æ±:-931,æžœ:-665,次:-2378,æ°‘:-180,æ°—:-1740,ç†:752,発:529,ç›®:-1584,相:-242,県:-1165,ç«‹:-763,第:810,ç±³:509,自:-1353,行:838,西:-744,見:-3874,調:1010,è­°:1198,è¾¼:3041,é–‹:1758,é–“:-1257,"ï½¢":-645,"ï½£":3145,ッ:831,ï½±:-587,ï½¶:306,ï½·:568},this.UW3__={",":4889,1:-800,"−":-1723,"ã€":4889,々:-2311,〇:5827,"ã€":2670,"〓":-3573,ã‚:-2696,ã„:1006,ã†:2342,ãˆ:1983,ãŠ:-4864,ã‹:-1163,ãŒ:3271,ã:1004,ã‘:388,ã’:401,ã“:-3552,ã”:-3116,ã•:-1058,ã—:-395,ã™:584,ã›:3685,ã:-5228,ãŸ:842,ã¡:-521,ã£:-1444,ã¤:-1081,ã¦:6167,ã§:2318,ã¨:1691,ã©:-899,ãª:-2788,ã«:2745,ã®:4056,ã¯:4555,ã²:-2171,ãµ:-1798,ã¸:1199,ã»:-5516,ã¾:-4384,ã¿:-120,ã‚:1205,ã‚‚:2323,ã‚„:-788,よ:-202,ら:727,り:649,ã‚‹:5905,れ:2773,ã‚:-1207,ã‚’:6620,ã‚“:-518,ã‚¢:551,ã‚°:1319,ス:874,ッ:-1350,ト:521,ム:1109,ル:1591,ロ:2201,ン:278,"・":-3794,一:-1619,下:-1759,世:-2087,両:3815,中:653,主:-758,予:-1193,二:974,人:2742,今:792,ä»–:1889,以:-1368,低:811,何:4265,作:-361,ä¿:-2439,å…ƒ:4858,å…š:3593,å…¨:1574,å…¬:-3030,å…­:755,å…±:-1880,円:5807,å†:3095,分:457,åˆ:2475,別:1129,å‰:2286,副:4437,力:365,å‹•:-949,å‹™:-1872,化:1327,北:-1038,区:4646,åƒ:-2309,åˆ:-783,å”:-1006,å£:483,å³:1233,å„:3588,åˆ:-241,åŒ:3906,å’Œ:-837,å“¡:4513,国:642,åž‹:1389,å ´:1219,外:-241,妻:2016,å­¦:-1356,安:-423,実:-1008,å®¶:1078,å°:-513,å°‘:-3102,å·ž:1155,市:3197,å¹³:-1804,å¹´:2416,広:-1030,府:1605,度:1452,建:-2352,当:-3885,å¾—:1905,æ€:-1291,性:1822,戸:-488,指:-3973,政:-2013,æ•™:-1479,æ•°:3222,æ–‡:-1489,æ–°:1764,æ—¥:2099,æ—§:5792,昨:-661,時:-1248,曜:-951,最:-937,月:4125,期:360,æŽ:3094,æ‘:364,æ±:-805,æ ¸:5156,森:2438,業:484,æ°:2613,æ°‘:-1694,決:-1073,法:1868,æµ·:-495,ç„¡:979,物:461,特:-3850,生:-273,用:914,町:1215,çš„:7313,ç›´:-1835,çœ:792,県:6293,知:-1528,ç§:4231,税:401,ç«‹:-960,第:1201,ç±³:7767,ç³»:3066,ç´„:3663,ç´š:1384,çµ±:-4229,ç·:1163,ç·š:1255,者:6457,能:725,自:-2869,英:785,見:1044,調:-562,財:-733,è²»:1777,車:1835,è»:1375,è¾¼:-1504,通:-1136,é¸:-681,郎:1026,郡:4404,部:1200,金:2163,é•·:421,é–‹:-1432,é–“:1302,é–¢:-1282,雨:2009,é›»:-1045,éž:2066,é§…:1620,"1":-800,"ï½£":2670,"ï½¥":-3794,ッ:-1350,ï½±:551,グ:1319,ï½½:874,ト:521,ム:1109,ï¾™:1591,ï¾›:2201,ï¾:278},this.UW4__={",":3930,".":3508,"―":-4841,"ã€":3930,"。":3508,〇:4999,"「":1895,"ã€":3798,"〓":-5156,ã‚:4752,ã„:-3435,ã†:-640,ãˆ:-2514,ãŠ:2405,ã‹:530,ãŒ:6006,ã:-4482,ãŽ:-3821,ã:-3788,ã‘:-4376,ã’:-4734,ã“:2255,ã”:1979,ã•:2864,ã—:-843,ã˜:-2506,ã™:-731,ãš:1251,ã›:181,ã:4091,ãŸ:5034,ã :5408,ã¡:-3654,ã£:-5882,ã¤:-1659,ã¦:3994,ã§:7410,ã¨:4547,ãª:5433,ã«:6499,ã¬:1853,ã­:1413,ã®:7396,ã¯:8578,ã°:1940,ã²:4249,ã³:-4134,ãµ:1345,ã¸:6665,ã¹:-744,ã»:1464,ã¾:1051,ã¿:-2082,ã‚€:-882,ã‚:-5046,ã‚‚:4169,ゃ:-2666,ã‚„:2795,ょ:-1544,よ:3351,ら:-2922,り:-9726,ã‚‹:-14896,れ:-2613,ã‚:-4570,ã‚:-1783,ã‚’:13150,ã‚“:-2352,ã‚«:2145,コ:1789,ã‚»:1287,ッ:-724,ト:-403,メ:-1635,ラ:-881,リ:-541,ル:-856,ン:-3637,"・":-4371,ー:-11870,一:-2069,中:2210,予:782,事:-190,井:-1768,人:1036,以:544,会:950,体:-1286,作:530,å´:4292,å…ˆ:601,å…š:-2006,å…±:-1212,内:584,円:788,åˆ:1347,å‰:1623,副:3879,力:-302,å‹•:-740,å‹™:-2715,化:776,区:4517,å”:1013,å‚:1555,åˆ:-1834,å’Œ:-681,å“¡:-910,器:-851,回:1500,国:-619,園:-1200,地:866,å ´:-1410,å¡:-2094,士:-1413,多:1067,大:571,å­:-4802,å­¦:-1397,定:-1057,寺:-809,å°:1910,屋:-1328,å±±:-1500,å³¶:-2056,å·:-2667,市:2771,å¹´:374,åº:-4556,後:456,性:553,感:916,所:-1566,支:856,改:787,政:2182,æ•™:704,æ–‡:522,æ–¹:-856,æ—¥:1798,時:1829,最:845,月:-9066,木:-485,æ¥:-442,æ ¡:-360,業:-1043,æ°:5388,æ°‘:-2716,æ°—:-910,æ²¢:-939,済:-543,物:-735,率:672,çƒ:-1267,生:-1286,産:-1101,ç”°:-2900,町:1826,çš„:2586,ç›®:922,çœ:-3485,県:2997,空:-867,ç«‹:-2112,第:788,ç±³:2937,ç³»:786,ç´„:2171,経:1146,çµ±:-1169,ç·:940,ç·š:-994,ç½²:749,者:2145,能:-730,般:-852,行:-792,è¦:792,è­¦:-1184,è­°:-244,è°·:-1e3,賞:730,車:-1481,è»:1158,輪:-1433,è¾¼:-3370,è¿‘:929,é“:-1291,é¸:2596,郎:-4866,都:1192,野:-1100,銀:-2213,é•·:357,é–“:-2344,院:-2297,éš›:-2604,é›»:-878,é ˜:-1659,題:-792,館:-1984,首:1749,高:2120,"ï½¢":1895,"ï½£":3798,"ï½¥":-4371,ッ:-724,ï½°:-11870,ï½¶:2145,コ:1789,ï½¾:1287,ト:-403,ï¾’:-1635,ï¾—:-881,リ:-541,ï¾™:-856,ï¾:-3637},this.UW5__={",":465,".":-299,1:-514,E2:-32768,"]":-2762,"ã€":465,"。":-299,"「":363,ã‚:1655,ã„:331,ã†:-503,ãˆ:1199,ãŠ:527,ã‹:647,ãŒ:-421,ã:1624,ãŽ:1971,ã:312,ã’:-983,ã•:-1537,ã—:-1371,ã™:-852,ã :-1186,ã¡:1093,ã£:52,ã¤:921,ã¦:-18,ã§:-850,ã¨:-127,ã©:1682,ãª:-787,ã«:-1224,ã®:-635,ã¯:-578,ã¹:1001,ã¿:502,ã‚:865,ゃ:3350,ょ:854,り:-208,ã‚‹:429,れ:504,ã‚:419,ã‚’:-1264,ã‚“:327,イ:241,ル:451,ン:-343,中:-871,京:722,会:-1153,å…š:-654,å‹™:3519,区:-901,告:848,å“¡:2104,大:-1296,å­¦:-548,定:1785,åµ:-1304,市:-2991,席:921,å¹´:1763,æ€:872,所:-814,挙:1618,æ–°:-1682,æ—¥:218,月:-4353,査:932,æ ¼:1356,機:-1508,æ°:-1347,ç”°:240,町:-3912,çš„:-3149,相:1319,çœ:-1052,県:-4003,ç ”:-997,社:-278,空:-813,çµ±:1955,者:-2233,表:663,語:-1073,è­°:1219,é¸:-1018,郎:-368,é•·:786,é–“:1191,題:2368,館:-689,"1":-514,E2:-32768,"ï½¢":363,ï½²:241,ï¾™:451,ï¾:-343},this.UW6__={",":227,".":808,1:-270,E1:306,"ã€":227,"。":808,ã‚:-307,ã†:189,ã‹:241,ãŒ:-73,ã:-121,ã“:-200,ã˜:1782,ã™:383,ãŸ:-428,ã£:573,ã¦:-1014,ã§:101,ã¨:-105,ãª:-253,ã«:-149,ã®:-417,ã¯:-236,ã‚‚:-206,り:187,ã‚‹:-135,ã‚’:195,ル:-673,ン:-496,一:-277,中:201,ä»¶:-800,会:624,å‰:302,区:1792,å“¡:-1212,å§”:798,å­¦:-960,市:887,広:-695,後:535,業:-697,相:753,社:-507,ç¦:974,空:-822,者:1811,連:463,郎:1082,"1":-270,E1:306,ï¾™:-673,ï¾:-496},this}t.prototype.ctype_=function(e){for(var t in this.chartype_)if(e.match(this.chartype_[t][0]))return this.chartype_[t][1];return"O"},t.prototype.ts_=function(e){return e||0},t.prototype.segment=function(e){if(null==e||null==e||""==e)return[];var t=[],r=["B3","B2","B1"],a=["O","O","O"],l=e.split("");for(v=0;v0&&(t.push(u),u="",B="B"),n=i,i=g,g=B,u+=r[v]}return t.push(u),t},e.exports=t},429:e=>{var t=function(e,t){var r;for(r=0;r1?1:n)+a[a.length-1].length};return{addRule:function(e,t){l.push({regex:e,type:t})},onText:function(e){for(var t=a+e,u=r(l,t);u&&u.max_index!==t.length;)i(t.substring(0,u.max_index),u.rule.type),t=t.substring(u.max_index),u=r(l,t);a=t},end:function(){if(0!==a.length){var e=t(l,a);if(!e){var r=new Error("unable to tokenize");throw r.tokenizer2={buffer:a,line:u,col:n},r}i(a,e.type)}}}}}},t={};function r(a){var l=t[a];if(void 0!==l)return l.exports;var u=t[a]={exports:{}};return e[a](u,u.exports,r),u.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};(()=>{"use strict";r.r(a),r.d(a,{default:()=>qe});const e=window.yoast.analysis,t=window.lodash;var l=r(771),u=r.n(l);const{sanitizeString:n,removePunctuation:i}=e.languageProcessing,g=new(u());function v(e){if(""===(e=n(e)))return[];let r=g.segment(e);return r=(0,t.map)(r,(function(e){return i(e)})),(0,t.filter)(r,(function(e){return""!==e.trim()}))}const s=["ãŒ","ã‚’","ã«","ã¸","ã¨","ã‹ã‚‰","より","ã¾ã§","ã§","ã‹","ã®","ã‚„","やら","ã ","ãªã‚Š","ã‚","ã¨ã‚‚","ã‹ã—ら","ã‹ãª","ã‹ã„","ã£ã‘","ã•","よ","ã­","ã°ã‹ã‚Š","ã°ã£ã‹ã‚Š","ã°ã£ã‹","ã°ã‹ã—","ã ã‘","ãり","ã£ãり","ã»ã©","ãらã„","ãらã„","ã“ã‚","ã”ã‚","ãªã©","ã¯","ã‚‚","ã“ã","ã§ã‚‚","ã—ã‹","ã•ãˆ","ã°","ã¦","ã®ã«","ã®ã§","ã¨ã“ã‚","ã‘れã©ã‚‚","ã‘れã©","ãã›","ã‚‚ã®","ã‚‚ã‚“","ã‚‚ã®ã‹","ã‚‚ã‚“ã‹","ãª","ãªã‚","ãªã‚“ã‹","ãªã‚“ã¦","ã£ã¦","ã—","ãšã¤","ã™ã‚‰","ã¨ã‚‚ã«","ãœ","ãž","ã˜ã‚ƒã‚“","ãªãŒã‚‰","ãŸã‚Š","ã ã‚Š","ã¤ã¤","ã¾ã¾","ã‚‚ã®ã®","ã¤ã¾ã‚Š","ã—ã‹ã—","よã£ã¦","ã«é–¢ã™ã‚‹","ã«é–¢ã—","ã«ã¤ã„ã¦","ã«ãŠã‘ã‚‹","ã«ãŠã„ã¦","é–¢","ã™ã‚‹","é–¢ã—","ã¤ã„ã¦","ãŠãˆã‚‹","ãŠã‘ã‚‹","ã¨ã„ã†","ã¨ã„ã£","ãŸ","ã«å¯¾ã™ã‚‹","対","ã«å¯¾ã—ã¦","対ã—ã¦","ã«ã‹ã‘","ã«ã‚ˆã‚‹","ã«ã‚ˆã‚Š","ã«ã‚ˆã£ã¦","ãŠã‚ˆã³","ã“れ","ãれ","ã‚れ","ã©ã‚Œ","ã“ã¡ã‚‰","ã“ã£ã¡","ãã¡ã‚‰","ãã£ã¡","ã‚ã¡ã‚‰","ã‚ã£ã¡","ã©ã¡ã‚‰","ã©ã£ã¡","ã“ã“","ãã“","ã‚ãã“","ã©ã“","ã“ã†","ãã†","ã‚ã‚","ã©ã†","ã“ã‚“ãª","ãã‚“ãª","ã‚ã‚“ãª","ã©ã‚“ãª","ã“ã®","よã†","ãã®","ã‚ã®","ã©","ã“ã†ã‚„ã£ã¦","ãã†ã‚„ã£ã¦","ã‚ã‚ã‚„ã£ã¦","ã‚„ã£","ã©ã®","ã“ã£","ãã£ã‹ã‚‰","ã©ã£","ã•ã¾","ã‚ã¡ã‚‰ã•ã¾","ã©ã¡ã‚‰ã•ã¾","ãã¡ã‚‰ã•ã¾","ã“ã‚“ã ã‘","ãã‚“ã ã‘","ã‚ã‚“ã ã‘","ã©ã‚“","ãªã«","ãªã‚“","何","ã©ã„ã¤","ã©ãªãŸ","ã ã‚Œ","誰","ã„ã¤","ãªãœ","ã©ã†ã—ã¦","ã©ã‚Œãらã„","ã©ã‚Œãらã„","ä½","ã„ãら","ã„ãã¤","一","二","三","å››","五","å…­","七","å…«","ä¹","å","百","åƒ","万","å„„","å…†","ã²ã¨ã¤","ãµãŸã¤","ã¿ã£ã¤","よã£ã¤","ã„ã¤ã¤","ã‚€ã£ã¤","ãªãªã¤","ã‚„ã£ã¤","ã“ã“ã®ã¤","ã¨ãŠ","ã¤","ã“","コ","個","人","ã²ã","匹","ã¾ã„","æžš","ã•ã¤","冊","æ¯","回","キロ","グラム","é©é‡","少々","大匙","大ã•ã˜","å°åŒ™","å°ã•ã˜","g","cc","ml","l","kg","番目","ã‚","週","時間","週間","時","分","ç§’","ã‹æœˆ","カ月","ヶ月","部分","一部","ã»ã‹","ä»–","ãれãžã‚Œ","ã¾ã£","ãŸã","å…¨ã","ãœã‚“ã¶","全部","ã™ã¹ã¦","å…¨","ã™ã”ã","最高","最悪","å¯èƒ½","良ã„","良ã","良ã•","ã„ã„","よã„","悪ã„","悪ã","悪ã•","大ããª","ãŠãŠã","å°ã•","ã¡ã„ã•","ã ã‚","ダメ","é§„ç›®","ãŸã ","ã¡ã‚‡ã£ã¨","ã™ã“ã—","å°‘ã—","ãªã‹","ãŸãã•ã‚“","よã","ãŸã¾ã«","ã¨ãã©ã","時々","ã„ã¤ã‚‚","ãŠã‚ˆã","ã‚„ã","ã ã„","ãŸã„","ç´„","程","大体","ã¾ãŸ","ã‚‚ã†","ã¨ã¦","ãŠãらã","ãŸã¶ã‚“","æã‚‰ã","多分","ã®ã¿","多少","本当","ã»ã‚“ã¨ã†","ã¾ã˜","マジ","å‹¿è«–","ã‚‚ã¡ã‚ã‚“","ã‚„ã£ã¨","ã—ã£ã‹ã‚Š","ã•ã£ã","ã»ã‚“ã¨","ホント","ãã£ã¨","ã‹ãªã‚‰ãš","å¿…ãš","絶対","ãœã£","ゼッタイ","ã«ã‹ã","ã‚„ã£ã±ã‚Š","ã‚„ã£ã±","ãŸã£","ã¯ã£ãり","ã™ã§ã«","ãªã‚‹","ã„ã£ã—ょ","ç·’","ã ã„ã˜ã‚‡ã†ã¶","ダイジョウブ","大丈夫","å¹´","月","æ—¥","今日","明日","明後","昨日","一昨日","ãょã†","ã‚ã™","ã‚ã—","ã‚ã•ã£","ã","ã®ã†","ãŠã¨ã¨ã„","今年","æ¥å¹´","去年","ã“ã¨ã—","らã„ã­ã‚“","ãょã­ã‚“","ã‚ãŸã—","ã‚ãŸãã—","ã‚ãŸã—","ç§","ã‚ãŸãã—","ã†ã¡","ã†ã¡ã‚‰","ãŠã‚‰","ãŠã„ら","ã‚ãŸã—ら","ãŸã¡","ã‚ãŸã—ã©","ã‚れら","ã‚れã‚","れ","ç§ã‚‰","ç§é”","é”","ç§å…±","我ら","我々","ãŠã‚Œ","俺","オレ","ãŠã‚Œã‚‰","ã¼ã","ボクら","僕","ã˜ã¶ã‚“","俺ら","僕ら","僕é”","自分","俺é”","ボク","ã‚ãªãŸ","è²´æ–¹","貴女","è²´ç”·","å›","ãã¿","ãŠã¾ãˆ","ãŠ","å‰","ã‚ã‚“ãŸ","ãŠå®…","ã¦ã‚ãˆ","貴殿","å½¼","彼ら","彼女","ら","ã“ã„ã¤","ãã„ã¤","ã‚ã„ã¤","アイツ","ã“れら","ãれら","ã‚れら","ã‚ã„ã¤ã‚‰","ã©ã‚‚","ã¿ãª","ã¿ãªã•ã¾","ãŠã®ãŠã®","å…±","ã¿ã‚“ãª","皆様","å„々","皆","皆ã•ã¾","æ–¹","当方","自身","ã•ã‚“","様","殿","ã¡ã‚ƒã‚“","ãã‚“","ã“ã¨","事","物","コト","ã‚„ã¤","ヤツ","奴","ã¾ãˆ","ã‚ã¨","ã†ãˆ","後","上","下","中","å…ˆ","ã•らã«","æ›´","ã¨ã","特ã«","ã»ã¨ã‚“ã©","å†ã³","ãµãŸãŸã³","ã»ã¼","ãã®ã¾ã¾","ã™ã","ã‚ã¾ã‚Š","相当","ã—ã°ã—ã°","ã‚ãšã‹","僅ã‹","比較","çš„","ã¾ã ","ã‹ãªã‚Š","ã¤ã„","ã¾ãš","ã‚„ãŒ","ã‚„ã‚„","ã¤ã­ã«","常","ã²ãã¤ã¥ã","引ãç¶šã","ãã‚ã‚ã¦","極ã‚ã¦","ã”ã","別","ã¹ã¤","ã¯ã‚Š","å¿…ãšã—","ã‹ãªã‚‰ãšã—ã‚‚","ã‚€ã—ã‚","ãŒã„","ã¾ã‚‚","ãªã","ã‚ら","ãŸã‚ã¦","ã‘ã£ã—","ãŠã‚‚","互ã„","é–“","改ã‚ã¦","決ã—","主","主ã¨ã—ã¦","ã‚‚ã£ã¨","ã¨ã‚Šã‚ã‘","ã‚ã","ãŠãŠã‚€ã­","ãŠãŠã„","概ã­","大ã„","ãã†ã—","ãれã»ã©","ã¡ã‚‡ã†ã©","ã¨ãˆ","ã¾ã•ã«","ãªã‚“ã¨","ã¨ã‹","ã‚ãˆã¦","ã¾ã‚‹","ãŠãŠã‚ˆã","ã¾ã™","ãœã‚“ãœã‚“","全然","ã˜ã‚ƒ","ã¾ã›ã‚“","ã§ã™","ã‚り","ã¾ã›","ã‚“","ãªã„","ã—ã¾ã›","ãªã‚‰","ã‚ã‚‹","ã‚りã¾ã›","ã„ã‚‹","ã„","ã„ã¾ã›","ã§ãã‚‹","ã§ã","れる","られる","ã›ã‚‹","ã•ã›ã‚‹","æ€ã‚","考ãˆ","られ","ãŠã£ã—ゃã„","è¿°ã¹","言ã‚","話","ãªã‚‰ã‚Œ","ãŠæ€ã„","らã—ã„","らã—ã","ã§ã—ょ","ã†","ã ã‚","ã”","御","ãƒã‚¤","ã¯ã„","ã„ã„ãˆ","ã†ã‚“","ã†ãƒ¼ã‚“","ãˆãˆ","よã—","ã„ã‚„","ã¾ã‚","ãŠã„","ã­ãˆ","ã©ã†ãž","ã»ã‚‰","ãŠãŠ","ã‚ー","ã•ã‚","ã¾ã—","ã§ã—","ã ã£","ãªã‹ã£","ã—ã¾ã—","ãªã£","ã‚ã£","ã„ãŸ","ã›","ã•ã›","ã¾ã™ã‹","ã¿","ã¿ã¾ã›","ã¾ã—ょ","ã§ã¿","ã§ã¿ã¾ã›","ãªã‚‰ã‚Œã‚‹","ãªã‚"];function c(e){let t=v(e);return t=t.filter((e=>!s.includes(e))),t=t.map((e=>e.endsWith("ã˜ã‚ƒ")?e.slice(0,-2):e)),t}const o=["“","â€","ã€","〞","〟","‟","„",'"',"「","ã€","『","ã€"],E=e=>(0,t.includes)(o,e[0])&&(0,t.includes)(o,e[e.length-1]);function h(e){const t={exactMatchRequested:!1,keyphrase:e};return E(e)&&(t.keyphrase=e.substring(1,e.length-1),t.exactMatchRequested=!0),t}const d=new RegExp("["+["'","‘","’","‛","`","‹","›"].join("")+"]","g");function f(e){return e.replace(d,"'")}function C(e){return function(e){return e.replace(/[“â€ã€ã€žã€Ÿâ€Ÿâ€žã€Žã€Â«Â»]/g,'"')}(f(e))}function A(e,t){e=e.toLowerCase();const r=h(t);if(r.exactMatchRequested){e=f(e);const t=r.keyphrase,a=[];let l=e.indexOf(t);for(;-1!==l;)a.push(t),l=e.indexOf(t,l+t.length);return a}return c(e).filter((e=>t===e))}function F(e,r){return e.length<=1?[e]:function(e,r){const a=r.paradigmGroups;let l=(0,t.uniq)((0,t.flatten)(a));l=l.sort(((e,t)=>t.length-e.length||e.localeCompare(t)));const u=l.filter((t=>e.endsWith(t))),n=[];if(0===u.length)n.push(e);else{const t=u[0],r=e.slice(0,-t.length);for(const e of a)e.includes(t)&&n.push(e.map((e=>r+e)))}return e.endsWith("ã‚‹")&&n.push(e.slice(0,-1)),(0,t.uniq)((0,t.flatten)(n))}(e,r)}const{baseStemmer:p}=e.languageProcessing;function D(e){const r=(0,t.get)(e.getData("morphology"),"ja",!1);return r?e=>function(e,t){let r=F(e,t);return r=r.sort(((e,t)=>e.length-t.length||e.localeCompare(t))),r[0]}(e,r):p}function m(e){const t=[];return e.map((e=>t.push(e.length))),0===e.length?0:t.reduce(((e,t)=>e+t))}const B=new RegExp("(ftp|http(s)?:\\/\\/.)(www\\\\.)?[-a-zA-Z0-9@:%._\\/+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:;%_\\/+.~#?&()=]*)|www\\.[-a-zA-Z0-9@:%._\\/+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:;%_\\/+.~#?&()=]*)","igm"),{sanitizeString:O}=e.languageProcessing;function _(e){return e=function(e){return e.replace(B,"")}(e),(e=(e=O(e)).replace(/\s/g,"")).length}function I(e,t){const r=v(e).join("|"),a=[];return t.forEach((function(e){const t=e.join("|");r.includes(t)&&a.push(e)})),a}var b=r(429),H=r.n(b);function y(e,t=!1,r="",a=""){let l,u;return l="id"===a?'[ \\u00a0\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+;!¡?¿:/»«‹›'+r+"<>":'[ \\u00a0\\u2014\\u06d4\\u061f\\u060C\\u061B\\n\\r\\t.,()â€â€œã€ã€žã€Ÿâ€Ÿâ€ž"+\\-;!¡?¿:/»«‹›'+r+"<>",u=t?"($|((?="+l+"]))|((['‘’‛`])("+l+"])))":"($|("+l+"])|((['‘’‛`])("+l+"])))","(^|"+l+"'‘’‛`])"+e+u}function U(e){return(e=(e=(e=(e=e.replace(/\s{2,}/g," ")).replace(/\s\.$/,".")).replace(/^\s+|\s+$/g,"")).replace(/\s。/g,"。")).replace(/。\s/g,"。")}const M=["address","article","aside","blockquote","canvas","dd","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","noscript","ol","output","p","pre","section","table","tfoot","ul","video"],S=["b","big","i","small","tt","abbr","acronym","cite","code","dfn","em","kbd","strong","samp","time","var","a","bdo","br","img","map","object","q","script","span","sub","sup","button","input","label","select","textarea"],x=(new RegExp("^("+M.join("|")+")$","i"),new RegExp("^("+S.join("|")+")$","i"),new RegExp("^<("+M.join("|")+")[^>]*?>$","i")),w=new RegExp("^]*?>$","i"),k=new RegExp("^<("+S.join("|")+")[^>]*>$","i"),K=new RegExp("^]*>$","i"),T=/^<([^>\s/]+)[^>]*>$/,R=/^<\/([^>\s]+)[^>]*>$/,z=/^[^<]+$/,N=/^<[^><]*$/,W=//g;let j,L=[];(0,t.memoize)((function(e){const r=[];let a=0,l="",u="",n="";return e=e.replace(W,""),L=[],j=H()((function(e){L.push(e)})),j.addRule(z,"content"),j.addRule(N,"greater-than-sign-content"),j.addRule(x,"block-start"),j.addRule(w,"block-end"),j.addRule(k,"inline-start"),j.addRule(K,"inline-end"),j.addRule(T,"other-element-start"),j.addRule(R,"other-element-end"),j.onText(e),j.end(),(0,t.forEach)(L,(function(e,t){const i=L[t+1];switch(e.type){case"content":case"greater-than-sign-content":case"inline-start":case"inline-end":case"other-tag":case"other-element-start":case"other-element-end":case"greater than sign":i&&(0!==a||"block-start"!==i.type&&"block-end"!==i.type)?u+=e.src:(u+=e.src,r.push(u),l="",u="",n="");break;case"block-start":0!==a&&(""!==u.trim()&&r.push(u),u="",n=""),a++,l=e.src;break;case"block-end":a--,n=e.src,""!==l&&""!==n?r.push(l+u+n):""!==u.trim()&&r.push(u),l="",u="",n=""}a<0&&(a=0)})),r})),new RegExp("^<("+M.join("|")+")[^>]*?>","i"),new RegExp("]*?>$","i");const $=function(e){return U(e=e.replace(/(<([^>]+)>)/gi," "))},P=function(e){return e.replace(/ /g," ")},Y=function(e){return function(e){return e.replace(/\s/g," ")}(e=function(e){return e.replace(/\u2014/g," ")}(e=P(e)))};function Z(e){return e=Y(e),$(e)}const Q=new RegExp("^[.]$"),G=/^<[^><]*$/,q=/^<([^>\s/]+)[^>]*>$/im,V=/^<\/([^>\s]+)[^>]*>$/im,J=/^\s*[[({]\s*$/,X=/^\s*[\])}]\s*$/,ee=function(e,r=!1,a="",l=!1){const u="("+(e=(0,t.map)(e,(function(e){return l&&(e=function(e){const t=[{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}];for(let r=0;re.replace(".","\\.")))),te="(^|$|["+[" ","\\n","\\r","\\t"," ","Û”","ØŸ","ØŒ","Ø›"," ",".",",","'","(",")",'"',"+","-",";","!","?",":","/","»","«","‹","›","<",">","â€","“","ã€","〞","〟","‟","„"].map((e=>"\\"+e)).join("")+"])",re=new RegExp(te+"[A-Za-z]$"),ae=/<\/?([^\s]+?)(\s|>)/,le=["p","div","h1","h2","h3","h4","h5","h6","span","li","main"];class ue{constructor(){this.sentenceDelimiters='â€ã€žã€Ÿâ€žã€â€ºÂ»â€™â€›`"?!…۔؟'}getSentenceDelimiters(){return this.sentenceDelimiters}isNumber(e){return!(0,t.isNaN)(parseInt(e,10))}isBreakTag(e){return/<\/?br/.test(e)}isQuotation(e){return"'"===(e=C(e))||'"'===e}endsWithOrdinalDot(){return!1}isPunctuation(e){return"¿"===e||"¡"===e}removeDuplicateWhitespace(e){return e.replace(/\s+/," ")}isCapitalLetter(e){return e!==e.toLocaleLowerCase()}isSmallerThanSign(e){return"<"===e}getNextTwoCharacters(e){let r="";return(0,t.isUndefined)(e[0])||(r+=e[0].src),(0,t.isUndefined)(e[1])||(r+=e[1].src),r=this.removeDuplicateWhitespace(r),r}isLetterFromSpecificLanguage(e){return[/^[\u0590-\u05fe]+$/i,/^[\u0600-\u06FF]+$/i,/^[\uFB8A\u067E\u0686\u06AF]+$/i].some((t=>t.test(e)))}isValidSentenceBeginning(e){return this.isCapitalLetter(e)||this.isLetterFromSpecificLanguage(e)||this.isNumber(e)||this.isQuotation(e)||this.isPunctuation(e)||this.isSmallerThanSign(e)}isSentenceStart(e){return!(0,t.isUndefined)(e)&&("html-start"===e.type||"html-end"===e.type||"block-start"===e.type)}isSentenceEnding(e){return!(0,t.isUndefined)(e)&&("full-stop"===e.type||"sentence-delimiter"===e.type)}isPartOfPersonInitial(e,r,a,l){return!(0,t.isUndefined)(e)&&!(0,t.isUndefined)(a)&&!(0,t.isUndefined)(l)&&!(0,t.isUndefined)(r)&&"full-stop"===e.type&&"sentence"===r.type&&re.test(r.src)&&"sentence"===a.type&&1===a.src.trim().length&&"full-stop"===l.type}tokenizeSmallerThanContent(e,r,a){const l=e.src.substring(1),u=this.createTokenizer();this.tokenize(u.tokenizer,l);const n=this.getSentencesFromTokens(u.tokens,!1);if(n[0]=(0,t.isUndefined)(n[0])?"<":"<"+n[0],this.isValidSentenceBeginning(n[0])&&(r.push(a),a=""),a+=n[0],n.length>1){r.push(a),a="",n.shift();const e=n.pop();n.forEach((e=>{r.push(e)}));const t=new RegExp("[."+this.getSentenceDelimiters()+"]$");e.match(t)?r.push(e):a=e}return{tokenSentences:r,currentSentence:a}}createTokenizer(){const e=new RegExp("^["+this.getSentenceDelimiters()+"]$"),t=new RegExp("^[^."+this.getSentenceDelimiters()+"<\\(\\)\\[\\]]+$"),r=[],a=H()((function(e){r.push(e)}));return a.addRule(Q,"full-stop"),a.addRule(G,"smaller-than-sign-content"),a.addRule(q,"html-start"),a.addRule(V,"html-end"),a.addRule(J,"block-start"),a.addRule(X,"block-end"),a.addRule(e,"sentence-delimiter"),a.addRule(t,"sentence"),{tokenizer:a,tokens:r}}tokenize(e,t){e.onText(t);try{e.end()}catch(e){console.error("Tokenizer end error:",e,e.tokenizer2)}}endsWithAbbreviation(e){const t=e.match(ee);if(!t)return!1;const r=t.pop();return e.endsWith(r)}isValidTagPair(e,t){const r=e.src,a=t.src,l=r.match(ae)[1];return l===a.match(ae)[1]&&le.includes(l)}getSentencesFromTokens(e,r=!0){let a,l,u=[],n="";do{l=!1;const t=e[0],r=e[e.length-1];t&&r&&"html-start"===t.type&&"html-end"===r.type&&this.isValidTagPair(t,r)&&(e=e.slice(1,e.length-1),l=!0)}while(l&&e.length>1);return e.forEach(((r,l)=>{let i,g,v;const s=e[l+1],c=e[l-1],o=e[l+2];switch(g=this.getNextTwoCharacters([s,o]),i=g.length>=2,a=i?g[1]:"",r.type){case"html-start":case"html-end":this.isBreakTag(r.src)?(u.push(n),n=""):n+=r.src;break;case"smaller-than-sign-content":v=this.tokenizeSmallerThanContent(r,u,n),u=v.tokenSentences,n=v.currentSentence;break;case"sentence":case"block-start":n+=r.src;break;case"sentence-delimiter":if(n+=r.src,!(0,t.isUndefined)(s)&&"block-end"!==s.type&&"sentence-delimiter"!==s.type&&this.isCharacterASpace(s.src[0])){if(this.isQuotation(r.src)&&c&&"."!==c.src)break;this.isQuotation(r.src)||"…"===r.src?n=this.getValidSentence(i,a,g,s,u,n):(u.push(n),n="")}break;case"full-stop":if(n+=r.src,g=this.getNextTwoCharacters([s,o]),i=g.length>=2,a=i?g[1]:"",this.endsWithAbbreviation(n))break;if(i&&this.isNumber(g[0]))break;if(this.isPartOfPersonInitial(r,c,s,o))break;if(this.endsWithOrdinalDot(n))break;n=this.getValidSentence(i,a,g,s,u,n);break;case"block-end":if(n+=r.src,g=this.getNextTwoCharacters([s,o]),i=g.length>=2,a=i?g[0]:"",i&&this.isNumber(g[0])||this.isSentenceEnding(c)&&!this.isValidSentenceBeginning(a)&&!this.isSentenceStart(s))break;this.isSentenceEnding(c)&&(this.isSentenceStart(s)||this.isValidSentenceBeginning(a))&&(u.push(n),n="")}})),""!==n&&u.push(n),r&&(u=(0,t.map)(u,(function(e){return e.trim()}))),u}getValidSentence(e,t,r,a,l,u){return(e&&this.isValidSentenceBeginning(t)&&this.isCharacterASpace(r[0])||this.isSentenceStart(a))&&(l.push(u),u=""),u}isCharacterASpace(e){return/\s/.test(e)}}class ne extends ue{constructor(){super(),this.sentenceDelimiters="?!…。。ï¼â€¼ï¼Ÿâ‡â‰âˆâ‰â€¥"}isNumber(e){return!(0,t.isNaN)(parseInt(e,10))||[/^[\uFF10-\uFF19]+$/i,/^[\u2460-\u249B]+$/i,/^[\u3220-\u3229]+$/i,/^[\u3280-\u3289]+$/i].some((t=>t.test(e)))}isQuotation(e){return"'"===(e=C(e))||'"'===e||/^[\u300C\u300E\u3008\u3014\u3010\uFF5B\uFF3B]+$/i.test(e)}isLetterFromSpecificLanguage(e){return[/^[\u3040-\u3096]+$/i,/^[\u30A1-\u30FA]+$/i,/^[\u31F0-\u31FF]+$/i,/^[\uFF66-\uFF9D]+$/i,/^[\u4E00-\u9FFC]+$/i].some((t=>t.test(e)))}isCharacterASpace(){return!0}}const ie=(0,t.memoize)((function(e,t=!0){const r=new ne,{tokenizer:a,tokens:l}=r.createTokenizer();return r.tokenize(a,e),0===l.length?[]:r.getSentencesFromTokens(l,t)}),((...e)=>JSON.stringify(e))),ge=function(e){if(""===e)return[];const r=(new(u())).segment(e);return(0,t.map)(r)},ve=["ã“ã®","ãã®","ã‚ã®","ã“ã‚“ãª","ãã‚“ãª","ã‚ã‚“ãª","ã“ã†","ãã†","ã‚ã‚"],se=[["ã ã‹ã‚‰"],["ãã®","ãŸã‚"],["ã“ã®","ãŸã‚"],["ãれ","ã§"],["ãã“","ã§"],["よã£ã¦"],["ã™ã‚‹","ã¨"],["ã ã¨","ã™ã‚‹","ã¨"],["ゆãˆ","ã«"],["ãれゆãˆ","ã«"],["ã—","ãŸ","ãŒã£","ã¦"],["ãれゆãˆ"],["ãれ","ãªã‚‰"],["ãれ","ã§","ã¯"],["ãªã‚‰ã°"],["ã ","ã¨","ã—","ãŸã‚‰"],["ãã†","ã™ã‚‹","ã¨"],["ãã†","ã—","ãŸã‚‰"],["ã•ã‚‚","ãªã„","ã¨"],["ãã†ã—","ãªã„","ã¨"],["ãã†","ã§","ãªã„","ãªã‚‰"],["ã ã¨","ã™ã‚Œ","ã°"],["ãã†","ãªã‚‹","ã¨"],["ã¨","ãªã‚‹","ã¨"],["ã¨","ãªã‚Œ","ã°"],["ãã†ã—ã¦","ã¿ã‚‹","ã¨"],["ãã†","ãªã‚Œ","ã°"],["ãã†ã—ã¦"],["ãã®ã‘ã£ã‹"],["ãã®","çµæžœ"],["ã—ã‹ã—"],["ã‘ã©"],["ãŸã "],["ã ","ãŒ"],["ã—ã‹ã—","ãªãŒã‚‰"],["ã‘れã©"],["ã‘れã©ã‚‚"],["ã ã‘ã©"],["ã ã‘ã©ã‚‚"],["ãã†","ã§","ã¯","ã‚ã‚‹","ãŒ"],["ãれ","ã§ã‚‚"],["ã§ã‚‚"],["ã§","ã¯","ã‚ã‚‹","ãŒ"],["ã«","ã‚‚","ã‹ã‹ã‚らãš"],["ãれ","ã«","ã‚‚","ã‹ã‹ã‚らãš"],["ã¨ã“ã‚","ãŒ"],["ã—ã‹ã‚‹","ã«"],["ã¨","ã¯ã„ã†","ã‚‚ã®","ã®"],["ã¨","ã¯","言ã†","ã‚‚ã®","ã®"],["ãª","ã®","ã«"],["ãれ","ãª","ã®","ã«"],["ã¨","ã¯","ã„ãˆ"],["ãã†","ã¯ã„ã†","ã‚‚ã®","ã®"],["ãã†","ã¯","言ã†","ã‚‚ã®","ã®"],["ãã®ãã›"],["ã•り","ã¨","ã¦"],["ã•","れã©"],["ã“れ","ã«","ã¯ã‚“ã—","ã¦"],["ã“れ","ã«","åã—","ã¦"],["ãれ","ã«","ã—","ã¦","ã¯"],["ãã®ã‚り","ã«","ã¯"],["ãã®ã‚り","ã«"],["ãれ","ãªã‚‰"],["ãªã‚‰ã³","ã«"],["ãŠãªã˜ã"],["åŒã˜ã"],["ã¾ãŸ"],["ã©ã†","よã†","ã«"],["åŒæ§˜","ã«"],["ã•","れã©","ã‚‚"],["ã•らã«"],["ãŠãªã˜","よã†","ã«"],["åŒã˜","よã†","ã«"],["ã®ã¿","ãªã‚‰","ãš"],["ã—ã‹ã‚‚"],["ãŠã¾ã‘","ã«"],["ãã®ã†ãˆ"],["ãã®","上"],["ãã—ã¦"],["ãれ","ã‹ã‚‰"],["ãれã©ã“ã‚ã‹"],["ã©ã“ã‚ã‹"],["ãれ","ã«"],["ãれ","ã«","ã—","ã¦","ã‚‚"],["ãã‚ãˆ","ã¦"],["加ãˆ","ã¦"],["ãれ","ã«ãã‚ãˆ","ã¦"],["ãれ","ã«","加ãˆ","ã¦"],["ã²ã„ã¦","ã¯"],["ãªãŠ"],["ãれ","ã°ã‹ã‚Š","ã§","ãªã"],["ãれ","ã°ã‹ã‚Šã‹"],["ã¨ã‚‚","ã‚れ"],["ãã®","ã†ãˆ","ã«"],["ãã®","上","ã«"],["ãã®","ã†ãˆ","ã§"],["ãã®","上","ã§"],["ã‚ã¾ã¤ã•ãˆ"],["ã„ã£ã½ã†"],["一方"],["ãŸã»ã†"],["ä»–æ–¹"],["ãŽã‚ƒã","ã«"],["逆","ã«"],["ãれ","ã«","ãŸã„ã—","ã¦"],["ãれ","ã«å¯¾ã—ã¦"],["ãŸã„ã—","ã¦"],["対ã—ã¦"],["ã¯ã‚“","ãŸã„","ã«"],["å対","ã«"],["ã¯ã‚“ã‚ã‚“"],["åé¢"],["ãã®","ã¯","ã‚“ã‚ã‚“"],["ãã®","åé¢"],["ã¾ãŸ","ã¯"],["ã‚‚ã—ã","ã¯"],["ã‚ã‚‹ã„","ã¯"],["ãれã¨ã‚‚"],["ã»ã‹","ã«","ã¯"],["ä»–","ã«","ã¯"],["ã»ã‹","ã«","ã‚‚"],["ä»–","ã«","ã‚‚"],["ã ã„ã„ã¡","ã«"],["第一","ã«"],["ã ã„","ã«","ã«"],["第二","ã«"],["ã ã„","ã•ã‚“","ã«"],["第三","ã«"],["ã ã„","よん","ã«"],["第四","ã«"],["ã²ã¨ã¤ã‚","ã¯"],["一ã¤ã‚","ã¯"],["一ã¤","ç›®","ã¯"],["1ã¤ã‚","ã¯"],["1ã¤","ç›®","ã¯"],["ãµãŸã¤ã‚","ã¯"],["二ã¤ã‚","ã¯"],["二ã¤","ç›®","ã¯"],["ï¼’ã¤ã‚","ã¯"],["2ã¤","ç›®","ã¯"],["ã¿ã£ã¤ã‚","ã¯"],["三ã¤ã‚","ã¯"],["三ã¤","ç›®","ã¯"],["3ã¤ã‚","ã¯"],["3ã¤","ç›®","ã¯"],["よã£ã¤ã‚","ã¯"],["å››ã¤ã‚","ã¯"],["å››ã¤","ç›®","ã¯"],["ï¼”ã¤ã‚","ã¯"],["4ã¤","ç›®","ã¯"],["ã„ã£ã¦","ã‚“ã‚","ã¯"],["一点目","ã¯"],["1","点目","ã¯"],["ã«","ã¦ã‚“ã‚","ã¯"],["二点目","ã¯"],["2","点目","ã¯"],["ã•ã‚“","ã¦","ã‚“ã‚","ã¯"],["三点目","ã¯"],["3","点目","ã¯"],["よん","ã¦","ã‚“ã‚","ã¯"],["四点目","ã¯"],["4","点目","ã¯"],["ã²ã¨ã¤","ã¯"],["一ã¤","ã¯"],["1ã¤","ã¯"],["ã‚‚ã†","ã²","ã¨ã¤","ã¯"],["ã‚‚ã†","一ã¤","ã¯"],["ã‚‚ã†","1","ã¤","ã¯"],["ã„ã£ã¦ã‚“","ã¯"],["一点","ã¯"],["1点","ã¯"],["ã‚‚ã†ã„ã£ã¦ã‚“","ã¯"],["ã‚‚ã†","一点","ã¯"],["ã‚‚ã†","1","点","ã¯"],["ã¯ã˜ã‚","ã«"],["ã•ã„ã—ょ","ã«"],["最åˆ","ã«"],["ã¤ã¥ã„","ã¦"],["ç¶šã„","ã¦"],["ã¤ã„","ã§"],["次ã„","ã§"],["ã•ã„ã”ã«"],["最後","ã«"],["ãŠã‚り","ã«"],["終ã‚り","ã«"],["終り","ã«"],["ãã®","ã”"],["ãã®","後"],["ã¾ãš"],["ã¤ãŽ","ã«"],["次","ã«"],["ã•らã«"],["ãã®","ã‚ã¨"],["ãã®","ã‚ã¨","ã«"],["ãã®å¾Œ","ã«"],["ãªãœ","ãªã‚‰"],["ãªãœ","ãªã‚‰","ã°"],["ãªãœã‹","ã¨ã„ã†","ã¨"],["ã¨ã„ã†","ã®","ã¯"],["ã¨ã„ã†","ã®","ã‚‚"],["ã ã£","ã¦"],["ãªã«","ã—ã‚"],["ãªã«ã›"],["ã©ã†","ã—ã¦","ã‹","ã¨ã„ã†","ã¨"],["ãªã‚“","ã§","ã‹","ã¨ã„ã†","ã¨"],["ã¡","ãªã¿","ã«"],["ãŸã "],["ã‚‚ã£ã¨ã‚‚"],["ãã®","ã‹ã‚り"],["ãŸã ã—"],["ãã‚‚","ãã‚‚"],["ã˜ã¤","ã¯"],["実","ã¯"],["ã˜ã¤","ã®","ã¨ã“ã‚"],["実","ã®","ã¨ã“ã‚"],["ã˜ã¤","ã¯","ã¨ã„ã†","ã¨"],["実","ã¯","ã¨ã„ã†","ã¨"],["実","ã¯","ã¨","言ã†","ã¨"],["ã¤ã¾ã‚Š"],["ã„ã„ã‹ãˆã‚‹","ã¨"],["言ã„","ã‹ãˆã‚‹","ã¨"],["è¨€ã„æ›ãˆã‚‹","ã¨"],["ã™","ãªã‚ã¡"],["よã†","ã¯"],["è¦","ã¯"],["ã¨ã©","ã®","ã¤ã¾ã‚Š"],["よã†","ã™ã‚‹","ã«"],["è¦","ã™ã‚‹","ã«"],["ã‚€ã—ã‚"],["ã‹ã‚“ã’ã‚“","ã™ã‚‹","ã¨"],["æ›è¨€","ã™ã‚‹","ã¨"],["ã‹ãˆã£","ã¦"],["ã‹ã‚り","ã«"],["ãã®","ã‹ã‚り"],["ã„ã‚ã°"],["ã„ã£ã¦","ã¿ã‚Œ","ã°"],["言ã£","ã¦","ã¿ã‚Œ","ã°"],["ã¨ã„ã†","より"],["ã¨è¨€ã†","より"],["ã¨ã„ã†","より","ã¯"],["ã¨è¨€ã†","より","ã¯"],["ã¨ã„ã†","より","ã‚‚"],["ã¨è¨€ã†","より","ã‚‚"],["ã¨ã„ã†","ã‹"],["ããŸã„","ã¦","ã","ã«","ã¯"],["具体","çš„","ã«","ã¯"],["ãŸ","ã¨ãˆã°"],["例ãˆ","ã°"],["ã¨ã‚Šã‚ã‘"],["ãªã‹","ã§","ã‚‚"],["ã“ã¨","ã«"],["殊","ã«"],["ã¨ã","ã«"],["特ã«"],["ãれ","ã«","ã¯"],["ãã®","ãŸã‚","ã«","ã¯"],["ãã†","ã™ã‚‹","ã°","ã‚ã„"],["ãã†","ã™ã‚‹","å ´åˆ"],["ãã®","ã°","ã‚ã„"],["ãã®","å ´åˆ"],["ãã†ã™ã‚Œ","ã°"],["ãれ","ã«ã‚ˆã£ã¦"],["ãã†","ã™ã‚‹","ã“ã¨","ã§"],["ã•","れ","ã°"],["ã•ã™ã‚Œ","ã°"],["ã•ã¦"],["ãれ","ã«ã¤ã‘ã¦","ã‚‚"],["ã¨ã“ã‚","ã§"],["ã¨ã","ã«"],["時","ã«"],["ãれ","ã¯","ã•","ã¦","ãŠã"],["ã§","ã¯"],["ãれ","ã§","ã¯"],["ã˜ã‚ƒ","ã‚"],["ã¨ã‚‚","ã‚れ"],["ãれ","ã¯","ãã†","ã¨"],["ãã†ã„ãˆ","ã°"],["ãれ","ã«","ã—","ãŸã£","ã¦"],["ã—ょã›ã‚“"],["所詮"],["ã©","ã®","ã¿ã¡"],["ã©ã®","é“"],["ã©ã£ã¡ã¿ã¡"],["ã©ã£ã¡é“"],["ã“ã®","よã†","ã«"],["ã“ã†ã—ã¦"],["ã„ãšã‚Œ","ã«","ã›","よ"],["ã„ãšã‚Œ","ã«","ã—","ã¦","ã‚‚"],["ã©ã¡ã‚‰","ã«","ã›","よ"],["ã©ã£ã¡","ã«","ã—","ã¦","ã‚‚"],["ã©ã£ã¡","ã«","ã›","よ"],["ã©ã¡ã‚‰","ã«","ã—","ã¦","ã‚‚"],["ã¨ã‚‚","ã‚れ"],["ã„ã˜ã‚‡ã†","ã®","よã†","ã«"],["以上","ã®","よã†","ã«"],["ãŸã—ã‹","ã«"],["確ã‹","ã«"],["ã„ã£ã½ã†","ã§"],["一方","ã§"],["ã„ã£ã½ã†","ã§","ã¯"],["一方","ã§","ã¯"],["ãŸã»ã†","ã§"],["ä»–æ–¹","ã§"],["ãŸã»ã†","ã§","ã¯"],["ä»–æ–¹","ã§","ã¯"],["ã‹ã‚Š","ã«"],["ä»®","ã«"],["ãŸ","ã¨ãˆ"],["よã—ã‚“ã°"],["ã¨","ã™ã‚‹","ã¨"],["ã¨ã™ã‚Œ","ã°"],["ã—","ã‹ã‚‰","ã°"],["ã«","ã‚‚","ã‹ã‹ã‚らãš"],["ã«","ã‚‚","拘ã‚らãš"],["ã¨ã„ãˆã©ã‚‚"],["ã¨","言ãˆ","ã©","ã‚‚"],["ã¨ã„ã£ã¦","ã‚‚"],["ã¨è¨€ã£","ã¦","ã‚‚"],["ã¨","ã¯ã„ã†","ã‚‚ã®","ã®"],["ã¨","ã¯","言ã†","ã‚‚ã®","ã®"],["ã“ã¨","ã«","ã¯"],["ã¾ã‚‚","ãªã"],["ã‚„ãŒ","ã¦"],["ã¨","ãŸã‚“","ã«"],["ã¤ã¥ã„","ã¦"],["ç¶šã„","ã¦"],["ã²ãã¤ã¥ã"],["引ãç¶šã"],["ã‹ã¨","ãŠã‚‚","ã†","ã¨"],["ã‹ã¨","æ€ã†","ã¨"],["ã‹ã¨","ãŠã‚‚ãˆã°"],["ã‹ã¨","æ€ãˆ","ã°"],["ã‹ã¨","ãŠã‚‚ã†ã¾ã‚‚","ãªã"],["ã‹ã¨","æ€ã†é–“ã‚‚","ãªã"],["ã‹ã¨","æ€ã†","ã¾ã‚‚","ãªã"],["ã¨","ãŸã‚“"],["ãã®ã—ã‚…ã‚“ã‹ã‚“"],["ãã®","瞬間"],["ã©ã†ã˜","ã«"],["åŒ","時ã«"],["ã¾ã—","ã¦"],["ã¾ã—","ã¦","ã‚„"],["ã“れ","ã«","ãŸã„ã—","ã¦"],["ã“れ","ã«å¯¾ã—ã¦"],["ã‚‚ã¡ã‚ã‚“"],["ã‚‚","ã¨ã‚ˆã‚Š"],["ãれ","ã ","ã‹ã‚‰"],["ã“れ","ã ","ã‹ã‚‰"],["ã¨ã†ãœã‚“"],["当然"]],ce={lengthCriteria:7},oe={defaultAnalysis:{recommendedMinimum:600,slightlyBelowMinimum:500,belowMinimum:400,veryFarBelowMinimum:200},defaultCornerstone:{recommendedMinimum:1800,slightlyBelowMinimum:800,belowMinimum:600,scores:{belowMinimum:-20,farBelowMinimum:-20}},taxonomyAssessor:{recommendedMinimum:60,slightlyBelowMinimum:20,veryFarBelowMinimum:1},productSEOAssessor:{recommendedMinimum:400,slightlyBelowMinimum:300,belowMinimum:200,veryFarBelowMinimum:100},productCornerstoneSEOAssessor:{recommendedMinimum:800,slightlyBelowMinimum:600,belowMinimum:400,scores:{belowMinimum:-20,farBelowMinimum:-20}},collectionSEOAssessor:{recommendedMinimum:60,slightlyBelowMinimum:20,veryFarBelowMinimum:1},collectionCornerstoneSEOAssessor:{recommendedMinimum:60,slightlyBelowMinimum:20,veryFarBelowMinimum:1}},Ee={defaultPageParams:{recommendedLength:300,maximumRecommendedLength:400},productPageParams:{recommendedLength:140,maximumRecommendedLength:200}},he={transitionWords:400,keyphraseDensity:200},de={recommendedLength:40},fe={defaultParameters:{parameters:{recommendedMaximumLength:600,slightlyTooMany:600,farTooMany:700},applicableIfTextLongerThan:600},cornerstoneParameters:{parameters:{recommendedMaximumLength:500,slightlyTooMany:500,farTooMany:600},applicableIfTextLongerThan:500}},Ce={defaultAnalysis:{parameters:{recommendedMaximum:12,acceptableMaximum:18}},productPages:{parameters:{recommendedMinimum:8,recommendedMaximum:12,acceptableMaximum:18,acceptableMinimum:4}}},Ae={recommendedMaximumLength:60,maximumLength:80},Fe="[\\–\\-\\(\\)_\\[\\]’'.?!:;,¿¡«»‹›—×+&<>]+",pe=new RegExp("^"+Fe),De=new RegExp(Fe+"$");function me(e,r){if(o.includes(e[0])&&o.includes(e[e.length-1]))return[[e]];const a=c(e);if(0===a.length)return[[]];const l=(0,t.get)(r.getData("morphology"),"ja",!1);return a.map((e=>l?F(e,l):[e]))}function Be(e,t){let r=e.getKeyword().toLocaleLowerCase("ja").trim();r=r.replace(/\s/g,"");const a=function(e){let t=e.split(",");return t=t.map((e=>U(e).replace(pe,"").replace(De,""))).filter((e=>e)),t}(e.getSynonyms().toLocaleLowerCase("ja").trim());return{keyphraseForms:me(r,t),synonymsForms:a.map((e=>me(e,t)))}}function Oe(e){return{keyphraseLength:m(v(e.getKeyword())),functionWords:[]}}function _e(e){return{text:e.getText(),count:_(e.getText()),unit:"character"}}const Ie="\\–\\-\\(\\)_\\[\\]’‘“â€ã€ã€žã€Ÿâ€Ÿâ€ž\"'.?!:;,¿¡«»‹›—×+&۔؟،؛。。ï¼â€¼ï¼Ÿâ‡â‰âˆâ€¥â€¦ãƒ»ãƒ¼ã€ã€ƒã€„〆〇〈〉《》「ã€ã€Žã€ã€ã€‘〒〓〔〕〖〗〘〙〚〛〜ã€ã€žã€Ÿã€ ã€¶ã€¼ã€½ï½›ï½ï½œï½žï½Ÿï½ ï½¢ï½£ï½¤ï¼»ï¼½ï½¥ï¿¥ï¼„%@&'()*ï¼ï¼šï¼›ï¼œï¼žï¼¼\\<>",be=(Ie.split(""),new RegExp("^["+Ie+"]+")),He=new RegExp("["+Ie+"]+$");function ye(e){e=(e=P(e)).replace("&","");const t=new RegExp("(\\\\)","g");return(e=(e=e.replace(t,"")).replace(be,"")).replace(He,"")}function Ue(e){return e.split("_")[0]}const Me={es:[{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u00FA\u00FC]/g,alternative:"u"},{letter:/[\u00DA\u00DC]/g,alternative:"U"}],pl:[{letter:/[\u0105]/g,alternative:"a"},{letter:/[\u0104]/g,alternative:"A"},{letter:/[\u0107]/g,alternative:"c"},{letter:/[\u0106]/g,alternative:"C"},{letter:/[\u0119]/g,alternative:"e"},{letter:/[\u0118]/g,alternative:"E"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u0141]/g,alternative:"L"},{letter:/[\u0144]/g,alternative:"n"},{letter:/[\u0143]/g,alternative:"N"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u015B]/g,alternative:"s"},{letter:/[\u015A]/g,alternative:"S"},{letter:/[\u017A\u017C]/g,alternative:"z"},{letter:/[\u0179\u017B]/g,alternative:"Z"}],de:[{letter:/[\u00E4]/g,alternative:"ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00FC]/g,alternative:"ue"},{letter:/[\u00DC]/g,alternative:"Ue"},{letter:/[\u00F6]/g,alternative:"oe"},{letter:/[\u00D6]/g,alternative:"Oe"},{letter:/[\u00DF]/g,alternative:"ss"},{letter:/[\u1E9E]/g,alternative:"SS"}],nbnn:[{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00D8]/g,alternative:"Oe"},{letter:/[\u00E9\u00E8\u00EA]/g,alternative:"e"},{letter:/[\u00C9\u00C8\u00CA]/g,alternative:"E"},{letter:/[\u00F3\u00F2\u00F4]/g,alternative:"o"},{letter:/[\u00D3\u00D2\u00D4]/g,alternative:"O"}],sv:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E4]/g,alternative:"ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00F6]/g,alternative:"oe"},{letter:/[\u00D6]/g,alternative:"Oe"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00C0]/g,alternative:"A"}],fi:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"},{letter:/[\u00F6]/g,alternative:"o"},{letter:/[\u00D6]/g,alternative:"O"},{letter:/[\u017E]/g,alternative:"zh"},{letter:/[\u017D]/g,alternative:"Zh"},{letter:/[\u0161]/g,alternative:"sh"},{letter:/[\u0160]/g,alternative:"Sh"}],da:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00D8]/g,alternative:"Oe"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"}],tr:[{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u011F]/g,alternative:"g"},{letter:/[\u011E]/g,alternative:"G"},{letter:/[\u00F6]/g,alternative:"o"},{letter:/[\u00D6]/g,alternative:"O"},{letter:/[\u015F]/g,alternative:"s"},{letter:/[\u015E]/g,alternative:"S"},{letter:/[\u00E2]/g,alternative:"a"},{letter:/[\u00C2]/g,alternative:"A"},{letter:/[\u0131\u00EE]/g,alternative:"i"},{letter:/[\u0130\u00CE]/g,alternative:"I"},{letter:/[\u00FC\u00FB]/g,alternative:"u"},{letter:/[\u00DC\u00DB]/g,alternative:"U"}],lv:[{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u010D]/g,alternative:"c"},{letter:/[\u010C]/g,alternative:"C"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u0123]/g,alternative:"g"},{letter:/[\u0122]/g,alternative:"G"},{letter:/[\u012B]/g,alternative:"i"},{letter:/[\u012A]/g,alternative:"I"},{letter:/[\u0137]/g,alternative:"k"},{letter:/[\u0136]/g,alternative:"K"},{letter:/[\u013C]/g,alternative:"l"},{letter:/[\u013B]/g,alternative:"L"},{letter:/[\u0146]/g,alternative:"n"},{letter:/[\u0145]/g,alternative:"N"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u016B]/g,alternative:"u"},{letter:/[\u016A]/g,alternative:"U"},{letter:/[\u017E]/g,alternative:"z"},{letter:/[\u017D]/g,alternative:"Z"}],is:[{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00F0]/g,alternative:"d"},{letter:/[\u00D0]/g,alternative:"D"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00F3\u00F6]/g,alternative:"o"},{letter:/[\u00D3\u00D6]/g,alternative:"O"},{letter:/[\u00FA]/g,alternative:"u"},{letter:/[\u00DA]/g,alternative:"U"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u00FE]/g,alternative:"th"},{letter:/[\u00DE]/g,alternative:"Th"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"}],fa:[{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00F0]/g,alternative:"d"},{letter:/[\u00D0]/g,alternative:"D"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u00FA]/g,alternative:"u"},{letter:/[\u00DA]/g,alternative:"U"},{letter:/[\u00F3\u00F8]/g,alternative:"o"},{letter:/[\u00D3\u00D8]/g,alternative:"O"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"}],cs:[{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u010D]/g,alternative:"c"},{letter:/[\u010C]/g,alternative:"C"},{letter:/[\u010F]/g,alternative:"d"},{letter:/[\u010E]/g,alternative:"D"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u0148]/g,alternative:"n"},{letter:/[\u0147]/g,alternative:"N"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u0159]/g,alternative:"r"},{letter:/[\u0158]/g,alternative:"R"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0165]/g,alternative:"t"},{letter:/[\u0164]/g,alternative:"T"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u017E]/g,alternative:"z"},{letter:/[\u017D]/g,alternative:"Z"},{letter:/[\u00E9\u011B]/g,alternative:"e"},{letter:/[\u00C9\u011A]/g,alternative:"E"},{letter:/[\u00FA\u016F]/g,alternative:"u"},{letter:/[\u00DA\u016E]/g,alternative:"U"}],ru:[{letter:/[\u0430]/g,alternative:"a"},{letter:/[\u0410]/g,alternative:"A"},{letter:/[\u0431]/g,alternative:"b"},{letter:/[\u0411]/g,alternative:"B"},{letter:/[\u0432]/g,alternative:"v"},{letter:/[\u0412]/g,alternative:"V"},{letter:/[\u0433]/g,alternative:"g"},{letter:/[\u0413]/g,alternative:"G"},{letter:/[\u0434]/g,alternative:"d"},{letter:/[\u0414]/g,alternative:"D"},{letter:/[\u0435]/g,alternative:"e"},{letter:/[\u0415]/g,alternative:"E"},{letter:/[\u0436]/g,alternative:"zh"},{letter:/[\u0416]/g,alternative:"Zh"},{letter:/[\u0437]/g,alternative:"z"},{letter:/[\u0417]/g,alternative:"Z"},{letter:/[\u0456\u0438\u0439]/g,alternative:"i"},{letter:/[\u0406\u0418\u0419]/g,alternative:"I"},{letter:/[\u043A]/g,alternative:"k"},{letter:/[\u041A]/g,alternative:"K"},{letter:/[\u043B]/g,alternative:"l"},{letter:/[\u041B]/g,alternative:"L"},{letter:/[\u043C]/g,alternative:"m"},{letter:/[\u041C]/g,alternative:"M"},{letter:/[\u043D]/g,alternative:"n"},{letter:/[\u041D]/g,alternative:"N"},{letter:/[\u0440]/g,alternative:"r"},{letter:/[\u0420]/g,alternative:"R"},{letter:/[\u043E]/g,alternative:"o"},{letter:/[\u041E]/g,alternative:"O"},{letter:/[\u043F]/g,alternative:"p"},{letter:/[\u041F]/g,alternative:"P"},{letter:/[\u0441]/g,alternative:"s"},{letter:/[\u0421]/g,alternative:"S"},{letter:/[\u0442]/g,alternative:"t"},{letter:/[\u0422]/g,alternative:"T"},{letter:/[\u0443]/g,alternative:"u"},{letter:/[\u0423]/g,alternative:"U"},{letter:/[\u0444]/g,alternative:"f"},{letter:/[\u0424]/g,alternative:"F"},{letter:/[\u0445]/g,alternative:"kh"},{letter:/[\u0425]/g,alternative:"Kh"},{letter:/[\u0446]/g,alternative:"ts"},{letter:/[\u0426]/g,alternative:"Ts"},{letter:/[\u0447]/g,alternative:"ch"},{letter:/[\u0427]/g,alternative:"Ch"},{letter:/[\u0448]/g,alternative:"sh"},{letter:/[\u0428]/g,alternative:"Sh"},{letter:/[\u0449]/g,alternative:"shch"},{letter:/[\u0429]/g,alternative:"Shch"},{letter:/[\u044A]/g,alternative:"ie"},{letter:/[\u042A]/g,alternative:"Ie"},{letter:/[\u044B]/g,alternative:"y"},{letter:/[\u042B]/g,alternative:"Y"},{letter:/[\u044C]/g,alternative:""},{letter:/[\u042C]/g,alternative:""},{letter:/[\u0451\u044D]/g,alternative:"e"},{letter:/[\u0401\u042D]/g,alternative:"E"},{letter:/[\u044E]/g,alternative:"iu"},{letter:/[\u042E]/g,alternative:"Iu"},{letter:/[\u044F]/g,alternative:"ia"},{letter:/[\u042F]/g,alternative:"Ia"}],eo:[{letter:/[\u0109]/g,alternative:"ch"},{letter:/[\u0108]/g,alternative:"Ch"},{letter:/[\u011d]/g,alternative:"gh"},{letter:/[\u011c]/g,alternative:"Gh"},{letter:/[\u0125]/g,alternative:"hx"},{letter:/[\u0124]/g,alternative:"Hx"},{letter:/[\u0135]/g,alternative:"jx"},{letter:/[\u0134]/g,alternative:"Jx"},{letter:/[\u015d]/g,alternative:"sx"},{letter:/[\u015c]/g,alternative:"Sx"},{letter:/[\u016d]/g,alternative:"ux"},{letter:/[\u016c]/g,alternative:"Ux"}],af:[{letter:/[\u00E8\u00EA\u00EB]/g,alternative:"e"},{letter:/[\u00CB\u00C8\u00CA]/g,alternative:"E"},{letter:/[\u00EE\u00EF]/g,alternative:"i"},{letter:/[\u00CE\u00CF]/g,alternative:"I"},{letter:/[\u00F4\u00F6]/g,alternative:"o"},{letter:/[\u00D4\u00D6]/g,alternative:"O"},{letter:/[\u00FB\u00FC]/g,alternative:"u"},{letter:/[\u00DB\u00DC]/g,alternative:"U"}],ca:[{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00C0]/g,alternative:"A"},{letter:/[\u00E9|\u00E8]/g,alternative:"e"},{letter:/[\u00C9|\u00C8]/g,alternative:"E"},{letter:/[\u00ED|\u00EF]/g,alternative:"i"},{letter:/[\u00CD|\u00CF]/g,alternative:"I"},{letter:/[\u00F3|\u00F2]/g,alternative:"o"},{letter:/[\u00D3|\u00D2]/g,alternative:"O"},{letter:/[\u00FA|\u00FC]/g,alternative:"u"},{letter:/[\u00DA|\u00DC]/g,alternative:"U"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"}],ast:[{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"}],an:[{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00F1]/g,alternative:"ny"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00D1]/g,alternative:"Ny"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u00C1]/g,alternative:"A"}],ay:[{letter:/(([\u00EF])|([\u00ED]))/g,alternative:"i"},{letter:/(([\u00CF])|([\u00CD]))/g,alternative:"I"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u0027]/g,alternative:""},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"}],en:[{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0152]/g,alternative:"Oe"},{letter:/[\u00EB\u00E9]/g,alternative:"e"},{letter:/[\u00C9\u00CB]/g,alternative:"E"},{letter:/[\u00F4\u00F6]/g,alternative:"o"},{letter:/[\u00D4\u00D6]/g,alternative:"O"},{letter:/[\u00EF]/g,alternative:"i"},{letter:/[\u00CF]/g,alternative:"I"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"}],fr:[{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0152]/g,alternative:"Oe"},{letter:/[\u00E9\u00E8\u00EB\u00EA]/g,alternative:"e"},{letter:/[\u00C9\u00C8\u00CB\u00CA]/g,alternative:"E"},{letter:/[\u00E0\u00E2]/g,alternative:"a"},{letter:/[\u00C0\u00C2]/g,alternative:"A"},{letter:/[\u00EF\u00EE]/g,alternative:"i"},{letter:/[\u00CF\u00CE]/g,alternative:"I"},{letter:/[\u00F9\u00FB\u00FC]/g,alternative:"u"},{letter:/[\u00D9\u00DB\u00DC]/g,alternative:"U"},{letter:/[\u00F4]/g,alternative:"o"},{letter:/[\u00D4]/g,alternative:"O"},{letter:/[\u00FF]/g,alternative:"y"},{letter:/[\u0178]/g,alternative:"Y"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"}],it:[{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00C0]/g,alternative:"A"},{letter:/[\u00E9\u00E8]/g,alternative:"e"},{letter:/[\u00C9\u00C8]/g,alternative:"E"},{letter:/[\u00EC\u00ED\u00EE]/g,alternative:"i"},{letter:/[\u00CC\u00CD\u00CE]/g,alternative:"I"},{letter:/[\u00F3\u00F2]/g,alternative:"o"},{letter:/[\u00D3\u00D2]/g,alternative:"O"},{letter:/[\u00F9\u00FA]/g,alternative:"u"},{letter:/[\u00D9\u00DA]/g,alternative:"U"}],nl:[{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00E9\u00E8\u00EA\u00EB]/g,alternative:"e"},{letter:/[\u00C9\u00C8\u00CA\u00CB]/g,alternative:"E"},{letter:/[\u00F4\u00F6]/g,alternative:"o"},{letter:/[\u00D4\u00D6]/g,alternative:"O"},{letter:/[\u00EF]/g,alternative:"i"},{letter:/[\u00CF]/g,alternative:"I"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00C4]/g,alternative:"A"}],bm:[{letter:/[\u025B]/g,alternative:"e"},{letter:/[\u0190]/g,alternative:"E"},{letter:/[\u0272]/g,alternative:"ny"},{letter:/[\u019D]/g,alternative:"Ny"},{letter:/[\u014B]/g,alternative:"ng"},{letter:/[\u014A]/g,alternative:"Ng"},{letter:/[\u0254]/g,alternative:"o"},{letter:/[\u0186]/g,alternative:"O"}],uk:[{letter:/[\u0431]/g,alternative:"b"},{letter:/[\u0411]/g,alternative:"B"},{letter:/[\u0432]/g,alternative:"v"},{letter:/[\u0412]/g,alternative:"V"},{letter:/[\u0433]/g,alternative:"h"},{letter:/[\u0413]/g,alternative:"H"},{letter:/[\u0491]/g,alternative:"g"},{letter:/[\u0490]/g,alternative:"G"},{letter:/[\u0434]/g,alternative:"d"},{letter:/[\u0414]/g,alternative:"D"},{letter:/[\u043A]/g,alternative:"k"},{letter:/[\u041A]/g,alternative:"K"},{letter:/[\u043B]/g,alternative:"l"},{letter:/[\u041B]/g,alternative:"L"},{letter:/[\u043C]/g,alternative:"m"},{letter:/[\u041C]/g,alternative:"M"},{letter:/[\u0070]/g,alternative:"r"},{letter:/[\u0050]/g,alternative:"R"},{letter:/[\u043F]/g,alternative:"p"},{letter:/[\u041F]/g,alternative:"P"},{letter:/[\u0441]/g,alternative:"s"},{letter:/[\u0421]/g,alternative:"S"},{letter:/[\u0442]/g,alternative:"t"},{letter:/[\u0422]/g,alternative:"T"},{letter:/[\u0443]/g,alternative:"u"},{letter:/[\u0423]/g,alternative:"U"},{letter:/[\u0444]/g,alternative:"f"},{letter:/[\u0424]/g,alternative:"F"},{letter:/[\u0445]/g,alternative:"kh"},{letter:/[\u0425]/g,alternative:"Kh"},{letter:/[\u0446]/g,alternative:"ts"},{letter:/[\u0426]/g,alternative:"Ts"},{letter:/[\u0447]/g,alternative:"ch"},{letter:/[\u0427]/g,alternative:"Ch"},{letter:/[\u0448]/g,alternative:"sh"},{letter:/[\u0428]/g,alternative:"Sh"},{letter:/[\u0449]/g,alternative:"shch"},{letter:/[\u0429]/g,alternative:"Shch"},{letter:/[\u044C\u042C]/g,alternative:""},{letter:/[\u0436]/g,alternative:"zh"},{letter:/[\u0416]/g,alternative:"Zh"},{letter:/[\u0437]/g,alternative:"z"},{letter:/[\u0417]/g,alternative:"Z"},{letter:/[\u0438]/g,alternative:"y"},{letter:/[\u0418]/g,alternative:"Y"},{letter:/^[\u0454]/g,alternative:"ye"},{letter:/[\s][\u0454]/g,alternative:" ye"},{letter:/[\u0454]/g,alternative:"ie"},{letter:/^[\u0404]/g,alternative:"Ye"},{letter:/[\s][\u0404]/g,alternative:" Ye"},{letter:/[\u0404]/g,alternative:"IE"},{letter:/^[\u0457]/g,alternative:"yi"},{letter:/[\s][\u0457]/g,alternative:" yi"},{letter:/[\u0457]/g,alternative:"i"},{letter:/^[\u0407]/g,alternative:"Yi"},{letter:/[\s][\u0407]/g,alternative:" Yi"},{letter:/[\u0407]/g,alternative:"I"},{letter:/^[\u0439]/g,alternative:"y"},{letter:/[\s][\u0439]/g,alternative:" y"},{letter:/[\u0439]/g,alternative:"i"},{letter:/^[\u0419]/g,alternative:"Y"},{letter:/[\s][\u0419]/g,alternative:" Y"},{letter:/[\u0419]/g,alternative:"I"},{letter:/^[\u044E]/g,alternative:"yu"},{letter:/[\s][\u044E]/g,alternative:" yu"},{letter:/[\u044E]/g,alternative:"iu"},{letter:/^[\u042E]/g,alternative:"Yu"},{letter:/[\s][\u042E]/g,alternative:" Yu"},{letter:/[\u042E]/g,alternative:"IU"},{letter:/^[\u044F]/g,alternative:"ya"},{letter:/[\s][\u044F]/g,alternative:" ya"},{letter:/[\u044F]/g,alternative:"ia"},{letter:/^[\u042F]/g,alternative:"Ya"},{letter:/[\s][\u042F]/g,alternative:" Ya"},{letter:/[\u042F]/g,alternative:"IA"}],br:[{letter:/\u0063\u0027\u0068/g,alternative:"ch"},{letter:/\u0043\u0027\u0048/g,alternative:"CH"},{letter:/[\u00e2]/g,alternative:"a"},{letter:/[\u00c2]/g,alternative:"A"},{letter:/[\u00ea]/g,alternative:"e"},{letter:/[\u00ca]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00f4]/g,alternative:"o"},{letter:/[\u00d4]/g,alternative:"O"},{letter:/[\u00fb\u00f9\u00fc]/g,alternative:"u"},{letter:/[\u00db\u00d9\u00dc]/g,alternative:"U"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"}],ch:[{letter:/[\u0027]/g,alternative:""},{letter:/[\u00e5]/g,alternative:"a"},{letter:/[\u00c5]/g,alternative:"A"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"}],co:[{letter:/[\u00e2\u00e0]/g,alternative:"a"},{letter:/[\u00c2\u00c0]/g,alternative:"A"},{letter:/[\u00e6\u04d5]/g,alternative:"ae"},{letter:/[\u00c6\u04d4]/g,alternative:"Ae"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e9\u00ea\u00e8\u00eb]/g,alternative:"e"},{letter:/[\u00c9\u00ca\u00c8\u00cb]/g,alternative:"E"},{letter:/[\u00ec\u00ee\u00ef]/g,alternative:"i"},{letter:/[\u00cc\u00ce\u00cf]/g,alternative:"I"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"},{letter:/[\u00f4\u00f2]/g,alternative:"o"},{letter:/[\u00d4\u00d2]/g,alternative:"O"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0152]]/g,alternative:"Oe"},{letter:/[\u00f9\u00fc]/g,alternative:"u"},{letter:/[\u00d9\u00dc]/g,alternative:"U"},{letter:/[\u00ff]/g,alternative:"y"},{letter:/[\u0178]/g,alternative:"Y"}],csb:[{letter:/[\u0105\u00e3]/g,alternative:"a"},{letter:/[\u0104\u00c3]/g,alternative:"A"},{letter:/[\u00e9\u00eb]/g,alternative:"e"},{letter:/[\u00c9\u00cb]/g,alternative:"E"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u0141]/g,alternative:"L"},{letter:/[\u0144]/g,alternative:"n"},{letter:/[\u0143]/g,alternative:"N"},{letter:/[\u00f2\u00f3\u00f4]/g,alternative:"o"},{letter:/[\u00d2\u00d3\u00d4]/g,alternative:"O"},{letter:/[\u00f9]/g,alternative:"u"},{letter:/[\u00d9]/g,alternative:"U"},{letter:/[\u017c]/g,alternative:"z"},{letter:/[\u017b]/g,alternative:"Z"}],cy:[{letter:/[\u00e2]/g,alternative:"a"},{letter:/[\u00c2]/g,alternative:"A"},{letter:/[\u00ea]/g,alternative:"e"},{letter:/[\u00ca]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00f4]/g,alternative:"o"},{letter:/[\u00d4]/g,alternative:"O"},{letter:/[\u00fb]/g,alternative:"u"},{letter:/[\u00db]/g,alternative:"U"},{letter:/[\u0175]/g,alternative:"w"},{letter:/[\u0174]/g,alternative:"W"},{letter:/[\u0177]/g,alternative:"y"},{letter:/[\u0176]/g,alternative:"Y"}],ee:[{letter:/[\u0256]/g,alternative:"d"},{letter:/[\u0189]/g,alternative:"D"},{letter:/[\u025b]/g,alternative:"e"},{letter:/[\u0190]/g,alternative:"E"},{letter:/[\u0192]/g,alternative:"f"},{letter:/[\u0191]/g,alternative:"F"},{letter:/[\u0263]/g,alternative:"g"},{letter:/[\u0194]/g,alternative:"G"},{letter:/[\u014b]/g,alternative:"ng"},{letter:/[\u014a]/g,alternative:"Ng"},{letter:/[\u0254]/g,alternative:"o"},{letter:/[\u0186]/g,alternative:"O"},{letter:/[\u028b]/g,alternative:"w"},{letter:/[\u01b2]/g,alternative:"W"},{letter:/\u0061\u0303/g,alternative:"a"},{letter:/[\u00e1\u00e0\u01ce\u00e2\u00e3]/g,alternative:"a"},{letter:/\u0041\u0303/g,alternative:"A"},{letter:/[\u00c1\u00c0\u01cd\u00c2\u00c3]/g,alternative:"A"},{letter:/[\u00e9\u00e8\u011b\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u011a\u00ca]/g,alternative:"E"},{letter:/[\u00f3\u00f2\u01d2\u00f4]/g,alternative:"o"},{letter:/[\u00d3\u00d2\u01d1\u00d4]/g,alternative:"O"},{letter:/[\u00fa\u00f9\u01d4\u00fb]/g,alternative:"u"},{letter:/[\u00da\u00d9\u01d3\u00db]/g,alternative:"U"},{letter:/[\u00ed\u00ec\u01d0\u00ee]/g,alternative:"i"},{letter:/[\u00cd\u00cc\u01cf\u00ce]/g,alternative:"I"}],et:[{letter:/[\u0161]/g,alternative:"sh"},{letter:/[\u0160]/g,alternative:"Sh"},{letter:/[\u017e]/g,alternative:"zh"},{letter:/[\u017d]/g,alternative:"Zh"},{letter:/[\u00f5\u00f6]/g,alternative:"o"},{letter:/[\u00d6\u00d5]/g,alternative:"O"},{letter:/[\u00e4]/g,alternative:"a"},{letter:/[\u00c4]/g,alternative:"A"},{letter:/[\u00fc]/g,alternative:"u"},{letter:/[\u00dc]/g,alternative:"U"}],eu:[{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00fc]/g,alternative:"u"},{letter:/[\u00dc]/g,alternative:"U"}],fuc:[{letter:/[\u0253]/g,alternative:"b"},{letter:/[\u0181]/g,alternative:"B"},{letter:/[\u0257]/g,alternative:"d"},{letter:/[\u018a]/g,alternative:"D"},{letter:/[\u014b]/g,alternative:"ng"},{letter:/[\u014a]/g,alternative:"Ng"},{letter:/[\u0272\u00f1]/g,alternative:"ny"},{letter:/[\u019d\u00d1]/g,alternative:"Ny"},{letter:/[\u01b4]/g,alternative:"y"},{letter:/[\u01b3]/g,alternative:"Y"},{letter:/[\u0260]/g,alternative:"g"},{letter:/[\u0193]/g,alternative:"G"}],fj:[{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u012b]/g,alternative:"i"},{letter:/[\u012a]/g,alternative:"I"},{letter:/[\u016b]/g,alternative:"u"},{letter:/[\u016a]/g,alternative:"U"},{letter:/[\u014d]/g,alternative:"o"},{letter:/[\u014c]/g,alternative:"O"}],frp:[{letter:/[\u00e2]/g,alternative:"a"},{letter:/[\u00c2]/g,alternative:"A"},{letter:/[\u00ea\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00ca\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00fb\u00fc]/g,alternative:"u"},{letter:/[\u00db\u00dc]/g,alternative:"U"},{letter:/[\u00f4]/g,alternative:"o"},{letter:/[\u00d4]/g,alternative:"O"}],fur:[{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00e0\u00e2]/g,alternative:"a"},{letter:/[\u00c0\u00c2]/g,alternative:"A"},{letter:/[\u00e8\u00ea]/g,alternative:"e"},{letter:/[\u00c8\u00ca]/g,alternative:"E"},{letter:/[\u00ec\u00ee]/g,alternative:"i"},{letter:/[\u00cc\u00ce]/g,alternative:"I"},{letter:/[\u00f2\u00f4]/g,alternative:"o"},{letter:/[\u00d2\u00d4]/g,alternative:"O"},{letter:/[\u00f9\u00fb]/g,alternative:"u"},{letter:/[\u00d9\u00db]/g,alternative:"U"},{letter:/[\u010d]/g,alternative:"c"},{letter:/[\u010c]/g,alternative:"C"},{letter:/[\u011f]/g,alternative:"g"},{letter:/[\u011e]/g,alternative:"G"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"}],fy:[{letter:/[\u00e2\u0101\u00e4\u00e5]/g,alternative:"a"},{letter:/[\u00c2\u0100\u00c4\u00c5]/g,alternative:"A"},{letter:/[\u00ea\u00e9\u0113]/g,alternative:"e"},{letter:/[\u00ca\u00c9\u0112]/g,alternative:"E"},{letter:/[\u00f4\u00f6]/g,alternative:"o"},{letter:/[\u00d4\u00d6]/g,alternative:"O"},{letter:/[\u00fa\u00fb\u00fc]/g,alternative:"u"},{letter:/[\u00da\u00db\u00dc]/g,alternative:"U"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u0111\u00f0]/g,alternative:"d"},{letter:/[\u0110\u00d0]/g,alternative:"D"}],ga:[{letter:/[\u00e1]/g,alternative:"a"},{letter:/[\u00c1]/g,alternative:"A"},{letter:/[\u00e9]/g,alternative:"e"},{letter:/[\u00c9]/g,alternative:"E"},{letter:/[\u00f3]/g,alternative:"o"},{letter:/[\u00d3]/g,alternative:"O"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"}],gd:[{letter:/[\u00e0]/g,alternative:"a"},{letter:/[\u00c0]/g,alternative:"A"},{letter:/[\u00e8]/g,alternative:"e"},{letter:/[\u00c8]/g,alternative:"E"},{letter:/[\u00f2]/g,alternative:"o"},{letter:/[\u00d2]/g,alternative:"O"},{letter:/[\u00f9]/g,alternative:"u"},{letter:/[\u00d9]/g,alternative:"U"},{letter:/[\u00ec]/g,alternative:"i"},{letter:/[\u00cc]/g,alternative:"I"}],gl:[{letter:/[\u00e1\u00e0]/g,alternative:"a"},{letter:/[\u00c1\u00c0]/g,alternative:"A"},{letter:/[\u00e9\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00ca]/g,alternative:"E"},{letter:/[\u00ed\u00ef]/g,alternative:"i"},{letter:/[\u00cd\u00cf]/g,alternative:"I"},{letter:/[\u00f3]/g,alternative:"o"},{letter:/[\u00d3]/g,alternative:"O"},{letter:/[\u00fa\u00fc]/g,alternative:"u"},{letter:/[\u00da\u00dc]/g,alternative:"U"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"}],gn:[{letter:/[\u2019]/g,alternative:""},{letter:/\u0067\u0303/g,alternative:"g"},{letter:/\u0047\u0303/g,alternative:"G"},{letter:/[\u00e3]/g,alternative:"a"},{letter:/[\u00c3]/g,alternative:"A"},{letter:/[\u1ebd]/g,alternative:"e"},{letter:/[\u1ebc]/g,alternative:"E"},{letter:/[\u0129]/g,alternative:"i"},{letter:/[\u0128]/g,alternative:"I"},{letter:/[\u00f5]/g,alternative:"o"},{letter:/[\u00d5]/g,alternative:"O"},{letter:/[\u00f1]/g,alternative:"n"},{letter:/[\u00d1]/g,alternative:"N"},{letter:/[\u0169]/g,alternative:"u"},{letter:/[\u0168]/g,alternative:"U"},{letter:/[\u1ef9]/g,alternative:"y"},{letter:/[\u1ef8]/g,alternative:"Y"}],gsw:[{letter:/[\u00e4]/g,alternative:"a"},{letter:/[\u00c4]/g,alternative:"A"},{letter:/[\u00f6]/g,alternative:"o"},{letter:/[\u00d6]/g,alternative:"O"},{letter:/[\u00fc]/g,alternative:"u"},{letter:/[\u00dc]/g,alternative:"U"}],hat:[{letter:/[\u00e8]/g,alternative:"e"},{letter:/[\u00c8]/g,alternative:"E"},{letter:/[\u00f2]/g,alternative:"o"},{letter:/[\u00d2]/g,alternative:"O"}],haw:[{letter:/[\u02bb\u0027\u2019]/g,alternative:""},{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u012b]/g,alternative:"i"},{letter:/[\u014d]/g,alternative:"o"},{letter:/[\u016b]/g,alternative:"u"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u012a]/g,alternative:"I"},{letter:/[\u014c]/g,alternative:"O"},{letter:/[\u016a]/g,alternative:"U"}],hr:[{letter:/[\u010d\u0107]/g,alternative:"c"},{letter:/[\u010c\u0106]/g,alternative:"C"},{letter:/[\u0111]/g,alternative:"dj"},{letter:/[\u0110]/g,alternative:"Dj"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"},{letter:/[\u01c4]/g,alternative:"DZ"},{letter:/[\u01c5]/g,alternative:"Dz"},{letter:/[\u01c6]/g,alternative:"dz"}],ka:[{letter:/[\u10d0]/g,alternative:"a"},{letter:/[\u10d1]/g,alternative:"b"},{letter:/[\u10d2]/g,alternative:"g"},{letter:/[\u10d3]/g,alternative:"d"},{letter:/[\u10d4]/g,alternative:"e"},{letter:/[\u10d5]/g,alternative:"v"},{letter:/[\u10d6]/g,alternative:"z"},{letter:/[\u10d7]/g,alternative:"t"},{letter:/[\u10d8]/g,alternative:"i"},{letter:/[\u10d9]/g,alternative:"k"},{letter:/[\u10da]/g,alternative:"l"},{letter:/[\u10db]/g,alternative:"m"},{letter:/[\u10dc]/g,alternative:"n"},{letter:/[\u10dd]/g,alternative:"o"},{letter:/[\u10de]/g,alternative:"p"},{letter:/[\u10df]/g,alternative:"zh"},{letter:/[\u10e0]/g,alternative:"r"},{letter:/[\u10e1]/g,alternative:"s"},{letter:/[\u10e2]/g,alternative:"t"},{letter:/[\u10e3]/g,alternative:"u"},{letter:/[\u10e4]/g,alternative:"p"},{letter:/[\u10e5]/g,alternative:"k"},{letter:/[\u10e6]/g,alternative:"gh"},{letter:/[\u10e7]/g,alternative:"q"},{letter:/[\u10e8]/g,alternative:"sh"},{letter:/[\u10e9]/g,alternative:"ch"},{letter:/[\u10ea]/g,alternative:"ts"},{letter:/[\u10eb]/g,alternative:"dz"},{letter:/[\u10ec]/g,alternative:"ts"},{letter:/[\u10ed]/g,alternative:"ch"},{letter:/[\u10ee]/g,alternative:"kh"},{letter:/[\u10ef]/g,alternative:"j"},{letter:/[\u10f0]/g,alternative:"h"}],kal:[{letter:/[\u00E5]/g,alternative:"aa"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E6\u04D5]/g,alternative:"ae"},{letter:/[\u00C6\u04D4]/g,alternative:"Ae"},{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00D8]/g,alternative:"Oe"}],kin:[{letter:/[\u2019\u0027]/g,alternative:""}],lb:[{letter:/[\u00e4]/g,alternative:"a"},{letter:/[\u00c4]/g,alternative:"A"},{letter:/[\u00eb\u00e9]/g,alternative:"e"},{letter:/[\u00cb\u00c9]/g,alternative:"E"}],li:[{letter:/[\u00e1\u00e2\u00e0\u00e4]/g,alternative:"a"},{letter:/[\u00c1\u00c2\u00c0\u00c4]/g,alternative:"A"},{letter:/[\u00eb\u00e8\u00ea]/g,alternative:"e"},{letter:/[\u00cb\u00c8\u00ca]/g,alternative:"E"},{letter:/[\u00f6\u00f3]/g,alternative:"o"},{letter:/[\u00d6\u00d3]/g,alternative:"O"}],lin:[{letter:/[\u00e1\u00e2\u01ce]/g,alternative:"a"},{letter:/[\u00c1\u00c2\u01cd]/g,alternative:"A"},{letter:/\u025b\u0301/g,alternative:"e"},{letter:/\u025b\u0302/g,alternative:"e"},{letter:/\u025b\u030c/g,alternative:"e"},{letter:/[\u00e9\u00ea\u011b\u025b]/g,alternative:"e"},{letter:/\u0190\u0301/g,alternative:"E"},{letter:/\u0190\u0302/g,alternative:"E"},{letter:/\u0190\u030c/g,alternative:"E"},{letter:/[\u00c9\u00ca\u011a\u0190]/g,alternative:"E"},{letter:/[\u00ed\u00ee\u01d0]/g,alternative:"i"},{letter:/[\u00cd\u00ce\u01cf]/g,alternative:"I"},{letter:/\u0254\u0301/g,alternative:"o"},{letter:/\u0254\u0302/g,alternative:"o"},{letter:/\u0254\u030c/g,alternative:"o"},{letter:/[\u00f3\u00f4\u01d2\u0254]/g,alternative:"o"},{letter:/\u0186\u0301/g,alternative:"O"},{letter:/\u0186\u0302/g,alternative:"O"},{letter:/\u0186\u030c/g,alternative:"O"},{letter:/[\u00d3\u00d4\u01d1\u0186]/g,alternative:"O"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"}],lt:[{letter:/[\u0105]/g,alternative:"a"},{letter:/[\u0104]/g,alternative:"A"},{letter:/[\u010d]/g,alternative:"c"},{letter:/[\u010c]/g,alternative:"C"},{letter:/[\u0119\u0117]/g,alternative:"e"},{letter:/[\u0118\u0116]/g,alternative:"E"},{letter:/[\u012f]/g,alternative:"i"},{letter:/[\u012e]/g,alternative:"I"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0173\u016b]/g,alternative:"u"},{letter:/[\u0172\u016a]/g,alternative:"U"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"}],mg:[{letter:/[\u00f4]/g,alternative:"ao"},{letter:/[\u00d4]/g,alternative:"Ao"}],mk:[{letter:/[\u0430]/g,alternative:"a"},{letter:/[\u0410]/g,alternative:"A"},{letter:/[\u0431]/g,alternative:"b"},{letter:/[\u0411]/g,alternative:"B"},{letter:/[\u0432]/g,alternative:"v"},{letter:/[\u0412]/g,alternative:"V"},{letter:/[\u0433]/g,alternative:"g"},{letter:/[\u0413]/g,alternative:"G"},{letter:/[\u0434]/g,alternative:"d"},{letter:/[\u0414]/g,alternative:"D"},{letter:/[\u0453]/g,alternative:"gj"},{letter:/[\u0403]/g,alternative:"Gj"},{letter:/[\u0435]/g,alternative:"e"},{letter:/[\u0415]/g,alternative:"E"},{letter:/[\u0436]/g,alternative:"zh"},{letter:/[\u0416]/g,alternative:"Zh"},{letter:/[\u0437]/g,alternative:"z"},{letter:/[\u0417]/g,alternative:"Z"},{letter:/[\u0455]/g,alternative:"dz"},{letter:/[\u0405]/g,alternative:"Dz"},{letter:/[\u0438]/g,alternative:"i"},{letter:/[\u0418]/g,alternative:"I"},{letter:/[\u0458]/g,alternative:"j"},{letter:/[\u0408]/g,alternative:"J"},{letter:/[\u043A]/g,alternative:"k"},{letter:/[\u041A]/g,alternative:"K"},{letter:/[\u043B]/g,alternative:"l"},{letter:/[\u041B]/g,alternative:"L"},{letter:/[\u0459]/g,alternative:"lj"},{letter:/[\u0409]/g,alternative:"Lj"},{letter:/[\u043C]/g,alternative:"m"},{letter:/[\u041C]/g,alternative:"M"},{letter:/[\u043D]/g,alternative:"n"},{letter:/[\u041D]/g,alternative:"N"},{letter:/[\u045A]/g,alternative:"nj"},{letter:/[\u040A]/g,alternative:"Nj"},{letter:/[\u043E]/g,alternative:"o"},{letter:/[\u041E]/g,alternative:"O"},{letter:/[\u0440]/g,alternative:"r"},{letter:/[\u0420]/g,alternative:"R"},{letter:/[\u043F]/g,alternative:"p"},{letter:/[\u041F]/g,alternative:"P"},{letter:/[\u0441]/g,alternative:"s"},{letter:/[\u0421]/g,alternative:"S"},{letter:/[\u0442]/g,alternative:"t"},{letter:/[\u0422]/g,alternative:"T"},{letter:/[\u045C]/g,alternative:"kj"},{letter:/[\u040C]/g,alternative:"Kj"},{letter:/[\u0443]/g,alternative:"u"},{letter:/[\u0423]/g,alternative:"U"},{letter:/[\u0444]/g,alternative:"f"},{letter:/[\u0424]/g,alternative:"F"},{letter:/[\u0445]/g,alternative:"h"},{letter:/[\u0425]/g,alternative:"H"},{letter:/[\u0446]/g,alternative:"c"},{letter:/[\u0426]/g,alternative:"C"},{letter:/[\u0447]/g,alternative:"ch"},{letter:/[\u0427]/g,alternative:"Ch"},{letter:/[\u045F]/g,alternative:"dj"},{letter:/[\u040F]/g,alternative:"Dj"},{letter:/[\u0448]/g,alternative:"sh"},{letter:/[\u0428]/g,alternative:"Sh"}],mri:[{letter:/[\u0101]/g,alternative:"aa"},{letter:/[\u0100]/g,alternative:"Aa"},{letter:/[\u0113]/g,alternative:"ee"},{letter:/[\u0112]/g,alternative:"Ee"},{letter:/[\u012b]/g,alternative:"ii"},{letter:/[\u012a]/g,alternative:"Ii"},{letter:/[\u014d]/g,alternative:"oo"},{letter:/[\u014c]/g,alternative:"Oo"},{letter:/[\u016b]/g,alternative:"uu"},{letter:/[\u016a]/g,alternative:"Uu"}],mwl:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e1]/g,alternative:"a"},{letter:/[\u00c1]/g,alternative:"A"},{letter:/[\u00e9\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00ca]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u00f3\u00f4]/g,alternative:"o"},{letter:/[\u00d3\u00d4]/g,alternative:"O"},{letter:/[\u00fa\u0169]/g,alternative:"u"},{letter:/[\u00da\u0168]/g,alternative:"U"}],oci:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e0\u00e1]/g,alternative:"a"},{letter:/[\u00c0\u00c1]/g,alternative:"A"},{letter:/[\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00ed\u00ef]/g,alternative:"i"},{letter:/[\u00cd\u00cf]/g,alternative:"I"},{letter:/[\u00f2\u00f3]/g,alternative:"o"},{letter:/[\u00d2\u00d3]/g,alternative:"O"},{letter:/[\u00fa\u00fc]/g,alternative:"u"},{letter:/[\u00da\u00dc]/g,alternative:"U"},{letter:/[\u00b7]/g,alternative:""}],orm:[{letter:/[\u0027]/g,alternative:""}],pt:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e1\u00e2\u00e3\u00e0]/g,alternative:"a"},{letter:/[\u00c1\u00c2\u00c3\u00c0]/g,alternative:"A"},{letter:/[\u00e9\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00ca]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u00f3\u00f4\u00f5]/g,alternative:"o"},{letter:/[\u00d3\u00d4\u00d5]/g,alternative:"O"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"}],roh:[{letter:/[\u00e9\u00e8\u00ea]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u00ca]/g,alternative:"E"},{letter:/[\u00ef]/g,alternative:"i"},{letter:/[\u00cf]/g,alternative:"I"},{letter:/[\u00f6]/g,alternative:"oe"},{letter:/[\u00d6]/g,alternative:"Oe"},{letter:/[\u00fc]/g,alternative:"ue"},{letter:/[\u00dc]/g,alternative:"Ue"},{letter:/[\u00e4]/g,alternative:"ae"},{letter:/[\u00c4]/g,alternative:"Ae"}],rup:[{letter:/[\u00e3]/g,alternative:"a"},{letter:/[\u00c3]/g,alternative:"A"}],ro:[{letter:/[\u0103\u00e2]/g,alternative:"a"},{letter:/[\u0102\u00c2]/g,alternative:"A"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u0219\u015f]/g,alternative:"s"},{letter:/[\u0218\u015e]/g,alternative:"S"},{letter:/[\u021b\u0163]/g,alternative:"t"},{letter:/[\u021a\u0162]/g,alternative:"T"}],tlh:[{letter:/[\u2019\u0027]/g,alternative:""}],sk:[{letter:/[\u01c4]/g,alternative:"DZ"},{letter:/[\u01c5]/g,alternative:"Dz"},{letter:/[\u01c6]/g,alternative:"dz"},{letter:/[\u00e1\u00e4]/g,alternative:"a"},{letter:/[\u00c1\u00c4]/g,alternative:"A"},{letter:/[\u010d]/g,alternative:"c"},{letter:/[\u010c]/g,alternative:"C"},{letter:/[\u010f]/g,alternative:"d"},{letter:/[\u010e]/g,alternative:"D"},{letter:/[\u00e9]/g,alternative:"e"},{letter:/[\u00c9]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u013e\u013a]/g,alternative:"l"},{letter:/[\u013d\u0139]/g,alternative:"L"},{letter:/[\u0148]/g,alternative:"n"},{letter:/[\u0147]/g,alternative:"N"},{letter:/[\u00f3\u00f4]/g,alternative:"o"},{letter:/[\u00d3\u00d4]/g,alternative:"O"},{letter:/[\u0155]/g,alternative:"r"},{letter:/[\u0154]/g,alternative:"R"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0165]/g,alternative:"t"},{letter:/[\u0164]/g,alternative:"T"},{letter:/[\u00fa]/g,alternative:"u"},{letter:/[\u00da]/g,alternative:"U"},{letter:/[\u00fd]/g,alternative:"y"},{letter:/[\u00dd]/g,alternative:"Y"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"}],sl:[{letter:/[\u010d\u0107]/g,alternative:"c"},{letter:/[\u010c\u0106]/g,alternative:"C"},{letter:/[\u0111]/g,alternative:"d"},{letter:/[\u0110]/g,alternative:"D"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u017e]/g,alternative:"z"},{letter:/[\u017d]/g,alternative:"Z"},{letter:/[\u00e0\u00e1\u0203\u0201]/g,alternative:"a"},{letter:/[\u00c0\u00c1\u0202\u0200]/g,alternative:"A"},{letter:/[\u00e8\u00e9\u0207\u0205]/g,alternative:"e"},{letter:/\u01dd\u0300/g,alternative:"e"},{letter:/\u01dd\u030f/g,alternative:"e"},{letter:/\u1eb9\u0301/g,alternative:"e"},{letter:/\u1eb9\u0311/g,alternative:"e"},{letter:/[\u00c8\u00c9\u0206\u0204]/g,alternative:"E"},{letter:/\u018e\u030f/g,alternative:"E"},{letter:/\u018e\u0300/g,alternative:"E"},{letter:/\u1eb8\u0311/g,alternative:"E"},{letter:/\u1eb8\u0301/g,alternative:"E"},{letter:/[\u00ec\u00ed\u020b\u0209]/g,alternative:"i"},{letter:/[\u00cc\u00cd\u020a\u0208]/g,alternative:"I"},{letter:/[\u00f2\u00f3\u020f\u020d]/g,alternative:"o"},{letter:/\u1ecd\u0311/g,alternative:"o"},{letter:/\u1ecd\u0301/g,alternative:"o"},{letter:/\u1ecc\u0311/g,alternative:"O"},{letter:/\u1ecc\u0301/g,alternative:"O"},{letter:/[\u00d2\u00d3\u020e\u020c]/g,alternative:"O"},{letter:/[\u00f9\u00fa\u0217\u0215]/g,alternative:"u"},{letter:/[\u00d9\u00da\u0216\u0214]/g,alternative:"U"},{letter:/[\u0155\u0213]/g,alternative:"r"},{letter:/[\u0154\u0212]/g,alternative:"R"}],sq:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00eb]/g,alternative:"e"},{letter:/[\u00cb]/g,alternative:"E"}],hu:[{letter:/[\u00e1]/g,alternative:"a"},{letter:/[\u00c1]/g,alternative:"A"},{letter:/[\u00e9]/g,alternative:"e"},{letter:/[\u00c9]/g,alternative:"E"},{letter:/[\u00ed]/g,alternative:"i"},{letter:/[\u00cd]/g,alternative:"I"},{letter:/[\u00f3\u00f6\u0151]/g,alternative:"o"},{letter:/[\u00d3\u00d6\u0150]/g,alternative:"O"},{letter:/[\u00fa\u00fc\u0171]/g,alternative:"u"},{letter:/[\u00da\u00dc\u0170]/g,alternative:"U"}],srd:[{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00e0\u00e1]/g,alternative:"a"},{letter:/[\u00c0\u00c1]/g,alternative:"A"},{letter:/[\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00ed\u00ef]/g,alternative:"i"},{letter:/[\u00cd\u00cf]/g,alternative:"I"},{letter:/[\u00f2\u00f3]/g,alternative:"o"},{letter:/[\u00d2\u00d3]/g,alternative:"O"},{letter:/[\u00fa\u00f9]/g,alternative:"u"},{letter:/[\u00da\u00d9]/g,alternative:"U"}],szl:[{letter:/[\u0107]/g,alternative:"c"},{letter:/[\u0106]/g,alternative:"C"},{letter:/[\u00e3]/g,alternative:"a"},{letter:/[\u00c3]/g,alternative:"A"},{letter:/[\u0142]/g,alternative:"u"},{letter:/[\u0141]/g,alternative:"U"},{letter:/[\u006e]/g,alternative:"n"},{letter:/[\u004e]/g,alternative:"N"},{letter:/[\u014f\u014d\u00f4\u00f5]/g,alternative:"o"},{letter:/[\u014e\u014c\u00d4\u00d5]/g,alternative:"O"},{letter:/[\u015b]/g,alternative:"s"},{letter:/[\u015a]/g,alternative:"S"},{letter:/[\u017a\u017c\u017e]/g,alternative:"z"},{letter:/[\u0179\u017b\u017d]/g,alternative:"Z"},{letter:/[\u016f]/g,alternative:"u"},{letter:/[\u016e]/g,alternative:"U"},{letter:/[\u010d]/g,alternative:"cz"},{letter:/[\u010c]/g,alternative:"Cz"},{letter:/[\u0159]/g,alternative:"rz"},{letter:/[\u0158]/g,alternative:"Rz"},{letter:/[\u0161]/g,alternative:"sz"},{letter:/[\u0160]/g,alternative:"Sz"}],tah:[{letter:/[\u0101\u00e2\u00e0]/g,alternative:"a"},{letter:/[\u0100\u00c2\u00c0]/g,alternative:"A"},{letter:/[\u00ef\u00ee\u00ec]/g,alternative:"i"},{letter:/[\u00cf\u00ce\u00cc]/g,alternative:"I"},{letter:/[\u0113\u00ea\u00e9]/g,alternative:"e"},{letter:/[\u0112\u00ca\u00c9]/g,alternative:"E"},{letter:/[\u016b\u00fb\u00fa]/g,alternative:"u"},{letter:/[\u016a\u00db\u00da]/g,alternative:"U"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/[\u00f2\u00f4\u014d]/g,alternative:"o"},{letter:/[\u00d2\u00d4\u014c]/g,alternative:"O"},{letter:/[\u2019\u0027\u2018]/g,alternative:""}],vec:[{letter:/\u0073\u002d\u0063/g,alternative:"sc"},{letter:/\u0053\u002d\u0043/g,alternative:"SC"},{letter:/\u0073\u0027\u0063/g,alternative:"sc"},{letter:/\u0053\u0027\u0043/g,alternative:"SC"},{letter:/\u0073\u2019\u0063/g,alternative:"sc"},{letter:/\u0053\u2019\u0043/g,alternative:"SC"},{letter:/\u0073\u2018\u0063/g,alternative:"sc"},{letter:/\u0053\u2018\u0043/g,alternative:"SC"},{letter:/\u0053\u002d\u0063/g,alternative:"Sc"},{letter:/\u0053\u0027\u0063/g,alternative:"Sc"},{letter:/\u0053\u2019\u0063/g,alternative:"Sc"},{letter:/\u0053\u2018\u0063/g,alternative:"Sc"},{letter:/\u0063\u2019/g,alternative:"c"},{letter:/\u0043\u2019/g,alternative:"C"},{letter:/\u0063\u2018/g,alternative:"c"},{letter:/\u0043\u2018/g,alternative:"C"},{letter:/\u0063\u0027/g,alternative:"c"},{letter:/\u0043\u0027/g,alternative:"C"},{letter:/[\u00e0\u00e1\u00e2]/g,alternative:"a"},{letter:/[\u00c0\u00c1\u00c2]/g,alternative:"A"},{letter:/[\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c8\u00c9]/g,alternative:"E"},{letter:/[\u00f2\u00f3]/g,alternative:"o"},{letter:/[\u00d2\u00d3]/g,alternative:"O"},{letter:/[\u00f9\u00fa]/g,alternative:"u"},{letter:/[\u00d9\u00da]/g,alternative:"U"},{letter:/[\u00e7\u010d\u010b]/g,alternative:"c"},{letter:/[\u00c7\u010c\u010a]/g,alternative:"C"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u00a3\u0141]/g,alternative:"L"},{letter:/\ud835\udeff/g,alternative:"dh"},{letter:/[\u0111\u03b4]/g,alternative:"dh"},{letter:/[\u0110\u0394]/g,alternative:"Dh"}],wa:[{letter:/[\u00e2\u00e5]/g,alternative:"a"},{letter:/[\u00c2\u00c5]/g,alternative:"A"},{letter:/[\u00e7]/g,alternative:"c"},{letter:/[\u00c7]/g,alternative:"C"},{letter:/\u0065\u030a/g,alternative:"e"},{letter:/\u0045\u030a/g,alternative:"E"},{letter:/[\u00eb\u00ea\u00e8\u00e9]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u00ca\u00cb]/g,alternative:"E"},{letter:/[\u00ee]/g,alternative:"i"},{letter:/[\u00ce]/g,alternative:"I"},{letter:/[\u00f4\u00f6]/g,alternative:"o"},{letter:/[\u00d6\u00d4]/g,alternative:"O"},{letter:/[\u00fb]/g,alternative:"u"},{letter:/[\u00db]/g,alternative:"U"}],yor:[{letter:/[\u00e1\u00e0]/g,alternative:"a"},{letter:/[\u00c1\u00c0]/g,alternative:"A"},{letter:/[\u00ec\u00ed]/g,alternative:"i"},{letter:/[\u00cc\u00cd]/g,alternative:"I"},{letter:/\u1ecd\u0301/g,alternative:"o"},{letter:/\u1ecc\u0301/g,alternative:"O"},{letter:/\u1ecd\u0300/g,alternative:"o"},{letter:/\u1ecc\u0300/g,alternative:"O"},{letter:/[\u00f3\u00f2\u1ecd]/g,alternative:"o"},{letter:/[\u00d3\u00d2\u1ecc]/g,alternative:"O"},{letter:/[\u00fa\u00f9]/g,alternative:"u"},{letter:/[\u00da\u00d9]/g,alternative:"U"},{letter:/\u1eb9\u0301/g,alternative:"e"},{letter:/\u1eb8\u0301/g,alternative:"E"},{letter:/\u1eb9\u0300/g,alternative:"e"},{letter:/\u1eb8\u0300/g,alternative:"E"},{letter:/[\u00e9\u00e8\u1eb9]/g,alternative:"e"},{letter:/[\u00c9\u00c8\u1eb8]/g,alternative:"E"},{letter:/[\u1e63]/g,alternative:"s"},{letter:/[\u1e62]/g,alternative:"S"}]};const Se=[{letter:/[\u00A3]/g,alternative:""},{letter:/[\u20AC]/g,alternative:"E"},{letter:/[\u00AA]/g,alternative:"a"},{letter:/[\u00BA]/g,alternative:"o"},{letter:/[\u00C0]/g,alternative:"A"},{letter:/[\u00C1]/g,alternative:"A"},{letter:/[\u00C2]/g,alternative:"A"},{letter:/[\u00C3]/g,alternative:"A"},{letter:/[\u00C4]/g,alternative:"A"},{letter:/[\u00C5]/g,alternative:"A"},{letter:/[\u00C6]/g,alternative:"AE"},{letter:/[\u00C7]/g,alternative:"C"},{letter:/[\u00C8]/g,alternative:"E"},{letter:/[\u00C9]/g,alternative:"E"},{letter:/[\u00CA]/g,alternative:"E"},{letter:/[\u00CB]/g,alternative:"E"},{letter:/[\u00CC]/g,alternative:"I"},{letter:/[\u00CD]/g,alternative:"I"},{letter:/[\u00CE]/g,alternative:"I"},{letter:/[\u00CF]/g,alternative:"I"},{letter:/[\u00D0]/g,alternative:"D"},{letter:/[\u00D1]/g,alternative:"N"},{letter:/[\u00D2]/g,alternative:"O"},{letter:/[\u00D3]/g,alternative:"O"},{letter:/[\u00D4]/g,alternative:"O"},{letter:/[\u00D5]/g,alternative:"O"},{letter:/[\u00D6]/g,alternative:"O"},{letter:/[\u00D8]/g,alternative:"O"},{letter:/[\u00D9]/g,alternative:"U"},{letter:/[\u00DA]/g,alternative:"U"},{letter:/[\u00DB]/g,alternative:"U"},{letter:/[\u00DC]/g,alternative:"U"},{letter:/[\u00DD]/g,alternative:"Y"},{letter:/[\u00DE]/g,alternative:"TH"},{letter:/[\u00DF]/g,alternative:"s"},{letter:/[\u00E0]/g,alternative:"a"},{letter:/[\u00E1]/g,alternative:"a"},{letter:/[\u00E2]/g,alternative:"a"},{letter:/[\u00E3]/g,alternative:"a"},{letter:/[\u00E4]/g,alternative:"a"},{letter:/[\u00E5]/g,alternative:"a"},{letter:/[\u00E6]/g,alternative:"ae"},{letter:/[\u00E7]/g,alternative:"c"},{letter:/[\u00E8]/g,alternative:"e"},{letter:/[\u00E9]/g,alternative:"e"},{letter:/[\u00EA]/g,alternative:"e"},{letter:/[\u00EB]/g,alternative:"e"},{letter:/[\u00EC]/g,alternative:"i"},{letter:/[\u00ED]/g,alternative:"i"},{letter:/[\u00EE]/g,alternative:"i"},{letter:/[\u00EF]/g,alternative:"i"},{letter:/[\u00F0]/g,alternative:"d"},{letter:/[\u00F1]/g,alternative:"n"},{letter:/[\u00F2]/g,alternative:"o"},{letter:/[\u00F3]/g,alternative:"o"},{letter:/[\u00F4]/g,alternative:"o"},{letter:/[\u00F5]/g,alternative:"o"},{letter:/[\u00F6]/g,alternative:"o"},{letter:/[\u00F8]/g,alternative:"o"},{letter:/[\u00F9]/g,alternative:"u"},{letter:/[\u00FA]/g,alternative:"u"},{letter:/[\u00FB]/g,alternative:"u"},{letter:/[\u00FC]/g,alternative:"u"},{letter:/[\u00FD]/g,alternative:"y"},{letter:/[\u00FE]/g,alternative:"th"},{letter:/[\u00FF]/g,alternative:"y"},{letter:/[\u0100]/g,alternative:"A"},{letter:/[\u0101]/g,alternative:"a"},{letter:/[\u0102]/g,alternative:"A"},{letter:/[\u0103]/g,alternative:"a"},{letter:/[\u0104]/g,alternative:"A"},{letter:/[\u0105]/g,alternative:"a"},{letter:/[\u0106]/g,alternative:"C"},{letter:/[\u0107]/g,alternative:"c"},{letter:/[\u0108]/g,alternative:"C"},{letter:/[\u0109]/g,alternative:"c"},{letter:/[\u010A]/g,alternative:"C"},{letter:/[\u010B]/g,alternative:"c"},{letter:/[\u010C]/g,alternative:"C"},{letter:/[\u010D]/g,alternative:"c"},{letter:/[\u010E]/g,alternative:"D"},{letter:/[\u010F]/g,alternative:"d"},{letter:/[\u0110]/g,alternative:"D"},{letter:/[\u0111]/g,alternative:"d"},{letter:/[\u0112]/g,alternative:"E"},{letter:/[\u0113]/g,alternative:"e"},{letter:/[\u0114]/g,alternative:"E"},{letter:/[\u0115]/g,alternative:"e"},{letter:/[\u0116]/g,alternative:"E"},{letter:/[\u0117]/g,alternative:"e"},{letter:/[\u0118]/g,alternative:"E"},{letter:/[\u0119]/g,alternative:"e"},{letter:/[\u011A]/g,alternative:"E"},{letter:/[\u011B]/g,alternative:"e"},{letter:/[\u011C]/g,alternative:"G"},{letter:/[\u011D]/g,alternative:"g"},{letter:/[\u011E]/g,alternative:"G"},{letter:/[\u011F]/g,alternative:"g"},{letter:/[\u0120]/g,alternative:"G"},{letter:/[\u0121]/g,alternative:"g"},{letter:/[\u0122]/g,alternative:"G"},{letter:/[\u0123]/g,alternative:"g"},{letter:/[\u0124]/g,alternative:"H"},{letter:/[\u0125]/g,alternative:"h"},{letter:/[\u0126]/g,alternative:"H"},{letter:/[\u0127]/g,alternative:"h"},{letter:/[\u0128]/g,alternative:"I"},{letter:/[\u0129]/g,alternative:"i"},{letter:/[\u012A]/g,alternative:"I"},{letter:/[\u012B]/g,alternative:"i"},{letter:/[\u012C]/g,alternative:"I"},{letter:/[\u012D]/g,alternative:"i"},{letter:/[\u012E]/g,alternative:"I"},{letter:/[\u012F]/g,alternative:"i"},{letter:/[\u0130]/g,alternative:"I"},{letter:/[\u0131]/g,alternative:"i"},{letter:/[\u0132]/g,alternative:"IJ"},{letter:/[\u0133]/g,alternative:"ij"},{letter:/[\u0134]/g,alternative:"J"},{letter:/[\u0135]/g,alternative:"j"},{letter:/[\u0136]/g,alternative:"K"},{letter:/[\u0137]/g,alternative:"k"},{letter:/[\u0138]/g,alternative:"k"},{letter:/[\u0139]/g,alternative:"L"},{letter:/[\u013A]/g,alternative:"l"},{letter:/[\u013B]/g,alternative:"L"},{letter:/[\u013C]/g,alternative:"l"},{letter:/[\u013D]/g,alternative:"L"},{letter:/[\u013E]/g,alternative:"l"},{letter:/[\u013F]/g,alternative:"L"},{letter:/[\u0140]/g,alternative:"l"},{letter:/[\u0141]/g,alternative:"L"},{letter:/[\u0142]/g,alternative:"l"},{letter:/[\u0143]/g,alternative:"N"},{letter:/[\u0144]/g,alternative:"n"},{letter:/[\u0145]/g,alternative:"N"},{letter:/[\u0146]/g,alternative:"n"},{letter:/[\u0147]/g,alternative:"N"},{letter:/[\u0148]/g,alternative:"n"},{letter:/[\u0149]/g,alternative:"n"},{letter:/[\u014A]/g,alternative:"N"},{letter:/[\u014B]/g,alternative:"n"},{letter:/[\u014C]/g,alternative:"O"},{letter:/[\u014D]/g,alternative:"o"},{letter:/[\u014E]/g,alternative:"O"},{letter:/[\u014F]/g,alternative:"o"},{letter:/[\u0150]/g,alternative:"O"},{letter:/[\u0151]/g,alternative:"o"},{letter:/[\u0152]/g,alternative:"OE"},{letter:/[\u0153]/g,alternative:"oe"},{letter:/[\u0154]/g,alternative:"R"},{letter:/[\u0155]/g,alternative:"r"},{letter:/[\u0156]/g,alternative:"R"},{letter:/[\u0157]/g,alternative:"r"},{letter:/[\u0158]/g,alternative:"R"},{letter:/[\u0159]/g,alternative:"r"},{letter:/[\u015A]/g,alternative:"S"},{letter:/[\u015B]/g,alternative:"s"},{letter:/[\u015C]/g,alternative:"S"},{letter:/[\u015D]/g,alternative:"s"},{letter:/[\u015E]/g,alternative:"S"},{letter:/[\u015F]/g,alternative:"s"},{letter:/[\u0160]/g,alternative:"S"},{letter:/[\u0161]/g,alternative:"s"},{letter:/[\u0162]/g,alternative:"T"},{letter:/[\u0163]/g,alternative:"t"},{letter:/[\u0164]/g,alternative:"T"},{letter:/[\u0165]/g,alternative:"t"},{letter:/[\u0166]/g,alternative:"T"},{letter:/[\u0167]/g,alternative:"t"},{letter:/[\u0168]/g,alternative:"U"},{letter:/[\u0169]/g,alternative:"u"},{letter:/[\u016A]/g,alternative:"U"},{letter:/[\u016B]/g,alternative:"u"},{letter:/[\u016C]/g,alternative:"U"},{letter:/[\u016D]/g,alternative:"u"},{letter:/[\u016E]/g,alternative:"U"},{letter:/[\u016F]/g,alternative:"u"},{letter:/[\u0170]/g,alternative:"U"},{letter:/[\u0171]/g,alternative:"u"},{letter:/[\u0172]/g,alternative:"U"},{letter:/[\u0173]/g,alternative:"u"},{letter:/[\u0174]/g,alternative:"W"},{letter:/[\u0175]/g,alternative:"w"},{letter:/[\u0176]/g,alternative:"Y"},{letter:/[\u0177]/g,alternative:"y"},{letter:/[\u0178]/g,alternative:"Y"},{letter:/[\u0179]/g,alternative:"Z"},{letter:/[\u017A]/g,alternative:"z"},{letter:/[\u017B]/g,alternative:"Z"},{letter:/[\u017C]/g,alternative:"z"},{letter:/[\u017D]/g,alternative:"Z"},{letter:/[\u017E]/g,alternative:"z"},{letter:/[\u017F]/g,alternative:"s"},{letter:/[\u01A0]/g,alternative:"O"},{letter:/[\u01A1]/g,alternative:"o"},{letter:/[\u01AF]/g,alternative:"U"},{letter:/[\u01B0]/g,alternative:"u"},{letter:/[\u01CD]/g,alternative:"A"},{letter:/[\u01CE]/g,alternative:"a"},{letter:/[\u01CF]/g,alternative:"I"},{letter:/[\u01D0]/g,alternative:"i"},{letter:/[\u01D1]/g,alternative:"O"},{letter:/[\u01D2]/g,alternative:"o"},{letter:/[\u01D3]/g,alternative:"U"},{letter:/[\u01D4]/g,alternative:"u"},{letter:/[\u01D5]/g,alternative:"U"},{letter:/[\u01D6]/g,alternative:"u"},{letter:/[\u01D7]/g,alternative:"U"},{letter:/[\u01D8]/g,alternative:"u"},{letter:/[\u01D9]/g,alternative:"U"},{letter:/[\u01DA]/g,alternative:"u"},{letter:/[\u01DB]/g,alternative:"U"},{letter:/[\u01DC]/g,alternative:"u"},{letter:/[\u0218]/g,alternative:"S"},{letter:/[\u0219]/g,alternative:"s"},{letter:/[\u021A]/g,alternative:"T"},{letter:/[\u021B]/g,alternative:"t"},{letter:/[\u0251]/g,alternative:"a"},{letter:/[\u1EA0]/g,alternative:"A"},{letter:/[\u1EA1]/g,alternative:"a"},{letter:/[\u1EA2]/g,alternative:"A"},{letter:/[\u1EA3]/g,alternative:"a"},{letter:/[\u1EA4]/g,alternative:"A"},{letter:/[\u1EA5]/g,alternative:"a"},{letter:/[\u1EA6]/g,alternative:"A"},{letter:/[\u1EA7]/g,alternative:"a"},{letter:/[\u1EA8]/g,alternative:"A"},{letter:/[\u1EA9]/g,alternative:"a"},{letter:/[\u1EAA]/g,alternative:"A"},{letter:/[\u1EAB]/g,alternative:"a"},{letter:/[\u1EA6]/g,alternative:"A"},{letter:/[\u1EAD]/g,alternative:"a"},{letter:/[\u1EAE]/g,alternative:"A"},{letter:/[\u1EAF]/g,alternative:"a"},{letter:/[\u1EB0]/g,alternative:"A"},{letter:/[\u1EB1]/g,alternative:"a"},{letter:/[\u1EB2]/g,alternative:"A"},{letter:/[\u1EB3]/g,alternative:"a"},{letter:/[\u1EB4]/g,alternative:"A"},{letter:/[\u1EB5]/g,alternative:"a"},{letter:/[\u1EB6]/g,alternative:"A"},{letter:/[\u1EB7]/g,alternative:"a"},{letter:/[\u1EB8]/g,alternative:"E"},{letter:/[\u1EB9]/g,alternative:"e"},{letter:/[\u1EBA]/g,alternative:"E"},{letter:/[\u1EBB]/g,alternative:"e"},{letter:/[\u1EBC]/g,alternative:"E"},{letter:/[\u1EBD]/g,alternative:"e"},{letter:/[\u1EBE]/g,alternative:"E"},{letter:/[\u1EBF]/g,alternative:"e"},{letter:/[\u1EC0]/g,alternative:"E"},{letter:/[\u1EC1]/g,alternative:"e"},{letter:/[\u1EC2]/g,alternative:"E"},{letter:/[\u1EC3]/g,alternative:"e"},{letter:/[\u1EC4]/g,alternative:"E"},{letter:/[\u1EC5]/g,alternative:"e"},{letter:/[\u1EC6]/g,alternative:"E"},{letter:/[\u1EC7]/g,alternative:"e"},{letter:/[\u1EC8]/g,alternative:"I"},{letter:/[\u1EC9]/g,alternative:"i"},{letter:/[\u1ECA]/g,alternative:"I"},{letter:/[\u1ECB]/g,alternative:"i"},{letter:/[\u1ECC]/g,alternative:"O"},{letter:/[\u1ECD]/g,alternative:"o"},{letter:/[\u1ECE]/g,alternative:"O"},{letter:/[\u1ECF]/g,alternative:"o"},{letter:/[\u1ED0]/g,alternative:"O"},{letter:/[\u1ED1]/g,alternative:"o"},{letter:/[\u1ED2]/g,alternative:"O"},{letter:/[\u1ED3]/g,alternative:"o"},{letter:/[\u1ED4]/g,alternative:"O"},{letter:/[\u1ED5]/g,alternative:"o"},{letter:/[\u1ED6]/g,alternative:"O"},{letter:/[\u1ED7]/g,alternative:"o"},{letter:/[\u1ED8]/g,alternative:"O"},{letter:/[\u1ED9]/g,alternative:"o"},{letter:/[\u1EDA]/g,alternative:"O"},{letter:/[\u1EDB]/g,alternative:"o"},{letter:/[\u1EDC]/g,alternative:"O"},{letter:/[\u1EDD]/g,alternative:"o"},{letter:/[\u1EDE]/g,alternative:"O"},{letter:/[\u1EDF]/g,alternative:"o"},{letter:/[\u1EE0]/g,alternative:"O"},{letter:/[\u1EE1]/g,alternative:"o"},{letter:/[\u1EE2]/g,alternative:"O"},{letter:/[\u1EE3]/g,alternative:"o"},{letter:/[\u1EE4]/g,alternative:"U"},{letter:/[\u1EE5]/g,alternative:"u"},{letter:/[\u1EE6]/g,alternative:"U"},{letter:/[\u1EE7]/g,alternative:"u"},{letter:/[\u1EE8]/g,alternative:"U"},{letter:/[\u1EE9]/g,alternative:"u"},{letter:/[\u1EEA]/g,alternative:"U"},{letter:/[\u1EEB]/g,alternative:"u"},{letter:/[\u1EEC]/g,alternative:"U"},{letter:/[\u1EED]/g,alternative:"u"},{letter:/[\u1EEE]/g,alternative:"U"},{letter:/[\u1EEF]/g,alternative:"u"},{letter:/[\u1EF0]/g,alternative:"U"},{letter:/[\u1EF1]/g,alternative:"u"},{letter:/[\u1EF2]/g,alternative:"Y"},{letter:/[\u1EF3]/g,alternative:"y"},{letter:/[\u1EF4]/g,alternative:"Y"},{letter:/[\u1EF5]/g,alternative:"y"},{letter:/[\u1EF6]/g,alternative:"Y"},{letter:/[\u1EF7]/g,alternative:"y"},{letter:/[\u1EF8]/g,alternative:"Y"},{letter:/[\u1EF9]/g,alternative:"y"}],xe=[{letter:/[\u00C4]/g,alternative:"Ae"},{letter:/[\u00E4]/g,alternative:"ae"},{letter:/[\u00D6]/g,alternative:"Oe"},{letter:/[\u00F6]/g,alternative:"oe"},{letter:/[\u00DC]/g,alternative:"Ue"},{letter:/[\u00FC]/g,alternative:"ue"},{letter:/[\u1E9E]/g,alternative:"SS"},{letter:/[\u00DF]/g,alternative:"ss"}],we=[{letter:/[\u00C6]/g,alternative:"Ae"},{letter:/[\u00E6]/g,alternative:"ae"},{letter:/[\u00D8]/g,alternative:"Oe"},{letter:/[\u00F8]/g,alternative:"oe"},{letter:/[\u00C5]/g,alternative:"Aa"},{letter:/[\u00E5]/g,alternative:"aa"}],ke=[{letter:/[\u00B7]/g,alternative:"ll"}],Ke=[{letter:/[\u0110]/g,alternative:"DJ"},{letter:/[\u0111]/g,alternative:"dj"}],Te=function(e){switch(e){case"de":return xe;case"da":return we;case"ca":return ke;case"sr":case"bs":return Ke;default:return[]}};const Re=new RegExp(`([${Ie}])`,"g");function ze(e,t){const r=[];if(e.indexOf(t)>-1)for(let a=0;ae.replace(Re," $1 ").split(" "))),(0,t.filter)(u,(function(e){return""!==e.trim()}))}(e);let l=0;return a.forEach((function(t){const a=e.indexOf(t,l);r.push(a),l=a+t.length})),r}(e),u=r,(0,t.filter)(l,(function(e){return(0,t.includes)(u,e)})));var l,u;const n=[];We(a).forEach((function(e){if((0,t.isEqual)(e,a))n.push([e,[],[],[]]);else{const r=Ne(a,e);We(r).forEach((function(a){if((0,t.isEqual)(a,r))n.push([e,a,[],[]]);else{const l=Ne(r,a);We(l).forEach((function(r){if((0,t.isEqual)(r,l))n.push([e,a,r,[]]);else{const t=Ne(l,r);n.push([e,a,r,t])}}))}}))}}));const i=[];return n.forEach((function(t){const r=je(e,t[0],"İ"),a=je(r,t[1],"I"),l=je(a,t[2],"i"),u=je(l,t[3],"ı");i.push(u)})),i})),$e=function(e,t){return e=y(e,!1,"",t),new RegExp(e,"ig")};function Pe(e,r,a,l){e=function(e){return U(e=e.replace(/<(?!li|\/li|p|\/p|h1|\/h1|h2|\/h2|h3|\/h3|h4|\/h4|h5|\/h5|h6|\/h6|dd).*?>/g,""))}(e),e=C(e=Y(e)),r=C(r);let u=l?l(e,r):function(e,r,a){const l=Ue(a);let u=$e(r,l);if("tr"===l){const e=Le(r);u=new RegExp(e.map((e=>y(e))).join("|"),"ig")}const n=e.match(u)||[];e=e.replace(u,"");const i=function(e,r){const a=function(e){if((0,t.isUndefined)(e))return[];const r=Ue(e);return"nb"===r||"nn"===r?Me.nbnn:"bal"===r||"ca"===r?Me.ca:Me[r]||[]}(r);for(let t=0;t=0;t--)e=e.replace(a[t].letter,a[t].alternative);return e}(r,a);if(c!==i){const t=$e(c,l),r=e.match(t)||[];s=s.concat(r)}return(0,t.map)(s,(function(e){return U(e)}))}(e,r,a);u=(0,t.map)(u,(function(e){return U(ye(e))}));const n=(0,t.map)(u,(function(t){return e.indexOf(t)}));return{count:u.length,matches:u,position:0===n.length?-1:Math.min(...n)}}function Ye(e,r,a="en_EN",l){let u=0,n=[],i=[];return(0,t.uniq)(r).forEach((function(t){const r=Pe(e,t,a,l);u+=r.count,n=n.concat(r.matches),i.push(r.position)})),i=i.filter((e=>e>=0)),{count:u,matches:n,position:0===i.length?-1:Math.min(...i)}}function Ze(e,r){if(0===r)return r;let a=e.substring(0,r);return a=v(a),a=a.filter((e=>!s.includes(e))),(0,t.isEmpty)(a)?0:r}function Qe(e,r){const a=e.getTitle();let l=e.getKeyword();const u={allWordsFound:!1,position:-1,exactMatchKeyphrase:!1},n=h(l);if(n.exactMatchRequested){if(u.exactMatchKeyphrase=!0,!a.includes(n.keyphrase))return u;l=c(n.keyphrase);const e=Ye(a,l,"ja",A);return e.matches.length===l.length&&(u.allWordsFound=!0,u.position=Ze(a,e.position)),u}const i=function(e,r,a,l){const u=e.length,n=Array(u);let i=[],g=[];for(let t=0;t0?1:0,i.push(u.position),g=g.concat(u.matches)}const v=(0,t.sum)(n),s={countWordMatches:v,percentWordMatches:0,matches:g};return u>0&&(s.percentWordMatches=Math.round(v/u*100)),i=i.filter((e=>e>=0)),s.position=0===i.length?-1:Math.min(...i),s}(r.getResearch("morphology").keyphraseForms,a,"ja",A);return 100===i.percentWordMatches&&(u.allWordsFound=!0,u.position=Ze(a,i.position)),u}const{AbstractResearcher:Ge}=e.languageProcessing;class qe extends Ge{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,delete this.defaultResearches.getPassiveVoiceResult,delete this.defaultResearches.keywordCountInSlug,Object.assign(this.config,{language:"ja",firstWordExceptions:ve,functionWords:s,transitionWords:se,topicLength:ce,textLength:oe,paragraphLength:Ee,assessmentApplicability:he,sentenceLength:de,keyphraseLength:Ce,subheadingsTooLong:fe,countCharacters:!0,metaDescriptionLength:Ae}),Object.assign(this.helpers,{matchWordCustomHelper:A,getWordsCustomHelper:v,getContentWords:c,customGetStemmer:D,wordsCharacterCount:m,customCountLength:_,matchTransitionWordsHelper:I,memoizedTokenizer:ie,splitIntoTokensCustom:ge}),Object.assign(this.defaultResearches,{morphology:Be,keyphraseLength:Oe,wordCountInText:_e,findKeyphraseInSEOTitle:Qe})}}})(),(window.yoast=window.yoast||{}).Researcher=a})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/nb.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/nb.js new file mode 100644 index 00000000..04bd5e6d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/nb.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(t,r)=>{for(var d in r)e.o(r,d)&&!e.o(t,d)&&Object.defineProperty(t,d,{enumerable:!0,get:r[d]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>W});const r=window.yoast.analysis,d=["ei","et","en","ett","to","tre","fire","fem","seks","sju","syv","Ã¥tte","ni","ti","denne","dette","disse","den","det","de"],s=["ogsÃ¥","fortsatt","derimot","derfor","faktisk","endelig","likevel","følgelig","likesÃ¥","dessuten","selvsagt","deretter","men","for","fordi","mens","bare","da","dog","enn","ettersom","før","hvorpÃ¥","inntil","nÃ¥r","omennskjønt","samt","som","uaktet","pga.","uansett","foruten","siden","m.a.o","attpÃ¥til","derved","følgelig","forøvrig","iallfall","imidlertid","især","likefullt","likeledes","likesÃ¥","likevel","omsider","samstundes","samtidig","sikkert","sÃ¥ledes","sÃ¥leis","særs","ellers","enda","dersom","skjønt","samme","eansett","etterpÃ¥","generelt","herav","imens"],n=s.concat(["pÃ¥ den andre siden","for øyeblikket","i stedet","i mellomtiden","til slutt","i tillegg","i tilfelle","med mindre","om enn","om to strakser","selv om","pÃ¥ grunn av","med hensyn til","for eksempel","en gang","fremfor alt","i alle fall","i et nøtteskall","i hvert fall","i mellomtiden","med andre ord","til dømes","for øvrig","i ettertid","sÃ¥ langt","pÃ¥ tross av","til tross for","til tross for at ","for at","slik at","i løpet av","sÃ¥ at","slik som","sÃ¥ lenge","sÃ¥ ofte","sÃ¥ snart","etter hvert som","sÃ¥ fremt","sÃ¥ sant","i fall","for sÃ¥ vidt som","fordi om","enda om","trass i at","hvor sÃ¥","hva enn","hvor enn","sÃ¥nn at","som om","sÃ¥ som","rett og slett ","pÃ¥ samme mÃ¥te","etter hvert","av dette følger","i mellomtiden","i dette tilfellet","i motsetning til","som et resultat","like viktig","pÃ¥ grunn av det","pÃ¥ den positive siden","pÃ¥ den negative siden","tvert imot","kort oppsummert","i begge tilfeller"]);function l(e){let t=e;return e.forEach((r=>{(r=r.split("-")).length>0&&r.filter((t=>!e.includes(t))).length>0&&(t=t.concat(r))})),t}const i=["tror","fortelle","fortell","fortalte","tenkte","tenk"],k=["ha","har","hadde","gjør","gjøre","gjorde","kaller","kalte","kalle","kalla","virker","virka","virke","virka","gÃ¥r","gikk","gÃ¥","leges","lages","legges","lages","bestÃ¥r","bestod","bestÃ¥","bestÃ¥tt","bety","betyr"],a=l(k.concat(i)),o=l([].concat(["ei","et"],["null","en","ett","ene","to","tre","fire","fem","seks","syv","Ã¥tte","ni","ti","elleve","tolv","tretten","fjorten","femten","seksten","sytten","atten","nitten","tjue","tyve","tjueen","enogtyve","tretti","tredve","førti","førr","femti","seksti","sytti","Ã¥tti","nitti","hundre","hundreogen","etthundreogen","tohundre","tusen","tusenogen","million","millioner","milliard","milliarder"],["nullte","første","først","sekund","tredje","fjerde","femte","sjette","syvende","Ã¥ttende","niende","tiende","ellevte","tolvte","trettende","fjortende","femtende","sekstende","syttende","Ã¥ttende","nittende","tjuende","tjueførst","tjueførste","trettiende","førtiende","femtiende","sekstiende","syttiende","Ã¥ttiende","nittiende","hundrede","hundreogfemtiende","to hundrede","tusende","millionte","millardte"],["jeg","du","den","det","vi","de","han","hun","dere","henne","oss","meg","deg","ham","dem","min","din","deres","vÃ¥r","deres","ditt","mitt","vÃ¥re","vÃ¥rt","hans","hennes","dens","dets","egen","egne","mi","di","sin","si","sitt","sine","mine","dine","denne","dette","disse","slik","slikt","slike","sÃ¥nn","sÃ¥nt","sÃ¥nne","samme","hverandre","hvert","som"],["hvem","hvordan","hvorfor","hvor","hva","hvilken","hvilket","hvilke"],["mange","mye","mang en","mangt et","hele","mer","ingen","ingenting","ikke noen","ikke noe","alle","all","alt","allting","noen","noe","flere","hver","hvert","annenhver","ammethvert","begge","sov","mest","fleste","fÃ¥","fæst","færrest","flere","flest"],["seg","selv"],["ingenting","annen","annet","andre"],["sÃ¥nn","ved","mot","ned","enn","over","inn","i","sa","opp","der","fra","din","nei","mellom","di","oppe","av","med","til","Ã¥","pÃ¥","du","uten","én","under","hos","inne","gjennom","unna","del","nede","til","over","under","etter","kun","blant","for","mellom","blant"],["eller","hvis","ja","et","som","i","og","bÃ¥de","men","mens","enten","verken","at","om","da","nÃ¥r","før","idet","etter at","siden","innen","med det samme","til","inntil","hver gang","etter hvert som","sÃ¥ lenge","sÃ¥ lenge som","sÃ¥ ofte","sÃ¥ ofte som","sÃ¥ snart","sÃ¥ snart som","etter","etterpÃ¥","foran","tidligere","fordi","ettersom","derfor","dersom","hvis","sÃ¥ fremt","sÃ¥ sant","i fall","i tilfelle","med mindre","uten at","bare","for sÃ¥ vidt som","uten at","uten Ã¥","enda","fordi om","enda om","skjønt","om enn","hva sÃ¥","trass i at","hvor sÃ¥","samme","selv om","hva enn","til tross for at","hvor enn","uansett","for at","sÃ¥","sÃ¥ at","slik at","sÃ¥nn at","for at, sÃ¥","slik som","sÃ¥ som","som om","enn","dess","jo","desto"],i,["virkelig","akkurat","visst"],k,["helt","andre","litt","lenge","siste","fint","annet","stor","stort","store","neste","lenger","annen","nye","alene","flott","gammel","gammelt","gamle","klart","liten","langt","gamle","dÃ¥rlig","hyggelig","gode","sÃ¥nt","nytt","best","lang","smÃ¥","lot","større","vakker","vakkert","vakre","ny","bra","bedre","grei","greit","greie","høyt","største","størst","slikt","liten","lita","lite","smÃ¥","mindre","minst","kort","glad","dÃ¥rlig","ille","ond","vond","verre","verst","eldre","eldst","lang","lengre","lengst","nær","næmerere","nærere","nærmest","nærest","tung","tyngre","tyngst","ung","yngre","yngst","pen","alltid","godt","sammen","tilbake","etter","igjen","bare","sÃ¥","veldig","bedre","samme","far","eneste","enig","borte","snart","rundt","beste","bort","vekk","nesten","ganske","senere","videre","straks","svært","neste","bak","bakre","bakerst","borte","bortre","bortest","fremme","fremre","fremst","foran","forrest","inne","indre","innerst","midt","midtre","midterst","nede","nedre","nederst","nord","nordre","nordligst","øvre","øverst","sør","søndre","sørligst","vest","vestre","vestligst","øst","østre","østligst","ute","ytre","ytterst","underst","langt","fram","her","der","nok","aldri","ut","ned","nede","bort","innom","ingensteds","sjelden","sjeldnere","sjeldnest","raskt","raskere","raskest","gjerne","heller","helst","dÃ¥rligere","dÃ¥rligst","vondt","vondere","vondest","meget","øverst","enda","neppe","noksÃ¥","nesten","helt","bitende","aller","ganske","aldeles","derfra","herfra","utenlands","noensteds","oppÃ¥","hjemme","hit","dit","vekk","fram","fort","hyggelig","hvorledes","sÃ¥nn","sÃ¥ledes","slik","pent","morsomt","akkurat","alt","ofte","nettopp","bestandig","noen gang","noen ganger","fremdeles","ennÃ¥","da","sjeldent"],["hei","fy","au","hurra","uff","takk","hm","fanden","pokker","fillern","Ã¥h","isj","hallo","æsj"],["g"],["Ã¥r","Ã¥ret","gÃ¥r","dag","nÃ¥","tid","tiden","morgen","dager","minutt","minutter","dagen","uke","uker","mÃ¥neder","stund","timer","time","morges","ettermiddag","tidlig","fjor","kveld","natt","fogÃ¥rs","vinter","sommer","vÃ¥r","høst"],["ting","tingene"],["ok","okay","ja","jo","jasÃ¥","nei","ikke","unnskyld","beklager","herr","altsÃ¥","grader","grad","kr","en halvdel","en halv","to halve","en tredel","tredjedel","to tredeler","tredjedeler","en firedel","fjerdedel","kvart","en trettendedel","en fjortendedel","en promille","en tusendel","halvannen","en og en halv"],a,s)),g=["dette","at","disse","pÃ¥","unntatt","for","fra","i","om","ovenfor","pÃ¥ tvers","etter","mot","blant","rundt","som","pÃ¥","før","bak","nedenfor","under","siden","mellom","utover","men","av","nÃ¥r","da","som","fordi ","ikke","og"],p=[["bÃ¥de","og"],["enten","eller"],["verken","eller"],["jo","dess"],["dess","dess"],["jo","desto"],["ikke bare","men"],["ikke bare","ogsÃ¥"]],m=window.lodash,f=function(e){let t=e.search(/[aeiouyøåæ][^aeiouyøåæ]/);return-1!==t&&(t+=2),-1!==t&&t<3&&(t=3),t},v=function(e,t,r){const d=e.search(new RegExp(r.externalStemmer.regexSuffixes1a));if(d>=t&&-1!==t){let t=e.substring(0,d);return/ert$/i.test(t)&&(t=t.slice(0,-1)),t}const s=e.search(/s$/),n=e.search(new RegExp(r.externalStemmer.regexSuffixes1b));return s>=t&&-1!==n&&-1!==t?e.slice(0,-1):e},u=function(e,t,r){return e.search(new RegExp(r.externalStemmer.regexSuffixes2))>=t&&-1!==t&&(e=e.slice(0,-1)),e},b=function(e,t,r){const d=e.search(new RegExp(r.externalStemmer.regexSuffixes3));return d>=t&&-1!==t&&(e=e.substring(0,d)),e},{baseStemmer:y}=r.languageProcessing;function h(e){const t=(0,m.get)(e.getData("morphology"),"nb",!1);return t?e=>function(e,t){let r=-1;for(const d of[v,u,b])r=f(e),e=d(e,r,t);return e}(e,t):y}const j=["villet","bruket","finnet","legget","viset","vitet","ligget","ønsket","holdet","spillet","laget","velget","tenket","menet","trenget","begynnet","kjennet","kjøpet","startet","finnest","leset","følget","jobbet","gjeldet","sendet","fortellet","skremt","prøvd","sittet","høret","hjelpet","bygget","klaret","kjøret","føret","snakket","øket","tilbyt","skapet","hÃ¥pet","vinnet","møtet","delet","følet","utviklet","betydd","kallet","bidrat","læret","selget","spiset","opplevet","fortsettet","passet","drivet","krevet","fungeret","levet","leveret","virket","betalet","forstÃ¥t","deltat","benyttet","søket","endret","spørret","vurderet","stillet","handlet","inkluderet","Ã¥pnet","reiset","inneholdet","bestemmet","anbefalet","trekket","ventet","samlet","flyttet","nevnet","gjennomføret","husket","luret","lurt","sikret","begynt","bestÃ¥t","reduseret","slippet","hentet","regnet","svaret","knyttet","utføret","hetet","merket","baseret","trenet","fallet","meldet","ledet","fyllet","produseret","dekket","endet","mistet","gledet","unngÃ¥t","sørget","behandlet","vokset","mottat","registreret","beskrivet","arrangeret","forsøket","etableret","pÃ¥virket","skjønnet","fjernet","fødet","sjekket","forklaret","treffet","stoppet","bestillet","oppnÃ¥t","plasseret","avsluttet","henget","løpet","forventet","sluttet","presenteret","elsket","slitet","kostet","planlegget","bæret","besøket","glemmet","støttet","byttet","kastet","testet","nytet","oppdaget","oppstÃ¥t","tapet","brytet","løset","styret","fornøyet","innebæret","rettet","representeret","tilpasset","publiseret","omfattet","utsettet","sammenlignet","tillatet","sovet","dannet","hevdet","tjenet","inviteret","forsvinnet","manglet","drepet","utgjøret","skillet","beskyttet","stemmet","varieret","drikket","opprettet","inngÃ¥t","forbedret","ødelegget","satset","dukket","mÃ¥let","lastet","foreslÃ¥t","diskuteret","ringet","studeret","interesseret","styrket","begrenset","varet","koblet","skadet","forlatet","forlatt","lovet","foretat","skaffet","foregÃ¥t","godkjennet","koset","sparet","hørest","hindret","vedtat","bringet","bekreftet","oppdateret","anset","synget","fokuseret","forÃ¥rsaket","spret","erstattet","skytet","serveret","kombineret","kjempet","latet","antat","blandet","byt","snut","preget","fordelet","ansettet","takket","faret","utvidet","skyldest","minnet","trykket","lanseret","kontaktet","beholdet","letet","forberedet","festet","innføret","undersøket","brennet","malet","medføret","beveget","stikket","skiftet","hoppet","involveret","egnet","overtat","monteret","tÃ¥let","avgjøret","lykkest","plukket","beregnet","utgit","peket","hÃ¥ndteret","tegnet","langet","uttalet","lagret","følest","installeret","feiret","opprettholdet","oppfordret","reageret","kontrolleret","understreket","havnet","vasket","befinnet","fullføret","leket","lidet","defineret","omtalet","løftet","oppgit","rammet","samarbeidet","fanget","typet","opplyset","strekket","dreiet","stenget","utarbeidet","fremmet","overføret","pleiet","oppfyllet","inspireret","engasjeret","utnyttet","oppføret","organiseret","smaket","reddet","scoret","hendet","bekymret","kuttet","pÃ¥peket","rekket","forandret","aksepteret","ordnet","nektet","presset","passeret","savnet","nærmet","pakket","smilet","møtest","rapporteret","dømmet","oppfattet","tilhøret","stiget","tildelet","talet","tydet","greiet","markeret","ivaretat","fortjenet","vennet","leiet","lÃ¥net","eksisteret","dokumenteret","klikket","vendet","tvinget","kommenteret","innrømmet","forholdet","landet","vÃ¥knet","funket","formidlet","identifiseret","tellet","utstyret","gratuleret","formet","angripet","overrasket","foreligget","hevet","tørret","foretrekket","garanteret","justeret","prioriteret","lyttet","gjentat","imponeret","resulteret","skjulet","trengest","rivet","trivest","lukket","uttrykket","overlevet","klaget","informeret","tilbringet","postet","giftet","designet","avsløret","varslet","fremstÃ¥t","blogget","innset","stolet","opereret","forsvaret","forutsettet","gripet","ryddet","utdannet","skrut","veiet","krysset","utfordret","gjennomgÃ¥t","reguleret","støtet","senket","lignet","bevaret","angit","utforsket","tørket","syklet","forsterket","tolket","slappet","investeret","fikset","berøret","beviset","ropet","koket","forblit","opptret","vekket","fastsettet","strikket","fryktet","blÃ¥set","avholdet","drømmet","syt","forekommet","forbyt","pratet","observeret","taklet","pÃ¥stÃ¥t","konkurreret","anet","rennet","rit","signeret","forhindret","ankommet","konkluderet","sporet","stiftet","relateret","forbindet","avtalet","varmet","bitet","pÃ¥føret","bindet","fellet","kvalifiseret","refereret","utformet","avviset","klippet","overbeviset","blat","plaget","øvet","orket","behøvet","godtat","beklaget","henviset","kommuniseret","integreret","seilet","betraktet","danset","giddet","synket","lettet","tilrettelegget","finansieret","stimuleret","bedret","forebygget","avhenget","skuffet","tilsit","rullet","lestt","analyseret","hilset","bosettet","stjelet","tilsvaret","introduseret","dyrket","aktiveret","gravet","tret","disset","farget","anvendet","inntat","oversettet","hatet","konsentreret","utløset","reflekteret","grunnlegget","pustet","opplevest","kritiseret","anerkjennet","avdekket","svekket","slettet","gjenstÃ¥t","hvilet","redigeret","kÃ¥ret","steket","røret","lÃ¥set","advaret","risikeret","renset","grÃ¥tet","knuset","rykket","underviset","skjæret","motiveret","luktet","domineret","fisket","bistÃ¥t","seest","Ã¥penbaret","tilføret","tilknyttet","pÃ¥viset","besluttet","kartlegget","filmet","ytet","pÃ¥gÃ¥t","kikket","gjemmet","annonseret","logget","omhandlet","returneret","røyket","pÃ¥legget","tipset","tippet","plantet","fremstillet","puttet","irriteret","tennet","stanset","utøvet","indikeret","noteret","tiltrekket","fryset","pyntet","klatret","lyset","oppgraderet","pusset","slenget","fraktet","fristet","stammet","skremmet","antydet","utnevnet","videreføret","forsket","vandret","tilsettet","oppsøket","fattet","svinget","forhandlet","skrevet","lønnet","stryket","suget","viet","digget","siktet","huset","repareret","erfaret","praktiseret","badet","forlenget","baket","straffet","realiseret","stresset","skrytet","intervjuet","flytet","bekjempet","illustreret","bøyet","droppet","iverksettet","ladet","mistenket","sovnet","forpliktet","tømmet","fremhevet","dempet","tvilet","begÃ¥t","orienteret","overvÃ¥ket","fastslÃ¥t","banket","løsnet","tilfredsstillet","kopieret","etterfølget","rommet","argumenteret","angret","kulet","drøftet","sparket","begrunnet","betegnet","flyktet","erklæret","oppsummeret","forelsket","respekteret","lydet","lÃ¥tet","avklaret","isoleret","smittet","anslÃ¥t","hellet","priset","smøret","genereret","oppbevaret","innledet","utelukket","belyset","omgit","vektlegget","listet","overlatet","tittet","dritet","debuteret","roet","konstrueret","administreret","gjengit","ryket","nomineret","svømmet","smeltet","offentliggjøret","etterlatet","skinnet","smellet","skriket","forvaltet","presteret","spesialiseret","siget","forsikret","dateret","klemmet","forstyrret","toppet","skyvet","linket","matchet","ridet","videreutviklet","fremgÃ¥t","avgit","fornyet","limet","raset","spat","balanseret","frigjøret","siteret","forestillet","konstateret","jaktet","grunnet","veiledet","gjenopprettet","angÃ¥t","besvaret","sammenliknet","innhentet","ristet","rengjøret","litet","kompliseret","utredet","nyttet","arresteret","moret","betjenet","booket","demonstreret","strømmet","anmeldet","dekoreret","mestret","vedlikeholdet","springet","erkjennet","oppholdet","avviklet","fotograferet","parkeret","vitnet","sviktet","rekrutteret","importeret","elimineret","oppmuntret","belønnet","blokkeret","presiseret","markedsføret","kjennetegnet","høstet","kjennest","lokaliseret","vÃ¥get","overset","innstillet","utmerket","gjenspeilet","henvendet","lokket","sukket","utstedet","innehat","utbetalet","rangeret","avbrytet","evalueret","jaget","hivet","sprekket","døpet","omsettet","sorteret","slÃ¥sst","karakteriseret","fremføret","rundet","bemerket","underlegget","korresponderet","verdsettet","konverteret","formuleret","forfølget","utbret","disponeret","avanseret","strammet","implementeret","opparbeidet","kysset","korrigeret","blomstret","innvilget","ofret","knekket","filet","matet","forsinket","forenet","reserveret","spennet","tilsendet","transporteret","vannet","stavet","belastet","forenklet","skreddersyt","etterlyset","skyldet","spÃ¥t","dyttet","timet","rotet","nedlegget","dettet","kvittet","innredet","kortet","motsettet","lindret","bremset","frelset","foret","gjenkjennet","opphevet","sniket","tallet","absorberet","lekket","doblet","distribueret","synliggjøret","feilet","forsynet","bearbeidet","ignoreret","unnet","forkynnet","trÃ¥kket","assosieret","tilegnet","utviset","nedsettet","diagnostiseret","framstÃ¥t","heiet","planet","anget","evnet","herjet","sklit","misforstÃ¥t","forbeholdet","begeistret","avsettet","fyret","oset","kompenseret","overstiget","tilset","oppkallet","krypet","brettet","bevilget","skildret","forvandlet","minsket","rømmet","klassifiseret","anlegget","lyvet","sprenget","overnattet","innfrit","spørrest","maktet","forverret","turet","stellet","klargjøret","arvet","hemmet","ledest","skyllet","nøyet","pumpet","tillegget","hyllet","tillet","behersket","skjerpet","berømmet","vernet","forankret","luftet","svelget","innkallet","kunngjøret","luket","opphøret","headet","vekslet","fratat","suppleret","innlemmet","trillet","lenket","boret","avlyset","sponset","driftet","medvirket","motvirket","ferdigstillet","grenset","sprettet","gjestet","regisseret","protesteret","anklaget","gjettet","etterspørret","duket","stemplet","koordineret","avtat","oppnevnet","omkommet","overholdet","printet","misbruket","forlanget","dedikeret","roset","unnskyldet","utdelet","sÃ¥ret","sertifiseret","oppløset","provoseret","forvirret","øset","begravet","overgÃ¥t","pÃ¥tat","helbredet","stirret","erobret","spekuleret","skiltet","mobbet","rustet","nikket","gruet","bommet","innlegget","utpeket","surfet","kranglet","tilgit","utdypet","sammensettet","hakket","fremkommet","strevet","igangsettet","hersket","brekket","bristet","bydet","draget","flyget","fnyset","fyket","glippet","grinet","gyset","gytet","gyvet","hogget","hugget","klinget","klypet","klyvet","knipet","kommet","kvedet","kvekket","kveppet","latet"," lyget","lyvet","nyset","pipet","ridet","settet","skitet","skjelvet","skridet","skrivet","skvettet","slippet","smyget","snytet","spinnet","stridet","supet","sverget","sverjet","ljuget","sviket","svinnet","sleppet","tigget","viket","villt","brukt","finnt","leggt","vist","vitt","liggt","ønskt","holdt","spillt","lagt","velgt","tenkt","ment","trengt","begynnt","kjennt","kjøpt","startt","finnes","lest","følgt","jobbt","gjeldt","sendt","fortellt","sitt","hørt","hjelpt","byggt","klart","kjørt","ført","snakkt","økt","tilby","skapt","hÃ¥pt","vinnt","møtt","delt","følt","utviklt","bety","kallt","bidra","lært","selgt","spist","opplevt","fortsett","passt","drivt","krevt","fungert","levt","levert","virkt","betalt","forstÃ¥","delta","benytt","søkt","endrt","spørrt","vurdert","stillt","handlt","inkludert","Ã¥pnt","reist","inneholdt","bestemmt","anbefalt","trekkt","ventt","samlt","flytt","nevnt","gjennomført","huskt","lurt","sikrt","bestÃ¥","redusert","slippt","hentt","regnt","svart","knytt","utført","hett","merkt","basert","trent","fallt","meldt","ledt","fyllt","produsert","dekkt","endt","mistt","gledt","unngÃ¥","sørgt","behandlt","vokst","motta","registrert","beskrivt","arrangert","forsøkt","etablert","pÃ¥virkt","skjønnt","fjernt","født","sjekkt","forklart","trefft","stoppt","bestillt","oppnÃ¥","plassert","avslutt","hengt","løpt","forventt","slutt","presentert","elskt","slitt","kostt","planleggt","bært","besøkt","glemmt","støtt","bytt","kastt","testt","nytt","oppdagt","oppstÃ¥","tapt","brytt","løst","styrt","fornøyt","innebært","rett","representert","tilpasst","publisert","omfatt","utsett","sammenlignt","tillatt","sovt","dannt","hevdt","tjent","invitert","forsvinnt","manglt","drept","utgjørt","skillt","beskytt","stemmt","variert","drikkt","opprett","inngÃ¥","forbedrt","ødeleggt","satst","dukkt","mÃ¥lt","lastt","foreslÃ¥","diskutert","ringt","studert","interessert","styrkt","begrenst","vart","koblt","skadt","forlatt","lovt","foreta","skafft","foregÃ¥","godkjennt","kost","spart","høres","hindrt","vedta","bringt","bekreftt","oppdatert","anst","syngt","fokusert","forÃ¥rsakt","sprt","erstatt","skytt","servert","kombinert","kjempt","latt","anta","blandt","by","snu","pregt","fordelt","ansett","takkt","fart","utvidt","skyldes","minnt","trykkt","lansert","kontaktt","beholdt","lett","forberedt","festt","innført","undersøkt","brennt","malt","medført","bevegt","stikkt","skiftt","hoppt","involvert","egnt","overta","montert","tÃ¥lt","avgjørt","lykkes","plukkt","beregnt","utgi","pekt","hÃ¥ndtert","tegnt","langt","uttalt","lagrt","føles","installert","feirt","opprettholdt","oppfordrt","reagert","kontrollert","understrekt","havnt","vaskt","befinnt","fullført","lekt","lidt","definert","omtalt","løftt","oppgi","rammt","samarbeidt","fangt","typt","opplyst","strekkt","dreit","stengt","utarbeidt","fremmt","overført","pleit","oppfyllt","inspirert","engasjert","utnytt","oppført","organisert","smakt","reddt","scort","hendt","bekymrt","kutt","pÃ¥pekt","rekkt","forandrt","akseptert","ordnt","nektt","presst","passert","savnt","nærmt","pakkt","smilt","møtes","rapportert","dømmt","oppfatt","tilhørt","stigt","tildelt","talt","tydt","greit","markert","ivareta","fortjent","vennt","leit","lÃ¥nt","eksistert","dokumentert","klikkt","vendt","tvingt","kommentert","innrømmt","forholdt","landt","vÃ¥knt","funkt","formidlt","identifisert","tellt","utstyrt","gratulert","formt","angript","overraskt","foreliggt","hevt","tørrt","foretrekkt","garantert","justert","prioritert","lytt","gjenta","imponert","resultert","skjult","trenges","rivt","trives","lukkt","uttrykkt","overlevt","klagt","informert","tilbringt","postt","giftt","designt","avslørt","varslt","fremstÃ¥","bloggt","innst","stolt","operert","forsvart","forutsett","gript","ryddt","utdannt","skru","veit","krysst","utfordrt","gjennomgÃ¥","regulert","støtt","senkt","lignt","bevart","angi","utforskt","tørkt","syklt","forsterkt","tolkt","slappt","investert","fikst","berørt","bevist","ropt","kokt","forbli","opptrt","vekkt","fastsett","strikkt","fryktt","blÃ¥st","avholdt","drømmt","sy","forekommt","forby","pratt","observert","taklt","pÃ¥stÃ¥","konkurrert","ant","rennt","ri","signert","forhindrt","ankommt","konkludert","sport","stiftt","relatert","forbindt","avtalt","varmt","bitt","pÃ¥ført","bindt","fellt","kvalifisert","referert","utformt","avvist","klippt","overbevist","bla","plagt","øvt","orkt","behøvt","godta","beklagt","henvist","kommunisert","integrert","seilt","betraktt","danst","giddt","synkt","lett","tilretteleggt","finansiert","stimulert","bedrt","forebyggt","avhengt","skufft","tilsi","rullt","lest","analysert","hilst","bosett","stjelt","tilsvart","introdusert","dyrkt","aktivert","gravt","trt","disst","fargt","anvendt","innta","oversett","hatt","konsentrert","utløst","reflektert","grunnleggt","pustt","oppleves","kritisert","anerkjennt","avdekkt","svekkt","slett","gjenstÃ¥","hvilt","redigert","kÃ¥rt","stekt","rørt","lÃ¥st","advart","risikert","renst","grÃ¥tt","knust","rykkt","undervist","skjært","motivert","luktt","dominert","fiskt","bistÃ¥","sees","Ã¥penbart","tilført","tilknytt","pÃ¥vist","beslutt","kartleggt","filmt","ytt","pÃ¥gÃ¥","kikkt","gjemmt","annonsert","loggt","omhandlt","returnert","røykt","pÃ¥leggt","tipst","tippt","plantt","fremstillt","putt","irritert","tennt","stanst","utøvt","indikert","notert","tiltrekkt","fryst","pyntt","klatrt","lyst","oppgradert","pusst","slengt","fraktt","fristt","stammt","skremmt","antydt","utnevnt","videreført","forskt","vandrt","tilsett","oppsøkt","fatt","svingt","forhandlt","skrevt","lønnt","strykt","sugt","vit","diggt","siktt","hust","reparert","erfart","praktisert","badt","forlengt","bakt","strafft","realisert","stresst","skrytt","intervjut","flytt","bekjempt","illustrert","bøyt","droppt","iverksett","ladt","mistenkt","sovnt","forpliktt","tømmt","fremhevt","dempt","tvilt","begÃ¥","orientert","overvÃ¥kt","fastslÃ¥","bankt","løsnt","tilfredsstillt","kopiert","etterfølgt","rommt","argumentert","angrt","kult","drøftt","sparkt","begrunnt","betegnt","flyktt","erklært","oppsummert","forelskt","respektert","lydt","lÃ¥tt","avklart","isolert","smitt","anslÃ¥","hellt","prist","smørt","generert","oppbevart","innledt","utelukkt","belyst","omgi","vektleggt","listt","overlatt","titt","dritt","debutert","rot","konstruert","administrert","gjengi","rykt","nominert","svømmt","smeltt","offentliggjørt","etterlatt","skinnt","smellt","skrikt","forvaltt","prestert","spesialisert","sigt","forsikrt","datert","klemmt","forstyrrt","toppt","skyvt","linkt","matcht","ridt","videreutviklt","fremgÃ¥","avgi","fornyt","limt","rast","spa","balansert","frigjørt","sitert","forestillt","konstatert","jaktt","grunnt","veiledt","gjenopprett","angÃ¥","besvart","sammenliknt","innhentt","ristt","rengjørt","litt","komplisert","utredt","nytt","arrestert","mort","betjent","bookt","demonstrert","strømmt","anmeldt","dekorert","mestrt","vedlikeholdt","springt","erkjennt","oppholdt","avviklt","fotografert","parkert","vitnt","sviktt","rekruttert","importert","eliminert","oppmuntrt","belønnt","blokkert","presisert","markedsført","kjennetegnt","høstt","kjennes","lokalisert","vÃ¥gt","overst","innstillt","utmerkt","gjenspeilt","henvendt","lokkt","sukkt","utstedt","inneha","utbetalt","rangert","avbrytt","evaluert","jagt","hivt","sprekkt","døpt","omsett","sortert","slÃ¥ss","karakterisert","fremført","rundt","bemerkt","underleggt","korrespondert","verdsett","konvertert","formulert","forfølgt","utbrt","disponert","avansert","strammt","implementert","opparbeidt","kysst","korrigert","blomstrt","innvilgt","ofrt","knekkt","filt","matt","forsinkt","forent","reservert","spennt","tilsendt","transportert","vannt","stavt","belastt","forenklt","skreddersy","etterlyst","skyldt","spÃ¥","dytt","timt","rott","nedleggt","dett","kvitt","innredt","kortt","motsett","lindrt","bremst","frelst","fort","gjenkjennt","opphevt","snikt","tallt","absorbert","lekkt","doblt","distribuert","synliggjørt","feilt","forsynt","bearbeidt","ignorert","unnt","forkynnt","trÃ¥kkt","assosiert","tilegnt","utvist","nedsett","diagnostisert","framstÃ¥","heit","plant","angt","evnt","herjt","skli","misforstÃ¥","forbeholdt","begeistrt","avsett","fyrt","ost","kompensert","overstigt","tilst","oppkallt","krypt","brett","bevilgt","skildrt","forvandlt","minskt","rømmt","klassifisert","anleggt","lyvt","sprengt","overnatt","innfri","spørres","maktt","forverrt","turt","stellt","klargjørt","arvt","hemmt","ledes","skyllt","nøyt","pumpt","tilleggt","hyllt","tillt","beherskt","skjerpt","berømmt","vernt","forankrt","luftt","svelgt","innkallt","kunngjørt","lukt","opphørt","headt","vekslt","frata","supplert","innlemmt","trillt","lenkt","bort","avlyst","sponst","driftt","medvirkt","motvirkt","ferdigstillt","grenst","sprett","gjestt","regissert","protestert","anklagt","gjett","etterspørrt","dukt","stemplt","koordinert","avta","oppnevnt","omkommt","overholdt","printt","misbrukt","forlangt","dedikert","rost","unnskyldt","utdelt","sÃ¥rt","sertifisert","oppløst","provosert","forvirrt","øst","begravt","overgÃ¥","pÃ¥ta","helbredt","stirrt","erobrt","spekulert","skiltt","mobbt","rustt","nikkt","grut","bommt","innleggt","utpekt","surft","kranglt","tilgi","utdypt","sammensett","hakkt","fremkommt","strevt","igangsett","herskt","brekkt","bristt","bydt","dragt","flygt","fnyst","fykt","glippt","grint","gyst","gytt","gyvt","hoggt","huggt","klingt","klypt","klyvt","knipt","kommt","kvedt","kvekkt","kveppt","latt"," lygt","lyvt","nyst","pipt","ridt","sett","skitt","skjelvt","skridt","skrivt","skvett","slippt","smygt","snytt","spinnt","stridt","supt","svergt","sverjt","ljugt","svikt","svinnt","sleppt","tiggt","vikt","bedt","betydd","bundet","bitt","blitt","brekket","brent","brutt","bydd","budt","bÃ¥ret","dettet","dradd","dratt","drukket","dritet","dritt","drevet","ett","falt","funnet","flydd","fløyet","flydd","fløyet","flytt","forsvunnet","fortalt","frosset","fÃ¥tt","fulgt","gitt","giddet","gjeldet","gjeldt","gjort","kvalt","glidd","gravd","gravet","grint","grepet","grÃ¥tt","gÃ¥tt","hatt","hett","hivd","hjulpet","hogget","hogd","holdt","klypt","kløpet","knekket","knekt","kommet","krøpet","latt","latt","ledd","lagt","ligget","lydd","lydt","løyet","løpet","løpt","nyst","nytt","pepet","rekket","rekkt","rent","ridd","revet","røket","sett","solgt","satt","sagt","sittet","skitt","skjelvet","skÃ¥ret","sklidd","skreket","skrevet","skrytt","skutt","skyvd","skjøvet","slengt","sluppet","slitt","slÃ¥tt","smelt","snytt","sovet","sprukket","sprettet","sprunget","spurt","stukket","stjÃ¥let","strukket","strøket","stÃ¥tt","likt","sverga","sverget","svoret","svidd","sveket","svunnet","sunget","sunket","tatt","truffet","trukket","tvunget","tort","turt","valgt","vikt","vunnet","visst","vridd","vært","villed","bruked","finned","legged","vised","vited","ligged","ønsked","holded","spilled","laged","velged","tenked","mened","trenged","begynned","kjenned","kjøped","started","finnesd","lesed","følged","jobbed","gjelded","sended","fortelled","sitted","høred","hjelped","bygged","klared","kjøred","føred","snakked","øked","tilbyd","skaped","hÃ¥ped","vinned","møted","deled","føled","utvikled","betyd","kalled","bidrad","læred","selged","spised","oppleved","fortsetted","passed","drived","kreved","fungered","leved","levered","virked","betaled","forstÃ¥d","deltad","benytted","søked","endred","spørred","vurdered","stilled","handled","inkludered","Ã¥pned","reised","inneholded","bestemmed","anbefaled","trekked","vented","samled","flytted","nevned","gjennomføred","husked","lured","sikred","bestÃ¥d","redusered","slipped","hented","regned","svared","knytted","utføred","heted","merked","basered","trened","falled","melded","leded","fylled","produsered","dekked","ended","misted","gleded","unngÃ¥d","sørged","behandled","voksed","mottad","registrered","beskrived","arrangered","forsøked","etablered","pÃ¥virked","skjønned","fjerned","føded","sjekked","forklared","treffed","stopped","bestilled","oppnÃ¥d","plassered","avslutted","henged","løped","forvented","slutted","presentered","elsked","slited","kosted","planlegged","bæred","besøked","glemmed","støtted","bytted","kasted","tested","nyted","oppdaged","oppstÃ¥d","taped","bryted","løsed","styred","fornøyed","innebæred","retted","representered","tilpassed","publisered","omfatted","utsetted","sammenligned","tillated","soved","danned","hevded","tjened","invitered","forsvinned","mangled","dreped","utgjøred","skilled","beskytted","stemmed","variered","drikked","oppretted","inngÃ¥d","forbedred","ødelegged","satsed","dukked","mÃ¥led","lasted","foreslÃ¥d","diskutered","ringed","studered","interessered","styrked","begrensed","vared","kobled","skaded","forlated","loved","foretad","skaffed","foregÃ¥d","godkjenned","kosed","spared","høresd","hindred","vedtad","bringed","bekrefted","oppdatered","ansed","synged","fokusered","forÃ¥rsaked","spred","erstatted","skyted","servered","kombinered","kjemped","lated","antad","blanded","byd","snud","preged","fordeled","ansetted","takked","fared","utvided","skyldesd","minned","trykked","lansered","kontakted","beholded","leted","forbereded","fested","innføred","undersøked","brenned","maled","medføred","beveged","stikked","skifted","hopped","involvered","egned","overtad","montered","tÃ¥led","avgjøred","lykkesd","plukked","beregned","utgid","peked","hÃ¥ndtered","tegned","langed","uttaled","lagred","følesd","installered","feired","opprettholded","oppfordred","reagered","kontrollered","understreked","havned","vasked","befinned","fullføred","leked","lided","definered","omtaled","løfted","oppgid","rammed","samarbeided","fanged","typed","opplysed","strekked","dreied","stenged","utarbeided","fremmed","overføred","pleied","oppfylled","inspirered","engasjered","utnytted","oppføred","organisered","smaked","redded","scored","hended","bekymred","kutted","pÃ¥peked","rekked","forandred","akseptered","ordned","nekted","pressed","passered","savned","nærmed","pakked","smiled","møtesd","rapportered","dømmed","oppfatted","tilhøred","stiged","tildeled","taled","tyded","greied","markered","ivaretad","fortjened","venned","leied","lÃ¥ned","eksistered","dokumentered","klikked","vended","tvinged","kommentered","innrømmed","forholded","landed","vÃ¥kned","funked","formidled","identifisered","telled","utstyred","gratulered","formed","angriped","overrasked","foreligged","heved","tørred","foretrekked","garantered","justered","prioritered","lytted","gjentad","imponered","resultered","skjuled","trengesd","rived","trivesd","lukked","uttrykked","overleved","klaged","informered","tilbringed","posted","gifted","designed","avsløred","varsled","fremstÃ¥d","blogged","innsed","stoled","operered","forsvared","forutsetted","griped","rydded","utdanned","skrud","veied","kryssed","utfordred","gjennomgÃ¥d","regulered","støted","senked","ligned","bevared","angid","utforsked","tørked","sykled","forsterked","tolked","slapped","investered","fiksed","berøred","bevised","roped","koked","forblid","opptred","vekked","fastsetted","strikked","frykted","blÃ¥sed","avholded","drømmed","syd","forekommed","forbyd","prated","observered","takled","pÃ¥stÃ¥d","konkurrered","aned","renned","rid","signered","forhindred","ankommed","konkludered","spored","stifted","relatered","forbinded","avtaled","varmed","bited","pÃ¥føred","binded","felled","kvalifisered","referered","utformed","avvised","klipped","overbevised","blad","plaged","øved","orked","behøved","godtad","beklaged","henvised","kommunisered","integrered","seiled","betrakted","dansed","gidded","synked","letted","tilrettelegged","finansiered","stimulered","bedred","forebygged","avhenged","skuffed","tilsid","rulled","lestd","analysered","hilsed","bosetted","stjeled","tilsvared","introdusered","dyrked","aktivered","graved","tred","dissed","farged","anvended","inntad","oversetted","hated","konsentrered","utløsed","reflektered","grunnlegged","pusted","opplevesd","kritisered","anerkjenned","avdekked","svekked","sletted","gjenstÃ¥d","hviled","redigered","kÃ¥red","steked","røred","lÃ¥sed","advared","risikered","rensed","grÃ¥ted","knused","rykked","undervised","skjæred","motivered","lukted","dominered","fisked","bistÃ¥d","seesd","Ã¥penbared","tilføred","tilknytted","pÃ¥vised","beslutted","kartlegged","filmed","yted","pÃ¥gÃ¥d","kikked","gjemmed","annonsered","logged","omhandled","returnered","røyked","pÃ¥legged","tipsed","tipped","planted","fremstilled","putted","irritered","tenned","stansed","utøved","indikered","notered","tiltrekked","frysed","pynted","klatred","lysed","oppgradered","pussed","slenged","frakted","fristed","stammed","skremmed","antyded","utnevned","videreføred","forsked","vandred","tilsetted","oppsøked","fatted","svinged","forhandled","skreved","lønned","stryked","suged","vied","digged","sikted","hused","reparered","erfared","praktisered","baded","forlenged","baked","straffed","realisered","stressed","skryted","intervjued","flyted","bekjemped","illustrered","bøyed","dropped","iverksetted","laded","mistenked","sovned","forplikted","tømmed","fremheved","demped","tviled","begÃ¥d","orientered","overvÃ¥ked","fastslÃ¥d","banked","løsned","tilfredsstilled","kopiered","etterfølged","rommed","argumentered","angred","kuled","drøfted","sparked","begrunned","betegned","flykted","erklæred","oppsummered","forelsked","respektered","lyded","lÃ¥ted","avklared","isolered","smitted","anslÃ¥d","helled","prised","smøred","generered","oppbevared","innleded","utelukked","belysed","omgid","vektlegged","listed","overlated","titted","drited","debutered","roed","konstruered","administrered","gjengid","ryked","nominered","svømmed","smelted","offentliggjøred","etterlated","skinned","smelled","skriked","forvalted","prestered","spesialisered","siged","forsikred","datered","klemmed","forstyrred","topped","skyved","linked","matched","rided","videreutvikled","fremgÃ¥d","avgid","fornyed","limed","rased","spad","balansered","frigjøred","sitered","forestilled","konstatered","jakted","grunned","veileded","gjenoppretted","angÃ¥d","besvared","sammenlikned","innhented","risted","rengjøred","lited","komplisered","utreded","nytted","arrestered","mored","betjened","booked","demonstrered","strømmed","anmelded","dekorered","mestred","vedlikeholded","springed","erkjenned","oppholded","avvikled","fotografered","parkered","vitned","svikted","rekruttered","importered","eliminered","oppmuntred","belønned","blokkered","presisered","markedsføred","kjennetegned","høsted","kjennesd","lokalisered","vÃ¥ged","oversed","innstilled","utmerked","gjenspeiled","henvended","lokked","sukked","utsteded","innehad","utbetaled","rangered","avbryted","evaluered","jaged","hived","sprekked","døped","omsetted","sortered","slÃ¥ssd","karakterisered","fremføred","runded","bemerked","underlegged","korrespondered","verdsetted","konvertered","formulered","forfølged","utbred","disponered","avansered","strammed","implementered","opparbeided","kyssed","korrigered","blomstred","innvilged","ofred","knekked","filed","mated","forsinked","forened","reservered","spenned","tilsended","transportered","vanned","staved","belasted","forenkled","skreddersyd","etterlysed","skylded","spÃ¥d","dytted","timed","roted","nedlegged","detted","kvitted","innreded","korted","motsetted","lindred","bremsed","frelsed","fored","gjenkjenned","oppheved","sniked","talled","absorbered","lekked","dobled","distribuered","synliggjøred","feiled","forsyned","bearbeided","ignorered","unned","forkynned","trÃ¥kked","assosiered","tilegned","utvised","nedsetted","diagnostisered","framstÃ¥d","heied","planed","anged","evned","herjed","sklid","misforstÃ¥d","forbeholded","begeistred","avsetted","fyred","osed","kompensered","overstiged","tilsed","oppkalled","kryped","bretted","bevilged","skildred","forvandled","minsked","rømmed","klassifisered","anlegged","lyved","sprenged","overnatted","innfrid","spørresd","makted","forverred","tured","stelled","klargjøred","arved","hemmed","ledesd","skylled","nøyed","pumped","tillegged","hylled","tilled","behersked","skjerped","berømmed","verned","forankred","lufted","svelged","innkalled","kunngjøred","luked","opphøred","headed","veksled","fratad","supplered","innlemmed","trilled","lenked","bored","avlysed","sponsed","drifted","medvirked","motvirked","ferdigstilled","grensed","spretted","gjested","regissered","protestered","anklaged","gjetted","etterspørred","duked","stempled","koordinered","avtad","oppnevned","omkommed","overholded","printed","misbruked","forlanged","dedikered","rosed","unnskylded","utdeled","sÃ¥red","sertifisered","oppløsed","provosered","forvirred","øsed","begraved","overgÃ¥d","pÃ¥tad","helbreded","stirred","erobred","spekulered","skilted","mobbed","rusted","nikked","grued","bommed","innlegged","utpeked","surfed","krangled","tilgid","utdyped","sammensetted","hakked","fremkommed","streved","igangsetted","hersked","brekked","bristed","byded","draged","flyged","fnysed","fyked","glipped","grined","gysed","gyted","gyved","hogged","hugged","klinged","klyped","klyved","kniped","kommed","kveded","kvekked","kvepped","lated","lyged","lyved","nysed","piped","rided","setted","skited","skjelved","skrided","skrived","skvetted","slipped","smyged","snyted","spinned","strided","suped","sverged","sverjed","ljuged","sviked","svinned","slepped","tigged","viked","kunngjort"],{getWords:c}=r.languageProcessing,{precedenceException:x,values:w}=r.languageProcessing,{Clause:S}=w,P=["bli","blir","ble ","blei","blitt","bli","blivende","blis","er"],{createRegexFromArray:R,getClauses:C}=r.languageProcessing,E={Clause:class extends S{constructor(e,t){super(e,t),this._participles=function(e){const t=c(e),r=[];return(0,m.forEach)(t,(function(e){(0,m.includes)(j,e)&&r.push(e)})),r}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const e=this.getClauseText(),t=this.getParticiples().filter((t=>!x(e,t,a)));this.setPassive(t.length>0)}},stopwords:g,auxiliaries:P,regexes:{auxiliaryRegex:R(P),stopwordRegex:R(g),stopCharacterRegex:/([:,])(?=[ \n\r\t'"+\-»«‹›<>])/gi}};function O(e){return C(e,E)}const{AbstractResearcher:T}=r.languageProcessing;class W extends T{constructor(e){super(e),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"nb",passiveConstructionType:"periphrastic",functionWords:o,firstWordExceptions:d,transitionWords:n,twoPartTransitionWords:p,stopWords:g}),Object.assign(this.helpers,{getStemmer:h,getClauses:O})}}(window.yoast=window.yoast||{}).Researcher=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/nl.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/nl.js new file mode 100644 index 00000000..8d71f909 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/nl.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={d:(r,n)=>{for(var t in n)e.o(n,t)&&!e.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:n[t]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};e.r(r),e.d(r,{default:()=>Ze});const n=window.yoast.analysis,t=["de","het","een","één","eén","twee","drie","vier","vijf","zes","zeven","acht","negen","tien","dit","dat","die","deze"],o=["aangezien","al","aldus","allereerst","als","alsook","anderzijds","bijgevolg","bijvoorbeeld","bovendien","concluderend","daardoor","daarentegen","daarmee","daarna","daarnaast","daarom","daartoe","daarvoor","dadelijk","dan","desondanks","dienovereenkomstig","dientegevolge","doch","doordat","dus","echter","eerst","evenals","eveneens","evenzeer","hierom","hoewel","immers","indien","integendeel","intussen","kortom","later","maar","mits","nadat","namelijk","net als","niettemin","noch","ofschoon","omdat","ondanks","ondertussen","ook","opdat","resumerend","samengevat","samenvattend","tegenwoordig","teneinde","tenzij","terwijl","tevens","toch","toen","uiteindelijk","vanwege","vervolgens","voorafgaand","vooralsnog","voordat","voorts","vroeger","waardoor","waarmee","waaronder","wanneer","want","zoals","zodat","zodoende","zodra"],d=o.concat(["aan de andere kant","aan de ene kant","aangenomen dat","al met al","alles afwegend","alles bij elkaar","alles in aanmerking nemend","als gevolg van","anders gezegd","daar staat tegenover","daarbij komt","daaruit volgt","dat betekent","dat blijkt uit","de oorzaak daarvan is","de oorzaak hiervan is","door middel van","een voorbeeld hiervan","een voorbeeld van","gesteld dat","hetzelfde als","hieruit kunnen we afleiden","hieruit volgt","hoe het ook zij","in de derde plaats","in de eerste plaats","in de tweede plaats","in één woord","in het bijzonder","in het geval dat","in plaats van","in tegenstelling tot","in vergelijking met","maar ook","met als doel","met andere woorden","met behulp van","met de bedoeling","neem nou","net als","om kort te gaan","onder andere","op dezelfde wijze","stel dat","te danken aan","te wijten aan","ten derde","ten eerste","ten gevolge van","ten slotte","ten tweede","ter conclusie","ter illustratie","ter verduidelijking","tot nog toe","tot slot","vandaar dat","vergeleken met","voor het geval dat"]);function a(e){let r=e;return e.forEach((n=>{(n=n.split("-")).length>0&&n.filter((r=>!e.includes(r))).length>0&&(r=r.concat(n))})),r}const l=["de","het","een","der","des","den"],s=["eén","één","twee","drie","vier","vijf","zes","zeven","acht","negen","tien","elf","twaalf","dertien","veertien","vijftien","zestien","zeventien","achttien","negentien","twintig","honderd","honderden","duizend","duizenden","miljoen","miljoenen","biljoen","biljoenen"],i=["eerste","tweede","derde","vierde","vijfde","zesde","zevende","achtste","negende","tiende","elfde","twaalfde","dertiende","veertiende","vijftiende","zestiende","zeventiende","achttiende","negentiende","twinstigste"],g=["ik","je","jij","hij","ze","we","wij","jullie","zij","u","ge","gij","men"],b=["mij","jou","hem","haar","hen","hun","uw"],v=["dit","dat","deze","die","zelf"],u=["mijn","mijne","jouw","jouwe","zijne","hare","ons","onze","hunne","uwe","elkaars","elkanders"],c=["alle","sommige","sommigen","weinig","weinige","weinigen","veel","vele","velen","geen","beetje","elke","elk","genoeg","meer","meest","meeste","meesten","paar","zoveel","enkele","enkelen","zoveelste","hoeveelste","laatste","laatsten","iedere","allemaal","zekere","ander","andere","gene","enig","enige","verscheidene","verschillende","voldoende","allerlei","allerhande","enerlei","enerhande","beiderlei","beiderhande","tweeërlei","tweeërhande","drieërlei","drieërhande","velerlei","velerhande","menigerlei","menigerhande","enigerlei","enigerhande","generlei","generhande"],h=["mezelf","mijzelf","jezelf","jouzelf","zichzelf","haarzelf","hemzelf","onszelf","julliezelf","henzelf","hunzelf","uzelf","zich"],m=["mekaar","elkaar","elkander","mekander"],w=["iedereen","ieder","eenieder","alleman","allen","alles","iemand","niemand","iets","niets","menigeen"],k=["ieders","aller","iedereens","eenieders"],p=["welke","welk","wat","wie","wiens","wier"],f=["hoe","waarom","waar","hoezo","hoeveel"],y=["daaraan","daarachter","daaraf","daarbij","daarbinnen","daarboven","daarbuiten","daardoorheen","daarheen","daarin","daarjegens","daarmede","daarnaar","daarnaartoe","daaromtrent","daaronder","daarop","daarover","daaroverheen","daarrond","daartegen","daartussen","daartussenuit","daaruit","daarvan","daarvandaan","eraan","erachter","erachteraan","eraf","erbij","erbinnen","erboven","erbuiten","erdoor","erdoorheen","erheen","erin","erjegens","ermede","ermee","erna","ernaar","ernaartoe","ernaast","erom","eromtrent","eronder","eronderdoor","erop","eropaf","eropuit","erover","eroverheen","errond","ertegen","ertegenaan","ertoe","ertussen","ertussenuit","eruit","ervan","ervandaan","ervandoor","ervoor","hieraan","hierachter","hieraf","hierbij","hierbinnen","hierboven","hierbuiten","hierdoor","hierdoorheen","hierheen","hierin","hierjegens","hierlangs","hiermede","hiermee","hierna","hiernaar","hiernaartoe","hiernaast","hieromheen","hieromtrent","hieronder","hierop","hierover","hieroverheen","hierrond","hiertegen","hiertoe","hiertussen","hiertussenuit","hieruit","hiervan","hiervandaan","hiervoor","vandaan","waaraan","waarachter","waaraf","waarbij","waarboven","waarbuiten","waardoorheen","waarheen","waarin","waarjegens","waarmede","waarna","waarnaar","waarnaartoe","waarnaast","waarop","waarover","waaroverheen","waarrond","waartegen","waartegenin","waartoe","waartussen","waartussenuit","waaruit","waarvan","waarvandaan","waarvoor"],j=["daar","hier","ginder","daarginds","ginds","ver","veraf","ergens","nergens","overal","dichtbij","kortbij"],z=["word","wordt","werd","werden","ben","bent","is","was","waren"],x=["worden","zijn"],S=["heb","hebt","heeft","hadden","had","kun","kan","kunt","kon","konden","mag","mocht","mochten","dien","dient","diende","dienden","moet","moest","moesten","ga","gaat","ging","gingen"],P=["hebben","kunnen","mogen","dienen","moeten","gaan"],E=["blijkt","blijk","bleek","bleken","gebleken","dunkt","dunk","dunkte","dunkten","gedunkt","heet","heette","heetten","geheten","lijkt","lijk","geleken","leek","leken","schijn","schijnt","scheen","schenen","toescheen","toeschijnt","toeschijn","toeschenen"],F=["blijken","dunken","heten","lijken","schijnen","toeschijnen"],B=["à","aan","aangaande","achter","behalve","behoudens","beneden","benevens","benoorden","benoordoosten","benoordwesten","beoosten","betreffende","bewesten","bezijden","bezuiden","bezuidoosten","bezuidwesten","bij","binnen","blijkens","boven","bovenaan","buiten","circa","conform","contra","cum","dankzij","door","gedurende","gezien","in","ingevolge","inzake","jegens","krachtens","langs","luidens","met","middels","na","naar","naast","nabij","namens","nevens","niettegenstaande","nopens","om","omstreeks","omtrent","onder","onderaan","ongeacht","onverminderd","op","over","overeenkomstig","per","plus","post","richting","rond","rondom","spijts","staande","te","tegen","tegenover","ten","ter","tijdens","tot","tussen","uit","van","vanaf","vanuit","versus","via","vis-à-vis","volgens","voor","voorbij","wegens","zijdens","zonder"],M=["af","heen","mee","toe","achterop","onderin","voorin","bovenop","buitenop","achteraan","onderop","binnenin","tevoren"],W=["en","alsmede","of","ofwel","en/of"],O=["zowel","evenmin","zomin","hetzij"],T=["vermits","dewijl","dorodien","naardien","nademaal","overmits","wijl","eer","eerdat","aleer","vooraleer","alvorens","totdat","zolang","sinds","sedert","ingeval","tenware","alhoewel","hoezeer","uitgezonderd","zoverre","zover","naargelang","naarmate","alsof"],I=["zegt","zei","vraagt","vroeg","denkt","dacht","stelt","pleit","pleitte"],V=["zeer","erg","redelijk","flink","tikkeltje","bijzonder","ernstig","enigszins","zo","tamelijk","nogal","behoorlijk","zwaar","heel","hele","reuze","buitengewoon","ontzettend","vreselijk"],A=["laat","liet","lieten","kom","komt","kwam","kwamen","maakt","maak","maakte","maakten","doe","doet","deed","deden","vindt","vind","vond","vonden"],D=["laten","komen","maken","doen","vinden"],C=["nieuw","nieuwe","nieuwer","nieuwere","nieuwst","nieuwste","oud","oude","ouder","oudere","oudst","oudste","vorig","vorige","goed","goede","beter","betere","best","beste","groot","grote","groter","grotere","grootst","grootste","makkelijk","makkelijke","makkelijker","makkelijkere","makkelijkst","makkelijste","gemakkelijk","gemakkelijke","gemakkelijker","gemakkelijkere","gemakkelijkst","gemakkelijste","simpel","simpele","simpeler","simpelere","simpelst","simpelste","snel","snelle","sneller","snellere","snelst","snelste","verre","verder","verdere","verst","verste","lang","lange","langer","langere","langst","langste","hard","harde","harder","hardere","hardst","hardste","minder","mindere","minst","minste","eigen","laag","lage","lager","lagere","laagst","laagste","hoog","hoge","hoger","hogere","hoogst","hoogste","klein","kleine","kleiner","kleinere","kleinst","kleinste","kort","korte","korter","kortere","kortst","kortste","herhaaldelijke","directe","ongeveer","slecht","slechte","slechter","slechtere","slechtst","slechtste","zulke","zulk","zo'n","zulks","er","extreem","extreme","bijbehorende","bijbehorend","niet"],R=["oh","wauw","hèhè","hè","hé","au","ai","jaja","welja","jawel","ssst","heremijntijd","hemeltjelief","aha","foei","hmm","nou","nee","tja","nja","okido","ho","halt","komaan","komop","verrek","nietwaar","brr","oef","ach","och","bah","enfin","afijn","haha","hihi","hatsjie","hatsjoe","hm","tring","vroem","boem","hopla"],N=["ml","cl","dl","l","tl","el","mg","g","gr","kg","ca","theel","min","sec","uur"],L=["seconde","secondes","seconden","minuut","minuten","uur","uren","dag","dagen","week","weken","maand","maanden","jaar","jaren","vandaag","morgen","overmorgen","gisteren","eergisteren","'s","morgens","avonds","middags","nachts"],H=["ding","dingen","manier","manieren","item","items","keer","maal","procent","geval","aspect","persoon","personen","deel"],$=["wel","ja","neen","oké","oke","okee","ok","zoiets","€","euro"],q=(a([].concat(x,P,F,D)),a([].concat(i,C)),a([].concat(l,B,W,v,V,c)),a([].concat(o,g,b,h,R,s,z,S,E,I,A,w,O,T,f,p,j,$,M,y,N,L,H,m,u)),a([].concat(l,f,s,u,h,k,E,F,B))),_=a([].concat(l,s,i,v,u,h,m,g,b,c,w,k,p,f,y,j,M,z,x,S,P,E,F,B,W,O,T,I,o,["absoluut","zeker","ongetwijfeld","sowieso","onmiddelijk","meteen","inclusief","direct","ogenblikkelijk","terstond","natuurlijk","vanzelfsprekend","gewoonlijk","normaliter","doorgaans","werkelijk","daadwerkelijk","inderdaad","waarachtig","oprecht","bijna","meestal","misschien","waarschijnlijk","wellicht","mogelijk","vermoedelijk","allicht","aannemelijk","oorspronkelijk","aanvankelijk","initieel","eigenlijk","feitelijk","wezenlijk","juist","reeds","alvast","bijv.","vaak","dikwijls","veelal","geregeld","menigmaal","regelmatig","veelvuldig","eenvoudigweg","simpelweg","louter","kortweg","stomweg","domweg","zomaar","eventueel","mogelijkerwijs","eens","weleens","nooit","ooit","anders","momenteel","thans","incidenteel","trouwens","elders","volgend","recent","onlangs","recentelijk","laatst","zojuist","relatief","duidelijk","overduidelijk","klaarblijkelijk","nadrukkelijk","ogenschijnlijk","kennelijk","schijnbaar","alweer","continu","herhaaldelijk","nog","steeds","nu"],V,A,D,R,C,N,H,$,L,["mevr","dhr","mr","dr","prof"],["jr","sr"])),G=["alhoewel","als","dan","doordat","hoewel","hoezeer","indien","mits","naargelang","naarmate","nadat","ofschoon","omdat","opdat","tenzij","toen","voordat","voorzover","wanneer","zoals","zodat","zodra","zolang","wie","wiens","wier","welke","welk"],J=[["aan de ene kant","aan de andere kant"],["enerzijds","anderzijds"],["natuurlijk","maar"],["niet alleen","maar ook"],["noch","noch"],["zowel","als"]],U=JSON.parse('{"vowels":"aáäâeéëêiíïîoóöôuúüûy","deviations":{"vowels":[{"fragments":["ue$","dge$","[tcp]iënt","ace$","[br]each","[ainpr]tiaal","[io]tiaan","gua[yc]","[^i]deal","tive$","load","[^e]coke","[^s]core$"],"countModifier":-1},{"fragments":["aä","aeu","aie","ao","ë","eo","eú","ieau","ea$","ea[^u]","ei[ej]","eu[iu]","ï","iei","ienne","[^l]ieu[^w]","[^l]ieu$","i[auiy]","stion","[^cstx]io","^sion","riè","oö","oa","oeing","oie","[eu]ü","[^q]u[aeèo]","uie","[bhnpr]ieel","[bhnpr]iël"],"countModifier":1},{"fragments":["[aeolu]y[aeéèoóu]"],"countModifier":1}],"words":{"full":[{"word":"bye","syllables":1},{"word":"core","syllables":1},{"word":"cure","syllables":1},{"word":"dei","syllables":2},{"word":"dope","syllables":1},{"word":"dude","syllables":1},{"word":"fake","syllables":1},{"word":"fame","syllables":1},{"word":"five","syllables":1},{"word":"hole","syllables":1},{"word":"least","syllables":1},{"word":"lone","syllables":1},{"word":"minute","syllables":2},{"word":"move","syllables":1},{"word":"nice","syllables":1},{"word":"one","syllables":1},{"word":"state","syllables":1},{"word":"surplace","syllables":2},{"word":"take","syllables":1},{"word":"trade","syllables":1},{"word":"wide","syllables":1}],"fragments":{"global":[{"word":"adieu","syllables":2},{"word":"airline","syllables":2},{"word":"airmiles","syllables":2},{"word":"alien","syllables":3},{"word":"ambient","syllables":3},{"word":"announcement","syllables":3},{"word":"appearance","syllables":3},{"word":"appeasement","syllables":3},{"word":"atheneum","syllables":4},{"word":"awesome","syllables":2},{"word":"baccalaurei","syllables":5},{"word":"baccalaureus","syllables":5},{"word":"baseball","syllables":3},{"word":"basejump","syllables":2},{"word":"banlieue","syllables":3},{"word":"bapao","syllables":2},{"word":"barbecue","syllables":3},{"word":"beamer","syllables":2},{"word":"beanie","syllables":2},{"word":"beat","syllables":1},{"word":"belle","syllables":2},{"word":"bête","syllables":1},{"word":"bingewatch","syllables":2},{"word":"blocnote","syllables":2},{"word":"blue","syllables":1},{"word":"board","syllables":1},{"word":"break","syllables":1},{"word":"broad","syllables":1},{"word":"bulls-eye","syllables":2},{"word":"business","syllables":2},{"word":"byebye","syllables":2},{"word":"cacao","syllables":2},{"word":"caesar","syllables":2},{"word":"camaieu","syllables":3},{"word":"caoutchouc","syllables":2},{"word":"carbolineum","syllables":5},{"word":"catchphrase","syllables":1},{"word":"carrier","syllables":3},{"word":"cheat","syllables":1},{"word":"cheese","syllables":1},{"word":"circonflexe","syllables":3},{"word":"clean","syllables":1},{"word":"cloak","syllables":1},{"word":"cobuying","syllables":3},{"word":"comeback","syllables":2},{"word":"comfortzone","syllables":3},{"word":"communiqué","syllables":4},{"word":"conopeum","syllables":4},{"word":"console","syllables":2},{"word":"corporate","syllables":3},{"word":"coûte","syllables":1},{"word":"creamer","syllables":2},{"word":"crime","syllables":1},{"word":"cruesli","syllables":2},{"word":"deadline","syllables":2},{"word":"deautoriseren","syllables":6},{"word":"deuce","syllables":1},{"word":"deum","syllables":2},{"word":"dirndl","syllables":2},{"word":"dread","syllables":2},{"word":"dreamteam","syllables":2},{"word":"drone","syllables":1},{"word":"enquête","syllables":3},{"word":"escape","syllables":2},{"word":"exposure","syllables":3},{"word":"extranei","syllables":4},{"word":"extraneus","syllables":4},{"word":"eyecatcher","syllables":3},{"word":"eyeliner","syllables":3},{"word":"eyeopener","syllables":4},{"word":"eyetracker","syllables":3},{"word":"eyetracking","syllables":3},{"word":"fairtrade","syllables":2},{"word":"fauteuil","syllables":2},{"word":"feature","syllables":2},{"word":"feuilletee","syllables":3},{"word":"feuilleton","syllables":3},{"word":"fisheye","syllables":2},{"word":"fineliner","syllables":3},{"word":"finetunen","syllables":3},{"word":"forehand","syllables":2},{"word":"freak","syllables":1},{"word":"fusioneren","syllables":4},{"word":"gayparade","syllables":3},{"word":"gaypride","syllables":2},{"word":"goal","syllables":1},{"word":"grapefruit","syllables":2},{"word":"gruyère","syllables":3},{"word":"guele","syllables":1},{"word":"guerrilla","syllables":3},{"word":"guest","syllables":1},{"word":"hardware","syllables":2},{"word":"haute","syllables":1},{"word":"healing","syllables":2},{"word":"heater","syllables":2},{"word":"heavy","syllables":2},{"word":"hoax","syllables":1},{"word":"hotline","syllables":2},{"word":"idee-fixe","syllables":3},{"word":"inclusive","syllables":3},{"word":"inline","syllables":2},{"word":"intake","syllables":2},{"word":"intensive","syllables":3},{"word":"jeans","syllables":1},{"word":"Jones","syllables":1},{"word":"jubileum","syllables":4},{"word":"kalfsribeye","syllables":3},{"word":"kraaiennest","syllables":3},{"word":"lastminute","syllables":3},{"word":"learning","syllables":2},{"word":"league","syllables":1},{"word":"line-up","syllables":2},{"word":"linoleum","syllables":4},{"word":"load","syllables":1},{"word":"loafer","syllables":2},{"word":"longread","syllables":2},{"word":"lookalike","syllables":3},{"word":"louis","syllables":3},{"word":"lyceum","syllables":3},{"word":"magazine","syllables":3},{"word":"mainstream","syllables":2},{"word":"make-over","syllables":3},{"word":"make-up","syllables":2},{"word":"malware","syllables":2},{"word":"marmoleum","syllables":4},{"word":"mausoleum","syllables":4},{"word":"medeauteur","syllables":4},{"word":"midlifecrisis","syllables":4},{"word":"migraineaura","syllables":5},{"word":"milkshake","syllables":2},{"word":"millefeuille","syllables":4},{"word":"mixed","syllables":1},{"word":"muesli","syllables":2},{"word":"museum","syllables":3},{"word":"must-have","syllables":2},{"word":"must-read","syllables":2},{"word":"notebook","syllables":2},{"word":"nonsense","syllables":2},{"word":"nowhere","syllables":2},{"word":"nurture","syllables":2},{"word":"offline","syllables":2},{"word":"oneliner","syllables":3},{"word":"onesie","syllables":2},{"word":"online","syllables":2},{"word":"opinion","syllables":3},{"word":"paella","syllables":3},{"word":"pacemaker","syllables":3},{"word":"panache","syllables":2},{"word":"papegaaienneus","syllables":5},{"word":"passe-partout","syllables":3},{"word":"peanuts","syllables":2},{"word":"perigeum","syllables":4},{"word":"perineum","syllables":4},{"word":"perpetuum","syllables":4},{"word":"petroleum","syllables":4},{"word":"phone","syllables":3},{"word":"picture","syllables":2},{"word":"placemat","syllables":2},{"word":"porte-manteau","syllables":3},{"word":"portefeuille","syllables":4},{"word":"presse-papier","syllables":3},{"word":"primetime","syllables":2},{"word":"queen","syllables":1},{"word":"questionnaire","syllables":3},{"word":"queue","syllables":1},{"word":"reader","syllables":2},{"word":"reality","syllables":3},{"word":"reallife","syllables":2},{"word":"remake","syllables":2},{"word":"repeat","syllables":2},{"word":"repertoire","syllables":3},{"word":"research","syllables":2},{"word":"reverence","syllables":3},{"word":"ribeye","syllables":2},{"word":"ringtone","syllables":3},{"word":"road","syllables":1},{"word":"roaming","syllables":2},{"word":"sciencefiction","syllables":4},{"word":"selfmade","syllables":2},{"word":"sidekick","syllables":2},{"word":"sightseeing","syllables":3},{"word":"skyline","syllables":2},{"word":"smile","syllables":1},{"word":"sneaky","syllables":2},{"word":"software","syllables":2},{"word":"sparerib","syllables":2},{"word":"speaker","syllables":2},{"word":"spread","syllables":1},{"word":"statement","syllables":2},{"word":"steak","syllables":1},{"word":"steeplechase","syllables":3},{"word":"stonewash","syllables":2},{"word":"store","syllables":1},{"word":"streaken","syllables":2},{"word":"stream","syllables":1},{"word":"streetware","syllables":1},{"word":"supersoaker","syllables":4},{"word":"surprise-party","syllables":4},{"word":"sweater","syllables":2},{"word":"teaser","syllables":2},{"word":"tenue","syllables":2},{"word":"template","syllables":2},{"word":"timeline","syllables":2},{"word":"tissue","syllables":2},{"word":"toast","syllables":1},{"word":"tête-à-tête","syllables":3},{"word":"typecast","syllables":2},{"word":"unique","syllables":2},{"word":"ureum","syllables":3},{"word":"vibe","syllables":1},{"word":"vieux","syllables":1},{"word":"ville","syllables":1},{"word":"vintage","syllables":2},{"word":"wandelyup","syllables":3},{"word":"wiseguy","syllables":2},{"word":"wake-up-call","syllables":3},{"word":"webcare","syllables":2},{"word":"winegum","syllables":2},{"word":"base","syllables":1,"notFollowedBy":["e","n","r"]},{"word":"game","syllables":1,"notFollowedBy":["n","l","r"]},{"word":"style","syllables":1,"notFollowedBy":["n","s"]},{"word":"douche","syllables":1,"notFollowedBy":["n","s"]},{"word":"space","syllables":1,"notFollowedBy":["n","s"]},{"word":"striptease","syllables":2,"notFollowedBy":["n","s"]},{"word":"jive","syllables":1,"notFollowedBy":["n","r"]},{"word":"keynote","syllables":2,"notFollowedBy":["n","r"]},{"word":"mountainbike","syllables":3,"notFollowedBy":["n","r"]},{"word":"face","syllables":1,"notFollowedBy":["n","t"]},{"word":"challenge","syllables":2,"notFollowedBy":["n","r","s"]},{"word":"cruise","syllables":1,"notFollowedBy":["n","r","s"]},{"word":"house","syllables":1,"notFollowedBy":["n","r","s"]},{"word":"dance","syllables":1,"notFollowedBy":["n","r","s"]},{"word":"franchise","syllables":2,"notFollowedBy":["n","r","s"]},{"word":"freelance","syllables":2,"notFollowedBy":["n","r","s"]},{"word":"lease","syllables":1,"notFollowedBy":["n","r","s"]},{"word":"linedance","syllables":2,"notFollowedBy":["n","r","s"]},{"word":"lounge","syllables":1,"notFollowedBy":["n","r","s"]},{"word":"merchandise","syllables":3,"notFollowedBy":["n","r","s"]},{"word":"performance","syllables":3,"notFollowedBy":["n","r","s"]},{"word":"release","syllables":2,"notFollowedBy":["n","r","s"]},{"word":"resource","syllables":2,"notFollowedBy":["n","r","s"]},{"word":"cache","syllables":1,"notFollowedBy":["c","l","n","t","x"]},{"word":"office","syllables":2,"notFollowedBy":["r","s"]},{"word":"close","syllables":1,"notFollowedBy":["r","t"]}],"atBeginningOrEnd":[{"word":"byte","syllables":1},{"word":"cake","syllables":1},{"word":"care","syllables":1},{"word":"coach","syllables":1},{"word":"coat","syllables":1},{"word":"earl","syllables":1},{"word":"foam","syllables":1},{"word":"gate","syllables":1},{"word":"head","syllables":1},{"word":"home","syllables":1},{"word":"live","syllables":1},{"word":"safe","syllables":1},{"word":"site","syllables":1},{"word":"soap","syllables":1},{"word":"teak","syllables":1},{"word":"team","syllables":1},{"word":"wave","syllables":1},{"word":"brace","syllables":1,"notFollowedBy":["s"]},{"word":"case","syllables":1,"notFollowedBy":["s"]},{"word":"fleece","syllables":1,"notFollowedBy":["s"]},{"word":"service","syllables":2,"notFollowedBy":["s"]},{"word":"voice","syllables":1,"notFollowedBy":["s"]},{"word":"kite","syllables":1,"notFollowedBy":["n","r"]},{"word":"skate","syllables":1,"notFollowedBy":["n","r"]},{"word":"race","syllables":1,"notFollowedBy":["n","r","s"]}],"atBeginning":[{"word":"coke","syllables":1},{"word":"deal","syllables":1},{"word":"image","syllables":2,"notFollowedBy":["s"]}],"atEnd":[{"word":"force","syllables":1},{"word":"tea","syllables":1},{"word":"time","syllables":1},{"word":"date","syllables":1,"alsoFollowedBy":["s"]},{"word":"hype","syllables":1,"alsoFollowedBy":["s"]},{"word":"quote","syllables":1,"alsoFollowedBy":["s"]},{"word":"tape","syllables":1,"alsoFollowedBy":["s"]},{"word":"upgrade","syllables":2,"alsoFollowedBy":["s"]}]}}}}'),Y={productPages:{parameters:{recommendedMinimum:3,recommendedMaximum:6,acceptableMaximum:7,acceptableMinimum:1}}},K=window.lodash,Q=["gebraad","gemoed","gebed","gebied","gebod","gebodsbord","geboorte-eiland","geboortestad","gebruikspaard","gedachtewereld","gedenkblad","gedenknaald","gedichtenwedstrijd","gedoogakkoord","gedoogbeleid","geduld","geestenwereld","geesteskind","geestestoestand","geesteswereld","gehandicaptenbeleid","gehoorafstand","gehoorsafstand","geitenbaard","geitenhuid","geld","geldhond","geldvoorraad","geleidehond","gelijkekansenbeleid","geloofsdaad","geloofsinhoud","geluidswand","gelukskind","gemeenschapsraad","gemeentebeleid","gemeenteraad","gemeenteraadslid","gemoedstoestand","genadeverbond","genderbeleid","geneesmiddelenbeleid","generaalsbewind","geslachtsdaad","gespreksavond","gespreksflard","getijdengebied","gevangenisbeleid","gevangeniswereld","gevechtsafstand","gevelwand","gevoelstoestand","gevoelswereld","gewelddaad","geweldigaard","geweldverbod","gezelschapshond","gezichtsafstand","gezichtshuid","gezinsbeleid","gezinsbond","gezinshoofd","gezinslid","gezinspaard","gezinstoestand","gezondheidsbeleid","gezondheidstoestand","gezondheidszorgbeleid","gecentreerd","geserreerd","gepolitoerd","gebocheld","gebrild","gegleufd","gekarteld","gemeubeld","gesausd","geaccidenteerd","geaccrediteerd","geacheveerd","geaderd","geaggregeerd","geagiteerd","geallieerd","geanimeerd","geanticipeerd","gearticuleerd","geassorteerd","gebenedijd","gebiedend","geblaseerd","geblindeerd","geborneerd","gebronzeerd","gebrouilleerd","gebruind","gecharmeerd","gechromeerd","geciviliseerd","geclausuleerd","gecoiffeerd","geconditioneerd","geconstipeerd","gecontinueerd","gecoöpteerd","gecrispeerd","gecultiveerd","gedecideerd","gedecolleteerd","gedegouteerd","gedemilitariseerd","gedemodeerd","gedesillusioneerd","gedesinteresseerd","gedetailleerd","gediplomeerd","gedisciplineerd","gedisponeerd","gedistingeerd","gedomicilieerd","gedoteerd","gedupeerd","geëigend","geestdodend","geestverruimend","geëxalteerd","geëxponeerd","gefigureerd","gefingeerd","geflatteerd","geforceerd","gefumeerd","gegeerd","gegeneerd","gegradueerd","gegriepeerd","gehaaid","gehandschoend","gehavend","gehomologeerd","gehorend","geïllustreerd","geïmponeerd","geïmproviseerd","geïncrimineerd","geïrriteerd","geklasseerd","gekmakend","gekuifd","gekwalificeerd","gelardeerd","geldend","geldverslindend","geleed","geleidend","gelieerd","geliefkoosd","gelijkluidend","gelinieerd","geluiddempend","geluidswerend","geluidwerend","gemarineerd","gematteerd","gemiddeld","geoccupeerd","geoutilleerd","geparaffineerd","geparfumeerd","gepatenteerd","gepermitteerd","geplafonneerd","geplisseerd","gepredisponeerd","geprefabriceerd","gepreoccupeerd","geproportioneerd","geraffineerd","gerandomiseerd","gereformeerd","gereglementeerd","geresigneerd","geresponsabiliseerd","gerimpeld","geringschattend","geruchtmakend","geruststellend","gesatureerd","gesauteerd","geschakeerd","gesepareerd","geseponeerd","gesofisticeerd","gesoigneerd","gespeend","gespikkeld","gestresseerd","geurenblind","gevergeerd","geverseerd","gezaghebbend","gezagsondermijnend","gezichtsbepalend","gezinsvervangend","gezwind","geit","gedragstherapeut","geveltoerist","gezant","gerant","gerst","gerstenat","geut","gebarenkunst","gebedsbijeenkomst","gebekvecht","gebiedsagent","gebit","geboorterecht","gebruikersovereenkomst","gebruiksrecht","gebruiksvoorschrift","gedragsvoorschrift","geest","geestdrift","geesteskracht","geestesproduct","geestkracht","gefluit","gehandicaptensport","geheimhoudingsplicht","geheimschrift","geheugenkunst","gehoorapparaat","geitenteelt","gekloot","geldautomaat","geldingskracht","geldingszucht","geldkist","geldmarkt","geldmarkttekort","geldpot","geldsoort","geldtekort","geldtransport","gelduitgifteautomaat","geldzucht","gelegenheidsargument","geloofsgenoot","geluidseffect","geluidsoverlast","geluidspoort","gemaksproduct","gemakzucht","gemberpot","gemeenschapsrecht","gemeenteadvocaat","gemeenteraadsbesluit","gemeenterecht","gemeentewet","gemeentewiet","gemoedsrust","geneeskracht","geneeskundestudent","geneeskunst","geneesmiddelenfabrikant","geneesmiddelenmarkt","generatieconflict","generatiegenoot","generatiepact","generatiestudent","genetkat","genocidewet","genot","genotsproduct","genotzucht","gent","geodeet","geologiedocent","gereedschapskist","gerucht","geruchtencircuit","geschiedenisdocent","geschiedenisstudent","geschiet","geschrift","gespreksgenoot","gesprekspunt","getijdenkracht","gevangenispoort","gevecht","gevechtskracht","gevechtssport","gevellijst","gevelornament","gewest","gewetensangst","gewetensconflict","gewicht","gewinzucht","gewondentransport","gewoonterecht","gewricht","gezagsapparaat","gezinsbudget","gezinsrapport","gezondheidseffect","gezondheidsklacht","gezondheidsproduct","gezondheidsrecht","gezondheidswet","gezondheidswinst","gerokt","gevlekt","gebuikt","gesaust","gebiedsgericht","geel-zwart","gehandicapt","gereformeerd-vrijgemaakt","gestuikt","geëtst","bed","bediendevakbond","bedrijfsbeleid","bedrijfsblad","bedrijfspand","bedrijfswereld","bedrijvenbond","beekdonderpad","beeld","beginselakkoord","begintoestand","begripsinhoud","begrotingsakkoord","begrotingsbeleid","behandelaanbod","beheerraad","beheersgebied","behoud","beiaard","bejaardenbeleid","bekerwedstrijd","belastinggebied","belastinggeld","belastingschuld","beleggingsbeleid","beleggingspand","beleid","beleidsdaad","beleidsgebied","belevingswereld","belplafond","beltegoed","bemanningslid","Bemiddelingsraad","bendehoofd","bendelid","benedenstad","benefietwedstrijd","benoemingenbeleid","benuttingsgraad","berberpaard","beregeningsverbod","bergeend","berggebied","bergland","bergpaard","bergpad","bergwand","beroepsarbeid","beroepsverbod","beroepswereld","beschermingsbeleid","beschermingsgebied","beslissingswedstrijd","besparingsbeleid","bestand","bestandsakkoord","besteleend","besturenbond","bestuursakkoord","bestuursbeleid","bestuurshoofd","bestuurslid","beukenblad","beursmaand","beursrecord","beurswaakhond","beurswereld","beveiligingsbeleid","bevolkingsbeleid","bewind","bewustzijnsinhoud","bewustzijnstoestand","bezuinigingsbeleid","beenhard","bebrild","beangstigend","bebaard","bedeesd","bederfwerend","bedreigend","bedrijvend","bedroevend","beduidend","beduusd","bedwelmend","beeldbepalend","beeldend","beeldvormend","beeldvullend","begeleidend","begerenswaard","begrijpend","behartenswaard","behartigenswaard","behoudend","bejaard","beklagenswaard","beklemmend","belanghebbend","belangstellend","belangwekkend","belastingbesparend","belastingbetalend","beledigend","beleerd","beleidsadviserend","belendend","belerend","bemoedigend","benauwend","benijdenswaard","bepalend","beperkend","beregoed","berekenend","beroemd","beroepsblind","beschaamd","beschamend","beschouwend","beschrijvend","besdragend","beslissend","bestaand","bestverkopend","beteuterd","betoverend","betraand","betreffend","betreurenswaard","bevelend","bevelhebbend","bevestigend","bevoegd","bevredigend","bevreemdend","bevriend","bewonderenswaard","bewustzijnsverruimend","bezwarend","beest","berggeit","betaalkracht","beerput","bergamot","beschuit","beademingsapparaat","beddenfabrikant","bedeltocht","bedevaart","bedevaartstocht","bediendecontract","bedieningsfout","bedilzucht","bedoeïenentent","bedrijfsadvocaat","bedrijfsfeest","bedrijfsfysiotherapeut","bedrijfsmanagement","bedrijfsopbrengst","bedrijfsrestaurant","bedrijfsresultaat","bedrijfssport","bedrijfswinst","bedrijvenmarkt","bedrust","beeldhouwkunst","beeldmoment","beeldrecht","beeldsnijkunst","beestenmarkt","beet","begeleidwonenproject","beginnersfout","beginpunt","begrippenapparaat","begrotingsdebat","begrotingsrecht","begrotingstekort","behaagzucht","behandelingsresultaat","behoudzucht","bejaardenpaspoort","bekerplant","bekerwinst","beklagrecht","beklemrecht","belangenconflict","belastingafdracht","belastingbiljet","belastingconsulent","belastingdienst","belastingexpert","belastingopbrengst","belastingplicht","belastingrecht","belastingspecialist","belastingwet","beleggersmarkt","beleggingsexpert","beleggingsmarkt","beleggingsopbrengst","beleggingsproduct","beleggingsresultaat","beleidsaspect","beleidsdebat","beleidsfout","beleidsresultaat","beleidsspecialist","belevingsrestaurant","belgicist","belminuut","beltegoedkaart","bemoeizucht","benefiet","benefietconcert","benoemingsbesluit","benzinelucht","benzinemarkt","benzinetekort","beoordelingsfout","beoordelingsrapport","berghut","bergklimaat","berglucht","bergrit","bergsport","bergtijdrit","bergtocht","berichtendienst","berkenhout","bermmonument","bermrecreant","bermsloot","bermtoerist","beroepsdiplomaat","beroepsernst","beroepsfout","beroepsgenoot","beroepsjournalist","beroepskracht","beroepsrecht","beroepssoldaat","beroepssport","berufsverbot","beschermingsbesluit","beschikkingsrecht","beslismoment","beslissingsrecht","besluit","bestaansrecht","bestandsformaat","bestelbiljet","bestelkaart","bestuursapparaat","bestuursassistent","bestuursbesluit","bestuursconflict","bestuurskracht","bestuurskundedocent","bestuursmandaat","bestuursprocesrecht","bestuursrecht","betaalautomaat","betaaldienst","betaalkaart","betaalopdracht","betalingsbalanstekort","betalingsopdracht","bètastudent","beterschapskaart","betrouwbaarheidsrit","beukenhout","beursapparaat","beursklimaat","beurskrant","beursmarkt","beursstudent","beurt","beverrat","bevoegdheidsconflict","bevrijdingsconcert","bevrijdingsfeest","bewaarplicht","bewegingsapparaat","bewegingsdocent","bewegingskunst","bewijskracht","bewijsrecht","bewustwordingsproject","bezemkast","bezit","bezitsrecht","bezoekrecht","bezuinigingsdrift","bezuinigingsopdracht","bezwaarschrift","beroepsgericht","bedompt","bedrijfsgericht","beginselvast","beleidsgericht","bewolkt","bezweet","verbeterblad","verband","verbeeldingswereld","verbod","verbodsbord","verbond","verdwaalarmband","verdwijnwoord","verenigingsblad","verenigingslid","verfhuid","vergismoord","vergunningenbeleid","verhalenpad","verhalenwedstrijd","verkeersaanbod","verkeersbeleid","verkeersbord","verkiezingsavond","verkleinwoord","verkoopbeleid","verkoopverbod","vernieuwingsbeleid","verpleeghuisbed","verraad","verschijningsverbod","verstand","vertoningsverbod","vertrekbeleid","vervalmaand","vervoerbeleid","vervoersaanbod","vervoersbeleid","vervoersbond","vervoersverbod","vervolgingsbeleid","verwijderingsbeleid","verzamelbeleid","verzekeringswereld","verzetsdaad","verzetsheld","verzuimbeleid","verdragend","verkeersremmend","verbazend","verbazingwekkend","verbijsterend","verblindend","verbluffend","verbouwereerd","verdaagd","verdedigend","verdovend","vereend","verfrissend","vergelijkend","verhalend","verheffend","verheugend","verkikkerd","verklarend","verkwikkend","verkwistend","verlammend","verlangend","verliesgevend","verlieslatend","verlieslijdend","verlokkend","verlossend","vermeend","vermeldenswaard","vermeldingswaard","vermoeiend","vermogend","vernederend","vernietigend","verontrustend","verpletterend","verrassend","verscheurend","verschillend","verslaafd","verspringend","verstikkend","verstrekkend","verstrooid","vertederend","vertrouwenwekkend","vertwijfeld","vervelend","verwaand","verwarrend","verwoestend","verzachtend","verziend","verzoenend","verwant","verantwoordingsplicht","verbandkist","verbeeldingskracht","verbintenissenrecht","verblijfsrecht","verbrandingsproduct","verbroederingsfeest","verdedigingsfout","verdragsrecht","verdriet","verdringingseffect","veredelingsproduct","verenigingsrecht","verffabrikant","verfpot","verfrest","vergiet","vergoedingslimiet","vergrotingsapparaat","vergunningplicht","verhaalsrecht","verhuiskist","verhuurboot","verjaardagsfeest","verjaardagsgast","verjaardagstaart","verjaarfeest","verjaringsfeest","verkeersagent","verkeersinfarct","verkeersmanagement","verkeersmarkt","verkeersoverlast","verkeerswet","verkenningstocht","verkiezingsbijeenkomst","verkiezingsbiljet","verkiezingsdebat","verkiezingsinkt","verkiezingsresultaat","verkiezingswinst","verkleedkist","verkoopapparaat","verkoopargument","verkoopopbrengst","verkoopopdracht","verkooprecht","verkoopresultaat","verkopersmarkt","verlatingsangst","verlovingsfeest","verminderingskaart","vermogensrecht","vermogenstekort","vermogenswinst","vernielzucht","vernietigingskracht","vernieuwingsdebat","vernieuwingsproject","veroveringstocht","veroveringszucht","verpleegassistent","verrassingseffect","verrassingsfeest","verrijkingsmarkt","verruimingskandidaat","verschoningsrecht","verschot","versproduct","versterfrecht","vertaalfout","vertaalproject","vertaalrecht","vertebraat","vertegenwoordigingsrecht","vervangingsmarkt","vervoersmanagement","vervoersmarkt","vervolgbijeenkomst","vervolgingsapparaat","vervolgopdracht","vervolgproject","vervreemdingseffect","verwijt","verzakingsrecht","verzamelkrant","verzekeringsagent","verzekeringsmarkt","verzekeringsproduct","verzekeringsrecht","verzekeringsresultaat","verzetskrant","verzoeningsbijeenkomst","verzorgingsproduct","slingerpad","avondgebed","bibbergeld","dageraad","drinkgeld","kalfsgebraad","leefgeld","ochtendgebed","ongelukskind","vluggerd","voltigeerpaard","voltigepaard","aandachtsgebied","aanlijngebod","aardbevingsgebied","abonnementsgeld","achtergrondgeluid","achterstandsgebied","actiegebied","afzetgebied","akkerbouwgebied","alpengebied","amazonegebied","ambtsgebied","ambtsgewaad","antigeluid","aspergebed","autonomiegebied","baggereiland","bangerd","bijgeluid","bijstandsgeld","binnenduingebied","blindengeleidehond","blowgebodsbord","boezemgebied","bongerd","bosgebied","bridgeavond","bridgebond","bridgewedstrijd","broedgebied","brongebied","budgetbeleid","burgerbewind","centrumgebied","collegelid","computergebied","concentratiegebied","conceptregeerakkoord","concessiegebied","conflictgebied","contactgeluid","crisisgebied","cultuurgebied","dankgebed","deelgebied","deelnemingenbeleid","deltagebied","deskundigheidsgebied","dierengeluid","doelgebied","doodsgewaad","doorgangsgebied","dopgeld","douanegebied","drempelgeld","driekoningenavond","duinengebied","duingebied","eigendomsvoorbehoud","energiegebied","engerd","eurogebied","feestgewaad","filmgebied","foerageergebied","formuliergebed","frequentiegebied","frontgebied","functioneringsgebied","gangenpaard","gitaargeluid","gitaargeweld","golfgebied","golflengtegebied","graangebied","grachtengebied","grensgebied","groeigebied","groengebied","groepsgeluid","groepsgeweld","grondgebied","grondwaterbeschermingsgebied","haflingerpaard","handelsgebied","havengebied","heidegebied","helikoptergeld","herkomstgebied","herwaarderingsgebied","hogedrukgebied","hogeronderwijsbeleid","hongersnood","hoogveengebied","ICT-gebied","immigratiegebied","inburgeringsbeleid","indicatiegebied","industriegebied","ingeland","inkomgeld","interessegebied","jachtgebied","jagershond","jongerenbeleid","jongerenblad","kantorengebied","kassengebied","keelgeluid","kennisgebied","kerngebied","kernwinkelgebied","kijkgeld","kindergeld","kleigebied","kloostergewaad","knipooggeweld","kogelwond","koorgebed","krapgeldbeleid","krijgsgeweld","krimpgebied","kruisgebed","kunstgebied","kustgebied","kwelgebied","lagedrukgebied","landbouwgebied","langeafstandspaard","langebaanwedstrijd","langetermijnbeleid","leefgebied","leergebied","leerstofgebied","legerpaard","legervoorraad","levensgebied","lidgeld","logeerbed","luchtvaartgebied","luistergeld","machtsgebied","managementbeleid","mandaatgebied","manegepaard","marktgebied","mededelingenblad","mededelingenbord","mediageweld","merengebied","middaggebed","middengebied","mijngebied","milieubeschermingsgebied","milieugebied","misgewaad","missiegebied","modegebied","moerasgebied","morgengebed","Morgenland","morgenstond","moslimgebied","motorgeluid","muilkorfgebod","nachtgewaad","nagelbed","natuurbeschermingsgebied","natuurgebied","natuurgeweld","natuurontwikkelingsgebied","NAVO-gebied","NAVO-grondgebied","nederzettingenbeleid","neerslaggebied","negerkind","no-gogebied","noodgebied","noordpoolgebied","Noordzeegebied","oceaangebied","octrooigebied","oefengebied","oerwoudgeluid","oliegebied","omgevingsbeleid","omgevingsgeluid","onderwijsgebied","onderzoeksgebied","onrustgebied","ontwikkelingsgebied","oorlogsgebied","oorlogsgeweld","oorsprongsgebied","operatiegebied","opleidingenaanbod","opmarsgebied","overgangsgebied","overlastgebied","overstromingsgebied","overwinteringsgebied","paaigebied","partnergeweld","ploegenwedstrijd","poldergebied","politiegeweld","potpoldergebied","presentiegeld","priestergewaad","regeerakkoord","regelafstand","regenboogkind","regenboogzebrapad","regenwoud","regeringsaanbod","regeringsbeleid","regeringsraad","regeringsstad","reizigersaanbod","richtingenstrijd","roggebrood","rouwgewaad","rugzakgeld","rustgebied","rustgeld","sabotagedaad","samenwerkingsgebied","schandegeld","Schengenakkoord","schietgebed","schoolgeld","servicegeweld","slangenhuid","sleutelgeld","slotgebed","smeekgebed","smeergeldstad","spaargeld","spanningsgebied","spiegelbeeld","spiegelwand","sportgebied","spraakgeluid","stemgeluid","stiltegebied","stoelgeld","stormgeweld","straatgeluid","straatgeweld","strafschopgebied","supportersgeweld","taalgebied","tegelpad","tegelwand","tegenbod","tegengeluid","tegengeweld","tegenspoed","tegenwind","televisiegeweld","tussengebied","uitgaansgeweld","uitgeefbeleid","uitgeversverbond","uitgeverswereld","ultrageluid","vaargebied","vagebond","vakantiegeld","veertigurengebed","vegetariërsbond","vingerhoed","vliegtuiggeluid","vluchtelingenbeleid","voetbalgeweld","vogelgeluid","vogelwereld","volksgezondheidsbeleid","voorzieningenaanbod","vormgevingsbeleid","vredesgeluid","vreemdelingenbeleid","vrijdaggebed","vrijgezellenavond","vrijwilligersbeleid","vuurwapengeweld","wapengeweld","waterbergingsgebied","watergebied","watergeweld","werkgelegenheidsbeleid","werkgeversaanbod","werkgeversbond","werkgeversverbond","wetgevingsbeleid","wiegenkind","wijngebied","wintersportgebied","wisselgeld","woestijngebied","zakgeld","zangersbond","zeegebied","zeehavengebied","ziektegeld","zigeunerkind","zigeunerpaard","zondegeld","zorgenkind","zwangerschapsmaand","zwijggeld","agent","afgezant","dirigent","echtgenoot","morgendienst","apologeet","budgetsupermarkt","burgerdienst","changement","dorpsgenoot","huisgenoot","krankzinnigengesticht","muggenbeet","nagerecht","omgevingsportret","politieagent","tijgerkat","tussengerecht","vogelmijt","voorgerecht","wegenwacht","wegenzout","wijkagent","wisselagent","zeegezicht","zorgbudget","aankoopbudget","aardappelgerecht","accountmanagement","achterhoedegevecht","adoptieagent","advertentiebudget","afspiegelingskabinet","agendahedonist","algemenebijstandswet","amandelgeest","ambtenarengerecht","apengezicht","arbeidsgerecht","aspergerobot","aspergeteelt","assetmanagement","baggerboot","baggermarkt","baggeropdracht","baggerproject","baggerschuit","baggervloot","balkanvergeet-mij-niet","barricadegevecht","bijgerecht","boemerangeffect","bouwmanagement","bovengebit","branchegenoot","bridgejournalist","bridgesport","budget","budgetrecht","budgettekort","bugnugget","burgemeestersambt","burgemeesterspost","burgerdocent","burgerplicht","burgerpot","burgerpresident","burgerrecht","burgerschapsrecht","buurtagent","buurtgenoot","capaciteitsmanagement","casemanagement","celgenoot","chef-dirigent","CIA-agent","clubgenoot","coalitiegenoot","collectiemanagement","collegebesluit","collegekaart","collegestudent","competentiemanagement","crisismanagement","defensiebudget","depannagedienst","deskundigenrapport","disgenoot","dopingexpert","draagvleugelboot","dreigement","driekoningenfeest","dubbelagent","dwerggeit","eerstgeboorterecht","eigendomsrecht","elftalgenoot","enkelgewricht","etalageruit","ex-agent","ex-echtgenoot","exploitatiebudget","FBI-agent","fractiegenoot","gadget","garagepoort","glogetuigschrift","groentegerecht","groentenugget","grondgevecht","halfgeleiderfabrikant","halsgerecht","halsgewricht","hamburgerrestaurant","hamburgertent","handelsagent","handgewricht","hanengevecht","hengelsport","hersengadget","heupgewricht","hogeschooldocent","hogeschoolstudent","hokjesgeest","hondengevecht","hoofdagent","hoofdgerecht","horlogekast","hotelmanagement","huishoudbudget","hulpagent","huwelijksvermogensrecht","inburgeringsplicht","inburgeringstraject","informatiemanagement","ingenieursdienst","ingenieursstudent","inlichtingenrapport","interim-management","internetevangelist","investeringsbudget","inzagerecht","jaarbudget","jongerenkrant","jongerenpaspoort","kaakgewricht","kaasgerecht","kaasnugget","kalfsgehakt","kamergenoot","kant-en-klaargerecht","kantongerecht","kennismanagement","kipnugget","klasgenoot","kniegewricht","kogelgewricht","kooigevecht","kredietmanagement","kroegentocht","kruidnagelsigaret","kunstbudget","kunstgeschiedenisdocent","kunstgeschiedenisstudent","kunstmanagement","kussengevecht","kwaliteitsmanagement","kwelgeest","lamsgehakt","langetermijneffect","leeftijdgenoot","leeftijdsgenoot","legercommandant","legerdienst","legerkrant","legerpredikant","legertent","lievelingsgerecht","logeergast","lotgenotencontact","loungerestaurant","low budget","lozingenbesluit","luchtagent","luchtgevecht","lunchgerecht","macrobudget","management","managementfout","melkgeit","mens-erger-je-niet","mergelgrot","milieumanagement","miljoenenbudget","mobiliteitsbudget","moddergevecht","monumentenbudget","morgenlicht","morgenpost","motoragent","muggenbult","narcotica-agent","NAVO-bondgenoot","negerhut","nepagent","nugget","ondergebit","onderwijsbudget","onderwijsmanagement","onderzoeksbudget","onderzoeksgerecht","on-en-minvermogenkaart","ongevallenwet","onteigeningswet","orgelconcert","orgeldocent","orgelkast","overheidsbudget","overheidsmanagement","overnamegevecht","overnemingsgevecht","paardengebit","passagebiljet","pastagerecht","persagent","personeelsbudget","personeelsmanagement","plaggenhut","ploegentijdrit","pluimgewicht","politiebudget","polsgewricht","postzegelformaat","prestigeproject","prins-regent","procesmanagement","productiebudget","projectmanagement","pseudovogelpest","publiciteitsagent","raffinageproduct","reclamebudget","reegeit","regeerambt","regelzucht","regenboogtricot","regenput","regent","regentaat","regenwaterput","regeringsapparaat","regeringsbesluit","regeringsbudget","regeringskrant","regeringsrapport","regeringssoldaat","reisagent","reisbudget","restauratiebudget","rijksbudget","rijstgerecht","risicomanagement","röntgenapparaat","ruggenmergsvocht","rundergehakt","scharniergewricht","scheidsgerecht","schijngevecht","schimmengevecht","schoolagent","schoolbegeleidingsdienst","schoolgenoot","schoolwijkagent","schoudergewricht","sergeant","slangenbeet","slangenhout","slingerplant","slowfoodgerecht","soortgenoot","spiegelgevecht","spiegelkast","spiegelruit","spiegelschrift","spiegeltent","spinazienugget","sportmanagement","spronggewricht","stagedocent","stageopdracht","stagerapport","stierengevecht","straatgevecht","streekgerecht","stressmanagement","studentenbudget","subsidiebudget","taalgenoot","tafelgenoot","tafelgenot","teamgeest","tegenargument","tegeneffect","tegenkracht","tentoonstellingsbudget","tijdgeest","tijdgenoot","tijdmanagement","tijdsgewricht","tijgerpunt","timemanagement","titanengevecht","titelgevecht","topdirigent","topmanagement","totaalbudget","totaalgewicht","tweegevecht","tweevingertest","twintigeurobiljet","undercoveragent","urgentierecht","veiligheidsagent","veiligheidsarrangement","veiligheidsmanagement","vijftigeurobiljet","vingerplant","visgerecht","visnugget","vleesgerecht","vleugelboot","vliegenkast","vliegerfeest","vluchtelingenrecht","vluchtelingentransport","VN-gezant","vogelmarkt","vogeltjesmarkt","vogelvangst","vogelvlucht","volksgericht","voorlichtingsbudget","vrachtwagenfabrikant","vrachtwagenmarkt","vragersmarkt","vredegerecht","vreemdelingenangst","vreemdelingenbesluit","vreemdelingendebat","vreemdelingenrecht","vreemdelingenstemrecht","vuistgevecht","vuurgevecht","watergeest","watergevecht","watermanagement","wegenbouwproject","wereldtitelgevecht","werkgelegenheidseffect","werkgelegenheidsproject","werkingsbudget","wervelgewricht","wetenschapsbudget","wetgevingsproject","wintergerst","wintergezicht","wrevelagent","zadelgewricht","zagevent","zanger-componist","zanger-gitarist","zangerscast","zangvogelsport","zeegevecht","zegelrecht","zegetocht","zelfmanagement","ziekenhuisbudget","zwangerschapstest","goedgevuld","aangebrand","welgevuld","afgeborsteld","donkergekleurd","goedgevormd","welgevormd","allesverzengend","bontgekleurd","doorgewinterd","goedgehumeurd","goedgeluimd","goedgezind","haatdragend","kegeldragend","lichtgekleurd","nagelbijtend","ongekleurd","ongemanierd","ongeverfd","rentedragend","risicodragend","roodgekleurd","slechtgehumeurd","slechtgezind","vruchtdragend","welgemanierd","welgezind","welopgevoed","woldragend","zaaddragend","zorgdragend","aanbodgestuurd","aangehuwd","aangetekend","aangetrouwd","aanliggend","aanmatigend","aanvoegend","achtereenvolgend","achterliggend","afgewend","allesdoordringend","allesvernietigend","alleszeggend","almogend","alvermogend","angstaanjagend","bijstandsgerechtigd","bloeddrukverhogend","bloeddrukverlagend","bloemdragend","braakliggend","brandvertragend","breedgerand","brildragend","cholesterolverlagend","christelijk-gereformeerd","computergestuurd","diepliggend","doodgemoedereerd","doordringend","doorslaggevend","dreigend","drempelverlagend","dringend","dwingend","eerstvolgend","eierleggend","Engelssprekend","ergerniswekkend","felgekleurd","godtergend","goedgekleed","goedgemanierd","goudgerand","grensverleggend","handenwringend","hemeltergend","hiernavolgend","hogergenoemd","hoogdringend","hoopgevend","indringend","ingebeeld","ingekankerd","ingekeerd","ingenaaid","ingewikkeld","ingeworteld","intrigerend","knoldragend","kogelwerend","laaggeletterd","leidinggevend","levensbedreigend","levensbeëindigend","levensverlengend","lichtgevend","lichtgewond","liggend","losliggend","maatgevend","meedogend","minvermogend","moedgevend","naastliggend","navolgend","neerbuigend","niet-geleidend","nietszeggend","normgevend","oergezond","omliggend","onaangediend","onbevredigend","ondergewaardeerd","onderliggend","ondeugend","ongeaccepteerd","ongeanimeerd","ongearticuleerd","ongeautoriseerd","ongecensureerd","ongeciviliseerd","ongeclausuleerd","ongecompliceerd","ongeconcentreerd","ongeconditioneerd","ongecontroleerd","ongecoördineerd","ongecorrigeerd","ongecultiveerd","ongedateerd","ongedefinieerd","ongedifferentieerd","ongediplomeerd","ongedisciplineerd","ongedoubleerd","ongeëmancipeerd","ongeëmotioneerd","ongeforceerd","ongefrankeerd","ongefundeerd","ongegeneerd","ongehavend","ongehonoreerd","ongeïdentificeerd","ongeïnformeerd","ongeïnspireerd","ongeïnteresseerd","ongekend","ongekwalificeerd","ongeleerd","ongelimiteerd","ongelinieerd","ongematteerd","ongemeend","ongemeubileerd","ongemonteerd","ongemotiveerd","ongemotoriseerd","ongenuanceerd","ongeoefend","ongeopend","ongeordend","ongeorganiseerd","ongepaneerd","ongepermitteerd","ongeprepareerd","ongepubliceerd","ongeraffineerd","ongerealiseerd","ongeregistreerd","ongereglementeerd","ongereguleerd","ongesigneerd","ongespecificeerd","ongestoffeerd","ongestructureerd","ongestudeerd","ongesubsidieerd","ongevaccineerd","ongewapend","onsamenhangend","onuitgenodigd","onuitgevoerd","onvermogend","onwelgezind","opeenvolgend","opvliegend","opvolgend","orthodox-gereformeerd","overtuigend","overwegend","overweldigend","plaatsvervangend","prangend","raadgevend","redengevend","rentegevend","rolbevestigend","roodgeverfd","rustgevend","samenhangend","schermdragend","schrikaanjagend","slechtgekleed","sneldrogend","statusverhogend","stilzwijgend","supergezond","tegemoetkomend","tergend","toegevend","toonaangevend","tussenliggend","uitdagend","uitgekiend","uitgeregend","uitgerekend","uitnodigend","vakoverstijgend","veelzeggend","vigerend","vleesvervangend","vliegend","volgend","voorbijgestreefd","vraaggestuurd","vreesaanjagend","Wajonggerechtigd","waterbergend","watergekoeld","welgekend","welgemeend","werkgelegenheidsbevorderend","wetgevend","winstgevend","witgehandschoend","witgepleisterd","witgeschilderd","witgeverfd","zelfcorrigerend","zelfdragend","zelfreinigend","zelfvernietigend","zelfverzorgend","zieltogend","zingevend","zoetgeurend","zogenaamd","zogenoemd","zwaargehavend","zwaargewapend","zwaargewond","zwaarwegend","zwartgeverfd","zwijgend","doelgericht","ontwikkelingsgericht","zwartgerokt","arbeidsmarktgericht","functiegericht","goedgemutst","kindgericht","aanbodgericht","aangedampt","actiegericht","arbeidsongeschikt","brongericht","buurtgericht","cliëntgericht","competentiegericht","consumentgericht","divergent","doelgroepgericht","doodongerust","effectgericht","ervaringsgericht","exportgericht","groepsgericht","ingemaakt","ingeroest","innovatiegericht","intelligent","klantgericht","kortgerokt","maatschappijgericht","marktgericht","mensgericht","nagelvast","natuurgericht","niet-gericht","ongekuist","ongericht","onuitgebracht","onuitgepakt","onuitgewerkt","oplossingsgericht","persoonsgericht","praktijkgericht","prestatiegericht","probleemgericht","procesgericht","productgericht","publieksgericht","resultaatgericht","roodgelakt","taakgericht","themagericht","toekomstgericht","toepassingsgericht","vakgericht","voortgezet","vraaggericht","wijkgericht","witgekalkt","witgelakt","zelfgemaakt","zwartgelakt","morgennacht","negenduizend","negenentwintigduizend","negenhonderd","negenhonderdduizend","negentienduizend","negentienhonderd","negentigduizend","morgenochtend","desgevallend","morgenavond","zogezegd","nergensland","ontbijtbord","onthaalbeleid","onthaalkind","ontmoedigingsbeleid","ontmoetingsavond","ontwapeningsakkoord","ontwerpakkoord","ontwerplandbouwakkoord","ontwerpwedstrijd","ontwikkelingsbeleid","ontwikkelingshulpbeleid","ontwikkelingsland","ontbeend","ontbrekend","onthullend","onthutsend","ontkennend","ontluisterend","ontoereikend","ontslagnemend","ontsmettend","ontspannend","ontstekingsremmend","ontstellend","ontwapenend","ontwijkend","ontwikkeld","ontzagwekkend","ontzettend","ontbijt","onthardingszout","ontzet","ontbijtbuffet","ontbindingsrecht","ontdekkingstocht","onterecht","ontkoppelingsbesluit","ontmijningsdienst","ontslagbesluit","ontslagdecreet","ontslagrecht","ontvangst","ontwerpbesluit","ontwerpfout","ontwerpgrondwet","ontwerpopdracht","ontwerprapport","ontwerpwet","ontwikkelingspot","ontwikkelingsproject","herdershond","herenakkoord","herenblad","herfstavond","herfstblad","herfstdraad","herfstmaand","herfstochtend","herfstwind","herkeuringsraad","heroïnehond","herseninhoud","herstelbeleid","hervormingsbeleid","herfst","hermafrodiet","hert","heraut","herfstlucht","heraanplant","herdenkingsbijeenkomst","herdenkingsconcert","herdenkingsfeest","heremietkreeft","herfstnacht","herfsttint","herinneringskunst","herkomst","heroïnespuit","heroïnetransport","heroïnevangst","herroepingsrecht","hersenkracht","hersenvlucht","hersenvocht","hersteldienst","herstelrecht","hervormingsproject","erwt","ernst","erbovenuit","ereambt","eregast","erepunt","erfenisrecht","erfrecht","ergotherapeut","ernaast","eronderuit","eropuit","ertussenuit","eruit","ervanuit","erytrocyt","eredivisiewedstrijd","erelid","erfgoedbeleid","erkenningsbeleid","errond","ervaringswereld","gebaart","gebeurt","gebiedt","gebood","gedenkt","gedraagt","geeuwt","gehoorzamt","geilt","geldt","geelt","gelooft","geneest","geniet","genoot","gerust","geurt","geeft","besnuffelt","bedeelt","bedelt","bekeert","beugelt","beamt","beantwoordt","beargumenteert","beatblogt","becijfert","becommentariërt","beconcurreert","bedaart","bedelft","bedenkt","bederft","bedient","bediscussiërt","bedoelt","bedraagt","bedreigt","bedriegt","bedrijft","bedroeft","bedwingt","beëindigt","beeldbelt","beetneemt","beft","begaat","begeleidt","begeert","begeeft","begint","begraaft","begrijpt","begroeit","behaalt","behandelt","behangt","beheert","behoedt","behoeft","behoort","behoudt","beïnvloedt","bekent","bekeurt","bekijkt","beklaagt","bekleedt","beklemt","beklimt","bekomt","bekritiseert","bekroont","belandt","beledigt","belegt","belemmert","beleeft","belt","beloont","belooft","belparkeert","beluistert","bemeesteert","bemeubelt","bemoedigt","bemoeit","benadert","benauwt","beneemt","bengelt","benieuwt","benoemt","beogt","beoordeelt","bepaalt","bepoteelt","bereidt","berekent","berooft","beschaamt","beschaaft","beschermt","beschildert","beschouwt","beschrijft","beschuldigt","beslaat","besloot","besnijdt","bespaart","bespeurt","bespioneert","bespreekt","bespringt","bestaat","bestempelt","bestrijdt","bestreed","bestudeert","bestuurt","beswaffeelt","betekent","betert","betont","betonneert","betovert","betreedt","betreft","betrekt","betreurt","betwijfelt","beult","bevalt","beeft","bevindt","bevoordeliigt","bevordert","bevraagt","bevriest","bewapent","beweert","bewijst","bewondert","bewoont","bewonersparkeert","bezaait","bezeert","beziet","bezat","bezoekt","bezorgt","bezuinigt","bezweert","verlaat","verliet","verschaalt","verspringt","vertelt","veraangenaamt","verabsoluteert","verachtvoudiigt","veradeemt","verafgoodt","verafschuwt","veralgemeent","verandert","verankert","verantwoordt","verarmt","verbabbelt","verbaliseert","verbant","verbaast","verbeeldt","verbeidt","verbergt","verbetert","verbeuzelt","verbiedt","verbood","verbijstert","verbindt","verblijft","verblindt","verbouwt","verbrandt","verbreekt","verdappert","verdedigt","verdeelt","verdenkt","verdient","verdort","verdooft","verdraait","verdraagt","verdrijft","verdringt","verdrinkt","verdroogt","verdubbelt","verdwaalt","verdwijnt","vereenvoudigt","vet","verenigt","vereert","vergaat","vergadeert","vergelijkt","vergt","vergeet","vergat","vergeeft","vergiftigt","vergoedt","vergrendelt","verhaalt","verhangt","verheldert","verheugt","verhindert","verhoogt","verhongert","verhoudt","verhuist","verhuurt","verifiërt","verjaagt","verkent","verkeert","verkiest","verklaart","verkleedt","verkleint","verkleurt","verknoeit","verkoopt","verkreukelt","verkrijgt","verlaagt","verlamt","verlangt","verleidt","verleent","verlengt","verliest","verloocheent","verloopt","verlooft","verluiert","verlummelt","vermagert","vermaalt","vermangelt","vermeldt","vermengt","vermenigvuldigt","vermijdt","vermindert","vermoedt","vermoeit","vermolmt","vermomt","vermoordt","vernauwt","verneemt","vernevelt","vernielt","vernietigt","vernieuwt","vernikkelt","vernoemt","vernummert","veronaangenaamt","veronachtzaamt","veronderstelt","verontheiliigt","verontreinigt","verontschuldigt","veroordeelt","veroorlooft","verootmoediigt","veropenbaart","verordonneert","verovert","verpandt","verpaupert","verpietert","verplegt","verplettert","verpulvert","verraadt","verried","verrechtvaardiigt","verregeent","verreist","verrekeent","verrijdt","verrijst","verroert","verrolt","verronselt","verruigt","verruilt","verruuwt","verscheurt","verschijnt","verschilt","verschimmelt","verschoont","verschraalt","verschrijft","verschroeit","verschrompelt","verschuilt","versiert","versimpelt","versjachert","versjouwt","verslaat","verslechtert","versleutelt","verslijt","versleet","verslindt","verslond","versluiert","versluist","versmaadt","versmalt","versmoort","versnelt","versnijdt","versnippert","versobert","versoepelt","versombert","verspeelt","verspeent","verspert","verspiedt","verspilt","verspint","versplintert","verspreidt","verstaat","verstond","verstaalt","verstart","verstelt","versteent","versterft","versteviigt","verstijft","verstilt","verstomt","verstoort","verstoot","verstiet","verstouwt","verstramt","verstrengt","verstrijkt","verstrooit","verstuift","verstuurt","verstuuwt","versuikert","versukkelt","vertaalt","vertedert","vertegenwoordigt","vertekeent","verteert","vertienvoudiigt","vertilt","vertimmert","vertint","vertoeft","vertoont","vertoornt","vertraagt","vertreedt","vertroebelt","vertroetelt","vertrouwt","vertwijfelt","vervaagt","vervaalt","vervalt","vervangt","vervelt","verft","verveent","verviervoudiigt","vervijfvoudiigt","vervliegt","vervloeit","vervluchtiigt","vervoedeert","vervoegt","vervoert","vervolgt","vervollediigt","vervordert","vervormt","vervreemdt","vervroegt","vervuilt","vervult","verwaait","verwaardiigt","verwaarloost","verwarmt","verwart","verwaseemt","verwatert","verwedt","verwelkoomt","verweert","verwerpt","verwerft","verweeft","verwijdt","verwijdert","verwijlt","verwijft","verwikkelt","verwildert","verwint","verwintert","verwisselt","verwittiigt","verwondt","verwondert","verwoont","verwoordt","verwringt","verwurgt","verzaagt","verzandt","verzegelt","verzegt","verzeilt","verzekert","verzelfstandiigt","verzendt","verzengt","verzesvoudiigt","verzilvert","verzinnebeeldt","verzint","verzoekt","verzoent","verzoolt","verzuilt","verzuurt","verzusteert","verzwagert","verzwaart","verzwelgt","verzwendelt","verzweert","verzwijgt","ontbiedt","ontbood","ontbeet","ontbindt","ontbolstert","ontbraamt","ontbreekt","ontcijfert","ontdoet","ontdeed","ontdooit","ontdubbelt","onteert","onterft","ontgaat","ontgeldt","ontglijdt","ontgloeit","ontgraaft","ontgrendelt","ontgroeit","ontgroent","onthaalt","onthalst","onthardt","onthaart","ontheft","ontheiligt","onthoofdt","onthoudt","onthield","onthult","ontkent","ontketeent","ontkiemt","ontkleurt","ontkoomt","ontkoppelt","ontlaadt","ontleent","ontleert","ontloopt","ontluist","ontmengt","ontmijnt","ontmoedigt","ontmythologiseert","ontneemt","ontradicaliseert","ontroert","ontrommeelt","ontruimt","ontslaat","ontspant","ontspult","ontstaat","ontstond","ontsteekt","ontvangt","ontvoert","ontvolgt","ontvoogdt","ontvriendt","ontvriest","ontwerpt","ontwijkt","ontwikkelt","ontzwavelt","herdenkt","herdacht","ergert","ekent","eruitzit","ervaart","erft"],X=["aaneengedraaid","aaneengeschakeld","aanschouwd","aanvaard","achtergebleven","achtergelaten","achterhaald","achteromgekeken","achteropgekomen","achteruitgegaan","achtervolgd","ademgehaald","bedolven","bedongen","bedorven","bedragen","bedreven","bedrogen","bedropen","bedwongen","beetgenomen","begeven","begonnen","begraven","begrepen","behangen","behouden","bekeken","beklommen","bekomen","bekropen","beleden","belezen","benomen","beraden","beschenen","beschoten","beschreven","beslagen","beslopen","besloten","besneden","besproken","besprongen","bestegen","bestolen","bestorven","bestreden","bestreken","betreden","betroffen","betrokken","bevallen","bevochten","bevolen","bevonden","bevroren","bewezen","bewogen","bezeten","bezien","beziggehouden","bezonnen","bezweken","bezworen","bijeengehouden","bijeengeroepen","blootgelegd","blootgesteld","bovengehaald","brandgesticht","buitengesloten","buitgemaakt","deelgenomen","dichtgebonden","dichtgedaan","diepgevroren","doodgegaan","doorbladerd","doorboord","doorbroken","doordacht","doordrongen","doorgrond","doorkruist","doorlopen","doorsneden","doorstaan","doorverteld","doorzien","doorzocht","drooggelegd","dwarsgezeten","ervaren","flauwgevallen","gebakken","gebannen","gebarsten","gebeden","gebersten","gebeten","geblazen","gebleken","gebleven","geblonken","geboden","gebogen","gebonden","geboren","geborgen","geborsten","gebraden","gebroken","gebrouwen","gedaan","gedoken","gedolven","gedongen","gedragen","gedreten","gedreven","gedrongen","gedronken","gedropen","gedwongen","gefloten","gegeten","gegeven","gegleden","geglommen","gegolden","gegoten","gegraven","gegrepen","gehangen","gehesen","geheven","geholpen","gehouden","gehouwen","gekeken","geklommen","geklonken","gekloven","geknepen","gekomen","gekorven","gekozen","gekregen","gekresen","gekreten","gekrompen","gekrooien","gekropen","gekunnen","gekweten","gelachen","geladen","gelaten","geleden","gelegen","geleken","gelezen","gelogen","geloken","gelopen","gemalen","gemeden","gemeten","gemoeten","gemogen","gemolken","genegen","genezen","genomen","genoten","geprezen","geraden","gereden","geregen","gereten","gerezen","geroepen","geroken","geschapen","gescheiden","geschenen","gescheten","gescholden","gescholen","geschonden","geschonken","geschoren","geschoten","geschoven","geschreden","geschreven","geschrokken","geslagen","geslapen","geslepen","gesleten","geslonken","geslopen","gesloten","gesmeten","gesmolten","gesneden","gesnoten","gesnoven","gespannen","gespeten","gespleten","gesponnen","gespoten","gesproken","gesprongen","gesproten","gestegen","gestoken","gestolen","gestonken","gestoten","gestoven","gestreden","gestreken","getreden","getroffen","getrokken","gevallen","gevangen","gevangengenomen","gevaren","gevezen","gevlochten","gevloden","gevlogen","gevloten","gevochten","gevonden","gevouwen","gevreten","gevroren","gewassen","geweken","geweten","geweven","gewezen","gewogen","gewonden","gewonnen","geworden","geworpen","geworven","gewoven","gewreten","gewreven","gewrongen","gezegen","gezeken","gezeten","gezien","gezoden","gezogen","gezonden","gezongen","gezonken","gezonnen","gezopen","gezouten","gezwegen","gezwolgen","gezwollen","gezwommen","gezwonden","gezworen","gezworven","hardgelopen","herladen","hernomen","herwonnen","herzien","huisgehouden","kennisgemaakt","klaargekomen","kortgesloten","kwaadgesproken","kwijtgeraakt","kwijtgescholden","langsgekomen","leeggelopen","leeggemaakt","lesgegeven","liefgehad","lipgelezen","meebetaald","misbruikt","misleid","mislukt","misprezen","nabewerkt","nedergedaald","omarmd","omfloerst","omhelsd","omkleed","omklemd","ommuurd","omringd","omschreven","omsingeld","omsloten","omvat","omvergeworpen","omwikkeld","omwonden","omzeild","omzoomd","omzworven","onderbouwd","onderbroken","onderdrukt","ondergaan","ondergraven","onderhandeld","onderhouden","onderkend","ondermijnd","ondernomen","onderscheiden","onderschept","ondersteund","onderstreept","ondertekend","onderverdeeld","ondervonden","ondervraagd","onderwezen","onderworpen","onderzocht","ontbeten","ontboden","ontbonden","ontbroken","ontdoken","ontgonnen","onthouden","ontkomen","ontladen","ontloken","ontlopen","ontnomen","ontraden","ontslagen","ontsloten","ontspannen","ontsprongen","ontsproten","ontstoken","onttrokken","ontvangen","ontweken","schoongemaakt","schoongewassen","stilgestaan","tandengepoetst","tegemoetgekomen","teleurgesteld","teloorgegaan","terechtgekomen","terechtgesteld","teweeggebracht","thuisbezorgd","thuisgekomen","toebehoord","toevertrouwd","tussengekomen","tussengeworpen","uitbesteed","uitbetaald","uitvergroot","uitverkocht","valsgespeeld","verbannen","verbleven","verboden","verbogen","verbonden","verborgen","verbroken","verdragen","verdreven","verdrongen","verdronken","verdroten","verdwenen","vergeleken","vergeten","vergeven","vergleden","vergolden","vergoten","vergrepen","verhangen","verheven","verholpen","verhouden","verkozen","verkregen","verladen","verlaten","verlopen","verloren","vermeden","vermogen","vernomen","verraden","verrezen","verscheiden","verschenen","verscholen","verschoten","verschoven","verschreven","verschrokken","verslagen","verslapen","versleten","verslonden","versmolten","verstoten","verstreken","vertrokken","vervallen","vervangen","vervlogen","verweten","verweven","verwezen","verworpen","verworven","verwrongen","verzonden","verzonken","verzonnen","verzopen","verzouten","verzwonden","volbracht","voldaan","voleindigd","volhard","volmaakt","volstaan","voltooid","voltrokken","voorbehouden","voorkomen","voorspeld","voorzien","wederhaald","weergalmd","weerhouden","weerkaatst","weerlegd","weerstaan"],{getWords:Z,matchRegularParticiples:ee}=n.languageProcessing,{directPrecedenceException:re,values:ne}=n.languageProcessing,{Clause:te}=ne,{getClausesSplitOnStopWords:oe,createRegexFromArray:de}=n.languageProcessing,ae={Clause:class extends te{constructor(e,r){super(e,r),this._participles=function(e){const r=Z(e),n=[/^(ge|be|ont|ver|her|er)\S+([dt])($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi,/^(aan|af|bij|binnen|los|mee|na|neer|om|onder|samen|terug|tegen|toe|uit|vast)(ge)\S+([dtn])($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi];return r.filter((e=>0!==ee(e,n).length||(0,K.includes)(X,e)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const e=this.getParticiples().filter((e=>!(0,K.includes)(Q,e)&&!this.hasNonParticipleEnding(e)&&!re(this.getClauseText(),e,q)));this.setPassive(e.length>0)}hasNonParticipleEnding(e){return/\S+(heid|teit|tijd)($|[ \n\r\t.,'()"+\-;!?:/»«‹›<>])/gi.test(e)}},regexes:{auxiliaryRegex:de(["word","wordt","worden","werd","werden","wordend"]),stopwordRegex:de(G)}};function le(e){return oe(e,ae)}const{exceptionListHelpers:{checkIfWordEndingIsOnExceptionList:se,checkIfWordIsOnListThatCanHavePrefix:ie}}=n.languageProcessing;function ge(e,r){const n=r.find((r=>-1!==e.search(new RegExp(r[0]))));return void 0!==n&&(e=e.replace(new RegExp(n[0]),n[1])),e}function be(e,r,n){const t=ie(e,r.getVowelDoubling,n),o=function(e,r,n){if(se(e,r.endingMatch)||ie(e,r.verbs,n)||r.exactMatch.includes(e))return!0}(e,r.noVowelDoubling,n),d=function(e){return e.charAt(e.length-4)!==e.charAt(e.length-3)}(e),a=function(e,r){return-1===e.search(new RegExp(r))}(e,r.noVowelDoubling.rule);return t||!o&&d&&a}const ve=function(e){let r=e.search(/[aeiouyèäüëïöáéíóú][^aeiouyèäüëïöáéíóú]/);return-1!==r&&(r+=2),-1!==r&&r<3&&(r=3),r},ue=function(e,r,n,t){const o=function(e,r,n){const t=Object.entries(r);for(const r of t){const t=r[1].suffixes.find((r=>new RegExp(r).exec(e)));if(t){const o=new RegExp(t).exec(e),d=o[o.length-1],a=e.lastIndexOf(d);if(-1!==n&&a>=n)return{suffixIndex:a,stemModification:r[1].stemModification}}}}(e,r,n);return void 0!==o&&(e=function(e,r,n,t,o){return"hedenToHeid"===t?ge(e,o.regularStemmer.stemModifications.hedenToHeid):(e=e.substring(0,n),"changeIedtoId"===t?ge(e,o.regularStemmer.stemModifications.iedToId):"changeInktoIng"===t&&e.endsWith("ink")?ge(e,o.regularStemmer.stemModifications.inkToIng):"vowelDoubling"===t&&be(e,o.regularStemmer.stemModifications.exceptionsStemModifications,o.pastParticipleStemmer.compoundVerbsPrefixes)?ge(e,o.regularStemmer.stemModifications.doubleVowel):e)}(e,0,o.suffixIndex,o.stemModification,t)),e},ce=function(e,r,n,t){const o=Object.entries(r);for(const r of o)e=ue(e,r[1],n,t);return e},{regexHelpers:{searchAndReplaceWithRegex:he,doesWordMatchRegex:me},exceptionListHelpers:{checkIfWordEndingIsOnExceptionList:we,checkIfWordIsOnListThatCanHavePrefix:ke}}=n.languageProcessing,pe=function(e,r,n){if(me(n,r[0])){const t=n.replace(new RegExp(r[0]),r[1]);if(be(t,e.regularStemmer.stemModifications.exceptionsStemModifications,e.pastParticipleStemmer.compoundVerbsPrefixes)){return he(t,e.regularStemmer.stemModifications.doubleVowel)||t}return t}return null},fe=function(e,r){const n=r.ambiguousTAndDEndings.tOrDArePartOfStem;let t=he(e,n.firstTOrDPartOfStem);if(t)return t;if(n.verbsDenShouldBeStemmed.includes(e))return e.slice(0,-3);if(we(e,n.wordsStemOnlyEnEnding.endingMatch)||ke(e,n.wordsStemOnlyEnEnding.verbs,r.pastParticipleStemmer.compoundVerbsPrefixes)||me(e,n.denEnding)){if(t=e.slice(0,-2),be(t,r.regularStemmer.stemModifications.exceptionsStemModifications,r.pastParticipleStemmer.compoundVerbsPrefixes)){return he(t,r.regularStemmer.stemModifications.doubleVowel)||t}return t}const o=n.deEnding;if(t=pe(r,o,e),t)return t;const d=n.teAndTenEndings;return t=pe(r,d,e),t||null};function ye(e,r){if(we(r,e.ambiguousTAndDEndings.wordsTShouldBeStemmed))return r.slice(0,-1);if(me(r,e.ambiguousTAndDEndings.tOrDArePartOfStem.tEnding))return r;return fe(r,e)||null}const{flattenSortLength:je}=n.languageProcessing,ze=function(e,r,n){const t=je(n).find((r=>e.startsWith(r)));"string"==typeof t&&(e=e.slice(t.length));for(let n=0;n1?n+t[0]:t[0]}}return null},Se=function(e,r){for(let n=0;nt.startsWith(e))).some((e=>!0===e))&&t.endsWith("end")&&!r.includes(t)?ge(t.slice(0,-3),n):null};function Ve(e,r){if(r.endsWith("heid")||r.endsWith("teit")||r.endsWith("tijd")||Q.includes(r))return"";if(Te(e.pastParticipleStemmer.inseparableCompoundVerbsNotToBeStemmed,r))return r;let n=Me(e,r);return n||(n=Fe(e.pastParticipleStemmer.inseparableCompoundVerbs,r),n||(n=Ie(e.pastParticipleStemmer.compoundVerbsPrefixes.inseparable,e.pastParticipleStemmer.pastParticiplesEndingOnEnd,e.regularStemmer.stemModifications.finalChanges,r),n||(n=Oe(e,r),n||null)))}const{exceptionListHelpers:{checkIfWordEndingIsOnExceptionList:Ae,checkIfWordIsOnListThatCanHavePrefix:De},stemHelpers:{removeSuffixFromFullForm:Ce,removeSuffixesFromFullForm:Re}}=n.languageProcessing,Ne=function(e,r){let n=function(e,r){for(const n of e.stemExceptions.removeSuffixesFromFullForms){const e=Re(n.forms,n.suffixes,r);if(e)return e}for(const n of e.stemExceptions.removeSuffixFromFullForms){const e=Ce(n.forms,n.suffix,r);if(e)return e}}(r,e);return n?be(n,r.regularStemmer.stemModifications.exceptionsStemModifications,r.pastParticipleStemmer.compoundVerbsPrefixes)?(n=ge(n,r.regularStemmer.stemModifications.doubleVowel),ge(n,r.regularStemmer.stemModifications.finalChanges)):ge(n,r.regularStemmer.stemModifications.finalChanges):null};const{exceptionListHelpers:{checkIfWordEndingIsOnExceptionList:Le,checkIfWordIsOnListThatCanHavePrefix:He}}=n.languageProcessing,$e=function(e,r,n){const t=e.stemExceptions.wordsNotToBeStemmedExceptions,o=e.stemExceptions.removeSuffixesFromFullForms[1].forms,d=e.ambiguousTAndDEndings.tOrDArePartOfStem.doNotStemTOrD;if(Ve(e,n)||ye(e,n)||He(n,t.verbs,e.pastParticipleStemmer.compoundVerbsPrefixes)||Le(n,t.endingMatch)||t.exactMatch.includes(n)||o.includes(r)||Pe(e,n)||r.endsWith("heid")||Le(r,d))return!0};function qe(e,r,n){return $e(e,r,n)?null:r.slice(0,-1)}const{flattenSortLength:_e,exceptionListHelpers:{checkExceptionListWithTwoStems:Ge}}=n.languageProcessing,Je=function(e,r){for(const n of Object.keys(e))for(const t of e[n]){const e=(0,K.flatten)(Object.values(t));if(e.includes(r))return e[0]}},{baseStemmer:Ue}=n.languageProcessing;function Ye(e){const r=(0,K.get)(e.getData("morphology"),"nl",!1);return r?e=>function(e,r){const n=function(e,r){let n=Pe(r,e);if(n)return n;if(n=Ve(r,e),n)return n;const t=r.stemExceptions.wordsNotToBeStemmedExceptions;if(De(e,t.verbs,r.pastParticipleStemmer.compoundVerbsPrefixes)||Ae(e,t.endingMatch)||t.exactMatch.includes(e))return e;const o=r.ambiguousTAndDEndings.otherTAndDEndings;for(const t of o)if(e.endsWith(t)&&(n=ye(r,e),n))return n;return n=Ne(e,r),n||function(e,r){e=ge(e,r.regularStemmer.stemModifications.IAndYToUppercase);const n=ve(e),t=r.regularStemmer.suffixes;return ge(e=ce(e,t,n,r),r.regularStemmer.stemModifications.finalChanges)}(e,r)}(e,r);let t=Ge(r.stemExceptions.stemmingExceptionsWithMultipleStems.stemmingExceptionsWithTwoStems,n);if(t)return t;if(t=function(e,r){let n=_e(e.pastParticipleStemmer.compoundVerbsPrefixes).find((e=>r.startsWith(e))),t="";e.stemExceptions.stemmingExceptionsWithMultipleStems.strongAndIrregularVerbs.doNotStemPrefix.find((e=>r.endsWith(e)))?n=null:n&&(t=r.slice(n.length,r.length),t.length>2?r=t:n=null);const o=e.stemExceptions.stemmingExceptionsWithMultipleStems.strongAndIrregularVerbs.strongVerbStems,d=[o.irregularStrongVerbs,o.regularStrongVerbs,o.bothRegularAndIrregularStrongVerbs];for(let e=0;e{"use strict";var a={d:(n,o)=>{for(var i in o)a.o(o,i)&&!a.o(n,i)&&Object.defineProperty(n,i,{enumerable:!0,get:o[i]})},o:(a,n)=>Object.prototype.hasOwnProperty.call(a,n),r:a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})}},n={};a.r(n),a.d(n,{default:()=>ka});const o=window.yoast.analysis,i=["jeden","jedna","jedno","dwa","dwie","trzy","cztery","pięć","sześć","siedem","osiem","dziewięć","dziesięć","ta","to","ten","te","ci","taki","tacy","taka","takÄ…","takich","takie","takiego","takiej","takiemu","takim","takimi","tamten","tamta","tamto","tamci","tamte","tamtÄ…","tamtego","tamtej","tamtemu","tamtych","tamtym","tamtymi","tÄ…","tÄ™","tego","tej","temu","tych","tymi","tym","tak"],z=["aby","abym","abyÅ›my","abyÅ›","abyÅ›cie","acz","aczkolwiek","albowiem","ale","aliÅ›ci","bo","bowiem","bynajmniej","choć","chociaż","chociażby","czyli","dlatego","dodatkowo","dopóki","dotychczas","faktycznie","gdy","gdyż","jakkolwiek","iż","jednak","jednakże","jeÅ›li","kiedy","lecz","mianowicie","mimo","np","najpierw","nastÄ™pnie","natomiast","ni","niemniej","niż","notabene","oczywiÅ›cie","ogółem","ostatecznie","owszem","podobnie","podsumowujÄ…c","pokrótce","pomimo","ponadto","ponieważ","poprzednio","potem","później","przecież","przeto","przynajmniej","raczej","również","rzeczywiÅ›cie","skoro","także","też","toteż","tudzież","tymczasem","wedle","wedÅ‚ug","wiÄ™c","wÅ‚aÅ›ciwie","wobec","wpierw","wprawdzie","wreszcie","wskutek","wstÄ™pnie","wszakże","wszelako","zamiast","zanim","zarówno","zaÅ›","zatem","zresztÄ…","zwÅ‚aszcza","żeby","żebym","żebyÅ›","żebyÅ›cie","żebyÅ›my"],e=z.concat(["a konkretnie","a propos","aby wrocić do rzeczy","analogicznie do","baczÄ…c na to że","bÄ…dź co bÄ…dź","bez wÄ…tpienia","bez wzglÄ™du","biorÄ…c pod uwagÄ™","choćby","chodzi o to","chyba że","co do","co gorsza","co prawda","co siÄ™ tyczy","co ważniejsze","co wiÄ™cej","dziÄ™ki czemu","dziÄ™ki któremu","dziÄ™ki której","dziÄ™ki którym","dziÄ™ki temu","faktem jest że","inaczej mówiÄ…c","innymi sÅ‚owy","jak dotÄ…d","jak już mówiÅ‚am","jak już mówiÅ‚em","jak już wspomniano","jak widać","jak wiemy","jako przykÅ‚ad","jednym sÅ‚owem","jeÅ›li chodzi o","jeżeli chodzi o","konkretnie to","krótko mówiÄ…c","łącznie z","majÄ…c to na uwadzÄ™","mam na myÅ›li","mamy na myÅ›li","mówiÄ…c w skrócie","na celu","na dÅ‚uższÄ… metÄ™","na dodatek","na koniec","na koÅ„cu","na przykÅ‚ad","na skutek","na wstÄ™p","na wypadek gdyby","na zakoÅ„czenie","nade wszystko","należy pamiÄ™tać","nawiasem mówiÄ…c","nie mówiÄ…c już","nie mówiÄ…c o tym","nie pomijajÄ…c","nie schodzÄ…c z tematu","nie wspominajÄ…c już","nie wspominajÄ…c o","nie wspominajÄ…c to","nie wspominajÄ…c że","nie zważajÄ…c na","o ile","o tyle","od czasu do czasu","od momentu","odnoÅ›nie do","ogólnie mówiÄ…c","ogólnie rzecz biorÄ…c","oprócz tego","oznacza to że","po czwarte","po drugie","po piÄ…te","po pierwsze","po to","po trzecie","pod warunkiem","podczas gdy","podczas kiedy","podobnym sposobem","ponad wszystko","poza tym","prawdÄ™ mówiÄ…c","prawdÄ™ powiedziawszy","prÄ™dzej czy później","przechodzÄ…c do","przede wszystkim","przez co","przez tÄ…","przez tego","przez to","przy tym","przypuÅ›ciwszy że","raz na jakiÅ› czas","rzecz jasna","Å›ciÅ›le biorÄ…c","Å›ciÅ›le mówiÄ…c","skutkiem tego","tak czy inaczej","tak czy owak","tak naprawdÄ™","takich jak","takie jak","to znaczy","tym samym","w celu","w ciÄ…gu","w dodatku","w efekcie","w innych sÅ‚owach","w istocie","w każdym razie","w koÅ„cu","w konsekwencji","w kwestii","w miÄ™dzyczasie","w nadziei że","w obawie że","w odróżnieniu","w podobny sposób","w podsumowaniu","w przeciwieÅ„stwie do","w przeciwnym razie","w przypadku","w rezultacie","w rozumieniu że","w rzeczy samej","w rzeczywistoÅ›ci","w skrócie","w szczególnoÅ›ci","w takim razie","w ten sposób","w tych okolicznoÅ›ciach","w tym przypadku","w wyniku","w wyniku tego","w zwiÄ…zku z tym","wbrew pozorom","włącznie z","wracajÄ…c do rzeczy","wracajÄ…c do tematu","wrÄ™cz przeciwnie","z drugiej strony","z drugiej zaÅ› strony","z jednej strony","z mocy że","z obawy że","z pewnoÅ›ciÄ…","z powodu","z przyczyny","z tÄ… intencjÄ…","z tego powodu","z uwagi że","zacznijmy od","zakÅ‚adajÄ…c że","ze wzglÄ™du na","ze wzglÄ™du że","zważywszy na to","zważywszy że"]);function w(a){let n=a;return a.forEach((o=>{(o=o.split("-")).length>0&&o.filter((n=>!a.includes(n))).length>0&&(n=n.concat(o))})),n}const y=["czterech","czterem","czterema","czternaÅ›cie","czternastce","czternastek","czternastka","czternastkÄ…","czternastkach","czternastkami","czternastkÄ™","czternastki","czternastko","czternastkom","czternastoma","czternastu","cztery","czwórce","czwórek","czwórka","czwórkÄ…","czwórkach","czwórkami","czwórkÄ™","czwórki","czwórko","czwórkom","czworo","dwa","dwadzieÅ›cia","dwanaÅ›cie","dwie","dwiema","dwóch","dwójce","dwoje","dwójek","dwójka","dwójkÄ…","dwójkach","dwójkami","dwójki","dwójko","dwójkom","dwóm","dwoma","dwudziestce","dwudziestek","dwudziestka","dwudziestkÄ…","dwudziestkach","dwudziestkami","dwudziestkÄ™","dwudziestki","dwudziestkom","dwudziestoma","dwudziestu","dwunastce","dwunastek","dwunastka","dwunastkÄ…","dwunastkach","dwunastkami","dwunastkÄ™","dwunastki","dwunastko","dwunastkom","dwunastoma","dwunastu","dziesiÄ…tce","dziesiÄ…tek","dziesiÄ…tka","dziesiÄ…tkÄ…","dziesiÄ…tkach","dziesiÄ…tkami","dziesiÄ…tkÄ™","dziesiÄ…tki","dziesiÄ…tko","dziesiÄ…tkom","dziesięć","dziesiÄ™cioma","dziesiÄ™ciu","dziewiÄ…tce","dziewiÄ…tek","dziewiÄ…tka","dziewiÄ…tkÄ…","dziewiÄ…tkach","dziewiÄ…tkami","dziewiÄ…tkÄ™","dziewiÄ…tki","dziewiÄ…tko","dziewiÄ…tkom","dziewięć","dziewiÄ™cioma","dziewiÄ™ciorga","dziewiÄ™ciorgiem","dziewiÄ™ciorgu","dziewiÄ™cioro","dziewiÄ™ciu","dziewiÄ™tnaÅ›cie","dziewiÄ™tnastce","dziewiÄ™tnastek","dziewiÄ™tnastka","dziewiÄ™tnastkÄ…","dziewiÄ™tnastkach","dziewiÄ™tnastkami","dziewiÄ™tnastkÄ™","dziewiÄ™tnastki","dziewiÄ™tnastkom","dziewiÄ™tnastoma","dziewiÄ™tnastu","jeden","jedenaÅ›cie","jedenastce","jedenastek","jedenastka","jedenastkÄ…","jedenastkach","jedenastkami","jedenastkÄ™","jedenastki","jedenastko","jedenastkom","jedenastoma","jedenastu","jedna","jednÄ…","jednego","jednej","jednemu","jedno","jednym","jedynce","jedynek","jedynka","jedynkÄ…","jedynkach","jedynkami","jedynkÄ™","jedynki","jedynko","jedynkom","miliard","miliarda","miliardach","miliardami","miliardem","miliardom","miliardów","miliardowi","miliardy","miliardzie","milion","miliona","milionach","milionami","milionem","milionie","milionom","milionów","milionowi","miliony","ósemce","ósemek","ósemka","ósemkÄ…","ósemkach","ósemkami","ósemkÄ™","ósemki","ósemko","ósemkom","osiem","osiemnaÅ›cie","osiemnastce","osiemnastek","osiemnastka","osiemnastkÄ…","osiemnastkach","osiemnastkam","osiemnastkÄ™","osiemnastki","osiemnastko","osiemnastkom","osiemnastoma","osiemnastu","oÅ›mioma","oÅ›miorga","oÅ›miorgiem","oÅ›miorgu","oÅ›mioro","oÅ›miu","piÄ…tce","piÄ…tek","piÄ…tka","piÄ…tkÄ…","piÄ…tkach","piÄ…tkami","piÄ…tkÄ™","piÄ…tki","piÄ…tko","piÄ…tkom","pięć","piÄ™cioma","piÄ™ciorga","piÄ™ciorgiem","piÄ™ciorgu","piÄ™cioro","piÄ™ciu","piÄ™tnaÅ›cie","piÄ™tnastce","piÄ™tnastek","piÄ™tnastka","piÄ™tnastkÄ…","piÄ™tnastkach","piÄ™tnastkami","piÄ™tnastkÄ™","piÄ™tnastki","piÄ™tnastko","piÄ™tnastkom","piÄ™tnastoma","piÄ™tnastu","raz","setce","setek","setka","setkach","setkami","setkÄ™","setki","setkom","siedem","siedemnaÅ›cie","siedemnastce","siedemnastek","siedemnastka","siedemnastkÄ…","siedemnastkach","siedemnastkami","siedemnastkÄ™","siedemnastki","siedemnastko","siedemnastkom","siedemnastoma","siedemnastu","siedmioma","siedmiorga","siedmiorgiem","siedmiorgu","siedmioro","siedmiu","siódemce","siódemek","siódemka","siódemkÄ…","siódemkach","siódemkami","siódemkÄ™","siódemki","siódemko","siódemkom","sto","stoma","stu","sześć","szeÅ›cioma","szeÅ›ciorga","szeÅ›ciorgiem","szeÅ›ciorgu","szeÅ›cioro","szeÅ›ciu","szesnaÅ›cie","szesnastce","szesnastek","szesnastka","szesnastkÄ…","szesnastkach","szesnastkami","szesnastkÄ™","szesnastki","szesnastko","szesnastkom","szesnastoma","szesnastu","szóstce","szóstek","szóstka","szóstkÄ…","szóstkach","szóstkami","szóstkÄ™","szóstki","szóstko","szóstkom","trójce","troje","trójek","trójka","trójkÄ…","trójkach","trójkami","trójki","trójko","trójkom","trzech","trzem","trzema","trzy","trzynaÅ›cie","trzynastce","trzynastek","trzynastka","trzynastkÄ…","trzynastkach","trzynastkami","trzynastkÄ™","trzynastki","trzynastko","trzynastkom","trzynastoma","trzynastu","tysiÄ…c","tysiÄ…ca","tysiÄ…cach","tysiÄ…cami","tysiÄ…ce","tysiÄ…cem","tysiÄ…com","tysiÄ…cowi","tysiÄ…cu","tysiÄ™cy"],r=["czternaÅ›ci","czternasta","czternastÄ…","czternaste","czternastego","czternastej","czternastemu","czternasty","czternastych","czternastym","czternastymi","czwarci","czwarta","czwartÄ…","czwarte","czwartego","czwartej","czwartemu","czwarty","czwartych","czwartym","czwartymi","drudzy","druga","drugÄ…","drugi","drugich","drugie","drugiego","drugiej","drugiemu","drugim","drugimi","dwudzieÅ›ci","dwudziesta","dwudziestÄ…","dwudzieste","dwudziestego","dwudziestej","dwudziestemu","dwudziesty","dwudziestych","dwudziestym","dwudziestymi","dwunaÅ›ci","dwunasta","dwunastÄ…","dwunaste","dwunastego","dwunastej","dwunastemu","dwunasty","dwunastych","dwunastym","dwunastymi","dziesiÄ…ci","dziesiÄ…ta","dziesiÄ…tÄ…","dziesiÄ…te","dziesiÄ…tego","dziesiÄ…tej","dziesiÄ…temu","dziesiÄ…ty","dziesiÄ…tych","dziesiÄ…tym","dziesiÄ…tymi","dziewiÄ…ci","dziewiÄ…ta","dziewiÄ…tÄ…","dziewiÄ…te","dziewiÄ…tego","dziewiÄ…tej","dziewiÄ…temu","dziewiÄ…ty","dziewiÄ…tych","dziewiÄ…tym","dziewiÄ…tymi","dziewiÄ™tnaÅ›ci","dziewiÄ™tnasta","dziewiÄ™tnastÄ…","dziewiÄ™tnaste","dziewiÄ™tnastego","dziewiÄ™tnastej","dziewiÄ™tnastemu","dziewiÄ™tnasty","dziewiÄ™tnastych","dziewiÄ™tnastym","dziewiÄ™tnastymi","jedenaÅ›ci","jedenasta","jedenastÄ…","jedenaste","jedenastego","jedenastej","jedenastemu","jedenasty","jedenastych","jedenastym","jedenastymi","osiemnaÅ›ci","osiemnasta","osiemnastÄ…","osiemnaste","osiemnastego","osiemnastej","osiemnastemu","osiemnasty","osiemnastych","osiemnastym","osiemnastymi","ósma","ósmÄ…","ósme","ósmego","ósmej","ósmemu","óśmi","ósmy","ósmych","ósmym","ósmymi","piÄ…ci","piÄ…ta","piÄ…tÄ…","piÄ…te","piÄ…tego","piÄ…tej","piÄ…temu","piÄ…ty","piÄ…tych","piÄ…tym","piÄ…tymi","pierwsi","pierwsza","pierwszÄ…","pierwsze","pierwszego","pierwszej","pierwszemu","pierwszy","pierwszych","pierwszym","pierwszymi","piÄ™tnaÅ›ci","piÄ™tnasta","piÄ™tnastÄ…","piÄ™tnaste","piÄ™tnastego","piÄ™tnastej","piÄ™tnastemu","piÄ™tnasty","piÄ™tnastych","piÄ™tnastym","piÄ™tnastymi","siedemnaÅ›ci","siedemnasta","siedemnastÄ…","siedemnaste","siedemnastego","siedemnastej","siedemnastemu","siedemnasty","siedemnastych","siedemnastym","siedemnastymi","siódma","siódmÄ…","siódme","siódmego","siódmej","siódmemu","siódmi","siódmy","siódmych","siódmym","siódmymi","szesnaÅ›ci","szesnasta","szesnastÄ…","szesnaste","szesnastego","szesnastej","szesnastemu","szesnasty","szesnastych","szesnastymi","szóści","szósta","szóstÄ…","szóste","szóstego","szóstej","szóstemu","szósty","szóstych","szóstym","szóstymi","trzeci","trzecia","trzeciÄ…","trzecich","trzecie","trzeciego","trzeciej","trzeciemu","trzecim","trzecimi","trzynaÅ›ci","trzynasta","trzynastÄ…","trzynaste","trzynastego","trzynastej","trzynastemu","trzynasty","trzynastych","trzynastym","trzynastymi"],p=["ja","my","on","ona","one","oni","ono","ty","wy"],s=["ciÄ™","ciebie","go","ich","jÄ…","je","jego","mnie","nas","niÄ…","nich","nie","niego","was"],t=["jej","niej"],d=["mi","ci","im","jemu","mu","nam","niemu","nim","tobie","wam"],c=["mnÄ…","nami","niÄ…","nim","nimi","tobÄ…","wami"],k=["myÅ›my","wyÅ›cie","żeÅ›cie","żeÅ›my"],u=["doÅ„","naÅ„","zeÅ„"],l=["ich","jego","jej","ma","mÄ…","me","mego","mej","memu","moi","moich","moim","moimi","mój","moja","mojÄ…","moje","mojego","mojej","mojemu","mych","mym","mymi","nasi","nasz","nasza","naszÄ…","nasze","naszego","naszej","naszemu","naszych","naszym","naszymi","swa","swÄ…","swe","swego","swej","swemu","swoi","swoich","swoim","swoimi","swój","swoja","swojÄ…","swoje","swojego","swojej","swojemu","swych","swym","swymi","twa","twÄ…","twe","twego","twej","twemu","twoi","twoich","twoim","twoimi","twój","twoja","twojÄ…","twoje","twojego","twojej","twojemu","twych","twym","twymi","wasi","wasz","wasza","waszÄ…","wasze","waszego","waszej","waszemu","waszych","waszym","waszymi"],m=["siÄ™"],b=["siebie","sobÄ…"],g=["czyi","czyich","czyim","czyimi","czyj","czyja","czyjÄ…","czyje","czyjego","czyjej","czyjemu","kim","kogo","komu","kto"],j=["czy","czyÅ›","czyÅ›byÅ›","dlaczego","dokÄ…d","dokÄ…dże","dokÄ…dżeÅ›","gdzie","gdzież","gdzieżeÅ›","ile","ileż","jak","jakbyÅ›","jakże","jakżebyÅ›","jakżeÅ›","kiedy","którÄ™dy","którÄ™dyż","skÄ…d","skÄ…dże","skÄ…dżeÅ›"],h=["co","czego","czemu","czym","jacy","jaka","jakÄ…","jaki","jakich","jakie","jakiego","jakiej","jakiemu","jakim","jakimi","która","którÄ…","które","którego","której","któremu","który","których","którym","którymi","którzy"],f=["coÅ›","czegoÅ›","czemuÅ›","czyichkolwiek","czyichÅ›","czyikolwiek","czyimikolwiek","czyimiÅ›","czyimkolwiek","czyimkolwiem","czyimÅ›","czyiÅ›","czyjakolwiek","czyjÄ…kolwiek","czyjaÅ›","czyjÄ…Å›","czyjegokolwiek","czyjegoÅ›","czyjejkolwiek","czyjejÅ›","czyjekolwiek","czyjemukolwiek","czyjemuÅ›","czyjeÅ›","czyjkolwiek","czymÅ›","dlaczegoÅ›","dokÄ…dkolwiek","dokÄ…dÅ›","gdziekolwiek","gdzieÅ›","ilekolwiek","ileÅ›","jacykolwiek","jacyÅ›","jakakolwiek","jakÄ…kolwiek","jakaÅ›","jakÄ…Å›","jakichkolwiek","jakichÅ›","jakiegokolwiek","jakiegoÅ›","jakiejkolwiek","jakiejÅ›","jakiekolwiek","jakiemukolwiek","jakiemuÅ›","jakieÅ›","jakikolwiek","jakimikolwiek","jakimkolwiek","jakimÅ›","jakiÅ›","jakkolwiek","jakoÅ›","każda","każdÄ…","każde","każdego","każdej","każdemu","każdy","każdym","kiedykolwiek","kiedyÅ›","kimkolwiek","kimÅ›","kogokolwiek","kogoÅ›","komukolwiek","komuÅ›","ktokolwiek","którakolwiek","którÄ…kolwiek","któraÅ›","którÄ…Å›","którÄ™dykolwiek","którÄ™dyÅ›","któregokolwiek","któregoÅ›","którejkolwiek","którejÅ›","którekolwiek","któremukolwiek","któremuÅ›","któreÅ›","którychkolwiek","którychÅ›","którykolwiek","którymikolwiek","którymiÅ›","którymkolwiek","którymÅ›","któryÅ›","którzykolwiek","którzyÅ›","ktoÅ›","nawzajem","nic","niczego","niczemu","niczyi","niczyich","niczyim","niczyimi","niczyj","niczyja","niczyjÄ…","niczyjego","niczyjej","niczyjemu","niczym","nikim","nikogo","nikogokolwiek","nikomu","nikt","skÄ…dkolwiek","skÄ…dÅ›","wszyscy","wszyskiego","wszystkich","wszystkie","wszystkiemu","wszystkim","wszystkimi","wszystko","żaden","żadna","żadnÄ…","żadne","żadnego","żadnej","żadnemu","żadni","żadnych","żadnym","żadnymi"],x=["ci","dlatego","ów","owa","owÄ…","owe","owego","owej","owemu","owi","owo","owych","owym","stÄ…d","stamtÄ…d","ta","tacy","tak","taka","takÄ…","taki","takich","takie","takiego","takiej","takiemu","takim","takimi","tam","tamci","tamta","tamtÄ…","tamte","tamtego","tamtej","tamtemu","tamten","tamto","tamtych","tamtym","tamtymi","tÄ…","te","tÄ™","tÄ™dy","tego","tegoż","tej","temu","ten","to","tu","tutaj","tych","tyle","tyloma","tylu","tym","tymi","wtedy"],P=["ciut","część","części","częściÄ…","częściach","częściami","częściom","dość","dosyć","dużo","kilka","kilkadziesiÄ…t","kilkanaÅ›cie","kilkaset","kilknasty","kilkoma","kilku","kilkudziesiÄ…te","kilkudziesiÄ…tego","kilkudziesiÄ…tej","kilkudziesiÄ…ty","kilkudziesiÄ…tych","kilkudziesiÄ…tym","kilkudziesiÄ…tymi","kilkudziesiÄ™cioma","kilkudziesiÄ™ciu","kilkunasta","kilkunastÄ…","kilkunaste","kilkunastego","kilkunastej","kilkunastemu","kilkunastoma","kilkunastu","kilkunastym","kilkuset","kilkustoma","kiludziesiÄ…ta","maÅ‚o","malutko","mniej","mnóstwa","mnóstwem","mnóstwie","mnóstwo","mnóstwu","multum","nadto","najmniej","najwiÄ™cej","nieco","niedużo","niejednokroć","niektóre","niektórzy","niektórych","niektórym","niektórymi","niemaÅ‚o","niewiele","niewieloma","niewielu","oba","obaj","obie","oboje","obojga","obojgiem","obojgu","obóm","oboma","obu","obydwa","obydwaj","obydwie","obydwiema","obydwóch","obydwoje","obydwojgiem","obydwojgu","obydwóm","obydwoma","obydwu","odrobinÄ…","odrobince","odrobinÄ™","odrobinie","odrobinkÄ…","odrobinkÄ™","odrobinki","odrobiny","parÄ™","parÄ™dziesiÄ…t","parÄ™dziesiÄ™cioma","parÄ™dziesiÄ™ciu","parÄ™naÅ›cie","parÄ™nastoma","parÄ™nastu","parokroć","paroma","paru","parze","peÅ‚no","pół","półczwarta","poÅ‚owa","poÅ‚owÄ…","poÅ‚owie","poÅ‚owy","półtora","półtorej","sporo","trochÄ™","trochu","troszeczkÄ™","troszkÄ™","wcale","wiÄ™cej","wiÄ™kszość","wiÄ™kszoÅ›ci","wiÄ™kszoÅ›ciÄ…","wiÄ™kszoÅ›ciach","wiÄ™kszoÅ›ciami","wiÄ™kszoÅ›ciom","wiele","wielokrotnie","wieloma","wielu"],S=["czasem","czÄ™sto","nigdy","rzadko","zawsze"],Z=["chcÄ…","chcÄ…c","chcÄ…ca","chcÄ…ce","chcÄ…cy","chce","chcÄ™","chcecie","chcemy","chcesz","chciaÅ‚","chciaÅ‚a","chciaÅ‚aby","chciaÅ‚abym","chciaÅ‚abyÅ›","chciaÅ‚am","chciaÅ‚aÅ›","chciaÅ‚by","chciaÅ‚bym","chciaÅ‚byÅ›","chciaÅ‚em","chciaÅ‚eÅ›","chciaÅ‚y","chciaÅ‚yby","chciaÅ‚ybyÅ›cie","chciaÅ‚ybyÅ›my","chciaÅ‚yÅ›cie","chciaÅ‚yÅ›my","chcieli","chcieliby","chcielibyÅ›cie","chcieliÅ›cie","chcieliÅ›my","chcono","ma","macie","majÄ…","majÄ…c","mam","mamy","masz","miaÅ‚","miaÅ‚a","miaÅ‚aby","miaÅ‚abym","miaÅ‚abyÅ›","miaÅ‚am","miaÅ‚aÅ›","miaÅ‚by","miaÅ‚bym","miaÅ‚byÅ›","miaÅ‚em","miaÅ‚eÅ›","miaÅ‚o","miaÅ‚oby","miaÅ‚y","miaÅ‚yby","miaÅ‚ybyÅ›cie","miaÅ‚ybyÅ›my","miaÅ‚yÅ›cie","miaÅ‚yÅ›my","miano","miej","miejÄ…ca","miejÄ…ce","miejÄ…cy","miejcie","miejmy","mieli","mieliby","mielibyÅ›cie","mielibyÅ›my","mieliÅ›cie","mieliÅ›my","mogÄ…","mogÄ…c","mogÄ…ca","mogÄ…ce","mogÄ…cy","mogÄ™","mógÅ‚","mogÅ‚a","mogÅ‚aby","mogÅ‚abym","mogÅ‚abyÅ›","mogÅ‚am","mogÅ‚aÅ›","mógÅ‚by","mógÅ‚bym","mógÅ‚byÅ›","mogÅ‚em","mogÅ‚eÅ›","mogli","mogliby","moglibyÅ›cie","moglibyÅ›my","mogliÅ›cie","mogliÅ›my","mogÅ‚y","mogÅ‚yby","mogÅ‚ybyÅ›cie","mogÅ‚ybyÅ›my","mogÅ‚yÅ›cie","mogÅ‚yÅ›my","może","możecie","możemy","możesz","można","możnaby","musi","musiaÅ‚","musiaÅ‚a","musiaÅ‚aby","musiaÅ‚abym","musiaÅ‚abyÅ›","musiaÅ‚am","musiaÅ‚aÅ›","musiaÅ‚by","musiaÅ‚bym","musiaÅ‚byÅ›","musiaÅ‚em","musiaÅ‚eÅ›","musiaÅ‚o","musiaÅ‚oby","musiaÅ‚y","musiaÅ‚yby","musiaÅ‚ybyÅ›cie","musiaÅ‚ybyÅ›my","musiaÅ‚yÅ›cie","musiaÅ‚yÅ›my","musiano","musicie","musieli","musieliby","musielibyÅ›cie","musielibyÅ›my","musieliÅ›cie","musieliÅ›my","musimy","musisz","muszÄ…","muszÄ…c","muszÄ…ca","muszÄ…ce","muszÄ…cy","muszÄ™","należy","niech","potrafi","potrafiÄ…","potrafiÄ…c","potrafiÄ…ca","potrafiÄ…ce","potrafiÄ…cy","potraficie","potrafiÄ™","potrafiÅ‚aby","potrafiÅ‚abym","potrafiÅ‚abyÅ›","potrafiÅ‚am","potrafiÅ‚aÅ›","potrafiÅ‚bym","potrafiÅ‚byÅ›","potrafiÅ‚em","potrafiÅ‚eÅ›","potrafili","potrafiliby","potrafilibyÅ›cie","potrafilibyÅ›my","potrafiliÅ›cie","potrafiliÅ›my","potrafiÅ‚o","potrafiÅ‚oby","potrafiÅ‚yby","potrafiÅ‚ybyÅ›cie","potrafiÅ‚ybyÅ›my","potrafiÅ‚yÅ›cie","potrafiÅ‚yÅ›my","potrafimy","potrafiono","potrafisz","powinien","powinienem","powinieneÅ›","powinna","powinnam","powinnaÅ›","powinne","powinni","powinniÅ›cie","powinniÅ›my","powinnyÅ›cie","powinnyÅ›my","pozostaje","stajÄ…","stajÄ…c","stajÄ…ca","stajÄ…ce","stajÄ…cy","staje","stajÄ™","stajecie","stajemy","stajesz","staÅ‚","staÅ‚a","staÅ‚aby","staÅ‚abym","staÅ‚abyÅ›","staÅ‚am","staÅ‚aÅ›","staÅ‚by","staÅ‚bym","staÅ‚byÅ›","staÅ‚em","staÅ‚eÅ›","stali","staliby","stalibyÅ›cie","stalibyÅ›my","staliÅ›cie","staliÅ›my","staÅ‚o","staÅ‚y","staÅ‚yby","staÅ‚ybyÅ›cie","staÅ‚ybyÅ›my","staÅ‚yÅ›cie","staÅ‚yÅ›my","stanie","stano","stawać","stawajÄ…c","stawajÄ…ca","stawajÄ…ce","stawajÄ…cy","stawaÅ‚","stawaÅ‚a","stawaÅ‚aby","stawaÅ‚abym","stawaÅ‚abyÅ›","stawaÅ‚abyÅ›cie","stawaÅ‚am","stawaÅ‚aÅ›","stawaÅ‚by","stawaÅ‚bym","stawaÅ‚byÅ›","stawaÅ‚em","stawaÅ‚eÅ›","stawali","stawaliby","stawalibyÅ›cie","stawalibyÅ›my","stawaliÅ›cie","stawaliÅ›my","stawaÅ‚y","stawaÅ‚yby","stawaÅ‚ybyÅ›my","stawaÅ‚yÅ›cie","stawaÅ‚yÅ›my","stawano","stawawszy","stawszy","trzeba","warto","wystarczy"],v=["być","zostać"],T=["chcieć","mieć","móc","musieć","potrafić","stać"],C=["bez","beze","blisko","daleko","dla","do","dole","dookoÅ‚a","górze","jako","koÅ‚o","ku","miÄ™dzy","mimo","na","nad","nade","naokoÅ‚o","naprzeciwko","niedaleko","nieopodal","niż","o","obok","od","ode","okoÅ‚o","oprócz","po","pod","podczas","pode","pomiÄ™dzy","ponad","poniżej","poprzek","poprzez","poÅ›ród","powyżej","poza","przeciw","przeciwko","przed","przede","przez","przeze","przy","spodem","spoÅ›ród","spoza","u","w","wbrew","we","wedle","wewnÄ…trz","wpół","wraz","wÅ›ród","wzdÅ‚uż","z","za","ze","zza"],O=["bliska","daleka","przodu","tyÅ‚u"],W=["albo","ani","bÄ…dź","i","lub","oraz","tylko"],U=["aż","by","czy","gdyby","jak","jeÅ›li","jeżeli","że"],R=["ano","ciÄ…gu","coraz","dziÄ™ki","chyba","jakby","jednoczeÅ›nie","jeszcze","już","nadal","nagle","znowu","prawdopodobnie","niestety","dziÅ›","dzisiaj","oczywiÅ›cie","wzglÄ™dem","m.in.","wÅ‚aÅ›nie","zaraz"],M=["bierz","bierzcie","bierzecie","bierzemy","bierzesz","bierzmy","biorÄ…","biorÄ…c","biorÄ…ca","biorÄ…ce","biorÄ…cy","biorÄ™","braÅ‚","braÅ‚a","braÅ‚aby","braÅ‚abym","braÅ‚abyÅ›","braÅ‚am","braÅ‚aÅ›","braÅ‚by","braÅ‚bym","braÅ‚byÅ›","braÅ‚em","braÅ‚eÅ›","brali","braliby","bralibyÅ›cie","bralibyÅ›my","braliÅ›cie","braliÅ›my","braÅ‚o","braÅ‚oby","braÅ‚y","braÅ‚yby","braÅ‚ybyÅ›cie","braÅ‚ybyÅ›my","braÅ‚yÅ›cie","braÅ‚yÅ›my","brany","da","dacie","dadzÄ…","daj","dajÄ…","dajÄ…c","dajÄ…ca","dajÄ…ce","dajÄ…cy","dajcie","daje","dajÄ™","dajecie","dajemy","dajesz","dajmy","daÅ‚","daÅ‚a","daÅ‚aby","daÅ‚abym","daÅ‚abyÅ›","daÅ‚am","daÅ‚aÅ›","daÅ‚by","daÅ‚bym","daÅ‚byÅ›","daÅ‚em","daÅ‚eÅ›","dali","daliby","dalibyÅ›cie","dalibyÅ›my","daliÅ›cie","daliÅ›my","daÅ‚o","daÅ‚oby","daÅ‚y","daÅ‚yby","daÅ‚ybyÅ›cie","daÅ‚ybyÅ›my","daÅ‚yÅ›cie","daÅ‚yÅ›my","dam","damy","dana","dano","dany","dasz","dawaj","dawajcie","dawajmy","dawaÅ‚","dawaÅ‚a","dawaÅ‚aby","dawaÅ‚abym","dawaÅ‚abyÅ›","dawaÅ‚am","dawaÅ‚aÅ›","dawaÅ‚by","dawaÅ‚bym","dawaÅ‚byÅ›","dawaÅ‚em","dawaÅ‚eÅ›","dawali","dawaliby","dawalibyÅ›cie","dawalibyÅ›my","dawaliÅ›cie","dawaliÅ›my","dawaÅ‚o","dawaÅ‚y","dawaÅ‚yby","dawaÅ‚ybyÅ›cie","dawaÅ‚ybyÅ›my","dawaÅ‚yÅ›cie","dawaÅ‚yÅ›my","dawana","dawane","dawano","dawany","idÄ…","idÄ…c","idÄ…ca","idÄ…ce","idÄ…cy","idÄ™","idź","idźcie","idzie","idziecie","idziemy","idziesz","idźmy","rób","róbcie","robi","robiÄ…","robiÄ…c","robiÄ…ca","robiÄ…ce","robiÄ…cy","robicie","robiÄ™","robiÅ‚","robiÅ‚a","robiÅ‚aby","robiÅ‚abym","robiÅ‚abyÅ›","robiÅ‚am","robiÅ‚aÅ›","robiÅ‚by","robiÅ‚bym","robiÅ‚byÅ›","robiÅ‚em","robiÅ‚eÅ›","robili","robilibiÅ›cie","robiliby","robilibyÅ›my","robiliÅ›cie","robiliÅ›my","robiÅ‚o","robiÅ‚y","robiÅ‚yby","robiÅ‚ybyÅ›cie","robiÅ‚ybyÅ›my","robiÅ‚yÅ›cie","robiÅ‚yÅ›my","robimy","robiono","robiony","robisz","róbmy","stanowi","stanowiÄ…","stanowiÅ‚y","stanowili","stoi","stoicie","stoimy","stoisz","stój","stojÄ…","stojÄ…c","stojÄ…ca","stojÄ…ce","stojÄ…cy","stójcie","stojÄ™","stójmy","Å›wiadczy","szedÅ‚","szedÅ‚by","szedÅ‚bym","szedÅ‚byÅ›","szedÅ‚em","szedÅ‚eÅ›","szÅ‚a","szÅ‚aby","szÅ‚abym","szÅ‚abyÅ›","szÅ‚am","szÅ‚aÅ›","szli","szliby","szlibyÅ›cie","szlibyÅ›my","szliÅ›cie","szliÅ›my","szÅ‚o","szÅ‚oby","szÅ‚y","szÅ‚yby","szÅ‚ybyÅ›cie","szÅ‚ybyÅ›my","szÅ‚yÅ›cie","uprawia","uprawiacie","uprawiajÄ…","uprawiajÄ…c","uprawiajÄ…ca","uprawiajÄ…ce","uprawiajÄ…cy","uprawiaÅ‚","uprawiaÅ‚a","uprawiaÅ‚aby","uprawiaÅ‚abym","uprawiaÅ‚abyÅ›","uprawiaÅ‚am","uprawiaÅ‚aÅ›","uprawiaÅ‚by","uprawiaÅ‚bym","uprawiaÅ‚byÅ›","uprawiaÅ‚em","uprawiaÅ‚eÅ›","uprawiali","uprawialiby","uprawialibyÅ›cie","uprawialibyÅ›my","uprawialiÅ›cie","uprawialiÅ›my","uprawiaÅ‚o","uprawiaÅ‚oby","uprawiaÅ‚y","uprawiaÅ‚yby","uprawiaÅ‚ybyÅ›cie","uprawiaÅ‚ybyÅ›my","uprawiaÅ‚yÅ›cie","uprawiaÅ‚yÅ›my","uprawiam","uprawiamy","uprawiana","uprawiane","uprawiano","uprawiany","uprawiasz","weź","weźcie","wezmÄ…","wezmÄ™","weźmie","weźmiecie","weźmiemy","weźmiesz","weźmy","wykonuj","wykonujÄ…","wykonujÄ…c","wykonujÄ…ca","wykonujÄ…ce","wykonujÄ…cy","wykonujcie","wykonuje","wykonujÄ™","wykonujecie","wykonujemy","wykonujesz","wykonujmy","wykonywaÅ‚","wykonywaÅ‚a","wykonywaÅ‚aby","wykonywaÅ‚abym","wykonywaÅ‚abyÅ›","wykonywaÅ‚am","wykonywaÅ‚aÅ›","wykonywaÅ‚by","wykonywaÅ‚bym","wykonywaÅ‚byÅ›","wykonywaÅ‚em","wykonywaÅ‚eÅ›","wykonywali","wykonywaliby","wykonywalibyÅ›cie","wykonywalibyÅ›my","wykonywaliÅ›cie","wykonywaliÅ›my","wykonywaÅ‚o","wykonywaÅ‚oby","wykonywaÅ‚y","wykonywaÅ‚yby","wykonywaÅ‚ybyÅ›cie","wykonywaÅ‚ybyÅ›my","wykonywaÅ‚yÅ›cie","wykonywaÅ‚yÅ›my","wykonywana","wykonywane","wykonywany","wziÄ…Å‚","wziÄ…Å‚by","wziÄ…Å‚bym","wziÄ…Å‚byÅ›","wziÄ…Å‚em","wziÄ…Å‚eÅ›","wziÄ…wszy","wzięła","wzięłaby","wzięłabym","wzięłabyÅ›","wzięłam","wzięłaÅ›","wziÄ™li","wziÄ™liby","wziÄ™libyÅ›cie","wziÄ™libyÅ›my","wziÄ™liÅ›cie","wziÄ™liÅ›my","wzięło","wzięłoby","wzięły","wzięłyby","wzięłybyÅ›cie","wzięłybyÅ›my","wzięłyÅ›cie","wzięłyÅ›my","zrób","zróbcie","zrobi","zrobiÄ…","zrobiÄ…c","zrobiÄ…ca","zrobiÄ…ce","zrobiÄ…cy","zrobicie","zrobiÄ™","zrobiÅ‚","zrobiÅ‚a","zrobiÅ‚aby","zrobiÅ‚abym","zrobiÅ‚abyÅ›","zrobiÅ‚am","zrobiÅ‚aÅ›","zrobiÅ‚by","zrobiÅ‚bym","zrobiÅ‚byÅ›","zrobiÅ‚em","zrobiÅ‚eÅ›","zrobili","zrobilibiÅ›cie","zrobiliby","zrobilibyÅ›my","zrobiliÅ›cie","zrobiliÅ›my","zrobiÅ‚o","zrobiÅ‚y","zrobiÅ‚yby","zrobiÅ‚ybyÅ›cie","zrobiÅ‚ybyÅ›my","zrobiÅ‚yÅ›cie","zrobiÅ‚yÅ›my","zrobimy","zrobiono","zrobiony","zrobisz","zróbmy","powinno","bywa","wiedzieć","znać","wiedziaÅ‚","wiedziaÅ‚a","wiedziaÅ‚y","wiedzieli","znaÅ‚","znaÅ‚a","znali","znaÅ‚y","powie","wie","zna","zobaczy","powiedzÄ…","powiedziano","powiem","wiedzÄ…","wiedzÄ…ce","wiedzÄ…cy","wiedziaÅ‚o","wiedziano","wiem","znajÄ…","znajÄ…ce","znajÄ…cy","znaÅ‚o","znam","znane","znano","zobaczÄ…","zobaczÄ™","zobaczone","zobaczono","powiecie","powiedz","powiedzcie","powiedzenie","powiedziaÅ‚","powiedziaÅ‚a","powiedziaÅ‚aby","powiedziaÅ‚abym","powiedziaÅ‚abyÅ›","powiedziaÅ‚am","powiedziaÅ‚aÅ›","powiedziaÅ‚by","powiedziaÅ‚bym","powiedziaÅ‚byÅ›","powiedziaÅ‚em","powiedziaÅ‚eÅ›","powiedziaÅ‚o","powiedziaÅ‚oby","powiedziaÅ‚y","powiedziaÅ‚yby","powiedziaÅ‚ybyÅ›cie","powiedziaÅ‚ybyÅ›my","powiedziaÅ‚yÅ›cie","powiedziaÅ‚yÅ›my","powiedziawszy","powiedzieć","powiedzieli","powiedzieliby","powiedzielibyÅ›cie","powiedzielibyÅ›my","powiedzieliÅ›cie","powiedzieliÅ›my","powiedzmy","powiemy","powiesz","wiecie","wiedz","wiedzÄ…c","wiedzÄ…ca","wiedzcie","wiedziaÅ‚aby","wiedziaÅ‚abym","wiedziaÅ‚abyÅ›","wiedziaÅ‚am","wiedziaÅ‚aÅ›","wiedziaÅ‚by","wiedziaÅ‚bym","wiedziaÅ‚byÅ›","wiedziaÅ‚em","wiedziaÅ‚eÅ›","wiedziaÅ‚oby","wiedziaÅ‚yby","wiedziaÅ‚ybyÅ›cie","wiedziaÅ‚ybyÅ›my","wiedziaÅ‚yÅ›cie","wiedziaÅ‚yÅ›my","wiedzieliby","wiedzielibyÅ›cie","wiedzielibyÅ›my","wiedzieliÅ›cie","wiedzieliÅ›my","wiedzmy","wiemy","wiesz","znacie","znaj","znajÄ…c","znajÄ…ca","znajcie","znajmy","znaÅ‚aby","znaÅ‚abym","znaÅ‚abyÅ›","znaÅ‚am","znaÅ‚aÅ›","znaÅ‚by","znaÅ‚bym","znaÅ‚byÅ›","znaÅ‚em","znaÅ‚eÅ›","znaliby","znalibyÅ›cie","znalibyÅ›my","znaliÅ›cie","znaliÅ›my","znaÅ‚oby","znaÅ‚yby","znaÅ‚ybyÅ›cie","znaÅ‚ybyÅ›my","znaÅ‚yÅ›cie","znaÅ‚yÅ›my","znamy","znana","znani","znanie","znany","znasz","zobacz","zobaczcie","zobaczeni","zobaczenie","zobaczmy","zobaczona","zobaczony","zobaczyć","zobaczycie","zobaczyÅ‚","zobaczyÅ‚a","zobaczyÅ‚aby","zobaczyÅ‚abym","zobaczyÅ‚abyÅ›","zobaczyÅ‚am","zobaczyÅ‚aÅ›","zobaczyÅ‚by","zobaczyÅ‚bym","zobaczyÅ‚byÅ›","zobaczyÅ‚em","zobaczyÅ‚eÅ›","zobaczyli","zobaczyliby","zobaczylibyÅ›cie","zobaczylibyÅ›my","zobaczyliÅ›cie","zobaczyliÅ›my","zobaczyÅ‚o","zobaczyÅ‚oby","zobaczyÅ‚y","zobaczyÅ‚yby","zobaczyÅ‚ybyÅ›cie","zobaczyÅ‚ybyÅ›my","zobaczyÅ‚yÅ›cie","zobaczyÅ‚yÅ›my","zobaczymy","zobaczysz","zobaczywszy"],A=["brać","dać","dawać","iść","robić","stanowić","uprawiać","wykonywać","wziąć","zrobić"],E=["informowali","informowaÅ‚y","informujÄ…","informuje","informujÄ™","mówi","mówiÄ…","mówiÄ™","mówiÅ‚","mówiÅ‚a","mówili","mówiÅ‚y","odpowiada","odpowiadajÄ…","odpowiadam","odpowiedziaÅ‚","odpowiedziaÅ‚a","odpowiedziaÅ‚am","odpowiedziaÅ‚y","odpowiedzieli","odwiedziaÅ‚am","poinformowaÅ‚am","poinformowali","poinformowaÅ‚y","powiedziaÅ‚","powiedziaÅ‚a","powiedziaÅ‚am","powiedziaÅ‚y","powiedzieli","pyta","pytać","pytaÅ‚","pytaÅ‚a","pytaÅ‚am","pytali","pytaÅ‚y","pytam","sÄ…dzÄ…","sÄ…dzÄ™","sÄ…dzi","sÄ…dzić","sÄ…dziÅ‚am","sÄ…dzili","sÄ…dziÅ‚y","spytaÅ‚","spytaÅ‚a","spytaÅ‚am","spytali","spytaÅ‚y","stwierdziaÅ‚y","stwierdzieli","stwierdziÅ‚","stwierdziÅ‚a","stwierdziÅ‚am","twierdzÄ…","twierdzÄ™","twierdzi","twierdziaÅ‚y","twierdzić","twierdzieli","twierdziÅ‚","twierdziÅ‚a","twierdziÅ‚am","uważa","uważajÄ…","uważaÅ‚","uważaÅ‚a","uważali","uważaÅ‚y","uważam","wyjaÅ›nia","wyjaÅ›niać","wyjaÅ›niajÄ…","wyjaÅ›niam","wyjaÅ›niÅ‚","wyjaÅ›niÅ‚a","wyjaÅ›nili","wyjaÅ›niÅ‚y","zapytaÅ‚","zapytaÅ‚a","zapytaÅ‚am","zapytali","zapytaÅ‚y","zaznacza","zaznaczajÄ…","zaznaczam","zaznaczyÅ‚","zaznaczyÅ‚a","zaznaczyÅ‚am","zaznaczyli","zaznaczyÅ‚y"],D=["bardziej","bardzo","caÅ‚kiem","caÅ‚kowicie","doskonale","dość","dosyć","kompletnie","najbardziej","naprawdÄ™","nawet","nieco","niezbyt","niezmiernie","niezwykle","ogromnie","strasznie","Å›wietnie","wielce","wyjÄ…tkowo","zbyt","znacznie","zupeÅ‚nie"],L=["caÅ‚a","całą","caÅ‚e","caÅ‚ego","caÅ‚ej","caÅ‚emu","cali","caÅ‚y","caÅ‚ych","caÅ‚ym","caÅ‚ymi","ciekawa","ciekawÄ…","ciekawe","ciekawego","ciekawej","ciekawemu","ciekawi","ciekawy","ciekawych","ciekawym","ciekawymi","dÅ‚udzy","dÅ‚uga","dÅ‚ugÄ…","dÅ‚ugi","dÅ‚ugich","dÅ‚ugie","dÅ‚ugiego","dÅ‚ugiej","dÅ‚ugiemu","dÅ‚ugim","dÅ‚ugimi","dÅ‚użsi","dÅ‚uższa","dÅ‚uższÄ…","dÅ‚uższe","dÅ‚uższego","dÅ‚uższej","dÅ‚uższemu","dÅ‚uższy","dÅ‚uższych","dÅ‚uższym","dÅ‚uższymi","dobra","dobrÄ…","dobre","dobrego","dobrej","dobremu","dobry","dobrych","dobrym","dobrymi","dobrzy","fajna","fajnÄ…","fajne","fajnego","fajnej","fajnemu","fajni","fajny","fajnych","fajnym","fajnymi","główna","głównÄ…","główne","głównego","głównej","głównemu","główni","główny","głównych","głównym","głównymi","inna","innÄ…","inne","innego","innej","innemu","inni","inny","innych","innym","innymi","krótcy","krótka","krótkÄ…","krótki","krótkich","krótkie","krótkiego","krótkiej","krótkiemu","krótkim","krótkimi","krótsi","krótsza","krótszÄ…","krótsze","krótszego","krótszej","krótszemu","krótszych","krótszym","krótszymi","Å‚atwe","Å‚atwego","Å‚atwiejsze","Å‚atwym","lepsi","lepsza","lepszÄ…","lepsze","lepszego","lepszej","lepszemu","lepszy","lepszych","lepszym","lepszymi","maÅ‚a","małą","maÅ‚e","maÅ‚ego","maÅ‚ej","maÅ‚emu","mali","maÅ‚y","maÅ‚ych","maÅ‚ym","maÅ‚ymi","mniejsi","mniejsza","mniejszÄ…","mniejsze","mniejszego","mniejszej","mniejszemu","mniejszy","mniejszych","mniejszym","mniejszymi","najdÅ‚użsi","najdÅ‚uższa","najdÅ‚uższÄ…","najdÅ‚uższe","najdÅ‚uższego","najdÅ‚uższej","najdÅ‚uższemu","najdÅ‚uższy","najdÅ‚uższych","najdÅ‚uższym","najdÅ‚uższymi","najkrótsi","najkrótsza","najkrótszÄ…","najkrótsze","najkrótszego","najkrótszej","najkrótszemu","najkrótszych","najkrótszym","najkrótszymi","najÅ‚atwiejsze","najlepsi","najlepsza","najlepszÄ…","najlepsze","najlepszego","najlepszej","najlepszemu","najlepszych","najlepszym","najlepszymi","najmniejsi","najmniejsza","najmniejszÄ…","najmniejsze","najmniejszego","najmniejszej","najmniejszemu","najmniejszy","najmniejszych","najmniejszym","najmniejszymi","najniżsi","najniższa","najniższÄ…","najniższe","najniższego","najniższej","najniższemu","najniższy","najniższych","najniższym","najniższymi","najtrudniejsze","najwiÄ™ksi","najwiÄ™ksza","najwiÄ™kszÄ…","najwiÄ™ksze","najwiÄ™kszego","najwiÄ™kszej","najwiÄ™kszemu","najwiÄ™kszych","najwiÄ™kszym","najwiÄ™kszymi","najwyżsi","najwyższa","najwyższÄ…","najwyższe","najwyższego","najwyższej","najwyższemu","najwyższy","najwyższych","najwyższym","najwyższymi","nastÄ™pna","nastÄ™pnÄ…","nastÄ™pne","nastÄ™pnego","nastÄ™pnej","nastÄ™pni","nastÄ™pny","nastÄ™pnych","nastÄ™pnym","nastÄ™pnymi","niewÅ‚aÅ›ciwa","niewÅ‚aÅ›ciwÄ…","niewÅ‚aÅ›ciwe","niewÅ‚aÅ›ciwego","niewÅ‚aÅ›ciwej","niewÅ‚aÅ›ciwemu","niewÅ‚aÅ›ciwi","niewÅ‚aÅ›ciwy","niewÅ‚aÅ›ciwych","niewÅ‚aÅ›ciwym","niewÅ‚aÅ›ciwymi","niscy","niska","niskÄ…","niski","niskich","niskie","niskiego","niskiej","niskiemu","niskim","niskimi","niżsi","niższa","niższÄ…","niższe","niższego","niższej","niższemu","niższy","niższych","niższym","niższymi","ostatni","ostatnia","ostatniÄ…","ostatnich","ostatnie","ostatniego","ostatniej","ostatniemu","ostatnim","ostatnimi","poprzedni","poprzednia","poprzedniÄ…","poprzednich","poprzednie","poprzedniego","poprzedniej","poprzedniemu","poprzednim","poprzednimi","sam","sama","samÄ…","same","samego","samej","samemu","sami","samo","samych","samym","samymi","trudne","trudnego","trudniejsze","trudnym","wiÄ™ksi","wiÄ™ksza","wiÄ™kszÄ…","wiÄ™ksze","wiÄ™kszego","wiÄ™kszej","wiÄ™kszemu","wiÄ™kszych","wiÄ™kszym","wiÄ™kszymi","wielcy","wielka","wielkÄ…","wielki","wielkich","wielkie","wielkiego","wielkiej","wielkiemu","wielkim","wielkimi","wÅ‚aÅ›ciwa","wÅ‚aÅ›ciwÄ…","wÅ‚aÅ›ciwe","wÅ‚aÅ›ciwego","wÅ‚aÅ›ciwej","wÅ‚aÅ›ciwemu","wÅ‚aÅ›ciwi","wÅ‚aÅ›ciwy","wÅ‚aÅ›ciwych","wÅ‚aÅ›ciwym","wÅ‚aÅ›ciwymi","wysocy","wysoka","wysokÄ…","wysoki","wysokich","wysokie","wysokiego","wysokiej","wysokiemu","wysokim","wysokimi","wyżsi","wyższa","wyższÄ…","wyższe","wyższego","wyższej","wyższemu","wyższy","wyższych","wyższym","wyższymi","kolejne","różne","zÅ‚e","kolejnych","różnych","zÅ‚ych","kolejnego","kolejnej","kolejny","kolejnym","różnego","różnej","różny","różnym","zÅ‚ego","zÅ‚ej","zÅ‚y","zÅ‚ym","kolejna","kolejnÄ…","kolejnemu","kolejni","kolejnymi","różna","różnÄ…","różnemu","różni","różnymi","zÅ‚a","złą","zÅ‚emu","źli","zÅ‚ymi"],F=["blisko","bliżej","ciÄ…gle","ciężko","czasami","czasem","częściej","czÄ™sto","dalej","daleko","dawniej","dawno","dobrze","dopiero","fajnie","fajniej","gorzej","inaczej","Å‚adnie","Å‚atwiej","Å‚atwo","lepiej","najbliżej","najczęściej","najdalej","najdawniej","najfajniej","najgorzej","najÅ‚atwiej","najlepiej","najniżej","najpóźniej","najproÅ›ciej","najszybciej","najtrudniej","najwczeÅ›niej","najwyżej","naprawdÄ™","niedaleko","niedawno","nisko","niżej","ostatnio","pewno","póżniej","późno","prawie","proÅ›ciej","prosto","prostu","szybciej","szybko","trochÄ™","trudniej","trudno","wczeÅ›nie","wczeÅ›niej","wolno","wszÄ™dzie","wysoko","wyżej","zazwyczaj","źle","jedynie","obecnie","teraz","szczególnie","zwykle"],_=["dni","dnia","dniach","dniami","dnie","dzieÅ„","dzisiaj","godzin","godzina","godzinach","godzinami","godzinÄ™","godziny","jutro","lata","latach","latami","miesiÄ…c","miesiÄ…ca","miesiÄ…cach","miesiÄ…cami","miesiÄ…ce","miesiÄ…cem","miesiÄ…cu","miesiÄ™cy","minut","minuta","minutach","minutÄ™","minuty","pojutrze","przedwczoraj","rok","rokiem","roku","sekund","sekunda","sekundach","sekundÄ™","sekundy","tydzieÅ„","tygodni","tygodnia","tygodniach","tygodniami","tygodnie","tygodniu","wczoraj"],B=["chwila","chwilÄ…","chwilach","chwilami","chwile","chwilÄ™","chwili","chwilom","część","części","częściÄ…","częściach","częściami","częściom","momencie","moment","ogóle","osób","osoba","osobÄ…","osobach","osobami","osobÄ™","osobie","osobom","osoby","powód","powodach","powodami","powodem","powodom","powodów","powodowi","powodu","powody","powodzie","przypadkiem","przypadku","raz","razach","razami","razem","razie","razom","razów","razowi","razu","razy","rodzaj","rodzajach","rodzajami","rodzajem","rodzajom","rodzajów","rodzajowi","rodzaju","rzecz","rzeczÄ…","rzeczach","rzeczami","rzeczom","rzeczy","sposób","sposobem","sprawa","sprawÄ…","sprawach","sprawami","sprawÄ™","sprawie","sprawom","sprawy","temacie","temat","tematach","tematami","tematem","tematom","tematów","tematowi","tematu","tematy"],q=["dr","dyr","mgr","p","pan","pani","panie","panowie","prof","hab"],G=["a","ach","aha","aj","akurat","aÅ‚","aua","auć","ba","brawo","e","ech","ehe","ehm","ej","ejże","ekhm","ekstra","jej","jejku","Å‚aÅ‚","och","oh","oho","oj","ojej","ojejku","phi","precz","super","uwaga","wow"],H=["°C","°F","ar","ary","arów","arach","c","cl","cm","cm²","cm³","dag","deka","dl","f","ft","g","gram","gramów","gramy","ha","hektar","hektary","hektarów","hektarach","in","kg","kilo","km","km²","cm³","l","litr","litrów","litry","Å‚yżeczka","Å‚yżeczkÄ™","Å‚yżeczki","Å‚yżka","Å‚yżkÄ™","Å‚yżki","m","m²","m³","mg","ml","mm","mm²","mm³","szczypta","szczyptÄ™","szczypty","szklanka","szklankÄ™","szklanki","tuzin"],I=["nie","no","oto","tak","sobie","ok","okej","itp","itd","tzw"],J=(w([].concat(r,L,F,A,T,v)),w([].concat(C,W,x,P,D,l,m,b)),w([].concat(z,R,y,p,s,t,d,c,k,u,g,j,h,f,S,O,U,M,E,_,B,q,G,H,I,Z)),w([].concat(C,k,l,y,r,M,A,E,h,g,j))),K=w([].concat(Z,T,m)),N=w([].concat(z,R,y,p,s,t,d,c,k,u,g,j,h,f,S,Z,O,U,M,E,_,B,q,G,H,I,["bÄ…dź","bÄ…dźcie","bÄ…dźmy","bÄ™dÄ…","bÄ™dÄ…c","bÄ™dÄ™","bÄ™dzie","bÄ™dziecie","bÄ™dziemy","bÄ™dziesz","by","byÅ‚","byÅ‚a","byÅ‚aby","byÅ‚abym","byÅ‚abyÅ›","byÅ‚am","byÅ‚aÅ›","byÅ‚by","byÅ‚bym","byÅ‚byÅ›","byÅ‚em","byÅ‚eÅ›","byli","byliby","bylibyÅ›cie","bylibyÅ›my","byliÅ›cie","byliÅ›my","byÅ‚o","byÅ‚oby","byÅ‚y","byÅ‚yby","byÅ‚ybyÅ›cie","byÅ‚ybyÅ›my","byÅ‚yÅ›cie","byÅ‚yÅ›my","bym","byÅ›","byÅ›cie","byÅ›my","byto","bywaÅ‚o","jest","jestem","jesteÅ›","jesteÅ›cie","jesteÅ›my","sÄ…","zostajÄ…","zostajÄ…c","zostajÄ…ca","zostajÄ…ce","zostajÄ…cy","zostaje","zostajÄ™","zostajecie","zostajemy","zostajesz","zostaÅ‚","zostaÅ‚a","zostaÅ‚aby","zostaÅ‚abym","zostaÅ‚abyÅ›","zostaÅ‚am","zostaÅ‚aÅ›","zostaÅ‚by","zostaÅ‚bym","zostaÅ‚byÅ›","zostaÅ‚em","zostaÅ‚eÅ›","zostali","zostaliby","zostalibyÅ›cie","zostalibyÅ›my","zostaliÅ›cie","zostaliÅ›my","zostaÅ‚o","zostaloby","zostaÅ‚y","zostaÅ‚yby","zostaÅ‚ybyÅ›cie","zostaÅ‚ybyÅ›my","zostaÅ‚yÅ›cie","zostaÅ‚yÅ›my","zostaÅ„","zostanÄ…","zostaÅ„cie","zostanÄ™","zostanie","zostaniecie","zostaniemy","zostaniesz","zostaÅ„my","zostawaÅ‚o","zostawano","zostawszy"],C,W,x,P,D,l,m,b,r,L,F,A,T,v)),Q=["a","aby","albo","albowiem","ale","bo","bowiem","czy","gdy","gdyby","gdyż","iż","jeÅ›li","jeżeli","lub","ponieważ","zanim","żeby","który","która","które","którzy","którego","której","których","któremu","którym","którÄ…","którymi","że"],V=[["albo","albo"],["ani","ani"],["czy","czy"],["im","tym"],["tak","jak"]],X={percentages:{slightlyTooMany:15,farTooMany:20},cornerstonePercentages:{slightlyTooMany:15,farTooMany:20}},Y=window.lodash,$=["abdykowany","absorbowany","adaptowany","administrowany","adoptowany","adorowany","adresowany","afiszowany","agitowany","akcentowany","akceptowany","aklimatyzowany","akompaniowany","aktualizowany","aktywowany","akumulowany","alaromowany","alienowany","amerykanizowany","amortyzowany","amputowany","analizowany","angażowany","anihilowany","animowany","anonsowany","antropomorfizowany","antydatowany","anulowany","apelowany","aportowany","aranżowany","archiwizowany","aresztowany","argumentowany","artykuÅ‚owany","ascendowany","asekurowany","asymilowany","asystowany","atakowany","autoryzowany","awanturowany","babrany","baczony","badany","bagatelizowany","bajerowany","baÅ‚amucony","balangowany","balansowany","banalizowany","bandażowany","bankrutowany","baraszkowany","barwiony","bawiony","bazgrany","bazowany","bÄ™bniony","beÅ‚kotany","besztany","biadolony","biczowany","bity","bÅ‚agany","bÅ‚aznowany","blefowany","bÅ‚ogosÅ‚awiony","blokowany","bluzgany","bÅ‚yskany","bÅ‚yszczÄ…cy","boczony","bogacony","bojkotowany","boksowany","bombardowany","bopowany","borowany","brandzlowany","brany","brasowany","bratany","bredzony","brniÄ™ty","brodzony","broniony","brudzony","brylowany","budowany","budzony","bujany","bulony","bulwersowany","bumelowany","burzony","butelkowany","bywany","cackany","caÅ‚owany","capniÄ™ty","cechowany","celebrowany","celowany","ceniony","cenzurowany","chciany","chlany","chlapany","chlapniÄ™ty","chlastany","chÅ‚odzony","chlostany","chlubiony","chodowany","chomikowany","chorowany","chowany","chroniony","chrupany","chrzczony","chuty","chwalony","chwycony","chwytany","chybotany","chylony","ciachniÄ™ty","ciÄ…gany","ciÄ…gniÄ™ty","ciemiężony","cierpiany","cieszony","ciÄ™ty","ciskany","ciÅ›niÄ™ty","ciuÅ‚any","cmokany","cmokniÄ™ty","cofany","cofniÄ™ty","ćpany","cucony","cudzoÅ‚ożony","cumowany","ćwiartowany","ćwiczony","cykany","cytowany","czajony","czarowany","czczony","czepiany","czepiony","czerpany","czesany","czÄ™stowany","czochrany","czoÅ‚gany","czuty","czytany","czyty","darowany","darty","darzony","datowany","dawany","dbany","deaktywowany","debatowany","dedukowany","dedykowany","defibrylowany","defilowany","definiowany","defraudowany","degradowany","degustowany","deklamowany","deklarowany","dekodowany","dekompresowany","dekorowany","dekretowany","delegowany","delektowany","deliberowany","demaskowany","dementowany","demolowany","demonizowany","demonstrowany","demoralizowany","denerwowany","denuncjowany","depeszowany","depilowany","deportowany","deprawowany","deptany","deratyzowany","destabilizowany","destylowany","desygnowany","determinowany","detonowany","dewastowany","dewaulowany","dezaktywowany","dezorientowany","dezynfekowany","diagnozowany","dilowany","dÅ‚ubany","dÅ‚użony","dmuchany","dmuchniÄ™ty","dobiegany","dobierany","dobijany","dobity","dobrany","dobudzony","dobyty","doceniany","doceniony","dochodzony","dochowany","dochowywany","dociÄ…gniÄ™ty","dociekany","dociÄ™ty","docinany","dociskany","dociÅ›niÄ™ty","doczekany","doczepiony","doczoÅ‚gany","doczyszczony","doczytany","dodany","dodawany","dodrukowany","dodrukowywany","dofinansowany","dofinansowywany","dogadany","dogadywany","dogadzany","doganiany","doglÄ…dany","doglÄ…dniÄ™ty","dognany","dogodzony","dogoniony","dograny","dogryzany","dogryziony","dogrzany","dogrzebany","doinformowany","dojeżdżany","dojony","dojrzany","dojrzewany","dokaÅ„czany","dokarmiany","dokarmiony","dokazany","dokazywany","dokÅ‚adany","doklejony","dokonany","dokoÅ„czony","dokonywany","dokopany","dokopywany","dokowany","dokrÄ™cany","dokrÄ™cony","doksztaÅ‚cany","doksztaÅ‚cony","dokuczany","dokumentowany","dokupiony","dołączany","dołączony","doÅ‚adowany","dolany","dolewany","doliczony","doÅ‚owany","doÅ‚ożony","domagany","domalowany","domkniÄ™ty","domniewywany","domówiony","domyÅ›lany","domyÅ›lony","domyty","doniesiony","donoszony","dopadany","dopadniÄ™ty","dopakowany","dopalony","dopasowany","dopasowywany","dopatrywany","dopatrzony","dopchany","dopchniÄ™ty","dopeÅ‚niany","dopeÅ‚niony","dopieszczony","dopiÄ™ty","dopijany","dopilnowany","dopingowany","dopisany","dopisywany","dopity","dopÅ‚acany","dopÅ‚acony","dopÅ‚yniÄ™ty","dopolerowany","dopompowany","dopowiedziany","dopracowany","dopracowywany","doprany","doprawiony","doprecyzowany","doproszony","doprowadzany","doprowadzony","dopucowany","dopuszczany","dopuszczony","dopytywany","dorabiany","doradzany","doradzony","dorÄ™czany","dorÄ™czony","dorobiony","dorównany","dorównywany","dorwany","dorysowany","dorzucany","dorzucony","doÅ›cigniÄ™ty","dosiadany","dosiÄ™gniÄ™ty","doskoczony","doskonalony","dosÅ‚adzany","dosÅ‚any","dosÅ‚yszany","dosolony","doÅ›rodkowany","dossany","dostany","dostÄ…piony","dostarczany","dostarczony","dostawany","dostawiany","dostawiony","dostosowany","dostosowywany","dostrajany","dostrojony","dostrzegany","dosuniÄ™ty","dosuwany","doÅ›wiadczany","DoÅ›wietlony","dosypany","dosypywany","doszkolony","doszlifowany","doszorowany","doszukany","doszukiwany","doszyty","dotankowany","dotankowywany","dotargany","dotaszczony","dotkniÄ™ty","dotleniony","dotÅ‚umaczony","dotowany","dotrwany","dotrzymany","dotrzymywany","dotykany","douczany","douczony","dowalony","dowieziony","dowodzony","dowożony","doznany","doznawany","dozorowany","dozowany","dożyty","dożywiony","dramatyzowany","drapany","drapniÄ™ty","draÅ›niÄ™ty","drażniony","drążony","drÄ™czony","drenowany","drgany","drgniÄ™ty","drukowany","dryblowany","dryfowany","drzemany","dubbingowany","dublowany","duplikowany","duszony","dworowany","dygotany","dyktowany","dymany","dymiony","dyrygowany","dyscyplinowany","dyskredytowany","dyskryminowany","dyskutowany","dyskwalifikowany","dysponowany","dystansowany","dystrybuowany","dywagowany","dźgany","dźgniÄ™ty","dziabniÄ™ty","dziedziczony","dziÄ™kowany","dzielony","dziergany","dzierżony","dziobany","dziurawiony","dziurkowany","dźwigany","dźwigniÄ™ty","edukowany","edytowany","egzaminowany","egzekutowany","egzekwowany","ekscytowany","ekshumowany","ekskomunikowany","eksmitowany","ekspandowany","eksperymentowany","eksploatowany","eksplorowany","eksponowany","eksportowany","eksterminowany","ekstradowany","ekstrapolowany","eliminowany","emancypowany","emanoway","emigrowany","emitowany","energetyzowany","eskortowany","etykietowany","ewakuowany","ewaluowany","fabrykowany","falowany","faÅ‚szowany","farbowany","faszerowany","faulowany","faworyzowany","fechtowany","fermentowany","ferowany","figurowany","filetowany","filmowany","filtrowany","finalizowany","finansowany","firmowany","fleszowany","folgowany","formuÅ‚owany","forsowany","fotografowany","fundowany","gadany","ganiany","garbiony","gardzony","garnirowany","gaszony","gawÄ™dzony","gaworzony","gazowany","gdakany","gderany","generalizowany","generowany","giÄ™ty","gilgotany","gÅ‚adzony","gÅ‚askany","gÅ‚odowany","gÅ‚odzony","gloryfikowany","gÅ‚osowany","gÅ‚oszony","gÅ‚owiony","gmatwany","gmerany","gnany","gnÄ™biony","gnieciony","gnity","gnojony","godzony","gojony","golniÄ™ty","golony","goniony","googlowany","gospodarowany","goszczony","gotowany","grabiony","grany","grasowany","gratulowany","grillowany","grilowany","gromadzony","gromiony","grożony","gruchany","gruchniÄ™ty","grupowany","grywany","gryziony","grzany","grzechotany","gubiony","gustowany","gwaÅ‚cony","gwarantowany","gwizdany","gwizdniÄ™ty","hackowany","haftowany","hajtniÄ™ty","hamowany","haÅ„biony","handlowany","harcowany","harmonizowany","harowany","hartowany","hibernowany","hipnotyzowany","hodowany","holowany","hoÅ‚ubiony","honorowany","hospitalizowany","hukniÄ™ty","hulany","huÅ›tany","idealizowany","identyfikowany","ignorowany","igrany","ilustrowany","imitowany","implantowany","implodowany","imponowany","importowany","improwizowany","indokrynowany","indukowany","infekowany","infiltrowany","informowany","ingerowany","inhalowany","inscenizowany","inspirowany","instalowany","instruowany","insynuowany","integrowany","interpretowany","interweniowany","intonowany","intubowany","inwestowany","inwigilowany","irytowany","iskrzony","izolowany","jadany","jawiony","jazgotany","jednoczony","jedzony","kablowany","kadzony","kalany","kaleczony","kalkulowany","kamerowany","kamienowany","kamuflowany","kanalizowany","kantowanty","kÄ…pany","kapitulowany","kapowany","karany","karbonizowany","karcony","karczowany","karmiony","kartkowany","kÄ…sany","kasowany","kastrowany","katalogowany","katapultowany","katowany","katrupiony","kierowany","kimany","kiszony","kiwany","kiwniÄ™ty","kÅ‚aniany","klapany","klapniÄ™ty","klarowany","klasyfikowany","klÄ™biony","klejony","klepany","klepniÄ™ty","klikany","klikniÄ™ty","klonowany","kÅ‚opotany","kÅ‚uty","knocony","knuty","kochany","koczowany","kodowany","kojarzony","kojfniÄ™ty","kojony","kolekcjonowany","kolektywizowany","kolidowany","kolonizowany","kolorowany","koloryzowany","koÅ‚owany","koÅ‚ysany","kombinowany","komenderowany","komentowany","komercjalizowany","kompensowany","komplementowany","komplikowany","komponowany","kompromitowany","komunikowany","konany","koncentrowany","koÅ„czony","konfabulowany","konfiskowany","konfrontowany","konserwowany","konspirowany","konstruowany","konsultowany","konsumowany","kontaktowany","kontestowany","kontrastowany","kontrolowany","kontrowany","kontynuowany","kontynuuowany","konwertowany","konwojowany","koordynowany","kopany","kopcony","kopiowany","kopniÄ™ty","kopulowany","korelowany","korkowany","koronowany","korygowany","korzony","korzystany","koszony","kotwiczony","kozaczony","kozÅ‚owany","kpity","kradziony","krajany","krążony","krÄ™cony","kremowany","kreowany","krochmalony","krojony","kropiony","kruszony","krystalizowany","kryty","krytykowany","krzepniÄ™ty","krzyczany","krzykniÄ™ty","krzywdzony","krzywiony","krzyżowany","kserowany","ksiÄ™gowany","ksztaÅ‚cony","ksztaÅ‚towany","kulony","kultywowany","kumulowany","kupczony","kupiony","kupowany","kupywany","kurczony","kurowany","kursowany","kurzony","kuszony","kuty","kwalifikowany","kwestionowany","łączony","Å‚adowany","Å‚agodzony","Å‚ajdaczony","lakierowany","Å‚amany","lamentowany","lansowany","lany","Å‚apany","Å‚askotany","Å‚aszony","latany","Å‚atany","lawirowany","leczony","legalizowany","legitymowany","lekceważony","lepiony","lewitowany","liberowany","licencjonowany","licytowany","liczony","likwidowany","linczowany","liniowany","literowany","litowany","lizany","lizniÄ™ty","lobbowany","lokalizowany","losowany","Å‚owiony","Å‚ożony","lubiany","Å‚udzony","lunatykowany","Å‚upany","Å‚upiony","Å‚uskany","lustrowany","Å‚uszczony","luzowany","Å‚ykany","Å‚ykniÄ™ty","Å‚yżeczkowany","macany","machany","machniÄ™ty","mÄ…cony","maczany","maganyzowany","maglowany","majaczony","majsterkowany","majtany","maksymalizowany","malowany","maltretowany","mamiony","mamrotany","manewrowany","manifestowany","manipulowany","markowany","marnotrawiony","marnowany","marszczony","marynowany","marzniÄ™ty","masakrowany","maskowany","masowany","masturbowany","mataczony","materializowany","mawiany","mazany","mazniÄ™ty","mÄ™czony","meldowany","merdany","metabolizowany","miażdżony","mielony","mierzony","mierzwiony","mieszany","miÄ™tolony","migany","migdalony","migotany","mijany","miksowany","milowany","miniÄ™ty","minimalizowany","miotany","mistyfikowany","mitygowany","mizdrzony","mlany","mniemany","mnożony","mobilizowany","mocowany","moczony","modelowany","modernizowany","modlony","modulowany","modyfikowany","molestowany","monitorowany","monopolizowany","montowany","mordowany","motywowany","mówiony","mrożony","mrugany","mrużony","muskany","mutowany","mydlony","mylony","myszkowany","myty","nabazgrany","nabiegany","nabierany","nabity","nabrany","nabrojony","nabrudzony","nabyty","nabywany","nacelowany","nachapany","nachodzony","nachwalony","nachylony","naciÄ…gany","naciÄ…gniÄ™ty","nacierany","naciÄ™ty","nacinany","naciskany","naciÅ›niÄ™ty","nacjonalizowany","naczepiony","nadany","nadawany","nadchodzony","nadciÄ…gany","nadciÄ…gniÄ™ty","nadciÄ™ty","nadesÅ‚any","nadgoniony","nadgryzany","nadgryziony","nadinterpretowany","nadÅ‚ożony","nadmieniany","nadmieniony","nadmuchany","nadrabiany","nadrobiony","nadskakiwany","nadsÅ‚uchiwany","nadstawiany","nadstawiony","nadszarpniÄ™ty","naduszony","nadużyty","nadużywany","nadwerężany","nadwyrężany","nadwyrężony","nadziany","nadzorowany","naelektryzowany","nafaszerowany","nagabywany","nagadany","nagiÄ™ty","naginany","nagÅ‚aszany","nagÅ‚oÅ›niony","nagoniony","nagradzany","nagrany","nagrodzony","nagromadzony","nagrywany","nagryzmolony","nagrzany","nagrzebany","nagrzewany","nagwizdany","naigrywany","najechany","najÄ™ty","najmowany","nakarmiany","nakarmiony","nakazany","nakazywany","nakierowany","nakierowywany","nakÅ‚adany","nakÅ‚amany","nakÅ‚aniany","naklejany","naklejony","naklepany","nakÅ‚oniony","nakÅ‚uty","nakÅ‚uwany","nakopany","nakrÄ™cany","nakrÄ™cony","nakreÅ›lany","nakreÅ›lony","nakruszony","nakryty","nakrywany","nakrzyczany","nakupiony","naÅ‚adowany","nalany","naÅ‚apany","nalepiony","nalewany","naliczony","naÅ‚owiony","naÅ‚ożony","namaczany","namagnetyzowany","namalowany","namaszczany","namaszczony","namawiany","namÄ™czony","namierzany","namieszany","namoczony","namówiony","namydlany","namyÅ›lony","naniesiony","naoliwiany","naoliwiony","naopowiadany","naostrzony","napadany","napadniÄ™ty","napakowany","napalony","naparzany","napastowany","napawany","napchany","napÄ™dzany","napeÅ‚niany","napeÅ‚niony","napierany","napiÄ™tnowany","napiÄ™ty","napinany","napisany","napluty","napÅ‚ywany","napoczÄ™ty","napojony","napompowany","napotkany","napotykany","napraszany","naprawiany","naprawiony","naprężany","naprężony","napromieniowany","naprostowany","naprowadzany","naprowadzony","napsuty","napuszczany","napuszczony","napychany","napytany","narÄ…bany","naradzany","naradzony","narastany","narażany","narażony","nareperowany","narkotyzowany","narodzony","naruszany","naruszony","narwany","narysowany","narzucany","narzucony","nasÄ…czany","nasÄ…czony","nasadzony","nasiÄ…kany","nasilany","nasilony","naskakiwany","naskoczony","naskrobany","naÅ›ladowany","nasÅ‚any","nasÅ‚uchany","nasÅ‚uchiwany","nasmarowany","nastÄ…piony","nastawiany","nastawiony","nastraszany","nastrojony","nastukany","nasuniÄ™ty","nasuwany","naÅ›wietlany","nasycony","nasyÅ‚any","nasypany","naszczany","naszkicowany","naszpikowany","naszprycowany","naszykowany","naszyty","naszywany","natarty","natchniÄ™ty","natkniÄ™ty","natleniony","natÅ‚uszczony","natrafiony","natrzÄ…sany","natrzÄ…sniÄ™ty","nauczany","nauczony","nawadniany","nawalony","nawiÄ…zany","nawiÄ…zywany","nawiedzany","nawiedzony","nawiercony","nawiewany","nawieziony","nawigowany","nawijany","nawilżany","nawilżony","nawiniÄ™ty","nawlekany","nawodniony","nawoÅ‚ywany","nawoskowany","nawożony","nawpychany","nawracany","nawrócony","nawrzucany","nawtykany","nawymyÅ›lany","nazbierany","nazmyÅ›lany","naznaczany","naznaczony","nazrywany","nazwany","nazywany","nÄ™cony","negocjowany","negowany","nÄ™kany","neutralizowany","niaÅ„czony","niecierpliwiony","niedoceniany","niedowidziany","nienawidzony","niesiony","nikolony","niszczony","nitkowany","niuchany","niweczony","niwelowany","nokautowany","nominowany","notowany","nucony","numerowany","nurtowany","obaczony","obadany","obalany","obalony","obandażowany","obarczany","obarczony","obawiany","obchodzony","obciÄ…gniÄ™ty","obciążony","obciÄ™ty","obcinany","obcyndalany","obczajany","obczajony","obdarowany","obdarty","obdarzany","obdarzony","obdzielony","obdzierany","obdzwaniany","obdzwoniony","obejmowany","oberwany","obessany","obezwÅ‚adniany","obezwÅ‚adniony","obfotografowany","obfotografowywany","obgadany","obgadywany","obgryzany","obgryziony","obiecany","obiecywany","obierany","obijany","obity","objadany","objaÅ›niany","objawiany","objawiony","objechany","objÄ™ty","objeżdżany","obkrÄ™cany","oblany","obÅ‚apiany","obÅ‚apywany","obÅ‚askawiany","obÅ‚askawiony","obleciany","obleganu","oblewany","obliczany","obliczony","oblizany","obÅ‚owiony","obÅ‚ożony","obluzowany","obluzowywany","obmacany","obmacywany","obmawiany","obmyÅ›lany","obmyÅ›lony","obmyty","obmywany","obnażany","obniżany","obniżony","obnoszony","obowiÄ…zywany","obozowany","obrabiany","obrabowany","obracany","obradowany","obramowany","obraniany","obrany","obrastany","obrażany","obrażony","obrobiony","obrócony","obrodzony","obroniony","obrysowany","obrywany","obryzgany","obrzezany","obrzucany","obrzucony","obrzygany","obsadzany","obsadzony","obÅ›ciskiwany","obserwowany","obsiany","obsikany","obsikiwany","obskakiwany","obskoczony","obskubany","obskubywany","obÅ›liniany","obÅ›liniony","obsÅ‚ugiwany","obsÅ‚użony","obsmarowany","obstawiany","obstawiony","obstrzeliwany","obsuniÄ™ty","obsuwany","obsypany","obsypywany","obszukany","obszukiwany","obtaczany","obtarty","obtoczony","obudzony","obwÄ…chany","obwÄ…chiwany","obwiÄ…zany","obwiÄ…zywany","obwieszany","obwieszczany","obwieszczony","obwieszony","obwijany","obwiniany","obwiniÄ™ty","obwoÅ‚any","obyty","obżerany","ocalany","ocalony","ocechowany","oceniany","oceniony","ocenzurowany","ochÅ‚adzany","ochlapany","ochlapywany","ochÅ‚odzony","ochÅ‚oniÄ™ty","ochraniany","ochroniony","ochrzaniany","ochrzczony","ociÄ…gany","ocielony","ocieplany","ocieplony","ocierany","ockniÄ™ty","ocucony","ocuty","oczarowywany","oczekiwany","oczerniany","oczerniony","oczyszczany","oczyszczony","odarty","odbÄ™bniony","odbetonowany","odbezpieczany","odbezpieczony","odbijany","odbity","odblokowany","odbudowany","odbudowywany","odbutowany","odbyty","odcedzany","odchorowany","odchowany","odchudzany","odchudzony","odchylany","odchylony","odciÄ…gany","odciÄ…gniÄ™ty","odciążony","odcierpiony","odciÄ™ty","odcinany","odcisniÄ™ty","odcumowany","odcyfrowany","odcyfrowywany","odczarowany","odczekany","odczepiany","odczepiony","odczuty","odczuwany","odczyniony","odczytany","odczytywany","oddalany","oddany","oddawany","oddelegowany","oddychany","oddzielany","oddzielony","odebrany","odegnany","odegrany","odejmowany","odepchniÄ™ty","oderwany","odeskortowany","odesÅ‚any","odespany","odessany","odetkany","odetniÄ™ty","odezwany","odfiltrowany","odgadniÄ™ty","odgadywany","odganiany","odgarniany","odgarniÄ™ty","odgiÄ™ty","odgniatany","odgoniony","odgradzany","odgrażany","odgrodzony","odgruzowany","odgrywany","odgryzany","odgryziony","odgrzany","odgrzebany","odgrzebywany","odgrzewany","odgwizdany","odhaczony","odholowany","odinstalowany","odizolowany","odjedzony","odjÄ™ty","odjonizowany","odkażany","odkażony","odkÅ‚adany","odklejony","odkochany","odkodowany","odkodowywany","odkopany","odkopywany","odkorkowany","odkrÄ™cany","odkrÄ™cony","odkrojony","odkryty","odkrywany","odkupiony","odkupywany","odkurzany","odkurzony","odkuty","odłączany","odłączony","odÅ‚amywany","odlany","odlatywany","odlepiany","odlewany","odliczany","odliczony","odÅ‚ożony","odÅ‚upany","odmachany","odmachiwany","odmalowany","odmarszczony","odmawiany","odmeldowany","odmieniany","odmieniony","odmierzany","odmierzony","odmieszany","odmontowany","odmówiony","odmrażany","odmrożony","odnajdowany","odnaleziony","odnawiany","odniesiony","odnoszony","odnotowany","odnotowywany","odnowiony","odpakowany","odpakowywany","odpalany","odpalony","odpaÅ‚zowany","odparowany","odparty","odpÄ™dzany","odpicowany","odpieczÄ™towany","odpierany","odpiÄ™ty","odpiÅ‚owany","odpiÅ‚owywany","odpinany","odpisany","odpisywany","odpÅ‚acany","odplamiony","odplÄ…tany","odpÅ‚yniÄ™ty","odpowietrzony","odpracowany","odpracowywany","odprasowany","odprawiany","odprawiony","odprężany","odprostowany","odprowadzany","odprowadzony","odpruty","odpryskany","odpukany","odpukiwany","odpuszczany","odpuszczony","odpychany","odrÄ…bany","odrabiany","odrÄ…bywany","odradzany","odradzony","odrapany","odrastany","odratowany","odreagowany","odremontowany","odrestaurowany","odrestaurowywany","odrobaczany","odrobiony","odroczony","odrodzony","odroÅ›niÄ™ty","odróżniany","odróżniony","odrysowany","odrywany","odrzucany","odrzucony","odsÄ…czany","odsÄ…czony","odsadzony","odseparowany","odsiadywany","odsiany","odsiewany","odsÅ‚aniany","odsÅ‚oniÄ™ty","odsÅ‚uchany","odsÅ‚uchiwany","odsÅ‚użony","odÅ›nieżany","odÅ›nieżony","odsolony","odÅ›piewany","odsprzedany","odsprzedawany","odstÄ…piony","odstawiany","odstawiony","odstÄ™powany","odstraszany","odstrÄ™czony","odstresowany","odstrzeliwany","odstrzelony","odsuniÄ™ty","odsuwany","odÅ›wieżany","odÅ›wieżony","odsyÅ‚any","odsypywany","odsysany","odszczekany","odszczekiwany","odsztafirowany","odszukany","odszyfrowany","odszyfrowywany","odszykowany","odtrÄ…biony","odtrÄ…cony","odtruty","odtwarzany","odtworzony","oduczony","odurzony","odwalany","odwalony","odwiÄ…zany","odwiÄ…zywany","odwiedzany","odwiedzony","odwieszony","odwieziony","odwijany","odwiniÄ™ty","odwlekany","odwodniony","odwodzony","odwoÅ‚any","odwoÅ‚ywany","odwożony","odwracany","odwrócony","odwzajemniony","odwzorowany","odżegnany","odziany","odziedziczony","odznaczany","odznaczony","odzwieciedlony","odzwierciedlany","odzwoniony","odzwyczajony","odzyskany","odzyskiwany","odżyty","odzywiany","odżywiony","oferowany","ofiarowany","ofiarowywany","ogarniany","ogarniÄ™ty","oglÄ…dany","ogÅ‚aszany","ogÅ‚oszony","ogÅ‚upiany","ogÅ‚upiony","ogÅ‚uszony","ogoÅ‚ocony","ogolony","ograbiany","ograbiony","ograniczany","ograniczony","ograny","ogrodzony","ogryziony","ogrzany","ogrzewany","okablowany","okaleczony","okantowany","okÄ…pany","okazany","okazywany","okieÅ‚znany","okÅ‚adany","okÅ‚amany","okÅ‚amywany","oklaskiwany","oklejony","oklepany","okopany","okopywany","okpiony","okradany","okradziony","okraszony","okrążany","okrążony","okrÄ™cany","okrÄ™cony","okreÅ›lany","okreÅ›lony","okrojony","okryty","okrywany","okrzykniÄ™ty","okulawiony","okupiony","okupowany","olany","olewany","olÅ›niÄ™ty","omamiony","omawiany","omdlewany","omijany","ominiÄ™ty","omotany","omówiony","onanizowany","onieÅ›mielany","onieÅ›mielony","opadniÄ™ty","opakowany","opalany","opalony","opancerzony","opanowany","opanowywany","oparty","oparzony","opasany","opatentowany","opatrywany","opatrzony","opatulony","opchniÄ™ty","opÄ™dzany","opÄ™dzony","operowany","opÄ™tany","opÄ™tywany","opieczÄ™towany","opiekowany","opierany","opijany","opisany","opisywany","opity","opÅ‚acany","opÅ‚acony","opÅ‚akany","opÅ‚akiwany","opÅ‚ukany","opluty","opluwany","opÅ‚ywany","opodatkowany","opodatkowywany","oponowany","oporzÄ…dzany","oporzÄ…dzony","opowiadany","opowiedziany","opóźniany","opóźniony","opracowany","opracowywany","oprawiany","oprawiony","oprowadzany","oprowadzony","opróżniany","opróżniony","opryskany","opryskiwany","opublikowany","opukany","opuszczany","opuszczony","opychany","opylony","orany","orbowany","organizowany","orientowany","oroszony","orzekany","orżniÄ™ty","osaczany","osaczony","osadzany","osÄ…dzany","osadzony","osÄ…dzony","oscylowany","osiadany","osiÄ…gany","osiÄ…gniÄ™ty","osiedlany","osiedlony","osiedzony","osierocony","osiodÅ‚any","oskalpowany","oskarżony","oskrobany","oskrzydlany","oskrzydlony","oskubany","oskubywany","osÅ‚abiany","osÅ‚abiony","oÅ›lepiany","oÅ›lepiony","oÅ›lepniÄ™ty","oÅ›liniany","osÅ‚odzony","osÅ‚oniony","osÅ‚uchany","osmalony","oÅ›mielony","oÅ›mieszany","oÅ›mieszony","ostrzegany","ostrzelany","ostrzelity","ostrzony","ostudzony","osuniÄ™ty","osuszany","osuszony","osuwany","oswajany","oÅ›wiadczany","oÅ›wiadczony","oÅ›wiecany","oÅ›wieciony","oÅ›wietlany","oÅ›wietlony","oswobadzany","oswobodzony","oswojony","oszacowany","oszaÅ‚amiany","oszczany","oszczÄ™dzany","oszczÄ™dzony","oszklony","oszlifowany","oszoÅ‚omiony","oszpecony","oszukany","oszukiwany","oszwabiony","otaczany","otarty","otoczony","otruty","otruwany","otrzÄ…sany","otrzÄ…Å›niÄ™ty","otrzepany","otrzeźwiony","otrzymany","otrzymywany","otulony","otumaniony","otwierany","otworzony","otwarty","owany","owdowiony","owiany","owijany","owiniÄ™ty","ozdabiany","ozdobiony","ozdrowiony","ożeniony","oznaczany","oznaczony","oznajmiany","oznajmiony","oznakowany","ożyty","ożywany","ożywiany","ożywiony","pachnÄ…cy","pacnÄ…ty","pakowany","paktowany","paÅ‚any","paÅ‚aszowany","palniÄ™ty","palony","pamiÄ™tany","panoszony","paprany","parafrazowany","paraliżowany","parkowany","parowany","partaczony","parzony","pastowany","paszony","patrolowany","patroszony","patrzony","pauzowany","pchany","pchniÄ™ty","pdholowany","pedaÅ‚owany","pÄ™kany","pÄ™kniÄ™ty","peÅ‚niony","penetrowany","perforowany","perfumowany","perswadowany","piastowany","pichcony","pielÄ™gnowany","pielony","pieniony","pieszczony","piÄ™tnowany","piÄ™ty","pijany","pikietowany","piknikowany","pikowany","pilnowany","pilotowany","piÅ‚owany","pisany","pisywany","pity","pÅ‚acony","plÄ…drowany","plamiony","planowany","pÅ‚aszczony","plÄ…tany","pÅ‚atany","pÅ‚awiony","plewiony","pÅ‚onÄ…cy","pÅ‚oszony","plotkowany","plugawiony","pÅ‚ukany","pluskany","pluty","pobaraszkowany","pobierany","pobity","pobÅ‚ażany","pobÅ‚ogosÅ‚awiony","pobrany","pobrudzony","pobudzany","pobudzony","pobujany","pocaÅ‚owany","pocerowany","pochÅ‚aniany","pochlapany","pochlebiany","pochÅ‚oniÄ™ty","pochowany","pochwalany","pochwalony","pochwycony","pochylany","pochylony","pociachany","pociÄ…gany","pociÄ…gniÄ™ty","pocierany","pocieszany","pocieszony","pociÄ™ty","pocony","pocukrowany","poćwiartowany","poczesany","poczÄ™stowany","poczÄ™ty","poczochrany","poczuty","poczytany","poczytywany","podany","podarowany","podarty","podawany","podążony","podbierany","podbijany","podbity","podbudowany","podbudowywany","podburzany","podburzony","podchwycony","podciÄ…gany","podciÄ…gniÄ™ty","podcierany","podciÄ™ty","podcinany","podczepiony","poddany","poddawany","podebrany","podejmowany","podejrzany","podejrzewany","podelektowany","podeptany","poderwany","podesÅ‚any","podglÄ…dany","podgolony","podgoniony","podgryzany","podgrzany","podgrzewany","podjadany","podjedzony","podjÄ™ty","podkablowany","podkarmiony","podkÅ‚adany","podklejony","podkolorowany","podkoÅ‚owany","podkopany","podkopywany","podkradany","podkradniÄ™ty","podkrÄ™cany","podkrÄ™cony","podkreÅ›lany","podkreÅ›lony","podksztaÅ‚cony","podkulony","podkupiony","podkurzony","podkuty","podłączany","podłączony","podÅ‚adowany","podÅ‚amany","podlany","podÅ‚apany","podleczony","podlegany","podlewany","podliczany","podliczony","podlizany","podlizywany","podÅ‚ożony","podmalowany","podmieniany","podmieniony","podmuchany","podmyty","podnajÄ™ty","podniecany","podniecony","podniesiony","podnoszony","podoÅ‚any","podopingowany","podostrzony","podotykany","podpadniÄ™ty","podpalany","podpalony","podparty","podpatrywany","podpatrzony","podpieczÄ™towany","podpiekany","podpierany","podpiÄ™ty","podpiÅ‚owany","podpinany","podpisany","podpisywany","podpÅ‚acony","podpÅ‚yniÄ™ty","podpompowany","podporzÄ…dkowany","podporzÄ…dkowywany","podpowiadany","podpowiedziany","podprowadzany","podpuszczany","podpuszczony","podpychany","podpytany","podrabiany","podrapany","podrasowany","podratowany","podrażniony","podrÄ™czony","podregulowany","podreperowany","podretuszowany","podrobiony","podroczony","podróżowany","podrygiwany","podrywany","podrzucany","podrzucony","podrzynany","podsadzony","podskubywany","podsÅ‚uchany","podsÅ‚uchiwany","podsmażany","podsmażony","podÅ›piewywany","podstawiany","podstawiony","podstemplowany","podstrojony","podsumowany","podsumowywany","podsuniÄ™ty","podsuwany","podÅ›wietlany","podsycany","podsycony","podsyÅ‚any","podsypany","podszczypywany","podszkolony","podszlifowany","podszykowany","podszyty","podszywany","podtapiany","podtarty","podtopiony","podtrzymany","podtrzymywany","podtuczony","poduczany","podupadany","poduszony","podwajany","podwalany","podważany","podwÄ™dzony","podwiÄ…zany","podwieszany","podwieziony","podwijany","podwiniÄ™ty","podwojony","podwożony","podwyżany","podwyższany","podwyższony","podyktowany","podyskutowany","podziabany","podziaÅ‚any","podziaÅ‚kowany","podziÄ™kowany","podzielony","podziurawiony","podziwiany","podźwigniÄ™ty","poeksperymentowany","pofarbowany","pofatygowany","pofilmowany","poganiany","pogardzany","pogardzony","pogarszany","pogaszony","pogÅ‚adzony","pogÅ‚askany","pogłębiany","pogłębiony","pogÅ‚oÅ›niony","pogmatwany","pognÄ™biony","pognieciony","pogodzony","pogoniony","pogorszony","pogotowany","pograbiony","pogrążany","pogrążony","pogrożony","pogrubiany","pogrubiony","pogruchany","pogruchotany","pogrupowany","pogrywany","pogryzany","pogryziony","pogrzany","pogrzebany","pogubiony","pogwaÅ‚cany","pohamowany","pohandlowany","poharatowany","pohuÅ›tany","poinformowany","poinstruowany","pojednany","pojÄ™ty","pojmiÄ™ty","pojmowany","pojony","pokajany","pokaleczony","pokarany","pokarmiony","pokÄ…sany","pokatalogowany","pokazany","pokazywany","pokiereszowany","pokierowany","pokiwany","pokÅ‚adany","poklepany","poklepywany","pokÅ‚oniony","pokÅ‚uty","pokochany","pokolorowany","pokoloryzowany","pokoÅ‚ysany","pokombinowany","pokomplikowany","pokonany","pokoÅ„czony","pokonywany","pokopany","pokrajany","pokrążony","pokrÄ™cony","pokrojony","pokruszony","pokryty","pokrywany","pokrzepiany","pokrzepiony","pokrzyżowany","pokuszony","pokutowany","połączony","polakierowany","poÅ‚amany","polany","poÅ‚apany","poÅ‚askotany","poÅ‚atany","polecany","poÅ‚echtany","polecony","poleczony","polegany","polemizowany","polepszany","polepszony","polerowany","polewany","policzkowany","policzony","polimeryzowany","polizany","poÅ‚kniÄ™ty","polowany","poÅ‚owiony","poÅ‚ożony","polubiony","poluźniony","poluzowany","poÅ‚ykany","pomacany","pomachany","pomagany","pomalowany","pomarynowany","pomasowany","pomazany","pomÄ™czony","pomiatany","pomieszany","pomieszczony","pomijany","pominiÄ™ty","pomiziany","pomkniÄ™ty","pomnażany","pomniejszany","pomniejszony","pomnożony","pomoczony","pompowany","pomydlony","pomylony","pomyszkowany","pomywany","ponabijany","ponaciskany","ponadziewany","ponaglany","ponaglony","ponagrywany","ponaklejany","ponakÅ‚uwany","ponakrywany","ponaprawiany","ponawiany","poniaÅ„czony","poniechany","ponieiwerany","poniesiony","poniszczony","poniżany","poniżony","ponoszony","ponowiony","ponudzony","poobcinany","poobcowany","poobczajany","poobijany","poobmacywany","poobracany","poobserwowany","poodbijany","poodcinany","poodgryzany","poodkurzany","poodprawiany","poodsuwany","poodwalany","pooglÄ…dany","poograniczany","poopalany","poopiekany","poopwiadany","pootwierany","popadany","popakowany","popalony","poparty","poparzony","popchany","popchniÄ™ty","popÄ™dzany","popÄ™dzony","popÄ™kany","popeÅ‚niany","popeÅ‚niony","poperfumowany","popierany","popieszczony","popijany","popilnowany","popisany","popity","popÅ‚acony","popÅ‚akiwany","poplamiony","poplÄ…tany","popluskany","popodcinany","popodziwiany","popoprawiany","poprany","poprasowany","poprawiany","poprawiony","poproszony","poprowadzony","popryskany","poprzebierany","poprzeciÄ…gany","poprzecinany","poprzedzany","poprzeglÄ…dany","poprzeklinany","poprzekopywany","poprzemieszczany","poprzenoszony","poprzesadzany","poprzeÅ›ladowany","poprzestawiany","poprzesuwany","poprzewieszany","poprzewracany","poprzycinany","poprzymierzany","poprzytulany","poprzywiÄ…zywany","popsuty","popudrowany","popukany","popularyzowany","popuszczany","popuszczony","popychany","popykany","popytany","porabiany","porachowany","poraniony","poratowany","porażony","porÄ™czony","porównany","porozbierany","porozbijany","porozciÄ…gany","porozcinany","porozdawany","porozdzielany","porozmieszczany","poróżniony","porozpÄ™dzany","porozpieszczany","porozprowadzany","porozpruwany","porozrzucany","porozstawiany","porozsyÅ‚any","porozumiewany","porozwalany","porozwiÄ…zywany","porozwieszany","porozwożony","portretowany","poruszany","poruszony","porwany","porysowany","porywany","porzÄ…dkowany","porzÄ…dzony","porzucany","porzucony","posÄ…dzany","posadzony","posÄ…dzony","poÅ›ciÄ…gany","poÅ›cielony","poÅ›cierany","poÅ›cigany","poÅ›cinany","poÅ›ciskany","posegregowany","posiadany","posiany","posiekany","posilany","posiÅ‚kowany","posilony","posiÅ‚owany","posiniaczony","posiorbany","poskÄ…piony","poskÅ‚adany","posklejany","poskramiany","poskrÄ™cany","poskrobany","poskromiony","poskubany","posÅ‚any","posÅ‚odzony","poÅ›lubiany","poÅ›lubiony","posÅ‚ugiwany","posmakowany","posmarowany","posolony","posortowany","pospekulowany","pospieszany","poÅ›pieszany","poÅ›piewany","pospinany","pospÅ‚acany","posprawdzany","posprzÄ…tany","posprzedawany","poÅ›redniczony","possany","postanowiony","postany","postarany","postawiony","postemplowany","posterowany","postradany","postraszony","postrugany","postrzegany","postrzelany","postrzelony","postukany","postymulowany","posuniÄ™ty","posuwany","poÅ›wiÄ…cany","poÅ›wiadczony","poÅ›wiecony","poÅ›wiÄ™cony","poÅ›wiÄ™towany","poÅ›wintuszony","posyÅ‚any","posypany","posypywany","poszarpany","poszastany","poszatkowany","poszczuty","poszczycony","poszczypany","poszerzany","poszerzony","poszorowany","poszpiegowany","poszturchany","poszukany","poszukiwany","poszwÄ™dany","poszybowany","potakiwany","potarmoszony","potarty","potasowany","potÄ™gowany","potÄ™piany","potÄ™piony","potkniÄ™ty","potoczony","potopiony","potorturowany","potrÄ…cany","potrÄ…cony","potraktowany","potrojony","potruty","potrzÄ…sany","potrzaskany","potrzÄ…sniÄ™ty","potrzÄ…Å›niÄ™ty","potrzymany","Poturbowany","poturlany","potwierdzony","potykany","poucinany","pouczany","pouczony","poudawany","poukÅ‚adany","pouprawiany","poupychany","pourywany","poustawiany","poużywany","powÄ…chany","powachlowany","powalany","powalony","poważany","powbijany","powciÄ…gany","powciskany","powdychany","powÄ™szony","powetowany","powiadamiany","powiadomiony","powiÄ…zany","powiedziany","powiedzony","powiÄ™kszany","powielany","powielony","powierzany","powierzony","powieszony","powiewany","powinszowany","powitany","powity","powkÅ‚adany","powlekany","powłóczony","powodowany","powoÅ‚any","powoÅ‚ywany","powożony","powpychany","powrócony","powrzucany","powsadzany","powÅ›ciÄ…gniÄ™ty","powspominany","powstrzymany","powtarzany","powtórzony","powybierany","powybijany","powycierany","powycinany","powyciskany","powydawany","powyganiany","powyginany","powyjaÅ›niany","powyjmowany","powyłączany","powymiatany","powymieniany","powynoszony","powypeÅ‚niany","powypisywany","powyrywany","powyrzucany","powystrzelany","powysyÅ‚any","powywalany","powywieszany","powywracany","powziÄ™ty","pozabawiany","pozabijany","pozacierany","pożądany","pożądlony","pozadzierany","pozakÅ‚adany","pozaklinany","pozaÅ‚atwiany","pozamiatany","pozamieniany","pozamrażany","pozamykany","pozapalany","pozapinany","pozapisywany","pozapraszany","pożarty","pozasÅ‚aniany","pozastrzelany","pozatykany","pozbawiany","pozbawiony","pozbierany","pozbyty","pozbywany","pozdejmowany","pozdrawiany","pozdrowiony","pożegnany","pożerany","pozmiatany","pozmieniany","pozmywany","poznaczony","poznany","poznawany","poznÄ™cany","pozorowany","pozostawiany","pozostawiony","pozowany","pozrywany","pozszywany","pożuty","pozwalniany","pozwany","pozwiÄ…zywany","pozwiedzany","pozwolony","pożyczany","pożyczony","pozyskany","pożyty","pozywany","pożywiany","pożywiony","praktykowany","prany","prasowany","prawiony","prażony","precyzowany","preferowany","prenumerowany","prezentowany","próbowany","procesowany","produkowany","profanowany","profilowany","prognozowany","programowany","projektowany","proklamowany","prolongowany","promieniowany","promowany","propagowany","proponowany","prosperowany","prostowany","proszkowany","proszony","protestowany","protokoÅ‚owany","prowadzony","prowokowany","pruty","pryskany","pryÅ›niÄ™ty","przeanalizowany","przearanżowany","przebaczany","przebaczony","przebadany","przebiegniÄ™ty","przebierany","przebijany","przebity","przebolony","przebrany","przebudowany","przebudowywany","przebudzany","przebudzony","przebukowany","przebyty","przebywany","przeceniany","przeceniony","przechlapany","przechodzony","przechowany","przechowywany","przechrzcony","przechwycony","przechwytywany","przechylany","przechylony","przechytrzany","przechytrzony","przeciÄ…gany","przeciÄ…gniÄ™ty","przeciążany","przeciążony","przeciekany","przecierany","przecierpiany","przeciÄ™ty","przecinany","przeciskany","przeciÅ›niÄ™ty","przeciwstawiany","przećwiczony","przeczekany","przeczesany","przeczesywany","przeczoÅ‚gany","przeczuty","przeczuwany","przeczyszczony","przeczytany","przedarty","przedawkowany","przedawkowywany","przedekorowany","przedÅ‚ożony","przedÅ‚użany","przedÅ‚użony","przedmuchany","przedobrzony","przedostany","przedostawany","przedsiewziÄ™ty","przedstawiany","przedstawiony","przedymany","przedyskutowany","przedzierany","przedziurawiony","przedziurkowany","przeegzaminowany","przefaksowany","przefarbowany","przefasonowany","przefasowany","przefaxowany","przefiltrowany","przeformowany","przeforsowany","przegadany","przeganany","przeganiany","przegapiany","przegapiony","przegiÄ™ty","przeginany","przeglÄ…dany","przeglÄ…dniÄ™ty","przegÅ‚odzony","przegÅ‚osowany","przegoniony","przegotowany","przegotowywany","przegrabiony","przegradzany","przegrany","przegrupowany","przegrupowywany","przegrywany","przegryzany","przegryziony","przegrzany","przegrzebany","przegrzewany","przehandlowany","przeholowany","przeinstalowany","przeistoczony","przejadany","przejaskrawiany","przejaÅ›niony","przejawiany","przejawiony","przejechany","przejÄ™ty","przejeżdżany","przejmowany","przejrzany","przekabacany","przekabacony","przekablowany","przekalibrowany","przekalkulowany","przekarmiany","przekÄ…szony","przekazywany","przekierowany","przekierowywany","przekimany","przekÅ‚adany","przeklejony","przeklÄ™ty","przeklinany","przeklniÄ™ty","przekÅ‚uty","przekonany","przekonfigurowany","przekonstruowany","przekonwertowany","przekonywany","przekopany","przekopywany","przekozioÅ‚kowany","przekraczany","przekrÄ™cany","przekrÄ™cony","przekreÅ›lany","przekreÅ›lony","przekroczony","przekrojony","przekrzyczony","przekrzywiony","przeksztaÅ‚cany","przeksztaÅ‚cony","przekupiony","przekupywany","przekuty","przekwalifikowany","przełączany","przełączony","przeÅ‚adowany","przeÅ‚adowywany","przeÅ‚amany","przeÅ‚amywany","przelany","przelatywany","przeleciany","przelewany","przeleżany","przelicytowany","przeliczany","przeliczony","przeliterowany","przeÅ‚kniÄ™ty","przeÅ‚ożony","przeÅ‚ykany","przeÅ‚ykniÄ™ty","przemalowany","przemalowywany","przemaszerowany","przemawiany","przemeblowany","przemÄ™czony","przemielony","przemieniany","przemierzony","przemieszczany","przemieszczony","przemijany","przemilczany","przemilczony","przeminiÄ™ty","przemkniÄ™ty","przemodelowany","przemusztrowany","przemycany","przemycony","przemyÅ›lany","przemyÅ›lony","przemyty","przemywany","przenegocjowany","przeniesiony","przenikany","przenikniÄ™ty","przenoszony","przeobrażany","przeobrażony","przeoczany","przeoczony","przeorany","przeorganizowany","przeorientowany","przepadany","przepakowany","przepalony","przeparkowany","przepchany","przepchniÄ™ty","przepÄ™dzany","przepÄ™dzony","przepeÅ‚niany","przepeÅ‚niony","przepijany","przepiÅ‚owany","przepisany","przepisywany","przepity","przepÅ‚acany","przepÅ‚acony","przepÅ‚akany","przeplanowany","przepÅ‚oszony","przepÅ‚ukany","przepÅ‚ukiwany","przepÅ‚yniÄ™ty","przepÅ‚ywany","przepompowany","przepompowywany","przepowiadany","przepowiedziany","przepracowany","przepracowywany","przeprany","przeprawiany","przeprawiony","przeprogramowany","przeprojektowany","przeprowadzany","przeprowadzony","przepuszczany","przepuszczony","przepychany","przepytany","przepytywany","przerÄ…bany","przerabiany","przeradzany","przerastany","przerażony","przeredagowany","przerejestrowany","przerobiony","przerodzony","przeroÅ›niÄ™ty","przerwany","przerysowany","przerywany","przerzedzany","przerzucany","przerzucony","przesÄ…czony","przesadzany","przesÄ…dzany","przesadzony","przesÄ…dzony","przeÅ›cigany","przeÅ›cigniÄ™ty","przesiadany","przesiadywany","przesiany","przesiedlany","przesiedlony","przesiedziany","przesiewany","przesilony","przeskakiwany","przeskalowany","przeskanowany","przeskoczony","przeskrobany","przeÅ›ladowany","przesÅ‚aniany","przesÅ‚any","przeÅ›ledzony","przeÅ›lizgniÄ™ty","przesÅ‚odzony","przesÅ‚oniÄ™ty","przesÅ‚uchany","przesÅ‚uchiwany","przesmarowany","przesolony","przesortowany","przespany","przeÅ›piewany","przessany","przestawiany","przestawiony","przestemplowany","przestraszony","przestrojony","przestrzegany","przestrzelony","przestudiowany","przesuniÄ™ty","przesuwany","przeÅ›wietlany","przeÅ›wietlony","przesyÅ‚any","przesypany","przesypiany","przesypywany","przeszarżowany","przeszczepiany","przeszczepiony","przeszkadzany","przeszkolony","przeszmuglowany","przeszukany","przeszukiwany","przeszyty","przeszywany","przetaczany","przetaÅ„czony","przetapetowany","przetarty","przetestowany","przetkany","przetoczony","przetopiony","przetrÄ…cony","przetransformowany","przetransmitowany","przetransponowany","przetransportowany","przetrawiony","przetrwany","przetrzÄ…sany","przetrzÄ…Å›niÄ™ty","przetrzepany","przetrzymany","przetrzymywany","przetwarzany","przetworzony","przewalany","przewalczony","przewaletowany","przewalony","przeważany","przeważony","przewertowany","przewiÄ…zany","przewiÄ…zywany","przewidywany","przewidziany","przewiercany","przewiercony","przewieszany","przewieszony","przewietrzony","przewieziony","przewijany","przewiniÄ™ty","przewitany","przewodniczony","przewodzony","przewożony","przewracany","przewrócony","przewyższany","przeymierzany","przeżarty","przeżeglowany","przeżegnany","przeziÄ™biony","przezimowany","przeznaczany","przeznaczony","przeżuty","przezwyciężany","przezwyciężony","przeżyty","przezywany","przeżywany","przodowany","przpochlebiony","przwdziewany","przybastowany","przybierany","przybijany","przybity","przybliżany","przybliżony","przybrany","przycelowany","przycepiony","przychylony","przyciÄ…gany","przyciÄ…gniÄ™ty","przyciemniony","przyciÄ™ty","przycinany","przyciskany","przyciÅ›niÄ™ty","przyciszony","przyćmiewany","przyćmiony","przycumowany","przyczepiany","przyczesany","przyczoÅ‚gany","przyczyniony","przydepniÄ™ty","przydeptany","przyduszony","przydzielany","przydzielony","przygarniÄ™ty","przygaszony","przygazowany","przygÅ‚adzany","przygnÄ™biany","przygniatany","przygnieciony","przygotowany","przygruchany","przygrywany","przygryzany","przygryziony","przygrzany","przygwożdżony","przyhamowany","przyholowany","przyjany","przyjÄ™ty","przyjmowany","przyjrzany","przykÅ‚adany","przyklejony","przyklepany","przykopany","przykrÄ™cany","przykrÄ™cony","przykrócony","przykryty","przykrywany","przykurzony","przykuty","przykuwany","przyłączany","przyłączony","przylany","przyÅ‚apany","przylegany","przylepiany","przylepiony","przyÅ‚ożony","przymierzony","przymilany","przymkniÄ™ty","przymocowany","przymuszany","przynależony","przyniesiony","przynoszony","przynudzany","przyostrzony","przyozdabiany","przyozdobiony","przypadniÄ™ty","przypakowany","przypakowywany","przypalany","przypalony","przyparty","przypasowany","przypatrywany","przypatrzony","przypieczÄ™towany","przypiekany","przypierany","przypiÄ™ty","przypilnowany","przypiÅ‚owany","przypinany","przypisany","przypisywany","przypÅ‚acony","przyplÄ…tany","przypÅ‚yniÄ™ty","przypodobany","przypominany","przypomniany","przyporzÄ…dkowany","przyprawiany","przyprawiony","przyprowadzony","przypucowany","przypudrowany","przypuszczany","przypuszczony","przyrównany","przyrzÄ…dzany","przyrzÄ…dzony","przysiadany","przysiÄ…gniÄ™ty","przyskrzydlony","przyskrzyniany","przyskrzyniony","przysÅ‚aniany","przysÅ‚any","przysÅ‚odzony","przysÅ‚oniony","przysÅ‚uchiwany","przysÅ‚ugiwany","przysÅ‚użony","przysmażany","przysmażony","przyspieszany","przyspieszony","przysporzony","przysposobiony","przyÅ›rubowywany","przyssany","przystÄ…piony","przystawiany","przystawiony","przystemplowany","przystopowany","przystosowany","przystrojony","przysuniÄ™ty","przysuwany","przyswajany","przyÅ›wiecany","przyÅ›wiÄ™cony","przyswojony","przysyÅ‚any","przysypany","przyszpilony","przyszykowany","przyszyty","przyszywany","przytaczany","przytargany","przytarty","przytaszczany","przytÄ™piany","przytÄ™piony","przytkany","przytÅ‚aczany","przytÅ‚oczony","przytÅ‚umiony","przytoczony","przytrafiony","przytroczony","przytruwany","przytrzasniÄ™ty","przytrzymany","przytrzymywany","przytulany","przytulony","przytwierdzany","przytwierdzony","przytykany","przyuczony","przyuważony","przywabiony","przywalany","przywalony","przywarowany","przywarty","przywdziany","przywiÄ…zany","przywiÄ…zywany","przywidziany","przywieziony","przywitany","przywÅ‚aszczany","przywÅ‚aszczony","przywoÅ‚any","przywoÅ‚ywany","przywożony","przywracany","przywrócony","przyznaczony","przyznany","przyznawany","przyzwalany","przyzwany","przyzwyczajany","przyzwyczajony","przyzywany","psiamany","pstrykany","pstrykniÄ™ty","psuty","publikowany","puchniÄ™ty","pucowany","pudÅ‚owany","pudrowany","pukniÄ™ty","punktowany","pustoszony","puszczany","puszczony","puszkowany","puszony","pykany","pytany","rabowany","rachowany","racjonalizowany","racjonowany","raczony","radowany","raniony","raportowany","ratowany","ratyfikowany","reaktywowany","realizowany","reanimowany","recytowany","rÄ™czony","redagowany","redukowany","reformowany","refowany","regenerowany","regionalizowany","regulowany","reinkarnowany","rejestrowany","reklamowany","rekomendowany","rekompensowany","rekonstruowany","rekreowany","rekrutowany","rekwirowany","relacjonowany","relaksowany","remodulowany","remontowany","renegocjowany","reorganizowany","reperowany","replikowany","represejonowany","reprezentowany","reprodukowany","resetowany","resocjalizowany","respektowany","resuscytowany","retuszowany","rewanżowany","rewidowany","rezerwowany","rezonowany","rezygnowany","reżyserowany","robiony","rodzony","rojony","rolowany","romansowany","roniony","rozbawiany","rozbawiony","rozbierany","rozbijany","rozbity","rozbÅ‚yÅ›niÄ™ty","rozbrajany","rozbrojony","rozbudowany","rozbudowywany","rozbudzany","rozbudzony","rozbujany","rozcapierzony","rozchmurzony","rozchodzony","rozchylany","rozchylony","rozciÄ…gany","rozciÄ…gniÄ™ty","rozcieÅ„czany","rozcieÅ„czony","rozcierany","rozciÄ™ty","rozcinany","rozczarowany","rozczarowywany","rozczesany","rozczÅ‚onkowany","rozczulany","rozczytany","rozdany","rozdawany","rozdeptany","rozdmuchany","rozdmuchiwany","rozdrabniany","rozdrapany","rozdrapywany","rozdrażniany","rozdrażniony","rozduszony","rozdwojony","rozdysponowany","rozdzielany","rozdzielony","rozdzierany","rozdziewiczony","rozebrany","rozedrany","rozegrany","rozegrywany","rozepchany","rozerwany","rozesÅ‚any","rozgarniÄ™ty","rozgaszczany","rozgiÄ™ty","rozglaszany","rozgÅ‚oszony","rozgniatany","rozgnieciony","rozgniewany","rozgoniony","rozgraniczony","rozgrany","rozgromiony","rozgrywany","rozgryzany","rozgryziony","rozgrzany","rozgrzebywany","rozgrzeszony","rozgrzewany","rozhuÅ›tany","rozjaÅ›niany","rozjaÅ›niony","rozjechany","rozjedzony","rozjuszany","rozjuszony","rozkazany","rozkazywany","rozkÅ‚adany","rozklejany","rozklejony","rozkoÅ‚ysany","rozkopany","rozkopywany","rozkoszowany","rozkrÄ™cany","rozkrÄ™cony","rozkrojony","rozkruszony","rozkuty","rozkuwany","rozkwaszony","rozkwaterowany","rozkwitany","rozkwitniÄ™ty","rozłączony","rozÅ‚adowany","rozÅ‚adowywany","rozÅ‚amany","rozlany","rozlewany","rozliczany","rozliczony","rozlokowany","rozÅ‚ożony","rozÅ‚upany","rozluźniany","rozmanażany","rozmasowany","rozmawiany","rozmazany","rozmazywany","rozmiÄ™kczony","rozmieniany","rozmieniony","rozmieszczany","rozmieszczony","rozminiÄ™ty","rozmnożony","rozmontowany","rozmówiony","rozmrażany","rozmrożony","rozmyÅ›lany","rozmyty","różnicowany","rozniecany","roznieciony","rozniesiony","różniony","roznoszony","rozochocony","rozpaczany","rozpakowany","rozpakowywany","rozpalany","rozpalony","rozpamiÄ™tywany","rozpaskudzany","rozpatrywany","rozpatrzony","rozpÄ™dzany","rozpÄ™dzony","rozpÄ™tany","rozpieszczany","rozpieszczony","rozpiÄ™ty","rozpiÅ‚owany","rozpinany","rozpisany","rozpisywany","rozplanowany","rozpÅ‚aszczany","rozpÅ‚aszczony","rozplÄ…tany","rozplÄ…tywany","rozpÅ‚yniÄ™ty","rozpoczÄ™ty","rozpoczynany","rozpogodzony","rozporzÄ…dzany","rozporzÄ…dzony","rozpoÅ›cierany","rozpostrzony","rozpowiadany","rozpowiedziany","rozpowszechniany","rozpowszechniony","rozpoznany","rozpoznawany","rozpracowany","rozpraszany","rozprawiany","rozprawiczony","rozprawiony","rozprostowany","rozproszony","rozprowadzany","rozprowadzony","rozpruty","rozpruwany","rozprzestrzeniany","rozprzestrzeniony","rozpuszczany","rozpuszczony","rozpychany","rozpylany","rozpylony","rozpytany","rozpytywany","rozrastany","rozreklamowany","rozrobiony","rozroÅ›niÄ™ty","rozróżniany","rozróżniony","rozruszany","rozrysowany","rozrywany","rozrzucany","rozsadzany","rozsadzony","rozsÄ…dzony","rozÅ›cielony","rozsiany","rozsiekany","rozsiewany","rozsiodÅ‚any","rozsÅ‚awiany","rozsÅ‚awiony","rozsmarowany","rozsmarowywany","rozÅ›mieszany","rozstany","rozstÄ…piony","rozstawany","rozstawiany","rozstawiony","rozstrojony","rozstrzÄ…sany","rozstrzeliwany","rozstrzelony","rozstrzygany","rozstrzygniÄ™ty","rozsuniÄ™ty","rozsupÅ‚any","rozÅ›wietlany","rozÅ›wietlony","rozsyÅ‚any","rozsypany","rozsypywany","rozszarpany","rozszarpywany","rozszczepiany","rozszczepiony","rozszerzany","rozszerzony","rozszyfrowany","roztaczany","roztapiany","roztarty","roztoczony","roztopiony","roztrwoniony","roztrzÄ…sany","roztrzaskany","rozumiany","rozumowany","rozwalany","rozwalony","rozwarty","rozważany","rozważony","rozweselany","rozweselony","rozwiany","rozwiÄ…zany","rozwiÄ…zywany","rozwidniany","rozwiedziony","rozwierany","rozwiercony","rozwieszany","rozwieszony","rozwiewany","rozwieziony","rozwikÅ‚any","rozwiniÄ™ty","rozwlekany","rozwodzony","rozwÅ›cieczany","rozwÅ›cieczony","rozzÅ‚oszczony","rugany","ruinowany","rujnowany","runiÄ™ty","ruszany","ruszony","rwany","ryczany","ryglowany","rymowany","rysowany","ryty","ryzykowany","rzÄ…dzony","rzeźbiony","rżniÄ™ty","rzucany","rzucony","rzygany","sabotażowany","sÄ…czony","sadzany","sadzony","sÄ…dzony","salutowany","salwowany","sankcjonowany","satysfakcjonowany","scalony","scementowany","scentrowany","scharakteryzowany","schÅ‚adzany","schlany","schlapany","schlebiony","schÅ‚odzony","schowany","schroniony","schrupany","schrzaniony","schwytany","schylany","Å›ciÄ…gniÄ™ty","Å›cielony","Å›ciemniany","Å›ciemniony","Å›cierany","Å›cierpiony","Å›ciÄ™ty","Å›cigany","Å›cinany","Å›ciskany","Å›ciÅ›niÄ™ty","Å›ciszany","Å›ciszony","sÄ™dziowany","segregowany","selekcjonowany","separowany","sÄ™piony","serwowany","sfabrykowany","sfajczony","sfaÅ‚szowany","sfaulowany","sfilmowany","sfinalizowany","sfinansowany","sfingowany","sformalizowany","sformatowany","sformowany","sformuÅ‚owany","sforsowany","sfotografowany","shimmerowany","siany","siekany","siorbany","skadrowany","skakany","skalany","skaleczony","skalibrowany","skalkulowany","skalpowany","skanalizowany","skandowany","skanowany","skapitulowany","skarcony","skarżony","skasowany","skatalogowany","skazany","skażony","skazywany","skierowany","skÅ‚adany","skÅ‚adowany","skÅ‚aniany","sklasyfikowany","skleciony","sklejany","sklejony","sklepany","skłócony","skÅ‚oniony","sklonowany","sknocony","skojarzony","skolonizowany","skoÅ‚owany","skombinowany","skomentowany","skompensowany","skompletowany","skomplikowany","skomponowany","skompresowany","skompromitowany","skomunikowany","skonany","skoncentrowany","skoÅ„czony","skondensowany","skonfigurowany","skonfiskowany","skonfrontowany","skonkretyzowany","skonsolidowany","skonstruowany","skonsultowany","skonsumowany","skontaktowany","skontrolowany","skoordynowany","skopany","skopiowany","skorektowany","skorumpowany","skorygowany","skorzystany","skoszony","skracany","skradziony","skrÄ™cany","skrÄ™cony","skremowany","skreÅ›lany","skreÅ›lony","skrobany","skrobniÄ™ty","skrócony","skrojony","skropiony","skruszony","skrystalizowany","skryty","skrytykowany","skrywany","skrzecowany","skrzepniÄ™ty","skrzyczany","skrzyty","skrzywdzony","skrzyżowany","skserowany","skubany","skubniÄ™ty","skulony","skumulowany","skupiany","skupiony","skupowany","skurczony","skuszony","skuty","skuwany","skwitowany","sÅ‚any","sÅ‚awiony","Å›ledzony","Å›liniony","Å›lizgany","sÅ‚odzony","sÅ‚uchany","sÅ‚yszany","smagany","smarowany","smażony","Å›miecony","smuty","smyrany","snuty","sondowany","sortowany","spafycikowany","spakowany","spalany","spaÅ‚aszowany","spalony","spaÅ‚owany","spamiÄ™tany","spaprany","sparafrazowany","sparaliżowany","sparowany","spartaczony","spartolony","sparzony","spasowany","spataÅ‚aszony","spauzowany","spawany","spawiony","specjalizowany","spÄ™dzany","spÄ™dzony","spekulowany","speÅ‚niany","speÅ‚niony","spenetrowany","spÄ™tany","spierany","spiÄ™ty","Å›piewany","spiÅ‚owany","spinany","spisany","spiskowany","spisywany","spity","spÅ‚acany","spÅ‚acony","splÄ…drowany","splajtowany","splamiony","spÅ‚aszczony","splatany","splÄ…tany","spÅ‚atany","spÅ‚awiany","spÅ‚awiony","spÅ‚odzony","spÅ‚oniÄ™ty","spÅ‚oszony","spÅ‚ukany","spÅ‚ukiwany","spluwany","spÅ‚ywany","spoczÄ™ty","spoczywany","spodziewany","spojony","spolaryzowany","spoliczkowany","sponiewierany","sponsorowany","spopielany","spopielony","spopularyzowany","sportretowany","sporzÄ…dzany","sporzÄ…dzony","spostrzegany","spotÄ™gowany","spotkany","spotykany","spoufalany","spowalniany","spowiadany","spowodowany","spowolniony","spoźniony","spóźniony","spożytkowany","spożyty","spożywany","sprany","sprasowany","spraszany","sprawdzony","sprawiony","sprawowany","sprecyzowany","spreparowany","sprężany","sprężony","spróbowany","sprofanowany","sprofilowany","sprostowany","sproszkowany","sproszony","sprowadzany","sprowadzony","sprowokowany","spryskany","spryskiwany","sprywatyzowany","sprzÄ…tany","sprzÄ…tniÄ™ty","sprzeczany","sprzedany","sprzedawany","sprzeniewierzony","spudÅ‚owany","spustoszony","spuszczany","spuszczony","spychany","ssany","stabilizowany","stacjonowany","staczany","staranowany","starczany","stargowany","startowany","stawiany","stawiony","stemplowany","stenografowany","stepowany","sterowany","sterroryzowany","sterylizowany","stÅ‚amszony","stÅ‚umiony","stniÄ™ty","stoczony","stoÅ‚owany","stonowany","stopiony","stopniowany","storpedowany","stosowany","strÄ…cany","stracony","strÄ…cony","strajkowany","straszony","stratowany","strawiony","streamowany","stresowany","streszczany","streszczony","strofowany","strojony","stroszony","strugany","struty","strymowany","strzÄ…sany","strzaskany","strzÄ…Å›niÄ™ty","strzelony","strzepany","strzÄ™piony","strzepniÄ™ty","strzepywany","studiowany","studzony","stukany","stukniÄ™ty","stulony","stwardniony","stwarzany","stwierdzany","stwierdzony","stworzony","stykany","stylizowany","stymulowany","sugerowany","sumowany","suniÄ™ty","swatany","swawolony","Å›wiadczony","Å›wiecony","Å›wiÄ™cony","Å›wierzbiony","Å›wiÄ™towany","Å›wintuszony","sycony","sygnalizowany","symulowany","synchronizowany","sypany","sypniÄ™ty","szachrowany","szacowany","szafowany","szamotany","szanowany","szargany","szarpany","szarpniÄ™ty","szarżowany","szasowany","szastany","szatkowany","szczÄ™dzony","szczepiony","szczerzony","szczuty","szczycony","szczypany","szczytowany","szefowany","szemrany","szepniÄ™ty","szeptany","szerzony","szkalowany","szkicowany","szklony","szkodzony","szkolony","szlachtowany","szlifowany","szmuglowany","szokowany","szorowany","szpachlowany","szpanowany","szperany","szprycowany","sztachniÄ™ty","szturchany","szturchniÄ™ty","szturmowany","szufladkowany","szuflowany","szukany","szulerowany","szwankowany","szydeÅ‚kowany","szydzony","szyfrowany","szykanowany","szykowany","szyty","taktowany","tamowany","tankowany","tapetowany","taplany","taranowany","targany","targniÄ™ty","targowany","tarmoszony","tarty","tarzany","tasowany","taszczony","tatuowany","tchniÄ™ty","telefonowany","telegrfowany","teleportowany","temperowany","teoretyzowany","tÄ™piony","terroryzowany","testowany","tkany","tkniÄ™ty","tÅ‚amszony","tÅ‚oczony","tÅ‚umaczony","tÅ‚umiony","toczony","tolerowany","tonowany","topiony","torowany","torturowany","towarzyszony","trÄ…biony","trÄ…cany","tracony","trÄ…cony","trafiany","trafiony","tragizowany","traktowany","transferowany","transformowany","transmitowany","transportowany","tratowany","trawiony","trenowany","tresowany","triumfowany","tropiony","troszczony","truty","trwoniony","trymowany","tryskany","tryÅ›niÄ™ty","tryumfowany","trywializowany","trzaskany","trzasniÄ™ty","trzepany","trzepniÄ™ty","trzepotany","trzÄ™siony","trzymany","tuczony","tuÅ‚any","tulony","turlany","tuszowany","twistowany","tworzony","tykany","tyranizowany","tyrany","tytuÅ‚owany","uaktualniany","uaktualniony","uaktywniany","uaktywniony","uargumentowany","uatrakcyjniony","ubabrany","ubarwiany","ubarwiony","ubawiony","ubezpieczany","ubezpieczony","ubezwÅ‚asnowolniony","ubiczowany","ubiegany","ubierany","ubijany","ubity","ubÅ‚agany","ubliżany","ubliżony","ubolewany","ubóstwiany","ubrany","ubroczony","ubrudzony","ucaÅ‚owany","ucharakteryzowany","uchowany","uchroniony","uchwalany","uchwalony","uchwycony","uchylany","uchylony","uciÄ…gniÄ™ty","ucieleÅ›niany","ucierany","ucierpiany","uciÄ™ty","ucinany","uciskany","uciÅ›niÄ™ty","uciszany","uciszony","uciuÅ‚any","ucywilizowany","uczczony","uczepiony","uczesany","uczÄ™szczany","uczony","ucztowany","uczuty","uczyniony","udany","udaremniony","udawany","udekorowany","udeptywany","uderzany","uderzony","udobruchany","udokumentowany","udomawiany","udomowiony","udoskonalany","udoskonalony","udostÄ™pniany","udostÄ™pniony","udowadniany","udowodniony","Udramatyzowany","udrÄ™czony","udrożniony","udupiony","uduszony","udzielany","udzielony","udźwigniÄ™ty","ueiwarygodniony","ufany","ufarbowany","uformowany","ufortyfikowany","ufundowany","ugadany","uganiany","ugaszany","ugaszony","ugiÄ™ty","uginany","ugÅ‚askany","ugniatany","ugodzony","ugoszczony","ugotowany","ugrany","ugruntowany","ugryziony","ugrzÄ™zniÄ™ty","uhistoryzowany","uhonorowany","uiÅ›city","ujadany","ujarzmiany","ujarzmiony","ujawniany","ujawniony","ujÄ™ty","ujeżdżany","ujeżdżony","ujmowany","ujrzany","ukamieniowany","ukarany","ukartowany","ukÄ…szony","ukatrupiony","ukazany","ukazywany","ukierowany","ukierunkowany","ukÅ‚adany","uklepany","ukÅ‚oniony","ukÅ‚uty","uknuty","ukojony","ukoÅ‚ysany","ukoÅ„czony","ukonkretniony","ukoronowany","ukradziony","ukrÄ™cany","ukrÄ™cony","ukrojony","ukryty","ukrywany","ukrzyżowany","uksztaÅ‚towany","ukuty","uÅ‚agodzony","uÅ‚askawiany","uÅ‚askawiony","ulatniany","uÅ‚atwiany","uÅ‚atwiony","uleczany","uleczony","ulegany","ulepiony","ulepszany","ulepszony","ulokowany","ulotniony","uÅ‚ożony","umacniany","umalowany","umartwiany","umawiany","umazany","umeblowany","umiejscowiony","umieszczany","umieszczony","umilany","umilony","umkniÄ™ty","umniejszany","umniejszony","umocniony","umocowany","umoczony","umodelowany","umorzony","umotywowany","umówiony","umożliwiany","umożliwiony","umroczniony","umyty","unaoczniony","unicestwiany","unicestwiony","uniemożliwainy","uniemożliwiony","unierochomiony","uniesiony","unieszczęśliwiany","unieszczęśliwiony","unieszkodliwiany","unieszkodliwiony","unieważniany","unieważniony","uniewinniony","uniezależniony","unikany","unikniÄ™ty","unormowany","unoszony","unowoczesniany","unowoczeÅ›niany","uodporniony","uogólniany","upakowany","upalany","upalony","upamiÄ™tniany","upamiÄ™tniony","upaÅ„stwowiony","upaprany","uparty","upaskudzony","upchany","upchniÄ™ty","upewniany","upewniony","upgradowany","upichcony","upiÄ™kszany","upiÄ™kszony","upierany","upierdolony","upiÄ™ty","upijany","upilnowany","upinany","upity","uplastyczniony","upÅ‚yniÄ™ty","upodabniany","upodobniony","upojony","upokorzany","upokorzony","upolowany","upominany","uporzÄ…dkowany","upowszechniony","upozorowany","upozowany","uprany","uprasowany","upraszczany","uprawdopodobniony","uprawiany","uproszczony","uproszony","uprowadzany","uprowadzony","uprzÄ…tany","uprzÄ…tniÄ™ty","uprzedony","uprzedzany","uprzyjemniany","uprzyjemniony","uprzykrzany","uprzytomniony","upubliczniany","upubliczniony","upudrowany","upuszczany","upuszczony","upychany","urabiany","uraczany","uradowany","UrÄ…gany","uratowany","urażany","urażony","uregulowany","urobiony","uroniony","uroÅ›niÄ™ty","urozmaicany","urozmaicony","uruchamiany","uruchomiony","urwany","urywany","urzÄ…dzany","urzÄ…dzony","urzeczywistniany","urzeczywistniony","urżniÄ™ty","usadowiony","usadzony","usamowolniony","usankcjonowany","usatyfakcjonowany","uschniÄ™ty","uÅ›ciskany","uÅ›cislony","uÅ›ciÅ›niÄ™ty","usidlony","usiedzony","uskÅ‚adany","uskoczony","uskuteczniany","uskuteczniony","usÅ‚uchany","usÅ‚ugiwany","usÅ‚użony","usÅ‚yszany","usmażony","uÅ›miany","uÅ›miercany","uÅ›miercony","uÅ›mierzony","uspany","uÅ›piony","uspokajany","uspokojony","uspoÅ‚eczniany","usprawiedliwiany","usprawiedliwiony","usprawniony","usprzÄ…tany","ustabilizowany","ustalany","ustalony","ustanawiany","ustanowiony","ustÄ…piony","ustatkowany","ustawiany","ustawiony","ustÄ™powany","ustosunkowany","ustrojony","ustrzegany","ustrzelony","usuniÄ™ty","ususzony","usuwany","uÅ›wiadamiany","uÅ›wiadczony","uÅ›wiadomiony","uÅ›wiÄ™cony","uÅ›winiony","usychany","usypany","usypiany","usystematyzowany","usytuowany","uszanowany","uszczelniany","uszczęśliwiany","uszczęśliwiony","uszczuplony","uszczypniÄ™ty","uszkadzany","uszkodzony","uszlachetniany","uszlachetniony","usztywniony","uszykowany","uszyty","utajniony","utargowany","utarty","utemperowany","utkany","utkniÄ™ty","utkwiony","utoczony","utopiony","utorowany","utożsamiany","utożsamiony","utracony","utrÄ…cony","utrudniany","utrudniony","utrwalany","utrwalony","utrzymywany","utuczony","utulony","utwierdzany","utwierdzony","utworzony","utylizowany","uwalniany","uwalony","uwarunkowany","uważany","uwiÄ…zany","uwiÄ…zywany","uwidoczniony","uwieczniany","uwieczniony","uwielbiany","uwielbiony","uwieÅ„czony","uwierany","uwierzony","uwieszony","uwieziony","uwiÄ™ziony","uwijany","uwikÅ‚any","uwiniÄ™ty","uwity","uwÅ‚aczany","uwÅ‚aszczony","uwodzony","uwolniony","uwsteczniany","uwsteczniony","uwydatniany","uwypiklony","uwzglÄ™dniany","uwzglÄ™dniony","użądlony","uzależniany","uzależniony","uzasadniany","uzasadniony","uzbierany","uzbrajany","uzbrojony","uzdrawiany","uzdrowiony","użerany","uzewnÄ™trzniany","uzewnÄ™trzniony","uzgadniany","uzgodniony","uziemiony","uzmysÅ‚owiony","uznany","uznawany","uzupeÅ‚niany","uzupeÅ‚niony","uzurpowany","użyczany","użyczony","uzyskany","uzyskiwany","użyty","używany","wabiony","wÄ…chany","wachlowany","wahany","walczony","waÅ‚kowany","walniÄ™ty","walony","ważony","wbijany","wbity","wcelowany","wchÅ‚oniÄ™ty","wciÄ…gany","wciÄ…gniÄ™ty","wcielany","wcielony","wcierany","wciÄ™ty","wcinany","wciskany","wciÅ›niÄ™ty","wczepiony","wczoÅ‚gany","wczuty","wczytany","wczytywany","wdany","wdarty","wdawany","wdepniÄ™ty","wdeptany","wdetonowany","wdmuchiwany","wdrapany","wdrapywany","wdrażany","wdrążony","wdrożony","wduszony","wdychany","wdzierany","wÄ™dkowany","wentylowany","wepchany","wepchniÄ™ty","werbowany","weryfikowany","wessany","wetkany","wetkniÄ™ty","wezwany","wgłębiany","wgniatany","wgnieciony","wgrany","wgryzany","wgryziony","wiÄ…zany","wibrowany","widywany","widziany","wiedzony","wielbiony","wiercony","wierzgany","wierzony","wieszany","wietrzony","więżony","wikÅ‚any","windowany","winszowany","wiosÅ‚owany","wirowany","witany","wity","wizualizowany","wjeżdżany","wkalkulowany","wkÅ‚adany","wklejany","wklejony","wklepany","wkÅ‚uty","wkomponowany","wkopany","wkopywany","wkraczany","wkradany","wkradziony","wkrÄ™cany","wkrÄ™cony","wkupiony","wkurwiany","wkuty","wkuwany","włączany","włączony","wÅ‚adany","wÅ‚adowany","wÅ‚amany","wÅ‚amywany","wlany","wlepiany","wlepiony","wlewany","wliczany","wliczony","wÅ‚ożony","wmanewrowany","wmanipulowany","wmawiany","wmieszany","wmówiony","wmurowany","wmuszony","wnerwiany","wnerwiony","wniesiony","wnikany","wnikniÄ™ty","wnioskowany","wnoszony","wodowany","wojowany","woÅ‚any","woskowany","wożony","wpajany","wpakowany","wparowany","wpasowany","wpatrywany","wpÄ™dzany","wpÄ™dzony","wperswadowany","wpieniony","wpiÄ™ty","wpisany","wpisywany","wpÅ‚acany","wpÅ‚acony","wplatany","wplÄ…tany","wplÄ…tywany","wpojony","wpompowany","wpraszany","wprawiany","wproszony","wprowadzany","wprowadzony","wpuszczony","wpychany","wrabiany","wrÄ™czany","wrobiony","wróżony","wryty","wrzucany","wrzucony","wrzynany","wsadzany","wsadzony","wskazany","wskazywany","wskórany","wskrzeszany","wskrzeszony","wÅ›lizgiwany","wÅ›lizgniÄ™ty","wsÅ‚uchany","wsparty","wspierany","wspiÄ™ty","współczuty","współodczuwany","współtworzony","współżyty","wspomagany","wspominany","wspomniany","wstÄ…piony","wstawiany","wstawiony","wstrzÄ…sany","wstrzÄ…Å›niÄ™ty","wstrzelony","wstrzykiwany","wstrzykniÄ™ty","wstrzymany","wstrzymywany","wstukany","wsuniÄ™ty","wsuwany","wsypany","wszamany","wszczepiany","wszczepiony","wszczÄ™ty","wszczynany","wszyty","wtajemniczany","wtajemniczony","wtapiany","wtargniÄ™ty","wtarty","wtaszczony","wtÅ‚oczony","wtopiony","wtrÄ…cony","wtryniany","wtulany","wtulony","wtykany","wwalony","wwiercany","wwiercony","wwieziony","wwożony","wyartykuÅ‚owany","wyautowany","wybaczany","wybaczony","wybadany","wybatożony","wybawiony","wybebeszony","wybeÅ‚kotany","wybiczowany","wybielany","wybielony","wybierany","wybijany","wybity","wybÅ‚agany","wyblakniÄ™ty","wybrandzlowany","wybrany","wybroniony","wybrzydzany","wybuchany","wybuchniÄ™ty","wybudowany","wybudzany","wybudzony","wyburzany","wyburzony","wycackany","wycaÅ‚owany","wyceniany","wyceniony","wychlany","wychÅ‚ostany","wychodowany","wychowany","wychowywany","wychrobotany","wychwalany","wychwycony","wychylany","wychylony","wyciÄ…gany","wyciÄ…gniÄ™ty","wyciekany","wycieniowany","wycierany","wyciÄ™ty","wycinany","wyciskany","wyciÅ›niÄ™ty","wyciszany","wyciszony","wycofany","wyćwiczony","wycyckany","wycyganiony","wyczarowany","wyczarterowany","wyczekany","wyczekiwany","wyczerpany","wyczesany","wyczoÅ‚gany","wyczoÅ‚giwany","wyczuty","wyczuwany","wyczyniany","wyczyszczony","wyczytany","wyczytywany","wydalany","wydalony","wydany","wydÄ™biony","wydedukowany","wydelegowany","wydepilowany","wydeptywany","wydÅ‚ubany","wydÅ‚ubywany","wydÅ‚użany","wydÅ‚użony","wydmuchany","wydmuchiwany","wydobyty","wydobywany","wydojony","wydoroÅ›lany","wydostany","wydrany","wydrapany","wydrapywany","wydrążony","wydrukowany","wydukany","wyduszony","wydychany","wydziedziczony","wydzielany","wydzielony","wydzierany","wydzierżawiony","wydziobany","wydziwiany","wydzwaniany","wyedukowany","wyedytowany","wyeeliminowany","wyegzekwowany","wyeksmitowany","wyekspediowany","wyeksploatowany","wyeksponowany","wyeksportowany","wyeliminowany","wyemigrowany","wyemitowany","wyewoluowany","wyfruniÄ™ty","wygadany","wygadywany","wyganiany","wygarbowany","wygarniany","wygarniÄ™ty","wygasany","wygaÅ›niÄ™ty","wygaszany","wygaszony","wygenerowany","wygiÄ™ty","wyginany","wygÅ‚adzany","wygÅ‚adzony","wygÅ‚aszany","wygÅ‚odzony","wygÅ‚osowany","wygÅ‚oszony","wygłówkowany","wygnany","wygolony","wygoniony","wygooglowany","wygospodarowany","wygotowany","wygrany","wygrawerowany","wygrażany","wygrywany","wygryziony","wygrzany","wygrzebany","wygrzebywany","wygrzewany","wygubiony","wyhaczony","wyhaftowany","wyhamowany","wyhodowany","wyizolowany","wyjadany","wyjaÅ›niany","wyjaÅ›niony","wyjawiany","wyjawiony","wyjedzony","wyjÄ™ty","wyjmowany","wykadrowany","wykalibrowany","wykalkulowany","wykaÅ„czany","wykantowany","wykÄ…pany","wykaraskany","wykarczowany","wykarmiany","wykasowany","wykastrowany","wykazany","wykazywany","wykierowany","wykitowany","wykiwany","wykÅ‚adany","wyklarowany","wyklepany","wyklinany","wykłócany","wykluczany","wykluczony","wykluty","wykÅ‚uty","wykminiony","wykolejony","wykoÅ‚owany","wykombinowany","wykonany","wykoÅ„czony","wykonywany","wykopany","wykopniÄ™ty","wykopywany","wykorkowany","wykorzeniany","wykorzeniony","wykorzystany","wykorzystywany","wykoszony","wykpity","wykradany","wykradniÄ™ty","wykrÄ™cany","wykrÄ™cony","wykreowany","wykreÅ›lany","wykreÅ›lony","wykrochmalony","wykrojony","wykrwawiany","wykrwawiony","wykryty","wykrywany","wykrzesany","wykrztuszony","wykrzyczony","wykrzykiwany","wykrzykniÄ™ty","wykrzywiany","wyksztaÅ‚cony","wyksztuszony","wykupiony","wykupywany","wykuty","wykuwany","wyłączany","wyłączony","wylÄ…dowany","wyÅ‚adowany","wyÅ‚adowywany","wyÅ‚ajany","wyÅ‚amany","wyÅ‚amywany","wyÅ‚aniany","wylansowany","wylany","wyÅ‚apany","wyÅ‚apywany","wyÅ‚awiany","wyleasingowany","wyleczony","wylÄ™gany","wylegimytowany","wylewany","wyÅ‚gany","wylicytowany","wyliczany","wyliczony","wylizany","wylizywany","wylogowany","wyÅ‚oniony","wylosowany","wyÅ‚owiony","wyÅ‚ożony","wyÅ‚udzany","wyÅ‚udzony","wyÅ‚upany","wyÅ‚uskany","wyÅ‚uskiwany","wyÅ‚uszczony","wyluzowany","wymacany","wymachiwany","wymagany","wymahiwany","wymalowany","wymamrotany","wymanewrowany","wymarzony","wymasowany","wymawiany","wymazany","wymazywany","wymeldowany","wymeldowywany","wymiatany","wymieciony","wymieniany","wymieniony","wymierzany","wymieszany","wymigany","wymigiwany","wymijany","wyminiÄ™ty","wymkniÄ™ty","wymoczony","wymodelowany","wymontowany","wymordowany","wymskniÄ™ty","wymuszany","wymyÅ›lany","wymyÅ›lony","wymyty","wynagradzany","wynagrodzony","wynajdowany","wynajdywany","wynajÄ™ty","wynajmowany","wynaleziony","wynarodowiony","wynegocjowany","wyniesiony","wynikniÄ™ty","wyniszczany","wyniszczony","wyniuchany","wynoszony","wynurzany","wyobrażany","wyobrażony","wyodrÄ™bniony","wyolbrzymiany","wyolbrzymiony","wyorbowany","wyosiowany","wyostrzany","wyostrzony","wypaczany","wypakowany","wypakowywany","wypalany","wypalony","wypaÅ‚owany","wyparowany","wyparty","wypasany","wypastowany","wypatroszony","wypatrywany","wypatrzony","wypchany","wypchniÄ™ty","wypÄ™dzany","wypÄ™dzlowany","wypeÅ‚niany","wypeÅ‚niony","wypersfadowany","wyperswadowany","wypierany","wypiÄ™ty","wypijany","wypinany","wypisany","wypisywany","wypity","wypÅ‚acany","wypÅ‚acony","wypÅ‚akany","wypÅ‚akiwany","wypÅ‚aszczony","wyplatany","wyplÄ…tany","wypleniony","wyplewiony","wypÅ‚oszony","wypÅ‚ukany","wypÅ‚ukiwany","wypluty","wypluwany","wypocony","wypoczÄ™ty","wypolerowany","wypominany","wypomniany","wypompowany","wypompowywany","wyposażony","wypowiadany","wypowiedziany","wypoziomowany","wypożyczany","wypracowany","wypracowywany","wyprany","wyprasowany","wypraszany","wyprawiany","wyprawiony","wypróbowany","wyprodukowany","wyprojektowany","wypromieniowany","wypromowany","wyprostowany","wyprostowywany","wyproszony","wyprowadzany","wyprowadzony","wypróżniany","wypróżniony","wypruty","wypruwany","wyprzedany","wyprzedawany","wyprzedzany","wyprzedzony","wyprzÄ™gany","wypstrykany","wypucowany","wypuszczany","wypuszczony","wypychany","wypytany","wypytywany","wyrÄ…bany","wyrabiany","wyrÄ…bywany","wyratowany","wyrażany","wyrażony","wyrecytowany","wyrÄ™czany","wyrÄ™czony","wyregulowany","wyrejestrowany","wyremontowany","wyreżyserowany","wyrobiony","wyrolowany","wyroÅ›niÄ™ty","wyrównany","wyrównywany","wyróżniany","wyróżniony","wyrugowany","wyruszany","wyrwany","wyrypany","wyrysowany","wyryty","wyrywany","wyrzÄ…dzony","wyrzeźbiony","wyrżniÄ™ty","wyrzucany","wyrzucony","wyrzygany","wyrzynany","wyrzywany","wysÄ…czony","wysadzany","wysadzony","wyschniÄ™ty","wyÅ›ciskany","wyselekcjonowany","wysÄ™piony","wysiadywany","wysiedzony","wysilany","wysilony","wyskakiwany","wyskalowany","wyskoczony","wyskrobany","wyskubywany","wysÅ‚any","wyÅ›ledzony","wyÅ›lizgiwany","wyÅ›lizgniÄ™ty","wysÅ‚owiony","wysÅ‚uchany","wysÅ‚uchiwany","wysmagany","wysmarkany","wysmarowany","wysmażany","wysmażony","wyÅ›miany","wyÅ›miewany","wysmoÅ‚owany","wysmyrany","wyÅ›niony","wysnuty","wysnuwany","wysondowany","wyspecjalizowany","wyÅ›piewany","wyÅ›piewywany","wyspowiadany","wysprzÄ…tany","wysprzedany","wyssany","wystartowany","wystawiony","wysterelizowany","wysterylizowany","wystosowany","wystosowywany","wystraszony","wystrojony","wystrugany","wystrychniÄ™ty","wystrzegany","wystrzelany","wystrzeliwany","wystrzelony","wystudzony","wystukany","wystukiwany","wystygniÄ™ty","wysuniÄ™ty","wysuszany","wysuwany","wyswatany","wyÅ›wiadczany","wyÅ›wiadczony","wyÅ›wietlany","wyÅ›wietlony","wyswobodzony","wysyÅ‚any","wysypany","wysypywany","wysysany","wyszabrowany","wyszalany","wyszarpany","wyszarpniÄ™ty","wyszasowany","wyszczotkowany","wyszczuplony","wyszeptany","wyszkolony","wyszlifowany","wyszorowany","wyszperany","wyszukany","wyszukiwany","wyszumiony","wyszykowany","wyszyty","wytapetowany","wytargany","wytargowany","wytarty","wytarzany","wytaszczony","wytatuowany","wytchniÄ™ty","wytÄ™piony","wytkniÄ™ty","wytÅ‚oczony","wytÅ‚umaczony","wytÅ‚umiony","wytoczony","wytrÄ…biony","wytrÄ…cany","wytrÄ…cony","wytransmitowany","wytransportowany","wytrenowany","wytresowany","wytriangulowany","wytropiony","wytruty","wytrzÄ…sany","wytrzasniÄ™ty","wytrzÄ…Å›niÄ™ty","wytrzebiony","wytrzepany","wytrzeszczany","wytrzeźwiany","wytrzymany","wytrzymywany","wytwarzany","wytworzony","wytyczony","wytykany","wytypowany","wyuczony","wywabiany","wywabiony","wywÄ…chany","wywalany","wywalczony","wywalony","wywarty","wywarzany","wyważany","wyważony","wywÄ™szany","wywężykowany","wywiany","wywiÄ…zany","wywiÄ…zywany","wywierany","wywiercony","wywieszany","wywieszony","wywietrzony","wywieziony","wywijany","wywindowany","wywiniÄ™ty","wywÅ‚aszczony","wywlekany","wywnÄ™trzniony","wywnioskowany","wywodzony","wywolany","wywoÅ‚ywany","wywoskowany","wywożony","wywracany","wywrócony","wywróżony","wywyższany","wyżalony","wyzbyty","wyzdrowiony","wyżebrany","wyżerany","wyzerowany","wyzioniÄ™ty","wyznaczany","wyznaczony","wyznany","wyznawany","wyzwalany","wyzwany","wyzwolony","wyzygzakowany","wyżynany","wyzyskany","wyzyskiwany","wyżyty","wyzywany","wyżywany","wyżywiony","wzbijany","wzbity","wzbogacany","wzbogacony","wzbraniany","wzbudzany","wzbudzony","wzburzany","wzburzony","wżeniony","wziÄ™ty","wzmacniony","wzmagany","wzmocniony","wznawiany","wzniecany","wznieciony","wzniesiÄ™ty","wznoszony","wznowiony","wzorowany","wzroÅ›niÄ™ty","wzruszony","wzwyżany","wzywany","zaabordowany","zaadaptowany","zaadoptowany","zaadresowany","zaakcentowany","zaakceptowany","zaaklimatyzowany","zaalarmowany","zaanektowany","zaangażowany","zaanonsowany","zaapelowany","zaaplikowany","zaaportowany","zaaprobowany","zaaranżowany","zaaresztowany","zaatakowany","zabaczony","zabalowany","zabandażowany","zabarwiony","zabarykadowany","zabawiany","zabawiony","zabepieczany","zabetonowany","zabezpieczony","zabierany","zabity","zabłądzony","zablefowany","zabÅ‚ocony","zablokowany","zabraniany","zabrany","zabrniÄ™ty","zabroniony","zabrudzony","zabudowany","zabukowany","zabulony","zaburzony","zabutelkowany","zacementowany","zacerowany","zachciany","zachÄ™cany","zachÄ™cony","zachlapany","zachodzony","zachomikowany","zachorowany","zachowany","zachowywany","zachwalany","zachwalony","zachwiany","zachwycony","zaciÄ…gany","zaciÄ…gniÄ™ty","zaciążony","zaciekawiony","zaciemniany","zaciemniony","zacierany","zacieÅ›niony","zaciÄ™ty","zacinany","zaciskany","zaciÅ›niÄ™ty","zaćmiony","zacumowany","zacytowany","zaczadzony","zaczarowany","Zaczepiany","zaczepiony","zaczerpany","zaczesany","zaczÄ™ty","zaczoÅ‚gany","zaczynany","zadarty","zadawalany","zadawany","zadbany","zadebiutowany","zadedykowany","zadeklamowany","zadeklarowany","zademonstrowany","zadenucjowany","zadepeszowany","zadeptany","zadeptywany","zadÄ™ty","zadÅ‚awiony","żądlony","zadÅ‚użany","zadÅ‚użony","zadokowany","zadomowiony","zadowalany","zadrapany","zadraÅ›niÄ™ty","zadrÄ™czany","zadrÄ™czony","zadrutowany","zadurzany","zadurzony","zaduszony","zadymiony","zadźgany","zadziobany","zadziwiany","zadziwiony","zafakturowany","zafaÅ‚szowany","zafarbowany","zafiksowany","zafundowany","zagadany","zagadniÄ™ty","zagadywany","zagajony","zaganiany","zagapiony","zagarażowany","zagarniany","zagarniÄ™ty","zagaszony","zagazowany","zagÄ™szczony","zagiÄ™ty","zaginany","zaginiÄ™ty","zagłębiany","zagłębiony","zagÅ‚odzony","zagÅ‚uszany","zagÅ‚uszony","zagmatwany","zagnany","zagnieżdżony","zagojony","zagoniony","zagospodarowany","zagotowany","zagrabiony","zagradzany","zagrażany","zagrodzony","zagrywany","zagryzany","zagryziony","zagrzany","zagrzebany","zagrzewany","zagubiony","zagwarantowany","zahaczony","zahamowany","zahandlowany","zaharowany","zahartowany","zahipnotyzowany","zaholowany","zaimitowany","zaimplantowany","zaimplementowany","zaimprowizowany","zainaugurowany","zainfekowany","zainicjowany","zainkasowany","zainscenizowany","zainspirowany","zainstalowany","zainteresowany","zaintrygowany","zaintubowany","zainwestowany","zaizolowany","zajadany","zajany","zajarany","zajechany","zajÄ™ty","zajmowany","zakablowany","zakamuflowany","zakasany","zakasowany","zakÄ…szany","zakatalogowany","zakatowany","zakatrupiony","zakazany","zakażany","zakazywany","zakiszony","zakÅ‚adany","zaklasyfikowany","zaklejany","zaklejony","zaklepany","zaklepywany","zaklinany","zaklinowany","zakłócany","zakłócony","zaklopotany","zakÅ‚uty","zakneblowany","zakodowany","zakolczykowany","zakolorowany","zakoÅ‚ysany","zakomunikowany","zakoÅ„czony","zakonserwowany","zakopany","zakopywany","zakorzeniany","zakorzeniony","zakoszony","zakosztowany","zakotwiczany","zakotwiczony","zakpiony","zakradany","zakrÄ™cany","zakrÄ™cony","zakreÅ›lany","zakreÅ›lony","zakrwawiony","zakryty","zakrywany","zakrzyczany","zakrzykniÄ™ty","zakrzywiany","zakrzywiony","zaksiÄ™gowany","zaktualizowany","zaktywizowany","zaktywowany","zakumany","zakupiony","zakurzony","zakuty","zakuwany","zakwaterowany","zakwestionować","zakwitniÄ™ty","załączony","zaÅ‚adowany","zaÅ‚agodzony","zalamany","zalaminowany","zaÅ‚amywany","zalany","zaÅ‚apany","zaÅ‚atany","zaÅ‚atwiany","zaÅ‚atwiony","zalatywany","zalecany","zalecony","zaleczony","zalegalizowany","zalegany","zalepiany","zalepiony","zalewany","zaliczany","zaliczony","zaÅ‚kany","zalogowany","żaÅ‚owany","zaÅ‚ożony","zaludniony","zamacany","zamachniÄ™ty","zamÄ…cony","zamalowany","zamanewrowany","zamanifestowany","zamarkowany","zamartwiany","zamarynowany","zamarzany","zamarzniÄ™ty","zamaskowany","zamawiany","zamazany","zamazywany","zamÄ™czany","zamÄ™czony","zameldowany","zamelinowany","zamerykanizowany","zamiatany","zamieniany","zamieniony","zamieszany","zamieszczany","zamieszczony","zamieszkany","zamieszkiwany","zaminowany","zamkniÄ™ty","zamocowany","zamoczony","zamontowany","zamordowany","zamortyzowany","zamotany","zamówiony","zamrażany","zamroczony","zamrożony","zamulany","zamurowany","zamydlony","zamykany","zanalizowany","zanegowany","zaniechany","zanieczyszczany","zanieczyszczony","zaniedbany","zaniedbywany","zaniepokojony","zaniesiony","zanihilowany","zanikany","zanikniÄ™ty","zaniżany","zaniżony","zanoszony","zanotowany","zanucony","zanudzany","zanudzony","zanurzany","zanurzony","zanużony","zaobaczony","zaobserwowany","zaoferowany","zaofiarowany","zaogniany","zaogniony","zaokrÄ…glany","zaokrÄ…glony","zaokrÄ™towany","zaopatrywany","zaopatrzony","zaopiekowany","zaorany","zaostrzany","zaostrzony","zaoszczÄ™dzony","zapadany","zapakowany","zapalany","zapalony","zapamiÄ™tany","zapamiÄ™tywany","zapanowany","zaparkowany","zaparowywany","zaparzany","zaparzony","zapaskudzony","zapauzowany","zapchany","zapÄ™dzany","zapeÅ‚niany","zapeÅ‚niony","zaperfumowany","zapeszany","zapewniany","zapewniony","zapieczÄ™towany","zapierany","zapiÄ™ty","zapijany","zapinany","zapisany","zapisuwany","zapity","zapÅ‚acony","zapÅ‚adniany","zaplamiony","zaplanowany","zaplÄ…tany","zapÅ‚odniony","zaplombowany","zapobiegany","zapodany","zapodawany","zapodziany","zapokojony","zapolowany","zapominany","zapomniany","zapowiadany","zapowiedziany","zapoznany","zapoznawany","zapożyczony","zapracowywany","zaprany","zaprasowywany","zapraszany","zaprawiony","zaprenumerowany","zaprezentowany","Zaprogramowany","zaprojektowany","zaproponowany","zaproszony","zaprotokoÅ‚owany","zaprowadzany","zaprowadzony","zaprzÄ…tany","zaprzeczany","zaprzeczony","zaprzedany","zaprzedawany","zaprzÄ™gany","zaprzepaszczany","zaprzestany","zaprzestawany","zaprzyjaźniony","zapudÅ‚owany","zapunktowany","zapuszczany","zapuszczony","zapuszkowany","zapychany","zapylany","zapylony","zapytany","zarabiany","zaranżowany","zarażany","zarażony","zarecytowany","zarÄ™czany","zarÄ™czony","zarejestrowany","zareklamowany","zarekomendowany","zarekomondowany","zarekwirowany","zarezerwowany","zarobiony","żartowany","zarwany","zaryglowany","zarymowany","zarysowany","zarywany","zaryzykowany","zarzÄ…dzany","zarżniÄ™ty","zarzucany","zarzynany","zasadzony","zaÅ›cielony","zasegurowany","zaserwowany","zasiadany","zasiany","zasiedlony","zasiÄ™gany","zasiÄ™gniÄ™ty","zasiewany","zasilany","zasilony","zaskakiwany","zaskarbiony","zaskoczony","zaskrobany","zasÅ‚aniany","zaÅ›lepiany","zaÅ›lepiony","zasÅ‚odzony","zasÅ‚oniony","zasÅ‚użony","zasmakowany","zaÅ›miecany","zaÅ›miecony","zasmradzany","zasmrodzony","zasmucany","zasmucony","zasolony","zaspakajany","zaÅ›piewany","zaspokajany","zaspokojony","zasponsorowany","zaÅ›rubowywany","zassany","zastany","zastÄ…piony","zastawiany","zastawiony","zastÄ™powany","zastopowany","zastosowany","zastraszany","zastraszony","zastrzelony","zasugerowany","zasuniÄ™ty","zasuwany","zaÅ›wiadczony","zaÅ›wiecony","zaÅ›wioniony","zasyfiony","zasygnalizowany","zasymilowany","zasymulowany","zasypany","zasypywany","zasysany","zaszachowany","zaszantażowany","zaszargany","zaszczepiany","zaszczepiony","zaszczuty","zaszczycany","zaszczycony","zaszeptany","zaszeregowany","zaszlachtowany","zasznurowany","zaszpachlowany","zasztyletowany","zaszufladkowany","zaszyfrowany","zaszyty","zaszywany","zataczany","zatajany","zatajony","zatamowany","zatankowany","zatapiany","zatargany","zatarty","zatelegrafowany","zatemperowany","zatÄ™skniony","zatkany","zatkniÄ™ty","zatoczony","zatoniÄ™ty","zatopiony","zatracany","zatracony","zatriumfowany","zatrudniany","zatrudniony","zatruty","zatruwany","zatrzaskiwany","zatrzaÅ›niÄ™ty","zatrzÄ…Å›niÄ™ty","zatrzymany","zatrzymywany","zatuszowany","zatwierdzany","zatwierdzony","zatykany","zatynkowany","zatytuÅ‚owany","zauploadowany","zauroczony","zautomatyzowany","zauważany","zauważony","zawadzany","zawalany","zawalczony","zawalony","zawarty","zaważony","zawdziÄ™czany","zawetowany","zawężony","zawiadamiany","zawiadomiony","zawiÄ…zany","zawiÄ…zywany","zawiedzony","zawierany","zawierzony","zawieszany","zawieszony","zawieziony","zawijany","zawiniÄ™ty","zawiniony","zawiÅ›niÄ™ty","zawitany","zawÅ‚adniÄ™ty","zawÅ‚aszczony","zawodzony","zawojowany","zawoÅ‚any","zawoskowany","zawożony","zawracany","zawrócony","zawstydzany","zażądany","zażartowany","zazdroszczony","zażegnany","zażenowany","zaznaczany","zaznajomiony","zaznany","zaznawany","zażyczony","zażyty","zażywany","zbaczany","zbadany","zbagatelizowany","zbajerowany","zbaÅ‚amucony","zbalansowany","zbalsamowany","zbankrutowany","zbawiany","zbawiony","zbesztany","zbezczeszczony","zbierany","zbijany","zbity","zbliżony","zbluzgany","zbojkotowany","zbrojony","zbrukany","zbszczecony","zbudowany","zbudzony","zbuntowany","zburzony","zbyty","zbywany","zchwytany","zciÄ™ty","zciszony","zdany","zdarty","zdeaktywowany","zdecydowany","zdefiniowany","zdeflorowany","zdegradowany","zdejmowany","zdeklarowany","zdekodowany","zdekompresowany","zdekoncentrowany","zdekonstruowany","zdelegalizowany","zdemaskowany","zdementowany","zdemolowany","zdemontowany","zdemoralizowany","zdenerwowany","zdeponowany","zdeprymowany","zdeptany","zderzany","zderzony","zdestabilizowany","Zdetonowany","zdetronizowany","zdewastowany","zdewaulowany","zdezerterowany","zdezintegrowany","zdezorientowany","zdezynfektowany","zdiagnozowany","zdjÄ™ty","zdÅ‚awiony","zdmuchiwany","zdmuchniÄ™ty","zdobyty","zdobywany","zdoÅ‚owany","zdominowany","zdopingowany","zdrabniany","zdradzany","zdradzony","zdrapany","zdrapywany","zdrutowany","zdruzgotany","zduplikowany","zduszony","zdwojony","zdyscyplinowany","zdyskredytowany","zdyskwalifikowany","zdystansowany","zdzielony","zdzierany","zdzierżony","zdziesiÄ…tkowany","Zdzwoniony","zebrany","zechciany","zedytowany","żegnany","żeniony","zepchniÄ™ty","zepsuty","żerowany","zerwany","zerżniÄ™ty","zeskakiwany","zeskanowany","zeskrobywany","zesÅ‚any","zeÅ›lizgiwany","zeÅ›lizgniÄ™ty","zesmolony","zespawiany","zespolony","zessany","zestawiany","zestawiony","zestresowany","zestrzeliwany","zestrzelony","zeswatany","zeszklony","zeszlifowany","zetkniÄ™ty","zezÅ‚oszczony","zeznany","zeznawany","zezwalany","zezwolony","zfinansowany","zgadany","zgadywany","zgajany","zganiony","zgarniÄ™ty","zgaÅ›niÄ™ty","zgaszony","zgiÄ™ty","zginany","zgÅ‚adzony","zgÅ‚aszany","zgłębiany","zgłębiony","zgÅ‚oÅ›niony","zgÅ‚oszony","zgÅ‚uszony","zgniatany","zgnieciony","zgnity","zgnojony","zgodzony","zgolony","zgoniony","zgotowany","zgrabiony","zgrillowany","zgromadzany","zgromadzony","zgrupowany","zgrzeszony","zgrzytany","zgubiony","zgwaÅ‚cony","zhackowany","zhakowany","zhaÅ„biony","zhandlowany","zharmonizowany","zidentyfikowany","ziewany","zignorowany","zilustrowany","zinfiltrowany","zintegrowany","zintensyfikowany","zinterpretowany","zinwentaryzowany","zirytowany","zjadany","zjawiany","zjednany","zjednoczony","zjedzony","zjeżdżony","zkontaktowany","zkserowany","złączony","zÅ‚agodzony","zÅ‚ajany","zÅ‚amany","zlany","zÅ‚apany","zlecany","zlecony","zlekceważony","zlepiany","zlepiony","zlewany","zlicytowany","zliczany","zliczony","zlikwidowany","zlinczowany","zlitowany","zlizany","zlizywany","zÅ‚oity","zlokalizowany","zÅ‚omowany","żłopany","zÅ‚owiony","zÅ‚ożony","zÅ‚upiony","zÅ‚uszczany","zluzowany","zmacany","zmÄ…cony","zmagany","zmagazynowany","zmajstrowany","zmaksylizowany","zmanipulowany","zmarnowany","zmartwychwstany","zmarzniÄ™ty","zmasakrowany","zmaterializowany","zmawiany","zmazany","zmazywany","zmbobardowany","zmiatany","zmiażdżony","zmiÄ™kczony","zmielony","zmieniany","zmieniony","zmierzany","zmierzony","zmierzwiony","zmieszany","zmieszczony","zmiksowany","zminiaturyzowany","zminimalizowany","zmniejszany","zmniejszony","zmobilizowany","zmoczony","zmodernizowany","zmodyfikowany","zmokniÄ™ty","zmonopolizowany","zmontowany","zmostkowany","zmotywowany","zmówiony","zmrożony","zmrużony","zmumifikowany","zmuszany","zmuszony","zmutowany","zmyÅ›lany","zmyty","zmywany","znacjonalizowany","znajdowany","znajdywany","znakowany","znaleziony","znany","znÄ™cany","zneutralizowany","zniechÄ™cony","znieczulony","znieksztaÅ‚cany","znieksztaÅ‚cony","znienawidzony","znieprawiony","zniesiony","zniesÅ‚awiany","zniesÅ‚awiony","zniewalany","znieważany","znieważony","zniewolony","zniszczony","zniweczony","zniwelowany","zniżany","zniżony","znokautowany","znormalniony","znoszony","znudzony","zobaczony","zobowiÄ…zany","zobrazowany","zogniskowany","żonglowany","zoomowany","zoperowany","zoptymalizowany","zorbity","zorganizowany","zorientowany","zostawiany","zostawiony","zpÅ‚acony","zprowokowany","zrabowany","zrachowany","zracjonalizowany","zraniony","zraportowany","zrażany","zrażony","zrealizowany","zrecenzowany","zredagowany","zredukowany","zreferowany","zreformowany","zrefowany","zrefundowany","zregenerowany","zrehabilitowany","zreinkarnowany","zreintegrowany","zrekonfigurowany","zrekonstruowany","zrekrutowany","zrekrystalizowany","zrelacjonowany","zrelaksowany","zremiksowany","zremisowany","zreorganizowany","zreperowany","zreplikowany","zresetowany","zresocjalizowany","zrestartowany","zrestrukturyzowany","zrewanżowany","zrewidowany","zrewolucjonizowany","zrezygnowany","zrobiony","zrolowany","zroszony","zrównany","zrównoważony","zrównywany","zróżnicowany","zrozumiany","zrugany","zruinowany","zrujnowany","zrymowany","zrywany","zrzÄ™dzony","zrzeszony","zrzucany","zrzucony","zsumowany","zsuniÄ™ty","zsuwany","zsynchronizowany","zsyntetyzowany","zsypywany","zszargany","zszokowany","zszyty","zszywany","ztarty","żuty","zutylizowany","zużyty","zużywany","zwabiany","zwabiony","zwalany","zwalczony","zwalniany","zwalony","zwany","zwaporyzowany","zwÄ…tpiony","zważany","zważony","zwÄ™dzony","zwerbalizowany","zwerbowany","zweryfikowany","zwÄ™szony","zwężony","zwiastowany","zwiÄ…zany","zwiÄ…zywany","zwichniÄ™ty","zwiedzany","zwiedzony","zwiÄ™kszony","zwieÅ„czony","zwierzany","zwieszany","zwieszony","zwietrzony","zwijany","zwilżony","zwiniÄ™ty","zwizualizowany","zwlekany","zwodowany","zwodzony","zwoÅ‚any","zwolniony","zwoÅ‚ywany","zwożony","zwracany","zwrócony","zwyciężany","zwymiotowany","życzony","żygany","zygzakowany","zyskany","zyskiwany","żyty","zżarty","zżerany","zżynany","zżyty","abdykowana","absorbowana","adaptowana","administrowana","adoptowana","adorowana","adresowana","afiszowana","agitowana","akcentowana","akceptowana","aklimatyzowana","akompaniowana","aktualizowana","aktywowana","akumulowana","alaromowana","alienowana","amerykanizowana","amortyzowana","amputowana","analizowana","angażowana","anihilowana","animowana","anonsowana","antropomorfizowana","antydatowana","anulowana","apelowana","aportowana","aranżowana","archiwizowana","aresztowana","argumentowana","artykuÅ‚owana","ascendowana","asekurowana","asymilowana","asystowana","atakowana","autoryzowana","awanturowana","babrana","baczona","badana","bagatelizowana","bajerowana","baÅ‚amucona","balangowana","balansowana","banalizowana","bandażowana","bankrutowana","baraszkowana","barwiona","bawiona","bazgrana","bazowana","bÄ™bniona","beÅ‚kotana","besztana","biadolona","biczowana","bita","bÅ‚agana","bÅ‚aznowana","blefowana","bÅ‚ogosÅ‚awiona","blokowana","bluzgana","bÅ‚yskana","bÅ‚yszczÄ…ca","boczona","bogacona","bojkotowana","boksowana","bombardowana","bopowana","borowana","brandzlowana","brana","brasowana","bratana","bredzona","brniÄ™ta","brodzona","broniona","brudzona","brylowana","budowana","budzona","bujana","bulona","bulwersowana","bumelowana","burzona","butelkowana","bywana","cackana","caÅ‚owana","capniÄ™ta","cechowana","celebrowana","celowana","ceniona","cenzurowana","chciana","chlana","chlapana","chlapniÄ™ta","chlastana","chÅ‚odzona","chlostana","chlubiona","chodowana","chomikowana","chorowana","chowana","chroniona","chrupana","chrzczona","chuta","chwalona","chwycona","chwytana","chybotana","chylona","ciachniÄ™ta","ciÄ…gana","ciÄ…gniÄ™ta","ciemiężona","cierpiana","cieszona","ciÄ™ta","ciskana","ciÅ›niÄ™ta","ciuÅ‚ana","cmokana","cmokniÄ™ta","cofana","cofniÄ™ta","ćpana","cucona","cudzoÅ‚ożona","cumowana","ćwiartowana","ćwiczona","cykana","cytowana","czajona","czarowana","czczona","czepiana","czepiona","czerpana","czesana","czÄ™stowana","czochrana","czoÅ‚gana","czuta","czytana","czyta","darowana","darta","darzona","datowana","dawana","dbana","deaktywowana","debatowana","dedukowana","dedykowana","defibrylowana","defilowana","definiowana","defraudowana","degradowana","degustowana","deklamowana","deklarowana","dekodowana","dekompresowana","dekorowana","dekretowana","delegowana","delektowana","deliberowana","demaskowana","dementowana","demolowana","demonizowana","demonstrowana","demoralizowana","denerwowana","denuncjowana","depeszowana","depilowana","deportowana","deprawowana","deptana","deratyzowana","destabilizowana","destylowana","desygnowana","determinowana","detonowana","dewastowana","dewaulowana","dezaktywowana","dezorientowana","dezynfekowana","diagnozowana","dilowana","dÅ‚ubana","dÅ‚użona","dmuchana","dmuchniÄ™ta","dobiegana","dobierana","dobijana","dobita","dobrana","dobudzona","dobyta","doceniana","doceniona","dochodzona","dochowana","dochowywana","dociÄ…gniÄ™ta","dociekana","dociÄ™ta","docinana","dociskana","dociÅ›niÄ™ta","doczekana","doczepiona","doczoÅ‚gana","doczyszczona","doczytana","dodana","dodawana","dodrukowana","dodrukowywana","dofinansowana","dofinansowywana","dogadana","dogadywana","dogadzana","doganiana","doglÄ…dana","doglÄ…dniÄ™ta","dognana","dogodzona","dogoniona","dograna","dogryzana","dogryziona","dogrzana","dogrzebana","doinformowana","dojeżdżana","dojona","dojrzana","dojrzewana","dokaÅ„czana","dokarmiana","dokarmiona","dokazana","dokazywana","dokÅ‚adana","doklejona","dokonana","dokoÅ„czona","dokonywana","dokopana","dokopywana","dokowana","dokrÄ™cana","dokrÄ™cona","doksztaÅ‚cana","doksztaÅ‚cona","dokuczana","dokumentowana","dokupiona","dołączana","dołączona","doÅ‚adowana","dolana","dolewana","doliczona","doÅ‚owana","doÅ‚ożona","domagana","domalowana","domkniÄ™ta","domniewywana","domówiona","domyÅ›lana","domyÅ›lona","domyta","doniesiona","donoszona","dopadana","dopadniÄ™ta","dopakowana","dopalona","dopasowana","dopasowywana","dopatrywana","dopatrzona","dopchana","dopchniÄ™ta","dopeÅ‚niana","dopeÅ‚niona","dopieszczona","dopiÄ™ta","dopijana","dopilnowana","dopingowana","dopisana","dopisywana","dopita","dopÅ‚acana","dopÅ‚acona","dopÅ‚yniÄ™ta","dopolerowana","dopompowana","dopowiedziana","dopracowana","dopracowywana","doprana","doprawiona","doprecyzowana","doproszona","doprowadzana","doprowadzona","dopucowana","dopuszczana","dopuszczona","dopytywana","dorabiana","doradzana","doradzona","dorÄ™czana","dorÄ™czona","dorobiona","dorównana","dorównywana","dorwana","dorysowana","dorzucana","dorzucona","doÅ›cigniÄ™ta","dosiadana","dosiÄ™gniÄ™ta","doskoczona","doskonalona","dosÅ‚adzana","dosÅ‚ana","dosÅ‚yszana","dosolona","doÅ›rodkowana","dossana","dostana","dostÄ…piona","dostarczana","dostarczona","dostawana","dostawiana","dostawiona","dostosowana","dostosowywana","dostrajana","dostrojona","dostrzegana","dosuniÄ™ta","dosuwana","doÅ›wiadczana","doÅ›wietlona","dosypana","dosypywana","doszkolona","doszlifowana","doszorowana","doszukana","doszukiwana","doszyta","dotankowana","dotankowywana","dotargana","dotaszczona","dotkniÄ™ta","dotleniona","dotÅ‚umaczona","dotowana","dotrwana","dotrzymana","dotrzymywana","dotykana","douczana","douczona","dowalona","dowieziona","dowodzona","dowożona","doznana","doznawana","dozorowana","dozowana","dożyta","dożywiona","dramatyzowana","drapana","drapniÄ™ta","draÅ›niÄ™ta","drażniona","drążona","drÄ™czona","drenowana","drgana","drgniÄ™ta","drukowana","dryblowana","dryfowana","drzemana","dubbingowana","dublowana","duplikowana","duszona","dworowana","dygotana","dyktowana","dymana","dymiona","dyrygowana","dyscyplinowana","dyskredytowana","dyskryminowana","dyskutowana","dyskwalifikowana","dysponowana","dystansowana","dystrybuowana","dywagowana","dźgana","dźgniÄ™ta","dziabniÄ™ta","dziedziczona","dziÄ™kowana","dzielona","dziergana","dzierżona","dziobana","dziurawiona","dziurkowana","dźwigana","dźwigniÄ™ta","edukowana","edytowana","egzaminowana","egzekutowana","egzekwowana","ekscytowana","ekshumowana","ekskomunikowana","eksmitowana","ekspandowana","eksperymentowana","eksploatowana","eksplorowana","eksponowana","eksportowana","eksterminowana","ekstradowana","ekstrapolowana","eliminowana","emancypowana","emanowaa","emigrowana","emitowana","energetyzowana","eskortowana","etykietowana","ewakuowana","ewaluowana","fabrykowana","falowana","faÅ‚szowana","farbowana","faszerowana","faulowana","faworyzowana","fechtowana","fermentowana","ferowana","figurowana","filetowana","filmowana","filtrowana","finalizowana","finansowana","firmowana","fleszowana","folgowana","formuÅ‚owana","forsowana","fotografowana","fundowana","gadana","ganiana","garbiona","gardzona","garnirowana","gaszona","gawÄ™dzona","gaworzona","gazowana","gdakana","gderana","generalizowana","generowana","giÄ™ta","gilgotana","gÅ‚adzona","gÅ‚askana","gÅ‚odowana","gÅ‚odzona","gloryfikowana","gÅ‚osowana","gÅ‚oszona","gÅ‚owiona","gmatwana","gmerana","gnana","gnÄ™biona","gnieciona","gnita","gnojona","godzona","gojona","golniÄ™ta","golona","goniona","googlowana","gospodarowana","goszczona","gotowana","grabiona","grana","grasowana","gratulowana","grillowana","grilowana","gromadzona","gromiona","grożona","gruchana","gruchniÄ™ta","grupowana","grywana","gryziona","grzana","grzechotana","gubiona","gustowana","gwaÅ‚cona","gwarantowana","gwizdana","gwizdniÄ™ta","hackowana","haftowana","hajtniÄ™ta","hamowana","haÅ„biona","handlowana","harcowana","harmonizowana","harowana","hartowana","hibernowana","hipnotyzowana","hodowana","holowana","hoÅ‚ubiona","honorowana","hospitalizowana","hukniÄ™ta","hulana","huÅ›tana","idealizowana","identyfikowana","ignorowana","igrana","ilustrowana","imitowana","implantowana","implodowana","imponowana","importowana","improwizowana","indokrynowana","indukowana","infekowana","infiltrowana","informowana","ingerowana","inhalowana","inscenizowana","inspirowana","instalowana","instruowana","insynuowana","integrowana","interpretowana","interweniowana","intonowana","intubowana","inwestowana","inwigilowana","irytowana","iskrzona","izolowana","jadana","jawiona","jazgotana","jednoczona","jedzona","kablowana","kadzona","kalana","kaleczona","kalkulowana","kamerowana","kamienowana","kamuflowana","kanalizowana","kantowanta","kÄ…pana","kapitulowana","kapowana","karana","karbonizowana","karcona","karczowana","karmiona","kartkowana","kÄ…sana","kasowana","kastrowana","katalogowana","katapultowana","katowana","katrupiona","kierowana","kimana","kiszona","kiwana","kiwniÄ™ta","kÅ‚aniana","klapana","klapniÄ™ta","klarowana","klasyfikowana","klÄ™biona","klejona","klepana","klepniÄ™ta","klikana","klikniÄ™ta","klonowana","kÅ‚opotana","kÅ‚uta","knocona","knuta","kochana","koczowana","kodowana","kojarzona","kojfniÄ™ta","kojona","kolekcjonowana","kolektywizowana","kolidowana","kolonizowana","kolorowana","koloryzowana","koÅ‚owana","koÅ‚ysana","kombinowana","komenderowana","komentowana","komercjalizowana","kompensowana","komplementowana","komplikowana","komponowana","kompromitowana","komunikowana","konana","koncentrowana","koÅ„czona","konfabulowana","konfiskowana","konfrontowana","konserwowana","konspirowana","konstruowana","konsultowana","konsumowana","kontaktowana","kontestowana","kontrastowana","kontrolowana","kontrowana","kontynuowana","konwertowana","konwojowana","koordynowana","kopana","kopcona","kopiowana","kopniÄ™ta","kopulowana","korelowana","korkowana","koronowana","korygowana","korzona","korzystana","koszona","kotwiczona","kozaczona","kozÅ‚owana","kpita","kradziona","krajana","krążona","krÄ™cona","kremowana","kreowana","krochmalona","krojona","kropiona","kruszona","krystalizowana","kryta","krytykowana","krzepniÄ™ta","krzyczana","krzykniÄ™ta","krzywdzona","krzywiona","krzyżowana","kserowana","ksiÄ™gowana","ksztaÅ‚cona","ksztaÅ‚towana","kulona","kultywowana","kumulowana","kupczona","kupiona","kupowana","kupywana","kurczona","kurowana","kursowana","kurzona","kuszona","kuta","kwalifikowana","kwestionowana","łączona","Å‚adowana","Å‚agodzona","Å‚ajdaczona","lakierowana","Å‚amana","lamentowana","lansowana","lana","Å‚apana","Å‚askotana","Å‚aszona","latana","Å‚atana","lawirowana","leczona","legalizowana","legitymowana","lekceważona","lepiona","lewitowana","liberowana","licencjonowana","licytowana","liczona","likwidowana","linczowana","liniowana","literowana","litowana","lizana","lizniÄ™ta","lobbowana","lokalizowana","losowana","Å‚owiona","Å‚ożona","lubiana","Å‚udzona","lunatykowana","Å‚upana","Å‚upiona","Å‚uskana","lustrowana","Å‚uszczona","luzowana","Å‚ykana","Å‚ykniÄ™ta","Å‚yżeczkowana","macana","machana","machniÄ™ta","mÄ…cona","maczana","maganyzowana","maglowana","majaczona","majsterkowana","majtana","maksymalizowana","malowana","maltretowana","mamiona","mamrotana","manewrowana","manifestowana","manipulowana","markowana","marnotrawiona","marnowana","marszczona","marynowana","marzniÄ™ta","masakrowana","maskowana","masowana","masturbowana","mataczona","materializowana","mawiana","mazana","mazniÄ™ta","mÄ™czona","meldowana","merdana","metabolizowana","miażdżona","mielona","mierzona","mierzwiona","mieszana","miÄ™tolona","migana","migdalona","migotana","mijana","miksowana","milowana","miniÄ™ta","minimalizowana","miotana","mistyfikowana","mitygowana","mizdrzona","mlana","mniemana","mnożona","mobilizowana","mocowana","moczona","modelowana","modernizowana","modlona","modulowana","modyfikowana","molestowana","monitorowana","monopolizowana","montowana","mordowana","motywowana","mówiona","mrożona","mrugana","mrużona","muskana","mutowana","mydlona","mylona","myszkowana","myta","nabazgrana","nabiegana","nabierana","nabita","nabrana","nabrojona","nabrudzona","nabyta","nabywana","nacelowana","nachapana","nachodzona","nachwalona","nachylona","naciÄ…gana","naciÄ…gniÄ™ta","nacierana","naciÄ™ta","nacinana","naciskana","naciÅ›niÄ™ta","nacjonalizowana","naczepiona","nadana","nadawana","nadchodzona","nadciÄ…gana","nadciÄ…gniÄ™ta","nadciÄ™ta","nadesÅ‚ana","nadgoniona","nadgryzana","nadgryziona","nadinterpretowana","nadÅ‚ożona","nadmieniana","nadmieniona","nadmuchana","nadrabiana","nadrobiona","nadskakiwana","nadsÅ‚uchiwana","nadstawiana","nadstawiona","nadszarpniÄ™ta","naduszona","nadużyta","nadużywana","nadwerężana","nadwyrężana","nadwyrężona","nadziana","nadzorowana","naelektryzowana","nafaszerowana","nagabywana","nagadana","nagiÄ™ta","naginana","nagÅ‚aszana","nagÅ‚oÅ›niona","nagoniona","nagradzana","nagrana","nagrodzona","nagromadzona","nagrywana","nagryzmolona","nagrzana","nagrzebana","nagrzewana","nagwizdana","naigrywana","najechana","najÄ™ta","najmowana","nakarmiana","nakarmiona","nakazana","nakazywana","nakierowana","nakierowywana","nakÅ‚adana","nakÅ‚amana","nakÅ‚aniana","naklejana","naklejona","naklepana","nakÅ‚oniona","nakÅ‚uta","nakÅ‚uwana","nakopana","nakrÄ™cana","nakrÄ™cona","nakreÅ›lana","nakreÅ›lona","nakruszona","nakryta","nakrywana","nakrzyczana","nakupiona","naÅ‚adowana","nalana","naÅ‚apana","nalepiona","nalewana","naliczona","naÅ‚owiona","naÅ‚ożona","namaczana","namagnetyzowana","namalowana","namaszczana","namaszczona","namawiana","namÄ™czona","namierzana","namieszana","namoczona","namówiona","namydlana","namyÅ›lona","naniesiona","naoliwiana","naoliwiona","naopowiadana","naostrzona","napadana","napadniÄ™ta","napakowana","napalona","naparzana","napastowana","napawana","napchana","napÄ™dzana","napeÅ‚niana","napeÅ‚niona","napierana","napiÄ™tnowana","napiÄ™ta","napinana","napisana","napluta","napÅ‚ywana","napoczÄ™ta","napojona","napompowana","napotkana","napotykana","napraszana","naprawiana","naprawiona","naprężana","naprężona","napromieniowana","naprostowana","naprowadzana","naprowadzona","napsuta","napuszczana","napuszczona","napychana","napytana","narÄ…bana","naradzana","naradzona","narastana","narażana","narażona","nareperowana","narkotyzowana","narodzona","naruszana","naruszona","narwana","narysowana","narzucana","narzucona","nasÄ…czana","nasÄ…czona","nasadzona","nasiÄ…kana","nasilana","nasilona","naskakiwana","naskoczona","naskrobana","naÅ›ladowana","nasÅ‚ana","nasÅ‚uchana","nasÅ‚uchiwana","nasmarowana","nastÄ…piona","nastawiana","nastawiona","nastraszana","nastrojona","nastukana","nasuniÄ™ta","nasuwana","naÅ›wietlana","nasycona","nasyÅ‚ana","nasypana","naszczana","naszkicowana","naszpikowana","naszprycowana","naszykowana","naszyta","naszywana","natarta","natchniÄ™ta","natkniÄ™ta","natleniona","natÅ‚uszczona","natrafiona","natrzÄ…sana","natrzÄ…sniÄ™ta","nauczana","nauczona","nawadniana","nawalona","nawiÄ…zana","nawiÄ…zywana","nawiedzana","nawiedzona","nawiercona","nawiewana","nawieziona","nawigowana","nawijana","nawilżana","nawilżona","nawiniÄ™ta","nawlekana","nawodniona","nawoÅ‚ywana","nawoskowana","nawożona","nawpychana","nawracana","nawrócona","nawrzucana","nawtykana","nawymyÅ›lana","nazbierana","nazmyÅ›lana","naznaczana","naznaczona","nazrywana","nazwana","nazywana","nÄ™cona","negocjowana","negowana","nÄ™kana","neutralizowana","niaÅ„czona","niecierpliwiona","niedoceniana","niedowidziana","nienawidzona","niesiona","nikolona","niszczona","nitkowana","niuchana","niweczona","niwelowana","nokautowana","nominowana","notowana","nucona","numerowana","nurtowana","obaczona","obadana","obalana","obalona","obandażowana","obarczana","obarczona","obawiana","obchodzona","obciÄ…gniÄ™ta","obciążona","obciÄ™ta","obcinana","obcyndalana","obczajana","obczajona","obdarowana","obdarta","obdarzana","obdarzona","obdzielona","obdzierana","obdzwaniana","obdzwoniona","obejmowana","oberwana","obessana","obezwÅ‚adniana","obezwÅ‚adniona","obfotografowana","obfotografowywana","obgadana","obgadywana","obgryzana","obgryziona","obiecana","obiecywana","obierana","obijana","obita","objadana","objaÅ›niana","objawiana","objawiona","objechana","objÄ™ta","objeżdżana","obkrÄ™cana","oblana","obÅ‚apiana","obÅ‚apywana","obÅ‚askawiana","obÅ‚askawiona","obleciana","oblegana","oblewana","obliczana","obliczona","oblizana","obÅ‚owiona","obÅ‚ożona","obluzowana","obluzowywana","obmacana","obmacywana","obmawiana","obmyÅ›lana","obmyÅ›lona","obmyta","obmywana","obnażana","obniżana","obniżona","obnoszona","obowiÄ…zywana","obozowana","obrabiana","obrabowana","obracana","obradowana","obramowana","obraniana","obrana","obrastana","obrażana","obrażona","obrobiona","obrócona","obrodzona","obroniona","obrysowana","obrywana","obryzgana","obrzezana","obrzucana","obrzucona","obrzygana","obsadzana","obsadzona","obÅ›ciskiwana","obserwowana","obsiana","obsikana","obsikiwana","obskakiwana","obskoczona","obskubana","obskubywana","obÅ›liniana","obÅ›liniona","obsÅ‚ugiwana","obsÅ‚użona","obsmarowana","obstawiana","obstawiona","obstrzeliwana","obsuniÄ™ta","obsuwana","obsypana","obsypywana","obszukana","obszukiwana","obtaczana","obtarta","obtoczona","obudzona","obwÄ…chana","obwÄ…chiwana","obwiÄ…zana","obwiÄ…zywana","obwieszana","obwieszczana","obwieszczona","obwieszona","obwijana","obwiniana","obwiniÄ™ta","obwoÅ‚ana","obyta","obżerana","ocalana","ocalona","ocechowana","oceniana","oceniona","ocenzurowana","ochÅ‚adzana","ochlapana","ochlapywana","ochÅ‚odzona","ochÅ‚oniÄ™ta","ochraniana","ochroniona","ochrzaniana","ochrzczona","ociÄ…gana","ocielona","ocieplana","ocieplona","ocierana","ockniÄ™ta","ocucona","ocuta","oczarowywana","oczekiwana","oczerniana","oczerniona","oczyszczana","oczyszczona","odarta","odbÄ™bniona","odbetonowana","odbezpieczana","odbezpieczona","odbijana","odbita","odblokowana","odbudowana","odbudowywana","odbutowana","odbyta","odcedzana","odchorowana","odchowana","odchudzana","odchudzona","odchylana","odchylona","odciÄ…gana","odciÄ…gniÄ™ta","odciążona","odcierpiona","odciÄ™ta","odcinana","odcisniÄ™ta","odcumowana","odcyfrowana","odcyfrowywana","odczarowana","odczekana","odczepiana","odczepiona","odczuta","odczuwana","odczyniona","odczytana","odczytywana","oddalana","oddana","oddawana","oddelegowana","oddychana","oddzielana","oddzielona","odebrana","odegnana","odegrana","odejmowana","odepchniÄ™ta","oderwana","odeskortowana","odesÅ‚ana","odespana","odessana","odetkana","odetniÄ™ta","odezwana","odfiltrowana","odgadniÄ™ta","odgadywana","odganiana","odgarniana","odgarniÄ™ta","odgiÄ™ta","odgniatana","odgoniona","odgradzana","odgrażana","odgrodzona","odgruzowana","odgrywana","odgryzana","odgryziona","odgrzana","odgrzebana","odgrzebywana","odgrzewana","odgwizdana","odhaczona","odholowana","odinstalowana","odizolowana","odjedzona","odjÄ™ta","odjonizowana","odkażana","odkażona","odkÅ‚adana","odklejona","odkochana","odkodowana","odkodowywana","odkopana","odkopywana","odkorkowana","odkrÄ™cana","odkrÄ™cona","odkrojona","odkryta","odkrywana","odkupiona","odkupywana","odkurzana","odkurzona","odkuta","odłączana","odłączona","odÅ‚amywana","odlana","odlatywana","odlepiana","odlewana","odliczana","odliczona","odÅ‚ożona","odÅ‚upana","odmachana","odmachiwana","odmalowana","odmarszczona","odmawiana","odmeldowana","odmieniana","odmieniona","odmierzana","odmierzona","odmieszana","odmontowana","odmówiona","odmrażana","odmrożona","odnajdowana","odnaleziona","odnawiana","odniesiona","odnoszona","odnotowana","odnotowywana","odnowiona","odpakowana","odpakowywana","odpalana","odpalona","odpaÅ‚zowana","odparowana","odparta","odpÄ™dzana","odpicowana","odpieczÄ™towana","odpierana","odpiÄ™ta","odpiÅ‚owana","odpiÅ‚owywana","odpinana","odpisana","odpisywana","odpÅ‚acana","odplamiona","odplÄ…tana","odpÅ‚yniÄ™ta","odpowietrzona","odpracowana","odpracowywana","odprasowana","odprawiana","odprawiona","odprężana","odprostowana","odprowadzana","odprowadzona","odpruta","odpryskana","odpukana","odpukiwana","odpuszczana","odpuszczona","odpychana","odrÄ…bana","odrabiana","odrÄ…bywana","odradzana","odradzona","odrapana","odrastana","odratowana","odreagowana","odremontowana","odrestaurowana","odrestaurowywana","odrobaczana","odrobiona","odroczona","odrodzona","odroÅ›niÄ™ta","odróżniana","odróżniona","odrysowana","odrywana","odrzucana","odrzucona","odsÄ…czana","odsÄ…czona","odsadzona","odseparowana","odsiadywana","odsiana","odsiewana","odsÅ‚aniana","odsÅ‚oniÄ™ta","odsÅ‚uchana","odsÅ‚uchiwana","odsÅ‚użona","odÅ›nieżana","odÅ›nieżona","odsolona","odÅ›piewana","odsprzedana","odsprzedawana","odstÄ…piona","odstawiana","odstawiona","odstÄ™powana","odstraszana","odstrÄ™czona","odstresowana","odstrzeliwana","odstrzelona","odsuniÄ™ta","odsuwana","odÅ›wieżana","odÅ›wieżona","odsyÅ‚ana","odsypywana","odsysana","odszczekana","odszczekiwana","odsztafirowana","odszukana","odszyfrowana","odszyfrowywana","odszykowana","odtrÄ…biona","odtrÄ…cona","odtruta","odtwarzana","odtworzona","oduczona","odurzona","odwalana","odwalona","odwiÄ…zana","odwiÄ…zywana","odwiedzana","odwiedzona","odwieszona","odwieziona","odwijana","odwiniÄ™ta","odwlekana","odwodniona","odwodzona","odwoÅ‚ana","odwoÅ‚ywana","odwożona","odwracana","odwrócona","odwzajemniona","odwzorowana","odżegnana","odziana","odziedziczona","odznaczana","odznaczona","odzwieciedlona","odzwierciedlana","odzwoniona","odzwyczajona","odzyskana","odzyskiwana","odżyta","odzywiana","odżywiona","oferowana","ofiarowana","ofiarowywana","ogarniana","ogarniÄ™ta","oglÄ…dana","ogÅ‚aszana","ogÅ‚oszona","ogÅ‚upiana","ogÅ‚upiona","ogÅ‚uszona","ogoÅ‚ocona","ogolona","ograbiana","ograbiona","ograniczana","ograniczona","ograna","ogrodzona","ogryziona","ogrzana","ogrzewana","okablowana","okaleczona","okantowana","okÄ…pana","okazana","okazywana","okieÅ‚znana","okÅ‚adana","okÅ‚amana","okÅ‚amywana","oklaskiwana","oklejona","oklepana","okopana","okopywana","okpiona","okradana","okradziona","okraszona","okrążana","okrążona","okrÄ™cana","okrÄ™cona","okreÅ›lana","okreÅ›lona","okrojona","okryta","okrywana","okrzykniÄ™ta","okulawiona","okupiona","okupowana","olana","olewana","olÅ›niÄ™ta","omamiona","omawiana","omdlewana","omijana","ominiÄ™ta","omotana","omówiona","onanizowana","onieÅ›mielana","onieÅ›mielona","opadniÄ™ta","opakowana","opalana","opalona","opancerzona","opanowana","opanowywana","oparta","oparzona","opasana","opatentowana","opatrywana","opatrzona","opatulona","opchniÄ™ta","opÄ™dzana","opÄ™dzona","operowana","opÄ™tana","opÄ™tywana","opieczÄ™towana","opiekowana","opierana","opijana","opisana","opisywana","opita","opÅ‚acana","opÅ‚acona","opÅ‚akana","opÅ‚akiwana","opÅ‚ukana","opluta","opluwana","opÅ‚ywana","opodatkowana","opodatkowywana","oponowana","oporzÄ…dzana","oporzÄ…dzona","opowiadana","opowiedziana","opóźniana","opóźniona","opracowana","opracowywana","oprawiana","oprawiona","oprowadzana","oprowadzona","opróżniana","opróżniona","opryskana","opryskiwana","opublikowana","opukana","opuszczana","opuszczona","opychana","opylona","orana","orbowana","organizowana","orientowana","oroszona","orzekana","orżniÄ™ta","osaczana","osaczona","osadzana","osÄ…dzana","osadzona","osÄ…dzona","oscylowana","osiadana","osiÄ…gana","osiÄ…gniÄ™ta","osiedlana","osiedlona","osiedzona","osierocona","osiodÅ‚ana","oskalpowana","oskarżona","oskrobana","oskrzydlana","oskrzydlona","oskubana","oskubywana","osÅ‚abiana","osÅ‚abiona","oÅ›lepiana","oÅ›lepiona","oÅ›lepniÄ™ta","oÅ›liniana","osÅ‚odzona","osÅ‚oniona","osÅ‚uchana","osmalona","oÅ›mielona","oÅ›mieszana","oÅ›mieszona","ostrzegana","ostrzelana","ostrzelita","ostrzona","ostudzona","osuniÄ™ta","osuszana","osuszona","osuwana","oswajana","oÅ›wiadczana","oÅ›wiadczona","oÅ›wiecana","oÅ›wieciona","oÅ›wietlana","oÅ›wietlona","oswobadzana","oswobodzona","oswojona","oszacowana","oszaÅ‚amiana","oszczana","oszczÄ™dzana","oszczÄ™dzona","oszklona","oszlifowana","oszoÅ‚omiona","oszpecona","oszukana","oszukiwana","oszwabiona","otaczana","otarta","otoczona","otruta","otruwana","otrzÄ…sana","otrzÄ…Å›niÄ™ta","otrzepana","otrzeźwiona","otrzymana","otrzymywana","otulona","otumaniona","otwierana","otworzona","otwarta","owana","owdowiona","owiana","owijana","owiniÄ™ta","ozdabiana","ozdobiona","ozdrowiona","ożeniona","oznaczana","oznaczona","oznajmiana","oznajmiona","oznakowana","ożyta","ożywana","ożywiana","ożywiona","pachnÄ…ca","pacnÄ…ta","pakowana","paktowana","paÅ‚ana","paÅ‚aszowana","palniÄ™ta","palona","pamiÄ™tana","panoszona","paprana","parafrazowana","paraliżowana","parkowana","parowana","partaczona","parta","parzona","pastowana","paszona","patrolowana","patroszona","patrzona","pauzowana","pchana","pchniÄ™ta","pdholowana","pedaÅ‚owana","pÄ™kana","pÄ™kniÄ™ta","peÅ‚niona","penetrowana","perforowana","perfumowana","perswadowana","piastowana","pichcona","pielÄ™gnowana","pielona","pieniona","pieszczona","piÄ™tnowana","piÄ™ta","pijana","pikietowana","piknikowana","pikowana","pilnowana","pilotowana","piÅ‚owana","pisana","pisywana","pita","pÅ‚acona","plÄ…drowana","plamiona","planowana","pÅ‚aszczona","plÄ…tana","pÅ‚atana","pÅ‚awiona","plewiona","pÅ‚onÄ…ca","pÅ‚oszona","plotkowana","plugawiona","pÅ‚ukana","pluskana","pluta","pobaraszkowana","pobierana","pobita","pobÅ‚ażana","pobÅ‚ogosÅ‚awiona","pobrana","pobrudzona","pobudzana","pobudzona","pobujana","pocaÅ‚owana","pocerowana","pochÅ‚aniana","pochlapana","pochlebiana","pochÅ‚oniÄ™ta","pochowana","pochwalana","pochwalona","pochwycona","pochylana","pochylona","pociachana","pociÄ…gana","pociÄ…gniÄ™ta","pocierana","pocieszana","pocieszona","pociÄ™ta","pocona","pocukrowana","poćwiartowana","poczesana","poczÄ™stowana","poczÄ™ta","poczochrana","poczuta","poczytana","poczytywana","podana","podarowana","podarta","podawana","podążona","podbierana","podbijana","podbita","podbudowana","podbudowywana","podburzana","podburzona","podchwycona","podciÄ…gana","podciÄ…gniÄ™ta","podcierana","podciÄ™ta","podcinana","podczepiona","poddana","poddawana","podebrana","podejmowana","podejrzana","podejrzewana","podelektowana","podeptana","poderwana","podesÅ‚ana","podglÄ…dana","podgolona","podgoniona","podgryzana","podgrzana","podgrzewana","podjadana","podjedzona","podjÄ™ta","podkablowana","podkarmiona","podkÅ‚adana","podklejona","podkolorowana","podkoÅ‚owana","podkopana","podkopywana","podkradana","podkradniÄ™ta","podkrÄ™cana","podkrÄ™cona","podkreÅ›lana","podkreÅ›lona","podksztaÅ‚cona","podkulona","podkupiona","podkurzona","podkuta","podłączana","podłączona","podÅ‚adowana","podÅ‚amana","podlana","podÅ‚apana","podleczona","podlegana","podlewana","podliczana","podliczona","podlizana","podlizywana","podÅ‚ożona","podmalowana","podmieniana","podmieniona","podmuchana","podmyta","podnajÄ™ta","podniecana","podniecona","podniesiona","podnoszona","podoÅ‚ana","podopingowana","podostrzona","podotykana","podpadniÄ™ta","podpalana","podpalona","podparta","podpatrywana","podpatrzona","podpieczÄ™towana","podpiekana","podpierana","podpiÄ™ta","podpiÅ‚owana","podpinana","podpisana","podpisywana","podpÅ‚acona","podpÅ‚yniÄ™ta","podpompowana","podporzÄ…dkowana","podporzÄ…dkowywana","podpowiadana","podpowiedziana","podprowadzana","podpuszczana","podpuszczona","podpychana","podpytana","podrabiana","podrapana","podrasowana","podratowana","podrażniona","podrÄ™czona","podregulowana","podreperowana","podretuszowana","podrobiona","podroczona","podróżowana","podrygiwana","podrywana","podrzucana","podrzucona","podrzynana","podsadzona","podskubywana","podsÅ‚uchana","podsÅ‚uchiwana","podsmażana","podsmażona","podÅ›piewywana","podstawiana","podstawiona","podstemplowana","podstrojona","podsumowana","podsumowywana","podsuniÄ™ta","podsuwana","podÅ›wietlana","podsycana","podsycona","podsyÅ‚ana","podsypana","podszczypywana","podszkolona","podszlifowana","podszykowana","podszyta","podszywana","podtapiana","podtarta","podtopiona","podtrzymana","podtrzymywana","podtuczona","poduczana","podupadana","poduszona","podwajana","podwalana","podważana","podwÄ™dzona","podwiÄ…zana","podwieszana","podwieziona","podwijana","podwiniÄ™ta","podwojona","podwożona","podwyżana","podwyższana","podwyższona","podyktowana","podyskutowana","podziabana","podziaÅ‚ana","podziaÅ‚kowana","podziÄ™kowana","podzielona","podziurawiona","podziwiana","podźwigniÄ™ta","poeksperymentowana","pofarbowana","pofatygowana","pofilmowana","poganiana","pogardzana","pogardzona","pogarszana","pogaszona","pogÅ‚adzona","pogÅ‚askana","pogłębiana","pogłębiona","pogÅ‚oÅ›niona","pogmatwana","pognÄ™biona","pognieciona","pogodzona","pogoniona","pogorszona","pogotowana","pograbiona","pogrążana","pogrążona","pogrożona","pogrubiana","pogrubiona","pogruchana","pogruchotana","pogrupowana","pogrywana","pogryzana","pogryziona","pogrzana","pogrzebana","pogubiona","pogwaÅ‚cana","pohamowana","pohandlowana","poharatowana","pohuÅ›tana","poinformowana","poinstruowana","pojednana","pojÄ™ta","pojmiÄ™ta","pojmowana","pojona","pokajana","pokaleczona","pokarana","pokarmiona","pokÄ…sana","pokatalogowana","pokazana","pokazywana","pokiereszowana","pokierowana","pokiwana","pokÅ‚adana","poklepana","poklepywana","pokÅ‚oniona","pokÅ‚uta","pokochana","pokolorowana","pokoloryzowana","pokoÅ‚ysana","pokombinowana","pokomplikowana","pokonana","pokoÅ„czona","pokonywana","pokopana","pokrajana","pokrążona","pokrÄ™cona","pokrojona","pokruszona","pokryta","pokrywana","pokrzepiana","pokrzepiona","pokrzyżowana","pokuszona","pokutowana","połączona","polakierowana","poÅ‚amana","polana","poÅ‚apana","poÅ‚askotana","poÅ‚atana","polecana","poÅ‚echtana","polecona","poleczona","polegana","polemizowana","polepszana","polepszona","polerowana","polewana","policzkowana","policzona","polimeryzowana","polizana","poÅ‚kniÄ™ta","polowana","poÅ‚owiona","poÅ‚ożona","polubiona","poluźniona","poluzowana","poÅ‚ykana","pomacana","pomachana","pomagana","pomalowana","pomarynowana","pomasowana","pomazana","pomÄ™czona","pomiatana","pomieszana","pomieszczona","pomijana","pominiÄ™ta","pomiziana","pomkniÄ™ta","pomnażana","pomniejszana","pomniejszona","pomnożona","pomoczona","pompowana","pomydlona","pomylona","pomyszkowana","pomywana","ponabijana","ponaciskana","ponadziewana","ponaglana","ponaglona","ponagrywana","ponaklejana","ponakÅ‚uwana","ponakrywana","ponaprawiana","ponawiana","poniaÅ„czona","poniechana","ponieiwerana","poniesiona","poniszczona","poniżana","poniżona","ponoszona","ponowiona","ponudzona","poobcinana","poobcowana","poobczajana","poobijana","poobmacywana","poobracana","poobserwowana","poodbijana","poodcinana","poodgryzana","poodkurzana","poodprawiana","poodsuwana","poodwalana","pooglÄ…dana","poograniczana","poopalana","poopiekana","poopwiadana","pootwierana","popadana","popakowana","popalona","poparta","poparzona","popchana","popchniÄ™ta","popÄ™dzana","popÄ™dzona","popÄ™kana","popeÅ‚niana","popeÅ‚niona","poperfumowana","popierana","popieszczona","popijana","popilnowana","popisana","popita","popÅ‚acona","popÅ‚akiwana","poplamiona","poplÄ…tana","popluskana","popodcinana","popodziwiana","popoprawiana","poprana","poprasowana","poprawiana","poprawiona","poproszona","poprowadzona","popryskana","poprzebierana","poprzeciÄ…gana","poprzecinana","poprzedzana","poprzeglÄ…dana","poprzeklinana","poprzekopywana","poprzemieszczana","poprzenoszona","poprzesadzana","poprzeÅ›ladowana","poprzestawiana","poprzesuwana","poprzewieszana","poprzewracana","poprzycinana","poprzymierzana","poprzytulana","poprzywiÄ…zywana","popsuta","popudrowana","popukana","popularyzowana","popuszczana","popuszczona","popychana","popykana","popytana","porabiana","porachowana","poraniona","poratowana","porażona","porÄ™czona","porównana","porozbierana","porozbijana","porozciÄ…gana","porozcinana","porozdawana","porozdzielana","porozmieszczana","poróżniona","porozpÄ™dzana","porozpieszczana","porozprowadzana","porozpruwana","porozrzucana","porozstawiana","porozsyÅ‚ana","porozumiewana","porozwalana","porozwiÄ…zywana","porozwieszana","porozwożona","portretowana","poruszana","poruszona","porwana","porysowana","porywana","porzÄ…dkowana","porzÄ…dzona","porzucana","porzucona","posÄ…dzana","posadzona","posÄ…dzona","poÅ›ciÄ…gana","poÅ›cielona","poÅ›cierana","poÅ›cigana","poÅ›cinana","poÅ›ciskana","posegregowana","posiadana","posiana","posiekana","posilana","posiÅ‚kowana","posilona","posiÅ‚owana","posiniaczona","posiorbana","poskÄ…piona","poskÅ‚adana","posklejana","poskramiana","poskrÄ™cana","poskrobana","poskromiona","poskubana","posÅ‚ana","posÅ‚odzona","poÅ›lubiana","poÅ›lubiona","posÅ‚ugiwana","posmakowana","posmarowana","posolona","posortowana","pospekulowana","pospieszana","poÅ›pieszana","poÅ›piewana","pospinana","pospÅ‚acana","posprawdzana","posprzÄ…tana","posprzedawana","poÅ›redniczona","possana","postanowiona","postana","postarana","postawiona","postemplowana","posterowana","postradana","postraszona","postrugana","postrzegana","postrzelana","postrzelona","postukana","postymulowana","posuniÄ™ta","posuwana","poÅ›wiÄ…cana","poÅ›wiadczona","poÅ›wiecona","poÅ›wiÄ™cona","poÅ›wiÄ™towana","poÅ›wintuszona","posyÅ‚ana","posypana","posypywana","poszarpana","poszastana","poszatkowana","poszczuta","poszczycona","poszczypana","poszerzana","poszerzona","poszorowana","poszpiegowana","poszturchana","poszukana","poszukiwana","poszwÄ™dana","poszybowana","potakiwana","potarmoszona","potarta","potasowana","potÄ™gowana","potÄ™piana","potÄ™piona","potkniÄ™ta","potoczona","potopiona","potorturowana","potrÄ…cana","potrÄ…cona","potraktowana","potrojona","potruta","potrzÄ…sana","potrzaskana","potrzÄ…sniÄ™ta","potrzÄ…Å›niÄ™ta","potrzymana","Poturbowana","poturlana","potwierdzona","potykana","poucinana","pouczana","pouczona","poudawana","poukÅ‚adana","pouprawiana","poupychana","pourywana","poustawiana","poużywana","powÄ…chana","powachlowana","powalana","powalona","poważana","powbijana","powciÄ…gana","powciskana","powdychana","powÄ™szona","powetowana","powiadamiana","powiadomiona","powiÄ…zana","powiedziana","powiedzona","powiÄ™kszana","powielana","powielona","powierzana","powierzona","powieszona","powiewana","powinszowana","powitana","powita","powkÅ‚adana","powlekana","powłóczona","powodowana","powoÅ‚ana","powoÅ‚ywana","powożona","powpychana","powrócona","powrzucana","powsadzana","powÅ›ciÄ…gniÄ™ta","powspominana","powstrzymana","powtarzana","powtórzona","powybierana","powybijana","powycierana","powycinana","powyciskana","powydawana","powyganiana","powyginana","powyjaÅ›niana","powyjmowana","powyłączana","powymiatana","powymieniana","powynoszona","powypeÅ‚niana","powypisywana","powyrywana","powyrzucana","powystrzelana","powysyÅ‚ana","powywalana","powywieszana","powywracana","powziÄ™ta","pozabawiana","pozabijana","pozacierana","pożądana","pożądlona","pozadzierana","pozakÅ‚adana","pozaklinana","pozaÅ‚atwiana","pozamiatana","pozamieniana","pozamrażana","pozamykana","pozapalana","pozapinana","pozapisywana","pozapraszana","pożarta","pozasÅ‚aniana","pozastrzelana","pozatykana","pozbawiana","pozbawiona","pozbierana","pozbyta","pozbywana","pozdejmowana","pozdrawiana","pozdrowiona","pożegnana","pożerana","pozmiatana","pozmieniana","pozmywana","poznaczona","poznana","poznawana","poznÄ™cana","pozorowana","pozostawiana","pozostawiona","pozowana","pozrywana","pozszywana","pożuta","pozwalniana","pozwana","pozwiÄ…zywana","pozwiedzana","pozwolona","pożyczana","pożyczona","pozyskana","pożyta","pozywana","pożywiana","pożywiona","praktykowana","prana","prasowana","prawiona","prażona","precyzowana","preferowana","prenumerowana","prezentowana","próbowana","procesowana","produkowana","profanowana","profilowana","prognozowana","programowana","projektowana","proklamowana","prolongowana","promieniowana","promowana","propagowana","proponowana","prosperowana","prostowana","proszkowana","proszona","protestowana","protokoÅ‚owana","prowadzona","prowokowana","pruta","pryskana","pryÅ›niÄ™ta","przeanalizowana","przearanżowana","przebaczana","przebaczona","przebadana","przebiegniÄ™ta","przebierana","przebijana","przebita","przebolona","przebrana","przebudowana","przebudowywana","przebudzana","przebudzona","przebukowana","przebyta","przebywana","przeceniana","przeceniona","przechlapana","przechodzona","przechowana","przechowywana","przechrzcona","przechwycona","przechwytywana","przechylana","przechylona","przechytrzana","przechytrzona","przeciÄ…gana","przeciÄ…gniÄ™ta","przeciążana","przeciążona","przeciekana","przecierana","przecierpiana","przeciÄ™ta","przecinana","przeciskana","przeciÅ›niÄ™ta","przeciwstawiana","przećwiczona","przeczekana","przeczesana","przeczesywana","przeczoÅ‚gana","przeczuta","przeczuwana","przeczyszczona","przeczytana","przedarta","przedawkowana","przedawkowywana","przedekorowana","przedÅ‚ożona","przedÅ‚użana","przedÅ‚użona","przedmuchana","przedobrzona","przedostana","przedostawana","przedsiewziÄ™ta","przedstawiana","przedstawiona","przedymana","przedyskutowana","przedzierana","przedziurawiona","przedziurkowana","przeegzaminowana","przefaksowana","przefarbowana","przefasonowana","przefasowana","przefaxowana","przefiltrowana","przeformowana","przeforsowana","przegadana","przeganana","przeganiana","przegapiana","przegapiona","przegiÄ™ta","przeginana","przeglÄ…dana","przeglÄ…dniÄ™ta","przegÅ‚odzona","przegÅ‚osowana","przegoniona","przegotowana","przegotowywana","przegrabiona","przegradzana","przegrana","przegrupowana","przegrupowywana","przegrywana","przegryzana","przegryziona","przegrzana","przegrzebana","przegrzewana","przehandlowana","przeholowana","przeinstalowana","przeistoczona","przejadana","przejaskrawiana","przejaÅ›niona","przejawiana","przejawiona","przejechana","przejÄ™ta","przejeżdżana","przejmowana","przejrzana","przekabacana","przekabacona","przekablowana","przekalibrowana","przekalkulowana","przekarmiana","przekÄ…szona","przekazywana","przekierowana","przekierowywana","przekimana","przekÅ‚adana","przeklejona","przeklÄ™ta","przeklinana","przeklniÄ™ta","przekÅ‚uta","przekonana","przekonfigurowana","przekonstruowana","przekonwertowana","przekonywana","przekopana","przekopywana","przekozioÅ‚kowana","przekraczana","przekrÄ™cana","przekrÄ™cona","przekreÅ›lana","przekreÅ›lona","przekroczona","przekrojona","przekrzyczona","przekrzywiona","przeksztaÅ‚cana","przeksztaÅ‚cona","przekupiona","przekupywana","przekuta","przekwalifikowana","przełączana","przełączona","przeÅ‚adowana","przeÅ‚adowywana","przeÅ‚amana","przeÅ‚amywana","przelana","przelatywana","przeleciana","przelewana","przeleżana","przelicytowana","przeliczana","przeliczona","przeliterowana","przeÅ‚kniÄ™ta","przeÅ‚ożona","przeÅ‚ykana","przeÅ‚ykniÄ™ta","przemalowana","przemalowywana","przemaszerowana","przemawiana","przemeblowana","przemÄ™czona","przemielona","przemieniana","przemierzona","przemieszczana","przemieszczona","przemijana","przemilczana","przemilczona","przeminiÄ™ta","przemkniÄ™ta","przemodelowana","przemusztrowana","przemycana","przemycona","przemyÅ›lana","przemyÅ›lona","przemyta","przemywana","przenegocjowana","przeniesiona","przenikana","przenikniÄ™ta","przenoszona","przeobrażana","przeobrażona","przeoczana","przeoczona","przeorana","przeorganizowana","przeorientowana","przepadana","przepakowana","przepalona","przeparkowana","przepchana","przepchniÄ™ta","przepÄ™dzana","przepÄ™dzona","przepeÅ‚niana","przepeÅ‚niona","przepijana","przepiÅ‚owana","przepisana","przepisywana","przepita","przepÅ‚acana","przepÅ‚acona","przepÅ‚akana","przeplanowana","przepÅ‚oszona","przepÅ‚ukana","przepÅ‚ukiwana","przepÅ‚yniÄ™ta","przepÅ‚ywana","przepompowana","przepompowywana","przepowiadana","przepowiedziana","przepracowana","przepracowywana","przeprana","przeprawiana","przeprawiona","przeprogramowana","przeprojektowana","przeprowadzana","przeprowadzona","przepuszczana","przepuszczona","przepychana","przepytana","przepytywana","przerÄ…bana","przerabiana","przeradzana","przerastana","przerażona","przeredagowana","przerejestrowana","przerobiona","przerodzona","przeroÅ›niÄ™ta","przerwana","przerysowana","przerywana","przerzedzana","przerzucana","przerzucona","przesÄ…czona","przesadzana","przesÄ…dzana","przesadzona","przesÄ…dzona","przeÅ›cigana","przeÅ›cigniÄ™ta","przesiadana","przesiadywana","przesiana","przesiedlana","przesiedlona","przesiedziana","przesiewana","przesilona","przeskakiwana","przeskalowana","przeskanowana","przeskoczona","przeskrobana","przeÅ›ladowana","przesÅ‚aniana","przesÅ‚ana","przeÅ›ledziona","przeÅ›lizgniÄ™ta","przesÅ‚odzona","przesÅ‚oniÄ™ta","przesÅ‚uchana","przesÅ‚uchiwana","przesmarowana","przesolona","przesortowana","przespana","przeÅ›piewana","przessana","przestawiana","przestawiona","przestemplowana","przestraszona","przestrojona","przestrzegana","przestrzelona","przestudiowana","przesuniÄ™ta","przesuwana","przeÅ›wietlana","przeÅ›wietlona","przesyÅ‚ana","przesypana","przesypiana","przesypywana","przeszarżowana","przeszczepiana","przeszczepiona","przeszkadzana","przeszkolona","przeszmuglowana","przeszukana","przeszukiwana","przeszyta","przeszywana","przetaczana","przetaÅ„czona","przetapetowana","przetarta","przetestowana","przetkana","przetoczona","przetopiona","przetrÄ…cona","przetransformowana","przetransmitowana","przetransponowana","przetransportowana","przetrawiona","przetrwana","przetrzÄ…sana","przetrzÄ…Å›niÄ™ta","przetrzepana","przetrzymana","przetrzymywana","przetwarzana","przetworzona","przewalana","przewalczona","przewaletowana","przewalona","przeważana","przeważona","przewertowana","przewiÄ…zana","przewiÄ…zywana","przewidywana","przewidziana","przewiercana","przewiercona","przewieszana","przewieszona","przewietrzona","przewieziona","przewijana","przewiniÄ™ta","przewitana","przewodniczona","przewodzona","przewożona","przewracana","przewrócona","przewyższana","przeymierzana","przeżarta","przeżeglowana","przeżegnana","przeziÄ™biona","przezimowana","przeznaczana","przeznaczona","przeżuta","przezwyciężana","przezwyciężona","przeżyta","przezywana","przeżywana","przodowana","przpochlebiona","przwdziewana","przybastowana","przybierana","przybijana","przybita","przybliżana","przybliżona","przybrana","przycelowana","przycepiona","przychylona","przyciÄ…gana","przyciÄ…gniÄ™ta","przyciemniona","przyciÄ™ta","przycinana","przyciskana","przyciÅ›niÄ™ta","przyciszona","przyćmiewana","przyćmiona","przycumowana","przyczepiana","przyczesana","przyczoÅ‚gana","przyczyniona","przydepniÄ™ta","przydeptana","przyduszona","przydzielana","przydzielona","przygarniÄ™ta","przygaszona","przygazowana","przygÅ‚adzana","przygnÄ™biana","przygniatana","przygnieciona","przygotowana","przygruchana","przygrywana","przygryzana","przygryziona","przygrzana","przygwożdżona","przyhamowana","przyholowana","przyjana","przyjÄ™ta","przyjmowana","przyjrzana","przykÅ‚adana","przyklejona","przyklepana","przykopana","przykrÄ™cana","przykrÄ™cona","przykrócona","przykryta","przykrywana","przykurzona","przykuta","przykuwana","przyłączana","przyłączona","przylana","przyÅ‚apana","przylegana","przylepiana","przylepiona","przyÅ‚ożona","przymierzona","przymilana","przymkniÄ™ta","przymocowana","przymuszana","przynależona","przyniesiona","przynoszona","przynudzana","przyostrzona","przyozdabiana","przyozdobiona","przypadniÄ™ta","przypakowana","przypakowywana","przypalana","przypalona","przyparta","przypasowana","przypatrywana","przypatrzona","przypieczÄ™towana","przypiekana","przypierana","przypiÄ™ta","przypilnowana","przypiÅ‚owana","przypinana","przypisana","przypisywana","przypÅ‚acona","przyplÄ…tana","przypÅ‚yniÄ™ta","przypodobana","przypominana","przypomniana","przyporzÄ…dkowana","przyprawiana","przyprawiona","przyprowadzona","przypucowana","przypudrowana","przypuszczana","przypuszczona","przyrównana","przyrzÄ…dzana","przyrzÄ…dzona","przysiadana","przysiÄ…gniÄ™ta","przyskrzydlona","przyskrzyniana","przyskrzyniona","przysÅ‚aniana","przysÅ‚ana","przysÅ‚odzona","przysÅ‚oniona","przysÅ‚uchiwana","przysÅ‚ugiwana","przysÅ‚użona","przysmażana","przysmażona","przyspieszana","przyspieszona","przysporzona","przysposobiona","przyÅ›rubowywana","przyssana","przystÄ…piona","przystawiana","przystawiona","przystemplowana","przystopowana","przystosowana","przystrojona","przysuniÄ™ta","przysuwana","przyswajana","przyÅ›wiecana","przyÅ›wiÄ™cona","przyswojona","przysyÅ‚ana","przysypana","przyszpilona","przyszykowana","przyszyta","przyszywana","przytaczana","przytargana","przytarta","przytaszczana","przytÄ™piana","przytÄ™piona","przytkana","przytÅ‚aczana","przytÅ‚oczona","przytÅ‚umiona","przytoczona","przytrafiona","przytroczona","przytruwana","przytrzasniÄ™ta","przytrzymana","przytrzymywana","przytulana","przytulona","przytwierdzana","przytwierdzona","przytykana","przyuczona","przyuważona","przywabiona","przywalana","przywalona","przywarowana","przywarta","przywdziana","przywiÄ…zana","przywiÄ…zywana","przywidziana","przywieziona","przywitana","przywÅ‚aszczana","przywÅ‚aszczona","przywoÅ‚ana","przywoÅ‚ywana","przywożona","przywracana","przywrócona","przyznaczona","przyznana","przyznawana","przyzwalana","przyzwana","przyzwyczajana","przyzwyczajona","przyzywana","psiamana","pstrykana","pstrykniÄ™ta","psuta","publikowana","puchniÄ™ta","pucowana","pudÅ‚owana","pudrowana","pukniÄ™ta","punktowana","pustoszona","puszczana","puszczona","puszkowana","puszona","pykana","pytana","rabowana","rachowana","racjonalizowana","racjonowana","raczona","radowana","raniona","raportowana","ratowana","ratyfikowana","reaktywowana","realizowana","reanimowana","recytowana","rÄ™czona","redagowana","redukowana","reformowana","refowana","regenerowana","regionalizowana","regulowana","reinkarnowana","rejestrowana","reklamowana","rekomendowana","rekompensowana","rekonstruowana","rekreowana","rekrutowana","rekwirowana","relacjonowana","relaksowana","remodulowana","remontowana","renegocjowana","reorganizowana","reperowana","replikowana","represejonowana","reprezentowana","reprodukowana","resetowana","resocjalizowana","respektowana","resuscytowana","retuszowana","rewanżowana","rewidowana","rezerwowana","rezonowana","rezygnowana","reżyserowana","robiona","rodzona","rojona","rolowana","romansowana","roniona","rozbawiana","rozbawiona","rozbierana","rozbijana","rozbita","rozbÅ‚yÅ›niÄ™ta","rozbrajana","rozbrojona","rozbudowana","rozbudowywana","rozbudzana","rozbudzona","rozbujana","rozcapierzona","rozchmurzona","rozchodzona","rozchylana","rozchylona","rozciÄ…gana","rozciÄ…gniÄ™ta","rozcieÅ„czana","rozcieÅ„czona","rozcierana","rozciÄ™ta","rozcinana","rozczarowana","rozczarowywana","rozczesana","rozczÅ‚onkowana","rozczulana","rozczytana","rozdana","rozdawana","rozdeptana","rozdmuchana","rozdmuchiwana","rozdrabniana","rozdrapana","rozdrapywana","rozdrażniana","rozdrażniona","rozduszona","rozdwojona","rozdysponowana","rozdzielana","rozdzielona","rozdzierana","rozdziewiczona","rozebrana","rozedrana","rozegrana","rozegrywana","rozepchana","rozerwana","rozesÅ‚ana","rozgarniÄ™ta","rozgaszczana","rozgiÄ™ta","rozglaszana","rozgÅ‚oszona","rozgniatana","rozgnieciona","rozgniewana","rozgoniona","rozgraniczona","rozgrana","rozgromiona","rozgrywana","rozgryzana","rozgryziona","rozgrzana","rozgrzebywana","rozgrzeszona","rozgrzewana","rozhuÅ›tana","rozjaÅ›niana","rozjaÅ›niona","rozjechana","rozjedzona","rozjuszana","rozjuszona","rozkazana","rozkazywana","rozkÅ‚adana","rozklejana","rozklejona","rozkoÅ‚ysana","rozkopana","rozkopywana","rozkoszowana","rozkrÄ™cana","rozkrÄ™cona","rozkrojona","rozkruszona","rozkuta","rozkuwana","rozkwaszona","rozkwaterowana","rozkwitana","rozkwitniÄ™ta","rozłączona","rozÅ‚adowana","rozÅ‚adowywana","rozÅ‚amana","rozlana","rozlewana","rozliczana","rozliczona","rozlokowana","rozÅ‚ożona","rozÅ‚upana","rozluźniana","rozmanażana","rozmasowana","rozmawiana","rozmazana","rozmazywana","rozmiÄ™kczona","rozmieniana","rozmieniona","rozmieszczana","rozmieszczona","rozminiÄ™ta","rozmnożona","rozmontowana","rozmówiona","rozmrażana","rozmrożona","rozmyÅ›lana","rozmyta","różnicowana","rozniecana","roznieciona","rozniesiona","różniona","roznoszona","rozochocona","rozpaczana","rozpakowana","rozpakowywana","rozpalana","rozpalona","rozpamiÄ™tywana","rozpaskudzana","rozpatrywana","rozpatrzona","rozpÄ™dzana","rozpÄ™dzona","rozpÄ™tana","rozpieszczana","rozpieszczona","rozpiÄ™ta","rozpiÅ‚owana","rozpinana","rozpisana","rozpisywana","rozplanowana","rozpÅ‚aszczana","rozpÅ‚aszczona","rozplÄ…tana","rozplÄ…tywana","rozpÅ‚yniÄ™ta","rozpoczÄ™ta","rozpoczynana","rozpogodzona","rozporzÄ…dzana","rozporzÄ…dzona","rozpoÅ›cierana","rozpostrzona","rozpowiadana","rozpowiedziana","rozpowszechniana","rozpowszechniona","rozpoznana","rozpoznawana","rozpracowana","rozpraszana","rozprawiana","rozprawiczona","rozprawiona","rozprostowana","rozproszona","rozprowadzana","rozprowadzona","rozpruta","rozpruwana","rozprzestrzeniana","rozprzestrzeniona","rozpuszczana","rozpuszczona","rozpychana","rozpylana","rozpylona","rozpytana","rozpytywana","rozrastana","rozreklamowana","rozrobiona","rozroÅ›niÄ™ta","rozróżniana","rozróżniona","rozruszana","rozrysowana","rozrywana","rozrzucana","rozsadzana","rozsadzona","rozsÄ…dzona","rozÅ›cielona","rozsiana","rozsiekana","rozsiewana","rozsiodÅ‚ana","rozsÅ‚awiana","rozsÅ‚awiona","rozsmarowana","rozsmarowywana","rozÅ›mieszana","rozstana","rozstÄ…piona","rozstawana","rozstawiana","rozstawiona","rozstrojona","rozstrzÄ…sana","rozstrzeliwana","rozstrzelona","rozstrzygana","rozstrzygniÄ™ta","rozsuniÄ™ta","rozsupÅ‚ana","rozÅ›wietlana","rozÅ›wietlona","rozsyÅ‚ana","rozsypana","rozsypywana","rozszarpana","rozszarpywana","rozszczepiana","rozszczepiona","rozszerzana","rozszerzona","rozszyfrowana","roztaczana","roztapiana","roztarta","roztoczona","roztopiona","roztrwoniona","roztrzÄ…sana","roztrzaskana","rozumiana","rozumowana","rozwalana","rozwalona","rozwarta","rozważana","rozważona","rozweselana","rozweselona","rozwiana","rozwiÄ…zana","rozwiÄ…zywana","rozwidniana","rozwiedziona","rozwierana","rozwiercona","rozwieszana","rozwieszona","rozwiewana","rozwieziona","rozwikÅ‚ana","rozwiniÄ™ta","rozwlekana","rozwodzona","rozwÅ›cieczana","rozwÅ›cieczona","rozzÅ‚oszczona","rugana","ruinowana","rujnowana","runiÄ™ta","ruszana","ruszona","rwana","ryczana","ryglowana","rymowana","rysowana","ryta","ryzykowana","rzÄ…dzona","rzeźbiona","rżniÄ™ta","rzucana","rzucona","rzygana","sabotażowana","sÄ…czona","sadzana","sadzona","sÄ…dzona","salutowana","salwowana","sankcjonowana","satysfakcjonowana","scalona","scementowana","scentrowana","scharakteryzowana","schÅ‚adzana","schlana","schlapana","schlebiona","schÅ‚odzona","schowana","schroniona","schrupana","schrzaniona","schwytana","schylana","Å›ciÄ…gniÄ™ta","Å›cielona","Å›ciemniana","Å›ciemniona","Å›cierana","Å›cierpiona","Å›ciÄ™ta","Å›cigana","Å›cinana","Å›ciskana","Å›ciÅ›niÄ™ta","Å›ciszana","Å›ciszona","sÄ™dziowana","segregowana","selekcjonowana","separowana","sÄ™piona","serwowana","sfabrykowana","sfajczona","sfaÅ‚szowana","sfaulowana","sfilmowana","sfinalizowana","sfinansowana","sfingowana","sformalizowana","sformatowana","sformowana","sformuÅ‚owana","sforsowana","sfotografowana","shimmerowana","siana","siekana","siorbana","skadrowana","skakana","skalana","skaleczona","skalibrowana","skalkulowana","skalpowana","skanalizowana","skandowana","skanowana","skapitulowana","skarcona","skarżona","skasowana","skatalogowana","skazana","skażona","skazywana","skierowana","skÅ‚adana","skÅ‚adowana","skÅ‚aniana","sklasyfikowana","skleciona","sklejana","sklejona","sklepana","skłócona","skÅ‚oniona","sklonowana","sknocona","skojarzona","skolonizowana","skoÅ‚owana","skombinowana","skomentowana","skompensowana","skompletowana","skomplikowana","skomponowana","skompresowana","skompromitowana","skomunikowana","skonana","skoncentrowana","skoÅ„czona","skondensowana","skonfigurowana","skonfiskowana","skonfrontowana","skonkretyzowana","skonsolidowana","skonstruowana","skonsultowana","skonsumowana","skontaktowana","skontrolowana","skoordynowana","skopana","skopiowana","skorektowana","skorumpowana","skorygowana","skorzystana","skoszona","skracana","skradziona","skrÄ™cana","skrÄ™cona","skremowana","skreÅ›lana","skreÅ›lona","skrobana","skrobniÄ™ta","skrócona","skrojona","skropiona","skruszona","skrystalizowana","skryta","skrytykowana","skrywana","skrzecowana","skrzepniÄ™ta","skrzyczana","skrzyta","skrzywdzona","skrzyżowana","skserowana","skubana","skubniÄ™ta","skulona","skumulowana","skupiana","skupiona","skupowana","skurczona","skuszona","skuta","skuwana","skwitowana","sÅ‚ana","sÅ‚awiona","Å›ledzona","Å›liniona","Å›lizgana","sÅ‚odzona","sÅ‚uchana","sÅ‚yszana","smagana","smarowana","smażona","Å›miecona","smuta","smyrana","snuta","sondowana","sortowana","spafycikowana","spakowana","spalana","spaÅ‚aszowana","spalona","spaÅ‚owana","spamiÄ™tana","spaprana","sparafrazowana","sparaliżowana","sparowana","spartaczona","spartolona","sparzona","spasowana","spataÅ‚aszona","spauzowana","spawana","spawiona","specjalizowana","spÄ™dzana","spÄ™dzona","spekulowana","speÅ‚niana","speÅ‚niona","spenetrowana","spÄ™tana","spierana","spiÄ™ta","Å›piewana","spiÅ‚owana","spinana","spisana","spiskowana","spisywana","spita","spÅ‚acana","spÅ‚acona","splÄ…drowana","splajtowana","splamiona","spÅ‚aszczona","splatana","splÄ…tana","spÅ‚atana","spÅ‚awiana","spÅ‚awiona","spÅ‚odzona","spÅ‚oniÄ™ta","spÅ‚oszona","spÅ‚ukana","spÅ‚ukiwana","spluwana","spÅ‚ywana","spoczÄ™ta","spoczywana","spodziewana","spojona","spolaryzowana","spoliczkowana","sponiewierana","sponsorowana","spopielana","spopielona","spopularyzowana","sportretowana","sporzÄ…dzana","sporzÄ…dzona","spostrzegana","spotÄ™gowana","spotkana","spotykana","spoufalana","spowalniana","spowiadana","spowodowana","spowolniona","spoźniona","spóźniona","spożytkowana","spożyta","spożywana","sprana","sprasowana","spraszana","sprawdzona","sprawiona","sprawowana","sprecyzowana","spreparowana","sprężana","sprężona","spróbowana","sprofanowana","sprofilowana","sprostowana","sproszkowana","sproszona","sprowadzana","sprowadzona","sprowokowana","spryskana","spryskiwana","sprywatyzowana","sprzÄ…tana","sprzÄ…tniÄ™ta","sprzeczana","sprzedana","sprzedawana","sprzeniewierzona","spudÅ‚owana","spustoszona","spuszczana","spuszczona","spychana","ssana","stabilizowana","stacjonowana","staczana","staranowana","starczana","stargowana","startowana","stawiana","stawiona","stemplowana","stenografowana","stepowana","sterowana","sterroryzowana","sterylizowana","stÅ‚amszona","stÅ‚umiona","stniÄ™ta","stoczona","stoÅ‚owana","stonowana","stopiona","stopniowana","storpedowana","stosowana","strÄ…cana","stracona","strÄ…cona","strajkowana","straszona","stratowana","strawiona","streamowana","stresowana","streszczana","streszczona","strofowana","strojona","stroszona","strugana","struta","strymowana","strzÄ…sana","strzaskana","strzÄ…Å›niÄ™ta","strzelona","strzepana","strzÄ™piona","strzepniÄ™ta","strzepywana","studiowana","studzona","stukana","stukniÄ™ta","stulona","stwardniona","stwarzana","stwierdzana","stwierdzona","stworzona","stykana","stylizowana","stymulowana","sugerowana","sumowana","suniÄ™ta","swatana","swawolona","Å›wiadczona","Å›wiecona","Å›wiÄ™cona","Å›wierzbiona","Å›wiÄ™towana","Å›wintuszona","sycona","sygnalizowana","symulowana","synchronizowana","sypana","sypniÄ™ta","szachrowana","szacowana","szafowana","szamotana","szanowana","szargana","szarpana","szarpniÄ™ta","szarżowana","szasowana","szastana","szatkowana","szczÄ™dzona","szczepiona","szczerzona","szczuta","szczycona","szczypana","szczytowana","szefowana","szemrana","szepniÄ™ta","szeptana","szerzona","szkalowana","szkicowana","szklona","szkodzona","szkolona","szlachtowana","szlifowana","szmuglowana","szokowana","szorowana","szpachlowana","szpanowana","szperana","szprycowana","sztachniÄ™ta","szturchana","szturchniÄ™ta","szturmowana","szufladkowana","szuflowana","szukana","szulerowana","szwankowana","szydeÅ‚kowana","szydzona","szyfrowana","szykanowana","szykowana","szyta","taktowana","tamowana","tankowana","tapetowana","taplana","taranowana","targana","targniÄ™ta","targowana","tarmoszona","tarta","tarzana","tasowana","taszczona","tatuowana","tchniÄ™ta","telefonowana","telegrfowana","teleportowana","temperowana","teoretyzowana","tÄ™piona","terroryzowana","testowana","tkana","tkniÄ™ta","tÅ‚amszona","tÅ‚oczona","tÅ‚umaczona","tÅ‚umiona","toczona","tolerowana","tonowana","topiona","torowana","torturowana","towarzyszona","trÄ…biona","trÄ…cana","tracona","trÄ…cona","trafiana","trafiona","tragizowana","traktowana","transferowana","transformowana","transmitowana","transportowana","tratowana","trawiona","trenowana","tresowana","triumfowana","tropiona","troszczona","truta","trwoniona","trymowana","tryskana","tryÅ›niÄ™ta","tryumfowana","trywializowana","trzaskana","trzasniÄ™ta","trzepana","trzepniÄ™ta","trzepotana","trzÄ™siona","trzymana","tuczona","tuÅ‚ana","tulona","turlana","tuszowana","twistowana","tworzona","tykana","tyranizowana","tyrana","tytuÅ‚owana","uaktualniana","uaktualniona","uaktywniana","uaktywniona","uargumentowana","uatrakcyjniona","ubabrana","ubarwiana","ubarwiona","ubawiona","ubezpieczana","ubezpieczona","ubezwÅ‚asnowolniona","ubiczowana","ubiegana","ubierana","ubijana","ubita","ubÅ‚agana","ubliżana","ubliżona","ubolewana","ubóstwiana","ubrana","ubroczona","ubrudzona","ucaÅ‚owana","ucharakteryzowana","uchowana","uchroniona","uchwalana","uchwalona","uchwycona","uchylana","uchylona","uciÄ…gniÄ™ta","ucieleÅ›niana","ucierana","ucierpiana","uciÄ™ta","ucinana","uciskana","uciÅ›niÄ™ta","uciszana","uciszona","uciuÅ‚ana","ucywilizowana","uczczona","uczepiona","uczesana","uczÄ™szczana","uczona","ucztowana","uczuta","uczyniona","udana","udaremniona","udawana","udekorowana","udeptywana","uderzana","uderzona","udobruchana","udokumentowana","udomawiana","udomowiona","udoskonalana","udoskonalona","udostÄ™pniana","udostÄ™pniona","udowadniana","udowodniona","Udramatyzowana","udrÄ™czona","udrożniona","udupiona","uduszona","udzielana","udzielona","udźwigniÄ™ta","ueiwarygodniona","ufana","ufarbowana","uformowana","ufortyfikowana","ufundowana","ugadana","uganiana","ugaszana","ugaszona","ugiÄ™ta","uginana","ugÅ‚askana","ugniatana","ugodzona","ugoszczona","ugotowana","ugrana","ugruntowana","ugryziona","ugrzÄ™zniÄ™ta","uhistoryzowana","uhonorowana","uiÅ›cita","ujadana","ujarzmiana","ujarzmiona","ujawniana","ujawniona","ujÄ™ta","ujeżdżana","ujeżdżona","ujmowana","ujrzana","ukamieniowana","ukarana","ukartowana","ukÄ…szona","ukatrupiona","ukazana","ukazywana","ukierowana","ukierunkowana","ukÅ‚adana","uklepana","ukÅ‚oniona","ukÅ‚uta","uknuta","ukojona","ukoÅ‚ysana","ukoÅ„czona","ukonkretniona","ukoronowana","ukradziona","ukrÄ™cana","ukrÄ™cona","ukrojona","ukryta","ukrywana","ukrzyżowana","uksztaÅ‚towana","ukuta","uÅ‚agodzona","uÅ‚askawiana","uÅ‚askawiona","ulatniana","uÅ‚atwiana","uÅ‚atwiona","uleczana","uleczona","ulegana","ulepiona","ulepszana","ulepszona","ulokowana","ulotniona","uÅ‚ożona","umacniana","umalowana","umartwiana","umawiana","umazana","umeblowana","umiejscowiona","umieszczana","umieszczona","umilana","umilona","umkniÄ™ta","umniejszana","umniejszona","umocniona","umocowana","umoczona","umodelowana","umorzona","umotywowana","umówiona","umożliwiana","umożliwiona","umroczniona","umyta","unaoczniona","unicestwiana","unicestwiona","uniemożliwaina","uniemożliwiona","unierochomiona","uniesiona","unieszczęśliwiana","unieszczęśliwiona","unieszkodliwiana","unieszkodliwiona","unieważniana","unieważniona","uniewinniona","uniezależniona","unikana","unikniÄ™ta","unormowana","unoszona","unowoczesniana","unowoczeÅ›niana","uodporniona","uogólniana","upakowana","upalana","upalona","upamiÄ™tniana","upamiÄ™tniona","upaÅ„stwowiona","upaprana","uparta","upaskudzona","upchana","upchniÄ™ta","upewniana","upewniona","upgradowana","upichcona","upiÄ™kszana","upiÄ™kszona","upierana","upierdolona","upiÄ™ta","upijana","upilnowana","upinana","upita","uplastyczniona","upÅ‚yniÄ™ta","upodabniana","upodobniona","upojona","upokorzana","upokorzona","upolowana","upominana","uporzÄ…dkowana","upowszechniona","upozorowana","upozowana","uprana","uprasowana","upraszczana","uprawdopodobniona","uprawiana","uproszczona","uproszona","uprowadzana","uprowadzona","uprzÄ…tana","uprzÄ…tniÄ™ta","uprzedona","uprzedzana","uprzyjemniana","uprzyjemniona","uprzykrzana","uprzytomniona","upubliczniana","upubliczniona","upudrowana","upuszczana","upuszczona","upychana","urabiana","uraczana","uradowana","UrÄ…gana","uratowana","urażana","urażona","uregulowana","urobiona","uroniona","uroÅ›niÄ™ta","urozmaicana","urozmaicona","uruchamiana","uruchomiona","urwana","urywana","urzÄ…dzana","urzÄ…dzona","urzeczywistniana","urzeczywistniona","urżniÄ™ta","usadowiona","usadzona","usamowolniona","usankcjonowana","usatyfakcjonowana","uschniÄ™ta","uÅ›ciskana","uÅ›cislona","uÅ›ciÅ›niÄ™ta","usidlona","usiedzona","uskÅ‚adana","uskoczona","uskuteczniana","uskuteczniona","usÅ‚uchana","usÅ‚ugiwana","usÅ‚użona","usÅ‚yszana","usmażona","uÅ›miana","uÅ›miercana","uÅ›miercona","uÅ›mierzona","uspana","uÅ›piona","uspokajana","uspokojona","uspoÅ‚eczniana","usprawiedliwiana","usprawiedliwiona","usprawniona","usprzÄ…tana","ustabilizowana","ustalana","ustalona","ustanawiana","ustanowiona","ustÄ…piona","ustatkowana","ustawiana","ustawiona","ustÄ™powana","ustosunkowana","ustrojona","ustrzegana","ustrzelona","usuniÄ™ta","ususzona","usuwana","uÅ›wiadamiana","uÅ›wiadczona","uÅ›wiadomiona","uÅ›wiÄ™cona","uÅ›winiona","usychana","usypana","usypiana","usystematyzowana","usytuowana","uszanowana","uszczelniana","uszczęśliwiana","uszczęśliwiona","uszczuplona","uszczypniÄ™ta","uszkadzana","uszkodzona","uszlachetniana","uszlachetniona","usztywniona","uszykowana","uszyta","utajniona","utargowana","utarta","utemperowana","utkana","utkniÄ™ta","utkwiona","utoczona","utopiona","utorowana","utożsamiana","utożsamiona","utracona","utrÄ…cona","utrudniana","utrudniona","utrwalana","utrwalona","utrzymywana","utuczona","utulona","utwierdzana","utwierdzona","utworzona","utylizowana","uwalniana","uwalona","uwarunkowana","uważana","uwiÄ…zana","uwiÄ…zywana","uwidoczniona","uwieczniana","uwieczniona","uwielbiana","uwielbiona","uwieÅ„czona","uwierana","uwierzona","uwieszona","uwieziona","uwiÄ™ziona","uwijana","uwikÅ‚ana","uwiniÄ™ta","uwita","uwÅ‚aczana","uwÅ‚aszczona","uwodzona","uwolniona","uwsteczniana","uwsteczniona","uwydatniana","uwypiklona","uwzglÄ™dniana","uwzglÄ™dniona","użądlona","uzależniana","uzależniona","uzasadniana","uzasadniona","uzbierana","uzbrajana","uzbrojona","uzdrawiana","uzdrowiona","użerana","uzewnÄ™trzniana","uzewnÄ™trzniona","uzgadniana","uzgodniona","uziemiona","uzmysÅ‚owiona","uznana","uznawana","uzupeÅ‚niana","uzupeÅ‚niona","uzurpowana","użyczana","użyczona","uzyskana","uzyskiwana","użyta","używana","wabiona","wÄ…chana","wachlowana","wahana","walczona","waÅ‚kowana","walniÄ™ta","walona","ważona","wbijana","wbita","wcelowana","wchÅ‚oniÄ™ta","wciÄ…gana","wciÄ…gniÄ™ta","wcielana","wcielona","wcierana","wciÄ™ta","wcinana","wciskana","wciÅ›niÄ™ta","wczepiona","wczoÅ‚gana","wczuta","wczytana","wczytywana","wdana","wdarta","wdawana","wdepniÄ™ta","wdeptana","wdetonowana","wdmuchiwana","wdrapana","wdrapywana","wdrażana","wdrążona","wdrożona","wduszona","wdychana","wdzierana","wÄ™dkowana","wentylowana","wepchana","wepchniÄ™ta","werbowana","weryfikowana","wessana","wetkana","wetkniÄ™ta","wezwana","wgłębiana","wgniatana","wgnieciona","wgrana","wgryzana","wgryziona","wiÄ…zana","wibrowana","widywana","widziana","wiedzona","wielbiona","wiercona","wierzgana","wierzona","wieszana","wietrzona","więżona","wikÅ‚ana","windowana","winszowana","wiosÅ‚owana","wirowana","witana","wita","wizualizowana","wjeżdżana","wkalkulowana","wkÅ‚adana","wklejana","wklejona","wklepana","wkÅ‚uta","wkomponowana","wkopana","wkopywana","wkraczana","wkradana","wkradziona","wkrÄ™cana","wkrÄ™cona","wkupiona","wkurwiana","wkuta","wkuwana","włączana","włączona","wÅ‚adana","wÅ‚adowana","wÅ‚amana","wÅ‚amywana","wlana","wlepiana","wlepiona","wlewana","wliczana","wliczona","wÅ‚ożona","wmanewrowana","wmanipulowana","wmawiana","wmieszana","wmówiona","wmurowana","wmuszona","wnerwiana","wnerwiona","wniesiona","wnikana","wnikniÄ™ta","wnioskowana","wnoszona","wodowana","wojowana","woÅ‚ana","woskowana","wożona","wpajana","wpakowana","wparowana","wpasowana","wpatrywana","wpÄ™dzana","wpÄ™dzona","wperswadowana","wpieniona","wpiÄ™ta","wpisana","wpisywana","wpÅ‚acana","wpÅ‚acona","wplatana","wplÄ…tana","wplÄ…tywana","wpojona","wpompowana","wpraszana","wprawiana","wproszona","wprowadzana","wprowadzona","wpuszczona","wpychana","wrabiana","wrÄ™czana","wrobiona","wróżona","wryta","wrzucana","wrzucona","wrzynana","wsadzana","wsadzona","wskazana","wskazywana","wskórana","wskrzeszana","wskrzeszona","wÅ›lizgiwana","wÅ›lizgniÄ™ta","wsÅ‚uchana","wsparta","wspierana","wspiÄ™ta","współczuta","współodczuwana","współtworzona","współżyta","wspomagana","wspominana","wspomniana","wstÄ…piona","wstawiana","wstawiona","wstrzÄ…sana","wstrzÄ…Å›niÄ™ta","wstrzelona","wstrzykiwana","wstrzykniÄ™ta","wstrzymana","wstrzymywana","wstukana","wsuniÄ™ta","wsuwana","wsypana","wszamana","wszczepiana","wszczepiona","wszczÄ™ta","wszczynana","wszyta","wtajemniczana","wtajemniczona","wtapiana","wtargniÄ™ta","wtarta","wtaszczona","wtÅ‚oczona","wtopiona","wtrÄ…cona","wtryniana","wtulana","wtulona","wtykana","wwalona","wwiercana","wwiercona","wwieziona","wwożona","wyartykuÅ‚owana","wyautowana","wybaczana","wybaczona","wybadana","wybatożona","wybawiona","wybebeszona","wybeÅ‚kotana","wybiczowana","wybielana","wybielona","wybierana","wybijana","wybita","wybÅ‚agana","wyblakniÄ™ta","wybrandzlowana","wybrana","wybroniona","wybrzydzana","wybuchana","wybuchniÄ™ta","wybudowana","wybudzana","wybudzona","wyburzana","wyburzona","wycackana","wycaÅ‚owana","wyceniana","wyceniona","wychlana","wychÅ‚ostana","wychodowana","wychowana","wychowywana","wychrobotana","wychwalana","wychwycona","wychylana","wychylona","wyciÄ…gana","wyciÄ…gniÄ™ta","wyciekana","wycieniowana","wycierana","wyciÄ™ta","wycinana","wyciskana","wyciÅ›niÄ™ta","wyciszana","wyciszona","wycofana","wyćwiczona","wycyckana","wycyganiona","wyczarowana","wyczarterowana","wyczekana","wyczekiwana","wyczerpana","wyczesana","wyczoÅ‚gana","wyczoÅ‚giwana","wyczuta","wyczuwana","wyczyniana","wyczyszczona","wyczytana","wyczytywana","wydalana","wydalona","wydana","wydÄ™biona","wydedukowana","wydelegowana","wydepilowana","wydeptywana","wydÅ‚ubana","wydÅ‚ubywana","wydÅ‚użana","wydÅ‚użona","wydmuchana","wydmuchiwana","wydobyta","wydobywana","wydojona","wydoroÅ›lana","wydostana","wydrana","wydrapana","wydrapywana","wydrążona","wydrukowana","wydukana","wyduszona","wydychana","wydziedziczona","wydzielana","wydzielona","wydzierana","wydzierżawiona","wydziobana","wydziwiana","wydzwaniana","wyedukowana","wyedytowana","wyeeliminowana","wyegzekwowana","wyeksmitowana","wyekspediowana","wyeksploatowana","wyeksponowana","wyeksportowana","wyeliminowana","wyemigrowana","wyemitowana","wyewoluowana","wyfruniÄ™ta","wygadana","wygadywana","wyganiana","wygarbowana","wygarniana","wygarniÄ™ta","wygasana","wygaÅ›niÄ™ta","wygaszana","wygaszona","wygenerowana","wygiÄ™ta","wyginana","wygÅ‚adzana","wygÅ‚adzona","wygÅ‚aszana","wygÅ‚odzona","wygÅ‚osowana","wygÅ‚oszona","wygłówkowana","wygnana","wygolona","wygoniona","wygooglowana","wygospodarowana","wygotowana","wygrana","wygrawerowana","wygrażana","wygrywana","wygryziona","wygrzana","wygrzebana","wygrzebywana","wygrzewana","wygubiona","wyhaczona","wyhaftowana","wyhamowana","wyhodowana","wyizolowana","wyjadana","wyjaÅ›niana","wyjaÅ›niona","wyjawiana","wyjawiona","wyjedzona","wyjÄ™ta","wyjmowana","wykadrowana","wykalibrowana","wykalkulowana","wykaÅ„czana","wykantowana","wykÄ…pana","wykaraskana","wykarczowana","wykarmiana","wykasowana","wykastrowana","wykazana","wykazywana","wykierowana","wykitowana","wykiwana","wykÅ‚adana","wyklarowana","wyklepana","wyklinana","wykłócana","wykluczana","wykluczona","wykluta","wykÅ‚uta","wykminiona","wykolejona","wykoÅ‚owana","wykombinowana","wykonana","wykoÅ„czona","wykonywana","wykopana","wykopniÄ™ta","wykopywana","wykorkowana","wykorzeniana","wykorzeniona","wykorzystana","wykorzystywana","wykoszona","wykpita","wykradana","wykradniÄ™ta","wykrÄ™cana","wykrÄ™cona","wykreowana","wykreÅ›lana","wykreÅ›lona","wykrochmalona","wykrojona","wykrwawiana","wykrwawiona","wykryta","wykrywana","wykrzesana","wykrztuszona","wykrzyczona","wykrzykiwana","wykrzykniÄ™ta","wykrzywiana","wyksztaÅ‚cona","wyksztuszona","wykupiona","wykupywana","wykuta","wykuwana","wyłączana","wyłączona","wylÄ…dowana","wyÅ‚adowana","wyÅ‚adowywana","wyÅ‚ajana","wyÅ‚amana","wyÅ‚amywana","wyÅ‚aniana","wylansowana","wylana","wyÅ‚apana","wyÅ‚apywana","wyÅ‚awiana","wyleasingowana","wyleczona","wylÄ™gana","wylegimytowana","wylewana","wyÅ‚gana","wylicytowana","wyliczana","wyliczona","wylizana","wylizywana","wylogowana","wyÅ‚oniona","wylosowana","wyÅ‚owiona","wyÅ‚ożona","wyÅ‚udzana","wyÅ‚udzona","wyÅ‚upana","wyÅ‚uskana","wyÅ‚uskiwana","wyÅ‚uszczona","wyluzowana","wymacana","wymachiwana","wymagana","wymahiwana","wymalowana","wymamrotana","wymanewrowana","wymarzona","wymasowana","wymawiana","wymazana","wymazywana","wymeldowana","wymeldowywana","wymiatana","wymieciona","wymieniana","wymieniona","wymierzana","wymieszana","wymigana","wymigiwana","wymijana","wyminiÄ™ta","wymkniÄ™ta","wymoczona","wymodelowana","wymontowana","wymordowana","wymskniÄ™ta","wymuszana","wymyÅ›lana","wymyÅ›lona","wymyta","wynagradzana","wynagrodzona","wynajdowana","wynajdywana","wynajÄ™ta","wynajmowana","wynaleziona","wynarodowiona","wynegocjowana","wyniesiona","wynikniÄ™ta","wyniszczana","wyniszczona","wyniuchana","wynoszona","wynurzana","wyobrażana","wyobrażona","wyodrÄ™bniona","wyolbrzymiana","wyolbrzymiona","wyorbowana","wyosiowana","wyostrzana","wyostrzona","wypaczana","wypakowana","wypakowywana","wypalana","wypalona","wypaÅ‚owana","wyparowana","wyparta","wypasana","wypastowana","wypatroszona","wypatrywana","wypatrzona","wypchana","wypchniÄ™ta","wypÄ™dzana","wypÄ™dzlowana","wypeÅ‚niana","wypeÅ‚niona","wypersfadowana","wyperswadowana","wypierana","wypiÄ™ta","wypijana","wypinana","wypisana","wypisywana","wypita","wypÅ‚acana","wypÅ‚acona","wypÅ‚akana","wypÅ‚akiwana","wypÅ‚aszczona","wyplatana","wyplÄ…tana","wypleniona","wyplewiona","wypÅ‚oszona","wypÅ‚ukana","wypÅ‚ukiwana","wypluta","wypluwana","wypocona","wypoczÄ™ta","wypolerowana","wypominana","wypomniana","wypompowana","wypompowywana","wyposażona","wypowiadana","wypowiedziana","wypoziomowana","wypożyczana","wypracowana","wypracowywana","wyprana","wyprasowana","wypraszana","wyprawiana","wyprawiona","wypróbowana","wyprodukowana","wyprojektowana","wypromieniowana","wypromowana","wyprostowana","wyprostowywana","wyproszona","wyprowadzana","wyprowadzona","wypróżniana","wypróżniona","wypruta","wypruwana","wyprzedana","wyprzedawana","wyprzedzana","wyprzedzona","wyprzÄ™gana","wypstrykana","wypucowana","wypuszczana","wypuszczona","wypychana","wypytana","wypytywana","wyrÄ…bana","wyrabiana","wyrÄ…bywana","wyratowana","wyrażana","wyrażona","wyrecytowana","wyrÄ™czana","wyrÄ™czona","wyregulowana","wyrejestrowana","wyremontowana","wyreżyserowana","wyrobiona","wyrolowana","wyroÅ›niÄ™ta","wyrównana","wyrównywana","wyróżniana","wyróżniona","wyrugowana","wyruszana","wyrwana","wyrypana","wyrysowana","wyryta","wyrywana","wyrzÄ…dzona","wyrzeźbiona","wyrżniÄ™ta","wyrzucana","wyrzucona","wyrzygana","wyrzynana","wyrzywana","wysÄ…czona","wysadzana","wysadzona","wyschniÄ™ta","wyÅ›ciskana","wyselekcjonowana","wysÄ™piona","wysiadywana","wysiedzona","wysilana","wysilona","wyskakiwana","wyskalowana","wyskoczona","wyskrobana","wyskubywana","wysÅ‚ana","wyÅ›ledzona","wyÅ›lizgiwana","wyÅ›lizgniÄ™ta","wysÅ‚owiona","wysÅ‚uchana","wysÅ‚uchiwana","wysmagana","wysmarkana","wysmarowana","wysmażana","wysmażona","wyÅ›miana","wyÅ›miewana","wysmoÅ‚owana","wysmyrana","wyÅ›niona","wysnuta","wysnuwana","wysondowana","wyspecjalizowana","wyÅ›piewana","wyÅ›piewywana","wyspowiadana","wysprzÄ…tana","wysprzedana","wyssana","wystartowana","wystawiona","wysterelizowana","wysterylizowana","wystosowana","wystosowywana","wystraszona","wystrojona","wystrugana","wystrychniÄ™ta","wystrzegana","wystrzelana","wystrzeliwana","wystrzelona","wystudzona","wystukana","wystukiwana","wystygniÄ™ta","wysuniÄ™ta","wysuszana","wysuwana","wyswatana","wyÅ›wiadczana","wyÅ›wiadczona","wyÅ›wietlana","wyÅ›wietlona","wyswobodzona","wysyÅ‚ana","wysypana","wysypywana","wysysana","wyszabrowana","wyszalana","wyszarpana","wyszarpniÄ™ta","wyszasowana","wyszczotkowana","wyszczuplona","wyszeptana","wyszkolona","wyszlifowana","wyszorowana","wyszperana","wyszukana","wyszukiwana","wyszumiona","wyszykowana","wyszyta","wytapetowana","wytargana","wytargowana","wytarta","wytarzana","wytaszczona","wytatuowana","wytchniÄ™ta","wytÄ™piona","wytkniÄ™ta","wytÅ‚oczona","wytÅ‚umaczona","wytÅ‚umiona","wytoczona","wytrÄ…biona","wytrÄ…cana","wytrÄ…cona","wytransmitowana","wytransportowana","wytrenowana","wytresowana","wytriangulowana","wytropiona","wytruta","wytrzÄ…sana","wytrzasniÄ™ta","wytrzÄ…Å›niÄ™ta","wytrzebiona","wytrzepana","wytrzeszczana","wytrzeźwiana","wytrzymana","wytrzymywana","wytwarzana","wytworzona","wytyczona","wytykana","wytypowana","wyuczona","wywabiana","wywabiona","wywÄ…chana","wywalana","wywalczona","wywalona","wywarta","wywarzana","wyważana","wyważona","wywÄ™szana","wywężykowana","wywiana","wywiÄ…zana","wywiÄ…zywana","wywierana","wywiercona","wywieszana","wywieszona","wywietrzona","wywieziona","wywijana","wywindowana","wywiniÄ™ta","wywÅ‚aszczona","wywlekana","wywnÄ™trzniona","wywnioskowana","wywodzona","wywolana","wywoÅ‚ywana","wywoskowana","wywożona","wywracana","wywrócona","wywróżona","wywyższana","wyżalona","wyzbyta","wyzdrowiona","wyżebrana","wyżerana","wyzerowana","wyzioniÄ™ta","wyznaczana","wyznaczona","wyznana","wyznawana","wyzwalana","wyzwana","wyzwolona","wyzygzakowana","wyżynana","wyzyskana","wyzyskiwana","wyżyta","wyzywana","wyżywana","wyżywiona","wzbijana","wzbita","wzbogacana","wzbogacona","wzbraniana","wzbudzana","wzbudzona","wzburzana","wzburzona","wżeniona","wziÄ™ta","wzmacniona","wzmagana","wzmocniona","wznawiana","wzniecana","wznieciona","wzniesiÄ™ta","wznoszona","wznowiona","wzorowana","wzroÅ›niÄ™ta","wzruszona","wzwyżana","wzywana","zaabordowana","zaadaptowana","zaadoptowana","zaadresowana","zaakcentowana","zaakceptowana","zaaklimatyzowana","zaalarmowana","zaanektowana","zaangażowana","zaanonsowana","zaapelowana","zaaplikowana","zaaportowana","zaaprobowana","zaaranżowana","zaaresztowana","zaatakowana","zabaczona","zabalowana","zabandażowana","zabarwiona","zabarykadowana","zabawiana","zabawiona","zabepieczana","zabetonowana","zabezpieczona","zabierana","zabita","zabłądzona","zablefowana","zabÅ‚ocona","zablokowana","zabraniana","zabrana","zabrniÄ™ta","zabroniona","zabrudzona","zabudowana","zabukowana","zabulona","zaburzona","zabutelkowana","zacementowana","zacerowana","zachciana","zachÄ™cana","zachÄ™cona","zachlapana","zachodzona","zachomikowana","zachorowana","zachowana","zachowywana","zachwalana","zachwalona","zachwiana","zachwycona","zaciÄ…gana","zaciÄ…gniÄ™ta","zaciążona","zaciekawiona","zaciemniana","zaciemniona","zacierana","zacieÅ›niona","zaciÄ™ta","zacinana","zaciskana","zaciÅ›niÄ™ta","zaćmiona","zacumowana","zacytowana","zaczadzona","zaczarowana","Zaczepiana","zaczepiona","zaczerpana","zaczesana","zaczÄ™ta","zaczoÅ‚gana","zaczynana","zadarta","zadawalana","zadawana","zadbana","zadebiutowana","zadedykowana","zadeklamowana","zadeklarowana","zademonstrowana","zadenucjowana","zadepeszowana","zadeptana","zadeptywana","zadÄ™ta","zadÅ‚awiona","żądlona","zadÅ‚użana","zadÅ‚użona","zadokowana","zadomowiona","zadowalana","zadrapana","zadraÅ›niÄ™ta","zadrÄ™czana","zadrÄ™czona","zadrutowana","zadurzana","zadurzona","zaduszona","zadymiona","zadźgana","zadziobana","zadziwiana","zadziwiona","zafakturowana","zafaÅ‚szowana","zafarbowana","zafiksowana","zafundowana","zagadana","zagadniÄ™ta","zagadywana","zagajona","zaganiana","zagapiona","zagarażowana","zagarniana","zagarniÄ™ta","zagaszona","zagazowana","zagÄ™szczona","zagiÄ™ta","zaginana","zaginiÄ™ta","zagłębiana","zagłębiona","zagÅ‚odzona","zagÅ‚uszana","zagÅ‚uszona","zagmatwana","zagnana","zagnieżdżona","zagojona","zagoniona","zagospodarowana","zagotowana","zagrabiona","zagradzana","zagrażana","zagrodzona","zagrywana","zagryzana","zagryziona","zagrzana","zagrzebana","zagrzewana","zagubiona","zagwarantowana","zahaczona","zahamowana","zahandlowana","zaharowana","zahartowana","zahipnotyzowana","zaholowana","zaimitowana","zaimplantowana","zaimplementowana","zaimprowizowana","zainaugurowana","zainfekowana","zainicjowana","zainkasowana","zainscenizowana","zainspirowana","zainstalowana","zainteresowana","zaintrygowana","zaintubowana","zainwestowana","zaizolowana","zajadana","zajana","zajarana","zajechana","zajÄ™ta","zajmowana","zakablowana","zakamuflowana","zakasana","zakasowana","zakÄ…szana","zakatalogowana","zakatowana","zakatrupiona","zakazana","zakażana","zakazywana","zakiszona","zakÅ‚adana","zaklasyfikowana","zaklejana","zaklejona","zaklepana","zaklepywana","zaklinana","zaklinowana","zakłócana","zakłócona","zaklopotana","zakÅ‚uta","zakneblowana","zakodowana","zakolczykowana","zakolorowana","zakoÅ‚ysana","zakomunikowana","zakoÅ„czona","zakonserwowana","zakopana","zakopywana","zakorzeniana","zakorzeniona","zakoszona","zakosztowana","zakotwiczana","zakotwiczona","zakpiona","zakradana","zakrÄ™cana","zakrÄ™cona","zakreÅ›lana","zakreÅ›lona","zakrwawiona","zakryta","zakrywana","zakrzyczana","zakrzykniÄ™ta","zakrzywiana","zakrzywiona","zaksiÄ™gowana","zaktualizowana","zaktywizowana","zaktywowana","zakumana","zakupiona","zakurzona","zakuta","zakuwana","zakwaterowana","zakwestionowaa","zakwitniÄ™ta","załączona","zaÅ‚adowana","zaÅ‚agodzona","zalamana","zalaminowana","zaÅ‚amywana","zalana","zaÅ‚apana","zaÅ‚atana","zaÅ‚atwiana","zaÅ‚atwiona","zalatywana","zalecana","zalecona","zaleczona","zalegalizowana","zalegana","zalepiana","zalepiona","zalewana","zaliczana","zaliczona","zaÅ‚kana","zalogowana","żaÅ‚owana","zaÅ‚ożona","zaludniona","zamacana","zamachniÄ™ta","zamÄ…cona","zamalowana","zamanewrowana","zamanifestowana","zamarkowana","zamartwiana","zamarynowana","zamarzana","zamarzniÄ™ta","zamaskowana","zamawiana","zamazana","zamazywana","zamÄ™czana","zamÄ™czona","zameldowana","zamelinowana","zamerykanizowana","zamiatana","zamieniana","zamieniona","zamieszana","zamieszczana","zamieszczona","zamieszkana","zamieszkiwana","zaminowana","zamkniÄ™ta","zamocowana","zamoczona","zamontowana","zamordowana","zamortyzowana","zamotana","zamówiona","zamrażana","zamroczona","zamrożona","zamulana","zamurowana","zamydlona","zamykana","zanalizowana","zanegowana","zaniechana","zanieczyszczana","zanieczyszczona","zaniedbana","zaniedbywana","zaniepokojona","zaniesiona","zanihilowana","zanikana","zanikniÄ™ta","zaniżana","zaniżona","zanoszona","zanotowana","zanucona","zanudzana","zanudzona","zanurzana","zanurzona","zanużona","zaobaczona","zaobserwowana","zaoferowana","zaofiarowana","zaogniana","zaogniona","zaokrÄ…glana","zaokrÄ…glona","zaokrÄ™towana","zaopatrywana","zaopatrzona","zaopiekowana","zaorana","zaostrzana","zaostrzona","zaoszczÄ™dzona","zapadana","zapakowana","zapalana","zapalona","zapamiÄ™tana","zapamiÄ™tywana","zapanowana","zaparkowana","zaparowywana","zaparzana","zaparzona","zapaskudzona","zapauzowana","zapchana","zapÄ™dzana","zapeÅ‚niana","zapeÅ‚niona","zaperfumowana","zapeszana","zapewniana","zapewniona","zapieczÄ™towana","zapierana","zapiÄ™ta","zapijana","zapinana","zapisana","zapisuwana","zapita","zapÅ‚acona","zapÅ‚adniana","zaplamiona","zaplanowana","zaplÄ…tana","zapÅ‚odniona","zaplombowana","zapobiegana","zapodana","zapodawana","zapodziana","zapokojona","zapolowana","zapominana","zapomniana","zapowiadana","zapowiedziana","zapoznana","zapoznawana","zapożyczona","zapracowywana","zaprana","zaprasowywana","zapraszana","zaprawiona","zaprenumerowana","zaprezentowana","Zaprogramowana","zaprojektowana","zaproponowana","zaproszona","zaprotokoÅ‚owana","zaprowadzana","zaprowadzona","zaprzÄ…tana","zaprzeczana","zaprzeczona","zaprzedana","zaprzedawana","zaprzÄ™gana","zaprzepaszczana","zaprzestana","zaprzestawana","zaprzyjaźniona","zapudÅ‚owana","zapunktowana","zapuszczana","zapuszczona","zapuszkowana","zapychana","zapylana","zapylona","zapytana","zarabiana","zaranżowana","zarażana","zarażona","zarecytowana","zarÄ™czana","zarÄ™czona","zarejestrowana","zareklamowana","zarekomendowana","zarekomondowana","zarekwirowana","zarezerwowana","zarobiona","żartowana","zarwana","zaryglowana","zarymowana","zarysowana","zarywana","zaryzykowana","zarzÄ…dzana","zarżniÄ™ta","zarzucana","zarzynana","zasadzona","zaÅ›cielona","zasegurowana","zaserwowana","zasiadana","zasiana","zasiedlona","zasiÄ™gana","zasiÄ™gniÄ™ta","zasiewana","zasilana","zasilona","zaskakiwana","zaskarbiona","zaskoczona","zaskrobana","zasÅ‚aniana","zaÅ›lepiana","zaÅ›lepiona","zasÅ‚odzona","zasÅ‚oniona","zasÅ‚użona","zasmakowana","zaÅ›miecana","zaÅ›miecona","zasmradzana","zasmrodzona","zasmucana","zasmucona","zasolona","zaspakajana","zaÅ›piewana","zaspokajana","zaspokojona","zasponsorowana","zaÅ›rubowywana","zassana","zastana","zastÄ…piona","zastawiana","zastawiona","zastÄ™powana","zastopowana","zastosowana","zastraszana","zastraszona","zastrzelona","zasugerowana","zasuniÄ™ta","zasuwana","zaÅ›wiadczona","zaÅ›wiecona","zaÅ›wioniona","zasyfiona","zasygnalizowana","zasymilowana","zasymulowana","zasypana","zasypywana","zasysana","zaszachowana","zaszantażowana","zaszargana","zaszczepiana","zaszczepiona","zaszczuta","zaszczycana","zaszczycona","zaszeptana","zaszeregowana","zaszlachtowana","zasznurowana","zaszpachlowana","zasztyletowana","zaszufladkowana","zaszyfrowana","zaszyta","zaszywana","zataczana","zatajana","zatajona","zatamowana","zatankowana","zatapiana","zatargana","zatarta","zatelegrafowana","zatemperowana","zatÄ™skniona","zatkana","zatkniÄ™ta","zatoczona","zatoniÄ™ta","zatopiona","zatracana","zatracona","zatriumfowana","zatrudniana","zatrudniona","zatruta","zatruwana","zatrzaskiwana","zatrzaÅ›niÄ™ta","zatrzÄ…Å›niÄ™ta","zatrzymana","zatrzymywana","zatuszowana","zatwierdzana","zatwierdzona","zatykana","zatynkowana","zatytuÅ‚owana","zauploadowana","zauroczona","zautomatyzowana","zauważana","zauważona","zawadzana","zawalana","zawalczona","zawalona","zawarta","zaważona","zawdziÄ™czana","zawetowana","zawężona","zawiadamiana","zawiadomiona","zawiÄ…zana","zawiÄ…zywana","zawiedzona","zawierana","zawierzona","zawieszana","zawieszona","zawieziona","zawijana","zawiniÄ™ta","zawiniona","zawiÅ›niÄ™ta","zawitana","zawÅ‚adniÄ™ta","zawÅ‚aszczona","zawodzona","zawojowana","zawoÅ‚ana","zawoskowana","zawożona","zawracana","zawrócona","zawstydzana","zażądana","zażartowana","zazdroszczona","zażegnana","zażenowana","zaznaczana","zaznajomiona","zaznana","zaznawana","zażyczona","zażyta","zażywana","zbaczana","zbadana","zbagatelizowana","zbajerowana","zbaÅ‚amucona","zbalansowana","zbalsamowana","zbankrutowana","zbawiana","zbawiona","zbesztana","zbezczeszczona","zbierana","zbijana","zbita","zbliżona","zbluzgana","zbojkotowana","zbrojona","zbrukana","zbszczecona","zbudowana","zbudzona","zbuntowana","zburzona","zbyta","zbywana","zchwytana","zciÄ™ta","zciszona","zdana","zdarta","zdeaktywowana","zdecydowana","zdefiniowana","zdeflorowana","zdegradowana","zdejmowana","zdeklarowana","zdekodowana","zdekompresowana","zdekoncentrowana","zdekonstruowana","zdelegalizowana","zdemaskowana","zdementowana","zdemolowana","zdemontowana","zdemoralizowana","zdenerwowana","zdeponowana","zdeprymowana","zdeptana","zderzana","zderzona","zdestabilizowana","Zdetonowana","zdetronizowana","zdewastowana","zdewaulowana","zdezerterowana","zdezintegrowana","zdezorientowana","zdezynfektowana","zdiagnozowana","zdjÄ™ta","zdÅ‚awiona","zdmuchiwana","zdmuchniÄ™ta","zdobyta","zdobywana","zdoÅ‚owana","zdominowana","zdopingowana","zdrabniana","zdradzana","zdradzona","zdrapana","zdrapywana","zdrutowana","zdruzgotana","zduplikowana","zduszona","zdwojona","zdyscyplinowana","zdyskredytowana","zdyskwalifikowana","zdystansowana","zdzielona","zdzierana","zdzierżona","zdziesiÄ…tkowana","Zdzwoniona","zebrana","zechciana","zedytowana","żegnana","żeniona","zepchniÄ™ta","zepsuta","żerowana","zerwana","zerżniÄ™ta","zeskakiwana","zeskanowana","zeskrobywana","zesÅ‚ana","zeÅ›lizgiwana","zeÅ›lizgniÄ™ta","zesmolona","zespawiana","zespolona","zessana","zestawiana","zestawiona","zestresowana","zestrzeliwana","zestrzelona","zeswatana","zeszklona","zeszlifowana","zetkniÄ™ta","zezÅ‚oszczona","zeznana","zeznawana","zezwalana","zezwolona","zfinansowana","zgadana","zgadywana","zgajana","zganiona","zgarniÄ™ta","zgaÅ›niÄ™ta","zgaszona","zgiÄ™ta","zginana","zgÅ‚adzona","zgÅ‚aszana","zgłębiana","zgłębiona","zgÅ‚oÅ›niona","zgÅ‚oszona","zgÅ‚uszona","zgniatana","zgnieciona","zgnita","zgnojona","zgodzona","zgolona","zgoniona","zgotowana","zgrabiona","zgrillowana","zgromadzana","zgromadzona","zgrupowana","zgrzeszona","zgrzytana","zgubiona","zgwaÅ‚cona","zhackowana","zhakowana","zhaÅ„biona","zhandlowana","zharmonizowana","zidentyfikowana","ziewana","zignorowana","zilustrowana","zinfiltrowana","zintegrowana","zintensyfikowana","zinterpretowana","zinwentaryzowana","zirytowana","zjadana","zjawiana","zjednana","zjednoczona","zjedzona","zjeżdżona","zkontaktowana","zkserowana","złączona","zÅ‚agodzona","zÅ‚ajana","zÅ‚amana","zlana","zÅ‚apana","zlecana","zlecona","zlekceważona","zlepiana","zlepiona","zlewana","zlicytowana","zliczana","zliczona","zlikwidowana","zlinczowana","zlitowana","zlizana","zlizywana","zÅ‚oita","zlokalizowana","zÅ‚omowana","żłopana","zÅ‚owiona","zÅ‚ożona","zÅ‚upiona","zÅ‚uszczana","zluzowana","zmacana","zmÄ…cona","zmagana","zmagazynowana","zmajstrowana","zmaksylizowana","zmanipulowana","zmarnowana","zmartwychwstana","zmarzniÄ™ta","zmasakrowana","zmaterializowana","zmawiana","zmazana","zmazywana","zmbobardowana","zmiatana","zmiażdżona","zmiÄ™kczona","zmielona","zmieniana","zmieniona","zmierzana","zmierzona","zmierzwiona","zmieszana","zmieszczona","zmiksowana","zminiaturyzowana","zminimalizowana","zmniejszana","zmniejszona","zmobilizowana","zmoczona","zmodernizowana","zmodyfikowana","zmokniÄ™ta","zmonopolizowana","zmontowana","zmostkowana","zmotywowana","zmówiona","zmrożona","zmrużona","zmumifikowana","zmuszana","zmuszona","zmutowana","zmyÅ›lana","zmyta","zmywana","znacjonalizowana","znajdowana","znajdywana","znakowana","znaleziona","znana","znÄ™cana","zneutralizowana","zniechÄ™cona","znieczulona","znieksztaÅ‚cana","znieksztaÅ‚cona","znienawidzona","znieprawiona","zniesiona","zniesÅ‚awiana","zniesÅ‚awiona","zniewalana","znieważana","znieważona","zniewolona","zniszczona","zniweczona","zniwelowana","zniżana","zniżona","znokautowana","znormalniona","znoszona","znudzona","zobaczona","zobowiÄ…zana","zobrazowana","zogniskowana","żonglowana","zoomowana","zoperowana","zoptymalizowana","zorbita","zorganizowana","zorientowana","zostawiana","zostawiona","zpÅ‚acona","zprowokowana","zrabowana","zrachowana","zracjonalizowana","zraniona","zraportowana","zrażana","zrażona","zrealizowana","zrecenzowana","zredagowana","zredukowana","zreferowana","zreformowana","zrefowana","zrefundowana","zregenerowana","zrehabilitowana","zreinkarnowana","zreintegrowana","zrekonfigurowana","zrekonstruowana","zrekrutowana","zrekrystalizowana","zrelacjonowana","zrelaksowana","zremiksowana","zremisowana","zreorganizowana","zreperowana","zreplikowana","zresetowana","zresocjalizowana","zrestartowana","zrestrukturyzowana","zrewanżowana","zrewidowana","zrewolucjonizowana","zrezygnowana","zrobiona","zrolowana","zroszona","zrównana","zrównoważona","zrównywana","zróżnicowana","zrozumiana","zrugana","zruinowana","zrujnowana","zrymowana","zrywana","zrzÄ™dzona","zrzeszona","zrzucana","zrzucona","zsumowana","zsuniÄ™ta","zsuwana","zsynchronizowana","zsyntetyzowana","zsypywana","zszargana","zszokowana","zszyta","zszywana","ztarta","żuta","zutylizowana","zużyta","zużywana","zwabiana","zwabiona","zwalana","zwalczona","zwalniana","zwalona","zwana","zwaporyzowana","zwÄ…tpiona","zważana","zważona","zwÄ™dzona","zwerbalizowana","zwerbowana","zweryfikowana","zwÄ™szona","zwężona","zwiastowana","zwiÄ…zana","zwiÄ…zywana","zwichniÄ™ta","zwiedzana","zwiedzona","zwiÄ™kszona","zwieÅ„czona","zwierzana","zwieszana","zwieszona","zwietrzona","zwijana","zwilżona","zwiniÄ™ta","zwizualizowana","zwlekana","zwodowana","zwodzona","zwoÅ‚ana","zwolniona","zwoÅ‚ywana","zwożona","zwracana","zwrócona","zwyciężana","zwymiotowana","życzona","żygana","zygzakowana","zyskana","zyskiwana","żyta","zżarta","zżerana","zżynana","zżyta","abdykowane","absorbowane","adaptowane","administrowane","adoptowane","adorowane","adresowane","afiszowane","agitowane","akcentowane","akceptowane","aklimatyzowane","akompaniowane","aktualizowane","aktywowane","akumulowane","alaromowane","alienowane","amerykanizowane","amortyzowane","amputowane","analizowane","angażowane","anihilowane","animowane","anonsowane","antropomorfizowane","antydatowane","anulowane","apelowane","aportowane","aranżowane","archiwizowane","aresztowane","argumentowane","artykuÅ‚owane","ascendowane","asekurowane","asymilowane","asystowane","atakowane","autoryzowane","awanturowane","babrane","baczone","badane","bagatelizowane","bajerowane","baÅ‚amucone","balangowane","balansowane","banalizowane","bandażowane","bankrutowane","baraszkowane","barwione","bawione","bazgrane","bazowane","bÄ™bnione","beÅ‚kotane","besztane","biadolone","biczowane","bite","bÅ‚agane","bÅ‚aznowane","blefowane","bÅ‚ogosÅ‚awione","blokowane","bluzgane","bÅ‚yskane","bÅ‚yszczÄ…ce","boczone","bogacone","bojkotowane","boksowane","bombardowane","bopowane","borowane","brandzlowane","brane","brasowane","bratane","bredzone","brniÄ™te","brodzone","bronione","brudzone","brylowane","budowane","budzone","bujane","bulone","bulwersowane","bumelowane","burzone","butelkowane","bywane","cackane","caÅ‚owane","capniÄ™te","cechowane","celebrowane","celowane","cenione","cenzurowane","chciane","chlane","chlapane","chlapniÄ™te","chlastane","chÅ‚odzone","chlostane","chlubione","chodowane","chomikowane","chorowane","chowane","chronione","chrupane","chrzczone","chute","chwalone","chwycone","chwytane","chybotane","chylone","ciachniÄ™te","ciÄ…gane","ciÄ…gniÄ™te","ciemiężone","cierpiane","cieszone","ciÄ™te","ciskane","ciÅ›niÄ™te","ciuÅ‚ane","cmokane","cmokniÄ™te","cofane","cofniÄ™te","ćpane","cucone","cudzoÅ‚ożone","cumowane","ćwiartowane","ćwiczone","cykane","cytowane","czajone","czarowane","czczone","czepiane","czepione","czerpane","czesane","czÄ™stowane","czochrane","czoÅ‚gane","czute","czytane","czyte","darowane","darte","darzone","datowane","dawane","dbane","deaktywowane","debatowane","dedukowane","dedykowane","defibrylowane","defilowane","definiowane","defraudowane","degradowane","degustowane","deklamowane","deklarowane","dekodowane","dekompresowane","dekorowane","dekretowane","delegowane","delektowane","deliberowane","demaskowane","dementowane","demolowane","demonizowane","demonstrowane","demoralizowane","denerwowane","denuncjowane","depeszowane","depilowane","deportowane","deprawowane","deptane","deratyzowane","destabilizowane","destylowane","desygnowane","determinowane","detonowane","dewastowane","dewaulowane","dezaktywowane","dezorientowane","dezynfekowane","diagnozowane","dilowane","dÅ‚ubane","dÅ‚użone","dmuchane","dmuchniÄ™te","dobiegane","dobierane","dobijane","dobite","dobrane","dobudzone","dobyte","doceniane","docenione","dochodzone","dochowane","dochowywane","dociÄ…gniÄ™te","dociekane","dociÄ™te","docinane","dociskane","dociÅ›niÄ™te","doczekane","doczepione","doczoÅ‚gane","doczyszczone","doczytane","dodane","dodawane","dodrukowane","dodrukowywane","dofinansowane","dofinansowywane","dogadane","dogadywane","dogadzane","doganiane","doglÄ…dane","doglÄ…dniÄ™te","dognane","dogodzone","dogonione","dograne","dogryzane","dogryzione","dogrzane","dogrzebane","doinformowane","dojeżdżane","dojone","dojrzane","dojrzewane","dokaÅ„czane","dokarmiane","dokarmione","dokazane","dokazywane","dokÅ‚adane","doklejone","dokonane","dokoÅ„czone","dokonywane","dokopane","dokopywane","dokowane","dokrÄ™cane","dokrÄ™cone","doksztaÅ‚cane","doksztaÅ‚cone","dokuczane","dokumentowane","dokupione","dołączane","dołączone","doÅ‚adowane","dolane","dolewane","doliczone","doÅ‚owane","doÅ‚ożone","domagane","domalowane","domkniÄ™te","domniewywane","domówione","domyÅ›lane","domyÅ›lone","domyte","doniesione","donoszone","dopadane","dopadniÄ™te","dopakowane","dopalone","dopasowane","dopasowywane","dopatrywane","dopatrzone","dopchane","dopchniÄ™te","dopeÅ‚niane","dopeÅ‚nione","dopieszczone","dopiÄ™te","dopijane","dopilnowane","dopingowane","dopisane","dopisywane","dopite","dopÅ‚acane","dopÅ‚acone","dopÅ‚yniÄ™te","dopolerowane","dopompowane","dopowiedziane","dopracowane","dopracowywane","doprane","doprawione","doprecyzowane","doproszone","doprowadzane","doprowadzone","dopucowane","dopuszczane","dopuszczone","dopytywane","dorabiane","doradzane","doradzone","dorÄ™czane","dorÄ™czone","dorobione","dorównane","dorównywane","dorwane","dorysowane","dorzucane","dorzucone","doÅ›cigniÄ™te","dosiadane","dosiÄ™gniÄ™te","doskoczone","doskonalone","dosÅ‚adzane","dosÅ‚ane","dosÅ‚yszane","dosolone","doÅ›rodkowane","dossane","dostane","dostÄ…pione","dostarczane","dostarczone","dostawane","dostawiane","dostawione","dostosowane","dostosowywane","dostrajane","dostrojone","dostrzegane","dosuniÄ™te","dosuwane","doÅ›wiadczane","DoÅ›wietlone","dosypane","dosypywane","doszkolone","doszlifowane","doszorowane","doszukane","doszukiwane","doszyte","dotankowane","dotankowywane","dotargane","dotaszczone","dotkniÄ™te","dotlenione","dotÅ‚umaczone","dotowane","dotrwane","dotrzymane","dotrzymywane","dotykane","douczane","douczone","dowalone","dowiezione","dowodzone","dowożone","doznane","doznawane","dozorowane","dozowane","dożyte","dożywione","dramatyzowane","drapane","drapniÄ™te","draÅ›niÄ™te","drażnione","drążone","drÄ™czone","drenowane","drgane","drgniÄ™te","drukowane","dryblowane","dryfowane","drzemane","dubbingowane","dublowane","duplikowane","duszone","dworowane","dygotane","dyktowane","dymane","dymione","dyrygowane","dyscyplinowane","dyskredytowane","dyskryminowane","dyskutowane","dyskwalifikowane","dysponowane","dystansowane","dystrybuowane","dywagowane","dźgane","dźgniÄ™te","dziabniÄ™te","dziedziczone","dziÄ™kowane","dzielone","dziergane","dzierżone","dziobane","dziurawione","dziurkowane","dźwigane","dźwigniÄ™te","edukowane","edytowane","egzaminowane","egzekutowane","egzekwowane","ekscytowane","ekshumowane","ekskomunikowane","eksmitowane","ekspandowane","eksperymentowane","eksploatowane","eksplorowane","eksponowane","eksportowane","eksterminowane","ekstradowane","ekstrapolowane","eliminowane","emancypowane","emanowae","emigrowane","emitowane","energetyzowane","eskortowane","etykietowane","ewakuowane","ewaluowane","fabrykowane","falowane","faÅ‚szowane","farbowane","faszerowane","faulowane","faworyzowane","fechtowane","fermentowane","ferowane","figurowane","filetowane","filmowane","filtrowane","finalizowane","finansowane","firmowane","fleszowane","folgowane","formuÅ‚owane","forsowane","fotografowane","fundowane","gadane","ganiane","garbione","gardzone","garnirowane","gaszone","gawÄ™dzone","gaworzone","gazowane","gdakane","gderane","generalizowane","generowane","giÄ™te","gilgotane","gÅ‚adzone","gÅ‚askane","gÅ‚odowane","gÅ‚odzone","gloryfikowane","gÅ‚osowane","gÅ‚oszone","gÅ‚owione","gmatwane","gmerane","gnane","gnÄ™bione","gniecione","gnite","gnojone","godzone","gojone","golniÄ™te","golone","gonione","googlowane","gospodarowane","goszczone","gotowane","grabione","grane","grasowane","gratulowane","grillowane","grilowane","gromadzone","gromione","grożone","gruchane","gruchniÄ™te","grupowane","grywane","gryzione","grzane","grzechotane","gubione","gustowane","gwaÅ‚cone","gwarantowane","gwizdane","gwizdniÄ™te","hackowane","haftowane","hajtniÄ™te","hamowane","haÅ„bione","handlowane","harcowane","harmonizowane","harowane","hartowane","hibernowane","hipnotyzowane","hodowane","holowane","hoÅ‚ubione","honorowane","hospitalizowane","hukniÄ™te","hulane","huÅ›tane","idealizowane","identyfikowane","ignorowane","igrane","ilustrowane","imitowane","implantowane","implodowane","imponowane","importowane","improwizowane","indokrynowane","indukowane","infekowane","infiltrowane","informowane","ingerowane","inhalowane","inscenizowane","inspirowane","instalowane","instruowane","insynuowane","integrowane","interpretowane","interweniowane","intonowane","intubowane","inwestowane","inwigilowane","irytowane","iskrzone","izolowane","jadane","jawione","jazgotane","jednoczone","jedzone","kablowane","kadzone","kalane","kaleczone","kalkulowane","kamerowane","kamienowane","kamuflowane","kanalizowane","kantowante","kÄ…pane","kapitulowane","kapowane","karane","karbonizowane","karcone","karczowane","karmione","kartkowane","kÄ…sane","kasowane","kastrowane","katalogowane","katapultowane","katowane","katrupione","kierowane","kimane","kiszone","kiwane","kiwniÄ™te","kÅ‚aniane","klapane","klapniÄ™te","klarowane","klasyfikowane","klÄ™bione","klejone","klepane","klepniÄ™te","klikane","klikniÄ™te","klonowane","kÅ‚opotane","kÅ‚ute","knocone","knute","kochane","koczowane","kodowane","kojarzone","kojfniÄ™te","kojone","kolekcjonowane","kolektywizowane","kolidowane","kolonizowane","kolorowane","koloryzowane","koÅ‚owane","koÅ‚ysane","kombinowane","komenderowane","komentowane","komercjalizowane","kompensowane","komplementowane","komplikowane","komponowane","kompromitowane","komunikowane","konane","koncentrowane","koÅ„czone","konfabulowane","konfiskowane","konfrontowane","konserwowane","konspirowane","konstruowane","konsultowane","konsumowane","kontaktowane","kontestowane","kontrastowane","kontrolowane","kontrowane","kontynuowane","kontynuuowane","konwertowane","konwojowane","koordynowane","kopane","kopcone","kopiowane","kopniÄ™te","kopulowane","korelowane","korkowane","koronowane","korygowane","korzone","korzystane","koszone","kotwiczone","kozaczone","kozÅ‚owane","kpite","kradzione","krajane","krążone","krÄ™cone","kremowane","kreowane","krochmalone","krojone","kropione","kruszone","krystalizowane","kryte","krytykowane","krzepniÄ™te","krzyczane","krzykniÄ™te","krzywdzone","krzywione","krzyżowane","kserowane","ksiÄ™gowane","ksztaÅ‚cone","ksztaÅ‚towane","kulone","kultywowane","kumulowane","kupczone","kupione","kupowane","kupywane","kurczone","kurowane","kursowane","kurzone","kuszone","kute","kwalifikowane","kwestionowane","łączone","Å‚adowane","Å‚agodzone","Å‚ajdaczone","lakierowane","Å‚amane","lamentowane","lansowane","lane","Å‚apane","Å‚askotane","Å‚aszone","latane","Å‚atane","lawirowane","leczone","legalizowane","legitymowane","lekceważone","lepione","lewitowane","liberowane","licencjonowane","licytowane","liczone","likwidowane","linczowane","liniowane","literowane","litowane","lizane","lizniÄ™te","lobbowane","lokalizowane","losowane","Å‚owione","Å‚ożone","lubiane","Å‚udzone","lunatykowane","Å‚upane","Å‚upione","Å‚uskane","lustrowane","Å‚uszczone","luzowane","Å‚ykane","Å‚ykniÄ™te","Å‚yżeczkowane","macane","machane","machniÄ™te","mÄ…cone","maczane","maganyzowane","maglowane","majaczone","majsterkowane","majtane","maksymalizowane","malowane","maltretowane","mamione","mamrotane","manewrowane","manifestowane","manipulowane","markowane","marnotrawione","marnowane","marszczone","marynowane","marzniÄ™te","masakrowane","maskowane","masowane","masturbowane","mataczone","materializowane","mawiane","mazane","mazniÄ™te","mÄ™czone","meldowane","merdane","metabolizowane","miażdżone","mielone","mierzone","mierzwione","mieszane","miÄ™tolone","migane","migdalone","migotane","mijane","miksowane","milowane","miniÄ™te","minimalizowane","miotane","mistyfikowane","mitygowane","mizdrzone","mlane","mniemane","mnożone","mobilizowane","mocowane","moczone","modelowane","modernizowane","modlone","modulowane","modyfikowane","molestowane","monitorowane","monopolizowane","montowane","mordowane","motywowane","mówione","mrożone","mrugane","mrużone","muskane","mutowane","mydlone","mylone","myszkowane","myte","nabazgrane","nabiegane","nabierane","nabite","nabrane","nabrojone","nabrudzone","nabyte","nabywane","nacelowane","nachapane","nachodzone","nachwalone","nachylone","naciÄ…gane","naciÄ…gniÄ™te","nacierane","naciÄ™te","nacinane","naciskane","naciÅ›niÄ™te","nacjonalizowane","naczepione","nadane","nadawane","nadchodzone","nadciÄ…gane","nadciÄ…gniÄ™te","nadciÄ™te","nadesÅ‚ane","nadgonione","nadgryzane","nadgryzione","nadinterpretowane","nadÅ‚ożone","nadmieniane","nadmienione","nadmuchane","nadrabiane","nadrobione","nadskakiwane","nadsÅ‚uchiwane","nadstawiane","nadstawione","nadszarpniÄ™te","naduszone","nadużyte","nadużywane","nadwerężane","nadwyrężane","nadwyrężone","nadziane","nadzorowane","naelektryzowane","nafaszerowane","nagabywane","nagadane","nagiÄ™te","naginane","nagÅ‚aszane","nagÅ‚oÅ›nione","nagonione","nagradzane","nagrane","nagrodzone","nagromadzone","nagrywane","nagryzmolone","nagrzane","nagrzebane","nagrzewane","nagwizdane","naigrywane","najechane","najÄ™te","najmowane","nakarmiane","nakarmione","nakazane","nakazywane","nakierowane","nakierowywane","nakÅ‚adane","nakÅ‚amane","nakÅ‚aniane","naklejane","naklejone","naklepane","nakÅ‚onione","nakÅ‚ute","nakÅ‚uwane","nakopane","nakrÄ™cane","nakrÄ™cone","nakreÅ›lane","nakreÅ›lone","nakruszone","nakryte","nakrywane","nakrzyczane","nakupione","naÅ‚adowane","nalane","naÅ‚apane","nalepione","nalewane","naliczone","naÅ‚owione","naÅ‚ożone","namaczane","namagnetyzowane","namalowane","namaszczane","namaszczone","namawiane","namÄ™czone","namierzane","namieszane","namoczone","namówione","namydlane","namyÅ›lone","naniesione","naoliwiane","naoliwione","naopowiadane","naostrzone","napadane","napadniÄ™te","napakowane","napalone","naparzane","napastowane","napawane","napchane","napÄ™dzane","napeÅ‚niane","napeÅ‚nione","napierane","napiÄ™tnowane","napiÄ™te","napinane","napisane","naplute","napÅ‚ywane","napoczÄ™te","napojone","napompowane","napotkane","napotykane","napraszane","naprawiane","naprawione","naprężane","naprężone","napromieniowane","naprostowane","naprowadzane","naprowadzone","napsute","napuszczane","napuszczone","napychane","napytane","narÄ…bane","naradzane","naradzone","narastane","narażane","narażone","nareperowane","narkotyzowane","narodzone","naruszane","naruszone","narwane","narysowane","narzucane","narzucone","nasÄ…czane","nasÄ…czone","nasadzone","nasiÄ…kane","nasilane","nasilone","naskakiwane","naskoczone","naskrobane","naÅ›ladowane","nasÅ‚ane","nasÅ‚uchane","nasÅ‚uchiwane","nasmarowane","nastÄ…pione","nastawiane","nastawione","nastraszane","nastrojone","nastukane","nasuniÄ™te","nasuwane","naÅ›wietlane","nasycone","nasyÅ‚ane","nasypane","naszczane","naszkicowane","naszpikowane","naszprycowane","naszykowane","naszyte","naszywane","natarte","natchniÄ™te","natkniÄ™te","natlenione","natÅ‚uszczone","natrafione","natrzÄ…sane","natrzÄ…sniÄ™te","nauczane","nauczone","nawadniane","nawalone","nawiÄ…zane","nawiÄ…zywane","nawiedzane","nawiedzone","nawiercone","nawiewane","nawiezione","nawigowane","nawijane","nawilżane","nawilżone","nawiniÄ™te","nawlekane","nawodnione","nawoÅ‚ywane","nawoskowane","nawożone","nawpychane","nawracane","nawrócone","nawrzucane","nawtykane","nawymyÅ›lane","nazbierane","nazmyÅ›lane","naznaczane","naznaczone","nazrywane","nazwane","nazywane","nÄ™cone","negocjowane","negowane","nÄ™kane","neutralizowane","niaÅ„czone","niecierpliwione","niedoceniane","niedowidziane","nienawidzone","niesione","nikolone","niszczone","nitkowane","niuchane","niweczone","niwelowane","nokautowane","nominowane","notowane","nucone","numerowane","nurtowane","obaczone","obadane","obalane","obalone","obandażowane","obarczane","obarczone","obawiane","obchodzone","obciÄ…gniÄ™te","obciążone","obciÄ™te","obcinane","obcyndalane","obczajane","obczajone","obdarowane","obdarte","obdarzane","obdarzone","obdzielone","obdzierane","obdzwaniane","obdzwonione","obejmowane","oberwane","obessane","obezwÅ‚adniane","obezwÅ‚adnione","obfotografowane","obfotografowywane","obgadane","obgadywane","obgryzane","obgryzione","obiecane","obiecywane","obierane","obijane","obite","objadane","objaÅ›niane","objawiane","objawione","objechane","objÄ™te","objeżdżane","obkrÄ™cane","oblane","obÅ‚apiane","obÅ‚apywane","obÅ‚askawiane","obÅ‚askawione","obleciane","oblegane","oblewane","obliczane","obliczone","oblizane","obÅ‚owione","obÅ‚ożone","obluzowane","obluzowywane","obmacane","obmacywane","obmawiane","obmyÅ›lane","obmyÅ›lone","obmyte","obmywane","obnażane","obniżane","obniżone","obnoszone","obowiÄ…zywane","obozowane","obrabiane","obrabowane","obracane","obradowane","obramowane","obraniane","obrane","obrastane","obrażane","obrażone","obrobione","obrócone","obrodzone","obronione","obrysowane","obrywane","obryzgane","obrzezane","obrzucane","obrzucone","obrzygane","obsadzane","obsadzone","obÅ›ciskiwane","obserwowane","obsiane","obsikane","obsikiwane","obskakiwane","obskoczone","obskubane","obskubywane","obÅ›liniane","obÅ›linione","obsÅ‚ugiwane","obsÅ‚użone","obsmarowane","obstawiane","obstawione","obstrzeliwane","obsuniÄ™te","obsuwane","obsypane","obsypywane","obszukane","obszukiwane","obtaczane","obtarte","obtoczone","obudzone","obwÄ…chane","obwÄ…chiwane","obwiÄ…zane","obwiÄ…zywane","obwieszane","obwieszczane","obwieszczone","obwieszone","obwijane","obwiniane","obwiniÄ™te","obwoÅ‚ane","obyte","obżerane","ocalane","ocalone","ocechowane","oceniane","ocenione","ocenzurowane","ochÅ‚adzane","ochlapane","ochlapywane","ochÅ‚odzone","ochÅ‚oniÄ™te","ochraniane","ochronione","ochrzaniane","ochrzczone","ociÄ…gane","ocielone","ocieplane","ocieplone","ocierane","ockniÄ™te","ocucone","ocute","oczarowywane","oczekiwane","oczerniane","oczernione","oczyszczane","oczyszczone","odarte","odbÄ™bnione","odbetonowane","odbezpieczane","odbezpieczone","odbijane","odbite","odblokowane","odbudowane","odbudowywane","odbutowane","odbyte","odcedzane","odchorowane","odchowane","odchudzane","odchudzone","odchylane","odchylone","odciÄ…gane","odciÄ…gniÄ™te","odciążone","odcierpione","odciÄ™te","odcinane","odcisniÄ™te","odcumowane","odcyfrowane","odcyfrowywane","odczarowane","odczekane","odczepiane","odczepione","odczute","odczuwane","odczynione","odczytane","odczytywane","oddalane","oddane","oddawane","oddelegowane","oddychane","oddzielane","oddzielone","odebrane","odegnane","odegrane","odejmowane","odepchniÄ™te","oderwane","odeskortowane","odesÅ‚ane","odespane","odessane","odetkane","odetniÄ™te","odezwane","odfiltrowane","odgadniÄ™te","odgadywane","odganiane","odgarniane","odgarniÄ™te","odgiÄ™te","odgniatane","odgonione","odgradzane","odgrażane","odgrodzone","odgruzowane","odgrywane","odgryzane","odgryzione","odgrzane","odgrzebane","odgrzebywane","odgrzewane","odgwizdane","odhaczone","odholowane","odinstalowane","odizolowane","odjedzone","odjÄ™te","odjonizowane","odkażane","odkażone","odkÅ‚adane","odklejone","odkochane","odkodowane","odkodowywane","odkopane","odkopywane","odkorkowane","odkrÄ™cane","odkrÄ™cone","odkrojone","odkryte","odkrywane","odkupione","odkupywane","odkurzane","odkurzone","odkute","odłączane","odłączone","odÅ‚amywane","odlane","odlatywane","odlepiane","odlewane","odliczane","odliczone","odÅ‚ożone","odÅ‚upane","odmachane","odmachiwane","odmalowane","odmarszczone","odmawiane","odmeldowane","odmieniane","odmienione","odmierzane","odmierzone","odmieszane","odmontowane","odmówione","odmrażane","odmrożone","odnajdowane","odnalezione","odnawiane","odniesione","odnoszone","odnotowane","odnotowywane","odnowione","odpakowane","odpakowywane","odpalane","odpalone","odpaÅ‚zowane","odparowane","odparte","odpÄ™dzane","odpicowane","odpieczÄ™towane","odpierane","odpiÄ™te","odpiÅ‚owane","odpiÅ‚owywane","odpinane","odpisane","odpisywane","odpÅ‚acane","odplamione","odplÄ…tane","odpÅ‚yniÄ™te","odpowietrzone","odpracowane","odpracowywane","odprasowane","odprawiane","odprawione","odprężane","odprostowane","odprowadzane","odprowadzone","odprute","odpryskane","odpukane","odpukiwane","odpuszczane","odpuszczone","odpychane","odrÄ…bane","odrabiane","odrÄ…bywane","odradzane","odradzone","odrapane","odrastane","odratowane","odreagowane","odremontowane","odrestaurowane","odrestaurowywane","odrobaczane","odrobione","odroczone","odrodzone","odroÅ›niÄ™te","odróżniane","odróżnione","odrysowane","odrywane","odrzucane","odrzucone","odsÄ…czane","odsÄ…czone","odsadzone","odseparowane","odsiadywane","odsiane","odsiewane","odsÅ‚aniane","odsÅ‚oniÄ™te","odsÅ‚uchane","odsÅ‚uchiwane","odsÅ‚użone","odÅ›nieżane","odÅ›nieżone","odsolone","odÅ›piewane","odsprzedane","odsprzedawane","odstÄ…pione","odstawiane","odstawione","odstÄ™powane","odstraszane","odstrÄ™czone","odstresowane","odstrzeliwane","odstrzelone","odsuniÄ™te","odsuwane","odÅ›wieżane","odÅ›wieżone","odsyÅ‚ane","odsypywane","odsysane","odszczekane","odszczekiwane","odsztafirowane","odszukane","odszyfrowane","odszyfrowywane","odszykowane","odtrÄ…bione","odtrÄ…cone","odtrute","odtwarzane","odtworzone","oduczone","odurzone","odwalane","odwalone","odwiÄ…zane","odwiÄ…zywane","odwiedzane","odwiedzone","odwieszone","odwiezione","odwijane","odwiniÄ™te","odwlekane","odwodnione","odwodzone","odwoÅ‚ane","odwoÅ‚ywane","odwożone","odwracane","odwrócone","odwzajemnione","odwzorowane","odżegnane","odziane","odziedziczone","odznaczane","odznaczone","odzwieciedlone","odzwierciedlane","odzwonione","odzwyczajone","odzyskane","odzyskiwane","odżyte","odzywiane","odżywione","oferowane","ofiarowane","ofiarowywane","ogarniane","ogarniÄ™te","oglÄ…dane","ogÅ‚aszane","ogÅ‚oszone","ogÅ‚upiane","ogÅ‚upione","ogÅ‚uszone","ogoÅ‚ocone","ogolone","ograbiane","ograbione","ograniczane","ograniczone","ograne","ogrodzone","ogryzione","ogrzane","ogrzewane","okablowane","okaleczone","okantowane","okÄ…pane","okazane","okazywane","okieÅ‚znane","okÅ‚adane","okÅ‚amane","okÅ‚amywane","oklaskiwane","oklejone","oklepane","okopane","okopywane","okpione","okradane","okradzione","okraszone","okrążane","okrążone","okrÄ™cane","okrÄ™cone","okreÅ›lane","okreÅ›lone","okrojone","okryte","okrywane","okrzykniÄ™te","okulawione","okupione","okupowane","olane","olewane","olÅ›niÄ™te","omamione","omawiane","omdlewane","omijane","ominiÄ™te","omotane","omówione","onanizowane","onieÅ›mielane","onieÅ›mielone","opadniÄ™te","opakowane","opalane","opalone","opancerzone","opanowane","opanowywane","oparte","oparzone","opasane","opatentowane","opatrywane","opatrzone","opatulone","opchniÄ™te","opÄ™dzane","opÄ™dzone","operowane","opÄ™tane","opÄ™tywane","opieczÄ™towane","opiekowane","opierane","opijane","opisane","opisywane","opite","opÅ‚acane","opÅ‚acone","opÅ‚akane","opÅ‚akiwane","opÅ‚ukane","oplute","opluwane","opÅ‚ywane","opodatkowane","opodatkowywane","oponowane","oporzÄ…dzane","oporzÄ…dzone","opowiadane","opowiedziane","opóźniane","opóźnione","opracowane","opracowywane","oprawiane","oprawione","oprowadzane","oprowadzone","opróżniane","opróżnione","opryskane","opryskiwane","opublikowane","opukane","opuszczane","opuszczone","opychane","opylone","orane","orbowane","organizowane","orientowane","oroszone","orzekane","orżniÄ™te","osaczane","osaczone","osadzane","osÄ…dzane","osadzone","osÄ…dzone","oscylowane","osiadane","osiÄ…gane","osiÄ…gniÄ™te","osiedlane","osiedlone","osiedzone","osierocone","osiodÅ‚ane","oskalpowane","oskarżone","oskrobane","oskrzydlane","oskrzydlone","oskubane","oskubywane","osÅ‚abiane","osÅ‚abione","oÅ›lepiane","oÅ›lepione","oÅ›lepniÄ™te","oÅ›liniane","osÅ‚odzone","osÅ‚onione","osÅ‚uchane","osmalone","oÅ›mielone","oÅ›mieszane","oÅ›mieszone","ostrzegane","ostrzelane","ostrzelite","ostrzone","ostudzone","osuniÄ™te","osuszane","osuszone","osuwane","oswajane","oÅ›wiadczane","oÅ›wiadczone","oÅ›wiecane","oÅ›wiecione","oÅ›wietlane","oÅ›wietlone","oswobadzane","oswobodzone","oswojone","oszacowane","oszaÅ‚amiane","oszczane","oszczÄ™dzane","oszczÄ™dzone","oszklone","oszlifowane","oszoÅ‚omione","oszpecone","oszukane","oszukiwane","oszwabione","otaczane","otarte","otoczone","otrute","otruwane","otrzÄ…sane","otrzÄ…Å›niÄ™te","otrzepane","otrzeźwione","otrzymane","otrzymywane","otulone","otumanione","otwierane","otworzone","otwarte","owane","owdowione","owiane","owijane","owiniÄ™te","ozdabiane","ozdobione","ozdrowione","ożenione","oznaczane","oznaczone","oznajmiane","oznajmione","oznakowane","ożyte","ożywane","ożywiane","ożywione","pachnÄ…ce","pacnÄ…te","pakowane","paktowane","paÅ‚ane","paÅ‚aszowane","palniÄ™te","palone","pamiÄ™tane","panoszone","paprane","parafrazowane","paraliżowane","parkowane","parowane","partaczone","parte","parzone","pastowane","paszone","patrolowane","patroszone","patrzone","pauzowane","pchane","pchniÄ™te","pdholowane","pedaÅ‚owane","pÄ™kane","pÄ™kniÄ™te","peÅ‚nione","penetrowane","perforowane","perfumowane","perswadowane","piastowane","pichcone","pielÄ™gnowane","pielone","pienione","pieszczone","piÄ™tnowane","piÄ™te","pijane","pikietowane","piknikowane","pikowane","pilnowane","pilotowane","piÅ‚owane","pisane","pisywane","pite","pÅ‚acone","plÄ…drowane","plamione","planowane","pÅ‚aszczone","plÄ…tane","pÅ‚atane","pÅ‚awione","plewione","pÅ‚onÄ…ce","pÅ‚oszone","plotkowane","plugawione","pÅ‚ukane","pluskane","plute","pobaraszkowane","pobierane","pobite","pobÅ‚ażane","pobÅ‚ogosÅ‚awione","pobrane","pobrudzone","pobudzane","pobudzone","pobujane","pocaÅ‚owane","pocerowane","pochÅ‚aniane","pochlapane","pochlebiane","pochÅ‚oniÄ™te","pochowane","pochwalane","pochwalone","pochwycone","pochylane","pochylone","pociachane","pociÄ…gane","pociÄ…gniÄ™te","pocierane","pocieszane","pocieszone","pociÄ™te","pocone","pocukrowane","poćwiartowane","poczesane","poczÄ™stowane","poczÄ™te","poczochrane","poczute","poczytane","poczytywane","podane","podarowane","podarte","podawane","podążone","podbierane","podbijane","podbite","podbudowane","podbudowywane","podburzane","podburzone","podchwycone","podciÄ…gane","podciÄ…gniÄ™te","podcierane","podciÄ™te","podcinane","podczepione","poddane","poddawane","podebrane","podejmowane","podejrzane","podejrzewane","podelektowane","podeptane","poderwane","podesÅ‚ane","podglÄ…dane","podgolone","podgonione","podgryzane","podgrzane","podgrzewane","podjadane","podjedzone","podjÄ™te","podkablowane","podkarmione","podkÅ‚adane","podklejone","podkolorowane","podkoÅ‚owane","podkopane","podkopywane","podkradane","podkradniÄ™te","podkrÄ™cane","podkrÄ™cone","podkreÅ›lane","podkreÅ›lone","podksztaÅ‚cone","podkulone","podkupione","podkurzone","podkute","podłączane","podłączone","podÅ‚adowane","podÅ‚amane","podlane","podÅ‚apane","podleczone","podlegane","podlewane","podliczane","podliczone","podlizane","podlizywane","podÅ‚ożone","podmalowane","podmieniane","podmienione","podmuchane","podmyte","podnajÄ™te","podniecane","podniecone","podniesione","podnoszone","podoÅ‚ane","podopingowane","podostrzone","podotykane","podpadniÄ™te","podpalane","podpalone","podparte","podpatrywane","podpatrzone","podpieczÄ™towane","podpiekane","podpierane","podpiÄ™te","podpiÅ‚owane","podpinane","podpisane","podpisywane","podpÅ‚acone","podpÅ‚yniÄ™te","podpompowane","podporzÄ…dkowane","podporzÄ…dkowywane","podpowiadane","podpowiedziane","podprowadzane","podpuszczane","podpuszczone","podpychane","podpytane","podrabiane","podrapane","podrasowane","podratowane","podrażnione","podrÄ™czone","podregulowane","podreperowane","podretuszowane","podrobione","podroczone","podróżowane","podrygiwane","podrywane","podrzucane","podrzucone","podrzynane","podsadzone","podskubywane","podsÅ‚uchane","podsÅ‚uchiwane","podsmażane","podsmażone","podÅ›piewywane","podstawiane","podstawione","podstemplowane","podstrojone","podsumowane","podsumowywane","podsuniÄ™te","podsuwane","podÅ›wietlane","podsycane","podsycone","podsyÅ‚ane","podsypane","podszczypywane","podszkolone","podszlifowane","podszykowane","podszyte","podszywane","podtapiane","podtarte","podtopione","podtrzymane","podtrzymywane","podtuczone","poduczane","podupadane","poduszone","podwajane","podwalane","podważane","podwÄ™dzone","podwiÄ…zane","podwieszane","podwiezione","podwijane","podwiniÄ™te","podwojone","podwożone","podwyżane","podwyższane","podwyższone","podyktowane","podyskutowane","podziabane","podziaÅ‚ane","podziaÅ‚kowane","podziÄ™kowane","podzielone","podziurawione","podziwiane","podźwigniÄ™te","poeksperymentowane","pofarbowane","pofatygowane","pofilmowane","poganiane","pogardzane","pogardzone","pogarszane","pogaszone","pogÅ‚adzone","pogÅ‚askane","pogłębiane","pogłębione","pogÅ‚oÅ›nione","pogmatwane","pognÄ™bione","pogniecione","pogodzone","pogonione","pogorszone","pogotowane","pograbione","pogrążane","pogrążone","pogrożone","pogrubiane","pogrubione","pogruchane","pogruchotane","pogrupowane","pogrywane","pogryzane","pogryzione","pogrzane","pogrzebane","pogubione","pogwaÅ‚cane","pohamowane","pohandlowane","poharatowane","pohuÅ›tane","poinformowane","poinstruowane","pojednane","pojÄ™te","pojmiÄ™te","pojmowane","pojone","pokajane","pokaleczone","pokarane","pokarmione","pokÄ…sane","pokatalogowane","pokazane","pokazywane","pokiereszowane","pokierowane","pokiwane","pokÅ‚adane","poklepane","poklepywane","pokÅ‚onione","pokÅ‚ute","pokochane","pokolorowane","pokoloryzowane","pokoÅ‚ysane","pokombinowane","pokomplikowane","pokonane","pokoÅ„czone","pokonywane","pokopane","pokrajane","pokrążone","pokrÄ™cone","pokrojone","pokruszone","pokryte","pokrywane","pokrzepiane","pokrzepione","pokrzyżowane","pokuszone","pokutowane","połączone","polakierowane","poÅ‚amane","polane","poÅ‚apane","poÅ‚askotane","poÅ‚atane","polecane","poÅ‚echtane","polecone","poleczone","polegane","polemizowane","polepszane","polepszone","polerowane","polewane","policzkowane","policzone","polimeryzowane","polizane","poÅ‚kniÄ™te","polowane","poÅ‚owione","poÅ‚ożone","polubione","poluźnione","poluzowane","poÅ‚ykane","pomacane","pomachane","pomagane","pomalowane","pomarynowane","pomasowane","pomazane","pomÄ™czone","pomiatane","pomieszane","pomieszczone","pomijane","pominiÄ™te","pomiziane","pomkniÄ™te","pomnażane","pomniejszane","pomniejszone","pomnożone","pomoczone","pompowane","pomydlone","pomylone","pomyszkowane","pomywane","ponabijane","ponaciskane","ponadziewane","ponaglane","ponaglone","ponagrywane","ponaklejane","ponakÅ‚uwane","ponakrywane","ponaprawiane","ponawiane","poniaÅ„czone","poniechane","ponieiwerane","poniesione","poniszczone","poniżane","poniżone","ponoszone","ponowione","ponudzone","poobcinane","poobcowane","poobczajane","poobijane","poobmacywane","poobracane","poobserwowane","poodbijane","poodcinane","poodgryzane","poodkurzane","poodprawiane","poodsuwane","poodwalane","pooglÄ…dane","poograniczane","poopalane","poopiekane","poopwiadane","pootwierane","popadane","popakowane","popalone","poparte","poparzone","popchane","popchniÄ™te","popÄ™dzane","popÄ™dzone","popÄ™kane","popeÅ‚niane","popeÅ‚nione","poperfumowane","popierane","popieszczone","popijane","popilnowane","popisane","popite","popÅ‚acone","popÅ‚akiwane","poplamione","poplÄ…tane","popluskane","popodcinane","popodziwiane","popoprawiane","poprane","poprasowane","poprawiane","poprawione","poproszone","poprowadzone","popryskane","poprzebierane","poprzeciÄ…gane","poprzecinane","poprzedzane","poprzeglÄ…dane","poprzeklinane","poprzekopywane","poprzemieszczane","poprzenoszone","poprzesadzane","poprzeÅ›ladowane","poprzestawiane","poprzesuwane","poprzewieszane","poprzewracane","poprzycinane","poprzymierzane","poprzytulane","poprzywiÄ…zywane","popsute","popudrowane","popukane","popularyzowane","popuszczane","popuszczone","popychane","popykane","popytane","porabiane","porachowane","poranione","poratowane","porażone","porÄ™czone","porównane","porozbierane","porozbijane","porozciÄ…gane","porozcinane","porozdawane","porozdzielane","porozmieszczane","poróżnione","porozpÄ™dzane","porozpieszczane","porozprowadzane","porozpruwane","porozrzucane","porozstawiane","porozsyÅ‚ane","porozumiewane","porozwalane","porozwiÄ…zywane","porozwieszane","porozwożone","portretowane","poruszane","poruszone","porwane","porysowane","porywane","porzÄ…dkowane","porzÄ…dzone","porzucane","porzucone","posÄ…dzane","posadzone","posÄ…dzone","poÅ›ciÄ…gane","poÅ›cielone","poÅ›cierane","poÅ›cigane","poÅ›cinane","poÅ›ciskane","posegregowane","posiadane","posiane","posiekane","posilane","posiÅ‚kowane","posilone","posiÅ‚owane","posiniaczone","posiorbane","poskÄ…pione","poskÅ‚adane","posklejane","poskramiane","poskrÄ™cane","poskrobane","poskromione","poskubane","posÅ‚ane","posÅ‚odzone","poÅ›lubiane","poÅ›lubione","posÅ‚ugiwane","posmakowane","posmarowane","posolone","posortowane","pospekulowane","pospieszane","poÅ›pieszane","poÅ›piewane","pospinane","pospÅ‚acane","posprawdzane","posprzÄ…tane","posprzedawane","poÅ›redniczone","possane","postanowione","postane","postarane","postawione","postemplowane","posterowane","postradane","postraszone","postrugane","postrzegane","postrzelane","postrzelone","postukane","postymulowane","posuniÄ™te","posuwane","poÅ›wiÄ…cane","poÅ›wiadczone","poÅ›wiecone","poÅ›wiÄ™cone","poÅ›wiÄ™towane","poÅ›wintuszone","posyÅ‚ane","posypane","posypywane","poszarpane","poszastane","poszatkowane","poszczute","poszczycone","poszczypane","poszerzane","poszerzone","poszorowane","poszpiegowane","poszturchane","poszukane","poszukiwane","poszwÄ™dane","poszybowane","potakiwane","potarmoszone","potarte","potasowane","potÄ™gowane","potÄ™piane","potÄ™pione","potkniÄ™te","potoczone","potopione","potorturowane","potrÄ…cane","potrÄ…cone","potraktowane","potrojone","potrute","potrzÄ…sane","potrzaskane","potrzÄ…sniÄ™te","potrzÄ…Å›niÄ™te","potrzymane","Poturbowane","poturlane","potwierdzone","potykane","poucinane","pouczane","pouczone","poudawane","poukÅ‚adane","pouprawiane","poupychane","pourywane","poustawiane","poużywane","powÄ…chane","powachlowane","powalane","powalone","poważane","powbijane","powciÄ…gane","powciskane","powdychane","powÄ™szone","powetowane","powiadamiane","powiadomione","powiÄ…zane","powiedziane","powiedzone","powiÄ™kszane","powielane","powielone","powierzane","powierzone","powieszone","powiewane","powinszowane","powitane","powite","powkÅ‚adane","powlekane","powłóczone","powodowane","powoÅ‚ane","powoÅ‚ywane","powożone","powpychane","powrócone","powrzucane","powsadzane","powÅ›ciÄ…gniÄ™te","powspominane","powstrzymane","powtarzane","powtórzone","powybierane","powybijane","powycierane","powycinane","powyciskane","powydawane","powyganiane","powyginane","powyjaÅ›niane","powyjmowane","powyłączane","powymiatane","powymieniane","powynoszone","powypeÅ‚niane","powypisywane","powyrywane","powyrzucane","powystrzelane","powysyÅ‚ane","powywalane","powywieszane","powywracane","powziÄ™te","pozabawiane","pozabijane","pozacierane","pożądane","pożądlone","pozadzierane","pozakÅ‚adane","pozaklinane","pozaÅ‚atwiane","pozamiatane","pozamieniane","pozamrażane","pozamykane","pozapalane","pozapinane","pozapisywane","pozapraszane","pożarte","pozasÅ‚aniane","pozastrzelane","pozatykane","pozbawiane","pozbawione","pozbierane","pozbyte","pozbywane","pozdejmowane","pozdrawiane","pozdrowione","pożegnane","pożerane","pozmiatane","pozmieniane","pozmywane","poznaczone","poznane","poznawane","poznÄ™cane","pozorowane","pozostawiane","pozostawione","pozowane","pozrywane","pozszywane","pożute","pozwalniane","pozwane","pozwiÄ…zywane","pozwiedzane","pozwolone","pożyczane","pożyczone","pozyskane","pożyte","pozywane","pożywiane","pożywione","praktykowane","prane","prasowane","prawione","prażone","precyzowane","preferowane","prenumerowane","prezentowane","próbowane","procesowane","produkowane","profanowane","profilowane","prognozowane","programowane","projektowane","proklamowane","prolongowane","promieniowane","promowane","propagowane","proponowane","prosperowane","prostowane","proszkowane","proszone","protestowane","protokoÅ‚owane","prowadzone","prowokowane","prute","pryskane","pryÅ›niÄ™te","przeanalizowane","przearanżowane","przebaczane","przebaczone","przebadane","przebiegniÄ™te","przebierane","przebijane","przebite","przebolone","przebrane","przebudowane","przebudowywane","przebudzane","przebudzone","przebukowane","przebyte","przebywane","przeceniane","przecenione","przechlapane","przechodzone","przechowane","przechowywane","przechrzcone","przechwycone","przechwytywane","przechylane","przechylone","przechytrzane","przechytrzone","przeciÄ…gane","przeciÄ…gniÄ™te","przeciążane","przeciążone","przeciekane","przecierane","przecierpiane","przeciÄ™te","przecinane","przeciskane","przeciÅ›niÄ™te","przeciwstawiane","przećwiczone","przeczekane","przeczesane","przeczesywane","przeczoÅ‚gane","przeczute","przeczuwane","przeczyszczone","przeczytane","przedarte","przedawkowane","przedawkowywane","przedekorowane","przedÅ‚ożone","przedÅ‚użane","przedÅ‚użone","przedmuchane","przedobrzone","przedostane","przedostawane","przedsiewziÄ™te","przedstawiane","przedstawione","przedymane","przedyskutowane","przedzierane","przedziurawione","przedziurkowane","przeegzaminowane","przefaksowane","przefarbowane","przefasonowane","przefasowane","przefaxowane","przefiltrowane","przeformowane","przeforsowane","przegadane","przeganane","przeganiane","przegapiane","przegapione","przegiÄ™te","przeginane","przeglÄ…dane","przeglÄ…dniÄ™te","przegÅ‚odzone","przegÅ‚osowane","przegonione","przegotowane","przegotowywane","przegrabione","przegradzane","przegrane","przegrupowane","przegrupowywane","przegrywane","przegryzane","przegryzione","przegrzane","przegrzebane","przegrzewane","przehandlowane","przeholowane","przeinstalowane","przeistoczone","przejadane","przejaskrawiane","przejaÅ›nione","przejawiane","przejawione","przejechane","przejÄ™te","przejeżdżane","przejmowane","przejrzane","przekabacane","przekabacone","przekablowane","przekalibrowane","przekalkulowane","przekarmiane","przekÄ…szone","przekazywane","przekierowane","przekierowywane","przekimane","przekÅ‚adane","przeklejone","przeklÄ™te","przeklinane","przeklniÄ™te","przekÅ‚ute","przekonane","przekonfigurowane","przekonstruowane","przekonwertowane","przekonywane","przekopane","przekopywane","przekozioÅ‚kowane","przekraczane","przekrÄ™cane","przekrÄ™cone","przekreÅ›lane","przekreÅ›lone","przekroczone","przekrojone","przekrzyczone","przekrzywione","przeksztaÅ‚cane","przeksztaÅ‚cone","przekupione","przekupywane","przekute","przekwalifikowane","przełączane","przełączone","przeÅ‚adowane","przeÅ‚adowywane","przeÅ‚amane","przeÅ‚amywane","przelane","przelatywane","przeleciane","przelewane","przeleżane","przelicytowane","przeliczane","przeliczone","przeliterowane","przeÅ‚kniÄ™te","przeÅ‚ożone","przeÅ‚ykane","przeÅ‚ykniÄ™te","przemalowane","przemalowywane","przemaszerowane","przemawiane","przemeblowane","przemÄ™czone","przemielone","przemieniane","przemierzone","przemieszczane","przemieszczone","przemijane","przemilczane","przemilczone","przeminiÄ™te","przemkniÄ™te","przemodelowane","przemusztrowane","przemycane","przemycone","przemyÅ›lane","przemyÅ›lone","przemyte","przemywane","przenegocjowane","przeniesione","przenikane","przenikniÄ™te","przenoszone","przeobrażane","przeobrażone","przeoczane","przeoczone","przeorane","przeorganizowane","przeorientowane","przepadane","przepakowane","przepalone","przeparkowane","przepchane","przepchniÄ™te","przepÄ™dzane","przepÄ™dzone","przepeÅ‚niane","przepeÅ‚nione","przepijane","przepiÅ‚owane","przepisane","przepisywane","przepite","przepÅ‚acane","przepÅ‚acone","przepÅ‚akane","przeplanowane","przepÅ‚oszone","przepÅ‚ukane","przepÅ‚ukiwane","przepÅ‚yniÄ™te","przepÅ‚ywane","przepompowane","przepompowywane","przepowiadane","przepowiedziane","przepracowane","przepracowywane","przeprane","przeprawiane","przeprawione","przeprogramowane","przeprojektowane","przeprowadzane","przeprowadzone","przepuszczane","przepuszczone","przepychane","przepytane","przepytywane","przerÄ…bane","przerabiane","przeradzane","przerastane","przerażone","przeredagowane","przerejestrowane","przerobione","przerodzone","przeroÅ›niÄ™te","przerwane","przerysowane","przerywane","przerzedzane","przerzucane","przerzucone","przesÄ…czone","przesadzane","przesÄ…dzane","przesadzone","przesÄ…dzone","przeÅ›cigane","przeÅ›cigniÄ™te","przesiadane","przesiadywane","przesiane","przesiedlane","przesiedlone","przesiedziane","przesiewane","przesilone","przeskakiwane","przeskalowane","przeskanowane","przeskoczone","przeskrobane","przeÅ›ladowane","przesÅ‚aniane","przesÅ‚ane","przeÅ›ledzone","przeÅ›lizgniÄ™te","przesÅ‚odzone","przesÅ‚oniÄ™te","przesÅ‚uchane","przesÅ‚uchiwane","przesmarowane","przesolone","przesortowane","przespane","przeÅ›piewane","przessane","przestawiane","przestawione","przestemplowane","przestraszone","przestrojone","przestrzegane","przestrzelone","przestudiowane","przesuniÄ™te","przesuwane","przeÅ›wietlane","przeÅ›wietlone","przesyÅ‚ane","przesypane","przesypiane","przesypywane","przeszarżowane","przeszczepiane","przeszczepione","przeszkadzane","przeszkolone","przeszmuglowane","przeszukane","przeszukiwane","przeszyte","przeszywane","przetaczane","przetaÅ„czone","przetapetowane","przetarte","przetestowane","przetkane","przetoczone","przetopione","przetrÄ…cone","przetransformowane","przetransmitowane","przetransponowane","przetransportowane","przetrawione","przetrwane","przetrzÄ…sane","przetrzÄ…Å›niÄ™te","przetrzepane","przetrzymane","przetrzymywane","przetwarzane","przetworzone","przewalane","przewalczone","przewaletowane","przewalone","przeważane","przeważone","przewertowane","przewiÄ…zane","przewiÄ…zywane","przewidywane","przewidziane","przewiercane","przewiercone","przewieszane","przewieszone","przewietrzone","przewiezione","przewijane","przewiniÄ™te","przewitane","przewodniczone","przewodzone","przewożone","przewracane","przewrócone","przewyższane","przeymierzane","przeżarte","przeżeglowane","przeżegnane","przeziÄ™bione","przezimowane","przeznaczane","przeznaczone","przeżute","przezwyciężane","przezwyciężone","przeżyte","przezywane","przeżywane","przodowane","przpochlebione","przwdziewane","przybastowane","przybierane","przybijane","przybite","przybliżane","przybliżone","przybrane","przycelowane","przycepione","przychylone","przyciÄ…gane","przyciÄ…gniÄ™te","przyciemnione","przyciÄ™te","przycinane","przyciskane","przyciÅ›niÄ™te","przyciszone","przyćmiewane","przyćmione","przycumowane","przyczepiane","przyczesane","przyczoÅ‚gane","przyczynione","przydepniÄ™te","przydeptane","przyduszone","przydzielane","przydzielone","przygarniÄ™te","przygaszone","przygazowane","przygÅ‚adzane","przygnÄ™biane","przygniatane","przygniecione","przygotowane","przygruchane","przygrywane","przygryzane","przygryzione","przygrzane","przygwożdżone","przyhamowane","przyholowane","przyjane","przyjÄ™te","przyjmowane","przyjrzane","przykÅ‚adane","przyklejone","przyklepane","przykopane","przykrÄ™cane","przykrÄ™cone","przykrócone","przykryte","przykrywane","przykurzone","przykute","przykuwane","przyłączane","przyłączone","przylane","przyÅ‚apane","przylegane","przylepiane","przylepione","przyÅ‚ożone","przymierzone","przymilane","przymkniÄ™te","przymocowane","przymuszane","przynależone","przyniesione","przynoszone","przynudzane","przyostrzone","przyozdabiane","przyozdobione","przypadniÄ™te","przypakowane","przypakowywane","przypalane","przypalone","przyparte","przypasowane","przypatrywane","przypatrzone","przypieczÄ™towane","przypiekane","przypierane","przypiÄ™te","przypilnowane","przypiÅ‚owane","przypinane","przypisane","przypisywane","przypÅ‚acone","przyplÄ…tane","przypÅ‚yniÄ™te","przypodobane","przypominane","przypomniane","przyporzÄ…dkowane","przyprawiane","przyprawione","przyprowadzone","przypucowane","przypudrowane","przypuszczane","przypuszczone","przyrównane","przyrzÄ…dzane","przyrzÄ…dzone","przysiadane","przysiÄ…gniÄ™te","przyskrzydlone","przyskrzyniane","przyskrzynione","przysÅ‚aniane","przysÅ‚ane","przysÅ‚odzone","przysÅ‚onione","przysÅ‚uchiwane","przysÅ‚ugiwane","przysÅ‚użone","przysmażane","przysmażone","przyspieszane","przyspieszone","przysporzone","przysposobione","przyÅ›rubowywane","przyssane","przystÄ…pione","przystawiane","przystawione","przystemplowane","przystopowane","przystosowane","przystrojone","przysuniÄ™te","przysuwane","przyswajane","przyÅ›wiecane","przyÅ›wiÄ™cone","przyswojone","przysyÅ‚ane","przysypane","przyszpilone","przyszykowane","przyszyte","przyszywane","przytaczane","przytargane","przytarte","przytaszczane","przytÄ™piane","przytÄ™pione","przytkane","przytÅ‚aczane","przytÅ‚oczone","przytÅ‚umione","przytoczone","przytrafione","przytroczone","przytruwane","przytrzasniÄ™te","przytrzymane","przytrzymywane","przytulane","przytulone","przytwierdzane","przytwierdzone","przytykane","przyuczone","przyuważone","przywabione","przywalane","przywalone","przywarowane","przywarte","przywdziane","przywiÄ…zane","przywiÄ…zywane","przywidziane","przywiezione","przywitane","przywÅ‚aszczane","przywÅ‚aszczone","przywoÅ‚ane","przywoÅ‚ywane","przywożone","przywracane","przywrócone","przyznaczone","przyznane","przyznawane","przyzwalane","przyzwane","przyzwyczajane","przyzwyczajone","przyzywane","psiamane","pstrykane","pstrykniÄ™te","psute","publikowane","puchniÄ™te","pucowane","pudÅ‚owane","pudrowane","pukniÄ™te","punktowane","pustoszone","puszczane","puszczone","puszkowane","puszone","pykane","pytane","rabowane","rachowane","racjonalizowane","racjonowane","raczone","radowane","ranione","raportowane","ratowane","ratyfikowane","reaktywowane","realizowane","reanimowane","recytowane","rÄ™czone","redagowane","redukowane","reformowane","refowane","regenerowane","regionalizowane","regulowane","reinkarnowane","rejestrowane","reklamowane","rekomendowane","rekompensowane","rekonstruowane","rekreowane","rekrutowane","rekwirowane","relacjonowane","relaksowane","remodulowane","remontowane","renegocjowane","reorganizowane","reperowane","replikowane","represejonowane","reprezentowane","reprodukowane","resetowane","resocjalizowane","respektowane","resuscytowane","retuszowane","rewanżowane","rewidowane","rezerwowane","rezonowane","rezygnowane","reżyserowane","robione","rodzone","rojone","rolowane","romansowane","ronione","rozbawiane","rozbawione","rozbierane","rozbijane","rozbite","rozbÅ‚yÅ›niÄ™te","rozbrajane","rozbrojone","rozbudowane","rozbudowywane","rozbudzane","rozbudzone","rozbujane","rozcapierzone","rozchmurzone","rozchodzone","rozchylane","rozchylone","rozciÄ…gane","rozciÄ…gniÄ™te","rozcieÅ„czane","rozcieÅ„czone","rozcierane","rozciÄ™te","rozcinane","rozczarowane","rozczarowywane","rozczesane","rozczÅ‚onkowane","rozczulane","rozczytane","rozdane","rozdawane","rozdeptane","rozdmuchane","rozdmuchiwane","rozdrabniane","rozdrapane","rozdrapywane","rozdrażniane","rozdrażnione","rozduszone","rozdwojone","rozdysponowane","rozdzielane","rozdzielone","rozdzierane","rozdziewiczone","rozebrane","rozedrane","rozegrane","rozegrywane","rozepchane","rozerwane","rozesÅ‚ane","rozgarniÄ™te","rozgaszczane","rozgiÄ™te","rozglaszane","rozgÅ‚oszone","rozgniatane","rozgniecione","rozgniewane","rozgonione","rozgraniczone","rozgrane","rozgromione","rozgrywane","rozgryzane","rozgryzione","rozgrzane","rozgrzebywane","rozgrzeszone","rozgrzewane","rozhuÅ›tane","rozjaÅ›niane","rozjaÅ›nione","rozjechane","rozjedzone","rozjuszane","rozjuszone","rozkazane","rozkazywane","rozkÅ‚adane","rozklejane","rozklejone","rozkoÅ‚ysane","rozkopane","rozkopywane","rozkoszowane","rozkrÄ™cane","rozkrÄ™cone","rozkrojone","rozkruszone","rozkute","rozkuwane","rozkwaszone","rozkwaterowane","rozkwitane","rozkwitniÄ™te","rozłączone","rozÅ‚adowane","rozÅ‚adowywane","rozÅ‚amane","rozlane","rozlewane","rozliczane","rozliczone","rozlokowane","rozÅ‚ożone","rozÅ‚upane","rozluźniane","rozmanażane","rozmasowane","rozmawiane","rozmazane","rozmazywane","rozmiÄ™kczone","rozmieniane","rozmienione","rozmieszczane","rozmieszczone","rozminiÄ™te","rozmnożone","rozmontowane","rozmówione","rozmrażane","rozmrożone","rozmyÅ›lane","rozmyte","różnicowane","rozniecane","rozniecione","rozniesione","różnione","roznoszone","rozochocone","rozpaczane","rozpakowane","rozpakowywane","rozpalane","rozpalone","rozpamiÄ™tywane","rozpaskudzane","rozpatrywane","rozpatrzone","rozpÄ™dzane","rozpÄ™dzone","rozpÄ™tane","rozpieszczane","rozpieszczone","rozpiÄ™te","rozpiÅ‚owane","rozpinane","rozpisane","rozpisywane","rozplanowane","rozpÅ‚aszczane","rozpÅ‚aszczone","rozplÄ…tane","rozplÄ…tywane","rozpÅ‚yniÄ™te","rozpoczÄ™te","rozpoczynane","rozpogodzone","rozporzÄ…dzane","rozporzÄ…dzone","rozpoÅ›cierane","rozpostrzone","rozpowiadane","rozpowiedziane","rozpowszechniane","rozpowszechnione","rozpoznane","rozpoznawane","rozpracowane","rozpraszane","rozprawiane","rozprawiczone","rozprawione","rozprostowane","rozproszone","rozprowadzane","rozprowadzone","rozprute","rozpruwane","rozprzestrzeniane","rozprzestrzenione","rozpuszczane","rozpuszczone","rozpychane","rozpylane","rozpylone","rozpytane","rozpytywane","rozrastane","rozreklamowane","rozrobione","rozroÅ›niÄ™te","rozróżniane","rozróżnione","rozruszane","rozrysowane","rozrywane","rozrzucane","rozsadzane","rozsadzone","rozsÄ…dzone","rozÅ›cielone","rozsiane","rozsiekane","rozsiewane","rozsiodÅ‚ane","rozsÅ‚awiane","rozsÅ‚awione","rozsmarowane","rozsmarowywane","rozÅ›mieszane","rozstane","rozstÄ…pione","rozstawane","rozstawiane","rozstawione","rozstrojone","rozstrzÄ…sane","rozstrzeliwane","rozstrzelone","rozstrzygane","rozstrzygniÄ™te","rozsuniÄ™te","rozsupÅ‚ane","rozÅ›wietlane","rozÅ›wietlone","rozsyÅ‚ane","rozsypane","rozsypywane","rozszarpane","rozszarpywane","rozszczepiane","rozszczepione","rozszerzane","rozszerzone","rozszyfrowane","roztaczane","roztapiane","roztarte","roztoczone","roztopione","roztrwonione","roztrzÄ…sane","roztrzaskane","rozumiane","rozumowane","rozwalane","rozwalone","rozwarte","rozważane","rozważone","rozweselane","rozweselone","rozwiane","rozwiÄ…zane","rozwiÄ…zywane","rozwidniane","rozwiedzione","rozwierane","rozwiercone","rozwieszane","rozwieszone","rozwiewane","rozwiezione","rozwikÅ‚ane","rozwiniÄ™te","rozwlekane","rozwodzone","rozwÅ›cieczane","rozwÅ›cieczone","rozzÅ‚oszczone","rugane","ruinowane","rujnowane","runiÄ™te","ruszane","ruszone","rwane","ryczane","ryglowane","rymowane","rysowane","ryte","ryzykowane","rzÄ…dzone","rzeźbione","rżniÄ™te","rzucane","rzucone","rzygane","sabotażowane","sÄ…czone","sadzane","sadzone","sÄ…dzone","salutowane","salwowane","sankcjonowane","satysfakcjonowane","scalone","scementowane","scentrowane","scharakteryzowane","schÅ‚adzane","schlane","schlapane","schlebione","schÅ‚odzone","schowane","schronione","schrupane","schrzanione","schwytane","schylane","Å›ciÄ…gniÄ™te","Å›cielone","Å›ciemniane","Å›ciemnione","Å›cierane","Å›cierpione","Å›ciÄ™te","Å›cigane","Å›cinane","Å›ciskane","Å›ciÅ›niÄ™te","Å›ciszane","Å›ciszone","sÄ™dziowane","segregowane","selekcjonowane","separowane","sÄ™pione","serwowane","sfabrykowane","sfajczone","sfaÅ‚szowane","sfaulowane","sfilmowane","sfinalizowane","sfinansowane","sfingowane","sformalizowane","sformatowane","sformowane","sformuÅ‚owane","sforsowane","sfotografowane","shimmerowane","siane","siekane","siorbane","skadrowane","skakane","skalane","skaleczone","skalibrowane","skalkulowane","skalpowane","skanalizowane","skandowane","skanowane","skapitulowane","skarcone","skarżone","skasowane","skatalogowane","skazane","skażone","skazywane","skierowane","skÅ‚adane","skÅ‚adowane","skÅ‚aniane","sklasyfikowane","sklecione","sklejane","sklejone","sklepane","skłócone","skÅ‚onione","sklonowane","sknocone","skojarzone","skolonizowane","skoÅ‚owane","skombinowane","skomentowane","skompensowane","skompletowane","skomplikowane","skomponowane","skompresowane","skompromitowane","skomunikowane","skonane","skoncentrowane","skoÅ„czone","skondensowane","skonfigurowane","skonfiskowane","skonfrontowane","skonkretyzowane","skonsolidowane","skonstruowane","skonsultowane","skonsumowane","skontaktowane","skontrolowane","skoordynowane","skopane","skopiowane","skorektowane","skorumpowane","skorygowane","skorzystane","skoszone","skracane","skradzione","skrÄ™cane","skrÄ™cone","skremowane","skreÅ›lane","skreÅ›lone","skrobane","skrobniÄ™te","skrócone","skrojone","skropione","skruszone","skrystalizowane","skryte","skrytykowane","skrywane","skrzecowane","skrzepniÄ™te","skrzyczane","skrzyte","skrzywdzone","skrzyżowane","skserowane","skubane","skubniÄ™te","skulone","skumulowane","skupiane","skupione","skupowane","skurczone","skuszone","skute","skuwane","skwitowane","sÅ‚ane","sÅ‚awione","Å›ledzone","Å›linione","Å›lizgane","sÅ‚odzone","sÅ‚uchane","sÅ‚yszane","smagane","smarowane","smażone","Å›miecone","smute","smyrane","snute","sondowane","sortowane","spafycikowane","spakowane","spalane","spaÅ‚aszowane","spalone","spaÅ‚owane","spamiÄ™tane","spaprane","sparafrazowane","sparaliżowane","sparowane","spartaczone","spartolone","sparzone","spasowane","spataÅ‚aszone","spauzowane","spawane","spawione","specjalizowane","spÄ™dzane","spÄ™dzone","spekulowane","speÅ‚niane","speÅ‚nione","spenetrowane","spÄ™tane","spierane","spiÄ™te","Å›piewane","spiÅ‚owane","spinane","spisane","spiskowane","spisywane","spite","spÅ‚acane","spÅ‚acone","splÄ…drowane","splajtowane","splamione","spÅ‚aszczone","splatane","splÄ…tane","spÅ‚atane","spÅ‚awiane","spÅ‚awione","spÅ‚odzone","spÅ‚oniÄ™te","spÅ‚oszone","spÅ‚ukane","spÅ‚ukiwane","spluwane","spÅ‚ywane","spoczÄ™te","spoczywane","spodziewane","spojone","spolaryzowane","spoliczkowane","sponiewierane","sponsorowane","spopielane","spopielone","spopularyzowane","sportretowane","sporzÄ…dzane","sporzÄ…dzone","spostrzegane","spotÄ™gowane","spotkane","spotykane","spoufalane","spowalniane","spowiadane","spowodowane","spowolnione","spoźnione","spóźnione","spożytkowane","spożyte","spożywane","sprane","sprasowane","spraszane","sprawdzone","sprawione","sprawowane","sprecyzowane","spreparowane","sprężane","sprężone","spróbowane","sprofanowane","sprofilowane","sprostowane","sproszkowane","sproszone","sprowadzane","sprowadzone","sprowokowane","spryskane","spryskiwane","sprywatyzowane","sprzÄ…tane","sprzÄ…tniÄ™te","sprzeczane","sprzedane","sprzedawane","sprzeniewierzone","spudÅ‚owane","spustoszone","spuszczane","spuszczone","spychane","ssane","stabilizowane","stacjonowane","staczane","staranowane","starczane","stargowane","startowane","stawiane","stawione","stemplowane","stenografowane","stepowane","sterowane","sterroryzowane","sterylizowane","stÅ‚amszone","stÅ‚umione","stniÄ™te","stoczone","stoÅ‚owane","stonowane","stopione","stopniowane","storpedowane","stosowane","strÄ…cane","stracone","strÄ…cone","strajkowane","straszone","stratowane","strawione","streamowane","stresowane","streszczane","streszczone","strofowane","strojone","stroszone","strugane","strute","strymowane","strzÄ…sane","strzaskane","strzÄ…Å›niÄ™te","strzelone","strzepane","strzÄ™pione","strzepniÄ™te","strzepywane","studiowane","studzone","stukane","stukniÄ™te","stulone","stwardnione","stwarzane","stwierdzane","stwierdzone","stworzone","stykane","stylizowane","stymulowane","sugerowane","sumowane","suniÄ™te","swatane","swawolone","Å›wiadczone","Å›wiecone","Å›wiÄ™cone","Å›wierzbione","Å›wiÄ™towane","Å›wintuszone","sycone","sygnalizowane","symulowane","synchronizowane","sypane","sypniÄ™te","szachrowane","szacowane","szafowane","szamotane","szanowane","szargane","szarpane","szarpniÄ™te","szarżowane","szasowane","szastane","szatkowane","szczÄ™dzone","szczepione","szczerzone","szczute","szczycone","szczypane","szczytowane","szefowane","szemrane","szepniÄ™te","szeptane","szerzone","szkalowane","szkicowane","szklone","szkodzone","szkolone","szlachtowane","szlifowane","szmuglowane","szokowane","szorowane","szpachlowane","szpanowane","szperane","szprycowane","sztachniÄ™te","szturchane","szturchniÄ™te","szturmowane","szufladkowane","szuflowane","szukane","szulerowane","szwankowane","szydeÅ‚kowane","szydzone","szyfrowane","szykanowane","szykowane","szyte","taktowane","tamowane","tankowane","tapetowane","taplane","taranowane","targane","targniÄ™te","targowane","tarmoszone","tarte","tarzane","tasowane","taszczone","tatuowane","tchniÄ™te","telefonowane","telegrfowane","teleportowane","temperowane","teoretyzowane","tÄ™pione","terroryzowane","testowane","tkane","tkniÄ™te","tÅ‚amszone","tÅ‚oczone","tÅ‚umaczone","tÅ‚umione","toczone","tolerowane","tonowane","topione","torowane","torturowane","towarzyszone","trÄ…bione","trÄ…cane","tracone","trÄ…cone","trafiane","trafione","tragizowane","traktowane","transferowane","transformowane","transmitowane","transportowane","tratowane","trawione","trenowane","tresowane","triumfowane","tropione","troszczone","trute","trwonione","trymowane","tryskane","tryÅ›niÄ™te","tryumfowane","trywializowane","trzaskane","trzasniÄ™te","trzepane","trzepniÄ™te","trzepotane","trzÄ™sione","trzymane","tuczone","tuÅ‚ane","tulone","turlane","tuszowane","twistowane","tworzone","tykane","tyranizowane","tyrane","tytuÅ‚owane","uaktualniane","uaktualnione","uaktywniane","uaktywnione","uargumentowane","uatrakcyjnione","ubabrane","ubarwiane","ubarwione","ubawione","ubezpieczane","ubezpieczone","ubezwÅ‚asnowolnione","ubiczowane","ubiegane","ubierane","ubijane","ubite","ubÅ‚agane","ubliżane","ubliżone","ubolewane","ubóstwiane","ubrane","ubroczone","ubrudzone","ucaÅ‚owane","ucharakteryzowane","uchowane","uchronione","uchwalane","uchwalone","uchwycone","uchylane","uchylone","uciÄ…gniÄ™te","ucieleÅ›niane","ucierane","ucierpiane","uciÄ™te","ucinane","uciskane","uciÅ›niÄ™te","uciszane","uciszone","uciuÅ‚ane","ucywilizowane","uczczone","uczepione","uczesane","uczÄ™szczane","uczone","ucztowane","uczute","uczynione","udane","udaremnione","udawane","udekorowane","udeptywane","uderzane","uderzone","udobruchane","udokumentowane","udomawiane","udomowione","udoskonalane","udoskonalone","udostÄ™pniane","udostÄ™pnione","udowadniane","udowodnione","Udramatyzowane","udrÄ™czone","udrożnione","udupione","uduszone","udzielane","udzielone","udźwigniÄ™te","ueiwarygodnione","ufane","ufarbowane","uformowane","ufortyfikowane","ufundowane","ugadane","uganiane","ugaszane","ugaszone","ugiÄ™te","uginane","ugÅ‚askane","ugniatane","ugodzone","ugoszczone","ugotowane","ugrane","ugruntowane","ugryzione","ugrzÄ™zniÄ™te","uhistoryzowane","uhonorowane","uiÅ›cite","ujadane","ujarzmiane","ujarzmione","ujawniane","ujawnione","ujÄ™te","ujeżdżane","ujeżdżone","ujmowane","ujrzane","ukamieniowane","ukarane","ukartowane","ukÄ…szone","ukatrupione","ukazane","ukazywane","ukierowane","ukierunkowane","ukÅ‚adane","uklepane","ukÅ‚onione","ukÅ‚ute","uknute","ukojone","ukoÅ‚ysane","ukoÅ„czone","ukonkretnione","ukoronowane","ukradzione","ukrÄ™cane","ukrÄ™cone","ukrojone","ukryte","ukrywane","ukrzyżowane","uksztaÅ‚towane","ukute","uÅ‚agodzone","uÅ‚askawiane","uÅ‚askawione","ulatniane","uÅ‚atwiane","uÅ‚atwione","uleczane","uleczone","ulegane","ulepione","ulepszane","ulepszone","ulokowane","ulotnione","uÅ‚ożone","umacniane","umalowane","umartwiane","umawiane","umazane","umeblowane","umiejscowione","umieszczane","umieszczone","umilane","umilone","umkniÄ™te","umniejszane","umniejszone","umocnione","umocowane","umoczone","umodelowane","umorzone","umotywowane","umówione","umożliwiane","umożliwione","umrocznione","umyte","unaocznione","unicestwiane","unicestwione","uniemożliwaine","uniemożliwione","unierochomione","uniesione","unieszczęśliwiane","unieszczęśliwione","unieszkodliwiane","unieszkodliwione","unieważniane","unieważnione","uniewinnione","uniezależnione","unikane","unikniÄ™te","unormowane","unoszone","unowoczesniane","unowoczeÅ›niane","uodpornione","uogólniane","upakowane","upalane","upalone","upamiÄ™tniane","upamiÄ™tnione","upaÅ„stwowione","upaprane","uparte","upaskudzone","upchane","upchniÄ™te","upewniane","upewnione","upgradowane","upichcone","upiÄ™kszane","upiÄ™kszone","upierane","upierdolone","upiÄ™te","upijane","upilnowane","upinane","upite","uplastycznione","upÅ‚yniÄ™te","upodabniane","upodobnione","upojone","upokorzane","upokorzone","upolowane","upominane","uporzÄ…dkowane","upowszechnione","upozorowane","upozowane","uprane","uprasowane","upraszczane","uprawdopodobnione","uprawiane","uproszczone","uproszone","uprowadzane","uprowadzone","uprzÄ…tane","uprzÄ…tniÄ™te","uprzedone","uprzedzane","uprzyjemniane","uprzyjemnione","uprzykrzane","uprzytomnione","upubliczniane","upublicznione","upudrowane","upuszczane","upuszczone","upychane","urabiane","uraczane","uradowane","UrÄ…gane","uratowane","urażane","urażone","uregulowane","urobione","uronione","uroÅ›niÄ™te","urozmaicane","urozmaicone","uruchamiane","uruchomione","urwane","urywane","urzÄ…dzane","urzÄ…dzone","urzeczywistniane","urzeczywistnione","urżniÄ™te","usadowione","usadzone","usamowolnione","usankcjonowane","usatyfakcjonowane","uschniÄ™te","uÅ›ciskane","uÅ›cislone","uÅ›ciÅ›niÄ™te","usidlone","usiedzone","uskÅ‚adane","uskoczone","uskuteczniane","uskutecznione","usÅ‚uchane","usÅ‚ugiwane","usÅ‚użone","usÅ‚yszane","usmażone","uÅ›miane","uÅ›miercane","uÅ›miercone","uÅ›mierzone","uspane","uÅ›pione","uspokajane","uspokojone","uspoÅ‚eczniane","usprawiedliwiane","usprawiedliwione","usprawnione","usprzÄ…tane","ustabilizowane","ustalane","ustalone","ustanawiane","ustanowione","ustÄ…pione","ustatkowane","ustawiane","ustawione","ustÄ™powane","ustosunkowane","ustrojone","ustrzegane","ustrzelone","usuniÄ™te","ususzone","usuwane","uÅ›wiadamiane","uÅ›wiadczone","uÅ›wiadomione","uÅ›wiÄ™cone","uÅ›winione","usychane","usypane","usypiane","usystematyzowane","usytuowane","uszanowane","uszczelniane","uszczęśliwiane","uszczęśliwione","uszczuplone","uszczypniÄ™te","uszkadzane","uszkodzone","uszlachetniane","uszlachetnione","usztywnione","uszykowane","uszyte","utajnione","utargowane","utarte","utemperowane","utkane","utkniÄ™te","utkwione","utoczone","utopione","utorowane","utożsamiane","utożsamione","utracone","utrÄ…cone","utrudniane","utrudnione","utrwalane","utrwalone","utrzymywane","utuczone","utulone","utwierdzane","utwierdzone","utworzone","utylizowane","uwalniane","uwalone","uwarunkowane","uważane","uwiÄ…zane","uwiÄ…zywane","uwidocznione","uwieczniane","uwiecznione","uwielbiane","uwielbione","uwieÅ„czone","uwierane","uwierzone","uwieszone","uwiezione","uwiÄ™zione","uwijane","uwikÅ‚ane","uwiniÄ™te","uwite","uwÅ‚aczane","uwÅ‚aszczone","uwodzone","uwolnione","uwsteczniane","uwstecznione","uwydatniane","uwypiklone","uwzglÄ™dniane","uwzglÄ™dnione","użądlone","uzależniane","uzależnione","uzasadniane","uzasadnione","uzbierane","uzbrajane","uzbrojone","uzdrawiane","uzdrowione","użerane","uzewnÄ™trzniane","uzewnÄ™trznione","uzgadniane","uzgodnione","uziemione","uzmysÅ‚owione","uznane","uznawane","uzupeÅ‚niane","uzupeÅ‚nione","uzurpowane","użyczane","użyczone","uzyskane","uzyskiwane","użyte","używane","wabione","wÄ…chane","wachlowane","wahane","walczone","waÅ‚kowane","walniÄ™te","walone","ważone","wbijane","wbite","wcelowane","wchÅ‚oniÄ™te","wciÄ…gane","wciÄ…gniÄ™te","wcielane","wcielone","wcierane","wciÄ™te","wcinane","wciskane","wciÅ›niÄ™te","wczepione","wczoÅ‚gane","wczute","wczytane","wczytywane","wdane","wdarte","wdawane","wdepniÄ™te","wdeptane","wdetonowane","wdmuchiwane","wdrapane","wdrapywane","wdrażane","wdrążone","wdrożone","wduszone","wdychane","wdzierane","wÄ™dkowane","wentylowane","wepchane","wepchniÄ™te","werbowane","weryfikowane","wessane","wetkane","wetkniÄ™te","wezwane","wgłębiane","wgniatane","wgniecione","wgrane","wgryzane","wgryzione","wiÄ…zane","wibrowane","widywane","widziane","wiedzone","wielbione","wiercone","wierzgane","wierzone","wieszane","wietrzone","więżone","wikÅ‚ane","windowane","winszowane","wiosÅ‚owane","wirowane","witane","wite","wizualizowane","wjeżdżane","wkalkulowane","wkÅ‚adane","wklejane","wklejone","wklepane","wkÅ‚ute","wkomponowane","wkopane","wkopywane","wkraczane","wkradane","wkradzione","wkrÄ™cane","wkrÄ™cone","wkupione","wkurwiane","wkute","wkuwane","włączane","włączone","wÅ‚adane","wÅ‚adowane","wÅ‚amane","wÅ‚amywane","wlane","wlepiane","wlepione","wlewane","wliczane","wliczone","wÅ‚ożone","wmanewrowane","wmanipulowane","wmawiane","wmieszane","wmówione","wmurowane","wmuszone","wnerwiane","wnerwione","wniesione","wnikane","wnikniÄ™te","wnioskowane","wnoszone","wodowane","wojowane","woÅ‚ane","woskowane","wożone","wpajane","wpakowane","wparowane","wpasowane","wpatrywane","wpÄ™dzane","wpÄ™dzone","wperswadowane","wpienione","wpiÄ™te","wpisane","wpisywane","wpÅ‚acane","wpÅ‚acone","wplatane","wplÄ…tane","wplÄ…tywane","wpojone","wpompowane","wpraszane","wprawiane","wproszone","wprowadzane","wprowadzone","wpuszczone","wpychane","wrabiane","wrÄ™czane","wrobione","wróżone","wryte","wrzucane","wrzucone","wrzynane","wsadzane","wsadzone","wskazane","wskazywane","wskórane","wskrzeszane","wskrzeszone","wÅ›lizgiwane","wÅ›lizgniÄ™te","wsÅ‚uchane","wsparte","wspierane","wspiÄ™te","współczute","współodczuwane","współtworzone","współżyte","wspomagane","wspominane","wspomniane","wstÄ…pione","wstawiane","wstawione","wstrzÄ…sane","wstrzÄ…Å›niÄ™te","wstrzelone","wstrzykiwane","wstrzykniÄ™te","wstrzymane","wstrzymywane","wstukane","wsuniÄ™te","wsuwane","wsypane","wszamane","wszczepiane","wszczepione","wszczÄ™te","wszczynane","wszyte","wtajemniczane","wtajemniczone","wtapiane","wtargniÄ™te","wtarte","wtaszczone","wtÅ‚oczone","wtopione","wtrÄ…cone","wtryniane","wtulane","wtulone","wtykane","wwalone","wwiercane","wwiercone","wwiezione","wwożone","wyartykuÅ‚owane","wyautowane","wybaczane","wybaczone","wybadane","wybatożone","wybawione","wybebeszone","wybeÅ‚kotane","wybiczowane","wybielane","wybielone","wybierane","wybijane","wybite","wybÅ‚agane","wyblakniÄ™te","wybrandzlowane","wybrane","wybronione","wybrzydzane","wybuchane","wybuchniÄ™te","wybudowane","wybudzane","wybudzone","wyburzane","wyburzone","wycackane","wycaÅ‚owane","wyceniane","wycenione","wychlane","wychÅ‚ostane","wychodowane","wychowane","wychowywane","wychrobotane","wychwalane","wychwycone","wychylane","wychylone","wyciÄ…gane","wyciÄ…gniÄ™te","wyciekane","wycieniowane","wycierane","wyciÄ™te","wycinane","wyciskane","wyciÅ›niÄ™te","wyciszane","wyciszone","wycofane","wyćwiczone","wycyckane","wycyganione","wyczarowane","wyczarterowane","wyczekane","wyczekiwane","wyczerpane","wyczesane","wyczoÅ‚gane","wyczoÅ‚giwane","wyczute","wyczuwane","wyczyniane","wyczyszczone","wyczytane","wyczytywane","wydalane","wydalone","wydane","wydÄ™bione","wydedukowane","wydelegowane","wydepilowane","wydeptywane","wydÅ‚ubane","wydÅ‚ubywane","wydÅ‚użane","wydÅ‚użone","wydmuchane","wydmuchiwane","wydobyte","wydobywane","wydojone","wydoroÅ›lane","wydostane","wydrane","wydrapane","wydrapywane","wydrążone","wydrukowane","wydukane","wyduszone","wydychane","wydziedziczone","wydzielane","wydzielone","wydzierane","wydzierżawione","wydziobane","wydziwiane","wydzwaniane","wyedukowane","wyedytowane","wyeeliminowane","wyegzekwowane","wyeksmitowane","wyekspediowane","wyeksploatowane","wyeksponowane","wyeksportowane","wyeliminowane","wyemigrowane","wyemitowane","wyewoluowane","wyfruniÄ™te","wygadane","wygadywane","wyganiane","wygarbowane","wygarniane","wygarniÄ™te","wygasane","wygaÅ›niÄ™te","wygaszane","wygaszone","wygenerowane","wygiÄ™te","wyginane","wygÅ‚adzane","wygÅ‚adzone","wygÅ‚aszane","wygÅ‚odzone","wygÅ‚osowane","wygÅ‚oszone","wygłówkowane","wygnane","wygolone","wygonione","wygooglowane","wygospodarowane","wygotowane","wygrane","wygrawerowane","wygrażane","wygrywane","wygryzione","wygrzane","wygrzebane","wygrzebywane","wygrzewane","wygubione","wyhaczone","wyhaftowane","wyhamowane","wyhodowane","wyizolowane","wyjadane","wyjaÅ›niane","wyjaÅ›nione","wyjawiane","wyjawione","wyjedzone","wyjÄ™te","wyjmowane","wykadrowane","wykalibrowane","wykalkulowane","wykaÅ„czane","wykantowane","wykÄ…pane","wykaraskane","wykarczowane","wykarmiane","wykasowane","wykastrowane","wykazane","wykazywane","wykierowane","wykitowane","wykiwane","wykÅ‚adane","wyklarowane","wyklepane","wyklinane","wykłócane","wykluczane","wykluczone","wyklute","wykÅ‚ute","wykminione","wykolejone","wykoÅ‚owane","wykombinowane","wykonane","wykoÅ„czone","wykonywane","wykopane","wykopniÄ™te","wykopywane","wykorkowane","wykorzeniane","wykorzenione","wykorzystane","wykorzystywane","wykoszone","wykpite","wykradane","wykradniÄ™te","wykrÄ™cane","wykrÄ™cone","wykreowane","wykreÅ›lane","wykreÅ›lone","wykrochmalone","wykrojone","wykrwawiane","wykrwawione","wykryte","wykrywane","wykrzesane","wykrztuszone","wykrzyczone","wykrzykiwane","wykrzykniÄ™te","wykrzywiane","wyksztaÅ‚cone","wyksztuszone","wykupione","wykupywane","wykute","wykuwane","wyłączane","wyłączone","wylÄ…dowane","wyÅ‚adowane","wyÅ‚adowywane","wyÅ‚ajane","wyÅ‚amane","wyÅ‚amywane","wyÅ‚aniane","wylansowane","wylane","wyÅ‚apane","wyÅ‚apywane","wyÅ‚awiane","wyleasingowane","wyleczone","wylÄ™gane","wylegimytowane","wylewane","wyÅ‚gane","wylicytowane","wyliczane","wyliczone","wylizane","wylizywane","wylogowane","wyÅ‚onione","wylosowane","wyÅ‚owione","wyÅ‚ożone","wyÅ‚udzane","wyÅ‚udzone","wyÅ‚upane","wyÅ‚uskane","wyÅ‚uskiwane","wyÅ‚uszczone","wyluzowane","wymacane","wymachiwane","wymagane","wymahiwane","wymalowane","wymamrotane","wymanewrowane","wymarzone","wymasowane","wymawiane","wymazane","wymazywane","wymeldowane","wymeldowywane","wymiatane","wymiecione","wymieniane","wymienione","wymierzane","wymieszane","wymigane","wymigiwane","wymijane","wyminiÄ™te","wymkniÄ™te","wymoczone","wymodelowane","wymontowane","wymordowane","wymskniÄ™te","wymuszane","wymyÅ›lane","wymyÅ›lone","wymyte","wynagradzane","wynagrodzone","wynajdowane","wynajdywane","wynajÄ™te","wynajmowane","wynalezione","wynarodowione","wynegocjowane","wyniesione","wynikniÄ™te","wyniszczane","wyniszczone","wyniuchane","wynoszone","wynurzane","wyobrażane","wyobrażone","wyodrÄ™bnione","wyolbrzymiane","wyolbrzymione","wyorbowane","wyosiowane","wyostrzane","wyostrzone","wypaczane","wypakowane","wypakowywane","wypalane","wypalone","wypaÅ‚owane","wyparowane","wyparte","wypasane","wypastowane","wypatroszone","wypatrywane","wypatrzone","wypchane","wypchniÄ™te","wypÄ™dzane","wypÄ™dzlowane","wypeÅ‚niane","wypeÅ‚nione","wypersfadowane","wyperswadowane","wypierane","wypiÄ™te","wypijane","wypinane","wypisane","wypisywane","wypite","wypÅ‚acane","wypÅ‚acone","wypÅ‚akane","wypÅ‚akiwane","wypÅ‚aszczone","wyplatane","wyplÄ…tane","wyplenione","wyplewione","wypÅ‚oszone","wypÅ‚ukane","wypÅ‚ukiwane","wyplute","wypluwane","wypocone","wypoczÄ™te","wypolerowane","wypominane","wypomniane","wypompowane","wypompowywane","wyposażone","wypowiadane","wypowiedziane","wypoziomowane","wypożyczane","wypracowane","wypracowywane","wyprane","wyprasowane","wypraszane","wyprawiane","wyprawione","wypróbowane","wyprodukowane","wyprojektowane","wypromieniowane","wypromowane","wyprostowane","wyprostowywane","wyproszone","wyprowadzane","wyprowadzone","wypróżniane","wypróżnione","wyprute","wypruwane","wyprzedane","wyprzedawane","wyprzedzane","wyprzedzone","wyprzÄ™gane","wypstrykane","wypucowane","wypuszczane","wypuszczone","wypychane","wypytane","wypytywane","wyrÄ…bane","wyrabiane","wyrÄ…bywane","wyratowane","wyrażane","wyrażone","wyrecytowane","wyrÄ™czane","wyrÄ™czone","wyregulowane","wyrejestrowane","wyremontowane","wyreżyserowane","wyrobione","wyrolowane","wyroÅ›niÄ™te","wyrównane","wyrównywane","wyróżniane","wyróżnione","wyrugowane","wyruszane","wyrwane","wyrypane","wyrysowane","wyryte","wyrywane","wyrzÄ…dzone","wyrzeźbione","wyrżniÄ™te","wyrzucane","wyrzucone","wyrzygane","wyrzynane","wyrzywane","wysÄ…czone","wysadzane","wysadzone","wyschniÄ™te","wyÅ›ciskane","wyselekcjonowane","wysÄ™pione","wysiadywane","wysiedzone","wysilane","wysilone","wyskakiwane","wyskalowane","wyskoczone","wyskrobane","wyskubywane","wysÅ‚ane","wyÅ›ledzone","wyÅ›lizgiwane","wyÅ›lizgniÄ™te","wysÅ‚owione","wysÅ‚uchane","wysÅ‚uchiwane","wysmagane","wysmarkane","wysmarowane","wysmażane","wysmażone","wyÅ›miane","wyÅ›miewane","wysmoÅ‚owane","wysmyrane","wyÅ›nione","wysnute","wysnuwane","wysondowane","wyspecjalizowane","wyÅ›piewane","wyÅ›piewywane","wyspowiadane","wysprzÄ…tane","wysprzedane","wyssane","wystartowane","wystawione","wysterelizowane","wysterylizowane","wystosowane","wystosowywane","wystraszone","wystrojone","wystrugane","wystrychniÄ™te","wystrzegane","wystrzelane","wystrzeliwane","wystrzelone","wystudzone","wystukane","wystukiwane","wystygniÄ™te","wysuniÄ™te","wysuszane","wysuwane","wyswatane","wyÅ›wiadczane","wyÅ›wiadczone","wyÅ›wietlane","wyÅ›wietlone","wyswobodzone","wysyÅ‚ane","wysypane","wysypywane","wysysane","wyszabrowane","wyszalane","wyszarpane","wyszarpniÄ™te","wyszasowane","wyszczotkowane","wyszczuplone","wyszeptane","wyszkolone","wyszlifowane","wyszorowane","wyszperane","wyszukane","wyszukiwane","wyszumione","wyszykowane","wyszyte","wytapetowane","wytargane","wytargowane","wytarte","wytarzane","wytaszczone","wytatuowane","wytchniÄ™te","wytÄ™pione","wytkniÄ™te","wytÅ‚oczone","wytÅ‚umaczone","wytÅ‚umione","wytoczone","wytrÄ…bione","wytrÄ…cane","wytrÄ…cone","wytransmitowane","wytransportowane","wytrenowane","wytresowane","wytriangulowane","wytropione","wytrute","wytrzÄ…sane","wytrzasniÄ™te","wytrzÄ…Å›niÄ™te","wytrzebione","wytrzepane","wytrzeszczane","wytrzeźwiane","wytrzymane","wytrzymywane","wytwarzane","wytworzone","wytyczone","wytykane","wytypowane","wyuczone","wywabiane","wywabione","wywÄ…chane","wywalane","wywalczone","wywalone","wywarte","wywarzane","wyważane","wyważone","wywÄ™szane","wywężykowane","wywiane","wywiÄ…zane","wywiÄ…zywane","wywierane","wywiercone","wywieszane","wywieszone","wywietrzone","wywiezione","wywijane","wywindowane","wywiniÄ™te","wywÅ‚aszczone","wywlekane","wywnÄ™trznione","wywnioskowane","wywodzone","wywolane","wywoÅ‚ywane","wywoskowane","wywożone","wywracane","wywrócone","wywróżone","wywyższane","wyżalone","wyzbyte","wyzdrowione","wyżebrane","wyżerane","wyzerowane","wyzioniÄ™te","wyznaczane","wyznaczone","wyznane","wyznawane","wyzwalane","wyzwane","wyzwolone","wyzygzakowane","wyżynane","wyzyskane","wyzyskiwane","wyżyte","wyzywane","wyżywane","wyżywione","wzbijane","wzbite","wzbogacane","wzbogacone","wzbraniane","wzbudzane","wzbudzone","wzburzane","wzburzone","wżenione","wziÄ™te","wzmacnione","wzmagane","wzmocnione","wznawiane","wzniecane","wzniecione","wzniesiÄ™te","wznoszone","wznowione","wzorowane","wzroÅ›niÄ™te","wzruszone","wzwyżane","wzywane","zaabordowane","zaadaptowane","zaadoptowane","zaadresowane","zaakcentowane","zaakceptowane","zaaklimatyzowane","zaalarmowane","zaanektowane","zaangażowane","zaanonsowane","zaapelowane","zaaplikowane","zaaportowane","zaaprobowane","zaaranżowane","zaaresztowane","zaatakowane","zabaczone","zabalowane","zabandażowane","zabarwione","zabarykadowane","zabawiane","zabawione","zabepieczane","zabetonowane","zabezpieczone","zabierane","zabite","zabłądzone","zablefowane","zabÅ‚ocone","zablokowane","zabraniane","zabrane","zabrniÄ™te","zabronione","zabrudzone","zabudowane","zabukowane","zabulone","zaburzone","zabutelkowane","zacementowane","zacerowane","zachciane","zachÄ™cane","zachÄ™cone","zachlapane","zachodzone","zachomikowane","zachorowane","zachowane","zachowywane","zachwalane","zachwalone","zachwiane","zachwycone","zaciÄ…gane","zaciÄ…gniÄ™te","zaciążone","zaciekawione","zaciemniane","zaciemnione","zacierane","zacieÅ›nione","zaciÄ™te","zacinane","zaciskane","zaciÅ›niÄ™te","zaćmione","zacumowane","zacytowane","zaczadzone","zaczarowane","Zaczepiane","zaczepione","zaczerpane","zaczesane","zaczÄ™te","zaczoÅ‚gane","zaczynane","zadarte","zadawalane","zadawane","zadbane","zadebiutowane","zadedykowane","zadeklamowane","zadeklarowane","zademonstrowane","zadenucjowane","zadepeszowane","zadeptane","zadeptywane","zadÄ™te","zadÅ‚awione","żądlone","zadÅ‚użane","zadÅ‚użone","zadokowane","zadomowione","zadowalane","zadrapane","zadraÅ›niÄ™te","zadrÄ™czane","zadrÄ™czone","zadrutowane","zadurzane","zadurzone","zaduszone","zadymione","zadźgane","zadziobane","zadziwiane","zadziwione","zafakturowane","zafaÅ‚szowane","zafarbowane","zafiksowane","zafundowane","zagadane","zagadniÄ™te","zagadywane","zagajone","zaganiane","zagapione","zagarażowane","zagarniane","zagarniÄ™te","zagaszone","zagazowane","zagÄ™szczone","zagiÄ™te","zaginane","zaginiÄ™te","zagłębiane","zagłębione","zagÅ‚odzone","zagÅ‚uszane","zagÅ‚uszone","zagmatwane","zagnane","zagnieżdżone","zagojone","zagonione","zagospodarowane","zagotowane","zagrabione","zagradzane","zagrażane","zagrodzone","zagrywane","zagryzane","zagryzione","zagrzane","zagrzebane","zagrzewane","zagubione","zagwarantowane","zahaczone","zahamowane","zahandlowane","zaharowane","zahartowane","zahipnotyzowane","zaholowane","zaimitowane","zaimplantowane","zaimplementowane","zaimprowizowane","zainaugurowane","zainfekowane","zainicjowane","zainkasowane","zainscenizowane","zainspirowane","zainstalowane","zainteresowane","zaintrygowane","zaintubowane","zainwestowane","zaizolowane","zajadane","zajane","zajarane","zajechane","zajÄ™te","zajmowane","zakablowane","zakamuflowane","zakasane","zakasowane","zakÄ…szane","zakatalogowane","zakatowane","zakatrupione","zakazane","zakażane","zakazywane","zakiszone","zakÅ‚adane","zaklasyfikowane","zaklejane","zaklejone","zaklepane","zaklepywane","zaklinane","zaklinowane","zakłócane","zakłócone","zaklopotane","zakÅ‚ute","zakneblowane","zakodowane","zakolczykowane","zakolorowane","zakoÅ‚ysane","zakomunikowane","zakoÅ„czone","zakonserwowane","zakopane","zakopywane","zakorzeniane","zakorzenione","zakoszone","zakosztowane","zakotwiczane","zakotwiczone","zakpione","zakradane","zakrÄ™cane","zakrÄ™cone","zakreÅ›lane","zakreÅ›lone","zakrwawione","zakryte","zakrywane","zakrzyczane","zakrzykniÄ™te","zakrzywiane","zakrzywione","zaksiÄ™gowane","zaktualizowane","zaktywizowane","zaktywowane","zakumane","zakupione","zakurzone","zakute","zakuwane","zakwaterowane","zakwestionowae","zakwitniÄ™te","załączone","zaÅ‚adowane","zaÅ‚agodzone","zalamane","zalaminowane","zaÅ‚amywane","zalane","zaÅ‚apane","zaÅ‚atane","zaÅ‚atwiane","zaÅ‚atwione","zalatywane","zalecane","zalecone","zaleczone","zalegalizowane","zalegane","zalepiane","zalepione","zalewane","zaliczane","zaliczone","zaÅ‚kane","zalogowane","żaÅ‚owane","zaÅ‚ożone","zaludnione","zamacane","zamachniÄ™te","zamÄ…cone","zamalowane","zamanewrowane","zamanifestowane","zamarkowane","zamartwiane","zamarynowane","zamarzane","zamarzniÄ™te","zamaskowane","zamawiane","zamazane","zamazywane","zamÄ™czane","zamÄ™czone","zameldowane","zamelinowane","zamerykanizowane","zamiatane","zamieniane","zamienione","zamieszane","zamieszczane","zamieszczone","zamieszkane","zamieszkiwane","zaminowane","zamkniÄ™te","zamocowane","zamoczone","zamontowane","zamordowane","zamortyzowane","zamotane","zamówione","zamrażane","zamroczone","zamrożone","zamulane","zamurowane","zamydlone","zamykane","zanalizowane","zanegowane","zaniechane","zanieczyszczane","zanieczyszczone","zaniedbane","zaniedbywane","zaniepokojone","zaniesione","zanihilowane","zanikane","zanikniÄ™te","zaniżane","zaniżone","zanoszone","zanotowane","zanucone","zanudzane","zanudzone","zanurzane","zanurzone","zanużone","zaobaczone","zaobserwowane","zaoferowane","zaofiarowane","zaogniane","zaognione","zaokrÄ…glane","zaokrÄ…glone","zaokrÄ™towane","zaopatrywane","zaopatrzone","zaopiekowane","zaorane","zaostrzane","zaostrzone","zaoszczÄ™dzone","zapadane","zapakowane","zapalane","zapalone","zapamiÄ™tane","zapamiÄ™tywane","zapanowane","zaparkowane","zaparowywane","zaparzane","zaparzone","zapaskudzone","zapauzowane","zapchane","zapÄ™dzane","zapeÅ‚niane","zapeÅ‚nione","zaperfumowane","zapeszane","zapewniane","zapewnione","zapieczÄ™towane","zapierane","zapiÄ™te","zapijane","zapinane","zapisane","zapisuwane","zapite","zapÅ‚acone","zapÅ‚adniane","zaplamione","zaplanowane","zaplÄ…tane","zapÅ‚odnione","zaplombowane","zapobiegane","zapodane","zapodawane","zapodziane","zapokojone","zapolowane","zapominane","zapomniane","zapowiadane","zapowiedziane","zapoznane","zapoznawane","zapożyczone","zapracowywane","zaprane","zaprasowywane","zapraszane","zaprawione","zaprenumerowane","zaprezentowane","Zaprogramowane","zaprojektowane","zaproponowane","zaproszone","zaprotokoÅ‚owane","zaprowadzane","zaprowadzone","zaprzÄ…tane","zaprzeczane","zaprzeczone","zaprzedane","zaprzedawane","zaprzÄ™gane","zaprzepaszczane","zaprzestane","zaprzestawane","zaprzyjaźnione","zapudÅ‚owane","zapunktowane","zapuszczane","zapuszczone","zapuszkowane","zapychane","zapylane","zapylone","zapytane","zarabiane","zaranżowane","zarażane","zarażone","zarecytowane","zarÄ™czane","zarÄ™czone","zarejestrowane","zareklamowane","zarekomendowane","zarekomondowane","zarekwirowane","zarezerwowane","zarobione","żartowane","zarwane","zaryglowane","zarymowane","zarysowane","zarywane","zaryzykowane","zarzÄ…dzane","zarżniÄ™te","zarzucane","zarzynane","zasadzone","zaÅ›cielone","zasegurowane","zaserwowane","zasiadane","zasiane","zasiedlone","zasiÄ™gane","zasiÄ™gniÄ™te","zasiewane","zasilane","zasilone","zaskakiwane","zaskarbione","zaskoczone","zaskrobane","zasÅ‚aniane","zaÅ›lepiane","zaÅ›lepione","zasÅ‚odzone","zasÅ‚onione","zasÅ‚użone","zasmakowane","zaÅ›miecane","zaÅ›miecone","zasmradzane","zasmrodzone","zasmucane","zasmucone","zasolone","zaspakajane","zaÅ›piewane","zaspokajane","zaspokojone","zasponsorowane","zaÅ›rubowywane","zassane","zastane","zastÄ…pione","zastawiane","zastawione","zastÄ™powane","zastopowane","zastosowane","zastraszane","zastraszone","zastrzelone","zasugerowane","zasuniÄ™te","zasuwane","zaÅ›wiadczone","zaÅ›wiecone","zaÅ›wionione","zasyfione","zasygnalizowane","zasymilowane","zasymulowane","zasypane","zasypywane","zasysane","zaszachowane","zaszantażowane","zaszargane","zaszczepiane","zaszczepione","zaszczute","zaszczycane","zaszczycone","zaszeptane","zaszeregowane","zaszlachtowane","zasznurowane","zaszpachlowane","zasztyletowane","zaszufladkowane","zaszyfrowane","zaszyte","zaszywane","zataczane","zatajane","zatajone","zatamowane","zatankowane","zatapiane","zatargane","zatarte","zatelegrafowane","zatemperowane","zatÄ™sknione","zatkane","zatkniÄ™te","zatoczone","zatoniÄ™te","zatopione","zatracane","zatracone","zatriumfowane","zatrudniane","zatrudnione","zatrute","zatruwane","zatrzaskiwane","zatrzaÅ›niÄ™te","zatrzÄ…Å›niÄ™te","zatrzymane","zatrzymywane","zatuszowane","zatwierdzane","zatwierdzone","zatykane","zatynkowane","zatytuÅ‚owane","zauploadowane","zauroczone","zautomatyzowane","zauważane","zauważone","zawadzane","zawalane","zawalczone","zawalone","zawarte","zaważone","zawdziÄ™czane","zawetowane","zawężone","zawiadamiane","zawiadomione","zawiÄ…zane","zawiÄ…zywane","zawiedzone","zawierane","zawierzone","zawieszane","zawieszone","zawiezione","zawijane","zawiniÄ™te","zawinione","zawiÅ›niÄ™te","zawitane","zawÅ‚adniÄ™te","zawÅ‚aszczone","zawodzone","zawojowane","zawoÅ‚ane","zawoskowane","zawożone","zawracane","zawrócone","zawstydzane","zażądane","zażartowane","zazdroszczone","zażegnane","zażenowane","zaznaczane","zaznajomione","zaznane","zaznawane","zażyczone","zażyte","zażywane","zbaczane","zbadane","zbagatelizowane","zbajerowane","zbaÅ‚amucone","zbalansowane","zbalsamowane","zbankrutowane","zbawiane","zbawione","zbesztane","zbezczeszczone","zbierane","zbijane","zbite","zbliżone","zbluzgane","zbojkotowane","zbrojone","zbrukane","zbszczecone","zbudowane","zbudzone","zbuntowane","zburzone","zbyte","zbywane","zchwytane","zciÄ™te","zciszone","zdane","zdarte","zdeaktywowane","zdecydowane","zdefiniowane","zdeflorowane","zdegradowane","zdejmowane","zdeklarowane","zdekodowane","zdekompresowane","zdekoncentrowane","zdekonstruowane","zdelegalizowane","zdemaskowane","zdementowane","zdemolowane","zdemontowane","zdemoralizowane","zdenerwowane","zdeponowane","zdeprymowane","zdeptane","zderzane","zderzone","zdestabilizowane","Zdetonowane","zdetronizowane","zdewastowane","zdewaulowane","zdezerterowane","zdezintegrowane","zdezorientowane","zdezynfektowane","zdiagnozowane","zdjÄ™te","zdÅ‚awione","zdmuchiwane","zdmuchniÄ™te","zdobyte","zdobywane","zdoÅ‚owane","zdominowane","zdopingowane","zdrabniane","zdradzane","zdradzone","zdrapane","zdrapywane","zdrutowane","zdruzgotane","zduplikowane","zduszone","zdwojone","zdyscyplinowane","zdyskredytowane","zdyskwalifikowane","zdystansowane","zdzielone","zdzierane","zdzierżone","zdziesiÄ…tkowane","Zdzwonione","zebrane","zechciane","zedytowane","żegnane","żenione","zepchniÄ™te","zepsute","żerowane","zerwane","zerżniÄ™te","zeskakiwane","zeskanowane","zeskrobywane","zesÅ‚ane","zeÅ›lizgiwane","zeÅ›lizgniÄ™te","zesmolone","zespawiane","zespolone","zessane","zestawiane","zestawione","zestresowane","zestrzeliwane","zestrzelone","zeswatane","zeszklone","zeszlifowane","zetkniÄ™te","zezÅ‚oszczone","zeznane","zeznawane","zezwalane","zezwolone","zfinansowane","zgadane","zgadywane","zgajane","zganione","zgarniÄ™te","zgaÅ›niÄ™te","zgaszone","zgiÄ™te","zginane","zgÅ‚adzone","zgÅ‚aszane","zgłębiane","zgłębione","zgÅ‚oÅ›nione","zgÅ‚oszone","zgÅ‚uszone","zgniatane","zgniecione","zgnite","zgnojone","zgodzone","zgolone","zgonione","zgotowane","zgrabione","zgrillowane","zgromadzane","zgromadzone","zgrupowane","zgrzeszone","zgrzytane","zgubione","zgwaÅ‚cone","zhackowane","zhakowane","zhaÅ„bione","zhandlowane","zharmonizowane","zidentyfikowane","ziewane","zignorowane","zilustrowane","zinfiltrowane","zintegrowane","zintensyfikowane","zinterpretowane","zinwentaryzowane","zirytowane","zjadane","zjawiane","zjednane","zjednoczone","zjedzone","zjeżdżone","zkontaktowane","zkserowane","złączone","zÅ‚agodzone","zÅ‚ajane","zÅ‚amane","zlane","zÅ‚apane","zlecane","zlecone","zlekceważone","zlepiane","zlepione","zlewane","zlicytowane","zliczane","zliczone","zlikwidowane","zlinczowane","zlitowane","zlizane","zlizywane","zÅ‚oite","zlokalizowane","zÅ‚omowane","żłopane","zÅ‚owione","zÅ‚ożone","zÅ‚upione","zÅ‚uszczane","zluzowane","zmacane","zmÄ…cone","zmagane","zmagazynowane","zmajstrowane","zmaksylizowane","zmanipulowane","zmarnowane","zmartwychwstane","zmarzniÄ™te","zmasakrowane","zmaterializowane","zmawiane","zmazane","zmazywane","zmbobardowane","zmiatane","zmiażdżone","zmiÄ™kczone","zmielone","zmieniane","zmienione","zmierzane","zmierzone","zmierzwione","zmieszane","zmieszczone","zmiksowane","zminiaturyzowane","zminimalizowane","zmniejszane","zmniejszone","zmobilizowane","zmoczone","zmodernizowane","zmodyfikowane","zmokniÄ™te","zmonopolizowane","zmontowane","zmostkowane","zmotywowane","zmówione","zmrożone","zmrużone","zmumifikowane","zmuszane","zmuszone","zmutowane","zmyÅ›lane","zmyte","zmywane","znacjonalizowane","znajdowane","znajdywane","znakowane","znalezione","znane","znÄ™cane","zneutralizowane","zniechÄ™cone","znieczulone","znieksztaÅ‚cane","znieksztaÅ‚cone","znienawidzone","znieprawione","zniesione","zniesÅ‚awiane","zniesÅ‚awione","zniewalane","znieważane","znieważone","zniewolone","zniszczone","zniweczone","zniwelowane","zniżane","zniżone","znokautowane","znormalnione","znoszone","znudzone","zobaczone","zobowiÄ…zane","zobrazowane","zogniskowane","żonglowane","zoomowane","zoperowane","zoptymalizowane","zorbite","zorganizowane","zorientowane","zostawiane","zostawione","zpÅ‚acone","zprowokowane","zrabowane","zrachowane","zracjonalizowane","zranione","zraportowane","zrażane","zrażone","zrealizowane","zrecenzowane","zredagowane","zredukowane","zreferowane","zreformowane","zrefowane","zrefundowane","zregenerowane","zrehabilitowane","zreinkarnowane","zreintegrowane","zrekonfigurowane","zrekonstruowane","zrekrutowane","zrekrystalizowane","zrelacjonowane","zrelaksowane","zremiksowane","zremisowane","zreorganizowane","zreperowane","zreplikowane","zresetowane","zresocjalizowane","zrestartowane","zrestrukturyzowane","zrewanżowane","zrewidowane","zrewolucjonizowane","zrezygnowane","zrobione","zrolowane","zroszone","zrównane","zrównoważone","zrównywane","zróżnicowane","zrozumiane","zrugane","zruinowane","zrujnowane","zrymowane","zrywane","zrzÄ™dzone","zrzeszone","zrzucane","zrzucone","zsumowane","zsuniÄ™te","zsuwane","zsynchronizowane","zsyntetyzowane","zsypywane","zszargane","zszokowane","zszyte","zszywane","ztarte","żute","zutylizowane","zużyte","zużywane","zwabiane","zwabione","zwalane","zwalczone","zwalniane","zwalone","zwane","zwaporyzowane","zwÄ…tpione","zważane","zważone","zwÄ™dzone","zwerbalizowane","zwerbowane","zweryfikowane","zwÄ™szone","zwężone","zwiastowane","zwiÄ…zane","zwiÄ…zywane","zwichniÄ™te","zwiedzane","zwiedzone","zwiÄ™kszone","zwieÅ„czone","zwierzane","zwieszane","zwieszone","zwietrzone","zwijane","zwilżone","zwiniÄ™te","zwizualizowane","zwlekane","zwodowane","zwodzone","zwoÅ‚ane","zwolnione","zwoÅ‚ywane","zwożone","zwracane","zwrócone","zwyciężane","zwymiotowane","życzone","żygane","zygzakowane","zyskane","zyskiwane","żyte","zżarte","zżerane","zżynane","zżyte","bici","brniÄ™ci","capniÄ™ci","chlapniÄ™ci","chuci","ciachniÄ™ci","ciÄ…gniÄ™ci","ciÄ™ci","ciÅ›niÄ™ci","cmokniÄ™ci","cofniÄ™ci","czuci","czyci","darci","dmuchniÄ™ci","dobici","dobyci","dociÄ…gniÄ™ci","dociÄ™ci","dociÅ›niÄ™ci","doglÄ…dniÄ™ci","domkniÄ™ci","domyci","dopadniÄ™ci","dopchniÄ™ci","dopiÄ™ci","dopici","dopÅ‚yniÄ™ci","doÅ›cigniÄ™ci","dosiÄ™gniÄ™ci","dosuniÄ™ci","doszyci","dotkniÄ™ci","dożyci","drapniÄ™ci","draÅ›niÄ™ci","drgniÄ™ci","dźgniÄ™ci","dziabniÄ™ci","dźwigniÄ™ci","giÄ™ci","gnici","golniÄ™ci","gruchniÄ™ci","gwizdniÄ™ci","hajtniÄ™ci","hukniÄ™ci","kantowanci","kiwniÄ™ci","klapniÄ™ci","klepniÄ™ci","klikniÄ™ci","kÅ‚uci","knuci","kojfniÄ™ci","kopniÄ™ci","kpici","kryci","krzepniÄ™ci","krzykniÄ™ci","kuci","lizniÄ™ci","Å‚ykniÄ™ci","machniÄ™ci","marzniÄ™ci","mazniÄ™ci","miniÄ™ci","myci","nabici","nabyci","naciÄ…gniÄ™ci","naciÄ™ci","naciÅ›niÄ™ci","nadciÄ…gniÄ™ci","nadciÄ™ci","nadszarpniÄ™ci","nadużyci","nagiÄ™ci","najÄ™ci","nakÅ‚uci","nakryci","napadniÄ™ci","napiÄ™ci","napluci","napoczÄ™ci","napsuci","nasuniÄ™ci","naszyci","natarci","natchniÄ™ci","natkniÄ™ci","natrzÄ…sniÄ™ci","nawiniÄ™ci","obciÄ…gniÄ™ci","obciÄ™ci","obdarci","obici","objÄ™ci","obmyci","obsuniÄ™ci","obtarci","obwiniÄ™ci","obyci","ochÅ‚oniÄ™ci","ockniÄ™ci","ocuci","odarci","odbici","odbyci","odciÄ…gniÄ™ci","odciÄ™ci","odcisniÄ™ci","odczuci","odepchniÄ™ci","odetniÄ™ci","odgadniÄ™ci","odgarniÄ™ci","odgiÄ™ci","odjÄ™ci","odkryci","odkuci","odparci","odpiÄ™ci","odpÅ‚yniÄ™ci","odpruci","odroÅ›niÄ™ci","odsÅ‚oniÄ™ci","odsuniÄ™ci","odtruci","odwiniÄ™ci","odżyci","ogarniÄ™ci","okryci","okrzykniÄ™ci","olÅ›niÄ™ci","ominiÄ™ci","opadniÄ™ci","oparci","opchniÄ™ci","opici","opluci","orżniÄ™ci","osiÄ…gniÄ™ci","oÅ›lepniÄ™ci","ostrzelici","osuniÄ™ci","otarci","otruci","otrzÄ…Å›niÄ™ci","owiniÄ™ci","ożyci","pacnÄ…ci","palniÄ™ci","parci","pchniÄ™ci","pÄ™kniÄ™ci","piÄ™ci","pici","pluci","pobici","pochÅ‚oniÄ™ci","pociÄ…gniÄ™ci","pociÄ™ci","poczÄ™ci","poczuci","podarci","podbici","podciÄ…gniÄ™ci","podciÄ™ci","podjÄ™ci","podkradniÄ™ci","podkuci","podmyci","podnajÄ™ci","podpadniÄ™ci","podparci","podpiÄ™ci","podpÅ‚yniÄ™ci","podsuniÄ™ci","podszyci","podtarci","podwiniÄ™ci","podźwigniÄ™ci","pojÄ™ci","pojmiÄ™ci","pokÅ‚uci","pokryci","poÅ‚kniÄ™ci","pominiÄ™ci","pomkniÄ™ci","poparci","popchniÄ™ci","popici","popsuci","posuniÄ™ci","poszczuci","potarci","potkniÄ™ci","potruci","potrzÄ…sniÄ™ci","potrzÄ…Å›niÄ™ci","powici","powÅ›ciÄ…gniÄ™ci","powziÄ™ci","pożarci","pozbyci","pożuci","pożyci","pruci","pryÅ›niÄ™ci","przebiegniÄ™ci","przebici","przebyci","przeciÄ…gniÄ™ci","przeciÄ™ci","przeciÅ›niÄ™ci","przeczuci","przedarci","przedsiewziÄ™ci","przegiÄ™ci","przeglÄ…dniÄ™ci","przejÄ™ci","przeklÄ™ci","przeklniÄ™ci","przekÅ‚uci","przekuci","przeÅ‚kniÄ™ci","przeÅ‚ykniÄ™ci","przeminiÄ™ci","przemkniÄ™ci","przemyci","przenikniÄ™ci","przepchniÄ™ci","przepici","przepÅ‚yniÄ™ci","przeroÅ›niÄ™ci","przeÅ›cigniÄ™ci","przeÅ›lizgniÄ™ci","przesÅ‚oniÄ™ci","przesuniÄ™ci","przeszyci","przetarci","przetrzÄ…Å›niÄ™ci","przewiniÄ™ci","przeżarci","przeżuci","przeżyci","przybici","przyciÄ…gniÄ™ci","przyciÄ™ci","przyciÅ›niÄ™ci","przydepniÄ™ci","przygarniÄ™ci","przyjÄ™ci","przykryci","przykuci","przymkniÄ™ci","przypadniÄ™ci","przyparci","przypiÄ™ci","przypÅ‚yniÄ™ci","przysiÄ…gniÄ™ci","przysuniÄ™ci","przyszyci","przytarci","przytrzasniÄ™ci","przywarci","pstrykniÄ™ci","psuci","puchniÄ™ci","pukniÄ™ci","rozbici","rozbÅ‚yÅ›niÄ™ci","rozciÄ…gniÄ™ci","rozciÄ™ci","rozgarniÄ™ci","rozgiÄ™ci","rozkuci","rozkwitniÄ™ci","rozminiÄ™ci","rozmyci","rozpiÄ™ci","rozpÅ‚yniÄ™ci","rozpoczÄ™ci","rozpruci","rozroÅ›niÄ™ci","rozstrzygniÄ™ci","rozsuniÄ™ci","roztarci","rozwarci","rozwiniÄ™ci","runiÄ™ci","ryci","rżniÄ™ci","Å›ciÄ…gniÄ™ci","Å›ciÄ™ci","Å›ciÅ›niÄ™ci","skrobniÄ™ci","skryci","skrzepniÄ™ci","skrzyci","skubniÄ™ci","skuci","smuci","snuci","spiÄ™ci","spici","spÅ‚oniÄ™ci","spoczÄ™ci","spożyci","sprzÄ…tniÄ™ci","stniÄ™ci","struci","strzÄ…Å›niÄ™ci","strzepniÄ™ci","stukniÄ™ci","suniÄ™ci","sypniÄ™ci","szarpniÄ™ci","szczuci","szepniÄ™ci","sztachniÄ™ci","szturchniÄ™ci","szyci","targniÄ™ci","tarci","tchniÄ™ci","tkniÄ™ci","truci","tryÅ›niÄ™ci","trzasniÄ™ci","trzepniÄ™ci","ubici","uciÄ…gniÄ™ci","uciÄ™ci","uciÅ›niÄ™ci","uczuci","udźwigniÄ™ci","ugiÄ™ci","ugrzÄ™zniÄ™ci","uiÅ›cici","ujÄ™ci","ukÅ‚uci","uknuci","ukryci","ukuci","umkniÄ™ci","umyci","unikniÄ™ci","uparci","upchniÄ™ci","upiÄ™ci","upici","upÅ‚yniÄ™ci","uprzÄ…tniÄ™ci","uroÅ›niÄ™ci","urżniÄ™ci","uschniÄ™ci","uÅ›ciÅ›niÄ™ci","usuniÄ™ci","uszczypniÄ™ci","uszyci","utarci","utkniÄ™ci","uwiniÄ™ci","uwici","użyci","walniÄ™ci","wbici","wchÅ‚oniÄ™ci","wciÄ…gniÄ™ci","wciÄ™ci","wciÅ›niÄ™ci","wczuci","wdarci","wdepniÄ™ci","wepchniÄ™ci","wetkniÄ™ci","wici","wkÅ‚uci","wkuci","wnikniÄ™ci","wpiÄ™ci","wryci","wÅ›lizgniÄ™ci","wsparci","wspiÄ™ci","współczuci","współżyci","wstrzÄ…Å›niÄ™ci","wstrzykniÄ™ci","wsuniÄ™ci","wszczÄ™ci","wszyci","wtargniÄ™ci","wtarci","wybici","wyblakniÄ™ci","wybuchniÄ™ci","wyciÄ…gniÄ™ci","wyciÄ™ci","wyciÅ›niÄ™ci","wyczuci","wydobyci","wyfruniÄ™ci","wygarniÄ™ci","wygaÅ›niÄ™ci","wygiÄ™ci","wyjÄ™ci","wykluci","wykÅ‚uci","wykopniÄ™ci","wykpici","wykradniÄ™ci","wykryci","wykrzykniÄ™ci","wykuci","wyminiÄ™ci","wymkniÄ™ci","wymskniÄ™ci","wymyci","wynajÄ™ci","wynikniÄ™ci","wyparci","wypchniÄ™ci","wypiÄ™ci","wypici","wypluci","wypoczÄ™ci","wypruci","wyroÅ›niÄ™ci","wyryci","wyrżniÄ™ci","wyschniÄ™ci","wyÅ›lizgniÄ™ci","wysnuci","wystrychniÄ™ci","wystygniÄ™ci","wysuniÄ™ci","wyszarpniÄ™ci","wyszyci","wytarci","wytchniÄ™ci","wytkniÄ™ci","wytruci","wytrzasniÄ™ci","wytrzÄ…Å›niÄ™ci","wywarci","wywiniÄ™ci","wyzbyci","wyzioniÄ™ci","wyżyci","wzbici","wziÄ™ci","wzniesiÄ™ci","wzroÅ›niÄ™ci","zabici","zabrniÄ™ci","zaciÄ…gniÄ™ci","zaciÄ™ci","zaciÅ›niÄ™ci","zaczÄ™ci","zadarci","zadÄ™ci","zadraÅ›niÄ™ci","zagadniÄ™ci","zagarniÄ™ci","zagiÄ™ci","zaginiÄ™ci","zajÄ™ci","zakÅ‚uci","zakryci","zakrzykniÄ™ci","zakuci","zakwitniÄ™ci","zamachniÄ™ci","zamarzniÄ™ci","zamkniÄ™ci","zanikniÄ™ci","zapiÄ™ci","zapici","zarżniÄ™ci","zasiÄ™gniÄ™ci","zasuniÄ™ci","zaszczuci","zaszyci","zatarci","zatkniÄ™ci","zatoniÄ™ci","zatruci","zatrzaÅ›niÄ™ci","zatrzÄ…Å›niÄ™ci","zawarci","zawiniÄ™ci","zawiÅ›niÄ™ci","zawÅ‚adniÄ™ci","zażyci","zbici","zbyci","zciÄ™ci","zdarci","zdjÄ™ci","zdmuchniÄ™ci","zdobyci","zepchniÄ™ci","zepsuci","zerżniÄ™ci","zeÅ›lizgniÄ™ci","zetkniÄ™ci","zgarniÄ™ci","zgaÅ›niÄ™ci","zgiÄ™ci","zgnici","zÅ‚oici","zmarzniÄ™ci","zmokniÄ™ci","zmyci","zorbici","zsuniÄ™ci","zszyci","ztarci","żuci","zużyci","zwichniÄ™ci","zwiniÄ™ci","życi","zżarci","zżyci","abdykowani","absorbowani","adaptowani","administrowani","adoptowani","adorowani","adresowani","afiszowani","agitowani","akcentowani","akceptowani","aklimatyzowani","akompaniowani","aktualizowani","aktywowani","akumulowani","alaromowani","alienowani","amerykanizowani","amortyzowani","amputowani","analizowani","angażowani","anihilowani","animowani","anonsowani","antropomorfizowani","antydatowani","anulowani","apelowani","aportowani","aranżowani","archiwizowani","aresztowani","argumentowani","artykuÅ‚owani","ascendowani","asekurowani","asymilowani","asystowani","atakowani","autoryzowani","awanturowani","babrani","baczeni","badani","bagatelizowani","bajerowani","baÅ‚amuceni","balangowani","balansowani","banalizowani","bandażowani","bankrutowani","baraszkowani","barwieni","bawieni","bazgrani","bazowani","bÄ™bnieni","beÅ‚kotani","besztani","biczowani","bÅ‚agani","bÅ‚aznowani","blefowani","bÅ‚ogosÅ‚awieni","blokowani","bluzgani","bÅ‚yskani","boczeni","bogaceni","bojkotowani","boksowani","bombardowani","bopowani","borowani","brandzlowani","brani","brasowani","bratani","brodzeni","bronieni","brudzeni","brylowani","budowani","budzeni","bujani","buleni","bulwersowani","bumelowani","burzeni","butelkowani","bywani","cackani","caÅ‚owani","cechowani","celebrowani","celowani","cenieni","cenzurowani","chciani","chlani","chlapani","chlastani","chÅ‚odzeni","chlostani","chlubieni","chodowani","chomikowani","chorowani","chowani","chronieni","chrupani","chrzczeni","chwaleni","chwyceni","chwytani","chybotani","chyleni","ciÄ…gani","ciemiężeni","cierpiani","cieszeni","ciskani","ciuÅ‚ani","cmokani","cofani","ćpani","cuceni","cudzoÅ‚ożeni","cumowani","ćwiartowani","ćwiczeni","cykani","cytowani","czajeni","czarowani","czczeni","czepiani","czepieni","czerpani","czesani","czÄ™stowani","czochrani","czoÅ‚gani","czytani","darowani","darzeni","datowani","dawani","dbani","deaktywowani","debatowani","dedukowani","dedykowani","defibrylowani","defilowani","definiowani","defraudowani","degradowani","degustowani","deklamowani","deklarowani","dekodowani","dekompresowani","dekorowani","dekretowani","delegowani","delektowani","deliberowani","demaskowani","dementowani","demolowani","demonizowani","demonstrowani","demoralizowani","denerwowani","denuncjowani","depeszowani","depilowani","deportowani","deprawowani","deptani","deratyzowani","destabilizowani","destylowani","desygnowani","determinowani","detonowani","dewastowani","dewaulowani","dezaktywowani","dezorientowani","dezynfekowani","diagnozowani","dilowani","dÅ‚ubani","dÅ‚użeni","dmuchani","dobiegani","dobierani","dobijani","dobrani","dobudzeni","doceniani","docenieni","dochodzeni","dochowani","dochowywani","dociekani","docinani","dociskani","doczekani","doczepieni","doczoÅ‚gani","doczyszczeni","doczytani","dodani","dodawani","dodrukowani","dodrukowywani","dofinansowani","dofinansowywani","dogadani","dogadywani","dogadzani","doganiani","doglÄ…dani","dognani","dogodzeni","dogonieni","dograni","dogryzani","dogryzioni","dogrzani","dogrzebani","doinformowani","dojeżdżani","dojeni","dojrzani","dojrzewani","dokaÅ„czani","dokarmiani","dokarmieni","dokazani","dokazywani","dokÅ‚adani","doklejeni","dokonani","dokoÅ„czeni","dokonywani","dokopani","dokopywani","dokowani","dokrÄ™cani","dokrÄ™ceni","doksztaÅ‚cani","doksztaÅ‚ceni","dokuczani","dokumentowani","dokupieni","dołączani","dołączeni","doÅ‚adowani","dolani","dolewani","doliczeni","doÅ‚owani","doÅ‚ożeni","domagani","domalowani","domniewywani","domówieni","domyÅ›lani","domyÅ›leni","doniesieni","donoszeni","dopadani","dopakowani","dopaleni","dopasowani","dopasowywani","dopatrywani","dopatrzeni","dopchani","dopeÅ‚niani","dopeÅ‚nieni","dopieszczeni","dopijani","dopilnowani","dopingowani","dopisani","dopisywani","dopÅ‚acani","dopÅ‚aceni","dopolerowani","dopompowani","dopowiedziani","dopracowani","dopracowywani","doprani","doprawieni","doprecyzowani","doproszeni","doprowadzani","doprowadzeni","dopucowani","dopuszczani","dopuszczeni","dopytywani","dorabiani","doradzani","doradzeni","dorÄ™czani","dorÄ™czeni","dorobieni","dorównani","dorównywani","dorwani","dorysowani","dorzucani","dorzuceni","dosiadani","doskoczeni","doskonaleni","dosÅ‚adzani","dosÅ‚ani","dosÅ‚yszani","dosoleni","doÅ›rodkowani","dossani","dostani","dostÄ…pieni","dostarczani","dostarczeni","dostawani","dostawiani","dostawieni","dostosowani","dostosowywani","dostrajani","dostrojeni","dostrzegani","dosuwani","doÅ›wiadczani","doÅ›wietleni","dosypani","dosypywani","doszkoleni","doszlifowani","doszorowani","doszukani","doszukiwani","dotankowani","dotankowywani","dotargani","dotaszczeni","dotlenieni","dotÅ‚umaczeni","dotowani","dotrwani","dotrzymani","dotrzymywani","dotykani","douczani","douczeni","dowaleni","dowiezieni","dowodzeni","dowożeni","doznani","doznawani","dozorowani","dozowani","dożywieni","dramatyzowani","drapani","drażnieni","drążeni","drÄ™czeni","drenowani","drgani","drukowani","dryblowani","dryfowani","drzemani","dubbingowani","dublowani","duplikowani","duszeni","dworowani","dygotani","dyktowani","dymani","dymieni","dyrygowani","dyscyplinowani","dyskredytowani","dyskryminowani","dyskutowani","dyskwalifikowani","dysponowani","dystansowani","dystrybuowani","dywagowani","dźgani","dziedziczeni","dziÄ™kowani","dzieleni","dziergani","dzierżeni","dziobani","dziurawieni","dziurkowani","dźwigani","edukowani","edytowani","egzaminowani","egzekutowani","egzekwowani","ekscytowani","ekshumowani","ekskomunikowani","eksmitowani","ekspandowani","eksperymentowani","eksploatowani","eksplorowani","eksponowani","eksportowani","eksterminowani","ekstradowani","ekstrapolowani","eliminowani","emancypowani","emigrowani","emitowani","energetyzowani","eskortowani","etykietowani","ewakuowani","ewaluowani","fabrykowani","falowani","faÅ‚szowani","farbowani","faszerowani","faulowani","faworyzowani","fechtowani","fermentowani","ferowani","figurowani","filetowani","filmowani","filtrowani","finalizowani","finansowani","firmowani","fleszowani","folgowani","formuÅ‚owani","forsowani","fotografowani","fundowani","gadani","ganiani","garbieni","gardzeni","garnirowani","gaszeni","gawÄ™dzeni","gaworzeni","gazowani","gdakani","gderani","generalizowani","generowani","gilgotani","gÅ‚adzeni","gÅ‚askani","gÅ‚odowani","gÅ‚odzeni","gloryfikowani","gÅ‚osowani","gÅ‚oszeni","gÅ‚owieni","gmatwani","gmerani","gnani","gnÄ™bieni","gnieceni","gnojeni","godzeni","goleni","gonieni","googlowani","gospodarowani","goszczeni","gotowani","grabieni","grani","grasowani","gratulowani","grillowani","grilowani","gromadzeni","gromieni","grożeni","gruchani","grupowani","grywani","gryzieni","grzani","grzechotani","gubieni","gustowani","gwaÅ‚ceni","gwarantowani","gwizdani","hackowani","haftowani","hamowani","haÅ„bieni","handlowani","harcowani","harmonizowani","harowani","hartowani","hibernowani","hipnotyzowani","hodowani","holowani","hoÅ‚ubieni","honorowani","hospitalizowani","hulani","huÅ›tani","idealizowani","identyfikowani","ignorowani","igrani","ilustrowani","imitowani","implantowani","implodowani","imponowani","importowani","improwizowani","indokrynowani","indukowani","infekowani","infiltrowani","informowani","ingerowani","inhalowani","inscenizowani","inspirowani","instalowani","instruowani","insynuowani","integrowani","interpretowani","interweniowani","intonowani","intubowani","inwestowani","inwigilowani","irytowani","iskrzeni","izolowani","jadani","jawieni","jazgotani","jednoczeni","jedzeni","kablowani","kadzeni","kalani","kaleczeni","kalkulowani","kamerowani","kamienowani","kamuflowani","kanalizowani","kÄ…pani","kapitulowani","kapowani","karani","karbonizowani","karceni","karczowani","karmieni","kartkowani","kÄ…sani","kasowani","kastrowani","katalogowani","katapultowani","katowani","katrupieni","kierowani","kimani","kiszeni","kiwani","kÅ‚aniani","klapani","klarowani","klasyfikowani","klÄ™bieni","klejeni","klepani","klikani","klonowani","kÅ‚opotani","knoceni","kochani","koczowani","kodowani","kojarzeni","kojeni","kolekcjonowani","kolektywizowani","kolidowani","kolonizowani","kolorowani","koloryzowani","koÅ‚owani","koÅ‚ysani","kombinowani","komenderowani","komentowani","komercjalizowani","kompensowani","komplementowani","komplikowani","komponowani","kompromitowani","komunikowani","konani","koncentrowani","koÅ„czeni","konfabulowani","konfiskowani","konfrontowani","konserwowani","konspirowani","konstruowani","konsultowani","konsumowani","kontaktowani","kontestowani","kontrastowani","kontrolowani","kontrowani","kontynuowani","kontynuuowani","konwertowani","konwojowani","koordynowani","kopani","kopceni","kopiowani","kopulowani","korelowani","korkowani","koronowani","korygowani","korzystani","koszeni","kotwiczeni","kozaczeni","kozÅ‚owani","kradzieni","krajani","krążeni","krÄ™ceni","kremowani","kreowani","krochmaleni","krojeni","kropieni","kruszeni","krystalizowani","krytykowani","krzyczani","krzywdzeni","krzywieni","krzyżowani","kserowani","ksiÄ™gowani","ksztaÅ‚ceni","ksztaÅ‚towani","kuleni","kultywowani","kumulowani","kupczeni","kupieni","kupowani","kupywani","kurczeni","kurowani","kursowani","kurzeni","kuszeni","kwalifikowani","kwestionowani","łączeni","Å‚adowani","Å‚agodzeni","Å‚ajdaczeni","lakierowani","Å‚amani","lamentowani","lansowani","lani","Å‚apani","Å‚askotani","Å‚aszeni","latani","Å‚atani","lawirowani","leczeni","legalizowani","legitymowani","lekceważeni","lepieni","lewitowani","liberowani","licencjonowani","licytowani","liczeni","likwidowani","linczowani","liniowani","literowani","litowani","lizani","lobbowani","lokalizowani","losowani","Å‚owieni","Å‚ożeni","lubiani","Å‚udzeni","lunatykowani","Å‚upani","Å‚upieni","Å‚uskani","lustrowani","Å‚uszczeni","luzowani","Å‚ykani","Å‚yżeczkowani","macani","machani","mÄ…ceni","maczani","maganyzowani","maglowani","majaczeni","majsterkowani","majtani","maksymalizowani","malowani","maltretowani","mamieni","mamrotani","manewrowani","manifestowani","manipulowani","markowani","marnotrawieni","marnowani","marszczeni","marynowani","masakrowani","maskowani","masowani","masturbowani","mataczeni","materializowani","mawiani","mazani","mÄ™czeni","meldowani","merdani","metabolizowani","miażdżeni","mieleni","mierzeni","mierzwieni","mieszani","miÄ™toleni","migani","migdaleni","migotani","mijani","miksowani","milowani","minimalizowani","miotani","mistyfikowani","mitygowani","mizdrzeni","mlani","mniemani","mnożeni","mobilizowani","mocowani","moczeni","modelowani","modernizowani","modleni","modulowani","modyfikowani","molestowani","monitorowani","monopolizowani","montowani","mordowani","motywowani","mrożeni","mrugani","mrużeni","muskani","mutowani","mydleni","myleni","myszkowani","nabazgrani","nabiegani","nabierani","nabrani","nabrojeni","nabrudzeni","nabywani","nacelowani","nachapani","nachodzeni","nachwaleni","nachyleni","naciÄ…gani","nacierani","nacinani","naciskani","nacjonalizowani","naczepieni","nadani","nadawani","nadchodzeni","nadciÄ…gani","nadesÅ‚ani","nadgonieni","nadgryzani","nadgryzieni","nadinterpretowani","nadÅ‚ożeni","nadmieniani","nadmienieni","nadmuchani","nadrabiani","nadrobieni","nadskakiwani","nadsÅ‚uchiwani","nadstawiani","nadstawieni","naduszeni","nadużywani","nadwerężani","nadwyrężani","nadwyrężeni","nadziani","nadzorowani","naelektryzowani","nafaszerowani","nagabywani","nagadani","naginani","nagÅ‚aszani","nagÅ‚oÅ›nieni","nagonieni","nagradzani","nagrani","nagrodzeni","nagromadzeni","nagrywani","nagryzmoleni","nagrzani","nagrzebani","nagrzewani","nagwizdani","naigrywani","najechani","najmowani","nakarmiani","nakarmieni","nakazani","nakazywani","nakierowani","nakierowywani","nakÅ‚adani","nakÅ‚amani","nakÅ‚aniani","naklejani","naklejeni","naklepani","nakÅ‚onieni","nakÅ‚uwani","nakopani","nakrÄ™cani","nakrÄ™ceni","nakreÅ›lani","nakreÅ›leni","nakruszeni","nakrywani","nakrzyczani","nakupieni","naÅ‚adowani","nalani","naÅ‚apani","nalepieni","nalewani","naliczeni","naÅ‚owieni","naÅ‚ożeni","namaczani","namagnetyzowani","namalowani","namaszczani","namaszczeni","namawiani","namÄ™czeni","namierzani","namieszani","namoczeni","namówieni","namydlani","namyÅ›leni","naniesieni","naoliwiani","naoliwieni","naopowiadani","naostrzeni","napadani","napakowani","napaleni","naparzani","napastowani","napawani","napchani","napÄ™dzani","napeÅ‚niani","napeÅ‚nieni","napierani","napiÄ™tnowani","napinani","napisani","napÅ‚ywani","napojeni","napompowani","napotkani","napotykani","napraszani","naprawiani","naprawieni","naprężani","naprężeni","napromieniowani","naprostowani","naprowadzani","naprowadzeni","napuszczani","napuszczeni","napychani","napytani","narÄ…bani","naradzani","naradzeni","narastani","narażani","narażeni","nareperowani","narkotyzowani","narodzeni","naruszani","naruszeni","narwani","narysowani","narzucani","narzuceni","nasÄ…czani","nasÄ…czeni","nasadzeni","nasiÄ…kani","nasilani","nasileni","naskakiwani","naskoczeni","naskrobani","naÅ›ladowani","nasÅ‚ani","nasÅ‚uchani","nasÅ‚uchiwani","nasmarowani","nastÄ…pieni","nastawiani","nastawieni","nastraszani","nastrojeni","nastukani","nasuwani","naÅ›wietlani","nasyceni","nasyÅ‚ani","nasypani","naszczani","naszkicowani","naszpikowani","naszprycowani","naszykowani","naszywani","natlenieni","natÅ‚uszczeni","natrafieni","natrzÄ…sani","nauczani","nauczeni","nawadniani","nawaleni","nawiÄ…zani","nawiÄ…zywani","nawiedzani","nawiedzeni","nawierceni","nawiewani","nawiezieni","nawigowani","nawijani","nawilżani","nawilżeni","nawlekani","nawodnieni","nawoÅ‚ywani","nawoskowani","nawożeni","nawpychani","nawracani","nawróceni","nawrzucani","nawtykani","nawymyÅ›lani","nazbierani","nazmyÅ›lani","naznaczani","naznaczeni","nazrywani","nazwani","nazywani","nÄ™ceni","negocjowani","negowani","nÄ™kani","neutralizowani","niaÅ„czeni","niecierpliwieni","niedoceniani","niedowidziani","nienawidzeni","niesieni","nikoleni","niszczeni","nitkowani","niuchani","niweczeni","niwelowani","nokautowani","nominowani","notowani","nuceni","numerowani","nurtowani","obaczeni","obadani","obalani","obaleni","obandażowani","obarczani","obarczeni","obawiani","obchodzeni","obciążeni","obcinani","obcyndalani","obczajani","obczajeni","obdarowani","obdarzani","obdarzeni","obdzieleni","obdzierani","obdzwaniani","obdzwonieni","obejmowani","oberwani","obessani","obezwÅ‚adniani","obezwÅ‚adnieni","obfotografowani","obfotografowywani","obgadani","obgadywani","obgryzani","obgryzieni","obiecani","obiecywani","obierani","obijani","objadani","objaÅ›niani","objawiani","objawieni","objechani","objeżdżani","obkrÄ™cani","oblani","obÅ‚apiani","obÅ‚apywani","obÅ‚askawiani","obÅ‚askawieni","obleciani","oblewani","obliczani","obliczeni","oblizani","obÅ‚owieni","obÅ‚ożeni","obluzowani","obluzowywani","obmacani","obmacywani","obmawiani","obmyÅ›lani","obmyÅ›leni","obmywani","obnażani","obniżani","obniżeni","obnoszeni","obowiÄ…zywani","obozowani","obrabiani","obrabowani","obracani","obradowani","obramowani","obraniani","obrani","obrastani","obrażani","obrażeni","obrobieni","obróceni","obrodzeni","obronieni","obrysowani","obrywani","obryzgani","obrzezani","obrzucani","obrzuceni","obrzygani","obsadzani","obsadzeni","obÅ›ciskiwani","obserwowani","obsiani","obsikani","obsikiwani","obskakiwani","obskoczeni","obskubani","obskubywani","obÅ›liniani","obÅ›linieni","obsÅ‚ugiwani","obsÅ‚użeni","obsmarowani","obstawiani","obstawieni","obstrzeliwani","obsuwani","obsypani","obsypywani","obszukani","obszukiwani","obtaczani","obtoczeni","obudzeni","obwÄ…chani","obwÄ…chiwani","obwiÄ…zani","obwiÄ…zywani","obwieszani","obwieszczani","obwieszczeni","obwieszeni","obwijani","obwiniani","obwoÅ‚ani","obżerani","ocalani","ocaleni","ocechowani","oceniani","ocenieni","ocenzurowani","ochÅ‚adzani","ochlapani","ochlapywani","ochÅ‚odzeni","ochraniani","ochronieni","ochrzaniani","ochrzczeni","ociÄ…gani","ocieleni","ocieplani","ociepleni","ocierani","ocuceni","oczarowywani","oczekiwani","oczerniani","oczernieni","oczyszczani","oczyszczeni","odbÄ™bnieni","odbetonowani","odbezpieczani","odbezpieczeni","odbijani","odblokowani","odbudowani","odbudowywani","odbutowani","odcedzani","odchorowani","odchowani","odchudzani","odchudzeni","odchylani","odchyleni","odciÄ…gani","odciążeni","odcierpieni","odcinani","odcumowani","odcyfrowani","odcyfrowywani","odczarowani","odczekani","odczepiani","odczepieni","odczuwani","odczynieni","odczytani","odczytywani","oddalani","oddani","oddawani","oddelegowani","oddychani","oddzielani","oddzieleni","odebrani","odegnani","odegrani","odejmowani","oderwani","odeskortowani","odesÅ‚ani","odespani","odessani","odetkani","odezwani","odfiltrowani","odgadywani","odganiani","odgarniani","odgniatani","odgonieni","odgradzani","odgrażani","odgrodzeni","odgruzowani","odgrywani","odgryzani","odgryzieni","odgrzani","odgrzebani","odgrzebywani","odgrzewani","odgwizdani","odhaczeni","odholowani","odinstalowani","odizolowani","odjedzeni","odjonizowani","odkażani","odkażeni","odkÅ‚adani","odklejeni","odkochani","odkodowani","odkodowywani","odkopani","odkopywani","odkorkowani","odkrÄ™cani","odkrÄ™ceni","odkrojeni","odkrywani","odkupieni","odkupywani","odkurzani","odkurzeni","odłączani","odłączeni","odÅ‚amywani","odlani","odlatywani","odlepiani","odlewani","odliczani","odliczeni","odÅ‚ożeni","odÅ‚upani","odmachani","odmachiwani","odmalowani","odmarszczeni","odmawiani","odmeldowani","odmieniani","odmienieni","odmierzani","odmierzeni","odmieszani","odmontowani","odmówieni","odmrażani","odmrożeni","odnajdowani","odnalezieni","odnawiani","odniesieni","odnoszeni","odnotowani","odnotowywani","odnowieni","odpakowani","odpakowywani","odpalani","odpaleni","odpaÅ‚zowani","odparowani","odpÄ™dzani","odpicowani","odpieczÄ™towani","odpierani","odpiÅ‚owani","odpiÅ‚owywani","odpinani","odpisani","odpisywani","odpÅ‚acani","odplamieni","odplÄ…tani","odpowietrzeni","odpracowani","odpracowywani","odprasowani","odprawiani","odprawieni","odprężani","odprostowani","odprowadzani","odprowadzeni","odpryskani","odpukani","odpukiwani","odpuszczani","odpuszczeni","odpychani","odrÄ…bani","odrabiani","odrÄ…bywani","odradzani","odradzeni","odrapani","odrastani","odratowani","odreagowani","odremontowani","odrestaurowani","odrestaurowywani","odrobaczani","odrobieni","odroczeni","odrodzeni","odróżniani","odróżnieni","odrysowani","odrywani","odrzucani","odrzuceni","odsÄ…czani","odsÄ…czeni","odsadzeni","odseparowani","odsiadywani","odsiani","odsiewani","odsÅ‚aniani","odsÅ‚uchani","odsÅ‚uchiwani","odsÅ‚użeni","odÅ›nieżani","odÅ›nieżeni","odsoleni","odÅ›piewani","odsprzedani","odsprzedawani","odstÄ…pieni","odstawiani","odstawieni","odstÄ™powani","odstraszani","odstrÄ™czeni","odstresowani","odstrzeliwani","odstrzeleni","odsuwani","odÅ›wieżani","odÅ›wieżeni","odsyÅ‚ani","odsypywani","odsysani","odszczekani","odszczekiwani","odsztafirowani","odszukani","odszyfrowani","odszyfrowywani","odszykowani","odtrÄ…bieni","odtrÄ…ceni","odtwarzani","odtworzeni","oduczeni","odurzeni","odwalani","odwaleni","odwiÄ…zani","odwiÄ…zywani","odwiedzani","odwiedzeni","odwieszeni","odwiezieni","odwijani","odwlekani","odwodnieni","odwodzeni","odwoÅ‚ani","odwoÅ‚ywani","odwożeni","odwracani","odwróceni","odwzajemnieni","odwzorowani","odżegnani","odziani","odziedziczeni","odznaczani","odznaczeni","odzwieciedleni","odzwierciedlani","odzwonieni","odzwyczajeni","odzyskani","odzyskiwani","odzywiani","odżywieni","oferowani","ofiarowani","ofiarowywani","ogarniani","oglÄ…dani","ogÅ‚aszani","ogÅ‚oszeni","ogÅ‚upiani","ogÅ‚upieni","ogÅ‚uszeni","ogoÅ‚oceni","ogoleni","ograbiani","ograbieni","ograniczani","ograniczni","ograni","ogrodzeni","ogryzieni","ogrzani","ogrzewani","okablowani","okaleczeni","okantowani","okÄ…pani","okazani","okazywani","okieÅ‚znani","okÅ‚adani","okÅ‚amani","okÅ‚amywani","oklaskiwani","oklejeni","oklepani","okopani","okopywani","okpieni","okradani","okradzieni","okraszeni","okrążani","okrążeni","okrÄ™cani","okrÄ™ceni","okreÅ›lani","okreÅ›leni","okrojeni","okrywani","okulawieni","okupieni","okupowani","olani","olewani","omamieni","omawiani","omdlewani","omijani","omotani","omówieni","onanizowani","onieÅ›mielani","onieÅ›mieleni","opakowani","opalani","opaleni","opancerzeni","opanowani","opanowywani","oparzeni","opasani","opatentowani","opatrywani","opatrzeni","opatuleni","opÄ™dzani","opÄ™dzeni","operowani","opÄ™tani","opÄ™tywani","opieczÄ™towani","opiekowani","opierani","opijani","opisani","opisywani","opÅ‚acani","opÅ‚aceni","opÅ‚akani","opÅ‚akiwani","opÅ‚ukani","opluwani","opÅ‚ywani","opodatkowani","opodatkowywani","oponowani","oporzÄ…dzani","oporzÄ…dzeni","opowiadani","opowiedziani","opóźniani","opóźnieni","opracowani","opracowywani","oprawiani","oprawieni","oprowadzani","oprowadzeni","opróżniani","opróżnieni","opryskani","opryskiwani","opublikowani","opukani","opuszczani","opuszczeni","opychani","opyleni","orani","orbowani","organizowani","orientowani","oroszeni","orzekani","osaczani","osaczeni","osadzani","osÄ…dzani","osadzeni","osÄ…dzeni","oscylowani","osiadani","osiÄ…gani","osiedlani","osiedleni","osiedzeni","osieroceni","osiodÅ‚ani","oskalpowani","oskarżeni","oskrobani","oskrzydlani","oskrzydleni","oskubani","oskubywani","osÅ‚abiani","osÅ‚abieni","oÅ›lepiani","oÅ›lepieni","oÅ›liniani","osÅ‚odzeni","osÅ‚onieni","osÅ‚uchani","osmaleni","oÅ›mieleni","oÅ›mieszani","oÅ›mieszeni","ostrzegani","ostrzelani","ostrzeni","ostudzeni","osuszani","osuszeni","osuwani","oswajani","oÅ›wiadczani","oÅ›wiadczeni","oÅ›wiecani","oÅ›wiecieni","oÅ›wietlani","oÅ›wietleni","oswobadzani","oswobodzeni","oswojeni","oszacowani","oszaÅ‚amiani","oszczani","oszczÄ™dzani","oszczÄ™dzeni","oszkleni","oszlifowani","oszoÅ‚omieni","oszpeceni","oszukani","oszukiwani","oszwabieni","otaczani","otoczeni","otruwani","otrzÄ…sani","otrzepani","otrzeźwieni","otrzymani","otrzymywani","otuleni","otumanieni","otwierani","otwarci","owani","owdowieni","owiani","owijani","ozdabiani","ozdobieni","ozdrowieni","ożenieni","oznaczani","oznaczeni","oznajmiani","oznajmieni","oznakowani","ożywani","ożywiani","ożywieni","pakowani","paktowani","paÅ‚ani","paÅ‚aszowani","paleni","pamiÄ™tani","panoszeni","paprani","parafrazowani","paraliżowani","parkowani","parowani","partaczeni","parzeni","pastowani","paszeni","patrolowani","patroszeni","pauzowani","pchani","pdholowani","pedaÅ‚owani","pÄ™kani","peÅ‚nieni","penetrowani","perforowani","perfumowani","perswadowani","piastowani","pichceni","pielÄ™gnowani","pieleni","pienieni","pieszczeni","piÄ™tnowani","pijani","pikietowani","piknikowani","pikowani","pilnowani","pilotowani","piÅ‚owani","pisani","pisywani","pÅ‚aceni","plÄ…drowani","planowani","pÅ‚aszczeni","plÄ…tani","pÅ‚atani","pÅ‚awieni","plewieni","pÅ‚oszeni","plotkowani","plugawieni","pÅ‚ukani","pluskani","pobaraszkowani","pobierani","pobÅ‚ażani","pobÅ‚ogosÅ‚awieni","pobrani","pobrudzeni","pobudzani","pobudzeni","pobujani","pocaÅ‚owani","pocerowani","pochÅ‚aniani","pochlapani","pochlebiani","pochowani","pochwalani","pochwaleni","pochwyceni","pochylani","pochyleni","pociachani","pociÄ…gani","pocierani","pocieszani","pocieszeni","poceni","pocukrowani","poćwiartowani","poczesani","poczÄ™stowani","poczochrani","poczytani","poczytywani","podani","podarowani","podawani","podążeni","podbierani","podbijani","podbudowani","podbudowywani","podburzani","podburzeni","podchwyceni","podciÄ…gani","podcierani","podcinani","podczepieni","poddani","poddawani","podebrani","podejmowani","podejrzani","podejrzewani","podelektowani","podeptani","poderwani","podesÅ‚ani","podglÄ…dani","podgoleni","podgonieni","podgryzani","podgrzani","podgrzewani","podjadani","podjedzeni","podkablowani","podkarmieni","podkÅ‚adani","podklejeni","podkolorowani","podkoÅ‚owani","podkopani","podkopywani","podkradani","podkrÄ™cani","podkrÄ™ceni","podkreÅ›lani","podkreÅ›leni","podksztaÅ‚ceni","podkuleni","podkupieni","podkurzeni","podłączani","podłączeni","podÅ‚adowani","podÅ‚amani","podlani","podÅ‚apani","podleczeni","podlegani","podlewani","podliczani","podliczeni","podlizani","podlizywani","podÅ‚ożeni","podmalowani","podmieniani","podmienieni","podmuchani","podniecani","podnieceni","podniesieni","podnoszeni","podoÅ‚ani","podopingowani","podostrzeni","podotykani","podpalani","podpaleni","podpatrywani","podpatrzeni","podpieczÄ™towani","podpiekani","podpierani","podpiÅ‚owani","podpinani","podpisani","podpisywani","podpÅ‚aceni","podpompowani","podporzÄ…dkowani","podporzÄ…dkowywani","podpowiadani","podpowiedziani","podprowadzani","podpuszczani","podpuszczeni","podpychani","podpytani","podrabiani","podrapani","podrasowani","podratowani","podrażnieni","podrÄ™czeni","podregulowani","podreperowani","podretuszowani","podrobieni","podroczeni","podróżowani","podrygiwani","podrywani","podrzucani","podrzuceni","podrzynani","podsadzeni","podskubywani","podsÅ‚uchani","podsÅ‚uchiwani","podsmażani","podsmażeni","podÅ›piewywani","podstawiani","podstawieni","podstemplowani","podstrojeni","podsumowani","podsumowywani","podsuwani","podÅ›wietlani","podsycani","podsyceni","podsyÅ‚ani","podsypani","podszczypywani","podszkoleni","podszlifowani","podszykowani","podszywani","podtapiani","podtopieni","podtrzymani","podtrzymywani","podtuczeni","poduczani","podupadani","poduszeni","podwajani","podwalani","podważani","podwÄ™dzeni","podwiÄ…zani","podwieszani","podwiezieni","podwijani","podwojeni","podwożeni","podwyżani","podwyższani","podwyższeni","podyktowani","podyskutowani","podziabani","podziaÅ‚ani","podziaÅ‚kowani","podziÄ™kowani","podzieleni","podziurawieni","podziwiani","poeksperymentowani","pofarbowani","pofatygowani","pofilmowani","poganiani","pogardzani","pogardzeni","pogarszani","pogaszeni","pogÅ‚adzeni","pogÅ‚askani","pogłębiani","pogłębieni","pogÅ‚oÅ›nieni","pogmatwani","pognÄ™bieni","pogniecieni","pogodzeni","pogonieni","pogorszeni","pogotowani","pograbieni","pogrążani","pogrążeni","pogrożeni","pogrubiani","pogrubieni","pogruchani","pogruchotani","pogrupowani","pogrywani","pogryzani","pogryzieni","pogrzani","pogrzebani","pogubieni","pogwaÅ‚cani","pohamowani","pohandlowani","poharatowani","pohuÅ›tani","poinformowani","poinstruowani","pojednani","pojmowani","pojeni","pokajani","pokaleczeni","pokarani","pokarmieni","pokÄ…sani","pokatalogowani","pokazani","pokazywani","pokiereszowani","pokierowani","pokiwani","pokÅ‚adani","poklepani","poklepywani","pokÅ‚onieni","pokochani","pokolorowani","pokoloryzowani","pokoÅ‚ysani","pokombinowani","pokomplikowani","pokonani","pokoÅ„czeni","pokonywani","pokopani","pokrajani","pokrążeni","pokrÄ™ceni","pokrojeni","pokruszeni","pokrywani","pokrzepiani","pokrzepieni","pokrzyżowani","pokuszeni","pokutowani","połączeni","polakierowani","poÅ‚amani","polani","poÅ‚apani","poÅ‚askotani","poÅ‚atani","polecani","poÅ‚echtani","poleceni","poleczeni","polegani","polemizowani","polepszani","polepszeni","polerowani","polewani","policzkowani","policzeni","polimeryzowani","polizani","polowani","poÅ‚owieni","poÅ‚ożeni","polubieni","poluźnieni","poluzowani","poÅ‚ykani","pomacani","pomachani","pomagani","pomalowani","pomarynowani","pomasowani","pomazani","pomÄ™czeni","pomiatani","pomieszani","pomieszczeni","pomijani","pomiziani","pomnażani","pomniejszani","pomniejszeni","pomnożeni","pomoczeni","pompowani","pomydleni","pomyleni","pomyszkowani","pomywani","ponabijani","ponaciskani","ponadziewani","ponaglani","ponagleni","ponagrywani","ponaklejani","ponakÅ‚uwani","ponakrywani","ponaprawiani","ponawiani","poniaÅ„czeni","poniechani","ponieiwerani","poniesieni","poniszczeni","poniżani","poniżeni","ponoszeni","ponowieni","ponudzeni","poobcinani","poobcowani","poobczajani","poobijani","poobmacywani","poobracani","poobserwowani","poodbijani","poodcinani","poodgryzani","poodkurzani","poodprawiani","poodsuwani","poodwalani","pooglÄ…dani","poograniczani","poopalani","poopiekani","poopwiadani","pootwierani","popadani","popakowani","popaleni","poparzeni","popchani","popÄ™dzani","popÄ™dzeni","popÄ™kani","popeÅ‚niani","popeÅ‚nieni","poperfumowani","popierani","popieszczeni","popijani","popilnowani","popisani","popÅ‚aceni","popÅ‚akiwani","poplamieni","poplÄ…tani","popluskani","popodcinani","popodziwiani","popoprawiani","poprani","poprasowani","poprawiani","poprawieni","poproszeni","poprowadzeni","popryskani","poprzebierani","poprzeciÄ…gani","poprzecinani","poprzedzani","poprzeglÄ…dani","poprzeklinani","poprzekopywani","poprzemieszczani","poprzenoszeni","poprzesadzani","poprzeÅ›ladowani","poprzestawiani","poprzesuwani","poprzewieszani","poprzewracani","poprzycinani","poprzymierzani","poprzytulani","poprzywiÄ…zywani","popudrowani","popukani","popularyzowani","popuszczani","popuszczeni","popychani","popykani","popytani","porabiani","porachowani","poranieni","poratowani","porażeni","porÄ™czeni","porównani","porozbierani","porozbijani","porozciÄ…gani","porozcinani","porozdawani","porozdzielani","porozmieszczani","poróżnieni","porozpÄ™dzani","porozpieszczani","porozprowadzani","porozpruwani","porozrzucani","porozstawiani","porozsyÅ‚ani","porozumiewani","porozwalani","porozwiÄ…zywani","porozwieszani","porozwożeni","portretowani","poruszani","poruszeni","porwani","porysowani","porywani","porzÄ…dkowani","porzÄ…dzeni","porzucani","porzuceni","posÄ…dzani","posadzeni","posÄ…dzeni","poÅ›ciÄ…gani","poÅ›cieleni","poÅ›cierani","poÅ›cigani","poÅ›cinani","poÅ›ciskani","posegregowani","posiadani","posiani","posiekani","posilani","posiÅ‚kowani","posileni","posiÅ‚owani","posiniaczeni","posiorbani","poskÄ…pieni","poskÅ‚adani","posklejani","poskramiani","poskrÄ™cani","poskrobani","poskromieni","poskubani","posÅ‚ani","posÅ‚odzeni","poÅ›lubiani","poÅ›lubieni","posÅ‚ugiwani","posmakowani","posmarowani","posoleni","posortowani","pospekulowani","pospieszani","poÅ›pieszani","poÅ›piewani","pospinani","pospÅ‚acani","posprawdzani","posprzÄ…tani","posprzedawani","poÅ›redniczeni","possani","postanowieni","postani","postarani","postawieni","postemplowani","posterowani","postradani","postraszeni","postrugani","postrzegani","postrzelani","postrzeleni","postukani","postymulowani","posuwani","poÅ›wiÄ…cani","poÅ›wiadczeni","poÅ›wieceni","poÅ›wiÄ™ceni","poÅ›wiÄ™towani","poÅ›wintuszeni","posyÅ‚ani","posypani","posypywani","poszarpani","poszastani","poszatkowani","poszczyceni","poszczypani","poszerzani","poszerzeni","poszorowani","poszpiegowani","poszturchani","poszukani","poszukiwani","poszwÄ™dani","poszybowani","potakiwani","potarmoszeni","potasowani","potÄ™gowani","potÄ™piani","potÄ™pieni","potoczeni","potopieni","potorturowani","potrÄ…cani","potrÄ…ceni","potraktowani","potrojeni","potrzÄ…sani","potrzaskani","potrzymani","Poturbowani","poturlani","potwierdzeni","potykani","poucinani","pouczani","pouczeni","poudawani","poukÅ‚adani","pouprawiani","poupychani","pourywani","poustawiani","poużywani","powÄ…chani","powachlowani","powalani","powaleni","poważani","powbijani","powciÄ…gani","powciskani","powdychani","powÄ™szeni","powetowani","powiadamiani","powiadomieni","powiÄ…zani","powiedziani","powiedzeni","powiÄ™kszani","powielani","powieleni","powierzani","powierzeni","powieszeni","powiewani","powinszowani","powitani","powkÅ‚adani","powlekani","powłóczeni","powodowani","powoÅ‚ani","powoÅ‚ywani","powożeni","powpychani","powróceni","powrzucani","powsadzani","powspominani","powstrzymani","powtarzani","powtórzeni","powybierani","powybijani","powycierani","powycinani","powyciskani","powydawani","powyganiani","powyginani","powyjaÅ›niani","powyjmowani","powyłączani","powymiatani","powymieniani","powynoszeni","powypeÅ‚niani","powypisywani","powyrywani","powyrzucani","powystrzelani","powysyÅ‚ani","powywalani","powywieszani","powywracani","pozabawiani","pozabijani","pozacierani","pożądani","pożądleni","pozadzierani","pozakÅ‚adani","pozaklinani","pozaÅ‚atwiani","pozamiatani","pozamieniani","pozamrażani","pozamykani","pozapalani","pozapinani","pozapisywani","pozapraszani","pozasÅ‚aniani","pozastrzelani","pozatykani","pozbawiani","pozbawieni","pozbierani","pozbywani","pozdejmowani","pozdrawiani","pozdrowieni","pożegnani","pożerani","pozmiatani","pozmieniani","pozmywani","poznaczeni","poznani","poznawani","poznÄ™cani","pozorowani","pozostawiani","pozostawieni","pozowani","pozrywani","pozszywani","pozwalniani","pozwani","pozwiÄ…zywani","pozwiedzani","pozwoleni","pożyczani","pożyczeni","pozyskani","pozywani","pożywiani","pożywieni","praktykowani","prani","prasowani","prawieni","prażeni","precyzowani","preferowani","prenumerowani","prezentowani","próbowani","procesowani","produkowani","profanowani","profilowani","prognozowani","programowani","projektowani","proklamowani","prolongowani","promieniowani","promowani","propagowani","proponowani","prosperowani","prostowani","proszkowani","proszeni","protestowani","protokoÅ‚owani","prowadzeni","prowokowani","pryskani","przeanalizowani","przearanżowani","przebaczani","przebaczeni","przebadani","przebierani","przebijani","przeboleni","przebrani","przebudowani","przebudowywani","przebudzani","przebudzeni","przebukowani","przebywani","przeceniani","przecenieni","przechlapani","przechodzeni","przechowani","przechowywani","przechrzceni","przechwyceni","przechwytywani","przechylani","przechyleni","przechytrzani","przechytrzeni","przeciÄ…gani","przeciążani","przeciążeni","przeciekani","przecierani","przecierpiani","przecinani","przeciskani","przeciwstawiani","przećwiczeni","przeczekani","przeczesani","przeczesywani","przeczoÅ‚gani","przeczuwani","przeczyszczeni","przeczytani","przedawkowani","przedawkowywani","przedekorowani","przedÅ‚ożeni","przedÅ‚użani","przedÅ‚użeni","przedmuchani","przedobrzeni","przedostani","przedostawani","przedstawiani","przedstawieni","przedymani","przedyskutowani","przedzierani","przedziurawieni","przedziurkowani","przeegzaminowani","przefaksowani","przefarbowani","przefasonowani","przefasowani","przefaxowani","przefiltrowani","przeformowani","przeforsowani","przegadani","przeganani","przeganiani","przegapiani","przegapieni","przeginani","przeglÄ…dani","przegÅ‚odzeni","przegÅ‚osowani","przegonieni","przegotowani","przegotowywani","przegrabieni","przegradzani","przegrani","przegrupowani","przegrupowywani","przegrywani","przegryzani","przegryzieni","przegrzani","przegrzebani","przegrzewani","przehandlowani","przeholowani","przeinstalowani","przeistoczeni","przejadani","przejaskrawiani","przejaÅ›nieni","przejawiani","przejawieni","przejechani","przejeżdżani","przejmowani","przejrzani","przekabacani","przekabaceni","przekablowani","przekalibrowani","przekalkulowani","przekarmiani","przekÄ…szeni","przekazywani","przekierowani","przekierowywani","przekimani","przekÅ‚adani","przeklejeni","przeklinani","przekonani","przekonfigurowani","przekonstruowani","przekonwertowani","przekonywani","przekopani","przekopywani","przekozioÅ‚kowani","przekraczani","przekrÄ™cani","przekrÄ™ceni","przekreÅ›lani","przekreÅ›leni","przekroczeni","przekrojeni","przekrzyczeni","przekrzywieni","przeksztaÅ‚cani","przeksztaÅ‚ceni","przekupieni","przekupywani","przekwalifikowani","przełączani","przełączeni","przeÅ‚adowani","przeÅ‚adowywani","przeÅ‚amani","przeÅ‚amywani","przelani","przelatywani","przeleciani","przelewani","przeleżani","przelicytowani","przeliczani","przeliczeni","przeliterowani","przeÅ‚ożeni","przeÅ‚ykani","przemalowani","przemalowywani","przemaszerowani","przemawiani","przemeblowani","przemÄ™czeni","przemieleni","przemieniani","przemierzeni","przemieszczani","przemieszczeni","przemijani","przemilczani","przemilczeni","przemodelowani","przemusztrowani","przemycani","przemyceni","przemyÅ›lani","przemyÅ›leni","przemywani","przenegocjowani","przeniesieni","przenikani","przenoszeni","przeobrażani","przeobrażeni","przeoczani","przeoczeni","przeorani","przeorganizowani","przeorientowani","przepadani","przepakowani","przepaleni","przeparkowani","przepchani","przepÄ™dzani","przepÄ™dzeni","przepeÅ‚niani","przepeÅ‚nieni","przepijani","przepiÅ‚owani","przepisani","przepisywani","przepÅ‚acani","przepÅ‚aceni","przepÅ‚akani","przeplanowani","przepÅ‚oszeni","przepÅ‚ukani","przepÅ‚ukiwani","przepÅ‚ywani","przepompowani","przepompowywani","przepowiadani","przepowiedziani","przepracowani","przepracowywani","przeprani","przeprawiani","przeprawieni","przeprogramowani","przeprojektowani","przeprowadzani","przeprowadzeni","przepuszczani","przepuszczeni","przepychani","przepytani","przepytywani","przerÄ…bani","przerabiani","przeradzani","przerastani","przerażeni","przeredagowani","przerejestrowani","przerobieni","przerodzeni","przerwani","przerysowani","przerywani","przerzedzani","przerzucani","przerzuceni","przesÄ…czeni","przesadzani","przesÄ…dzani","przesadzeni","przesÄ…dzeni","przeÅ›cigani","przesiadani","przesiadywani","przesiani","przesiedlani","przesiedleni","przesiedziani","przesiewani","przesileni","przeskakiwani","przeskalowani","przeskanowani","przeskoczeni","przeskrobani","przeÅ›ladowani","przesÅ‚aniani","przesÅ‚ani","przeÅ›ledzeni","przesÅ‚odzeni","przesÅ‚uchani","przesÅ‚uchiwani","przesmarowani","przesoleni","przesortowani","przespani","przeÅ›piewani","przessani","przestawiani","przestawieni","przestemplowani","przestraszeni","przestrojeni","przestrzegani","przestrzeleni","przestudiowani","przesuwani","przeÅ›wietlani","przeÅ›wietleni","przesyÅ‚ani","przesypani","przesypiani","przesypywani","przeszarżowani","przeszczepiani","przeszczepieni","przeszkadzani","przeszkoleni","przeszmuglowani","przeszukani","przeszukiwani","przeszywani","przetaczani","przetapetowani","przetestowani","przetkani","przetoczeni","przetopieni","przetrÄ…ceni","przetransformowani","przetransmitowani","przetransponowani","przetransportowani","przetrawieni","przetrwani","przetrzÄ…sani","przetrzepani","przetrzymani","przetrzymywani","przetwarzani","przetworzeni","przewalani","przewalczeni","przewaletowani","przewaleni","przeważani","przeważeni","przewertowani","przewiÄ…zani","przewiÄ…zywani","przewidywani","przewidziani","przewiercani","przewierceni","przewieszani","przewieszeni","przewietrzeni","przewiezieni","przewijani","przewitani","przewodniczeni","przewodzeni","przewożeni","przewracani","przewróceni","przewyższani","przeymierzani","przeżeglowani","przeżegnani","przeziÄ™bieni","przezimowani","przeznaczani","przeznaczeni","przezwyciężani","przezwyciężeni","przezywani","przeżywani","przodowani","przpochlebieni","przwdziewani","przybastowani","przybierani","przybijani","przybliżani","przybliżeni","przybrani","przycelowani","przycepieni","przychyleni","przyciÄ…gani","przyciemnieni","przycinani","przyciskani","przyciszeni","przyćmiewani","przyćmieni","przycumowani","przyczepiani","przyczesani","przyczoÅ‚gani","przyczynieni","przydeptani","przyduszeni","przydzielani","przydzieleni","przygaszeni","przygazowani","przygÅ‚adzani","przygnÄ™biani","przygniatani","przygniecieni","przygotowani","przygruchani","przygrywani","przygryzani","przygryzieni","przygrzani","przygwożdżeni","przyhamowani","przyholowani","przyjani","przyjmowani","przyjrzani","przykÅ‚adani","przyklejeni","przyklepani","przykopani","przykrÄ™cani","przykrÄ™ceni","przykróceni","przykrywani","przykurzeni","przykuwani","przyłączani","przyłączeni","przylani","przyÅ‚apani","przylegani","przylepiani","przylepieni","przyÅ‚ożeni","przymierzeni","przymilani","przymocowani","przymuszani","przynależeni","przyniesieni","przynoszeni","przynudzani","przyostrzeni","przyozdabiani","przyozdobieni","przypakowani","przypakowywani","przypalani","przypaleni","przypasowani","przypatrywani","przypatrzeni","przypieczÄ™towani","przypiekani","przypierani","przypilnowani","przypiÅ‚owani","przypinani","przypisani","przypisywani","przypÅ‚aceni","przyplÄ…tani","przypodobani","przypominani","przypomniani","przyporzÄ…dkowani","przyprawiani","przyprawieni","przyprowadzeni","przypucowani","przypudrowani","przypuszczani","przypuszczeni","przyrównani","przyrzÄ…dzani","przyrzÄ…dzeni","przysiadani","przyskrzydleni","przyskrzyniani","przyskrzynieni","przysÅ‚aniani","przysÅ‚ani","przysÅ‚odzeni","przysÅ‚onieni","przysÅ‚uchiwani","przysÅ‚ugiwani","przysÅ‚użeni","przysmażani","przysmażeni","przyspieszani","przyspieszeni","przysporzeni","przysposobieni","przyÅ›rubowywani","przyssani","przystÄ…pieni","przystawiani","przystawieni","przystemplowani","przystopowani","przystosowani","przystrojeni","przysuwani","przyswajani","przyÅ›wiecani","przyÅ›wiÄ™ceni","przyswojeni","przysyÅ‚ani","przysypani","przyszpileni","przyszykowani","przyszywani","przytaczani","przytargani","przytaszczani","przytÄ™piani","przytÄ™pieni","przytkani","przytÅ‚aczani","przytÅ‚oczeni","przytÅ‚umieni","przytoczeni","przytrafieni","przytroczeni","przytruwani","przytrzymani","przytrzymywani","przytulani","przytuleni","przytwierdzani","przytwierdzeni","przytykani","przyuczeni","przyuważeni","przywabieni","przywalani","przywaleni","przywarowani","przywdziani","przywiÄ…zani","przywiÄ…zywani","przywidziani","przywiezieni","przywitani","przywÅ‚aszczani","przywÅ‚aszczeni","przywoÅ‚ani","przywoÅ‚ywani","przywożeni","przywracani","przywróceni","przyznaczeni","przyznani","przyznawani","przyzwalani","przyzwani","przyzwyczajani","przyzwyczajeni","przyzywani","psiamani","pstrykani","publikowani","pucowani","pudÅ‚owani","pudrowani","punktowani","pustoszeni","puszczani","puszczeni","puszkowani","puszeni","pykani","pytani","rabowani","rachowani","racjonalizowani","racjonowani","raczeni","radowani","ranieni","raportowani","ratowani","ratyfikowani","reaktywowani","realizowani","reanimowani","recytowani","rÄ™czeni","redagowani","redukowani","reformowani","refowani","regenerowani","regionalizowani","regulowani","reinkarnowani","rejestrowani","reklamowani","rekomendowani","rekompensowani","rekonstruowani","rekreowani","rekrutowani","rekwirowani","relacjonowani","relaksowani","remodulowani","remontowani","renegocjowani","reorganizowani","reperowani","replikowani","represejonowani","reprezentowani","reprodukowani","resetowani","resocjalizowani","respektowani","resuscytowani","retuszowani","rewanżowani","rewidowani","rezerwowani","rezonowani","rezygnowani","reżyserowani","robieni","rodzeni","rojeni","rolowani","romansowani","ronieni","rozbawiani","rozbawieni","rozbierani","rozbijani","rozbrajani","rozbrojeni","rozbudowani","rozbudowywani","rozbudzani","rozbudzeni","rozbujani","rozcapierzeni","rozchmurzeni","rozchodzeni","rozchylani","rozchyleni","rozciÄ…gani","rozcieÅ„czani","rozcieÅ„czeni","rozcierani","rozcinani","rozczarowani","rozczarowywani","rozczesani","rozczÅ‚onkowani","rozczulani","rozczytani","rozdani","rozdawani","rozdeptani","rozdmuchani","rozdmuchiwani","rozdrabniani","rozdrapani","rozdrapywani","rozdrażniani","rozdrażnieni","rozduszeni","rozdwojeni","rozdysponowani","rozdzielani","rozdzieleni","rozdzierani","rozdziewiczeni","rozebrani","rozedrani","rozegrani","rozegrywani","rozepchani","rozerwani","rozesÅ‚ani","rozgaszczani","rozglaszani","rozgÅ‚oszeni","rozgniatani","rozgniecieni","rozgniewani","rozgonieni","rozgraniczeni","rozgrani","rozgromieni","rozgrywani","rozgryzani","rozgryzieni","rozgrzani","rozgrzebywani","rozgrzeszeni","rozgrzewani","rozhuÅ›tani","rozjaÅ›niani","rozjaÅ›nieni","rozjechani","rozjedzeni","rozjuszani","rozjuszeni","rozkazani","rozkazywani","rozkÅ‚adani","rozklejani","rozklejeni","rozkoÅ‚ysani","rozkopani","rozkopywani","rozkoszowani","rozkrÄ™cani","rozkrÄ™ceni","rozkrojeni","rozkruszeni","rozkuwani","rozkwaszeni","rozkwaterowani","rozkwitani","rozłączeni","rozÅ‚adowani","rozÅ‚adowywani","rozÅ‚amani","rozlani","rozlewani","rozliczani","rozliczeni","rozlokowani","rozÅ‚ożeni","rozÅ‚upani","rozluźniani","rozmanażani","rozmasowani","rozmawiani","rozmazani","rozmazywani","rozmiÄ™kczeni","rozmieniani","rozmienieni","rozmieszczani","rozmieszczeni","rozmnożeni","rozmontowani","rozmówieni","rozmrażani","rozmrożeni","rozmyÅ›lani","różnicowani","rozniecani","rozniecieni","rozniesieni","różnieni","roznoszeni","rozochoceni","rozpaczani","rozpakowani","rozpakowywani","rozpalani","rozpaleni","rozpamiÄ™tywani","rozpaskudzani","rozpatrywani","rozpatrzeni","rozpÄ™dzani","rozpÄ™dzeni","rozpÄ™tani","rozpieszczani","rozpieszczeni","rozpiÅ‚owani","rozpinani","rozpisani","rozpisywani","rozplanowani","rozpÅ‚aszczani","rozpÅ‚aszczeni","rozplÄ…tani","rozplÄ…tywani","rozpoczynani","rozpogodzeni","rozporzÄ…dzani","rozporzÄ…dzeni","rozpoÅ›cierani","rozpostrzeni","rozpowiadani","rozpowiedziani","rozpowszechniani","rozpowszechnieni","rozpoznani","rozpoznawani","rozpracowani","rozpraszani","rozprawiani","rozprawiczeni","rozprawieni","rozprostowani","rozproszeni","rozprowadzani","rozprowadzeni","rozpruwani","rozprzestrzeniani","rozprzestrzenieni","rozpuszczani","rozpuszczeni","rozpychani","rozpylani","rozpyleni","rozpytani","rozpytywani","rozrastani","rozreklamowani","rozrobieni","rozróżniani","rozróżnieni","rozruszani","rozrysowani","rozrywani","rozrzucani","rozsadzani","rozsadzeni","rozsÄ…dzeni","rozÅ›cieleni","rozsiani","rozsiekani","rozsiewani","rozsiodÅ‚ani","rozsÅ‚awiani","rozsÅ‚awieni","rozsmarowani","rozsmarowywani","rozÅ›mieszani","rozstani","rozstÄ…pieni","rozstawani","rozstawiani","rozstawieni","rozstrojeni","rozstrzÄ…sani","rozstrzeliwani","rozstrzeleni","rozstrzygani","rozsupÅ‚ani","rozÅ›wietlani","rozÅ›wietleni","rozsyÅ‚ani","rozsypani","rozsypywani","rozszarpani","rozszarpywani","rozszczepiani","rozszczepieni","rozszerzani","rozszerzeni","rozszyfrowani","roztaczani","roztapiani","roztoczeni","roztopieni","roztrwonieni","roztrzÄ…sani","roztrzaskani","rozumiani","rozumowani","rozwalani","rozwaleni","rozważani","rozważeni","rozweselani","rozweseleni","rozwiani","rozwiÄ…zani","rozwiÄ…zywani","rozwidniani","rozwiedzieni","rozwierani","rozwierceni","rozwieszani","rozwieszeni","rozwiewani","rozwiezieni","rozwikÅ‚ani","rozwlekani","rozwodzeni","rozwÅ›cieczani","rozwÅ›cieczeni","rozzÅ‚oszczeni","rugani","ruinowani","rujnowani","ruszani","ruszeni","rwani","ryczani","ryglowani","rymowani","rysowani","ryzykowani","rzÄ…dzeni","rzeźbieni","rzucani","rzuceni","rzygani","sabotażowani","sÄ…czeni","sadzani","sadzeni","sÄ…dzeni","salutowani","salwowani","sankcjonowani","satysfakcjonowani","scaleni","scementowani","scentrowani","scharakteryzowani","schÅ‚adzani","schlani","schlapani","schlebieni","schÅ‚odzeni","schowani","schronieni","schrupani","schrzanieni","schwytani","schylani","Å›cieleni","Å›ciemniani","Å›ciemnieni","Å›cierani","Å›cierpieni","Å›cigani","Å›cinani","Å›ciskani","Å›ciszani","Å›ciszeni","sÄ™dziowani","segregowani","selekcjonowani","separowani","sÄ™pieni","serwowani","sfabrykowani","sfajczeni","sfaÅ‚szowani","sfaulowani","sfilmowani","sfinalizowani","sfinansowani","sfingowani","sformalizowani","sformatowani","sformowani","sformuÅ‚owani","sforsowani","sfotografowani","shimmerowani","siani","siekani","siorbani","skadrowani","skakani","skalani","skaleczeni","skalibrowani","skalkulowani","skalpowani","skanalizowani","skandowani","skanowani","skapitulowani","skarceni","skarżeni","skasowani","skatalogowani","skazani","skażeni","skazywani","skierowani","skÅ‚adani","skÅ‚adowani","skÅ‚aniani","sklasyfikowani","sklecieni","sklejani","sklejeni","sklepani","skłóceni","skÅ‚onieni","sklonowani","sknoceni","skojarzeni","skolonizowani","skoÅ‚owani","skombinowani","skomentowani","skompensowani","skompletowani","skomplikowani","skomponowani","skompresowani","skompromitowani","skomunikowani","skonani","skoncentrowani","skoÅ„czeni","skondensowani","skonfigurowani","skonfiskowani","skonfrontowani","skonkretyzowani","skonsolidowani","skonstruowani","skonsultowani","skonsumowani","skontaktowani","skontrolowani","skoordynowani","skopani","skopiowani","skorektowani","skorumpowani","skorygowani","skorzystani","skoszeni","skracani","skradzieni","skrÄ™cani","skrÄ™ceni","skremowani","skreÅ›lani","skreÅ›leni","skrobani","skróceni","skrojeni","skropieni","skruszeni","skrystalizowani","skrytykowani","skrywani","skrzecowani","skrzyczani","skrzywdzeni","skrzyżowani","skserowani","skubani","skuleni","skumulowani","skupiani","skupieni","skupowani","skurczeni","skuszeni","skuwani","skwitowani","sÅ‚ani","sÅ‚awieni","Å›ledzeni","Å›linieni","Å›lizgani","sÅ‚odzeni","sÅ‚uchani","sÅ‚yszani","smagani","smarowani","smażeni","Å›mieceni","smyrani","sondowani","sortowani","spafycikowani","spakowani","spalani","spaÅ‚aszowani","spaleni","spaÅ‚owani","spamiÄ™tani","spaprani","sparafrazowani","sparaliżowani","sparowani","spartaczeni","spartoleni","sparzeni","spasowani","spataÅ‚aszeni","spauzowani","spawani","spawieni","specjalizowani","spÄ™dzani","spÄ™dzeni","spekulowani","speÅ‚niani","speÅ‚nieni","spenetrowani","spÄ™tani","spierani","Å›piewani","spiÅ‚owani","spinani","spisani","spiskowani","spisywani","spÅ‚acani","spÅ‚aceni","splÄ…drowani","splajtowani","splamieni","spÅ‚aszczeni","splatani","splÄ…tani","spÅ‚atani","spÅ‚awiani","spÅ‚awieni","spÅ‚odzeni","spÅ‚oszeni","spÅ‚ukani","spÅ‚ukiwani","spluwani","spÅ‚ywani","spoczywani","spodziewani","spojeni","spolaryzowani","spoliczkowani","sponiewierani","sponsorowani","spopielani","spopieleni","spopularyzowani","sportretowani","sporzÄ…dzani","sporzÄ…dzeni","spostrzegani","spotÄ™gowani","spotkani","spotykani","spoufalani","spowalniani","spowiadani","spowodowani","spowolnieni","spoźnieni","spóźnieni","spożytkowani","spożywani","sprani","sprasowani","spraszani","sprawdzeni","sprawieni","sprawowani","sprecyzowani","spreparowani","sprężani","sprężeni","spróbowani","sprofanowani","sprofilowani","sprostowani","sproszkowani","sproszeni","sprowadzani","sprowadzeni","sprowokowani","spryskani","spryskiwani","sprywatyzowani","sprzÄ…tani","sprzeczani","sprzedani","sprzedawani","sprzeniewierzeni","spudÅ‚owani","spustoszeni","spuszczani","spuszczeni","spychani","ssani","stabilizowani","stacjonowani","staczani","staranowani","starczani","stargowani","startowani","stawiani","stawieni","stemplowani","stenografowani","stepowani","sterowani","sterroryzowani","sterylizowani","stÅ‚amszeni","stÅ‚umieni","stoczeni","stoÅ‚owani","stonowani","stopieni","stopniowani","storpedowani","stosowani","strÄ…cani","straceni","strÄ…ceni","strajkowani","straszeni","stratowani","strawieni","streamowani","stresowani","streszczani","streszczeni","strofowani","strojeni","stroszeni","strugani","strymowani","strzÄ…sani","strzaskani","strzeleni","strzepani","strzÄ™pieni","strzepywani","studiowani","studzeni","stukani","stuleni","stwardnieni","stwarzani","stwierdzani","stwierdzeni","stworzeni","stykani","stylizowani","stymulowani","sugerowani","sumowani","swatani","swawoleni","Å›wiadczeni","Å›wieceni","Å›wiÄ™ceni","Å›wierzbieni","Å›wiÄ™towani","Å›wintuszeni","syceni","sygnalizowani","symulowani","synchronizowani","sypani","szachrowani","szacowani","szafowani","szamotani","szanowani","szargani","szarpani","szarżowani","szasowani","szastani","szatkowani","szczÄ™dzeni","szczepieni","szczerzeni","szczyceni","szczypani","szczytowani","szefowani","szemrani","szeptani","szerzeni","szkalowani","szkicowani","szkleni","szkodzeni","szkoleni","szlachtowani","szlifowani","szmuglowani","szokowani","szorowani","szpachlowani","szpanowani","szperani","szprycowani","szturchani","szturmowani","szufladkowani","szuflowani","szukani","szulerowani","szwankowani","szydeÅ‚kowani","szydzeni","szyfrowani","szykanowani","szykowani","taktowani","tamowani","tankowani","tapetowani","taplani","taranowani","targani","targowani","tarmoszeni","tarzani","tasowani","taszczeni","tatuowani","telefonowani","telegrfowani","teleportowani","temperowani","teoretyzowani","tÄ™pieni","terroryzowani","testowani","tkani","tÅ‚amszeni","tÅ‚oczeni","tÅ‚umaczeni","tÅ‚umieni","toczeni","tolerowani","tonowani","topieni","torowani","torturowani","towarzyszeni","trÄ…bieni","trÄ…cani","traceni","trÄ…ceni","trafiani","trafieni","tragizowani","traktowani","transferowani","transformowani","transmitowani","transportowani","tratowani","trawieni","trenowani","tresowani","triumfowani","tropieni","troszczeni","trwonieni","trymowani","tryskani","tryumfowani","trywializowani","trzaskani","trzepani","trzepotani","trzÄ™sieni","trzymani","tuczeni","tuÅ‚ani","tuleni","turlani","tuszowani","twistowani","tworzeni","tykani","tyranizowani","tyrani","tytuÅ‚owani","uaktualniani","uaktualnieni","uaktywniani","uaktywnieni","uargumentowani","uatrakcyjnieni","ubabrani","ubarwiani","ubarwieni","ubawieni","ubezpieczani","ubezpieczeni","ubezwÅ‚asnowolnieni","ubiczowani","ubiegani","ubierani","ubijani","ubÅ‚agani","ubliżani","ubliżeni","ubolewani","ubóstwiani","ubrani","ubroczeni","ubrudzeni","ucaÅ‚owani","ucharakteryzowani","uchowani","uchronieni","uchwalani","uchwaleni","uchwyceni","uchylani","uchyleni","ucieleÅ›niani","ucierani","ucierpiani","ucinani","uciskani","uciszani","uciszeni","uciuÅ‚ani","ucywilizowani","uczczeni","uczepieni","uczesani","uczÄ™szczani","uczeni","ucztowani","uczynieni","udani","udaremnieni","udawani","udekorowani","udeptywani","uderzani","uderzeni","udobruchani","udokumentowani","udomawiani","udomowieni","udoskonalani","udoskonaleni","udostÄ™pniani","udostÄ™pnieni","udowadniani","udowodnieni","Udramatyzowani","udrÄ™czeni","udrożnieni","udupieni","uduszeni","udzielani","udzieleni","ueiwarygodnieni","ufani","ufarbowani","uformowani","ufortyfikowani","ufundowani","ugadani","uganiani","ugaszani","ugaszeni","uginani","ugÅ‚askani","ugniatani","ugodzeni","ugoszczeni","ugotowani","ugrani","ugruntowani","ugryzieni","uhistoryzowani","uhonorowani","ujadani","ujarzmiani","ujarzmieni","ujawniani","ujawnieni","ujeżdżani","ujeżdżeni","ujmowani","ujrzani","ukamieniowani","ukarani","ukartowani","ukÄ…szeni","ukatrupieni","ukazani","ukazywani","ukierowani","ukierunkowani","ukÅ‚adani","uklepani","ukÅ‚onieni","ukojeni","ukoÅ‚ysani","ukoÅ„czeni","ukonkretnieni","ukoronowani","ukradzieni","ukrÄ™cani","ukrÄ™ceni","ukrojeni","ukrywani","ukrzyżowani","uksztaÅ‚towani","uÅ‚agodzeni","uÅ‚askawiani","uÅ‚askawieni","ulatniani","uÅ‚atwiani","uÅ‚atwieni","uleczani","uleczeni","ulegani","ulepieni","ulepszani","ulepszeni","ulokowani","ulotnieni","uÅ‚ożeni","umacniani","umalowani","umartwiani","umawiani","umazani","umeblowani","umiejscowieni","umieszczani","umieszczeni","umilani","umileni","umniejszani","umniejszeni","umocnieni","umocowani","umoczeni","umodelowani","umorzeni","umotywowani","umówieni","umożliwiani","umożliwieni","umrocznieni","unaocznieni","unicestwiani","unicestwieni","uniemożliwaini","uniemożliwieni","unierochomieni","uniesieni","unieszczęśliwiani","unieszczęśliwieni","unieszkodliwiani","unieszkodliwieni","unieważniani","unieważnieni","uniewinnieni","uniezależnieni","unikani","unormowani","unoszeni","unowoczesniani","unowoczeÅ›niani","uodpornieni","uogólniani","upakowani","upalani","upaleni","upamiÄ™tniani","upamiÄ™tnieni","upaÅ„stwowieni","upaprani","upaskudzeni","upchani","upewniani","upewnieni","upgradowani","upiÄ™kszani","upiÄ™kszeni","upierani","upierdoleni","upijani","upilnowani","upinani","uplastycznieni","upodabniani","upodobnieni","upojeni","upokorzani","upokorzeni","upolowani","upominani","uporzÄ…dkowani","upowszechnieni","upozorowani","upozowani","uprani","uprasowani","upraszczani","uprawdopodobnieni","uprawiani","uproszczeni","uproszeni","uprowadzani","uprowadzeni","uprzÄ…tani","uprzedeni","uprzedzani","uprzyjemniani","uprzyjemnieni","uprzykrzani","uprzytomnieni","upubliczniani","upublicznieni","upudrowani","upuszczani","upuszczeni","upychani","urabiani","uraczani","uradowani","UrÄ…gani","uratowani","urażani","urażeni","uregulowani","urobieni","uronieni","urozmaicani","urozmaiceni","uruchamiani","uruchomieni","urwani","urywani","urzÄ…dzani","urzÄ…dzeni","urzeczywistniani","urzeczywistnieni","usadowieni","usadzeni","usamowolnieni","usankcjonowani","usatyfakcjonowani","uÅ›ciskani","uÅ›cisleni","usidleni","usiedzeni","uskÅ‚adani","uskoczeni","uskuteczniani","uskutecznieni","usÅ‚uchani","usÅ‚ugiwani","usÅ‚użeni","usÅ‚yszani","usmażeni","uÅ›miani","uÅ›miercani","uÅ›mierceni","uÅ›mierzeni","uspani","uÅ›pieni","uspokajani","uspokojeni","uspoÅ‚eczniani","usprawiedliwiani","usprawiedliwieni","usprawnieni","usprzÄ…tani","ustabilizowani","ustalani","ustaleni","ustanawiani","ustanowieni","ustÄ…pieni","ustatkowani","ustawiani","ustawieni","ustÄ™powani","ustosunkowani","ustrojeni","ustrzegani","ustrzeleni","ususzeni","usuwani","uÅ›wiadamiani","uÅ›wiadczeni","uÅ›wiadomieni","uÅ›wiÄ™ceni","uÅ›winieni","usychani","usypani","usypiani","usystematyzowani","usytuowani","uszanowani","uszczelniani","uszczęśliwiani","uszczęśliwieni","uszczupleni","uszkadzani","uszkodzeni","uszlachetniani","uszlachetnieni","usztywnieni","uszykowani","utajnieni","utargowani","utemperowani","utkani","utkwieni","utoczeni","utopieni","utorowani","utożsamiani","utożsamieni","utraceni","utrÄ…ceni","utrudniani","utrudnieni","utrwalani","utrwaleni","utrzymywani","utuczeni","utuleni","utwierdzani","utwierdzeni","utworzeni","utylizowani","uwalniani","uwaleni","uwarunkowani","uważani","uwiÄ…zani","uwiÄ…zywani","uwidocznieni","uwieczniani","uwiecznieni","uwielbiani","uwielbieni","uwieÅ„czeni","uwierani","uwierzeni","uwieszeni","uwiezieni","uwiÄ™zieni","uwijani","uwikÅ‚ani","uwÅ‚aczani","uwÅ‚aszczeni","uwodzeni","uwolnieni","uwsteczniani","uwstecznieni","uwydatniani","uwypikleni","uwzglÄ™dniani","uwzglÄ™dnieni","użądleni","uzależniani","uzależnieni","uzasadniani","uzasadnieni","uzbierani","uzbrajani","uzbrojeni","uzdrawiani","uzdrowieni","użerani","uzewnÄ™trzniani","uzewnÄ™trznieni","uzgadniani","uzgodnieni","uziemieni","uzmysÅ‚owieni","uznani","uznawani","uzupeÅ‚niani","uzupeÅ‚nieni","uzurpowani","użyczani","użyczeni","uzyskani","uzyskiwani","używani","wabieni","wÄ…chani","wachlowani","wahani","walczeni","waÅ‚kowani","waleni","ważeni","wbijani","wcelowani","wciÄ…gani","wcielani","wcieleni","wcierani","wcinani","wciskani","wczepieni","wczoÅ‚gani","wczytani","wczytywani","wdani","wdawani","wdeptani","wdetonowani","wdmuchiwani","wdrapani","wdrapywani","wdrażani","wdrążeni","wdrożeni","wduszeni","wdychani","wdzierani","wÄ™dkowani","wentylowani","wepchani","werbowani","weryfikowani","wessani","wetkani","wezwani","wgłębiani","wgniatani","wgniecieni","wgrani","wgryzani","wgryzieni","wiÄ…zani","wibrowani","widywani","widziani","wiedzeni","wielbieni","wierceni","wierzgani","wierzeni","wieszani","wietrzeni","więżeni","wikÅ‚ani","windowani","winszowani","wiosÅ‚owani","wirowani","witani","wizualizowani","wjeżdżani","wkalkulowani","wkÅ‚adani","wklejani","wklejeni","wklepani","wkomponowani","wkopani","wkopywani","wkraczani","wkradani","wkradzieni","wkrÄ™cani","wkrÄ™ceni","wkupieni","wkurwiani","wkuwani","włączani","włączeni","wÅ‚adani","wÅ‚adowani","wÅ‚amani","wÅ‚amywani","wlani","wlepiani","wlepieni","wlewani","wliczani","wliczeni","wÅ‚ożeni","wmanewrowani","wmanipulowani","wmawiani","wmieszani","wmówieni","wmurowani","wmuszeni","wnerwiani","wnerwieni","wniesieni","wnikani","wnioskowani","wnoszeni","wodowani","wojowani","woÅ‚ani","woskowani","wożeni","wpajani","wpakowani","wparowani","wpasowani","wpatrywani","wpÄ™dzani","wpÄ™dzeni","wperswadowani","wpienieni","wpisani","wpisywani","wpÅ‚acani","wpÅ‚aceni","wplatani","wplÄ…tani","wplÄ…tywani","wpojeni","wpompowani","wpraszani","wprawiani","wproszeni","wprowadzani","wprowadzeni","wpuszczeni","wpychani","wrabiani","wrÄ™czani","wrobieni","wróżeni","wrzucani","wrzuceni","wrzynani","wsadzani","wsadzeni","wskazani","wskazywani","wskórani","wskrzeszani","wskrzeszeni","wÅ›lizgiwani","wsÅ‚uchani","wspierani","współodczuwani","współtworzeni","wspomagani","wspominani","wspomniani","wstÄ…pieni","wstawiani","wstawieni","wstrzÄ…sani","wstrzeleni","wstrzykiwani","wstrzymani","wstrzymywani","wstukani","wsuwani","wsypani","wszamani","wszczepiani","wszczepieni","wszczynani","wtajemniczani","wtajemniczeni","wtapiani","wtaszczeni","wtÅ‚oczeni","wtopieni","wtrÄ…ceni","wtryniani","wtulani","wtuleni","wtykani","wwaleni","wwiercani","wwierceni","wwiezieni","wwożeni","wyartykuÅ‚owani","wyautowani","wybaczani","wybaczeni","wybadani","wybatożeni","wybawieni","wybebeszeni","wybeÅ‚kotani","wybiczowani","wybielani","wybieleni","wybierani","wybijani","wybÅ‚agani","wybrandzlowani","wybrani","wybronieni","wybrzydzani","wybuchani","wybudowani","wybudzani","wybudzeni","wyburzani","wyburzeni","wycackani","wycaÅ‚owani","wyceniani","wycenieni","wychlani","wychÅ‚ostani","wychodowani","wychowani","wychowywani","wychrobotani","wychwalani","wychwyceni","wychylani","wychyleni","wyciÄ…gani","wyciekani","wycieniowani","wycierani","wycinani","wyciskani","wyciszani","wyciszeni","wycofani","wyćwiczeni","wycyckani","wycyganieni","wyczarowani","wyczarterowani","wyczekani","wyczekiwani","wyczerpani","wyczesani","wyczoÅ‚gani","wyczoÅ‚giwani","wyczuwani","wyczyniani","wyczyszczeni","wyczytani","wyczytywani","wydalani","wydaleni","wydani","wydÄ™bieni","wydedukowani","wydelegowani","wydepilowani","wydeptywani","wydÅ‚ubani","wydÅ‚ubywani","wydÅ‚użani","wydÅ‚użeni","wydmuchani","wydmuchiwani","wydobywani","wydojeni","wydoroÅ›lani","wydostani","wydrani","wydrapani","wydrapywani","wydrążeni","wydrukowani","wydukani","wyduszeni","wydychani","wydziedziczeni","wydzielani","wydzieleni","wydzierani","wydzierżawieni","wydziobani","wydziwiani","wydzwaniani","wyedukowani","wyedytowani","wyeeliminowani","wyegzekwowani","wyeksmitowani","wyekspediowani","wyeksploatowani","wyeksponowani","wyeksportowani","wyeliminowani","wyemigrowani","wyemitowani","wyewoluowani","wygadani","wygadywani","wyganiani","wygarbowani","wygarniani","wygasani","wygaszani","wygaszeni","wygenerowani","wyginani","wygÅ‚adzani","wygÅ‚adzeni","wygÅ‚aszani","wygÅ‚odzeni","wygÅ‚osowani","wygÅ‚oszeni","wygłówkowani","wygnani","wygoleni","wygonieni","wygooglowani","wygospodarowani","wygotowani","wygrani","wygrawerowani","wygrażani","wygrywani","wygryzieni","wygrzani","wygrzebani","wygrzebywani","wygrzewani","wygubieni","wyhaczeni","wyhaftowani","wyhamowani","wyhodowani","wyizolowani","wyjadani","wyjaÅ›niani","wyjaÅ›nieni","wyjawiani","wyjawieni","wyjedzeni","wyjmowani","wykadrowani","wykalibrowani","wykalkulowani","wykaÅ„czani","wykantowani","wykÄ…pani","wykaraskani","wykarczowani","wykarmiani","wykasowani","wykastrowani","wykazani","wykazywani","wykierowani","wykitowani","wykiwani","wykÅ‚adani","wyklarowani","wyklepani","wyklinani","wykłócani","wykluczani","wykluczeni","wykminieni","wykolejeni","wykoÅ‚owani","wykombinowani","wykonani","wykoÅ„czeni","wykonywani","wykopani","wykopywani","wykorkowani","wykorzeniani","wykorzenieni","wykorzystani","wykorzystywani","wykoszeni","wykradani","wykrÄ™cani","wykrÄ™ceni","wykreowani","wykreÅ›lani","wykreÅ›leni","wykrochmaleni","wykrojeni","wykrwawiani","wykrwawieni","wykrywani","wykrzesani","wykrztuszeni","wykrzyczeni","wykrzykiwani","wykrzywiani","wyksztaÅ‚ceni","wyksztuszeni","wykupieni","wykupywani","wykuwani","wyłączani","wyłączeni","wylÄ…dowani","wyÅ‚adowani","wyÅ‚adowywani","wyÅ‚ajani","wyÅ‚amani","wyÅ‚amywani","wyÅ‚aniani","wylansowani","wylani","wyÅ‚apani","wyÅ‚apywani","wyÅ‚awiani","wyleasingowani","wyleczeni","wylÄ™gani","wylegimytowani","wylewani","wyÅ‚gani","wylicytowani","wyliczani","wyliczeni","wylizani","wylizywani","wylogowani","wyÅ‚onieni","wylosowani","wyÅ‚owieni","wyÅ‚ożeni","wyÅ‚udzani","wyÅ‚udzeni","wyÅ‚upani","wyÅ‚uskani","wyÅ‚uskiwani","wyÅ‚uszczeni","wyluzowani","wymacani","wymachiwani","wymagani","wymahiwani","wymalowani","wymamrotani","wymanewrowani","wymarzeni","wymasowani","wymawiani","wymazani","wymazywani","wymeldowani","wymeldowywani","wymiatani","wymiecieni","wymieniani","wymienieni","wymierzani","wymieszani","wymigani","wymigiwani","wymijani","wymoczeni","wymodelowani","wymontowani","wymordowani","wymuszani","wymyÅ›lani","wymyÅ›leni","wynagradzani","wynagrodzeni","wynajdowani","wynajdywani","wynajmowani","wynalezieni","wynarodowieni","wynegocjowani","wyniesieni","wyniszczani","wyniszczeni","wyniuchani","wynoszeni","wynurzani","wyobrażani","wyobrażeni","wyodrÄ™bnieni","wyolbrzymiani","wyolbrzymieni","wyorbowani","wyosiowani","wyostrzani","wyostrzeni","wypaczani","wypakowani","wypakowywani","wypalani","wypaleni","wypaÅ‚owani","wyparowani","wypasani","wypastowani","wypatroszeni","wypatrywani","wypatrzeni","wypchani","wypÄ™dzani","wypÄ™dzlowani","wypeÅ‚niani","wypeÅ‚nieni","wypersfadowani","wyperswadowani","wypierani","wypijani","wypinani","wypisani","wypisywani","wypÅ‚acani","wypÅ‚aceni","wypÅ‚akani","wypÅ‚akiwani","wypÅ‚aszczeni","wyplatani","wyplÄ…tani","wyplenieni","wyplewieni","wypÅ‚oszeni","wypÅ‚ukani","wypÅ‚ukiwani","wypluwani","wypoceni","wypolerowani","wypominani","wypomniani","wypompowani","wypompowywani","wyposażeni","wypowiadani","wypowiedziani","wypoziomowani","wypożyczani","wypracowani","wypracowywani","wyprani","wyprasowani","wypraszani","wyprawiani","wyprawieni","wypróbowani","wyprodukowani","wyprojektowani","wypromieniowani","wypromowani","wyprostowani","wyprostowywani","wyproszeni","wyprowadzani","wyprowadzeni","wypróżniani","wypróżnieni","wypruwani","wyprzedani","wyprzedawani","wyprzedzani","wyprzedzeni","wyprzÄ™gani","wypstrykani","wypucowani","wypuszczani","wypuszczeni","wypychani","wypytani","wypytywani","wyrÄ…bani","wyrabiani","wyrÄ…bywani","wyratowani","wyrażani","wyrażeni","wyrecytowani","wyrÄ™czani","wyrÄ™czeni","wyregulowani","wyrejestrowani","wyremontowani","wyreżyserowani","wyrobieni","wyrolowani","wyrównani","wyrównywani","wyróżniani","wyróżnieni","wyrugowani","wyruszani","wyrwani","wyrypani","wyrysowani","wyrywani","wyrzÄ…dzeni","wyrzeźbieni","wyrzucani","wyrzuceni","wyrzygani","wyrzynani","wyrzywani","wysÄ…czeni","wysadzani","wysadzeni","wyÅ›ciskani","wyselekcjonowani","wysÄ™pieni","wysiadywani","wysiedzeni","wysilani","wysileni","wyskakiwani","wyskalowani","wyskoczeni","wyskrobani","wyskubywani","wysÅ‚ani","wyÅ›ledzeni","wyÅ›lizgiwani","wysÅ‚owieni","wysÅ‚uchani","wysÅ‚uchiwani","wysmagani","wysmarkani","wysmarowani","wysmażani","wysmażeni","wyÅ›miani","wyÅ›miewani","wysmoÅ‚owani","wysmyrani","wyÅ›nieni","wysnuwani","wysondowani","wyspecjalizowani","wyÅ›piewani","wyÅ›piewywani","wyspowiadani","wysprzÄ…tani","wysprzedani","wyssani","wystartowani","wystawieni","wysterelizowani","wysterylizowani","wystosowani","wystosowywani","wystraszeni","wystrojeni","wystrugani","wystrzegani","wystrzelani","wystrzeliwani","wystrzeleni","wystudzeni","wystukani","wystukiwani","wysuszani","wysuwani","wyswatani","wyÅ›wiadczani","wyÅ›wiadczeni","wyÅ›wietlani","wyÅ›wietleni","wyswobodzeni","wysyÅ‚ani","wysypani","wysypywani","wysysani","wyszabrowani","wyszalani","wyszarpani","wyszasowani","wyszczotkowani","wyszczupleni","wyszeptani","wyszkoleni","wyszlifowani","wyszorowani","wyszperani","wyszukani","wyszukiwani","wyszumieni","wyszykowani","wytapetowani","wytargani","wytargowani","wytarzani","wytaszczeni","wytatuowani","wytÄ™pieni","wytÅ‚oczeni","wytÅ‚umaczeni","wytÅ‚umieni","wytoczeni","wytrÄ…bieni","wytrÄ…cani","wytrÄ…ceni","wytransmitowani","wytransportowani","wytrenowani","wytresowani","wytriangulowani","wytropieni","wytrzÄ…sani","wytrzebieni","wytrzepani","wytrzeszczani","wytrzeźwiani","wytrzymani","wytrzymywani","wytwarzani","wytworzeni","wytyczeni","wytykani","wytypowani","wyuczeni","wywabiani","wywabieni","wywÄ…chani","wywalani","wywalczeni","wywaleni","wywarzani","wyważani","wyważeni","wywÄ™szani","wywężykowani","wywiani","wywiÄ…zani","wywiÄ…zywani","wywierani","wywierceni","wywieszani","wywieszeni","wywietrzeni","wywiezieni","wywijani","wywindowani","wywÅ‚aszczeni","wywlekani","wywnÄ™trznieni","wywnioskowani","wywodzeni","wywolani","wywoÅ‚ywani","wywoskowani","wywożeni","wywracani","wywróceni","wywróżeni","wywyższani","wyżaleni","wyzdrowieni","wyżebrani","wyżerani","wyzerowani","wyznaczani","wyznaczeni","wyznani","wyznawani","wyzwalani","wyzwani","wyzwoleni","wyzygzakowani","wyżynani","wyzyskani","wyzyskiwani","wyzywani","wyżywani","wyżywieni","wzbijani","wzbogacani","wzbogaceni","wzbraniani","wzbudzani","wzbudzeni","wzburzani","wzburzeni","wżenieni","wzmacnieni","wzmagani","wzmocnieni","wznawiani","wzniecani","wzniecieni","wznoszeni","wznowieni","wzorowani","wzruszeni","wzwyżani","wzywani","zaabordowani","zaadaptowani","zaadoptowani","zaadresowani","zaakcentowani","zaakceptowani","zaaklimatyzowani","zaalarmowani","zaanektowani","zaangażowani","zaanonsowani","zaapelowani","zaaplikowani","zaaportowani","zaaprobowani","zaaranżowani","zaaresztowani","zaatakowani","zabaczeni","zabalowani","zabandażowani","zabarwieni","zabarykadowani","zabawiani","zabawieni","zabepieczani","zabetonowani","zabezpieczeni","zabierani","zabłądzeni","zablefowani","zabÅ‚oceni","zablokowani","zabraniani","zabrani","zabronieni","zabrudzeni","zabudowani","zabukowani","zabuleni","zaburzeni","zabutelkowani","zacementowani","zacerowani","zachciani","zachÄ™cani","zachÄ™ceni","zachlapani","zachodzeni","zachomikowani","zachorowani","zachowani","zachowywani","zachwalani","zachwaleni","zachwiani","zachwyceni","zaciÄ…gani","zaciążeni","zaciekawieni","zaciemniani","zaciemnieni","zacierani","zacieÅ›nieni","zacinani","zaciskani","zaćmieni","zacumowani","zacytowani","zaczadzeni","zaczarowani","zaczepiani","zaczepieni","zaczerpani","zaczesani","zaczoÅ‚gani","zaczynani","zadawalani","zadawani","zadbani","zadebiutowani","zadedykowani","zadeklamowani","zadeklarowani","zademonstrowani","zadenucjowani","zadepeszowani","zadeptani","zadeptywani","zadÅ‚awieni","żądleni","zadÅ‚użani","zadÅ‚użeni","zadokowani","zadomowieni","zadowalani","zadrapani","zadrÄ™czani","zadrÄ™czeni","zadrutowani","zadurzani","zadurzeni","zaduszeni","zadymieni","zadźgani","zadziobani","zadziwiani","zadziwieni","zafakturowani","zafaÅ‚szowani","zafarbowani","zafiksowani","zafundowani","zagadani","zagadywani","zagajeni","zaganiani","zagapieni","zagarażowani","zagarniani","zagaszeni","zagazowani","zagÄ™szczeni","zaginani","zagłębiani","zagłębieni","zagÅ‚odzeni","zagÅ‚uszani","zagÅ‚uszeni","zagmatwani","zagnani","zagnieżdżeni","zagojeni","zagonieni","zagospodarowani","zagotowani","zagrabieni","zagradzani","zagrażani","zagrodzeni","zagrywani","zagryzani","zagryzieni","zagrzani","zagrzebani","zagrzewani","zagubieni","zagwarantowani","zahaczeni","zahamowani","zahandlowani","zaharowani","zahartowani","zahipnotyzowani","zaholowani","zaimitowani","zaimplantowani","zaimplementowani","zaimprowizowani","zainaugurowani","zainfekowani","zainicjowani","zainkasowani","zainscenizowani","zainspirowani","zainstalowani","zainteresowani","zaintrygowani","zaintubowani","zainwestowani","zaizolowani","zajadani","zajani","zajarani","zajechani","zajmowani","zakablowani","zakamuflowani","zakasani","zakasowani","zakÄ…szani","zakatalogowani","zakatowani","zakatrupieni","zakazani","zakażani","zakazywani","zakiszeni","zakÅ‚adani","zaklasyfikowani","zaklejani","zaklejeni","zaklepani","zaklepywani","zaklinani","zaklinowani","zakłócani","zakłóceni","zaklopotani","zakneblowani","zakodowani","zakolczykowani","zakolorowani","zakoÅ‚ysani","zakomunikowani","zakoÅ„czeni","zakonserwowani","zakopani","zakopywani","zakorzeniani","zakorzenieni","zakoszeni","zakosztowani","zakotwiczani","zakotwiczeni","zakpieni","zakradani","zakrÄ™cani","zakrÄ™ceni","zakreÅ›lani","zakreÅ›leni","zakrwawieni","zakrywani","zakrzyczani","zakrzywiani","zakrzywieni","zaksiÄ™gowani","zaktualizowani","zaktywizowani","zaktywowani","zakumani","zakupieni","zakurzeni","zakuwani","zakwaterowani","załączeni","zaÅ‚adowani","zaÅ‚agodzeni","zalamani","zalaminowani","zaÅ‚amywani","zalani","zaÅ‚apani","zaÅ‚atani","zaÅ‚atwiani","zaÅ‚atwieni","zalatywani","zalecani","zaleceni","zaleczeni","zalegalizowani","zalegani","zalepiani","zalepieni","zalewani","zaliczani","zaliczeni","zaÅ‚kani","zalogowani","żaÅ‚owani","zaÅ‚ożeni","zaludnieni","zamacani","zamÄ…ceni","zamalowani","zamanewrowani","zamanifestowani","zamarkowani","zamartwiani","zamarynowani","zamarzani","zamaskowani","zamawiani","zamazani","zamazywani","zamÄ™czani","zamÄ™czeni","zameldowani","zamelinowani","zamerykanizowani","zamiatani","zamieniani","zamienieni","zamieszani","zamieszczani","zamieszczeni","zamieszkani","zamieszkiwani","zaminowani","zamocowani","zamoczeni","zamontowani","zamordowani","zamortyzowani","zamotani","zamówieni","zamrażani","zamroczeni","zamrożeni","zamulani","zamurowani","zamydleni","zamykani","zanalizowani","zanegowani","zaniechani","zanieczyszczani","zanieczyszczeni","zaniedbani","zaniedbywani","zaniepokojeni","zaniesieni","zanihilowani","zanikani","zaniżani","zaniżeni","zanoszeni","zanotowani","zanuceni","zanudzani","zanudzeni","zanurzani","zanurzeni","zanużeni","zaobaczeni","zaobserwowani","zaoferowani","zaofiarowani","zaogniani","zaognieni","zaokrÄ…glani","zaokrÄ…gleni","zaokrÄ™towani","zaopatrywani","zaopatrzeni","zaopiekowani","zaorani","zaostrzani","zaostrzeni","zaoszczÄ™dzeni","zapadani","zapakowani","zapalani","zapaleni","zapamiÄ™tani","zapamiÄ™tywani","zapanowani","zaparkowani","zaparowywani","zaparzani","zaparzeni","zapaskudzeni","zapauzowani","zapchani","zapÄ™dzani","zapeÅ‚niani","zapeÅ‚nieni","zaperfumowani","zapeszani","zapewniani","zapewnieni","zapieczÄ™towani","zapierani","zapijani","zapinani","zapisani","zapisuwani","zapÅ‚aceni","zapÅ‚adniani","zaplamieni","zaplanowani","zaplÄ…tani","zapÅ‚odnieni","zaplombowani","zapobiegani","zapodani","zapodawani","zapodziani","zapokojeni","zapolowani","zapominani","zapomniani","zapowiadani","zapowiedziani","zapoznani","zapoznawani","zapożyczeni","zapracowywani","zaprani","zaprasowywani","zapraszani","zaprawieni","zaprenumerowani","zaprezentowani","Zaprogramowani","zaprojektowani","zaproponowani","zaproszeni","zaprotokoÅ‚owani","zaprowadzani","zaprowadzeni","zaprzÄ…tani","zaprzeczani","zaprzeczeni","zaprzedani","zaprzedawani","zaprzÄ™gani","zaprzepaszczani","zaprzestani","zaprzestawani","zaprzyjaźnieni","zapudÅ‚owani","zapunktowani","zapuszczani","zapuszczeni","zapuszkowani","zapychani","zapylani","zapyleni","zapytani","zarabiani","zaranżowani","zarażani","zarażeni","zarecytowani","zarÄ™czani","zarÄ™czeni","zarejestrowani","zareklamowani","zarekomendowani","zarekomondowani","zarekwirowani","zarezerwowani","zarobieni","żartowani","zarwani","zaryglowani","zarymowani","zarysowani","zarywani","zaryzykowani","zarzÄ…dzani","zarzucani","zarzynani","zasadzeni","zaÅ›cieleni","zasegurowani","zaserwowani","zasiadani","zasiani","zasiedleni","zasiÄ™gani","zasiewani","zasilani","zasileni","zaskakiwani","zaskarbieni","zaskoczeni","zaskrobani","zasÅ‚aniani","zaÅ›lepiani","zaÅ›lepieni","zasÅ‚odzeni","zasÅ‚onieni","zasÅ‚użeni","zasmakowani","zaÅ›miecani","zaÅ›mieceni","zasmradzani","zasmrodzeni","zasmucani","zasmuceni","zasoleni","zaspakajani","zaÅ›piewani","zaspokajani","zaspokojeni","zasponsorowani","zaÅ›rubowywani","zassani","zastani","zastÄ…pieni","zastawiani","zastawieni","zastÄ™powani","zastopowani","zastosowani","zastraszani","zastraszeni","zastrzeleni","zasugerowani","zasuwani","zaÅ›wiadczeni","zaÅ›wieceni","zaÅ›wionieni","zasyfieni","zasygnalizowani","zasymilowani","zasymulowani","zasypani","zasypywani","zasysani","zaszachowani","zaszantażowani","zaszargani","zaszczepiani","zaszczepieni","zaszczycani","zaszczyceni","zaszeptani","zaszeregowani","zaszlachtowani","zasznurowani","zaszpachlowani","zasztyletowani","zaszufladkowani","zaszyfrowani","zaszywani","zataczani","zatajani","zatajeni","zatamowani","zatankowani","zatapiani","zatargani","zatelegrafowani","zatemperowani","zatÄ™sknieni","zatkani","zatoczeni","zatopieni","zatracani","zatraceni","zatriumfowani","zatrudniani","zatrudnieni","zatruwani","zatrzaskiwani","zatrzymani","zatrzymywani","zatuszowani","zatwierdzani","zatwierdzeni","zatykani","zatynkowani","zatytuÅ‚owani","zauploadowani","zauroczeni","zautomatyzowani","zauważani","zauważeni","zawadzani","zawalani","zawalczeni","zawaleni","zaważeni","zawdziÄ™czani","zawetowani","zawężeni","zawiadamiani","zawiadomieni","zawiÄ…zani","zawiÄ…zywani","zawiedzeni","zawierani","zawierzeni","zawieszani","zawieszeni","zawiezieni","zawijani","zawinieni","zawitani","zawÅ‚aszczeni","zawodzeni","zawojowani","zawoÅ‚ani","zawoskowani","zawożeni","zawracani","zawróceni","zawstydzani","zażądani","zażartowani","zazdroszczeni","zażegnani","zażenowani","zaznaczani","zaznajomieni","zaznani","zaznawani","zażyczeni","zażywani","zbaczani","zbadani","zbagatelizowani","zbajerowani","zbaÅ‚amuceni","zbalansowani","zbalsamowani","zbankrutowani","zbawiani","zbawieni","zbesztani","zbezczeszczeni","zbierani","zbijani","zbliżeni","zbluzgani","zbojkotowani","zbrojeni","zbrukani","zbszczeceni","zbudowani","zbudzeni","zbuntowani","zburzeni","zbywani","zchwytani","zciszeni","zdani","zdeaktywowani","zdecydowani","zdefiniowani","zdeflorowani","zdegradowani","zdejmowani","zdeklarowani","zdekodowani","zdekompresowani","zdekoncentrowani","zdekonstruowani","zdelegalizowani","zdemaskowani","zdementowani","zdemolowani","zdemontowani","zdemoralizowani","zdenerwowani","zdeponowani","zdeprymowani","zdeptani","zderzani","zderzeni","zdestabilizowani","Zdetonowani","zdetronizowani","zdewastowani","zdewaulowani","zdezerterowani","zdezintegrowani","zdezorientowani","zdezynfektowani","zdiagnozowani","zdÅ‚awieni","zdmuchiwani","zdobywani","zdoÅ‚owani","zdominowani","zdopingowani","zdrabniani","zdradzani","zdradzeni","zdrapani","zdrapywani","zdrutowani","zdruzgotani","zduplikowani","zduszeni","zdwojeni","zdyscyplinowani","zdyskredytowani","zdyskwalifikowani","zdystansowani","zdzieleni","zdzierani","zdzierżeni","zdziesiÄ…tkowani","zdzwonieni","zebrani","zechciani","zedytowani","żegnani","żenieni","żerowani","zerwani","zeskakiwani","zeskanowani","zeskrobywani","zesÅ‚ani","zeÅ›lizgiwani","zesmoleni","zespawiani","zespoleni","zessani","zestawiani","zestawieni","zestresowani","zestrzeliwani","zestrzeleni","zeswatani","zeszkleni","zeszlifowani","zezÅ‚oszczeni","zeznani","zeznawani","zezwalani","zezwoleni","zfinansowani","zgadani","zgadywani","zgajani","zganieni","zgaszeni","zginani","zgÅ‚adzeni","zgÅ‚aszani","zgłębiani","zgłębieni","zgÅ‚oÅ›nieni","zgÅ‚oszeni","zgÅ‚uszeni","zgniatani","zgniecieni","zgnojeni","zgodzeni","zgoleni","zgonieni","zgotowani","zgrabieni","zgrillowani","zgromadzani","zgromadzeni","zgrupowani","zgrzeszeni","zgrzytani","zgubieni","zgwaÅ‚ceni","zhackowani","zhakowani","zhaÅ„bieni","zhandlowani","zharmonizowani","zidentyfikowani","ziewani","zignorowani","zilustrowani","zinfiltrowani","zintegrowani","zintensyfikowani","zinterpretowani","zinwentaryzowani","zirytowani","zjadani","zjawiani","zjednani","zjednoczeni","zjedzeni","zjeżdżeni","zkontaktowani","zkserowani","złączeni","zÅ‚agodzeni","zÅ‚ajani","zÅ‚amani","zlani","zÅ‚apani","zlecani","zleceni","zlekceważeni","zlepiani","zlepieni","zlewani","zlicytowani","zliczani","zliczeni","zlikwidowani","zlinczowani","zlitowani","zlizani","zlizywani","zlokalizowani","zÅ‚omowani","żłopani","zÅ‚owieni","zÅ‚ożeni","zÅ‚upieni","zÅ‚uszczani","zluzowani","zmacani","zmÄ…ceni","zmagani","zmagazynowani","zmajstrowani","zmaksylizowani","zmanipulowani","zmarnowani","zmartwychwstani","zmasakrowani","zmaterializowani","zmawiani","zmazani","zmazywani","zmbobardowani","zmiatani","zmiażdżeni","zmiÄ™kczeni","zmieleni","zmieniani","zmienieni","zmierzani","zmierzeni","zmierzwieni","zmieszani","zmieszczeni","zmiksowani","zminiaturyzowani","zminimalizowani","zmniejszani","zmniejszeni","zmobilizowani","zmoczeni","zmodernizowani","zmodyfikowani","zmonopolizowani","zmontowani","zmostkowani","zmotywowani","zmówieni","zmrożeni","zmrużeni","zmumifikowani","zmuszani","zmuszeni","zmutowani","zmyÅ›lani","zmywani","znacjonalizowani","znajdowani","znajdywani","znakowani","znalezieni","znani","znÄ™cani","zneutralizowani","zniechÄ™ceni","znieczuleni","znieksztaÅ‚cani","znieksztaÅ‚ceni","znienawidzeni","znieprawieni","zniesieni","zniesÅ‚awiani","zniesÅ‚awieni","zniewalani","znieważani","znieważeni","zniewoleni","zniszczeni","zniweczeni","zniwelowani","zniżani","zniżeni","znokautowani","znormalnieni","znoszeni","znudzeni","zobaczeni","zobowiÄ…zani","zobrazowani","zogniskowani","żonglowani","zoomowani","zoperowani","zoptymalizowani","zorganizowani","zorientowani","zostawiani","zostawieni","zpÅ‚aceni","zprowokowani","zrabowani","zrachowani","zracjonalizowani","zranieni","zraportowani","zrażani","zrażeni","zrealizowani","zrecenzowani","zredagowani","zredukowani","zreferowani","zreformowani","zrefowani","zrefundowani","zregenerowani","zrehabilitowani","zreinkarnowani","zreintegrowani","zrekonfigurowani","zrekonstruowani","zrekrutowani","zrekrystalizowani","zrelacjonowani","zrelaksowani","zremiksowani","zremisowani","zreorganizowani","zreperowani","zreplikowani","zresetowani","zresocjalizowani","zrestartowani","zrestrukturyzowani","zrewanżowani","zrewidowani","zrewolucjenizowani","zrezygnowani","zrobieni","zrolowani","zroszeni","zrównani","zrównoważeni","zrównywani","zróżnicowani","zrozumiani","zrugani","zruinowani","zrujnowani","zrymowani","zrywani","zrzÄ™dzeni","zrzeszeni","zrzucani","zrzuceni","zsumowani","zsuwani","zsynchronizowani","zsyntetyzowani","zsypywani","zszargani","zszokowani","zszywani","zutylizowani","zużywani","zwabiani","zwabieni","zwalani","zwalczeni","zwalniani","zwaleni","zwani","zwaporyzowani","zwÄ…tpieni","zważani","zważeni","zwÄ™dzeni","zwerbalizowani","zwerbowani","zweryfikowani","zwÄ™szeni","zwężeni","zwiastowani","zwiÄ…zani","zwiÄ…zywani","zwiedzani","zwiedzeni","zwiÄ™kszeni","zwieÅ„czeni","zwierzani","zwieszani","zwieszeni","zwietrzeni","zwijani","zwilżeni","zwizualizowani","zwlekani","zwodowani","zwodzeni","zwoÅ‚ani","zwolnieni","zwoÅ‚ywani","zwożeni","zwracani","zwróceni","zwyciężani","zwymiotowani","życzeni","żygani","zygzakowani","zyskani","zyskiwani","zżerani","zżynani","konsakrowany","konsakrowana","konsakrowane","konsakrowani"],{getWords:aa}=o.languageProcessing,{nonDirectPrecedenceException:na,directPrecedenceException:oa,values:ia}=o.languageProcessing,{Clause:za}=ia,{getClausesSplitOnStopWords:ea,createRegexFromArray:wa}=o.languageProcessing,ya={Clause:class extends za{constructor(a,n){super(a,n),this._participles=function(a){return aa(a).filter((a=>(0,Y.includes)($,a)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const a=this.getClauseText(),n=this.getAuxiliaries(),o=this.getParticiples().filter((o=>!oa(a,o,J)&&!na(a,o,n,K)));this.setPassive(o.length>0)}},regexes:{auxiliaryRegex:wa(["być","jestem","jesteÅ›","jest","jesteÅ›my","jesteÅ›cie","sÄ…","byÅ‚am","byÅ‚em","byÅ‚eÅ›","byÅ‚aÅ›","byÅ‚","byÅ‚a","byÅ‚o","byÅ‚oby","byliÅ›my","byÅ‚yÅ›my","byliÅ›cie","byÅ‚yÅ›cie","byli","byÅ‚y","bÄ™dÄ™","bÄ™dziesz","bÄ™dzie","bÄ™dziemy","bÄ™dziecie","bÄ™dÄ…","byÅ‚abym","byÅ‚bym","byÅ‚byÅ›","byÅ‚abyÅ›","byÅ‚aby","byÅ‚by","bylibyÅ›my","byÅ‚ybyÅ›my","bylibyÅ›cie","byÅ‚ybyÅ›cie","byÅ‚by","byÅ‚aby","byliby","byÅ‚yby","zostać","zostaje","zostajesz","zostajÄ™","zostajecie","zostajemy","zostajÄ…","zostanÄ™","zostaniesz","zostanie","zostaniemy","zostaniecie","zostanÄ…","zostaÅ‚em","zostaÅ‚am","zostaÅ‚aÅ›","zostaÅ‚eÅ›","zostaÅ‚","zostaÅ‚a","zostaÅ‚o","zostaliÅ›my","zostaÅ‚yÅ›my","zostaliÅ›cie","zostaÅ‚yÅ›cie","zostali","zostaÅ‚y","zostaÅ‚bym","zostaÅ‚abym","zostaÅ‚byÅ›","zostaÅ‚abyÅ›","zostaÅ‚by","zostaÅ‚aby","zostaÅ‚ybyÅ›my","zostalibyÅ›my","zostalibyÅ›cie","zostaÅ‚ybyÅ›cie","zostaliby","zostaÅ‚yby"]),stopwordRegex:wa(Q)}};function ra(a){return ea(a,ya)}const pa=function(a,n,o,i){if(a.length>n){const n=function(a,n){return n.find((n=>a.endsWith(n)))||""}(a,o);if(""!==n)return a.slice(0,-i)}},sa=function(a,n){const o=Object.entries(n);for(const n of o){const o=n[1].wordShouldBeLongerThan,i=n[1].wordEndings,z=n[1].suffixLength,e=pa(a,o,i,z);if(e)return e}},{baseStemmer:ta}=o.languageProcessing;function da(a){const n=(0,Y.get)(a.getData("morphology"),"pl",!1);return n?a=>function(a,n){const o=n.externalStemmer;let i=n.dictionary.stems[a];return i&&(a=i),a.toLowerCase(),a.length<4?a:(i=sa(a,o.diminutiveSuffixes),i||(i=sa(a,o.nounSuffixes)),i||(i=sa(a,o.verbSuffixes)),i||(i=function(a,n){const o=sa(a,n.adjectiveAndAdverbSuffixes);if(o)return a.startsWith(n.superlativePrefix)?o.slice(3):o}(a,o)),i&&(a=i),i=sa(a,o.generalSuffixes),i||a)}(a,n):ta}const{AbstractResearcher:ca}=o.languageProcessing;class ka extends ca{constructor(a){super(a),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"pl",passiveConstructionType:"periphrastic",firstWordExceptions:i,functionWords:N,stopWords:Q,transitionWords:e,twoPartTransitionWords:V,sentenceLength:X}),Object.assign(this.helpers,{getClauses:ra,getStemmer:da})}}(window.yoast=window.yoast||{}).Researcher=n})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/pt.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/pt.js new file mode 100644 index 00000000..e254d795 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/pt.js @@ -0,0 +1 @@ +(()=>{"use strict";var a={d:(d,e)=>{for(var i in e)a.o(e,i)&&!a.o(d,i)&&Object.defineProperty(d,i,{enumerable:!0,get:e[i]})},o:(a,d)=>Object.prototype.hasOwnProperty.call(a,d),r:a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})}},d={};a.r(d),a.d(d,{default:()=>pa});const e=window.yoast.analysis,i=["o","a","os","as","um","uma","uns","umas","um","dois","três","quatro","cinco","seis","sete","oito","nove","dez","este","estes","esta","estas","esse","esses","essa","essas","aquele","aqueles","aquela","aquelas","isto","isso","aquilo"],r=["ademais","afinal","aliás","analogamente","anteriormente","assim","atualmente","certamente","conforme","conquanto","contudo","decerto","embora","enfim","enquanto","então","entretanto","eventualmente","igualmente","inegavelmente","inesperadamente","mas","ocasionalmente","outrossim","pois","porquanto","porque","portanto","posteriormente","precipuamente","primeiramente","primordialmente","principalmente","salvo","semelhantemente","similarmente","sobretudo","surpreendentemente","todavia"],s=r.concat(["a fim de","a fim de que","a menos que","a princípio","a saber","acima de tudo","ainda assim","ainda mais","ainda que","além disso","antes de mais nada","antes de tudo","antes que","ao mesmo tempo","ao passo que","ao propósito","apesar de","apesar disso","às vezes","assim como","assim que","assim sendo","assim também","bem como","com a finalidade de","com efeito","com o fim de","com o intuito de","com o propósito de","com toda a certeza","como resultado","como se","da mesma forma","de acordo com","de conformidade com","de fato","de maneira idêntica","de tal forma que","de tal sorte que","depois que","desde que","dessa forma","dessa maneira","desse modo","do mesmo modo","é provável","em conclusão","em contrapartida","em contraste com","em outras palavras","em primeiro lugar","em princípio","em resumo","em seguida","em segundo lugar","em síntese","em suma","em terceiro lugar","em virtude de","finalmente","isto é","já que","juntamente com","logo após","logo depois","logo que","mesmo que","não apenas","nesse hiato","nesse ínterim","nesse meio tempo","nesse sentido","no entanto","no momento em que","ou por outra","ou seja","para que","pelo contrário","por analogia","por causa de","por certo","por conseguinte","por conseqüência","porém","por exemplo","por fim","por isso","por mais que","por menos que","por outro lado","por vezes","posto que","se acaso","se bem que","seja como for","sem dúvida","sempre que","só para exemplificar","só para ilustrar","só que","sob o mesmo ponto de vista","talvez provavelmente","tanto quanto","todas as vezes que","todas as vezes em que","uma vez que","visto que"]);function o(a){let d=a;return a.forEach((e=>{(e=e.split("-")).length>0&&e.filter((d=>!a.includes(d))).length>0&&(d=d.concat(e))})),d}const t=["o","a","os","as","um","uns","uma","umas"],n=["uma","duas","dois","três","cuatro","cinco","seis","sete","oito","nove","dez","onze","doze","treze","quatorze","catorze","quinze","dezesseis","dezessete","dezasseis","dezassete","dezoito","dezenove","dezanove","vinte","cem","cento","mil","milhão","milhões","bilhão","bilhões"],c=["primeiro","primeiros","primeira","primeiras","segundo","segunda","segundos","segundas","terceiro","terceira","terceiros","terceiras","quarto","quartos","quarta","quartas","quinto","quintos","quinta","quintas","sexto","sextos","sexta","sextas","sétimo","sétimos","sétima","sétimas","oitavo","oitavos","oitava","oitavas","nono","nonos","nona","nonas","décimo","décimos","décima","décimas","vigésimo","vigésimos","vigésima","vigésimas"],l=["eu","tu","ele","ela","nós","vós","você","vocês","eles","elas"],u=["me","te","lhe","nos","vos","lhes"],m=["dele","dela","deles","delas","nele","nela","neles","nelas","mim","ti","si"],p=["conmigo","contigo","consigo","convosco","conosco","connosco"],g=["se"],f=["aquilo","àquele","àquela","àqueles","àquelas","àquilo","este","estes","esta","estas","àqueles","aqueles","aquele","aquela","aquelas","aquilo","esse","esses","essa","essas","isto","isso"],v=["minhas","tuas","suas","minha","tua","sua","minhas","tuas","suas","vossa","vossas","meu","meus","teu","teus","seu","seus","nosso","nossos","nossa","nossas"],b=["apenas","vário","vários","vária","várias","mais","muito","muitos","muita","muitas","puoco","puocos","puoca","puocas","bastante","todo","todos","toda","todas"],h=["alguma","algumas","nenhuns","nenhumas","todo","toda","todas","outro","outra","outros","outras","qualquer","quaisquer","outrem","tudo","nada","algo","tanto","tanta","tantos","tantas","quanto","quanta","quantos","quantas","ninguém","cada"],z=["quais","qual","quem","cujo","cuja","cujos","cujas"],q=["como","porque","quanto","quanta","onde","quando","quão","quantos","quantas","donde","aonde","que"],j=["cá","além","aqui","ali","lá","acolá","aí"],x=["tenho","tens","tem","temos","tendes","têm","tive","tiveste","teve","tivemos","tivestes","tiveram","tínhamos","tínheis","tinham","tivera","tiveras","tivéramos","tivéreis","tiveram","terei","terás","terá","teremos","tereis","terão","teria","terias","teríamos","teríeis","teriam","tenha","tenhas","tenhamos","tenhais","tenham","tivesse","tivesses","tivéssemos","tivésseis","tivessem","tiver","tiveres","tivermos","tiverdes","tiverem","tende","teres","termos","terdes","terem","tido","hei","hás","há","havemos","hemos","haveis","heis","hão","houve","houveste","houvemos","houvestes","houveram","havia","havias","havíamos","havíeis","haviam","houvera","houveras","houvéramos","houvéreis","houveram","haverei","haverás","haverá","haveremos","havereis","haverão","haveria","haverias","haveríamos","haveríeis","haveriam","haja","hajas","hajamos","hajais","hajam","houvesse","houvesses","houvéssemos","houvésseis","houvessem","houver","houveres","houvermos","houverdes","houverem","havei","hajais","haveres","havermos","haverdes","haverem","havido","poder","posso","podes","pode","podemos","podeis","podem","pude","pudeste","pôde","pudemos","pudestes","puderam","podia","podias","podia","podíamos","podíeis","podiam","pudera","puderas","pudéramos","pudéreis","puderam","poderei","poderás","poderá","poderemos","podereis","poderão","poderia","poderias","poderíamos","poderíeis","poderiam","possa","possas","possamos","possais","possam","pudesse","pudesses","pudéssemos","pudésseis","pudessem","puder","puderes","pudermos","puderdes","puderem"],y=["ter","haver"],w=["sou","és","é","somos","sois","são","fui","foste","foi","fomos","fostes","foram","era","eras","éramos","éreis","eram","fôramos","fôreis","fora","foras","foram","serei","serás","será","seremos","sereis","serão","seria","serias","seríamos","seríeis","seriam","seja","sejas","seja","sejamos","sejais","sejam","fosse","fosses","fôssemos","fôsseis","fossem","for","fores","formos","fordes","forem","sê","sede","sermos","serdes","serem","seres","sido","estou","está","estamos","estás","estás","estais","estão","estive","estiveste","esteve","estivemos","estivestes","estiveram","estava","estavas","estávamos","estáveis","estavam","estivera","estiveras","estivéramos","estivéreis","estiveram","estarei","estarás","estará","estaremos","estareis","estarão","estaria","estarias","estaríamos","estaríeis","estariam","esteja","estejas","estejamos","estejais","estejam","estivesse","estivesses","estivéssemos","estivésseis","estivessem","estiver","estiveres","estivermos","estiverdes","estiverem","estai","estejas","estejais","estares","estarmos","estardes","estarem","estado"],S=["estar","ser"],C=["a","ante","antes","após","até","através","com","contra","depois","desde","sem","entre","para","pra","perante","sob","sobre","trás","de","por","em","ao","à","aos","às","do","da","dos","das","dum","duma","duns","dumas","no","na","nos","nas","num","numa","nuns","numas","pelo","pela","pelos","pelas","deste","desse","daquele","desta","dessa","daquela","destes","desses","daqueles","destas","dessas","daquelas","neste","nesse","naquele","nesta","nessa","naquela","nestes","nesses","naqueles","nestas","nessas","naquelas","disto","disso","daquilo","nisto","nisso","naquilo","durante"],P=["também","e","ou","nem"],W=["agora","conforme","conquanto","contanto","embora","enquanto","então","entretanto","malgrado","mas","pois","porém","porquanto","porque","senão","contudo"],k=["diz","dizem","disse","disseram","dizia","diziam","reivindica","reivindicam","reivindicou","reivindicaram","reivindicava","reivindicavam","requer","requerem","requereu","requereram","requeria","requeriam","afirma","afirmam","afirmou","afirmaram","afirmava","afirmavam","reivindica","reivindicam","reivindicou","reivindicaram","reivindicava","reivindicavam","perguntam","perguntou","perguntaram","perguntava","perguntavam","explica","explicam","explicou","explicaram","explicava","explicavam","relata","relatam","relatou","relataram"],T=["provavelmente","imediatamente","ocasionalmente","indubitavelmente","para","possivelmente","logo","simultaneamente","exceto","inquestionavelmente"],O=["extremamente","bem","completamente","totalmente","grandemente","seriamente","absolutamente","bastante","sobremodo","sobremaneira","tão"],E=["dou","dás","dá","damos","dais","dão","dei","deu","demos","deram","dava","davas","dávamos","dáveis","davam","dera","deras","déramos","déreis","deram","darei","darás","dará","daremos","dareis","darão","daria","darias","daríamos","daríeis","dariam","dê","dês","dêmos","deis","deem","déssemos","désseis","dessem","der","deres","dermos","derdes","derem","dai","deis","dares","darmos","dardes","darem","fazendo","faço","fazes","faz","fazemos","fazeis","fazem","fiz","fizeste","fez","fizemos","fizestes","fizeram","fazia","fazias","fazíamos","fazíeis","faziam","fizera","fizeras","fizéramos","fizéreis","farei","farás","fará","faremos","fareis","faria","farias","faríamos","faríeis","fariam","faça","faças","façamos","façais","façam","fizesse","fizesses","fizéssemos","fizésseis","fizessem","fizer","fizeres","fizermos","fizerdes","fizerem","fazei","fazeres","fazermos","fazerdes","fazerem"],M=["dar","fazer"],R=["devagar","rapidamente","grande","grandes","depressa","claramente","effectivamente","realmente","exclusivamente","simplesemente","somente","unicamente","lentamente","raramente","certamente","talvez","actualmente","dificilmente","principalmente","gerlamente","enorme","enormes","pequeno","pequena","pequenos","pequenas","minúsculo","minúsculos","minúscula","minúsculas","velho","velhos","velha","velhas","lindo","linda","lindos","lindas","alto","alta","altos","altas","baixo","baixa","baixos","baixas","longo","longa","longos","longas","curto","curta","curtos","curtas","fácil","fáceis","difícil","difíceis","simples","mesmo","mesma","mesmos","mesmas","mêsmo","mêsmos","mêsma","mêsmas","cedo","tarde","importante","importantes","capaz","capazes","certo","certa","certos","certas","usual","usuals","ultimamente","possível","possíveis","comum","comuns","freqüentemente","constantemente","continuamente","diretamente","levemente","algures","semelhante","semelhantes","similar","similares","sempre","ainda","já","atrás","depois"],A=["pior","melhor","melhores","bom","boa","bons","boas","bonito","bonita","bonitos","bonitas","grande","grandes","pequeno","pequena","pequenos","pequenas","velho","velhos","velha","velhas","mau","má","maus","más"],I=["ai","ah","ih","alô","oi","olá","ui","uf","psiu","mau","olha","viva","uau","wow","oh","shi"],L=["kg","mg","gr","g","km","m","l","ml","cl"],_=["segundos","minuto","minutos","hora","horas","dia","dias","semana","semanas","mes","meses","ano","anos","hoje","amanhã","ontem"],N=["caso","casos","coisa","coisas","detalhe","detalhes","forma","formas","jeito","jeitos","maneira","maneiras","modo","modos","suijeto","sujeitos","tópico","tópicos","vez","vezes"],U=["sim","não","ok","amém","etc","euro","euros","adeus","jeitos"],V=["sr","sra","sras","dr","dra","prof"],D=(o(R),o([].concat(c,y,S,M,A)),o([].concat(t,C,P,f,O,b,v)),o([].concat(r,n,l,u,m,p,g,h,z,q,j,x,w,W,k,T,E,I,L,_,N,U,V)),o([].concat(t,C,u,v,h,q,n,c,E,M,k))),F=o([].concat(t,n,c,l,u,m,p,g,f,v,b,h,z,q,j,x,y,w,S,C,P,W,k,T,O,E,M,R,A,I,L,_,N,U,V)),G=["que ","como","e","nem","se","caso","conforme","consoante","porque","pois","segundo ","enquanto","embora","conquanto","quanto menos","quanto mais","quando","mal ","apenas","ora","seja","quer","já","logo","portanto","por isso","pois","рог conseguinte","ou seja ","isto é","quer dizer","a saber","ou melhor","mas","também","sim","porém","contudo","senão","todavia","mas ainda","no entanto","entretanto"],J=[["não apenas","como também"],["não só","bem como"],["não só","como também"],["não só","mas também"],["ora","ora"],["ou","ou"],["quer","quer"]],$=JSON.parse('{"vowels":"aeiouáéíóúàâêôãõü","deviations":{"vowels":[{"fragments":["(gu|qu)[aeoáéíóúêã]"],"countModifier":-1},{"fragments":["[^(g|q|a)][aeiou][aeo]$"],"countModifier":-1},{"fragments":["[aeiouáéíóúàâêôü][aeo]","[aeiou][íúáéóãê]"],"countModifier":1},{"fragments":["aí[ae]"],"countModifier":1}],"words":{"full":[{"word":"delegacia","syllables":5},{"word":"democracia","syllables":5},{"word":"parceria","syllables":4},{"word":"secretaria","syllables":5}],"fragments":[]}}}'),B={recommendedLength:25},H=["ab-rogad","abrogad","abacharelad","abacinad","abafad","abainhad","abaixad","abalad","abalienad","abalroad","abanad","abandad","abandonad","abarbad","abarcad","abarregad","abarrotad","abastardad","abastecid","abatid","abdicad","abduzid","abençoad","aberrad","abert","abespinhad","abestad","abirritad","abismad","abjurad","ablaquead","ablegad","abluíd","abnegad","abobadad","abobad","abocanhad","abolid","abominad","abordad","abortad","abotoad","abraçad","abrandad","abrangid","abrasad","abrasileirad","abreviad","abrigad","abroquelad","abscedid","abscindid","absolutizad","absolvid","absort","absorvid","abstid","abstraíd","abundad","abusad","acabad","acabrunhad","açacalad","academizad","acalentad","acalmad","acamad","acampad","acaramelad","acarditad","acariciad","acarretad","acartad","acastelad","acatad","acautelad","accentuad","acclarad","accolhid","accordad","accreditad","accusad","acedid","aceitad","acelerad","acenad","acendid","acentuad","acerad","acerbad","acercad","acertad","acervad","acessad","acetificad","achad","achanad","achaparrad","achatad","achegad","acicatad","acidificad","acidulad","acinzentad","acionad","acirrad","aclamad","aclarad","aclimad","aclimatad","acobardad","acobertad","açodad","acoimad","açoitad","acolchoad","acolhid","acometid","acomodad","acompanhad","acompridad","aconchegad","acondicionad","aconselhad","acontecid","acoplad","acordad","acorrentad","acortinad","acostad","acostumad","açoutad","acovardad","acreditad","acrescentad","acrescid","acromatizad","activad","actuad","actualizad","açucarad","acudid","açulad","acuminad","acumulad","acusad","adaptad","adelgaçad","adentrad","adequad","aderid","adestrad","adherid","adiad","adiantad","adicionad","adid","aditad","adivinhad","adjetivad","adjudicad","administrad","admirad","admitid","admoestad","adoçad","adocicad","adoecid","adoptad","adorad","adormecid","adornad","adotad","adquirid","adsorvid","adulad","adulterad","aduzid","advertid","advind","advocad","aerad","afadigad","afagad","afamad","afastad","afazendad","afectad","afeiçoad","afeit","aferventad","afetad","afiad","afiançad","afigurad","afilad","afiliad","afinad","afirmad","afivelad","afixad","afligid","aflorad","afluíd","afobad","afogad","afrancesad","afrontad","afrouxad","afugentad","afundad","afundid","agachad","agaload","agarrad","agasalhad","agastad","agendad","agid","agilizad","agitad","aglomerad","aglutinad","agoirad","agoirentad","agoniad","agonizad","agourad","agourentad","agraciad","agradad","agradecid","agrafad","agravad","agredid","agregad","agrilhoad","agrupad","aguad","aguardad","aguçad","aguentad","agüentad","aguilhoad","aguisad","airad","ajeitad","ajoelhad","ajudad","ajuizad","ajuntad","ajustad","alad","alagad","alambicad","alapad","alardead","alargad","alarmad","alastrad","albergad","alçad","alcaguetad","alcalinizad","alcançad","alcatroad","alcoolizad","alcovitad","alcunhad","aleatorizad","alegad","alegorizad","alegrad","aleitad","alentad","alertad","alevantad","alfabetizad","alforriad","algemad","alhead","aliad","alicatead","alicerçad","aliciad","alienad","aligeirad","alijad","alimentad","alinhad","alisad","alistad","aliviad","almejad","almoçad","almoedad","alocad","aloirad","alojad","alongad","alourad","altead","alterad","altercad","alternad","alucinad","aludid","alugad","alumiad","alunad","alunissad","aluviad","alvejad","alvoroçad","alvorotad","amaciad","amad","amadurecid","amainad","amaldiçoad","amalgamad","amamentad","amancebad","amanhad","amanhecid","amansad","amanteigad","amarrad","amassad","amaynad","ameaçad","amead","amealhad","amedorentad","amedrontad","ameigad","amenizad","americanizad","amestrad","amigad","amimad","amnistiad","amofinad","amolad","amolecid","amolentad","amolgad","amontoad","amordaçad","amorenad","amortalhad","amortecid","amortizad","amostrad","amotinad","ampliad","amputad","amuad","amurad","amuralhad","anabolizad","anafad","analisad","anarquizad","anatematizad","ancilosad","ancinhad","ancorad","andad","anestesiad","anexad","angariad","anglicizad","angulad","angustiad","animad","animalizad","aninhad","aniquilad","aniversariad","anodizad","anoitecid","anonimizad","anormalizad","anotad","anquilosad","ansiad","antagonizad","antecipad","antedatad","antepost","antojad","antolhad","antropizad","antropomorfizad","anualizad","anuíd","anulad","anunciad","apagad","apainelad","apaixonad","apalpad","apanhad","apaniguad","aparad","aparafusad","aparatad","aparecid","aparelhad","aparentad","apartad","apassamanad","apatetad","apavorad","apaziguad","apead","apedrejad","apegad","apelad","apelidad","apenad","apensad","apercebid","aperfeiçoad","aperread","apertad","apetecid","apiedad","apimentad","apitad","aplacad","aplainad","aplanad","aplaudid","aplicad","apocopad","apoderad","apodizad","apodrecid","apoiad","apologizad","apontad","apoquentad","aportad","aportuguesad","aposentad","apossad","apostad","apostatad","apostemad","apost","apostrofad","apoteosad","apoteotizad","apoucad","approvad","aprazid","apreciad","apreendid","apregoad","aprendid","apresentad","apressad","aprestad","aprisionad","aprofundad","aprontad","apropriad","aprovad","aproveitad","aprovisionad","aproximad","aprumad","apunhalad","apurad","aquaplanad","aquartelad","aquecid","aquentad","aquiescid","aquietad","arabizad","arad","arbitrad","arborescid","arborizad","arcabuzad","arcad","ardid","aread","arejad","argentad","arguid","argumentad","arianizad","armad","armazenad","aromatizad","arpejad","arpoad","arquead","arquejad","arquitetad","arquivad","arraigad","arrancad","arranhad","arranjad","arrasad","arrastad","arrazoad","arread","arrebanhad","arrebatad","arrebentad","arrebitad","arrecadad","arrecead","arredad","arredondad","arrefecid","arregalad","arreganhad","arreigad","arrematad","arremedad","arremessad","arrendad","arrepanhad","arrestad","arribad","arrimad","arriscad","arrogad","arrojad","arrombad","arrotad","arroubad","arroxead","arruad","arruinad","arrulhad","arrumad","arseniad","arterializad","articulad","artificializad","artilhad","asad","ascendid","asfaltad","asfixiad","asilad","aspirad","assacad","assaltad","assassinad","assead","assediad","assegurad","assemelhad","assenhoread","assentad","assentid","assertad","assestad","assignalad","assimilad","assinad","assinalad","assistid","assoberbad","assobiad","associad","assolad","assomad","assombrad","assoprad","assoread","assossegad","assoviad","assumid","assustad","atacad","atad","atalhad","atanazad","atapetad","atarracad","atarraxad","ataviad","atazanad","atead","atemorizad","atempad","atenazad","atendid","atentad","atenuad","aterrad","aterrissad","aterrorizad","atestad","atiçad","atid","atilad","atinad","atingid","atirad","ativad","atochad","atolad","atomizad","atordoad","atormentad","atracad","atraiçoad","atraíd","atrapalhad","atrasad","atravancad","atravessad","atrelad","atribuíd","atribulad","atritad","atroad","atrofiad","atropelad","attentad","atturad","atuad","atualizad","aturad","auferid","augad","augmentad","augurad","aumentad","aureolad","auscultad","ausentad","autenticad","automatizad","autoproclamad","autorizad","autuad","auxiliad","avaliad","avançad","avariad","avassalad","aventad","aventurad","averbad","avergonhad","averiguad","avermelhad","aviad","avinagrad","avind","avisad","avistad","avivad","aviventad","avoad","azedad","azotad","azulad","azulejad","babad","babujad","bacharelad","bafejad","bailad","bainhad","baixad","bajulad","balad","balançad","balancead","balbuciad","balcanizad","baldad","baldead","balead","balid","balouçad","bambolead","banalizad","bancad","banhad","banquetead","baptizad","baralhad","baratead","barbead","barganhad","barrad","barrid","basead","bastad","bastecid","batalhad","batid","batizad","batucad","bazad","beatificad","bebemorad","bebericad","bebid","beijad","beirad","beliscad","beneficiad","benzid","berrad","besuntad","bicad","bichad","bifurcad","bioacumulad","biotransformad","bisad","bisbilhotad","biscatead","bivacad","blandiciad","blasfemad","blasonad","blefad","blindad","blogad","bloquead","bocejad","boiad","boicotad","bojad","bolad","bombad","bombardead","bombead","borboletead","borbulhad","bordad","borrad","borrifad","botad","botanizad","boxead","bradad","bramid","brandid","branquead","brecad","brigad","brilhad","brincad","brindad","britad","brocad","brochad","bronzead","brotad","bufad","bugad","bulhad","burilad","burlad","burocratizad","buscad","buzinad","cabecead","cabid","cabriolad","caçad","cacarejad","cacetead","cachad","cachead","cacimbad","caçoad","cadastrad","caducad","cafetinad","cagad","caíd","calad","calafetad","calcad","calçad","calcificad","calcinad","calculad","calejad","calhad","calibrad","caluniad","cambad","cambalead","cambiad","caminhad","camuflad","canalizad","cancelad","canonizad","cansad","cantad","cantarolad","capacitad","capad","capinad","capitalizad","capitanead","capitulad","capotad","captad","capturad","caracterizad","caraterizad","carbonizad","cardad","carecid","cariciad","carimbad","carread","carregad","cascatead","casquinad","cassad","castigad","castrad","catad","catalisad","catalizad","catalogad","categorizad","catequizad","cativad","caucionad","causad","cautelad","cauterizad","cavad","cavalgad","cavoucad","cead","cecead","cedid","cegad","ceifad","celebrad","censurad","centelhad","centrad","centralizad","centrifugad","cercad","cerrad","certificad","cerzid","cessad","cevad","chacinad","chacoalhad","chafurdad","chamad","chamuscad","chanfrad","chantagead","chapad","chapead","chatead","checad","chefiad","chegad","cheirad","chiad","chibatad","chibatead","chicanad","chicotead","chifrad","chilread","chimarread","chimarronead","chocad","chocalhad","chorad","choramingad","chouvid","chovid","chufad","chumbad","chupad","chutad","chuviscad","cicatrizad","cifrad","cimentad","cindid","cingid","cintad","cintilad","circulad","circuncidad","circundad","circunscrit","circunstanciad","cisad","cisalhad","cismad","citad","civilizad","clamad","claread","clarificad","classificad","clicad","clonad","clorad","coadjuvad","coad","coagid","coagulad","coalescid","coalhad","coassinad","coaxad","cobert","cobiçad","cobrad","coçad","cocegad","cochichad","cochilad","codificad","coevoluíd","coexistid","cofiad","cogitad","coincidid","coisad","coisificad","coitad","colaborad","colad","colead","colecionad","coletad","colhid","colidid","coligad","coligid","collocad","colmad","colmatad","colocad","colonizad","colorid","comandad","combalid","combatid","combinad","comboiad","começad","comedid","comemorad","comendad","comentad","comercializad","cometid","comichad","comid","cominad","commeçad","comovid","compactad","compadecid","comparad","comparecid","compartilhad","compenetrad","compensad","competid","compilad","complementad","completad","complexad","complicad","comportad","compostad","compost","comprad","compreendid","comprehendid","comprimid","comprometid","comprovad","compulsad","computad","comungad","comunicad","comutad","concatenad","concebid","concedid","concentrad","concernid","concertad","concluíd","concordad","concorrid","concretizad","condecorad","condemnad","condenad","condensad","condicionad","condimentad","conduzid","conectad","confeccionad","conferid","confessad","confiad","configurad","confinad","confirmad","confiscad","conflitad","conformad","confortad","confraternizad","confrontad","confundid","congelad","congestionad","congraçad","congregad","conjecturad","conjeturad","conjugad","conjurad","connectad","conotad","conquistad","consagrad","conseguid","consentid","consertad","conservad","considerad","consignad","consistid","consolad","consolidad","conspirad","conspurcad","constad","constatad","consternad","constituíd","constrangid","construíd","consubstanciad","consultad","consumad","consumid","contactad","contad","contagiad","contaminad","contatad","contemplad","contendid","contentad","contestad","contid","continuad","contornad","contra-atacad","contraatacad","contrabalançad","contrabalancead","contrabandead","contrafeit","contraíd","contrariad","contrastad","contratad","contribuíd","contristad","controlad","conturbad","convalescid","convalidad","convencid","convencionad","conversad","convertid","convidad","convid","convind","convivid","convocad","convulsad","convulsionad","cooperad","coordenad","copiad","copulad","corad","cornead","coroad","correlacionad","correspondid","corricad","corrid","corrigid","corroborad","corrompid","cortad","cortejad","cosid","costead","costumad","costurad","cotad","cotejad","couraçad","cozid","cozinhad","craquead","cravad","cravejad","credenciad","creditad","cremad","crepitad","crescid","crestad","criad","cricrilad","crid","criminalizad","criptografad","crispad","cristalizad","cristianizad","criticad","crochetad","cromad","cronologizad","cronometrad","crucificad","cruzad","cubad","cubicad","cuidad","culminad","culpad","cultivad","cultuad","cumprid","cumprimentad","cumulad","curad","cursad","curtid","curto-circuitad","curtocircuitad","curvad","curvetead","cuspid","custad","custead","custodiad","customizad","cutucad","dadivad","dad","damasquinad","damnad","dançad","danificad","dardejad","datad","datilografad","deambulad","debatid","debicad","debilitad","debitad","debochad","debruçad","debulhad","debutad","debuxad","decaíd","decalcad","decantad","decapitad","dececionad","decepad","decepcionad","decidid","decifrad","declamad","declarad","declinad","decolad","decompost","decorad","decorrid","decotad","decrescid","decretad","decuplicad","dedicad","dedilhad","dedurad","deduzid","defecad","defendid","defenestrad","deferid","definhad","definid","deflorad","deformad","defraudad","defumad","deglaçad","deglacead","deglutid","degolad","degradad","degustad","deificad","deitad","deixad","delatad","delegad","deliberad","deliciad","delid","delimitad","delinead","delinquid","delongad","demandad","demarcad","demitid","demittid","democratizad","demolid","demonstrad","demorad","denigrid","denominad","denotad","dentad","dentead","denunciad","deparad","depauperad","depenad","dependid","depilad","deportad","depositad","depost","deprecad","depreciad","depredad","deprimid","depurad","deputad","derivad","derrabad","derramad","derrapad","derretid","derribad","derrocad","derrogad","derrotad","derrubad","derruíd","desabad","desabafad","desabalroad","desabilitad","desabituad","desabotoad","desabraçad","desabrochad","desacelerad","desacompanhad","desaconselhad","desacreditad","desactivad","desafiad","desafivelad","desafogad","desagradad","desagradecid","desagravad","desagregad","desaguisad","desajustad","desalentad","desalojad","desalvorad","desamarrad","desamparad","desancorad","desandad","desanimad","desaparecid","desapegad","desapontad","desaprovad","desarmad","desarraigad","desarranjad","desarrazoad","desarrumad","desarticulad","desarvorad","desasad","desatad","desatarraxad","desativad","desbastad","desbloquead","desbotad","descabelad","descaíd","descalçad","descamad","descambad","descansad","descarbonizad","descarnad","descaroçad","descarregad","descarrilad","descartad","descascad","descendid","descercad","descid","descobert","descolad","descolonizad","descolorid","descomplicad","descompost","desconcertad","desconfiad","desconfortad","descongelad","desconsagrad","desconseguid","desconsiderad","desconsolad","descontad","descontentad","desconversad","desconvidad","descoroçoad","descortinad","descrit","descubert","descuidad","desculpad","desdemocratizad","desdenhad","desdobrad","desejad","desemaranhad","desembalad","desembarcad","desembargad","desembestad","desempenhad","desencadead","desencaminhad","desencantad","desencontrad","desencorajad","desencriptad","desenganad","desenhad","desenrolad","desenterrad","desentranhad","desenvolvid","desequilibrad","deserdad","desertad","desesperad","desesperançad","desestabilizad","deseuropeizad","desfalcad","desfalecid","desfarçad","desfechad","desfeit","desferid","desfiad","desfigurad","desfivelad","desflorestad","desfocad","desfragmentad","desfraldad","desfrutad","desgastad","desgostad","desidratad","designad","desiludid","desimpedid","desinfetad","desinflad","desinstalad","desintegrad","desintoxicad","desistid","desjejuad","deslastrad","deslavad","desleixad","desligad","deslizad","deslocad","deslocalizad","deslogad","deslumbrad","deslustrad","desmagnetizad","desmaiad","desmamad","desmanchad","desmantelad","desmarcad","desmatad","desmembrad","desmentid","desmerecid","desmistificad","desmitificad","desmobilizad","desmontad","desmoralizad","desmoronad","desmotivad","desnivelad","desnortead","desobrigad","desobstruíd","desocupad","desolad","desonerad","desonrad","desordenad","desorganizad","desorientad","desossad","desovad","desoxidad","desoxigenad","despachad","despadronizad","despedaçad","despedid","despejad","despelad","despencad","despendid","desperdiçad","despersuadid","despertad","despid","despojad","despolarizad","despontad","desposad","despregad","desprendid","desprezad","desproporcionad","desprotegid","desprovid","desqualificad","desregulad","desrespeitad","dessalinizad","desseguid","dessulfurad","dessulfurizad","destacad","destelhad","desterrad","destilad","destillad","destinad","destituíd","destoad","destrancad","destratad","destrinçad","destrinchad","destroçad","destruíd","destrunfad","desumanizad","desunid","desvairad","desvalorizad","desvelad","desvendad","desviad","desvinculad","desvirginad","desvirtuad","detalhad","detectad","deteriorad","determinad","detestad","detetad","detid","detonad","devanead","devassad","devastad","devid","devolvid","devorad","devotad","deyxad","diagnosticad","dialogad","difamad","diferenciad","diferid","differid","dificultad","difratad","difundid","digerid","digitad","digitalizad","dignad","dilacerad","dilapidad","dilatad","diluíd","diminuíd","dinamitad","dinamizad","diplomad","direccionad","direcionad","dirigid","dirimid","discad","discernid","disciplinad","discordad","discorrid","discretead","discriminad","discutid","disfarçad","disparad","dispensad","dispersad","disponibilizad","dispost","disputad","dissecad","disseminad","dissentid","dissimulad","dissipad","dissolvid","dissuadid","distad","distanciad","distinguid","distorcid","distraíd","distratad","distribuíd","ditad","dit","divagad","diversificad","divertid","dividid","divisad","divulgad","dizimad","doad","dobrad","doíd","domad","domesticad","domiciliad","dominad","dopad","dormid","dormitad","dosad","dotad","doutrinad","dragad","dramatizad","drenad","driblad","drogad","dublad","duchad","duelad","duplicad","durad","duvidad","eclipsad","ecoad","economizad","edificad","editad","educad","efectivad","efectuad","efetivad","efetuad","eivad","ejaculad","ejetad","elaborad","electrificad","electrocutad","elegid","eleit","elencad","eletrificad","eletrocutad","eletrolisad","elevad","eliminad","elogiad","elucidad","elucubrad","eludid","emaciad","emagrecid","emanad","emancipad","emaranhad","emasculad","embaíd","embainhad","embalad","embalsamad","embaraçad","embaralhad","embarcad","embasad","embebedad","embebid","embeiçad","embelezad","embirrad","embolad","embonecad","emboscad","embotad","embotelhad","embrenhad","embriagad","embromad","embrulhad","embuçad","emburrad","emburrecid","embutid","emendad","ementad","emergid","emigrad","emitid","emmagrecid","emmoldurad","emocionad","emoldurad","empachad","empacotad","empalad","empalhad","empalidecid","empanad","empapelad","emparedad","empatad","empeçonhad","empedernid","empenhad","emperrad","empestead","empilhad","empinad","empiorad","empoad","empobrecid","empoderad","empoleirad","empreendid","empregad","empregu","emprehendid","empreitad","emprenhad","emprestad","empunhad","empurrad","emudecid","emulad","emurchecid","enaltecid","enamorad","encabulad","encaçapad","encadead","encadernad","encaixad","encaixilhad","encaixotad","encalhad","encaminhad","encampad","encanad","encantad","encapad","encapsulad","encapuzad","encaracolad","encarad","encarecid","encarnad","encarniçad","encaroçad","encarquilhad","encarregad","encarregu","encarrilhad","encasquetad","encayxad","encefalizad","encenad","encerad","encerrad","encestad","encetad","encharcad","enchid","enclausurad","encobert","encoleirad","encolerizad","encolhid","encomendad","encompridad","encontrad","encorajad","encordoad","encorpad","encortinad","encostad","encravad","encrespad","encriptad","encurtad","endereçad","endireitad","endividad","endoidecid","endossad","endoutrinad","endurecid","enegrecid","energizad","enervad","enevoad","enfardad","enfardelad","enfarruscad","enfatizad","enfatuad","enfeitad","enfeitiçad","enferrujad","enfiad","enfileirad","enforcad","enfraquecid","enfrentad","enfronhad","enfumaçad","enfurecid","engabelad","engaiolad","engajad","engambelad","enganad","enganchad","engarrafad","engasgad","engastad","engatad","engatinhad","engendrad","engessad","englobad","engodad","engolid","engomad","engordad","engordurad","engrandecid","engravidad","engraxad","engrenad","engrossad","enguiçad","enlaçad","enlatad","enlouquecid","enmendad","enquadrad","enraivecid","enraizad","enramalhetad","enredad","enriçad","enriquecid","enrocad","enrolad","enrubescid","enrugad","ensaboad","ensacad","ensaiad","ensanguentad","ensangüentad","ensejad","ensinad","ensolarad","ensombrad","ensopad","ensurdecid","entabuad","entabulad","entalhad","entardecid","entediad","entelhad","entendid","enternecid","enterrad","entintad","entitulad","entoad","entornad","entorpecid","entortad","entrad","entrançad","entranhad","entravad","entreabert","entrecortad","entregad","entregu","entrelaçad","entrelinhad","entremead","entreolhad","entretid","entrevad","entrevistad","entrevist","entrincheirad","entristecid","entronad","entronizad","entulhad","entupid","entusiasmad","enumerad","enunciad","envelhecid","envenenad","envergad","envergonhad","envernizad","enviad","enviesad","enviuvad","envolvid","enxadad","enxamead","enxergad","enxertad","enxotad","enxugad","enxut","epitomizad","equilibrad","equipad","equiparad","equivocad","erguid","erigid","erodid","erotizad","erradicad","eructad","esbarrad","esbatid","esboçad","esbodegad","esbofetead","esbombardead","esbracejad","esbrasead","esbulhad","esburacad","escachoad","escalad","escaldad","escalfad","escalonad","escalpad","escalpelad","escamad","escançad","escancarad","escancead","escandid","escanead","escapad","escapulid","escarafunchad","escaramuçad","escarnecid","escarnid","escarrad","escassead","escavad","esclarecid","escoad","escolarizad","escolhid","escoltad","escondid","escorad","escorregad","escorrid","escovad","escravizad","escrit","escriturad","escrutinizad","escuitad","esculachad","esculpid","escurecid","escusad","escutad","esfalfad","esfaquead","esfarelad","esfarrapad","esfolad","esfomead","esforçad","esfregad","esfriad","esfuziad","esganad","esgarçad","esgotad","esgravatad","esgrimid","esguichad","esmaecid","esmagad","esmaltad","esmerad","esmigalhad","esmiuçad","esmorecid","esmurrad","espaçad","espacead","espairecid","espalhad","espalmad","espancad","espantad","esparramad","especializad","especificad","especulad","espedid","espelhad","esperad","esperançad","espernead","espezinhad","espiad","espichad","espigad","espinafrad","espionad","espiritualizad","espirrad","espocad","espojad","esporrad","esposad","espoucad","espreitad","espremid","espumad","esquadrinhad","esquecid","esquentad","esquiad","esquilad","esquinad","esquivad","estabelecid","estabilizad","estacad","estacionad","estad","estafad","estagiad","estagnad","estalad","estampad","estandardizad","estanhad","estarrecid","estatizad","estatuíd","estendid","estenografad","estenographad","estereotipad","esterilizad","esticad","estigmatizad","estilhaçad","estilizad","estimad","estimulad","estiolad","estipulad","estirad","estivad","estocad","estoirad","estolad","estontead","estorvad","estourad","estraçalhad","estragad","estralad","estrangulad","estranhad","estratificad","estread","estreiad","estreitad","estrelad","estremecid","estressad","estridulad","estripad","estrondead","estropead","estropiad","estrugid","estrupidad","estruturad","estudad","estufad","estupeficad","estupidificad","estuprad","esvaziad","esverdead","etiquetad","europeizad","evacuad","evadid","evangelizad","evaporad","eventrad","evidenciad","evitad","evocad","evolad","evoluíd","evolvid","exacerbad","exagerad","exalad","exaltad","examinad","exasperad","exaurid","excedid","excelid","excellid","excepcionad","exceptuad","excetuad","excitad","exclamad","excluíd","excomungad","excretad","excutid","executad","exercid","exercitad","exhalad","exhortad","exibid","exigid","exilad","eximid","existid","exonerad","exorcizad","exortad","expandid","expatriad","expectorad","expedid","experienciad","experimentad","expirad","explanad","explicad","explorad","exportad","expost","expressad","exprimid","expropriad","expugnad","expulsad","expurgad","exsecutad","extasiad","extendid","extenuad","exteriorizad","exterminad","externalizad","extinguid","extint","extirpad","extorquid","extractad","extraditad","extraíd","extratad","extraviad","exultad","exumad","fabricad","facetad","facilitad","facturad","facultad","fadigad","fagocitad","fagulhad","falad","falecid","falhad","fallad","falsead","falsificad","faltad","familiarizad","fantasiad","fardad","farejad","farfalhad","fartad","fascinad","fatiad","fatigad","fatorad","faturad","faxinad","fechad","fech","fecundad","fedid","feit","felicitad","fenad","fendid","fenecid","ferid","fermentad","ferrad","fertilizad","fervid","fervilhad","festad","festejad","fiad","ficad","figurad","filad","filiad","filmad","filosofad","filtrad","finad","finalizad","financiad","fincad","findad","find","fingid","finlandizad","firmad","fiscalizad","fisgad","fissionad","fissurad","fitad","fixad","flabelad","flagelad","flanquead","flexionad","flipad","floodad","floread","florescid","fluíd","fluorad","fluoretad","flutuad","focalizad","fodid","fofocad","folgad","folhead","fomentad","foragid","forcad","forçad","forjad","formad","formatad","formigad","formulad","fornecid","fornicad","forrad","fortalecid","fortificad","fosfatad","fosforescid","fosforilad","fossad","fotocopiad","fotografad","fraccionad","fracionad","fragmentad","franjad","franquead","franzid","fraquead","fraquejad","frasead","fraternizad","fraturad","fraudad","fread","freiad","frequentad","freqüentad","fresquead","friccionad","frisad","fritad","frit","fruíd","frustrad","fuçad","fugid","fumad","fumegad","fumigad","funccionad","funcionad","fundad","fundamentad","fundid","fungad","furad","furtad","fusionad","fustigad","futricad","fuzilad","gabad","gadanhad","gaguejad","galgad","galopad","galopead","galvanizad","gamad","ganhad","ganh","ganid","ganzad","garantid","gargalhad","gargarejad","gaseificad","gastad","gast","gatunad","gelad","gemid","generalizad","genotipad","gerad","gerenciad","gerid","germinad","gestad","gesticulad","gestualizad","ginasticad","girad","globalizad","gloriad","glorificad","glosad","golead","golpead","gomitad","googlad","gorad","gorjead","gostad","gotejad","governad","gozad","gracejad","gracitad","gradad","graduad","grafitad","gramad","grampead","granizad","grasnad","grasnid","grassitad","gratificad","gratinad","gravad","gravitad","grelhad","gripad","gritad","grudad","grunhid","guardad","guarnecid","guerread","guglad","guiad","guinchad","guindad","guisad","habilitad","habitad","habituad","hackead","halogenad","harmonizad","hastead","havid","helenizad","herdad","hesitad","hibernad","hibridizad","hidratad","hidrogenad","hipertrofiad","hipnotizad","hipotecad","homenagead","homogeneizad","homologad","honrad","horrorizad","hortad","hospedad","hospitalizad","humedecid","humidecid","humilhad","içad","idead","idealizad","identificad","ideologizad","idolatrad","ignorad","igualad","ilegalizad","ilhad","ilibad","ilidid","iludid","iluminad","ilustrad","imaginad","imanad","imantad","imbuíd","imigrad","imiscuíd","imitad","imobilizad","imolad","impactad","impedid","impelid","imperad","impetrad","implantad","implementad","implicad","implorad","importad","importunad","impossibilitad","impost","imprecad","impregnad","impressionad","impress","imprimid","improvisad","impulsionad","imputad","imunizad","inactivad","inalad","inaugurad","incapacitad","incendiad","incensad","incentivad","inchad","incidid","incinerad","incisad","incitad","inclinad","incluíd","inclus","incomodad","incorporad","incorrid","incriminad","incrustad","incubad","inculcad","inculpad","incumbid","indagad","indeferid","indefinid","indemnizad","indenizad","independid","indexad","indicad","indiciad","indispost","indultad","industrializad","induzid","inebriad","inerid","infectad","inferid","infestad","infiltrad","infirmad","inflad","inflamad","influenciad","influíd","informad","infringid","ingerid","inhibid","inibid","iniciad","inicializad","injetad","injungid","injuriad","injustiçad","inocentad","inovad","inquietad","inquirid","inscrit","inserid","insinuad","insistid","inspecionad","inspirad","instalad","instanciad","instigad","instituíd","instruíd","insultad","integrad","inteirad","intencionad","intensificad","interagid","intercalad","intercambiad","intercedid","interceptad","interditad","interessad","interferid","interligad","intermediad","internacionalizad","internad","interpelad","interpolad","interpost","interpretad","interrogad","interrompid","intersectad","intervind","intimad","intimidad","intitulad","intoxicad","intricad","intrigad","intrincad","introduzid","intrometid","inundad","inutilizad","invadid","invalidad","invectivad","invejad","inventad","invernad","invertid","investid","investigad","invocad","iodad","irad","irradiad","irrigad","irritad","irrogad","irrompid","iscad","isolad","iterad","jactad","janelad","jantad","japonizad","jardinad","jazid","jejuad","joeirad","jogad","jorrad","jubilad","judiad","julgad","jungid","juntad","jurad","juramentad","justapost","justificad","labutad","laçad","lacrad","lacrimejad","ladead","ladrilhad","lagartead","lajead","lambid","lamentad","laminad","lamuriad","lançad","lancead","lanchad","lapidad","largad","lascad","lastad","lastimad","latejad","latid","latinad","latinizad","lavad","lavrad","lẽbrad","legad","legalizad","legendad","legislad","legitimad","leiload","lembrad","lesad","levad","levantad","levitad","liberad","libertad","licitad","lidad","liderad","lid","ligad","limad","limitad","limpad","limp","linchad","lingotad","liquefeit","liquidad","lisonjad","lisonjead","listad","listrad","litigad","livrad","lixiviad","lobrigad","locad","localizad","locupletad","lograd","lotad","lotead","louvad","lubrificad","lucrad","luctad","ludibriad","ludificad","lufad","luitad","lustrad","lutad","luzid","macadamizad","maçad","macaquead","macerad","machucad","maculad","mãdad","madrugad","madurad","magnetizad","magnificad","magoad","maiusculad","maiusculizad","malograd","maltad","maltratad","mamad","manad","mancad","manchad","mandad","manejad","manifestad","manipulad","manjad","mantid","manufaturad","manusead","maquiad","maquinad","marcad","marchad","marejad","marinad","marquetead","marretad","martelad","martirizad","mascad","mascarad","mascatead","massacrad","massagead","mastigad","masturbad","matad","matriculad","maturad","maximizad","maxixad","mead","mealhad","mecanizad","medid","meditad","medrad","melad","melhorad","memorizad","mencionad","mendigad","menead","menosprezad","menstruad","mentid","mercad","merecid","mergulhad","mesclad","mesmerizad","metabolizad","metid","metilad","metralhad","mexericad","mexid","miad","micad","migrad","mijad","milhad","militad","mimad","mimetizad","mimid","minad","minerad","mineralizad","minimizad","ministrad","minuciad","minudenciad","mirad","mirrad","missad","mistificad","misturad","mitigad","mixad","mixturad","mobilizad","modelad","moderad","modificad","modulad","mofad","moíd","moldad","molestad","molhad","monitorad","monitorizad","monologad","monopolizad","montad","morad","mordid","mordiscad","morgad","morrid","mortificad","mort","moscad","moshad","mosquead","mossegad","mostrad","motejad","motivad","mourejad","movid","movimentad","mudad","mugid","multad","multiplicad","mumificad","munid","murad","murchad","murmurad","mutilad","nacionalizad","nadad","nad","narrad","nasalad","nascid","naufragad","navegad","necessitad","negad","negligenciad","negociad","neutralizad","nevad","nhanhad","niponizad","niquelad","nitrificad","nivelad","nobilitad","nocautead","nomead","normalizad","notad","noticiad","notificad","nublad","numerad","numerizad","nutrid","obcecad","obedecid","objetad","objetivad","obnubilad","obrad","obrigad","obscurecid","observad","obstinad","obstruíd","obtemperad","obtid","obturad","obviad","ocasionad","occorrid","ocorrid","ocultad","ocupad","odiad","odorizad","ofegad","ofendid","oferecid","oficializad","ofuscad","oitavad","olead","olhad","olvidad","omitid","ondead","ondulad","onerad","operad","opinad","opiniad","opost","opprimid","oprimid","optad","optimizad","orad","orbitad","orçad","ordenad","ordenhad","organizad","orgulhad","orientad","orientalizad","originad","orlad","ornad","ornamentad","orquestrad","oscilad","ostentad","ostracizad","otimizad","ouriçad","ousad","outorgad","ouvid","ouvist","ovulad","oxidad","oxigenad","ozonizad","pacificad","pactad","pactuad","padecid","padronizad","pagad","paginad","pag","pairad","pajead","palead","palestrad","palpad","palpitad","palrad","panad","papad","papaguead","paparicad","papead","parabenizad","parad","parafrasead","parafusad","paralisad","paralizad","parasitad","parcelad","parecid","parid","parlad","parodiad","participad","partid","partilhad","pasmad","passad","passarinhad","passead","pastad","pasteurizad","pastorad","pastoread","patentead","patinad","patrocinad","patrulhad","pausad","pautad","pavimentad","pechinchad","pedalad","pedid","pegad","peg","pêg","peidad","pejad","pelad","pelead","pelejad","penad","penalizad","pendid","pendurad","peneirad","penetrad","penhorad","pensad","pensionad","pentead","perambulad","percalçad","percebid","percorrid","percutid","perdid","perdoad","perdurad","perecid","peregrinad","perfeit","perfilad","perfilhad","perfolhead","perfumad","perfurad","perguntad","perigad","perlavad","permanecid","permead","permitid","permutad","pernoitad","pernoutad","perpassad","perpetrad","perpetuad","perseguid","perseverad","persignad","persistid","personalizad","personificad","perspectivad","perspetivad","persuadid","pertencid","perturbad","pervertid","pescad","pesquisad","pestanejad","petiscad","petrificad","photographad","piad","picad","pichad","picotad","pifad","pigarread","pigmentad","pilad","pilhad","pinad","pincelad","pingad","pintad","pintalgad","piorad","pipetad","pirad","piratead","pisad","piscad","pisotead","pixelizad","plagiad","plainad","planad","planead","planejad","plangid","plantad","plasmad","plastificad","platinad","plissad","podad","podid","polid","polimerizad","polinizad","politizad","poluíd","polvilhad","ponderad","ponhad","pontuad","popularizad","porfiad","pormenorizad","portad","posicionad","pospost","possibilitad","possuíd","postad","post","postulad","potencializad","poupad","pousad","povoad","practicad","praguejad","prantead","praticad","pré-datad","prédatad","precedid","preceituad","precipitad","precisad","preconizad","predad","predestinad","predicad","predominad","preenchid","prefabricad","prefaciad","preferid","pregad","prejudicad","prelibad","premeditad","premiad","prendad","prendid","prensad","preoccupad","preocupad","preparad","prescrevid","prescrit","presenciad","presentead","preservad","presidid","pres","pressagiad","pressentid","pressionad","pressupost","pressurizad","prestad","presumid","pretendid","preterid","prevalecid","prevaricad","prevenid","previst","prezad","principiad","principia","printad","priorizad","privad","privatizad","privilegiad","problematizad","procedid","processad","proclamad","procrastinad","procriad","procurad","produzid","profanad","proferid","profetizad","prognosticad","programad","progredid","prohibid","proibid","projetad","proliferad","prolongad","prometid","promovid","promulgad","pronunciad","propagad","proporcionad","propost","propulsad","prorrogad","proscrit","proselitad","proselitizad","prosperad","prosseguid","prostrad","protagonizad","protegid","protestad","provad","providenciad","provid","provind","provisionad","provocad","pruíd","prurid","publicad","publicitad","pugnad","puíd","pulad","pulicad","pulinhad","pulsad","pululad","pulverizad","punguead","punid","purgad","purificad","putrefeit","puxad","quadrad","quadriculad","quadruplicad","qualificad","quarentenad","quebrad","quebrantad","quedad","queimad","queixad","quelatad","querelad","querid","questionad","quicad","quilhad","quintuplicad","quitad","rachad","raciocinad","racionalizad","ralad","ralhad","ramificad","randomizad","rangad","rangid","ranquead","rapad","raptad","rarefeit","rascad","rascunhad","rasgad","raspad","rastejad","rastelad","rastread","rastrejad","ratead","ratificad","reabilitad","reafirmad","reagid","reagrupad","realçad","realizad","realojad","reanalisad","reanimad","reaproveitad","reaquecid","rearranjad","rearrumad","reassistid","reavivad","rebaixad","rebatid","rebatizad","rebelad","rebentad","rebobinad","rebocad","rebolad","rebrilhad","rebuçad","rebuscad","recaíd","recalcad","recalcitrad","recalculad","recapitulad","recarregad","recead","recebid","receitad","rechaçad","reciclad","recitad","reclamad","reclinad","recobert","recolhid","recomeçad","recomendad","recompensad","reconciliad","reconfirmad","reconfortad","reconhecid","reconquistad","reconsiderad","reconstituíd","recontad","reconvocad","recopiad","recordad","recorrid","recortad","recostad","recozid","recread","recriad","recristalizad","recrudescid","recrutad","rectificad","recuad","recuperad","recurvad","recusad","redatad","redefinid","redescobert","redescrit","redigid","redigitad","redimid","redirecionad","redobrad","reduzid","reelegid","reembolsad","reencarnad","reenchid","reencontrad","reenviad","reescrit","reestruturad","refeit","referenciad","referid","refinad","refletid","reflorestad","refogad","reforçad","reformad","reformulad","refratad","refread","refrescad","refrigerad","refugiad","refutad","regad","regatead","regenerad","regid","registad","registrad","regozijad","regressad","regulad","regulamentad","regularizad","regurgitad","reinad","reiniciad","reinstalad","reinventad","reiterad","reivindicad","rejeitad","rejeytad","rejogad","rejuvenescid","relacionad","relatad","relembrad","relid","relinchad","relutad","reluzid","relvad","remad","remanescid","rematad","remedad","remediad","remendad","remetid","remexid","remid","remodelad","remontad","removid","remunerad","renascid","rendad","renderizad","rendid","renegad","renhid","renomead","renovad","renunciad","reocorrid","reordenad","reorganizad","reoxidad","reparad","repartid","repassad","repelid","repensad","repetid","repisad","replantad","replicad","reportad","repost","repousad","repreendid","representad","reprimendad","reprimid","reprisad","reprocessad","reprochad","reproduzid","reprovad","repugnad","reputad","requentad","requerid","requestad","requisitad","rescindid","resenhad","reservad","resfolegad","resfriad","resgatad","resguardad","residid","resignad","resistid","resmungad","resolvid","respeitad","respigad","respirad","resplandecid","resplandescid","resplendecid","respondid","responsabilizad","ressaltad","ressalvad","ressarcid","ressecad","ressentid","ressoad","ressonad","ressurgid","ressuscitad","restabelecid","restad","restaurad","restituíd","restringid","resultad","resumid","resvalad","retalhad","retaliad","retardad","retes","reticulad","retid","retificad","retinid","retirad","retocad","retomad","retornad","retorquid","retraíd","retratad","retribuíd","retrocedid","retrucad","reunid","reutilizad","revelad","reverberad","reverenciad","revertid","revestid","revigorad","revisad","revistad","revist","revitalizad","revogad","revoltad","revolvid","rezad","ribombad","riçad","ricochetead","ridicularizad","rilhad","rimad","ripad","riscad","ritmad","rivalizad","rocad","roçad","rociad","rodad","rodead","rogad","roíd","rolad","romanizad","rompid","roncad","ronronad","rosnad","rotacionad","rotad","rotead","rot","rotulad","roubad","ruborizad","rubricad","rufad","rugid","rumad","rumiad","ruminad","russificad","sabid","saboread","sabotad","sacad","sacanead","saciad","sacolejad","sacralizad","sacrificad","sacudid","sagrad","saíd","salgad","salientad","salivad","salmourad","salpicad","saltad","saltead","saltitad","saluçad","salvad","salvaguardad","salv","sanad","sancionad","sangrad","santificad","sapatead","sapead","sapecad","saquead","sarad","saturad","saudad","scintilad","secad","secretad","secundad","sedad","sedimentad","seduzid","segad","segmentad","segredad","seguid","segurad","selad","seleccionad","selecionad","selectad","seletad","semead","semelhad","semicerrad","sensualizad","sentad","sentenciad","sentid","separad","sepultad","sequenciad","sequestrad","seqüestrad","serenad","seriad","serpentead","serrad","serrilhad","servid","sibilad","sid","significad","silenciad","silvad","simbolizad","simplificad","simulad","sinalizad","sincopad","sincretizad","sincronizad","singrad","sinterizad","sintetizad","sintonizad","sistematizad","sitiad","situad","soad","sobejad","sobraçad","sobrad","sobre-estimad","sobreestimad","sobrecarregad","sobrepassad","sobrepost","sobrepujad","sobrerrepresentad","sobresaíd","sobressaíd","sobressaltad","sobrestimad","sobrevind","sobrevivid","socad","sociabilizad","socializad","soçobrad","socorrid","sodomizad","sofismad","sofisticad","sofrid","solad","solapad","soldad","soletrad","solicitad","solidificad","soliloquiad","soltad","solt","solubilizad","soluçad","solucionad","somad","sombread","sonambulad","sondad","sonhad","soprad","sorrid","sortead","sortid","sorvid","soterrad","sovad","stalkead","standardizad","stressad","suad","suavizad","subentendid","subestimad","subid","subjugad","sublimad","sublinhad","submergid","subordinad","subornad","subscrit","subsidiad","subsistid","substanciad","substantivad","substituíd","subtraíd","subvencionad","subvertid","sucedid","sucumbid","sufixad","sufocad","sugad","sugerid","suicidad","sujad","sujeitad","sulcad","sumariad","sumid","sumulad","superad","superestimad","supervisad","supervisionad","suplantad","suplementad","suplicad","suportad","supost","supplantad","supprimid","suprid","suprimid","supurad","surdid","surfad","surgid","surpreendid","surrad","surripiad","surrupiad","surtad","suscitad","suspeitad","suspendid","suspirad","sussurrad","sustad","sustentad","sustid","systematizad","tabulad","tacad","tachad","tactead","talhad","tamborilad","tampad","tamponad","tangad","tangid","tapad","tardad","tarraxad","tascad","tatuad","taxad","taxiad","tchovid","tecid","teclad","teimad","telad","telefonad","telegrafad","teleportad","teletransportad","televisad","temid","temperad","tencionad","tendid","tensionad","tentad","teorizad","terceirizad","tergiversad","terminad","terrad","testad","testemunhad","tid","tilintad","timbrad","tingid","tinid","tintad","tipad","tipificad","tirad","tiranizad","tiritad","tirotead","titilad","titulad","tocad","tocaiad","tolerad","tomad","tombad","topad","torcid","tormentad","tornad","tornead","torpedead","torrad","torturad","tosad","tosquiad","tostad","totalizad","touread","trabalhad","traçad","tracejad","tractad","traduzid","traficad","trahid","traíd","trajad","tramad","trancad","trançad","tranquilizad","transad","transbordad","transcorrid","transcrit","transfectad","transferid","transfigurad","transformad","transid","transitad","transladad","transliterad","transmitid","transmudad","transmutad","transpassad","transpirad","transplantad","transportad","transpost","transtornad","transubstanciad","transvasad","trapacead","trasladad","traspassad","tratad","trautead","travad","travestid","trazid","trefilad","treinad","tremeluzid","tremid","tremulad","trenad","trepad","tresandad","trespassad","triangulad","tributad","tricotad","trinad","trincad","trinchad","tripad","tripulad","triscad","triturad","triunfad","trocad","troçad","trombetead","tropeçad","trotad","trovad","trovejad","trovoad","trucidad","truncad","trunfad","tumefeit","tumultuad","tunad","turbad","turvad","tutead","tutelad","tutorad","ufanad","uivad","ultimad","ultrajad","ultrapassad","ululad","unctad","ungid","unhad","unificad","uniformizad","untad","urbanizad","urdid","urgid","urinad","usad","usufruíd","usurpad","utilizad","vacad","vacilad","vadiad","vagabundead","vagad","vaguead","vaiad","validad","valid","valorad","valorizad","valsad","vampirizad","vandalizad","vaporizad","varad","varead","variad","varrid","vasculhad","vastad","vaticinad","vazad","vaziad","vedad","vegetad","velad","velejad","vencid","vendad","vendid","venerad","ventad","ventilad","veranead","verbalizad","veread","vergad","vergastad","verificad","vermelhad","vermelhead","vermelhejad","versad","versejad","versificad","vertid","vesguead","vestid","vetad","vexad","viajad","vibrad","vicejad","vidrad","vigiad","vigorad","vilificad","vilipendiad","vincad","vinculad","vindimad","vind","vingad","vinificad","violad","violentad","virad","visad","visitad","vislumbrad","vist","visualizad","vitimad","vitoriad","vitrificad","vivad","vivenciad","vivid","voad","vocalizad","vociferad","volatilizad","voltad","voltead","volvid","vomitad","vosead","votad","vulcanizad","vulgarizad","vulnerad","wikificad","xeretad","xerocad","xingad","zanzad","zapead","zarpad","zelad","zerad","zicad","ziguezaguead","zipad","zoad","zoiad","zombad","zonad","zumbid","zumbificad","zunid"],{getWords:K}=e.languageProcessing;const{directPrecedenceException:Q,values:X}=e.languageProcessing,{Clause:Y}=X,Z=["sou","és","é","somos","sois","são","era","eras","era","éramos","éreis","eram","serei","serás","será","seremos","sereis","serão","sido","foste","foi","fomos","fostes","fora","foras","fôramos","fôreis","foram","seja","sejas","seja","sejamos","sejais","sejam","fui","fosse","fosses","fosse","fôssemos","fôsseis","fossem","for","fores","for","formos","fordes","forem","seria","serias","seria","seríamos","seríeis","seriam","ser","seres","ser","sermos","serdes","serem"],{createRegexFromArray:aa,getClauses:da}=e.languageProcessing,ea={Clause:class extends Y{constructor(a,d){super(a,d),this._participles=function(a){return K(a).filter((a=>function(a){return["a","o","as","os"].some((d=>{if(a.length>3&&a.endsWith(d)){const e=a.slice(0,-d.length);return H.includes(e)}}))}(a)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const a=this.getClauseText(),d=this.getParticiples().filter((d=>!Q(a,d,D)));this.setPassive(d.length>0)}},stopwords:G,auxiliaries:Z,regexes:{auxiliaryRegex:aa(Z),stopCharacterRegex:/([:,])(?=[ \n\r\t'"+\-»«‹›<>])/gi,followingAuxiliaryExceptionRegex:aa(["o","a","os","as","um","ums","uma","umas"])}};function ia(a){return da(a,ea)}const ra=window.lodash,{findMatchingEndingInArray:sa}=e.languageProcessing,oa=function(a,d){return d.includes(a)},ta=function(a,d,e){for(let i=0;ifunction(a,d){a.toLowerCase();const e=d.externalStemmer.vowels,i=d.externalStemmer.nasalVowels.originals,r=d.externalStemmer.nasalVowels.replacements,s=(a=ta(a,i,r)).length;if(s<2)return a;let o=s,t=s,n=s;for(let d=0;d3&&(n=oa(a[1],e)?oa(a[0],e)&&oa(a[1],e)?function(a,d,e){const i=a.length;for(let r=e;r{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>Y});const r=window.yoast.analysis,n=["один","одна","одно","два","две","три","четыре","пÑть","шеÑть","Ñемь","воÑемь","девÑть","деÑÑть","Ñтот","Ñтого","Ñтому","Ñтим","Ñтом","Ñта","Ñтой","Ñту","Ñто","Ñтого","Ñтому","Ñти","Ñтих","Ñтим","Ñтими","тот","того","тому","тем","том","та","той","ту","те","тех","тем","теми","тех","такой","такого","такому","таким","такаÑ","такую","такое","такие","таких","таким","такими","Ñтольких","Ñтольким","Ñтолько","Ñтолькими","вот"],s=["безуÑловно","беÑÑпорно","вероÑтно","веÑтимо","вдобавок","видимо","вишь","во-вторых","во-первых","вообще-то","впрочем","дабы","едва","ежели","еÑли","затем ","зачем","ибо","итак","так","кабы","кажетÑÑ","кажиÑÑŒ","коли","кÑтати","лишь","лучше","наверно","наверное","например","небоÑÑŒ","нежели","неÑомненно","но","однако","оÑобенно","оттого","отчего","поди","пожалуй","позволь","позвольте","покамеÑÑ‚","покуда","поÑкольку","потому","притом","причем","только","хотÑ","чтоб","чтобы","чуть","Ñкобы"],o=s.concat(["а вдобавок","а вот","а именно","а не то","а не","а потом","а также","без вÑÑкого ÑомнениÑ","без того чтобы не","без того, чтобы не","Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñ‚Ð¾Ð¼Ñƒ","более того","будто бы","будь то","буквально","в итоге","в конце концов","в общей ÑложноÑти","в общем-то","в общем","в отношении того что","в отношении того, что","в принципе","в Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ð²ÐµÑ Ñ‚Ð¾Ð¼Ñƒ что","в Ð¿Ñ€Ð¾Ñ‚Ð¸Ð²Ð¾Ð²ÐµÑ Ñ‚Ð¾Ð¼Ñƒ, что","в противоположноÑть тому","в результате","в Ñамом деле","в Ñвою очередь","в ÑвÑзи Ñ Ñ‚ÐµÐ¼ что","в ÑвÑзи Ñ Ñ‚ÐµÐ¼","в Ñилу того что","в Ñилу того","в Ñилу чего","в Ñлуча","в Ñравнении Ñ Ñ‚ÐµÐ¼","в ÑущноÑти говорÑ","в ÑущноÑти","в таком Ñлучае","в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº","в то времÑ, как","в том Ñлучае","в чаÑтноÑти","в-третьих","ввиду того","вернее говорÑ","вероÑтнее вÑего","видите ли","видишь ли","вмеÑте Ñ Ñ‚ÐµÐ¼","вмеÑто того","вне вÑÑкого ÑомнениÑ","вне ÑомнениÑ","во вÑÑком Ñлучае","Ð²Ð¾Ð»Ñ Ð²Ð°ÑˆÐ°","Ð²Ð¾Ð»Ñ Ñ‚Ð²Ð¾Ñ","вообще говорÑ","вопреки тому","вплоть до того","вроде того как","вроде того что","вроде того","вроде того","вÑледÑтвие того что","вÑледÑтвие чего","грубо говорÑ","да еще","да и то","дай бог памÑть","даром что","Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы","Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы","до тех пор пока","до тех пор, пока","до того как","до того, как","едва лишь","едва только","ежели бы","еÑли угодно","жалко, что","жаль, что","за Ñчет того что","за Ñчет того, что","знамо дело","и вот еще","из-за того что","из-за того, что","иначе говорÑ","иÑÑ…Ð¾Ð´Ñ Ð¸Ð· того","к вашему Ñведению","к неÑчаÑтью","к огорчению","к примеру Ñказать","к примеру","к приÑкорбию","к радоÑти","к Ñлову Ñказать","к Ñожалению","к Ñтыду Ñвоему","к Ñтыду","к ÑчаÑтью","к твоему Ñведению","к тому же","к удивлению","к ужаÑу","к чеÑти","как будто","как бы там ни было","как бы то ни было","как бы","как вам извеÑтно","как вдруг","как видите","как видишь","как видно","как водитÑÑ","как выÑÑнилоÑÑŒ","как выÑÑнÑетÑÑ","как говорилоÑÑŒ","как говоритÑÑ","как еÑли бы","как знать","как извеÑтно","как на заказ","как назло","как нарочно","как ни говори","как ни говорите","как ни Ñтранно","как оказалоÑÑŒ","как оказываетÑÑ","как полагаетÑÑ","как положено","как правило","как принÑто говорить","как принÑто","как Ñказано","как Ñкоро","как ÑледÑтвие","как Ñловно","как только","как хотите","как Ñто ни Ñтранно","ко вÑему прочему","коль Ñкоро","коль уж","коротко говорÑ","короче говорÑ","кроме вÑего прочего","кÑтати говорÑ","кÑтати Ñказать","лишь бы","лишь только","мало Ñказать","мало того","между нами говорÑ","между прочим","между тем как","может ÑтатьÑÑ","можно подумать","мÑгко выражаÑÑÑŒ","мÑгко говорÑ","на беду","на ваш взглÑд","на мой взглÑд","на неÑчаÑтье","на оÑновании того что","на оÑновании того, что","на первый взглÑд","на Ñамом деле","на Ñлучай","на твой взглÑд","на худой конец","надо полагать","нарÑду Ñ Ñ‚ÐµÐ¼ что","нарÑду Ñ Ñ‚ÐµÐ¼","наÑчет того что","наÑчет того, что","не в пример тому как","не в пример тому, как","не то чтобы","Ð½ÐµÐ²Ð·Ð¸Ñ€Ð°Ñ Ð½Ð° то","незавиÑимо от того","неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то","ничего не Ñкажешь","но вообще-то","кроме того","однако же","откровенно Ñказать","отноÑительно того что","отноÑительно того, что","перед тем","по вашему мнению","по видимоÑти","по вÑей вероÑтноÑти","по вÑей видимоÑти","по данным","по замыÑлу","по идее","по крайней мере","по мере того как","по мере того, как","по мнению","по моему мнению","по обыкновению","по обычаю","по определению","по поводу того","по правде говорÑ","по правде Ñказать","по правде","по преданию","по причине того","по прогнозам","по ÑведениÑм","по Ñвоему обыкновению","по Ñлухам","по ÑовеÑти говорÑ","по ÑовеÑти Ñказать","по ÑовеÑти","по Ñообщению","по ÑообщениÑм","по ÑправедливоÑти говорÑ","по ÑправедливоÑти","по Ñравнению","по ÑтатиÑтике","по Ñути говорÑ","по Ñути дела","по Ñути","по ÑущеÑтву говорÑ","по ÑущеÑтву","по ÑчаÑтью","по твоему мнению","по чеÑти говорÑ","по чеÑти признатьÑÑ","по чеÑти Ñказать","по-вашему","по-видимому","по-ихнему","по-моему","по-нашему","по-твоему","под видом того что","под видом того, что","под предлогом","подобно тому","подумать только","помимо вÑего прочего","помимо вÑего","помимо того","помимо того","помимо Ñтого","понÑтное дело","попроÑту говорÑ","попроÑту Ñказать","поÑле того","потому как","потому что","правду говорÑ","правду Ñказать","правильнее говорÑ","прежде вÑего","прежде нежели","прежде чем","при вÑем том","при уÑловии что","при уÑловии, что","против обыкновениÑ","проще говорÑ","проще Ñказать","прÑмо-таки как","пуÑкай бы","равно как","ради того чтобы","разве что","разумеетÑÑ","Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ позволениÑ","Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ разрешениÑ","Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñтороны","Ñ Ð¼Ð¾ÐµÐ¹ точки зрениÑ","Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ñтороны","Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ Ñказать","Ñ Ñ‚Ð²Ð¾ÐµÐ³Ð¾ позволениÑ","Ñ Ñ‚Ð²Ð¾ÐµÐ³Ð¾ разрешениÑ","Ñ Ñ‚ÐµÐ¼ чтобы","Ñ Ñ‚ÐµÑ… пор как","Ñ Ñ‚Ð¾Ð¹ целью чтобы","Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ зрениÑ","Ñамо Ñобой разумеетÑÑ","Ñверх того что","Ñверх того","Ñказать по правде","Ñказать по ÑовеÑти","Ñказать по чеÑти","Ñкорее вÑего","ÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð¿Ð¾ тому","Ñо Ñвоей Ñтороны","ÑобÑтвенно говорÑ","ÑовÑем как","Ñтало быть","Ñтоит отметить","Ñтрого говорÑ","ÑÑƒÐ´Ñ Ð¿Ð¾ вÑему","ÑÑƒÐ´Ñ Ð¿Ð¾ тому","так или иначе","так как","так что","так чтобы","тем более что","тем не менее","тем паче что","то бишь","то еÑть","тогда как","только бы","только лишь","только чуть","точнее говорÑ","точнее Ñказать","точно так же","что и говорить","что ни говори","что ни говорите","чуть лишь","чуть только","шутка ли Ñказать","шутка ли","шутка Ñказать","Ñто значит, что"]);function i(e){let t=e;return e.forEach((r=>{(r=r.split("-")).length>0&&r.filter((t=>!e.includes(t))).length>0&&(t=t.concat(r))})),t}const c=["быть","был","была","было","были","будет","будут"],a=["мочь","мог","могла","могли","могу","можешь","может","можем","можете","могут","Ñмочь","Ñмогу","Ñможешь","Ñможет","Ñможем","Ñможете","Ñмогут","решитьÑÑ","решилÑÑ","решилаÑÑŒ","решилиÑÑŒ","решуÑÑŒ","решишьÑÑ","решитÑÑ","решимÑÑ","решитеÑÑŒ","решатÑÑ","делать","делал","делала","делало","делали","делали","делаю","делаешь","делает","делаем","делаете","делают","Ñделать","Ñделал","Ñделала","Ñделало","Ñделали","Ñделали","Ñделаю","Ñделаешь","Ñделает","Ñделаем","Ñделаете","Ñделают","иметь","имел","имела","имело","имели","имею","имеешь","имеет","имеем","имеете","имеют","Ñледует","Ñледовало","необходимо","необходим","необходима","необходимы","нужно","нужен","нужна","обÑзан","обÑзана","обÑзано","обÑзаны","должен","должна","должно","должны","требуетÑÑ","требуютÑÑ","имеетÑÑ","имеютÑÑ","еÑть","можно"],l=["поÑвитьÑÑ","поÑвилÑÑ","поÑвилаÑÑŒ","поÑвилоÑÑŒ","поÑвилиÑÑŒ","поÑвлюÑÑŒ","поÑвишьÑÑ","поÑвитÑÑ","поÑвимÑÑ","поÑвитеÑÑŒ","поÑвимÑÑ","поÑвлÑтьÑÑ","поÑвлÑлÑÑ","поÑвлÑлаÑÑŒ","поÑвлÑлоÑÑŒ","поÑвлÑлиÑÑŒ","поÑвлÑÑŽÑÑŒ","поÑвлÑешьÑÑ","поÑвлÑетÑÑ","поÑвлÑемÑÑ","поÑвлÑÑŽÑ‚ÑÑ","поÑвлÑетеÑÑŒ","Ñтал","Ñтала","Ñтало","Ñтану","Ñтанешь","Ñтанет","Ñтанем","Ñтанете","Ñтанут","ÑтановитьÑÑ","ÑтановилÑÑ","ÑтановилоÑÑŒ","ÑтановилаÑÑŒ","ÑтановилиÑÑŒ","ÑтановлюÑÑŒ","ÑтановишьÑÑ","ÑтановитÑÑ","ÑтановимÑÑ","ÑтановитеÑÑŒ","ÑтановÑÑ‚ÑÑ","прийти","пришел","пришёл","пришла","пришло","пришли","приду","придешь","придёшь","придет","придёт","придем","придём","придете","придёте","придут","приходить","приходил","приходила","приходило","приходили","прихожу","приходишь","приходит","приходим","приходите","проиÑходить","проиÑходил","проиÑходила","проиÑходило","проиÑходили","проиÑходит","проиÑходÑÑ‚","держать","держал","держала","держало","держали","держу","держишь","держит","держим","держите","держут","Ñодержать","Ñодержал","Ñодержала","Ñодержало","Ñодержали","Ñодержу","Ñодержишь","Ñодержит","Ñодержим","Ñодержите","Ñодержут","оÑтатьÑÑ","оÑталÑÑ","оÑталаÑÑŒ","оÑталоÑÑŒ","оÑталиÑÑŒ","оÑтануÑÑŒ","оÑтанешьÑÑ","оÑтанетÑÑ","оÑтанутÑÑ","оÑтанетеÑÑŒ","оÑтанемÑÑ","оÑтаватьÑÑ","оÑтавалÑÑ","оÑтавалаÑÑŒ","оÑтавалоÑÑŒ","оÑтавалиÑÑŒ","оÑтаюÑÑŒ","оÑтаешьÑÑ","оÑтаёшьÑÑ","оÑтаетÑÑ","оÑтаётÑÑ","оÑтаемÑÑ","оÑтаёмÑÑ","оÑтаетеÑÑŒ","оÑтаётеÑÑŒ","оÑтаютÑÑ","изменÑтьÑÑ","изменÑлÑÑ","изменÑлаÑÑŒ","изменÑлоÑÑŒ","изменÑлиÑÑŒ","изменюÑÑŒ","изменишьÑÑ","изменитÑÑ","изменимÑÑ","изменитеÑÑŒ","изменÑÑ‚ÑÑ","уÑпеть","уÑпел","уÑпела","уÑпело","уÑпели","уÑпею","уÑпеешь","уÑпеет","уÑпеем","уÑпеете","уÑпеют","заниматьÑÑ","занималÑÑ","занималаÑÑŒ","занимаюÑÑŒ","занимаешьÑÑ","занимаетÑÑ","занимаемÑÑ","занимаетеÑÑŒ","занимаемÑÑ","занÑтьÑÑ","занÑлÑÑ","занÑлаÑÑŒ","занÑлиÑÑŒ","займуÑÑŒ","займешьÑÑ","займетÑÑ","займемÑÑ","займетеÑÑŒ","займутÑÑ","займёшьÑÑ","займётÑÑ","займёмÑÑ","займётеÑÑŒ"],u=["Ñказать","Ñказал","Ñказала","Ñказали","говорить","говорил","говорила","говорили","говорит","говорю","говорим","говоришь","говорÑÑ‚","говорите","объÑвить","объÑвил","объÑвила","объÑвили","заÑвить","заÑвил","заÑвила","заÑвили","ÑпроÑить","ÑпроÑил","ÑпроÑила","ÑпроÑили","указать","указал","указала","указали","объÑÑнить","объÑÑнил","объÑÑнила","объÑÑнили","подумать","подумал","подумала","подумали","думать","думал","думала","думали","думаю","думает","думаешь","думаем","думаете","думают","раÑÑказывать","раÑÑказывал","раÑÑказывала","раÑÑказывали","раÑÑказывают","раÑÑказывает","раÑÑказать","раÑÑказал","раÑÑказала","раÑÑказали","обÑудить","обÑудил","обÑудила","обÑудили","предложить","предложил","предложила","предложили","понимать","понимал","понимала","понимали","понимаю","понимаешь","понимает","понимаем","понимаете","понимают","добавить","добавил","добавила","добавили","добавлю","добавишь","добавит","добавим","добавите","добавÑÑ‚"],f=["казатьÑÑ","кажетÑÑ","казалоÑÑŒ","казалаÑÑŒ","казалÑÑ","казалиÑÑŒ","кажутÑÑ","давайте","давай","хотеть","хочу","хочешь","хочет","хотим","хотите","хотÑÑ‚","хотел","хотела","хотело","хотели","показать","показал","показала","показало","показали","покажу","покажешь","покажет","покажем","покажете","покажут","показывать","показывал","показывала","показывало","показывали","показываю","показываешь","показывает","показываем","показываете","показывают","идти","шел","шёл","шла","шло","шли","иду","идешь","идёшь","идет","идёт","идем","идём","идете","идёте","идут","брать","брал","брала","брало","брали","беру","берешь","берёшь","берёт","берем","берём","берёте","берут","взÑть","взÑл","взÑла","взÑло","взÑли","возьму","возьмешь","возьмет","возьмем","возьмете","возьмут","клаÑть","кладу","кладешь","кладет","кладёшь","кладёт","кладем","кладете","кладём","кладёте","кладут","положить","положил","положила","положило","положили","положу","положишь","положит","положим","положите","положат","иÑпользовать","иÑпользовал","иÑпользовала","иÑпользовало","иÑпользовали","иÑпользую","иÑпользуешь","иÑпользуем","иÑпользуете","иÑпользуют","пробовать","пробовал","пробовала","пробовало","пробовали","пробую","пробуешь","пробует","пробуем","пробуете","пробуют","попробовать","попробовал","попробовала","попробовало","попробовали","попробую","попробуешь","попробует","попробуем","попробуете","попробуют","иметь","имел","имела","имело","имели","имею","имеешь","имеет","имеем","имеете","имеют","означать","означал","означала","означало","означали","означает","означают","добавлÑть","добавлÑл","добавлÑла","добавлÑло","добавлÑли","добавлÑÑŽ","добавлÑешь","добавлÑет","добавлÑем","добавлÑете","добавлÑÑŽÑ‚","ÑоÑтоÑть","ÑоÑтоÑл","ÑоÑтоÑла","ÑоÑтоÑло","ÑоÑтоÑли","ÑоÑтою","ÑоÑтоишь","ÑоÑтоит","ÑоÑтоим","ÑоÑтоите","ÑоÑтоÑÑ‚","убеждатьÑÑ","убедилÑÑ","убедилаÑÑŒ","убедилоÑÑŒ","убедишьÑÑ","убедитÑÑ","убедимÑÑ","убедитеÑÑŒ","убедÑÑ‚ÑÑ","убеждать","убедил","убедила","убедили","убедишь","убедит","убедим","убедите","убедÑÑ‚","ÑвлÑтьÑÑ","ÑвлÑлÑÑ","ÑвлÑлаÑÑŒ","ÑвлÑлоÑÑŒ","ÑвлÑлиÑÑŒ","ÑвлÑÑŽÑÑŒ","ÑвлÑешьÑÑ","ÑвлÑетÑÑ","ÑвлÑемÑÑ","ÑвлÑетеÑÑŒ","ÑвлÑÑŽÑ‚ÑÑ"],g=["один","одна","одно","одни","два","две","двое","двух","двоих","двум","двоим","двумÑ","двоими","три","трое","трех","трёх","троих","трем","трём","троим","тремÑ","четыре","пÑть","шеÑть","Ñемь","воÑемь","девÑть","деÑÑть","одиннадцать","двенадцать","тринадцать","четырнадцать","пÑтнадцать","шеÑтнадцать","Ñемнадцать","воÑемнадцать","девÑтнадцать","двадцать","тридцать","Ñорок","пÑтьдеÑÑÑ‚","шеÑтьдеÑÑÑ‚","ÑемьдеÑÑÑ‚","воÑемьдеÑÑÑ‚","девÑноÑто","Ñто","Ñотни","двеÑти","триÑта","четыреÑта","пÑтьÑот","шеÑтьÑот","ÑемьÑот","воÑемьÑот","девÑтьÑот","тыÑÑча","тыÑÑчи","тыÑÑче","тыÑÑчей","тыÑÑчам","тыÑÑчами","тыÑÑчах","тыÑ","миллион","миллиона","миллиону","миллионом","миллионе","миллионы","миллионов","миллионам","миллионами","миллионах","миллиард","миллиарда","миллиарду","миллиардом","миллиарде","миллиарды","миллиардов","миллиардам","миллиардами","миллиардах"],m=["первый","первого","первому","первом","первым","перваÑ","первой","первое","первые","первых","первыми","второй","второго","второму","втором","вторым","втораÑ","второй","второе","вторые","вторых","вторыми","третий","третьего","третьему","третьим","третьем","третьÑ","третьей","третье","третьи","третьих","третьими","четвертый","четвертого","четвертому","четвертым","четвертом","четвертаÑ","четвертой","четвертое","четвертые","четвертых","четвертыми","пÑтый","пÑтого","пÑтому","пÑтом","пÑтым","пÑтаÑ","пÑтое","пÑтые","пÑтых","пÑтыми","шеÑтой","шеÑтого","шеÑтому","шеÑтым","шеÑтаÑ","шеÑтое","шеÑтые","шеÑтых","шеÑтыми","Ñедьмой","Ñедьмого","Ñедьмому","Ñедьмым","ÑедьмаÑ","Ñедьмое","Ñедьмые","Ñедьмых","Ñедьмыми","воÑьмой","воÑьмого","воÑьмому","воÑьмым","воÑьмаÑ","воÑьмое","воÑьмые","воÑьмых","воÑьмыми","девÑтый","девÑтого","девÑтому","девÑтым","девÑтаÑ","девÑтое","девÑтые","девÑтых","девÑтыми","деÑÑтый","деÑÑтого","деÑÑтому","деÑÑтым","деÑÑтаÑ","деÑÑтое","деÑÑтые","деÑÑтых","деÑÑтыми","одиннадцатый","одиннадцатого","одиннадцатому","одиннадцатым","одиннадцатаÑ","одиннадцатое","одиннадцатые","одиннадцатых","одиннадцатыми","двенадцатый","двенадцатого","двенадцатому","двенадцатым","двенадцатаÑ","двенадцатое","двенадцатые","двенадцатых","двенадцатыми","тринадцатый","тринадцатого","тринадцатому","тринадцатым","тринадцатаÑ","тринадцатое","тринадцатые","тринадцатых","тринадцатыми","четырнадцатый","четырнадцатого","четырнадцатому","четырнадцатым","четырнадцатаÑ","четырнадцатое","четырнадцатые","четырнадцатых","четырнадцатыми","пÑтнадцатый","пÑтнадцатого","пÑтнадцатому","пÑтнадцатым","пÑтнадцатаÑ","пÑтнадцатое","пÑтнадцатые","пÑтнадцатых","пÑтнадцатыми","шеÑтнадцатый","шеÑтнадцатого","шеÑтнадцатому","шеÑтнадцатым","шеÑтнадцатаÑ","шеÑтнадцатое","шеÑтнадцатые","шеÑтнадцатых","шеÑтнадцатыми","Ñемнадцатый","Ñемнадцатого","Ñемнадцатому","Ñемнадцатым","ÑемнадцатаÑ","Ñемнадцатое","Ñемнадцатые","Ñемнадцатых","Ñемнадцатыми","воÑемнадцатый","воÑемнадцатого","воÑемнадцатому","воÑемнадцатым","воÑемнадцатаÑ","воÑемнадцатое","воÑемнадцатые","воÑемнадцатых","воÑемнадцатыми","девÑтнадцатый","девÑтнадцатого","девÑтнадцатому","девÑтнадцатым","девÑтнадцатаÑ","девÑтнадцатое","девÑтнадцатые","девÑтнадцатых","девÑтнадцатыми","двадцатый","двадцатого","двадцатому","двадцатым","двадцатаÑ","двадцатое","двадцатые","двадцатых","двадцатыми","тридцатый","тридцатого","тридцатому","тридцатым","тридцатаÑ","тридцатое","тридцатые","тридцатых","тридцатыми","Ñороковой","Ñорокового","Ñороковому","Ñороковым","ÑороковаÑ","Ñороковое","Ñороковые","Ñороковых","Ñороковыми","пÑтидеÑÑтый","пÑтидеÑÑтого","пÑтидеÑÑтому","пÑтидеÑÑтым","пÑтидеÑÑтаÑ","пÑтидеÑÑтое","пÑтидеÑÑтые","пÑтидеÑÑтых","пÑтидеÑÑтыми","шеÑтидеÑÑтый","шеÑтидеÑÑтого","шеÑтидеÑÑтому","шеÑтидеÑÑтым","шеÑтидеÑÑтаÑ","шеÑтидеÑÑтое","шеÑтидеÑÑтые","шеÑтидеÑÑтых","шеÑтидеÑÑтыми","ÑемидеÑÑтый","ÑемидеÑÑтого","ÑемидеÑÑтому","ÑемидеÑÑтым","ÑемидеÑÑтаÑ","ÑемидеÑÑтое","ÑемидеÑÑтые","ÑемидеÑÑтых","ÑемидеÑÑтыми","воÑьмидеÑÑтый","воÑьмидеÑÑтого","воÑьмидеÑÑтому","воÑьмидеÑÑтым","воÑьмидеÑÑтаÑ","воÑьмидеÑÑтое","воÑьмидеÑÑтые","воÑьмидеÑÑтых","воÑьмидеÑÑтыми","девÑноÑтый","девÑноÑтого","девÑноÑтому","девÑноÑтым","девÑноÑтаÑ","девÑноÑтое","девÑноÑтые","девÑноÑтых","девÑноÑтыми","Ñотый","Ñотого","Ñотому","Ñотым","ÑотаÑ","Ñотое","Ñотые","Ñотых","Ñотыми","двухÑотый","двухÑотого","двухÑотому","двухÑотым","двухÑотаÑ","двухÑотое","двухÑотые","двухÑотых","двухÑотыми","трехÑотый","трехÑотого","трехÑотому","трехÑотым","трехÑотаÑ","трехÑотое","трехÑотые","трехÑотых","трехÑотыми","трёхÑотый","трёхÑотого","трёхÑотому","трёхÑотым","трёхÑотаÑ","трёхÑотое","трёхÑотые","трёхÑотых","трёхÑотыми","четырехÑотый","четырехÑотого","четырехÑотому","четырехÑотым","четырехÑотаÑ","четырехÑотое","четырехÑотые","четырехÑотых","четырехÑотыми","четырёхÑотый","четырёхÑотого","четырёхÑотому","четырёхÑотым","четырёхÑотаÑ","четырёхÑотое","четырёхÑотые","четырёхÑотых","четырёхÑотыми","пÑтиÑотый","пÑтиÑотого","пÑтиÑотому","пÑтиÑотым","пÑтиÑотаÑ","пÑтиÑотое","пÑтиÑотые","пÑтиÑотых","пÑтиÑотыми","шеÑтиÑотый","шеÑтиÑотого","шеÑтиÑотому","шеÑтиÑотым","шеÑтиÑотаÑ","шеÑтиÑотое","шеÑтиÑотые","шеÑтиÑотых","шеÑтиÑотыми","ÑемиÑотый","ÑемиÑотого","ÑемиÑотому","ÑемиÑотым","ÑемиÑотаÑ","ÑемиÑотое","ÑемиÑотые","ÑемиÑотых","ÑемиÑотыми","воÑьмиÑотый","воÑьмиÑотого","воÑьмиÑотому","воÑьмиÑотым","воÑьмиÑотаÑ","воÑьмиÑотое","воÑьмиÑотые","воÑьмиÑотых","воÑьмиÑотыми","девÑтиÑотый","девÑтиÑотого","девÑтиÑотому","девÑтиÑотым","девÑтиÑотаÑ","девÑтиÑотое","девÑтиÑотые","девÑтиÑотых","девÑтиÑотыми","тыÑÑчный","тыÑÑчного","тыÑÑчному","тыÑÑчным","тыÑÑчнаÑ","тыÑÑчное","тыÑÑчные","тыÑÑчных","тыÑÑчными","миллионный","миллионного","миллионному","миллионным","миллионнаÑ","миллионное","миллионные","миллионных","миллионными","миллиардный","миллиардного","миллиардному","миллиардным","миллиарднаÑ","миллиардное","миллиардные","миллиардных","миллиардными"],d=["Ñ","менÑ","мне","мной","мною","ты","тебÑ","тебе","тобой","он","его","него","ему","нему","нем","нём","им","ним","она","ее","нее","неё","её","ей","ею","ней","нею","оно","мы","нам","наÑ","нами","вы","ваÑ","вам","вами","они","них","ими","ними","их"],x=["тот","тому","том","тем","того","та","той","ту","то","те","тех","теми","Ñтот","Ñтому","Ñтом","Ñтим","Ñтого","Ñта","Ñтой","Ñту","Ñто","Ñти","Ñтих","Ñтими","такой","такого","такому","таким","таком","такаÑ","такую","такое","такие","таких","такими","Ñтакий","Ñтакого","Ñтакому","Ñтаким","Ñтаком","ÑтакаÑ","Ñтакую","Ñтакое","Ñтакие","Ñтаких","Ñтакими"],S=["мой","моего","моему","моём","моим","моÑ","моей","мое","моё","мои","моих","моим","твой","твоего","твоему","твоём","твоем","твоим","твоÑ","твоей","твою","твое","твоё","твои","твоих","твоим","Ñвой","Ñвоего","Ñвоему","Ñвоём","Ñвоем","Ñвоим","ÑвоÑ","Ñвоей","Ñвою","Ñвое","Ñвоё","Ñвои","Ñвоих","Ñвоим","наш","нашего","нашему","нашем","наша","нашей","наше","наши","нашим","наших","ваш","вашего","вашему","вашем","ваша","вашей","ваше","ваши","вашим","ваших"],y=["некоторый","некоторого","некоторому","некоторым","некотором","некотораÑ","некоторую","некоторое","некоторые","некоторых","некоторыми","многие","многого","многому","многим","многом","многаÑ","многую","многое","многие","многих","многими","много","множеÑтво","каждый","каждого","каждому","каждым","каждом","каждаÑ","каждую","каждое","каждые","каждых","каждыми","доÑтаточно","мало","более","больше","большинÑтво","большинÑтва","большинÑтву","большинÑтве","неÑколько","неÑкольких","менее","меньше","наиболее","наименее","угодно","же"],b=["ÑебÑ","Ñебе"],h=["ничто","ничего","ничему","ничем","ни о чем","ни о чём","никто","никого","никому","никем","ни о ком","веÑÑŒ","вÑего","вÑему","вÑем","вÑём","вÑе","вÑÑ‘","вÑех","вÑеми","вÑÑкий","вÑÑкого","вÑÑкому","вÑÑким","вÑÑком","вÑÑкаÑ","вÑÑкой","вÑÑкую","вÑÑкое","вÑÑкие","вÑÑких","вÑÑкими","кто-то","кого-то","кому-то","кем-то","ком-то","что-то","чего-то","чему-то","чем-то","чём-то","кто-либо","кого-либо","кому-либо","кем-либо","ком-либо","что-либо","чего-либо","чему-либо","чем-либо","чём-либо","кое-кто","кое-кого","кое-кому","кое-кем","кое-ком","кое-что","кое-чего","кое-чему","кое-чем","кое-чём","любой","любого","любому","любым","любом","любаÑ","любую","любое","любые","любых","любыми","какой","какого","какому","каким","каком","какаÑ","какую","какое","какие","каких","какими","какой-то","какого-то","какому-то","каким-то","каком-то","какаÑ-то","какую-то","какое-то","какие-то","каких-то","какими-то"],p=["который","которого","которому","которым","котором","котораÑ","которую","которое","которые","которых","которыми","чей","чьего","чьему","чьим","чьем","чьём","чьÑ","чьей","чье","чьё","чьи","чьих","чьими"],v=["кто","кого","кому","кем","что","чего","чему","чем","чём"],w=["где","куда","откуда","как","почему","зачем","Ñколько","ли","когда"],O=["везде","нигде","там","здеÑÑŒ","повÑюду"],P=["никогда","вÑегда","однажды","единожды","дважды","трижды","четырежды","уже"],E=["чрезвычайно","очень","крайне","абÑолютно","полноÑтью","Ñовершенно","чаÑто","чаще","довольно","неÑколько","значительно","немного","немножко","чаÑтично","проÑто"],W=["базовый","базового","базовому","базовым","базовом","базоваÑ","базовой","базовое","базовые","базовых","базовым","базовыми","быÑтрый","быÑтрого","быÑтрому","быÑтрым","быÑтром","быÑтраÑ","быÑтрой","быÑтрое","быÑтрые","быÑтрых","быÑтрым","быÑтрыми","быÑтрейший","быÑтрейшего","быÑтрейшему","быÑтрейшим","быÑтрейшем","быÑтрейшаÑ","быÑтрейшей","быÑтрейшее","быÑтрейшие","быÑтрейших","быÑтрейшим","быÑтрейшими","большой","большого","большому","большим","большом","большаÑ","большое","большие","больших","большим","большими","быÑтрее","быÑтро","важный","важного","важному","важным","важном","важнаÑ","важной","важное","важные","важных","важным","важными","важнее","важно","возможный","возможного","возможному","возможным","возможном","возможнаÑ","возможной","возможное","возможные","возможных","возможным","возможными","выÑокий","выÑокого","выÑокому","выÑоким","выÑоком","выÑокаÑ","выÑокой","выÑокое","выÑокие","выÑоких","выÑоким","выÑокими","выше","выÑоко","главный","главного","главному","главным","главном","главнаÑ","главной","главное","главные","главных","главным","главными","далекий","далекого","далекому","далеким","далеком","далекаÑ","далекой","далекое","далекие","далеких","далеким","далекими","далёкий","далёкого","далёкому","далёким","далёком","далёкаÑ","далёкой","далёкое","далёкие","далёких","далёким","далёкими","длиннее","длинный","длинного","длинному","длинным","длинном","длиннаÑ","длинной","длинное","длинные","длинных","длинным","длинными","доÑтупный","доÑтупного","доÑтупному","доÑтупным","доÑтупном","доÑтупнаÑ","доÑтупной","доÑтупное","доÑтупные","доÑтупных","доÑтупным","доÑтупными","жуткий","жуткого","жуткому","жутким","жутком","жуткаÑ","жуткой","жуткое","жуткие","жутких","жутким","жуткими","законченный","законченного","законченному","законченным","законченном","законченнаÑ","законченной","законченное","законченные","законченных","законченным","законченными","занÑÑ‚","занÑта","занÑты","занÑтой","занÑтого","занÑтому","занÑтым","занÑтом","занÑтаÑ","занÑтое","занÑтые","занÑтых","занÑтым","занÑтыми","короткий","короткого","короткому","коротким","коротком","короткаÑ","короткой","короткое","короткие","коротких","коротким","короткими","короче","кошмарный","кошмарного","кошмарному","кошмарным","кошмарном","кошмарнаÑ","кошмарной","кошмарное","кошмарные","кошмарных","кошмарным","кошмарными","краÑивый","краÑивого","краÑивому","краÑивым","краÑивом","краÑиваÑ","краÑивой","краÑивое","краÑивые","краÑивых","краÑивым","краÑивыми","лёгкий","лёгкого","лёгкому","лёгким","лёгком","лёгкаÑ","лёгкой","лёгкое","лёгкие","лёгких","лёгким","лёгкими","легкий","легкого","легкому","легким","легком","легкаÑ","легкой","легкое","легкие","легких","легким","легкими","легко","легче","лучше","лучший","лучшего","лучшему","лучшим","лучшем","лучшаÑ","лучшей","лучшее","лучшие","лучших","лучшим","лучшими","маленький","маленького","маленькому","маленьким","маленьком","маленькаÑ","маленькой","маленькое","маленькие","маленьких","маленьким","маленькими","малюÑенький","малюÑенького","малюÑенькому","малюÑеньким","малюÑеньком","малюÑенькаÑ","малюÑенькой","малюÑенькое","малюÑенькие","малюÑеньких","малюÑеньким","малюÑенькими","меньший","меньшего","меньшему","меньшим","меньшем","меньшаÑ","меньшей","меньшее","меньшие","меньших","меньшим","меньшими","многочиÑленный","многочиÑленного","многочиÑленному","многочиÑленным","многочиÑленном","многочиÑленнаÑ","многочиÑленной","многочиÑленное","многочиÑленные","многочиÑленных","многочиÑленным","многочиÑленными","молодой","молодого","молодому","молодым","молодом","молодаÑ","молодое","называемый","называемого","называемому","называемым","называемом","называемаÑ","называемой","называемое","называемые","называемых","называемым","называемыми","больший","большего","большему","большим","большем","большаÑ","большей","большее","большие","больших","большим","большими","наибольший","наибольшего","наибольшему","наибольшим","наибольшем","наибольшаÑ","наибольшей","наибольшее","наибольшие","наибольших","наибольшим","наибольшими","меньший","меньшего","меньшему","меньшим","меньшем","меньшаÑ","меньшей","меньшее","меньшие","меньших","меньшим","меньшими","наименьший","наименьшего","наименьшему","наименьшим","наименьшем","наименьшаÑ","наименьшей","наименьшее","наименьшие","наименьших","наименьшим","наименьшими","наихудший","наихудшего","наихудшему","наихудшим","наихудшем","наихудшаÑ","наихудшей","наихудшее","наихудшие","наихудших","наихудшим","наихудшими","напрÑмую","наÑтоÑщий","наÑтоÑщего","наÑтоÑщему","наÑтоÑщим","наÑтоÑщем","наÑтоÑщаÑ","наÑтоÑщей","наÑтоÑщее","наÑтоÑщие","наÑтоÑщих","наÑтоÑщим","наÑтоÑщими","недавний","недавнего","недавнему","недавним","недавнем","недавнÑÑ","недавней","недавнее","недавние","недавних","недавним","недавними","необходимый","необходимого","необходимому","необходимым","необходимом","необходимаÑ","необходимой","необходимое","необходимые","необходимых","необходимым","необходимыми","ниже","низкий","низкого","низкому","низким","низком","низкаÑ","низкой","низкое","низкие","низких","низким","низкими","новейший","новейшего","новейшему","новейшим","новейшем","новейшаÑ","новейшей","новейшее","новейшие","новейших","новейшим","новейшими","новый","нового","новому","новым","новом","новаÑ","новое","новые","новых","новым","новыми","нормальный","нормального","нормальному","нормальным","нормальном","нормальнаÑ","нормальное","нормальные","нормальных","нормальным","нормальными","обыкновенный","обыкновенного","обыкновенному","обыкновенным","обыкновенном","обыкновеннаÑ","обыкновенное","обыкновенные","обыкновенных","обыкновенным","обыкновенными","обычный","обычного","обычному","обычным","обычном","обычнаÑ","обычное","обычные","обычных","обычным","обычными","оÑновной","оÑновного","оÑновному","оÑновным","оÑновном","оÑновнаÑ","оÑновное","оÑновные","оÑновных","оÑновным","оÑновными","оÑобенный","оÑобенного","оÑобенному","оÑобенным","оÑобенном","оÑобеннаÑ","оÑобенное","оÑобенные","оÑобенных","оÑобенным","оÑобенными","отличный","отличного","отличному","отличным","отличном","отличнаÑ","отличное","отличные","отличных","отличным","отличными","очевидный","очевидного","очевидному","очевидным","очевидном","очевиднаÑ","очевидное","очевидные","очевидных","очевидным","очевидными","плохой","плохого","плохому","плохим","плохом","плохаÑ","плохое","плохие","плохих","плохим","плохими","поÑледний","поÑледнего","поÑледнему","поÑледним","поÑледнем","поÑледнÑÑ","поÑледней","поÑледнее","поÑледние","поÑледних","поÑледним","поÑледними","поÑтоÑнно","поÑтоÑнный","поÑтоÑнного","поÑтоÑнному","поÑтоÑнным","поÑтоÑнном","поÑтоÑннаÑ","поÑтоÑнное","поÑтоÑнные","поÑтоÑнных","поÑтоÑнным","поÑтоÑнными","похожий","похожего","похожему","похожим","похожем","похожаÑ","похожей","похожее","похожие","похожих","похожим","похожими","почти","предыдущий","предыдущего","предыдущему","предыдущим","предыдущем","предыдущаÑ","предыдущей","предыдущее","предыдущие","предыдущих","предыдущим","предыдущими","проÑтейший","проÑтейшаÑ","проÑтейшей","проÑтой","проÑтого","проÑтому","проÑтым","проÑтом","проÑтаÑ","проÑтое","проÑтые","проÑтых","проÑтым","проÑтыми","проще","ранний","раннего","раннему","ранним","раннем","раннÑÑ","ранней","раннее","ранние","ранних","ранним","ранними","разный","разного","разному","разным","разном","разнаÑ","разной","разное","разные","разных","разным","разными","Ñамый","Ñамого","Ñамому","Ñамым","Ñамом","ÑамаÑ","Ñамой","Ñамое","Ñамые","Ñамых","Ñамым","Ñамыми","ÑобÑтвенный","ÑобÑтвенного","ÑобÑтвенному","ÑобÑтвенным","ÑобÑтвенном","ÑобÑтвеннаÑ","ÑобÑтвенное","ÑобÑтвенные","ÑобÑтвенных","ÑобÑтвенным","ÑобÑтвенными","Ñпециальный","Ñпециального","Ñпециальному","Ñпециальным","Ñпециальном","ÑпециальнаÑ","Ñпециальное","Ñпециальные","Ñпециальных","Ñпециальным","Ñпециальными","Ñпецифичный","Ñпецифичного","Ñпецифичному","Ñпецифичным","Ñпецифичном","ÑпецифичнаÑ","Ñпецифичное","Ñпецифичные","Ñпецифичных","Ñпецифичным","Ñпецифичными","Ñредний","Ñреднего","Ñреднему","Ñредним","Ñреднем","ÑреднÑÑ","Ñредней","Ñреднее","Ñредние","Ñредних","Ñредним","Ñредними","Ñтарейший","Ñтарейшего","Ñтарейшему","Ñтарейшим","Ñтарейшем","ÑтарейшаÑ","Ñтарейшей","Ñтарейшее","Ñтарейшие","Ñтарейших","Ñтарейшим","Ñтарейшими","Ñтарый","Ñтарого","Ñтарому","Ñтарым","Ñтаром","ÑтараÑ","Ñтарой","Ñтарое","Ñтарые","Ñтарых","Ñтарым","Ñтарыми","текущий","текущего","текущему","текущим","текущем","текущаÑ","текущей","текущее","текущие","текущих","текущим","текущими","Ñ‚Ñжелее","Ñ‚Ñжёлый","Ñ‚Ñжёлого","Ñ‚Ñжёлому","Ñ‚Ñжёлым","Ñ‚Ñжёлом","Ñ‚ÑжёлаÑ","Ñ‚Ñжёлое","Ñ‚Ñжёлые","Ñ‚Ñжёлых","Ñ‚Ñжёлым","Ñ‚Ñжёлыми","Ñ‚Ñжелый","Ñ‚Ñжелого","Ñ‚Ñжелому","Ñ‚Ñжелым","Ñ‚Ñжелом","Ñ‚ÑжелаÑ","Ñ‚Ñжелое","Ñ‚Ñжелые","Ñ‚Ñжелых","Ñ‚Ñжелым","Ñ‚Ñжелыми","хороший","хорошего","хорошему","хорошим","хорошем","хорошаÑ","хорошей","хорошее","хорошие","хороших","хорошим","хорошими","хорошо","худший","худшего","худшему","худшим","худшем","худшаÑ","худшей","худшее","худшие","худших","худшим","худшими","хуже","целый","целого","целому","целым","целом","целаÑ","целой","целое","целые","целых","целым","целыми","именно","обÑзательно","дейÑтвительно"],R=["а-лÑ","без","безо","без ведома","благодарÑ","близ","в","во","в адреÑ","в аÑпекте","в виде","в глазах","в глубь","в деле","в дополнение к","в духе","в завершение","в завиÑимоÑти от","в заключение","в знак","в интереÑах","в качеÑтве","в лице","в меру","в направлении","в направлении к","в направлении ко","в нарушение","в облаÑти","в обмен на","в обÑтановке","в обход","в ответ на","в отдалении от","в отличие от","в отношении","в памÑть","в плане","в пользу","в порÑдке","в предвидении","в предвкушении","в преддверии","в приÑутÑтвии","в продолжение","в противноÑть","в противовеÑ","в противоположноÑть","в процеÑÑе","в разрезе","в районе","в рамках","в раÑÑуждении","в раÑчете на","в результате","в роли","в Ñ€Ñду","в Ñвете","в ÑвÑзи Ñ","в ÑвÑзи Ñо","в Ñилу","в Ñлучае","в ÑмыÑле","в ÑоглаÑии Ñ","в ÑообщеÑтве Ñ","в ÑоответÑтвии Ñ","в ÑоответÑтвии Ñо","в ÑопоÑтавлении Ñ","в Ñопровождении","в ÑоÑтаве","в Ñравнении Ñ","в Ñравнении Ñо","в Ñтороне от","в Ñторону","в Ñфере","в Ñчет","в течение","в угоду","в униÑон Ñ","в уÑловиÑÑ…","в ущерб","в форме","в ходе","в целÑÑ…","в чеÑть","в чиÑле","в чиÑло","вблизи","вблизи от","вверху","ввиду","вглубь","вдалеке от","вдали","вдали от","вдобавок к","вдобавок ко","вдогон","вдогонку","вдоль","вдоль по","взамен","включаÑ","вкоÑÑŒ","вкруг","вмеÑте Ñ","вмеÑте Ñо","вмеÑто","вне","вне завиÑимоÑти от","внизу","внутри","внутрь","вовнутрь","во времÑ","во главе","во главе Ñ","во главе Ñо","во избежание","во изменение","во имÑ","во иÑполнение","во Ñлаву","возле","вокруг","волею","вопреки","вперед","впереди","вплоть до","впредь до","вразрез","времен","вроде","вÑлед","воÑлед","вÑлед за","вÑледÑтвие","выше","длÑ","до","за","за иÑключением","за Ñчет","заботами","из","изо","из чиÑла","из-за","из-под","из-подо","изнутри","именем","имени","иÑключаÑ","иÑÑ…Ð¾Ð´Ñ Ð¸Ð·","к","ко","к чиÑлу","каÑаемо","каÑательно","кончаÑ","кроме","кругом","между","меж","промеж","промежду","на","мимо","минуÑ","на","на базе","на благо","на глазах у","на грани","на имÑ","на манер","на оÑновании","на оÑнове","на почве","на правах","на предмет","на протÑжении","на пути","на пути к","на пути ко","на путÑÑ…","на путÑÑ… к","на путÑÑ… ко","на радоÑть","на Ñлучай","на Ñмену","на Ñтороне","на Ñторону","на уровне","на фоне","наверху","навÑтречу","над","надо","назади","накануне","наперекор","наперерез","наперехват","наподобие","напротив","наравне Ñ","наравне Ñо","нарÑду Ñ","нарÑду Ñо","наÑупротив","наÑчет","начинаÑ","Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ð¾Ñ‚","Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ","Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñо","не без","не в пример","не Ð³Ð¾Ð²Ð¾Ñ€Ñ Ð¾","не Ð³Ð¾Ð²Ð¾Ñ€Ñ Ð¾Ð±","не Ð³Ð¾Ð²Ð¾Ñ€Ñ Ð¾Ð±Ð¾","не до","не ÑчитаÑ","невдалеке от","Ð½ÐµÐ²Ð·Ð¸Ñ€Ð°Ñ Ð½Ð°","недалеко","недалеко от","незавиÑимо","незавиÑимо от","неподалеку от","неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð°","ниже","о","об","обо","около","окреÑÑ‚","от","ото","от имени","от лица","отноÑительно","памÑти","перед","передо","пред","предо","перед","передо","пред","предо","перед лицом","Ð¿Ð»ÑŽÑ Ðº","Ð¿Ð»ÑŽÑ ÐºÐ¾","по","по адреÑу","по аналогии Ñ","по аналогии Ñо","по вине","по иÑтечении","по линии","по мере","по направлению","по направлению к","по направлению ко","по отношению к","по отношению ко","по поводу","по праву","по примеру","по причине","по прошеÑтвии","по пути","по Ñлучаю","по Ñравнению Ñ","по Ñравнению Ñо","по Ñтопам","по чаÑти","по-за","по-над","по-под","поблизоÑти","поблизоÑти от","поверх","погодÑ","под","подо","под видом","под знаком","под предлогом","под предÑедательÑтвом","под Ñгидой","подле","подобно","позади","позднее","поздней","позже","помимо","поодаль от","поперед","поперек","порÑдка","поÑереди","поÑередине","поÑередке","поÑередь","поÑле","поÑреди","поÑредине","поÑредÑтвом","превыше","прежде","при","при вÑей","при вÑем","при вÑех","при помощи","при поÑредÑтве","при уÑловии","применительно к","применительно ко","про","против","противно","путем","ради","раньше","Ñ€Ñдом Ñ","Ñ€Ñдом Ñо","Ñ","Ñо","Ñ Ð²ÐµÐ´Ð¾Ð¼Ð°","Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ","Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼","Ñ Ñ†ÐµÐ»ÑŒÑŽ","Ñбоку","Ñбоку от","Ñверх","Ñверху","Ñвыше","Ñзади","Ñилами","Ñквозь","Ñледом за","ÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð¿Ð¾","Ñнаружи","Ñнизу","Ñо Ñтороны","ÑовмеÑтно Ñ","ÑовмеÑтно Ñо","Ñовокупно Ñ","ÑоглаÑно","ÑоглаÑно Ñ","ÑоглаÑно Ñо","Ñообразно","Ñообразно Ñ","Ñообразно Ñо","Ñообща Ñ","Ñообща Ñо","ÑоответÑтвенно","ÑоответÑтвенно Ñ","ÑоответÑтвенно Ñо","Ñоразмерно","Ñоразмерно Ñ","Ñоразмерно Ñо","Ñпереди","ÑпуÑÑ‚Ñ","Ñравнительно Ñ","Ñравнительно Ñо","Ñреди","Ñредь","Ñродни","ÑÑƒÐ´Ñ Ð¿Ð¾","Ñупротив","ÑчитаÑ","типа","у","ценой","ценою","через","что до"],j=["и","или","и/или","еще","ещё","а"],D=["еÑли","даже"],N=["ох","вау","тю-тю","ох-ох-ох","ÑÑ…","фуф","ага","угу","упÑ","ой","бее","ну","вот"],T=["ÑÑ‚","ч","л","кг","полкило","г","гр","мл","дл","пол-литра","мг","Ñм","м","км"],k=["Ñекунд","Ñекунда","минут","минута","чаÑ","чаÑа","чаÑов","день","днÑ","дней","неделÑ","недели","недель","меÑÑц","меÑÑца","меÑÑцев","год","года","году","годы","лет","гг","ÑегоднÑ","завтра","поÑлезавтра","вчера","позавчера","Ñ‚Ñ‹Ñ Ð´Ð¾ н Ñ","н Ñ","до н Ñ","Ñ‚Ñ‹Ñ Ð´Ð¾ н"],A=["вещь","вещи","вещью","вещей","вещам","вещами","вещах","метод","метода","методом","методу","методе","методы","методам","методами","методах","ÑпоÑоб","ÑпоÑоба","ÑпоÑобом","ÑпоÑобу","ÑпоÑобе","ÑпоÑобы","ÑпоÑобам","ÑпоÑобами","ÑпоÑобах","ÑвойÑтво","ÑвойÑтва","ÑвойÑтве","ÑвойÑтв","ÑвойÑтвам","ÑвойÑтвах","ÑвойÑтвами","Ñлучай","ÑлучаÑ","Ñлучаем","Ñлучаю","Ñлучае","Ñлучаи","ÑлучаÑм","ÑлучаÑми","ÑлучаÑÑ…","дело","дела","делом","делу","деле","делам","делами","делах","ÑходÑтво","ÑходÑтва","ÑходÑтве","ÑходÑтв","ÑходÑтвам","ÑходÑтвах","ÑходÑтвами","чаÑть","чаÑти","чаÑтью","чаÑтей","чаÑÑ‚Ñм","чаÑÑ‚Ñми","чаÑÑ‚ÑÑ…","штука","штуки","штуке","штуку","штук","штукам","штуками","штуках","раз","раза","разом","разу","разе","разы","разам","разами","разах","вид","вида","видом","виду","виде","виды","видам","видами","видах","процент","процента","процентом","проценту","проценте","проценты","процентам","процентами","процентах","аÑпект","аÑпекта","аÑпектом","аÑпекту","аÑпекте","аÑпекты","аÑпектам","аÑпектами","аÑпектах","пункт","пункта","пунктом","пункту","пункте","пункты","пунктам","пунктами","пунктах","идеÑ","идеи","идее","идеей","идеÑм","идеÑми","идеÑÑ…","тема","темы","теме","тему","темой","темам","темами","темах","человек","человека","человеком","человеку","человеке","деталь","детали","деталью","деталей","деталÑм","деталÑми","деталÑÑ…","подробноÑть","подробноÑти","подробноÑтью","подробноÑтей","подробноÑÑ‚Ñм","подробноÑÑ‚Ñми","подробноÑÑ‚ÑÑ…","фактор","фактора","фактором","фактору","факторе","факторы","факторам","факторами","факторах","разница","разницы","разнице","разницу","разницей","различие","различиÑ","различию","различий","различиÑм","различиÑми","различиÑÑ…","отличие","отличиÑ","отличию","отличий","отличиÑм","отличиÑми","отличиÑÑ…","ÑитуациÑ","Ñитуации","Ñитуацией","Ñитуаций","ÑитуациÑм","ÑитуациÑми","ÑитуациÑÑ…","Ñфера","Ñферы","Ñфере","Ñферу","Ñферой","Ñферам","Ñферами","Ñферах"],M=["нет","да","конечно","отлично","верх","низ","ок","окей","аминь","и Ñ‚ д","и Ñ‚. д.","и так далее","и тому подобное","проÑти","проÑтите","пожалуйÑта","тут","так","не","вдруг","теперь","точно","бы","Ñам","Ñама","Ñамо","Ñами","иногда","ÑейчаÑ","тоже","также","пока","ведь","потом","поÑтому","Ñвно","ни","не","будто","напрочь","причем","причём","зато","вперед","вперёд","назад","Ñразу","пуÑть","пуÑкай"],F=(i([].concat(m,W)),i([].concat(R,j,x,E,y,S)),i([].concat(s,P,d,b,N,g,c,a,l,u,f,h,D,p,v,w,O,M,T,k,A)),i([].concat(g,m,x,S,b,d,y,h,["чей-то","чьего-то","чьему-то","чьим-то","чьем-то","чьём-то","чьÑ-то","чьей-то","чье-то","чьё-то","чьи-то","чьих-то","чьими-то","ничей","чьего","чьему","чьим","чьем","чьём","чьÑ","чьей","чье","чьё","чьи","чьих","чьими","ничейный","ничейного","ничейному","ничейным","ничейном","ничейнаÑ","ничейной","ничейную","ничейное","ничейные","ничейных","ничейными"],p,v,w,O,P,c,a,l,R,j,D,u,s,E,f,N,W,T,A,M,["г-н","г-жа","тов","гр-н","гр-а","гр","проф"],["мл"],k))),G=[["будь то","или"],["возможно","а может быть"],["возможно","возможно"],["доÑтаточно","чтобы"],["едва","как"],["ежели","то"],["еÑли говорить о","то"],["еÑли и не","то"],["еÑли не","то"],["еÑли","то"],["мало того что","еще и"],["мало того, что","еще и"],["не Ñказать чтобы","но"],["не Ñказать, чтобы","но"],["не Ñтолько","Ñколько"],["не то чтобы","но"],["не только не","но и"],["Ñтоило","как"],["так как","то"],["только","как"],["хоть бы","а то"],["хоть","хоть"],["хотÑ","но"],["чем","лучше бы"],["чем","тем"],["что каÑаетÑÑ","то"]],I=JSON.parse('{"vowels":"аоиеёÑыуюÑ","deviations":{"vowels":[{"fragments":["[аоиеёÑыуюÑ][аоиеёÑыуюÑ]"],"countModifier":1},{"fragments":["[аоиеёÑыуюÑ][аоиеёÑыуюÑ][аоиеёÑыуюÑ]"],"countModifier":1}],"words":{"full":[],"fragments":[]}}}'),L={borders:{veryEasy:80,easy:70,fairlyEasy:60,okay:50,fairlyDifficult:40,difficult:20,veryDifficult:0},scores:{veryEasy:9,easy:9,fairlyEasy:9,okay:9,fairlyDifficult:6,difficult:3,veryDifficult:3}},V={recommendedLength:15},_=window.lodash,B=function(e,t){return t.externalStemmer.vowels.includes(e)},C=function(e,t,r){const n=e.substring(0,r),s=e.substring(n.length);let o;if(Array.isArray(t)){if(o=new RegExp(t[0],"i"),o.test(s))return n+s.replace(o,"");o=new RegExp(t[1],"i")}else o=new RegExp(t,"i");return o.test(s)?e=n+s.replace(o,""):null},{baseStemmer:J}=r.languageProcessing;function q(e){const t=(0,_.get)(e.getData("morphology"),"ru",!1);return t?e=>function(e,t){if(t.doNotStemSuffix.includes(e))return e;const r=function(e,t){for(const r of t)if(r[1].includes(e))return r[0];return null}(e,t.exceptionStemsWithFullForms);if(r)return r;const n=function(e,t){let r=0,n=0;const s=e.length;for(let o=1;ot.includes(e)));if(r)return r[0]}(e,t.stemsThatBelongToOneWord);return c||e}(e,t):J}const z=["абÑолютизирован","абÑолютизирована","абÑолютизировано","абÑолютизированы","абÑтрагирован","абÑтрагирована","абÑтрагировано","абÑтрагированы","автоматизирован","автоматизирована","автоматизировано","автоматизированы","адаптирован","адаптирована","адаптировано","адаптированы","адреÑован","адреÑована","адреÑовано","адреÑованы","адÑорбирован","адÑорбирована","адÑорбировано","адÑорбированы","аккредитован","аккредитована","аккредитовано","аккредитованы","аккумулирован","аккумулирована","аккумулировано","аккумулированы","активизирован","активизирована","активизировано","активизированы","активирован","активирована","активировано","активированы","актуализирован","актуализирована","актуализировано","актуализированы","акцентирован","акцентирована","акцентировано","акцентированы","амниÑтирован","амниÑтирована","амниÑтировано","амниÑтированы","амортизирован","амортизирована","амортизировано","амортизированы","ампутирован","ампутирована","ампутировано","ампутированы","ангажирован","ангажирована","ангажировано","ангажированы","аннулирован","аннулирована","аннулировано","аннулированы","анонÑирован","анонÑирована","анонÑировано","анонÑированы","апробирован","апробирована","апробировано","апробированы","аранжирован","аранжирована","аранжировано","аранжированы","аргументирован","аргументирована","аргументировано","аргументированы","арендован","арендована","арендовано","арендованы","ареÑтован","ареÑтована","ареÑтовано","ареÑтованы","аÑÑигнован","аÑÑигнована","аÑÑигновано","аÑÑигнованы","аÑÑимилирован","аÑÑимилирована","аÑÑимилировано","аÑÑимилированы","аÑÑоциирован","аÑÑоциирована","аÑÑоциировано","аÑÑоциированы","атакован","атакована","атаковано","атакованы","аттеÑтован","аттеÑтована","аттеÑтовано","аттеÑтованы","благоÑловлен","благоÑловлена","благоÑловлено","благоÑловлены","благоуÑтроен","благоуÑтроена","благоуÑтроено","благоуÑтроены","блокирован","блокирована","блокировано","блокированы","бойкотирован","бойкотирована","бойкотировано","бойкотированы","бронирован","бронирована","бронировано","бронированы","брошен","брошена","брошено","брошены","вакцинирован","вакцинирована","вакцинировано","вакцинированы","вбит","вбита","вбито","вбиты","вброшен","вброшена","вброшено","вброшены","вбухан","вбухана","вбухано","вбуханы","введен","введена","введено","введены","ввезен","ввезена","ввезено","ввезены","ввергнут","ввергнута","ввергнуто","ввергнуты","вверен","вверена","вверено","вверены","ввернут","ввернута","ввернуто","ввернуты","ввинчен","ввинчена","ввинчено","ввинчены","вдавлен","вдавлена","вдавлено","вдавлены","вдарен","вдарена","вдарено","вдарены","вдвинут","вдвинута","вдвинуто","вдвинуты","вделан","вделана","вделано","вделаны","вдет","вдета","вдето","вдеты","вдолблен","вдолблена","вдолблено","вдолблены","вдохновлен","вдохновлена","вдохновлено","вдохновлены","венчан","венчана","венчано","венчаны","вжат","вжата","вжато","вжаты","вживлен","вживлена","вживлено","вживлены","взбаламучен","взбаламучена","взбаламучено","взбаламучены","взбешен","взбешена","взбешено","взбешены","взбит","взбита","взбито","взбиты","взбодрен","взбодрена","взбодрено","взбодрены","взболтан","взболтана","взболтано","взболтаны","взбудоражена","взбудоражено","взбудоражены","взведен","взведена","взведено","взведены","взвешен","взвешена","взвешено","взвешены","взвинчен","взвинчена","взвинчено","взвинчены","взвихрен","взвихрена","взвихрено","взвихрены","взволнована","взволновано","взволнованы","взгромозжден","взгромозждена","взгромозждено","взгромозждены","вздернут","вздернута","вздернуто","вздернуты","вздет","вздета","вздето","вздеты","вздут","вздута","вздуто","вздуты","вздыблен","вздыблена","вздыблено","вздыблены","взлелеÑн","взлелеÑна","взлелеÑно","взлелеÑны","взломан","взломана","взломано","взломаны","взлохмачен","взлохмачена","взлохмачено","взлохмачены","взметнут","взметнута","взметнуто","взметнуты","взмылен","взмылена","взмылено","взмылены","взнуздан","взнуздана","взнуздано","взнузданы","взорван","взорвана","взорвано","взорваны","взращен","взращена","взращено","взращены","взрезан","взрезана","взрезано","взрезаны","взрыхлен","взрыхлена","взрыхлено","взрыхлены","взъерошен","взъерошена","взъерошено","взъерошены","взыÑкан","взыÑкана","взыÑкано","взыÑканы","взÑÑ‚","взÑта","взÑто","взÑты","видоизменен","видоизменена","видоизменено","видоизменены","визирован","визирована","визировано","визированы","вкачен","вкачена","вкачено","вкачены","вклеен","вклеена","вклеено","вклеены","включен","включена","включено","включены","вколот","вколота","вколото","вколоты","вколочен","вколочена","вколочено","вколочены","вкопан","вкопана","вкопано","вкопаны","вкраплен","вкраплена","вкраплено","вкраплены","вкушен","вкушена","вкушено","вкушены","влеплен","влеплена","влеплено","влеплены","влит","влита","влито","влиты","вложен","вложена","вложено","вложены","вмазан","вмазана","вмазано","вмазаны","вменен","вменена","вменено","вменены","вмещен","вмещена","вмещено","вмещены","вмонтирован","вмонтирована","вмонтировано","вмонтированы","вмурован","вмурована","вмуровано","вмурованы","вмÑÑ‚","вмÑта","вмÑто","вмÑты","внедрен","внедрена","внедрено","внедрены","внеÑен","внеÑена","внеÑено","внеÑены","внушен","внушена","внушено","внушены","вобран","вобрана","вобрано","вобраны","вовлечен","вовлечена","вовлечено","вовлечены","вогнан","вогнана","вогнано","вогнаны","водворен","водворена","водворено","водворены","водружен","водружена","водружено","водружены","возбуждена","возбуждено","возбуждены","возведен","возведена","возведено","возведены","возвеличен","возвеличена","возвеличено","возвеличены","возвещен","возвещена","возвещено","возвещены","возвращен","возвращена","возвращено","возвращены","возвышен","возвышена","возвышено","возвышены","возглавлен","возглавлена","возглавлено","возглавлены","возглашен","возглашена","возглашено","возглашены","воздвигнут","воздвигнута","воздвигнуто","воздвигнуты","возделан","возделана","возделано","возделаны","возложен","возложена","возложено","возложены","возмещен","возмещена","возмещено","возмещены","возмущена","возмущено","возмущены","вознагражден","вознаграждена","вознаграждено","вознаграждены","вознеÑен","вознеÑена","вознеÑено","вознеÑены","возобновлен","возобновлена","возобновлено","возобновлены","возрожден","возрождена","возрождено","возрождены","воображен","воображена","воображено","воображены","воодушевлен","воодушевлена","воодушевлено","воодушевлены","вооружен","вооружена","вооружено","вооружены","воплощен","воплощена","воплощено","воплощены","вопрошен","вопрошена","вопрошено","вопрошены","воÑкрешен","воÑкрешена","воÑкрешено","воÑкрешены","воÑпет","воÑпета","воÑпето","воÑпеты","воÑпитана","воÑпитано","воÑпитаны","воÑпламенен","воÑпламенена","воÑпламенено","воÑпламенены","воÑполнен","воÑполнена","воÑполнено","воÑполнены","воÑпрещен","воÑпрещена","воÑпрещено","воÑпрещены","воÑпринÑÑ‚","воÑпринÑта","воÑпринÑто","воÑпринÑты","воÑпроизведен","воÑпроизведена","воÑпроизведено","воÑпроизведены","воÑÑлавлен","воÑÑлавлена","воÑÑлавлено","воÑÑлавлены","воÑÑтановлен","воÑÑтановлена","воÑÑтановлено","воÑÑтановлены","воÑтребована","воÑтребовано","воÑтребованы","воÑхищен","воÑхищена","воÑхищено","воÑхищены","воткнут","воткнута","воткнуто","воткнуты","впаÑн","впаÑна","впаÑно","впаÑны","впечатлен","впечатлена","впечатлено","впечатлены","впиÑан","впиÑана","впиÑано","впиÑаны","впитан","впитана","впитано","впитаны","впихнут","впихнута","впихнуто","впихнуты","вплетен","вплетена","вплетено","вплетены","вправлен","вправлена","вправлено","вправлены","впрыÑнут","впрыÑнута","впрыÑнуто","впрыÑнуты","впрÑжен","впрÑжена","впрÑжено","впрÑжены","впущен","впущена","впущено","впущены","вразумлен","вразумлена","вразумлено","вразумлены","врезан","врезана","врезано","врезаны","врублен","врублена","врублено","врублены","вручен","вручена","вручено","вручены","врыт","врыта","врыто","врыты","вÑажен","вÑажена","вÑажено","вÑажены","вÑелен","вÑелена","вÑелено","вÑелены","вÑкинут","вÑкинута","вÑкинуто","вÑкинуты","вÑкипÑчен","вÑкипÑчена","вÑкипÑчено","вÑкипÑчены","вÑколыхнут","вÑколыхнута","вÑколыхнуто","вÑколыхнуты","вÑкопан","вÑкопана","вÑкопано","вÑкопаны","вÑкормлен","вÑкормлена","вÑкормлено","вÑкормлены","вÑкружен","вÑкружена","вÑкружено","вÑкружены","вÑкрыт","вÑкрыта","вÑкрыто","вÑкрыты","вÑоÑан","вÑоÑана","вÑоÑано","вÑоÑаны","вÑпахан","вÑпахана","вÑпахано","вÑпаханы","вÑпенен","вÑпенена","вÑпенено","вÑпенены","вÑплеÑнут","вÑплеÑнута","вÑплеÑнуто","вÑплеÑнуты","вÑполошен","вÑполошена","вÑполошено","вÑполошены","вÑпорот","вÑпорота","вÑпорото","вÑпороты","вÑтавлен","вÑтавлена","вÑтавлено","вÑтавлены","вÑтревожен","вÑтревожена","вÑтревожено","вÑтревожены","вÑтречен","вÑтречена","вÑтречено","вÑтречены","вÑтроен","вÑтроена","вÑтроено","вÑтроены","вÑтрÑхнут","вÑтрÑхнута","вÑтрÑхнуто","вÑтрÑхнуты","вÑунут","вÑунута","вÑунуто","вÑунуты","вÑучен","вÑучена","вÑучено","вÑучены","втащен","втащена","втащено","втащены","втерт","втерта","втерто","втерты","втиÑнут","втиÑнута","втиÑнуто","втиÑнуты","втолкнут","втолкнута","втолкнуто","втолкнуты","втолкован","втолкована","втолковано","втолкованы","втоптан","втоптана","втоптано","втоптаны","втравлен","втравлена","втравлено","втравлены","втÑнут","втÑнута","втÑнуто","втÑнуты","вшит","вшита","вшито","вшиты","выбелен","выбелена","выбелено","выбелены","выбит","выбита","выбито","выбиты","выболтан","выболтана","выболтано","выболтаны","выбран","выбрана","выбрано","выбраны","выбрит","выбрита","выбрито","выбриты","выброшен","выброшена","выброшено","выброшены","вывален","вывалена","вывалено","вывалены","вывалÑн","вывалÑна","вывалÑно","вывалÑны","выварен","выварена","выварено","выварены","выведан","выведана","выведано","выведаны","выведен","выведена","выведено","выведены","вывезен","вывезена","вывезено","вывезены","выверен","выверена","выверено","выверены","вывернут","вывернута","вывернуто","вывернуты","выветрен","выветрена","выветрено","выветрены","вывешен","вывешена","вывешено","вывешены","вывихнут","вывихнута","вывихнуто","вывихнуты","вывожен","вывожена","вывожено","вывожены","выворочен","выворочена","выворочено","выворочены","выгадан","выгадана","выгадано","выгаданы","выглажен","выглажена","выглажено","выглажены","выгнан","выгнана","выгнано","выгнаны","выгнут","выгнута","выгнуто","выгнуты","выговорен","выговорена","выговорено","выговорены","выгорожен","выгорожена","выгорожено","выгорожены","выгравирован","выгравирована","выгравировано","выгравированы","выгребен","выгребена","выгребено","выгребены","выгружен","выгружена","выгружено","выгружены","выдавлен","выдавлена","выдавлено","выдавлены","выдвинут","выдвинута","выдвинуто","выдвинуты","выдворен","выдворена","выдворено","выдворены","выделан","выделана","выделано","выделаны","выделен","выделена","выделено","выделены","выдержан","выдержана","выдержано","выдержаны","выдернут","выдернута","выдернуто","выдернуты","выдолблен","выдолблена","выдолблено","выдолблены","выдохнут","выдохнута","выдохнуто","выдохнуты","выдран","выдрана","выдрано","выдраны","выдреÑÑирована","выдреÑÑировано","выдреÑÑированы","выдуман","выдумана","выдумано","выдуманы","выдут","выдута","выдуто","выдуты","выжат","выжата","выжато","выжаты","выждан","выждана","выждано","выжданы","выжит","выжита","выжито","выжиты","выжран","выжрана","выжрано","выжраны","вызван","вызвана","вызвано","вызваны","вызволен","вызволена","вызволено","вызволены","вызнан","вызнана","вызнано","вызнаны","вызубрен","вызубрена","вызубрено","вызубрены","выигран","выиграна","выиграно","выиграны","выиÑкан","выиÑкана","выиÑкано","выиÑканы","выказан","выказана","выказано","выказаны","выкачан","выкачана","выкачано","выкачаны","выкачен","выкачена","выкачено","выкачены","выкинут","выкинута","выкинуто","выкинуты","выклеван","выклевана","выклевано","выклеваны","выкликнут","выкликнута","выкликнуто","выкликнуты","выключен","выключена","выключено","выключены","выклÑнчен","выклÑнчена","выклÑнчено","выклÑнчены","выкован","выкована","выковано","выкованы","выковырÑн","выковырÑна","выковырÑно","выковырÑны","выколот","выколота","выколото","выколоты","выколочен","выколочена","выколочено","выколочены","выкопан","выкопана","выкопано","выкопаны","выкормлен","выкормлена","выкормлено","выкормлены","выкорчеван","выкорчевана","выкорчевано","выкорчеваны","выкошен","выкошена","выкошено","выкошены","выкраден","выкрадена","выкрадено","выкрадены","выкрашен","выкрашена","выкрашено","выкрашены","выкрикнут","выкрикнута","выкрикнуто","выкрикнуты","выкроен","выкроена","выкроено","выкроены","выкручен","выкручена","выкручено","выкручены","выкупан","выкупана","выкупано","выкупаны","выкуплен","выкуплена","выкуплено","выкуплены","выкурен","выкурена","выкурено","выкурены","выкушен","выкушена","выкушено","выкушены","вылакан","вылакана","вылакано","вылаканы","вылеплен","вылеплена","вылеплено","вылеплены","вылечен","вылечена","вылечено","вылечены","вылизан","вылизана","вылизано","вылизаны","вылит","вылита","вылито","вылиты","выловлен","выловлена","выловлено","выловлены","выложен","выложена","выложено","выложены","выломан","выломана","выломано","выломаны","вылуплен","вылуплена","вылуплено","вылуплены","вымазан","вымазана","вымазано","вымазаны","выманен","выманена","выманено","выманены","вымаран","вымарана","вымарано","вымараны","вымахан","вымахана","вымахано","вымаханы","выменÑн","выменÑна","выменÑно","выменÑны","выметен","выметена","выметено","выметены","вымолвлен","вымолвлена","вымолвлено","вымолвлены","вымолен","вымолена","вымолено","вымолены","вымотан","вымотана","вымотано","вымотаны","вымочен","вымочена","вымочено","вымочены","вымощен","вымощена","вымощено","вымощены","вымучен","вымучена","вымучено","вымучены","вымуштрован","вымуштрована","вымуштровано","вымуштрованы","вымыт","вымыта","вымыто","вымыты","вымышлен","вымышлена","вымышлено","вымышлены","вынеÑен","вынеÑена","вынеÑено","вынеÑены","выношен","выношена","выношено","выношены","вынужден","вынуждена","вынуждено","вынуждены","вынут","вынута","вынуто","вынуты","выпачкан","выпачкана","выпачкано","выпачканы","выпеÑтован","выпеÑтована","выпеÑтовано","выпеÑтованы","выпечен","выпечена","выпечено","выпечены","выпилен","выпилена","выпилено","выпилены","выпиÑан","выпиÑана","выпиÑано","выпиÑаны","выпит","выпита","выпито","выпиты","выпихнут","выпихнута","выпихнуто","выпихнуты","выплавлен","выплавлена","выплавлено","выплавлены","выплакан","выплакана","выплакано","выплаканы","выплачен","выплачена","выплачено","выплачены","выплеÑнут","выплеÑнута","выплеÑнуто","выплеÑнуты","выплюнут","выплюнута","выплюнуто","выплюнуты","выполнен","выполнена","выполнено","выполнены","выпорот","выпорота","выпорото","выпороты","выпотрошен","выпотрошена","выпотрошено","выпотрошены","выправлен","выправлена","выправлено","выправлены","выпровожен","выпровожена","выпровожено","выпровожены","выпроÑтан","выпроÑтана","выпроÑтано","выпроÑтаны","выпрошен","выпрошена","выпрошено","выпрошены","выпрÑмлен","выпрÑмлена","выпрÑмлено","выпрÑмлены","выпучен","выпучена","выпучено","выпучены","выпущен","выпущена","выпущено","выпущены","выпытан","выпытана","выпытано","выпытаны","выпÑчен","выпÑчена","выпÑчено","выпÑчены","выработан","выработана","выработано","выработаны","выражен","выражена","выражено","выражены","выращен","выращена","выращено","выращены","вырван","вырвана","вырвано","вырваны","вырезан","вырезана","вырезано","вырезаны","выровнÑн","выровнÑна","выровнÑно","выровнÑны","выронен","выронена","выронено","выронены","вырублен","вырублена","вырублено","вырублены","выруган","выругана","выругано","выруганы","выручен","выручена","выручено","выручены","вырыт","вырыта","вырыто","вырыты","выÑажен","выÑажена","выÑажено","выÑажены","выÑвечен","выÑвечена","выÑвечено","выÑвечены","выÑвобожден","выÑвобождена","выÑвобождено","выÑвобождены","выÑелен","выÑелена","выÑелено","выÑелены","выÑечен","выÑечена","выÑечено","выÑечены","выÑеÑн","выÑеÑна","выÑеÑно","выÑеÑны","выÑижен","выÑижена","выÑижено","выÑижены","выÑказан","выÑказана","выÑказано","выÑказаны","выÑкоблен","выÑкоблена","выÑкоблено","выÑкоблены","выÑкребен","выÑкребена","выÑкребено","выÑкребены","выÑлан","выÑлана","выÑлано","выÑланы","выÑлежен","выÑлежена","выÑлежено","выÑлежены","выÑлужен","выÑлужена","выÑлужено","выÑлужены","выÑлушан","выÑлушана","выÑлушано","выÑлушаны","выÑмеÑн","выÑмеÑна","выÑмеÑно","выÑмеÑны","выÑмотрен","выÑмотрена","выÑмотрено","выÑмотрены","выÑоÑан","выÑоÑана","выÑоÑано","выÑоÑаны","выÑпрошен","выÑпрошена","выÑпрошено","выÑпрошены","выÑтавлен","выÑтавлена","выÑтавлено","выÑтавлены","выÑтиран","выÑтирана","выÑтирано","выÑтираны","выÑтлан","выÑтлана","выÑтлано","выÑтланы","выÑтоÑн","выÑтоÑна","выÑтоÑно","выÑтоÑны","выÑтрадан","выÑтрадана","выÑтрадано","выÑтраданы","выÑтрелен","выÑтрелена","выÑтрелено","выÑтрелены","выÑтрижен","выÑтрижена","выÑтрижено","выÑтрижены","выÑтроен","выÑтроена","выÑтроено","выÑтроены","выÑтруган","выÑтругана","выÑтругано","выÑтруганы","выÑтужен","выÑтужена","выÑтужено","выÑтужены","выÑунут","выÑунута","выÑунуто","выÑунуты","выÑушен","выÑушена","выÑушено","выÑушены","выÑчитан","выÑчитана","выÑчитано","выÑчитаны","вытаращен","вытаращена","вытаращено","вытаращены","вытащен","вытащена","вытащено","вытащены","вытерплен","вытерплена","вытерплено","вытерплены","вытерт","вытерта","вытерто","вытерты","вытеÑан","вытеÑана","вытеÑано","вытеÑаны","вытеÑнен","вытеÑнена","вытеÑнено","вытеÑнены","выткан","выткана","выткано","вытканы","вытолкнут","вытолкнута","вытолкнуто","вытолкнуты","вытоптан","вытоптана","вытоптано","вытоптаны","выторгован","выторгована","выторговано","выторгованы","выточен","выточена","выточено","выточены","вытравлен","вытравлена","вытравлено","вытравлены","вытребован","вытребована","вытребовано","вытребованы","вытрÑÑен","вытрÑÑена","вытрÑÑено","вытрÑÑены","вытрÑхнут","вытрÑхнута","вытрÑхнуто","вытрÑхнуты","вытурен","вытурена","вытурено","вытурены","вытÑнут","вытÑнута","вытÑнуто","вытÑнуты","выужен","выужена","выужено","выужены","выучен","выучена","выучено","выучены","выхвачен","выхвачена","выхвачено","выхвачены","выхлебан","выхлебана","выхлебано","выхлебаны","выхлопотан","выхлопотана","выхлопотано","выхлопотаны","выхожен","выхожена","выхожено","выхожены","выхолощен","выхолощена","выхолощено","выхолощены","выцарапан","выцарапана","выцарапано","выцарапаны","вычеркнут","вычеркнута","вычеркнуто","вычеркнуты","вычерпан","вычерпана","вычерпано","вычерпаны","вычерчен","вычерчена","вычерчено","вычерчены","вычиÑлен","вычиÑлена","вычиÑлено","вычиÑлены","вычитан","вычитана","вычитано","вычитаны","вычищен","вычищена","вычищено","вычищены","вычленен","вычленена","вычленено","вычленены","вычтен","вычтена","вычтено","вычтены","вышвырнут","вышвырнута","вышвырнуто","вышвырнуты","вышит","вышита","вышито","вышиты","вышколен","вышколена","вышколено","вышколены","выщерблен","выщерблена","выщерблено","выщерблены","выщипан","выщипана","выщипано","выщипаны","выÑвлен","выÑвлена","выÑвлено","выÑвлены","выÑÑнен","выÑÑнена","выÑÑнено","выÑÑнены","газирована","газировано","газированы","гарантирован","гарантирована","гарантировано","гарантированы","гаркнут","гаркнута","гаркнуто","гаркнуты","гармонизирован","гармонизирована","гармонизировано","гармонизированы","герметизирован","герметизирована","герметизировано","герметизированы","глазирован","глазирована","глазировано","глазированы","гоÑпитализирован","гоÑпитализирована","гоÑпитализировано","гоÑпитализированы","грохнут","грохнута","грохнуто","грохнуты","дарован","дарована","даровано","дарованы","датирован","датирована","датировано","датированы","двинут","двинута","двинуто","двинуты","девальвирован","девальвирована","девальвировано","девальвированы","дегуÑтирован","дегуÑтирована","дегуÑтировано","дегуÑтированы","дезавуирован","дезавуирована","дезавуировано","дезавуированы","дезинфицирован","дезинфицирована","дезинфицировано","дезинфицированы","дезинформирован","дезинформирована","дезинформировано","дезинформированы","дезорганизован","дезорганизована","дезорганизовано","дезорганизованы","дезориентирован","дезориентирована","дезориентировано","дезориентированы","декларирован","декларирована","декларировано","декларированы","декорирован","декорирована","декорировано","декорированы","делегирован","делегирована","делегировано","делегированы","демаÑкирован","демаÑкирована","демаÑкировано","демаÑкированы","демобилизован","демобилизована","демобилизовано","демобилизованы","демонтирован","демонтирована","демонтировано","демонтированы","деморализован","деморализована","деморализовано","деморализованы","депонирован","депонирована","депонировано","депонированы","детализирован","детализирована","детализировано","детализированы","детерминирован","детерминирована","детерминировано","детерминированы","деформирован","деформирована","деформировано","деформированы","диагноÑтирован","диагноÑтирована","диагноÑтировано","диагноÑтированы","диÑквалифицирован","диÑквалифицирована","диÑквалифицировано","диÑквалифицированы","диÑкредитирован","диÑкредитирована","диÑкредитировано","диÑкредитированы","диÑкриминирован","диÑкриминирована","диÑкриминировано","диÑкриминированы","диÑлоцирован","диÑлоцирована","диÑлоцировано","диÑлоцированы","диÑциплинирован","диÑциплинирована","диÑциплинировано","диÑциплинированы","дифференцирован","дифференцирована","дифференцировано","дифференцированы","добавлен","добавлена","добавлено","добавлены","добит","добита","добито","добиты","доведен","доведена","доведено","доведены","довезен","довезена","довезено","довезены","доверен","доверена","доверено","доверены","довершен","довершена","довершено","довершены","довожен","довожена","довожено","довожены","доглÑжен","доглÑжена","доглÑжено","доглÑжены","догнан","догнана","догнано","догнаны","договорен","договорена","договорено","договорены","догонÑн","догонÑна","догонÑно","догонÑны","доделан","доделана","доделано","доделаны","додуман","додумана","додумано","додуманы","дожат","дожата","дожато","дожаты","дожеван","дожевана","дожевано","дожеваны","дожит","дожита","дожито","дожиты","дозволен","дозволена","дозволено","дозволены","дозирован","дозирована","дозировано","дозированы","доигран","доиграна","доиграно","доиграны","доказан","доказана","доказано","доказаны","докончен","докончена","докончено","докончены","документирован","документирована","документировано","документированы","докурен","докурена","докурено","докурены","долбанут","долбанута","долбануто","долбануты","долит","долита","долито","долиты","доложен","доложена","доложено","доложены","домчан","домчана","домчано","домчаны","домыÑлен","домыÑлена","домыÑлено","домыÑлены","донеÑен","донеÑена","донеÑено","донеÑены","доношена","доношено","доношены","допет","допета","допето","допеты","допечен","допечена","допечено","допечены","допиÑан","допиÑана","допиÑано","допиÑаны","допит","допита","допито","допиты","доплачен","доплачена","доплачено","доплачены","дополнен","дополнена","дополнено","дополнены","допрошен","допрошена","допрошено","допрошены","допущен","допущена","допущено","допущены","доработан","доработана","доработано","доработаны","дориÑован","дориÑована","дориÑовано","дориÑованы","доÑажен","доÑажена","доÑажено","доÑажены","доÑказан","доÑказана","доÑказано","доÑказаны","доÑлушан","доÑлушана","доÑлушано","доÑлушаны","доÑмотрен","доÑмотрена","доÑмотрено","доÑмотрены","доÑтавлен","доÑтавлена","доÑтавлено","доÑтавлены","доÑтроен","доÑтроена","доÑтроено","доÑтроены","доÑчитан","доÑчитана","доÑчитано","доÑчитаны","дотащен","дотащена","дотащено","дотащены","дотÑнут","дотÑнута","дотÑнуто","дотÑнуты","дочитан","дочитана","дочитано","дочитаны","драматизирован","драматизирована","драматизировано","драматизированы","дренирован","дренирована","дренировано","дренированы","дублирован","дублирована","дублировано","дублированы","жахнут","жахнута","жахнуто","жахнуты","зааÑфальтирован","зааÑфальтирована","зааÑфальтировано","зааÑфальтированы","забаррикадирован","забаррикадирована","забаррикадировано","забаррикадированы","забинтован","забинтована","забинтовано","забинтованы","забит","забита","забито","забиты","заблеван","заблевана","заблевано","заблеваны","заблокирован","заблокирована","заблокировано","заблокированы","заболочена","заболочено","заболочены","заболтан","заболтана","заболтано","заболтаны","забракован","забракована","забраковано","забракованы","забран","забрана","забрано","забраны","забронирован","забронирована","забронировано","забронированы","заброÑан","заброÑана","заброÑано","заброÑаны","заброшен","заброшена","заброшено","заброшены","забрызган","забрызгана","забрызгано","забрызганы","завален","завалена","завалено","завалены","заварен","заварена","заварено","заварены","заведен","заведена","заведено","заведены","завезен","завезена","завезено","завезены","завербован","завербована","завербовано","завербованы","заверен","заверена","заверено","заверены","завернут","завернута","завернуто","завернуты","заверчен","заверчена","заверчено","заверчены","завершен","завершена","завершено","завершены","завешан","завешана","завешано","завешаны","завещан","завещана","завещано","завещаны","завиден","завидена","завидено","завидены","завизирован","завизирована","завизировано","завизированы","завинчен","завинчена","завинчено","завинчены","завит","завита","завито","завиты","завлечен","завлечена","завлечено","завлечены","завоеван","завоевана","завоевано","завоеваны","заворожен","заворожена","заворожено","заворожены","завуалирован","завуалирована","завуалировано","завуалированы","завышен","завышена","завышено","завышены","завÑзан","завÑзана","завÑзано","завÑзаны","загадан","загадана","загадано","загаданы","загажен","загажена","загажено","загажены","загашен","загашена","загашено","загашены","загипнотизирован","загипнотизирована","загипнотизировано","загипнотизированы","загипÑован","загипÑована","загипÑовано","загипÑованы","заглажен","заглажена","заглажено","заглажены","заглушен","заглушена","заглушено","заглушены","загнан","загнана","загнано","загнаны","загнут","загнута","загнуто","загнуты","заговорен","заговорена","заговорено","заговорены","загорожен","загорожена","загорожено","загорожены","заготовлен","заготовлена","заготовлено","заготовлены","заграбаÑтан","заграбаÑтана","заграбаÑтано","заграбаÑтаны","загребен","загребена","загребено","загребены","загримирован","загримирована","загримировано","загримированы","загромозжден","загромозждена","загромозждено","загромозждены","загружен","загружена","загружено","загружены","загрызен","загрызена","загрызено","загрызены","загрÑзнен","загрÑзнена","загрÑзнено","загрÑзнены","загублен","загублена","загублено","загублены","задавлен","задавлена","задавлено","задавлены","задвинут","задвинута","задвинуто","задвинуты","задейÑтвован","задейÑтвована","задейÑтвовано","задейÑтвованы","заделан","заделана","заделано","заделаны","задерган","задергана","задергано","задерганы","задержан","задержана","задержано","задержаны","задернут","задернута","задернуто","задернуты","задет","задета","задето","задеты","задобрен","задобрена","задобрено","задобрены","задолбан","задолбана","задолбано","задолбаны","задраен","задраена","задраено","задраены","задран","задрана","задрано","задраны","задрапирован","задрапирована","задрапировано","задрапированы","задуман","задумана","задумано","задуманы","задурен","задурена","задурено","задурены","задут","задута","задуто","задуты","задушен","задушена","задушено","задушены","задымлен","задымлена","задымлено","задымлены","заезжен","заезжена","заезжено","заезжены","зажарен","зажарена","зажарено","зажарены","зажат","зажата","зажато","зажаты","зажеван","зажевана","зажевано","зажеваны","зажит","зажита","зажито","зажиты","зажмурен","зажмурена","зажмурено","зажмурены","зазван","зазвана","зазвано","зазваны","заземлен","заземлена","заземлено","заземлены","зазубрен","зазубрена","зазубрено","зазубрены","заигран","заиграна","заиграно","заиграны","заимÑтвован","заимÑтвована","заимÑтвовано","заимÑтвованы","заинтереÑована","заинтереÑовано","заинтереÑованы","заинтригована","заинтриговано","заинтригованы","заказан","заказана","заказано","заказаны","закалена","закалено","закалены","закамуфлирован","закамуфлирована","закамуфлировано","закамуфлированы","закапан","закапана","закапано","закапаны","закатан","закатана","закатано","закатаны","закачан","закачана","закачано","закачаны","закачен","закачена","закачено","закачены","закидан","закидана","закидано","закиданы","закинут","закинута","закинуто","закинуты","заклеван","заклевана","заклевано","заклеваны","заклеен","заклеена","заклеено","заклеены","заклеймен","заклеймена","заклеймено","заклеймены","заклинен","заклинена","заклинено","заклинены","заключен","заключена","заключено","заключены","закован","закована","заковано","закованы","закодирован","закодирована","закодировано","закодированы","заколдован","заколдована","заколдовано","заколдованы","заколот","заколота","заколото","заколоты","заколочен","заколочена","заколочено","заколочены","закольцеван","закольцевана","закольцевано","закольцеваны","законÑервирован","законÑервирована","законÑервировано","законÑервированы","законÑпирирован","законÑпирирована","законÑпирировано","законÑпирированы","закончен","закончена","закончено","закончены","закопан","закопана","закопано","закопаны","закопчен","закопчена","закопчено","закопчены","закошен","закошена","закошено","закошены","закрашен","закрашена","закрашено","закрашены","закреплен","закреплена","закреплено","закреплены","закроен","закроена","закроено","закроены","закруглен","закруглена","закруглено","закруглены","закручен","закручена","закручено","закручены","закрыт","закрыта","закрыто","закрыты","закуплен","закуплена","закуплено","закуплены","закупорен","закупорена","закупорено","закупорены","закурен","закурена","закурено","закурены","закутан","закутана","закутано","закутаны","залажен","залажена","залажено","залажены","залатан","залатана","залатано","залатаны","залеплен","залеплена","залеплено","залеплены","залечен","залечена","залечено","залечены","зализан","зализана","зализано","зализаны","залит","залита","залито","залиты","заложен","заложена","заложено","заложены","заломлен","заломлена","заломлено","заломлены","залÑпан","залÑпана","залÑпано","залÑпаны","замазан","замазана","замазано","замазаны","заманен","заманена","заманено","заманены","замаран","замарана","замарано","замараны","замаÑкирован","замаÑкирована","замаÑкировано","замаÑкированы","замаÑлен","замаÑлена","замаÑлено","замаÑлены","замедлен","замедлена","замедлено","замедлены","заменен","заменена","заменено","заменены","замерен","замерена","замерено","замерены","замерÑн","замерÑна","замерÑно","замерÑны","заметан","заметана","заметано","заметаны","заметен","заметена","заметено","заметены","замечен","замечена","замечено","замечены","замешан","замешана","замешано","замешаны","замешен","замешена","замешено","замешены","замещен","замещена","замещено","замещены","заминирован","заминирована","заминировано","заминированы","замкнут","замкнута","замкнуто","замкнуты","замолвлен","замолвлена","замолвлено","замолвлены","замолчан","замолчана","замолчано","замолчаны","замордован","замордована","замордовано","замордованы","заморен","заморена","заморено","заморены","заморожен","заморожена","заморожено","заморожены","заморочен","заморочена","заморочено","заморочены","замотан","замотана","замотано","замотаны","замочен","замочена","замочено","замочены","замурован","замурована","замуровано","замурованы","замуÑолен","замуÑолена","замуÑолено","замуÑолены","замутнен","замутнена","замутнено","замутнены","замучан","замучана","замучано","замучаны","замучен","замучена","замучено","замучены","замыкан","замыкана","замыкано","замыканы","замыт","замыта","замыто","замыты","замыщлен","замыщлена","замыщлено","замыщлены","замÑÑ‚","замÑта","замÑто","замÑты","занавешен","занавешена","занавешено","занавешены","занеÑен","занеÑена","занеÑено","занеÑены","занижен","занижена","занижено","занижены","заношен","заношена","заношено","заношены","занÑÑ‚","занÑта","занÑто","занÑты","заоÑтрен","заоÑтрена","заоÑтрено","заоÑтрены","запакован","запакована","запаковано","запакованы","запален","запалена","запалено","запалены","запаÑен","запаÑена","запаÑено","запаÑены","запатентован","запатентована","запатентовано","запатентованы","запахнут","запахнута","запахнуто","запахнуты","запачкан","запачкана","запачкано","запачканы","запаÑн","запаÑна","запаÑно","запаÑны","запеленан","запеленана","запеленано","запеленаны","запеленгован","запеленгована","запеленговано","запеленгованы","заперт","заперта","заперто","заперты","запечатан","запечатана","запечатано","запечатаны","запечатлен","запечатлена","запечатлено","запечатлены","запечен","запечена","запечено","запечены","запиÑан","запиÑана","запиÑано","запиÑаны","запит","запита","запито","запиты","запихан","запихана","запихано","запиханы","запихнут","запихнута","запихнуто","запихнуты","запланирован","запланирована","запланировано","запланированы","заплатан","заплатана","заплатано","заплатаны","заплачен","заплачена","заплачено","заплачены","заплеван","заплевана","заплевано","заплеваны","заплетен","заплетена","заплетено","заплетены","запломбирован","запломбирована","запломбировано","запломбированы","заподозрен","заподозрена","заподозрено","заподозрены","заполнен","заполнена","заполнено","заполнены","заполонен","заполонена","заполонено","заполонены","заполучен","заполучена","заполучено","заполучены","запомнен","запомнена","запомнено","запомнены","запорот","запорота","запорото","запороты","запорошен","запорошена","запорошено","запорошены","заправлен","заправлена","заправлено","заправлены","запрещен","запрещена","запрещено","запрещены","запримечен","запримечена","запримечено","запримечены","запрограммирован","запрограммирована","запрограммировано","запрограммированы","запроектирован","запроектирована","запроектировано","запроектированы","запрокинут","запрокинута","запрокинуто","запрокинуты","запротоколирован","запротоколирована","запротоколировано","запротоколированы","запрошен","запрошена","запрошено","запрошены","запружен","запружена","запружено","запружены","запрÑжен","запрÑжена","запрÑжено","запрÑжены","запрÑтан","запрÑтана","запрÑтано","запрÑтаны","запуган","запугана","запугано","запуганы","запудрен","запудрена","запудрено","запудрены","запутан","запутана","запутано","запутаны","запущен","запущена","запущено","запущены","запылен","запылена","запылено","запылены","запÑтнан","запÑтнана","запÑтнано","запÑтнаны","заработан","заработана","заработано","заработаны","заражен","заражена","заражено","заражены","зарегиÑтрирован","зарегиÑтрирована","зарегиÑтрировано","зарегиÑтрированы","зарезан","зарезана","зарезано","зарезаны","зарезервирован","зарезервирована","зарезервировано","зарезервированы","зарекомендован","зарекомендована","зарекомендовано","зарекомендованы","зарешечен","зарешечена","зарешечено","зарешечены","зариÑован","зариÑована","зариÑовано","зариÑованы","зарифмован","зарифмована","зарифмовано","зарифмованы","зарублен","зарублена","зарублено","зарублены","зарыт","зарыта","зарыто","зарыты","зарÑжен","зарÑжена","зарÑжено","зарÑжены","заÑажен","заÑажена","заÑажено","заÑажены","заÑахарен","заÑахарена","заÑахарено","заÑахарены","заÑвечен","заÑвечена","заÑвечено","заÑвечены","заÑвидетельÑтвован","заÑвидетельÑтвована","заÑвидетельÑтвовано","заÑвидетельÑтвованы","заÑекречен","заÑекречена","заÑекречено","заÑекречены","заÑелен","заÑелена","заÑелено","заÑелены","заÑечен","заÑечена","заÑечено","заÑечены","заÑеÑн","заÑеÑна","заÑеÑно","заÑеÑны","заÑижен","заÑижена","заÑижено","заÑижены","заÑкребен","заÑкребена","заÑкребено","заÑкребены","заÑлан","заÑлана","заÑлано","заÑланы","заÑлонен","заÑлонена","заÑлонено","заÑлонены","заÑлужен","заÑлужена","заÑлужено","заÑлужены","заÑлушан","заÑлушана","заÑлушано","заÑлушаны","заÑлышан","заÑлышана","заÑлышано","заÑлышаны","заÑмеÑн","заÑмеÑна","заÑмеÑно","заÑмеÑны","заÑнÑÑ‚","заÑнÑта","заÑнÑто","заÑнÑты","заÑолен","заÑолена","заÑолено","заÑолены","заÑорен","заÑорена","заÑорено","заÑорены","заÑоÑан","заÑоÑана","заÑоÑано","заÑоÑаны","заÑпиртован","заÑпиртована","заÑпиртовано","заÑпиртованы","заÑтавлен","заÑтавлена","заÑтавлено","заÑтавлены","заÑтазаÑтат","заÑтазаÑтата","заÑтазаÑтато","заÑтазаÑтаты","заÑтегнут","заÑтегнута","заÑтегнуто","заÑтегнуты","заÑтелен","заÑтелена","заÑтелено","заÑтелены","заÑтигнут","заÑтигнута","заÑтигнуто","заÑтигнуты","заÑтиран","заÑтирана","заÑтирано","заÑтираны","заÑтолблен","заÑтолблена","заÑтолблено","заÑтолблены","заÑтопорен","заÑтопорена","заÑтопорено","заÑтопорены","заÑтрахован","заÑтрахована","заÑтраховано","заÑтрахованы","заÑтрелен","заÑтрелена","заÑтрелено","заÑтрелены","заÑтроен","заÑтроена","заÑтроено","заÑтроены","заÑтрочен","заÑтрочена","заÑтрочено","заÑтрочены","заÑтужен","заÑтужена","заÑтужено","заÑтужены","заÑтукан","заÑтукана","заÑтукано","заÑтуканы","заÑтуплен","заÑтуплена","заÑтуплено","заÑтуплены","заÑужен","заÑужена","заÑужено","заÑужены","заÑунут","заÑунута","заÑунуто","заÑунуты","заÑучен","заÑучена","заÑучено","заÑучены","заÑушен","заÑушена","заÑушено","заÑушены","заÑчитан","заÑчитана","заÑчитано","заÑчитаны","затаен","затаена","затаено","затаены","затаÑкан","затаÑкана","затаÑкано","затаÑканы","затащен","затащена","затащено","затащены","затворен","затворена","затворено","затворены","затемнен","затемнена","затемнено","затемнены","затенен","затенена","затенено","затенены","затерт","затерта","затерто","затерты","затерÑн","затерÑна","затерÑно","затерÑны","затеÑн","затеÑна","затеÑно","затеÑны","заткнут","заткнута","заткнуто","заткнуты","затмлен","затмлена","затмлено","затмлены","затолкан","затолкана","затолкано","затолканы","затоплен","затоплена","затоплено","затоплены","затоптан","затоптана","затоптано","затоптаны","заторможен","заторможена","заторможено","заторможены","затороплен","затороплена","затороплено","затороплены","заточен","заточена","заточено","заточены","затошнен","затошнена","затошнено","затошнены","затравлен","затравлена","затравлено","затравлены","затрачен","затрачена","затрачено","затрачены","затребован","затребована","затребовано","затребованы","затронут","затронута","затронуто","затронуты","затруднен","затруднена","затруднено","затруднены","затуманен","затуманена","затуманено","затуманены","затушеван","затушевана","затушевано","затушеваны","затушен","затушена","затушено","затушены","затыкан","затыкана","затыкано","затыканы","затÑнут","затÑнута","затÑнуто","затÑнуты","заужен","заужена","заужено","заужены","заучен","заучена","заучено","заучены","зафикÑирован","зафикÑирована","зафикÑировано","зафикÑированы","зафрахтован","зафрахтована","зафрахтовано","зафрахтованы","захвачен","захвачена","захвачено","захвачены","захламлен","захламлена","захламлено","захламлены","захлеÑтнут","захлеÑтнута","захлеÑтнуто","захлеÑтнуты","захлопнут","захлопнута","захлопнуто","захлопнуты","захожен","захожена","захожено","захожены","захоронен","захоронена","захоронено","захоронены","зацеплен","зацеплена","зацеплено","зацеплены","зачарована","зачаровано","зачарованы","зачат","зачата","зачато","зачаты","зачеркнут","зачеркнута","зачеркнуто","зачеркнуты","зачерпнут","зачерпнута","зачерпнуто","зачерпнуты","зачеÑан","зачеÑана","зачеÑано","зачеÑаны","зачехлен","зачехлена","зачехлено","зачехлены","зачиÑлен","зачиÑлена","зачиÑлено","зачиÑлены","зачитан","зачитана","зачитано","зачитаны","зачищен","зачищена","зачищено","зачищены","зачтен","зачтена","зачтено","зачтены","зашаркан","зашаркана","зашаркано","зашарканы","зашвырнут","зашвырнута","зашвырнуто","зашвырнуты","зашевелен","зашевелена","зашевелено","зашевелены","зашептан","зашептана","зашептано","зашептаны","зашит","зашита","зашито","зашиты","зашифрована","зашифровано","зашифрованы","зашнурован","зашнурована","зашнуровано","зашнурованы","заштопан","заштопана","заштопано","заштопаны","зашторен","зашторена","зашторено","зашторены","заштрихован","заштрихована","заштриховано","заштрихованы","защелкнут","защелкнута","защелкнуто","защелкнуты","защемлен","защемлена","защемлено","защемлены","защипан","защипана","защипано","защипаны","защищен","защищена","защищено","защищены","заÑвлен","заÑвлена","заÑвлено","заÑвлены","звезданут","звезданута","звездануто","звездануты","идеализирован","идеализирована","идеализировано","идеализированы","идентифицирован","идентифицирована","идентифицировано","идентифицированы","избавлен","избавлена","избавлено","избавлены","избалован","избалована","избаловано","избалованы","избит","избита","избито","избиты","изборозжден","изборозждена","изборозждено","изборозждены","избран","избрана","избрано","избраны","изваÑн","изваÑна","изваÑно","изваÑны","изведан","изведана","изведано","изведаны","извергнут","извергнута","извергнуто","извергнуты","извещен","извещена","извещено","извещены","извинен","извинена","извинено","извинены","извлечен","извлечена","извлечено","извлечены","извращен","извращена","извращено","извращены","изгажен","изгажена","изгажено","изгажены","изгнан","изгнана","изгнано","изгнаны","изготовлен","изготовлена","изготовлено","изготовлены","изгрызен","изгрызена","изгрызено","изгрызены","издерган","издергана","издергано","издерганы","изжарен","изжарена","изжарено","изжарены","изжит","изжита","изжито","изжиты","излажен","излажена","излажено","излажены","излечен","излечена","излечено","излечены","излит","излита","излито","излиты","изловлен","изловлена","изловлено","изловлены","изложен","изложена","изложено","изложены","изломан","изломана","изломано","изломаны","измазан","измазана","измазано","измазаны","измельчен","измельчена","измельчено","измельчены","изменен","изменена","изменено","изменены","измерен","измерена","измерено","измерены","измерÑн","измерÑна","измерÑно","измерÑны","измотан","измотана","измотано","измотаны","измочален","измочалена","измочалено","измочалены","измучен","измучена","измучено","измучены","измышлен","измышлена","измышлено","измышлены","измÑÑ‚","измÑта","измÑто","измÑты","изнаÑилован","изнаÑилована","изнаÑиловано","изнаÑилованы","изничтожен","изничтожена","изничтожено","изничтожены","изношен","изношена","изношено","изношены","изнурен","изнурена","изнурено","изнурены","изобличен","изобличена","изобличено","изобличены","изображен","изображена","изображено","изображены","изобретен","изобретена","изобретено","изобретены","изодран","изодрана","изодрано","изодраны","изолирован","изолирована","изолировано","изолированы","изорван","изорвана","изорвано","изорваны","изранен","изранена","изранено","изранены","израÑходован","израÑходована","израÑходовано","израÑходованы","изрезан","изрезана","изрезано","изрезаны","изречен","изречена","изречено","изречены","изрешечен","изрешечена","изрешечено","изрешечены","изриÑован","изриÑована","изриÑовано","изриÑованы","изрублен","изрублена","изрублено","изрублены","изрыт","изрыта","изрыто","изрыты","изувечен","изувечена","изувечено","изувечены","изукрашен","изукрашена","изукрашено","изукрашены","изумлен","изумлена","изумлено","изумлены","изуродован","изуродована","изуродовано","изуродованы","изучен","изучена","изучено","изучены","изъезжен","изъезжена","изъезжено","изъезжены","изъÑвлен","изъÑвлена","изъÑвлено","изъÑвлены","изъÑÑ‚","изъÑта","изъÑто","изъÑты","изыÑкан","изыÑкана","изыÑкано","изыÑканы","иллюÑтрирован","иллюÑтрирована","иллюÑтрировано","иллюÑтрированы","иммобилизован","иммобилизована","иммобилизовано","иммобилизованы","иммунизирован","иммунизирована","иммунизировано","иммунизированы","импортирован","импортирована","импортировано","импортированы","инвеÑтирован","инвеÑтирована","инвеÑтировано","инвеÑтированы","индивидуализирован","индивидуализирована","индивидуализировано","индивидуализированы","индуцирован","индуцирована","индуцировано","индуцированы","инкорпорирован","инкорпорирована","инкорпорировано","инкорпорированы","инкриминирован","инкриминирована","инкриминировано","инкриминированы","инкруÑтирован","инкруÑтирована","инкруÑтировано","инкруÑтированы","инкубирован","инкубирована","инкубировано","инкубированы","инÑпирирован","инÑпирирована","инÑпирировано","инÑпирированы","инÑценирован","инÑценирована","инÑценировано","инÑценированы","интегрирован","интегрирована","интегрировано","интегрированы","интенÑифицирован","интенÑифицирована","интенÑифицировано","интенÑифицированы","интервьюирован","интервьюирована","интервьюировано","интервьюированы","интернирован","интернирована","интернировано","интернированы","интерпретирован","интерпретирована","интерпретировано","интерпретированы","интонирован","интонирована","интонировано","интонированы","инфицирован","инфицирована","инфицировано","инфицированы","информирован","информирована","информировано","информированы","иÑкажен","иÑкажена","иÑкажено","иÑкажены","иÑкалечен","иÑкалечена","иÑкалечено","иÑкалечены","иÑключен","иÑключена","иÑключено","иÑключены","иÑковеркан","иÑковеркана","иÑковеркано","иÑковерканы","иÑколот","иÑколота","иÑколото","иÑколоты","иÑкорежен","иÑкорежена","иÑкорежено","иÑкорежены","иÑкоренен","иÑкоренена","иÑкоренено","иÑкоренены","иÑкривлен","иÑкривлена","иÑкривлено","иÑкривлены","иÑкромÑан","иÑкромÑана","иÑкромÑано","иÑкромÑаны","иÑкрошен","иÑкрошена","иÑкрошено","иÑкрошены","иÑкупан","иÑкупана","иÑкупано","иÑкупаны","иÑкуплен","иÑкуплена","иÑкуплено","иÑкуплены","иÑкуÑан","иÑкуÑана","иÑкуÑано","иÑкуÑаны","иÑкушен","иÑкушена","иÑкушено","иÑкушены","иÑпачкан","иÑпачкана","иÑпачкано","иÑпачканы","иÑпепелен","иÑпепелена","иÑпепелено","иÑпепелены","иÑпечен","иÑпечена","иÑпечено","иÑпечены","иÑпещрен","иÑпещрена","иÑпещрено","иÑпещрены","иÑпиÑан","иÑпиÑана","иÑпиÑано","иÑпиÑаны","иÑпит","иÑпита","иÑпито","иÑпиты","иÑповедан","иÑповедана","иÑповедано","иÑповеданы","иÑповедован","иÑповедована","иÑповедовано","иÑповедованы","иÑпоганен","иÑпоганена","иÑпоганено","иÑпоганены","иÑполнен","иÑполнена","иÑполнено","иÑполнены","иÑполоÑован","иÑполоÑована","иÑполоÑовано","иÑполоÑованы","иÑпользован","иÑпользована","иÑпользовано","иÑпользованы","иÑпорчен","иÑпорчена","иÑпорчено","иÑпорчены","иÑправлен","иÑправлена","иÑправлено","иÑправлены","иÑпробован","иÑпробована","иÑпробовано","иÑпробованы","иÑпрошен","иÑпрошена","иÑпрошено","иÑпрошены","иÑпуган","иÑпугана","иÑпугано","иÑпуганы","иÑпущен","иÑпущена","иÑпущено","иÑпущены","иÑпытан","иÑпытана","иÑпытано","иÑпытаны","иÑÑечен","иÑÑечена","иÑÑечено","иÑÑечены","иÑÑледован","иÑÑледована","иÑÑледовано","иÑÑледованы","иÑÑушен","иÑÑушена","иÑÑушено","иÑÑушены","иÑтерзан","иÑтерзана","иÑтерзано","иÑтерзаны","иÑтерт","иÑтерта","иÑтерто","иÑтерты","иÑтолкован","иÑтолкована","иÑтолковано","иÑтолкованы","иÑтончен","иÑтончена","иÑтончено","иÑтончены","иÑтоплен","иÑтоплена","иÑтоплено","иÑтоплены","иÑтоптан","иÑтоптана","иÑтоптано","иÑтоптаны","иÑторгнут","иÑторгнута","иÑторгнуто","иÑторгнуты","иÑточен","иÑточена","иÑточено","иÑточены","иÑтощен","иÑтощена","иÑтощено","иÑтощены","иÑтрачен","иÑтрачена","иÑтрачено","иÑтрачены","иÑтреблен","иÑтреблена","иÑтреблено","иÑтреблены","иÑтребован","иÑтребована","иÑтребовано","иÑтребованы","иÑтрепан","иÑтрепана","иÑтрепано","иÑтрепаны","иÑхожен","иÑхожена","иÑхожено","иÑхожены","иÑцарапан","иÑцарапана","иÑцарапано","иÑцарапаны","иÑцелен","иÑцелена","иÑцелено","иÑцелены","иÑчеркан","иÑчеркана","иÑчеркано","иÑчерканы","иÑчерпан","иÑчерпана","иÑчерпано","иÑчерпаны","иÑчиÑлен","иÑчиÑлена","иÑчиÑлено","иÑчиÑлены","казнен","казнена","казнено","казнены","канонизирован","канонизирована","канонизировано","канонизированы","капитализирован","капитализирована","капитализировано","капитализированы","каÑтрирован","каÑтрирована","каÑтрировано","каÑтрированы","катализирован","катализирована","катализировано","катализированы","катапультирован","катапультирована","катапультировано","катапультированы","квалифицирован","квалифицирована","квалифицировано","квалифицированы","кинут","кинута","кинуто","кинуты","клаÑÑифицирован","клаÑÑифицирована","клаÑÑифицировано","клаÑÑифицированы","кликнут","кликнута","кликнуто","кликнуты","клюнут","клюнута","клюнуто","клюнуты","ковырнут","ковырнута","ковырнуто","ковырнуты","кодирован","кодирована","кодировано","кодированы","кокнут","кокнута","кокнуто","кокнуты","командирован","командирована","командировано","командированы","комиÑÑован","комиÑÑована","комиÑÑовано","комиÑÑованы","компенÑирован","компенÑирована","компенÑировано","компенÑированы","конвертирован","конвертирована","конвертировано","конвертированы","конденÑирован","конденÑирована","конденÑировано","конденÑированы","кондиционирован","кондиционирована","кондиционировано","кондиционированы","конкретизирован","конкретизирована","конкретизировано","конкретизированы","конÑолидирован","конÑолидирована","конÑолидировано","конÑолидированы","конÑтатирован","конÑтатирована","конÑтатировано","конÑтатированы","конÑтитуирован","конÑтитуирована","конÑтитуировано","конÑтитуированы","контратакован","контратакована","контратаковано","контратакованы","контужен","контужена","контужено","контужены","конфиÑкован","конфиÑкована","конфиÑковано","конфиÑкованы","кончен","кончена","кончено","кончены","координирован","координирована","координировано","координированы","коронован","коронована","короновано","коронованы","коррумпирована","коррумпировано","коррумпированы","кредитован","кредитована","кредитовано","кредитованы","кремирован","кремирована","кремировано","кремированы","крещен","крещена","крещено","крещены","куплен","куплена","куплено","куплены","курнут","курнута","курнуто","курнуты","куÑнут","куÑнута","куÑнуто","куÑнуты","легализован","легализована","легализовано","легализованы","легирован","легирована","легировано","легированы","ликвидирован","ликвидирована","ликвидировано","ликвидированы","лимитирован","лимитирована","лимитировано","лимитированы","лишен","лишена","лишено","лишены","лоббирован","лоббирована","лоббировано","лоббированы","локализован","локализована","локализовано","локализованы","лÑгнут","лÑгнута","лÑгнуто","лÑгнуты","маркирован","маркирована","маркировано","маркированы","маÑÑирован","маÑÑирована","маÑÑировано","маÑÑированы","материализован","материализована","материализовано","материализованы","механизирован","механизирована","механизировано","механизированы","минимизирован","минимизирована","минимизировано","минимизированы","минирован","минирована","минировано","минированы","минован","минована","миновано","минованы","миÑтифицирован","миÑтифицирована","миÑтифицировано","миÑтифицированы","мобилизован","мобилизована","мобилизовано","мобилизованы","моделирован","моделирована","моделировано","моделированы","модернизирован","модернизирована","модернизировано","модернизированы","модифицирован","модифицирована","модифицировано","модифицированы","монополизирован","монополизирована","монополизировано","монополизированы","мотивирована","мотивировано","мотивированы","мотнут","мотнута","мотнуто","мотнуты","набеган","набегана","набегано","набеганы","набит","набита","набито","набиты","наболтан","наболтана","наболтано","наболтаны","набран","набрана","набрано","набраны","наброÑан","наброÑана","наброÑано","наброÑаны","наброшен","наброшена","наброшено","наброшены","навален","навалена","навалено","навалены","наварен","наварена","наварено","наварены","наведен","наведена","наведено","наведены","навезен","навезена","навезено","навезены","навернут","навернута","навернуто","навернуты","наверÑтан","наверÑтана","наверÑтано","наверÑтаны","навешан","навешана","навешано","навешаны","навешен","навешена","навешено","навешены","навещен","навещена","навещено","навещены","навеÑн","навеÑна","навеÑно","навеÑны","навлечен","навлечена","навлечено","навлечены","наводнен","наводнена","наводнено","наводнены","наворован","наворована","наворовано","наворованы","наворочен","наворочена","наворочено","наворочены","навоÑтрен","навоÑтрена","навоÑтрено","навоÑтрены","навьючен","навьючена","навьючено","навьючены","навÑзан","навÑзана","навÑзано","навÑзаны","нагадан","нагадана","нагадано","нагаданы","нагажен","нагажена","нагажено","нагажены","нагнан","нагнана","нагнано","нагнаны","нагнут","нагнута","нагнуто","нагнуты","наговорен","наговорена","наговорено","наговорены","нагонÑн","нагонÑна","нагонÑно","нагонÑны","наготовлен","наготовлена","наготовлено","наготовлены","награблен","награблена","награблено","награблены","награжден","награждена","награждено","награждены","нагрет","нагрета","нагрето","нагреты","нагромозжден","нагромозждена","нагромозждено","нагромозждены","нагружен","нагружена","нагружено","нагружены","нагулÑн","нагулÑна","нагулÑно","нагулÑны","надавлен","надавлена","надавлено","надавлены","надвинут","надвинута","надвинуто","надвинуты","наделан","наделана","наделано","наделаны","надерган","надергана","надергано","надерганы","надет","надета","надето","надеты","надкушен","надкушена","надкушено","надкушены","надломлен","надломлена","надломлено","надломлены","надоен","надоена","надоено","надоены","надорван","надорвана","надорвано","надорваны","надоумлен","надоумлена","надоумлено","надоумлены","надпиÑан","надпиÑана","надпиÑано","надпиÑаны","надраен","надраена","надраено","надраены","надран","надрана","надрано","надраны","надрезан","надрезана","надрезано","надрезаны","надÑтроен","надÑтроена","надÑтроено","надÑтроены","надуман","надумана","надумано","надуманы","надут","надута","надуто","надуты","надушен","надушена","надушено","надушены","нажарен","нажарена","нажарено","нажарены","нажат","нажата","нажато","нажаты","нажит","нажита","нажито","нажиты","назван","названа","названо","названы","назначен","назначена","назначено","назначены","наигран","наиграна","наиграно","наиграны","наказан","наказана","наказано","наказаны","накален","накалена","накалено","накалены","накапан","накапана","накапано","накапаны","накаркан","накаркана","накаркано","накарканы","накатан","накатана","накатано","накатаны","накачан","накачана","накачано","накачаны","накачен","накачена","накачено","накачены","накидан","накидана","накидано","накиданы","накинут","накинута","накинуто","накинуты","наклеен","наклеена","наклеено","наклеены","накликан","накликана","накликано","накликаны","наклонен","наклонена","наклонено","наклонены","наковырÑн","наковырÑна","наковырÑно","наковырÑны","наколот","наколота","наколото","наколоты","накопан","накопана","накопано","накопаны","накоплен","накоплена","накоплено","накоплены","накормлен","накормлена","накормлено","накормлены","накоÑтылÑн","накоÑтылÑна","накоÑтылÑно","накоÑтылÑны","накошен","накошена","накошено","накошены","накрахмален","накрахмалена","накрахмалено","накрахмалены","накрашен","накрашена","накрашено","накрашены","накрошен","накрошена","накрошено","накрошены","накручен","накручена","накручено","накручены","накрыт","накрыта","накрыто","накрыты","накуплен","накуплена","накуплено","накуплены","накурен","накурена","накурено","накурены","налажен","налажена","налажено","налажены","налеплен","налеплена","налеплено","налеплены","налетан","налетана","налетано","налетаны","налит","налита","налито","налиты","наловлен","наловлена","наловлено","наловлены","наложен","наложена","наложено","наложены","наломан","наломана","наломано","наломаны","намагничен","намагничена","намагничено","намагничены","намазан","намазана","намазано","намазаны","намалеван","намалевана","намалевано","намалеваны","наметан","наметана","наметано","наметаны","наметен","наметена","наметено","наметены","намечен","намечена","намечено","намечены","намешан","намешана","намешано","намешаны","намозолен","намозолена","намозолено","намозолены","наморщен","наморщена","наморщено","наморщены","намотан","намотана","намотано","намотаны","намочен","намочена","намочено","намочены","намылен","намылена","намылено","намылены","намыт","намыта","намыто","намыты","намÑÑ‚","намÑта","намÑто","намÑты","нанеÑен","нанеÑена","нанеÑено","нанеÑены","нанизан","нанизана","нанизано","нанизаны","наношен","наношена","наношено","наношены","нанÑÑ‚","нанÑта","нанÑто","нанÑты","напет","напета","напето","напеты","напечатан","напечатана","напечатано","напечатаны","напечен","напечена","напечено","напечены","напилен","напилена","напилено","напилены","напиÑан","напиÑана","напиÑано","напиÑаны","напитан","напитана","напитано","напитаны","напихан","напихана","напихано","напиханы","напичкан","напичкана","напичкано","напичканы","наплакан","наплакана","наплакано","наплаканы","наплеван","наплевана","наплевано","наплеваны","наплетен","наплетена","наплетено","наплетены","напложен","напложена","напложено","напложены","напоен","напоена","напоено","напоены","наползан","наползана","наползано","наползаны","наполнен","наполнена","наполнено","наполнены","напомажен","напомажена","напомажено","напомажены","напомнен","напомнена","напомнено","напомнены","напорчен","напорчена","напорчено","напорчены","направлен","направлена","направлено","направлены","напророчен","напророчена","напророчено","напророчены","напрÑжен","напрÑжена","напрÑжено","напрÑжены","напуган","напугана","напугано","напуганы","напудрен","напудрена","напудрено","напудрены","напутан","напутана","напутано","напутаны","напутÑтвован","напутÑтвована","напутÑтвовано","напутÑтвованы","напущен","напущена","напущено","напущены","напÑлен","напÑлена","напÑлено","напÑлены","наработан","наработана","наработано","наработаны","наращен","наращена","наращено","наращены","нарезан","нарезана","нарезано","нарезаны","наречен","наречена","наречено","наречены","нариÑован","нариÑована","нариÑовано","нариÑованы","нарожден","нарождена","нарождено","нарождены","нарублен","нарублена","нарублено","нарублены","нарушен","нарушена","нарушено","нарушены","нарыт","нарыта","нарыто","нарыты","нарÑжен","нарÑжена","нарÑжено","нарÑжены","наÑажден","наÑаждена","наÑаждено","наÑаждены","наÑажен","наÑажена","наÑажено","наÑажены","наÑелен","наÑелена","наÑелено","наÑелены","наÑижен","наÑижена","наÑижено","наÑижены","наÑкребен","наÑкребена","наÑкребено","наÑкребены","наÑлан","наÑлана","наÑлано","наÑланы","наÑледован","наÑледована","наÑледовано","наÑледованы","наÑмешен","наÑмешена","наÑмешено","наÑмешены","наÑобиран","наÑобирана","наÑобирано","наÑобираны","наÑован","наÑована","наÑовано","наÑованы","наÑолен","наÑолена","наÑолено","наÑолены","наÑтавлен","наÑтавлена","наÑтавлено","наÑтавлены","наÑтелен","наÑтелена","наÑтелено","наÑтелены","наÑтигнут","наÑтигнута","наÑтигнуто","наÑтигнуты","наÑтоÑн","наÑтоÑна","наÑтоÑно","наÑтоÑны","наÑтроен","наÑтроена","наÑтроено","наÑтроены","наÑтрочен","наÑтрочена","наÑтрочено","наÑтрочены","наÑуплен","наÑуплена","наÑуплено","наÑуплены","наÑчитан","наÑчитана","наÑчитано","наÑчитаны","наÑыщен","наÑыщена","наÑыщено","наÑыщены","натаÑкан","натаÑкана","натаÑкано","натаÑканы","натерт","натерта","натерто","натерты","натолкнут","натолкнута","натолкнуто","натолкнуты","натоплен","натоплена","натоплено","натоплены","натоптан","натоптана","натоптано","натоптаны","наточен","наточена","наточено","наточены","натравлен","натравлена","натравлено","натравлены","натренирован","натренирована","натренировано","натренированы","натружен","натружена","натружено","натружены","натыкан","натыкана","натыкано","натыканы","натÑнут","натÑнута","натÑнуто","натÑнуты","научен","научена","научено","научены","нафарширован","нафарширована","нафаршировано","нафаршированы","нахлобучен","нахлобучена","нахлобучено","нахлобучены","нахмурен","нахмурена","нахмурено","нахмурены","нахожен","нахожена","нахожено","нахожены","нахохлен","нахохлена","нахохлено","нахохлены","нацарапан","нацарапана","нацарапано","нацарапаны","нацежен","нацежена","нацежено","нацежены","нацелен","нацелена","нацелено","нацелены","нацеплен","нацеплена","нацеплено","нацеплены","национализирован","национализирована","национализировано","национализированы","начат","начата","начато","начаты","начертан","начертана","начертано","начертаны","начерчен","начерчена","начерчено","начерчены","начинен","начинена","начинено","начинены","начиÑлен","начиÑлена","начиÑлено","начиÑлены","начищен","начищена","начищено","начищены","нашарен","нашарена","нашарено","нашарены","нашептан","нашептана","нашептано","нашептаны","нашинкован","нашинкована","нашинковано","нашинкованы","нашит","нашита","нашито","нашиты","нашпигован","нашпигована","нашпиговано","нашпигованы","нащупан","нащупана","нащупано","нащупаны","наÑлектризован","наÑлектризована","наÑлектризовано","наÑлектризованы","невзлюблен","невзлюблена","невзлюблено","невзлюблены","недоглÑжен","недоглÑжена","недоглÑжено","недоглÑжены","недоговорен","недоговорена","недоговорено","недоговорены","недоделан","недоделана","недоделано","недоделаны","недооценен","недооценена","недооценено","недооценены","недопит","недопита","недопито","недопиты","недоплачен","недоплачена","недоплачено","недоплачены","недополучен","недополучена","недополучено","недополучены","недопонÑÑ‚","недопонÑта","недопонÑто","недопонÑты","недоÑказан","недоÑказана","недоÑказано","недоÑказаны","недоÑлышан","недоÑлышана","недоÑлышано","недоÑлышаны","недоÑмотрен","недоÑмотрена","недоÑмотрено","недоÑмотрены","опоÑредован","опоÑредована","опоÑредовано","опоÑредованы","оптимизирован","оптимизирована","оптимизировано","оптимизированы","отÑлежен","отÑлежена","отÑлежено","отÑлежены","перечеркнут","перечеркнута","перечеркнуто","перечеркнуты","перечиÑлен","перечиÑлена","перечиÑлено","перечиÑлены","перечитан","перечитана","перечитано","перечитаны","перечтен","перечтена","перечтено","перечтены","перешит","перешита","перешито","перешиты","перÑонифицирован","перÑонифицирована","перÑонифицировано","перÑонифицированы","пикирован","пикирована","пикировано","пикированы","пленен","пленена","пленено","пленены","плеÑнут","плеÑнута","плеÑнуто","плеÑнуты","пнут","пнута","пнуто","пнуты","побалован","побалована","побаловано","побалованы","побежден","побеждена","побеждено","побеждены","побелен","побелена","побелено","побелены","побережен","побережена","побережено","побережены","побеÑпокоен","побеÑпокоена","побеÑпокоено","побеÑпокоены","побит","побита","побито","побиты","поблагодарен","поблагодарена","поблагодарено","поблагодарены","побрит","побрита","побрито","побриты","поброÑан","поброÑана","поброÑано","поброÑаны","побужден","побуждена","побуждено","побуждены","побужен","побужена","побужено","побужены","повален","повалена","повалено","повалены","поведан","поведана","поведано","поведаны","поведен","поведена","поведено","поведены","повезен","повезена","повезено","повезены","повенчан","повенчана","повенчано","повенчаны","повергнут","повергнута","повергнуто","повергнуты","поверен","поверена","поверено","поверены","повернут","повернута","повернуто","повернуты","поверчен","поверчена","поверчено","поверчены","повешен","повешена","повешено","повешены","повеÑн","повеÑна","повеÑно","повеÑны","повидан","повидана","повидано","повиданы","поврежден","повреждена","повреждено","повреждены","повторен","повторена","повторено","повторены","повышен","повышена","повышено","повышены","повÑзан","повÑзана","повÑзано","повÑзаны","погашен","погашена","погашено","погашены","поглажен","поглажена","поглажено","поглажены","поглощен","поглощена","поглощено","поглощены","погнут","погнута","погнуто","погнуты","пограблен","пограблена","пограблено","пограблены","погребен","погребена","погребено","погребены","погрет","погрета","погрето","погреты","погружен","погружена","погружено","погружены","погрызен","погрызена","погрызено","погрызены","погублен","погублена","погублено","погублены","подавлен","подавлена","подавлено","подавлены","подарен","подарена","подарено","подарены","подбит","подбита","подбито","подбиты","подбодрен","подбодрена","подбодрено","подбодрены","подброшен","подброшена","подброшено","подброшены","подвален","подвалена","подвалено","подвалены","подведен","подведена","подведено","подведены","подвезен","подвезена","подвезено","подвезены","подвергнут","подвергнута","подвергнуто","подвергнуты","подвернут","подвернута","подвернуто","подвернуты","подвешен","подвешена","подвешено","подвешены","подвигнут","подвигнута","подвигнуто","подвигнуты","подвинут","подвинута","подвинуто","подвинуты","подвÑзан","подвÑзана","подвÑзано","подвÑзаны","подглÑжен","подглÑжена","подглÑжено","подглÑжены","подговорен","подговорена","подговорено","подговорены","подготовлен","подготовлена","подготовлено","подготовлены","подделан","подделана","подделано","подделаны","поддержан","поддержана","поддержано","поддержаны","поддернут","поддернута","поддернуто","поддернуты","поддет","поддета","поддето","поддеты","поделен","поделена","поделено","поделены","подерган","подергана","подергано","подерганы","подержан","подержана","подержано","подержаны","подернут","подернута","подернуто","подернуты","поджарен","поджарена","поджарено","поджарены","поджат","поджата","поджато","поджаты","подзаработан","подзаработана","подзаработано","подзаработаны","подкараулен","подкараулена","подкараулено","подкараулены","подкачан","подкачана","подкачано","подкачаны","подкачен","подкачена","подкачено","подкачены","подкинут","подкинута","подкинуто","подкинуты","подклеен","подклеена","подклеено","подклеены","подключен","подключена","подключено","подключены","подкован","подкована","подковано","подкованы","подколот","подколота","подколото","подколоты","подкоплен","подкоплена","подкоплено","подкоплены","подкормлен","подкормлена","подкормлено","подкормлены","подкошен","подкошена","подкошено","подкошены","подкрашен","подкрашена","подкрашено","подкрашены","подкреплен","подкреплена","подкреплено","подкреплены","подкручен","подкручена","подкручено","подкручены","подкуплен","подкуплена","подкуплено","подкуплены","подлатан","подлатана","подлатано","подлатаны","подлечен","подлечена","подлечено","подлечены","подлит","подлита","подлито","подлиты","подловлен","подловлена","подловлено","подловлены","подложен","подложена","подложено","подложены","подмазан","подмазана","подмазано","подмазаны","подменен","подменена","подменено","подменены","подметан","подметана","подметано","подметаны","подметен","подметена","подметено","подметены","подмечен","подмечена","подмечено","подмечены","подмешан","подмешана","подмешано","подмешаны","подморожен","подморожена","подморожено","подморожены","подмочен","подмочена","подмочено","подмочены","подмыт","подмыта","подмыто","подмыты","подмÑÑ‚","подмÑта","подмÑто","подмÑты","поднажат","поднажата","поднажато","поднажаты","поднеÑен","поднеÑена","поднеÑено","поднеÑены","подновлен","подновлена","подновлено","подновлены","подношен","подношена","подношено","подношены","поднÑÑ‚","поднÑта","поднÑто","поднÑты","подобран","подобрана","подобрано","подобраны","подогнан","подогнана","подогнано","подогнаны","подогнут","подогнута","подогнуто","подогнуты","подогрет","подогрета","подогрето","подогреты","пододвинут","пододвинута","пододвинуто","пододвинуты","подоен","подоена","подоено","подоены","подожжен","подожжена","подожжено","подожжены","подозван","подозвана","подозвано","подозваны","подорван","подорвана","подорвано","подорваны","подоÑлан","подоÑлана","подоÑлано","подоÑланы","подоткнут","подоткнута","подоткнуто","подоткнуты","подпален","подпалена","подпалено","подпалены","подперт","подперта","подперто","подперты","подпилен","подпилена","подпилено","подпилены","подпиÑан","подпиÑана","подпиÑано","подпиÑаны","подпорчен","подпорчена","подпорчено","подпорчены","подпоÑÑан","подпоÑÑана","подпоÑÑано","подпоÑÑаны","подправлен","подправлена","подправлено","подправлены","подпущен","подпущена","подпущено","подпущены","подразделен","подразделена","подразделено","подразделены","подран","подрана","подрано","подраны","подрезан","подрезана","подрезано","подрезаны","подровнÑн","подровнÑна","подровнÑно","подровнÑны","подрублен","подрублена","подрублено","подрублены","подрулен","подрулена","подрулено","подрулены","подрумÑнен","подрумÑнена","подрумÑнено","подрумÑнены","подÑажен","подÑажена","подÑажено","подÑажены","подÑвечен","подÑвечена","подÑвечено","подÑвечены","подÑелен","подÑелена","подÑелено","подÑелены","подÑечен","подÑечена","подÑечено","подÑечены","подÑказан","подÑказана","подÑказано","подÑказаны","подÑлащен","подÑлащена","подÑлащено","подÑлащены","подÑлушан","подÑлушана","подÑлушано","подÑлушаны","подÑмотрен","подÑмотрена","подÑмотрено","подÑмотрены","подÑоединен","подÑоединена","подÑоединено","подÑоединены","подÑолен","подÑолена","подÑолено","подÑолены","подÑтавлен","подÑтавлена","подÑтавлено","подÑтавлены","подÑтегнут","подÑтегнута","подÑтегнуто","подÑтегнуты","подÑтелен","подÑтелена","подÑтелено","подÑтелены","подÑтережен","подÑтережена","подÑтережено","подÑтережены","подÑтрелен","подÑтрелена","подÑтрелено","подÑтрелены","подÑтрижен","подÑтрижена","подÑтрижено","подÑтрижены","подÑтроен","подÑтроена","подÑтроено","подÑтроены","подÑунут","подÑунута","подÑунуто","подÑунуты","подÑушен","подÑушена","подÑушено","подÑушены","подÑчитан","подÑчитана","подÑчитано","подÑчитаны","подтащен","подтащена","подтащено","подтащены","подтвержден","подтверждена","подтверждено","подтверждены","подтолкнут","подтолкнута","подтолкнуто","подтолкнуты","подточен","подточена","подточено","подточены","подтыкан","подтыкана","подтыкано","подтыканы","подтÑнут","подтÑнута","подтÑнуто","подтÑнуты","подучен","подучена","подучено","подучены","подхвачен","подхвачена","подхвачено","подхвачены","подцеплен","подцеплена","подцеплено","подцеплены","подчеркнут","подчеркнута","подчеркнуто","подчеркнуты","подчинен","подчинена","подчинено","подчинены","подчищен","подчищена","подчищено","подчищены","подшит","подшита","подшито","подшиты","подыгран","подыграна","подыграно","подыграны","подытожен","подытожена","подытожено","подытожены","пожалован","пожалована","пожаловано","пожалованы","пожарен","пожарена","пожарено","пожарены","пожат","пожата","пожато","пожаты","пожеван","пожевана","пожевано","пожеваны","пожертвован","пожертвована","пожертвовано","пожертвованы","пожран","пожрана","пожрано","пожраны","пожурен","пожурена","пожурено","пожурены","позабавлен","позабавлена","позабавлено","позабавлены","позаимÑтвован","позаимÑтвована","позаимÑтвовано","позаимÑтвованы","позван","позвана","позвано","позваны","позволен","позволена","позволено","позволены","поздравлен","поздравлена","поздравлено","поздравлены","позиционирован","позиционирована","позиционировано","позиционированы","познакомлен","познакомлена","познакомлено","познакомлены","познан","познана","познано","познаны","позолочен","позолочена","позолочено","позолочены","поигран","поиграна","поиграно","поиграны","поименован","поименована","поименовано","поименованы","пойман","поймана","поймано","пойманы","показан","показана","показано","показаны","покалечен","покалечена","покалечено","покалечены","покатан","покатана","покатано","покатаны","покачан","покачана","покачано","покачаны","покачен","покачена","покачено","покачены","покидан","покидана","покидано","покиданы","покинут","покинута","покинуто","покинуты","поклеван","поклевана","поклевано","поклеваны","поколебан","поколебана","поколебано","поколебаны","поколочен","поколочена","поколочено","поколочены","покончен","покончена","покончено","покончены","покорежен","покорежена","покорежено","покорежены","покорен","покорена","покорено","покорены","покормлен","покормлена","покормлено","покормлены","покороблен","покороблена","покороблено","покороблены","покошен","покошена","покошено","покошены","покрашен","покрашена","покрашено","покрашены","покривлен","покривлена","покривлено","покривлены","покритикован","покритикована","покритиковано","покритикованы","покрошен","покрошена","покрошено","покрошены","покружен","покружена","покружено","покружены","покручен","покручена","покручено","покручены","покрыт","покрыта","покрыто","покрыты","покупан","покупана","покупано","покупаны","покурен","покурена","покурено","покурены","покуÑан","покуÑана","покуÑано","покуÑаны","покушан","покушана","покушано","покушаны","полажен","полажена","полажено","полажены","полечен","полечена","полечено","полечены","полит","полита","полито","политы","половлен","половлена","половлено","половлены","положен","положена","положено","положены","поломан","поломана","поломано","поломаны","полоÑнут","полоÑнута","полоÑнуто","полоÑнуты","получен","получена","получено","получены","полÑризован","полÑризована","полÑризовано","полÑризованы","помазан","помазана","помазано","помазаны","помаÑÑирован","помаÑÑирована","помаÑÑировано","помаÑÑированы","поменÑн","поменÑна","поменÑно","поменÑны","померен","померена","померено","померены","помечен","помечена","помечено","помечены","помешан","помешана","помешано","помешаны","помещен","помещена","помещено","помещены","помилован","помилована","помиловано","помилованы","помножен","помножена","помножено","помножены","помолвлен","помолвлена","помолвлено","помолвлены","помотан","помотана","помотано","помотаны","помрачен","помрачена","помрачено","помрачены","помыт","помыта","помыто","помыты","помÑнут","помÑнута","помÑнуто","помÑнуты","понаделан","понаделана","понаделано","понаделаны","понаÑтроен","понаÑтроена","понаÑтроено","понаÑтроены","понеÑен","понеÑена","понеÑено","понеÑены","понижен","понижена","понижено","понижены","поношена","поношено","поношены","понÑÑ‚","понÑта","понÑто","понÑты","пообещан","пообещана","пообещано","пообещаны","поощрен","поощрена","поощрено","поощрены","поперчен","поперчена","поперчено","поперчены","попет","попета","попето","попеты","попиÑан","попиÑана","попиÑано","попиÑаны","попит","попита","попито","попиты","пополнен","пополнена","пополнено","пополнены","попорчен","попорчена","попорчено","попорчены","поправлен","поправлена","поправлено","поправлены","попран","попрана","попрано","попраны","попрекнут","попрекнута","попрекнуто","попрекнуты","поприветÑтвован","поприветÑтвована","поприветÑтвовано","поприветÑтвованы","попробован","попробована","попробовано","попробованы","попрошен","попрошена","попрошено","попрошены","попуган","попугана","попугано","попуганы","популÑризирован","популÑризирована","популÑризировано","популÑризированы","попутан","попутана","попутано","попутаны","порабощен","порабощена","порабощено","порабощены","порадован","порадована","порадовано","порадованы","поражен","поражена","поражено","поражены","поранен","поранена","поранено","поранены","пораÑкинут","пораÑкинута","пораÑкинуто","пораÑкинуты","пораÑÑказан","пораÑÑказана","пораÑÑказано","пораÑÑказаны","пораÑÑпрошен","пораÑÑпрошена","пораÑÑпрошено","пораÑÑпрошены","порван","порвана","порвано","порваны","порезан","порезана","порезано","порезаны","порекомендован","порекомендована","порекомендовано","порекомендованы","порешен","порешена","порешено","порешены","порожден","порождена","порождено","порождены","порубан","порубана","порубано","порубаны","порублен","порублена","порублено","порублены","поруган","поругана","поругано","поруганы","поручен","поручена","поручено","поручены","порушен","порушена","порушено","порушены","поÑажен","поÑажена","поÑажено","поÑажены","поÑвÑщен","поÑвÑщена","поÑвÑщено","поÑвÑщены","поÑелен","поÑелена","поÑелено","поÑелены","поÑеребрен","поÑеребрена","поÑеребрено","поÑеребрены","поÑещен","поÑещена","поÑещено","поÑещены","поÑеÑн","поÑеÑна","поÑеÑно","поÑеÑны","поÑкребен","поÑкребена","поÑкребено","поÑкребены","поÑлан","поÑлана","поÑлано","поÑланы","поÑлушан","поÑлушана","поÑлушано","поÑлушаны","поÑмотрен","поÑмотрена","поÑмотрено","поÑмотрены","поÑниман","поÑнимана","поÑнимано","поÑниманы","поÑолен","поÑолена","поÑолено","поÑолены","поÑоÑан","поÑоÑана","поÑоÑано","поÑоÑаны","поÑрамлен","поÑрамлена","поÑрамлено","поÑрамлены","поÑтавлен","поÑтавлена","поÑтавлено","поÑтавлены","поÑтановлен","поÑтановлена","поÑтановлено","поÑтановлены","поÑтелен","поÑтелена","поÑтелено","поÑтелены","поÑтигнут","поÑтигнута","поÑтигнуто","поÑтигнуты","поÑтиран","поÑтирана","поÑтирано","поÑтираны","поÑтрелÑн","поÑтрелÑна","поÑтрелÑно","поÑтрелÑны","поÑтрижен","поÑтрижена","поÑтрижено","поÑтрижены","поÑтроен","поÑтроена","поÑтроено","поÑтроены","поÑтулирован","поÑтулирована","поÑтулировано","поÑтулированы","поÑчитан","поÑчитана","поÑчитано","поÑчитаны","потереблен","потереблена","потереблено","потереблены","потерплен","потерплена","потерплено","потерплены","потерт","потерта","потерто","потерты","потерÑн","потерÑна","потерÑно","потерÑны","потеÑнен","потеÑнена","потеÑнено","потеÑнены","потешен","потешена","потешено","потешены","потиÑкан","потиÑкана","потиÑкано","потиÑканы","потоплен","потоплена","потоплено","потоплены","потоптан","потоптана","потоптано","потоптаны","потороплен","потороплена","потороплено","потороплены","потравлен","потравлена","потравлено","потравлены","потрачен","потрачена","потрачено","потрачены","потреблен","потреблена","потреблено","потреблены","потребован","потребована","потребовано","потребованы","потревожен","потревожена","потревожено","потревожены","потрепан","потрепана","потрепано","потрепаны","потроган","потрогана","потрогано","потроганы","потрушен","потрушена","потрушено","потрушены","потрÑÑен","потрÑÑена","потрÑÑено","потрÑÑены","потуплен","потуплена","потуплено","потуплены","потушен","потушена","потушено","потушены","потыкан","потыкана","потыкано","потыканы","потÑнут","потÑнута","потÑнуто","потÑнуты","поубавлен","поубавлена","поубавлено","поубавлены","поучен","поучена","поучено","поучены","похвален","похвалена","похвалено","похвалены","похерен","похерена","похерено","похерены","похищен","похищена","похищено","похищены","похлебан","похлебана","похлебано","похлебаны","похлопан","похлопана","похлопано","похлопаны","похоронен","похоронена","похоронено","похоронены","поцарапан","поцарапана","поцарапано","поцарапаны","поцелован","поцелована","поцеловано","поцелованы","почат","почата","почато","початы","почерпнут","почерпнута","почерпнуто","почерпнуты","почеÑан","почеÑана","почеÑано","почеÑаны","починен","починена","починено","починены","почитан","почитана","почитано","почитаны","почищен","почищена","почищено","почищены","почтен","почтена","почтено","почтены","почувÑтвован","почувÑтвована","почувÑтвовано","почувÑтвованы","пошатнут","пошатнута","пошатнуто","пошатнуты","пошевелен","пошевелена","пошевелено","пошевелены","пошит","пошита","пошито","пошиты","пощелкан","пощелкана","пощелкано","пощелканы","пощипан","пощипана","пощипано","пощипаны","пощупан","пощупана","пощупано","пощупаны","поÑÑнен","поÑÑнена","поÑÑнено","поÑÑнены","превозможен","превозможена","превозможено","превозможены","превращен","превращена","превращено","превращены","превышен","превышена","превышено","превышены","прегражен","прегражена","прегражено","прегражены","предварен","предварена","предварено","предварены","предвоÑхищен","предвоÑхищена","предвоÑхищено","предвоÑхищены","предложен","предложена","предложено","предложены","предназначен","предназначена","предназначено","предназначены","предначертан","предначертана","предначертано","предначертаны","предопределен","предопределена","предопределено","предопределены","предоÑтавлен","предоÑтавлена","предоÑтавлено","предоÑтавлены","предоÑтережен","предоÑтережена","предоÑтережено","предоÑтережены","предотвращен","предотвращена","предотвращено","предотвращены","предохранен","предохранена","предохранено","предохранены","предпиÑан","предпиÑана","предпиÑано","предпиÑаны","предположен","предположена","предположено","предположены","предпоÑлан","предпоÑлана","предпоÑлано","предпоÑланы","предпочтен","предпочтена","предпочтено","предпочтены","предпринÑÑ‚","предпринÑта","предпринÑто","предпринÑты","предраÑположен","предраÑположена","предраÑположено","предраÑположены","предречен","предречена","предречено","предречены","предрешен","предрешена","предрешено","предрешены","предÑказан","предÑказана","предÑказано","предÑказаны","предÑтавлен","предÑтавлена","предÑтавлено","предÑтавлены","предугадан","предугадана","предугадано","предугаданы","предубежден","предубеждена","предубеждено","предубеждены","предуÑмотрен","предуÑмотрена","предуÑмотрено","предуÑмотрены","предъÑвлен","предъÑвлена","предъÑвлено","предъÑвлены","презентован","презентована","презентовано","презентованы","преиÑполнен","преиÑполнена","преиÑполнено","преиÑполнены","преклонен","преклонена","преклонено","преклонены","прекращен","прекращена","прекращено","прекращены","преломлен","преломлена","преломлено","преломлены","прельщен","прельщена","прельщено","прельщены","премирован","премирована","премировано","премированы","преображен","преображена","преображено","преображены","преодолен","преодолена","преодолено","преодолены","препарирован","препарирована","препарировано","препарированы","преподнеÑен","преподнеÑена","преподнеÑено","преподнеÑены","препровожен","препровожена","препровожено","препровожены","прерван","прервана","прервано","прерваны","преÑечен","преÑечена","преÑечено","преÑечены","преÑтуплен","преÑтуплена","преÑтуплено","преÑтуплены","претворен","претворена","претворено","претворены","претерплен","претерплена","претерплено","претерплены","преувеличен","преувеличена","преувеличено","преувеличены","прибавлен","прибавлена","прибавлено","прибавлены","прибережен","прибережена","прибережено","прибережены","прибит","прибита","прибито","прибиты","приближен","приближена","приближено","приближены","прибран","прибрана","прибрано","прибраны","привален","привалена","привалено","привалены","приварен","приварена","приварено","приварены","приведен","приведена","приведено","приведены","привезен","привезена","привезено","привезены","привешен","привешена","привешено","привешены","привинчен","привинчена","привинчено","привинчены","привит","привита","привито","привиты","привлечен","привлечена","привлечено","привлечены","привнеÑен","привнеÑена","привнеÑено","привнеÑены","приворожен","приворожена","приворожено","приворожены","привÑзан","привÑзана","привÑзано","привÑзаны","пригвозжен","пригвозжена","пригвозжено","пригвозжены","приглажен","приглажена","приглажено","приглажены","приглашен","приглашена","приглашено","приглашены","приглушен","приглушена","приглушено","приглушены","пригнан","пригнана","пригнано","пригнаны","пригнут","пригнута","пригнуто","пригнуты","приговорен","приговорена","приговорено","приговорены","приголублен","приголублена","приголублено","приголублены","приготовлен","приготовлена","приготовлено","приготовлены","пригрет","пригрета","пригрето","пригреты","пригублен","пригублена","пригублено","пригублены","придавлен","придавлена","придавлено","придавлены","придвинут","придвинута","придвинуто","придвинуты","приделан","приделана","приделано","приделаны","придержан","придержана","придержано","придержаны","придуман","придумана","придумано","придуманы","придушен","придушена","придушено","придушены","прижат","прижата","прижато","прижаты","прижит","прижита","прижито","прижиты","призван","призвана","призвано","призваны","приземлен","приземлена","приземлено","приземлены","признан","признана","признано","признаны","приказан","приказана","приказано","приказаны","прикарманен","прикарманена","прикарманено","прикарманены","прикачен","прикачена","прикачено","прикачены","прикинут","прикинута","прикинуто","прикинуты","приклеен","приклеена","приклеено","приклеены","приклонен","приклонена","приклонено","приклонены","прикован","прикована","приковано","прикованы","приколот","приколота","приколото","приколоты","приколочен","приколочена","приколочено","приколочены","прикомандирован","прикомандирована","прикомандировано","прикомандированы","прикончен","прикончена","прикончено","прикончены","прикормлен","прикормлена","прикормлено","прикормлены","прикреплен","прикреплена","прикреплено","прикреплены","прикручен","прикручена","прикручено","прикручены","прикрыт","прикрыта","прикрыто","прикрыты","прикуплен","прикуплена","прикуплено","прикуплены","прикушен","прикушена","прикушено","прикушены","прилажен","прилажена","прилажено","прилажены","прилаÑкан","прилаÑкана","прилаÑкано","прилаÑканы","прилеплен","прилеплена","прилеплено","прилеплены","прилит","прилита","прилито","прилиты","приложен","приложена","приложено","приложены","приманен","приманена","приманено","приманены","применен","применена","применено","применены","примерен","примерена","примерено","примерены","примерÑн","примерÑна","примерÑно","примерÑны","примечен","примечена","примечено","примечены","примирен","примирена","примирено","примирены","приморожен","приморожена","приморожено","приморожены","примотан","примотана","примотано","примотаны","примÑÑ‚","примÑта","примÑто","примÑты","принарÑжен","принарÑжена","принарÑжено","принарÑжены","принеÑен","принеÑена","принеÑено","принеÑены","принижен","принижена","принижено","принижены","принужден","принуждена","принуждено","принуждены","принÑÑ‚","принÑта","принÑто","принÑты","приободрен","приободрена","приободрено","приободрены","приобретен","приобретена","приобретено","приобретены","приобщен","приобщена","приобщено","приобщены","приодет","приодета","приодето","приодеты","приоÑтановлен","приоÑтановлена","приоÑтановлено","приоÑтановлены","приотворен","приотворена","приотворено","приотворены","приоткрыт","приоткрыта","приоткрыто","приоткрыты","припаркован","припаркована","припарковано","припаркованы","припаÑен","припаÑена","припаÑено","припаÑены","припаÑн","припаÑна","припаÑно","припаÑны","приперт","приперта","приперто","приперты","припечатан","припечатана","припечатано","припечатаны","припечен","припечена","припечено","припечены","припиÑан","припиÑана","припиÑано","припиÑаны","приплетен","приплетена","приплетено","приплетены","приплюÑнут","приплюÑнута","приплюÑнуто","приплюÑнуты","приплюÑован","приплюÑована","приплюÑовано","приплюÑованы","приподнÑÑ‚","приподнÑта","приподнÑто","приподнÑты","припомнен","припомнена","припомнено","припомнены","припорошен","припорошена","припорошено","припорошены","приправлен","приправлена","приправлено","приправлены","припрÑтан","припрÑтана","припрÑтано","припрÑтаны","припудрен","припудрена","припудрено","припудрены","припущен","припущена","припущено","припущены","приравнÑн","приравнÑна","приравнÑно","приравнÑны","приревнован","приревнована","приревновано","приревнованы","прирезан","прирезана","прирезано","прирезаны","пририÑован","пририÑована","пририÑовано","пририÑованы","приручен","приручена","приручено","приручены","приÑвоен","приÑвоена","приÑвоено","приÑвоены","приÑлан","приÑлана","приÑлано","приÑланы","приÑлонен","приÑлонена","приÑлонено","приÑлонены","приÑмотрен","приÑмотрена","приÑмотрено","приÑмотрены","приÑобачен","приÑобачена","приÑобачено","приÑобачены","приÑовокуплен","приÑовокуплена","приÑовокуплено","приÑовокуплены","приÑоединен","приÑоединена","приÑоединено","приÑоединены","приÑочинен","приÑочинена","приÑочинено","приÑочинены","приÑпоÑоблен","приÑпоÑоблена","приÑпоÑоблено","приÑпоÑоблены","приÑпущен","приÑпущена","приÑпущено","приÑпущены","приÑтавлен","приÑтавлена","приÑтавлено","приÑтавлены","приÑтегнут","приÑтегнута","приÑтегнуто","приÑтегнуты","приÑтрелен","приÑтрелена","приÑтрелено","приÑтрелены","приÑтрелÑн","приÑтрелÑна","приÑтрелÑно","приÑтрелÑны","приÑтроен","приÑтроена","приÑтроено","приÑтроены","приÑтрунен","приÑтрунена","приÑтрунено","приÑтрунены","приÑтукнут","приÑтукнута","приÑтукнуто","приÑтукнуты","приÑтыжен","приÑтыжена","приÑтыжено","приÑтыжены","приÑужден","приÑуждена","приÑуждено","приÑуждены","притащен","притащена","притащено","притащены","притворен","притворена","притворено","притворены","притерт","притерта","притерто","притерты","притиÑнут","притиÑнута","притиÑнуто","притиÑнуты","приткнут","приткнута","приткнуто","приткнуты","притоптан","притоптана","притоптано","притоптаны","приторможен","приторможена","приторможено","приторможены","притуплен","притуплена","притуплено","притуплены","притÑнут","притÑнута","притÑнуто","притÑнуты","приукрашен","приукрашена","приукрашено","приукрашены","приумножен","приумножена","приумножено","приумножены","приурочен","приурочена","приурочено","приурочены","приучен","приучена","приучено","приучены","прихваÑтнут","прихваÑтнута","прихваÑтнуто","прихваÑтнуты","прихвачен","прихвачена","прихвачено","прихвачены","прихлопнут","прихлопнута","прихлопнуто","прихлопнуты","прицеплен","прицеплена","прицеплено","прицеплены","причален","причалена","причалено","причалены","причащен","причащена","причащено","причащены","причеÑан","причеÑана","причеÑано","причеÑаны","причинен","причинена","причинено","причинены","причиÑлен","причиÑлена","причиÑлено","причиÑлены","пришит","пришита","пришито","пришиты","пришпилен","пришпилена","пришпилено","пришпилены","пришпорен","пришпорена","пришпорено","пришпорены","прищелкнут","прищелкнута","прищелкнуто","прищелкнуты","прищемлен","прищемлена","прищемлено","прищемлены","прищурен","прищурена","прищурено","прищурены","прищучен","прищучена","прищучено","прищучены","проанализирован","проанализирована","проанализировано","проанализированы","пробит","пробита","пробито","пробиты","проварен","проварена","проварено","проварены","проведан","проведана","проведано","проведаны","проведен","проведена","проведено","проведены","провезен","провезена","провезено","провезены","проверен","проверена","проверено","проверены","провернут","провернута","провернуто","провернуты","проветрен","проветрена","проветрено","проветрены","провозглашен","провозглашена","провозглашено","провозглашены","проглочен","проглочена","проглочено","проглочены","прогнан","прогнана","прогнано","прогнаны","прогнуÑавлен","прогнуÑавлена","прогнуÑавлено","прогнуÑавлены","проговорен","проговорена","проговорено","проговорены","прогрет","прогрета","прогрето","прогреты","прогрызен","прогрызена","прогрызено","прогрызены","прогулÑн","прогулÑна","прогулÑно","прогулÑны","продавлен","продавлена","продавлено","продавлены","продвинут","продвинута","продвинуто","продвинуты","продезинфицирован","продезинфицирована","продезинфицировано","продезинфицированы","продекламирован","продекламирована","продекламировано","продекламированы","проделан","проделана","проделано","проделаны","продемонÑтрирован","продемонÑтрирована","продемонÑтрировано","продемонÑтрированы","продержан","продержана","продержано","продержаны","продернут","продернута","продернуто","продернуты","продет","продета","продето","продеты","продешевлен","продешевлена","продешевлено","продешевлены","продиктован","продиктована","продиктовано","продиктованы","продлен","продлена","продлено","продлены","продолжен","продолжена","продолжено","продолжены","продран","продрана","продрано","продраны","продублирован","продублирована","продублировано","продублированы","продуман","продумана","продумано","продуманы","продут","продута","продуто","продуты","продырÑвлен","продырÑвлена","продырÑвлено","продырÑвлены","прожарен","прожарена","прожарено","прожарены","прожеван","прожевана","прожевано","прожеваны","прожит","прожита","прожито","прожиты","прозван","прозвана","прозвано","прозваны","прозвонен","прозвонена","прозвонено","прозвонены","прознан","прознана","прознано","прознаны","проигран","проиграна","проиграно","проиграны","произведен","произведена","произведено","произведены","произнеÑен","произнеÑена","произнеÑено","произнеÑены","проиллюÑтрирован","проиллюÑтрирована","проиллюÑтрировано","проиллюÑтрированы","проинÑтруктирован","проинÑтруктирована","проинÑтруктировано","проинÑтруктированы","проинформирован","проинформирована","проинформировано","проинформированы","прокален","прокалена","прокалено","прокалены","прокатан","прокатана","прокатано","прокатаны","прокачан","прокачана","прокачано","прокачаны","прокачен","прокачена","прокачено","прокачены","прокипÑчен","прокипÑчена","прокипÑчено","прокипÑчены","проколот","проколота","проколото","проколоты","прокомментирован","прокомментирована","прокомментировано","прокомментированы","проконÑультирован","проконÑультирована","проконÑультировано","проконÑультированы","проконтролирован","проконтролирована","проконтролировано","проконтролированы","прокопан","прокопана","прокопано","прокопаны","прокопчен","прокопчена","прокопчено","прокопчены","прокручен","прокручена","прокручено","прокручены","прокурен","прокурена","прокурено","прокурены","прокушен","прокушена","прокушено","прокушены","пролечен","пролечена","пролечено","пролечены","пролиÑтан","пролиÑтана","пролиÑтано","пролиÑтаны","пролит","пролита","пролито","пролиты","проложен","проложена","проложено","проложены","проломлен","проломлена","проломлено","проломлены","пролонгирован","пролонгирована","пролонгировано","пролонгированы","промазан","промазана","промазано","промазаны","променÑн","променÑна","променÑно","променÑны","промокнут","промокнута","промокнуто","промокнуты","промолвлен","промолвлена","промолвлено","промолвлены","проморожен","проморожена","проморожено","проморожены","промотан","промотана","промотано","промотаны","промочен","промочена","промочено","промочены","промыт","промыта","промыто","промыты","промÑмлен","промÑмлена","промÑмлено","промÑмлены","пронеÑен","пронеÑена","пронеÑено","пронеÑены","пронзен","пронзена","пронзено","пронзены","пронизан","пронизана","пронизано","пронизаны","проношен","проношена","проношено","проношены","пронумерован","пронумерована","пронумеровано","пронумерованы","пронюхан","пронюхана","пронюхано","пронюханы","пропахан","пропахана","пропахано","пропаханы","пропет","пропета","пропето","пропеты","пропечатан","пропечатана","пропечатано","пропечатаны","пропиÑан","пропиÑана","пропиÑано","пропиÑаны","пропит","пропита","пропито","пропиты","пропитан","пропитана","пропитано","пропитаны","пропихнут","пропихнута","пропихнуто","пропихнуты","проплакан","проплакана","проплакано","проплаканы","проплыт","проплыта","проплыто","проплыты","прополоÑкан","прополоÑкана","прополоÑкано","прополоÑканы","прополот","прополота","прополото","прополоты","пропорот","пропорота","пропорото","пропороты","пропущен","пропущена","пропущено","пропущены","пропылен","пропылена","пропылено","пропылены","проработан","проработана","проработано","проработаны","прорван","прорвана","прорвано","прорваны","прорежен","прорежена","прорежено","прорежены","прорезан","прорезана","прорезано","прорезаны","прориÑован","прориÑована","прориÑовано","прориÑованы","проронен","проронена","проронено","проронены","прорублен","прорублена","прорублено","прорублены","прорыт","прорыта","прорыто","прорыты","проÑажен","проÑажена","проÑажено","проÑажены","проÑверлен","проÑверлена","проÑверлено","проÑверлены","проÑветлен","проÑветлена","проÑветлено","проÑветлены","проÑвечен","проÑвечена","проÑвечено","проÑвечены","проÑвещен","проÑвещена","проÑвещено","проÑвещены","проÑвищен","проÑвищена","проÑвищено","проÑвищены","проÑечен","проÑечена","проÑечено","проÑечены","проÑеÑн","проÑеÑна","проÑеÑно","проÑеÑны","проÑигнален","проÑигналена","проÑигналено","проÑигналены","проÑижен","проÑижена","проÑижено","проÑижены","проÑиплен","проÑиплена","проÑиплено","проÑиплены","проÑлавлен","проÑлавлена","проÑлавлено","проÑлавлены","проÑлежен","проÑлежена","проÑлежено","проÑлежены","проÑлушан","проÑлушана","проÑлушано","проÑлушаны","проÑлышан","проÑлышана","проÑлышано","проÑлышаны","проÑмолен","проÑмолена","проÑмолено","проÑмолены","проÑмотрен","проÑмотрена","проÑмотрено","проÑмотрены","проÑолен","проÑолена","проÑолено","проÑолены","проÑрочен","проÑрочена","проÑрочено","проÑрочены","проÑтавлен","проÑтавлена","проÑтавлено","проÑтавлены","проÑтерт","проÑтерта","проÑтерто","проÑтерты","проÑтиран","проÑтирана","проÑтирано","проÑтираны","проÑтрелен","проÑтрелена","проÑтрелено","проÑтрелены","проÑтрочен","проÑтрочена","проÑтрочено","проÑтрочены","проÑтужен","проÑтужена","проÑтужено","проÑтужены","проÑтучан","проÑтучана","проÑтучано","проÑтучаны","проÑунут","проÑунута","проÑунуто","проÑунуты","проÑушен","проÑушена","проÑушено","проÑушены","проÑчитан","проÑчитана","проÑчитано","проÑчитаны","протаранен","протаранена","протаранено","протаранены","протащен","протащена","протащено","протащены","протерт","протерта","протерто","протерты","противопоÑтавлен","противопоÑтавлена","противопоÑтавлено","противопоÑтавлены","проткнут","проткнута","проткнуто","проткнуты","протолкнут","протолкнута","протолкнуто","протолкнуты","протоплен","протоплена","протоплено","протоплены","протоптан","протоптана","протоптано","протоптаны","проторен","проторена","проторено","проторены","протыкан","протыкана","протыкано","протыканы","протÑнут","протÑнута","протÑнуто","протÑнуты","проучен","проучена","проучено","проучены","профильтрован","профильтрована","профильтровано","профильтрованы","профинанÑирован","профинанÑирована","профинанÑировано","профинанÑированы","профукан","профукана","профукано","профуканы","прохвачен","прохвачена","прохвачено","прохвачены","прохриплен","прохриплена","прохриплено","прохриплены","процарапан","процарапана","процарапано","процарапаны","процежен","процежена","процежено","процежены","процитирован","процитирована","процитировано","процитированы","прочерчен","прочерчена","прочерчено","прочерчены","прочеÑан","прочеÑана","прочеÑано","прочеÑаны","прочитан","прочитана","прочитано","прочитаны","прочищен","прочищена","прочищено","прочищены","прочтен","прочтена","прочтено","прочтены","прочувÑтвован","прочувÑтвована","прочувÑтвовано","прочувÑтвованы","прошаган","прошагана","прошагано","прошаганы","прошамкан","прошамкана","прошамкано","прошамканы","прошептан","прошептана","прошептано","прошептаны","прошиплен","прошиплена","прошиплено","прошиплены","прошит","прошита","прошито","прошиты","прошлÑплен","прошлÑплена","прошлÑплено","прошлÑплены","проштудирован","проштудирована","проштудировано","проштудированы","прощен","прощена","прощено","прощены","прощупан","прощупана","прощупано","прощупаны","проÑвлен","проÑвлена","проÑвлено","проÑвлены","проÑÑнен","проÑÑнена","проÑÑнено","проÑÑнены","пущен","пущена","пущено","пущены","пырнут","пырнута","пырнуто","пырнуты","радирован","радирована","радировано","радированы","разбавлен","разбавлена","разбавлено","разбавлены","разбазарен","разбазарена","разбазарено","разбазарены","разбережен","разбережена","разбережено","разбережены","разбит","разбита","разбито","разбиты","разболтан","разболтана","разболтано","разболтаны","разбомблен","разбомблена","разбомблено","разбомблены","разброÑан","разброÑана","разброÑано","разброÑаны","разбужен","разбужена","разбужено","разбужены","развален","развалена","развалено","развалены","разварен","разварена","разварено","разварены","разведан","разведана","разведано","разведаны","разведен","разведена","разведено","разведены","развезен","развезена","развезено","развезены","развенчан","развенчана","развенчано","развенчаны","развернут","развернута","развернуто","развернуты","развеÑелен","развеÑелена","развеÑелено","развеÑелены","развешан","развешана","развешано","развешаны","развешен","развешена","развешено","развешены","развеÑн","развеÑна","развеÑно","развеÑны","развинчен","развинчена","развинчено","развинчены","развит","развита","развито","развиты","развлечен","развлечена","развлечено","развлечены","разворован","разворована","разворовано","разворованы","разворочен","разворочена","разворочено","разворочены","разворошен","разворошена","разворошено","разворошены","развращен","развращена","развращено","развращены","развÑзан","развÑзана","развÑзано","развÑзаны","разгадан","разгадана","разгадано","разгаданы","разглажен","разглажена","разглажено","разглажены","разглашен","разглашена","разглашено","разглашены","разгневан","разгневана","разгневано","разгневаны","разговорен","разговорена","разговорено","разговорены","разгорожен","разгорожена","разгорожено","разгорожены","разгорÑчен","разгорÑчена","разгорÑчено","разгорÑчены","разграблен","разграблена","разграблено","разграблены","разграничен","разграничена","разграничено","разграничены","разграфлен","разграфлена","разграфлено","разграфлены","разгребен","разгребена","разгребено","разгребены","разгромлен","разгромлена","разгромлено","разгромлены","разгружен","разгружена","разгружено","разгружены","разгрызен","разгрызена","разгрызено","разгрызены","раздавлен","раздавлена","раздавлено","раздавлены","раздарен","раздарена","раздарено","раздарены","раздвинут","раздвинута","раздвинуто","раздвинуты","раздвоен","раздвоена","раздвоено","раздвоены","разделан","разделана","разделано","разделаны","разделен","разделена","разделено","разделены","раздернут","раздернута","раздернуто","раздернуты","раздет","раздета","раздето","раздеты","раздолбан","раздолбана","раздолбано","раздолбаны","раздоÑадован","раздоÑадована","раздоÑадовано","раздоÑадованы","раздражен","раздражена","раздражено","раздражены","раздроблен","раздроблена","раздроблено","раздроблены","раздут","раздута","раздуто","раздуты","разжалоблен","разжалоблена","разжалоблено","разжалоблены","разжалован","разжалована","разжаловано","разжалованы","разжат","разжата","разжато","разжаты","разжеван","разжевана","разжевано","разжеваны","раззадорен","раззадорена","раззадорено","раззадорены","раззÑвлен","раззÑвлена","раззÑвлено","раззÑвлены","разинут","разинута","разинуто","разинуты","разлеплен","разлеплена","разлеплено","разлеплены","разлинован","разлинована","разлиновано","разлинованы","разлит","разлита","разлито","разлиты","различен","различена","различено","различены","разложен","разложена","разложено","разложены","разломан","разломана","разломано","разломаны","разломлен","разломлена","разломлено","разломлены","разлохмачен","разлохмачена","разлохмачено","разлохмачены","разлучен","разлучена","разлучено","разлучены","размазан","размазана","размазано","размазаны","размалеван","размалевана","размалевано","размалеваны","разменÑн","разменÑна","разменÑно","разменÑны","разметан","разметана","разметано","разметаны","размечен","размечена","размечено","размечены","размешан","размешана","размешано","размешаны","размещен","размещена","размещено","размещены","разминирован","разминирована","разминировано","разминированы","размножен","размножена","размножено","размножены","размозжен","размозжена","размозжено","размозжены","размолот","размолота","размолото","размолоты","разморожен","разморожена","разморожено","разморожены","размотан","размотана","размотано","размотаны","размочен","размочена","размочено","размочены","размыкан","размыкана","размыкано","размыканы","размыт","размыта","размыто","размыты","размÑгчен","размÑгчена","размÑгчено","размÑгчены","размÑÑ‚","размÑта","размÑто","размÑты","разнеÑен","разнеÑена","разнеÑено","разнеÑены","разношен","разношена","разношено","разношены","разнюхан","разнюхана","разнюхано","разнюханы","разнÑÑ‚","разнÑта","разнÑто","разнÑты","разоблачен","разоблачена","разоблачено","разоблачены","разобран","разобрана","разобрано","разобраны","разобщен","разобщена","разобщено","разобщены","разогнан","разогнана","разогнано","разогнаны","разогнут","разогнута","разогнуто","разогнуты","разогрет","разогрета","разогрето","разогреты","разодет","разодета","разодето","разодеты","разодран","разодрана","разодрано","разодраны","разожжен","разожжена","разожжено","разожжены","разозлен","разозлена","разозлено","разозлены","разомкнут","разомкнута","разомкнуто","разомкнуты","разорван","разорвана","разорвано","разорваны","разорен","разорена","разорено","разорены","разоружен","разоружена","разоружено","разоружены","разоÑлан","разоÑлана","разоÑлано","разоÑланы","разоÑтлан","разоÑтлана","разоÑтлано","разоÑтланы","разочарован","разочарована","разочаровано","разочарованы","разработан","разработана","разработано","разработаны","разрежен","разрежена","разрежено","разрежены","разрезан","разрезана","разрезано","разрезаны","разрекламирован","разрекламирована","разрекламировано","разрекламированы","разрешен","разрешена","разрешено","разрешены","разриÑован","разриÑована","разриÑовано","разриÑованы","разрознен","разрознена","разрознено","разрознены","разрублен","разрублена","разрублено","разрублены","разрушен","разрушена","разрушено","разрушены","разрыт","разрыта","разрыто","разрыты","разрÑжен","разрÑжена","разрÑжено","разрÑжены","разубежден","разубеждена","разубеждено","разубеждены","разузнан","разузнана","разузнано","разузнаны","разукрашен","разукрашена","разукрашено","разукрашены","разут","разута","разуто","разуты","разучен","разучена","разучено","разучены","разъединен","разъединена","разъединено","разъединены","разъÑрен","разъÑрена","разъÑрено","разъÑрены","разъÑÑнен","разъÑÑнена","разъÑÑнено","разъÑÑнены","разъÑÑ‚","разъÑта","разъÑто","разъÑты","разыгран","разыграна","разыграно","разыграны","разыÑкан","разыÑкана","разыÑкано","разыÑканы","ранен","ранена","ранено","ранены","ранжирован","ранжирована","ранжировано","ранжированы","раÑкален","раÑкалена","раÑкалено","раÑкалены","раÑкатан","раÑкатана","раÑкатано","раÑкатаны","раÑкачан","раÑкачана","раÑкачано","раÑкачаны","раÑквартирован","раÑквартирована","раÑквартировано","раÑквартированы","раÑквашен","раÑквашена","раÑквашено","раÑквашены","раÑкидан","раÑкидана","раÑкидано","раÑкиданы","раÑкинут","раÑкинута","раÑкинуто","раÑкинуты","раÑклеван","раÑклевана","раÑклевано","раÑклеваны","раÑклеен","раÑклеена","раÑклеено","раÑклеены","раÑкован","раÑкована","раÑковано","раÑкованы","раÑковырÑн","раÑковырÑна","раÑковырÑно","раÑковырÑны","раÑколдован","раÑколдована","раÑколдовано","раÑколдованы","раÑколот","раÑколота","раÑколото","раÑколоты","раÑколочен","раÑколочена","раÑколочено","раÑколочены","раÑкопан","раÑкопана","раÑкопано","раÑкопаны","раÑкрашен","раÑкрашена","раÑкрашено","раÑкрашены","раÑкрепощен","раÑкрепощена","раÑкрепощено","раÑкрепощены","раÑкритикован","раÑкритикована","раÑкритиковано","раÑкритикованы","раÑкроен","раÑкроена","раÑкроено","раÑкроены","раÑкрошен","раÑкрошена","раÑкрошено","раÑкрошены","раÑкручен","раÑкручена","раÑкручено","раÑкручены","раÑкрыт","раÑкрыта","раÑкрыто","раÑкрыты","раÑкулачен","раÑкулачена","раÑкулачено","раÑкулачены","раÑкуплен","раÑкуплена","раÑкуплено","раÑкуплены","раÑкупорен","раÑкупорена","раÑкупорено","раÑкупорены","раÑкурен","раÑкурена","раÑкурено","раÑкурены","раÑкушен","раÑкушена","раÑкушено","раÑкушены","раÑпакован","раÑпакована","раÑпаковано","раÑпакованы","раÑпален","раÑпалена","раÑпалено","раÑпалены","раÑпарен","раÑпарена","раÑпарено","раÑпарены","раÑпахан","раÑпахана","раÑпахано","раÑпаханы","раÑпахнут","раÑпахнута","раÑпахнуто","раÑпахнуты","раÑпечатан","раÑпечатана","раÑпечатано","раÑпечатаны","раÑпилен","раÑпилена","раÑпилено","раÑпилены","раÑпиÑан","раÑпиÑана","раÑпиÑано","раÑпиÑаны","раÑпит","раÑпита","раÑпито","раÑпиты","раÑплавлен","раÑплавлена","раÑплавлено","раÑплавлены","раÑпланирован","раÑпланирована","раÑпланировано","раÑпланированы","раÑплаÑтан","раÑплаÑтана","раÑплаÑтано","раÑплаÑтаны","раÑплеÑкан","раÑплеÑкана","раÑплеÑкано","раÑплеÑканы","раÑплющен","раÑплющена","раÑплющено","раÑплющены","раÑпознан","раÑпознана","раÑпознано","раÑпознаны","раÑположен","раÑположена","раÑположено","раÑположены","раÑполоÑован","раÑполоÑована","раÑполоÑовано","раÑполоÑованы","раÑпорот","раÑпорота","раÑпорото","раÑпороты","раÑпотрошен","раÑпотрошена","раÑпотрошено","раÑпотрошены","раÑправлен","раÑправлена","раÑправлено","раÑправлены","раÑпределен","раÑпределена","раÑпределено","раÑпределены","раÑпробован","раÑпробована","раÑпробовано","раÑпробованы","раÑпроÑтерт","раÑпроÑтерта","раÑпроÑтерто","раÑпроÑтерты","раÑпроÑтранен","раÑпроÑтранена","раÑпроÑтранено","раÑпроÑтранены","раÑпрÑжен","раÑпрÑжена","раÑпрÑжено","раÑпрÑжены","раÑпрÑмлен","раÑпрÑмлена","раÑпрÑмлено","раÑпрÑмлены","раÑпуган","раÑпугана","раÑпугано","раÑпуганы","раÑпушен","раÑпушена","раÑпушено","раÑпушены","раÑпущен","раÑпущена","раÑпущено","раÑпущены","раÑпылен","раÑпылена","раÑпылено","раÑпылены","раÑпÑлен","раÑпÑлена","раÑпÑлено","раÑпÑлены","раÑпÑÑ‚","раÑпÑта","раÑпÑто","раÑпÑты","раÑÑажен","раÑÑажена","раÑÑажено","раÑÑажены","раÑÑекречен","раÑÑекречена","раÑÑекречено","раÑÑекречены","раÑÑелен","раÑÑелена","раÑÑелено","раÑÑелены","раÑÑержен","раÑÑержена","раÑÑержено","раÑÑержены","раÑÑечен","раÑÑечена","раÑÑечено","раÑÑечены","раÑÑеÑн","раÑÑеÑна","раÑÑеÑно","раÑÑеÑны","раÑÑказан","раÑÑказана","раÑÑказано","раÑÑказаны","раÑÑледован","раÑÑледована","раÑÑледовано","раÑÑледованы","раÑÑлышан","раÑÑлышана","раÑÑлышано","раÑÑлышаны","раÑÑмешен","раÑÑмешена","раÑÑмешено","раÑÑмешены","раÑÑмотрен","раÑÑмотрена","раÑÑмотрено","раÑÑмотрены","раÑÑортирован","раÑÑортирована","раÑÑортировано","раÑÑортированы","раÑÑпрошен","раÑÑпрошена","раÑÑпрошено","раÑÑпрошены","раÑÑредоточен","раÑÑредоточена","раÑÑредоточено","раÑÑредоточены","раÑÑтавлен","раÑÑтавлена","раÑÑтавлено","раÑÑтавлены","раÑÑтегнут","раÑÑтегнута","раÑÑтегнуто","раÑÑтегнуты","раÑÑтелен","раÑÑтелена","раÑÑтелено","раÑÑтелены","раÑÑтрелÑн","раÑÑтрелÑна","раÑÑтрелÑно","раÑÑтрелÑны","раÑÑтроен","раÑÑтроена","раÑÑтроено","раÑÑтроены","раÑÑчитан","раÑÑчитана","раÑÑчитано","раÑÑчитаны","раÑтащен","раÑтащена","раÑтащено","раÑтащены","раÑтворен","раÑтворена","раÑтворено","раÑтворены","раÑтерзан","раÑтерзана","раÑтерзано","раÑтерзаны","раÑтерт","раÑтерта","раÑтерто","раÑтерты","раÑтерÑн","раÑтерÑна","раÑтерÑно","раÑтерÑны","раÑтлен","раÑтлена","раÑтлено","раÑтлены","раÑтолкан","раÑтолкана","раÑтолкано","раÑтолканы","раÑтолкован","раÑтолкована","раÑтолковано","раÑтолкованы","раÑтоплен","раÑтоплена","раÑтоплено","раÑтоплены","раÑтоптан","раÑтоптана","раÑтоптано","раÑтоптаны","раÑтопырен","раÑтопырена","раÑтопырено","раÑтопырены","раÑторгнут","раÑторгнута","раÑторгнуто","раÑторгнуты","раÑтормошен","раÑтормошена","раÑтормошено","раÑтормошены","раÑтравлен","раÑтравлена","раÑтравлено","раÑтравлены","раÑтрачен","раÑтрачена","раÑтрачено","раÑтрачены","раÑтревожен","раÑтревожена","раÑтревожено","раÑтревожены","раÑтрепан","раÑтрепана","раÑтрепано","раÑтрепаны","раÑтроган","раÑтрогана","раÑтрогано","раÑтроганы","раÑтрÑÑен","раÑтрÑÑена","раÑтрÑÑено","раÑтрÑÑены","раÑÑ‚Ñнут","раÑÑ‚Ñнута","раÑÑ‚Ñнуто","раÑÑ‚Ñнуты","раÑфаÑован","раÑфаÑована","раÑфаÑовано","раÑфаÑованы","раÑформирован","раÑформирована","раÑформировано","раÑформированы","раÑхвален","раÑхвалена","раÑхвалено","раÑхвалены","раÑхлебан","раÑхлебана","раÑхлебано","раÑхлебаны","раÑцарапан","раÑцарапана","раÑцарапано","раÑцарапаны","раÑцвечен","раÑцвечена","раÑцвечено","раÑцвечены","раÑцелован","раÑцелована","раÑцеловано","раÑцелованы","раÑценен","раÑценена","раÑценено","раÑценены","раÑцеплен","раÑцеплена","раÑцеплено","раÑцеплены","раÑчерчен","раÑчерчена","раÑчерчено","раÑчерчены","раÑчеÑан","раÑчеÑана","раÑчеÑано","раÑчеÑаны","раÑчищен","раÑчищена","раÑчищено","раÑчищены","раÑчленен","раÑчленена","раÑчленено","раÑчленены","раÑшатан","раÑшатана","раÑшатано","раÑшатаны","раÑшвырÑн","раÑшвырÑна","раÑшвырÑно","раÑшвырÑны","раÑшевелен","раÑшевелена","раÑшевелено","раÑшевелены","раÑширен","раÑширена","раÑширено","раÑширены","раÑшит","раÑшита","раÑшито","раÑшиты","раÑшифрован","раÑшифрована","раÑшифровано","раÑшифрованы","раÑщеплен","раÑщеплена","раÑщеплено","раÑщеплены","ратифицирован","ратифицирована","ратифицировано","ратифицированы","рационализирован","рационализирована","рационализировано","рационализированы","реабилитирован","реабилитирована","реабилитировано","реабилитированы","реализован","реализована","реализовано","реализованы","ревизован","ревизована","ревизовано","ревизованы","регенерирован","регенерирована","регенерировано","регенерированы","регламентирован","регламентирована","регламентировано","регламентированы","редуцирован","редуцирована","редуцировано","редуцированы","резервирован","резервирована","резервировано","резервированы","резюмирован","резюмирована","резюмировано","резюмированы","реквизирован","реквизирована","реквизировано","реквизированы","рекомендован","рекомендована","рекомендовано","рекомендованы","реконÑтруирован","реконÑтруирована","реконÑтруировано","реконÑтруированы","рекрутирован","рекрутирована","рекрутировано","рекрутированы","ремонтирован","ремонтирована","ремонтировано","ремонтированы","репреÑÑирован","репреÑÑирована","репреÑÑировано","репреÑÑированы","реÑтаврирован","реÑтаврирована","реÑтаврировано","реÑтаврированы","реформирован","реформирована","реформировано","реформированы","решен","решена","решено","решены","рожден","рождена","рождено","рождены","романтизирован","романтизирована","романтизировано","романтизированы","рукоположен","рукоположена","рукоположено","рукоположены","руÑифицирован","руÑифицирована","руÑифицировано","руÑифицированы","Ñаботирован","Ñаботирована","Ñаботировано","Ñаботированы","Ñагитирован","Ñагитирована","Ñагитировано","Ñагитированы","Ñанкционирован","Ñанкционирована","Ñанкционировано","Ñанкционированы","ÑбаланÑирован","ÑбаланÑирована","ÑбаланÑировано","ÑбаланÑированы","Ñбережен","Ñбережена","Ñбережено","Ñбережены","Ñбит","Ñбита","Ñбито","Ñбиты","Ñближен","Ñближена","Ñближено","Ñближены","Ñбрит","Ñбрита","Ñбрито","Ñбриты","Ñброшен","Ñброшена","Ñброшено","Ñброшены","Ñбрызнут","Ñбрызнута","Ñбрызнуто","Ñбрызнуты","Ñвален","Ñвалена","Ñвалено","Ñвалены","Ñварганен","Ñварганена","Ñварганено","Ñварганены","Ñварен","Ñварена","Ñварено","Ñварены","Ñведен","Ñведена","Ñведено","Ñведены","Ñвезен","Ñвезена","Ñвезено","Ñвезены","Ñвергнут","Ñвергнута","Ñвергнуто","Ñвергнуты","Ñверен","Ñверена","Ñверено","Ñверены","Ñвернут","Ñвернута","Ñвернуто","Ñвернуты","ÑверÑтан","ÑверÑтана","ÑверÑтано","ÑверÑтаны","Ñвершен","Ñвершена","Ñвершено","Ñвершены","Ñвешен","Ñвешена","Ñвешено","Ñвешены","Ñвинчен","Ñвинчена","Ñвинчено","Ñвинчены","ÑвиÑтнут","ÑвиÑтнута","ÑвиÑтнуто","ÑвиÑтнуты","Ñвит","Ñвита","Ñвито","Ñвиты","Ñворован","Ñворована","Ñворовано","Ñворованы","Ñворочен","Ñворочена","Ñворочено","Ñворочены","ÑвÑзан","ÑвÑзана","ÑвÑзано","ÑвÑзаны","Ñглажен","Ñглажена","Ñглажено","Ñглажены","Ñгноен","Ñгноена","Ñгноено","Ñгноены","Ñгорблена","Ñгорблено","Ñгорблены","Ñготовлен","Ñготовлена","Ñготовлено","Ñготовлены","Ñгруппирован","Ñгруппирована","Ñгруппировано","Ñгруппированы","Ñгрызен","Ñгрызена","Ñгрызено","Ñгрызены","Ñгублен","Ñгублена","Ñгублено","Ñгублены","Ñгущен","Ñгущена","Ñгущено","Ñгущены","Ñдавлен","Ñдавлена","Ñдавлено","Ñдавлены","Ñдвинут","Ñдвинута","Ñдвинуто","Ñдвинуты","Ñдвоен","Ñдвоена","Ñдвоено","Ñдвоены","Ñделан","Ñделана","Ñделано","Ñделаны","Ñдержан","Ñдержана","Ñдержано","Ñдержаны","Ñдернут","Ñдернута","Ñдернуто","Ñдернуты","Ñдобрен","Ñдобрена","Ñдобрено","Ñдобрены","Ñдут","Ñдута","Ñдуто","Ñдуты","ÑекулÑризован","ÑекулÑризована","ÑекулÑризовано","ÑекулÑризованы","ÑенÑибилизирован","ÑенÑибилизирована","ÑенÑибилизировано","ÑенÑибилизированы","Ñервирован","Ñервирована","Ñервировано","Ñервированы","Ñжат","Ñжата","Ñжато","Ñжаты","Ñжеван","Ñжевана","Ñжевано","Ñжеваны","Ñжит","Ñжита","Ñжито","Ñжиты","Ñигнализирован","Ñигнализирована","Ñигнализировано","Ñигнализированы","Ñимулирован","Ñимулирована","Ñимулировано","Ñимулированы","Ñиндицирован","Ñиндицирована","Ñиндицировано","Ñиндицированы","Ñинтезирован","Ñинтезирована","Ñинтезировано","Ñинтезированы","Ñинхронизирован","Ñинхронизирована","Ñинхронизировано","Ñинхронизированы","ÑиÑтематизирован","ÑиÑтематизирована","ÑиÑтематизировано","ÑиÑтематизированы","Ñказан","Ñказана","Ñказано","Ñказаны","Ñказанут","Ñказанута","Ñказануто","Ñказануты","Ñкачан","Ñкачана","Ñкачано","Ñкачаны","Ñкинут","Ñкинута","Ñкинуто","Ñкинуты","Ñкладирован","Ñкладирована","Ñкладировано","Ñкладированы","Ñклеван","Ñклевана","Ñклевано","Ñклеваны","Ñклеен","Ñклеена","Ñклеено","Ñклеены","Ñклонен","Ñклонена","Ñклонено","Ñклонены","Ñкован","Ñкована","Ñковано","Ñкованы","Ñколот","Ñколота","Ñколото","Ñколоты","Ñколочен","Ñколочена","Ñколочено","Ñколочены","Ñкомандован","Ñкомандована","Ñкомандовано","Ñкомандованы","Ñкомкан","Ñкомкана","Ñкомкано","Ñкомканы","ÑкомпенÑирован","ÑкомпенÑирована","ÑкомпенÑировано","ÑкомпенÑированы","Ñкомпонован","Ñкомпонована","Ñкомпоновано","Ñкомпонованы","Ñкомпрометирован","Ñкомпрометирована","Ñкомпрометировано","Ñкомпрометированы","ÑконÑтруирован","ÑконÑтруирована","ÑконÑтруировано","ÑконÑтруированы","Ñконцентрирован","Ñконцентрирована","Ñконцентрировано","Ñконцентрированы","Ñкоординирован","Ñкоординирована","Ñкоординировано","Ñкоординированы","Ñкопирован","Ñкопирована","Ñкопировано","Ñкопированы","Ñкормлен","Ñкормлена","Ñкормлено","Ñкормлены","Ñкорректирован","Ñкорректирована","Ñкорректировано","Ñкорректированы","ÑкоÑобочен","ÑкоÑобочена","ÑкоÑобочено","ÑкоÑобочены","Ñкошен","Ñкошена","Ñкошено","Ñкошены","Ñкрашен","Ñкрашена","Ñкрашено","Ñкрашены","Ñкреплен","Ñкреплена","Ñкреплено","Ñкреплены","Ñкрещен","Ñкрещена","Ñкрещено","Ñкрещены","Ñкривлен","Ñкривлена","Ñкривлено","Ñкривлены","Ñкроен","Ñкроена","Ñкроено","Ñкроены","Ñкручен","Ñкручена","Ñкручено","Ñкручены","Ñкрыт","Ñкрыта","Ñкрыто","Ñкрыты","Ñкрючен","Ñкрючена","Ñкрючено","Ñкрючены","Ñкуплен","Ñкуплена","Ñкуплено","Ñкуплены","Ñкушан","Ñкушана","Ñкушано","Ñкушаны","Ñлажен","Ñлажена","Ñлажено","Ñлажены","Ñлеплен","Ñлеплена","Ñлеплено","Ñлеплены","Ñлизан","Ñлизана","Ñлизано","Ñлизаны","Ñлизнут","Ñлизнута","Ñлизнуто","Ñлизнуты","Ñлит","Ñлита","Ñлито","Ñлиты","Ñличен","Ñличена","Ñличено","Ñличены","Ñловлен","Ñловлена","Ñловлено","Ñловлены","Ñложен","Ñложена","Ñложено","Ñложены","Ñломан","Ñломана","Ñломано","Ñломаны","Ñломлен","Ñломлена","Ñломлено","Ñломлены","Ñлопан","Ñлопана","Ñлопано","Ñлопаны","Ñлуплен","Ñлуплена","Ñлуплено","Ñлуплены","Ñмазана","Ñмазано","Ñмазаны","ÑмаÑтерен","ÑмаÑтерена","ÑмаÑтерено","ÑмаÑтерены","Ñменен","Ñменена","Ñменено","Ñменены","ÑменÑн","ÑменÑна","ÑменÑно","ÑменÑны","Ñмерен","Ñмерена","Ñмерено","Ñмерены","Ñметен","Ñметена","Ñметено","Ñметены","Ñмешан","Ñмешана","Ñмешано","Ñмешаны","Ñмещен","Ñмещена","Ñмещено","Ñмещены","Ñмирен","Ñмирена","Ñмирено","Ñмирены","Ñмоделирован","Ñмоделирована","Ñмоделировано","Ñмоделированы","Ñмонтирован","Ñмонтирована","Ñмонтировано","Ñмонтированы","Ñморен","Ñморена","Ñморено","Ñморены","Ñморожен","Ñморожена","Ñморожено","Ñморожены","Ñморщен","Ñморщена","Ñморщено","Ñморщены","Ñмотан","Ñмотана","Ñмотано","Ñмотаны","Ñмочен","Ñмочена","Ñмочено","Ñмочены","Ñмыт","Ñмыта","Ñмыто","Ñмыты","ÑмÑгчен","ÑмÑгчена","ÑмÑгчено","ÑмÑгчены","ÑмÑÑ‚","ÑмÑта","ÑмÑто","ÑмÑты","Ñнабжен","Ñнабжена","Ñнабжено","Ñнабжены","ÑнарÑжен","ÑнарÑжена","ÑнарÑжено","ÑнарÑжены","ÑнеÑен","ÑнеÑена","ÑнеÑено","ÑнеÑены","Ñнижен","Ñнижена","Ñнижено","Ñнижены","ÑниÑкан","ÑниÑкана","ÑниÑкано","ÑниÑканы","Ñношен","Ñношена","Ñношено","Ñношены","ÑнÑÑ‚","ÑнÑта","ÑнÑто","ÑнÑты","Ñоблазнен","Ñоблазнена","Ñоблазнено","Ñоблазнены","Ñоблюден","Ñоблюдена","Ñоблюдено","Ñоблюдены","Ñобран","Ñобрана","Ñобрано","Ñобраны","Ñовершен","Ñовершена","Ñовершено","Ñовершены","Ñовмещен","Ñовмещена","Ñовмещено","Ñовмещены","Ñовращен","Ñовращена","Ñовращено","Ñовращены","ÑоглаÑован","ÑоглаÑована","ÑоглаÑовано","ÑоглаÑованы","Ñогнан","Ñогнана","Ñогнано","Ñогнаны","Ñогнут","Ñогнута","Ñогнуто","Ñогнуты","Ñогрет","Ñогрета","Ñогрето","Ñогреты","ÑодеÑн","ÑодеÑна","ÑодеÑно","ÑодеÑны","Ñодран","Ñодрана","Ñодрано","Ñодраны","Ñоединен","Ñоединена","Ñоединено","Ñоединены","Ñожжен","Ñожжена","Ñожжено","Ñожжены","Ñожран","Ñожрана","Ñожрано","Ñожраны","Ñозван","Ñозвана","Ñозвано","Ñозваны","Ñокращен","Ñокращена","Ñокращено","Ñокращены","Ñокрушен","Ñокрушена","Ñокрушено","Ñокрушены","Ñокрыт","Ñокрыта","Ñокрыто","Ñокрыты","Ñоображен","Ñоображена","Ñоображено","Ñоображены","Ñообщен","Ñообщена","Ñообщено","Ñообщены","Ñооружен","Ñооружена","Ñооружено","Ñооружены","ÑоотнеÑен","ÑоотнеÑена","ÑоотнеÑено","ÑоотнеÑены","ÑопоÑтавлен","ÑопоÑтавлена","ÑопоÑтавлено","ÑопоÑтавлены","Ñопровожден","Ñопровождена","Ñопровождено","Ñопровождены","ÑопрÑжен","ÑопрÑжена","ÑопрÑжено","ÑопрÑжены","Ñорван","Ñорвана","Ñорвано","Ñорваны","Ñориентирован","Ñориентирована","Ñориентировано","Ñориентированы","ÑоÑватан","ÑоÑватана","ÑоÑватано","ÑоÑватаны","ÑоÑкребен","ÑоÑкребена","ÑоÑкребено","ÑоÑкребены","ÑоÑлан","ÑоÑлана","ÑоÑлано","ÑоÑланы","ÑоÑлужен","ÑоÑлужена","ÑоÑлужено","ÑоÑлужены","ÑоÑредоточен","ÑоÑредоточена","ÑоÑредоточено","ÑоÑредоточены","ÑоÑтавлен","ÑоÑтавлена","ÑоÑтавлено","ÑоÑтавлены","ÑоÑтарен","ÑоÑтарена","ÑоÑтарено","ÑоÑтарены","ÑоÑтрижен","ÑоÑтрижена","ÑоÑтрижено","ÑоÑтрижены","ÑоÑтроен","ÑоÑтроена","ÑоÑтроено","ÑоÑтроены","ÑоÑтрÑпан","ÑоÑтрÑпана","ÑоÑтрÑпано","ÑоÑтрÑпаны","ÑоÑтыкован","ÑоÑтыкована","ÑоÑтыковано","ÑоÑтыкованы","ÑоÑчитан","ÑоÑчитана","ÑоÑчитано","ÑоÑчитаны","Ñотворен","Ñотворена","Ñотворено","Ñотворены","Ñоткан","Ñоткана","Ñоткано","Ñотканы","ÑотрÑÑен","ÑотрÑÑена","ÑотрÑÑено","ÑотрÑÑены","Ñохранен","Ñохранена","Ñохранено","Ñохранены","Ñочинен","Ñочинена","Ñочинено","Ñочинены","Ñочтен","Ñочтена","Ñочтено","Ñочтены","Ñпалена","Ñпалено","Ñпалены","ÑпаÑен","ÑпаÑена","ÑпаÑено","ÑпаÑены","ÑпаÑн","ÑпаÑна","ÑпаÑно","ÑпаÑны","Ñпеленан","Ñпеленана","Ñпеленано","Ñпеленаны","Ñперт","Ñперта","Ñперто","Ñперты","Ñпет","Ñпета","Ñпето","Ñпеты","Ñпециализирован","Ñпециализирована","Ñпециализировано","Ñпециализированы","Ñпешен","Ñпешена","Ñпешено","Ñпешены","Ñпилен","Ñпилена","Ñпилено","Ñпилены","ÑпиÑан","ÑпиÑана","ÑпиÑано","ÑпиÑаны","Ñпихнут","Ñпихнута","Ñпихнуто","Ñпихнуты","Ñплавлен","Ñплавлена","Ñплавлено","Ñплавлены","Ñпланирован","Ñпланирована","Ñпланировано","Ñпланированы","Ñплетен","Ñплетена","Ñплетено","Ñплетены","Ñплочен","Ñплочена","Ñплочено","Ñплочены","Ñплюнут","Ñплюнута","Ñплюнуто","Ñплюнуты","Ñплющен","Ñплющена","Ñплющено","Ñплющены","Ñподоблен","Ñподоблена","Ñподоблено","Ñподоблены","ÑполоÑнут","ÑполоÑнута","ÑполоÑнуто","ÑполоÑнуты","Ñпорот","Ñпорота","Ñпорото","Ñпороты","Ñправлен","Ñправлена","Ñправлено","Ñправлены","ÑпреÑÑован","ÑпреÑÑована","ÑпреÑÑовано","ÑпреÑÑованы","Ñпроважен","Ñпроважена","Ñпроважено","Ñпроважены","Ñпровоцирован","Ñпровоцирована","Ñпровоцировано","Ñпровоцированы","Ñпроектирован","Ñпроектирована","Ñпроектировано","Ñпроектированы","Ñпроецирован","Ñпроецирована","Ñпроецировано","Ñпроецированы","Ñпрошен","Ñпрошена","Ñпрошено","Ñпрошены","ÑпрÑтан","ÑпрÑтана","ÑпрÑтано","ÑпрÑтаны","Ñпущен","Ñпущена","Ñпущено","Ñпущены","Ñработан","Ñработана","Ñработано","Ñработаны","Ñравнен","Ñравнена","Ñравнено","Ñравнены","Ñражен","Ñражена","Ñражено","Ñражены","Ñращен","Ñращена","Ñращено","Ñращены","Ñрезан","Ñрезана","Ñрезано","Ñрезаны","ÑриÑован","ÑриÑована","ÑриÑовано","ÑриÑованы","ÑровнÑн","ÑровнÑна","ÑровнÑно","ÑровнÑны","Ñрубан","Ñрубана","Ñрубано","Ñрубаны","Ñрублен","Ñрублена","Ñрублено","Ñрублены","ÑÑажен","ÑÑажена","ÑÑажено","ÑÑажены","ÑÑужен","ÑÑужена","ÑÑужено","ÑÑужены","Ñтабилизирован","Ñтабилизирована","Ñтабилизировано","Ñтабилизированы","Ñтанцеван","Ñтанцевана","Ñтанцевано","Ñтанцеваны","Ñтащен","Ñтащена","Ñтащено","Ñтащены","Ñтерилизован","Ñтерилизована","Ñтерилизовано","Ñтерилизованы","Ñтерт","Ñтерта","Ñтерто","Ñтерты","ÑтеÑан","ÑтеÑана","ÑтеÑано","ÑтеÑаны","ÑтеÑнен","ÑтеÑнена","ÑтеÑнено","ÑтеÑнены","Ñтилизован","Ñтилизована","Ñтилизовано","Ñтилизованы","Ñтимулирован","Ñтимулирована","Ñтимулировано","Ñтимулированы","ÑтиÑнут","ÑтиÑнута","ÑтиÑнуто","ÑтиÑнуты","Ñтолкнут","Ñтолкнута","Ñтолкнуто","Ñтолкнуты","Ñтоптан","Ñтоптана","Ñтоптано","Ñтоптаны","Ñточен","Ñточена","Ñточено","Ñточены","Ñтравлен","Ñтравлена","Ñтравлено","Ñтравлены","Ñтрельнут","Ñтрельнута","Ñтрельнуто","Ñтрельнуты","Ñтреножен","Ñтреножена","Ñтреножено","Ñтреножены","Ñтруктурирован","Ñтруктурирована","Ñтруктурировано","Ñтруктурированы","ÑтрÑхнут","ÑтрÑхнута","ÑтрÑхнуто","ÑтрÑхнуты","Ñтукнут","Ñтукнута","Ñтукнуто","Ñтукнуты","Ñтырен","Ñтырена","Ñтырено","Ñтырены","ÑÑ‚Ñнут","ÑÑ‚Ñнута","ÑÑ‚Ñнуто","ÑÑ‚Ñнуты","Ñублимирован","Ñублимирована","Ñублимировано","Ñублимированы","ÑубÑидирован","ÑубÑидирована","ÑубÑидировано","ÑубÑидированы","Ñуммирован","Ñуммирована","Ñуммировано","Ñуммированы","Ñунут","Ñунута","Ñунуто","Ñунуты","Ñфабрикован","Ñфабрикована","Ñфабриковано","Ñфабрикованы","ÑфокуÑирован","ÑфокуÑирована","ÑфокуÑировано","ÑфокуÑированы","Ñформирован","Ñформирована","Ñформировано","Ñформированы","Ñформулирован","Ñформулирована","Ñформулировано","Ñформулированы","Ñфотографирован","Ñфотографирована","Ñфотографировано","Ñфотографированы","Ñхвачен","Ñхвачена","Ñхвачено","Ñхвачены","Ñхлопотан","Ñхлопотана","Ñхлопотано","Ñхлопотаны","Ñхоронен","Ñхоронена","Ñхоронено","Ñхоронены","Ñцапан","Ñцапана","Ñцапано","Ñцапаны","Ñцементирован","Ñцементирована","Ñцементировано","Ñцементированы","Ñцеплен","Ñцеплена","Ñцеплено","Ñцеплены","Ñшит","Ñшита","Ñшито","Ñшиты","Ñыгран","Ñыграна","Ñыграно","Ñыграны","ÑÑкономлен","ÑÑкономлена","ÑÑкономлено","ÑÑкономлены","таранен","таранена","таранено","таранены","татуирован","татуирована","татуировано","татуированы","телеграфирован","телеграфирована","телеграфировано","телеграфированы","терроризирован","терроризирована","терроризировано","терроризированы","тиражирован","тиражирована","тиражировано","тиражированы","титулована","титуловано","титулованы","ткнут","ткнута","ткнуто","ткнуты","толкнут","толкнута","толкнуто","толкнуты","тонизирован","тонизирована","тонизировано","тонизированы","тонирован","тонирована","тонировано","тонированы","торпедирован","торпедирована","торпедировано","торпедированы","травмирован","травмирована","травмировано","травмированы","транÑлирован","транÑлирована","транÑлировано","транÑлированы","транÑпортирован","транÑпортирована","транÑпортировано","транÑпортированы","транÑформирован","транÑформирована","транÑформировано","транÑформированы","траÑÑирован","траÑÑирована","траÑÑировано","траÑÑированы","трахнут","трахнута","трахнуто","трахнуты","треÑнут","треÑнута","треÑнуто","треÑнуты","тронут","тронута","тронуто","тронуты","трудоуÑтроен","трудоуÑтроена","трудоуÑтроено","трудоуÑтроены","турнут","турнута","турнуто","турнуты","тюкнут","тюкнута","тюкнуто","тюкнуты","Ñ‚Ñпнут","Ñ‚Ñпнута","Ñ‚Ñпнуто","Ñ‚Ñпнуты","убавлен","убавлена","убавлено","убавлены","убаюкан","убаюкана","убаюкано","убаюканы","убежден","убеждена","убеждено","убеждены","убелен","убелена","убелено","убелены","убережен","убережена","убережено","убережены","убит","убита","убито","убиты","ублажен","ублажена","ублажено","ублажены","убран","убрана","убрано","убраны","убыÑтрен","убыÑтрена","убыÑтрено","убыÑтрены","уважен","уважена","уважено","уважены","уварен","уварена","уварено","уварены","уведен","уведена","уведено","уведены","уведомлен","уведомлена","уведомлено","уведомлены","увезен","увезена","увезено","увезены","увековечен","увековечена","увековечено","увековечены","увеличен","увеличена","увеличено","увеличены","увенчан","увенчана","увенчано","увенчаны","уверен","уверена","уверено","уверены","увешан","увешана","увешано","увешаны","увешен","увешена","увешено","увешены","увидан","увидана","увидано","увиданы","увиден","увидена","увидено","увидены","увит","увита","увито","увиты","увлажнен","увлажнена","увлажнено","увлажнены","увлечен","увлечена","увлечено","увлечены","увожен","увожена","увожено","увожены","уволен","уволена","уволено","уволены","уворован","уворована","уворовано","уворованы","увÑзан","увÑзана","увÑзано","увÑзаны","угадан","угадана","угадано","угаданы","углублен","углублена","углублено","углублены","углÑжен","углÑжена","углÑжено","углÑжены","угнан","угнана","угнано","угнаны","угнетен","угнетена","угнетено","угнетены","уговорен","уговорена","уговорено","уговорены","угомонен","угомонена","угомонено","угомонены","угонÑн","угонÑна","угонÑно","угонÑны","угоразжен","угоразжена","угоразжено","угоразжены","уготован","уготована","уготовано","уготованы","уготовлен","уготовлена","уготовлено","уготовлены","угощен","угощена","угощено","угощены","угроблен","угроблена","угроблено","угроблены","угрохан","угрохана","угрохано","угроханы","удавлен","удавлена","удавлено","удавлены","удален","удалена","удалено","удалены","ударен","ударена","ударено","ударены","удвоен","удвоена","удвоено","удвоены","уделан","уделана","уделано","уделаны","уделен","уделена","уделено","уделены","удержан","удержана","удержано","удержаны","удеÑÑтерен","удеÑÑтерена","удеÑÑтерено","удеÑÑтерены","удешевлен","удешевлена","удешевлено","удешевлены","удивлен","удивлена","удивлено","удивлены","удлинен","удлинена","удлинено","удлинены","удобрен","удобрена","удобрено","удобрены","удовлетворен","удовлетворена","удовлетворено","удовлетворены","удоÑтоверен","удоÑтоверена","удоÑтоверено","удоÑтоверены","удоÑтоен","удоÑтоена","удоÑтоено","удоÑтоены","удочерен","удочерена","удочерено","удочерены","удружен","удружена","удружено","удружены","удручен","удручена","удручено","удручены","удуман","удумана","удумано","удуманы","удушен","удушена","удушено","удушены","ужален","ужалена","ужалено","ужалены","ужаÑнут","ужаÑнута","ужаÑнуто","ужаÑнуты","ужат","ужата","ужато","ужаты","узаконен","узаконена","узаконено","узаконены","узнан","узнана","узнано","узнаны","узурпирован","узурпирована","узурпировано","узурпированы","указан","указана","указано","указаны","укатан","укатана","укатано","укатаны","укачан","укачана","укачано","укачаны","укачен","укачена","укачено","укачены","укокошен","укокошена","укокошено","укокошены","уколот","уколота","уколото","уколоты","укомплектован","укомплектована","укомплектовано","укомплектованы","укорен","укорена","укорено","укорены","укоренен","укоренена","укоренено","укоренены","укорочен","укорочена","укорочено","укорочены","украден","украдена","украдено","украдены","украшен","украшена","украшено","украшены","укреплен","укреплена","укреплено","укреплены","укрощен","укрощена","укрощено","укрощены","укрупнен","укрупнена","укрупнено","укрупнены","укрыт","укрыта","укрыто","укрыты","укупорен","укупорена","укупорено","укупорены","укутан","укутана","укутано","укутаны","укушен","укушена","укушено","укушены","улажен","улажена","улажено","улажены","уличен","уличена","уличено","уличены","уловлен","уловлена","уловлено","уловлены","уложен","уложена","уложено","уложены","уломан","уломана","уломано","уломаны","улучен","улучена","улучено","улучены","улучшен","улучшена","улучшено","улучшены","умален","умалена","умалено","умалены","уменьшен","уменьшена","уменьшено","уменьшены","умерен","умерена","умерено","умерены","умерщвлен","умерщвлена","умерщвлено","умерщвлены","умещен","умещена","умещено","умещены","умилен","умилена","умилено","умилены","умиротворен","умиротворена","умиротворено","умиротворены","умножен","умножена","умножено","умножены","умолен","умолена","умолено","умолены","уморен","уморена","уморено","уморены","умотан","умотана","умотано","умотаны","умудрен","умудрена","умудрено","умудрены","умыкнут","умыкнута","умыкнуто","умыкнуты","умыт","умыта","умыто","умыты","умÑÑ‚","умÑта","умÑто","умÑты","унаÑледован","унаÑледована","унаÑледовано","унаÑледованы","унеÑен","унеÑена","унеÑено","унеÑены","унижен","унижена","унижено","унижены","унизан","унизана","унизано","унизаны","унифицирован","унифицирована","унифицировано","унифицированы","уничтожен","уничтожена","уничтожено","уничтожены","унюхан","унюхана","унюхано","унюханы","унÑÑ‚","унÑта","унÑто","унÑты","упакован","упакована","упаковано","упакованы","упаÑен","упаÑена","упаÑено","упаÑены","упечен","упечена","упечено","упечены","уплачен","уплачена","уплачено","уплачены","уплотнен","уплотнена","уплотнено","уплотнены","уподоблен","уподоблена","уподоблено","уподоблены","упоен","упоена","упоено","упоены","упокоен","упокоена","упокоено","упокоены","уполномочен","уполномочена","уполномочено","уполномочены","упомнен","упомнена","упомнено","упомнены","упомÑнут","упомÑнута","упомÑнуто","упомÑнуты","упорÑдочен","упорÑдочена","упорÑдочено","упорÑдочены","употреблен","употреблена","употреблено","употреблены","упразднен","упразднена","упразднено","упразднены","упрежден","упреждена","упреждено","упреждены","упрекнут","упрекнута","упрекнуто","упрекнуты","упрочен","упрочена","упрочено","упрочены","упрошен","упрошена","упрошено","упрошены","упрощен","упрощена","упрощено","упрощены","упрÑтан","упрÑтана","упрÑтано","упрÑтаны","упущен","упущена","упущено","упущены","уравновешен","уравновешена","уравновешено","уравновешены","уравнÑн","уравнÑна","уравнÑно","уравнÑны","урегулирован","урегулирована","урегулировано","урегулированы","урезан","урезана","урезано","урезаны","урезонен","урезонена","урезонено","урезонены","уронен","уронена","уронено","уронены","уÑажен","уÑажена","уÑажено","уÑажены","уÑвоен","уÑвоена","уÑвоено","уÑвоены","уÑечен","уÑечена","уÑечено","уÑечены","уÑеÑн","уÑеÑна","уÑеÑно","уÑеÑны","уÑижен","уÑижена","уÑижено","уÑижены","уÑилен","уÑилена","уÑилено","уÑилены","уÑкорен","уÑкорена","уÑкорено","уÑкорены","уÑлан","уÑлана","уÑлано","уÑланы","уÑложнен","уÑложнена","уÑложнено","уÑложнены","уÑлыхан","уÑлыхана","уÑлыхано","уÑлыханы","уÑлышан","уÑлышана","уÑлышано","уÑлышаны","уÑмирен","уÑмирена","уÑмирено","уÑмирены","уÑмотрен","уÑмотрена","уÑмотрено","уÑмотрены","уÑовершенÑтвован","уÑовершенÑтвована","уÑовершенÑтвовано","уÑовершенÑтвованы","уÑпокоен","уÑпокоена","уÑпокоено","уÑпокоены","уÑреднен","уÑреднена","уÑреднено","уÑреднены","уÑтавлен","уÑтавлена","уÑтавлено","уÑтавлены","уÑтановлен","уÑтановлена","уÑтановлено","уÑтановлены","уÑтлан","уÑтлана","уÑтлано","уÑтланы","уÑтранен","уÑтранена","уÑтранено","уÑтранены","уÑтрашен","уÑтрашена","уÑтрашено","уÑтрашены","уÑтремлен","уÑтремлена","уÑтремлено","уÑтремлены","уÑтроен","уÑтроена","уÑтроено","уÑтроены","уÑтуплен","уÑтуплена","уÑтуплено","уÑтуплены","уÑугублен","уÑугублена","уÑугублено","уÑугублены","уÑыновлен","уÑыновлена","уÑыновлено","уÑыновлены","уÑыплен","уÑыплена","уÑыплено","уÑыплены","утаен","утаена","утаено","утаены","утащен","утащена","утащено","утащены","утвержден","утверждена","утверждено","утверждены","утеплен","утеплена","утеплено","утеплены","утерт","утерта","утерто","утерты","утерÑн","утерÑна","утерÑно","утерÑны","утешен","утешена","утешено","утешены","утилизирован","утилизирована","утилизировано","утилизированы","утихомирен","утихомирена","утихомирено","утихомирены","утолен","утолена","утолено","утолены","утопан","утопана","утопано","утопаны","утоплен","утоплена","утоплено","утоплены","утоптан","утоптана","утоптано","утоптаны","уточнен","уточнена","уточнено","уточнены","утрамбован","утрамбована","утрамбовано","утрамбованы","утрачен","утрачена","утрачено","утрачены","утрирован","утрирована","утрировано","утрированы","утроен","утроена","утроено","утроены","утрÑÑен","утрÑÑена","утрÑÑено","утрÑÑены","утыкан","утыкана","утыкано","утыканы","утÑжелен","утÑжелена","утÑжелено","утÑжелены","утÑнут","утÑнута","утÑнуто","утÑнуты","ухвачен","ухвачена","ухвачено","ухвачены","ухлопан","ухлопана","ухлопано","ухлопаны","ухожен","ухожена","ухожено","ухожены","ухудшен","ухудшена","ухудшено","ухудшены","уценен","уценена","уценено","уценены","учинен","учинена","учинено","учинены","учрежден","учреждена","учреждено","учреждены","учтен","учтена","учтено","учтены","учуÑн","учуÑна","учуÑно","учуÑны","ушит","ушита","ушито","ушиты","ущемлен","ущемлена","ущемлено","ущемлены","ущипнут","ущипнута","ущипнуто","ущипнуты","уÑзвлен","уÑзвлена","уÑзвлено","уÑзвлены","уÑÑнен","уÑÑнена","уÑÑнено","уÑÑнены","фальÑифицирован","фальÑифицирована","фальÑифицировано","фальÑифицированы","фикÑирован","фикÑирована","фикÑировано","фикÑированы","финанÑирован","финанÑирована","финанÑировано","финанÑированы","фланкирован","фланкирована","фланкировано","фланкированы","форÑирован","форÑирована","форÑировано","форÑированы","характеризован","характеризована","характеризовано","характеризованы","хлеÑтнут","хлеÑтнута","хлеÑтнуто","хлеÑтнуты","хлопнут","хлопнута","хлопнуто","хлопнуты","цапнут","цапнута","цапнуто","цапнуты","царапнут","царапнута","царапнуто","царапнуты","централизован","централизована","централизовано","централизованы","центрифугирован","центрифугирована","центрифугировано","центрифугированы","цивилизован","цивилизована","цивилизовано","цивилизованы","черкнут","черкнута","черкнуто","черкнуты","четвертован","четвертована","четвертовано","четвертованы","чмокнут","чмокнута","чмокнуто","чмокнуты","шарахнут","шарахнута","шарахнуто","шарахнуты","швырнут","швырнута","швырнуто","швырнуты","шлепнут","шлепнута","шлепнуто","шлепнуты","шмÑкнут","шмÑкнута","шмÑкнуто","шмÑкнуты","шокирован","шокирована","шокировано","шокированы","щелкнут","щелкнута","щелкнуто","щелкнуты","Ñвакуирован","Ñвакуирована","Ñвакуировано","Ñвакуированы","Ñкипирован","Ñкипирована","Ñкипировано","Ñкипированы","Ñкранизирован","Ñкранизирована","Ñкранизировано","Ñкранизированы","Ñкранирован","Ñкранирована","Ñкранировано","Ñкранированы","ÑкÑпонирован","ÑкÑпонирована","ÑкÑпонировано","ÑкÑпонированы","ÑкÑпортирован","ÑкÑпортирована","ÑкÑпортировано","ÑкÑпортированы","ÑкÑпроприирован","ÑкÑпроприирована","ÑкÑпроприировано","ÑкÑпроприированы","ÑкÑтрагирован","ÑкÑтрагирована","ÑкÑтрагировано","ÑкÑтрагированы","ÑкÑтраполирован","ÑкÑтраполирована","ÑкÑтраполировано","ÑкÑтраполированы","Ñмитирован","Ñмитирована","Ñмитировано","Ñмитированы","Ñпатирован","Ñпатирована","Ñпатировано","Ñпатированы","Ñтапирован","Ñтапирована","Ñтапировано","Ñтапированы","Ñшелонирован","Ñшелонирована","Ñшелонировано","Ñшелонированы","Ñвлен","Ñвлена","Ñвлено","Ñвлены"].concat(["благоÑловлён","введён","ввезён","вдохновлён","вживлён","взбешён","взбодрён","взведён","взвихрён","взгромозждён","взращён","взрыхлён","видоизменён","включён","вколочён","вкраплён","вкушён","вменён","вмещён","внедрён","внеÑён","внушён","вовлечён","водворён","водружён","возблагодарён","возбуждён","возведён","возвещён","возвращён","возглашён","возлюблён","возмещён","возмущён","вознаграждён","вознеÑён","возобновлён","возомнён","возрождён","вонждён","воображён","воодушевлён","вооружён","воплощён","вопрошён","ворочён","воÑкрешён","воÑпалён","воÑпламенён","воÑпрещён","воÑпроизведён","воÑÑтановлён","воÑхищён","вперён","впечатлён","вплетён","впрÑжён","вразумлён","врублён","вручён","вÑелён","вÑкипÑчён","вÑкормлён","вÑкружён","вÑполошён","выведён","доведён","довезён","довершён","доглÑжён","договорён","дозволён","донеÑён","допечён","дотерплён","завезён","завершён","завлечён","завожён","заворожён","загашён","заглублён","заглушён","заговорён","загорожён","загромозждён","загружён","загрÑзнён","задурён","задушён","задымлён","заземлён","зазубрён","закалён","заклеймён","заключён","закопчё","закреплён","закруглён","замедлён","заменён","заметён","замещён","заморён","занеÑён","заоÑтрён","запалён","запаÑён","запечатлён","запечён","заплетён","заполонён","запорошён","запрещён","запримечён","запрошён","запрÑжён","запылён","заражён","зарÑжён","заÑелён","заÑлонён","заÑолён","заÑтолблён","заÑтопорён","затаён","затворён","затемнён","затенён","затмлён","затруднён","захламлён","зацеплён","зачехлён","зачищён","зачтён","зашевелён","защемлён","защищён","избавлён","изборозждён","изведён","извещён","извинён","извлечён","извращён","измельчён","изменён","измышлён","изнурён","изобличён","изображён","изобретён","изречён","изумлён","изъÑвлён","иÑкажён","иÑключён","иÑкоренён","иÑкривлён","иÑкуплён","иÑпепелён","иÑпечён","иÑпещрён","иÑÑечён","иÑÑушён","иÑтончён","иÑтощён","иÑтреблён","казнён","крещён","лишён","наводнён","навоÑтрён","наговорён","награждён","нагромозждён","наделён","накалён","наклонён","наметён","нанеÑён","напечён","наплетён","напоён","напрÑжён","наречён","нарождён","наÑаждён","наÑелён","наÑмешён","наÑторожён","натравлён","невзлюблён","недоглÑжён","недоговорён","недооценён","перечтён","пленён","побеждён","побелён","побережён","погашён","поглощён","погребён","погружён","подведён","подвезён","подговорён","подгребён","подключён","подкреплён","подкручён","подменён","поднеÑён","подожжён","подпалён","подразделён","подрублён","подрулён","подÑелён","подÑечён","подÑлащён","подÑоединён","подÑтелён","подÑтережён","подтверждён","подцеплён","подчинён","подчищён","поздравлён","позолочён","покорён","покривлён","помещён","понеÑён","поощрён","порабощён","поражён","порешён","порождён","поÑвÑщён","поÑеребрён","поÑмотрён","поÑрамлён","поÑтановлён","потереблён","похоронён","почтён","пошевелён","пощажён","поÑÑнён","превращён","прегражён","предварён","предвоÑхищён","предопределён","предоÑтережён","предотвращён","предохранён","предпочтён","предречён","предрешён","предупреждён","презрён","преклонён","прекращён","преломлён","прельщён","преображён","преодолён","преподнеÑён","преÑечён","преÑтуплён","претворён","претерплён","прибережён","приближён","приведён","привезён","привлечён","привнеÑён","приворожён","пригвозжён","приглашён","приглушён","приговорён","приголублён","приземлён","приклонён","прикреплён","применён","принарÑжён","принеÑён","принуждён","приободрён","приобретён","приобщён","приоÑтановлён","приотворён","припаÑён","припечён","приплетён","приручён","приÑлонён","приÑмотрён","приÑовокуплён","приÑоединён","приÑочинён","приÑпоÑоблён","приÑтрунён","приÑуждён","притворён","провезён","проговорён","продешевлён","продлён","прозвонён","произведён","произнеÑён","прокалён","прокипÑчён","прокопчён","пронзён","пропылён","проÑверлён","проÑветлён","проÑвещён","проÑечён","проÑквожён","проторён","прочтён","прощён","проÑвлён","проÑÑнён","разбережён","разбомблён","разведён","развезён","развеÑелён","разворошён","развращён","разглашён","разговорён","разгорожён","разгорÑчён","разграфлён","разгребён","разгромлён","разделён","раздражён","раздразнён","раздроблён","разлеплён","разлучён","размещён","размозжён","разморён","размÑгчён","разнеÑён","разоблачён","разобщён","разожжён","разозлён","разорён","разоружён","разрежён","разрешён","разубеждён","разъединён","разъÑрён","разъÑÑнён","раÑкалён","раÑклешён","раÑкрепощён","раÑкроён","раÑпалён","раÑпотрошён","раÑпределён","раÑпроÑтранён","раÑпрÑжён","раÑпрÑмлён","раÑÑмешён","раÑтворён","раÑтлён","раÑтормошён","раÑтрÑÑён","раÑценён","раÑцеплён","раÑчленён","раÑшевелён","раÑщеплён","Ñбережён","Ñвершён","Ñгноён","Ñгущён","Ñожжён","Ñклонён","Ñкреплён","Ñкрещён","Ñкривлён","Ñкручён","Ñличён","Ñловлён","Ñметён","Ñмещён","Ñмущён","ÑмÑгчён","Ñнабжён","ÑнарÑжён","ÑнеÑён","Ñоблазнён","Ñоблюдён","Ñовершён","Ñовмещён","Ñовращён","Ñоединён","Ñокращён","Ñокрушён","Ñоображён","Ñообщён","Ñооружён","ÑоотнеÑён","ÑопоÑтавлён","Ñопровождён","ÑопрÑжён","Ñотворён","ÑотрÑÑён","Ñохранён","Ñочинён","Ñочтён","Ñпалён","Ñплетён","Ñравнён","Ñражён","ÑтеÑнён","ÑÑŠÑзвлён","убеждён","убелён","убережён","ублажён","убыÑтрён","уведён","увезён","увлажнён","увлечён","углублён","угнетён","уговорён","угомонён","угощён","удеÑÑтерён","удешевлён","удлинён","удобрён","удовлетворён","удочерён","удручён","укоренён","укреплён","укрощён","укрупнён","уличён","улучён","умалён","умерщвлён","умещён","умилён","умиротворён","умолён","уморён","умудрён","унеÑён","упаÑён","упечён","уплотнён","упоён","употреблён","упразднён","упреждён","упрощён","уÑечён","уÑложнён","уÑреднён","уÑтранён","уÑтрашён","уÑтремлён","уÑыновлён","уÑыплён","утаён","утверждён","утеплён","утолён","утомлён","уточнён","утрÑÑён","утÑжелён","учреждён","учтён","ущемлён","уÑзвлён","уÑÑнён","Ñвлён"],["ввёрнут","ввёрнута","ввёрнуто","ввёрнуты","вздёрнут","вздёрнута","вздёрнуто","вздёрнуты","втёрт","втёрта","втёрто","втёрты","завёрнут","завёрнута","завёрнуто","завёрнуты","задёрнут","задёрнута","задёрнуто","задёрнуты","замётан","замётана","замётано","замётаны","запелёнан","запелёнана","запелёнано","запелёнаны","заплёван","заплёвана","заплёвано","заплёваны","затёрт","затёрта","затёрто","затёрты","зачёркнут","зачёркнута","зачёркнуто","зачёркнуты","зачёрпнут","зачёрпнута","зачёрпнуто","зачёрпнуты","зачёÑан","зачёÑана","зачёÑано","зачёÑаны","зашёптан","зашёптана","зашёптано","зашёптаны","защёлкнут","защёлкнута","защёлкнуто","защёлкнуты","иÑкорёжен","иÑкорёжена","иÑкорёжено","иÑкорёжены","иÑтёрт","иÑтёрта","иÑтёрто","иÑтёрты","иÑчёркан","иÑчёркана","иÑчёркано","иÑчёрканы","иÑчёрпан","иÑчёрпана","иÑчёрпано","иÑчёрпаны","навёрнут","навёрнута","навёрнуто","навёрнуты","намётан","намётана","намётано","намётаны","наплёван","наплёвана","наплёвано","наплёваны","натёрт","натёрта","натёрто","натёрты","начёртан","начёртана","начёртано","начёртаны","начёрчен","начёрчена","начёрчено","начёрчены","нашёптан","нашёптана","нашёптано","нашёптаны","перечёркнут","перечёркнута","перечёркнуто","перечёркнуты","повёрнут","повёрнута","повёрнуто","повёрнуты","подвёрнут","подвёрнута","подвёрнуто","подвёрнуты","подёрнут","подёрнута","подёрнуто","подёрнуты","поддёрнут","поддёрнута","поддёрнуто","поддёрнуты","подмётан","подмётана","подмётано","подмётаны","подпёрт","подпёрта","подпёрто","подпёрты","подчёркнут","подчёркнута","подчёркнуто","подчёркнуты","пожёван","пожёвана","пожёвано","пожёваны","покорёжен","покорёжена","покорёжено","покорёжены","потёрт","потёрта","потёрто","потёрты","пощёлкан","пощёлкана","пощёлкано","пощёлканы","почёрпнут","почёрпнута","почёрпнуто","почёрпнуты","почёÑан","почёÑана","почёÑано","почёÑаны","притёрт","притёрта","притёрто","притёрты","причёÑан","причёÑана","причёÑано","причёÑаны","прищёлкнут","прищёлкнута","прищёлкнуто","прищёлкнуты","провёрнут","провёрнута","провёрнуто","провёрнуты","продёрнут","продёрнута","продёрнуто","продёрнуты","прожёван","прожёвана","прожёвано","прожёваны","проÑтёрт","проÑтёрта","проÑтёрто","проÑтёрты","протёрт","протёрта","протёрто","протёрты","прочёÑан","прочёÑана","прочёÑано","прочёÑаны","прошёптан","прошёптана","прошёптано","прошёптаны","развёрнут","развёрнута","развёрнуто","развёрнуты","раздёрнут","раздёрнута","раздёрнуто","раздёрнуты","разжёван","разжёвана","разжёвано","разжёваны","размётан","размётана","размётано","размётаны","раÑпроÑтёрт","раÑпроÑтёрта","раÑпроÑтёрто","раÑпроÑтёрты","раÑтёрт","раÑтёрта","раÑтёрто","раÑтёрты","раÑчёÑан","раÑчёÑана","раÑчёÑано","раÑчёÑаны","Ñвёрнут","Ñвёрнута","Ñвёрнуто","Ñвёрнуты","ÑвёрÑтан","ÑвёрÑтана","ÑвёрÑтано","ÑвёрÑтаны","Ñдёрнут","Ñдёрнута","Ñдёрнуто","Ñдёрнуты","Ñжёван","Ñжёвана","Ñжёвано","Ñжёваны","Ñклёван","Ñклёвана","Ñклёвано","Ñклёваны","Ñпелёнан","Ñпелёнана","Ñпелёнано","Ñпелёнаны","Ñтёрт","Ñтёрта","Ñтёрто","Ñтёрты","ÑтёÑан","ÑтёÑана","ÑтёÑано","ÑтёÑаны","утёрт","утёрта","утёрто","утёрты","утомлён","утомлёна","утомлёно","утомлёны","чёркнут","чёркнута","чёркнуто","чёркнуты","щёлкнут","щёлкнута","щёлкнуто","щёлкнуты"],["взбудоражен","взволнован","возбужден","возмущен","воÑпитан","воÑтребован","выдреÑÑирован","газирован","доношен","заболочен","заинтереÑован","заинтригован","закален","зачарован","зашифрован","изогнут","изогнута","изогнуто","изогнуты","коррумпирован","мотивирован","помÑÑ‚","помÑта","помÑто","помÑты","поношен","потаÑкан","потаÑкана","потаÑкано","потаÑканы","Ñгорблен","Ñконфужен","Ñконфужена","Ñконфужено","Ñконфужены","Ñмазан","титулован","утомлен","утомлена","утомлено","утомлены"]),{areWordsInSentence:H}=r.languageProcessing;function K(e){return H(z,e)}const{formatNumber:Q}=r.helpers;function U(e){const t=206.835-1.3*e.numberOfWords/e.numberOfSentences-60.1*e.numberOfSyllables/e.numberOfWords;return Q(t)}const{AbstractResearcher:X}=r.languageProcessing;class Y extends X{constructor(e){super(e),Object.assign(this.config,{language:"ru",passiveConstructionType:"morphological",firstWordExceptions:n,functionWords:F,transitionWords:o,twoPartTransitionWords:G,syllables:I,fleschReadingEaseScores:L,sentenceLength:V}),Object.assign(this.helpers,{getStemmer:q,isPassiveSentence:K,fleschReadingScore:U})}}(window.yoast=window.yoast||{}).Researcher=t})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/sk.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/sk.js new file mode 100644 index 00000000..78c237b9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/sk.js @@ -0,0 +1 @@ +(()=>{"use strict";var n={d:(e,o)=>{for(var a in o)n.o(o,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:o[a]})},o:(n,e)=>Object.prototype.hasOwnProperty.call(n,e),r:n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})}},e={};n.r(e),n.d(e,{default:()=>S});const o=window.yoast.analysis,a=["ktorí","ktorých","ktorými","ktorá","ktorého","ktorému","ktorom","ktorým","ktorý","ktoré","ktorej","ktorou","ktorú","lebo","keby","že","aby","alebo","keÄže","kedže","lenže","ale","nakoľko","pretože","Äi","ak","kedy"],t=["kvôli","miesto","pre","oproti","aj","i","ani","ale","avÅ¡ak","vÅ¡ak","preto","tak","teda","hoci","aby","ako","keÄ","keÄže","kým","pokiaľ","ohľadne","takto","tiež ","potom","takže","odtiaľ","odteraz","lebo","akonáhle","lenže","okrem","nakoľko","pokým","pretože","Äiže","jednako","doteraz","dosiaľ","najmä","napríklad","napr.","napokon","predsa","urÄite","dodatoÄne","Äalej","následne","napriek","hlavne","nakoniec","medzitým","inak ","ináÄ","obdobne","podobne","predovÅ¡etkým","naozaj","spoÄiatku ","najprv","najskôr","struÄne","vÅ¡eobecne","samozrejme","pravdaže","doposiaľ","nielen","než","síce","priÄom","až","jednak","zato","nielenže","ibaže","skôr","prv","hoc","namiesto","buÄto","inakÅ¡ie","hneÄ","kedykoľvek"],i=t.concat(["ako aj","ako i","a tak Äalej","a tak","aj tak","a jednako","a naopak","a predsa","ale jednako","ale predsa","a tým","a to","i to","jednako vÅ¡ak","predsa vÅ¡ak","to jest","a preto","i keby","i keÄ","Äo aj","keby aj","pretor, aby","odvtedy Äo","zatiar Äo","vzhľadom na to, že","berúc do úvahy, že","napriek tomu, že","preto, aby","za úÄelom","za týmto úÄelom","skôr Äi neskôr ","hneÄ ako","len Äo","pokiaľ ide o","pokiaľ nie","pokiaľ viem","po prvé","Äo sa týka","až do","až na","až po","z tohto dôvodu","z toho dôvodu","no predsa","iba ak","ak nie","keÄ nie","tobôž nie","pravdu povediac","ako napríklad","okrem toho ","v podstate","ako je uvedené ","v každom prípade","na rozdiel od","v porovnaní s","v oboch prípadoch","struÄne povedané","inými slovami","na jednej strane","na druhej strane","s týmto cieľom"]),r=function(n){let e=n;return n.forEach((o=>{(o=o.split("-")).length>0&&o.filter((e=>!n.includes(e))).length>0&&(e=e.concat(o))})),e}(["to","sa","je","si","som","a","na","že","Äo","nie","v","ako","tak","ale","by","s","mi","o","tu","do","ja","sme","ste","áno","z","len","ma","už","aby","dobre","ho","keÄ","ak","ty","ti","za","Å¥a","bol","pre","sú","tam","preÄo","nieÄo","toto","no","teraz","aj","hej","mám","byÅ¥","ich","bude","ju","takže","ten","vÅ¡etko","tom","niÄ","vás","kde","kto","k","po","bolo","bola","eÅ¡te","vám","toho","alebo","jej","má","môj","jeho","máš","viem","vieÅ¡","mňa","tým","veľmi","mal","prosím","potom","nikdy","možno","od","nás","ani","so","povedal","chcem","neviem","mu","Äakujem","ísÅ¥","vy","naozaj","stále","teba","pretože","viac","chceÅ¡","oh","nám","ahoj","on","pred","máme","moja","musím","tie","vo","sem","môžem","dnes","budem","ktorý","niekto","práve","pane","mali","pán","poÄme","vÅ¡etci","pozri","myslíš","Äi","maÅ¥","nemôžem","asi","ktoré","keby","veľa","vždy","tiež","moje","poÄ","mala","stalo","trochu","my","ľudia","tomu","pri","deň","máte","tú","musíme","iba","tvoj","tento","tá","jeden","bez","chcel","mohol","veci","zo","robiÅ¥","ide","dobrý","budeÅ¡","ok","mnou","môže","viete","kým","mne","až","presne","môžeÅ¡","dosÅ¥","vážne","preto","dobré","späť","vÅ¡etky","tebou","urobiÅ¥","deje","robíš","vedieÅ¥","prepáÄ","vÄaka","vÅ¡ak","musíš","povedala","ona","budeme","nikto","kvôli","lebo","teda","vec","nech","hneÄ","im","každý","svoje","než","kedy","tvoja","prepáÄte","nechcem","rokov","choÄ","povedz","potrebujem","daj","nemám","svoju","samozrejme","raz","chce","takto","také","mohli","preÄ","ním","nejaké","idem","spolu","vlastne","problém","musí","žiadne","chcete","vôbec","lepÅ¡ie","vidieÅ¥","môžeme","urobil","tvoje","tebe","dostaÅ¥","priÅ¡iel","hovoriÅ¥","vyzerá","ktorá","dlho","kam","niekedy","von","príliÅ¡","nich","sám","celý","úplne","tej","urÄite","nuž","môžete","pod","fajn","váš","seba","aký","nebude","cez","niekoho","u","vÅ¡etkých","aké","majú","mojej","tých","rýchlo","taký","istý","znamená","môjho","tieto","koľko","predtým","medzi","daÅ¥","tejto","Äom","chcela","neho","ideme","budú","dva","tri","nebol","nejaký","svoj","podľa","mohla","nájsÅ¥","pani","vaÅ¡e","budete","ľúto","pozrite","zajtra","moju","hovorí","ktorú","túto","hore","dostal","super","Äalej","naÅ¡e","vedel","tomto","náš","chvíľu","dal","proste","vie","okej","jedno","pohode","dole","aspoň","vaÅ¡a","nej","táto","jedna","i","oni","robí","poviem","nemôžeÅ¡","dve","ku","skôr","ktorí","radÅ¡ej","zlé","páÄi","nami","dúfam","skoro","Äože","ňou","nemá","proti","nemal","neskôr","jednu","iné","odtiaľto","nad","hovoril","prvý","vami","svojho","musíte","zdá","skvelé","dobrá","znova","koho","och","minút","sebe","nebolo","musieÅ¥","nebudem","okolo","dvaja","príde","nemôže","veľký","vidíš","priÅ¡li","tohto","ideÅ¡","tvoju","uvidíme","celé","sama","haló","Äokoľvek","nemáš","musel","jedného","vrátiÅ¥","buÄ","potrebujeme","taká","nebola","vonku","spraviÅ¥","priÅ¡la","moc","pokiaľ","skutoÄne","žiadny","svojej","dám","malý","pekne","co","ňu","odísÅ¥","nechaÅ¥","inak","prísÅ¥","zatiaľ","vtedy","najlepÅ¡ie","sebou","celú","možné","povedali","iste","znovu","dajte","páni","predsa","dobrú","Äím","istá","ach","dokonca","videli","žiÅ¥","poÄte","niekde","Äalší","iný","spôsob","nemáme","toľko","ňom","nemôžeme","nový","spravil","robíte","zle","tvojej","naÅ¡a","akoby","robím","pekné","pôjdem","cestu","zase","hodín","nimi","oci","oÄi","dá","okrem","chápem","pripravený","chceli","koneÄne","aká","ano","mojom","mojich","veľké","priamo","poÄas","nechceÅ¡","jediný","týchto","rozumiem","zdravím","môžu","urobila","mohlo","nové","robil","chcú","jednoducho","choÄte","prípad","mimo","nepovedal","isté","neskoro","povedzte","tvojho","dostali","pravdepodobne","vaÅ¡u","vecí","svojich","nechcel","ÄalÅ¡ie","ze","nejakú","týmto","vziaÅ¥","dni","jo","päť","nevieÅ¡","odkiaľ","malé","mrzí","naÅ¡ej","Äaleko","úžasné","nemohol","nevidel","okay","obaja","vÅ¡etkým","dvoch","nemali","žiadna","dní","dr.","nemala","potrebovaÅ¥","zostaÅ¥","ktorého","sam","rovnako","rokmi","malo","vyzeráš","potrebujeÅ¡","strane","dňa","jediná","oveľa","urobím","ó","zastaviÅ¥","vaÅ¡ej","nikoho","najprv","nevedel","najlepší","naÅ¡ich","takmer","Äau","dostala","ktorých","zaÄal","nemusíš","opäť","urobili","ktorej","aha","staÄí","iÅ¡iel","zlý","Äase","chceme","zaÄaÅ¥","moji","niekoľko","nevie","povieÅ¡","naÅ¡u","nemôžete","naspäť","pôjdeme","Å¡tyri","poznáš","sveta","robia","chlape","rozprávaÅ¥","spaÅ¥","pekný","veľká","nemáte","nechce","nakoniec","ono","mysli","vÅ¡ade","vzal","blízko","chcieÅ¥","nášho","akú","vášho","naposledy","vidíte","Å¡iel","odkedy","neboli","vedeli","možnosÅ¥","ah","staÅ¥","každého","vnútri","hodinu","prvé","vrátim","menej","nehovor","nebudeÅ¡","ÄakaÅ¥","urob","žiaden","um","odtiaľ","malá","musela","nejako","okamžite","mojou","poslal","prvá","záleží","iného","ne","ha","skvelý","Äoho","Å¡","new","šťastie","jedlo","zmysel","Äoskoro","snažím","nechajte","you","treba","hodiny","ocko","dala","yeah","nechal","zomrel","pracovaÅ¥","madam","priatelia","ÄasÅ¥","ruku","poÄuÅ¥","telefón","krv","zem","chyba","mesta","správy","práci","charlie","láska","mesto","jack","strach","volám","Å¡koly","kamoÅ¡","naÅ¡la","neboj","tvár","poÄula","syna","zavolaÅ¥","zemi","rodinu","pamätáš","polícia","roku","odiÅ¡iel","párty","verím","nerob","skutoÄnosti","meste","zbrane","dali","auta","cesty","uveriÅ¥","zistiÅ¥","chlapÄe","dcéra","pána","tou","zavolám","dievÄatá","volal","vypadni","myslieÅ¥","šťastný","radi","chlapík","hovorila","tím","hlavy","nejde","cesta","jasne","peňazí","muži","vrátil","Å¡kole","pol","hovoríte","veÄeru","sex","miesta","druhý","odo","snažil","michael","sľubujem","hovoria","šéf","žije","zachrániÅ¥","Å¡esÅ¥","nikomu","rovno","dostane","dolu","musia","výborne","posledný","vezmi","posledné","jediné","náhodou","každú","dávno","zaÄína","jednej","nevadí","napríklad","svojom","mesiac","dostanem","zobraÅ¥","tvojom","zabudol","môcÅ¥","Äasto","existuje","dostaneme","povie","celá","druhej","mimochodom","žiadnu","pôjde","nejaká","snáÄ","nechcela","mesiacov","ostatní","navždy","desaÅ¥","museli","urobíme","horÅ¡ie","keÄže","sami","najskôr","robíme","vÅ¡etkom","pozrime","hovorili","tvojich","vezmem","zober","nedá","troÅ¡ku","chvíľku","ktorým","nemu","mojím","lepší","dáš","sto","dvadsaÅ¥","devätnásÅ¥","osemnásÅ¥","sedemnásÅ¥","Å¡estnásÅ¥","dvakrát","pätnásÅ¥","Å¡trnásÅ¥","trinásty","trinásÅ¥","dvanásty","dvanásÅ¥","jedenásty","jedenásÅ¥","desiaty","deviaty","deväť","ôsmy","osem","siedmy","sedem","Å¡iesty","piaty","Å¡tvrtý","tretí","tí","tými","mojim","môjmu","mojimi","nim","ony","akonáhle","kedže","hoci","lenže","nakoľko","pokým","tobôž","Äiže","vedľa","napriek","nadol","oproti","plus","nahor","dvojslovné","namiesto","trojslovné","navyÅ¡e","tamto","vÄera","nedávno","ihneÄ","kdekoľvek","nikde","celkom","tvrdo","pomaly","opatrne","Å¥ažko","sotva","väÄÅ¡inou","absolútne","spoloÄne","osamote","zvyÄajne","príležitostne","zriedka","tisíc","milión"].concat(t)),s=[["buÄ, buÄ"],["buÄ, alebo"],["ani, ani"],["aj, aj"],["tak, ako"],["nielenže, lež aj"],["nielen, lež aj"],["nielen, lež i"],["nielenže, lež ai"],["Äi, alebo"],["i, i"],["nielen, ale i"],["síce, ale"]],d=["nejaký","nejaká","nejaké","jeden","jedna","jediný","dva","dvaja","dve","tri","trojka","traja","Å¡tyri ","Å¡tvoro","Å¡tyria","päť","pät","Å¡esÅ¥","sedem","osem","deväť","desaÅ¥","sto","tisíc","ten","tá","to","tento","táto","toto","tamten","tamtá","tamto","tí","tie","tieto","toho","tej","tomu","tú","tom","tým","tou","tých","tými","títo","tamtí","tamtie","tamtoho","tomuto","tohto"],{getWords:v}=o.languageProcessing,l=["letá","skriptá","dvojitá","autá","kráľovná","princezná","príbuzná","premenná","trstená","zelená","ošípaná","lesná","vyvolená","dobÅ¡iná","hádzaná","gazdiná","Å¡rotovná","Å¡vagriná","výborná","závereÄná","recepÄná","koneÄná","dotyÄná","Äerná","jediný","posledný","ostatný","neposledný","predposledný","Å¡tvrtý","dvojitý","postihnutý","svätý","zlotý","dôležitý","istý","urÄitý","svätý","bohatý","Äistý","zlatý","Äastý","postihnutý","zložitý","okolitý","žltý","dohodnutý","skrytý","hustý","okamžitý","zvyknutý","krutý","zahrnutý","vzniknutý","vyvinutý","dotknutý","rozhodnutý","rozmanitý","rozvinutý","pokrytý","krytý","opitý","tekutý","spätý","neistý","prostý","nepretržitý","osobitý","prevzatý","jedovatý","zapnutý","ukradnutý","mletý","ženatý","sprostý","trávnatý","uhliÄitý","maloletý","nevyužitý","prežitý","skalnatý","ponúknutý","rozbehnutý","vydatý","náležitý","napätý","pustý","prenajatý","zvládnutý","vypnutý","pracovitý","zasiahnutý","neurÄitý","piesoÄnatý","Å¡itý","šťavnatý","zamrznutý","posadnutý","posunutý","urcitý","listnatý","guľatý","neÄistý","dutý","ihliÄnatý","chlpatý","nápaditý","zaujatý","nedotknutý","Älenitý","presunutý","menovitý","hranatý","odobratý","zamknutý","zdvihnutý","natiahnutý","rovinatý","zabehnutý","novovzniknutý","potiahnutý","odtrhnutý","hornatý","zamietnutý","vyzretý","opretý","kamenistý","kľukatý","svalnatý","zarytý","prehratý","zajatý","rozpaÄitý","pohnutý","rozkvitnutý","stojatý","húževnatý","zlatistý","opuchnutý","hmlistý","prekrytý","vychudnutý","napnutý","plnoletý","odumretý","oÄitý","dojatý","strapatý","korenistý","stuhnutý","ostnatý","neplnoletý","odetý","zákonitý","vyňatý","vyschnutý","obutý","ohnutý","vlnitý","nafúknutý","zapadnutý","vystretý","mäsitý","svedomitý","spadnutý","vytiahnutý","Å¡picatý","znamenitý","nepoužitý","ostražitý","tretý","nekrytý","uzamknutý","tienistý","zovretý","nultý","tlstý","rázovitý","ľudnatý","pospolitý","hlasitý","vychladnutý","rozpadnutý","odňatý","pritiahnutý","nedožitý","klenutý","pretiahnutý","podlhovastý","dvojitý","zaÅ¥atý","podnapitý","prasknutý","prikrytý","padnutý","vypätý","podÄiarknutý","roztiahnutý","svatý","mrzutý","kopcovitý","svahovitý","guľovitý","zásaditý","bradatý","zmrznutý","zubatý","pomletý","zaniknutý","zažitý","piesÄitý","zahnutý","nasiaknutý","zhnitý","iný","posledný","jediný","vlastný","hlavný","pekný","povinný","urÄený","vhodný","schopný","plný","samotný","silný","pripravený","voľný","podobný","spokojný","pracovný","súÄasný","presvedÄený","uvedený","medzinárodný","osobný","spoloÄný","daný","národný","základný","úspeÅ¡ný","potrebný","neregistrovaný","rodinný","kvalitný","finanÄný","zodpovedný","šťastný","skutoÄný","pôvodný","dneÅ¡ný","otvorený","zameraný","príjemný","roÄný","bežný","životný","výborný","možný","stavebný","ochotný","významný","zdravotný","vnútorný","obyÄajný","hudobný","duchovný","presný","jasný","verejný","vybavený","prísluÅ¡ný","priemerný","Äervený","výrazný","samostatný","spojený","odborný","výkonný","trestný","umiestnený","moderný","schválený","obchodný","cestovný","informaÄný","spomínaný","vytvorený","nádherný","dostatoÄný","oprávnený","mobilný","zelený","nároÄný","úžasný","obľúbený","jedineÄný","prirodzený","prítomný","obecný","sluÅ¡ný","kompletný","prekvapený","dostupný","operaÄný","pevný","veÄný","dolný","zvýšený","výnimoÄný","krvný","stanovený","súkromný","koneÄný","vianoÄný","vážený","ústavný","úplný","obmedzený","považovaný","skúsený","platný","slobodný","vyrobený","tradiÄný","nebezpeÄný","verný","vodný","vÅ¡eobecný","smutný","dopravný","letný","mesaÄný","prírodný","drevený","osobitný","komplexný","noÄný","vzdialený","denný","farebný","okresný","Å¡tudijný","úÄinný","volebný","policajný","používaný","jemný","závereÄný","sklamaný","unavený","menovaný","pokojný","zaradený","rozšírený","poÅ¡kodený","odliÅ¡ný","pravidelný","poverený","rozdelený","bezpeÄný","územný","zahraniÄný","slneÄný","nepríjemný","horný","jednotný","zásadný","inteligentný","opaÄný","zimný","dotyÄný","vÄaÄný","víťazný","struÄný","každodenný","slávnostný","podrobný","imunitný","stredný","znaÄný","akÄný","Å¡ikovný","prístupný","výsledný","funkÄný","tohtoroÄný","nevyhnutný","orientovaný","ostatný","nadÅ¡ený","bezpeÄnostný","studený","Å¡tandardný","zverejnený","situovaný","plánovaný","ochranný","podstatný","dlhoroÄný","perfektný","cirkevný","takzvaný","zložený","nevhodný","úprimný","stolný","stabilný","požadovaný","Äestný","anonymný","lacný","reklamný","úvodný","kontrolný","nasledovný","výrobný","zábavný","viditeľný","divadelný","písomný","predpokladaný","medziroÄný","lesný","odolný","registrovaný","prípadný","nešťastný","jednoznaÄný","spôsobený","chudobný","udržateľný","luxusný","zadný","rozumný","taneÄný","organizaÄný","drobný","zranený","zasvätený","rovný","užitoÄný","investiÄný","milovaný","hodný","hladný","bezplatný","pripojený","nekoneÄný","zemný","elegantný","pomocný","zbytoÄný","priemyselný","pohodlný","obvodný","mocný","pitný","obleÄený","neobmedzený","strávený","plnohodnotný","rodný","vzájomný","prípravný","zaznamenaný","kamenný","kompaktný","vstupný","zabudovaný","peňažný","skromný","mohutný","externý","výskumný","ohrozený","predný","reprezentaÄný","primeraný","herný","výhodný","straÅ¡ný","ný","poloviÄný","nezabudnuteľný","invalidný","narodený","cenný","následný","opatrný","ocenený","ústredný","sprievodný","svadobný","prepracovaný","neuveriteľný","zákonný","variabilný","využívaný","zariadený","napojený","strieborný","nazvaný","tajný","komunikaÄný","novotný","západný","zachovaný","nenávratný","vzdelaný","kladný","poistený","dobrovoľný","ucelený","oznaÄovaný","komerÄný","vydarený","doÄasný","prihlásený","hrozný","vtipný","chladný","kontaktný","komplikovaný","znížený","záväzný","jarný","veÄerný","odvodený","pohlavný","obklopený","zamestnaný","dôstojný","odkázaný","lieÄebný","netradiÄný","celodenný","naivný","riadený","severný","faloÅ¡ný","náhodný","južný","prechodný","talentovaný","závažný","dvojnásobný","jubilejný","nominovaný","nedostatoÄný","telekomunikaÄný","nainÅ¡talovaný","použiteľný","dodávaný","súťažný","prispôsobený","pripravovaný","nespokojný","získaný","tajomný","financovaný","ponúkaný","výtvarný","svetelný","zmenený","položený","vykonaný","zmluvný","vyvážený","vysvätený","potvrdený","sprevádzaný","limitovaný","služobný","postupný","podporený","registraÄný","vrchný","nezamestnaný","obytný","zostavený","vyplnený","príbuzný","prezentovaný","duÅ¡evný","podaný","nevinný","tepelný","priestranný","ľahostajný","pridelený","náuÄný","zaruÄený","pozoruhodný","rekordný","zaslaný","nahnevaný","platený","ľubovoľný","platobný","navrhovaný","volený","ozajstný","podporovaný","úradný","pozorný","záruÄný","predÄasný","týždenný","prepojený","nutný","popredný","vymenovaný","pilotný","požehnaný","kombinovaný","redakÄný","zubný","telesný","minuloroÄný","ranný","temný","realitný","vyrieÅ¡ený","neschopný","zázraÄný","revoluÄný","interný","parný","boÄný","zbavený","cestný","Äudný","urobený","Å¡ialený","animovaný","veľkonoÄný","nudný","predbežný","oslobodený","divný","hraniÄný","prenosný","kvalifikovaný","prvotný","motivaÄný","obžalovaný","záhradný","odovzdaný","podmienený","východný","dominantný","spätný","nákladný","nenápadný","jesenný","výchovný","predmetný","detailný","drsný","Å¡pecializovaný","obranný","prehľadný","vyhradený","pyÅ¡ný","spustený","podpivniÄený","osadený","neÄakaný","porovnateľný","prepustený","nadriadený","povolaný","ovocný","výmenný","vyÄerpaný","obnovený","písaný","overený","konkurenÄný","kompatibilný","neúspeÅ¡ný","starobný","konverzný","záchranný","totožný","zastúpený","kompetentný","spodný","obohatený","chutný","firemný","relevantný","navigaÄný","uvoľnený","nasadený","vyjadrený","ÄiastoÄný","pamätný","posvätný","uznaný","pomenovaný","oÄný","kontroverzný","flexibilný","vÅ¡estranný","neskutoÄný","zapojený","kladený","spotrebný","oddelený","nákupný","prijateľný","vyvolený","vinný","vyrábaný","nájdený","rekreaÄný","chybný","nemenovaný","tuÄný","neviditeľný","poradný","skalný","celoveÄerný","naladený","zateplený","hmotný","colný","zamilovaný","polyfunkÄný","knižný","podriadený","hraný","vymedzený","nastaviteľný","nedeľný","priložený","odstránený","uzatvorený","renesanÄný","pružný","regulaÄný","poháňaný","vstavaný","hodnotný","splnený","vzduÅ¡ný","putovný","zatvorený","porazený","vytúžený","skrátený","stíhaný","knižniÄný","realizaÄný","zmieÅ¡aný","pokrstený","aplikovaný","motivovaný","testovaný","vnímaný","milosrdný","úsporný","vítaný","Äarovný","zaslúžený","nezvyÄajný","pokorný","neopakovateľný","protimonopolný","uÄebný","odhodlaný","nádejný","povestný","železniÄný","podporný","obsadený","zmätený","výstižný","oboznámený","skúšobný","nadmerný","ozbrojený","rodený","Äitateľný","opoziÄný","železný","orientaÄný","zavraždený","zhodný","kvalifikaÄný","ukrižovaný","autorizovaný","ladený","odporúÄaný","oddaný","ohromný","znechutený","Å¡okovaný","predajný","nenároÄný","smrteľný","Äinný","uväznený","objavený","sledovaný","nosný","vecný","arogantný","hradný","zdatný","vymyslený","ohraniÄený","poÄiatoÄný","zanedbateľný","radostný","zrozumiteľný","hybridný","usporiadaný","multifunkÄný","univerzitný","palubný","naklonený","zadaný","predposledný","naruÅ¡ený","naozajstný","spasený","udržiavaný","zabalený","komorný","spáchaný","stabilizaÄný","záhadný","osamotený","stavaný","dobrodružný","nakrútený","izolovaný","zaÅ¥ažený","žiadaný","reklamaÄný","sviatoÄný","premyslený","vyhotovený","bezprostredný","údajný","korektný","dvojroÄný","krstný","obdobný","vyvolaný","nezmenený","koncipovaný","dodatoÄný","opísaný","žitný","odoslaný","zachytený","vÅ¡edný","evidovaný","jazdný","Äerný","vylepÅ¡ený","zaplatený","poruÅ¡ený","nevÅ¡edný","odporný","prospeÅ¡ný","opakovaný","trojroÄný","prenesený","slovný","prerobený","charakterizovaný","zaÄarovaný","sobotný","oplotený","transparentný","uskutoÄnený","certifikovaný","nekompromisný","hromadný","murovaný","toaletný","varovný","diaľniÄný","zavesený","neplatný","hnusný","zlomený","pokazený","opravný","kúpeľný","nejasný","zaľúbený","akceptovaný","servisný","sústredený","kožený","výstavný","nápomocný","bezmocný","mravný","zaskoÄený","kľudný","enormný","predaný","rastlinný","nepatrný","odhalený","spisovný","preplnený","oslabený","žalovaný","útoÄný","nadaný","smädný","voliteľný","satelitný","úÄtovný","záložný","bruÅ¡ný","predvolebný","pravdepodobný","benefiÄný","relaxaÄný","nižný","diskusný","vyslaný","komfortný","povýšený","zaužívaný","renomovaný","zaistený","vzkriesený","výstupný","posluÅ¡ný","nežný","osobnostný","hľadaný","predurÄený","nezmyselný","predvedený","poistný","upozornený","poľný","úložný","referenÄný","robustný","nenahraditeľný","zhubný","bezchybný","dvojpodlažný","vyÅ¡ný","nájomný","predkladaný","neÅ¡kodný","celoroÄný","stabilizovaný","nefunkÄný","záporný","súhrnný","opätovný","vzneÅ¡ený","zasadený","celoživotný","tolerantný","statoÄný","zmysluplný","sprístupnený","odmenený","textilný","zhotovený","streÅ¡ný","konÅ¡tantný","priznaný","vyradený","bojovný","vyvíjaný","zakopaný","permanentný","nevídaný","koaliÄný","odložený","teplotný","priebežný","rovnocenný","pripútaný","uvádzaný","obrátený","zreteľný","adresovaný","vymastený","kultivovaný","dlžný","vytlaÄený","blahoslavený","zverený","umožnený","percentný","prenasledovaný","zjavný","pozáruÄný","zaneprázdnený","chápaný","ubytovaný","nerozhodný","neautorizovaný","prerokovaný","vypredaný","vyzvaný","približný","nemožný","operný","zjednoduÅ¡ený","prezývaný","vyznaÄený","zvyÅ¡ný","recyklaÄný","komunitný","trojnásobný","excelentný","zablokovaný","koncentrovaný","stlaÄený","jednosmerný","posilnený","jednostranný","neobyÄajný","vymenený","totalitný","kúpený","garantovaný","zadržaný","neprijateľný","zrealizovaný","želaný","dôsledný","rýchlostný","robený","ruÄný","využiteľný","zachránený","neruÅ¡ený","parlamentný","dediÄný","predávaný","vysnívaný","vysielaný","rekonÅ¡truovaný","útulný","doživotný","ropný","propagaÄný","pouÄený","mastný","koncertný","aktivovaný","zberný","preruÅ¡ený","otoÄený","civilný","Å¡etrný"],{values:p}=o.languageProcessing,{Clause:u}=p,{getClausesSplitOnStopWords:m,createRegexFromArray:k}=o.languageProcessing,c={Clause:class extends u{constructor(n,e){super(n,e),this._participles=function(n){const e=v(n),o=new RegExp("(ný|ní|tý|ná|tá|né|té)$");return e.filter((n=>o.test(n)))}(this.getClauseText()),this.checkParticiples()}checkParticiples(){const n=this.getParticiples().filter((n=>!l.includes(n)));this.setPassive(n.length>0)}},regexes:{auxiliaryRegex:k(["byÅ¥","som","si","je","sme","ste","sú","bol","bola","boli","bolo","budem","budeÅ¡","bude","budeme","budete","budú"]),stopCharacterRegex:/([:,])(?=[ \n\r\t'"+\-»«‹›<>])/gi,stopwordRegex:k(a)}};function h(n){return m(n,c)}const z=window.lodash;function b(n,e){const o=e.externalStemmer.palatalEndingsRegexes.find((e=>new RegExp(e[0]).test(n)));return o?n.replace(new RegExp(o[0]),o[1]):n.slice(0,-1)}const j=function(n,e){for(const o of e)if(o[1].includes(n))return o[0];return null},f=function(n,e){for(const o of e)if(o.includes(n))return o[0];return null};const{baseStemmer:y}=o.languageProcessing;function g(n){const e=(0,z.get)(n.getData("morphology"),"sk",!1);return e?n=>function(n,e){const o=j(n,e.exceptionLists.exceptionStemsWithFullForms);return o||(n=function(n,e){const o=e.externalStemmer.caseSuffixes,a=e.externalStemmer.caseRegexes;if(n.length>7&&n.endsWith(o.caseSuffix1))return n.slice(0,-5);if(n.length>6&&n.endsWith(o.caseSuffix2))return b(n.slice(0,-3),e);if(n.length>5){if(o.caseSuffixes3.includes(n.slice(-3)))return b(n.slice(0,-2),e);if(o.caseSuffixes4.includes(n.slice(-3)))return n.slice(0,-3)}if(n.length>4){if(n.endsWith(o.caseSuffix5))return b(n.slice(0,-1),e);if(o.caseSuffixes6.includes(n.slice(-2)))return b(n.slice(0,-2),e);if(o.caseSuffixes7.includes(n.slice(-2)))return n.slice(0,-2)}if(n.length>3){if(new RegExp(a.caseRegex1).test(n))return b(n,e);if(new RegExp(a.caseRegex2).test(n))return n.slice(0,-1)}return n}(n,e),n=function(n,e){const o=e.externalStemmer.possessiveSuffixes;if(n.length>5){if(n.endsWith(o.posSuffixOv))return n.slice(0,-2);if(n.endsWith(o.posSuffixIn))return b(n.slice(0,-1),e)}return n}(n,e),n=function(n,e){const o=e.externalStemmer.superlativePrefix;return n.length>6&&n.startsWith(o)&&(n=n.slice(3,n.length)),n.length>5&&e.externalStemmer.comparativeSuffixes.includes(n.slice(-3))&&(n=b(n.slice(0,-2),e)),n}(n,e),n=function(n,e){const o=e.externalStemmer.diminutiveSuffixes;if(n.length>7&&n.endsWith(o.diminutiveSuffix1))return n.slice(0,-5);if(n.length>6){if(o.diminutiveSuffixes2.includes(n.slice(-4)))return b(n.slice(0,-3),e);if(o.diminutiveSuffixes3.includes(n.slice(-4)))return b(n.slice(0,-4),e)}if(n.length>5){if(o.diminutiveSuffixes4.includes(n.slice(-3)))return b(n.slice(0,-3),e);if(o.diminutiveSuffixes5.includes(n.slice(-3)))return n.slice(0,-3)}if(n.length>4){if(o.diminutiveSuffixes6.includes(n.slice(-2)))return b(n.slice(0,-1),e);if(o.diminutiveSuffixes7.includes(n.slice(-2)))return n.slice(0,-1)}return n.length>3&&n.endsWith("k")&&!n.endsWith("isk")?n.slice(0,-1):n}(n,e),n=function(n,e){const o=e.externalStemmer.augmentativeSuffixes;return n.length>6&&n.endsWith(o.augmentativeSuffix1)?n.slice(0,-4):n.length>5&&o.augmentativeSuffixes2.includes(n.slice(-3))?b(n.slice(0,-2),e):n}(n,e),n=function(n,e){const o=e.externalStemmer.derivationalSuffixes;if(n.length>8&&n.endsWith(o.derivationalSuffix1))return n.slice(0,-6);if(n.length>7){if(n.endsWith(o.derivationalSuffix2))return b(n.slice(0,-4),e);if(o.derivationalSuffixes3.includes(n.slice(-5)))return n.slice(0,-5)}if(n.length>6){if(o.derivationalSuffixes4.includes(n.slice(-4)))return n.slice(0,-4);if(o.derivationalSuffixes5.includes(n.slice(-4)))return b(n.slice(0,-3),e)}if(n.length>5){if(n.endsWith(o.derivationalSuffix6))return n.slice(0,-3);if(o.derivationalSuffixes7.includes(n.slice(-3)))return b(n.slice(0,-2),e);if(o.derivationalSuffixes8.includes(n.slice(-3)))return n.slice(0,-3)}if(n.length>4){if(o.derivationalSuffixes9.includes(n.slice(-2)))return n.slice(0,-2);if(o.derivationalSuffixes10.includes(n.slice(-2)))return b(n.slice(0,-1),e)}const a=new RegExp(e.externalStemmer.derivationalRegex);return n.length>3&&a.test(n)?n.slice(0,-1):n}(n,e),f(n,e.exceptionLists.stemsThatBelongToOneWord)||n)}(n,e):y}const{AbstractResearcher:x}=o.languageProcessing;class S extends x{constructor(n){super(n),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"sk",passiveConstructionType:"periphrastic",stopWords:a,functionWords:r,transitionWords:i,twoPartTransitionWords:s,firstWordExceptions:d}),Object.assign(this.helpers,{getClauses:h,getStemmer:g})}}(window.yoast=window.yoast||{}).Researcher=e})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/languages/sv.js b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/sv.js new file mode 100644 index 00000000..4304b299 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/languages/sv.js @@ -0,0 +1 @@ +(()=>{"use strict";var s={d:(a,e)=>{for(var t in e)s.o(e,t)&&!s.o(a,t)&&Object.defineProperty(a,t,{enumerable:!0,get:e[t]})},o:(s,a)=>Object.prototype.hasOwnProperty.call(s,a),r:s=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(s,"__esModule",{value:!0})}},a={};s.r(a),s.d(a,{default:()=>$});const e=window.yoast.analysis,t=["ett","det","den","de","en","tvÃ¥","tre","fyra","fem","sex","sju","Ã¥tta","nio","tio","denne","denna","detta","dessa"],r=["alltsÃ¥","ändÃ¥","annars","ännu","även","avslutningsvis","bl.a.","d.v.s.","dÃ¥","därav","därefter","däremot","därför","därmed","därpÃ¥","dessutom","dock","efterÃ¥t","eftersom","emellertid","enligt","exempelvis","fastän","följaktligen","förrän","först","förutom","huvudsakligen","ifall","inledningsvis","innan","jämförelsevis","likadant","likasÃ¥","liksom","medan","men","nämligen","när","oavsett","ocksÃ¥","omvänt","säkerligen","sÃ¥ledes","sÃ¥lunda","sammanfattningsvis","sammantaget","samt","samtidigt","särskilt","sÃ¥som","sist","slutligen","speciellt","t.ex.","tidigare","tillika","tills","trots","tvärtemot","tvärtom","tydligen","varpÃ¥","vidare","uppenbarligen","ytterligare"],d=r.concat(["Ã¥ andra sidan","Ã¥ ena sidan","allt som allt","anledningen är","anledningen blir","annorlunda än","av den orsaken","av detta skäl","beroende pÃ¥","bland annat","därtill kommer","det beror pÃ¥ att","det vill säga","det visar","detta beror pÃ¥","detta gÃ¥r ut pÃ¥ att","detta innebär att","detta leder till","detta medför att","effekten blir","efter ett tag","ej heller","en effekt av detta","en förklaring till detta","ett exempel pÃ¥ detta","ett liknande exempel","exakt som","följden blir","för att avrunda","för all del","för att förklara","för att inte säga","för att inte tala om","för att klargöra","för att poängtera","för att säga det pÃ¥ ett annat sätt","för att sammanfatta","för att understryka","för att visa","för det andra","för det första","för det tredje","förr eller senare","för närvarande","framför allt","fram till nu","har att göra med","härav följer","i bÃ¥da fallen","i det fallet","i det hela","i det här fallet","i det lÃ¥nga loppet","i enlighet med","i förhÃ¥llande till","i frÃ¥ga om","i jämförelse med","i kontrast till","i likhet med","i ljuset av","i motsats till","i och med","i relation till","i samband med","i sin tur","i själva verket","i slutändan","i stället för","i syfte att","i synnerhet","i verkligheten","icke desto mindre","ihop med","inte desto mindre","jämfört med","kan sammanfattas","kort sagt","konsekvensen av detta","lika viktigt är","mÃ¥let är att","med andra ord","med anledning av","med det i Ã¥tanke","med det i tankarna","med ett ord","med hänsyn till","med härledning av","mot bakgrund av","mot den bakgrunden","när allt kommer omkring","när det gäller","närmare bestämt","nu när","orsaken är","pÃ¥ det sättet","pÃ¥ grund av","pÃ¥ liknande sätt","pÃ¥ sÃ¥ sätt","pÃ¥ samma sätt","resultatet blir","sÃ¥ länge som","sÃ¥ smÃ¥ningom","sÃ¥ snart som","sist men inte minst","slutsatsen blir","som antytt","som en följd av","som en konsekvens av","som ett exempel pÃ¥","som ett resultat","som jag tidigare antytt","som konklusion kan","som man kan se","som nämnt","som tidigare nämnts","summa summarum","tack vare","till att börja med","till dess","till exempel","till en början","till följd av","till sist","till skillnad frÃ¥n","till slut","till största delen","tillsammans med","tvärt om","under de omständigheterna","under omständigheterna","under tiden","vad mera är","viktigt att inse","vilket innebär"]);function l(s){let a=s;return s.forEach((e=>{(e=e.split("-")).length>0&&e.filter((a=>!s.includes(a))).length>0&&(a=a.concat(e))})),a}const n=["en","ett","det","den","de"],i=["tvÃ¥","tre","fyra","fem","sex","sju","Ã¥tta","nio","tio","tiotals","elva","tolv","tretton","fjorton","femton","sexton","sjutton","arton","aderton","nitton","tjugo","hundra","hundratals","tusen","tusentals","miljon","miljoner","miljontals","miljard","miljarder"],k=["första","andra","tredje","fjärde","femte","sjätte","sjunde","Ã¥ttonde","nionde","tionde","elfte","tolfte","trettonde","fjortonde","femtonde","sextonde","sjuttonde","artonde","nittonde","tjugonde"],o=["jag","du","han","hon","hen","vi","ni"],g=["mig","dig","honom","henne","oss","er","dem","henom","eder"],m=["sig","sin","sitt","sina"],f=["min","mitt","mina","din","ditt","dina","hans","hennes","dess","ens","vÃ¥r","vÃ¥rt","vÃ¥ra","er","ert","era","ers","deras","hens"],p=["denne","denna","detta","dessa","här","där","varifrÃ¥n","därav","hit","dit","vart","hädan","dädan","vadan","hän","sen"],v=["som","vilken","vilket","vilka","vars","dÃ¥"],u=["vem","vems","vad"],b=["hur","varför"],h=["nÃ¥gon","nÃ¥got","nÃ¥gra","nÃ¥n","nÃ¥t","ingen","inget","inga","annan","annat","andra","nÃ¥gonstans","ingenstans","annastans","överallt","nÃ¥gonstädes","ingenstädes","annorstädes","allestädes","nÃ¥gorlunda","ingalunda","annorlunda","nÃ¥gonting","ingenting","allting","all","allt","alla","somlig","somligt","somliga","mÃ¥ngen","mÃ¥nget","man","en","ens"],c=["varandra","varsin","varsitt","envar","varannan","vartannat"],y=["andra","Ã¥tskilliga","bÃ¥dadera","bÃ¥de","fÃ¥","fÃ¥rre","fÃ¥talig","fÃ¥taliga","flera","flesta","föga","ganska","icke","inte","lite","litet","mÃ¥nga","mer","mera","mest","mindre","minst","mycket","nog","ollika","tillräckligt","vardera","varje","viss","visst","vissa","visse"],j=["bakÃ¥t","bakifrÃ¥n","bortifrÃ¥n","därÃ¥t","därav","därhän","däri","därifrÃ¥n","därom","därpÃ¥","därtill","däruti","därvid","ditÃ¥t","dithän","dittills","efterÃ¥t","förrut","framÃ¥t","hädenefter","härÃ¥t","härav","härefter","häremot","häri","härifrÃ¥n","härmed","härom","härpÃ¥","härtill","häruti","härvid","hitÃ¥t","hittills","ini","inifrÃ¥n","intill","inuti","nedanför","nedÃ¥t","nedför","nedtill","uppÃ¥t","uppför","upptill","varav","varefter","varemot","varför","varfrÃ¥n","vari","varifrÃ¥n","varmed","varom","varpÃ¥","varthän","vartill","varur","varvid"],x=["behövande","behöver","behövt","behövde","bör","börande","borde","bort","brukade","brukande","brukar","brukat","fÃ¥ende","fÃ¥r","fÃ¥tt","fick","hade","haft","har","hava","havande","kan","kunde","kunnande","kunnat","mÃ¥dde","mÃ¥ende","mÃ¥r","mÃ¥ste","mÃ¥tt","mÃ¥tte","skall","skulle","varande","velat","viljande","vill","ville"],w=["behöva","böra","bruka","fÃ¥","ha","kunna","mÃ¥","ska","vilja"],S=["är","var","varit","vore","blivit","blivande","blir","bliver","blev","blitt","funnits","finnande","finns","fanns","befunnit","befinnande","befinner","befann","tyckts","tyckande","tycks","tycktes"],R=["vara","bli","finnas","befinna","tyckas"],P=["gÃ¥ende","gällande","gällde","gäller","gällt","gÃ¥r","gÃ¥tt","gav","ger","gett","gick","givande","giver","gjorde","gjort","gör","görande","kom","kommande","kommer","kommit","ligger","ligges","lÃ¥","ligget","liggande","ställer","ställde","ställt","ställ","ställande","ställd","ställas","ställs","ställes","ställdes","ställts","tagande","tager","tagit","tar","tog","utgör","utgjorde","utgjort","utgörande","utgjord","utgöras","utgörs","utgöres","utgjordes","utgjorts"],z=["gÃ¥","gälla","ge","göra","komma","ligga","ställa","ta","utgöra"],E=["angav","anger","angett","angiver","angivit","berättade","berättar","berättat","föreslagit","föreslÃ¥r","föreslÃ¥tt","föreslog","förklarade","förklarar","förklarat","förstÃ¥r","förstÃ¥tt","förstod","frÃ¥gade","frÃ¥gar","frÃ¥gat","pÃ¥stÃ¥r","pÃ¥stÃ¥tt","pÃ¥stod","sa","sade","säger","sagt","svarade","svarar","svarat","talade","talar","talat","tänker","tänkt","tänkte"],O=["ange","berätta","föreslÃ¥","förklara","förstÃ¥","frÃ¥ga","pÃ¥stÃ¥","säga","svara","tala","tänka"],M=["äldre","äldst","äldsta","äldste","bäst","bättre","dÃ¥lig","dÃ¥liga","dÃ¥lige","dÃ¥ligt","egen","eget","egna","egne","enkel","enkelt","enkla","enklare","enklast","enklaste","enkle","fel","gamla","gamle","gammal","gammalt","god","goda","godare","godast","godaste","gode","gott","grundläggande","hel","hela","helare","helast","helaste","hele","helt","kort","korta","kortare","kortast","kortaste","korte","lÃ¥ng","lÃ¥nga","lÃ¥nge","längre","lÃ¥ngsam","lÃ¥ngsamma","lÃ¥ngsammare","lÃ¥ngsammast","lÃ¥ngsammaste","lÃ¥ngsamme","lÃ¥ngsamt","längst","längsta","längste","lÃ¥ngt","liknande","lilla","lille","liten","litet","mindre","minst","minsta","minste","möjlig","möjliga","möjligare","möjligast","möjligaste","möjlige","möjligt","nödvändig","nödvändiga","nödvändigare","nödvändigast","nödvändigaste","nödvändige","nödvändigt","normal","normala","normalare","normalast","normalaste","normale","normalt","ny","nya","nyare","nyast","nyaste","nye","nytt","olikt","olika","olike","samma","sämre","sämst","sämsta","sämste","särskild","särskilda","särskilde","särskilt","sen","sena","senare","senast","senaste","sene","sent","smÃ¥","snabb","snabba","snabbare","snabbast","snabbaste","snabbe","snabbt","stor","stora","store","större","störst","största","störste","stort","svÃ¥r","svÃ¥ra","svÃ¥rare","svÃ¥rast","svÃ¥raste","svÃ¥re","svÃ¥rt","tidig","tidiga","tidigare","tidigast","tidigaste","tidige","tidigt","trevlig","trevliga","trevligare","trevligast","trevligaste","trevlige","trevligt","ung","unga","unge","ungt","uppenbar","uppenbara","uppenbare","uppenbart","värre","värst","värsta","värste","verklig","viktig","viktiga","viktigare","viktigast","viktigaste","viktige","viktigt","yngre","yngst","yngsta","yngste"],W=["aldrig","allmänt","alltid","delvis","direkt","huvudsakligen","ibland","lÃ¥ngsamt","mestadels","nästan","ofta","relativt","riktigt","riktigare","riktigast","sällan","snabbt","ständigt","väl","vanligt"],q=["antal","antalet","antals","antalets","antalen","antalens","bit","bitar","bitarna","bitarnas","bitars","biten","bitens","bits","del","delar","delarna","delarnas","delars","delen","delens","dels","detalj","detaljen","detaljens","detaljer","detaljerna","detaljernas","detaljers","detaljs","exempel","exempels","exemplet","exemplets","exemplen","exemplens","person","personen","personens","personer","personerna","personernas","personers","persons","procent","punkt","punkten","punktens","punkter","punkterna","punkternas","punkters","sak","saken","sakens","saker","sakerna","sakernas","sakers","saks","sätt","sätten","sättens","sättet","sättets","sätts","skillnad","skillnaden","skillnadens","skillnader","skillnaderna","skillnadernas","skillnaders","skillnads","sort","sorten","sortens","sorter","sorterna","sorternas","sorters","sorts","tema","teman","temanas","temans","temas","temat","temats","tid","tiden","tidens","tider","tiderna","tidernas","tiders","tids","ting","tingen","tingens","tinget","tingets","tings"],T=["Ã¥t","av","bakom","bland","bortom","bredvid","cirka","efter","emellan","emot","enligt","för","före","förutom","framför","frÃ¥n","genom","hos","i","igenom","inom","inuti","längs","med","mellan","mittemot","mot","nära","nästa","nedan","ner","olik","om","omkring","ovanför","ovanpÃ¥","över","pÃ¥","runt","sedan","som","till","tvärs","tvärsöver","under","upp","ur","ut","utan","utanför","utom","via","vid"],_=["absolut","alldeles","allra","bra","fullständigt","fullt","ganska","helt","illa","jätte","rysligt","sÃ¥","storligen","totalt","väldigt","ytterst"],A=["eller","och"],C=["att"],D=["Ã¥r","Ã¥rens","Ã¥ret","Ã¥rets","Ã¥rs","Ã¥rtal","Ã¥rtalen","Ã¥rtalens","Ã¥rtaconst","Ã¥rtaconsts","Ã¥rtals","dag","dagar","dagarna","dagarnas","dagars","dagen","dagens","dags","gÃ¥r","idag","mÃ¥nad","mÃ¥naden","mÃ¥nadens","mÃ¥nader","mÃ¥naderna","mÃ¥nadernas","mÃ¥naders","mÃ¥nads","minut","minuten","minutens","minuter","minuterna","minuternas","minuters","minuts","morgon","sekund","sekunden","sekundens","sekunder","sekunderna","sekundernas","sekunders","sekunds","timmar","timmarna","timmarnas","timmars","timme","timmen","timmens","timmes","vecka","veckan","veckans","veckas","veckor","veckorna","veckornas","veckors"],F=["prof","doc","dr"],I=["Ã¥","aj","aja","fy","grattis","hej","hu","jasÃ¥","javisst","o","oj","ojdÃ¥","prosit","puh","skÃ¥l","usch"],L=["c","cl","cm","dl","g","kg","km","krm","l","m","mg","ml","mm","msk","pkt","st","tsk"],B=["förlÃ¥t","ja","jo","ju","m.m","nej","ok","okej","tack"],G=(l([].concat(k,M,W,w,z,R,O)),l([].concat(n,T,A,p,_,y,f)),l([].concat(r,o,g,m,v,I,i,S,x,E,P,h,c,C,u,b,B,j,L,D,F,q)),l([].concat(n,i,k,o,g,m,f,p,v,u,b,h,c,y,j,x,w,S,R,P,z,E,O,M,W,q,T,_,A,C,D,F,I,L,B))),H=[["antingen","eller"],["icke blott","utan afven"],["ju","desto"]],J={productPages:{parameters:{recommendedMinimum:3,recommendedMaximum:6,acceptableMaximum:7,acceptableMinimum:1}}},K=window.lodash,N=function(s,a){const e=s.match(new RegExp(a.externalStemmer.regexR1region));let t="";return e&&e[1]&&(t=e[1],e.index+2<3&&(t=s.slice(3))),{r1:t,rest:s.slice(0,s.length-t.length)}},{baseStemmer:Q}=e.languageProcessing;function U(s){const a=(0,K.get)(s.getData("morphology"),"sv",!1);return a?s=>function(s,a){let e=N(s,a);const t=function(s,a,e){const t=a.r1;if(!t)return s;const r=new RegExp(e.externalStemmer.regexSuffixes1a),d=t.match(r);return d?a.rest+t.slice(0,d.index):s}(s,e,a),r=function(s,a,e){return a.r1&&s.match(new RegExp(e.externalStemmer.regexSuffixes1b))?s.slice(0,-1):s}(s,e,a);return s=t.length{"use strict";var i={d:(e,r)=>{for(var a in r)i.o(r,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},o:(i,e)=>Object.prototype.hasOwnProperty.call(i,e),r:i=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})}},e={};i.r(e),i.d(e,{default:()=>p});const r=window.yoast.analysis,a=["bunlar","ÅŸunlar","onlarâ€, “burası","orası","ÅŸurası","burayı","orayı","ÅŸurayıâ€, “buraya","oraya","ÅŸurayaâ€, “burada","orada","ÅŸuradaâ€, “buradan","oradan","ÅŸuradan","bu","ÅŸu","o","bir","íki","üç","dört","beÅŸ","altı","yedi","sekiz","dokuz","on"],t=["fakat","halbuki","hatta","üstelik","ancak","oysa","sonuçta","yalnız","çünkü","oysaki","kısacası","özetle","böylelikle","ama","lakin","ayrıca","açıkcası","yani","sonucunda","böylece","kısaca","veya","veyahut","zira","öyleyse","sonrasında","ardından","vakıa","gerçi","karşın","tümüyle","bütünüyle","tamamıyla","genelde","diÄŸer","baÅŸka","önce","öncesinde","sonra","yanısıra","ama","muhakkak","kesinlikle","şüphesiz","elbet","elbette","kuÅŸkusuz","baÅŸlıca","bilakis","aksine","tersine","devamında","özellikle","bilhassa","nihayet","nihayetinde","neticede","ayrıyeten","dahası","çoÄŸunlukla","genellikle","genelde","dolayısıyla","gelgelelim","aslında","doÄŸrusu","mamafih","binaenaleyh","evvelce","önceden","şöylelikle","örneÄŸin","mesela","nitekim","mademki","ÅŸimdi","halihazırda","i̇laveten","aynen","nazaran","nedeniyle","yüzünden","umumiyetle","ekseriye","amacıyla","gayesiyle","velhasıl","ezcümle","özetlersek","etraflıca","tafsilatlı","genişçe","bilfiil","filhakika","evvela","i̇lkin","en önce","birincisi","i̇kincisi","üçüncüsü","sonuncusu","tıpkı","topyekun","hem","ne","kah","ister","ya","gerek","ha"],s=t.concat(["o halde","bundan böyle","demek ki","ne yazık ki","görüldüğü gibi","i̇lk olarak","son olarak","ne var ki","buna raÄŸmen","yine de","baÅŸka bir deyiÅŸle","açıklamak gerekirse","özetlemek gerekirse","kısaca söylemek gerekirse","görüldüğü gibi","ve bunun gibi","halbu ki","buna göre","ona göre","ek olarak","her ne kadar","velev ki","olmakla beraber","bile olsa","i̇le beaber","i̇le birlikte","her ÅŸeye raÄŸmen","bütün yanlarıyla","bütün yönleriyle","ele alacak olursak","baÅŸtan sona","diÄŸer bir","baÅŸka bir","daha önce","daha sonra","bundan baÅŸka","bunun yanında","bunun yanı sıra","bununla birlikte","buna ilaveten","bunun dışında","elbette ki","muhakkak ki","belli baÅŸlı","karşılaÅŸtırmak gerekirse","karşılaÅŸtırmalı olarak","aynı zamanda","sonuç olarak","diÄŸer taraftan","diÄŸer bir taraftan","buna karşılık","tam tersine","buna baÄŸlı olarak","buna parelel olarak","i̇kinci olarak","üçüncü olarak","aynı derecede","eÅŸit olarak","baÅŸta olmak üzere","en sonunda","açık bir ÅŸekilde","ana hatlarıyla","genel itibariyle","genel anlamda","genel olarak","bunun için","bu nedenle","bundan dolayı","bu sebeple","dolayısı ile","her halükarda","aynı biçimde","aynı ÅŸekilde","bu esnada","bu arada","hal böyleyken","baÄŸlı kalmaksızın","açık olarak","belli ki","ayrıntılı olarak","bundan önce","sözün kısası","az ve öz bir ÅŸekilde","tüm ayrıntılarıyla","bu ÅŸekilde","o yüzden","bu sayede","buradan hareketle","buna mukabil","en önemlisi","her ÅŸeyden önce","esas olarak","hepsinden önce","hepsinden öte","hepsinden ötesi","her ÅŸeyin üzerinde","her ÅŸeyin ötesinde","hepsinden önemlisi","asıl önemlisi","her ÅŸeyi hesaba katarak","bütün olarak","her ÅŸey göz önüne alındığında","pararel olarak","diÄŸer bir nokta","diÄŸer açıdan","öyle ya da böyle","doÄŸrusunu söylemek gerekirse","i̇şin doÄŸrusu","aslına bakılırsa","gerçek ÅŸu ki","hattı zatında","aslına bakıldığında","aslına bakarsak","i̇şin aslı","sonuç itibariyle","örnek olarak","örneleyecek olursak","görülebileceÄŸi gibi","görülebileceÄŸi üzere","görüldüğü üzere","söylendiÄŸi gibi","söylenildiÄŸi gibi","söylediÄŸi gibi","söylediÄŸim gibi","olduÄŸu kadar","önceden belirtildiÄŸi gibi","önceden söylendiÄŸi gibi","yukarıda gösterildiÄŸi gibi","eninde sonunda","önünde sonunda","ÅŸu anda","bu sırada","bununla beraber","bu noktada","bunun ışığında","bunların ışığında","aÅŸikar olarak","aynı sebeple","bir de","doÄŸru da olsa","doÄŸru bile olsa","öyle bile olsa","öyle de olsa","i̇le ilgili","olsa bile","eÄŸer ki","olsa dahi","ondan dolayı","o sebepten dolayı","bu yüzden","onun için","esas itibarıyla","aynı sebepten dolayı","bu amaçla","zaman zaman","arada sırada","dönem dönem","arada bir","diyelim ki","farz edelim ki","farz edersek","kısaca söylecek olursak","tek kelimeyle","birkaç kelimeyle","sözün özü","en nihayetinde","uzun uzadıya","her iki durumda da","özü itibariyle","amacı ile","olması için","baÅŸka bir ifadeyle","diÄŸer bir deyiÅŸle","i̇lk önce","bir yandan","bir taraftan","hatırlatmak gerekirse","bu baÄŸlamda","gel gelelim","her ÅŸey hesaba katılırsa","bütüne bakıldığında","belirtildiÄŸi gibi","bir baÅŸka ifadeyle","lafı toparlamak gerekirse","bu düşünceyle","bu maksatla","bu doÄŸrultuda","bu niyetle","hem de","ne de","ya da","gerekse de"]),n=function(i){let e=i;return i.forEach((r=>{(r=r.split("-")).length>0&&r.filter((e=>!i.includes(e))).length>0&&(e=e.concat(r))})),e}([].concat(["bir"],["i̇ki","üç","dört","beÅŸ","altı","yedi","sekiz","dokuz","on","on bir","on i̇ki","on üç","on dört","on beÅŸ","on altı","on yedi","on sekiz","on dokuz","yirmi","yirmi bir","yirmi i̇ki","yirmi üç","yirmi dört","yirmi beÅŸ","yirmi altı","yirmi yedi","yirmi sekiz","yirmi dokuz","otuz","kırk","elli","altmış","yetmiÅŸ","seksen","doksan","yüz","bin","milyon","milyar"],["birinci","i̇kinci","üçüncü","dördüncü","beÅŸinci","altıncı","yedinci","sekizinci","dokuzuncu","onuncu"],["tam","yarım","çeyrek","üçte biri","üçte ikisi","tamamı","yarısı","çeyreÄŸi","üçte biri","üçte ikisi"],["ben","sen","o","biz","siz","onlar","beni","seni","onu","bizi","sizi","onları","bizleri","sizleri","bana","sana","ona","bize","size","onlara","bizlere","sizlere","bende","sende","onda","bizde","sizde","onlarda","bizlerde","sizlerde","benden","senden","ondan","bizden","sizden","onlardan","bizlerden","sizlerden","benim","senin","onun","bizim","sizin","onların","bizlerin","sizlerin","bu","ÅŸu","o","öteki","beriki","bura","ÅŸura","ora","burası","ÅŸurası","orası","böylesi","şöylesi","öylesi","bunlar","ÅŸunlar","onlar","ötekiler","berikiler","buralar","ÅŸuralar","oralar","birbiri","birbirimiz","birbiriniz","birbirleri","birbirimizi","birbirinizi","birbirlerini","birbirimize","birbirinize","birbirlerine","birbirimizde","birbirinizde","birbirlerinde","birbirimizden","birbirinizden","birbirlerinden","birbirimizle","birbirinizle","birbirleriyle"],["kim","kimi","kime","kimde","kimden","kimin","kiminle","ne","neyi","neyde","neyden","neyle","ne için","niçin","niye","ne diye","nere","nereyi","nereye","nerede","nereden","neresi","neden","hangi","hangisi","kaç","kaçı","kaçıncı","kaçta","nasıl","ne kadar","ne zaman","mı","hangi","hangisi","kimler","kimleri","kimlere","kimlerde","kimlerden","neler","neleri","nelere","nelerde","nelerden","hangiler","hangileri","hangilere"],["hepsi","bazısı","çoÄŸu","birçoÄŸu","birazı","hepsi","bütünü","yeteri kadarı","birkaçı","biri","her ikisi","i̇kisinden biri","hiç biri","diÄŸeri","tümü","bir kısmı","pek çoÄŸu","her biri","bazı","çok","çoÄŸu","birçok","biraz","bütün","yeteri kadar","birkaç","bir","her iki","hiç bir","diÄŸer","tüm","bir kısım","pek çok","her bir"],["kendi","kendim","kendimi","kendime","kendimde","kendimden","kendin","kendini","kendine","kendinde","kendinden","kendisi","kendiyle","kendileri","kendilerine","kendilerinde","kendilerinden","kendileriyle"],["kimi","kimse","biri","birisi","baÅŸkası","bazısı","bir çoÄŸu","bir takımı","birkaçı","birazı","herkes","hepsi","hepimiz","hiçbiri","herhangi biri","her biri","ÅŸey","falan","filan","falanca","öteberi","tümü","bütünü","kimileri","kimseler","birileri","baÅŸkaları","bazıları","bir çokları","herkesler"],["i̇çin","gibi","kadar","ancak","yalnız","i̇le","sadece","sanki","deÄŸil","üzere","dair","karşın","raÄŸmen","özgü","doÄŸru","dek","deÄŸin","ait","beri","baÅŸka","itibaren","dolayı","ötürü","adeta","sırf","diye","tek","karşı"],["ve","i̇le","veya","ya da","yahut","veyahut","ama","fakat","lakin","yalnız","ancak","oysa","oysaki","halbu ki","ne var ki","çünkü","zira","de","da","ki","meÄŸer","madem","mademki","demek","demek ki","üstelik","hatta","yani","hem...hem","hem de","ne","kah","i̇ster","ister","açıkcası","bile","ya","da","ise","öyleyse","kim bilir","gerek","gerekse de","ta ki","zati"],["demek","dedim","dedin","dedi","dedik","dediniz","dediler","der","söylemek","söyledim","söyledin","söyledi","söyledik","söylediniz","söylediler","söyler","söylerler","sormak","sordum","sordun","sordu","sorduk","sordunuz","sordular","sorar","sorarlar","belirtmek","belirttim","belirttin","belirtti","belirttik","belirttiniz","belirttiler","belirtir","belirtirler","açıklamak","açıkladım","açıkladın","açıkladı","açıkladık","açıkladınız","açıkladılar","açıklar","açıklarlar","düşünmek","düşündüm","düşündün","düşündü","düşündük","düşündünüz","düşündüler","düşünür","düşünürler","konuÅŸmak","konuÅŸdum","konuÅŸtun","konuÅŸtu","konuÅŸtuk","konuÅŸtunuz","konuÅŸtular","konuÅŸur","konuÅŸurlar","bildirmek","bildirdim","bildirdin","bildirdi","bildirdik","bildirdiniz","bildirdiler","birdirir","bildirirler","ele","almak","aldım","aldın","aldı","aldık","aldınız","aldılar","önermek","önerdim","önerdin","önerdi","önerdik","önerdiniz","önerdiler","önerir","önerirler","anlamak","anladım","anladın","anladı","anladık","anladınız","anladılar","anlar","anlarlar"],["en","daha","pek çok","en çok","fazla","epey","epeyce","bayağı","oldukça","pek","gayet","fazlaca","fevkalede","tamamen","fena halde","fena ÅŸekilde","gerçekten","zerre kadar","biraz","son derece","deli gibi","en","çok","azıcık"],["etmek","olmak","yapmak","kalmak","gelmek","kalmak","bulunmak","demek","dilemek","söylemek","durmak","eylemek","yazmak","durmak","vermek","kabul","teÅŸekkür","memnun","seyir","zan","bilmek"],["yeni","eski","önceki","i̇yi","büyük","küçük","kolay","zor","hızlı","yavaÅŸ","yüksek","alçak","kısa","uzun","i̇nce","kalın","gerçek","yalan","yanlış","basit","zor","aynı","farklı","belli","belirsiz","modern","geleneksel","muhtemel","yaygın","genç","yaÅŸlı","zamansız","acı","tatlı","tuzlu","sıcak","soÄŸuk","kalabalık","sakin","yalnız","dar","geniÅŸ","siyah","beyaz","mavi","kırmızı","sarı","temiz","kirli","muhteÅŸem","nazik","kibar","akıllı","zeki","gizli","açık","kapalı","dikkatli","gürültülü","sevinçli","eski","önce","i̇yi","büyük","küçük","kolay","zor","hızlı","yavaÅŸ","yüksek","alçak","kısa","uzun","i̇nce","kalın","gerçek","yanlış","basit","zor","aynı","farklı","belli","belirsiz","modern","geleneksel","muhtemel","yaygın","nadir","genç","yaÅŸlı","zamansız","acı","tatlı","tuzlu","sıcak","soÄŸuk","kalabalık","sakin","yalnız","dar","geniÅŸ","siyah","beyaz","mavi","kırmızı","sarı","temiz","kirli","muhteÅŸem","nazik","kibar","akıllı","zeki","gizli","açık","kapalı","dikkatle","gürültülü","uzun","sevinçle","aÅŸağı","yukarı","saÄŸa","sola","i̇çeri dışarı","bugün","yarın","haftaya","seneye","ne zaman","nereye","neden","niye","ne kadar","nasıl","ne"],["ey","hey","bre","hiÅŸt","ÅŸÅŸt","ah","ahh","ee","vay","i̇mdat","hah","ay","aa","aaa","hay allah","aman","aman dikkat","vah","ya","yaa","ooo","of","tüh","peh","aman","haydi","sakın","yuh"],["çay kaşığı","çay k.","yemek kaşığı","yemek k.","tatlı kaşığı","tatlı k.","çay bardağı","çay b.","su bardağı","su b.","kahve fincanı","kahve f.","tepeleme","tepeleme kaşık","tepeleme bardak","gr","ml","kg","mg","cl","oz","çeyrek","tam","yarım","üçte biri","üçte ikisi","parmak"],["saniye","saniyeler","dakika","dakikalar","saat","saatler","gün","günler","hafta","haftalar","ay","aylar","yıl","yıllar","bugün","yarın","dün","sabah","öğlen","akÅŸam","gece","gündüz"],["ÅŸey","ÅŸeyler","olasılık","çeÅŸit","kiÅŸi"],["hapÅŸu","hapşırık","hapÅŸurmak","horr","horultu","horlamak","şırıl","şırıltı","şırıldamak","hışır","hışırtı","hışırdamak","gıcır","gıcırtı","gıcırdamak","çatır","çatırtı","çatırdamak","pat","patlamak","vın","vınlamak","zırr","zırıltı","zırlamak","tık","tıkırtı","tıkırdamak","çıt","çıtırtı","çıtırdamak","fokur","fokurtu","fokurdamak","kıt","kıtırtı","kıtırdamak","patırtı"],["bayan","bay","hanımefendi","hanfendi","hanım","beyefendi","beyfendi","bey","sayın","profesör","prof.","doktor","dr."],t)),h=[["hem","hem de"],["ne","ne de"],["ya","ya da"],["gerek","gerekse de"]],o={recommendedLength:15,percentages:{slightlyTooMany:20,farTooMany:25}},l=window.lodash;class u{get b(){return Object.prototype.hasOwnProperty.call(this,"_$esjava$b")?this._$esjava$b:this._$esjava$b=""}set b(i){this._$esjava$b=i}length$esjava$0(){return this.b.length}replace$esjava$3(i,e,r){if(0===i&&e===this.b.length)this.b=r;else{const a=this.b.substring(0,i),t=this.b.substring(e);this.b=a+r+t}}substring$esjava$2(i,e){return this.b.substring(i,e)}charAt$esjava$1(i){return this.b.charCodeAt(i)}subSequence$esjava$2(i,e){throw new Error("NotImpl: CharSequence::subSequence")}toString$esjava$0(){return this.b}length(...i){return 0===i.length?this.length$esjava$0(...i):super.length(...i)}replace(...i){return 3===i.length?this.replace$esjava$3(...i):super.replace(...i)}substring(...i){return 2===i.length?this.substring$esjava$2(...i):super.substring(...i)}charAt(...i){return 1===i.length?this.charAt$esjava$1(...i):super.charAt(...i)}subSequence(...i){return 2===i.length?this.subSequence$esjava$2(...i):super.subSequence(...i)}toString(...i){return 0===i.length?this.toString$esjava$0(...i):super.toString(...i)}}class m{static toCharArray$esjava$1(i){const e=i.length,r=new Array(e);for(let a=0;a=this.limit)return!1;let a=this.current.charAt(this.cursor);return!(a>r||a>3]&1<<(7&a))||(this.cursor++,0)))}in_grouping_b$esjava$3(i,e,r){if(this.cursor<=this.limit_backward)return!1;let a=this.current.charAt(this.cursor-1);return!(a>r||a>3]&1<<(7&a))||(this.cursor--,0)))}out_grouping$esjava$3(i,e,r){if(this.cursor>=this.limit)return!1;let a=this.current.charAt(this.cursor);return a>r||a>3]&1<<(7&a))&&(this.cursor++,!0))}out_grouping_b$esjava$3(i,e,r){if(this.cursor<=this.limit_backward)return!1;let a=this.current.charAt(this.cursor-1);return a>r||a>3]&1<<(7&a))&&(this.cursor--,!0))}in_range$esjava$2(i,e){if(this.cursor>=this.limit)return!1;const r=this.current.charAt(this.cursor);return!(r>e||re||r=this.limit)return!1;const r=this.current.charAt(this.cursor);return(r>e||re||r>1);let l=0,u=n0)break;if(a===r)break;if(o)break;o=!0}}for(;;){const e=i[r];if(n>=e.s_size){if(this.cursor=t+e.s_size,null===e.method)return e.result;let i;if(i=e.method.call(e.methodobject),this.cursor=t+e.s_size,i)return e.result}if(r=e.substring_i,r<0)return 0}}find_among_b$esjava$2(i,e){let r=0,a=e;const t=this.cursor,s=this.limit_backward;let n=0,h=0,o=!1;for(;;){const e=r+(a-r>>1);let l=0,u=n=0;_--){if(t-u===s){l=-1;break}if(l=this.current.charAt(t-1-u)-m.s[_],0!==l)break;u++}if(l<0?(a=e,h=u):(r=e,n=u),a-r<=1){if(r>0)break;if(a===r)break;if(o)break;o=!0}}for(;;){const e=i[r];if(n>=e.s_size){if(this.cursor=t-e.s_size,null===e.method)return e.result;let i;if(i=e.method.call(e.methodobject),this.cursor=t-e.s_size,i)return e.result}if(r=e.substring_i,r<0)return 0}}replace_s$esjava$3(i,e,r){const a=r.length-(e-i);return this.current.replace(i,e,r),this.limit+=a,this.cursor>=e?this.cursor+=a:this.cursor>i&&(this.cursor=i),a}slice_check$esjava$0(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>this.current.length())throw new Error("Snowball: faulty slice operation")}slice_from$esjava$1(i){this.slice_check$esjava$0(),this.replace_s$esjava$3(this.bra,this.ket,i)}slice_del$esjava$0(){this.slice_from$esjava$1("")}insert$esjava$3(i,e,r){const a=this.replace_s$esjava$3(i,e,r);i<=this.bra&&(this.bra+=a),i<=this.ket&&(this.ket+=a)}slice_to$esjava$1(i){return this.slice_check$esjava$0(),i.replace(0,i.length(),this.current.substring(this.bra,this.ket)),i}setCurrent(...i){return 1===i.length?this.setCurrent$esjava$1(...i):super.setCurrent(...i)}getCurrent(...i){return 0===i.length?this.getCurrent$esjava$0(...i):super.getCurrent(...i)}copy_from(...i){return 1===i.length?this.copy_from$esjava$1(...i):super.copy_from(...i)}in_grouping(...i){return 3===i.length?this.in_grouping$esjava$3(...i):super.in_grouping(...i)}in_grouping_b(...i){return 3===i.length?this.in_grouping_b$esjava$3(...i):super.in_grouping_b(...i)}out_grouping(...i){return 3===i.length?this.out_grouping$esjava$3(...i):super.out_grouping(...i)}out_grouping_b(...i){return 3===i.length?this.out_grouping_b$esjava$3(...i):super.out_grouping_b(...i)}in_range(...i){return 2===i.length?this.in_range$esjava$2(...i):super.in_range(...i)}in_range_b(...i){return 2===i.length?this.in_range_b$esjava$2(...i):super.in_range_b(...i)}out_range(...i){return 2===i.length?this.out_range$esjava$2(...i):super.out_range(...i)}out_range_b(...i){return 2===i.length?this.out_range_b$esjava$2(...i):super.out_range_b(...i)}eq_s(...i){return 2===i.length?this.eq_s$esjava$2(...i):super.eq_s(...i)}eq_s_b(...i){return 2===i.length?this.eq_s_b$esjava$2(...i):super.eq_s_b(...i)}eq_v(...i){return 1===i.length?this.eq_v$esjava$1(...i):super.eq_v(...i)}eq_v_b(...i){return 1===i.length?this.eq_v_b$esjava$1(...i):super.eq_v_b(...i)}find_among(...i){return 2===i.length?this.find_among$esjava$2(...i):super.find_among(...i)}find_among_b(...i){return 2===i.length?this.find_among_b$esjava$2(...i):super.find_among_b(...i)}replace_s(...i){return 3===i.length?this.replace_s$esjava$3(...i):super.replace_s(...i)}slice_check(...i){return 0===i.length?this.slice_check$esjava$0(...i):super.slice_check(...i)}slice_from(...i){return 1===i.length?this.slice_from$esjava$1(...i):super.slice_from(...i)}slice_del(...i){return 0===i.length?this.slice_del$esjava$0(...i):super.slice_del(...i)}insert(...i){return 3===i.length?this.insert$esjava$3(...i):super.insert(...i)}slice_to(...i){return 1===i.length?this.slice_to$esjava$1(...i):super.slice_to(...i)}}class k extends _{stem$esjava$0(){throw"NotImpl < stem$esjava$0 >"}stem(...i){return 0===i.length?this.stem$esjava$0(...i):super.stem(...i)}}class c extends k{constructor(i){super(),c.morphologyData=i.externalStemmer}static get methodObject(){return delete c.methodObject,c.methodObject=null}static get a_0(){return delete c.a_0,c.a_0=[new m(c.morphologyData.a_0.SuffixM,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixN,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixMiz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixNiz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixMuz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixNuz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixMuzDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixNuzDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixMizUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_0.SuffixNizUndotted,-1,-1,"",c.methodObject)]}static get a_1(){return delete c.a_1,c.a_1=[new m(c.morphologyData.a_1.SuffixLeri,-1,-1,"",c.methodObject),new m(c.morphologyData.a_1.SuffixLariUndotted,-1,-1,"",c.methodObject)]}static get a_2(){return delete c.a_2,c.a_2=[new m(c.morphologyData.a_2.SuffixNi,-1,-1,"",c.methodObject),new m(c.morphologyData.a_2.SuffixNu,-1,-1,"",c.methodObject),new m(c.morphologyData.a_2.SuffixNuDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_2.SuffixNiUndotted,-1,-1,"",c.methodObject)]}static get a_3(){return delete c.a_3,c.a_3=[new m(c.morphologyData.a_3.SuffixInDotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_3.SuffixUn,-1,-1,"",c.methodObject),new m(c.morphologyData.a_3.SuffixUnDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_3.SuffixInUndotted,-1,-1,"",c.methodObject)]}static get a_4(){return delete c.a_4,c.a_4=[new m(c.morphologyData.a_4.SuffixA,-1,-1,"",c.methodObject),new m(c.morphologyData.a_4.SuffixE,-1,-1,"",c.methodObject)]}static get a_5(){return delete c.a_5,c.a_5=[new m(c.morphologyData.a_5.SuffixNa,-1,-1,"",c.methodObject),new m(c.morphologyData.a_5.SuffixNe,-1,-1,"",c.methodObject)]}static get a_6(){return delete c.a_6,c.a_6=[new m(c.morphologyData.a_6.SuffixDa,-1,-1,"",c.methodObject),new m(c.morphologyData.a_6.SuffixTa,-1,-1,"",c.methodObject),new m(c.morphologyData.a_6.SuffixDe,-1,-1,"",c.methodObject),new m(c.morphologyData.a_6.SuffixTe,-1,-1,"",c.methodObject)]}static get a_7(){return delete c.a_7,c.a_7=[new m(c.morphologyData.a_7.SuffixNda,-1,-1,"",c.methodObject),new m(c.morphologyData.a_7.SuffixNde,-1,-1,"",c.methodObject)]}static get a_8(){return delete c.a_8,c.a_8=[new m(c.morphologyData.a_8.SuffixDan,-1,-1,"",c.methodObject),new m(c.morphologyData.a_8.SuffixTan,-1,-1,"",c.methodObject),new m(c.morphologyData.a_8.SuffixDen,-1,-1,"",c.methodObject),new m(c.morphologyData.a_8.SuffixTen,-1,-1,"",c.methodObject)]}static get a_9(){return delete c.a_9,c.a_9=[new m(c.morphologyData.a_9.SuffixNdan,-1,-1,"",c.methodObject),new m(c.morphologyData.a_9.SuffixNden,-1,-1,"",c.methodObject)]}static get a_10(){return delete c.a_10,c.a_10=[new m(c.morphologyData.a_10.SuffixLa,-1,-1,"",c.methodObject),new m(c.morphologyData.a_10.SuffixLe,-1,-1,"",c.methodObject)]}static get a_11(){return delete c.a_11,c.a_11=[new m(c.morphologyData.a_11.SuffixCa,-1,-1,"",c.methodObject),new m(c.morphologyData.a_11.SuffixCe,-1,-1,"",c.methodObject)]}static get a_12(){return delete c.a_12,c.a_12=[new m(c.morphologyData.a_12.SuffixImDotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_12.SuffixUm,-1,-1,"",c.methodObject),new m(c.morphologyData.a_12.SuffixUmDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_12.SuffixImUndotted,-1,-1,"",c.methodObject)]}static get a_13(){return delete c.a_13,c.a_13=[new m(c.morphologyData.a_13.SuffixSin,-1,-1,"",c.methodObject),new m(c.morphologyData.a_13.SuffixSun,-1,-1,"",c.methodObject),new m(c.morphologyData.a_13.SuffixSunDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_13.SuffixSinUndotted,-1,-1,"",c.methodObject)]}static get a_14(){return delete c.a_14,c.a_14=[new m(c.morphologyData.a_14.SuffixIzDotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_14.SuffixUz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_14.SuffixUzDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_14.SuffixIzUndotted,-1,-1,"",c.methodObject)]}static get a_15(){return delete c.a_15,c.a_15=[new m(c.morphologyData.a_15.SuffixSiniz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_15.SuffixSunuz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_15.SuffixSunuzDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_15.SuffixSinizUndotted,-1,-1,"",c.methodObject)]}static get a_16(){return delete c.a_16,c.a_16=[new m(c.morphologyData.a_16.SuffixLar,-1,-1,"",c.methodObject),new m(c.morphologyData.a_16.SuffixLer,-1,-1,"",c.methodObject)]}static get a_17(){return delete c.a_17,c.a_17=[new m(c.morphologyData.a_17.SuffixNiz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_17.SuffixNuz,-1,-1,"",c.methodObject),new m(c.morphologyData.a_17.SuffixNuzDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_17.SuffixNizUndotted,-1,-1,"",c.methodObject)]}static get a_18(){return delete c.a_18,c.a_18=[new m(c.morphologyData.a_18.SuffixDir,-1,-1,"",c.methodObject),new m(c.morphologyData.a_18.SuffixTir,-1,-1,"",c.methodObject),new m(c.morphologyData.a_18.SuffixDur,-1,-1,"",c.methodObject),new m(c.morphologyData.a_18.SuffixTur,-1,-1,"",c.methodObject),new m(c.morphologyData.a_18.SuffixDurDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_18.SuffixTurDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_18.SuffixDirUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_18.SuffixTirUndotted,-1,-1,"",c.methodObject)]}static get a_19(){return delete c.a_19,c.a_19=[new m(c.morphologyData.a_19.SuffixCasinaUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_19.SuffixCesine,-1,-1,"",c.methodObject)]}static get a_20(){return delete c.a_20,c.a_20=[new m(c.morphologyData.a_20.SuffixDi,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTi,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDik,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTik,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDuk,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTuk,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDukDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTukDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDikUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTikUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDim,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTim,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDum,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTum,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDumDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTumDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDimUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTimUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDin,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTin,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDun,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTun,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDunDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTunDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDinUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTinUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDu,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTu,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDuDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTuDieresis,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixDiUndotted,-1,-1,"",c.methodObject),new m(c.morphologyData.a_20.SuffixTiUndotted,-1,-1,"",c.methodObject)]}static get a_21(){return delete c.a_21,c.a_21=[new m(c.morphologyData.a_21.SuffixSa,-1,-1,"",c.methodObject),new m(c.morphologyData.a_21.SuffixSe,-1,-1,"",c.methodObject),new m(c.morphologyData.a_21.SuffixSak,-1,-1,"",c.methodObject),new m(c.morphologyData.a_21.SuffixSek,-1,-1,"",c.methodObject),new m(c.morphologyData.a_21.SuffixSam,-1,-1,"",c.methodObject),new m(c.morphologyData.a_21.SuffixSem,-1,-1,"",c.methodObject),new m(c.morphologyData.a_21.SuffixSan,-1,-1,"",c.methodObject),new m(c.morphologyData.a_21.SuffixSen,-1,-1,"",c.methodObject)]}static get a_22(){return delete c.a_22,c.a_22=[new m(c.morphologyData.a_22.SuffixMisCedilla,-1,-1,"",c.methodObject),new m(c.morphologyData.a_22.SuffixMusCedilla,-1,-1,"",c.methodObject),new m(c.morphologyData.a_22.SuffixMusDieresisCedilla,-1,-1,"",c.methodObject),new m(c.morphologyData.a_22.SuffixMisUndottedCedilla,-1,-1,"",c.methodObject)]}static get a_23(){return delete c.a_23,c.a_23=[new m(c.morphologyData.a_23.SuffixB,-1,1,"",c.methodObject),new m(c.morphologyData.a_23.SuffixC,-1,2,"",c.methodObject),new m(c.morphologyData.a_23.SuffixD,-1,3,"",c.methodObject),new m(c.morphologyData.a_23.SuffixGSoft,-1,4,"",c.methodObject)]}static get g_vowel(){return delete c.g_vowel,c.g_vowel=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1]}static get g_U(){return delete c.g_U,c.g_U=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1]}static get g_vowel1(){return delete c.g_vowel1,c.g_vowel1=[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]}static get g_vowel2(){return delete c.g_vowel2,c.g_vowel2=[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130]}static get g_vowel3(){return delete c.g_vowel3,c.g_vowel3=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]}static get g_vowel4(){return delete c.g_vowel4,c.g_vowel4=[17]}static get g_vowel5(){return delete c.g_vowel5,c.g_vowel5=[65]}static get g_vowel6(){return delete c.g_vowel6,c.g_vowel6=[65]}get B_continue_stemming_noun_suffixes(){return Object.prototype.hasOwnProperty.call(this,"_$esjava$B_continue_stemming_noun_suffixes")?this._$esjava$B_continue_stemming_noun_suffixes:this._$esjava$B_continue_stemming_noun_suffixes=!1}set B_continue_stemming_noun_suffixes(i){this._$esjava$B_continue_stemming_noun_suffixes=i}get I_strlen(){return Object.prototype.hasOwnProperty.call(this,"_$esjava$I_strlen")?this._$esjava$I_strlen:this._$esjava$I_strlen=0}set I_strlen(i){this._$esjava$I_strlen=i}r_check_vowel_harmony$esjava$0(){let i,e,r,a,t,s,n,h,o,l,u;i=this.limit-this.cursor;i:for(;;){e=this.limit-this.cursor;e:do{if(!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break e;this.cursor=this.limit-e;break i}while(0);if(this.cursor=this.limit-e,this.cursor<=this.limit_backward)return!1;this.cursor--}i:do{r=this.limit-this.cursor;e:do{if(!this.eq_s_b$esjava$2(1,"a"))break e;r:for(;;){a=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel1,97,305))break a;this.cursor=this.limit-a;break r}while(0);if(this.cursor=this.limit-a,this.cursor<=this.limit_backward)break e;this.cursor--}break i}while(0);this.cursor=this.limit-r;e:do{if(!this.eq_s_b$esjava$2(1,"e"))break e;r:for(;;){t=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel2,101,252))break a;this.cursor=this.limit-t;break r}while(0);if(this.cursor=this.limit-t,this.cursor<=this.limit_backward)break e;this.cursor--}break i}while(0);this.cursor=this.limit-r;e:do{if(!this.eq_s_b$esjava$2(1,"ı"))break e;r:for(;;){s=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel3,97,305))break a;this.cursor=this.limit-s;break r}while(0);if(this.cursor=this.limit-s,this.cursor<=this.limit_backward)break e;this.cursor--}break i}while(0);this.cursor=this.limit-r;e:do{if(!this.eq_s_b$esjava$2(1,"i"))break e;r:for(;;){n=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel4,101,105))break a;this.cursor=this.limit-n;break r}while(0);if(this.cursor=this.limit-n,this.cursor<=this.limit_backward)break e;this.cursor--}break i}while(0);this.cursor=this.limit-r;e:do{if(!this.eq_s_b$esjava$2(1,"o"))break e;r:for(;;){h=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel5,111,117))break a;this.cursor=this.limit-h;break r}while(0);if(this.cursor=this.limit-h,this.cursor<=this.limit_backward)break e;this.cursor--}break i}while(0);this.cursor=this.limit-r;e:do{if(!this.eq_s_b$esjava$2(1,"ö"))break e;r:for(;;){o=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel6,246,252))break a;this.cursor=this.limit-o;break r}while(0);if(this.cursor=this.limit-o,this.cursor<=this.limit_backward)break e;this.cursor--}break i}while(0);this.cursor=this.limit-r;e:do{if(!this.eq_s_b$esjava$2(1,"u"))break e;r:for(;;){l=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel5,111,117))break a;this.cursor=this.limit-l;break r}while(0);if(this.cursor=this.limit-l,this.cursor<=this.limit_backward)break e;this.cursor--}break i}while(0);if(this.cursor=this.limit-r,!this.eq_s_b$esjava$2(1,"ü"))return!1;e:for(;;){u=this.limit-this.cursor;r:do{if(!this.in_grouping_b$esjava$3(c.g_vowel6,246,252))break r;this.cursor=this.limit-u;break e}while(0);if(this.cursor=this.limit-u,this.cursor<=this.limit_backward)return!1;this.cursor--}}while(0);return this.cursor=this.limit-i,!0}r_mark_suffix_with_optional_n_consonant$esjava$0(){let i,e,r,a,t,s,n;i:do{i=this.limit-this.cursor;e:do{if(e=this.limit-this.cursor,!this.eq_s_b$esjava$2(1,"n"))break e;if(this.cursor=this.limit-e,this.cursor<=this.limit_backward)break e;if(this.cursor--,r=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break e;this.cursor=this.limit-r;break i}while(0);this.cursor=this.limit-i,a=this.limit-this.cursor;e:do{if(t=this.limit-this.cursor,!this.eq_s_b$esjava$2(1,"n"))break e;return this.cursor=this.limit-t,!1}while(0);if(this.cursor=this.limit-a,s=this.limit-this.cursor,this.cursor<=this.limit_backward)return!1;if(this.cursor--,n=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_vowel,97,305))return!1;this.cursor=this.limit-n,this.cursor=this.limit-s}while(0);return!0}r_mark_suffix_with_optional_s_consonant$esjava$0(){let i,e,r,a,t,s,n;i:do{i=this.limit-this.cursor;e:do{if(e=this.limit-this.cursor,!this.eq_s_b$esjava$2(1,"s"))break e;if(this.cursor=this.limit-e,this.cursor<=this.limit_backward)break e;if(this.cursor--,r=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break e;this.cursor=this.limit-r;break i}while(0);this.cursor=this.limit-i,a=this.limit-this.cursor;e:do{if(t=this.limit-this.cursor,!this.eq_s_b$esjava$2(1,"s"))break e;return this.cursor=this.limit-t,!1}while(0);if(this.cursor=this.limit-a,s=this.limit-this.cursor,this.cursor<=this.limit_backward)return!1;if(this.cursor--,n=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_vowel,97,305))return!1;this.cursor=this.limit-n,this.cursor=this.limit-s}while(0);return!0}r_mark_suffix_with_optional_y_consonant$esjava$0(){let i,e,r,a,t,s,n;i:do{i=this.limit-this.cursor;e:do{if(e=this.limit-this.cursor,!this.eq_s_b$esjava$2(1,"y"))break e;if(this.cursor=this.limit-e,this.cursor<=this.limit_backward)break e;if(this.cursor--,r=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break e;this.cursor=this.limit-r;break i}while(0);this.cursor=this.limit-i,a=this.limit-this.cursor;e:do{if(t=this.limit-this.cursor,!this.eq_s_b$esjava$2(1,"y"))break e;return this.cursor=this.limit-t,!1}while(0);if(this.cursor=this.limit-a,s=this.limit-this.cursor,this.cursor<=this.limit_backward)return!1;if(this.cursor--,n=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_vowel,97,305))return!1;this.cursor=this.limit-n,this.cursor=this.limit-s}while(0);return!0}r_mark_suffix_with_optional_U_vowel$esjava$0(){let i,e,r,a,t,s,n;i:do{i=this.limit-this.cursor;e:do{if(e=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_U,105,305))break e;if(this.cursor=this.limit-e,this.cursor<=this.limit_backward)break e;if(this.cursor--,r=this.limit-this.cursor,!this.out_grouping_b$esjava$3(c.g_vowel,97,305))break e;this.cursor=this.limit-r;break i}while(0);this.cursor=this.limit-i,a=this.limit-this.cursor;e:do{if(t=this.limit-this.cursor,!this.in_grouping_b$esjava$3(c.g_U,105,305))break e;return this.cursor=this.limit-t,!1}while(0);if(this.cursor=this.limit-a,s=this.limit-this.cursor,this.cursor<=this.limit_backward)return!1;if(this.cursor--,n=this.limit-this.cursor,!this.out_grouping_b$esjava$3(c.g_vowel,97,305))return!1;this.cursor=this.limit-n,this.cursor=this.limit-s}while(0);return!0}r_mark_possessives$esjava$0(){return 0!==this.find_among_b$esjava$2(c.a_0,10)&&!!this.r_mark_suffix_with_optional_U_vowel$esjava$0()}r_mark_sU$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&!!this.in_grouping_b$esjava$3(c.g_U,105,305)&&!!this.r_mark_suffix_with_optional_s_consonant$esjava$0()}r_mark_lArI$esjava$0(){return 0!==this.find_among_b$esjava$2(c.a_1,2)}r_mark_yU$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&!!this.in_grouping_b$esjava$3(c.g_U,105,305)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_nU$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_2,4)}r_mark_nUn$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_3,4)&&!!this.r_mark_suffix_with_optional_n_consonant$esjava$0()}r_mark_yA$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_4,2)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_nA$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_5,2)}r_mark_DA$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_6,4)}r_mark_ndA$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_7,2)}r_mark_DAn$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_8,4)}r_mark_ndAn$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_9,2)}r_mark_ylA$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_10,2)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_ki$esjava$0(){return!!this.eq_s_b$esjava$2(2,"ki")}r_mark_ncA$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_11,2)&&!!this.r_mark_suffix_with_optional_n_consonant$esjava$0()}r_mark_yUm$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_12,4)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_sUn$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_13,4)}r_mark_yUz$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_14,4)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_sUnUz$esjava$0(){return 0!==this.find_among_b$esjava$2(c.a_15,4)}r_mark_lAr$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_16,2)}r_mark_nUz$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_17,4)}r_mark_DUr$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_18,8)}r_mark_cAsInA$esjava$0(){return 0!==this.find_among_b$esjava$2(c.a_19,2)}r_mark_yDU$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_20,32)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_ysA$esjava$0(){return 0!==this.find_among_b$esjava$2(c.a_21,8)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_ymUs_$esjava$0(){return!!this.r_check_vowel_harmony$esjava$0()&&0!==this.find_among_b$esjava$2(c.a_22,4)&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_mark_yken$esjava$0(){return!!this.eq_s_b$esjava$2(3,"ken")&&!!this.r_mark_suffix_with_optional_y_consonant$esjava$0()}r_stem_nominal_verb_suffixes$esjava$0(){let i,e,r,a,t,s,n,h,o,l;this.ket=this.cursor,this.B_continue_stemming_noun_suffixes=!0;i:do{i=this.limit-this.cursor;e:do{r:do{e=this.limit-this.cursor;a:do{if(!this.r_mark_ymUs_$esjava$0())break a;break r}while(0);this.cursor=this.limit-e;a:do{if(!this.r_mark_yDU$esjava$0())break a;break r}while(0);this.cursor=this.limit-e;a:do{if(!this.r_mark_ysA$esjava$0())break a;break r}while(0);if(this.cursor=this.limit-e,!this.r_mark_yken$esjava$0())break e}while(0);break i}while(0);this.cursor=this.limit-i;e:do{if(!this.r_mark_cAsInA$esjava$0())break e;r:do{r=this.limit-this.cursor;a:do{if(!this.r_mark_sUnUz$esjava$0())break a;break r}while(0);this.cursor=this.limit-r;a:do{if(!this.r_mark_lAr$esjava$0())break a;break r}while(0);this.cursor=this.limit-r;a:do{if(!this.r_mark_yUm$esjava$0())break a;break r}while(0);this.cursor=this.limit-r;a:do{if(!this.r_mark_sUn$esjava$0())break a;break r}while(0);this.cursor=this.limit-r;a:do{if(!this.r_mark_yUz$esjava$0())break a;break r}while(0);this.cursor=this.limit-r}while(0);if(!this.r_mark_ymUs_$esjava$0())break e;break i}while(0);this.cursor=this.limit-i;e:do{if(!this.r_mark_lAr$esjava$0())break e;this.bra=this.cursor,this.slice_del$esjava$0(),a=this.limit-this.cursor;r:do{this.ket=this.cursor;a:do{t=this.limit-this.cursor;t:do{if(!this.r_mark_DUr$esjava$0())break t;break a}while(0);this.cursor=this.limit-t;t:do{if(!this.r_mark_yDU$esjava$0())break t;break a}while(0);this.cursor=this.limit-t;t:do{if(!this.r_mark_ysA$esjava$0())break t;break a}while(0);if(this.cursor=this.limit-t,!this.r_mark_ymUs_$esjava$0()){this.cursor=this.limit-a;break r}}while(0)}while(0);this.B_continue_stemming_noun_suffixes=!1;break i}while(0);this.cursor=this.limit-i;e:do{if(!this.r_mark_nUz$esjava$0())break e;r:do{s=this.limit-this.cursor;a:do{if(!this.r_mark_yDU$esjava$0())break a;break r}while(0);if(this.cursor=this.limit-s,!this.r_mark_ysA$esjava$0())break e}while(0);break i}while(0);this.cursor=this.limit-i;e:do{r:do{n=this.limit-this.cursor;a:do{if(!this.r_mark_sUnUz$esjava$0())break a;break r}while(0);this.cursor=this.limit-n;a:do{if(!this.r_mark_yUz$esjava$0())break a;break r}while(0);this.cursor=this.limit-n;a:do{if(!this.r_mark_sUn$esjava$0())break a;break r}while(0);if(this.cursor=this.limit-n,!this.r_mark_yUm$esjava$0())break e}while(0);this.bra=this.cursor,this.slice_del$esjava$0(),h=this.limit-this.cursor;r:do{if(this.ket=this.cursor,!this.r_mark_ymUs_$esjava$0()){this.cursor=this.limit-h;break r}}while(0);break i}while(0);if(this.cursor=this.limit-i,!this.r_mark_DUr$esjava$0())return!1;this.bra=this.cursor,this.slice_del$esjava$0(),o=this.limit-this.cursor;e:do{this.ket=this.cursor;r:do{l=this.limit-this.cursor;a:do{if(!this.r_mark_sUnUz$esjava$0())break a;break r}while(0);this.cursor=this.limit-l;a:do{if(!this.r_mark_lAr$esjava$0())break a;break r}while(0);this.cursor=this.limit-l;a:do{if(!this.r_mark_yUm$esjava$0())break a;break r}while(0);this.cursor=this.limit-l;a:do{if(!this.r_mark_sUn$esjava$0())break a;break r}while(0);this.cursor=this.limit-l;a:do{if(!this.r_mark_yUz$esjava$0())break a;break r}while(0);this.cursor=this.limit-l}while(0);if(!this.r_mark_ymUs_$esjava$0()){this.cursor=this.limit-o;break e}}while(0)}while(0);return this.bra=this.cursor,this.slice_del$esjava$0(),!0}r_stem_suffix_chain_before_ki$esjava$0(){let i,e,r,a,t,s,n,h,o,l,u;if(this.ket=this.cursor,!this.r_mark_ki$esjava$0())return!1;i:do{i=this.limit-this.cursor;e:do{if(!this.r_mark_DA$esjava$0())break e;this.bra=this.cursor,this.slice_del$esjava$0(),e=this.limit-this.cursor;r:do{this.ket=this.cursor;a:do{r=this.limit-this.cursor;t:do{if(!this.r_mark_lAr$esjava$0())break t;this.bra=this.cursor,this.slice_del$esjava$0(),a=this.limit-this.cursor;s:do{if(!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-a;break s}}while(0);break a}while(0);if(this.cursor=this.limit-r,!this.r_mark_possessives$esjava$0()){this.cursor=this.limit-e;break r}this.bra=this.cursor,this.slice_del$esjava$0(),t=this.limit-this.cursor;t:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-t;break t}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-t;break t}}while(0)}while(0)}while(0);break i}while(0);this.cursor=this.limit-i;e:do{if(!this.r_mark_nUn$esjava$0())break e;this.bra=this.cursor,this.slice_del$esjava$0(),s=this.limit-this.cursor;r:do{this.ket=this.cursor;a:do{n=this.limit-this.cursor;t:do{if(!this.r_mark_lArI$esjava$0())break t;this.bra=this.cursor,this.slice_del$esjava$0();break a}while(0);this.cursor=this.limit-n;t:do{this.ket=this.cursor;s:do{h=this.limit-this.cursor;n:do{if(!this.r_mark_possessives$esjava$0())break n;break s}while(0);if(this.cursor=this.limit-h,!this.r_mark_sU$esjava$0())break t}while(0);this.bra=this.cursor,this.slice_del$esjava$0(),o=this.limit-this.cursor;s:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-o;break s}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-o;break s}}while(0);break a}while(0);if(this.cursor=this.limit-n,!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-s;break r}}while(0)}while(0);break i}while(0);if(this.cursor=this.limit-i,!this.r_mark_ndA$esjava$0())return!1;e:do{l=this.limit-this.cursor;r:do{if(!this.r_mark_lArI$esjava$0())break r;this.bra=this.cursor,this.slice_del$esjava$0();break e}while(0);this.cursor=this.limit-l;r:do{if(!this.r_mark_sU$esjava$0())break r;this.bra=this.cursor,this.slice_del$esjava$0(),u=this.limit-this.cursor;a:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-u;break a}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-u;break a}}while(0);break e}while(0);if(this.cursor=this.limit-l,!this.r_stem_suffix_chain_before_ki$esjava$0())return!1}while(0)}while(0);return!0}r_stem_noun_suffixes$esjava$0(){let i,e,r,a,t,s,n,h,o,l,u,m,_,k,c,d,b,$,f,y,g,j,v,w,p,z,D;i:do{i=this.limit-this.cursor;e:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0())break e;this.bra=this.cursor,this.slice_del$esjava$0(),e=this.limit-this.cursor;r:do{if(!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-e;break r}}while(0);break i}while(0);this.cursor=this.limit-i;e:do{if(this.ket=this.cursor,!this.r_mark_ncA$esjava$0())break e;this.bra=this.cursor,this.slice_del$esjava$0(),r=this.limit-this.cursor;r:do{a:do{a=this.limit-this.cursor;t:do{if(this.ket=this.cursor,!this.r_mark_lArI$esjava$0())break t;this.bra=this.cursor,this.slice_del$esjava$0();break a}while(0);this.cursor=this.limit-a;t:do{this.ket=this.cursor;s:do{t=this.limit-this.cursor;n:do{if(!this.r_mark_possessives$esjava$0())break n;break s}while(0);if(this.cursor=this.limit-t,!this.r_mark_sU$esjava$0())break t}while(0);this.bra=this.cursor,this.slice_del$esjava$0(),s=this.limit-this.cursor;s:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-s;break s}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-s;break s}}while(0);break a}while(0);if(this.cursor=this.limit-a,this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-r;break r}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-r;break r}}while(0)}while(0);break i}while(0);this.cursor=this.limit-i;e:do{this.ket=this.cursor;r:do{n=this.limit-this.cursor;a:do{if(!this.r_mark_ndA$esjava$0())break a;break r}while(0);if(this.cursor=this.limit-n,!this.r_mark_nA$esjava$0())break e}while(0);r:do{h=this.limit-this.cursor;a:do{if(!this.r_mark_lArI$esjava$0())break a;this.bra=this.cursor,this.slice_del$esjava$0();break r}while(0);this.cursor=this.limit-h;a:do{if(!this.r_mark_sU$esjava$0())break a;this.bra=this.cursor,this.slice_del$esjava$0(),o=this.limit-this.cursor;t:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-o;break t}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-o;break t}}while(0);break r}while(0);if(this.cursor=this.limit-h,!this.r_stem_suffix_chain_before_ki$esjava$0())break e}while(0);break i}while(0);this.cursor=this.limit-i;e:do{this.ket=this.cursor;r:do{l=this.limit-this.cursor;a:do{if(!this.r_mark_ndAn$esjava$0())break a;break r}while(0);if(this.cursor=this.limit-l,!this.r_mark_nU$esjava$0())break e}while(0);r:do{u=this.limit-this.cursor;a:do{if(!this.r_mark_sU$esjava$0())break a;this.bra=this.cursor,this.slice_del$esjava$0(),m=this.limit-this.cursor;t:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-m;break t}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-m;break t}}while(0);break r}while(0);if(this.cursor=this.limit-u,!this.r_mark_lArI$esjava$0())break e}while(0);break i}while(0);this.cursor=this.limit-i;e:do{if(this.ket=this.cursor,!this.r_mark_DAn$esjava$0())break e;this.bra=this.cursor,this.slice_del$esjava$0(),_=this.limit-this.cursor;r:do{this.ket=this.cursor;a:do{k=this.limit-this.cursor;t:do{if(!this.r_mark_possessives$esjava$0())break t;this.bra=this.cursor,this.slice_del$esjava$0(),c=this.limit-this.cursor;s:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-c;break s}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-c;break s}}while(0);break a}while(0);this.cursor=this.limit-k;t:do{if(!this.r_mark_lAr$esjava$0())break t;this.bra=this.cursor,this.slice_del$esjava$0(),d=this.limit-this.cursor;s:do{if(!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-d;break s}}while(0);break a}while(0);if(this.cursor=this.limit-k,!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-_;break r}}while(0)}while(0);break i}while(0);this.cursor=this.limit-i;e:do{this.ket=this.cursor;r:do{b=this.limit-this.cursor;a:do{if(!this.r_mark_nUn$esjava$0())break a;break r}while(0);if(this.cursor=this.limit-b,!this.r_mark_ylA$esjava$0())break e}while(0);this.bra=this.cursor,this.slice_del$esjava$0(),$=this.limit-this.cursor;r:do{a:do{f=this.limit-this.cursor;t:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0())break t;if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0())break t;break a}while(0);this.cursor=this.limit-f;t:do{this.ket=this.cursor;s:do{y=this.limit-this.cursor;n:do{if(!this.r_mark_possessives$esjava$0())break n;break s}while(0);if(this.cursor=this.limit-y,!this.r_mark_sU$esjava$0())break t}while(0);this.bra=this.cursor,this.slice_del$esjava$0(),g=this.limit-this.cursor;s:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-g;break s}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-g;break s}}while(0);break a}while(0);if(this.cursor=this.limit-f,!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-$;break r}}while(0)}while(0);break i}while(0);this.cursor=this.limit-i;e:do{if(this.ket=this.cursor,!this.r_mark_lArI$esjava$0())break e;this.bra=this.cursor,this.slice_del$esjava$0();break i}while(0);this.cursor=this.limit-i;e:do{if(!this.r_stem_suffix_chain_before_ki$esjava$0())break e;break i}while(0);this.cursor=this.limit-i;e:do{this.ket=this.cursor;r:do{j=this.limit-this.cursor;a:do{if(!this.r_mark_DA$esjava$0())break a;break r}while(0);this.cursor=this.limit-j;a:do{if(!this.r_mark_yU$esjava$0())break a;break r}while(0);if(this.cursor=this.limit-j,!this.r_mark_yA$esjava$0())break e}while(0);this.bra=this.cursor,this.slice_del$esjava$0(),v=this.limit-this.cursor;r:do{this.ket=this.cursor;a:do{w=this.limit-this.cursor;t:do{if(!this.r_mark_possessives$esjava$0())break t;this.bra=this.cursor,this.slice_del$esjava$0(),p=this.limit-this.cursor;s:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-p;break s}}while(0);break a}while(0);if(this.cursor=this.limit-w,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-v;break r}}while(0);if(this.bra=this.cursor,this.slice_del$esjava$0(),this.ket=this.cursor,!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-v;break r}}while(0);break i}while(0);this.cursor=this.limit-i,this.ket=this.cursor;e:do{z=this.limit-this.cursor;r:do{if(!this.r_mark_possessives$esjava$0())break r;break e}while(0);if(this.cursor=this.limit-z,!this.r_mark_sU$esjava$0())return!1}while(0);this.bra=this.cursor,this.slice_del$esjava$0(),D=this.limit-this.cursor;e:do{if(this.ket=this.cursor,!this.r_mark_lAr$esjava$0()){this.cursor=this.limit-D;break e}if(this.bra=this.cursor,this.slice_del$esjava$0(),!this.r_stem_suffix_chain_before_ki$esjava$0()){this.cursor=this.limit-D;break e}}while(0)}while(0);return!0}r_post_process_last_consonants$esjava$0(){let i;if(this.ket=this.cursor,i=this.find_among_b$esjava$2(c.a_23,4),0===i)return!1;switch(this.bra=this.cursor,i){case 0:return!1;case 1:this.slice_from$esjava$1("p");break;case 2:this.slice_from$esjava$1("ç");break;case 3:this.slice_from$esjava$1("t");break;case 4:this.slice_from$esjava$1("k")}return!0}r_append_U_to_stems_ending_with_d_or_g$esjava$0(){let i,e,r,a,t,s,n,h,o,l,u,m,_,k,d;i=this.limit-this.cursor;i:do{e=this.limit-this.cursor;e:do{if(!this.eq_s_b$esjava$2(1,"d"))break e;break i}while(0);if(this.cursor=this.limit-e,!this.eq_s_b$esjava$2(1,"g"))return!1}while(0);this.cursor=this.limit-i;i:do{r=this.limit-this.cursor;e:do{a=this.limit-this.cursor;r:for(;;){t=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break a;this.cursor=this.limit-t;break r}while(0);if(this.cursor=this.limit-t,this.cursor<=this.limit_backward)break e;this.cursor--}r:do{s=this.limit-this.cursor;a:do{if(!this.eq_s_b$esjava$2(1,"a"))break a;break r}while(0);if(this.cursor=this.limit-s,!this.eq_s_b$esjava$2(1,"ı"))break e}while(0);this.cursor=this.limit-a;{const i=this.cursor;this.insert$esjava$3(this.cursor,this.cursor,"ı"),this.cursor=i}break i}while(0);this.cursor=this.limit-r;e:do{n=this.limit-this.cursor;r:for(;;){h=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break a;this.cursor=this.limit-h;break r}while(0);if(this.cursor=this.limit-h,this.cursor<=this.limit_backward)break e;this.cursor--}r:do{o=this.limit-this.cursor;a:do{if(!this.eq_s_b$esjava$2(1,"e"))break a;break r}while(0);if(this.cursor=this.limit-o,!this.eq_s_b$esjava$2(1,"i"))break e}while(0);this.cursor=this.limit-n;{const i=this.cursor;this.insert$esjava$3(this.cursor,this.cursor,"i"),this.cursor=i}break i}while(0);this.cursor=this.limit-r;e:do{l=this.limit-this.cursor;r:for(;;){u=this.limit-this.cursor;a:do{if(!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break a;this.cursor=this.limit-u;break r}while(0);if(this.cursor=this.limit-u,this.cursor<=this.limit_backward)break e;this.cursor--}r:do{m=this.limit-this.cursor;a:do{if(!this.eq_s_b$esjava$2(1,"o"))break a;break r}while(0);if(this.cursor=this.limit-m,!this.eq_s_b$esjava$2(1,"u"))break e}while(0);this.cursor=this.limit-l;{const i=this.cursor;this.insert$esjava$3(this.cursor,this.cursor,"u"),this.cursor=i}break i}while(0);this.cursor=this.limit-r,_=this.limit-this.cursor;e:for(;;){k=this.limit-this.cursor;r:do{if(!this.in_grouping_b$esjava$3(c.g_vowel,97,305))break r;this.cursor=this.limit-k;break e}while(0);if(this.cursor=this.limit-k,this.cursor<=this.limit_backward)return!1;this.cursor--}e:do{d=this.limit-this.cursor;r:do{if(!this.eq_s_b$esjava$2(1,"ö"))break r;break e}while(0);if(this.cursor=this.limit-d,!this.eq_s_b$esjava$2(1,"ü"))return!1}while(0);this.cursor=this.limit-_;{const i=this.cursor;this.insert$esjava$3(this.cursor,this.cursor,"ü"),this.cursor=i}}while(0);return!0}r_more_than_one_syllable_word$esjava$0(){let i,e;i=this.cursor;{let i=2;i:for(;;){e=this.cursor;e:do{r:for(;;){a:do{if(!this.in_grouping$esjava$3(c.g_vowel,97,305))break a;break r}while(0);if(this.cursor>=this.limit)break e;this.cursor++}i--;continue i}while(0);this.cursor=e;break i}if(i>0)return!1}return this.cursor=i,!0}r_is_reserved_word$esjava$0(){let i,e,r;i:do{i=this.cursor;e:do{e=this.cursor;r:for(;;){a:do{if(!this.eq_s$esjava$2(2,"ad"))break a;break r}while(0);if(this.cursor>=this.limit)break e;this.cursor++}if(this.I_strlen=2,this.I_strlen!==this.limit)break e;this.cursor=e;break i}while(0);this.cursor=i,r=this.cursor;e:for(;;){r:do{if(!this.eq_s$esjava$2(5,"soyad"))break r;break e}while(0);if(this.cursor>=this.limit)return!1;this.cursor++}if(this.I_strlen=5,this.I_strlen!==this.limit)return!1;this.cursor=r}while(0);return!0}r_postlude$esjava$0(){let i,e,r;i=this.cursor;i:do{if(!this.r_is_reserved_word$esjava$0())break i;return!1}while(0);this.cursor=i,this.limit_backward=this.cursor,this.cursor=this.limit,e=this.limit-this.cursor;i:do{if(!this.r_append_U_to_stems_ending_with_d_or_g$esjava$0())break i}while(0);this.cursor=this.limit-e,r=this.limit-this.cursor;i:do{if(!this.r_post_process_last_consonants$esjava$0())break i}while(0);return this.cursor=this.limit-r,this.cursor=this.limit_backward,!0}stem$esjava$0(){let i,e;if(!this.r_more_than_one_syllable_word$esjava$0())return!1;this.limit_backward=this.cursor,this.cursor=this.limit,i=this.limit-this.cursor;i:do{if(!this.r_stem_nominal_verb_suffixes$esjava$0())break i}while(0);if(this.cursor=this.limit-i,!this.B_continue_stemming_noun_suffixes)return!1;e=this.limit-this.cursor;i:do{if(!this.r_stem_noun_suffixes$esjava$0())break i}while(0);return this.cursor=this.limit-e,this.cursor=this.limit_backward,!!this.r_postlude$esjava$0()}stem(...i){return 0===i.length?this.stem$esjava$0(...i):super.stem(...i)}}const d=c,{baseStemmer:b}=r.languageProcessing;function $(i){const e=(0,l.get)(i.getData("morphology"),"tr",!1);return e?i=>function(i,e){i=(i=i.toLowerCase()).replace("'","");const r=new d(e);return r.setCurrent(i),r.stem(),r.getCurrent()}(i,e):b}const f=["nmak","nmek","nir","nır","nür","nur","nıyor","niyor","ndı","ndi","ndu","ndü","nmış","nmiÅŸ","nmuÅŸ","nmüş","necek","nacak","nmıştı","nmiÅŸti","nmuÅŸtu","nmüştü","nıyordu","niyordu","nuyordu","nüyordu","necekti","nacaktı","nsa","nse","nmalı","nmeli","nmaz","nmez","anmak","enmek","ınmak","inmek","unmak","ünmek","anır","enir","ınır","inir","unur","ünür","anıyor","eniyor","ınıyor","iniyor","unuyor","ünüyor","andı","endi","ındı","indi","undu","ündü","anmış","enmiÅŸ","ınmış","inmiÅŸ","unmuÅŸ","ünmüş","anacak","enecek","ınacak","inecek","unacak","ünecek","ınmıştı","inmiÅŸti","unmuÅŸtu","ünmüştü","ınıyordu","iniyordu","unuyordu","ünüyordu","necekti","nacaktı","ansa","ense","ınsa","inse","unsa","ünse","anmalı","enmeli","ınmalı","inmeli","unmalı","ünmeli","anmaz","enmez","ınmaz","inmez","unmaz","ünmez","ılmak","ilmek","ulmak","ülmek","ılır","ilir","ulur","ülür","ılınıyor","iliniyor","ulunuyor","ülüyor","ıldı","ildi","uldu","üldü","ılmış","ilmiÅŸ","ulmuÅŸ","ülmül","ılacak","ilecek","ulacak","ülecek","ılmıştı","ilmiÅŸti","ulmuÅŸtu","ülmüştü","ılıyordu","iliyordu","uluyordu","ülüyordu","necekti","nacaktı","ılsa","ilse","ulsa","ülse","ılmalı","ilmeli","ulmalı","ülmeli","ılmaz","ilmez","ulmaz","ülmez"],y=["kullanmak","ulanmak","baÄŸlanmak","alınmak","boÅŸanmak","kaçınmak","hazırlanmak","olunmak","sığınmak","taşınmak","arlanmak","sakınmak","zanmak","tırmanmak","i̇nanmak","arınmak","kullanmak","isınmak","yıkanmak","öğrenmek","öğrenmek","düşünmek","renmek","düşünmek","ünmek","dönmek","deÄŸinmek","eÄŸlenmek","lenmek","öğünmek","deyinmek","örenmek","görünmek","öğrenmek","güvenmek","beÄŸenmek","sünmek","geçinmek","tükenmek","kabullenmek","öğrenmek","kabullenmek","sinir","peynir","münir","alınır","kazanır","yorumlanır","kullanır","uygulanır","dayanır","saÄŸlanır","i̇nanır","özenir","elenir","öğrenir","tersinir","yaÅŸanır","toplanır","tanır","senir","rastlanır","renir","münir","kaynaklanır","baÄŸlanır","hazırlanır","güvenir","enir","söylenir","baÅŸlanır","davranır","kapanır","oynanır","uzanır","tanımlanır","tanınır","souvenir","öğrenir","taşınır","konteyner","uyanır","beÄŸenir","hesaplanır","sanır","saklanır","yakalanır","aranır","algılanır","hoÅŸlanır","karşılanır","tamamlanır","münir","yayınlanır","yıkanır","tekrarlanır","atanır","bir","karasenir","i̇ndüklenir","zorlanır","avenir","erdenir","kas-sinir","utanır","üstenir","katlanır","beyazpeynir","ÅŸekillenir","sonuçlanır","doÄŸranır","narin","faydalanır","kilinir","hızlanır","yararlanır","kutlanır","saptanır","nedendir","kalınır","ayarlanır","kıskanır","hastalanır","suvenir","yapılabilinir","canlanır","ekillenir","hacklenir","haÅŸlanır","sonuçlanır","resetlenir","beÄŸenir","açıklanır","programming-sinir","i̇sindir","odaklanır","pionir","çalınır","peynir","tutuklanır","sınır","taşımalık","anır","kanır","adanır","lanır","ültanır","rastlanır","haktanır","güneysınır","i̇nanır","açılır-kapanır","saÄŸlanır","tanrı tanır","baÄŸlanır","tanır","yansır","kullanır","açıklanır","dizaynır","düşünür","görünür","siyanür","dünür","düşünür","ünür","çürür","ömür","nür","öğünür","onur","aynur","i̇lknur","ayÅŸenur","öznur","konur","binnur","alinur","gülnur","hükmolunur","atanur","rıza nur","yurdanur","ÅŸennur","fatmanur","ÅŸennur","zinnur","adanur","semanur","elanur","düşünür","baykonur","edanur","göknur","günnur","beyzanur","görünür","nisanur","saynur","mecnur","lunur","stem","cemalnur","i̇lknur","aynur","elnur","addolunur","ayÅŸenur","birnur","sedanur","alanur","esmanur","elifnur","ÅŸahnur","aydanur","senanur","ecenur","havvanur","bozunur","bennur","en-nur","tennur","konur","reddolunur","sondur","olunur","ÅŸeymanur","ÅŸerefnur","fernur","stem","ceynur","zeynur","gökçenur","mervenur","ernur","sonunur","biyobozunur","ÅŸemsinur","haÅŸrolunur","incinur","lanıyor","kulanıyor","nıyor","rastlanıyor","kullanıyor","kaynaklanıyor","kazanıyor","yaÅŸanıyor","alınıyor","i̇nanıyor","tanıyor","hazırlanıyor","dayanıyor","söyleniyor","sanıyor","uygulanıyor","yanıyor","eleniyor","davranıyor","aranıyor","öğreniyor","saÄŸlanıyor","kapanıyor","zorlanıyor","tanınıyor","kombinleniyor","yayınlanıyor","oynanıyor","beÄŸeniyor","uyanıyor","planlanıyor","toplanıyor","reniyor","niyor","öğreniyor","baÄŸlanıyor","uzanıyor","algılanıyor","söyleniyor","tanımlanıyor","vurgulanıyor","karşılanıyor","kınıyor","saklanıyor","baÅŸlanıyor","yükleniyor","sıralanıyor","alındı","kendi","pazubandı","nındı","irgandı","yapsındı","yarabandı","açıklandı","baÄŸlandı","kendi","efendi","beyefendi","hanımefendi","i̇kindi","hocaefendi","hindi","bindi","gandi","nakÅŸibendi","selendi","beyefendi","bondi","alindi","kazandı","veliefendi","hanendi","hacklendi","burundi","kullandı","i̇vrindi","baÅŸlandı","yasandı","lendi","yayınlandı","andı","merkezefendi","demirhindi","vivendi","grandi","ögrendi","aczmendi","mundi","kapandı","hanendi","kandil","i̇nsandı","çinhindi","randi","yandı","ÅŸimdi","semerkant","açıklandı","ravalpindi","tamamlandı","kadınefendi","landi","brendi","beÄŸendi","gecekondu","hindu","soundu","katmandu","kundu","olsundu","poundu","katmandu","duÅŸundu","emrolundu","vahyolundu","hindu","lundu","candu","roundu","göründü","paundu","fırdöndü","düşündü","fondü","üründü","gündöndü","mumsöndü","kendü","i̇nanmış","ınmış","i̇spatlanmış","nınmış","baÄŸlanmış","hazırlanmış","lenmiÅŸ","hacklenmiÅŸ","öğrenmiÅŸ","i̇ndüklenmiÅŸ","sinterlenmiÅŸ","begenmiÅŸ","alinmiÅŸ","kombinlenmiÅŸ","lânetlenmiÅŸ","editlenmiÅŸ","yenmiÅŸ","temperlenmiÅŸ","beyenmiÅŸ","kazanmiÅŸ","olsunmuÅŸ","emrolunmuÅŸ","lunmuÅŸ","yunmuÅŸ","özüdönmüş","söylenecek","düşünecek","öğrenecek","lenecek","düşünecek","düzenlenecek","öğrenecek","renecek","nacak","alınacak","lanacak","kazanmıştı","lenmiÅŸti","emrolunmuÅŸtu","i̇nanıyordu","kullanıyordu","tanıyordu","dayanıyordu","görünüyordu","düşünüyordu","nuyordu","düşünüyordu","ünüyordu","fransa","floransa","lufthansa","prensa","yakınsa","konsa","hansa","sansa","mensa","türkiye-fransa","türbülansa","ofansa","hiltonsa","almanya-fransa","yünsa","jinsa","ınsa","nınsa","winsa","hünsa","extensa","demansa","fıransa","advansa","tnsa","ingiltere-fransa","ambiyansa","ünsa","rönesansa","cheonsa","malpensa","densa","finanse","ense","lanse","adsense","response","defense","sübvanse","pense","intense","expense","alphonse","kompanse","mumkunse","odense","fluminense","ninse","offense","intellisense","nonsense","anse","pfsense","immense","gorunse","hernedense","danse","mightyadsense","hisense","hortense","adriaanse","süspanse","önmeli","ögrenmeli","taşınmaz","kuÅŸkonmaz","sınmaz","alınmaz","taşınmaz","lanmaz","osanmaz","hoÅŸlanmaz","sönmez","dönmez","bölünmez","ersönmez","dönmez","görünmez","üşenmez","sönmez","görünmez","yinmez","sönmez","kullanmak","baÄŸlanmak","boÅŸanmak","hazırlanmak","öğrenmek","öğrenmek","renmek","eÄŸlenmek","lenmek","örenmek","öğrenmek","sığınmak","deÄŸinmek","deyinmek","düşünmek","eriÅŸilebilir","güvenilir","aktarabilecek"],g=["sevi","giyi","gezi","ayrı","tıka","ayrı","sarı","övü","boÅŸa","besle","kırı","soyu","yıka","süsle","içle","besle","tara","çeki","çözü","hazırla","üzü","yıkı","yıka","kovu","sıkı","söyle","kaçı","kapa","kası","koru","sarsı","sığı","kurula","yakı","yoru","taşı","uza","takı","yala","atı","iyileÅŸ","sinirle","dövü"],{getWords:j}=r.languageProcessing;function v(i){let e=j(i).filter((i=>i.length>5));return e=e.filter((i=>!y.includes(i))),e=function(i){return i.filter((i=>g.some((e=>f.some((function(r){return!new RegExp("^"+e+r+"$").test(i)}))))))}(e),e.some((i=>f.some((e=>i.endsWith(e)))))}const{AbstractResearcher:w}=r.languageProcessing;class p extends w{constructor(i){super(i),delete this.defaultResearches.getFleschReadingScore,Object.assign(this.config,{language:"tr",passiveConstructionType:"morphological",firstWordExceptions:a,functionWords:n,transitionWords:s,twoPartTransitionWords:h,sentenceLength:o}),Object.assign(this.helpers,{getStemmer:$,isPassiveSentence:v})}}(window.yoast=window.yoast||{}).Researcher=e})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/network-admin.js b/wp/wp-content/plugins/wordpress-seo/js/dist/network-admin.js new file mode 100644 index 00000000..546b1758 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/network-admin.js @@ -0,0 +1 @@ +(()=>{var e={2322:e=>{var t,n,a="",r=function(e){e=e||"polite";var t=document.createElement("div");return t.id="a11y-speak-"+e,t.className="a11y-speak-region",t.setAttribute("style","clip: rect(1px, 1px, 1px, 1px); position: absolute; height: 1px; width: 1px; overflow: hidden; word-wrap: normal;"),t.setAttribute("aria-live",e),t.setAttribute("aria-relevant","additions text"),t.setAttribute("aria-atomic","true"),document.querySelector("body").appendChild(t),t};!function(e){if("complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll)return e();document.addEventListener("DOMContentLoaded",e)}((function(){t=document.getElementById("a11y-speak-polite"),n=document.getElementById("a11y-speak-assertive"),null===t&&(t=r("polite")),null===n&&(n=r("assertive"))})),e.exports=function(e,r){!function(){for(var e=document.querySelectorAll(".a11y-speak-region"),t=0;t]+>/g," "),a===e&&(e+=" "),a=e,n&&"assertive"===r?n.textContent=e:t&&(t.textContent=e)}}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var o=t[a]={exports:{}};return e[a](o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=n(2322),t=n.n(e);const a=window.jQuery;!function(e){function n(n){var a,r,o=e(".wrap > h1");n.length&&(a=n.map((function(e){return"

            "+e.message+"

            "})),o.after(a.join("")),r=wpseoNetworkAdminGlobalL10n.error_prefix,"updated"===n[0].type&&(r=wpseoNetworkAdminGlobalL10n.success_prefix),t()(r.replace("%s",n[0].message),"assertive"))}function a(t){var a=e(this),r=a.find("[type='submit']:focus"),o=a.serialize();return t.preventDefault(),e(".wrap > .notice").remove(),r.length||(r=e(".wpseotab.active [type='submit']")),"action"===r.attr("name")&&(o=o.replace(/action=([a-zA-Z0-9_]+)/,"action="+r.val())),e.ajax({type:"POST",url:ajaxurl,data:o}).done((function(e){e.data&&n(e.data)})).fail((function(e){var t=e.responseJSON;t&&t.data&&n(t.data)})),!1}e(document).ready((function(){var t=e("#wpseo-conf");t.length&&t.on("submit",a)}))}(n.n(a)())})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/new-settings.js b/wp/wp-content/plugins/wordpress-seo/js/dist/new-settings.js new file mode 100644 index 00000000..2b0f904c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/new-settings.js @@ -0,0 +1,349 @@ +(()=>{var e={1206:function(e){e.exports=function(e){var t={};function s(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,s),a.l=!0,a.exports}return s.m=e,s.c=t,s.d=function(e,t,r){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(s.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)s.d(r,a,function(t){return e[t]}.bind(null,a));return r},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=90)}({17:function(e,t,s){"use strict";t.__esModule=!0,t.default=void 0;var r=s(18),a=function(){function e(){}return e.getFirstMatch=function(e,t){var s=t.match(e);return s&&s.length>0&&s[1]||""},e.getSecondMatch=function(e,t){var s=t.match(e);return s&&s.length>1&&s[2]||""},e.matchAndReturnConst=function(e,t,s){if(e.test(t))return s},e.getWindowsVersionName=function(e){switch(e){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,s,r){void 0===r&&(r=!1);var a=e.getVersionPrecision(t),o=e.getVersionPrecision(s),n=Math.max(a,o),i=0,l=e.map([t,s],(function(t){var s=n-e.getVersionPrecision(t),r=t+new Array(s+1).join(".0");return e.map(r.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(r&&(i=n-Math.min(a,o)),n-=1;n>=i;){if(l[0][n]>l[1][n])return 1;if(l[0][n]===l[1][n]){if(n===i)return 0;n-=1}else if(l[0][n]1?a-1:0),n=1;n0){var n=Object.keys(s),l=i.default.find(n,(function(e){return t.isOS(e)}));if(l){var c=this.satisfies(s[l]);if(void 0!==c)return c}var d=i.default.find(n,(function(e){return t.isPlatform(e)}));if(d){var u=this.satisfies(s[d]);if(void 0!==u)return u}}if(o>0){var p=Object.keys(a),m=i.default.find(p,(function(e){return t.isBrowser(e,!0)}));if(void 0!==m)return this.compareVersion(a[m])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var s=this.getBrowserName().toLowerCase(),r=e.toLowerCase(),a=i.default.getBrowserTypeByAlias(r);return t&&a&&(r=a.toLowerCase()),r===s},t.compareVersion=function(e){var t=[0],s=e,r=!1,a=this.getBrowserVersion();if("string"==typeof a)return">"===e[0]||"<"===e[0]?(s=e.substr(1),"="===e[1]?(r=!0,s=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?s=e.substr(1):"~"===e[0]&&(r=!0,s=e.substr(1)),t.indexOf(i.default.compareVersions(a,s,r))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=c,e.exports=t.default},92:function(e,t,s){"use strict";t.__esModule=!0,t.default=void 0;var r,a=(r=s(17))&&r.__esModule?r:{default:r},o=/version\/(\d+(\.?_?\d+)+)/i,n=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},s=a.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},s=a.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},s=a.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},s=a.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},s=a.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},s=a.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},s=a.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},s=a.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},s=a.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},s=a.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},s=a.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},s=a.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},s=a.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},s=a.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},s=a.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return s&&(t.version=s),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},s=a.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},s=a.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},s=a.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},s=a.default.getFirstMatch(o,e)||a.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},s=a.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},s=a.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},s=a.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},s=a.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},s=a.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},s=a.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},s=a.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},s=a.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},s=a.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:function(e){var t=!e.test(/like android/i),s=e.test(/android/i);return t&&s},describe:function(e){var t={name:"Android Browser"},s=a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},s=a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},s=a.default.getFirstMatch(o,e);return s&&(t.version=s),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:a.default.getFirstMatch(t,e),version:a.default.getSecondMatch(t,e)}}}];t.default=n,e.exports=t.default},93:function(e,t,s){"use strict";t.__esModule=!0,t.default=void 0;var r,a=(r=s(17))&&r.__esModule?r:{default:r},o=s(18),n=[{test:[/Roku\/DVP/],describe:function(e){var t=a.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:o.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=a.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:o.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=a.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),s=a.default.getWindowsVersionName(t);return{name:o.OS_MAP.Windows,version:t,versionName:s}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:o.OS_MAP.iOS},s=a.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return s&&(t.version=s),t}},{test:[/macintosh/i],describe:function(e){var t=a.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),s=a.default.getMacOSVersionName(t),r={name:o.OS_MAP.MacOS,version:t};return s&&(r.versionName=s),r}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=a.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:o.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),s=e.test(/android/i);return t&&s},describe:function(e){var t=a.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),s=a.default.getAndroidVersionName(t),r={name:o.OS_MAP.Android,version:t};return s&&(r.versionName=s),r}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=a.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),s={name:o.OS_MAP.WebOS};return t&&t.length&&(s.version=t),s}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=a.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||a.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||a.default.getFirstMatch(/\bbb(\d+)/i,e);return{name:o.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=a.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:o.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=a.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:o.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:o.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:o.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=a.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:o.OS_MAP.PlayStation4,version:t}}}];t.default=n,e.exports=t.default},94:function(e,t,s){"use strict";t.__esModule=!0,t.default=void 0;var r,a=(r=s(17))&&r.__esModule?r:{default:r},o=s(18),n=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=a.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",s={type:o.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(s.model=t),s}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:o.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:o.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:o.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:o.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:o.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:o.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),s=e.test(/like (ipod|iphone)/i);return t&&!s},describe:function(e){var t=a.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:o.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:o.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:o.PLATFORMS_MAP.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:o.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:function(){return{type:o.PLATFORMS_MAP.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:o.PLATFORMS_MAP.tv}}}];t.default=n,e.exports=t.default},95:function(e,t,s){"use strict";t.__esModule=!0,t.default=void 0;var r,a=(r=s(17))&&r.__esModule?r:{default:r},o=s(18),n=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:o.ENGINE_MAP.Blink};var t=a.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:o.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:o.ENGINE_MAP.Trident},s=a.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:o.ENGINE_MAP.Presto},s=a.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:function(e){var t=e.test(/gecko/i),s=e.test(/like gecko/i);return t&&!s},describe:function(e){var t={name:o.ENGINE_MAP.Gecko},s=a.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:o.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:o.ENGINE_MAP.WebKit},s=a.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return s&&(t.version=s),t}}];t.default=n,e.exports=t.default}})},4184:(e,t)=>{var s;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";var r=s(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},n={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function l(e){return r.isMemo(e)?n:i[e.$$typeof]||a}i[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0};var c=Object.defineProperty,d=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,m=Object.getPrototypeOf,f=Object.prototype;e.exports=function e(t,s,r){if("string"!=typeof s){if(f){var a=m(s);a&&a!==f&&e(t,a,r)}var n=d(s);u&&(n=n.concat(u(s)));for(var i=l(t),h=l(s),y=0;y{"use strict";var t=Array.isArray,s=Object.keys,r=Object.prototype.hasOwnProperty,a="undefined"!=typeof Element;function o(e,n){if(e===n)return!0;if(e&&n&&"object"==typeof e&&"object"==typeof n){var i,l,c,d=t(e),u=t(n);if(d&&u){if((l=e.length)!=n.length)return!1;for(i=l;0!=i--;)if(!o(e[i],n[i]))return!1;return!0}if(d!=u)return!1;var p=e instanceof Date,m=n instanceof Date;if(p!=m)return!1;if(p&&m)return e.getTime()==n.getTime();var f=e instanceof RegExp,h=n instanceof RegExp;if(f!=h)return!1;if(f&&h)return e.toString()==n.toString();var y=s(e);if((l=y.length)!==s(n).length)return!1;for(i=l;0!=i--;)if(!r.call(n,y[i]))return!1;if(a&&e instanceof Element&&n instanceof Element)return e===n;for(i=l;0!=i--;)if(!("_owner"===(c=y[i])&&e.$$typeof||o(e[c],n[c])))return!1;return!0}return e!=e&&n!=n}e.exports=function(e,t){try{return o(e,t)}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: react-fast-compare does not handle circular references.",e.name,e.message),!1;throw e}}},5760:e=>{"use strict";function t(e){this._maxSize=e,this.clear()}t.prototype.clear=function(){this._size=0,this._values=Object.create(null)},t.prototype.get=function(e){return this._values[e]},t.prototype.set=function(e,t){return this._size>=this._maxSize&&this.clear(),e in this._values||this._size++,this._values[e]=t};var s=/[^.^\]^[]+|(?=\[\]|\.\.)/g,r=/^\d+$/,a=/^\d/,o=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,n=/^\s*(['"]?)(.*?)(\1)\s*$/,i=new t(512),l=new t(512),c=new t(512);function d(e){return i.get(e)||i.set(e,u(e).map((function(e){return e.replace(n,"$2")})))}function u(e){return e.match(s)||[""]}function p(e){return"string"==typeof e&&e&&-1!==["'",'"'].indexOf(e.charAt(0))}function m(e){return!p(e)&&(function(e){return e.match(a)&&!e.match(r)}(e)||function(e){return o.test(e)}(e))}e.exports={Cache:t,split:u,normalizePath:d,setter:function(e){var t=d(e);return l.get(e)||l.set(e,(function(e,s){for(var r=0,a=t.length,o=e;r{"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.assign||function(e){for(var t=1;t1?t-1:0),r=1;re.height),d(m,this.animationStateClasses.animatingToHeightZero,0===v.height),d(m,this.animationStateClasses.animatingToHeightAuto,"auto"===v.height),d(m,this.animationStateClasses.animatingToHeightSpecific,v.height>0),m)),k=this.getStaticStateClasses(v.height);this.setState({animationStateClasses:x,height:b,overflow:"hidden",shouldUseTransitions:!E}),clearTimeout(this.timeoutID),clearTimeout(this.animationClassesTimeoutID),E?(v.shouldUseTransitions=!0,f(this.animationFrameIDs),this.animationFrameIDs=(s=function(){a.setState(v),_(p,{newHeight:v.height})},(r=[])[0]=requestAnimationFrame((function(){r[1]=requestAnimationFrame((function(){s()}))})),r),this.animationClassesTimeoutID=setTimeout((function(){a.setState({animationStateClasses:k,shouldUseTransitions:!1}),a.hideContent(v.height),_(u,{newHeight:v.height})}),g)):(_(p,{newHeight:b}),this.timeoutID=setTimeout((function(){v.animationStateClasses=k,v.shouldUseTransitions=!1,a.setState(v),"auto"!==c&&a.hideContent(b),_(u,{newHeight:b})}),g))}}},{key:"componentWillUnmount",value:function(){f(this.animationFrameIDs),clearTimeout(this.timeoutID),clearTimeout(this.animationClassesTimeoutID),this.timeoutID=null,this.animationClassesTimeoutID=null,this.animationStateClasses=null}},{key:"showContent",value:function(e){0===e&&(this.contentElement.style.display="")}},{key:"hideContent",value:function(e){0===e&&(this.contentElement.style.display="none")}},{key:"getStaticStateClasses",value:function(e){var t;return(0,l.default)((d(t={},this.animationStateClasses.static,!0),d(t,this.animationStateClasses.staticHeightZero,0===e),d(t,this.animationStateClasses.staticHeightSpecific,e>0),d(t,this.animationStateClasses.staticHeightAuto,"auto"===e),t))}},{key:"render",value:function(){var e,t=this,s=this.props,r=s.animateOpacity,o=s.applyInlineTransitions,i=s.children,c=s.className,u=s.contentClassName,f=s.delay,h=s.duration,y=s.easing,_=s.id,w=s.style,g=this.state,b=g.height,v=g.overflow,E=g.animationStateClasses,x=g.shouldUseTransitions,k=a({},w,{height:b,overflow:v||w.overflow});x&&o&&(k.transition="height "+h+"ms "+y+" "+f+"ms",w.transition&&(k.transition=w.transition+", "+k.transition),k.WebkitTransition=k.transition);var S={};r&&(S.transition="opacity "+h+"ms "+y+" "+f+"ms",S.WebkitTransition=S.transition,0===b&&(S.opacity=0));var L=(0,l.default)((d(e={},E,!0),d(e,c,c),e)),T=void 0!==this.props["aria-hidden"]?this.props["aria-hidden"]:0===b;return n.default.createElement("div",a({},m.apply(void 0,[this.props].concat(p)),{"aria-hidden":T,className:L,id:_,style:k}),n.default.createElement("div",{className:u,style:S,ref:function(e){return t.contentElement=e}},i))}}]),t}(n.default.Component);w.propTypes={"aria-hidden":i.default.bool,animateOpacity:i.default.bool,animationStateClasses:i.default.object,applyInlineTransitions:i.default.bool,children:i.default.any.isRequired,className:i.default.string,contentClassName:i.default.string,delay:i.default.number,duration:i.default.number,easing:i.default.string,height:function(e,t,s){var a=e[t];return"number"==typeof a&&a>=0||y(a)||"auto"===a?null:new TypeError('value "'+a+'" of type "'+(void 0===a?"undefined":r(a))+'" is invalid type for '+t+" in "+s+'. It needs to be a positive number, string "auto" or percentage string (e.g. "15%").')},id:i.default.string,onAnimationEnd:i.default.func,onAnimationStart:i.default.func,style:i.default.object},w.defaultProps={animateOpacity:!1,animationStateClasses:u,applyInlineTransitions:!0,duration:250,delay:0,easing:"ease",style:{}},t.Z=w},591:e=>{for(var t=[],s=0;s<256;++s)t[s]=(s+256).toString(16).substr(1);e.exports=function(e,s){var r=s||0,a=t;return[a[e[r++]],a[e[r++]],a[e[r++]],a[e[r++]],"-",a[e[r++]],a[e[r++]],"-",a[e[r++]],a[e[r++]],"-",a[e[r++]],a[e[r++]],"-",a[e[r++]],a[e[r++]],a[e[r++]],a[e[r++]],a[e[r++]],a[e[r++]]].join("")}},9176:e=>{var t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(t){var s=new Uint8Array(16);e.exports=function(){return t(s),s}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),r[t]=e>>>((3&t)<<3)&255;return r}}},3409:(e,t,s)=>{var r=s(9176),a=s(591);e.exports=function(e,t,s){var o=t&&s||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var n=(e=e||{}).random||(e.rng||r)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t)for(var i=0;i<16;++i)t[o+i]=n[i];return t||a(n)}},9921:(e,t)=>{"use strict";var s="function"==typeof Symbol&&Symbol.for,r=s?Symbol.for("react.element"):60103,a=s?Symbol.for("react.portal"):60106,o=s?Symbol.for("react.fragment"):60107,n=s?Symbol.for("react.strict_mode"):60108,i=s?Symbol.for("react.profiler"):60114,l=s?Symbol.for("react.provider"):60109,c=s?Symbol.for("react.context"):60110,d=s?Symbol.for("react.async_mode"):60111,u=s?Symbol.for("react.concurrent_mode"):60111,p=s?Symbol.for("react.forward_ref"):60112,m=s?Symbol.for("react.suspense"):60113,f=s?Symbol.for("react.suspense_list"):60120,h=s?Symbol.for("react.memo"):60115,y=s?Symbol.for("react.lazy"):60116,_=s?Symbol.for("react.block"):60121,w=s?Symbol.for("react.fundamental"):60117,g=s?Symbol.for("react.responder"):60118,b=s?Symbol.for("react.scope"):60119;function v(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case d:case u:case o:case i:case n:case m:return e;default:switch(e=e&&e.$$typeof){case c:case p:case y:case h:case l:return e;default:return t}}case a:return t}}}function E(e){return v(e)===u}t.AsyncMode=d,t.ConcurrentMode=u,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=o,t.Lazy=y,t.Memo=h,t.Portal=a,t.Profiler=i,t.StrictMode=n,t.Suspense=m,t.isAsyncMode=function(e){return E(e)||v(e)===d},t.isConcurrentMode=E,t.isContextConsumer=function(e){return v(e)===c},t.isContextProvider=function(e){return v(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return v(e)===p},t.isFragment=function(e){return v(e)===o},t.isLazy=function(e){return v(e)===y},t.isMemo=function(e){return v(e)===h},t.isPortal=function(e){return v(e)===a},t.isProfiler=function(e){return v(e)===i},t.isStrictMode=function(e){return v(e)===n},t.isSuspense=function(e){return v(e)===m},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===u||e===i||e===n||e===m||e===f||"object"==typeof e&&null!==e&&(e.$$typeof===y||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===w||e.$$typeof===g||e.$$typeof===b||e.$$typeof===_)},t.typeOf=v},9864:(e,t,s)=>{"use strict";e.exports=s(9921)},5251:(e,t,s)=>{"use strict";var r=s(9196);Symbol.for("react.element"),Symbol.for("react.fragment"),Object.prototype.hasOwnProperty,r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner},5893:(e,t,s)=>{"use strict";s(5251)},4633:e=>{function t(e,t){var s=e.length,r=new Array(s),a={},o=s,n=function(e){for(var t=new Map,s=0,r=e.length;s{var s;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";e.exports=window.React},5890:e=>{"use strict";e.exports=window.yoast.propTypes}},t={};function s(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,s),o.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=s(9196),t=s.n(e);const r=window.wp.components,a=window.wp.data,o=window.wp.domReady;var n=s.n(o);const i=window.wp.element,l=window.yoast.uiLibrary;var c=s(667),d=s.n(c),u=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===p}(e)}(e)},p="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function m(e,t){return!1!==t.clone&&t.isMergeableObject(e)?h((s=e,Array.isArray(s)?[]:{}),e,t):e;var s}function f(e,t,s){return e.concat(t).map((function(e){return m(e,s)}))}function h(e,t,s){(s=s||{}).arrayMerge=s.arrayMerge||f,s.isMergeableObject=s.isMergeableObject||u;var r=Array.isArray(t);return r===Array.isArray(e)?r?s.arrayMerge(e,t,s):function(e,t,s){var r={};return s.isMergeableObject(e)&&Object.keys(e).forEach((function(t){r[t]=m(e[t],s)})),Object.keys(t).forEach((function(a){s.isMergeableObject(t[a])&&e[a]?r[a]=h(e[a],t[a],s):r[a]=m(t[a],s)})),r}(e,t,s):m(t,s)}h.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,s){return h(e,s,t)}),{})};const y=h,_=window.lodash.isPlainObject;var w=s.n(_);const g=window.lodash.clone;var b=s.n(g);const v=window.lodash.toPath;var E=s.n(v);const x=function(e,t){};var k=s(6214),S=s.n(k);const L=window.lodash.cloneDeep;var T=s.n(L);function F(){return F=Object.assign||function(e){for(var t=1;t=0||(a[s]=e[s]);return a}function P(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var I=function(e){return Array.isArray(e)&&0===e.length},R=function(e){return"function"==typeof e},N=function(e){return null!==e&&"object"==typeof e},O=function(e){return String(Math.floor(Number(e)))===e},M=function(e){return"[object String]"===Object.prototype.toString.call(e)},A=function(t){return 0===e.Children.count(t)},C=function(e){return N(e)&&R(e.then)};function D(e,t,s,r){void 0===r&&(r=0);for(var a=E()(t);e&&r=0?[]:{}}}return(0===o?e:a)[n[o]]===s?e:(void 0===s?delete a[n[o]]:a[n[o]]=s,0===o&&void 0===s&&delete r[n[o]],r)}function V(e,t,s,r){void 0===s&&(s=new WeakMap),void 0===r&&(r={});for(var a=0,o=Object.keys(e);a=s.length)break;o=s[a++]}else{if((a=s.next()).done)break;o=a.value}var n=o;D(t,n.path)||(t=B(t,n.path,n.message))}}return t}(s)):t(s)}))}))}),[f.validationSchema]),T=(0,e.useCallback)((function(e,t){return new Promise((function(s){return s(v.current[e].validate(t))}))}),[]),P=(0,e.useCallback)((function(e){var t=Object.keys(v.current).filter((function(e){return R(v.current[e].validate)})),s=t.length>0?t.map((function(t){return T(t,D(e,t))})):[Promise.resolve("DO_NOT_DELETE_YOU_WILL_BE_FIRED")];return Promise.all(s).then((function(e){return e.reduce((function(e,s,r){return"DO_NOT_DELETE_YOU_WILL_BE_FIRED"===s||s&&(e=B(e,t[r],s)),e}),{})}))}),[T]),I=(0,e.useCallback)((function(e){return Promise.all([P(e),f.validationSchema?L(e):{},f.validate?S(e):{}]).then((function(e){var t=e[0],s=e[1],r=e[2];return y.all([t,s,r],{arrayMerge:Q})}))}),[f.validate,f.validationSchema,P,S,L]),O=J((function(e){return void 0===e&&(e=x.values),k({type:"SET_ISVALIDATING",payload:!0}),I(e).then((function(e){return b.current&&(k({type:"SET_ISVALIDATING",payload:!1}),k({type:"SET_ERRORS",payload:e})),e}))}));(0,e.useEffect)((function(){i&&!0===b.current&&d()(h.current,f.initialValues)&&O(h.current)}),[i,O]);var A=(0,e.useCallback)((function(e){var t=e&&e.values?e.values:h.current,s=e&&e.errors?e.errors:_.current?_.current:f.initialErrors||{},r=e&&e.touched?e.touched:w.current?w.current:f.initialTouched||{},a=e&&e.status?e.status:g.current?g.current:f.initialStatus;h.current=t,_.current=s,w.current=r,g.current=a;var o=function(){k({type:"RESET_FORM",payload:{isSubmitting:!!e&&!!e.isSubmitting,errors:s,touched:r,status:a,values:t,isValidating:!!e&&!!e.isValidating,submitCount:e&&e.submitCount&&"number"==typeof e.submitCount?e.submitCount:0}})};if(f.onReset){var n=f.onReset(x.values,de);C(n)?n.then(o):o()}else o()}),[f.initialErrors,f.initialStatus,f.initialTouched]);(0,e.useEffect)((function(){!0!==b.current||d()(h.current,f.initialValues)||(u&&(h.current=f.initialValues,A()),i&&O(h.current))}),[u,f.initialValues,A,i,O]),(0,e.useEffect)((function(){u&&!0===b.current&&!d()(_.current,f.initialErrors)&&(_.current=f.initialErrors||H,k({type:"SET_ERRORS",payload:f.initialErrors||H}))}),[u,f.initialErrors]),(0,e.useEffect)((function(){u&&!0===b.current&&!d()(w.current,f.initialTouched)&&(w.current=f.initialTouched||Y,k({type:"SET_TOUCHED",payload:f.initialTouched||Y}))}),[u,f.initialTouched]),(0,e.useEffect)((function(){u&&!0===b.current&&!d()(g.current,f.initialStatus)&&(g.current=f.initialStatus,k({type:"SET_STATUS",payload:f.initialStatus}))}),[u,f.initialStatus,f.initialTouched]);var V=J((function(e){if(v.current[e]&&R(v.current[e].validate)){var t=D(x.values,e),s=v.current[e].validate(t);return C(s)?(k({type:"SET_ISVALIDATING",payload:!0}),s.then((function(e){return e})).then((function(t){k({type:"SET_FIELD_ERROR",payload:{field:e,value:t}}),k({type:"SET_ISVALIDATING",payload:!1})}))):(k({type:"SET_FIELD_ERROR",payload:{field:e,value:s}}),Promise.resolve(s))}return f.validationSchema?(k({type:"SET_ISVALIDATING",payload:!0}),L(x.values,e).then((function(e){return e})).then((function(t){k({type:"SET_FIELD_ERROR",payload:{field:e,value:t[e]}}),k({type:"SET_ISVALIDATING",payload:!1})}))):Promise.resolve()})),j=(0,e.useCallback)((function(e,t){var s=t.validate;v.current[e]={validate:s}}),[]),z=(0,e.useCallback)((function(e){delete v.current[e]}),[]),U=J((function(e,t){return k({type:"SET_TOUCHED",payload:e}),(void 0===t?o:t)?O(x.values):Promise.resolve()})),q=(0,e.useCallback)((function(e){k({type:"SET_ERRORS",payload:e})}),[]),G=J((function(e,t){var s=R(e)?e(x.values):e;return k({type:"SET_VALUES",payload:s}),(void 0===t?r:t)?O(s):Promise.resolve()})),K=(0,e.useCallback)((function(e,t){k({type:"SET_FIELD_ERROR",payload:{field:e,value:t}})}),[]),X=J((function(e,t,s){return k({type:"SET_FIELD_VALUE",payload:{field:e,value:t}}),(void 0===s?r:s)?O(B(x.values,e,t)):Promise.resolve()})),ee=(0,e.useCallback)((function(e,t){var s,r=t,a=e;if(!M(e)){e.persist&&e.persist();var o=e.target?e.target:e.currentTarget,n=o.type,i=o.name,l=o.id,c=o.value,d=o.checked,u=(o.outerHTML,o.options),p=o.multiple;r=t||i||l,a=/number|range/.test(n)?(s=parseFloat(c),isNaN(s)?"":s):/checkbox/.test(n)?function(e,t,s){if("boolean"==typeof e)return Boolean(t);var r=[],a=!1,o=-1;if(Array.isArray(e))r=e,a=(o=e.indexOf(s))>=0;else if(!s||"true"==s||"false"==s)return Boolean(t);return t&&s&&!a?r.concat(s):a?r.slice(0,o).concat(r.slice(o+1)):r}(D(x.values,r),d,c):u&&p?function(e){return Array.from(e).filter((function(e){return e.selected})).map((function(e){return e.value}))}(u):c}r&&X(r,a)}),[X,x.values]),te=J((function(e){if(M(e))return function(t){return ee(t,e)};ee(e)})),se=J((function(e,t,s){return void 0===t&&(t=!0),k({type:"SET_FIELD_TOUCHED",payload:{field:e,value:t}}),(void 0===s?o:s)?O(x.values):Promise.resolve()})),re=(0,e.useCallback)((function(e,t){e.persist&&e.persist();var s=e.target,r=s.name,a=s.id,o=(s.outerHTML,t||r||a);se(o,!0)}),[se]),ae=J((function(e){if(M(e))return function(t){return re(t,e)};re(e)})),oe=(0,e.useCallback)((function(e){R(e)?k({type:"SET_FORMIK_STATE",payload:e}):k({type:"SET_FORMIK_STATE",payload:function(){return e}})}),[]),ne=(0,e.useCallback)((function(e){k({type:"SET_STATUS",payload:e})}),[]),ie=(0,e.useCallback)((function(e){k({type:"SET_ISSUBMITTING",payload:e})}),[]),le=J((function(){return k({type:"SUBMIT_ATTEMPT"}),O().then((function(e){var t=e instanceof Error;if(!t&&0===Object.keys(e).length){var s;try{if(void 0===(s=ue()))return}catch(e){throw e}return Promise.resolve(s).then((function(e){return b.current&&k({type:"SUBMIT_SUCCESS"}),e})).catch((function(e){if(b.current)throw k({type:"SUBMIT_FAILURE"}),e}))}if(b.current&&(k({type:"SUBMIT_FAILURE"}),t))throw e}))})),ce=J((function(e){e&&e.preventDefault&&R(e.preventDefault)&&e.preventDefault(),e&&e.stopPropagation&&R(e.stopPropagation)&&e.stopPropagation(),le().catch((function(e){console.warn("Warning: An unhandled error was caught from submitForm()",e)}))})),de={resetForm:A,validateForm:O,validateField:V,setErrors:q,setFieldError:K,setFieldTouched:se,setFieldValue:X,setStatus:ne,setSubmitting:ie,setTouched:U,setValues:G,setFormikState:oe,submitForm:le},ue=J((function(){return p(x.values,de)})),pe=J((function(e){e&&e.preventDefault&&R(e.preventDefault)&&e.preventDefault(),e&&e.stopPropagation&&R(e.stopPropagation)&&e.stopPropagation(),A()})),me=(0,e.useCallback)((function(e){return{value:D(x.values,e),error:D(x.errors,e),touched:!!D(x.touched,e),initialValue:D(h.current,e),initialTouched:!!D(w.current,e),initialError:D(_.current,e)}}),[x.errors,x.touched,x.values]),fe=(0,e.useCallback)((function(e){return{setValue:function(t,s){return X(e,t,s)},setTouched:function(t,s){return se(e,t,s)},setError:function(t){return K(e,t)}}}),[X,se,K]),he=(0,e.useCallback)((function(e){var t=N(e),s=t?e.name:e,r=D(x.values,s),a={name:s,value:r,onChange:te,onBlur:ae};if(t){var o=e.type,n=e.value,i=e.as,l=e.multiple;"checkbox"===o?void 0===n?a.checked=!!r:(a.checked=!(!Array.isArray(r)||!~r.indexOf(n)),a.value=n):"radio"===o?(a.checked=r===n,a.value=n):"select"===i&&l&&(a.value=a.value||[],a.multiple=!0)}return a}),[ae,te,x.values]),ye=(0,e.useMemo)((function(){return!d()(h.current,x.values)}),[h.current,x.values]),_e=(0,e.useMemo)((function(){return void 0!==l?ye?x.errors&&0===Object.keys(x.errors).length:!1!==l&&R(l)?l(f):l:x.errors&&0===Object.keys(x.errors).length}),[l,ye,x.errors,f]);return F({},x,{initialValues:h.current,initialErrors:_.current,initialTouched:w.current,initialStatus:g.current,handleBlur:ae,handleChange:te,handleReset:pe,handleSubmit:ce,resetForm:A,setErrors:q,setFormikState:oe,setFieldTouched:se,setFieldValue:X,setFieldError:K,setStatus:ne,setSubmitting:ie,setTouched:U,setValues:G,submitForm:le,validateForm:O,validateField:V,isValid:_e,dirty:ye,unregisterField:z,registerField:j,getFieldProps:he,getFieldMeta:me,getFieldHelpers:fe,validateOnBlur:o,validateOnChange:r,validateOnMount:i})}function K(t){var s=G(t),r=t.component,a=t.children,o=t.render,n=t.innerRef;return(0,e.useImperativeHandle)(n,(function(){return s})),(0,e.createElement)(z,{value:s},r?(0,e.createElement)(r,s):o?o(s):a?R(a)?a(s):A(a)?null:e.Children.only(a):null)}function Z(e){var t=Array.isArray(e)?[]:{};for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var r=String(s);!0===Array.isArray(e[r])?t[r]=e[r].map((function(e){return!0===Array.isArray(e)||w()(e)?Z(e):""!==e?e:void 0})):w()(e[r])?t[r]=Z(e[r]):t[r]=""!==e[r]?e[r]:void 0}return t}function Q(e,t,s){var r=e.slice();return t.forEach((function(t,a){if(void 0===r[a]){var o=!1!==s.clone&&s.isMergeableObject(t);r[a]=o?y(Array.isArray(t)?[]:{},t,s):t}else s.isMergeableObject(t)?r[a]=y(e[a],t,s):-1===e.indexOf(t)&&r.push(t)})),r}var X="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?e.useLayoutEffect:e.useEffect;function J(t){var s=(0,e.useRef)(t);return X((function(){s.current=t})),(0,e.useCallback)((function(){for(var e=arguments.length,t=new Array(e),r=0;re?t:e}),0);return Array.from(F({},e,{length:t+1}))}return[]},ne=function(t){function s(e){var s;return(s=t.call(this,e)||this).updateArrayField=function(e,t,r){var a=s.props,o=a.name;(0,a.formik.setFormikState)((function(s){var a="function"==typeof r?r:e,n="function"==typeof t?t:e,i=B(s.values,o,e(D(s.values,o))),l=r?a(D(s.errors,o)):void 0,c=t?n(D(s.touched,o)):void 0;return I(l)&&(l=void 0),I(c)&&(c=void 0),F({},s,{values:i,errors:r?B(s.errors,o,l):s.errors,touched:t?B(s.touched,o,c):s.touched})}))},s.push=function(e){return s.updateArrayField((function(t){return[].concat(oe(t),[T()(e)])}),!1,!1)},s.handlePush=function(e){return function(){return s.push(e)}},s.swap=function(e,t){return s.updateArrayField((function(s){return function(e,t,s){var r=oe(e),a=r[t];return r[t]=r[s],r[s]=a,r}(s,e,t)}),!0,!0)},s.handleSwap=function(e,t){return function(){return s.swap(e,t)}},s.move=function(e,t){return s.updateArrayField((function(s){return function(e,t,s){var r=oe(e),a=r[t];return r.splice(t,1),r.splice(s,0,a),r}(s,e,t)}),!0,!0)},s.handleMove=function(e,t){return function(){return s.move(e,t)}},s.insert=function(e,t){return s.updateArrayField((function(s){return ae(s,e,t)}),(function(t){return ae(t,e,null)}),(function(t){return ae(t,e,null)}))},s.handleInsert=function(e,t){return function(){return s.insert(e,t)}},s.replace=function(e,t){return s.updateArrayField((function(s){return function(e,t,s){var r=oe(e);return r[t]=s,r}(s,e,t)}),!1,!1)},s.handleReplace=function(e,t){return function(){return s.replace(e,t)}},s.unshift=function(e){var t=-1;return s.updateArrayField((function(s){var r=s?[e].concat(s):[e];return t<0&&(t=r.length),r}),(function(e){var s=e?[null].concat(e):[null];return t<0&&(t=s.length),s}),(function(e){var s=e?[null].concat(e):[null];return t<0&&(t=s.length),s})),t},s.handleUnshift=function(e){return function(){return s.unshift(e)}},s.handleRemove=function(e){return function(){return s.remove(e)}},s.handlePop=function(){return function(){return s.pop()}},s.remove=s.remove.bind(P(s)),s.pop=s.pop.bind(P(s)),s}var r,a;a=t,(r=s).prototype=Object.create(a.prototype),r.prototype.constructor=r,r.__proto__=a;var o=s.prototype;return o.componentDidUpdate=function(e){this.props.validateOnChange&&this.props.formik.validateOnChange&&!d()(D(e.formik.values,e.name),D(this.props.formik.values,this.props.name))&&this.props.formik.validateForm(this.props.formik.values)},o.remove=function(e){var t;return this.updateArrayField((function(s){var r=s?oe(s):[];return t||(t=r[e]),R(r.splice)&&r.splice(e,1),r}),!0,!0),t},o.pop=function(){var e;return this.updateArrayField((function(t){var s=t;return e||(e=s&&s.pop&&s.pop()),s}),!0,!0),e},o.render=function(){var t={push:this.push,pop:this.pop,swap:this.swap,move:this.move,insert:this.insert,replace:this.replace,unshift:this.unshift,remove:this.remove,handlePush:this.handlePush,handlePop:this.handlePop,handleSwap:this.handleSwap,handleMove:this.handleMove,handleInsert:this.handleInsert,handleReplace:this.handleReplace,handleUnshift:this.handleUnshift,handleRemove:this.handleRemove},s=this.props,r=s.component,a=s.render,o=s.children,n=s.name,i=F({},t,{form:$(s.formik,["validate","validationSchema"]),name:n});return r?(0,e.createElement)(r,i):a?a(i):o?"function"==typeof o?o(i):A(o)?null:e.Children.only(o):null},s}(e.Component);ne.defaultProps={validateOnChange:!0};var ie=re(ne);const le=window.lodash;function ce(){return ce=Object.assign?Object.assign.bind():function(e){for(var t=1;te.score!==t.score?t.score-e.score:function(e,t){let s=e.length===t.length&&e.slice(0,-1).every(((e,s)=>e===t[s]));return s?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let o=null;for(let e=0;null==o&&e{let o={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};o.relativePath.startsWith("/")&&(o.relativePath.startsWith(r)||ge(!1),o.relativePath=o.relativePath.slice(r.length));let n=Oe([r,o.relativePath]),i=s.concat(o);e.children&&e.children.length>0&&(!0===e.index&&ge(!1),ve(e.children,t,i,n)),(null!=e.path||e.index)&&t.push({path:n,score:$e(n,e.index),routesMeta:i})})),t}const Ee=/^:\w+$/,xe=3,ke=2,Se=1,Le=10,Te=-2,Fe=e=>"*"===e;function $e(e,t){let s=e.split("/"),r=s.length;return s.some(Fe)&&(r+=Te),t&&(r+=ke),s.filter((e=>!Fe(e))).reduce(((e,t)=>e+(Ee.test(t)?xe:""===t?Se:Le)),r)}function Pe(e,t){let{routesMeta:s}=e,r={},a="/",o=[];for(let e=0;e(r.push(t),"([^\\/]+)")));return e.endsWith("*")?(r.push("*"),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):a+=s?"\\/*$":"(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)",[new RegExp(a,t?void 0:"i"),r]}(e.path,e.caseSensitive,e.end),a=t.match(s);if(!a)return null;let o=a[0],n=o.replace(/(.)\/+$/,"$1"),i=a.slice(1);return{params:r.reduce(((e,t,s)=>{if("*"===t){let e=i[s]||"";n=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(t){return e}}(i[s]||""),e}),{}),pathname:o,pathnameBase:n,pattern:e}}function Re(e,t,s){let r,a="string"==typeof e?he(e):e,o=""===e||""===a.pathname?"/":a.pathname;if(null==o)r=s;else{let e=t.length-1;if(o.startsWith("..")){let t=o.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}r=e>=0?t[e]:"/"}let n=function(e,t){void 0===t&&(t="/");let{pathname:s,search:r="",hash:a=""}="string"==typeof e?he(e):e,o=s?s.startsWith("/")?s:function(e,t){let s=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?s.length>1&&s.pop():"."!==e&&s.push(e)})),s.length>1?s.join("/"):"/"}(s,t):t;return{pathname:o,search:Ae(r),hash:Ce(a)}}(a,r);return o&&"/"!==o&&o.endsWith("/")&&!n.pathname.endsWith("/")&&(n.pathname+="/"),n}function Ne(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let s=e.charAt(t.length);return s&&"/"!==s?null:e.slice(t.length)||"/"}const Oe=e=>e.join("/").replace(/\/\/+/g,"/"),Me=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Ae=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",Ce=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";function De(){return null!=(0,e.useContext)(_e)}function Be(){return De()||ge(!1),(0,e.useContext)(_e).location}function Ve(){De()||ge(!1);let{basename:t,navigator:s}=(0,e.useContext)(ye),{matches:r}=(0,e.useContext)(we),{pathname:a}=Be(),o=JSON.stringify(r.map((e=>e.pathnameBase))),n=(0,e.useRef)(!1);return(0,e.useEffect)((()=>{n.current=!0})),(0,e.useCallback)((function(e,r){if(void 0===r&&(r={}),!n.current)return;if("number"==typeof e)return void s.go(e);let i=Re(e,JSON.parse(o),a);"/"!==t&&(i.pathname=Oe([t,i.pathname])),(r.replace?s.replace:s.push)(i,r.state)}),[t,s,o,a])}function je(t){let{matches:s}=(0,e.useContext)(we),{pathname:r}=Be(),a=JSON.stringify(s.map((e=>e.pathnameBase)));return(0,e.useMemo)((()=>Re(t,JSON.parse(a),r)),[t,a,r])}function ze(t){let{to:s,replace:r,state:a}=t;De()||ge(!1);let o=Ve();return(0,e.useEffect)((()=>{o(s,{replace:r,state:a})})),null}function Ue(e){ge(!1)}function qe(t){let{basename:s="/",children:r=null,location:a,navigationType:o=de.Pop,navigator:n,static:i=!1}=t;De()&&ge(!1);let l=Me(s),c=(0,e.useMemo)((()=>({basename:l,navigator:n,static:i})),[l,n,i]);"string"==typeof a&&(a=he(a));let{pathname:d="/",search:u="",hash:p="",state:m=null,key:f="default"}=a,h=(0,e.useMemo)((()=>{let e=Ne(d,l);return null==e?null:{pathname:e,search:u,hash:p,state:m,key:f}}),[l,d,u,p,m,f]);return null==h?null:(0,e.createElement)(ye.Provider,{value:c},(0,e.createElement)(_e.Provider,{children:r,value:{location:h,navigationType:o}}))}function We(t){let{children:s,location:r}=t;return function(t,s){De()||ge(!1);let{matches:r}=(0,e.useContext)(we),a=r[r.length-1],o=a?a.params:{},n=(a&&a.pathname,a?a.pathnameBase:"/");a&&a.route;let i,l=Be();if(s){var c;let e="string"==typeof s?he(s):s;"/"===n||(null==(c=e.pathname)?void 0:c.startsWith(n))||ge(!1),i=e}else i=l;let d=i.pathname||"/",u=be(t,{pathname:"/"===n?d:d.slice(n.length)||"/"});return function(t,s){return void 0===s&&(s=[]),null==t?null:t.reduceRight(((r,a,o)=>(0,e.createElement)(we.Provider,{children:void 0!==a.route.element?a.route.element:r,value:{outlet:r,matches:s.concat(t.slice(0,o+1))}})),null)}(u&&u.map((e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:Oe([n,e.pathname]),pathnameBase:"/"===e.pathnameBase?n:Oe([n,e.pathnameBase])}))),r)}(He(s),r)}function He(t){let s=[];return e.Children.forEach(t,(t=>{if(!(0,e.isValidElement)(t))return;if(t.type===e.Fragment)return void s.push.apply(s,He(t.props.children));t.type!==Ue&&ge(!1);let r={caseSensitive:t.props.caseSensitive,element:t.props.element,index:t.props.index,path:t.props.path};t.props.children&&(r.children=He(t.props.children)),s.push(r)})),s}function Ye(){return Ye=Object.assign||function(e){for(var t=1;tn.listen(l)),[n]),(0,e.createElement)(qe,{basename:s,children:r,location:i.location,navigationType:i.action,navigator:n})}const Ze=(0,e.forwardRef)((function(t,s){let{onClick:r,reloadDocument:a,replace:o=!1,state:n,target:i,to:l}=t,c=function(e,t){if(null==e)return{};var s,r,a={},o=Object.keys(e);for(r=0;r=0||(a[s]=e[s]);return a}(t,Ge),d=function(t){De()||ge(!1);let{basename:s,navigator:r}=(0,e.useContext)(ye),{hash:a,pathname:o,search:n}=je(t),i=o;if("/"!==s){let e=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?he(e).pathname:e.pathname}(t),r=null!=e&&e.endsWith("/");i="/"===o?s+(r?"/":""):Oe([s,o])}return r.createHref({pathname:i,search:n,hash:a})}(l),u=function(t,s){let{target:r,replace:a,state:o}=void 0===s?{}:s,n=Ve(),i=Be(),l=je(t);return(0,e.useCallback)((e=>{if(!(0!==e.button||r&&"_self"!==r||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e))){e.preventDefault();let s=!!a||fe(i)===fe(l);n(t,{replace:s,state:o})}}),[i,n,l,a,o,r,t])}(l,{replace:o,state:n,target:i});return(0,e.createElement)("a",Ye({},c,{href:d,onClick:function(e){r&&r(e),e.defaultPrevented||a||u(e)},ref:s,target:i}))})),Qe=window.yoast.styledComponents,Xe=window.yoast.reduxJsToolkit,Je="adminUrl",et=(0,Xe.createSlice)({name:Je,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),tt=(et.getInitialState,{selectAdminUrl:e=>(0,le.get)(e,Je,"")});tt.selectAdminLink=(0,Xe.createSelector)([tt.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}})),et.actions,et.reducer;const st=window.wp.url,rt="linkParams",at=(0,Xe.createSlice)({name:rt,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),ot=at.getInitialState,nt={selectLinkParam:(e,t,s={})=>(0,le.get)(e,`${rt}.${t}`,s),selectLinkParams:e=>(0,le.get)(e,rt,{})};nt.selectLink=(0,Xe.createSelector)([nt.selectLinkParams,(e,t)=>t,(e,t,s={})=>s],((e,t,s)=>(0,st.addQueryArgs)(t,{...e,...s})));const it=at.actions,lt=at.reducer,ct="notifications",dt=(0,Xe.createSlice)({name:ct,initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:s="default",title:r,description:a})=>({payload:{id:e||(0,Xe.nanoid)(),variant:t,size:s,title:r||"",description:a}})},removeNotification:(e,{payload:t})=>(0,le.omit)(e,t)}}),ut=dt.getInitialState,pt={selectNotifications:e=>(0,le.get)(e,ct,{}),selectNotification:(e,t)=>(0,le.get)(e,[ct,t],null)},mt=dt.actions,ft=dt.reducer,ht="pluginUrl",yt=(0,Xe.createSlice)({name:ht,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),_t=(yt.getInitialState,{selectPluginUrl:e=>(0,le.get)(e,ht,"")});_t.selectImageLink=(0,Xe.createSelector)([_t.selectPluginUrl,(e,t,s="images")=>s,(e,t)=>t],((e,t,s)=>[(0,le.trimEnd)(e,"/"),(0,le.trim)(t,"/"),(0,le.trimStart)(s,"/")].join("/"))),yt.actions,yt.reducer;const wt=window.wp.apiFetch;var gt=s.n(wt);const bt="request",vt="success",Et="error",xt="idle",kt="loading",St="success",Lt="error",Tt="showPlay",Ft="askPermission",$t="isPlaying",Pt="wistiaEmbedPermission",It=(0,Xe.createSlice)({name:Pt,initialState:{value:!1,status:xt,error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${Pt}/${bt}`,(e=>{e.status=kt})),e.addCase(`${Pt}/${vt}`,((e,{payload:t})=>{e.status=St,e.value=Boolean(t&&t.value)})),e.addCase(`${Pt}/${Et}`,((e,{payload:t})=>{e.status=Lt,e.value=Boolean(t&&t.value),e.error={code:(0,le.get)(t,"error.code",500),message:(0,le.get)(t,"error.message","Unknown")}}))}});function Rt(...e){return e.filter(Boolean).join(" ")}function Nt(e,t,...s){if(e in t){let r=t[e];return"function"==typeof r?r(...s):r}let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e=>`"${e}"`)).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,Nt),r}It.getInitialState,It.actions,It.reducer;var Ot,Mt,At=((Mt=At||{})[Mt.None=0]="None",Mt[Mt.RenderStrategy=1]="RenderStrategy",Mt[Mt.Static=2]="Static",Mt),Ct=((Ot=Ct||{})[Ot.Unmount=0]="Unmount",Ot[Ot.Hidden=1]="Hidden",Ot);function Dt({ourProps:e,theirProps:t,slot:s,defaultTag:r,features:a,visible:o=!0,name:n}){let i=Vt(t,e);if(o)return Bt(i,s,r,n);let l=null!=a?a:0;if(2&l){let{static:e=!1,...t}=i;if(e)return Bt(t,s,r,n)}if(1&l){let{unmount:e=!0,...t}=i;return Nt(e?0:1,{0:()=>null,1:()=>Bt({...t,hidden:!0,style:{display:"none"}},s,r,n)})}return Bt(i,s,r,n)}function Bt(t,s={},r,a){var o;let{as:n=r,children:i,refName:l="ref",...c}=Ut(t,["unmount","static"]),d=void 0!==t.ref?{[l]:t.ref}:{},u="function"==typeof i?i(s):i;c.className&&"function"==typeof c.className&&(c.className=c.className(s));let p={};if(s){let e=!1,t=[];for(let[r,a]of Object.entries(s))"boolean"==typeof a&&(e=!0),!0===a&&t.push(r);e&&(p["data-headlessui-state"]=t.join(" "))}if(n===e.Fragment&&Object.keys(zt(c)).length>0){if(!(0,e.isValidElement)(u)||Array.isArray(u)&&u.length>1)throw new Error(['Passing props on "Fragment"!',"",`The current component <${a} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(c).map((e=>` - ${e}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map((e=>` - ${e}`)).join("\n")].join("\n"));let t=Rt(null==(o=u.props)?void 0:o.className,c.className),s=t?{className:t}:{};return(0,e.cloneElement)(u,Object.assign({},Vt(u.props,zt(Ut(c,["ref"]))),p,d,function(...e){return{ref:e.every((e=>null==e))?void 0:t=>{for(let s of e)null!=s&&("function"==typeof s?s(t):s.current=t)}}}(u.ref,d.ref),s))}return(0,e.createElement)(n,Object.assign({},Ut(c,["ref"]),n!==e.Fragment&&d,n!==e.Fragment&&p),u)}function Vt(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},s={};for(let r of e)for(let e in r)e.startsWith("on")&&"function"==typeof r[e]?(null!=s[e]||(s[e]=[]),s[e].push(r[e])):t[e]=r[e];if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(s).map((e=>[e,void 0]))));for(let e in s)Object.assign(t,{[e](t,...r){let a=s[e];for(let e of a){if((t instanceof Event||(null==t?void 0:t.nativeEvent)instanceof Event)&&t.defaultPrevented)return;e(t,...r)}}});return t}function jt(t){var s;return Object.assign((0,e.forwardRef)(t),{displayName:null!=(s=t.displayName)?s:t.name})}function zt(e){let t=Object.assign({},e);for(let e in t)void 0===t[e]&&delete t[e];return t}function Ut(e,t=[]){let s=Object.assign({},e);for(let e of t)e in s&&delete s[e];return s}let qt=(0,e.createContext)(null);qt.displayName="OpenClosedContext";var Wt=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Wt||{});function Ht(){return(0,e.useContext)(qt)}function Yt({value:t,children:s}){return e.createElement(qt.Provider,{value:t},s)}var Gt=Object.defineProperty,Kt=(e,t,s)=>(((e,t,s)=>{t in e?Gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s})(e,"symbol"!=typeof t?t+"":t,s),s);let Zt=new class{constructor(){Kt(this,"current",this.detect()),Kt(this,"handoffState","pending"),Kt(this,"currentId",0)}set(e){this.current!==e&&(this.handoffState="pending",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return"server"===this.current}get isClient(){return"client"===this.current}detect(){return"undefined"==typeof window||"undefined"==typeof document?"server":"client"}handoff(){"pending"===this.handoffState&&(this.handoffState="complete")}get isHandoffComplete(){return"complete"===this.handoffState}},Qt=(t,s)=>{Zt.isServer?(0,e.useEffect)(t,s):(0,e.useLayoutEffect)(t,s)};function Xt(){let t=(0,e.useRef)(!1);return Qt((()=>(t.current=!0,()=>{t.current=!1})),[]),t}function Jt(t){let s=(0,e.useRef)(t);return Qt((()=>{s.current=t}),[t]),s}function es(){let[t,s]=(0,e.useState)(Zt.isHandoffComplete);return t&&!1===Zt.isHandoffComplete&&s(!1),(0,e.useEffect)((()=>{!0!==t&&s(!0)}),[t]),(0,e.useEffect)((()=>Zt.handoff()),[]),t}let ts=function(t){let s=Jt(t);return e.useCallback(((...e)=>s.current(...e)),[s])},ss=Symbol();function rs(...t){let s=(0,e.useRef)(t);(0,e.useEffect)((()=>{s.current=t}),[t]);let r=ts((e=>{for(let t of s.current)null!=t&&("function"==typeof t?t(e):t.current=e)}));return t.every((e=>null==e||(null==e?void 0:e[ss])))?void 0:r}function as(){let e=[],t=[],s={enqueue(e){t.push(e)},addEventListener:(e,t,r,a)=>(e.addEventListener(t,r,a),s.add((()=>e.removeEventListener(t,r,a)))),requestAnimationFrame(...e){let t=requestAnimationFrame(...e);return s.add((()=>cancelAnimationFrame(t)))},nextFrame:(...e)=>s.requestAnimationFrame((()=>s.requestAnimationFrame(...e))),setTimeout(...e){let t=setTimeout(...e);return s.add((()=>clearTimeout(t)))},microTask(...e){let t={current:!0};return function(e){"function"==typeof queueMicrotask?queueMicrotask(e):Promise.resolve().then(e).catch((e=>setTimeout((()=>{throw e}))))}((()=>{t.current&&e[0]()})),s.add((()=>{t.current=!1}))},add:t=>(e.push(t),()=>{let s=e.indexOf(t);if(s>=0){let[t]=e.splice(s,1);t()}}),dispose(){for(let t of e.splice(0))t()},async workQueue(){for(let e of t.splice(0))await e()}};return s}function os(e,...t){e&&t.length>0&&e.classList.add(...t)}function ns(e,...t){e&&t.length>0&&e.classList.remove(...t)}function is(){let[t]=(0,e.useState)(as);return(0,e.useEffect)((()=>()=>t.dispose()),[t]),t}function ls({container:e,direction:t,classes:s,onStart:r,onStop:a}){let o=Xt(),n=is(),i=Jt(t);Qt((()=>{let t=as();n.add(t.dispose);let l=e.current;if(l&&"idle"!==i.current&&o.current)return t.dispose(),r.current(i.current),t.add(function(e,t,s,r){let a=s?"enter":"leave",o=as(),n=void 0!==r?function(e){let t={called:!1};return(...s)=>{if(!t.called)return t.called=!0,e(...s)}}(r):()=>{};"enter"===a&&(e.removeAttribute("hidden"),e.style.display="");let i=Nt(a,{enter:()=>t.enter,leave:()=>t.leave}),l=Nt(a,{enter:()=>t.enterTo,leave:()=>t.leaveTo}),c=Nt(a,{enter:()=>t.enterFrom,leave:()=>t.leaveFrom});return ns(e,...t.enter,...t.enterTo,...t.enterFrom,...t.leave,...t.leaveFrom,...t.leaveTo,...t.entered),os(e,...i,...c),o.nextFrame((()=>{ns(e,...c),os(e,...l),function(e,t){let s=as();if(!e)return s.dispose;let{transitionDuration:r,transitionDelay:a}=getComputedStyle(e),[o,n]=[r,a].map((e=>{let[t=0]=e.split(",").filter(Boolean).map((e=>e.includes("ms")?parseFloat(e):1e3*parseFloat(e))).sort(((e,t)=>t-e));return t}));if(o+n!==0){let r=s.addEventListener(e,"transitionend",(e=>{e.target===e.currentTarget&&(t(),r())}))}else t();s.add((()=>t())),s.dispose}(e,(()=>(ns(e,...i),os(e,...t.entered),n())))})),o.dispose}(l,s.current,"enter"===i.current,(()=>{t.dispose(),a.current(i.current)}))),t.dispose}),[t])}function cs(e=""){return e.split(" ").filter((e=>e.trim().length>1))}let ds=(0,e.createContext)(null);ds.displayName="TransitionContext";var us=(e=>(e.Visible="visible",e.Hidden="hidden",e))(us||{});let ps=(0,e.createContext)(null);function ms(e){return"children"in e?ms(e.children):e.current.filter((({el:e})=>null!==e.current)).filter((({state:e})=>"visible"===e)).length>0}function fs(t,s){let r=Jt(t),a=(0,e.useRef)([]),o=Xt(),n=is(),i=ts(((e,t=Ct.Hidden)=>{let s=a.current.findIndex((({el:t})=>t===e));-1!==s&&(Nt(t,{[Ct.Unmount](){a.current.splice(s,1)},[Ct.Hidden](){a.current[s].state="hidden"}}),n.microTask((()=>{var e;!ms(a)&&o.current&&(null==(e=r.current)||e.call(r))})))})),l=ts((e=>{let t=a.current.find((({el:t})=>t===e));return t?"visible"!==t.state&&(t.state="visible"):a.current.push({el:e,state:"visible"}),()=>i(e,Ct.Unmount)})),c=(0,e.useRef)([]),d=(0,e.useRef)(Promise.resolve()),u=(0,e.useRef)({enter:[],leave:[],idle:[]}),p=ts(((e,t,r)=>{c.current.splice(0),s&&(s.chains.current[t]=s.chains.current[t].filter((([t])=>t!==e))),null==s||s.chains.current[t].push([e,new Promise((e=>{c.current.push(e)}))]),null==s||s.chains.current[t].push([e,new Promise((e=>{Promise.all(u.current[t].map((([e,t])=>t))).then((()=>e()))}))]),"enter"===t?d.current=d.current.then((()=>null==s?void 0:s.wait.current)).then((()=>r(t))):r(t)})),m=ts(((e,t,s)=>{Promise.all(u.current[t].splice(0).map((([e,t])=>t))).then((()=>{var e;null==(e=c.current.shift())||e()})).then((()=>s(t)))}));return(0,e.useMemo)((()=>({children:a,register:l,unregister:i,onStart:p,onStop:m,wait:d,chains:u})),[l,i,a,p,m,u,d])}function hs(){}ps.displayName="NestingContext";let ys=["beforeEnter","afterEnter","beforeLeave","afterLeave"];function _s(e){var t;let s={};for(let r of ys)s[r]=null!=(t=e[r])?t:hs;return s}let ws=At.RenderStrategy,gs=jt((function(t,s){let{beforeEnter:r,afterEnter:a,beforeLeave:o,afterLeave:n,enter:i,enterFrom:l,enterTo:c,entered:d,leave:u,leaveFrom:p,leaveTo:m,...f}=t,h=(0,e.useRef)(null),y=rs(h,s),_=f.unmount?Ct.Unmount:Ct.Hidden,{show:w,appear:g,initial:b}=function(){let t=(0,e.useContext)(ds);if(null===t)throw new Error("A is used but it is missing a parent or .");return t}(),[v,E]=(0,e.useState)(w?"visible":"hidden"),x=function(){let t=(0,e.useContext)(ps);if(null===t)throw new Error("A is used but it is missing a parent or .");return t}(),{register:k,unregister:S}=x,L=(0,e.useRef)(null);(0,e.useEffect)((()=>k(h)),[k,h]),(0,e.useEffect)((()=>{if(_===Ct.Hidden&&h.current)return w&&"visible"!==v?void E("visible"):Nt(v,{hidden:()=>S(h),visible:()=>k(h)})}),[v,h,k,S,w,_]);let T=Jt({enter:cs(i),enterFrom:cs(l),enterTo:cs(c),entered:cs(d),leave:cs(u),leaveFrom:cs(p),leaveTo:cs(m)}),F=function(t){let s=(0,e.useRef)(_s(t));return(0,e.useEffect)((()=>{s.current=_s(t)}),[t]),s}({beforeEnter:r,afterEnter:a,beforeLeave:o,afterLeave:n}),$=es();(0,e.useEffect)((()=>{if($&&"visible"===v&&null===h.current)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")}),[h,v,$]);let P=b&&!g,I=!$||P||L.current===w?"idle":w?"enter":"leave",R=ts((e=>Nt(e,{enter:()=>F.current.beforeEnter(),leave:()=>F.current.beforeLeave(),idle:()=>{}}))),N=ts((e=>Nt(e,{enter:()=>F.current.afterEnter(),leave:()=>F.current.afterLeave(),idle:()=>{}}))),O=fs((()=>{E("hidden"),S(h)}),x);ls({container:h,classes:T,direction:I,onStart:Jt((e=>{O.onStart(h,e,R)})),onStop:Jt((e=>{O.onStop(h,e,N),"leave"===e&&!ms(O)&&(E("hidden"),S(h))}))}),(0,e.useEffect)((()=>{!P||(_===Ct.Hidden?L.current=null:L.current=w)}),[w,P,v]);let M=f,A={ref:y};return g&&w&&Zt.isServer&&(M={...M,className:Rt(f.className,...T.current.enter,...T.current.enterFrom)}),e.createElement(ps.Provider,{value:O},e.createElement(Yt,{value:Nt(v,{visible:Wt.Open,hidden:Wt.Closed})},Dt({ourProps:A,theirProps:M,defaultTag:"div",features:ws,visible:"visible"===v,name:"Transition.Child"})))})),bs=jt((function(t,s){let{show:r,appear:a=!1,unmount:o,...n}=t,i=(0,e.useRef)(null),l=rs(i,s);es();let c=Ht();if(void 0===r&&null!==c&&(r=Nt(c,{[Wt.Open]:!0,[Wt.Closed]:!1})),![!0,!1].includes(r))throw new Error("A is used but it is missing a `show={true | false}` prop.");let[d,u]=(0,e.useState)(r?"visible":"hidden"),p=fs((()=>{u("hidden")})),[m,f]=(0,e.useState)(!0),h=(0,e.useRef)([r]);Qt((()=>{!1!==m&&h.current[h.current.length-1]!==r&&(h.current.push(r),f(!1))}),[h,r]);let y=(0,e.useMemo)((()=>({show:r,appear:a,initial:m})),[r,a,m]);(0,e.useEffect)((()=>{if(r)u("visible");else if(ms(p)){let e=i.current;if(!e)return;let t=e.getBoundingClientRect();0===t.x&&0===t.y&&0===t.width&&0===t.height&&u("hidden")}else u("hidden")}),[r,p]);let _={unmount:o};return e.createElement(ps.Provider,{value:p},e.createElement(ds.Provider,{value:y},Dt({ourProps:{..._,as:e.Fragment,children:e.createElement(gs,{ref:l,..._,...n})},theirProps:{},defaultTag:e.Fragment,features:ws,visible:"visible"===d,name:"Transition"})))})),vs=jt((function(t,s){let r=null!==(0,e.useContext)(ds),a=null!==Ht();return e.createElement(e.Fragment,null,!r&&a?e.createElement(bs,{ref:s,...t}):e.createElement(gs,{ref:s,...t}))})),Es=Object.assign(bs,{Child:vs,Root:bs});const xs=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"}))})),ks=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"}))})),Ss=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01"}))})),Ls=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"}))})),Ts=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 8l4 4m0 0l-4 4m4-4H3"}))})),Fs=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z",clipRule:"evenodd"}))})),$s=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z",clipRule:"evenodd"}))})),Ps=window.wp.i18n;var Is=s(4530),Rs=s.n(Is),Ns=s(5890),Os=s.n(Ns);const Ms={variant:{lg:{grid:"yst-grid lg:yst-grid-cols-3 lg:yst-gap-12",col1:"yst-col-span-1",col2:"lg:yst-mt-0 lg:yst-col-span-2"},xl:{grid:"yst-grid xl:yst-grid-cols-3 xl:yst-gap-12",col1:"yst-col-span-1",col2:"xl:yst-mt-0 xl:yst-col-span-2"},"2xl":{grid:"yst-grid 2xl:yst-grid-cols-3 2xl:yst-gap-12",col1:"yst-col-span-1",col2:"2xl:yst-mt-0 2xl:yst-col-span-2"}}},As=({id:t,children:s,title:r,description:a=null,variant:o="2xl"})=>(0,e.createElement)("section",{id:t,className:Ms.variant[o].grid},(0,e.createElement)("div",{className:Ms.variant[o].col1},(0,e.createElement)("div",{className:"yst-max-w-screen-sm"},(0,e.createElement)(l.Title,{as:"h2",size:"4"},r),a&&(0,e.createElement)("p",{className:"yst-mt-2"},a))),(0,e.createElement)("fieldset",{className:`yst-min-w-0 yst-mt-8 ${Ms.variant[o].col2}`},(0,e.createElement)("legend",{className:"yst-sr-only"},r),(0,e.createElement)("div",{className:"yst-space-y-8"},s)));As.propTypes={id:Os().string,children:Os().node.isRequired,title:Os().node.isRequired,description:Os().node,variant:Os().oneOf(Object.keys(Ms.variant))};const Cs=({name:e})=>{const t=zs("selectPreference",[],"isNetworkAdmin"),s=zs("selectPreference",[],"isMainSite"),r=(0,i.useMemo)((()=>"wpseo.tracking"===e&&!t&&!s),[e,t,s]),a=(0,i.useMemo)((()=>(0,le.get)(window,`wpseoScriptData.disabledSettings.${e}`,"")),[]),o=(0,i.useMemo)((()=>{if(r)return(0,Ps.__)("Unavailable for sub-sites","wordpress-seo");switch(a){case"multisite":return(0,Ps.__)("Unavailable for multisites","wordpress-seo");case"network":return(0,Ps.__)("Network disabled","wordpress-seo");case"language":return(0,Ps.__)("Only available for English sites","wordpress-seo");default:return""}}),[a,r]);return{isDisabled:(0,i.useMemo)((()=>!(0,le.isEmpty)(o)),[o]),message:o,disabledSetting:a}},Ds="@yoast/settings",Bs=()=>(0,a.useDispatch)(Ds);var Vs=s(1206),js=s.n(Vs);const zs=(e,t=[],...s)=>(0,a.useSelect)((t=>{var r,a;return null===(r=(a=t(Ds))[e])||void 0===r?void 0:r.call(a,...s)}),t),Us=({id:t,children:s,title:r,description:a=null})=>{const o=zs("selectPreference",[],"isPremium");return(0,e.createElement)(As,{id:t,title:r,description:a,variant:o?"xl":"2xl"},s)};Us.propTypes={id:Os().string,children:Os().node.isRequired,title:Os().node.isRequired,description:Os().node};const qs=Us,Ws=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"}))}));var Hs=s(8133);const Ys=({children:t})=>{const{isSubmitting:s,status:r,dirty:a,resetForm:o,initialValues:n}=q(),c=zs("selectIsMediaLoading"),d=(0,i.useMemo)((()=>(0,le.includes)((0,le.values)(r),!0)),[r]),u=(0,l.useSvgAria)(),[p,,,m,f]=(0,l.useToggleState)(!1),h=(0,i.useCallback)((()=>{f(),o({values:n})}),[o,n,f]);return(0,e.createElement)(se,{className:"yst-flex yst-flex-col yst-h-full"},(0,e.createElement)("div",{className:"yst-flex-grow yst-p-8"},t),(0,e.createElement)("footer",{className:"yst-sticky yst-bottom-0 yst-z-10"},(0,e.createElement)(Hs.Z,{easing:"ease-in-out",duration:300,height:a?"auto":0,animateOpacity:!0},(0,e.createElement)("div",{className:"yst-bg-slate-50 yst-border-slate-200 yst-border-t yst-rounded-b-lg"},(0,e.createElement)("div",{className:"yst-flex yst-align-middle yst-space-x-3 yst-p-8"},(0,e.createElement)(l.Button,{id:"button-submit-settings",type:"submit",isLoading:s,disabled:s||c||d},(0,Ps.__)("Save changes","wordpress-seo")),(0,e.createElement)(l.Button,{id:"button-undo-settings",type:"button",variant:"secondary",disabled:!a,onClick:m},(0,Ps.__)("Discard changes","wordpress-seo")),(0,e.createElement)(l.Modal,{onClose:f,isOpen:p},(0,e.createElement)(l.Modal.Panel,{closeButtonScreenReaderText:(0,Ps.__)("Close","wordpress-seo")},(0,e.createElement)("div",{className:"sm:yst-flex sm:yst-items-start"},(0,e.createElement)("div",{className:"yst-mx-auto yst-flex-shrink-0 yst-flex yst-items-center yst-justify-center yst-h-12 yst-w-12 yst-rounded-full yst-bg-red-100 sm:yst-mx-0 sm:yst-h-10 sm:yst-w-10"},(0,e.createElement)(Ws,{className:"yst-h-6 yst-w-6 yst-text-red-600",...u})),(0,e.createElement)("div",{className:"yst-mt-3 yst-text-center sm:yst-mt-0 sm:yst-ml-4 sm:yst-text-left"},(0,e.createElement)(l.Modal.Title,{className:"yst-text-lg yst-leading-6 yst-font-medium yst-text-slate-900"},(0,Ps.__)("Discard all changes","wordpress-seo")),(0,e.createElement)(l.Modal.Description,{className:"yst-text-sm yst-text-slate-500"},(0,Ps.__)("You are about to discard all unsaved changes. All of your settings will be reset to the point where you last saved. Are you sure you want to do this?","wordpress-seo")))),(0,e.createElement)("div",{className:"yst-flex yst-flex-col sm:yst-flex-row-reverse yst-gap-3 yst-mt-6"},(0,e.createElement)(l.Button,{type:"button",variant:"error",onClick:h,className:"yst-block"},(0,Ps.__)("Yes, discard changes","wordpress-seo")),(0,e.createElement)(l.Button,{type:"button",variant:"secondary",onClick:f,className:"yst-block"},(0,Ps.__)("No, continue editing","wordpress-seo"))))))))))};Ys.propTypes={children:Os().node.isRequired};const Gs=Ys,Ks=t=>{const[s,,{setTouched:r,setValue:a}]=ee({...t,type:"checkbox"}),o=(0,i.useCallback)((e=>{r(!0,!1),a(!e)}),[t.name]);return(0,e.createElement)(l.ToggleField,{...s,checked:(0,le.isUndefined)(t.checked)?!s.checked:!t.checked,onChange:o,...t})};Ks.propTypes={name:Os().string.isRequired,checked:Os().bool};const Zs=Ks,Qs=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"}))})),Xs={variant:{square:"yst-h-48 yst-w-48",landscape:"yst-h-48 yst-w-96",portrait:"yst-h-96 yst-w-48"}},Js=({label:t="",description:s="",icon:r=Qs,disabled:a=!1,isDummy:o=!1,libraryType:n="image",variant:c="landscape",id:d,mediaUrlName:u,mediaIdName:p,fallbackMediaId:m="0",previewLabel:f="",selectLabel:h=(0,Ps.__)("Select image","wordpress-seo"),replaceLabel:y=(0,Ps.__)("Replace image","wordpress-seo"),removeLabel:_=(0,Ps.__)("Remove image","wordpress-seo"),className:w=""})=>{const{values:g,setFieldValue:b,setFieldTouched:v,errors:E}=q(),[x,k]=(0,i.useState)(null),S=(0,i.useMemo)((()=>(0,le.get)(window,"wp.media",null)),[]),L=(0,i.useMemo)((()=>(0,le.get)(g,p,"")),[g,p]),T=zs("selectMediaById",[L],L),F=zs("selectIsMediaError"),$=zs("selectMediaById",[m],m),{fetchMedia:P,addOneMedia:I}=Bs(),R=(0,i.useMemo)((()=>(0,le.get)(E,p,"")),[E,p]),N=(0,i.useMemo)((()=>a||o),[o,a]),{ids:O,describedBy:M}=(0,l.useDescribedBy)(`field-${d}-id`,{description:s,error:R}),A=(0,i.useMemo)((()=>L>0?T:m>0?$:null),[L,T,m,$]),C=(0,i.useMemo)((()=>(0,le.join)((0,le.map)((null==T?void 0:T.sizes)||(null==$?void 0:$.sizes),(e=>`${null==e?void 0:e.url} ${null==e?void 0:e.width}w`)),", ")),[T,$]),D=(0,i.useCallback)((()=>{o||null==x||x.open()}),[o,x]),B=(0,i.useCallback)((()=>{o||(v(u,!0,!1),b(u,"",!1),v(p,!0,!1),b(p,""))}),[o,v,b,u,p]),V=(0,i.useCallback)((()=>{var e,t,s;if(o)return;const r=(null===(e=x.state())||void 0===e||null===(t=e.get("selection"))||void 0===t||null===(s=t.first())||void 0===s?void 0:s.toJSON())||{};v(u,!0,!1),b(u,r.url,!1),v(p,!0,!1),b(p,r.id),I(r)}),[o,x,v,b,u,p]);return(0,i.useEffect)((()=>{S&&k(S({title:t,multiple:!1,library:{type:n}}))}),[S,t,n,k]),(0,i.useEffect)((()=>(null==x||x.on("select",V),()=>null==x?void 0:x.off("select",V))),[x,V]),(0,i.useEffect)((()=>{L&&!T&&P([L]),m&&!$&&P([m])}),[]),(0,e.createElement)("fieldset",{id:d,className:"yst-min-w-0 yst-w-96 yst-max-w-full"},(0,e.createElement)(te,{type:"hidden",name:p,id:`input-${d}-id`,"aria-describedby":M,disabled:N}),(0,e.createElement)(te,{type:"hidden",name:u,id:`input-${d}-url`,"aria-describedby":M,disabled:N}),t&&(0,e.createElement)(l.Label,{as:"legend",className:Rs()("yst-mb-2",N&&"yst-opacity-50 yst-cursor-not-allowed")},t),(0,e.createElement)("button",{type:"button",id:`button-${d}-preview`,onClick:D,className:Rs()("yst-overflow-hidden yst-flex yst-justify-center yst-items-center yst-max-w-full yst-rounded-md yst-mb-4 yst-border-slate-300 focus:yst-outline-none focus:yst-ring-2 focus:yst-ring-offset-2 focus:yst-ring-primary-500",!o&&A?"yst-bg-slate-50 yst-border":"yst-border-2 yst-border-dashed",N&&"yst-opacity-50 yst-cursor-not-allowed",Xs.variant[c],w),disabled:N},!o&&A?(0,e.createElement)(e.Fragment,null,(0,e.createElement)("span",{className:"yst-sr-only"},y),(0,e.createElement)("img",{src:null==A?void 0:A.url,alt:(null==A?void 0:A.alt)||"",srcSet:C,sizes:"landscape"===c?"24rem":"12rem",width:"landscape"===c?"24rem":"12rem",loading:"lazy",decoding:"async",className:"yst-object-cover yst-object-center yst-min-h-full yst-min-w-full"})):(0,e.createElement)("div",{className:"yst-w-48 yst-max-w-full"},(0,e.createElement)("span",{className:"yst-sr-only"},h),(0,e.createElement)(r,{className:"yst-mx-auto yst-h-12 yst-w-12 yst-text-slate-400 yst-stroke-1"}),f&&(0,e.createElement)("p",{className:"yst-text-xs yst-text-slate-600 yst-text-center yst-mt-1 yst-px-8"},f))),(0,e.createElement)("div",{className:"yst-flex yst-gap-1"},!o&&L>0?(0,e.createElement)(l.Button,{id:`button-${d}-replace`,variant:"secondary",onClick:D,disabled:N},y):(0,e.createElement)(l.Button,{id:`button-${d}-select`,variant:"secondary",onClick:D,disabled:N},h),!o&&L>0&&(0,e.createElement)(l.Link,{id:`button-${d}-remove`,as:"button",type:"button",variant:"error",onClick:B,className:Rs()("yst-px-3 yst-py-2 yst-rounded-md",N&&"yst-opacity-50 yst-cursor-not-allowed"),disabled:N},_)),R&&(0,e.createElement)("p",{id:O.error,className:"yst-mt-2 yst-text-sm yst-text-red-600"},R),F&&(0,e.createElement)("p",{className:"yst-mt-2 yst-text-sm yst-text-red-600"},(0,Ps.__)("Failed to retrieve media.","wordpress-seo")),s&&(0,e.createElement)("p",{id:O.description,className:Rs()("yst-mt-2",N&&"yst-opacity-50 yst-cursor-not-allowed")},s))};Js.propTypes={label:Os().string,description:Os().node,icon:Os().elementType,disabled:Os().bool,isDummy:Os().bool,libraryType:Os().string,variant:Os().oneOf((0,le.keys)(Xs.variant)),id:Os().string.isRequired,mediaUrlName:Os().string.isRequired,mediaIdName:Os().string.isRequired,fallbackMediaId:Os().string,previewLabel:Os().node,selectLabel:Os().string,replaceLabel:Os().string,removeLabel:Os().string,className:Os().string};const er=Js,tr=window.yoast.replacementVariableEditor,sr=({className:t="",disabled:s=!1,...r})=>{const[a,o]=(0,i.useState)(null),[n,,{setTouched:l,setValue:c}]=ee(r),d=(0,i.useCallback)((e=>{l(!0,!1),c(e)}),[r.name]),u=(0,i.useCallback)((()=>null==a?void 0:a.focus()),[a]),p=(0,i.useMemo)((()=>{var e;return(null!==(e=n.value)&&void 0!==e&&e.match(/%%\w+%%$/)?`${n.value} `:n.value)||""}),[n.value]);return(0,e.createElement)("div",{className:t},(0,e.createElement)(tr.ReplacementVariableEditor,{...n,content:p,onChange:d,editorRef:o,onFocus:u,isDisabled:s,...r}))};sr.propTypes={name:Os().string.isRequired,disabled:Os().bool,className:Os().string};const rr=sr,ar=t=>{const[{value:s,...r},,{setTouched:a,setValue:o}]=ee(t),n=(0,i.useMemo)((()=>(0,le.reduce)((0,le.isString)(s)&&(null==s?void 0:s.split(","))||[],((e,t)=>{const s=(0,le.trim)(t);return s?[...e,s]:e}),[])),[s]),c=(0,i.useCallback)((e=>{a(!0,!1),o([...n,e].join(","))}),[a,o,n]),d=(0,i.useCallback)((e=>{a(!0,!1),o([...n.slice(0,e),...n.slice(e+1)].join(","))}),[a,o,n]),u=(0,i.useCallback)((e=>{a(!0,!1),o(e.join(","))}),[a,o]);return(0,e.createElement)(l.TagField,{...r,tags:n,onAddTag:c,onRemoveTag:d,onSetTags:u,...t})};ar.propTypes={name:Os().string.isRequired};const or=ar,nr=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM3 20a6 6 0 0112 0v1H3v-1z"}))}));let ir;const lr=({children:t,className:s=""})=>(0,e.createElement)("div",{className:Rs()("yst-flex yst-items-center yst-justify-center yst-gap-2 yst-py-2 yst-px-3",s)},t);lr.propTypes={children:Os().node.isRequired,className:Os().string};const cr=({name:t,id:s,className:r="",...a})=>{const o=zs("selectPreference",[],"siteRepresentsPerson",{}),n=zs("selectUsersWith",[o],o),{addManyUsers:c}=Bs(),[{value:d,...u},,{setTouched:p,setValue:m}]=ee({type:"select",name:t,id:s,...a}),[f,h]=(0,i.useState)(xt),[y,_]=(0,i.useState)([]),w=zs("selectPreference",[],"canCreateUsers",!1),g=zs("selectPreference",[],"createUserUrl",""),b=(0,i.useMemo)((()=>{const e=(0,le.values)(n);return(0,le.find)(e,["id",d])}),[d,n]),v=(0,i.useCallback)((0,le.debounce)((async e=>{try{var t,s;h(kt),ir&&(null===(s=ir)||void 0===s||s.abort()),ir=new AbortController;const r=await gt()({path:`/wp/v2/users?${(0,st.buildQueryString)({search:e,per_page:20})}`,signal:null===(t=ir)||void 0===t?void 0:t.signal});_((0,le.map)(r,"id")),c(r),h(St)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;_([]),h(Lt),console.error(e.message)}}),200),[_,c,h]),E=(0,i.useCallback)((e=>{p(!0,!1),m(e)}),[m]),x=(0,i.useCallback)((e=>v(e.target.value)),[v]);return(0,i.useEffect)((()=>{v("")}),[]),(0,e.createElement)(l.AutocompleteField,{...u,name:t,id:s,value:b?d:0,onChange:E,placeholder:(0,Ps.__)("Select a user...","wordpress-seo"),selectedLabel:null==b?void 0:b.name,onQueryChange:x,className:r,...a},(0,e.createElement)(e.Fragment,null,(f===xt||f===St)&&(0,e.createElement)(e.Fragment,null,(0,le.isEmpty)(y)?(0,e.createElement)(lr,null,(0,Ps.__)("No users found.","wordpress-seo")):(0,le.map)(y,(t=>{const s=null==n?void 0:n[t];return s?(0,e.createElement)(l.AutocompleteField.Option,{key:null==s?void 0:s.id,value:null==s?void 0:s.id},null==s?void 0:s.name):null})),w&&(0,e.createElement)("li",{className:"yst-sticky yst-inset-x-0 yst-bottom-0 yst-group"},(0,e.createElement)("a",{id:`link-create_user-${s}`,href:g,target:"_blank",rel:"noreferrer",className:"yst-relative yst-w-full yst-flex yst-items-center yst-py-4 yst-px-3 yst-gap-2 yst-no-underline yst-text-sm yst-text-left yst-bg-white yst-text-slate-700 group-hover:yst-text-white group-hover:yst-bg-primary-500 yst-border-t yst-border-slate-200"},(0,e.createElement)(nr,{className:"yst-w-5 yst-h-5 yst-text-slate-400 group-hover:yst-text-white"}),(0,e.createElement)("span",null,(0,Ps.__)("Add new user...","wordpress-seo"))))),f===kt&&(0,e.createElement)(lr,null,(0,e.createElement)(l.Spinner,{variant:"primary"}),(0,Ps.__)("Searching users...","wordpress-seo")),f===Lt&&(0,e.createElement)(lr,{className:"yst-text-red-600"},(0,Ps.__)("Failed to retrieve users.","wordpress-seo"))))};cr.propTypes={name:Os().string.isRequired,id:Os().string.isRequired,className:Os().string};const dr=cr,ur=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"}))})),pr=({children:t,className:s=""})=>(0,e.createElement)("div",{className:Rs()("yst-flex yst-items-center yst-justify-center yst-gap-2 yst-py-2 yst-px-3",s)},t);pr.propTypes={children:Os().node.isRequired,className:Os().string};const mr=({name:t,id:s,...r})=>{const a=zs("selectPreference",[],"siteBasicsPolicies",{}),o=zs("selectPagesWith",[a],(0,le.values)(a)),{fetchPages:n}=Bs(),[{value:c,...d},,{setTouched:u,setValue:p}]=ee({type:"select",name:t,id:s,...r}),[m,f]=(0,i.useState)(xt),[h,y]=(0,i.useState)([]),_=zs("selectPreference",[],"canCreatePages",!1),w=zs("selectPreference",[],"createPageUrl",""),g=(0,i.useMemo)((()=>{const e=(0,le.values)(o);return(0,le.find)(e,["id",c])}),[c,o]),b=(0,i.useCallback)((0,le.debounce)((async e=>{try{f(kt);const t=await n({search:e});y((0,le.map)(t.payload,"id")),f(St)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;y([]),f(Lt)}}),200),[y,f,n]),v=(0,i.useCallback)((e=>{u(!0,!1),p(e)}),[p,u]),E=(0,i.useCallback)((e=>b(e.target.value)),[b]),x=(0,i.useMemo)((()=>(0,le.isEmpty)(h)?(0,le.map)(o,"id"):h),[h,o]),k=(0,i.useMemo)((()=>m===St&&(0,le.isEmpty)(h)),[h,m]);return(0,e.createElement)(l.AutocompleteField,{...d,name:t,id:s,value:g?c:0,onChange:v,placeholder:(0,Ps.__)("None","wordpress-seo"),selectedLabel:null==g?void 0:g.name,onQueryChange:E,nullable:!0 +/* translators: Hidden accessibility text. */,clearButtonScreenReaderText:(0,Ps.__)("Clear selection","wordpress-seo"),...r},(0,e.createElement)(e.Fragment,null,(m===xt||m===St)&&(0,e.createElement)(e.Fragment,null,k?(0,e.createElement)(pr,null,(0,Ps.__)("No pages found.","wordpress-seo")):(0,le.map)(x,(t=>{const s=null==o?void 0:o[t];return s?(0,e.createElement)(l.AutocompleteField.Option,{key:null==s?void 0:s.id,value:null==s?void 0:s.id},null==s?void 0:s.name):null})),_&&(0,e.createElement)("li",{className:"yst-sticky yst-inset-x-0 yst-bottom-0 yst-group"},(0,e.createElement)("a",{id:`link-create_page-${s}`,href:w,target:"_blank",rel:"noreferrer",className:"yst-relative yst-w-full yst-flex yst-items-center yst-py-4 yst-px-3 yst-gap-2 yst-no-underline yst-text-sm yst-text-left yst-bg-white yst-text-slate-700 group-hover:yst-text-white group-hover:yst-bg-primary-500 yst-border-t yst-border-slate-200"},(0,e.createElement)(ur,{className:"yst-w-5 yst-h-5 yst-text-slate-400 group-hover:yst-text-white"}),(0,e.createElement)("span",null,(0,Ps.__)("Add new page...","wordpress-seo"))))),m===kt&&(0,e.createElement)(pr,null,(0,e.createElement)(l.Spinner,{variant:"primary"}),(0,Ps.__)("Searching pages...","wordpress-seo")),m===Lt&&(0,e.createElement)(pr,{className:"yst-text-red-600"},(0,Ps.__)("Failed to retrieve pages.","wordpress-seo"))))};mr.propTypes={name:Os().string.isRequired,id:Os().string.isRequired};const fr=mr,hr=({as:t,transformValue:s=le.identity,...r})=>{const[a,,{setTouched:o,setValue:n}]=ee(r),l=(0,i.useCallback)((e=>{o(!0,!1),n(s(e))}),[r.name]);return(0,e.createElement)(t,{...a,onChange:l,...r})};hr.propTypes={as:Os().elementType.isRequired,name:Os().string.isRequired,transformValue:Os().func};const yr=hr,_r=({name:t,id:s,options:r,...a})=>{const[o,,{setTouched:n,setValue:c}]=ee({type:"select",name:t,id:s,...a}),[d,u]=(0,i.useState)(""),p=e=>{var t;e&&null!==(t=r.find((t=>t.value===e)))&&void 0!==t&&t.label?u(r.find((t=>t.value===e)).label):u(e)},m=(0,i.useCallback)((e=>{c(e),p(e)}),[c,n]),f=(0,i.useCallback)((e=>{c(e.target.value),p(e.target.value)}),[c]);return(0,i.useEffect)((()=>{p(o.value)}),[]),(0,e.createElement)(l.AutocompleteField,{...o,name:t,id:s,selectedLabel:d,onChange:m,onQueryChange:f,...a},r&&r.map((t=>(0,e.createElement)(l.AutocompleteField.Option,{key:t.value,value:t.value},t.label))))};_r.propTypes={name:Os().string.isRequired,id:Os().string.isRequired,options:Os().array},_r.defaultProps={options:[]};const wr=_r,gr=t=>{const s=({name:s,...r})=>{const{isDisabled:a,message:o}=Cs({name:s});return a?(0,e.createElement)("div",null,(0,e.createElement)(l.Badge,{variant:"plain",size:"small",className:"yst-mb-2"},o),(0,e.createElement)(t,{name:s,...r,disabled:!0})):(0,e.createElement)(t,{name:s,...r})};return s.propTypes={name:Os().string.isRequired},s},br=t=>{const s=({name:s,isDummy:r=!1,...a})=>{const o=zs("selectDefaultSettingValue",[s],s);return r?(0,e.createElement)(t,{name:s,...a,disabled:!0,value:o,onChange:le.noop,checked:o,content:o}):(0,e.createElement)(t,{name:s,...a})};return s.propTypes={name:Os().string.isRequired,isDummy:Os().bool},s},vr=t=>{const s=({name:s,isDummy:r=!1,...a})=>{const o=zs("selectDefaultSettingValue",[s],s);return r?(0,e.createElement)(t,{name:s,...a,disabled:!0,value:o,onChange:le.noop}):(0,e.createElement)(t,{name:s,...a})};return s.propTypes={name:Os().string.isRequired,isDummy:Os().bool},s},Er=t=>{const s=({name:s,...r})=>{const{isTouched:a,error:o}=(({name:e})=>{const{touched:t,errors:s}=q();return{isTouched:(0,i.useMemo)((()=>(0,le.get)(t,e,!1)),[t]),error:(0,i.useMemo)((()=>(0,le.get)(s,e,"")),[s])}})({name:s});return(0,e.createElement)(t,{name:s,validation:{variant:"error",message:a&&o},...r})};return s.propTypes={name:Os().string.isRequired},s},xr=Er(te),kr=(e,t="")=>(0,le.reduce)(e,((e,s,r)=>{const a=(0,le.join)((0,le.filter)([t,r],(0,le.flowRight)(Boolean,le.toString)),".");return(0,le.isObject)(s)||(0,le.isArray)(s)?{...e,...kr(s,a)}:{...e,[a]:s}}),{}),Sr=({id:t,onDismiss:s,...r})=>{const{errors:a}=q(),o=zs("selectSearchIndex"),n=(0,i.useMemo)((()=>kr(a)),[a]);return(0,e.createElement)(l.Notifications.Notification,{key:t,id:t,onDismiss:s,...r},(0,e.createElement)("ul",{className:"yst-list-disc yst-mt-1 yst-ml-4 yst-space-y-2"},(0,le.map)(n,((t,s)=>t&&(0,e.createElement)("li",{key:s},(0,e.createElement)(Ze,{to:`${(0,le.get)(o,`${s}.route`,"404")}#${(0,le.get)(o,`${s}.fieldId`,"")}`},`${(0,le.get)(o,`${s}.routeLabel`,"")} - ${(0,le.get)(o,`${s}.fieldLabel`,"")}`),": ",t)))))};Sr.propTypes={id:Os().string.isRequired,onDismiss:Os().func};const Lr=()=>{(()=>{const{isValid:e,errors:t,isSubmitting:s}=q(),{addNotification:r,removeNotification:a}=Bs(),o=zs("selectNotification",[],"validation-errors");(0,i.useEffect)((()=>{e&&o&&a("validation-errors")}),[e,o]),(0,i.useEffect)((()=>{s&&!e&&r({id:"validation-errors",variant:"error",size:"large",title:(0,Ps.__)("Oh no! It seems your form contains invalid data. Please review the following fields:","wordpress-seo")})}),[s,t,e])})(),(()=>{const{removeNotification:e}=Bs(),t=zs("selectNotifications"),s=zs("selectPostTypes"),r=zs("selectTaxonomies");(0,i.useEffect)((()=>{const a=(0,le.some)(s,["isNew",!0]),o=(0,le.some)(r,["isNew",!0]);!t["new-content-type"]||a||o||e("new-content-type")}),[s,r])})();const{removeNotification:t}=Bs(),s=zs("selectNotifications"),r=(0,i.useMemo)((()=>(0,le.map)(s,(e=>({...e,onDismiss:t,autoDismiss:"success"===e.variant?5e3:null, +/* translators: Hidden accessibility text. */ +dismissScreenReaderLabel:(0,Ps.__)("Dismiss","wordpress-seo")})))),[s]);return(0,e.createElement)(l.Notifications,{notifications:r,position:"bottom-left"},r.map((t=>"validation-errors"===t.id?(0,e.createElement)(Sr,{key:t.id,...t}):(0,e.createElement)(l.Notifications.Notification,{key:t.id,...t}))))},Tr=({name:t,disabled:s=!1})=>{const r=zs("selectPreference",[],"isNewsSeoActive"),a=zs("selectLink",[],"https://yoa.st/get-news-settings"),{values:o}=q(),n=(0,i.useMemo)((()=>"NewsArticle"===(0,le.get)(o,`wpseo_titles.schema-article-type-${t}`,"")),[t,o]);return r?null:(0,e.createElement)(Hs.Z,{easing:"ease-in-out",duration:300,height:n&&!s?"auto":0,animateOpacity:!0},(0,e.createElement)(l.Alert,{className:"yst-mt-8",variant:"info",role:"status"},(0,Ps.sprintf)(/* translators: %s Expands to "Yoast News SEO" */ +(0,Ps.__)("Are you publishing news articles? %s helps you optimize your site for Google News.","wordpress-seo"),"Yoast News SEO")," ",(0,e.createElement)("a",{id:"link-get-news-seo",href:a,target:"_blank",rel:"noopener noreferrer"},(0,Ps.sprintf)(/* translators: %s: Expands to "Yoast News SEO". */ +(0,Ps.__)("Get the %s plugin now!","wordpress-seo"),"Yoast News SEO"))))};Tr.propTypes={name:Os().string.isRequired,disabled:Os().bool};const Fr=Tr,$r=({isEnabled:t, +/* translators: %1$s expands to an opening emphasis tag. %2$s expands to a closing emphasis tag. */ +text:s=(0,Ps.__)("The %1$ssocial image%2$s, %1$ssocial title%2$s and %1$ssocial description%2$s require Open Graph data, which is currently disabled in the ‘Social sharing’ section in %3$sSite features%4$s.","wordpress-seo")})=>{const r=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(s,"","","",""),{em:(0,e.createElement)("em",null),link:(0,e.createElement)(Ze,{to:"/site-features#section-social-sharing"})})),[]);return t?null:(0,e.createElement)(l.Alert,{variant:"info",className:"yst-mb-6"},r)};$r.propTypes={isEnabled:Os().bool.isRequired,text:Os().string};const Pr=$r,Ir=window.yoast.reactHelmet;var Rr={border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",whiteSpace:"nowrap",padding:0,width:"1px",position:"absolute"},Nr=function(e){var s=e.message,r=e["aria-live"];return t().createElement("div",{style:Rr,role:"log","aria-live":r},s||"")};Nr.propTypes={};const Or=Nr;function Mr(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var Ar=function(e){function s(){var t,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s);for(var a=arguments.length,o=Array(a),n=0;n{const a=(({prefix:e="",postfix:t=""}={})=>e+zs("selectPreference",[],"documentTitle")+t)({prefix:`${s} ‹ `}),o=(0,Ps.sprintf)(/* translators: 1: Settings' section title, 2: Yoast SEO */ +(0,Ps.__)("%1$s Settings - %2$s","wordpress-seo"),s,"Yoast SEO");return(0,e.createElement)(Vr,null,(0,e.createElement)(Gr,{message:o,"aria-live":"polite"}),(0,e.createElement)(Ir.Helmet,null,(0,e.createElement)("title",null,a)),(0,e.createElement)("header",{className:"yst-p-8 yst-border-b yst-border-slate-200"},(0,e.createElement)("div",{className:"yst-max-w-screen-sm"},(0,e.createElement)(l.Title,null,s),r&&(0,e.createElement)("p",{className:"yst-text-tiny yst-mt-3"},r))),t)};Kr.propTypes={children:Os().node.isRequired,title:Os().string.isRequired,description:Os().node};const Zr=Kr;function Qr(t,s){let[r,a]=(0,e.useState)(t),o=Jt(t);return Qt((()=>a(o.current)),[o,a,...s]),r}var Xr;let Jr=null!=(Xr=e.useId)?Xr:function(){let t=es(),[s,r]=e.useState(t?()=>Zt.nextId():null);return Qt((()=>{null===s&&r(Zt.nextId())}),[s]),null!=s?""+s:void 0};function ea(e){return Zt.isServer?null:e instanceof Node?e.ownerDocument:null!=e&&e.hasOwnProperty("current")&&e.current instanceof Node?e.current.ownerDocument:document}let ta=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((e=>`${e}:not([tabindex='-1'])`)).join(",");var sa,ra=(e=>(e[e.First=1]="First",e[e.Previous=2]="Previous",e[e.Next=4]="Next",e[e.Last=8]="Last",e[e.WrapAround=16]="WrapAround",e[e.NoScroll=32]="NoScroll",e))(ra||{}),aa=(e=>(e[e.Error=0]="Error",e[e.Overflow=1]="Overflow",e[e.Success=2]="Success",e[e.Underflow=3]="Underflow",e))(aa||{}),oa=((sa=oa||{})[sa.Previous=-1]="Previous",sa[sa.Next=1]="Next",sa),na=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(na||{});function ia(t,s,r){let a=Jt(s);(0,e.useEffect)((()=>{function e(e){a.current(e)}return document.addEventListener(t,e,r),()=>document.removeEventListener(t,e,r)}),[t,r])}function la(e){var t;if(e.type)return e.type;let s=null!=(t=e.as)?t:"button";return"string"==typeof s&&"button"===s.toLowerCase()?"button":void 0}function ca(t,s){let[r,a]=(0,e.useState)((()=>la(t)));return Qt((()=>{a(la(t))}),[t.type,t.as]),Qt((()=>{r||!s.current||s.current instanceof HTMLButtonElement&&!s.current.hasAttribute("type")&&a("button")}),[r,s]),r}["textarea","input"].join(",");var da=(e=>(e[e.First=0]="First",e[e.Previous=1]="Previous",e[e.Next=2]="Next",e[e.Last=3]="Last",e[e.Specific=4]="Specific",e[e.Nothing=5]="Nothing",e))(da||{});function ua(e={},t=null,s=[]){for(let[r,a]of Object.entries(e))ma(s,pa(t,r),a);return s}function pa(e,t){return e?e+"["+t+"]":t}function ma(e,t,s){if(Array.isArray(s))for(let[r,a]of s.entries())ma(e,pa(t,r.toString()),a);else s instanceof Date?e.push([t,s.toISOString()]):"boolean"==typeof s?e.push([t,s?"1":"0"]):"string"==typeof s?e.push([t,s]):"number"==typeof s?e.push([t,`${s}`]):null==s?e.push([t,""]):ua(s,t,e)}var fa=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(fa||{});let ha=jt((function(e,t){let{features:s=1,...r}=e;return Dt({ourProps:{ref:t,"aria-hidden":2==(2&s)||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...4==(4&s)&&2!=(2&s)&&{display:"none"}}},theirProps:r,slot:{},defaultTag:"div",name:"Hidden"})}));var ya=(e=>(e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.Delete="Delete",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab",e))(ya||{});function _a(t,s){let r=(0,e.useRef)([]),a=ts(t);(0,e.useEffect)((()=>{let e=[...r.current];for(let[t,o]of s.entries())if(r.current[t]!==o){let t=a(s,e);return r.current=s,t}}),[a,...s])}function wa(e){return[e.screenX,e.screenY]}var ga=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(ga||{}),ba=(e=>(e[e.Single=0]="Single",e[e.Multi=1]="Multi",e))(ba||{}),va=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(va||{}),Ea=(e=>(e[e.OpenCombobox=0]="OpenCombobox",e[e.CloseCombobox=1]="CloseCombobox",e[e.GoToOption=2]="GoToOption",e[e.RegisterOption=3]="RegisterOption",e[e.UnregisterOption=4]="UnregisterOption",e[e.RegisterLabel=5]="RegisterLabel",e))(Ea||{});function xa(e,t=(e=>e)){let s=null!==e.activeOptionIndex?e.options[e.activeOptionIndex]:null,r=function(e,t=(e=>e)){return e.slice().sort(((e,s)=>{let r=t(e),a=t(s);if(null===r||null===a)return 0;let o=r.compareDocumentPosition(a);return o&Node.DOCUMENT_POSITION_FOLLOWING?-1:o&Node.DOCUMENT_POSITION_PRECEDING?1:0}))}(t(e.options.slice()),(e=>e.dataRef.current.domRef.current)),a=s?r.indexOf(s):null;return-1===a&&(a=null),{options:r,activeOptionIndex:a}}let ka={1:e=>e.dataRef.current.disabled||1===e.comboboxState?e:{...e,activeOptionIndex:null,comboboxState:1},0(e){if(e.dataRef.current.disabled||0===e.comboboxState)return e;let t=e.activeOptionIndex,{isSelected:s}=e.dataRef.current,r=e.options.findIndex((e=>s(e.dataRef.current.value)));return-1!==r&&(t=r),{...e,comboboxState:0,activeOptionIndex:t}},2(e,t){var s;if(e.dataRef.current.disabled||e.dataRef.current.optionsRef.current&&!e.dataRef.current.optionsPropsRef.current.static&&1===e.comboboxState)return e;let r=xa(e);if(null===r.activeOptionIndex){let e=r.options.findIndex((e=>!e.dataRef.current.disabled));-1!==e&&(r.activeOptionIndex=e)}let a=function(e,t){let s=t.resolveItems();if(s.length<=0)return null;let r=t.resolveActiveIndex(),a=null!=r?r:-1,o=(()=>{switch(e.focus){case 0:return s.findIndex((e=>!t.resolveDisabled(e)));case 1:{let e=s.slice().reverse().findIndex(((e,s,r)=>!(-1!==a&&r.length-s-1>=a||t.resolveDisabled(e))));return-1===e?e:s.length-1-e}case 2:return s.findIndex(((e,s)=>!(s<=a||t.resolveDisabled(e))));case 3:{let e=s.slice().reverse().findIndex((e=>!t.resolveDisabled(e)));return-1===e?e:s.length-1-e}case 4:return s.findIndex((s=>t.resolveId(s)===e.id));case 5:return null;default:!function(e){throw new Error("Unexpected object: "+e)}(e)}})();return-1===o?r:o}(t,{resolveItems:()=>r.options,resolveActiveIndex:()=>r.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});return{...e,...r,activeOptionIndex:a,activationTrigger:null!=(s=t.trigger)?s:1}},3:(e,t)=>{let s={id:t.id,dataRef:t.dataRef},r=xa(e,(e=>[...e,s]));null===e.activeOptionIndex&&e.dataRef.current.isSelected(t.dataRef.current.value)&&(r.activeOptionIndex=r.options.indexOf(s));let a={...e,...r,activationTrigger:1};return e.dataRef.current.__demoMode&&void 0===e.dataRef.current.value&&(a.activeOptionIndex=0),a},4:(e,t)=>{let s=xa(e,(e=>{let s=e.findIndex((e=>e.id===t.id));return-1!==s&&e.splice(s,1),e}));return{...e,...s,activationTrigger:1}},5:(e,t)=>({...e,labelId:t.id})},Sa=(0,e.createContext)(null);function La(t){let s=(0,e.useContext)(Sa);if(null===s){let e=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,La),e}return s}Sa.displayName="ComboboxActionsContext";let Ta=(0,e.createContext)(null);function Fa(t){let s=(0,e.useContext)(Ta);if(null===s){let e=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,Fa),e}return s}function $a(e,t){return Nt(t.type,ka,e,t)}Ta.displayName="ComboboxDataContext";let Pa=e.Fragment,Ia=jt((function(t,s){let{value:r,defaultValue:a,onChange:o,name:n,by:i=((e,t)=>e===t),disabled:l=!1,__demoMode:c=!1,nullable:d=!1,multiple:u=!1,...p}=t,[m=(u?[]:void 0),f]=function(t,s,r){let[a,o]=(0,e.useState)(r),n=void 0!==t,i=(0,e.useRef)(n),l=(0,e.useRef)(!1),c=(0,e.useRef)(!1);return!n||i.current||l.current?!n&&i.current&&!c.current&&(c.current=!0,i.current=n,console.error("A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen.")):(l.current=!0,i.current=n,console.error("A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen.")),[n?t:a,ts((e=>(n||o(e),null==s?void 0:s(e))))]}(r,o,a),[h,y]=(0,e.useReducer)($a,{dataRef:(0,e.createRef)(),comboboxState:c?0:1,options:[],activeOptionIndex:null,activationTrigger:1,labelId:null}),_=(0,e.useRef)(!1),w=(0,e.useRef)({static:!1,hold:!1}),g=(0,e.useRef)(null),b=(0,e.useRef)(null),v=(0,e.useRef)(null),E=(0,e.useRef)(null),x=ts("string"==typeof i?(e,t)=>{let s=i;return(null==e?void 0:e[s])===(null==t?void 0:t[s])}:i),k=(0,e.useCallback)((e=>Nt(S.mode,{1:()=>m.some((t=>x(t,e))),0:()=>x(m,e)})),[m]),S=(0,e.useMemo)((()=>({...h,optionsPropsRef:w,labelRef:g,inputRef:b,buttonRef:v,optionsRef:E,value:m,defaultValue:a,disabled:l,mode:u?1:0,get activeOptionIndex(){if(_.current&&null===h.activeOptionIndex&&h.options.length>0){let e=h.options.findIndex((e=>!e.dataRef.current.disabled));if(-1!==e)return e}return h.activeOptionIndex},compare:x,isSelected:k,nullable:d,__demoMode:c})),[m,a,l,u,d,c,h]);Qt((()=>{h.dataRef.current=S}),[S]),function(t,s,r=!0){let a=(0,e.useRef)(!1);function o(e,r){if(!a.current||e.defaultPrevented)return;let o=function e(t){return"function"==typeof t?e(t()):Array.isArray(t)||t instanceof Set?t:[t]}(t),n=r(e);if(null!==n&&n.getRootNode().contains(n)){for(let t of o){if(null===t)continue;let s=t instanceof HTMLElement?t:t.current;if(null!=s&&s.contains(n)||e.composed&&e.composedPath().includes(s))return}return!function(e,t=0){var s;return e!==(null==(s=ea(e))?void 0:s.body)&&Nt(t,{0:()=>e.matches(ta),1(){let t=e;for(;null!==t;){if(t.matches(ta))return!0;t=t.parentElement}return!1}})}(n,na.Loose)&&-1!==n.tabIndex&&e.preventDefault(),s(e,n)}}(0,e.useEffect)((()=>{requestAnimationFrame((()=>{a.current=r}))}),[r]);let n=(0,e.useRef)(null);ia("mousedown",(e=>{var t,s;a.current&&(n.current=(null==(s=null==(t=e.composedPath)?void 0:t.call(e))?void 0:s[0])||e.target)}),!0),ia("click",(e=>{!n.current||(o(e,(()=>n.current)),n.current=null)}),!0),ia("blur",(e=>o(e,(()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null))),!0)}([S.buttonRef,S.inputRef,S.optionsRef],(()=>M.closeCombobox()),0===S.comboboxState);let L=(0,e.useMemo)((()=>({open:0===S.comboboxState,disabled:l,activeIndex:S.activeOptionIndex,activeOption:null===S.activeOptionIndex?null:S.options[S.activeOptionIndex].dataRef.current.value,value:m})),[S,l,m]),T=ts((e=>{let t=S.options.find((t=>t.id===e));!t||O(t.dataRef.current.value)})),F=ts((()=>{if(null!==S.activeOptionIndex){let{dataRef:e,id:t}=S.options[S.activeOptionIndex];O(e.current.value),M.goToOption(da.Specific,t)}})),$=ts((()=>{y({type:0}),_.current=!0})),P=ts((()=>{y({type:1}),_.current=!1})),I=ts(((e,t,s)=>(_.current=!1,e===da.Specific?y({type:2,focus:da.Specific,id:t,trigger:s}):y({type:2,focus:e,trigger:s})))),R=ts(((e,t)=>(y({type:3,id:e,dataRef:t}),()=>y({type:4,id:e})))),N=ts((e=>(y({type:5,id:e}),()=>y({type:5,id:null})))),O=ts((e=>Nt(S.mode,{0:()=>null==f?void 0:f(e),1(){let t=S.value.slice(),s=t.findIndex((t=>x(t,e)));return-1===s?t.push(e):t.splice(s,1),null==f?void 0:f(t)}}))),M=(0,e.useMemo)((()=>({onChange:O,registerOption:R,registerLabel:N,goToOption:I,closeCombobox:P,openCombobox:$,selectActiveOption:F,selectOption:T})),[]),A=null===s?{}:{ref:s},C=(0,e.useRef)(null),D=is();return(0,e.useEffect)((()=>{!C.current||void 0!==a&&D.addEventListener(C.current,"reset",(()=>{O(a)}))}),[C,O]),e.createElement(Sa.Provider,{value:M},e.createElement(Ta.Provider,{value:S},e.createElement(Yt,{value:Nt(S.comboboxState,{0:Wt.Open,1:Wt.Closed})},null!=n&&null!=m&&ua({[n]:m}).map((([t,s],r)=>e.createElement(ha,{features:fa.Hidden,ref:0===r?e=>{var t;C.current=null!=(t=null==e?void 0:e.closest("form"))?t:null}:void 0,...zt({key:t,as:"input",type:"hidden",hidden:!0,readOnly:!0,name:t,value:s})}))),Dt({ourProps:A,theirProps:p,slot:L,defaultTag:Pa,name:"Combobox"}))))})),Ra=jt((function(t,s){var r,a,o,n;let i=Jr(),{id:l=`headlessui-combobox-input-${i}`,onChange:c,displayValue:d,type:u="text",...p}=t,m=Fa("Combobox.Input"),f=La("Combobox.Input"),h=rs(m.inputRef,s),y=(0,e.useRef)(!1),_=is();var w;_a((([e,t],[s,r])=>{y.current||!m.inputRef.current||(0===r&&1===t||e!==s)&&(m.inputRef.current.value=e)}),["function"==typeof d&&void 0!==m.value?null!=(w=d(m.value))?w:"":"string"==typeof m.value?m.value:"",m.comboboxState]),_a((([e],[t])=>{if(0===e&&1===t){let e=m.inputRef.current;if(!e)return;let t=e.value,{selectionStart:s,selectionEnd:r,selectionDirection:a}=e;e.value="",e.value=t,null!==a?e.setSelectionRange(s,r,a):e.setSelectionRange(s,r)}}),[m.comboboxState]);let g=(0,e.useRef)(!1),b=ts((()=>{g.current=!0})),v=ts((()=>{setTimeout((()=>{g.current=!1}))})),E=ts((e=>{switch(y.current=!0,e.key){case ya.Backspace:case ya.Delete:if(0!==m.mode||!m.nullable)return;let t=e.currentTarget;_.requestAnimationFrame((()=>{""===t.value&&(f.onChange(null),m.optionsRef.current&&(m.optionsRef.current.scrollTop=0),f.goToOption(da.Nothing))}));break;case ya.Enter:if(y.current=!1,0!==m.comboboxState||g.current)return;if(e.preventDefault(),e.stopPropagation(),null===m.activeOptionIndex)return void f.closeCombobox();f.selectActiveOption(),0===m.mode&&f.closeCombobox();break;case ya.ArrowDown:return y.current=!1,e.preventDefault(),e.stopPropagation(),Nt(m.comboboxState,{0:()=>{f.goToOption(da.Next)},1:()=>{f.openCombobox()}});case ya.ArrowUp:return y.current=!1,e.preventDefault(),e.stopPropagation(),Nt(m.comboboxState,{0:()=>{f.goToOption(da.Previous)},1:()=>{f.openCombobox(),_.nextFrame((()=>{m.value||f.goToOption(da.Last)}))}});case ya.Home:if(e.shiftKey)break;return y.current=!1,e.preventDefault(),e.stopPropagation(),f.goToOption(da.First);case ya.PageUp:return y.current=!1,e.preventDefault(),e.stopPropagation(),f.goToOption(da.First);case ya.End:if(e.shiftKey)break;return y.current=!1,e.preventDefault(),e.stopPropagation(),f.goToOption(da.Last);case ya.PageDown:return y.current=!1,e.preventDefault(),e.stopPropagation(),f.goToOption(da.Last);case ya.Escape:return y.current=!1,0!==m.comboboxState?void 0:(e.preventDefault(),m.optionsRef.current&&!m.optionsPropsRef.current.static&&e.stopPropagation(),f.closeCombobox());case ya.Tab:if(y.current=!1,0!==m.comboboxState)return;0===m.mode&&f.selectActiveOption(),f.closeCombobox()}})),x=ts((e=>{f.openCombobox(),null==c||c(e)})),k=ts((()=>{y.current=!1})),S=Qr((()=>{if(m.labelId)return[m.labelId].join(" ")}),[m.labelId]),L=(0,e.useMemo)((()=>({open:0===m.comboboxState,disabled:m.disabled})),[m]);return Dt({ourProps:{ref:h,id:l,role:"combobox",type:u,"aria-controls":null==(r=m.optionsRef.current)?void 0:r.id,"aria-expanded":m.disabled?void 0:0===m.comboboxState,"aria-activedescendant":null===m.activeOptionIndex||null==(a=m.options[m.activeOptionIndex])?void 0:a.id,"aria-multiselectable":1===m.mode||void 0,"aria-labelledby":S,"aria-autocomplete":"list",defaultValue:null!=(n=null!=(o=t.defaultValue)?o:void 0!==m.defaultValue?null==d?void 0:d(m.defaultValue):null)?n:m.defaultValue,disabled:m.disabled,onCompositionStart:b,onCompositionEnd:v,onKeyDown:E,onChange:x,onBlur:k},theirProps:p,slot:L,defaultTag:"input",name:"Combobox.Input"})})),Na=jt((function(t,s){var r;let a=Fa("Combobox.Button"),o=La("Combobox.Button"),n=rs(a.buttonRef,s),i=Jr(),{id:l=`headlessui-combobox-button-${i}`,...c}=t,d=is(),u=ts((e=>{switch(e.key){case ya.ArrowDown:return e.preventDefault(),e.stopPropagation(),1===a.comboboxState&&o.openCombobox(),d.nextFrame((()=>{var e;return null==(e=a.inputRef.current)?void 0:e.focus({preventScroll:!0})}));case ya.ArrowUp:return e.preventDefault(),e.stopPropagation(),1===a.comboboxState&&(o.openCombobox(),d.nextFrame((()=>{a.value||o.goToOption(da.Last)}))),d.nextFrame((()=>{var e;return null==(e=a.inputRef.current)?void 0:e.focus({preventScroll:!0})}));case ya.Escape:return 0!==a.comboboxState?void 0:(e.preventDefault(),a.optionsRef.current&&!a.optionsPropsRef.current.static&&e.stopPropagation(),o.closeCombobox(),d.nextFrame((()=>{var e;return null==(e=a.inputRef.current)?void 0:e.focus({preventScroll:!0})})));default:return}})),p=ts((e=>{if(function(e){let t=e.parentElement,s=null;for(;t&&!(t instanceof HTMLFieldSetElement);)t instanceof HTMLLegendElement&&(s=t),t=t.parentElement;let r=""===(null==t?void 0:t.getAttribute("disabled"));return(!r||!function(e){if(!e)return!1;let t=e.previousElementSibling;for(;null!==t;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}(s))&&r}(e.currentTarget))return e.preventDefault();0===a.comboboxState?o.closeCombobox():(e.preventDefault(),o.openCombobox()),d.nextFrame((()=>{var e;return null==(e=a.inputRef.current)?void 0:e.focus({preventScroll:!0})}))})),m=Qr((()=>{if(a.labelId)return[a.labelId,l].join(" ")}),[a.labelId,l]),f=(0,e.useMemo)((()=>({open:0===a.comboboxState,disabled:a.disabled,value:a.value})),[a]);return Dt({ourProps:{ref:n,id:l,type:ca(t,a.buttonRef),tabIndex:-1,"aria-haspopup":"listbox","aria-controls":null==(r=a.optionsRef.current)?void 0:r.id,"aria-expanded":a.disabled?void 0:0===a.comboboxState,"aria-labelledby":m,disabled:a.disabled,onClick:p,onKeyDown:u},theirProps:c,slot:f,defaultTag:"button",name:"Combobox.Button"})})),Oa=jt((function(t,s){let r=Jr(),{id:a=`headlessui-combobox-label-${r}`,...o}=t,n=Fa("Combobox.Label"),i=La("Combobox.Label"),l=rs(n.labelRef,s);Qt((()=>i.registerLabel(a)),[a]);let c=ts((()=>{var e;return null==(e=n.inputRef.current)?void 0:e.focus({preventScroll:!0})})),d=(0,e.useMemo)((()=>({open:0===n.comboboxState,disabled:n.disabled})),[n]);return Dt({ourProps:{ref:l,id:a,onClick:c},theirProps:o,slot:d,defaultTag:"label",name:"Combobox.Label"})})),Ma=At.RenderStrategy|At.Static,Aa=jt((function(t,s){let r=Jr(),{id:a=`headlessui-combobox-options-${r}`,hold:o=!1,...n}=t,i=Fa("Combobox.Options"),l=rs(i.optionsRef,s),c=Ht(),d=null!==c?c===Wt.Open:0===i.comboboxState;Qt((()=>{var e;i.optionsPropsRef.current.static=null!=(e=t.static)&&e}),[i.optionsPropsRef,t.static]),Qt((()=>{i.optionsPropsRef.current.hold=o}),[i.optionsPropsRef,o]),function({container:t,accept:s,walk:r,enabled:a=!0}){let o=(0,e.useRef)(s),n=(0,e.useRef)(r);(0,e.useEffect)((()=>{o.current=s,n.current=r}),[s,r]),Qt((()=>{if(!t||!a)return;let e=ea(t);if(!e)return;let s=o.current,r=n.current,i=Object.assign((e=>s(e)),{acceptNode:s}),l=e.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,i,!1);for(;l.nextNode();)r(l.currentNode)}),[t,a,o,n])}({container:i.optionsRef.current,enabled:0===i.comboboxState,accept:e=>"option"===e.getAttribute("role")?NodeFilter.FILTER_REJECT:e.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT,walk(e){e.setAttribute("role","none")}});let u=Qr((()=>{var e,t;return null!=(t=i.labelId)?t:null==(e=i.buttonRef.current)?void 0:e.id}),[i.labelId,i.buttonRef.current]);return Dt({ourProps:{"aria-labelledby":u,role:"listbox",id:a,ref:l},theirProps:n,slot:(0,e.useMemo)((()=>({open:0===i.comboboxState})),[i]),defaultTag:"ul",features:Ma,visible:d,name:"Combobox.Options"})})),Ca=jt((function(t,s){var r,a;let o=Jr(),{id:n=`headlessui-combobox-option-${o}`,disabled:i=!1,value:l,...c}=t,d=Fa("Combobox.Option"),u=La("Combobox.Option"),p=null!==d.activeOptionIndex&&d.options[d.activeOptionIndex].id===n,m=d.isSelected(l),f=(0,e.useRef)(null),h=Jt({disabled:i,value:l,domRef:f,textValue:null==(a=null==(r=f.current)?void 0:r.textContent)?void 0:a.toLowerCase()}),y=rs(s,f),_=ts((()=>u.selectOption(n)));Qt((()=>u.registerOption(n,h)),[h,n]);let w=(0,e.useRef)(!d.__demoMode);Qt((()=>{if(!d.__demoMode)return;let e=as();return e.requestAnimationFrame((()=>{w.current=!0})),e.dispose}),[]),Qt((()=>{if(0!==d.comboboxState||!p||!w.current||0===d.activationTrigger)return;let e=as();return e.requestAnimationFrame((()=>{var e,t;null==(t=null==(e=f.current)?void 0:e.scrollIntoView)||t.call(e,{block:"nearest"})})),e.dispose}),[f,p,d.comboboxState,d.activationTrigger,d.activeOptionIndex]);let g=ts((e=>{if(i)return e.preventDefault();_(),0===d.mode&&u.closeCombobox()})),b=ts((()=>{if(i)return u.goToOption(da.Nothing);u.goToOption(da.Specific,n)})),v=function(){let t=(0,e.useRef)([-1,-1]);return{wasMoved(e){let s=wa(e);return(t.current[0]!==s[0]||t.current[1]!==s[1])&&(t.current=s,!0)},update(e){t.current=wa(e)}}}(),E=ts((e=>v.update(e))),x=ts((e=>{!v.wasMoved(e)||i||p||u.goToOption(da.Specific,n,0)})),k=ts((e=>{!v.wasMoved(e)||i||!p||d.optionsPropsRef.current.hold||u.goToOption(da.Nothing)})),S=(0,e.useMemo)((()=>({active:p,selected:m,disabled:i})),[p,m,i]);return Dt({ourProps:{id:n,ref:y,role:"option",tabIndex:!0===i?void 0:-1,"aria-disabled":!0===i||void 0,"aria-selected":m,disabled:void 0,onClick:g,onFocus:b,onPointerEnter:E,onMouseEnter:E,onPointerMove:x,onMouseMove:x,onPointerLeave:k,onMouseLeave:k},theirProps:c,slot:S,defaultTag:"li",name:"Combobox.Option"})})),Da=Object.assign(Ia,{Input:Ra,Button:Na,Label:Oa,Options:Aa,Option:Ca});const Ba=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"}))})),Va=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))}));function ja(){return ja=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var s=0,r=new Array(t);s'),1):!s||e.some((function(e){return s.includes(e)}))||e.includes("*"))){var e,s,r=function(e){var s;Ya(e,["input","textarea","select"])&&!Ya(e,null==c?void 0:c.enableOnFormTags)||(null===o.current||document.activeElement===o.current||o.current.contains(document.activeElement)?(null==(s=e.target)||!s.isContentEditable||null!=c&&c.enableOnContentEditable)&&Wa(t,null==c?void 0:c.splitKey).forEach((function(t){var s,r=Ha(t,null==c?void 0:c.combinationKey);if(function(e,t,s){var r=t.alt,a=t.meta,o=t.mod,n=t.shift,i=t.keys,l=e.altKey,c=e.ctrlKey,d=e.metaKey,u=e.shiftKey,p=e.key,m=e.code.toLowerCase().replace("key",""),f=p.toLowerCase();if(l!==r&&"alt"!==f)return!1;if(u!==n&&"shift"!==f)return!1;if(o){if(!d&&!c)return!1}else if(d!==a&&c!==a&&"meta"!==m&&"ctrl"!==m)return!1;return!(!i||1!==i.length||!i.includes(f)&&!i.includes(m))||(i?i.every((function(e){return s.has(e)})):!i)}(e,r,Ja)||null!=(s=r.keys)&&s.includes("*")){if(function(e,t,s){("function"==typeof s&&s(e,t)||!0===s)&&e.preventDefault()}(e,r,null==c?void 0:c.preventDefault),!function(e,t,s){return"function"==typeof s?s(e,t):!0===s||void 0===s}(e,r,null==c?void 0:c.enabled))return void Qa(e);l(e,r)}})):Qa(e))},a=function(e){void 0!==e.key&&(Ja.add(e.key.toLowerCase()),(void 0===(null==c?void 0:c.keydown)&&!0!==(null==c?void 0:c.keyup)||null!=c&&c.keydown)&&r(e))},n=function(e){void 0!==e.key&&("meta"!==e.key.toLowerCase()?Ja.delete(e.key.toLowerCase()):Ja.clear(),null!=c&&c.keyup&&r(e))};return(o.current||document).addEventListener("keyup",n),(o.current||document).addEventListener("keydown",a),u&&Wa(t,null==c?void 0:c.splitKey).forEach((function(e){return u.addHotkey(Ha(e,null==c?void 0:c.combinationKey))})),function(){(o.current||document).removeEventListener("keyup",n),(o.current||document).removeEventListener("keydown",a),u&&Wa(t,null==c?void 0:c.splitKey).forEach((function(e){return u.removeHotkey(Ha(e,null==c?void 0:c.combinationKey))}))}}}),[t,l,c,d]),o}var to=new Set;"undefined"!=typeof window&&window.addEventListener("DOMContentLoaded",(function(){document.addEventListener("keydown",(function(e){var t;void 0!==e.key&&(t=e.key,(Array.isArray(t)?t:[t]).forEach((function(e){return to.add(Ha(e))})))})),document.addEventListener("keyup",(function(e){var t;void 0!==e.key&&(t=e.key,(Array.isArray(t)?t:[t]).forEach((function(e){for(var t,s=Ha(e),r=function(e,t){var s="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(s)return(s=s.call(e)).next.bind(s);if(Array.isArray(e)||(s=function(e,t){if(e){if("string"==typeof e)return za(e,t);var s=Object.prototype.toString.call(e).slice(8,-1);return"Object"===s&&e.constructor&&(s=e.constructor.name),"Map"===s||"Set"===s?Array.from(e):"Arguments"===s||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?za(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){s&&(e=s);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(to);!(t=r()).done;){var a,o=t.value;null!=(a=o.keys)&&a.every((function(e){var t;return null==(t=s.keys)?void 0:t.includes(e)}))&&to.delete(o)}})))}))}));const so=(e,t)=>{try{return e.toLocaleLowerCase(t)}catch(t){return console.error(t.message),e}},ro=({name:e,label:t,route:s,hasArchive:r},{userLocale:a})=>({[`title-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-title-${e}`,fieldLabel:(0,Ps.__)("SEO title","wordpress-seo"),keywords:[]},[`metadesc-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-metadesc-${e}`,fieldLabel:(0,Ps.__)("Meta description","wordpress-seo"),keywords:[]},[`noindex-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-noindex-${e}`,fieldLabel:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. Posts. +(0,Ps.__)("Show %1$s in search results","wordpress-seo"),so(t,a)),keywords:[]},[`display-metabox-pt-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-display-metabox-pt-${e}`,fieldLabel:(0,Ps.__)("Enable SEO controls and assessments","wordpress-seo"),keywords:[]},[`schema-page-type-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-schema-page-type-${e}`,fieldLabel:(0,Ps.__)("Page type","wordpress-seo"),keywords:[(0,Ps.__)("Schema","wordpress-seo"),(0,Ps.__)("Structured data","wordpress-seo")]},[`schema-article-type-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-schema-article-type-${e}`,fieldLabel:(0,Ps.__)("Article type","wordpress-seo"),keywords:[(0,Ps.__)("Schema","wordpress-seo"),(0,Ps.__)("Structured data","wordpress-seo")]},[`page-analyse-extra-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-page-analyse-extra-${e}`,fieldLabel:(0,Ps.__)("Add custom fields to page analysis","wordpress-seo"),keywords:[]},..."attachment"!==e&&{[`social-title-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-social-title-${e}`,fieldLabel:(0,Ps.__)("Social title","wordpress-seo"),keywords:[]},[`social-description-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-social-description-${e}`,fieldLabel:(0,Ps.__)("Social description","wordpress-seo"),keywords:[]},[`social-image-id-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`button-wpseo_titles-social-image-${e}-preview`,fieldLabel:(0,Ps.__)("Social image","wordpress-seo"),keywords:[]}},...r&&{[`title-ptarchive-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-title-ptarchive-${e}`,fieldLabel:(0,Ps.__)("Archive SEO title","wordpress-seo"),keywords:[]},[`metadesc-ptarchive-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-metadesc-ptarchive-${e}`,fieldLabel:(0,Ps.__)("Archive meta description","wordpress-seo"),keywords:[]},[`bctitle-ptarchive-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-bctitle-ptarchive-${e}`,fieldLabel:(0,Ps.__)("Archive breadcrumbs title","wordpress-seo"),keywords:[]},[`noindex-ptarchive-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-noindex-ptarchive-${e}`,fieldLabel:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. Posts. +(0,Ps.__)("Show the archive for %1$s in search results","wordpress-seo"),so(t,a)),keywords:[]},[`social-title-ptarchive-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-social-title-ptarchive-${e}`,fieldLabel:(0,Ps.__)("Archive social title","wordpress-seo"),keywords:[]},[`social-description-ptarchive-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-social-description-ptarchive-${e}`,fieldLabel:(0,Ps.__)("Archive social description","wordpress-seo"),keywords:[]},[`social-image-id-ptarchive-${e}`]:{route:`/post-type/${s}`,routeLabel:t,fieldId:`button-wpseo_titles-social-image-ptarchive-${e}-preview`,fieldLabel:(0,Ps.__)("Archive social image","wordpress-seo"),keywords:[]}}}),ao=({name:e,label:t,route:s},{userLocale:r})=>({[`title-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-title-tax-${e}`,fieldLabel:(0,Ps.__)("SEO title","wordpress-seo"),keywords:[]},[`metadesc-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-metadesc-tax-${e}`,fieldLabel:(0,Ps.__)("Meta description","wordpress-seo"),keywords:[]},[`display-metabox-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-display-metabox-tax-${e}`,fieldLabel:(0,Ps.sprintf)(/* translators: %1$s expands to "Yoast SEO". %2$s expands to the taxonomy plural, e.g. Categories. */ +(0,Ps.__)("Enable %1$s for %2$s","wordpress-seo"),"Yoast SEO",so(t,r)),keywords:[]},[`display-metabox-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-display-metabox-tax-${e}`,fieldLabel:(0,Ps.__)("Enable SEO controls and assessments","wordpress-seo"),keywords:[]},[`noindex-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-noindex-tax-${e}`,fieldLabel:(0,Ps.sprintf)( +// translators: %1$s expands to the taxonomy plural, e.g. Categories. +(0,Ps.__)("Show %1$s in search results","wordpress-seo"),so(t,r)),keywords:[]},[`social-title-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-social-title-tax-${e}`,fieldLabel:(0,Ps.__)("Social title","wordpress-seo"),keywords:[]},[`social-description-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`input-wpseo_titles-social-description-tax-${e}`,fieldLabel:(0,Ps.__)("Social description","wordpress-seo"),keywords:[]},[`social-image-id-tax-${e}`]:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:`button-wpseo_titles-social-image-tax-${e}-preview`,fieldLabel:(0,Ps.__)("Social image","wordpress-seo"),keywords:[]},..."category"===e&&{stripcategorybase:{route:`/taxonomy/${s}`,routeLabel:t,fieldId:"input-wpseo_titles-stripcategorybase",fieldLabel:(0,Ps.__)("Show the categories prefix in the slug","wordpress-seo"),keywords:[]}}}),oo=(e,t,{userLocale:s}={})=>({blogdescription:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-blogdescription",fieldLabel:(0,Ps.__)("Tagline","wordpress-seo"),keywords:[]},wpseo:{keyword_analysis_active:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-keyword_analysis_active",fieldLabel:(0,Ps.__)("SEO analysis","wordpress-seo"),keywords:[]},content_analysis_active:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-content_analysis_active",fieldLabel:(0,Ps.__)("Readability analysis","wordpress-seo"),keywords:[]},inclusive_language_analysis_active:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-inclusive_language_analysis_active",fieldLabel:(0,Ps.__)("Inclusive language analysis","wordpress-seo"),keywords:[]},enable_metabox_insights:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_metabox_insights",fieldLabel:(0,Ps.__)("Insights","wordpress-seo"),keywords:[]},enable_cornerstone_content:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_cornerstone_content",fieldLabel:(0,Ps.__)("Cornerstone content","wordpress-seo"),keywords:[]},enable_text_link_counter:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_text_link_counter",fieldLabel:(0,Ps.__)("Text link counter","wordpress-seo"),keywords:[]},enable_link_suggestions:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_link_suggestions",fieldLabel:(0,Ps.__)("Link suggestions","wordpress-seo"),keywords:[]},enable_enhanced_slack_sharing:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_enhanced_slack_sharing",fieldLabel:(0,Ps.__)("Slack sharing","wordpress-seo"),keywords:[(0,Ps.__)("Share","wordpress-seo")]},enable_admin_bar_menu:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_admin_bar_menu",fieldLabel:(0,Ps.__)("Admin bar menu","wordpress-seo"),keywords:[]},enable_headless_rest_endpoints:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_headless_rest_endpoints",fieldLabel:(0,Ps.__)("REST API endpoint","wordpress-seo"),keywords:[]},enable_xml_sitemap:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_xml_sitemap",fieldLabel:(0,Ps.__)("XML sitemaps","wordpress-seo"),keywords:[]},enable_index_now:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_index_now",fieldLabel:(0,Ps.__)("IndexNow","wordpress-seo"),keywords:[(0,Ps.__)("Index Now","wordpress-seo")]},enable_ai_generator:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo-enable_ai_generator",fieldLabel:(0,Ps.__)("AI title & description generator","wordpress-seo"),keywords:[(0,Ps.__)("AI generator","wordpress-seo"),(0,Ps.__)("Artificial intelligence","wordpress-seo"),(0,Ps.__)("SEO title","wordpress-seo"),(0,Ps.__)("meta title","wordpress-seo"),(0,Ps.__)("meta description","wordpress-seo"),(0,Ps.__)("suggestions","wordpress-seo")]},disableadvanced_meta:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo-disableadvanced_meta",fieldLabel:(0,Ps.__)("Restrict advanced settings for authors","wordpress-seo"),keywords:[]},tracking:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo-tracking",fieldLabel:(0,Ps.__)("Usage tracking","wordpress-seo"),keywords:[]},publishing_principles_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-publishing_principles_id",fieldLabel:(0,Ps.__)("Publishing principles","wordpress-seo"),keywords:[(0,Ps.__)("Publishing policies","wordpress-seo")]},ownership_funding_info_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-ownership_funding_info_id",fieldLabel:(0,Ps.__)("Ownership / Funding info","wordpress-seo"),keywords:[(0,Ps.__)("Publishing policies","wordpress-seo")]},actionable_feedback_policy_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-actionable_feedback_policy_id",fieldLabel:(0,Ps.__)("Actionable feedback policy","wordpress-seo"),keywords:[(0,Ps.__)("Publishing policies","wordpress-seo")]},corrections_policy_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-corrections_policy_id",fieldLabel:(0,Ps.__)("Corrections policy","wordpress-seo"),keywords:[(0,Ps.__)("Publishing policies","wordpress-seo")]},ethics_policy_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-ethics_policy_id",fieldLabel:(0,Ps.__)("Ethics policy","wordpress-seo"),keywords:[(0,Ps.__)("Publishing policies","wordpress-seo")]},diversity_policy_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-diversity_policy_id",fieldLabel:(0,Ps.__)("Diversity policy","wordpress-seo"),keywords:[(0,Ps.__)("Publishing policies","wordpress-seo")]},diversity_staffing_report_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-diversity_staffing_report_id",fieldLabel:(0,Ps.__)("Diversity staffing report","wordpress-seo"),keywords:[(0,Ps.__)("Publishing policies","wordpress-seo")]},baiduverify:{route:"/site-connections",routeLabel:(0,Ps.__)("Site connections","wordpress-seo"),fieldId:"input-wpseo-baiduverify",fieldLabel:(0,Ps.__)("Baidu","wordpress-seo"),keywords:[(0,Ps.__)("Webmaster","wordpress-seo")]},googleverify:{route:"/site-connections",routeLabel:(0,Ps.__)("Site connections","wordpress-seo"),fieldId:"input-wpseo-googleverify",fieldLabel:(0,Ps.__)("Google","wordpress-seo"),keywords:[(0,Ps.__)("Webmaster","wordpress-seo"),(0,Ps.__)("Google search console","wordpress-seo"),"gsc"]},msverify:{route:"/site-connections",routeLabel:(0,Ps.__)("Site connections","wordpress-seo"),fieldId:"input-wpseo-msverify",fieldLabel:(0,Ps.__)("Bing","wordpress-seo"),keywords:[(0,Ps.__)("Webmaster","wordpress-seo")]},yandexverify:{route:"/site-connections",routeLabel:(0,Ps.__)("Site connections","wordpress-seo"),fieldId:"input-wpseo-yandexverify",fieldLabel:(0,Ps.__)("Yandex","wordpress-seo"),keywords:[(0,Ps.__)("Webmaster","wordpress-seo")]},remove_shortlinks:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_shortlinks",fieldLabel:(0,Ps.__)("Remove shortlinks","wordpress-seo"),keywords:[]},remove_rest_api_links:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_rest_api_links",fieldLabel:(0,Ps.__)("Remove REST API links","wordpress-seo"),keywords:[]},remove_rsd_wlw_links:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_rsd_wlw_links",fieldLabel:(0,Ps.__)("Remove RSD / WLW links","wordpress-seo"),keywords:[]},remove_oembed_links:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_oembed_links",fieldLabel:(0,Ps.__)("Remove oEmbed links","wordpress-seo"),keywords:[]},remove_generator:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_generator",fieldLabel:(0,Ps.__)("Remove generator tag","wordpress-seo"),keywords:[]},remove_pingback_header:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_pingback_header",fieldLabel:(0,Ps.__)("Pingback HTTP header","wordpress-seo"),keywords:[]},remove_powered_by_header:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_powered_by_header",fieldLabel:(0,Ps.__)("Remove powered by HTTP header","wordpress-seo"),keywords:[]},remove_feed_global:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_global",fieldLabel:(0,Ps.__)("Remove global feed","wordpress-seo"),keywords:[]},remove_feed_global_comments:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_global_comments",fieldLabel:(0,Ps.__)("Remove global comment feeds","wordpress-seo"),keywords:[]},remove_feed_post_comments:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_post_comments",fieldLabel:(0,Ps.__)("Remove post comments feeds","wordpress-seo"),keywords:[]},remove_feed_authors:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_authors",fieldLabel:(0,Ps.__)("Remove post authors feeds","wordpress-seo"),keywords:[]},remove_feed_post_types:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_post_types",fieldLabel:(0,Ps.__)("Remove post type feeds","wordpress-seo"),keywords:[]},remove_feed_categories:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_categories",fieldLabel:(0,Ps.__)("Remove category feeds","wordpress-seo"),keywords:[]},remove_feed_tags:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_tags",fieldLabel:(0,Ps.__)("Remove tag feeds","wordpress-seo"),keywords:[]},remove_feed_custom_taxonomies:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_custom_taxonomies",fieldLabel:(0,Ps.__)("Remove custom taxonomy feeds","wordpress-seo"),keywords:[]},remove_feed_search:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_feed_search",fieldLabel:(0,Ps.__)("Remove search results feeds","wordpress-seo"),keywords:[]},remove_atom_rdf_feeds:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_atom_rdf_feeds",fieldLabel:(0,Ps.__)("Remove Atom/RDF feeds","wordpress-seo"),keywords:[]},remove_emoji_scripts:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-remove_emoji_scripts",fieldLabel:(0,Ps.__)("Remove emoji scripts","wordpress-seo"),keywords:[]},deny_wp_json_crawling:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-deny_wp_json_crawling",fieldLabel:(0,Ps.__)("Remove WP-JSON API","wordpress-seo"),keywords:["robots"]},deny_adsbot_crawling:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-deny_adsbot_crawling",fieldLabel:(0,Ps.__)("Prevent Google AdsBot from crawling","wordpress-seo"),keywords:["robots"]},deny_ccbot_crawling:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-deny_ccbot_crawling",fieldLabel:(0,Ps.__)("Prevent Common Crawl CCBot from crawling","wordpress-seo"),keywords:["robots"]},deny_google_extended_crawling:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-deny_google_extended_crawling",fieldLabel:(0,Ps.__)("Prevent Google Bard and Vertex AI bots from crawling","wordpress-seo"),keywords:["robots"]},deny_gptbot_crawling:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-deny_gptbot_crawling",fieldLabel:(0,Ps.__)("Prevent OpenAI GPTBot from crawling","wordpress-seo"),keywords:["robots","chatgpt"]},search_cleanup:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-search_cleanup",fieldLabel:(0,Ps.__)("Filter search terms","wordpress-seo"),keywords:[]},search_character_limit:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-search_character_limit",fieldLabel:(0,Ps.__)("Max number of characters to allow in searches","wordpress-seo"),keywords:[]},search_cleanup_emoji:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-search_cleanup_emoji",fieldLabel:(0,Ps.__)("Filter searches with emojis and other special characters","wordpress-seo"),keywords:[]},search_cleanup_patterns:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-search_cleanup_patterns",fieldLabel:(0,Ps.__)("Filter searches with common spam patterns","wordpress-seo"),keywords:[]},redirect_search_pretty_urls:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-redirect_search_pretty_urls",fieldLabel:(0,Ps.__)("Redirect pretty URLs to ‘raw’ formats","wordpress-seo"),keywords:[]},deny_search_crawling:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-deny_search_crawling",fieldLabel:(0,Ps.__)("Prevent crawling of internal site search URLs","wordpress-seo"),keywords:["robots"]},clean_campaign_tracking_urls:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-clean_campaign_tracking_urls",fieldLabel:(0,Ps.__)("Optimize Google Analytics utm tracking parameters","wordpress-seo"),keywords:[]},clean_permalinks:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-clean_permalinks",fieldLabel:(0,Ps.__)("Remove unregistered URL parameters","wordpress-seo"),keywords:[]},clean_permalinks_extra_variables:{route:"/crawl-optimization",routeLabel:(0,Ps.__)("Crawl optimization","wordpress-seo"),fieldId:"input-wpseo-clean_permalinks_extra_variables",fieldLabel:(0,Ps.__)("Additional URL parameters to allow","wordpress-seo"),keywords:[]}},wpseo_titles:{website_name:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-website_name",fieldLabel:(0,Ps.__)("Website name","wordpress-seo"),keywords:[]},alternate_website_name:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-alternate_website_name",fieldLabel:(0,Ps.__)("Alternate website name","wordpress-seo"),keywords:[]},forcerewritetitles:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-forcerewritetitle",fieldLabel:(0,Ps.__)("Force rewrite titles","wordpress-seo"),keywords:[]},separator:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"input-wpseo_titles-separator-sc-dash",fieldLabel:(0,Ps.__)("Title separator","wordpress-seo"),keywords:[(0,Ps.__)("Divider","wordpress-seo")]},company_or_person:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-company_or_person-company",fieldLabel:(0,Ps.__)("Organization/person","wordpress-seo"),keywords:[(0,Ps.__)("Schema","wordpress-seo"),(0,Ps.__)("Structured data","wordpress-seo")]},company_name:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-company_name",fieldLabel:(0,Ps.__)("Organization name","wordpress-seo"),keywords:[]},company_alternate_name:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-company_alternate_name",fieldLabel:(0,Ps.__)("Alternate organization name","wordpress-seo"),keywords:[]},company_logo_id:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"button-wpseo_titles-company_logo-preview",fieldLabel:(0,Ps.__)("Organization logo","wordpress-seo"),keywords:[(0,Ps.__)("Image","wordpress-seo")]},company_or_person_user_id:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-company_or_person_user_id",fieldLabel:(0,Ps.__)("User","wordpress-seo"),keywords:[]},person_logo_id:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"button-wpseo_titles-person_logo-preview",fieldLabel:(0,Ps.__)("Personal logo or avatar","wordpress-seo"),keywords:[(0,Ps.__)("Image","wordpress-seo")]},organization_description:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-description",fieldLabel:(0,Ps.__)("Organization description","wordpress-seo"),keywords:[]},organization_email:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-email",fieldLabel:(0,Ps.__)("Organization email address","wordpress-seo"),keywords:[]},organization_phone:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-phone",fieldLabel:(0,Ps.__)("Organization phone number","wordpress-seo"),keywords:[]},organization_legal_name:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-legal-name",fieldLabel:(0,Ps.__)("Organization's legal name","wordpress-seo"),keywords:[]},organization_funding_date:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-founding-date",fieldLabel:(0,Ps.__)("Organization's founding date","wordpress-seo"),keywords:[]},organization_number_employees:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-number-employees",fieldLabel:(0,Ps.__)("Number of employees","wordpress-seo"),keywords:[]},organization_vat_id:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-vat-id",fieldLabel:(0,Ps.__)("VAT ID","wordpress-seo"),keywords:[]},organization_tax_id:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-tax-id",fieldLabel:(0,Ps.__)("Tax ID","wordpress-seo"),keywords:[]},organization_iso:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-iso",fieldLabel:(0,Ps.__)("ISO 6523","wordpress-seo"),keywords:[]},organization_duns:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-duns",fieldLabel:(0,Ps.__)("DUNS","wordpress-seo"),keywords:[]},organization_leicode:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-leicode",fieldLabel:(0,Ps.__)("LEI code","wordpress-seo"),keywords:[(0,Ps.__)("leicode","wordpress-seo")]},organization_naics:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_titles-org-naics",fieldLabel:(0,Ps.__)("NAICS","wordpress-seo"),keywords:[]},"title-home-wpseo":{route:"/homepage",routeLabel:(0,Ps.__)("Homepage","wordpress-seo"),fieldId:"input-wpseo_titles-title-home-wpseo",fieldLabel:(0,Ps.__)("SEO title","wordpress-seo"),keywords:[]},"metadesc-home-wpseo":{route:"/homepage",routeLabel:(0,Ps.__)("Homepage","wordpress-seo"),fieldId:"input-wpseo_titles-metadesc-home-wpseo",fieldLabel:(0,Ps.__)("Meta description","wordpress-seo"),keywords:[]},open_graph_frontpage_image_id:{route:"/homepage",routeLabel:(0,Ps.__)("Homepage","wordpress-seo"),fieldId:"button-wpseo_titles-open_graph_frontpage_image-preview",fieldLabel:(0,Ps.__)("Social image","wordpress-seo"),keywords:[]},open_graph_frontpage_title:{route:"/homepage",routeLabel:(0,Ps.__)("Homepage","wordpress-seo"),fieldId:"input-wpseo_titles-open_graph_frontpage_title",fieldLabel:(0,Ps.__)("Social title","wordpress-seo"),keywords:[]},open_graph_frontpage_desc:{route:"/homepage",routeLabel:(0,Ps.__)("Homepage","wordpress-seo"),fieldId:"input-wpseo_titles-open_graph_frontpage_desc",fieldLabel:(0,Ps.__)("Social description","wordpress-seo"),keywords:[]},"breadcrumbs-sep":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-sep",fieldLabel:(0,Ps.__)("Separator between breadcrumbs","wordpress-seo"),keywords:[(0,Ps.__)("Divider","wordpress-seo"),(0,Ps.__)("Separator","wordpress-seo")]},"breadcrumbs-home":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-home",fieldLabel:(0,Ps.__)("Anchor text for the homepage","wordpress-seo"),keywords:[]},"breadcrumbs-prefix":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-prefix",fieldLabel:(0,Ps.__)("Prefix for the breadcrumb path","wordpress-seo"),keywords:[]},"breadcrumbs-archiveprefix":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-archiveprefix",fieldLabel:(0,Ps.__)("Prefix for archive breadcrumbs","wordpress-seo"),keywords:[]},"breadcrumbs-searchprefix":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-searchprefix",fieldLabel:(0,Ps.__)("Prefix for search page breadcrumbs","wordpress-seo"),keywords:[]},"breadcrumbs-404crumb":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-404crumb",fieldLabel:(0,Ps.__)("Breadcrumb for 404 page","wordpress-seo"),keywords:[]},"breadcrumbs-display-blog-page":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-display-blog-page",fieldLabel:(0,Ps.__)("Show blog page in breadcrumbs","wordpress-seo"),keywords:[]},"breadcrumbs-boldlast":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-boldlast",fieldLabel:(0,Ps.__)("Bold the last page","wordpress-seo"),keywords:[]},"breadcrumbs-enable":{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:"input-wpseo_titles-breadcrumbs-enable",fieldLabel:(0,Ps.__)("Enable breadcrumbs for your theme","wordpress-seo"),keywords:[]},...(0,le.reduce)(e,((e,r)=>{const a=(0,le.filter)(t,(e=>(0,le.includes)(e.postTypes,r.name)));return(0,le.isEmpty)(a)?e:{...e,[`post_types-${r.name}-maintax`]:{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:`input-wpseo_titles-post_types-${r.name}-maintax`, +// translators: %1$s expands to the post type plural, e.g. posts. +fieldLabel:(0,Ps.sprintf)((0,Ps.__)("Breadcrumbs for %1$s","wordpress-seo"),so(r.label,s)),keywords:[]}}}),{}),...(0,le.reduce)(t,((e,t)=>({...e,[`taxonomy-${t.name}-ptparent`]:{route:"/breadcrumbs",routeLabel:(0,Ps.__)("Breadcrumbs","wordpress-seo"),fieldId:`input-wpseo_titles-taxonomy-${t.name}-ptparent`, +// translators: %1$s expands to the taxonomy plural, e.g. categories. +fieldLabel:(0,Ps.sprintf)((0,Ps.__)("Breadcrumbs for %1$s","wordpress-seo"),so(t.label,s)),keywords:[]}})),{}),"disable-author":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"input-wpseo_titles-disable-author",fieldLabel:(0,Ps.__)("Enable author archives","wordpress-seo"),keywords:[]},"noindex-author-wpseo":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"input-wpseo_titles-noindex-author-wpseo",fieldLabel:(0,Ps.__)("Show author archives in search results","wordpress-seo"),keywords:[]},"noindex-author-noposts-wpseo":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"input-wpseo_titles-noindex-author-noposts-wpseo",fieldLabel:(0,Ps.__)("Show archives for authors without posts in search results","wordpress-seo"),keywords:[]},"title-author-wpseo":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"input-wpseo_titles-title-author-wpseo",fieldLabel:(0,Ps.__)("SEO title","wordpress-seo"),keywords:[]},"metadesc-author-wpseo":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"input-wpseo_titles-metadesc-author-wpseo",fieldLabel:(0,Ps.__)("Meta description","wordpress-seo"),keywords:[]},"social-image-id-author-wpseo":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"button-wpseo_titles-social-image-author-wpseo-preview",fieldLabel:(0,Ps.__)("Social image","wordpress-seo"),keywords:[]},"social-title-author-wpseo":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"input-wpseo_titles-social-title-author-wpseo",fieldLabel:(0,Ps.__)("Social title","wordpress-seo"),keywords:[]},"social-description-author-wpseo":{route:"/author-archives",routeLabel:(0,Ps.__)("Author archives","wordpress-seo"),fieldId:"input-wpseo_titles-social-description-author-wpseo",fieldLabel:(0,Ps.__)("Social description","wordpress-seo"),keywords:[]},"disable-date":{route:"/date-archives",routeLabel:(0,Ps.__)("Date archives","wordpress-seo"),fieldId:"input-wpseo_titles-disable-date",fieldLabel:(0,Ps.__)("Enable date archives","wordpress-seo"),keywords:[]},"noindex-archive-wpseo":{route:"/date-archives",routeLabel:(0,Ps.__)("Date archives","wordpress-seo"),fieldId:"input-wpseo_titles-noindex-archive-wpseo",fieldLabel:(0,Ps.__)("Show date archives in search results","wordpress-seo"),keywords:[]},"title-archive-wpseo":{route:"/date-archives",routeLabel:(0,Ps.__)("Date archives","wordpress-seo"),fieldId:"input-wpseo_titles-title-archive-wpseo",fieldLabel:(0,Ps.__)("SEO title","wordpress-seo"),keywords:[]},"metadesc-archive-wpseo":{route:"/date-archives",routeLabel:(0,Ps.__)("Date archives","wordpress-seo"),fieldId:"input-wpseo_titles-metadesc-archive-wpseo",fieldLabel:(0,Ps.__)("Meta description","wordpress-seo"),keywords:[]},"social-image-id-archive-wpseo":{route:"/date-archives",routeLabel:(0,Ps.__)("Date archives","wordpress-seo"),fieldId:"button-wpseo_titles-social-image-archive-wpseo-preview",fieldLabel:(0,Ps.__)("Social image","wordpress-seo"),keywords:[]},"social-title-archive-wpseo":{route:"/date-archives",routeLabel:(0,Ps.__)("Date archives","wordpress-seo"),fieldId:"input-wpseo_titles-social-title-archive-wpseo",fieldLabel:(0,Ps.__)("Social title","wordpress-seo"),keywords:[]},"social-description-archive-wpseo":{route:"/date-archives",routeLabel:(0,Ps.__)("Date archives","wordpress-seo"),fieldId:"input-wpseo_titles-social-description-archive-wpseo",fieldLabel:(0,Ps.__)("Social description","wordpress-seo"),keywords:[]},"title-search-wpseo":{route:"/special-pages",routeLabel:(0,Ps.__)("Special pages","wordpress-seo"),fieldId:"input-wpseo_titles-title-search-wpseo",fieldLabel:(0,Ps.__)("Search pages title","wordpress-seo"),keywords:[]},"title-404-wpseo":{route:"/special-pages",routeLabel:(0,Ps.__)("Special pages","wordpress-seo"),fieldId:"input-wpseo_titles-title-404-wpseo",fieldLabel:(0,Ps.__)("404 pages title","wordpress-seo"),keywords:[]},"disable-attachment":{route:"/media-pages",routeLabel:(0,Ps.__)("Media pages","wordpress-seo"),fieldId:"input-wpseo_titles-disable-attachment",fieldLabel:(0,Ps.__)("Media pages","wordpress-seo"),keywords:[(0,Ps.__)("Attachment","wordpress-seo"),(0,Ps.__)("Image","wordpress-seo"),(0,Ps.__)("Video","wordpress-seo"),(0,Ps.__)("PDF","wordpress-seo"),(0,Ps.__)("File","wordpress-seo")]},"noindex-attachment":{route:"/media-pages",routeLabel:(0,Ps.__)("Media pages","wordpress-seo"),fieldId:"input-wpseo_titles-noindex-attachment",fieldLabel:(0,Ps.__)("Show media pages in search results","wordpress-seo"),keywords:[(0,Ps.__)("Image","wordpress-seo"),(0,Ps.__)("Video","wordpress-seo"),(0,Ps.__)("PDF","wordpress-seo"),(0,Ps.__)("File","wordpress-seo")]},"title-attachment":{route:"/media-pages",routeLabel:(0,Ps.__)("Media pages","wordpress-seo"),fieldId:"input-wpseo_titles-title-attachment",fieldLabel:(0,Ps.__)("SEO title","wordpress-seo"),keywords:[(0,Ps.__)("Image","wordpress-seo"),(0,Ps.__)("Video","wordpress-seo"),(0,Ps.__)("PDF","wordpress-seo"),(0,Ps.__)("File","wordpress-seo")]},"metadesc-attachment":{route:"/media-pages",routeLabel:(0,Ps.__)("Media pages","wordpress-seo"),fieldId:"input-wpseo_titles-metadesc-attachment",fieldLabel:(0,Ps.__)("Meta description","wordpress-seo"),keywords:[(0,Ps.__)("Image","wordpress-seo"),(0,Ps.__)("Video","wordpress-seo"),(0,Ps.__)("PDF","wordpress-seo"),(0,Ps.__)("File","wordpress-seo")]},"schema-page-type-attachment":{route:"/media-pages",routeLabel:(0,Ps.__)("Media pages","wordpress-seo"),fieldId:"input-wpseo_titles-schema-page-type-attachment",fieldLabel:(0,Ps.__)("Page type","wordpress-seo"),keywords:[(0,Ps.__)("Schema","wordpress-seo"),(0,Ps.__)("Structured data","wordpress-seo"),(0,Ps.__)("Image","wordpress-seo"),(0,Ps.__)("Video","wordpress-seo"),(0,Ps.__)("PDF","wordpress-seo"),(0,Ps.__)("File","wordpress-seo")]},"schema-article-type-attachment":{route:"/media-pages",routeLabel:(0,Ps.__)("Media pages","wordpress-seo"),fieldId:"input-wpseo_titles-schema-article-type-attachment",fieldLabel:(0,Ps.__)("Article type","wordpress-seo"),keywords:[(0,Ps.__)("Schema","wordpress-seo"),(0,Ps.__)("Structured data","wordpress-seo"),(0,Ps.__)("Image","wordpress-seo"),(0,Ps.__)("Video","wordpress-seo"),(0,Ps.__)("PDF","wordpress-seo"),(0,Ps.__)("File","wordpress-seo")]},"display-metabox-pt-attachment":{route:"/media-pages",routeLabel:(0,Ps.__)("Media pages","wordpress-seo"),fieldId:"input-wpseo_titles-display-metabox-pt-attachment",fieldLabel:(0,Ps.__)("Enable SEO controls and assessments","wordpress-seo"),keywords:[(0,Ps.__)("Image","wordpress-seo"),(0,Ps.__)("Video","wordpress-seo"),(0,Ps.__)("PDF","wordpress-seo"),(0,Ps.__)("File","wordpress-seo")]},"disable-post_format":{route:"/format-archives",routeLabel:(0,Ps.__)("Format archives","wordpress-seo"),fieldId:"input-wpseo_titles-disable-post_format",fieldLabel:(0,Ps.__)("Enable format-based archives","wordpress-seo"),keywords:[]},"noindex-tax-post_format":{route:"/format-archives",routeLabel:(0,Ps.__)("Format archives","wordpress-seo"),fieldId:"input-wpseo_titles-noindex-tax-post_format",fieldLabel:(0,Ps.__)("Show format archives in search results","wordpress-seo"),keywords:[]},"title-tax-post_format":{route:"/format-archives",routeLabel:(0,Ps.__)("Format archives","wordpress-seo"),fieldId:"input-wpseo_titles-title-tax-post_format",fieldLabel:(0,Ps.__)("SEO title","wordpress-seo"),keywords:[]},"metadesc-tax-post_format":{route:"/format-archives",routeLabel:(0,Ps.__)("Format archives","wordpress-seo"),fieldId:"input-wpseo_titles-metadesc-tax-post_format",fieldLabel:(0,Ps.__)("Meta description","wordpress-seo"),keywords:[]},"social-image-id-tax-post_format":{route:"/format-archives",routeLabel:(0,Ps.__)("Format archives","wordpress-seo"),fieldId:"button-wpseo_titles-social-image-tax-post_format-preview",fieldLabel:(0,Ps.__)("Social image","wordpress-seo"),keywords:[]},"social-title-tax-post_format":{route:"/format-archives",routeLabel:(0,Ps.__)("Format archives","wordpress-seo"),fieldId:"input-wpseo_titles-social-title-tax-post_format",fieldLabel:(0,Ps.__)("Social title","wordpress-seo"),keywords:[]},"social-description-tax-post_format":{route:"/format-archives",routeLabel:(0,Ps.__)("Format archives","wordpress-seo"),fieldId:"input-wpseo_titles-social-description-tax-post_format",fieldLabel:(0,Ps.__)("Social description","wordpress-seo"),keywords:[]},rssbefore:{route:"/rss",routeLabel:"RSS",fieldId:"input-wpseo_titles-rssbefore",fieldLabel:(0,Ps.__)("Content to put before each post in the feed","wordpress-seo"),keywords:[]},rssafter:{route:"/rss",routeLabel:"RSS",fieldId:"input-wpseo_titles-rssafter",fieldLabel:(0,Ps.__)("Content to put after each post in the feed","wordpress-seo"),keywords:[]},...(0,le.reduce)((0,le.omit)(e,["attachment"]),((e,t)=>({...e,...ro(t,{userLocale:s})})),{}),...(0,le.reduce)((0,le.omit)(t,["post_format"]),((e,t)=>({...e,...ao(t,{userLocale:s})})),{})},wpseo_social:{opengraph:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo_social-opengraph",fieldLabel:(0,Ps.__)("Open Graph data","wordpress-seo"),keywords:[(0,Ps.__)("Social","wordpress-seo"),(0,Ps.__)("OpenGraph","wordpress-seo"),(0,Ps.__)("Facebook","wordpress-seo"),(0,Ps.__)("Share","wordpress-seo")]},twitter:{route:"/site-features",routeLabel:(0,Ps.__)("Site features","wordpress-seo"),fieldId:"card-wpseo_social-twitter",fieldLabel:(0,Ps.__)("X card data","wordpress-seo"),keywords:[(0,Ps.__)("Social","wordpress-seo"),(0,Ps.__)("Share","wordpress-seo"),(0,Ps.__)("Tweet","wordpress-seo"),(0,Ps.__)("Twitter","wordpress-seo")]},og_default_image_id:{route:"/site-basics",routeLabel:(0,Ps.__)("Site basics","wordpress-seo"),fieldId:"button-wpseo_social-og_default_image-preview",fieldLabel:(0,Ps.__)("Site image","wordpress-seo"),keywords:[]},pinterestverify:{route:"/site-connections",routeLabel:(0,Ps.__)("Site connections","wordpress-seo"),fieldId:"input-wpseo_social-pinterestverify",fieldLabel:(0,Ps.__)("Pinterest","wordpress-seo"),keywords:[(0,Ps.__)("Webmaster","wordpress-seo")]},facebook_site:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_social-facebook_site",fieldLabel:(0,Ps.__)("Organization Facebook","wordpress-seo"),keywords:[(0,Ps.__)("Social","wordpress-seo"),(0,Ps.__)("Open Graph","wordpress-seo"),(0,Ps.__)("OpenGraph","wordpress-seo"),(0,Ps.__)("Share","wordpress-seo")]},twitter_site:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_social-twitter_site",fieldLabel:(0,Ps.__)("Organization X","wordpress-seo"),keywords:[(0,Ps.__)("Social","wordpress-seo"),(0,Ps.__)("Share","wordpress-seo"),(0,Ps.__)("Tweet","wordpress-seo"),(0,Ps.__)("Twitter","wordpress-seo")]},mastodon_url:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"input-wpseo_social-mastodon_url",fieldLabel:(0,Ps.__)("Organization Mastodon","wordpress-seo"),keywords:[(0,Ps.__)("Social","wordpress-seo"),(0,Ps.__)("Share","wordpress-seo")]},other_social_urls:{route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:"fieldset-wpseo_social-other_social_urls",fieldLabel:(0,Ps.__)("Other social profiles","wordpress-seo"),keywords:[],...(0,le.times)(25,(e=>({route:"/site-representation",routeLabel:(0,Ps.__)("Site representation","wordpress-seo"),fieldId:`input-wpseo_social-other_social_urls-${e}`, +// translators: %1$s expands to array index + 1. +fieldLabel:(0,Ps.sprintf)((0,Ps.__)("Other profile %1$s","wordpress-seo"),e+1)})))}}}),no=async e=>{const{endpoint:t,nonce:s}=(0,le.get)(window,"wpseoScriptData",{}),r=new FormData;r.set("option_page","wpseo_page_settings"),r.set("_wp_http_referer","admin.php?page=wpseo_page_settings_saved"),r.set("action","update"),r.set("_wpnonce",s),(0,le.forEach)(e,((e,t)=>{(0,le.isObject)(e)?(0,le.forEach)(e,((e,s)=>{(0,le.isArray)(e)?(0,le.forEach)(e,((e,a)=>r.set(`${t}[${s}][${a}]`,e))):r.set(`${t}[${s}]`,e)})):r.set(t,e)}));try{const e=await fetch(t,{method:"POST",body:new URLSearchParams(r)}),s=await e.text();if((0,le.includes)(s,"{{ yoast-success: false }}"))throw new Error("Yoast options invalid.");if(!e.url.endsWith("settings-updated=true"))throw new Error("WordPress options save did not get to the end.")}catch(e){throw new Error(e.message)}},io=async(e,{resetForm:t})=>{const{addNotification:s}=(0,a.dispatch)(Ds),{selectPreference:r}=(0,a.select)(Ds),o=r("canManageOptions",!1);try{return await Promise.all([no(o?e:(0,le.omit)(e,["blogdescription"]))]),s({variant:"success",title:(0,Ps.__)("Great! Your settings were saved successfully.","wordpress-seo")}),t({values:e}),!0}catch(e){return s({id:"submit-error",variant:"error",title:(0,Ps.__)("Oops! Something went wrong while saving.","wordpress-seo")}),console.error("Error while saving:",e.message),!1}};var lo,co;try{lo=Map}catch(e){}try{co=Set}catch(e){}function uo(e,t,s){if(!e||"object"!=typeof e||"function"==typeof e)return e;if(e.nodeType&&"cloneNode"in e)return e.cloneNode(!0);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);if(Array.isArray(e))return e.map(po);if(lo&&e instanceof lo)return new Map(Array.from(e.entries()));if(co&&e instanceof co)return new Set(Array.from(e.values()));if(e instanceof Object){t.push(e);var r=Object.create(e);for(var a in s.push(r),e){var o=t.findIndex((function(t){return t===e[a]}));r[a]=o>-1?s[o]:uo(e[a],t,s)}return r}return e}function po(e){return uo(e,[],[])}const mo=Object.prototype.toString,fo=Error.prototype.toString,ho=RegExp.prototype.toString,yo="undefined"!=typeof Symbol?Symbol.prototype.toString:()=>"",_o=/^Symbol\((.*)\)(.*)$/;function wo(e,t=!1){if(null==e||!0===e||!1===e)return""+e;const s=typeof e;if("number"===s)return function(e){return e!=+e?"NaN":0===e&&1/e<0?"-0":""+e}(e);if("string"===s)return t?`"${e}"`:e;if("function"===s)return"[Function "+(e.name||"anonymous")+"]";if("symbol"===s)return yo.call(e).replace(_o,"Symbol($1)");const r=mo.call(e).slice(8,-1);return"Date"===r?isNaN(e.getTime())?""+e:e.toISOString(e):"Error"===r||e instanceof Error?"["+fo.call(e)+"]":"RegExp"===r?ho.call(e):null}function go(e,t){let s=wo(e,t);return null!==s?s:JSON.stringify(e,(function(e,s){let r=wo(this[e],t);return null!==r?r:s}),2)}let bo={default:"${path} is invalid",required:"${path} is a required field",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:({path:e,type:t,value:s,originalValue:r})=>{let a=null!=r&&r!==s,o=`${e} must be a \`${t}\` type, but the final value was: \`${go(s,!0)}\``+(a?` (cast from the value \`${go(r,!0)}\`).`:".");return null===s&&(o+='\n If "null" is intended as an empty value be sure to mark the schema as `.nullable()`'),o},defined:"${path} must be defined"},vo={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",uuid:"${path} must be a valid UUID",trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"},Eo={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"},xo={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"},ko={noUnknown:"${path} field has unspecified keys: ${unknown}"},So={min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items",length:"${path} must have ${length} items"};Object.assign(Object.create(null),{mixed:bo,string:vo,number:Eo,date:xo,object:ko,array:So,boolean:{isValue:"${path} field must be ${value}"}});const Lo=window.lodash.has;var To=s.n(Lo);const Fo=e=>e&&e.__isYupSchema__,$o=class{constructor(e,t){if(this.fn=void 0,this.refs=e,this.refs=e,"function"==typeof t)return void(this.fn=t);if(!To()(t,"is"))throw new TypeError("`is:` is required for `when()` conditions");if(!t.then&&!t.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");let{is:s,then:r,otherwise:a}=t,o="function"==typeof s?s:(...e)=>e.every((e=>e===s));this.fn=function(...e){let t=e.pop(),s=e.pop(),n=o(...e)?r:a;if(n)return"function"==typeof n?n(s):s.concat(n.resolve(t))}}resolve(e,t){let s=this.refs.map((e=>e.getValue(null==t?void 0:t.value,null==t?void 0:t.parent,null==t?void 0:t.context))),r=this.fn.apply(e,s.concat(e,t));if(void 0===r||r===e)return e;if(!Fo(r))throw new TypeError("conditions must return a schema object");return r.resolve(t)}};function Po(e){return null==e?[]:[].concat(e)}function Io(){return Io=Object.assign||function(e){for(var t=1;tgo(t[s]))):"function"==typeof e?e(t):e}static isError(e){return e&&"ValidationError"===e.name}constructor(e,t,s,r){super(),this.value=void 0,this.path=void 0,this.type=void 0,this.errors=void 0,this.params=void 0,this.inner=void 0,this.name="ValidationError",this.value=t,this.path=s,this.type=r,this.errors=[],this.inner=[],Po(e).forEach((e=>{No.isError(e)?(this.errors.push(...e.errors),this.inner=this.inner.concat(e.inner.length?e.inner:e)):this.errors.push(e)})),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,No)}}function Oo(e,t){let{endEarly:s,tests:r,args:a,value:o,errors:n,sort:i,path:l}=e,c=(e=>{let t=!1;return(...s)=>{t||(t=!0,e(...s))}})(t),d=r.length;const u=[];if(n=n||[],!d)return n.length?c(new No(n,o,l)):c(null,o);for(let e=0;e=0||(a[s]=e[s]);return a}(t,["value","path","label","options","originalValue","sync"]);const{name:d,test:u,params:p,message:m}=e;let{parent:f,context:h}=n;function y(e){return Do.isRef(e)?e.getValue(r,f,h):e}function _(e={}){const t=Ao()(Bo({value:r,originalValue:i,label:o,path:e.path||a},p,e.params),y),s=new No(No.formatError(e.message||m,t),r,t.path,e.type||d);return s.params=t,s}let w,g=Bo({path:a,parent:f,type:d,createError:_,resolve:y,options:n,originalValue:i},c);if(l){try{var b;if(w=u.call(g,r,g),"function"==typeof(null==(b=w)?void 0:b.then))throw new Error(`Validation test of type: "${g.type}" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`)}catch(e){return void s(e)}No.isError(w)?s(w):w?s(null,w):s(_())}else try{Promise.resolve(u.call(g,r,g)).then((e=>{No.isError(e)?s(e):e?s(null,e):s(_())})).catch(s)}catch(e){s(e)}}return t.OPTIONS=e,t}function jo(e,t,s,r=s){let a,o,n;return t?((0,Co.forEach)(t,((i,l,c)=>{let d=l?(e=>e.substr(0,e.length-1).substr(1))(i):i;if((e=e.resolve({context:r,parent:a,value:s})).innerType){let r=c?parseInt(d,10):0;if(s&&r>=s.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${i}, in the path: ${t}. because there is no value at that index. `);a=s,s=s&&s[r],e=e.innerType}if(!c){if(!e.fields||!e.fields[d])throw new Error(`The schema does not contain the path: ${t}. (failed at: ${n} which is a type: "${e._type}")`);a=s,s=s&&s[d],e=e.fields[d]}o=d,n=l?"["+i+"]":"."+i})),{schema:e,parent:a,parentPath:o}):{parent:a,parentPath:t,schema:e}}Do.prototype.__isYupRef=!0;class zo{constructor(){this.list=void 0,this.refs=void 0,this.list=new Set,this.refs=new Map}get size(){return this.list.size+this.refs.size}describe(){const e=[];for(const t of this.list)e.push(t);for(const[,t]of this.refs)e.push(t.describe());return e}toArray(){return Array.from(this.list).concat(Array.from(this.refs.values()))}resolveAll(e){return this.toArray().reduce(((t,s)=>t.concat(Do.isRef(s)?e(s):s)),[])}add(e){Do.isRef(e)?this.refs.set(e.key,e):this.list.add(e)}delete(e){Do.isRef(e)?this.refs.delete(e.key):this.list.delete(e)}clone(){const e=new zo;return e.list=new Set(this.list),e.refs=new Map(this.refs),e}merge(e,t){const s=this.clone();return e.list.forEach((e=>s.add(e))),e.refs.forEach((e=>s.add(e))),t.list.forEach((e=>s.delete(e))),t.refs.forEach((e=>s.delete(e))),s}}function Uo(){return Uo=Object.assign||function(e){for(var t=1;t{this.typeError(bo.notType)})),this.type=(null==e?void 0:e.type)||"mixed",this.spec=Uo({strip:!1,strict:!1,abortEarly:!0,recursive:!0,nullable:!1,presence:"optional"},null==e?void 0:e.spec)}get _type(){return this.type}_typeCheck(e){return!0}clone(e){if(this._mutate)return e&&Object.assign(this.spec,e),this;const t=Object.create(Object.getPrototypeOf(this));return t.type=this.type,t._typeError=this._typeError,t._whitelistError=this._whitelistError,t._blacklistError=this._blacklistError,t._whitelist=this._whitelist.clone(),t._blacklist=this._blacklist.clone(),t.exclusiveTests=Uo({},this.exclusiveTests),t.deps=[...this.deps],t.conditions=[...this.conditions],t.tests=[...this.tests],t.transforms=[...this.transforms],t.spec=po(Uo({},this.spec,e)),t}label(e){let t=this.clone();return t.spec.label=e,t}meta(...e){if(0===e.length)return this.spec.meta;let t=this.clone();return t.spec.meta=Object.assign(t.spec.meta||{},e[0]),t}withMutation(e){let t=this._mutate;this._mutate=!0;let s=e(this);return this._mutate=t,s}concat(e){if(!e||e===this)return this;if(e.type!==this.type&&"mixed"!==this.type)throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${e.type}`);let t=this,s=e.clone();const r=Uo({},t.spec,s.spec);return s.spec=r,s._typeError||(s._typeError=t._typeError),s._whitelistError||(s._whitelistError=t._whitelistError),s._blacklistError||(s._blacklistError=t._blacklistError),s._whitelist=t._whitelist.merge(e._whitelist,e._blacklist),s._blacklist=t._blacklist.merge(e._blacklist,e._whitelist),s.tests=t.tests,s.exclusiveTests=t.exclusiveTests,s.withMutation((t=>{e.tests.forEach((e=>{t.test(e.OPTIONS)}))})),s.transforms=[...t.transforms,...s.transforms],s}isType(e){return!(!this.spec.nullable||null!==e)||this._typeCheck(e)}resolve(e){let t=this;if(t.conditions.length){let s=t.conditions;t=t.clone(),t.conditions=[],t=s.reduce(((t,s)=>s.resolve(t,e)),t),t=t.resolve(e)}return t}cast(e,t={}){let s=this.resolve(Uo({value:e},t)),r=s._cast(e,t);if(void 0!==e&&!1!==t.assert&&!0!==s.isType(r)){let a=go(e),o=go(r);throw new TypeError(`The value of ${t.path||"field"} could not be cast to a value that satisfies the schema type: "${s._type}". \n\nattempted value: ${a} \n`+(o!==a?`result of cast: ${o}`:""))}return r}_cast(e,t){let s=void 0===e?e:this.transforms.reduce(((t,s)=>s.call(this,t,e,this)),e);return void 0===s&&(s=this.getDefault()),s}_validate(e,t={},s){let{sync:r,path:a,from:o=[],originalValue:n=e,strict:i=this.spec.strict,abortEarly:l=this.spec.abortEarly}=t,c=e;i||(c=this._cast(c,Uo({assert:!1},t)));let d={value:c,path:a,options:t,originalValue:n,schema:this,label:this.spec.label,sync:r,from:o},u=[];this._typeError&&u.push(this._typeError);let p=[];this._whitelistError&&p.push(this._whitelistError),this._blacklistError&&p.push(this._blacklistError),Oo({args:d,value:c,path:a,sync:r,tests:u,endEarly:l},(e=>{e?s(e,c):Oo({tests:this.tests.concat(p),args:d,path:a,sync:r,value:c,endEarly:l},s)}))}validate(e,t,s){let r=this.resolve(Uo({},t,{value:e}));return"function"==typeof s?r._validate(e,t,s):new Promise(((s,a)=>r._validate(e,t,((e,t)=>{e?a(e):s(t)}))))}validateSync(e,t){let s;return this.resolve(Uo({},t,{value:e}))._validate(e,Uo({},t,{sync:!0}),((e,t)=>{if(e)throw e;s=t})),s}isValid(e,t){return this.validate(e,t).then((()=>!0),(e=>{if(No.isError(e))return!1;throw e}))}isValidSync(e,t){try{return this.validateSync(e,t),!0}catch(e){if(No.isError(e))return!1;throw e}}_getDefault(){let e=this.spec.default;return null==e?e:"function"==typeof e?e.call(this):po(e)}getDefault(e){return this.resolve(e||{})._getDefault()}default(e){return 0===arguments.length?this._getDefault():this.clone({default:e})}strict(e=!0){let t=this.clone();return t.spec.strict=e,t}_isPresent(e){return null!=e}defined(e=bo.defined){return this.test({message:e,name:"defined",exclusive:!0,test:e=>void 0!==e})}required(e=bo.required){return this.clone({presence:"required"}).withMutation((t=>t.test({message:e,name:"required",exclusive:!0,test(e){return this.schema._isPresent(e)}})))}notRequired(){let e=this.clone({presence:"optional"});return e.tests=e.tests.filter((e=>"required"!==e.OPTIONS.name)),e}nullable(e=!0){return this.clone({nullable:!1!==e})}transform(e){let t=this.clone();return t.transforms.push(e),t}test(...e){let t;if(t=1===e.length?"function"==typeof e[0]?{test:e[0]}:e[0]:2===e.length?{name:e[0],test:e[1]}:{name:e[0],message:e[1],test:e[2]},void 0===t.message&&(t.message=bo.default),"function"!=typeof t.test)throw new TypeError("`test` is a required parameters");let s=this.clone(),r=Vo(t),a=t.exclusive||t.name&&!0===s.exclusiveTests[t.name];if(t.exclusive&&!t.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return t.name&&(s.exclusiveTests[t.name]=!!t.exclusive),s.tests=s.tests.filter((e=>{if(e.OPTIONS.name===t.name){if(a)return!1;if(e.OPTIONS.test===r.OPTIONS.test)return!1}return!0})),s.tests.push(r),s}when(e,t){Array.isArray(e)||"string"==typeof e||(t=e,e=".");let s=this.clone(),r=Po(e).map((e=>new Do(e)));return r.forEach((e=>{e.isSibling&&s.deps.push(e.key)})),s.conditions.push(new $o(r,t)),s}typeError(e){let t=this.clone();return t._typeError=Vo({message:e,name:"typeError",test(e){return!(void 0!==e&&!this.schema.isType(e))||this.createError({params:{type:this.schema._type}})}}),t}oneOf(e,t=bo.oneOf){let s=this.clone();return e.forEach((e=>{s._whitelist.add(e),s._blacklist.delete(e)})),s._whitelistError=Vo({message:t,name:"oneOf",test(e){if(void 0===e)return!0;let t=this.schema._whitelist,s=t.resolveAll(this.resolve);return!!s.includes(e)||this.createError({params:{values:t.toArray().join(", "),resolved:s}})}}),s}notOneOf(e,t=bo.notOneOf){let s=this.clone();return e.forEach((e=>{s._blacklist.add(e),s._whitelist.delete(e)})),s._blacklistError=Vo({message:t,name:"notOneOf",test(e){let t=this.schema._blacklist,s=t.resolveAll(this.resolve);return!s.includes(e)||this.createError({params:{values:t.toArray().join(", "),resolved:s}})}}),s}strip(e=!0){let t=this.clone();return t.spec.strip=e,t}describe(){const e=this.clone(),{label:t,meta:s}=e.spec,r={meta:s,label:t,type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.map((e=>({name:e.OPTIONS.name,params:e.OPTIONS.params}))).filter(((e,t,s)=>s.findIndex((t=>t.name===e.name))===t))};return r}}qo.prototype.__isYupSchema__=!0;for(const e of["validate","validateSync"])qo.prototype[`${e}At`]=function(t,s,r={}){const{parent:a,parentPath:o,schema:n}=jo(this,t,s,r.context);return n[e](a&&a[o],Uo({},r,{parent:a,path:t}))};for(const e of["equals","is"])qo.prototype[e]=qo.prototype.oneOf;for(const e of["not","nope"])qo.prototype[e]=qo.prototype.notOneOf;qo.prototype.optional=qo.prototype.notRequired;qo.prototype;const Wo=e=>null==e;let Ho=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,Yo=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,Go=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,Ko=e=>Wo(e)||e===e.trim(),Zo={}.toString();function Qo(){return new Xo}class Xo extends qo{constructor(){super({type:"string"}),this.withMutation((()=>{this.transform((function(e){if(this.isType(e))return e;if(Array.isArray(e))return e;const t=null!=e&&e.toString?e.toString():e;return t===Zo?e:t}))}))}_typeCheck(e){return e instanceof String&&(e=e.valueOf()),"string"==typeof e}_isPresent(e){return super._isPresent(e)&&!!e.length}length(e,t=vo.length){return this.test({message:t,name:"length",exclusive:!0,params:{length:e},test(t){return Wo(t)||t.length===this.resolve(e)}})}min(e,t=vo.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},test(t){return Wo(t)||t.length>=this.resolve(e)}})}max(e,t=vo.max){return this.test({name:"max",exclusive:!0,message:t,params:{max:e},test(t){return Wo(t)||t.length<=this.resolve(e)}})}matches(e,t){let s,r,a=!1;return t&&("object"==typeof t?({excludeEmptyString:a=!1,message:s,name:r}=t):s=t),this.test({name:r||"matches",message:s||vo.matches,params:{regex:e},test:t=>Wo(t)||""===t&&a||-1!==t.search(e)})}email(e=vo.email){return this.matches(Ho,{name:"email",message:e,excludeEmptyString:!0})}url(e=vo.url){return this.matches(Yo,{name:"url",message:e,excludeEmptyString:!0})}uuid(e=vo.uuid){return this.matches(Go,{name:"uuid",message:e,excludeEmptyString:!1})}ensure(){return this.default("").transform((e=>null===e?"":e))}trim(e=vo.trim){return this.transform((e=>null!=e?e.trim():e)).test({message:e,name:"trim",test:Ko})}lowercase(e=vo.lowercase){return this.transform((e=>Wo(e)?e:e.toLowerCase())).test({message:e,name:"string_case",exclusive:!0,test:e=>Wo(e)||e===e.toLowerCase()})}uppercase(e=vo.uppercase){return this.transform((e=>Wo(e)?e:e.toUpperCase())).test({message:e,name:"string_case",exclusive:!0,test:e=>Wo(e)||e===e.toUpperCase()})}}function Jo(){return new en}Qo.prototype=Xo.prototype;class en extends qo{constructor(){super({type:"number"}),this.withMutation((()=>{this.transform((function(e){let t=e;if("string"==typeof t){if(t=t.replace(/\s/g,""),""===t)return NaN;t=+t}return this.isType(t)?t:parseFloat(t)}))}))}_typeCheck(e){return e instanceof Number&&(e=e.valueOf()),"number"==typeof e&&!(e=>e!=+e)(e)}min(e,t=Eo.min){return this.test({message:t,name:"min",exclusive:!0,params:{min:e},test(t){return Wo(t)||t>=this.resolve(e)}})}max(e,t=Eo.max){return this.test({message:t,name:"max",exclusive:!0,params:{max:e},test(t){return Wo(t)||t<=this.resolve(e)}})}lessThan(e,t=Eo.lessThan){return this.test({message:t,name:"max",exclusive:!0,params:{less:e},test(t){return Wo(t)||tthis.resolve(e)}})}positive(e=Eo.positive){return this.moreThan(0,e)}negative(e=Eo.negative){return this.lessThan(0,e)}integer(e=Eo.integer){return this.test({name:"integer",message:e,test:e=>Wo(e)||Number.isInteger(e)})}truncate(){return this.transform((e=>Wo(e)?e:0|e))}round(e){var t;let s=["ceil","floor","round","trunc"];if("trunc"===(e=(null==(t=e)?void 0:t.toLowerCase())||"round"))return this.truncate();if(-1===s.indexOf(e.toLowerCase()))throw new TypeError("Only valid options for round() are: "+s.join(", "));return this.transform((t=>Wo(t)?t:Math[e](t)))}}Jo.prototype=en.prototype;var tn=/^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/;let sn=new Date("");function rn(){return new an}class an extends qo{constructor(){super({type:"date"}),this.withMutation((()=>{this.transform((function(e){return this.isType(e)?e:(e=function(e){var t,s,r=[1,4,5,6,7,10,11],a=0;if(s=tn.exec(e)){for(var o,n=0;o=r[n];++n)s[o]=+s[o]||0;s[2]=(+s[2]||1)-1,s[3]=+s[3]||1,s[7]=s[7]?String(s[7]).substr(0,3):0,void 0!==s[8]&&""!==s[8]||void 0!==s[9]&&""!==s[9]?("Z"!==s[8]&&void 0!==s[9]&&(a=60*s[10]+s[11],"+"===s[9]&&(a=0-a)),t=Date.UTC(s[1],s[2],s[3],s[4],s[5]+a,s[6],s[7])):t=+new Date(s[1],s[2],s[3],s[4],s[5],s[6],s[7])}else t=Date.parse?Date.parse(e):NaN;return t}(e),isNaN(e)?sn:new Date(e))}))}))}_typeCheck(e){return t=e,"[object Date]"===Object.prototype.toString.call(t)&&!isNaN(e.getTime());var t}prepareParam(e,t){let s;if(Do.isRef(e))s=e;else{let r=this.cast(e);if(!this._typeCheck(r))throw new TypeError(`\`${t}\` must be a Date or a value that can be \`cast()\` to a Date`);s=r}return s}min(e,t=xo.min){let s=this.prepareParam(e,"min");return this.test({message:t,name:"min",exclusive:!0,params:{min:e},test(e){return Wo(e)||e>=this.resolve(s)}})}max(e,t=xo.max){let s=this.prepareParam(e,"max");return this.test({message:t,name:"max",exclusive:!0,params:{max:e},test(e){return Wo(e)||e<=this.resolve(s)}})}}an.INVALID_DATE=sn,rn.prototype=an.prototype,rn.INVALID_DATE=sn;const on=window.lodash.snakeCase;var nn=s.n(on);const ln=window.lodash.camelCase;var cn=s.n(ln);const dn=window.lodash.mapKeys;var un=s.n(dn),pn=s(4633),mn=s.n(pn);function fn(e,t){let s=1/0;return e.some(((e,r)=>{var a;if(-1!==(null==(a=t.path)?void 0:a.indexOf(e)))return s=r,!0})),s}function hn(e){return(t,s)=>fn(e,t)-fn(e,s)}function yn(){return yn=Object.assign||function(e){for(var t=1;t"[object Object]"===Object.prototype.toString.call(e);const gn=hn([]);class bn extends qo{constructor(e){super({type:"object"}),this.fields=Object.create(null),this._sortErrors=gn,this._nodes=[],this._excludedEdges=[],this.withMutation((()=>{this.transform((function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(t){e=null}return this.isType(e)?e:null})),e&&this.shape(e)}))}_typeCheck(e){return wn(e)||"function"==typeof e}_cast(e,t={}){var s;let r=super._cast(e,t);if(void 0===r)return this.getDefault();if(!this._typeCheck(r))return r;let a=this.fields,o=null!=(s=t.stripUnknown)?s:this.spec.noUnknown,n=this._nodes.concat(Object.keys(r).filter((e=>-1===this._nodes.indexOf(e)))),i={},l=yn({},t,{parent:i,__validating:t.__validating||!1}),c=!1;for(const e of n){let s=a[e],n=To()(r,e);if(s){let a,o=r[e];l.path=(t.path?`${t.path}.`:"")+e,s=s.resolve({value:o,context:t.context,parent:i});let n="spec"in s?s.spec:void 0,d=null==n?void 0:n.strict;if(null==n?void 0:n.strip){c=c||e in r;continue}a=t.__validating&&d?r[e]:s.cast(r[e],l),void 0!==a&&(i[e]=a)}else n&&!o&&(i[e]=r[e]);i[e]!==r[e]&&(c=!0)}return c?i:r}_validate(e,t={},s){let r=[],{sync:a,from:o=[],originalValue:n=e,abortEarly:i=this.spec.abortEarly,recursive:l=this.spec.recursive}=t;o=[{schema:this,value:n},...o],t.__validating=!0,t.originalValue=n,t.from=o,super._validate(e,t,((e,c)=>{if(e){if(!No.isError(e)||i)return void s(e,c);r.push(e)}if(!l||!wn(c))return void s(r[0]||null,c);n=n||c;let d=this._nodes.map((e=>(s,r)=>{let a=-1===e.indexOf(".")?(t.path?`${t.path}.`:"")+e:`${t.path||""}["${e}"]`,i=this.fields[e];i&&"validate"in i?i.validate(c[e],yn({},t,{path:a,from:o,strict:!0,parent:c,originalValue:n[e]}),r):r(null)}));Oo({sync:a,tests:d,value:c,errors:r,endEarly:i,sort:this._sortErrors,path:t.path},s)}))}clone(e){const t=super.clone(e);return t.fields=yn({},this.fields),t._nodes=this._nodes,t._excludedEdges=this._excludedEdges,t._sortErrors=this._sortErrors,t}concat(e){let t=super.concat(e),s=t.fields;for(let[e,t]of Object.entries(this.fields)){const r=s[e];void 0===r?s[e]=t:r instanceof qo&&t instanceof qo&&(s[e]=t.concat(r))}return t.withMutation((()=>t.shape(s,this._excludedEdges)))}getDefaultFromShape(){let e={};return this._nodes.forEach((t=>{const s=this.fields[t];e[t]="default"in s?s.getDefault():void 0})),e}_getDefault(){return"default"in this.spec?super._getDefault():this._nodes.length?this.getDefaultFromShape():void 0}shape(e,t=[]){let s=this.clone(),r=Object.assign(s.fields,e);return s.fields=r,s._sortErrors=hn(Object.keys(r)),t.length&&(Array.isArray(t[0])||(t=[t]),s._excludedEdges=[...s._excludedEdges,...t]),s._nodes=function(e,t=[]){let s=[],r=new Set,a=new Set(t.map((([e,t])=>`${e}-${t}`)));function o(e,t){let o=(0,Co.split)(e)[0];r.add(o),a.has(`${t}-${o}`)||s.push([t,o])}for(const t in e)if(To()(e,t)){let s=e[t];r.add(t),Do.isRef(s)&&s.isSibling?o(s.path,t):Fo(s)&&"deps"in s&&s.deps.forEach((e=>o(e,t)))}return mn().array(Array.from(r),s).reverse()}(r,s._excludedEdges),s}pick(e){const t={};for(const s of e)this.fields[s]&&(t[s]=this.fields[s]);return this.clone().withMutation((e=>(e.fields={},e.shape(t))))}omit(e){const t=this.clone(),s=t.fields;t.fields={};for(const t of e)delete s[t];return t.withMutation((()=>t.shape(s)))}from(e,t,s){let r=(0,Co.getter)(e,!0);return this.transform((a=>{if(null==a)return a;let o=a;return To()(a,e)&&(o=yn({},a),s||delete o[e],o[t]=r(a)),o}))}noUnknown(e=!0,t=ko.noUnknown){"string"==typeof e&&(t=e,e=!0);let s=this.test({name:"noUnknown",exclusive:!0,message:t,test(t){if(null==t)return!0;const s=function(e,t){let s=Object.keys(e.fields);return Object.keys(t).filter((e=>-1===s.indexOf(e)))}(this.schema,t);return!e||0===s.length||this.createError({params:{unknown:s.join(", ")}})}});return s.spec.noUnknown=e,s}unknown(e=!0,t=ko.noUnknown){return this.noUnknown(!e,t)}transformKeys(e){return this.transform((t=>t&&un()(t,((t,s)=>e(s)))))}camelCase(){return this.transformKeys(cn())}snakeCase(){return this.transformKeys(nn())}constantCase(){return this.transformKeys((e=>nn()(e).toUpperCase()))}describe(){let e=super.describe();return e.fields=Ao()(this.fields,(e=>e.describe())),e}}function vn(e){return new bn(e)}function En(){return En=Object.assign||function(e){for(var t=1;t{this.transform((function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(t){e=null}return this.isType(e)?e:null}))}))}_typeCheck(e){return Array.isArray(e)}get _subType(){return this.innerType}_cast(e,t){const s=super._cast(e,t);if(!this._typeCheck(s)||!this.innerType)return s;let r=!1;const a=s.map(((e,s)=>{const a=this.innerType.cast(e,En({},t,{path:`${t.path||""}[${s}]`}));return a!==e&&(r=!0),a}));return r?a:s}_validate(e,t={},s){var r,a;let o=[],n=t.sync,i=t.path,l=this.innerType,c=null!=(r=t.abortEarly)?r:this.spec.abortEarly,d=null!=(a=t.recursive)?a:this.spec.recursive,u=null!=t.originalValue?t.originalValue:e;super._validate(e,t,((e,r)=>{if(e){if(!No.isError(e)||c)return void s(e,r);o.push(e)}if(!d||!l||!this._typeCheck(r))return void s(o[0]||null,r);u=u||r;let a=new Array(r.length);for(let e=0;el.validate(s,n,t)}Oo({sync:n,path:i,value:r,errors:o,endEarly:c,tests:a},s)}))}clone(e){const t=super.clone(e);return t.innerType=this.innerType,t}concat(e){let t=super.concat(e);return t.innerType=this.innerType,e.innerType&&(t.innerType=t.innerType?t.innerType.concat(e.innerType):e.innerType),t}of(e){let t=this.clone();if(!Fo(e))throw new TypeError("`array.of()` sub-schema must be a valid yup schema not: "+go(e));return t.innerType=e,t}length(e,t=So.length){return this.test({message:t,name:"length",exclusive:!0,params:{length:e},test(t){return Wo(t)||t.length===this.resolve(e)}})}min(e,t){return t=t||So.min,this.test({message:t,name:"min",exclusive:!0,params:{min:e},test(t){return Wo(t)||t.length>=this.resolve(e)}})}max(e,t){return t=t||So.max,this.test({message:t,name:"max",exclusive:!0,params:{max:e},test(t){return Wo(t)||t.length<=this.resolve(e)}})}ensure(){return this.default((()=>[])).transform(((e,t)=>this._typeCheck(e)?e:null==t?[]:[].concat(t)))}compact(e){let t=e?(t,s,r)=>!e(t,s,r):e=>!!e;return this.transform((e=>null!=e?e.filter(t):e))}describe(){let e=super.describe();return this.innerType&&(e.innerType=this.innerType.describe()),e}nullable(e=!0){return super.nullable(e)}defined(){return super.defined()}required(e){return super.required(e)}}function Sn(e,t,s){if(!e||!Fo(e.prototype))throw new TypeError("You must provide a yup schema constructor function");if("string"!=typeof t)throw new TypeError("A Method name must be provided");if("function"!=typeof s)throw new TypeError("Method function must be provided");e.prototype[t]=s}xn.prototype=kn.prototype;const Ln=/^[A-Za-z0-9_-]+$/,Tn=/^[A-Fa-f0-9_-]+$/,Fn=/^[A-Za-z0-9_]{1,25}$/,$n=/^https?:\/\/(?:www\.)?(?:twitter|x)\.com\/(?[A-Za-z0-9_]{1,25})\/?$/,Pn=["image/jpeg","image/png","image/webp","image/gif"];Sn(Jo,"isMediaTypeImage",(function(){return this.test("isMediaTypeImage",(0,Ps.__)("The selected file is not an image.","wordpress-seo"),(e=>{if(!e)return!0;const t=(0,a.select)(Ds).selectMediaById(e);return!t||"image"===(null==t?void 0:t.type)}))})),Sn(Jo,"isMediaMimeTypeAllowed",(function(){return this.test("isMediaMimeTypeAllowed",(0,Ps.__)("The selected media type is not valid. Supported types are: JPG, PNG, WEBP and GIF.","wordpress-seo"),(e=>{const t=(0,a.select)(Ds).selectMediaById(e);return!t||Pn.includes(t.mime)}))})),Sn(Qo,"isValidTwitterUrlOrHandle",(function(){return this.test("isValidTwitterUrlOrHandle",(0,Ps.__)("The profile is not valid. Please use only 1-25 letters, numbers and underscores or enter a valid X URL.","wordpress-seo"),(e=>!e||Fn.test(e)||$n.test(e)))}));const In=(e,t)=>vn().shape({wpseo:vn().shape({baiduverify:Qo().matches(Ln,(0,Ps.__)("The verification code is not valid. Please use only letters, numbers, underscores and dashes.","wordpress-seo")),googleverify:Qo().matches(Ln,(0,Ps.__)("The verification code is not valid. Please use only letters, numbers, underscores and dashes.","wordpress-seo")),msverify:Qo().matches(Tn,(0,Ps.__)("The verification code is not valid. Please use only the letters A to F, numbers, underscores and dashes.","wordpress-seo")),yandexverify:Qo().matches(Tn,(0,Ps.__)("The verification code is not valid. Please use only the letters A to F, numbers, underscores and dashes.","wordpress-seo")),search_character_limit:Jo().required((0,Ps.__)("Please enter a number between 1 and 50.","wordpress-seo")).min(1,(0,Ps.__)("The number you've entered is not between 1 and 50.","wordpress-seo")).max(50,(0,Ps.__)("The number you've entered is not between 1 and 50.","wordpress-seo"))}),wpseo_social:vn().shape({og_default_image_id:Jo().isMediaTypeImage(),facebook_site:Qo().url((0,Ps.__)("The profile is not valid. Please enter a valid URL.","wordpress-seo")),mastodon_url:Qo().url((0,Ps.__)("The profile is not valid. Please enter a valid URL.","wordpress-seo")),twitter_site:Qo().isValidTwitterUrlOrHandle(),other_social_urls:xn().of(Qo().url((0,Ps.__)("The profile is not valid. Please enter a valid URL.","wordpress-seo"))),pinterestverify:Qo().matches(Tn,(0,Ps.__)("The verification code is not valid. Please use only the letters A to F, numbers, underscores and dashes.","wordpress-seo"))}),wpseo_titles:vn().shape({open_graph_frontpage_image_id:Jo().isMediaTypeImage(),company_logo_id:Jo().isMediaTypeImage(),person_logo_id:Jo().isMediaTypeImage(),...(0,le.reduce)(e,((e,{name:t,hasArchive:s})=>({...e,..."attachment"!==t&&{[`social-image-id-${t}`]:Jo().isMediaTypeImage().isMediaMimeTypeAllowed()},...s&&{[`social-image-id-ptarchive-${t}`]:Jo().isMediaTypeImage().isMediaMimeTypeAllowed()}})),{}),...(0,le.reduce)(t,((e,{name:t})=>({...e,[`social-image-id-tax-${t}`]:Jo().isMediaTypeImage().isMediaMimeTypeAllowed()})),{}),"social-image-id-author-wpseo":Jo().isMediaTypeImage().isMediaMimeTypeAllowed(),"social-image-id-archive-wpseo":Jo().isMediaTypeImage().isMediaMimeTypeAllowed(),"social-image-id-tax-post_format":Jo().isMediaTypeImage().isMediaMimeTypeAllowed()})}),Rn=new RegExp(/^input-wpseo_titles-(post_types|taxonomy)-(?\S+)-(maintax|ptparent)$/is),Nn={fieldId:"DUMMY_ITEM"},On=({fieldId:t,fieldLabel:s})=>{const{isPostTypeOrTaxonomyBreadcrumbSetting:r,postTypeOrTaxonomyName:a}=(0,i.useMemo)((()=>{var e;const s=Rn.exec(t);return{isPostTypeOrTaxonomyBreadcrumbSetting:Boolean(s),postTypeOrTaxonomyName:null==s||null===(e=s.groups)||void 0===e?void 0:e.name}}),[t,Rn]);return r?(0,e.createElement)(e.Fragment,null,s,a&&(0,e.createElement)(l.Code,{className:"yst-ml-2 group-hover:yst-bg-primary-200 group-hover:yst-text-primary-800"},a)):s};On.propTypes={fieldId:Os().string.isRequired,fieldLabel:Os().string.isRequired};const Mn=({title:t,children:s})=>(0,e.createElement)("div",{className:"yst-border-t yst-border-slate-100 yst-p-6 yst-py-12 yst-space-3 yst-text-center yst-text-sm"},(0,e.createElement)("span",{className:"yst-block yst-font-semibold yst-text-slate-900"},t),s);Mn.propTypes={title:Os().node.isRequired,children:Os().node.isRequired};const An=({buttonId:t="button-search",modalId:s="modal-search"})=>{const[r,,,a,o]=(0,l.useToggleState)(!1),[n,c]=(0,i.useState)(""),d=zs("selectPreference",[],"userLocale"),u=zs("selectQueryableSearchIndex"),[p,m]=(0,i.useState)([]),f=(0,l.useSvgAria)(),h=Ve(),y=(0,i.useRef)(null),{platform:_,os:w}=(0,i.useMemo)((()=>{var e,t;return js().parse(null===(e=window)||void 0===e||null===(t=e.navigator)||void 0===t?void 0:t.userAgent)}),[]),{isMobileMenuOpen:g,setMobileMenuOpen:b}=(0,l.useNavigationContext)(),[v,E]=(0,i.useState)(""),x=(0,i.useMemo)((()=>{switch(d){case"ko-KR":case"zh-CN":case"zh-HK":case"zh-TW":return 1;default:return 2}}),[d]);eo("meta+k",(e=>{e.preventDefault(),"desktop"!==(null==_?void 0:_.type)||r||g||a()}),{enableOnFormTags:!0,enableOnContentEditable:!0},[r,a,_,g]);const k=(0,i.useCallback)((({route:e,fieldId:t})=>{t!==Nn.fieldId&&(b(!1),o(),c(""),m([]),h(`${e}#${t}`))}),[o,c,b]),S=(0,i.useCallback)((0,le.debounce)((e=>{const t=(0,le.trim)(e);if(E(""),t.length{const r=(0,le.reduce)(s,((e,s)=>(0,le.includes)(null==t?void 0:t.keywords,s)?++e:e),0);return 0===r?e:[...e,{...t,hits:r}]}),[]),a=r.sort(((e,t)=>t.hits-e.hits)),o=(0,le.groupBy)(a,"route"),n=(0,le.values)(o).sort(((e,t)=>{const s=(0,le.reduce)(e,((e,t)=>(0,le.max)([e,t.hits])),0);return(0,le.reduce)(t,((e,t)=>(0,le.max)([e,t.hits])),0)-s}));(0,le.isEmpty)(r)?E((0,Ps.__)("No results found","wordpress-seo")):E((0,Ps.sprintf)(/* translators: %d expands to the number of results found. */ +(0,Ps._n)("%d result found, use up and down arrow keys to navigate","%d results found, use up and down arrow keys to navigate",r.length,"wordpress-seo"),r.length)),m(n)}),100),[u,d,E]),L=(0,i.useCallback)((e=>{c(e.target.value),S(e.target.value)}),[c,S]),T=(0,i.useCallback)((({active:e})=>Rs()("yst-group yst-block yst-no-underline yst-text-sm yst-text-slate-800 yst-select-none yst-py-3 yst-px-4 hover:yst-bg-primary-600 hover:yst-text-white focus:yst-bg-primary-600 focus:yst-text-white",e&&"yst-text-white yst-bg-primary-600")),[]);return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("button",{id:t,type:"button",className:"yst-w-full yst-flex yst-items-center yst-bg-white yst-text-sm yst-leading-6 yst-text-slate-500 yst-rounded-md yst-border yst-border-slate-300 yst-shadow-sm yst-py-1.5 yst-pl-2 yst-pr-3 focus:yst-outline-none focus:yst-ring-2 focus:yst-ring-offset-2 focus:yst-ring-primary-500",onClick:a},(0,e.createElement)(Ba,{className:"yst-flex-none yst-w-5 yst-h-5 yst-mr-3 yst-text-slate-400",...f}),(0,e.createElement)("span",{className:"yst-overflow-hidden yst-whitespace-nowrap yst-text-ellipsis"},n||(0,Ps.__)("Quick search...","wordpress-seo")),"desktop"===(null==_?void 0:_.type)&&(0,e.createElement)("span",{className:"yst-ml-auto yst-flex-none yst-text-xs yst-font-semibold yst-text-slate-400"},"macOS"===(null==w?void 0:w.name)?(0,Ps.__)("⌘K","wordpress-seo"):(0,Ps.__)("CtrlK","wordpress-seo"))),(0,e.createElement)(l.Modal,{id:s,onClose:o,isOpen:r,initialFocus:y,position:"top-center","aria-label":(0,Ps.__)("Search","wordpress-seo")},(0,e.createElement)(l.Modal.Panel,{hasCloseButton:!1},(0,e.createElement)(Vr,null,v&&(0,e.createElement)(Gr,{message:v,"aria-live":"polite"})),(0,e.createElement)(Da,{as:"div",className:"yst--m-6",onChange:k},(0,e.createElement)("div",{className:"yst-relative"},(0,e.createElement)(Ba,{className:"yst-pointer-events-none yst-absolute yst-top-3.5 yst-left-4 yst-h-5 yst-w-5 yst-text-slate-400",...f}),(0,e.createElement)(Da.Input,{ref:y,id:"input-search",placeholder:(0,Ps.__)("Search...","wordpress-seo"),"aria-label":(0,Ps.__)("Search","wordpress-seo"),value:n,onChange:L,className:"yst-h-12 yst-w-full yst-border-0 yst-rounded-lg sm:yst-text-sm yst-bg-transparent yst-px-11 yst-text-slate-800 yst-placeholder-slate-500 focus:yst-outline-none focus:yst-ring-inset focus:yst-ring-2 focus:yst-ring-primary-500 focus:yst-border-primary-500"}),(0,e.createElement)("div",{className:"yst-modal__close"},(0,e.createElement)("button",{type:"button",onClick:o,className:"yst-modal__close-button"},(0,e.createElement)("span",{className:"yst-sr-only"},(0,Ps.__)("Close","wordpress-seo")),(0,e.createElement)(Va,{className:"yst-h-6 yst-w-6",...f})))),n.length>=x&&!(0,le.isEmpty)(p)&&(0,e.createElement)(Da.Options,{static:!0,className:"yst-max-h-[calc(90vh-10rem)] yst-scroll-pt-11 yst-scroll-pb-2 yst-space-y-2 yst-overflow-y-auto yst-pb-2"},(0,le.map)(p,((t,s)=>{var r;return(0,e.createElement)("div",{key:(null==t||null===(r=t[0])||void 0===r?void 0:r.route)||`group-${s}`,role:"presentation"},(0,e.createElement)(l.Title,{id:`group-${s}-title`,as:"h4",size:"5",className:"yst-bg-slate-100 yst-font-semibold yst-py-3 yst-px-4",role:"presentation","aria-hidden":"true"},(0,le.first)(t).routeLabel),(0,e.createElement)("div",{role:"presentation"},(0,le.map)(t,(t=>(0,e.createElement)(Da.Option,{key:t.fieldId,value:t,className:T},(0,e.createElement)(On,{...t}))))))}))),n.length=x&&(0,le.isEmpty)(p)&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)(Mn,{title:(0,Ps.__)("No results found","wordpress-seo")},(0,e.createElement)("p",{className:"yst-text-slate-500"},(0,Ps.__)("We couldn’t find anything with that term.","wordpress-seo"))),(0,e.createElement)(Da.Options,{className:"yst-visible-"},(0,e.createElement)(Da.Option,{value:Nn})))))))};An.propTypes={buttonId:Os().string,modalId:Os().string};const Cn=An,Dn=l.SidebarNavigation.SubmenuItem,Bn=({to:t,idSuffix:s="",...r})=>{const a=(0,i.useMemo)((()=>(0,le.replace)((0,le.replace)(`link-${t}`,"/","-"),"--","-")),[t]);return(0,e.createElement)(Dn,{as:Ze,pathProp:"to",id:`${a}${s}`,to:t,...r})};Bn.propTypes={to:Os().string.isRequired,idSuffix:Os().string},l.SidebarNavigation.SubmenuItem=Bn;const Vn=l.SidebarNavigation,jn=({link:t})=>{const s=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to "Yoast SEO" academy, which is a clickable link. */ +(0,Ps.__)("Want to learn SEO from Team Yoast? Check out our %1$s!","wordpress-seo"),""),{link:(0,e.createElement)("a",{href:t,target:"_blank",rel:"noopener"},"Yoast SEO academy")})),[]);return(0,e.createElement)(l.Paper,{as:"div",className:"yst-p-6 yst-space-y-3"},(0,e.createElement)(l.Title,{as:"h2",size:"4",className:"yst-text-base yst-text-primary-500"},(0,Ps.__)("Learn SEO","wordpress-seo")),(0,e.createElement)("p",null,s,(0,e.createElement)("br",null),(0,Ps.__)("We have both free and premium online courses to learn everything you need to know about SEO.","wordpress-seo")),(0,e.createElement)(l.Link,{href:t,className:"yst-block",target:"_blank",rel:"noopener"},(0,Ps.sprintf)(/* translators: %1$s expands to "Yoast SEO academy". */ +(0,Ps.__)("Check out %1$s","wordpress-seo"),"Yoast SEO academy")))};jn.propTypes={link:Os().string.isRequired};const zn=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),Un=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),qn=({learnMoreLink:t,thumbnail:s,wistiaEmbedPermission:r,upsellLink:a,isProductCopy:o,title:n,upsellLabel:c,newToText:d,bundleNote:u})=>{const{onClose:p,initialFocus:m}=(0,l.useModalContext)(),f={a:(0,e.createElement)(Gn,{href:t,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,e.createElement)(Un,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,e.createElement)("div",{className:"yst-relative yst-w-full"},(0,e.createElement)(hi,{videoId:"vmrahpfjxp",thumbnail:s,wistiaEmbedPermission:r}),(0,e.createElement)(l.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,e.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,e.createElement)("span",{className:"yst-logo-icon"}),d))),(0,e.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,e.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},n),(0,e.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},o?(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,Ps.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for product titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),f):(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,Ps.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),f))),(0,e.createElement)("div",{className:"yst-w-full yst-flex yst-mt-10"},(0,e.createElement)(l.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:a,target:"_blank",ref:m},(0,e.createElement)(zn,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),c,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,Ps.__)("(Opens in a new browser tab)","wordpress-seo")))),u,(0,e.createElement)(l.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:p},(0,Ps.__)("Close","wordpress-seo"))))};var Wn;function Hn(){return Hn=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",Hn({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1000 1000"},t),Wn||(Wn=e.createElement("path",{fill:"#fff",d:"M500 0C223.9 0 0 223.9 0 500s223.9 500 500 500 500-223.9 500-500S776.1 0 500 0Zm87.2 412.4c0-21.9 4.3-40.2 13.1-54.4s24-27.1 45.9-38.2l10.1-4.9c17.8-9 22.4-16.7 22.4-26 0-11.1-9.5-19.1-25-19.1-18.3 0-32.2 9.5-41.8 28.9l-24.7-24.8c5.4-11.6 14.1-20.9 25.8-28.1a70.8 70.8 0 0 1 38.9-11.1c17.8 0 33.3 4.6 45.9 14.2s19.4 22.7 19.4 39.4c0 26.6-15 42.9-43.1 57.3l-15.7 8c-16.8 8.5-25.1 16-27.4 29.4h85.4v35.4H587.2Zm-82.1 373.3c-157.8 0-285.7-127.9-285.7-285.7s127.9-285.7 285.7-285.7a286.4 286.4 0 0 1 55.9 5.5l-55.9 116.9c-90 0-163.3 73.3-163.3 163.3s73.3 163.3 163.3 163.3a162.8 162.8 0 0 0 106.4-39.6l61.8 107.2a283.9 283.9 0 0 1-168.2 54.8ZM705 704.1l-70.7-122.5H492.9l70.7-122.4H705l70.7 122.4Z"}))),Gn=({href:t,children:s,...r})=>(0,e.createElement)(l.Link,{target:"_blank",rel:"noopener noreferrer",...r,href:t},s,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,Ps.__)("(Opens in a new browser tab)","wordpress-seo")));var Kn,Zn,Qn;function Xn(){return Xn=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",Xn({xmlns:"http://www.w3.org/2000/svg",id:"star-rating-half_svg__Layer_1","data-name":"Layer 1",viewBox:"0 0 500 475.53"},t),Kn||(Kn=e.createElement("defs",null,e.createElement("style",null,".star-rating-half_svg__cls-1{fill:#fbbf24}"))),Zn||(Zn=e.createElement("path",{d:"M250 392.04 98.15 471.87l29-169.09L4.3 183.03l169.77-24.67L250 4.52l75.93 153.84 169.77 24.67-122.85 119.75 29 169.09L250 392.04z",className:"star-rating-half_svg__cls-1"})),Qn||(Qn=e.createElement("path",{d:"m250 9.04 73.67 149.27.93 1.88 2.08.3 164.72 23.94-119.19 116.19-1.51 1.47.36 2.07 28.14 164.06-147.34-77.46-1.86-1-1.86 1-147.34 77.46 28.14-164.06.36-2.07-1.51-1.47L8.6 184.43l164.72-23.9 2.08-.3.93-1.88L250 9.04m0-9-77.25 156.49L0 181.64l125 121.89-29.51 172L250 394.3l154.51 81.23-29.51-172 125-121.89-172.75-25.11L250 0Z",className:"star-rating-half_svg__cls-1"})),e.createElement("path",{d:"m500 181.64-172.75-25.11L250 0v394.3l154.51 81.23L375 303.48l125-121.84z",style:{fill:"#f3f4f6"}}));function ei(){return ei=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",ei({xmlns:"http://www.w3.org/2000/svg","data-name":"Layer 1",viewBox:"0 0 500 475.53"},t),e.createElement("path",{d:"m250 0 77.25 156.53L500 181.64 375 303.48l29.51 172.05L250 394.3 95.49 475.53 125 303.48 0 181.64l172.75-25.11L250 0z",style:{fill:"#fbbf24"}}));var si,ri,ai,oi,ni,ii,li,ci,di;function ui(){return ui=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",ui({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 500 500"},t),si||(si=e.createElement("path",{fill:"#a4286a",d:"M80 0h340a80 80 0 0 1 80 80v420H80a80 80 0 0 1-80-80V80A80 80 0 0 1 80 0z"})),ri||(ri=e.createElement("path",{fill:"#6c2548",d:"M437.61 2 155.89 500H500V80a80 80 0 0 0-62.39-78z"})),ai||(ai=e.createElement("path",{fill:"#fff",d:"M74.4 337.3v34.9c21.6-.9 38.5-8 52.8-22.5s27.4-38 39.9-72.9l92.6-248h-44.8L140.3 236l-37-116.2h-41l54.4 139.8a57.54 57.54 0 0 1 0 41.8c-5.5 14.2-15.4 30.9-42.3 35.9z"})),oi||(oi=e.createElement("circle",{cx:368.33,cy:124.68,r:97.34,fill:"#9fda4f",transform:"rotate(-45 368.335 124.68)"})),ni||(ni=e.createElement("path",{fill:"#77b227",d:"m416.2 39.93-95.74 169.51A97.34 97.34 0 1 0 416.2 39.93z"})),ii||(ii=e.createElement("path",{fill:"#fec228",d:"m294.78 254.75-.15-.08-.13-.07a63.6 63.6 0 0 0-62.56 110.76h.13a63.6 63.6 0 0 0 62.71-110.67z"})),li||(li=e.createElement("path",{fill:"#f49a00",d:"m294.5 254.59-62.56 110.76a63.6 63.6 0 1 0 62.56-110.76z"})),ci||(ci=e.createElement("path",{fill:"#ff4e47",d:"M222.31 450.07A38.16 38.16 0 0 0 203 416.83a38.18 38.18 0 1 0 19.41 33.27z"})),di||(di=e.createElement("path",{fill:"#ed261f",d:"m202.9 416.8-37.54 66.48a38.17 38.17 0 0 0 37.54-66.48z"}))),mi=({link:t,linkProps:s,promotions:r})=>{const a=(0,i.useMemo)((()=>(0,Ps.__)("Use AI to generate titles and meta descriptions, automatically redirect deleted pages, get 24/7 support, and much, much more!","wordpress-seo")),[]),o=(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s and %2$s expand to a span wrap to avoid linebreaks. %3$s expands to "Yoast SEO Premium". */ +(0,Ps.__)("%1$sGet%2$s %3$s","wordpress-seo"),"","","Yoast SEO Premium"),{nowrap:(0,e.createElement)("span",{className:"yst-whitespace-nowrap"})}),n=r.includes("black-friday-2023-promotion"),c=(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s and %2$s expand to strong tags. */ +(0,Ps.__)("%1$sSAVE 30%%%2$s on your 12 month subscription","wordpress-seo"),"",""),{strong:(0,e.createElement)("strong",null)});return(0,e.createElement)("div",{className:"yst-p-6 yst-rounded-lg yst-text-white yst-bg-primary-500 yst-shadow"},(0,e.createElement)("figure",{className:"yst-logo-square yst-w-16 yst-h-16 yst-mx-auto yst-overflow-hidden yst-border yst-border-white yst-rounded-xl yst-rounded-br-none yst-relative yst-z-10 yst-mt-[-2.6rem]"},(0,e.createElement)(pi,null)),n&&(0,e.createElement)("div",{className:"sidebar__sale_banner_container"},(0,e.createElement)("div",{className:"sidebar__sale_banner"},(0,e.createElement)("span",{className:"banner_text"},(0,Ps.__)("BLACK FRIDAY - 30% OFF","wordpress-seo")))),(0,e.createElement)(l.Title,{as:"h2",className:"yst-mt-6 yst-text-base yst-font-extrabold yst-text-white"},o),(0,e.createElement)("p",{className:"yst-mt-2"},a),n&&(0,e.createElement)("div",{className:"yst-text-center yst-border-t-[1px] yst-border-white yst-italic yst-mt-3"},(0,e.createElement)("p",{className:"yst-text-[10px] yst-my-3 yst-mx-0"},c)),(0,e.createElement)(l.Button,{as:"a",variant:"upsell",href:t,target:"_blank",rel:"noopener",className:"yst-flex yst-justify-center yst-gap-2 yst-mt-4 focus:yst-ring-offset-primary-500",...s},(0,e.createElement)("span",null,n?(0,Ps.__)("Claim your 30% off now!","wordpress-seo"):o),(0,e.createElement)(Ts,{className:"yst-w-4 yst-h-4 yst-icon-rtl"})),(0,e.createElement)("p",{className:"yst-text-center yst-text-xs yst-mx-2 yst-font-light yst-leading-5 yst-mt-2"},(0,Ps.__)("Only $/€/£99 per year (ex VAT)","wordpress-seo"),(0,e.createElement)("br",null),(0,Ps.__)("30-day money back guarantee.","wordpress-seo")),(0,e.createElement)("hr",{className:"yst-border-t yst-border-primary-300 yst-my-4"}),(0,e.createElement)("a",{className:"yst-block yst-mt-4 yst-no-underline",href:"https://www.g2.com/products/yoast-yoast/reviews",target:"_blank",rel:"noopener noreferrer"},(0,e.createElement)("span",{className:"yst-font-medium yst-text-white hover:yst-underline"},(0,Ps.__)("Read reviews from real users","wordpress-seo")),(0,e.createElement)("span",{className:"yst-flex yst-gap-2 yst-mt-2 yst-items-center"},(0,e.createElement)(Yn,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)("span",{className:"yst-flex yst-gap-1"},(0,e.createElement)(ti,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(ti,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(ti,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(ti,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(Jn,{className:"yst-w-5 yst-h-5"})),(0,e.createElement)("span",{className:"yst-text-sm yst-font-semibold yst-text-white"},"4.6 / 5"))))};mi.propTypes={link:Os().string.isRequired,linkProps:Os().object,promotions:Os().array},mi.defaultProps={linkProps:{},promotions:[]};const fi=({children:t})=>(0,e.createElement)("div",{className:"xl:yst-max-w-3xl xl:yst-fixed xl:yst-right-8 xl:yst-w-[16rem]"},(0,e.createElement)("div",{className:"yst-grid yst-grid-cols-1 sm:yst-grid-cols-2 min-[783px]:yst-grid-cols-1 lg:yst-grid-cols-2 xl:yst-grid-cols-1 yst-gap-4"},t));fi.propTypes={children:Os().node.isRequired};const hi=({videoId:t,thumbnail:s,wistiaEmbedPermission:r})=>{const[a,o]=(0,i.useState)(r.value?$t:Tt),n=(0,i.useCallback)((()=>o($t)),[o]),c=(0,i.useCallback)((()=>{r.value?n():o(Ft)}),[r.value,n,o]),d=(0,i.useCallback)((()=>o(Tt)),[o]),u=(0,i.useCallback)((()=>{r.set(!0),n()}),[r.set,n]);return(0,e.createElement)(e.Fragment,null,r.value&&(0,e.createElement)(Ir.Helmet,null,(0,e.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,e.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},a===Tt&&(0,e.createElement)("button",{type:"button",className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:c},(0,e.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...s})),a===Ft&&(0,e.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,e.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},r.status===kt&&(0,e.createElement)(l.Spinner,null),r.status!==kt&&(0,Ps.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,Ps.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo"),"Yoast SEO","Wistia")),(0,e.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,e.createElement)(l.Button,{type:"button",variant:"secondary",onClick:d,disabled:r.status===kt},(0,Ps.__)("Deny","wordpress-seo")),(0,e.createElement)(l.Button,{type:"button",variant:"primary",onClick:u,disabled:r.status===kt},(0,Ps.__)("Allow","wordpress-seo")))),r.value&&a===$t&&(0,e.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===t&&(0,e.createElement)(l.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==t&&(0,e.createElement)("div",{className:`wistia_embed wistia_async_${t} videoFoam=true`}))))};hi.propTypes={videoId:Os().string.isRequired,thumbnail:Os().shape({src:Os().string.isRequired,width:Os().string,height:Os().string}).isRequired,wistiaEmbedPermission:Os().shape({value:Os().bool.isRequired,status:Os().string.isRequired,set:Os().func.isRequired}).isRequired};const yi=({learnMoreLink:t,thumbnail:s,wistiaEmbedPermission:r,upsellLink:a,upsellLabel:o})=>{const{onClose:n,initialFocus:c}=(0,l.useModalContext)(),d={a:(0,e.createElement)(Gn,{href:t,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,e.createElement)(Un,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"}),br:(0,e.createElement)("br",null)};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,e.createElement)("div",{className:"yst-relative yst-w-full"},(0,e.createElement)(hi,{videoId:"vun9z1dpfh",thumbnail:s,wistiaEmbedPermission:r}),(0,e.createElement)(l.Badge,{className:"yst-absolute yst-right-0 yst-mr-4 yst-text-center yst-justify-center",variant:"info",style:{top:"-8px"}},(0,Ps.__)("Beta","wordpress-seo-premium"))),(0,e.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,e.createElement)("span",{className:"yst-logo-icon"}),"Yoast SEO Premium"))),(0,e.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,e.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,Ps.sprintf)(/* translators: %s: Expands to "Yoast AI" */ +(0,Ps.__)("Optimize your SEO content with %s","wordpress-seo"),"Yoast AI")),(0,e.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s is a break tag; %2$s and %3$s are anchor tags; %4$s is the arrow icon. */ +(0,Ps.__)("Make content editing a breeze! Optimize your SEO content with quick, actionable suggestions at the click of a button.%1$s%2$sLearn more%3$s%4$s","wordpress-seo"),"
            ","","",""),d))),(0,e.createElement)("div",{className:"yst-w-full yst-flex yst-mt-6"},(0,e.createElement)(l.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:a,target:"_blank",ref:c},(0,e.createElement)(zn,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),o,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,Ps.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,e.createElement)(l.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:n},(0,Ps.__)("Close","wordpress-seo"))))};yi.propTypes={learnMoreLink:Os().string.isRequired,upsellLink:Os().string.isRequired,thumbnail:Os().shape({src:Os().string.isRequired,width:Os().string,height:Os().string}).isRequired,wistiaEmbedPermission:Os().shape({value:Os().bool.isRequired,status:Os().string.isRequired,set:Os().func.isRequired}).isRequired,upsellLabel:Os().string},yi.defaultProps={upsellLabel:(0,Ps.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")};const _i=()=>{const t=zs("selectPreference",[],"isPremium"),s=zs("selectPreference",[],"promotions",[]),r=zs("selectLink",[],"https://yoa.st/jj"),a=zs("selectUpsellSettingsAsProps"),o=zs("selectLink",[],"https://yoa.st/3t6");return t?null:(0,e.createElement)(fi,null,(0,e.createElement)(mi,{link:r,linkProps:a,promotions:s}),(0,e.createElement)(jn,{link:o}))},wi=({handleRefreshClick:t,supportLink:s})=>(0,e.createElement)("div",{className:"yst-flex yst-gap-2"},(0,e.createElement)(l.Button,{onClick:t},(0,Ps.__)("Refresh this page","wordpress-seo")),(0,e.createElement)(l.Button,{variant:"secondary",as:"a",href:s,target:"_blank",rel:"noopener"},(0,Ps.__)("Contact support","wordpress-seo")));wi.propTypes={handleRefreshClick:Os().func.isRequired,supportLink:Os().string.isRequired};const gi=({handleRefreshClick:t,supportLink:s})=>(0,e.createElement)("div",{className:"yst-grid yst-grid-cols-1 yst-gap-y-2"},(0,e.createElement)(l.Button,{className:"yst-order-last",onClick:t},(0,Ps.__)("Refresh this page","wordpress-seo")),(0,e.createElement)(l.Button,{variant:"secondary",as:"a",href:s,target:"_blank",rel:"noopener"},(0,Ps.__)("Contact support","wordpress-seo")));gi.propTypes={handleRefreshClick:Os().func.isRequired,supportLink:Os().string.isRequired};const bi=({error:t,children:s})=>(0,e.createElement)("div",{role:"alert",className:"yst-max-w-screen-sm yst-p-8 yst-space-y-4"},(0,e.createElement)(l.Title,null,(0,Ps.__)("Something went wrong. An unexpected error occurred.","wordpress-seo")),(0,e.createElement)("p",null,(0,Ps.__)("We're very sorry, but it seems like the following error has interrupted our application:","wordpress-seo")),(0,e.createElement)(l.Alert,{variant:"error"},(null==t?void 0:t.message)||(0,Ps.__)("Undefined error message.","wordpress-seo")),(0,e.createElement)("p",null,(0,Ps.__)("Unfortunately, this means that any unsaved changes in this section will be lost. You can try and refresh this page to resolve the problem. If this error still occurs, please get in touch with our support team, and we'll get you all the help you need!","wordpress-seo")),s);bi.propTypes={error:Os().object.isRequired,children:Os().node},bi.VerticalButtons=gi,bi.HorizontalButtons=wi;const vi=({error:t})=>{const s=(0,i.useCallback)((()=>{var e,t;return null===(e=window)||void 0===e||null===(t=e.location)||void 0===t?void 0:t.reload()}),[]),r=zs("selectLink",[],"https://yoa.st/settings-error-support");return(0,e.createElement)(bi,{error:t},(0,e.createElement)(bi.HorizontalButtons,{supportLink:r,handleRefreshClick:s}))};vi.propTypes={error:Os().object.isRequired};const Ei=vi;var xi,ki;function Si(){return Si=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",Si({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",className:"yoast-logo_svg__w-40",viewBox:"0 0 842 224"},t),xi||(xi=e.createElement("path",{fill:"#a61e69",d:"M166.55 54.09c-38.69 0-54.17 25.97-54.17 54.88s15.25 56.02 54.17 56.02 54.07-27.19 54-54.26c-.09-32.97-16.77-56.65-54-56.65Zm-23.44 56.52c.94-38.69 30.66-38.65 40.59-24.79 9.05 12.63 10.9 55.81-17.14 55.5-12.92-.14-23.06-8.87-23.44-30.71Zm337.25 27.55V82.11h20.04V57.78h-20.04V28.39h-30.95v29.39h-15.7v24.33h15.7v52.87c0 30.05 20.95 47.91 43.06 51.61l9.24-24.88c-12.89-1.63-21.23-11.27-21.35-23.54Zm-156.15-8.87V87.16c0-1.54-.1-2.98-.25-4.39-2.68-34.04-51.02-33.97-88.46-20.9l10.82 21.78c24.38-11.58 38.97-8.59 44.07-2.89.13.15.26.29.38.45.01.02.03.04.04.06 2.6 3.51 1.98 9.05 1.98 13.41-31.86 0-65.77 4.23-65.77 39.17 0 26.56 33.28 43.65 68.06 18.33l5.16 12.45h29.81c-2.66-14.62-5.85-27.14-5.85-35.34Zm-31.18-.23c-24.51 27.43-46.96 1.61-23.97-9.65 6.77-2.31 15.95-2.41 23.97-2.41v12.06Zm78.75-44.17c0-10.38 16.61-15.23 42.82-3.27l9.06-22.01c-35.27-10.66-83.44-11.62-83.75 25.28-.15 17.68 11.19 27.19 27.52 33.26 11.31 4.2 27.64 6.38 27.59 15.39-.06 11.77-25.38 13.57-48.42-2.26l-9.31 23.87c31.43 15.64 89.87 16.08 89.56-23.12-.31-38.76-55.08-32.11-55.08-47.14ZM99.3 1 54.44 125.61 32.95 58.32H1l35.78 91.89a33.49 33.49 0 0 1 0 24.33c-4 10.25-10.65 19.03-26.87 21.21v27.24c31.58 0 48.65-19.41 63.88-61.96L133.48 1H99.3ZM598.64 139.05c0 8.17-2.96 14.58-8.87 19.23-5.91 4.65-14.07 6.98-24.47 6.98s-18.92-1.61-25.54-4.84v-14.2c4.19 1.97 8.65 3.52 13.37 4.65 4.72 1.13 9.11 1.7 13.18 1.7 5.95 0 10.35-1.13 13.18-3.39 2.83-2.26 4.25-5.3 4.25-9.11 0-3.43-1.3-6.35-3.9-8.74-2.6-2.39-7.97-5.22-16.1-8.48-8.39-3.39-14.3-7.27-17.74-11.63-3.44-4.36-5.16-9.59-5.16-15.71 0-7.67 2.72-13.7 8.18-18.1 5.45-4.4 12.77-6.6 21.95-6.6s17.57 1.93 26.29 5.78l-4.78 12.26c-8.18-3.43-15.47-5.15-21.89-5.15-4.87 0-8.55 1.06-11.07 3.17-2.52 2.12-3.77 4.91-3.77 8.39 0 2.39.5 4.43 1.51 6.13s2.66 3.3 4.97 4.81c2.3 1.51 6.46 3.5 12.45 5.97 6.75 2.81 11.7 5.43 14.85 7.86 3.15 2.43 5.45 5.18 6.92 8.23 1.46 3.06 2.2 6.66 2.2 10.81Zm68.53 24.96h-52.02V72.12h52.02v12.7h-36.99v25.01h34.66v12.57h-34.66v28.85h36.99v12.76Zm100.24-46.07c0 14.96-3.74 26.59-11.23 34.88-7.49 8.3-18.08 12.44-31.8 12.44s-24.54-4.12-31.99-12.35c-7.44-8.23-11.17-19.93-11.17-35.1s3.74-26.82 11.23-34.95c7.49-8.13 18.17-12.19 32.05-12.19s24.24 4.13 31.7 12.38c7.47 8.26 11.2 19.88 11.2 34.88Zm-70.2 0c0 11.31 2.29 19.89 6.86 25.74 4.57 5.85 11.35 8.77 20.32 8.77s15.67-2.89 20.22-8.67c4.55-5.78 6.82-14.39 6.82-25.83s-2.25-19.82-6.76-25.64-11.23-8.74-20.16-8.74-15.82 2.91-20.41 8.74c-4.59 5.82-6.89 14.37-6.89 25.64Z"})),ki||(ki=e.createElement("path",{fill:"#77b227",d:"m790.45 165.35 36.05-94.96H840l-36.02 94.96h-13.53z"})));function Ti(t,s,r=""){return(0,i.createInterpolateElement)(t,{a:(0,e.createElement)("a",{id:r,href:s,target:"_blank",rel:"noopener noreferrer"})})}const Fi=(t=>{const s=({name:s,isDummy:r=!1,...a})=>{const o=zs("selectDefaultSettingValue",[s],s);return r?(0,e.createElement)(t,{name:s,...a,disabled:!0,value:o,onChange:le.noop,tags:[],onAddTag:le.noop,onRemoveTag:le.noop}):(0,e.createElement)(t,{name:s,...a})};return s.propTypes={name:Os().string.isRequired,isDummy:Os().bool},s})(or),$i=br(rr),Pi=({name:t,label:s,singularLabel:r,hasArchive:a,hasSchemaArticleType:o,isNew:n})=>{const c=zs("selectReplacementVariablesFor",[t],t,"custom_post_type"),d=zs("selectUpsellSettingsAsProps"),u=zs("selectRecommendedReplacementVariablesFor",[t],t,"custom_post_type"),p=zs("selectReplacementVariablesFor",[t],`${t}_archive`,"custom-post-type_archive"),m=zs("selectRecommendedReplacementVariablesFor",[t],`${t}_archive`,"custom-post-type_archive"),f=zs("selectPreference",[],"isPremium"),h=zs("selectLink",[],"https://yoa.st/4cr"),y=zs("selectArticleTypeValuesFor",[t],t),_=zs("selectPageTypeValuesFor",[t],t),w=zs("selectPreference",[],"isWooCommerceActive"),g=zs("selectPreference",[],"hasWooCommerceShopPage"),b=zs("selectPreference",[],"editWooCommerceShopPageUrl"),v=zs("selectPreference",[],"wooCommerceShopPageSettingUrl"),E=zs("selectPreference",[],"userLocale"),x=zs("selectLink",[],"https://yoa.st/show-x"),k=zs("selectLink",[],"https://yoa.st/4e0"),S=zs("selectLink",[],"https://yoa.st/get-custom-fields"),L=zs("selectLink",[],"https://yoa.st/post-type-schema"),{updatePostTypeReviewStatus:T}=Bs(),F=zs("selectPreference",[],"isWooCommerceSEOActive")&&"product"===t,$=(0,Ps.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,Ps.__)("You have %1$s activated on your site, automatically setting the Page type for your products to 'Item Page'. As a result, the Page type selection is disabled.","wordpress-seo"),"Yoast WooCommerce SEO");(0,i.useEffect)((()=>{n&&T(t)}),[t,T]);const P=(0,i.useMemo)((()=>so(s,E)),[s,E]),I=(0,i.useMemo)((()=>so(r,E)),[r,E]),R=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening strong tag. + * %2$s expands to a closing strong tag. + * %3$s expands to the recommended image size. + */ +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","1200x675px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})})),[]),N=(0,i.useMemo)((()=>w&&"product"===t),[t,w]),O=(0,i.useMemo)((()=>g?Ti((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("You can edit the SEO metadata for this custom type on the %1$sShop page%2$s.","wordpress-seo"),"",""),b,"link-edit-woocommerce-shop-page"):Ti((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("You haven't set a Shop page in your WooCommerce settings. %1$sPlease do this first%2$s.","wordpress-seo"),"",""),v,"link-woocommerce-shop-page-setting")),[g,v,b]),M=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("You can add multiple custom fields and separate them by using %1$senter%2$s or %1$scomma%2$s.","wordpress-seo"),"",""),{em:(0,e.createElement)("em",null)})),[]),A=(0,i.useMemo)((()=>Ti((0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. %2$s and %3$s expand to opening and closing anchor tag. %4$s expands to "Yoast SEO". +(0,Ps.__)("Determine how your %1$s should be described by default in %2$syour site's Schema.org markup%3$s. You can always change the settings for individual %1$s in the %4$s sidebar or metabox.","wordpress-seo"),P,"","","Yoast SEO"),L,"link-post-type-schema")),[P,L]),{values:C}=q(),{opengraph:D}=C.wpseo_social,{"breadcrumbs-enable":B}=C.wpseo_titles;return(0,e.createElement)(Zr,{title:s,description:(0,Ps.sprintf)(/* translators: %1$s expands to the post type plural, e.g. posts. */ +(0,Ps.__)("Determine how your %1$s should look in search engines and on social media.","wordpress-seo"),P)},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. %2$s expands to "Yoast SEO". +(0,Ps.__)("Determine what your %1$s should look like in the search results by default. You can always customize the settings for individual %1$s in the %2$s sidebar or metabox.","wordpress-seo"),P,"Yoast SEO")},(0,e.createElement)(Zs,{name:`wpseo_titles.noindex-${t}`,id:`input-wpseo_titles-noindex-${t}`,label:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. +(0,Ps.__)("Show %1$s in search results","wordpress-seo"),P),description:(0,e.createElement)(e.Fragment,null,(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. +(0,Ps.__)("Disabling this means that %1$s will not be indexed by search engines and will be excluded from XML sitemaps.","wordpress-seo"),P)," ",(0,e.createElement)(l.Link,{href:x,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about the search results settings","wordpress-seo")),"."),className:"yst-max-w-sm"}),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(rr,{type:"title",name:`wpseo_titles.title-${t}`,fieldId:`input-wpseo_titles-title-${t}`,label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:u}),(0,e.createElement)(rr,{type:"description",name:`wpseo_titles.metadesc-${t}`,fieldId:`input-wpseo_titles-metadesc-${t}`,label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:u,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)("div",{className:"yst-flex yst-items-center yst-gap-1.5"},(0,e.createElement)("span",null,(0,Ps.__)("Social media appearance","wordpress-seo")),f&&(0,e.createElement)(l.Badge,{variant:"upsell"},"Premium")),description:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. %2$s expands to "Yoast SEO". +(0,Ps.__)("Determine how your %1$s should look on social media by default. You can always customize the settings for individual %1$s in the %2$s sidebar or metabox.","wordpress-seo"),P,"Yoast SEO")},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!f,variant:"card",cardLink:k,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...d},(0,e.createElement)(Pr,{isEnabled:!f||D}),(0,e.createElement)(er,{id:`wpseo_titles-social-image-${t}`,label:(0,Ps.__)("Social image","wordpress-seo"),previewLabel:R,mediaUrlName:`wpseo_titles.social-image-url-${t}`,mediaIdName:`wpseo_titles.social-image-id-${t}`,disabled:!D,isDummy:!f}),(0,e.createElement)($i,{type:"title",name:`wpseo_titles.social-title-${t}`,fieldId:`input-wpseo_titles-social-title-${t}`,label:(0,Ps.__)("Social title","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:u,disabled:!D,isDummy:!f}),(0,e.createElement)($i,{type:"description",name:`wpseo_titles.social-description-${t}`,fieldId:`input-wpseo_titles-social-description-${t}`,label:(0,Ps.__)("Social description","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:u,className:"yst-replacevar--description",disabled:!D,isDummy:!f}))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Schema","wordpress-seo"),description:A},(0,e.createElement)(yr,{as:l.SelectField,type:"select",name:`wpseo_titles.schema-page-type-${t}`,id:`input-wpseo_titles-schema-page-type-${t}`,label:(0,Ps.__)("Page type","wordpress-seo"),options:F?_.filter((({value:e})=>"ItemPage"===e)):_,disabled:F,className:"yst-max-w-sm",description:F?$:null}),o&&(0,e.createElement)("div",null,(0,e.createElement)(yr,{as:l.SelectField,type:"select",name:`wpseo_titles.schema-article-type-${t}`,id:`input-wpseo_titles-schema-article-type-${t}`,label:(0,Ps.__)("Article type","wordpress-seo"),options:y,className:"yst-max-w-sm"}),(0,e.createElement)(Fr,{name:t}))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Additional settings","wordpress-seo")},(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:`wpseo_titles.display-metabox-pt-${t}`,id:`input-wpseo_titles-display-metabox-pt-${t}`,label:(0,Ps.__)("Enable SEO controls and assessments","wordpress-seo"),description:(0,Ps.__)("Show or hide our tools and controls in the content editor.","wordpress-seo"),className:"yst-max-w-sm"}),(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!f,variant:"card",cardLink:S,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...d},(0,e.createElement)(Fi,{name:`wpseo_titles.page-analyse-extra-${t}`,id:`input-wpseo_titles-page-analyse-extra-${t}`,label:(0,Ps.__)("Add custom fields to page analysis","wordpress-seo"),labelSuffix:f&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium"),description:(0,e.createElement)(e.Fragment,null,M,(0,e.createElement)("br",null),(0,e.createElement)(l.Link,{id:`link-custom-fields-page-analysis-${t}`,href:h,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about our custom field analysis","wordpress-seo")),"."),isDummy:!f}))),a&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("hr",{className:"yst-my-16"}),(0,e.createElement)("div",{className:"yst-mb-8"},(0,e.createElement)(l.Title,{as:"h2",className:"yst-mb-2"},(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. Posts. +(0,Ps.__)("%1$s archive","wordpress-seo"),s)),(0,e.createElement)("p",{className:"yst-text-tiny"},N&&O,!N&&(0,Ps.sprintf)( +// translators: %1$s expands to the post type singular, e.g. post. +(0,Ps.__)("These settings are specifically for optimizing your %1$s archive.","wordpress-seo"),I))),!N&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. +(0,Ps.__)("Determine how your %1$s archive should look in search engines.","wordpress-seo"),P)},(0,e.createElement)(Zs,{name:`wpseo_titles.noindex-ptarchive-${t}`,id:`input-wpseo_titles-noindex-ptarchive-${t}`,label:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. +(0,Ps.__)("Show the archive for %1$s in search results","wordpress-seo"),P),description:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. +(0,Ps.__)("Disabling this means that the archive for %1$s will not be indexed by search engines and will be excluded from XML sitemaps.","wordpress-seo"),P),className:"yst-max-w-sm"}),(0,e.createElement)(rr,{type:"title",name:`wpseo_titles.title-ptarchive-${t}`,fieldId:`input-wpseo_titles-title-ptarchive-${t}`,label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:p,recommendedReplacementVariables:m}),(0,e.createElement)(rr,{type:"description",name:`wpseo_titles.metadesc-ptarchive-${t}`,fieldId:`input-wpseo_titles-metadesc-ptarchive-${t}`,label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:p,recommendedReplacementVariables:m,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)("div",{className:"yst-flex yst-items-center yst-gap-1.5"},(0,e.createElement)("span",null,(0,Ps.__)("Social media appearance","wordpress-seo")),f&&(0,e.createElement)(l.Badge,{variant:"upsell"},"Premium")),description:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. posts. +(0,Ps.__)("Determine how your %1$s archive should look on social media.","wordpress-seo"),P)},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!f,variant:"card",cardLink:k,cardText:(0,Ps.sprintf)( +// translators: %1$s expands to Premium. +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...d},(0,e.createElement)(er,{id:`wpseo_titles-social-image-ptarchive-${t}`,label:(0,Ps.__)("Social image","wordpress-seo"),previewLabel:R,mediaUrlName:`wpseo_titles.social-image-url-ptarchive-${t}`,mediaIdName:`wpseo_titles.social-image-id-ptarchive-${t}`,disabled:!D,isDummy:!f}),(0,e.createElement)($i,{type:"title",name:`wpseo_titles.social-title-ptarchive-${t}`,fieldId:`input-wpseo_titles-social-title-ptarchive-${t}`,label:(0,Ps.__)("Social title","wordpress-seo"),replacementVariables:p,recommendedReplacementVariables:m,disabled:!D,isDummy:!f}),(0,e.createElement)($i,{type:"description",name:`wpseo_titles.social-description-ptarchive-${t}`,fieldId:`input-wpseo_titles-social-description-ptarchive-${t}`,label:(0,Ps.__)("Social description","wordpress-seo"),replacementVariables:p,recommendedReplacementVariables:m,className:"yst-replacevar--description",disabled:!D,isDummy:!f}))),B&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Additional settings","wordpress-seo")},(0,e.createElement)(te,{as:l.TextField,type:"text",name:`wpseo_titles.bctitle-ptarchive-${t}`,id:`input-wpseo_titles-bctitle-ptarchive-${t}`,label:(0,Ps.__)("Breadcrumbs title","wordpress-seo")}))))))))};Pi.propTypes={name:Os().string.isRequired,label:Os().string.isRequired,singularLabel:Os().string.isRequired,hasArchive:Os().bool.isRequired,hasSchemaArticleType:Os().bool.isRequired,isNew:Os().bool.isRequired};const Ii=Pi,Ri=br(rr),Ni=({name:t,label:s,postTypes:r,showUi:a,isNew:o})=>{const n=zs("selectPostTypes",[r],r),c=zs("selectUpsellSettingsAsProps"),d=zs("selectReplacementVariablesFor",[t],t,"term-in-custom-taxonomy"),u=zs("selectRecommendedReplacementVariablesFor",[t],t,"term-in-custom-taxonomy"),p=zs("selectLink",[],"https://yoa.st/show-x"),m=zs("selectPreference",[],"isPremium"),f=zs("selectPreference",[],"userLocale"),h=zs("selectPreference",[],"editTaxonomyUrl"),y=zs("selectLink",[],"https://yoa.st/4e0"),_=(0,i.useMemo)((()=>so(s,f)),[s,f]),w=(0,i.useMemo)((()=>(0,le.values)(n)),[n]),g=(0,i.useMemo)((()=>(0,le.initial)(w)),[w]),b=(0,i.useMemo)((()=>(0,le.last)(w)),[w]),{updateTaxonomyReviewStatus:v}=Bs();(0,i.useEffect)((()=>{o&&v(t)}),[t,v]);const E=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening strong tag. + * %2$s expands to a closing strong tag. + * %3$s expands to the recommended image size. + */ +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","1200x675px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})})),[]),x=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %s expands to /category/ */ +(0,Ps.__)("Category URLs in WordPress contain a prefix, usually %s. Show or hide that prefix in category URLs.","wordpress-seo"),""),{code:(0,e.createElement)(l.Code,null,"/category/")})),[]),k=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s and %2$s expand to post type plurals in code blocks, e.g. Posts Pages and Custom Post Type. + */ +(0,Ps.__)("This taxonomy is used for %1$s and %2$s.","wordpress-seo"),"",""),{code1:(0,e.createElement)(e.Fragment,null,(0,le.map)(g,((t,s)=>(0,e.createElement)(e.Fragment,null,(0,e.createElement)(l.Code,{key:null==t?void 0:t.name},null==t?void 0:t.label),s(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to the post type plural in code block, e.g. Posts. + */ +(0,Ps.__)("This taxonomy is used for %2$s.","wordpress-seo"),s,""),{code:(0,e.createElement)(l.Code,null,null==b?void 0:b.label)})),[s,b]),{values:L}=q(),{opengraph:T}=L.wpseo_social,F=(0,i.useMemo)((()=>g.length>1?k:S),[g,k,S]),$=(0,i.useCallback)((()=>a&&(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:`wpseo_titles.display-metabox-tax-${t}`,id:`input-wpseo_titles-display-metabox-tax-${t}`,label:(0,Ps.__)("Enable SEO controls and assessments","wordpress-seo"),description:(0,Ps.__)("Show or hide our tools and controls in the content editor.","wordpress-seo"),className:"yst-max-w-sm"})),[a,t]),P=(0,i.useCallback)((()=>"category"===t&&(0,e.createElement)(Zs,{name:"wpseo_titles.stripcategorybase",id:"input-wpseo_titles-stripcategorybase",label:(0,Ps.__)("Show the categories prefix in the slug","wordpress-seo"),description:x,className:"yst-max-w-sm"})),[t,x]),I=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to the name of the taxonomy. + */ +(0,Ps.__)("The name of this category is %1$s.","wordpress-seo"),""),{link:(0,e.createElement)(l.Link,{href:`${h}?taxonomy=${t}`},t)})),[t]);return(0,e.createElement)(Zr,{title:s,description:(0,e.createElement)(e.Fragment,null,(0,Ps.sprintf)(/* translators: %1$s expands to the taxonomy plural, e.g. categories. */ +(0,Ps.__)("Determine how your %1$s should look in search engines and on social media.","wordpress-seo"),_),(0,e.createElement)("br",null),(0,le.isEmpty)(w)?I:F)},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to the post type plural, e.g. Posts. %2$s expands to "Yoast SEO". +(0,Ps.__)("Determine what your %1$s should look like in the search results by default. You can always customize the settings for individual %1$s in the %2$s metabox.","wordpress-seo"),_,"Yoast SEO")},(0,e.createElement)(Zs,{name:`wpseo_titles.noindex-tax-${t}`,id:`input-wpseo_titles-noindex-tax-${t}`,label:(0,Ps.sprintf)( +// translators: %1$s expands to the taxonomy plural, e.g. Categories. +(0,Ps.__)("Show %1$s in search results","wordpress-seo"),_),description:(0,e.createElement)(e.Fragment,null,(0,Ps.sprintf)( +// translators: %1$s expands to the taxonomy plural, e.g. Categories. +(0,Ps.__)("Disabling this means that archive pages for %1$s will not be indexed by search engines and will be excluded from XML sitemaps.","wordpress-seo"),_)," ",(0,e.createElement)(l.Link,{href:p,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about the search results settings","wordpress-seo")),"."),className:"yst-max-w-sm"}),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(rr,{type:"title",name:`wpseo_titles.title-tax-${t}`,fieldId:`input-wpseo_titles-title-tax-${t}`,label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u}),(0,e.createElement)(rr,{type:"description",name:`wpseo_titles.metadesc-tax-${t}`,fieldId:`input-wpseo_titles-metadesc-tax-${t}`,label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)("div",{className:"yst-flex yst-items-center yst-gap-1.5"},(0,e.createElement)("span",null,(0,Ps.__)("Social media appearance","wordpress-seo")),m&&(0,e.createElement)(l.Badge,{variant:"upsell"},"Premium")),description:(0,Ps.sprintf)( +// translators: %1$s expands to the taxonomy plural, e.g. Categories. %2$s expand to Yoast SEO. +(0,Ps.__)("Determine how your %1$s should look on social media by default. You can always customize the settings for individual %1$s in the %2$s metabox.","wordpress-seo"),_,"Yoast SEO")},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!m,variant:"card",cardLink:y,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...c},(0,e.createElement)(Pr,{isEnabled:!m||T}),(0,e.createElement)(er,{id:`wpseo_titles-social-image-tax-${t}`,label:(0,Ps.__)("Social image","wordpress-seo"),previewLabel:E,mediaUrlName:`wpseo_titles.social-image-url-tax-${t}`,mediaIdName:`wpseo_titles.social-image-id-tax-${t}`,disabled:!T,isDummy:!m}),(0,e.createElement)(Ri,{type:"title",name:`wpseo_titles.social-title-tax-${t}`,fieldId:`input-wpseo_titles-social-title-tax-${t}`,label:(0,Ps.__)("Social title","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u,disabled:!T,isDummy:!m}),(0,e.createElement)(Ri,{type:"description",name:`wpseo_titles.social-description-tax-${t}`,fieldId:`input-wpseo_titles-social-description-tax-${t}`,label:(0,Ps.__)("Social description","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u,className:"yst-replacevar--description",disabled:!T,isDummy:!m}))),(a||"category"===t)&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Additional settings","wordpress-seo")},$(),P())))))};Ni.propTypes={name:Os().string.isRequired,label:Os().string.isRequired,postTypes:Os().arrayOf(Os().string).isRequired,showUi:Os().bool.isRequired,isNew:Os().bool.isRequired};const Oi=Ni,Mi=br(rr),Ai=()=>{const t=(0,Ps.__)("Author archives","wordpress-seo"),s=(0,Ps.__)("Author archive","wordpress-seo"),r=zs("selectPreference",[],"userLocale"),a=(0,i.useMemo)((()=>so(t,r)),[t,r]),o=(0,i.useMemo)((()=>so(s,r)),[s,r]),n=zs("selectUpsellSettingsAsProps"),c=zs("selectReplacementVariablesFor",[],"author_archives","custom-post-type_archive"),d=zs("selectRecommendedReplacementVariablesFor",[],"author_archives","custom-post-type_archive"),u=zs("selectLink",[],"https://yoa.st/duplicate-content"),p=zs("selectLink",[],"https://yoa.st/show-x"),m=zs("selectPreference",[],"isPremium"),f=zs("selectExampleUrl",[],"/author/example/"),h=zs("selectLink",[],"https://yoa.st/4e0"),y=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening strong tag. + * %2$s expands to a closing strong tag. + * %3$s expands to the recommended image size. + */ +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","1200x675px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})})),[]),_=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to "author archive". + * %2$s expands to an example URL, e.g. https://example.com/author/example/. + * %3$s and %4$s expand to opening and closing tags. + */ +(0,Ps.__)("If you're running a one author blog, the %1$s (e.g. %2$s) will be exactly the same as your homepage. This is what's called a %3$sduplicate content problem%4$s. If this is the case on your site, you can choose to either disable it (which makes it redirect to the homepage), or prevent it from showing up in search results.","wordpress-seo"),o,"","",""),{exampleUrl:(0,e.createElement)(l.Code,null,f),a:(0,e.createElement)("a",{href:u,target:"_blank",rel:"noopener"})})),[]),{values:w}=q(),{opengraph:g}=w.wpseo_social,{"disable-author":b,"noindex-author-wpseo":v,"noindex-author-noposts-wpseo":E}=w.wpseo_titles;return(0,e.createElement)(Zr,{title:t,description:_},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(Zs,{name:"wpseo_titles.disable-author",id:"input-wpseo_titles-disable-author",label:(0,Ps.sprintf)( +// translators: %1$s expands to "author archives". +(0,Ps.__)("Enable %1$s","wordpress-seo"),a),description:(0,Ps.sprintf)( +// translators: %1$s expands to "author archive". +(0,Ps.__)("Disabling this will redirect the %1$s to your site's homepage.","wordpress-seo"),o),className:"yst-max-w-sm"}),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to "author archives". +(0,Ps.__)("Determine how your %1$s should look in search engines.","wordpress-seo"),a)},(0,e.createElement)(Zs,{name:"wpseo_titles.noindex-author-wpseo",id:"input-wpseo_titles-noindex-author-wpseo",label:(0,Ps.sprintf)( +// translators: %1$s expands to "author archives". +(0,Ps.__)("Show %1$s in search results","wordpress-seo"),a),description:(0,e.createElement)(e.Fragment,null,(0,Ps.sprintf)( +// translators: %1$s expands to "author archives". +(0,Ps.__)("Disabling this means that %1$s will not be indexed by search engines and will be excluded from XML sitemaps.","wordpress-seo"),a)," ",(0,e.createElement)(l.Link,{href:p,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about the search results settings","wordpress-seo")),"."),disabled:b,checked:!b&&!v,className:"yst-max-w-sm"}),(0,e.createElement)(Zs,{name:"wpseo_titles.noindex-author-noposts-wpseo",id:"input-wpseo_titles-noindex-author-noposts-wpseo",label:(0,Ps.sprintf)( +// translators: %1$s expands to "author archives". +(0,Ps.__)("Show %1$s without posts in search results","wordpress-seo"),a),description:(0,Ps.sprintf)( +// translators: %1$s expands to "author archives". +(0,Ps.__)("Disabling this means that %1$s without any posts will not be indexed by search engines and will be excluded from XML sitemaps.","wordpress-seo"),a),checked:!b&&!v&&!E,disabled:b||v,className:"yst-max-w-sm"}),(0,e.createElement)(rr,{type:"title",name:"wpseo_titles.title-author-wpseo",fieldId:"input-wpseo_titles-title-author-wpseo",label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:d,disabled:b}),(0,e.createElement)(rr,{type:"description",name:"wpseo_titles.metadesc-author-wpseo",fieldId:"input-wpseo_titles-metadesc-author-wpseo",label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:d,disabled:b,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)("div",{className:"yst-flex yst-items-center yst-gap-1.5"},(0,e.createElement)("span",null,(0,Ps.__)("Social media appearance","wordpress-seo")),m&&(0,e.createElement)(l.Badge,{variant:"upsell"},"Premium")),description:(0,Ps.sprintf)( +// translators: %1$s expands to "author archives". +(0,Ps.__)("Determine how your %1$s should look on social media.","wordpress-seo"),a)},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!m,variant:"card",cardLink:h,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...n},(0,e.createElement)(Pr,{isEnabled:!m||g}),(0,e.createElement)(er,{id:"wpseo_titles-social-image-author-wpseo",label:(0,Ps.__)("Social image","wordpress-seo"),previewLabel:y,mediaUrlName:"wpseo_titles.social-image-url-author-wpseo",mediaIdName:"wpseo_titles.social-image-id-author-wpseo",disabled:b||!g,isDummy:!m}),(0,e.createElement)(Mi,{type:"title",name:"wpseo_titles.social-title-author-wpseo",fieldId:"input-wpseo_titles-social-title-author-wpseo",label:(0,Ps.__)("Social title","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:d,disabled:b||!g,isDummy:!m}),(0,e.createElement)(Mi,{type:"description",name:"wpseo_titles.social-description-author-wpseo",fieldId:"input-wpseo_titles-social-description-author-wpseo",label:(0,Ps.__)("Social description","wordpress-seo"),replacementVariables:c,recommendedReplacementVariables:d,className:"yst-replacevar--description",disabled:b||!g,isDummy:!m}))))))},Ci=()=>{const t=zs("selectLink",[],"https://yoa.st/header-breadcrumbs"),s=zs("selectLink",[],"https://yoa.st/breadcrumbs"),r=zs("selectBreadcrumbsForPostTypes"),a=zs("selectBreadcrumbsForTaxonomies"),o=zs("selectHasPageForPosts");return(0,e.createElement)(Zr,{title:(0,Ps.__)("Breadcrumbs","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("Configure the appearance and behavior of %1$syour breadcrumbs%2$s.","wordpress-seo"),"",""),t,"link-header-breadcrumbs")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("Breadcrumb appearance","wordpress-seo"),description:(0,Ps.__)("Choose the general appearance of your breadcrumbs.","wordpress-seo")},(0,e.createElement)(te,{as:l.TextField,type:"text",name:"wpseo_titles.breadcrumbs-sep",id:"input-wpseo_titles-breadcrumbs-sep",label:(0,Ps.__)("Separator between breadcrumbs","wordpress-seo"),placeholder:(0,Ps.__)("Add separator","wordpress-seo")}),(0,e.createElement)(te,{as:l.TextField,type:"text",name:"wpseo_titles.breadcrumbs-home",id:"input-wpseo_titles-breadcrumbs-home",label:(0,Ps.__)("Anchor text for the Homepage","wordpress-seo"),placeholder:(0,Ps.__)("Add anchor text","wordpress-seo")}),(0,e.createElement)(te,{as:l.TextField,type:"text",name:"wpseo_titles.breadcrumbs-prefix",id:"input-wpseo_titles-breadcrumbs-prefix",label:(0,Ps.__)("Prefix for the breadcrumb path","wordpress-seo"),placeholder:(0,Ps.__)("Add prefix","wordpress-seo")}),(0,e.createElement)(te,{as:l.TextField,type:"text",name:"wpseo_titles.breadcrumbs-archiveprefix",id:"input-wpseo_titles-breadcrumbs-archiveprefix",label:(0,Ps.__)("Prefix for archive breadcrumbs","wordpress-seo"),placeholder:(0,Ps.__)("Add prefix","wordpress-seo")}),(0,e.createElement)(te,{as:l.TextField,type:"text",name:"wpseo_titles.breadcrumbs-searchprefix",id:"input-wpseo_titles-breadcrumbs-searchprefix",label:(0,Ps.__)("Prefix for search page breadcrumbs","wordpress-seo"),placeholder:(0,Ps.__)("Add prefix","wordpress-seo")}),(0,e.createElement)(te,{as:l.TextField,type:"text",name:"wpseo_titles.breadcrumbs-404crumb",id:"input-wpseo_titles-breadcrumbs-404crumb",label:(0,Ps.__)("Breadcrumb for 404 page","wordpress-seo"),placeholder:(0,Ps.__)("Add separator","wordpress-seo")}),o&&(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:"wpseo_titles.breadcrumbs-display-blog-page",id:"input-wpseo_titles-breadcrumbs-display-blog-page",label:(0,Ps.__)("Show blog page in breadcrumbs","wordpress-seo"),className:"yst-max-w-sm"}),(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:"wpseo_titles.breadcrumbs-boldlast",id:"input-wpseo_titles-breadcrumbs-boldlast",label:(0,Ps.__)("Bold the last page","wordpress-seo"),className:"yst-max-w-sm"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Breadcrumbs for post types","wordpress-seo"),description:(0,Ps.__)("Choose which Taxonomy you wish to show in the breadcrumbs for Post types.","wordpress-seo")},(0,le.map)(r,((t,s)=>(0,e.createElement)(yr,{key:s,as:l.SelectField,name:`wpseo_titles.post_types-${s}-maintax`,id:`input-wpseo_titles-post_types-${s}-maintax`,label:t.label,labelSuffix:(0,e.createElement)(l.Code,{className:"yst-ml-2"},s),options:t.options,className:"yst-max-w-sm"})))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Breadcrumbs for taxonomies","wordpress-seo"),description:(0,Ps.__)("Choose which Post type you wish to show in the breadcrumbs for Taxonomies.","wordpress-seo")},(0,le.map)(a,(t=>(0,e.createElement)(yr,{key:t.name,as:l.SelectField,name:`wpseo_titles.taxonomy-${t.name}-ptparent`,id:`input-wpseo_titles-taxonomy-${t.name}-ptparent`,label:t.label,options:t.options,className:"yst-max-w-sm",labelSuffix:(0,e.createElement)(l.Code,{className:"yst-ml-2"},t.name)})))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("How to insert breadcrumbs in your theme","wordpress-seo")},(0,e.createElement)("p",null,Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. %3$s expands to "Yoast SEO". +(0,Ps.__)("Not sure how to implement the %3$s breadcrumbs on your site? Read %1$sour help article on breadcrumbs implementation%2$s.","wordpress-seo"),"","","Yoast SEO"),s,"link-breadcrumbs-help-article")),(0,e.createElement)("p",null,(0,Ps.__)("You can always choose to enable/disable them for your theme below. This setting will not apply to breadcrumbs inserted through a widget, a block or a shortcode.","wordpress-seo")),(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:"wpseo_titles.breadcrumbs-enable",id:"input-wpseo_titles-breadcrumbs-enable",label:(0,Ps.__)("Enable breadcrumbs for your theme","wordpress-seo"),className:"yst-max-w-sm"})))))},Di=Er(te),Bi=gr(yr),Vi=vr(Bi),ji=()=>{const t=zs("selectPreference",[],"isPremium",!1),s=zs("selectPreference",[],"isMultisite",!1),r=zs("selectUpsellSettingsAsProps"),a=zs("selectLink",[],"https://yoa.st/crawl-settings"),o=zs("selectLink",[],"https://yoa.st/permalink-cleanup"),n=zs("selectLink",[],"https://yoa.st/block-unwanted-bots-info"),c=zs("selectLink",[],"https://yoa.st/block-unwanted-bots-upsell"),d=(0,i.useMemo)((()=>(0,Ps.sprintf)(/* translators: %1$s expands to an example within a code tag. */ +(0,Ps.__)("E.g., %1$s","wordpress-seo"),"")),[]),u=(0,i.useMemo)((()=>(0,Ps.sprintf)(/* translators: %1$s and %2$s both expand to an example within a code tag. */ +(0,Ps.__)("E.g., %1$s and %2$s","wordpress-seo"),"","")),[]),p=(0,i.useMemo)((()=>({page:(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s and %2$s are replaced by opening and closing tags. */ +(0,Ps.__)("Make your site more efficient and more environmentally friendly by preventing search engines from crawling things they don’t need to, and by removing unused WordPress features. %1$sLearn more about crawl settings and how they could benefit your site%2$s.","wordpress-seo"),"",""),{a:(0,e.createElement)("a",{id:"link-crawl-settings-info",href:a,target:"_blank",rel:"noopener noreferrer"})}),removeUnwantedMetadata:(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to `` within a tag. */ +(0,Ps.__)("WordPress adds a lot of links and content to your site's %1$s and HTTP headers. For most websites you can safely disable all of these, which can help to save bytes, electricity, and trees.","wordpress-seo"),""),{code:(0,e.createElement)(l.Code,null,"")}),removeShortlinks:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeRestApiLinks:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeRsdWlwLinks:(0,i.createInterpolateElement)(u,{code1:(0,e.createElement)(l.Code,{variant:"block"},''),code2:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeOembedLinks:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeGenerator:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removePingbackHeader:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},"X-Pingback: https://www.example.com/xmlrpc.php")}),removePoweredByHeader:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},"X-Powered-By: PHP/7.4.1")}),removeFeedGlobal:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedGlobalComments:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedPostComments:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedAuthors:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedPostTypes:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedCategories:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedTags:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedCustomTaxonomies:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeFeedSearch:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),removeAtomRdfFeeds:(0,i.createInterpolateElement)(d,{code:(0,e.createElement)(l.Code,{variant:"block"},'')}),denyWpJsonCrawling:(0,i.createInterpolateElement)(u,{code1:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com/wp-json/"),code2:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com/?rest_route=/")}),blockUnwantedBots:(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("Lots of web traffic comes from bots crawling the web. Some can benefit your site or business, while other bots don’t. Blocking unwanted bots can save energy, help with site performance, and protect copyrighted content. Learn more about %1$swhen to block unwanted bots%2$s.","wordpress-seo"),"",""),{a:(0,e.createElement)(Gn,{id:"link-block-unwanted-bots-info",href:n})}),redirectSearchPrettyUrls:(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s, %2$s and %3$s expand to example parts of a URL, surrounded by tags. */ +(0,Ps.__)("Consolidates WordPress' multiple site search URL formats into the %1$s syntax. E.g., %2$s will redirect to %3$s","wordpress-seo"),"","",""),{code1:(0,e.createElement)(l.Code,null,"?s="),code2:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com/search/cats"),code3:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com/?s=cats")}),denySearchCrawling:(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s, %2$s and %3$s expand to example parts of a URL, surrounded by tags. */ +(0,Ps.__)("Add a ‘disallow’ rule to your robots.txt file to prevent crawling of URLs like %1$s, %2$s and %3$s.","wordpress-seo"),"","",""),{code1:(0,e.createElement)(l.Code,null,"?s="),code2:(0,e.createElement)(l.Code,null,"/search/"),code3:(0,e.createElement)(l.Code,null,"/page/*/?s=")}),advancedUrlCleanup:(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to an example part of a URL, surrounded by a tag. */ +(0,Ps.__)("Users and search engines may often request your URLs whilst using query parameters, like %1$s. These can be helpful for tracking, filtering, and powering advanced functionality - but they come with a performance and SEO ‘cost’. Sites which don’t rely on URL parameters might benefit from using these options.","wordpress-seo"),""),{code:(0,e.createElement)(l.Code,null,"?color=red")}),cleanCampaignTrackingUrls:(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: + * %1$s expands to `utm`. + * %2$s expands to `#`. + * %3$s expands to `301`. + * %4$s and %5$s both expand to an example within a tag. + */ +(0,Ps.__)("Replaces %1$s tracking parameters with the (more performant) %2$s equivalent, via a %3$s redirect. E.g., %4$s will be redirected to %5$s","wordpress-seo"),"","","","",""),{code1:(0,e.createElement)(l.Code,null,"utm"),code2:(0,e.createElement)(l.Code,null,"#"),code3:(0,e.createElement)(l.Code,null,"301"),code4:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com/?utm_medium=organic"),code5:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com/#utm_medium=organic")}),cleanPermalinks:(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: + * %1$s expands to `301`. + * %2$s and %3$s both expand to an example within a tag. + */ +(0,Ps.__)("Removes unknown URL parameters via a %1$s redirect. E.g., %2$s will be redirected to %3$s","wordpress-seo"),"","","")+(0,Ps.sprintf)( +/** + * translators: + * %1$s through %7$s each expand to a parameter name within a tag. For example, gclid. + */ +(0,Ps.__)("Note that the following commonly-used parameters will not be removed: %1$s, %2$s, %3$s, %4$s, %5$s, %6$s, and %7$s.","wordpress-seo"),"","","","","","",""),{code1:(0,e.createElement)(l.Code,null,"301"),code2:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com/?unknown_parameter=yes"),code3:(0,e.createElement)(l.Code,{variant:"block"},"https://www.example.com"),code4:(0,e.createElement)(l.Code,null,"gclid"),code5:(0,e.createElement)(l.Code,null,"gtm_debug"),code6:(0,e.createElement)(l.Code,null,"utm_campaign"),code7:(0,e.createElement)(l.Code,null,"utm_content"),code8:(0,e.createElement)(l.Code,null,"utm_medium"),code9:(0,e.createElement)(l.Code,null,"utm_source"),code10:(0,e.createElement)(l.Code,null,"utm_term")}),cleanPermalinksExtraVariables:(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: + * %1$s expands to `unknown_parameter`. + * %2$s and %3$s both expand to an example within a tag. + */ +(0,Ps.__)("Prevents specific URL parameters from being removed by the above feature. E.g., adding %1$s will prevent %2$s from being redirected to %3$s. You can add multiple parameters and separate them by using enter or a comma.","wordpress-seo"),"","",""),{code1:(0,e.createElement)(l.Code,null,"unknown_parameter"),code2:(0,e.createElement)(l.Code,null,"https://www.example.com/?unknown_parameter=yes"),code3:(0,e.createElement)(l.Code,null,"https://www.example.com")})})),[]),{values:m}=q(),{remove_feed_global_comments:f,remove_feed_post_comments:h,search_cleanup:y,search_cleanup_emoji:_,search_cleanup_patterns:w,clean_permalinks:g}=m.wpseo;return(0,e.createElement)(Zr,{title:(0,Ps.__)("Crawl optimization","wordpress-seo"),description:p.page},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("Remove unwanted metadata","wordpress-seo"),description:p.removeUnwantedMetadata},(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_shortlinks",id:"input-wpseo-remove_shortlinks",label:(0,Ps.__)("Remove shortlinks","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove links to WordPress' internal 'shortlink' URLs for your posts.","wordpress-seo")," ",p.removeShortlinks),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_rest_api_links",id:"input-wpseo-remove_rest_api_links",label:(0,Ps.__)("Remove REST API links","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove links to the location of your site’s REST API endpoints.","wordpress-seo")," ",p.removeRestApiLinks),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_rsd_wlw_links",id:"input-wpseo-remove_rsd_wlw_links",label:(0,Ps.__)("Remove RSD / WLW links","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove links used by external systems for publishing content to your blog.","wordpress-seo")," ",p.removeRsdWlwLinks),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_oembed_links",id:"input-wpseo-remove_oembed_links",label:(0,Ps.__)("Remove oEmbed links","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove links used for embedding your content on other sites.","wordpress-seo")," ",p.removeOembedLinks),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_generator",id:"input-wpseo-remove_generator",label:(0,Ps.__)("Remove generator tag","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove information about the plugins and software used by your site.","wordpress-seo")," ",p.removeGenerator),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_pingback_header",id:"input-wpseo-remove_pingback_header",label:(0,Ps.__)("Pingback HTTP header","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove links which allow others sites to ‘ping’ yours when they link to you.","wordpress-seo")," ",p.removePingbackHeader),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_powered_by_header",id:"input-wpseo-remove_powered_by_header",label:(0,Ps.__)("Remove powered by HTTP header","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove information about the plugins and software used by your site.","wordpress-seo")," ",p.removePoweredByHeader)),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Disable unwanted content formats","wordpress-seo"),description:(0,Ps.__)("WordPress outputs your content in many different formats, across many different URLs (like RSS feeds of your posts and categories). It’s generally good practice to disable the formats you’re not actively using.","wordpress-seo")},(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_global",id:"input-wpseo-remove_feed_global",label:(0,Ps.__)("Remove global feed","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide an overview of your recent posts.","wordpress-seo")," ",p.removeFeedGlobal),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_global_comments",id:"input-wpseo-remove_feed_global_comments",label:(0,Ps.__)("Remove global comment feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide an overview of recent comments on your site.","wordpress-seo")," ",p.removeFeedGlobalComments,(0,Ps.__)("Also disables post comment feeds.","wordpress-seo")),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_post_comments",id:"input-wpseo-remove_feed_post_comments",label:(0,Ps.__)("Remove post comments feeds","wordpress-seo"),disabled:f,checked:f||h,className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide information about recent comments on each post.","wordpress-seo")," ",p.removeFeedPostComments),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_authors",id:"input-wpseo-remove_feed_authors",label:(0,Ps.__)("Remove post authors feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide information about recent posts by specific authors.","wordpress-seo")," ",p.removeFeedAuthors),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_post_types",id:"input-wpseo-remove_feed_post_types",label:(0,Ps.__)("Remove post type feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide information about your recent posts, for each post type.","wordpress-seo")," ",p.removeFeedPostTypes),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_categories",id:"input-wpseo-remove_feed_categories",label:(0,Ps.__)("Remove category feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide information about your recent posts, for each category.","wordpress-seo")," ",p.removeFeedCategories),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_tags",id:"input-wpseo-remove_feed_tags",label:(0,Ps.__)("Remove tag feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide information about your recent posts, for each tag.","wordpress-seo")," ",p.removeFeedTags),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_custom_taxonomies",id:"input-wpseo-remove_feed_custom_taxonomies",label:(0,Ps.__)("Remove custom taxonomy feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide information about your recent posts, for each custom taxonomy.","wordpress-seo")," ",p.removeFeedCustomTaxonomies),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_feed_search",id:"input-wpseo-remove_feed_search",label:(0,Ps.__)("Remove search results feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide information about your search results.","wordpress-seo")," ",p.removeFeedSearch),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_atom_rdf_feeds",id:"input-wpseo-remove_atom_rdf_feeds",label:(0,Ps.__)("Remove Atom / RDF feeds","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Remove URLs which provide alternative (legacy) formats of all of the above.","wordpress-seo")," ",p.removeAtomRdfFeeds)),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Remove unused resources","wordpress-seo"),description:(0,Ps.__)("WordPress loads lots of resources, some of which your site might not need. If you’re not using these, removing them can speed up your pages and save resources.","wordpress-seo")},(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.remove_emoji_scripts",id:"input-wpseo-remove_emoji_scripts",label:(0,Ps.__)("Remove emoji scripts","wordpress-seo"),description:(0,Ps.__)("Remove JavaScript used for converting emoji characters in older browsers.","wordpress-seo"),className:"yst-max-w-2xl"}),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.deny_wp_json_crawling",id:"input-wpseo-deny_wp_json_crawling",label:(0,Ps.__)("Remove WP-JSON API","wordpress-seo"),className:"yst-max-w-2xl"},(0,Ps.__)("Add a ‘disallow’ rule to your robots.txt file to prevent crawling of WordPress' JSON API endpoints.","wordpress-seo")," ",p.denyWpJsonCrawling)),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Block unwanted bots","wordpress-seo"),description:p.blockUnwantedBots},(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.deny_adsbot_crawling",id:"input-wpseo-deny_adsbot_crawling",label:(0,Ps.__)("Prevent Google AdsBot from crawling","wordpress-seo"),description:(0,Ps.__)("Add a ‘disallow’ rule to your robots.txt file to prevent crawling by Google AdsBot. You should only enable this setting if you're not using Google Ads on your site.","wordpress-seo"),className:"yst-max-w-2xl"}),(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!s&&!t,variant:"card",cardLink:c,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...r},(0,e.createElement)(Vi,{as:l.ToggleField,type:"checkbox",name:"wpseo.deny_google_extended_crawling",id:"input-wpseo-deny_google_extended_crawling",label:(0,Ps.__)("Prevent Google Bard and Vertex AI bots from crawling","wordpress-seo"),description:(0,Ps.__)("Add a ‘disallow’ rule to your robots.txt file to prevent crawling by the Google-Extended bot. Enabling this setting won’t prevent Google from indexing your website.","wordpress-seo"),labelSuffix:t&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium"),className:"yst-max-w-2xl",isDummy:!t}),(0,e.createElement)(Vi,{as:l.ToggleField,type:"checkbox",name:"wpseo.deny_gptbot_crawling",id:"input-wpseo-deny_gptbot_crawling",label:(0,Ps.__)("Prevent OpenAI GPTBot from crawling","wordpress-seo"),description:(0,Ps.__)("Add a ‘disallow’ rule to your robots.txt file to prevent crawling by OpenAI GPTBot.","wordpress-seo"),labelSuffix:t&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium"),className:"yst-max-w-2xl",isDummy:!t}),(0,e.createElement)(Vi,{as:l.ToggleField,type:"checkbox",name:"wpseo.deny_ccbot_crawling",id:"input-wpseo-deny_ccbot_crawling",label:(0,Ps.__)("Prevent Common Crawl CCBot from crawling","wordpress-seo"),description:(0,Ps.__)("Add a ‘disallow’ rule to your robots.txt file to prevent crawling by Common Crawl CCBot.","wordpress-seo"),labelSuffix:t&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium"),className:"yst-max-w-2xl",isDummy:!t}))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Internal site search cleanup","wordpress-seo"),description:(0,Ps.__)("Your internal site search can create lots of confusing URLs for search engines, and can even be used as a way for SEO spammers to attack your site. Most sites will benefit from experimenting with these protections and optimizations, even if you don’t have a search feature in your theme.","wordpress-seo")},(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.search_cleanup",id:"input-wpseo-search_cleanup",label:(0,Ps.__)("Filter search terms","wordpress-seo"),description:(0,Ps.__)("Enables advanced settings for protecting your internal site search URLs.","wordpress-seo"),className:"yst-max-w-2xl"}),(0,e.createElement)(Di,{as:l.TextField,type:"number",name:"wpseo.search_character_limit",id:"input-wpseo-search_character_limit",label:(0,Ps.__)("Max number of characters to allow in searches","wordpress-seo"),description:(0,Ps.__)("Limit the length of internal site search queries to reduce the impact of spam attacks and confusing URLs. Please enter a number between 1 and 50.","wordpress-seo"),disabled:!y}),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.search_cleanup_emoji",id:"input-wpseo-search_cleanup_emoji",label:(0,Ps.__)("Filter searches with emojis and other special characters","wordpress-seo"),description:(0,Ps.__)("Block internal site searches which contain complex and non-alphanumeric characters, as they may be part of a spam attack.","wordpress-seo"),disabled:!y,checked:y&&_,className:"yst-max-w-2xl"}),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.search_cleanup_patterns",id:"input-wpseo-search_cleanup_patterns",label:(0,Ps.__)("Filter searches with common spam patterns","wordpress-seo"),description:(0,Ps.__)("Block internal site searches which match the patterns of known spam attacks.","wordpress-seo"),disabled:!y,checked:y&&w,className:"yst-max-w-2xl"}),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.redirect_search_pretty_urls",id:"input-wpseo-redirect_search_pretty_urls",label:(0,Ps.__)("Redirect pretty URLs to ‘raw’ formats","wordpress-seo"),description:p.redirectSearchPrettyUrls,className:"yst-max-w-2xl"}),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.deny_search_crawling",id:"input-wpseo-deny_search_crawling",label:(0,Ps.__)("Prevent crawling of internal site search URLs","wordpress-seo"),description:p.denySearchCrawling,className:"yst-max-w-2xl"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Advanced: URL cleanup","wordpress-seo"),description:p.advancedUrlCleanup},(0,e.createElement)(l.Alert,{id:"alert-permalink-cleanup-settings",variant:"error"},(0,i.createInterpolateElement)((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("Warning! These are expert features, so make sure you know what you're doing before using this setting. You might break your site. %1$sRead more about how your site can be affected%2$s.","wordpress-seo"),"",""),{a:(0,e.createElement)("a",{id:"link-permalink-cleanup-info",href:o,target:"_blank",rel:"noopener noreferrer"})})),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.clean_campaign_tracking_urls",id:"input-wpseo-clean_campaign_tracking_urls",label:(0,Ps.__)("Optimize Google Analytics utm tracking parameters","wordpress-seo"),description:p.cleanCampaignTrackingUrls,className:"yst-max-w-2xl"}),(0,e.createElement)(Bi,{as:l.ToggleField,type:"checkbox",name:"wpseo.clean_permalinks",id:"input-wpseo-clean_permalinks",label:(0,Ps.__)("Remove unregistered URL parameters","wordpress-seo"),description:p.cleanPermalinks,className:"yst-max-w-2xl"}),(0,e.createElement)(or,{name:"wpseo.clean_permalinks_extra_variables",id:"input-wpseo-clean_permalinks_extra_variables",label:(0,Ps.__)("Additional URL parameters to allow","wordpress-seo"),description:p.cleanPermalinksExtraVariables,disabled:!g})))))},zi=br(rr),Ui=()=>{const t=(0,Ps.__)("Date archives","wordpress-seo"),s=zs("selectPreference",[],"userLocale"),r=(0,i.useMemo)((()=>so(t,s)),[t,s]),a=zs("selectUpsellSettingsAsProps"),o=zs("selectReplacementVariablesFor",[],"date_archive","custom-post-type_archive"),n=zs("selectRecommendedReplacementVariablesFor",[],"date_archive","custom-post-type_archive"),c=zs("selectLink",[],"https://yoa.st/show-x"),d=zs("selectPreference",[],"isPremium"),u=zs("selectLink",[],"https://yoa.st/4e0"),p=zs("selectExampleUrl",[],"/2020/"),m=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening strong tag. + * %2$s expands to a closing strong tag. + * %3$s expands to the recommended image size. + */ +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","1200x675px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})})),[]),f=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to "Date archives". + * %2$s expands to an example URL, e.g. https://example.com/author/example/. + * %3$s expands to "date archives". + */ +(0,Ps.__)("%1$s (e.g. %2$s) are based on publication dates. From an SEO perspective, the posts in these archives have no real relation to the other posts except for their publication dates, which doesn’t say much about the content. They could also lead to duplicate content issues. This is why we recommend you to disable %3$s.","wordpress-seo"),t,"",r),{exampleUrl:(0,e.createElement)(l.Code,null,p)}))),{values:h}=q(),{opengraph:y}=h.wpseo_social,{"disable-date":_,"noindex-archive-wpseo":w}=h.wpseo_titles;return(0,e.createElement)(Zr,{title:t,description:f},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)("fieldset",{className:"yst-min-width-0 yst-space-y-8"},(0,e.createElement)(Zs,{name:"wpseo_titles.disable-date",id:"input-wpseo_titles-disable-date",label:(0,Ps.sprintf)( +// translators: %1$s expands to "date archives". +(0,Ps.__)("Enable %1$s","wordpress-seo"),r),description:(0,Ps.sprintf)( +// translators: %1$s expands to "Date archives". +(0,Ps.__)("%1$s can cause duplicate content issues. For most sites, we recommend that you disable this setting.","wordpress-seo"),t),className:"yst-max-w-sm"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to "date archives". +(0,Ps.__)("Determine how your %1$s should look in search engines.","wordpress-seo"),r)},(0,e.createElement)(Zs,{name:"wpseo_titles.noindex-archive-wpseo",id:"input-wpseo_titles-noindex-archive-wpseo",label:(0,Ps.sprintf)( +// translators: %1$s expands to "date archives". +(0,Ps.__)("Show %1$s in search results","wordpress-seo"),r),description:(0,e.createElement)(e.Fragment,null,(0,Ps.sprintf)( +// translators: %1$s expands to "date archives". +(0,Ps.__)("Disabling this means that %1$s will not be indexed by search engines and will be excluded from XML sitemaps. We recommend that you disable this setting.","wordpress-seo"),r)," ",(0,e.createElement)(l.Link,{href:c,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about the search results settings","wordpress-seo")),"."),disabled:_,checked:!_&&!w,className:"yst-max-w-sm"}),(0,e.createElement)(rr,{type:"title",name:"wpseo_titles.title-archive-wpseo",fieldId:"input-wpseo_titles-title-archive-wpseo",label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:o,recommendedReplacementVariables:n,disabled:_}),(0,e.createElement)(rr,{type:"description",name:"wpseo_titles.metadesc-archive-wpseo",fieldId:"input-wpseo_titles-metadesc-archive-wpseo",label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:o,recommendedReplacementVariables:n,disabled:_,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)("div",{className:"yst-flex yst-items-center yst-gap-1.5"},(0,e.createElement)("span",null,(0,Ps.__)("Social media appearance","wordpress-seo")),d&&(0,e.createElement)(l.Badge,{variant:"upsell"},"Premium")),description:(0,Ps.sprintf)( +// translators: %1$s expands to "date archives". +(0,Ps.__)("Determine how your %1$s should look on social media by default.","wordpress-seo"),r)},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!d,variant:"card",cardLink:u,cardText:(0,Ps.sprintf)( +// translators: %1$s expands to Premium. +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...a},(0,e.createElement)(Pr,{isEnabled:!d||y}),(0,e.createElement)(er,{id:"wpseo_titles-social-image-archive-wpseo",label:(0,Ps.__)("Social image","wordpress-seo"),previewLabel:m,mediaUrlName:"wpseo_titles.social-image-url-archive-wpseo",mediaIdName:"wpseo_titles.social-image-id-archive-wpseo",disabled:_||!y,isDummy:!d}),(0,e.createElement)(zi,{type:"title",name:"wpseo_titles.social-title-archive-wpseo",fieldId:"input-wpseo_titles-social-title-archive-wpseo",label:(0,Ps.__)("Social title","wordpress-seo"),replacementVariables:o,recommendedReplacementVariables:n,disabled:_||!y,isDummy:!d}),(0,e.createElement)(zi,{type:"description",name:"wpseo_titles.social-description-archive-wpseo",fieldId:"input-wpseo_titles-social-description-archive-wpseo",label:(0,Ps.__)("Social description","wordpress-seo"),replacementVariables:o,recommendedReplacementVariables:n,className:"yst-replacevar--description",disabled:_||!y,isDummy:!d}))))))},qi=br(rr),Wi=()=>{const{name:t,label:s,singularLabel:r}=zs("selectTaxonomy",[],"post_format"),a=zs("selectPreference",[],"userLocale"),o=(0,i.useMemo)((()=>so(s,a)),[s,a]),n=(0,i.useMemo)((()=>so(r,a)),[r,a]),c=zs("selectUpsellSettingsAsProps"),d=zs("selectReplacementVariablesFor",[t],t,"term-in-custom-taxonomy"),u=zs("selectRecommendedReplacementVariablesFor",[t],t,"term-in-custom-taxonomy"),p=zs("selectLink",[],"https://yoa.st/show-x"),m=zs("selectPreference",[],"isPremium"),f=zs("selectLink",[],"https://yoa.st/4e0"),h=zs("selectExampleUrl",[],"/format/example/"),y=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening strong tag. + * %2$s expands to a closing strong tag. + * %3$s expands to the recommended image size. + */ +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","1200x675px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})})),[]),_=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("(e.g., %1$s)","wordpress-seo"),""),{exampleUrl:(0,e.createElement)(l.Code,null,h)}))),{values:w}=q(),{opengraph:g}=w.wpseo_social,{"disable-post_format":b,"noindex-tax-post_format":v}=w.wpseo_titles;return(0,e.createElement)(Zr,{title:(0,Ps.__)("Format archives","wordpress-seo"),description:_},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(Zs,{name:"wpseo_titles.disable-post_format",id:"input-wpseo_titles-disable-post_format",label:(0,Ps.__)("Enable format-based archives","wordpress-seo"),description:(0,Ps.__)("Format-based archives can cause duplicate content issues. For most sites, we recommend that you disable this setting.","wordpress-seo"),className:"yst-max-w-sm"}),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to "formats". %2$s expands to "Yoast SEO". +(0,Ps.__)("Determine how your %1$s should look in search engines. You can always customize the settings for individual %1$s in the %2$s metabox.","wordpress-seo"),o,"Yoast SEO")},(0,e.createElement)(Zs,{name:`wpseo_titles.noindex-tax-${t}`,id:`input-wpseo_titles-noindex-tax-${t}`,label:(0,Ps.sprintf)( +// translators: %1$s expands to "format". +(0,Ps.__)("Show %1$s archives in search results","wordpress-seo"),n),description:(0,e.createElement)(e.Fragment,null,(0,Ps.sprintf)( +// translators: %1$s expands to "formats". +(0,Ps.__)("Disabling this means that %1$s will not be indexed by search engines and will be excluded from XML sitemaps. We recommend that you disable this setting.","wordpress-seo"),o)," ",(0,e.createElement)(l.Link,{href:p,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about the search results settings","wordpress-seo")),"."),disabled:b,checked:!b&&!v,className:"yst-max-w-sm"}),(0,e.createElement)(rr,{type:"title",name:`wpseo_titles.title-tax-${t}`,fieldId:`input-wpseo_titles-title-tax-${t}`,label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u,disabled:b}),(0,e.createElement)(rr,{type:"description",name:`wpseo_titles.metadesc-tax-${t}`,fieldId:`input-wpseo_titles-metadesc-tax-${t}`,label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u,disabled:b,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)("div",{className:"yst-flex yst-items-center yst-gap-1.5"},(0,e.createElement)("span",null,(0,Ps.__)("Social media appearance","wordpress-seo")),m&&(0,e.createElement)(l.Badge,{variant:"upsell"},"Premium")),description:(0,Ps.sprintf)( +// translators: %1$s expands to "formats". %2$s expands to "Yoast SEO". +(0,Ps.__)("Determine how your %1$s should look on social media by default. You can always customize the settings for individual %1$s in the %2$s metabox.","wordpress-seo"),o,"Yoast SEO")},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!m,variant:"card",cardLink:f,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...c},(0,e.createElement)(Pr,{isEnabled:!m||g}),(0,e.createElement)(er,{id:`wpseo_titles-social-image-tax-${t}`,label:(0,Ps.__)("Social image","wordpress-seo"),previewLabel:y,mediaUrlName:`wpseo_titles.social-image-url-tax-${t}`,mediaIdName:`wpseo_titles.social-image-id-tax-${t}`,disabled:b||!g,isDummy:!m}),(0,e.createElement)(qi,{type:"title",name:`wpseo_titles.social-title-tax-${t}`,fieldId:`input-wpseo_titles-social-title-tax-${t}`,label:(0,Ps.__)("Social title","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u,disabled:b||!g,isDummy:!m}),(0,e.createElement)(qi,{type:"description",name:`wpseo_titles.social-description-tax-${t}`,fieldId:`input-wpseo_titles-social-description-tax-${t}`,label:(0,Ps.__)("Social description","wordpress-seo"),replacementVariables:d,recommendedReplacementVariables:u,className:"yst-replacevar--description",disabled:b||!g,isDummy:!m}))))))},Hi=()=>{const t=zs("selectReplacementVariablesFor",[],"homepage","page"),s=zs("selectRecommendedReplacementVariablesFor",[],"homepage","page"),r=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening strong tag. + * %2$s expands to a closing strong tag. + * %3$s expands to the recommended image size. + */ +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","1200x675px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})})),[]),{values:a}=q(),{opengraph:o}=a.wpseo_social;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.__)("Determine how your homepage should look in the search results.","wordpress-seo")},(0,e.createElement)(rr,{type:"title",name:"wpseo_titles.title-home-wpseo",fieldId:"input-wpseo_titles-title-home-wpseo",label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:t,recommendedReplacementVariables:s}),(0,e.createElement)(rr,{type:"description",name:"wpseo_titles.metadesc-home-wpseo",fieldId:"input-wpseo_titles-metadesc-home-wpseo",label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:t,recommendedReplacementVariables:s,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Social media appearance","wordpress-seo"),description:(0,Ps.__)("Determine how your homepage should look on social media.","wordpress-seo")},(0,e.createElement)(Pr,{isEnabled:o +/* translators: %1$s expands to an opening emphasis tag. %2$s expands to a closing emphasis tag. */,text:(0,Ps.__)("The %1$ssocial image%2$s, %1$ssocial title%2$s and %1$ssocial description%2$s require Open Graph data, which is currently disabled in the ‘Social sharing’ section in %3$sSite features%4$s.","wordpress-seo")}),(0,e.createElement)(er,{id:"wpseo_titles-open_graph_frontpage_image",label:(0,Ps.__)("Social image","wordpress-seo"),previewLabel:r,mediaUrlName:"wpseo_titles.open_graph_frontpage_image",mediaIdName:"wpseo_titles.open_graph_frontpage_image_id",disabled:!o}),(0,e.createElement)(rr,{type:"title",name:"wpseo_titles.open_graph_frontpage_title",fieldId:"input-wpseo_titles-open_graph_frontpage_title",label:(0,Ps.__)("Social title","wordpress-seo"),replacementVariables:t,recommendedReplacementVariables:s,disabled:!o}),(0,e.createElement)(rr,{type:"description",name:"wpseo_titles.open_graph_frontpage_desc",fieldId:"input-wpseo_titles-open_graph_frontpage_desc",label:(0,Ps.__)("Social description","wordpress-seo"),replacementVariables:t,recommendedReplacementVariables:s,className:"yst-replacevar--description",disabled:!o})))},Yi=()=>{const t=zs("selectPreference",[],"homepagePageEditUrl"),s=zs("selectPreference",[],"homepagePostsEditUrl"),r=(0,i.useMemo)((()=>Ti((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("You can determine the title and description for the homepage by %1$sediting the homepage itself%2$s.","wordpress-seo"),"",""),t,"link-homepage-page-edit"))),a=(0,i.useMemo)((()=>Ti((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("You can determine the title and description for the blog page by %1$sediting the blog page itself%2$s.","wordpress-seo"),"",""),s,"link-homepage-posts-page-edit")));return(0,e.createElement)("div",{className:"yst-max-w-screen-sm"},(0,e.createElement)(l.Alert,null,(0,e.createElement)("p",null,r),s&&(0,e.createElement)("p",{className:"yst-pt-2"},a)))},Gi=()=>{const t=zs("selectPreference",[],"homepageIsLatestPosts");return(0,e.createElement)(Zr,{title:(0,Ps.__)("Homepage","wordpress-seo"),description:(0,Ps.__)("Determine how your homepage should look in the search results and on social media. This is what people probably will see when they search for your brand name.","wordpress-seo")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},t&&(0,e.createElement)(Hi,null),!t&&(0,e.createElement)(Yi,null))))},Ki=()=>{const{name:t,label:s,hasSchemaArticleType:r}=zs("selectPostType",[],"attachment"),a=zs("selectPreference",[],"userLocale"),o=(0,i.useMemo)((()=>so(s,a)),[s,a]),n=zs("selectReplacementVariablesFor",[t],t,"custom_post_type"),c=zs("selectRecommendedReplacementVariablesFor",[t],t,"custom_post_type"),d=zs("selectArticleTypeValuesFor",[t],t),u=zs("selectPageTypeValuesFor",[t],t),p=zs("selectLink",[],"https://yoa.st/media-pages-thin-content"),m=zs("selectLink",[],"https://yoa.st/show-x"),{values:f}=q(),{"disable-attachment":h,"noindex-attachment":y}=f.wpseo_titles,_=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s and %2$s are replaced by opening and closing tags. + * %3$s expands to "media". + * %4$s expand to "Yoast SEO". + * %5$s expand to "WordPress". + */ +(0,Ps.__)("When you upload media (e.g. an image or video), %5$s automatically creates a %3$s page (attachment URL) for it. These pages are quite empty and could cause %1$sthin content problems and lead to excess pages on your site%2$s. Therefore, %4$s disables them by default (and redirects the attachment URL to the media itself).","wordpress-seo"),"","",o,"Yoast SEO","WordPress"),{a:(0,e.createElement)("a",{href:p,target:"_blank",rel:"noopener noreferrer"})})));return(0,e.createElement)(Zr,{title:(0,Ps.sprintf)( +// translators: %1$s expands to "Media". +(0,Ps.__)("%1$s pages","wordpress-seo"),s),description:_},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)("fieldset",{className:"yst-min-width-0 yst-space-y-8"},(0,e.createElement)(Zs,{name:`wpseo_titles.disable-${t}`,id:`input-wpseo_titles-disable-${t}`,label:(0,Ps.sprintf)( +// translators: %1$s expands to "media". +(0,Ps.__)("Enable %1$s pages","wordpress-seo"),o),description:(0,Ps.sprintf)( +// translators: %1$s expands to "media". +(0,Ps.__)("We recommend keeping %1$s pages disabled. This will cause all attachment URLs to be redirected to the media itself.","wordpress-seo"),o),className:"yst-max-w-sm"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Search appearance","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to "media". %3$s expands to "Yoast SEO". +(0,Ps.__)("Determine how your %1$s pages should look in search engines. You can always customize the settings for individual %1$s pages in the %2$s metabox.","wordpress-seo"),o,"Yoast SEO")},(0,e.createElement)(Zs,{name:`wpseo_titles.noindex-${t}`,id:`input-wpseo_titles-noindex-${t}`,label:(0,Ps.sprintf)( +// translators: %1$s expands to "media". +(0,Ps.__)("Show %1$s pages in search results","wordpress-seo"),o),description:(0,e.createElement)(e.Fragment,null,(0,Ps.sprintf)( +// translators: %1$s expands to "media". +(0,Ps.__)("Disabling this means that %1$s pages created by WordPress will not be indexed by search engines and will be excluded from XML sitemaps.","wordpress-seo"),o),(0,e.createElement)("br",null),(0,e.createElement)(l.Link,{href:m,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about the search results settings","wordpress-seo")),"."),disabled:h,checked:!h&&!y,className:"yst-max-w-sm"}),(0,e.createElement)(rr,{type:"title",name:`wpseo_titles.title-${t}`,fieldId:`input-wpseo_titles-title-${t}`,label:(0,Ps.__)("SEO title","wordpress-seo"),replacementVariables:n,recommendedReplacementVariables:c,disabled:h}),(0,e.createElement)(rr,{type:"description",name:`wpseo_titles.metadesc-${t}`,fieldId:`input-wpseo_titles-metadesc-${t}`,label:(0,Ps.__)("Meta description","wordpress-seo"),replacementVariables:n,recommendedReplacementVariables:c,disabled:h,className:"yst-replacevar--description"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Schema","wordpress-seo"),description:(0,Ps.sprintf)( +// translators: %1$s expands to "media". %3$s expands to "Yoast SEO". +(0,Ps.__)("Determine how your %1$s pages should be described by default in your site's Schema.org markup. You can always customize the settings for individual %1$s pages in the %2$s metabox.","wordpress-seo"),o,"Yoast SEO")},(0,e.createElement)(yr,{as:l.SelectField,type:"select",name:`wpseo_titles.schema-page-type-${t}`,id:`input-wpseo_titles-schema-page-type-${t}`,label:(0,Ps.__)("Page type","wordpress-seo"),options:u,disabled:h,className:"yst-max-w-sm"}),r&&(0,e.createElement)("div",null,(0,e.createElement)(yr,{as:l.SelectField,type:"select",name:`wpseo_titles.schema-article-type-${t}`,id:`input-wpseo_titles-schema-article-type-${t}`,label:(0,Ps.__)("Article type","wordpress-seo"),options:d,disabled:h,className:"yst-max-w-sm"}),(0,e.createElement)(Fr,{name:t,disabled:h}))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Additional settings","wordpress-seo")},(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:`wpseo_titles.display-metabox-pt-${t}`,id:`input-wpseo_titles-display-metabox-pt-${t}`,label:(0,Ps.__)("Enable SEO controls and assessments","wordpress-seo"),description:(0,Ps.__)("Show or hide our tools and controls in the attachment editor.","wordpress-seo"),disabled:h,className:"yst-max-w-sm"})))))},Zi=({children:t})=>(0,e.createElement)(l.Table.Cell,{className:"yst-font-medium"},(0,e.createElement)("span",{className:"yst-text-slate-900"},t));Zi.propTypes={children:Os().node.isRequired};const Qi=()=>(0,e.createElement)(Zr,{title:(0,Ps.__)("RSS","wordpress-seo")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("RSS feed","wordpress-seo"),description:(0,Ps.__)("Automatically add content to your RSS. This enables you to add links back to your blog and your blog posts, helping search engines identify you as the original source of the content.","wordpress-seo")},(0,e.createElement)(te,{as:l.TextareaField,type:"textarea",rows:4,name:"wpseo_titles.rssbefore",id:"input-wpseo_titles-rssbefore",label:(0,Ps.__)("Content to put before each post in the feed","wordpress-seo")}),(0,e.createElement)(te,{as:l.TextareaField,type:"textarea",rows:4,name:"wpseo_titles.rssafter",id:"input-wpseo_titles-rssafter",label:(0,Ps.__)("Content to put after each post in the feed","wordpress-seo")})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{as:"section",title:(0,Ps.__)("Available variables","wordpress-seo"),description:(0,Ps.__)("You can use the following variables within the content, they will be replaced by the value on the right.","wordpress-seo")},(0,e.createElement)(l.Table,null,(0,e.createElement)(l.Table.Head,null,(0,e.createElement)(l.Table.Row,null,(0,e.createElement)(l.Table.Header,{scope:"col"},(0,Ps.__)("Variable","wordpress-seo")),(0,e.createElement)(l.Table.Header,{scope:"col"},(0,Ps.__)("Description","wordpress-seo")))),(0,e.createElement)(l.Table.Body,null,(0,e.createElement)(l.Table.Row,null,(0,e.createElement)(Zi,null,"%%AUTHORLINK%%"),(0,e.createElement)(l.Table.Cell,null,(0,Ps.__)("A link to the archive for the post author, with the author's name as anchor text.","wordpress-seo"))),(0,e.createElement)(l.Table.Row,null,(0,e.createElement)(Zi,null,"%%POSTLINK%%"),(0,e.createElement)(l.Table.Cell,null,(0,Ps.__)("A link to the post, with the title as anchor text.","wordpress-seo"))),(0,e.createElement)(l.Table.Row,null,(0,e.createElement)(Zi,null,"%%BLOGLINK%%"),(0,e.createElement)(l.Table.Cell,null,(0,Ps.__)("A link to your site, with your site's name as anchor text.","wordpress-seo"))),(0,e.createElement)(l.Table.Row,null,(0,e.createElement)(Zi,null,"%%BLOGDESCLINK%%"),(0,e.createElement)(l.Table.Cell,null,(0,Ps.__)("A link to your site, with your site's name and description as anchor text.","wordpress-seo"))))))))),Xi=gr(l.ToggleField),Ji=vr(fr),el=()=>{const t=(0,i.useMemo)((()=>(0,le.get)(window,"wpseoScriptData.separators",{})),[]),s=zs("selectPreference",[],"generalSettingsUrl"),r=zs("selectPreference",[],"canManageOptions",!1),a=zs("selectPreference",[],"showForceRewriteTitlesSetting",!1),o=zs("selectLink",[],"https://yoa.st/site-basics-replacement-variables"),n=zs("selectLink",[],"https://yoa.st/usage-tracking-2"),c=zs("selectLink",[],"https://yoa.st/site-policies-learn-more"),d=zs("selectPreference",[],"siteTitle",""),u=zs("selectLink",[],"https://yoa.st/site-policies-upsell"),p=zs("selectPreference",[],"isPremium"),m=zs("selectUpsellSettingsAsProps"),{fetchPages:f}=Bs(),h=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("Usage tracking allows us to track some data about your site to improve our plugin. %1$sLearn more about which data we track and why%2$s.","wordpress-seo"),"",""),{a:(0,e.createElement)("a",{id:"link-usage-tracking",href:n,target:"_blank",rel:"noopener"})})),[]),y=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to an opening tag. %2$s expands to a closing tag. */ +(0,Ps.__)("Select the pages on your website which contain information about your organizational and publishing policies. Some of these might not apply to your site, and you can select the same page for multiple policies. %1$sLearn more about why setting your site policies is important%2$s.","wordpress-seo"),"",""),{a:(0,e.createElement)("a",{id:"link-site-policies",href:c,target:"_blank",rel:"noopener"})})),[c]),_=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s and %2$s expand to an opening and closing emphasis tag. %3$s and %4$s expand to an opening and closing anchor tag. */ +(0,Ps.__)("Set the basic info for your website. You can use %1$stagline%2$s and %1$sseparator%2$s as %3$sreplacement variables%4$s when configuring the search appearance of your content.","wordpress-seo"),"","","",""),{em:(0,e.createElement)("em",null),a:(0,e.createElement)("a",{id:"site-basics-replacement-variables",href:o,target:"_blank",rel:"noopener"})})),[]),w=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands to an opening emphasis tag. %2$s expands to a closing emphasis tag. */ +(0,Ps.__)("We're sorry, you're not allowed to edit the %1$swebsite name%2$s and %1$stagline%2$s.","wordpress-seo"),"",""),{em:(0,e.createElement)("em",null)})),[]),g=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening strong tag. + * %2$s expands to a closing strong tag. + * %3$s expands to the recommended image size. + */ +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","1200x675px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})})),[]),b=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening anchor tag. + * %2$s expands to a closing anchor tag. + */ +(0,Ps.__)("This field updates the %1$stagline in your WordPress settings%2$s.","wordpress-seo"),"",""),{a:(0,e.createElement)("a",{href:`${s}#blogdescription`,target:"_blank",rel:"noopener noreferrer"})})),[]),v=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening italics tag. + * %2$s expands to a closing italics tag. + */ +(0,Ps.__)("Select a page which describes the editorial principles of your organization. %1$sWhat%2$s do you write about, %1$swho%2$s do you write for, and %1$swhy%2$s?","wordpress-seo"),"",""),{i:(0,e.createElement)("i",null)})),[]),E=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening italics tag. + * %2$s expands to a closing italics tag. + */ +(0,Ps.__)("Select a page which describes the ownership structure of your organization. It should include information about %1$sfunding%2$s and %1$sgrants%2$s.","wordpress-seo"),"",""),{i:(0,e.createElement)("i",null)})),[]),x=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening italics tag. + * %2$s expands to a closing italics tag. + */ +(0,Ps.__)("Select a page which describes how your organization collects and responds to %1$sfeedback%2$s, engages with the %1$spublic%2$s, and prioritizes %1$stransparency%2$s.","wordpress-seo"),"",""),{i:(0,e.createElement)("i",null)})),[]),k=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening italics tag. + * %2$s expands to a closing italics tag. + */ +(0,Ps.__)("Select a page which outlines your procedure for addressing %1$serrors%2$s (e.g., publishing retractions or corrections).","wordpress-seo"),"",""),{i:(0,e.createElement)("i",null)})),[]),S=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening italics tag. + * %2$s expands to a closing italics tag. + */ +(0,Ps.__)("Select a page which describes the personal, organizational, and corporate %1$sstandards%2$s of %1$sbehavior%2$s expected by your organization.","wordpress-seo"),"",""),{i:(0,e.createElement)("i",null)})),[]),L=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening italics tag. + * %2$s expands to a closing italics tag. + */ +(0,Ps.__)("Select a page which provides information on your diversity policies for %1$seditorial%2$s content.","wordpress-seo"),"",""),{i:(0,e.createElement)("i",null)})),[]),T=(0,i.useMemo)((()=>(0,i.createInterpolateElement)((0,Ps.sprintf)( +/** + * translators: %1$s expands to an opening italics tag. + * %2$s expands to a closing italics tag. + */ +(0,Ps.__)("Select a page which provides information about your diversity policies for %1$sstaffing%2$s, %1$shiring%2$s and %1$semployment%2$s.","wordpress-seo"),"",""),{i:(0,e.createElement)("i",null)})),[]),{values:F}=q(),{opengraph:$}=F.wpseo_social;return(0,i.useEffect)((()=>{f()}),[f]),(0,e.createElement)(Zr,{title:(0,Ps.__)("Site basics","wordpress-seo"),description:(0,Ps.__)("Configure the basics for your website.","wordpress-seo")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("Site info","wordpress-seo"),description:_},!r&&(0,e.createElement)(l.Alert,{variant:"warning",id:"alert-site-defaults-variables",className:"yst-mb-8"},w),(0,e.createElement)("div",{className:"lg:yst-mt-0 lg:yst-col-span-2 yst-space-y-8"},(0,e.createElement)(xr,{as:l.TextField,name:"wpseo_titles.website_name",id:"input-wpseo_titles-website_name",label:(0,Ps.__)("Website name","wordpress-seo"),placeholder:d}),(0,e.createElement)(xr,{as:l.TextField,name:"wpseo_titles.alternate_website_name",id:"input-wpseo_titles-alternate_website_name",label:(0,Ps.__)("Alternate website name","wordpress-seo"),description:(0,Ps.__)("Use the alternate website name for acronyms, or a shorter version of your website's name.","wordpress-seo")}),(0,e.createElement)(te,{as:l.TextField,type:"text",name:"blogdescription",id:"input-blogdescription",label:(0,Ps.__)("Tagline","wordpress-seo"),description:r&&b,readOnly:!r})),(0,e.createElement)(l.RadioGroup,{label:(0,Ps.__)("Title separator","wordpress-seo"),variant:"inline-block"},(0,le.map)(t,(({label:t,aria_label:s},r)=>(0,e.createElement)(te,{key:r,as:l.Radio,type:"radio",variant:"inline-block",name:"wpseo_titles.separator",id:`input-wpseo_titles-separator-${r}`,label:t,isLabelDangerousHtml:!0,"aria-label":s,value:r})))),(0,e.createElement)(Pr,{isEnabled:$,text:/* translators: %1$s expands to an opening emphasis tag. %2$s expands to a closing emphasis tag. */ +(0,Ps.__)("The %1$sSite image%2$s requires Open Graph data, which is currently disabled in the ‘Social sharing’ section in %3$sSite features%4$s.","wordpress-seo")}),(0,e.createElement)(er,{id:"wpseo_social-og_default_image",label:(0,Ps.__)("Site image","wordpress-seo"),description:(0,Ps.__)("This image is used as a fallback for posts/pages that don't have any images set.","wordpress-seo"),previewLabel:g,mediaUrlName:"wpseo_social.og_default_image",mediaIdName:"wpseo_social.og_default_image_id",disabled:!$})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("Site preferences","wordpress-seo")},a&&(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:"wpseo_titles.forcerewritetitle",id:"input-wpseo_titles-forcerewritetitle",label:(0,Ps.__)("Force rewrite titles","wordpress-seo"),description:(0,Ps.sprintf)(/* translators: %1$s expands to "Yoast SEO" */ +(0,Ps.__)("%1$s has auto-detected whether it needs to force rewrite the titles for your pages, if you think it's wrong and you know what you're doing, you can change the setting here.","wordpress-seo"),"Yoast SEO"),className:"yst-max-w-sm"}),(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:"wpseo.disableadvanced_meta",id:"input-wpseo-disableadvanced_meta",label:(0,Ps.__)("Restrict advanced settings for authors","wordpress-seo"),description:(0,Ps.sprintf)(/* translators: %1$s expands to "Yoast SEO" */ +(0,Ps.__)("By default only editors and administrators can access the Advanced and Schema section of the %1$s sidebar or metabox. Disabling this allows access to all users.","wordpress-seo"),"Yoast SEO"),className:"yst-max-w-sm"}),(0,e.createElement)(yr,{as:Xi,type:"checkbox",name:"wpseo.tracking",id:"input-wpseo-tracking",label:(0,Ps.__)("Usage tracking","wordpress-seo"),description:h,className:"yst-max-w-sm"})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)(e.Fragment,null,(0,Ps.__)("Site policies","wordpress-seo"),p&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium")),description:y},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!p,variant:"card",cardLink:u,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...m},(0,e.createElement)(Ji,{name:"wpseo_titles.publishing_principles_id",id:"input-wpseo_titles-publishing_principles_id",label:(0,Ps.__)("Publishing principles","wordpress-seo"),className:"yst-max-w-sm",description:v,isDummy:!p}),(0,e.createElement)(Ji,{name:"wpseo_titles.ownership_funding_info_id",id:"input-wpseo_titles-ownership_funding_info_id",label:(0,Ps.__)("Ownership / Funding info","wordpress-seo"),className:"yst-max-w-sm",description:E,isDummy:!p}),(0,e.createElement)(Ji,{name:"wpseo_titles.actionable_feedback_policy_id",id:"input-wpseo_titles-actionable_feedback_policy_id",label:(0,Ps.__)("Actionable feedback policy","wordpress-seo"),className:"yst-max-w-sm",description:x,isDummy:!p}),(0,e.createElement)(Ji,{name:"wpseo_titles.corrections_policy_id",id:"input-wpseo_titles-corrections_policy_id",label:(0,Ps.__)("Corrections policy","wordpress-seo"),className:"yst-max-w-sm",description:k,isDummy:!p}),(0,e.createElement)(Ji,{name:"wpseo_titles.ethics_policy_id",id:"input-wpseo_titles-ethics_policy_id",label:(0,Ps.__)("Ethics policy","wordpress-seo"),className:"yst-max-w-sm",description:S,isDummy:!p}),(0,e.createElement)(Ji,{name:"wpseo_titles.diversity_policy_id",id:"input-wpseo_titles-diversity_policy_id",label:(0,Ps.__)("Diversity policy","wordpress-seo"),className:"yst-max-w-sm",description:L,isDummy:!p}),(0,e.createElement)(Ji,{name:"wpseo_titles.diversity_staffing_report_id",id:"input-wpseo_titles-diversity_staffing_report_id",label:(0,Ps.__)("Diversity staffing report","wordpress-seo"),className:"yst-max-w-sm",description:T,isDummy:!p}))))))},tl=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"}))})),sl=({name:t,cardId:s,inputId:r,children:a,imageSrc:o,imageAlt:n,isPremiumFeature:c=!1,isPremiumLink:d="",isBetaFeature:u=!1,isNewFeature:p=!1,hasPremiumBadge:m=!1,title:f})=>{const h=zs("selectPreference",[],"isPremium"),y=zs("selectPluginUrl",[o],o),{isDisabled:_,message:w,disabledSetting:g}=Cs({name:t}),{values:b}=q(),v=zs("selectLink",[d],d),E=zs("selectUpsellSettingsAsProps"),x=(0,l.useSvgAria)(),k=(0,i.useMemo)((()=>(0,le.get)(b,t,!1)),[b,t]),S=(0,i.useMemo)((()=>!h&&c),[h,c]),L=(0,i.useMemo)((()=>_||!S&&!k),[_,S,k]),T=(0,i.useMemo)((()=>_||h&&c&&m||u||p&&!h),[_,h,c,u,p]);return(0,e.createElement)(l.Card,{id:s},(0,e.createElement)(l.Card.Header,{className:"yst-h-auto yst-p-0"},(0,e.createElement)("img",{className:Rs()("yst-w-full yst-transition yst-duration-200",L&&"yst-opacity-50 yst-filter yst-grayscale"),src:y,alt:null!=n?n:"",width:500,height:250,loading:"lazy",decoding:"async"}),T&&(0,e.createElement)("div",{className:"yst-absolute yst-top-2 yst-right-2 yst-flex yst-gap-1.5"},_&&(0,e.createElement)(l.Badge,{size:"small",variant:"plain"},w),h&&c&&m&&(0,e.createElement)(l.Badge,{size:"small",variant:"upsell"},"Premium"),u&&(0,e.createElement)(l.Badge,{size:"small",variant:"info"},"Beta"),p&&!h&&(0,e.createElement)(l.Badge,{size:"small",variant:"info"},"New"))),(0,e.createElement)(l.Card.Content,{className:"yst-flex yst-flex-col yst-gap-3"},(0,e.createElement)(l.Title,{as:"h3"},f),a),(0,e.createElement)(l.Card.Footer,null,!S&&(0,e.createElement)(yr,{as:l.ToggleField,type:"checkbox",name:t,id:r,"aria-label":`${(0,Ps.__)("Enable feature","wordpress-seo")} ${f}`,label:(0,Ps.__)("Enable feature","wordpress-seo"),disabled:_,checked:"language"!==g&&k}),S&&(0,e.createElement)(l.Button,{as:"a",className:"yst-gap-2 yst-w-full yst-px-2",variant:"upsell",href:v,target:"_blank",rel:"noopener",...E},(0,e.createElement)(zn,{className:"yst-w-5 yst-h-5 yst--ml-1 yst-shrink-0",...x}),(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"))))};sl.propTypes={name:Os().string.isRequired,cardId:Os().string.isRequired,inputId:Os().string.isRequired,children:Os().node.isRequired,imageSrc:Os().string.isRequired,imageAlt:Os().string,isPremiumFeature:Os().bool,isBetaFeature:Os().bool,isNewFeature:Os().bool,isPremiumLink:Os().string,hasPremiumBadge:Os().bool,title:Os().string.isRequired};const rl=({id:t,link:s,ariaLabel:r,...a})=>{const o=zs("selectLink",[s],s);return(0,e.createElement)(l.Link,{id:t,href:o,variant:"primary",className:"yst-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",target:"_blank",rel:"noopener","aria-label":(0,Ps.sprintf)(/* translators: Hidden accessibility text; %s expands to a translated string of this feature, e.g. "SEO analysis". */ +(0,Ps.__)("Learn more about %s (Opens in a new browser tab)","wordpress-seo"),r),...a},(0,Ps.__)("Learn more","wordpress-seo"),(0,e.createElement)(Ts,{className:"yst-w-4 yst-h-4 yst-icon-rtl"}))};rl.propTypes={id:Os().string.isRequired,link:Os().string.isRequired,ariaLabel:Os().string.isRequired};const al=()=>{const t=zs("selectPreference",[],"isPremium"),s=zs("selectPreference",[],"sitemapUrl"),{values:r,initialValues:a}=q(),{enable_xml_sitemap:o}=r.wpseo,{enable_xml_sitemap:n}=a.wpseo,c=(0,i.useMemo)((()=>t?"yst-grid yst-gap-6 yst-grid-cols-1 sm:yst-grid-cols-2 min-[783px]:yst-grid-cols-1 lg:yst-grid-cols-2 xl:yst-grid-cols-3 2xl:yst-grid-cols-4":"yst-grid yst-gap-6 yst-grid-cols-1 sm:yst-grid-cols-2 min-[783px]:yst-grid-cols-1 lg:yst-grid-cols-2 2xl:yst-grid-cols-3 min-[1800px]:yst-grid-cols-4"),[t]);return(0,e.createElement)(Zr,{title:(0,Ps.__)("Site features","wordpress-seo"),description:(0,Ps.__)("Tell us which features you want to use.","wordpress-seo")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-6xl"},(0,e.createElement)("fieldset",{className:"yst-min-w-0"},(0,e.createElement)("legend",{className:"yst-sr-only"},(0,Ps.__)("Writing","wordpress-seo")),(0,e.createElement)("div",{className:"yst-max-w-screen-sm yst-mb-8"},(0,e.createElement)(l.Title,{as:"h2",size:"2"},(0,Ps.__)("Writing","wordpress-seo"))),(0,e.createElement)("div",{className:c},(0,e.createElement)(sl,{name:"wpseo.keyword_analysis_active",cardId:"card-wpseo-keyword_analysis_active",inputId:"input-wpseo-keyword_analysis_active",imageSrc:"/images/seo_analysis.png",title:(0,Ps.__)("SEO analysis","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("The SEO analysis offers suggestions to improve the findability of your text and makes sure that your content meets best practices.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-seo-analysis",link:"https://yoa.st/2ak",ariaLabel:(0,Ps.__)("SEO analysis","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.content_analysis_active",cardId:"card-wpseo-content_analysis_active",inputId:"input-wpseo-content_analysis_active",imageSrc:"/images/readability_analysis.png",title:(0,Ps.__)("Readability analysis","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("The readability analysis offers suggestions to improve the structure and style of your text.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-readability-analysis",link:"https://yoa.st/2ao",ariaLabel:(0,Ps.__)("Readability analysis","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.inclusive_language_analysis_active",cardId:"card-wpseo-inclusive_language_analysis_active",inputId:"input-wpseo-inclusive_language_analysis_active",imageSrc:"/images/inclusive_language_analysis.png",title:(0,Ps.__)("Inclusive language analysis","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("The inclusive language analysis offers suggestions to write more inclusive copy, so more people will be able to relate to your content.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-inclusive-language-analysis",link:"https://yoa.st/inclusive-language-feature-learn-more",ariaLabel:(0,Ps.__)("Inclusive language analysis","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.enable_ai_generator",cardId:"card-wpseo-enable_ai_generator",inputId:"input-wpseo-enable_ai_generator",imageSrc:"/images/ai-generator.png",isPremiumFeature:!0,hasPremiumBadge:!1,isBetaFeature:!0,isPremiumLink:"https://yoa.st/get-ai-generator",title:"Yoast AI"},(0,e.createElement)("p",null,(0,Ps.__)("The AI features help you create better content by providing optimization suggestions that you can apply as you wish.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-ai-generator",link:"https://yoa.st/ai-generator-feature",ariaLabel:(0,Ps.__)("AI title & description generator","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.enable_metabox_insights",cardId:"card-wpseo-enable_metabox_insights",inputId:"input-wpseo-enable_metabox_insights",imageSrc:"/images/insights.png",title:(0,Ps.__)("Insights","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("Get more insights into what you are writing. What words do you use most often? How much time does it take to read your text? Is your text easy to read?","wordpress-seo")),(0,e.createElement)(rl,{id:"link-insights",link:"https://yoa.st/4ew",ariaLabel:(0,Ps.__)("Insights","wordpress-seo")})))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)("fieldset",{className:"yst-min-w-0"},(0,e.createElement)("legend",{className:"yst-sr-only"},(0,Ps.__)("Site structure","wordpress-seo")),(0,e.createElement)("div",{className:"yst-max-w-screen-sm yst-mb-8"},(0,e.createElement)(l.Title,{as:"h2",size:"2"},(0,Ps.__)("Site structure","wordpress-seo"))),(0,e.createElement)("div",{className:c},(0,e.createElement)(sl,{name:"wpseo.enable_cornerstone_content",cardId:"card-wpseo-enable_cornerstone_content",inputId:"input-wpseo-enable_cornerstone_content",imageSrc:"/images/cornerstone_content.png",title:(0,Ps.__)("Cornerstone content","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("Mark and filter your cornerstone content to make sure your most important articles get the attention they deserve. To help you write excellent copy, we’ll assess your text more strictly.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-cornerstone-content",link:"https://yoa.st/dashboard-help-cornerstone",ariaLabel:(0,Ps.__)("Cornerstone content","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.enable_text_link_counter",cardId:"card-wpseo-enable_text_link_counter",inputId:"input-wpseo-enable_text_link_counter",imageSrc:"/images/text_link_counter.png",title:(0,Ps.__)("Text link counter","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("Count the number of internal links from and to your posts to improve your site structure.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-text-link-counter",link:"https://yoa.st/2aj",ariaLabel:(0,Ps.__)("Text link counter","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.enable_link_suggestions",cardId:"card-wpseo-enable_link_suggestions",inputId:"input-wpseo-enable_link_suggestions",imageSrc:"/images/link_suggestions.png",isPremiumFeature:!0,hasPremiumBadge:!0,isPremiumLink:"https://yoa.st/get-link-suggestions",title:(0,Ps.__)("Internal linking suggestions","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("No need to figure out what to link to. You get linking suggestions for relevant posts and pages to make your website easier to navigate.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-suggestions-link",link:t?"https://yoa.st/17g":"https://yoa.st/4ev",ariaLabel:(0,Ps.__)("Link suggestions","wordpress-seo")})))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)("fieldset",{id:"section-social-sharing",className:"yst-min-w-0"},(0,e.createElement)("legend",{className:"yst-sr-only"},(0,Ps.__)("Social sharing","wordpress-seo")),(0,e.createElement)("div",{className:"yst-max-w-screen-sm yst-mb-8"},(0,e.createElement)(l.Title,{as:"h2",size:"2",className:"yst-mb-2"},(0,Ps.__)("Social sharing","wordpress-seo"))),(0,e.createElement)("div",{className:c},(0,e.createElement)(sl,{name:"wpseo_social.opengraph",cardId:"card-wpseo_social-opengraph",inputId:"input-wpseo_social-opengraph",imageSrc:"/images/open_graph.png",title:(0,Ps.__)("Open Graph data","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("Allows for Facebook and other social media to display a preview with images and a text excerpt when a link to your site is shared. Keep this feature enabled to optimize your site for social media.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-open-graph-data",link:"https://yoa.st/site-features-open-graph-data",ariaLabel:(0,Ps.__)("Open Graph data","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo_social.twitter",cardId:"card-wpseo_social-twitter",inputId:"input-wpseo_social-twitter",imageSrc:"/images/twitter_card.png",title:(0,Ps.__)("X card data","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("Allows for X to display a preview with images and a text excerpt when a link to your site is shared.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-twitter-card-data",link:"https://yoa.st/site-features-twitter-card-data",ariaLabel:(0,Ps.__)("X card data","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.enable_enhanced_slack_sharing",cardId:"card-wpseo-enable_enhanced_slack_sharing",inputId:"input-wpseo-enable_enhanced_slack_sharing",imageSrc:"/images/slack_sharing.png",title:(0,Ps.__)("Slack sharing","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("This adds an author byline and reading time estimate to the article’s snippet when shared on Slack.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-slack-sharing",link:"https://yoa.st/help-slack-share",ariaLabel:(0,Ps.__)("Slack sharing","wordpress-seo")})))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)("fieldset",{className:"yst-min-w-0"},(0,e.createElement)("legend",{className:"yst-sr-only"},(0,Ps.__)("Tools","wordpress-seo")),(0,e.createElement)("div",{className:"yst-max-w-screen-sm yst-mb-8"},(0,e.createElement)(l.Title,{as:"h2",size:"2"},(0,Ps.__)("Tools","wordpress-seo"))),(0,e.createElement)("div",{className:c},(0,e.createElement)(sl,{name:"wpseo.enable_admin_bar_menu",cardId:"card-wpseo-enable_admin_bar_menu",inputId:"input-wpseo-enable_admin_bar_menu",imageSrc:"/images/admin_bar.png",title:(0,Ps.__)("Admin bar menu","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.sprintf)( +// translators: %1$s expands to Yoast. +(0,Ps.__)("The %1$s icon in the top admin bar provides quick access to third-party tools for analyzing pages and makes it easy to see if you have new notifications.","wordpress-seo"),"Yoast")),(0,e.createElement)(rl,{id:"link-admin-bar",link:"https://yoa.st/site-features-admin-bar",ariaLabel:(0,Ps.__)("Admin bar menu","wordpress-seo")})))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)("fieldset",{className:"yst-min-w-0"},(0,e.createElement)("legend",{className:"yst-sr-only"},(0,Ps.__)("APIs","wordpress-seo")),(0,e.createElement)("div",{className:"yst-max-w-screen-sm yst-mb-8"},(0,e.createElement)(l.Title,{as:"h2",size:"2"},(0,Ps.__)("APIs","wordpress-seo"))),(0,e.createElement)("div",{className:c},(0,e.createElement)(sl,{name:"wpseo.enable_headless_rest_endpoints",cardId:"card-wpseo-enable_headless_rest_endpoints",inputId:"input-wpseo-enable_headless_rest_endpoints",imageSrc:"/images/rest_api.png",title:(0,Ps.__)("REST API endpoint","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("This Yoast SEO REST API endpoint gives you all the metadata you need for a specific URL. This will make it very easy for headless WordPress sites to use Yoast SEO for all their SEO meta output.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-rest-api-endpoint",link:"https://yoa.st/site-features-rest-api-endpoint",ariaLabel:(0,Ps.__)("REST API endpoint","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.enable_xml_sitemap",cardId:"card-wpseo-enable_xml_sitemap",inputId:"input-wpseo-enable_xml_sitemap",imageSrc:"/images/xml_sitemaps.png",title:(0,Ps.__)("XML sitemaps","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.sprintf)( +// translators: %1$s expands to "Yoast SEO". +(0,Ps.__)("Enable the %1$s XML sitemaps. A sitemap is a file that lists a website's essential pages to make sure search engines can find and crawl them.","wordpress-seo"),"Yoast SEO")),n&&o&&(0,e.createElement)(l.Button,{as:"a",id:"link-xml-sitemaps",href:s,variant:"secondary",target:"_blank",rel:"noopener",className:"yst-self-start"},(0,Ps.__)("View the XML sitemap","wordpress-seo"),(0,e.createElement)(tl,{className:"yst--mr-1 yst-ml-1 yst-h-5 yst-w-5 yst-text-slate-400"})),(0,e.createElement)(rl,{id:"link-xml-sitemaps-learn-more",link:"https://yoa.st/2a-",ariaLabel:(0,Ps.__)("XML sitemaps","wordpress-seo")})),(0,e.createElement)(sl,{name:"wpseo.enable_index_now",cardId:"card-wpseo-enable_index_now",inputId:"input-wpseo-enable_index_now",imageSrc:"/images/indexnow.png",isPremiumFeature:!0,hasPremiumBadge:!0,isPremiumLink:"https://yoa.st/get-indexnow",title:(0,Ps.__)("IndexNow","wordpress-seo")},(0,e.createElement)("p",null,(0,Ps.__)("Automatically ping search engines like Bing and Yandex whenever you publish, update or delete a post.","wordpress-seo")),(0,e.createElement)(rl,{id:"link-index-now",link:"https://yoa.st/index-now-feature",ariaLabel:(0,Ps.__)("IndexNow","wordpress-seo")})))))))},ol=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"}))})),nl=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z",clipRule:"evenodd"}))})),il=br(xr),ll=vr(wr),cl=()=>{const{values:t}=q(),{website_name:s,company_or_person:r,company_or_person_user_id:a,company_name:o,company_logo_id:n}=t.wpseo_titles,{other_social_urls:c}=t.wpseo_social,d=zs("selectUserById",[a],a),u=zs("selectLink",[],"https://yoa.st/1-p"),p=zs("selectLink",[],"https://yoa.st/3r3"),m=zs("selectLink",[],"https://yoa.st/site-representation-org-additional-info-upsell"),f=zs("selectLink",[],"https://yoa.st/site-representation-org-identifiers"),h=zs("selectLink",[],"https://yoa.st/site-representation-organization-person"),y=zs("selectPreference",[],"editUserUrl"),_=zs("selectPreference",[],"isLocalSeoActive"),w=zs("selectPreference",[],"companyOrPersonMessage"),g=zs("selectFallback",[],"siteLogoId"),b=zs("selectCanEditUser",[null==d?void 0:d.id],null==d?void 0:d.id),v=zs("selectPreference",[],"isPremium"),E=zs("selectUpsellSettingsAsProps"),x=zs("selectLink",[],"https://yoa.st/get-mastodon-integration"),k=zs("selectLink",[],"https://yoa.st/site-representation-mastodon"),S=zs("selectPreference",[],"localSeoPageSettingUrl");let L=(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands for Yoast Local SEO, %2$s and %3$s expands to a link tags. */ +(0,Ps.__)("You have %1$s activated on your site. You can provide your VAT ID and Tax ID in the %2$s‘Business info’ settings%3$s.","wordpress-seo"),"Yoast Local SEO","",""),{a:(0,e.createElement)("a",{href:S,target:"_blank",className:"yst-underline yst-font-medium"})}),T=(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands for Yoast Local SEO, %2$s and %3$s expands to a link tags. */ +(0,Ps.__)("You have %1$s activated on your site. You can provide your email and phone in the %2$s‘Business info’ settings%3$s.","wordpress-seo"),"Yoast Local SEO","",""),{a:(0,e.createElement)("a",{href:S,target:"_blank",className:"yst-underline yst-font-medium"})});S.includes("wpseo_locations")&&(L=(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands for Yoast Local SEO, %2$s and %3$s expands to a link tags. */ +(0,Ps.__)("You have %1$s activated on your site, and you've configured your business for multiple locations. This allows you to provide your VAT ID and Tax ID for %2$seach specific location%3$s.","wordpress-seo"),"Yoast Local SEO","",""),{a:(0,e.createElement)("a",{href:S,target:"_blank",className:"yst-underline yst-font-medium"})}),T=(0,i.createInterpolateElement)((0,Ps.sprintf)(/* translators: %1$s expands for Yoast Local SEO, %2$s and %3$s expands to a link tags. */ +(0,Ps.__)("You have %1$s activated on your site, and you've configured your business for multiple locations. This allows you to provide your email and phone for %2$seach specific location%3$s.","wordpress-seo"),"Yoast Local SEO","",""),{a:(0,e.createElement)("a",{href:S,target:"_blank",className:"yst-underline yst-font-medium"})}));const F=(0,i.useCallback)((async e=>{var t;await e.push(""),null===(t=document.getElementById(`input-wpseo_social-other_social_urls-${c.length}`))||void 0===t||t.focus()}),[c]);return(0,e.createElement)(Zr,{title:(0,Ps.__)("Site representation","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("This info is intended to appear in %1$sGoogle's Knowledge Graph%2$s.","wordpress-seo"),"",""),u,"link-google-knowledge-graph")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("Organization/person","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("Choose whether your site represents an organization or a person. %1$sLearn more about the differences and choosing between Organization and Person%2$s.","wordpress-seo"),"",""),h,"link-site-representation-organization-person")},_&&(0,e.createElement)(l.Alert,{id:"alert-local-seo-company-or-person",variant:"info"},w),(0,e.createElement)(l.RadioGroup,{disabled:_},(0,e.createElement)(te,{as:l.Radio,type:"radio",name:"wpseo_titles.company_or_person",id:"input-wpseo_titles-company_or_person-company",label:(0,Ps.__)("Organization","wordpress-seo"),value:"company",disabled:_}),(0,e.createElement)(te,{as:l.Radio,type:"radio",name:"wpseo_titles.company_or_person",id:"input-wpseo_titles-company_or_person-person",label:(0,Ps.__)("Person","wordpress-seo"),value:"person",disabled:_}))),(0,e.createElement)("section",{className:"yst-space-y-8"}),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)("div",{className:"yst-relative"},(0,e.createElement)(Hs.Z,{easing:"ease-out",duration:300,delay:300,height:"company"===r?"auto":0,animateOpacity:!0},(0,e.createElement)(qs,{title:(0,Ps.__)("Organization","wordpress-seo"),description:(0,Ps.__)("Please tell us more about your organization. This information will help Google to understand your website, and improve your chance of getting rich results.","wordpress-seo")},(!o||n<1)&&(0,e.createElement)(l.Alert,{id:"alert-organization-name-logo",variant:"info"},Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("An organization name and logo need to be set for structured data to work properly. Since you haven’t set these yet, we are using the site name and logo as default values. %1$sLearn more about the importance of structured data%2$s.","wordpress-seo"),"",""),p,"link-structured-data")),(0,e.createElement)(te,{as:l.TextField,name:"wpseo_titles.company_name",id:"input-wpseo_titles-company_name",label:(0,Ps.__)("Organization name","wordpress-seo"),placeholder:s}),(0,e.createElement)(te,{as:l.TextField,name:"wpseo_titles.company_alternate_name",id:"input-wpseo_titles-company_alternate_name",label:(0,Ps.__)("Alternate organization name","wordpress-seo"),description:(0,Ps.__)("Use the alternate organization name for acronyms, or a shorter version of your organization's name.","wordpress-seo")}),(0,e.createElement)(er,{id:"wpseo_titles-company_logo",label:(0,Ps.__)("Organization logo","wordpress-seo"),variant:"square",previewLabel:(0,i.createInterpolateElement)((0,Ps.sprintf)( +// translators: %1$s expands to an opening strong tag. +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","696x696px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})}),mediaUrlName:"wpseo_titles.company_logo",mediaIdName:"wpseo_titles.company_logo_id",fallbackMediaId:g})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{id:"fieldset-wpseo_social-other_social_urls",title:(0,Ps.__)("Other profiles","wordpress-seo"),description:(0,Ps.__)("Tell us if you have any other profiles on the web that belong to your organization. This can be any number of profiles, like YouTube, LinkedIn, Pinterest, or even Wikipedia.","wordpress-seo")},(0,e.createElement)(xr,{as:l.TextField,name:"wpseo_social.facebook_site",id:"input-wpseo_social-facebook_site",label:(0,Ps.__)("Facebook","wordpress-seo"),placeholder:(0,Ps.__)("E.g. https://facebook.com/yoast","wordpress-seo")}),(0,e.createElement)(xr,{as:l.TextField,name:"wpseo_social.twitter_site",id:"input-wpseo_social-twitter_site",label:(0,Ps.__)("X","wordpress-seo"),placeholder:(0,Ps.__)("E.g. https://x.com/yoast","wordpress-seo")}),(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!v,variant:"card",cardLink:x,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...E},(0,e.createElement)(il,{as:l.TextField,name:"wpseo_social.mastodon_url",id:"input-wpseo_social-mastodon_url",label:(0,Ps.__)("Mastodon","wordpress-seo"),placeholder:(0,Ps.__)("E.g. https://mastodon.social/@yoast","wordpress-seo"),labelSuffix:v&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium"),isDummy:!v,description:(0,e.createElement)(i.Fragment,null,(0,Ps.__)("Get your site verified in your Mastodon profile.","wordpress-seo")," ",(0,e.createElement)(l.Link,{id:"link-wpseo_social-mastodon_url",href:k,target:"_blank",rel:"noopener"},(0,Ps.__)("Read more about how to get your site verified.","wordpress-seo")))})),(0,e.createElement)(ie,{name:"wpseo_social.other_social_urls"},(t=>(0,e.createElement)(i.Fragment,null,c.map(((s,r)=>(0,e.createElement)(Es,{key:`wpseo_social.other_social_urls.${r}`,as:i.Fragment,appear:!0,show:!0,enter:"yst-transition yst-ease-out yst-duration-300",enterFrom:"yst-transform yst-opacity-0",enterTo:"yst-transform yst-opacity-100",leave:"yst-transition yst-ease-out yst-duration-300",leaveFrom:"yst-transform yst-opacity-100",leaveTo:"yst-transform yst-opacity-0"},(0,e.createElement)("div",{className:"yst-w-full yst-flex yst-items-start yst-gap-2"},(0,e.createElement)(xr,{as:l.TextField,name:`wpseo_social.other_social_urls.${r}`,id:`input-wpseo_social-other_social_urls-${r}`,label:(0,Ps.sprintf)((0,Ps.__)("Other profile %1$s","wordpress-seo"),r+1),placeholder:(0,Ps.__)("E.g. https://example.com/yoast","wordpress-seo"),className:"yst-grow"}),(0,e.createElement)(l.Button,{variant:"secondary",onClick:t.remove.bind(null,r),className:"yst-mt-7 yst-p-2.5","aria-label":(0,Ps.sprintf)((0,Ps.__)("Remove Other profile %1$s","wordpress-seo"),r+1)},(0,e.createElement)(ol,{className:"yst-h-5 yst-w-5"})))))),(0,e.createElement)(l.Button,{id:"button-add-social-profile",variant:"secondary",onClick:()=>F(t)},(0,e.createElement)(nl,{className:"yst--ml-1 yst-mr-1 yst-h-5 yst-w-5 yst-text-slate-400"}),(0,Ps.__)("Add another profile","wordpress-seo")))))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)(i.Fragment,null,(0,Ps.__)("Additional organization info","wordpress-seo"),v&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium")),description:(0,Ps.__)("Enrich your organization's profile by providing more in-depth information. The more details you share, the better Google understands your website.","wordpress-seo")},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!v,variant:"card",cardLink:m,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...E},(0,e.createElement)(il,{as:l.TextareaField,name:"wpseo_titles.org-description",id:"input-wpseo_titles-org-description",label:(0,Ps.__)("Organization description","wordpress-seo"),isDummy:!v,maxLength:2e3}),_&&v&&(0,e.createElement)(l.Alert,{id:"alert-local-seo-vat-or-tax-id",variant:"info"},T),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-email",id:"input-wpseo_titles-org-email",type:"email",label:(0,Ps.__)("Organization email address","wordpress-seo"),isDummy:!v||_}),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-phone",id:"input-wpseo_titles-org-phone",label:(0,Ps.__)("Organization phone number","wordpress-seo"),isDummy:!v||_}),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-legal-name",id:"input-wpseo_titles-org-legal-name",label:(0,Ps.__)("Organization's legal name","wordpress-seo"),isDummy:!v}),(0,e.createElement)(il,{as:l.TextField,className:"yst-w-3/5",name:"wpseo_titles.org-founding-date",id:"input-wpseo_titles-org-founding-date",label:(0,Ps.__)("Organization's founding date","wordpress-seo"),type:"date",isDummy:!v}),(0,e.createElement)(ll,{name:"wpseo_titles.org-number-employees",className:"yst-w-3/5",id:"input-wpseo_titles-org-number-employees",label:(0,Ps.__)("Number of employees","wordpress-seo"),placeholder:(0,Ps.__)("Select a range / Enter a number","wordpress-seo"),isDummy:!v,options:[{value:"",label:"None"},{value:"1-10",label:(0,Ps.__)("1-10 employees","wordpress-seo")},{value:"11-50",label:(0,Ps.__)("11-50 employees","wordpress-seo")},{value:"51-200",label:(0,Ps.__)("51-200 employees","wordpress-seo")},{value:"201-500",label:(0,Ps.__)("201-500 employees","wordpress-seo")},{value:"501-1000",label:(0,Ps.__)("501-1000 employees","wordpress-seo")},{value:"1001-5000",label:(0,Ps.__)("1001-5000 employees","wordpress-seo")},{value:"5001-10000",label:(0,Ps.__)("5001-10000 employees","wordpress-seo")}]}))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,e.createElement)(i.Fragment,null,(0,Ps.__)("Organization identifiers","wordpress-seo"),v&&(0,e.createElement)(l.Badge,{className:"yst-ml-1.5",size:"small",variant:"upsell"},"Premium")),description:(0,Ps.__)("Please tell us more about your organization’s identifiers. This information will help Google to display accurate and helpful details about your organization.","wordpress-seo")},(0,e.createElement)(l.FeatureUpsell,{shouldUpsell:!v,variant:"card",cardLink:f,cardText:(0,Ps.sprintf)(/* translators: %1$s expands to Premium. */ +(0,Ps.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...E},_&&v&&(0,e.createElement)(l.Alert,{id:"alert-local-seo-vat-or-tax-id",variant:"info"},L),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-vat-id",id:"input-wpseo_titles-org-vat-id",label:(0,Ps.__)("VAT ID","wordpress-seo"),isDummy:!v||_}),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-tax-id",id:"input-wpseo_titles-org-tax-id",label:(0,Ps.__)("Tax ID","wordpress-seo"),isDummy:!v||_}),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-iso",id:"input-wpseo_titles-org-iso",label:(0,Ps.__)("ISO 6523","wordpress-seo"),isDummy:!v}),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-duns",id:"input-wpseo_titles-org-duns",label:(0,Ps.__)("DUNS","wordpress-seo"),isDummy:!v}),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-leicode",id:"input-wpseo_titles-org-leicode",label:(0,Ps.__)("LEI code","wordpress-seo"),isDummy:!v}),(0,e.createElement)(il,{as:l.TextField,name:"wpseo_titles.org-naics",id:"input-wpseo_titles-org-naics",label:(0,Ps.__)("NAICS","wordpress-seo"),isDummy:!v})))),(0,e.createElement)(Hs.Z,{easing:"ease-out",duration:300,delay:300,height:"person"===r?"auto":0,animateOpacity:!0},(0,e.createElement)(qs,{title:(0,Ps.__)("Personal info","wordpress-seo"),description:(0,Ps.__)("Please tell us more about the person this site represents.","wordpress-seo")},(0,e.createElement)(dr,{name:"wpseo_titles.company_or_person_user_id",id:"input-wpseo_titles-company_or_person_user_id",label:(0,Ps.__)("Select a user","wordpress-seo"),className:"yst-max-w-sm"}),!(0,le.isEmpty)(d)&&(0,e.createElement)(l.Alert,{id:"alert-person-user-profile"},b&&(0,i.createInterpolateElement)((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("You have selected the user %1$s%5$s%2$s as the person this site represents. Their user profile information will now be used in search results. %3$sUpdate their profile to make sure the information is correct%4$s.","wordpress-seo"),"","","","",null==d?void 0:d.name),{strong:(0,e.createElement)("strong",{className:"yst-font-medium"}),a:(0,e.createElement)("a",{id:"link-person-user-profile",href:`${y}?user_id=${null==d?void 0:d.id}`,target:"_blank",rel:"noopener noreferrer"})}),!b&&(0,i.createInterpolateElement)((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags. +(0,Ps.__)("You have selected the user %1$s%3$s%2$s as the person this site represents. Their user profile information will now be used in search results. We're sorry, you're not allowed to edit this user's profile. Please contact your admin or %1$s%3$s%2$s to check and/or update the profile.","wordpress-seo"),"","",null==d?void 0:d.name),{strong:(0,e.createElement)("strong",{className:"yst-font-medium"})})),(0,e.createElement)(er,{id:"wpseo_titles-person_logo",label:(0,Ps.__)("Personal logo or avatar","wordpress-seo"),variant:"square",previewLabel:(0,i.createInterpolateElement)((0,Ps.sprintf)( +// translators: %1$s expands to an opening strong tag. +(0,Ps.__)("Recommended size for this image is %1$s%3$s%2$s","wordpress-seo"),"","","696x696px"),{strong:(0,e.createElement)("strong",{className:"yst-font-semibold"})}),mediaUrlName:"wpseo_titles.person_logo",mediaIdName:"wpseo_titles.person_logo_id",fallbackMediaId:g,disabled:!a})))))))},dl=()=>{const t=zs("selectReplacementVariablesFor",[],"search","search"),s=zs("selectRecommendedReplacementVariablesFor",[],"search","search"),r=zs("selectReplacementVariablesFor",[],"404","404"),a=zs("selectRecommendedReplacementVariablesFor",[],"404","404");return(0,e.createElement)(Zr,{title:(0,Ps.__)("Special pages","wordpress-seo")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)(qs,{title:(0,Ps.__)("Internal search pages","wordpress-seo"),description:(0,Ps.__)("Determine how the title of your internal search pages should look in the browser.","wordpress-seo")},(0,e.createElement)(rr,{type:"title",name:"wpseo_titles.title-search-wpseo",fieldId:"input-wpseo_titles-title-search-wpseo",label:(0,Ps.__)("Page title","wordpress-seo"),replacementVariables:t,recommendedReplacementVariables:s})),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(qs,{title:(0,Ps.__)("404 error pages","wordpress-seo"),description:(0,Ps.__)("Determine how the title of your 404 error pages should look in the browser.","wordpress-seo")},(0,e.createElement)(rr,{type:"title",name:"wpseo_titles.title-404-wpseo",fieldId:"input-wpseo_titles-title-404-wpseo",label:(0,Ps.__)("Page title","wordpress-seo"),replacementVariables:r,recommendedReplacementVariables:a})))))},ul=/content=(['"])?(?[^'"> ]+)(?:\1|[ />])/,pl=e=>{var t;const s=e.target.value.match(ul);return null!=s&&null!==(t=s.groups)&&void 0!==t&&t.content?s.groups.content:e.target.value},ml=Er(yr),fl=()=>{const t=zs("selectPreference",[],"siteUrl");return(0,e.createElement)(Zr,{title:(0,Ps.__)("Site connections","wordpress-seo"),description:(0,Ps.__)("Verify your site with different tools. This will add a verification meta tag to your homepage. You can find instructions on how to verify your site for each platform by following the link in the description.","wordpress-seo")},(0,e.createElement)(Gs,null,(0,e.createElement)("div",{className:"yst-max-w-5xl"},(0,e.createElement)("fieldset",{className:"yst-min-width-0 yst-max-w-screen-sm yst-space-y-8"},(0,e.createElement)(ml,{as:l.TextField,type:"text",name:"wpseo.baiduverify",id:"input-wpseo-baiduverify",label:(0,Ps.__)("Baidu","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags, respectively. +(0,Ps.__)("Get your verification code in %1$sBaidu Webmaster tools%2$s.","wordpress-seo"),"",""),"https://ziyuan.baidu.com/site","link-baidu-webmaster-tools"),placeholder:(0,Ps.__)("Add verification code","wordpress-seo"),transformValue:pl}),(0,e.createElement)(ml,{as:l.TextField,type:"text",name:"wpseo.msverify",id:"input-wpseo-msverify",label:(0,Ps.__)("Bing","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags, respectively. +(0,Ps.__)("Get your verification code in %1$sBing Webmaster tools%2$s.","wordpress-seo"),"",""),`https://www.bing.com/toolbox/webmaster/#/Dashboard/?url=${t}`,"link-bing-webmaster-tools"),placeholder:(0,Ps.__)("Add verification code","wordpress-seo"),transformValue:pl}),(0,e.createElement)(ml,{as:l.TextField,type:"text",name:"wpseo.googleverify",id:"input-wpseo-googleverify",label:(0,Ps.__)("Google","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags, respectively. +(0,Ps.__)("Get your verification code in %1$sGoogle Search console%2$s.","wordpress-seo"),"",""),(0,st.addQueryArgs)("https://search.google.com/search-console/users",{hl:"en",tid:"alternate",siteUrl:t}),"link-google-search-console"),placeholder:(0,Ps.__)("Add verification code","wordpress-seo"),transformValue:pl}),(0,e.createElement)(ml,{as:l.TextField,type:"text",name:"wpseo_social.pinterestverify",id:"input-wpseo_social-pinterestverify",label:(0,Ps.__)("Pinterest","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags, respectively. +(0,Ps.__)("Claim your site over at %1$sPinterest%2$s.","wordpress-seo"),"",""),"https://www.pinterest.com/settings/claim","link-pinterest"),placeholder:(0,Ps.__)("Add verification code","wordpress-seo"),transformValue:pl}),(0,e.createElement)(ml,{as:l.TextField,type:"text",name:"wpseo.yandexverify",id:"input-wpseo-yandexverify",label:(0,Ps.__)("Yandex","wordpress-seo"),description:Ti((0,Ps.sprintf)( +// translators: %1$s and %2$s are replaced by opening and closing tags, respectively. +(0,Ps.__)("Get your verification code in %1$sYandex Webmaster tools%2$s.","wordpress-seo"),"",""),"https://webmaster.yandex.com/sites/add/","link-yandex-webmaster-tools"),placeholder:(0,Ps.__)("Add verification code","wordpress-seo"),transformValue:pl})))))},hl=({postTypes:t,taxonomies:s,idSuffix:r=""})=>{const a=(0,l.useSvgAria)(),o=zs("selectPreference",[],"isPremium"),n=(0,i.useCallback)((({show:t,toggle:s,ariaProps:r})=>{const o=(0,i.useMemo)((()=>t?Fs:$s),[t]);return(0,e.createElement)("div",{className:"yst-relative"},(0,e.createElement)("hr",{className:"yst-absolute yst-inset-x-0 yst-top-1/2 yst-bg-slate-200"}),(0,e.createElement)("button",{type:"button",className:"yst-relative yst-flex yst-items-center yst-gap-1.5 yst-px-2.5 yst-py-1 yst-mx-auto yst-text-xs yst-font-medium yst-text-slate-700 yst-bg-slate-50 yst-rounded-full yst-border yst-border-slate-300 hover:yst-bg-white hover:yst-text-slate-800 focus:yst-outline-none focus:yst-ring-2 focus:yst-ring-primary-500 focus:yst-ring-offset-2",onClick:s,...r},t?(0,Ps.__)("Show less","wordpress-seo"):(0,Ps.__)("Show more","wordpress-seo"),(0,e.createElement)(o,{className:"yst-h-4 yst-w-4 yst-flex-shrink-0 yst-text-slate-400 group-hover:yst-text-slate-500 yst-stroke-3",...a})))}),[]);return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("header",{className:"yst-px-3 yst-mb-6 yst-space-y-6"},(0,e.createElement)(Ze,{id:`link-yoast-logo${r}`,to:"/",className:"yst-inline-block yst-rounded-md focus:yst-ring-primary-500","aria-label":"Yoast SEO"+(o?" Premium":"")},(0,e.createElement)(Li,{className:"yst-w-40",...a})),(0,e.createElement)(Cn,{buttonId:`button-search${r}`})),(0,e.createElement)("div",{className:"yst-px-0.5 yst-space-y-6"},(0,e.createElement)(Vn.MenuItem,{id:`menu-general${r}`,icon:xs,label:(0,Ps.__)("General","wordpress-seo")},(0,e.createElement)(Vn.SubmenuItem,{to:"/site-features",label:(0,Ps.__)("Site features","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/site-basics",label:(0,Ps.__)("Site basics","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/site-representation",label:(0,Ps.__)("Site representation","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/site-connections",label:(0,Ps.__)("Site connections","wordpress-seo"),idSuffix:r})),(0,e.createElement)(Vn.MenuItem,{id:`menu-content-types${r}`,icon:ks,label:(0,Ps.__)("Content types","wordpress-seo")},(0,e.createElement)(l.ChildrenLimiter,{limit:5,renderButton:n},(0,e.createElement)(Vn.SubmenuItem,{to:"/homepage",label:(0,Ps.__)("Homepage","wordpress-seo"),idSuffix:r}),(0,le.map)(t,(({name:t,route:s,label:a,isNew:o})=>(0,e.createElement)(Vn.SubmenuItem,{key:`link-post-type-${t}`,to:`/post-type/${s}`,label:(0,e.createElement)("span",{className:"yst-inline-flex yst-items-center yst-gap-1.5"},a,o&&(0,e.createElement)(l.Badge,{variant:"info"},(0,Ps.__)("New","wordpress-seo"))),idSuffix:r}))))),(0,e.createElement)(Vn.MenuItem,{id:`menu-categories-and-tags${r}`,icon:Ss,label:(0,Ps.__)("Categories & tags","wordpress-seo")},(0,e.createElement)(l.ChildrenLimiter,{limit:5,renderButton:n},(0,le.map)(s,(t=>(0,e.createElement)(Vn.SubmenuItem,{key:`link-taxonomy-${t.name}`,to:`/taxonomy/${t.route}`,label:(0,e.createElement)("span",{className:"yst-inline-flex yst-items-center yst-gap-1.5"},t.label,t.isNew&&(0,e.createElement)(l.Badge,{variant:"info"},(0,Ps.__)("New","wordpress-seo"))),idSuffix:r}))))),(0,e.createElement)(Vn.MenuItem,{id:`menu-advanced${r}`,icon:Ls,label:(0,Ps.__)("Advanced","wordpress-seo"),defaultOpen:!1},(0,e.createElement)(Vn.SubmenuItem,{to:"/crawl-optimization",label:(0,Ps.__)("Crawl optimization","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/breadcrumbs",label:(0,Ps.__)("Breadcrumbs","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/author-archives",label:(0,Ps.__)("Author archives","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/date-archives",label:(0,Ps.__)("Date archives","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/format-archives",label:(0,Ps.__)("Format archives","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/special-pages",label:(0,Ps.__)("Special pages","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/media-pages",label:(0,Ps.__)("Media pages","wordpress-seo"),idSuffix:r}),(0,e.createElement)(Vn.SubmenuItem,{to:"/rss",label:(0,Ps.__)("RSS","wordpress-seo"),idSuffix:r}))))};hl.propTypes={postTypes:Os().object.isRequired,taxonomies:Os().object.isRequired,idSuffix:Os().string};const yl=()=>{const t=zs("selectLink",[],"https://yoa.st/17h"),s=zs("selectUpsellSettingsAsProps"),r=zs("selectPreference",[],"promotions",[]).includes("black-friday-2023-promotion");return(0,e.createElement)(l.Paper,{as:"div",className:"xl:yst-max-w-3xl"},r&&(0,e.createElement)("div",{className:"yst-rounded-t-lg yst-h-9 yst-flex yst-justify-between yst-items-center yst-bg-black yst-text-amber-300 yst-px-4 yst-text-lg yst-border-b yst-border-amber-300 yst-border-solid yst-font-semibold"},(0,e.createElement)("div",null,(0,Ps.__)("BLACK FRIDAY","wordpress-seo")),(0,e.createElement)("div",null,(0,Ps.__)("30% OFF","wordpress-seo"))),(0,e.createElement)("div",{className:"yst-p-6 yst-flex yst-flex-col"},(0,e.createElement)(l.Title,{as:"h2",size:"4",className:"yst-text-xl yst-text-primary-500"},(0,Ps.sprintf)(/* translators: %s expands to "Yoast SEO" Premium */ +(0,Ps.__)("Upgrade to %s","wordpress-seo"),"Yoast SEO Premium")),(0,e.createElement)("ul",{className:"yst-grid yst-grid-cols-1 sm:yst-grid-cols-2 yst-gap-x-6 yst-list-disc yst-pl-[1em] yst-list-outside yst-text-slate-800 yst-mt-6"},[(0,Ps.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,Ps.__)("%1$sAI%2$s: Better SEO titles and meta descriptions, faster.","wordpress-seo"),"",""),(0,Ps.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,Ps.__)("%1$sMultiple keywords%2$s: Rank higher for more searches.","wordpress-seo"),"",""),(0,Ps.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,Ps.__)("%1$sSuper fast%2$s internal linking suggestions.","wordpress-seo"),"",""),(0,Ps.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,Ps.__)("%1$sNo more broken links%2$s: Automatic redirect manager.","wordpress-seo"),"",""),(0,Ps.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,Ps.__)("%1$sAppealing social previews%2$s people actually want to click on.","wordpress-seo"),"",""),(0,Ps.sprintf)(/* translators: %1$s expands to a strong opening tag, %2$s expands to a strong closing tag. */ +(0,Ps.__)("%1$s24/7 support%2$s: Also on evenings and weekends.","wordpress-seo"),"","")].map(((t,s)=>(0,e.createElement)("li",{key:`upsell-benefit-${s}`},(0,i.createInterpolateElement)(t,{strong:(0,e.createElement)("span",{className:"yst-font-semibold"})}))))),(0,e.createElement)(l.Button,{as:"a",variant:"upsell",size:"extra-large",href:t,className:"yst-gap-2 yst-mt-4",target:"_blank",rel:"noopener",...s},r?(0,Ps.__)("Claim your 30% off now!","wordpress-seo"):(0,Ps.sprintf)(/* translators: %s expands to "Yoast SEO" Premium */ +(0,Ps.__)("Explore %s now!","wordpress-seo"),"Yoast SEO Premium"),(0,e.createElement)(Ts,{className:"yst-w-4 yst-h-4 yst-icon-rtl"}))))},_l=()=>{const{pathname:t}=Be(),s=zs("selectPostTypes"),r=zs("selectTaxonomies"),a=zs("selectPreference",[],"isPremium");(()=>{const{hash:e,pathname:t,key:s}=Be();(0,i.useEffect)((()=>{const t=e.replace("#",""),s=document.getElementById(t)||document.querySelector(`[data-id="${t}"]`);if(s)s.scrollIntoView({behavior:"smooth"}),setTimeout((()=>s.focus()),800);else{const e=document.getElementById("yoast-seo-settings");null==e||e.scrollIntoView({behavior:"smooth"})}}),[t,e,s])})();const{dirty:o}=q();return(0,l.useBeforeUnload)(o,(0,Ps.__)("There are unsaved changes on this page. Leaving means that those changes will be lost. Are you sure you want to leave this page?","wordpress-seo")),(0,e.createElement)(e.Fragment,null,(0,e.createElement)(Lr,null),(0,e.createElement)(Vn,{activePath:t},(0,e.createElement)(Vn.Mobile,{openButtonId:"button-open-settings-navigation-mobile",closeButtonId:"button-close-settings-navigation-mobile" +/* translators: Hidden accessibility text. */,openButtonScreenReaderText:(0,Ps.__)("Open settings navigation","wordpress-seo") +/* translators: Hidden accessibility text. */,closeButtonScreenReaderText:(0,Ps.__)("Close settings navigation","wordpress-seo"),"aria-label":(0,Ps.__)("Settings navigation","wordpress-seo")},(0,e.createElement)(hl,{idSuffix:"-mobile",postTypes:s,taxonomies:r})),(0,e.createElement)("div",{className:"yst-p-4 min-[783px]:yst-p-8 yst-flex yst-gap-4"},(0,e.createElement)("aside",{className:"yst-sidebar yst-sidebar-nav yst-shrink-0 yst-hidden min-[783px]:yst-block yst-pb-6 yst-bottom-0 yst-w-56"},(0,e.createElement)(Vn.Sidebar,null,(0,e.createElement)(hl,{postTypes:s,taxonomies:r}))),(0,e.createElement)("div",{className:Rs()("yst-flex yst-grow yst-flex-wrap",!a&&"xl:yst-pr-[17.5rem]")},(0,e.createElement)("div",{className:"yst-grow yst-space-y-6 yst-mb-8 xl:yst-mb-0"},(0,e.createElement)(l.Paper,{as:"main"},(0,e.createElement)(l.ErrorBoundary,{FallbackComponent:Ei},(0,e.createElement)(Es,{key:t,appear:!0,show:!0,enter:"yst-transition-opacity yst-delay-100 yst-duration-300",enterFrom:"yst-opacity-0",enterTo:"yst-opacity-100"},(0,e.createElement)(We,null,(0,e.createElement)(Ue,{path:"author-archives",element:(0,e.createElement)(Ai,null)}),(0,e.createElement)(Ue,{path:"breadcrumbs",element:(0,e.createElement)(Ci,null)}),(0,e.createElement)(Ue,{path:"crawl-optimization",element:(0,e.createElement)(ji,null)}),(0,e.createElement)(Ue,{path:"date-archives",element:(0,e.createElement)(Ui,null)}),(0,e.createElement)(Ue,{path:"homepage",element:(0,e.createElement)(Gi,null)}),(0,e.createElement)(Ue,{path:"format-archives",element:(0,e.createElement)(Wi,null)}),(0,e.createElement)(Ue,{path:"media-pages",element:(0,e.createElement)(Ki,null)}),(0,e.createElement)(Ue,{path:"rss",element:(0,e.createElement)(Qi,null)}),(0,e.createElement)(Ue,{path:"site-basics",element:(0,e.createElement)(el,null)}),(0,e.createElement)(Ue,{path:"site-connections",element:(0,e.createElement)(fl,null)}),(0,e.createElement)(Ue,{path:"site-representation",element:(0,e.createElement)(cl,null)}),(0,e.createElement)(Ue,{path:"site-features",element:(0,e.createElement)(al,null)}),(0,e.createElement)(Ue,{path:"special-pages",element:(0,e.createElement)(dl,null)}),(0,e.createElement)(Ue,{path:"post-type"},(0,le.map)(s,(t=>(0,e.createElement)(Ue,{key:`route-post-type-${t.name}`,path:t.route,element:(0,e.createElement)(Ii,{...t})})))),(0,e.createElement)(Ue,{path:"taxonomy"},(0,le.map)(r,(t=>(0,e.createElement)(Ue,{key:`route-taxonomy-${t.name}`,path:t.route,element:(0,e.createElement)(Oi,{...t})})))),(0,e.createElement)(Ue,{path:"*",element:(0,e.createElement)(ze,{to:"/site-features",replace:!0})}))))),!a&&(0,e.createElement)(yl,null)),(0,e.createElement)(_i,null)))))},wl=()=>(0,le.get)(window,"wpseoScriptData.postTypes",{}),gl="updatePostTypeReviewStatus",bl=(0,Xe.createSlice)({name:"postTypes",initialState:wl(),reducers:{},extraReducers:e=>{e.addCase(`${gl}/result`,((e,{payload:t})=>{e[t].isNew=!1}))}}),vl={selectPostType:(e,t,s={})=>(0,le.get)(e,`postTypes.${t}`,s),selectAllPostTypes:(e,t=null)=>{const s=(0,le.get)(e,"postTypes",{});return t?(0,le.pick)(s,t):s}};vl.selectPostTypes=(0,Xe.createSelector)(vl.selectAllPostTypes,(e=>(0,le.omit)(e,["attachment"])));const El={[gl]:async({payload:e})=>gt()({path:"/yoast/v1/new-content-type-visibility/dismiss-post-type",method:"POST",data:{post_type_name:e}})},xl={...bl.actions,updatePostTypeReviewStatus:function*(e){try{yield{type:gl,payload:e}}catch(t){console.error(`Error: Failed to remove "New" badge for ${e}, ${t}`)}return{type:`${gl}/result`,payload:e}}},kl=bl.reducer,Sl=()=>{var e;return{...(0,le.get)(window,"wpseoScriptData.preferences",{}),documentTitle:(0,le.defaultTo)(null===(e=document)||void 0===e?void 0:e.title,"")}},Ll=(0,Xe.createSlice)({name:"preferences",initialState:Sl(),reducers:{}}),Tl={selectPreference:(e,t,s={})=>(0,le.get)(e,`preferences.${t}`,s),selectPreferences:e=>(0,le.get)(e,"preferences",{})};Tl.selectHasPageForPosts=(0,Xe.createSelector)([e=>Tl.selectPreference(e,"homepageIsLatestPosts"),e=>Tl.selectPreference(e,"homepagePostsEditUrl")],((e,t)=>!e&&!(0,le.isEmpty)(t))),Tl.selectCanEditUser=(0,Xe.createSelector)([e=>Tl.selectPreference(e,"currentUserId",-1),e=>Tl.selectPreference(e,"canEditUsers",!1),(e,t)=>t],((e,t,s)=>e===s||t)),Tl.selectExampleUrl=(0,Xe.createSelector)([e=>Tl.selectPreference(e,"siteUrl","https://example.com"),(e,t)=>t],((e,t)=>e+t)),Tl.selectPluginUrl=(0,Xe.createSelector)([e=>Tl.selectPreference(e,"pluginUrl","https://example.com"),(e,t)=>t],((e,t)=>e+t)),Tl.selectUpsellSettingsAsProps=(0,Xe.createSelector)([e=>Tl.selectPreference(e,"upsellSettings",{}),(e,t="premiumCtbId")=>t],((e,t)=>({"data-action":null==e?void 0:e.actionId,"data-ctb-id":null==e?void 0:e[t]})));const Fl=Ll.actions,$l=Ll.reducer,Pl=()=>(0,le.reduce)((0,le.get)(window,"wpseoScriptData.taxonomies",{}),((e,{postTypes:t,...s},r)=>({...e,[r]:{...s,postTypes:(0,le.values)(t)}})),{}),Il="updateTaxonomyReviewStatus",Rl=(0,Xe.createSlice)({name:"taxonomies",initialState:Pl(),reducers:{},extraReducers:e=>{e.addCase(`${Il}/result`,((e,{payload:t})=>{e[t].isNew=!1}))}}),Nl={selectTaxonomy:(e,t,s={})=>(0,le.get)(e,`taxonomies.${t}`,s),selectAllTaxonomies:e=>(0,le.get)(e,"taxonomies",{})};Nl.selectTaxonomies=(0,Xe.createSelector)(Nl.selectAllTaxonomies,(e=>(0,le.omit)(e,["post_format"])));const Ol={[Il]:async({payload:e})=>gt()({path:"/yoast/v1/new-content-type-visibility/dismiss-taxonomy",method:"POST",data:{taxonomy_name:e}})},Ml={...Rl.actions,updateTaxonomyReviewStatus:function*(e){try{yield{type:Il,payload:e}}catch(t){console.error(`Error: Failed to remove "New" badge for ${e}, ${t}`)}return{type:`${Il}/result`,payload:e}}},Al=Rl.reducer,Cl={selectBreadcrumbsForPostTypes:(0,Xe.createSelector)([Nl.selectAllTaxonomies,vl.selectAllPostTypes],((e,t)=>{const s={value:0,label:(0,Ps.__)("None","wordpress-seo")},r={};return(0,le.forEach)(t,((t,a)=>{const o=(0,le.filter)(e,(e=>(0,le.includes)(e.postTypes,a)));(0,le.isEmpty)(o)||(r[a]={...t,options:[s,...(0,le.map)(o,(({name:e,label:t})=>({value:e,label:t})))]})})),r})),selectBreadcrumbsForTaxonomies:(0,Xe.createSelector)([Nl.selectAllTaxonomies,vl.selectAllPostTypes,Tl.selectHasPageForPosts],((e,t,s)=>{let r=[{value:0,label:(0,Ps.__)("None","wordpress-seo")}];s&&r.push({value:"post",label:(0,Ps.__)("Blog","wordpress-seo")});const a=(0,le.filter)(t,(({hasArchive:e})=>e));return r=r.concat((0,le.map)(a,(({name:e,label:t})=>({value:e,label:t})))),(0,le.mapValues)(e,(e=>({name:e.name,label:e.label,options:r})))}))},Dl=()=>({...(0,le.get)(window,"wpseoScriptData.defaultSettingValues",{})}),Bl=(0,Xe.createSlice)({name:"defaultSettingValues",initialState:Dl(),reducers:{}}),Vl={selectDefaultSettingValue:(e,t,s={})=>(0,le.get)(e,`defaultSettingValues.${t}`,s),selectDefaultSettingValues:e=>(0,le.get)(e,"defaultSettingValues",{})},jl=Bl.actions,zl=Bl.reducer,Ul=()=>(0,le.get)(window,"wpseoScriptData.fallbacks",{}),ql=(0,Xe.createSlice)({name:"fallbacks",initialState:Ul(),reducers:{}}),Wl={selectFallback:(e,t,s={})=>(0,le.get)(e,`fallbacks.${t}`,s),selectFallbacks:e=>(0,le.get)(e,"fallbacks",{})},Hl=ql.actions,Yl=ql.reducer,Gl=(0,Xe.createEntityAdapter)(),Kl=()=>Gl.getInitialState({status:xt,error:""}),Zl="fetchMedia",Ql=e=>{var t,s;return{id:null==e?void 0:e.id,title:(null==e||null===(t=e.title)||void 0===t?void 0:t.rendered)||(null==e?void 0:e.title),slug:(null==e?void 0:e.slug)||(null==e?void 0:e.name),alt:(null==e?void 0:e.alt_text)||(null==e?void 0:e.alt),url:(null==e?void 0:e.source_url)||(null==e?void 0:e.url),type:(null==e?void 0:e.media_type)||(null==e?void 0:e.type),mime:(null==e?void 0:e.mime_type)||(null==e?void 0:e.mime),author:null==e?void 0:e.author,sizes:(0,le.mapValues)((null==e?void 0:e.sizes)||(null==e||null===(s=e.media_details)||void 0===s?void 0:s.sizes),(e=>({url:(null==e?void 0:e.url)||(null==e?void 0:e.source_url),width:null==e?void 0:e.width,height:null==e?void 0:e.height})),{})}},Xl=(0,Xe.createSlice)({name:"media",initialState:Kl(),reducers:{addOneMedia:{reducer:Gl.addOne,prepare:e=>({payload:Ql(e)})},addManyMedia:{reducer:Gl.addMany,prepare:e=>({payload:(0,le.map)(e,Ql)})}},extraReducers:e=>{e.addCase(`${Zl}/${bt}`,(e=>{e.status=kt})),e.addCase(`${Zl}/${vt}`,((e,t)=>{e.status=St,Gl.addMany(e,(0,le.map)(t.payload,Ql))})),e.addCase(`${Zl}/${Et}`,((e,t)=>{e.status=Lt,e.error=t.payload}))}}),Jl=Gl.getSelectors((e=>e.media)),ec={selectMediaIds:Jl.selectIds,selectMediaById:Jl.selectById,selectIsMediaLoading:e=>(0,le.get)(e,"media.status",xt)===kt,selectIsMediaError:e=>(0,le.get)(e,"media.status",xt)===Lt},tc={...Xl.actions,fetchMedia:function*(e){yield{type:`${Zl}/${bt}`};try{const t=yield{type:Zl,payload:{per_page:100,include:e}};return{type:`${Zl}/${vt}`,payload:t}}catch(e){return{type:`${Zl}/${Et}`,payload:e}}}},sc={[Zl]:async({payload:e})=>gt()({path:`/wp/v2/media?${(0,st.buildQueryString)(e)}`})},rc=Xl.reducer,ac=window.wp.htmlEntities,oc=(0,Xe.createEntityAdapter)(),nc="fetchPages",ic="pages";let lc;const cc=e=>{var t;return{id:null==e?void 0:e.id,name:(0,ac.decodeEntities)((0,le.trim)(null==e?void 0:e.title.rendered))||(null==e?void 0:e.slug)||e.id,slug:null==e?void 0:e.slug,protected:null==e||null===(t=e.content)||void 0===t?void 0:t.protected}},dc=(0,Xe.createSlice)({name:"pages",initialState:oc.getInitialState({status:xt,error:""}),reducers:{addOnePage:{reducer:oc.addOne,prepare:e=>({payload:cc(e)})},addManyPages:{reducer:oc.addMany,prepare:e=>({payload:(0,le.map)(e,cc)})}},extraReducers:e=>{e.addCase(`${nc}/${bt}`,(e=>{e.status=kt})),e.addCase(`${nc}/${vt}`,((e,t)=>{e.status=St,oc.addMany(e,(0,le.map)(t.payload,cc))})),e.addCase(`${nc}/${Et}`,((e,t)=>{e.status=Lt,e.error=t.payload}))}}),uc=dc.getInitialState,pc=oc.getSelectors((e=>e.pages)),mc={selectPageIds:pc.selectIds,selectPageById:pc.selectById,selectPages:pc.selectEntities};mc.selectPagesWith=(0,Xe.createSelector)([mc.selectPages,(e,t={})=>t],((e,t)=>{const s={};t.forEach((t=>{null!=t&&t.id&&!e[t.id]&&(s[t.id]={...t})}));const r=(0,le.pickBy)(e,(e=>!e.protected));return{...s,...r}}));const fc={...dc.actions,fetchPages:function*(e){yield{type:`${nc}/${bt}`};try{const t=yield{type:nc,payload:{...e}};return{type:`${nc}/${vt}`,payload:t}}catch(e){return{type:`${nc}/${Et}`,payload:e}}}},hc={[nc]:async({payload:e})=>{var t;return null===(t=lc)||void 0===t||t.abort(),lc=new AbortController,gt()({path:`/wp/v2/pages?${(0,st.buildQueryString)(e)}`,signal:lc.signal})}},yc=dc.reducer,_c=()=>({recommended:(0,le.get)(window,"wpseoScriptData.replacementVariables.recommended",{}),shared:(0,le.get)(window,"wpseoScriptData.replacementVariables.shared",[]),specific:(0,le.get)(window,"wpseoScriptData.replacementVariables.specific",{}),variables:(0,le.get)(window,"wpseoScriptData.replacementVariables.variables",[])}),wc=(0,Xe.createSlice)({name:"replacementVariables",initialState:_c(),reducers:{}}),gc={selectRecommendedReplacementVariables:e=>(0,le.get)(e,"replacementVariables.recommended",{}),selectSharedReplacementVariables:e=>(0,le.get)(e,"replacementVariables.shared",[]),selectSpecificReplacementVariables:e=>(0,le.get)(e,"replacementVariables.specific",{}),selectReplacementVariables:e=>(0,le.get)(e,"replacementVariables.variables",[])};gc.selectSpecificReplacementVariablesFor=(0,Xe.createSelector)([gc.selectSharedReplacementVariables,gc.selectSpecificReplacementVariables,(e,t)=>t,(e,t,s)=>s],((e,t,s,r)=>[...e,...(0,le.get)(t,s,(0,le.get)(t,r,[]))])),gc.selectReplacementVariablesFor=(0,Xe.createSelector)([gc.selectReplacementVariables,gc.selectSpecificReplacementVariablesFor],((e,t)=>(0,le.filter)(e,(({name:e})=>(0,le.includes)(t,e))))),gc.selectRecommendedReplacementVariablesFor=(0,Xe.createSelector)([gc.selectRecommendedReplacementVariables,(e,t)=>t,(e,t,s)=>s],((e,t,s)=>(0,le.get)(e,t,(0,le.get)(e,s,[]))));const bc=wc.actions,vc=wc.reducer,Ec=(e,t)=>{ +// translators: %1$s expands to the schema type, e.g. "Web Page" or "Blog Post". +const s=(0,Ps.__)("%1$s (default)","wordpress-seo");return e.map((({label:e,value:r})=>({value:r,label:r===t?(0,Ps.sprintf)(s,e):e})))},xc=()=>({articleTypes:(0,le.get)(window,"wpseoScriptData.schema.articleTypes",{}),articleTypeDefaults:(0,le.get)(window,"wpseoScriptData.schema.articleTypeDefaults",{}),pageTypes:(0,le.get)(window,"wpseoScriptData.schema.pageTypes",{}),pageTypeDefaults:(0,le.get)(window,"wpseoScriptData.schema.pageTypeDefaults",{})}),kc=(0,Xe.createSlice)({name:"schema",initialState:xc(),reducers:{}}),Sc={selectSchema:e=>(0,le.get)(e,"schema",{}),selectArticleTypes:e=>(0,le.get)(e,"schema.articleTypes",{}),selectArticleTypeDefaults:e=>(0,le.get)(e,"schema.articleTypeDefaults",{}),selectPageTypes:e=>(0,le.get)(e,"schema.pageTypes",{}),selectPageTypeDefaults:e=>(0,le.get)(e,"schema.pageTypeDefaults",{})};Sc.selectArticleTypeValues=(0,Xe.createSelector)(Sc.selectArticleTypes,(e=>(0,le.values)(e))),Sc.selectArticleTypeDefault=(0,Xe.createSelector)([Sc.selectArticleTypeDefaults,(e,t)=>t],((e,t)=>(0,le.get)(e,t,"None"))),Sc.selectArticleTypeValuesFor=(0,Xe.createSelector)([Sc.selectArticleTypeValues,Sc.selectArticleTypeDefault],((e,t)=>Ec(e,t))),Sc.selectPageTypeValues=(0,Xe.createSelector)(Sc.selectPageTypes,(e=>(0,le.values)(e))),Sc.selectPageTypeDefault=(0,Xe.createSelector)([Sc.selectPageTypeDefaults,(e,t)=>t],((e,t)=>(0,le.get)(e,t,"WebPage"))),Sc.selectPageTypeValuesFor=(0,Xe.createSelector)([Sc.selectPageTypeValues,Sc.selectPageTypeDefault],((e,t)=>Ec(e,t)));const Lc=kc.actions,Tc=kc.reducer,Fc=(e,{userLocale:t})=>so((0,le.join)([...(0,le.isArray)(null==e?void 0:e.keywords)?e.keywords:[],null==e?void 0:e.routeLabel,null==e?void 0:e.fieldLabel]," "),t),$c=(e,t="",{userLocale:s})=>(0,le.reduce)(e,((e,r,a)=>{const o=(0,le.join)((0,le.filter)([t,a],Boolean),".");return"other_social_urls"===a?{...e,[o]:{route:null==r?void 0:r.route,routeLabel:null==r?void 0:r.routeLabel,fieldId:null==r?void 0:r.fieldId,fieldLabel:null==r?void 0:r.fieldLabel,keywords:Fc(r,{userLocale:s})}}:null!=r&&r.route?{...e,[o]:{...r,keywords:Fc(r,{userLocale:s})}}:{...e,...$c(r,o,{userLocale:s})}}),{}),Pc=()=>{const e=(0,le.get)(window,"wpseoScriptData.postTypes",{}),t=(0,le.get)(window,"wpseoScriptData.taxonomies",{}),s=(0,le.get)(window,"wpseoScriptData.preferences.userLocale",{});return{index:oo(e,t,{userLocale:s})}},Ic=(0,Xe.createSlice)({name:"search",initialState:Pc(),reducers:{}}),Rc={selectSearchIndex:e=>(0,le.get)(e,"search.index",{})};Rc.selectQueryableSearchIndex=(0,Xe.createSelector)([Rc.selectSearchIndex,e=>Tl.selectPreference(e,"userLocale")],((e,t)=>$c(e,"",{userLocale:t})));const Nc=Ic.actions,Oc=Ic.reducer,Mc=(0,Xe.createEntityAdapter)(),Ac="fetchUsers",Cc=()=>Mc.getInitialState({status:xt,error:""}),Dc=e=>({id:null==e?void 0:e.id,name:(0,le.trim)(null==e?void 0:e.name)||(null==e?void 0:e.slug)||(null==e?void 0:e.id),slug:null==e?void 0:e.slug}),Bc=(0,Xe.createSlice)({name:"users",initialState:Cc(),reducers:{addOneUser:{reducer:Mc.addOne,prepare:e=>({payload:Dc(e)})},addManyUsers:{reducer:Mc.addMany,prepare:e=>({payload:(0,le.map)(e,Dc)})}},extraReducers:e=>{e.addCase(`${Ac}/${bt}`,(e=>{e.status=kt})),e.addCase(`${Ac}/${vt}`,((e,t)=>{e.status=St,Mc.addMany(e,(0,le.map)(t.payload,Dc))})),e.addCase(`${Ac}/${Et}`,((e,t)=>{e.status=Lt,e.error=t.payload}))}}),Vc=Mc.getSelectors((e=>e.users)),jc={selectUserIds:Vc.selectIds,selectUserById:Vc.selectById,selectUsers:Vc.selectEntities};jc.selectUsersWith=(0,Xe.createSelector)([jc.selectUsers,(e,t={})=>t],((e,t)=>null!=t&&t.id&&!e[t.id]?{...e,[t.id]:{...t}}:e));const zc={...Bc.actions,fetchUsers:function*(e){yield{type:`${Ac}/${bt}`};try{const t=yield{type:Ac,payload:{...e}};return{type:`${Ac}/${vt}`,payload:t}}catch(e){return{type:`${Ac}/${Et}`,payload:e}}}},Uc={[Ac]:async({payload:e})=>gt()({path:`/wp/v2/users?${(0,st.buildQueryString)(e)}`})},qc=Bc.reducer,Wc=({initialState:e={}}={})=>{(0,a.register)((({initialState:e})=>(0,a.createReduxStore)(Ds,{actions:{...jl,...Hl,...it,...tc,...mt,...fc,...xl,...Fl,...bc,...Lc,...Nc,...Ml,...zc},selectors:{...Cl,...Vl,...Wl,...nt,...ec,...pt,...mc,...vl,...Tl,...gc,...Sc,...Rc,...Nl,...jc},initialState:(0,le.merge)({},{defaultSettingValues:Dl(),fallbacks:Ul(),[rt]:ot(),media:Kl(),[ct]:ut(),[ic]:uc(),postTypes:wl(),preferences:Sl(),replacementVariables:_c(),schema:xc(),search:Pc(),taxonomies:Pl(),users:Cc()},e),reducer:(0,a.combineReducers)({defaultSettingValues:zl,fallbacks:Yl,[rt]:lt,media:rc,[ct]:ft,[ic]:yc,postTypes:kl,preferences:$l,replacementVariables:vc,schema:Tc,search:Oc,taxonomies:Al,users:qc}),controls:{...sc,...Uc,...El,...Ol,...hc}}))({initialState:e}))};n()((()=>{const t=document.getElementById("yoast-seo-settings");if(!t)return;const s=document.createElement("div"),o=s.attachShadow({mode:"open"});document.body.appendChild(s);const n=(0,le.get)(window,"wpseoScriptData.settings",{}),c=(0,le.get)(window,"wpseoScriptData.fallbacks",{}),d=(0,le.get)(window,"wpseoScriptData.postTypes",{}),u=(0,le.get)(window,"wpseoScriptData.taxonomies",{}),p=(0,le.get)(window,"wpseoScriptData.showNewContentTypeNotification",!1)?{"new-content-type":{id:"new-content-type",variant:"info",size:"large",title:(0,Ps.__)("New type of content added to your site!","wordpress-seo"),description:(0,Ps.__)("Please see the “New†badges and review the Search appearance settings.","wordpress-seo")}}:{};Wc({initialState:{notifications:p,[rt]:(0,le.get)(window,"wpseoScriptData.linkParams",{})}}),(async({settings:e,fallbacks:t})=>{const s=(0,le.get)(e,"wpseo_titles",{}),r=(0,le.filter)([(0,le.get)(e,"wpseo_social.og_default_image_id","0"),(0,le.get)(e,"wpseo_titles.open_graph_frontpage_image_id","0"),(0,le.get)(e,"wpseo_titles.company_logo_id","0"),(0,le.get)(e,"wpseo_titles.person_logo_id","0"),(0,le.get)(t,"siteLogoId","0"),...(0,le.reduce)(s,((e,t,s)=>(0,le.includes)(s,"social-image-id")?[...e,t]:e),[])],Boolean),o=(0,le.chunk)(r,100),{fetchMedia:n}=(0,a.dispatch)(Ds);(0,le.forEach)(o,n)})({settings:n,fallbacks:c}),(async({settings:e})=>{const t=(0,le.get)(e,"wpseo_titles.company_or_person_user_id"),{fetchUsers:s}=(0,a.dispatch)(Ds);t&&s({include:[t]})})({settings:n}),document.querySelector('[href="#wpbody-content"]').addEventListener("click",(e=>{var t,s;e.preventDefault(),window.outerWidth>782?null===(s=document.getElementById("link-yoast-logo"))||void 0===s||s.focus():null===(t=document.getElementById("button-open-settings-navigation-mobile"))||void 0===t||t.focus()})),document.querySelector('[href="#wp-toolbar"]').addEventListener("click",(e=>{var t;e.preventDefault(),null===(t=document.querySelector("#wp-admin-bar-wp-logo a"))||void 0===t||t.focus()})),(()=>{const e=document.getElementById("wpcontent"),t=document.getElementById("adminmenuwrap");e&&t&&(e.style.minHeight=`${t.offsetHeight}px`)})();const m=(0,a.select)(Ds).selectPreference("isRtl",!1);(0,i.render)((0,e.createElement)(l.Root,{context:{isRtl:m}},(0,e.createElement)(Qe.StyleSheetManager,{target:o},(0,e.createElement)(r.SlotFillProvider,null,(0,e.createElement)(Ke,null,(0,e.createElement)(K,{initialValues:n,validationSchema:In(d,u),onSubmit:io},(0,e.createElement)(_l,null)))))),t)}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/post-edit.js b/wp/wp-content/plugins/wordpress-seo/js/dist/post-edit.js new file mode 100644 index 00000000..f2e36dc8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/post-edit.js @@ -0,0 +1,23 @@ +(()=>{var e={2322:e=>{var t,s,n="",i=function(e){e=e||"polite";var t=document.createElement("div");return t.id="a11y-speak-"+e,t.className="a11y-speak-region",t.setAttribute("style","clip: rect(1px, 1px, 1px, 1px); position: absolute; height: 1px; width: 1px; overflow: hidden; word-wrap: normal;"),t.setAttribute("aria-live",e),t.setAttribute("aria-relevant","additions text"),t.setAttribute("aria-atomic","true"),document.querySelector("body").appendChild(t),t};!function(e){if("complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll)return e();document.addEventListener("DOMContentLoaded",e)}((function(){t=document.getElementById("a11y-speak-polite"),s=document.getElementById("a11y-speak-assertive"),null===t&&(t=i("polite")),null===s&&(s=i("assertive"))})),e.exports=function(e,i){!function(){for(var e=document.querySelectorAll(".a11y-speak-region"),t=0;t]+>/g," "),n===e&&(e+=" "),n=e,s&&"assertive"===i?s.textContent=e:t&&(t.textContent=e)}},7084:function(e,t,s){!function(t){"use strict";var s={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:y,table:y,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/};function n(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||v.defaults,this.rules=s.normal,this.options.pedantic?this.rules=s.pedantic:this.options.gfm&&(this.rules=s.gfm)}s._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,s._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,s.def=u(s.def).replace("label",s._label).replace("title",s._title).getRegex(),s.bullet=/(?:[*+-]|\d{1,9}\.)/,s.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,s.item=u(s.item,"gm").replace(/bull/g,s.bullet).getRegex(),s.list=u(s.list).replace(/bull/g,s.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+s.def.source+")").getRegex(),s._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",s._comment=//,s.html=u(s.html,"i").replace("comment",s._comment).replace("tag",s._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),s.paragraph=u(s._paragraph).replace("hr",s.hr).replace("heading"," {0,3}#{1,6} +").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",s._tag).getRegex(),s.blockquote=u(s.blockquote).replace("paragraph",s.paragraph).getRegex(),s.normal=f({},s),s.gfm=f({},s.normal,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),s.pedantic=f({},s.normal,{html:u("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",s._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:y,paragraph:u(s.normal._paragraph).replace("hr",s.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",s.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()}),n.rules=s,n.lex=function(e,t){return new n(t).lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,t){var n,i,r,a,o,l,c,d,u,h,g,m,y,f,_,k;for(e=e.replace(/^ +$/gm,"");e;)if((r=this.rules.newline.exec(e))&&(e=e.substring(r[0].length),r[0].length>1&&this.tokens.push({type:"space"})),r=this.rules.code.exec(e)){var v=this.tokens[this.tokens.length-1];e=e.substring(r[0].length),v&&"paragraph"===v.type?v.text+="\n"+r[0].trimRight():(r=r[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",codeBlockStyle:"indented",text:this.options.pedantic?r:b(r,"\n")}))}else if(r=this.rules.fences.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"code",lang:r[2]?r[2].trim():r[2],text:r[3]||""});else if(r=this.rules.heading.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"heading",depth:r[1].length,text:r[2]});else if((r=this.rules.nptable.exec(e))&&(l={type:"table",header:w(r[1].replace(/^ *| *\| *$/g,"")),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3]?r[3].replace(/\n$/,"").split("\n"):[]}).header.length===l.align.length){for(e=e.substring(r[0].length),g=0;g ?/gm,""),this.token(r,t),this.tokens.push({type:"blockquote_end"});else if(r=this.rules.list.exec(e)){for(e=e.substring(r[0].length),c={type:"list_start",ordered:f=(a=r[2]).length>1,start:f?+a:"",loose:!1},this.tokens.push(c),d=[],n=!1,y=(r=r[0].match(this.rules.item)).length,g=0;g1?1===o.length:o.length>1||this.options.smartLists&&o!==a)&&(e=r.slice(g+1).join("\n")+e,g=y-1)),i=n||/\n\n(?!\s*$)/.test(l),g!==y-1&&(n="\n"===l.charAt(l.length-1),i||(i=n)),i&&(c.loose=!0),k=void 0,(_=/^\[[ xX]\] /.test(l))&&(k=" "!==l[1],l=l.replace(/^\[[ xX]\] +/,"")),u={type:"list_item_start",task:_,checked:k,loose:i},d.push(u),this.tokens.push(u),this.token(l,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(y=d.length,g=0;g?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:y,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:y,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\?@\\[^_{|}~",i.em=u(i.em).replace(/punctuation/g,i._punctuation).getRegex(),i._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,i._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,i._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,i.autolink=u(i.autolink).replace("scheme",i._scheme).replace("email",i._email).getRegex(),i._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,i.tag=u(i.tag).replace("comment",s._comment).replace("attribute",i._attribute).getRegex(),i._label=/(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,i._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,i._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,i.link=u(i.link).replace("label",i._label).replace("href",i._href).replace("title",i._title).getRegex(),i.reflink=u(i.reflink).replace("label",i._label).getRegex(),i.normal=f({},i),i.pedantic=f({},i.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:u(/^!?\[(label)\]\((.*?)\)/).replace("label",i._label).getRegex(),reflink:u(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",i._label).getRegex()}),i.gfm=f({},i.normal,{escape:u(i.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\/i.test(a[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(a[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0])&&(this.inRawBlock=!1),e=e.substring(a[0].length),l+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):p(a[0]):a[0];else if(a=this.rules.link.exec(e)){var c=_(a[2],"()");if(c>-1){var d=4+a[1].length+c;a[2]=a[2].substring(0,c),a[0]=a[0].substring(0,d).trim(),a[3]=""}e=e.substring(a[0].length),this.inLink=!0,n=a[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n))?(n=t[1],i=t[3]):i="":i=a[3]?a[3].slice(1,-1):"",n=n.trim().replace(/^<([\s\S]*)>$/,"$1"),l+=this.outputLink(a,{href:r.escapes(n),title:r.escapes(i)}),this.inLink=!1}else if((a=this.rules.reflink.exec(e))||(a=this.rules.nolink.exec(e))){if(e=e.substring(a[0].length),t=(a[2]||a[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){l+=a[0].charAt(0),e=a[0].substring(1)+e;continue}this.inLink=!0,l+=this.outputLink(a,t),this.inLink=!1}else if(a=this.rules.strong.exec(e))e=e.substring(a[0].length),l+=this.renderer.strong(this.output(a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.em.exec(e))e=e.substring(a[0].length),l+=this.renderer.em(this.output(a[6]||a[5]||a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.code.exec(e))e=e.substring(a[0].length),l+=this.renderer.codespan(p(a[2].trim(),!0));else if(a=this.rules.br.exec(e))e=e.substring(a[0].length),l+=this.renderer.br();else if(a=this.rules.del.exec(e))e=e.substring(a[0].length),l+=this.renderer.del(this.output(a[1]));else if(a=this.rules.autolink.exec(e))e=e.substring(a[0].length),n="@"===a[2]?"mailto:"+(s=p(this.mangle(a[1]))):s=p(a[1]),l+=this.renderer.link(n,null,s);else if(this.inLink||!(a=this.rules.url.exec(e))){if(a=this.rules.text.exec(e))e=e.substring(a[0].length),this.inRawBlock?l+=this.renderer.text(this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):p(a[0]):a[0]):l+=this.renderer.text(p(this.smartypants(a[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===a[2])n="mailto:"+(s=p(a[0]));else{do{o=a[0],a[0]=this.rules._backpedal.exec(a[0])[0]}while(o!==a[0]);s=p(a[0]),n="www."===a[1]?"http://"+s:s}e=e.substring(a[0].length),l+=this.renderer.link(n,null,s)}return l},r.escapes=function(e){return e?e.replace(r.rules._escapes,"$1"):e},r.prototype.outputLink=function(e,t){var s=t.href,n=t.title?p(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(s,n,this.output(e[1])):this.renderer.image(s,n,p(e[1]))},r.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"â€").replace(/\.{3}/g,"…"):e},r.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,s="",n=e.length,i=0;i.5&&(t="x"+t.toString(16)),s+="&#"+t+";";return s},a.prototype.code=function(e,t,s){var n=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,n);null!=i&&i!==e&&(s=!0,e=i)}return n?'
            '+(s?e:p(e,!0))+"
            \n":"
            "+(s?e:p(e,!0))+"
            "},a.prototype.blockquote=function(e){return"
            \n"+e+"
            \n"},a.prototype.html=function(e){return e},a.prototype.heading=function(e,t,s,n){return this.options.headerIds?"'+e+"\n":""+e+"\n"},a.prototype.hr=function(){return this.options.xhtml?"
            \n":"
            \n"},a.prototype.list=function(e,t,s){var n=t?"ol":"ul";return"<"+n+(t&&1!==s?' start="'+s+'"':"")+">\n"+e+"\n"},a.prototype.listitem=function(e){return"
          • "+e+"
          • \n"},a.prototype.checkbox=function(e){return" "},a.prototype.paragraph=function(e){return"

            "+e+"

            \n"},a.prototype.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
            \n"},a.prototype.tablerow=function(e){return"\n"+e+"\n"},a.prototype.tablecell=function(e,t){var s=t.header?"th":"td";return(t.align?"<"+s+' align="'+t.align+'">':"<"+s+">")+e+"\n"},a.prototype.strong=function(e){return""+e+""},a.prototype.em=function(e){return""+e+""},a.prototype.codespan=function(e){return""+e+""},a.prototype.br=function(){return this.options.xhtml?"
            ":"
            "},a.prototype.del=function(e){return""+e+""},a.prototype.link=function(e,t,s){if(null===(e=h(this.options.sanitize,this.options.baseUrl,e)))return s;var n='"+s+""},a.prototype.image=function(e,t,s){if(null===(e=h(this.options.sanitize,this.options.baseUrl,e)))return s;var n=''+s+'":">")},a.prototype.text=function(e){return e},o.prototype.strong=o.prototype.em=o.prototype.codespan=o.prototype.del=o.prototype.text=function(e){return e},o.prototype.link=o.prototype.image=function(e,t,s){return""+s},o.prototype.br=function(){return""},l.parse=function(e,t){return new l(t).parse(e)},l.prototype.parse=function(e){this.inline=new r(e.links,this.options),this.inlineText=new r(e.links,f({},this.options,{renderer:new o})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},l.prototype.next=function(){return this.token=this.tokens.pop(),this.token},l.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},l.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},l.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,d(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,s,n,i="",r="";for(s="",e=0;e?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var s=t;do{this.seen[s]++,t=s+"-"+this.seen[s]}while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},p.escapeTest=/[&<>"']/,p.escapeReplace=/[&<>"']/g,p.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},p.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,p.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var g={},m=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function y(){}function f(e){for(var t,s,n=1;n=0&&"\\"===s[i];)n=!n;return n?"|":" |"})).split(/ \|/),n=0;if(s.length>t)s.splice(t);else for(;s.lengthAn error occurred:

            "+p(e.message+"",!0)+"
            ";throw e}}y.exec=y,v.options=v.setOptions=function(e){return f(v.defaults,e),v},v.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new a,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,xhtml:!1}},v.defaults=v.getDefaults(),v.Parser=l,v.parser=l.parse,v.Renderer=a,v.TextRenderer=o,v.Lexer=n,v.lexer=n.lex,v.InlineLexer=r,v.inlineLexer=r.output,v.Slugger=c,v.parse=v,e.exports=v}(this||("undefined"!=typeof window?window:s.g))}},t={};function s(n){var i=t[n];if(void 0!==i)return i.exports;var r=t[n]={exports:{}};return e[n].call(r.exports,r,r.exports,s),r.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};s.r(e),s.d(e,{DISMISS_ALERT:()=>ke,SNIPPET_EDITOR_FIND_CUSTOM_FIELDS:()=>ve,wistiaEmbedPermission:()=>xe});var t={};s.r(t),s.d(t,{addEventHandler:()=>gt,disableMarkerButtons:()=>mt,enableMarkerButtons:()=>yt,getContentTinyMce:()=>ht,isTextViewActive:()=>bt,isTinyMCEAvailable:()=>ut,isTinyMCELoaded:()=>dt,pauseMarkers:()=>ft,resumeMarkers:()=>wt,setStore:()=>pt,termsTmceId:()=>ct,tinyMceEventBinder:()=>kt,tmceId:()=>lt,wpTextViewOnInitCheck:()=>_t});var n={};s.r(n),s.d(n,{createScoresInPublishBox:()=>Pt,initialize:()=>At,scrollToCollapsible:()=>Ot,updateScore:()=>Tt});const i=window.wp.domReady;var r=s.n(i);const a=window.jQuery;var o=s.n(a);const l=window.lodash,c=window.React,p=window.wp.components,d=window.wp.data,u=window.wp.element,h=window.wp.hooks,g=window.wp.i18n,m=window.yoast.uiLibrary,y=window.yoast.propTypes;var f=s.n(y);f().string.isRequired;const w=c.forwardRef((function(e,t){return c.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),c.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),b=c.forwardRef((function(e,t){return c.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),c.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),k=({learnMoreLink:e,thumbnail:t,wistiaEmbedPermission:s,upsellLink:n,isProductCopy:i,title:r,upsellLabel:a,newToText:o,bundleNote:l})=>{const{onClose:p,initialFocus:d}=(0,m.useModalContext)(),h={a:(0,c.createElement)(S,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,c.createElement)(b,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})};return(0,c.createElement)(c.Fragment,null,(0,c.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,c.createElement)("div",{className:"yst-relative yst-w-full"},(0,c.createElement)(G,{videoId:"vmrahpfjxp",thumbnail:t,wistiaEmbedPermission:s}),(0,c.createElement)(m.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,c.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,c.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,c.createElement)("span",{className:"yst-logo-icon"}),o))),(0,c.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,c.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,c.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},r),(0,c.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},i?(0,u.createInterpolateElement)((0,g.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,g.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for product titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),h):(0,u.createInterpolateElement)((0,g.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,g.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),h))),(0,c.createElement)("div",{className:"yst-w-full yst-flex yst-mt-10"},(0,c.createElement)(m.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:n,target:"_blank",ref:d},(0,c.createElement)(w,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),a,(0,c.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,g.__)("(Opens in a new browser tab)","wordpress-seo")))),l,(0,c.createElement)(m.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:p},(0,g.__)("Close","wordpress-seo"))))};k.propTypes={learnMoreLink:f().string.isRequired,upsellLink:f().string.isRequired,thumbnail:f().shape({src:f().string.isRequired,width:f().string,height:f().string}).isRequired,wistiaEmbedPermission:f().shape({value:f().bool.isRequired,status:f().string.isRequired,set:f().func.isRequired}).isRequired,title:f().string,upsellLabel:f().string,newToText:f().string,isProductCopy:f().bool,bundleNote:f().oneOfType([f().string,f().element])},k.defaultProps={title:(0,g.__)("Use AI to write your titles & meta descriptions!","wordpress-seo"),upsellLabel:(0,g.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,g.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),newToText:"Yoast SEO Premium",isProductCopy:!1,bundleNote:""};var v;function x(){return x=Object.assign?Object.assign.bind():function(e){for(var t=1;tc.createElement("svg",x({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1000 1000"},e),v||(v=c.createElement("path",{fill:"#fff",d:"M500 0C223.9 0 0 223.9 0 500s223.9 500 500 500 500-223.9 500-500S776.1 0 500 0Zm87.2 412.4c0-21.9 4.3-40.2 13.1-54.4s24-27.1 45.9-38.2l10.1-4.9c17.8-9 22.4-16.7 22.4-26 0-11.1-9.5-19.1-25-19.1-18.3 0-32.2 9.5-41.8 28.9l-24.7-24.8c5.4-11.6 14.1-20.9 25.8-28.1a70.8 70.8 0 0 1 38.9-11.1c17.8 0 33.3 4.6 45.9 14.2s19.4 22.7 19.4 39.4c0 26.6-15 42.9-43.1 57.3l-15.7 8c-16.8 8.5-25.1 16-27.4 29.4h85.4v35.4H587.2Zm-82.1 373.3c-157.8 0-285.7-127.9-285.7-285.7s127.9-285.7 285.7-285.7a286.4 286.4 0 0 1 55.9 5.5l-55.9 116.9c-90 0-163.3 73.3-163.3 163.3s73.3 163.3 163.3 163.3a162.8 162.8 0 0 0 106.4-39.6l61.8 107.2a283.9 283.9 0 0 1-168.2 54.8ZM705 704.1l-70.7-122.5H492.9l70.7-122.4H705l70.7 122.4Z"}))),S=({href:e,children:t,...s})=>(0,c.createElement)(m.Link,{target:"_blank",rel:"noopener noreferrer",...s,href:e},t,(0,c.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,g.__)("(Opens in a new browser tab)","wordpress-seo")));S.propTypes={href:f().string.isRequired,children:f().node},S.defaultProps={children:null};const R=c.forwardRef((function(e,t){return c.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),c.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 8l4 4m0 0l-4 4m4-4H3"}))}));var C,T,P;function O(){return O=Object.assign?Object.assign.bind():function(e){for(var t=1;tc.createElement("svg",O({xmlns:"http://www.w3.org/2000/svg",id:"star-rating-half_svg__Layer_1","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),C||(C=c.createElement("defs",null,c.createElement("style",null,".star-rating-half_svg__cls-1{fill:#fbbf24}"))),T||(T=c.createElement("path",{d:"M250 392.04 98.15 471.87l29-169.09L4.3 183.03l169.77-24.67L250 4.52l75.93 153.84 169.77 24.67-122.85 119.75 29 169.09L250 392.04z",className:"star-rating-half_svg__cls-1"})),P||(P=c.createElement("path",{d:"m250 9.04 73.67 149.27.93 1.88 2.08.3 164.72 23.94-119.19 116.19-1.51 1.47.36 2.07 28.14 164.06-147.34-77.46-1.86-1-1.86 1-147.34 77.46 28.14-164.06.36-2.07-1.51-1.47L8.6 184.43l164.72-23.9 2.08-.3.93-1.88L250 9.04m0-9-77.25 156.49L0 181.64l125 121.89-29.51 172L250 394.3l154.51 81.23-29.51-172 125-121.89-172.75-25.11L250 0Z",className:"star-rating-half_svg__cls-1"})),c.createElement("path",{d:"m500 181.64-172.75-25.11L250 0v394.3l154.51 81.23L375 303.48l125-121.84z",style:{fill:"#f3f4f6"}}));function I(){return I=Object.assign?Object.assign.bind():function(e){for(var t=1;tc.createElement("svg",I({xmlns:"http://www.w3.org/2000/svg","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),c.createElement("path",{d:"m250 0 77.25 156.53L500 181.64 375 303.48l29.51 172.05L250 394.3 95.49 475.53 125 303.48 0 181.64l172.75-25.11L250 0z",style:{fill:"#fbbf24"}}));var L,N,D,B,F,$,U,q,z;function j(){return j=Object.assign?Object.assign.bind():function(e){for(var t=1;tc.createElement("svg",j({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 500 500"},e),L||(L=c.createElement("path",{fill:"#a4286a",d:"M80 0h340a80 80 0 0 1 80 80v420H80a80 80 0 0 1-80-80V80A80 80 0 0 1 80 0z"})),N||(N=c.createElement("path",{fill:"#6c2548",d:"M437.61 2 155.89 500H500V80a80 80 0 0 0-62.39-78z"})),D||(D=c.createElement("path",{fill:"#fff",d:"M74.4 337.3v34.9c21.6-.9 38.5-8 52.8-22.5s27.4-38 39.9-72.9l92.6-248h-44.8L140.3 236l-37-116.2h-41l54.4 139.8a57.54 57.54 0 0 1 0 41.8c-5.5 14.2-15.4 30.9-42.3 35.9z"})),B||(B=c.createElement("circle",{cx:368.33,cy:124.68,r:97.34,fill:"#9fda4f",transform:"rotate(-45 368.335 124.68)"})),F||(F=c.createElement("path",{fill:"#77b227",d:"m416.2 39.93-95.74 169.51A97.34 97.34 0 1 0 416.2 39.93z"})),$||($=c.createElement("path",{fill:"#fec228",d:"m294.78 254.75-.15-.08-.13-.07a63.6 63.6 0 0 0-62.56 110.76h.13a63.6 63.6 0 0 0 62.71-110.67z"})),U||(U=c.createElement("path",{fill:"#f49a00",d:"m294.5 254.59-62.56 110.76a63.6 63.6 0 1 0 62.56-110.76z"})),q||(q=c.createElement("path",{fill:"#ff4e47",d:"M222.31 450.07A38.16 38.16 0 0 0 203 416.83a38.18 38.18 0 1 0 19.41 33.27z"})),z||(z=c.createElement("path",{fill:"#ed261f",d:"m202.9 416.8-37.54 66.48a38.17 38.17 0 0 0 37.54-66.48z"}))),V=({link:e,linkProps:t,promotions:s})=>{const n=(0,u.useMemo)((()=>(0,g.__)("Use AI to generate titles and meta descriptions, automatically redirect deleted pages, get 24/7 support, and much, much more!","wordpress-seo")),[]),i=(0,u.createInterpolateElement)((0,g.sprintf)(/* translators: %1$s and %2$s expand to a span wrap to avoid linebreaks. %3$s expands to "Yoast SEO Premium". */ +(0,g.__)("%1$sGet%2$s %3$s","wordpress-seo"),"","","Yoast SEO Premium"),{nowrap:(0,c.createElement)("span",{className:"yst-whitespace-nowrap"})}),r=s.includes("black-friday-2023-promotion"),a=(0,u.createInterpolateElement)((0,g.sprintf)(/* translators: %1$s and %2$s expand to strong tags. */ +(0,g.__)("%1$sSAVE 30%%%2$s on your 12 month subscription","wordpress-seo"),"",""),{strong:(0,c.createElement)("strong",null)});return(0,c.createElement)("div",{className:"yst-p-6 yst-rounded-lg yst-text-white yst-bg-primary-500 yst-shadow"},(0,c.createElement)("figure",{className:"yst-logo-square yst-w-16 yst-h-16 yst-mx-auto yst-overflow-hidden yst-border yst-border-white yst-rounded-xl yst-rounded-br-none yst-relative yst-z-10 yst-mt-[-2.6rem]"},(0,c.createElement)(Y,null)),r&&(0,c.createElement)("div",{className:"sidebar__sale_banner_container"},(0,c.createElement)("div",{className:"sidebar__sale_banner"},(0,c.createElement)("span",{className:"banner_text"},(0,g.__)("BLACK FRIDAY - 30% OFF","wordpress-seo")))),(0,c.createElement)(m.Title,{as:"h2",className:"yst-mt-6 yst-text-base yst-font-extrabold yst-text-white"},i),(0,c.createElement)("p",{className:"yst-mt-2"},n),r&&(0,c.createElement)("div",{className:"yst-text-center yst-border-t-[1px] yst-border-white yst-italic yst-mt-3"},(0,c.createElement)("p",{className:"yst-text-[10px] yst-my-3 yst-mx-0"},a)),(0,c.createElement)(m.Button,{as:"a",variant:"upsell",href:e,target:"_blank",rel:"noopener",className:"yst-flex yst-justify-center yst-gap-2 yst-mt-4 focus:yst-ring-offset-primary-500",...t},(0,c.createElement)("span",null,r?(0,g.__)("Claim your 30% off now!","wordpress-seo"):i),(0,c.createElement)(R,{className:"yst-w-4 yst-h-4 yst-icon-rtl"})),(0,c.createElement)("p",{className:"yst-text-center yst-text-xs yst-mx-2 yst-font-light yst-leading-5 yst-mt-2"},(0,g.__)("Only $/€/£99 per year (ex VAT)","wordpress-seo"),(0,c.createElement)("br",null),(0,g.__)("30-day money back guarantee.","wordpress-seo")),(0,c.createElement)("hr",{className:"yst-border-t yst-border-primary-300 yst-my-4"}),(0,c.createElement)("a",{className:"yst-block yst-mt-4 yst-no-underline",href:"https://www.g2.com/products/yoast-yoast/reviews",target:"_blank",rel:"noopener noreferrer"},(0,c.createElement)("span",{className:"yst-font-medium yst-text-white hover:yst-underline"},(0,g.__)("Read reviews from real users","wordpress-seo")),(0,c.createElement)("span",{className:"yst-flex yst-gap-2 yst-mt-2 yst-items-center"},(0,c.createElement)(E,{className:"yst-w-5 yst-h-5"}),(0,c.createElement)("span",{className:"yst-flex yst-gap-1"},(0,c.createElement)(M,{className:"yst-w-5 yst-h-5"}),(0,c.createElement)(M,{className:"yst-w-5 yst-h-5"}),(0,c.createElement)(M,{className:"yst-w-5 yst-h-5"}),(0,c.createElement)(M,{className:"yst-w-5 yst-h-5"}),(0,c.createElement)(A,{className:"yst-w-5 yst-h-5"})),(0,c.createElement)("span",{className:"yst-text-sm yst-font-semibold yst-text-white"},"4.6 / 5"))))};V.propTypes={link:f().string.isRequired,linkProps:f().object,promotions:f().array},V.defaultProps={linkProps:{},promotions:[]},f().node.isRequired;const K=window.yoast.reactHelmet,W="loading",H="showPlay",Q="askPermission",Z="isPlaying",G=({videoId:e,thumbnail:t,wistiaEmbedPermission:s})=>{const[n,i]=(0,u.useState)(s.value?Z:H),r=(0,u.useCallback)((()=>i(Z)),[i]),a=(0,u.useCallback)((()=>{s.value?r():i(Q)}),[s.value,r,i]),o=(0,u.useCallback)((()=>i(H)),[i]),l=(0,u.useCallback)((()=>{s.set(!0),r()}),[s.set,r]);return(0,c.createElement)(c.Fragment,null,s.value&&(0,c.createElement)(K.Helmet,null,(0,c.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,c.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},n===H&&(0,c.createElement)("button",{type:"button",className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:a},(0,c.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...t})),n===Q&&(0,c.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,c.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},s.status===W&&(0,c.createElement)(m.Spinner,null),s.status!==W&&(0,g.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,g.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo"),"Yoast SEO","Wistia")),(0,c.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,c.createElement)(m.Button,{type:"button",variant:"secondary",onClick:o,disabled:s.status===W},(0,g.__)("Deny","wordpress-seo")),(0,c.createElement)(m.Button,{type:"button",variant:"primary",onClick:l,disabled:s.status===W},(0,g.__)("Allow","wordpress-seo")))),s.value&&n===Z&&(0,c.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===e&&(0,c.createElement)(m.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==e&&(0,c.createElement)("div",{className:`wistia_embed wistia_async_${e} videoFoam=true`}))))};G.propTypes={videoId:f().string.isRequired,thumbnail:f().shape({src:f().string.isRequired,width:f().string,height:f().string}).isRequired,wistiaEmbedPermission:f().shape({value:f().bool.isRequired,status:f().string.isRequired,set:f().func.isRequired}).isRequired};const J=({learnMoreLink:e,thumbnail:t,wistiaEmbedPermission:s,upsellLink:n,upsellLabel:i})=>{const{onClose:r,initialFocus:a}=(0,m.useModalContext)(),o={a:(0,c.createElement)(S,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,c.createElement)(b,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"}),br:(0,c.createElement)("br",null)};return(0,c.createElement)(c.Fragment,null,(0,c.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,c.createElement)("div",{className:"yst-relative yst-w-full"},(0,c.createElement)(G,{videoId:"vun9z1dpfh",thumbnail:t,wistiaEmbedPermission:s}),(0,c.createElement)(m.Badge,{className:"yst-absolute yst-right-0 yst-mr-4 yst-text-center yst-justify-center",variant:"info",style:{top:"-8px"}},(0,g.__)("Beta","wordpress-seo-premium"))),(0,c.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,c.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,c.createElement)("span",{className:"yst-logo-icon"}),"Yoast SEO Premium"))),(0,c.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,c.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,c.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,g.sprintf)(/* translators: %s: Expands to "Yoast AI" */ +(0,g.__)("Optimize your SEO content with %s","wordpress-seo"),"Yoast AI")),(0,c.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,u.createInterpolateElement)((0,g.sprintf)(/* translators: %1$s is a break tag; %2$s and %3$s are anchor tags; %4$s is the arrow icon. */ +(0,g.__)("Make content editing a breeze! Optimize your SEO content with quick, actionable suggestions at the click of a button.%1$s%2$sLearn more%3$s%4$s","wordpress-seo"),"
            ","","",""),o))),(0,c.createElement)("div",{className:"yst-w-full yst-flex yst-mt-6"},(0,c.createElement)(m.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:n,target:"_blank",ref:a},(0,c.createElement)(w,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),i,(0,c.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,g.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,c.createElement)(m.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:r},(0,g.__)("Close","wordpress-seo"))))};J.propTypes={learnMoreLink:f().string.isRequired,upsellLink:f().string.isRequired,thumbnail:f().shape({src:f().string.isRequired,width:f().string,height:f().string}).isRequired,wistiaEmbedPermission:f().shape({value:f().bool.isRequired,status:f().string.isRequired,set:f().func.isRequired}).isRequired,upsellLabel:f().string},J.defaultProps={upsellLabel:(0,g.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,g.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")};const X="yoast-seo/editor",ee=()=>{const e=(0,d.useSelect)((e=>e(X).selectLink("https://yoa.st/ai-generator-learn-more")),[]),t=(0,d.useSelect)((e=>e(X).selectLink("https://yoa.st/ai-generator-upsell")),[]),s=(0,d.useSelect)((e=>e(X).selectLink("https://yoa.st/ai-generator-upsell-woo-seo-premium-bundle")),[]),n=(0,d.useSelect)((e=>e(X).selectLink("https://yoa.st/ai-generator-upsell-woo-seo")),[]),i=(0,d.useSelect)((e=>e(X).getIsPremium()),[]),r=(0,d.useSelect)((e=>e(X).getIsWooSeoUpsell()),[]),a=(0,d.useSelect)((e=>e(X).getIsProduct()),[]),o=!(!r&&(!a||r||i)),l={isProductCopy:o,upsellLink:t};if(o){const e=(0,g.sprintf)(/* translators: %1$s expands to Yoast SEO Premium, %2$s expands to Yoast WooCommerce SEO. */ +(0,g.__)("%1$s + %2$s","wordpress-seo"),"Yoast SEO Premium","Yoast WooCommerce SEO");l.newToText=(0,g.sprintf)(/* translators: %1$s expands to Yoast SEO Premium and Yoast WooCommerce SEO. */ +(0,g.__)("New in %1$s","wordpress-seo"),e),l.title=(0,g.__)("Generate product titles & descriptions with AI!","wordpress-seo"),!i&&r&&(l.upsellLabel=`${(0,g.sprintf)(/* translators: %1$s expands to Woo Premium bundle. */ +(0,g.__)("Unlock with the %1$s","wordpress-seo"),"Woo Premium bundle")}*`,l.bundleNote=(0,c.createElement)("div",{className:"yst-text-xs yst-text-slate-500 yst-mt-2"},`*${e}`),l.upsellLink=s),i&&(l.upsellLabel=(0,g.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,g.__)("Unlock with %1$s","wordpress-seo"),"Yoast WooCommerce SEO"),l.upsellLink=n)}const p=(0,d.useSelect)((e=>e(X).selectImageLink("ai-generator-preview.png")),[]),h=(0,u.useMemo)((()=>({src:p,width:"432",height:"244"})),[p]),m=(0,d.useSelect)((e=>e(X).selectWistiaEmbedPermissionValue()),[]),y=(0,d.useSelect)((e=>e(X).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:f}=(0,d.useDispatch)(X),w=(0,u.useMemo)((()=>({value:m,status:y,set:f})),[m,y,f]);return(0,c.createElement)(k,{learnMoreLink:e,thumbnail:h,wistiaEmbedPermission:w,...l})},te=({fieldId:e})=>{const[t,,,s,n]=(0,m.useToggleState)(!1),i=(0,u.useCallback)((()=>{s()}),[s]),r=(0,u.useRef)(null);return(0,c.createElement)(c.Fragment,null,(0,c.createElement)("button",{type:"button",id:`yst-replacevar__use-ai-button__${e}`,className:"yst-replacevar__use-ai-button-upsell",onClick:i},(0,g.__)("Use AI","wordpress-seo")),(0,c.createElement)(m.Modal,{className:"yst-introduction-modal",isOpen:t,onClose:n,initialFocus:r},(0,c.createElement)(m.Modal.Panel,{className:"yst-max-w-lg yst-p-0 yst-rounded-3xl"},(0,c.createElement)(ee,{onClose:n,focusElementRef:r}))))};te.propTypes={fieldId:f().string.isRequired};const se="yoast-seo/editor";const ne=window.yoast.externals.redux,ie=window.yoast.reduxJsToolkit,re="adminUrl",ae=(0,ie.createSlice)({name:re,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),oe=(ae.getInitialState,{selectAdminUrl:e=>(0,l.get)(e,re,"")});oe.selectAdminLink=(0,ie.createSelector)([oe.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}})),ae.actions,ae.reducer;const le=window.wp.url,ce="linkParams",pe=(0,ie.createSlice)({name:ce,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),de=(pe.getInitialState,{selectLinkParam:(e,t,s={})=>(0,l.get)(e,`${ce}.${t}`,s),selectLinkParams:e=>(0,l.get)(e,ce,{})});de.selectLink=(0,ie.createSelector)([de.selectLinkParams,(e,t)=>t,(e,t,s={})=>s],((e,t,s)=>(0,le.addQueryArgs)(t,{...e,...s}))),pe.actions,pe.reducer;const ue=(0,ie.createSlice)({name:"notifications",initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:s="default",title:n,description:i})=>({payload:{id:e||(0,ie.nanoid)(),variant:t,size:s,title:n||"",description:i}})},removeNotification:(e,{payload:t})=>(0,l.omit)(e,t)}}),he=(ue.getInitialState,ue.actions,ue.reducer,"pluginUrl"),ge=(0,ie.createSlice)({name:he,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),me=(ge.getInitialState,{selectPluginUrl:e=>(0,l.get)(e,he,"")});me.selectImageLink=(0,ie.createSelector)([me.selectPluginUrl,(e,t,s="images")=>s,(e,t)=>t],((e,t,s)=>[(0,l.trimEnd)(e,"/"),(0,l.trim)(t,"/"),(0,l.trimStart)(s,"/")].join("/"))),ge.actions,ge.reducer;const ye=window.wp.apiFetch;var fe=s.n(ye);const we="wistiaEmbedPermission",be=(0,ie.createSlice)({name:we,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${we}/request`,(e=>{e.status=W})),e.addCase(`${we}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${we}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,l.get)(t,"error.code",500),message:(0,l.get)(t,"error.message","Unknown")}}))}}),_e=(be.getInitialState,be.actions,{[we]:async({payload:e})=>fe()({path:"/yoast/v1/wistia_embed_permission",method:"POST",data:{value:Boolean(e)}})});function ke({alertKey:e}){return new Promise((t=>wpseoApi.post("alerts/dismiss",{key:e},(()=>t()))))}function ve({query:e,postId:t}){return new Promise((s=>{wpseoApi.get("meta/search",{query:e,post_id:t},(e=>{s(e.meta)}))}))}be.reducer;const xe=_e[we];var Ee=s(2322),Se=s.n(Ee);function Re(){return window.wpseoScriptData&&"1"===window.wpseoScriptData.isBlockEditor}const Ce=window.yoast.analysis,Te=window.wp.isShallowEqual,Pe=window.wp.api;var Oe={source:"wpseoScriptData.analysis.plugins.replaceVars",scope:[],aliases:[]},Ae=function(e,t,s){this.placeholder=e,this.replacement=t,this.options=(0,l.defaults)(s,Oe)};Ae.prototype.getPlaceholder=function(e){return(e=e||!1)&&this.hasAlias()?this.placeholder+"|"+this.getAliases().join("|"):this.placeholder},Ae.prototype.setSource=function(e){this.options.source=e},Ae.prototype.hasScope=function(){return!(0,l.isEmpty)(this.options.scope)},Ae.prototype.addScope=function(e){this.hasScope()||(this.options.scope=[]),this.options.scope.push(e)},Ae.prototype.inScope=function(e){return!this.hasScope()||(0,l.indexOf)(this.options.scope,e)>-1},Ae.prototype.hasAlias=function(){return!(0,l.isEmpty)(this.options.aliases)},Ae.prototype.addAlias=function(e){this.hasAlias()||(this.options.aliases=[]),this.options.aliases.push(e)},Ae.prototype.getAliases=function(){return this.options.aliases};const Ie=Ae,{removeReplacementVariable:Me,updateReplacementVariable:Le,refreshSnippetEditor:Ne}=ne.actions;var De=["content","title","snippet_title","snippet_meta","primary_category","data_page_title","data_meta_desc","excerpt"],Be={},Fe={},$e=function(e,t){this._app=e,this._app.registerPlugin("replaceVariablePlugin",{status:"ready"}),this._store=t,this.replaceVariables=this.replaceVariables.bind(this),this.registerReplacements(),this.registerModifications(),this.registerEvents(),this.subscribeToGutenberg()};$e.prototype.registerReplacements=function(){this.addReplacement(new Ie("%%author_first_name%%","author_first_name")),this.addReplacement(new Ie("%%author_last_name%%","author_last_name")),this.addReplacement(new Ie("%%category%%","category")),this.addReplacement(new Ie("%%category_title%%","category_title")),this.addReplacement(new Ie("%%currentdate%%","currentdate")),this.addReplacement(new Ie("%%currentday%%","currentday")),this.addReplacement(new Ie("%%currentmonth%%","currentmonth")),this.addReplacement(new Ie("%%currenttime%%","currenttime")),this.addReplacement(new Ie("%%currentyear%%","currentyear")),this.addReplacement(new Ie("%%date%%","date")),this.addReplacement(new Ie("%%id%%","id")),this.addReplacement(new Ie("%%page%%","page")),this.addReplacement(new Ie("%%permalink%%","permalink")),this.addReplacement(new Ie("%%post_content%%","post_content")),this.addReplacement(new Ie("%%post_month%%","post_month")),this.addReplacement(new Ie("%%post_year%%","post_year")),this.addReplacement(new Ie("%%searchphrase%%","searchphrase")),this.addReplacement(new Ie("%%sitedesc%%","sitedesc")),this.addReplacement(new Ie("%%sitename%%","sitename")),this.addReplacement(new Ie("%%userid%%","userid")),this.addReplacement(new Ie("%%focuskw%%","keyword",{source:"app",aliases:["%%keyword%%"]})),this.addReplacement(new Ie("%%term_description%%","text",{source:"app",scope:["term","category","tag"],aliases:["%%tag_description%%","%%category_description%%"]})),this.addReplacement(new Ie("%%term_title%%","term_title",{scope:["term"]})),this.addReplacement(new Ie("%%term_hierarchy%%","term_hierarchy",{scope:["term"]})),this.addReplacement(new Ie("%%title%%","title",{source:"app",scope:["post","term","page"]})),this.addReplacement(new Ie("%%parent_title%%","title",{source:"app",scope:["page","category"]})),this.addReplacement(new Ie("%%excerpt%%","excerpt",{source:"app",scope:["post"],aliases:["%%excerpt_only%%"]})),this.addReplacement(new Ie("%%primary_category%%","primaryCategory",{source:"app",scope:["post"]})),this.addReplacement(new Ie("%%sep%%(\\s*%%sep%%)*","sep"))},$e.prototype.registerEvents=function(){const e=wpseoScriptData.analysis.plugins.replaceVars.scope;"post"===e&&jQuery(".categorydiv").each(this.bindTaxonomyEvents.bind(this)),"post"!==e&&"page"!==e||jQuery("#postcustomstuff > #list-table").each(this.bindFieldEvents.bind(this))},$e.prototype.subscribeToGutenberg=function(){if(!Re())return;const e={0:""};let t=null;const s=wp.data;s.subscribe((()=>{const n=s.select("core/editor").getEditedPostAttribute("parent");if(void 0!==n&&t!==n)return t=n,n<1?(this._currentParentPageTitle="",void this.declareReloaded()):(0,l.isUndefined)(e[n])?void Pe.loadPromise.done((()=>{new Pe.models.Page({id:n}).fetch().then((t=>{this._currentParentPageTitle=t.title.rendered,e[n]=this._currentParentPageTitle,this.declareReloaded()})).fail((()=>{this._currentParentPageTitle="",this.declareReloaded()}))})):(this._currentParentPageTitle=e[n],void this.declareReloaded())}))},$e.prototype.addReplacement=function(e){Be[e.placeholder]=e},$e.prototype.removeReplacement=function(e){delete Be[e.getPlaceholder()]},$e.prototype.registerModifications=function(){var e=this.replaceVariables.bind(this);(0,l.forEach)(De,function(t){this._app.registerModification(t,e,"replaceVariablePlugin",10)}.bind(this))},$e.prototype.replaceVariables=function(e){return(0,l.isUndefined)(e)||(e=this.parentReplace(e),e=this.replaceCustomTaxonomy(e),e=this.replaceByStore(e),e=this.replacePlaceholders(e)),e},$e.prototype.replaceByStore=function(e){const t=this._store.getState().snippetEditor.replacementVariables;return(0,l.forEach)(t,(t=>{""!==t.value&&(e=e.replace("%%"+t.name+"%%",t.value))})),e},$e.prototype.getReplacementSource=function(e){return"app"===e.source?this._app.rawData:"direct"===e.source?"direct":wpseoScriptData.analysis.plugins.replaceVars.replace_vars},$e.prototype.getReplacement=function(e){var t=this.getReplacementSource(e.options);return!1===e.inScope(wpseoScriptData.analysis.plugins.replaceVars.scope)?"":"direct"===t?e.replacement:t[e.replacement]||""},$e.prototype.replacePlaceholders=function(e){return(0,l.forEach)(Be,function(t){e=e.replace(new RegExp(t.getPlaceholder(!0),"g"),this.getReplacement(t))}.bind(this)),e},$e.prototype.declareReloaded=function(){this._app.pluginReloaded("replaceVariablePlugin"),this._store.dispatch(Ne())},$e.prototype.getCategoryName=function(e){var t=e.parent("label").clone();return t.children().remove(),t.text().trim()},$e.prototype.parseTaxonomies=function(e,t){(0,l.isUndefined)(Fe[t])&&(Fe[t]={});const s=[];(0,l.forEach)(e,function(e){const n=(e=jQuery(e)).val(),i=this.getCategoryName(e),r=e.prop("checked");Fe[t][n]={label:i,checked:r},r&&-1===s.indexOf(i)&&s.push(i)}.bind(this)),"category"!==t&&(t="ct_"+t),this._store.dispatch(Le(t,s.join(", ")))},$e.prototype.getAvailableTaxonomies=function(e){var t=jQuery(e).find("input[type=checkbox]"),s=jQuery(e).attr("id").replace("taxonomy-","");t.length>0&&this.parseTaxonomies(t,s),this.declareReloaded()},$e.prototype.bindTaxonomyEvents=function(e,t){(t=jQuery(t)).on("wpListAddEnd",".categorychecklist",this.getAvailableTaxonomies.bind(this,t)),t.on("change","input[type=checkbox]",this.getAvailableTaxonomies.bind(this,t)),this.getAvailableTaxonomies(t)},$e.prototype.replaceCustomTaxonomy=function(e){return(0,l.forEach)(Fe,function(t,s){var n="%%ct_"+s+"%%";"category"===s&&(n="%%"+s+"%%"),e=e.replace(n,this.getTaxonomyReplaceVar(s))}.bind(this)),e},$e.prototype.getTaxonomyReplaceVar=function(e){var t=[],s=Fe[e];return!0===(0,l.isUndefined)(s)?"":((0,l.forEach)(s,(function(e){!1!==e.checked&&t.push(e.label)})),jQuery.uniqueSort(t).join(", "))},$e.prototype.parseFields=function(e){jQuery(e).each(function(e,t){var s=jQuery("#"+t.id+"-key").val(),n=jQuery("#"+t.id+"-value").val();const i="cf_"+this.sanitizeCustomFieldNames(s),r=s+" (custom field)";this._store.dispatch(Le(i,n,r)),this.addReplacement(new Ie(`%%${i}%%`,n,{source:"direct"}))}.bind(this))},$e.prototype.removeFields=function(e){jQuery(e).each(function(e,t){var s=jQuery("#"+t.id+"-key").val();this.removeReplacement("%%cf_"+this.sanitizeCustomFieldNames(s)+"%%")}.bind(this))},$e.prototype.sanitizeCustomFieldNames=function(e){return e.replace(/\s/g,"_")},$e.prototype.getAvailableFields=function(e){this.removeCustomFields();var t=jQuery(e).find("#the-list > tr:visible[id]");t.length>0&&this.parseFields(t),this.declareReloaded()},$e.prototype.bindFieldEvents=function(e,t){var s=(t=jQuery(t)).find("#the-list");s.on("wpListDelEnd.wpseoCustomFields",this.getAvailableFields.bind(this,t)),s.on("wpListAddEnd.wpseoCustomFields",this.getAvailableFields.bind(this,t)),s.on("input.wpseoCustomFields",".textarea",this.getAvailableFields.bind(this,t)),s.on("click.wpseoCustomFields",".button + .updatemeta",this.getAvailableFields.bind(this,t)),this.getAvailableFields(t)},$e.prototype.removeCustomFields=function(){var e=(0,l.filter)(Be,(function(e,t){return t.indexOf("%%cf_")>-1}));(0,l.forEach)(e,function(e){this._store.dispatch(Me((0,l.trim)(e.placeholder,"%%"))),this.removeReplacement(e)}.bind(this))},$e.prototype.parentReplace=function(e){const t=jQuery("#parent_id, #parent").eq(0);return this.hasParentTitle(t)&&(e=e.replace(/%%parent_title%%/,this.getParentTitleReplacement(t))),Re()&&!(0,l.isUndefined)(this._currentParentPageTitle)&&(e=e.replace(/%%parent_title%%/,this._currentParentPageTitle)),e},$e.prototype.hasParentTitle=function(e){return!(0,l.isUndefined)(e)&&!(0,l.isUndefined)(e.prop("options"))},$e.prototype.getParentTitleReplacement=function(e){var t=e.find("option:selected").text();return t===wpseoScriptData.analysis.plugins.replaceVars.no_parent_text?"":t},$e.ReplaceVar=Ie;const Ue=$e,qe=window.wp.blocks,ze=class{constructor(e,t,s){this._registerPlugin=e,this._registerModification=t,this._refreshAnalysis=s,this._reusableBlocks={},this._selectCore=(0,d.select)("core"),this._selectCoreEditor=(0,d.select)("core/editor"),this.reusableBlockChangeListener=this.reusableBlockChangeListener.bind(this),this.parseReusableBlocks=this.parseReusableBlocks.bind(this)}register(){this._registerPlugin("YoastReusableBlocksPlugin",{status:"ready"}),this._registerModification("content",this.parseReusableBlocks,"YoastReusableBlocksPlugin",1),(0,d.subscribe)((0,l.debounce)(this.reusableBlockChangeListener,500))}reusableBlockChangeListener(){const{blocks:e}=this._selectCoreEditor.getPostEdits();if(!e)return;let t=!1;e.forEach((e=>{if(!(0,qe.isReusableBlock)(e))return;const s=this.getBlockContent(e.attributes.ref);this._reusableBlocks[e.attributes.ref]?this._reusableBlocks[e.attributes.ref].content!==s&&(this._reusableBlocks[e.attributes.ref].content=s,t=!0):(this._reusableBlocks[e.attributes.ref]={id:e.attributes.ref,clientId:e.clientId,content:s},t=!0)})),t&&this._refreshAnalysis()}parseReusableBlocks(e){const t=//g;return e.match(t)?e.replace(t,((t,s)=>this._reusableBlocks[s]&&this._reusableBlocks[s].content?this._reusableBlocks[s].content:e)):e}getBlockContent(e){const t=this._selectCore.getEditedEntityRecord("postType","wp_block",e);if(t){if((0,l.isFunction)(t.content))return t.content(t);if(t.blocks)return(0,qe.__unstableSerializeAndClean)(t.blocks);if(t.content)return t.content}return""}},je="[^<>&/\\[\\]\0- =]+?",Ye=new RegExp("\\["+je+"( [^\\]]+?)?\\]","g"),Ve=new RegExp("\\[/"+je+"\\]","g");class Ke{constructor({registerPlugin:e,registerModification:t,pluginReady:s,pluginReloaded:n},i){this._registerModification=t,this._pluginReady=s,this._pluginReloaded=n,e("YoastShortcodePlugin",{status:"loading"}),this.bindElementEvents();const r="("+i.join("|")+")";this.shortcodesRegex=new RegExp(r,"g"),this.closingTagRegex=new RegExp("\\[\\/"+r+"\\]","g"),this.nonCaptureRegex=new RegExp("\\["+r+"[^\\]]*?\\]","g"),this.parsedShortcodes=[],this.loadShortcodes(this.declareReady.bind(this))}declareReady(){this._pluginReady("YoastShortcodePlugin"),this.registerModifications()}declareReloaded(){this._pluginReloaded("YoastShortcodePlugin")}registerModifications(){this._registerModification("content",this.replaceShortcodes.bind(this),"YoastShortcodePlugin")}removeUnknownShortCodes(e){return(e=e.replace(Ye,"")).replace(Ve,"")}replaceShortcodes(e){return"string"==typeof e&&this.parsedShortcodes.forEach((({shortcode:t,output:s})=>{e=e.replace(t,s)})),e=this.removeUnknownShortCodes(e)}loadShortcodes(e){const t=this.getUnparsedShortcodes(this.getShortcodes(this.getContentTinyMCE()));if(!(t.length>0))return e();this.parseShortcodes(t,e)}bindElementEvents(){const e=document.querySelector(".wp-editor-area"),t=(0,l.debounce)(this.loadShortcodes.bind(this,this.declareReloaded.bind(this)),500);e&&(e.addEventListener("keyup",t),e.addEventListener("change",t)),"undefined"!=typeof tinyMCE&&"function"==typeof tinyMCE.on&&tinyMCE.on("addEditor",(function(e){e.editor.on("change",t),e.editor.on("keyup",t)}))}getContentTinyMCE(){let e=document.querySelector(".wp-editor-area")?document.querySelector(".wp-editor-area").value:"";return"undefined"!=typeof tinyMCE&&void 0!==tinyMCE.editors&&0!==tinyMCE.editors.length&&(e=tinyMCE.get("content")?tinyMCE.get("content").getContent():""),e}getUnparsedShortcodes(e){return"object"!=typeof e?(console.error("Failed to get unparsed shortcodes. Expected parameter to be an array, instead received "+typeof e),!1):e.filter((e=>this.isUnparsedShortcode(e)))}isUnparsedShortcode(e){return!this.parsedShortcodes.some((({shortcode:t})=>t===e))}getShortcodes(e){if("string"!=typeof e)return console.error("Failed to get shortcodes. Expected parameter to be a string, instead received"+typeof e),!1;const t=this.matchCapturingShortcodes(e);t.forEach((t=>{e=e.replace(t,"")}));const s=this.matchNonCapturingShortcodes(e);return t.concat(s)}matchCapturingShortcodes(e){const t=(e.match(this.closingTagRegex)||[]).join(" ").match(this.shortcodesRegex)||[];return(0,l.flatten)(t.map((t=>{const s="\\["+t+"[^\\]]*?\\].*?\\[\\/"+t+"\\]";return e.match(new RegExp(s,"g"))||[]})))}matchNonCapturingShortcodes(e){return e.match(this.nonCaptureRegex)||[]}parseShortcodes(e,t){return"function"!=typeof t?(console.error("Failed to parse shortcodes. Expected parameter to be a function, instead received "+typeof t),!1):"object"==typeof e&&e.length>0?void jQuery.post(ajaxurl,{action:"wpseo_filter_shortcodes",_wpnonce:wpseoScriptData.analysis.plugins.shortcodes.wpseo_filter_shortcodes_nonce,data:e},function(e){this.saveParsedShortcodes(e,t)}.bind(this)):t()}saveParsedShortcodes(e,t){const s=JSON.parse(e);this.parsedShortcodes.push(...s),t()}}const We=Ke,{updateShortcodesForParsing:He}=ne.actions;var Qe=s(7084),Ze=s.n(Qe);const Ge=class{constructor(e,t){this._registerPlugin=e,this._registerModification=t}register(){this._registerPlugin("YoastMarkdownPlugin",{status:"ready"}),this._registerModification("content",this.parseMarkdown.bind(this),"YoastMarkdownPlugin",1)}parseMarkdown(e){return Ze()(e)}},Je="yoastmark";function Xe(e,t){return e._properties.position.startOffset>t.length||e._properties.position.endOffset>t.length}function et(e,t,s){const n=e.dom;let i=e.getContent();if(i=Ce.markers.removeMarks(i),(0,l.isEmpty)(s))return void e.setContent(i);i=s[0].hasPosition()?function(e,t){if(!t)return"";for(let s=(e=(0,l.orderBy)(e,(e=>e._properties.position.startOffset),["asc"])).length-1;s>=0;s--){const n=e[s];Xe(n,t)||(t=n.applyWithPosition(t))}return t}(s,i):function(e,t,s,n){const{fieldsToMark:i,selectedHTML:r}=Ce.languageProcessing.getFieldsToMark(s,n);return(0,l.forEach)(s,(function(t){"acf_content"!==e.id&&(t._properties.marked=Ce.languageProcessing.normalizeHTML(t._properties.marked),t._properties.original=Ce.languageProcessing.normalizeHTML(t._properties.original)),i.length>0?r.forEach((e=>{const s=t.applyWithReplace(e);n=n.replace(e,s)})):n=t.applyWithReplace(n)})),n}(e,0,s,i),e.setContent(i),function(e){let t=e.getContent();t=t.replace(new RegExp("<yoastmark.+?>","g"),"").replace(new RegExp("</yoastmark>","g"),""),e.setContent(t)}(e);const r=n.select(Je);(0,l.forEach)(r,(function(e){e.setAttribute("data-mce-bogus","1")}))}function tt(e){return window.test=e,et.bind(null,e)}const st="et_pb_main_editor_wrap",nt=class{static isActive(){return!!document.getElementById(st)}static isTinyMCEHidden(){const e=document.getElementById(st);return!!e&&e.classList.contains("et_pb_hidden")}listen(e){this.classicEditorContainer=document.getElementById(st),this.classicEditorContainer&&new MutationObserver((t=>{(0,l.forEach)(t,(t=>{"attributes"===t.type&&"class"===t.attributeName&&(t.target.classList.contains("et_pb_hidden")?e.classicEditorHidden():e.classicEditorShown())}))})).observe(this.classicEditorContainer,{attributes:!0})}},it=class{static isActive(){return!!window.VCV_I18N}},rt={classicEditorHidden:l.noop,classicEditorShown:l.noop,pageBuilderLoaded:l.noop},at=class{constructor(){this.determineActivePageBuilders()}determineActivePageBuilders(){nt.isActive()&&(this.diviActive=!0),it.isActive()&&(this.vcActive=!0)}isPageBuilderActive(){return this.diviActive||this.vcActive}listen(e){this.callbacks=(0,l.defaults)(e,rt),this.diviActive&&(new nt).listen(e)}isClassicEditorHidden(){return!(!this.diviActive||!nt.isTinyMCEHidden())}};let ot;const lt="content",ct="description";function pt(e){ot=e}function dt(){return"undefined"!=typeof tinyMCE&&void 0!==tinyMCE.editors&&0!==tinyMCE.editors.length}function ut(e){if(!dt())return!1;const t=tinyMCE.get(e);return null!==t&&!t.isHidden()}function ht(e){let t="";var s;return t=!1===ut(e)||0==(s=e,null!==document.getElementById(s+"_ifr"))?function(e){return document.getElementById(e)&&document.getElementById(e).value||""}(e):tinyMCE.get(e).getContent(),t}function gt(e,t,s){"undefined"!=typeof tinyMCE&&"function"==typeof tinyMCE.on&&tinyMCE.on("addEditor",(function(n){const i=n.editor;i.id===e&&(0,l.forEach)(t,(function(e){i.on(e,s)}))}))}function mt(){(0,l.isUndefined)(ot)||ot.dispatch(ne.actions.setMarkerStatus("disabled"))}function yt(){(0,l.isUndefined)(ot)||ot.dispatch(ne.actions.setMarkerStatus("enabled"))}function ft(){(0,l.isUndefined)(ot)||ot.dispatch(ne.actions.setMarkerPauseStatus(!0))}function wt(){(0,l.isUndefined)(ot)||ot.dispatch(ne.actions.setMarkerPauseStatus(!1))}function bt(){const e=document.getElementById("wp-content-wrap");return!!e&&e.classList.contains("html-active")}function _t(){bt()&&(mt(),dt()&&tinyMCE.on("AddEditor",(function(){yt()})))}function kt(e,t){gt(t,["input","change","cut","paste"],e),gt(t,["hide"],mt);const s=["show"];(new at).isPageBuilderActive()||s.push("init"),gt(t,s,yt),gt("content",["focus"],(function(e){const t=e.target;(function(e){return-1!==e.getContent({format:"raw"}).indexOf("<"+Je)})(t)&&(function(e){tt(e)(null,[])}(t),YoastSEO.app.disableMarkers()),ft()})),gt("content",["blur"],(function(){wt()}))}class vt{constructor(e){this.refresh=e,this.loaded=!1,this.preloadThreshold=3e3,this.plugins={},this.modifications={},this._registerPlugin=this._registerPlugin.bind(this),this._ready=this._ready.bind(this),this._reloaded=this._reloaded.bind(this),this._registerModification=this._registerModification.bind(this),this._registerAssessment=this._registerAssessment.bind(this),this._applyModifications=this._applyModifications.bind(this),setTimeout(this._pollLoadingPlugins.bind(this),1500)}_registerPlugin(e,t){return(0,l.isString)(e)?(0,l.isUndefined)(t)||(0,l.isObject)(t)?!1===this._validateUniqueness(e)?(console.error("Failed to register plugin. Plugin with name "+e+" already exists"),!1):(this.plugins[e]=t,!0):(console.error("Failed to register plugin "+e+". Expected parameters `options` to be a object."),!1):(console.error("Failed to register plugin. Expected parameter `pluginName` to be a string."),!1)}_ready(e){return(0,l.isString)(e)?(0,l.isUndefined)(this.plugins[e])?(console.error("Failed to modify status for plugin "+e+". The plugin was not properly registered."),!1):(this.plugins[e].status="ready",!0):(console.error("Failed to modify status for plugin "+e+". Expected parameter `pluginName` to be a string."),!1)}_reloaded(e){return(0,l.isString)(e)?(0,l.isUndefined)(this.plugins[e])?(console.error("Failed to reload Content Analysis for plugin "+e+". The plugin was not properly registered."),!1):(this.refresh(),!0):(console.error("Failed to reload Content Analysis for "+e+". Expected parameter `pluginName` to be a string."),!1)}_registerModification(e,t,s,n){if(!(0,l.isString)(e))return console.error("Failed to register modification for plugin "+s+". Expected parameter `modification` to be a string."),!1;if(!(0,l.isFunction)(t))return console.error("Failed to register modification for plugin "+s+". Expected parameter `callable` to be a function."),!1;if(!(0,l.isString)(s))return console.error("Failed to register modification for plugin "+s+". Expected parameter `pluginName` to be a string."),!1;if(!1===this._validateOrigin(s))return console.error("Failed to register modification for plugin "+s+". The integration has not finished loading yet."),!1;const i={callable:t,origin:s,priority:(0,l.isNumber)(n)?n:10};return(0,l.isUndefined)(this.modifications[e])&&(this.modifications[e]=[]),this.modifications[e].push(i),!0}_registerAssessment(e,t,s,n){return(0,l.isString)(t)?(0,l.isObject)(s)?(0,l.isString)(n)?(t=n+"-"+t,e.addAssessment(t,s),!0):(console.error("Failed to register assessment for plugin "+n+". Expected parameter `pluginName` to be a string."),!1):(console.error("Failed to register assessment for plugin "+n+". Expected parameter `assessment` to be a function."),!1):(console.error("Failed to register test for plugin "+n+". Expected parameter `name` to be a string."),!1)}_applyModifications(e,t,s){let n=this.modifications[e];return!(0,l.isArray)(n)||n.length<1||(n=this._stripIllegalModifications(n),n.sort(((e,t)=>e.priority-t.priority)),(0,l.forEach)(n,(function(n){const i=n.callable(t,s);typeof i==typeof t?t=i:console.error("Modification with name "+e+" performed by plugin with name "+n.origin+" was ignored because the data that was returned by it was of a different type than the data we had passed it.")}))),t}_pollLoadingPlugins(e){e=(0,l.isUndefined)(e)?0:e,!0===this._allReady()?(this.loaded=!0,this.refresh()):e>=this.preloadThreshold?(this._pollTimeExceeded(),this.loaded=!0,this.refresh()):(e+=50,setTimeout(this._pollLoadingPlugins.bind(this,e),50))}_allReady(){return(0,l.reduce)(this.plugins,(function(e,t){return e&&"ready"===t.status}),!0)}_pollTimeExceeded(){(0,l.forEach)(this.plugins,(function(e,t){(0,l.isUndefined)(e.options)||"ready"===e.options.status||(console.error("Error: Plugin "+t+". did not finish loading in time."),delete this.plugins[t])}))}_stripIllegalModifications(e){return(0,l.forEach)(e,((t,s)=>{!1===this._validateOrigin(t.origin)&&delete e[s]})),e}_validateOrigin(e){return"ready"===this.plugins[e].status}_validateUniqueness(e){return(0,l.isUndefined)(this.plugins[e])}}function xt(e,t,s){e("morphology",new Ce.Paper("",{keyword:s})).then((e=>{const s=e.result.keyphraseForms;t.dispatch(ne.actions.updateWordsToHighlight((0,l.uniq)((0,l.flatten)(s))))})).catch((()=>{t.dispatch(ne.actions.updateWordsToHighlight([]))}))}var Et="score-text",St="image yoast-logo svg",Rt=jQuery;function Ct(e,t,s=null){return null!==s?(0,l.get)(s,t,""):(0,l.get)(wpseoScriptData,`metabox.publish_box.labels.${e}.${t}`,"")}function Tt(e,t,s=null){var n=Rt("#"+e+"-score"),i=St+" "+t;n.children(".image").attr("class",i);var r=Ct(e,t,s);n.children("."+Et).html(r)}function Pt(e,t,s=null){const n=Rt("
            ",{class:"misc-pub-section yoast yoast-seo-score "+e+"-score",id:e+"-score"}),i=Rt("",{class:Et,html:Ct(e,t,s)}),r=Rt("").attr("class",St+" na");n.append(r).append(i),Rt("#yoast-seo-publishbox-section").append(n)}function Ot(e){const t=Rt("#wpadminbar"),s=Rt(e);if(!t||!s)return;const n="fixed"===t.css("position")?t.height():0;Rt([document.documentElement,document.body]).animate({scrollTop:s.offset().top-n},1e3),s.trigger("focus"),0===s.parent().siblings().length&&s.trigger("click")}function At(){var e="na";wpseoScriptData.metabox.keywordAnalysisActive&&Pt("keyword",e),wpseoScriptData.metabox.contentAnalysisActive&&Pt("content",e),wpseoScriptData.metabox.inclusiveLanguageAnalysisActive&&Pt("inclusive-language",e),Rt("#content-score").on("click","[href='#yoast-readability-analysis-collapsible-metabox']",(function(e){e.preventDefault(),document.querySelector("#wpseo-meta-tab-readability").click(),Ot("#wpseo-meta-section-readability")})),Rt("#keyword-score").on("click","[href='#yoast-seo-analysis-collapsible-metabox']",(function(e){e.preventDefault(),document.querySelector("#wpseo-meta-tab-content").click(),Ot("#yoast-seo-analysis-collapsible-metabox")})),Rt("#inclusive-language-score").on("click","[href='#yoast-inclusive-language-analysis-collapsible-metabox']",(function(e){e.preventDefault(),document.querySelector("#wpseo-meta-tab-inclusive-language").click(),Ot("#wpseo-meta-section-inclusive-language")}))}function It(e){var t=jQuery(".yst-traffic-light"),s=t.closest(".wpseo-meta-section-link"),n=jQuery("#wpseo-traffic-light-desc"),i=e.className||"na";t.attr("class","yst-traffic-light "+i),s.attr("aria-describedby","wpseo-traffic-light-desc"),n.length>0?n.text(e.screenReaderText):s.closest("li").append(""+e.screenReaderText+"")}function Mt(e){jQuery("#wp-admin-bar-wpseo-menu .wpseo-score-icon").attr("title",e.screenReaderText).attr("class","wpseo-score-icon "+e.className).find(".wpseo-score-text").text(e.screenReaderText)}function Lt(){return(0,l.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}function Nt(){const e=Lt();return(0,l.get)(e,"contentLocale","en_US")}function Dt(){const e=Lt();return(0,l.get)(e,"translations",{domain:"wordpress-seo",locale_data:{"wordpress-seo":{"":{}}}})}function Bt(){const e=Lt();return!0===(0,l.get)(e,"contentAnalysisActive",!1)}function Ft(){const e=Lt();return!0===(0,l.get)(e,"keywordAnalysisActive",!1)}function $t(){const e=Lt();return!0===(0,l.get)(e,"inclusiveLanguageAnalysisActive",!1)}const Ut=window.yoast.featureFlag;function qt(){}let zt=!1;function jt(e){return e.sort(((e,t)=>e._identifier.localeCompare(t._identifier)))}function Yt(e,t,s,n,i){if(!zt)return;const r=Ce.Paper.parse(t());e.analyze(r).then((a=>{const{result:{seo:o,readability:l,inclusiveLanguage:c}}=a;if(o){const e=o[""];e.results.forEach((e=>{e.getMarker=()=>()=>s(r,e.marks)})),e.results=jt(e.results),n.dispatch(ne.actions.setSeoResultsForKeyword(r.getKeyword(),e.results)),n.dispatch(ne.actions.setOverallSeoScore(e.score,r.getKeyword())),n.dispatch(ne.actions.refreshSnippetEditor()),i.saveScores(e.score,r.getKeyword())}l&&(l.results.forEach((e=>{e.getMarker=()=>()=>s(r,e.marks)})),l.results=jt(l.results),n.dispatch(ne.actions.setReadabilityResults(l.results)),n.dispatch(ne.actions.setOverallReadabilityScore(l.score)),n.dispatch(ne.actions.refreshSnippetEditor()),i.saveContentScore(l.score)),c&&(c.results.forEach((e=>{e.getMarker=()=>()=>s(r,e.marks)})),c.results=jt(c.results),n.dispatch(ne.actions.setInclusiveLanguageResults(c.results)),n.dispatch(ne.actions.setOverallInclusiveLanguageScore(c.score)),n.dispatch(ne.actions.refreshSnippetEditor()),i.saveInclusiveLanguageScore(c.score)),(0,h.doAction)("yoast.analysis.refresh",a,{paper:r,worker:e,collectData:t,applyMarks:s,store:n,dataCollector:i})})).catch(qt)}const Vt="yoast-measurement-element";function Kt(e){let t=document.getElementById(Vt);return t||(t=function(){const e=document.createElement("div");return e.id=Vt,e.style.position="absolute",e.style.left="-9999em",e.style.top=0,e.style.height=0,e.style.overflow="hidden",e.style.fontFamily="arial, sans-serif",e.style.fontSize="20px",e.style.fontWeight="400",document.body.appendChild(e),e}()),t.innerText=e,t.offsetWidth}const Wt=e=>(e=e.filter((e=>e.isValid))).map((e=>{const t=(0,qe.serialize)([e],{isInnerBlocks:!1});return e.blockLength=t&&t.length,e.innerBlocks&&(e.innerBlocks=Wt(e.innerBlocks)),e}));function Ht(e){return(0,l.isNil)(e)||(e/=10),function(e){switch(e){case"feedback":return{className:"na",screenReaderText:(0,g.__)("Feedback","wordpress-seo"),screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""};case"bad":return{className:"bad",screenReaderText:(0,g.__)("Needs improvement","wordpress-seo"),screenReaderReadabilityText:(0,g.__)("Needs improvement","wordpress-seo"),screenReaderInclusiveLanguageText:(0,g.__)("Needs improvement","wordpress-seo")};case"ok":return{className:"ok",screenReaderText:(0,g.__)("OK SEO score","wordpress-seo"),screenReaderReadabilityText:(0,g.__)("OK","wordpress-seo"),screenReaderInclusiveLanguageText:(0,g.__)("Potentially non-inclusive","wordpress-seo")};case"good":return{className:"good",screenReaderText:(0,g.__)("Good SEO score","wordpress-seo"),screenReaderReadabilityText:(0,g.__)("Good","wordpress-seo"),screenReaderInclusiveLanguageText:(0,g.__)("Good","wordpress-seo")};default:return{className:"loading",screenReaderText:"",screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""}}}(Ce.interpreters.scoreToRating(e))}const{tmceId:Qt}=t,Zt=jQuery,Gt=function(e){"object"==typeof CKEDITOR&&console.warn("YoastSEO currently doesn't support ckEditor. The content analysis currently only works with the HTML editor or TinyMCE."),this._data=e.data,this._store=e.store};Gt.prototype.getData=function(){const e=this._data.getData(),t=this._store.getState();return{keyword:Ft()?this.getKeyword():"",meta:this.getMeta(),text:e.content,title:e.title,url:e.slug,excerpt:e.excerpt,snippetTitle:this.getSnippetTitle(),snippetMeta:this.getSnippetMeta(),snippetCite:this.getSnippetCite(),primaryCategory:this.getPrimaryCategory(),searchUrl:this.getSearchUrl(),postUrl:this.getPostUrl(),permalink:this.getPermalink(),titleWidth:Kt(this.getSnippetTitle()),metaTitle:(0,l.get)(t,["analysisData","snippet","title"],this.getSnippetTitle()),url:(0,l.get)(t,["snippetEditor","data","slug"],e.slug),meta:this.getMetaDescForAnalysis(t)}},Gt.prototype.getKeyword=function(){return document.getElementById("yoast_wpseo_focuskw")&&document.getElementById("yoast_wpseo_focuskw").value||""},Gt.prototype.getMetaDescForAnalysis=function(e){let t=(0,l.get)(e,["analysisData","snippet","description"],this.getSnippetMeta());return""!==wpseoScriptData.metabox.metaDescriptionDate&&(t=wpseoScriptData.metabox.metaDescriptionDate+" - "+t),t},Gt.prototype.getMeta=function(){return document.getElementById("yoast_wpseo_metadesc")&&document.getElementById("yoast_wpseo_metadesc").value||""},Gt.prototype.getText=function(){return Ce.markers.removeMarks(ht(Qt))},Gt.prototype.getTitle=function(){return document.getElementById("title")&&document.getElementById("title").value||""},Gt.prototype.getUrl=function(){const e=(0,d.select)("core/editor");if(e&&e.getCurrentPostAttribute("slug"))return e.getCurrentPostAttribute("slug");var t="",s=Zt("#new-post-slug");return 0 label");return n.length?e=this.getCategoryName(n):e},Gt.prototype.getSearchUrl=function(){return wpseoScriptData.metabox.search_url},Gt.prototype.getPostUrl=function(){return wpseoScriptData.metabox.post_edit_url},Gt.prototype.getPermalink=function(){var e=this.getUrl();return wpseoScriptData.metabox.base_url+e},Gt.prototype.getCategoryName=function(e){var t=e.clone();return t.children().remove(),t.text().trim()},Gt.prototype.setDataFromSnippet=function(e,t){switch(t){case"snippet_meta":document.getElementById("yoast_wpseo_metadesc").value=e;break;case"snippet_cite":if(this.leavePostNameUntouched)return void(this.leavePostNameUntouched=!1);null!==document.getElementById("post_name")&&(document.getElementById("post_name").value=e),null!==document.getElementById("editable-post-name")&&null!==document.getElementById("editable-post-name-full")&&(document.getElementById("editable-post-name").textContent=e,document.getElementById("editable-post-name-full").textContent=e);break;case"snippet_title":document.getElementById("yoast_wpseo_title").value=e}},Gt.prototype.saveSnippetData=function(e){this.setDataFromSnippet(e.title,"snippet_title"),this.setDataFromSnippet(e.urlPath,"snippet_cite"),this.setDataFromSnippet(e.metaDesc,"snippet_meta")},Gt.prototype.bindElementEvents=function(e){this.inputElementEventBinder(e),this.changeElementEventBinder(e)},Gt.prototype.changeElementEventBinder=function(e){for(var t=["#yoast-wpseo-primary-category",'.categorychecklist input[name="post_category[]"]'],s=0;s{e=(0,l.merge)(e,t())})),e}}window.wp.annotations;const es=function(e){return(0,l.uniq)((0,l.flatten)(e.map((e=>{if(!(0,l.isUndefined)(e.getFieldsToMark()))return e.getFieldsToMark()}))))},ts=window.wp.richText,ss=/(<([a-z]|\/)[^<>]+>)/gi,{htmlEntitiesRegex:ns}=Ce.helpers.htmlEntities,is=e=>{let t=0;return(0,l.forEachRight)(e,(e=>{const[s]=e;let n=s.length;/^<\/?br/.test(s)&&(n-=1),t+=n})),t},rs="",as="",os='';function ls(e,t,s,n,i){const r=n.clientId,a=(0,ts.create)({html:e,multilineTag:s.multilineTag,multilineWrapperTag:s.multilineWrapperTag}).text;return(0,l.flatMap)(i,(s=>{let i;return i=s.hasBlockPosition&&s.hasBlockPosition()?function(e,t,s,n,i){if(t===e.getBlockClientId()){let t=e.getBlockPositionStart(),r=e.getBlockPositionEnd();if(e.isMarkForFirstBlockSection()){const e=((e,t,s)=>{const n="yoast/faq-block"===s?'':'';return{blockStartOffset:e-=n.length,blockEndOffset:t-=n.length}})(t,r,s);t=e.blockStartOffset,r=e.blockEndOffset}if(n.slice(t,r)===i.slice(t,r))return[{startOffset:t,endOffset:r}];const a=((e,t,s)=>{const n=s.slice(0,e),i=s.slice(0,t),r=((e,t,s,n)=>{const i=[...e.matchAll(ss)];s-=is(i);const r=[...t.matchAll(ss)];return{blockStartOffset:s,blockEndOffset:n-=is(r)}})(n,i,e,t),a=((e,t,s,n)=>{let i=[...e.matchAll(ns)];return(0,l.forEachRight)(i,(e=>{const[,t]=e;s-=t.length})),i=[...t.matchAll(ns)],(0,l.forEachRight)(i,(e=>{const[,t]=e;n-=t.length})),{blockStartOffset:s,blockEndOffset:n}})(n,i,e=r.blockStartOffset,t=r.blockEndOffset);return{blockStartOffset:e=a.blockStartOffset,blockEndOffset:t=a.blockEndOffset}})(t,r,n);return[{startOffset:a.blockStartOffset,endOffset:a.blockEndOffset}]}return[]}(s,r,n.name,e,a):function(e,t){const s=t.getOriginal().replace(/(<([^>]+)>)/gi,""),n=t.getMarked().replace(/(<(?!\/?yoastmark)[^>]+>)/gi,""),i=function(e,t,s=!0){const n=[];if(0===e.length)return n;let i,r=0;for(s||(t=t.toLowerCase(),e=e.toLowerCase());(i=e.indexOf(t,r))>-1;)n.push(i),r=i+t.length;return n}(e,s);if(0===i.length)return[];const r=function(e){let t=e.indexOf(rs);const s=t>=0;s||(t=e.indexOf(os));let n=null;const i=[];for(;t>=0;){if(n=(e=s?e.replace(rs,""):e.replace(os,"")).indexOf(as),n{i.forEach((n=>{const i=n+e.startOffset;let r=n+e.endOffset;0===e.startOffset&&e.endOffset===t.getOriginal().length&&(r=n+s.length),a.push({startOffset:i,endOffset:r})}))})),a}(a,s),i?i.map((e=>({...e,block:r,richTextIdentifier:t}))):[]}))}const cs=e=>e[0].toUpperCase()+e.slice(1),ps=(e,t,s,n,i)=>(e=e.map((e=>{const r=`${e.id}-${i[0]}`,a=`${e.id}-${i[1]}`,o=cs(i[0]),l=cs(i[1]),c=e[`json${o}`],p=e[`json${l}`],{marksForFirstSection:d,marksForSecondSection:u}=((e,t)=>({marksForFirstSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&e.isMarkForFirstBlockSection():e)),marksForSecondSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&!e.isMarkForFirstBlockSection():e))}))(t,e),h=ls(c,r,s,n,d),g=ls(p,a,s,n,u);return h.concat(g)})),(0,l.flattenDeep)(e)),ds="yoast";let us=[];const hs={"core/paragraph":[{key:"content"}],"core/list":[{key:"values",multilineTag:"li",multilineWrapperTag:["ul","ol"]}],"core/list-item":[{key:"content"}],"core/heading":[{key:"content"}],"core/audio":[{key:"caption"}],"core/embed":[{key:"caption"}],"core/gallery":[{key:"caption"}],"core/image":[{key:"caption"}],"core/table":[{key:"caption"}],"core/video":[{key:"caption"}],"yoast/faq-block":[{key:"questions"}],"yoast/how-to-block":[{key:"steps"},{key:"jsonDescription"}]};function gs(){const e=us.shift();e&&((0,d.dispatch)("core/annotations").__experimentalAddAnnotation(e),ms())}function ms(){(0,l.isFunction)(window.requestIdleCallback)?window.requestIdleCallback(gs,{timeout:1e3}):setTimeout(gs,150)}const ys=(e,t)=>{return(0,l.flatMap)((s=e.name,hs.hasOwnProperty(s)?hs[s]:[]),(s=>"yoast/faq-block"===e.name?((e,t,s)=>{const n=t.attributes[e.key];return 0===n.length?[]:ps(n,s,e,t,["question","answer"])})(s,e,t):"yoast/how-to-block"===e.name?((e,t,s)=>{const n=t.attributes[e.key];if(n&&0===n.length)return[];const i=[];return"steps"===e.key&&i.push(ps(n,s,e,t,["name","text"])),"jsonDescription"===e.key&&(s=s.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?!e.getBlockAttributeId():e)),i.push(ls(n,"description",e,t,s))),(0,l.flattenDeep)(i)})(s,e,t):function(e,t,s){const n=e.key,i=((e,t)=>{const s=e.attributes[t];return"string"==typeof s?s:s.toString()})(t,n);return ls(i,n,e,t,s)}(s,e,t)));var s};function fs(e,t){return(0,l.flatMap)(e,(e=>{const s=function(e){return e.innerBlocks.length>0}(e)?fs(e.innerBlocks,t):[];return ys(e,t).concat(s)}))}function ws(e){us=[],(0,d.dispatch)("core/annotations").__experimentalRemoveAnnotationsBySource(ds);const t=es(e);if(0===e.length)return;let s=(0,d.select)("core/block-editor").getBlocks();var n;t.length>0&&(s=s.filter((e=>t.some((t=>"core/"+t===e.name))))),n=fs(s,e),us=n.map((e=>({blockClientId:e.block,source:ds,richTextIdentifier:e.richTextIdentifier,range:{start:e.startOffset,end:e.endOffset}}))),ms()}function bs(e,t){let s;ut(lt)&&((0,l.isUndefined)(s)&&(s=tt(tinyMCE.get(lt))),s(e,t)),(0,d.select)("core/block-editor")&&(0,l.isFunction)((0,d.select)("core/block-editor").getBlocks)&&(0,d.select)("core/annotations")&&(0,l.isFunction)((0,d.dispatch)("core/annotations").__experimentalAddAnnotation)&&(function(e,t){tinyMCE.editors.map((e=>tt(e))).forEach((s=>s(e,t)))}(e,t),ws(t)),(0,h.doAction)("yoast.analysis.applyMarks",t)}function _s(){const e=(0,d.select)("yoast-seo/editor").isMarkingAvailable(),t=(0,d.select)("yoast-seo/editor").getMarkerPauseStatus();return!e||t?l.noop:bs}var ks=jQuery;function vs(e,t,s,n,i){this._scriptUrl=n,this._options={usedKeywords:t.keyword_usage,usedKeywordsPostTypes:t.keyword_usage_post_types,searchUrl:t.search_url,postUrl:t.post_edit_url},this._keywordUsage=t.keyword_usage,this._usedKeywordsPostTypes=t.keyword_usage_post_types,this._postID=ks("#post_ID, [name=tag_ID]").val(),this._taxonomy=ks("[name=taxonomy]").val()||"",this._nonce=i,this._ajaxAction=e,this._refreshAnalysis=s,this._initialized=!1}vs.prototype.init=function(){const{worker:e}=window.YoastSEO.analysis;this.requestKeywordUsage=(0,l.debounce)(this.requestKeywordUsage.bind(this),500),e.loadScript(this._scriptUrl).then((()=>{e.sendMessage("initialize",this._options,"used-keywords-assessment")})).then((()=>{this._initialized=!0,(0,l.isEqual)(this._options.usedKeywords,this._keywordUsage)?this._refreshAnalysis():e.sendMessage("updateKeywordUsage",this._keywordUsage,"used-keywords-assessment").then((()=>this._refreshAnalysis()))})).catch((e=>console.error(e)))},vs.prototype.setKeyword=function(e){(0,l.has)(this._keywordUsage,e)||this.requestKeywordUsage(e)},vs.prototype.requestKeywordUsage=function(e){ks.post(ajaxurl,{action:this._ajaxAction,post_id:this._postID,keyword:e,taxonomy:this._taxonomy,nonce:this._nonce},this.updateKeywordUsage.bind(this,e),"json")},vs.prototype.updateKeywordUsage=function(e,t){const{worker:s}=window.YoastSEO.analysis,n=t.keyword_usage,i=t.post_types;n&&(0,l.isArray)(n)&&(this._keywordUsage[e]=n,this._usedKeywordsPostTypes[e]=i,this._initialized&&s.sendMessage("updateKeywordUsage",{usedKeywords:this._keywordUsage,usedKeywordsPostTypes:this._usedKeywordsPostTypes},"used-keywords-assessment").then((()=>this._refreshAnalysis())))};const{setFocusKeyword:xs,setMarkerStatus:Es,updateData:Ss,setCornerstoneContent:Rs,refreshSnippetEditor:Cs,setReadabilityResults:Ts,setSeoResultsForKeyword:Ps}=ne.actions;function Os(e,s,i){if("undefined"==typeof wpseoScriptData)return;let r,a,o,c;const p=new Xt;function u(e){return""===e.responseText?a.val():jQuery("
            "+e.responseText+"
            ").find("#editable-post-name-full").text()}function g(){const e={};return Ft()&&(e.output="does-not-really-exist-but-it-needs-something"),Bt()&&(e.contentOutput="also-does-not-really-exist-but-it-needs-something"),e}function m(e){(0,l.isUndefined)(e.seoAssessorPresenter)||(e.seoAssessorPresenter.render=function(){}),(0,l.isUndefined)(e.contentAssessorPresenter)||(e.contentAssessorPresenter.render=function(){},e.contentAssessorPresenter.renderIndividualRatings=function(){})}let y;function f(e,t){const s=y||"";y=e.getState().analysisData.snippet,!(0,Te.isShallowEqualObjects)(s,y)&&t()}function w(e,t){"visual"!==e?t.dispatch(Es("disabled")):t.dispatch(Es("enabled"))}function b(){return(0,d.select)("core/edit-post").getEditorMode()}jQuery(document).on("ajaxComplete",(function(e,t,n){if("/admin-ajax.php"===n.url.substring(n.url.length-15)&&"string"==typeof n.data&&-1!==n.data.indexOf("action=sample-permalink")){c.leavePostNameUntouched=!0;const e={slug:u(t)};s.dispatch(Ss(e))}})),function(){if(r=e("#wpseo_meta"),pt(s),_t(),function(){const e=new at;e.isClassicEditorHidden()&&mt(),e.vcActive?mt():e.listen({classicEditorHidden:()=>{mt()},classicEditorShown:()=>{bt()||yt()}})}(),0===r.length)return;c=function(e){const t=new Jt({data:e,store:s});return t.leavePostNameUntouched=!1,t}(i),At();const u=function(t){const s={elementTarget:[lt,"yoast_wpseo_focuskw_text_input","yoast_wpseo_metadesc","excerpt","editable-post-name","editable-post-name-full"],targets:g(),callbacks:{getData:c.getData.bind(c)},locale:wpseoScriptData.metabox.contentLocale,marker:_s(),contentAnalysisActive:Bt(),keywordAnalysisActive:Ft(),debouncedRefresh:!1,researcher:new window.yoast.Researcher.default};Ft()&&(t.dispatch(xs(e("#yoast_wpseo_focuskw").val())),s.callbacks.saveScores=c.saveScores.bind(c),s.callbacks.updatedKeywordsResults=function(e){const s=t.getState().focusKeyword;t.dispatch(Ps(s,e)),t.dispatch(Cs())}),Bt()&&(s.callbacks.saveContentScore=c.saveContentScore.bind(c),s.callbacks.updatedContentResults=function(e){t.dispatch(Ts(e)),t.dispatch(Cs())}),a=e("#title");const n=Dt();return(0,l.isUndefined)(n)||(0,l.isUndefined)(n.domain)||(s.translations=n),s}(s);o=new Ce.App(u),window.YoastSEO=window.YoastSEO||{},window.YoastSEO.app=o,window.YoastSEO.store=s,window.YoastSEO.analysis={},window.YoastSEO.analysis.worker=function(){const e=(0,l.get)(window,["wpseoScriptData","analysis","worker","url"],"analysis-worker.js"),t=(0,Ce.createWorker)(e),s=(0,l.get)(window,["wpseoScriptData","analysis","worker","dependencies"],[]),n=[];for(const e in s){if(!Object.prototype.hasOwnProperty.call(s,e))continue;const t=window.document.getElementById(`${e}-js-translations`);if(!t)continue;const i=t.innerHTML.slice(214),r=i.indexOf(","),a=i.slice(0,r-1);try{const e=JSON.parse(i.slice(r+1,-4));n.push([a,e])}catch(t){console.warn(`Failed to parse translation data for ${e} to send to the Yoast SEO worker`);continue}}return t.postMessage({dependencies:s,translations:n}),new Ce.AnalysisWorkerWrapper(t)}(),window.YoastSEO.analysis.collectData=()=>function(e,t,s,n,i){const r=(0,l.cloneDeep)(t.getState());(0,l.merge)(r,s.getData());const a=e.getData();let o=null;i&&(o=i.getBlocks()||[],o=Wt(o));const c={text:a.content,textTitle:a.title,keyword:r.focusKeyword,synonyms:r.synonyms,description:r.analysisData.snippet.description||r.snippetEditor.data.description,title:r.analysisData.snippet.title||r.snippetEditor.data.title,slug:r.snippetEditor.data.slug,permalink:r.settings.snippetEditor.baseUrl+r.snippetEditor.data.slug,wpBlocks:o,date:r.settings.snippetEditor.date};n.loaded&&(c.title=n._applyModifications("data_page_title",c.title),c.title=n._applyModifications("title",c.title),c.description=n._applyModifications("data_meta_desc",c.description),c.text=n._applyModifications("content",c.text),c.wpBlocks=n._applyModifications("wpBlocks",c.wpBlocks));const p=r.analysisData.snippet.filteredSEOTitle;return c.titleWidth=Kt(p||r.snippetEditor.data.title),c.locale=Nt(),c.writingDirection=function(){let e="LTR";return Lt().isRtl&&(e="RTL"),e}(),c.shortcodes=window.wpseoScriptData.analysis.plugins.shortcodes?window.wpseoScriptData.analysis.plugins.shortcodes.wpseo_shortcode_tags:[],Ce.Paper.parse((0,h.applyFilters)("yoast.analysis.data",c))}(i,s,p,o.pluggable,(0,d.select)("core/block-editor")),window.YoastSEO.analysis.applyMarks=(e,t)=>_s()(e,t),window.YoastSEO.app.refresh=(0,l.debounce)((()=>Yt(window.YoastSEO.analysis.worker,window.YoastSEO.analysis.collectData,window.YoastSEO.analysis.applyMarks,s,c)),500),window.YoastSEO.app.registerCustomDataCallback=p.register,window.YoastSEO.app.pluggable=new vt(window.YoastSEO.app.refresh),window.YoastSEO.app.registerPlugin=window.YoastSEO.app.pluggable._registerPlugin,window.YoastSEO.app.pluginReady=window.YoastSEO.app.pluggable._ready,window.YoastSEO.app.pluginReloaded=window.YoastSEO.app.pluggable._reloaded,window.YoastSEO.app.registerModification=window.YoastSEO.app.pluggable._registerModification,window.YoastSEO.app.registerAssessment=(e,t,s)=>{if(!(0,l.isUndefined)(o.seoAssessor))return window.YoastSEO.app.pluggable._registerAssessment(o.defaultSeoAssessor,e,t,s)&&window.YoastSEO.app.pluggable._registerAssessment(o.cornerStoneSeoAssessor,e,t,s)},window.YoastSEO.app.changeAssessorOptions=function(e){window.YoastSEO.analysis.worker.initialize(e).catch(qt),window.YoastSEO.app.refresh()},function(e,t,s){const n=Lt();if(!n.previouslyUsedKeywordActive)return;const i=new vs("get_focus_keyword_usage_and_post_types",n,e,(0,l.get)(window,["wpseoScriptData","analysis","worker","keywords_assessment_url"],"used-keywords-assessment.js"),(0,l.get)(window,["wpseoScriptData","usedKeywordsNonce"],""));i.init();let r={};s.subscribe((()=>{const e=s.getState()||{};e.focusKeyword!==r.focusKeyword&&(r=e,i.setKeyword(e.focusKeyword))}))}(o.refresh,0,s),s.subscribe(f.bind(null,s,o.refresh)),window.YoastSEO.analyzerArgs=u,window.YoastSEO.wp={},window.YoastSEO.wp.replaceVarsPlugin=new Ue(o,s),function(e,t){let s=[];s=(0,h.applyFilters)("yoast.analysis.shortcodes",s);const n=wpseoScriptData.analysis.plugins.shortcodes.wpseo_shortcode_tags;s=s.filter((e=>n.includes(e))),s.length>0&&(t.dispatch(He(s)),window.YoastSEO.wp.shortcodePlugin=new Ke({registerPlugin:e.registerPlugin,registerModification:e.registerModification,pluginReady:e.pluginReady,pluginReloaded:e.pluginReloaded},s))}(o,s),Re()&&new ze(o.registerPlugin,o.registerModification,window.YoastSEO.app.refresh).register(),wpseoScriptData.metabox.markdownEnabled&&new Ge(o.registerPlugin,o.registerModification).register(),window.YoastSEO.wp._tinyMCEHelper=t,Ft()&&function(t){const s=Ht(e("#yoast_wpseo_linkdex").val());It(s),Mt(s),t.updateScore("keyword",s.className)}(n),Bt()&&function(t){const s=Ht(e("#yoast_wpseo_content_score").val());Mt(s),t.updateScore("content",s.className)}(n),$t()&&function(t){const s=Ht(e("#yoast_wpseo_inclusive_language_score").val());Mt(s),t.updateScore("inclusive-language",s.className)}(n),window.YoastSEO.analysis.worker.initialize(function(e={}){let t={locale:Nt(),contentAnalysisActive:Bt(),keywordAnalysisActive:Ft(),inclusiveLanguageAnalysisActive:$t(),defaultQueryParams:(0,l.get)(window,["wpseoAdminL10n","default_query_params"],{}),logLevel:(0,l.get)(window,["wpseoScriptData","analysis","worker","log_level"],"ERROR"),enabledFeatures:(0,Ut.enabledFeatures)()};t=(0,l.merge)(t,e);const s=Dt();return(0,l.isUndefined)(s)||(0,l.isUndefined)(s.domain)||(t.translations=s),t}()).then((()=>{jQuery(window).trigger("YoastSEO:ready")})).catch(qt),c.bindElementEvents((0,l.debounce)((()=>Yt(window.YoastSEO.analysis.worker,window.YoastSEO.analysis.collectData,window.YoastSEO.analysis.applyMarks,s,c)),500)),m(o);const y=o.initAssessorPresenters.bind(o);o.initAssessorPresenters=function(){y(),m(o)},i.setRefresh&&i.setRefresh(o.refresh);let _={title:(k=c).getSnippetTitle(),slug:k.getSnippetCite(),description:k.getSnippetMeta()};var k;const v=function(e){const t={};if((0,l.isUndefined)(e))return t;t.title=e.title_template;const s=e.metadesc_template;return(0,l.isEmpty)(s)||(t.description=s),t}(wpseoScriptData.metabox);_=function(e,t){const s={...e};return(0,l.forEach)(t,((t,n)=>{(0,l.has)(e,n)&&""===e[n]&&(s[n]=t)})),s}(_,v),s.dispatch(Ss(_)),s.dispatch(Rs("1"===document.getElementById("yoast_wpseo_is_cornerstone").value));let x=s.getState().focusKeyword;xt(window.YoastSEO.analysis.worker.runResearch,s,x);const E=(0,l.debounce)((()=>{o.refresh()}),50);let S=null;if(s.subscribe((()=>{const t=s.getState().focusKeyword;x!==t&&(x=t,xt(window.YoastSEO.analysis.worker.runResearch,s,x),e("#yoast_wpseo_focuskw").val(x),E());const n=function(e){const t=e.getState().snippetEditor.data;return{title:t.title,slug:t.slug,description:t.description}}(s),i=function(e,t){const s={...e};return(0,l.forEach)(t,((t,n)=>{(0,l.has)(e,n)&&e[n].trim()===t&&(s[n]="")})),s}(n,v);_.title!==n.title&&c.setDataFromSnippet(i.title,"snippet_title"),_.slug!==n.slug&&c.setDataFromSnippet(i.slug,"snippet_cite"),_.description!==n.description&&c.setDataFromSnippet(i.description,"snippet_meta");const r=s.getState();S!==r.isCornerstone&&(S=r.isCornerstone,document.getElementById("yoast_wpseo_is_cornerstone").value=r.isCornerstone,o.changeAssessorOptions({useCornerstone:r.isCornerstone})),_.title=n.title,_.slug=n.slug,_.description=n.description})),Re()){let e=b();w(e,s),(0,d.subscribe)((()=>{const t=b();t!==e&&(e=t,w(e,s))}))}zt=!0,window.YoastSEO.app.refresh()}()}window.YoastReplaceVarPlugin=Ue,window.YoastShortcodePlugin=We;const As=window.yoast.styledComponents;var Is=s.n(As);const Ms=window.wp.compose,Ls=({id:e,value:t,terms:s,label:n,onChange:i})=>{const r=(0,u.useCallback)((e=>{i(parseInt(e,10))}),[i]);return(0,c.createElement)(p.SelectControl,{__next40pxDefaultSize:!0,id:e,label:n,value:t,onChange:r,options:s.map((e=>({label:(0,l.unescape)(e.name),value:e.id})))})};Ls.propTypes={terms:f().arrayOf(f().shape({id:f().number.isRequired,name:f().string.isRequired})),onChange:f().func.isRequired,id:f().string,label:f().string,value:f().number};const Ns=Ls,Ds=Is().div` + padding-top: 16px; +`;class Bs extends u.Component{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.updateReplacementVariable=this.updateReplacementVariable.bind(this);const{fieldId:t,name:s}=e.taxonomy;this.input=document.getElementById(t),e.setPrimaryTaxonomyId(s,parseInt(this.input.value,10)),this.state={selectedTerms:[],terms:[]}}componentDidMount(){this.fetchTerms()}componentDidUpdate(e,t){if(e.selectedTermIds.lengthe.id===t))||this.onChange(e.length?e[0].id:-1)}termIsAvailable(e){return!!this.state.terms.find((t=>t.id===e))}fetchTerms(){const{taxonomy:e}=this.props;e&&(this.fetchRequest=fe()({path:(0,le.addQueryArgs)(`/wp/v2/${e.restBase}`,{per_page:-1,orderby:"count",order:"desc",_fields:"id,name"})}),this.fetchRequest.then((e=>{const t=this.state;this.setState({terms:e,selectedTerms:this.getSelectedTerms(e,this.props.selectedTermIds)},(()=>{0===t.terms.length&&this.state.terms.length>0&&this.updateReplacementVariable(this.props.primaryTaxonomyId)}))})))}getSelectedTerms(e,t){return e.filter((e=>t.includes(e.id)))}updateSelectedTerms(e,t){const s=this.getSelectedTerms(e,t);this.setState({selectedTerms:s})}onChange(e){const{name:t}=this.props.taxonomy;this.updateReplacementVariable(e),this.props.setPrimaryTaxonomyId(t,e),this.input.value=-1===e?"":e}updateReplacementVariable(e){if("category"!==this.props.taxonomy.name)return;const t=this.state.selectedTerms.find((t=>t.id===e));this.props.updateReplacementVariable(`primary_${this.props.taxonomy.name}`,t?t.name:"")}render(){const{primaryTaxonomyId:e,taxonomy:t,learnMoreLink:s}=this.props;if(this.state.selectedTerms.length<2)return null;const n=`yoast-primary-${t.name}-picker`;return(0,c.createElement)(Ds,{className:"components-base-control__field"},(0,c.createElement)(Ns,{label:(0,g.sprintf)(/* translators: %s expands to the taxonomy name. */ +(0,g.__)("Select the primary %s","wordpress-seo"),t.singularLabel.toLowerCase()),value:e,onChange:this.onChange,id:n,terms:this.state.selectedTerms}),(0,c.createElement)(p.ExternalLink,{href:s},(0,g.__)("Learn more","wordpress-seo"),(0,c.createElement)("span",{className:"screen-reader-text"},(0,g.__)("Learn more about the primary category.","wordpress-seo"))))}}Bs.propTypes={selectedTermIds:f().arrayOf(f().number),primaryTaxonomyId:f().number,setPrimaryTaxonomyId:f().func,updateReplacementVariable:f().func,taxonomy:f().shape({name:f().string,fieldId:f().string,restBase:f().string,singularLabel:f().string}),learnMoreLink:f().string.isRequired},Bs.defaultProps={selectedTermIds:[],primaryTaxonomyId:-1,setPrimaryTaxonomyId:l.noop,updateReplacementVariable:l.noop,taxonomy:{}};const Fs=Bs,$s=(0,Ms.compose)([(0,d.withSelect)(((e,t)=>{const s=e("core/editor"),n=e("yoast-seo/editor"),{taxonomy:i}=t;return{selectedTermIds:s.getEditedPostAttribute(i.restBase)||[],primaryTaxonomyId:n.getPrimaryTaxonomyId(i.name),learnMoreLink:n.selectLink("https://yoa.st/primary-category-more")}})),(0,d.withDispatch)((e=>{const{setPrimaryTaxonomyId:t,updateReplacementVariable:s}=e("yoast-seo/editor");return{setPrimaryTaxonomyId:t,updateReplacementVariable:s}}))])(Fs);let Us=null,qs=null;const zs=Is().div` + margin: 16px 0 8px; +`;class js extends u.Component{constructor(){super(),Us&&qs||(Us=(0,l.get)(window.wpseoPrimaryCategoryL10n,"taxonomies",{}),qs=(0,l.values)(Us).map((e=>e.name))),this.state={exceptionCaught:!1,error:null}}componentDidCatch(e){this.setState({exceptionCaught:!0,error:e})}taxonomyHasPrimaryTermSupport(){return qs.includes(this.props.slug)}render(){const{slug:e,OriginalComponent:t}=this.props;if(this.state.exceptionCaught){const e=(0,l.get)(this.state,"error.stack");return(0,c.createElement)(u.Fragment,null,(0,c.createElement)(t,{...this.props}),(0,c.createElement)(zs,null,(0,g.sprintf)(/* translators: %s expands to Yoast SEO. */ +(0,g.__)("An error occurred loading the %s primary taxonomy picker.","wordpress-seo"),"Yoast SEO")),e&&(0,c.createElement)(p.ClipboardButton,{isLarge:!0,text:e},(0,g.__)("Copy error","wordpress-seo")))}return this.taxonomyHasPrimaryTermSupport()?(0,c.createElement)(u.Fragment,null,(0,c.createElement)(t,{...this.props}),(0,c.createElement)($s,{taxonomy:Us[e]})):(0,c.createElement)(t,{...this.props})}}js.propTypes={OriginalComponent:f().func.isRequired,slug:f().string.isRequired};const Ys=js;let Vs=null;const Ks=()=>{if(null===Vs){const e=(0,d.dispatch)("yoast-seo/editor").runAnalysis;Vs=window.YoastSEO.app&&window.YoastSEO.app.pluggable?window.YoastSEO.app.pluggable:new vt(e)}return Vs},Ws=(e,t,s)=>Ks().loaded?Ks()._applyModifications(e,t,s):t;function Hs(){const{getAnalysisData:e,getEditorDataTitle:t}=(0,d.select)("yoast-seo/editor");let s=e();s={...s,textTitle:t()};const n=function(e){return e.title=Ws("data_page_title",e.title),e.title=Ws("title",e.title),e.description=Ws("data_meta_desc",e.description),e.text=Ws("content",e.text),e}(s);return(0,h.applyFilters)("yoast.analysis.data",n)}(0,l.debounce)((async function(e,t){const{text:s,...n}=t,i=new Ce.Paper(s,n);try{const t=await e.analyze(i),{seo:s,readability:n,inclusiveLanguage:r}=t.result;if(s){const e=s[""];e.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(i,e.marks)})),e.results=jt(e.results),(0,d.dispatch)("yoast-seo/editor").setSeoResultsForKeyword(i.getKeyword(),e.results),(0,d.dispatch)("yoast-seo/editor").setOverallSeoScore(e.score,i.getKeyword())}n&&(n.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(i,e.marks)})),n.results=jt(n.results),(0,d.dispatch)("yoast-seo/editor").setReadabilityResults(n.results),(0,d.dispatch)("yoast-seo/editor").setOverallReadabilityScore(n.score)),r&&(r.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(i,e.marks)})),r.results=jt(r.results),(0,d.dispatch)("yoast-seo/editor").setInclusiveLanguageResults(r.results),(0,d.dispatch)("yoast-seo/editor").setOverallInclusiveLanguageScore(r.score)),(0,h.doAction)("yoast.analysis.run",t,{paper:i})}catch(e){}}),500);const Qs=()=>{const{getContentLocale:e}=(0,d.select)("yoast-seo/editor"),t=((...e)=>()=>e.map((e=>e())))(e,Hs),s=(()=>{const{setEstimatedReadingTime:e,setFleschReadingEase:t,setTextLength:s}=(0,d.dispatch)("yoast-seo/editor"),n=(0,l.get)(window,"YoastSEO.analysis.worker.runResearch",l.noop);return()=>{const i=Ce.Paper.parse(Hs());n("readingTime",i).then((t=>e(t.result))),n("getFleschReadingScore",i).then((e=>{e.result&&t(e.result)})),n("wordCountInText",i).then((e=>s(e.result)))}})();return setTimeout(s,1500),((e,t)=>{let s=e();return()=>{const n=e();(0,l.isEqual)(n,s)||(s=n,t((0,l.clone)(n)))}})(t,s)};window.wpseoPostScraperL10n=window.wpseoScriptData.metabox,window.wpseoShortcodePluginL10n=window.wpseoScriptData.analysis.plugins.shortcodes,window.YoastSEO=window.YoastSEO||{},r()((()=>{(function(e){function t(e){e&&(e.focus(),e.click())}function s(){if(e(".wpseo-meta-section").length>0){const t=e(".wpseo-meta-section-link");e(".wpseo-metabox-menu li").filter((function(){return"#wpseo-meta-section-content"===e(this).find(".wpseo-meta-section-link").attr("href")})).addClass("active").find("[role='tab']").addClass("yoast-active-tab"),e("#wpseo-meta-section-content, .wpseo-meta-section-react").addClass("active"),t.on("click",(function(s){var n=e(this).attr("id"),i=e(this).attr("href"),r=e(i);s.preventDefault(),e(".wpseo-metabox-menu li").removeClass("active").find("[role='tab']").removeClass("yoast-active-tab"),e(".wpseo-meta-section").removeClass("active"),e(".wpseo-meta-section-react.active").removeClass("active"),"#wpseo-meta-section-content"===i&&e(".wpseo-meta-section-react").addClass("active"),r.addClass("active"),e(this).parent("li").addClass("active").find("[role='tab']").addClass("yoast-active-tab");const a=function(e,t={}){return new CustomEvent("YoastSEO:metaTabChange",{detail:t})}(0,{metaTabId:n});window.dispatchEvent(a),this&&(t.attr({"aria-selected":"false",tabIndex:"-1"}),this.removeAttribute("tabindex"),this.setAttribute("aria-selected","true"))}))}}window.wpseoInitTabs=s,window.wpseo_init_tabs=s,e(".wpseo-meta-section").each((function(t,s){e(s).find(".wpseotab:first").addClass("active")})),window.wpseo_init_tabs(),function(){const s=e(".yoast-aria-tabs"),n=s.find("[role='tab']"),i=s.attr("aria-orientation")||"horizontal";n.attr({"aria-selected":!1,tabIndex:"-1"}),n.filter(".yoast-active-tab").removeAttr("tabindex").attr("aria-selected","true"),n.on("keydown",(function(s){-1!==[32,35,36,37,38,39,40].indexOf(s.which)&&("horizontal"===i&&-1!==[38,40].indexOf(s.which)||"vertical"===i&&-1!==[37,39].indexOf(s.which)||function(s,n){const i=s.which,r=n.index(e(s.target));switch(i){case 32:s.preventDefault(),t(n[r]);break;case 35:s.preventDefault(),t(n[n.length-1]);break;case 36:s.preventDefault(),t(n[0]);break;case 37:case 38:s.preventDefault(),t(n[r-1<0?n.length-1:r-1]);break;case 39:case 40:s.preventDefault(),t(n[r+1===n.length?0:r+1])}}(s,n))}))}()})(o()),"undefined"!=typeof wpseoPrimaryCategoryL10n&&function(e){var t,s,n=wpseoPrimaryCategoryL10n.taxonomies;function i(t){return e("#yoast-wpseo-primary-"+t).val()}function r(t,s){e("#yoast-wpseo-primary-"+t).val(s).trigger("change");const n=(0,d.dispatch)("yoast-seo/editor");if(n){const i=parseInt(s,10);n.setPrimaryTaxonomyId(t,i),"category"===t&&n.updateReplacementVariable("primary_category",function(t){const s=e("#category-all").find(`#category-${t} > label`);if(0===s.length)return"";const n=s.clone();return n.children().remove(),n.text().trim()}(i))}}function a(r){var a,o,l;a=e("#"+r+'checklist input[type="checkbox"]:checked');var c=e("#"+r+"checklist li");c.removeClass("wpseo-term-unchecked wpseo-primary-term wpseo-non-primary-term"),e(".wpseo-primary-category-label").remove(),c.addClass("wpseo-term-unchecked"),a.length<=1||a.each((function(a,c){c=e(c),(o=c.closest("li")).removeClass("wpseo-term-unchecked"),1!==e(c).closest("li").children(".wpseo-make-primary-term").length&&function(s,i){var r,a;r=e(i).closest("label"),a=t({taxonomy:n[s],term:r.text()}),r.after(a)}(r,c),c.val()===i(r)?(o.addClass("wpseo-primary-term"),(l=c.closest("label")).find(".wpseo-primary-category-label").remove(),l.append(s({taxonomy:n[r]}))):o.addClass("wpseo-non-primary-term")}))}function o(t){r(t,e("#"+t+'checklist input[type="checkbox"]:checked:first').val()),a(t)}function p(e){""===i(e)&&o(e)}e.fn.initYstSEOPrimaryCategory=function(){return this.each((function(t,s){const n=e("#"+s.name+"div");var l;a(s.name),n.on("click",'input[type="checkbox"]',(l=s.name,function(){!1===e(this).prop("checked")&&e(this).val()===i(l)&&o(l),p(l),a(l)})),n.on("wpListAddEnd","#"+s.name+"checklist",function(e){return function(){p(e),a(e)}}(s.name)),n.on("click",".wpseo-make-primary-term",function(t){return function(s){var n;n=e(s.currentTarget).siblings("label").find("input"),r(t,n.val()),a(t),n.trigger("focus")}}(s.name))}))},t=wp.template("primary-term-ui"),s=wp.template("primary-term-screen-reader"),e(_.values(n)).initYstSEOPrimaryCategory(),Re()&&(0,l.get)(window,"wp.hooks.addFilter",l.noop)("editor.PostTaxonomyType","yoast-seo",(e=>class extends u.Component{render(){return(0,c.createElement)(Ys,{OriginalComponent:e,...this.props})}}))}(o());const t=function(){const t=(0,d.registerStore)("yoast-seo/editor",{reducer:(0,d.combineReducers)(ne.reducers),selectors:ne.selectors,actions:(0,l.pickBy)(ne.actions,(e=>"function"==typeof e)),controls:e});return(e=>{e.dispatch(ne.actions.setSettings({socialPreviews:{sitewideImage:window.wpseoScriptData.metabox.sitewide_social_image,siteName:window.wpseoScriptData.metabox.site_name,contentImage:window.wpseoScriptData.metabox.first_content_image,twitterCardType:window.wpseoScriptData.metabox.twitterCardType},snippetEditor:{baseUrl:window.wpseoScriptData.metabox.base_url,date:window.wpseoScriptData.metabox.metaDescriptionDate,recommendedReplacementVariables:window.wpseoScriptData.analysis.plugins.replaceVars.recommended_replace_vars,siteIconUrl:window.wpseoScriptData.metabox.siteIconUrl}})),e.dispatch(ne.actions.setSEMrushChangeCountry(window.wpseoScriptData.metabox.countryCode)),e.dispatch(ne.actions.setSEMrushLoginStatus(window.wpseoScriptData.metabox.SEMrushLoginStatus)),e.dispatch(ne.actions.setWincherLoginStatus(window.wpseoScriptData.metabox.wincherLoginStatus,!1)),e.dispatch(ne.actions.setWincherWebsiteId(window.wpseoScriptData.metabox.wincherWebsiteId)),e.dispatch(ne.actions.setWincherAutomaticKeyphaseTracking(window.wpseoScriptData.metabox.wincherAutoAddKeyphrases)),e.dispatch(ne.actions.setDismissedAlerts((0,l.get)(window,"wpseoScriptData.dismissedAlerts",{}))),e.dispatch(ne.actions.setCurrentPromotions((0,l.get)(window,"wpseoScriptData.currentPromotions",[]))),e.dispatch(ne.actions.setIsPremium(Boolean((0,l.get)(window,"wpseoScriptData.metabox.isPremium",!1)))),e.dispatch(ne.actions.setPostId(Number((0,l.get)(window,"wpseoScriptData.postId",null)))),e.dispatch(ne.actions.setAdminUrl((0,l.get)(window,"wpseoScriptData.adminUrl",""))),e.dispatch(ne.actions.setLinkParams((0,l.get)(window,"wpseoScriptData.linkParams",{}))),e.dispatch(ne.actions.setPluginUrl((0,l.get)(window,"wpseoScriptData.pluginUrl",""))),e.dispatch(ne.actions.setWistiaEmbedPermissionValue("1"===(0,l.get)(window,"wpseoScriptData.wistiaEmbedPermission",!1)))})(t),t}();window.yoast.initEditorIntegration(t);const s=new window.yoast.EditorData(l.noop,t);s.initialize(window.wpseoScriptData.analysis.plugins.replaceVars.replace_vars,window.wpseoScriptData.analysis.plugins.replaceVars.hidden_replace_vars),Os(o(),t,s),window.wpseoScriptData&&void 0!==window.wpseoScriptData.featuredImage&&function(e){var t,s,n,i=function(e){this._app=e,this.featuredImage=null,this.pluginName="addFeaturedImagePlugin",this.registerPlugin(),this.registerModifications()};function r(){e("#yst_opengraph_image_warning").remove(),s.removeClass("yoast-opengraph-image-notice")}i.prototype.setFeaturedImage=function(e){this.featuredImage=e,this._app.pluginReloaded(this.pluginName)},i.prototype.removeFeaturedImage=function(){this.setFeaturedImage(null)},i.prototype.registerPlugin=function(){this._app.registerPlugin(this.pluginName,{status:"ready"})},i.prototype.registerModifications=function(){this._app.registerModification("content",this.addImageToContent.bind(this),this.pluginName,10)},i.prototype.addImageToContent=function(e){return null!==this.featuredImage&&(e+=this.featuredImage),e};var a=wp.media.featuredImage.frame();if("undefined"==typeof YoastSEO)return;if(t=new i(YoastSEO.app),s=e("#postimagediv"),n=s.find(".hndle"),a.on("select",(function(){var i,o,l;!function(t){var i=t.state().get("selection").first().toJSON();i.width<200||i.height<200?0===e("#yst_opengraph_image_warning").length&&(e('

            '+wpseoScriptData.featuredImage.featured_image_notice+"

            ").insertAfter(n),s.addClass("yoast-opengraph-image-notice"),Se()(wpseoScriptData.featuredImage.featured_image_notice,"assertive")):r()}(a),l=(o=a.state().get("selection").first()).get("alt"),i=''+l+'',t.setFeaturedImage(i)})),s.on("click","#remove-post-thumbnail",(function(){t.removeFeaturedImage(),r()})),void 0!==e("#set-post-thumbnail > img").prop("src")&&t.setFeaturedImage(e("#set-post-thumbnail ").html()),!Re())return;let o,l;(0,d.subscribe)((()=>{const e=(0,d.select)("core/editor").getEditedPostAttribute("featured_media");if(function(e){return"number"==typeof e&&e>0}(e)&&(o=(0,d.select)("core").getMedia(e),void 0!==o&&o!==l)){l=o;const e=`${o.alt_text}`;t.setFeaturedImage(e)}}))}(o()),function(e){e(document).ready((function(e){void 0!==wp.media&&e(".wpseo_image_upload_button").each((function(t,s){const n=function(t){let s=(t=e(t)).data("target");return s&&""!==s||(s=e(t).attr("id").replace(/_button$/,"")),s}(s),i=e(s).data("target-id"),r=e("#"+n),a=e("#"+i);var o=wp.media.frames.file_frame=wp.media({title:wpseoScriptData.media.choose_image,button:{text:wpseoScriptData.media.choose_image},multiple:!1,library:{type:"image"}});o.on("select",(function(){var e=o.state().get("selection").first().toJSON();r.val(e.url),a.val(e.id)}));const l=e(s);l.click((function(e){e.preventDefault(),o.open()})),l.siblings(".wpseo_image_remove_button").on("click",(e=>{e.preventDefault(),r.val(""),a.val("")}))}))}))}(o()),function(e){function t(){e("#copy-home-meta-description").on("click",(function(){e("#open_graph_frontpage_desc").val(e("#meta_description").val())}))}function s(){var t=e("#wpseo-conf");if(t.length){var s=t.attr("action").split("#")[0];t.attr("action",s+window.location.hash)}}function n(){var t=window.location.hash.replace("#top#","");-1!==t.search("#top")&&(t=window.location.hash.replace("#top%23","")),""!==t&&"#"!==t.charAt(0)||(t=e(".wpseotab").attr("id")),e("#"+t).addClass("active"),e("#"+t+"-tab").addClass("nav-tab-active").trigger("click")}function i(t){const s=e("#noindex-author-noposts-wpseo-container");t?s.show():s.hide()}e.fn._wpseoIsInViewport=function(){const t=e(this).offset().top,s=t+e(this).outerHeight(),n=e(window).scrollTop(),i=n+e(window).height();return t>n&&s{e(this).is(":checked")||i(!1)})),r.on("change",(()=>{e(this).is(":checked")||i(!0)})),e("#disable-date input[type='radio']").on("change",(function(){e(this).is(":checked")&&e("#date-archives-titles-metas-content").toggle("off"===e(this).val())})).trigger("change"),e("#disable-attachment input[type='radio']").on("change",(function(){e(this).is(":checked")&&e("#media_settings").toggle("off"===e(this).val())})).trigger("change"),e("#disable-post_format").on("change",(function(){e("#post_format-titles-metas").toggle(e(this).is(":not(:checked)"))})).trigger("change"),e("#wpseo-tabs").find("a").on("click",(function(t){var s,n,i,r=!0;if(s=e(this),n=!!e("#first-time-configuration-tab").filter(".nav-tab-active").length,i=!!s.filter("#first-time-configuration-tab").length,n&&!i&&window.isStepBeingEdited&&(r=confirm((0,g.__)("There are unsaved changes in one or more steps. Leaving means that those changes may not be saved. Are you sure you want to leave?","wordpress-seo"))),r){window.isStepBeingEdited=!1,e("#wpseo-tabs").find("a").removeClass("nav-tab-active"),e(".wpseotab").removeClass("active");var a=e(this).attr("id").replace("-tab",""),o=e("#"+a);o.addClass("active"),e(this).addClass("nav-tab-active"),o.hasClass("nosave")?e("#wpseo-submit-container").hide():e("#wpseo-submit-container").show(),e(window).trigger("yoast-seo-tab-change"),"first-time-configuration"===a?(e(".notice-yoast").slideUp(),e(".yoast_premium_upsell").slideUp(),e("#sidebar-container").hide()):(e(".notice-yoast").slideDown(),e(".yoast_premium_upsell").slideDown(),e("#sidebar-container").show())}else t.preventDefault(),e("#first-time-configuration-tab").trigger("focus")})),e("#yoast-first-time-configuration-notice a").on("click",(function(){e("#first-time-configuration-tab").click()})),e("#company_or_person").on("change",(function(){var t=e(this).val();"company"===t?(e("#knowledge-graph-company").show(),e("#knowledge-graph-person").hide()):"person"===t?(e("#knowledge-graph-company").hide(),e("#knowledge-graph-person").show()):(e("#knowledge-graph-company").hide(),e("#knowledge-graph-person").hide())})).trigger("change"),e(".switch-yoast-seo input").on("keydown",(function(e){"keydown"===e.type&&13===e.which&&e.preventDefault()})),e("body").on("click","button.toggleable-container-trigger",(t=>{const s=e(t.currentTarget),n=s.parent().siblings(".toggleable-container");n.toggleClass("toggleable-container-hidden"),s.attr("aria-expanded",!n.hasClass("toggleable-container-hidden")).find("span").toggleClass("dashicons-arrow-up-alt2 dashicons-arrow-down-alt2")}));const o=e("#opengraph"),c=e("#wpseo-opengraph-settings");o.length&&c.length&&(c.toggle(o[0].checked),o.on("change",(e=>{c.toggle(e.target.checked)}))),t(),n(),function(){if(!e("#enable_xml_sitemap input[type=radio]").length)return;const t=e("#yoast-seo-sitemaps-disabled-warning");e("#enable_xml_sitemap input[type=radio]").on("change",(function(){"off"===this.value?t.show():t.hide()}))}(),function(){const t=e("#wpseo-submit-container-float"),s=e("#wpseo-submit-container-fixed");if(!t.length||!s.length)return;function n(){t._wpseoIsInViewport()?s.hide():s.show()}e(window).on("resize scroll",(0,l.debounce)(n,100)),e(window).on("yoast-seo-tab-change",n);const i=e(".wpseo-message");i.length&&window.setTimeout((()=>{i.fadeOut()}),5e3),n()}()}))}(o()),(()=>{if((0,d.select)("yoast-seo/editor").getPreference("isInsightsEnabled",!1))(0,d.dispatch)("yoast-seo/editor").loadEstimatedReadingTime(),(0,d.subscribe)((0,l.debounce)(Qs(),1500,{maxWait:3e3}))})(),window.wpseoScriptData.postType&&!["attachment"].includes(window.wpseoScriptData.postType)&&(()=>{const e=(0,d.select)(se).getIsPremium(),t=(0,d.select)(se).getIsWooSeoUpsell(),s=(0,d.select)(se).getIsProduct()?!e||t:!e;(0,h.addFilter)("yoast.replacementVariableEditor.additionalButtons","yoast/yoast-seo-premium/AiGenerator",((e,{fieldId:t})=>(s&&e.push((0,c.createElement)(p.Fill,{name:`yoast.replacementVariableEditor.additionalButtons.${t}`},(0,c.createElement)(te,{fieldId:t}))),e)))})()}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/quick-edit-handler.js b/wp/wp-content/plugins/wordpress-seo/js/dist/quick-edit-handler.js new file mode 100644 index 00000000..352261be --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/quick-edit-handler.js @@ -0,0 +1 @@ +jQuery(function(t){const n=t(location).attr("pathname").split("/").pop(),i="edit-tags.php"===n?"slug":"post_name",e=t(".wrap").children().eq(0);let o=0;const a=[];function r(n){a.includes(n)||(a.push(n),t(n).insertAfter(e))}function c(){t.post(ajaxurl,{action:"yoast_get_notifications",version:2},(function(t){""!==t&&(o=0,JSON.parse(t).map(r)),o<20&&""===t&&(o++,setTimeout(c,500))}))}function u(){const n=t("tr.inline-editor"),e=function(t){return 0===t.length||""===t?"":t.attr("id").replace("edit-","")}(n),o=function(n){return t("#inline_"+n).find("."+i).html()}(e);return o!==n.find("input[name="+i+"]").val()}["edit.php","edit-tags.php"].includes(n)&&(t("#inline-edit input").on("keydown",(function(t){13===t.which&&u()&&c()})),t(".button-primary").on("click",(function(n){"save-order"!==t(n.target).attr("id")&&u()&&c()}))),"edit-tags.php"===n&&t(document).on("ajaxComplete",(function(t,n,i){i.data.indexOf("action=delete-tag")>-1&&c()}))}(jQuery)); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/react-select.js b/wp/wp-content/plugins/wordpress-seo/js/dist/react-select.js new file mode 100644 index 00000000..63afee48 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/react-select.js @@ -0,0 +1 @@ +(()=>{var e={6043:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(9664);const o=function(e){function t(e,r,s,l,d){for(var f,h,m,g,y,O=0,S=0,A=0,x=0,w=0,P=0,L=m=f=0,T=0,R=0,B=0,_=0,N=s.length,H=N-1,U="",z="",W="",G="";Tf)&&(_=(U=U.replace(" ",":")).length),0r&&(r=(t=t.trim()).charCodeAt(0)),r){case 38:return t.replace(g,"$1"+e.trim());case 58:return e.trim()+t.replace(g,"$1"+e.trim());default:if(0<1*n&&0s.charCodeAt(8))break;case 115:u=u.replace(s,"-webkit-"+s)+";"+u;break;case 207:case 102:u=u.replace(s,"-webkit-"+(102r.charCodeAt(0)&&(r=r.trim()),r=[r],0{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(2578);const o=function(){for(var e=arguments.length,t=new Array(e),n=0;n{"use strict";n.d(t,{O:()=>m});const r=function(e){for(var t,n=e.length,r=n^n,o=0;n>=4;)t=1540483477*(65535&(t=255&e.charCodeAt(o)|(255&e.charCodeAt(++o))<<8|(255&e.charCodeAt(++o))<<16|(255&e.charCodeAt(++o))<<24))+((1540483477*(t>>>16)&65535)<<16),r=1540483477*(65535&r)+((1540483477*(r>>>16)&65535)<<16)^(t=1540483477*(65535&(t^=t>>>24))+((1540483477*(t>>>16)&65535)<<16)),n-=4,++o;switch(n){case 3:r^=(255&e.charCodeAt(o+2))<<16;case 2:r^=(255&e.charCodeAt(o+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(o)))+((1540483477*(r>>>16)&65535)<<16)}return r=1540483477*(65535&(r^=r>>>13))+((1540483477*(r>>>16)&65535)<<16),((r^=r>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var i,u=/[A-Z]|^ms/g,a=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},l=function(e){return null!=e&&"boolean"!=typeof e},c=(i={},function(e){return void 0===i[e]&&(i[e]=s(t=e)?t:t.replace(u,"-$&").toLowerCase()),i[e];var t}),p=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(a,(function(e,t,n){return f={name:t,styles:n,next:f},t}))}return 1===o[e]||s(e)||"number"!=typeof t||0===t?t:t+"px"};function d(e,t,n,r){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return f={name:n.name,styles:n.styles,next:f},n.name;if(void 0!==n.styles){var o=n.next;if(void 0!==o)for(;void 0!==o;)f={name:o.name,styles:o.styles,next:f},o=o.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o{"use strict";n.d(t,{m:()=>r});var r=function(){function e(e){this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.before=null}var t=e.prototype;return t.insert=function(e){if(this.ctr%(this.isSpeedy?65e3:1)==0){var t,n=function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t}(this);t=0===this.tags.length?this.before:this.tags[this.tags.length-1].nextSibling,this.container.insertBefore(n,t),this.tags.push(n)}var r=this.tags[this.tags.length-1];if(this.isSpeedy){var o=function(e){if(e.sheet)return e.sheet;for(var t=0;t{"use strict";function r(e,t){if(e.length!==t.length)return!1;for(var n=0;no});const o=function(e,t){var n;void 0===t&&(t=r);var o,i=[],u=!1;return function(){for(var r=[],a=0;a{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(this.props,[]);return function(e){c.forEach((function(t){return delete e[t]}))}(o),o.className=this.props.inputClassName,o.id=this.state.inputId,o.style=n,u.default.createElement("div",{className:this.props.className,style:t},this.renderStyles(),u.default.createElement("input",r({},o,{ref:this.inputRef})),u.default.createElement("div",{ref:this.sizerRef,style:l},e),this.props.placeholder?u.default.createElement("div",{ref:this.placeHolderSizerRef,style:l},this.props.placeholder):null)}}]),t}(i.Component);h.propTypes={className:a.default.string,defaultValue:a.default.any,extraWidth:a.default.oneOfType([a.default.number,a.default.string]),id:a.default.string,injectStyles:a.default.bool,inputClassName:a.default.string,inputRef:a.default.func,inputStyle:a.default.object,minWidth:a.default.oneOfType([a.default.number,a.default.string]),onAutosize:a.default.func,onChange:a.default.func,placeholder:a.default.string,placeholderIsMinWidth:a.default.bool,style:a.default.object,value:a.default.any},h.defaultProps={minWidth:1,injectStyles:!0},t.default=h},3082:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(9196),i=(r=o)&&"object"==typeof r&&"default"in r?r.default:r;n(845),n(3585),n(1850),n(5890);var u=n(4039);n(148);var a=n(3117);n(3998),n(5639);var s=n(7622);function l(){return l=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(n,["loadOptions","isLoading"]),u=this.state,a=u.defaultOptions,s=u.inputValue,c=u.isLoading,p=u.loadedInputValue,d=u.loadedOptions,f=u.passEmptyOptions?[]:s&&p?d:a||[];return i.createElement(e,l({},o,{ref:function(e){t.select=e},options:f,isLoading:c||r,onInputChange:this.handleInputChange}))},o}(o.Component),t.defaultProps=c,n},d=p(s.manageState(a.Select));t.default=d,t.defaultProps=c,t.makeAsyncSelect=p},3117:(e,t,n)=>{"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var o=n(9196),i=r(o),u=r(n(845)),a=n(3585),s=n(1850),l=n(4039),c=n(148),p=r(n(3998)),d=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}],f=function(e){for(var t=0;t-1}};function b(){return b=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,["in","out","onExited","appear","enter","exit","innerRef","emotion"]));return a.jsx("input",C({ref:t},n,{css:p({label:"dummyInput",background:0,border:0,fontSize:"inherit",outline:0,padding:0,width:1,color:"transparent",left:-100,opacity:0,position:"relative",transform:"scale(0)"},"")}))}var S=function(e){var t,n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var o=r.prototype;return o.componentDidMount=function(){this.props.innerRef(s.findDOMNode(this))},o.componentWillUnmount=function(){this.props.innerRef(null)},o.render=function(){return this.props.children},r}(o.Component),A=["boxSizing","height","overflow","paddingRight","position"],x={boxSizing:"border-box",overflow:"hidden",position:"relative",height:"100%"};function w(e){e.preventDefault()}function F(e){e.stopPropagation()}function D(){var e=this.scrollTop,t=this.scrollHeight,n=e+this.offsetHeight;0===e?this.scrollTop=1:n===t&&(this.scrollTop=e-1)}function I(){return"ontouchstart"in window||navigator.maxTouchPoints}var k=!(!window.document||!window.document.createElement),M=0,P=function(e){var t,n;function r(){for(var t,n=arguments.length,r=new Array(n),o=0;o0,h=c-p-l,m=!1;h>n&&t.isBottom&&(i&&i(e),t.isBottom=!1),f&&t.isTop&&(a&&a(e),t.isTop=!1),f&&n>h?(o&&!t.isBottom&&o(e),d.scrollTop=c,m=!0,t.isBottom=!0):!f&&-n>l&&(u&&!t.isTop&&u(e),d.scrollTop=0,m=!0,t.isTop=!0),m&&t.cancelScroll(e)},t.onWheel=function(e){t.handleEventDelta(e,e.deltaY)},t.onTouchStart=function(e){t.touchStart=e.changedTouches[0].clientY},t.onTouchMove=function(e){var n=t.touchStart-e.changedTouches[0].clientY;t.handleEventDelta(e,n)},t.getScrollTarget=function(e){t.scrollTarget=e},t}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var o=r.prototype;return o.componentDidMount=function(){this.startListening(this.scrollTarget)},o.componentWillUnmount=function(){this.stopListening(this.scrollTarget)},o.startListening=function(e){e&&("function"==typeof e.addEventListener&&e.addEventListener("wheel",this.onWheel,!1),"function"==typeof e.addEventListener&&e.addEventListener("touchstart",this.onTouchStart,!1),"function"==typeof e.addEventListener&&e.addEventListener("touchmove",this.onTouchMove,!1))},o.stopListening=function(e){"function"==typeof e.removeEventListener&&e.removeEventListener("wheel",this.onWheel,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchstart",this.onTouchStart,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchmove",this.onTouchMove,!1)},o.render=function(){return i.createElement(S,{innerRef:this.getScrollTarget},this.props.children)},r}(o.Component);function T(e){var t=e.isEnabled,n=void 0===t||t,r=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["isEnabled"]);return n?i.createElement(j,r):r.children}var R=function(e,t){void 0===t&&(t={});var n=t,r=n.isSearchable,o=n.isMulti,i=n.label,u=n.isDisabled;switch(e){case"menu":return"Use Up and Down to choose options"+(u?"":", press Enter to select the currently focused option")+", press Escape to exit the menu, press Tab to select the option and exit the menu.";case"input":return(i||"Select")+" is focused "+(r?",type to refine list":"")+", press Down to open the menu, "+(o?" press left to focus selected values":"");case"value":return"Use left and right to toggle between focused values, press Backspace to remove the currently focused value"}},B=function(e,t){var n=t.value,r=t.isDisabled;if(n)switch(e){case"deselect-option":case"pop-value":case"remove-value":return"option "+n+", deselected.";case"select-option":return r?"option "+n+" is disabled. Select another option.":"option "+n+", selected."}},_=function(e){return!!e.isDisabled};function N(){return N=Object.assign||function(e){for(var t=1;t5||o>5}},n.onTouchEnd=function(e){n.userIsDragging||(n.controlRef&&!n.controlRef.contains(e.target)&&n.menuListRef&&!n.menuListRef.contains(e.target)&&n.blurInput(),n.initialTouchX=0,n.initialTouchY=0)},n.onControlTouchEnd=function(e){n.userIsDragging||n.onControlMouseDown(e)},n.onClearIndicatorTouchEnd=function(e){n.userIsDragging||n.onClearIndicatorMouseDown(e)},n.onDropdownIndicatorTouchEnd=function(e){n.userIsDragging||n.onDropdownIndicatorMouseDown(e)},n.handleInputChange=function(e){var t=e.currentTarget.value;n.inputIsHiddenAfterUpdate=!1,n.onInputChange(t,{action:"input-change"}),n.onMenuOpen()},n.onInputFocus=function(e){var t=n.props,r=t.isSearchable,o=t.isMulti;n.props.onFocus&&n.props.onFocus(e),n.inputIsHiddenAfterUpdate=!1,n.announceAriaLiveContext({event:"input",context:{isSearchable:r,isMulti:o}}),n.setState({isFocused:!0}),(n.openAfterFocus||n.props.openMenuOnFocus)&&n.openMenu("first"),n.openAfterFocus=!1},n.onInputBlur=function(e){n.menuListRef&&n.menuListRef.contains(document.activeElement)?n.inputRef.focus():(n.props.onBlur&&n.props.onBlur(e),n.onInputChange("",{action:"input-blur"}),n.onMenuClose(),n.setState({focusedValue:null,isFocused:!1}))},n.onOptionHover=function(e){n.blockOptionHover||n.state.focusedOption===e||n.setState({focusedOption:e})},n.shouldHideSelectedOptions=function(){var e=n.props,t=e.hideSelectedOptions,r=e.isMulti;return void 0===t?r:t},n.onKeyDown=function(e){var t=n.props,r=t.isMulti,o=t.backspaceRemovesValue,i=t.escapeClearsValue,u=t.inputValue,a=t.isClearable,s=t.isDisabled,l=t.menuIsOpen,c=t.onKeyDown,p=t.tabSelectsValue,d=t.openMenuOnFocus,f=n.state,h=f.focusedOption,m=f.focusedValue,g=f.selectValue;if(!(s||"function"==typeof c&&(c(e),e.defaultPrevented))){switch(n.blockOptionHover=!0,e.key){case"ArrowLeft":if(!r||u)return;n.focusValue("previous");break;case"ArrowRight":if(!r||u)return;n.focusValue("next");break;case"Delete":case"Backspace":if(u)return;if(m)n.removeValue(m);else{if(!o)return;r?n.popValue():a&&n.clearValue()}break;case"Tab":if(n.isComposing)return;if(e.shiftKey||!l||!p||!h||d&&n.isOptionSelected(h,g))return;n.selectOption(h);break;case"Enter":if(229===e.keyCode)break;if(l){if(!h)return;if(n.isComposing)return;n.selectOption(h);break}return;case"Escape":l?(n.inputIsHiddenAfterUpdate=!1,n.onInputChange("",{action:"menu-close"}),n.onMenuClose()):a&&i&&n.clearValue();break;case" ":if(u)return;if(!l){n.openMenu("first");break}if(!h)return;n.selectOption(h);break;case"ArrowUp":l?n.focusOption("up"):n.openMenu("last");break;case"ArrowDown":l?n.focusOption("down"):n.openMenu("first");break;case"PageUp":if(!l)return;n.focusOption("pageup");break;case"PageDown":if(!l)return;n.focusOption("pagedown");break;case"Home":if(!l)return;n.focusOption("first");break;case"End":if(!l)return;n.focusOption("last");break;default:return}e.preventDefault()}},n.buildMenuOptions=function(e,t){var r=e.inputValue,o=void 0===r?"":r,i=e.options,u=function(e,r){var i=n.isOptionDisabled(e,t),u=n.isOptionSelected(e,t),a=n.getOptionLabel(e),s=n.getOptionValue(e);if(!(n.shouldHideSelectedOptions()&&u||!n.filterOption({label:a,value:s,data:e},o))){var l=i?void 0:function(){return n.onOptionHover(e)},c=i?void 0:function(){return n.selectOption(e)},p=n.getElementId("option")+"-"+r;return{innerProps:{id:p,onClick:c,onMouseMove:l,onMouseOver:l,tabIndex:-1},data:e,isDisabled:i,isSelected:u,key:p,label:a,type:"option",value:s}}};return i.reduce((function(e,t,r){if(t.options){n.hasGroups||(n.hasGroups=!0);var o=t.options.map((function(t,n){var o=u(t,r+"-"+n);return o&&e.focusable.push(t),o})).filter(Boolean);if(o.length){var i=n.getElementId("group")+"-"+r;e.render.push({type:"group",key:i,data:t,options:o})}}else{var a=u(t,""+r);a&&(e.render.push(a),e.focusable.push(t))}return e}),{render:[],focusable:[]})};var r=t.value;n.cacheComponents=u(n.cacheComponents,c.exportedEqual).bind(W(W(n))),n.cacheComponents(t.components),n.instancePrefix="react-select-"+(n.props.instanceId||++$);var o=l.cleanValue(r);n.buildMenuOptions=u(n.buildMenuOptions,(function(e,t){var n=e,r=n[0],o=n[1],i=t,u=i[0],a=i[1];return c.exportedEqual(o,a)&&c.exportedEqual(r.inputValue,u.inputValue)&&c.exportedEqual(r.options,u.options)})).bind(W(W(n)));var i=t.menuIsOpen?n.buildMenuOptions(t,o):{render:[],focusable:[]};return n.state.menuOptions=i,n.state.selectValue=o,n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var o=r.prototype;return o.componentDidMount=function(){this.startListeningComposition(),this.startListeningToTouch(),this.props.closeMenuOnScroll&&document&&document.addEventListener&&document.addEventListener("scroll",this.onScroll,!0),this.props.autoFocus&&this.focusInput()},o.UNSAFE_componentWillReceiveProps=function(e){var t=this.props,n=t.options,r=t.value,o=t.menuIsOpen,i=t.inputValue;if(this.cacheComponents(e.components),e.value!==r||e.options!==n||e.menuIsOpen!==o||e.inputValue!==i){var u=l.cleanValue(e.value),a=e.menuIsOpen?this.buildMenuOptions(e,u):{render:[],focusable:[]},s=this.getNextFocusedValue(u),c=this.getNextFocusedOption(a.focusable);this.setState({menuOptions:a,selectValue:u,focusedOption:c,focusedValue:s})}null!=this.inputIsHiddenAfterUpdate&&(this.setState({inputIsHidden:this.inputIsHiddenAfterUpdate}),delete this.inputIsHiddenAfterUpdate)},o.componentDidUpdate=function(e){var t=this.props,n=t.isDisabled,r=t.menuIsOpen,o=this.state.isFocused;(o&&!n&&e.isDisabled||o&&r&&!e.menuIsOpen)&&this.focusInput(),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&(l.scrollIntoView(this.menuListRef,this.focusedOptionRef),this.scrollToFocusedOptionOnUpdate=!1)},o.componentWillUnmount=function(){this.stopListeningComposition(),this.stopListeningToTouch(),document.removeEventListener("scroll",this.onScroll,!0)},o.onMenuOpen=function(){this.props.onMenuOpen()},o.onMenuClose=function(){var e=this.props,t=e.isSearchable,n=e.isMulti;this.announceAriaLiveContext({event:"input",context:{isSearchable:t,isMulti:n}}),this.onInputChange("",{action:"menu-close"}),this.props.onMenuClose()},o.onInputChange=function(e,t){this.props.onInputChange(e,t)},o.focusInput=function(){this.inputRef&&this.inputRef.focus()},o.blurInput=function(){this.inputRef&&this.inputRef.blur()},o.openMenu=function(e){var t=this,n=this.state,r=n.selectValue,o=n.isFocused,i=this.buildMenuOptions(this.props,r),u=this.props.isMulti,a="first"===e?0:i.focusable.length-1;if(!u){var s=i.focusable.indexOf(r[0]);s>-1&&(a=s)}this.scrollToFocusedOptionOnUpdate=!(o&&this.menuListRef),this.inputIsHiddenAfterUpdate=!1,this.setState({menuOptions:i,focusedValue:null,focusedOption:i.focusable[a]},(function(){t.onMenuOpen(),t.announceAriaLiveContext({event:"menu"})}))},o.focusValue=function(e){var t=this.props,n=t.isMulti,r=t.isSearchable,o=this.state,i=o.selectValue,u=o.focusedValue;if(n){this.setState({focusedOption:null});var a=i.indexOf(u);u||(a=-1,this.announceAriaLiveContext({event:"value"}));var s=i.length-1,l=-1;if(i.length){switch(e){case"previous":l=0===a?0:-1===a?s:a-1;break;case"next":a>-1&&a0?u-1:o.length-1:"down"===e?i=(u+1)%o.length:"pageup"===e?(i=u-t)<0&&(i=0):"pagedown"===e?(i=u+t)>o.length-1&&(i=o.length-1):"last"===e&&(i=o.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:o[i],focusedValue:null}),this.announceAriaLiveContext({event:"menu",context:{isDisabled:_(o[i])}})}},o.getTheme=function(){return this.props.theme?"function"==typeof this.props.theme?this.props.theme(U):z({},U,this.props.theme):U},o.getCommonProps=function(){var e=this.clearValue,t=this.getStyles,n=this.setValue,r=this.selectOption,o=this.props,i=o.classNamePrefix,u=o.isMulti,a=o.isRtl,s=o.options,c=this.state.selectValue,p=this.hasValue();return{cx:l.classNames.bind(null,i),clearValue:e,getStyles:t,getValue:function(){return c},hasValue:p,isMulti:u,isRtl:a,options:s,selectOption:r,setValue:n,selectProps:o,theme:this.getTheme()}},o.getNextFocusedValue=function(e){if(this.clearFocusValueOnUpdate)return this.clearFocusValueOnUpdate=!1,null;var t=this.state,n=t.focusedValue,r=t.selectValue.indexOf(n);if(r>-1){if(e.indexOf(n)>-1)return n;if(r-1?t:e[0]},o.hasValue=function(){return this.state.selectValue.length>0},o.hasOptions=function(){return!!this.state.menuOptions.render.length},o.countOptions=function(){return this.state.menuOptions.focusable.length},o.isClearable=function(){var e=this.props,t=e.isClearable,n=e.isMulti;return void 0===t?n:t},o.isOptionDisabled=function(e,t){return"function"==typeof this.props.isOptionDisabled&&this.props.isOptionDisabled(e,t)},o.isOptionSelected=function(e,t){var n=this;if(t.indexOf(e)>-1)return!0;if("function"==typeof this.props.isOptionSelected)return this.props.isOptionSelected(e,t);var r=this.getOptionValue(e);return t.some((function(e){return n.getOptionValue(e)===r}))},o.filterOption=function(e,t){return!this.props.filterOption||this.props.filterOption(e,t)},o.formatOptionLabel=function(e,t){if("function"==typeof this.props.formatOptionLabel){var n=this.props.inputValue,r=this.state.selectValue;return this.props.formatOptionLabel(e,{context:t,inputValue:n,selectValue:r})}return this.getOptionLabel(e)},o.formatGroupLabel=function(e){return this.props.formatGroupLabel(e)},o.startListeningComposition=function(){document&&document.addEventListener&&(document.addEventListener("compositionstart",this.onCompositionStart,!1),document.addEventListener("compositionend",this.onCompositionEnd,!1))},o.stopListeningComposition=function(){document&&document.removeEventListener&&(document.removeEventListener("compositionstart",this.onCompositionStart),document.removeEventListener("compositionend",this.onCompositionEnd))},o.startListeningToTouch=function(){document&&document.addEventListener&&(document.addEventListener("touchstart",this.onTouchStart,!1),document.addEventListener("touchmove",this.onTouchMove,!1),document.addEventListener("touchend",this.onTouchEnd,!1))},o.stopListeningToTouch=function(){document&&document.removeEventListener&&(document.removeEventListener("touchstart",this.onTouchStart),document.removeEventListener("touchmove",this.onTouchMove),document.removeEventListener("touchend",this.onTouchEnd))},o.constructAriaLiveMessage=function(){var e=this.state,t=e.ariaLiveContext,n=e.selectValue,r=e.focusedValue,o=e.focusedOption,i=this.props,u=i.options,a=i.menuIsOpen,s=i.inputValue,l=i.screenReaderStatus,c=r?function(e){var t=e.focusedValue,n=e.selectValue;return"value "+(0,e.getOptionLabel)(t)+" focused, "+(n.indexOf(t)+1)+" of "+n.length+"."}({focusedValue:r,getOptionLabel:this.getOptionLabel,selectValue:n}):"",p=o&&a?function(e){var t=e.focusedOption,n=e.options;return"option "+(0,e.getOptionLabel)(t)+" focused"+(t.isDisabled?" disabled":"")+", "+(n.indexOf(t)+1)+" of "+n.length+"."}({focusedOption:o,getOptionLabel:this.getOptionLabel,options:u}):"",d=function(e){var t=e.inputValue;return e.screenReaderMessage+(t?" for search term "+t:"")+"."}({inputValue:s,screenReaderMessage:l({count:this.countOptions()})});return c+" "+p+" "+d+" "+t},o.renderInput=function(){var e=this.props,t=e.isDisabled,n=e.isSearchable,r=e.inputId,o=e.inputValue,u=e.tabIndex,a=this.components.Input,s=this.state.inputIsHidden,c=r||this.getElementId("input"),p={"aria-autocomplete":"list","aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"]};if(!n)return i.createElement(O,z({id:c,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:l.noop,onFocus:this.onInputFocus,readOnly:!0,disabled:t,tabIndex:u,value:""},p));var d=this.commonProps,f=d.cx,h=d.theme,m=d.selectProps;return i.createElement(a,z({autoCapitalize:"none",autoComplete:"off",autoCorrect:"off",cx:f,getStyles:this.getStyles,id:c,innerRef:this.getInputRef,isDisabled:t,isHidden:s,onBlur:this.onInputBlur,onChange:this.handleInputChange,onFocus:this.onInputFocus,selectProps:m,spellCheck:"false",tabIndex:u,theme:h,type:"text",value:o},p))},o.renderPlaceholderOrValue=function(){var e=this,t=this.components,n=t.MultiValue,r=t.MultiValueContainer,o=t.MultiValueLabel,u=t.MultiValueRemove,a=t.SingleValue,s=t.Placeholder,l=this.commonProps,c=this.props,p=c.controlShouldRenderValue,d=c.isDisabled,f=c.isMulti,h=c.inputValue,m=c.placeholder,g=this.state,v=g.selectValue,b=g.focusedValue,E=g.isFocused;if(!this.hasValue()||!p)return h?null:i.createElement(s,z({},l,{key:"placeholder",isDisabled:d,isFocused:E}),m);if(f){var y=v.map((function(t,a){var s=t===b;return i.createElement(n,z({},l,{components:{Container:r,Label:o,Remove:u},isFocused:s,isDisabled:d,key:e.getOptionValue(t),index:a,removeProps:{onClick:function(){return e.removeValue(t)},onTouchEnd:function(){return e.removeValue(t)},onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},data:t}),e.formatOptionLabel(t,"value"))}));return y}if(h)return null;var C=v[0];return i.createElement(a,z({},l,{data:C,isDisabled:d}),this.formatOptionLabel(C,"value"))},o.renderClearIndicator=function(){var e=this.components.ClearIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,o=n.isLoading,u=this.state.isFocused;if(!this.isClearable()||!e||r||!this.hasValue()||o)return null;var a={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return i.createElement(e,z({},t,{innerProps:a,isFocused:u}))},o.renderLoadingIndicator=function(){var e=this.components.LoadingIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,o=n.isLoading,u=this.state.isFocused;return e&&o?i.createElement(e,z({},t,{innerProps:{"aria-hidden":"true"},isDisabled:r,isFocused:u})):null},o.renderIndicatorSeparator=function(){var e=this.components,t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var r=this.commonProps,o=this.props.isDisabled,u=this.state.isFocused;return i.createElement(n,z({},r,{isDisabled:o,isFocused:u}))},o.renderDropdownIndicator=function(){var e=this.components.DropdownIndicator;if(!e)return null;var t=this.commonProps,n=this.props.isDisabled,r=this.state.isFocused,o={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return i.createElement(e,z({},t,{innerProps:o,isDisabled:n,isFocused:r}))},o.renderMenu=function(){var e=this,t=this.components,n=t.Group,r=t.GroupHeading,o=t.Menu,u=t.MenuList,a=t.MenuPortal,s=t.LoadingMessage,l=t.NoOptionsMessage,p=t.Option,d=this.commonProps,f=this.state,h=f.focusedOption,m=f.menuOptions,g=this.props,v=g.captureMenuScroll,b=g.inputValue,E=g.isLoading,y=g.loadingMessage,C=g.minMenuHeight,O=g.maxMenuHeight,S=g.menuIsOpen,A=g.menuPlacement,x=g.menuPosition,w=g.menuPortalTarget,F=g.menuShouldBlockScroll,D=g.menuShouldScrollIntoView,I=g.noOptionsMessage,k=g.onMenuScrollToTop,M=g.onMenuScrollToBottom;if(!S)return null;var P,V=function(t){var n=h===t.data;return t.innerRef=n?e.getFocusedOptionRef:void 0,i.createElement(p,z({},d,t,{isFocused:n}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())P=m.render.map((function(t){if("group"===t.type){t.type;var o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(t,["type"]),u=t.key+"-heading";return i.createElement(n,z({},d,o,{Heading:r,headingProps:{id:u},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return V(e)})))}if("option"===t.type)return V(t)}));else if(E){var j=y({inputValue:b});if(null===j)return null;P=i.createElement(s,d,j)}else{var R=I({inputValue:b});if(null===R)return null;P=i.createElement(l,d,R)}var B={minMenuHeight:C,maxMenuHeight:O,menuPlacement:A,menuPosition:x,menuShouldScrollIntoView:D},_=i.createElement(c.MenuPlacer,z({},d,B),(function(t){var n=t.ref,r=t.placerProps,a=r.placement,s=r.maxHeight;return i.createElement(o,z({},d,B,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove},isLoading:E,placement:a}),i.createElement(T,{isEnabled:v,onTopArrive:k,onBottomArrive:M},i.createElement(L,{isEnabled:F},i.createElement(u,z({},d,{innerRef:e.getMenuListRef,isLoading:E,maxHeight:s}),P))))}));return w||"fixed"===x?i.createElement(a,z({},d,{appendTo:w,controlElement:this.controlRef,menuPlacement:A,menuPosition:x}),_):_},o.renderFormField=function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,o=t.isMulti,u=t.name,a=this.state.selectValue;if(u&&!r){if(o){if(n){var s=a.map((function(t){return e.getOptionValue(t)})).join(n);return i.createElement("input",{name:u,type:"hidden",value:s})}var l=a.length>0?a.map((function(t,n){return i.createElement("input",{key:"i-"+n,name:u,type:"hidden",value:e.getOptionValue(t)})})):i.createElement("input",{name:u,type:"hidden"});return i.createElement("div",null,l)}var c=a[0]?this.getOptionValue(a[0]):"";return i.createElement("input",{name:u,type:"hidden",value:c})}},o.renderLiveRegion=function(){return this.state.isFocused?i.createElement(y,{"aria-live":"polite"},i.createElement("p",{id:"aria-selection-event"}," ",this.state.ariaLiveSelection),i.createElement("p",{id:"aria-context"}," ",this.constructAriaLiveMessage())):null},o.render=function(){var e=this.components,t=e.Control,n=e.IndicatorsContainer,r=e.SelectContainer,o=e.ValueContainer,u=this.props,a=u.className,s=u.id,l=u.isDisabled,c=u.menuIsOpen,p=this.state.isFocused,d=this.commonProps=this.getCommonProps();return i.createElement(r,z({},d,{className:a,innerProps:{id:s,onKeyDown:this.onKeyDown},isDisabled:l,isFocused:p}),this.renderLiveRegion(),i.createElement(t,z({},d,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:l,isFocused:p,menuIsOpen:c}),i.createElement(o,z({},d,{isDisabled:l}),this.renderPlaceholderOrValue(),this.renderInput()),i.createElement(n,z({},d,{isDisabled:l}),this.renderClearIndicator(),this.renderLoadingIndicator(),this.renderIndicatorSeparator(),this.renderDropdownIndicator())),this.renderMenu(),this.renderFormField())},r}(o.Component);Y.defaultProps=G,t.Select=Y,t.createFilter=v,t.defaultProps=G,t.defaultTheme=U,t.mergeStyles=function(e,t){void 0===t&&(t={});var n=N({},e);return Object.keys(t).forEach((function(r){e[r]?n[r]=function(n,o){return t[r](e[r](n,o),o)}:n[r]=t[r]})),n}},148:(e,t,n)=>{"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var o=n(9196),i=(r(o),n(3585)),u=n(1850),a=r(n(5890)),s=n(4039),l=r(n(3998)),c=r(n(5639));function p(){return p=Object.assign||function(e){for(var t=1;t=h)return{placement:"bottom",maxHeight:t};if(A>=h&&!u)return i&&s.animatedScrollTo(l,x,F),{placement:"bottom",maxHeight:t};if(!u&&A>=r||u&&O>=r)return i&&s.animatedScrollTo(l,x,F),{placement:"bottom",maxHeight:u?O-E:A-E};if("auto"===o||u){var D=t,I=u?C:S;return I>=r&&(D=Math.min(I-E-a.controlHeight,t)),{placement:"top",maxHeight:D}}if("bottom"===o)return s.scrollTo(l,x),{placement:"bottom",maxHeight:t};break;case"top":if(C>=h)return{placement:"top",maxHeight:t};if(S>=h&&!u)return i&&s.animatedScrollTo(l,w,F),{placement:"top",maxHeight:t};if(!u&&S>=r||u&&C>=r){var k=t;return(!u&&S>=r||u&&C>=r)&&(k=u?C-y:S-y),i&&s.animatedScrollTo(l,w,F),{placement:"top",maxHeight:k}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'+o+'".')}return c}({maxHeight:o,menuEl:e,minHeight:r,placement:i,shouldScroll:a&&!p,isFixedPosition:p,theme:l});c&&c(d),t.setState(d)}},t.getUpdatedProps=function(){var e=t.props.menuPlacement,n=t.state.placement||f(e);return p({},t.props,{placement:n,maxHeight:t.state.maxHeight})},t}return d(t,e),t.prototype.render=function(){return(0,this.props.children)({ref:this.getPlacement,placerProps:this.getUpdatedProps()})},t}(o.Component);h.contextTypes={getPortalPlacement:a.func};var m=function(e){var t=e.theme,n=t.spacing.baseUnit;return{color:t.colors.neutral40,padding:2*n+"px "+3*n+"px",textAlign:"center"}},g=m,v=m,b=function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.innerProps;return i.jsx("div",p({css:o("noOptionsMessage",e),className:r({"menu-notice":!0,"menu-notice--no-options":!0},n)},u),t)};b.defaultProps={children:"No options"};var E=function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.innerProps;return i.jsx("div",p({css:o("loadingMessage",e),className:r({"menu-notice":!0,"menu-notice--loading":!0},n)},u),t)};E.defaultProps={children:"Loading..."};var y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o=0||(o[n]=e[n]);return o}(e,["size"]);return i.jsx("svg",F({height:t,width:t,viewBox:"0 0 20 20","aria-hidden":"true",focusable:"false",css:D},n))},k=function(e){return i.jsx(I,F({size:20},e),i.jsx("path",{d:"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z"}))},M=function(e){return i.jsx(I,F({size:20},e),i.jsx("path",{d:"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"}))},P=function(e){var t=e.isFocused,n=e.theme,r=n.spacing.baseUnit,o=n.colors;return{label:"indicatorContainer",color:t?o.neutral60:o.neutral20,display:"flex",padding:2*r,transition:"color 150ms",":hover":{color:t?o.neutral80:o.neutral40}}},V=P,L=P,j=i.keyframes(w()),T=function(e){var t=e.delay,n=e.offset;return i.jsx("span",{css:l({animation:j+" 1s ease-in-out "+t+"ms infinite;",backgroundColor:"currentColor",borderRadius:"1em",display:"inline-block",marginLeft:n?"1em":null,height:"1em",verticalAlign:"top",width:"1em"},"")})},R=function(e){var t=e.className,n=e.cx,r=e.getStyles,o=e.innerProps,u=e.isRtl;return i.jsx("div",F({},o,{css:r("loadingIndicator",e),className:n({indicator:!0,"loading-indicator":!0},t)}),i.jsx(T,{delay:0,offset:u}),i.jsx(T,{delay:160,offset:!0}),i.jsx(T,{delay:320,offset:!u}))};function B(){return B=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,["className","cx","getStyles","theme","selectProps"]));return i.jsx("div",_({css:r("groupHeading",_({theme:o},u)),className:n({"group-heading":!0},t)},u))},IndicatorsContainer:function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles;return i.jsx("div",{css:o("indicatorsContainer",e),className:r({indicators:!0},n)},t)},IndicatorSeparator:function(e){var t=e.className,n=e.cx,r=e.getStyles,o=e.innerProps;return i.jsx("span",F({},o,{css:r("indicatorSeparator",e),className:n({"indicator-separator":!0},t)}))},Input:function(e){var t=e.className,n=e.cx,r=e.getStyles,o=e.innerRef,u=e.isHidden,a=e.isDisabled,s=e.theme,l=(e.selectProps,function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","cx","getStyles","innerRef","isHidden","isDisabled","theme","selectProps"]));return i.jsx("div",{css:r("input",N({theme:s},l))},i.jsx(c,N({className:n({input:!0},t),inputRef:o,inputStyle:H(u),disabled:a},l)))},LoadingIndicator:R,Menu:function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.innerRef,a=e.innerProps;return i.jsx("div",p({css:o("menu",e),className:r({menu:!0},n)},a,{ref:u}),t)},MenuList:function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.isMulti,a=e.innerRef;return i.jsx("div",{css:o("menuList",e),className:r({"menu-list":!0,"menu-list--is-multi":u},n),ref:a},t)},MenuPortal:y,LoadingMessage:E,NoOptionsMessage:b,MultiValue:$,MultiValueContainer:W,MultiValueLabel:G,MultiValueRemove:function(e){var t=e.children,n=e.innerProps;return i.jsx("div",n,t||i.jsx(k,{size:14}))},Option:function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.isDisabled,a=e.isFocused,s=e.isSelected,l=e.innerRef,c=e.innerProps;return i.jsx("div",Y({css:o("option",e),className:r({option:!0,"option--is-disabled":u,"option--is-focused":a,"option--is-selected":s},n),ref:l},c),t)},Placeholder:function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.innerProps;return i.jsx("div",q({css:o("placeholder",e),className:r({placeholder:!0},n)},u),t)},SelectContainer:function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.innerProps,a=e.isDisabled,s=e.isRtl;return i.jsx("div",x({css:o("container",e),className:r({"--is-disabled":a,"--is-rtl":s},n)},u),t)},SingleValue:function(e){var t=e.children,n=e.className,r=e.cx,o=e.getStyles,u=e.isDisabled,a=e.innerProps;return i.jsx("div",X({css:o("singleValue",e),className:r({"single-value":!0,"single-value--is-disabled":u},n)},a),t)},ValueContainer:function(e){var t=e.children,n=e.className,r=e.cx,o=e.isMulti,u=e.getStyles,a=e.hasValue;return i.jsx("div",{css:u("valueContainer",e),className:r({"value-container":!0,"value-container--is-multi":o,"value-container--has-value":a},n)},t)}};t.MenuPlacer=h,t.clearIndicatorCSS=L,t.components=Z,t.containerCSS=function(e){var t=e.isDisabled;return{label:"container",direction:e.isRtl?"rtl":null,pointerEvents:t?"none":null,position:"relative"}},t.css=function(e){var t=e.isDisabled,n=e.isFocused,r=e.theme,o=r.colors,i=r.borderRadius,u=r.spacing;return{label:"control",alignItems:"center",backgroundColor:t?o.neutral5:o.neutral0,borderColor:t?o.neutral10:n?o.primary:o.neutral20,borderRadius:i,borderStyle:"solid",borderWidth:1,boxShadow:n?"0 0 0 1px "+o.primary:null,cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:u.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms","&:hover":{borderColor:n?o.primary:o.neutral30}}},t.css$1=function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{label:"singleValue",color:t?o.neutral40:o.neutral80,marginLeft:r.baseUnit/2,marginRight:r.baseUnit/2,maxWidth:"calc(100% - "+2*r.baseUnit+"px)",overflow:"hidden",position:"absolute",textOverflow:"ellipsis",whiteSpace:"nowrap",top:"50%",transform:"translateY(-50%)"}},t.defaultComponents=function(e){return K({},Z,e.components)},t.dropdownIndicatorCSS=V,t.exportedEqual=function(e,t){try{return A(e,t)}catch(e){if(e.message&&e.message.match(/stack|recursion/i))return console.warn("Warning: react-fast-compare does not handle circular references.",e.name,e.message),!1;throw e}},t.groupCSS=function(e){var t=e.theme.spacing;return{paddingBottom:2*t.baseUnit,paddingTop:2*t.baseUnit}},t.groupHeadingCSS=function(e){var t=e.theme.spacing;return{label:"group",color:"#999",cursor:"default",display:"block",fontSize:"75%",fontWeight:"500",marginBottom:"0.25em",paddingLeft:3*t.baseUnit,paddingRight:3*t.baseUnit,textTransform:"uppercase"}},t.indicatorSeparatorCSS=function(e){var t=e.isDisabled,n=e.theme,r=n.spacing.baseUnit,o=n.colors;return{label:"indicatorSeparator",alignSelf:"stretch",backgroundColor:t?o.neutral10:o.neutral20,marginBottom:2*r,marginTop:2*r,width:1}},t.indicatorsContainerCSS=function(){return{alignItems:"center",alignSelf:"stretch",display:"flex",flexShrink:0}},t.inputCSS=function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{margin:r.baseUnit/2,paddingBottom:r.baseUnit/2,paddingTop:r.baseUnit/2,visibility:t?"hidden":"visible",color:o.neutral80}},t.loadingIndicatorCSS=function(e){var t=e.isFocused,n=e.size,r=e.theme,o=r.colors,i=r.spacing.baseUnit;return{label:"loadingIndicator",color:t?o.neutral60:o.neutral20,display:"flex",padding:2*i,transition:"color 150ms",alignSelf:"center",fontSize:n,lineHeight:1,marginRight:n,textAlign:"center",verticalAlign:"middle"}},t.loadingMessageCSS=v,t.menuCSS=function(e){var t,n=e.placement,r=e.theme,o=r.borderRadius,i=r.spacing,u=r.colors;return(t={label:"menu"})[function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(n)]="100%",t.backgroundColor=u.neutral0,t.borderRadius=o,t.boxShadow="0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)",t.marginBottom=i.menuGutter,t.marginTop=i.menuGutter,t.position="absolute",t.width="100%",t.zIndex=1,t},t.menuListCSS=function(e){var t=e.maxHeight,n=e.theme.spacing.baseUnit;return{maxHeight:t,overflowY:"auto",paddingBottom:n,paddingTop:n,position:"relative",WebkitOverflowScrolling:"touch"}},t.menuPortalCSS=function(e){var t=e.rect,n=e.offset,r=e.position;return{left:t.left,position:r,top:n,width:t.width,zIndex:1}},t.multiValueCSS=function(e){var t=e.theme,n=t.spacing,r=t.borderRadius;return{label:"multiValue",backgroundColor:t.colors.neutral10,borderRadius:r/2,display:"flex",margin:n.baseUnit/2,minWidth:0}},t.multiValueLabelCSS=function(e){var t=e.theme,n=t.borderRadius,r=t.colors,o=e.cropWithEllipsis;return{borderRadius:n/2,color:r.neutral80,fontSize:"85%",overflow:"hidden",padding:3,paddingLeft:6,textOverflow:o?"ellipsis":null,whiteSpace:"nowrap"}},t.multiValueRemoveCSS=function(e){var t=e.theme,n=t.spacing,r=t.borderRadius,o=t.colors;return{alignItems:"center",borderRadius:r/2,backgroundColor:e.isFocused&&o.dangerLight,display:"flex",paddingLeft:n.baseUnit,paddingRight:n.baseUnit,":hover":{backgroundColor:o.dangerLight,color:o.danger}}},t.noOptionsMessageCSS=g,t.optionCSS=function(e){var t=e.isDisabled,n=e.isFocused,r=e.isSelected,o=e.theme,i=o.spacing,u=o.colors;return{label:"option",backgroundColor:r?u.primary:n?u.primary25:"transparent",color:t?u.neutral20:r?u.neutral0:"inherit",cursor:"default",display:"block",fontSize:"inherit",padding:2*i.baseUnit+"px "+3*i.baseUnit+"px",width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",":active":{backgroundColor:!t&&(r?u.primary:u.primary50)}}},t.placeholderCSS=function(e){var t=e.theme,n=t.spacing;return{label:"placeholder",color:t.colors.neutral50,marginLeft:n.baseUnit/2,marginRight:n.baseUnit/2,position:"absolute",top:"50%",transform:"translateY(-50%)"}},t.valueContainerCSS=function(e){var t=e.theme.spacing;return{alignItems:"center",display:"flex",flex:1,flexWrap:"wrap",padding:t.baseUnit/2+"px "+2*t.baseUnit+"px",WebkitOverflowScrolling:"touch",position:"relative",overflow:"hidden"}}},8010:(e,t,n)=>{"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(t,"__esModule",{value:!0});var o=n(9196),i=r(o),u=r(n(845)),a=n(3585);n(1850),n(5890),n(4039);var s=n(148),l=n(3117);n(3998),n(5639);var c=n(7622),p=r(n(6043)),d=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).createEmotionCache=function(e){return p({nonce:e})},n.createEmotionCache=u(n.createEmotionCache),n}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r.prototype.render=function(){var e=this.createEmotionCache(this.props.nonce);return i.createElement(a.CacheProvider,{value:e},this.props.children)},r}(o.Component),f=c.manageState(l.Select);t.components=s.components,t.createFilter=l.createFilter,t.defaultTheme=l.defaultTheme,t.mergeStyles=l.mergeStyles,t.NonceProvider=d,t.default=f},7622:(e,t,n)=>{"use strict";var r,o=n(9196),i=(r=o)&&"object"==typeof r&&"default"in r?r.default:r;function u(){return u=Object.assign||function(e){for(var t=1;t1?n-1:0),o=1;o=0||(o[n]=e[n]);return o}(n,["defaultInputValue","defaultMenuIsOpen","defaultValue"]));return i.createElement(e,u({},r,{ref:function(e){t.select=e},inputValue:this.getProp("inputValue"),menuIsOpen:this.getProp("menuIsOpen"),onChange:this.onChange,onInputChange:this.onInputChange,onMenuClose:this.onMenuClose,onMenuOpen:this.onMenuOpen,value:this.getProp("value")}))},o}(o.Component),t.defaultProps=a,n}},4039:(e,t)=>{"use strict";var n=function(){};function r(e,t){return t?"-"===t[0]?e+t:e+"__"+t:e}function o(e){return[document.documentElement,document.body,window].indexOf(e)>-1}function i(e){return o(e)?window.pageYOffset:e.scrollTop}function u(e,t){o(e)?window.scrollTo(0,t):e.scrollTop=t}t.animatedScrollTo=function(e,t,r,o){void 0===r&&(r=200),void 0===o&&(o=n);var a=i(e),s=t-a,l=0;!function t(){var n,i=s*((n=(n=l+=10)/r-1)*n*n+1)+a;u(e,i),ln.bottom?u(e,Math.min(t.offsetTop+t.clientHeight-e.offsetHeight+o,e.scrollHeight)):r.top-o{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}n.r(t),n.d(t,{CacheProvider:()=>f,ClassNames:()=>A,Global:()=>y,ThemeContext:()=>d,css:()=>c.default,jsx:()=>E,keyframes:()=>O,withEmotionCache:()=>h});var o=n(9196),i=n(6043);function u(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]):r+=n+" "})),r}var a=function(e,t,n){var r=e.key+"-"+t.name;if(!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles),void 0===e.inserted[t.name]){var o=t;do{e.insert("."+r,o,e.sheet,!0),o=o.next}while(void 0!==o)}},s=n(2578),l=n(9664),c=n(3998),p=(0,o.createContext)("undefined"!=typeof HTMLElement?(0,i.default)():null),d=(0,o.createContext)({}),f=p.Provider,h=function(e){return(0,o.forwardRef)((function(t,n){return(0,o.createElement)(p.Consumer,null,(function(r){return e(t,r,n)}))}))},m="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",g=Object.prototype.hasOwnProperty,v=function(e,t,n,r){var i=null===n?t.css:t.css(n);"string"==typeof i&&void 0!==e.registered[i]&&(i=e.registered[i]);var l=t[m],c=[i],p="";"string"==typeof t.className?p=u(e.registered,c,t.className):null!=t.className&&(p=t.className+" ");var d=(0,s.O)(c);a(e,d,"string"==typeof l),p+=e.key+"-"+d.name;var f={};for(var h in t)g.call(t,h)&&"css"!==h&&h!==m&&(f[h]=t[h]);return f.ref=r,f.className=p,(0,o.createElement)(l,f)},b=h((function(e,t,n){return"function"==typeof e.css?(0,o.createElement)(d.Consumer,null,(function(r){return v(t,e,r,n)})):v(t,e,null,n)})),E=function(e,t){var n=arguments;if(null==t||!g.call(t,"css"))return o.createElement.apply(void 0,n);var r=n.length,i=new Array(r);i[0]=b;var u={};for(var a in t)g.call(t,a)&&(u[a]=t[a]);u[m]=e,i[1]=u;for(var s=2;s{"use strict";e.exports=window.React},1850:e=>{"use strict";e.exports=window.ReactDOM},5890:e=>{"use strict";e.exports=window.yoast.propTypes}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},window.yoast=window.yoast||{},window.yoast.reactSelect=n(8010),window.yoast.reactSelectAsync=n(3082)})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/redirect-old-features-tab.js b/wp/wp-content/plugins/wordpress-seo/js/dist/redirect-old-features-tab.js new file mode 100644 index 00000000..0b62de6e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/redirect-old-features-tab.js @@ -0,0 +1 @@ +window.wpseoRedirectOldFeaturesTabToNewSettings=function(){if("#top#features"===window.location.hash){const e=window.location.href.replace("wpseo_dashboard#top#features","wpseo_page_settings#/site-features");window.location.replace(e)}}; \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/reindex-links.js b/wp/wp-content/plugins/wordpress-seo/js/dist/reindex-links.js new file mode 100644 index 00000000..9c2f9273 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/reindex-links.js @@ -0,0 +1 @@ +(()=>{var e={2322:e=>{var t,n,o="",r=function(e){e=e||"polite";var t=document.createElement("div");return t.id="a11y-speak-"+e,t.className="a11y-speak-region",t.setAttribute("style","clip: rect(1px, 1px, 1px, 1px); position: absolute; height: 1px; width: 1px; overflow: hidden; word-wrap: normal;"),t.setAttribute("aria-live",e),t.setAttribute("aria-relevant","additions text"),t.setAttribute("aria-atomic","true"),document.querySelector("body").appendChild(t),t};!function(e){if("complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll)return e();document.addEventListener("DOMContentLoaded",e)}((function(){t=document.getElementById("a11y-speak-polite"),n=document.getElementById("a11y-speak-assertive"),null===t&&(t=r("polite")),null===n&&(n=r("assertive"))})),e.exports=function(e,r){!function(){for(var e=document.querySelectorAll(".a11y-speak-region"),t=0;t]+>/g," "),o===e&&(e+=" "),o=e,n&&"assertive"===r?n.textContent=e:t&&(t.textContent=e)}}},t={};function n(o){var r=t[o];if(void 0!==r)return r.exports;var s=t[o]={exports:{}};return e[o](s,s.exports,n),s.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";const e=window.jQuery;var t=n.n(e),o=n(2322),r=n.n(o);const s=yoastReindexLinksData.data;let a=!1;class i{constructor(e){this.element=t()("#wpseo_count_index_links"),this.progressbarTarget=t()("#wpseo_index_links_progressbar").progressbar({value:0}),this.total=parseInt(e,10),this.totalProcessed=0}update(e){this.totalProcessed+=e;const t=this.totalProcessed*(100/this.total);this.progressbarTarget.progressbar("value",Math.round(t)),this.element.html(this.totalProcessed)}complete(){this.progressbarTarget.progressbar("value",100)}}function l(e,n){t().ajax({type:"GET",url:s.restApi.root+s.restApi.endpoint,beforeSend:e=>{e.setRequestHeader("X-WP-Nonce",s.restApi.nonce)},success:t=>{const o=parseInt(t,10);if(0!==o)return e.update(o),void l(e,n);e.complete(),n()}})}function c(){return new Promise((e=>{l(new i(s.amount),e)}))}function d(){a=!0,r()(s.l10n.calculationCompleted),t()("#reindexLinks").html(s.message.indexingCompleted),tb_remove()}function u(){t()("#general-tab").trigger("click"),!1===a&&t()("#openLinkIndexing").trigger("click")}t()((function(){let e=!1;t()(".yoast-js-calculate-index-links--all ").on("click",(function(){!1===e&&(function(){r()(s.l10n.calculationInProgress);const e=[];e.push(c()),Promise.all(e).then(d)}(),e=!0)})),t()("#noticeRunLinkIndex").on("click",u),-1!==window.location.href.indexOf("&reIndexLinks=1")&&t()(u)}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/settings.js b/wp/wp-content/plugins/wordpress-seo/js/dist/settings.js new file mode 100644 index 00000000..5290b1d2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/settings.js @@ -0,0 +1,3 @@ +(()=>{"use strict";var e={n:t=>{var i=t&&t.__esModule?()=>t.default:()=>t;return e.d(i,{a:i}),i},d:(t,i)=>{for(var s in i)e.o(i,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:i[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{DISMISS_ALERT:()=>d});const i=window.wp.domReady;var s=e.n(i);const a=window.jQuery;var o=e.n(a);const n=window.wp.i18n,r=window.lodash,c=window.wp.data,l=window.yoast.externals.redux;function d({alertKey:e}){return new Promise((t=>wpseoApi.post("alerts/dismiss",{key:e},(()=>t()))))}const{currentPromotions:m,dismissedAlerts:p,isPremium:h,linkParams:f}=l.reducers,{isAlertDismissed:g,getIsPremium:w,isPromotionActive:u,selectLinkParams:y}=l.selectors,{dismissAlert:b,setCurrentPromotions:E,setDismissedAlerts:v,setLinkParams:_,setIsPremium:k}=l.actions,x=window.React,S=window.wp.element,D=window.yoast.styledComponents,P=window.yoast.propTypes;var z=e.n(P);const A=(0,window.wp.compose.compose)([(0,c.withSelect)(((e,t)=>{const{isAlertDismissed:i}=e(t.store||"yoast-seo/editor");return{isAlertDismissed:i(t.alertKey)}})),(0,c.withDispatch)(((e,t)=>{const{dismissAlert:i}=e(t.store||"yoast-seo/editor");return{onDismissed:()=>i(t.alertKey)}}))]),M=A,C=({children:e,id:t,hasIcon:i=!0,title:s,image:a=null,isAlertDismissed:o,onDismissed:r})=>o?null:(0,x.createElement)("div",{id:t,className:"notice-yoast yoast is-dismissible"},(0,x.createElement)("div",{className:"notice-yoast__container"},(0,x.createElement)("div",null,(0,x.createElement)("div",{className:"notice-yoast__header"},i&&(0,x.createElement)("span",{className:"yoast-icon"}),(0,x.createElement)("h2",{className:"notice-yoast__header-heading"},s)),(0,x.createElement)("p",null,e)),a&&(0,x.createElement)(a,{height:"60"})),(0,x.createElement)("button",{type:"button",className:"notice-dismiss",onClick:r},(0,x.createElement)("span",{className:"screen-reader-text"},/* translators: Hidden accessibility text. */ +(0,n.__)("Dismiss this notice.","wordpress-seo"))));C.propTypes={children:z().node.isRequired,id:z().string.isRequired,hasIcon:z().bool,title:z().any.isRequired,image:z().elementType,isAlertDismissed:z().bool.isRequired,onDismissed:z().func.isRequired};const T=M(C);var I,R,O,L,N,j,q,B,K,F,$,H,J,U,W,Q,V,Y,G,X,Z,ee,te,ie,se,ae,oe,ne,re,ce,le,de,me,pe,he,fe,ge,we,ue,ye,be,Ee,ve,_e,ke,xe,Se;function De(){return De=Object.assign?Object.assign.bind():function(e){for(var t=1;tx.createElement("svg",De({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 448 360"},e),I||(I=x.createElement("circle",{cx:226,cy:211,r:149,fill:"#f0ecf0"})),R||(R=x.createElement("path",{fill:"#fbd2a6",d:"M173.53 189.38s-35.47-5.3-41.78-11c-9.39-24.93-29.61-48-35.47-66.21-.71-2.24 3.72-11.39 3.53-15.41s-5.34-11.64-5.23-14-.09-15.27-.09-15.27l-4.75-.72s-5.13 6.07-3.56 9.87c-1.73-4.19 4.3 7.93.5 9.35 0 0-6-5.94-11.76-8.27s-19.57-3.65-19.57-3.65L43.19 73l-4.42.6L31 69.7l-2.85 5.12 7.53 5.29L40.86 92l17.19 10.2 10.2 10.56 9.86 3.56s26.49 79.67 45 92c17 11.33 37.23 15.92 37.23 15.92z"})),O||(O=x.createElement("path",{fill:"#a4286a",d:"M270.52 345.13c2.76-14.59 15.94-35.73 30.24-54.58 16.22-21.39 14-79.66-33.19-91.46-17.3-4.32-52.25-1-59.85-3.41C186.54 189 170 187 168 190.17c-5 10.51-7.73 27.81-5.51 36.26 1.18 4.73 3.54 5.91 20.49 13.4-5.12 15-16.35 26.3-22.86 37s7.88 27.2 7.1 33.51c-.48 3.8-4.26 21.13-7.18 34.25a149.47 149.47 0 0 0 110.3 8.66 25.66 25.66 0 0 1 .18-8.12z"})),L||(L=x.createElement("path",{fill:"#9a5815",d:"M206.76 66.43c-5 14.4-1.42 25.67-3.93 40.74-10 60.34-24.08 43.92-31.44 93.6 7.24-14.19 14.32-15.82 20.63-23.11-.83 3.09-10.25 13.75-8.05 34.81 9.85-8.51 6.35-8.75 11.86-8.54.36 3.25 3.53 3.22-3.59 10.53 2.52.69 17.42-14.32 20.16-12.66s0 5.72-6 7.76c2.15 2.2 30.47-3.87 43.81-14.71 4.93-4 10-13.16 13.38-18.2 7.17-10.62 12.38-24.77 17.71-36.6 8.94-19.87 15.09-39.34 16.11-61.31.53-10.44-3.41-18.44-4.41-28.86-2.57-27.8-67.63-37.26-86.24 16.55z"})),N||(N=x.createElement("path",{fill:"#efb17c",d:"M277.74 179.06c.62-.79 1.24-1.59 1.84-2.39-.85 2.59-1.52 3.73-1.84 2.39z"})),j||(j=x.createElement("path",{fill:"#fbd2a6",d:"M216.1 206.72c3.69-5.42 8.28-3.35 15.57-8.28 3.76-3.06 1.57-9.46 1.77-11.82 18.25 4.56 37.38-1.18 49.07-16 .62 5.16-2.77 22.27-.2 27 4.73 8.67 13.4 18.92 13.4 18.92-35.47-2.76-63.45 39-89.86 44.54 5.52-28.74-2.36-35.84 10.25-54.36z"})),q||(q=x.createElement("path",{fill:"#f6b488",d:"m235.21 167.9 53.21-25.23s-3.65 24-6.5 32.72c-64.05 62.66-46.47-7.33-46.71-7.49z"})),B||(B=x.createElement("path",{fill:"#fbd2a6",d:"M226.86 50.64C215 59.31 206.37 93.21 204 95.57c-19.46 19.47-3.59 41.39-3.94 51.24-.2 5.52-4.14 25.42 5.72 29.36 22.22 8.89 60-3.48 67.19-12.61 13.28-16.75 40.89-94.78 17.74-108.19-7.92-4.58-42.78-20.18-63.85-4.73z"})),K||(K=x.createElement("path",{fill:"#e5766c",d:"M243.69 143.66c-10.7-6.16-8.56-6.73-19.76-12.71-3.86-2.07-3.94.64-6.32 0-2.91-.79-1.39-2.74-5.37-3.48-6.52-1.21-3.67 3.63-3.15 6 1.32 6.15-8.17 17.3 3.26 21.42 12.65 4.55 21.38-9.41 31.34-11.23z"})),F||(F=x.createElement("path",{fill:"#fff",d:"M240.68 143.9c-11.49-5.53-11.65-8.17-24.64-11.69-8.6-2.32-5.53 1-5.69 4.42-.2 4.16-1.26 9.87 4.9 12.66 9 4.09 18.16-6.02 25.43-5.39zm.7-40.9c-.16 1.26-.06 4.9 5.46 8.25 11.43-4.73 16.36-2.56 17-3.33 1.48-1.76-2-8.87-7.88-9.85-5.58-.94-14.14 1.24-14.58 4.93z"})),$||($=x.createElement("path",{fill:"#000001",d:"M263.53 108.19c-4.32-4.33-6.85-6.24-12.26-8.21-2.77-1-6.18.18-8.65 1.67a3.65 3.65 0 0 0-1.24 1.23h-.12a3.73 3.73 0 0 1 1-1.52 12.53 12.53 0 0 1 11.93-3c4.73 1 9.43 4.63 9.42 9.82z"})),H||(H=x.createElement("circle",{cx:254.13,cy:104.05,r:4.19,fill:"#000001"})),J||(J=x.createElement("path",{fill:"#fff",d:"M225.26 99.22c-.29 1-6.6 3.45-10.92 1.48-1.15-3.24-5-6.43-5.25-6.71-.5-2.86 5.55-8 10.06-6.3a10.21 10.21 0 0 1 6.11 11.53z"})),U||(U=x.createElement("path",{fill:"#000001",d:"M209.29 94.21c-.19-2.34 1.84-4.1 3.65-5.2 7-3.87 13.18 3 12.43 10h-.12c-.14-4-2.38-8.44-6.47-9.11a3.19 3.19 0 0 0-2.42.31c-1.37.85-2.38 2-3.89 2.56-1 .45-1.92.42-3 1.4h-.22z"})),W||(W=x.createElement("circle",{cx:219.55,cy:95.28,r:4,fill:"#000001"})),Q||(Q=x.createElement("path",{fill:"#efb17c",d:"M218.66 120.27a27.32 27.32 0 0 0 4.54 3.45c-2.29-.72-4.28-.69-6.32-2.27-2.53-2-3.39-5.16-.73-7.72 10.24-9.82 12.56-13.82 14.77-24.42-1 12.37-6 17.77-10.63 23.18-2.53 2.97-4.68 5.06-1.63 7.78z"})),V||(V=x.createElement("path",{fill:"#a57c52",d:"M231.22 69.91c-.67-3.41-8.78-2.83-11.06-1.93-3.48 1.39-6.08 5.22-7.13 8.53 2.9-4.3 6.74-8.12 12.46-6 1.16.42 3.18 2.35 4.48 1.85s1.03-2.2 1.25-2.45zm32.16 8.56c-2.75-1.66-12.24-5.08-12.18.82 2.56.24 5-.19 7.64.95 11.22 4.76 12.77 17.61 12.85 17.86.2-.53.1 1.26.23.7-.02.2.95-12.12-8.54-20.33z"})),Y||(Y=x.createElement("path",{fill:"#fbd2a6",d:"M53.43 250.73c6.29 0-.6-.17 7.34 0 1.89.05-2.38-.7 0-.69 4.54-4.2 12.48-.74 20.6-2.45 4.55.35 3.93 1.35 5.59 4.19 4.89 8.38 4.78 14.21 14 19.56 16.42 8.38 66 12.92 88.49 18.86 5.52.83 42.64-20.15 61-23.75 6.51 10.74 11.46 28.68 8.39 34.93-6.54 13.3-57.07 25.4-75.91 25.15C156.47 326.18 94 294 92.2 293c-.94-.57.7-.7-7.68 0s-10.15.72-17.47-1.4c-3-.87-4.61-1.33-6.33-3.54-2 .22-3.39.2-4.78-1-3.15-2.74-4.84-6.61-2.73-10.06h-.12c-3.35-2.48-6.54-7.69-3.08-11.72 1-1.18 6.06-1.94 7.77-2.28-1.58-.29-6.37.19-7.49-.72-3.06-2.5-4.96-11.55 3.14-11.55z"})),G||(G=x.createElement("path",{fill:"#a4286a",d:"M303.22 237.52c-9.87-11.88-41.59 8.19-47.8 12.34s-14.89 17.95-14.89 17.95c6 9.43 8.36 31 5.65 46.34l30.51-3s18-15.62 22.59-28.7 6.3-42.54 6.3-42.54"})),X||(X=x.createElement("path",{fill:"#cb9833",d:"M278.63 31.67c-6.08 0-22.91 4.07-22.93 12.91 0 11 47.9 38.38 16.14 85.85 10.21-.79 10.79-8.12 14.92-14.93-3.66 77-49.38 93.58-40.51 142.25 7.68-25.81 20.3-11.62 38.13-33.84 3.45 4.88 9 18.28-9.46 33.78 50-31.26 57.31-56.6 51.92-95C319.93 113.53 348.7 42 278.63 31.67z"})),Z||(Z=x.createElement("path",{fill:"#fbd2a6",d:"M283.64 126.83c-2.42 9.67-8 15.76-1.48 16.46A21.26 21.26 0 0 0 302 132.6c5.17-8.52 3.93-16.44-2.46-18s-13.48 2.56-15.9 12.23z"})),ee||(ee=x.createElement("path",{fill:"#efb17c",d:"M38 73.45c1.92 2 4.25 9.21 6.32 10.91 2.25 1.85 5.71 2.12 8.1 4.45 3.66-2 6-8.72 10-9.31-2.59 1.31-4.42 3.5-6.93 4.88-1.42.8-3 1.31-4.38 2.25-2.16-1.46-4.27-1.77-6.26-3.38-2.52-2.02-5.31-8-6.85-9.8z"})),te||(te=x.createElement("path",{fill:"#efb17c",d:"M39 74.4c4.83 1.1 12.52 6.44 15.89 10-3.22-1.34-14.73-6.15-15.89-10zm.62-1.5c6.71-.79 18 1.54 23.29 5.9-3.85-.2-5.42-1.48-9-2.94-4.08-1.69-8.83-2.03-14.29-2.96zm46.43 14.58c-3.72-1.32-10.52-1.13-13.22 3.52 2-1.16 1.84-2.11 4.18-1.72-3.81-4.15 8.16-.74 11.6-.24m-2.78 13.15c.56-3.29-8-7.81-10.58-9.17-6.25-3.29-12.16 1.36-19.33-4.53 5.94 6.1 14.23 2.5 19.55 5.76 3.06 1.88 8.65 6.09 9.35 9.38-.23-.4 1.29-1.44 1.01-1.44z"})),ie||(ie=x.createElement("circle",{cx:38.13,cy:30.03,r:3.14,fill:"#b89ac8"})),se||(se=x.createElement("circle",{cx:60.26,cy:39.96,r:3.14,fill:"#e31e0c"})),ae||(ae=x.createElement("circle",{cx:50.29,cy:25.63,r:3.14,fill:"#3baa45"})),oe||(oe=x.createElement("circle",{cx:22.19,cy:19.21,r:3.14,fill:"#2ca9e1"})),ne||(ne=x.createElement("circle",{cx:22.19,cy:30.03,r:3.14,fill:"#e31e0c"})),re||(re=x.createElement("circle",{cx:26.86,cy:8.28,r:3.14,fill:"#3baa45"})),ce||(ce=x.createElement("circle",{cx:49.32,cy:39.99,r:3.14,fill:"#e31e0c"})),le||(le=x.createElement("circle",{cx:63.86,cy:59.52,r:3.14,fill:"#f8ad39"})),de||(de=x.createElement("circle",{cx:50.88,cy:50.72,r:3.14,fill:"#3baa45"})),me||(me=x.createElement("circle",{cx:63.47,cy:76.17,r:3.14,fill:"#e31e0c"})),pe||(pe=x.createElement("circle",{cx:38.34,cy:14.83,r:3.14,fill:"#2ca9e1"})),he||(he=x.createElement("circle",{cx:44.44,cy:5.92,r:3.14,fill:"#f8ad39"})),fe||(fe=x.createElement("circle",{cx:57.42,cy:10.24,r:3.14,fill:"#e31e0c"})),ge||(ge=x.createElement("circle",{cx:66.81,cy:12.4,r:3.14,fill:"#2ca9e1"})),we||(we=x.createElement("circle",{cx:77.95,cy:5.14,r:3.14,fill:"#b89ac8"})),ue||(ue=x.createElement("circle",{cx:77.95,cy:30.34,r:3.14,fill:"#e31e0c"})),ye||(ye=x.createElement("circle",{cx:80.97,cy:16.55,r:3.14,fill:"#f8ad39"})),be||(be=x.createElement("circle",{cx:62.96,cy:27.27,r:3.14,fill:"#3baa45"})),Ee||(Ee=x.createElement("circle",{cx:75.36,cy:48.67,r:3.14,fill:"#2ca9e1"})),ve||(ve=x.createElement("circle",{cx:76.11,cy:65.31,r:3.14,fill:"#3baa45"})),_e||(_e=x.createElement("path",{fill:"#71b026",d:"M78.58 178.43C54.36 167.26 32 198.93 5 198.93c19.56 20.49 63.53 1.52 69 15.5 1.48-14.01 4.11-30.9 4.58-36z"})),ke||(ke=x.createElement("path",{fill:"#074a67",d:"M67.75 251.08c0-4.65 10.13-72.65 10.13-72.65h2.8l-9.09 72.3z"})),xe||(xe=x.createElement("ellipse",{cx:255.38,cy:103.18,fill:"#fff",rx:1.84,ry:1.77})),Se||(Se=x.createElement("ellipse",{cx:221.24,cy:94.75,fill:"#fff",rx:1.84,ry:1.77}))),ze=({store:e="yoast-seo/editor",image:t=Pe,url:i,...s})=>(0,c.useSelect)((t=>t(e).getIsPremium()))?null:(0,x.createElement)(T,{alertKey:"webinar-promo-notification",store:e,id:"webinar-promo-notification",title:(0,n.__)("Join our FREE webinar for SEO success","wordpress-seo"),image:t,url:i,...s},(0,n.__)("Feeling lost when it comes to optimizing your site for the search engines? Join our FREE webinar to gain the confidence that you need in order to start optimizing like a pro! You'll obtain the knowledge and tools to start effectively implementing SEO.","wordpress-seo")," ",(0,x.createElement)("a",{href:i,target:"_blank",rel:"noreferrer"},(0,n.__)("Sign up today!","wordpress-seo")));ze.propTypes={store:z().string,image:z().elementType,url:z().string.isRequired};const Ae=ze,Me=window.wp.url,Ce=({store:e="yoast-seo/editor",image:t=null,title:i,promoId:s,alertKey:a,children:o,...n})=>(0,c.select)(e).isPromotionActive(s)&&(0,x.createElement)(T,{alertKey:a,store:e,id:a,title:i,image:t,...n},o);Ce.propTypes={store:z().string,image:z().elementType,title:z().any.isRequired,promoId:z().string.isRequired,alertKey:z().string.isRequired,children:z().node};const Te=({store:e="yoast-seo/editor",...t})=>{const i=(0,c.useSelect)((t=>t(e).selectLinkParams()),[e]),s=(0,S.createInterpolateElement)((0,n.sprintf)(/* translators: %1$s expands to Yoast, %2$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */ +(0,n.__)("The %1$s %2$sultimate Black Friday checklist%3$s helps you prepare in time, so you can boost your results during this sale.","wordpress-seo"),"Yoast","",""),{strong:(0,x.createElement)("strong",null)});return(0,x.createElement)(Ce,{id:"black-friday-2023-sidebar-checklist",promoId:"black-friday-2023-checklist",alertKey:"black-friday-2023-sidebar-checklist",store:e,title:(0,n.__)("Is your WooCommerce store ready for Black Friday?","wordpress-seo"),...t},s," ",(0,x.createElement)("a",{href:(0,Me.addQueryArgs)("https://yoa.st/black-friday-checklist",i),target:"_blank",rel:"noreferrer"},(0,n.__)("Get the checklist and start optimizing now!","wordpress-seo")))};Te.propTypes={store:z().string};const Ie=()=>{const e=document.getElementById("yst-settings-header-root"),t=Boolean((0,r.get)(window,"wpseoScriptData.isRtl",!1)),i=(0,r.get)(window,"wpseoScriptData.webinarIntroSettingsUrl","https://yoa.st/webinar-intro-settings"),s=(0,r.get)(window,"wpseoScriptData.isWooCommerceActive","");e&&(0,S.render)((0,x.createElement)(D.ThemeProvider,{theme:{isRtl:t}},s&&(0,x.createElement)(Te,{store:"yoast-seo/settings"}),((e="yoast-seo/editor")=>{const t=(0,c.select)(e).isPromotionActive("black-friday-2023-checklist"),i=(0,c.select)(e).isAlertDismissed("black-friday-2023-sidebar-checklist");return!t||i})("yoast-seo/settings")&&(0,x.createElement)(Ae,{store:"yoast-seo/settings",url:i})),e)};var Re;!function(e){function t(){e("#copy-home-meta-description").on("click",(function(){e("#open_graph_frontpage_desc").val(e("#meta_description").val())}))}function i(){var t=e("#wpseo-conf");if(t.length){var i=t.attr("action").split("#")[0];t.attr("action",i+window.location.hash)}}function s(){var t=window.location.hash.replace("#top#","");-1!==t.search("#top")&&(t=window.location.hash.replace("#top%23","")),""!==t&&"#"!==t.charAt(0)||(t=e(".wpseotab").attr("id")),e("#"+t).addClass("active"),e("#"+t+"-tab").addClass("nav-tab-active").trigger("click")}function a(t){const i=e("#noindex-author-noposts-wpseo-container");t?i.show():i.hide()}e.fn._wpseoIsInViewport=function(){const t=e(this).offset().top,i=t+e(this).outerHeight(),s=e(window).scrollTop(),a=s+e(window).height();return t>s&&i{e(this).is(":checked")||a(!1)})),o.on("change",(()=>{e(this).is(":checked")||a(!0)})),e("#disable-date input[type='radio']").on("change",(function(){e(this).is(":checked")&&e("#date-archives-titles-metas-content").toggle("off"===e(this).val())})).trigger("change"),e("#disable-attachment input[type='radio']").on("change",(function(){e(this).is(":checked")&&e("#media_settings").toggle("off"===e(this).val())})).trigger("change"),e("#disable-post_format").on("change",(function(){e("#post_format-titles-metas").toggle(e(this).is(":not(:checked)"))})).trigger("change"),e("#wpseo-tabs").find("a").on("click",(function(t){var i,s,a,o=!0;if(i=e(this),s=!!e("#first-time-configuration-tab").filter(".nav-tab-active").length,a=!!i.filter("#first-time-configuration-tab").length,s&&!a&&window.isStepBeingEdited&&(o=confirm((0,n.__)("There are unsaved changes in one or more steps. Leaving means that those changes may not be saved. Are you sure you want to leave?","wordpress-seo"))),o){window.isStepBeingEdited=!1,e("#wpseo-tabs").find("a").removeClass("nav-tab-active"),e(".wpseotab").removeClass("active");var r=e(this).attr("id").replace("-tab",""),c=e("#"+r);c.addClass("active"),e(this).addClass("nav-tab-active"),c.hasClass("nosave")?e("#wpseo-submit-container").hide():e("#wpseo-submit-container").show(),e(window).trigger("yoast-seo-tab-change"),"first-time-configuration"===r?(e(".notice-yoast").slideUp(),e(".yoast_premium_upsell").slideUp(),e("#sidebar-container").hide()):(e(".notice-yoast").slideDown(),e(".yoast_premium_upsell").slideDown(),e("#sidebar-container").show())}else t.preventDefault(),e("#first-time-configuration-tab").trigger("focus")})),e("#yoast-first-time-configuration-notice a").on("click",(function(){e("#first-time-configuration-tab").click()})),e("#company_or_person").on("change",(function(){var t=e(this).val();"company"===t?(e("#knowledge-graph-company").show(),e("#knowledge-graph-person").hide()):"person"===t?(e("#knowledge-graph-company").hide(),e("#knowledge-graph-person").show()):(e("#knowledge-graph-company").hide(),e("#knowledge-graph-person").hide())})).trigger("change"),e(".switch-yoast-seo input").on("keydown",(function(e){"keydown"===e.type&&13===e.which&&e.preventDefault()})),e("body").on("click","button.toggleable-container-trigger",(t=>{const i=e(t.currentTarget),s=i.parent().siblings(".toggleable-container");s.toggleClass("toggleable-container-hidden"),i.attr("aria-expanded",!s.hasClass("toggleable-container-hidden")).find("span").toggleClass("dashicons-arrow-up-alt2 dashicons-arrow-down-alt2")}));const l=e("#opengraph"),d=e("#wpseo-opengraph-settings");l.length&&d.length&&(d.toggle(l[0].checked),l.on("change",(e=>{d.toggle(e.target.checked)}))),t(),s(),function(){if(!e("#enable_xml_sitemap input[type=radio]").length)return;const t=e("#yoast-seo-sitemaps-disabled-warning");e("#enable_xml_sitemap input[type=radio]").on("change",(function(){"off"===this.value?t.show():t.hide()}))}(),function(){const t=e("#wpseo-submit-container-float"),i=e("#wpseo-submit-container-fixed");if(!t.length||!i.length)return;function s(){t._wpseoIsInViewport()?i.hide():i.show()}e(window).on("resize scroll",(0,r.debounce)(s,100)),e(window).on("yoast-seo-tab-change",s);const a=e(".wpseo-message");a.length&&window.setTimeout((()=>{a.fadeOut()}),5e3),s()}()}))}(o()),wpseoScriptData&&(void 0!==wpseoScriptData.media&&o()(document).ready((function(e){void 0!==wp.media&&e(".wpseo_image_upload_button").each((function(t,i){const s=function(t){let i=(t=e(t)).data("target");return i&&""!==i||(i=e(t).attr("id").replace(/_button$/,"")),i}(i),a=e(i).data("target-id"),o=e("#"+s),n=e("#"+a);var r=wp.media.frames.file_frame=wp.media({title:wpseoScriptData.media.choose_image,button:{text:wpseoScriptData.media.choose_image},multiple:!1,library:{type:"image"}});r.on("select",(function(){var e=r.state().get("selection").first().toJSON();o.val(e.url),n.val(e.id)}));const c=e(i);c.click((function(e){e.preventDefault(),r.open()})),c.siblings(".wpseo_image_remove_button").on("click",(e=>{e.preventDefault(),o.val(""),n.val("")}))}))})),void 0!==wpseoScriptData.dismissedAlerts&&((Re=(0,c.registerStore)("yoast-seo/settings",{reducer:(0,c.combineReducers)({currentPromotions:m,dismissedAlerts:p,isPremium:h,linkParams:f}),selectors:{isAlertDismissed:g,getIsPremium:w,isPromotionActive:u,selectLinkParams:y},actions:{dismissAlert:b,setCurrentPromotions:E,setDismissedAlerts:v,setLinkParams:_,setIsPremium:k},controls:t})).dispatch(v((0,r.get)(window,"wpseoScriptData.dismissedAlerts",{}))),Re.dispatch(k(Boolean((0,r.get)(window,"wpseoScriptData.isPremium",!1)))),Re.dispatch(E((0,r.get)(window,"wpseoScriptData.currentPromotions",{}))),Re.dispatch(_((0,r.get)(window,"wpseoScriptData.linkParams",{})))),s()((()=>{Ie()})))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/support.js b/wp/wp-content/plugins/wordpress-seo/js/dist/support.js new file mode 100644 index 00000000..5ba18b79 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/support.js @@ -0,0 +1,25 @@ +(()=>{var e={4530:(e,t)=>{var s;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";const e=window.React,t=window.wp.components,r=window.wp.data,a=window.wp.domReady;var n=s.n(a);const l=window.wp.element,i=window.yoast.uiLibrary,o=window.lodash,c=window.yoast.reduxJsToolkit,m="adminUrl",d=(0,c.createSlice)({name:m,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),p=(d.getInitialState,{selectAdminUrl:e=>(0,o.get)(e,m,"")});p.selectAdminLink=(0,c.createSelector)([p.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}})),d.actions,d.reducer;const y=window.wp.url,u="linkParams",g=(0,c.createSlice)({name:u,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),f=g.getInitialState,w={selectLinkParam:(e,t,s={})=>(0,o.get)(e,`${u}.${t}`,s),selectLinkParams:e=>(0,o.get)(e,u,{})};w.selectLink=(0,c.createSelector)([w.selectLinkParams,(e,t)=>t,(e,t,s={})=>s],((e,t,s)=>(0,y.addQueryArgs)(t,{...e,...s})));const h=g.actions,E=g.reducer,v=(0,c.createSlice)({name:"notifications",initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:s="default",title:r,description:a})=>({payload:{id:e||(0,c.nanoid)(),variant:t,size:s,title:r||"",description:a}})},removeNotification:(e,{payload:t})=>(0,o.omit)(e,t)}}),b=(v.getInitialState,v.actions,v.reducer,"pluginUrl"),x=(0,c.createSlice)({name:b,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),_=(x.getInitialState,{selectPluginUrl:e=>(0,o.get)(e,b,"")});_.selectImageLink=(0,c.createSelector)([_.selectPluginUrl,(e,t,s="images")=>s,(e,t)=>t],((e,t,s)=>[(0,o.trimEnd)(e,"/"),(0,o.trim)(t,"/"),(0,o.trimStart)(s,"/")].join("/"))),x.actions,x.reducer,window.wp.apiFetch;const k="loading",N="showPlay",S="askPermission",P="isPlaying",L="wistiaEmbedPermission",R=(0,c.createSlice)({name:L,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${L}/request`,(e=>{e.status=k})),e.addCase(`${L}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${L}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,o.get)(t,"error.code",500),message:(0,o.get)(t,"error.message","Unknown")}}))}});R.getInitialState,R.actions,R.reducer;const q=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 8l4 4m0 0l-4 4m4-4H3"}))})),O=window.wp.i18n;var $=s(4530),I=s.n($);const C=window.yoast.propTypes;var A=s.n(C);const j=({link:t})=>{const s=(0,l.useMemo)((()=>(0,l.createInterpolateElement)((0,O.sprintf)(/* translators: %1$s expands to "Yoast SEO" academy, which is a clickable link. */ +(0,O.__)("Want to learn SEO from Team Yoast? Check out our %1$s!","wordpress-seo"),""),{link:(0,e.createElement)("a",{href:t,target:"_blank",rel:"noopener"},"Yoast SEO academy")})),[]);return(0,e.createElement)(i.Paper,{as:"div",className:"yst-p-6 yst-space-y-3"},(0,e.createElement)(i.Title,{as:"h2",size:"4",className:"yst-text-base yst-text-primary-500"},(0,O.__)("Learn SEO","wordpress-seo")),(0,e.createElement)("p",null,s,(0,e.createElement)("br",null),(0,O.__)("We have both free and premium online courses to learn everything you need to know about SEO.","wordpress-seo")),(0,e.createElement)(i.Link,{href:t,className:"yst-block",target:"_blank",rel:"noopener"},(0,O.sprintf)(/* translators: %1$s expands to "Yoast SEO academy". */ +(0,O.__)("Check out %1$s","wordpress-seo"),"Yoast SEO academy")))};j.propTypes={link:A().string.isRequired};const T=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),z=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),B=({learnMoreLink:t,thumbnail:s,wistiaEmbedPermission:r,upsellLink:a,isProductCopy:n,title:o,upsellLabel:c,newToText:m,bundleNote:d})=>{const{onClose:p,initialFocus:y}=(0,i.useModalContext)(),u={a:(0,e.createElement)(W,{href:t,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,e.createElement)(z,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,e.createElement)("div",{className:"yst-relative yst-w-full"},(0,e.createElement)(ye,{videoId:"vmrahpfjxp",thumbnail:s,wistiaEmbedPermission:r}),(0,e.createElement)(i.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,e.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,e.createElement)("span",{className:"yst-logo-icon"}),m))),(0,e.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,e.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},o),(0,e.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},n?(0,l.createInterpolateElement)((0,O.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,O.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for product titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),u):(0,l.createInterpolateElement)((0,O.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,O.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),u))),(0,e.createElement)("div",{className:"yst-w-full yst-flex yst-mt-10"},(0,e.createElement)(i.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:a,target:"_blank",ref:y},(0,e.createElement)(T,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),c,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,O.__)("(Opens in a new browser tab)","wordpress-seo")))),d,(0,e.createElement)(i.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:p},(0,O.__)("Close","wordpress-seo"))))};B.propTypes={learnMoreLink:A().string.isRequired,upsellLink:A().string.isRequired,thumbnail:A().shape({src:A().string.isRequired,width:A().string,height:A().string}).isRequired,wistiaEmbedPermission:A().shape({value:A().bool.isRequired,status:A().string.isRequired,set:A().func.isRequired}).isRequired,title:A().string,upsellLabel:A().string,newToText:A().string,isProductCopy:A().bool,bundleNote:A().oneOfType([A().string,A().element])},B.defaultProps={title:(0,O.__)("Use AI to write your titles & meta descriptions!","wordpress-seo"),upsellLabel:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,O.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),newToText:"Yoast SEO Premium",isProductCopy:!1,bundleNote:""};const H={variant:{lg:{grid:"yst-grid lg:yst-grid-cols-3 lg:yst-gap-12",col1:"yst-col-span-1",col2:"lg:yst-mt-0 lg:yst-col-span-2"},xl:{grid:"yst-grid xl:yst-grid-cols-3 xl:yst-gap-12",col1:"yst-col-span-1",col2:"xl:yst-mt-0 xl:yst-col-span-2"},"2xl":{grid:"yst-grid 2xl:yst-grid-cols-3 2xl:yst-gap-12",col1:"yst-col-span-1",col2:"2xl:yst-mt-0 2xl:yst-col-span-2"}}},M=({id:t,children:s,title:r,description:a=null,variant:n="2xl"})=>(0,e.createElement)("section",{id:t,className:H.variant[n].grid},(0,e.createElement)("div",{className:H.variant[n].col1},(0,e.createElement)("div",{className:"yst-max-w-screen-sm"},(0,e.createElement)(i.Title,{as:"h2",size:"4"},r),a&&(0,e.createElement)("p",{className:"yst-mt-2"},a))),(0,e.createElement)("fieldset",{className:`yst-min-w-0 yst-mt-8 ${H.variant[n].col2}`},(0,e.createElement)("legend",{className:"yst-sr-only"},r),(0,e.createElement)("div",{className:"yst-space-y-8"},s)));var U;function F(){return F=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",F({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1000 1000"},t),U||(U=e.createElement("path",{fill:"#fff",d:"M500 0C223.9 0 0 223.9 0 500s223.9 500 500 500 500-223.9 500-500S776.1 0 500 0Zm87.2 412.4c0-21.9 4.3-40.2 13.1-54.4s24-27.1 45.9-38.2l10.1-4.9c17.8-9 22.4-16.7 22.4-26 0-11.1-9.5-19.1-25-19.1-18.3 0-32.2 9.5-41.8 28.9l-24.7-24.8c5.4-11.6 14.1-20.9 25.8-28.1a70.8 70.8 0 0 1 38.9-11.1c17.8 0 33.3 4.6 45.9 14.2s19.4 22.7 19.4 39.4c0 26.6-15 42.9-43.1 57.3l-15.7 8c-16.8 8.5-25.1 16-27.4 29.4h85.4v35.4H587.2Zm-82.1 373.3c-157.8 0-285.7-127.9-285.7-285.7s127.9-285.7 285.7-285.7a286.4 286.4 0 0 1 55.9 5.5l-55.9 116.9c-90 0-163.3 73.3-163.3 163.3s73.3 163.3 163.3 163.3a162.8 162.8 0 0 0 106.4-39.6l61.8 107.2a283.9 283.9 0 0 1-168.2 54.8ZM705 704.1l-70.7-122.5H492.9l70.7-122.4H705l70.7 122.4Z"}))),W=({href:t,children:s,...r})=>(0,e.createElement)(i.Link,{target:"_blank",rel:"noopener noreferrer",...r,href:t},s,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,O.__)("(Opens in a new browser tab)","wordpress-seo")));var Q,V,G;function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",Z({xmlns:"http://www.w3.org/2000/svg",id:"star-rating-half_svg__Layer_1","data-name":"Layer 1",viewBox:"0 0 500 475.53"},t),Q||(Q=e.createElement("defs",null,e.createElement("style",null,".star-rating-half_svg__cls-1{fill:#fbbf24}"))),V||(V=e.createElement("path",{d:"M250 392.04 98.15 471.87l29-169.09L4.3 183.03l169.77-24.67L250 4.52l75.93 153.84 169.77 24.67-122.85 119.75 29 169.09L250 392.04z",className:"star-rating-half_svg__cls-1"})),G||(G=e.createElement("path",{d:"m250 9.04 73.67 149.27.93 1.88 2.08.3 164.72 23.94-119.19 116.19-1.51 1.47.36 2.07 28.14 164.06-147.34-77.46-1.86-1-1.86 1-147.34 77.46 28.14-164.06.36-2.07-1.51-1.47L8.6 184.43l164.72-23.9 2.08-.3.93-1.88L250 9.04m0-9-77.25 156.49L0 181.64l125 121.89-29.51 172L250 394.3l154.51 81.23-29.51-172 125-121.89-172.75-25.11L250 0Z",className:"star-rating-half_svg__cls-1"})),e.createElement("path",{d:"m500 181.64-172.75-25.11L250 0v394.3l154.51 81.23L375 303.48l125-121.84z",style:{fill:"#f3f4f6"}}));function J(){return J=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",J({xmlns:"http://www.w3.org/2000/svg","data-name":"Layer 1",viewBox:"0 0 500 475.53"},t),e.createElement("path",{d:"m250 0 77.25 156.53L500 181.64 375 303.48l29.51 172.05L250 394.3 95.49 475.53 125 303.48 0 181.64l172.75-25.11L250 0z",style:{fill:"#fbbf24"}}));var X,ee,te,se,re,ae,ne,le,ie;function oe(){return oe=Object.assign?Object.assign.bind():function(e){for(var t=1;te.createElement("svg",oe({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 500 500"},t),X||(X=e.createElement("path",{fill:"#a4286a",d:"M80 0h340a80 80 0 0 1 80 80v420H80a80 80 0 0 1-80-80V80A80 80 0 0 1 80 0z"})),ee||(ee=e.createElement("path",{fill:"#6c2548",d:"M437.61 2 155.89 500H500V80a80 80 0 0 0-62.39-78z"})),te||(te=e.createElement("path",{fill:"#fff",d:"M74.4 337.3v34.9c21.6-.9 38.5-8 52.8-22.5s27.4-38 39.9-72.9l92.6-248h-44.8L140.3 236l-37-116.2h-41l54.4 139.8a57.54 57.54 0 0 1 0 41.8c-5.5 14.2-15.4 30.9-42.3 35.9z"})),se||(se=e.createElement("circle",{cx:368.33,cy:124.68,r:97.34,fill:"#9fda4f",transform:"rotate(-45 368.335 124.68)"})),re||(re=e.createElement("path",{fill:"#77b227",d:"m416.2 39.93-95.74 169.51A97.34 97.34 0 1 0 416.2 39.93z"})),ae||(ae=e.createElement("path",{fill:"#fec228",d:"m294.78 254.75-.15-.08-.13-.07a63.6 63.6 0 0 0-62.56 110.76h.13a63.6 63.6 0 0 0 62.71-110.67z"})),ne||(ne=e.createElement("path",{fill:"#f49a00",d:"m294.5 254.59-62.56 110.76a63.6 63.6 0 1 0 62.56-110.76z"})),le||(le=e.createElement("path",{fill:"#ff4e47",d:"M222.31 450.07A38.16 38.16 0 0 0 203 416.83a38.18 38.18 0 1 0 19.41 33.27z"})),ie||(ie=e.createElement("path",{fill:"#ed261f",d:"m202.9 416.8-37.54 66.48a38.17 38.17 0 0 0 37.54-66.48z"}))),me=({link:t,linkProps:s,promotions:r})=>{const a=(0,l.useMemo)((()=>(0,O.__)("Use AI to generate titles and meta descriptions, automatically redirect deleted pages, get 24/7 support, and much, much more!","wordpress-seo")),[]),n=(0,l.createInterpolateElement)((0,O.sprintf)(/* translators: %1$s and %2$s expand to a span wrap to avoid linebreaks. %3$s expands to "Yoast SEO Premium". */ +(0,O.__)("%1$sGet%2$s %3$s","wordpress-seo"),"","","Yoast SEO Premium"),{nowrap:(0,e.createElement)("span",{className:"yst-whitespace-nowrap"})}),o=r.includes("black-friday-2023-promotion"),c=(0,l.createInterpolateElement)((0,O.sprintf)(/* translators: %1$s and %2$s expand to strong tags. */ +(0,O.__)("%1$sSAVE 30%%%2$s on your 12 month subscription","wordpress-seo"),"",""),{strong:(0,e.createElement)("strong",null)});return(0,e.createElement)("div",{className:"yst-p-6 yst-rounded-lg yst-text-white yst-bg-primary-500 yst-shadow"},(0,e.createElement)("figure",{className:"yst-logo-square yst-w-16 yst-h-16 yst-mx-auto yst-overflow-hidden yst-border yst-border-white yst-rounded-xl yst-rounded-br-none yst-relative yst-z-10 yst-mt-[-2.6rem]"},(0,e.createElement)(ce,null)),o&&(0,e.createElement)("div",{className:"sidebar__sale_banner_container"},(0,e.createElement)("div",{className:"sidebar__sale_banner"},(0,e.createElement)("span",{className:"banner_text"},(0,O.__)("BLACK FRIDAY - 30% OFF","wordpress-seo")))),(0,e.createElement)(i.Title,{as:"h2",className:"yst-mt-6 yst-text-base yst-font-extrabold yst-text-white"},n),(0,e.createElement)("p",{className:"yst-mt-2"},a),o&&(0,e.createElement)("div",{className:"yst-text-center yst-border-t-[1px] yst-border-white yst-italic yst-mt-3"},(0,e.createElement)("p",{className:"yst-text-[10px] yst-my-3 yst-mx-0"},c)),(0,e.createElement)(i.Button,{as:"a",variant:"upsell",href:t,target:"_blank",rel:"noopener",className:"yst-flex yst-justify-center yst-gap-2 yst-mt-4 focus:yst-ring-offset-primary-500",...s},(0,e.createElement)("span",null,o?(0,O.__)("Claim your 30% off now!","wordpress-seo"):n),(0,e.createElement)(q,{className:"yst-w-4 yst-h-4 yst-icon-rtl"})),(0,e.createElement)("p",{className:"yst-text-center yst-text-xs yst-mx-2 yst-font-light yst-leading-5 yst-mt-2"},(0,O.__)("Only $/€/£99 per year (ex VAT)","wordpress-seo"),(0,e.createElement)("br",null),(0,O.__)("30-day money back guarantee.","wordpress-seo")),(0,e.createElement)("hr",{className:"yst-border-t yst-border-primary-300 yst-my-4"}),(0,e.createElement)("a",{className:"yst-block yst-mt-4 yst-no-underline",href:"https://www.g2.com/products/yoast-yoast/reviews",target:"_blank",rel:"noopener noreferrer"},(0,e.createElement)("span",{className:"yst-font-medium yst-text-white hover:yst-underline"},(0,O.__)("Read reviews from real users","wordpress-seo")),(0,e.createElement)("span",{className:"yst-flex yst-gap-2 yst-mt-2 yst-items-center"},(0,e.createElement)(Y,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)("span",{className:"yst-flex yst-gap-1"},(0,e.createElement)(K,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(K,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(K,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(K,{className:"yst-w-5 yst-h-5"}),(0,e.createElement)(D,{className:"yst-w-5 yst-h-5"})),(0,e.createElement)("span",{className:"yst-text-sm yst-font-semibold yst-text-white"},"4.6 / 5"))))};me.propTypes={link:A().string.isRequired,linkProps:A().object,promotions:A().array},me.defaultProps={linkProps:{},promotions:[]};const de=({children:t})=>(0,e.createElement)("div",{className:"xl:yst-max-w-3xl xl:yst-fixed xl:yst-right-8 xl:yst-w-[16rem]"},(0,e.createElement)("div",{className:"yst-grid yst-grid-cols-1 sm:yst-grid-cols-2 min-[783px]:yst-grid-cols-1 lg:yst-grid-cols-2 xl:yst-grid-cols-1 yst-gap-4"},t));de.propTypes={children:A().node.isRequired};const pe=window.yoast.reactHelmet,ye=({videoId:t,thumbnail:s,wistiaEmbedPermission:r})=>{const[a,n]=(0,l.useState)(r.value?P:N),o=(0,l.useCallback)((()=>n(P)),[n]),c=(0,l.useCallback)((()=>{r.value?o():n(S)}),[r.value,o,n]),m=(0,l.useCallback)((()=>n(N)),[n]),d=(0,l.useCallback)((()=>{r.set(!0),o()}),[r.set,o]);return(0,e.createElement)(e.Fragment,null,r.value&&(0,e.createElement)(pe.Helmet,null,(0,e.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,e.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},a===N&&(0,e.createElement)("button",{type:"button",className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:c},(0,e.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...s})),a===S&&(0,e.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,e.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},r.status===k&&(0,e.createElement)(i.Spinner,null),r.status!==k&&(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,O.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo"),"Yoast SEO","Wistia")),(0,e.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,e.createElement)(i.Button,{type:"button",variant:"secondary",onClick:m,disabled:r.status===k},(0,O.__)("Deny","wordpress-seo")),(0,e.createElement)(i.Button,{type:"button",variant:"primary",onClick:d,disabled:r.status===k},(0,O.__)("Allow","wordpress-seo")))),r.value&&a===P&&(0,e.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===t&&(0,e.createElement)(i.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==t&&(0,e.createElement)("div",{className:`wistia_embed wistia_async_${t} videoFoam=true`}))))};ye.propTypes={videoId:A().string.isRequired,thumbnail:A().shape({src:A().string.isRequired,width:A().string,height:A().string}).isRequired,wistiaEmbedPermission:A().shape({value:A().bool.isRequired,status:A().string.isRequired,set:A().func.isRequired}).isRequired};const ue=({learnMoreLink:t,thumbnail:s,wistiaEmbedPermission:r,upsellLink:a,upsellLabel:n})=>{const{onClose:o,initialFocus:c}=(0,i.useModalContext)(),m={a:(0,e.createElement)(W,{href:t,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,e.createElement)(z,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"}),br:(0,e.createElement)("br",null)};return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,e.createElement)("div",{className:"yst-relative yst-w-full"},(0,e.createElement)(ye,{videoId:"vun9z1dpfh",thumbnail:s,wistiaEmbedPermission:r}),(0,e.createElement)(i.Badge,{className:"yst-absolute yst-right-0 yst-mr-4 yst-text-center yst-justify-center",variant:"info",style:{top:"-8px"}},(0,O.__)("Beta","wordpress-seo-premium"))),(0,e.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,e.createElement)("span",{className:"yst-logo-icon"}),"Yoast SEO Premium"))),(0,e.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,e.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,e.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,O.sprintf)(/* translators: %s: Expands to "Yoast AI" */ +(0,O.__)("Optimize your SEO content with %s","wordpress-seo"),"Yoast AI")),(0,e.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,l.createInterpolateElement)((0,O.sprintf)(/* translators: %1$s is a break tag; %2$s and %3$s are anchor tags; %4$s is the arrow icon. */ +(0,O.__)("Make content editing a breeze! Optimize your SEO content with quick, actionable suggestions at the click of a button.%1$s%2$sLearn more%3$s%4$s","wordpress-seo"),"
            ","","",""),m))),(0,e.createElement)("div",{className:"yst-w-full yst-flex yst-mt-6"},(0,e.createElement)(i.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:a,target:"_blank",ref:c},(0,e.createElement)(T,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),n,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,O.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,e.createElement)(i.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:o},(0,O.__)("Close","wordpress-seo"))))};ue.propTypes={learnMoreLink:A().string.isRequired,upsellLink:A().string.isRequired,thumbnail:A().shape({src:A().string.isRequired,width:A().string,height:A().string}).isRequired,wistiaEmbedPermission:A().shape({value:A().bool.isRequired,status:A().string.isRequired,set:A().func.isRequired}).isRequired,upsellLabel:A().string},ue.defaultProps={upsellLabel:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,O.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")};const ge="@yoast/support",fe=(e,t=[],...s)=>(0,r.useSelect)((t=>{var r,a;return null===(r=(a=t(ge))[e])||void 0===r?void 0:r.call(a,...s)}),t),we=({id:t,children:s,title:r,description:a=null})=>{const n=fe("selectPreference",[],"isPremium");return(0,e.createElement)(M,{id:t,title:r,description:a,variant:n?"lg":"xl"},s)};we.propTypes={id:A().string,children:A().node.isRequired,title:A().node.isRequired,description:A().node};const he=e.forwardRef((function(t,s){return e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:s},t),e.createElement("path",{fillRule:"evenodd",d:"M10.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 11H5a1 1 0 110-2h7.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),Ee=({imageSrc:t,title:s,description:r,linkHref:a,linkText:n})=>(0,e.createElement)(i.Card,null,(0,e.createElement)(i.Card.Header,{className:"yst-h-auto yst-p-0"},(0,e.createElement)("img",{className:"yst-w-full yst-transition yst-duration-200",src:t,alt:"",width:500,height:250,loading:"lazy",decoding:"async"})),(0,e.createElement)(i.Card.Content,{className:"yst-flex yst-flex-col yst-gap-3"},(0,e.createElement)(i.Title,{as:"h3"},s),r),(0,e.createElement)(i.Link,{href:a,className:"yst-flex yst-items-center yst-mt-[18px] yst-no-underline yst-font-medium yst-text-primary-500",target:"_blank"},n,(0,e.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,O.__)("(Opens in a new browser tab)","wordpress-seo")),(0,e.createElement)(he,{className:"yst-h-4 yst-w-4 yst-ml-1 yst-icon-rtl"})));Ee.propTypes={imageSrc:A().string.isRequired,title:A().string.isRequired,description:A().string.isRequired,linkHref:A().string.isRequired,linkText:A().string.isRequired};const ve=()=>{document.querySelector("#beacon-container .BeaconFabButtonFrame iframe")?window.Beacon("open"):document.querySelector("#yoast-helpscout-beacon button").click()},be=()=>{const t=fe("selectPreference",[],"isPremium",!1),s=fe("selectPreference",[],"promotions",[]),r=fe("selectUpsellSettingsAsProps"),a=fe("selectPreference",[],"pluginUrl",""),n=fe("selectLinkParams"),o=fe("selectLink",[],"https://yoa.st/3t6"),c=fe("selectLink",[],"https://yoa.st/jj"),m=fe("selectLink",[],"https://yoa.st/help-center-support-card"),d=fe("selectLink",[],"https://yoa.st/support-forums-support-card"),p=fe("selectLink",[],"https://yoa.st/github-repository-support-card"),u=fe("selectLink",[],"https://yoa.st/contact-support-to-unlock-premium-support-section"),g=(0,l.useMemo)((()=>[{title:(0,e.createElement)("span",null,"How do I set up ",(0,e.createElement)("strong",null,"canonical URLs"),"?"),link:(0,y.addQueryArgs)("https://yoa.st/canonical-urls-support-faq",n)},{title:(0,e.createElement)("span",null,"How do I use ",(0,e.createElement)("strong",null,"XML sitemaps"),"?"),link:(0,y.addQueryArgs)("https://yoa.st/xml-sitemaps-support-faq",n)},{title:(0,e.createElement)("span",null,"How do I implement ",(0,e.createElement)("strong",null,"breadcrumbs"),"?"),link:(0,y.addQueryArgs)("https://yoa.st/implement-breadcrumbs-support-faq",n)},{title:(0,e.createElement)("span",null,"How do I ",(0,e.createElement)("strong",null,"submit my sitemap")," to search engines?"),link:(0,y.addQueryArgs)("https://yoa.st/submit-sitemap-support-faq",n)},{title:(0,e.createElement)("span",null,"How do I edit my ",(0,e.createElement)("strong",null,"robots.txt file"),"?"),link:(0,y.addQueryArgs)("https://yoa.st/edit-robots-txt-support-faq",n)},{title:(0,e.createElement)("span",null,"What are the ",(0,e.createElement)("strong",null,"meta robots advanced settings"),"?"),link:(0,y.addQueryArgs)("https://yoa.st/meta-robots-settings-support-faq",n)},{title:(0,e.createElement)("span",null,"Where can I find a ",(0,e.createElement)("strong",null,"glossary")," of SEO terms?"),link:(0,y.addQueryArgs)("https://yoa.st/seo-terms-vocabulary-support-faq",n)},{title:(0,e.createElement)("span",null,"What are ",(0,e.createElement)("strong",null,"transition words"),"?"),link:(0,y.addQueryArgs)("https://yoa.st/transition-words-support-faq",n)}]),[]);return(0,e.createElement)("div",{className:"yst-p-4 min-[783px]:yst-p-8"},(0,e.createElement)("div",{className:I()("yst-flex yst-flex-grow yst-flex-wrap",!t&&"xl:yst-pr-[17.5rem]")},(0,e.createElement)(i.Paper,{as:"main",className:"yst-flex-grow yst-mb-8 xl:yst-mb-0"},(0,e.createElement)(i.Paper.Header,null,(0,e.createElement)("div",{className:"yst-max-w-screen-sm"},(0,e.createElement)(i.Title,null,(0,O.__)("Support","wordpress-seo")),(0,e.createElement)("p",{className:"yst-text-tiny yst-mt-3"},(0,O.__)("If you have any questions, need a hand with a technical issue, or just want to say hi, we've got you covered. Get in touch with us and we'll be happy to assist you!","wordpress-seo")))),(0,e.createElement)(i.Paper.Content,null,(0,e.createElement)("div",{className:"yst-max-w-6xl"},(0,e.createElement)(we,{title:(0,O.__)("Frequently asked questions","wordpress-seo"),description:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO. */ +(0,O.__)("Here, you'll find answers to commonly asked questions about using %1$s. If you don't see your question listed, you can have a look at the section below.","wordpress-seo"),"Yoast SEO")},(0,e.createElement)("ul",null,g.map((({title:t,link:s},r)=>(0,e.createElement)(l.Fragment,{key:`faq-${r}`},r>0&&(0,e.createElement)("hr",{className:"yst-my-3"}),(0,e.createElement)("li",null,(0,e.createElement)(i.Link,{href:s,className:"yst-flex yst-items-center yst-font-medium yst-no-underline",target:"_blank"},t,(0,e.createElement)(q,{className:"yst-inline-block yst-ml-1.5 yst-h-3 yst-w-3 yst-icon-rtl"})))))))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(we,{title:(0,O.__)("Additional resources","wordpress-seo"),description:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO. */ +(0,O.__)("Need help with %1$s? These resources are a great place to start!","wordpress-seo"),"Yoast SEO")},(0,e.createElement)("div",{className:"yst-grid yst-gap-6 yst-grid-cols-3 max-sm:yst-grid-cols-1"},(0,e.createElement)(Ee,{imageSrc:`${a}/images/support/help_center.png`,title:(0,O.sprintf)(/* translators: %1$s expands to Yoast. */ +(0,O.__)("%1$s's help center","wordpress-seo"),"Yoast"),description:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO. */ +(0,O.__)("Have a look at our help center to find articles, tutorials, and other resources to help you get the most out of %1$s!","wordpress-seo"),"Yoast SEO"),linkHref:m,linkText:(0,O.__)("Visit our help center","wordpress-seo")}),(0,e.createElement)(Ee,{imageSrc:`${a}/images/support/support_forums.png`,title:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO. */ +(0,O.__)("WordPress support forum for %1$s","wordpress-seo"),"Yoast SEO"),description:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO. */ +(0,O.__)("In the WordPress support forum for %1$s you can find answers or ask for help from %1$s users in the WordPress community.","wordpress-seo"),"Yoast SEO"),linkHref:d,linkText:(0,O.__)("Visit WordPress forum","wordpress-seo")}),(0,e.createElement)(Ee,{imageSrc:`${a}/images/support/github.png`,title:(0,O.__)("Raise a bug report on GitHub","wordpress-seo"),description:(0,O.sprintf)(/* translators: %1$s expands to Yoast SEO. */ +(0,O.__)("Have you stumbled upon a bug while using %1$s? Please raise a bug report on our GitHub repository to let us know about the issue!","wordpress-seo"),"Yoast SEO"),linkHref:p,linkText:(0,O.__)("Write a bug report","wordpress-seo")}))),(0,e.createElement)("hr",{className:"yst-my-8"}),(0,e.createElement)(we,{title:(0,e.createElement)("div",{className:"yst-flex yst-items-center yst-gap-1.5"},(0,e.createElement)("span",null,(0,O.__)("Contact our support team","wordpress-seo")),t&&(0,e.createElement)(i.Badge,{variant:"upsell"},"Premium")),description:(0,e.createElement)(l.Fragment,null,(0,e.createElement)("span",null,(0,O.__)("If you don't find the answers you're looking for and need personalized help, you can get 24/7 support from one of our support engineers.","wordpress-seo")),(0,e.createElement)("span",{className:"yst-block yst-mt-4"},(0,l.createInterpolateElement)((0,O.sprintf)(/* translators: %1$s expands to an opening span tag, %2$s expands to a closing span tag. */ +(0,O.__)("%1$sSupport language:%2$s English","wordpress-seo"),"",""),{span:(0,e.createElement)("span",{className:"yst-font-medium yst-text-slate-800"})})))},(0,e.createElement)(i.FeatureUpsell,{shouldUpsell:!t,variant:"card",cardLink:u,cardText:(0,O.sprintf)(/* translators: %1$s expands to Premium. */ +(0,O.__)("Unlock with %1$s","wordpress-seo"),"Premium"),...r},(0,e.createElement)("div",{className:I()("yst-flex",!t&&"yst-opacity-50")},(0,e.createElement)("div",{className:"yst-mr-6"},(0,e.createElement)("p",null,(0,O.__)("Our support team is here to answer any questions you may have. Fill out the (pop-up) contact form, and we'll get back to you as soon as possible!","wordpress-seo")),(0,e.createElement)(i.Button,{variant:"secondary",className:"yst-mt-4",onClick:ve},(0,O.__)("Contact our support team","wordpress-seo"),(0,e.createElement)(q,{className:"yst-inline-block yst-ml-1.5 yst-h-3 yst-w-3 yst-icon-rtl"}))),(0,e.createElement)("img",{src:`${a}/images/support-team.svg`,alt:"",width:125,height:100,loading:"lazy",decoding:"async"}))))))),!t&&(0,e.createElement)(de,null,(0,e.createElement)(me,{link:c,linkProps:r,promotions:s}),(0,e.createElement)(j,{link:o}))))},xe="preferences",_e=(0,c.createSlice)({name:xe,initialState:{},reducers:{}}),ke=_e.getInitialState,Ne={selectPreference:(e,t,s={})=>(0,o.get)(e,`${xe}.${t}`,s),selectPreferences:e=>(0,o.get)(e,xe,{})};Ne.selectUpsellSettingsAsProps=(0,c.createSelector)([e=>Ne.selectPreference(e,"upsellSettings",{}),(e,t="premiumCtbId")=>t],((e,t)=>({"data-action":null==e?void 0:e.actionId,"data-ctb-id":null==e?void 0:e[t]})));const Se=_e.actions,Pe=_e.reducer;n()((()=>{const s=document.getElementById("yoast-seo-support");if(!s)return;(({initialState:e={}}={})=>{(0,r.register)((({initialState:e})=>(0,r.createReduxStore)(ge,{actions:{...h,...Se},selectors:{...w,...Ne},initialState:(0,o.merge)({},{[u]:f(),[xe]:ke()},e),reducer:(0,r.combineReducers)({[u]:E,[xe]:Pe})}))({initialState:e}))})({initialState:{[u]:(0,o.get)(window,"wpseoScriptData.linkParams",{}),[xe]:(0,o.get)(window,"wpseoScriptData.preferences",{})}}),(()=>{const e=document.getElementById("wpcontent"),t=document.getElementById("adminmenuwrap");e&&t&&(e.style.minHeight=`${t.offsetHeight}px`)})();const a=(0,r.select)(ge).selectPreference("isRtl",!1);(0,l.render)((0,e.createElement)(i.Root,{context:{isRtl:a}},(0,e.createElement)(t.SlotFillProvider,null,(0,e.createElement)(be,null))),s)}))})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/term-edit.js b/wp/wp-content/plugins/wordpress-seo/js/dist/term-edit.js new file mode 100644 index 00000000..4a75b43e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/term-edit.js @@ -0,0 +1,17 @@ +(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var n in s)e.o(s,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:s[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{DISMISS_ALERT:()=>A,SNIPPET_EDITOR_FIND_CUSTOM_FIELDS:()=>M,wistiaEmbedPermission:()=>N});const s=window.wp.domReady;var n=e.n(s);const i=window.jQuery;var a=e.n(i);const o=window.lodash,r=window.wp.i18n;const l=window.wp.data,c=window.yoast.externals.redux,d=window.yoast.reduxJsToolkit,p="adminUrl",u=(0,d.createSlice)({name:p,initialState:"",reducers:{setAdminUrl:(e,{payload:t})=>t}}),h=(u.getInitialState,{selectAdminUrl:e=>(0,o.get)(e,p,"")});h.selectAdminLink=(0,d.createSelector)([h.selectAdminUrl,(e,t)=>t],((e,t="")=>{try{return new URL(t,e).href}catch(t){return e}})),u.actions,u.reducer;const m=window.wp.url,g="linkParams",y=(0,d.createSlice)({name:g,initialState:{},reducers:{setLinkParams:(e,{payload:t})=>t}}),w=(y.getInitialState,{selectLinkParam:(e,t,s={})=>(0,o.get)(e,`${g}.${t}`,s),selectLinkParams:e=>(0,o.get)(e,g,{})});w.selectLink=(0,d.createSelector)([w.selectLinkParams,(e,t)=>t,(e,t,s={})=>s],((e,t,s)=>(0,m.addQueryArgs)(t,{...e,...s}))),y.actions,y.reducer;const f=(0,d.createSlice)({name:"notifications",initialState:{},reducers:{addNotification:{reducer:(e,{payload:t})=>{e[t.id]={id:t.id,variant:t.variant,size:t.size,title:t.title,description:t.description}},prepare:({id:e,variant:t="info",size:s="default",title:n,description:i})=>({payload:{id:e||(0,d.nanoid)(),variant:t,size:s,title:n||"",description:i}})},removeNotification:(e,{payload:t})=>(0,o.omit)(e,t)}}),b=(f.getInitialState,f.actions,f.reducer,"pluginUrl"),_=(0,d.createSlice)({name:b,initialState:"",reducers:{setPluginUrl:(e,{payload:t})=>t}}),E=(_.getInitialState,{selectPluginUrl:e=>(0,o.get)(e,b,"")});E.selectImageLink=(0,d.createSelector)([E.selectPluginUrl,(e,t,s="images")=>s,(e,t)=>t],((e,t,s)=>[(0,o.trimEnd)(e,"/"),(0,o.trim)(t,"/"),(0,o.trimStart)(s,"/")].join("/"))),_.actions,_.reducer;const v=window.wp.apiFetch;var S=e.n(v);const k="loading",x="showPlay",R="askPermission",O="isPlaying",P="wistiaEmbedPermission",T=(0,d.createSlice)({name:P,initialState:{value:!1,status:"idle",error:{}},reducers:{setWistiaEmbedPermissionValue:(e,{payload:t})=>{e.value=Boolean(t)}},extraReducers:e=>{e.addCase(`${P}/request`,(e=>{e.status=k})),e.addCase(`${P}/success`,((e,{payload:t})=>{e.status="success",e.value=Boolean(t&&t.value)})),e.addCase(`${P}/error`,((e,{payload:t})=>{e.status="error",e.value=Boolean(t&&t.value),e.error={code:(0,o.get)(t,"error.code",500),message:(0,o.get)(t,"error.message","Unknown")}}))}}),C=(T.getInitialState,T.actions,{[P]:async({payload:e})=>S()({path:"/yoast/v1/wistia_embed_permission",method:"POST",data:{value:Boolean(e)}})});function A({alertKey:e}){return new Promise((t=>wpseoApi.post("alerts/dismiss",{key:e},(()=>t()))))}function M({query:e,postId:t}){return new Promise((s=>{wpseoApi.get("meta/search",{query:e,post_id:t},(e=>{s(e.meta)}))}))}T.reducer;const N=C[P];const I=window.yoast.analysis,L=window.wp.isShallowEqual,D="yoastmark";function F(e,t){return e._properties.position.startOffset>t.length||e._properties.position.endOffset>t.length}function B(e,t,s){const n=e.dom;let i=e.getContent();if(i=I.markers.removeMarks(i),(0,o.isEmpty)(s))return void e.setContent(i);i=s[0].hasPosition()?function(e,t){if(!t)return"";for(let s=(e=(0,o.orderBy)(e,(e=>e._properties.position.startOffset),["asc"])).length-1;s>=0;s--){const n=e[s];F(n,t)||(t=n.applyWithPosition(t))}return t}(s,i):function(e,t,s,n){const{fieldsToMark:i,selectedHTML:a}=I.languageProcessing.getFieldsToMark(s,n);return(0,o.forEach)(s,(function(t){"acf_content"!==e.id&&(t._properties.marked=I.languageProcessing.normalizeHTML(t._properties.marked),t._properties.original=I.languageProcessing.normalizeHTML(t._properties.original)),i.length>0?a.forEach((e=>{const s=t.applyWithReplace(e);n=n.replace(e,s)})):n=t.applyWithReplace(n)})),n}(e,0,s,i),e.setContent(i),function(e){let t=e.getContent();t=t.replace(new RegExp("<yoastmark.+?>","g"),"").replace(new RegExp("</yoastmark>","g"),""),e.setContent(t)}(e);const a=n.select(D);(0,o.forEach)(a,(function(e){e.setAttribute("data-mce-bogus","1")}))}function U(e){return window.test=e,B.bind(null,e)}const j="et_pb_main_editor_wrap",Y=class{static isActive(){return!!document.getElementById(j)}static isTinyMCEHidden(){const e=document.getElementById(j);return!!e&&e.classList.contains("et_pb_hidden")}listen(e){this.classicEditorContainer=document.getElementById(j),this.classicEditorContainer&&new MutationObserver((t=>{(0,o.forEach)(t,(t=>{"attributes"===t.type&&"class"===t.attributeName&&(t.target.classList.contains("et_pb_hidden")?e.classicEditorHidden():e.classicEditorShown())}))})).observe(this.classicEditorContainer,{attributes:!0})}},q=class{static isActive(){return!!window.VCV_I18N}},K={classicEditorHidden:o.noop,classicEditorShown:o.noop,pageBuilderLoaded:o.noop},z=class{constructor(){this.determineActivePageBuilders()}determineActivePageBuilders(){Y.isActive()&&(this.diviActive=!0),q.isActive()&&(this.vcActive=!0)}isPageBuilderActive(){return this.diviActive||this.vcActive}listen(e){this.callbacks=(0,o.defaults)(e,K),this.diviActive&&(new Y).listen(e)}isClassicEditorHidden(){return!(!this.diviActive||!Y.isTinyMCEHidden())}};let $;const V="content",W="description";function Q(e){if("undefined"==typeof tinyMCE||void 0===tinyMCE.editors||0===tinyMCE.editors.length)return!1;const t=tinyMCE.get(e);return null!==t&&!t.isHidden()}function H(e,t,s){"undefined"!=typeof tinyMCE&&"function"==typeof tinyMCE.on&&tinyMCE.on("addEditor",(function(n){const i=n.editor;i.id===e&&(0,o.forEach)(t,(function(e){i.on(e,s)}))}))}function G(){(0,o.isUndefined)($)||$.dispatch(c.actions.setMarkerStatus("disabled"))}function Z(){(0,o.isUndefined)($)||$.dispatch(c.actions.setMarkerStatus("enabled"))}class J{constructor(e){this.refresh=e,this.loaded=!1,this.preloadThreshold=3e3,this.plugins={},this.modifications={},this._registerPlugin=this._registerPlugin.bind(this),this._ready=this._ready.bind(this),this._reloaded=this._reloaded.bind(this),this._registerModification=this._registerModification.bind(this),this._registerAssessment=this._registerAssessment.bind(this),this._applyModifications=this._applyModifications.bind(this),setTimeout(this._pollLoadingPlugins.bind(this),1500)}_registerPlugin(e,t){return(0,o.isString)(e)?(0,o.isUndefined)(t)||(0,o.isObject)(t)?!1===this._validateUniqueness(e)?(console.error("Failed to register plugin. Plugin with name "+e+" already exists"),!1):(this.plugins[e]=t,!0):(console.error("Failed to register plugin "+e+". Expected parameters `options` to be a object."),!1):(console.error("Failed to register plugin. Expected parameter `pluginName` to be a string."),!1)}_ready(e){return(0,o.isString)(e)?(0,o.isUndefined)(this.plugins[e])?(console.error("Failed to modify status for plugin "+e+". The plugin was not properly registered."),!1):(this.plugins[e].status="ready",!0):(console.error("Failed to modify status for plugin "+e+". Expected parameter `pluginName` to be a string."),!1)}_reloaded(e){return(0,o.isString)(e)?(0,o.isUndefined)(this.plugins[e])?(console.error("Failed to reload Content Analysis for plugin "+e+". The plugin was not properly registered."),!1):(this.refresh(),!0):(console.error("Failed to reload Content Analysis for "+e+". Expected parameter `pluginName` to be a string."),!1)}_registerModification(e,t,s,n){if(!(0,o.isString)(e))return console.error("Failed to register modification for plugin "+s+". Expected parameter `modification` to be a string."),!1;if(!(0,o.isFunction)(t))return console.error("Failed to register modification for plugin "+s+". Expected parameter `callable` to be a function."),!1;if(!(0,o.isString)(s))return console.error("Failed to register modification for plugin "+s+". Expected parameter `pluginName` to be a string."),!1;if(!1===this._validateOrigin(s))return console.error("Failed to register modification for plugin "+s+". The integration has not finished loading yet."),!1;const i={callable:t,origin:s,priority:(0,o.isNumber)(n)?n:10};return(0,o.isUndefined)(this.modifications[e])&&(this.modifications[e]=[]),this.modifications[e].push(i),!0}_registerAssessment(e,t,s,n){return(0,o.isString)(t)?(0,o.isObject)(s)?(0,o.isString)(n)?(t=n+"-"+t,e.addAssessment(t,s),!0):(console.error("Failed to register assessment for plugin "+n+". Expected parameter `pluginName` to be a string."),!1):(console.error("Failed to register assessment for plugin "+n+". Expected parameter `assessment` to be a function."),!1):(console.error("Failed to register test for plugin "+n+". Expected parameter `name` to be a string."),!1)}_applyModifications(e,t,s){let n=this.modifications[e];return!(0,o.isArray)(n)||n.length<1||(n=this._stripIllegalModifications(n),n.sort(((e,t)=>e.priority-t.priority)),(0,o.forEach)(n,(function(n){const i=n.callable(t,s);typeof i==typeof t?t=i:console.error("Modification with name "+e+" performed by plugin with name "+n.origin+" was ignored because the data that was returned by it was of a different type than the data we had passed it.")}))),t}_pollLoadingPlugins(e){e=(0,o.isUndefined)(e)?0:e,!0===this._allReady()?(this.loaded=!0,this.refresh()):e>=this.preloadThreshold?(this._pollTimeExceeded(),this.loaded=!0,this.refresh()):(e+=50,setTimeout(this._pollLoadingPlugins.bind(this,e),50))}_allReady(){return(0,o.reduce)(this.plugins,(function(e,t){return e&&"ready"===t.status}),!0)}_pollTimeExceeded(){(0,o.forEach)(this.plugins,(function(e,t){(0,o.isUndefined)(e.options)||"ready"===e.options.status||(console.error("Error: Plugin "+t+". did not finish loading in time."),delete this.plugins[t])}))}_stripIllegalModifications(e){return(0,o.forEach)(e,((t,s)=>{!1===this._validateOrigin(t.origin)&&delete e[s]})),e}_validateOrigin(e){return"ready"===this.plugins[e].status}_validateUniqueness(e){return(0,o.isUndefined)(this.plugins[e])}}function X(e,t,s){e("morphology",new I.Paper("",{keyword:s})).then((e=>{const s=e.result.keyphraseForms;t.dispatch(c.actions.updateWordsToHighlight((0,o.uniq)((0,o.flatten)(s))))})).catch((()=>{t.dispatch(c.actions.updateWordsToHighlight([]))}))}const ee=window.wp.api;function te(){return window.wpseoScriptData&&"1"===window.wpseoScriptData.isBlockEditor}var se={source:"wpseoScriptData.analysis.plugins.replaceVars",scope:[],aliases:[]},ne=function(e,t,s){this.placeholder=e,this.replacement=t,this.options=(0,o.defaults)(s,se)};ne.prototype.getPlaceholder=function(e){return(e=e||!1)&&this.hasAlias()?this.placeholder+"|"+this.getAliases().join("|"):this.placeholder},ne.prototype.setSource=function(e){this.options.source=e},ne.prototype.hasScope=function(){return!(0,o.isEmpty)(this.options.scope)},ne.prototype.addScope=function(e){this.hasScope()||(this.options.scope=[]),this.options.scope.push(e)},ne.prototype.inScope=function(e){return!this.hasScope()||(0,o.indexOf)(this.options.scope,e)>-1},ne.prototype.hasAlias=function(){return!(0,o.isEmpty)(this.options.aliases)},ne.prototype.addAlias=function(e){this.hasAlias()||(this.options.aliases=[]),this.options.aliases.push(e)},ne.prototype.getAliases=function(){return this.options.aliases};const ie=ne,{removeReplacementVariable:ae,updateReplacementVariable:oe,refreshSnippetEditor:re}=c.actions;var le=["content","title","snippet_title","snippet_meta","primary_category","data_page_title","data_meta_desc","excerpt"],ce={},de={},pe=function(e,t){this._app=e,this._app.registerPlugin("replaceVariablePlugin",{status:"ready"}),this._store=t,this.replaceVariables=this.replaceVariables.bind(this),this.registerReplacements(),this.registerModifications(),this.registerEvents(),this.subscribeToGutenberg()};pe.prototype.registerReplacements=function(){this.addReplacement(new ie("%%author_first_name%%","author_first_name")),this.addReplacement(new ie("%%author_last_name%%","author_last_name")),this.addReplacement(new ie("%%category%%","category")),this.addReplacement(new ie("%%category_title%%","category_title")),this.addReplacement(new ie("%%currentdate%%","currentdate")),this.addReplacement(new ie("%%currentday%%","currentday")),this.addReplacement(new ie("%%currentmonth%%","currentmonth")),this.addReplacement(new ie("%%currenttime%%","currenttime")),this.addReplacement(new ie("%%currentyear%%","currentyear")),this.addReplacement(new ie("%%date%%","date")),this.addReplacement(new ie("%%id%%","id")),this.addReplacement(new ie("%%page%%","page")),this.addReplacement(new ie("%%permalink%%","permalink")),this.addReplacement(new ie("%%post_content%%","post_content")),this.addReplacement(new ie("%%post_month%%","post_month")),this.addReplacement(new ie("%%post_year%%","post_year")),this.addReplacement(new ie("%%searchphrase%%","searchphrase")),this.addReplacement(new ie("%%sitedesc%%","sitedesc")),this.addReplacement(new ie("%%sitename%%","sitename")),this.addReplacement(new ie("%%userid%%","userid")),this.addReplacement(new ie("%%focuskw%%","keyword",{source:"app",aliases:["%%keyword%%"]})),this.addReplacement(new ie("%%term_description%%","text",{source:"app",scope:["term","category","tag"],aliases:["%%tag_description%%","%%category_description%%"]})),this.addReplacement(new ie("%%term_title%%","term_title",{scope:["term"]})),this.addReplacement(new ie("%%term_hierarchy%%","term_hierarchy",{scope:["term"]})),this.addReplacement(new ie("%%title%%","title",{source:"app",scope:["post","term","page"]})),this.addReplacement(new ie("%%parent_title%%","title",{source:"app",scope:["page","category"]})),this.addReplacement(new ie("%%excerpt%%","excerpt",{source:"app",scope:["post"],aliases:["%%excerpt_only%%"]})),this.addReplacement(new ie("%%primary_category%%","primaryCategory",{source:"app",scope:["post"]})),this.addReplacement(new ie("%%sep%%(\\s*%%sep%%)*","sep"))},pe.prototype.registerEvents=function(){const e=wpseoScriptData.analysis.plugins.replaceVars.scope;"post"===e&&jQuery(".categorydiv").each(this.bindTaxonomyEvents.bind(this)),"post"!==e&&"page"!==e||jQuery("#postcustomstuff > #list-table").each(this.bindFieldEvents.bind(this))},pe.prototype.subscribeToGutenberg=function(){if(!te())return;const e={0:""};let t=null;const s=wp.data;s.subscribe((()=>{const n=s.select("core/editor").getEditedPostAttribute("parent");if(void 0!==n&&t!==n)return t=n,n<1?(this._currentParentPageTitle="",void this.declareReloaded()):(0,o.isUndefined)(e[n])?void ee.loadPromise.done((()=>{new ee.models.Page({id:n}).fetch().then((t=>{this._currentParentPageTitle=t.title.rendered,e[n]=this._currentParentPageTitle,this.declareReloaded()})).fail((()=>{this._currentParentPageTitle="",this.declareReloaded()}))})):(this._currentParentPageTitle=e[n],void this.declareReloaded())}))},pe.prototype.addReplacement=function(e){ce[e.placeholder]=e},pe.prototype.removeReplacement=function(e){delete ce[e.getPlaceholder()]},pe.prototype.registerModifications=function(){var e=this.replaceVariables.bind(this);(0,o.forEach)(le,function(t){this._app.registerModification(t,e,"replaceVariablePlugin",10)}.bind(this))},pe.prototype.replaceVariables=function(e){return(0,o.isUndefined)(e)||(e=this.parentReplace(e),e=this.replaceCustomTaxonomy(e),e=this.replaceByStore(e),e=this.replacePlaceholders(e)),e},pe.prototype.replaceByStore=function(e){const t=this._store.getState().snippetEditor.replacementVariables;return(0,o.forEach)(t,(t=>{""!==t.value&&(e=e.replace("%%"+t.name+"%%",t.value))})),e},pe.prototype.getReplacementSource=function(e){return"app"===e.source?this._app.rawData:"direct"===e.source?"direct":wpseoScriptData.analysis.plugins.replaceVars.replace_vars},pe.prototype.getReplacement=function(e){var t=this.getReplacementSource(e.options);return!1===e.inScope(wpseoScriptData.analysis.plugins.replaceVars.scope)?"":"direct"===t?e.replacement:t[e.replacement]||""},pe.prototype.replacePlaceholders=function(e){return(0,o.forEach)(ce,function(t){e=e.replace(new RegExp(t.getPlaceholder(!0),"g"),this.getReplacement(t))}.bind(this)),e},pe.prototype.declareReloaded=function(){this._app.pluginReloaded("replaceVariablePlugin"),this._store.dispatch(re())},pe.prototype.getCategoryName=function(e){var t=e.parent("label").clone();return t.children().remove(),t.text().trim()},pe.prototype.parseTaxonomies=function(e,t){(0,o.isUndefined)(de[t])&&(de[t]={});const s=[];(0,o.forEach)(e,function(e){const n=(e=jQuery(e)).val(),i=this.getCategoryName(e),a=e.prop("checked");de[t][n]={label:i,checked:a},a&&-1===s.indexOf(i)&&s.push(i)}.bind(this)),"category"!==t&&(t="ct_"+t),this._store.dispatch(oe(t,s.join(", ")))},pe.prototype.getAvailableTaxonomies=function(e){var t=jQuery(e).find("input[type=checkbox]"),s=jQuery(e).attr("id").replace("taxonomy-","");t.length>0&&this.parseTaxonomies(t,s),this.declareReloaded()},pe.prototype.bindTaxonomyEvents=function(e,t){(t=jQuery(t)).on("wpListAddEnd",".categorychecklist",this.getAvailableTaxonomies.bind(this,t)),t.on("change","input[type=checkbox]",this.getAvailableTaxonomies.bind(this,t)),this.getAvailableTaxonomies(t)},pe.prototype.replaceCustomTaxonomy=function(e){return(0,o.forEach)(de,function(t,s){var n="%%ct_"+s+"%%";"category"===s&&(n="%%"+s+"%%"),e=e.replace(n,this.getTaxonomyReplaceVar(s))}.bind(this)),e},pe.prototype.getTaxonomyReplaceVar=function(e){var t=[],s=de[e];return!0===(0,o.isUndefined)(s)?"":((0,o.forEach)(s,(function(e){!1!==e.checked&&t.push(e.label)})),jQuery.uniqueSort(t).join(", "))},pe.prototype.parseFields=function(e){jQuery(e).each(function(e,t){var s=jQuery("#"+t.id+"-key").val(),n=jQuery("#"+t.id+"-value").val();const i="cf_"+this.sanitizeCustomFieldNames(s),a=s+" (custom field)";this._store.dispatch(oe(i,n,a)),this.addReplacement(new ie(`%%${i}%%`,n,{source:"direct"}))}.bind(this))},pe.prototype.removeFields=function(e){jQuery(e).each(function(e,t){var s=jQuery("#"+t.id+"-key").val();this.removeReplacement("%%cf_"+this.sanitizeCustomFieldNames(s)+"%%")}.bind(this))},pe.prototype.sanitizeCustomFieldNames=function(e){return e.replace(/\s/g,"_")},pe.prototype.getAvailableFields=function(e){this.removeCustomFields();var t=jQuery(e).find("#the-list > tr:visible[id]");t.length>0&&this.parseFields(t),this.declareReloaded()},pe.prototype.bindFieldEvents=function(e,t){var s=(t=jQuery(t)).find("#the-list");s.on("wpListDelEnd.wpseoCustomFields",this.getAvailableFields.bind(this,t)),s.on("wpListAddEnd.wpseoCustomFields",this.getAvailableFields.bind(this,t)),s.on("input.wpseoCustomFields",".textarea",this.getAvailableFields.bind(this,t)),s.on("click.wpseoCustomFields",".button + .updatemeta",this.getAvailableFields.bind(this,t)),this.getAvailableFields(t)},pe.prototype.removeCustomFields=function(){var e=(0,o.filter)(ce,(function(e,t){return t.indexOf("%%cf_")>-1}));(0,o.forEach)(e,function(e){this._store.dispatch(ae((0,o.trim)(e.placeholder,"%%"))),this.removeReplacement(e)}.bind(this))},pe.prototype.parentReplace=function(e){const t=jQuery("#parent_id, #parent").eq(0);return this.hasParentTitle(t)&&(e=e.replace(/%%parent_title%%/,this.getParentTitleReplacement(t))),te()&&!(0,o.isUndefined)(this._currentParentPageTitle)&&(e=e.replace(/%%parent_title%%/,this._currentParentPageTitle)),e},pe.prototype.hasParentTitle=function(e){return!(0,o.isUndefined)(e)&&!(0,o.isUndefined)(e.prop("options"))},pe.prototype.getParentTitleReplacement=function(e){var t=e.find("option:selected").text();return t===wpseoScriptData.analysis.plugins.replaceVars.no_parent_text?"":t},pe.ReplaceVar=ie;const ue=pe,he=window.wp.hooks,me="[^<>&/\\[\\]\0- =]+?",ge=new RegExp("\\["+me+"( [^\\]]+?)?\\]","g"),ye=new RegExp("\\[/"+me+"\\]","g");class we{constructor({registerPlugin:e,registerModification:t,pluginReady:s,pluginReloaded:n},i){this._registerModification=t,this._pluginReady=s,this._pluginReloaded=n,e("YoastShortcodePlugin",{status:"loading"}),this.bindElementEvents();const a="("+i.join("|")+")";this.shortcodesRegex=new RegExp(a,"g"),this.closingTagRegex=new RegExp("\\[\\/"+a+"\\]","g"),this.nonCaptureRegex=new RegExp("\\["+a+"[^\\]]*?\\]","g"),this.parsedShortcodes=[],this.loadShortcodes(this.declareReady.bind(this))}declareReady(){this._pluginReady("YoastShortcodePlugin"),this.registerModifications()}declareReloaded(){this._pluginReloaded("YoastShortcodePlugin")}registerModifications(){this._registerModification("content",this.replaceShortcodes.bind(this),"YoastShortcodePlugin")}removeUnknownShortCodes(e){return(e=e.replace(ge,"")).replace(ye,"")}replaceShortcodes(e){return"string"==typeof e&&this.parsedShortcodes.forEach((({shortcode:t,output:s})=>{e=e.replace(t,s)})),e=this.removeUnknownShortCodes(e)}loadShortcodes(e){const t=this.getUnparsedShortcodes(this.getShortcodes(this.getContentTinyMCE()));if(!(t.length>0))return e();this.parseShortcodes(t,e)}bindElementEvents(){const e=document.querySelector(".wp-editor-area"),t=(0,o.debounce)(this.loadShortcodes.bind(this,this.declareReloaded.bind(this)),500);e&&(e.addEventListener("keyup",t),e.addEventListener("change",t)),"undefined"!=typeof tinyMCE&&"function"==typeof tinyMCE.on&&tinyMCE.on("addEditor",(function(e){e.editor.on("change",t),e.editor.on("keyup",t)}))}getContentTinyMCE(){let e=document.querySelector(".wp-editor-area")?document.querySelector(".wp-editor-area").value:"";return"undefined"!=typeof tinyMCE&&void 0!==tinyMCE.editors&&0!==tinyMCE.editors.length&&(e=tinyMCE.get("content")?tinyMCE.get("content").getContent():""),e}getUnparsedShortcodes(e){return"object"!=typeof e?(console.error("Failed to get unparsed shortcodes. Expected parameter to be an array, instead received "+typeof e),!1):e.filter((e=>this.isUnparsedShortcode(e)))}isUnparsedShortcode(e){return!this.parsedShortcodes.some((({shortcode:t})=>t===e))}getShortcodes(e){if("string"!=typeof e)return console.error("Failed to get shortcodes. Expected parameter to be a string, instead received"+typeof e),!1;const t=this.matchCapturingShortcodes(e);t.forEach((t=>{e=e.replace(t,"")}));const s=this.matchNonCapturingShortcodes(e);return t.concat(s)}matchCapturingShortcodes(e){const t=(e.match(this.closingTagRegex)||[]).join(" ").match(this.shortcodesRegex)||[];return(0,o.flatten)(t.map((t=>{const s="\\["+t+"[^\\]]*?\\].*?\\[\\/"+t+"\\]";return e.match(new RegExp(s,"g"))||[]})))}matchNonCapturingShortcodes(e){return e.match(this.nonCaptureRegex)||[]}parseShortcodes(e,t){return"function"!=typeof t?(console.error("Failed to parse shortcodes. Expected parameter to be a function, instead received "+typeof t),!1):"object"==typeof e&&e.length>0?void jQuery.post(ajaxurl,{action:"wpseo_filter_shortcodes",_wpnonce:wpseoScriptData.analysis.plugins.shortcodes.wpseo_filter_shortcodes_nonce,data:e},function(e){this.saveParsedShortcodes(e,t)}.bind(this)):t()}saveParsedShortcodes(e,t){const s=JSON.parse(e);this.parsedShortcodes.push(...s),t()}}const fe=we,{updateShortcodesForParsing:be}=c.actions;function _e(e){var t=jQuery(".yst-traffic-light"),s=t.closest(".wpseo-meta-section-link"),n=jQuery("#wpseo-traffic-light-desc"),i=e.className||"na";t.attr("class","yst-traffic-light "+i),s.attr("aria-describedby","wpseo-traffic-light-desc"),n.length>0?n.text(e.screenReaderText):s.closest("li").append(""+e.screenReaderText+"")}function Ee(e){jQuery("#wp-admin-bar-wpseo-menu .wpseo-score-icon").attr("title",e.screenReaderText).attr("class","wpseo-score-icon "+e.className).find(".wpseo-score-text").text(e.screenReaderText)}function ve(){return(0,o.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1})}function Se(){const e=ve();return(0,o.get)(e,"contentLocale","en_US")}function ke(){const e=ve();return(0,o.get)(e,"translations",{domain:"wordpress-seo",locale_data:{"wordpress-seo":{"":{}}}})}function xe(){const e=ve();return!0===(0,o.get)(e,"contentAnalysisActive",!1)}function Re(){const e=ve();return!0===(0,o.get)(e,"keywordAnalysisActive",!1)}function Oe(){const e=ve();return!0===(0,o.get)(e,"inclusiveLanguageAnalysisActive",!1)}const Pe=window.yoast.featureFlag;function Te(){}let Ce=!1;function Ae(e){return e.sort(((e,t)=>e._identifier.localeCompare(t._identifier)))}function Me(e,t,s,n,i){if(!Ce)return;const a=I.Paper.parse(t());e.analyze(a).then((o=>{const{result:{seo:r,readability:l,inclusiveLanguage:d}}=o;if(r){const e=r[""];e.results.forEach((e=>{e.getMarker=()=>()=>s(a,e.marks)})),e.results=Ae(e.results),n.dispatch(c.actions.setSeoResultsForKeyword(a.getKeyword(),e.results)),n.dispatch(c.actions.setOverallSeoScore(e.score,a.getKeyword())),n.dispatch(c.actions.refreshSnippetEditor()),i.saveScores(e.score,a.getKeyword())}l&&(l.results.forEach((e=>{e.getMarker=()=>()=>s(a,e.marks)})),l.results=Ae(l.results),n.dispatch(c.actions.setReadabilityResults(l.results)),n.dispatch(c.actions.setOverallReadabilityScore(l.score)),n.dispatch(c.actions.refreshSnippetEditor()),i.saveContentScore(l.score)),d&&(d.results.forEach((e=>{e.getMarker=()=>()=>s(a,e.marks)})),d.results=Ae(d.results),n.dispatch(c.actions.setInclusiveLanguageResults(d.results)),n.dispatch(c.actions.setOverallInclusiveLanguageScore(d.score)),n.dispatch(c.actions.refreshSnippetEditor()),i.saveInclusiveLanguageScore(d.score)),(0,he.doAction)("yoast.analysis.refresh",o,{paper:a,worker:e,collectData:t,applyMarks:s,store:n,dataCollector:i})})).catch(Te)}const Ne=window.wp.blocks,Ie="yoast-measurement-element";function Le(e){let t=document.getElementById(Ie);return t||(t=function(){const e=document.createElement("div");return e.id=Ie,e.style.position="absolute",e.style.left="-9999em",e.style.top=0,e.style.height=0,e.style.overflow="hidden",e.style.fontFamily="arial, sans-serif",e.style.fontSize="20px",e.style.fontWeight="400",document.body.appendChild(e),e}()),t.innerText=e,t.offsetWidth}const De=e=>(e=e.filter((e=>e.isValid))).map((e=>{const t=(0,Ne.serialize)([e],{isInnerBlocks:!1});return e.blockLength=t&&t.length,e.innerBlocks&&(e.innerBlocks=De(e.innerBlocks)),e}));function Fe(e){return(0,o.isNil)(e)||(e/=10),function(e){switch(e){case"feedback":return{className:"na",screenReaderText:(0,r.__)("Feedback","wordpress-seo"),screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""};case"bad":return{className:"bad",screenReaderText:(0,r.__)("Needs improvement","wordpress-seo"),screenReaderReadabilityText:(0,r.__)("Needs improvement","wordpress-seo"),screenReaderInclusiveLanguageText:(0,r.__)("Needs improvement","wordpress-seo")};case"ok":return{className:"ok",screenReaderText:(0,r.__)("OK SEO score","wordpress-seo"),screenReaderReadabilityText:(0,r.__)("OK","wordpress-seo"),screenReaderInclusiveLanguageText:(0,r.__)("Potentially non-inclusive","wordpress-seo")};case"good":return{className:"good",screenReaderText:(0,r.__)("Good SEO score","wordpress-seo"),screenReaderReadabilityText:(0,r.__)("Good","wordpress-seo"),screenReaderInclusiveLanguageText:(0,r.__)("Good","wordpress-seo")};default:return{className:"loading",screenReaderText:"",screenReaderReadabilityText:"",screenReaderInclusiveLanguageText:""}}}(I.interpreters.scoreToRating(e))}const Be=jQuery,Ue=function(e){"object"==typeof CKEDITOR&&console.warn("YoastSEO currently doesn't support ckEditor. The content analysis currently only works with the HTML editor or TinyMCE."),this._store=e.store};Ue.prototype.getData=function(){const e={title:this.getSnippetTitle(),keyword:Re()?this.getKeyword():"",text:this.getText(),permalink:this.getPermalink(),snippetCite:this.getSnippetCite(),snippetTitle:this.getSnippetTitle(),snippetMeta:this.getSnippetMeta(),name:this.getName(),baseUrl:this.getBaseUrl(),pageTitle:this.getSnippetTitle(),titleWidth:Le(this.getSnippetTitle())},t=this._store.getState();return{...e,metaTitle:(0,o.get)(t,["analysisData","snippet","title"],this.getSnippetTitle()),url:(0,o.get)(t,["snippetEditor","data","slug"],this.getSlug()),meta:(0,o.get)(t,["analysisData","snippet","description"],this.getSnippetMeta())}},Ue.prototype.getKeyword=function(){return document.getElementById("hidden_wpseo_focuskw").value},Ue.prototype.getText=function(){return function(e){let t="";var s;return t=!1===Q(e)||0==(s=e,null!==document.getElementById(s+"_ifr"))?function(e){return document.getElementById(e)&&document.getElementById(e).value||""}(e):tinyMCE.get(e).getContent(),t}(W)},Ue.prototype.getSlug=function(){return document.getElementById("slug").value},Ue.prototype.getPermalink=function(){const e=this.getSlug();return this.getBaseUrl()+e+"/"},Ue.prototype.getSnippetCite=function(){return this.getSlug()},Ue.prototype.getSnippetTitle=function(){return document.getElementById("hidden_wpseo_title").value},Ue.prototype.getSnippetMeta=function(){const e=document.getElementById("hidden_wpseo_desc");return e?e.value:""},Ue.prototype.getName=function(){return document.getElementById("name").value},Ue.prototype.getBaseUrl=function(){return wpseoScriptData.metabox.base_url},Ue.prototype.setDataFromSnippet=function(e,t){switch(t){case"snippet_meta":document.getElementById("hidden_wpseo_desc").value=e;break;case"snippet_cite":document.getElementById("slug").value=e;break;case"snippet_title":document.getElementById("hidden_wpseo_title").value=e}},Ue.prototype.saveSnippetData=function(e){this.setDataFromSnippet(e.title,"snippet_title"),this.setDataFromSnippet(e.urlPath,"snippet_cite"),this.setDataFromSnippet(e.metaDesc,"snippet_meta")},Ue.prototype.bindElementEvents=function(e){this.inputElementEventBinder(e)},Ue.prototype.inputElementEventBinder=function(e){const t=["name",W,"slug","wpseo_focuskw"];for(let s=0;s{e=(0,o.merge)(e,t())})),e}}window.wp.annotations;const qe=function(e){return(0,o.uniq)((0,o.flatten)(e.map((e=>{if(!(0,o.isUndefined)(e.getFieldsToMark()))return e.getFieldsToMark()}))))},Ke=window.wp.richText,ze=/(<([a-z]|\/)[^<>]+>)/gi,{htmlEntitiesRegex:$e}=I.helpers.htmlEntities,Ve=e=>{let t=0;return(0,o.forEachRight)(e,(e=>{const[s]=e;let n=s.length;/^<\/?br/.test(s)&&(n-=1),t+=n})),t},We="",Qe="",He='';function Ge(e,t,s,n,i){const a=n.clientId,r=(0,Ke.create)({html:e,multilineTag:s.multilineTag,multilineWrapperTag:s.multilineWrapperTag}).text;return(0,o.flatMap)(i,(s=>{let i;return i=s.hasBlockPosition&&s.hasBlockPosition()?function(e,t,s,n,i){if(t===e.getBlockClientId()){let t=e.getBlockPositionStart(),a=e.getBlockPositionEnd();if(e.isMarkForFirstBlockSection()){const e=((e,t,s)=>{const n="yoast/faq-block"===s?'':'';return{blockStartOffset:e-=n.length,blockEndOffset:t-=n.length}})(t,a,s);t=e.blockStartOffset,a=e.blockEndOffset}if(n.slice(t,a)===i.slice(t,a))return[{startOffset:t,endOffset:a}];const r=((e,t,s)=>{const n=s.slice(0,e),i=s.slice(0,t),a=((e,t,s,n)=>{const i=[...e.matchAll(ze)];s-=Ve(i);const a=[...t.matchAll(ze)];return{blockStartOffset:s,blockEndOffset:n-=Ve(a)}})(n,i,e,t),r=((e,t,s,n)=>{let i=[...e.matchAll($e)];return(0,o.forEachRight)(i,(e=>{const[,t]=e;s-=t.length})),i=[...t.matchAll($e)],(0,o.forEachRight)(i,(e=>{const[,t]=e;n-=t.length})),{blockStartOffset:s,blockEndOffset:n}})(n,i,e=a.blockStartOffset,t=a.blockEndOffset);return{blockStartOffset:e=r.blockStartOffset,blockEndOffset:t=r.blockEndOffset}})(t,a,n);return[{startOffset:r.blockStartOffset,endOffset:r.blockEndOffset}]}return[]}(s,a,n.name,e,r):function(e,t){const s=t.getOriginal().replace(/(<([^>]+)>)/gi,""),n=t.getMarked().replace(/(<(?!\/?yoastmark)[^>]+>)/gi,""),i=function(e,t,s=!0){const n=[];if(0===e.length)return n;let i,a=0;for(s||(t=t.toLowerCase(),e=e.toLowerCase());(i=e.indexOf(t,a))>-1;)n.push(i),a=i+t.length;return n}(e,s);if(0===i.length)return[];const a=function(e){let t=e.indexOf(We);const s=t>=0;s||(t=e.indexOf(He));let n=null;const i=[];for(;t>=0;){if(n=(e=s?e.replace(We,""):e.replace(He,"")).indexOf(Qe),n{i.forEach((n=>{const i=n+e.startOffset;let a=n+e.endOffset;0===e.startOffset&&e.endOffset===t.getOriginal().length&&(a=n+s.length),o.push({startOffset:i,endOffset:a})}))})),o}(r,s),i?i.map((e=>({...e,block:a,richTextIdentifier:t}))):[]}))}const Ze=e=>e[0].toUpperCase()+e.slice(1),Je=(e,t,s,n,i)=>(e=e.map((e=>{const a=`${e.id}-${i[0]}`,o=`${e.id}-${i[1]}`,r=Ze(i[0]),l=Ze(i[1]),c=e[`json${r}`],d=e[`json${l}`],{marksForFirstSection:p,marksForSecondSection:u}=((e,t)=>({marksForFirstSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&e.isMarkForFirstBlockSection():e)),marksForSecondSection:e.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?e.getBlockAttributeId()===t.id&&!e.isMarkForFirstBlockSection():e))}))(t,e),h=Ge(c,a,s,n,p),m=Ge(d,o,s,n,u);return h.concat(m)})),(0,o.flattenDeep)(e)),Xe="yoast";let et=[];const tt={"core/paragraph":[{key:"content"}],"core/list":[{key:"values",multilineTag:"li",multilineWrapperTag:["ul","ol"]}],"core/list-item":[{key:"content"}],"core/heading":[{key:"content"}],"core/audio":[{key:"caption"}],"core/embed":[{key:"caption"}],"core/gallery":[{key:"caption"}],"core/image":[{key:"caption"}],"core/table":[{key:"caption"}],"core/video":[{key:"caption"}],"yoast/faq-block":[{key:"questions"}],"yoast/how-to-block":[{key:"steps"},{key:"jsonDescription"}]};function st(){const e=et.shift();e&&((0,l.dispatch)("core/annotations").__experimentalAddAnnotation(e),nt())}function nt(){(0,o.isFunction)(window.requestIdleCallback)?window.requestIdleCallback(st,{timeout:1e3}):setTimeout(st,150)}const it=(e,t)=>{return(0,o.flatMap)((s=e.name,tt.hasOwnProperty(s)?tt[s]:[]),(s=>"yoast/faq-block"===e.name?((e,t,s)=>{const n=t.attributes[e.key];return 0===n.length?[]:Je(n,s,e,t,["question","answer"])})(s,e,t):"yoast/how-to-block"===e.name?((e,t,s)=>{const n=t.attributes[e.key];if(n&&0===n.length)return[];const i=[];return"steps"===e.key&&i.push(Je(n,s,e,t,["name","text"])),"jsonDescription"===e.key&&(s=s.filter((e=>e.hasBlockPosition&&e.hasBlockPosition()?!e.getBlockAttributeId():e)),i.push(Ge(n,"description",e,t,s))),(0,o.flattenDeep)(i)})(s,e,t):function(e,t,s){const n=e.key,i=((e,t)=>{const s=e.attributes[t];return"string"==typeof s?s:s.toString()})(t,n);return Ge(i,n,e,t,s)}(s,e,t)));var s};function at(e,t){return(0,o.flatMap)(e,(e=>{const s=function(e){return e.innerBlocks.length>0}(e)?at(e.innerBlocks,t):[];return it(e,t).concat(s)}))}function ot(e){et=[],(0,l.dispatch)("core/annotations").__experimentalRemoveAnnotationsBySource(Xe);const t=qe(e);if(0===e.length)return;let s=(0,l.select)("core/block-editor").getBlocks();var n;t.length>0&&(s=s.filter((e=>t.some((t=>"core/"+t===e.name))))),n=at(s,e),et=n.map((e=>({blockClientId:e.block,source:Xe,richTextIdentifier:e.richTextIdentifier,range:{start:e.startOffset,end:e.endOffset}}))),nt()}function rt(e,t){let s;Q(V)&&((0,o.isUndefined)(s)&&(s=U(tinyMCE.get(V))),s(e,t)),(0,l.select)("core/block-editor")&&(0,o.isFunction)((0,l.select)("core/block-editor").getBlocks)&&(0,l.select)("core/annotations")&&(0,o.isFunction)((0,l.dispatch)("core/annotations").__experimentalAddAnnotation)&&(function(e,t){tinyMCE.editors.map((e=>U(e))).forEach((s=>s(e,t)))}(e,t),ot(t)),(0,he.doAction)("yoast.analysis.applyMarks",t)}var lt=jQuery;function ct(e,t,s,n,i){this._scriptUrl=n,this._options={usedKeywords:t.keyword_usage,usedKeywordsPostTypes:t.keyword_usage_post_types,searchUrl:t.search_url,postUrl:t.post_edit_url},this._keywordUsage=t.keyword_usage,this._usedKeywordsPostTypes=t.keyword_usage_post_types,this._postID=lt("#post_ID, [name=tag_ID]").val(),this._taxonomy=lt("[name=taxonomy]").val()||"",this._nonce=i,this._ajaxAction=e,this._refreshAnalysis=s,this._initialized=!1}ct.prototype.init=function(){const{worker:e}=window.YoastSEO.analysis;this.requestKeywordUsage=(0,o.debounce)(this.requestKeywordUsage.bind(this),500),e.loadScript(this._scriptUrl).then((()=>{e.sendMessage("initialize",this._options,"used-keywords-assessment")})).then((()=>{this._initialized=!0,(0,o.isEqual)(this._options.usedKeywords,this._keywordUsage)?this._refreshAnalysis():e.sendMessage("updateKeywordUsage",this._keywordUsage,"used-keywords-assessment").then((()=>this._refreshAnalysis()))})).catch((e=>console.error(e)))},ct.prototype.setKeyword=function(e){(0,o.has)(this._keywordUsage,e)||this.requestKeywordUsage(e)},ct.prototype.requestKeywordUsage=function(e){lt.post(ajaxurl,{action:this._ajaxAction,post_id:this._postID,keyword:e,taxonomy:this._taxonomy,nonce:this._nonce},this.updateKeywordUsage.bind(this,e),"json")},ct.prototype.updateKeywordUsage=function(e,t){const{worker:s}=window.YoastSEO.analysis,n=t.keyword_usage,i=t.post_types;n&&(0,o.isArray)(n)&&(this._keywordUsage[e]=n,this._usedKeywordsPostTypes[e]=i,this._initialized&&s.sendMessage("updateKeywordUsage",{usedKeywords:this._keywordUsage,usedKeywordsPostTypes:this._usedKeywordsPostTypes},"used-keywords-assessment").then((()=>this._refreshAnalysis())))};const{refreshSnippetEditor:dt,updateData:pt,setFocusKeyword:ut,setCornerstoneContent:ht,setMarkerStatus:mt,setReadabilityResults:gt,setSeoResultsForKeyword:yt}=c.actions;function wt(e,t,s){var n,i;const a=new Ye;function r(){const e={slug:i.val()};window.YoastSEO.store.dispatch(pt(e))}function c(e){(0,o.isUndefined)(e.seoAssessorPresenter)||(e.seoAssessorPresenter.render=function(){}),(0,o.isUndefined)(e.contentAssessorPresenter)||(e.contentAssessorPresenter.render=function(){},e.contentAssessorPresenter.renderIndividualRatings=function(){})}let d;function p(e,t){const s=d||"";d=e.getState().analysisData.snippet,!(0,L.isShallowEqualObjects)(s,d)&&t()}!function(){var d,u,h,m,g,y,w,f,b,_;m=jQuery(".term-description-wrap").find("td"),g=jQuery(".term-description-wrap").find("label"),y=m.find("textarea").val(),w=document.getElementById("wp-description-wrap"),f=m.find("p"),m.html(""),m.append(w).append(f),document.getElementById("description").value=y,g.replaceWith(g.html()),u=new je({store:t}),d={elementTarget:[W,"yoast_wpseo_focuskw","yoast_wpseo_metadesc","excerpt","editable-post-name","editable-post-name-full"],targets:(b={},Re()&&(b.output="does-not-really-exist-but-it-needs-something"),xe()&&(b.contentOutput="also-does-not-really-exist-but-it-needs-something"),b),callbacks:{getData:u.getData.bind(u)},locale:wpseoScriptData.metabox.contentLocale,contentAnalysisActive:xe(),keywordAnalysisActive:Re(),debouncedRefresh:!1,researcher:new window.yoast.Researcher.default},Re()&&(t.dispatch(ut(u.getKeyword())),d.callbacks.saveScores=u.saveScores.bind(u),d.callbacks.updatedKeywordsResults=function(e){const s=t.getState().focusKeyword;t.dispatch(yt(s,e)),t.dispatch(dt())}),xe()&&(t.dispatch(mt("hidden")),d.callbacks.saveContentScore=u.saveContentScore.bind(u),d.callbacks.updatedContentResults=function(e){t.dispatch(gt(e)),t.dispatch(dt())}),h=ke(),(0,o.isUndefined)(h)||(0,o.isUndefined)(h.domain)||(d.translations=h),n=new I.App(d),window.YoastSEO=window.YoastSEO||{},window.YoastSEO.app=n,window.YoastSEO.store=t,window.YoastSEO.analysis={},window.YoastSEO.analysis.worker=function(){const e=(0,o.get)(window,["wpseoScriptData","analysis","worker","url"],"analysis-worker.js"),t=(0,I.createWorker)(e),s=(0,o.get)(window,["wpseoScriptData","analysis","worker","dependencies"],[]),n=[];for(const e in s){if(!Object.prototype.hasOwnProperty.call(s,e))continue;const t=window.document.getElementById(`${e}-js-translations`);if(!t)continue;const i=t.innerHTML.slice(214),a=i.indexOf(","),o=i.slice(0,a-1);try{const e=JSON.parse(i.slice(a+1,-4));n.push([o,e])}catch(t){console.warn(`Failed to parse translation data for ${e} to send to the Yoast SEO worker`);continue}}return t.postMessage({dependencies:s,translations:n}),new I.AnalysisWorkerWrapper(t)}(),window.YoastSEO.analysis.collectData=()=>function(e,t,s,n,i){const a=(0,o.cloneDeep)(t.getState());(0,o.merge)(a,s.getData());const r=e.getData();let l=null;i&&(l=i.getBlocks()||[],l=De(l));const c={text:r.content,textTitle:r.title,keyword:a.focusKeyword,synonyms:a.synonyms,description:a.analysisData.snippet.description||a.snippetEditor.data.description,title:a.analysisData.snippet.title||a.snippetEditor.data.title,slug:a.snippetEditor.data.slug,permalink:a.settings.snippetEditor.baseUrl+a.snippetEditor.data.slug,wpBlocks:l,date:a.settings.snippetEditor.date};n.loaded&&(c.title=n._applyModifications("data_page_title",c.title),c.title=n._applyModifications("title",c.title),c.description=n._applyModifications("data_meta_desc",c.description),c.text=n._applyModifications("content",c.text),c.wpBlocks=n._applyModifications("wpBlocks",c.wpBlocks));const d=a.analysisData.snippet.filteredSEOTitle;return c.titleWidth=Le(d||a.snippetEditor.data.title),c.locale=Se(),c.writingDirection=function(){let e="LTR";return ve().isRtl&&(e="RTL"),e}(),c.shortcodes=window.wpseoScriptData.analysis.plugins.shortcodes?window.wpseoScriptData.analysis.plugins.shortcodes.wpseo_shortcode_tags:[],I.Paper.parse((0,he.applyFilters)("yoast.analysis.data",c))}(s,window.YoastSEO.store,a,window.YoastSEO.app.pluggable),window.YoastSEO.analysis.applyMarks=(e,t)=>function(){const e=(0,l.select)("yoast-seo/editor").isMarkingAvailable(),t=(0,l.select)("yoast-seo/editor").getMarkerPauseStatus();return!e||t?o.noop:rt}()(e,t),window.YoastSEO.app.refresh=(0,o.debounce)((()=>Me(window.YoastSEO.analysis.worker,window.YoastSEO.analysis.collectData,window.YoastSEO.analysis.applyMarks,window.YoastSEO.store,u)),500),window.YoastSEO.app.registerCustomDataCallback=a.register,window.YoastSEO.app.pluggable=new J(window.YoastSEO.app.refresh),window.YoastSEO.app.registerPlugin=window.YoastSEO.app.pluggable._registerPlugin,window.YoastSEO.app.pluginReady=window.YoastSEO.app.pluggable._ready,window.YoastSEO.app.pluginReloaded=window.YoastSEO.app.pluggable._reloaded,window.YoastSEO.app.registerModification=window.YoastSEO.app.pluggable._registerModification,window.YoastSEO.app.registerAssessment=(e,t,s)=>{if(!(0,o.isUndefined)(n.seoAssessor))return window.YoastSEO.app.pluggable._registerAssessment(n.defaultSeoAssessor,e,t,s)&&window.YoastSEO.app.pluggable._registerAssessment(n.cornerStoneSeoAssessor,e,t,s)},window.YoastSEO.app.changeAssessorOptions=function(e){window.YoastSEO.analysis.worker.initialize(e).catch(Te),window.YoastSEO.app.refresh()},function(e,t,s){const n=ve();if(!n.previouslyUsedKeywordActive)return;const i=new ct("get_term_keyword_usage",n,e,(0,o.get)(window,["wpseoScriptData","analysis","worker","keywords_assessment_url"],"used-keywords-assessment.js"),(0,o.get)(window,["wpseoScriptData","usedKeywordsNonce"],""));i.init();let a={};s.subscribe((()=>{const e=s.getState()||{};e.focusKeyword!==a.focusKeyword&&(a=e,i.setKeyword(e.focusKeyword))}))}(n.refresh,0,t),t.subscribe(p.bind(null,t,n.refresh)),Re()&&(n.seoAssessor=new I.TaxonomyAssessor(n.config.researcher),n.seoAssessorPresenter.assessor=n.seoAssessor),window.YoastSEO.wp={},window.YoastSEO.wp.replaceVarsPlugin=new ue(n,t),function(e,t){let s=[];s=(0,he.applyFilters)("yoast.analysis.shortcodes",s);const n=wpseoScriptData.analysis.plugins.shortcodes.wpseo_shortcode_tags;s=s.filter((e=>n.includes(e))),s.length>0&&(t.dispatch(be(s)),window.YoastSEO.wp.shortcodePlugin=new we({registerPlugin:e.registerPlugin,registerModification:e.registerModification,pluginReady:e.pluginReady,pluginReloaded:e.pluginReloaded},s))}(n,t),window.YoastSEO.analyzerArgs=d,(i=e("#slug")).on("change",r),u.bindElementEvents((0,o.debounce)((()=>Me(window.YoastSEO.analysis.worker,window.YoastSEO.analysis.collectData,window.YoastSEO.analysis.applyMarks,window.YoastSEO.store,u)),500)),Re()&&(_e(_=Fe(e("#hidden_wpseo_linkdex").val())),Ee(_)),xe()&&function(){var t=Fe(e("#hidden_wpseo_content_score").val());_e(t),Ee(t)}(),Oe()&&function(){const t=Fe(e("#hidden_wpseo_inclusive_language_score").val());_e(t),Ee(t)}(),window.YoastSEO.analysis.worker.initialize(function(e={}){let t={locale:Se(),contentAnalysisActive:xe(),keywordAnalysisActive:Re(),inclusiveLanguageAnalysisActive:Oe(),defaultQueryParams:(0,o.get)(window,["wpseoAdminL10n","default_query_params"],{}),logLevel:(0,o.get)(window,["wpseoScriptData","analysis","worker","log_level"],"ERROR"),enabledFeatures:(0,Pe.enabledFeatures)()};t=(0,o.merge)(t,e);const s=ke();return(0,o.isUndefined)(s)||(0,o.isUndefined)(s.domain)||(t.translations=s),t}({useTaxonomy:!0})).then((()=>{jQuery(window).trigger("YoastSEO:ready")})).catch(Te),c(n);const E=n.initAssessorPresenters.bind(n);n.initAssessorPresenters=function(){E(),c(n)};let v={title:(S=u).getSnippetTitle(),slug:S.getSnippetCite(),description:S.getSnippetMeta()};var S;!function(e){const s=document.getElementById("hidden_wpseo_is_cornerstone");let n="1"===s.value;t.dispatch(ht(n)),e.changeAssessorOptions({useCornerstone:n}),t.subscribe((()=>{const i=t.getState();i.isCornerstone!==n&&(n=i.isCornerstone,s.value=n?"1":"0",e.changeAssessorOptions({useCornerstone:n}))}))}(n);const k=function(e){const t={};if((0,o.isUndefined)(e))return t;t.title=e.title_template;const s=e.metadesc_template;return(0,o.isEmpty)(s)||(t.description=s),t}(wpseoScriptData.metabox);v=function(e,t){const s={...e};return(0,o.forEach)(t,((t,n)=>{(0,o.has)(e,n)&&""===e[n]&&(s[n]=t)})),s}(v,k),t.dispatch(pt(v));let x=t.getState().focusKeyword;X(window.YoastSEO.analysis.worker.runResearch,window.YoastSEO.store,x);const R=(0,o.debounce)((()=>{n.refresh()}),50);t.subscribe((()=>{const e=t.getState().focusKeyword;x!==e&&(x=e,X(window.YoastSEO.analysis.worker.runResearch,window.YoastSEO.store,x),document.getElementById("hidden_wpseo_focuskw").value=x,R());const s=function(e){const t=e.getState().snippetEditor.data;return{title:t.title,slug:t.slug,description:t.description}}(t),n=function(e,t){const s={...e};return(0,o.forEach)(t,((t,n)=>{(0,o.has)(e,n)&&e[n].trim()===t&&(s[n]="")})),s}(s,k);v.title!==s.title&&u.setDataFromSnippet(n.title,"snippet_title"),v.slug!==s.slug&&u.setDataFromSnippet(n.slug,"snippet_cite"),v.description!==s.description&&u.setDataFromSnippet(n.description,"snippet_meta"),v.title=s.title,v.slug=s.slug,v.description=s.description})),Ce=!0,window.YoastSEO.app.refresh()}()}window.yoastHideMarkers=!0,window.YoastReplaceVarPlugin=ue,window.YoastShortcodePlugin=fe;let ft=null;const bt=()=>{if(null===ft){const e=(0,l.dispatch)("yoast-seo/editor").runAnalysis;ft=window.YoastSEO.app&&window.YoastSEO.app.pluggable?window.YoastSEO.app.pluggable:new J(e)}return ft},_t=(e,t,s)=>bt().loaded?bt()._applyModifications(e,t,s):t;function Et(){const{getAnalysisData:e,getEditorDataTitle:t}=(0,l.select)("yoast-seo/editor");let s=e();s={...s,textTitle:t()};const n=function(e){return e.title=_t("data_page_title",e.title),e.title=_t("title",e.title),e.description=_t("data_meta_desc",e.description),e.text=_t("content",e.text),e}(s);return(0,he.applyFilters)("yoast.analysis.data",n)}(0,o.debounce)((async function(e,t){const{text:s,...n}=t,i=new I.Paper(s,n);try{const t=await e.analyze(i),{seo:s,readability:n,inclusiveLanguage:a}=t.result;if(s){const e=s[""];e.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(i,e.marks)})),e.results=Ae(e.results),(0,l.dispatch)("yoast-seo/editor").setSeoResultsForKeyword(i.getKeyword(),e.results),(0,l.dispatch)("yoast-seo/editor").setOverallSeoScore(e.score,i.getKeyword())}n&&(n.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(i,e.marks)})),n.results=Ae(n.results),(0,l.dispatch)("yoast-seo/editor").setReadabilityResults(n.results),(0,l.dispatch)("yoast-seo/editor").setOverallReadabilityScore(n.score)),a&&(a.results.forEach((e=>{e.getMarker=()=>()=>window.YoastSEO.analysis.applyMarks(i,e.marks)})),a.results=Ae(a.results),(0,l.dispatch)("yoast-seo/editor").setInclusiveLanguageResults(a.results),(0,l.dispatch)("yoast-seo/editor").setOverallInclusiveLanguageScore(a.score)),(0,he.doAction)("yoast.analysis.run",t,{paper:i})}catch(e){}}),500);const vt=()=>{const{getContentLocale:e}=(0,l.select)("yoast-seo/editor"),t=((...e)=>()=>e.map((e=>e())))(e,Et),s=(()=>{const{setEstimatedReadingTime:e,setFleschReadingEase:t,setTextLength:s}=(0,l.dispatch)("yoast-seo/editor"),n=(0,o.get)(window,"YoastSEO.analysis.worker.runResearch",o.noop);return()=>{const i=I.Paper.parse(Et());n("readingTime",i).then((t=>e(t.result))),n("getFleschReadingScore",i).then((e=>{e.result&&t(e.result)})),n("wordCountInText",i).then((e=>s(e.result)))}})();return setTimeout(s,1500),((e,t)=>{let s=e();return()=>{const n=e();(0,o.isEqual)(n,s)||(s=n,t((0,o.clone)(n)))}})(t,s)},St=window.React,kt=window.wp.components,xt=window.wp.element,Rt=window.yoast.uiLibrary,Ot=window.yoast.propTypes;var Pt=e.n(Ot);Pt().string.isRequired;const Tt=St.forwardRef((function(e,t){return St.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),St.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"}))})),Ct=St.forwardRef((function(e,t){return St.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",ref:t},e),St.createElement("path",{fillRule:"evenodd",d:"M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z",clipRule:"evenodd"}))})),At=({learnMoreLink:e,thumbnail:t,wistiaEmbedPermission:s,upsellLink:n,isProductCopy:i,title:a,upsellLabel:o,newToText:l,bundleNote:c})=>{const{onClose:d,initialFocus:p}=(0,Rt.useModalContext)(),u={a:(0,St.createElement)(Lt,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,St.createElement)(Ct,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"})};return(0,St.createElement)(St.Fragment,null,(0,St.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,St.createElement)("div",{className:"yst-relative yst-w-full"},(0,St.createElement)(ns,{videoId:"vmrahpfjxp",thumbnail:t,wistiaEmbedPermission:s}),(0,St.createElement)(Rt.Badge,{className:"yst-absolute yst-top-0 yst-right-2 yst-mt-2 yst-ml-2",variant:"info"},"Beta")),(0,St.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,St.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,St.createElement)("span",{className:"yst-logo-icon"}),l))),(0,St.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,St.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,St.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},a),(0,St.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},i?(0,xt.createInterpolateElement)((0,r.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,r.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for product titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),u):(0,xt.createInterpolateElement)((0,r.sprintf)(/* translators: %1$s and %2$s are anchor tags; %3$s is the arrow icon. */ +(0,r.__)("Let AI do some of the thinking for you and help you save time. Get high-quality suggestions for titles and meta descriptions to make your content rank high and look good on social media. %1$sLearn more%2$s%3$s","wordpress-seo"),"","",""),u))),(0,St.createElement)("div",{className:"yst-w-full yst-flex yst-mt-10"},(0,St.createElement)(Rt.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:n,target:"_blank",ref:p},(0,St.createElement)(Tt,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),o,(0,St.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,r.__)("(Opens in a new browser tab)","wordpress-seo")))),c,(0,St.createElement)(Rt.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:d},(0,r.__)("Close","wordpress-seo"))))};At.propTypes={learnMoreLink:Pt().string.isRequired,upsellLink:Pt().string.isRequired,thumbnail:Pt().shape({src:Pt().string.isRequired,width:Pt().string,height:Pt().string}).isRequired,wistiaEmbedPermission:Pt().shape({value:Pt().bool.isRequired,status:Pt().string.isRequired,set:Pt().func.isRequired}).isRequired,title:Pt().string,upsellLabel:Pt().string,newToText:Pt().string,isProductCopy:Pt().bool,bundleNote:Pt().oneOfType([Pt().string,Pt().element])},At.defaultProps={title:(0,r.__)("Use AI to write your titles & meta descriptions!","wordpress-seo"),upsellLabel:(0,r.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,r.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium"),newToText:"Yoast SEO Premium",isProductCopy:!1,bundleNote:""};var Mt;function Nt(){return Nt=Object.assign?Object.assign.bind():function(e){for(var t=1;tSt.createElement("svg",Nt({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 1000 1000"},e),Mt||(Mt=St.createElement("path",{fill:"#fff",d:"M500 0C223.9 0 0 223.9 0 500s223.9 500 500 500 500-223.9 500-500S776.1 0 500 0Zm87.2 412.4c0-21.9 4.3-40.2 13.1-54.4s24-27.1 45.9-38.2l10.1-4.9c17.8-9 22.4-16.7 22.4-26 0-11.1-9.5-19.1-25-19.1-18.3 0-32.2 9.5-41.8 28.9l-24.7-24.8c5.4-11.6 14.1-20.9 25.8-28.1a70.8 70.8 0 0 1 38.9-11.1c17.8 0 33.3 4.6 45.9 14.2s19.4 22.7 19.4 39.4c0 26.6-15 42.9-43.1 57.3l-15.7 8c-16.8 8.5-25.1 16-27.4 29.4h85.4v35.4H587.2Zm-82.1 373.3c-157.8 0-285.7-127.9-285.7-285.7s127.9-285.7 285.7-285.7a286.4 286.4 0 0 1 55.9 5.5l-55.9 116.9c-90 0-163.3 73.3-163.3 163.3s73.3 163.3 163.3 163.3a162.8 162.8 0 0 0 106.4-39.6l61.8 107.2a283.9 283.9 0 0 1-168.2 54.8ZM705 704.1l-70.7-122.5H492.9l70.7-122.4H705l70.7 122.4Z"}))),Lt=({href:e,children:t,...s})=>(0,St.createElement)(Rt.Link,{target:"_blank",rel:"noopener noreferrer",...s,href:e},t,(0,St.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,r.__)("(Opens in a new browser tab)","wordpress-seo")));Lt.propTypes={href:Pt().string.isRequired,children:Pt().node},Lt.defaultProps={children:null};const Dt=St.forwardRef((function(e,t){return St.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),St.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 8l4 4m0 0l-4 4m4-4H3"}))}));var Ft,Bt,Ut;function jt(){return jt=Object.assign?Object.assign.bind():function(e){for(var t=1;tSt.createElement("svg",jt({xmlns:"http://www.w3.org/2000/svg",id:"star-rating-half_svg__Layer_1","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),Ft||(Ft=St.createElement("defs",null,St.createElement("style",null,".star-rating-half_svg__cls-1{fill:#fbbf24}"))),Bt||(Bt=St.createElement("path",{d:"M250 392.04 98.15 471.87l29-169.09L4.3 183.03l169.77-24.67L250 4.52l75.93 153.84 169.77 24.67-122.85 119.75 29 169.09L250 392.04z",className:"star-rating-half_svg__cls-1"})),Ut||(Ut=St.createElement("path",{d:"m250 9.04 73.67 149.27.93 1.88 2.08.3 164.72 23.94-119.19 116.19-1.51 1.47.36 2.07 28.14 164.06-147.34-77.46-1.86-1-1.86 1-147.34 77.46 28.14-164.06.36-2.07-1.51-1.47L8.6 184.43l164.72-23.9 2.08-.3.93-1.88L250 9.04m0-9-77.25 156.49L0 181.64l125 121.89-29.51 172L250 394.3l154.51 81.23-29.51-172 125-121.89-172.75-25.11L250 0Z",className:"star-rating-half_svg__cls-1"})),St.createElement("path",{d:"m500 181.64-172.75-25.11L250 0v394.3l154.51 81.23L375 303.48l125-121.84z",style:{fill:"#f3f4f6"}}));function qt(){return qt=Object.assign?Object.assign.bind():function(e){for(var t=1;tSt.createElement("svg",qt({xmlns:"http://www.w3.org/2000/svg","data-name":"Layer 1",viewBox:"0 0 500 475.53"},e),St.createElement("path",{d:"m250 0 77.25 156.53L500 181.64 375 303.48l29.51 172.05L250 394.3 95.49 475.53 125 303.48 0 181.64l172.75-25.11L250 0z",style:{fill:"#fbbf24"}}));var zt,$t,Vt,Wt,Qt,Ht,Gt,Zt,Jt;function Xt(){return Xt=Object.assign?Object.assign.bind():function(e){for(var t=1;tSt.createElement("svg",Xt({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 500 500"},e),zt||(zt=St.createElement("path",{fill:"#a4286a",d:"M80 0h340a80 80 0 0 1 80 80v420H80a80 80 0 0 1-80-80V80A80 80 0 0 1 80 0z"})),$t||($t=St.createElement("path",{fill:"#6c2548",d:"M437.61 2 155.89 500H500V80a80 80 0 0 0-62.39-78z"})),Vt||(Vt=St.createElement("path",{fill:"#fff",d:"M74.4 337.3v34.9c21.6-.9 38.5-8 52.8-22.5s27.4-38 39.9-72.9l92.6-248h-44.8L140.3 236l-37-116.2h-41l54.4 139.8a57.54 57.54 0 0 1 0 41.8c-5.5 14.2-15.4 30.9-42.3 35.9z"})),Wt||(Wt=St.createElement("circle",{cx:368.33,cy:124.68,r:97.34,fill:"#9fda4f",transform:"rotate(-45 368.335 124.68)"})),Qt||(Qt=St.createElement("path",{fill:"#77b227",d:"m416.2 39.93-95.74 169.51A97.34 97.34 0 1 0 416.2 39.93z"})),Ht||(Ht=St.createElement("path",{fill:"#fec228",d:"m294.78 254.75-.15-.08-.13-.07a63.6 63.6 0 0 0-62.56 110.76h.13a63.6 63.6 0 0 0 62.71-110.67z"})),Gt||(Gt=St.createElement("path",{fill:"#f49a00",d:"m294.5 254.59-62.56 110.76a63.6 63.6 0 1 0 62.56-110.76z"})),Zt||(Zt=St.createElement("path",{fill:"#ff4e47",d:"M222.31 450.07A38.16 38.16 0 0 0 203 416.83a38.18 38.18 0 1 0 19.41 33.27z"})),Jt||(Jt=St.createElement("path",{fill:"#ed261f",d:"m202.9 416.8-37.54 66.48a38.17 38.17 0 0 0 37.54-66.48z"}))),ts=({link:e,linkProps:t,promotions:s})=>{const n=(0,xt.useMemo)((()=>(0,r.__)("Use AI to generate titles and meta descriptions, automatically redirect deleted pages, get 24/7 support, and much, much more!","wordpress-seo")),[]),i=(0,xt.createInterpolateElement)((0,r.sprintf)(/* translators: %1$s and %2$s expand to a span wrap to avoid linebreaks. %3$s expands to "Yoast SEO Premium". */ +(0,r.__)("%1$sGet%2$s %3$s","wordpress-seo"),"","","Yoast SEO Premium"),{nowrap:(0,St.createElement)("span",{className:"yst-whitespace-nowrap"})}),a=s.includes("black-friday-2023-promotion"),o=(0,xt.createInterpolateElement)((0,r.sprintf)(/* translators: %1$s and %2$s expand to strong tags. */ +(0,r.__)("%1$sSAVE 30%%%2$s on your 12 month subscription","wordpress-seo"),"",""),{strong:(0,St.createElement)("strong",null)});return(0,St.createElement)("div",{className:"yst-p-6 yst-rounded-lg yst-text-white yst-bg-primary-500 yst-shadow"},(0,St.createElement)("figure",{className:"yst-logo-square yst-w-16 yst-h-16 yst-mx-auto yst-overflow-hidden yst-border yst-border-white yst-rounded-xl yst-rounded-br-none yst-relative yst-z-10 yst-mt-[-2.6rem]"},(0,St.createElement)(es,null)),a&&(0,St.createElement)("div",{className:"sidebar__sale_banner_container"},(0,St.createElement)("div",{className:"sidebar__sale_banner"},(0,St.createElement)("span",{className:"banner_text"},(0,r.__)("BLACK FRIDAY - 30% OFF","wordpress-seo")))),(0,St.createElement)(Rt.Title,{as:"h2",className:"yst-mt-6 yst-text-base yst-font-extrabold yst-text-white"},i),(0,St.createElement)("p",{className:"yst-mt-2"},n),a&&(0,St.createElement)("div",{className:"yst-text-center yst-border-t-[1px] yst-border-white yst-italic yst-mt-3"},(0,St.createElement)("p",{className:"yst-text-[10px] yst-my-3 yst-mx-0"},o)),(0,St.createElement)(Rt.Button,{as:"a",variant:"upsell",href:e,target:"_blank",rel:"noopener",className:"yst-flex yst-justify-center yst-gap-2 yst-mt-4 focus:yst-ring-offset-primary-500",...t},(0,St.createElement)("span",null,a?(0,r.__)("Claim your 30% off now!","wordpress-seo"):i),(0,St.createElement)(Dt,{className:"yst-w-4 yst-h-4 yst-icon-rtl"})),(0,St.createElement)("p",{className:"yst-text-center yst-text-xs yst-mx-2 yst-font-light yst-leading-5 yst-mt-2"},(0,r.__)("Only $/€/£99 per year (ex VAT)","wordpress-seo"),(0,St.createElement)("br",null),(0,r.__)("30-day money back guarantee.","wordpress-seo")),(0,St.createElement)("hr",{className:"yst-border-t yst-border-primary-300 yst-my-4"}),(0,St.createElement)("a",{className:"yst-block yst-mt-4 yst-no-underline",href:"https://www.g2.com/products/yoast-yoast/reviews",target:"_blank",rel:"noopener noreferrer"},(0,St.createElement)("span",{className:"yst-font-medium yst-text-white hover:yst-underline"},(0,r.__)("Read reviews from real users","wordpress-seo")),(0,St.createElement)("span",{className:"yst-flex yst-gap-2 yst-mt-2 yst-items-center"},(0,St.createElement)(It,{className:"yst-w-5 yst-h-5"}),(0,St.createElement)("span",{className:"yst-flex yst-gap-1"},(0,St.createElement)(Kt,{className:"yst-w-5 yst-h-5"}),(0,St.createElement)(Kt,{className:"yst-w-5 yst-h-5"}),(0,St.createElement)(Kt,{className:"yst-w-5 yst-h-5"}),(0,St.createElement)(Kt,{className:"yst-w-5 yst-h-5"}),(0,St.createElement)(Yt,{className:"yst-w-5 yst-h-5"})),(0,St.createElement)("span",{className:"yst-text-sm yst-font-semibold yst-text-white"},"4.6 / 5"))))};ts.propTypes={link:Pt().string.isRequired,linkProps:Pt().object,promotions:Pt().array},ts.defaultProps={linkProps:{},promotions:[]},Pt().node.isRequired;const ss=window.yoast.reactHelmet,ns=({videoId:e,thumbnail:t,wistiaEmbedPermission:s})=>{const[n,i]=(0,xt.useState)(s.value?O:x),a=(0,xt.useCallback)((()=>i(O)),[i]),o=(0,xt.useCallback)((()=>{s.value?a():i(R)}),[s.value,a,i]),l=(0,xt.useCallback)((()=>i(x)),[i]),c=(0,xt.useCallback)((()=>{s.set(!0),a()}),[s.set,a]);return(0,St.createElement)(St.Fragment,null,s.value&&(0,St.createElement)(ss.Helmet,null,(0,St.createElement)("script",{src:"https://fast.wistia.com/assets/external/E-v1.js",async:!0})),(0,St.createElement)("div",{className:"yst-relative yst-w-full yst-h-0 yst-pt-[56.25%] yst-overflow-hidden yst-rounded-md yst-drop-shadow-md yst-bg-white"},n===x&&(0,St.createElement)("button",{type:"button",className:"yst-absolute yst-inset-0 yst-button yst-p-0 yst-border-none yst-bg-white yst-transition-opacity yst-duration-1000 yst-opacity-100",onClick:o},(0,St.createElement)("img",{className:"yst-w-full yst-h-auto",alt:"",loading:"lazy",decoding:"async",...t})),n===R&&(0,St.createElement)("div",{className:"yst-absolute yst-inset-0 yst-flex yst-flex-col yst-items-center yst-justify-center yst-bg-white"},(0,St.createElement)("p",{className:"yst-max-w-xs yst-mx-auto yst-text-center"},s.status===k&&(0,St.createElement)(Rt.Spinner,null),s.status!==k&&(0,r.sprintf)(/* translators: %1$s expands to Yoast SEO. %2$s expands to Wistia. */ +(0,r.__)("To see this video, you need to allow %1$s to load embedded videos from %2$s.","wordpress-seo"),"Yoast SEO","Wistia")),(0,St.createElement)("div",{className:"yst-flex yst-mt-6 yst-gap-x-4"},(0,St.createElement)(Rt.Button,{type:"button",variant:"secondary",onClick:l,disabled:s.status===k},(0,r.__)("Deny","wordpress-seo")),(0,St.createElement)(Rt.Button,{type:"button",variant:"primary",onClick:c,disabled:s.status===k},(0,r.__)("Allow","wordpress-seo")))),s.value&&n===O&&(0,St.createElement)("div",{className:"yst-absolute yst-w-full yst-h-full yst-top-0 yst-left-0"},null===e&&(0,St.createElement)(Rt.Spinner,{className:"yst-h-full yst-mx-auto"}),null!==e&&(0,St.createElement)("div",{className:`wistia_embed wistia_async_${e} videoFoam=true`}))))};ns.propTypes={videoId:Pt().string.isRequired,thumbnail:Pt().shape({src:Pt().string.isRequired,width:Pt().string,height:Pt().string}).isRequired,wistiaEmbedPermission:Pt().shape({value:Pt().bool.isRequired,status:Pt().string.isRequired,set:Pt().func.isRequired}).isRequired};const is=({learnMoreLink:e,thumbnail:t,wistiaEmbedPermission:s,upsellLink:n,upsellLabel:i})=>{const{onClose:a,initialFocus:o}=(0,Rt.useModalContext)(),l={a:(0,St.createElement)(Lt,{href:e,className:"yst-inline-flex yst-items-center yst-gap-1 yst-no-underline yst-font-medium",variant:"primary"}),ArrowNarrowRightIcon:(0,St.createElement)(Ct,{className:"yst-w-4 yst-h-4 rtl:yst-rotate-180"}),br:(0,St.createElement)("br",null)};return(0,St.createElement)(St.Fragment,null,(0,St.createElement)("div",{className:"yst-px-10 yst-pt-10 yst-introduction-gradient yst-text-center"},(0,St.createElement)("div",{className:"yst-relative yst-w-full"},(0,St.createElement)(ns,{videoId:"vun9z1dpfh",thumbnail:t,wistiaEmbedPermission:s}),(0,St.createElement)(Rt.Badge,{className:"yst-absolute yst-right-0 yst-mr-4 yst-text-center yst-justify-center",variant:"info",style:{top:"-8px"}},(0,r.__)("Beta","wordpress-seo-premium"))),(0,St.createElement)("div",{className:"yst-mt-6 yst-text-xs yst-font-medium yst-flex yst-flex-col yst-items-center"},(0,St.createElement)("span",{className:"yst-introduction-modal-uppercase yst-flex yst-gap-2 yst-items-center"},(0,St.createElement)("span",{className:"yst-logo-icon"}),"Yoast SEO Premium"))),(0,St.createElement)("div",{className:"yst-px-10 yst-pb-4 yst-flex yst-flex-col yst-items-center"},(0,St.createElement)("div",{className:"yst-mt-4 yst-mx-1.5 yst-text-center"},(0,St.createElement)("h3",{className:"yst-text-slate-900 yst-text-lg yst-font-medium"},(0,r.sprintf)(/* translators: %s: Expands to "Yoast AI" */ +(0,r.__)("Optimize your SEO content with %s","wordpress-seo"),"Yoast AI")),(0,St.createElement)("div",{className:"yst-mt-2 yst-text-slate-600 yst-text-sm"},(0,xt.createInterpolateElement)((0,r.sprintf)(/* translators: %1$s is a break tag; %2$s and %3$s are anchor tags; %4$s is the arrow icon. */ +(0,r.__)("Make content editing a breeze! Optimize your SEO content with quick, actionable suggestions at the click of a button.%1$s%2$sLearn more%3$s%4$s","wordpress-seo"),"
            ","","",""),l))),(0,St.createElement)("div",{className:"yst-w-full yst-flex yst-mt-6"},(0,St.createElement)(Rt.Button,{as:"a",className:"yst-grow",size:"extra-large",variant:"upsell",href:n,target:"_blank",ref:o},(0,St.createElement)(Tt,{className:"yst--ml-1 yst-mr-2 yst-h-5 yst-w-5"}),i,(0,St.createElement)("span",{className:"yst-sr-only"},/* translators: Hidden accessibility text. */ +(0,r.__)("(Opens in a new browser tab)","wordpress-seo")))),(0,St.createElement)(Rt.Button,{as:"a",className:"yst-mt-4",variant:"tertiary",onClick:a},(0,r.__)("Close","wordpress-seo"))))};is.propTypes={learnMoreLink:Pt().string.isRequired,upsellLink:Pt().string.isRequired,thumbnail:Pt().shape({src:Pt().string.isRequired,width:Pt().string,height:Pt().string}).isRequired,wistiaEmbedPermission:Pt().shape({value:Pt().bool.isRequired,status:Pt().string.isRequired,set:Pt().func.isRequired}).isRequired,upsellLabel:Pt().string},is.defaultProps={upsellLabel:(0,r.sprintf)(/* translators: %1$s expands to Yoast SEO Premium. */ +(0,r.__)("Unlock with %1$s","wordpress-seo"),"Yoast SEO Premium")};const as="yoast-seo/editor",os=()=>{const e=(0,l.useSelect)((e=>e(as).selectLink("https://yoa.st/ai-generator-learn-more")),[]),t=(0,l.useSelect)((e=>e(as).selectLink("https://yoa.st/ai-generator-upsell")),[]),s=(0,l.useSelect)((e=>e(as).selectLink("https://yoa.st/ai-generator-upsell-woo-seo-premium-bundle")),[]),n=(0,l.useSelect)((e=>e(as).selectLink("https://yoa.st/ai-generator-upsell-woo-seo")),[]),i=(0,l.useSelect)((e=>e(as).getIsPremium()),[]),a=(0,l.useSelect)((e=>e(as).getIsWooSeoUpsell()),[]),o=(0,l.useSelect)((e=>e(as).getIsProduct()),[]),c=!(!a&&(!o||a||i)),d={isProductCopy:c,upsellLink:t};if(c){const e=(0,r.sprintf)(/* translators: %1$s expands to Yoast SEO Premium, %2$s expands to Yoast WooCommerce SEO. */ +(0,r.__)("%1$s + %2$s","wordpress-seo"),"Yoast SEO Premium","Yoast WooCommerce SEO");d.newToText=(0,r.sprintf)(/* translators: %1$s expands to Yoast SEO Premium and Yoast WooCommerce SEO. */ +(0,r.__)("New in %1$s","wordpress-seo"),e),d.title=(0,r.__)("Generate product titles & descriptions with AI!","wordpress-seo"),!i&&a&&(d.upsellLabel=`${(0,r.sprintf)(/* translators: %1$s expands to Woo Premium bundle. */ +(0,r.__)("Unlock with the %1$s","wordpress-seo"),"Woo Premium bundle")}*`,d.bundleNote=(0,St.createElement)("div",{className:"yst-text-xs yst-text-slate-500 yst-mt-2"},`*${e}`),d.upsellLink=s),i&&(d.upsellLabel=(0,r.sprintf)(/* translators: %1$s expands to Yoast WooCommerce SEO. */ +(0,r.__)("Unlock with %1$s","wordpress-seo"),"Yoast WooCommerce SEO"),d.upsellLink=n)}const p=(0,l.useSelect)((e=>e(as).selectImageLink("ai-generator-preview.png")),[]),u=(0,xt.useMemo)((()=>({src:p,width:"432",height:"244"})),[p]),h=(0,l.useSelect)((e=>e(as).selectWistiaEmbedPermissionValue()),[]),m=(0,l.useSelect)((e=>e(as).selectWistiaEmbedPermissionStatus()),[]),{setWistiaEmbedPermission:g}=(0,l.useDispatch)(as),y=(0,xt.useMemo)((()=>({value:h,status:m,set:g})),[h,m,g]);return(0,St.createElement)(At,{learnMoreLink:e,thumbnail:u,wistiaEmbedPermission:y,...d})},rs=({fieldId:e})=>{const[t,,,s,n]=(0,Rt.useToggleState)(!1),i=(0,xt.useCallback)((()=>{s()}),[s]),a=(0,xt.useRef)(null);return(0,St.createElement)(St.Fragment,null,(0,St.createElement)("button",{type:"button",id:`yst-replacevar__use-ai-button__${e}`,className:"yst-replacevar__use-ai-button-upsell",onClick:i},(0,r.__)("Use AI","wordpress-seo")),(0,St.createElement)(Rt.Modal,{className:"yst-introduction-modal",isOpen:t,onClose:n,initialFocus:a},(0,St.createElement)(Rt.Modal.Panel,{className:"yst-max-w-lg yst-p-0 yst-rounded-3xl"},(0,St.createElement)(os,{onClose:n,focusElementRef:a}))))};rs.propTypes={fieldId:Pt().string.isRequired};const ls="yoast-seo/editor";n()((()=>{window.wpseoTermScraperL10n=window.wpseoScriptData.metabox,function(e){function t(){e("#copy-home-meta-description").on("click",(function(){e("#open_graph_frontpage_desc").val(e("#meta_description").val())}))}function s(){var t=e("#wpseo-conf");if(t.length){var s=t.attr("action").split("#")[0];t.attr("action",s+window.location.hash)}}function n(){var t=window.location.hash.replace("#top#","");-1!==t.search("#top")&&(t=window.location.hash.replace("#top%23","")),""!==t&&"#"!==t.charAt(0)||(t=e(".wpseotab").attr("id")),e("#"+t).addClass("active"),e("#"+t+"-tab").addClass("nav-tab-active").trigger("click")}function i(t){const s=e("#noindex-author-noposts-wpseo-container");t?s.show():s.hide()}e.fn._wpseoIsInViewport=function(){const t=e(this).offset().top,s=t+e(this).outerHeight(),n=e(window).scrollTop(),i=n+e(window).height();return t>n&&s{e(this).is(":checked")||i(!1)})),a.on("change",(()=>{e(this).is(":checked")||i(!0)})),e("#disable-date input[type='radio']").on("change",(function(){e(this).is(":checked")&&e("#date-archives-titles-metas-content").toggle("off"===e(this).val())})).trigger("change"),e("#disable-attachment input[type='radio']").on("change",(function(){e(this).is(":checked")&&e("#media_settings").toggle("off"===e(this).val())})).trigger("change"),e("#disable-post_format").on("change",(function(){e("#post_format-titles-metas").toggle(e(this).is(":not(:checked)"))})).trigger("change"),e("#wpseo-tabs").find("a").on("click",(function(t){var s,n,i,a=!0;if(s=e(this),n=!!e("#first-time-configuration-tab").filter(".nav-tab-active").length,i=!!s.filter("#first-time-configuration-tab").length,n&&!i&&window.isStepBeingEdited&&(a=confirm((0,r.__)("There are unsaved changes in one or more steps. Leaving means that those changes may not be saved. Are you sure you want to leave?","wordpress-seo"))),a){window.isStepBeingEdited=!1,e("#wpseo-tabs").find("a").removeClass("nav-tab-active"),e(".wpseotab").removeClass("active");var o=e(this).attr("id").replace("-tab",""),l=e("#"+o);l.addClass("active"),e(this).addClass("nav-tab-active"),l.hasClass("nosave")?e("#wpseo-submit-container").hide():e("#wpseo-submit-container").show(),e(window).trigger("yoast-seo-tab-change"),"first-time-configuration"===o?(e(".notice-yoast").slideUp(),e(".yoast_premium_upsell").slideUp(),e("#sidebar-container").hide()):(e(".notice-yoast").slideDown(),e(".yoast_premium_upsell").slideDown(),e("#sidebar-container").show())}else t.preventDefault(),e("#first-time-configuration-tab").trigger("focus")})),e("#yoast-first-time-configuration-notice a").on("click",(function(){e("#first-time-configuration-tab").click()})),e("#company_or_person").on("change",(function(){var t=e(this).val();"company"===t?(e("#knowledge-graph-company").show(),e("#knowledge-graph-person").hide()):"person"===t?(e("#knowledge-graph-company").hide(),e("#knowledge-graph-person").show()):(e("#knowledge-graph-company").hide(),e("#knowledge-graph-person").hide())})).trigger("change"),e(".switch-yoast-seo input").on("keydown",(function(e){"keydown"===e.type&&13===e.which&&e.preventDefault()})),e("body").on("click","button.toggleable-container-trigger",(t=>{const s=e(t.currentTarget),n=s.parent().siblings(".toggleable-container");n.toggleClass("toggleable-container-hidden"),s.attr("aria-expanded",!n.hasClass("toggleable-container-hidden")).find("span").toggleClass("dashicons-arrow-up-alt2 dashicons-arrow-down-alt2")}));const c=e("#opengraph"),d=e("#wpseo-opengraph-settings");c.length&&d.length&&(d.toggle(c[0].checked),c.on("change",(e=>{d.toggle(e.target.checked)}))),t(),n(),function(){if(!e("#enable_xml_sitemap input[type=radio]").length)return;const t=e("#yoast-seo-sitemaps-disabled-warning");e("#enable_xml_sitemap input[type=radio]").on("change",(function(){"off"===this.value?t.show():t.hide()}))}(),function(){const t=e("#wpseo-submit-container-float"),s=e("#wpseo-submit-container-fixed");if(!t.length||!s.length)return;function n(){t._wpseoIsInViewport()?s.hide():s.show()}e(window).on("resize scroll",(0,o.debounce)(n,100)),e(window).on("yoast-seo-tab-change",n);const i=e(".wpseo-message");i.length&&window.setTimeout((()=>{i.fadeOut()}),5e3),n()}()}))}(a()),function(e){function t(e){e&&(e.focus(),e.click())}function s(){if(e(".wpseo-meta-section").length>0){const t=e(".wpseo-meta-section-link");e(".wpseo-metabox-menu li").filter((function(){return"#wpseo-meta-section-content"===e(this).find(".wpseo-meta-section-link").attr("href")})).addClass("active").find("[role='tab']").addClass("yoast-active-tab"),e("#wpseo-meta-section-content, .wpseo-meta-section-react").addClass("active"),t.on("click",(function(s){var n=e(this).attr("id"),i=e(this).attr("href"),a=e(i);s.preventDefault(),e(".wpseo-metabox-menu li").removeClass("active").find("[role='tab']").removeClass("yoast-active-tab"),e(".wpseo-meta-section").removeClass("active"),e(".wpseo-meta-section-react.active").removeClass("active"),"#wpseo-meta-section-content"===i&&e(".wpseo-meta-section-react").addClass("active"),a.addClass("active"),e(this).parent("li").addClass("active").find("[role='tab']").addClass("yoast-active-tab");const o=function(e,t={}){return new CustomEvent("YoastSEO:metaTabChange",{detail:t})}(0,{metaTabId:n});window.dispatchEvent(o),this&&(t.attr({"aria-selected":"false",tabIndex:"-1"}),this.removeAttribute("tabindex"),this.setAttribute("aria-selected","true"))}))}}window.wpseoInitTabs=s,window.wpseo_init_tabs=s,e(".wpseo-meta-section").each((function(t,s){e(s).find(".wpseotab:first").addClass("active")})),window.wpseo_init_tabs(),function(){const s=e(".yoast-aria-tabs"),n=s.find("[role='tab']"),i=s.attr("aria-orientation")||"horizontal";n.attr({"aria-selected":!1,tabIndex:"-1"}),n.filter(".yoast-active-tab").removeAttr("tabindex").attr("aria-selected","true"),n.on("keydown",(function(s){-1!==[32,35,36,37,38,39,40].indexOf(s.which)&&("horizontal"===i&&-1!==[38,40].indexOf(s.which)||"vertical"===i&&-1!==[37,39].indexOf(s.which)||function(s,n){const i=s.which,a=n.index(e(s.target));switch(i){case 32:s.preventDefault(),t(n[a]);break;case 35:s.preventDefault(),t(n[n.length-1]);break;case 36:s.preventDefault(),t(n[0]);break;case 37:case 38:s.preventDefault(),t(n[a-1<0?n.length-1:a-1]);break;case 39:case 40:s.preventDefault(),t(n[a+1===n.length?0:a+1])}}(s,n))}))}()}(a());const e=function(){const e=(0,l.registerStore)("yoast-seo/editor",{reducer:(0,l.combineReducers)(c.reducers),selectors:c.selectors,actions:(0,o.pickBy)(c.actions,(e=>"function"==typeof e)),controls:t});return(e=>{e.dispatch(c.actions.setSettings({socialPreviews:{sitewideImage:window.wpseoScriptData.metabox.sitewide_social_image,siteName:window.wpseoScriptData.metabox.site_name,contentImage:window.wpseoScriptData.metabox.first_content_image,twitterCardType:window.wpseoScriptData.metabox.twitterCardType},snippetEditor:{baseUrl:window.wpseoScriptData.metabox.base_url,date:window.wpseoScriptData.metabox.metaDescriptionDate,recommendedReplacementVariables:window.wpseoScriptData.analysis.plugins.replaceVars.recommended_replace_vars,siteIconUrl:window.wpseoScriptData.metabox.siteIconUrl}})),e.dispatch(c.actions.setSEMrushChangeCountry(window.wpseoScriptData.metabox.countryCode)),e.dispatch(c.actions.setSEMrushLoginStatus(window.wpseoScriptData.metabox.SEMrushLoginStatus)),e.dispatch(c.actions.setWincherLoginStatus(window.wpseoScriptData.metabox.wincherLoginStatus,!1)),e.dispatch(c.actions.setWincherWebsiteId(window.wpseoScriptData.metabox.wincherWebsiteId)),e.dispatch(c.actions.setWincherAutomaticKeyphaseTracking(window.wpseoScriptData.metabox.wincherAutoAddKeyphrases)),e.dispatch(c.actions.setDismissedAlerts((0,o.get)(window,"wpseoScriptData.dismissedAlerts",{}))),e.dispatch(c.actions.setCurrentPromotions((0,o.get)(window,"wpseoScriptData.currentPromotions",[]))),e.dispatch(c.actions.setIsPremium(Boolean((0,o.get)(window,"wpseoScriptData.metabox.isPremium",!1)))),e.dispatch(c.actions.setPostId(Number((0,o.get)(window,"wpseoScriptData.postId",null)))),e.dispatch(c.actions.setAdminUrl((0,o.get)(window,"wpseoScriptData.adminUrl",""))),e.dispatch(c.actions.setLinkParams((0,o.get)(window,"wpseoScriptData.linkParams",{}))),e.dispatch(c.actions.setPluginUrl((0,o.get)(window,"wpseoScriptData.pluginUrl",""))),e.dispatch(c.actions.setWistiaEmbedPermissionValue("1"===(0,o.get)(window,"wpseoScriptData.wistiaEmbedPermission",!1)))})(e),e}();window.yoast.initEditorIntegration(e);const s=new window.yoast.EditorData(o.noop,e,W);s.initialize(window.wpseoScriptData.analysis.plugins.replaceVars.replace_vars),wt(a(),e,s),function(e){e(document).ready((function(e){void 0!==wp.media&&e(".wpseo_image_upload_button").each((function(t,s){const n=function(t){let s=(t=e(t)).data("target");return s&&""!==s||(s=e(t).attr("id").replace(/_button$/,"")),s}(s),i=e(s).data("target-id"),a=e("#"+n),o=e("#"+i);var r=wp.media.frames.file_frame=wp.media({title:wpseoScriptData.media.choose_image,button:{text:wpseoScriptData.media.choose_image},multiple:!1,library:{type:"image"}});r.on("select",(function(){var e=r.state().get("selection").first().toJSON();a.val(e.url),o.val(e.id)}));const l=e(s);l.click((function(e){e.preventDefault(),r.open()})),l.siblings(".wpseo_image_remove_button").on("click",(e=>{e.preventDefault(),a.val(""),o.val("")}))}))}))}(a()),(()=>{if((0,l.select)("yoast-seo/editor").getPreference("isInsightsEnabled",!1))(0,l.dispatch)("yoast-seo/editor").loadEstimatedReadingTime(),(0,l.subscribe)((0,o.debounce)(vt(),1500,{maxWait:3e3}))})(),window.wpseoScriptData.termType&&!["product_cat","product_tag"].includes(window.wpseoScriptData.termType)&&(()=>{const e=(0,l.select)(ls).getIsPremium(),t=(0,l.select)(ls).getIsWooSeoUpsell(),s=(0,l.select)(ls).getIsProduct()?!e||t:!e;(0,he.addFilter)("yoast.replacementVariableEditor.additionalButtons","yoast/yoast-seo-premium/AiGenerator",((e,{fieldId:t})=>(s&&e.push((0,St.createElement)(kt.Fill,{name:`yoast.replacementVariableEditor.additionalButtons.${t}`},(0,St.createElement)(rs,{fieldId:t}))),e)))})()}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/used-keywords-assessment.js b/wp/wp-content/plugins/wordpress-seo/js/dist/used-keywords-assessment.js new file mode 100644 index 00000000..5778a150 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/used-keywords-assessment.js @@ -0,0 +1 @@ +(()=>{"use strict";const s=window.yoast.analysis.bundledPlugins.usedKeywords;(new class{constructor(){this._initialized=!1}register(){analysisWorker.registerMessageHandler("updateKeywordUsage",this.updateKeywordUsage.bind(this),"used-keywords-assessment"),analysisWorker.registerMessageHandler("initialize",this.initialize.bind(this),"used-keywords-assessment")}initialize(e){this._plugin=new s(analysisWorker,e),this._plugin.registerPlugin(),this._initialized=!0}updateKeywordUsage(s){if(!this._initialized)throw new Error("UsedKeywordsAssessment must be initialized before keyphrases can be updated.");const e=s.usedKeywords,i=s.usedKeywordsPostTypes;this._plugin.updateKeywordUsage(e,i),analysisWorker.refreshAssessment("usedKeywords","previouslyUsedKeywords")}}).register()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/wincher-dashboard-widget.js b/wp/wp-content/plugins/wordpress-seo/js/dist/wincher-dashboard-widget.js new file mode 100644 index 00000000..62565c5e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/wincher-dashboard-widget.js @@ -0,0 +1,119 @@ +(()=>{"use strict";var e={6746:(e,t,n)=>{var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=i(n(9196)),s=i(n(9156)),a=i(n(6743));function i(e){return e&&e.__esModule?e:{default:e}}var l=void 0;function c(e,t){var n,a,i,u,p,d,h,m,y=[],f={};for(d=0;d "+l);if("componentClose"===p.type)throw new Error("Missing opening component token: `"+p.value+"`");if("componentOpen"===p.type){n=t[p.value],i=d;break}y.push(t[p.value])}else y.push(p.value);return n&&(u=function(e,t){var n,r,o=t[e],s=0;for(r=e+1;r{function t(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(t)}},9156:(e,t,n)=>{var r=n(9196),o="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,s=n(7942),a=n(9179),i=n(397),l=".",c=":",u="function"==typeof Symbol&&Symbol.iterator,p="@@iterator";function d(e,t){return e&&"object"==typeof e&&null!=e.key?(n=e.key,r={"=":"=0",":":"=2"},"$"+(""+n).replace(/[=:]/g,(function(e){return r[e]}))):t.toString(36);var n,r}function h(e,t,n,r){var s,i=typeof e;if("undefined"!==i&&"boolean"!==i||(e=null),null===e||"string"===i||"number"===i||"object"===i&&e.$$typeof===o)return n(r,e,""===t?l+d(e,0):t),1;var m=0,y=""===t?l:t+c;if(Array.isArray(e))for(var f=0;f{function t(e){return function(){return e}}var n=function(){};n.thatReturns=t,n.thatReturnsFalse=t(!1),n.thatReturnsTrue=t(!0),n.thatReturnsNull=t(null),n.thatReturnsThis=function(){return this},n.thatReturnsArgument=function(e){return e},e.exports=n},9179:e=>{e.exports=function(e,t,n,r,o,s,a,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,s,a,i],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},397:(e,t,n)=>{var r=n(7942);e.exports=r},9196:e=>{e.exports=window.React}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,n),s.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e=n(9196);const t=window.wp.element,r=window.yoast.propTypes;var o=n.n(r);const s=window.yoast.styledComponents;var a=n.n(s);const i=window.wp.i18n,l=window.lodash;var c=n(6746);const u=window.yoast.helpers,p=window.yoast.componentsNew,d=t=>(0,e.createElement)(p.Alert,{type:"warning",className:t.className},(0,i.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,i.__)('Your %s account does not contain any keyphrases for this website yet. You can track keyphrases by using the "Track SEO Performance" button in the post editor.',"wordpress-seo"),"Wincher"));d.propTypes={className:o().string},d.defaultProps={className:""};const h=d,m=window.moment;var y=n.n(m);const f=({data:t,mapChartDataToTableData:n,dataTableCaption:r,dataTableHeaderLabels:o,isDataTableVisuallyHidden:s})=>t.length!==o.length?(0,e.createElement)("p",null,(0,i.__)("The number of headers and header labels don't match.","wordpress-seo")):(0,e.createElement)("div",{className:s?"screen-reader-text":null},(0,e.createElement)("table",null,(0,e.createElement)("caption",null,r),(0,e.createElement)("thead",null,(0,e.createElement)("tr",null,o.map(((t,n)=>(0,e.createElement)("th",{key:n},t))))),(0,e.createElement)("tbody",null,(0,e.createElement)("tr",null,t.map(((t,r)=>(0,e.createElement)("td",{key:r},n(t.y))))))));f.propTypes={data:o().arrayOf(o().shape({x:o().number,y:o().number})).isRequired,mapChartDataToTableData:o().func,dataTableCaption:o().string.isRequired,dataTableHeaderLabels:o().array.isRequired,isDataTableVisuallyHidden:o().bool},f.defaultProps={mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const g=f,w=({data:n,width:r,height:o,fillColor:s,strokeColor:a,strokeWidth:i,className:l,mapChartDataToTableData:c,dataTableCaption:u,dataTableHeaderLabels:p,isDataTableVisuallyHidden:d})=>{const h=Math.max(1,Math.max(...n.map((e=>e.x)))),m=Math.max(1,Math.max(...n.map((e=>e.y)))),y=o-i,f=n.map((e=>`${e.x/h*r},${y-e.y/m*y+i}`)).join(" "),w=`0,${y+i} `+f+` ${r},${y+i}`;return(0,e.createElement)(t.Fragment,null,(0,e.createElement)("svg",{width:r,height:o,viewBox:`0 0 ${r} ${o}`,className:l,role:"img","aria-hidden":"true",focusable:"false"},(0,e.createElement)("polygon",{fill:s,points:w}),(0,e.createElement)("polyline",{fill:"none",stroke:a,strokeWidth:i,strokeLinejoin:"round",strokeLinecap:"round",points:f})),c&&(0,e.createElement)(g,{data:n,mapChartDataToTableData:c,dataTableCaption:u,dataTableHeaderLabels:p,isDataTableVisuallyHidden:d}))};w.propTypes={data:o().arrayOf(o().shape({x:o().number,y:o().number})).isRequired,width:o().number.isRequired,height:o().number.isRequired,fillColor:o().string,strokeColor:o().string,strokeWidth:o().number,className:o().string,mapChartDataToTableData:o().func,dataTableCaption:o().string.isRequired,dataTableHeaderLabels:o().array.isRequired,isDataTableVisuallyHidden:o().bool},w.defaultProps={fillColor:null,strokeColor:"#000000",strokeWidth:1,className:"",mapChartDataToTableData:null,isDataTableVisuallyHidden:!0};const b=w,v=()=>(0,e.createElement)("p",{className:"yoast-wincher-seo-performance-modal__loading-message"},(0,i.__)("Tracking the ranking position...","wordpress-seo")," ",(0,e.createElement)(p.SvgIcon,{icon:"loading-spinner"})),E=a()(p.SvgIcon)` + margin-left: 2px; + flex-shrink: 0; + rotate: ${e=>e.isImproving?"-90deg":"90deg"}; +`,k=a().span` + color: ${e=>e.isImproving?"#69AB56":"#DC3332"}; + font-size: 13px; + font-weight: 600; + line-height: 20px; + margin-right: 2px; + margin-left: 12px; +`,T=a().td` + padding-right: 0 !important; + + & > div { + margin: 0px; + } +`,_=a().td` + padding-left: 2px !important; +`,C=a().td.attrs({className:"yoast-table--nopadding"})` + & > div { + justify-content: center; + } +`,S=a().div` + display: flex; + align-items: center; + & > a { + box-sizing: border-box; + } +`,x=a().button` + background: none; + color: inherit; + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; + display: flex; + align-items: center; +`,D=a().tr` + background-color: ${e=>e.isEnabled?"#FFFFFF":"#F9F9F9"} !important; +`;function R(e){return Math.round(100*e)}function I({chartData:t}){if((0,l.isEmpty)(t)||(0,l.isEmpty)(t.position))return"?";const n=function(e){return Array.from({length:e.position.history.length},((e,t)=>t+1)).map((e=>(0,i.sprintf)((0,i._n)("%d day","%d days",e,"wordpress-seo"),e)))}(t),r=t.position.history.map(((e,t)=>({x:t,y:101-e.value})));return(0,e.createElement)(b,{width:66,height:24,data:r,strokeWidth:1.8,strokeColor:"#498afc",fillColor:"#ade3fc",mapChartDataToTableData:R,dataTableCaption:(0,i.__)("Keyphrase position in the last 90 days on a scale from 0 to 100.","wordpress-seo"),dataTableHeaderLabels:n})}function N(e){return!e||!e.position||e.position.value>100?"> 100":e.position.value}I.propTypes={chartData:o().object},I.defaultProps={chartData:{}};const L=({rowData:n})=>{var r;if(null==n||null===(r=n.position)||void 0===r||!r.change)return(0,e.createElement)(I,{chartData:n});const o=n.position.change<0;return(0,e.createElement)(t.Fragment,null,(0,e.createElement)(I,{chartData:n}),(0,e.createElement)(k,{isImproving:o},Math.abs(n.position.change)),(0,e.createElement)(E,{icon:"caret-right",color:o?"#69AB56":"#DC3332",size:"14px",isImproving:o}))};function P(n){var r;const{keyphrase:o,rowData:s,onTrackKeyphrase:a,onUntrackKeyphrase:c,isFocusKeyphrase:u,isDisabled:d,isLoading:h,isSelected:m,onSelectKeyphrases:f}=n,g=!(0,l.isEmpty)(s),w=!(0,l.isEmpty)(null==s||null===(r=s.position)||void 0===r?void 0:r.history),b=(0,t.useCallback)((()=>{d||(g?c(o,s.id):a(o))}),[o,a,c,g,s,d]),E=(0,t.useCallback)((()=>{f((e=>m?e.filter((e=>e!==o)):e.concat(o)))}),[f,m,o]);return(0,e.createElement)(D,{isEnabled:g},(0,e.createElement)(T,null,w&&(0,e.createElement)(p.Checkbox,{id:"select-"+o,onChange:E,checked:m,label:""})),(0,e.createElement)(_,null,o,u&&(0,e.createElement)("span",null,"*")),function(n){const{rowData:r,websiteId:o,keyphrase:s,onSelectKeyphrases:a}=n,c=(0,t.useCallback)((()=>{a([s])}),[a,s]),u=!(0,l.isEmpty)(r),d=r&&r.updated_at&&y()(r.updated_at)>=y()().subtract(7,"days"),h=r?(0,i.sprintf)("https://app.wincher.com/websites/%s/keywords?serp=%s&utm_medium=plugin&utm_source=yoast&referer=yoast&partner=yoast",o,r.id):null;return u?d?(0,e.createElement)(t.Fragment,null,(0,e.createElement)("td",null,(0,e.createElement)(S,null,N(r),(0,e.createElement)(p.ButtonStyledLink,{variant:"secondary",href:h,style:{height:28,marginLeft:12},rel:"noopener",target:"_blank"},(0,i.__)("View","wordpress-seo")))),(0,e.createElement)("td",{className:"yoast-table--nopadding"},(0,e.createElement)(x,{type:"button",onClick:c},(0,e.createElement)(L,{rowData:r}))),(0,e.createElement)("td",null,(m=r.updated_at,y()(m).fromNow()))):(0,e.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,e.createElement)(v,null)):(0,e.createElement)("td",{className:"yoast-table--nopadding",colSpan:"3"},(0,e.createElement)("i",null,(0,i.__)("Activate tracking to show the ranking position","wordpress-seo")));var m}(n),(0,e.createElement)(C,null,function({keyphrase:t,isEnabled:n,toggleAction:r,isLoading:o}){return o?(0,e.createElement)(p.SvgIcon,{icon:"loading-spinner"}):(0,e.createElement)(p.Toggle,{id:`toggle-keyphrase-tracking-${t}`,className:"wincher-toggle",isEnabled:n,onSetToggleState:r,showToggleStateLabel:!1})}({keyphrase:o,isEnabled:g,toggleAction:b,isLoading:h})))}L.propTypes={rowData:o().object},P.propTypes={rowData:o().object,keyphrase:o().string.isRequired,onTrackKeyphrase:o().func,onUntrackKeyphrase:o().func,isFocusKeyphrase:o().bool,isDisabled:o().bool,isLoading:o().bool,websiteId:o().string,isSelected:o().bool.isRequired,onSelectKeyphrases:o().func.isRequired},P.defaultProps={rowData:{},onTrackKeyphrase:()=>{},onUntrackKeyphrase:()=>{},isFocusKeyphrase:!1,isDisabled:!1,isLoading:!1,websiteId:""};const A=t=>{const n=(0,i.sprintf)(/* translators: %s expands to a link to open the Wincher login popup. */ +(0,i.__)("It seems like something went wrong when retrieving your website's data. Please %s and try again.","wordpress-seo"),"{{reconnectToWincher/}}","Wincher");return(0,e.createElement)(p.Alert,{type:"error",className:t.className},(0,c.Z)({mixedString:n,components:{reconnectToWincher:(0,e.createElement)("a",{href:"#",onClick:e=>{e.preventDefault(),t.onReconnect()}},(0,i.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,i.__)("reconnect to %s","wordpress-seo"),"Wincher"))}}))};A.propTypes={onReconnect:o().func.isRequired,className:o().string},A.defaultProps={className:""};const q=A,W=window.yoast.styleGuide,j=window.wp.apiFetch;var $=n.n(j);async function F(e){try{return await $()(e)}catch(e){return e.error&&e.status?e:e instanceof Response&&await e.json()}}const O=a().p` + color: ${W.colors.$color_pink_dark}; + font-size: 14px; + font-weight: 700; + margin: 13px 0 10px; +`,H=a()(p.SvgIcon)` + margin-right: 5px; + vertical-align: middle; +`,B=a().button` + position: absolute; + top: 9px; + right: 9px; + border: none; + background: none; + cursor: pointer; +`,K=a().p` + font-size: 13px; + font-weight: 500; + margin: 10px 0 13px; +`,z=a().div` + position: relative; + background: ${e=>e.isTitleShortened?"#F5F7F7":"transparent"}; + border: 1px solid #C7C7C7; + border-left: 4px solid${W.colors.$color_pink_dark}; + padding: 0 16px; + margin-bottom: 1.5em; +`,M=e=>{const[n,r]=(0,t.useState)(null);return(0,t.useEffect)((()=>{e&&!n&&async function(){return await F({path:"yoast/v1/wincher/account/limit",method:"GET"})}().then((e=>r(e)))}),[n]),n};M.propTypes={limit:o().bool.isRequired};const V=({limit:t,usage:n,isTitleShortened:r,isFreeAccount:o})=>{const s=(0,i.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,i.__)("Your are tracking %1$s out of %2$s keyphrases included in your free account.","wordpress-seo"),n,t),a=(0,i.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,i.__)("Your are tracking %1$s out of %2$s keyphrases included in your account.","wordpress-seo"),n,t),l=o?s:a,c=(0,i.sprintf)( +/* Translators: %1$s expands to the number of used keywords. + * %2$s expands to the account keywords limit. + */ +(0,i.__)("Keyphrases tracked: %1$s/%2$s","wordpress-seo"),n,t),u=r?c:l;return(0,e.createElement)(O,null,r&&(0,e.createElement)(H,{icon:"exclamation-triangle",color:W.colors.$color_pink_dark,size:"14px"}),u)};V.propTypes={limit:o().number.isRequired,usage:o().number.isRequired,isTitleShortened:o().bool,isFreeAccount:o().bool};const G=(0,u.makeOutboundLink)(),Y=({discount:t,months:n})=>{const r=(0,e.createElement)(G,{href:wpseoAdminGlobalL10n["links.wincher.upgrade"],style:{fontWeight:600}},(0,i.sprintf)(/* Translators: %s : Expands to "Wincher". */ +(0,i.__)("Click here to upgrade your %s plan","wordpress-seo"),"Wincher"));if(!t||!n)return(0,e.createElement)(K,null,r);const o=100*t,s=(0,i.sprintf)( +/* Translators: %1$s expands to upgrade account link. + * %2$s expands to the upgrade discount value. + * %3$s expands to the upgrade discount duration e.g. 2 months. + */ +(0,i.__)("%1$s and get an exclusive %2$s discount for %3$s month(s).","wordpress-seo"),"{{wincherAccountUpgradeLink/}}",o+"%",n);return(0,e.createElement)(K,null,(0,c.Z)({mixedString:s,components:{wincherAccountUpgradeLink:r}}))};Y.propTypes={discount:o().number,months:o().number};const U=({onClose:n,isTitleShortened:r,trackingInfo:o})=>{const s=(()=>{const[e,n]=(0,t.useState)(null);return(0,t.useEffect)((()=>{e||async function(){return await F({path:"yoast/v1/wincher/account/upgrade-campaign",method:"GET"})}().then((e=>n(e)))}),[e]),e})();if(null===o)return null;const{limit:a,usage:l}=o;if(!(a&&l/a>=.8))return null;const c=Boolean(null==s?void 0:s.discount);return(0,e.createElement)(z,{isTitleShortened:r},n&&(0,e.createElement)(B,{type:"button","aria-label":(0,i.__)("Close the upgrade callout","wordpress-seo"),onClick:n},(0,e.createElement)(p.SvgIcon,{icon:"times-circle",color:W.colors.$color_pink_dark,size:"14px"})),(0,e.createElement)(V,{...o,isTitleShortened:r,isFreeAccount:c}),(0,e.createElement)(Y,{discount:null==s?void 0:s.discount,months:null==s?void 0:s.months}))};U.propTypes={onClose:o().func,isTitleShortened:o().bool,trackingInfo:o().object};const Z=U,Q=(0,u.makeOutboundLink)(),X=(0,u.makeOutboundLink)(),J=(0,u.makeOutboundLink)(),ee=(0,u.makeOutboundLink)(),te=a().div` + & .wincher-performance-report-alert { + margin-bottom: 1em; + } +`,ne=a().table` + pointer-events: none; + user-select: none; +`,re=a().div` + position: relative; + width: 100%; + overflow-y: auto; +`,oe=a().div` + margin: 0; + -webkit-filter: blur(4px); + -moz-filter: blur(4px); + -o-filter: blur(4px); + -ms-filter: blur(4px); + filter: blur(4px); +`,se=a().p` + top: 47%; + left: 50%; + position: absolute; +`,ae=e=>{const{websiteId:t,id:n}=e;return(0,i.sprintf)("https://app.wincher.com/websites/%s/keywords?serp=%s&utm_medium=plugin&utm_source=yoast&referer=yoast&partner=yoast",t,n)},ie=t=>{const{isLoggedIn:n,onConnectAction:r}=t;return n?null:(0,e.createElement)(se,null,(0,e.createElement)(p.NewButton,{onClick:r,variant:"primary",style:{left:"-50%",backgroundColor:"#2371B0"}},(0,i.sprintf)(/* translators: %s expands to Wincher */ +(0,i.__)("Connect with %s","wordpress-seo"),"Wincher")))};ie.propTypes={isLoggedIn:o().bool.isRequired,onConnectAction:o().func.isRequired};const le=({isBlurred:t,children:n})=>t?(0,e.createElement)("td",null,(0,e.createElement)(oe,null,n)):(0,e.createElement)("td",null,n);le.propTypes={isBlurred:o().bool,children:o().oneOfType([o().string,o().number,o().object])};const ce=({keyphrase:t,websiteId:n,isBlurred:r})=>{const{id:o,keyword:s}=t;return(0,e.createElement)("tr",null,(0,e.createElement)(le,{isBlurred:r},s),(0,e.createElement)(le,{isBlurred:r},N(t)),(0,e.createElement)(le,{isBlurred:r,className:"yoast-table--nopadding"},(0,e.createElement)(I,{chartData:t})),(0,e.createElement)(le,{isBlurred:r,className:"yoast-table--nobreak"},(0,e.createElement)(Q,{href:ae({websiteId:n,id:o})},(0,i.__)("View","wordpress-seo"))))};ce.propTypes={keyphrase:o().object.isRequired,websiteId:o().string.isRequired,isBlurred:o().bool};const ue=()=>(0,e.createElement)(p.Alert,{type:"error",className:"wincher-performance-report-alert"},(0,i.sprintf)((0,i.__)("Network Error: Unable to connect to the server. Please check your internet connection and try again later.","wordpress-seo"))),pe=t=>{const{data:n}=t;return!(0,l.isEmpty)(n)&&(0,l.isEmpty)(n.results)?(0,e.createElement)(p.Alert,{type:"success",className:"wincher-performance-report-alert"},(0,i.sprintf)(/* translators: %1$s and %2$s: Expands to "Wincher". */ +(0,i.__)('You have successfully connected with %1$s. Your %2$s account does not contain any keyphrases for this website yet. You can track keyphrases by using the "Track SEO Performance" button in the post editor.',"wordpress-seo"),"Wincher","Wincher")):(0,e.createElement)(p.Alert,{type:"success",className:"wincher-performance-report-alert"},(0,i.sprintf)(/* translators: %s: Expands to "Wincher". */ +(0,i.__)("You have successfully connected with %s.","wordpress-seo"),"Wincher"))};pe.propTypes={data:o().object.isRequired};const de=t=>{const{data:n,onConnectAction:r,isConnectSuccess:o,isNetworkError:s,isFailedRequest:a}=t;return s?(0,e.createElement)(ue,{data:n}):o?(0,e.createElement)(pe,{data:n}):a?(0,e.createElement)(q,{onReconnect:r,className:"wincher-performance-report-alert"}):null};de.propTypes={data:o().object.isRequired,onConnectAction:o().func.isRequired,isConnectSuccess:o().bool.isRequired,isNetworkError:o().bool.isRequired,isFailedRequest:o().bool.isRequired};const he=t=>{const{data:n,isNetworkError:r,isConnectSuccess:o}=t,s=(e=>e&&[401,403,404].includes(e.status))(n);return r||o||s?(0,e.createElement)(de,{...t,isFailedRequest:s}):!n||(0,l.isEmpty)(n.results)?(0,e.createElement)(h,{className:"wincher-performance-report-alert"}):null};he.propTypes={data:o().object.isRequired,onConnectAction:o().func.isRequired,isConnectSuccess:o().bool.isRequired,isNetworkError:o().bool.isRequired};const me=({isLoggedIn:t})=>{const n=(0,i.sprintf)(/* translators: %s expands to a link to Wincher login */ +(0,i.__)("This overview only shows you keyphrases added to Yoast SEO. There may be other keyphrases added to your %s.","wordpress-seo"),"{{wincherAccountLink/}}"),r=(0,i.sprintf)(/* translators: %s expands to a link to Wincher login */ +(0,i.__)("This overview will show you your top performing keyphrases in Google. Connect with %s to get started.","wordpress-seo"),"{{wincherLink/}}"),o=t?n:r;return(0,e.createElement)("p",null,(0,c.Z)({mixedString:o,components:{wincherAccountLink:(0,e.createElement)(J,{href:wpseoAdminGlobalL10n["links.wincher.login"]},(0,i.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,i.__)("%s account","wordpress-seo"),"Wincher")),wincherLink:(0,e.createElement)(ee,{href:wpseoAdminGlobalL10n["links.wincher.about"]},(0,i.sprintf)(/* translators: %s : Expands to "Wincher". */ +(0,i.__)("%s","wordpress-seo"),"Wincher"))}}))};me.propTypes={isLoggedIn:o().bool.isRequired};const ye={results:[{id:0,keyword:"wincher",position:{value:84,history:[{value:90},{value:89},{value:94},{value:98},{value:84}]}},{id:1,keyword:"rank tracker",position:{value:20,history:[{value:50},{value:30},{value:66},{value:15},{value:20}]}},{id:2,keyword:"performance",position:{value:2,history:[{value:44},{value:66},{value:18},{value:31},{value:2}]}}]},fe=({isBlurred:t,children:n})=>t?(0,e.createElement)(ne,{className:"yoast yoast-table"},n):(0,e.createElement)("table",{className:"yoast yoast-table"},n);fe.propTypes={isBlurred:o().bool,children:o().any};const ge=n=>{const{className:r,websiteId:o,isLoggedIn:s,onConnectAction:a,isConnectSuccess:c}=n,u=s?n.data:ye,p=!s,d=(e=>e&&!(0,l.isEmpty)(e)&&!(0,l.isEmpty)(e.results))(u),h=M(s);return(0,e.createElement)(te,{className:r},s&&(0,e.createElement)(Z,{isTitleShortened:!0,trackingInfo:h}),(0,e.createElement)(he,{...n,data:u,isConnectSuccess:c&&s}),d&&(0,e.createElement)(t.Fragment,null,(0,e.createElement)(me,{isLoggedIn:s}),(0,e.createElement)(re,null,(0,e.createElement)(fe,{isBlurred:p},(0,e.createElement)("thead",null,(0,e.createElement)("tr",null,(0,e.createElement)("th",{scope:"col",abbr:(0,i.__)("Keyphrase","wordpress-seo")},(0,i.__)("Keyphrase","wordpress-seo")),(0,e.createElement)("th",{scope:"col",abbr:(0,i.__)("Position","wordpress-seo")},(0,i.__)("Position","wordpress-seo")),(0,e.createElement)("th",{scope:"col",abbr:(0,i.__)("Position over time","wordpress-seo")},(0,i.__)("Position over time","wordpress-seo")),(0,e.createElement)("td",{className:"yoast-table--nobreak"}))),(0,e.createElement)("tbody",null,(0,l.map)(u.results,((t,n)=>(0,e.createElement)(ce,{key:`keyphrase-${n}`,keyphrase:t,websiteId:o,isBlurred:p}))))),(0,e.createElement)(ie,{isLoggedIn:s,onConnectAction:a})),(0,e.createElement)("p",{style:{marginBottom:0,position:"relative"}},(0,e.createElement)(X,{href:wpseoAdminGlobalL10n["links.wincher.login"]},(0,i.sprintf)(/* translators: %s expands to Wincher */ +(0,i.__)("Get more insights over at %s","wordpress-seo"),"Wincher")))))};ge.propTypes={className:o().string,data:o().object.isRequired,websiteId:o().string.isRequired,isLoggedIn:o().bool.isRequired,isConnectSuccess:o().bool.isRequired,isNetworkError:o().bool.isRequired,onConnectAction:o().func.isRequired},ge.defaultProps={className:"wincher-seo-performance"};const we=ge;class be{constructor(e,t={},n={}){this.url=e,this.origin=new URL(e).origin,this.eventHandlers=Object.assign({success:{type:"",callback:()=>{}},error:{type:"",callback:()=>{}}},t),this.options=Object.assign({height:570,width:340,title:""},n),this.popup=null,this.createPopup=this.createPopup.bind(this),this.messageHandler=this.messageHandler.bind(this),this.getPopup=this.getPopup.bind(this)}createPopup(){const{height:e,width:t,title:n}=this.options,r=["top="+(window.top.outerHeight/2+window.top.screenY-e/2),"left="+(window.top.outerWidth/2+window.top.screenX-t/2),"width="+t,"height="+e,"resizable=1","scrollbars=1","status=0"];this.popup&&!this.popup.closed||(this.popup=window.open(this.url,n,r.join(","))),this.popup&&this.popup.focus(),window.addEventListener("message",this.messageHandler,!1)}async messageHandler(e){const{data:t,source:n,origin:r}=e;r===this.origin&&this.popup===n&&(t.type===this.eventHandlers.success.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.success.callback(t)),t.type===this.eventHandlers.error.type&&(this.popup.close(),window.removeEventListener("message",this.messageHandler,!1),await this.eventHandlers.error.callback(t)))}getPopup(){return this.popup}isClosed(){return!this.popup||this.popup.closed}focus(){this.isClosed()||this.popup.focus()}}class ve extends t.Component{constructor(){super(),this.state={wincherData:{},wincherWebsiteId:wpseoWincherDashboardWidgetL10n.wincher_website_id,wincherIsLoggedIn:"1"===wpseoWincherDashboardWidgetL10n.wincher_is_logged_in,isDataFetched:!1,isConnectSuccess:!1,isNetworkError:!1},this.onConnect=this.onConnect.bind(this),this.getWincherData=this.getWincherData.bind(this),this.performAuthenticationRequest=this.performAuthenticationRequest.bind(this),this.onConnectSuccess=this.onConnectSuccess.bind(this),this.onNetworkDisconnectionError=this.onNetworkDisconnectionError.bind(this)}componentDidMount(){const e=jQuery("#wpseo-wincher-dashboard-overview-hide");e.is(":checked")&&this.fetchData(),e.on("click",(()=>{this.fetchData()}))}fetchData(){this.state.isDataFetched||(this.state.wincherIsLoggedIn&&this.getWincherData(),this.setState({isDataFetched:!0}))}async getWincherData(){const e=await async function(e=null,t=null,n=null,r){return await F({path:"yoast/v1/wincher/keyphrases",method:"POST",data:{keyphrases:e,permalink:n,startAt:t},signal:r})}();if(200===e.status){const t=(0,l.filter)(e.results,(e=>!(0,l.isEmpty)(e.position))),n=(0,l.sortBy)(t,(e=>e.position.value)).splice(0,5);this.setState({wincherData:{results:n,status:e.status}})}else this.setState({wincherData:{results:[],status:e.status}})}async performAuthenticationRequest(e){if(200!==(await async function(e){const{code:t,websiteId:n}=e;return await F({path:"yoast/v1/wincher/authenticate",method:"POST",data:{code:t,websiteId:n}})}(e)).status)return;this.setState({wincherIsLoggedIn:!0,wincherWebsiteId:e.websiteId.toString()}),await this.getWincherData();const t=this.loginPopup.getPopup();t&&t.close()}async onConnectSuccess(e){this.setState({isConnectSuccess:!0,isNetworkError:!1}),await this.performAuthenticationRequest(e)}async onNetworkDisconnectionError(){this.setState({isConnectSuccess:!1,isNetworkError:!0})}async onConnect(){if(this.loginPopup&&!this.loginPopup.isClosed())return void this.loginPopup.focus();const{url:e}=await async function(){return await F({path:"yoast/v1/wincher/authorization-url",method:"GET"})}();e&&void 0!==e?(this.loginPopup=new be(e,{success:{type:"wincher:oauth:success",callback:e=>this.onConnectSuccess(e)},error:{type:"wincher:oauth:error",callback:()=>{}}},{title:"Wincher_login",width:500,height:700}),this.loginPopup.createPopup()):this.onNetworkDisconnectionError()}render(){return(0,e.createElement)(we,{key:"wincher-performance-report",data:this.state.wincherData,websiteId:this.state.wincherWebsiteId,isLoggedIn:this.state.wincherIsLoggedIn,isConnectSuccess:this.state.isConnectSuccess,isNetworkError:this.state.isNetworkError,onConnectAction:this.onConnect})}}const Ee=document.getElementById("yoast-seo-wincher-dashboard-widget");Ee&&(0,t.render)((0,e.createElement)(ve,null),Ee)})()})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/js/dist/workouts.js b/wp/wp-content/plugins/wordpress-seo/js/dist/workouts.js new file mode 100644 index 00000000..f95b747a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/js/dist/workouts.js @@ -0,0 +1,6 @@ +(()=>{"use strict";var e={n:t=>{var o=t&&t.__esModule?()=>t.default:()=>t;return e.d(o,{a:o}),o},d:(t,o)=>{for(var a in o)e.o(o,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:o[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{CLEAR_ACTIVE_WORKOUT:()=>te,CLEAR_INDEXABLES:()=>re,CLEAR_INDEXABLES_IN_STEPS:()=>le,FINISH_STEPS:()=>J,MOVE_INDEXABLES:()=>ae,OPEN_WORKOUT:()=>ee,REGISTER_WORKOUT:()=>H,REVISE_STEP:()=>Q,SET_WORKOUTS:()=>Z,TOGGLE_STEP:()=>oe,TOGGLE_WORKOUT:()=>Y,clearActiveWorkout:()=>de,clearIndexables:()=>he,clearIndexablesInSteps:()=>ke,finishSteps:()=>se,initWorkouts:()=>ue,moveIndexables:()=>we,openWorkout:()=>pe,registerWorkout:()=>ne,reviseStep:()=>ce,toggleStep:()=>me,toggleWorkout:()=>ie});var o={};e.r(o),e.d(o,{getActiveWorkout:()=>Se,getFinishedSteps:()=>Ee,getFinishedWorkouts:()=>ye,getIndexablesByStep:()=>ge,getLoading:()=>ze,getWorkouts:()=>fe});const a=window.React,r=window.wp.data,l=window.wp.components,n=window.wp.domReady;var s=e.n(n);const c=window.wp.apiFetch;var i=e.n(c);const u=window.wp.compose,p=window.lodash,d=window.yoast.propTypes;var m=e.n(d);const w=window.wp.i18n,h=window.wp.element,k=window.yoast.componentsNew;function f(e){return(0,a.createElement)(l.Slot,{name:e.name},(t=>0===t.length?e.children:t))}f.propTypes={name:m().string.isRequired,children:m().oneOfType([m().node,m().arrayOf(m().node)])},f.defaultProps={children:null};const E=window.yoast.helpers;function g({name:e,title:t,subtitle:o,usps:l,id:n,image:s,finishableSteps:c,finishedSteps:i,upsellLink:u,upsellText:p,workout:d,badges:m}){const{openWorkout:f,toggleWorkout:g}=(0,r.useDispatch)("yoast-seo/workouts"),y=(0,r.useSelect)((e=>e("yoast-seo/workouts").getActiveWorkout()),[]),[z,S]=(0,h.useState)(!1),b=d,v=s;(0,h.useEffect)((()=>{c&&i&&i.length===c.length?S(!0):S(!1)}),[i,c]);const M=(0,h.useMemo)((()=>i&&0!==i.length?i.length{f(e),z&&g(e)}),[d,z,f,g]),x=(0,E.makeOutboundLink)(),_=p||(0,w.sprintf)(/* translators: %s : Expands to the add-on name. */ +(0,w.__)("Unlock with %s!","wordpress-seo"),"Premium"),A=d?"":" card-disabled";return(0,a.createElement)(h.Fragment,null,!y&&(0,a.createElement)("div",{id:n,className:`card card-small${A}`},(0,a.createElement)("h2",null,t," ",m),(0,a.createElement)("h3",null,o),(0,a.createElement)("div",{className:"workout-card-content-flex"},(0,a.createElement)("ul",{id:`${n}-usp-list`,className:"yoast-list--usp"},l.map(((e,t)=>(0,a.createElement)("li",{id:`${n}-usp-${t}`,key:`${n}-${t}`},e)))),s&&(0,a.createElement)(v,null)),(0,a.createElement)("span",null,d&&(0,a.createElement)(k.NewButton,{id:`${n}-action-button`,className:"yoast-button yoast-button--"+(z?"secondary":"primary"),onClick:B},M),!d&&(0,a.createElement)(x,{id:`${n}-upsell-button`,href:u,className:"yoast-button yoast-button-upsell","data-action":"load-nfd-ctb","data-ctb-id":"f6a84663-465f-4cb5-8ba5-f7a6d72224b2"},_,(0,a.createElement)("span",{"aria-hidden":"true",className:"yoast-button-upsell__caret"})),c&&i&&(0,a.createElement)("div",{className:"workout-card-progress"},(0,a.createElement)(k.ProgressBar,{id:`${n}-progress`,max:c.length,value:i.length}),(0,a.createElement)("label",{htmlFor:`${n}-progress`},(0,a.createElement)("i",null,(0,w.sprintf)( +// translators: %1$s: number of finished steps, %2$s: number of finishable steps +(0,w.__)("%1$s/%2$s steps completed","wordpress-seo"),i.length,c.length)))))),d&&y===e&&(0,a.createElement)(b,null))}var y;function z(){return z=Object.assign?Object.assign.bind():function(e){for(var t=1;ta.createElement("svg",z({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 296 317"},e),y||(y=a.createElement("g",{fill:"none",transform:"matrix(-1 0 0 1 295.274 .96)"},a.createElement("circle",{cx:131.18,cy:184.261,r:131.18,fill:"#F0ECF0"}),a.createElement("g",{fill:"#EAB881"},a.createElement("path",{d:"M236.42 96.56c-.15-.43-.29-.87-.44-1.3.15.43.29.87.44 1.3zm-31.98 59.96a11 11 0 0 0-2.11.82c.67-.3 1.4-.56 2.11-.82zm-2.11.82a58.65 58.65 0 0 0-6 2.81c2.67-1.11 4.56-2.11 6-2.81z"}),a.createElement("path",{d:"M293.49 164.27c-8.58-10.51-1.05-27.75-34.52-86.31-3-5.22-5.26-14.52-12.85-17.58-9.11-3.67-12.77-9.16-21.89-12.83-6.85-2.76-4-1.36-3.21-.49 1.49 1.67-2-1.31-5.72 7.13-.38.85 2.86 1.63 4 5 .36 1.07.49 1.14 1.23 1.33 4.71 1.2 6.52 6.89 4.2 10.06-.7-1.43.18-6-4.68-6.36 2 1.44 4.06 3.42 4 5.88 9.4 16.64 17.56 14 20 15 12.43 4.92-17.28 64.57 23 86.13-7.34-1.94-14.31-5.46-23.92-1.33 7.28-5.53 2.46-7.57.86-10.89-2.17-2.92-2.29-11.71-2.6-22.62a103.2 103.2 0 0 0 1.09 20.32 54.8 54.8 0 0 0-38-.12c5.19-1.21 15.45 48.34 20.15 53.9 3.8-1.4 23-8.57 35.17-14.11 21.52-9.81 34.94-25.76 35.44-28.31.24-1.47-.85-2.71-1.75-3.8zm-41.62-99.13c.06.1 8.87 19.59.56 1.21-.2-.44-.38-.84-.56-1.21z"}),a.createElement("path",{d:"M215.17 56.04c.46.17 2 1.49-.23-.93-.88 2.39-.6 4.42 2 6.74 1.06-3 0-3.51-1.77-5.81zm-4.33 23.82c.28-.07.36.05-.35-.38l.35.38z"})),a.createElement("path",{fill:"#D38053",d:"M203.74 73.77c0 .4-.33-.06 2.94 2.38l-2.94-2.38zm5.26 4.27c2.3 2 3.13 2.53 2.19 1.77L209 78.04zm6.17-22c.05.06 1.79 2.31 1.83 2.38-.49-1.27-.83-2.01-1.83-2.38zm-.52 11.73c1.38-.08.73 1.34 2.16-.5.52-.67 1.91-3.21.71-2.6.56-2.33-.09-6.71-.19-4.75-.13 2.46-3.7 10.77-8.67 9.87a7.6 7.6 0 0 0 3.25.22c2.74-.39 2.36-.97 2.74-2.24zm-5.99 2.02a6.27 6.27 0 0 1-1.42-.59c.42.309.906.51 1.42.59z"}),a.createElement("path",{fill:"#D38053",d:"M214.2 69.33a4.13 4.13 0 0 1-.85 3.73c3.38-1.27 3.66-3.51 2.48-4.78-1.18-1.27-1.34.03-1.63 1.05zm-32.31 1.85c.11.84 2.61 2.33 3.3 2.78a13.33 13.33 0 0 1-3.3-2.78zm10 4.39c-.21.13-.45.1.31 0-.28-.12-.13-.1-.31 0zm-6.51-1.53a29.79 29.79 0 0 0 4.51 2.28c2.54-1.52.8.82-4.51-2.28z"}),a.createElement("path",{fill:"#EAB881",d:"M202.61 77.13c-.91.35-5.67.26-10.41-1.57-6.74 1-6.41 12.08-1 12.4 8.18.48 10.11 3 13.48 1.92 6.82-2.28 2.4-11.62-2.07-12.75z"}),a.createElement("path",{fill:"#D38053",d:"M217.52 64.67a4.92 4.92 0 0 1 2.54-.48c4.87.36 4 5 4.68 6.36 2.31-3.16.52-8.86-4.2-10.06-2.25-.57.56-2.91-7.86-7.27a10.79 10.79 0 0 1 4.84 11.45zm15.23 112.51c-6.79 1.78-17.9 1.65-21-5.2 3.71 11.1 9 26.86 12.86 37.68 2.88-.89 7.41-1.86 8.89-3.4-3.52-4.16-8.67-10.41-8.74-15.89-.07-5.48 2.92-11.16 7.99-13.19zm-26.31-20.36c-.14.17-.15 0 .53 1.27-.18-.46-.35-.89-.53-1.27z"}),a.createElement("path",{fill:"#D38053",d:"M246.11 86.55c-2.26-3.64-4.21.58 2.23-3.3-10.49 4.56-18.5-2.9-24.34-13.21-.05 1.82-1.23 3.13-2.61 4.36-9.64 8.64-10.89 4.95-12.39 3.64-8-7-3.86-2.44-6.09-1-.71.46 4.08 1 5.31 7.11a5.26 5.26 0 0 1-2.67 5.38c7.41 5.8 14.7 2.46 25.68-4.09 14.67 22.17 7.38 66.27 12.78 73.54 1.6 3.32 6.42 5.36-.86 10.89 9.61-4.13 16.58-.61 23.92 1.33-37.63-20.16-14.29-73.91-20.96-84.65z"}),a.createElement("path",{fill:"#A52A6A",d:"M190.92 211.52a81.3 81.3 0 0 0-9.26-12.14c6.41 7.94 17.18 24.84 9.26 12.14z"}),a.createElement("path",{fill:"#A52A6A",d:"M205.85 156.04c-31.36 13.6-26.45 13.21-42 8.34-18.87-5.91-37.14-.76-32.1-1.07 11.82-.72 29.07 49.31 35.44 66.88l62.17-10.35c.64 7.64-20.9-59.34-23.51-63.8z"}),a.createElement("path",{fill:"#7C2050",d:"M214.23 180.31c-8.73 13.9-32.09 11.23-35.71-4.78 8 32.54 8.23 20.07-9.5 9.69 25.36 25.8 22.47 41.74 28.27 44.5 3.49 1.65 13.65-3.77 26.3-7.69 3.3-1 4.88-1.61 4.76-2.19l-14.12-39.53z"}),a.createElement("path",{fill:"#EAB881",d:"M192.93 72.9a3 3 0 0 1-.92 2.58 25.5 25.5 0 0 0 9.52 1.8c2.47-.02.6.27-8.6-4.38z"}),a.createElement("path",{fill:"#EAB881",d:"M220.06 64.19c-3.36-.25-1 1.37-4.23 4.09 1.18 1.27.9 3.51-2.48 4.78a4.07 4.07 0 0 0 .85-3.73c-2.67 1.26-5.78.74-7-.13 4.38 2.46 8.07-2.64 9.69-7.37-2.58-2.31-2.87-4.34-2-6.74-1.19-1.31-4.4-3.35.19-.49a25 25 0 0 1 2.94-5.18c1.27-1.71 5.22-.83 1.65-3.46-1.76-1.3-8.08-2.63-8.81-2.59a4.11 4.11 0 0 0-3.06 1.53c-4.33-1.59-9.29-1.86-11.78 2-4.24-3.58-9.38 2.15-7.77 6.69 1.44 4-1.86.15-7.06 14.62-1.27 3.54 5.07 7 8.77 7.58 7.7 1.25-18.75-8.93 2.24-.45 3.4 2.66 5.28 1.49 10.44 1.8 1.08-.47 1-1.92 1.05-3.09 0-1.84 6.81 8.52 10.32 5.44 8.71-4.45 13.99-9.58 6.05-15.3z"}),a.createElement("path",{fill:"#EAB881",d:"M192.51 69.95c.38.94.28.45 0-2.57a4.18 4.18 0 0 0 0 2.57z"}),a.createElement("path",{fill:"#D38053",d:"M194.68 57.19a15.87 15.87 0 0 0 .36-1.77c-.14.62-.25 1.18-.36 1.77z"}),a.createElement("path",{fill:"#A52A6A",d:"M59 167.04c-7.75 3.79-5.09 3.25-3.46 3.59a74.937 74.937 0 0 0 3.46-3.59zm69-3.33-.77-.17c.242.112.504.17.77.17z"}),a.createElement("path",{fill:"#A52A6A",d:"M200.06 262.44c1.23-17.17 10-35.47-31-77.22-8.89-9-13.84-13.86-31.69-19.13 6.35 7.45-.5 40.2-3.43 38.36-25.84-16.17-70.31-19.82-79.39-32.84 6.7-6.24-28.46 5.48-39.7 16.24-3.57 3.42-8.13 12.77-12.22 22.43 8.53 42.43 41.23 74.66 42.5 72 3.64-7.7 7.17-15.66 6.64-14.47 11.84 12.23 19.29 19.48 23.78 35.23A131 131 0 0 0 201 295.25c-.06-16.21-1.3-27.79-.94-32.81zm-145.78-.4c.1 0 0-.08-1.06 2.38.36-.79.71-1.59 1.06-2.38z"}),a.createElement("path",{fill:"#7C2050",d:"M53.29 267.84c5.65 7.53 33.06 17 44.3 27a280 280 0 0 1-35.06-36.66 203.23 203.23 0 0 0 49.54 9.79l-47.15-13.12c.667-5.7 1.333-11.393 2-17.08-3.35 4.49-11.74 22.07-13.63 30.07zm125.12-18.17c-12.42-1.14-45.91 6.44-50.79 17 18.32-12.22 51.08-16.81 54.55.56-.17-1.02 12.83-16.03-3.76-17.56z"}),a.createElement("path",{fill:"#EAB881",d:"M124.39 155.75c0 .21.1.43.16.64-.06-.21-.11-.43-.16-.64zm-57.05-39.34c-.59 0-.52-.25 0 1.56 1.53 2.37.74 1.51 0-1.56zm56.8 38.33.12.46-.12-.46zm-69.63 16.87c9.09 13 53.53 16.65 79.39 32.84 2.16 1.35 8.75-21.75 4.69-36.08-1.9-6.72-10.19-4.65-10.62-4.66-1 0-1.46-.64-1.83-1.66-.68-1.91-1.52-5.36-1.48-5.21-1.23 4.07-1.68 6.59-3.49 7.5-6.48 3.24-37.85-9.4-52.25-41 .62 2.53 1.06 5.26-1 3.64 3.8 16.54 5.92 26.64-13.41 44.63z"}),a.createElement("path",{fill:"#D38053",d:"M107.65 148.64c-20.65-5.6-33.72-12.94-37.72-32.87-3.26 1.48-3.22-1.55-1 7.6 14.4 31.56 45.77 44.21 52.25 41 2.15-1.07 3.54-7.31 3.38-8-2.21-8.85 2.2-2.53-16.91-7.73z"}),a.createElement("path",{fill:"#EAB881",d:"M140.75 66.31c-3-9.44-7.65-19.56-11.74-25.21a15.73 15.73 0 0 1-8.82-3.17c-7.48 8.26-15.45 4.83-16.65 0-1.68 5.91-9.62 9-14.83 5.74a6.35 6.35 0 0 0 4.78-2.95 18.42 18.42 0 0 1-15.21-2.12c-6-.8-4.66-.93-1.31 4.28 7.29 11.35 4.24 15-4.14 23.72C62.7 77.12 70.69 82.04 74 85.14c6.7 6.17 1.74 13-5.65 12.35 4.88 8.65 5.25 9.2 5.41 10.7.34 3.25-1 6.28-3.86 7.58 4 19.73 16.77 27.17 37.72 32.87 6.48 1.76 13.43 3.33 20 1.88 6.57-1.45 12.87-6.74 13.24-13.51.22-4.11-1.69-10-1.26-14 .68-6.64 5.94-5 6.24-21a112.12 112.12 0 0 0-5.1-35.45"}),a.createElement("path",{fill:"#D38053",d:"M121.63 67.04c-.14 1.89.33 11.5 1.43 14.94 2.29 7.11 7.13 6.6 10.67 8.13 4.36 1.9 5.64 6.66-1.58 8.75-3.85 1.12-7.92 2.25-11.82 1.33 1.4 1.63 3.81 1.84 6 1.84 14.73 0 15.5-9 13.14-12.25-3.67-5.06-12.38-1.31-15.58-12.81-.81-2.74.11-8.51-2.26-9.93z"}),a.createElement("path",{fill:"#000",d:"M110.39 112.3c-10.66-3-13.86-7.32-14.77-5.86-1.15 1.83 18.2 12.62 29.48 6.84-5.03.06-9.69.44-14.71-.98zM86.23 73.61c1.75 0 7-6 8.82-7.15 3.63-2.2 7.63-1.08 11.78-2-.51-1.34-3.51-5.43-4.18-5.29-3.17.68-9.2.3-9.2.3s-13.18 14.27-7.22 14.14zm39.37-15.85c-5.09.43-3.23 1.61-2.29 5.5a18.92 18.92 0 0 1 17.63 3.35c-5.31-8.47-9.64-9.34-15.34-8.85z"}),a.createElement("path",{fill:"#FFF",d:"M91.39 85.5c4.56 6.52 15.3 4.23 18.45-1.77-.92-5.69-16.99-9.33-18.45 1.77zm9.87 1.69c-6.09 3.06-8.18-7.15-1.85-7.15 4.07 0 5.74 5.19 1.85 7.15zm25.58-4.58c2.38 3.65 14 2.53 14.28-3.35-4.19-9.42-16-4.69-14.28 3.35zm8.47-1.63a3.56 3.56 0 0 1-5.31 1.29c-2.29-1.87-1-6.45 2.58-6a3.57 3.57 0 0 1 2.73 4.71z"}),a.createElement("path",{fill:"#000",d:"M126.72 79.53c1.76-6.07 10.8-8.36 14.4-.27 1.07 2.38.95-6.79-5.3-7.23-3.92-.28-10.17.09-9.49 10a11.4 11.4 0 0 1 .39-2.5zm-27.31.51c-6.34 0-4.24 10.2 1.85 7.15 3.89-1.95 2.23-7.15-1.85-7.15z"}),a.createElement("path",{fill:"#000",d:"M132.6 76.26c-3.61-.44-4.87 4.14-2.58 6a3.4 3.4 0 1 0 2.58-6zm-63.68 47.11c-2.54-10.52-.32-4.66-9.77-9 5.12 9 12.19 18.98 9.77 9zM129 41.1c5.48 7.57 6.11 13.42 5.52 9.56a51.53 51.53 0 0 0-2.44-9.71 16.7 16.7 0 0 1-3.08.15z"}),a.createElement("path",{fill:"#000",d:"M137.16 26.23c3.42-12.58-5.26-13.54-7.57-11.18A10.51 10.51 0 0 0 113.3 5.04c-3.11-5.35-12.48-8.78-24.25 2.14C88-.5 72.44 1.9 70.12 17.68c-5.8 1.09-8.67 4.26-10 6.8-5.74.56-24.3 24.19-25.12 32.06-.51 4.69 2 9.11 3.31 13.65.84 2.89 1.22 6 2.75 8.59 4 6.77 0 3.56 5 2.71 4.44-.75 16.29 5.15 22.4 16 3.66.32 7.38-.9 8.67-5.17 1.72-5.69-6.59-8.6-8.54-13.18-4.08-9.57 10.77-15 12.37-23.84 1-5.78-3.41-11.93-7.06-17.09 1.24 0 2.7.15 4.46.38-.16-.1-.3-.21-.45-.32a17.59 17.59 0 0 0 15.66 2.44 6.35 6.35 0 0 1-4.78 2.95c5.21 3.24 13.15.17 14.83-5.74 1.2 4.84 9.14 8.31 16.65 0a16.12 16.12 0 0 0 18.08.78 11.39 11.39 0 0 1-5.61-4.34c3.19.61 6.37-1.64 7.88-4.5 1.51-2.86 1.74-6.22 1.9-9.46a9.68 9.68 0 0 1-5.36 5.83zm-77.44 3.81-.08-.11.08.11zm-.5-3.51v.09c0-.37.06-.82.09-1.36-.05.48-.07.89-.09 1.24v.03zm14.53 7.72a18.09 18.09 0 0 0 4.06 4 16.75 16.75 0 0 1-4.06-4.03v.03zm-.59-.86.24.35-.24-.35z"}),a.createElement("path",{fill:"#000",d:"M97.49 76.04c-3.73.6-7.38 4.53-6.58 9 1-2.29 1.84-4.94 5.06-6.12 4.28-1.56 11.29-.39 13.75 4.36 1.38 2.65.02-9.24-12.23-7.24z"}),a.createElement("path",{fill:"#EAB881",d:"M73.79 108.19c-.16-1.5-.53-2.05-5.41-10.7-6.11-10.84-17.95-16.75-22.38-16-7.48 1.27-15.82 21.55 15.3 33.82 8.33 3.28 13.12-1.13 12.49-7.12z"}),a.createElement("path",{fill:"#D38053",d:"M96 105.92c2.11-2.9 10.26 2.05 16.39-5.72.79-1 1.41-4 3.31-3.71-5.06-.88-6.61 8.28-14.23 6.32-3.12-.81-9-5.15-10 11.67a58.56 58.56 0 0 1 4.53-8.56zm-33.55-5.55c4.3-10.34-20.92-21.24-19.6-7 .3 3.21 2.29 8.83 5.31 9.81-2.45-5.37.27-12.44 1.57-13.5 2-1.61 4.51.76 7.4 2.9-.13 1.68-2.51 2.46-2.65 4.09-.12 1.31 1.07 2.94 5.05 2a7.72 7.72 0 0 1-2.17 5 5.2 5.2 0 0 0 5.09-3.3zm130.32-29.93a3.7 3.7 0 0 1-.27-3.06c4.45-17.69 1.95-7.91-1.07-3.12-2.38 3.78-3.24 6.3.67 8.22 23 11.28 1.9-.25.67-2.04z"}),a.createElement("path",{fill:"#D38053",d:"M192.25 75.29c-2.41-1-6.47-3.9-6.5-5.61 0-1.15 4.89-8.09 3.9-14.36-1.07 1.71-6.51 12.19-6.39 14.2.23 3.86 9.09 5.81 8.99 5.77zm13.21-25.34c-.16 1.86-6.76 14.12-6.76 18.83.36 1.09 4.49 2.16 4.71 3.29-6.82-5.17 3.5-20.43 2.05-22.12z"})))),b="cornerstone",v="orphaned",M="chooseCornerstones",B="checkLinks",x="addLinks",_="improveRemove",A="update",O="addLinks",F="removed",T="noindexed",W="improved",C="skipped",R={cornerstone:[M,B,x],orphaned:[_,A,O]};function D({workout:e,badges:t,upsellLink:o,upsellText:l}){const n=(0,r.useSelect)((e=>e("yoast-seo/workouts").getFinishedSteps(b))),s=o||"https://yoa.st/workout-cornerstone-upsell";return(0,a.createElement)(g,{id:"cornerstone-workout-card",name:b,title:(0,w.__)("The cornerstone approach","wordpress-seo"),subtitle:(0,w.__)("Rank with articles you want to rank with","wordpress-seo"),usps:[(0,w.__)("Make your important articles rank higher","wordpress-seo"),(0,w.__)("Bring more visitors to your articles","wordpress-seo")],image:S,finishableSteps:R.cornerstone,finishedSteps:n,upsellLink:s,upsellText:l,workout:e,badges:t})}var L;function I(){return I=Object.assign?Object.assign.bind():function(e){for(var t=1;ta.createElement("svg",I({xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",viewBox:"0 0 299 322"},e),L||(L=a.createElement("g",{fill:"none",transform:"matrix(-1 0 0 1 298.412 0)"},a.createElement("circle",{cx:131.2,cy:190.029,r:131.2,fill:"#F0ECF0"}),a.createElement("path",{fill:"#F9BF8C",d:"M262.5 92.23c-1 1.2-3 2.9-7.5 5a18.4 18.4 0 0 1-10.9 1.6c-.5-1-1-2.2-1.7-3.3l.4-.2.3-.2a14 14 0 0 0 3.3-.2c2.4.2 4.7-.6 6.9-3.2 3.1-3.9 1.7-10.7-1.3-14.6 2.6 2.5 4 5.7 6.4 8.6a231 231 0 0 1 3.3 4c.1.4 1.5 1.8.8 2.5zm-90.9 98.2a17.1 17.1 0 0 1 4 14.3c-11-7.9-22-18.9-31.8-37.8 26.5 1 39.4 8.8 39.5 8.7 43-17.2 51.7 1.5 66.8-6.3 2.3 4.7 5.3 6.3 8.4 9.4-13.5-13.9 5.7-22-5.1-57.7 7.3 0 20.8-4.8 22.9-9.7 14.8 26.3 10.5 39.9 17.8 54.6.6 1.2 2.3 6.7 3.5 8.2 2 2.8 0 7.7-2.7 10.6-29.7 32.8-68.9 33.6-93.5 36.8-6.4-4.6-13.8-8.5-21.5-13.7-1-5.1-1.2-11.2-8.3-17.4z"}),a.createElement("path",{fill:"#DB7A53",d:"M253.4 121.03c10.8 35.8-8.4 43.8 5.1 57.8-3-3.2-6-4.8-8.4-9.5a52.999 52.999 0 0 1-.3-2.2 50.2 50.2 0 0 1-.4-5v-2l.1-3.6.1-1.8.3-3.7.4-3.7.6-5.6a153.4 153.4 0 0 0 .6-9.5v-2a69 69 0 0 0-.3-7.8l-.2-1.6a10.5 10.5 0 0 0 2.4.3v-.1zm-11-25.6 1.7 3.4h-.1c-1.9-.1-2.3-2.3-2.7-2.6l-.1-.2 1.2-.6z"}),a.createElement("path",{fill:"#DB7A53",d:"M219.7 95.53c-.7-1.6-3-3-5.5-3.6.1-.011.2-.011.3 0a8.4 8.4 0 0 0 5.1-1.3l-.3-.2a1.6 1.6 0 0 0 .2 0 3.3 3.3 0 0 0 2.7-.6 34.2 34.2 0 0 0 6.4-4 5 5 0 0 0 2-2.8l.4.3c-.7 6.5 5.4 11.5 12.1 11.9l-.3.1-.4.2-1.2.6c-3.8 1.9-11 5.7-13.6 5.6-2.9 0-6.9-2.2-9.8-3.9 1.4-.5 2.3-1.2 1.9-2.3z"}),a.createElement("path",{fill:"#F9BF8C",d:"M223.7 76.23v.3a3.7 3.7 0 0 1-.2 1.3c-1.3-.7-2.4-1.5-2.6-2.6a3.2 3.2 0 0 1 .3-1.7 7.1 7.1 0 0 1 2.5 2.7z"}),a.createElement("path",{fill:"#F9BF8C",d:"M253.3 91.73c-2.1 2.6-4.5 3.4-6.9 3.2a13 13 0 0 0 5.2-2.3c-6 2.7-10.5 1.1-13.8-1.5a36.9 36.9 0 0 1-4.7-5.3c-1.1-1.6-1.8-2.8-2.1-2.9a3 3 0 0 0 0 .3l-.3-.3a2.4 2.4 0 0 0-.9-2 10.2 10.2 0 0 0-3.2-1.9 5.5 5.5 0 0 1 2.9.6c1.6.9 1 2.1 1.8 3.1a3.3 3.3 0 0 0 .2-3.7c-.8-1.3-4-1.1-6.1-1.3a2.3 2.3 0 0 0 0-.2l.8-1a1.3 1.3 0 0 1-.7-.8c-.8-1.2-2.4-2-4.2-2.6l.1-.2a16.4 16.4 0 0 1 2.2-3.5c.7-.8 5.5-.3 6.1-.6a21 21 0 0 0 2.5.7l16.8 5.1a7.8 7.8 0 0 1 3 2.5c3 3.9 4.4 10.7 1.3 14.6z"}),a.createElement("path",{fill:"#F9BF8C",d:"M228.6 85.73a34.2 34.2 0 0 1-6.4 4 3.3 3.3 0 0 1-2.6.6c1.5-.6 2.1-2.3.7-2.8l-.8-3.8a10 10 0 0 0 2-.7v.1c.5.8.4 4-.4 4.6 1-.2 2.2-3.1 2.5-4a1.3 1.3 0 0 0-.6-1.5 5.2 5.2 0 0 0 .8-.8 6.7 6.7 0 0 0 1.3-2 6.3 6.3 0 0 1 1.5-.4 10.2 10.2 0 0 1 3.2 1.9 2.4 2.4 0 0 1 .9 2 5 5 0 0 1-2.1 2.8zm-5-16.3a16.4 16.4 0 0 0-2.2 3.5l-.1.2a39 39 0 0 0-2.4-.6 9 9 0 0 1 2.3 1 3.2 3.2 0 0 0-.3 1.7c.3 1.1 1.3 2 2.6 2.6a11.3 11.3 0 0 1-.9 1.8 9.3 9.3 0 0 1-2.7 3.3l-.5.3-3.4-15.4-2.1-.3a4.4 4.4 0 0 1 2.7-1.4 35.6 35.6 0 0 1 13 2.7c-.5.3-5.3-.2-6 .6z"}),a.createElement("path",{fill:"#F9BF8C",d:"M219.4 83.23a6 6 0 0 1-2.8.7 7.8 7.8 0 0 1-1.5-.2 4 4 0 0 0 1.5.2 9.8 9.8 0 0 0 3-.2l.7 3.8c1.4.5.8 2.2-.7 2.8h-.1a1.6 1.6 0 0 1-.2 0 39 39 0 0 0-7-3c-.3-3.4-.6-6.7-2-9.7 1.7-2.8 3.2-5.6 1.7-6.6 0 1.3-1.1 3.4-2.4 5.4a13.3 13.3 0 0 0-1.2-1.7 13 13 0 0 0-5.2-3.6c.8-1.7 1.4-3.5 3.7-3.8a24.3 24.3 0 0 1 6.9.2l2.1.3 3.5 15.4z"}),a.createElement("path",{fill:"#DB7A53",d:"M223.7 76.23a5 5 0 0 1 .6 3.4 7 7 0 0 1 .8-.3 6.7 6.7 0 0 1-1.3 2.1 5.2 5.2 0 0 1-.8.8 1.7 1.7 0 0 0-1.2-.2l-.2 1a10 10 0 0 1-2 .7 9.8 9.8 0 0 1-3 .2 6 6 0 0 0 2.8-.7l.5-.3a9.3 9.3 0 0 0 2.7-3.3 11.3 11.3 0 0 0 1-1.9 3.7 3.7 0 0 0 .1-1.3v-.2zm1.6 1.3c.007.1.007.2 0 .3v-.3z"}),a.createElement("path",{fill:"#DB7A53",d:"M223 82.23c.524.3.773.92.6 1.5-.3.9-1.4 3.8-2.5 4 .8-.7 1-3.8.5-4.6v-.1l.3-1a1.7 1.7 0 0 1 1.1.2z"}),a.createElement("path",{fill:"#F9BF8C",d:"M201.4 91.73a3.1 3.1 0 0 0-.8.7c-2-.9-3.9-2.7-5.7-3.4-.5-.1-2.7-.8-2.9-1.4a13.7 13.7 0 0 0 5.2 2 43 43 0 0 0 4.2 2v.1zm.1-2.2h.1a30.3 30.3 0 0 0 5.4.4 30 30 0 0 0 3.6 1.6c-2.6-.3-5.7-1-8-.4l-2.2-1.3a2.7 2.7 0 0 0 1.1-.3zm13 2.5a1.4 1.4 0 0 0-.3 0 10.6 10.6 0 0 0-2-.4h-.4a26.6 26.6 0 0 1-3-1.8l1.7-.1a3.2 3.2 0 0 0 1.3-.4 1.2 1.2 0 0 0 .5-1l6.7 2.7-6.7-3.6a39 39 0 0 1 7 3c.1.2.3.2.4.3a8.4 8.4 0 0 1-5.2 1.3z"}),a.createElement("path",{fill:"#DB7A53",d:"M225 79.33a7 7 0 0 0-.7.3 5 5 0 0 0-.6-3.4 7.1 7.1 0 0 0-2.5-2.7 9 9 0 0 0-2.2-1l2.3.7c1.8.5 3.4 1.3 4.2 2.6a1.3 1.3 0 0 0 .6.6c.2 0-.5.7-.8 1.1v.3c2.2 0 5.4-.1 6.2 1.2a3.3 3.3 0 0 1-.2 3.8c-.8-1-.2-2.3-1.8-3.2a5.5 5.5 0 0 0-3-.6 6.3 6.3 0 0 0-1.4.3h-.1zm6 3.9a3 3 0 0 1 0-.3c.3 0 1 1.3 2 3a23.8 23.8 0 0 0 4.8 5.2c3.3 2.6 7.8 4.2 13.8 1.6a13 13 0 0 1-5.2 2.2 14 14 0 0 1-3.3.2c-6.7-.4-12.8-5.4-12.1-11.9z"}),a.createElement("path",{fill:"#F9BF8C",d:"M208.4 74.73c.478.53.913 1.099 1.3 1.7-1.4 2.2-3 4.3-3.5 5.3s-1.3 2.6-.3 3.6a38.8 38.8 0 0 0 6.4 3 1.2 1.2 0 0 1-.6 1 3.2 3.2 0 0 1-1.2.4l-1.8.1a14.4 14.4 0 0 0-3.6-1.9 13.4 13.4 0 0 1-3-1.2c0-.9-.3-2.4-.5-4 1.6-3 5-8.2 2.7-10.1.9 1.6-1.4 5.5-3 8l-.8-4a3.8 3.8 0 0 0 0-2 3.5 3.5 0 0 1-.2 1c-.4-1.6-.7-2.6-1-2.7-.9-.3-2 .6-3 2 1-2.2 1.5-4.1 4.7-4.1a7.3 7.3 0 0 1 2.2.4 13 13 0 0 1 5.2 3.5zm-6.1 13a39.6 39.6 0 0 1 4.7 2.2 30.3 30.3 0 0 1-5.3-.5 1.7 1.7 0 0 0 .6-1.7z"}),a.createElement("path",{fill:"#F9BF8C",d:"M207 84.53c-.2-1.3 1.6-4.1 3.3-6.9a27 27 0 0 1 2 9.7l-5.3-2.8zm-7.6-11.7c.3 0 .6 1.2 1 2.7-1.2 2.7-5.5 6.5-6.7 8.9a3.4 3.4 0 0 0-.6 2c.2.7 2 2 4.1 3.2a13.7 13.7 0 0 1-5.2-2l-.4-.3a1.7 1.7 0 0 1-.5-.5 1.5 1.5 0 0 1 0-1.2c.5-1.2 2.8-7.5 5.2-10.9 1-1.3 2.1-2.2 3-1.9h.1z"}),a.createElement("path",{fill:"#F9BF8C",d:"M199.4 86.63a5 5 0 0 0 2 .8l.9.3a1.7 1.7 0 0 1-.7 1.7v.1a2.7 2.7 0 0 1-1.2.3c-1.8-1-3.4-2.1-4.1-2.6-.4-.3-.8-.6-.9-1a1.7 1.7 0 0 1 .4-1c1.2-2 4-5.9 4.7-8.7l.7 4-1 1.5c-1 1.5-2.2 3.5-.8 4.6z"}),a.createElement("path",{fill:"#F9BF8C",d:"M201.2 86.03c-.5-.7-.6-.8-.4-1.7a9.9 9.9 0 0 1 .8-1.6l.5 4a3 3 0 0 1-.9-.7z"}),a.createElement("path",{fill:"#DB7A53",d:"M211.8 91.63h-1.2a30 30 0 0 1-3.6-1.7 39.6 39.6 0 0 0-4.7-2.2l-.8-.3a5 5 0 0 1-2-.8c-1.5-1.1-.3-3 .8-4.6l1-1.4c1.6-2.5 4-6.5 3.1-8 2.2 2-1.2 7-2.8 10.1a9.9 9.9 0 0 0-.7 1.6c-.3.9-.2 1 .4 1.7a3 3 0 0 0 .9.7 13.4 13.4 0 0 0 3 1.3 14.4 14.4 0 0 1 3.6 1.9 26.6 26.6 0 0 0 3 1.7z"}),a.createElement("path",{fill:"#DB7A53",d:"M195.8 85.33a1.7 1.7 0 0 0-.4 1c0 .4.5.7.9.9l4 2.6c.8.5 1.6 1 2.4 1.3a4.2 4.2 0 0 0-1.3.6 43 43 0 0 1-4.2-2c-2.1-1.3-4-2.6-4-3.3a3.4 3.4 0 0 1 .5-2c1.2-2.3 5.5-6.1 6.6-8.8a3.5 3.5 0 0 0 .3-1 3.8 3.8 0 0 1 0 2c-.8 2.8-3.6 6.6-4.8 8.7zm11.2-.8 5.3 2.8 6.7 3.7-6.7-2.6a38.8 38.8 0 0 1-6.4-3c-1-1-.4-2.4.3-3.5l3.5-5.4c1.3-2.2 2.4-4 2.4-5.3 1.5 1 0 3.7-1.8 6.5s-3.6 5.6-3.2 7l-.1-.2z"}),a.createElement("path",{fill:"#F9BF8C",d:"M201.4 91.73a4.2 4.2 0 0 1 1.3-.6c2.2-.5 5.3.1 7.9.4l1.2.1h.4a10.6 10.6 0 0 1 2 .3c2.4.6 4.8 2 5.4 3.6.5 1-.5 1.8-1.8 2.2a11.1 11.1 0 0 1-2 .4c-4.2.6-5.5 2-11.5 2.8-2.6.4-4.4-4-4.4-5.9a4.2 4.2 0 0 1 .7-2.6 3.1 3.1 0 0 1 .8-.7z"}),a.createElement("path",{fill:"#A52A6A",d:"M253.4 121.03a10.5 10.5 0 0 1-2.4-.2 5.3 5.3 0 0 1-.7-.2c-2.4-.9-8.6-17.6-9.3-21-.3-1.2-.3-3.5.3-3.4.3.3.8 2.5 2.7 2.5h.1a18.4 18.4 0 0 0 10.9-1.5c4.6-2.1 6.6-3.8 7.6-5 .6-.8-.7-2.2-.9-2.5.4-.4 1.3.1 1.7.3 5.9 2.8 10.2 12.7 13.1 19.4a2.9 2.9 0 0 1-.1 1.9c-2.1 5-15.6 9.8-23 9.8v-.1z"}),a.createElement("path",{fill:"#DB7A53",d:"M171.6 190.43c7 6.2 7.3 12.3 8.3 17.4l-4.4-3a17 17 0 0 0-3.9-14.4z"}),a.createElement("path",{fill:"#009288",d:"m41.3 265.93-.5.2c6.5 8.6 14.1 17.5 21 30.5a28.8 28.8 0 0 1 2.8 7.7c45.714 25.792 102.423 21.736 144-10.3-.8-3.5-1.7-7.1-2.8-11 12.67-7.311 18.506-22.484 14-36.4a43 43 0 0 0-18.4-25.1c-6.4-4.6-13.8-8.5-21.5-13.7l-4.4-3c-10.8-8-22-19-31.7-37.9l-.1-.2a71 71 0 0 0-19.9-2.3c12 5.8 41 37 4.2 43-29 3.1-47.3-27.9-84-28.7a47.8 47.8 0 0 0-13.5 9.4l-1 1a37 37 0 0 1 4.7-2c16.4 1 27 15.3 32.9 30.3 10.3 26.2 6.2 44.7-2.6 50.6-5.3 3.6-13.3 2.7-20-3.7l-1.5.7-1 .6-.7.3z"}),a.createElement("path",{fill:"#F9BF8C",d:"M29.5 189.23a37 37 0 0 1 4.5-2.2c16.4 1 27 15.3 33 30.3 10.3 26.2 6.2 44.7-2.6 50.6-5.3 3.6-13.4 2.7-20-3.7l-1.5.7c6.9-5.7 4.9-6.8 18-4.4-10.8-6.4-16.1-9.1-38.7 6.1a122.2 122.2 0 0 1-21.4-53.5 133 133 0 0 1 28.7-24.1v.2z"}),a.createElement("path",{fill:"#DB7A53",d:"M61 260.63c-13.2-2.4-11.1-1.3-18 4.4l-1 .6-.6.2-.6.3-.5.3-.6.3-1.1.6-.7.3-1 .6-.7.4-1.2.6-.6.3-1.3.7-.6.3-1.3.7-.5.3-1.4.8-.3.1-1.6 1-.6-.9-4.5-5.8c22.6-15.2 27.9-12.4 38.7-6v-.1z"}),a.createElement("path",{fill:"#F9BF8C",d:"M128 207.43c-29.2 3.1-47.5-28.2-84.5-28.7 14.2-5.2 23-11.3 23-27.1 0-8.8-2.7-25.8-3.6-38.2 0 0 57 21.4 57.8 36.1l2 14.3c11.2 4.3 43.3 37.4 5.3 43.6z"}),a.createElement("path",{fill:"#DB7A53",d:"M87.3 151.73a56.8 56.8 0 0 1-17.1-22.8 62.4 62.4 0 0 0 43 22c2.5-.1 5-.2 7.3-.5v.5l.2 1.2c-4.7 11.9-7.3 19.5-33.4-.4z"}),a.createElement("path",{fill:"#216D64",d:"M162 280.43c.5 7.4-16.2 16.2-30.8 17.3-19.8 1.4-54.8-9.2-48-40.7 18.2 35 68.8 31.3 78.8 23.4z"}),a.createElement("path",{fill:"#F9BF8C",d:"M122.5 72.33a9.8 9.8 0 0 0-2.1-.8h2.6l-.5.8zm-9.9.8a4.8 4.8 0 0 0-.6-1.7c7.3 0 4-.6.6 1.7zm12.6 14 .8.8c-.9-1.5-1.5-4.6-2.9-12.6l-.4-.3a16 16 0 0 0 2.5 12.1z"}),a.createElement("path",{fill:"#F9BF8C",d:"M154.7 95.83a44.5 44.5 0 0 0-1.6-8.2c-2-6-4.8-6.6-7.3-9.6a50.6 50.6 0 0 0-1-23.9c0 .1-8.7-35.8-54.2-22a44.6 44.6 0 0 0-10 5.9c-10.6 8.2-7.6 13.4-10 25.4a74.9 74.9 0 0 1-4.4 11.9c-4.8 3.8-7.6 6.5-8.1 9.9 1 4.7 5.4 18.3 5 28.1 6 27.2 36.6 38.3 50 37.6 2.6-.1 5-.2 7.4-.5 6.5-.7 11.9-2.8 17-11.3 6.4-10.8 5.6-16.5 9.4-22.5 2.5-4.1 9-9.7 7.8-20.8zm-42.2-19.5c-1 7.6-2.5 10.5-5.3 11.4a18.3 18.3 0 0 0 1.3-3.3c-4.6 2.5-17 2.8-21.2-3-.9.4-2 .4-4-.6l.2-.1c4.2-.1 2.6-1 4.1-3.8a10.6 10.6 0 0 1 .6-1h17.1a11 11 0 0 1 3.8 6.7 58.3 58.3 0 0 0 1.2-6.8l3-.2-.8.7z"}),a.createElement("path",{fill:"#D86060",d:"M112.6 124.23c-4-2-5.6-6.3-11.6-10.8 10 5.2 19.3 6.3 26.5 3.8-1.7 1.7 1.2 6.3-3.5 8.4-4 1.7-7.3.5-11.4-1.4z"}),a.createElement("path",{fill:"#BC3939",d:"m101 113.43-1.6-.8c7.9-.3 12.9-.7 17.2-.3 2.2.3 2.2 2 3.8 2 1.6 0 2.7-1.6 4.4-1.4 1.2.2 3 1.1 5.6 3a20.3 20.3 0 0 1-2.9 1.2c-7.2 2.6-16.6 1.5-26.5-3.7z"}),a.createElement("path",{fill:"#FFF",d:"m108.5 84.43.2-.5a15.2 15.2 0 0 0-2.3-3.8c-5-5.8-13.6-5.1-16.5-1.6-.9 1.3-1.5 2.4-2.6 3 4.1 5.7 16.6 5.4 21.2 3v-.1zM97 85.63a4.8 4.8 0 1 1 .408-9.592A4.8 4.8 0 0 1 97 85.629z"}),a.createElement("path",{fill:"#000",d:"M89.9 78.53c-.9 1.3-1.5 2.4-2.6 3-1.1.6-2 .2-4-.7l.2-.2c4.2 0 2.6-1 4.1-3.7 2.8-5.2 9-4.8 14.6-3 .1 0 5.9 2.4 6.8 8.7l-.3 1.2a14.4 14.4 0 0 0-2.3-3.7c-5-5.8-13.6-5.1-16.5-1.6z"}),a.createElement("path",{fill:"#FFF",d:"M127.5 83.03h-.1a27 27 0 0 0 11.6.6c2.7-1 4.8-4 5-6.8-1.8-1.2-2.8-4.6-8.2-2.9-5 1.6-7 4.2-8.3 9v.1zm2.8-3.7a4.4 4.4 0 1 1 8.798-.2 4.4 4.4 0 0 1-8.798.2z"}),a.createElement("path",{fill:"#000",d:"M145.1 75.33c0 .5.5.7 1 .9a8 8 0 0 0 1.2.1l.1.2a5 5 0 0 1-1.4.6 2.4 2.4 0 0 1-2-.4c-1.8-1.2-2.8-4.6-8.2-2.8-4.9 1.6-7 4.2-8.3 9h-.2c-1.2-6.7 4-11.3 9-12.5l3.1-.2c2.8.2 5.2 1.8 5.7 5.1z"}),a.createElement("path",{fill:"#B2512B",d:"M106.7 61.53c-4 0-8.2-.4-11.7-.3-3.6.1-8.3 1.7-12.8 4.6 1.9-4 8.5-7.2 12.5-7.7 2.9-.3 6.8-.7 9.7-.2 3.7.7 5.6 3.1 2.3 3.6zm24.7 5.6c2.3-2.6 6.8-6.2 9.4-5.8 3 .4 3.5 1.2 5.4 3.6.056.898.056 1.8 0 2.7H145a7.6 7.6 0 0 0-4.7-2.2c-1.9-.1-7 1.2-8.8 1.7h-.1z"}),a.createElement("circle",{cx:97.1,cy:80.829,r:4.8,fill:"#000",transform:"rotate(-78.1 97.1 80.83)"}),a.createElement("circle",{cx:134.7,cy:79.329,r:4.4,fill:"#000"}),a.createElement("path",{fill:"#DB7A53",d:"M106.3 109.73a40 40 0 0 1-10.3-1.3c-1.9 2-.1 6.6-.7 9.2-1-3.4-4-8-2.2-12.4a28.7 28.7 0 0 0 13.2-1c9-2.8 6.6-6.2 12.6-6.5-5.2 1-4.4 11.4-12.6 12z"}),a.createElement("path",{fill:"#838BC5",d:"M54 29.03c3-3.6 13.5-5.8 20-6-.5 1.3 4.5 2.7 4 4a37.3 37.3 0 0 0 8.4-.2 3.5 3.5 0 0 0 .4 2.7l3.8 2.6a44.6 44.6 0 0 0-10.1 5.9c-10.5 8.2-7.5 13.4-9.9 25.4a74.9 74.9 0 0 1-4.4 11.9l-12.4 7a10.3 10.3 0 0 0-5.3-.7l-.3-.4c-2.2-4-6.8-14.2-7.2-18.8-1.4-11.4 1.2-25 10-32.4a18.5 18.5 0 0 1 3-2 9.8 9.8 0 0 0 .1 1H54zm2.7 55 1.4.7 3.5-1.6a5.5 5.5 0 0 1-2.4 1.9 10.4 10.4 0 0 1-1.2.2l-1.2-1.2h-.1z"}),a.createElement("path",{fill:"#0071BC",d:"M127 22.23c-7.5-4.7-7-2-15.6-4l5.2-.4c-13.3-1-28.6 3.4-30.1 9a37.3 37.3 0 0 1-8.4.2c.5-1.3-4.6-2.6-4-4-6.6.2-17 2.4-20.1 6a9.8 9.8 0 0 1 0-1c0-8.2 10.8-17.8 30.3-15.8 13.4-14.3 42.4-21 61 8.1-13-7.3-16.2-.2-19.3.8 7.8-1.6 27.3 3 28.9 24.3-1.7-7.8-8.4-8.6-13.6-8-1.7-2.3-3.5-4.3-4.9-5.9-4.5-5.2-3.5-5.7-9.4-9.3z"}),a.createElement("path",{fill:"#0071BC",d:"M137.4 46.73c3.4 14.5-3.1 19.3-22.4 18.8 12.5-8.9 11.5-19.3 2-26.1-8.2-6-14 .2-26.4-7.3a46 46 0 0 1-3.8-2.6 3.5 3.5 0 0 1-.3-2.7c1.5-5.6 16.8-10 30-9l-5 .3c8.6 2.2 8-.6 15.5 4 5.9 3.7 4.9 4.2 9.4 9.5 1.4 1.6 3.2 3.5 4.8 5.8 3 4.2 5.5 9.6 3.5 16.7a26 26 0 0 1-2.6 6.2 14.6 14.6 0 0 0-4.7-13.6z"}),a.createElement("path",{fill:"#DB7A53",d:"M126.1 69.33h-.7a14.6 14.6 0 0 1 3.2-1.7 14.8 14.8 0 0 0-2.5 1.7zm-.9 17.8.8.8c1.2 1.8 2.7 1.5 6.3 4.8l.6.2c1.8 1.7 2.8 3.7 2 6.4-.2 3.2-5.3 8.2-12 5.8 5.3-1 6.9-.8 7.6-5.6-.2-6.7-8.3-4-10-16.5a17.3 17.3 0 0 1 .9-8.8 9 9 0 0 1 1.3.8 16 16 0 0 0 2.5 12.1zm-2.1-14.5a6.3 6.3 0 0 0-.6-.3l.5-.9c1 0 .4.2.1 1.2z"}),a.createElement("path",{fill:"#93278F",d:"M56.7 84.03a12.7 12.7 0 0 0-3-1.7l12.4-7 9.2-5.2c-1.3 1.7-1.6 4.2-1.1 7l-12.6 6-3.5 1.7-1.4-.8z"}),a.createElement("path",{fill:"#5D237A",d:"M151 92.03c5.5-1.8 14.3-20.4 5.8-23.5-5.4-2-24.6-.6-29.9.8-29.7-.4-42.2-3.3-49.3-.7a5 5 0 0 0-2.3 1.6c-4.3 5.5 3.1 20.2 8 21.8a46.3 46.3 0 0 0 12.5 1.6c11.6 0 14.8-2.2 16.6-17.3 1-.6 4.4-4.3 9-2a10.6 10.6 0 0 1 1.8 1c2.9 17.6 2.5 11.3 9.1 17.5l.6.1c5.8 1.4 13.9.5 18.1-.9zm-40.5-17.9c-.4 3.6-1.7 13.4-4.8 15.4-4.2 2.8-17 2-21.7.4-4-1.4-11.5-17.2-5.7-19.3 5.6-2 23.8 0 29.6.6 0 .2 2.8.3 2.6 3v-.1zm2.1-1a4.8 4.8 0 0 0-.6-1.8c7.3.2 4-.5.6 1.8zm10.5-.5a10 10 0 0 0-2.7-1.2c4.2.1 3.1-.3 2.7 1.2zm27.2 17.4c-4.7 1.6-16.3 2.5-20.6-.4-1-.7-2.8-5.1-4.5-15.3-.4-2.8 2.6-2.5 2.6-2.8.9-.2 4.3-.7 8.5-1 4.2-.3 15.6-1.2 19.7.2 5.8 2.1-1.6 18-5.7 19.3z"}),a.createElement("path",{fill:"#F9BF8C",d:"M45.5 82.33c-4.2 1.7-4.4 10-3 14.8 2.8 9.2 12 17.6 21.7 16.1 5.2-.7 1.5-5.7-1-16.4l-1-5.6c-3.3-7-9.4-11.7-16.7-8.9zm13.2 13c-.4.4-4.4 3.1-1.2 5 2.2 1.5 4 .5 3.6 2.6-.3 1.4 0 3.3-2 3 2-3-1.1-4-3-2.9s-5.7-5.3.9-8.2c-4-4.8-7.5-12.8-10-.5-3-9.7 3.6-17.3 11.7 1z"}),a.createElement("path",{fill:"#CE6D42",d:"M58.7 95.33c-.4.4-4.4 3.1-1.2 5 2.2 1.5 4 .5 3.6 2.6-.3 1.4 0 3.3-2 3 2-3-1.1-4-3-2.9s-5.7-5.3.9-8.2c-4-4.8-7.5-12.8-10-.5-3-9.7 3.6-17.3 11.7 1z"}))));function N({workout:e,badges:t,upsellLink:o,upsellText:l}){const n=(0,r.useSelect)((e=>e("yoast-seo/workouts").getFinishedSteps(v))),s=o||"https://yoa.st/workout-orphaned-content-upsell";return(0,a.createElement)(g,{id:"orphaned-workout-card",name:v,title:(0,w.__)("Orphaned content","wordpress-seo"),subtitle:(0,w.__)("Clean up your unlinked content to make sure people can find it","wordpress-seo"),usps:[(0,w.__)("Make pages easier for Google and visitors to find","wordpress-seo"),(0,w.__)("Add internal links to your posts and pages","wordpress-seo")],image:P,finishableSteps:R.orphaned,finishedSteps:n,upsellLink:s,upsellText:l,workout:e,badges:t})}N.propTypes={workout:m().func,badges:m().arrayOf(m().element),upsellLink:m().string,upsellText:m().string},N.defaultProps={workout:null,badges:[],upsellLink:null,upsellText:null};const{workouts:j,upsellLink:$,upsellText:q}=window.wpseoWorkoutsData,G={[b]:()=>(0,a.createElement)(D,{badges:[(0,a.createElement)(k.PremiumBadge,{key:"premium-badge-cornerstone-workout"})],upsellLink:$,upsellText:q}),[v]:()=>(0,a.createElement)(N,{badges:[(0,a.createElement)(k.PremiumBadge,{key:"premium-badge-orphaned-workout"})],upsellLink:$,upsellText:q})};function U(e){const{activeWorkout:t,clearActiveWorkout:o,openWorkout:r,workouts:n,loading:s,initWorkouts:c,saveWorkouts:i}=e;(0,h.useEffect)((()=>{if(!0===s)return c(j),void(window.location.hash&&window.location.hash.length>1&&("configuration"===window.location.hash.substring(1)?window.location.href=window.wpseoWorkoutsData.firstTimeConfigurationUrl:r(window.location.hash.substring(1))));i(n)}),[n,s]);const u=(0,h.useMemo)((()=>{const e=Object.keys(n);return(0,p.sortBy)(e.map((e=>({...n[e],id:e}))),"priority").map((e=>{if(G[e.id]){const t=G[e.id];return(0,a.createElement)(f,{key:e.id,name:`${e.id}`},(0,a.createElement)(t,null))}return(0,a.createElement)(l.Slot,{key:e.id,name:`${e.id}`})}))}),[n]);return(0,a.createElement)("div",{className:"wrap"},(0,a.createElement)("h1",{id:"workouts-page-title"},(0,w.__)("SEO workouts","wordpress-seo")),(0,a.createElement)("p",{id:"workouts-page-description"},(0,w.__)("Getting your site in shape and keeping it SEO fit can be hard. We can help you get started! Take these step-by-step workouts, and you’ll be tackling some of the most fundamental SEO challenges!","wordpress-seo")),t&&(0,a.createElement)(k.Button,{id:"yoast-workouts-back-to-workouts-button",onClick:o}, +// translators: %1$s translates to a leftward pointing arrow ( ↠) +(0,w.sprintf)((0,w.__)("%1$sBack to all workouts","worpdress-seo"),"↠")),(0,a.createElement)("div",{className:t?"":"workflows__index"},u))}U.propTypes={activeWorkout:m().string.isRequired,clearActiveWorkout:m().func.isRequired,openWorkout:m().func.isRequired,workouts:m().object.isRequired,loading:m().bool.isRequired,initWorkouts:m().func.isRequired,saveWorkouts:m().func.isRequired};const K=function(e){const t=(0,p.cloneDeep)(e);return Object.keys(e).forEach((function(o){e[o].indexablesByStep&&Object.keys(e[o].indexablesByStep).forEach((function(e){t[o].indexablesByStep[e]=t[o].indexablesByStep[e].filter((function(e){return!e.purge}))}))})),t};async function V(e){try{const t=await i()({path:"yoast/v1/workouts",method:"POST",data:K(e)});return await t.json}catch(e){return console.error(e.message),!1}}const X=(0,u.compose)([(0,r.withSelect)((e=>{const t=e("yoast-seo/workouts").getWorkouts(),o=e("yoast-seo/workouts").getLoading(),a=e("yoast-seo/workouts").getActiveWorkout(),r=e("yoast-seo/workouts").getFinishedWorkouts(),l=e("yoast-seo/workouts").getIndexablesByStep;return{workouts:t,loading:o,activeWorkout:a,finishedWorkouts:r,isStepFinished:(e,o)=>t[e].finishedSteps.includes(o),getIndexablesByStep:l}})),(0,r.withDispatch)((e=>{const{finishSteps:t,toggleStep:o,toggleWorkout:a,initWorkouts:r,clearActiveWorkout:l,openWorkout:n,moveIndexables:s,clearIndexablesInSteps:c}=e("yoast-seo/workouts");return{finishSteps:t,toggleStep:o,toggleWorkout:a,initWorkouts:r,clearActiveWorkout:l,openWorkout:n,moveIndexables:s,clearIndexablesInSteps:c,saveWorkouts:V}}))])(U),H="REGISTER_WORKOUT",J="FINISH_STEPS",Q="REVISE_STEP",Y="TOGGLE_WORKOUT",Z="SET_WORKOUTS",ee="OPEN_WORKOUT",te="CLEAR_ACTIVE_WORKOUT",oe="TOGGLE_STEP",ae="MOVE_INDEXABLES",re="CLEAR_INDEXABLES",le="CLEAR_INDEXABLES_IN_STEPS",ne=(e,t)=>({type:H,payload:{key:e,priority:t}}),se=(e,t)=>({type:J,workout:e,steps:t}),ce=(e,t)=>({type:Q,workout:e,step:t}),ie=e=>({type:Y,workout:e}),ue=e=>({type:Z,workouts:e}),pe=e=>(window.location.hash=e,{type:ee,workout:e}),de=()=>(window.location.hash="",{type:te}),me=(e,t)=>({type:oe,workout:e,step:t}),we=(e,t,o,a)=>({type:ae,workout:e,indexables:t,fromStep:o,toStep:a}),he=e=>({type:re,workout:e}),ke=(e,t)=>({type:le,workout:e,steps:t}),fe=e=>e.workouts,Ee=(e,t)=>(0,p.get)(e,`workouts.${t}.finishedSteps`,[]),ge=(e,t,o)=>e.workouts[t].indexablesByStep[o],ye=e=>{const t=[];return Object.keys(e.workouts).forEach((function(o){R[o]&&e.workouts[o].finishedSteps.length===R[o].length&&t.push(o)})),t},ze=e=>e.loading,Se=e=>e.activeWorkout,be={loading:!0,activeWorkout:"",workouts:{cornerstone:{priority:50,finishedSteps:[],indexablesByStep:{[x]:[],[B]:[],[M]:[],[W]:[],[C]:[]}},orphaned:{priority:50,finishedSteps:[],indexablesByStep:{[_]:(0,p.get)(window,"wpseoPremiumWorkoutsData.orphaned",[]),[A]:[],[O]:[],[F]:[],[T]:[],[W]:[],[C]:[]}}}},ve=(e=be,t)=>{let o;const a=(0,p.cloneDeep)(e);switch(t.type){case H:return a.workouts[t.payload.key]={finishedSteps:[],indexablesByStep:{},...a.workouts[t.payload.key],priority:t.payload.priority},a;case J:return a.workouts[t.workout].finishedSteps=(0,p.union)(e.workouts[t.workout].finishedSteps,t.steps),a;case Q:return a.workouts[t.workout].finishedSteps=a.workouts[t.workout].finishedSteps.filter((e=>e!==t.step)),a;case oe:return e.workouts[t.workout].finishedSteps.includes(t.step)?(o=e.workouts[t.workout].finishedSteps.indexOf(t.step),o>-1&&(a.workouts[t.workout].finishedSteps=e.workouts[t.workout].finishedSteps.slice(),a.workouts[t.workout].finishedSteps.splice(o,1)),a):(a.workouts[t.workout].finishedSteps=(0,p.union)(e.workouts[t.workout].finishedSteps,[t.step]),a);case Y:if(R[t.workout].length===e.workouts[t.workout].finishedSteps.length){a.workouts[t.workout].finishedSteps=[];for(const e of R[t.workout])be.workouts[t.workout].indexablesByStep&&(a.workouts[t.workout].indexablesByStep[e]=be.workouts[t.workout].indexablesByStep[e])}else a.workouts[t.workout].finishedSteps=R[t.workout];return a;case ee:return a.activeWorkout=t.workout,a;case te:return a.activeWorkout="",a;case Z:return a.workouts=(0,p.merge)(a.workouts,t.workouts),a.loading=!1,a;case ae:return t.indexables.forEach((function(e){if(""!==t.fromStep){const o=a.workouts[t.workout].indexablesByStep[t.fromStep].findIndex((t=>t.id===e.id));a.workouts[t.workout].indexablesByStep[t.fromStep][o].purge=!0,a.workouts[t.workout].indexablesByStep[t.fromStep][o].movedTo=t.toStep}if(""!==t.toStep){const o=a.workouts[t.workout].indexablesByStep[t.toStep].findIndex((t=>t.id===e.id));-1===o?a.workouts[t.workout].indexablesByStep[t.toStep].push(e):(a.workouts[t.workout].indexablesByStep[t.toStep][o].purge=!1,a.workouts[t.workout].indexablesByStep[t.toStep][o].movedTo="")}})),a;case re:return a.workouts[t.workout].indexablesByStep=be.workouts[t.workout].indexablesByStep,a;case le:for(const e of t.steps)a.workouts[t.workout].indexablesByStep[e]=[];return a;default:return e}},Me=window.yoast.styledComponents,Be=window.yoast.externals.contexts,xe=({theme:e,location:t,children:o})=>(0,a.createElement)(Be.LocationProvider,{value:t},(0,a.createElement)(Me.ThemeProvider,{theme:e},o));xe.propTypes={theme:m().object.isRequired,location:m().oneOf(["sidebar","metabox","modal"]).isRequired,children:m().element.isRequired};const _e=xe,Ae=[];let Oe=null;class Fe extends h.Component{constructor(e){super(e),this.state={registeredComponents:[]}}registerComponent(e,t){this.setState({registeredComponents:[...this.state.registeredComponents,{key:e,Component:t}]})}render(){return this.state.registeredComponents.map((({Component:e,key:t})=>(0,a.createElement)(e,{key:t})))}}if(window.wp.data.createReduxStore){const e=(0,r.createReduxStore)("yoast-seo/workouts",{reducer:ve,actions:t,selectors:o});(0,r.register)(e)}else(0,r.registerStore)("yoast-seo/workouts",{reducer:ve,actions:t,selectors:o});window.wpseoWorkoutsData=window.wpseoWorkoutsData||{},window.wpseoWorkoutsData.registerWorkout=function(e,t,o){(0,r.dispatch)("yoast-seo/workouts").registerWorkout(e,t),function(e,t){null===Oe||null===Oe.current?Ae.push({key:e,Component:t}):Oe.current.registerComponent(e,t)}(e,(()=>(0,a.createElement)(l.Fill,{name:`${e}`},(0,a.createElement)(o,null))))},s()((()=>{!function(e,t){const o=(0,p.get)(window,"wpseoScriptData.metabox",{intl:{},isRtl:!1});Oe=(0,h.createRef)();const r={isRtl:o.isRtl};(0,h.render)((0,a.createElement)(_e,{theme:r,location:"sidebar"},(0,a.createElement)(l.SlotFillProvider,null,(0,a.createElement)(h.Fragment,null,t,(0,a.createElement)(Fe,{ref:Oe})))),document.getElementById(e)),Ae.forEach((e=>{Oe.current.registerComponent(e.key,e.Component)}))}("wpseo-workouts-container-free",(0,a.createElement)(X,null))}))})(); \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/lib/abstract-main.php b/wp/wp-content/plugins/wordpress-seo/lib/abstract-main.php new file mode 100644 index 00000000..74eaebc6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/abstract-main.php @@ -0,0 +1,174 @@ +container ) { + return; + } + + try { + $this->container = $this->get_container(); + Container_Registry::register( $this->get_name(), $this->container ); + + if ( ! $this->container ) { + return; + } + if ( ! $this->container->has( Loader::class ) ) { + return; + } + + $this->container->get( Loader::class )->load(); + } catch ( Exception $e ) { + if ( $this->is_development() ) { + throw $e; + } + // Don't crash the entire site, simply don't load. + } + } + + /** + * Magic getter for retrieving a property from a surface. + * + * @param string $property The property to retrieve. + * + * @return mixed The value of the property. + * + * @throws Exception When the property doesn't exist. + */ + public function __get( $property ) { + if ( \array_key_exists( $property, $this->cached_surfaces ) ) { + return $this->cached_surfaces[ $property ]; + } + + $surfaces = $this->get_surfaces(); + + if ( isset( $surfaces[ $property ] ) ) { + $this->cached_surfaces[ $property ] = $this->container->get( $surfaces[ $property ] ); + + return $this->cached_surfaces[ $property ]; + } + throw new Exception( \sprintf( 'Property $%s does not exist.', $property ) ); + } + + /** + * Checks if the given property exists as a surface. + * + * @param string $property The property to retrieve. + * + * @return bool True when property is set. + */ + public function __isset( $property ) { + if ( \array_key_exists( $property, $this->cached_surfaces ) ) { + return true; + } + + $surfaces = $this->get_surfaces(); + + if ( ! isset( $surfaces[ $property ] ) ) { + return false; + } + + return $this->container->has( $surfaces[ $property ] ); + } + + /** + * Prevents setting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * @param mixed $value The property value. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. + */ + public function __set( $name, $value ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- __set must have a name and value - PHPCS #3715. + throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); + } + + /** + * Prevents unsetting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. + */ + public function __unset( $name ) { + throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); + } + + /** + * Loads the DI container. + * + * @return ContainerInterface|null The DI container. + * + * @throws Exception If something goes wrong generating the DI container. + */ + abstract protected function get_container(); + + /** + * Gets the name of the plugin. + * + * @return string The name. + */ + abstract protected function get_name(); + + /** + * Gets the surfaces of this plugin. + * + * @return array A mapping of surface name to the responsible class. + */ + abstract protected function get_surfaces(); + + /** + * Returns whether or not we're in an environment for Yoast development. + * + * @return bool Whether or not to load in development mode. + */ + protected function is_development() { + try { + return WPSEO_Utils::is_development_mode(); + } + catch ( Exception $exception ) { + // E.g. when WordPress and/or WordPress SEO are not loaded. + return \defined( 'YOAST_ENVIRONMENT' ) && \YOAST_ENVIRONMENT === 'development'; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/lib/dependency-injection/container-registry.php b/wp/wp-content/plugins/wordpress-seo/lib/dependency-injection/container-registry.php new file mode 100644 index 00000000..bfcb3100 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/dependency-injection/container-registry.php @@ -0,0 +1,72 @@ +get( $id, $invalid_behaviour ); + } + + // phpcs:enable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber + + /** + * Attempts to find a given service ID in all registered containers. + * + * @param string $id The service ID. + * + * @return string|null The name of the container if the service was found. + */ + public static function find( $id ) { + foreach ( self::$containers as $name => $container ) { + if ( $container->has( $id ) ) { + return $name; + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/lib/migrations/adapter.php b/wp/wp-content/plugins/wordpress-seo/lib/migrations/adapter.php new file mode 100644 index 00000000..561f5e53 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/migrations/adapter.php @@ -0,0 +1,1078 @@ +dbname; + } + + /** + * Checks support for migrations. + * + * @return bool + */ + public function supports_migrations() { + return true; + } + + /** + * Returns all column native types. + * + * @return array + */ + public function native_database_types() { + $types = [ + 'primary_key' => [ + 'name' => 'integer', + 'limit' => 11, + 'null' => false, + ], + 'string' => [ + 'name' => 'varchar', + 'limit' => 255, + ], + 'text' => [ 'name' => 'text' ], + 'tinytext' => [ 'name' => 'tinytext' ], + 'mediumtext' => [ 'name' => 'mediumtext' ], + 'integer' => [ + 'name' => 'int', + 'limit' => 11, + ], + 'tinyinteger' => [ 'name' => 'tinyint' ], + 'smallinteger' => [ 'name' => 'smallint' ], + 'mediuminteger' => [ 'name' => 'mediumint' ], + 'biginteger' => [ 'name' => 'bigint' ], + 'float' => [ 'name' => 'float' ], + 'decimal' => [ + 'name' => 'decimal', + 'scale' => 0, + 'precision' => 10, + ], + 'datetime' => [ 'name' => 'datetime' ], + 'timestamp' => [ 'name' => 'timestamp' ], + 'time' => [ 'name' => 'time' ], + 'date' => [ 'name' => 'date' ], + 'binary' => [ 'name' => 'blob' ], + 'tinybinary' => [ 'name' => 'tinyblob' ], + 'mediumbinary' => [ 'name' => 'mediumblob' ], + 'longbinary' => [ 'name' => 'longblob' ], + 'boolean' => [ + 'name' => 'tinyint', + 'limit' => 1, + ], + 'enum' => [ + 'name' => 'enum', + 'values' => [], + ], + 'uuid' => [ + 'name' => 'char', + 'limit' => 36, + ], + 'char' => [ 'name' => 'char' ], + ]; + + return $types; + } + + /** + * Checks if a table exists. + * + * @param string $table The table name. + * + * @return bool + */ + public function has_table( $table ) { + return $this->table_exists( $table ); + } + + /** + * Allows overriding the hardcoded schema table name constant in case of parallel migrations. + * + * @return string + */ + public function get_schema_version_table_name() { + return Model::get_table_name( 'migrations' ); + } + + /** + * Create the schema table, if necessary. + * + * @return void + */ + public function create_schema_version_table() { + if ( ! $this->has_table( $this->get_schema_version_table_name() ) ) { + $t = $this->create_table( $this->get_schema_version_table_name() ); + $t->column( 'version', 'string', [ 'limit' => 191 ] ); + $t->finish(); + $this->add_index( $this->get_schema_version_table_name(), 'version', [ 'unique' => true ] ); + } + } + + /** + * Starts a transaction. + * + * @return void + */ + public function start_transaction() { + if ( $this->in_transaction() === false ) { + $this->begin_transaction(); + } + } + + /** + * Commits a transaction. + * + * @return void + */ + public function commit_transaction() { + if ( $this->in_transaction() ) { + $this->commit(); + } + } + + /** + * Rollbacks a transaction. + * + * @return void + */ + public function rollback_transaction() { + if ( $this->in_transaction() ) { + $this->rollback(); + } + } + + /** + * Quotes a table name string. + * + * @param string $text Table name. + * + * @return string + */ + public function quote_table( $text ) { + return '`' . $text . '`'; + } + + /** + * Return the SQL definition of a column. + * + * @param string $column_name The column name. + * @param string $type The type of the column. + * @param array|null $options Column options. + * + * @return string + */ + public function column_definition( $column_name, $type, $options = null ) { + $col = new Column( $this, $column_name, $type, $options ); + + return $col->__toString(); + } + + /** + * Checks if a database exists. + * + * @param string $database The database name. + * + * @return bool + */ + public function database_exists( $database ) { + $ddl = 'SHOW DATABASES'; + $result = $this->select_all( $ddl ); + if ( \count( $result ) === 0 ) { + return false; + } + foreach ( $result as $dbrow ) { + if ( $dbrow['Database'] === $database ) { + return true; + } + } + + return false; + } + + /** + * Creates a database. + * + * @param string $db The database name. + * + * @return bool + */ + public function create_database( $db ) { + if ( $this->database_exists( $db ) ) { + return false; + } + $ddl = \sprintf( 'CREATE DATABASE %s', $this->identifier( $db ) ); + $result = $this->query( $ddl ); + + return $result === true; + } + + /** + * Drops a database. + * + * @param string $db The database name. + * + * @return bool + */ + public function drop_database( $db ) { + if ( ! $this->database_exists( $db ) ) { + return false; + } + $ddl = \sprintf( 'DROP DATABASE IF EXISTS %s', $this->identifier( $db ) ); + $result = $this->query( $ddl ); + + return $result === true; + } + + /** + * Checks if a table exists. + * + * @param string $table The table name. + * + * @return bool + */ + public function table_exists( $table ) { + global $wpdb; + + // We need last error to be clear so we can check against it easily. + $previous_last_error = $wpdb->last_error; + $previous_suppress_errors = $wpdb->suppress_errors; + $wpdb->last_error = ''; + $wpdb->suppress_errors = true; + + $result = $wpdb->query( "SELECT * FROM $table LIMIT 1" ); + + // Restore the last error, as this is not truly an error and we don't want to alarm people. + $wpdb->last_error = $previous_last_error; + $wpdb->suppress_errors = $previous_suppress_errors; + + return $result !== false; + } + + /** + * Wrapper to execute a query. + * + * @param string $query The query to run. + * + * @return bool + */ + public function execute( $query ) { + return $this->query( $query ); + } + + /** + * Executes a query. + * + * @param string $query The query to run. + * + * @return bool Whether or not the query was performed succesfully. + */ + public function query( $query ) { + global $wpdb; + + $query_type = $this->determine_query_type( $query ); + $data = []; + if ( $query_type === Constants::SQL_SELECT || $query_type === Constants::SQL_SHOW ) { + $data = $wpdb->get_results( $query, \ARRAY_A ); + if ( $data === false ) { + return false; + } + + return $data; + } + else { + // INSERT, DELETE, etc... + $result = $wpdb->query( $query ); + if ( $result === false ) { + return false; + } + if ( $query_type === Constants::SQL_INSERT ) { + return $wpdb->insert_id; + } + + return true; + } + } + + /** + * Returns a single result for a query. + * + * @param string $query The query to run. + * + * @return array|false An associative array of the result. + */ + public function select_one( $query ) { + global $wpdb; + + $query_type = $this->determine_query_type( $query ); + if ( $query_type === Constants::SQL_SELECT || $query_type === Constants::SQL_SHOW ) { + $result = $wpdb->query( $query ); + if ( $result === false ) { + return false; + } + + return $wpdb->last_result[0]; + } + + return false; + } + + /** + * Returns all results for a query. + * + * @param string $query The query to run. + * + * @return array An array of associative arrays. + */ + public function select_all( $query ) { + return $this->query( $query ); + } + + /** + * Use this method for non-SELECT queries. + * Or anything where you dont necessarily expect a result string, e.g. DROPs, CREATEs, etc. + * + * @param string $ddl The query to run. + * + * @return bool + */ + public function execute_ddl( $ddl ) { + return $this->query( $ddl ); + } + + /** + * Drops a table + * + * @param string $table The table name. + * + * @return bool Whether or not the table was succesfully dropped. + */ + public function drop_table( $table ) { + $ddl = \sprintf( 'DROP TABLE IF EXISTS %s', $this->identifier( $table ) ); + return $this->query( $ddl ); + } + + /** + * Creates a table. + * + * @param string $table_name The table name. + * @param array $options The options. + * + * @return Table + */ + public function create_table( $table_name, $options = [] ) { + return new Table( $this, $table_name, $options ); + } + + /** + * Escapes a string for usage in queries. + * + * @param string $text The string. + * + * @return string + */ + public function quote_string( $text ) { + global $wpdb; + + return $wpdb->_escape( $text ); + } + + /** + * Returns a quoted string. + * + * @param string $text The string. + * + * @return string + */ + public function identifier( $text ) { + return '`' . $text . '`'; + } + + /** + * Renames a table. + * + * @param string $name The current table name. + * @param string $new_name The new table name. + * + * @return bool + */ + public function rename_table( $name, $new_name ) { + if ( empty( $name ) || empty( $new_name ) ) { + return false; + } + $sql = \sprintf( 'RENAME TABLE %s TO %s', $this->identifier( $name ), $this->identifier( $new_name ) ); + + return $this->execute_ddl( $sql ); + } + + /** + * Adds a column. + * + * @param string $table_name The table name. + * @param string $column_name The column name. + * @param string $type The column type. + * @param array $options Column options. + * + * @return bool + */ + public function add_column( $table_name, $column_name, $type, $options = [] ) { + if ( empty( $table_name ) || empty( $column_name ) || empty( $type ) ) { + return false; + } + // Default types. + if ( ! \array_key_exists( 'limit', $options ) ) { + $options['limit'] = null; + } + if ( ! \array_key_exists( 'precision', $options ) ) { + $options['precision'] = null; + } + if ( ! \array_key_exists( 'scale', $options ) ) { + $options['scale'] = null; + } + $sql = \sprintf( 'ALTER TABLE %s ADD `%s` %s', $this->identifier( $table_name ), $column_name, $this->type_to_sql( $type, $options ) ); + $sql .= $this->add_column_options( $type, $options ); + + return $this->execute_ddl( $sql ); + } + + /** + * Drops a column. + * + * @param string $table_name The table name. + * @param string $column_name The column name. + * + * @return bool + */ + public function remove_column( $table_name, $column_name ) { + $sql = \sprintf( 'ALTER TABLE %s DROP COLUMN %s', $this->identifier( $table_name ), $this->identifier( $column_name ) ); + + return $this->execute_ddl( $sql ); + } + + /** + * Renames a column. + * + * @param string $table_name The table name. + * @param string $column_name The column name. + * @param string $new_column_name The new column name. + * + * @return bool + */ + public function rename_column( $table_name, $column_name, $new_column_name ) { + if ( empty( $table_name ) || empty( $column_name ) || empty( $new_column_name ) ) { + return false; + } + $column_info = $this->column_info( $table_name, $column_name ); + $current_type = $column_info['type']; + $sql = \sprintf( 'ALTER TABLE %s CHANGE %s %s %s', $this->identifier( $table_name ), $this->identifier( $column_name ), $this->identifier( $new_column_name ), $current_type ); + $sql .= $this->add_column_options( $current_type, $column_info ); + + return $this->execute_ddl( $sql ); + } + + /** + * Changes a column. + * + * @param string $table_name The table name. + * @param string $column_name The column name. + * @param string $type The column type. + * @param array $options Column options. + * + * @return bool + */ + public function change_column( $table_name, $column_name, $type, $options = [] ) { + if ( empty( $table_name ) || empty( $column_name ) || empty( $type ) ) { + return false; + } + $column_info = $this->column_info( $table_name, $column_name ); + // Default types. + if ( ! \array_key_exists( 'limit', $options ) ) { + $options['limit'] = null; + } + if ( ! \array_key_exists( 'precision', $options ) ) { + $options['precision'] = null; + } + if ( ! \array_key_exists( 'scale', $options ) ) { + $options['scale'] = null; + } + $sql = \sprintf( 'ALTER TABLE `%s` CHANGE `%s` `%s` %s', $table_name, $column_name, $column_name, $this->type_to_sql( $type, $options ) ); + $sql .= $this->add_column_options( $type, $options ); + + return $this->execute_ddl( $sql ); + } + + /** + * Returns the database information for a column. + * + * @param string $table The table name. + * @param string $column The column name. + * + * @return array|null + */ + public function column_info( $table, $column ) { + if ( empty( $table ) || empty( $column ) ) { + return null; + } + + try { + $sql = \sprintf( "SHOW FULL COLUMNS FROM %s LIKE '%s'", $this->identifier( $table ), $column ); + $result = $this->select_one( $sql ); + if ( \is_array( $result ) ) { + $result = \array_change_key_case( $result, \CASE_LOWER ); + } + + return $result; + } catch ( Exception $e ) { + return null; + } + } + + /** + * Adds an index. + * + * @param string $table_name The table name. + * @param array|string $column_name The column name(s). + * @param array $options Index options. + * + * @return bool + */ + public function add_index( $table_name, $column_name, $options = [] ) { + if ( empty( $table_name ) || empty( $column_name ) ) { + return false; + } + // Unique index? + if ( \is_array( $options ) && \array_key_exists( 'unique', $options ) && $options['unique'] === true ) { + $unique = true; + } + else { + $unique = false; + } + + // Did the user specify an index name? + if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { + $index_name = $options['name']; + } + else { + $index_name = $this->get_index_name( $table_name, $column_name ); + } + + if ( \strlen( $index_name ) > Constants::MYSQL_MAX_IDENTIFIER_LENGTH ) { + return false; + } + + if ( ! \is_array( $column_name ) ) { + $column_names = [ $column_name ]; + } + else { + $column_names = $column_name; + } + + $cols = []; + foreach ( $column_names as $name ) { + $cols[] = $this->identifier( $name ); + } + $sql = \sprintf( + 'CREATE %sINDEX %s ON %s(%s)', + ( $unique === true ) ? 'UNIQUE ' : '', + $this->identifier( $index_name ), + $this->identifier( $table_name ), + \implode( ', ', $cols ) + ); + + return $this->execute_ddl( $sql ); + } + + /** + * Drops an index. + * + * @param string $table_name The table name. + * @param array|string $column_name The column name(s). + * @param array $options Index options. + * + * @return bool + */ + public function remove_index( $table_name, $column_name, $options = [] ) { + if ( empty( $table_name ) || empty( $column_name ) ) { + return false; + } + // Did the user specify an index name? + if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { + $index_name = $options['name']; + } + else { + $index_name = $this->get_index_name( $table_name, $column_name ); + } + + $sql = \sprintf( 'DROP INDEX %s ON %s', $this->identifier( $index_name ), $this->identifier( $table_name ) ); + + return $this->execute_ddl( $sql ); + } + + /** + * Adds timestamps. + * + * @param string $table_name The table name. + * @param string $created_column_name Created at column name. + * @param string $updated_column_name Updated at column name. + * + * @return bool + */ + public function add_timestamps( $table_name, $created_column_name, $updated_column_name ) { + if ( empty( $table_name ) || empty( $created_column_name ) || empty( $updated_column_name ) ) { + return false; + } + $created_at = $this->add_column( $table_name, $created_column_name, 'datetime' ); + $updated_at = $this->add_column( + $table_name, + $updated_column_name, + 'timestamp', + [ + 'null' => false, + 'default' => 'CURRENT_TIMESTAMP', + 'extra' => 'ON UPDATE CURRENT_TIMESTAMP', + ] + ); + + return $created_at && $updated_at; + } + + /** + * Removes timestamps. + * + * @param string $table_name The table name. + * @param string $created_column_name Created at column name. + * @param string $updated_column_name Updated at column name. + * + * @return bool Whether or not the timestamps were removed. + */ + public function remove_timestamps( $table_name, $created_column_name, $updated_column_name ) { + if ( empty( $table_name ) || empty( $created_column_name ) || empty( $updated_column_name ) ) { + return false; + } + $updated_at = $this->remove_column( $table_name, $created_column_name ); + $created_at = $this->remove_column( $table_name, $updated_column_name ); + + return $created_at && $updated_at; + } + + /** + * Checks an index. + * + * @param string $table_name The table name. + * @param array|string $column_name The column name(s). + * @param array $options Index options. + * + * @return bool Whether or not the index exists. + */ + public function has_index( $table_name, $column_name, $options = [] ) { + if ( empty( $table_name ) || empty( $column_name ) ) { + return false; + } + // Did the user specify an index name? + if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { + $index_name = $options['name']; + } + else { + $index_name = $this->get_index_name( $table_name, $column_name ); + } + $indexes = $this->indexes( $table_name ); + foreach ( $indexes as $idx ) { + if ( $idx['name'] === $index_name ) { + return true; + } + } + + return false; + } + + /** + * Returns all indexes of a table. + * + * @param string $table_name The table name. + * + * @return array + */ + public function indexes( $table_name ) { + $sql = \sprintf( 'SHOW KEYS FROM %s', $this->identifier( $table_name ) ); + $result = $this->select_all( $sql ); + $indexes = []; + foreach ( $result as $row ) { + // Skip primary. + if ( $row['Key_name'] === 'PRIMARY' ) { + continue; + } + $indexes[] = [ + 'name' => $row['Key_name'], + 'unique' => (int) $row['Non_unique'] === 0, + ]; + } + + return $indexes; + } + + /** + * Converts a type to sql. Default options: + * $limit = null, $precision = null, $scale = null + * + * @param string $type The native type. + * @param array $options The options. + * + * @return string The SQL type. + * + * @throws Exception If invalid arguments are supplied. + */ + public function type_to_sql( $type, $options = [] ) { + $natives = $this->native_database_types(); + if ( ! \array_key_exists( $type, $natives ) ) { + $error = \sprintf( "Error:I dont know what column type of '%s' maps to for MySQL.", $type ); + $error .= "\nYou provided: {$type}\n"; + $error .= "Valid types are: \n"; + $types = \array_keys( $natives ); + foreach ( $types as $t ) { + if ( $t === 'primary_key' ) { + continue; + } + $error .= "\t{$t}\n"; + } + throw new Exception( $error ); + } + $scale = null; + $precision = null; + $limit = null; + if ( isset( $options['precision'] ) ) { + $precision = $options['precision']; + } + if ( isset( $options['scale'] ) ) { + $scale = $options['scale']; + } + if ( isset( $options['limit'] ) ) { + $limit = $options['limit']; + } + if ( isset( $options['values'] ) ) { + $values = $options['values']; + } + $native_type = $natives[ $type ]; + if ( \is_array( $native_type ) && \array_key_exists( 'name', $native_type ) ) { + $column_type_sql = $native_type['name']; + } + else { + return $native_type; + } + if ( $type === 'decimal' || $type === 'float' ) { + // Ignore limit, use precison and scale. + if ( $precision === null && \array_key_exists( 'precision', $native_type ) ) { + $precision = $native_type['precision']; + } + if ( $scale === null && \array_key_exists( 'scale', $native_type ) ) { + $scale = $native_type['scale']; + } + if ( $precision !== null ) { + if ( \is_int( $scale ) ) { + $column_type_sql .= \sprintf( '(%d, %d)', $precision, $scale ); + } + else { + $column_type_sql .= \sprintf( '(%d)', $precision ); + } + } + elseif ( $scale ) { + throw new Exception( "Error adding $type column: precision cannot be empty if scale is specified" ); + } + } + elseif ( $type === 'enum' ) { + if ( empty( $values ) ) { + throw new Exception( 'Error adding enum column: there must be at least one value defined' ); + } + else { + $column_type_sql .= \sprintf( + "('%s')", + \implode( "','", \array_map( [ $this, 'quote_string' ], $values ) ) + ); + } + } + // Not a decimal column. + if ( $limit === null && \array_key_exists( 'limit', $native_type ) ) { + $limit = $native_type['limit']; + } + if ( $limit ) { + $column_type_sql .= \sprintf( '(%d)', $limit ); + } + + return $column_type_sql; + } + + /** + * Adds column options. + * + * @param string $type The native type. + * @param array $options The options. + * + * @return string The SQL statement for the column options. + * + * @throws Exception If invalid arguments are supplied. + */ + public function add_column_options( $type, $options ) { + $sql = ''; + if ( ! \is_array( $options ) ) { + return $sql; + } + if ( \array_key_exists( 'unsigned', $options ) && $options['unsigned'] === true ) { + $sql .= ' UNSIGNED'; + } + if ( \array_key_exists( 'character', $options ) ) { + $sql .= \sprintf( ' CHARACTER SET %s', $this->identifier( $options['character'] ) ); + } + if ( \array_key_exists( 'collate', $options ) ) { + $sql .= \sprintf( ' COLLATE %s', $this->identifier( $options['collate'] ) ); + } + if ( \array_key_exists( 'auto_increment', $options ) && $options['auto_increment'] === true ) { + $sql .= ' auto_increment'; + } + if ( \array_key_exists( 'default', $options ) && $options['default'] !== null ) { + if ( $this->is_sql_method_call( $options['default'] ) ) { + throw new Exception( 'MySQL does not support function calls as default values, constants only.' ); + } + if ( \is_int( $options['default'] ) ) { + $default_format = '%d'; + } + elseif ( \is_bool( $options['default'] ) ) { + $default_format = "'%d'"; + } + elseif ( $options['default'] === 'CURRENT_TIMESTAMP' ) { + $default_format = '%s'; + } + else { + $default_format = "'%s'"; + } + $default_value = \sprintf( $default_format, $options['default'] ); + $sql .= \sprintf( ' DEFAULT %s', $default_value ); + } + if ( \array_key_exists( 'null', $options ) ) { + if ( $options['null'] === false || $options['null'] === 'NO' ) { + $sql .= ' NOT NULL'; + } + elseif ( $type === 'timestamp' ) { + $sql .= ' NULL'; + } + } + if ( \array_key_exists( 'comment', $options ) ) { + $sql .= \sprintf( " COMMENT '%s'", $this->quote_string( $options['comment'] ) ); + } + if ( \array_key_exists( 'extra', $options ) ) { + $sql .= \sprintf( ' %s', $this->quote_string( $options['extra'] ) ); + } + if ( \array_key_exists( 'after', $options ) ) { + $sql .= \sprintf( ' AFTER %s', $this->identifier( $options['after'] ) ); + } + + return $sql; + } + + /** + * Returns a list of all versions that have been migrated. + * + * @return string[] The version numbers that have been migrated. + */ + public function get_migrated_versions() { + $result = $this->select_all( \sprintf( 'SELECT version FROM %s', $this->get_schema_version_table_name() ) ); + return \array_column( $result, 'version' ); + } + + /** + * Adds a migrated version. + * + * @param string $version The version. + * + * @return bool Whether or not the version was succesfully set. + */ + public function add_version( $version ) { + $sql = \sprintf( "INSERT INTO %s (version) VALUES ('%s')", $this->get_schema_version_table_name(), $version ); + + return $this->execute_ddl( $sql ); + } + + /** + * Removes a migrated version. + * + * @param string $version The version. + * + * @return bool Whether or not the version was succesfully removed. + */ + public function remove_version( $version ) { + $sql = \sprintf( "DELETE FROM %s WHERE version = '%s'", $this->get_schema_version_table_name(), $version ); + + return $this->execute_ddl( $sql ); + } + + /** + * Returns a message displaying the current version + * + * @return string + */ + public function __toString() { + return self::class . ', version ' . $this->version; + } + + /** + * Returns an index name. + * + * @param string $table_name The table name. + * @param string $column_name The column name. + * + * @return string The index name. + */ + private function get_index_name( $table_name, $column_name ) { + $name = \preg_replace( '/\\W/', '_', $table_name ); + $name = \preg_replace( '/\\_{2,}/', '_', $name ); + // If the column parameter is an array then the user wants to create a multi-column index. + if ( \is_array( $column_name ) ) { + $column_str = \implode( '_and_', $column_name ); + } + else { + $column_str = $column_name; + } + $name .= \sprintf( '_%s', $column_str ); + return $name; + } + + /** + * Returns the type of a query. + * + * @param string $query The query to run. + * + * @return int The query type. + */ + private function determine_query_type( $query ) { + $query = \strtolower( \trim( $query ) ); + $match = []; + \preg_match( '/^(\\w)*/i', $query, $match ); + $type = $match[0]; + switch ( $type ) { + case 'select': + return Constants::SQL_SELECT; + case 'update': + return Constants::SQL_UPDATE; + case 'delete': + return Constants::SQL_DELETE; + case 'insert': + return Constants::SQL_INSERT; + case 'alter': + return Constants::SQL_ALTER; + case 'drop': + return Constants::SQL_DROP; + case 'create': + return Constants::SQL_CREATE; + case 'show': + return Constants::SQL_SHOW; + case 'rename': + return Constants::SQL_RENAME; + case 'set': + return Constants::SQL_SET; + default: + return Constants::SQL_UNKNOWN_QUERY_TYPE; + } + } + + /** + * Detect whether or not the string represents a function call and if so + * do not wrap it in single-quotes, otherwise do wrap in single quotes. + * + * @param string $text The string. + * + * @return bool Whether or not it's a SQL function call. + */ + private function is_sql_method_call( $text ) { + $text = \trim( $text ); + if ( \substr( $text, -2, 2 ) === '()' ) { + return true; + } + return false; + } + + /** + * Checks if a transaction is active. + * + * @return bool + */ + private function in_transaction() { + return $this->in_transaction; + } + + /** + * Starts a transaction. + * + * @return void + * + * @throws Exception If a transaction was already started. + */ + private function begin_transaction() { + global $wpdb; + + if ( $this->in_transaction === true ) { + throw new Exception( 'Transaction already started' ); + } + $wpdb->query( 'START TRANSACTION' ); + $this->in_transaction = true; + } + + /** + * Commits a transaction. + * + * @return void + * + * @throws Exception If no transaction was strated. + */ + private function commit() { + global $wpdb; + + if ( $this->in_transaction === false ) { + throw new Exception( 'Transaction not started' ); + } + $wpdb->query( 'COMMIT' ); + $this->in_transaction = false; + } + + /** + * Rollbacks a transaction. + * + * @return void + * + * @throws Exception If no transaction was started. + */ + private function rollback() { + global $wpdb; + + if ( $this->in_transaction === false ) { + throw new Exception( 'Transaction not started' ); + } + $wpdb->query( 'ROLLBACK' ); + $this->in_transaction = false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/lib/migrations/column.php b/wp/wp-content/plugins/wordpress-seo/lib/migrations/column.php new file mode 100644 index 00000000..8faf396c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/migrations/column.php @@ -0,0 +1,101 @@ +adapter = $adapter; + $this->name = $name; + $this->type = $type; + $this->options = $options; + } + + /** + * Returns the SQL of this column. + * + * @return string + */ + public function to_sql() { + $column_sql = \sprintf( '%s %s', $this->adapter->identifier( $this->name ), $this->sql_type() ); + $column_sql .= $this->adapter->add_column_options( $this->type, $this->options ); + return $column_sql; + } + + /** + * The SQL string version. + * + * @return string + */ + public function __toString() { + return $this->to_sql(); + } + + /** + * The SQL type. + * + * @return string + */ + private function sql_type() { + return $this->adapter->type_to_sql( $this->type, $this->options ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/lib/migrations/constants.php b/wp/wp-content/plugins/wordpress-seo/lib/migrations/constants.php new file mode 100644 index 00000000..c8291623 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/migrations/constants.php @@ -0,0 +1,22 @@ +set_adapter( $adapter ); + } + + /** + * Sets an adapter. + * + * @param Adapter $adapter The adapter to set. + * + * @return $this|null + */ + public function set_adapter( $adapter ) { + if ( ! $adapter instanceof Adapter ) { + return; + } + $this->adapter = $adapter; + return $this; + } + + /** + * Returns the current adapter. + * + * @return object + */ + public function get_adapter() { + return $this->adapter; + } + + /** + * Creates a database. + * + * @param string $name The name of the database. + * @param array|null $options The options. + * + * @return bool + */ + public function create_database( $name, $options = null ) { + return $this->adapter->create_database( $name, $options ); + } + + /** + * Drops a database. + * + * @param string $name The name of the database. + * + * @return bool + */ + public function drop_database( $name ) { + return $this->adapter->drop_database( $name ); + } + + /** + * Drops a table. + * + * @param string $table_name The name of the table. + * + * @return bool + */ + public function drop_table( $table_name ) { + return $this->adapter->drop_table( $table_name ); + } + + /** + * Renames a table. + * + * @param string $name The name of the table. + * @param string $new_name The new name of the table. + * + * @return bool + */ + public function rename_table( $name, $new_name ) { + return $this->adapter->rename_table( $name, $new_name ); + } + + /** + * Renames a column. + * + * @param string $table_name The name of the table. + * @param string $column_name The column name. + * @param string $new_column_name The new column name. + * + * @return bool + */ + public function rename_column( $table_name, $column_name, $new_column_name ) { + return $this->adapter->rename_column( $table_name, $column_name, $new_column_name ); + } + + /** + * Adds a column. + * + * @param string $table_name The name of the table. + * @param string $column_name The column name. + * @param string $type The column type. + * @param array|string $options The options. + * + * @return bool + */ + public function add_column( $table_name, $column_name, $type, $options = [] ) { + return $this->adapter->add_column( $table_name, $column_name, $type, $options ); + } + + /** + * Removes a column. + * + * @param string $table_name The name of the table. + * @param string $column_name The column name. + * + * @return bool + */ + public function remove_column( $table_name, $column_name ) { + return $this->adapter->remove_column( $table_name, $column_name ); + } + + /** + * Changes a column. + * + * @param string $table_name The name of the table. + * @param string $column_name The column name. + * @param string $type The column type. + * @param array|string $options The options. + * + * @return bool + */ + public function change_column( $table_name, $column_name, $type, $options = [] ) { + return $this->adapter->change_column( $table_name, $column_name, $type, $options ); + } + + /** + * Adds an index. + * + * @param string $table_name The name of the table. + * @param array|string $column_name The column name. + * @param array|string $options The options. + * + * @return bool + */ + public function add_index( $table_name, $column_name, $options = [] ) { + return $this->adapter->add_index( $table_name, $column_name, $options ); + } + + /** + * Removes an index. + * + * @param string $table_name The name of the table. + * @param array|string $column_name The column name. + * @param array|string $options The options. + * + * @return bool + */ + public function remove_index( $table_name, $column_name, $options = [] ) { + return $this->adapter->remove_index( $table_name, $column_name, $options ); + } + + /** + * Adds timestamps. + * + * @param string $table_name The name of the table. + * @param string $created_column_name Created at column name. + * @param string $updated_column_name Updated at column name. + * + * @return bool + */ + public function add_timestamps( $table_name, $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) { + return $this->adapter->add_timestamps( $table_name, $created_column_name, $updated_column_name ); + } + + /** + * Removes timestamps. + * + * @param string $table_name The name of the table. + * @param string $created_column_name Created at column name. + * @param string $updated_column_name Updated at column name. + * + * @return bool + */ + public function remove_timestamps( $table_name, $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) { + return $this->adapter->remove_timestamps( $table_name, $created_column_name, $updated_column_name ); + } + + /** + * Creates a table. + * + * @param string $table_name The name of the table. + * @param array|string $options The options. + * + * @return bool|Table + */ + public function create_table( $table_name, $options = [] ) { + return $this->adapter->create_table( $table_name, $options ); + } + + /** + * Execute a query and return the first result. + * + * @param string $sql The query to run. + * + * @return array + */ + public function select_one( $sql ) { + return $this->adapter->select_one( $sql ); + } + + /** + * Execute a query and return all results. + * + * @param string $sql The query to run. + * + * @return array + */ + public function select_all( $sql ) { + return $this->adapter->select_all( $sql ); + } + + /** + * Execute a query. + * + * @param string $sql The query to run. + * + * @return bool + */ + public function query( $sql ) { + return $this->adapter->query( $sql ); + } + + /** + * Returns a quoted string. + * + * @param string $str The string to quote. + * + * @return string + */ + public function quote_string( $str ) { + return $this->adapter->quote_string( $str ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/lib/migrations/table.php b/wp/wp-content/plugins/wordpress-seo/lib/migrations/table.php new file mode 100644 index 00000000..8ad2228c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/migrations/table.php @@ -0,0 +1,260 @@ +adapter = $adapter; + $this->name = $name; + $this->options = $options; + $this->init_sql( $name, $options ); + if ( \array_key_exists( 'id', $options ) ) { + if ( \is_bool( $options['id'] ) && $options['id'] === false ) { + $this->auto_generate_id = false; + } + + // If its a string then we want to auto-generate an integer-based + // primary key with this name. + if ( \is_string( $options['id'] ) ) { + $this->auto_generate_id = true; + $this->primary_keys[] = $options['id']; + } + } + } + + /** + * Create a column + * + * @param string $column_name The column name. + * @param string $type The column type. + * @param array $options The options. + * + * @return void + */ + public function column( $column_name, $type, $options = [] ) { + // If there is already a column by the same name then silently fail and continue. + foreach ( $this->columns as $column ) { + if ( $column->name === $column_name ) { + return; + } + } + + $column_options = []; + if ( \array_key_exists( 'primary_key', $options ) ) { + if ( $options['primary_key'] ) { + $this->primary_keys[] = $column_name; + } + } + if ( \array_key_exists( 'auto_increment', $options ) ) { + if ( $options['auto_increment'] ) { + $column_options['auto_increment'] = true; + } + } + $column_options = \array_merge( $column_options, $options ); + $column = new Column( $this->adapter, $column_name, $type, $column_options ); + $this->columns[] = $column; + } + + /** + * Shortcut to create timestamps columns (default created_at, updated_at) + * + * @param string $created_column_name Created at column name. + * @param string $updated_column_name Updated at column name. + * + * @return void + */ + public function timestamps( $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) { + $this->column( $created_column_name, 'datetime' ); + $this->column( + $updated_column_name, + 'timestamp', + [ + 'null' => false, + 'default' => 'CURRENT_TIMESTAMP', + 'extra' => 'ON UPDATE CURRENT_TIMESTAMP', + ] + ); + } + + /** + * Get all primary keys + * + * @return string + */ + private function keys() { + if ( \count( $this->primary_keys ) > 0 ) { + $lead = ' PRIMARY KEY ('; + $quoted = []; + foreach ( $this->primary_keys as $key ) { + $quoted[] = \sprintf( '%s', $this->adapter->identifier( $key ) ); + } + $primary_key_sql = ",\n" . $lead . \implode( ',', $quoted ) . ')'; + return $primary_key_sql; + } + + return ''; + } + + /** + * Table definition + * + * @param bool $wants_sql Whether or not to return SQL or execute the query. Defaults to false. + * + * @return bool|string + * + * @throws Exception If the table definition has not been intialized. + */ + public function finish( $wants_sql = false ) { + if ( ! $this->initialized ) { + throw new Exception( \sprintf( "Table Definition: '%s' has not been initialized", $this->name ) ); + } + $opt_str = ''; + if ( \is_array( $this->options ) && \array_key_exists( 'options', $this->options ) ) { + $opt_str = $this->options['options']; + } + elseif ( isset( $this->adapter->db_info['charset'] ) ) { + $opt_str = ' DEFAULT CHARSET=' . $this->adapter->db_info['charset']; + } + else { + $opt_str = ' DEFAULT CHARSET=utf8'; + } + $close_sql = \sprintf( ') %s;', $opt_str ); + $create_table_sql = $this->sql; + if ( $this->auto_generate_id === true ) { + $this->primary_keys[] = 'id'; + $primary_id = new Column( + $this->adapter, + 'id', + 'integer', + [ + 'unsigned' => true, + 'null' => false, + 'auto_increment' => true, + ] + ); + $create_table_sql .= $primary_id->to_sql() . ",\n"; + } + $create_table_sql .= $this->columns_to_str(); + $create_table_sql .= $this->keys() . $close_sql; + if ( $wants_sql ) { + return $create_table_sql; + } + return $this->adapter->execute_ddl( $create_table_sql ); + } + + /** + * Get SQL for all columns. + * + * @return string The SQL. + */ + private function columns_to_str() { + $fields = []; + $len = \count( $this->columns ); + for ( $i = 0; $i < $len; $i++ ) { + $c = $this->columns[ $i ]; + $fields[] = $c->__toString(); + } + return \implode( ",\n", $fields ); + } + + /** + * Init create sql statement. + * + * @param string $name The name. + * @param array $options The options. + * + * @return void + */ + private function init_sql( $name, $options ) { + // Are we forcing table creation? If so, drop it first. + if ( \array_key_exists( 'force', $options ) && $options['force'] === true ) { + $this->adapter->drop_table( $name ); + } + $temp = ''; + if ( \array_key_exists( 'temporary', $options ) ) { + $temp = ' TEMPORARY'; + } + $create_sql = \sprintf( 'CREATE%s TABLE ', $temp ); + $create_sql .= \sprintf( "%s (\n", $this->adapter->identifier( $name ) ); + $this->sql .= $create_sql; + $this->initialized = true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/lib/model.php b/wp/wp-content/plugins/wordpress-seo/lib/model.php new file mode 100644 index 00000000..eb767b1d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/model.php @@ -0,0 +1,730 @@ +prefix . \strtolower( $table_name ); + } + + /** + * Sets the table name for the given class name. + * + * @param string $class_name The class to set the table name for. + * + * @return void + */ + protected function set_table_name( $class_name ) { + // Prepend namespace to the class name. + $class = static::$auto_prefix_models . $class_name; + + $class::$table = static::get_table_name( $class_name ); + } + + /** + * Retrieve the value of a static property on a class. If the + * class or the property does not exist, returns the default + * value supplied as the third argument (which defaults to null). + * + * @param string $class_name The target class name. + * @param string $property The property to get the value for. + * @param mixed|null $default_value Default value when property does not exist. + * + * @return mixed|null The value of the property. + */ + protected static function get_static_property( $class_name, $property, $default_value = null ) { + if ( ! \class_exists( $class_name ) || ! \property_exists( $class_name, $property ) ) { + return $default_value; + } + + if ( ! isset( $class_name::${$property} ) ) { + return $default_value; + } + + return $class_name::${$property}; + } + + /** + * Static method to get a table name given a class name. + * If the supplied class has a public static property + * named $table, the value of this property will be + * returned. + * + * If not, the class name will be converted using + * the class_name_to_table_name() method. + * + * If Model::$short_table_names == true or public static + * property $table_use_short_name == true then $class_name passed + * to class_name_to_table_name() is stripped of namespace information. + * + * @param string $class_name The class name to get the table name for. + * + * @return string The table name. + */ + protected static function get_table_name_for_class( $class_name ) { + $specified_table_name = static::get_static_property( $class_name, 'table' ); + $use_short_class_name = static::use_short_table_name( $class_name ); + if ( $use_short_class_name ) { + $exploded_class_name = \explode( '\\', $class_name ); + $class_name = \end( $exploded_class_name ); + } + + if ( $specified_table_name === null ) { + return static::class_name_to_table_name( $class_name ); + } + + return $specified_table_name; + } + + /** + * Should short table names, disregarding class namespaces, be computed? + * + * $class_property overrides $global_option, unless $class_property is null. + * + * @param string $class_name The class name to get short name for. + * + * @return bool True when short table name should be used. + */ + protected static function use_short_table_name( $class_name ) { + $class_property = static::get_static_property( $class_name, 'table_use_short_name' ); + + if ( $class_property === null ) { + return static::$short_table_names; + } + + return $class_property; + } + + /** + * Convert a namespace to the standard PEAR underscore format. + * + * Then convert a class name in CapWords to a table name in + * lowercase_with_underscores. + * + * Finally strip doubled up underscores. + * + * For example, CarTyre would be converted to car_tyre. And + * Project\Models\CarTyre would be project_models_car_tyre. + * + * @param string $class_name The class name to get the table name for. + * + * @return string The table name. + */ + protected static function class_name_to_table_name( $class_name ) { + $find = [ + '/\\\\/', + '/(?<=[a-z])([A-Z])/', + '/__/', + ]; + $replacements = [ + '_', + '_$1', + '_', + ]; + + $class_name = \ltrim( $class_name, '\\' ); + $class_name = \preg_replace( $find, $replacements, $class_name ); + + return \strtolower( $class_name ); + } + + /** + * Return the ID column name to use for this class. If it is + * not set on the class, returns null. + * + * @param string $class_name The class name to get the ID column for. + * + * @return string|null The ID column name. + */ + protected static function get_id_column_name( $class_name ) { + return static::get_static_property( $class_name, 'id_column', static::DEFAULT_ID_COLUMN ); + } + + /** + * Build a foreign key based on a table name. If the first argument + * (the specified foreign key column name) is null, returns the second + * argument (the name of the table) with the default foreign key column + * suffix appended. + * + * @param string $specified_foreign_key_name The keyname to build. + * @param string $table_name The table name to build the key name for. + * + * @return string The built foreign key name. + */ + protected static function build_foreign_key_name( $specified_foreign_key_name, $table_name ) { + if ( $specified_foreign_key_name !== null ) { + return $specified_foreign_key_name; + } + + return $table_name . static::DEFAULT_FOREIGN_KEY_SUFFIX; + } + + /** + * Factory method used to acquire instances of the given class. + * The class name should be supplied as a string, and the class + * should already have been loaded by PHP (or a suitable autoloader + * should exist). This method actually returns a wrapped ORM object + * which allows a database query to be built. The wrapped ORM object is + * responsible for returning instances of the correct class when + * its find_one or find_many methods are called. + * + * @param string $class_name The target class name. + * + * @return ORM Instance of the ORM wrapper. + */ + public static function factory( $class_name ) { + $class_name = static::$auto_prefix_models . $class_name; + $table_name = static::get_table_name_for_class( $class_name ); + $wrapper = ORM::for_table( $table_name ); + $wrapper->set_class_name( $class_name ); + $wrapper->use_id_column( static::get_id_column_name( $class_name ) ); + + return $wrapper; + } + + /** + * Internal method to construct the queries for both the has_one and + * has_many methods. These two types of association are identical; the + * only difference is whether find_one or find_many is used to complete + * the method chain. + * + * @param string $associated_class_name The associated class name. + * @param string|null $foreign_key_name The foreign key name in the associated table. + * @param string|null $foreign_key_name_in_current_models_table The foreign key in the current models table. + * + * @return ORM Instance of the ORM. + * + * @throws Exception When ID of current model has a null value. + */ + protected function has_one_or_many( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_current_models_table = null ) { + $base_table_name = static::get_table_name_for_class( static::class ); + $foreign_key_name = static::build_foreign_key_name( $foreign_key_name, $base_table_name ); + + /* + * Value of foreign_table.{$foreign_key_name} we're looking for. Where foreign_table is the actual + * database table in the associated model. + */ + if ( $foreign_key_name_in_current_models_table === null ) { + // Matches foreign_table.{$foreign_key_name} with the value of "{$this->table}.{$this->id()}". + $where_value = $this->id(); + } + else { + // Matches foreign_table.{$foreign_key_name} with "{$this->table}.{$foreign_key_name_in_current_models_table}". + $where_value = $this->{$foreign_key_name_in_current_models_table}; + } + + return static::factory( $associated_class_name )->where( $foreign_key_name, $where_value ); + } + + /** + * Helper method to manage one-to-one relations where the foreign + * key is on the associated table. + * + * @param string $associated_class_name The associated class name. + * @param string|null $foreign_key_name The foreign key name in the associated table. + * @param string|null $foreign_key_name_in_current_models_table The foreign key in the current models table. + * + * @return ORM Instance of the ORM. + * + * @throws Exception When ID of current model has a null value. + */ + protected function has_one( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_current_models_table = null ) { + return $this->has_one_or_many( $associated_class_name, $foreign_key_name, $foreign_key_name_in_current_models_table ); + } + + /** + * Helper method to manage one-to-many relations where the foreign + * key is on the associated table. + * + * @param string $associated_class_name The associated class name. + * @param string|null $foreign_key_name The foreign key name in the associated table. + * @param string|null $foreign_key_name_in_current_models_table The foreign key in the current models table. + * + * @return ORM Instance of the ORM. + * + * @throws Exception When ID has a null value. + */ + protected function has_many( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_current_models_table = null ) { + $this->set_table_name( $associated_class_name ); + + return $this->has_one_or_many( $associated_class_name, $foreign_key_name, $foreign_key_name_in_current_models_table ); + } + + /** + * Helper method to manage one-to-one and one-to-many relations where + * the foreign key is on the base table. + * + * @param string $associated_class_name The associated class name. + * @param string|null $foreign_key_name The foreign key in the current models table. + * @param string|null $foreign_key_name_in_associated_models_table The foreign key in the associated table. + * + * @return $this|null Instance of the foreign model. + */ + protected function belongs_to( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_associated_models_table = null ) { + $this->set_table_name( $associated_class_name ); + + $associated_table_name = static::get_table_name_for_class( static::$auto_prefix_models . $associated_class_name ); + $foreign_key_name = static::build_foreign_key_name( $foreign_key_name, $associated_table_name ); + $associated_object_id = $this->{$foreign_key_name}; + + if ( $foreign_key_name_in_associated_models_table === null ) { + /* + * Comparison: "{$associated_table_name}.primary_key = {$associated_object_id}". + * + * NOTE: primary_key is a placeholder for the actual primary key column's name in $associated_table_name. + */ + return static::factory( $associated_class_name )->where_id_is( $associated_object_id ); + } + + // Comparison: "{$associated_table_name}.{$foreign_key_name_in_associated_models_table} = {$associated_object_id}". + return static::factory( $associated_class_name ) + ->where( $foreign_key_name_in_associated_models_table, $associated_object_id ); + } + + /** + * Helper method to manage many-to-many relationships via an intermediate model. See + * README for a full explanation of the parameters. + * + * @param string $associated_class_name The associated class name. + * @param string|null $join_class_name The class name to join. + * @param string|null $key_to_base_table The key to the the current models table. + * @param string|null $key_to_associated_table The key to the associated table. + * @param string|null $key_in_base_table The key in the current models table. + * @param string|null $key_in_associated_table The key in the associated table. + * + * @return ORM Instance of the ORM. + */ + protected function has_many_through( $associated_class_name, $join_class_name = null, $key_to_base_table = null, $key_to_associated_table = null, $key_in_base_table = null, $key_in_associated_table = null ) { + $base_class_name = static::class; + + /* + * The class name of the join model, if not supplied, is formed by + * concatenating the names of the base class and the associated class, + * in alphabetical order. + */ + if ( $join_class_name === null ) { + $base_model = \explode( '\\', $base_class_name ); + $base_model_name = \end( $base_model ); + if ( \strpos( $base_model_name, static::$auto_prefix_models ) === 0 ) { + $base_model_name = \substr( $base_model_name, \strlen( static::$auto_prefix_models ), \strlen( $base_model_name ) ); + } + // Paris wasn't checking the name settings for the associated class. + $associated_model = \explode( '\\', $associated_class_name ); + $associated_model_name = \end( $associated_model ); + if ( \strpos( $associated_model_name, static::$auto_prefix_models ) === 0 ) { + $associated_model_name = \substr( $associated_model_name, \strlen( static::$auto_prefix_models ), \strlen( $associated_model_name ) ); + } + $class_names = [ $base_model_name, $associated_model_name ]; + \sort( $class_names, \SORT_STRING ); + $join_class_name = \implode( '', $class_names ); + } + + // Get table names for each class. + $base_table_name = static::get_table_name_for_class( $base_class_name ); + $associated_table_name = static::get_table_name_for_class( static::$auto_prefix_models . $associated_class_name ); + $join_table_name = static::get_table_name_for_class( static::$auto_prefix_models . $join_class_name ); + + // Get ID column names. + $base_table_id_column = ( $key_in_base_table === null ) ? static::get_id_column_name( $base_class_name ) : $key_in_base_table; + $associated_table_id_column = ( $key_in_associated_table === null ) ? static::get_id_column_name( static::$auto_prefix_models . $associated_class_name ) : $key_in_associated_table; + + // Get the column names for each side of the join table. + $key_to_base_table = static::build_foreign_key_name( $key_to_base_table, $base_table_name ); + $key_to_associated_table = static::build_foreign_key_name( $key_to_associated_table, $associated_table_name ); + + /* phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- Reason: This is commented out code. + " SELECT {$associated_table_name}.* + FROM {$associated_table_name} JOIN {$join_table_name} + ON {$associated_table_name}.{$associated_table_id_column} = {$join_table_name}.{$key_to_associated_table} + WHERE {$join_table_name}.{$key_to_base_table} = {$this->$base_table_id_column} ;" + */ + + return static::factory( $associated_class_name ) + ->select( "{$associated_table_name}.*" ) + ->join( + $join_table_name, + [ + "{$associated_table_name}.{$associated_table_id_column}", + '=', + "{$join_table_name}.{$key_to_associated_table}", + ] + ) + ->where( "{$join_table_name}.{$key_to_base_table}", $this->{$base_table_id_column} ); + } + + /** + * Set the wrapped ORM instance associated with this Model instance. + * + * @param ORM $orm The ORM instance to set. + * + * @return void + */ + public function set_orm( $orm ) { + $this->orm = $orm; + } + + /** + * Magic getter method, allows $model->property access to data. + * + * @param string $property The property to get. + * + * @return mixed The value of the property + */ + public function __get( $property ) { + $value = $this->orm->get( $property ); + + if ( $value !== null && \in_array( $property, $this->boolean_columns, true ) ) { + return (bool) $value; + } + if ( $value !== null && \in_array( $property, $this->int_columns, true ) ) { + return (int) $value; + } + if ( $value !== null && \in_array( $property, $this->float_columns, true ) ) { + return (float) $value; + } + + return $value; + } + + /** + * Magic setter method, allows $model->property = 'value' access to data. + * + * @param string $property The property to set. + * @param string $value The value to set. + * + * @return void + */ + public function __set( $property, $value ) { + if ( $value !== null && \in_array( $property, $this->boolean_columns, true ) ) { + $value = ( $value ) ? '1' : '0'; + } + if ( $value !== null && \in_array( $property, $this->int_columns, true ) ) { + $value = (string) $value; + } + if ( $value !== null && \in_array( $property, $this->float_columns, true ) ) { + $value = (string) $value; + } + + $this->orm->set( $property, $value ); + } + + /** + * Magic unset method, allows unset($model->property) + * + * @param string $property The property to unset. + * + * @return void + */ + public function __unset( $property ) { + $this->orm->__unset( $property ); + } + + /** + * JSON serializer. + * + * @return array The data of this object. + */ + #[ReturnTypeWillChange] + public function jsonSerialize() { + return $this->orm->as_array(); + } + + /** + * Strips all nested dependencies from the debug info. + * + * @return array + */ + public function __debugInfo() { + if ( $this->orm ) { + return $this->orm->as_array(); + } + + return []; + } + + /** + * Magic isset method, allows isset($model->property) to work correctly. + * + * @param string $property The property to check. + * + * @return bool True when value is set. + */ + public function __isset( $property ) { + return $this->orm->__isset( $property ); + } + + /** + * Getter method, allows $model->get('property') access to data + * + * @param string $property The property to get. + * + * @return string The value of a property. + */ + public function get( $property ) { + return $this->orm->get( $property ); + } + + /** + * Setter method, allows $model->set('property', 'value') access to data. + * + * @param string|array $property The property to set. + * @param string|null $value The value to give. + * + * @return static Current object. + */ + public function set( $property, $value = null ) { + $this->orm->set( $property, $value ); + + return $this; + } + + /** + * Setter method, allows $model->set_expr('property', 'value') access to data. + * + * @param string|array $property The property to set. + * @param string|null $value The value to give. + * + * @return static Current object. + */ + public function set_expr( $property, $value = null ) { + $this->orm->set_expr( $property, $value ); + + return $this; + } + + /** + * Check whether the given property has changed since the object was created or saved. + * + * @param string $property The property to check. + * + * @return bool True when field is changed. + */ + public function is_dirty( $property ) { + return $this->orm->is_dirty( $property ); + } + + /** + * Check whether the model was the result of a call to create() or not. + * + * @return bool True when is new. + */ + public function is_new() { + return $this->orm->is_new(); + } + + /** + * Wrapper for Idiorm's as_array method. + * + * @return array The models data as array. + */ + public function as_array() { + $args = \func_get_args(); + + return \call_user_func_array( [ $this->orm, 'as_array' ], $args ); + } + + /** + * Save the data associated with this model instance to the database. + * + * @return bool True on success. + */ + public function save() { + if ( $this->uses_timestamps ) { + if ( ! $this->created_at ) { + $this->created_at = \gmdate( 'Y-m-d H:i:s' ); + } + $this->updated_at = \gmdate( 'Y-m-d H:i:s' ); + } + + return $this->orm->save(); + } + + /** + * Delete the database row associated with this model instance. + * + * @return bool|int Response of wpdb::query. + */ + public function delete() { + return $this->orm->delete(); + } + + /** + * Get the database ID of this model instance. + * + * @return int The database ID of the models instance. + * + * @throws Exception When the ID is a null value. + */ + public function id() { + return $this->orm->id(); + } + + /** + * Hydrate this model instance with an associative array of data. + * WARNING: The keys in the array MUST match with columns in the + * corresponding database table. If any keys are supplied which + * do not match up with columns, the database will throw an error. + * + * @param array $data The data to pass to the ORM. + * + * @return void + */ + public function hydrate( $data ) { + $this->orm->hydrate( $data )->force_all_dirty(); + } + + /** + * Calls static methods directly on the ORM + * + * @param string $method The method to call. + * @param array $arguments The arguments to use. + * + * @return array Result of the static call. + */ + public static function __callStatic( $method, $arguments ) { + if ( ! \function_exists( 'get_called_class' ) ) { + return []; + } + + $model = static::factory( static::class ); + + return \call_user_func_array( [ $model, $method ], $arguments ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/lib/orm.php b/wp/wp-content/plugins/wordpress-seo/lib/orm.php new file mode 100644 index 00000000..58c89416 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/lib/orm.php @@ -0,0 +1,2553 @@ + 10') + * + * @param string $query The raw SQL query. + * @param array $parameters Optional bound parameters. + * + * @return bool Success. + */ + public static function raw_execute( $query, $parameters = [] ) { + return self::execute( $query, $parameters ); + } + + /** + * Internal helper method for executing statements. + * + * @param string $query The query. + * @param array $parameters An array of parameters to be bound in to the query. + * + * @return bool|int Response of wpdb::query + */ + protected static function execute( $query, $parameters = [] ) { + /** + * The global WordPress database variable. + * + * @var wpdb + */ + global $wpdb; + + $show_errors = $wpdb->show_errors; + + if ( \YoastSEO()->classes->get( Migration_Status::class )->get_error( 'free' ) ) { + $wpdb->show_errors = false; + } + + $parameters = \array_filter( + $parameters, + static function ( $parameter ) { + return $parameter !== null; + } + ); + if ( ! empty( $parameters ) ) { + $query = $wpdb->prepare( $query, $parameters ); + } + + $result = $wpdb->query( $query ); + + $wpdb->show_errors = $show_errors; + + return $result; + } + + /* + * --- INSTANCE METHODS --- + */ + + /** + * "Private" constructor; shouldn't be called directly. + * Use the ORM::for_table factory method instead. + * + * @param string $table_name Table name. + * @param array $data Data to populate table. + */ + protected function __construct( $table_name, $data = [] ) { + $this->table_name = $table_name; + $this->data = $data; + } + + /** + * Sets the name of the class which the wrapped methods should return instances of. + * + * @param string $class_name The classname to set. + * + * @return void + */ + public function set_class_name( $class_name ) { + $this->class_name = $class_name; + } + + /** + * Creates a new, empty instance of the class. Used to add a new row to your database. May optionally be passed an + * associative array of data to populate the instance. If so, all fields will be flagged as dirty so all will be + * saved to the database when save() is called. + * + * @param array|null $data Data to populate table. + * + * @return bool|Model|ORM + */ + public function create( $data = null ) { + $this->is_new = true; + if ( ! \is_null( $data ) ) { + $this->hydrate( $data )->force_all_dirty(); + } + + return $this->create_model_instance( $this ); + } + + /** + * Specifies the ID column to use for this instance or array of instances only. + * This overrides the id_column and id_column_overrides settings. + * + * This is mostly useful for libraries built on top of Idiorm, and will not normally be used in manually built + * queries. If you don't know why you would want to use this, you should probably just ignore it. + * + * @param string $id_column The ID column. + * + * @return ORM + */ + public function use_id_column( $id_column ) { + $this->instance_id_column = $id_column; + + return $this; + } + + /** + * Creates an ORM instance from the given row (an associative array of data fetched from the database). + * + * @param array $row A row from the database. + * + * @return bool|Model + */ + protected function create_instance_from_row( $row ) { + $instance = self::for_table( $this->table_name ); + $instance->use_id_column( $this->instance_id_column ); + $instance->hydrate( $row ); + + return $this->create_model_instance( $instance ); + } + + /** + * Tells the ORM that you are expecting a single result back from your query, and execute it. Will return a single + * instance of the ORM class, or false if no rows were returned. As a shortcut, you may supply an ID as a parameter + * to this method. This will perform a primary key lookup on the table. + * + * @param int|null $id An (optional) ID. + * + * @return bool|Model + */ + public function find_one( $id = null ) { + if ( ! \is_null( $id ) ) { + $this->where_id_is( $id ); + } + $this->limit( 1 ); + $rows = $this->run(); + if ( empty( $rows ) ) { + return false; + } + + return $this->create_instance_from_row( $rows[0] ); + } + + /** + * Tells the ORM that you are expecting multiple results from your query, and execute it. Will return an array of + * instances of the ORM class, or an empty array if no rows were returned. + * + * @return array + */ + public function find_many() { + $rows = $this->run(); + + if ( $rows === false ) { + return []; + } + + return \array_map( [ $this, 'create_instance_from_row' ], $rows ); + } + + /** + * Creates an instance of the model class associated with this wrapper and populate it with the supplied Idiorm + * instance. + * + * @param ORM $orm The ORM used by model. + * + * @return bool|Model Instance of the model class. + */ + protected function create_model_instance( $orm ) { + if ( $orm === false ) { + return false; + } + + /** + * An instance of Model is being made. + * + * @var Model $model + */ + $model = new $this->class_name(); + $model->set_orm( $orm ); + + return $model; + } + + /** + * Tells the ORM that you are expecting multiple results from your query, and execute it. Will return an array, or + * an empty array if no rows were returned. + * + * @return array The query results. + */ + public function find_array() { + return $this->run(); + } + + /** + * Tells the ORM that you wish to execute a COUNT query. + * + * @param string $column The table column. + * + * @return float|int An integer representing the number of rows returned. + */ + public function count( $column = '*' ) { + return $this->call_aggregate_db_function( __FUNCTION__, $column ); + } + + /** + * Tells the ORM that you wish to execute a MAX query. + * + * @param string $column The table column. + * + * @return float|int The max value of the chosen column. + */ + public function max( $column ) { + return $this->call_aggregate_db_function( __FUNCTION__, $column ); + } + + /** + * Tells the ORM that you wish to execute a MIN query. + * + * @param string $column The table column. + * + * @return float|int The min value of the chosen column. + */ + public function min( $column ) { + return $this->call_aggregate_db_function( __FUNCTION__, $column ); + } + + /** + * Tells the ORM that you wish to execute a AVG query. + * + * @param string $column The table column. + * + * @return float|int The average value of the chosen column. + */ + public function avg( $column ) { + return $this->call_aggregate_db_function( __FUNCTION__, $column ); + } + + /** + * Tells the ORM that you wish to execute a SUM query. + * + * @param string $column The table column. + * + * @return float|int The sum of the chosen column. + */ + public function sum( $column ) { + return $this->call_aggregate_db_function( __FUNCTION__, $column ); + } + + /** + * Returns the select query as SQL. + * + * @return string The select query in SQL. + */ + public function get_sql() { + return $this->build_select(); + } + + /** + * Returns the update query as SQL. + * + * @return string The update query in SQL. + */ + public function get_update_sql() { + return $this->build_update(); + } + + /** + * Executes an aggregate query on the current connection. + * + * @param string $sql_function The aggregate function to call eg. MIN, COUNT, etc. + * @param string $column The column to execute the aggregate query against. + * + * @return int + */ + protected function call_aggregate_db_function( $sql_function, $column ) { + $alias = \strtolower( $sql_function ); + $sql_function = \strtoupper( $sql_function ); + if ( $column !== '*' ) { + $column = $this->quote_identifier( $column ); + } + $result_columns = $this->result_columns; + $this->result_columns = []; + $this->select_expr( "{$sql_function}({$column})", $alias ); + $result = $this->find_one(); + $this->result_columns = $result_columns; + $return_value = 0; + if ( $result !== false && isset( $result->{$alias} ) ) { + if ( ! \is_numeric( $result->{$alias} ) ) { + $return_value = $result->{$alias}; + } + // phpcs:ignore Universal.Operators.StrictComparisons -- Reason: This loose comparison seems intentional. + elseif ( (int) $result->{$alias} == (float) $result->{$alias} ) { + $return_value = (int) $result->{$alias}; + } + else { + $return_value = (float) $result->{$alias}; + } + } + + return $return_value; + } + + /** + * Hydrates (populate) this instance of the class from an associative array of data. This will usually be called + * only from inside the class, but it's public in case you need to call it directly. + * + * @param array $data Data to populate table. + * + * @return ORM + */ + public function hydrate( $data = [] ) { + $this->data = $data; + + return $this; + } + + /** + * Forces the ORM to flag all the fields in the $data array as "dirty" and therefore update them when save() is + * called. + * + * @return ORM + */ + public function force_all_dirty() { + $this->dirty_fields = $this->data; + + return $this; + } + + /** + * Performs a raw query. The query can contain placeholders in either named or question mark style. If placeholders + * are used, the parameters should be an array of values which will be bound to the placeholders in the query. + * If this method is called, all other query building methods will be ignored. + * + * @param array $query The query. + * @param array $parameters The parameters. Defaults to an empty array. + * + * @return ORM + */ + public function raw_query( $query, $parameters = [] ) { + $this->is_raw_query = true; + $this->raw_query = $query; + $this->raw_parameters = $parameters; + + return $this; + } + + /** + * Adds an alias for the main table to be used in SELECT queries. + * + * @param string $alias The alias. + * + * @return ORM + */ + public function table_alias( $alias ) { + $this->table_alias = $alias; + + return $this; + } + + /** + * Adds an unquoted expression to the set of columns returned by the SELECT query. Internal method. + * + * @param string $expr The expression. + * @param string|null $alias The alias to return the expression as. Defaults to null. + * + * @return ORM + */ + protected function add_result_column( $expr, $alias = null ) { + if ( ! \is_null( $alias ) ) { + $expr .= ' AS ' . $this->quote_identifier( $alias ); + } + if ( $this->using_default_result_columns ) { + $this->result_columns = [ $expr ]; + $this->using_default_result_columns = false; + } + else { + $this->result_columns[] = $expr; + } + + return $this; + } + + /** + * Counts the number of columns that belong to the primary key and their value is null. + * + * @return int The amount of null columns. + * + * @throws Exception Primary key ID contains null value(s). + * @throws Exception Primary key ID missing from row or is null. + */ + public function count_null_id_columns() { + if ( \is_array( $this->get_id_column_name() ) ) { + return \count( \array_filter( $this->id(), 'is_null' ) ); + } + else { + return \is_null( $this->id() ) ? 1 : 0; + } + } + + /** + * Adds a column to the list of columns returned by the SELECT query. + * + * @param string $column The column. Defaults to '*'. + * @param string|null $alias The alias to return the column as. Defaults to null. + * + * @return ORM + */ + public function select( $column, $alias = null ) { + $column = $this->quote_identifier( $column ); + + return $this->add_result_column( $column, $alias ); + } + + /** + * Adds an unquoted expression to the list of columns returned by the SELECT query. + * + * @param string $expr The expression. + * @param string|null $alias The alias to return the column as. Defaults to null. + * + * @return ORM + */ + public function select_expr( $expr, $alias = null ) { + return $this->add_result_column( $expr, $alias ); + } + + /** + * Adds columns to the list of columns returned by the SELECT query. + * + * This defaults to '*'. + * Many columns can be supplied as either an array or as a list of parameters to the method. + * Note that the alias must not be numeric - if you want a numeric alias then prepend it with some alpha chars. eg. + * a1. + * + * @example select_many(array('column', 'column2', 'column3'), 'column4', 'column5'); + * @example select_many(array('alias' => 'column', 'column2', 'alias2' => 'column3'), 'column4', 'column5'); + * @example select_many('column', 'column2', 'column3'); + * + * @return ORM + */ + public function select_many() { + $columns = \func_get_args(); + if ( ! empty( $columns ) ) { + $columns = $this->normalise_select_many_columns( $columns ); + foreach ( $columns as $alias => $column ) { + if ( \is_numeric( $alias ) ) { + $alias = null; + } + $this->select( $column, $alias ); + } + } + + return $this; + } + + /** + * Adds an unquoted expression to the list of columns returned by the SELECT query. + * + * Many columns can be supplied as either an array or as a list of parameters to the method. + * Note that the alias must not be numeric - if you want a numeric alias then prepend it with some alpha chars. eg. + * a1 + * + * @example select_many_expr(array('alias' => 'column', 'column2', 'alias2' => 'column3'), 'column4', 'column5') + * @example select_many_expr('column', 'column2', 'column3') + * @example select_many_expr(array('column', 'column2', 'column3'), 'column4', 'column5') + * + * @return ORM + */ + public function select_many_expr() { + $columns = \func_get_args(); + if ( ! empty( $columns ) ) { + $columns = $this->normalise_select_many_columns( $columns ); + foreach ( $columns as $alias => $column ) { + if ( \is_numeric( $alias ) ) { + $alias = null; + } + $this->select_expr( $column, $alias ); + } + } + + return $this; + } + + /** + * Takes a column specification for the select many methods and convert it into a normalised array of columns and + * aliases. + * + * It is designed to turn the following styles into a normalised array: + * array(array('alias' => 'column', 'column2', 'alias2' => 'column3'), 'column4', 'column5')) + * + * @param array $columns The columns. + * + * @return array + */ + protected function normalise_select_many_columns( $columns ) { + $return = []; + foreach ( $columns as $column ) { + if ( \is_array( $column ) ) { + foreach ( $column as $key => $value ) { + if ( ! \is_numeric( $key ) ) { + $return[ $key ] = $value; + } + else { + $return[] = $value; + } + } + } + else { + $return[] = $column; + } + } + + return $return; + } + + /** + * Adds a DISTINCT keyword before the list of columns in the SELECT query. + * + * @return ORM + */ + public function distinct() { + $this->distinct = true; + + return $this; + } + + /** + * Add a JOIN source to the query. Internal method. + * + * The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this + * will be prepended to JOIN. + * + * The table should be the name of the table to join to. + * + * The constraint may be either a string or an array with three elements. If it + * is a string, it will be compiled into the query as-is, with no escaping. The + * recommended way to supply the constraint is as an array with three elements: + * + * first_column, operator, second_column + * + * Example: array('user.id', '=', 'profile.user_id') + * + * will compile to + * + * ON `user`.`id` = `profile`.`user_id` + * + * The final (optional) argument specifies an alias for the joined table. + * + * @param string $join_operator The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be + * prepended to JOIN. + * @param string $table The table should be the name of the table to join to. + * @param string $constraint The constraint. + * @param string|null $table_alias The alias for the joined table. Defaults to null. + * + * @return ORM + */ + protected function add_join_source( $join_operator, $table, $constraint, $table_alias = null ) { + $join_operator = \trim( "{$join_operator} JOIN" ); + $table = $this->quote_identifier( $table ); + // Add table alias if present. + if ( ! \is_null( $table_alias ) ) { + $table_alias = $this->quote_identifier( $table_alias ); + $table .= " {$table_alias}"; + } + // Build the constraint. + if ( \is_array( $constraint ) ) { + list( $first_column, $operator, $second_column ) = $constraint; + + $first_column = $this->quote_identifier( $first_column ); + $second_column = $this->quote_identifier( $second_column ); + $constraint = "{$first_column} {$operator} {$second_column}"; + } + $this->join_sources[] = "{$join_operator} {$table} ON {$constraint}"; + + return $this; + } + + /** + * Adds a RAW JOIN source to the query. + * + * @param string $table The table name. + * @param string $constraint The constraint. + * @param string $table_alias The table alias. + * @param array $parameters The parameters. Defaults to an empty array. + * + * @return ORM + */ + public function raw_join( $table, $constraint, $table_alias, $parameters = [] ) { + // Add table alias if present. + if ( ! \is_null( $table_alias ) ) { + $table_alias = $this->quote_identifier( $table_alias ); + $table .= " {$table_alias}"; + } + $this->values = \array_merge( $this->values, $parameters ); + // Build the constraint. + if ( \is_array( $constraint ) ) { + list( $first_column, $operator, $second_column ) = $constraint; + + $first_column = $this->quote_identifier( $first_column ); + $second_column = $this->quote_identifier( $second_column ); + $constraint = "{$first_column} {$operator} {$second_column}"; + } + $this->join_sources[] = "{$table} ON {$constraint}"; + + return $this; + } + + /** + * Adds a simple JOIN source to the query. + * + * @param string $table The table name. + * @param string $constraint The constraint. + * @param string|null $table_alias The table alias. Defaults to null. + * + * @return ORM + */ + public function join( $table, $constraint, $table_alias = null ) { + return $this->add_join_source( '', $table, $constraint, $table_alias ); + } + + /** + * Adds an INNER JOIN source to the query. + * + * @param string $table The table name. + * @param string $constraint The constraint. + * @param string|null $table_alias The table alias. Defaults to null. + * + * @return ORM + */ + public function inner_join( $table, $constraint, $table_alias = null ) { + return $this->add_join_source( 'INNER', $table, $constraint, $table_alias ); + } + + /** + * Adds a LEFT OUTER JOIN source to the query. + * + * @param string $table The table name. + * @param string $constraint The constraint. + * @param string|null $table_alias The table alias. Defaults to null. + * + * @return ORM + */ + public function left_outer_join( $table, $constraint, $table_alias = null ) { + return $this->add_join_source( 'LEFT OUTER', $table, $constraint, $table_alias ); + } + + /** + * Adds a RIGHT OUTER JOIN source to the query. + * + * @param string $table The table name. + * @param string $constraint The constraint. + * @param string|null $table_alias The table alias. Defaults to null. + * + * @return ORM + */ + public function right_outer_join( $table, $constraint, $table_alias = null ) { + return $this->add_join_source( 'RIGHT OUTER', $table, $constraint, $table_alias ); + } + + /** + * Adds a FULL OUTER JOIN source to the query. + * + * @param string $table The table name. + * @param string $constraint The constraint. + * @param string|null $table_alias The table alias. Defaults to null. + * + * @return ORM + */ + public function full_outer_join( $table, $constraint, $table_alias = null ) { + return $this->add_join_source( 'FULL OUTER', $table, $constraint, $table_alias ); + } + + /** + * Adds a HAVING condition to the query. Internal method. + * + * @param string $fragment The fragment. + * @param array $values The values. Defaults to an empty array. + * + * @return ORM + */ + protected function add_having( $fragment, $values = [] ) { + return $this->add_condition( 'having', $fragment, $values ); + } + + /** + * Adds a HAVING condition to the query. Internal method. + * + * @param string $column_name The table column. + * @param string $separator The separator. + * @param mixed $value The value. + * + * @return ORM + */ + protected function add_simple_having( $column_name, $separator, $value ) { + return $this->add_simple_condition( 'having', $column_name, $separator, $value ); + } + + /** + * Adds a HAVING clause with multiple values (like IN and NOT IN). Internal method. + * + * @param string|array $column_name The table column. + * @param string $separator The separator. + * @param array $values The values. + * + * @return ORM + */ + public function add_having_placeholder( $column_name, $separator, $values ) { + if ( ! \is_array( $column_name ) ) { + $data = [ $column_name => $values ]; + } + else { + $data = $column_name; + } + $result = $this; + foreach ( $data as $key => $val ) { + $column = $result->quote_identifier( $key ); + $placeholders = $result->create_placeholders( $val ); + $result = $result->add_having( "{$column} {$separator} ({$placeholders})", $val ); + } + + return $result; + } + + /** + * Adds a HAVING clause with no parameters(like IS NULL and IS NOT NULL). Internal method. + * + * @param string $column_name The column name. + * @param string $operator The operator. + * + * @return ORM + */ + public function add_having_no_value( $column_name, $operator ) { + $conditions = \is_array( $column_name ) ? $column_name : [ $column_name ]; + $result = $this; + foreach ( $conditions as $column ) { + $column = $this->quote_identifier( $column ); + $result = $result->add_having( "{$column} {$operator}" ); + } + + return $result; + } + + /** + * Adds a WHERE condition to the query. Internal method. + * + * @param string $fragment The fragment. + * @param array $values The values. Defaults to an empty array. + * + * @return ORM + */ + protected function add_where( $fragment, $values = [] ) { + return $this->add_condition( 'where', $fragment, $values ); + } + + /** + * Adds a WHERE condition to the query. Internal method. + * + * @param string|array $column_name The table column. + * @param string $separator The separator. + * @param mixed $value The value. + * + * @return ORM + */ + protected function add_simple_where( $column_name, $separator, $value ) { + return $this->add_simple_condition( 'where', $column_name, $separator, $value ); + } + + /** + * Adds a WHERE clause with multiple values (like IN and NOT IN). + * + * @param string|array $column_name The table column. + * @param string $separator The separator. + * @param array $values The values. + * + * @return ORM + */ + public function add_where_placeholder( $column_name, $separator, $values ) { + if ( ! \is_array( $column_name ) ) { + $data = [ $column_name => $values ]; + } + else { + $data = $column_name; + } + $result = $this; + foreach ( $data as $key => $val ) { + $column = $result->quote_identifier( $key ); + $placeholders = $result->create_placeholders( $val ); + $result = $result->add_where( "{$column} {$separator} ({$placeholders})", $val ); + } + + return $result; + } + + /** + * Adds a WHERE clause with no parameters(like IS NULL and IS NOT NULL). + * + * @param string $column_name The column name. + * @param string $operator The operator. + * + * @return ORM + */ + public function add_where_no_value( $column_name, $operator ) { + $conditions = \is_array( $column_name ) ? $column_name : [ $column_name ]; + $result = $this; + foreach ( $conditions as $column ) { + $column = $this->quote_identifier( $column ); + $result = $result->add_where( "{$column} {$operator}" ); + } + + return $result; + } + + /** + * Adds a HAVING or WHERE condition to the query. Internal method. + * + * @param string $type The type. + * @param string $fragment The fragment. + * @param array $values The values. Defaults to empty array. + * + * @return ORM + */ + protected function add_condition( $type, $fragment, $values = [] ) { + $conditions_class_property_name = "{$type}_conditions"; + if ( ! \is_array( $values ) ) { + $values = [ $values ]; + } + \array_push( + $this->{$conditions_class_property_name}, + [ + self::CONDITION_FRAGMENT => $fragment, + self::CONDITION_VALUES => $values, + ] + ); + + return $this; + } + + /** + * Compiles a simple COLUMN SEPARATOR VALUE style HAVING or WHERE condition into a string and value ready to be + * passed to the add_condition method. + * + * Avoids duplication of the call to quote_identifier. + * If column_name is an associative array, it will add a condition for each column. + * + * @param string $type The type. + * @param string|array $column_name The table column. + * @param string $separator The separator. + * @param mixed $value The value. + * + * @return ORM + */ + protected function add_simple_condition( $type, $column_name, $separator, $value ) { + $multiple = \is_array( $column_name ) ? $column_name : [ $column_name => $value ]; + $result = $this; + foreach ( $multiple as $key => $val ) { + // Add the table name in case of ambiguous columns. + if ( \count( $result->join_sources ) > 0 && \strpos( $key, '.' ) === false ) { + $table = $result->table_name; + if ( ! \is_null( $result->table_alias ) ) { + $table = $result->table_alias; + } + $key = "{$table}.{$key}"; + } + $key = $result->quote_identifier( $key ); + $placeholder = ( $val === null ) ? 'NULL' : '%s'; + $result = $result->add_condition( $type, "{$key} {$separator} {$placeholder}", $val ); + } + + return $result; + } + + /** + * Returns a string containing the given number of question marks, separated by commas. Eg "?, ?, ?". + * + * @param array $fields Fields to create placeholder for. + * + * @return string + */ + protected function create_placeholders( $fields ) { + if ( ! empty( $fields ) ) { + $db_fields = []; + foreach ( $fields as $key => $value ) { + // Process expression fields directly into the query. + if ( \array_key_exists( $key, $this->expr_fields ) ) { + $db_fields[] = $value; + } + else { + $db_fields[] = ( $value === null ) ? 'NULL' : '%s'; + } + } + + return \implode( ', ', $db_fields ); + } + + return ''; + } + + /** + * Filters a column/value array returning only those columns that belong to a compound primary key. + * + * If the key contains a column that does not exist in the given array, a null value will be returned for it. + * + * @param mixed $value The value. + * + * @return array + */ + protected function get_compound_id_column_values( $value ) { + $filtered = []; + foreach ( $this->get_id_column_name() as $key ) { + $filtered[ $key ] = ( $value[ $key ] ?? null ); + } + + return $filtered; + } + + /** + * Filters an array containing compound column/value arrays. + * + * @param array $values The values. + * + * @return array + */ + protected function get_compound_id_column_values_array( $values ) { + $filtered = []; + foreach ( $values as $value ) { + $filtered[] = $this->get_compound_id_column_values( $value ); + } + + return $filtered; + } + + /** + * Add a WHERE column = value clause to your query. Each time this is called in the chain, an additional WHERE will + * be added, and these will be ANDed together when the final query is built. + * + * If you use an array in $column_name, a new clause will be added for each element. In this case, $value is + * ignored. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where( $column_name, $value = null ) { + return $this->where_equal( $column_name, $value ); + } + + /** + * More explicitly named version of for the where() method. Can be used if preferred. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_equal( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, '=', $value ); + } + + /** + * Add a WHERE column != value clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_not_equal( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, '!=', $value ); + } + + /** + * Queries the table by its primary key. Special method. + * + * If primary key is compound, only the columns that belong to they key will be used for the query. + * + * @param string $id The ID. + * + * @return ORM + */ + public function where_id_is( $id ) { + return \is_array( $this->get_id_column_name() ) ? $this->where( $this->get_compound_id_column_values( $id ), null ) : $this->where( $this->get_id_column_name(), $id ); + } + + /** + * Allows adding a WHERE clause that matches any of the conditions specified in the array. Each element in the + * associative array will be a different condition, where the key will be the column name. + * + * By default, an equal operator will be used against all columns, but it can be overriden for any or every column + * using the second parameter. + * + * Each condition will be ORed together when added to the final query. + * + * @param array $values The values. + * @param string $operator The operator. + * + * @return ORM + */ + public function where_any_is( $values, $operator = '=' ) { + $data = []; + $query = [ '((' ]; + $first = true; + foreach ( $values as $value ) { + if ( $first ) { + $first = false; + } + else { + $query[] = ') OR ('; + } + $firstsub = true; + foreach ( $value as $key => $item ) { + $op = \is_string( $operator ) ? $operator : ( $operator[ $key ] ?? '=' ); + if ( $op === '=' && $item === null ) { + $op = 'IS'; + } + if ( $firstsub ) { + $firstsub = false; + } + else { + $query[] = 'AND'; + } + $query[] = $this->quote_identifier( $key ); + $data[] = $item; + $query[] = $op; + $query[] = ( ( $item === null ) ? 'NULL' : '%s' ); + } + } + $query[] = '))'; + + return $this->where_raw( \implode( ' ', $query ), $data ); + } + + /** + * Queries the table by its primary key. + * + * Similar to where_id_is() but allowing multiple primary keys. + * If primary key is compound, only the columns that belong to they key will be used for the query. + * + * @param string[] $ids The IDs. + * + * @return ORM + */ + public function where_id_in( $ids ) { + return \is_array( $this->get_id_column_name() ) ? $this->where_any_is( $this->get_compound_id_column_values_array( $ids ) ) : $this->where_in( $this->get_id_column_name(), $ids ); + } + + /** + * Adds a WHERE ... LIKE clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_like( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, 'LIKE', $value ); + } + + /** + * Adds where WHERE ... NOT LIKE clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_not_like( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, 'NOT LIKE', $value ); + } + + /** + * Adds a WHERE ... > clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_gt( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, '>', $value ); + } + + /** + * Adds a WHERE ... < clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_lt( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, '<', $value ); + } + + /** + * Adds a WHERE ... >= clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_gte( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, '>=', $value ); + } + + /** + * Adds a WHERE ... <= clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. Defaults to null. + * + * @return ORM + */ + public function where_lte( $column_name, $value = null ) { + return $this->add_simple_where( $column_name, '<=', $value ); + } + + /** + * Adds a WHERE ... IN clause to your query. + * + * @param string|array $column_name The table column. + * @param array $values The values. + * + * @return ORM + */ + public function where_in( $column_name, $values ) { + return $this->add_where_placeholder( $column_name, 'IN', $values ); + } + + /** + * Adds a WHERE ... NOT IN clause to your query. + * + * @param string|array $column_name The table column. + * @param array $values The values. + * + * @return ORM + */ + public function where_not_in( $column_name, $values ) { + return $this->add_where_placeholder( $column_name, 'NOT IN', $values ); + } + + /** + * Adds a WHERE column IS NULL clause to your query. + * + * @param string|array $column_name The table column. + * + * @return ORM + */ + public function where_null( $column_name ) { + return $this->add_where_no_value( $column_name, 'IS NULL' ); + } + + /** + * Adds a WHERE column IS NOT NULL clause to your query. + * + * @param string|array $column_name The table column. + * + * @return ORM + */ + public function where_not_null( $column_name ) { + return $this->add_where_no_value( $column_name, 'IS NOT NULL' ); + } + + /** + * Adds a raw WHERE clause to the query. The clause should contain question mark placeholders, which will be bound + * to the parameters supplied in the second argument. + * + * @param string $clause The clause that should contain question mark placeholders. + * @param array $parameters The parameters to include in the query. + * + * @return ORM + */ + public function where_raw( $clause, $parameters = [] ) { + return $this->add_where( $clause, $parameters ); + } + + /** + * Adds a LIMIT to the query. + * + * @param int $limit The limit. + * + * @return ORM + */ + public function limit( $limit ) { + $this->limit = $limit; + + return $this; + } + + /** + * Adds an OFFSET to the query. + * + * @param int $offset The offset. + * + * @return ORM + */ + public function offset( $offset ) { + $this->offset = $offset; + + return $this; + } + + /** + * Adds an ORDER BY clause to the query. + * + * @param string $column_name The column name. + * @param string $ordering The ordering. DESC or ASC. + * + * @return ORM + */ + protected function add_order_by( $column_name, $ordering ) { + $column_name = $this->quote_identifier( $column_name ); + $this->order_by[] = "{$column_name} {$ordering}"; + + return $this; + } + + /** + * Adds an ORDER BY column DESC clause. + * + * @param string|array $column_name The table column. + * + * @return ORM + */ + public function order_by_desc( $column_name ) { + return $this->add_order_by( $column_name, 'DESC' ); + } + + /** + * Adds an ORDER BY column ASC clause. + * + * @param string|array $column_name The table column. + * + * @return ORM + */ + public function order_by_asc( $column_name ) { + return $this->add_order_by( $column_name, 'ASC' ); + } + + /** + * Adds an unquoted expression as an ORDER BY clause. + * + * @param string $clause The clause. + * + * @return ORM + */ + public function order_by_expr( $clause ) { + $this->order_by[] = $clause; + + return $this; + } + + /** + * Adds a column to the list of columns to GROUP BY. + * + * @param string|array $column_name The table column. + * + * @return ORM + */ + public function group_by( $column_name ) { + $column_name = $this->quote_identifier( $column_name ); + $this->group_by[] = $column_name; + + return $this; + } + + /** + * Adds an unquoted expression to the list of columns to GROUP BY. + * + * @param string $expr The expression. + * + * @return ORM + */ + public function group_by_expr( $expr ) { + $this->group_by[] = $expr; + + return $this; + } + + /** + * Adds a HAVING column = value clause to your query. + * + * Each time this is called in the chain, an additional HAVING will be added, and these will be ANDed together when + * the final query is built. + * + * If you use an array in $column_name, a new clause will be added for each element. In this case, $value is + * ignored. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. + * + * @return ORM + */ + public function having( $column_name, $value = null ) { + return $this->having_equal( $column_name, $value ); + } + + /** + * Adds a having equal to your query. + * + * More explicitly named version of for the having() method. Can be used if preferred. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. + * + * @return ORM + */ + public function having_equal( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, '=', $value ); + } + + /** + * Adds a HAVING column != value clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed|null $value The value. + * + * @return ORM + */ + public function having_not_equal( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, '!=', $value ); + } + + /** + * Queries the table by its primary key. Special method. + * + * If primary key is compound, only the columns that belong to they key will be used for the query. + * + * @param string $id The ID. + * + * @return ORM + */ + public function having_id_is( $id ) { + return \is_array( $this->get_id_column_name() ) ? $this->having( $this->get_compound_id_column_values( $id ), null ) : $this->having( $this->get_id_column_name(), $id ); + } + + /** + * Adds a HAVING ... LIKE clause to your query. + * + * @param string|array $column_name The table column. + * @param string|null $value The value. + * + * @return ORM + */ + public function having_like( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, 'LIKE', $value ); + } + + /** + * Adds where HAVING ... NOT LIKE clause to your query. + * + * @param string|array $column_name The table column. + * @param string|null $value The value. + * + * @return ORM + */ + public function having_not_like( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, 'NOT LIKE', $value ); + } + + /** + * Adds a HAVING ... > clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed $value The value. + * + * @return ORM + */ + public function having_gt( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, '>', $value ); + } + + /** + * Adds a HAVING ... < clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed $value The value. + * + * @return ORM + */ + public function having_lt( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, '<', $value ); + } + + /** + * Adds a HAVING ... >= clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed $value The value. Defaults to null. + * + * @return ORM + */ + public function having_gte( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, '>=', $value ); + } + + /** + * Adds a HAVING ... <= clause to your query. + * + * @param string|array $column_name The table column. + * @param mixed $value The value. + * + * @return ORM + */ + public function having_lte( $column_name, $value = null ) { + return $this->add_simple_having( $column_name, '<=', $value ); + } + + /** + * Adds a HAVING ... IN clause to your query. + * + * @param string|array $column_name The table column. + * @param array|null $values The values. Defaults to null. + * + * @return ORM + */ + public function having_in( $column_name, $values = null ) { + return $this->add_having_placeholder( $column_name, 'IN', $values ); + } + + /** + * Adds a HAVING ... NOT IN clause to your query. + * + * @param string|array $column_name The table column. + * @param array|null $values The values. Defaults to null. + * + * @return ORM + */ + public function having_not_in( $column_name, $values = null ) { + return $this->add_having_placeholder( $column_name, 'NOT IN', $values ); + } + + /** + * Adds a HAVING column IS NULL clause to your query. + * + * @param string|array $column_name The table column. + * + * @return ORM + */ + public function having_null( $column_name ) { + return $this->add_having_no_value( $column_name, 'IS NULL' ); + } + + /** + * Adds a HAVING column IS NOT NULL clause to your query. + * + * @param string|array $column_name The table column. + * + * @return ORM + */ + public function having_not_null( $column_name ) { + return $this->add_having_no_value( $column_name, 'IS NOT NULL' ); + } + + /** + * Adds a raw HAVING clause to the query. The clause should contain question mark placeholders, which will be bound + * to the parameters supplied in the second argument. + * + * @param string $clause The clause that should contain question mark placeholders. + * @param array $parameters The parameters to include in the query. + * + * @return ORM + */ + public function having_raw( $clause, $parameters = [] ) { + return $this->add_having( $clause, $parameters ); + } + + /** + * Builds a SELECT statement based on the clauses that have been passed to this instance by chaining method calls. + * + * @return string + */ + protected function build_select() { + // If the query is raw, just set the $this->values to be the raw query parameters and return the raw query. + if ( $this->is_raw_query ) { + $this->values = $this->raw_parameters; + + return $this->raw_query; + } + + // Build and return the full SELECT statement by concatenating the results of calling each separate builder method. + return $this->join_if_not_empty( + ' ', + [ + $this->build_select_start(), + $this->build_join(), + $this->build_where(), + $this->build_group_by(), + $this->build_having(), + $this->build_order_by(), + $this->build_limit(), + $this->build_offset(), + ] + ); + } + + /** + * Builds the start of the SELECT statement. + * + * @return string + */ + protected function build_select_start() { + $fragment = 'SELECT '; + $result_columns = \implode( ', ', $this->result_columns ); + if ( $this->distinct ) { + $result_columns = 'DISTINCT ' . $result_columns; + } + $fragment .= "{$result_columns} FROM " . $this->quote_identifier( $this->table_name ); + if ( ! \is_null( $this->table_alias ) ) { + $fragment .= ' ' . $this->quote_identifier( $this->table_alias ); + } + + return $fragment; + } + + /** + * Builds the JOIN sources. + * + * @return string + */ + protected function build_join() { + if ( \count( $this->join_sources ) === 0 ) { + return ''; + } + + return \implode( ' ', $this->join_sources ); + } + + /** + * Builds the WHERE clause(s). + * + * @return string + */ + protected function build_where() { + return $this->build_conditions( 'where' ); + } + + /** + * Build the HAVING clause(s) + * + * @return string + */ + protected function build_having() { + return $this->build_conditions( 'having' ); + } + + /** + * Builds GROUP BY. + * + * @return string + */ + protected function build_group_by() { + if ( \count( $this->group_by ) === 0 ) { + return ''; + } + + return 'GROUP BY ' . \implode( ', ', $this->group_by ); + } + + /** + * Builds a WHERE or HAVING clause. + * + * @param string $type Where or having. + * + * @return string + */ + protected function build_conditions( $type ) { + $conditions_class_property_name = "{$type}_conditions"; + // If there are no clauses, return empty string. + if ( \count( $this->{$conditions_class_property_name} ) === 0 ) { + return ''; + } + $conditions = []; + foreach ( $this->{$conditions_class_property_name} as $condition ) { + $conditions[] = $condition[ self::CONDITION_FRAGMENT ]; + $this->values = \array_merge( $this->values, $condition[ self::CONDITION_VALUES ] ); + } + + return \strtoupper( $type ) . ' ' . \implode( ' AND ', $conditions ); + } + + /** + * Builds ORDER BY. + * + * @return string + */ + protected function build_order_by() { + if ( \count( $this->order_by ) === 0 ) { + return ''; + } + + return 'ORDER BY ' . \implode( ', ', $this->order_by ); + } + + /** + * Builds LIMIT. + * + * @return string + */ + protected function build_limit() { + if ( ! \is_null( $this->limit ) ) { + return "LIMIT {$this->limit}"; + } + + return ''; + } + + /** + * Builds OFFSET. + * + * @return string + */ + protected function build_offset() { + if ( ! \is_null( $this->offset ) ) { + return 'OFFSET ' . $this->offset; + } + + return ''; + } + + /** + * Joins strings if they are not empty. + * + * @param string $glue Glue. + * @param string[] $pieces Pieces to join. + * + * @return string + */ + protected function join_if_not_empty( $glue, $pieces ) { + $filtered_pieces = []; + foreach ( $pieces as $piece ) { + if ( \is_string( $piece ) ) { + $piece = \trim( $piece ); + } + if ( ! empty( $piece ) ) { + $filtered_pieces[] = $piece; + } + } + + return \implode( $glue, $filtered_pieces ); + } + + /** + * Quotes a string that is used as an identifier (table names, column names etc). + * This method can also deal with dot-separated identifiers eg table.column. + * + * @param string|string[] $identifier One or more identifiers. + * + * @return string + */ + protected function quote_one_identifier( $identifier ) { + $parts = \explode( '.', $identifier ); + $parts = \array_map( [ $this, 'quote_identifier_part' ], $parts ); + + return \implode( '.', $parts ); + } + + /** + * Quotes a string that is used as an identifier (table names, column names etc) or an array containing multiple + * identifiers. This method can also deal with dot-separated identifiers eg table.column. + * + * @param string|string[] $identifier One or more identifiers. + * + * @return string + */ + protected function quote_identifier( $identifier ) { + if ( \is_array( $identifier ) ) { + $result = \array_map( [ $this, 'quote_one_identifier' ], $identifier ); + + return \implode( ', ', $result ); + } + else { + return $this->quote_one_identifier( $identifier ); + } + } + + /** + * Quotes a single part of an identifier, using the identifier quote character specified in the config + * (or autodetected). + * + * @param string $part The part to quote. + * + * @return string + */ + protected function quote_identifier_part( $part ) { + if ( $part === '*' ) { + return $part; + } + $quote_character = '`'; + + // Double up any identifier quotes to escape them. + return $quote_character . \str_replace( $quote_character, $quote_character . $quote_character, $part ) . $quote_character; + } + + /** + * Executes the SELECT query that has been built up by chaining methods on this class. + * Return an array of rows as associative arrays. + * + * @return array|false The result rows. False if the query failed. + */ + protected function run() { + global $wpdb; + + $query = $this->build_select(); + $success = self::execute( $query, $this->values ); + + if ( $success === false ) { + // If the query fails run the migrations and try again. + // Action is intentionally undocumented and should not be used by third-parties. + \do_action( '_yoast_run_migrations' ); + $success = self::execute( $query, $this->values ); + } + + $this->reset_idiorm_state(); + + if ( $success === false ) { + return false; + } + + $rows = []; + foreach ( $wpdb->last_result as $row ) { + $rows[] = \get_object_vars( $row ); + } + + return $rows; + } + + /** + * Resets the Idiorm instance state. + * + * @return void + */ + private function reset_idiorm_state() { + $this->values = []; + $this->result_columns = [ '*' ]; + $this->using_default_result_columns = true; + } + + /** + * Returns the raw data wrapped by this ORM instance as an associative array. Column names may optionally be + * supplied as arguments, if so, only those keys will be returned. + * + * @return array Associative array of the raw data. + */ + public function as_array() { + if ( \func_num_args() === 0 ) { + return $this->data; + } + $args = \func_get_args(); + + return \array_intersect_key( $this->data, \array_flip( $args ) ); + } + + /** + * Returns the value of a property of this object (database row) or null if not present. + * + * If a column-names array is passed, it will return a associative array with the value of each column or null if + * it is not present. + * + * @param string|array $key Key. + * + * @return array|mixed|null + */ + public function get( $key ) { + if ( \is_array( $key ) ) { + $result = []; + foreach ( $key as $column ) { + $result[ $column ] = ( $this->data[ $column ] ?? null ); + } + + return $result; + } + else { + return ( $this->data[ $key ] ?? null ); + } + } + + /** + * Returns the name of the column in the database table which contains the primary key ID of the row. + * + * @return string The primary key ID of the row. + */ + protected function get_id_column_name() { + if ( ! \is_null( $this->instance_id_column ) ) { + return $this->instance_id_column; + } + + return 'id'; + } + + /** + * Gets the primary key ID of this object. + * + * @param bool $disallow_null Whether to allow null IDs. + * + * @return array|mixed|null + * + * @throws Exception Primary key ID contains null value(s). + * @throws Exception Primary key ID missing from row or is null. + */ + public function id( $disallow_null = false ) { + $id = $this->get( $this->get_id_column_name() ); + if ( $disallow_null ) { + if ( \is_array( $id ) ) { + foreach ( $id as $id_part ) { + if ( $id_part === null ) { + throw new Exception( 'Primary key ID contains null value(s)' ); + } + } + } + elseif ( $id === null ) { + throw new Exception( 'Primary key ID missing from row or is null' ); + } + } + + return $id; + } + + /** + * Sets a property to a particular value on this object. + * + * To set multiple properties at once, pass an associative array as the first parameter and leave out the second + * parameter. Flags the properties as 'dirty' so they will be saved to the database when save() is called. + * + * @param string|array $key Key. + * @param string|null $value Value. + * + * @return ORM + */ + public function set( $key, $value = null ) { + return $this->set_orm_property( $key, $value ); + } + + /** + * Set a property to a particular value on this object as expression. + * + * To set multiple properties at once, pass an associative array as the first parameter and leave out the second + * parameter. Flags the properties as 'dirty' so they will be saved to the database when save() is called. + * + * @param string|array $key Key. + * @param string|null $value Value. + * + * @return ORM + */ + public function set_expr( $key, $value = null ) { + return $this->set_orm_property( $key, $value, true ); + } + + /** + * Sets a property on the ORM object. + * + * @param string|array $key Key. + * @param string|null $value Value. + * @param bool $expr Expression. + * + * @return ORM + */ + protected function set_orm_property( $key, $value = null, $expr = false ) { + if ( ! \is_array( $key ) ) { + $key = [ $key => $value ]; + } + foreach ( $key as $field => $value ) { + $this->data[ $field ] = $value; + $this->dirty_fields[ $field ] = $value; + if ( $expr === false && isset( $this->expr_fields[ $field ] ) ) { + unset( $this->expr_fields[ $field ] ); + } + elseif ( $expr === true ) { + $this->expr_fields[ $field ] = true; + } + } + + return $this; + } + + /** + * Checks whether the given field has been changed since this object was saved. + * + * @param mixed $key Key. + * + * @return bool + */ + public function is_dirty( $key ) { + return \array_key_exists( $key, $this->dirty_fields ); + } + + /** + * Checks whether the model was the result of a call to create() or not. + * + * @return bool + */ + public function is_new() { + return $this->is_new; + } + + /** + * Saves any fields which have been modified on this object to the database. + * + * @return bool True on success. + * + * @throws Exception Primary key ID contains null value(s). + * @throws Exception Primary key ID missing from row or is null. + */ + public function save() { + global $wpdb; + + // Remove any expression fields as they are already baked into the query. + $values = \array_values( \array_diff_key( $this->dirty_fields, $this->expr_fields ) ); + if ( ! $this->is_new ) { + // UPDATE. + // If there are no dirty values, do nothing. + if ( empty( $values ) && empty( $this->expr_fields ) ) { + return true; + } + $query = \implode( ' ', [ $this->build_update(), $this->add_id_column_conditions() ] ); + + $id = $this->id( true ); + if ( \is_array( $id ) ) { + $values = \array_merge( $values, \array_values( $id ) ); + } + else { + $values[] = $id; + } + } + else { + // INSERT. + $query = $this->build_insert(); + } + $success = self::execute( $query, $values ); + // If we've just inserted a new record, set the ID of this object. + if ( $this->is_new ) { + $this->is_new = false; + if ( $this->count_null_id_columns() !== 0 ) { + $column = $this->get_id_column_name(); + // If the primary key is compound, assign the last inserted id to the first column. + if ( \is_array( $column ) ) { + $column = \reset( $column ); + } + // Explicitly cast to int to make dealing with Id's simpler. + $this->data[ $column ] = (int) $wpdb->insert_id; + } + } + $this->dirty_fields = []; + $this->expr_fields = []; + + return $success; + } + + /** + * Extracts and gathers all dirty column names from the given model instances. + * + * @param array $models Array of model instances to be inserted. + * + * @return array The distinct set of columns that are dirty in at least one of the models. + * + * @throws InvalidArgumentException Instance to be inserted is not a new one. + */ + public function get_dirty_column_names( $models ) { + $dirty_column_names = []; + + foreach ( $models as $model ) { + if ( ! $model->orm->is_new() ) { + throw new InvalidArgumentException( 'Instance to be inserted is not a new one' ); + } + + // Remove any expression fields as they are already baked into the query. + $dirty_fields = \array_diff_key( $model->orm->dirty_fields, $model->orm->expr_fields ); + $dirty_column_names = \array_merge( $dirty_column_names, $dirty_fields ); + } + + $dirty_column_names = \array_keys( $dirty_column_names ); + + return $dirty_column_names; + } + + /** + * Inserts multiple rows in a single query. Expects new rows as it's a strictly insert function, not an update one. + * + * @example From the Indexable_Link_Builder class: $this->seo_links_repository->query()->insert_many( $links ); + * + * @param array $models Array of model instances to be inserted. + * + * @return bool True for successful insert, false for failed. + * + * @throws InvalidArgumentException Invalid instances to be inserted. + * @throws InvalidArgumentException Instance to be inserted is not a new one. + */ + public function insert_many( $models ) { + // Validate the input first. + if ( ! \is_array( $models ) ) { + throw new InvalidArgumentException( 'Invalid instances to be inserted' ); + } + + if ( empty( $models ) ) { + return true; + } + + $success = true; + + /** + * Filter: 'wpseo_chunk_bulked_insert_queries' - Allow filtering the chunk size of each bulked INSERT query. + * + * @param int $chunk_size The chunk size of the bulked INSERT queries. + */ + $chunk = \apply_filters( 'wpseo_chunk_bulk_insert_queries', 100 ); + $chunk = ! \is_int( $chunk ) ? 100 : $chunk; + $chunk = ( $chunk <= 0 ) ? 100 : $chunk; + + $chunked_models = \array_chunk( $models, $chunk ); + foreach ( $chunked_models as $models_chunk ) { + $values = []; + + // First, we'll gather all the dirty fields throughout the models to be inserted. + $dirty_column_names = $this->get_dirty_column_names( $models_chunk ); + + // Now, we're creating all dirty fields throughout the models and + // setting them to null if they don't exist in each model. + foreach ( $models_chunk as $model ) { + $model_values = []; + + foreach ( $dirty_column_names as $dirty_column ) { + // Set the value to null if it hasn't been set already. + if ( ! isset( $model->orm->dirty_fields[ $dirty_column ] ) ) { + $model->orm->dirty_fields[ $dirty_column ] = null; + } + + // Only register the value if it is not null. + if ( ! \is_null( $model->orm->dirty_fields[ $dirty_column ] ) ) { + $model_values[] = $model->orm->dirty_fields[ $dirty_column ]; + } + } + $values = \array_merge( $values, $model_values ); + } + + // We now have the same set of dirty columns in all our models and also gathered all values. + $query = $this->build_insert_many( $models_chunk, $dirty_column_names ); + $success = $success && (bool) self::execute( $query, $values ); + } + + return $success; + } + + /** + * Updates many records in the database. + * + * @return int|bool The number of rows changed if the query was succesful. False otherwise. + */ + public function update_many() { + // Remove any expression fields as they are already baked into the query. + $values = \array_values( \array_diff_key( $this->dirty_fields, $this->expr_fields ) ); + + // UPDATE. + // If there are no dirty values, do nothing. + if ( empty( $values ) && empty( $this->expr_fields ) ) { + return true; + } + + $query = $this->join_if_not_empty( ' ', [ $this->build_update(), $this->build_where() ] ); + + $success = self::execute( $query, \array_merge( $values, $this->values ) ); + $this->dirty_fields = []; + $this->expr_fields = []; + + return $success; + } + + /** + * Adds a WHERE clause for every column that belongs to the primary key. + * + * @return string The where part of the query. + */ + public function add_id_column_conditions() { + $query = []; + $query[] = 'WHERE'; + $keys = \is_array( $this->get_id_column_name() ) ? $this->get_id_column_name() : [ $this->get_id_column_name() ]; + $first = true; + foreach ( $keys as $key ) { + if ( $first ) { + $first = false; + } + else { + $query[] = 'AND'; + } + $query[] = $this->quote_identifier( $key ); + $query[] = '= %s'; + } + + return \implode( ' ', $query ); + } + + /** + * Builds an UPDATE query. + * + * @return string The update query. + */ + protected function build_update() { + $query = []; + $query[] = "UPDATE {$this->quote_identifier($this->table_name)} SET"; + $field_list = []; + foreach ( $this->dirty_fields as $key => $value ) { + if ( ! \array_key_exists( $key, $this->expr_fields ) ) { + $value = ( $value === null ) ? 'NULL' : '%s'; + } + $field_list[] = "{$this->quote_identifier($key)} = {$value}"; + } + $query[] = \implode( ', ', $field_list ); + + return \implode( ' ', $query ); + } + + /** + * Builds an INSERT query. + * + * @return string The insert query. + */ + protected function build_insert() { + $query = []; + $query[] = 'INSERT INTO'; + $query[] = $this->quote_identifier( $this->table_name ); + $field_list = \array_map( [ $this, 'quote_identifier' ], \array_keys( $this->dirty_fields ) ); + $query[] = '(' . \implode( ', ', $field_list ) . ')'; + $query[] = 'VALUES'; + $placeholders = $this->create_placeholders( $this->dirty_fields ); + $query[] = "({$placeholders})"; + + return \implode( ' ', $query ); + } + + /** + * Builds a bulk INSERT query. + * + * @param array $models Array of model instances to be inserted. + * @param array $dirty_column_names Array of dirty fields to be used in INSERT. + * + * @return string The insert query. + */ + protected function build_insert_many( $models, $dirty_column_names ) { + $example_model = $models[0]; + $total_placeholders = ''; + + $query = []; + $query[] = 'INSERT INTO'; + $query[] = $this->quote_identifier( $example_model->orm->table_name ); + $field_list = \array_map( [ $this, 'quote_identifier' ], $dirty_column_names ); + $query[] = '(' . \implode( ', ', $field_list ) . ')'; + $query[] = 'VALUES'; + + // We assign placeholders per model for dirty fields that have values and NULL for dirty fields that don't. + foreach ( $models as $model ) { + $placeholder = []; + foreach ( $dirty_column_names as $dirty_field ) { + $placeholder[] = ( $model->orm->dirty_fields[ $dirty_field ] === null ) ? 'NULL' : '%s'; + } + $placeholders = \implode( ', ', $placeholder ); + $total_placeholders .= "({$placeholders}),"; + } + + $query[] = \rtrim( $total_placeholders, ',' ); + return \implode( ' ', $query ); + } + + /** + * Deletes this record from the database. + * + * @return string The delete query. + * + * @throws Exception Primary key ID contains null value(s). + * @throws Exception Primary key ID missing from row or is null. + */ + public function delete() { + $query = [ 'DELETE FROM', $this->quote_identifier( $this->table_name ), $this->add_id_column_conditions() ]; + + return self::execute( \implode( ' ', $query ), \is_array( $this->id( true ) ) ? \array_values( $this->id( true ) ) : [ $this->id( true ) ] ); + } + + /** + * Deletes many records from the database. + * + * @return bool|int Response of wpdb::query. + */ + public function delete_many() { + // Build and return the full DELETE statement by concatenating + // the results of calling each separate builder method. + $query = $this->join_if_not_empty( + ' ', + [ + 'DELETE FROM', + $this->quote_identifier( $this->table_name ), + $this->build_where(), + ] + ); + + return self::execute( $query, $this->values ); + } + + /* + * --- ArrayAccess --- + */ + + /** + * Checks whether the data has the key. + * + * @param mixed $offset Key. + * + * @return bool Whether the data has the key. + */ + #[ReturnTypeWillChange] + public function offsetExists( $offset ) { + return \array_key_exists( $offset, $this->data ); + } + + /** + * Retrieves the value of the key. + * + * @param mixed $offset Key. + * + * @return array|mixed|null The value. + */ + #[ReturnTypeWillChange] + public function offsetGet( $offset ) { + return $this->get( $offset ); + } + + /** + * Sets the value of the key. + * + * @param string|int $offset Key. + * @param mixed $value Value. + * + * @return void + */ + #[ReturnTypeWillChange] + public function offsetSet( $offset, $value ) { + if ( \is_null( $offset ) ) { + return; + } + $this->set( $offset, $value ); + } + + /** + * Removes the given key from the data. + * + * @param mixed $offset Key. + * + * @return void + */ + #[ReturnTypeWillChange] + public function offsetUnset( $offset ) { + unset( $this->data[ $offset ] ); + unset( $this->dirty_fields[ $offset ] ); + } + + /* + * --- MAGIC METHODS --- + */ + + /** + * Handles magic get via offset. + * + * @param mixed $key Key. + * + * @return array|mixed|null The value in the offset. + */ + public function __get( $key ) { + return $this->offsetGet( $key ); + } + + /** + * Handles magic set via offset. + * + * @param string|int $key Key. + * @param mixed $value Value. + * + * @return void + */ + public function __set( $key, $value ) { + $this->offsetSet( $key, $value ); + } + + /** + * Handles magic unset via offset. + * + * @param mixed $key Key. + * + * @return void + */ + public function __unset( $key ) { + $this->offsetUnset( $key ); + } + + /** + * Handles magic isset via offset. + * + * @param mixed $key Key. + * + * @return bool Whether the offset has the key. + */ + public function __isset( $key ) { + return $this->offsetExists( $key ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/license.txt b/wp/wp-content/plugins/wordpress-seo/license.txt new file mode 100644 index 00000000..0ae0def1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/license.txt @@ -0,0 +1,642 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 18. Additional terms + + In the light of Article 7 of the GPL license, the following additional +terms apply: + + a) You are prohibited to make misrepresentations of the origin of that +material, or to require that modified versions of such material be marked +in reasonable ways as different from the original version; + + b) You are limited in the use for publicity purposes of names of +licensors or authors of the material; + + c) You are declined any grant of rights under trademark law for use of +the trade names, trademarks, or service marks of YOAST B.V.; + + d) You are required to indemnify licensors and authors of that material +by anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any liability +that these contractual assumptions directly impose on those licensors and +authors. + +END OF TERMS AND CONDITIONS diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_SEO_Icon.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_SEO_Icon.svg new file mode 100644 index 00000000..c0e461ce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_SEO_Icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_icon_kader.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_icon_kader.svg new file mode 100644 index 00000000..809bc3d5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/Yoast_icon_kader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/algolia-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/algolia-logo.svg new file mode 100644 index 00000000..1260849e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/algolia-logo.svg @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/connection-assistant.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/connection-assistant.svg new file mode 100644 index 00000000..3d9dba79 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/connection-assistant.svg @@ -0,0 +1,26 @@ + + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/edd-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/edd-logo.svg new file mode 100644 index 00000000..5c47062b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/edd-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/elementor-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/elementor-logo.svg new file mode 100644 index 00000000..c2ee925e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/elementor-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/g2_logo_white_optm.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/g2_logo_white_optm.svg new file mode 100644 index 00000000..ff4e2e19 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/g2_logo_white_optm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-arrow-down.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-arrow-down.svg new file mode 100644 index 00000000..cc417e0c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-arrow-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-facebook.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-facebook.svg new file mode 100644 index 00000000..5158f59f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-twitter.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-twitter.svg new file mode 100644 index 00000000..b496c7f7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/icon-twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_1_left_bubble_optm.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_1_left_bubble_optm.svg new file mode 100644 index 00000000..d7c6c483 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_1_left_bubble_optm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_2_left_bubble_optm.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_2_left_bubble_optm.svg new file mode 100644 index 00000000..5ea3f925 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/indexables_2_left_bubble_optm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-integration-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-integration-logo.svg new file mode 100644 index 00000000..b00a8b2b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-integration-logo.svg @@ -0,0 +1,27 @@ + + + Group + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-logo.svg new file mode 100644 index 00000000..d670bec7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-boost-logo.svg @@ -0,0 +1 @@ + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-logo.svg new file mode 100644 index 00000000..99dc4303 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/jetpack-logo.svg @@ -0,0 +1,53 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/logo-g2-white.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/logo-g2-white.svg new file mode 100644 index 00000000..20d99142 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/logo-g2-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/mastodon-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/mastodon-logo.svg new file mode 100644 index 00000000..520bfb24 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/mastodon-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/motivated_bubble_woman_1_optim.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/motivated_bubble_woman_1_optim.svg new file mode 100644 index 00000000..ff862abd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/motivated_bubble_woman_1_optim.svg @@ -0,0 +1,43 @@ + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/semrush-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/semrush-logo.svg new file mode 100644 index 00000000..55e13c5d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/semrush-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/ssp-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/ssp-logo.svg new file mode 100644 index 00000000..04b76035 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/ssp-logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-half.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-half.svg new file mode 100644 index 00000000..fb3185aa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-half.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-star.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-star.svg new file mode 100644 index 00000000..7b3363f6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/star-rating-star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/succes_marieke_bubble_optm.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/succes_marieke_bubble_optm.svg new file mode 100644 index 00000000..ad231958 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/succes_marieke_bubble_optm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/tec-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/tec-logo.svg new file mode 100644 index 00000000..a394497a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/tec-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/wincher-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/wincher-logo.svg new file mode 100644 index 00000000..94c23c1c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/wincher-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/woocommerce-seo-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/woocommerce-seo-logo.svg new file mode 100644 index 00000000..7bc833f6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/woocommerce-seo-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/wordproof-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/wordproof-logo.svg new file mode 100644 index 00000000..48421522 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/wordproof-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/wp-recipe-maker-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/wp-recipe-maker-logo.svg new file mode 100644 index 00000000..9d991e73 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/wp-recipe-maker-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/x-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/x-logo.svg new file mode 100644 index 00000000..78e66175 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/x-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast-seo-simple-logo.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast-seo-simple-logo.svg new file mode 100644 index 00000000..5fa9051d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast-seo-simple-logo.svg @@ -0,0 +1 @@ + diff --git a/wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast_loading_spinner.svg b/wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast_loading_spinner.svg new file mode 100644 index 00000000..bfd9b6d8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/packages/js/images/yoast_loading_spinner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp/wp-content/plugins/wordpress-seo/readme.txt b/wp/wp-content/plugins/wordpress-seo/readme.txt new file mode 100644 index 00000000..742859cf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/readme.txt @@ -0,0 +1,317 @@ +=== Yoast SEO === +Contributors: yoast, joostdevalk, tdevalk +Donate link: https://yoa.st/1up +License: GPLv3 +License URI: http://www.gnu.org/licenses/gpl.html +Tags: SEO, XML sitemap, Content analysis, Readability, Schema +Tested up to: 6.6 +Stable tag: 23.4 +Requires PHP: 7.2.5 + +Improve your WordPress SEO: Write better content and have a fully optimized WordPress site using the Yoast SEO plugin. + +== Description == + +## YOAST SEO: THE #1 WORDPRESS SEO PLUGIN + +Since 2008, Yoast SEO has helped millions of websites worldwide to rank higher in search engines. + +Yoast’s mission is **SEO for Everyone**. Our plugin’s users range from the bakery around the corner to some of the most popular sites on the planet. + +Yoast SEO Free contains everything that you need to manage your SEO, and the [Yoast SEO Premium](https://yoa.st/1v8) plugin and its extensions unlock even more tools and functionality. + +### HANDING YOU THE COMPETITIVE EDGE + +SEO is the most consistent and cost-effective website traffic source, but it can be a challenging and complex maze. Whether you're just starting out, or an advanced user you don’t have to do this alone. We’re here to help! + +You haven't time to learn and keep up with SEO best practices? You aren't alone. Keeping Yoast SEO up-to-date with the latest version means you automatically receive all of the 'under the hood' updates to schema markup and technical SEO fundamentals. We also guide you through optimizing your on-site content with our signature traffic lights approach. + +Empower search engines to fully understand your website using our Schema.org structured data integration. + +Yoast SEO offers comprehensive analysis tools that help elevate your content's SEO and readability. Get powerful insights and actionable recommendations to craft helpful content that resonates with readers and search engines. + +**Premium Yoast AI features** Get suggestions for your titles and descriptions at the click of a button. The [Yoast AI features](https://yoa.st/51c) save you time and optimize for higher click-through-rates. + +* Yoast AI Generate enables users to generate meta descriptions and titles for your pages, blog posts and social posts. Great! Even better, when you also have [Yoast WooCommerce SEO](https://yoa.st/3rh), you can recieve suggestions for product SEO titles and descriptions too! The best part, if you don't like the 5 suggestions, you can generate five more at a click. +* Yoast AI Optimize helps you optimize existing content for search engines. Optimize three of the assessments in the Yoast SEO Analysis; Keyphrase in introduction, Keyphrase distribution and Keyphrase density, with easy dismiss or apply options. + + +#### QUICK AND EASY SETUP TO GET YOU STARTED + +Setting up Yoast SEO is smooth, hassle-free, and doesn't require any advanced knowledge! Our step-by-step configuration walks you through the essentials, helping you get up and running quickly. + +You'll be prompted to fill in details about your site during the setup. This enables Yoast SEO to translate all this information into structured data, which helps search engines better understand your content and website! + +Are you already using another SEO plugin? Transitioning from other plugins to Yoast SEO is a breeze. We've designed it to be seamless, ensuring you don't lose critical data. + +Our export and import option makes it a breeze to take the SEO settings from one Yoast SEO-optimized website to another. + +#### TAKING CARE OF YOUR TECHNICAL SEO NEEDS + +Although technical optimization is a big part of SEO, it's not easy. We understand that only some people who work on SEO are experts or have the time to dive into the technical aspects of a website. That's why Yoast SEO handles much of the technical optimization, freeing up your time to work on other parts of your website, like writing helpful content. + +* **Get automated technical SEO improvements**, like optimized meta tags, right out of the box. + +* **Add canonical URLs** to tell search engines which content they should show when you have pages with similar content. + +* Get **advanced XML sitemaps**, making it effortless for search engines to understand your site structure and index your web pages effectively. + +* **Get best-in-class Schema.org structured data integration**, significantly increasing your chances of getting visually rich search results that attract more users. + +* **Take complete control over your site's breadcrumbs**, allowing visitors and search engines to navigate your website seamlessly. + +* **Significantly improves your website's loading times**, courtesy of our innovative data management techniques tailored for WordPress. + +* [Advanced] Yoast SEO comes with crawl settings that **optimize how search engines crawl your site** and reduce its carbon footprint. This lowers your site's environmental impact and contributes to a sustainable web. + +#### WRITE AWESOME CONTENT THAT USERS AND SEARCH ENGINES LOVE + +Unlock the full potential of your content with Yoast SEO's **state-of-the-art content analysis**. Crafting compelling content becomes easier with features designed to help you increase your website's performance. + +* **Leverage detailed SEO analysis** that guides you toward creating SEO-friendly content, allowing you to target the right keywords and boost your visibility in search results. + +* **Drive engagement and enhance readability** with the integrated readability analysis. Ensure your content is clear, concise, and effortlessly readable by humans and search engines alike. + +* Preview your content as it appears in SERPs, even on mobile devices. This helps you to **fine-tune your meta titles and descriptions to maximize click-through rates**. + +* Enable your HowTo content to be displayed in search results by using the **innovative Schema structured data blocks** for the WordPress block editor + +* **A dedicated breadcrumbs block** ensures your users always know their location within your website. + +* **Embrace inclusivity in your content creation process with the inclusive language analysis**. This optional feature analyzes your text and provides suggestions to make your content more considerate of different audiences. By using inclusive language, you’ll ensure your content resonates with diverse groups of people. + +* **Keyword research within the plugin** with the Semrush integration. Find out what related keywords people are searching for, so you can optimize your content to reach more audiences. + +* **Track your rankings in Yoast SEO** with the Wincher integration. Yoast SEO and Wincher show how your content and keywords rank in Google. + +* Are you using Elementor to build your website? No worries because **Yoast SEO integrates with Elementor**. Take advantage of all Yoast SEO's benefits within your favorite website builder! + +* **Advanced AI features in Yoast SEO Premium**, write titles and meta descriptions at a click of a button and receive suggested edits to your content to take it over the 'SEO' finish line. + +#### KEEP YOUR SITE IN PERFECT SHAPE + +Whether you are an entrepreneur, blogger or content creator, a developer or a business owner, Yoast SEO helps you keep your website in perfect shape by: + +* Fine-tuning the engine of your website, so you can work on creating great content! With Yoast SEO, **technical optimization becomes effortless**, allowing you to prioritize what truly matters. + +* **Structure your website's content easily** using Yoast SEO's cornerstone content features, enabling search engines to understand and index your most important pages effectively. + +* **Translate valuable content into structured data**, allowing search engines to fully comprehend your website's meaning and context. + +* Yoast SEO includes a **powerful front-end SEO inspector** that lets you preview and fine-tune the SEO settings directly on your front end. With this intuitive tool, you can easily optimize elements such as meta titles, meta descriptions, URL slugs, robots meta tags, and structured data by seeing their appearance in real-time. + +Helping you manage your team: with our SEO roles, you can give colleagues access to specific sections of the Yoast SEO plugin. + +* **Yoast SEO has a regular 2-week update cycle**, ensuring you always stay up-to-date with the latest development and updates from search engines. + +#### POWERFUL INTEGRATION WITH OTHER TOOLS + +Yoast SEO seamlessly integrates with various themes, plugins, and tools to enhance the user experience and improve your WordPress SEO workflow. + +* Utilize the full potential of the [Advanced Custom Fields](https://wordpress.org/plugins/advanced-custom-fields/) plugin when combined with the [ACF Content Analysis for Yoast SEO](https://wordpress.org/plugins/acf-content-analysis-for-yoast-seo/) plugin, and reap the benefits of Yoast SEO's powerful analysis. + +* Seamlessly integrate Yoast SEO with the [Elementor](https://wordpress.org/plugins/elementor/) website builder, empowering you to optimize your stunning designs effectively. + +* Elevate your site search quality with [Algolia](https://wordpress.org/plugins/wp-search-with-algolia/) integration, ensuring users can effortlessly find the content they want. + +* Combine Yoast SEO with Semrush, a leading online marketing tool. Access comprehensive keyword data directly within Yoast SEO, empowering you to supercharge your SEO strategy with data-driven insights. + +* Connect your Yoast SEO plugin with Wincher, a powerful SEO tracking tool. Monitor your keyword rankings, and track your website's visibility in search results. + +#### TRUST THE EXPERTS + +Yoast is powered by expert developers, testers, software architects, and SEO consultants. They work constantly to stay at the cutting edge of WordPress SEO and to improve the plugin with every release. + +#### WE ARE THERE FOR THE LONG RUN + +We're here to help you succeed with your SEO goals because empowering our users is at the core of our philosophy! + +If you're looking for a structured learning path, our [Yoast SEO academy](https://yoa.st/3ri) offers free and paid online courses. Any of our paid plans provides access to all the courses at no extra charge. We also have a treasure trove of information in our SEO blog, regular newsletter and webinars to keep you up-to-date with all the latest industry news. + +### THE PREMIUM ADVANTAGE + +Not only do you get many additional benefits by upgrading to [Yoast SEO Premium](https://yoa.st/1v8), but you'll also get 24/7 personalized support that takes away your worry. + +* Unlock our [AI features](https://yoa.st/51c); Yoast AI Optimize and Yoast AI Generate. Perfect for marketing professionals, freelance writers, and content strategists, Yoast AI features enable customers of all technical levels to apply SEO best practice to their content at the click of a button. + +* Optimize for up to five keyword synonyms by adding variants. Add up to four related synonyms of your keyword to expand your possibilities. You get the full SEO analysis for each. + +* Optimizes your articles for different word forms, singular and plural variations, different verb forms, synonyms, and related keyphrases, thanks to the semantic understanding technology in Yoast SEO Premium. + +* Seamlessly handle URL changes or page deletions with our redirect manager. Automatically create redirects to prevent "404: page not found" errors and retain valuable traffic and backlinks. + +* Get internal linking suggestions in real-time. The WordPress SEO plugin enhances your article's depth and authority by recommending related posts to link to. + +* Gain precise control over your page's appearance on social networks like Facebook and X with social media previews. Customize your social presence and entice users to engage with your content effectively. + +* Simplify your SEO workflows and get guidance to work on time-consuming SEO tasks, like finding unlinked content, with the Yoast SEO workouts. + +* Get actionable feedback on using inclusive vocabulary to enhance your writing and make it accessible to a broader audience. (Note: This feature is currently available in English and beta.) + +* Take advantage of the IndexNow integration, which instantly pings search engines like Microsoft Bing every time you publish or update content to ensure timely indexing. + +* Easily create optimized SEO titles and meta descriptions at the touch of a button, thanks to generative AI. Crafting optimized and engaging SEO titles and meta descriptions has never been faster and easier. + +* Avoid your content being used to train AI bots: Effortlessly safeguard your intellectual property, uphold data privacy, and maintain control over content by blocking AI bots from scraping it. These AI web crawlers include OpenAI's GPTBot, Common Crawl's CCBot and Google-Extended, used to train Google Gemini. + +### EXTEND YOUR WORDPRESS SEO + +Take your WordPress SEO to new heights with these powerful Yoast SEO add-ons: + +* [Yoast Local SEO](https://yoa.st/1uu): Optimize your website for a local audience, drive foot traffic to your stores, and establish a strong presence in local SERPs. + +* [Yoast Video SEO](https://yoa.st/1uw): Improves the performance of videos and ensures that Google fully understands its content. This helps you rank your videos higher in video search results. + +* [Yoast News SEO](https://yoa.st/1uv): Amplify your visibility and performance in Google News, allowing your news website to reach a broader audience. + +* [Yoast WooCommerce SEO](https://yoa.st/3rh): Enhance your ecommerce store's discoverability with extra tools designed specifically for online stores, helping you drive more targeted traffic and dominate the search results for your products. It has generative AI tools to help you write great titles and meta descriptions for your products! Also, use WooCommerce SEO to easily import and export global identifiers like GTIN8, UPC, and ISBN for your products. + +### BUG REPORTS + +Find a bug in Yoast SEO? We welcome your bug reports! Please report bugs in the WordPress SEO [repository on GitHub](https://github.com/Yoast/wordpress-seo). Note that GitHub is not a support forum but an efficient platform for addressing and resolving issues efficiently. + +### THERE'S MORE TO LEARN ABOUT SEO + +For a comprehensive resource on search engine optimization and Yoast SEO, please explore our [website](https://yoast.com), which is rich with insights and inspiration. Seek guidance in our extensively curated help center, designed to help you provide the knowledge to optimize your website effectively. + +Take your SEO skills to new heights with "[WordPress SEO - The Definitive Guide](https://yoa.st/1v6)" by Yoast - a must-read for WordPress SEO enthusiasts. Discover more exceptional plugins and solutions by Team Yoast, tailored to enhance your digital presence and achieve unparalleled success. + +== Installation == +Starting with Yoast SEO consists of just two steps: installing and setting up the plugin. Yoast SEO is designed to work with your site’s specific needs, so don’t forget to go through the Yoast SEO first-time configuration as explained in the ‘after activation’ step! For the most up-to-date guidance on how to install Yoast SEO products, [please visit our help center](https://yoast.com/help/yoast-installation-manuals/#h-yoast-seo-and-yoast-seo-premium-for-wordpress). + +== Frequently Asked Questions == + += How do the XML Sitemaps in the Yoast SEO plugin work? = + +Having an XML sitemap can be beneficial for SEO, as Google can retrieve essential pages of a website very fast, even if the internal linking of a site isn’t flawless. +The sitemap index and individual sitemaps are updated automatically as you add or remove content and will include the post types you want search engines to index. Post Types marked as noindex will not appear in the sitemap. [Learn more about XML Sitemaps](https://yoa.st/3qt). + += How can I add my website to Google Search Console? = + +It is straightforward to add your website to Google Search Console. +1. Create a Google Search Console account and login into your account. +2. Click ‘Add a property’ under the search drop-down. +3. Enter your website URL in the box and click ‘Continue’. +4. Click the arrow next to ‘HTML tag’ to expand the option. +5. Copy the meta tag. +6. Log in to your WordPress website. +7. Click on ‘SEO’ in the dashboard. +8. Click on ‘General’. +9. Click on the ‘Webmaster Tools’ tab. +10. Paste the code in the Google field and click ‘Save Changes’. +11. Go back to Google Search Console and click ‘Verify’. + +If you want more details steps, please visit [our article on our help center](https://yoa.st/3qu). + += How do I implement Yoast SEO breadcrumbs? = + +The steps below are a temporary solution as manual edits made to theme files may be overwritten with future theme updates. Please contact the theme developer for a permanent solution. We’ve written an article about the [importance of breadcrumbs for SEO](https://yoa.st/3qv). + +To implement the [breadcrumbs](https://yoa.st/3qw) function in Yoast SEO, you will have to edit your theme. We recommend that prior to any editing of the theme files, a backup is taken. Your host provider can help you take a backup. +Copy the following code into your theme where you want the breadcrumbs to be. If you are not sure, you will need to experiment with placement: + + +','

            ' ); +} +?> +
            + +Common places where you could place your breadcrumbs are inside your `single.php` and/or `page.php` file just above the page’s title. Another option that makes it really easy in some themes is by just pasting the code in `header.php` at the very end. + +In most non-WooTheme themes, this code snippet should not be added to your `functions.php` file. +Alternatively, you can manually add the breadcrumb shortcode to individual posts or pages: `[wpseo_breadcrumb]` + +If you need more details or a step by step guide, read our [Implementation guide for Yoast SEO breadcrumbs](https://yoa.st/3qx). + += How do I noindex URLS? = + +Yoast SEO provides multiple options for setting a URL or group of URLs to noindex. [Read more about how to do this in this guide](https://yoa.st/3qy/). + += Google shows the wrong description, how do I fix this? = + +If you’ve crafted nice meta descriptions for your blog posts, nothing is more annoying than Google showing another description for your site completely in the search result snippet. + +Possible causes could be: +1. wrong description in code +2. Google cache is outdated +3. Search term manipulation +4. Google ignored the meta description + +You can [read more here on how to solve the issue with the wrong description](https://yoa.st/3qz). + += How often is Yoast SEO updated? = + +Yoast SEO is updated every two weeks. If you want to know why, please read [this post on why we release every two weeks](https://yoa.st/3q-)! + += How do I get support? = + +As our free plugin is used by millions of people worldwide, we cannot offer you all one on one support. If you have trouble with the Yoast SEO for WordPress plugin, you can get help on the support forums here at [wordpress.org](https://wordpress.org/support/plugin/wordpress-seo/) or by checking out our help center at [yoast.com/help/](https://yoa.st/3r1). + +The plugins you buy at Yoast are called ‘premium plugins’ (even if Premium isn’t in its name) and include a complete year of free updates and premium support. This means you can contact our support team if you have any questions about that plugin. + +[Read more on how to get support](https://yoa.st/3r2) + += What happens to my data if I enable usage tracking? = + +[This page on yoast.com explains what data we collect to improve Yoast SEO](https://yoa.st/4w7). We only collect data when you explicitly opt in. Read more about how we handle your data in [our Privacy Policy](https://yoa.st/4w8). + += I have a different question than listed here = + +Your question has most likely been answered on our help center: [yoast.com/help/](https://yoa.st/1va). + +== Screenshots == + +1. The modern interface makes Yoast SEO easy to work with. +2. Easily manage how your posts and pages appear in SERPs. +3. Yoast SEO Premium has extra crawl optimization options. +4. Yoast SEO integrates with tools like Semrush and Wincher. +5. The famous SEO and readability analyses in Yoast SEO. +6. See what your post looks like in Google. +7. The First-time configuration helps you get started quickly. +8. The inclusive language analysis in Yoast SEO. + +== Changelog == + += 23.4 = + +Release date: 2024-09-03 + +Yoast SEO 23.4 brings more enhancements and bugfixes. [Find more information about our software releases and updates here](https://yoa.st/release-3-9-24). + +#### Enhancements + +* Adds support for discarding the changes when switching to a post, using the Top bar feature in Elementor. +* Adds _так_ to the words recognized by the _transition words_ assessment in Russian. Props to @pavelmai83. +* Improves the schema output by following the specification for the _SearchAction_ more strictly. +* Re-enables the script concatenation that was disabled to prevent a bug with WordPress 5.5. + +#### Bugfixes + +* Fixes a bug where an image caption inside a classic block would be considered the introduction when using the _keyphrase in introduction_ assessment in the default editor. +* Fixes a bug where the first tag instead of the primary tag would be shown in a permalink when adding a link in the Classic editor. +* Fixes a bug where the Yoast tab would disappear when opening and closing the Site Settings in Elementor. +* Fixes a bug where the Yoast user settings would be wiped out after a user profile update when the respective global settings were disabled. +* Fixes a bug where two admin links would not be resolvable when using a custom admin URL. + +#### Other + +* Adds a learn more link to the primary category picker. +* Deprecates some functions in the `Yoast_Input_Validation` class. +* Deprecates the `Disable_Concatenate_Scripts_Integration` class. +* Deprecates the `Duplicate_Post_Integration` class. +* Deprecates the `WPSEO_Admin_User_Profile::user_profile()` method and the `admin/views/user-profile.php` file. + += 23.3 = + +Release date: 2024-08-20 + +Yoast SEO 23.3 brings more enhancements and bugfixes. [Find more information about our software releases and updates here](https://yoa.st/release-20-8-24). + +#### Other + +* This release only contains non-user-facing maintenance changes. + += Earlier versions = +For the changelog of earlier versions, please refer to [the changelog on yoast.com](https://yoa.st/yoast-seo-changelog). diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-activate-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-activate-action.php new file mode 100644 index 00000000..2f828f59 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-activate-action.php @@ -0,0 +1,86 @@ +addon_manager = $addon_manager; + $this->require_file_helper = $require_file_helper; + } + + /** + * Activates the plugin based on the given plugin file. + * + * @param string $plugin_slug The plugin slug to get download url for. + * + * @return bool True when activation is successful. + * + * @throws Addon_Activation_Error_Exception Exception when the activation encounters an error. + * @throws User_Cannot_Activate_Plugins_Exception Exception when the user is not allowed to activate. + */ + public function activate_addon( $plugin_slug ) { + if ( ! \current_user_can( 'activate_plugins' ) ) { + throw new User_Cannot_Activate_Plugins_Exception(); + } + + if ( $this->addon_manager->is_installed( $plugin_slug ) ) { + return true; + } + + $this->load_wordpress_classes(); + + $plugin_file = $this->addon_manager->get_plugin_file( $plugin_slug ); + $activation_result = \activate_plugin( $plugin_file ); + + if ( $activation_result !== null && \is_wp_error( $activation_result ) ) { + throw new Addon_Activation_Error_Exception( $activation_result->get_error_message() ); + } + + return true; + } + + /** + * Requires the files needed from WordPress itself. + * + * @codeCoverageIgnore Only loads a WordPress file. + * + * @return void + */ + protected function load_wordpress_classes() { + if ( ! \function_exists( 'get_plugins' ) ) { + $this->require_file_helper->require_file_once( \ABSPATH . 'wp-admin/includes/plugin.php' ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-install-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-install-action.php new file mode 100644 index 00000000..6c0cb61e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/addon-installation/addon-install-action.php @@ -0,0 +1,131 @@ +addon_manager = $addon_manager; + $this->require_file_helper = $require_file_helper; + } + + /** + * Installs the plugin based on the given slug. + * + * @param string $plugin_slug The plugin slug to install. + * @param string $download_url The plugin download URL. + * + * @return bool True when install is successful. + * + * @throws Addon_Already_Installed_Exception When the addon is already installed. + * @throws Addon_Installation_Error_Exception When the installation encounters an error. + * @throws User_Cannot_Install_Plugins_Exception When the user does not have the permissions to install plugins. + */ + public function install_addon( $plugin_slug, $download_url ) { + if ( ! \current_user_can( 'install_plugins' ) ) { + throw new User_Cannot_Install_Plugins_Exception( $plugin_slug ); + } + + if ( $this->is_installed( $plugin_slug ) ) { + throw new Addon_Already_Installed_Exception( $plugin_slug ); + } + + $this->load_wordpress_classes(); + + $install_result = $this->install( $download_url ); + if ( \is_wp_error( $install_result ) ) { + throw new Addon_Installation_Error_Exception( $install_result->get_error_message() ); + } + + return $install_result; + } + + /** + * Requires the files needed from WordPress itself. + * + * @codeCoverageIgnore + * + * @return void + */ + protected function load_wordpress_classes() { + if ( ! \class_exists( 'WP_Upgrader' ) ) { + $this->require_file_helper->require_file_once( \ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + } + + if ( ! \class_exists( 'Plugin_Upgrader' ) ) { + $this->require_file_helper->require_file_once( \ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php' ); + } + + if ( ! \class_exists( 'WP_Upgrader_Skin' ) ) { + $this->require_file_helper->require_file_once( \ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php' ); + } + + if ( ! \function_exists( 'get_plugin_data' ) ) { + $this->require_file_helper->require_file_once( \ABSPATH . 'wp-admin/includes/plugin.php' ); + } + + if ( ! \function_exists( 'request_filesystem_credentials' ) ) { + $this->require_file_helper->require_file_once( \ABSPATH . 'wp-admin/includes/file.php' ); + } + } + + /** + * Checks is a plugin is installed. + * + * @param string $plugin_slug The plugin to check. + * + * @return bool True when plugin is installed. + */ + protected function is_installed( $plugin_slug ) { + return $this->addon_manager->get_plugin_file( $plugin_slug ) !== false; + } + + /** + * Runs the installation by using the WordPress installation routine. + * + * @codeCoverageIgnore Contains WordPress specific logic. + * + * @param string $plugin_download The url to the download. + * + * @return bool|WP_Error True when success, WP_Error when something went wrong. + */ + protected function install( $plugin_download ) { + $plugin_upgrader = new Plugin_Upgrader(); + + return $plugin_upgrader->install( $plugin_download ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/alert-dismissal-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/alert-dismissal-action.php new file mode 100644 index 00000000..87318f40 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/alert-dismissal-action.php @@ -0,0 +1,215 @@ +user = $user; + } + + /** + * Dismisses an alert. + * + * @param string $alert_identifier Alert identifier. + * + * @return bool Whether the dismiss was successful or not. + */ + public function dismiss( $alert_identifier ) { + $user_id = $this->user->get_current_user_id(); + if ( $user_id === 0 ) { + return false; + } + + if ( $this->is_allowed( $alert_identifier ) === false ) { + return false; + } + + $dismissed_alerts = $this->get_dismissed_alerts( $user_id ); + if ( $dismissed_alerts === false ) { + return false; + } + + if ( \array_key_exists( $alert_identifier, $dismissed_alerts ) === true ) { + // The alert is already dismissed. + return true; + } + + // Add this alert to the dismissed alerts. + $dismissed_alerts[ $alert_identifier ] = true; + + // Save. + return $this->user->update_meta( $user_id, static::USER_META_KEY, $dismissed_alerts ) !== false; + } + + /** + * Resets an alert. + * + * @param string $alert_identifier Alert identifier. + * + * @return bool Whether the reset was successful or not. + */ + public function reset( $alert_identifier ) { + $user_id = $this->user->get_current_user_id(); + if ( $user_id === 0 ) { + return false; + } + + if ( $this->is_allowed( $alert_identifier ) === false ) { + return false; + } + + $dismissed_alerts = $this->get_dismissed_alerts( $user_id ); + if ( $dismissed_alerts === false ) { + return false; + } + + $amount_of_dismissed_alerts = \count( $dismissed_alerts ); + if ( $amount_of_dismissed_alerts === 0 ) { + // No alerts: nothing to reset. + return true; + } + + if ( \array_key_exists( $alert_identifier, $dismissed_alerts ) === false ) { + // Alert not found: nothing to reset. + return true; + } + + if ( $amount_of_dismissed_alerts === 1 ) { + // The 1 remaining dismissed alert is the alert to reset: delete the alerts user meta row. + return $this->user->delete_meta( $user_id, static::USER_META_KEY, $dismissed_alerts ); + } + + // Remove this alert from the dismissed alerts. + unset( $dismissed_alerts[ $alert_identifier ] ); + + // Save. + return $this->user->update_meta( $user_id, static::USER_META_KEY, $dismissed_alerts ) !== false; + } + + /** + * Returns if an alert is dismissed or not. + * + * @param string $alert_identifier Alert identifier. + * + * @return bool Whether the alert has been dismissed. + */ + public function is_dismissed( $alert_identifier ) { + $user_id = $this->user->get_current_user_id(); + if ( $user_id === 0 ) { + return false; + } + + if ( $this->is_allowed( $alert_identifier ) === false ) { + return false; + } + + $dismissed_alerts = $this->get_dismissed_alerts( $user_id ); + if ( $dismissed_alerts === false ) { + return false; + } + + return \array_key_exists( $alert_identifier, $dismissed_alerts ); + } + + /** + * Returns an object with all alerts dismissed by current user. + * + * @return array|false An array with the keys of all Alerts that have been dismissed + * by the current user or `false`. + */ + public function all_dismissed() { + $user_id = $this->user->get_current_user_id(); + if ( $user_id === 0 ) { + return false; + } + + $dismissed_alerts = $this->get_dismissed_alerts( $user_id ); + if ( $dismissed_alerts === false ) { + return false; + } + + return $dismissed_alerts; + } + + /** + * Returns if an alert is allowed or not. + * + * @param string $alert_identifier Alert identifier. + * + * @return bool Whether the alert is allowed. + */ + public function is_allowed( $alert_identifier ) { + return \in_array( $alert_identifier, $this->get_allowed_dismissable_alerts(), true ); + } + + /** + * Retrieves the dismissed alerts. + * + * @param int $user_id User ID. + * + * @return string[]|false The dismissed alerts. False for an invalid $user_id. + */ + protected function get_dismissed_alerts( $user_id ) { + $dismissed_alerts = $this->user->get_meta( $user_id, static::USER_META_KEY, true ); + if ( $dismissed_alerts === false ) { + // Invalid user ID. + return false; + } + + if ( $dismissed_alerts === '' ) { + /* + * When no database row exists yet, an empty string is returned because of the `single` parameter. + * We do want a single result returned, but the default should be an empty array instead. + */ + return []; + } + + return $dismissed_alerts; + } + + /** + * Retrieves the allowed dismissable alerts. + * + * @return string[] The allowed dismissable alerts. + */ + protected function get_allowed_dismissable_alerts() { + /** + * Filter: 'wpseo_allowed_dismissable_alerts' - List of allowed dismissable alerts. + * + * @param string[] $allowed_dismissable_alerts Allowed dismissable alerts list. + */ + $allowed_dismissable_alerts = \apply_filters( 'wpseo_allowed_dismissable_alerts', [] ); + + if ( \is_array( $allowed_dismissable_alerts ) === false ) { + return []; + } + + // Only allow strings. + $allowed_dismissable_alerts = \array_filter( $allowed_dismissable_alerts, 'is_string' ); + + // Filter unique and reorder indices. + $allowed_dismissable_alerts = \array_values( \array_unique( $allowed_dismissable_alerts ) ); + + return $allowed_dismissable_alerts; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/configuration/first-time-configuration-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/configuration/first-time-configuration-action.php new file mode 100644 index 00000000..8b461c83 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/configuration/first-time-configuration-action.php @@ -0,0 +1,344 @@ +options_helper = $options_helper; + $this->social_profiles_helper = $social_profiles_helper; + } + + /** + * Stores the values for the site representation. + * + * @param array $params The values to store. + * + * @return object The response object. + */ + public function set_site_representation( $params ) { + $failures = []; + $old_values = $this->get_old_values( self::SITE_REPRESENTATION_FIELDS ); + + foreach ( self::SITE_REPRESENTATION_FIELDS as $field_name ) { + if ( isset( $params[ $field_name ] ) ) { + $result = $this->options_helper->set( $field_name, $params[ $field_name ] ); + + if ( ! $result ) { + $failures[] = $field_name; + } + } + } + + // Delete cached logos in the db. + $this->options_helper->set( 'company_logo_meta', false ); + $this->options_helper->set( 'person_logo_meta', false ); + + /** + * Action: 'wpseo_post_update_site_representation' - Allows for Hiive event tracking. + * + * @param array $params The new values of the options. + * @param array $old_values The old values of the options. + * @param array $failures The options that failed to be saved. + * + * @internal + */ + \do_action( 'wpseo_ftc_post_update_site_representation', $params, $old_values, $failures ); + + if ( \count( $failures ) === 0 ) { + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + + return (object) [ + 'success' => false, + 'status' => 500, + 'error' => 'Could not save some options in the database', + 'failures' => $failures, + ]; + } + + /** + * Stores the values for the social profiles. + * + * @param array $params The values to store. + * + * @return object The response object. + */ + public function set_social_profiles( $params ) { + $old_values = $this->get_old_values( \array_keys( $this->social_profiles_helper->get_organization_social_profile_fields() ) ); + $failures = $this->social_profiles_helper->set_organization_social_profiles( $params ); + + /** + * Action: 'wpseo_post_update_social_profiles' - Allows for Hiive event tracking. + * + * @param array $params The new values of the options. + * @param array $old_values The old values of the options. + * @param array $failures The options that failed to be saved. + * + * @internal + */ + \do_action( 'wpseo_ftc_post_update_social_profiles', $params, $old_values, $failures ); + + if ( empty( $failures ) ) { + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + + return (object) [ + 'success' => false, + 'status' => 200, + 'error' => 'Could not save some options in the database', + 'failures' => $failures, + ]; + } + + /** + * Stores the values for the social profiles. + * + * @param array $params The values to store. + * + * @return object The response object. + */ + public function set_person_social_profiles( $params ) { + $social_profiles = \array_filter( + $params, + static function ( $key ) { + return $key !== 'user_id'; + }, + \ARRAY_FILTER_USE_KEY + ); + + $failures = $this->social_profiles_helper->set_person_social_profiles( $params['user_id'], $social_profiles ); + + if ( \count( $failures ) === 0 ) { + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + + return (object) [ + 'success' => false, + 'status' => 200, + 'error' => 'Could not save some options in the database', + 'failures' => $failures, + ]; + } + + /** + * Gets the values for the social profiles. + * + * @param int $user_id The person ID. + * + * @return object The response object. + */ + public function get_person_social_profiles( $user_id ) { + + return (object) [ + 'success' => true, + 'status' => 200, + 'social_profiles' => $this->social_profiles_helper->get_person_social_profiles( $user_id ), + ]; + } + + /** + * Stores the values to enable/disable tracking. + * + * @param array $params The values to store. + * + * @return object The response object. + */ + public function set_enable_tracking( $params ) { + $success = true; + $option_value = $this->options_helper->get( 'tracking' ); + + if ( $option_value !== $params['tracking'] ) { + $this->options_helper->set( 'toggled_tracking', true ); + $success = $this->options_helper->set( 'tracking', $params['tracking'] ); + } + + /** + * Action: 'wpseo_post_update_enable_tracking' - Allows for Hiive event tracking. + * + * @param array $new_value The new value. + * @param array $old_value The old value. + * @param bool $failure Whether the option failed to be stored. + * + * @internal + */ + // $success is negated to be aligned with the other two actions which pass $failures. + \do_action( 'wpseo_ftc_post_update_enable_tracking', $params['tracking'], $option_value, ! $success ); + + if ( $success ) { + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + + return (object) [ + 'success' => false, + 'status' => 500, + 'error' => 'Could not save the option in the database', + ]; + } + + /** + * Checks if the current user has the capability a specific user. + * + * @param int $user_id The id of the user to be edited. + * + * @return object The response object. + */ + public function check_capability( $user_id ) { + if ( $this->can_edit_profile( $user_id ) ) { + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + + return (object) [ + 'success' => false, + 'status' => 403, + ]; + } + + /** + * Stores the first time configuration state. + * + * @param array $params The values to store. + * + * @return object The response object. + */ + public function save_configuration_state( $params ) { + // If the finishedSteps param is not present in the REST request, it's a malformed request. + if ( ! isset( $params['finishedSteps'] ) ) { + return (object) [ + 'success' => false, + 'status' => 400, + 'error' => 'Bad request', + ]; + } + + // Sanitize input. + $finished_steps = \array_map( '\sanitize_text_field', \wp_unslash( $params['finishedSteps'] ) ); + + $success = $this->options_helper->set( 'configuration_finished_steps', $finished_steps ); + + if ( ! $success ) { + return (object) [ + 'success' => false, + 'status' => 500, + 'error' => 'Could not save the option in the database', + ]; + } + + // If all the five steps of the configuration have been completed, set first_time_install option to false. + if ( \count( $params['finishedSteps'] ) === 3 ) { + $this->options_helper->set( 'first_time_install', false ); + } + + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + + /** + * Gets the first time configuration state. + * + * @return object The response object. + */ + public function get_configuration_state() { + $configuration_option = $this->options_helper->get( 'configuration_finished_steps' ); + + if ( ! \is_null( $configuration_option ) ) { + return (object) [ + 'success' => true, + 'status' => 200, + 'data' => $configuration_option, + ]; + } + + return (object) [ + 'success' => false, + 'status' => 500, + 'error' => 'Could not get data from the database', + ]; + } + + /** + * Checks if the current user has the capability to edit a specific user. + * + * @param int $person_id The id of the person to edit. + * + * @return bool + */ + private function can_edit_profile( $person_id ) { + return \current_user_can( 'edit_user', $person_id ); + } + + /** + * Gets the old values for the given fields. + * + * @param array $fields_names The fields to get the old values for. + * + * @return array The old values. + */ + private function get_old_values( array $fields_names ): array { + $old_values = []; + + foreach ( $fields_names as $field_name ) { + $old_values[ $field_name ] = $this->options_helper->get( $field_name ); + } + + return $old_values; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/abstract-aioseo-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/abstract-aioseo-importing-action.php new file mode 100644 index 00000000..3e2631fb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/abstract-aioseo-importing-action.php @@ -0,0 +1,266 @@ +import_cursor = $import_cursor; + $this->options = $options; + $this->sanitization = $sanitization; + $this->replacevar_handler = $replacevar_handler; + $this->robots_provider = $robots_provider; + $this->robots_transformer = $robots_transformer; + } + + /** + * Sets the AIOSEO helper. + * + * @required + * + * @param Aioseo_Helper $aioseo_helper The AIOSEO helper. + * + * @return void + */ + public function set_aioseo_helper( Aioseo_Helper $aioseo_helper ) { + $this->aioseo_helper = $aioseo_helper; + } + + /** + * The name of the plugin we import from. + * + * @return string The plugin we import from. + * + * @throws Exception If the PLUGIN constant is not set in the child class. + */ + public function get_plugin() { + $class = static::class; + $plugin = $class::PLUGIN; + + if ( $plugin === null ) { + throw new Exception( 'Importing action without explicit plugin' ); + } + + return $plugin; + } + + /** + * The data type we import from the plugin. + * + * @return string The data type we import from the plugin. + * + * @throws Exception If the TYPE constant is not set in the child class. + */ + public function get_type() { + $class = static::class; + $type = $class::TYPE; + + if ( $type === null ) { + throw new Exception( 'Importing action without explicit type' ); + } + + return $type; + } + + /** + * Can the current action import the data from plugin $plugin of type $type? + * + * @param string|null $plugin The plugin to import from. + * @param string|null $type The type of data to import. + * + * @return bool True if this action can handle the combination of Plugin and Type. + * + * @throws Exception If the TYPE constant is not set in the child class. + */ + public function is_compatible_with( $plugin = null, $type = null ) { + if ( empty( $plugin ) && empty( $type ) ) { + return true; + } + + if ( $plugin === $this->get_plugin() && empty( $type ) ) { + return true; + } + + if ( empty( $plugin ) && $type === $this->get_type() ) { + return true; + } + + if ( $plugin === $this->get_plugin() && $type === $this->get_type() ) { + return true; + } + + return false; + } + + /** + * Gets the completed id (to be used as a key for the importing_completed option). + * + * @return string The completed id. + */ + public function get_completed_id() { + return $this->get_cursor_id(); + } + + /** + * Returns the stored state of completedness. + * + * @return int The stored state of completedness. + */ + public function get_completed() { + $completed_id = $this->get_completed_id(); + $importers_completions = $this->options->get( 'importing_completed', [] ); + + return ( isset( $importers_completions[ $completed_id ] ) ) ? $importers_completions[ $completed_id ] : false; + } + + /** + * Stores the current state of completedness. + * + * @param bool $completed Whether the importer is completed. + * + * @return void + */ + public function set_completed( $completed ) { + $completed_id = $this->get_completed_id(); + $current_importers_completions = $this->options->get( 'importing_completed', [] ); + + $current_importers_completions[ $completed_id ] = $completed; + $this->options->set( 'importing_completed', $current_importers_completions ); + } + + /** + * Returns whether the importing action is enabled. + * + * @return bool True by default unless a child class overrides it. + */ + public function is_enabled() { + return true; + } + + /** + * Gets the cursor id. + * + * @return string The cursor id. + */ + protected function get_cursor_id() { + return $this->get_plugin() . '_' . $this->get_type(); + } + + /** + * Minimally transforms data to be imported. + * + * @param string $meta_data The meta data to be imported. + * + * @return string The transformed meta data. + */ + public function simple_import( $meta_data ) { + // Transform the replace vars into Yoast replace vars. + $transformed_data = $this->replacevar_handler->transform( $meta_data ); + + return $this->sanitization->sanitize_text_field( \html_entity_decode( $transformed_data ) ); + } + + /** + * Transforms URL to be imported. + * + * @param string $meta_data The meta data to be imported. + * + * @return string The transformed URL. + */ + public function url_import( $meta_data ) { + // We put null as the allowed protocols here, to have the WP default allowed protocols, see https://developer.wordpress.org/reference/functions/wp_allowed_protocols. + return $this->sanitization->sanitize_url( $meta_data, null ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/abstract-aioseo-settings-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/abstract-aioseo-settings-importing-action.php new file mode 100644 index 00000000..b754893e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/abstract-aioseo-settings-importing-action.php @@ -0,0 +1,342 @@ +import_helper = $import_helper; + } + + /** + * Retrieves the source option_name. + * + * @return string The source option_name. + * + * @throws Exception If the SOURCE_OPTION_NAME constant is not set in the child class. + */ + public function get_source_option_name() { + $source_option_name = static::SOURCE_OPTION_NAME; + + if ( empty( $source_option_name ) ) { + throw new Exception( 'Importing settings action without explicit source option_name' ); + } + + return $source_option_name; + } + + /** + * Returns the total number of unimported objects. + * + * @return int The total number of unimported objects. + */ + public function get_total_unindexed() { + return $this->get_unindexed_count(); + } + + /** + * Returns the limited number of unimported objects. + * + * @param int $limit The maximum number of unimported objects to be returned. + * + * @return int The limited number of unindexed posts. + */ + public function get_limited_unindexed_count( $limit ) { + return $this->get_unindexed_count( $limit ); + } + + /** + * Returns the number of unimported objects (limited if limit is applied). + * + * @param int|null $limit The maximum number of unimported objects to be returned. + * + * @return int The number of unindexed posts. + */ + protected function get_unindexed_count( $limit = null ) { + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = null; + } + + $settings_to_create = $this->query( $limit ); + + $number_of_settings_to_create = \count( $settings_to_create ); + $completed = $number_of_settings_to_create === 0; + $this->set_completed( $completed ); + + return $number_of_settings_to_create; + } + + /** + * Imports AIOSEO settings. + * + * @return array|false An array of the AIOSEO settings that were imported or false if aioseo data was not found. + */ + public function index() { + $limit = $this->get_limit(); + $aioseo_settings = $this->query( $limit ); + $created_settings = []; + + $completed = \count( $aioseo_settings ) === 0; + $this->set_completed( $completed ); + + // Prepare the setting keys mapping. + $this->build_mapping(); + + // Prepare the replacement var mapping. + foreach ( $this->replace_vars_edited_map as $aioseo_var => $yoast_var ) { + $this->replacevar_handler->compose_map( $aioseo_var, $yoast_var ); + } + + $last_imported_setting = ''; + try { + foreach ( $aioseo_settings as $setting => $setting_value ) { + // Map and import the values of the setting we're working with (eg. post, book-category, etc.) to the respective Yoast option. + $this->map( $setting_value, $setting ); + + // Save the type of the settings that were just imported, so that we can allow chunked imports. + $last_imported_setting = $setting; + + $created_settings[] = $setting; + } + } + finally { + $cursor_id = $this->get_cursor_id(); + $this->import_cursor->set_cursor( $cursor_id, $last_imported_setting ); + } + + return $created_settings; + } + + /** + * Checks if the settings tab subsetting is set in the AIOSEO option. + * + * @param string $aioseo_settings The AIOSEO option. + * + * @return bool Whether the settings are set. + */ + public function isset_settings_tab( $aioseo_settings ) { + return isset( $aioseo_settings['searchAppearance'][ $this->settings_tab ] ); + } + + /** + * Queries the database and retrieves unimported AiOSEO settings (in chunks if a limit is applied). + * + * @param int|null $limit The maximum number of unimported objects to be returned. + * + * @return array The (maybe chunked) unimported AiOSEO settings to import. + */ + protected function query( $limit = null ) { + $aioseo_settings = \json_decode( \get_option( $this->get_source_option_name(), '' ), true ); + + if ( empty( $aioseo_settings ) ) { + return []; + } + + // We specifically want the setttings of the tab we're working with, eg. postTypes, taxonomies, etc. + $settings_values = $aioseo_settings['searchAppearance'][ $this->settings_tab ]; + if ( ! \is_array( $settings_values ) ) { + return []; + } + + $flattened_settings = $this->import_helper->flatten_settings( $settings_values ); + + return $this->get_unimported_chunk( $flattened_settings, $limit ); + } + + /** + * Retrieves (a chunk of, if limit is applied) the unimported AIOSEO settings. + * To apply a chunk, we manipulate the cursor to the keys of the AIOSEO settings. + * + * @param array $importable_data All of the available AIOSEO settings. + * @param int $limit The maximum number of unimported objects to be returned. + * + * @return array The (chunk of, if limit is applied)) unimported AIOSEO settings. + */ + protected function get_unimported_chunk( $importable_data, $limit ) { + \ksort( $importable_data ); + + $cursor_id = $this->get_cursor_id(); + $cursor = $this->import_cursor->get_cursor( $cursor_id, '' ); + + /** + * Filter 'wpseo_aioseo__import_cursor' - Allow filtering the value of the aioseo settings import cursor. + * + * @param int $import_cursor The value of the aioseo posttype default settings import cursor. + */ + $cursor = \apply_filters( 'wpseo_aioseo_' . $this->get_type() . '_import_cursor', $cursor ); + + if ( $cursor === '' ) { + return \array_slice( $importable_data, 0, $limit, true ); + } + + // Let's find the position of the cursor in the alphabetically sorted importable data, so we can return only the unimported data. + $keys = \array_flip( \array_keys( $importable_data ) ); + // If the stored cursor now no longer exists in the data, we have no choice but to start over. + $position = ( isset( $keys[ $cursor ] ) ) ? ( $keys[ $cursor ] + 1 ) : 0; + + return \array_slice( $importable_data, $position, $limit, true ); + } + + /** + * Returns the number of objects that will be imported in a single importing pass. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_aioseo__indexation_limit' - Allow filtering the number of settings imported during each importing pass. + * + * @param int $max_posts The maximum number of posts indexed. + */ + $limit = \apply_filters( 'wpseo_aioseo_' . $this->get_type() . '_indexation_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } + + /** + * Maps/imports AIOSEO settings into the respective Yoast settings. + * + * @param string|array $setting_value The value of the AIOSEO setting at hand. + * @param string $setting The setting at hand, eg. post or movie-category, separator etc. + * + * @return void + */ + protected function map( $setting_value, $setting ) { + $aioseo_options_to_yoast_map = $this->aioseo_options_to_yoast_map; + + if ( isset( $aioseo_options_to_yoast_map[ $setting ] ) ) { + $this->import_single_setting( $setting, $setting_value, $aioseo_options_to_yoast_map[ $setting ] ); + } + } + + /** + * Imports a single setting in the db after transforming it to adhere to Yoast conventions. + * + * @param string $setting The name of the setting. + * @param string $setting_value The values of the setting. + * @param array $setting_mapping The mapping of the setting to Yoast formats. + * + * @return void + */ + protected function import_single_setting( $setting, $setting_value, $setting_mapping ) { + $yoast_key = $setting_mapping['yoast_name']; + + // Check if we're supposed to save the setting. + if ( $this->options->get_default( 'wpseo_titles', $yoast_key ) !== null ) { + // Then, do any needed data transfomation before actually saving the incoming data. + $transformed_data = \call_user_func( [ $this, $setting_mapping['transform_method'] ], $setting_value, $setting_mapping ); + + $this->options->set( $yoast_key, $transformed_data ); + } + } + + /** + * Minimally transforms boolean data to be imported. + * + * @param bool $meta_data The boolean meta data to be imported. + * + * @return bool The transformed boolean meta data. + */ + public function simple_boolean_import( $meta_data ) { + return $meta_data; + } + + /** + * Imports the noindex setting, taking into consideration whether they defer to global defaults. + * + * @param bool $noindex The noindex of the type, without taking into consideration whether the type defers to global defaults. + * @param array $mapping The mapping of the setting we're working with. + * + * @return bool The noindex setting. + */ + public function import_noindex( $noindex, $mapping ) { + return $this->robots_transformer->transform_robot_setting( 'noindex', $noindex, $mapping ); + } + + /** + * Returns a setting map of the robot setting for one subset of post types/taxonomies/archives. + * For custom archives, it returns an empty array because AIOSEO excludes some custom archives from this option structure, eg. WooCommerce's products and we don't want to raise a false alarm. + * + * @return array The setting map of the robot setting for one subset of post types/taxonomies/archives or an empty array. + */ + public function pluck_robot_setting_from_mapping() { + return []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-cleanup-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-cleanup-action.php new file mode 100644 index 00000000..13835298 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-cleanup-action.php @@ -0,0 +1,176 @@ +wpdb = $wpdb; + $this->options = $options; + } + + /** + * Retrieves the postmeta along with the db prefix. + * + * @return string The postmeta table name along with the db prefix. + */ + protected function get_postmeta_table() { + return $this->wpdb->prefix . 'postmeta'; + } + + /** + * Just checks if the cleanup has been completed in the past. + * + * @return int The total number of unimported objects. + */ + public function get_total_unindexed() { + if ( ! $this->aioseo_helper->aioseo_exists() ) { + return 0; + } + + return ( ! $this->get_completed() ) ? 1 : 0; + } + + /** + * Just checks if the cleanup has been completed in the past. + * + * @param int $limit The maximum number of unimported objects to be returned. + * + * @return int|false The limited number of unindexed posts. False if the query fails. + */ + public function get_limited_unindexed_count( $limit ) { + if ( ! $this->aioseo_helper->aioseo_exists() ) { + return 0; + } + + return ( ! $this->get_completed() ) ? 1 : 0; + } + + /** + * Cleans up AIOSEO data. + * + * @return Indexable[]|false An array of created indexables or false if aioseo data was not found. + */ + public function index() { + if ( $this->get_completed() ) { + return []; + } + + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: There is no unescaped user input. + $meta_data = $this->wpdb->query( $this->cleanup_postmeta_query() ); + $aioseo_table_truncate_done = $this->wpdb->query( $this->truncate_query() ); + // phpcs:enable WordPress.DB.PreparedSQL.NotPrepared + + if ( $meta_data === false && $aioseo_table_truncate_done === false ) { + return false; + } + + $this->set_completed( true ); + + return [ + 'metadata_cleanup' => $meta_data, + 'indexables_cleanup' => $aioseo_table_truncate_done, + ]; + } + + /** + * Creates a DELETE query string for deleting AIOSEO postmeta data. + * + * @return string The query to use for importing or counting the number of items to import. + */ + public function cleanup_postmeta_query() { + $table = $this->get_postmeta_table(); + $meta_keys_to_delete = $this->aioseo_postmeta_keys; + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + return $this->wpdb->prepare( + "DELETE FROM {$table} WHERE meta_key IN (" . \implode( ', ', \array_fill( 0, \count( $meta_keys_to_delete ), '%s' ) ) . ')', + $meta_keys_to_delete + ); + // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared + } + + /** + * Creates a TRUNCATE query string for emptying the AIOSEO indexable table, if it exists. + * + * @return string The query to use for importing or counting the number of items to import. + */ + public function truncate_query() { + if ( ! $this->aioseo_helper->aioseo_exists() ) { + // If the table doesn't exist, we need a string that will amount to a quick query that doesn't return false when ran. + return 'SELECT 1'; + } + + $table = $this->aioseo_helper->get_table(); + + return "TRUNCATE TABLE {$table}"; + } + + /** + * Used nowhere. Exists to comply with the interface. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_aioseo_cleanup_limit' - Allow filtering the number of posts indexed during each indexing pass. + * + * @param int $max_posts The maximum number of posts cleaned up. + */ + $limit = \apply_filters( 'wpseo_aioseo_cleanup_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-custom-archive-settings-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-custom-archive-settings-importing-action.php new file mode 100644 index 00000000..2b43ea0f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-custom-archive-settings-importing-action.php @@ -0,0 +1,111 @@ +post_type = $post_type; + } + + /** + * Builds the mapping that ties AOISEO option keys with Yoast ones and their data transformation method. + * + * @return void + */ + protected function build_mapping() { + $post_type_objects = \get_post_types( [ 'public' => true ], 'objects' ); + + foreach ( $post_type_objects as $pt ) { + // Use all the custom post types that have archives. + if ( ! $pt->_builtin && $this->post_type->has_archive( $pt ) ) { + $this->aioseo_options_to_yoast_map[ '/' . $pt->name . '/title' ] = [ + 'yoast_name' => 'title-ptarchive-' . $pt->name, + 'transform_method' => 'simple_import', + ]; + $this->aioseo_options_to_yoast_map[ '/' . $pt->name . '/metaDescription' ] = [ + 'yoast_name' => 'metadesc-ptarchive-' . $pt->name, + 'transform_method' => 'simple_import', + ]; + $this->aioseo_options_to_yoast_map[ '/' . $pt->name . '/advanced/robotsMeta/noindex' ] = [ + 'yoast_name' => 'noindex-ptarchive-' . $pt->name, + 'transform_method' => 'import_noindex', + 'type' => 'archives', + 'subtype' => $pt->name, + 'option_name' => 'aioseo_options_dynamic', + ]; + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-default-archive-settings-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-default-archive-settings-importing-action.php new file mode 100644 index 00000000..7106fb92 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-default-archive-settings-importing-action.php @@ -0,0 +1,103 @@ +aioseo_options_to_yoast_map = [ + '/author/title' => [ + 'yoast_name' => 'title-author-wpseo', + 'transform_method' => 'simple_import', + ], + '/author/metaDescription' => [ + 'yoast_name' => 'metadesc-author-wpseo', + 'transform_method' => 'simple_import', + ], + '/date/title' => [ + 'yoast_name' => 'title-archive-wpseo', + 'transform_method' => 'simple_import', + ], + '/date/metaDescription' => [ + 'yoast_name' => 'metadesc-archive-wpseo', + 'transform_method' => 'simple_import', + ], + '/search/title' => [ + 'yoast_name' => 'title-search-wpseo', + 'transform_method' => 'simple_import', + ], + '/author/advanced/robotsMeta/noindex' => [ + 'yoast_name' => 'noindex-author-wpseo', + 'transform_method' => 'import_noindex', + 'type' => 'archives', + 'subtype' => 'author', + 'option_name' => 'aioseo_options', + ], + '/date/advanced/robotsMeta/noindex' => [ + 'yoast_name' => 'noindex-archive-wpseo', + 'transform_method' => 'import_noindex', + 'type' => 'archives', + 'subtype' => 'date', + 'option_name' => 'aioseo_options', + ], + ]; + } + + /** + * Returns a setting map of the robot setting for author archives. + * + * @return array The setting map of the robot setting for author archives. + */ + public function pluck_robot_setting_from_mapping() { + $this->build_mapping(); + + foreach ( $this->aioseo_options_to_yoast_map as $setting ) { + // Return the first archive setting map. + if ( $setting['transform_method'] === 'import_noindex' && isset( $setting['subtype'] ) && $setting['subtype'] === 'author' ) { + return $setting; + } + } + + return []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-general-settings-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-general-settings-importing-action.php new file mode 100644 index 00000000..eb42929b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-general-settings-importing-action.php @@ -0,0 +1,213 @@ +image = $image; + } + + /** + * Builds the mapping that ties AOISEO option keys with Yoast ones and their data transformation method. + * + * @return void + */ + protected function build_mapping() { + $this->aioseo_options_to_yoast_map = [ + '/separator' => [ + 'yoast_name' => 'separator', + 'transform_method' => 'transform_separator', + ], + '/siteTitle' => [ + 'yoast_name' => 'title-home-wpseo', + 'transform_method' => 'simple_import', + ], + '/metaDescription' => [ + 'yoast_name' => 'metadesc-home-wpseo', + 'transform_method' => 'simple_import', + ], + '/schema/siteRepresents' => [ + 'yoast_name' => 'company_or_person', + 'transform_method' => 'transform_site_represents', + ], + '/schema/person' => [ + 'yoast_name' => 'company_or_person_user_id', + 'transform_method' => 'simple_import', + ], + '/schema/organizationName' => [ + 'yoast_name' => 'company_name', + 'transform_method' => 'simple_import', + ], + '/schema/organizationLogo' => [ + 'yoast_name' => 'company_logo', + 'transform_method' => 'import_company_logo', + ], + '/schema/personLogo' => [ + 'yoast_name' => 'person_logo', + 'transform_method' => 'import_person_logo', + ], + ]; + } + + /** + * Imports the organization logo while also accounting for the id of the log to be saved in the separate Yoast option. + * + * @param string $logo_url The company logo url coming from AIOSEO settings. + * + * @return string The transformed company logo url. + */ + public function import_company_logo( $logo_url ) { + $logo_id = $this->image->get_attachment_by_url( $logo_url ); + $this->options->set( 'company_logo_id', $logo_id ); + + $this->options->set( 'company_logo_meta', false ); + $logo_meta = $this->image->get_attachment_meta_from_settings( 'company_logo' ); + $this->options->set( 'company_logo_meta', $logo_meta ); + + return $this->url_import( $logo_url ); + } + + /** + * Imports the person logo while also accounting for the id of the log to be saved in the separate Yoast option. + * + * @param string $logo_url The person logo url coming from AIOSEO settings. + * + * @return string The transformed person logo url. + */ + public function import_person_logo( $logo_url ) { + $logo_id = $this->image->get_attachment_by_url( $logo_url ); + $this->options->set( 'person_logo_id', $logo_id ); + + $this->options->set( 'person_logo_meta', false ); + $logo_meta = $this->image->get_attachment_meta_from_settings( 'person_logo' ); + $this->options->set( 'person_logo_meta', $logo_meta ); + + return $this->url_import( $logo_url ); + } + + /** + * Transforms the site represents setting. + * + * @param string $site_represents The site represents setting. + * + * @return string The transformed site represents setting. + */ + public function transform_site_represents( $site_represents ) { + switch ( $site_represents ) { + case 'person': + return 'person'; + + case 'organization': + default: + return 'company'; + } + } + + /** + * Transforms the separator setting. + * + * @param string $separator The separator setting. + * + * @return string The transformed separator. + */ + public function transform_separator( $separator ) { + switch ( $separator ) { + case '-': + return 'sc-dash'; + + case '–': + return 'sc-ndash'; + + case '—': + return 'sc-mdash'; + + case '»': + return 'sc-raquo'; + + case '«': + return 'sc-laquo'; + + case '>': + return 'sc-gt'; + + case '•': + return 'sc-bull'; + + case '|': + return 'sc-pipe'; + + default: + return 'sc-dash'; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posts-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posts-importing-action.php new file mode 100644 index 00000000..257bdfdd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posts-importing-action.php @@ -0,0 +1,624 @@ + [ + 'yoast_name' => 'title', + 'transform_method' => 'simple_import_post', + ], + 'description' => [ + 'yoast_name' => 'description', + 'transform_method' => 'simple_import_post', + ], + 'og_title' => [ + 'yoast_name' => 'open_graph_title', + 'transform_method' => 'simple_import_post', + ], + 'og_description' => [ + 'yoast_name' => 'open_graph_description', + 'transform_method' => 'simple_import_post', + ], + 'twitter_title' => [ + 'yoast_name' => 'twitter_title', + 'transform_method' => 'simple_import_post', + 'twitter_import' => true, + ], + 'twitter_description' => [ + 'yoast_name' => 'twitter_description', + 'transform_method' => 'simple_import_post', + 'twitter_import' => true, + ], + 'canonical_url' => [ + 'yoast_name' => 'canonical', + 'transform_method' => 'url_import_post', + ], + 'keyphrases' => [ + 'yoast_name' => 'primary_focus_keyword', + 'transform_method' => 'keyphrase_import', + ], + 'og_image_url' => [ + 'yoast_name' => 'open_graph_image', + 'social_image_import' => true, + 'social_setting_prefix_aioseo' => 'og_', + 'social_setting_prefix_yoast' => 'open_graph_', + 'transform_method' => 'social_image_url_import', + ], + 'twitter_image_url' => [ + 'yoast_name' => 'twitter_image', + 'social_image_import' => true, + 'social_setting_prefix_aioseo' => 'twitter_', + 'social_setting_prefix_yoast' => 'twitter_', + 'transform_method' => 'social_image_url_import', + ], + 'robots_noindex' => [ + 'yoast_name' => 'is_robots_noindex', + 'transform_method' => 'post_robots_noindex_import', + 'robots_import' => true, + ], + 'robots_nofollow' => [ + 'yoast_name' => 'is_robots_nofollow', + 'transform_method' => 'post_general_robots_import', + 'robots_import' => true, + 'robot_type' => 'nofollow', + ], + 'robots_noarchive' => [ + 'yoast_name' => 'is_robots_noarchive', + 'transform_method' => 'post_general_robots_import', + 'robots_import' => true, + 'robot_type' => 'noarchive', + ], + 'robots_nosnippet' => [ + 'yoast_name' => 'is_robots_nosnippet', + 'transform_method' => 'post_general_robots_import', + 'robots_import' => true, + 'robot_type' => 'nosnippet', + ], + 'robots_noimageindex' => [ + 'yoast_name' => 'is_robots_noimageindex', + 'transform_method' => 'post_general_robots_import', + 'robots_import' => true, + 'robot_type' => 'noimageindex', + ], + ]; + + /** + * Represents the indexables repository. + * + * @var Indexable_Repository + */ + protected $indexable_repository; + + /** + * The WordPress database instance. + * + * @var wpdb + */ + protected $wpdb; + + /** + * The image helper. + * + * @var Image_Helper + */ + protected $image; + + /** + * The indexable_to_postmeta helper. + * + * @var Indexable_To_Postmeta_Helper + */ + protected $indexable_to_postmeta; + + /** + * The indexable helper. + * + * @var Indexable_Helper + */ + protected $indexable_helper; + + /** + * The social images provider service. + * + * @var Aioseo_Social_Images_Provider_Service + */ + protected $social_images_provider; + + /** + * Class constructor. + * + * @param Indexable_Repository $indexable_repository The indexables repository. + * @param wpdb $wpdb The WordPress database instance. + * @param Import_Cursor_Helper $import_cursor The import cursor helper. + * @param Indexable_Helper $indexable_helper The indexable helper. + * @param Indexable_To_Postmeta_Helper $indexable_to_postmeta The indexable_to_postmeta helper. + * @param Options_Helper $options The options helper. + * @param Image_Helper $image The image helper. + * @param Sanitization_Helper $sanitization The sanitization helper. + * @param Aioseo_Replacevar_Service $replacevar_handler The replacevar handler. + * @param Aioseo_Robots_Provider_Service $robots_provider The robots provider service. + * @param Aioseo_Robots_Transformer_Service $robots_transformer The robots transfomer service. + * @param Aioseo_Social_Images_Provider_Service $social_images_provider The social images provider service. + */ + public function __construct( + Indexable_Repository $indexable_repository, + wpdb $wpdb, + Import_Cursor_Helper $import_cursor, + Indexable_Helper $indexable_helper, + Indexable_To_Postmeta_Helper $indexable_to_postmeta, + Options_Helper $options, + Image_Helper $image, + Sanitization_Helper $sanitization, + Aioseo_Replacevar_Service $replacevar_handler, + Aioseo_Robots_Provider_Service $robots_provider, + Aioseo_Robots_Transformer_Service $robots_transformer, + Aioseo_Social_Images_Provider_Service $social_images_provider + ) { + parent::__construct( $import_cursor, $options, $sanitization, $replacevar_handler, $robots_provider, $robots_transformer ); + + $this->indexable_repository = $indexable_repository; + $this->wpdb = $wpdb; + $this->image = $image; + $this->indexable_helper = $indexable_helper; + $this->indexable_to_postmeta = $indexable_to_postmeta; + $this->social_images_provider = $social_images_provider; + } + + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: They are already prepared. + + /** + * Returns the total number of unimported objects. + * + * @return int The total number of unimported objects. + */ + public function get_total_unindexed() { + if ( ! $this->aioseo_helper->aioseo_exists() ) { + return 0; + } + + $limit = false; + $just_detect = true; + $indexables_to_create = $this->wpdb->get_col( $this->query( $limit, $just_detect ) ); + + $number_of_indexables_to_create = \count( $indexables_to_create ); + $completed = $number_of_indexables_to_create === 0; + $this->set_completed( $completed ); + + return $number_of_indexables_to_create; + } + + /** + * Returns the limited number of unimported objects. + * + * @param int $limit The maximum number of unimported objects to be returned. + * + * @return int|false The limited number of unindexed posts. False if the query fails. + */ + public function get_limited_unindexed_count( $limit ) { + if ( ! $this->aioseo_helper->aioseo_exists() ) { + return 0; + } + + $just_detect = true; + $indexables_to_create = $this->wpdb->get_col( $this->query( $limit, $just_detect ) ); + + $number_of_indexables_to_create = \count( $indexables_to_create ); + $completed = $number_of_indexables_to_create === 0; + $this->set_completed( $completed ); + + return $number_of_indexables_to_create; + } + + /** + * Imports AIOSEO meta data and creates the respective Yoast indexables and postmeta. + * + * @return Indexable[]|false An array of created indexables or false if aioseo data was not found. + */ + public function index() { + if ( ! $this->aioseo_helper->aioseo_exists() ) { + return false; + } + + $limit = $this->get_limit(); + $aioseo_indexables = $this->wpdb->get_results( $this->query( $limit ), \ARRAY_A ); + $created_indexables = []; + + $completed = \count( $aioseo_indexables ) === 0; + $this->set_completed( $completed ); + + // Let's build the list of fields to check their defaults, to identify whether we're gonna import AIOSEO data in the indexable or not. + $check_defaults_fields = []; + foreach ( $this->aioseo_to_yoast_map as $yoast_mapping ) { + // We don't want to check all the imported fields. + if ( ! \in_array( $yoast_mapping['yoast_name'], [ 'open_graph_image', 'twitter_image' ], true ) ) { + $check_defaults_fields[] = $yoast_mapping['yoast_name']; + } + } + + $last_indexed_aioseo_id = 0; + foreach ( $aioseo_indexables as $aioseo_indexable ) { + $last_indexed_aioseo_id = $aioseo_indexable['id']; + + $indexable = $this->indexable_repository->find_by_id_and_type( $aioseo_indexable['post_id'], 'post' ); + + // Let's ensure that the current post id represents something that we want to index (eg. *not* shop_order). + if ( ! \is_a( $indexable, 'Yoast\WP\SEO\Models\Indexable' ) ) { + continue; + } + + if ( $this->indexable_helper->check_if_default_indexable( $indexable, $check_defaults_fields ) ) { + $indexable = $this->map( $indexable, $aioseo_indexable ); + $this->indexable_helper->save_indexable( $indexable ); + + // To ensure that indexables can be rebuild after a reset, we have to store the data in the postmeta table too. + $this->indexable_to_postmeta->map_to_postmeta( $indexable ); + } + + $last_indexed_aioseo_id = $aioseo_indexable['id']; + + $created_indexables[] = $indexable; + } + + $cursor_id = $this->get_cursor_id(); + $this->import_cursor->set_cursor( $cursor_id, $last_indexed_aioseo_id ); + + return $created_indexables; + } + + // phpcs:enable WordPress.DB.PreparedSQL.NotPrepared + + /** + * Maps AIOSEO meta data to Yoast meta data. + * + * @param Indexable $indexable The Yoast indexable. + * @param array $aioseo_indexable The AIOSEO indexable. + * + * @return Indexable The created indexables. + */ + public function map( $indexable, $aioseo_indexable ) { + foreach ( $this->aioseo_to_yoast_map as $aioseo_key => $yoast_mapping ) { + // For robots import. + if ( isset( $yoast_mapping['robots_import'] ) && $yoast_mapping['robots_import'] ) { + $yoast_mapping['subtype'] = $indexable->object_sub_type; + $indexable->{$yoast_mapping['yoast_name']} = $this->transform_import_data( $yoast_mapping['transform_method'], $aioseo_indexable, $aioseo_key, $yoast_mapping, $indexable ); + + continue; + } + + // For social images, like open graph and twitter image. + if ( isset( $yoast_mapping['social_image_import'] ) && $yoast_mapping['social_image_import'] ) { + $image_url = $this->transform_import_data( $yoast_mapping['transform_method'], $aioseo_indexable, $aioseo_key, $yoast_mapping, $indexable ); + + // Update the indexable's social image only where there's actually a url to import, so as not to lose the social images that we came up with when we originally built the indexable. + if ( ! empty( $image_url ) ) { + $indexable->{$yoast_mapping['yoast_name']} = $image_url; + + $image_source_key = $yoast_mapping['social_setting_prefix_yoast'] . 'image_source'; + $indexable->$image_source_key = 'imported'; + + $image_id_key = $yoast_mapping['social_setting_prefix_yoast'] . 'image_id'; + $indexable->$image_id_key = $this->image->get_attachment_by_url( $image_url ); + + if ( $yoast_mapping['yoast_name'] === 'open_graph_image' ) { + $indexable->open_graph_image_meta = null; + } + } + continue; + } + + // For twitter import, take the respective open graph data if the appropriate setting is enabled. + if ( isset( $yoast_mapping['twitter_import'] ) && $yoast_mapping['twitter_import'] && $aioseo_indexable['twitter_use_og'] ) { + $aioseo_indexable['twitter_title'] = $aioseo_indexable['og_title']; + $aioseo_indexable['twitter_description'] = $aioseo_indexable['og_description']; + } + + if ( ! empty( $aioseo_indexable[ $aioseo_key ] ) ) { + $indexable->{$yoast_mapping['yoast_name']} = $this->transform_import_data( $yoast_mapping['transform_method'], $aioseo_indexable, $aioseo_key, $yoast_mapping, $indexable ); + } + } + + return $indexable; + } + + /** + * Transforms the data to be imported. + * + * @param string $transform_method The method that is going to be used for transforming the data. + * @param array $aioseo_indexable The data of the AIOSEO indexable data that is being imported. + * @param string $aioseo_key The name of the specific set of data that is going to be transformed. + * @param array $yoast_mapping Extra details for the import of the specific data that is going to be transformed. + * @param Indexable $indexable The Yoast indexable that we are going to import the transformed data into. + * + * @return string|bool|null The transformed data to be imported. + */ + protected function transform_import_data( $transform_method, $aioseo_indexable, $aioseo_key, $yoast_mapping, $indexable ) { + return \call_user_func( [ $this, $transform_method ], $aioseo_indexable, $aioseo_key, $yoast_mapping, $indexable ); + } + + /** + * Returns the number of objects that will be imported in a single importing pass. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_aioseo_post_indexation_limit' - Allow filtering the number of posts indexed during each indexing pass. + * + * @param int $max_posts The maximum number of posts indexed. + */ + $limit = \apply_filters( 'wpseo_aioseo_post_indexation_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } + + /** + * Populates the needed data array based on which columns we use from the AIOSEO indexable table. + * + * @return array The needed data array that contains all the needed columns. + */ + public function get_needed_data() { + $needed_data = \array_keys( $this->aioseo_to_yoast_map ); + \array_push( $needed_data, 'id', 'post_id', 'robots_default', 'og_image_custom_url', 'og_image_type', 'twitter_image_custom_url', 'twitter_image_type', 'twitter_use_og' ); + + return $needed_data; + } + + /** + * Populates the needed robot data array to be used in validating against its structure. + * + * @return array The needed data array that contains all the needed columns. + */ + public function get_needed_robot_data() { + $needed_robot_data = []; + + foreach ( $this->aioseo_to_yoast_map as $yoast_mapping ) { + if ( isset( $yoast_mapping['robot_type'] ) ) { + $needed_robot_data[] = $yoast_mapping['robot_type']; + } + } + + return $needed_robot_data; + } + + /** + * Creates a query for gathering AiOSEO data from the database. + * + * @param int $limit The maximum number of unimported objects to be returned. + * @param bool $just_detect Whether we want to just detect if there are unimported objects. If false, we want to actually import them too. + * + * @return string The query to use for importing or counting the number of items to import. + */ + public function query( $limit = false, $just_detect = false ) { + $table = $this->aioseo_helper->get_table(); + + $select_statement = 'id'; + if ( ! $just_detect ) { + // If we want to import too, we need the actual needed data from AIOSEO indexables. + $needed_data = $this->get_needed_data(); + + $select_statement = \implode( ', ', $needed_data ); + } + + $cursor_id = $this->get_cursor_id(); + $cursor = $this->import_cursor->get_cursor( $cursor_id ); + + /** + * Filter 'wpseo_aioseo_post_cursor' - Allow filtering the value of the aioseo post import cursor. + * + * @param int $import_cursor The value of the aioseo post import cursor. + */ + $cursor = \apply_filters( 'wpseo_aioseo_post_import_cursor', $cursor ); + + $replacements = [ $cursor ]; + + $limit_statement = ''; + if ( ! empty( $limit ) ) { + $replacements[] = $limit; + $limit_statement = ' LIMIT %d'; + } + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + return $this->wpdb->prepare( + "SELECT {$select_statement} FROM {$table} WHERE id > %d ORDER BY id{$limit_statement}", + $replacements + ); + // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared + } + + /** + * Minimally transforms data to be imported. + * + * @param array $aioseo_data All of the AIOSEO data to be imported. + * @param string $aioseo_key The AIOSEO key that contains the setting we're working with. + * + * @return string The transformed meta data. + */ + public function simple_import_post( $aioseo_data, $aioseo_key ) { + return $this->simple_import( $aioseo_data[ $aioseo_key ] ); + } + + /** + * Transforms URL to be imported. + * + * @param array $aioseo_data All of the AIOSEO data to be imported. + * @param string $aioseo_key The AIOSEO key that contains the setting we're working with. + * + * @return string The transformed URL. + */ + public function url_import_post( $aioseo_data, $aioseo_key ) { + return $this->url_import( $aioseo_data[ $aioseo_key ] ); + } + + /** + * Plucks the keyphrase to be imported from the AIOSEO array of keyphrase meta data. + * + * @param array $aioseo_data All of the AIOSEO data to be imported. + * @param string $aioseo_key The AIOSEO key that contains the setting we're working with, aka keyphrases. + * + * @return string|null The plucked keyphrase. + */ + public function keyphrase_import( $aioseo_data, $aioseo_key ) { + $meta_data = \json_decode( $aioseo_data[ $aioseo_key ], true ); + if ( ! isset( $meta_data['focus']['keyphrase'] ) ) { + return null; + } + + return $this->sanitization->sanitize_text_field( $meta_data['focus']['keyphrase'] ); + } + + /** + * Imports the post's noindex setting. + * + * @param bool $aioseo_robots_settings AIOSEO's set of robot settings for the post. + * + * @return bool|null The value of Yoast's noindex setting for the post. + */ + public function post_robots_noindex_import( $aioseo_robots_settings ) { + // If robot settings defer to default settings, we have null in the is_robots_noindex field. + if ( $aioseo_robots_settings['robots_default'] ) { + return null; + } + + return $aioseo_robots_settings['robots_noindex']; + } + + /** + * Imports the post's robots setting. + * + * @param bool $aioseo_robots_settings AIOSEO's set of robot settings for the post. + * @param string $aioseo_key The AIOSEO key that contains the robot setting we're working with. + * @param array $mapping The mapping of the setting we're working with. + * + * @return bool|null The value of Yoast's noindex setting for the post. + */ + public function post_general_robots_import( $aioseo_robots_settings, $aioseo_key, $mapping ) { + $mapping = $this->enhance_mapping( $mapping ); + + if ( $aioseo_robots_settings['robots_default'] ) { + // Let's first get the subtype's setting value and then transform it taking into consideration whether it defers to global defaults. + $subtype_setting = $this->robots_provider->get_subtype_robot_setting( $mapping ); + return $this->robots_transformer->transform_robot_setting( $mapping['robot_type'], $subtype_setting, $mapping ); + } + + return $aioseo_robots_settings[ $aioseo_key ]; + } + + /** + * Enhances the mapping of the setting we're working with, with type and the option name, so that we can retrieve the settings for the object we're working with. + * + * @param array $mapping The mapping of the setting we're working with. + * + * @return array The enhanced mapping. + */ + public function enhance_mapping( $mapping = [] ) { + $mapping['type'] = 'postTypes'; + $mapping['option_name'] = 'aioseo_options_dynamic'; + + return $mapping; + } + + /** + * Imports the og and twitter image url. + * + * @param bool $aioseo_social_image_settings AIOSEO's set of social image settings for the post. + * @param string $aioseo_key The AIOSEO key that contains the robot setting we're working with. + * @param array $mapping The mapping of the setting we're working with. + * @param Indexable $indexable The Yoast indexable we're importing into. + * + * @return bool|null The url of the social image we're importing, null if there's none. + */ + public function social_image_url_import( $aioseo_social_image_settings, $aioseo_key, $mapping, $indexable ) { + if ( $mapping['social_setting_prefix_aioseo'] === 'twitter_' && $aioseo_social_image_settings['twitter_use_og'] ) { + $mapping['social_setting_prefix_aioseo'] = 'og_'; + } + + $social_setting = \rtrim( $mapping['social_setting_prefix_aioseo'], '_' ); + + $image_type = $aioseo_social_image_settings[ $mapping['social_setting_prefix_aioseo'] . 'image_type' ]; + + if ( $image_type === 'default' ) { + $image_type = $this->social_images_provider->get_default_social_image_source( $social_setting ); + } + + switch ( $image_type ) { + case 'attach': + $image_url = $this->social_images_provider->get_first_attached_image( $indexable->object_id ); + break; + case 'auto': + if ( $this->social_images_provider->get_featured_image( $indexable->object_id ) ) { + // If there's a featured image, lets not import it, as our indexable calculation has already set that as active social image. That way we achieve dynamicality. + return null; + } + $image_url = $this->social_images_provider->get_auto_image( $indexable->object_id ); + break; + case 'content': + $image_url = $this->social_images_provider->get_first_image_in_content( $indexable->object_id ); + break; + case 'custom_image': + $image_url = $aioseo_social_image_settings[ $mapping['social_setting_prefix_aioseo'] . 'image_custom_url' ]; + break; + case 'featured': + return null; // Our auto-calculation when the indexable was built/updated has taken care of it, so it's not needed to transfer any data now. + case 'author': + return null; + case 'custom': + return null; + case 'default': + $image_url = $this->social_images_provider->get_default_custom_social_image( $social_setting ); + break; + default: + $image_url = $aioseo_social_image_settings[ $mapping['social_setting_prefix_aioseo'] . 'image_url' ]; + break; + } + + if ( empty( $image_url ) ) { + $image_url = $this->social_images_provider->get_default_custom_social_image( $social_setting ); + } + + if ( empty( $image_url ) ) { + return null; + } + + return $this->sanitization->sanitize_url( $image_url, null ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posttype-defaults-settings-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posttype-defaults-settings-importing-action.php new file mode 100644 index 00000000..25df1e29 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-posttype-defaults-settings-importing-action.php @@ -0,0 +1,99 @@ + true ], 'objects' ); + + foreach ( $post_type_objects as $pt ) { + // Use all the custom post types that are public. + $this->aioseo_options_to_yoast_map[ '/' . $pt->name . '/title' ] = [ + 'yoast_name' => 'title-' . $pt->name, + 'transform_method' => 'simple_import', + ]; + $this->aioseo_options_to_yoast_map[ '/' . $pt->name . '/metaDescription' ] = [ + 'yoast_name' => 'metadesc-' . $pt->name, + 'transform_method' => 'simple_import', + ]; + $this->aioseo_options_to_yoast_map[ '/' . $pt->name . '/advanced/showMetaBox' ] = [ + 'yoast_name' => 'display-metabox-pt-' . $pt->name, + 'transform_method' => 'simple_boolean_import', + ]; + $this->aioseo_options_to_yoast_map[ '/' . $pt->name . '/advanced/robotsMeta/noindex' ] = [ + 'yoast_name' => 'noindex-' . $pt->name, + 'transform_method' => 'import_noindex', + 'type' => 'postTypes', + 'subtype' => $pt->name, + 'option_name' => 'aioseo_options_dynamic', + ]; + + if ( $pt->name === 'attachment' ) { + $this->aioseo_options_to_yoast_map['/attachment/redirectAttachmentUrls'] = [ + 'yoast_name' => 'disable-attachment', + 'transform_method' => 'import_redirect_attachment', + ]; + } + } + } + + /** + * Transforms the redirect_attachment setting. + * + * @param string $redirect_attachment The redirect_attachment setting. + * + * @return bool The transformed redirect_attachment setting. + */ + public function import_redirect_attachment( $redirect_attachment ) { + switch ( $redirect_attachment ) { + case 'disabled': + return false; + + case 'attachment': + case 'attachment_parent': + default: + return true; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-taxonomy-settings-importing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-taxonomy-settings-importing-action.php new file mode 100644 index 00000000..2f88b54e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-taxonomy-settings-importing-action.php @@ -0,0 +1,108 @@ + '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_archive_post_type_format' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_archive_post_type_name' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_author_display_name' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_author_first_name' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_blog_page_title' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_label' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_link' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_search_result_format' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_search_string' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_separator' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#breadcrumb_taxonomy_title' => '', // Empty string, as AIOSEO shows nothing for that tag. + '#taxonomy_title' => '%%term_title%%', + ]; + + /** + * Builds the mapping that ties AOISEO option keys with Yoast ones and their data transformation method. + * + * @return void + */ + protected function build_mapping() { + $taxonomy_objects = \get_taxonomies( [ 'public' => true ], 'object' ); + + foreach ( $taxonomy_objects as $tax ) { + // Use all the public taxonomies. + $this->aioseo_options_to_yoast_map[ '/' . $tax->name . '/title' ] = [ + 'yoast_name' => 'title-tax-' . $tax->name, + 'transform_method' => 'simple_import', + ]; + $this->aioseo_options_to_yoast_map[ '/' . $tax->name . '/metaDescription' ] = [ + 'yoast_name' => 'metadesc-tax-' . $tax->name, + 'transform_method' => 'simple_import', + ]; + $this->aioseo_options_to_yoast_map[ '/' . $tax->name . '/advanced/robotsMeta/noindex' ] = [ + 'yoast_name' => 'noindex-tax-' . $tax->name, + 'transform_method' => 'import_noindex', + 'type' => 'taxonomies', + 'subtype' => $tax->name, + 'option_name' => 'aioseo_options_dynamic', + ]; + } + } + + /** + * Returns a setting map of the robot setting for post category taxonomies. + * + * @return array The setting map of the robot setting for post category taxonomies. + */ + public function pluck_robot_setting_from_mapping() { + $this->build_mapping(); + + foreach ( $this->aioseo_options_to_yoast_map as $setting ) { + // Return the first archive setting map. + if ( $setting['transform_method'] === 'import_noindex' && isset( $setting['subtype'] ) && $setting['subtype'] === 'category' ) { + return $setting; + } + } + + return []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-validate-data-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-validate-data-action.php new file mode 100644 index 00000000..17817f1d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/aioseo/aioseo-validate-data-action.php @@ -0,0 +1,255 @@ +wpdb = $wpdb; + $this->options = $options; + $this->post_importing_action = $post_importing_action; + $this->settings_importing_actions = [ + $custom_archive_action, + $default_archive_action, + $general_settings_action, + $posttype_defaults_settings_action, + $taxonomy_settings_action, + ]; + } + + /** + * Just checks if the action has been completed in the past. + * + * @return int 1 if it hasn't been completed in the past, 0 if it has. + */ + public function get_total_unindexed() { + return ( ! $this->get_completed() ) ? 1 : 0; + } + + /** + * Just checks if the action has been completed in the past. + * + * @param int $limit The maximum number of unimported objects to be returned. Not used, exists to comply with the interface. + * + * @return int 1 if it hasn't been completed in the past, 0 if it has. + */ + public function get_limited_unindexed_count( $limit ) { + return ( ! $this->get_completed() ) ? 1 : 0; + } + + /** + * Validates AIOSEO data. + * + * @return array An array of validated data or false if aioseo data did not pass validation. + * + * @throws Aioseo_Validation_Exception If the validation fails. + */ + public function index() { + if ( $this->get_completed() ) { + return []; + } + + $validated_aioseo_table = $this->validate_aioseo_table(); + $validated_aioseo_settings = $this->validate_aioseo_settings(); + $validated_robot_settings = $this->validate_robot_settings(); + + if ( $validated_aioseo_table === false || $validated_aioseo_settings === false || $validated_robot_settings === false ) { + throw new Aioseo_Validation_Exception(); + } + + $this->set_completed( true ); + + return [ + 'validated_aioseo_table' => $validated_aioseo_table, + 'validated_aioseo_settings' => $validated_aioseo_settings, + 'validated_robot_settings' => $validated_robot_settings, + ]; + } + + /** + * Validates the AIOSEO indexable table. + * + * @return bool Whether the AIOSEO table exists and has the structure we expect. + */ + public function validate_aioseo_table() { + if ( ! $this->aioseo_helper->aioseo_exists() ) { + return false; + } + + $table = $this->aioseo_helper->get_table(); + $needed_data = $this->post_importing_action->get_needed_data(); + + $aioseo_columns = $this->wpdb->get_col( + "SHOW COLUMNS FROM {$table}", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + 0 + ); + + return $needed_data === \array_intersect( $needed_data, $aioseo_columns ); + } + + /** + * Validates the AIOSEO settings from the options table. + * + * @return bool Whether the AIOSEO settings from the options table exist and have the structure we expect. + */ + public function validate_aioseo_settings() { + foreach ( $this->settings_importing_actions as $settings_import_action ) { + $aioseo_settings = \json_decode( \get_option( $settings_import_action->get_source_option_name(), '' ), true ); + + if ( ! $settings_import_action->isset_settings_tab( $aioseo_settings ) ) { + return false; + } + } + + return true; + } + + /** + * Validates the AIOSEO robots settings from the options table. + * + * @return bool Whether the AIOSEO robots settings from the options table exist and have the structure we expect. + */ + public function validate_robot_settings() { + if ( $this->validate_post_robot_settings() && $this->validate_default_robot_settings() ) { + return true; + } + + return false; + } + + /** + * Validates the post AIOSEO robots settings from the options table. + * + * @return bool Whether the post AIOSEO robots settings from the options table exist and have the structure we expect. + */ + public function validate_post_robot_settings() { + $post_robot_mapping = $this->post_importing_action->enhance_mapping(); + // We're gonna validate against posttype robot settings only for posts, assuming the robot settings stay the same for other post types. + $post_robot_mapping['subtype'] = 'post'; + + // Let's get both the aioseo_options and the aioseo_options_dynamic options. + $aioseo_global_settings = $this->aioseo_helper->get_global_option(); + $aioseo_posts_settings = \json_decode( \get_option( $post_robot_mapping['option_name'], '' ), true ); + + $needed_robots_data = $this->post_importing_action->get_needed_robot_data(); + \array_push( $needed_robots_data, 'default', 'noindex' ); + + foreach ( $needed_robots_data as $robot_setting ) { + // Validate against global settings. + if ( ! isset( $aioseo_global_settings['searchAppearance']['advanced']['globalRobotsMeta'][ $robot_setting ] ) ) { + return false; + } + + // Validate against posttype settings. + if ( ! isset( $aioseo_posts_settings['searchAppearance'][ $post_robot_mapping['type'] ][ $post_robot_mapping['subtype'] ]['advanced']['robotsMeta'][ $robot_setting ] ) ) { + return false; + } + } + + return true; + } + + /** + * Validates the default AIOSEO robots settings for search appearance settings from the options table. + * + * @return bool Whether the AIOSEO robots settings for search appearance settings from the options table exist and have the structure we expect. + */ + public function validate_default_robot_settings() { + + foreach ( $this->settings_importing_actions as $settings_import_action ) { + $robot_setting_map = $settings_import_action->pluck_robot_setting_from_mapping(); + + // Some actions return empty robot settings, let's not validate against those. + if ( ! empty( $robot_setting_map ) ) { + $aioseo_settings = \json_decode( \get_option( $robot_setting_map['option_name'], '' ), true ); + + if ( ! isset( $aioseo_settings['searchAppearance'][ $robot_setting_map['type'] ][ $robot_setting_map['subtype'] ]['advanced']['robotsMeta']['default'] ) ) { + return false; + } + } + } + + return true; + } + + /** + * Used nowhere. Exists to comply with the interface. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_aioseo_cleanup_limit' - Allow filtering the number of validations during each action pass. + * + * @param int $limit The maximum number of validations. + */ + $limit = \apply_filters( 'wpseo_aioseo_validation_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/deactivate-conflicting-plugins-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/deactivate-conflicting-plugins-action.php new file mode 100644 index 00000000..31c598d3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/deactivate-conflicting-plugins-action.php @@ -0,0 +1,145 @@ +conflicting_plugins = $conflicting_plugins_service; + $this->detected_plugins = []; + } + + /** + * Get the total number of conflicting plugins. + * + * @return int + */ + public function get_total_unindexed() { + return \count( $this->get_detected_plugins() ); + } + + /** + * Returns whether the updated importer framework is enabled. + * + * @return bool True if the updated importer framework is enabled. + */ + public function is_enabled() { + $updated_importer_framework_conditional = \YoastSEO()->classes->get( Updated_Importer_Framework_Conditional::class ); + + return $updated_importer_framework_conditional->is_met(); + } + + /** + * Deactivate conflicting plugins. + * + * @return array + */ + public function index() { + $detected_plugins = $this->get_detected_plugins(); + $this->conflicting_plugins->deactivate_conflicting_plugins( $detected_plugins ); + + // We need to conform to the interface, so we report that no indexables were created. + return []; + } + + /** + * {@inheritDoc} + */ + public function get_limit() { + return \count( Conflicting_Plugins::all_plugins() ); + } + + /** + * Returns the total number of unindexed objects up to a limit. + * + * @param int $limit The maximum. + * + * @return int The total number of unindexed objects. + */ + public function get_limited_unindexed_count( $limit ) { + $count = \count( $this->get_detected_plugins() ); + return ( $count <= $limit ) ? $count : $limit; + } + + /** + * Returns all detected plugins. + * + * @return array The detected plugins. + */ + protected function get_detected_plugins() { + // The active plugins won't change much. We can reuse the result for the duration of the request. + if ( \count( $this->detected_plugins ) < 1 ) { + $this->detected_plugins = $this->conflicting_plugins->detect_conflicting_plugins(); + } + return $this->detected_plugins; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/importing/importing-action-interface.php b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/importing-action-interface.php new file mode 100644 index 00000000..993bd065 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/importing/importing-action-interface.php @@ -0,0 +1,32 @@ +meta_surface = $meta_surface; + } + + /** + * Retrieves the head for a url. + * + * @param string $url The url to get the head for. + * + * @return object Object with head and status properties. + */ + public function for_url( $url ) { + if ( $url === \trailingslashit( \get_home_url() ) ) { + return $this->with_404_fallback( $this->with_cache( 'home_page' ) ); + } + return $this->with_404_fallback( $this->with_cache( 'url', $url ) ); + } + + /** + * Retrieves the head for a post. + * + * @param int $id The id. + * + * @return object Object with head and status properties. + */ + public function for_post( $id ) { + return $this->with_404_fallback( $this->with_cache( 'post', $id ) ); + } + + /** + * Retrieves the head for a term. + * + * @param int $id The id. + * + * @return object Object with head and status properties. + */ + public function for_term( $id ) { + return $this->with_404_fallback( $this->with_cache( 'term', $id ) ); + } + + /** + * Retrieves the head for an author. + * + * @param int $id The id. + * + * @return object Object with head and status properties. + */ + public function for_author( $id ) { + return $this->with_404_fallback( $this->with_cache( 'author', $id ) ); + } + + /** + * Retrieves the head for a post type archive. + * + * @param int $type The id. + * + * @return object Object with head and status properties. + */ + public function for_post_type_archive( $type ) { + return $this->with_404_fallback( $this->with_cache( 'post_type_archive', $type ) ); + } + + /** + * Retrieves the head for the posts page. + * + * @return object Object with head and status properties. + */ + public function for_posts_page() { + return $this->with_404_fallback( $this->with_cache( 'posts_page' ) ); + } + + /** + * Retrieves the head for the 404 page. Always sets the status to 404. + * + * @return object Object with head and status properties. + */ + public function for_404() { + $meta = $this->with_cache( '404' ); + + if ( ! $meta ) { + return (object) [ + 'html' => '', + 'json' => [], + 'status' => 404, + ]; + } + + $head = $meta->get_head(); + + return (object) [ + 'html' => $head->html, + 'json' => $head->json, + 'status' => 404, + ]; + } + + /** + * Retrieves the head for a successful page load. + * + * @param object $head The calculated Yoast head. + * + * @return object The presentations and status code 200. + */ + protected function for_200( $head ) { + return (object) [ + 'html' => $head->html, + 'json' => $head->json, + 'status' => 200, + ]; + } + + /** + * Returns the head with 404 fallback + * + * @param Meta|false $meta The meta object. + * + * @return object The head response. + */ + protected function with_404_fallback( $meta ) { + if ( $meta === false ) { + return $this->for_404(); + } + else { + return $this->for_200( $meta->get_head() ); + } + } + + /** + * Retrieves a value from the meta surface cached. + * + * @param string $type The type of value to retrieve. + * @param string $argument Optional. The argument for the value. + * + * @return Meta The meta object. + */ + protected function with_cache( $type, $argument = '' ) { + if ( ! isset( $this->cache[ $type ][ $argument ] ) ) { + $this->cache[ $type ][ $argument ] = \call_user_func( [ $this->meta_surface, "for_$type" ], $argument ); + } + + return $this->cache[ $type ][ $argument ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-indexing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-indexing-action.php new file mode 100644 index 00000000..d43bd36c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-indexing-action.php @@ -0,0 +1,103 @@ +get_select_query( $limit ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Function get_count_query returns a prepared query. + $unindexed_object_ids = $this->wpdb->get_col( $query ); + $count = (int) \count( $unindexed_object_ids ); + + \set_transient( static::UNINDEXED_LIMITED_COUNT_TRANSIENT, $count, ( \MINUTE_IN_SECONDS * 15 ) ); + + return $count; + } + + /** + * Returns the total number of unindexed posts. + * + * @return int|false The total number of unindexed posts. False if the query fails. + */ + public function get_total_unindexed() { + $transient = \get_transient( static::UNINDEXED_COUNT_TRANSIENT ); + if ( $transient !== false ) { + return (int) $transient; + } + + // Store transient before doing the query so multiple requests won't make multiple queries. + // Only store this for 15 minutes to ensure that if the query doesn't complete a wrong count is not kept too long. + \set_transient( static::UNINDEXED_COUNT_TRANSIENT, 0, ( \MINUTE_IN_SECONDS * 15 ) ); + + $query = $this->get_count_query(); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Function get_count_query returns a prepared query. + $count = $this->wpdb->get_var( $query ); + + if ( \is_null( $count ) ) { + return false; + } + + \set_transient( static::UNINDEXED_COUNT_TRANSIENT, $count, \DAY_IN_SECONDS ); + + /** + * Action: 'wpseo_indexables_unindexed_calculated' - sets an option to timestamp when there are no unindexed indexables left. + * + * @internal + */ + \do_action( 'wpseo_indexables_unindexed_calculated', static::UNINDEXED_COUNT_TRANSIENT, $count ); + + return (int) $count; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-link-indexing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-link-indexing-action.php new file mode 100644 index 00000000..0ae29336 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/abstract-link-indexing-action.php @@ -0,0 +1,123 @@ +link_builder = $link_builder; + $this->indexable_helper = $indexable_helper; + $this->repository = $repository; + $this->wpdb = $wpdb; + } + + /** + * Builds links for indexables which haven't had their links indexed yet. + * + * @return SEO_Links[] The created SEO links. + */ + public function index() { + $objects = $this->get_objects(); + + $indexables = []; + foreach ( $objects as $object ) { + $indexable = $this->repository->find_by_id_and_type( $object->id, $object->type ); + if ( $indexable ) { + $this->link_builder->build( $indexable, $object->content ); + $this->indexable_helper->save_indexable( $indexable ); + + $indexables[] = $indexable; + } + } + + if ( \count( $indexables ) > 0 ) { + \delete_transient( static::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( static::UNINDEXED_LIMITED_COUNT_TRANSIENT ); + } + + return $indexables; + } + + /** + * In the case of term-links and post-links we want to use the total unindexed count, because using + * the limited unindexed count actually leads to worse performance. + * + * @param int|bool $limit Unused. + * + * @return int The total number of unindexed links. + */ + public function get_limited_unindexed_count( $limit = false ) { + return $this->get_total_unindexed(); + } + + /** + * Returns the number of texts that will be indexed in a single link indexing pass. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_link_indexing_limit' - Allow filtering the number of texts indexed during each link indexing pass. + * + * @param int $limit The maximum number of texts indexed. + */ + return \apply_filters( 'wpseo_link_indexing_limit', 5 ); + } + + /** + * Returns objects to be indexed. + * + * @return array Objects to be indexed, should be an array of objects with object_id, object_type and content. + */ + abstract protected function get_objects(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-general-indexation-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-general-indexation-action.php new file mode 100644 index 00000000..106e2e2e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-general-indexation-action.php @@ -0,0 +1,138 @@ +indexable_repository = $indexable_repository; + } + + /** + * Returns the total number of unindexed objects. + * + * @return int The total number of unindexed objects. + */ + public function get_total_unindexed() { + $transient = \get_transient( static::UNINDEXED_COUNT_TRANSIENT ); + if ( $transient !== false ) { + return (int) $transient; + } + + $indexables_to_create = $this->query(); + + $result = \count( $indexables_to_create ); + + \set_transient( static::UNINDEXED_COUNT_TRANSIENT, $result, \DAY_IN_SECONDS ); + + /** + * Action: 'wpseo_indexables_unindexed_calculated' - sets an option to timestamp when there are no unindexed indexables left. + * + * @internal + */ + \do_action( 'wpseo_indexables_unindexed_calculated', static::UNINDEXED_COUNT_TRANSIENT, $result ); + + return $result; + } + + /** + * Returns a limited number of unindexed posts. + * + * @param int $limit Limit the maximum number of unindexed posts that are counted. + * + * @return int|false The limited number of unindexed posts. False if the query fails. + */ + public function get_limited_unindexed_count( $limit ) { + return $this->get_total_unindexed(); + } + + /** + * Creates indexables for unindexed system pages, the date archive, and the homepage. + * + * @return Indexable[] The created indexables. + */ + public function index() { + $indexables = []; + $indexables_to_create = $this->query(); + + if ( isset( $indexables_to_create['404'] ) ) { + $indexables[] = $this->indexable_repository->find_for_system_page( '404' ); + } + + if ( isset( $indexables_to_create['search'] ) ) { + $indexables[] = $this->indexable_repository->find_for_system_page( 'search-result' ); + } + + if ( isset( $indexables_to_create['date_archive'] ) ) { + $indexables[] = $this->indexable_repository->find_for_date_archive(); + } + if ( isset( $indexables_to_create['home_page'] ) ) { + $indexables[] = $this->indexable_repository->find_for_home_page(); + } + + \set_transient( static::UNINDEXED_COUNT_TRANSIENT, 0, \DAY_IN_SECONDS ); + + return $indexables; + } + + /** + * Returns the number of objects that will be indexed in a single indexing pass. + * + * @return int The limit. + */ + public function get_limit() { + // This matches the maximum number of indexables created by this action. + return 4; + } + + /** + * Check which indexables already exist and return the values of the ones to create. + * + * @return array The indexable types to create. + */ + private function query() { + $indexables_to_create = []; + if ( ! $this->indexable_repository->find_for_system_page( '404', false ) ) { + $indexables_to_create['404'] = true; + } + + if ( ! $this->indexable_repository->find_for_system_page( 'search-result', false ) ) { + $indexables_to_create['search'] = true; + } + + if ( ! $this->indexable_repository->find_for_date_archive( false ) ) { + $indexables_to_create['date_archive'] = true; + } + + $need_home_page_indexable = ( (int) \get_option( 'page_on_front' ) === 0 && \get_option( 'show_on_front' ) === 'posts' ); + + if ( $need_home_page_indexable && ! $this->indexable_repository->find_for_home_page( false ) ) { + $indexables_to_create['home_page'] = true; + } + + return $indexables_to_create; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-indexing-complete-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-indexing-complete-action.php new file mode 100644 index 00000000..689efcb2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-indexing-complete-action.php @@ -0,0 +1,36 @@ +indexable_helper = $indexable_helper; + } + + /** + * Wraps up the indexing process. + * + * @return void + */ + public function complete() { + $this->indexable_helper->finish_indexing(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-indexation-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-indexation-action.php new file mode 100644 index 00000000..d549a2b9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-indexation-action.php @@ -0,0 +1,207 @@ +post_type_helper = $post_type_helper; + $this->repository = $repository; + $this->wpdb = $wpdb; + $this->version = $builder_versions->get_latest_version_for_type( 'post' ); + $this->post_helper = $post_helper; + } + + /** + * Creates indexables for unindexed posts. + * + * @return Indexable[] The created indexables. + */ + public function index() { + $query = $this->get_select_query( $this->get_limit() ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Function get_select_query returns a prepared query. + $post_ids = $this->wpdb->get_col( $query ); + + $indexables = []; + foreach ( $post_ids as $post_id ) { + $indexables[] = $this->repository->find_by_id_and_type( (int) $post_id, 'post' ); + } + + if ( \count( $indexables ) > 0 ) { + \delete_transient( static::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( static::UNINDEXED_LIMITED_COUNT_TRANSIENT ); + } + + return $indexables; + } + + /** + * Returns the number of posts that will be indexed in a single indexing pass. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_post_indexation_limit' - Allow filtering the amount of posts indexed during each indexing pass. + * + * @param int $limit The maximum number of posts indexed. + */ + $limit = \apply_filters( 'wpseo_post_indexation_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } + + /** + * Builds a query for counting the number of unindexed posts. + * + * @return string The prepared query string. + */ + protected function get_count_query() { + $indexable_table = Model::get_table_name( 'Indexable' ); + + $post_types = $this->post_type_helper->get_indexable_post_types(); + $excluded_post_statuses = $this->post_helper->get_excluded_post_statuses(); + $replacements = \array_merge( + $post_types, + $excluded_post_statuses + ); + + $replacements[] = $this->version; + + // Warning: If this query is changed, makes sure to update the query in get_select_query as well. + // @phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber + return $this->wpdb->prepare( + " + SELECT COUNT(P.ID) + FROM {$this->wpdb->posts} AS P + WHERE P.post_type IN (" . \implode( ', ', \array_fill( 0, \count( $post_types ), '%s' ) ) . ') + AND P.post_status NOT IN (' . \implode( ', ', \array_fill( 0, \count( $excluded_post_statuses ), '%s' ) ) . ") + AND P.ID not in ( + SELECT I.object_id from $indexable_table as I + WHERE I.object_type = 'post' + AND I.version = %d )", + $replacements + ); + } + + /** + * Builds a query for selecting the ID's of unindexed posts. + * + * @param bool $limit The maximum number of post IDs to return. + * + * @return string The prepared query string. + */ + protected function get_select_query( $limit = false ) { + $indexable_table = Model::get_table_name( 'Indexable' ); + + $post_types = $this->post_type_helper->get_indexable_post_types(); + $excluded_post_statuses = $this->post_helper->get_excluded_post_statuses(); + $replacements = \array_merge( + $post_types, + $excluded_post_statuses + ); + $replacements[] = $this->version; + + $limit_query = ''; + if ( $limit ) { + $limit_query = 'LIMIT %d'; + $replacements[] = $limit; + } + + // Warning: If this query is changed, makes sure to update the query in get_count_query as well. + // @phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber + return $this->wpdb->prepare( + " + SELECT P.ID + FROM {$this->wpdb->posts} AS P + WHERE P.post_type IN (" . \implode( ', ', \array_fill( 0, \count( $post_types ), '%s' ) ) . ') + AND P.post_status NOT IN (' . \implode( ', ', \array_fill( 0, \count( $excluded_post_statuses ), '%s' ) ) . ") + AND P.ID not in ( + SELECT I.object_id from $indexable_table as I + WHERE I.object_type = 'post' + AND I.version = %d ) + $limit_query", + $replacements + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-type-archive-indexation-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-type-archive-indexation-action.php new file mode 100644 index 00000000..d56c0599 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-post-type-archive-indexation-action.php @@ -0,0 +1,212 @@ +repository = $repository; + $this->builder = $builder; + $this->post_type = $post_type; + $this->version = $versions->get_latest_version_for_type( 'post-type-archive' ); + } + + /** + * Returns the total number of unindexed post type archives. + * + * @param int $limit Limit the number of counted objects. + * + * @return int The total number of unindexed post type archives. + */ + public function get_total_unindexed( $limit = false ) { + $transient = \get_transient( static::UNINDEXED_COUNT_TRANSIENT ); + if ( $transient !== false ) { + return (int) $transient; + } + + \set_transient( static::UNINDEXED_COUNT_TRANSIENT, 0, \DAY_IN_SECONDS ); + + $result = \count( $this->get_unindexed_post_type_archives( $limit ) ); + + \set_transient( static::UNINDEXED_COUNT_TRANSIENT, $result, \DAY_IN_SECONDS ); + + /** + * Action: 'wpseo_indexables_unindexed_calculated' - sets an option to timestamp when there are no unindexed indexables left. + * + * @internal + */ + \do_action( 'wpseo_indexables_unindexed_calculated', static::UNINDEXED_COUNT_TRANSIENT, $result ); + + return $result; + } + + /** + * Creates indexables for post type archives. + * + * @return Indexable[] The created indexables. + */ + public function index() { + $unindexed_post_type_archives = $this->get_unindexed_post_type_archives( $this->get_limit() ); + + $indexables = []; + foreach ( $unindexed_post_type_archives as $post_type_archive ) { + $indexables[] = $this->builder->build_for_post_type_archive( $post_type_archive ); + } + + if ( \count( $indexables ) > 0 ) { + \delete_transient( static::UNINDEXED_COUNT_TRANSIENT ); + } + + return $indexables; + } + + /** + * Returns the number of post type archives that will be indexed in a single indexing pass. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_post_type_archive_indexation_limit' - Allow filtering the number of posts indexed during each indexing pass. + * + * @param int $limit The maximum number of posts indexed. + */ + $limit = \apply_filters( 'wpseo_post_type_archive_indexation_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } + + /** + * Retrieves the list of post types for which no indexable for its archive page has been made yet. + * + * @param int|false $limit Limit the number of retrieved indexables to this number. + * + * @return array The list of post types for which no indexable for its archive page has been made yet. + */ + protected function get_unindexed_post_type_archives( $limit = false ) { + $post_types_with_archive_pages = $this->get_post_types_with_archive_pages(); + $indexed_post_types = $this->get_indexed_post_type_archives(); + + $unindexed_post_types = \array_diff( $post_types_with_archive_pages, $indexed_post_types ); + + if ( $limit ) { + return \array_slice( $unindexed_post_types, 0, $limit ); + } + + return $unindexed_post_types; + } + + /** + * Returns the names of all the post types that have archive pages. + * + * @return array The list of names of all post types that have archive pages. + */ + protected function get_post_types_with_archive_pages() { + // We only want to index archive pages of public post types that have them. + $post_types_with_archive = $this->post_type->get_indexable_post_archives(); + + // We only need the post type names, not the objects. + $post_types = []; + foreach ( $post_types_with_archive as $post_type_with_archive ) { + $post_types[] = $post_type_with_archive->name; + } + + return $post_types; + } + + /** + * Retrieves the list of post type names for which an archive indexable exists. + * + * @return array The list of names of post types with unindexed archive pages. + */ + protected function get_indexed_post_type_archives() { + $results = $this->repository->query() + ->select( 'object_sub_type' ) + ->where( 'object_type', 'post-type-archive' ) + ->where_equal( 'version', $this->version ) + ->find_array(); + + if ( $results === false ) { + return []; + } + + $callback = static function ( $result ) { + return $result['object_sub_type']; + }; + + return \array_map( $callback, $results ); + } + + /** + * Returns a limited number of unindexed posts. + * + * @param int $limit Limit the maximum number of unindexed posts that are counted. + * + * @return int|false The limited number of unindexed posts. False if the query fails. + */ + public function get_limited_unindexed_count( $limit ) { + return $this->get_total_unindexed( $limit ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-term-indexation-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-term-indexation-action.php new file mode 100644 index 00000000..f7115ac0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexable-term-indexation-action.php @@ -0,0 +1,188 @@ +taxonomy = $taxonomy; + $this->repository = $repository; + $this->wpdb = $wpdb; + $this->version = $builder_versions->get_latest_version_for_type( 'term' ); + } + + /** + * Creates indexables for unindexed terms. + * + * @return Indexable[] The created indexables. + */ + public function index() { + $query = $this->get_select_query( $this->get_limit() ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Function get_select_query returns a prepared query. + $term_ids = $this->wpdb->get_col( $query ); + + $indexables = []; + foreach ( $term_ids as $term_id ) { + $indexables[] = $this->repository->find_by_id_and_type( (int) $term_id, 'term' ); + } + + if ( \count( $indexables ) > 0 ) { + \delete_transient( static::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( static::UNINDEXED_LIMITED_COUNT_TRANSIENT ); + } + + return $indexables; + } + + /** + * Returns the number of terms that will be indexed in a single indexing pass. + * + * @return int The limit. + */ + public function get_limit() { + /** + * Filter 'wpseo_term_indexation_limit' - Allow filtering the number of terms indexed during each indexing pass. + * + * @param int $limit The maximum number of terms indexed. + */ + $limit = \apply_filters( 'wpseo_term_indexation_limit', 25 ); + + if ( ! \is_int( $limit ) || $limit < 1 ) { + $limit = 25; + } + + return $limit; + } + + /** + * Builds a query for counting the number of unindexed terms. + * + * @return string The prepared query string. + */ + protected function get_count_query() { + $indexable_table = Model::get_table_name( 'Indexable' ); + $taxonomy_table = $this->wpdb->term_taxonomy; + $public_taxonomies = $this->taxonomy->get_indexable_taxonomies(); + + $taxonomies_placeholders = \implode( ', ', \array_fill( 0, \count( $public_taxonomies ), '%s' ) ); + + $replacements = [ $this->version ]; + \array_push( $replacements, ...$public_taxonomies ); + + // Warning: If this query is changed, makes sure to update the query in get_count_query as well. + return $this->wpdb->prepare( + " + SELECT COUNT(term_id) + FROM {$taxonomy_table} AS T + LEFT JOIN $indexable_table AS I + ON T.term_id = I.object_id + AND I.object_type = 'term' + AND I.version = %d + WHERE I.object_id IS NULL + AND taxonomy IN ($taxonomies_placeholders)", + $replacements + ); + } + + /** + * Builds a query for selecting the ID's of unindexed terms. + * + * @param bool $limit The maximum number of term IDs to return. + * + * @return string The prepared query string. + */ + protected function get_select_query( $limit = false ) { + $indexable_table = Model::get_table_name( 'Indexable' ); + $taxonomy_table = $this->wpdb->term_taxonomy; + $public_taxonomies = $this->taxonomy->get_indexable_taxonomies(); + $placeholders = \implode( ', ', \array_fill( 0, \count( $public_taxonomies ), '%s' ) ); + + $replacements = [ $this->version ]; + \array_push( $replacements, ...$public_taxonomies ); + + $limit_query = ''; + if ( $limit ) { + $limit_query = 'LIMIT %d'; + $replacements[] = $limit; + } + + // Warning: If this query is changed, makes sure to update the query in get_count_query as well. + return $this->wpdb->prepare( + " + SELECT term_id + FROM {$taxonomy_table} AS T + LEFT JOIN $indexable_table AS I + ON T.term_id = I.object_id + AND I.object_type = 'term' + AND I.version = %d + WHERE I.object_id IS NULL + AND taxonomy IN ($placeholders) + $limit_query", + $replacements + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexation-action-interface.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexation-action-interface.php new file mode 100644 index 00000000..a0c42524 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexation-action-interface.php @@ -0,0 +1,34 @@ +indexing_helper = $indexing_helper; + } + + /** + * Wraps up the indexing process. + * + * @return void + */ + public function complete() { + $this->indexing_helper->complete(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexing-prepare-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexing-prepare-action.php new file mode 100644 index 00000000..064830af --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/indexing-prepare-action.php @@ -0,0 +1,40 @@ +indexing_helper = $indexing_helper; + } + + /** + * Prepares the indexing routine. + * + * @return void + */ + public function prepare() { + $this->indexing_helper->prepare(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/limited-indexing-action-interface.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/limited-indexing-action-interface.php new file mode 100644 index 00000000..f9de655b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/limited-indexing-action-interface.php @@ -0,0 +1,18 @@ +post_type_helper = $post_type_helper; + } + + /** + * Returns objects to be indexed. + * + * @return array Objects to be indexed. + */ + protected function get_objects() { + $query = $this->get_select_query( $this->get_limit() ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Function get_select_query returns a prepared query. + $posts = $this->wpdb->get_results( $query ); + + return \array_map( + static function ( $post ) { + return (object) [ + 'id' => (int) $post->ID, + 'type' => 'post', + 'content' => $post->post_content, + ]; + }, + $posts + ); + } + + /** + * Builds a query for counting the number of unindexed post links. + * + * @return string The prepared query string. + */ + protected function get_count_query() { + $public_post_types = $this->post_type_helper->get_indexable_post_types(); + $indexable_table = Model::get_table_name( 'Indexable' ); + $links_table = Model::get_table_name( 'SEO_Links' ); + + // Warning: If this query is changed, makes sure to update the query in get_select_query as well. + return $this->wpdb->prepare( + "SELECT COUNT(P.ID) + FROM {$this->wpdb->posts} AS P + LEFT JOIN $indexable_table AS I + ON P.ID = I.object_id + AND I.link_count IS NOT NULL + AND I.object_type = 'post' + LEFT JOIN $links_table AS L + ON L.post_id = P.ID + AND L.target_indexable_id IS NULL + AND L.type = 'internal' + AND L.target_post_id IS NOT NULL + AND L.target_post_id != 0 + WHERE ( I.object_id IS NULL OR L.post_id IS NOT NULL ) + AND P.post_status = 'publish' + AND P.post_type IN (" . \implode( ', ', \array_fill( 0, \count( $public_post_types ), '%s' ) ) . ')', + $public_post_types + ); + } + + /** + * Builds a query for selecting the ID's of unindexed post links. + * + * @param int|false $limit The maximum number of post link IDs to return. + * + * @return string The prepared query string. + */ + protected function get_select_query( $limit = false ) { + $public_post_types = $this->post_type_helper->get_indexable_post_types(); + $indexable_table = Model::get_table_name( 'Indexable' ); + $links_table = Model::get_table_name( 'SEO_Links' ); + $replacements = $public_post_types; + + $limit_query = ''; + if ( $limit ) { + $limit_query = 'LIMIT %d'; + $replacements[] = $limit; + } + + // Warning: If this query is changed, makes sure to update the query in get_count_query as well. + return $this->wpdb->prepare( + " + SELECT P.ID, P.post_content + FROM {$this->wpdb->posts} AS P + LEFT JOIN $indexable_table AS I + ON P.ID = I.object_id + AND I.link_count IS NOT NULL + AND I.object_type = 'post' + LEFT JOIN $links_table AS L + ON L.post_id = P.ID + AND L.target_indexable_id IS NULL + AND L.type = 'internal' + AND L.target_post_id IS NOT NULL + AND L.target_post_id != 0 + WHERE ( I.object_id IS NULL OR L.post_id IS NOT NULL ) + AND P.post_status = 'publish' + AND P.post_type IN (" . \implode( ', ', \array_fill( 0, \count( $public_post_types ), '%s' ) ) . ") + $limit_query", + $replacements + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/term-link-indexing-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/term-link-indexing-action.php new file mode 100644 index 00000000..4ef79077 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/indexing/term-link-indexing-action.php @@ -0,0 +1,129 @@ +taxonomy_helper = $taxonomy_helper; + } + + /** + * Returns objects to be indexed. + * + * @return array Objects to be indexed. + */ + protected function get_objects() { + $query = $this->get_select_query( $this->get_limit() ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Function get_select_query returns a prepared query. + $terms = $this->wpdb->get_results( $query ); + + return \array_map( + static function ( $term ) { + return (object) [ + 'id' => (int) $term->term_id, + 'type' => 'term', + 'content' => $term->description, + ]; + }, + $terms + ); + } + + /** + * Builds a query for counting the number of unindexed term links. + * + * @return string The prepared query string. + */ + protected function get_count_query() { + $public_taxonomies = $this->taxonomy_helper->get_indexable_taxonomies(); + $placeholders = \implode( ', ', \array_fill( 0, \count( $public_taxonomies ), '%s' ) ); + $indexable_table = Model::get_table_name( 'Indexable' ); + + // Warning: If this query is changed, makes sure to update the query in get_select_query as well. + return $this->wpdb->prepare( + " + SELECT COUNT(T.term_id) + FROM {$this->wpdb->term_taxonomy} AS T + LEFT JOIN $indexable_table AS I + ON T.term_id = I.object_id + AND I.object_type = 'term' + AND I.link_count IS NOT NULL + WHERE I.object_id IS NULL + AND T.taxonomy IN ($placeholders)", + $public_taxonomies + ); + } + + /** + * Builds a query for selecting the ID's of unindexed term links. + * + * @param int|false $limit The maximum number of term link IDs to return. + * + * @return string The prepared query string. + */ + protected function get_select_query( $limit = false ) { + $public_taxonomies = $this->taxonomy_helper->get_indexable_taxonomies(); + + $indexable_table = Model::get_table_name( 'Indexable' ); + $replacements = $public_taxonomies; + + $limit_query = ''; + if ( $limit ) { + $limit_query = 'LIMIT %d'; + $replacements[] = $limit; + } + + // Warning: If this query is changed, makes sure to update the query in get_count_query as well. + return $this->wpdb->prepare( + " + SELECT T.term_id, T.description + FROM {$this->wpdb->term_taxonomy} AS T + LEFT JOIN $indexable_table AS I + ON T.term_id = I.object_id + AND I.object_type = 'term' + AND I.link_count IS NOT NULL + WHERE I.object_id IS NULL + AND T.taxonomy IN (" . \implode( ', ', \array_fill( 0, \count( $public_taxonomies ), '%s' ) ) . ") + $limit_query", + $replacements + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/integrations-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/integrations-action.php new file mode 100644 index 00000000..0a0665ba --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/integrations-action.php @@ -0,0 +1,57 @@ +options_helper = $options_helper; + } + + /** + * Sets an integration state. + * + * @param string $integration_name The name of the integration to activate/deactivate. + * @param bool $value The value to store. + * + * @return object The response object. + */ + public function set_integration_active( $integration_name, $value ) { + $option_name = $integration_name . '_integration_active'; + $success = true; + $option_value = $this->options_helper->get( $option_name ); + + if ( $option_value !== $value ) { + $success = $this->options_helper->set( $option_name, $value ); + } + + if ( $success ) { + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + return (object) [ + 'success' => false, + 'status' => 500, + 'error' => 'Could not save the option in the database', + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-login-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-login-action.php new file mode 100644 index 00000000..e9d92c9c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-login-action.php @@ -0,0 +1,62 @@ +client = $client; + } + + /** + * Authenticates with SEMrush to request the necessary tokens. + * + * @param string $code The authentication code to use to request a token with. + * + * @return object The response object. + */ + public function authenticate( $code ) { + // Code has already been validated at this point. No need to do that again. + try { + $tokens = $this->client->request_tokens( $code ); + + return (object) [ + 'tokens' => $tokens->to_array(), + 'status' => 200, + ]; + } catch ( Authentication_Failed_Exception $e ) { + return $e->get_response(); + } + } + + /** + * Performs the login request, if necessary. + * + * @return void + */ + public function login() { + if ( $this->client->has_valid_tokens() ) { + return; + } + + // Prompt with login screen. + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-options-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-options-action.php new file mode 100644 index 00000000..54850f12 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-options-action.php @@ -0,0 +1,51 @@ +options_helper = $options_helper; + } + + /** + * Stores SEMrush country code in the WPSEO options. + * + * @param string $country_code The country code to store. + * + * @return object The response object. + */ + public function set_country_code( $country_code ) { + // The country code has already been validated at this point. No need to do that again. + $success = $this->options_helper->set( 'semrush_country_code', $country_code ); + + if ( $success ) { + return (object) [ + 'success' => true, + 'status' => 200, + ]; + } + return (object) [ + 'success' => false, + 'status' => 500, + 'error' => 'Could not save option in the database', + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-phrases-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-phrases-action.php new file mode 100644 index 00000000..3c702245 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/semrush/semrush-phrases-action.php @@ -0,0 +1,96 @@ +client = $client; + } + + /** + * Gets the related keyphrases and data based on the passed keyphrase and database country code. + * + * @param string $keyphrase The keyphrase to search for. + * @param string $database The database's country code. + * + * @return object The response object. + */ + public function get_related_keyphrases( $keyphrase, $database ) { + try { + $transient_key = \sprintf( static::TRANSIENT_CACHE_KEY, $keyphrase, $database ); + $transient = \get_transient( $transient_key ); + + if ( $transient !== false ) { + return $this->to_result_object( $transient ); + } + + $options = [ + 'params' => [ + 'phrase' => $keyphrase, + 'database' => $database, + 'export_columns' => 'Ph,Nq,Td', + 'display_limit' => 10, + 'display_offset' => 0, + 'display_sort' => 'nq_desc', + 'display_filter' => '%2B|Nq|Lt|1000', + ], + ]; + + $results = $this->client->get( self::KEYPHRASES_URL, $options ); + + \set_transient( $transient_key, $results, \DAY_IN_SECONDS ); + + return $this->to_result_object( $results ); + } catch ( Exception $e ) { + return (object) [ + 'error' => $e->getMessage(), + 'status' => $e->getCode(), + ]; + } + } + + /** + * Converts the passed dataset to an object. + * + * @param array $result The result dataset to convert to an object. + * + * @return object The result object. + */ + protected function to_result_object( $result ) { + return (object) [ + 'results' => $result['data'], + 'status' => $result['status'], + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-account-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-account-action.php new file mode 100644 index 00000000..3c9f9e1c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-account-action.php @@ -0,0 +1,105 @@ +client = $client; + $this->options_helper = $options_helper; + } + + /** + * Checks the account limit for tracking keyphrases. + * + * @return object The response object. + */ + public function check_limit() { + // Code has already been validated at this point. No need to do that again. + try { + $results = $this->client->get( self::ACCOUNT_URL ); + + $usage = $results['limits']['keywords']['usage']; + $limit = $results['limits']['keywords']['limit']; + $history = $results['limits']['history_days']; + + return (object) [ + 'canTrack' => \is_null( $limit ) || $usage < $limit, + 'limit' => $limit, + 'usage' => $usage, + 'historyDays' => $history, + 'status' => 200, + ]; + } catch ( Exception $e ) { + return (object) [ + 'status' => $e->getCode(), + 'error' => $e->getMessage(), + ]; + } + } + + /** + * Gets the upgrade campaign. + * + * @return object The response object. + */ + public function get_upgrade_campaign() { + try { + $result = $this->client->get( self::UPGRADE_CAMPAIGN_URL ); + $type = ( $result['type'] ?? null ); + $months = ( $result['months'] ?? null ); + $discount = ( $result['value'] ?? null ); + + // We display upgrade discount only if it's a rate discount and positive months/discount. + if ( $type === 'RATE' && $months && $discount ) { + + return (object) [ + 'discount' => $discount, + 'months' => $months, + 'status' => 200, + ]; + } + + return (object) [ + 'discount' => null, + 'months' => null, + 'status' => 200, + ]; + } catch ( Exception $e ) { + return (object) [ + 'status' => $e->getCode(), + 'error' => $e->getMessage(), + ]; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-keyphrases-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-keyphrases-action.php new file mode 100644 index 00000000..2376cfd7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-keyphrases-action.php @@ -0,0 +1,363 @@ +client = $client; + $this->options_helper = $options_helper; + $this->indexable_repository = $indexable_repository; + } + + /** + * Sends the tracking API request for one or more keyphrases. + * + * @param string|array $keyphrases One or more keyphrases that should be tracked. + * @param Object $limits The limits API call response data. + * + * @return Object The reponse object. + */ + public function track_keyphrases( $keyphrases, $limits ) { + try { + $endpoint = \sprintf( + self::KEYPHRASES_ADD_URL, + $this->options_helper->get( 'wincher_website_id' ) + ); + + // Enforce arrrays to ensure a consistent way of preparing the request. + if ( ! \is_array( $keyphrases ) ) { + $keyphrases = [ $keyphrases ]; + } + + // Calculate if the user would exceed their limit. + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase -- To ensure JS code style, this can be ignored. + if ( ! $limits->canTrack || $this->would_exceed_limits( $keyphrases, $limits ) ) { + $response = [ + 'limit' => $limits->limit, + 'error' => 'Account limit exceeded', + 'status' => 400, + ]; + + return $this->to_result_object( $response ); + } + + $formatted_keyphrases = \array_values( + \array_map( + static function ( $keyphrase ) { + return [ + 'keyword' => $keyphrase, + 'groups' => [], + ]; + }, + $keyphrases + ) + ); + + $results = $this->client->post( $endpoint, WPSEO_Utils::format_json_encode( $formatted_keyphrases ) ); + + if ( ! \array_key_exists( 'data', $results ) ) { + return $this->to_result_object( $results ); + } + + // The endpoint returns a lot of stuff that we don't want/need. + $results['data'] = \array_map( + static function ( $keyphrase ) { + return [ + 'id' => $keyphrase['id'], + 'keyword' => $keyphrase['keyword'], + ]; + }, + $results['data'] + ); + + $results['data'] = \array_combine( + \array_column( $results['data'], 'keyword' ), + \array_values( $results['data'] ) + ); + + return $this->to_result_object( $results ); + } catch ( Exception $e ) { + return (object) [ + 'error' => $e->getMessage(), + 'status' => $e->getCode(), + ]; + } + } + + /** + * Sends an untrack request for the passed keyword ID. + * + * @param int $keyphrase_id The ID of the keyphrase to untrack. + * + * @return object The response object. + */ + public function untrack_keyphrase( $keyphrase_id ) { + try { + $endpoint = \sprintf( + self::KEYPHRASE_DELETE_URL, + $this->options_helper->get( 'wincher_website_id' ), + $keyphrase_id + ); + + $this->client->delete( $endpoint ); + + return (object) [ + 'status' => 200, + ]; + } catch ( Exception $e ) { + return (object) [ + 'error' => $e->getMessage(), + 'status' => $e->getCode(), + ]; + } + } + + /** + * Gets the keyphrase data for the passed keyphrases. + * Retrieves all available data if no keyphrases are provided. + * + * @param array|null $used_keyphrases The currently used keyphrases. Optional. + * @param string|null $permalink The current permalink. Optional. + * @param string|null $start_at The position start date. Optional. + * + * @return object The keyphrase chart data. + */ + public function get_tracked_keyphrases( $used_keyphrases = null, $permalink = null, $start_at = null ) { + try { + if ( $used_keyphrases === null ) { + $used_keyphrases = $this->collect_all_keyphrases(); + } + + // If we still have no keyphrases the API will return an error, so + // don't even bother sending a request. + if ( empty( $used_keyphrases ) ) { + return $this->to_result_object( + [ + 'data' => [], + 'status' => 200, + ] + ); + } + + $endpoint = \sprintf( + self::KEYPHRASES_URL, + $this->options_helper->get( 'wincher_website_id' ) + ); + + $results = $this->client->post( + $endpoint, + WPSEO_Utils::format_json_encode( + [ + 'keywords' => $used_keyphrases, + 'url' => $permalink, + 'start_at' => $start_at, + ] + ), + [ + 'timeout' => 60, + ] + ); + + if ( ! \array_key_exists( 'data', $results ) ) { + return $this->to_result_object( $results ); + } + + $results['data'] = $this->filter_results_by_used_keyphrases( $results['data'], $used_keyphrases ); + + // Extract the positional data and assign it to the keyphrase. + $results['data'] = \array_combine( + \array_column( $results['data'], 'keyword' ), + \array_values( $results['data'] ) + ); + + return $this->to_result_object( $results ); + } catch ( Exception $e ) { + return (object) [ + 'error' => $e->getMessage(), + 'status' => $e->getCode(), + ]; + } + } + + /** + * Collects the keyphrases associated with the post. + * + * @param WP_Post $post The post object. + * + * @return array The keyphrases. + */ + public function collect_keyphrases_from_post( $post ) { + $keyphrases = []; + $primary_keyphrase = $this->indexable_repository + ->query() + ->select( 'primary_focus_keyword' ) + ->where( 'object_id', $post->ID ) + ->find_one(); + + if ( $primary_keyphrase ) { + $keyphrases[] = $primary_keyphrase->primary_focus_keyword; + } + + /** + * Filters the keyphrases collected by the Wincher integration from the post. + * + * @param array $keyphrases The keyphrases array. + * @param int $post_id The ID of the post. + */ + return \apply_filters( 'wpseo_wincher_keyphrases_from_post', $keyphrases, $post->ID ); + } + + /** + * Collects all keyphrases known to Yoast. + * + * @return array + */ + protected function collect_all_keyphrases() { + // Collect primary keyphrases first. + $keyphrases = \array_column( + $this->indexable_repository + ->query() + ->select( 'primary_focus_keyword' ) + ->where_not_null( 'primary_focus_keyword' ) + ->where( 'object_type', 'post' ) + ->where_not_equal( 'post_status', 'trash' ) + ->distinct() + ->find_array(), + 'primary_focus_keyword' + ); + + /** + * Filters the keyphrases collected by the Wincher integration from all the posts. + * + * @param array $keyphrases The keyphrases array. + */ + $keyphrases = \apply_filters( 'wpseo_wincher_all_keyphrases', $keyphrases ); + + // Filter out empty entries. + return \array_filter( $keyphrases ); + } + + /** + * Filters the results based on the passed keyphrases. + * + * @param array $results The results to filter. + * @param array $used_keyphrases The used keyphrases. + * + * @return array The filtered results. + */ + protected function filter_results_by_used_keyphrases( $results, $used_keyphrases ) { + return \array_filter( + $results, + static function ( $result ) use ( $used_keyphrases ) { + return \in_array( $result['keyword'], \array_map( 'strtolower', $used_keyphrases ), true ); + } + ); + } + + /** + * Determines whether the amount of keyphrases would mean the user exceeds their account limits. + * + * @param string|array $keyphrases The keyphrases to be added. + * @param object $limits The current account limits. + * + * @return bool Whether the limit is exceeded. + */ + protected function would_exceed_limits( $keyphrases, $limits ) { + if ( ! \is_array( $keyphrases ) ) { + $keyphrases = [ $keyphrases ]; + } + + if ( \is_null( $limits->limit ) ) { + return false; + } + + return ( \count( $keyphrases ) + $limits->usage ) > $limits->limit; + } + + /** + * Converts the passed dataset to an object. + * + * @param array $result The result dataset to convert to an object. + * + * @return object The result object. + */ + protected function to_result_object( $result ) { + if ( \array_key_exists( 'data', $result ) ) { + $result['results'] = (object) $result['data']; + + unset( $result['data'] ); + } + + if ( \array_key_exists( 'message', $result ) ) { + $result['error'] = $result['message']; + + unset( $result['message'] ); + } + + return (object) $result; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-login-action.php b/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-login-action.php new file mode 100644 index 00000000..6d34a31c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/actions/wincher/wincher-login-action.php @@ -0,0 +1,73 @@ +client = $client; + $this->options_helper = $options_helper; + } + + /** + * Returns the authorization URL. + * + * @return object The response object. + */ + public function get_authorization_url() { + return (object) [ + 'status' => 200, + 'url' => $this->client->get_authorization_url(), + ]; + } + + /** + * Authenticates with Wincher to request the necessary tokens. + * + * @param string $code The authentication code to use to request a token with. + * @param string $website_id The website id associated with the code. + * + * @return object The response object. + */ + public function authenticate( $code, $website_id ) { + // Code has already been validated at this point. No need to do that again. + try { + $tokens = $this->client->request_tokens( $code ); + $this->options_helper->set( 'wincher_website_id', $website_id ); + + return (object) [ + 'tokens' => $tokens->to_array(), + 'status' => 200, + ]; + } catch ( Authentication_Failed_Exception $e ) { + return $e->get_response(); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/analytics/application/missing-indexables-collector.php b/wp/wp-content/plugins/wordpress-seo/src/analytics/application/missing-indexables-collector.php new file mode 100644 index 00000000..957d4127 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/analytics/application/missing-indexables-collector.php @@ -0,0 +1,72 @@ + + */ + private $indexation_actions; + + /** + * The collector constructor. + * + * @param Indexation_Action_Interface ...$indexation_actions All the Indexation actions. + */ + public function __construct( Indexation_Action_Interface ...$indexation_actions ) { + $this->indexation_actions = $indexation_actions; + $this->add_additional_indexing_actions(); + } + + /** + * Gets the data for the tracking collector. + * + * @return array The list of missing indexables. + */ + public function get() { + $missing_indexable_bucket = new Missing_Indexable_Bucket(); + foreach ( $this->indexation_actions as $indexation_action ) { + $missing_indexable_count = new Missing_Indexable_Count( \get_class( $indexation_action ), $indexation_action->get_total_unindexed() ); + $missing_indexable_bucket->add_missing_indexable_count( $missing_indexable_count ); + } + + return [ 'missing_indexables' => $missing_indexable_bucket->to_array() ]; + } + + /** + * Adds additional indexing actions to count from the 'wpseo_indexable_collector_add_indexation_actions' filter. + * + * @return void + */ + private function add_additional_indexing_actions() { + /** + * Filter: Adds the possibility to add additional indexation actions to be included in the count routine. + * + * @internal + * @param Indexation_Action_Interface $actions This filter expects a list of Indexation_Action_Interface instances + * and expects only Indexation_Action_Interface implementations to be + * added to the list. + */ + $indexing_actions = (array) \apply_filters( 'wpseo_indexable_collector_add_indexation_actions', $this->indexation_actions ); + + $this->indexation_actions = \array_filter( + $indexing_actions, + static function ( $indexing_action ) { + return \is_a( $indexing_action, Indexation_Action_Interface::class ); + } + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/analytics/application/to-be-cleaned-indexables-collector.php b/wp/wp-content/plugins/wordpress-seo/src/analytics/application/to-be-cleaned-indexables-collector.php new file mode 100644 index 00000000..504aab6a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/analytics/application/to-be-cleaned-indexables-collector.php @@ -0,0 +1,84 @@ +indexable_cleanup_repository = $indexable_cleanup_repository; + } + + /** + * Gets the data for the collector. + * + * @return array + */ + public function get() { + $to_be_cleaned_indexable_bucket = new To_Be_Cleaned_Indexable_Bucket(); + $cleanup_tasks = [ + 'indexables_with_post_object_type_and_shop_order_object_sub_type' => $this->indexable_cleanup_repository->count_indexables_with_object_type_and_object_sub_type( 'post', 'shop_order' ), + 'indexables_with_auto-draft_post_status' => $this->indexable_cleanup_repository->count_indexables_with_post_status( 'auto-draft' ), + 'indexables_for_non_publicly_viewable_post' => $this->indexable_cleanup_repository->count_indexables_for_non_publicly_viewable_post(), + 'indexables_for_non_publicly_viewable_taxonomies' => $this->indexable_cleanup_repository->count_indexables_for_non_publicly_viewable_taxonomies(), + 'indexables_for_non_publicly_viewable_post_type_archive_pages' => $this->indexable_cleanup_repository->count_indexables_for_non_publicly_post_type_archive_pages(), + 'indexables_for_authors_archive_disabled' => $this->indexable_cleanup_repository->count_indexables_for_authors_archive_disabled(), + 'indexables_for_authors_without_archive' => $this->indexable_cleanup_repository->count_indexables_for_authors_without_archive(), + 'indexables_for_object_type_and_source_table_users' => $this->indexable_cleanup_repository->count_indexables_for_orphaned_users(), + 'indexables_for_object_type_and_source_table_posts' => $this->indexable_cleanup_repository->count_indexables_for_object_type_and_source_table( 'posts', 'ID', 'post' ), + 'indexables_for_object_type_and_source_table_terms' => $this->indexable_cleanup_repository->count_indexables_for_object_type_and_source_table( 'terms', 'term_id', 'term' ), + 'orphaned_from_table_indexable_hierarchy' => $this->indexable_cleanup_repository->count_orphaned_from_table( 'Indexable_Hierarchy', 'indexable_id' ), + 'orphaned_from_table_indexable_id' => $this->indexable_cleanup_repository->count_orphaned_from_table( 'SEO_Links', 'indexable_id' ), + 'orphaned_from_table_target_indexable_id' => $this->indexable_cleanup_repository->count_orphaned_from_table( 'SEO_Links', 'target_indexable_id' ), + ]; + + foreach ( $cleanup_tasks as $name => $count ) { + if ( $count !== null ) { + $count_object = new To_Be_Cleaned_Indexable_Count( $name, $count ); + $to_be_cleaned_indexable_bucket->add_to_be_cleaned_indexable_count( $count_object ); + } + } + + $this->add_additional_counts( $to_be_cleaned_indexable_bucket ); + + return [ 'to_be_cleaned_indexables' => $to_be_cleaned_indexable_bucket->to_array() ]; + } + + /** + * Allows additional tasks to be added via the 'wpseo_add_cleanup_counts_to_indexable_bucket' action. + * + * @param To_Be_Cleaned_Indexable_Bucket $to_be_cleaned_indexable_bucket The current bucket with data. + * + * @return void + */ + private function add_additional_counts( $to_be_cleaned_indexable_bucket ) { + /** + * Action: Adds the possibility to add additional to be cleaned objects. + * + * @internal + * @param To_Be_Cleaned_Indexable_Bucket $bucket An indexable cleanup bucket. New values are instances of To_Be_Cleaned_Indexable_Count. + */ + \do_action( 'wpseo_add_cleanup_counts_to_indexable_bucket', $to_be_cleaned_indexable_bucket ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-bucket.php b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-bucket.php new file mode 100644 index 00000000..f384c5a1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-bucket.php @@ -0,0 +1,48 @@ + + */ + private $missing_indexable_counts; + + /** + * The constructor. + */ + public function __construct() { + $this->missing_indexable_counts = []; + } + + /** + * Adds a missing indexable count object to this bucket. + * + * @param Missing_Indexable_Count $missing_indexable_count The missing indexable count object. + * + * @return void + */ + public function add_missing_indexable_count( Missing_Indexable_Count $missing_indexable_count ): void { + $this->missing_indexable_counts[] = $missing_indexable_count; + } + + /** + * Returns the array representation of all indexable counts. + * + * @return array + */ + public function to_array() { + return \array_map( + static function ( $item ) { + return $item->to_array(); + }, + $this->missing_indexable_counts + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-count.php b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-count.php new file mode 100644 index 00000000..86a9c39b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/missing-indexable-count.php @@ -0,0 +1,64 @@ +indexable_type = $indexable_type; + $this->count = $count; + } + + /** + * Returns an array representation of the data. + * + * @return array Returns both values in an array format. + */ + public function to_array() { + return [ + 'indexable_type' => $this->get_indexable_type(), + 'count' => $this->get_count(), + ]; + } + + /** + * Gets the indexable type. + * + * @return string Returns the indexable type. + */ + public function get_indexable_type() { + return $this->indexable_type; + } + + /** + * Gets the count. + * + * @return int Returns the amount of missing indexables. + */ + public function get_count() { + return $this->count; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-bucket.php b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-bucket.php new file mode 100644 index 00000000..abaf1f88 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-bucket.php @@ -0,0 +1,48 @@ + + */ + private $to_be_cleaned_indexable_counts; + + /** + * The constructor. + */ + public function __construct() { + $this->to_be_cleaned_indexable_counts = []; + } + + /** + * Adds a 'to be cleaned' indexable count object to this bucket. + * + * @param To_Be_Cleaned_Indexable_Count $to_be_cleaned_indexable_counts The to be cleaned indexable count object. + * + * @return void + */ + public function add_to_be_cleaned_indexable_count( To_Be_Cleaned_Indexable_Count $to_be_cleaned_indexable_counts ) { + $this->to_be_cleaned_indexable_counts[] = $to_be_cleaned_indexable_counts; + } + + /** + * Returns the array representation of all indexable counts. + * + * @return array + */ + public function to_array() { + return \array_map( + static function ( $item ) { + return $item->to_array(); + }, + $this->to_be_cleaned_indexable_counts + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-count.php b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-count.php new file mode 100644 index 00000000..1b0ba534 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/analytics/domain/to-be-cleaned-indexable-count.php @@ -0,0 +1,64 @@ +cleanup_name = $cleanup_name; + $this->count = $count; + } + + /** + * Returns an array representation of the data. + * + * @return array Returns both values in an array format. + */ + public function to_array() { + return [ + 'cleanup_name' => $this->get_cleanup_name(), + 'count' => $this->get_count(), + ]; + } + + /** + * Gets the name. + * + * @return string + */ + public function get_cleanup_name() { + return $this->cleanup_name; + } + + /** + * Gets the count. + * + * @return int Returns the amount of missing indexables. + */ + public function get_count() { + return $this->count; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/analytics/user-interface/last-completed-indexation-integration.php b/wp/wp-content/plugins/wordpress-seo/src/analytics/user-interface/last-completed-indexation-integration.php new file mode 100644 index 00000000..60008b30 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/analytics/user-interface/last-completed-indexation-integration.php @@ -0,0 +1,64 @@ +options_helper = $options_helper; + } + + /** + * Registers action hook to maybe save an option. + * + * @return void + */ + public function register_hooks(): void { + \add_action( + 'wpseo_indexables_unindexed_calculated', + [ + $this, + 'maybe_set_indexables_unindexed_calculated', + ], + 10, + 2 + ); + } + + /** + * Saves a timestamp option when there are no unindexed indexables. + * + * @param string $indexable_name The name of the indexable that is being checked. + * @param int $count The amount of missing indexables. + * + * @return void + */ + public function maybe_set_indexables_unindexed_calculated( string $indexable_name, int $count ): void { + if ( $count === 0 ) { + $no_index = $this->options_helper->get( 'last_known_no_unindexed', [] ); + $no_index[ $indexable_name ] = \time(); + $this->options_helper->set( 'last_known_no_unindexed', $no_index ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-author-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-author-builder.php new file mode 100644 index 00000000..5a71176b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-author-builder.php @@ -0,0 +1,248 @@ +author_archive = $author_archive; + $this->version = $versions->get_latest_version_for_type( 'user' ); + $this->options_helper = $options_helper; + $this->post_helper = $post_helper; + } + + /** + * Formats the data. + * + * @param int $user_id The user to retrieve the indexable for. + * @param Indexable $indexable The indexable to format. + * + * @return Indexable The extended indexable. + * + * @throws Author_Not_Built_Exception When author is not built. + */ + public function build( $user_id, Indexable $indexable ) { + $exception = $this->check_if_user_should_be_indexed( $user_id ); + if ( $exception ) { + throw $exception; + } + + $meta_data = $this->get_meta_data( $user_id ); + + $indexable->object_id = $user_id; + $indexable->object_type = 'user'; + $indexable->permalink = \get_author_posts_url( $user_id ); + $indexable->title = $meta_data['wpseo_title']; + $indexable->description = $meta_data['wpseo_metadesc']; + $indexable->is_cornerstone = false; + $indexable->is_robots_noindex = ( $meta_data['wpseo_noindex_author'] === 'on' ); + $indexable->is_robots_nofollow = null; + $indexable->is_robots_noarchive = null; + $indexable->is_robots_noimageindex = null; + $indexable->is_robots_nosnippet = null; + $indexable->is_public = ( $indexable->is_robots_noindex ) ? false : null; + $indexable->has_public_posts = $this->author_archive->author_has_public_posts( $user_id ); + $indexable->blog_id = \get_current_blog_id(); + + $this->reset_social_images( $indexable ); + $this->handle_social_images( $indexable ); + + $timestamps = $this->get_object_timestamps( $user_id ); + $indexable->object_published_at = $timestamps->published_at; + $indexable->object_last_modified = $timestamps->last_modified; + + $indexable->version = $this->version; + + return $indexable; + } + + /** + * Retrieves the meta data for this indexable. + * + * @param int $user_id The user to retrieve the meta data for. + * + * @return array List of meta entries. + */ + protected function get_meta_data( $user_id ) { + $keys = [ + 'wpseo_title', + 'wpseo_metadesc', + 'wpseo_noindex_author', + ]; + + $output = []; + foreach ( $keys as $key ) { + $output[ $key ] = $this->get_author_meta( $user_id, $key ); + } + + return $output; + } + + /** + * Retrieves the author meta. + * + * @param int $user_id The user to retrieve the indexable for. + * @param string $key The meta entry to retrieve. + * + * @return string|null The value of the meta field. + */ + protected function get_author_meta( $user_id, $key ) { + $value = \get_the_author_meta( $key, $user_id ); + if ( \is_string( $value ) && $value === '' ) { + return null; + } + + return $value; + } + + /** + * Finds an alternative image for the social image. + * + * @param Indexable $indexable The indexable. + * + * @return array|bool False when not found, array with data when found. + */ + protected function find_alternative_image( Indexable $indexable ) { + $gravatar_image = \get_avatar_url( + $indexable->object_id, + [ + 'size' => 500, + 'scheme' => 'https', + ] + ); + if ( $gravatar_image ) { + return [ + 'image' => $gravatar_image, + 'source' => 'gravatar-image', + ]; + } + + return false; + } + + /** + * Returns the timestamps for a given author. + * + * @param int $author_id The author ID. + * + * @return object An object with last_modified and published_at timestamps. + */ + protected function get_object_timestamps( $author_id ) { + global $wpdb; + $post_statuses = $this->post_helper->get_public_post_statuses(); + + $replacements = []; + $replacements[] = 'post_modified_gmt'; + $replacements[] = 'post_date_gmt'; + $replacements[] = $wpdb->posts; + $replacements[] = 'post_status'; + $replacements = \array_merge( $replacements, $post_statuses ); + $replacements[] = 'post_password'; + $replacements[] = 'post_author'; + $replacements[] = $author_id; + + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + return $wpdb->get_row( + $wpdb->prepare( + ' + SELECT MAX(p.%i) AS last_modified, MIN(p.%i) AS published_at + FROM %i AS p + WHERE p.%i IN (' . \implode( ', ', \array_fill( 0, \count( $post_statuses ), '%s' ) ) . ") + AND p.%i = '' + AND p.%i = %d + ", + $replacements + ) + ); + //phpcs:enable + } + + /** + * Checks if the user should be indexed. + * Returns an exception with an appropriate message if not. + * + * @param string $user_id The user id. + * + * @return Author_Not_Built_Exception|null The exception if it should not be indexed, or `null` if it should. + */ + protected function check_if_user_should_be_indexed( $user_id ) { + $exception = null; + + if ( $this->author_archive->are_disabled() ) { + $exception = Author_Not_Built_Exception::author_archives_are_disabled( $user_id ); + } + + // We will check if the author has public posts the WP way, instead of the indexable way, to make sure we get proper results even if SEO optimization is not run. + // In case the user has no public posts, we check if the user should be indexed anyway. + if ( $this->options_helper->get( 'noindex-author-noposts-wpseo', false ) === true && $this->author_archive->author_has_public_posts_wp( $user_id ) === false ) { + $exception = Author_Not_Built_Exception::author_archives_are_not_indexed_for_users_without_posts( $user_id ); + } + + /** + * Filter: Include or exclude a user from being build and saved as an indexable. + * Return an `Author_Not_Built_Exception` when the indexable should not be build, with an appropriate message telling why it should not be built. + * Return `null` if the indexable should be build. + * + * @param Author_Not_Built_Exception|null $exception An exception if the indexable is not being built, `null` if the indexable should be built. + * @param string $user_id The ID of the user that should or should not be excluded. + */ + return \apply_filters( 'wpseo_should_build_and_save_user_indexable', $exception, $user_id ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-builder.php new file mode 100644 index 00000000..f0c4b727 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-builder.php @@ -0,0 +1,417 @@ +author_builder = $author_builder; + $this->post_builder = $post_builder; + $this->term_builder = $term_builder; + $this->home_page_builder = $home_page_builder; + $this->post_type_archive_builder = $post_type_archive_builder; + $this->date_archive_builder = $date_archive_builder; + $this->system_page_builder = $system_page_builder; + $this->hierarchy_builder = $hierarchy_builder; + $this->primary_term_builder = $primary_term_builder; + $this->indexable_helper = $indexable_helper; + $this->version_manager = $version_manager; + $this->link_builder = $link_builder; + } + + /** + * Sets the indexable repository. Done to avoid circular dependencies. + * + * @required + * + * @param Indexable_Repository $indexable_repository The indexable repository. + * + * @return void + */ + public function set_indexable_repository( Indexable_Repository $indexable_repository ) { + $this->indexable_repository = $indexable_repository; + } + + /** + * Creates a clean copy of an Indexable to allow for later database operations. + * + * @param Indexable $indexable The Indexable to copy. + * + * @return bool|Indexable + */ + protected function deep_copy_indexable( $indexable ) { + return $this->indexable_repository + ->query() + ->create( $indexable->as_array() ); + } + + /** + * Creates an indexable by its ID and type. + * + * @param int $object_id The indexable object ID. + * @param string $object_type The indexable object type. + * @param Indexable|bool $indexable Optional. An existing indexable to overwrite. + * + * @return bool|Indexable Instance of indexable. False when unable to build. + */ + public function build_for_id_and_type( $object_id, $object_type, $indexable = false ) { + $defaults = [ + 'object_type' => $object_type, + 'object_id' => $object_id, + ]; + + $indexable = $this->build( $indexable, $defaults ); + + return $indexable; + } + + /** + * Creates an indexable for the homepage. + * + * @param Indexable|bool $indexable Optional. An existing indexable to overwrite. + * + * @return Indexable The home page indexable. + */ + public function build_for_home_page( $indexable = false ) { + return $this->build( $indexable, [ 'object_type' => 'home-page' ] ); + } + + /** + * Creates an indexable for the date archive. + * + * @param Indexable|bool $indexable Optional. An existing indexable to overwrite. + * + * @return Indexable The date archive indexable. + */ + public function build_for_date_archive( $indexable = false ) { + return $this->build( $indexable, [ 'object_type' => 'date-archive' ] ); + } + + /** + * Creates an indexable for a post type archive. + * + * @param string $post_type The post type. + * @param Indexable|bool $indexable Optional. An existing indexable to overwrite. + * + * @return Indexable The post type archive indexable. + */ + public function build_for_post_type_archive( $post_type, $indexable = false ) { + $defaults = [ + 'object_type' => 'post-type-archive', + 'object_sub_type' => $post_type, + ]; + return $this->build( $indexable, $defaults ); + } + + /** + * Creates an indexable for a system page. + * + * @param string $page_type The type of system page. + * @param Indexable|bool $indexable Optional. An existing indexable to overwrite. + * + * @return Indexable The search result indexable. + */ + public function build_for_system_page( $page_type, $indexable = false ) { + $defaults = [ + 'object_type' => 'system-page', + 'object_sub_type' => $page_type, + ]; + return $this->build( $indexable, $defaults ); + } + + /** + * Ensures we have a valid indexable. Creates one if false is passed. + * + * @param Indexable|false $indexable The indexable. + * @param array $defaults The initial properties of the Indexable. + * + * @return Indexable The indexable. + */ + protected function ensure_indexable( $indexable, $defaults = [] ) { + if ( ! $indexable ) { + return $this->indexable_repository->query()->create( $defaults ); + } + + return $indexable; + } + + /** + * Build and author indexable from an author id if it does not exist yet, or if the author indexable needs to be upgraded. + * + * @param int $author_id The author id. + * + * @return Indexable|false The author indexable if it has been built, `false` if it could not be built. + */ + protected function maybe_build_author_indexable( $author_id ) { + $author_indexable = $this->indexable_repository->find_by_id_and_type( + $author_id, + 'user', + false + ); + if ( ! $author_indexable || $this->version_manager->indexable_needs_upgrade( $author_indexable ) ) { + // Try to build the author. + $author_defaults = [ + 'object_type' => 'user', + 'object_id' => $author_id, + ]; + $author_indexable = $this->build( $author_indexable, $author_defaults ); + } + return $author_indexable; + } + + /** + * Checks if the indexable type is one that is not supposed to have object ID for. + * + * @param string $type The type of the indexable. + * + * @return bool Whether the indexable type is one that is not supposed to have object ID for. + */ + protected function is_type_with_no_id( $type ) { + return \in_array( $type, [ 'home-page', 'date-archive', 'post-type-archive', 'system-page' ], true ); + } + + // phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.Missing -- Exceptions are handled by the catch statement in the method. + + /** + * Rebuilds an Indexable from scratch. + * + * @param Indexable $indexable The Indexable to (re)build. + * @param array|null $defaults The object type of the Indexable. + * + * @return Indexable|false The resulting Indexable. + */ + public function build( $indexable, $defaults = null ) { + // Backup the previous Indexable, if there was one. + $indexable_before = ( $indexable ) ? $this->deep_copy_indexable( $indexable ) : null; + + // Make sure we have an Indexable to work with. + $indexable = $this->ensure_indexable( $indexable, $defaults ); + + try { + if ( $indexable->object_id === 0 ) { + throw Not_Built_Exception::invalid_object_id( $indexable->object_id ); + } + switch ( $indexable->object_type ) { + + case 'post': + $indexable = $this->post_builder->build( $indexable->object_id, $indexable ); + + // Save indexable, to make sure it can be queried when building related objects like the author indexable and hierarchy. + $indexable = $this->indexable_helper->save_indexable( $indexable, $indexable_before ); + + // For attachments, we have to make sure to patch any potentially previously cleaned up SEO links. + if ( \is_a( $indexable, Indexable::class ) && $indexable->object_sub_type === 'attachment' ) { + $this->link_builder->patch_seo_links( $indexable ); + } + + // Always rebuild the primary term. + $this->primary_term_builder->build( $indexable->object_id ); + + // Always rebuild the hierarchy; this needs the primary term to run correctly. + $this->hierarchy_builder->build( $indexable ); + + $this->maybe_build_author_indexable( $indexable->author_id ); + + // The indexable is already saved, so return early. + return $indexable; + + case 'user': + $indexable = $this->author_builder->build( $indexable->object_id, $indexable ); + break; + + case 'term': + $indexable = $this->term_builder->build( $indexable->object_id, $indexable ); + + // Save indexable, to make sure it can be queried when building hierarchy. + $indexable = $this->indexable_helper->save_indexable( $indexable, $indexable_before ); + + $this->hierarchy_builder->build( $indexable ); + + // The indexable is already saved, so return early. + return $indexable; + + case 'home-page': + $indexable = $this->home_page_builder->build( $indexable ); + break; + + case 'date-archive': + $indexable = $this->date_archive_builder->build( $indexable ); + break; + + case 'post-type-archive': + $indexable = $this->post_type_archive_builder->build( $indexable->object_sub_type, $indexable ); + break; + + case 'system-page': + $indexable = $this->system_page_builder->build( $indexable->object_sub_type, $indexable ); + break; + } + + return $this->indexable_helper->save_indexable( $indexable, $indexable_before ); + } + catch ( Source_Exception $exception ) { + if ( ! $this->is_type_with_no_id( $indexable->object_type ) && ( ! isset( $indexable->object_id ) || \is_null( $indexable->object_id ) ) ) { + return false; + } + + /** + * The current indexable could not be indexed. Create a placeholder indexable, so we can + * skip this indexable in future indexing runs. + * + * @var Indexable $indexable + */ + $indexable = $this->ensure_indexable( + $indexable, + [ + 'object_id' => $indexable->object_id, + 'object_type' => $indexable->object_type, + 'post_status' => 'unindexed', + 'version' => 0, + ] + ); + // If we already had an existing indexable, mark it as unindexed. We cannot rely on its validity anymore. + $indexable->post_status = 'unindexed'; + // Make sure that the indexing process doesn't get stuck in a loop on this broken indexable. + $indexable = $this->version_manager->set_latest( $indexable ); + + return $this->indexable_helper->save_indexable( $indexable, $indexable_before ); + } + catch ( Not_Built_Exception $exception ) { + return false; + } + } + + // phpcs:enable +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-date-archive-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-date-archive-builder.php new file mode 100644 index 00000000..0c319d99 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-date-archive-builder.php @@ -0,0 +1,63 @@ +options = $options; + $this->version = $versions->get_latest_version_for_type( 'date-archive' ); + } + + /** + * Formats the data. + * + * @param Indexable $indexable The indexable to format. + * + * @return Indexable The extended indexable. + */ + public function build( $indexable ) { + $indexable->object_type = 'date-archive'; + $indexable->title = $this->options->get( 'title-archive-wpseo' ); + $indexable->description = $this->options->get( 'metadesc-archive-wpseo' ); + $indexable->is_robots_noindex = $this->options->get( 'noindex-archive-wpseo' ); + $indexable->is_public = ( (int) $indexable->is_robots_noindex !== 1 ); + $indexable->blog_id = \get_current_blog_id(); + $indexable->permalink = null; + $indexable->version = $this->version; + + return $indexable; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-hierarchy-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-hierarchy-builder.php new file mode 100644 index 00000000..d2025383 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-hierarchy-builder.php @@ -0,0 +1,416 @@ + + */ + protected $saved_ancestors = []; + + /** + * The indexable repository. + * + * @var Indexable_Repository + */ + private $indexable_repository; + + /** + * The indexable hierarchy repository. + * + * @var Indexable_Hierarchy_Repository + */ + private $indexable_hierarchy_repository; + + /** + * The primary term repository. + * + * @var Primary_Term_Repository + */ + private $primary_term_repository; + + /** + * The options helper. + * + * @var Options_Helper + */ + private $options; + + /** + * Holds the Post_Helper instance. + * + * @var Post_Helper + */ + private $post; + + /** + * Holds the Indexable_Helper instance. + * + * @var Indexable_Helper + */ + private $indexable_helper; + + /** + * Indexable_Author_Builder constructor. + * + * @param Indexable_Hierarchy_Repository $indexable_hierarchy_repository The indexable hierarchy repository. + * @param Primary_Term_Repository $primary_term_repository The primary term repository. + * @param Options_Helper $options The options helper. + * @param Post_Helper $post The post helper. + * @param Indexable_Helper $indexable_helper The indexable helper. + */ + public function __construct( + Indexable_Hierarchy_Repository $indexable_hierarchy_repository, + Primary_Term_Repository $primary_term_repository, + Options_Helper $options, + Post_Helper $post, + Indexable_Helper $indexable_helper + ) { + $this->indexable_hierarchy_repository = $indexable_hierarchy_repository; + $this->primary_term_repository = $primary_term_repository; + $this->options = $options; + $this->post = $post; + $this->indexable_helper = $indexable_helper; + } + + /** + * Sets the indexable repository. Done to avoid circular dependencies. + * + * @required + * + * @param Indexable_Repository $indexable_repository The indexable repository. + * + * @return void + */ + public function set_indexable_repository( Indexable_Repository $indexable_repository ) { + $this->indexable_repository = $indexable_repository; + } + + /** + * Builds the ancestor hierarchy for an indexable. + * + * @param Indexable $indexable The indexable. + * + * @return Indexable The indexable. + */ + public function build( Indexable $indexable ) { + if ( $this->hierarchy_is_built( $indexable ) ) { + return $indexable; + } + + if ( ! $this->indexable_helper->should_index_indexable( $indexable ) ) { + return $indexable; + } + + $this->indexable_hierarchy_repository->clear_ancestors( $indexable->id ); + $indexable_id = $this->get_indexable_id( $indexable ); + $ancestors = []; + if ( $indexable->object_type === 'post' ) { + $this->add_ancestors_for_post( $indexable_id, $indexable->object_id, $ancestors ); + } + + if ( $indexable->object_type === 'term' ) { + $this->add_ancestors_for_term( $indexable_id, $indexable->object_id, $ancestors ); + } + $indexable->ancestors = \array_reverse( \array_values( $ancestors ) ); + $indexable->has_ancestors = ! empty( $ancestors ); + if ( $indexable->id ) { + $this->save_ancestors( $indexable ); + } + + return $indexable; + } + + /** + * Checks if a hierarchy is built already for the given indexable. + * + * @param Indexable $indexable The indexable to check. + * + * @return bool True when indexable has a built hierarchy. + */ + protected function hierarchy_is_built( Indexable $indexable ) { + if ( \in_array( $indexable->id, $this->saved_ancestors, true ) ) { + return true; + } + + $this->saved_ancestors[] = $indexable->id; + + return false; + } + + /** + * Saves the ancestors. + * + * @param Indexable $indexable The indexable. + * + * @return void + */ + private function save_ancestors( $indexable ) { + if ( empty( $indexable->ancestors ) ) { + $this->indexable_hierarchy_repository->add_ancestor( $indexable->id, 0, 0 ); + return; + } + $depth = \count( $indexable->ancestors ); + foreach ( $indexable->ancestors as $ancestor ) { + $this->indexable_hierarchy_repository->add_ancestor( $indexable->id, $ancestor->id, $depth ); + --$depth; + } + } + + /** + * Adds ancestors for a post. + * + * @param int $indexable_id The indexable id, this is the id of the original indexable. + * @param int $post_id The post id, this is the id of the post currently being evaluated. + * @param int[] $parents The indexable IDs of all parents. + * + * @return void + */ + private function add_ancestors_for_post( $indexable_id, $post_id, &$parents ) { + $post = $this->post->get_post( $post_id ); + + if ( ! isset( $post->post_parent ) ) { + return; + } + + if ( $post->post_parent !== 0 && $this->post->get_post( $post->post_parent ) !== null ) { + $ancestor = $this->indexable_repository->find_by_id_and_type( $post->post_parent, 'post' ); + if ( $this->is_invalid_ancestor( $ancestor, $indexable_id, $parents ) ) { + return; + } + + $parents[ $this->get_indexable_id( $ancestor ) ] = $ancestor; + + $this->add_ancestors_for_post( $indexable_id, $ancestor->object_id, $parents ); + + return; + } + + $primary_term_id = $this->find_primary_term_id_for_post( $post ); + + if ( $primary_term_id === 0 ) { + return; + } + + $ancestor = $this->indexable_repository->find_by_id_and_type( $primary_term_id, 'term' ); + if ( $this->is_invalid_ancestor( $ancestor, $indexable_id, $parents ) ) { + return; + } + + $parents[ $this->get_indexable_id( $ancestor ) ] = $ancestor; + + $this->add_ancestors_for_term( $indexable_id, $ancestor->object_id, $parents ); + } + + /** + * Adds ancestors for a term. + * + * @param int $indexable_id The indexable id, this is the id of the original indexable. + * @param int $term_id The term id, this is the id of the term currently being evaluated. + * @param int[] $parents The indexable IDs of all parents. + * + * @return void + */ + private function add_ancestors_for_term( $indexable_id, $term_id, &$parents = [] ) { + $term = \get_term( $term_id ); + $term_parents = $this->get_term_parents( $term ); + + foreach ( $term_parents as $parent ) { + $ancestor = $this->indexable_repository->find_by_id_and_type( $parent->term_id, 'term' ); + if ( $this->is_invalid_ancestor( $ancestor, $indexable_id, $parents ) ) { + continue; + } + + $parents[ $this->get_indexable_id( $ancestor ) ] = $ancestor; + } + } + + /** + * Gets the primary term ID for a post. + * + * @param WP_Post $post The post. + * + * @return int The primary term ID. 0 if none exists. + */ + private function find_primary_term_id_for_post( $post ) { + $main_taxonomy = $this->options->get( 'post_types-' . $post->post_type . '-maintax' ); + + if ( ! $main_taxonomy || $main_taxonomy === '0' ) { + return 0; + } + + $primary_term_id = $this->get_primary_term_id( $post->ID, $main_taxonomy ); + + if ( $primary_term_id ) { + $term = \get_term( $primary_term_id ); + if ( $term !== null && ! \is_wp_error( $term ) ) { + return $primary_term_id; + } + } + + $terms = \get_the_terms( $post->ID, $main_taxonomy ); + + if ( ! \is_array( $terms ) || empty( $terms ) ) { + return 0; + } + + return $this->find_deepest_term_id( $terms ); + } + + /** + * Find the deepest term in an array of term objects. + * + * @param array $terms Terms set. + * + * @return int The deepest term ID. + */ + private function find_deepest_term_id( $terms ) { + /* + * Let's find the deepest term in this array, by looping through and then + * unsetting every term that is used as a parent by another one in the array. + */ + $terms_by_id = []; + foreach ( $terms as $term ) { + $terms_by_id[ $term->term_id ] = $term; + } + foreach ( $terms as $term ) { + unset( $terms_by_id[ $term->parent ] ); + } + + /* + * As we could still have two subcategories, from different parent categories, + * let's pick the one with the lowest ordered ancestor. + */ + $parents_count = -1; + $term_order = 9999; // Because ASC. + $deepest_term = \reset( $terms_by_id ); + foreach ( $terms_by_id as $term ) { + $parents = $this->get_term_parents( $term ); + + $new_parents_count = \count( $parents ); + + if ( $new_parents_count < $parents_count ) { + continue; + } + + $parent_order = 9999; // Set default order. + foreach ( $parents as $parent ) { + if ( $parent->parent === 0 && isset( $parent->term_order ) ) { + $parent_order = $parent->term_order; + } + } + + // Check if parent has lowest order. + if ( $new_parents_count > $parents_count || $parent_order < $term_order ) { + $term_order = $parent_order; + $deepest_term = $term; + } + + $parents_count = $new_parents_count; + } + + return $deepest_term->term_id; + } + + /** + * Get a term's parents. + * + * @param WP_Term $term Term to get the parents for. + * + * @return WP_Term[] An array of all this term's parents. + */ + private function get_term_parents( $term ) { + $tax = $term->taxonomy; + $parents = []; + while ( (int) $term->parent !== 0 ) { + $term = \get_term( $term->parent, $tax ); + $parents[] = $term; + } + + return $parents; + } + + /** + * Checks if an ancestor is valid to add. + * + * @param Indexable $ancestor The ancestor (presumed indexable) to check. + * @param int $indexable_id The indexable id we're adding ancestors for. + * @param int[] $parents The indexable ids of the parents already added. + * + * @return bool + */ + private function is_invalid_ancestor( $ancestor, $indexable_id, $parents ) { + // If the ancestor is not an Indexable, it is invalid by default. + if ( ! \is_a( $ancestor, 'Yoast\WP\SEO\Models\Indexable' ) ) { + return true; + } + + // Don't add ancestors if they're unindexed, already added or the same as the main object. + if ( $ancestor->post_status === 'unindexed' ) { + return true; + } + + $ancestor_id = $this->get_indexable_id( $ancestor ); + if ( \array_key_exists( $ancestor_id, $parents ) ) { + return true; + } + + if ( $ancestor_id === $indexable_id ) { + return true; + } + + return false; + } + + /** + * Returns the ID for an indexable. Catches situations where the id is null due to errors. + * + * @param Indexable $indexable The indexable. + * + * @return string|int A unique ID for the indexable. + */ + private function get_indexable_id( Indexable $indexable ) { + if ( $indexable->id === 0 ) { + return "{$indexable->object_type}:{$indexable->object_id}"; + } + + return $indexable->id; + } + + /** + * Returns the primary term id of a post. + * + * @param int $post_id The post ID. + * @param string $main_taxonomy The main taxonomy. + * + * @return int The ID of the primary term. + */ + private function get_primary_term_id( $post_id, $main_taxonomy ) { + $primary_term = $this->primary_term_repository->find_by_post_id_and_taxonomy( $post_id, $main_taxonomy, false ); + + if ( $primary_term ) { + return $primary_term->term_id; + } + + return \get_post_meta( $post_id, WPSEO_Meta::$meta_prefix . 'primary_' . $main_taxonomy, true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-home-page-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-home-page-builder.php new file mode 100644 index 00000000..bb803fa3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-home-page-builder.php @@ -0,0 +1,148 @@ +options = $options; + $this->url_helper = $url_helper; + $this->version = $versions->get_latest_version_for_type( 'home-page' ); + $this->post_helper = $post_helper; + } + + /** + * Formats the data. + * + * @param Indexable $indexable The indexable to format. + * + * @return Indexable The extended indexable. + */ + public function build( $indexable ) { + $indexable->object_type = 'home-page'; + $indexable->title = $this->options->get( 'title-home-wpseo' ); + $indexable->breadcrumb_title = $this->options->get( 'breadcrumbs-home' ); + $indexable->permalink = $this->url_helper->home(); + $indexable->blog_id = \get_current_blog_id(); + $indexable->description = $this->options->get( 'metadesc-home-wpseo' ); + if ( empty( $indexable->description ) ) { + $indexable->description = \get_bloginfo( 'description' ); + } + + $indexable->is_robots_noindex = \get_option( 'blog_public' ) === '0'; + + $indexable->open_graph_title = $this->options->get( 'open_graph_frontpage_title' ); + $indexable->open_graph_image = $this->options->get( 'open_graph_frontpage_image' ); + $indexable->open_graph_image_id = $this->options->get( 'open_graph_frontpage_image_id' ); + $indexable->open_graph_description = $this->options->get( 'open_graph_frontpage_desc' ); + + // Reset the OG image source & meta. + $indexable->open_graph_image_source = null; + $indexable->open_graph_image_meta = null; + + // When the image or image id is set. + if ( $indexable->open_graph_image || $indexable->open_graph_image_id ) { + $indexable->open_graph_image_source = 'set-by-user'; + + $this->set_open_graph_image_meta_data( $indexable ); + } + + $timestamps = $this->get_object_timestamps(); + $indexable->object_published_at = $timestamps->published_at; + $indexable->object_last_modified = $timestamps->last_modified; + + $indexable->version = $this->version; + + return $indexable; + } + + /** + * Returns the timestamps for the homepage. + * + * @return object An object with last_modified and published_at timestamps. + */ + protected function get_object_timestamps() { + global $wpdb; + $post_statuses = $this->post_helper->get_public_post_statuses(); + + $replacements = []; + $replacements[] = 'post_modified_gmt'; + $replacements[] = 'post_date_gmt'; + $replacements[] = $wpdb->posts; + $replacements[] = 'post_status'; + $replacements = \array_merge( $replacements, $post_statuses ); + $replacements[] = 'post_password'; + $replacements[] = 'post_type'; + + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + return $wpdb->get_row( + $wpdb->prepare( + ' + SELECT MAX(p.%i) AS last_modified, MIN(p.%i) AS published_at + FROM %i AS p + WHERE p.%i IN (' . \implode( ', ', \array_fill( 0, \count( $post_statuses ), '%s' ) ) . ") + AND p.%i = '' + AND p.%i = 'post' + ", + $replacements + ) + ); + //phpcs:enable + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-link-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-link-builder.php new file mode 100644 index 00000000..ca703c2c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-link-builder.php @@ -0,0 +1,732 @@ +seo_links_repository = $seo_links_repository; + $this->url_helper = $url_helper; + $this->post_helper = $post_helper; + $this->options_helper = $options_helper; + $this->indexable_helper = $indexable_helper; + } + + /** + * Sets the indexable repository. + * + * @required + * + * @param Indexable_Repository $indexable_repository The indexable repository. + * @param Image_Helper $image_helper The image helper. + * + * @return void + */ + public function set_dependencies( + Indexable_Repository $indexable_repository, + Image_Helper $image_helper + ) { + $this->indexable_repository = $indexable_repository; + $this->image_helper = $image_helper; + } + + /** + * Builds the links for a post. + * + * @param Indexable $indexable The indexable. + * @param string $content The content. Expected to be unfiltered. + * + * @return SEO_Links[] The created SEO links. + */ + public function build( $indexable, $content ) { + if ( ! $this->indexable_helper->should_index_indexable( $indexable ) ) { + return []; + } + + global $post; + if ( $indexable->object_type === 'post' ) { + $post_backup = $post; + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- To setup the post we need to do this explicitly. + $post = $this->post_helper->get_post( $indexable->object_id ); + \setup_postdata( $post ); + $content = \apply_filters( 'the_content', $content ); + \wp_reset_postdata(); + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- To setup the post we need to do this explicitly. + $post = $post_backup; + } + + $content = \str_replace( ']]>', ']]>', $content ); + $links = $this->gather_links( $content ); + $images = $this->gather_images( $content ); + + if ( empty( $links ) && empty( $images ) ) { + $indexable->link_count = 0; + $this->update_related_indexables( $indexable, [] ); + + return []; + } + + $links = $this->create_links( $indexable, $links, $images ); + + $this->update_related_indexables( $indexable, $links ); + + $indexable->link_count = $this->get_internal_link_count( $links ); + + return $links; + } + + /** + * Deletes all SEO links for an indexable. + * + * @param Indexable $indexable The indexable. + * + * @return void + */ + public function delete( $indexable ) { + $links = ( $this->seo_links_repository->find_all_by_indexable_id( $indexable->id ) ); + $this->seo_links_repository->delete_all_by_indexable_id( $indexable->id ); + + $linked_indexable_ids = []; + foreach ( $links as $link ) { + if ( $link->target_indexable_id ) { + $linked_indexable_ids[] = $link->target_indexable_id; + } + } + + $this->update_incoming_links_for_related_indexables( $linked_indexable_ids ); + } + + /** + * Fixes existing SEO links that are supposed to have a target indexable but don't, because of prior indexable + * cleanup. + * + * @param Indexable $indexable The indexable to be the target of SEO Links. + * + * @return void + */ + public function patch_seo_links( Indexable $indexable ) { + if ( ! empty( $indexable->id ) && ! empty( $indexable->object_id ) ) { + $links = $this->seo_links_repository->find_all_by_target_post_id( $indexable->object_id ); + + $updated_indexable = false; + foreach ( $links as $link ) { + if ( \is_a( $link, SEO_Links::class ) && empty( $link->target_indexable_id ) ) { + // Since that post ID exists in an SEO link but has no target_indexable_id, it's probably because of prior indexable cleanup. + $this->seo_links_repository->update_target_indexable_id( $link->id, $indexable->id ); + $updated_indexable = true; + } + } + + if ( $updated_indexable ) { + $updated_indexable_id = [ $indexable->id ]; + $this->update_incoming_links_for_related_indexables( $updated_indexable_id ); + } + } + } + + /** + * Gathers all links from content. + * + * @param string $content The content. + * + * @return string[] An array of urls. + */ + protected function gather_links( $content ) { + if ( \strpos( $content, 'href' ) === false ) { + // Nothing to do. + return []; + } + + $links = []; + $regexp = ']*href=("??)([^" >]*?)\1[^>]*>'; + // Used modifiers iU to match case insensitive and make greedy quantifiers lazy. + if ( \preg_match_all( "/$regexp/iU", $content, $matches, \PREG_SET_ORDER ) ) { + foreach ( $matches as $match ) { + $links[] = \trim( $match[2], "'" ); + } + } + + return $links; + } + + /** + * Gathers all images from content with WP's WP_HTML_Tag_Processor() and returns them along with their IDs, if + * possible. + * + * @param string $content The content. + * + * @return int[] An associated array of image IDs, keyed by their URL. + */ + protected function gather_images_wp( $content ) { + $processor = new WP_HTML_Tag_Processor( $content ); + $images = []; + + $query = [ + 'tag_name' => 'img', + ]; + + /** + * Filter 'wpseo_image_attribute_containing_id' - Allows filtering what attribute will be used to extract image IDs from. + * + * Defaults to "class", which is where WP natively stores the image IDs, in a `wp-image-` format. + * + * @api string The attribute to be used to extract image IDs from. + */ + $attribute = \apply_filters( 'wpseo_image_attribute_containing_id', 'class' ); + + while ( $processor->next_tag( $query ) ) { + $src = \htmlentities( $processor->get_attribute( 'src' ), ( \ENT_QUOTES | \ENT_SUBSTITUTE | \ENT_HTML401 ), \get_bloginfo( 'charset' ) ); + $classes = $processor->get_attribute( $attribute ); + $id = $this->extract_id_of_classes( $classes ); + + $images[ $src ] = $id; + } + + return $images; + } + + /** + * Gathers all images from content with DOMDocument() and returns them along with their IDs, if possible. + * + * @param string $content The content. + * + * @return int[] An associated array of image IDs, keyed by their URL. + */ + protected function gather_images_domdocument( $content ) { + $images = []; + $charset = \get_bloginfo( 'charset' ); + + /** + * Filter 'wpseo_image_attribute_containing_id' - Allows filtering what attribute will be used to extract image IDs from. + * + * Defaults to "class", which is where WP natively stores the image IDs, in a `wp-image-` format. + * + * @api string The attribute to be used to extract image IDs from. + */ + $attribute = \apply_filters( 'wpseo_image_attribute_containing_id', 'class' ); + + \libxml_use_internal_errors( true ); + $post_dom = new DOMDocument(); + $post_dom->loadHTML( '' . $content ); + \libxml_clear_errors(); + + foreach ( $post_dom->getElementsByTagName( 'img' ) as $img ) { + $src = \htmlentities( $img->getAttribute( 'src' ), ( \ENT_QUOTES | \ENT_SUBSTITUTE | \ENT_HTML401 ), $charset ); + $classes = $img->getAttribute( $attribute ); + $id = $this->extract_id_of_classes( $classes ); + + $images[ $src ] = $id; + } + + return $images; + } + + /** + * Extracts image ID out of the image's classes. + * + * @param string $classes The classes assigned to the image. + * + * @return int The ID that's extracted from the classes. + */ + protected function extract_id_of_classes( $classes ) { + if ( ! $classes ) { + return 0; + } + + /** + * Filter 'wpseo_extract_id_pattern' - Allows filtering the regex patern to be used to extract image IDs from class/attribute names. + * + * Defaults to the pattern that extracts image IDs from core's `wp-image-` native format in image classes. + * + * @api string The regex pattern to be used to extract image IDs from class names. Empty string if the whole class/attribute should be returned. + */ + $pattern = \apply_filters( 'wpseo_extract_id_pattern', '/(?gather_images_wp( $content ); + } + + if ( ! $should_not_parse_content && \class_exists( DOMDocument::class ) ) { + return $this->gather_images_DOMDocument( $content ); + } + + if ( \strpos( $content, 'src' ) === false ) { + // Nothing to do. + return []; + } + + $images = []; + $regexp = ']*src=("??)([^" >]*?)\\1[^>]*>'; + // Used modifiers iU to match case insensitive and make greedy quantifiers lazy. + if ( \preg_match_all( "/$regexp/iU", $content, $matches, \PREG_SET_ORDER ) ) { + foreach ( $matches as $match ) { + $images[ $match[2] ] = 0; + } + } + + return $images; + } + + /** + * Creates link models from lists of URLs and image sources. + * + * @param Indexable $indexable The indexable. + * @param string[] $links The link URLs. + * @param int[] $images The image sources. + * + * @return SEO_Links[] The link models. + */ + protected function create_links( $indexable, $links, $images ) { + $home_url = \wp_parse_url( \home_url() ); + $current_url = \wp_parse_url( $indexable->permalink ); + $links = \array_map( + function ( $link ) use ( $home_url, $indexable ) { + return $this->create_internal_link( $link, $home_url, $indexable ); + }, + $links + ); + // Filter out links to the same page with a fragment or query. + $links = \array_filter( + $links, + function ( $link ) use ( $current_url ) { + return $this->filter_link( $link, $current_url ); + } + ); + + $image_links = []; + foreach ( $images as $image_url => $image_id ) { + $image_links[] = $this->create_internal_link( $image_url, $home_url, $indexable, true, $image_id ); + } + + return \array_merge( $links, $image_links ); + } + + /** + * Get the post ID based on the link's type and its target's permalink. + * + * @param string $type The type of link (either SEO_Links::TYPE_INTERNAL or SEO_Links::TYPE_INTERNAL_IMAGE). + * @param string $permalink The permalink of the link's target. + * + * @return int The post ID. + */ + protected function get_post_id( $type, $permalink ) { + if ( $type === SEO_Links::TYPE_INTERNAL ) { + return \url_to_postid( $permalink ); + } + + return $this->image_helper->get_attachment_by_url( $permalink ); + } + + /** + * Creates an internal link. + * + * @param string $url The url of the link. + * @param array $home_url The home url, as parsed by wp_parse_url. + * @param Indexable $indexable The indexable of the post containing the link. + * @param bool $is_image Whether or not the link is an image. + * @param int $image_id The ID of the internal image. + * + * @return SEO_Links The created link. + */ + protected function create_internal_link( $url, $home_url, $indexable, $is_image = false, $image_id = 0 ) { + $parsed_url = \wp_parse_url( $url ); + $link_type = $this->url_helper->get_link_type( $parsed_url, $home_url, $is_image ); + + /** + * ORM representing a link in the SEO Links table. + * + * @var SEO_Links $model + */ + $model = $this->seo_links_repository->query()->create( + [ + 'url' => $url, + 'type' => $link_type, + 'indexable_id' => $indexable->id, + 'post_id' => $indexable->object_id, + ] + ); + + $model->parsed_url = $parsed_url; + + if ( $model->type === SEO_Links::TYPE_INTERNAL ) { + $permalink = $this->build_permalink( $url, $home_url ); + + return $this->enhance_link_from_indexable( $model, $permalink ); + } + + if ( $model->type === SEO_Links::TYPE_INTERNAL_IMAGE ) { + $permalink = $this->build_permalink( $url, $home_url ); + + /** The `wpseo_force_creating_and_using_attachment_indexables` filter is documented in indexable-link-builder.php */ + if ( ! $this->options_helper->get( 'disable-attachment' ) || \apply_filters( 'wpseo_force_creating_and_using_attachment_indexables', false ) ) { + $model = $this->enhance_link_from_indexable( $model, $permalink ); + } + else { + $target_post_id = ( $image_id !== 0 ) ? $image_id : WPSEO_Image_Utils::get_attachment_by_url( $permalink ); + + if ( ! empty( $target_post_id ) ) { + $model->target_post_id = $target_post_id; + } + } + + if ( $model->target_post_id ) { + $file = \get_attached_file( $model->target_post_id ); + + if ( $file ) { + if ( \file_exists( $file ) ) { + $model->size = \filesize( $file ); + } + else { + $model->size = null; + } + + [ , $width, $height ] = \wp_get_attachment_image_src( $model->target_post_id, 'full' ); + $model->width = $width; + $model->height = $height; + } + else { + $model->width = 0; + $model->height = 0; + $model->size = 0; + } + } + } + + return $model; + } + + /** + * Enhances the link model with information from its indexable. + * + * @param SEO_Links $model The link's model. + * @param string $permalink The link's permalink. + * + * @return SEO_Links The enhanced link model. + */ + protected function enhance_link_from_indexable( $model, $permalink ) { + $target = $this->indexable_repository->find_by_permalink( $permalink ); + + if ( ! $target ) { + // If target indexable cannot be found, create one based on the post's post ID. + $post_id = $this->get_post_id( $model->type, $permalink ); + if ( $post_id && $post_id !== 0 ) { + $target = $this->indexable_repository->find_by_id_and_type( $post_id, 'post' ); + } + } + + if ( ! $target ) { + return $model; + } + + $model->target_indexable_id = $target->id; + if ( $target->object_type === 'post' ) { + $model->target_post_id = $target->object_id; + } + + if ( $model->target_indexable_id ) { + $model->language = $target->language; + $model->region = $target->region; + } + + return $model; + } + + /** + * Builds the link's permalink. + * + * @param string $url The url of the link. + * @param array $home_url The home url, as parsed by wp_parse_url. + * + * @return string The link's permalink. + */ + protected function build_permalink( $url, $home_url ) { + $permalink = $this->get_permalink( $url, $home_url ); + + if ( $this->url_helper->is_relative( $permalink ) ) { + // Make sure we're checking against the absolute URL, and add a trailing slash if the site has a trailing slash in its permalink settings. + $permalink = $this->url_helper->ensure_absolute_url( \user_trailingslashit( $permalink ) ); + } + + return $permalink; + } + + /** + * Filters out links that point to the same page with a fragment or query. + * + * @param SEO_Links $link The link. + * @param array $current_url The url of the page the link is on, as parsed by wp_parse_url. + * + * @return bool Whether or not the link should be filtered. + */ + protected function filter_link( SEO_Links $link, $current_url ) { + $url = $link->parsed_url; + + // Always keep external links. + if ( $link->type === SEO_Links::TYPE_EXTERNAL ) { + return true; + } + + // Always keep links with an empty path or pointing to other pages. + if ( isset( $url['path'] ) ) { + return empty( $url['path'] ) || $url['path'] !== $current_url['path']; + } + + // Only keep links to the current page without a fragment or query. + return ( ! isset( $url['fragment'] ) && ! isset( $url['query'] ) ); + } + + /** + * Updates the link counts for related indexables. + * + * @param Indexable $indexable The indexable. + * @param SEO_Links[] $links The link models. + * + * @return void + */ + protected function update_related_indexables( $indexable, $links ) { + // Old links were only stored by post id, so remove all old seo links for this post that have no indexable id. + // This can be removed if we ever fully clear all seo links. + if ( $indexable->object_type === 'post' ) { + $this->seo_links_repository->delete_all_by_post_id_where_indexable_id_null( $indexable->object_id ); + } + + $updated_indexable_ids = []; + $old_links = $this->seo_links_repository->find_all_by_indexable_id( $indexable->id ); + + $links_to_remove = $this->links_diff( $old_links, $links ); + $links_to_add = $this->links_diff( $links, $old_links ); + + if ( ! empty( $links_to_remove ) ) { + $this->seo_links_repository->delete_many_by_id( \wp_list_pluck( $links_to_remove, 'id' ) ); + } + + if ( ! empty( $links_to_add ) ) { + $this->seo_links_repository->insert_many( $links_to_add ); + } + + foreach ( $links_to_add as $link ) { + if ( $link->target_indexable_id ) { + $updated_indexable_ids[] = $link->target_indexable_id; + } + } + foreach ( $links_to_remove as $link ) { + if ( $link->target_indexable_id ) { + $updated_indexable_ids[] = $link->target_indexable_id; + } + } + + $this->update_incoming_links_for_related_indexables( $updated_indexable_ids ); + } + + /** + * Creates a diff between two arrays of SEO links, based on urls. + * + * @param SEO_Links[] $links_a The array to compare. + * @param SEO_Links[] $links_b The array to compare against. + * + * @return SEO_Links[] Links that are in $links_a, but not in $links_b. + */ + protected function links_diff( $links_a, $links_b ) { + return \array_udiff( + $links_a, + $links_b, + static function ( SEO_Links $link_a, SEO_Links $link_b ) { + return \strcmp( $link_a->url, $link_b->url ); + } + ); + } + + /** + * Returns the number of internal links in an array of link models. + * + * @param SEO_Links[] $links The link models. + * + * @return int The number of internal links. + */ + protected function get_internal_link_count( $links ) { + $internal_link_count = 0; + + foreach ( $links as $link ) { + if ( $link->type === SEO_Links::TYPE_INTERNAL ) { + ++$internal_link_count; + } + } + + return $internal_link_count; + } + + /** + * Returns a cleaned permalink for a given link. + * + * @param string $link The raw URL. + * @param array $home_url The home URL, as parsed by wp_parse_url. + * + * @return string The cleaned permalink. + */ + protected function get_permalink( $link, $home_url ) { + // Get rid of the #anchor. + $url_split = \explode( '#', $link ); + $link = $url_split[0]; + + // Get rid of URL ?query=string. + $url_split = \explode( '?', $link ); + $link = $url_split[0]; + + // Set the correct URL scheme. + $link = \set_url_scheme( $link, $home_url['scheme'] ); + + // Add 'www.' if it is absent and should be there. + if ( \strpos( $home_url['host'], 'www.' ) === 0 && \strpos( $link, '://www.' ) === false ) { + $link = \str_replace( '://', '://www.', $link ); + } + + // Strip 'www.' if it is present and shouldn't be. + if ( \strpos( $home_url['host'], 'www.' ) !== 0 ) { + $link = \str_replace( '://www.', '://', $link ); + } + + return $link; + } + + /** + * Updates incoming link counts for related indexables. + * + * @param int[] $related_indexable_ids The IDs of all related indexables. + * + * @return void + */ + protected function update_incoming_links_for_related_indexables( $related_indexable_ids ) { + if ( empty( $related_indexable_ids ) ) { + return; + } + + $counts = $this->seo_links_repository->get_incoming_link_counts_for_indexable_ids( $related_indexable_ids ); + if ( \wp_cache_supports( 'flush_group' ) ) { + \wp_cache_flush_group( 'orphaned_counts' ); + } + + foreach ( $counts as $count ) { + $this->indexable_repository->update_incoming_link_count( $count['target_indexable_id'], $count['incoming'] ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-builder.php new file mode 100644 index 00000000..16eef3e1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-builder.php @@ -0,0 +1,433 @@ +post_helper = $post_helper; + $this->post_type_helper = $post_type_helper; + $this->version = $versions->get_latest_version_for_type( 'post' ); + $this->meta = $meta; + } + + /** + * Sets the indexable repository. Done to avoid circular dependencies. + * + * @required + * + * @param Indexable_Repository $indexable_repository The indexable repository. + * + * @return void + */ + public function set_indexable_repository( Indexable_Repository $indexable_repository ) { + $this->indexable_repository = $indexable_repository; + } + + /** + * Formats the data. + * + * @param int $post_id The post ID to use. + * @param Indexable $indexable The indexable to format. + * + * @return bool|Indexable The extended indexable. False when unable to build. + * + * @throws Post_Not_Found_Exception When the post could not be found. + * @throws Post_Not_Built_Exception When the post should not be indexed. + */ + public function build( $post_id, $indexable ) { + if ( ! $this->post_helper->is_post_indexable( $post_id ) ) { + throw Post_Not_Built_Exception::because_not_indexable( $post_id ); + } + + $post = $this->post_helper->get_post( $post_id ); + + if ( $post === null ) { + throw new Post_Not_Found_Exception(); + } + + if ( $this->should_exclude_post( $post ) ) { + throw Post_Not_Built_Exception::because_post_type_excluded( $post_id ); + } + + $indexable->object_id = $post_id; + $indexable->object_type = 'post'; + $indexable->object_sub_type = $post->post_type; + $indexable->permalink = $this->get_permalink( $post->post_type, $post_id ); + + $indexable->primary_focus_keyword_score = $this->get_keyword_score( + $this->meta->get_value( 'focuskw', $post_id ), + (int) $this->meta->get_value( 'linkdex', $post_id ) + ); + + $indexable->readability_score = (int) $this->meta->get_value( 'content_score', $post_id ); + + $indexable->inclusive_language_score = (int) $this->meta->get_value( 'inclusive_language_score', $post_id ); + + $indexable->is_cornerstone = ( $this->meta->get_value( 'is_cornerstone', $post_id ) === '1' ); + $indexable->is_robots_noindex = $this->get_robots_noindex( + (int) $this->meta->get_value( 'meta-robots-noindex', $post_id ) + ); + + // Set additional meta-robots values. + $indexable->is_robots_nofollow = ( $this->meta->get_value( 'meta-robots-nofollow', $post_id ) === '1' ); + $noindex_advanced = $this->meta->get_value( 'meta-robots-adv', $post_id ); + $meta_robots = \explode( ',', $noindex_advanced ); + + foreach ( $this->get_robots_options() as $meta_robots_option ) { + $indexable->{'is_robots_' . $meta_robots_option} = \in_array( $meta_robots_option, $meta_robots, true ) ? 1 : null; + } + + $this->reset_social_images( $indexable ); + + foreach ( $this->get_indexable_lookup() as $meta_key => $indexable_key ) { + $indexable->{$indexable_key} = $this->empty_string_to_null( $this->meta->get_value( $meta_key, $post_id ) ); + } + + if ( empty( $indexable->breadcrumb_title ) ) { + $indexable->breadcrumb_title = \wp_strip_all_tags( \get_the_title( $post_id ), true ); + } + + $this->handle_social_images( $indexable ); + + $indexable->author_id = $post->post_author; + $indexable->post_parent = $post->post_parent; + + $indexable->number_of_pages = $this->get_number_of_pages_for_post( $post ); + $indexable->post_status = $post->post_status; + $indexable->is_protected = $post->post_password !== ''; + $indexable->is_public = $this->is_public( $indexable ); + $indexable->has_public_posts = $this->has_public_posts( $indexable ); + $indexable->blog_id = \get_current_blog_id(); + + $indexable->schema_page_type = $this->empty_string_to_null( $this->meta->get_value( 'schema_page_type', $post_id ) ); + $indexable->schema_article_type = $this->empty_string_to_null( $this->meta->get_value( 'schema_article_type', $post_id ) ); + + $indexable->object_last_modified = $post->post_modified_gmt; + $indexable->object_published_at = $post->post_date_gmt; + + $indexable->version = $this->version; + + return $indexable; + } + + /** + * Retrieves the permalink for a post with the given post type and ID. + * + * @param string $post_type The post type. + * @param int $post_id The post ID. + * + * @return false|string|WP_Error The permalink. + */ + protected function get_permalink( $post_type, $post_id ) { + if ( $post_type !== 'attachment' ) { + return \get_permalink( $post_id ); + } + + return \wp_get_attachment_url( $post_id ); + } + + /** + * Determines the value of is_public. + * + * @param Indexable $indexable The indexable. + * + * @return bool|null Whether or not the post type is public. Null if no override is set. + */ + protected function is_public( $indexable ) { + if ( $indexable->is_protected === true ) { + return false; + } + + if ( $indexable->is_robots_noindex === true ) { + return false; + } + + // Attachments behave differently than the other post types, since they inherit from their parent. + if ( $indexable->object_sub_type === 'attachment' ) { + return $this->is_public_attachment( $indexable ); + } + + if ( ! \in_array( $indexable->post_status, $this->post_helper->get_public_post_statuses(), true ) ) { + return false; + } + + if ( $indexable->is_robots_noindex === false ) { + return true; + } + + return null; + } + + /** + * Determines the value of is_public for attachments. + * + * @param Indexable $indexable The indexable. + * + * @return bool|null False when it has no parent. Null when it has a parent. + */ + protected function is_public_attachment( $indexable ) { + // If the attachment has no parent, it should not be public. + if ( empty( $indexable->post_parent ) ) { + return false; + } + + // If the attachment has a parent, the is_public should be NULL. + return null; + } + + /** + * Determines the value of has_public_posts. + * + * @param Indexable $indexable The indexable. + * + * @return bool|null Whether the attachment has a public parent, can be true, false and null. Null when it is not an attachment. + */ + protected function has_public_posts( $indexable ) { + // Only attachments (and authors) have this value. + if ( $indexable->object_sub_type !== 'attachment' ) { + return null; + } + + // The attachment should have a post parent. + if ( empty( $indexable->post_parent ) ) { + return false; + } + + // The attachment should inherit the post status. + if ( $indexable->post_status !== 'inherit' ) { + return false; + } + + // The post parent should be public. + $post_parent_indexable = $this->indexable_repository->find_by_id_and_type( $indexable->post_parent, 'post' ); + if ( $post_parent_indexable !== false ) { + return $post_parent_indexable->is_public; + } + + return false; + } + + /** + * Converts the meta robots noindex value to the indexable value. + * + * @param int $value Meta value to convert. + * + * @return bool|null True for noindex, false for index, null for default of parent/type. + */ + protected function get_robots_noindex( $value ) { + $value = (int) $value; + + switch ( $value ) { + case 1: + return true; + case 2: + return false; + } + + return null; + } + + /** + * Retrieves the robot options to search for. + * + * @return array List of robots values. + */ + protected function get_robots_options() { + return [ 'noimageindex', 'noarchive', 'nosnippet' ]; + } + + /** + * Determines the focus keyword score. + * + * @param string $keyword The focus keyword that is set. + * @param int $score The score saved on the meta data. + * + * @return int|null Score to use. + */ + protected function get_keyword_score( $keyword, $score ) { + if ( empty( $keyword ) ) { + return null; + } + + return $score; + } + + /** + * Retrieves the lookup table. + * + * @return array Lookup table for the indexable fields. + */ + protected function get_indexable_lookup() { + return [ + 'focuskw' => 'primary_focus_keyword', + 'canonical' => 'canonical', + 'title' => 'title', + 'metadesc' => 'description', + 'bctitle' => 'breadcrumb_title', + 'opengraph-title' => 'open_graph_title', + 'opengraph-image' => 'open_graph_image', + 'opengraph-image-id' => 'open_graph_image_id', + 'opengraph-description' => 'open_graph_description', + 'twitter-title' => 'twitter_title', + 'twitter-image' => 'twitter_image', + 'twitter-image-id' => 'twitter_image_id', + 'twitter-description' => 'twitter_description', + 'estimated-reading-time-minutes' => 'estimated_reading_time_minutes', + ]; + } + + /** + * Finds an alternative image for the social image. + * + * @param Indexable $indexable The indexable. + * + * @return array|bool False when not found, array with data when found. + */ + protected function find_alternative_image( Indexable $indexable ) { + if ( + $indexable->object_sub_type === 'attachment' + && $this->image->is_valid_attachment( $indexable->object_id ) + ) { + return [ + 'image_id' => $indexable->object_id, + 'source' => 'attachment-image', + ]; + } + + $featured_image_id = $this->image->get_featured_image_id( $indexable->object_id ); + if ( $featured_image_id ) { + return [ + 'image_id' => $featured_image_id, + 'source' => 'featured-image', + ]; + } + + $gallery_image = $this->image->get_gallery_image( $indexable->object_id ); + if ( $gallery_image ) { + return [ + 'image' => $gallery_image, + 'source' => 'gallery-image', + ]; + } + + $content_image = $this->image->get_post_content_image( $indexable->object_id ); + if ( $content_image ) { + return [ + 'image' => $content_image, + 'source' => 'first-content-image', + ]; + } + + return false; + } + + /** + * Gets the number of pages for a post. + * + * @param object $post The post object. + * + * @return int|null The number of pages or null if the post isn't paginated. + */ + protected function get_number_of_pages_for_post( $post ) { + $number_of_pages = ( \substr_count( $post->post_content, '' ) + 1 ); + + if ( $number_of_pages <= 1 ) { + return null; + } + + return $number_of_pages; + } + + /** + * Checks whether an indexable should be built for this post. + * + * @param WP_Post $post The post for which an indexable should be built. + * + * @return bool `true` if the post should be excluded from building, `false` if not. + */ + protected function should_exclude_post( $post ) { + return $this->post_type_helper->is_excluded( $post->post_type ); + } + + /** + * Transforms an empty string into null. Leaves non-empty strings intact. + * + * @param string $text The string. + * + * @return string|null The input string or null. + */ + protected function empty_string_to_null( $text ) { + if ( ! \is_string( $text ) || $text === '' ) { + return null; + } + + return $text; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-type-archive-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-type-archive-builder.php new file mode 100644 index 00000000..3d04aa5d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-post-type-archive-builder.php @@ -0,0 +1,168 @@ +options = $options; + $this->version = $versions->get_latest_version_for_type( 'post-type-archive' ); + $this->post_helper = $post_helper; + $this->post_type_helper = $post_type_helper; + } + + /** + * Formats the data. + * + * @param string $post_type The post type to build the indexable for. + * @param Indexable $indexable The indexable to format. + * + * @return Indexable The extended indexable. + * @throws Post_Type_Not_Built_Exception Throws exception if the post type is excluded. + */ + public function build( $post_type, Indexable $indexable ) { + if ( ! $this->post_type_helper->is_post_type_archive_indexable( $post_type ) ) { + throw Post_Type_Not_Built_Exception::because_not_indexable( $post_type ); + } + + $indexable->object_type = 'post-type-archive'; + $indexable->object_sub_type = $post_type; + $indexable->title = $this->options->get( 'title-ptarchive-' . $post_type ); + $indexable->description = $this->options->get( 'metadesc-ptarchive-' . $post_type ); + $indexable->breadcrumb_title = $this->get_breadcrumb_title( $post_type ); + $indexable->permalink = \get_post_type_archive_link( $post_type ); + $indexable->is_robots_noindex = $this->options->get( 'noindex-ptarchive-' . $post_type ); + $indexable->is_public = ( (int) $indexable->is_robots_noindex !== 1 ); + $indexable->blog_id = \get_current_blog_id(); + $indexable->version = $this->version; + + $timestamps = $this->get_object_timestamps( $post_type ); + $indexable->object_published_at = $timestamps->published_at; + $indexable->object_last_modified = $timestamps->last_modified; + + return $indexable; + } + + /** + * Returns the fallback breadcrumb title for a given post. + * + * @param string $post_type The post type to get the fallback breadcrumb title for. + * + * @return string + */ + private function get_breadcrumb_title( $post_type ) { + $options_breadcrumb_title = $this->options->get( 'bctitle-ptarchive-' . $post_type ); + + if ( $options_breadcrumb_title !== '' ) { + return $options_breadcrumb_title; + } + + $post_type_obj = \get_post_type_object( $post_type ); + + if ( ! \is_object( $post_type_obj ) ) { + return ''; + } + + if ( isset( $post_type_obj->label ) && $post_type_obj->label !== '' ) { + return $post_type_obj->label; + } + + if ( isset( $post_type_obj->labels->menu_name ) && $post_type_obj->labels->menu_name !== '' ) { + return $post_type_obj->labels->menu_name; + } + + return $post_type_obj->name; + } + + /** + * Returns the timestamps for a given post type. + * + * @param string $post_type The post type. + * + * @return object An object with last_modified and published_at timestamps. + */ + protected function get_object_timestamps( $post_type ) { + global $wpdb; + $post_statuses = $this->post_helper->get_public_post_statuses(); + + $replacements = []; + $replacements[] = 'post_modified_gmt'; + $replacements[] = 'post_date_gmt'; + $replacements[] = $wpdb->posts; + $replacements[] = 'post_status'; + $replacements = \array_merge( $replacements, $post_statuses ); + $replacements[] = 'post_password'; + $replacements[] = 'post_type'; + $replacements[] = $post_type; + + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to use a direct query here. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + return $wpdb->get_row( + $wpdb->prepare( + ' + SELECT MAX(p.%i) AS last_modified, MIN(p.%i) AS published_at + FROM %i AS p + WHERE p.%i IN (' . \implode( ', ', \array_fill( 0, \count( $post_statuses ), '%s' ) ) . ") + AND p.%i = '' + AND p.%i = %s + ", + $replacements + ) + ); + //phpcs:enable + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-social-image-trait.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-social-image-trait.php new file mode 100644 index 00000000..3d702c7a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-social-image-trait.php @@ -0,0 +1,168 @@ +image = $image; + $this->open_graph_image = $open_graph_image; + $this->twitter_image = $twitter_image; + } + + /** + * Sets the alternative on an indexable. + * + * @param array $alternative_image The alternative image to set. + * @param Indexable $indexable The indexable to set image for. + * + * @return void + */ + protected function set_alternative_image( array $alternative_image, Indexable $indexable ) { + if ( ! empty( $alternative_image['image_id'] ) ) { + if ( ! $indexable->open_graph_image_source && ! $indexable->open_graph_image_id ) { + $indexable->open_graph_image_id = $alternative_image['image_id']; + $indexable->open_graph_image_source = $alternative_image['source']; + + $this->set_open_graph_image_meta_data( $indexable ); + } + + if ( ! $indexable->twitter_image && ! $indexable->twitter_image_id ) { + $indexable->twitter_image = $this->twitter_image->get_by_id( $alternative_image['image_id'] ); + $indexable->twitter_image_id = $alternative_image['image_id']; + $indexable->twitter_image_source = $alternative_image['source']; + } + } + + if ( ! empty( $alternative_image['image'] ) ) { + if ( ! $indexable->open_graph_image_source && ! $indexable->open_graph_image_id ) { + $indexable->open_graph_image = $alternative_image['image']; + $indexable->open_graph_image_source = $alternative_image['source']; + } + + if ( ! $indexable->twitter_image && ! $indexable->twitter_image_id ) { + $indexable->twitter_image = $alternative_image['image']; + $indexable->twitter_image_source = $alternative_image['source']; + } + } + } + + /** + * Sets the Open Graph image meta data for an og image + * + * @param Indexable $indexable The indexable. + * + * @return void + */ + protected function set_open_graph_image_meta_data( Indexable $indexable ) { + if ( ! $indexable->open_graph_image_id ) { + return; + } + + $image = $this->open_graph_image->get_image_by_id( $indexable->open_graph_image_id ); + + if ( ! empty( $image ) ) { + $indexable->open_graph_image = $image['url']; + $indexable->open_graph_image_meta = WPSEO_Utils::format_json_encode( $image ); + } + } + + /** + * Handles the social images. + * + * @param Indexable $indexable The indexable to handle. + * + * @return void + */ + protected function handle_social_images( Indexable $indexable ) { + // When the image or image id is set. + if ( $indexable->open_graph_image || $indexable->open_graph_image_id ) { + $indexable->open_graph_image_source = 'set-by-user'; + + $this->set_open_graph_image_meta_data( $indexable ); + } + + if ( $indexable->twitter_image || $indexable->twitter_image_id ) { + $indexable->twitter_image_source = 'set-by-user'; + } + + if ( $indexable->twitter_image_id ) { + $indexable->twitter_image = $this->twitter_image->get_by_id( $indexable->twitter_image_id ); + } + + // When image sources are set already. + if ( $indexable->open_graph_image_source && $indexable->twitter_image_source ) { + return; + } + + $alternative_image = $this->find_alternative_image( $indexable ); + if ( ! empty( $alternative_image ) ) { + $this->set_alternative_image( $alternative_image, $indexable ); + } + } + + /** + * Resets the social images. + * + * @param Indexable $indexable The indexable to set images for. + * + * @return void + */ + protected function reset_social_images( Indexable $indexable ) { + $indexable->open_graph_image = null; + $indexable->open_graph_image_id = null; + $indexable->open_graph_image_source = null; + $indexable->open_graph_image_meta = null; + + $indexable->twitter_image = null; + $indexable->twitter_image_id = null; + $indexable->twitter_image_source = null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-system-page-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-system-page-builder.php new file mode 100644 index 00000000..ffb487b8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-system-page-builder.php @@ -0,0 +1,80 @@ + [ + 'title' => 'title-search-wpseo', + ], + '404' => [ + 'title' => 'title-404-wpseo', + 'breadcrumb_title' => 'breadcrumbs-404crumb', + ], + ]; + + /** + * The options helper. + * + * @var Options_Helper + */ + protected $options; + + /** + * The latest version of the Indexable_System_Page_Builder. + * + * @var int + */ + protected $version; + + /** + * Indexable_System_Page_Builder constructor. + * + * @param Options_Helper $options The options helper. + * @param Indexable_Builder_Versions $versions The latest version of each Indexable Builder. + */ + public function __construct( + Options_Helper $options, + Indexable_Builder_Versions $versions + ) { + $this->options = $options; + $this->version = $versions->get_latest_version_for_type( 'system-page' ); + } + + /** + * Formats the data. + * + * @param string $object_sub_type The object sub type of the system page. + * @param Indexable $indexable The indexable to format. + * + * @return Indexable The extended indexable. + */ + public function build( $object_sub_type, Indexable $indexable ) { + $indexable->object_type = 'system-page'; + $indexable->object_sub_type = $object_sub_type; + $indexable->title = $this->options->get( static::OPTION_MAPPING[ $object_sub_type ]['title'] ); + $indexable->is_robots_noindex = true; + $indexable->blog_id = \get_current_blog_id(); + + if ( \array_key_exists( 'breadcrumb_title', static::OPTION_MAPPING[ $object_sub_type ] ) ) { + $indexable->breadcrumb_title = $this->options->get( static::OPTION_MAPPING[ $object_sub_type ]['breadcrumb_title'] ); + } + + $indexable->version = $this->version; + + return $indexable; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-term-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-term-builder.php new file mode 100644 index 00000000..3484a37d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/indexable-term-builder.php @@ -0,0 +1,291 @@ +taxonomy_helper = $taxonomy_helper; + $this->version = $versions->get_latest_version_for_type( 'term' ); + $this->post_helper = $post_helper; + } + + /** + * Formats the data. + * + * @param int $term_id ID of the term to save data for. + * @param Indexable $indexable The indexable to format. + * + * @return bool|Indexable The extended indexable. False when unable to build. + * + * @throws Invalid_Term_Exception When the term is invalid. + * @throws Term_Not_Built_Exception When the term is not viewable. + * @throws Term_Not_Found_Exception When the term is not found. + */ + public function build( $term_id, $indexable ) { + $term = \get_term( $term_id ); + + if ( $term === null ) { + throw new Term_Not_Found_Exception(); + } + + if ( \is_wp_error( $term ) ) { + throw new Invalid_Term_Exception( $term->get_error_message() ); + } + + $indexable_taxonomies = $this->taxonomy_helper->get_indexable_taxonomies(); + if ( ! \in_array( $term->taxonomy, $indexable_taxonomies, true ) ) { + throw Term_Not_Built_Exception::because_not_indexable( $term_id ); + } + + $term_link = \get_term_link( $term, $term->taxonomy ); + + if ( \is_wp_error( $term_link ) ) { + throw new Invalid_Term_Exception( $term_link->get_error_message() ); + } + + $term_meta = $this->taxonomy_helper->get_term_meta( $term ); + + $indexable->object_id = $term_id; + $indexable->object_type = 'term'; + $indexable->object_sub_type = $term->taxonomy; + $indexable->permalink = $term_link; + $indexable->blog_id = \get_current_blog_id(); + + $indexable->primary_focus_keyword_score = $this->get_keyword_score( + $this->get_meta_value( 'wpseo_focuskw', $term_meta ), + $this->get_meta_value( 'wpseo_linkdex', $term_meta ) + ); + + $indexable->is_robots_noindex = $this->get_noindex_value( $this->get_meta_value( 'wpseo_noindex', $term_meta ) ); + $indexable->is_public = ( $indexable->is_robots_noindex === null ) ? null : ! $indexable->is_robots_noindex; + + $this->reset_social_images( $indexable ); + + foreach ( $this->get_indexable_lookup() as $meta_key => $indexable_key ) { + $indexable->{$indexable_key} = $this->get_meta_value( $meta_key, $term_meta ); + } + + if ( empty( $indexable->breadcrumb_title ) ) { + $indexable->breadcrumb_title = $term->name; + } + + $this->handle_social_images( $indexable ); + + $indexable->is_cornerstone = $this->get_meta_value( 'wpseo_is_cornerstone', $term_meta ); + + // Not implemented yet. + $indexable->is_robots_nofollow = null; + $indexable->is_robots_noarchive = null; + $indexable->is_robots_noimageindex = null; + $indexable->is_robots_nosnippet = null; + + $timestamps = $this->get_object_timestamps( $term_id, $term->taxonomy ); + $indexable->object_published_at = $timestamps->published_at; + $indexable->object_last_modified = $timestamps->last_modified; + + $indexable->version = $this->version; + + return $indexable; + } + + /** + * Converts the meta noindex value to the indexable value. + * + * @param string $meta_value Term meta to base the value on. + * + * @return bool|null + */ + protected function get_noindex_value( $meta_value ) { + if ( $meta_value === 'noindex' ) { + return true; + } + + if ( $meta_value === 'index' ) { + return false; + } + + return null; + } + + /** + * Determines the focus keyword score. + * + * @param string $keyword The focus keyword that is set. + * @param int $score The score saved on the meta data. + * + * @return int|null Score to use. + */ + protected function get_keyword_score( $keyword, $score ) { + if ( empty( $keyword ) ) { + return null; + } + + return $score; + } + + /** + * Retrieves the lookup table. + * + * @return array Lookup table for the indexable fields. + */ + protected function get_indexable_lookup() { + return [ + 'wpseo_canonical' => 'canonical', + 'wpseo_focuskw' => 'primary_focus_keyword', + 'wpseo_title' => 'title', + 'wpseo_desc' => 'description', + 'wpseo_content_score' => 'readability_score', + 'wpseo_inclusive_language_score' => 'inclusive_language_score', + 'wpseo_bctitle' => 'breadcrumb_title', + 'wpseo_opengraph-title' => 'open_graph_title', + 'wpseo_opengraph-description' => 'open_graph_description', + 'wpseo_opengraph-image' => 'open_graph_image', + 'wpseo_opengraph-image-id' => 'open_graph_image_id', + 'wpseo_twitter-title' => 'twitter_title', + 'wpseo_twitter-description' => 'twitter_description', + 'wpseo_twitter-image' => 'twitter_image', + 'wpseo_twitter-image-id' => 'twitter_image_id', + ]; + } + + /** + * Retrieves a meta value from the given meta data. + * + * @param string $meta_key The key to extract. + * @param array $term_meta The meta data. + * + * @return string|null The meta value. + */ + protected function get_meta_value( $meta_key, $term_meta ) { + if ( ! $term_meta || ! \array_key_exists( $meta_key, $term_meta ) ) { + return null; + } + + $value = $term_meta[ $meta_key ]; + if ( \is_string( $value ) && $value === '' ) { + return null; + } + + return $value; + } + + /** + * Finds an alternative image for the social image. + * + * @param Indexable $indexable The indexable. + * + * @return array|bool False when not found, array with data when found. + */ + protected function find_alternative_image( Indexable $indexable ) { + $content_image = $this->image->get_term_content_image( $indexable->object_id ); + if ( $content_image ) { + return [ + 'image' => $content_image, + 'source' => 'first-content-image', + ]; + } + + return false; + } + + /** + * Returns the timestamps for a given term. + * + * @param int $term_id The term ID. + * @param string $taxonomy The taxonomy. + * + * @return object An object with last_modified and published_at timestamps. + */ + protected function get_object_timestamps( $term_id, $taxonomy ) { + global $wpdb; + $post_statuses = $this->post_helper->get_public_post_statuses(); + + $replacements = []; + $replacements[] = 'post_modified_gmt'; + $replacements[] = 'post_date_gmt'; + $replacements[] = $wpdb->posts; + $replacements[] = $wpdb->term_relationships; + $replacements[] = 'object_id'; + $replacements[] = 'ID'; + $replacements[] = $wpdb->term_taxonomy; + $replacements[] = 'term_taxonomy_id'; + $replacements[] = 'term_taxonomy_id'; + $replacements[] = 'taxonomy'; + $replacements[] = $taxonomy; + $replacements[] = 'term_id'; + $replacements[] = $term_id; + $replacements[] = 'post_status'; + $replacements = \array_merge( $replacements, $post_statuses ); + $replacements[] = 'post_password'; + + //phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + //phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + return $wpdb->get_row( + $wpdb->prepare( + ' + SELECT MAX(p.%i) AS last_modified, MIN(p.%i) AS published_at + FROM %i AS p + INNER JOIN %i AS term_rel + ON term_rel.%i = p.%i + INNER JOIN %i AS term_tax + ON term_tax.%i = term_rel.%i + AND term_tax.%i = %s + AND term_tax.%i = %d + WHERE p.%i IN (' . \implode( ', ', \array_fill( 0, \count( $post_statuses ), '%s' ) ) . ") + AND p.%i = '' + ", + $replacements + ) + ); + //phpcs:enable + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/builders/primary-term-builder.php b/wp/wp-content/plugins/wordpress-seo/src/builders/primary-term-builder.php new file mode 100644 index 00000000..a636776a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/builders/primary-term-builder.php @@ -0,0 +1,107 @@ +repository = $repository; + $this->indexable_helper = $indexable_helper; + $this->primary_term = $primary_term; + $this->meta = $meta; + } + + /** + * Formats and saves the primary terms for the post with the given post id. + * + * @param int $post_id The post ID. + * + * @return void + */ + public function build( $post_id ) { + foreach ( $this->primary_term->get_primary_term_taxonomies( $post_id ) as $taxonomy ) { + $this->save_primary_term( $post_id, $taxonomy->name ); + } + } + + /** + * Save the primary term for a specific taxonomy. + * + * @param int $post_id Post ID to save primary term for. + * @param string $taxonomy Taxonomy to save primary term for. + * + * @return void + */ + protected function save_primary_term( $post_id, $taxonomy ) { + $term_id = $this->meta->get_value( 'primary_' . $taxonomy, $post_id ); + + $term_selected = ! empty( $term_id ); + $primary_term_indexable = $this->repository->find_by_post_id_and_taxonomy( $post_id, $taxonomy, $term_selected ); + + // Removes the indexable when no term found. + if ( ! $term_selected ) { + if ( $primary_term_indexable ) { + $primary_term_indexable->delete(); + } + + return; + } + + $primary_term_indexable->term_id = $term_id; + $primary_term_indexable->post_id = $post_id; + $primary_term_indexable->taxonomy = $taxonomy; + $primary_term_indexable->blog_id = \get_current_blog_id(); + $this->indexable_helper->save_indexable( $primary_term_indexable ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/commands/cleanup-command.php b/wp/wp-content/plugins/wordpress-seo/src/commands/cleanup-command.php new file mode 100644 index 00000000..7bbba3de --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/commands/cleanup-command.php @@ -0,0 +1,196 @@ +cleanup_integration = $cleanup_integration; + } + + /** + * Returns the namespace of this command. + * + * @return string + */ + public static function get_namespace() { + return Main::WP_CLI_NAMESPACE; + } + + /** + * Performs a cleanup of custom Yoast tables. + * + * This removes unused, unwanted or orphaned database records, which ensures the best performance. Including: + * - Indexables + * - Indexable hierarchy + * - SEO links + * + * ## OPTIONS + * + * [--batch-size=] + * : The number of database records to clean up in a single sql query. + * --- + * default: 1000 + * --- + * + * [--interval=] + * : The number of microseconds (millionths of a second) to wait between cleanup batches. + * --- + * default: 500000 + * --- + * + * [--network] + * : Performs the cleanup on all sites within the network. + * + * ## EXAMPLES + * + * wp yoast cleanup + * + * @when after_wp_load + * + * @param array|null $args The arguments. + * @param array|null $assoc_args The associative arguments. + * + * @return void + * + * @throws ExitException When the input args are invalid. + */ + public function cleanup( $args = null, $assoc_args = null ) { + if ( isset( $assoc_args['interval'] ) && (int) $assoc_args['interval'] < 0 ) { + WP_CLI::error( \__( 'The value for \'interval\' must be a positive integer.', 'wordpress-seo' ) ); + } + if ( isset( $assoc_args['batch-size'] ) && (int) $assoc_args['batch-size'] < 1 ) { + WP_CLI::error( \__( 'The value for \'batch-size\' must be a positive integer higher than equal to 1.', 'wordpress-seo' ) ); + } + + if ( isset( $assoc_args['network'] ) && \is_multisite() ) { + $total_removed = $this->cleanup_network( $assoc_args ); + } + else { + $total_removed = $this->cleanup_current_site( $assoc_args ); + } + + WP_CLI::success( + \sprintf( + /* translators: %1$d is the number of records that are removed. */ + \_n( + 'Cleaned up %1$d record.', + 'Cleaned up %1$d records.', + $total_removed, + 'wordpress-seo' + ), + $total_removed + ) + ); + } + + /** + * Performs the cleanup for the entire network. + * + * @param array|null $assoc_args The associative arguments. + * + * @return int The number of cleaned up records. + */ + private function cleanup_network( $assoc_args ) { + $criteria = [ + 'fields' => 'ids', + 'spam' => 0, + 'deleted' => 0, + 'archived' => 0, + ]; + $blog_ids = \get_sites( $criteria ); + $total_removed = 0; + foreach ( $blog_ids as $blog_id ) { + \switch_to_blog( $blog_id ); + $total_removed += $this->cleanup_current_site( $assoc_args ); + \restore_current_blog(); + } + + return $total_removed; + } + + /** + * Performs the cleanup for a single site. + * + * @param array|null $assoc_args The associative arguments. + * + * @return int The number of cleaned up records. + */ + private function cleanup_current_site( $assoc_args ) { + $site_url = \site_url(); + $total_removed = 0; + + if ( ! \is_plugin_active( \WPSEO_BASENAME ) ) { + /* translators: %1$s is the site url of the site that is skipped. %2$s is Yoast SEO. */ + WP_CLI::warning( \sprintf( \__( 'Skipping %1$s. %2$s is not active on this site.', 'wordpress-seo' ), $site_url, 'Yoast SEO' ) ); + + return $total_removed; + } + + // Make sure the DB is up to date first. + \do_action( '_yoast_run_migrations' ); + + $tasks = $this->cleanup_integration->get_cleanup_tasks(); + $limit = (int) $assoc_args['batch-size']; + $interval = (int) $assoc_args['interval']; + + /* translators: %1$s is the site url of the site that is cleaned up. %2$s is the name of the cleanup task that is currently running. */ + $progress_bar_title_format = \__( 'Cleaning up %1$s [%2$s]', 'wordpress-seo' ); + $progress = Utils\make_progress_bar( \sprintf( $progress_bar_title_format, $site_url, \key( $tasks ) ), \count( $tasks ) ); + + foreach ( $tasks as $task_name => $task ) { + // Update the progressbar title with the current task name. + $progress->tick( 0, \sprintf( $progress_bar_title_format, $site_url, $task_name ) ); + do { + $items_cleaned = $task( $limit ); + if ( \is_int( $items_cleaned ) ) { + $total_removed += $items_cleaned; + } + \usleep( $interval ); + + // Update the timer. + $progress->tick( 0 ); + } while ( $items_cleaned !== false && $items_cleaned > 0 ); + $progress->tick(); + } + $progress->finish(); + + $this->cleanup_integration->reset_cleanup(); + WP_CLI::log( + \sprintf( + /* translators: %1$d is the number of records that were removed. %2$s is the site url. */ + \_n( + 'Cleaned up %1$d record from %2$s.', + 'Cleaned up %1$d records from %2$s.', + $total_removed, + 'wordpress-seo' + ), + $total_removed, + $site_url + ) + ); + + return $total_removed; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/commands/command-interface.php b/wp/wp-content/plugins/wordpress-seo/src/commands/command-interface.php new file mode 100644 index 00000000..e8278241 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/commands/command-interface.php @@ -0,0 +1,18 @@ +post_indexation_action = $post_indexation_action; + $this->term_indexation_action = $term_indexation_action; + $this->post_type_archive_indexation_action = $post_type_archive_indexation_action; + $this->general_indexation_action = $general_indexation_action; + $this->complete_indexation_action = $complete_indexation_action; + $this->prepare_indexing_action = $prepare_indexing_action; + $this->post_link_indexing_action = $post_link_indexing_action; + $this->term_link_indexing_action = $term_link_indexing_action; + $this->indexable_helper = $indexable_helper; + } + + /** + * Gets the namespace. + * + * @return string + */ + public static function get_namespace() { + return Main::WP_CLI_NAMESPACE; + } + + /** + * Indexes all your content to ensure the best performance. + * + * ## OPTIONS + * + * [--network] + * : Performs the indexation on all sites within the network. + * + * [--reindex] + * : Removes all existing indexables and then reindexes them. + * + * [--skip-confirmation] + * : Skips the confirmations (for automated systems). + * + * [--interval=] + * : The number of microseconds (millionths of a second) to wait between index actions. + * --- + * default: 500000 + * --- + * + * ## EXAMPLES + * + * wp yoast index + * + * @when after_wp_load + * + * @param array|null $args The arguments. + * @param array|null $assoc_args The associative arguments. + * + * @return void + */ + public function index( $args = null, $assoc_args = null ) { + if ( ! $this->indexable_helper->should_index_indexables() ) { + WP_CLI::log( + \__( 'Your WordPress environment is running on a non-production site. Indexables can only be created on production environments. Please check your `WP_ENVIRONMENT_TYPE` settings.', 'wordpress-seo' ) + ); + + return; + } + + if ( ! isset( $assoc_args['network'] ) ) { + $this->run_indexation_actions( $assoc_args ); + + return; + } + + $criteria = [ + 'fields' => 'ids', + 'spam' => 0, + 'deleted' => 0, + 'archived' => 0, + ]; + $blog_ids = \get_sites( $criteria ); + + foreach ( $blog_ids as $blog_id ) { + \switch_to_blog( $blog_id ); + \do_action( '_yoast_run_migrations' ); + $this->run_indexation_actions( $assoc_args ); + \restore_current_blog(); + } + } + + /** + * Runs all indexation actions. + * + * @param array $assoc_args The associative arguments. + * + * @return void + */ + protected function run_indexation_actions( $assoc_args ) { + // See if we need to clear all indexables before repopulating. + if ( isset( $assoc_args['reindex'] ) ) { + + // Argument --skip-confirmation to prevent confirmation (for automated systems). + if ( ! isset( $assoc_args['skip-confirmation'] ) ) { + WP_CLI::confirm( 'This will clear all previously indexed objects. Are you certain you wish to proceed?' ); + } + + // Truncate the tables. + $this->clear(); + + // Delete the transients to make sure re-indexing runs every time. + \delete_transient( Indexable_Post_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( Indexable_Post_Type_Archive_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( Indexable_Term_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + } + + $indexation_actions = [ + 'posts' => $this->post_indexation_action, + 'terms' => $this->term_indexation_action, + 'post type archives' => $this->post_type_archive_indexation_action, + 'general objects' => $this->general_indexation_action, + 'post links' => $this->post_link_indexing_action, + 'term links' => $this->term_link_indexing_action, + ]; + + $this->prepare_indexing_action->prepare(); + + $interval = (int) $assoc_args['interval']; + foreach ( $indexation_actions as $name => $indexation_action ) { + $this->run_indexation_action( $name, $indexation_action, $interval ); + } + + $this->complete_indexation_action->complete(); + } + + /** + * Runs an indexation action. + * + * @param string $name The name of the object to be indexed. + * @param Indexation_Action_Interface $indexation_action The indexation action. + * @param int $interval Number of microseconds (millionths of a second) to wait between index actions. + * + * @return void + */ + protected function run_indexation_action( $name, Indexation_Action_Interface $indexation_action, $interval ) { + $total = $indexation_action->get_total_unindexed(); + if ( $total > 0 ) { + $limit = $indexation_action->get_limit(); + $progress = Utils\make_progress_bar( 'Indexing ' . $name, $total ); + do { + $indexables = $indexation_action->index(); + $count = \count( $indexables ); + $progress->tick( $count ); + \usleep( $interval ); + Utils\wp_clear_object_cache(); + } while ( $count >= $limit ); + $progress->finish(); + } + } + + /** + * Clears the database related to the indexables. + * + * @return void + */ + protected function clear() { + global $wpdb; + + // For the PreparedSQLPlaceholders issue, see: https://github.com/WordPress/WordPress-Coding-Standards/issues/1903. + // For the DirectDBQuery issue, see: https://github.com/WordPress/WordPress-Coding-Standards/issues/1947. + // phpcs:disable WordPress.DB -- Table names should not be quoted and truncate queries can not be cached. + $wpdb->query( + $wpdb->prepare( + 'TRUNCATE TABLE %1$s', + Model::get_table_name( 'Indexable' ) + ) + ); + $wpdb->query( + $wpdb->prepare( + 'TRUNCATE TABLE %1$s', + Model::get_table_name( 'Indexable_Hierarchy' ) + ) + ); + // phpcs:enable + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/addon-installation-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/addon-installation-conditional.php new file mode 100644 index 00000000..37336da8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/addon-installation-conditional.php @@ -0,0 +1,19 @@ +post_conditional = $post_conditional; + } + + /** + * Returns whether this conditional is met. + * + * @return bool Whether the conditional is met. + */ + public function is_met() { + // phpcs:disable WordPress.Security.NonceVerification.Recommended,WordPress.Security.NonceVerification.Missing -- Reason: Nonce verification should not be done in a conditional but rather in the classes using the conditional. + // Check if we are in our Elementor ajax request (for saving). + if ( \wp_doing_ajax() && isset( $_POST['action'] ) && \is_string( $_POST['action'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only strictly comparing the variable. + $post_action = \wp_unslash( $_POST['action'] ); + if ( $post_action === 'wpseo_elementor_save' ) { + return true; + } + } + + if ( ! $this->post_conditional->is_met() ) { + return false; + } + + // We don't support Estimated Reading Time on the attachment post type. + if ( isset( $_GET['post'] ) && \is_string( $_GET['post'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are casting to an integer. + $post_id = (int) \wp_unslash( $_GET['post'] ); + if ( $post_id !== 0 && \get_post_type( $post_id ) === 'attachment' ) { + return false; + } + } + + return true; + // phpcs:enable WordPress.Security.NonceVerification.Recommended,WordPress.Security.NonceVerification.Missing + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/licenses-page-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/licenses-page-conditional.php new file mode 100644 index 00000000..0a6b8ace --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/admin/licenses-page-conditional.php @@ -0,0 +1,31 @@ +current_page_helper = $current_page_helper; + } + + /** + * Returns `true` when on the admin dashboard, update or Yoast SEO pages. + * + * @return bool `true` when on the admin dashboard, update or Yoast SEO pages. + */ + public function is_met() { + if ( ! \is_admin() ) { + return false; + } + + return $this->current_page_helper->is_yoast_seo_page(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/attachment-redirections-enabled-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/attachment-redirections-enabled-conditional.php new file mode 100644 index 00000000..18931fce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/attachment-redirections-enabled-conditional.php @@ -0,0 +1,36 @@ +options = $options; + } + + /** + * Returns whether the 'Redirect attachment URLs to the attachment itself' setting has been enabled. + * + * @return bool `true` when the 'Redirect attachment URLs to the attachment itself' setting has been enabled. + */ + public function is_met() { + return $this->options->get( 'disable-attachment' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/conditional-interface.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/conditional-interface.php new file mode 100644 index 00000000..eb0ee401 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/conditional-interface.php @@ -0,0 +1,16 @@ +get_feature_flag() ); + + return \defined( 'YOAST_SEO_' . $feature_flag ) && \constant( 'YOAST_SEO_' . $feature_flag ) === true; + } + + /** + * Returns the name of the feature flag. + * 'YOAST_SEO_' is automatically prepended to it and it will be uppercased. + * + * @return string the name of the feature flag. + */ + abstract protected function get_feature_flag(); + + /** + * Returns the feature name. + * + * @return string the name of the feature flag. + */ + public function get_feature_name() { + return $this->get_feature_flag(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/front-end-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/front-end-conditional.php new file mode 100644 index 00000000..1ca7a317 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/front-end-conditional.php @@ -0,0 +1,18 @@ +options = $options; + } + + /** + * Returns `true` whether the headless REST endpoints have been enabled. + * + * @return bool `true` when the headless REST endpoints have been enabled. + */ + public function is_met() { + return $this->options->get( 'enable_headless_rest_endpoints' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/import-tool-selected-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/import-tool-selected-conditional.php new file mode 100644 index 00000000..24fe5036 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/import-tool-selected-conditional.php @@ -0,0 +1,19 @@ +migration_status = $migration_status; + } + + /** + * Returns `true` when all database migrations have been run. + * + * @return bool `true` when all database migrations have been run. + */ + public function is_met() { + return $this->migration_status->is_version( 'free', \WPSEO_VERSION ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/new-settings-ui-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/new-settings-ui-conditional.php new file mode 100644 index 00000000..f55efc6e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/new-settings-ui-conditional.php @@ -0,0 +1,18 @@ +options = $options; + } + + /** + * Returns `true` when the Open Graph feature is enabled. + * + * @return bool `true` when the Open Graph feature is enabled. + */ + public function is_met() { + return $this->options->get( 'opengraph' ) === true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-active-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-active-conditional.php new file mode 100644 index 00000000..cdb2ef73 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-active-conditional.php @@ -0,0 +1,18 @@ +helpers->product->is_premium(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-inactive-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-inactive-conditional.php new file mode 100644 index 00000000..ff832f03 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/premium-inactive-conditional.php @@ -0,0 +1,18 @@ +helpers->product->is_premium(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/primary-category-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/primary-category-conditional.php new file mode 100644 index 00000000..77aeb737 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/primary-category-conditional.php @@ -0,0 +1,56 @@ +current_page = $current_page; + } + + /** + * Returns `true` when on the frontend, + * or when on the post overview, post edit or new post admin page, + * or when on additional admin pages, allowed by filter. + * + * @return bool `true` when on the frontend, or when on the post overview, + * post edit, new post admin page or additional admin pages, allowed by filter. + */ + public function is_met() { + + if ( ! \is_admin() ) { + return true; + } + + $current_page = $this->current_page->get_current_admin_page(); + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( $current_page === 'admin-ajax.php' && isset( $_POST['action'] ) && $_POST['action'] === 'wp-link-ajax' ) { + return true; + } + + /** + * Filter: Adds the possibility to use primary category at additional admin pages. + * + * @param array $admin_pages List of additional admin pages. + */ + $additional_pages = \apply_filters( 'wpseo_primary_category_admin_pages', [] ); + return \in_array( $current_page, \array_merge( [ 'edit.php', 'post.php', 'post-new.php' ], $additional_pages ), true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/robots-txt-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/robots-txt-conditional.php new file mode 100644 index 00000000..f1097735 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/robots-txt-conditional.php @@ -0,0 +1,68 @@ +front_end_conditional = $front_end_conditional; + } + + /** + * Returns whether or not this conditional is met. + * + * @return bool Whether or not the conditional is met. + */ + public function is_met() { + return $this->front_end_conditional->is_met() || $this->is_file_editor_page(); + } + + /** + * Returns whether the current page is the file editor page. + * + * This checks for two locations: + * - Multisite network admin file editor page + * - Single site file editor page (under tools) + * + * @return bool + */ + protected function is_file_editor_page() { + global $pagenow; + + if ( $pagenow !== 'admin.php' ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification -- This is not a form. + if ( isset( $_GET['page'] ) && $_GET['page'] === 'wpseo_files' && \is_multisite() && \is_network_admin() ) { + return true; + } + + // phpcs:ignore WordPress.Security.NonceVerification -- This is not a form. + if ( ! ( isset( $_GET['page'] ) && $_GET['page'] === 'wpseo_tools' ) ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification -- This is not a form. + if ( isset( $_GET['tool'] ) && $_GET['tool'] === 'file-editor' ) { + return true; + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/semrush-enabled-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/semrush-enabled-conditional.php new file mode 100644 index 00000000..b984945e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/semrush-enabled-conditional.php @@ -0,0 +1,36 @@ +options = $options; + } + + /** + * Returns whether or not this conditional is met. + * + * @return bool Whether or not the conditional is met. + */ + public function is_met() { + return $this->options->get( 'semrush_integration_active', false ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/settings-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/settings-conditional.php new file mode 100644 index 00000000..7b27b320 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/settings-conditional.php @@ -0,0 +1,40 @@ +user_can_manage_wpseo_options_conditional = $user_can_manage_wpseo_options_conditional; + } + + /** + * Returns whether or not this conditional is met. + * + * @return bool Whether or not the conditional is met. + */ + public function is_met() { + if ( ! $this->user_can_manage_wpseo_options_conditional->is_met() ) { + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/should-index-links-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/should-index-links-conditional.php new file mode 100644 index 00000000..0bfb305e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/should-index-links-conditional.php @@ -0,0 +1,43 @@ +options_helper = $options_helper; + } + + /** + * Returns `true` when the links on this website should be indexed. + * + * @return bool `true` when the links on this website should be indexed. + */ + public function is_met() { + $should_index_links = $this->options_helper->get( 'enable_text_link_counter' ); + + /** + * Filter: 'wpseo_should_index_links' - Allows disabling of Yoast's links indexation. + * + * @param bool $enable To disable the indexation, return false. + */ + return \apply_filters( 'wpseo_should_index_links', $should_index_links ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/text-formality-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/text-formality-conditional.php new file mode 100644 index 00000000..8a1e38c4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/text-formality-conditional.php @@ -0,0 +1,19 @@ +is_elementor_get_action() ) { + return true; + } + + // Request for us saving a post/page in Elementor (submits our form via AJAX). + return \wp_doing_ajax() && $this->is_yoast_save_post_action(); + } + + /** + * Checks if the current request' GET action is 'elementor'. + * + * @return bool True when the GET action is 'elementor'. + */ + private function is_elementor_get_action(): bool { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( ! isset( $_GET['action'] ) ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( ! \is_string( $_GET['action'] ) ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, we are only strictly comparing. + return \wp_unslash( $_GET['action'] ) === 'elementor'; + } + + /** + * Checks if the current request' POST action is 'wpseo_elementor_save'. + * + * @return bool True when the POST action is 'wpseo_elementor_save'. + */ + private function is_yoast_save_post_action(): bool { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( ! isset( $_POST['action'] ) ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( ! \is_string( $_POST['action'] ) ) { + return false; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, we are only strictly comparing. + return \wp_unslash( $_POST['action'] ) === 'wpseo_elementor_save'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/jetpack-boost-active-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/jetpack-boost-active-conditional.php new file mode 100644 index 00000000..e96ac83f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/jetpack-boost-active-conditional.php @@ -0,0 +1,20 @@ +is_premium(); + } + + /** + * Retrieves, if available, if Jetpack Boost has priority feature available. + * + * @return bool Whether Jetpack Boost is premium. + */ + private function is_premium() { + if ( \class_exists( '\Automattic\Jetpack_Boost\Lib\Premium_Features', false ) ) { + return Premium_Features::has_feature( + Premium_Features::PRIORITY_SUPPORT + ); + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/polylang-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/polylang-conditional.php new file mode 100644 index 00000000..a4395d75 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/third-party/polylang-conditional.php @@ -0,0 +1,20 @@ +options = $options; + } + + /** + * Returns whether this conditional is met. + * + * @return bool Whether the conditional is met. + */ + public function is_met() { + return $this->options->get( 'wincher_automatically_add_keyphrases' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-conditional.php new file mode 100644 index 00000000..ddba8559 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-conditional.php @@ -0,0 +1,8 @@ +options = $options; + } + + /** + * Returns whether or not this conditional is met. + * + * @return bool Whether or not the conditional is met. + */ + public function is_met() { + return $this->options->get( 'wincher_integration_active', false ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-token-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-token-conditional.php new file mode 100644 index 00000000..8cb79820 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/wincher-token-conditional.php @@ -0,0 +1,36 @@ +client = $client; + } + + /** + * Returns whether this conditional is met. + * + * @return bool Whether the conditional is met. + */ + public function is_met() { + return $this->client->has_valid_tokens(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/woocommerce-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/woocommerce-conditional.php new file mode 100644 index 00000000..8523c7c2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/woocommerce-conditional.php @@ -0,0 +1,18 @@ +on_upgrade_page() || \wp_installing() ) { + return false; + } + + if ( $pagenow === 'admin.php' && isset( $_GET['page'] ) && \strpos( $_GET['page'], 'wpseo' ) === 0 ) { + return true; + } + + $target_pages = [ + 'index.php', + 'plugins.php', + 'update-core.php', + 'options-permalink.php', + ]; + + return \in_array( $pagenow, $target_pages, true ); + } + + /** + * Checks if we are on a theme or plugin upgrade page. + * + * @return bool Whether we are on a theme or plugin upgrade page. + */ + private function on_upgrade_page() { + /* + * IFRAME_REQUEST is not defined on these pages, + * though these action pages do show when upgrading themes or plugins. + */ + $actions = [ 'do-theme-upgrade', 'do-plugin-upgrade', 'do-core-upgrade', 'do-core-reinstall' ]; + return isset( $_GET['action'] ) && \in_array( $_GET['action'], $actions, true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/conditionals/yoast-tools-page-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/conditionals/yoast-tools-page-conditional.php new file mode 100644 index 00000000..52d483f3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/conditionals/yoast-tools-page-conditional.php @@ -0,0 +1,28 @@ + '16.7-beta0', + ]; + + /** + * The current plugin version. + * + * @var string + */ + protected $version; + + /** + * Badge_Group_Names constructor. + * + * @param string|null $version Optional: the current plugin version. + */ + public function __construct( $version = null ) { + if ( ! $version ) { + $version = \WPSEO_VERSION; + } + $this->version = $version; + } + + /** + * Check whether a group of badges is still eligible for a "new" badge. + * + * @param string $group One of the GROUP_* constants. + * @param string|null $current_version The current version of the plugin that's being checked. + * + * @return bool Whether a group of badges is still eligible for a "new" badge. + */ + public function is_still_eligible_for_new_badge( $group, $current_version = null ) { + if ( ! \array_key_exists( $group, $this::GROUP_NAMES ) ) { + return false; + } + + $group_version = $this::GROUP_NAMES[ $group ]; + + if ( \is_null( $current_version ) ) { + $current_version = $this->version; + } + + return (bool) \version_compare( $group_version, $current_version, '>' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/conflicting-plugins.php b/wp/wp-content/plugins/wordpress-seo/src/config/conflicting-plugins.php new file mode 100644 index 00000000..b6e2b67c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/conflicting-plugins.php @@ -0,0 +1,111 @@ +get_migration_status( $name ); + + // Check if we've attempted to run this migration in the past 10 minutes. If so, it may still be running. + if ( \array_key_exists( 'lock', $migration_status ) ) { + $timestamp = \strtotime( '-10 minutes' ); + + return $timestamp > $migration_status['lock']; + } + + // Is the migration version less than the current version. + return \version_compare( $migration_status['version'], $version, '<' ); + } + + /** + * Checks whether or not the given migration is at least the given version, defaults to checking for the latest version. + * + * @param string $name The name of the migration. + * @param string $version The version to check, defaults to the latest version. + * + * @return bool Whether or not the requested migration is at least the requested version. + */ + public function is_version( $name, $version = \WPSEO_VERSION ) { + $migration_status = $this->get_migration_status( $name ); + + return \version_compare( $version, $migration_status['version'], '<=' ); + } + + /** + * Gets the error of a given migration if it exists. + * + * @param string $name The name of the migration. + * + * @return bool|array False if there is no error, otherwise the error. + */ + public function get_error( $name ) { + $migration_status = $this->get_migration_status( $name ); + + if ( ! isset( $migration_status['error'] ) ) { + return false; + } + + return $migration_status['error']; + } + + /** + * Sets an error for the migration. + * + * @param string $name The name of the migration. + * @param string $message Message explaining the reason for the error. + * @param string $version The current version. + * + * @return void + */ + public function set_error( $name, $message, $version = \WPSEO_VERSION ) { + $migration_status = $this->get_migration_status( $name ); + + $migration_status['error'] = [ + 'time' => \strtotime( 'now' ), + 'version' => $version, + 'message' => $message, + ]; + + $this->set_migration_status( $name, $migration_status ); + } + + /** + * Updates the migration version to the latest version. + * + * @param string $name The name of the migration. + * @param string $version The current version. + * + * @return void + */ + public function set_success( $name, $version = \WPSEO_VERSION ) { + $migration_status = $this->get_migration_status( $name ); + unset( $migration_status['lock'] ); + unset( $migration_status['error'] ); + $migration_status['version'] = $version; + $this->set_migration_status( $name, $migration_status ); + } + + /** + * Locks the migration status. + * + * @param string $name The name of the migration. + * + * @return bool Whether or not the migration was succesfully locked. + */ + public function lock_migration( $name ) { + $migration_status = $this->get_migration_status( $name ); + $migration_status['lock'] = \strtotime( 'now' ); + + return $this->set_migration_status( $name, $migration_status ); + } + + /** + * Retrieves the migration option. + * + * @param string $name The name of the migration. + * + * @return bool|array The status of the migration, false if no status exists. + */ + protected function get_migration_status( $name ) { + $current_blog_id = \get_current_blog_id(); + if ( ! isset( $this->migration_options[ $current_blog_id ][ $name ] ) ) { + $migration_status = \get_option( self::MIGRATION_OPTION_KEY . $name ); + + if ( ! \is_array( $migration_status ) || ! isset( $migration_status['version'] ) ) { + $migration_status = [ 'version' => '0.0' ]; + } + + if ( ! isset( $this->migration_options[ $current_blog_id ] ) ) { + $this->migration_options[ $current_blog_id ] = []; + } + $this->migration_options[ $current_blog_id ][ $name ] = $migration_status; + } + + return $this->migration_options[ $current_blog_id ][ $name ]; + } + + /** + * Retrieves the migration option. + * + * @param string $name The name of the migration. + * @param array $migration_status The migration status. + * + * @return bool True if the status was succesfully updated, false otherwise. + */ + protected function set_migration_status( $name, $migration_status ) { + if ( ! \is_array( $migration_status ) || ! isset( $migration_status['version'] ) ) { + return false; + } + $current_blog_id = \get_current_blog_id(); + + if ( ! isset( $this->migration_options[ $current_blog_id ] ) ) { + $this->migration_options[ $current_blog_id ] = []; + } + $this->migration_options[ $current_blog_id ][ $name ] = $migration_status; + + return \update_option( self::MIGRATION_OPTION_KEY . $name, $migration_status ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151840_WpYoastIndexable.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151840_WpYoastIndexable.php new file mode 100644 index 00000000..5ed29a66 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151840_WpYoastIndexable.php @@ -0,0 +1,364 @@ +add_table(); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->drop_table( $this->get_table_name() ); + } + + /** + * Creates the indexable table. + * + * @return void + */ + private function add_table() { + $table_name = $this->get_table_name(); + + $indexable_table = $this->create_table( $table_name ); + + // Permalink. + $indexable_table->column( 'permalink', 'mediumtext', [ 'null' => true ] ); + $indexable_table->column( + 'permalink_hash', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + + // Object information. + $indexable_table->column( + 'object_id', + 'integer', + [ + 'unsigned' => true, + 'null' => true, + 'limit' => 11, + ] + ); + $indexable_table->column( + 'object_type', + 'string', + [ + 'null' => false, + 'limit' => 32, + ] + ); + $indexable_table->column( + 'object_sub_type', + 'string', + [ + 'null' => true, + 'limit' => 32, + ] + ); + + // Ownership. + $indexable_table->column( + 'author_id', + 'integer', + [ + 'unsigned' => true, + 'null' => true, + 'limit' => 11, + ] + ); + $indexable_table->column( + 'post_parent', + 'integer', + [ + 'unsigned' => true, + 'null' => true, + 'limit' => 11, + ] + ); + + // Title and description. + $indexable_table->column( + 'title', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( 'description', 'text', [ 'null' => true ] ); + $indexable_table->column( + 'breadcrumb_title', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + + // Post metadata: status, public, protected. + $indexable_table->column( + 'post_status', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( + 'is_public', + 'boolean', + [ + 'null' => true, + 'default' => null, + ] + ); + $indexable_table->column( 'is_protected', 'boolean', [ 'default' => false ] ); + $indexable_table->column( + 'has_public_posts', + 'boolean', + [ + 'null' => true, + 'default' => null, + ] + ); + + $indexable_table->column( + 'number_of_pages', + 'integer', + [ + 'unsigned' => true, + 'null' => true, + 'default' => null, + 'limit' => 11, + ] + ); + + $indexable_table->column( 'canonical', 'mediumtext', [ 'null' => true ] ); + + // SEO and readability analysis. + $indexable_table->column( + 'primary_focus_keyword', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( + 'primary_focus_keyword_score', + 'integer', + [ + 'null' => true, + 'limit' => 3, + ] + ); + $indexable_table->column( + 'readability_score', + 'integer', + [ + 'null' => true, + 'limit' => 3, + ] + ); + $indexable_table->column( 'is_cornerstone', 'boolean', [ 'default' => false ] ); + + // Robots. + $indexable_table->column( + 'is_robots_noindex', + 'boolean', + [ + 'null' => true, + 'default' => false, + ] + ); + $indexable_table->column( + 'is_robots_nofollow', + 'boolean', + [ + 'null' => true, + 'default' => false, + ] + ); + $indexable_table->column( + 'is_robots_noarchive', + 'boolean', + [ + 'null' => true, + 'default' => false, + ] + ); + $indexable_table->column( + 'is_robots_noimageindex', + 'boolean', + [ + 'null' => true, + 'default' => false, + ] + ); + $indexable_table->column( + 'is_robots_nosnippet', + 'boolean', + [ + 'null' => true, + 'default' => false, + ] + ); + + // Twitter. + $indexable_table->column( + 'twitter_title', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( 'twitter_image', 'mediumtext', [ 'null' => true ] ); + $indexable_table->column( 'twitter_description', 'mediumtext', [ 'null' => true ] ); + $indexable_table->column( + 'twitter_image_id', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( + 'twitter_image_source', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + + // Open-Graph. + $indexable_table->column( + 'open_graph_title', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( 'open_graph_description', 'mediumtext', [ 'null' => true ] ); + $indexable_table->column( 'open_graph_image', 'mediumtext', [ 'null' => true ] ); + $indexable_table->column( + 'open_graph_image_id', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( + 'open_graph_image_source', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $indexable_table->column( 'open_graph_image_meta', 'text', [ 'null' => true ] ); + + // Link count. + $indexable_table->column( + 'link_count', + 'integer', + [ + 'null' => true, + 'limit' => 11, + ] + ); + $indexable_table->column( + 'incoming_link_count', + 'integer', + [ + 'null' => true, + 'limit' => 11, + ] + ); + + // Prominent words. + $indexable_table->column( + 'prominent_words_version', + 'integer', + [ + 'null' => true, + 'limit' => 11, + 'unsigned' => true, + 'default' => null, + ] + ); + + $indexable_table->finish(); + + $this->add_indexes( $table_name ); + + $this->add_timestamps( $table_name ); + } + + /** + * Adds indexes to the indexable table. + * + * @param string $indexable_table_name The name of the indexable table. + * + * @return void + */ + private function add_indexes( $indexable_table_name ) { + $this->add_index( + $indexable_table_name, + [ + 'object_type', + 'object_sub_type', + ], + [ + 'name' => 'object_type_and_sub_type', + ] + ); + + $this->add_index( + $indexable_table_name, + 'permalink_hash', + [ + 'name' => 'permalink_hash', + ] + ); + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151841_WpYoastPrimaryTerm.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151841_WpYoastPrimaryTerm.php new file mode 100644 index 00000000..e68f316b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20171228151841_WpYoastPrimaryTerm.php @@ -0,0 +1,102 @@ +get_table_name(); + + $indexable_table = $this->create_table( $table_name ); + + $indexable_table->column( + 'post_id', + 'integer', + [ + 'unsigned' => true, + 'null' => false, + 'limit' => 11, + ] + ); + $indexable_table->column( + 'term_id', + 'integer', + [ + 'unsigned' => true, + 'null' => false, + 'limit' => 11, + ] + ); + $indexable_table->column( + 'taxonomy', + 'string', + [ + 'null' => false, + 'limit' => 32, + ] + ); + + // Executes the SQL to create the table. + $indexable_table->finish(); + + $this->add_index( + $table_name, + [ + 'post_id', + 'taxonomy', + ], + [ + 'name' => 'post_taxonomy', + ] + ); + + $this->add_index( + $table_name, + [ + 'post_id', + 'term_id', + ], + [ + 'name' => 'post_term', + ] + ); + + $this->add_timestamps( $table_name ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->drop_table( $this->get_table_name() ); + } + + /** + * Retrieves the table name to use. + * + * @return string Table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Primary_Term' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20190529075038_WpYoastDropIndexableMetaTableIfExists.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20190529075038_WpYoastDropIndexableMetaTableIfExists.php new file mode 100644 index 00000000..ff2cd7e8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20190529075038_WpYoastDropIndexableMetaTableIfExists.php @@ -0,0 +1,49 @@ +get_table_name(); + + // This can be done safely as it executes a DROP IF EXISTS. + $this->drop_table( $table_name ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + // No down required. This specific table should never exist. + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable_Meta' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20191011111109_WpYoastIndexableHierarchy.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20191011111109_WpYoastIndexableHierarchy.php new file mode 100644 index 00000000..6d36d1a5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20191011111109_WpYoastIndexableHierarchy.php @@ -0,0 +1,83 @@ +get_table_name(); + + $indexable_table = $this->create_table( $table_name, [ 'id' => false ] ); + + $indexable_table->column( + 'indexable_id', + 'integer', + [ + 'primary_key' => true, + 'unsigned' => true, + 'null' => true, + 'limit' => 11, + ] + ); + $indexable_table->column( + 'ancestor_id', + 'integer', + [ + 'primary_key' => true, + 'unsigned' => true, + 'null' => true, + 'limit' => 11, + ] + ); + $indexable_table->column( + 'depth', + 'integer', + [ + 'unsigned' => true, + 'null' => true, + 'limit' => 11, + ] + ); + $indexable_table->finish(); + + $this->add_index( $table_name, 'indexable_id', [ 'name' => 'indexable_id' ] ); + $this->add_index( $table_name, 'ancestor_id', [ 'name' => 'ancestor_id' ] ); + $this->add_index( $table_name, 'depth', [ 'name' => 'depth' ] ); + } + + /** + * Migration up. + * + * @return void + */ + public function down() { + $this->drop_table( $this->get_table_name() ); + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable_Hierarchy' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200408101900_AddCollationToTables.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200408101900_AddCollationToTables.php new file mode 100644 index 00000000..473d065f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200408101900_AddCollationToTables.php @@ -0,0 +1,53 @@ +get_charset_collate(); + if ( empty( $charset_collate ) ) { + return; + } + + $tables = [ + Model::get_table_name( 'migrations' ), + Model::get_table_name( 'Indexable' ), + Model::get_table_name( 'Indexable_Hierarchy' ), + Model::get_table_name( 'Primary_Term' ), + ]; + + foreach ( $tables as $table ) { + $this->query( 'ALTER TABLE ' . $table . ' CONVERT TO ' . \str_replace( 'DEFAULT ', '', $charset_collate ) ); + } + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + // No down required. + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200420073606_AddColumnsToIndexables.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200420073606_AddColumnsToIndexables.php new file mode 100644 index 00000000..6b77bc10 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200420073606_AddColumnsToIndexables.php @@ -0,0 +1,96 @@ +get_tables(); + $blog_id = \get_current_blog_id(); + foreach ( $tables as $table ) { + $this->add_column( + $table, + 'blog_id', + 'biginteger', + [ + 'null' => false, + 'limit' => 20, + 'default' => $blog_id, + ] + ); + } + + $attr_limit_32 = [ + 'null' => true, + 'limit' => 32, + ]; + $attr_limit_64 = [ + 'null' => true, + 'limit' => 64, + ]; + + $indexable_table = $this->get_indexable_table(); + $this->add_column( $indexable_table, 'language', 'string', $attr_limit_32 ); + $this->add_column( $indexable_table, 'region', 'string', $attr_limit_32 ); + $this->add_column( $indexable_table, 'schema_page_type', 'string', $attr_limit_64 ); + $this->add_column( $indexable_table, 'schema_article_type', 'string', $attr_limit_64 ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $tables = $this->get_tables(); + foreach ( $tables as $table ) { + $this->remove_column( $table, 'blog_id' ); + } + + $indexable_table = $this->get_indexable_table(); + $this->remove_column( $indexable_table, 'language' ); + $this->remove_column( $indexable_table, 'region' ); + $this->remove_column( $indexable_table, 'schema_page_type' ); + $this->remove_column( $indexable_table, 'schema_article_type' ); + } + + /** + * Retrieves the Indexable table. + * + * @return string The Indexable table name. + */ + protected function get_indexable_table() { + return Model::get_table_name( 'Indexable' ); + } + + /** + * Retrieves the table names to use. + * + * @return string[] The table names to use. + */ + protected function get_tables() { + return [ + $this->get_indexable_table(), + Model::get_table_name( 'Indexable_Hierarchy' ), + Model::get_table_name( 'Primary_Term' ), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428123747_BreadcrumbTitleAndHierarchyReset.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428123747_BreadcrumbTitleAndHierarchyReset.php new file mode 100644 index 00000000..83fcb74c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428123747_BreadcrumbTitleAndHierarchyReset.php @@ -0,0 +1,64 @@ +change_column( $this->get_indexable_table_name(), 'breadcrumb_title', 'text', [ 'null' => true ] ); + $this->query( 'DELETE FROM ' . $this->get_indexable_hierarchy_table_name() ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->change_column( + $this->get_indexable_table_name(), + 'breadcrumb_title', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_indexable_table_name() { + return Model::get_table_name( 'Indexable' ); + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_indexable_hierarchy_table_name() { + return Model::get_table_name( 'Indexable_Hierarchy' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428194858_ExpandIndexableColumnLengths.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428194858_ExpandIndexableColumnLengths.php new file mode 100644 index 00000000..2633ae61 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200428194858_ExpandIndexableColumnLengths.php @@ -0,0 +1,84 @@ +change_column( $this->get_table_name(), 'title', 'text', [ 'null' => true ] ); + $this->change_column( $this->get_table_name(), 'open_graph_title', 'text', [ 'null' => true ] ); + $this->change_column( $this->get_table_name(), 'twitter_title', 'text', [ 'null' => true ] ); + $this->change_column( $this->get_table_name(), 'open_graph_image_source', 'text', [ 'null' => true ] ); + $this->change_column( $this->get_table_name(), 'twitter_image_source', 'text', [ 'null' => true ] ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $attr_limit_191 = [ + 'null' => true, + 'limit' => 191, + ]; + + $this->change_column( + $this->get_table_name(), + 'title', + 'string', + $attr_limit_191 + ); + $this->change_column( + $this->get_table_name(), + 'opengraph_title', + 'string', + $attr_limit_191 + ); + $this->change_column( + $this->get_table_name(), + 'twitter_title', + 'string', + $attr_limit_191 + ); + $this->change_column( + $this->get_table_name(), + 'open_graph_image_source', + 'string', + $attr_limit_191 + ); + $this->change_column( + $this->get_table_name(), + 'twitter_image_source', + 'string', + $attr_limit_191 + ); + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200429105310_TruncateIndexableTables.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200429105310_TruncateIndexableTables.php new file mode 100644 index 00000000..c0b05fd1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200429105310_TruncateIndexableTables.php @@ -0,0 +1,56 @@ +query( 'TRUNCATE TABLE ' . $this->get_indexable_table_name() ); + $this->query( 'TRUNCATE TABLE ' . $this->get_indexable_hierarchy_table_name() ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + // Nothing to do. + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_indexable_table_name() { + return Model::get_table_name( 'Indexable' ); + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_indexable_hierarchy_table_name() { + return Model::get_table_name( 'Indexable_Hierarchy' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430075614_AddIndexableObjectIdAndTypeIndex.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430075614_AddIndexableObjectIdAndTypeIndex.php new file mode 100644 index 00000000..f4a70270 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430075614_AddIndexableObjectIdAndTypeIndex.php @@ -0,0 +1,64 @@ +add_index( + $this->get_table_name(), + [ + 'object_id', + 'object_type', + ], + [ + 'name' => 'object_id_and_type', + ] + ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->remove_index( + $this->get_table_name(), + [ + 'object_id', + 'object_type', + ], + [ + 'name' => 'object_id_and_type', + ] + ); + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430150130_ClearIndexableTables.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430150130_ClearIndexableTables.php new file mode 100644 index 00000000..40ac700c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200430150130_ClearIndexableTables.php @@ -0,0 +1,56 @@ +query( 'TRUNCATE TABLE ' . $this->get_indexable_table_name() ); + $this->query( 'TRUNCATE TABLE ' . $this->get_indexable_hierarchy_table_name() ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + // Nothing to do. + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_indexable_table_name() { + return Model::get_table_name( 'Indexable' ); + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_indexable_hierarchy_table_name() { + return Model::get_table_name( 'Indexable_Hierarchy' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200507054848_DeleteDuplicateIndexables.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200507054848_DeleteDuplicateIndexables.php new file mode 100644 index 00000000..a92c6699 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200507054848_DeleteDuplicateIndexables.php @@ -0,0 +1,52 @@ +get_table_name(); + + /* + * Deletes duplicate indexables that have the same object_id and object_type. + * The rows with a higher ID are deleted as those should be unused and could be outdated. + */ + $this->query( 'DELETE wyi FROM ' . $table_name . ' wyi INNER JOIN ' . $table_name . ' wyi2 WHERE wyi2.object_id = wyi.object_id AND wyi2.object_type = wyi.object_type AND wyi2.id < wyi.id;' ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + // Nothing to do. + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200513133401_ResetIndexableHierarchyTable.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200513133401_ResetIndexableHierarchyTable.php new file mode 100644 index 00000000..548bf5d5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200513133401_ResetIndexableHierarchyTable.php @@ -0,0 +1,46 @@ +query( 'TRUNCATE TABLE ' . $this->get_table_name() ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + // Nothing to do. + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable_Hierarchy' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200609154515_AddHasAncestorsColumn.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200609154515_AddHasAncestorsColumn.php new file mode 100644 index 00000000..34adf8b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200609154515_AddHasAncestorsColumn.php @@ -0,0 +1,53 @@ +add_column( + Model::get_table_name( 'Indexable' ), + 'has_ancestors', + 'boolean', + [ + 'default' => false, + ] + ); + + Wrapper::get_wpdb()->query( + ' + UPDATE ' . Model::get_table_name( 'Indexable' ) . ' + SET has_ancestors = 1 + WHERE id IN ( SELECT indexable_id FROM ' . Model::get_table_name( 'Indexable_Hierarchy' ) . ' ) + ' + ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->remove_column( Model::get_table_name( 'Indexable' ), 'has_ancestors' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200616130143_ReplacePermalinkHashIndex.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200616130143_ReplacePermalinkHashIndex.php new file mode 100644 index 00000000..bfb4c359 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200616130143_ReplacePermalinkHashIndex.php @@ -0,0 +1,126 @@ +get_table_name(); + $adapter = $this->get_adapter(); + + if ( ! $adapter->has_table( $table_name ) ) { + return; + } + + $this->change_column( + $table_name, + 'permalink_hash', + 'string', + [ + 'null' => true, + 'limit' => 40, + ] + ); + + if ( $adapter->has_index( $table_name, [ 'permalink_hash' ], [ 'name' => 'permalink_hash' ] ) ) { + $this->remove_index( + $table_name, + [ + 'permalink_hash', + ], + [ + 'name' => 'permalink_hash', + ] + ); + } + + if ( ! $adapter->has_index( $table_name, [ 'permalink_hash', 'object_type' ], [ 'name' => 'permalink_hash_and_object_type' ] ) ) { + $this->add_index( + $table_name, + [ + 'permalink_hash', + 'object_type', + ], + [ + 'name' => 'permalink_hash_and_object_type', + ] + ); + } + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $table_name = $this->get_table_name(); + $adapter = $this->get_adapter(); + + if ( ! $adapter->has_table( $table_name ) ) { + return; + } + + if ( $adapter->has_index( $table_name, [ 'permalink_hash', 'object_type' ], [ 'name' => 'permalink_hash_and_object_type' ] ) ) { + $this->remove_index( + $table_name, + [ + 'permalink_hash', + 'object_type', + ], + [ + 'name' => 'permalink_hash_and_object_type', + ] + ); + } + + $this->change_column( + $table_name, + 'permalink_hash', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + + if ( ! $adapter->has_index( $table_name, [ 'permalink_hash' ], [ 'name' => 'permalink_hash' ] ) ) { + $this->add_index( + $table_name, + [ + 'permalink_hash', + ], + [ + 'name' => 'permalink_hash', + ] + ); + } + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200617122511_CreateSEOLinksTable.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200617122511_CreateSEOLinksTable.php new file mode 100644 index 00000000..c9b2fb6b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200617122511_CreateSEOLinksTable.php @@ -0,0 +1,96 @@ +get_table_name(); + $adapter = $this->get_adapter(); + + // The table may already have been created by legacy code. + // If not, create it exactly as it was. + if ( ! $adapter->table_exists( $table_name ) ) { + $table = $this->create_table( $table_name, [ 'id' => false ] ); + $table->column( + 'id', + 'biginteger', + [ + 'primary_key' => true, + 'limit' => 20, + 'unsigned' => true, + 'auto_increment' => true, + ] + ); + $table->column( 'url', 'string', [ 'limit' => 255 ] ); + $table->column( + 'post_id', + 'biginteger', + [ + 'limit' => 20, + 'unsigned' => true, + ] + ); + $table->column( + 'target_post_id', + 'biginteger', + [ + 'limit' => 20, + 'unsigned' => true, + ] + ); + $table->column( 'type', 'string', [ 'limit' => 8 ] ); + $table->finish(); + } + if ( ! $adapter->has_index( $table_name, [ 'post_id', 'type' ], [ 'name' => 'link_direction' ] ) ) { + $this->add_index( $table_name, [ 'post_id', 'type' ], [ 'name' => 'link_direction' ] ); + } + + // Add these columns outside of the initial table creation as these did not exist on the legacy table. + $this->add_column( $table_name, 'indexable_id', 'integer', [ 'unsigned' => true ] ); + $this->add_column( $table_name, 'target_indexable_id', 'integer', [ 'unsigned' => true ] ); + $this->add_column( $table_name, 'height', 'integer', [ 'unsigned' => true ] ); + $this->add_column( $table_name, 'width', 'integer', [ 'unsigned' => true ] ); + $this->add_column( $table_name, 'size', 'integer', [ 'unsigned' => true ] ); + $this->add_column( $table_name, 'language', 'string', [ 'limit' => 32 ] ); + $this->add_column( $table_name, 'region', 'string', [ 'limit' => 32 ] ); + + $this->add_index( $table_name, [ 'indexable_id', 'type' ], [ 'name' => 'indexable_link_direction' ] ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->drop_table( $this->get_table_name() ); + } + + /** + * Returns the SEO Links table name. + * + * @return string + */ + private function get_table_name() { + return Model::get_table_name( 'SEO_Links' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200702141921_CreateIndexableSubpagesIndex.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200702141921_CreateIndexableSubpagesIndex.php new file mode 100644 index 00000000..ba1d13c8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200702141921_CreateIndexableSubpagesIndex.php @@ -0,0 +1,72 @@ +change_column( + $this->get_table_name(), + 'post_status', + 'string', + [ + 'null' => true, + 'limit' => 20, + ] + ); + $this->add_index( + $this->get_table_name(), + [ 'post_parent', 'object_type', 'post_status', 'object_id' ], + [ 'name' => 'subpages' ] + ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->change_column( + $this->get_table_name(), + 'post_status', + 'string', + [ + 'null' => true, + 'limit' => 191, + ] + ); + $this->remove_index( + $this->get_table_name(), + [ 'post_parent', 'object_type', 'post_status', 'object_id' ], + [ 'name' => 'subpages' ] + ); + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200728095334_AddIndexesForProminentWordsOnIndexables.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200728095334_AddIndexesForProminentWordsOnIndexables.php new file mode 100644 index 00000000..51566ca5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20200728095334_AddIndexesForProminentWordsOnIndexables.php @@ -0,0 +1,68 @@ +get_table_name(); + $adapter = $this->get_adapter(); + + if ( ! $adapter->has_index( $table_name, $this->columns_with_index, [ 'name' => 'prominent_words' ] ) ) { + $this->add_index( + $table_name, + $this->columns_with_index, + [ + 'name' => 'prominent_words', + ] + ); + } + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201202144329_AddEstimatedReadingTime.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201202144329_AddEstimatedReadingTime.php new file mode 100644 index 00000000..f0d94cf3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201202144329_AddEstimatedReadingTime.php @@ -0,0 +1,58 @@ +get_table_name(); + + $this->add_column( + $table_name, + 'estimated_reading_time_minutes', + 'integer', + [ + 'null' => true, + 'default' => null, + ] + ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $table_name = $this->get_table_name(); + + $this->remove_column( $table_name, 'estimated_reading_time_minutes' ); + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216124002_ExpandIndexableIDColumnLengths.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216124002_ExpandIndexableIDColumnLengths.php new file mode 100644 index 00000000..5d46c997 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216124002_ExpandIndexableIDColumnLengths.php @@ -0,0 +1,63 @@ +change_column( + $this->get_table_name(), + $column, + 'biginteger', + [ 'limit' => 20 ] + ); + } + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216141134_ExpandPrimaryTermIDColumnLengths.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216141134_ExpandPrimaryTermIDColumnLengths.php new file mode 100644 index 00000000..9105bae7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20201216141134_ExpandPrimaryTermIDColumnLengths.php @@ -0,0 +1,62 @@ +change_column( + $this->get_table_name(), + $column, + 'biginteger', + [ 'limit' => 20 ] + ); + } + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Primary_Term' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20210817092415_AddVersionColumnToIndexables.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20210817092415_AddVersionColumnToIndexables.php new file mode 100644 index 00000000..2d179abc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20210817092415_AddVersionColumnToIndexables.php @@ -0,0 +1,56 @@ +add_column( + $this->get_table_name(), + 'version', + 'integer', + [ + 'default' => 1, + ] + ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->remove_column( + $this->get_table_name(), + 'version' + ); + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20211020091404_AddObjectTimestamps.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20211020091404_AddObjectTimestamps.php new file mode 100644 index 00000000..eece2639 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20211020091404_AddObjectTimestamps.php @@ -0,0 +1,88 @@ +add_column( + $this->get_table_name(), + 'object_last_modified', + 'datetime', + [ + 'null' => true, + 'default' => null, + ] + ); + $this->add_column( + $this->get_table_name(), + 'object_published_at', + 'datetime', + [ + 'null' => true, + 'default' => null, + ] + ); + $this->add_index( + $this->get_table_name(), + [ + 'object_published_at', + 'is_robots_noindex', + 'object_type', + 'object_sub_type', + ], + [ + 'name' => 'published_sitemap_index', + ] + ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $this->remove_column( $this->get_table_name(), 'object_last_modified' ); + $this->remove_column( $this->get_table_name(), 'object_published_at' ); + $this->remove_index( + $this->get_table_name(), + [ + 'object_published_at', + 'is_robots_noindex', + 'object_type', + 'object_sub_type', + ], + [ + 'name' => 'published_sitemap_index', + ] + ); + } + + /** + * Retrieves the table name to use for storing indexables. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20230417083836_AddInclusiveLanguageScore.php b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20230417083836_AddInclusiveLanguageScore.php new file mode 100644 index 00000000..ab2fdc7c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/migrations/20230417083836_AddInclusiveLanguageScore.php @@ -0,0 +1,58 @@ +get_table_name(); + + $this->add_column( + $table_name, + 'inclusive_language_score', + 'integer', + [ + 'null' => true, + 'limit' => 3, + ] + ); + } + + /** + * Migration down. + * + * @return void + */ + public function down() { + $table_name = $this->get_table_name(); + + $this->remove_column( $table_name, 'inclusive_language_score' ); + } + + /** + * Retrieves the table name to use. + * + * @return string The table name to use. + */ + protected function get_table_name() { + return Model::get_table_name( 'Indexable' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/oauth-client.php b/wp/wp-content/plugins/wordpress-seo/src/config/oauth-client.php new file mode 100644 index 00000000..5ba1ec22 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/oauth-client.php @@ -0,0 +1,308 @@ +provider = $provider; + $this->token_option = $token_option; + $this->options_helper = $options_helper; + + $tokens = $this->options_helper->get( $this->token_option ); + + if ( ! empty( $tokens ) ) { + $this->token = new OAuth_Token( + $tokens['access_token'], + $tokens['refresh_token'], + $tokens['expires'], + $tokens['has_expired'], + $tokens['created_at'], + ( $tokens['error_count'] ?? 0 ) + ); + } + } + + /** + * Requests the access token and refresh token based on the passed code. + * + * @param string $code The code to send. + * + * @return OAuth_Token The requested tokens. + * + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + */ + public function request_tokens( $code ) { + try { + $response = $this->provider + ->getAccessToken( + 'authorization_code', + [ + 'code' => $code, + ] + ); + + $token = OAuth_Token::from_response( $response ); + + return $this->store_token( $token ); + } catch ( Exception $exception ) { + throw new Authentication_Failed_Exception( $exception ); + } + } + + /** + * Performs an authenticated GET request to the desired URL. + * + * @param string $url The URL to send the request to. + * @param array $options The options to pass along to the request. + * + * @return mixed The parsed API response. + * + * @throws IdentityProviderException Exception thrown if there's something wrong with the identifying data. + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + * @throws Empty_Token_Exception Exception thrown if the token is empty. + */ + public function get( $url, $options = [] ) { + return $this->do_request( 'GET', $url, $options ); + } + + /** + * Performs an authenticated POST request to the desired URL. + * + * @param string $url The URL to send the request to. + * @param mixed $body The data to send along in the request's body. + * @param array $options The options to pass along to the request. + * + * @return mixed The parsed API response. + * + * @throws IdentityProviderException Exception thrown if there's something wrong with the identifying data. + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + * @throws Empty_Token_Exception Exception thrown if the token is empty. + */ + public function post( $url, $body, $options = [] ) { + $options['body'] = $body; + + return $this->do_request( 'POST', $url, $options ); + } + + /** + * Performs an authenticated DELETE request to the desired URL. + * + * @param string $url The URL to send the request to. + * @param array $options The options to pass along to the request. + * + * @return mixed The parsed API response. + * + * @throws IdentityProviderException Exception thrown if there's something wrong with the identifying data. + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + * @throws Empty_Token_Exception Exception thrown if the token is empty. + */ + public function delete( $url, $options = [] ) { + return $this->do_request( 'DELETE', $url, $options ); + } + + /** + * Determines whether there are valid tokens available. + * + * @return bool Whether there are valid tokens. + */ + public function has_valid_tokens() { + return ! empty( $this->token ) && $this->token->has_expired() === false; + } + + /** + * Gets the stored tokens and refreshes them if they've expired. + * + * @return OAuth_Token The stored tokens. + * + * @throws Empty_Token_Exception Exception thrown if the token is empty. + */ + public function get_tokens() { + if ( empty( $this->token ) ) { + throw new Empty_Token_Exception(); + } + + if ( $this->token->has_expired() ) { + $this->token = $this->refresh_tokens( $this->token ); + } + + return $this->token; + } + + /** + * Stores the passed token. + * + * @param OAuth_Token $token The token to store. + * + * @return OAuth_Token The stored token. + * + * @throws Failed_Storage_Exception Exception thrown if storing of the token fails. + */ + public function store_token( OAuth_Token $token ) { + $saved = $this->options_helper->set( $this->token_option, $token->to_array() ); + + if ( $saved === false ) { + throw new Failed_Storage_Exception(); + } + + return $token; + } + + /** + * Clears the stored token from storage. + * + * @return bool The stored token. + * + * @throws Failed_Storage_Exception Exception thrown if clearing of the token fails. + */ + public function clear_token() { + $saved = $this->options_helper->set( $this->token_option, [] ); + + if ( $saved === false ) { + throw new Failed_Storage_Exception(); + } + + return true; + } + + /** + * Performs the specified request. + * + * @param string $method The HTTP method to use. + * @param string $url The URL to send the request to. + * @param array $options The options to pass along to the request. + * + * @return mixed The parsed API response. + * + * @throws IdentityProviderException Exception thrown if there's something wrong with the identifying data. + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + * @throws Empty_Token_Exception Exception thrown if the token is empty. + */ + protected function do_request( $method, $url, array $options ) { + $defaults = [ + 'headers' => $this->provider->getHeaders( $this->get_tokens()->access_token ), + ]; + + $options = \array_merge_recursive( $defaults, $options ); + + if ( \array_key_exists( 'params', $options ) ) { + $url .= '?' . \http_build_query( $options['params'] ); + unset( $options['params'] ); + } + + $request = $this->provider + ->getAuthenticatedRequest( $method, $url, null, $options ); + + return $this->provider->getParsedResponse( $request ); + } + + /** + * Refreshes the outdated tokens. + * + * @param OAuth_Token $tokens The outdated tokens. + * + * @return OAuth_Token The refreshed tokens. + * + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + */ + protected function refresh_tokens( OAuth_Token $tokens ) { + // We do this dance with transients since we need to make sure we don't + // delete valid tokens because of a race condition when two calls are + // made simultaneously to this function and refresh token rotation is + // turned on in the OAuth server. This is not 100% safe, but should at + // least be much better than not having any lock at all. + $lock_name = \sprintf( 'lock:%s', $this->token_option ); + $can_lock = \get_transient( $lock_name ) === false; + $has_lock = $can_lock && \set_transient( $lock_name, true, 30 ); + + try { + $new_tokens = $this->provider->getAccessToken( + 'refresh_token', + [ + 'refresh_token' => $tokens->refresh_token, + ] + ); + + $token_obj = OAuth_Token::from_response( $new_tokens ); + + return $this->store_token( $token_obj ); + } catch ( Exception $exception ) { + // If we tried to refresh but the refresh token is invalid, delete + // the tokens so that we don't try again. Only do this if we got the + // lock at the beginning of the call. + if ( $has_lock && $exception->getMessage() === 'invalid_grant' ) { + try { + // To protect from race conditions, only do this if we've + // seen an error before with the same token. + if ( $tokens->error_count >= 1 ) { + $this->clear_token(); + } + else { + $tokens->error_count += 1; + $this->store_token( $tokens ); + } + } catch ( Exception $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch + // Pass through. + } + } + + throw new Authentication_Failed_Exception( $exception ); + } finally { + \delete_transient( $lock_name ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/researcher-languages.php b/wp/wp-content/plugins/wordpress-seo/src/config/researcher-languages.php new file mode 100644 index 00000000..eb9a455e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/researcher-languages.php @@ -0,0 +1,11 @@ + '', + 'ItemPage' => '', + 'AboutPage' => '', + 'FAQPage' => '', + 'QAPage' => '', + 'ProfilePage' => '', + 'ContactPage' => '', + 'MedicalWebPage' => '', + 'CollectionPage' => '', + 'CheckoutPage' => '', + 'RealEstateListing' => '', + 'SearchResultsPage' => '', + ]; + + /** + * Holds the possible schema article types. + * + * Capitalized in this way so the value can be directly used in the schema output. + * + * @var string[] + */ + public const ARTICLE_TYPES = [ + 'Article' => '', + 'BlogPosting' => '', + 'SocialMediaPosting' => '', + 'NewsArticle' => '', + 'AdvertiserContentArticle' => '', + 'SatiricalArticle' => '', + 'ScholarlyArticle' => '', + 'TechArticle' => '', + 'Report' => '', + 'None' => '', + ]; + + /** + * Gets the page type options. + * + * @return array[] The schema page type options. + */ + public function get_page_type_options() { + return [ + [ + 'name' => \__( 'Web Page', 'wordpress-seo' ), + 'value' => 'WebPage', + ], + [ + 'name' => \__( 'Item Page', 'wordpress-seo' ), + 'value' => 'ItemPage', + ], + [ + 'name' => \__( 'About Page', 'wordpress-seo' ), + 'value' => 'AboutPage', + ], + [ + 'name' => \__( 'FAQ Page', 'wordpress-seo' ), + 'value' => 'FAQPage', + ], + [ + 'name' => \__( 'QA Page', 'wordpress-seo' ), + 'value' => 'QAPage', + ], + [ + 'name' => \__( 'Profile Page', 'wordpress-seo' ), + 'value' => 'ProfilePage', + ], + [ + 'name' => \__( 'Contact Page', 'wordpress-seo' ), + 'value' => 'ContactPage', + ], + [ + 'name' => \__( 'Medical Web Page', 'wordpress-seo' ), + 'value' => 'MedicalWebPage', + ], + [ + 'name' => \__( 'Collection Page', 'wordpress-seo' ), + 'value' => 'CollectionPage', + ], + [ + 'name' => \__( 'Checkout Page', 'wordpress-seo' ), + 'value' => 'CheckoutPage', + ], + [ + 'name' => \__( 'Real Estate Listing', 'wordpress-seo' ), + 'value' => 'RealEstateListing', + ], + [ + 'name' => \__( 'Search Results Page', 'wordpress-seo' ), + 'value' => 'SearchResultsPage', + ], + ]; + } + + /** + * Gets the article type options. + * + * @return array[] The schema article type options. + */ + public function get_article_type_options() { + /** + * Filter: 'wpseo_schema_article_types_labels' - Allow developers to filter the available article types and their labels. + * + * Make sure when you filter this to also filter `wpseo_schema_article_types`. + * + * @param array $schema_article_types_labels The available schema article types and their labels. + */ + return \apply_filters( + 'wpseo_schema_article_types_labels', + [ + [ + 'name' => \__( 'Article', 'wordpress-seo' ), + 'value' => 'Article', + ], + [ + 'name' => \__( 'Blog Post', 'wordpress-seo' ), + 'value' => 'BlogPosting', + ], + [ + 'name' => \__( 'Social Media Posting', 'wordpress-seo' ), + 'value' => 'SocialMediaPosting', + ], + [ + 'name' => \__( 'News Article', 'wordpress-seo' ), + 'value' => 'NewsArticle', + ], + [ + 'name' => \__( 'Advertiser Content Article', 'wordpress-seo' ), + 'value' => 'AdvertiserContentArticle', + ], + [ + 'name' => \__( 'Satirical Article', 'wordpress-seo' ), + 'value' => 'SatiricalArticle', + ], + [ + 'name' => \__( 'Scholarly Article', 'wordpress-seo' ), + 'value' => 'ScholarlyArticle', + ], + [ + 'name' => \__( 'Tech Article', 'wordpress-seo' ), + 'value' => 'TechArticle', + ], + [ + 'name' => \__( 'Report', 'wordpress-seo' ), + 'value' => 'Report', + ], + [ + 'name' => \__( 'None', 'wordpress-seo' ), + 'value' => 'None', + ], + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/semrush-client.php b/wp/wp-content/plugins/wordpress-seo/src/config/semrush-client.php new file mode 100644 index 00000000..eaaf115c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/semrush-client.php @@ -0,0 +1,86 @@ + 'yoast', + 'clientSecret' => 'YdqNsWwnP4vE54WO1ugThKEjGMxMAHJt', + 'redirectUri' => 'https://oauth.semrush.com/oauth2/yoast/success', + 'urlAuthorize' => 'https://oauth.semrush.com/oauth2/authorize', + 'urlAccessToken' => 'https://oauth.semrush.com/oauth2/access_token', + 'urlResourceOwnerDetails' => 'https://oauth.semrush.com/oauth2/resource', + ], + [ + 'httpClient' => new Client( [ 'handler' => $wp_remote_handler ] ), + ] + ); + + parent::__construct( + self::TOKEN_OPTION, + $provider, + $options_helper + ); + } + + /** + * Performs the specified request. + * + * @codeCoverageIgnore + * + * @param string $method The HTTP method to use. + * @param string $url The URL to send the request to. + * @param array $options The options to pass along to the request. + * + * @return mixed The parsed API response. + * + * @throws IdentityProviderException Exception thrown if there's something wrong with the identifying data. + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + * @throws Empty_Token_Exception Exception thrown if the token is empty. + */ + public function do_request( $method, $url, array $options ) { + // Add the access token to the GET parameters as well since this is what + // the SEMRush API expects. + $options = \array_merge_recursive( + $options, + [ + 'params' => [ + 'access_token' => $this->get_tokens()->access_token, + ], + ] + ); + + return parent::do_request( $method, $url, $options ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/wincher-client.php b/wp/wp-content/plugins/wordpress-seo/src/config/wincher-client.php new file mode 100644 index 00000000..e50963ca --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/wincher-client.php @@ -0,0 +1,132 @@ + 'yoast', + 'redirectUri' => 'https://auth.wincher.com/yoast/setup', + 'urlAuthorize' => 'https://auth.wincher.com/connect/authorize', + 'urlAccessToken' => 'https://auth.wincher.com/connect/token', + 'urlResourceOwnerDetails' => 'https://api.wincher.com/beta/user', + 'scopes' => [ 'profile', 'account', 'websites:read', 'websites:write', 'offline_access' ], + 'scopeSeparator' => ' ', + 'pkceMethod' => 'S256', + ], + [ + 'httpClient' => new Client( [ 'handler' => $wp_remote_handler ] ), + ] + ); + + parent::__construct( + self::TOKEN_OPTION, + $provider, + $options_helper + ); + } + + /** + * Return the authorization URL. + * + * @return string The authentication URL. + */ + public function get_authorization_url() { + $parsed_site_url = \wp_parse_url( \get_site_url() ); + + $url = $this->provider->getAuthorizationUrl( + [ + 'state' => WPSEO_Utils::format_json_encode( [ 'domain' => $parsed_site_url['host'] ] ), + ] + ); + + $pkce_code = $this->provider->getPkceCode(); + + // Store a transient value with the PKCE code that we need in order to + // exchange the returned code for a token after authorization. + \set_transient( self::PKCE_TRANSIENT_NAME, $pkce_code, \DAY_IN_SECONDS ); + + return $url; + } + + /** + * Requests the access token and refresh token based on the passed code. + * + * @param string $code The code to send. + * + * @return OAuth_Token The requested tokens. + * + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + */ + public function request_tokens( $code ) { + $pkce_code = \get_transient( self::PKCE_TRANSIENT_NAME ); + if ( $pkce_code ) { + $this->provider->setPkceCode( $pkce_code ); + } + return parent::request_tokens( $code ); + } + + /** + * Performs the specified request. + * + * @codeCoverageIgnore + * + * @param string $method The HTTP method to use. + * @param string $url The URL to send the request to. + * @param array $options The options to pass along to the request. + * + * @return mixed The parsed API response. + * + * @throws IdentityProviderException Exception thrown if there's something wrong with the identifying data. + * @throws Authentication_Failed_Exception Exception thrown if authentication has failed. + * @throws Empty_Token_Exception Exception thrown if the token is empty. + */ + protected function do_request( $method, $url, array $options ) { + $options['headers'] = [ 'Content-Type' => 'application/json' ]; + return parent::do_request( $method, $url, $options ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/config/wincher-pkce-provider.php b/wp/wp-content/plugins/wordpress-seo/src/config/wincher-pkce-provider.php new file mode 100644 index 00000000..57ce5663 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/config/wincher-pkce-provider.php @@ -0,0 +1,257 @@ +pkceCode = $pkce_code; + return $this; + } + + /** + * Returns the current value of the pkceCode parameter. + * + * This can be accessed by the redirect handler during authorization. + * + * @return string + */ + public function getPkceCode() { + return $this->pkceCode; + } + + /** + * Returns a new random string to use as PKCE code_verifier and + * hashed as code_challenge parameters in an authorization flow. + * Must be between 43 and 128 characters long. + * + * @param int $length Length of the random string to be generated. + * + * @return string + * + * @throws Exception Throws exception if an invalid value is passed to random_bytes. + */ + protected function getRandomPkceCode( $length = 64 ) { + return \substr( + \strtr( + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode + \base64_encode( \random_bytes( $length ) ), + '+/', + '-_' + ), + 0, + $length + ); + } + + /** + * Returns the current value of the pkceMethod parameter. + * + * @return string|null + */ + protected function getPkceMethod() { + return $this->pkceMethod; + } + + /** + * Returns authorization parameters based on provided options. + * + * @param array $options The options to use in the authorization parameters. + * + * @return array The authorization parameters + * + * @throws InvalidArgumentException Throws exception if an invalid PCKE method is passed in the options. + * @throws Exception When something goes wrong with generating the PKCE code. + */ + protected function getAuthorizationParameters( array $options ) { + if ( empty( $options['state'] ) ) { + $options['state'] = $this->getRandomState(); + } + + if ( empty( $options['scope'] ) ) { + $options['scope'] = $this->getDefaultScopes(); + } + + $options += [ + 'response_type' => 'code', + ]; + + if ( \is_array( $options['scope'] ) ) { + $separator = $this->getScopeSeparator(); + $options['scope'] = \implode( $separator, $options['scope'] ); + } + + // Store the state as it may need to be accessed later on. + $this->state = $options['state']; + + $pkce_method = $this->getPkceMethod(); + if ( ! empty( $pkce_method ) ) { + $this->pkceCode = $this->getRandomPkceCode(); + if ( $pkce_method === 'S256' ) { + $options['code_challenge'] = \trim( + \strtr( + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode + \base64_encode( \hash( 'sha256', $this->pkceCode, true ) ), + '+/', + '-_' + ), + '=' + ); + } + elseif ( $pkce_method === 'plain' ) { + $options['code_challenge'] = $this->pkceCode; + } + else { + throw new InvalidArgumentException( 'Unknown PKCE method "' . $pkce_method . '".' ); + } + $options['code_challenge_method'] = $pkce_method; + } + + // Business code layer might set a different redirect_uri parameter. + // Depending on the context, leave it as-is. + if ( ! isset( $options['redirect_uri'] ) ) { + $options['redirect_uri'] = $this->redirectUri; + } + + $options['client_id'] = $this->clientId; + + return $options; + } + + /** + * Requests an access token using a specified grant and option set. + * + * @param mixed $grant The grant to request access for. + * @param array $options The options to use with the current request. + * + * @return AccessToken|AccessTokenInterface The access token. + * + * @throws UnexpectedValueException Exception thrown if the provider response contains errors. + */ + public function getAccessToken( $grant, array $options = [] ) { + $grant = $this->verifyGrant( $grant ); + + $params = [ + 'client_id' => $this->clientId, + 'client_secret' => $this->clientSecret, + 'redirect_uri' => $this->redirectUri, + ]; + + if ( ! empty( $this->pkceCode ) ) { + $params['code_verifier'] = $this->pkceCode; + } + + $params = $grant->prepareRequestParameters( $params, $options ); + $request = $this->getAccessTokenRequest( $params ); + $response = $this->getParsedResponse( $request ); + + if ( \is_array( $response ) === false ) { + throw new UnexpectedValueException( + 'Invalid response received from Authorization Server. Expected JSON.' + ); + } + + $prepared = $this->prepareAccessTokenResponse( $response ); + $token = $this->createAccessToken( $prepared, $grant ); + + return $token; + } + + /** + * Returns all options that can be configured. + * + * @return array The configurable options. + */ + protected function getConfigurableOptions() { + return \array_merge( + $this->getRequiredOptions(), + [ + 'accessTokenMethod', + 'accessTokenResourceOwnerId', + 'scopeSeparator', + 'responseError', + 'responseCode', + 'responseResourceOwnerId', + 'scopes', + 'pkceMethod', + ] + ); + } + + /** + * Parses the request response. + * + * @param RequestInterface $request The request interface. + * + * @return array The parsed response. + * + * @throws IdentityProviderException Exception thrown if there is no proper identity provider. + */ + public function getParsedResponse( RequestInterface $request ) { + try { + $response = $this->getResponse( $request ); + } catch ( BadResponseException $e ) { + $response = $e->getResponse(); + } + + $parsed = $this->parseResponse( $response ); + + $this->checkResponse( $response, $parsed ); + + // We always expect an array from the API except for on DELETE requests. + // We convert to an array here to prevent problems with array_key_exists on PHP8. + if ( ! \is_array( $parsed ) ) { + $parsed = [ 'data' => [] ]; + } + + // Add the response code as this is omitted from Winchers API. + if ( ! \array_key_exists( 'status', $parsed ) ) { + $parsed['status'] = $response->getStatusCode(); + } + + return $parsed; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-dismiss-notifications.php b/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-dismiss-notifications.php new file mode 100644 index 00000000..c27841aa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-dismiss-notifications.php @@ -0,0 +1,128 @@ +options = $options; + } + + /** + * Removes New badge from a post type in the Settings, remove notifications if needed. + * + * @param string $post_type_name The post type name from the request. + * @return array The response. + */ + public function post_type_dismiss( $post_type_name ) { + $success = true; + $message = \__( 'Post type is not new.', 'wordpress-seo' ); + $post_types_needs_review = $this->options->get( 'new_post_types', [] ); + + if ( $post_types_needs_review && \in_array( $post_type_name, $post_types_needs_review, true ) ) { + $new_needs_review = \array_diff( $post_types_needs_review, [ $post_type_name ] ); + $success = $this->options->set( 'new_post_types', $new_needs_review ); + $message = ( $success ) ? \__( 'Post type is no longer new.', 'wordpress-seo' ) : \__( 'Error: Post type was not removed from new_post_types list.', 'wordpress-seo' ); + if ( $success ) { + $this->maybe_dismiss_notifications( [ 'new_post_types' => $new_needs_review ] ); + } + } + + $status = ( $success ) ? 200 : 400; + + return [ + 'message' => $message, + 'success' => $success, + 'status' => $status, + ]; + } + + /** + * Removes New badge from a taxonomy in the Settings, remove notifications if needed. + * + * @param string $taxonomy_name The taxonomy name from the request. + * @return array The response. + */ + public function taxonomy_dismiss( $taxonomy_name ) { + $success = true; + $message = \__( 'Taxonomy is not new.', 'wordpress-seo' ); + $taxonomies_needs_review = $this->options->get( 'new_taxonomies', [] ); + + if ( \in_array( $taxonomy_name, $taxonomies_needs_review, true ) ) { + + $new_needs_review = \array_diff( $taxonomies_needs_review, [ $taxonomy_name ] ); + $success = $this->options->set( 'new_taxonomies', $new_needs_review ); + $message = ( $success ) ? \__( 'Taxonomy is no longer new.', 'wordpress-seo' ) : \__( 'Error: Taxonomy was not removed from new_taxonomies list.', 'wordpress-seo' ); + if ( $success ) { + $this->maybe_dismiss_notifications( [ 'new_taxonomies' => $new_needs_review ] ); + } + } + + $status = ( $success ) ? 200 : 400; + + return [ + 'message' => $message, + 'success' => $success, + 'status' => $status, + ]; + } + + /** + * Checks if there are new content types or taxonomies. + * + * @param array $new_content_types The new content types. + * @return void + */ + public function maybe_dismiss_notifications( $new_content_types = [] ) { + + $post_types_needs_review = ( \array_key_exists( 'new_post_types', $new_content_types ) ) ? $new_content_types['new_post_types'] : $this->options->get( 'new_post_types', [] ); + $taxonomies_needs_review = ( \array_key_exists( 'new_taxonomies', $new_content_types ) ) ? $new_content_types['new_taxonomies'] : $this->options->get( 'new_taxonomies', [] ); + + if ( $post_types_needs_review || $taxonomies_needs_review ) { + return; + } + $this->dismiss_notifications(); + } + + /** + * Dismisses the notification in the notification center when there are no more new content types. + * + * @return bool + */ + public function dismiss_notifications() { + $notification_center = Yoast_Notification_Center::get(); + $notification_center->remove_notification_by_id( 'content-types-made-public' ); + return $this->options->set( 'show_new_content_type_notification', false ); + } + + /** + * Check if there is a new content type to show notification only once in the settings. + * + * @return bool Should the notification be shown. + */ + public function maybe_add_settings_notification() { + $show_new_content_type_notification = $this->options->get( 'show_new_content_type_notification', false ); + if ( $show_new_content_type_notification ) { + $this->options->set( 'show_new_content_type_notification', false ); + } + return $show_new_content_type_notification; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-watcher-actions.php b/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-watcher-actions.php new file mode 100644 index 00000000..f1ce515d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/application/content-type-visibility-watcher-actions.php @@ -0,0 +1,174 @@ +options = $options; + $this->notification_center = $notification_center; + $this->content_type_dismiss_notifications = $content_type_dismiss_notifications; + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * Register actions that are used in the post types and taxonomies indexable watcher. + * + * @return void + */ + public function register_hooks() { + // Used in Idexable_Post_Type_Change_Watcher class. + \add_action( 'new_public_post_type_notifications', [ $this, 'new_post_type' ], 10, 1 ); + \add_action( 'clean_new_public_post_type_notifications', [ $this, 'clean_new_public_post_type' ], 10, 1 ); + + // Used in Idexable_Taxonomy_Change_Watcher class. + \add_action( 'new_public_taxonomy_notifications', [ $this, 'new_taxonomy' ], 10, 1 ); + \add_action( 'clean_new_public_taxonomy_notifications', [ $this, 'clean_new_public_taxonomy' ], 10, 1 ); + } + + /** + * Update db and tigger notification when a new post type is registered. + * + * @param array $newly_made_public_post_types The newly made public post types. + * @return void + */ + public function new_post_type( $newly_made_public_post_types ) { + $this->options->set( 'new_post_types', $newly_made_public_post_types ); + $this->options->set( 'show_new_content_type_notification', true ); + $this->maybe_add_notification(); + } + + /** + * Update db when a post type is made removed. + * + * @param array $newly_made_non_public_post_types The newly made non public post types. + * @return void + */ + public function clean_new_public_post_type( $newly_made_non_public_post_types ) { + // See if post types that needs review were removed and update option. + $needs_review = $this->options->get( 'new_post_types', [] ); + $new_needs_review = \array_diff( $needs_review, $newly_made_non_public_post_types ); + if ( \count( $new_needs_review ) !== \count( $needs_review ) ) { + $this->options->set( 'new_post_types', $new_needs_review ); + $this->content_type_dismiss_notifications->maybe_dismiss_notifications( [ 'new_post_types' => $new_needs_review ] ); + } + } + + /** + * Update db and tigger notification when a new taxonomy is registered. + * + * @param array $newly_made_public_taxonomies The newly made public post types. + * @return void + */ + public function new_taxonomy( $newly_made_public_taxonomies ) { + $this->options->set( 'new_taxonomies', $newly_made_public_taxonomies ); + $this->options->set( 'show_new_content_type_notification', true ); + $this->maybe_add_notification(); + } + + /** + * Update db when a post type is made removed. + * + * @param array $newly_made_non_public_taxonomies The newly made non public post types. + * @return void + */ + public function clean_new_public_taxonomy( $newly_made_non_public_taxonomies ) { + // See if post types that needs review were removed and update option. + $needs_review = $this->options->get( 'new_taxonomies', [] ); + $new_needs_review = \array_diff( $needs_review, $newly_made_non_public_taxonomies ); + if ( \count( $new_needs_review ) !== \count( $needs_review ) ) { + $this->options->set( 'new_taxonomies', $new_needs_review ); + $this->content_type_dismiss_notifications->maybe_dismiss_notifications( [ 'new_taxonomies' => $new_needs_review ] ); + } + } + + /** + * Decides if a notification should be added in the notification center. + * + * @return void + */ + public function maybe_add_notification() { + $notification = $this->notification_center->get_notification_by_id( 'content-types-made-public' ); + if ( \is_null( $notification ) ) { + $this->add_notification(); + } + } + + /** + * Adds a notification to be shown on the next page request since posts are updated in an ajax request. + * + * @return void + */ + private function add_notification() { + $message = \sprintf( + /* translators: 1: Opening tag of the link to the Search appearance settings page, 2: Link closing tag. */ + \esc_html__( 'You\'ve added a new type of content. We recommend that you review the corresponding %1$sSearch appearance settings%2$s.', 'wordpress-seo' ), + '', + '' + ); + + $notification = new Yoast_Notification( + $message, + [ + 'type' => Yoast_Notification::WARNING, + 'id' => 'content-types-made-public', + 'capabilities' => 'wpseo_manage_options', + 'priority' => 0.8, + ] + ); + + $this->notification_center->add_notification( $notification ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/user-interface/content-type-visibility-dismiss-new-route.php b/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/user-interface/content-type-visibility-dismiss-new-route.php new file mode 100644 index 00000000..df999e16 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/content-type-visibility/user-interface/content-type-visibility-dismiss-new-route.php @@ -0,0 +1,155 @@ +dismiss_notifications = $dismiss_notifications; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $post_type_dismiss_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'post_type_dismiss_callback' ], + 'permission_callback' => [ $this, 'can_dismiss' ], + 'args' => [ + 'postTypeName' => [ + 'validate_callback' => [ $this, 'validate_post_type' ], + ], + ], + ]; + + $taxonomy_dismiss_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'taxonomy_dismiss_callback' ], + 'permission_callback' => [ $this, 'can_dismiss' ], + 'args' => [ + 'taxonomyName' => [ + 'validate_callback' => [ $this, 'validate_taxonomy' ], + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::POST_TYPE_DISMISS_ROUTE, $post_type_dismiss_route_args ); + \register_rest_route( Main::API_V1_NAMESPACE, self::TAXONOMY_DISMISS_ROUTE, $taxonomy_dismiss_route_args ); + } + + /** + * Whether or not the current user is allowed to dismiss alerts. + * + * @return bool Whether or not the current user is allowed to dismiss alerts. + */ + public function can_dismiss() { + return \current_user_can( 'edit_posts' ); + } + + /** + * Validates post type. + * + * @param string $param The parameter. + * @param WP_REST_Request $request Full details about the request. + * @param string $key The key. + * + * @return bool + */ + public function validate_post_type( $param, $request, $key ) { + return \post_type_exists( $param ); + } + + /** + * Wrapper method for Content_Type_Visibility_Dismiss_Notifications::post_type_dismiss(). + * + * @param WP_REST_Request $request The request. This request should have a key param set. + * + * @return WP_REST_Response The response. + */ + public function post_type_dismiss_callback( $request ) { + $response = $this->dismiss_notifications->post_type_dismiss( $request['post_type_name'] ); + + return new WP_REST_Response( + (object) $response, + $response['status'] + ); + } + + /** + * Validates taxonomy. + * + * @param string $param The parameter. + * @param WP_REST_Request $request Full details about the request. + * @param string $key The key. + * + * @return bool + */ + public function validate_taxonomy( $param, $request, $key ) { + return \taxonomy_exists( $param ); + } + + /** + * Wrapper method for Content_Type_Visibility_Dismiss_Notifications::taxonomy_dismiss(). + * + * @param WP_REST_Request $request The request. This request should have a key param set. + * + * @return WP_REST_Response The response. + */ + public function taxonomy_dismiss_callback( WP_REST_Request $request ) { + $response = $this->dismiss_notifications->taxonomy_dismiss( $request['taxonomy_name'] ); + + return new WP_REST_Response( + (object) $response, + $response['status'] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/context/meta-tags-context.php b/wp/wp-content/plugins/wordpress-seo/src/context/meta-tags-context.php new file mode 100644 index 00000000..f5b95acd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/context/meta-tags-context.php @@ -0,0 +1,774 @@ +options = $options; + $this->url = $url; + $this->image = $image; + $this->id_helper = $id_helper; + $this->replace_vars = $replace_vars; + $this->site = $site; + $this->user = $user; + $this->permalink_helper = $permalink_helper; + $this->indexable_helper = $indexable_helper; + $this->indexable_repository = $indexable_repository; + $this->request_helper = $request_helper; + } + + /** + * Generates the title. + * + * @return string the title + */ + public function generate_title() { + return $this->replace_vars->replace( $this->presentation->title, $this->presentation->source ); + } + + /** + * Generates the description. + * + * @return string the description + */ + public function generate_description() { + return $this->replace_vars->replace( $this->presentation->meta_description, $this->presentation->source ); + } + + /** + * Generates the canonical. + * + * @return string the canonical + */ + public function generate_canonical() { + return $this->presentation->canonical; + } + + /** + * Generates the permalink. + * + * @return string + */ + public function generate_permalink() { + if ( ! \is_search() ) { + return $this->presentation->permalink; + } + + return \add_query_arg( 's', \rawurlencode( \get_search_query() ), \trailingslashit( $this->site_url ) ); + } + + /** + * Generates the id. + * + * @return string the id + */ + public function generate_id() { + return $this->indexable->object_id; + } + + /** + * Generates the site name. + * + * @return string The site name. + */ + public function generate_site_name() { + $site_name = $this->options->get( 'website_name', '' ); + if ( $site_name !== '' ) { + return $site_name; + } + + return \get_bloginfo( 'name' ); + } + + /** + * Generates the alternate site name. + * + * @return string The alternate site name. + */ + public function generate_alternate_site_name() { + return (string) $this->options->get( 'alternate_website_name', '' ); + } + + /** + * Generates the site name from the WordPress options. + * + * @return string The site name from the WordPress options. + */ + public function generate_wordpress_site_name() { + return $this->site->get_site_name(); + } + + /** + * Generates the site url. + * + * @return string The site url. + */ + public function generate_site_url() { + $home_page_indexable = $this->indexable_repository->find_for_home_page(); + + if ( $this->indexable_helper->dynamic_permalinks_enabled() ) { + return \trailingslashit( $this->permalink_helper->get_permalink_for_indexable( $home_page_indexable ) ); + } + + return \trailingslashit( $home_page_indexable->permalink ); + } + + /** + * Generates the company name. + * + * @return string The company name. + */ + public function generate_company_name() { + /** + * Filter: 'wpseo_schema_company_name' - Allows filtering company name + * + * @param string $company_name. + */ + $company_name = \apply_filters( 'wpseo_schema_company_name', $this->options->get( 'company_name' ) ); + + if ( empty( $company_name ) ) { + $company_name = $this->site_name; + } + + return $company_name; + } + + /** + * Generates the alternate company name. + * + * @return string + */ + public function generate_company_alternate_name() { + return (string) $this->options->get( 'company_alternate_name' ); + } + + /** + * Generates the person logo id. + * + * @return int|bool The company logo id. + */ + public function generate_person_logo_id() { + $person_logo_id = $this->image->get_attachment_id_from_settings( 'person_logo' ); + + if ( empty( $person_logo_id ) ) { + $person_logo_id = $this->fallback_to_site_logo(); + } + + /** + * Filter: 'wpseo_schema_person_logo_id' - Allows filtering person logo id. + * + * @param int $person_logo_id. + */ + return \apply_filters( 'wpseo_schema_person_logo_id', $person_logo_id ); + } + + /** + * Retrieve the person logo meta. + * + * @return array>|bool + */ + public function generate_person_logo_meta() { + $person_logo_meta = $this->image->get_attachment_meta_from_settings( 'person_logo' ); + + if ( empty( $person_logo_meta ) ) { + $person_logo_id = $this->fallback_to_site_logo(); + $person_logo_meta = $this->image->get_best_attachment_variation( $person_logo_id ); + } + + /** + * Filter: 'wpseo_schema_person_logo_meta' - Allows filtering person logo meta. + * + * @param string $person_logo_meta. + */ + return \apply_filters( 'wpseo_schema_person_logo_meta', $person_logo_meta ); + } + + /** + * Generates the company logo id. + * + * @return int|bool The company logo id. + */ + public function generate_company_logo_id() { + $company_logo_id = $this->image->get_attachment_id_from_settings( 'company_logo' ); + + if ( empty( $company_logo_id ) ) { + $company_logo_id = $this->fallback_to_site_logo(); + } + + /** + * Filter: 'wpseo_schema_company_logo_id' - Allows filtering company logo id. + * + * @param int $company_logo_id. + */ + return \apply_filters( 'wpseo_schema_company_logo_id', $company_logo_id ); + } + + /** + * Retrieve the company logo meta. + * + * @return array>|bool + */ + public function generate_company_logo_meta() { + $company_logo_meta = $this->image->get_attachment_meta_from_settings( 'company_logo' ); + + /** + * Filter: 'wpseo_schema_company_logo_meta' - Allows filtering company logo meta. + * + * @param string $company_logo_meta. + */ + return \apply_filters( 'wpseo_schema_company_logo_meta', $company_logo_meta ); + } + + /** + * Generates the site user id. + * + * @return int The site user id. + */ + public function generate_site_user_id() { + return (int) $this->options->get( 'company_or_person_user_id', false ); + } + + /** + * Determines what our site represents, and grabs their values. + * + * @return string|false Person or company. False if invalid value. + */ + public function generate_site_represents() { + switch ( $this->options->get( 'company_or_person', false ) ) { + case 'company': + // Do not use a non-named company. + if ( empty( $this->company_name ) ) { + return false; + } + + /* + * Do not use a company without a logo. + * The logic check is on `< 1` instead of `false` due to how `get_attachment_id_from_settings` works. + */ + if ( $this->company_logo_id < 1 ) { + return false; + } + + return 'company'; + case 'person': + // Do not use a non-existing user. + if ( $this->site_user_id !== false && \get_user_by( 'id', $this->site_user_id ) === false ) { + return false; + } + + return 'person'; + } + + return false; + } + + /** + * Returns the site represents reference. + * + * @return array|bool The site represents reference. False if none. + */ + public function generate_site_represents_reference() { + if ( $this->site_represents === 'person' ) { + return [ '@id' => $this->id_helper->get_user_schema_id( $this->site_user_id, $this ) ]; + } + if ( $this->site_represents === 'company' ) { + return [ '@id' => $this->site_url . Schema_IDs::ORGANIZATION_HASH ]; + } + + return false; + } + + /** + * Returns whether or not open graph is enabled. + * + * @return bool Whether or not open graph is enabled. + */ + public function generate_open_graph_enabled() { + return $this->options->get( 'opengraph' ) === true; + } + + /** + * Returns the open graph publisher. + * + * @return string The open graph publisher. + */ + public function generate_open_graph_publisher() { + if ( $this->site_represents === 'company' ) { + return $this->options->get( 'facebook_site', '' ); + } + if ( $this->site_represents === 'person' ) { + return $this->user->get_the_author_meta( 'facebook', $this->site_user_id ); + } + + return $this->options->get( 'facebook_site', '' ); + } + + /** + * Returns the twitter card type. + * + * @return string The twitter card type. + */ + public function generate_twitter_card() { + return 'summary_large_image'; + } + + /** + * Returns the schema page type. + * + * @return string|array The schema page type. + */ + public function generate_schema_page_type() { + switch ( $this->indexable->object_type ) { + case 'system-page': + switch ( $this->indexable->object_sub_type ) { + case 'search-result': + $type = [ 'CollectionPage', 'SearchResultsPage' ]; + break; + default: + $type = 'WebPage'; + } + break; + case 'user': + $type = 'ProfilePage'; + break; + case 'home-page': + case 'date-archive': + case 'term': + case 'post-type-archive': + $type = 'CollectionPage'; + break; + default: + $additional_type = $this->indexable->schema_page_type; + if ( \is_null( $additional_type ) ) { + $additional_type = $this->options->get( 'schema-page-type-' . $this->indexable->object_sub_type ); + } + + $type = [ 'WebPage', $additional_type ]; + + // Is this indexable set as a page for posts, e.g. in the WordPress reading settings as a static homepage? + if ( (int) \get_option( 'page_for_posts' ) === $this->indexable->object_id ) { + $type[] = 'CollectionPage'; + } + + // Ensure we get only unique values, and remove any null values and the index. + $type = \array_filter( \array_values( \array_unique( $type ) ) ); + } + + /** + * Filter: 'wpseo_schema_webpage_type' - Allow changing the WebPage type. + * + * @param string|array $type The WebPage type. + */ + return \apply_filters( 'wpseo_schema_webpage_type', $type ); + } + + /** + * Returns the schema article type. + * + * @return string|array The schema article type. + */ + public function generate_schema_article_type() { + $additional_type = $this->indexable->schema_article_type; + if ( \is_null( $additional_type ) ) { + $additional_type = $this->options->get( 'schema-article-type-' . $this->indexable->object_sub_type ); + } + + /** This filter is documented in inc/options/class-wpseo-option-titles.php */ + $allowed_article_types = \apply_filters( 'wpseo_schema_article_types', Schema_Types::ARTICLE_TYPES ); + + if ( ! \array_key_exists( $additional_type, $allowed_article_types ) ) { + $additional_type = $this->options->get_title_default( 'schema-article-type-' . $this->indexable->object_sub_type ); + } + + // If the additional type is a subtype of Article, we're fine, and we can bail here. + if ( \stripos( $additional_type, 'Article' ) !== false ) { + /** + * Filter: 'wpseo_schema_article_type' - Allow changing the Article type. + * + * @param string|string[] $type The Article type. + * @param Indexable $indexable The indexable. + */ + return \apply_filters( 'wpseo_schema_article_type', $additional_type, $this->indexable ); + } + + $type = 'Article'; + + /* + * If `None` is set (either on the indexable or as a default), set type to 'None'. + * This simplifies is_needed checks downstream. + */ + if ( $additional_type === 'None' ) { + $type = $additional_type; + } + + if ( $additional_type !== $type ) { + $type = [ $type, $additional_type ]; + } + + // Filter documented on line 499 above. + return \apply_filters( 'wpseo_schema_article_type', $type, $this->indexable ); + } + + /** + * Returns the main schema id. + * + * The main schema id. + * + * @return string + */ + public function generate_main_schema_id() { + return $this->permalink; + } + + /** + * Retrieves the main image URL. This is the featured image by default. + * + * @return string|null The main image URL. + */ + public function generate_main_image_url() { + if ( $this->main_image_id !== null ) { + return $this->image->get_attachment_image_url( $this->main_image_id, 'full' ); + } + + if ( $this->request_helper->is_rest_request() ) { + return $this->get_main_image_url_for_rest_request(); + } + + if ( ! \is_singular() ) { + return null; + } + + $url = $this->image->get_post_content_image( $this->id ); + if ( $url === '' ) { + return null; + } + + return $url; + } + + /** + * Generates the main image ID. + * + * @return int|null The main image ID. + */ + public function generate_main_image_id() { + if ( $this->request_helper->is_rest_request() ) { + return $this->get_main_image_id_for_rest_request(); + } + + switch ( true ) { + case \is_singular(): + return $this->get_singular_post_image( $this->id ); + case \is_author(): + case \is_tax(): + case \is_tag(): + case \is_category(): + case \is_search(): + case \is_date(): + case \is_post_type_archive(): + if ( ! empty( $GLOBALS['wp_query']->posts ) ) { + if ( $GLOBALS['wp_query']->get( 'fields', 'all' ) === 'ids' ) { + return $this->get_singular_post_image( $GLOBALS['wp_query']->posts[0] ); + } + + return $this->get_singular_post_image( $GLOBALS['wp_query']->posts[0]->ID ); + } + return null; + default: + return null; + } + } + + /** + * Determines whether the current indexable has an image. + * + * @return bool Whether the current indexable has an image. + */ + public function generate_has_image() { + return $this->main_image_url !== null; + } + + /** + * Strips all nested dependencies from the debug info. + * + * @return array + */ + public function __debugInfo() { + return [ + 'indexable' => $this->indexable, + 'presentation' => $this->presentation, + ]; + } + + /** + * Retrieve the site logo ID from WordPress settings. + * + * @return false|int + */ + public function fallback_to_site_logo() { + $logo_id = \get_option( 'site_logo' ); + if ( ! $logo_id ) { + $logo_id = \get_theme_mod( 'custom_logo', false ); + } + + return $logo_id; + } + + /** + * Get the ID for a post's featured image. + * + * @param int $id Post ID. + * + * @return int|null + */ + private function get_singular_post_image( $id ) { + if ( \has_post_thumbnail( $id ) ) { + $thumbnail_id = \get_post_thumbnail_id( $id ); + // Prevent returning something else than an int or null. + if ( \is_int( $thumbnail_id ) && $thumbnail_id > 0 ) { + return $thumbnail_id; + } + } + + if ( \is_singular( 'attachment' ) ) { + return \get_query_var( 'attachment_id' ); + } + + return null; + } + + /** + * Gets the main image ID for REST requests. + * + * @return int|null The main image ID. + */ + private function get_main_image_id_for_rest_request() { + switch ( $this->page_type ) { + case 'Post_Type': + if ( $this->post instanceof WP_Post ) { + return $this->get_singular_post_image( $this->post->ID ); + } + return null; + default: + return null; + } + } + + /** + * Gets the main image URL for REST requests. + * + * @return string|null The main image URL. + */ + private function get_main_image_url_for_rest_request() { + switch ( $this->page_type ) { + case 'Post_Type': + if ( $this->post instanceof WP_Post ) { + $url = $this->image->get_post_content_image( $this->post->ID ); + if ( $url === '' ) { + return null; + } + return $url; + } + return null; + default: + return null; + } + } +} + +\class_alias( Meta_Tags_Context::class, 'WPSEO_Schema_Context' ); diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/admin/class-customizer.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/admin/class-customizer.php new file mode 100644 index 00000000..57b68c31 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/admin/class-customizer.php @@ -0,0 +1,72 @@ +context_memoizer = YoastSEO()->classes->get( Meta_Tags_Context_Memoizer::class ); + $this->helpers = YoastSEO()->classes->get( Helpers_Surface::class ); + $this->replace_vars = YoastSEO()->classes->get( WPSEO_Replace_Vars::class ); + } + + /** + * Get breadcrumb string using the singleton instance of this class. + * + * @param string $before Optional string to prepend. + * @param string $after Optional string to append. + * @param bool $display Echo or return flag. + * + * @return string Returns the breadcrumbs as a string. + */ + public static function breadcrumb( $before = '', $after = '', $display = true ) { + // Remember the last used before/after for use in case the object goes __toString(). + self::$before = $before; + self::$after = $after; + $output = $before . self::get_instance()->render() . $after; + + if ( $display === true ) { + echo $output; + + return ''; + } + + return $output; + } + + /** + * Magic method to use in case the class would be send to string. + * + * @return string The rendered breadcrumbs. + */ + public function __toString() { + return self::$before . $this->render() . self::$after; + } + + /** + * Retrieves an instance of the class. + * + * @return static The instance. + */ + public static function get_instance() { + if ( is_null( self::$instance ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Returns the collected links for the breadcrumbs. + * + * @return array The collected links. + */ + public function get_links() { + $context = $this->context_memoizer->for_current_page(); + + return $context->presentation->breadcrumbs; + } + + /** + * Renders the breadcrumbs. + * + * @return string The rendered breadcrumbs. + */ + private function render() { + $presenter = new Breadcrumbs_Presenter(); + $context = $this->context_memoizer->for_current_page(); + + /** This filter is documented in src/integrations/front-end-integration.php */ + $presentation = apply_filters( 'wpseo_frontend_presentation', $context->presentation, $context ); + $presenter->presentation = $presentation; + $presenter->replace_vars = $this->replace_vars; + $presenter->helpers = $this->helpers; + + return $presenter->present(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/frontend/frontend.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/frontend/frontend.php new file mode 100644 index 00000000..91d55055 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/frontend/frontend.php @@ -0,0 +1,282 @@ +context_memoizer = YoastSEO()->classes->get( Meta_Tags_Context_Memoizer::class ); + $this->replace_vars = YoastSEO()->classes->get( WPSEO_Replace_Vars::class ); + $this->helpers = YoastSEO()->classes->get( Helpers_Surface::class ); + } + + /** + * Catches call to methods that don't exist and might deprecated. + * + * @param string $method The called method. + * @param array $arguments The given arguments. + * + * @return mixed + */ + public function __call( $method, $arguments ) { + _deprecated_function( $method, 'Yoast SEO 14.0' ); + + $title_methods = [ + 'title', + 'fix_woo_title', + 'get_content_title', + 'get_seo_title', + 'get_taxonomy_title', + 'get_author_title', + 'get_title_from_options', + 'get_default_title', + 'force_wp_title', + ]; + if ( in_array( $method, $title_methods, true ) ) { + return $this->get_title(); + } + + return null; + } + + /** + * Retrieves an instance of the class. + * + * @return static The instance. + */ + public static function get_instance() { + if ( is_null( self::$instance ) ) { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Outputs the canonical value. + * + * @param bool $echo Whether or not to output the canonical element. + * @param bool $un_paged Whether or not to return the canonical with or without pagination added to the URL. + * @param bool $no_override Whether or not to return a manually overridden canonical. + * + * @return string|void + */ + public function canonical( $echo = true, $un_paged = false, $no_override = false ) { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + $presentation = $this->get_current_page_presentation(); + $presenter = new Canonical_Presenter(); + + /** This filter is documented in src/integrations/front-end-integration.php */ + $presenter->presentation = $presentation; + $presenter->helpers = $this->helpers; + $presenter->replace_vars = $this->replace_vars; + + if ( ! $echo ) { + return $presenter->get(); + } + + echo $presenter->present(); + } + + /** + * Retrieves the meta robots value. + * + * @return string + */ + public function get_robots() { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + $presentation = $this->get_current_page_presentation(); + return $presentation->robots; + } + + /** + * Outputs the meta robots value. + * + * @return void + */ + public function robots() { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + $presentation = $this->get_current_page_presentation(); + $presenter = new Robots_Presenter(); + $presenter->presentation = $presentation; + $presenter->helpers = $this->helpers; + $presenter->replace_vars = $this->replace_vars; + echo $presenter->present(); + } + + /** + * Determine $robots values for a single post. + * + * @param array $robots Robots data array. + * @param int $post_id The post ID for which to determine the $robots values, defaults to current post. + * + * @return array + */ + public function robots_for_single_post( $robots, $post_id = 0 ) { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + $presentation = $this->get_current_page_presentation(); + + return $presentation->robots; + } + + /** + * Used for static home and posts pages as well as singular titles. + * + * @param object|null $object If filled, object to get the title for. + * + * @return string The content title. + */ + private function get_title( $object = null ) { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + $presentation = $this->get_current_page_presentation(); + $title = $presentation->title; + + return $this->replace_vars->replace( $title, $presentation->source ); + } + + /** + * This function adds paging details to the title. + * + * @param string $sep Separator used in the title. + * @param string $seplocation Whether the separator should be left or right. + * @param string $title The title to append the paging info to. + * + * @return string + */ + public function add_paging_to_title( $sep, $seplocation, $title ) { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + return $title; + } + + /** + * Add part to title, while ensuring that the $seplocation variable is respected. + * + * @param string $sep Separator used in the title. + * @param string $seplocation Whether the separator should be left or right. + * @param string $title The title to append the title_part to. + * @param string $title_part The part to append to the title. + * + * @return string + */ + public function add_to_title( $sep, $seplocation, $title, $title_part ) { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + if ( $seplocation === 'right' ) { + return $title . $sep . $title_part; + } + + return $title_part . $sep . $title; + } + + /** + * Adds 'prev' and 'next' links to archives. + * + * @link http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html + * + * @return void + */ + public function adjacent_rel_links() { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + $presentation = $this->get_current_page_presentation(); + + $rel_prev_presenter = new Rel_Prev_Presenter(); + $rel_prev_presenter->presentation = $presentation; + $rel_prev_presenter->helpers = $this->helpers; + $rel_prev_presenter->replace_vars = $this->replace_vars; + echo $rel_prev_presenter->present(); + + $rel_next_presenter = new Rel_Next_Presenter(); + $rel_next_presenter->presentation = $presentation; + $rel_next_presenter->helpers = $this->helpers; + $rel_next_presenter->replace_vars = $this->replace_vars; + echo $rel_next_presenter->present(); + } + + /** + * Outputs the meta description element or returns the description text. + * + * @param bool $echo Echo or return output flag. + * + * @return string + */ + public function metadesc( $echo = true ) { + _deprecated_function( __METHOD__, 'Yoast SEO 14.0' ); + + $presentation = $this->get_current_page_presentation(); + $presenter = new Meta_Description_Presenter(); + $presenter->presentation = $presentation; + $presenter->helpers = $this->helpers; + $presenter->replace_vars = $this->replace_vars; + + if ( ! $echo ) { + return $presenter->get(); + } + $presenter->present(); + } + + /** + * Returns the current page presentation. + * + * @return Indexable_Presentation The current page presentation. + */ + private function get_current_page_presentation() { + $context = $this->context_memoizer->for_current_page(); + + /** This filter is documented in src/integrations/front-end-integration.php */ + return apply_filters( 'wpseo_frontend_presentation', $context->presentation, $context ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/index.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/index.php new file mode 100644 index 00000000..e94d9a42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/index.php @@ -0,0 +1,4 @@ +wordproof = $wordproof; + } + + /** + * Returns whether or not the WordProof Timestamp plugin is active. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return bool Whether or not the WordProof Timestamp plugin is active. + */ + public function is_met() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + return $this->wordproof->integration_is_active(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/conditionals/third-party/wordproof-plugin-inactive-conditional.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/conditionals/third-party/wordproof-plugin-inactive-conditional.php new file mode 100644 index 00000000..794ab744 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/conditionals/third-party/wordproof-plugin-inactive-conditional.php @@ -0,0 +1,28 @@ +current_page = $current_page; + $this->woocommerce = $woocommerce; + $this->options = $options; + } + + /** + * Remove site options after disabling the integration. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return bool Returns if the options are deleted + */ + public function remove_site_options() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + return \delete_site_option( 'wordproof_access_token' ) + && \delete_site_option( 'wordproof_source_id' ); + } + + /** + * Returns if conditionals are met. If not, the integration should be disabled. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param bool $return_conditional If the conditional class name that was unmet should be returned. + * + * @return bool|string Returns if the integration should be disabled. + */ + public function integration_is_disabled( $return_conditional = false ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + return true; + } + + /** + * Returns if the WordProof integration toggle is turned on. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return bool Returns if the integration toggle is set to true if conditionals are met. + */ + public function integration_is_active() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + return false; + } + + /** + * Return if WordProof should be active for this post editor page. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return bool Returns if WordProof should be active for this page. + */ + public function is_active() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/admin/disable-concatenate-scripts-integration.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/admin/disable-concatenate-scripts-integration.php new file mode 100644 index 00000000..ebcd3322 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/admin/disable-concatenate-scripts-integration.php @@ -0,0 +1,49 @@ +options_helper = $options_helper; + $this->product_helper = $product_helper; + $this->capability_helper = $capability_helper; + $this->admin_asset_manager = $admin_asset_manager; + $this->current_page_helper = $current_page_helper; + } + + /** + * {@inheritDoc} + * + * @deprecated 20.10 + * @codeCoverageIgnore + */ + public function register_hooks() { + \_deprecated_function( __METHOD__, 'Yoast SEO 20.7' ); + } + + /** + * Shows a notice if Premium is older than 20.0-RC1 so Settings might be missing from the UI. + * + * @deprecated 20.10 + * @codeCoverageIgnore + * + * @return void + */ + public function old_premium_notice() { + \_deprecated_function( __METHOD__, 'Yoast SEO 20.7' ); + } + + /** + * Dismisses the old premium notice. + * + * @deprecated 20.10 + * @codeCoverageIgnore + * + * @return bool + */ + public function dismiss_old_premium_notice() { + \_deprecated_function( __METHOD__, 'Yoast SEO 20.7' ); + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/duplicate-post-integration.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/duplicate-post-integration.php new file mode 100644 index 00000000..ed63f94b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/duplicate-post-integration.php @@ -0,0 +1,46 @@ +wincher = $wincher; + } + + /** + * Initializes the integration. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Adds the Wincher integration toggle to the $integration_toggles array. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @param array $integration_toggles The integration toggles array. + * + * @return array The updated integration toggles array. + */ + public function add_integration_toggle( $integration_toggles ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + + return $integration_toggles; + } + + /** + * Adds the disabled note when the integration toggle is disabled. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @param Yoast_Feature_Toggle $integration The integration toggle class. + * + * @return void + */ + public function after_integration_toggle( $integration ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + } + + /** + * Adds the disabled note to the network integration toggle. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @param Yoast_Feature_Toggle $integration The integration toggle class. + * + * @return void + */ + public function after_network_integration_toggle( $integration ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof-integration-toggle.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof-integration-toggle.php new file mode 100644 index 00000000..5a0a7748 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof-integration-toggle.php @@ -0,0 +1,138 @@ +wordproof = $wordproof; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @return array + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + } + + /** + * Adds the WordProof integration toggle to the array. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @param array $integration_toggles The integration toggles array. + * + * @return array The updated integration toggles array. + */ + public function add_integration_toggle( $integration_toggles ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + + return $integration_toggles; + } + + /** + * Set the default WordProof integration option value depending if the integration is disabled or not. + * + * @param array $defaults Array containing default wpseo options. + * + * @return array + */ + public function default_values( $defaults ) { + if ( $this->wordproof->integration_is_disabled() ) { + $defaults['wordproof_integration_active'] = false; + } + + return $defaults; + } + + /** + * Add an explainer when the integration toggle is disabled. + * + * @deprecated 20.3 + * @codeCoverageIgnore + * + * @param Yoast_Feature_Toggle $integration The integration toggle class. + * + * @return void + */ + public function after_integration_toggle( $integration ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 20.3' ); + if ( $integration->setting === 'wordproof_integration_active' ) { + if ( $integration->disabled ) { + + $conditional = $this->wordproof->integration_is_disabled( true ); + + if ( $conditional === 'Non_Multisite_Conditional' ) { + echo '

            ' . \sprintf( + /* translators: %s expands to WordProof */ + \esc_html__( 'Currently, the %s integration is not available for multisites.', 'wordpress-seo' ), + 'WordProof' + ) . '

            '; + } + + if ( $conditional === 'Wordproof_Plugin_Inactive_Conditional' ) { + echo '

            ' . \esc_html__( 'The WordProof Timestamp plugin needs to be disabled before you can activate this integration.', 'wordpress-seo' ) . '

            '; + } + } + } + } + + /** + * Add an explainer when the network integration toggle is disabled. + * + * @param Yoast_Feature_Toggle $integration The integration toggle class. + * + * @return void + */ + public function after_network_integration_toggle( $integration ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof.php new file mode 100644 index 00000000..d266c4b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/integrations/third-party/wordproof.php @@ -0,0 +1,215 @@ +asset_manager = $asset_manager; + $this->wordproof = $wordproof; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return array + */ + public static function get_conditionals() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + return []; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + } + + /** + * Initializes the WordProof WordPress SDK. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return void + */ + public function sdk_setup() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + } + + /** + * Removes the WordProof timestamp post meta if a legal page is changed. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param int $old_post_id The old post id. + * @param int $new_post_id The new post id. + * + * @return void + */ + public function disable_timestamp_for_previous_legal_page( $old_post_id, $new_post_id ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + } + + /** + * Return the Yoast post meta key for the SDK to determine if the post should be timestamped. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param array $meta_keys The array containing meta keys that should be used. + * @return array + */ + public function add_post_meta_key( $meta_keys ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + return [ $this->post_meta_key ]; + } + + /** + * Return an empty array to disable automatically timestamping selected post types. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param array $post_types The array containing post types that should be automatically timestamped. + * @return array + */ + public function wordproof_timestamp_post_types( $post_types ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + return []; + } + + /** + * This filters hides the certificate if the Yoast post meta key is not set to true. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param bool $value If the certificate should be shown. + * @param WP_Post $post The post object of the post for which to determine the certificate should be shown. + * @return bool|null + */ + public function show_certificate( $value, $post ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + return null; + } + + /** + * Adds the WordProof integration toggle to the array. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param array $fields The currently registered meta fields. + * + * @return array A new array with meta fields. + */ + public function add_meta_field( $fields ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + $fields['advanced']['wordproof_timestamp'] = [ + 'type' => 'hidden', + 'title' => '', + 'default_value' => '', + 'description' => '0', + ]; + + return $fields; + } + + /** + * Enqueue the uikit script. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @return void + */ + public function enqueue_assets() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + } + + /** + * Adds async to the wordproof-uikit script. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param string $tag The script tag for the enqueued script. + * @param string $handle The script's registered handle. + * @param string $src The script's source URL. + * + * @return string The script's tag. + * + * @phpcs:disable WordPress.WP.EnqueuedResources.NonEnqueuedScript + */ + public function add_async_to_script( $tag, $handle, $src ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + if ( $handle !== WPSEO_Admin_Asset_Manager::PREFIX . 'wordproof-uikit' ) { + return $tag; + } + + return ""; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/introductions/application/ai-generate-titles-and-descriptions-introduction-upsell.php b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/introductions/application/ai-generate-titles-and-descriptions-introduction-upsell.php new file mode 100644 index 00000000..fd45121b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/deprecated/src/introductions/application/ai-generate-titles-and-descriptions-introduction-upsell.php @@ -0,0 +1,118 @@ +product_helper = $product_helper; + $this->options_helper = $options_helper; + } + + /** + * Returns the ID. + * + * @deprecated 23.2 + * @codeCoverageIgnore + * + * @return string + */ + public function get_id() { + \_deprecated_function( __METHOD__, 'Yoast SEO 23.2' ); + return 'ai-generate-titles-and-descriptions-upsell'; + } + + /** + * Returns the unique name. + * + * @deprecated 21.6 + * @codeCoverageIgnore + * + * @return string + */ + public function get_name() { + \_deprecated_function( __METHOD__, 'Yoast SEO 21.6', 'Please use get_id() instead' ); + + return $this->get_id(); + } + + /** + * Returns the requested pagination priority. Lower means earlier. + * + * @deprecated 23.2 + * @codeCoverageIgnore + * + * @return int + */ + public function get_priority() { + \_deprecated_function( __METHOD__, 'Yoast SEO 23.2' ); + return 10; + } + + /** + * Returns whether this introduction should show. + * + * @deprecated 23.2 + * @codeCoverageIgnore + * + * @return bool + */ + public function should_show() { + \_deprecated_function( __METHOD__, 'Yoast SEO 23.2' ); + // Outdated feature introduction. + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/application/analysis-features/enabled-analysis-features-repository.php b/wp/wp-content/plugins/wordpress-seo/src/editors/application/analysis-features/enabled-analysis-features-repository.php new file mode 100644 index 00000000..2cec11db --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/application/analysis-features/enabled-analysis-features-repository.php @@ -0,0 +1,55 @@ +enabled_analysis_features = new Analysis_Features_List(); + $this->plugin_features = $plugin_features; + } + + /** + * Returns the analysis list. + * + * @return Analysis_Features_List The analysis list. + */ + public function get_enabled_features(): Analysis_Features_List { + if ( \count( $this->enabled_analysis_features->parse_to_legacy_array() ) === 0 ) { + foreach ( $this->plugin_features as $plugin_feature ) { + $analysis_feature = new Analysis_Feature( $plugin_feature->is_enabled(), $plugin_feature->get_name(), $plugin_feature->get_legacy_key() ); + $this->enabled_analysis_features->add_feature( $analysis_feature ); + } + } + return $this->enabled_analysis_features; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/application/integrations/integration-information-repository.php b/wp/wp-content/plugins/wordpress-seo/src/editors/application/integrations/integration-information-repository.php new file mode 100644 index 00000000..c066fc2f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/application/integrations/integration-information-repository.php @@ -0,0 +1,43 @@ +plugin_integrations = $plugin_integrations; + } + + /** + * Returns the analysis list. + * + * @return array> The parsed list. + */ + public function get_integration_information(): array { + $array = []; + foreach ( $this->plugin_integrations as $feature ) { + $array = \array_merge( $array, $feature->to_legacy_array() ); + } + return $array; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/post-seo-information-repository.php b/wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/post-seo-information-repository.php new file mode 100644 index 00000000..8df54a25 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/post-seo-information-repository.php @@ -0,0 +1,62 @@ +seo_data_providers = $seo_data_providers; + } + + /** + * The post. + * + * @param WP_Post $post The post. + * + * @return void + */ + public function set_post( WP_Post $post ) { + $this->post = $post; + } + + /** + * Method to return the compiled SEO data. + * + * @return array The specific seo data. + */ + public function get_seo_data(): array { + $array = []; + foreach ( $this->seo_data_providers as $data_provider ) { + $data_provider->set_post( $this->post ); + $array = \array_merge( $array, $data_provider->get_data()->to_legacy_array() ); + } + return $array; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/term-seo-information-repository.php b/wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/term-seo-information-repository.php new file mode 100644 index 00000000..a52b76ec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/application/seo/term-seo-information-repository.php @@ -0,0 +1,63 @@ +seo_data_providers = $seo_data_providers; + } + + /** + * The term. + * + * @param WP_Term $term The term. + * + * @return void + */ + public function set_term( WP_Term $term ): void { + $this->term = $term; + } + + /** + * Method to return the compiled SEO data. + * + * @return array The specific seo data. + */ + public function get_seo_data(): array { + $array = []; + foreach ( $this->seo_data_providers as $data_provider ) { + $data_provider->set_term( $this->term ); + $array = \array_merge( $array, $data_provider->get_data()->to_legacy_array() ); + } + + return $array; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/application/site/website-information-repository.php b/wp/wp-content/plugins/wordpress-seo/src/editors/application/site/website-information-repository.php new file mode 100644 index 00000000..6ff099f9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/application/site/website-information-repository.php @@ -0,0 +1,61 @@ +post_site_information = $post_site_information; + $this->term_site_information = $term_site_information; + } + + /** + * Returns the Post Site Information container. + * + * @return Post_Site_Information + */ + public function get_post_site_information(): Post_Site_Information { + return $this->post_site_information; + } + + /** + * Returns the Term Site Information container. + * + * @return Term_Site_Information + */ + public function get_term_site_information(): Term_Site_Information { + return $this->term_site_information; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-feature-interface.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-feature-interface.php new file mode 100644 index 00000000..678999ed --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-feature-interface.php @@ -0,0 +1,30 @@ +is_enabled = $is_enabled; + $this->name = $name; + $this->legacy_key = $legacy_key; + } + + /** + * If the feature is enabled. + * + * @return bool If the feature is enabled. + */ + public function is_enabled(): bool { + return $this->is_enabled; + } + + /** + * Gets the identifier. + * + * @return string The feature identifier. + */ + public function get_name(): string { + return $this->name; + } + + /** + * Return this object represented by a key value array. + * + * @return array Returns the name and if the feature is enabled. + */ + public function to_array(): array { + return [ $this->name => $this->is_enabled ]; + } + + /** + * Returns this object represented by a key value structure that is compliant with the script data array. + * + * @return array Returns the legacy key and if the feature is enabled. + */ + public function to_legacy_array(): array { + return [ $this->legacy_key => $this->is_enabled ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-features-list.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-features-list.php new file mode 100644 index 00000000..3fb19d04 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/analysis-features/analysis-features-list.php @@ -0,0 +1,40 @@ + + */ + private $features = []; + + /** + * Adds an analysis feature to the list. + * + * @param Analysis_Feature $feature The analysis feature to add. + * + * @return void + */ + public function add_feature( Analysis_Feature $feature ): void { + $this->features[] = $feature; + } + + /** + * Parses the feature list to a legacy ready array representation. + * + * @return array The list presented as a key value representation. + */ + public function parse_to_legacy_array(): array { + $array = []; + foreach ( $this->features as $feature ) { + $array = \array_merge( $array, $feature->to_legacy_array() ); + } + return $array; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/integrations/integration-data-provider-interface.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/integrations/integration-data-provider-interface.php new file mode 100644 index 00000000..7a4fca32 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/integrations/integration-data-provider-interface.php @@ -0,0 +1,31 @@ + Returns the name and if the feature is enabled. + */ + public function to_array(): array; + + /** + * Returns this object represented by a key value structure that is compliant with the script data array. + * + * @return array Returns the legacy key and if the feature is enabled. + */ + public function to_legacy_array(): array; +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/description.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/description.php new file mode 100644 index 00000000..d099284d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/description.php @@ -0,0 +1,58 @@ +description_date = $description_date; + $this->description_template = $description_template; + } + + /** + * Returns the data as an array format. + * + * @return array + */ + public function to_array(): array { + return [ + 'description_template' => $this->description_template, + 'description_date' => $this->description_date, + ]; + } + + /** + * Returns the data as an array format meant for legacy use. + * + * @return array + */ + public function to_legacy_array(): array { + return [ + 'metadesc_template' => $this->description_template, + 'metaDescriptionDate' => $this->description_date, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/keyphrase.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/keyphrase.php new file mode 100644 index 00000000..989a496e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/keyphrase.php @@ -0,0 +1,58 @@ + $keyword_usage_count + */ + private $keyphrase_usage_count; + + /** + * The post types for the given post IDs. + * + * @var array $keyword_usage_per_type + */ + private $keyphrase_usage_per_type; + + /** + * The constructor. + * + * @param array $keyphrase_usage_count The keyphrase and the associated posts that use it. + * @param array $keyphrase_usage_per_type The post types for the given post IDs. + */ + public function __construct( array $keyphrase_usage_count, array $keyphrase_usage_per_type ) { + $this->keyphrase_usage_count = $keyphrase_usage_count; + $this->keyphrase_usage_per_type = $keyphrase_usage_per_type; + } + + /** + * Returns the data as an array format. + * + * @return array + */ + public function to_array(): array { + return [ + 'keyphrase_usage' => $this->keyphrase_usage_count, + 'keyphrase_usage_per_type' => $this->keyphrase_usage_per_type, + ]; + } + + /** + * Returns the data as an array format meant for legacy use. + * + * @return array + */ + public function to_legacy_array(): array { + return [ + 'keyword_usage' => $this->keyphrase_usage_count, + 'keyword_usage_post_types' => $this->keyphrase_usage_per_type, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/seo-plugin-data-interface.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/seo-plugin-data-interface.php new file mode 100644 index 00000000..af85a405 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/seo-plugin-data-interface.php @@ -0,0 +1,23 @@ + + */ + public function to_array(): array; + + /** + * Returns the data as an array format meant for legacy use. + * + * @return array + */ + public function to_legacy_array(): array; +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/social.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/social.php new file mode 100644 index 00000000..a7551fe1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/social.php @@ -0,0 +1,85 @@ +social_title_template = $social_title_template; + $this->social_description_template = $social_description_template; + $this->social_image_template = $social_image_template; + $this->social_first_content_image = $social_first_content_image; + } + + /** + * Returns the data as an array format. + * + * @return array + */ + public function to_array(): array { + return [ + 'social_title_template' => $this->social_title_template, + 'social_description_template' => $this->social_description_template, + 'social_image_template' => $this->social_image_template, + 'first_content_image_social_preview' => $this->social_first_content_image, + ]; + } + + /** + * Returns the data as an array format meant for legacy use. + * + * @return array + */ + public function to_legacy_array(): array { + return [ + 'social_title_template' => $this->social_title_template, + 'social_description_template' => $this->social_description_template, + 'social_image_template' => $this->social_image_template, + 'first_content_image' => $this->social_first_content_image, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/title.php b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/title.php new file mode 100644 index 00000000..28e56f49 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/domain/seo/title.php @@ -0,0 +1,58 @@ +title_template = $title_template; + $this->title_template_no_fallback = $title_template_no_fallback; + } + + /** + * Returns the data as an array format. + * + * @return array + */ + public function to_array(): array { + return [ + 'title_template' => $this->title_template, + 'title_template_no_fallback' => $this->title_template_no_fallback, + ]; + } + + /** + * Returns the data as an array format meant for legacy use. + * + * @return array + */ + public function to_legacy_array(): array { + return [ + 'title_template' => $this->title_template, + 'title_template_no_fallback' => $this->title_template_no_fallback, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/cornerstone-content.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/cornerstone-content.php new file mode 100644 index 00000000..8dff716c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/cornerstone-content.php @@ -0,0 +1,55 @@ +options_helper = $options_helper; + } + + /** + * If cornerstone is enabled. + * + * @return bool If cornerstone is enabled. + */ + public function is_enabled(): bool { + return (bool) $this->options_helper->get( 'enable_cornerstone_content', false ); + } + + /** + * Gets the name. + * + * @return string The name. + */ + public function get_name(): string { + return 'cornerstoneContent'; + } + + /** + * Gets the legacy key. + * + * @return string The legacy key. + */ + public function get_legacy_key(): string { + return 'cornerstoneActive'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/inclusive-language-analysis.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/inclusive-language-analysis.php new file mode 100644 index 00000000..4cfbe025 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/inclusive-language-analysis.php @@ -0,0 +1,116 @@ +options_helper = $options_helper; + $this->language_helper = $language_helper; + $this->product_helper = $product_helper; + } + + /** + * If this analysis is enabled. + * + * @return bool If this analysis is enabled. + */ + public function is_enabled(): bool { + return $this->is_globally_enabled() && $this->is_user_enabled() && $this->is_current_version_supported() + && $this->language_helper->has_inclusive_language_support( $this->language_helper->get_language() ); + } + + /** + * If this analysis is enabled by the user. + * + * @return bool If this analysis is enabled by the user. + */ + private function is_user_enabled(): bool { + return ! \get_user_meta( \get_current_user_id(), 'wpseo_inclusive_language_analysis_disable', true ); + } + + /** + * If this analysis is enabled globally. + * + * @return bool If this analysis is enabled globally. + */ + private function is_globally_enabled(): bool { + return (bool) $this->options_helper->get( 'inclusive_language_analysis_active', false ); + } + + /** + * If the inclusive language analysis should be loaded in Free. + * + * It should always be loaded when Premium is not active. If Premium is active, it depends on the version. Some + * Premium versions also have inclusive language code (when it was still a Premium only feature) which would result + * in rendering the analysis twice. In those cases, the analysis should be only loaded from the Premium side. + * + * @return bool If the inclusive language analysis should be loaded. + */ + private function is_current_version_supported(): bool { + $is_premium = $this->product_helper->is_premium(); + $premium_version = $this->product_helper->get_premium_version(); + + return ! $is_premium + || \version_compare( $premium_version, '19.6-RC0', '>=' ) + || \version_compare( $premium_version, '19.2', '==' ); + } + + /** + * Gets the name. + * + * @return string The name. + */ + public function get_name(): string { + return 'inclusiveLanguageAnalysis'; + } + + /** + * Gets the legacy key. + * + * @return string The legacy key. + */ + public function get_legacy_key(): string { + return 'inclusiveLanguageAnalysisActive'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/jetpack-markdown.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/jetpack-markdown.php new file mode 100644 index 00000000..9eaef6e6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/jetpack-markdown.php @@ -0,0 +1,70 @@ +is_markdown_enabled(); + } + + /** + * Return this object represented by a key value array. + * + * @return array Returns the name and if the feature is enabled. + */ + public function to_array(): array { + return [ + 'markdownEnabled' => $this->is_enabled(), + ]; + } + + /** + * Returns this object represented by a key value structure that is compliant with the script data array. + * + * @return array Returns the legacy key and if the feature is enabled. + */ + public function to_legacy_array(): array { + return [ + 'markdownEnabled' => $this->is_enabled(), + ]; + } + + /** + * Checks if Jetpack's markdown module is enabled. + * Can be extended to work with other plugins that parse markdown in the content. + * + * @return bool + */ + private function is_markdown_enabled() { + $is_markdown = false; + + if ( \class_exists( 'Jetpack' ) && \method_exists( 'Jetpack', 'get_active_modules' ) ) { + $active_modules = Jetpack::get_active_modules(); + + // First at all, check if Jetpack's markdown module is active. + $is_markdown = \in_array( 'markdown', $active_modules, true ); + } + + /** + * Filters whether markdown support is active in the readability- and seo-analysis. + * + * @since 11.3 + * + * @param array $is_markdown Is markdown support for Yoast SEO active. + */ + return \apply_filters( 'wpseo_is_markdown_enabled', $is_markdown ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/multilingual.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/multilingual.php new file mode 100644 index 00000000..4f643dbc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/multilingual.php @@ -0,0 +1,89 @@ +wpml_conditional = $wpml_conditional; + $this->polylang_conditional = $polylang_conditional; + $this->translate_press_conditional = $translate_press_conditional; + } + + /** + * If the integration is activated. + * + * @return bool If the integration is activated. + */ + public function is_enabled(): bool { + return $this->multilingual_plugin_active(); + } + + /** + * Return this object represented by a key value array. + * + * @return array Returns the name and if the feature is enabled. + */ + public function to_array(): array { + return [ 'multilingualPluginActive' => $this->is_enabled() ]; + } + + /** + * Returns this object represented by a key value structure that is compliant with the script data array. + * + * @return array Returns the legacy key and if the feature is enabled. + */ + public function to_legacy_array(): array { + return [ 'multilingualPluginActive' => $this->is_enabled() ]; + } + + /** + * Checks whether a multilingual plugin is currently active. Currently, we only check the following plugins: + * WPML, Polylang, and TranslatePress. + * + * @return bool Whether a multilingual plugin is currently active. + */ + private function multilingual_plugin_active() { + $wpml_active = $this->wpml_conditional->is_met(); + $polylang_active = $this->polylang_conditional->is_met(); + $translatepress_active = $this->translate_press_conditional->is_met(); + + return ( $wpml_active || $polylang_active || $translatepress_active ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/semrush.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/semrush.php new file mode 100644 index 00000000..6ebb8b8e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/semrush.php @@ -0,0 +1,90 @@ +options_helper = $options_helper; + } + + /** + * If the integration is activated. + * + * @return bool If the integration is activated. + */ + public function is_enabled(): bool { + return (bool) $this->options_helper->get( 'semrush_integration_active', true ); + } + + /** + * Return this object represented by a key value array. + * + * @return array Returns the name and if the feature is enabled. + */ + public function to_array(): array { + return [ + 'active' => $this->is_enabled(), + 'countryCode' => $this->options_helper->get( 'semrush_country_code', false ), + 'loginStatus' => $this->options_helper->get( 'semrush_integration_active', true ) && $this->get_semrush_login_status(), + ]; + } + + /** + * Returns this object represented by a key value structure that is compliant with the script data array. + * + * @return array Returns the legacy key and if the feature is enabled. + */ + public function to_legacy_array(): array { + return [ + 'semrushIntegrationActive' => $this->is_enabled(), + 'countryCode' => $this->options_helper->get( 'semrush_country_code', false ), + 'SEMrushLoginStatus' => $this->options_helper->get( 'semrush_integration_active', true ) && $this->get_semrush_login_status(), + ]; + } + + /** + * Checks if the user is logged in to SEMrush. + * + * @return bool The SEMrush login status. + */ + private function get_semrush_login_status() { + try { + // Do this just in time to handle constructor exception. + $semrush_client = \YoastSEO()->classes->get( SEMrush_Client::class ); + } catch ( Empty_Property_Exception $e ) { + // Return false if token is malformed (empty property). + return false; + } + // Get token (and refresh it if it's expired). + try { + $semrush_client->get_tokens(); + } catch ( Authentication_Failed_Exception | Empty_Token_Exception $e ) { + return false; + } + + return $semrush_client->has_valid_tokens(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/wincher.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/wincher.php new file mode 100644 index 00000000..2ad48b91 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/integrations/wincher.php @@ -0,0 +1,75 @@ +wincher_helper = $wincher_helper; + $this->options_helper = $options_helper; + } + + /** + * If the integration is activated. + * + * @return bool If the integration is activated. + */ + public function is_enabled(): bool { + return $this->wincher_helper->is_active(); + } + + /** + * Return this object represented by a key value array. + * + * @return array Returns the name and if the feature is enabled. + */ + public function to_array(): array { + return [ + 'active' => $this->is_enabled(), + 'loginStatus' => $this->is_enabled() && $this->wincher_helper->login_status(), + 'websiteId' => $this->options_helper->get( 'wincher_website_id', '' ), + 'autoAddKeyphrases' => $this->options_helper->get( 'wincher_automatically_add_keyphrases', false ), + ]; + } + + /** + * Returns this object represented by a key value structure that is compliant with the script data array. + * + * @return array Returns the legacy key and if the feature is enabled. + */ + public function to_legacy_array(): array { + return [ + 'wincherIntegrationActive' => $this->is_enabled(), + 'wincherLoginStatus' => $this->is_enabled() && $this->wincher_helper->login_status(), + 'wincherWebsiteId' => $this->options_helper->get( 'wincher_website_id', '' ), + 'wincherAutoAddKeyphrases' => $this->options_helper->get( 'wincher_automatically_add_keyphrases', false ), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/keyphrase-analysis.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/keyphrase-analysis.php new file mode 100644 index 00000000..648639b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/keyphrase-analysis.php @@ -0,0 +1,73 @@ +options_helper = $options_helper; + } + + /** + * If this analysis is enabled. + * + * @return bool If this analysis is enabled. + */ + public function is_enabled(): bool { + return $this->is_globally_enabled() && $this->is_user_enabled(); + } + + /** + * If this analysis is enabled by the user. + * + * @return bool If this analysis is enabled by the user. + */ + public function is_user_enabled(): bool { + return ! \get_user_meta( \get_current_user_id(), 'wpseo_keyword_analysis_disable', true ); + } + + /** + * If this analysis is enabled globally. + * + * @return bool If this analysis is enabled globally. + */ + public function is_globally_enabled(): bool { + return (bool) $this->options_helper->get( 'keyword_analysis_active', true ); + } + + /** + * Gets the name. + * + * @return string The name. + */ + public function get_name(): string { + return 'keyphraseAnalysis'; + } + + /** + * Gets the legacy key. + * + * @return string The legacy key. + */ + public function get_legacy_key(): string { + return 'keywordAnalysisActive'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/previously-used-keyphrase.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/previously-used-keyphrase.php new file mode 100644 index 00000000..3400f561 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/previously-used-keyphrase.php @@ -0,0 +1,43 @@ +options_helper = $options_helper; + } + + /** + * If this analysis is enabled. + * + * @return bool If this analysis is enabled. + */ + public function is_enabled(): bool { + return $this->is_globally_enabled() && $this->is_user_enabled(); + } + + /** + * If this analysis is enabled by the user. + * + * @return bool If this analysis is enabled by the user. + */ + private function is_user_enabled(): bool { + return ! \get_user_meta( \get_current_user_id(), 'wpseo_content_analysis_disable', true ); + } + + /** + * If this analysis is enabled globally. + * + * @return bool If this analysis is enabled globally. + */ + private function is_globally_enabled(): bool { + return (bool) $this->options_helper->get( 'content_analysis_active', true ); + } + + /** + * Gets the name. + * + * @return string The name. + */ + public function get_name(): string { + return 'readabilityAnalysis'; + } + + /** + * Gets the legacy key. + * + * @return string The legacy key. + */ + public function get_legacy_key(): string { + return 'contentAnalysisActive'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/description-data-provider-interface.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/description-data-provider-interface.php new file mode 100644 index 00000000..ed7a5d29 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/description-data-provider-interface.php @@ -0,0 +1,20 @@ + The keyphrase and the associated posts that use it. + */ + public function get_focus_keyphrase_usage(): array; +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/abstract-post-seo-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/abstract-post-seo-data-provider.php new file mode 100644 index 00000000..43f01a26 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/abstract-post-seo-data-provider.php @@ -0,0 +1,37 @@ +post = $post; + } + + /** + * Method to return the compiled SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + abstract public function get_data(): Seo_Plugin_Data_Interface; +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/description-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/description-data-provider.php new file mode 100644 index 00000000..02432f2a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/description-data-provider.php @@ -0,0 +1,85 @@ +date_helper = $date_helper; + $this->options_helper = $options_helper; + } + + /** + * Retrieves the description template. + * + * @return string The description template. + */ + public function get_description_template(): string { + return $this->get_template( 'metadesc' ); + } + + /** + * Determines the date to be displayed in the snippet preview. + * + * @return string + */ + public function get_description_date(): string { + return $this->date_helper->format_translated( $this->post->post_date, 'M j, Y' ); + } + + /** + * Retrieves a template. + * + * @param string $template_option_name The name of the option in which the template you want to get is saved. + * + * @return string + */ + private function get_template( string $template_option_name ): string { + $needed_option = $template_option_name . '-' . $this->post->post_type; + + if ( $this->options_helper->get( $needed_option, '' ) !== '' ) { + return $this->options_helper->get( $needed_option ); + } + + return ''; + } + + /** + * Method to return the Description domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + return new Description( $this->get_description_date(), $this->get_description_template() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/keyphrase-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/keyphrase-data-provider.php new file mode 100644 index 00000000..e40ee8d8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/keyphrase-data-provider.php @@ -0,0 +1,88 @@ +meta_helper = $meta_helper; + } + + /** + * Counts the number of given Keyphrase used for other posts other than the given post_id. + * + * @return array The keyphrase and the associated posts that use it. + */ + public function get_focus_keyphrase_usage(): array { + $keyphrase = $this->meta_helper->get_value( 'focuskw', $this->post->ID ); + $usage = [ $keyphrase => $this->get_keyphrase_usage_for_current_post( $keyphrase ) ]; + + /** + * Allows enhancing the array of posts' that share their focus Keyphrase with the post's related Keyphrase. + * + * @param array $usage The array of posts' ids that share their focus Keyphrase with the post. + * @param int $post_id The id of the post we're finding the usage of related Keyphrase for. + */ + return \apply_filters( 'wpseo_posts_for_related_keywords', $usage, $this->post->ID ); + } + + /** + * Retrieves the post types for the given post IDs. + * + * @param array> $post_ids_per_keyphrase An associative array with keyphrase as keys and an array of post ids where those keyphrases are used. + * + * @return array> The post types for the given post IDs. + */ + public function get_post_types_for_all_ids( array $post_ids_per_keyphrase ): array { + $post_type_per_keyphrase_result = []; + foreach ( $post_ids_per_keyphrase as $keyphrase => $post_ids ) { + $post_type_per_keyphrase_result[ $keyphrase ] = WPSEO_Meta::post_types_for_ids( $post_ids ); + } + + return $post_type_per_keyphrase_result; + } + + /** + * Gets the keyphrase usage for the current post and the specified keyphrase. + * + * @param string $keyphrase The keyphrase to check the usage of. + * + * @return array The post IDs which use the passed keyphrase. + */ + private function get_keyphrase_usage_for_current_post( string $keyphrase ): array { + return WPSEO_Meta::keyword_usage( $keyphrase, $this->post->ID ); + } + + /** + * Method to return the keyphrase domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + $keyphrase_usage = $this->get_focus_keyphrase_usage(); + + return new Keyphrase( $keyphrase_usage, $this->get_post_types_for_all_ids( $keyphrase_usage ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/social-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/social-data-provider.php new file mode 100644 index 00000000..deb79e60 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/social-data-provider.php @@ -0,0 +1,133 @@ +options_helper = $options_helper; + $this->use_social_templates = $this->use_social_templates(); + $this->image_helper = $image_helper; + } + + /** + * Determines whether the social templates should be used. + * + * @return bool Whether the social templates should be used. + */ + private function use_social_templates(): bool { + return $this->options_helper->get( 'opengraph', false ) === true; + } + + /** + * Gets the image url. + * + * @return string|null + */ + public function get_image_url(): ?string { + return $this->image_helper->get_post_content_image( $this->post->ID ); + } + + /** + * Retrieves the social title template. + * + * @return string The social title template. + */ + public function get_social_title_template(): string { + if ( $this->use_social_templates ) { + return $this->get_social_template( 'title' ); + } + + return ''; + } + + /** + * Retrieves the social description template. + * + * @return string The social description template. + */ + public function get_social_description_template(): string { + if ( $this->use_social_templates ) { + return $this->get_social_template( 'description' ); + } + + return ''; + } + + /** + * Retrieves the social image template. + * + * @return string The social description template. + */ + public function get_social_image_template(): string { + if ( $this->use_social_templates ) { + return $this->get_social_template( 'image-url' ); + } + + return ''; + } + + /** + * Retrieves a social template. + * + * @param string $template_option_name The name of the option in which the template you want to get is saved. + * + * @return string + */ + private function get_social_template( $template_option_name ) { + /** + * Filters the social template value for a given post type. + * + * @param string $template The social template value, defaults to empty string. + * @param string $template_option_name The subname of the option in which the template you want to get is saved. + * @param string $post_type The name of the post type. + */ + return \apply_filters( 'wpseo_social_template_post_type', '', $template_option_name, $this->post->post_type ); + } + + /** + * Method to return the Social domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + return new Social( $this->get_social_title_template(), $this->get_social_description_template(), $this->get_social_image_template(), $this->get_image_url() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/title-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/title-data-provider.php new file mode 100644 index 00000000..024b92c6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/posts/title-data-provider.php @@ -0,0 +1,74 @@ +options_helper = $options_helper; + } + + /** + * Retrieves the title template. + * + * @param bool $fallback Whether to return the hardcoded fallback if the template value is empty. + * + * @return string The title template. + */ + public function get_title_template( bool $fallback = true ): string { + $title = $this->get_template( 'title' ); + + if ( $title === '' && $fallback === true ) { + return '%%title%% %%page%% %%sep%% %%sitename%%'; + } + + return $title; + } + + /** + * Retrieves a template. + * + * @param string $template_option_name The name of the option in which the template you want to get is saved. + * + * @return string + */ + private function get_template( string $template_option_name ): string { + $needed_option = $template_option_name . '-' . $this->post->post_type; + + if ( $this->options_helper->get( $needed_option, '' ) !== '' ) { + return $this->options_helper->get( $needed_option ); + } + + return ''; + } + + /** + * Method to return the Title domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + return new Title( $this->get_title_template(), $this->get_title_template( false ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/social-data-provider-interface.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/social-data-provider-interface.php new file mode 100644 index 00000000..41e9a08c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/social-data-provider-interface.php @@ -0,0 +1,34 @@ +term = $term; + } + + /** + * Retrieves a template. + * + * @param string $template_option_name The name of the option in which the template you want to get is saved. + * + * @return string + */ + protected function get_template( string $template_option_name ): string { + $needed_option = $template_option_name . '-tax-' . $this->term->taxonomy; + return WPSEO_Options::get( $needed_option, '' ); + } + + /** + * Method to return the compiled SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + abstract public function get_data(): Seo_Plugin_Data_Interface; +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/description-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/description-data-provider.php new file mode 100644 index 00000000..c977d42b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/description-data-provider.php @@ -0,0 +1,40 @@ +get_template( 'metadesc' ); + } + + /** + * Determines the date to be displayed in the snippet preview. + * + * @return string + */ + public function get_description_date(): string { + return ''; + } + + /** + * Method to return the Description domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + return new Description( $this->get_description_date(), $this->get_description_template() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/keyphrase-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/keyphrase-data-provider.php new file mode 100644 index 00000000..330e12ee --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/keyphrase-data-provider.php @@ -0,0 +1,36 @@ + + */ + public function get_focus_keyphrase_usage(): array { + $focuskp = WPSEO_Taxonomy_Meta::get_term_meta( $this->term, $this->term->taxonomy, 'focuskw' ); + + return WPSEO_Taxonomy_Meta::get_keyword_usage( $focuskp, $this->term->term_id, $this->term->taxonomy ); + } + + /** + * Method to return the keyphrase domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + $keyphrase_usage = $this->get_focus_keyphrase_usage(); + return new Keyphrase( $keyphrase_usage, [] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/social-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/social-data-provider.php new file mode 100644 index 00000000..eae8f105 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/social-data-provider.php @@ -0,0 +1,133 @@ +options_helper = $options_helper; + $this->image_helper = $image_helper; + $this->use_social_templates = $this->use_social_templates(); + } + + /** + * Determines whether the social templates should be used. + * + * @return bool Whether the social templates should be used. + */ + public function use_social_templates(): bool { + return $this->options_helper->get( 'opengraph', false ) === true; + } + + /** + * Gets the image url. + * + * @return string|null + */ + public function get_image_url(): ?string { + return $this->image_helper->get_term_content_image( $this->term->term_id ); + } + + /** + * Retrieves the social title template. + * + * @return string The social title template. + */ + public function get_social_title_template(): string { + if ( $this->use_social_templates ) { + return $this->get_social_template( 'title' ); + } + + return ''; + } + + /** + * Retrieves the social description template. + * + * @return string The social description template. + */ + public function get_social_description_template(): string { + if ( $this->use_social_templates ) { + return $this->get_social_template( 'description' ); + } + + return ''; + } + + /** + * Retrieves the social image template. + * + * @return string The social description template. + */ + public function get_social_image_template(): string { + if ( $this->use_social_templates ) { + return $this->get_social_template( 'image-url' ); + } + + return ''; + } + + /** + * Retrieves a social template. + * + * @param string $template_option_name The name of the option in which the template you want to get is saved. + * + * @return string + */ + private function get_social_template( $template_option_name ) { + /** + * Filters the social template value for a given taxonomy. + * + * @param string $template The social template value, defaults to empty string. + * @param string $template_option_name The subname of the option in which the template you want to get is saved. + * @param string $taxonomy The name of the taxonomy. + */ + return \apply_filters( 'wpseo_social_template_taxonomy', '', $template_option_name, $this->term->taxonomy ); + } + + /** + * Method to return the Social domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + return new Social( $this->get_social_title_template(), $this->get_social_description_template(), $this->get_social_image_template(), $this->get_image_url() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/title-data-provider.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/title-data-provider.php new file mode 100644 index 00000000..afd6a8f0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/terms/title-data-provider.php @@ -0,0 +1,41 @@ +get_template( 'title' ); + + if ( $title === '' && $fallback === true ) { + /* translators: %s expands to the variable used for term title. */ + $archives = \sprintf( \__( '%s Archives', 'wordpress-seo' ), '%%term_title%%' ); + return $archives . ' %%page%% %%sep%% %%sitename%%'; + } + + return $title; + } + + /** + * Method to return the Title domain object with SEO data. + * + * @return Seo_Plugin_Data_Interface The specific seo data. + */ + public function get_data(): Seo_Plugin_Data_Interface { + return new Title( $this->get_title_template(), $this->get_title_template( false ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/title-data-provider-interface.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/title-data-provider-interface.php new file mode 100644 index 00000000..30e0cc50 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/seo/title-data-provider-interface.php @@ -0,0 +1,15 @@ +short_link_helper = $short_link_helper; + $this->wistia_embed_permission_repository = $wistia_embed_permission_repository; + $this->meta = $meta; + $this->product_helper = $product_helper; + } + + /** + * Returns site information that is the + * + * @throws Exception If an invalid user ID is supplied to the wistia repository. + * @return array + */ + public function get_site_information(): array { + return [ + 'adminUrl' => \admin_url( 'admin.php' ), + 'linkParams' => $this->short_link_helper->get_query_params(), + 'pluginUrl' => \plugins_url( '', \WPSEO_FILE ), + 'wistiaEmbedPermission' => $this->wistia_embed_permission_repository->get_value_for_user( \get_current_user_id() ), + 'site_name' => $this->meta->for_current_page()->site_name, + 'contentLocale' => \get_locale(), + 'userLocale' => \get_user_locale(), + 'isRtl' => \is_rtl(), + 'isPremium' => $this->product_helper->is_premium(), + 'siteIconUrl' => \get_site_icon_url(), + ]; + } + + /** + * Returns site information that is the + * + * @throws Exception If an invalid user ID is supplied to the wistia repository. + * @return array + */ + public function get_legacy_site_information(): array { + return [ + 'adminUrl' => \admin_url( 'admin.php' ), + 'linkParams' => $this->short_link_helper->get_query_params(), + 'pluginUrl' => \plugins_url( '', \WPSEO_FILE ), + 'wistiaEmbedPermission' => $this->wistia_embed_permission_repository->get_value_for_user( \get_current_user_id() ), + 'metabox' => [ + 'site_name' => $this->meta->for_current_page()->site_name, + 'contentLocale' => \get_locale(), + 'userLocale' => \get_user_locale(), + 'isRtl' => \is_rtl(), + 'isPremium' => $this->product_helper->is_premium(), + 'siteIconUrl' => \get_site_icon_url(), + ], + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/post-site-information.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/post-site-information.php new file mode 100644 index 00000000..4882642a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/post-site-information.php @@ -0,0 +1,164 @@ +promotion_manager = $promotion_manager; + $this->alert_dismissal_action = $alert_dismissal_action; + } + + /** + * Sets the permalink. + * + * @param string $permalink The permalink. + * + * @return void + */ + public function set_permalink( string $permalink ): void { + $this->permalink = $permalink; + } + + /** + * Returns post specific site information together with the generic site information. + * + * @return array + */ + public function get_legacy_site_information(): array { + $dismissed_alerts = $this->alert_dismissal_action->all_dismissed(); + + $data = [ + 'dismissedAlerts' => $dismissed_alerts, + 'currentPromotions' => $this->promotion_manager->get_current_promotions(), + 'webinarIntroBlockEditorUrl' => $this->short_link_helper->get( 'https://yoa.st/webinar-intro-block-editor' ), + 'blackFridayBlockEditorUrl' => ( $this->promotion_manager->is( 'black-friday-2023-checklist' ) ) ? $this->short_link_helper->get( 'https://yoa.st/black-friday-checklist' ) : '', + 'metabox' => [ + 'search_url' => $this->search_url(), + 'post_edit_url' => $this->edit_url(), + 'base_url' => $this->base_url_for_js(), + ], + ]; + + return \array_merge_recursive( $data, parent::get_legacy_site_information() ); + } + + /** + * Returns post specific site information together with the generic site information. + * + * @return array + */ + public function get_site_information(): array { + $dismissed_alerts = $this->alert_dismissal_action->all_dismissed(); + + $data = [ + 'dismissedAlerts' => $dismissed_alerts, + 'currentPromotions' => $this->promotion_manager->get_current_promotions(), + 'webinarIntroBlockEditorUrl' => $this->short_link_helper->get( 'https://yoa.st/webinar-intro-block-editor' ), + 'blackFridayBlockEditorUrl' => ( $this->promotion_manager->is( 'black-friday-2023-checklist' ) ) ? $this->short_link_helper->get( 'https://yoa.st/black-friday-checklist' ) : '', + 'search_url' => $this->search_url(), + 'post_edit_url' => $this->edit_url(), + 'base_url' => $this->base_url_for_js(), + ]; + + return \array_merge( $data, parent::get_site_information() ); + } + + /** + * Returns the url to search for keyword for the post. + * + * @return string + */ + private function search_url(): string { + return \admin_url( 'edit.php?seo_kw_filter={keyword}' ); + } + + /** + * Returns the url to edit the taxonomy. + * + * @return string + */ + private function edit_url(): string { + return \admin_url( 'post.php?post={id}&action=edit' ); + } + + /** + * Returns a base URL for use in the JS, takes permalink structure into account. + * + * @return string + */ + private function base_url_for_js(): string { + global $pagenow; + + // The default base is the home_url. + $base_url = \home_url( '/', null ); + + if ( $pagenow === 'post-new.php' ) { + return $base_url; + } + + // If %postname% is the last tag, just strip it and use that as a base. + if ( \preg_match( '#%postname%/?$#', $this->permalink ) === 1 ) { + $base_url = \preg_replace( '#%postname%/?$#', '', $this->permalink ); + } + + // If %pagename% is the last tag, just strip it and use that as a base. + if ( \preg_match( '#%pagename%/?$#', $this->permalink ) === 1 ) { + $base_url = \preg_replace( '#%pagename%/?$#', '', $this->permalink ); + } + + return $base_url; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/term-site-information.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/term-site-information.php new file mode 100644 index 00000000..90c212f2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/site/term-site-information.php @@ -0,0 +1,137 @@ +options_helper = $options_helper; + } + + /** + * Sets the term for the information object and retrieves its taxonomy. + * + * @param WP_Term|string|false $term The term. + * + * @return void + */ + public function set_term( $term ) { + $this->term = $term; + $this->taxonomy = \get_taxonomy( $term->taxonomy ); + } + + /** + * Returns term specific site information together with the generic site information. + * + * @return array + */ + public function get_site_information(): array { + $data = [ + 'search_url' => $this->search_url(), + 'post_edit_url' => $this->edit_url(), + 'base_url' => $this->base_url_for_js(), + ]; + + return \array_merge_recursive( $data, parent::get_site_information() ); + } + + /** + * Returns term specific site information together with the generic site information. + * + * @return array + */ + public function get_legacy_site_information(): array { + $data = [ + 'metabox' => [ + 'search_url' => $this->search_url(), + 'post_edit_url' => $this->edit_url(), + 'base_url' => $this->base_url_for_js(), + ], + ]; + + return \array_merge_recursive( $data, parent::get_legacy_site_information() ); + } + + /** + * Returns the url to search for keyword for the taxonomy. + * + * @return string + */ + private function search_url(): string { + return \admin_url( 'edit-tags.php?taxonomy=' . $this->term->taxonomy . '&seo_kw_filter={keyword}' ); + } + + /** + * Returns the url to edit the taxonomy. + * + * @return string + */ + private function edit_url(): string { + return \admin_url( 'term.php?action=edit&taxonomy=' . $this->term->taxonomy . '&tag_ID={id}' ); + } + + /** + * Returns a base URL for use in the JS, takes permalink structure into account. + * + * @return string + */ + private function base_url_for_js(): string { + $base_url = \home_url( '/', null ); + if ( ! $this->options_helper->get( 'stripcategorybase', false ) ) { + if ( $this->taxonomy->rewrite ) { + $base_url = \trailingslashit( $base_url . $this->taxonomy->rewrite['slug'] ); + } + } + + return $base_url; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/editors/framework/word-form-recognition.php b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/word-form-recognition.php new file mode 100644 index 00000000..da63caf7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/editors/framework/word-form-recognition.php @@ -0,0 +1,55 @@ +language_helper = $language_helper; + } + + /** + * If this analysis is enabled. + * + * @return bool If this analysis is enabled. + */ + public function is_enabled(): bool { + return $this->language_helper->is_word_form_recognition_active( $this->language_helper->get_language() ); + } + + /** + * Returns the name of the object. + * + * @return string + */ + public function get_name(): string { + return 'wordFormRecognition'; + } + + /** + * Gets the legacy key. + * + * @return string The legacy key. + */ + public function get_legacy_key(): string { + return 'wordFormRecognitionActive'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/elementor/infrastructure/request-post.php b/wp/wp-content/plugins/wordpress-seo/src/elementor/infrastructure/request-post.php new file mode 100644 index 00000000..e4fc882b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/elementor/infrastructure/request-post.php @@ -0,0 +1,136 @@ +get_post_id() ); + } + + /** + * Retrieves the post ID, applicable to the current request. + * + * @return int|null The post ID. + */ + public function get_post_id(): ?int { + switch ( $this->get_server_request_method() ) { + case 'GET': + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['post'] ) && \is_numeric( $_GET['post'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Recommended -- Reason: No sanitization needed because we cast to an integer,We are not processing form information. + return (int) \wp_unslash( $_GET['post'] ); + } + + break; + case 'POST': + // Only allow POST requests when doing AJAX. + if ( ! \wp_doing_ajax() ) { + break; + } + + switch ( $this->get_post_action() ) { + // Our Yoast SEO form submission, it should include `post_id`. + case 'wpseo_elementor_save': + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( isset( $_POST['post_id'] ) && \is_numeric( $_POST['post_id'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Missing -- Reason: No sanitization needed because we cast to an integer,We are not processing form information. + return (int) \wp_unslash( $_POST['post_id'] ); + } + + break; + // Elementor editor AJAX request. + case 'elementor_ajax': + return $this->get_document_id(); + } + + break; + } + + return null; + } + + /** + * Returns the server request method. + * + * @return string The server request method, in upper case. + */ + private function get_server_request_method(): ?string { + if ( ! isset( $_SERVER['REQUEST_METHOD'] ) ) { + return null; + } + + if ( ! \is_string( $_SERVER['REQUEST_METHOD'] ) ) { + return null; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only comparing it later. + return \strtoupper( \wp_unslash( $_SERVER['REQUEST_METHOD'] ) ); + } + + /** + * Retrieves the action from the POST request. + * + * @return string|null The action or null if not found. + */ + private function get_post_action(): ?string { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( isset( $_POST['action'] ) && \is_string( $_POST['action'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, we are only strictly comparing. + return (string) \wp_unslash( $_POST['action'] ); + } + + return null; + } + + /** + * Retrieves the document ID from the POST request. + * + * Note: this is specific to Elementor' `elementor_ajax` action. And then the `get_document_config` internal action. + * Currently, you can see this in play when: + * - showing the Site Settings in the Elementor editor + * - going to another Recent post/page in the Elementor editor V2 + * + * @return int|null The document ID or null if not found. + */ + private function get_document_id(): ?int { + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( ! ( isset( $_POST['actions'] ) && \is_string( $_POST['actions'] ) ) ) { + return null; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Missing -- Reason: No sanitization needed because we cast to an integer (after JSON decode and type/exist checks),We are not processing form information. + $actions = \json_decode( \wp_unslash( $_POST['actions'] ), true ); + if ( ! \is_array( $actions ) ) { + return null; + } + + // Elementor sends everything in a `document-{ID}` format. + $action = \array_shift( $actions ); + if ( $action === null ) { + return null; + } + + // There are multiple action types. We only care about the "get_document_config" one. + if ( ! ( isset( $action['action'] ) && $action['action'] === 'get_document_config' ) ) { + return null; + } + + // Return the ID from the data, if it is set and numeric. + if ( isset( $action['data']['id'] ) && \is_numeric( $action['data']['id'] ) ) { + return (int) $action['data']['id']; + } + + return null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/addon-activation-error-exception.php b/wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/addon-activation-error-exception.php new file mode 100644 index 00000000..acca3982 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/exceptions/addon-installation/addon-activation-error-exception.php @@ -0,0 +1,10 @@ + [], + 'error' => $this->getMessage() . ': ' . $this->getPrevious()->getMessage(), + 'status' => $this->getCode(), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/exceptions/oauth/tokens/empty-property-exception.php b/wp/wp-content/plugins/wordpress-seo/src/exceptions/oauth/tokens/empty-property-exception.php new file mode 100644 index 00000000..08e7b632 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/exceptions/oauth/tokens/empty-property-exception.php @@ -0,0 +1,20 @@ +load(); + } + + return $main; +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generated/assets/externals.php b/wp/wp-content/plugins/wordpress-seo/src/generated/assets/externals.php new file mode 100644 index 00000000..0659c705 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generated/assets/externals.php @@ -0,0 +1 @@ + array('dependencies' => array('wp-polyfill', 'yoast-seo-redux-package'), 'version' => '425acbd30b98c737df6e'), 'analysisReport.js' => array('dependencies' => array('lodash', 'react', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => 'a0f12a824e5689dd0faf'), 'componentsNew.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-a11y', 'wp-i18n', 'wp-polyfill', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-react-select', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '898e7a63226507fb9afc'), 'featureFlag.js' => array('dependencies' => array('wp-polyfill'), 'version' => '91e54e3dd01f59a724ae'), 'helpers.js' => array('dependencies' => array('lodash', 'react', 'wp-i18n', 'wp-polyfill', 'yoast-seo-prop-types-package', 'yoast-seo-styled-components-package'), 'version' => 'f38a5f8b9a9ba801e722'), 'replacementVariableEditor.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-components', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-draft-js-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '3ef02d0813043f65de66'), 'searchMetadataPreviews.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-i18n', 'wp-polyfill', 'yoast-seo-analysis-package', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-replacement-variable-editor-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '732af9131c98940bc630'), 'socialMetadataForms.js' => array('dependencies' => array('lodash', 'react', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-redux-package', 'yoast-seo-replacement-variable-editor-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '6c538797b828b87a5419'), 'styleGuide.js' => array('dependencies' => array('wp-polyfill', 'yoast-seo-helpers-package', 'yoast-seo-styled-components-package'), 'version' => 'a65ddb8de826da5fea4d'), 'uiLibrary.js' => array('dependencies' => array('lodash', 'react', 'react-dom', 'wp-polyfill', 'yoast-seo-prop-types-package', 'yoast-seo-redux-js-toolkit-package'), 'version' => '0499348f9e5ab4c08abf'), 'chart.js.js' => array('dependencies' => array('wp-polyfill'), 'version' => '196fb6740f0ef8ce192a'), 'draftJs.js' => array('dependencies' => array('react', 'react-dom', 'wp-polyfill'), 'version' => 'f03ff0ae2ee1cf6bbc54'), 'jed.js' => array('dependencies' => array('wp-polyfill'), 'version' => '28697086e82ae1cd0e88'), 'propTypes.js' => array('dependencies' => array('wp-polyfill'), 'version' => '4c546a0c9e97b70d3fe0'), 'reactHelmet.js' => array('dependencies' => array('react', 'wp-polyfill', 'yoast-seo-prop-types-package'), 'version' => 'b7d9f84f1dc499388f58'), 'redux.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'e83451c8529be91b4af7'), 'styledComponents.js' => array('dependencies' => array('react', 'wp-polyfill'), 'version' => 'f030a78c47ee9be46c07'), 'analysis.js' => array('dependencies' => array('lodash', 'wp-i18n', 'wp-polyfill', 'yoast-seo-feature-flag-package'), 'version' => '8c57c34c7e99c4356ae5')); diff --git a/wp/wp-content/plugins/wordpress-seo/src/generated/assets/languages.php b/wp/wp-content/plugins/wordpress-seo/src/generated/assets/languages.php new file mode 100644 index 00000000..a90b97e8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generated/assets/languages.php @@ -0,0 +1 @@ + array('dependencies' => array('wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'dcd5887e134799f6ade3'), 'ar.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '4e1ef31d3c8242244a2f'), 'ca.js' => array('dependencies' => array('wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '469209f8725d57e2dd13'), 'cs.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '8e4aac0747a3c7dddf8a'), 'de.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'a6f42ad6f8355317a56c'), 'el.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'd72edcab364d544c2469'), 'en.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '51437f36b264d43a22db'), 'es.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'ff82c0b2cbb874d38d66'), 'fa.js' => array('dependencies' => array('wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '5afc40a75db2d68cacf2'), 'fr.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'a23c2630b045abc90aec'), 'he.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '081c52437d052c9cad74'), 'hu.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'd173d9d977c5b068443b'), 'id.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'ca63950fdd7d6938e7f0'), 'it.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'fb28921dba0da6614c80'), 'ja.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'f08d46a7f98fa0b3d579'), 'nb.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '04746196da02bb736987'), 'nl.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'c324d67321be4de5dba8'), 'pl.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '5908ab61bfa52f1abf82'), 'pt.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => '1b29b34cd8ec54326129'), 'ru.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'f57759f2e75aed95a722'), 'sk.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'be3d5afc018c7be19ca5'), 'sv.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'aa3c53ba0e8c760d56ec'), 'tr.js' => array('dependencies' => array('lodash', 'wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'f48abbda9bf8076db264')); diff --git a/wp/wp-content/plugins/wordpress-seo/src/generated/assets/plugin.php b/wp/wp-content/plugins/wordpress-seo/src/generated/assets/plugin.php new file mode 100644 index 00000000..8ebd49a4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generated/assets/plugin.php @@ -0,0 +1 @@ + array('dependencies' => array('react', 'wp-components', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-prop-types-package', 'yoast-seo-styled-components-package'), 'version' => 'b9f59c3fa79d3c219f77'), 'admin-global.js' => array('dependencies' => array('jquery', 'wp-polyfill'), 'version' => 'ee3745f3fdc45e43fb51'), 'admin-modules.js' => array('dependencies' => array('react', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package'), 'version' => 'fdbe5d62f7cf6543e337'), 'analysis-worker.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'aa04978fbd423b404462'), 'api-client.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'f56d7de163fa219c67e2'), 'block-editor.js' => array('dependencies' => array('lodash', 'moment', 'react', 'wp-annotations', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-plugins', 'wp-polyfill', 'wp-rich-text', 'wp-sanitize', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-chart.js-package', 'yoast-seo-components-new-package', 'yoast-seo-externals-components', 'yoast-seo-externals-contexts', 'yoast-seo-externals-redux', 'yoast-seo-feature-flag-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-replacement-variable-editor-package', 'yoast-seo-search-metadata-previews-package', 'yoast-seo-social-metadata-forms-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => 'b5b6ca8af0ca6bbeb9f7'), 'bulk-editor.js' => array('dependencies' => array('jquery', 'wp-polyfill'), 'version' => '308d4f19cc8fcb346d3d'), 'classic-editor.js' => array('dependencies' => array('jquery', 'lodash', 'moment', 'react', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-sanitize', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-chart.js-package', 'yoast-seo-components-new-package', 'yoast-seo-externals-components', 'yoast-seo-externals-contexts', 'yoast-seo-externals-redux', 'yoast-seo-feature-flag-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-replacement-variable-editor-package', 'yoast-seo-search-metadata-previews-package', 'yoast-seo-social-metadata-forms-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => 'd579c667081fc01cef33'), 'crawl-settings.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'd511931b46d0b74648b4'), 'dashboard-widget.js' => array('dependencies' => array('react', 'wp-element', 'wp-polyfill', 'yoast-seo-analysis-report-package', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-style-guide-package'), 'version' => 'ad6147e367cc50376cc5'), 'wincher-dashboard-widget.js' => array('dependencies' => array('lodash', 'moment', 'react', 'wp-api-fetch', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '3e855acf6ae73ab6d1ed'), 'dynamic-blocks.js' => array('dependencies' => array('react', 'wp-block-editor', 'wp-blocks', 'wp-polyfill', 'wp-server-side-render'), 'version' => '739ebde8b3e418b9886a'), 'edit-page.js' => array('dependencies' => array('jquery', 'wp-polyfill'), 'version' => 'afab9d8fdff1d98c8ca9'), 'editor-modules.js' => array('dependencies' => array('lodash', 'moment', 'react', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-sanitize', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-analysis-report-package', 'yoast-seo-chart.js-package', 'yoast-seo-components-new-package', 'yoast-seo-externals-contexts', 'yoast-seo-externals-redux', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-social-metadata-forms-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => 'a898fa1b0013b18042c0'), 'elementor.js' => array('dependencies' => array('lodash', 'moment', 'react', 'wp-annotations', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-rich-text', 'wp-sanitize', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-chart.js-package', 'yoast-seo-components-new-package', 'yoast-seo-externals-components', 'yoast-seo-externals-contexts', 'yoast-seo-externals-redux', 'yoast-seo-feature-flag-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-replacement-variable-editor-package', 'yoast-seo-search-metadata-previews-package', 'yoast-seo-social-metadata-forms-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => 'd68777a31c06f8cfaaf7'), 'externals-components.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-analysis-report-package', 'yoast-seo-components-new-package', 'yoast-seo-externals-contexts', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => 'ed5b92bd9005445bd513'), 'externals-contexts.js' => array('dependencies' => array('react', 'wp-element', 'wp-polyfill', 'yoast-seo-prop-types-package'), 'version' => '10ecaeb7fee15b420938'), 'externals-redux.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-sanitize', 'wp-url', 'yoast-seo-helpers-package', 'yoast-seo-redux-js-toolkit-package'), 'version' => 'dbf15ecc568fb2971477'), 'filter-explanation.js' => array('dependencies' => array('wp-polyfill'), 'version' => '8b3042cee26c58eb9be7'), 'first-time-configuration.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-social-metadata-forms-package', 'yoast-seo-ui-library-package'), 'version' => 'ae111865916ddf8520c7'), 'help-scout-beacon.js' => array('dependencies' => array('react', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-styled-components-package'), 'version' => '4cff4f48af6493046757'), 'import.js' => array('dependencies' => array('jquery', 'lodash', 'wp-i18n', 'wp-polyfill'), 'version' => 'cbe848d7253c616f3a75'), 'indexation.js' => array('dependencies' => array('jquery', 'react', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-style-guide-package', 'yoast-seo-styled-components-package'), 'version' => '06817d20ccce29675844'), 'installation-success.js' => array('dependencies' => array('lodash', 'react', 'wp-components', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-externals-contexts', 'yoast-seo-prop-types-package', 'yoast-seo-styled-components-package'), 'version' => '1aab6f9200a2aa6de4bd'), 'integrations-page.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-components', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-externals-contexts', 'yoast-seo-prop-types-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => 'fa7eed1ce031aa8ded1d'), 'introductions.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-ui-library-package'), 'version' => '00b7192b0d077a9aaa94'), 'network-admin.js' => array('dependencies' => array('jquery', 'wp-polyfill'), 'version' => 'c28de4314d03147fca4a'), 'post-edit.js' => array('dependencies' => array('jquery', 'lodash', 'react', 'wp-annotations', 'wp-api', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-rich-text', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-externals-redux', 'yoast-seo-feature-flag-package', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => '0da913207f4ce0859f5f'), 'quick-edit-handler.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'e7d3f8a9873afbfd1425'), 'reindex-links.js' => array('dependencies' => array('jquery', 'wp-polyfill'), 'version' => 'e4694eb7292052d53fc4'), 'redirect-old-features-tab.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'a792fdd4c0d1c2ef737c'), 'settings.js' => array('dependencies' => array('jquery', 'lodash', 'react', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-externals-redux', 'yoast-seo-prop-types-package', 'yoast-seo-styled-components-package'), 'version' => '5c59cacdbbe373ddf99a'), 'new-settings.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-replacement-variable-editor-package', 'yoast-seo-styled-components-package', 'yoast-seo-ui-library-package'), 'version' => '1e3b199e9220c23fd4b5'), 'academy.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-ui-library-package'), 'version' => '629acc5cdbead9506389'), 'support.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'wp-url', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-ui-library-package'), 'version' => '88d2e597e695cac1dc51'), 'how-to-block.js' => array('dependencies' => array('lodash', 'react', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'yoast-seo-prop-types-package', 'yoast-seo-styled-components-package'), 'version' => '3c48eb9c2bda3f650887'), 'faq-block.js' => array('dependencies' => array('react', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'yoast-seo-prop-types-package'), 'version' => '34ebc93abf046084fe1c'), 'term-edit.js' => array('dependencies' => array('jquery', 'lodash', 'react', 'wp-annotations', 'wp-api', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-rich-text', 'wp-url', 'yoast-seo-analysis-package', 'yoast-seo-externals-redux', 'yoast-seo-feature-flag-package', 'yoast-seo-prop-types-package', 'yoast-seo-react-helmet-package', 'yoast-seo-redux-js-toolkit-package', 'yoast-seo-ui-library-package'), 'version' => '83193471f5fb5bd120d7'), 'used-keywords-assessment.js' => array('dependencies' => array('wp-polyfill', 'yoast-seo-analysis-package'), 'version' => 'f2d934f4e70fdace40fc'), 'react-select.js' => array('dependencies' => array('react', 'react-dom', 'wp-polyfill', 'yoast-seo-prop-types-package'), 'version' => '016b19f563b56deb8ad5'), 'workouts.js' => array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-polyfill', 'yoast-seo-components-new-package', 'yoast-seo-externals-contexts', 'yoast-seo-helpers-package', 'yoast-seo-prop-types-package', 'yoast-seo-styled-components-package'), 'version' => '5285008d6544c5f1c0d4'), 'frontend-inspector-resources.js' => array('dependencies' => array('lodash', 'react', 'wp-i18n', 'wp-polyfill', 'yoast-seo-analysis-package', 'yoast-seo-components-new-package', 'yoast-seo-prop-types-package', 'yoast-seo-style-guide-package'), 'version' => 'bd58767c5c438a57b506')); diff --git a/wp/wp-content/plugins/wordpress-seo/src/generated/container.php b/wp/wp-content/plugins/wordpress-seo/src/generated/container.php new file mode 100644 index 00000000..7923043f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generated/container.php @@ -0,0 +1,5866 @@ +services = []; + $this->normalizedIds = [ + 'wpseo_addon_manager' => 'WPSEO_Addon_Manager', + 'wpseo_admin_asset_manager' => 'WPSEO_Admin_Asset_Manager', + 'wpseo_breadcrumbs' => 'WPSEO_Breadcrumbs', + 'wpseo_frontend' => 'WPSEO_Frontend', + 'wpseo_replace_vars' => 'WPSEO_Replace_Vars', + 'wpseo_shortlinker' => 'WPSEO_Shortlinker', + 'wpseo_utils' => 'WPSEO_Utils', + 'yoast\\wp\\lib\\migrations\\adapter' => 'Yoast\\WP\\Lib\\Migrations\\Adapter', + 'yoast\\wp\\seo\\actions\\addon_installation\\addon_activate_action' => 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Activate_Action', + 'yoast\\wp\\seo\\actions\\addon_installation\\addon_install_action' => 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Install_Action', + 'yoast\\wp\\seo\\actions\\alert_dismissal_action' => 'Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action', + 'yoast\\wp\\seo\\actions\\configuration\\first_time_configuration_action' => 'Yoast\\WP\\SEO\\Actions\\Configuration\\First_Time_Configuration_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_cleanup_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_custom_archive_settings_importing_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_default_archive_settings_importing_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_general_settings_importing_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_posts_importing_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_posttype_defaults_settings_importing_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_taxonomy_settings_importing_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action', + 'yoast\\wp\\seo\\actions\\importing\\aioseo\\aioseo_validate_data_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action', + 'yoast\\wp\\seo\\actions\\importing\\deactivate_conflicting_plugins_action' => 'Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action', + 'yoast\\wp\\seo\\actions\\indexables\\indexable_head_action' => 'Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_general_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_indexing_complete_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_post_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_post_type_archive_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexable_term_indexation_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexing_complete_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Complete_Action', + 'yoast\\wp\\seo\\actions\\indexing\\indexing_prepare_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action', + 'yoast\\wp\\seo\\actions\\indexing\\post_link_indexing_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action', + 'yoast\\wp\\seo\\actions\\indexing\\term_link_indexing_action' => 'Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action', + 'yoast\\wp\\seo\\actions\\integrations_action' => 'Yoast\\WP\\SEO\\Actions\\Integrations_Action', + 'yoast\\wp\\seo\\actions\\semrush\\semrush_login_action' => 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Login_Action', + 'yoast\\wp\\seo\\actions\\semrush\\semrush_options_action' => 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Options_Action', + 'yoast\\wp\\seo\\actions\\semrush\\semrush_phrases_action' => 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Phrases_Action', + 'yoast\\wp\\seo\\actions\\wincher\\wincher_account_action' => 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action', + 'yoast\\wp\\seo\\actions\\wincher\\wincher_keyphrases_action' => 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action', + 'yoast\\wp\\seo\\actions\\wincher\\wincher_login_action' => 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Login_Action', + 'yoast\\wp\\seo\\analytics\\application\\missing_indexables_collector' => 'Yoast\\WP\\SEO\\Analytics\\Application\\Missing_Indexables_Collector', + 'yoast\\wp\\seo\\analytics\\application\\to_be_cleaned_indexables_collector' => 'Yoast\\WP\\SEO\\Analytics\\Application\\To_Be_Cleaned_Indexables_Collector', + 'yoast\\wp\\seo\\analytics\\user_interface\\last_completed_indexation_integration' => 'Yoast\\WP\\SEO\\Analytics\\User_Interface\\Last_Completed_Indexation_Integration', + 'yoast\\wp\\seo\\builders\\indexable_author_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder', + 'yoast\\wp\\seo\\builders\\indexable_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Builder', + 'yoast\\wp\\seo\\builders\\indexable_date_archive_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Date_Archive_Builder', + 'yoast\\wp\\seo\\builders\\indexable_hierarchy_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder', + 'yoast\\wp\\seo\\builders\\indexable_home_page_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder', + 'yoast\\wp\\seo\\builders\\indexable_link_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder', + 'yoast\\wp\\seo\\builders\\indexable_post_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder', + 'yoast\\wp\\seo\\builders\\indexable_post_type_archive_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder', + 'yoast\\wp\\seo\\builders\\indexable_system_page_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_System_Page_Builder', + 'yoast\\wp\\seo\\builders\\indexable_term_builder' => 'Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder', + 'yoast\\wp\\seo\\builders\\primary_term_builder' => 'Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder', + 'yoast\\wp\\seo\\commands\\cleanup_command' => 'Yoast\\WP\\SEO\\Commands\\Cleanup_Command', + 'yoast\\wp\\seo\\commands\\index_command' => 'Yoast\\WP\\SEO\\Commands\\Index_Command', + 'yoast\\wp\\seo\\conditionals\\addon_installation_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\doing_post_quick_edit_save_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Doing_Post_Quick_Edit_Save_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\estimated_reading_time_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Estimated_Reading_Time_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\licenses_page_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Licenses_Page_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\non_network_admin_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Non_Network_Admin_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\post_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\posts_overview_or_ajax_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin\\yoast_admin_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional', + 'yoast\\wp\\seo\\conditionals\\admin_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional', + 'yoast\\wp\\seo\\conditionals\\attachment_redirections_enabled_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Attachment_Redirections_Enabled_Conditional', + 'yoast\\wp\\seo\\conditionals\\deactivating_yoast_seo_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Deactivating_Yoast_Seo_Conditional', + 'yoast\\wp\\seo\\conditionals\\development_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Development_Conditional', + 'yoast\\wp\\seo\\conditionals\\front_end_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional', + 'yoast\\wp\\seo\\conditionals\\get_request_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional', + 'yoast\\wp\\seo\\conditionals\\headless_rest_endpoints_enabled_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Headless_Rest_Endpoints_Enabled_Conditional', + 'yoast\\wp\\seo\\conditionals\\import_tool_selected_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Import_Tool_Selected_Conditional', + 'yoast\\wp\\seo\\conditionals\\jetpack_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Jetpack_Conditional', + 'yoast\\wp\\seo\\conditionals\\migrations_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional', + 'yoast\\wp\\seo\\conditionals\\new_settings_ui_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional', + 'yoast\\wp\\seo\\conditionals\\news_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\News_Conditional', + 'yoast\\wp\\seo\\conditionals\\no_tool_selected_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\No_Tool_Selected_Conditional', + 'yoast\\wp\\seo\\conditionals\\non_multisite_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Non_Multisite_Conditional', + 'yoast\\wp\\seo\\conditionals\\not_admin_ajax_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Not_Admin_Ajax_Conditional', + 'yoast\\wp\\seo\\conditionals\\open_graph_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional', + 'yoast\\wp\\seo\\conditionals\\premium_active_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Premium_Active_Conditional', + 'yoast\\wp\\seo\\conditionals\\premium_inactive_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Premium_Inactive_Conditional', + 'yoast\\wp\\seo\\conditionals\\primary_category_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Primary_Category_Conditional', + 'yoast\\wp\\seo\\conditionals\\robots_txt_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional', + 'yoast\\wp\\seo\\conditionals\\semrush_enabled_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\SEMrush_Enabled_Conditional', + 'yoast\\wp\\seo\\conditionals\\settings_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional', + 'yoast\\wp\\seo\\conditionals\\should_index_links_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Should_Index_Links_Conditional', + 'yoast\\wp\\seo\\conditionals\\text_formality_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\elementor_activated_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\elementor_edit_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\jetpack_boost_active_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Active_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\jetpack_boost_not_premium_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Not_Premium_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\polylang_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\translatepress_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\w3_total_cache_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\W3_Total_Cache_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\wordproof_integration_active_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Integration_Active_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\wordproof_plugin_inactive_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Plugin_Inactive_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\wpml_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional', + 'yoast\\wp\\seo\\conditionals\\third_party\\wpml_wpseo_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional', + 'yoast\\wp\\seo\\conditionals\\updated_importer_framework_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional', + 'yoast\\wp\\seo\\conditionals\\user_can_edit_users_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Edit_Users_Conditional', + 'yoast\\wp\\seo\\conditionals\\user_can_manage_wpseo_options_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional', + 'yoast\\wp\\seo\\conditionals\\user_can_publish_posts_and_pages_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Publish_Posts_And_Pages_Conditional', + 'yoast\\wp\\seo\\conditionals\\user_edit_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\User_Edit_Conditional', + 'yoast\\wp\\seo\\conditionals\\user_profile_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional', + 'yoast\\wp\\seo\\conditionals\\web_stories_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Web_Stories_Conditional', + 'yoast\\wp\\seo\\conditionals\\wincher_automatically_track_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Automatically_Track_Conditional', + 'yoast\\wp\\seo\\conditionals\\wincher_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Conditional', + 'yoast\\wp\\seo\\conditionals\\wincher_enabled_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional', + 'yoast\\wp\\seo\\conditionals\\wincher_token_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Token_Conditional', + 'yoast\\wp\\seo\\conditionals\\woocommerce_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional', + 'yoast\\wp\\seo\\conditionals\\wp_cron_enabled_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional', + 'yoast\\wp\\seo\\conditionals\\wp_robots_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\WP_Robots_Conditional', + 'yoast\\wp\\seo\\conditionals\\xmlrpc_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\XMLRPC_Conditional', + 'yoast\\wp\\seo\\conditionals\\yoast_admin_and_dashboard_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional', + 'yoast\\wp\\seo\\conditionals\\yoast_tools_page_conditional' => 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Tools_Page_Conditional', + 'yoast\\wp\\seo\\config\\badge_group_names' => 'Yoast\\WP\\SEO\\Config\\Badge_Group_Names', + 'yoast\\wp\\seo\\config\\conflicting_plugins' => 'Yoast\\WP\\SEO\\Config\\Conflicting_Plugins', + 'yoast\\wp\\seo\\config\\indexing_reasons' => 'Yoast\\WP\\SEO\\Config\\Indexing_Reasons', + 'yoast\\wp\\seo\\config\\migration_status' => 'Yoast\\WP\\SEO\\Config\\Migration_Status', + 'yoast\\wp\\seo\\config\\migrations\\addcollationtotables' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddCollationToTables', + 'yoast\\wp\\seo\\config\\migrations\\addcolumnstoindexables' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddColumnsToIndexables', + 'yoast\\wp\\seo\\config\\migrations\\addestimatedreadingtime' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddEstimatedReadingTime', + 'yoast\\wp\\seo\\config\\migrations\\addhasancestorscolumn' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddHasAncestorsColumn', + 'yoast\\wp\\seo\\config\\migrations\\addinclusivelanguagescore' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddInclusiveLanguageScore', + 'yoast\\wp\\seo\\config\\migrations\\addindexableobjectidandtypeindex' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexableObjectIdAndTypeIndex', + 'yoast\\wp\\seo\\config\\migrations\\addindexesforprominentwordsonindexables' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexesForProminentWordsOnIndexables', + 'yoast\\wp\\seo\\config\\migrations\\addobjecttimestamps' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddObjectTimestamps', + 'yoast\\wp\\seo\\config\\migrations\\addversioncolumntoindexables' => 'Yoast\\WP\\SEO\\Config\\Migrations\\AddVersionColumnToIndexables', + 'yoast\\wp\\seo\\config\\migrations\\breadcrumbtitleandhierarchyreset' => 'Yoast\\WP\\SEO\\Config\\Migrations\\BreadcrumbTitleAndHierarchyReset', + 'yoast\\wp\\seo\\config\\migrations\\clearindexabletables' => 'Yoast\\WP\\SEO\\Config\\Migrations\\ClearIndexableTables', + 'yoast\\wp\\seo\\config\\migrations\\createindexablesubpagesindex' => 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateIndexableSubpagesIndex', + 'yoast\\wp\\seo\\config\\migrations\\createseolinkstable' => 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateSEOLinksTable', + 'yoast\\wp\\seo\\config\\migrations\\deleteduplicateindexables' => 'Yoast\\WP\\SEO\\Config\\Migrations\\DeleteDuplicateIndexables', + 'yoast\\wp\\seo\\config\\migrations\\expandindexablecolumnlengths' => 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableColumnLengths', + 'yoast\\wp\\seo\\config\\migrations\\expandindexableidcolumnlengths' => 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableIDColumnLengths', + 'yoast\\wp\\seo\\config\\migrations\\expandprimarytermidcolumnlengths' => 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandPrimaryTermIDColumnLengths', + 'yoast\\wp\\seo\\config\\migrations\\replacepermalinkhashindex' => 'Yoast\\WP\\SEO\\Config\\Migrations\\ReplacePermalinkHashIndex', + 'yoast\\wp\\seo\\config\\migrations\\resetindexablehierarchytable' => 'Yoast\\WP\\SEO\\Config\\Migrations\\ResetIndexableHierarchyTable', + 'yoast\\wp\\seo\\config\\migrations\\truncateindexabletables' => 'Yoast\\WP\\SEO\\Config\\Migrations\\TruncateIndexableTables', + 'yoast\\wp\\seo\\config\\migrations\\wpyoastdropindexablemetatableifexists' => 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastDropIndexableMetaTableIfExists', + 'yoast\\wp\\seo\\config\\migrations\\wpyoastindexable' => 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexable', + 'yoast\\wp\\seo\\config\\migrations\\wpyoastindexablehierarchy' => 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexableHierarchy', + 'yoast\\wp\\seo\\config\\migrations\\wpyoastprimaryterm' => 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPrimaryTerm', + 'yoast\\wp\\seo\\config\\researcher_languages' => 'Yoast\\WP\\SEO\\Config\\Researcher_Languages', + 'yoast\\wp\\seo\\config\\schema_ids' => 'Yoast\\WP\\SEO\\Config\\Schema_IDs', + 'yoast\\wp\\seo\\config\\schema_types' => 'Yoast\\WP\\SEO\\Config\\Schema_Types', + 'yoast\\wp\\seo\\config\\semrush_client' => 'Yoast\\WP\\SEO\\Config\\SEMrush_Client', + 'yoast\\wp\\seo\\config\\wincher_client' => 'Yoast\\WP\\SEO\\Config\\Wincher_Client', + 'yoast\\wp\\seo\\config\\wordproof_app_config' => 'Yoast\\WP\\SEO\\Config\\Wordproof_App_Config', + 'yoast\\wp\\seo\\config\\wordproof_translations' => 'Yoast\\WP\\SEO\\Config\\Wordproof_Translations', + 'yoast\\wp\\seo\\content_type_visibility\\application\\content_type_visibility_dismiss_notifications' => 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications', + 'yoast\\wp\\seo\\content_type_visibility\\application\\content_type_visibility_watcher_actions' => 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Watcher_Actions', + 'yoast\\wp\\seo\\content_type_visibility\\user_interface\\content_type_visibility_dismiss_new_route' => 'Yoast\\WP\\SEO\\Content_Type_Visibility\\User_Interface\\Content_Type_Visibility_Dismiss_New_Route', + 'yoast\\wp\\seo\\context\\meta_tags_context' => 'Yoast\\WP\\SEO\\Context\\Meta_Tags_Context', + 'yoast\\wp\\seo\\editors\\application\\analysis_features\\enabled_analysis_features_repository' => 'Yoast\\WP\\SEO\\Editors\\Application\\Analysis_Features\\Enabled_Analysis_Features_Repository', + 'yoast\\wp\\seo\\editors\\application\\integrations\\integration_information_repository' => 'Yoast\\WP\\SEO\\Editors\\Application\\Integrations\\Integration_Information_Repository', + 'yoast\\wp\\seo\\editors\\application\\seo\\post_seo_information_repository' => 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Post_Seo_Information_Repository', + 'yoast\\wp\\seo\\editors\\application\\seo\\term_seo_information_repository' => 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Term_Seo_Information_Repository', + 'yoast\\wp\\seo\\editors\\application\\site\\website_information_repository' => 'Yoast\\WP\\SEO\\Editors\\Application\\Site\\Website_Information_Repository', + 'yoast\\wp\\seo\\generators\\breadcrumbs_generator' => 'Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator', + 'yoast\\wp\\seo\\generators\\open_graph_image_generator' => 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator', + 'yoast\\wp\\seo\\generators\\open_graph_locale_generator' => 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator', + 'yoast\\wp\\seo\\generators\\schema\\article' => 'Yoast\\WP\\SEO\\Generators\\Schema\\Article', + 'yoast\\wp\\seo\\generators\\schema\\author' => 'Yoast\\WP\\SEO\\Generators\\Schema\\Author', + 'yoast\\wp\\seo\\generators\\schema\\breadcrumb' => 'Yoast\\WP\\SEO\\Generators\\Schema\\Breadcrumb', + 'yoast\\wp\\seo\\generators\\schema\\faq' => 'Yoast\\WP\\SEO\\Generators\\Schema\\FAQ', + 'yoast\\wp\\seo\\generators\\schema\\howto' => 'Yoast\\WP\\SEO\\Generators\\Schema\\HowTo', + 'yoast\\wp\\seo\\generators\\schema\\main_image' => 'Yoast\\WP\\SEO\\Generators\\Schema\\Main_Image', + 'yoast\\wp\\seo\\generators\\schema\\organization' => 'Yoast\\WP\\SEO\\Generators\\Schema\\Organization', + 'yoast\\wp\\seo\\generators\\schema\\person' => 'Yoast\\WP\\SEO\\Generators\\Schema\\Person', + 'yoast\\wp\\seo\\generators\\schema\\webpage' => 'Yoast\\WP\\SEO\\Generators\\Schema\\WebPage', + 'yoast\\wp\\seo\\generators\\schema\\website' => 'Yoast\\WP\\SEO\\Generators\\Schema\\Website', + 'yoast\\wp\\seo\\generators\\schema_generator' => 'Yoast\\WP\\SEO\\Generators\\Schema_Generator', + 'yoast\\wp\\seo\\generators\\twitter_image_generator' => 'Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator', + 'yoast\\wp\\seo\\helpers\\aioseo_helper' => 'Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper', + 'yoast\\wp\\seo\\helpers\\asset_helper' => 'Yoast\\WP\\SEO\\Helpers\\Asset_Helper', + 'yoast\\wp\\seo\\helpers\\attachment_cleanup_helper' => 'Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper', + 'yoast\\wp\\seo\\helpers\\author_archive_helper' => 'Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper', + 'yoast\\wp\\seo\\helpers\\blocks_helper' => 'Yoast\\WP\\SEO\\Helpers\\Blocks_Helper', + 'yoast\\wp\\seo\\helpers\\capability_helper' => 'Yoast\\WP\\SEO\\Helpers\\Capability_Helper', + 'yoast\\wp\\seo\\helpers\\crawl_cleanup_helper' => 'Yoast\\WP\\SEO\\Helpers\\Crawl_Cleanup_Helper', + 'yoast\\wp\\seo\\helpers\\curl_helper' => 'Yoast\\WP\\SEO\\Helpers\\Curl_Helper', + 'yoast\\wp\\seo\\helpers\\current_page_helper' => 'Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper', + 'yoast\\wp\\seo\\helpers\\date_helper' => 'Yoast\\WP\\SEO\\Helpers\\Date_Helper', + 'yoast\\wp\\seo\\helpers\\environment_helper' => 'Yoast\\WP\\SEO\\Helpers\\Environment_Helper', + 'yoast\\wp\\seo\\helpers\\first_time_configuration_notice_helper' => 'Yoast\\WP\\SEO\\Helpers\\First_Time_Configuration_Notice_Helper', + 'yoast\\wp\\seo\\helpers\\home_url_helper' => 'Yoast\\WP\\SEO\\Helpers\\Home_Url_Helper', + 'yoast\\wp\\seo\\helpers\\image_helper' => 'Yoast\\WP\\SEO\\Helpers\\Image_Helper', + 'yoast\\wp\\seo\\helpers\\import_cursor_helper' => 'Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper', + 'yoast\\wp\\seo\\helpers\\import_helper' => 'Yoast\\WP\\SEO\\Helpers\\Import_Helper', + 'yoast\\wp\\seo\\helpers\\indexable_helper' => 'Yoast\\WP\\SEO\\Helpers\\Indexable_Helper', + 'yoast\\wp\\seo\\helpers\\indexable_to_postmeta_helper' => 'Yoast\\WP\\SEO\\Helpers\\Indexable_To_Postmeta_Helper', + 'yoast\\wp\\seo\\helpers\\indexing_helper' => 'Yoast\\WP\\SEO\\Helpers\\Indexing_Helper', + 'yoast\\wp\\seo\\helpers\\language_helper' => 'Yoast\\WP\\SEO\\Helpers\\Language_Helper', + 'yoast\\wp\\seo\\helpers\\meta_helper' => 'Yoast\\WP\\SEO\\Helpers\\Meta_Helper', + 'yoast\\wp\\seo\\helpers\\notification_helper' => 'Yoast\\WP\\SEO\\Helpers\\Notification_Helper', + 'yoast\\wp\\seo\\helpers\\open_graph\\image_helper' => 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper', + 'yoast\\wp\\seo\\helpers\\open_graph\\values_helper' => 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper', + 'yoast\\wp\\seo\\helpers\\options_helper' => 'Yoast\\WP\\SEO\\Helpers\\Options_Helper', + 'yoast\\wp\\seo\\helpers\\pagination_helper' => 'Yoast\\WP\\SEO\\Helpers\\Pagination_Helper', + 'yoast\\wp\\seo\\helpers\\permalink_helper' => 'Yoast\\WP\\SEO\\Helpers\\Permalink_Helper', + 'yoast\\wp\\seo\\helpers\\post_helper' => 'Yoast\\WP\\SEO\\Helpers\\Post_Helper', + 'yoast\\wp\\seo\\helpers\\post_type_helper' => 'Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper', + 'yoast\\wp\\seo\\helpers\\primary_term_helper' => 'Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper', + 'yoast\\wp\\seo\\helpers\\product_helper' => 'Yoast\\WP\\SEO\\Helpers\\Product_Helper', + 'yoast\\wp\\seo\\helpers\\redirect_helper' => 'Yoast\\WP\\SEO\\Helpers\\Redirect_Helper', + 'yoast\\wp\\seo\\helpers\\request_helper' => 'Yoast\\WP\\SEO\\Helpers\\Request_Helper', + 'yoast\\wp\\seo\\helpers\\require_file_helper' => 'Yoast\\WP\\SEO\\Helpers\\Require_File_Helper', + 'yoast\\wp\\seo\\helpers\\robots_helper' => 'Yoast\\WP\\SEO\\Helpers\\Robots_Helper', + 'yoast\\wp\\seo\\helpers\\robots_txt_helper' => 'Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper', + 'yoast\\wp\\seo\\helpers\\sanitization_helper' => 'Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper', + 'yoast\\wp\\seo\\helpers\\schema\\article_helper' => 'Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper', + 'yoast\\wp\\seo\\helpers\\schema\\html_helper' => 'Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper', + 'yoast\\wp\\seo\\helpers\\schema\\id_helper' => 'Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper', + 'yoast\\wp\\seo\\helpers\\schema\\image_helper' => 'Yoast\\WP\\SEO\\Helpers\\Schema\\Image_Helper', + 'yoast\\wp\\seo\\helpers\\schema\\language_helper' => 'Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper', + 'yoast\\wp\\seo\\helpers\\schema\\replace_vars_helper' => 'Yoast\\WP\\SEO\\Helpers\\Schema\\Replace_Vars_Helper', + 'yoast\\wp\\seo\\helpers\\score_icon_helper' => 'Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper', + 'yoast\\wp\\seo\\helpers\\short_link_helper' => 'Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper', + 'yoast\\wp\\seo\\helpers\\site_helper' => 'Yoast\\WP\\SEO\\Helpers\\Site_Helper', + 'yoast\\wp\\seo\\helpers\\social_profiles_helper' => 'Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper', + 'yoast\\wp\\seo\\helpers\\string_helper' => 'Yoast\\WP\\SEO\\Helpers\\String_Helper', + 'yoast\\wp\\seo\\helpers\\taxonomy_helper' => 'Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper', + 'yoast\\wp\\seo\\helpers\\twitter\\image_helper' => 'Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper', + 'yoast\\wp\\seo\\helpers\\url_helper' => 'Yoast\\WP\\SEO\\Helpers\\Url_Helper', + 'yoast\\wp\\seo\\helpers\\user_helper' => 'Yoast\\WP\\SEO\\Helpers\\User_Helper', + 'yoast\\wp\\seo\\helpers\\wincher_helper' => 'Yoast\\WP\\SEO\\Helpers\\Wincher_Helper', + 'yoast\\wp\\seo\\helpers\\woocommerce_helper' => 'Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper', + 'yoast\\wp\\seo\\helpers\\wordpress_helper' => 'Yoast\\WP\\SEO\\Helpers\\Wordpress_Helper', + 'yoast\\wp\\seo\\helpers\\wordproof_helper' => 'Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper', + 'yoast\\wp\\seo\\helpers\\wpdb_helper' => 'Yoast\\WP\\SEO\\Helpers\\Wpdb_Helper', + 'yoast\\wp\\seo\\initializers\\crawl_cleanup_permalinks' => 'Yoast\\WP\\SEO\\Initializers\\Crawl_Cleanup_Permalinks', + 'yoast\\wp\\seo\\initializers\\disable_core_sitemaps' => 'Yoast\\WP\\SEO\\Initializers\\Disable_Core_Sitemaps', + 'yoast\\wp\\seo\\initializers\\migration_runner' => 'Yoast\\WP\\SEO\\Initializers\\Migration_Runner', + 'yoast\\wp\\seo\\initializers\\woocommerce' => 'Yoast\\WP\\SEO\\Initializers\\Woocommerce', + 'yoast\\wp\\seo\\integrations\\academy_integration' => 'Yoast\\WP\\SEO\\Integrations\\Academy_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\activation_cleanup_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Activation_Cleanup_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\addon_installation\\dialog_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Dialog_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\addon_installation\\installation_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Installation_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\admin_columns_cache_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\background_indexing_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Background_Indexing_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\crawl_settings_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Crawl_Settings_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\cron_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Cron_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\deactivated_premium_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Deactivated_Premium_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\disable_concatenate_scripts_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Disable_Concatenate_Scripts_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\first_time_configuration_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\first_time_configuration_notice_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Notice_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\fix_news_dependencies_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Fix_News_Dependencies_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\health_check_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Health_Check_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\helpscout_beacon' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\HelpScout_Beacon', + 'yoast\\wp\\seo\\integrations\\admin\\import_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Import_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\indexables_exclude_taxonomy_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexables_Exclude_Taxonomy_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\indexing_notification_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Notification_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\indexing_tool_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Tool_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\installation_success_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Installation_Success_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\integrations_page' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Integrations_Page', + 'yoast\\wp\\seo\\integrations\\admin\\link_count_columns_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Link_Count_Columns_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\menu_badge_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Menu_Badge_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\migration_error_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Migration_Error_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\old_configuration_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Configuration_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\old_premium_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Premium_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\redirect_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirect_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\redirects_page_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirects_Page_Integration', + 'yoast\\wp\\seo\\integrations\\admin\\unsupported_php_version_notice' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Unsupported_PHP_Version_Notice', + 'yoast\\wp\\seo\\integrations\\admin\\workouts_integration' => 'Yoast\\WP\\SEO\\Integrations\\Admin\\Workouts_Integration', + 'yoast\\wp\\seo\\integrations\\alerts\\black_friday_product_editor_checklist_notification' => 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Product_Editor_Checklist_Notification', + 'yoast\\wp\\seo\\integrations\\alerts\\black_friday_promotion_notification' => 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Promotion_Notification', + 'yoast\\wp\\seo\\integrations\\alerts\\black_friday_sidebar_checklist_notification' => 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Sidebar_Checklist_Notification', + 'yoast\\wp\\seo\\integrations\\alerts\\jetpack_boost_pre_publish' => 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Jetpack_Boost_Pre_Publish', + 'yoast\\wp\\seo\\integrations\\alerts\\trustpilot_review_notification' => 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Trustpilot_Review_Notification', + 'yoast\\wp\\seo\\integrations\\alerts\\webinar_promo_notification' => 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Webinar_Promo_Notification', + 'yoast\\wp\\seo\\integrations\\blocks\\breadcrumbs_block' => 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Breadcrumbs_Block', + 'yoast\\wp\\seo\\integrations\\blocks\\internal_linking_category' => 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Internal_Linking_Category', + 'yoast\\wp\\seo\\integrations\\blocks\\structured_data_blocks' => 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Structured_Data_Blocks', + 'yoast\\wp\\seo\\integrations\\breadcrumbs_integration' => 'Yoast\\WP\\SEO\\Integrations\\Breadcrumbs_Integration', + 'yoast\\wp\\seo\\integrations\\cleanup_integration' => 'Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration', + 'yoast\\wp\\seo\\integrations\\duplicate_post_integration' => 'Yoast\\WP\\SEO\\Integrations\\Duplicate_Post_Integration', + 'yoast\\wp\\seo\\integrations\\estimated_reading_time' => 'Yoast\\WP\\SEO\\Integrations\\Estimated_Reading_Time', + 'yoast\\wp\\seo\\integrations\\exclude_attachment_post_type' => 'Yoast\\WP\\SEO\\Integrations\\Exclude_Attachment_Post_Type', + 'yoast\\wp\\seo\\integrations\\exclude_oembed_cache_post_type' => 'Yoast\\WP\\SEO\\Integrations\\Exclude_Oembed_Cache_Post_Type', + 'yoast\\wp\\seo\\integrations\\feature_flag_integration' => 'Yoast\\WP\\SEO\\Integrations\\Feature_Flag_Integration', + 'yoast\\wp\\seo\\integrations\\front_end\\backwards_compatibility' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Backwards_Compatibility', + 'yoast\\wp\\seo\\integrations\\front_end\\category_term_description' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Category_Term_Description', + 'yoast\\wp\\seo\\integrations\\front_end\\comment_link_fixer' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Comment_Link_Fixer', + 'yoast\\wp\\seo\\integrations\\front_end\\crawl_cleanup_basic' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Basic', + 'yoast\\wp\\seo\\integrations\\front_end\\crawl_cleanup_rss' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Rss', + 'yoast\\wp\\seo\\integrations\\front_end\\crawl_cleanup_searches' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Searches', + 'yoast\\wp\\seo\\integrations\\front_end\\feed_improvements' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Feed_Improvements', + 'yoast\\wp\\seo\\integrations\\front_end\\force_rewrite_title' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Force_Rewrite_Title', + 'yoast\\wp\\seo\\integrations\\front_end\\handle_404' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Handle_404', + 'yoast\\wp\\seo\\integrations\\front_end\\indexing_controls' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Indexing_Controls', + 'yoast\\wp\\seo\\integrations\\front_end\\open_graph_oembed' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Open_Graph_OEmbed', + 'yoast\\wp\\seo\\integrations\\front_end\\redirects' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Redirects', + 'yoast\\wp\\seo\\integrations\\front_end\\robots_txt_integration' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Robots_Txt_Integration', + 'yoast\\wp\\seo\\integrations\\front_end\\rss_footer_embed' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\RSS_Footer_Embed', + 'yoast\\wp\\seo\\integrations\\front_end\\schema_accessibility_feature' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Schema_Accessibility_Feature', + 'yoast\\wp\\seo\\integrations\\front_end\\wp_robots_integration' => 'Yoast\\WP\\SEO\\Integrations\\Front_End\\WP_Robots_Integration', + 'yoast\\wp\\seo\\integrations\\front_end_integration' => 'Yoast\\WP\\SEO\\Integrations\\Front_End_Integration', + 'yoast\\wp\\seo\\integrations\\primary_category' => 'Yoast\\WP\\SEO\\Integrations\\Primary_Category', + 'yoast\\wp\\seo\\integrations\\settings_integration' => 'Yoast\\WP\\SEO\\Integrations\\Settings_Integration', + 'yoast\\wp\\seo\\integrations\\support_integration' => 'Yoast\\WP\\SEO\\Integrations\\Support_Integration', + 'yoast\\wp\\seo\\integrations\\third_party\\amp' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\AMP', + 'yoast\\wp\\seo\\integrations\\third_party\\bbpress' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\BbPress', + 'yoast\\wp\\seo\\integrations\\third_party\\elementor' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Elementor', + 'yoast\\wp\\seo\\integrations\\third_party\\exclude_elementor_post_types' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_Elementor_Post_Types', + 'yoast\\wp\\seo\\integrations\\third_party\\exclude_woocommerce_post_types' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_WooCommerce_Post_Types', + 'yoast\\wp\\seo\\integrations\\third_party\\jetpack' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Jetpack', + 'yoast\\wp\\seo\\integrations\\third_party\\w3_total_cache' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\W3_Total_Cache', + 'yoast\\wp\\seo\\integrations\\third_party\\web_stories' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories', + 'yoast\\wp\\seo\\integrations\\third_party\\web_stories_post_edit' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories_Post_Edit', + 'yoast\\wp\\seo\\integrations\\third_party\\wincher' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher', + 'yoast\\wp\\seo\\integrations\\third_party\\wincher_publish' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Publish', + 'yoast\\wp\\seo\\integrations\\third_party\\woocommerce' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce', + 'yoast\\wp\\seo\\integrations\\third_party\\woocommerce_permalinks' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Woocommerce_Permalinks', + 'yoast\\wp\\seo\\integrations\\third_party\\woocommerce_post_edit' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce_Post_Edit', + 'yoast\\wp\\seo\\integrations\\third_party\\wordproof' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof', + 'yoast\\wp\\seo\\integrations\\third_party\\wordproof_integration_toggle' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof_Integration_Toggle', + 'yoast\\wp\\seo\\integrations\\third_party\\wpml' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML', + 'yoast\\wp\\seo\\integrations\\third_party\\wpml_wpseo_notification' => 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML_WPSEO_Notification', + 'yoast\\wp\\seo\\integrations\\uninstall_integration' => 'Yoast\\WP\\SEO\\Integrations\\Uninstall_Integration', + 'yoast\\wp\\seo\\integrations\\watchers\\addon_update_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Addon_Update_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\auto_update_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Auto_Update_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_ancestor_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Ancestor_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_attachment_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Attachment_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_author_archive_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Archive_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_author_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_category_permalink_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Category_Permalink_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_date_archive_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Date_Archive_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_home_page_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Home_Page_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_homeurl_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_HomeUrl_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_permalink_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Permalink_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_post_meta_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Meta_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_post_type_archive_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Archive_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_post_type_change_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Change_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_post_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_static_home_page_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Static_Home_Page_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_system_page_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_System_Page_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_taxonomy_change_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Taxonomy_Change_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\indexable_term_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Term_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\option_titles_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Titles_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\option_wpseo_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Wpseo_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\primary_category_quick_edit_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Category_Quick_Edit_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\primary_term_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Term_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\search_engines_discouraged_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Search_Engines_Discouraged_Watcher', + 'yoast\\wp\\seo\\integrations\\watchers\\woocommerce_beta_editor_watcher' => 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Woocommerce_Beta_Editor_Watcher', + 'yoast\\wp\\seo\\integrations\\xmlrpc' => 'Yoast\\WP\\SEO\\Integrations\\XMLRPC', + 'yoast\\wp\\seo\\introductions\\application\\ai_generate_titles_and_descriptions_introduction_upsell' => 'Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell', + 'yoast\\wp\\seo\\introductions\\application\\introductions_collector' => 'Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector', + 'yoast\\wp\\seo\\introductions\\infrastructure\\wistia_embed_permission_repository' => 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository', + 'yoast\\wp\\seo\\introductions\\user_interface\\introductions_integration' => 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Integration', + 'yoast\\wp\\seo\\introductions\\user_interface\\introductions_seen_route' => 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Seen_Route', + 'yoast\\wp\\seo\\introductions\\user_interface\\wistia_embed_permission_route' => 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Wistia_Embed_Permission_Route', + 'yoast\\wp\\seo\\loader' => 'Yoast\\WP\\SEO\\Loader', + 'yoast\\wp\\seo\\loggers\\logger' => 'Yoast\\WP\\SEO\\Loggers\\Logger', + 'yoast\\wp\\seo\\memoizers\\meta_tags_context_memoizer' => 'Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer', + 'yoast\\wp\\seo\\memoizers\\presentation_memoizer' => 'Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer', + 'yoast\\wp\\seo\\presentations\\abstract_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Abstract_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_author_archive_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Author_Archive_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_date_archive_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Date_Archive_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_error_page_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Error_Page_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_home_page_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Home_Page_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_post_type_archive_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Archive_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_post_type_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_search_result_page_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Search_Result_Page_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_static_home_page_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Home_Page_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_static_posts_page_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Posts_Page_Presentation', + 'yoast\\wp\\seo\\presentations\\indexable_term_archive_presentation' => 'Yoast\\WP\\SEO\\Presentations\\Indexable_Term_Archive_Presentation', + 'yoast\\wp\\seo\\promotions\\application\\promotion_manager' => 'Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager', + 'yoast\\wp\\seo\\repositories\\indexable_cleanup_repository' => 'Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository', + 'yoast\\wp\\seo\\repositories\\indexable_hierarchy_repository' => 'Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository', + 'yoast\\wp\\seo\\repositories\\indexable_repository' => 'Yoast\\WP\\SEO\\Repositories\\Indexable_Repository', + 'yoast\\wp\\seo\\repositories\\primary_term_repository' => 'Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository', + 'yoast\\wp\\seo\\repositories\\seo_links_repository' => 'Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository', + 'yoast\\wp\\seo\\routes\\alert_dismissal_route' => 'Yoast\\WP\\SEO\\Routes\\Alert_Dismissal_Route', + 'yoast\\wp\\seo\\routes\\first_time_configuration_route' => 'Yoast\\WP\\SEO\\Routes\\First_Time_Configuration_Route', + 'yoast\\wp\\seo\\routes\\importing_route' => 'Yoast\\WP\\SEO\\Routes\\Importing_Route', + 'yoast\\wp\\seo\\routes\\indexables_head_route' => 'Yoast\\WP\\SEO\\Routes\\Indexables_Head_Route', + 'yoast\\wp\\seo\\routes\\indexing_route' => 'Yoast\\WP\\SEO\\Routes\\Indexing_Route', + 'yoast\\wp\\seo\\routes\\integrations_route' => 'Yoast\\WP\\SEO\\Routes\\Integrations_Route', + 'yoast\\wp\\seo\\routes\\meta_search_route' => 'Yoast\\WP\\SEO\\Routes\\Meta_Search_Route', + 'yoast\\wp\\seo\\routes\\semrush_route' => 'Yoast\\WP\\SEO\\Routes\\SEMrush_Route', + 'yoast\\wp\\seo\\routes\\supported_features_route' => 'Yoast\\WP\\SEO\\Routes\\Supported_Features_Route', + 'yoast\\wp\\seo\\routes\\wincher_route' => 'Yoast\\WP\\SEO\\Routes\\Wincher_Route', + 'yoast\\wp\\seo\\routes\\workouts_route' => 'Yoast\\WP\\SEO\\Routes\\Workouts_Route', + 'yoast\\wp\\seo\\routes\\yoast_head_rest_field' => 'Yoast\\WP\\SEO\\Routes\\Yoast_Head_REST_Field', + 'yoast\\wp\\seo\\services\\health_check\\default_tagline_check' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Check', + 'yoast\\wp\\seo\\services\\health_check\\default_tagline_reports' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Reports', + 'yoast\\wp\\seo\\services\\health_check\\default_tagline_runner' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner', + 'yoast\\wp\\seo\\services\\health_check\\links_table_check' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Check', + 'yoast\\wp\\seo\\services\\health_check\\links_table_reports' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Reports', + 'yoast\\wp\\seo\\services\\health_check\\links_table_runner' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Runner', + 'yoast\\wp\\seo\\services\\health_check\\myyoast_api_request_factory' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\MyYoast_Api_Request_Factory', + 'yoast\\wp\\seo\\services\\health_check\\page_comments_check' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Check', + 'yoast\\wp\\seo\\services\\health_check\\page_comments_reports' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Reports', + 'yoast\\wp\\seo\\services\\health_check\\page_comments_runner' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner', + 'yoast\\wp\\seo\\services\\health_check\\postname_permalink_check' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Check', + 'yoast\\wp\\seo\\services\\health_check\\postname_permalink_reports' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Reports', + 'yoast\\wp\\seo\\services\\health_check\\postname_permalink_runner' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner', + 'yoast\\wp\\seo\\services\\health_check\\report_builder' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder', + 'yoast\\wp\\seo\\services\\health_check\\report_builder_factory' => 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory', + 'yoast\\wp\\seo\\services\\importing\\aioseo\\aioseo_replacevar_service' => 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service', + 'yoast\\wp\\seo\\services\\importing\\aioseo\\aioseo_robots_provider_service' => 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service', + 'yoast\\wp\\seo\\services\\importing\\aioseo\\aioseo_robots_transformer_service' => 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service', + 'yoast\\wp\\seo\\services\\importing\\aioseo\\aioseo_social_images_provider_service' => 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Social_Images_Provider_Service', + 'yoast\\wp\\seo\\services\\importing\\conflicting_plugins_service' => 'Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service', + 'yoast\\wp\\seo\\services\\importing\\importable_detector_service' => 'Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service', + 'yoast\\wp\\seo\\services\\indexables\\indexable_version_manager' => 'Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager', + 'yoast\\wp\\seo\\surfaces\\classes_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Classes_Surface', + 'yoast\\wp\\seo\\surfaces\\helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface', + 'yoast\\wp\\seo\\surfaces\\meta_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Meta_Surface', + 'yoast\\wp\\seo\\surfaces\\open_graph_helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface', + 'yoast\\wp\\seo\\surfaces\\schema_helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface', + 'yoast\\wp\\seo\\surfaces\\twitter_helpers_surface' => 'Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface', + 'yoast\\wp\\seo\\user_meta\\application\\additional_contactmethods_collector' => 'Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector', + 'yoast\\wp\\seo\\user_meta\\application\\custom_meta_collector' => 'Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector', + 'yoast\\wp\\seo\\user_meta\\user_interface\\additional_contactmethods_integration' => 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration', + 'yoast\\wp\\seo\\user_meta\\user_interface\\cleanup_integration' => 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Cleanup_Integration', + 'yoast\\wp\\seo\\user_meta\\user_interface\\custom_meta_integration' => 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Custom_Meta_Integration', + 'yoast\\wp\\seo\\user_profiles_additions\\user_interface\\user_profiles_additions_ui' => 'Yoast\\WP\\SEO\\User_Profiles_Additions\\User_Interface\\User_Profiles_Additions_Ui', + 'yoast\\wp\\seo\\values\\images' => 'Yoast\\WP\\SEO\\Values\\Images', + 'yoast\\wp\\seo\\values\\indexables\\indexable_builder_versions' => 'Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions', + 'yoast\\wp\\seo\\values\\open_graph\\images' => 'Yoast\\WP\\SEO\\Values\\Open_Graph\\Images', + 'yoast\\wp\\seo\\values\\twitter\\images' => 'Yoast\\WP\\SEO\\Values\\Twitter\\Images', + 'yoast\\wp\\seo\\wrappers\\wp_query_wrapper' => 'Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper', + 'yoast\\wp\\seo\\wrappers\\wp_remote_handler' => 'Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler', + 'yoast\\wp\\seo\\wrappers\\wp_rewrite_wrapper' => 'Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper', + 'yoast_notification_center' => 'Yoast_Notification_Center', + 'yoastseo_vendor\\symfony\\component\\dependencyinjection\\containerinterface' => 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface', + ]; + $this->methodMap = [ + 'WPSEO_Addon_Manager' => 'getWPSEOAddonManagerService', + 'WPSEO_Admin_Asset_Manager' => 'getWPSEOAdminAssetManagerService', + 'WPSEO_Breadcrumbs' => 'getWPSEOBreadcrumbsService', + 'WPSEO_Frontend' => 'getWPSEOFrontendService', + 'WPSEO_Replace_Vars' => 'getWPSEOReplaceVarsService', + 'WPSEO_Shortlinker' => 'getWPSEOShortlinkerService', + 'WPSEO_Utils' => 'getWPSEOUtilsService', + 'Yoast\\WP\\Lib\\Migrations\\Adapter' => 'getAdapterService', + 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Activate_Action' => 'getAddonActivateActionService', + 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Install_Action' => 'getAddonInstallActionService', + 'Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action' => 'getAlertDismissalActionService', + 'Yoast\\WP\\SEO\\Actions\\Configuration\\First_Time_Configuration_Action' => 'getFirstTimeConfigurationActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action' => 'getAioseoCleanupActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action' => 'getAioseoCustomArchiveSettingsImportingActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action' => 'getAioseoDefaultArchiveSettingsImportingActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action' => 'getAioseoGeneralSettingsImportingActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action' => 'getAioseoPostsImportingActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action' => 'getAioseoPosttypeDefaultsSettingsImportingActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action' => 'getAioseoTaxonomySettingsImportingActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action' => 'getAioseoValidateDataActionService', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action' => 'getDeactivateConflictingPluginsActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action' => 'getIndexableHeadActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action' => 'getIndexableGeneralIndexationActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action' => 'getIndexableIndexingCompleteActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action' => 'getIndexablePostIndexationActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action' => 'getIndexablePostTypeArchiveIndexationActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action' => 'getIndexableTermIndexationActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Complete_Action' => 'getIndexingCompleteActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action' => 'getIndexingPrepareActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action' => 'getPostLinkIndexingActionService', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action' => 'getTermLinkIndexingActionService', + 'Yoast\\WP\\SEO\\Actions\\Integrations_Action' => 'getIntegrationsActionService', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Login_Action' => 'getSEMrushLoginActionService', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Options_Action' => 'getSEMrushOptionsActionService', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Phrases_Action' => 'getSEMrushPhrasesActionService', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action' => 'getWincherAccountActionService', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action' => 'getWincherKeyphrasesActionService', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Login_Action' => 'getWincherLoginActionService', + 'Yoast\\WP\\SEO\\Analytics\\Application\\Missing_Indexables_Collector' => 'getMissingIndexablesCollectorService', + 'Yoast\\WP\\SEO\\Analytics\\Application\\To_Be_Cleaned_Indexables_Collector' => 'getToBeCleanedIndexablesCollectorService', + 'Yoast\\WP\\SEO\\Analytics\\User_Interface\\Last_Completed_Indexation_Integration' => 'getLastCompletedIndexationIntegrationService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder' => 'getIndexableAuthorBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Builder' => 'getIndexableBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Date_Archive_Builder' => 'getIndexableDateArchiveBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder' => 'getIndexableHierarchyBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder' => 'getIndexableHomePageBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder' => 'getIndexableLinkBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder' => 'getIndexablePostBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder' => 'getIndexablePostTypeArchiveBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_System_Page_Builder' => 'getIndexableSystemPageBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder' => 'getIndexableTermBuilderService', + 'Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder' => 'getPrimaryTermBuilderService', + 'Yoast\\WP\\SEO\\Commands\\Cleanup_Command' => 'getCleanupCommandService', + 'Yoast\\WP\\SEO\\Commands\\Index_Command' => 'getIndexCommandService', + 'Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional' => 'getAddonInstallationConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Doing_Post_Quick_Edit_Save_Conditional' => 'getDoingPostQuickEditSaveConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Estimated_Reading_Time_Conditional' => 'getEstimatedReadingTimeConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Licenses_Page_Conditional' => 'getLicensesPageConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Non_Network_Admin_Conditional' => 'getNonNetworkAdminConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional' => 'getPostConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional' => 'getPostsOverviewOrAjaxConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional' => 'getYoastAdminConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional' => 'getAdminConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Attachment_Redirections_Enabled_Conditional' => 'getAttachmentRedirectionsEnabledConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Deactivating_Yoast_Seo_Conditional' => 'getDeactivatingYoastSeoConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Development_Conditional' => 'getDevelopmentConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional' => 'getFrontEndConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional' => 'getGetRequestConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Headless_Rest_Endpoints_Enabled_Conditional' => 'getHeadlessRestEndpointsEnabledConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Import_Tool_Selected_Conditional' => 'getImportToolSelectedConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Jetpack_Conditional' => 'getJetpackConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional' => 'getMigrationsConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional' => 'getNewSettingsUiConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\News_Conditional' => 'getNewsConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\No_Tool_Selected_Conditional' => 'getNoToolSelectedConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Non_Multisite_Conditional' => 'getNonMultisiteConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Not_Admin_Ajax_Conditional' => 'getNotAdminAjaxConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional' => 'getOpenGraphConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Premium_Active_Conditional' => 'getPremiumActiveConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Premium_Inactive_Conditional' => 'getPremiumInactiveConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Primary_Category_Conditional' => 'getPrimaryCategoryConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional' => 'getRobotsTxtConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\SEMrush_Enabled_Conditional' => 'getSEMrushEnabledConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional' => 'getSettingsConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Should_Index_Links_Conditional' => 'getShouldIndexLinksConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional' => 'getTextFormalityConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional' => 'getElementorActivatedConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional' => 'getElementorEditConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Active_Conditional' => 'getJetpackBoostActiveConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Not_Premium_Conditional' => 'getJetpackBoostNotPremiumConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional' => 'getPolylangConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional' => 'getTranslatePressConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\W3_Total_Cache_Conditional' => 'getW3TotalCacheConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional' => 'getWPMLConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional' => 'getWPMLWPSEOConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Integration_Active_Conditional' => 'getWordproofIntegrationActiveConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Plugin_Inactive_Conditional' => 'getWordproofPluginInactiveConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional' => 'getUpdatedImporterFrameworkConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Edit_Users_Conditional' => 'getUserCanEditUsersConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional' => 'getUserCanManageWpseoOptionsConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Publish_Posts_And_Pages_Conditional' => 'getUserCanPublishPostsAndPagesConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\User_Edit_Conditional' => 'getUserEditConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional' => 'getUserProfileConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional' => 'getWPCRONEnabledConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\WP_Robots_Conditional' => 'getWPRobotsConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Web_Stories_Conditional' => 'getWebStoriesConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Automatically_Track_Conditional' => 'getWincherAutomaticallyTrackConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Conditional' => 'getWincherConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional' => 'getWincherEnabledConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Token_Conditional' => 'getWincherTokenConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional' => 'getWooCommerceConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\XMLRPC_Conditional' => 'getXMLRPCConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional' => 'getYoastAdminAndDashboardConditionalService', + 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Tools_Page_Conditional' => 'getYoastToolsPageConditionalService', + 'Yoast\\WP\\SEO\\Config\\Badge_Group_Names' => 'getBadgeGroupNamesService', + 'Yoast\\WP\\SEO\\Config\\Conflicting_Plugins' => 'getConflictingPluginsService', + 'Yoast\\WP\\SEO\\Config\\Indexing_Reasons' => 'getIndexingReasonsService', + 'Yoast\\WP\\SEO\\Config\\Migration_Status' => 'getMigrationStatusService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddCollationToTables' => 'getAddCollationToTablesService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddColumnsToIndexables' => 'getAddColumnsToIndexablesService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddEstimatedReadingTime' => 'getAddEstimatedReadingTimeService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddHasAncestorsColumn' => 'getAddHasAncestorsColumnService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddInclusiveLanguageScore' => 'getAddInclusiveLanguageScoreService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexableObjectIdAndTypeIndex' => 'getAddIndexableObjectIdAndTypeIndexService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexesForProminentWordsOnIndexables' => 'getAddIndexesForProminentWordsOnIndexablesService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddObjectTimestamps' => 'getAddObjectTimestampsService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddVersionColumnToIndexables' => 'getAddVersionColumnToIndexablesService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\BreadcrumbTitleAndHierarchyReset' => 'getBreadcrumbTitleAndHierarchyResetService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ClearIndexableTables' => 'getClearIndexableTablesService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateIndexableSubpagesIndex' => 'getCreateIndexableSubpagesIndexService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateSEOLinksTable' => 'getCreateSEOLinksTableService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\DeleteDuplicateIndexables' => 'getDeleteDuplicateIndexablesService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableColumnLengths' => 'getExpandIndexableColumnLengthsService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableIDColumnLengths' => 'getExpandIndexableIDColumnLengthsService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandPrimaryTermIDColumnLengths' => 'getExpandPrimaryTermIDColumnLengthsService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ReplacePermalinkHashIndex' => 'getReplacePermalinkHashIndexService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ResetIndexableHierarchyTable' => 'getResetIndexableHierarchyTableService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\TruncateIndexableTables' => 'getTruncateIndexableTablesService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastDropIndexableMetaTableIfExists' => 'getWpYoastDropIndexableMetaTableIfExistsService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexable' => 'getWpYoastIndexableService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexableHierarchy' => 'getWpYoastIndexableHierarchyService', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPrimaryTerm' => 'getWpYoastPrimaryTermService', + 'Yoast\\WP\\SEO\\Config\\Researcher_Languages' => 'getResearcherLanguagesService', + 'Yoast\\WP\\SEO\\Config\\SEMrush_Client' => 'getSEMrushClientService', + 'Yoast\\WP\\SEO\\Config\\Schema_IDs' => 'getSchemaIDsService', + 'Yoast\\WP\\SEO\\Config\\Schema_Types' => 'getSchemaTypesService', + 'Yoast\\WP\\SEO\\Config\\Wincher_Client' => 'getWincherClientService', + 'Yoast\\WP\\SEO\\Config\\Wordproof_App_Config' => 'getWordproofAppConfigService', + 'Yoast\\WP\\SEO\\Config\\Wordproof_Translations' => 'getWordproofTranslationsService', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications' => 'getContentTypeVisibilityDismissNotificationsService', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Watcher_Actions' => 'getContentTypeVisibilityWatcherActionsService', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\User_Interface\\Content_Type_Visibility_Dismiss_New_Route' => 'getContentTypeVisibilityDismissNewRouteService', + 'Yoast\\WP\\SEO\\Context\\Meta_Tags_Context' => 'getMetaTagsContextService', + 'Yoast\\WP\\SEO\\Editors\\Application\\Analysis_Features\\Enabled_Analysis_Features_Repository' => 'getEnabledAnalysisFeaturesRepositoryService', + 'Yoast\\WP\\SEO\\Editors\\Application\\Integrations\\Integration_Information_Repository' => 'getIntegrationInformationRepositoryService', + 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Post_Seo_Information_Repository' => 'getPostSeoInformationRepositoryService', + 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Term_Seo_Information_Repository' => 'getTermSeoInformationRepositoryService', + 'Yoast\\WP\\SEO\\Editors\\Application\\Site\\Website_Information_Repository' => 'getWebsiteInformationRepositoryService', + 'Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator' => 'getBreadcrumbsGeneratorService', + 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator' => 'getOpenGraphImageGeneratorService', + 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator' => 'getOpenGraphLocaleGeneratorService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Article' => 'getArticleService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Author' => 'getAuthorService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Breadcrumb' => 'getBreadcrumbService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\FAQ' => 'getFAQService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\HowTo' => 'getHowToService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Main_Image' => 'getMainImageService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Organization' => 'getOrganizationService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Person' => 'getPersonService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\WebPage' => 'getWebPageService', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Website' => 'getWebsiteService', + 'Yoast\\WP\\SEO\\Generators\\Schema_Generator' => 'getSchemaGeneratorService', + 'Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator' => 'getTwitterImageGeneratorService', + 'Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper' => 'getAioseoHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Asset_Helper' => 'getAssetHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper' => 'getAttachmentCleanupHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper' => 'getAuthorArchiveHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Blocks_Helper' => 'getBlocksHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Capability_Helper' => 'getCapabilityHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Crawl_Cleanup_Helper' => 'getCrawlCleanupHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Curl_Helper' => 'getCurlHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper' => 'getCurrentPageHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Date_Helper' => 'getDateHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Environment_Helper' => 'getEnvironmentHelperService', + 'Yoast\\WP\\SEO\\Helpers\\First_Time_Configuration_Notice_Helper' => 'getFirstTimeConfigurationNoticeHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Home_Url_Helper' => 'getHomeUrlHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Image_Helper' => 'getImageHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper' => 'getImportCursorHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Import_Helper' => 'getImportHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Indexable_Helper' => 'getIndexableHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Indexable_To_Postmeta_Helper' => 'getIndexableToPostmetaHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Indexing_Helper' => 'getIndexingHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Language_Helper' => 'getLanguageHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Meta_Helper' => 'getMetaHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Notification_Helper' => 'getNotificationHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper' => 'getImageHelper2Service', + 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper' => 'getValuesHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Options_Helper' => 'getOptionsHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Pagination_Helper' => 'getPaginationHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Permalink_Helper' => 'getPermalinkHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Post_Helper' => 'getPostHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper' => 'getPostTypeHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper' => 'getPrimaryTermHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Product_Helper' => 'getProductHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Redirect_Helper' => 'getRedirectHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Request_Helper' => 'getRequestHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Require_File_Helper' => 'getRequireFileHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Robots_Helper' => 'getRobotsHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper' => 'getRobotsTxtHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper' => 'getSanitizationHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper' => 'getArticleHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper' => 'getHTMLHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper' => 'getIDHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Image_Helper' => 'getImageHelper3Service', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper' => 'getLanguageHelper2Service', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Replace_Vars_Helper' => 'getReplaceVarsHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper' => 'getScoreIconHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper' => 'getShortLinkHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Site_Helper' => 'getSiteHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper' => 'getSocialProfilesHelperService', + 'Yoast\\WP\\SEO\\Helpers\\String_Helper' => 'getStringHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper' => 'getTaxonomyHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper' => 'getImageHelper4Service', + 'Yoast\\WP\\SEO\\Helpers\\Url_Helper' => 'getUrlHelperService', + 'Yoast\\WP\\SEO\\Helpers\\User_Helper' => 'getUserHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Wincher_Helper' => 'getWincherHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper' => 'getWoocommerceHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Wordpress_Helper' => 'getWordpressHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper' => 'getWordproofHelperService', + 'Yoast\\WP\\SEO\\Helpers\\Wpdb_Helper' => 'getWpdbHelperService', + 'Yoast\\WP\\SEO\\Initializers\\Crawl_Cleanup_Permalinks' => 'getCrawlCleanupPermalinksService', + 'Yoast\\WP\\SEO\\Initializers\\Disable_Core_Sitemaps' => 'getDisableCoreSitemapsService', + 'Yoast\\WP\\SEO\\Initializers\\Migration_Runner' => 'getMigrationRunnerService', + 'Yoast\\WP\\SEO\\Initializers\\Woocommerce' => 'getWoocommerceService', + 'Yoast\\WP\\SEO\\Integrations\\Academy_Integration' => 'getAcademyIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Activation_Cleanup_Integration' => 'getActivationCleanupIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Dialog_Integration' => 'getDialogIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Installation_Integration' => 'getInstallationIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration' => 'getAdminColumnsCacheIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Background_Indexing_Integration' => 'getBackgroundIndexingIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Crawl_Settings_Integration' => 'getCrawlSettingsIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Cron_Integration' => 'getCronIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Deactivated_Premium_Integration' => 'getDeactivatedPremiumIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Disable_Concatenate_Scripts_Integration' => 'getDisableConcatenateScriptsIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Integration' => 'getFirstTimeConfigurationIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Notice_Integration' => 'getFirstTimeConfigurationNoticeIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Fix_News_Dependencies_Integration' => 'getFixNewsDependenciesIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Health_Check_Integration' => 'getHealthCheckIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\HelpScout_Beacon' => 'getHelpScoutBeaconService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Import_Integration' => 'getImportIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexables_Exclude_Taxonomy_Integration' => 'getIndexablesExcludeTaxonomyIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Notification_Integration' => 'getIndexingNotificationIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Tool_Integration' => 'getIndexingToolIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Installation_Success_Integration' => 'getInstallationSuccessIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Integrations_Page' => 'getIntegrationsPageService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Link_Count_Columns_Integration' => 'getLinkCountColumnsIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Menu_Badge_Integration' => 'getMenuBadgeIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Migration_Error_Integration' => 'getMigrationErrorIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Configuration_Integration' => 'getOldConfigurationIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Premium_Integration' => 'getOldPremiumIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirect_Integration' => 'getRedirectIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirects_Page_Integration' => 'getRedirectsPageIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Unsupported_PHP_Version_Notice' => 'getUnsupportedPHPVersionNoticeService', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Workouts_Integration' => 'getWorkoutsIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Product_Editor_Checklist_Notification' => 'getBlackFridayProductEditorChecklistNotificationService', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Promotion_Notification' => 'getBlackFridayPromotionNotificationService', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Sidebar_Checklist_Notification' => 'getBlackFridaySidebarChecklistNotificationService', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Jetpack_Boost_Pre_Publish' => 'getJetpackBoostPrePublishService', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Trustpilot_Review_Notification' => 'getTrustpilotReviewNotificationService', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Webinar_Promo_Notification' => 'getWebinarPromoNotificationService', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Breadcrumbs_Block' => 'getBreadcrumbsBlockService', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Internal_Linking_Category' => 'getInternalLinkingCategoryService', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Structured_Data_Blocks' => 'getStructuredDataBlocksService', + 'Yoast\\WP\\SEO\\Integrations\\Breadcrumbs_Integration' => 'getBreadcrumbsIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration' => 'getCleanupIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Duplicate_Post_Integration' => 'getDuplicatePostIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Estimated_Reading_Time' => 'getEstimatedReadingTimeService', + 'Yoast\\WP\\SEO\\Integrations\\Exclude_Attachment_Post_Type' => 'getExcludeAttachmentPostTypeService', + 'Yoast\\WP\\SEO\\Integrations\\Exclude_Oembed_Cache_Post_Type' => 'getExcludeOembedCachePostTypeService', + 'Yoast\\WP\\SEO\\Integrations\\Feature_Flag_Integration' => 'getFeatureFlagIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Backwards_Compatibility' => 'getBackwardsCompatibilityService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Category_Term_Description' => 'getCategoryTermDescriptionService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Comment_Link_Fixer' => 'getCommentLinkFixerService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Basic' => 'getCrawlCleanupBasicService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Rss' => 'getCrawlCleanupRssService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Searches' => 'getCrawlCleanupSearchesService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Feed_Improvements' => 'getFeedImprovementsService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Force_Rewrite_Title' => 'getForceRewriteTitleService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Handle_404' => 'getHandle404Service', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Indexing_Controls' => 'getIndexingControlsService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Open_Graph_OEmbed' => 'getOpenGraphOEmbedService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\RSS_Footer_Embed' => 'getRSSFooterEmbedService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Redirects' => 'getRedirectsService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Robots_Txt_Integration' => 'getRobotsTxtIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Schema_Accessibility_Feature' => 'getSchemaAccessibilityFeatureService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\WP_Robots_Integration' => 'getWPRobotsIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Front_End_Integration' => 'getFrontEndIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Primary_Category' => 'getPrimaryCategoryService', + 'Yoast\\WP\\SEO\\Integrations\\Settings_Integration' => 'getSettingsIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Support_Integration' => 'getSupportIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\AMP' => 'getAMPService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\BbPress' => 'getBbPressService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Elementor' => 'getElementorService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_Elementor_Post_Types' => 'getExcludeElementorPostTypesService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_WooCommerce_Post_Types' => 'getExcludeWooCommercePostTypesService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Jetpack' => 'getJetpackService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\W3_Total_Cache' => 'getW3TotalCacheService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML' => 'getWPMLService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML_WPSEO_Notification' => 'getWPMLWPSEONotificationService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories' => 'getWebStoriesService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories_Post_Edit' => 'getWebStoriesPostEditService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher' => 'getWincherService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Publish' => 'getWincherPublishService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce' => 'getWooCommerce2Service', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce_Post_Edit' => 'getWooCommercePostEditService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Woocommerce_Permalinks' => 'getWoocommercePermalinksService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof' => 'getWordproofService', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof_Integration_Toggle' => 'getWordproofIntegrationToggleService', + 'Yoast\\WP\\SEO\\Integrations\\Uninstall_Integration' => 'getUninstallIntegrationService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Addon_Update_Watcher' => 'getAddonUpdateWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Auto_Update_Watcher' => 'getAutoUpdateWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Ancestor_Watcher' => 'getIndexableAncestorWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Attachment_Watcher' => 'getIndexableAttachmentWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Archive_Watcher' => 'getIndexableAuthorArchiveWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Watcher' => 'getIndexableAuthorWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Category_Permalink_Watcher' => 'getIndexableCategoryPermalinkWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Date_Archive_Watcher' => 'getIndexableDateArchiveWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_HomeUrl_Watcher' => 'getIndexableHomeUrlWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Home_Page_Watcher' => 'getIndexableHomePageWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Permalink_Watcher' => 'getIndexablePermalinkWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Meta_Watcher' => 'getIndexablePostMetaWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Archive_Watcher' => 'getIndexablePostTypeArchiveWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Change_Watcher' => 'getIndexablePostTypeChangeWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher' => 'getIndexablePostWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Static_Home_Page_Watcher' => 'getIndexableStaticHomePageWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_System_Page_Watcher' => 'getIndexableSystemPageWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Taxonomy_Change_Watcher' => 'getIndexableTaxonomyChangeWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Term_Watcher' => 'getIndexableTermWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Titles_Watcher' => 'getOptionTitlesWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Wpseo_Watcher' => 'getOptionWpseoWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Category_Quick_Edit_Watcher' => 'getPrimaryCategoryQuickEditWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Term_Watcher' => 'getPrimaryTermWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Search_Engines_Discouraged_Watcher' => 'getSearchEnginesDiscouragedWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Woocommerce_Beta_Editor_Watcher' => 'getWoocommerceBetaEditorWatcherService', + 'Yoast\\WP\\SEO\\Integrations\\XMLRPC' => 'getXMLRPCService', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell' => 'getAiGenerateTitlesAndDescriptionsIntroductionUpsellService', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector' => 'getIntroductionsCollectorService', + 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository' => 'getWistiaEmbedPermissionRepositoryService', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Integration' => 'getIntroductionsIntegrationService', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Seen_Route' => 'getIntroductionsSeenRouteService', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Wistia_Embed_Permission_Route' => 'getWistiaEmbedPermissionRouteService', + 'Yoast\\WP\\SEO\\Loader' => 'getLoaderService', + 'Yoast\\WP\\SEO\\Loggers\\Logger' => 'getLoggerService', + 'Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer' => 'getMetaTagsContextMemoizerService', + 'Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer' => 'getPresentationMemoizerService', + 'Yoast\\WP\\SEO\\Presentations\\Abstract_Presentation' => 'getAbstractPresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Author_Archive_Presentation' => 'getIndexableAuthorArchivePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Date_Archive_Presentation' => 'getIndexableDateArchivePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Error_Page_Presentation' => 'getIndexableErrorPagePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Home_Page_Presentation' => 'getIndexableHomePagePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Archive_Presentation' => 'getIndexablePostTypeArchivePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Presentation' => 'getIndexablePostTypePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Presentation' => 'getIndexablePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Search_Result_Page_Presentation' => 'getIndexableSearchResultPagePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Home_Page_Presentation' => 'getIndexableStaticHomePagePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Posts_Page_Presentation' => 'getIndexableStaticPostsPagePresentationService', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Term_Archive_Presentation' => 'getIndexableTermArchivePresentationService', + 'Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager' => 'getPromotionManagerService', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository' => 'getIndexableCleanupRepositoryService', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository' => 'getIndexableHierarchyRepositoryService', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Repository' => 'getIndexableRepositoryService', + 'Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository' => 'getPrimaryTermRepositoryService', + 'Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository' => 'getSEOLinksRepositoryService', + 'Yoast\\WP\\SEO\\Routes\\Alert_Dismissal_Route' => 'getAlertDismissalRouteService', + 'Yoast\\WP\\SEO\\Routes\\First_Time_Configuration_Route' => 'getFirstTimeConfigurationRouteService', + 'Yoast\\WP\\SEO\\Routes\\Importing_Route' => 'getImportingRouteService', + 'Yoast\\WP\\SEO\\Routes\\Indexables_Head_Route' => 'getIndexablesHeadRouteService', + 'Yoast\\WP\\SEO\\Routes\\Indexing_Route' => 'getIndexingRouteService', + 'Yoast\\WP\\SEO\\Routes\\Integrations_Route' => 'getIntegrationsRouteService', + 'Yoast\\WP\\SEO\\Routes\\Meta_Search_Route' => 'getMetaSearchRouteService', + 'Yoast\\WP\\SEO\\Routes\\SEMrush_Route' => 'getSEMrushRouteService', + 'Yoast\\WP\\SEO\\Routes\\Supported_Features_Route' => 'getSupportedFeaturesRouteService', + 'Yoast\\WP\\SEO\\Routes\\Wincher_Route' => 'getWincherRouteService', + 'Yoast\\WP\\SEO\\Routes\\Workouts_Route' => 'getWorkoutsRouteService', + 'Yoast\\WP\\SEO\\Routes\\Yoast_Head_REST_Field' => 'getYoastHeadRESTFieldService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Check' => 'getDefaultTaglineCheckService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Reports' => 'getDefaultTaglineReportsService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner' => 'getDefaultTaglineRunnerService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Check' => 'getLinksTableCheckService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Reports' => 'getLinksTableReportsService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Runner' => 'getLinksTableRunnerService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\MyYoast_Api_Request_Factory' => 'getMyYoastApiRequestFactoryService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Check' => 'getPageCommentsCheckService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Reports' => 'getPageCommentsReportsService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner' => 'getPageCommentsRunnerService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Check' => 'getPostnamePermalinkCheckService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Reports' => 'getPostnamePermalinkReportsService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner' => 'getPostnamePermalinkRunnerService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder' => 'getReportBuilderService', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory' => 'getReportBuilderFactoryService', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service' => 'getAioseoReplacevarServiceService', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service' => 'getAioseoRobotsProviderServiceService', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service' => 'getAioseoRobotsTransformerServiceService', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Social_Images_Provider_Service' => 'getAioseoSocialImagesProviderServiceService', + 'Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service' => 'getConflictingPluginsServiceService', + 'Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service' => 'getImportableDetectorServiceService', + 'Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager' => 'getIndexableVersionManagerService', + 'Yoast\\WP\\SEO\\Surfaces\\Classes_Surface' => 'getClassesSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface' => 'getHelpersSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Meta_Surface' => 'getMetaSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface' => 'getOpenGraphHelpersSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface' => 'getSchemaHelpersSurfaceService', + 'Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface' => 'getTwitterHelpersSurfaceService', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector' => 'getAdditionalContactmethodsCollectorService', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector' => 'getCustomMetaCollectorService', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration' => 'getAdditionalContactmethodsIntegrationService', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Cleanup_Integration' => 'getCleanupIntegration2Service', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Custom_Meta_Integration' => 'getCustomMetaIntegrationService', + 'Yoast\\WP\\SEO\\User_Profiles_Additions\\User_Interface\\User_Profiles_Additions_Ui' => 'getUserProfilesAdditionsUiService', + 'Yoast\\WP\\SEO\\Values\\Images' => 'getImagesService', + 'Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions' => 'getIndexableBuilderVersionsService', + 'Yoast\\WP\\SEO\\Values\\Open_Graph\\Images' => 'getImages2Service', + 'Yoast\\WP\\SEO\\Values\\Twitter\\Images' => 'getImages3Service', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper' => 'getWPQueryWrapperService', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler' => 'getWPRemoteHandlerService', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper' => 'getWPRewriteWrapperService', + 'Yoast_Notification_Center' => 'getYoastNotificationCenterService', + 'wpdb' => 'getWpdbService', + ]; + $this->privates = [ + 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => true, + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications' => true, + 'Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector' => true, + ]; + $this->aliases = [ + 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => 'service_container', + ]; + } + + public function getRemovedIds() + { + return [ + 'Psr\\Container\\ContainerInterface' => true, + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => true, + 'YoastSEO_Vendor\\YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => true, + 'Yoast\\WP\\SEO\\Analytics\\Domain\\Missing_Indexable_Bucket' => true, + 'Yoast\\WP\\SEO\\Analytics\\Domain\\Missing_Indexable_Count' => true, + 'Yoast\\WP\\SEO\\Analytics\\Domain\\To_Be_Cleaned_Indexable_Bucket' => true, + 'Yoast\\WP\\SEO\\Analytics\\Domain\\To_Be_Cleaned_Indexable_Count' => true, + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications' => true, + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Feature' => true, + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Features_List' => true, + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Description' => true, + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Keyphrase' => true, + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Social' => true, + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Title' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Cornerstone_Content' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Inclusive_Language_Analysis' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Jetpack_Markdown' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Multilingual' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Semrush' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Wincher' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Keyphrase_Analysis' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Previously_Used_Keyphrase' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Readability_Analysis' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Description_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Keyphrase_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Social_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Title_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Description_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Keyphrase_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Social_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Title_Data_Provider' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Post_Site_Information' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Term_Site_Information' => true, + 'Yoast\\WP\\SEO\\Editors\\Framework\\Word_Form_Recognition' => true, + 'Yoast\\WP\\SEO\\Elementor\\Infrastructure\\Request_Post' => true, + 'Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Fix_Assessments_Upsell' => true, + 'Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector' => true, + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introduction_Interface' => true, + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introduction_Item' => true, + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introductions_Bucket' => true, + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Invalid_User_Id_Exception' => true, + 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Introductions_Seen_Repository' => true, + 'Yoast\\WP\\SEO\\Presenters\\Robots_Txt_Presenter' => true, + 'Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager_Interface' => true, + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Black_Friday_Checklist_Promotion' => true, + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Black_Friday_Promotion' => true, + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Time_Interval' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Cleanup_Service' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Facebook' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Instagram' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Linkedin' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Myspace' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Pinterest' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Soundcloud' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Tumblr' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Wikipedia' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\X' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Youtube' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Author_Metadesc' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Author_Title' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Content_Analysis_Disable' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Inclusive_Language_Analysis_Disable' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Keyword_Analysis_Disable' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Noindex_Author' => true, + 'Yoast\\WP\\SEO\\User_Meta\\Infrastructure\\Cleanup_Repository' => true, + ]; + } + + public function compile() + { + throw new LogicException('You cannot compile a dumped container that was already compiled.'); + } + + public function isCompiled() + { + return true; + } + + public function isFrozen() + { + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), E_USER_DEPRECATED); + + return true; + } + + /** + * Gets the public 'WPSEO_Addon_Manager' shared service. + * + * @return \WPSEO_Addon_Manager + */ + protected function getWPSEOAddonManagerService() + { + return $this->services['WPSEO_Addon_Manager'] = \Yoast\WP\SEO\WordPress\Wrapper::get_addon_manager(); + } + + /** + * Gets the public 'WPSEO_Admin_Asset_Manager' shared service. + * + * @return \WPSEO_Admin_Asset_Manager + */ + protected function getWPSEOAdminAssetManagerService() + { + return $this->services['WPSEO_Admin_Asset_Manager'] = \Yoast\WP\SEO\WordPress\Wrapper::get_admin_asset_manager(); + } + + /** + * Gets the public 'WPSEO_Breadcrumbs' shared autowired service. + * + * @return \WPSEO_Breadcrumbs + */ + protected function getWPSEOBreadcrumbsService() + { + return $this->services['WPSEO_Breadcrumbs'] = new \WPSEO_Breadcrumbs(); + } + + /** + * Gets the public 'WPSEO_Frontend' shared autowired service. + * + * @return \WPSEO_Frontend + */ + protected function getWPSEOFrontendService() + { + return $this->services['WPSEO_Frontend'] = new \WPSEO_Frontend(); + } + + /** + * Gets the public 'WPSEO_Replace_Vars' shared service. + * + * @return \WPSEO_Replace_Vars + */ + protected function getWPSEOReplaceVarsService() + { + return $this->services['WPSEO_Replace_Vars'] = \Yoast\WP\SEO\WordPress\Wrapper::get_replace_vars(); + } + + /** + * Gets the public 'WPSEO_Shortlinker' shared service. + * + * @return \WPSEO_Shortlinker + */ + protected function getWPSEOShortlinkerService() + { + return $this->services['WPSEO_Shortlinker'] = \Yoast\WP\SEO\WordPress\Wrapper::get_shortlinker(); + } + + /** + * Gets the public 'WPSEO_Utils' shared service. + * + * @return \WPSEO_Utils + */ + protected function getWPSEOUtilsService() + { + return $this->services['WPSEO_Utils'] = \Yoast\WP\SEO\WordPress\Wrapper::get_utils(); + } + + /** + * Gets the public 'Yoast\WP\Lib\Migrations\Adapter' shared autowired service. + * + * @return \Yoast\WP\Lib\Migrations\Adapter + */ + protected function getAdapterService() + { + return $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Addon_Installation\Addon_Activate_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Addon_Installation\Addon_Activate_Action + */ + protected function getAddonActivateActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Activate_Action'] = new \Yoast\WP\SEO\Actions\Addon_Installation\Addon_Activate_Action(${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Require_File_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Require_File_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Require_File_Helper'] = new \Yoast\WP\SEO\Helpers\Require_File_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Addon_Installation\Addon_Install_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Addon_Installation\Addon_Install_Action + */ + protected function getAddonInstallActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Install_Action'] = new \Yoast\WP\SEO\Actions\Addon_Installation\Addon_Install_Action(${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Require_File_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Require_File_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Require_File_Helper'] = new \Yoast\WP\SEO\Helpers\Require_File_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Alert_Dismissal_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Alert_Dismissal_Action + */ + protected function getAlertDismissalActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action'] = new \Yoast\WP\SEO\Actions\Alert_Dismissal_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Configuration\First_Time_Configuration_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Configuration\First_Time_Configuration_Action + */ + protected function getFirstTimeConfigurationActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Configuration\\First_Time_Configuration_Action'] = new \Yoast\WP\SEO\Actions\Configuration\First_Time_Configuration_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper'] : $this->getSocialProfilesHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Cleanup_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Cleanup_Action + */ + protected function getAioseoCleanupActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Cleanup_Action(${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Custom_Archive_Settings_Importing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Custom_Archive_Settings_Importing_Action + */ + protected function getAioseoCustomArchiveSettingsImportingActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Custom_Archive_Settings_Importing_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] : $this->getImportCursorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] : $this->getAioseoRobotsTransformerServiceService()) && false ?: '_'}); + + $instance->set_import_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] = new \Yoast\WP\SEO\Helpers\Import_Helper())) && false ?: '_'}); + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Default_Archive_Settings_Importing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Default_Archive_Settings_Importing_Action + */ + protected function getAioseoDefaultArchiveSettingsImportingActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Default_Archive_Settings_Importing_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] : $this->getImportCursorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] : $this->getAioseoRobotsTransformerServiceService()) && false ?: '_'}); + + $instance->set_import_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] = new \Yoast\WP\SEO\Helpers\Import_Helper())) && false ?: '_'}); + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_General_Settings_Importing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_General_Settings_Importing_Action + */ + protected function getAioseoGeneralSettingsImportingActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_General_Settings_Importing_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] : $this->getImportCursorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] : $this->getAioseoRobotsTransformerServiceService()) && false ?: '_'}); + + $instance->set_import_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] = new \Yoast\WP\SEO\Helpers\Import_Helper())) && false ?: '_'}); + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Posts_Importing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Posts_Importing_Action + */ + protected function getAioseoPostsImportingActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Posts_Importing_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] : $this->getImportCursorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_To_Postmeta_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_To_Postmeta_Helper'] : $this->getIndexableToPostmetaHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] : $this->getAioseoRobotsTransformerServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Social_Images_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Social_Images_Provider_Service'] : $this->getAioseoSocialImagesProviderServiceService()) && false ?: '_'}); + + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Posttype_Defaults_Settings_Importing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Posttype_Defaults_Settings_Importing_Action + */ + protected function getAioseoPosttypeDefaultsSettingsImportingActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Posttype_Defaults_Settings_Importing_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] : $this->getImportCursorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] : $this->getAioseoRobotsTransformerServiceService()) && false ?: '_'}); + + $instance->set_import_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] = new \Yoast\WP\SEO\Helpers\Import_Helper())) && false ?: '_'}); + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Taxonomy_Settings_Importing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Taxonomy_Settings_Importing_Action + */ + protected function getAioseoTaxonomySettingsImportingActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Taxonomy_Settings_Importing_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] : $this->getImportCursorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] : $this->getAioseoRobotsTransformerServiceService()) && false ?: '_'}); + + $instance->set_import_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] = new \Yoast\WP\SEO\Helpers\Import_Helper())) && false ?: '_'}); + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Validate_Data_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Validate_Data_Action + */ + protected function getAioseoValidateDataActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Aioseo\Aioseo_Validate_Data_Action(${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action'] : $this->getAioseoCustomArchiveSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action'] : $this->getAioseoDefaultArchiveSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action'] : $this->getAioseoGeneralSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action'] : $this->getAioseoPosttypeDefaultsSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action'] : $this->getAioseoTaxonomySettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action'] : $this->getAioseoPostsImportingActionService()) && false ?: '_'}); + + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Importing\Deactivate_Conflicting_Plugins_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Importing\Deactivate_Conflicting_Plugins_Action + */ + protected function getDeactivateConflictingPluginsActionService() + { + $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action'] = $instance = new \Yoast\WP\SEO\Actions\Importing\Deactivate_Conflicting_Plugins_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] : $this->getImportCursorHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] : $this->getAioseoRobotsTransformerServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service'] : ($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service'] = new \Yoast\WP\SEO\Services\Importing\Conflicting_Plugins_Service())) && false ?: '_'}); + + $instance->set_aioseo_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexables\Indexable_Head_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexables\Indexable_Head_Action + */ + protected function getIndexableHeadActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action'] = new \Yoast\WP\SEO\Actions\Indexables\Indexable_Head_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] : $this->getMetaSurfaceService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_General_Indexation_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_General_Indexation_Action + */ + protected function getIndexableGeneralIndexationActionService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action']; + } + + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] = new \Yoast\WP\SEO\Actions\Indexing\Indexable_General_Indexation_Action($a); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_Indexing_Complete_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_Indexing_Complete_Action + */ + protected function getIndexableIndexingCompleteActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action'] = new \Yoast\WP\SEO\Actions\Indexing\Indexable_Indexing_Complete_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Indexation_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Indexation_Action + */ + protected function getIndexablePostIndexationActionService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']; + } + + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] = new \Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Indexation_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, $a, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}, $b); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Type_Archive_Indexation_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Type_Archive_Indexation_Action + */ + protected function getIndexablePostTypeArchiveIndexationActionService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']; + } + + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] = new \Yoast\WP\SEO\Actions\Indexing\Indexable_Post_Type_Archive_Indexation_Action($a, $b, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexable_Term_Indexation_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexable_Term_Indexation_Action + */ + protected function getIndexableTermIndexationActionService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action']; + } + + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] = new \Yoast\WP\SEO\Actions\Indexing\Indexable_Term_Indexation_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}, $a, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexing_Complete_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexing_Complete_Action + */ + protected function getIndexingCompleteActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Complete_Action'] = new \Yoast\WP\SEO\Actions\Indexing\Indexing_Complete_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Indexing_Prepare_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Indexing_Prepare_Action + */ + protected function getIndexingPrepareActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action'] = new \Yoast\WP\SEO\Actions\Indexing\Indexing_Prepare_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Post_Link_Indexing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Post_Link_Indexing_Action + */ + protected function getPostLinkIndexingActionService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'] : $this->getIndexableLinkBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']; + } + $c = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']; + } + + $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Indexing\Post_Link_Indexing_Action($a, $b, $c, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}); + + $instance->set_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Indexing\Term_Link_Indexing_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Indexing\Term_Link_Indexing_Action + */ + protected function getTermLinkIndexingActionService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'] : $this->getIndexableLinkBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']; + } + $c = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'])) { + return $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']; + } + + $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'] = $instance = new \Yoast\WP\SEO\Actions\Indexing\Term_Link_Indexing_Action($a, $b, $c, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}); + + $instance->set_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Integrations_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Integrations_Action + */ + protected function getIntegrationsActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Integrations_Action'] = new \Yoast\WP\SEO\Actions\Integrations_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\SEMrush\SEMrush_Login_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\SEMrush\SEMrush_Login_Action + */ + protected function getSEMrushLoginActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Login_Action'] = new \Yoast\WP\SEO\Actions\SEMrush\SEMrush_Login_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\SEMrush_Client']) ? $this->services['Yoast\\WP\\SEO\\Config\\SEMrush_Client'] : $this->getSEMrushClientService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\SEMrush\SEMrush_Options_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\SEMrush\SEMrush_Options_Action + */ + protected function getSEMrushOptionsActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Options_Action'] = new \Yoast\WP\SEO\Actions\SEMrush\SEMrush_Options_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\SEMrush\SEMrush_Phrases_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\SEMrush\SEMrush_Phrases_Action + */ + protected function getSEMrushPhrasesActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Phrases_Action'] = new \Yoast\WP\SEO\Actions\SEMrush\SEMrush_Phrases_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\SEMrush_Client']) ? $this->services['Yoast\\WP\\SEO\\Config\\SEMrush_Client'] : $this->getSEMrushClientService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Wincher\Wincher_Account_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Wincher\Wincher_Account_Action + */ + protected function getWincherAccountActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action'] = new \Yoast\WP\SEO\Actions\Wincher\Wincher_Account_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client']) ? $this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client'] : $this->getWincherClientService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Wincher\Wincher_Keyphrases_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Wincher\Wincher_Keyphrases_Action + */ + protected function getWincherKeyphrasesActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action'] = new \Yoast\WP\SEO\Actions\Wincher\Wincher_Keyphrases_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client']) ? $this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client'] : $this->getWincherClientService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Actions\Wincher\Wincher_Login_Action' shared autowired service. + * + * @return \Yoast\WP\SEO\Actions\Wincher\Wincher_Login_Action + */ + protected function getWincherLoginActionService() + { + return $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Login_Action'] = new \Yoast\WP\SEO\Actions\Wincher\Wincher_Login_Action(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client']) ? $this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client'] : $this->getWincherClientService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Analytics\Application\Missing_Indexables_Collector' shared autowired service. + * + * @return \Yoast\WP\SEO\Analytics\Application\Missing_Indexables_Collector + */ + protected function getMissingIndexablesCollectorService() + { + return $this->services['Yoast\\WP\\SEO\\Analytics\\Application\\Missing_Indexables_Collector'] = new \Yoast\WP\SEO\Analytics\Application\Missing_Indexables_Collector(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] : $this->getIndexableGeneralIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] : $this->getIndexablePostIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] : $this->getIndexablePostTypeArchiveIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] : $this->getIndexableTermIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'] : $this->getPostLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'] : $this->getTermLinkIndexingActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Analytics\Application\To_Be_Cleaned_Indexables_Collector' shared autowired service. + * + * @return \Yoast\WP\SEO\Analytics\Application\To_Be_Cleaned_Indexables_Collector + */ + protected function getToBeCleanedIndexablesCollectorService() + { + return $this->services['Yoast\\WP\\SEO\\Analytics\\Application\\To_Be_Cleaned_Indexables_Collector'] = new \Yoast\WP\SEO\Analytics\Application\To_Be_Cleaned_Indexables_Collector(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository'] : $this->getIndexableCleanupRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Analytics\User_Interface\Last_Completed_Indexation_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Analytics\User_Interface\Last_Completed_Indexation_Integration + */ + protected function getLastCompletedIndexationIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Analytics\\User_Interface\\Last_Completed_Indexation_Integration'] = new \Yoast\WP\SEO\Analytics\User_Interface\Last_Completed_Indexation_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Author_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Author_Builder + */ + protected function getIndexableAuthorBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder']; + } + + $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder'] = $instance = new \Yoast\WP\SEO\Builders\Indexable_Author_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper'] : $this->getAuthorArchiveHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, $a); + + $instance->set_social_image_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'] : $this->getImageHelper2Service()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'] : $this->getImageHelper4Service()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Builder + */ + protected function getIndexableBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder'] : $this->getIndexableAuthorBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder'] : $this->getIndexablePostBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $c = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder'] : $this->getIndexableTermBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $d = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder'] : $this->getIndexableHomePageBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $e = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder'] : $this->getIndexablePostTypeArchiveBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $f = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'] : $this->getIndexableHierarchyBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $g = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder'] : $this->getPrimaryTermBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $h = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + $i = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'] : $this->getIndexableLinkBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']; + } + + $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] = $instance = new \Yoast\WP\SEO\Builders\Indexable_Builder($a, $b, $c, $d, $e, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Date_Archive_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Date_Archive_Builder'] : $this->getIndexableDateArchiveBuilderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_System_Page_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_System_Page_Builder'] : $this->getIndexableSystemPageBuilderService()) && false ?: '_'}, $f, $g, $h, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager']) ? $this->services['Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager'] : $this->getIndexableVersionManagerService()) && false ?: '_'}, $i); + + $instance->set_indexable_repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Date_Archive_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Date_Archive_Builder + */ + protected function getIndexableDateArchiveBuilderService() + { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Date_Archive_Builder'] = new \Yoast\WP\SEO\Builders\Indexable_Date_Archive_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Hierarchy_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Hierarchy_Builder + */ + protected function getIndexableHierarchyBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository'] : $this->getIndexableHierarchyRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder']; + } + $c = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder']; + } + + $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'] = $instance = new \Yoast\WP\SEO\Builders\Indexable_Hierarchy_Builder($a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] : ($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] = new \Yoast\WP\SEO\Repositories\Primary_Term_Repository())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, $b, $c); + + $instance->set_indexable_repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Home_Page_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Home_Page_Builder + */ + protected function getIndexableHomePageBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder']; + } + + $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder'] = $instance = new \Yoast\WP\SEO\Builders\Indexable_Home_Page_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}, $a); + + $instance->set_social_image_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'] : $this->getImageHelper2Service()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'] : $this->getImageHelper4Service()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Link_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Link_Builder + */ + protected function getIndexableLinkBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder']; + } + + $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'] = $instance = new \Yoast\WP\SEO\Builders\Indexable_Link_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'] : ($this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'] = new \Yoast\WP\SEO\Repositories\SEO_Links_Repository())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, $a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, $b); + + $instance->set_dependencies(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Post_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Post_Builder + */ + protected function getIndexablePostBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder']; + } + + $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder'] = $instance = new \Yoast\WP\SEO\Builders\Indexable_Post_Builder($a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] = new \Yoast\WP\SEO\Helpers\Meta_Helper())) && false ?: '_'}); + + $instance->set_indexable_repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + $instance->set_social_image_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'] : $this->getImageHelper2Service()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'] : $this->getImageHelper4Service()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Post_Type_Archive_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Post_Type_Archive_Builder + */ + protected function getIndexablePostTypeArchiveBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder']; + } + + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder'] = new \Yoast\WP\SEO\Builders\Indexable_Post_Type_Archive_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}, $a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_System_Page_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_System_Page_Builder + */ + protected function getIndexableSystemPageBuilderService() + { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_System_Page_Builder'] = new \Yoast\WP\SEO\Builders\Indexable_System_Page_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Indexable_Term_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Indexable_Term_Builder + */ + protected function getIndexableTermBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder']; + } + + $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder'] = $instance = new \Yoast\WP\SEO\Builders\Indexable_Term_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}, $a); + + $instance->set_social_image_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'] : $this->getImageHelper2Service()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'] : $this->getImageHelper4Service()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Builders\Primary_Term_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Builders\Primary_Term_Builder + */ + protected function getPrimaryTermBuilderService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder'])) { + return $this->services['Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder']; + } + + return $this->services['Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder'] = new \Yoast\WP\SEO\Builders\Primary_Term_Builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] : ($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] = new \Yoast\WP\SEO\Repositories\Primary_Term_Repository())) && false ?: '_'}, $a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper'] = new \Yoast\WP\SEO\Helpers\Primary_Term_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] = new \Yoast\WP\SEO\Helpers\Meta_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Commands\Cleanup_Command' shared autowired service. + * + * @return \Yoast\WP\SEO\Commands\Cleanup_Command + */ + protected function getCleanupCommandService() + { + return $this->services['Yoast\\WP\\SEO\\Commands\\Cleanup_Command'] = new \Yoast\WP\SEO\Commands\Cleanup_Command(${($_ = isset($this->services['Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration']) ? $this->services['Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration'] : $this->getCleanupIntegrationService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Commands\Index_Command' shared autowired service. + * + * @return \Yoast\WP\SEO\Commands\Index_Command + */ + protected function getIndexCommandService() + { + return $this->services['Yoast\\WP\\SEO\\Commands\\Index_Command'] = new \Yoast\WP\SEO\Commands\Index_Command(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] : $this->getIndexablePostIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] : $this->getIndexableTermIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] : $this->getIndexablePostTypeArchiveIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] : $this->getIndexableGeneralIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action'] : $this->getIndexableIndexingCompleteActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action'] : $this->getIndexingPrepareActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'] : $this->getPostLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'] : $this->getTermLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Addon_Installation_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Addon_Installation_Conditional + */ + protected function getAddonInstallationConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional'] = new \Yoast\WP\SEO\Conditionals\Addon_Installation_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Doing_Post_Quick_Edit_Save_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Doing_Post_Quick_Edit_Save_Conditional + */ + protected function getDoingPostQuickEditSaveConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Doing_Post_Quick_Edit_Save_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Doing_Post_Quick_Edit_Save_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Estimated_Reading_Time_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Estimated_Reading_Time_Conditional + */ + protected function getEstimatedReadingTimeConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Estimated_Reading_Time_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Estimated_Reading_Time_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Post_Conditional())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Licenses_Page_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Licenses_Page_Conditional + */ + protected function getLicensesPageConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Licenses_Page_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Licenses_Page_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Non_Network_Admin_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Non_Network_Admin_Conditional + */ + protected function getNonNetworkAdminConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Non_Network_Admin_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Non_Network_Admin_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Post_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Post_Conditional + */ + protected function getPostConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Post_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Posts_Overview_Or_Ajax_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Posts_Overview_Or_Ajax_Conditional + */ + protected function getPostsOverviewOrAjaxConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Posts_Overview_Or_Ajax_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin\Yoast_Admin_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin\Yoast_Admin_Conditional + */ + protected function getYoastAdminConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin\Yoast_Admin_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Admin_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Admin_Conditional + */ + protected function getAdminConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional'] = new \Yoast\WP\SEO\Conditionals\Admin_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Attachment_Redirections_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Attachment_Redirections_Enabled_Conditional + */ + protected function getAttachmentRedirectionsEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Attachment_Redirections_Enabled_Conditional'] = new \Yoast\WP\SEO\Conditionals\Attachment_Redirections_Enabled_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Deactivating_Yoast_Seo_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Deactivating_Yoast_Seo_Conditional + */ + protected function getDeactivatingYoastSeoConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Deactivating_Yoast_Seo_Conditional'] = new \Yoast\WP\SEO\Conditionals\Deactivating_Yoast_Seo_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Development_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Development_Conditional + */ + protected function getDevelopmentConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Development_Conditional'] = new \Yoast\WP\SEO\Conditionals\Development_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Front_End_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Front_End_Conditional + */ + protected function getFrontEndConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional'] = new \Yoast\WP\SEO\Conditionals\Front_End_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Get_Request_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Get_Request_Conditional + */ + protected function getGetRequestConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional'] = new \Yoast\WP\SEO\Conditionals\Get_Request_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Headless_Rest_Endpoints_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Headless_Rest_Endpoints_Enabled_Conditional + */ + protected function getHeadlessRestEndpointsEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Headless_Rest_Endpoints_Enabled_Conditional'] = new \Yoast\WP\SEO\Conditionals\Headless_Rest_Endpoints_Enabled_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Import_Tool_Selected_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Import_Tool_Selected_Conditional + */ + protected function getImportToolSelectedConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Import_Tool_Selected_Conditional'] = new \Yoast\WP\SEO\Conditionals\Import_Tool_Selected_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Jetpack_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Jetpack_Conditional + */ + protected function getJetpackConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Jetpack_Conditional'] = new \Yoast\WP\SEO\Conditionals\Jetpack_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Migrations_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Migrations_Conditional + */ + protected function getMigrationsConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional'] = new \Yoast\WP\SEO\Conditionals\Migrations_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status']) ? $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] : ($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] = new \Yoast\WP\SEO\Config\Migration_Status())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\New_Settings_Ui_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\New_Settings_Ui_Conditional + */ + protected function getNewSettingsUiConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional'] = new \Yoast\WP\SEO\Conditionals\New_Settings_Ui_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\News_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\News_Conditional + */ + protected function getNewsConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\News_Conditional'] = new \Yoast\WP\SEO\Conditionals\News_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\No_Tool_Selected_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\No_Tool_Selected_Conditional + */ + protected function getNoToolSelectedConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\No_Tool_Selected_Conditional'] = new \Yoast\WP\SEO\Conditionals\No_Tool_Selected_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Non_Multisite_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Non_Multisite_Conditional + */ + protected function getNonMultisiteConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Non_Multisite_Conditional'] = new \Yoast\WP\SEO\Conditionals\Non_Multisite_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Not_Admin_Ajax_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Not_Admin_Ajax_Conditional + */ + protected function getNotAdminAjaxConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Not_Admin_Ajax_Conditional'] = new \Yoast\WP\SEO\Conditionals\Not_Admin_Ajax_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Open_Graph_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Open_Graph_Conditional + */ + protected function getOpenGraphConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional'] = new \Yoast\WP\SEO\Conditionals\Open_Graph_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Premium_Active_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Premium_Active_Conditional + */ + protected function getPremiumActiveConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Premium_Active_Conditional'] = new \Yoast\WP\SEO\Conditionals\Premium_Active_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Premium_Inactive_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Premium_Inactive_Conditional + */ + protected function getPremiumInactiveConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Premium_Inactive_Conditional'] = new \Yoast\WP\SEO\Conditionals\Premium_Inactive_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Primary_Category_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Primary_Category_Conditional + */ + protected function getPrimaryCategoryConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Primary_Category_Conditional'] = new \Yoast\WP\SEO\Conditionals\Primary_Category_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Robots_Txt_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Robots_Txt_Conditional + */ + protected function getRobotsTxtConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional'] = new \Yoast\WP\SEO\Conditionals\Robots_Txt_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional'] = new \Yoast\WP\SEO\Conditionals\Front_End_Conditional())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\SEMrush_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\SEMrush_Enabled_Conditional + */ + protected function getSEMrushEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\SEMrush_Enabled_Conditional'] = new \Yoast\WP\SEO\Conditionals\SEMrush_Enabled_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Settings_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Settings_Conditional + */ + protected function getSettingsConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional'] = new \Yoast\WP\SEO\Conditionals\Settings_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional'] = new \Yoast\WP\SEO\Conditionals\User_Can_Manage_Wpseo_Options_Conditional())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Should_Index_Links_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Should_Index_Links_Conditional + */ + protected function getShouldIndexLinksConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Should_Index_Links_Conditional'] = new \Yoast\WP\SEO\Conditionals\Should_Index_Links_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Text_Formality_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Text_Formality_Conditional + */ + protected function getTextFormalityConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional'] = new \Yoast\WP\SEO\Conditionals\Text_Formality_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Activated_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Activated_Conditional + */ + protected function getElementorActivatedConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Activated_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Edit_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Edit_Conditional + */ + protected function getElementorEditConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Elementor_Edit_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Active_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Active_Conditional + */ + protected function getJetpackBoostActiveConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Active_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Active_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Not_Premium_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Not_Premium_Conditional + */ + protected function getJetpackBoostNotPremiumConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Not_Premium_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Jetpack_Boost_Not_Premium_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Polylang_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Polylang_Conditional + */ + protected function getPolylangConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Polylang_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\TranslatePress_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\TranslatePress_Conditional + */ + protected function getTranslatePressConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\TranslatePress_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\W3_Total_Cache_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\W3_Total_Cache_Conditional + */ + protected function getW3TotalCacheConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\W3_Total_Cache_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\W3_Total_Cache_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\WPML_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\WPML_Conditional + */ + protected function getWPMLConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\WPML_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\WPML_WPSEO_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\WPML_WPSEO_Conditional + */ + protected function getWPMLWPSEOConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\WPML_WPSEO_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Integration_Active_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Integration_Active_Conditional + * + * @deprecated Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Integration_Active_Conditional is deprecated since version 22.10! + */ + protected function getWordproofIntegrationActiveConditionalService() + { + @trigger_error('Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Integration_Active_Conditional is deprecated since version 22.10!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Integration_Active_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Integration_Active_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper'] : $this->getWordproofHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Plugin_Inactive_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Plugin_Inactive_Conditional + * + * @deprecated Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Plugin_Inactive_Conditional is deprecated since version 22.10! + */ + protected function getWordproofPluginInactiveConditionalService() + { + @trigger_error('Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Plugin_Inactive_Conditional is deprecated since version 22.10!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Plugin_Inactive_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Wordproof_Plugin_Inactive_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Updated_Importer_Framework_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Updated_Importer_Framework_Conditional + */ + protected function getUpdatedImporterFrameworkConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional'] = new \Yoast\WP\SEO\Conditionals\Updated_Importer_Framework_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\User_Can_Edit_Users_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\User_Can_Edit_Users_Conditional + */ + protected function getUserCanEditUsersConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\User_Can_Edit_Users_Conditional'] = new \Yoast\WP\SEO\Conditionals\User_Can_Edit_Users_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\User_Can_Manage_Wpseo_Options_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\User_Can_Manage_Wpseo_Options_Conditional + */ + protected function getUserCanManageWpseoOptionsConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional'] = new \Yoast\WP\SEO\Conditionals\User_Can_Manage_Wpseo_Options_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\User_Can_Publish_Posts_And_Pages_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\User_Can_Publish_Posts_And_Pages_Conditional + */ + protected function getUserCanPublishPostsAndPagesConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\User_Can_Publish_Posts_And_Pages_Conditional'] = new \Yoast\WP\SEO\Conditionals\User_Can_Publish_Posts_And_Pages_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\User_Edit_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\User_Edit_Conditional + */ + protected function getUserEditConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\User_Edit_Conditional'] = new \Yoast\WP\SEO\Conditionals\User_Edit_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\User_Profile_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\User_Profile_Conditional + */ + protected function getUserProfileConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional'] = new \Yoast\WP\SEO\Conditionals\User_Profile_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\WP_CRON_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\WP_CRON_Enabled_Conditional + */ + protected function getWPCRONEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional'] = new \Yoast\WP\SEO\Conditionals\WP_CRON_Enabled_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\WP_Robots_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\WP_Robots_Conditional + */ + protected function getWPRobotsConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\WP_Robots_Conditional'] = new \Yoast\WP\SEO\Conditionals\WP_Robots_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Web_Stories_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Web_Stories_Conditional + */ + protected function getWebStoriesConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Web_Stories_Conditional'] = new \Yoast\WP\SEO\Conditionals\Web_Stories_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Wincher_Automatically_Track_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Wincher_Automatically_Track_Conditional + */ + protected function getWincherAutomaticallyTrackConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Wincher_Automatically_Track_Conditional'] = new \Yoast\WP\SEO\Conditionals\Wincher_Automatically_Track_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Wincher_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Wincher_Conditional + */ + protected function getWincherConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Wincher_Conditional'] = new \Yoast\WP\SEO\Conditionals\Wincher_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Wincher_Enabled_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Wincher_Enabled_Conditional + */ + protected function getWincherEnabledConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional'] = new \Yoast\WP\SEO\Conditionals\Wincher_Enabled_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Wincher_Token_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Wincher_Token_Conditional + */ + protected function getWincherTokenConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Wincher_Token_Conditional'] = new \Yoast\WP\SEO\Conditionals\Wincher_Token_Conditional(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client']) ? $this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client'] : $this->getWincherClientService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\WooCommerce_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\WooCommerce_Conditional + */ + protected function getWooCommerceConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional'] = new \Yoast\WP\SEO\Conditionals\WooCommerce_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\XMLRPC_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\XMLRPC_Conditional + */ + protected function getXMLRPCConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\XMLRPC_Conditional'] = new \Yoast\WP\SEO\Conditionals\XMLRPC_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Yoast_Admin_And_Dashboard_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Yoast_Admin_And_Dashboard_Conditional + */ + protected function getYoastAdminAndDashboardConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional'] = new \Yoast\WP\SEO\Conditionals\Yoast_Admin_And_Dashboard_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Conditionals\Yoast_Tools_Page_Conditional' shared autowired service. + * + * @return \Yoast\WP\SEO\Conditionals\Yoast_Tools_Page_Conditional + */ + protected function getYoastToolsPageConditionalService() + { + return $this->services['Yoast\\WP\\SEO\\Conditionals\\Yoast_Tools_Page_Conditional'] = new \Yoast\WP\SEO\Conditionals\Yoast_Tools_Page_Conditional(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Badge_Group_Names' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Badge_Group_Names + */ + protected function getBadgeGroupNamesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Badge_Group_Names'] = new \Yoast\WP\SEO\Config\Badge_Group_Names(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Conflicting_Plugins' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Conflicting_Plugins + */ + protected function getConflictingPluginsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Conflicting_Plugins'] = new \Yoast\WP\SEO\Config\Conflicting_Plugins(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Indexing_Reasons' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Indexing_Reasons + */ + protected function getIndexingReasonsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Indexing_Reasons'] = new \Yoast\WP\SEO\Config\Indexing_Reasons(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migration_Status' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migration_Status + */ + protected function getMigrationStatusService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] = new \Yoast\WP\SEO\Config\Migration_Status(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddCollationToTables' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddCollationToTables + */ + protected function getAddCollationToTablesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddCollationToTables'] = new \Yoast\WP\SEO\Config\Migrations\AddCollationToTables(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddColumnsToIndexables' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddColumnsToIndexables + */ + protected function getAddColumnsToIndexablesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddColumnsToIndexables'] = new \Yoast\WP\SEO\Config\Migrations\AddColumnsToIndexables(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddEstimatedReadingTime' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddEstimatedReadingTime + */ + protected function getAddEstimatedReadingTimeService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddEstimatedReadingTime'] = new \Yoast\WP\SEO\Config\Migrations\AddEstimatedReadingTime(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddHasAncestorsColumn' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddHasAncestorsColumn + */ + protected function getAddHasAncestorsColumnService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddHasAncestorsColumn'] = new \Yoast\WP\SEO\Config\Migrations\AddHasAncestorsColumn(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddInclusiveLanguageScore' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddInclusiveLanguageScore + */ + protected function getAddInclusiveLanguageScoreService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddInclusiveLanguageScore'] = new \Yoast\WP\SEO\Config\Migrations\AddInclusiveLanguageScore(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddIndexableObjectIdAndTypeIndex' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddIndexableObjectIdAndTypeIndex + */ + protected function getAddIndexableObjectIdAndTypeIndexService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexableObjectIdAndTypeIndex'] = new \Yoast\WP\SEO\Config\Migrations\AddIndexableObjectIdAndTypeIndex(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddIndexesForProminentWordsOnIndexables' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddIndexesForProminentWordsOnIndexables + */ + protected function getAddIndexesForProminentWordsOnIndexablesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexesForProminentWordsOnIndexables'] = new \Yoast\WP\SEO\Config\Migrations\AddIndexesForProminentWordsOnIndexables(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddObjectTimestamps' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddObjectTimestamps + */ + protected function getAddObjectTimestampsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddObjectTimestamps'] = new \Yoast\WP\SEO\Config\Migrations\AddObjectTimestamps(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\AddVersionColumnToIndexables' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\AddVersionColumnToIndexables + */ + protected function getAddVersionColumnToIndexablesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\AddVersionColumnToIndexables'] = new \Yoast\WP\SEO\Config\Migrations\AddVersionColumnToIndexables(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\BreadcrumbTitleAndHierarchyReset' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\BreadcrumbTitleAndHierarchyReset + */ + protected function getBreadcrumbTitleAndHierarchyResetService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\BreadcrumbTitleAndHierarchyReset'] = new \Yoast\WP\SEO\Config\Migrations\BreadcrumbTitleAndHierarchyReset(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\ClearIndexableTables' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\ClearIndexableTables + */ + protected function getClearIndexableTablesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\ClearIndexableTables'] = new \Yoast\WP\SEO\Config\Migrations\ClearIndexableTables(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\CreateIndexableSubpagesIndex' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\CreateIndexableSubpagesIndex + */ + protected function getCreateIndexableSubpagesIndexService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\CreateIndexableSubpagesIndex'] = new \Yoast\WP\SEO\Config\Migrations\CreateIndexableSubpagesIndex(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\CreateSEOLinksTable' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\CreateSEOLinksTable + */ + protected function getCreateSEOLinksTableService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\CreateSEOLinksTable'] = new \Yoast\WP\SEO\Config\Migrations\CreateSEOLinksTable(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\DeleteDuplicateIndexables' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\DeleteDuplicateIndexables + */ + protected function getDeleteDuplicateIndexablesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\DeleteDuplicateIndexables'] = new \Yoast\WP\SEO\Config\Migrations\DeleteDuplicateIndexables(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\ExpandIndexableColumnLengths' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\ExpandIndexableColumnLengths + */ + protected function getExpandIndexableColumnLengthsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableColumnLengths'] = new \Yoast\WP\SEO\Config\Migrations\ExpandIndexableColumnLengths(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\ExpandIndexableIDColumnLengths' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\ExpandIndexableIDColumnLengths + */ + protected function getExpandIndexableIDColumnLengthsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableIDColumnLengths'] = new \Yoast\WP\SEO\Config\Migrations\ExpandIndexableIDColumnLengths(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\ExpandPrimaryTermIDColumnLengths' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\ExpandPrimaryTermIDColumnLengths + */ + protected function getExpandPrimaryTermIDColumnLengthsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\ExpandPrimaryTermIDColumnLengths'] = new \Yoast\WP\SEO\Config\Migrations\ExpandPrimaryTermIDColumnLengths(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\ReplacePermalinkHashIndex' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\ReplacePermalinkHashIndex + */ + protected function getReplacePermalinkHashIndexService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\ReplacePermalinkHashIndex'] = new \Yoast\WP\SEO\Config\Migrations\ReplacePermalinkHashIndex(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\ResetIndexableHierarchyTable' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\ResetIndexableHierarchyTable + */ + protected function getResetIndexableHierarchyTableService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\ResetIndexableHierarchyTable'] = new \Yoast\WP\SEO\Config\Migrations\ResetIndexableHierarchyTable(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\TruncateIndexableTables' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\TruncateIndexableTables + */ + protected function getTruncateIndexableTablesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\TruncateIndexableTables'] = new \Yoast\WP\SEO\Config\Migrations\TruncateIndexableTables(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\WpYoastDropIndexableMetaTableIfExists' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\WpYoastDropIndexableMetaTableIfExists + */ + protected function getWpYoastDropIndexableMetaTableIfExistsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastDropIndexableMetaTableIfExists'] = new \Yoast\WP\SEO\Config\Migrations\WpYoastDropIndexableMetaTableIfExists(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\WpYoastIndexable' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\WpYoastIndexable + */ + protected function getWpYoastIndexableService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexable'] = new \Yoast\WP\SEO\Config\Migrations\WpYoastIndexable(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\WpYoastIndexableHierarchy' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\WpYoastIndexableHierarchy + */ + protected function getWpYoastIndexableHierarchyService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexableHierarchy'] = new \Yoast\WP\SEO\Config\Migrations\WpYoastIndexableHierarchy(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Migrations\WpYoastPrimaryTerm' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Migrations\WpYoastPrimaryTerm + */ + protected function getWpYoastPrimaryTermService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPrimaryTerm'] = new \Yoast\WP\SEO\Config\Migrations\WpYoastPrimaryTerm(${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Researcher_Languages' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Researcher_Languages + */ + protected function getResearcherLanguagesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Researcher_Languages'] = new \Yoast\WP\SEO\Config\Researcher_Languages(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\SEMrush_Client' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\SEMrush_Client + */ + protected function getSEMrushClientService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\SEMrush_Client'] = new \Yoast\WP\SEO\Config\SEMrush_Client(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler'] = new \Yoast\WP\SEO\Wrappers\WP_Remote_Handler())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Schema_IDs' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Schema_IDs + */ + protected function getSchemaIDsService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Schema_IDs'] = new \Yoast\WP\SEO\Config\Schema_IDs(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Schema_Types' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Schema_Types + */ + protected function getSchemaTypesService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Schema_Types'] = new \Yoast\WP\SEO\Config\Schema_Types(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Wincher_Client' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Wincher_Client + */ + protected function getWincherClientService() + { + return $this->services['Yoast\\WP\\SEO\\Config\\Wincher_Client'] = new \Yoast\WP\SEO\Config\Wincher_Client(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler'] = new \Yoast\WP\SEO\Wrappers\WP_Remote_Handler())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Wordproof_App_Config' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Wordproof_App_Config + * + * @deprecated Yoast\WP\SEO\Config\Wordproof_App_Config is deprecated since version 22.10! + */ + protected function getWordproofAppConfigService() + { + @trigger_error('Yoast\\WP\\SEO\\Config\\Wordproof_App_Config is deprecated since version 22.10!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Config\\Wordproof_App_Config'] = new \Yoast\WP\SEO\Config\Wordproof_App_Config(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Config\Wordproof_Translations' shared autowired service. + * + * @return \Yoast\WP\SEO\Config\Wordproof_Translations + * + * @deprecated Yoast\WP\SEO\Config\Wordproof_Translations is deprecated since version 22.10! + */ + protected function getWordproofTranslationsService() + { + @trigger_error('Yoast\\WP\\SEO\\Config\\Wordproof_Translations is deprecated since version 22.10!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Config\\Wordproof_Translations'] = new \Yoast\WP\SEO\Config\Wordproof_Translations(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Content_Type_Visibility\Application\Content_Type_Visibility_Watcher_Actions' shared autowired service. + * + * @return \Yoast\WP\SEO\Content_Type_Visibility\Application\Content_Type_Visibility_Watcher_Actions + */ + protected function getContentTypeVisibilityWatcherActionsService() + { + return $this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Watcher_Actions'] = new \Yoast\WP\SEO\Content_Type_Visibility\Application\Content_Type_Visibility_Watcher_Actions(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications']) ? $this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications'] : $this->getContentTypeVisibilityDismissNotificationsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Content_Type_Visibility\User_Interface\Content_Type_Visibility_Dismiss_New_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Content_Type_Visibility\User_Interface\Content_Type_Visibility_Dismiss_New_Route + */ + protected function getContentTypeVisibilityDismissNewRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\User_Interface\\Content_Type_Visibility_Dismiss_New_Route'] = new \Yoast\WP\SEO\Content_Type_Visibility\User_Interface\Content_Type_Visibility_Dismiss_New_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications']) ? $this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications'] : $this->getContentTypeVisibilityDismissNotificationsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Context\Meta_Tags_Context' shared autowired service. + * + * @return \Yoast\WP\SEO\Context\Meta_Tags_Context + */ + protected function getMetaTagsContextService() + { + return $this->services['Yoast\\WP\\SEO\\Context\\Meta_Tags_Context'] = new \Yoast\WP\SEO\Context\Meta_Tags_Context(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\ID_Helper())) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Replace_Vars']) ? $this->services['WPSEO_Replace_Vars'] : $this->getWPSEOReplaceVarsService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper'] = new \Yoast\WP\SEO\Helpers\Site_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] = new \Yoast\WP\SEO\Helpers\Request_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Editors\Application\Analysis_Features\Enabled_Analysis_Features_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Editors\Application\Analysis_Features\Enabled_Analysis_Features_Repository + */ + protected function getEnabledAnalysisFeaturesRepositoryService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}; + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper'] = new \Yoast\WP\SEO\Helpers\Language_Helper())) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\Editors\\Application\\Analysis_Features\\Enabled_Analysis_Features_Repository'] = new \Yoast\WP\SEO\Editors\Application\Analysis_Features\Enabled_Analysis_Features_Repository(new \Yoast\WP\SEO\Editors\Framework\Cornerstone_Content($a), new \Yoast\WP\SEO\Editors\Framework\Inclusive_Language_Analysis($a, $b, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}), new \Yoast\WP\SEO\Editors\Framework\Keyphrase_Analysis($a), new \Yoast\WP\SEO\Editors\Framework\Previously_Used_Keyphrase(), new \Yoast\WP\SEO\Editors\Framework\Readability_Analysis($a), new \Yoast\WP\SEO\Editors\Framework\Word_Form_Recognition($b)); + } + + /** + * Gets the public 'Yoast\WP\SEO\Editors\Application\Integrations\Integration_Information_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Editors\Application\Integrations\Integration_Information_Repository + */ + protected function getIntegrationInformationRepositoryService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\Editors\\Application\\Integrations\\Integration_Information_Repository'] = new \Yoast\WP\SEO\Editors\Application\Integrations\Integration_Information_Repository(new \Yoast\WP\SEO\Editors\Framework\Integrations\Jetpack_Markdown(), new \Yoast\WP\SEO\Editors\Framework\Integrations\Multilingual(${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\WPML_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\Polylang_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\TranslatePress_Conditional())) && false ?: '_'}), new \Yoast\WP\SEO\Editors\Framework\Integrations\Semrush($a), new \Yoast\WP\SEO\Editors\Framework\Integrations\Wincher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Wincher_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Wincher_Helper'] : $this->getWincherHelperService()) && false ?: '_'}, $a)); + } + + /** + * Gets the public 'Yoast\WP\SEO\Editors\Application\Seo\Post_Seo_Information_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Editors\Application\Seo\Post_Seo_Information_Repository + */ + protected function getPostSeoInformationRepositoryService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Post_Seo_Information_Repository'] = new \Yoast\WP\SEO\Editors\Application\Seo\Post_Seo_Information_Repository(new \Yoast\WP\SEO\Editors\Framework\Seo\Posts\Description_Data_Provider(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper())) && false ?: '_'}, $a), new \Yoast\WP\SEO\Editors\Framework\Seo\Posts\Keyphrase_Data_Provider(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] = new \Yoast\WP\SEO\Helpers\Meta_Helper())) && false ?: '_'}), new \Yoast\WP\SEO\Editors\Framework\Seo\Posts\Social_Data_Provider($a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}), new \Yoast\WP\SEO\Editors\Framework\Seo\Posts\Title_Data_Provider($a)); + } + + /** + * Gets the public 'Yoast\WP\SEO\Editors\Application\Seo\Term_Seo_Information_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Editors\Application\Seo\Term_Seo_Information_Repository + */ + protected function getTermSeoInformationRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Term_Seo_Information_Repository'] = new \Yoast\WP\SEO\Editors\Application\Seo\Term_Seo_Information_Repository(new \Yoast\WP\SEO\Editors\Framework\Seo\Terms\Description_Data_Provider(), new \Yoast\WP\SEO\Editors\Framework\Seo\Terms\Keyphrase_Data_Provider(), new \Yoast\WP\SEO\Editors\Framework\Seo\Terms\Social_Data_Provider(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}), new \Yoast\WP\SEO\Editors\Framework\Seo\Terms\Title_Data_Provider()); + } + + /** + * Gets the public 'Yoast\WP\SEO\Editors\Application\Site\Website_Information_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Editors\Application\Site\Website_Information_Repository + */ + protected function getWebsiteInformationRepositoryService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}; + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository']) ? $this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository'] : $this->getWistiaEmbedPermissionRepositoryService()) && false ?: '_'}; + $c = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] : $this->getMetaSurfaceService()) && false ?: '_'}; + $d = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\Editors\\Application\\Site\\Website_Information_Repository'] = new \Yoast\WP\SEO\Editors\Application\Site\Website_Information_Repository(new \Yoast\WP\SEO\Editors\Framework\Site\Post_Site_Information(${($_ = isset($this->services['Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager']) ? $this->services['Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager'] : $this->getPromotionManagerService()) && false ?: '_'}, $a, $b, $c, $d, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action'] : $this->getAlertDismissalActionService()) && false ?: '_'}), new \Yoast\WP\SEO\Editors\Framework\Site\Term_Site_Information(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, $a, $b, $c, $d)); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Breadcrumbs_Generator' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Breadcrumbs_Generator + */ + protected function getBreadcrumbsGeneratorService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] = new \Yoast\WP\SEO\Generators\Breadcrumbs_Generator(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Open_Graph_Image_Generator' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Open_Graph_Image_Generator + */ + protected function getOpenGraphImageGeneratorService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Image_Generator(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'] : $this->getImageHelper2Service()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator + */ + protected function getOpenGraphLocaleGeneratorService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\Article' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\Article + */ + protected function getArticleService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\Article'] = new \Yoast\WP\SEO\Generators\Schema\Article(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\Author' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\Author + */ + protected function getAuthorService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\Author'] = new \Yoast\WP\SEO\Generators\Schema\Author(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\Breadcrumb' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\Breadcrumb + */ + protected function getBreadcrumbService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\Breadcrumb'] = new \Yoast\WP\SEO\Generators\Schema\Breadcrumb(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\FAQ' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\FAQ + */ + protected function getFAQService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\FAQ'] = new \Yoast\WP\SEO\Generators\Schema\FAQ(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\HowTo' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\HowTo + */ + protected function getHowToService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\HowTo'] = new \Yoast\WP\SEO\Generators\Schema\HowTo(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\Main_Image' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\Main_Image + */ + protected function getMainImageService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\Main_Image'] = new \Yoast\WP\SEO\Generators\Schema\Main_Image(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\Organization' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\Organization + */ + protected function getOrganizationService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\Organization'] = new \Yoast\WP\SEO\Generators\Schema\Organization(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\Person' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\Person + */ + protected function getPersonService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\Person'] = new \Yoast\WP\SEO\Generators\Schema\Person(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\WebPage' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\WebPage + */ + protected function getWebPageService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\WebPage'] = new \Yoast\WP\SEO\Generators\Schema\WebPage(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema\Website' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema\Website + */ + protected function getWebsiteService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema\\Website'] = new \Yoast\WP\SEO\Generators\Schema\Website(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Schema_Generator' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Schema_Generator + */ + protected function getSchemaGeneratorService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] = new \Yoast\WP\SEO\Generators\Schema_Generator(${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface'] : $this->getHelpersSurfaceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Replace_Vars_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Replace_Vars_Helper'] : $this->getReplaceVarsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Generators\Twitter_Image_Generator' shared autowired service. + * + * @return \Yoast\WP\SEO\Generators\Twitter_Image_Generator + */ + protected function getTwitterImageGeneratorService() + { + return $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] = new \Yoast\WP\SEO\Generators\Twitter_Image_Generator(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'] : $this->getImageHelper4Service()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Aioseo_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Aioseo_Helper + */ + protected function getAioseoHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] = new \Yoast\WP\SEO\Helpers\Aioseo_Helper(${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Wpdb_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Wpdb_Helper'] : $this->getWpdbHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Asset_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Asset_Helper + */ + protected function getAssetHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Asset_Helper'] = new \Yoast\WP\SEO\Helpers\Asset_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Attachment_Cleanup_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Attachment_Cleanup_Helper + */ + protected function getAttachmentCleanupHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper'] = new \Yoast\WP\SEO\Helpers\Attachment_Cleanup_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Author_Archive_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Author_Archive_Helper + */ + protected function getAuthorArchiveHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper'] = new \Yoast\WP\SEO\Helpers\Author_Archive_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Blocks_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Blocks_Helper + */ + protected function getBlocksHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Blocks_Helper'] = new \Yoast\WP\SEO\Helpers\Blocks_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Capability_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Capability_Helper + */ + protected function getCapabilityHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] = new \Yoast\WP\SEO\Helpers\Capability_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Crawl_Cleanup_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Crawl_Cleanup_Helper + */ + protected function getCrawlCleanupHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Crawl_Cleanup_Helper'] = new \Yoast\WP\SEO\Helpers\Crawl_Cleanup_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Curl_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Curl_Helper + */ + protected function getCurlHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Curl_Helper'] = new \Yoast\WP\SEO\Helpers\Curl_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Current_Page_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Current_Page_Helper + */ + protected function getCurrentPageHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] = new \Yoast\WP\SEO\Helpers\Current_Page_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Query_Wrapper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Date_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Date_Helper + */ + protected function getDateHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Environment_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Environment_Helper + */ + protected function getEnvironmentHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Environment_Helper'] = new \Yoast\WP\SEO\Helpers\Environment_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\First_Time_Configuration_Notice_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\First_Time_Configuration_Notice_Helper + */ + protected function getFirstTimeConfigurationNoticeHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\First_Time_Configuration_Notice_Helper'] = new \Yoast\WP\SEO\Helpers\First_Time_Configuration_Notice_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Home_Url_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Home_Url_Helper + */ + protected function getHomeUrlHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Home_Url_Helper'] = new \Yoast\WP\SEO\Helpers\Home_Url_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Image_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Image_Helper + */ + protected function getImageHelperService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'])) { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']; + } + + return $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] = new \Yoast\WP\SEO\Helpers\Image_Helper($a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'] : ($this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'] = new \Yoast\WP\SEO\Repositories\SEO_Links_Repository())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Import_Cursor_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Import_Cursor_Helper + */ + protected function getImportCursorHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper'] = new \Yoast\WP\SEO\Helpers\Import_Cursor_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Import_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Import_Helper + */ + protected function getImportHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Import_Helper'] = new \Yoast\WP\SEO\Helpers\Import_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Indexable_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Indexable_Helper + */ + protected function getIndexableHelperService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'])) { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']; + } + + $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] = $instance = new \Yoast\WP\SEO\Helpers\Indexable_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Environment_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Environment_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Environment_Helper'] = new \Yoast\WP\SEO\Helpers\Environment_Helper())) && false ?: '_'}, $a); + + $instance->set_indexable_repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Indexable_To_Postmeta_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Indexable_To_Postmeta_Helper + */ + protected function getIndexableToPostmetaHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_To_Postmeta_Helper'] = new \Yoast\WP\SEO\Helpers\Indexable_To_Postmeta_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] = new \Yoast\WP\SEO\Helpers\Meta_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Indexing_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Indexing_Helper + */ + protected function getIndexingHelperService() + { + $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] = $instance = new \Yoast\WP\SEO\Helpers\Indexing_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}); + + $instance->set_indexing_actions(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] : $this->getIndexablePostIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] : $this->getIndexableTermIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] : $this->getIndexablePostTypeArchiveIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] : $this->getIndexableGeneralIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'] : $this->getPostLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'] : $this->getTermLinkIndexingActionService()) && false ?: '_'}); + $instance->set_indexable_repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Language_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Language_Helper + */ + protected function getLanguageHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper'] = new \Yoast\WP\SEO\Helpers\Language_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Meta_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Meta_Helper + */ + protected function getMetaHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] = new \Yoast\WP\SEO\Helpers\Meta_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Notification_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Notification_Helper + */ + protected function getNotificationHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper'] = new \Yoast\WP\SEO\Helpers\Notification_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Open_Graph\Image_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Open_Graph\Image_Helper + */ + protected function getImageHelper2Service() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'])) { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper']; + } + + return $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Image_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, $a); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper + */ + protected function getValuesHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Options_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Options_Helper + */ + protected function getOptionsHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Pagination_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Pagination_Helper + */ + protected function getPaginationHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] = new \Yoast\WP\SEO\Helpers\Pagination_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Rewrite_Wrapper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Query_Wrapper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Permalink_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Permalink_Helper + */ + protected function getPermalinkHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Post_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Post_Helper + */ + protected function getPostHelperService() + { + $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] = $instance = new \Yoast\WP\SEO\Helpers\Post_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\String_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\String_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\String_Helper'] = new \Yoast\WP\SEO\Helpers\String_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + + $instance->set_indexable_repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Post_Type_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Post_Type_Helper + */ + protected function getPostTypeHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] = new \Yoast\WP\SEO\Helpers\Post_Type_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Primary_Term_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Primary_Term_Helper + */ + protected function getPrimaryTermHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper'] = new \Yoast\WP\SEO\Helpers\Primary_Term_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Product_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Product_Helper + */ + protected function getProductHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Redirect_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Redirect_Helper + */ + protected function getRedirectHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Request_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Request_Helper + */ + protected function getRequestHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] = new \Yoast\WP\SEO\Helpers\Request_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Require_File_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Require_File_Helper + */ + protected function getRequireFileHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Require_File_Helper'] = new \Yoast\WP\SEO\Helpers\Require_File_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Robots_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Robots_Helper + */ + protected function getRobotsHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper'] = new \Yoast\WP\SEO\Helpers\Robots_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Robots_Txt_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Robots_Txt_Helper + */ + protected function getRobotsTxtHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper'] = new \Yoast\WP\SEO\Helpers\Robots_Txt_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Sanitization_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Sanitization_Helper + */ + protected function getSanitizationHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper'] = new \Yoast\WP\SEO\Helpers\Sanitization_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Schema\Article_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Schema\Article_Helper + */ + protected function getArticleHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\Article_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Schema\HTML_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Schema\HTML_Helper + */ + protected function getHTMLHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\HTML_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Schema\ID_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Schema\ID_Helper + */ + protected function getIDHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\ID_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Schema\Image_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Schema\Image_Helper + */ + protected function getImageHelper3Service() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Image_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\Image_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\HTML_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\Language_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Schema\Language_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Schema\Language_Helper + */ + protected function getLanguageHelper2Service() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\Language_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Schema\Replace_Vars_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Schema\Replace_Vars_Helper + */ + protected function getReplaceVarsHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Replace_Vars_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\Replace_Vars_Helper(${($_ = isset($this->services['WPSEO_Replace_Vars']) ? $this->services['WPSEO_Replace_Vars'] : $this->getWPSEOReplaceVarsService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\ID_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Score_Icon_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Score_Icon_Helper + */ + protected function getScoreIconHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper'] = new \Yoast\WP\SEO\Helpers\Score_Icon_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper'] : $this->getRobotsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Short_Link_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Short_Link_Helper + */ + protected function getShortLinkHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] = new \Yoast\WP\SEO\Helpers\Short_Link_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Site_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Site_Helper + */ + protected function getSiteHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper'] = new \Yoast\WP\SEO\Helpers\Site_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Social_Profiles_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Social_Profiles_Helper + */ + protected function getSocialProfilesHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper'] = new \Yoast\WP\SEO\Helpers\Social_Profiles_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\String_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\String_Helper + */ + protected function getStringHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\String_Helper'] = new \Yoast\WP\SEO\Helpers\String_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Taxonomy_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Taxonomy_Helper + */ + protected function getTaxonomyHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] = new \Yoast\WP\SEO\Helpers\Taxonomy_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\String_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\String_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\String_Helper'] = new \Yoast\WP\SEO\Helpers\String_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Twitter\Image_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Twitter\Image_Helper + */ + protected function getImageHelper4Service() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'])) { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper']; + } + + return $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'] = new \Yoast\WP\SEO\Helpers\Twitter\Image_Helper($a); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Url_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Url_Helper + */ + protected function getUrlHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\User_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\User_Helper + */ + protected function getUserHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Wincher_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Wincher_Helper + */ + protected function getWincherHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Wincher_Helper'] = new \Yoast\WP\SEO\Helpers\Wincher_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Woocommerce_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Woocommerce_Helper + */ + protected function getWoocommerceHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] = new \Yoast\WP\SEO\Helpers\Woocommerce_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Wordpress_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Wordpress_Helper + */ + protected function getWordpressHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Wordpress_Helper'] = new \Yoast\WP\SEO\Helpers\Wordpress_Helper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Wordproof_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Wordproof_Helper + * + * @deprecated Yoast\WP\SEO\Helpers\Wordproof_Helper is deprecated since version 22.10! + */ + protected function getWordproofHelperService() + { + @trigger_error('Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper is deprecated since version 22.10!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper'] = new \Yoast\WP\SEO\Helpers\Wordproof_Helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] = new \Yoast\WP\SEO\Helpers\Woocommerce_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Helpers\Wpdb_Helper' shared autowired service. + * + * @return \Yoast\WP\SEO\Helpers\Wpdb_Helper + */ + protected function getWpdbHelperService() + { + return $this->services['Yoast\\WP\\SEO\\Helpers\\Wpdb_Helper'] = new \Yoast\WP\SEO\Helpers\Wpdb_Helper(${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Initializers\Crawl_Cleanup_Permalinks' shared autowired service. + * + * @return \Yoast\WP\SEO\Initializers\Crawl_Cleanup_Permalinks + */ + protected function getCrawlCleanupPermalinksService() + { + return $this->services['Yoast\\WP\\SEO\\Initializers\\Crawl_Cleanup_Permalinks'] = new \Yoast\WP\SEO\Initializers\Crawl_Cleanup_Permalinks(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Crawl_Cleanup_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Crawl_Cleanup_Helper'] : $this->getCrawlCleanupHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Initializers\Disable_Core_Sitemaps' shared autowired service. + * + * @return \Yoast\WP\SEO\Initializers\Disable_Core_Sitemaps + */ + protected function getDisableCoreSitemapsService() + { + return $this->services['Yoast\\WP\\SEO\\Initializers\\Disable_Core_Sitemaps'] = new \Yoast\WP\SEO\Initializers\Disable_Core_Sitemaps(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Initializers\Migration_Runner' shared autowired service. + * + * @return \Yoast\WP\SEO\Initializers\Migration_Runner + */ + protected function getMigrationRunnerService() + { + return $this->services['Yoast\\WP\\SEO\\Initializers\\Migration_Runner'] = new \Yoast\WP\SEO\Initializers\Migration_Runner(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status']) ? $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] : ($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] = new \Yoast\WP\SEO\Config\Migration_Status())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Loader']) ? $this->services['Yoast\\WP\\SEO\\Loader'] : $this->getLoaderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter']) ? $this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] : ($this->services['Yoast\\WP\\Lib\\Migrations\\Adapter'] = new \Yoast\WP\Lib\Migrations\Adapter())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Initializers\Woocommerce' shared autowired service. + * + * @return \Yoast\WP\SEO\Initializers\Woocommerce + */ + protected function getWoocommerceService() + { + return $this->services['Yoast\\WP\\SEO\\Initializers\\Woocommerce'] = new \Yoast\WP\SEO\Initializers\Woocommerce(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Academy_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Academy_Integration + */ + protected function getAcademyIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Academy_Integration'] = new \Yoast\WP\SEO\Integrations\Academy_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Activation_Cleanup_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Activation_Cleanup_Integration + */ + protected function getActivationCleanupIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Activation_Cleanup_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Activation_Cleanup_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Addon_Installation\Dialog_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Addon_Installation\Dialog_Integration + */ + protected function getDialogIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Dialog_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Addon_Installation\Dialog_Integration(${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Addon_Installation\Installation_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Addon_Installation\Installation_Integration + */ + protected function getInstallationIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Installation_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Addon_Installation\Installation_Integration(${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Activate_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Activate_Action'] : $this->getAddonActivateActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Install_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Install_Action'] : $this->getAddonInstallActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Admin_Columns_Cache_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Admin_Columns_Cache_Integration + */ + protected function getAdminColumnsCacheIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Admin_Columns_Cache_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Background_Indexing_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Background_Indexing_Integration + */ + protected function getBackgroundIndexingIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Background_Indexing_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Background_Indexing_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action'] : $this->getIndexableIndexingCompleteActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional'] = new \Yoast\WP\SEO\Conditionals\Yoast_Admin_And_Dashboard_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional'] = new \Yoast\WP\SEO\Conditionals\Get_Request_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional'] = new \Yoast\WP\SEO\Conditionals\WP_CRON_Enabled_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] : $this->getIndexableGeneralIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] : $this->getIndexablePostIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] : $this->getIndexablePostTypeArchiveIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] : $this->getIndexableTermIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'] : $this->getPostLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'] : $this->getTermLinkIndexingActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Crawl_Settings_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Crawl_Settings_Integration + */ + protected function getCrawlSettingsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Crawl_Settings_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Crawl_Settings_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Shortlinker']) ? $this->services['WPSEO_Shortlinker'] : $this->getWPSEOShortlinkerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Cron_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Cron_Integration + */ + protected function getCronIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Cron_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Cron_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Deactivated_Premium_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Deactivated_Premium_Integration + */ + protected function getDeactivatedPremiumIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Deactivated_Premium_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Deactivated_Premium_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Disable_Concatenate_Scripts_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Disable_Concatenate_Scripts_Integration + * + * @deprecated Yoast\WP\SEO\Integrations\Admin\Disable_Concatenate_Scripts_Integration is deprecated since version 23.2! + */ + protected function getDisableConcatenateScriptsIntegrationService() + { + @trigger_error('Yoast\\WP\\SEO\\Integrations\\Admin\\Disable_Concatenate_Scripts_Integration is deprecated since version 23.2!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Disable_Concatenate_Scripts_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Disable_Concatenate_Scripts_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\First_Time_Configuration_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\First_Time_Configuration_Integration + */ + protected function getFirstTimeConfigurationIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\First_Time_Configuration_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Shortlinker']) ? $this->services['WPSEO_Shortlinker'] : $this->getWPSEOShortlinkerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper'] : $this->getSocialProfilesHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Context\\Meta_Tags_Context']) ? $this->services['Yoast\\WP\\SEO\\Context\\Meta_Tags_Context'] : $this->getMetaTagsContextService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\First_Time_Configuration_Notice_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\First_Time_Configuration_Notice_Integration + */ + protected function getFirstTimeConfigurationNoticeIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Notice_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\First_Time_Configuration_Notice_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\First_Time_Configuration_Notice_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\First_Time_Configuration_Notice_Helper'] : $this->getFirstTimeConfigurationNoticeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Fix_News_Dependencies_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Fix_News_Dependencies_Integration + */ + protected function getFixNewsDependenciesIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Fix_News_Dependencies_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Fix_News_Dependencies_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Health_Check_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Health_Check_Integration + */ + protected function getHealthCheckIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Health_Check_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Health_Check_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Check']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Check'] : $this->getDefaultTaglineCheckService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Check']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Check'] : $this->getLinksTableCheckService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Check']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Check'] : $this->getPageCommentsCheckService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Check']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Check'] : $this->getPostnamePermalinkCheckService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\HelpScout_Beacon' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\HelpScout_Beacon + */ + protected function getHelpScoutBeaconService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\HelpScout_Beacon'] = new \Yoast\WP\SEO\Integrations\Admin\HelpScout_Beacon(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status']) ? $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] : ($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] = new \Yoast\WP\SEO\Config\Migration_Status())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Import_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Import_Integration + */ + protected function getImportIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Import_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Import_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service'] : $this->getImportableDetectorServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Routes\\Importing_Route']) ? $this->services['Yoast\\WP\\SEO\\Routes\\Importing_Route'] : $this->getImportingRouteService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Indexables_Exclude_Taxonomy_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Indexables_Exclude_Taxonomy_Integration + */ + protected function getIndexablesExcludeTaxonomyIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Indexables_Exclude_Taxonomy_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Indexables_Exclude_Taxonomy_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Indexing_Notification_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Indexing_Notification_Integration + */ + protected function getIndexingNotificationIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Notification_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Indexing_Notification_Integration(${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper'] = new \Yoast\WP\SEO\Helpers\Notification_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Environment_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Environment_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Environment_Helper'] = new \Yoast\WP\SEO\Helpers\Environment_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Indexing_Tool_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Indexing_Tool_Integration + */ + protected function getIndexingToolIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Tool_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Indexing_Tool_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service'] : $this->getImportableDetectorServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Routes\\Importing_Route']) ? $this->services['Yoast\\WP\\SEO\\Routes\\Importing_Route'] : $this->getImportingRouteService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Installation_Success_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Installation_Success_Integration + */ + protected function getInstallationSuccessIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Installation_Success_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Installation_Success_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Integrations_Page' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Integrations_Page + */ + protected function getIntegrationsPageService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Integrations_Page'] = new \Yoast\WP\SEO\Integrations\Admin\Integrations_Page(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] = new \Yoast\WP\SEO\Helpers\Woocommerce_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Link_Count_Columns_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Link_Count_Columns_Integration + */ + protected function getLinkCountColumnsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Link_Count_Columns_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Link_Count_Columns_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'] : $this->getPostLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration']) ? $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration'] : $this->getAdminColumnsCacheIntegrationService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Menu_Badge_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Menu_Badge_Integration + */ + protected function getMenuBadgeIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Menu_Badge_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Menu_Badge_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Migration_Error_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Migration_Error_Integration + */ + protected function getMigrationErrorIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Migration_Error_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Migration_Error_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status']) ? $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] : ($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] = new \Yoast\WP\SEO\Config\Migration_Status())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Old_Configuration_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Old_Configuration_Integration + */ + protected function getOldConfigurationIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Configuration_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Old_Configuration_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Old_Premium_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Old_Premium_Integration + * + * @deprecated Yoast\WP\SEO\Integrations\Admin\Old_Premium_Integration is deprecated since version 20.10! + */ + protected function getOldPremiumIntegrationService() + { + @trigger_error('Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Premium_Integration is deprecated since version 20.10!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Premium_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Old_Premium_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] = new \Yoast\WP\SEO\Helpers\Capability_Helper())) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Redirect_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Redirect_Integration + */ + protected function getRedirectIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Redirect_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Redirect_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Redirects_Page_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Redirects_Page_Integration + */ + protected function getRedirectsPageIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Redirects_Page_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Redirects_Page_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Unsupported_PHP_Version_Notice' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Unsupported_PHP_Version_Notice + */ + protected function getUnsupportedPHPVersionNoticeService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Unsupported_PHP_Version_Notice'] = new \Yoast\WP\SEO\Integrations\Admin\Unsupported_PHP_Version_Notice(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Admin\Workouts_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Admin\Workouts_Integration + */ + protected function getWorkoutsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Admin\\Workouts_Integration'] = new \Yoast\WP\SEO\Integrations\Admin\Workouts_Integration(${($_ = isset($this->services['WPSEO_Addon_Manager']) ? $this->services['WPSEO_Addon_Manager'] : $this->getWPSEOAddonManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Product_Editor_Checklist_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Product_Editor_Checklist_Notification + */ + protected function getBlackFridayProductEditorChecklistNotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Product_Editor_Checklist_Notification'] = new \Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Product_Editor_Checklist_Notification(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Promotion_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Promotion_Notification + */ + protected function getBlackFridayPromotionNotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Promotion_Notification'] = new \Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Promotion_Notification(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Sidebar_Checklist_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Sidebar_Checklist_Notification + */ + protected function getBlackFridaySidebarChecklistNotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Sidebar_Checklist_Notification'] = new \Yoast\WP\SEO\Integrations\Alerts\Black_Friday_Sidebar_Checklist_Notification(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Alerts\Jetpack_Boost_Pre_Publish' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Alerts\Jetpack_Boost_Pre_Publish + */ + protected function getJetpackBoostPrePublishService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Alerts\\Jetpack_Boost_Pre_Publish'] = new \Yoast\WP\SEO\Integrations\Alerts\Jetpack_Boost_Pre_Publish(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Alerts\Trustpilot_Review_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Alerts\Trustpilot_Review_Notification + */ + protected function getTrustpilotReviewNotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Alerts\\Trustpilot_Review_Notification'] = new \Yoast\WP\SEO\Integrations\Alerts\Trustpilot_Review_Notification(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Alerts\Webinar_Promo_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Alerts\Webinar_Promo_Notification + */ + protected function getWebinarPromoNotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Alerts\\Webinar_Promo_Notification'] = new \Yoast\WP\SEO\Integrations\Alerts\Webinar_Promo_Notification(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Blocks\Breadcrumbs_Block' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Blocks\Breadcrumbs_Block + */ + protected function getBreadcrumbsBlockService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Blocks\\Breadcrumbs_Block'] = new \Yoast\WP\SEO\Integrations\Blocks\Breadcrumbs_Block(${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] : $this->getMetaTagsContextMemoizerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Replace_Vars']) ? $this->services['WPSEO_Replace_Vars'] : $this->getWPSEOReplaceVarsService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface'] : $this->getHelpersSurfaceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] = new \Yoast\WP\SEO\Helpers\Request_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Blocks\Internal_Linking_Category' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Blocks\Internal_Linking_Category + */ + protected function getInternalLinkingCategoryService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Blocks\\Internal_Linking_Category'] = new \Yoast\WP\SEO\Integrations\Blocks\Internal_Linking_Category(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Blocks\Structured_Data_Blocks' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Blocks\Structured_Data_Blocks + */ + protected function getStructuredDataBlocksService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Blocks\\Structured_Data_Blocks'] = new \Yoast\WP\SEO\Integrations\Blocks\Structured_Data_Blocks(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Breadcrumbs_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Breadcrumbs_Integration + */ + protected function getBreadcrumbsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Breadcrumbs_Integration'] = new \Yoast\WP\SEO\Integrations\Breadcrumbs_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface'] : $this->getHelpersSurfaceService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Replace_Vars']) ? $this->services['WPSEO_Replace_Vars'] : $this->getWPSEOReplaceVarsService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] : $this->getMetaTagsContextMemoizerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Cleanup_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Cleanup_Integration + */ + protected function getCleanupIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration'] = new \Yoast\WP\SEO\Integrations\Cleanup_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository'] : $this->getIndexableCleanupRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Duplicate_Post_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Duplicate_Post_Integration + * + * @deprecated Yoast\WP\SEO\Integrations\Duplicate_Post_Integration is deprecated since version 23.4! + */ + protected function getDuplicatePostIntegrationService() + { + @trigger_error('Yoast\\WP\\SEO\\Integrations\\Duplicate_Post_Integration is deprecated since version 23.4!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Integrations\\Duplicate_Post_Integration'] = new \Yoast\WP\SEO\Integrations\Duplicate_Post_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Estimated_Reading_Time' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Estimated_Reading_Time + */ + protected function getEstimatedReadingTimeService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Estimated_Reading_Time'] = new \Yoast\WP\SEO\Integrations\Estimated_Reading_Time(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Exclude_Attachment_Post_Type' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Exclude_Attachment_Post_Type + */ + protected function getExcludeAttachmentPostTypeService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Exclude_Attachment_Post_Type'] = new \Yoast\WP\SEO\Integrations\Exclude_Attachment_Post_Type(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Exclude_Oembed_Cache_Post_Type' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Exclude_Oembed_Cache_Post_Type + */ + protected function getExcludeOembedCachePostTypeService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Exclude_Oembed_Cache_Post_Type'] = new \Yoast\WP\SEO\Integrations\Exclude_Oembed_Cache_Post_Type(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Feature_Flag_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Feature_Flag_Integration + */ + protected function getFeatureFlagIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Feature_Flag_Integration'] = new \Yoast\WP\SEO\Integrations\Feature_Flag_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional'] = new \Yoast\WP\SEO\Conditionals\Addon_Installation_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional'] = new \Yoast\WP\SEO\Conditionals\New_Settings_Ui_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional'] = new \Yoast\WP\SEO\Conditionals\Text_Formality_Conditional())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional'] = new \Yoast\WP\SEO\Conditionals\Updated_Importer_Framework_Conditional())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Backwards_Compatibility' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Backwards_Compatibility + */ + protected function getBackwardsCompatibilityService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Backwards_Compatibility'] = new \Yoast\WP\SEO\Integrations\Front_End\Backwards_Compatibility(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Category_Term_Description' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Category_Term_Description + */ + protected function getCategoryTermDescriptionService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Category_Term_Description'] = new \Yoast\WP\SEO\Integrations\Front_End\Category_Term_Description(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Comment_Link_Fixer' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Comment_Link_Fixer + */ + protected function getCommentLinkFixerService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Comment_Link_Fixer'] = new \Yoast\WP\SEO\Integrations\Front_End\Comment_Link_Fixer(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper'] : $this->getRobotsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Basic' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Basic + */ + protected function getCrawlCleanupBasicService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Basic'] = new \Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Basic(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Rss' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Rss + */ + protected function getCrawlCleanupRssService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Rss'] = new \Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Rss(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Searches' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Searches + */ + protected function getCrawlCleanupSearchesService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Searches'] = new \Yoast\WP\SEO\Integrations\Front_End\Crawl_Cleanup_Searches(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Feed_Improvements' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Feed_Improvements + */ + protected function getFeedImprovementsService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Feed_Improvements'] = new \Yoast\WP\SEO\Integrations\Front_End\Feed_Improvements(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] : $this->getMetaSurfaceService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Force_Rewrite_Title' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Force_Rewrite_Title + */ + protected function getForceRewriteTitleService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Force_Rewrite_Title'] = new \Yoast\WP\SEO\Integrations\Front_End\Force_Rewrite_Title(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Query_Wrapper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Handle_404' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Handle_404 + */ + protected function getHandle404Service() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Handle_404'] = new \Yoast\WP\SEO\Integrations\Front_End\Handle_404(${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Query_Wrapper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Indexing_Controls' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Indexing_Controls + */ + protected function getIndexingControlsService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Indexing_Controls'] = new \Yoast\WP\SEO\Integrations\Front_End\Indexing_Controls(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Helper'] : $this->getRobotsHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Open_Graph_OEmbed' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Open_Graph_OEmbed + */ + protected function getOpenGraphOEmbedService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Open_Graph_OEmbed'] = new \Yoast\WP\SEO\Integrations\Front_End\Open_Graph_OEmbed(${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] : $this->getMetaSurfaceService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\RSS_Footer_Embed' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\RSS_Footer_Embed + */ + protected function getRSSFooterEmbedService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\RSS_Footer_Embed'] = new \Yoast\WP\SEO\Integrations\Front_End\RSS_Footer_Embed(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Redirects' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Redirects + */ + protected function getRedirectsService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Redirects'] = new \Yoast\WP\SEO\Integrations\Front_End\Redirects(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Meta_Helper'] = new \Yoast\WP\SEO\Helpers\Meta_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Redirect_Helper'] = new \Yoast\WP\SEO\Helpers\Redirect_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Robots_Txt_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Robots_Txt_Integration + */ + protected function getRobotsTxtIntegrationService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper'] = new \Yoast\WP\SEO\Helpers\Robots_Txt_Helper())) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Robots_Txt_Integration'] = new \Yoast\WP\SEO\Integrations\Front_End\Robots_Txt_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, $a, new \Yoast\WP\SEO\Presenters\Robots_Txt_Presenter($a)); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\Schema_Accessibility_Feature' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\Schema_Accessibility_Feature + */ + protected function getSchemaAccessibilityFeatureService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\Schema_Accessibility_Feature'] = new \Yoast\WP\SEO\Integrations\Front_End\Schema_Accessibility_Feature(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End\WP_Robots_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End\WP_Robots_Integration + */ + protected function getWPRobotsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End\\WP_Robots_Integration'] = new \Yoast\WP\SEO\Integrations\Front_End\WP_Robots_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] : $this->getMetaTagsContextMemoizerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Front_End_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Front_End_Integration + */ + protected function getFrontEndIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End_Integration'] = new \Yoast\WP\SEO\Integrations\Front_End_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] : $this->getMetaTagsContextMemoizerService()) && false ?: '_'}, $this, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Request_Helper'] = new \Yoast\WP\SEO\Helpers\Request_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface'] : $this->getHelpersSurfaceService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Replace_Vars']) ? $this->services['WPSEO_Replace_Vars'] : $this->getWPSEOReplaceVarsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Primary_Category' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Primary_Category + */ + protected function getPrimaryCategoryService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Primary_Category'] = new \Yoast\WP\SEO\Integrations\Primary_Category(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Settings_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Settings_Integration + */ + protected function getSettingsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Settings_Integration'] = new \Yoast\WP\SEO\Integrations\Settings_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Replace_Vars']) ? $this->services['WPSEO_Replace_Vars'] : $this->getWPSEOReplaceVarsService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Schema_Types']) ? $this->services['Yoast\\WP\\SEO\\Config\\Schema_Types'] : ($this->services['Yoast\\WP\\SEO\\Config\\Schema_Types'] = new \Yoast\WP\SEO\Config\Schema_Types())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Language_Helper'] = new \Yoast\WP\SEO\Helpers\Language_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] = new \Yoast\WP\SEO\Helpers\Woocommerce_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper'] = new \Yoast\WP\SEO\Helpers\Schema\Article_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications']) ? $this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications'] : $this->getContentTypeVisibilityDismissNotificationsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Support_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Support_Integration + */ + protected function getSupportIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Support_Integration'] = new \Yoast\WP\SEO\Integrations\Support_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\AMP' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\AMP + */ + protected function getAMPService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\AMP'] = new \Yoast\WP\SEO\Integrations\Third_Party\AMP(${($_ = isset($this->services['Yoast\\WP\\SEO\\Integrations\\Front_End_Integration']) ? $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End_Integration'] : $this->getFrontEndIntegrationService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\BbPress' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\BbPress + */ + protected function getBbPressService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\BbPress'] = new \Yoast\WP\SEO\Integrations\Third_Party\BbPress(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Elementor' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Elementor + */ + protected function getElementorService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Elementor'] = new \Yoast\WP\SEO\Integrations\Third_Party\Elementor(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] = new \Yoast\WP\SEO\Helpers\Capability_Helper())) && false ?: '_'}, new \Yoast\WP\SEO\Elementor\Infrastructure\Request_Post()); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Exclude_Elementor_Post_Types' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Exclude_Elementor_Post_Types + */ + protected function getExcludeElementorPostTypesService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_Elementor_Post_Types'] = new \Yoast\WP\SEO\Integrations\Third_Party\Exclude_Elementor_Post_Types(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Exclude_WooCommerce_Post_Types' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Exclude_WooCommerce_Post_Types + */ + protected function getExcludeWooCommercePostTypesService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_WooCommerce_Post_Types'] = new \Yoast\WP\SEO\Integrations\Third_Party\Exclude_WooCommerce_Post_Types(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Jetpack' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Jetpack + */ + protected function getJetpackService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Jetpack'] = new \Yoast\WP\SEO\Integrations\Third_Party\Jetpack(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\W3_Total_Cache' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\W3_Total_Cache + */ + protected function getW3TotalCacheService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\W3_Total_Cache'] = new \Yoast\WP\SEO\Integrations\Third_Party\W3_Total_Cache(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\WPML' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\WPML + */ + protected function getWPMLService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML'] = new \Yoast\WP\SEO\Integrations\Third_Party\WPML(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\WPML_WPSEO_Notification' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\WPML_WPSEO_Notification + */ + protected function getWPMLWPSEONotificationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML_WPSEO_Notification'] = new \Yoast\WP\SEO\Integrations\Third_Party\WPML_WPSEO_Notification(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional'] = new \Yoast\WP\SEO\Conditionals\Third_Party\WPML_WPSEO_Conditional())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Web_Stories' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Web_Stories + */ + protected function getWebStoriesService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories'] = new \Yoast\WP\SEO\Integrations\Third_Party\Web_Stories(${($_ = isset($this->services['Yoast\\WP\\SEO\\Integrations\\Front_End_Integration']) ? $this->services['Yoast\\WP\\SEO\\Integrations\\Front_End_Integration'] : $this->getFrontEndIntegrationService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Web_Stories_Post_Edit' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Web_Stories_Post_Edit + */ + protected function getWebStoriesPostEditService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories_Post_Edit'] = new \Yoast\WP\SEO\Integrations\Third_Party\Web_Stories_Post_Edit(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Wincher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Wincher + * + * @deprecated Yoast\WP\SEO\Integrations\Third_Party\Wincher is deprecated since version 21.6! + */ + protected function getWincherService() + { + @trigger_error('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher is deprecated since version 21.6!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher'] = new \Yoast\WP\SEO\Integrations\Third_Party\Wincher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Wincher_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Wincher_Helper'] : $this->getWincherHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Wincher_Publish' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Wincher_Publish + */ + protected function getWincherPublishService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Publish'] = new \Yoast\WP\SEO\Integrations\Third_Party\Wincher_Publish(${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional'] : $this->getWincherEnabledConditionalService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action'] : $this->getWincherKeyphrasesActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action'] : $this->getWincherAccountActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\WooCommerce' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\WooCommerce + */ + protected function getWooCommerce2Service() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce'] = new \Yoast\WP\SEO\Integrations\Third_Party\WooCommerce(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Replace_Vars']) ? $this->services['WPSEO_Replace_Vars'] : $this->getWPSEOReplaceVarsService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] : $this->getMetaTagsContextMemoizerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper'] = new \Yoast\WP\SEO\Helpers\Woocommerce_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\WooCommerce_Post_Edit' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\WooCommerce_Post_Edit + */ + protected function getWooCommercePostEditService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce_Post_Edit'] = new \Yoast\WP\SEO\Integrations\Third_Party\WooCommerce_Post_Edit(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Woocommerce_Permalinks' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Woocommerce_Permalinks + */ + protected function getWoocommercePermalinksService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Woocommerce_Permalinks'] = new \Yoast\WP\SEO\Integrations\Third_Party\Woocommerce_Permalinks(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Wordproof' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Wordproof + * + * @deprecated Yoast\WP\SEO\Integrations\Third_Party\Wordproof is deprecated since version 22.10! + */ + protected function getWordproofService() + { + @trigger_error('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof is deprecated since version 22.10!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof'] = new \Yoast\WP\SEO\Integrations\Third_Party\Wordproof(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper'] : $this->getWordproofHelperService()) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Third_Party\Wordproof_Integration_Toggle' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Third_Party\Wordproof_Integration_Toggle + * + * @deprecated Yoast\WP\SEO\Integrations\Third_Party\Wordproof_Integration_Toggle is deprecated since version 21.6! + */ + protected function getWordproofIntegrationToggleService() + { + @trigger_error('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof_Integration_Toggle is deprecated since version 21.6!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof_Integration_Toggle'] = new \Yoast\WP\SEO\Integrations\Third_Party\Wordproof_Integration_Toggle(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper'] : $this->getWordproofHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Uninstall_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Uninstall_Integration + */ + protected function getUninstallIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Uninstall_Integration'] = new \Yoast\WP\SEO\Integrations\Uninstall_Integration(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Addon_Update_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Addon_Update_Watcher + */ + protected function getAddonUpdateWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Addon_Update_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Addon_Update_Watcher(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Auto_Update_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Auto_Update_Watcher + */ + protected function getAutoUpdateWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Auto_Update_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Auto_Update_Watcher(${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Ancestor_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Ancestor_Watcher + */ + protected function getIndexableAncestorWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Ancestor_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Ancestor_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'] : $this->getIndexableHierarchyBuilderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository'] : $this->getIndexableHierarchyRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Attachment_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Attachment_Watcher + */ + protected function getIndexableAttachmentWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Attachment_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Attachment_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper'] = new \Yoast\WP\SEO\Helpers\Attachment_Cleanup_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Author_Archive_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Author_Archive_Watcher + */ + protected function getIndexableAuthorArchiveWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Archive_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Author_Archive_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Author_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Author_Watcher + */ + protected function getIndexableAuthorWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Author_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Category_Permalink_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Category_Permalink_Watcher + */ + protected function getIndexableCategoryPermalinkWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Category_Permalink_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Category_Permalink_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Date_Archive_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Date_Archive_Watcher + */ + protected function getIndexableDateArchiveWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Date_Archive_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Date_Archive_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_HomeUrl_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_HomeUrl_Watcher + */ + protected function getIndexableHomeUrlWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_HomeUrl_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_HomeUrl_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Home_Page_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Home_Page_Watcher + */ + protected function getIndexableHomePageWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Home_Page_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Home_Page_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Permalink_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Permalink_Watcher + */ + protected function getIndexablePermalinkWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Permalink_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Permalink_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Meta_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Meta_Watcher + */ + protected function getIndexablePostMetaWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Meta_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Meta_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher']) ? $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher'] : $this->getIndexablePostWatcherService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Type_Archive_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Type_Archive_Watcher + */ + protected function getIndexablePostTypeArchiveWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Archive_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Type_Archive_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Type_Change_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Type_Change_Watcher + */ + protected function getIndexablePostTypeChangeWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Change_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Type_Change_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Watcher + */ + protected function getIndexablePostWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Post_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository'] : $this->getIndexableHierarchyRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'] : $this->getIndexableLinkBuilderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper'] : $this->getAuthorArchiveHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Loggers\\Logger']) ? $this->services['Yoast\\WP\\SEO\\Loggers\\Logger'] : ($this->services['Yoast\\WP\\SEO\\Loggers\\Logger'] = new \Yoast\WP\SEO\Loggers\Logger())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Static_Home_Page_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Static_Home_Page_Watcher + */ + protected function getIndexableStaticHomePageWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Static_Home_Page_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Static_Home_Page_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_System_Page_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_System_Page_Watcher + */ + protected function getIndexableSystemPageWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_System_Page_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_System_Page_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Taxonomy_Change_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Taxonomy_Change_Watcher + */ + protected function getIndexableTaxonomyChangeWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Taxonomy_Change_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Taxonomy_Change_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Indexable_Term_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Indexable_Term_Watcher + */ + protected function getIndexableTermWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Term_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Indexable_Term_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder'] : $this->getIndexableLinkBuilderService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper'] = new \Yoast\WP\SEO\Helpers\Site_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Option_Titles_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Option_Titles_Watcher + */ + protected function getOptionTitlesWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Titles_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Option_Titles_Watcher(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Option_Wpseo_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Option_Wpseo_Watcher + */ + protected function getOptionWpseoWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Wpseo_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Option_Wpseo_Watcher(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Primary_Category_Quick_Edit_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Primary_Category_Quick_Edit_Watcher + */ + protected function getPrimaryCategoryQuickEditWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Category_Quick_Edit_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Primary_Category_Quick_Edit_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] : ($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] = new \Yoast\WP\SEO\Repositories\Primary_Term_Repository())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'] : $this->getIndexableHierarchyBuilderService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Primary_Term_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Primary_Term_Watcher + */ + protected function getPrimaryTermWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Term_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Primary_Term_Watcher(${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] : ($this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] = new \Yoast\WP\SEO\Repositories\Primary_Term_Repository())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Site_Helper'] = new \Yoast\WP\SEO\Helpers\Site_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper'] = new \Yoast\WP\SEO\Helpers\Primary_Term_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder'] : $this->getPrimaryTermBuilderService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Search_Engines_Discouraged_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Search_Engines_Discouraged_Watcher + */ + protected function getSearchEnginesDiscouragedWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Search_Engines_Discouraged_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Search_Engines_Discouraged_Watcher(${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper'] = new \Yoast\WP\SEO\Helpers\Notification_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Capability_Helper'] = new \Yoast\WP\SEO\Helpers\Capability_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\Watchers\Woocommerce_Beta_Editor_Watcher' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\Watchers\Woocommerce_Beta_Editor_Watcher + */ + protected function getWoocommerceBetaEditorWatcherService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\Watchers\\Woocommerce_Beta_Editor_Watcher'] = new \Yoast\WP\SEO\Integrations\Watchers\Woocommerce_Beta_Editor_Watcher(${($_ = isset($this->services['Yoast_Notification_Center']) ? $this->services['Yoast_Notification_Center'] : $this->getYoastNotificationCenterService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Notification_Helper'] = new \Yoast\WP\SEO\Helpers\Notification_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional']) ? $this->services['Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional'] : ($this->services['Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional'] = new \Yoast\WP\SEO\Conditionals\WooCommerce_Conditional())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Integrations\XMLRPC' shared autowired service. + * + * @return \Yoast\WP\SEO\Integrations\XMLRPC + */ + protected function getXMLRPCService() + { + return $this->services['Yoast\\WP\\SEO\\Integrations\\XMLRPC'] = new \Yoast\WP\SEO\Integrations\XMLRPC(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Introductions\Application\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell' shared autowired service. + * + * @return \Yoast\WP\SEO\Introductions\Application\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell + * + * @deprecated Yoast\WP\SEO\Introductions\Application\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell is deprecated since version 23.2! + */ + protected function getAiGenerateTitlesAndDescriptionsIntroductionUpsellService() + { + @trigger_error('Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell is deprecated since version 23.2!', E_USER_DEPRECATED); + + return $this->services['Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell'] = new \Yoast\WP\SEO\Introductions\Application\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository + */ + protected function getWistiaEmbedPermissionRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository'] = new \Yoast\WP\SEO\Introductions\Infrastructure\Wistia_Embed_Permission_Repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Introductions\User_Interface\Introductions_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\Introductions\User_Interface\Introductions_Integration + */ + protected function getIntroductionsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Integration'] = new \Yoast\WP\SEO\Introductions\User_Interface\Introductions_Integration(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector']) ? $this->services['Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector'] : $this->getIntroductionsCollectorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper'] : $this->getShortLinkHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository']) ? $this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository'] : $this->getWistiaEmbedPermissionRepositoryService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Introductions\User_Interface\Introductions_Seen_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Introductions\User_Interface\Introductions_Seen_Route + */ + protected function getIntroductionsSeenRouteService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Seen_Route'] = new \Yoast\WP\SEO\Introductions\User_Interface\Introductions_Seen_Route(new \Yoast\WP\SEO\Introductions\Infrastructure\Introductions_Seen_Repository($a), $a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector']) ? $this->services['Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector'] : $this->getIntroductionsCollectorService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Introductions\User_Interface\Wistia_Embed_Permission_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Introductions\User_Interface\Wistia_Embed_Permission_Route + */ + protected function getWistiaEmbedPermissionRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Introductions\\User_Interface\\Wistia_Embed_Permission_Route'] = new \Yoast\WP\SEO\Introductions\User_Interface\Wistia_Embed_Permission_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository']) ? $this->services['Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository'] : $this->getWistiaEmbedPermissionRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Loader' shared autowired service. + * + * @return \Yoast\WP\SEO\Loader + */ + protected function getLoaderService() + { + $this->services['Yoast\\WP\\SEO\\Loader'] = $instance = new \Yoast\WP\SEO\Loader($this); + + $instance->register_integration('Yoast\\WP\\SEO\\Analytics\\User_Interface\\Last_Completed_Indexation_Integration'); + $instance->register_command('Yoast\\WP\\SEO\\Commands\\Cleanup_Command'); + $instance->register_command('Yoast\\WP\\SEO\\Commands\\Index_Command'); + $instance->register_migration('free', '20171228151840', 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexable'); + $instance->register_migration('free', '20171228151841', 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPrimaryTerm'); + $instance->register_migration('free', '20190529075038', 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastDropIndexableMetaTableIfExists'); + $instance->register_migration('free', '20191011111109', 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexableHierarchy'); + $instance->register_migration('free', '20200408101900', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddCollationToTables'); + $instance->register_migration('free', '20200420073606', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddColumnsToIndexables'); + $instance->register_migration('free', '20200428123747', 'Yoast\\WP\\SEO\\Config\\Migrations\\BreadcrumbTitleAndHierarchyReset'); + $instance->register_migration('free', '20200428194858', 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableColumnLengths'); + $instance->register_migration('free', '20200429105310', 'Yoast\\WP\\SEO\\Config\\Migrations\\TruncateIndexableTables'); + $instance->register_migration('free', '20200430075614', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexableObjectIdAndTypeIndex'); + $instance->register_migration('free', '20200430150130', 'Yoast\\WP\\SEO\\Config\\Migrations\\ClearIndexableTables'); + $instance->register_migration('free', '20200507054848', 'Yoast\\WP\\SEO\\Config\\Migrations\\DeleteDuplicateIndexables'); + $instance->register_migration('free', '20200513133401', 'Yoast\\WP\\SEO\\Config\\Migrations\\ResetIndexableHierarchyTable'); + $instance->register_migration('free', '20200609154515', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddHasAncestorsColumn'); + $instance->register_migration('free', '20200616130143', 'Yoast\\WP\\SEO\\Config\\Migrations\\ReplacePermalinkHashIndex'); + $instance->register_migration('free', '20200617122511', 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateSEOLinksTable'); + $instance->register_migration('free', '20200702141921', 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateIndexableSubpagesIndex'); + $instance->register_migration('free', '20200728095334', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexesForProminentWordsOnIndexables'); + $instance->register_migration('free', '20201202144329', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddEstimatedReadingTime'); + $instance->register_migration('free', '20201216124002', 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableIDColumnLengths'); + $instance->register_migration('free', '20201216141134', 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandPrimaryTermIDColumnLengths'); + $instance->register_migration('free', '20210817092415', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddVersionColumnToIndexables'); + $instance->register_migration('free', '20211020091404', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddObjectTimestamps'); + $instance->register_migration('free', '20230417083836', 'Yoast\\WP\\SEO\\Config\\Migrations\\AddInclusiveLanguageScore'); + $instance->register_integration('Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Watcher_Actions'); + $instance->register_route('Yoast\\WP\\SEO\\Content_Type_Visibility\\User_Interface\\Content_Type_Visibility_Dismiss_New_Route'); + $instance->register_initializer('Yoast\\WP\\SEO\\Initializers\\Crawl_Cleanup_Permalinks'); + $instance->register_initializer('Yoast\\WP\\SEO\\Initializers\\Disable_Core_Sitemaps'); + $instance->register_initializer('Yoast\\WP\\SEO\\Initializers\\Migration_Runner'); + $instance->register_initializer('Yoast\\WP\\SEO\\Initializers\\Woocommerce'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Academy_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Activation_Cleanup_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Dialog_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Installation_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Background_Indexing_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Crawl_Settings_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Cron_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Deactivated_Premium_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Notice_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Fix_News_Dependencies_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Health_Check_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\HelpScout_Beacon'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Import_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Indexables_Exclude_Taxonomy_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Notification_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Tool_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Installation_Success_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Integrations_Page'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Link_Count_Columns_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Menu_Badge_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Migration_Error_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Configuration_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Redirect_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Redirects_Page_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Unsupported_PHP_Version_Notice'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Admin\\Workouts_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Product_Editor_Checklist_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Promotion_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Sidebar_Checklist_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Alerts\\Jetpack_Boost_Pre_Publish'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Alerts\\Trustpilot_Review_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Alerts\\Webinar_Promo_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Blocks\\Internal_Linking_Category'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Blocks\\Breadcrumbs_Block'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Blocks\\Structured_Data_Blocks'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Breadcrumbs_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Estimated_Reading_Time'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Exclude_Attachment_Post_Type'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Exclude_Oembed_Cache_Post_Type'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Feature_Flag_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Backwards_Compatibility'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Category_Term_Description'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Comment_Link_Fixer'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Basic'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Rss'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Searches'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Feed_Improvements'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Force_Rewrite_Title'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Handle_404'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Indexing_Controls'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Open_Graph_OEmbed'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Redirects'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Robots_Txt_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\RSS_Footer_Embed'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\Schema_Accessibility_Feature'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Front_End\\WP_Robots_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Primary_Category'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Settings_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Support_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\AMP'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\BbPress'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Elementor'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_Elementor_Post_Types'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_WooCommerce_Post_Types'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Jetpack'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\W3_Total_Cache'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories_Post_Edit'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Publish'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\Woocommerce_Permalinks'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce_Post_Edit'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML_WPSEO_Notification'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Uninstall_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Addon_Update_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Auto_Update_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Ancestor_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Attachment_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Archive_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Category_Permalink_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Date_Archive_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Home_Page_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_HomeUrl_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Permalink_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Meta_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Archive_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Change_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Static_Home_Page_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_System_Page_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Taxonomy_Change_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Term_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Titles_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Wpseo_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Category_Quick_Edit_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Term_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Search_Engines_Discouraged_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\Watchers\\Woocommerce_Beta_Editor_Watcher'); + $instance->register_integration('Yoast\\WP\\SEO\\Integrations\\XMLRPC'); + $instance->register_integration('Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Integration'); + $instance->register_route('Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Seen_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Introductions\\User_Interface\\Wistia_Embed_Permission_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Alert_Dismissal_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\First_Time_Configuration_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Importing_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Indexables_Head_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Indexing_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Integrations_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Meta_Search_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\SEMrush_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Supported_Features_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Wincher_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Workouts_Route'); + $instance->register_route('Yoast\\WP\\SEO\\Routes\\Yoast_Head_REST_Field'); + $instance->register_integration('Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Cleanup_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Custom_Meta_Integration'); + $instance->register_integration('Yoast\\WP\\SEO\\User_Profiles_Additions\\User_Interface\\User_Profiles_Additions_Ui'); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Loggers\Logger' shared autowired service. + * + * @return \Yoast\WP\SEO\Loggers\Logger + */ + protected function getLoggerService() + { + return $this->services['Yoast\\WP\\SEO\\Loggers\\Logger'] = new \Yoast\WP\SEO\Loggers\Logger(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Memoizers\Meta_Tags_Context_Memoizer' shared autowired service. + * + * @return \Yoast\WP\SEO\Memoizers\Meta_Tags_Context_Memoizer + */ + protected function getMetaTagsContextMemoizerService() + { + return $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] = new \Yoast\WP\SEO\Memoizers\Meta_Tags_Context_Memoizer(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Blocks_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Blocks_Helper'] : $this->getBlocksHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Context\\Meta_Tags_Context']) ? $this->services['Yoast\\WP\\SEO\\Context\\Meta_Tags_Context'] : $this->getMetaTagsContextService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer'] : ($this->services['Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer'] = new \Yoast\WP\SEO\Memoizers\Presentation_Memoizer($this))) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Memoizers\Presentation_Memoizer' shared autowired service. + * + * @return \Yoast\WP\SEO\Memoizers\Presentation_Memoizer + */ + protected function getPresentationMemoizerService() + { + return $this->services['Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer'] = new \Yoast\WP\SEO\Memoizers\Presentation_Memoizer($this); + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Abstract_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Abstract_Presentation + */ + protected function getAbstractPresentationService() + { + return $this->services['Yoast\\WP\\SEO\\Presentations\\Abstract_Presentation'] = new \Yoast\WP\SEO\Presentations\Abstract_Presentation(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Author_Archive_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Author_Archive_Presentation + */ + protected function getIndexableAuthorArchivePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Author_Archive_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Author_Archive_Presentation(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper'] : $this->getAuthorArchiveHelperService()) && false ?: '_'}); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + $instance->set_archive_adjacent_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Date_Archive_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Date_Archive_Presentation + */ + protected function getIndexableDateArchivePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Date_Archive_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Date_Archive_Presentation(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Error_Page_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Error_Page_Presentation + */ + protected function getIndexableErrorPagePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Error_Page_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Error_Page_Presentation(); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Home_Page_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Home_Page_Presentation + */ + protected function getIndexableHomePagePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Home_Page_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Home_Page_Presentation(); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + $instance->set_archive_adjacent_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Post_Type_Archive_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Post_Type_Archive_Presentation + */ + protected function getIndexablePostTypeArchivePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Archive_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Post_Type_Archive_Presentation(); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + $instance->set_archive_adjacent_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Post_Type_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Post_Type_Presentation + */ + protected function getIndexablePostTypePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Post_Type_Presentation(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Presentation + */ + protected function getIndexablePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Presentation(); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Search_Result_Page_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Search_Result_Page_Presentation + */ + protected function getIndexableSearchResultPagePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Search_Result_Page_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Search_Result_Page_Presentation(); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Static_Home_Page_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Static_Home_Page_Presentation + */ + protected function getIndexableStaticHomePagePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Home_Page_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Static_Home_Page_Presentation(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Static_Posts_Page_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Static_Posts_Page_Presentation + */ + protected function getIndexableStaticPostsPagePresentationService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}; + + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Posts_Page_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Static_Posts_Page_Presentation(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Date_Helper'] = new \Yoast\WP\SEO\Helpers\Date_Helper())) && false ?: '_'}, $a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + $instance->set_archive_adjacent_helpers($a); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Presentations\Indexable_Term_Archive_Presentation' shared autowired service. + * + * @return \Yoast\WP\SEO\Presentations\Indexable_Term_Archive_Presentation + */ + protected function getIndexableTermArchivePresentationService() + { + $this->services['Yoast\\WP\\SEO\\Presentations\\Indexable_Term_Archive_Presentation'] = $instance = new \Yoast\WP\SEO\Presentations\Indexable_Term_Archive_Presentation(${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Query_Wrapper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}); + + $instance->set_generators(${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Schema_Generator'] : $this->getSchemaGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] : ($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator'] = new \Yoast\WP\SEO\Generators\Open_Graph_Locale_Generator())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator'] : $this->getOpenGraphImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator'] : $this->getTwitterImageGeneratorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator']) ? $this->services['Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator'] : $this->getBreadcrumbsGeneratorService()) && false ?: '_'}); + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Permalink_Helper'] = new \Yoast\WP\SEO\Helpers\Permalink_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper'] = new \Yoast\WP\SEO\Helpers\Open_Graph\Values_Helper())) && false ?: '_'}); + $instance->set_archive_adjacent_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Pagination_Helper'] : $this->getPaginationHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Promotions\Application\Promotion_Manager' shared autowired service. + * + * @return \Yoast\WP\SEO\Promotions\Application\Promotion_Manager + */ + protected function getPromotionManagerService() + { + return $this->services['Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager'] = new \Yoast\WP\SEO\Promotions\Application\Promotion_Manager(new \Yoast\WP\SEO\Promotions\Domain\Black_Friday_Checklist_Promotion(), new \Yoast\WP\SEO\Promotions\Domain\Black_Friday_Promotion()); + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\Indexable_Cleanup_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Repositories\Indexable_Cleanup_Repository + */ + protected function getIndexableCleanupRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository'] = new \Yoast\WP\SEO\Repositories\Indexable_Cleanup_Repository(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper'] : $this->getAuthorArchiveHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\Indexable_Hierarchy_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Repositories\Indexable_Hierarchy_Repository + */ + protected function getIndexableHierarchyRepositoryService() + { + $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository'] = $instance = new \Yoast\WP\SEO\Repositories\Indexable_Hierarchy_Repository(); + + $instance->set_builder(${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder'] : $this->getIndexableHierarchyBuilderService()) && false ?: '_'}); + $instance->set_helper(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\Indexable_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Repositories\Indexable_Repository + */ + protected function getIndexableRepositoryService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder']) ? $this->services['Yoast\\WP\\SEO\\Builders\\Indexable_Builder'] : $this->getIndexableBuilderService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'])) { + return $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']; + } + $b = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository'] : $this->getIndexableHierarchyRepositoryService()) && false ?: '_'}; + + if (isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'])) { + return $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']; + } + + return $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] = new \Yoast\WP\SEO\Repositories\Indexable_Repository($a, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper'] : $this->getCurrentPageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Loggers\\Logger']) ? $this->services['Yoast\\WP\\SEO\\Loggers\\Logger'] : ($this->services['Yoast\\WP\\SEO\\Loggers\\Logger'] = new \Yoast\WP\SEO\Loggers\Logger())) && false ?: '_'}, $b, ${($_ = isset($this->services['wpdb']) ? $this->services['wpdb'] : $this->getWpdbService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager']) ? $this->services['Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager'] : $this->getIndexableVersionManagerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\Primary_Term_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Repositories\Primary_Term_Repository + */ + protected function getPrimaryTermRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository'] = new \Yoast\WP\SEO\Repositories\Primary_Term_Repository(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Repositories\SEO_Links_Repository' shared autowired service. + * + * @return \Yoast\WP\SEO\Repositories\SEO_Links_Repository + */ + protected function getSEOLinksRepositoryService() + { + return $this->services['Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository'] = new \Yoast\WP\SEO\Repositories\SEO_Links_Repository(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Alert_Dismissal_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Alert_Dismissal_Route + */ + protected function getAlertDismissalRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Alert_Dismissal_Route'] = new \Yoast\WP\SEO\Routes\Alert_Dismissal_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action'] : $this->getAlertDismissalActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\First_Time_Configuration_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\First_Time_Configuration_Route + */ + protected function getFirstTimeConfigurationRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\First_Time_Configuration_Route'] = new \Yoast\WP\SEO\Routes\First_Time_Configuration_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Configuration\\First_Time_Configuration_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Configuration\\First_Time_Configuration_Action'] : $this->getFirstTimeConfigurationActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Importing_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Importing_Route + */ + protected function getImportingRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Importing_Route'] = new \Yoast\WP\SEO\Routes\Importing_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service'] : $this->getImportableDetectorServiceService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action'] : $this->getAioseoCleanupActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action'] : $this->getAioseoCustomArchiveSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action'] : $this->getAioseoDefaultArchiveSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action'] : $this->getAioseoGeneralSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action'] : $this->getAioseoPostsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action'] : $this->getAioseoPosttypeDefaultsSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action'] : $this->getAioseoTaxonomySettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action'] : $this->getAioseoValidateDataActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action'] : $this->getDeactivateConflictingPluginsActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Indexables_Head_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Indexables_Head_Route + */ + protected function getIndexablesHeadRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Indexables_Head_Route'] = new \Yoast\WP\SEO\Routes\Indexables_Head_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action'] : $this->getIndexableHeadActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Indexing_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Indexing_Route + */ + protected function getIndexingRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Indexing_Route'] = new \Yoast\WP\SEO\Routes\Indexing_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action'] : $this->getIndexablePostIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action'] : $this->getIndexableTermIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action'] : $this->getIndexablePostTypeArchiveIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action'] : $this->getIndexableGeneralIndexationActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action'] : $this->getIndexableIndexingCompleteActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Complete_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Complete_Action'] : $this->getIndexingCompleteActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action'] : $this->getIndexingPrepareActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action'] : $this->getPostLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action'] : $this->getTermLinkIndexingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexing_Helper'] : $this->getIndexingHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Integrations_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Integrations_Route + */ + protected function getIntegrationsRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Integrations_Route'] = new \Yoast\WP\SEO\Routes\Integrations_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Integrations_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Integrations_Action'] : $this->getIntegrationsActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Meta_Search_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Meta_Search_Route + */ + protected function getMetaSearchRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Meta_Search_Route'] = new \Yoast\WP\SEO\Routes\Meta_Search_Route(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\SEMrush_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\SEMrush_Route + */ + protected function getSEMrushRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\SEMrush_Route'] = new \Yoast\WP\SEO\Routes\SEMrush_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Login_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Login_Action'] : $this->getSEMrushLoginActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Options_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Options_Action'] : $this->getSEMrushOptionsActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Phrases_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Phrases_Action'] : $this->getSEMrushPhrasesActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Supported_Features_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Supported_Features_Route + */ + protected function getSupportedFeaturesRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Supported_Features_Route'] = new \Yoast\WP\SEO\Routes\Supported_Features_Route(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Wincher_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Wincher_Route + */ + protected function getWincherRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Wincher_Route'] = new \Yoast\WP\SEO\Routes\Wincher_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Login_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Login_Action'] : $this->getWincherLoginActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action'] : $this->getWincherAccountActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action'] : $this->getWincherKeyphrasesActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Workouts_Route' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Workouts_Route + */ + protected function getWorkoutsRouteService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Workouts_Route'] = new \Yoast\WP\SEO\Routes\Workouts_Route(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Routes\Yoast_Head_REST_Field' shared autowired service. + * + * @return \Yoast\WP\SEO\Routes\Yoast_Head_REST_Field + */ + protected function getYoastHeadRESTFieldService() + { + return $this->services['Yoast\\WP\\SEO\\Routes\\Yoast_Head_REST_Field'] = new \Yoast\WP\SEO\Routes\Yoast_Head_REST_Field(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper'] : $this->getPostTypeHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper'] : $this->getTaxonomyHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Post_Helper'] : $this->getPostHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action'] : $this->getIndexableHeadActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Check' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Check + */ + protected function getDefaultTaglineCheckService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Check'] = new \Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Check(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner'] : ($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner'] = new \Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Runner())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Reports']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Reports'] : $this->getDefaultTaglineReportsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Reports' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Reports + */ + protected function getDefaultTaglineReportsService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Reports'] = new \Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Reports(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] : ($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] = new \Yoast\WP\SEO\Services\Health_Check\Report_Builder_Factory())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Runner' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Runner + */ + protected function getDefaultTaglineRunnerService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner'] = new \Yoast\WP\SEO\Services\Health_Check\Default_Tagline_Runner(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Links_Table_Check' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Links_Table_Check + */ + protected function getLinksTableCheckService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Check'] = new \Yoast\WP\SEO\Services\Health_Check\Links_Table_Check(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Runner']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Runner'] : $this->getLinksTableRunnerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Reports']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Reports'] : $this->getLinksTableReportsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Links_Table_Reports' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Links_Table_Reports + */ + protected function getLinksTableReportsService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Reports'] = new \Yoast\WP\SEO\Services\Health_Check\Links_Table_Reports(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] : ($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] = new \Yoast\WP\SEO\Services\Health_Check\Report_Builder_Factory())) && false ?: '_'}, ${($_ = isset($this->services['WPSEO_Shortlinker']) ? $this->services['WPSEO_Shortlinker'] : $this->getWPSEOShortlinkerService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Links_Table_Runner' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Links_Table_Runner + */ + protected function getLinksTableRunnerService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Runner'] = new \Yoast\WP\SEO\Services\Health_Check\Links_Table_Runner(${($_ = isset($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status']) ? $this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] : ($this->services['Yoast\\WP\\SEO\\Config\\Migration_Status'] = new \Yoast\WP\SEO\Config\Migration_Status())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\MyYoast_Api_Request_Factory' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\MyYoast_Api_Request_Factory + */ + protected function getMyYoastApiRequestFactoryService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\MyYoast_Api_Request_Factory'] = new \Yoast\WP\SEO\Services\Health_Check\MyYoast_Api_Request_Factory(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Page_Comments_Check' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Page_Comments_Check + */ + protected function getPageCommentsCheckService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Check'] = new \Yoast\WP\SEO\Services\Health_Check\Page_Comments_Check(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner'] : ($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner'] = new \Yoast\WP\SEO\Services\Health_Check\Page_Comments_Runner())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Reports']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Reports'] : $this->getPageCommentsReportsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Page_Comments_Reports' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Page_Comments_Reports + */ + protected function getPageCommentsReportsService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Reports'] = new \Yoast\WP\SEO\Services\Health_Check\Page_Comments_Reports(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] : ($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] = new \Yoast\WP\SEO\Services\Health_Check\Report_Builder_Factory())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Page_Comments_Runner' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Page_Comments_Runner + */ + protected function getPageCommentsRunnerService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner'] = new \Yoast\WP\SEO\Services\Health_Check\Page_Comments_Runner(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Check' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Check + */ + protected function getPostnamePermalinkCheckService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Check'] = new \Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Check(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner'] : ($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner'] = new \Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Runner())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Reports']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Reports'] : $this->getPostnamePermalinkReportsService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Reports' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Reports + */ + protected function getPostnamePermalinkReportsService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Reports'] = new \Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Reports(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory']) ? $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] : ($this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] = new \Yoast\WP\SEO\Services\Health_Check\Report_Builder_Factory())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Runner' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Runner + */ + protected function getPostnamePermalinkRunnerService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner'] = new \Yoast\WP\SEO\Services\Health_Check\Postname_Permalink_Runner(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Report_Builder' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Report_Builder + */ + protected function getReportBuilderService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder'] = new \Yoast\WP\SEO\Services\Health_Check\Report_Builder(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Health_Check\Report_Builder_Factory' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Health_Check\Report_Builder_Factory + */ + protected function getReportBuilderFactoryService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory'] = new \Yoast\WP\SEO\Services\Health_Check\Report_Builder_Factory(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service + */ + protected function getAioseoReplacevarServiceService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Replacevar_Service(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Robots_Provider_Service' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Robots_Provider_Service + */ + protected function getAioseoRobotsProviderServiceService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Robots_Provider_Service(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Robots_Transformer_Service' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Robots_Transformer_Service + */ + protected function getAioseoRobotsTransformerServiceService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Robots_Transformer_Service(${($_ = isset($this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service']) ? $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service'] : $this->getAioseoRobotsProviderServiceService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Social_Images_Provider_Service' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Social_Images_Provider_Service + */ + protected function getAioseoSocialImagesProviderServiceService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Social_Images_Provider_Service'] = new \Yoast\WP\SEO\Services\Importing\Aioseo\Aioseo_Social_Images_Provider_Service(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper'] : $this->getAioseoHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Importing\Conflicting_Plugins_Service' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Importing\Conflicting_Plugins_Service + */ + protected function getConflictingPluginsServiceService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service'] = new \Yoast\WP\SEO\Services\Importing\Conflicting_Plugins_Service(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Importing\Importable_Detector_Service' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Importing\Importable_Detector_Service + */ + protected function getImportableDetectorServiceService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service'] = new \Yoast\WP\SEO\Services\Importing\Importable_Detector_Service(${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action'] : $this->getAioseoCleanupActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action'] : $this->getAioseoCustomArchiveSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action'] : $this->getAioseoDefaultArchiveSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action'] : $this->getAioseoGeneralSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action'] : $this->getAioseoPostsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action'] : $this->getAioseoPosttypeDefaultsSettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action'] : $this->getAioseoTaxonomySettingsImportingActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action'] : $this->getAioseoValidateDataActionService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action']) ? $this->services['Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action'] : $this->getDeactivateConflictingPluginsActionService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Services\Indexables\Indexable_Version_Manager' shared autowired service. + * + * @return \Yoast\WP\SEO\Services\Indexables\Indexable_Version_Manager + */ + protected function getIndexableVersionManagerService() + { + return $this->services['Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager'] = new \Yoast\WP\SEO\Services\Indexables\Indexable_Version_Manager(${($_ = isset($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions']) ? $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] : ($this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Classes_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Classes_Surface + */ + protected function getClassesSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Classes_Surface'] = new \Yoast\WP\SEO\Surfaces\Classes_Surface($this); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Helpers_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Helpers_Surface + */ + protected function getHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Helpers_Surface($this, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface'] : ($this->services['Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Open_Graph_Helpers_Surface($this))) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface'] : ($this->services['Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Schema_Helpers_Surface($this))) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface']) ? $this->services['Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface'] : ($this->services['Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Twitter_Helpers_Surface($this))) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Meta_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Meta_Surface + */ + protected function getMetaSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Meta_Surface'] = new \Yoast\WP\SEO\Surfaces\Meta_Surface($this, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer']) ? $this->services['Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer'] : $this->getMetaTagsContextMemoizerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository']) ? $this->services['Yoast\\WP\\SEO\\Repositories\\Indexable_Repository'] : $this->getIndexableRepositoryService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper']) ? $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper'] : ($this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Rewrite_Wrapper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Indexable_Helper'] : $this->getIndexableHelperService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Open_Graph_Helpers_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Open_Graph_Helpers_Surface + */ + protected function getOpenGraphHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Open_Graph_Helpers_Surface($this); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Schema_Helpers_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Schema_Helpers_Surface + */ + protected function getSchemaHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Schema_Helpers_Surface($this); + } + + /** + * Gets the public 'Yoast\WP\SEO\Surfaces\Twitter_Helpers_Surface' shared autowired service. + * + * @return \Yoast\WP\SEO\Surfaces\Twitter_Helpers_Surface + */ + protected function getTwitterHelpersSurfaceService() + { + return $this->services['Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface'] = new \Yoast\WP\SEO\Surfaces\Twitter_Helpers_Surface($this); + } + + /** + * Gets the public 'Yoast\WP\SEO\User_Meta\Application\Additional_Contactmethods_Collector' shared autowired service. + * + * @return \Yoast\WP\SEO\User_Meta\Application\Additional_Contactmethods_Collector + */ + protected function getAdditionalContactmethodsCollectorService() + { + return $this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector'] = new \Yoast\WP\SEO\User_Meta\Application\Additional_Contactmethods_Collector(new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Facebook(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Instagram(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Linkedin(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Myspace(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Pinterest(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Soundcloud(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Tumblr(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Wikipedia(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\X(), new \Yoast\WP\SEO\User_Meta\Framework\Additional_Contactmethods\Youtube()); + } + + /** + * Gets the public 'Yoast\WP\SEO\User_Meta\Application\Custom_Meta_Collector' shared autowired service. + * + * @return \Yoast\WP\SEO\User_Meta\Application\Custom_Meta_Collector + */ + protected function getCustomMetaCollectorService() + { + $a = ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}; + + return $this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector'] = new \Yoast\WP\SEO\User_Meta\Application\Custom_Meta_Collector(new \Yoast\WP\SEO\User_Meta\Framework\Custom_Meta\Author_Metadesc($a), new \Yoast\WP\SEO\User_Meta\Framework\Custom_Meta\Author_Title($a), new \Yoast\WP\SEO\User_Meta\Framework\Custom_Meta\Content_Analysis_Disable($a), new \Yoast\WP\SEO\User_Meta\Framework\Custom_Meta\Inclusive_Language_Analysis_Disable($a), new \Yoast\WP\SEO\User_Meta\Framework\Custom_Meta\Keyword_Analysis_Disable($a), new \Yoast\WP\SEO\User_Meta\Framework\Custom_Meta\Noindex_Author($a)); + } + + /** + * Gets the public 'Yoast\WP\SEO\User_Meta\User_Interface\Additional_Contactmethods_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\User_Meta\User_Interface\Additional_Contactmethods_Integration + */ + protected function getAdditionalContactmethodsIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration'] = new \Yoast\WP\SEO\User_Meta\User_Interface\Additional_Contactmethods_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector']) ? $this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector'] : $this->getAdditionalContactmethodsCollectorService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\User_Meta\User_Interface\Cleanup_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\User_Meta\User_Interface\Cleanup_Integration + */ + protected function getCleanupIntegration2Service() + { + return $this->services['Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Cleanup_Integration'] = new \Yoast\WP\SEO\User_Meta\User_Interface\Cleanup_Integration(new \Yoast\WP\SEO\User_Meta\Application\Cleanup_Service(${($_ = isset($this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector']) ? $this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector'] : $this->getAdditionalContactmethodsCollectorService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector']) ? $this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector'] : $this->getCustomMetaCollectorService()) && false ?: '_'}, new \Yoast\WP\SEO\User_Meta\Infrastructure\Cleanup_Repository())); + } + + /** + * Gets the public 'Yoast\WP\SEO\User_Meta\User_Interface\Custom_Meta_Integration' shared autowired service. + * + * @return \Yoast\WP\SEO\User_Meta\User_Interface\Custom_Meta_Integration + */ + protected function getCustomMetaIntegrationService() + { + return $this->services['Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Custom_Meta_Integration'] = new \Yoast\WP\SEO\User_Meta\User_Interface\Custom_Meta_Integration(${($_ = isset($this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector']) ? $this->services['Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector'] : $this->getCustomMetaCollectorService()) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\User_Profiles_Additions\User_Interface\User_Profiles_Additions_Ui' shared autowired service. + * + * @return \Yoast\WP\SEO\User_Profiles_Additions\User_Interface\User_Profiles_Additions_Ui + */ + protected function getUserProfilesAdditionsUiService() + { + return $this->services['Yoast\\WP\\SEO\\User_Profiles_Additions\\User_Interface\\User_Profiles_Additions_Ui'] = new \Yoast\WP\SEO\User_Profiles_Additions\User_Interface\User_Profiles_Additions_Ui(${($_ = isset($this->services['WPSEO_Admin_Asset_Manager']) ? $this->services['WPSEO_Admin_Asset_Manager'] : $this->getWPSEOAdminAssetManagerService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Values\Images' shared autowired service. + * + * @return \Yoast\WP\SEO\Values\Images + */ + protected function getImagesService() + { + return $this->services['Yoast\\WP\\SEO\\Values\\Images'] = new \Yoast\WP\SEO\Values\Images(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}); + } + + /** + * Gets the public 'Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions' shared autowired service. + * + * @return \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions + */ + protected function getIndexableBuilderVersionsService() + { + return $this->services['Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions'] = new \Yoast\WP\SEO\Values\Indexables\Indexable_Builder_Versions(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Values\Open_Graph\Images' shared autowired service. + * + * @return \Yoast\WP\SEO\Values\Open_Graph\Images + */ + protected function getImages2Service() + { + $this->services['Yoast\\WP\\SEO\\Values\\Open_Graph\\Images'] = $instance = new \Yoast\WP\SEO\Values\Open_Graph\Images(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}); + + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper'] : $this->getImageHelper2Service()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Values\Twitter\Images' shared autowired service. + * + * @return \Yoast\WP\SEO\Values\Twitter\Images + */ + protected function getImages3Service() + { + $this->services['Yoast\\WP\\SEO\\Values\\Twitter\\Images'] = $instance = new \Yoast\WP\SEO\Values\Twitter\Images(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Image_Helper'] : $this->getImageHelperService()) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Url_Helper'] = new \Yoast\WP\SEO\Helpers\Url_Helper())) && false ?: '_'}); + + $instance->set_helpers(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper'] : $this->getImageHelper4Service()) && false ?: '_'}); + + return $instance; + } + + /** + * Gets the public 'Yoast\WP\SEO\Wrappers\WP_Query_Wrapper' shared autowired service. + * + * @return \Yoast\WP\SEO\Wrappers\WP_Query_Wrapper + */ + protected function getWPQueryWrapperService() + { + return $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Query_Wrapper(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Wrappers\WP_Remote_Handler' shared autowired service. + * + * @return \Yoast\WP\SEO\Wrappers\WP_Remote_Handler + */ + protected function getWPRemoteHandlerService() + { + return $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler'] = new \Yoast\WP\SEO\Wrappers\WP_Remote_Handler(); + } + + /** + * Gets the public 'Yoast\WP\SEO\Wrappers\WP_Rewrite_Wrapper' shared autowired service. + * + * @return \Yoast\WP\SEO\Wrappers\WP_Rewrite_Wrapper + */ + protected function getWPRewriteWrapperService() + { + return $this->services['Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper'] = new \Yoast\WP\SEO\Wrappers\WP_Rewrite_Wrapper(); + } + + /** + * Gets the public 'Yoast_Notification_Center' shared service. + * + * @return \Yoast_Notification_Center + */ + protected function getYoastNotificationCenterService() + { + return $this->services['Yoast_Notification_Center'] = \Yoast_Notification_Center::get(); + } + + /** + * Gets the public 'wpdb' shared service. + * + * @return \wpdb + */ + protected function getWpdbService() + { + return $this->services['wpdb'] = \Yoast\WP\SEO\WordPress\Wrapper::get_wpdb(); + } + + /** + * Gets the private 'Yoast\WP\SEO\Content_Type_Visibility\Application\Content_Type_Visibility_Dismiss_Notifications' shared autowired service. + * + * @return \Yoast\WP\SEO\Content_Type_Visibility\Application\Content_Type_Visibility_Dismiss_Notifications + */ + protected function getContentTypeVisibilityDismissNotificationsService() + { + return $this->services['Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications'] = new \Yoast\WP\SEO\Content_Type_Visibility\Application\Content_Type_Visibility_Dismiss_Notifications(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Options_Helper'] = new \Yoast\WP\SEO\Helpers\Options_Helper())) && false ?: '_'}); + } + + /** + * Gets the private 'Yoast\WP\SEO\Introductions\Application\Introductions_Collector' shared autowired service. + * + * @return \Yoast\WP\SEO\Introductions\Application\Introductions_Collector + */ + protected function getIntroductionsCollectorService() + { + return $this->services['Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector'] = new \Yoast\WP\SEO\Introductions\Application\Introductions_Collector(new \Yoast\WP\SEO\Introductions\Application\Ai_Fix_Assessments_Upsell(${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\User_Helper'] = new \Yoast\WP\SEO\Helpers\User_Helper())) && false ?: '_'}, ${($_ = isset($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper']) ? $this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] : ($this->services['Yoast\\WP\\SEO\\Helpers\\Product_Helper'] = new \Yoast\WP\SEO\Helpers\Product_Helper())) && false ?: '_'})); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/breadcrumbs-generator.php b/wp/wp-content/plugins/wordpress-seo/src/generators/breadcrumbs-generator.php new file mode 100644 index 00000000..1dba7517 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/breadcrumbs-generator.php @@ -0,0 +1,431 @@ +repository = $repository; + $this->options = $options; + $this->current_page_helper = $current_page_helper; + $this->post_type_helper = $post_type_helper; + $this->url_helper = $url_helper; + $this->pagination_helper = $pagination_helper; + } + + /** + * Generates the breadcrumbs. + * + * @param Meta_Tags_Context $context The meta tags context. + * + * @return array> An array of associative arrays that each have a 'text' and a 'url'. + */ + public function generate( Meta_Tags_Context $context ) { + $static_ancestors = []; + $breadcrumbs_home = $this->options->get( 'breadcrumbs-home' ); + if ( $breadcrumbs_home !== '' && ! \in_array( $this->current_page_helper->get_page_type(), [ 'Home_Page', 'Static_Home_Page' ], true ) ) { + $front_page_id = $this->current_page_helper->get_front_page_id(); + if ( $front_page_id === 0 ) { + $home_page_ancestor = $this->repository->find_for_home_page(); + if ( \is_a( $home_page_ancestor, Indexable::class ) ) { + $static_ancestors[] = $home_page_ancestor; + } + } + else { + $static_ancestor = $this->repository->find_by_id_and_type( $front_page_id, 'post' ); + if ( \is_a( $static_ancestor, Indexable::class ) && $static_ancestor->post_status !== 'unindexed' ) { + $static_ancestors[] = $static_ancestor; + } + } + } + $page_for_posts = \get_option( 'page_for_posts' ); + if ( $this->should_have_blog_crumb( $page_for_posts, $context ) ) { + $static_ancestor = $this->repository->find_by_id_and_type( $page_for_posts, 'post' ); + if ( \is_a( $static_ancestor, Indexable::class ) && $static_ancestor->post_status !== 'unindexed' ) { + $static_ancestors[] = $static_ancestor; + } + } + if ( + $context->indexable->object_type === 'post' + && $context->indexable->object_sub_type !== 'post' + && $context->indexable->object_sub_type !== 'page' + && $this->post_type_helper->has_archive( $context->indexable->object_sub_type ) + ) { + $static_ancestor = $this->repository->find_for_post_type_archive( $context->indexable->object_sub_type ); + if ( \is_a( $static_ancestor, Indexable::class ) ) { + $static_ancestors[] = $static_ancestor; + } + } + if ( $context->indexable->object_type === 'term' ) { + $parent = $this->get_taxonomy_post_type_parent( $context->indexable->object_sub_type ); + if ( $parent && $parent !== 'post' && $this->post_type_helper->has_archive( $parent ) ) { + $static_ancestor = $this->repository->find_for_post_type_archive( $parent ); + if ( \is_a( $static_ancestor, Indexable::class ) ) { + $static_ancestors[] = $static_ancestor; + } + } + } + $indexables = []; + if ( ! \in_array( $this->current_page_helper->get_page_type(), [ 'Home_Page', 'Static_Home_Page' ], true ) ) { + // Get all ancestors of the indexable and append itself to get all indexables in the full crumb. + $indexables = $this->repository->get_ancestors( $context->indexable ); + } + $indexables[] = $context->indexable; + + if ( ! empty( $static_ancestors ) ) { + \array_unshift( $indexables, ...$static_ancestors ); + } + + $indexables = \apply_filters( 'wpseo_breadcrumb_indexables', $indexables, $context ); + $indexables = \is_array( $indexables ) ? $indexables : []; + $indexables = \array_filter( + $indexables, + static function ( $indexable ) { + return \is_a( $indexable, Indexable::class ); + } + ); + + $crumbs = \array_map( [ $this, 'get_post_type_crumb' ], $indexables ); + + if ( $breadcrumbs_home !== '' ) { + $crumbs[0]['text'] = $breadcrumbs_home; + } + + $crumbs = $this->add_paged_crumb( $crumbs, $context->indexable ); + + /** + * Filter: 'wpseo_breadcrumb_links' - Allow the developer to filter the Yoast SEO breadcrumb links, add to them, change order, etc. + * + * @param array $crumbs The crumbs array. + */ + $filtered_crumbs = \apply_filters( 'wpseo_breadcrumb_links', $crumbs ); + + // Basic check to make sure the filtered crumbs are in an array. + if ( ! \is_array( $filtered_crumbs ) ) { + \_doing_it_wrong( + 'Filter: \'wpseo_breadcrumb_links\'', + 'The `wpseo_breadcrumb_links` filter should return a multi-dimensional array.', + 'YoastSEO v20.0' + ); + } + else { + $crumbs = $filtered_crumbs; + } + + $filter_callback = static function ( $link_info, $index ) use ( $crumbs ) { + /** + * Filter: 'wpseo_breadcrumb_single_link_info' - Allow developers to filter the Yoast SEO Breadcrumb link information. + * + * @param array $link_info The breadcrumb link information. + * @param int $index The index of the breadcrumb in the list. + * @param array $crumbs The complete list of breadcrumbs. + */ + return \apply_filters( 'wpseo_breadcrumb_single_link_info', $link_info, $index, $crumbs ); + }; + return \array_map( $filter_callback, $crumbs, \array_keys( $crumbs ) ); + } + + /** + * Returns the modified post crumb. + * + * @param string[] $crumb The crumb. + * @param Indexable $ancestor The indexable. + * + * @return array The crumb. + */ + private function get_post_crumb( $crumb, $ancestor ) { + $crumb['id'] = $ancestor->object_id; + + return $crumb; + } + + /** + * Adds the correct ID to the crumb array based on the ancestor provided. + * + * @param Indexable $ancestor The ancestor indexable. + * + * @return string[] + */ + private function get_post_type_crumb( Indexable $ancestor ) { + $crumb = [ + 'url' => $ancestor->permalink, + 'text' => $ancestor->breadcrumb_title, + ]; + + switch ( $ancestor->object_type ) { + case 'post': + $crumb = $this->get_post_crumb( $crumb, $ancestor ); + break; + case 'post-type-archive': + $crumb = $this->get_post_type_archive_crumb( $crumb, $ancestor ); + break; + case 'term': + $crumb = $this->get_term_crumb( $crumb, $ancestor ); + break; + case 'system-page': + $crumb = $this->get_system_page_crumb( $crumb, $ancestor ); + break; + case 'user': + $crumb = $this->get_user_crumb( $crumb, $ancestor ); + break; + case 'date-archive': + $crumb = $this->get_date_archive_crumb( $crumb ); + break; + default: + // Handle unknown object types (optional). + break; + } + + return $crumb; + } + + /** + * Returns the modified post type crumb. + * + * @param string[] $crumb The crumb. + * @param Indexable $ancestor The indexable. + * + * @return string[] The crumb. + */ + private function get_post_type_archive_crumb( $crumb, $ancestor ) { + $crumb['ptarchive'] = $ancestor->object_sub_type; + + return $crumb; + } + + /** + * Returns the modified term crumb. + * + * @param string[] $crumb The crumb. + * @param Indexable $ancestor The indexable. + * + * @return array The crumb. + */ + private function get_term_crumb( $crumb, $ancestor ) { + $crumb['term_id'] = $ancestor->object_id; + $crumb['taxonomy'] = $ancestor->object_sub_type; + + return $crumb; + } + + /** + * Returns the modified system page crumb. + * + * @param string[] $crumb The crumb. + * @param Indexable $ancestor The indexable. + * + * @return string[] The crumb. + */ + private function get_system_page_crumb( $crumb, $ancestor ) { + if ( $ancestor->object_sub_type === 'search-result' ) { + $crumb['text'] = $this->options->get( 'breadcrumbs-searchprefix' ) . ' ' . \esc_html( \get_search_query() ); + $crumb['url'] = \get_search_link(); + } + elseif ( $ancestor->object_sub_type === '404' ) { + $crumb['text'] = $this->options->get( 'breadcrumbs-404crumb' ); + } + + return $crumb; + } + + /** + * Returns the modified user crumb. + * + * @param string[] $crumb The crumb. + * @param Indexable $ancestor The indexable. + * + * @return string[] The crumb. + */ + private function get_user_crumb( $crumb, $ancestor ) { + $display_name = \get_the_author_meta( 'display_name', $ancestor->object_id ); + $crumb['text'] = $this->options->get( 'breadcrumbs-archiveprefix' ) . ' ' . $display_name; + + return $crumb; + } + + /** + * Returns the modified date archive crumb. + * + * @param string[] $crumb The crumb. + * + * @return string[] The crumb. + */ + protected function get_date_archive_crumb( $crumb ) { + $home_url = $this->url_helper->home(); + $prefix = $this->options->get( 'breadcrumbs-archiveprefix' ); + + if ( \is_day() ) { + $day = \esc_html( \get_the_date() ); + $crumb['url'] = $home_url . \get_the_date( 'Y/m/d' ) . '/'; + $crumb['text'] = $prefix . ' ' . $day; + } + elseif ( \is_month() ) { + $month = \esc_html( \trim( \single_month_title( ' ', false ) ) ); + $crumb['url'] = $home_url . \get_the_date( 'Y/m' ) . '/'; + $crumb['text'] = $prefix . ' ' . $month; + } + elseif ( \is_year() ) { + $year = \get_the_date( 'Y' ); + $crumb['url'] = $home_url . $year . '/'; + $crumb['text'] = $prefix . ' ' . $year; + } + + return $crumb; + } + + /** + * Returns whether or not a blog crumb should be added. + * + * @param int $page_for_posts The page for posts ID. + * @param Meta_Tags_Context $context The meta tags context. + * + * @return bool Whether or not a blog crumb should be added. + */ + protected function should_have_blog_crumb( $page_for_posts, $context ) { + // When there is no page configured as blog page. + if ( \get_option( 'show_on_front' ) !== 'page' || ! $page_for_posts ) { + return false; + } + + if ( $context->indexable->object_type === 'term' ) { + $parent = $this->get_taxonomy_post_type_parent( $context->indexable->object_sub_type ); + return $parent === 'post'; + } + + if ( $this->options->get( 'breadcrumbs-display-blog-page' ) !== true ) { + return false; + } + + // When the current page is the home page, searchpage or isn't a singular post. + if ( \is_home() || \is_search() || ! \is_singular( 'post' ) ) { + return false; + } + + return true; + } + + /** + * Returns the post type parent of a given taxonomy. + * + * @param string $taxonomy The taxonomy. + * + * @return string|false The parent if it exists, false otherwise. + */ + protected function get_taxonomy_post_type_parent( $taxonomy ) { + $parent = $this->options->get( 'taxonomy-' . $taxonomy . '-ptparent' ); + + if ( empty( $parent ) || (string) $parent === '0' ) { + return false; + } + + return $parent; + } + + /** + * Adds a crumb for the current page, if we're on an archive page or paginated post. + * + * @param string[] $crumbs The array of breadcrumbs. + * @param Indexable $current_indexable The current indexable. + * + * @return string[] The breadcrumbs. + */ + protected function add_paged_crumb( array $crumbs, $current_indexable ) { + $is_simple_page = $this->current_page_helper->is_simple_page(); + + // If we're not on a paged page do nothing. + if ( ! $is_simple_page && ! $this->current_page_helper->is_paged() ) { + return $crumbs; + } + + // If we're not on a paginated post do nothing. + if ( $is_simple_page && $current_indexable->number_of_pages === null ) { + return $crumbs; + } + + $current_page_number = $this->pagination_helper->get_current_page_number(); + if ( $current_page_number <= 1 ) { + return $crumbs; + } + + $crumbs[] = [ + 'text' => \sprintf( + /* translators: %s expands to the current page number */ + \__( 'Page %s', 'wordpress-seo' ), + $current_page_number + ), + ]; + + return $crumbs; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/generator-interface.php b/wp/wp-content/plugins/wordpress-seo/src/generators/generator-interface.php new file mode 100644 index 00000000..431666ea --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/generator-interface.php @@ -0,0 +1,17 @@ +open_graph_image = $open_graph_image; + $this->image = $image; + $this->options = $options; + $this->url = $url; + } + + /** + * Retrieves the images for an indexable. + * + * For legacy reasons some plugins might expect we filter a WPSEO_Opengraph_Image object. That might cause + * type errors. This is why we try/catch our filters. + * + * @param Meta_Tags_Context $context The context. + * + * @return array The images. + */ + public function generate( Meta_Tags_Context $context ) { + $image_container = $this->get_image_container(); + $backup_image_container = $this->get_image_container(); + + try { + /** + * Filter: wpseo_add_opengraph_images - Allow developers to add images to the Open Graph tags. + * + * @param Yoast\WP\SEO\Values\Open_Graph\Images $image_container The current object. + */ + \apply_filters( 'wpseo_add_opengraph_images', $image_container ); + } catch ( Error $error ) { + $image_container = $backup_image_container; + } + + $this->add_from_indexable( $context->indexable, $image_container ); + $backup_image_container = $image_container; + + try { + /** + * Filter: wpseo_add_opengraph_additional_images - Allows to add additional images to the Open Graph tags. + * + * @param Yoast\WP\SEO\Values\Open_Graph\Images $image_container The current object. + */ + \apply_filters( 'wpseo_add_opengraph_additional_images', $image_container ); + } catch ( Error $error ) { + $image_container = $backup_image_container; + } + + $this->add_from_templates( $context, $image_container ); + $this->add_from_default( $image_container ); + + return $image_container->get_images(); + } + + /** + * Retrieves the images for an author archive indexable. + * + * This is a custom method to address the case of Author Archives, since they always have an Open Graph image + * set in the indexable (even if it is an empty default Gravatar). + * + * @param Meta_Tags_Context $context The context. + * + * @return array The images. + */ + public function generate_for_author_archive( Meta_Tags_Context $context ) { + $image_container = $this->get_image_container(); + + $this->add_from_templates( $context, $image_container ); + if ( $image_container->has_images() ) { + return $image_container->get_images(); + } + + return $this->generate( $context ); + } + + /** + * Adds an image based on the given indexable. + * + * @param Indexable $indexable The indexable. + * @param Images $image_container The image container. + * + * @return void + */ + protected function add_from_indexable( Indexable $indexable, Images $image_container ) { + if ( $indexable->open_graph_image_meta ) { + $image_container->add_image_by_meta( $indexable->open_graph_image_meta ); + return; + } + + if ( $indexable->open_graph_image_id ) { + $image_container->add_image_by_id( $indexable->open_graph_image_id ); + return; + } + + if ( $indexable->open_graph_image ) { + $meta_data = []; + if ( $indexable->open_graph_image_meta && \is_string( $indexable->open_graph_image_meta ) ) { + $meta_data = \json_decode( $indexable->open_graph_image_meta, true ); + } + + $image_container->add_image( + \array_merge( + (array) $meta_data, + [ + 'url' => $indexable->open_graph_image, + ] + ) + ); + } + } + + /** + * Retrieves the default Open Graph image. + * + * @param Images $image_container The image container. + * + * @return void + */ + protected function add_from_default( Images $image_container ) { + if ( $image_container->has_images() ) { + return; + } + + $default_image_id = $this->options->get( 'og_default_image_id', '' ); + if ( $default_image_id ) { + $image_container->add_image_by_id( $default_image_id ); + + return; + } + + $default_image_url = $this->options->get( 'og_default_image', '' ); + if ( $default_image_url ) { + $image_container->add_image_by_url( $default_image_url ); + } + } + + /** + * Retrieves the default Open Graph image. + * + * @param Meta_Tags_Context $context The context. + * @param Images $image_container The image container. + * + * @return void + */ + protected function add_from_templates( Meta_Tags_Context $context, Images $image_container ) { + if ( $image_container->has_images() ) { + return; + } + + if ( $context->presentation->open_graph_image_id ) { + $image_container->add_image_by_id( $context->presentation->open_graph_image_id ); + return; + } + + if ( $context->presentation->open_graph_image ) { + $image_container->add_image_by_url( $context->presentation->open_graph_image ); + } + } + + /** + * Retrieves an instance of the image container. + * + * @codeCoverageIgnore + * + * @return Images The image container. + */ + protected function get_image_container() { + $image_container = new Images( $this->image, $this->url ); + $image_container->set_helpers( $this->open_graph_image ); + + return $image_container; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/open-graph-locale-generator.php b/wp/wp-content/plugins/wordpress-seo/src/generators/open-graph-locale-generator.php new file mode 100644 index 00000000..5afc11ff --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/open-graph-locale-generator.php @@ -0,0 +1,221 @@ + 'ca_ES', + 'en' => 'en_US', + 'el' => 'el_GR', + 'et' => 'et_EE', + 'ja' => 'ja_JP', + 'sq' => 'sq_AL', + 'uk' => 'uk_UA', + 'vi' => 'vi_VN', + 'zh' => 'zh_CN', + ]; + + if ( isset( $fix_locales[ $locale ] ) ) { + return $fix_locales[ $locale ]; + } + + // Convert locales like "es" to "es_ES", in case that works for the given locale (sometimes it does). + if ( \strlen( $locale ) === 2 ) { + $locale = \strtolower( $locale ) . '_' . \strtoupper( $locale ); + } + + // These are the locales FB supports. + $fb_valid_fb_locales = [ + 'af_ZA', // Afrikaans. + 'ak_GH', // Akan. + 'am_ET', // Amharic. + 'ar_AR', // Arabic. + 'as_IN', // Assamese. + 'ay_BO', // Aymara. + 'az_AZ', // Azerbaijani. + 'be_BY', // Belarusian. + 'bg_BG', // Bulgarian. + 'bp_IN', // Bhojpuri. + 'bn_IN', // Bengali. + 'br_FR', // Breton. + 'bs_BA', // Bosnian. + 'ca_ES', // Catalan. + 'cb_IQ', // Sorani Kurdish. + 'ck_US', // Cherokee. + 'co_FR', // Corsican. + 'cs_CZ', // Czech. + 'cx_PH', // Cebuano. + 'cy_GB', // Welsh. + 'da_DK', // Danish. + 'de_DE', // German. + 'el_GR', // Greek. + 'en_GB', // English (UK). + 'en_PI', // English (Pirate). + 'en_UD', // English (Upside Down). + 'en_US', // English (US). + 'em_ZM', + 'eo_EO', // Esperanto. + 'es_ES', // Spanish (Spain). + 'es_LA', // Spanish. + 'es_MX', // Spanish (Mexico). + 'et_EE', // Estonian. + 'eu_ES', // Basque. + 'fa_IR', // Persian. + 'fb_LT', // Leet Speak. + 'ff_NG', // Fulah. + 'fi_FI', // Finnish. + 'fo_FO', // Faroese. + 'fr_CA', // French (Canada). + 'fr_FR', // French (France). + 'fy_NL', // Frisian. + 'ga_IE', // Irish. + 'gl_ES', // Galician. + 'gn_PY', // Guarani. + 'gu_IN', // Gujarati. + 'gx_GR', // Classical Greek. + 'ha_NG', // Hausa. + 'he_IL', // Hebrew. + 'hi_IN', // Hindi. + 'hr_HR', // Croatian. + 'hu_HU', // Hungarian. + 'ht_HT', // Haitian Creole. + 'hy_AM', // Armenian. + 'id_ID', // Indonesian. + 'ig_NG', // Igbo. + 'is_IS', // Icelandic. + 'it_IT', // Italian. + 'ik_US', + 'iu_CA', + 'ja_JP', // Japanese. + 'ja_KS', // Japanese (Kansai). + 'jv_ID', // Javanese. + 'ka_GE', // Georgian. + 'kk_KZ', // Kazakh. + 'km_KH', // Khmer. + 'kn_IN', // Kannada. + 'ko_KR', // Korean. + 'ks_IN', // Kashmiri. + 'ku_TR', // Kurdish (Kurmanji). + 'ky_KG', // Kyrgyz. + 'la_VA', // Latin. + 'lg_UG', // Ganda. + 'li_NL', // Limburgish. + 'ln_CD', // Lingala. + 'lo_LA', // Lao. + 'lt_LT', // Lithuanian. + 'lv_LV', // Latvian. + 'mg_MG', // Malagasy. + 'mi_NZ', // Maori. + 'mk_MK', // Macedonian. + 'ml_IN', // Malayalam. + 'mn_MN', // Mongolian. + 'mr_IN', // Marathi. + 'ms_MY', // Malay. + 'mt_MT', // Maltese. + 'my_MM', // Burmese. + 'nb_NO', // Norwegian (bokmal). + 'nd_ZW', // Ndebele. + 'ne_NP', // Nepali. + 'nl_BE', // Dutch (Belgie). + 'nl_NL', // Dutch. + 'nn_NO', // Norwegian (nynorsk). + 'nr_ZA', // Southern Ndebele. + 'ns_ZA', // Northern Sotho. + 'ny_MW', // Chewa. + 'om_ET', // Oromo. + 'or_IN', // Oriya. + 'pa_IN', // Punjabi. + 'pl_PL', // Polish. + 'ps_AF', // Pashto. + 'pt_BR', // Portuguese (Brazil). + 'pt_PT', // Portuguese (Portugal). + 'qc_GT', // Quiché. + 'qu_PE', // Quechua. + 'qr_GR', + 'qz_MM', // Burmese (Zawgyi). + 'rm_CH', // Romansh. + 'ro_RO', // Romanian. + 'ru_RU', // Russian. + 'rw_RW', // Kinyarwanda. + 'sa_IN', // Sanskrit. + 'sc_IT', // Sardinian. + 'se_NO', // Northern Sami. + 'si_LK', // Sinhala. + 'su_ID', // Sundanese. + 'sk_SK', // Slovak. + 'sl_SI', // Slovenian. + 'sn_ZW', // Shona. + 'so_SO', // Somali. + 'sq_AL', // Albanian. + 'sr_RS', // Serbian. + 'ss_SZ', // Swazi. + 'st_ZA', // Southern Sotho. + 'sv_SE', // Swedish. + 'sw_KE', // Swahili. + 'sy_SY', // Syriac. + 'sz_PL', // Silesian. + 'ta_IN', // Tamil. + 'te_IN', // Telugu. + 'tg_TJ', // Tajik. + 'th_TH', // Thai. + 'tk_TM', // Turkmen. + 'tl_PH', // Filipino. + 'tl_ST', // Klingon. + 'tn_BW', // Tswana. + 'tr_TR', // Turkish. + 'ts_ZA', // Tsonga. + 'tt_RU', // Tatar. + 'tz_MA', // Tamazight. + 'uk_UA', // Ukrainian. + 'ur_PK', // Urdu. + 'uz_UZ', // Uzbek. + 've_ZA', // Venda. + 'vi_VN', // Vietnamese. + 'wo_SN', // Wolof. + 'xh_ZA', // Xhosa. + 'yi_DE', // Yiddish. + 'yo_NG', // Yoruba. + 'zh_CN', // Simplified Chinese (China). + 'zh_HK', // Traditional Chinese (Hong Kong). + 'zh_TW', // Traditional Chinese (Taiwan). + 'zu_ZA', // Zulu. + 'zz_TR', // Zazaki. + ]; + + // Check to see if the locale is a valid FB one, if not, use en_US as a fallback. + if ( \in_array( $locale, $fb_valid_fb_locales, true ) ) { + return $locale; + } + + $locale = \strtolower( \substr( $locale, 0, 2 ) ) . '_' . \strtoupper( \substr( $locale, 0, 2 ) ); + if ( ! \in_array( $locale, $fb_valid_fb_locales, true ) ) { + return 'en_US'; + } + + return $locale; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema-generator.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema-generator.php new file mode 100644 index 00000000..de9483d6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema-generator.php @@ -0,0 +1,419 @@ +helpers = $helpers; + $this->schema_replace_vars_helper = $schema_replace_vars_helper; + } + + /** + * Returns a Schema graph array. + * + * @param Meta_Tags_Context $context The meta tags context. + * + * @return array The graph. + */ + public function generate( Meta_Tags_Context $context ) { + $pieces = $this->get_graph_pieces( $context ); + + $this->schema_replace_vars_helper->register_replace_vars( $context ); + + foreach ( \array_keys( $context->blocks ) as $block_type ) { + /** + * Filter: 'wpseo_pre_schema_block_type_' - Allows hooking things to change graph output based on the blocks on the page. + * + * @param WP_Block_Parser_Block[] $blocks All the blocks of this block type. + * @param Meta_Tags_Context $context A value object with context variables. + */ + \do_action( 'wpseo_pre_schema_block_type_' . $block_type, $context->blocks[ $block_type ], $context ); + } + + // Do a loop before everything else to inject the context and helpers. + foreach ( $pieces as $piece ) { + if ( \is_a( $piece, Abstract_Schema_Piece::class ) ) { + $piece->context = $context; + $piece->helpers = $this->helpers; + } + } + + $pieces_to_generate = $this->filter_graph_pieces_to_generate( $pieces ); + $graph = $this->generate_graph( $pieces_to_generate, $context ); + $graph = $this->add_schema_blocks_graph_pieces( $graph, $context ); + $graph = $this->finalize_graph( $graph, $context ); + + return [ + '@context' => 'https://schema.org', + '@graph' => $graph, + ]; + } + + /** + * Filters out any graph pieces that should not be generated. + * (Using the `wpseo_schema_needs_` series of filters). + * + * @param array $graph_pieces The current list of graph pieces that we want to generate. + * + * @return array The graph pieces to generate. + */ + protected function filter_graph_pieces_to_generate( $graph_pieces ) { + $pieces_to_generate = []; + foreach ( $graph_pieces as $piece ) { + $identifier = \strtolower( \str_replace( 'Yoast\WP\SEO\Generators\Schema\\', '', \get_class( $piece ) ) ); + if ( isset( $piece->identifier ) ) { + $identifier = $piece->identifier; + } + + /** + * Filter: 'wpseo_schema_needs_' - Allows changing which graph pieces we output. + * + * @param bool $is_needed Whether or not to show a graph piece. + */ + $is_needed = \apply_filters( 'wpseo_schema_needs_' . $identifier, $piece->is_needed() ); + if ( ! $is_needed ) { + continue; + } + + $pieces_to_generate[ $identifier ] = $piece; + } + + return $pieces_to_generate; + } + + /** + * Generates the schema graph. + * + * @param array $graph_piece_generators The schema graph pieces to generate. + * @param Meta_Tags_Context $context The meta tags context to use. + * + * @return array The generated schema graph. + */ + protected function generate_graph( $graph_piece_generators, $context ) { + $graph = []; + foreach ( $graph_piece_generators as $identifier => $graph_piece_generator ) { + $graph_pieces = $graph_piece_generator->generate(); + // If only a single graph piece was returned. + if ( $graph_pieces !== false && \array_key_exists( '@type', $graph_pieces ) ) { + $graph_pieces = [ $graph_pieces ]; + } + + if ( ! \is_array( $graph_pieces ) ) { + continue; + } + + foreach ( $graph_pieces as $graph_piece ) { + /** + * Filter: 'wpseo_schema_' - Allows changing graph piece output. + * This filter can be called with either an identifier or a block type (see `add_schema_blocks_graph_pieces()`). + * + * @param array $graph_piece The graph piece to filter. + * @param Meta_Tags_Context $context A value object with context variables. + * @param Abstract_Schema_Piece $graph_piece_generator A value object with context variables. + * @param Abstract_Schema_Piece[] $graph_piece_generators A value object with context variables. + */ + $graph_piece = \apply_filters( 'wpseo_schema_' . $identifier, $graph_piece, $context, $graph_piece_generator, $graph_piece_generators ); + $graph_piece = $this->type_filter( $graph_piece, $identifier, $context, $graph_piece_generator, $graph_piece_generators ); + $graph_piece = $this->validate_type( $graph_piece ); + + if ( \is_array( $graph_piece ) ) { + $graph[] = $graph_piece; + } + } + } + + /** + * Filter: 'wpseo_schema_graph' - Allows changing graph output. + * + * @param array $graph The graph to filter. + * @param Meta_Tags_Context $context A value object with context variables. + */ + $graph = \apply_filters( 'wpseo_schema_graph', $graph, $context ); + + return $graph; + } + + /** + * Adds schema graph pieces from Gutenberg blocks on the current page to + * the given schema graph. + * + * Think of blocks like the Yoast FAQ block or the How To block. + * + * @param array $graph The current schema graph. + * @param Meta_Tags_Context $context The meta tags context. + * + * @return array The graph with the schema blocks graph pieces added. + */ + protected function add_schema_blocks_graph_pieces( $graph, $context ) { + foreach ( $context->blocks as $block_type => $blocks ) { + foreach ( $blocks as $block ) { + $block_type = \strtolower( $block['blockName'] ); + + /** + * Filter: 'wpseo_schema_block_'. + * This filter is documented in the `generate_graph()` function in this class. + */ + $graph = \apply_filters( 'wpseo_schema_block_' . $block_type, $graph, $block, $context ); + + if ( isset( $block['attrs']['yoast-schema'] ) ) { + $graph[] = $this->schema_replace_vars_helper->replace( $block['attrs']['yoast-schema'], $context->presentation ); + } + } + } + + return $graph; + } + + /** + * Finalizes the schema graph after all filtering is done. + * + * @param array $graph The current schema graph. + * @param Meta_Tags_Context $context The meta tags context. + * + * @return array The schema graph. + */ + protected function finalize_graph( $graph, $context ) { + $graph = $this->remove_empty_breadcrumb( $graph, $context ); + + return $graph; + } + + /** + * Removes the breadcrumb schema if empty. + * + * @param array $graph The current schema graph. + * @param Meta_Tags_Context $context The meta tags context. + * + * @return array The schema graph with empty breadcrumbs taken out. + */ + protected function remove_empty_breadcrumb( $graph, $context ) { + if ( $this->helpers->current_page->is_home_static_page() || $this->helpers->current_page->is_home_posts_page() ) { + return $graph; + } + + // Remove the breadcrumb piece, if it's empty. + $index_to_remove = 0; + foreach ( $graph as $key => $piece ) { + if ( \in_array( 'BreadcrumbList', $this->get_type_from_piece( $piece ), true ) ) { + if ( isset( $piece['itemListElement'] ) && \is_array( $piece['itemListElement'] ) && \count( $piece['itemListElement'] ) === 1 ) { + $index_to_remove = $key; + break; + } + } + } + + // If the breadcrumb piece has been removed, we should remove its reference from the WebPage node. + if ( $index_to_remove !== 0 ) { + \array_splice( $graph, $index_to_remove, 1 ); + + // Get the type of the WebPage node. + $webpage_types = \is_array( $context->schema_page_type ) ? $context->schema_page_type : [ $context->schema_page_type ]; + + foreach ( $graph as $key => $piece ) { + if ( ! empty( \array_intersect( $webpage_types, $this->get_type_from_piece( $piece ) ) ) && isset( $piece['breadcrumb'] ) ) { + unset( $piece['breadcrumb'] ); + $graph[ $key ] = $piece; + } + } + } + + return $graph; + } + + /** + * Adapts the WebPage graph piece for password-protected posts. + * + * It should only have certain whitelisted properties. + * The type should always be WebPage. + * + * @param array $graph_piece The WebPage graph piece that should be adapted for password-protected posts. + * + * @return array The WebPage graph piece that has been adapted for password-protected posts. + */ + public function protected_webpage_schema( $graph_piece ) { + $properties_to_show = \array_flip( + [ + '@type', + '@id', + 'url', + 'name', + 'isPartOf', + 'inLanguage', + 'datePublished', + 'dateModified', + 'breadcrumb', + ] + ); + + $graph_piece = \array_intersect_key( $graph_piece, $properties_to_show ); + $graph_piece['@type'] = 'WebPage'; + + return $graph_piece; + } + + /** + * Gets all the graph pieces we need. + * + * @param Meta_Tags_Context $context The meta tags context. + * + * @return Abstract_Schema_Piece[] A filtered array of graph pieces. + */ + protected function get_graph_pieces( $context ) { + if ( $context->indexable->object_type === 'post' && \post_password_required( $context->post ) ) { + $schema_pieces = [ + new Schema\WebPage(), + new Schema\Website(), + new Schema\Organization(), + ]; + + \add_filter( 'wpseo_schema_webpage', [ $this, 'protected_webpage_schema' ], 1 ); + } + else { + $schema_pieces = [ + new Schema\Article(), + new Schema\WebPage(), + new Schema\Main_Image(), + new Schema\Breadcrumb(), + new Schema\Website(), + new Schema\Organization(), + new Schema\Person(), + new Schema\Author(), + new Schema\FAQ(), + new Schema\HowTo(), + ]; + } + + /** + * Filter: 'wpseo_schema_graph_pieces' - Allows adding pieces to the graph. + * + * @param array $pieces The schema pieces. + * @param Meta_Tags_Context $context An object with context variables. + */ + return \apply_filters( 'wpseo_schema_graph_pieces', $schema_pieces, $context ); + } + + /** + * Allows filtering the graph piece by its schema type. + * + * Note: We removed the Abstract_Schema_Piece type-hint from the $graph_piece_generator argument, because + * it caused conflicts with old code, Yoast SEO Video specifically. + * + * @param array $graph_piece The graph piece we're filtering. + * @param string $identifier The identifier of the graph piece that is being filtered. + * @param Meta_Tags_Context $context The meta tags context. + * @param Abstract_Schema_Piece $graph_piece_generator A value object with context variables. + * @param Abstract_Schema_Piece[] $graph_piece_generators A value object with context variables. + * + * @return array The filtered graph piece. + */ + private function type_filter( $graph_piece, $identifier, Meta_Tags_Context $context, $graph_piece_generator, array $graph_piece_generators ) { + $types = $this->get_type_from_piece( $graph_piece ); + foreach ( $types as $type ) { + $type = \strtolower( $type ); + + // Prevent running the same filter twice. This makes sure we run f/i. for 'author' and for 'person'. + if ( $type && $type !== $identifier ) { + /** + * Filter: 'wpseo_schema_' - Allows changing graph piece output by @type. + * + * @param array $graph_piece The graph piece to filter. + * @param Meta_Tags_Context $context A value object with context variables. + * @param Abstract_Schema_Piece $graph_piece_generator A value object with context variables. + * @param Abstract_Schema_Piece[] $graph_piece_generators A value object with context variables. + */ + $graph_piece = \apply_filters( 'wpseo_schema_' . $type, $graph_piece, $context, $graph_piece_generator, $graph_piece_generators ); + } + } + + return $graph_piece; + } + + /** + * Retrieves the type from a graph piece. + * + * @param array $piece The graph piece. + * + * @return array An array of the piece's types. + */ + private function get_type_from_piece( $piece ) { + if ( isset( $piece['@type'] ) ) { + if ( \is_array( $piece['@type'] ) ) { + // Return as-is, but remove unusable values, like sub-arrays, objects, null. + return \array_filter( $piece['@type'], 'is_string' ); + } + + return [ $piece['@type'] ]; + } + + return []; + } + + /** + * Validates a graph piece's type. + * + * When the type is an array: + * - Ensure the values are unique. + * - Only 1 value? Use that value without the array wrapping. + * + * @param array $piece The graph piece. + * + * @return array The graph piece. + */ + private function validate_type( $piece ) { + if ( ! isset( $piece['@type'] ) ) { + // No type to validate. + return $piece; + } + + // If it is not an array, we can return immediately. + if ( ! \is_array( $piece['@type'] ) ) { + return $piece; + } + + /* + * Ensure the types are unique. + * Use array_values to reset the indices (e.g. no 0, 2 because 1 was a duplicate). + */ + $piece['@type'] = \array_values( \array_unique( $piece['@type'] ) ); + + // Use the first value if there is only 1 type. + if ( \count( $piece['@type'] ) === 1 ) { + $piece['@type'] = \reset( $piece['@type'] ); + } + + return $piece; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/abstract-schema-piece.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/abstract-schema-piece.php new file mode 100644 index 00000000..bd9d7aa7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/abstract-schema-piece.php @@ -0,0 +1,49 @@ +context->indexable->object_type !== 'post' ) { + return false; + } + + // If we cannot output a publisher, we shouldn't output an Article. + if ( $this->context->site_represents === false ) { + return false; + } + + // If we cannot output an author, we shouldn't output an Article. + if ( ! $this->helpers->schema->article->is_author_supported( $this->context->indexable->object_sub_type ) ) { + return false; + } + + if ( $this->context->schema_article_type !== 'None' ) { + $this->context->has_article = true; + return true; + } + + return false; + } + + /** + * Returns Article data. + * + * @return array Article data. + */ + public function generate() { + $author = \get_userdata( $this->context->post->post_author ); + $data = [ + '@type' => $this->context->schema_article_type, + '@id' => $this->context->canonical . Schema_IDs::ARTICLE_HASH, + 'isPartOf' => [ '@id' => $this->context->main_schema_id ], + 'author' => [ + 'name' => ( $author instanceof WP_User ) ? $this->helpers->schema->html->smart_strip_tags( $author->display_name ) : '', + '@id' => $this->helpers->schema->id->get_user_schema_id( $this->context->post->post_author, $this->context ), + ], + 'headline' => $this->helpers->schema->html->smart_strip_tags( $this->helpers->post->get_post_title_with_fallback( $this->context->id ) ), + 'datePublished' => $this->helpers->date->format( $this->context->post->post_date_gmt ), + 'dateModified' => $this->helpers->date->format( $this->context->post->post_modified_gmt ), + 'mainEntityOfPage' => [ '@id' => $this->context->main_schema_id ], + 'wordCount' => $this->word_count( $this->context->post->post_content, $this->context->post->post_title ), + ]; + + if ( $this->context->post->comment_status === 'open' ) { + $data['commentCount'] = \intval( $this->context->post->comment_count, 10 ); + } + + if ( $this->context->site_represents_reference ) { + $data['publisher'] = $this->context->site_represents_reference; + } + + $data = $this->add_image( $data ); + $data = $this->add_keywords( $data ); + $data = $this->add_sections( $data ); + $data = $this->helpers->schema->language->add_piece_language( $data ); + + if ( \post_type_supports( $this->context->post->post_type, 'comments' ) && $this->context->post->comment_status === 'open' ) { + $data = $this->add_potential_action( $data ); + } + + return $data; + } + + /** + * Adds tags as keywords, if tags are assigned. + * + * @param array $data Article data. + * + * @return array Article data. + */ + private function add_keywords( $data ) { + /** + * Filter: 'wpseo_schema_article_keywords_taxonomy' - Allow changing the taxonomy used to assign keywords to a post type Article data. + * + * @param string $taxonomy The chosen taxonomy. + */ + $taxonomy = \apply_filters( 'wpseo_schema_article_keywords_taxonomy', 'post_tag' ); + + return $this->add_terms( $data, 'keywords', $taxonomy ); + } + + /** + * Adds categories as sections, if categories are assigned. + * + * @param array $data Article data. + * + * @return array Article data. + */ + private function add_sections( $data ) { + /** + * Filter: 'wpseo_schema_article_sections_taxonomy' - Allow changing the taxonomy used to assign keywords to a post type Article data. + * + * @param string $taxonomy The chosen taxonomy. + */ + $taxonomy = \apply_filters( 'wpseo_schema_article_sections_taxonomy', 'category' ); + + return $this->add_terms( $data, 'articleSection', $taxonomy ); + } + + /** + * Adds a term or multiple terms, comma separated, to a field. + * + * @param array $data Article data. + * @param string $key The key in data to save the terms in. + * @param string $taxonomy The taxonomy to retrieve the terms from. + * + * @return mixed Article data. + */ + protected function add_terms( $data, $key, $taxonomy ) { + $terms = \get_the_terms( $this->context->id, $taxonomy ); + + if ( ! \is_array( $terms ) ) { + return $data; + } + + $callback = static function ( $term ) { + // We are using the WordPress internal translation. + return $term->name !== \__( 'Uncategorized', 'default' ); + }; + $terms = \array_filter( $terms, $callback ); + + if ( empty( $terms ) ) { + return $data; + } + + $data[ $key ] = \wp_list_pluck( $terms, 'name' ); + + return $data; + } + + /** + * Adds an image node if the post has a featured image. + * + * @param array $data The Article data. + * + * @return array The Article data. + */ + private function add_image( $data ) { + if ( $this->context->main_image_url !== null ) { + $data['image'] = [ + '@id' => $this->context->canonical . Schema_IDs::PRIMARY_IMAGE_HASH, + ]; + $data['thumbnailUrl'] = $this->context->main_image_url; + } + + return $data; + } + + /** + * Adds the potential action property to the Article Schema piece. + * + * @param array $data The Article data. + * + * @return array The Article data with the potential action added. + */ + private function add_potential_action( $data ) { + /** + * Filter: 'wpseo_schema_article_potential_action_target' - Allows filtering of the schema Article potentialAction target. + * + * @param array $targets The URLs for the Article potentialAction target. + */ + $targets = \apply_filters( 'wpseo_schema_article_potential_action_target', [ $this->context->canonical . '#respond' ] ); + + $data['potentialAction'][] = [ + '@type' => 'CommentAction', + 'name' => 'Comment', + 'target' => $targets, + ]; + + return $data; + } + + /** + * Does a simple word count but tries to be relatively smart about it. + * + * @param string $post_content The post content. + * @param string $post_title The post title. + * + * @return int The number of words in the content. + */ + private function word_count( $post_content, $post_title = '' ) { + // Add the title to our word count. + $post_content = $post_title . ' ' . $post_content; + + // Strip pre/code blocks and their content. + $post_content = \preg_replace( '@<(pre|code)[^>]*?>.*?@si', '', $post_content ); + + // Add space between tags that don't have it. + $post_content = \preg_replace( '@><@', '> <', $post_content ); + + // Strips all other tags. + $post_content = \wp_strip_all_tags( $post_content ); + + $characters = ''; + + if ( \preg_match( '@[а-Ñ]@ui', $post_content ) ) { + // Correct counting of the number of words in the Russian and Ukrainian languages. + $alphabet = [ + 'ru' => 'абвгдеёжзийклмнопрÑтуфхцчшщъыьÑÑŽÑ', + 'ua' => 'абвгґдеєжзиіїйклмнопрÑтуфхцчшщьюÑ', + ]; + + $characters = \implode( '', $alphabet ); + $characters = \preg_split( '//u', $characters, -1, \PREG_SPLIT_NO_EMPTY ); + $characters = \array_unique( $characters ); + $characters = \implode( '', $characters ); + $characters .= \mb_strtoupper( $characters ); + } + + // Remove characters from HTML entities. + $post_content = \preg_replace( '@&[a-z0-9]+;@i', ' ', \htmlentities( $post_content ) ); + + return \str_word_count( $post_content, 0, $characters ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/author.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/author.php new file mode 100644 index 00000000..bbed52b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/author.php @@ -0,0 +1,113 @@ +context->indexable->object_type === 'user' ) { + return true; + } + + if ( + $this->context->indexable->object_type === 'post' + && $this->helpers->schema->article->is_author_supported( $this->context->indexable->object_sub_type ) + && $this->context->schema_article_type !== 'None' + ) { + return true; + } + + return false; + } + + /** + * Returns Person Schema data. + * + * @return bool|array Person data on success, false on failure. + */ + public function generate() { + $user_id = $this->determine_user_id(); + if ( ! $user_id ) { + return false; + } + + $data = $this->build_person_data( $user_id ); + + if ( $this->site_represents_current_author() === false ) { + $data['@type'] = [ 'Person' ]; + unset( $data['logo'] ); + } + + // If this is an author page, the Person object is the main object, so we set it as such here. + if ( $this->context->indexable->object_type === 'user' ) { + $data['mainEntityOfPage'] = [ + '@id' => $this->context->main_schema_id, + ]; + } + + // If this is a post and the author archives are enabled, set the author archive url as the author url. + if ( $this->context->indexable->object_type === 'post' ) { + if ( $this->helpers->options->get( 'disable-author' ) !== true ) { + $data['url'] = $this->helpers->user->get_the_author_posts_url( $user_id ); + } + } + + return $data; + } + + /** + * Determines a User ID for the Person data. + * + * @return bool|int User ID or false upon return. + */ + protected function determine_user_id() { + $user_id = 0; + + if ( $this->context->indexable->object_type === 'post' ) { + $user_id = (int) $this->context->post->post_author; + } + + if ( $this->context->indexable->object_type === 'user' ) { + $user_id = $this->context->indexable->object_id; + } + + /** + * Filter: 'wpseo_schema_person_user_id' - Allows filtering of user ID used for person output. + * + * @param int|bool $user_id The user ID currently determined. + */ + $user_id = \apply_filters( 'wpseo_schema_person_user_id', $user_id ); + + if ( \is_int( $user_id ) && $user_id > 0 ) { + return $user_id; + } + + return false; + } + + /** + * An author should not have an image from options, this only applies to persons. + * + * @param array $data The Person schema. + * @param string $schema_id The string used in the `@id` for the schema. + * @param bool $add_hash Whether or not the person's image url hash should be added to the image id. + * @param WP_User $user_data User data. + * + * @return array The Person schema. + */ + protected function set_image_from_options( $data, $schema_id, $add_hash = false, $user_data = null ) { + if ( $this->site_represents_current_author( $user_data ) ) { + return parent::set_image_from_options( $data, $schema_id, $add_hash, $user_data ); + } + + return $data; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/breadcrumb.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/breadcrumb.php new file mode 100644 index 00000000..2fd0053a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/breadcrumb.php @@ -0,0 +1,186 @@ +context->indexable->object_type === 'unknown' ) { + return false; + } + + if ( $this->context->indexable->object_type === 'system-page' && $this->context->indexable->object_sub_type === '404' ) { + return false; + } + + return true; + } + + /** + * Returns Schema breadcrumb data to allow recognition of page's position in the site hierarchy. + * + * @link https://developers.google.com/search/docs/data-types/breadcrumb + * + * @return bool|array Array on success, false on failure. + */ + public function generate() { + $breadcrumbs = $this->context->presentation->breadcrumbs; + $list_elements = []; + + // In case of pagination, replace the last breadcrumb, because it only contains "Page [number]" and has no URL. + if ( + ( + $this->helpers->current_page->is_paged() + || $this->context->indexable->number_of_pages > 1 + ) && ( + // Do not replace the last breadcrumb on static post pages. + ! $this->helpers->current_page->is_static_posts_page() + // Do not remove the last breadcrumb if only one exists (bugfix for custom paginated frontpages). + && \count( $breadcrumbs ) > 1 + ) + ) { + \array_pop( $breadcrumbs ); + } + + // Only output breadcrumbs that are not hidden. + $breadcrumbs = \array_filter( $breadcrumbs, [ $this, 'not_hidden' ] ); + + \reset( $breadcrumbs ); + + /* + * Check whether at least one of the breadcrumbs is broken. + * If so, do not output anything. + */ + foreach ( $breadcrumbs as $breadcrumb ) { + if ( $this->is_broken( $breadcrumb ) ) { + return false; + } + } + + // Create the last breadcrumb. + $last_breadcrumb = \array_pop( $breadcrumbs ); + $breadcrumbs[] = $this->format_last_breadcrumb( $last_breadcrumb ); + + // If this is a static front page, prevent nested pages from creating a trail. + if ( $this->helpers->current_page->is_home_static_page() ) { + + // Check if we're dealing with a nested page. + if ( \count( $breadcrumbs ) > 1 ) { + + // Store the breadcrumbs home variable before dropping the parent page from the Schema. + $breadcrumbs_home = $breadcrumbs[0]['text']; + $breadcrumbs = [ \array_pop( $breadcrumbs ) ]; + + // Make the child page show the breadcrumbs home variable rather than its own title. + $breadcrumbs[0]['text'] = $breadcrumbs_home; + } + } + + $breadcrumbs = \array_filter( $breadcrumbs, [ $this, 'not_empty_text' ] ); + $breadcrumbs = \array_values( $breadcrumbs ); + + // Create intermediate breadcrumbs. + foreach ( $breadcrumbs as $index => $breadcrumb ) { + $list_elements[] = $this->create_breadcrumb( $index, $breadcrumb ); + } + + return [ + '@type' => 'BreadcrumbList', + '@id' => $this->context->canonical . Schema_IDs::BREADCRUMB_HASH, + 'itemListElement' => $list_elements, + ]; + } + + /** + * Returns a breadcrumb array. + * + * @param int $index The position in the list. + * @param array $breadcrumb The position in the list. + * + * @return array A breadcrumb listItem. + */ + private function create_breadcrumb( $index, $breadcrumb ) { + $crumb = [ + '@type' => 'ListItem', + 'position' => ( $index + 1 ), + 'name' => $this->helpers->schema->html->smart_strip_tags( $breadcrumb['text'] ), + ]; + + if ( ! empty( $breadcrumb['url'] ) ) { + $crumb['item'] = $breadcrumb['url']; + } + + return $crumb; + } + + /** + * Creates the last breadcrumb in the breadcrumb list, omitting the URL per Google's spec. + * + * @link https://developers.google.com/search/docs/data-types/breadcrumb + * + * @param array $breadcrumb The position in the list. + * + * @return array The last of the breadcrumbs. + */ + private function format_last_breadcrumb( $breadcrumb ) { + unset( $breadcrumb['url'] ); + + return $breadcrumb; + } + + /** + * Tests if the breadcrumb is broken. + * A breadcrumb is considered broken: + * - when it is not an array. + * - when it has no URL or text. + * + * @param array $breadcrumb The breadcrumb to test. + * + * @return bool `true` if the breadcrumb is broken. + */ + private function is_broken( $breadcrumb ) { + // A breadcrumb is broken if it is not an array. + if ( ! \is_array( $breadcrumb ) ) { + return true; + } + + // A breadcrumb is broken if it does not contain a URL or text. + if ( ! \array_key_exists( 'url', $breadcrumb ) || ! \array_key_exists( 'text', $breadcrumb ) ) { + return true; + } + + return false; + } + + /** + * Checks whether the breadcrumb is not set to be hidden. + * + * @param array $breadcrumb The breadcrumb array. + * + * @return bool If the breadcrumb should not be hidden. + */ + private function not_hidden( $breadcrumb ) { + return empty( $breadcrumb['hide_in_schema'] ); + } + + /** + * Checks whether the breadcrumb has a not empty text. + * + * @param array $breadcrumb The breadcrumb array. + * + * @return bool If the breadcrumb has a not empty text. + */ + private function not_empty_text( $breadcrumb ) { + return ! empty( $breadcrumb['text'] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/faq.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/faq.php new file mode 100644 index 00000000..0573a318 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/faq.php @@ -0,0 +1,113 @@ +context->blocks['yoast/faq-block'] ) ) { + return false; + } + + if ( ! \is_array( $this->context->schema_page_type ) ) { + $this->context->schema_page_type = [ $this->context->schema_page_type ]; + } + $this->context->schema_page_type[] = 'FAQPage'; + $this->context->main_entity_of_page = $this->generate_ids(); + + return true; + } + + /** + * Generate the IDs so we can link to them in the main entity. + * + * @return array + */ + private function generate_ids() { + $ids = []; + foreach ( $this->context->blocks['yoast/faq-block'] as $block ) { + if ( isset( $block['attrs']['questions'] ) ) { + foreach ( $block['attrs']['questions'] as $question ) { + if ( empty( $question['jsonAnswer'] ) ) { + continue; + } + $ids[] = [ '@id' => $this->context->canonical . '#' . \esc_attr( $question['id'] ) ]; + } + } + } + + return $ids; + } + + /** + * Render a list of questions, referencing them by ID. + * + * @return array Our Schema graph. + */ + public function generate() { + $graph = []; + + $questions = []; + foreach ( $this->context->blocks['yoast/faq-block'] as $block ) { + if ( isset( $block['attrs']['questions'] ) ) { + $questions = \array_merge( $questions, $block['attrs']['questions'] ); + } + } + foreach ( $questions as $index => $question ) { + if ( ! isset( $question['jsonAnswer'] ) || empty( $question['jsonAnswer'] ) ) { + continue; + } + $graph[] = $this->generate_question_block( $question, ( $index + 1 ) ); + } + + return $graph; + } + + /** + * Generate a Question piece. + * + * @param array $question The question to generate schema for. + * @param int $position The position of the question. + * + * @return array Schema.org Question piece. + */ + protected function generate_question_block( $question, $position ) { + $url = $this->context->canonical . '#' . \esc_attr( $question['id'] ); + + $data = [ + '@type' => 'Question', + '@id' => $url, + 'position' => $position, + 'url' => $url, + 'name' => $this->helpers->schema->html->smart_strip_tags( $question['jsonQuestion'] ), + 'answerCount' => 1, + 'acceptedAnswer' => $this->add_accepted_answer_property( $question ), + ]; + + return $this->helpers->schema->language->add_piece_language( $data ); + } + + /** + * Adds the Questions `acceptedAnswer` property. + * + * @param array $question The question to add the acceptedAnswer to. + * + * @return array Schema.org Question piece. + */ + protected function add_accepted_answer_property( $question ) { + $data = [ + '@type' => 'Answer', + 'text' => $this->helpers->schema->html->sanitize( $question['jsonAnswer'] ), + ]; + + return $this->helpers->schema->language->add_piece_language( $data ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/howto.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/howto.php new file mode 100644 index 00000000..7319cf7a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/howto.php @@ -0,0 +1,199 @@ +context->blocks['yoast/how-to-block'] ); + } + + /** + * Renders a list of questions, referencing them by ID. + * + * @return array Our Schema graph. + */ + public function generate() { + $graph = []; + + foreach ( $this->context->blocks['yoast/how-to-block'] as $index => $block ) { + $this->add_how_to( $graph, $block, $index ); + } + + return $graph; + } + + /** + * Adds the duration of the task to the Schema. + * + * @param array $data Our How-To schema data. + * @param array $attributes The block data attributes. + * + * @return void + */ + private function add_duration( &$data, $attributes ) { + if ( empty( $attributes['hasDuration'] ) ) { + return; + } + + $days = empty( $attributes['days'] ) ? 0 : $attributes['days']; + $hours = empty( $attributes['hours'] ) ? 0 : $attributes['hours']; + $minutes = empty( $attributes['minutes'] ) ? 0 : $attributes['minutes']; + + if ( ( $days + $hours + $minutes ) > 0 ) { + $data['totalTime'] = \esc_attr( 'P' . $days . 'DT' . $hours . 'H' . $minutes . 'M' ); + } + } + + /** + * Adds the steps to our How-To output. + * + * @param array $data Our How-To schema data. + * @param array $steps Our How-To block's steps. + * + * @return void + */ + private function add_steps( &$data, $steps ) { + foreach ( $steps as $step ) { + $schema_id = $this->context->canonical . '#' . \esc_attr( $step['id'] ); + $schema_step = [ + '@type' => 'HowToStep', + 'url' => $schema_id, + ]; + + if ( isset( $step['jsonText'] ) ) { + $json_text = $this->helpers->schema->html->sanitize( $step['jsonText'] ); + } + + if ( isset( $step['jsonName'] ) ) { + $json_name = $this->helpers->schema->html->smart_strip_tags( $step['jsonName'] ); + } + + if ( empty( $json_name ) ) { + if ( empty( $step['text'] ) ) { + continue; + } + + $schema_step['text'] = ''; + + $this->add_step_image( $schema_step, $step ); + + // If there is no text and no image, don't output the step. + if ( empty( $json_text ) && empty( $schema_step['image'] ) ) { + continue; + } + + if ( ! empty( $json_text ) ) { + $schema_step['text'] = $json_text; + } + } + + elseif ( empty( $json_text ) ) { + $schema_step['text'] = $json_name; + } + else { + $schema_step['name'] = $json_name; + + $this->add_step_description( $schema_step, $json_text ); + $this->add_step_image( $schema_step, $step ); + } + + $data['step'][] = $schema_step; + } + } + + /** + * Checks if we have a step description, if we do, add it. + * + * @param array $schema_step Our Schema output for the Step. + * @param string $json_text The step text. + * + * @return void + */ + private function add_step_description( &$schema_step, $json_text ) { + $schema_step['itemListElement'] = [ + [ + '@type' => 'HowToDirection', + 'text' => $json_text, + ], + ]; + } + + /** + * Checks if we have a step image, if we do, add it. + * + * @param array $schema_step Our Schema output for the Step. + * @param array $step The step block data. + * + * @return void + */ + private function add_step_image( &$schema_step, $step ) { + if ( isset( $step['text'] ) && \is_array( $step['text'] ) ) { + foreach ( $step['text'] as $line ) { + if ( \is_array( $line ) && isset( $line['type'] ) && $line['type'] === 'img' ) { + $schema_step['image'] = $this->get_image_schema( \esc_url( $line['props']['src'] ) ); + } + } + } + } + + /** + * Generates the HowTo schema for a block. + * + * @param array $graph Our Schema data. + * @param array $block The How-To block content. + * @param int $index The index of the current block. + * + * @return void + */ + protected function add_how_to( &$graph, $block, $index ) { + $data = [ + '@type' => 'HowTo', + '@id' => $this->context->canonical . '#howto-' . ( $index + 1 ), + 'name' => $this->helpers->schema->html->smart_strip_tags( $this->helpers->post->get_post_title_with_fallback( $this->context->id ) ), + 'mainEntityOfPage' => [ '@id' => $this->context->main_schema_id ], + 'description' => '', + ]; + + if ( $this->context->has_article ) { + $data['mainEntityOfPage'] = [ '@id' => $this->context->main_schema_id . Schema_IDs::ARTICLE_HASH ]; + } + + if ( isset( $block['attrs']['jsonDescription'] ) ) { + $data['description'] = $this->helpers->schema->html->sanitize( $block['attrs']['jsonDescription'] ); + } + + $this->add_duration( $data, $block['attrs'] ); + + if ( isset( $block['attrs']['steps'] ) ) { + $this->add_steps( $data, $block['attrs']['steps'] ); + } + + $data = $this->helpers->schema->language->add_piece_language( $data ); + + $graph[] = $data; + } + + /** + * Generates the image schema from the attachment $url. + * + * @param string $url Attachment url. + * + * @return array Image schema. + */ + protected function get_image_schema( $url ) { + $schema_id = $this->context->canonical . '#schema-image-' . \md5( $url ); + + return $this->helpers->schema->image->generate_from_url( $schema_id, $url ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/main-image.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/main-image.php new file mode 100644 index 00000000..9a30975a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/main-image.php @@ -0,0 +1,46 @@ +context->canonical . Schema_IDs::PRIMARY_IMAGE_HASH; + + // The featured image. + if ( $this->context->main_image_id ) { + $generated_schema = $this->helpers->schema->image->generate_from_attachment_id( $image_id, $this->context->main_image_id ); + $this->context->main_image_url = $generated_schema['url']; + + return $generated_schema; + } + + // The first image in the content. + if ( $this->context->main_image_url ) { + return $this->helpers->schema->image->generate_from_url( $image_id, $this->context->main_image_url ); + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/organization.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/organization.php new file mode 100644 index 00000000..71d025e0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/organization.php @@ -0,0 +1,88 @@ +context->site_represents === 'company'; + } + + /** + * Returns the Organization Schema data. + * + * @return array The Organization schema. + */ + public function generate() { + $logo_schema_id = $this->context->site_url . Schema_IDs::ORGANIZATION_LOGO_HASH; + + if ( $this->context->company_logo_meta ) { + $logo = $this->helpers->schema->image->generate_from_attachment_meta( $logo_schema_id, $this->context->company_logo_meta, $this->context->company_name ); + } + else { + $logo = $this->helpers->schema->image->generate_from_attachment_id( $logo_schema_id, $this->context->company_logo_id, $this->context->company_name ); + } + + $organization = [ + '@type' => 'Organization', + '@id' => $this->context->site_url . Schema_IDs::ORGANIZATION_HASH, + 'name' => $this->helpers->schema->html->smart_strip_tags( $this->context->company_name ), + ]; + + if ( ! empty( $this->context->company_alternate_name ) ) { + $organization['alternateName'] = $this->context->company_alternate_name; + } + + $organization['url'] = $this->context->site_url; + $organization['logo'] = $logo; + $organization['image'] = [ '@id' => $logo['@id'] ]; + + $same_as = \array_values( \array_unique( \array_filter( $this->fetch_social_profiles() ) ) ); + if ( ! empty( $same_as ) ) { + $organization['sameAs'] = $same_as; + } + + if ( \is_array( $this->context->schema_page_type ) && \in_array( 'ProfilePage', $this->context->schema_page_type, true ) ) { + $organization['mainEntityOfPage'] = [ + '@id' => $this->context->main_schema_id, + ]; + } + + return $organization; + } + + /** + * Retrieve the social profiles to display in the organization schema. + * + * @return array An array of social profiles. + */ + private function fetch_social_profiles() { + $profiles = $this->helpers->social_profiles->get_organization_social_profiles(); + + if ( isset( $profiles['other_social_urls'] ) ) { + $other_social_urls = $profiles['other_social_urls']; + unset( $profiles['other_social_urls'] ); + $profiles = \array_merge( $profiles, $other_social_urls ); + } + + /** + * Filter: 'wpseo_schema_organization_social_profiles' - Allows filtering social profiles for the + * represented organization. + * + * @param string[] $profiles + */ + $profiles = \apply_filters( 'wpseo_schema_organization_social_profiles', $profiles ); + + return $profiles; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/person.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/person.php new file mode 100644 index 00000000..3f177d96 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/person.php @@ -0,0 +1,316 @@ +site_represents_current_author() ) { + return false; + } + + return $this->context->site_represents === 'person'; + } + + /** + * Returns Person Schema data. + * + * @return bool|array Person data on success, false on failure. + */ + public function generate() { + $user_id = $this->determine_user_id(); + if ( ! $user_id ) { + return false; + } + + return $this->build_person_data( $user_id ); + } + + /** + * Determines a User ID for the Person data. + * + * @return bool|int User ID or false upon return. + */ + protected function determine_user_id() { + /** + * Filter: 'wpseo_schema_person_user_id' - Allows filtering of user ID used for person output. + * + * @param int|bool $user_id The user ID currently determined. + */ + $user_id = \apply_filters( 'wpseo_schema_person_user_id', $this->context->site_user_id ); + + // It should to be an integer higher than 0. + if ( \is_int( $user_id ) && $user_id > 0 ) { + return $user_id; + } + + return false; + } + + /** + * Retrieve a list of social profile URLs for Person. + * + * @param string[] $same_as_urls Array of SameAs URLs. + * @param int $user_id User ID. + * + * @return string[] A list of SameAs URLs. + */ + protected function get_social_profiles( $same_as_urls, $user_id ) { + /** + * Filter: 'wpseo_schema_person_social_profiles' - Allows filtering of social profiles per user. + * + * @param string[] $social_profiles The array of social profiles to retrieve. Each should be a user meta field + * key. As they are retrieved using the WordPress function `get_the_author_meta`. + * @param int $user_id The current user we're grabbing social profiles for. + */ + $social_profiles = \apply_filters( 'wpseo_schema_person_social_profiles', $this->social_profiles, $user_id ); + + // We can only handle an array. + if ( ! \is_array( $social_profiles ) ) { + return $same_as_urls; + } + + foreach ( $social_profiles as $profile ) { + // Skip non-string values. + if ( ! \is_string( $profile ) ) { + continue; + } + + $social_url = $this->url_social_site( $profile, $user_id ); + if ( $social_url ) { + $same_as_urls[] = $social_url; + } + } + + return $same_as_urls; + } + + /** + * Builds our array of Schema Person data for a given user ID. + * + * @param int $user_id The user ID to use. + * @param bool $add_hash Wether or not the person's image url hash should be added to the image id. + * + * @return array An array of Schema Person data. + */ + protected function build_person_data( $user_id, $add_hash = false ) { + $user_data = \get_userdata( $user_id ); + $data = [ + '@type' => $this->type, + '@id' => $this->helpers->schema->id->get_user_schema_id( $user_id, $this->context ), + ]; + + // Safety check for the `get_userdata` WP function, which could return false. + if ( $user_data === false ) { + return $data; + } + + $data['name'] = $this->helpers->schema->html->smart_strip_tags( $user_data->display_name ); + $data = $this->add_image( $data, $user_data, $add_hash ); + + if ( ! empty( $user_data->description ) ) { + $data['description'] = $this->helpers->schema->html->smart_strip_tags( $user_data->description ); + } + + if ( \is_array( $this->context->schema_page_type ) && \in_array( 'ProfilePage', $this->context->schema_page_type, true ) ) { + $data['mainEntityOfPage'] = [ + '@id' => $this->context->main_schema_id, + ]; + } + $data = $this->add_same_as_urls( $data, $user_data, $user_id ); + + /** + * Filter: 'wpseo_schema_person_data' - Allows filtering of schema data per user. + * + * @param array $data The schema data we have for this person. + * @param int $user_id The current user we're collecting schema data for. + */ + $data = \apply_filters( 'wpseo_schema_person_data', $data, $user_id ); + + return $data; + } + + /** + * Returns an ImageObject for the persons avatar. + * + * @param array $data The Person schema. + * @param WP_User $user_data User data. + * @param bool $add_hash Wether or not the person's image url hash should be added to the image id. + * + * @return array The Person schema. + */ + protected function add_image( $data, $user_data, $add_hash = false ) { + $schema_id = $this->context->site_url . Schema_IDs::PERSON_LOGO_HASH; + + $data = $this->set_image_from_options( $data, $schema_id, $add_hash, $user_data ); + if ( ! isset( $data['image'] ) ) { + $data = $this->set_image_from_avatar( $data, $user_data, $schema_id, $add_hash ); + } + + if ( \is_array( $this->type ) && \in_array( 'Organization', $this->type, true ) ) { + $data_logo = ( $data['image']['@id'] ?? $schema_id ); + $data['logo'] = [ '@id' => $data_logo ]; + } + + return $data; + } + + /** + * Generate the person image from our settings. + * + * @param array $data The Person schema. + * @param string $schema_id The string used in the `@id` for the schema. + * @param bool $add_hash Whether or not the person's image url hash should be added to the image id. + * @param WP_User $user_data User data. + * + * @return array The Person schema. + */ + protected function set_image_from_options( $data, $schema_id, $add_hash = false, $user_data = null ) { + if ( $this->context->site_represents !== 'person' ) { + return $data; + } + if ( \is_array( $this->context->person_logo_meta ) ) { + $data['image'] = $this->helpers->schema->image->generate_from_attachment_meta( $schema_id, $this->context->person_logo_meta, $data['name'], $add_hash ); + } + + return $data; + } + + /** + * Generate the person logo from gravatar. + * + * @param array $data The Person schema. + * @param WP_User $user_data User data. + * @param string $schema_id The string used in the `@id` for the schema. + * @param bool $add_hash Wether or not the person's image url hash should be added to the image id. + * + * @return array The Person schema. + */ + protected function set_image_from_avatar( $data, $user_data, $schema_id, $add_hash = false ) { + // If we don't have an image in our settings, fall back to an avatar, if we're allowed to. + $show_avatars = \get_option( 'show_avatars' ); + if ( ! $show_avatars ) { + return $data; + } + + $url = \get_avatar_url( $user_data->user_email ); + if ( empty( $url ) ) { + return $data; + } + + $data['image'] = $this->helpers->schema->image->simple_image_object( $schema_id, $url, $user_data->display_name, $add_hash ); + + return $data; + } + + /** + * Returns an author's social site URL. + * + * @param string $social_site The social site to retrieve the URL for. + * @param int|false $user_id The user ID to use function outside of the loop. + * + * @return string + */ + protected function url_social_site( $social_site, $user_id = false ) { + $url = \get_the_author_meta( $social_site, $user_id ); + + if ( ! empty( $url ) && $social_site === 'twitter' ) { + $url = 'https://x.com/' . $url; + } + + return $url; + } + + /** + * Checks the site is represented by the same person as this indexable. + * + * @param WP_User $user_data User data. + * + * @return bool True when the site is represented by the same person as this indexable. + */ + protected function site_represents_current_author( $user_data = null ) { + // Can only be the case when the site represents a user. + if ( $this->context->site_represents !== 'person' ) { + return false; + } + + // Article post from the same user as the site represents. + if ( + $this->context->indexable->object_type === 'post' + && $this->helpers->schema->article->is_author_supported( $this->context->indexable->object_sub_type ) + && $this->context->schema_article_type !== 'None' + ) { + $user_id = ( ( ! \is_null( $user_data ) ) && ( isset( $user_data->ID ) ) ) ? $user_data->ID : $this->context->indexable->author_id; + + return $this->context->site_user_id === $user_id; + } + + // Author archive from the same user as the site represents. + return $this->context->indexable->object_type === 'user' && $this->context->site_user_id === $this->context->indexable->object_id; + } + + /** + * Builds our SameAs array. + * + * @param array $data The Person schema data. + * @param WP_User $user_data The user data object. + * @param int $user_id The user ID to use. + * + * @return array The Person schema data. + */ + protected function add_same_as_urls( $data, $user_data, $user_id ) { + $same_as_urls = []; + + // Add the "Website" field from WordPress' contact info. + if ( ! empty( $user_data->user_url ) ) { + $same_as_urls[] = $user_data->user_url; + } + + // Add the social profiles. + $same_as_urls = $this->get_social_profiles( $same_as_urls, $user_id ); + + if ( ! empty( $same_as_urls ) ) { + $same_as_urls = \array_values( \array_unique( $same_as_urls ) ); + $data['sameAs'] = $same_as_urls; + } + + return $data; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/webpage.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/webpage.php new file mode 100644 index 00000000..615b21da --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/webpage.php @@ -0,0 +1,163 @@ +context->indexable->object_type === 'unknown' ) { + return false; + } + return ! ( $this->context->indexable->object_type === 'system-page' && $this->context->indexable->object_sub_type === '404' ); + } + + /** + * Returns WebPage schema data. + * + * @return array> WebPage schema data. + */ + public function generate() { + $data = [ + '@type' => $this->context->schema_page_type, + '@id' => $this->context->main_schema_id, + 'url' => $this->context->canonical, + 'name' => $this->helpers->schema->html->smart_strip_tags( $this->context->title ), + 'isPartOf' => [ + '@id' => $this->context->site_url . Schema_IDs::WEBSITE_HASH, + ], + ]; + + if ( empty( $this->context->canonical ) && \is_search() ) { + $data['url'] = $this->build_search_url(); + } + + if ( $this->helpers->current_page->is_front_page() ) { + if ( $this->context->site_represents_reference ) { + $data['about'] = $this->context->site_represents_reference; + } + } + + $data = $this->add_image( $data ); + + if ( $this->context->indexable->object_type === 'post' ) { + $data['datePublished'] = $this->helpers->date->format( $this->context->post->post_date_gmt ); + $data['dateModified'] = $this->helpers->date->format( $this->context->post->post_modified_gmt ); + + if ( $this->context->indexable->object_sub_type === 'post' ) { + $data = $this->add_author( $data, $this->context->post ); + } + } + + if ( ! empty( $this->context->description ) ) { + $data['description'] = $this->helpers->schema->html->smart_strip_tags( $this->context->description ); + } + + if ( $this->add_breadcrumbs() ) { + $data['breadcrumb'] = [ + '@id' => $this->context->canonical . Schema_IDs::BREADCRUMB_HASH, + ]; + } + + if ( ! empty( $this->context->main_entity_of_page ) ) { + $data['mainEntity'] = $this->context->main_entity_of_page; + } + + $data = $this->helpers->schema->language->add_piece_language( $data ); + $data = $this->add_potential_action( $data ); + + return $data; + } + + /** + * Adds an author property to the $data if the WebPage is not represented. + * + * @param array> $data The WebPage schema. + * @param WP_Post $post The post the context is representing. + * + * @return array> The WebPage schema. + */ + public function add_author( $data, $post ) { + if ( $this->context->site_represents === false ) { + $data['author'] = [ '@id' => $this->helpers->schema->id->get_user_schema_id( $post->post_author, $this->context ) ]; + } + + return $data; + } + + /** + * If we have an image, make it the primary image of the page. + * + * @param array> $data WebPage schema data. + * + * @return array> + */ + public function add_image( $data ) { + if ( $this->context->has_image ) { + $data['primaryImageOfPage'] = [ '@id' => $this->context->canonical . Schema_IDs::PRIMARY_IMAGE_HASH ]; + $data['image'] = [ '@id' => $this->context->canonical . Schema_IDs::PRIMARY_IMAGE_HASH ]; + $data['thumbnailUrl'] = $this->context->main_image_url; + } + return $data; + } + + /** + * Determine if we should add a breadcrumb attribute. + * + * @return bool + */ + private function add_breadcrumbs() { + if ( $this->context->indexable->object_type === 'system-page' && $this->context->indexable->object_sub_type === '404' ) { + return false; + } + + return true; + } + + /** + * Adds the potential action property to the WebPage Schema piece. + * + * @param array> $data The WebPage data. + * + * @return array> The WebPage data with the potential action added. + */ + private function add_potential_action( $data ) { + $url = $this->context->canonical; + if ( $data['@type'] === 'CollectionPage' || ( \is_array( $data['@type'] ) && \in_array( 'CollectionPage', $data['@type'], true ) ) ) { + return $data; + } + + /** + * Filter: 'wpseo_schema_webpage_potential_action_target' - Allows filtering of the schema WebPage potentialAction target. + * + * @param array $targets The URLs for the WebPage potentialAction target. + */ + $targets = \apply_filters( 'wpseo_schema_webpage_potential_action_target', [ $url ] ); + + $data['potentialAction'][] = [ + '@type' => 'ReadAction', + 'target' => $targets, + ]; + + return $data; + } + + /** + * Creates the search URL for use when if there is no canonical. + * + * @return string Search URL. + */ + private function build_search_url() { + return $this->context->site_url . '?s=' . \rawurlencode( \get_search_query() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/schema/website.php b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/website.php new file mode 100644 index 00000000..455c492a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/schema/website.php @@ -0,0 +1,102 @@ + 'WebSite', + '@id' => $this->context->site_url . Schema_IDs::WEBSITE_HASH, + 'url' => $this->context->site_url, + 'name' => $this->helpers->schema->html->smart_strip_tags( $this->context->site_name ), + 'description' => \get_bloginfo( 'description' ), + ]; + + if ( $this->context->site_represents_reference ) { + $data['publisher'] = $this->context->site_represents_reference; + } + + $data = $this->add_alternate_name( $data ); + $data = $this->internal_search_section( $data ); + $data = $this->helpers->schema->language->add_piece_language( $data ); + + return $data; + } + + /** + * Returns an alternate name if one was specified in the Yoast SEO settings. + * + * @param array $data The website data array. + * + * @return array + */ + private function add_alternate_name( $data ) { + if ( $this->context->alternate_site_name !== '' ) { + $data['alternateName'] = $this->helpers->schema->html->smart_strip_tags( $this->context->alternate_site_name ); + } + + return $data; + } + + /** + * Adds the internal search JSON LD code to the homepage if it's not disabled. + * + * @link https://developers.google.com/search/docs/data-types/sitelinks-searchbox + * + * @param array $data The website data array. + * + * @return array + */ + private function internal_search_section( $data ) { + /** + * Filter: 'disable_wpseo_json_ld_search' - Allow disabling of the json+ld output. + * + * @param bool $display_search Whether or not to display json+ld search on the frontend. + */ + if ( \apply_filters( 'disable_wpseo_json_ld_search', false ) ) { + return $data; + } + + /** + * Filter: 'wpseo_json_ld_search_url' - Allows filtering of the search URL for Yoast SEO. + * + * @param string $search_url The search URL for this site with a `{search_term_string}` variable. + */ + $search_url = \apply_filters( 'wpseo_json_ld_search_url', $this->context->site_url . '?s={search_term_string}' ); + + $data['potentialAction'][] = [ + '@type' => 'SearchAction', + 'target' => [ + '@type' => 'EntryPoint', + 'urlTemplate' => $search_url, + ], + 'query-input' => [ + '@type' => 'PropertyValueSpecification', + 'valueRequired' => true, + 'valueName' => 'search_term_string', + ], + ]; + + return $data; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/generators/twitter-image-generator.php b/wp/wp-content/plugins/wordpress-seo/src/generators/twitter-image-generator.php new file mode 100644 index 00000000..4321e570 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/generators/twitter-image-generator.php @@ -0,0 +1,102 @@ +image = $image; + $this->url = $url; + $this->twitter_image = $twitter_image; + } + + /** + * Retrieves the images for an indexable. + * + * @param Meta_Tags_Context $context The context. + * + * @return array> The images. + */ + public function generate( Meta_Tags_Context $context ) { + $image_container = $this->get_image_container(); + + $this->add_from_indexable( $context->indexable, $image_container ); + + return $image_container->get_images(); + } + + /** + * Adds an image based on the given indexable. + * + * @param Indexable $indexable The indexable. + * @param Images $image_container The image container. + * + * @return void + */ + protected function add_from_indexable( Indexable $indexable, Images $image_container ) { + if ( $indexable->twitter_image_id ) { + $image_container->add_image_by_id( $indexable->twitter_image_id ); + return; + } + + if ( $indexable->twitter_image ) { + $image_container->add_image_by_url( $indexable->twitter_image ); + } + } + + /** + * Retrieves an instance of the image container. + * + * @codeCoverageIgnore + * + * @return Images The image container. + */ + protected function get_image_container() { + $image_container = new Images( $this->image, $this->url ); + $image_container->image_size = $this->twitter_image->get_image_size(); + + $image_container->set_helpers( $this->twitter_image ); + + return $image_container; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/aioseo-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/aioseo-helper.php new file mode 100644 index 00000000..7728ff5a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/aioseo-helper.php @@ -0,0 +1,66 @@ +wpdb = $wpdb; + $this->wpdb_helper = $wpdb_helper; + } + + /** + * Retrieves the AIOSEO table name along with the db prefix. + * + * @return string The AIOSEO table name along with the db prefix. + */ + public function get_table() { + return $this->wpdb->prefix . 'aioseo_posts'; + } + + /** + * Determines if the AIOSEO database table exists. + * + * @return bool True if the table is found. + */ + public function aioseo_exists() { + return $this->wpdb_helper->table_exists( $this->get_table() ) === true; + } + + /** + * Retrieves the option where the global settings exist. + * + * @return array The option where the global settings exist. + */ + public function get_global_option() { + return \json_decode( \get_option( 'aioseo_options', '' ), true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/asset-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/asset-helper.php new file mode 100644 index 00000000..61267032 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/asset-helper.php @@ -0,0 +1,98 @@ +get_dependency_handles( $handle ) as $other_handle ) { + $urls[ $other_handle ] = $this->get_asset_url( $other_handle ); + } + + return $urls; + } + + /** + * Recursively retrieves all dependencies of a given handle. + * + * @param string $handle The handle. + * + * @return string[] All dependencies of the given handle. + */ + public function get_dependency_handles( $handle ) { + $scripts = \wp_scripts(); + + if ( ! isset( $scripts->registered[ $handle ] ) ) { + return []; + } + + $obj = $scripts->registered[ $handle ]; + $deps = $obj->deps; + foreach ( $obj->deps as $other_handle ) { + $nested_deps = $this->get_dependency_handles( $other_handle ); + if ( ! $nested_deps ) { + continue; + } + + // Place nested dependencies before primary dependencies, they need to be loaded first. + $deps = \array_merge( $nested_deps, $deps ); + } + + // Array unique keeps the first of each element so dependencies will be as early as they're required. + return \array_values( \array_unique( $deps ) ); + } + + /** + * Gets the URL of a given asset. + * + * This logic is copied from WP_Scripts::do_item as unfortunately that logic is not properly isolated. + * + * @param string $handle The handle of the asset. + * + * @return string|false The URL of the asset or false if the asset does not exist. + */ + public function get_asset_url( $handle ) { + $scripts = \wp_scripts(); + + if ( ! isset( $scripts->registered[ $handle ] ) ) { + return false; + } + + $obj = $scripts->registered[ $handle ]; + + if ( $obj->ver === null ) { + $ver = ''; + } + else { + $ver = ( $obj->ver ) ? $obj->ver : $scripts->default_version; + } + if ( isset( $scripts->args[ $handle ] ) ) { + $ver = ( $ver ) ? $ver . '&' . $scripts->args[ $handle ] : $scripts->args[ $handle ]; + } + + $src = $obj->src; + + if ( ! \preg_match( '|^(https?:)?//|', $src ) && ! ( $scripts->content_url && \strpos( $src, $scripts->content_url ) === 0 ) ) { + $src = $scripts->base_url . $src; + } + + if ( ! empty( $ver ) ) { + $src = \add_query_arg( 'ver', $ver, $src ); + } + + /** This filter is documented in wp-includes/class.wp-scripts.php */ + return \esc_url( \apply_filters( 'script_loader_src', $src, $handle ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/attachment-cleanup-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/attachment-cleanup-helper.php new file mode 100644 index 00000000..5e5da446 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/attachment-cleanup-helper.php @@ -0,0 +1,73 @@ +show_errors; + $wpdb->show_errors = false; + } + + $indexable_table = Model::get_table_name( 'Indexable' ); + + $delete_query = "DELETE FROM $indexable_table WHERE object_type = 'post' AND object_sub_type = 'attachment'"; + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + $wpdb->query( $delete_query ); + // phpcs:enable + + if ( $suppress_errors ) { + $wpdb->show_errors = $show_errors; + } + } + + /** + * Cleans all attachment links in the links table from target indexable ids. + * + * @param bool $suppress_errors Whether to suppress db errors when running the cleanup query. + * + * @return void + */ + public function clean_attachment_links_from_target_indexable_ids( $suppress_errors ) { + global $wpdb; + + if ( $suppress_errors ) { + // If migrations haven't been completed successfully the following may give false errors. So suppress them. + $show_errors = $wpdb->show_errors; + $wpdb->show_errors = false; + } + + $links_table = Model::get_table_name( 'SEO_Links' ); + + $query = "UPDATE $links_table SET target_indexable_id = NULL WHERE type = 'image-in'"; + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + $wpdb->query( $query ); + // phpcs:enable + + if ( $suppress_errors ) { + $wpdb->show_errors = $show_errors; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/author-archive-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/author-archive-helper.php new file mode 100644 index 00000000..dd8ab93d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/author-archive-helper.php @@ -0,0 +1,182 @@ +options_helper = $options_helper; + $this->post_type_helper = $post_type_helper; + } + + /** + * Gets the array of post types that are shown on an author's archive. + * + * @return array The post types that are shown on an author's archive. + */ + public function get_author_archive_post_types() { + /** + * Filters the array of post types that are shown on an author's archive. + * + * @param array $args The post types that are shown on an author archive. + */ + return \apply_filters( 'wpseo_author_archive_post_types', [ 'post' ] ); + } + + /** + * Returns whether the author has at least one public post. + * + * @param int $author_id The author ID. + * + * @return bool|null Whether the author has at least one public post. + */ + public function author_has_public_posts( $author_id ) { + // First check if the author has at least one public post. + $has_public_post = $this->author_has_a_public_post( $author_id ); + if ( $has_public_post ) { + return true; + } + + // Then check if the author has at least one post where the status is the same as the global setting. + $has_public_post_depending_on_the_global_setting = $this->author_has_a_post_with_is_public_null( $author_id ); + if ( $has_public_post_depending_on_the_global_setting ) { + return null; + } + + return false; + } + + /** + * Returns whether the author has at least one public post. + * + * **Note**: It uses WP_Query to determine the number of posts, + * not the indexables table. + * + * @param string $user_id The user ID. + * + * @return bool Whether the author has at least one public post. + */ + public function author_has_public_posts_wp( $user_id ) { + $post_types = \array_intersect( $this->get_author_archive_post_types(), $this->post_type_helper->get_indexable_post_types() ); + $public_post_stati = \array_values( \array_filter( \get_post_stati(), 'is_post_status_viewable' ) ); + + $args = [ + 'post_type' => $post_types, + 'post_status' => $public_post_stati, + 'author' => $user_id, + 'update_post_term_cache' => false, + 'update_post_meta_cache' => false, + 'no_found_rows' => true, + 'fields' => 'ids', + 'posts_per_page' => 1, + ]; + + $query = new WP_Query( $args ); + + if ( $query->have_posts() ) { + return true; + } + + return false; + } + + /** + * Checks whether author archives are disabled. + * + * @return bool `true` if author archives are disabled, `false` if not. + */ + public function are_disabled() { + return $this->options_helper->get( 'disable-author' ); + } + + /** + * Returns whether the author has at least one public post. + * + * @codeCoverageIgnore It looks for the first ID through the ORM and converts it to a boolean. + * + * @param int $author_id The author ID. + * + * @return bool Whether the author has at least one public post. + */ + protected function author_has_a_public_post( $author_id ) { + $cache_key = 'author_has_a_public_post_' . $author_id; + $indexable_exists = \wp_cache_get( $cache_key ); + + if ( $indexable_exists === false ) { + $indexable_exists = Model::of_type( 'Indexable' ) + ->select( 'id' ) + ->where( 'object_type', 'post' ) + ->where_in( 'object_sub_type', $this->get_author_archive_post_types() ) + ->where( 'author_id', $author_id ) + ->where( 'is_public', 1 ) + ->find_one(); + + if ( $indexable_exists === false ) { + // Cache no results to prevent full table scanning on authors with no public posts. + \wp_cache_set( $cache_key, 0, '', \wp_rand( ( 2 * \HOUR_IN_SECONDS ), ( 4 * \HOUR_IN_SECONDS ) ) ); + } + } + + return (bool) $indexable_exists; + } + + /** + * Returns whether the author has at least one post with the is public null. + * + * @codeCoverageIgnore It looks for the first ID through the ORM and converts it to a boolean. + * + * @param int $author_id The author ID. + * + * @return bool Whether the author has at least one post with the is public null. + */ + protected function author_has_a_post_with_is_public_null( $author_id ) { + $cache_key = 'author_has_a_post_with_is_public_null_' . $author_id; + $indexable_exists = \wp_cache_get( $cache_key ); + + if ( $indexable_exists === false ) { + $indexable_exists = Model::of_type( 'Indexable' ) + ->select( 'id' ) + ->where( 'object_type', 'post' ) + ->where_in( 'object_sub_type', $this->get_author_archive_post_types() ) + ->where( 'author_id', $author_id ) + ->where_null( 'is_public' ) + ->find_one(); + + if ( $indexable_exists === false ) { + // Cache no results to prevent full table scanning on authors with no is public null posts. + \wp_cache_set( $cache_key, 0, '', \wp_rand( ( 2 * \HOUR_IN_SECONDS ), ( 4 * \HOUR_IN_SECONDS ) ) ); + } + } + + return (bool) $indexable_exists; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/blocks-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/blocks-helper.php new file mode 100644 index 00000000..ab6e5b76 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/blocks-helper.php @@ -0,0 +1,100 @@ +post = $post; + } + + /** + * Returns all blocks in a given post. + * + * @param int $post_id The post id. + * + * @return array The blocks in a block-type => WP_Block_Parser_Block[] format. + */ + public function get_all_blocks_from_post( $post_id ) { + if ( ! $this->has_blocks_support() ) { + return []; + } + + $post = $this->post->get_post( $post_id ); + return $this->get_all_blocks_from_content( $post->post_content ); + } + + /** + * Returns all blocks in a given content. + * + * @param string $content The content. + * + * @return array The blocks in a block-type => WP_Block_Parser_Block[] format. + */ + public function get_all_blocks_from_content( $content ) { + if ( ! $this->has_blocks_support() ) { + return []; + } + + $collection = []; + $blocks = \parse_blocks( $content ); + return $this->collect_blocks( $blocks, $collection ); + } + + /** + * Checks if the installation has blocks support. + * + * @codeCoverageIgnore It only checks if a WordPress function exists. + * + * @return bool True when function parse_blocks exists. + */ + protected function has_blocks_support() { + return \function_exists( 'parse_blocks' ); + } + + /** + * Collects an array of blocks into an organised collection. + * + * @param WP_Block_Parser_Block[] $blocks The blocks. + * @param array $collection The collection. + * + * @return array The blocks in a block-type => WP_Block_Parser_Block[] format. + */ + private function collect_blocks( $blocks, $collection ) { + foreach ( $blocks as $block ) { + if ( empty( $block['blockName'] ) ) { + continue; + } + + if ( ! isset( $collection[ $block['blockName'] ] ) || ! \is_array( $collection[ $block['blockName'] ] ) ) { + $collection[ $block['blockName'] ] = []; + } + $collection[ $block['blockName'] ][] = $block; + + if ( isset( $block['innerBlocks'] ) ) { + $collection = $this->collect_blocks( $block['innerBlocks'], $collection ); + } + } + + return $collection; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/capability-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/capability-helper.php new file mode 100644 index 00000000..3038d73b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/capability-helper.php @@ -0,0 +1,86 @@ +has_any( [ 'wpseo_manage_options', $capability ] ); + } + + /** + * Retrieves the users that have the specified capability. + * + * @param string $capability The name of the capability. + * + * @return array The users that have the capability. + */ + public function get_applicable_users( $capability ) { + $applicable_roles = $this->get_applicable_roles( $capability ); + + if ( $applicable_roles === [] ) { + return []; + } + + return \get_users( [ 'role__in' => $applicable_roles ] ); + } + + /** + * Retrieves the roles that have the specified capability. + * + * @param string $capability The name of the capability. + * + * @return array The names of the roles that have the capability. + */ + public function get_applicable_roles( $capability ) { + $roles = \wp_roles(); + $role_names = $roles->get_names(); + + $applicable_roles = []; + foreach ( \array_keys( $role_names ) as $role_name ) { + $role = $roles->get_role( $role_name ); + + if ( ! $role ) { + continue; + } + + // Add role if it has the capability. + if ( \array_key_exists( $capability, $role->capabilities ) && $role->capabilities[ $capability ] === true ) { + $applicable_roles[] = $role_name; + } + } + + return $applicable_roles; + } + + /** + * Checks if the current user has at least one of the supplied capabilities. + * + * @param array $capabilities Capabilities to check against. + * + * @return bool True if the user has at least one capability. + */ + private function has_any( array $capabilities ) { + foreach ( $capabilities as $capability ) { + if ( \current_user_can( $capability ) ) { + return true; + } + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/crawl-cleanup-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/crawl-cleanup-helper.php new file mode 100644 index 00000000..73d0d966 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/crawl-cleanup-helper.php @@ -0,0 +1,314 @@ +current_page_helper = $current_page_helper; + $this->options_helper = $options_helper; + $this->url_helper = $url_helper; + $this->redirect_helper = $redirect_helper; + } + + /** + * Checks if the current URL is not robots, sitemap, empty or user is logged in. + * + * @return bool True if the current URL is a valid URL. + */ + public function should_avoid_redirect() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- We're not processing anything yet... + if ( \is_robots() || \get_query_var( 'sitemap' ) || empty( $_GET ) || \is_user_logged_in() ) { + return true; + } + return false; + } + + /** + * Returns the list of the allowed extra vars. + * + * @return array The list of the allowed extra vars. + */ + public function get_allowed_extravars() { + $default_allowed_extravars = [ + 'utm_source', + 'utm_medium', + 'utm_campaign', + 'utm_term', + 'utm_content', + 'gclid', + 'gtm_debug', + ]; + + /** + * Filter: 'Yoast\WP\SEO\allowlist_permalink_vars' - Allows plugins to register their own variables not to clean. + * + * @since 19.2.0 + * + * @param array $allowed_extravars The list of the allowed vars (empty by default). + */ + $allowed_extravars = \apply_filters( 'Yoast\WP\SEO\allowlist_permalink_vars', $default_allowed_extravars ); + + $clean_permalinks_extra_variables = $this->options_helper->get( 'clean_permalinks_extra_variables' ); + + if ( $clean_permalinks_extra_variables !== '' ) { + $allowed_extravars = \array_merge( $allowed_extravars, \explode( ',', $clean_permalinks_extra_variables ) ); + } + return $allowed_extravars; + } + + /** + * Gets the allowed query vars from the current URL. + * + * @param string $current_url The current URL. + * @return array is_allowed and allowed_query. + */ + public function allowed_params( $current_url ) { + // This is a Premium plugin-only function: Allows plugins to register their own variables not to clean. + $allowed_extravars = $this->get_allowed_extravars(); + + $allowed_query = []; + + $parsed_url = \wp_parse_url( $current_url, \PHP_URL_QUERY ); + + $query = $this->url_helper->parse_str_params( $parsed_url ); + + if ( ! empty( $allowed_extravars ) ) { + foreach ( $allowed_extravars as $get ) { + $get = \trim( $get ); + if ( isset( $query[ $get ] ) ) { + $allowed_query[ $get ] = \rawurlencode_deep( $query[ $get ] ); + unset( $query[ $get ] ); + } + } + } + return [ + 'query' => $query, + 'allowed_query' => $allowed_query, + ]; + } + + /** + * Returns the proper URL for singular pages. + * + * @return string The proper URL. + */ + public function singular_url() { + + global $post; + $proper_url = \get_permalink( $post->ID ); + $page = \get_query_var( 'page' ); + + if ( $page && $page !== 1 ) { + $the_post = \get_post( $post->ID ); + $page_count = \substr_count( $the_post->post_content, '' ); + $proper_url = \user_trailingslashit( \trailingslashit( $proper_url ) . $page ); + if ( $page > ( $page_count + 1 ) ) { + $proper_url = \user_trailingslashit( \trailingslashit( $proper_url ) . ( $page_count + 1 ) ); + } + } + + // Fix reply to comment links, whoever decided this should be a GET variable? + // phpcs:ignore WordPress.Security -- We know this is scary. + if ( isset( $_SERVER['REQUEST_URI'] ) && \preg_match( '`(\?replytocom=[^&]+)`', \sanitize_text_field( $_SERVER['REQUEST_URI'] ), $matches ) ) { + $proper_url .= \str_replace( '?replytocom=', '#comment-', $matches[0] ); + } + unset( $matches ); + + return $proper_url; + } + + /** + * Returns the proper URL for front page. + * + * @return string The proper URL. + */ + public function front_page_url() { + if ( $this->current_page_helper->is_home_posts_page() ) { + return \home_url( '/' ); + } + if ( $this->current_page_helper->is_home_static_page() ) { + return \get_permalink( $GLOBALS['post']->ID ); + } + return ''; + } + + /** + * Returns the proper URL for 404 page. + * + * @param string $current_url The current URL. + * @return string The proper URL. + */ + public function page_not_found_url( $current_url ) { + if ( ! \is_multisite() || \is_subdomain_install() || ! \is_main_site() ) { + return ''; + } + + if ( $current_url !== \home_url() . '/blog/' && $current_url !== \home_url() . '/blog' ) { + return ''; + } + + if ( $this->current_page_helper->is_home_static_page() ) { + return \get_permalink( \get_option( 'page_for_posts' ) ); + } + + return \home_url(); + } + + /** + * Returns the proper URL for taxonomy page. + * + * @return string The proper URL. + */ + public function taxonomy_url() { + global $wp_query; + $term = $wp_query->get_queried_object(); + + if ( \is_feed() ) { + return \get_term_feed_link( $term->term_id, $term->taxonomy ); + } + return \get_term_link( $term, $term->taxonomy ); + } + + /** + * Returns the proper URL for search page. + * + * @return string The proper URL. + */ + public function search_url() { + $s = \get_search_query(); + return \home_url() . '/?s=' . \rawurlencode( $s ); + } + + /** + * Returns the proper URL for url with page param. + * + * @param string $proper_url The proper URL. + * @return string The proper URL. + */ + public function query_var_page_url( $proper_url ) { + global $wp_query; + if ( \is_search( $proper_url ) ) { + return \home_url() . '/page/' . $wp_query->query_vars['paged'] . '/?s=' . \rawurlencode( \get_search_query() ); + } + return \user_trailingslashit( \trailingslashit( $proper_url ) . 'page/' . $wp_query->query_vars['paged'] ); + } + + /** + * Returns true if query is with page param. + * + * @param string $proper_url The proper URL. + * @return bool is query with page param. + */ + public function is_query_var_page( $proper_url ) { + global $wp_query; + if ( empty( $proper_url ) || $wp_query->query_vars['paged'] === 0 || $wp_query->post_count === 0 ) { + return false; + } + return true; + } + + /** + * Redirects clean permalink. + * + * @param string $proper_url The proper URL. + * @return void + */ + public function do_clean_redirect( $proper_url ) { + $this->redirect_helper->set_header( 'Content-Type: redirect', true ); + $this->redirect_helper->remove_header( 'Content-Type' ); + $this->redirect_helper->remove_header( 'Last-Modified' ); + $this->redirect_helper->remove_header( 'X-Pingback' ); + + $message = \sprintf( + /* translators: %1$s: Yoast SEO */ + \__( '%1$s: unregistered URL parameter removed. See %2$s', 'wordpress-seo' ), + 'Yoast SEO', + 'https://yoa.st/advanced-crawl-settings' + ); + + $this->redirect_helper->do_safe_redirect( $proper_url, 301, $message ); + } + + /** + * Gets the type of URL. + * + * @return string The type of URL. + */ + public function get_url_type() { + if ( \is_singular() ) { + return 'singular_url'; + } + if ( \is_front_page() ) { + return 'front_page_url'; + } + if ( $this->current_page_helper->is_posts_page() ) { + return 'page_for_posts_url'; + } + if ( \is_category() || \is_tag() || \is_tax() ) { + return 'taxonomy_url'; + } + if ( \is_search() ) { + return 'search_url'; + } + if ( \is_404() ) { + return 'page_not_found_url'; + } + return ''; + } + + /** + * Returns the proper URL for posts page. + * + * @return string The proper URL. + */ + public function page_for_posts_url() { + return \get_permalink( \get_option( 'page_for_posts' ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/curl-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/curl-helper.php new file mode 100644 index 00000000..f4c5acaa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/curl-helper.php @@ -0,0 +1,33 @@ +wp_query_wrapper = $wp_query_wrapper; + } + + /** + * Returns the page type for the current request. + * + * @codeCoverageIgnore It just depends on other functions for its result. + * + * @return string Page type. + */ + public function get_page_type() { + switch ( true ) { + case $this->is_search_result(): + return 'Search_Result_Page'; + case $this->is_static_posts_page(): + return 'Static_Posts_Page'; + case $this->is_home_static_page(): + return 'Static_Home_Page'; + case $this->is_home_posts_page(): + return 'Home_Page'; + case $this->is_simple_page(): + return 'Post_Type'; + case $this->is_post_type_archive(): + return 'Post_Type_Archive'; + case $this->is_term_archive(): + return 'Term_Archive'; + case $this->is_author_archive(): + return 'Author_Archive'; + case $this->is_date_archive(): + return 'Date_Archive'; + case $this->is_404(): + return 'Error_Page'; + } + + return 'Fallback'; + } + + /** + * Checks if the currently opened page is a simple page. + * + * @return bool Whether the currently opened page is a simple page. + */ + public function is_simple_page() { + return $this->get_simple_page_id() > 0; + } + + /** + * Returns the id of the currently opened page. + * + * @return int The id of the currently opened page. + */ + public function get_simple_page_id() { + if ( \is_singular() ) { + return \get_the_ID(); + } + + if ( $this->is_posts_page() ) { + return \get_option( 'page_for_posts' ); + } + + /** + * Filter: Allow changing the default page id. + * + * @param int $page_id The default page id. + */ + return \apply_filters( 'wpseo_frontend_page_type_simple_page_id', 0 ); + } + + /** + * Returns the id of the currently opened author archive. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return int The id of the currently opened author archive. + */ + public function get_author_id() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->get( 'author' ); + } + + /** + * Returns the id of the front page. + * + * @return int The id of the front page. 0 if the front page is not a static page. + */ + public function get_front_page_id() { + if ( \get_option( 'show_on_front' ) !== 'page' ) { + return 0; + } + + return (int) \get_option( 'page_on_front' ); + } + + /** + * Returns the id of the currently opened term archive. + * + * @return int The id of the currently opened term archive. + */ + public function get_term_id() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + if ( $wp_query->is_tax() || $wp_query->is_tag() || $wp_query->is_category() ) { + $queried_object = $wp_query->get_queried_object(); + if ( $queried_object && ! \is_wp_error( $queried_object ) ) { + return $queried_object->term_id; + } + } + + return 0; + } + + /** + * Returns the post type of the main query. + * + * @return string The post type of the main query. + */ + public function get_queried_post_type() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + $post_type = $wp_query->get( 'post_type' ); + if ( \is_array( $post_type ) ) { + $post_type = \reset( $post_type ); + } + + return $post_type; + } + + /** + * Returns the permalink of the currently opened date archive. + * If the permalink was cached, it returns this permalink. + * If not, we call another function to get the permalink through wp_query. + * + * @return string The permalink of the currently opened date archive. + */ + public function get_date_archive_permalink() { + static $date_archive_permalink; + + if ( isset( $date_archive_permalink ) ) { + return $date_archive_permalink; + } + + $date_archive_permalink = $this->get_non_cached_date_archive_permalink(); + + return $date_archive_permalink; + } + + /** + * Determine whether this is the homepage and shows posts. + * + * @return bool Whether or not the current page is the homepage that displays posts. + */ + public function is_home_posts_page() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + if ( ! $wp_query->is_home() ) { + return false; + } + + /* + * Whether the static page's `Homepage` option is actually not set to a page. + * Otherwise WordPress proceeds to handle the homepage as a `Your latest posts` page. + */ + if ( (int) \get_option( 'page_on_front' ) === 0 ) { + return true; + } + + return \get_option( 'show_on_front' ) === 'posts'; + } + + /** + * Determine whether this is the static frontpage. + * + * @return bool Whether or not the current page is a static frontpage. + */ + public function is_home_static_page() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + if ( ! $wp_query->is_front_page() ) { + return false; + } + + if ( \get_option( 'show_on_front' ) !== 'page' ) { + return false; + } + + return $wp_query->is_page( \get_option( 'page_on_front' ) ); + } + + /** + * Determine whether this is the static posts page. + * + * @return bool Whether or not the current page is a static posts page. + */ + public function is_static_posts_page() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + $queried_object = $wp_query->get_queried_object(); + + return ( + $wp_query->is_posts_page + && \is_a( $queried_object, WP_Post::class ) + && $queried_object->post_type === 'page' + ); + } + + /** + * Determine whether this is the statically set posts page, when it's not the frontpage. + * + * @return bool Whether or not it's a non-frontpage, statically set posts page. + */ + public function is_posts_page() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + if ( ! $wp_query->is_home() ) { + return false; + } + + return \get_option( 'show_on_front' ) === 'page'; + } + + /** + * Determine whether this is a post type archive. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether nor not the current page is a post type archive. + */ + public function is_post_type_archive() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_post_type_archive(); + } + + /** + * Determine whether this is a term archive. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether nor not the current page is a term archive. + */ + public function is_term_archive() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_tax || $wp_query->is_tag || $wp_query->is_category; + } + + /** + * Determine whether this is an attachment page. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether nor not the current page is an attachment page. + */ + public function is_attachment() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_attachment; + } + + /** + * Determine whether this is an author archive. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether nor not the current page is an author archive. + */ + public function is_author_archive() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_author(); + } + + /** + * Determine whether this is an date archive. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether nor not the current page is an date archive. + */ + public function is_date_archive() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_date(); + } + + /** + * Determine whether this is a search result. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether nor not the current page is a search result. + */ + public function is_search_result() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_search(); + } + + /** + * Determine whether this is a 404 page. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether nor not the current page is a 404 page. + */ + public function is_404() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_404(); + } + + /** + * Checks if the current page is the post format archive. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether or not the current page is the post format archive. + */ + public function is_post_format_archive() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_tax( 'post_format' ); + } + + /** + * Determine whether this page is an taxonomy archive page for multiple terms (url: /term-1,term2/). + * + * @return bool Whether or not the current page is an archive page for multiple terms. + */ + public function is_multiple_terms_page() { + if ( ! $this->is_term_archive() ) { + return false; + } + + return $this->count_queried_terms() > 1; + } + + /** + * Checks whether the current page is paged. + * + * @codeCoverageIgnore This method only calls a WordPress function. + * + * @return bool Whether the current page is paged. + */ + public function is_paged() { + return \is_paged(); + } + + /** + * Checks if the current page is the front page. + * + * @codeCoverageIgnore It wraps WordPress functionality. + * + * @return bool Whether or not the current page is the front page. + */ + public function is_front_page() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + return $wp_query->is_front_page(); + } + + /** + * Retrieves the current admin page. + * + * @codeCoverageIgnore It only wraps a global WordPress variable. + * + * @return string The current page. + */ + public function get_current_admin_page() { + global $pagenow; + + return $pagenow; + } + + /** + * Check if the current opened page is a Yoast SEO page. + * + * @return bool True when current page is a yoast seo plugin page. + */ + public function is_yoast_seo_page() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && \is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, We are only using the variable in the strpos function. + $current_page = \wp_unslash( $_GET['page'] ); + return \strpos( $current_page, 'wpseo_' ) === 0; + } + return false; + } + + /** + * Returns the current Yoast SEO page. + * (E.g. the `page` query variable in the URL). + * + * @return string The current Yoast SEO page. + */ + public function get_current_yoast_seo_page() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && \is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return \sanitize_text_field( \wp_unslash( $_GET['page'] ) ); + } + + return ''; + } + + /** + * Checks if the current global post is the privacy policy page. + * + * @return bool current global post is set as privacy page + */ + public function current_post_is_privacy_policy() { + global $post; + + if ( ! isset( $post->ID ) ) { + return false; + } + + return \intval( $post->ID ) === \intval( \get_option( 'wp_page_for_privacy_policy', false ) ); + } + + /** + * Returns the permalink of the currently opened date archive. + * + * @return string The permalink of the currently opened date archive. + */ + protected function get_non_cached_date_archive_permalink() { + $date_archive_permalink = ''; + $wp_query = $this->wp_query_wrapper->get_main_query(); + + if ( $wp_query->is_day() ) { + $date_archive_permalink = \get_day_link( $wp_query->get( 'year' ), $wp_query->get( 'monthnum' ), $wp_query->get( 'day' ) ); + } + if ( $wp_query->is_month() ) { + $date_archive_permalink = \get_month_link( $wp_query->get( 'year' ), $wp_query->get( 'monthnum' ) ); + } + if ( $wp_query->is_year() ) { + $date_archive_permalink = \get_year_link( $wp_query->get( 'year' ) ); + } + + return $date_archive_permalink; + } + + /** + * Counts the total amount of queried terms. + * + * @codeCoverageIgnore This relies too much on WordPress dependencies. + * + * @return int The amoumt of queried terms. + */ + protected function count_queried_terms() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + $term = $wp_query->get_queried_object(); + + $queried_terms = $wp_query->tax_query->queried_terms; + if ( \is_null( $term ) || empty( $queried_terms[ $term->taxonomy ]['terms'] ) ) { + return 0; + } + + return \count( $queried_terms[ $term->taxonomy ]['terms'] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/date-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/date-helper.php new file mode 100644 index 00000000..1eb30cd3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/date-helper.php @@ -0,0 +1,120 @@ +format( $format ); + } + + /** + * Formats the given timestamp to the needed format. + * + * @param int $timestamp The timestamp to use for the formatting. + * @param string $format The format that the passed date should be in. + * + * @return string The formatted date. + */ + public function format_timestamp( $timestamp, $format = \DATE_W3C ) { + if ( ! \is_string( $timestamp ) && ! \is_int( $timestamp ) ) { + return $timestamp; + } + + $immutable_date = \date_create_immutable_from_format( 'U', $timestamp, new DateTimeZone( 'UTC' ) ); + + if ( ! $immutable_date ) { + return $timestamp; + } + + return $immutable_date->format( $format ); + } + + /** + * Formats a given date in UTC TimeZone format and translate it to the set language. + * + * @param string $date String representing the date / time. + * @param string $format The format that the passed date should be in. + * + * @return string The formatted and translated date. + */ + public function format_translated( $date, $format = \DATE_W3C ) { + return \date_i18n( $format, $this->format( $date, 'U' ) ); + } + + /** + * Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT). + * + * @return int The current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT). + */ + public function current_time() { + return \time(); + } + + /** + * Check if a string is a valid datetime. + * + * @param string $datetime String input to check as valid input for DateTime class. + * + * @return bool True when datetime is valid. + */ + public function is_valid_datetime( $datetime ) { + if ( $datetime === null ) { + /* + * While not "officially" supported, `null` will be handled as `"now"` until PHP 9.0. + * @link https://3v4l.org/tYp2k + */ + return true; + } + + if ( \is_string( $datetime ) && \substr( $datetime, 0, 1 ) === '-' ) { + return false; + } + + try { + return new DateTime( $datetime ) !== false; + } catch ( Exception $exception ) { + return false; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/environment-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/environment-helper.php new file mode 100644 index 00000000..288b0c8a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/environment-helper.php @@ -0,0 +1,33 @@ +get_wp_environment() === 'production'; + } + + /** + * Determines on which environment WordPress is running. + * + * @return string The current WordPress environment. + */ + public function get_wp_environment() { + return \wp_get_environment_type(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/first-time-configuration-notice-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/first-time-configuration-notice-helper.php new file mode 100644 index 00000000..27b3c10a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/first-time-configuration-notice-helper.php @@ -0,0 +1,182 @@ +options_helper = $options_helper; + $this->indexing_helper = $indexing_helper; + $this->show_alternate_message = false; + } + + /** + * Determines whether and where the "First-time SEO Configuration" admin notice should be displayed. + * + * @return bool Whether the "First-time SEO Configuration" admin notice should be displayed. + */ + public function should_display_first_time_configuration_notice() { + if ( ! $this->options_helper->get( 'dismiss_configuration_workout_notice', false ) === false ) { + return false; + } + if ( ! $this->on_wpseo_admin_page_or_dashboard() ) { + return false; + } + return $this->first_time_configuration_not_finished(); + } + + /** + * Gets the first time configuration title based on the show_alternate_message boolean + * + * @return string + */ + public function get_first_time_configuration_title() { + return ( ! $this->show_alternate_message ) ? \__( 'First-time SEO configuration', 'wordpress-seo' ) : \__( 'SEO configuration', 'wordpress-seo' ); + } + + /** + * Determines if the first time configuration is completely finished. + * + * @return bool + */ + public function first_time_configuration_not_finished() { + if ( ! $this->user_can_do_first_time_configuration() ) { + return false; + } + + if ( $this->is_first_time_configuration_finished() ) { + return false; + } + + if ( $this->options_helper->get( 'first_time_install', false ) !== false ) { + return ! $this->are_site_representation_name_and_logo_set() || $this->indexing_helper->get_unindexed_count() > 0; + } + + if ( $this->indexing_helper->is_initial_indexing() === false ) { + return false; + } + + if ( $this->indexing_helper->is_finished_indexables_indexing() === true ) { + return false; + } + + $this->show_alternate_message = true; + + return ! $this->are_site_representation_name_and_logo_set(); + } + + /** + * Whether the user can do the first-time configuration. + * + * @return bool Whether the current user can do the first-time configuration. + */ + private function user_can_do_first_time_configuration() { + return \current_user_can( 'wpseo_manage_options' ); + } + + /** + * Whether the user is currently visiting one of our admin pages or the WordPress dashboard. + * + * @return bool Whether the current page is a Yoast SEO admin page + */ + private function on_wpseo_admin_page_or_dashboard() { + $pagenow = $GLOBALS['pagenow']; + + // Show on the WP Dashboard. + if ( $pagenow === 'index.php' ) { + return true; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && \is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information and only comparing the variable in a condition. + $page_from_get = \wp_unslash( $_GET['page'] ); + + // Show on Yoast SEO pages, with some exceptions. + if ( $pagenow === 'admin.php' && \strpos( $page_from_get, 'wpseo' ) === 0 ) { + $exceptions = [ + 'wpseo_installation_successful', + 'wpseo_installation_successful_free', + ]; + + if ( ! \in_array( $page_from_get, $exceptions, true ) ) { + return true; + } + } + } + + return false; + } + + /** + * Whether all steps of the first-time configuration have been finished. + * + * @return bool Whether the first-time configuration has been finished. + */ + private function is_first_time_configuration_finished() { + $configuration_finished_steps = $this->options_helper->get( 'configuration_finished_steps', [] ); + + return \count( $configuration_finished_steps ) === 3; + } + + /** + * Whether the site representation name and logo have been set. + * + * @return bool Whether the site representation name and logo have been set. + */ + private function are_site_representation_name_and_logo_set() { + $company_or_person = $this->options_helper->get( 'company_or_person', '' ); + + if ( $company_or_person === '' ) { + return false; + } + + if ( $company_or_person === 'company' ) { + return ! empty( $this->options_helper->get( 'company_name' ) ) && ! empty( $this->options_helper->get( 'company_logo', '' ) ); + } + + return ! empty( $this->options_helper->get( 'company_or_person_user_id' ) ) && ! empty( $this->options_helper->get( 'person_logo', '' ) ); + } + + /** + * Getter for the show alternate message boolean. + * + * @return bool + */ + public function should_show_alternate_message() { + return $this->show_alternate_message; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/home-url-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/home-url-helper.php new file mode 100644 index 00000000..17197a78 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/home-url-helper.php @@ -0,0 +1,49 @@ +get() ); + } + + return static::$parsed_home_url; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/image-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/image-helper.php new file mode 100644 index 00000000..560c7eb9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/image-helper.php @@ -0,0 +1,417 @@ +indexable_repository = $indexable_repository; + $this->seo_links_repository = $seo_links_repository; + $this->options_helper = $options; + $this->url_helper = $url_helper; + } + + /** + * Determines whether or not the wanted attachment is considered valid. + * + * @param int $attachment_id The attachment ID to get the attachment by. + * + * @return bool Whether or not the attachment is valid. + */ + public function is_valid_attachment( $attachment_id ) { + if ( ! \wp_attachment_is_image( $attachment_id ) ) { + return false; + } + + $post_mime_type = \get_post_mime_type( $attachment_id ); + if ( $post_mime_type === false ) { + return false; + } + + return $this->is_valid_image_type( $post_mime_type ); + } + + /** + * Checks if the given extension is a valid extension + * + * @param string $image_extension The image extension. + * + * @return bool True when valid. + */ + public function is_extension_valid( $image_extension ) { + return \in_array( $image_extension, static::$valid_image_extensions, true ); + } + + /** + * Determines whether the passed mime type is a valid image type. + * + * @param string $mime_type The detected mime type. + * + * @return bool Whether or not the attachment is a valid image type. + */ + public function is_valid_image_type( $mime_type ) { + return \in_array( $mime_type, static::$valid_image_types, true ); + } + + /** + * Retrieves the image source for an attachment. + * + * @param int $attachment_id The attachment. + * @param string $image_size The image size to retrieve. + * + * @return string The image url or an empty string when not found. + */ + public function get_attachment_image_source( $attachment_id, $image_size = 'full' ) { + $attachment = \wp_get_attachment_image_src( $attachment_id, $image_size ); + + if ( ! $attachment ) { + return ''; + } + + return $attachment[0]; + } + + /** + * Retrieves the ID of the featured image. + * + * @param int $post_id The post id to get featured image id for. + * + * @return int|bool ID when found, false when not. + */ + public function get_featured_image_id( $post_id ) { + if ( ! \has_post_thumbnail( $post_id ) ) { + return false; + } + + return \get_post_thumbnail_id( $post_id ); + } + + /** + * Gets the image url from the content. + * + * @param int $post_id The post id to extract the images from. + * + * @return string The image url or an empty string when not found. + */ + public function get_post_content_image( $post_id ) { + $image_url = $this->get_first_usable_content_image_for_post( $post_id ); + + if ( $image_url === null ) { + return ''; + } + + return $image_url; + } + + /** + * Gets the first image url of a gallery. + * + * @param int $post_id Post ID to use. + * + * @return string The image url or an empty string when not found. + */ + public function get_gallery_image( $post_id ) { + $post = \get_post( $post_id ); + if ( \strpos( $post->post_content, '[gallery' ) === false ) { + return ''; + } + + $images = \get_post_gallery_images( $post ); + if ( empty( $images ) ) { + return ''; + } + + return \reset( $images ); + } + + /** + * Gets the image url from the term content. + * + * @param int $term_id The term id to extract the images from. + * + * @return string The image url or an empty string when not found. + */ + public function get_term_content_image( $term_id ) { + $image_url = $this->get_first_content_image_for_term( $term_id ); + + if ( $image_url === null ) { + return ''; + } + + return $image_url; + } + + /** + * Retrieves the caption for an attachment. + * + * @param int $attachment_id Attachment ID. + * + * @return string The caption when found, empty string when no caption is found. + */ + public function get_caption( $attachment_id ) { + $caption = \wp_get_attachment_caption( $attachment_id ); + if ( ! empty( $caption ) ) { + return $caption; + } + + $caption = \get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ); + if ( ! empty( $caption ) ) { + return $caption; + } + + return ''; + } + + /** + * Retrieves the attachment metadata. + * + * @param int $attachment_id Attachment ID. + * + * @return array The metadata, empty array when no metadata is found. + */ + public function get_metadata( $attachment_id ) { + $metadata = \wp_get_attachment_metadata( $attachment_id ); + if ( ! $metadata || ! \is_array( $metadata ) ) { + return []; + } + + return $metadata; + } + + /** + * Retrieves the attachment image url. + * + * @param int $attachment_id Attachment ID. + * @param string $size The size to get. + * + * @return string The url when found, empty string otherwise. + */ + public function get_attachment_image_url( $attachment_id, $size ) { + $url = \wp_get_attachment_image_url( $attachment_id, $size ); + if ( ! $url ) { + return ''; + } + + return $url; + } + + /** + * Find the right version of an image based on size. + * + * @codeCoverageIgnore - We have to write test when this method contains own code. + * + * @param int $attachment_id Attachment ID. + * @param string $size Size name. + * + * @return array|false Returns an array with image data on success, false on failure. + */ + public function get_image( $attachment_id, $size ) { + return WPSEO_Image_Utils::get_image( $attachment_id, $size ); + } + + /** + * Retrieves the best attachment variation for the given attachment. + * + * @codeCoverageIgnore - We have to write test when this method contains own code. + * + * @param int $attachment_id The attachment id. + * + * @return bool|string The attachment url or false when no variations found. + */ + public function get_best_attachment_variation( $attachment_id ) { + $variations = WPSEO_Image_Utils::get_variations( $attachment_id ); + $variations = WPSEO_Image_Utils::filter_usable_file_size( $variations ); + + // If we are left without variations, there is no valid variation for this attachment. + if ( empty( $variations ) ) { + return false; + } + + // The variations are ordered so the first variations is by definition the best one. + return \reset( $variations ); + } + + /** + * Find an attachment ID for a given URL. + * + * @param string $url The URL to find the attachment for. + * @param bool $use_link_table Whether the SEO Links table will be used to retrieve the id. + * + * @return int The found attachment ID, or 0 if none was found. + */ + public function get_attachment_by_url( $url, $use_link_table = true ) { + // Don't try to do this for external URLs. + $parsed_url = \wp_parse_url( $url ); + if ( $this->url_helper->get_link_type( $parsed_url ) === SEO_Links::TYPE_EXTERNAL ) { + return 0; + } + + /** The `wpseo_force_creating_and_using_attachment_indexables` filter is documented in indexable-link-builder.php */ + if ( ! $this->options_helper->get( 'disable-attachment' ) || \apply_filters( 'wpseo_force_creating_and_using_attachment_indexables', false ) ) { + // Strip out the size part of an image URL. + $url = \preg_replace( '/(.*)-\d+x\d+\.(jpeg|jpg|png|gif)$/', '$1.$2', $url ); + + $indexable = $this->indexable_repository->find_by_permalink( $url ); + + if ( $indexable && $indexable->object_type === 'post' && $indexable->object_sub_type === 'attachment' ) { + return $indexable->object_id; + } + + $post_id = WPSEO_Image_Utils::get_attachment_by_url( $url ); + + if ( $post_id !== 0 ) { + // Find the indexable, this triggers creating it so it can be found next time. + $this->indexable_repository->find_by_id_and_type( $post_id, 'post' ); + } + + return $post_id; + } + + if ( ! $use_link_table ) { + return WPSEO_Image_Utils::get_attachment_by_url( $url ); + } + $cache_key = 'attachment_seo_link_object_' . \md5( $url ); + + $found = false; + $link = \wp_cache_get( $cache_key, 'yoast-seo-attachment-link', false, $found ); + + if ( $found === false ) { + $link = $this->seo_links_repository->find_one_by_url( $url ); + \wp_cache_set( $cache_key, $link, 'yoast-seo-attachment-link', \MINUTE_IN_SECONDS ); + } + if ( ! \is_a( $link, SEO_Links::class ) ) { + return WPSEO_Image_Utils::get_attachment_by_url( $url ); + } + + return $link->target_post_id; + } + + /** + * Retrieves an attachment ID for an image uploaded in the settings. + * + * Due to self::get_attachment_by_url returning 0 instead of false. + * 0 is also a possibility when no ID is available. + * + * @codeCoverageIgnore - We have to write test when this method contains own code. + * + * @param string $setting The setting the image is stored in. + * + * @return int|bool The attachment id, or false or 0 if no ID is available. + */ + public function get_attachment_id_from_settings( $setting ) { + return WPSEO_Image_Utils::get_attachment_id_from_settings( $setting ); + } + + /** + * Based on and image ID return array with the best variation of that image. If it's not saved to the DB, save it to an option. + * + * @param string $setting The setting name. Should be company or person. + * + * @return array|bool Array with image details when the image is found, boolean when it's not found. + */ + public function get_attachment_meta_from_settings( $setting ) { + $image_meta = $this->options_helper->get( $setting . '_meta', false ); + if ( ! $image_meta ) { + $image_id = $this->options_helper->get( $setting . '_id', false ); + if ( $image_id ) { + // There is not an option to put a URL in an image field in the settings anymore, only to upload it through the media manager. + // This means an attachment always exists, so doing this is only needed once. + $image_meta = $this->get_best_attachment_variation( $image_id ); + if ( $image_meta ) { + $this->options_helper->set( $setting . '_meta', $image_meta ); + } + } + } + + return $image_meta; + } + + /** + * Retrieves the first usable content image for a post. + * + * @codeCoverageIgnore - We have to write test when this method contains own code. + * + * @param int $post_id The post id to extract the images from. + * + * @return string|null + */ + protected function get_first_usable_content_image_for_post( $post_id ) { + return WPSEO_Image_Utils::get_first_usable_content_image_for_post( $post_id ); + } + + /** + * Gets the term's first usable content image. Null if none is available. + * + * @codeCoverageIgnore - We have to write test when this method contains own code. + * + * @param int $term_id The term id. + * + * @return string|null The image URL. + */ + protected function get_first_content_image_for_term( $term_id ) { + return WPSEO_Image_Utils::get_first_content_image_for_term( $term_id ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/import-cursor-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/import-cursor-helper.php new file mode 100644 index 00000000..1d57ef7b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/import-cursor-helper.php @@ -0,0 +1,58 @@ +options = $options; + } + + /** + * Returns the stored cursor value. + * + * @param string $cursor_id The cursor id. + * @param mixed $default_value The default value if no cursor has been set yet. + * + * @return int The stored cursor value. + */ + public function get_cursor( $cursor_id, $default_value = 0 ) { + $import_cursors = $this->options->get( 'import_cursors', [] ); + + return ( isset( $import_cursors[ $cursor_id ] ) ) ? $import_cursors[ $cursor_id ] : $default_value; + } + + /** + * Stores the current cursor value. + * + * @param string $cursor_id The cursor id. + * @param int $last_imported_id The id of the lastly imported entry. + * + * @return void + */ + public function set_cursor( $cursor_id, $last_imported_id ) { + $current_cursors = $this->options->get( 'import_cursors', [] ); + + if ( ! isset( $current_cursors[ $cursor_id ] ) || $current_cursors[ $cursor_id ] < $last_imported_id ) { + $current_cursors[ $cursor_id ] = $last_imported_id; + $this->options->set( 'import_cursors', $current_cursors ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/import-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/import-helper.php new file mode 100644 index 00000000..f2a30084 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/import-helper.php @@ -0,0 +1,31 @@ + $value ) { + if ( \is_array( $value ) ) { + $result = \array_merge( $result, $this->flatten_settings( $value, $key_prefix . '/' . $key ) ); + } + else { + $result[ $key_prefix . '/' . $key ] = $value; + } + } + + return $result; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-helper.php new file mode 100644 index 00000000..cd2f6bb0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-helper.php @@ -0,0 +1,319 @@ + [ + 'default_value' => null, + ], + 'description' => [ + 'default_value' => null, + ], + 'open_graph_title' => [ + 'default_value' => null, + ], + 'open_graph_description' => [ + 'default_value' => null, + ], + 'twitter_title' => [ + 'default_value' => null, + ], + 'twitter_description' => [ + 'default_value' => null, + ], + 'canonical' => [ + 'default_value' => null, + ], + 'primary_focus_keyword' => [ + 'default_value' => null, + ], + 'is_robots_noindex' => [ + 'default_value' => null, + ], + 'is_robots_nofollow' => [ + 'default_value' => false, + ], + 'is_robots_noarchive' => [ + 'default_value' => null, + ], + 'is_robots_noimageindex' => [ + 'default_value' => null, + ], + 'is_robots_nosnippet' => [ + 'default_value' => null, + ], + ]; + + /** + * Indexable_Helper constructor. + * + * @param Options_Helper $options_helper The options helper. + * @param Environment_Helper $environment_helper The environment helper. + * @param Indexing_Helper $indexing_helper The indexing helper. + */ + public function __construct( Options_Helper $options_helper, Environment_Helper $environment_helper, Indexing_Helper $indexing_helper ) { + $this->options_helper = $options_helper; + $this->environment_helper = $environment_helper; + $this->indexing_helper = $indexing_helper; + } + + /** + * Sets the indexable repository. Done to avoid circular dependencies. + * + * @required + * + * @param Indexable_Repository $repository The indexable repository. + * + * @return void + */ + public function set_indexable_repository( Indexable_Repository $repository ) { + $this->repository = $repository; + } + + /** + * Returns the page type of an indexable. + * + * @param Indexable $indexable The indexable. + * + * @return string|false The page type. False if it could not be determined. + */ + public function get_page_type_for_indexable( $indexable ) { + switch ( $indexable->object_type ) { + case 'post': + $front_page_id = (int) \get_option( 'page_on_front' ); + if ( $indexable->object_id === $front_page_id ) { + return 'Static_Home_Page'; + } + $posts_page_id = (int) \get_option( 'page_for_posts' ); + if ( $indexable->object_id === $posts_page_id ) { + return 'Static_Posts_Page'; + } + + return 'Post_Type'; + case 'term': + return 'Term_Archive'; + case 'user': + return 'Author_Archive'; + case 'home-page': + return 'Home_Page'; + case 'post-type-archive': + return 'Post_Type_Archive'; + case 'date-archive': + return 'Date_Archive'; + case 'system-page': + if ( $indexable->object_sub_type === 'search-result' ) { + return 'Search_Result_Page'; + } + if ( $indexable->object_sub_type === '404' ) { + return 'Error_Page'; + } + } + + return false; + } + + /** + * Resets the permalinks of the indexables. + * + * @param string|null $type The type of the indexable. + * @param string|null $subtype The subtype. Can be null. + * @param string $reason The reason that the permalink has been changed. + * + * @return void + */ + public function reset_permalink_indexables( $type = null, $subtype = null, $reason = Indexing_Reasons::REASON_PERMALINK_SETTINGS ) { + $result = $this->repository->reset_permalink( $type, $subtype ); + + $this->indexing_helper->set_reason( $reason ); + + if ( $result !== false && $result > 0 ) { + \delete_transient( Indexable_Post_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( Indexable_Post_Type_Archive_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( Indexable_Term_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + } + } + + /** + * Determines whether indexing the specific indexable is appropriate at this time. + * + * @param Indexable $indexable The indexable. + * + * @return bool Whether indexing the specific indexable is appropriate at this time. + */ + public function should_index_indexable( $indexable ) { + $intend_to_save = $this->should_index_indexables(); + + /** + * Filter: 'wpseo_should_save_indexable' - Allow developers to enable / disable + * saving the indexable when the indexable is updated. Warning: overriding + * the intended action may cause problems when moving from a staging to a + * production environment because indexable permalinks may get set incorrectly. + * + * @param bool $intend_to_save True if YoastSEO intends to save the indexable. + * @param Indexable $indexable The indexable to be saved. + */ + return \apply_filters( 'wpseo_should_save_indexable', $intend_to_save, $indexable ); + } + + /** + * Determines whether indexing indexables is appropriate at this time. + * + * @return bool Whether the indexables should be indexed. + */ + public function should_index_indexables() { + // Currently, the only reason to index is when we're on a production website. + $should_index = $this->environment_helper->is_production_mode(); + + /** + * Filter: 'Yoast\WP\SEO\should_index_indexables' - Allow developers to enable / disable + * creating indexables. Warning: overriding + * the intended action may cause problems when moving from a staging to a + * production environment because indexable permalinks may get set incorrectly. + * + * @since 18.2 + * + * @param bool $should_index Whether the site's indexables should be created. + */ + return (bool) \apply_filters( 'Yoast\WP\SEO\should_index_indexables', $should_index ); + } + + /** + * Returns whether or not dynamic permalinks should be used. + * + * @return bool Whether or not the dynamic permalinks should be used. + */ + public function dynamic_permalinks_enabled() { + /** + * Filters the value of the `dynamic_permalinks` option. + * + * @param bool $value The value of the `dynamic_permalinks` option. + */ + return (bool) \apply_filters( 'wpseo_dynamic_permalinks_enabled', $this->options_helper->get( 'dynamic_permalinks', false ) ); + } + + /** + * Sets a boolean to indicate that the indexing of the indexables has completed. + * + * @return void + */ + public function finish_indexing() { + $this->options_helper->set( 'indexables_indexing_completed', true ); + } + + /** + * Checks whether the indexable has default values in given fields. + * + * @param Indexable $indexable The Yoast indexable that we're checking. + * @param array $fields The Yoast indexable fields that we're checking against. + * + * @return bool Whether the indexable has default values. + */ + public function check_if_default_indexable( $indexable, $fields ) { + foreach ( $fields as $field ) { + $is_default = $this->check_if_default_field( $indexable, $field ); + if ( ! $is_default ) { + break; + } + } + + return $is_default; + } + + /** + * Checks if an indexable field contains the default value. + * + * @param Indexable $indexable The Yoast indexable that we're checking. + * @param string $field The field that we're checking. + * + * @return bool True if default value. + */ + public function check_if_default_field( $indexable, $field ) { + $defaults = $this->default_values; + if ( ! isset( $defaults[ $field ] ) ) { + return false; + } + + if ( $indexable->$field === $defaults[ $field ]['default_value'] ) { + return true; + } + + return false; + } + + /** + * Saves and returns an indexable (on production environments only). + * + * Moved from Yoast\WP\SEO\Builders\Indexable_Builder. + * + * @param Indexable $indexable The indexable. + * @param Indexable|null $indexable_before The indexable before possible changes. + * + * @return bool True if default value. + */ + public function save_indexable( $indexable, $indexable_before = null ) { + if ( ! $this->should_index_indexable( $indexable ) ) { + return $indexable; + } + + // Save the indexable before running the WordPress hook. + $indexable->save(); + + if ( $indexable_before ) { + /** + * Action: 'wpseo_save_indexable' - Allow developers to perform an action + * when the indexable is updated. + * + * @param Indexable $indexable The saved indexable. + * @param Indexable $indexable_before The indexable before saving. + */ + \do_action( 'wpseo_save_indexable', $indexable, $indexable_before ); + } + + return $indexable; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-to-postmeta-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-to-postmeta-helper.php new file mode 100644 index 00000000..ae24403f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/indexable-to-postmeta-helper.php @@ -0,0 +1,232 @@ + [ + 'post_meta_key' => 'title', + 'map_method' => 'simple_map', + ], + 'description' => [ + 'post_meta_key' => 'metadesc', + 'map_method' => 'simple_map', + ], + 'open_graph_title' => [ + 'post_meta_key' => 'opengraph-title', + 'map_method' => 'simple_map', + ], + 'open_graph_description' => [ + 'post_meta_key' => 'opengraph-description', + 'map_method' => 'simple_map', + ], + 'twitter_title' => [ + 'post_meta_key' => 'twitter-title', + 'map_method' => 'simple_map', + ], + 'twitter_description' => [ + 'post_meta_key' => 'twitter-description', + 'map_method' => 'simple_map', + ], + 'canonical' => [ + 'post_meta_key' => 'canonical', + 'map_method' => 'simple_map', + ], + 'primary_focus_keyword' => [ + 'post_meta_key' => 'focuskw', + 'map_method' => 'simple_map', + ], + 'open_graph_image' => [ + 'post_meta_key' => 'opengraph-image', + 'map_method' => 'social_image_map', + ], + 'open_graph_image_id' => [ + 'post_meta_key' => 'opengraph-image-id', + 'map_method' => 'social_image_map', + ], + 'twitter_image' => [ + 'post_meta_key' => 'twitter-image', + 'map_method' => 'social_image_map', + ], + 'twitter_image_id' => [ + 'post_meta_key' => 'twitter-image-id', + 'map_method' => 'social_image_map', + ], + 'is_robots_noindex' => [ + 'post_meta_key' => 'meta-robots-noindex', + 'map_method' => 'noindex_map', + ], + 'is_robots_nofollow' => [ + 'post_meta_key' => 'meta-robots-nofollow', + 'map_method' => 'nofollow_map', + ], + 'meta_robots_adv' => [ + 'post_meta_key' => 'meta-robots-adv', + 'map_method' => 'robots_adv_map', + ], + ]; + + /** + * Indexable_To_Postmeta_Helper constructor. + * + * @param Meta_Helper $meta The Meta helper. + */ + public function __construct( Meta_Helper $meta ) { + $this->meta = $meta; + } + + /** + * Creates postmeta from a Yoast indexable. + * + * @param Indexable $indexable The Yoast indexable. + * + * @return void + */ + public function map_to_postmeta( $indexable ) { + foreach ( $this->yoast_to_postmeta as $indexable_column => $map_info ) { + \call_user_func( [ $this, $map_info['map_method'] ], $indexable, $map_info['post_meta_key'], $indexable_column ); + } + } + + /** + * Uses a simple set_value for non-empty data. + * + * @param Indexable $indexable The Yoast indexable. + * @param string $post_meta_key The post_meta key that will be populated. + * @param string $indexable_column The indexable data that will be mapped to post_meta. + * + * @return void + */ + public function simple_map( $indexable, $post_meta_key, $indexable_column ) { + if ( empty( $indexable->{$indexable_column} ) ) { + return; + } + + $this->meta->set_value( $post_meta_key, $indexable->{$indexable_column}, $indexable->object_id ); + } + + /** + * Map social image data only if social image is explicitly set. + * + * @param Indexable $indexable The Yoast indexable. + * @param string $post_meta_key The post_meta key that will be populated. + * @param string $indexable_column The indexable data that will be mapped to post_meta. + * + * @return void + */ + public function social_image_map( $indexable, $post_meta_key, $indexable_column ) { + if ( empty( $indexable->{$indexable_column} ) ) { + return; + } + + switch ( $indexable_column ) { + case 'open_graph_image': + case 'open_graph_image_id': + $source = $indexable->open_graph_image_source; + break; + case 'twitter_image': + case 'twitter_image_id': + $source = $indexable->twitter_image_source; + break; + } + + // Map the social image data only when the social image is explicitly set. + if ( $source === 'set-by-user' || $source === 'imported' ) { + $value = (string) $indexable->{$indexable_column}; + + $this->meta->set_value( $post_meta_key, $value, $indexable->object_id ); + } + } + + /** + * Deletes the noindex post_meta key if no noindex in the indexable. Populates the post_meta key appropriately if there is noindex in the indexable. + * + * @param Indexable $indexable The Yoast indexable. + * @param string $post_meta_key The post_meta key that will be populated. + * + * @return void + */ + public function noindex_map( $indexable, $post_meta_key ) { + if ( \is_null( $indexable->is_robots_noindex ) ) { + $this->meta->delete( $post_meta_key, $indexable->object_id ); + return; + } + + if ( $indexable->is_robots_noindex === false ) { + $this->meta->set_value( $post_meta_key, 2, $indexable->object_id ); + } + + if ( $indexable->is_robots_noindex === true ) { + $this->meta->set_value( $post_meta_key, 1, $indexable->object_id ); + } + } + + /** + * Deletes the nofollow post_meta key if no nofollow in the indexable or if nofollow is false. Populates the post_meta key appropriately if there is a true nofollow in the indexable. + * + * @param Indexable $indexable The Yoast indexable. + * @param string $post_meta_key The post_meta key that will be populated. + * + * @return void + */ + public function nofollow_map( $indexable, $post_meta_key ) { + if ( \is_null( $indexable->is_robots_nofollow ) || $indexable->is_robots_nofollow === false ) { + $this->meta->delete( $post_meta_key, $indexable->object_id ); + } + + if ( $indexable->is_robots_nofollow === true ) { + $this->meta->set_value( $post_meta_key, 1, $indexable->object_id ); + } + } + + /** + * Deletes the nofollow post_meta key if no nofollow in the indexable or if nofollow is false. Populates the post_meta key appropriately if there is a true nofollow in the indexable. + * + * @param Indexable $indexable The Yoast indexable. + * @param string $post_meta_key The post_meta key that will be populated. + * + * @return void + */ + public function robots_adv_map( $indexable, $post_meta_key ) { + $adv_settings_to_be_imported = []; + $no_adv_settings = true; + + if ( $indexable->is_robots_noimageindex === true ) { + $adv_settings_to_be_imported[] = 'noimageindex'; + $no_adv_settings = false; + } + if ( $indexable->is_robots_noarchive === true ) { + $adv_settings_to_be_imported[] = 'noarchive'; + $no_adv_settings = false; + } + if ( $indexable->is_robots_nosnippet === true ) { + $adv_settings_to_be_imported[] = 'nosnippet'; + $no_adv_settings = false; + } + + if ( $no_adv_settings === true ) { + $this->meta->delete( $post_meta_key, $indexable->object_id ); + return; + } + + $this->meta->set_value( $post_meta_key, \implode( ',', $adv_settings_to_be_imported ), $indexable->object_id ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/indexing-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/indexing-helper.php new file mode 100644 index 00000000..d7c2434c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/indexing-helper.php @@ -0,0 +1,397 @@ +options_helper = $options_helper; + $this->date_helper = $date_helper; + $this->notification_center = $notification_center; + } + + /** + * Sets the actions. + * + * @required + * + * @param Indexable_Post_Indexation_Action $post_indexation The post indexing action. + * @param Indexable_Term_Indexation_Action $term_indexation The term indexing action. + * @param Indexable_Post_Type_Archive_Indexation_Action $post_type_archive_indexation The posttype indexing action. + * @param Indexable_General_Indexation_Action $general_indexation The general indexing (homepage etc) action. + * @param Post_Link_Indexing_Action $post_link_indexing_action The post crosslink indexing action. + * @param Term_Link_Indexing_Action $term_link_indexing_action The term crossling indexing action. + * + * @return void + */ + public function set_indexing_actions( + Indexable_Post_Indexation_Action $post_indexation, + Indexable_Term_Indexation_Action $term_indexation, + Indexable_Post_Type_Archive_Indexation_Action $post_type_archive_indexation, + Indexable_General_Indexation_Action $general_indexation, + Post_Link_Indexing_Action $post_link_indexing_action, + Term_Link_Indexing_Action $term_link_indexing_action + ) { + $this->indexing_actions = [ + $post_indexation, + $term_indexation, + $post_type_archive_indexation, + $general_indexation, + $post_link_indexing_action, + $term_link_indexing_action, + ]; + + // Coincidentally, the background indexing actions are the same with the Free indexing actions for now. + $this->background_indexing_actions = $this->indexing_actions; + } + + /** + * Sets the indexable repository for the indexing helper class. + * + * @required + * + * @param Indexable_Repository $indexable_repository The indexable repository. + * + * @return void + */ + public function set_indexable_repository( + Indexable_Repository $indexable_repository + ) { + $this->indexable_repository = $indexable_repository; + } + + /** + * Prepares the indexing process by setting several database options and removing the indexing notification. + * + * @return void + */ + public function prepare() { + $this->set_first_time( false ); + $this->set_started( $this->date_helper->current_time() ); + $this->remove_indexing_notification(); + // Do not set_reason here; if the process is cancelled, the reason to start indexing is still valid. + } + + /** + * Sets several database options when the indexing process is finished. + * + * @return void + */ + public function complete() { + $this->set_reason( '' ); + $this->set_started( null ); + } + + /** + * Sets appropriate flags when the indexing process fails. + * + * @return void + */ + public function indexing_failed() { + $this->set_reason( Indexing_Reasons::REASON_INDEXING_FAILED ); + $this->set_started( null ); + } + + /** + * Sets the indexing reason. + * + * @param string $reason The indexing reason. + * + * @return void + */ + public function set_reason( $reason ) { + $this->options_helper->set( 'indexing_reason', $reason ); + $this->remove_indexing_notification(); + } + + /** + * Removes any pre-existing notification, so that a new notification (with a possible new reason) can be added. + * + * @return void + */ + protected function remove_indexing_notification() { + $this->notification_center->remove_notification_by_id( + Indexing_Notification_Integration::NOTIFICATION_ID + ); + } + + /** + * Determines whether an indexing reason has been set in the options. + * + * @return bool Whether an indexing reason has been set in the options. + */ + public function has_reason() { + $reason = $this->get_reason(); + + return ! empty( $reason ); + } + + /** + * Returns the indexing reason. The reason why the site-wide indexing process should be run. + * + * @return string The indexing reason, defaults to the empty string if no reason has been set. + */ + public function get_reason() { + return $this->options_helper->get( 'indexing_reason', '' ); + } + + /** + * Sets the start time when the indexing process has started but not completed. + * + * @param int|bool $timestamp The start time when the indexing process has started but not completed, false otherwise. + * + * @return void + */ + public function set_started( $timestamp ) { + $this->options_helper->set( 'indexing_started', $timestamp ); + } + + /** + * Gets the start time when the indexing process has started but not completed. + * + * @return int|bool The start time when the indexing process has started but not completed, false otherwise. + */ + public function get_started() { + return $this->options_helper->get( 'indexing_started' ); + } + + /** + * Sets a boolean that indicates whether or not a site still has to be indexed for the first time. + * + * @param bool $is_first_time_indexing Whether or not a site still has to be indexed for the first time. + * + * @return void + */ + public function set_first_time( $is_first_time_indexing ) { + $this->options_helper->set( 'indexing_first_time', $is_first_time_indexing ); + } + + /** + * Gets a boolean that indicates whether or not the site still has to be indexed for the first time. + * + * @return bool Whether the site still has to be indexed for the first time. + */ + public function is_initial_indexing() { + return $this->options_helper->get( 'indexing_first_time', true ); + } + + /** + * Gets a boolean that indicates whether or not the indexing of the indexables has completed. + * + * @return bool Whether the indexing of the indexables has completed. + */ + public function is_finished_indexables_indexing() { + return $this->options_helper->get( 'indexables_indexing_completed', false ); + } + + /** + * Returns the total number of unindexed objects. + * + * @return int The total number of unindexed objects. + */ + public function get_unindexed_count() { + $unindexed_count = 0; + + foreach ( $this->indexing_actions as $indexing_action ) { + $unindexed_count += $indexing_action->get_total_unindexed(); + } + + return $unindexed_count; + } + + /** + * Returns the amount of un-indexed posts expressed in percentage, which will be needed to set a threshold. + * + * @param int $unindexed_count The number of unindexed objects. + * + * @return int The amount of unindexed posts expressed in percentage. + */ + public function get_unindexed_percentage( $unindexed_count ) { + // Gets the amount of indexed objects in the site. + $indexed_count = $this->indexable_repository->get_total_number_of_indexables(); + // The total amount of objects in the site. + $total_objects_count = ( $indexed_count + $unindexed_count ); + + return ( ( $unindexed_count / $total_objects_count ) * 100 ); + } + + /** + * Returns whether the SEO optimization button should show. + * + * @return bool Whether the SEO optimization button should show. + */ + public function should_show_optimization_button() { + // Gets the amount of unindexed objects in the site. + $unindexed_count = $this->get_filtered_unindexed_count(); + + // If the amount of unidexed posts is <10 don't show configuration button. + if ( $unindexed_count <= 10 ) { + return false; + } + // If the amount of unidexed posts is >10, but the total amount of unidexed posts is ≤4% of the total amount of objects in the site, don't show configuration button. + if ( $this->get_unindexed_percentage( $unindexed_count ) <= 4 ) { + return false; + } + return true; + } + + /** + * Returns the total number of unindexed objects and applies a filter for third party integrations. + * + * @return int The total number of unindexed objects. + */ + public function get_filtered_unindexed_count() { + $unindexed_count = $this->get_unindexed_count(); + + /** + * Filter: 'wpseo_indexing_get_unindexed_count' - Allow changing the amount of unindexed objects. + * + * @param int $unindexed_count The amount of unindexed objects. + */ + return \apply_filters( 'wpseo_indexing_get_unindexed_count', $unindexed_count ); + } + + /** + * Returns a limited number of unindexed objects. + * + * @param int $limit Limit the number of unindexed objects that are counted. + * @param Indexation_Action_Interface[]|Limited_Indexing_Action_Interface[] $actions The actions whose counts will be calculated. + * + * @return int The total number of unindexed objects. + */ + public function get_limited_unindexed_count( $limit, $actions = [] ) { + $unindexed_count = 0; + + if ( empty( $actions ) ) { + $actions = $this->indexing_actions; + } + + foreach ( $actions as $action ) { + $unindexed_count += $action->get_limited_unindexed_count( $limit - $unindexed_count + 1 ); + if ( $unindexed_count > $limit ) { + return $unindexed_count; + } + } + + return $unindexed_count; + } + + /** + * Returns the total number of unindexed objects and applies a filter for third party integrations. + * + * @param int $limit Limit the number of unindexed objects that are counted. + * + * @return int The total number of unindexed objects. + */ + public function get_limited_filtered_unindexed_count( $limit ) { + $unindexed_count = $this->get_limited_unindexed_count( $limit, $this->indexing_actions ); + + if ( $unindexed_count > $limit ) { + return $unindexed_count; + } + + /** + * Filter: 'wpseo_indexing_get_limited_unindexed_count' - Allow changing the amount of unindexed objects, + * and allow for a maximum number of items counted to improve performance. + * + * @param int $unindexed_count The amount of unindexed objects. + * @param int|false $limit Limit the number of unindexed objects that need to be counted. + * False if it doesn't need to be limited. + */ + return \apply_filters( 'wpseo_indexing_get_limited_unindexed_count', $unindexed_count, $limit ); + } + + /** + * Returns the total number of unindexed objects that can be indexed in the background and applies a filter for third party integrations. + * + * @param int $limit Limit the number of unindexed objects that are counted. + * + * @return int The total number of unindexed objects that can be indexed in the background. + */ + public function get_limited_filtered_unindexed_count_background( $limit ) { + $unindexed_count = $this->get_limited_unindexed_count( $limit, $this->background_indexing_actions ); + + if ( $unindexed_count > $limit ) { + return $unindexed_count; + } + + /** + * Filter: 'wpseo_indexing_get_limited_unindexed_count_background' - Allow changing the amount of unindexed objects that can be indexed in the background, + * and allow for a maximum number of items counted to improve performance. + * + * @param int $unindexed_count The amount of unindexed objects. + * @param int|false $limit Limit the number of unindexed objects that need to be counted. + * False if it doesn't need to be limited. + */ + return \apply_filters( 'wpseo_indexing_get_limited_unindexed_count_background', $unindexed_count, $limit ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/language-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/language-helper.php new file mode 100644 index 00000000..dd3a0cf3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/language-helper.php @@ -0,0 +1,83 @@ +url = $url; + $this->image = $image; + } + + /** + * Determines whether the passed URL is considered valid. + * + * @deprecated 22.4 + * @codeCoverageIgnore + * + * @param array> $image The image array. + * + * @return bool Whether or not the URL is a valid image. + */ + public function is_image_url_valid( array $image ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.4' ); + + if ( empty( $image['url'] ) || ! \is_string( $image['url'] ) ) { + return false; + } + + $image_extension = $this->url->get_extension_from_url( $image['url'] ); + $is_valid = $this->image->is_extension_valid( $image_extension ); + + /** + * Filter: 'wpseo_opengraph_is_valid_image_url' - Allows extra validation for an image url. + * + * @param bool $is_valid Current validation result. + * @param string $url The image url to validate. + */ + return (bool) \apply_filters( 'wpseo_opengraph_is_valid_image_url', $is_valid, $image['url'] ); + } + + /** + * Retrieves the overridden image size value. + * + * @return string|null The image size when overriden by filter or null when not. + */ + public function get_override_image_size() { + /** + * Filter: 'wpseo_opengraph_image_size' - Allow overriding the image size used + * for Open Graph sharing. If this filter is used, the defined size will always be + * used for the og:image. The image will still be rejected if it is too small. + * + * Only use this filter if you manually want to determine the best image size + * for the `og:image` tag. + * + * Use the `wpseo_image_sizes` filter if you want to use our logic. That filter + * can be used to add an image size that needs to be taken into consideration + * within our own logic. + * + * @param string|false $size Size string. + */ + return \apply_filters( 'wpseo_opengraph_image_size', null ); + } + + /** + * Retrieves the image data by a given attachment id. + * + * @param int $attachment_id The attachment id. + * + * @return array|false The image data when found, `false` when not. + */ + public function get_image_by_id( $attachment_id ) { + if ( ! $this->image->is_valid_attachment( $attachment_id ) ) { + return false; + } + + $override_image_size = $this->get_override_image_size(); + if ( $override_image_size ) { + return $this->image->get_image( $attachment_id, $override_image_size ); + } + + return $this->image->get_best_attachment_variation( $attachment_id ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/open-graph/values-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/open-graph/values-helper.php new file mode 100644 index 00000000..a2e20074 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/open-graph/values-helper.php @@ -0,0 +1,85 @@ +get_default( 'wpseo_titles', 'separator' ); + + // Get the titles option and the separator options. + $separator = $this->get( 'separator' ); + $seperator_options = $this->get_separator_options(); + + // This should always be set, but just to be sure. + if ( isset( $seperator_options[ $separator ] ) ) { + // Set the new replacement. + $replacement = $seperator_options[ $separator ]; + } + elseif ( isset( $seperator_options[ $default ] ) ) { + $replacement = $seperator_options[ $default ]; + } + else { + $replacement = \reset( $seperator_options ); + } + + /** + * Filter: 'wpseo_replacements_filter_sep' - Allow customization of the separator character(s). + * + * @param string $replacement The current separator. + */ + return \apply_filters( 'wpseo_replacements_filter_sep', $replacement ); + } + + /** + * Retrieves a default value from the option titles. + * + * @param string $option_titles_key The key of the option title you wish to get. + * + * @return string The option title. + */ + public function get_title_default( $option_titles_key ) { + $default_titles = $this->get_title_defaults(); + if ( ! empty( $default_titles[ $option_titles_key ] ) ) { + return $default_titles[ $option_titles_key ]; + } + + return ''; + } + + /** + * Retrieves the default option titles. + * + * @codeCoverageIgnore We have to write test when this method contains own code. + * + * @return array The title defaults. + */ + protected function get_title_defaults() { + return WPSEO_Option_Titles::get_instance()->get_defaults(); + } + + /** + * Get the available separator options. + * + * @return array + */ + protected function get_separator_options() { + return WPSEO_Option_Titles::get_instance()->get_separator_options(); + } + + /** + * Checks whether a social URL is valid, with empty strings being valid social URLs. + * + * @param string $url The url to be checked. + * + * @return bool Whether the URL is valid. + */ + public function is_social_url_valid( $url ) { + return $url === '' || WPSEO_Option_Social::get_instance()->validate_social_url( $url ); + } + + /** + * Checks whether a twitter id is valid, with empty strings being valid twitter id. + * + * @param string $twitter_id The twitter id to be checked. + * + * @return bool Whether the twitter id is valid. + */ + public function is_twitter_id_valid( $twitter_id ) { + return empty( $twitter_id ) || WPSEO_Option_Social::get_instance()->validate_twitter_id( $twitter_id, false ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/pagination-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/pagination-helper.php new file mode 100644 index 00000000..281e6466 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/pagination-helper.php @@ -0,0 +1,207 @@ +wp_rewrite_wrapper = $wp_rewrite_wrapper; + $this->wp_query_wrapper = $wp_query_wrapper; + } + + /** + * Checks whether adjacent rel links are disabled. + * + * @return bool Whether adjacent rel links are disabled or not. + */ + public function is_rel_adjacent_disabled() { + /** + * Filter: 'wpseo_disable_adjacent_rel_links' - Allows disabling of Yoast adjacent links if this is being handled by other code. + * + * @param bool $links_generated Indicates if other code has handled adjacent links. + */ + return \apply_filters( 'wpseo_disable_adjacent_rel_links', false ); + } + + /** + * Builds a paginated URL. + * + * @param string $url The un-paginated URL of the current archive. + * @param string $page The page number to add on to $url for the $link tag. + * @param bool $add_pagination_base Optional. Whether to add the pagination base (`page`) to the url. + * @param string $pagination_query_name Optional. The name of the query argument that holds the current page. + * + * @return string The paginated URL. + */ + public function get_paginated_url( $url, $page, $add_pagination_base = true, $pagination_query_name = 'page' ) { + $wp_rewrite = $this->wp_rewrite_wrapper->get(); + + $key_query_loop = $this->get_key_query_loop(); + if ( $key_query_loop ) { + $pagination_query_name = $key_query_loop; + } + + if ( $wp_rewrite->using_permalinks() && ! $key_query_loop ) { + $url_parts = \wp_parse_url( $url ); + $has_url_params = \array_key_exists( 'query', $url_parts ); + + if ( $has_url_params ) { + // We need to first remove the query params, before potentially adding the pagination parts. + \wp_parse_str( $url_parts['query'], $query_parts ); + + $url = \trailingslashit( \remove_query_arg( \array_keys( $query_parts ), $url ) ); + + if ( $add_pagination_base ) { + $url .= \trailingslashit( $wp_rewrite->pagination_base ); + } + + // We can now re-add the query params, after appending the last pagination parts. + return \add_query_arg( $query_parts, \user_trailingslashit( $url . $page ) ); + } + + $url = \trailingslashit( $url ); + if ( $add_pagination_base ) { + $url .= \trailingslashit( $wp_rewrite->pagination_base ); + } + + return \user_trailingslashit( $url . $page ); + } + + return \add_query_arg( $pagination_query_name, $page, \user_trailingslashit( $url ) ); + } + + /** + * Gets the number of archive pages. + * + * @return int The number of archive pages. + */ + public function get_number_of_archive_pages() { + $wp_query = $this->wp_query_wrapper->get_query(); + + return (int) $wp_query->max_num_pages; + } + + /** + * Returns the current page for paged archives. + * + * @return int The current archive page. + */ + public function get_current_archive_page_number() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + $page_number = (int) $wp_query->get( 'paged' ); + if ( $page_number > 1 ) { + return $page_number; + } + + $query_loop_page_number = $this->get_page_number_from_query_loop(); + + if ( $query_loop_page_number ) { + return $query_loop_page_number; + } + return 0; + } + + /** + * Returns the current page for paged post types. + * + * @return int The current post page. + */ + public function get_current_post_page_number() { + $wp_query = $this->wp_query_wrapper->get_main_query(); + + $query_loop_page_number = $this->get_page_number_from_query_loop(); + + if ( $query_loop_page_number ) { + return $query_loop_page_number; + } + + return (int) $wp_query->get( 'page' ); + } + + /** + * Returns the current page number. + * + * @return int The current page number. + */ + public function get_current_page_number() { + // Get the page number for an archive page. + $page_number = \get_query_var( 'paged', 1 ); + if ( $page_number > 1 ) { + return $page_number; + } + + $query_loop_page_number = $this->get_page_number_from_query_loop(); + + if ( $query_loop_page_number ) { + return $query_loop_page_number; + } + + // Get the page number for a page in a paginated post. + return \get_query_var( 'page', 1 ); + } + + /** + * Returns the key of the query loop. + * + * @return string The key of the query loop. + */ + public function get_key_query_loop() { + $regex_pattern = '/^query-\d+-page$/'; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- not form data. + foreach ( $_GET as $key => $value ) { + if ( \preg_match( $regex_pattern, $key ) ) { + return $key; + } + } + return ''; + } + + /** + * Returns the page number from the query loop. + * + * @return string The page number from the query loop. + */ + public function get_page_number_from_query_loop() { + $key_query_loop = $this->get_key_query_loop(); + + if ( $key_query_loop ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated,WordPress.Security.NonceVerification.Recommended -- Validated in get_key_query_loop(). + $page_number = (int) $_GET[ $key_query_loop ]; + if ( $page_number > 1 ) { + return $page_number; + } + } + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/permalink-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/permalink-helper.php new file mode 100644 index 00000000..ea9214d7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/permalink-helper.php @@ -0,0 +1,46 @@ +object_type === 'post': + if ( $indexable->object_sub_type === 'attachment' ) { + return \wp_get_attachment_url( $indexable->object_id ); + } + return \get_permalink( $indexable->object_id ); + case $indexable->object_type === 'home-page': + return \home_url( '/' ); + case $indexable->object_type === 'term': + $term = \get_term( $indexable->object_id ); + + if ( $term === null || \is_wp_error( $term ) ) { + return null; + } + + return \get_term_link( $term, $term->taxonomy ); + case $indexable->object_type === 'system-page' && $indexable->object_sub_type === 'search-page': + return \get_search_link(); + case $indexable->object_type === 'post-type-archive': + return \get_post_type_archive_link( $indexable->object_sub_type ); + case $indexable->object_type === 'user': + return \get_author_posts_url( $indexable->object_id ); + } + + return null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/post-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/post-helper.php new file mode 100644 index 00000000..ffe497cf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/post-helper.php @@ -0,0 +1,228 @@ +string = $string_helper; + $this->post_type = $post_type_helper; + } + + /** + * Sets the indexable repository. Done to avoid circular dependencies. + * + * @required + * + * @param Indexable_Repository $repository The indexable repository. + * + * @return void + */ + public function set_indexable_repository( Indexable_Repository $repository ) { + $this->repository = $repository; + } + + /** + * Removes all shortcode tags from the given content. + * + * @codeCoverageIgnore It only wraps a WordPress function. + * + * @param string $content Content to remove all the shortcode tags from. + * + * @return string Content without shortcode tags. + */ + public function strip_shortcodes( $content ) { + return \strip_shortcodes( $content ); + } + + /** + * Retrieves the post excerpt (without tags). + * + * @codeCoverageIgnore It only wraps another helper method. + * + * @param int $post_id Post ID. + * + * @return string Post excerpt (without tags). + */ + public function get_the_excerpt( $post_id ) { + return $this->string->strip_all_tags( \get_the_excerpt( $post_id ) ); + } + + /** + * Retrieves the post type of the current post. + * + * @codeCoverageIgnore It only wraps a WordPress function. + * + * @param WP_Post|null $post The post. + * + * @return string|false Post type on success, false on failure. + */ + public function get_post_type( $post = null ) { + return \get_post_type( $post ); + } + + /** + * Retrieves the post title with fallback to `No title`. + * + * @param int $post_id Optional. Post ID. + * + * @return string The post title with fallback to `No title`. + */ + public function get_post_title_with_fallback( $post_id = 0 ) { + $post_title = \get_the_title( $post_id ); + if ( $post_title ) { + return $post_title; + } + + return \__( 'No title', 'wordpress-seo' ); + } + + /** + * Retrieves post data given a post ID. + * + * @codeCoverageIgnore It wraps a WordPress function. + * + * @param int $post_id Post ID. + * + * @return WP_Post|null The post. + */ + public function get_post( $post_id ) { + return \get_post( $post_id ); + } + + /** + * Updates the has_public_posts field on attachments for a post_parent. + * + * An attachment is represented by their post parent when: + * - The attachment has a post parent. + * - The attachment inherits the post status. + * + * @codeCoverageIgnore It relies too much on dependencies. + * + * @param int $post_parent Post ID. + * @param int $has_public_posts Whether the parent is public. + * + * @return bool Whether the update was successful. + */ + public function update_has_public_posts_on_attachments( $post_parent, $has_public_posts ) { + $query = $this->repository->query() + ->select( 'id' ) + ->where( 'object_type', 'post' ) + ->where( 'object_sub_type', 'attachment' ) + ->where( 'post_status', 'inherit' ) + ->where( 'post_parent', $post_parent ); + + if ( $has_public_posts !== null ) { + $query->where_raw( '( has_public_posts IS NULL OR has_public_posts <> %s )', [ $has_public_posts ] ); + } + else { + $query->where_not_null( 'has_public_posts' ); + } + $results = $query->find_array(); + + if ( empty( $results ) ) { + return true; + } + + $updated = $this->repository->query() + ->set( 'has_public_posts', $has_public_posts ) + ->where_id_in( \wp_list_pluck( $results, 'id' ) ) + ->update_many(); + + return $updated !== false; + } + + /** + * Determines if the post can be indexed. + * + * @param int $post_id Post ID to check. + * + * @return bool True if the post can be indexed. + */ + public function is_post_indexable( $post_id ) { + // Don't index posts which are not public (i.e. viewable). + $post_type = \get_post_type( $post_id ); + + if ( ! $this->post_type->is_of_indexable_post_type( $post_type ) ) { + return false; + } + + // Don't index excluded post statuses. + if ( \in_array( \get_post_status( $post_id ), $this->get_excluded_post_statuses(), true ) ) { + return false; + } + + // Don't index revisions of posts. + if ( \wp_is_post_revision( $post_id ) ) { + return false; + } + + // Don't index autosaves that are not caught by the auto-draft check. + if ( \wp_is_post_autosave( $post_id ) ) { + return false; + } + + return true; + } + + /** + * Retrieves the list of excluded post statuses. + * + * @return array The excluded post statuses. + */ + public function get_excluded_post_statuses() { + return [ 'auto-draft' ]; + } + + /** + * Retrieves the list of public posts statuses. + * + * @return array The public post statuses. + */ + public function get_public_post_statuses() { + /** + * Filter: 'wpseo_public_post_statuses' - List of public post statuses. + * + * @param array $post_statuses Post status list, defaults to array( 'publish' ). + */ + return \apply_filters( 'wpseo_public_post_statuses', [ 'publish' ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/post-type-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/post-type-helper.php new file mode 100644 index 00000000..92ee2cfc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/post-type-helper.php @@ -0,0 +1,251 @@ +options_helper = $options_helper; + } + + /** + * Checks if the request post type is public and indexable. + * + * @codeCoverageIgnore We have to write test when this method contains own code. + * + * @param string $post_type_name The name of the post type to lookup. + * + * @return bool True when post type is set to index. + */ + public function is_indexable( $post_type_name ) { + if ( $this->options_helper->get( 'disable-' . $post_type_name, false ) ) { + return false; + } + + return ( $this->options_helper->get( 'noindex-' . $post_type_name, false ) === false ); + } + + /** + * Checks if the request post type has the Yoast Metabox enabled. + * + * @param string $post_type_name The name of the post type to lookup. + * + * @return bool True if metabox is enabled. + */ + public function has_metabox( $post_type_name ) { + return ( $this->options_helper->get( 'display-metabox-pt-' . $post_type_name, true ) === true ); + } + + /** + * Returns an array with the public post types. + * + * @codeCoverageIgnore It only wraps a WordPress function. + * + * @param string $output The output type to use. + * + * @return array Array with all the public post_types. + */ + public function get_public_post_types( $output = 'names' ) { + return \get_post_types( [ 'public' => true ], $output ); + } + + /** + * Returns an array with the accessible post types. + * + * An accessible post type is a post type that is public and isn't set as no-index (robots). + * + * @return array Array with all the accessible post_types. + */ + public function get_accessible_post_types() { + $post_types = \get_post_types( [ 'public' => true ] ); + $post_types = \array_filter( $post_types, 'is_post_type_viewable' ); + + /** + * Filter: 'wpseo_accessible_post_types' - Allow changing the accessible post types. + * + * @param array $post_types The public post types. + */ + $post_types = \apply_filters( 'wpseo_accessible_post_types', $post_types ); + + // When the array gets messed up somewhere. + if ( ! \is_array( $post_types ) ) { + return []; + } + + return $post_types; + } + + /** + * Returns an array of post types that are excluded from being indexed for the + * indexables. + * + * @return array The excluded post types. + */ + public function get_excluded_post_types_for_indexables() { + /** + * Filter: 'wpseo_indexable_excluded_post_types' - Allows excluding posts of a certain post + * type from being saved to the indexable table. + * + * @param array $excluded_post_types The currently excluded post types that indexables will not be created for. + */ + $excluded_post_types = \apply_filters( 'wpseo_indexable_excluded_post_types', [] ); + + // Failsafe, to always make sure that `excluded_post_types` is an array. + if ( ! \is_array( $excluded_post_types ) ) { + return []; + } + + return $excluded_post_types; + } + + /** + * Checks if the post type is excluded. + * + * @param string $post_type The post type to check. + * + * @return bool If the post type is exclude. + */ + public function is_excluded( $post_type ) { + return \in_array( $post_type, $this->get_excluded_post_types_for_indexables(), true ); + } + + /** + * Checks if the post type with the given name has an archive page. + * + * @param WP_Post_Type|string $post_type The name of the post type to check. + * + * @return bool True when the post type has an archive page. + */ + public function has_archive( $post_type ) { + if ( \is_string( $post_type ) ) { + $post_type = \get_post_type_object( $post_type ); + } + + return ( ! empty( $post_type->has_archive ) ); + } + + /** + * Returns the post types that should be indexed. + * + * @return array The post types that should be indexed. + */ + public function get_indexable_post_types() { + $public_post_types = $this->get_public_post_types(); + $excluded_post_types = $this->get_excluded_post_types_for_indexables(); + + $included_post_types = \array_diff( $public_post_types, $excluded_post_types ); + + return $this->filter_included_post_types( $included_post_types ); + } + + /** + * Returns all indexable post types with archive pages. + * + * @return array All post types which are indexable and have archive pages. + */ + public function get_indexable_post_archives() { + return \array_filter( $this->get_indexable_post_type_objects(), [ $this, 'has_archive' ] ); + } + + /** + * Filters the post types that are included to be indexed. + * + * @param array $included_post_types The post types that are included to be indexed. + * + * @return array The filtered post types that are included to be indexed. + */ + protected function filter_included_post_types( $included_post_types ) { + /** + * Filter: 'wpseo_indexable_forced_included_post_types' - Allows force including posts of a certain post + * type to be saved to the indexable table. + * + * @param array $included_post_types The currently included post types that indexables will be created for. + */ + $filtered_included_post_types = \apply_filters( 'wpseo_indexable_forced_included_post_types', $included_post_types ); + + if ( ! \is_array( $filtered_included_post_types ) ) { + // If the filter got misused, let's return the unfiltered array. + return \array_values( $included_post_types ); + } + + // Add sanity check to make sure everything is an actual post type. + foreach ( $filtered_included_post_types as $key => $post_type ) { + if ( ! \post_type_exists( $post_type ) ) { + unset( $filtered_included_post_types[ $key ] ); + } + } + + // `array_values`, to make sure that the keys are reset. + return \array_values( $filtered_included_post_types ); + } + + /** + * Checks if the given post type should be indexed. + * + * @param string $post_type The post type that is checked. + * + * @return bool + */ + public function is_of_indexable_post_type( $post_type ) { + $public_types = $this->get_indexable_post_types(); + if ( ! \in_array( $post_type, $public_types, true ) ) { + return false; + } + + return true; + } + + /** + * Checks if the archive of a post type is indexable. + * + * @param string $post_type The post type to check. + * + * @return bool if the archive is indexable. + */ + public function is_post_type_archive_indexable( $post_type ) { + $public_type_objects = $this->get_indexable_post_archives(); + $public_types = \array_map( + static function ( $post_type_object ) { + return $post_type_object->name; + }, + $public_type_objects + ); + + return \in_array( $post_type, $public_types, true ); + } + + /** + * Returns an array of complete post type objects for all indexable post types. + * + * @return array List of indexable post type objects. + */ + public function get_indexable_post_type_objects() { + $post_type_objects = []; + $indexable_post_types = $this->get_indexable_post_types(); + foreach ( $indexable_post_types as $post_type ) { + $post_type_object = \get_post_type_object( $post_type ); + if ( ! empty( $post_type_object ) ) { + $post_type_objects[ $post_type ] = $post_type_object; + } + } + + return $post_type_objects; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/primary-term-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/primary-term-helper.php new file mode 100644 index 00000000..3923d5a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/primary-term-helper.php @@ -0,0 +1,47 @@ +hierarchical; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/product-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/product-helper.php new file mode 100644 index 00000000..c36e7239 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/product-helper.php @@ -0,0 +1,62 @@ +is_premium() ) { + return 'Yoast SEO Premium'; + } + + return 'Yoast SEO'; + } + + /** + * Gets the product name in the head section. + * + * @return string + */ + public function get_name() { + return $this->get_product_name() . ' plugin'; + } + + /** + * Checks if the installed version is Yoast SEO Premium. + * + * @return bool True when is premium. + */ + public function is_premium() { + return \defined( 'WPSEO_PREMIUM_FILE' ); + } + + /** + * Gets the Premium version if defined, returns null otherwise. + * + * @return string|null The Premium version or null when premium version is not defined. + */ + public function get_premium_version() { + if ( \defined( 'WPSEO_PREMIUM_VERSION' ) ) { + return \WPSEO_PREMIUM_VERSION; + } + + return null; + } + + /** + * Gets the version. + * + * @return string The version. + */ + public function get_version() { + return \WPSEO_VERSION; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/redirect-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/redirect-helper.php new file mode 100644 index 00000000..b2fba707 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/redirect-helper.php @@ -0,0 +1,70 @@ +post_type_helper = $post_type_helper; + $this->taxonomy_helper = $taxonomy_helper; + } + + /** + * Retrieves whether the Indexable is indexable. + * + * @param Indexable $indexable The Indexable. + * + * @return bool Whether the Indexable is indexable. + */ + public function is_indexable( Indexable $indexable ) { + if ( $indexable->is_robots_noindex === null ) { + // No individual value set, check the global setting. + switch ( $indexable->object_type ) { + case 'post': + return $this->post_type_helper->is_indexable( $indexable->object_sub_type ); + case 'term': + return $this->taxonomy_helper->is_indexable( $indexable->object_sub_type ); + } + } + + return $indexable->is_robots_noindex === false; + } + + /** + * Sets the robots index to noindex. + * + * @param array $robots The current robots value. + * + * @return array The altered robots string. + */ + public function set_robots_no_index( $robots ) { + if ( ! \is_array( $robots ) ) { + \_deprecated_argument( __METHOD__, '14.1', '$robots has to be a key-value paired array.' ); + return $robots; + } + + $robots['index'] = 'noindex'; + + return $robots; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/robots-txt-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/robots-txt-helper.php new file mode 100644 index 00000000..846e9876 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/robots-txt-helper.php @@ -0,0 +1,108 @@ +robots_txt_user_agents = new User_Agent_List(); + $this->robots_txt_sitemaps = []; + } + + /** + * Add a disallow rule for a specific user agent if it does not exist yet. + * + * @param string $user_agent The user agent to add the disallow rule to. + * @param string $path The path to add as a disallow rule. + * + * @return void + */ + public function add_disallow( $user_agent, $path ) { + $user_agent_container = $this->robots_txt_user_agents->get_user_agent( $user_agent ); + $user_agent_container->add_disallow_directive( $path ); + } + + /** + * Add an allow rule for a specific user agent if it does not exist yet. + * + * @param string $user_agent The user agent to add the allow rule to. + * @param string $path The path to add as a allow rule. + * + * @return void + */ + public function add_allow( $user_agent, $path ) { + $user_agent_container = $this->robots_txt_user_agents->get_user_agent( $user_agent ); + $user_agent_container->add_allow_directive( $path ); + } + + /** + * Add sitemap to robots.txt if it does not exist yet. + * + * @param string $absolute_path The absolute path to the sitemap to add. + * + * @return void + */ + public function add_sitemap( $absolute_path ) { + if ( ! \in_array( $absolute_path, $this->robots_txt_sitemaps, true ) ) { + $this->robots_txt_sitemaps[] = $absolute_path; + } + } + + /** + * Get all registered disallow directives per user agent. + * + * @return array The registered disallow directives per user agent. + */ + public function get_disallow_directives() { + return $this->robots_txt_user_agents->get_disallow_directives(); + } + + /** + * Get all registered allow directives per user agent. + * + * @return array The registered allow directives per user agent. + */ + public function get_allow_directives() { + return $this->robots_txt_user_agents->get_allow_directives(); + } + + /** + * Get all registered sitemap rules. + * + * @return array The registered sitemap rules. + */ + public function get_sitemap_rules() { + return $this->robots_txt_sitemaps; + } + + /** + * Get all registered user agents + * + * @return array The registered user agents. + */ + public function get_robots_txt_user_agents() { + return $this->robots_txt_user_agents->get_user_agents(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/sanitization-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/sanitization-helper.php new file mode 100644 index 00000000..63d6e2b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/sanitization-helper.php @@ -0,0 +1,39 @@ +is_author_supported( $post_type ); + } + + /** + * Checks whether author is supported for the passed object sub type. + * + * @param string $object_sub_type The sub type of the object to check author support for. + * + * @return bool True if author is supported for the passed object sub type. + */ + public function is_author_supported( $object_sub_type ) { + return \post_type_supports( $object_sub_type, 'author' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/html-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/html-helper.php new file mode 100644 index 00000000..813b6e2a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/html-helper.php @@ -0,0 +1,76 @@ +is_non_empty_string_or_stringable( $html ) ) { + if ( \is_int( $html ) || \is_float( $html ) ) { + return (string) $html; + } + + return ''; + } + + return \strip_tags( $html, '


              • ' ); + } + + /** + * Strips the tags in a smart way. + * + * @param string $html The original HTML. + * + * @return string The sanitized HTML. + */ + public function smart_strip_tags( $html ) { + if ( ! $this->is_non_empty_string_or_stringable( $html ) ) { + if ( \is_int( $html ) || \is_float( $html ) ) { + return (string) $html; + } + + return ''; + } + + // Replace all new lines with spaces. + $html = \preg_replace( '/(\r|\n)/', ' ', $html ); + + // Replace
                tags with spaces. + $html = \preg_replace( '//i', ' ', $html ); + + // Replace closing

                and other tags with the same tag with a space after it, so we don't end up connecting words when we remove them later. + $html = \preg_replace( '/<\/(p|div|h\d)>/i', ' ', $html ); + + // Replace list items with list identifiers so it still looks natural. + $html = \preg_replace( '/(]*>)/i', '$1• ', $html ); + + // Strip tags. + $html = \wp_strip_all_tags( $html ); + + // Replace multiple spaces with one space. + $html = \preg_replace( '!\s+!', ' ', $html ); + + return \trim( $html ); + } + + /** + * Verifies that the received input is either a string or stringable object. + * + * @param string $html The original HTML. + * + * @return bool + */ + private function is_non_empty_string_or_stringable( $html ) { + return ( \is_string( $html ) || ( \is_object( $html ) && \method_exists( $html, '__toString' ) ) ) && ! empty( $html ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/id-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/id-helper.php new file mode 100644 index 00000000..db7ea5f3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/id-helper.php @@ -0,0 +1,29 @@ +site_url . Schema_IDs::PERSON_HASH . \wp_hash( $user->user_login . $user_id ); + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/image-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/image-helper.php new file mode 100644 index 00000000..0878b50b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/image-helper.php @@ -0,0 +1,205 @@ +html = $html; + $this->language = $language; + $this->image = $image; + } + + /** + * Find an image based on its URL and generate a Schema object for it. + * + * @param string $schema_id The `@id` to use for the returned image. + * @param string $url The image URL to base our object on. + * @param string $caption An optional caption. + * @param bool $add_hash Whether a hash will be added as a suffix in the @id. + * @param bool $use_link_table Whether the SEO Links table will be used to retrieve the id. + * + * @return array Schema ImageObject array. + */ + public function generate_from_url( $schema_id, $url, $caption = '', $add_hash = false, $use_link_table = true ) { + $attachment_id = $this->image->get_attachment_by_url( $url, $use_link_table ); + if ( $attachment_id > 0 ) { + return $this->generate_from_attachment_id( $schema_id, $attachment_id, $caption, $add_hash ); + } + + return $this->simple_image_object( $schema_id, $url, $caption, $add_hash ); + } + + /** + * Retrieve data about an image from the database and use it to generate a Schema object. + * + * @param string $schema_id The `@id` to use for the returned image. + * @param int $attachment_id The attachment to retrieve data from. + * @param string $caption The caption string, if there is one. + * @param bool $add_hash Whether a hash will be added as a suffix in the @id. + * + * @return array Schema ImageObject array. + */ + public function generate_from_attachment_id( $schema_id, $attachment_id, $caption = '', $add_hash = false ) { + $data = $this->generate_object(); + $url = $this->image->get_attachment_image_url( $attachment_id, 'full' ); + + $id_suffix = ( $add_hash ) ? \md5( $url ) : ''; + + $data['@id'] = $schema_id . $id_suffix; + $data['url'] = $url; + $data['contentUrl'] = $url; + $data = $this->add_image_size( $data, $attachment_id ); + $data = $this->add_caption( $data, $attachment_id, $caption ); + + return $data; + } + + /** + * Retrieve data about an image from the database and use it to generate a Schema object. + * + * @param string $schema_id The `@id` to use for the returned image. + * @param array $attachment_meta The attachment metadata. + * @param string $caption The caption string, if there is one. + * @param bool $add_hash Whether a hash will be added as a suffix in the @id. + * + * @return array Schema ImageObject array. + */ + public function generate_from_attachment_meta( $schema_id, $attachment_meta, $caption = '', $add_hash = false ) { + $data = $this->generate_object(); + + $id_suffix = ( $add_hash ) ? \md5( $attachment_meta['url'] ) : ''; + + $data['@id'] = $schema_id . $id_suffix; + $data['url'] = $attachment_meta['url']; + $data['contentUrl'] = $data['url']; + $data['width'] = $attachment_meta['width']; + $data['height'] = $attachment_meta['height']; + if ( ! empty( $caption ) ) { + $data['caption'] = $this->html->smart_strip_tags( $caption ); + } + + return $data; + } + + /** + * If we can't find $url in our database, we output a simple ImageObject. + * + * @param string $schema_id The `@id` to use for the returned image. + * @param string $url The image URL. + * @param string $caption A caption, if set. + * @param bool $add_hash Whether a hash will be added as a suffix in the @id. + * + * @return array Schema ImageObject array. + */ + public function simple_image_object( $schema_id, $url, $caption = '', $add_hash = false ) { + $data = $this->generate_object(); + + $id_suffix = ( $add_hash ) ? \md5( $url ) : ''; + + $data['@id'] = $schema_id . $id_suffix; + $data['url'] = $url; + $data['contentUrl'] = $url; + + if ( ! empty( $caption ) ) { + $data['caption'] = $this->html->smart_strip_tags( $caption ); + } + + return $data; + } + + /** + * Retrieves an image's caption if set, or uses the alt tag if that's set. + * + * @param array $data An ImageObject Schema array. + * @param int $attachment_id Attachment ID. + * @param string $caption The caption string, if there is one. + * + * @return array An imageObject with width and height set if available. + */ + private function add_caption( $data, $attachment_id, $caption = '' ) { + if ( $caption !== '' ) { + $data['caption'] = $caption; + + return $data; + } + + $caption = $this->image->get_caption( $attachment_id ); + if ( ! empty( $caption ) ) { + $data['caption'] = $this->html->smart_strip_tags( $caption ); + + return $data; + } + + return $data; + } + + /** + * Generates our bare bone ImageObject. + * + * @return array an empty ImageObject + */ + private function generate_object() { + $data = [ + '@type' => 'ImageObject', + ]; + + $data = $this->language->add_piece_language( $data ); + + return $data; + } + + /** + * Adds image's width and height. + * + * @param array $data An ImageObject Schema array. + * @param int $attachment_id Attachment ID. + * + * @return array An imageObject with width and height set if available. + */ + private function add_image_size( $data, $attachment_id ) { + $image_meta = $this->image->get_metadata( $attachment_id ); + if ( empty( $image_meta['width'] ) || empty( $image_meta['height'] ) ) { + return $data; + } + $data['width'] = $image_meta['width']; + $data['height'] = $image_meta['height']; + + return $data; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/language-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/language-helper.php new file mode 100644 index 00000000..902ed8ae --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/schema/language-helper.php @@ -0,0 +1,32 @@ +replace_vars = $replace_vars; + $this->id_helper = $id_helper; + $this->date_helper = $date_helper; + } + + /** + * Replaces the variables. + * + * @param array $schema_data The Schema data. + * @param Indexable_Presentation $presentation The indexable presentation. + * + * @return array The array with replaced vars. + */ + public function replace( array $schema_data, Indexable_Presentation $presentation ) { + foreach ( $schema_data as $key => $value ) { + if ( \is_array( $value ) ) { + $schema_data[ $key ] = $this->replace( $value, $presentation ); + + continue; + } + + $schema_data[ $key ] = $this->replace_vars->replace( $value, $presentation->source ); + } + + return $schema_data; + } + + /** + * Registers the Schema-related replace vars. + * + * @param Meta_Tags_Context $context The meta tags context. + * + * @return void + */ + public function register_replace_vars( $context ) { + $replace_vars = [ + 'main_schema_id' => $context->main_schema_id, + 'author_id' => $this->id_helper->get_user_schema_id( $context->indexable->author_id, $context ), + 'person_id' => $context->site_url . Schema_IDs::PERSON_HASH, + 'primary_image_id' => $context->canonical . Schema_IDs::PRIMARY_IMAGE_HASH, + 'webpage_id' => $context->main_schema_id, + 'website_id' => $context->site_url . Schema_IDs::WEBSITE_HASH, + 'organization_id' => $context->site_url . Schema_IDs::ORGANIZATION_HASH, + ]; + + if ( $context->post ) { + // Post does not always exist, e.g. on term pages. + $replace_vars['post_date'] = $this->date_helper->format( $context->post->post_date, \DATE_ATOM ); + } + + foreach ( $replace_vars as $var => $value ) { + $this->register_replacement( $var, $value ); + } + } + + /** + * Registers a replace var and its value. + * + * @param string $variable The replace variable. + * @param string $value The value that the variable should be replaced with. + * + * @return void + */ + protected function register_replacement( $variable, $value ) { + $this->replace_vars->safe_register_replacement( + $variable, + $this->get_identity_function( $value ) + ); + } + + /** + * Returns an anonymous function that in turn just returns the given value. + * + * @param mixed $value The value that the function should return. + * + * @return Closure A function that returns the given value. + */ + protected function get_identity_function( $value ) { + return static function () use ( $value ) { + return $value; + }; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/score-icon-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/score-icon-helper.php new file mode 100644 index 00000000..6905b725 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/score-icon-helper.php @@ -0,0 +1,98 @@ +robots_helper = $robots_helper; + } + + /** + * Creates a Score_Icon_Presenter for the readability analysis. + * + * @param int $score The readability analysis score. + * @param string $extra_class Optional. Any extra class. + * + * @return Score_Icon_Presenter The Score_Icon_Presenter. + */ + public function for_readability( $score, $extra_class = '' ) { + $rank = WPSEO_Rank::from_numeric_score( (int) $score ); + $class = $rank->get_css_class(); + if ( $extra_class ) { + $class .= " $extra_class"; + } + + return new Score_Icon_Presenter( $rank->get_label(), $class ); + } + + /** + * Creates a Score_Icon_Presenter for the inclusive language analysis. + * + * @param int $score The inclusive language analysis score. + * @param string $extra_class Optional. Any extra class. + * + * @return Score_Icon_Presenter The Score_Icon_Presenter. + */ + public function for_inclusive_language( $score, $extra_class = '' ) { + $rank = WPSEO_Rank::from_numeric_score( (int) $score ); + $class = $rank->get_css_class(); + if ( $extra_class ) { + $class .= " $extra_class"; + } + + return new Score_Icon_Presenter( $rank->get_inclusive_language_label(), $class ); + } + + /** + * Creates a Score_Icon_Presenter for the SEO analysis from an indexable. + * + * @param Indexable|false $indexable The Indexable. + * @param string $extra_class Optional. Any extra class. + * @param string $no_index_title Optional. Override the title when not indexable. + * + * @return Score_Icon_Presenter The Score_Icon_Presenter. + */ + public function for_seo( $indexable, $extra_class = '', $no_index_title = '' ) { + $is_indexable = $indexable && $this->robots_helper->is_indexable( $indexable ); + + if ( ! $is_indexable ) { + $rank = new WPSEO_Rank( WPSEO_Rank::NO_INDEX ); + $title = empty( $no_index_title ) ? $rank->get_label() : $no_index_title; + } + elseif ( empty( $indexable && $indexable->primary_focus_keyword ) ) { + $rank = new WPSEO_Rank( WPSEO_Rank::BAD ); + $title = \__( 'Focus keyphrase not set', 'wordpress-seo' ); + } + else { + $rank = WPSEO_Rank::from_numeric_score( ( $indexable ) ? $indexable->primary_focus_keyword_score : 0 ); + $title = $rank->get_label(); + } + + $class = $rank->get_css_class(); + if ( $extra_class ) { + $class .= " $extra_class"; + } + + return new Score_Icon_Presenter( $title, $class ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/short-link-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/short-link-helper.php new file mode 100644 index 00000000..e9cc9fb5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/short-link-helper.php @@ -0,0 +1,152 @@ +options_helper = $options_helper; + $this->product_helper = $product_helper; + } + + /** + * Builds a URL to use in the plugin as shortlink. + * + * @param string $url The URL to build upon. + * + * @return string The final URL. + */ + public function build( $url ) { + return \add_query_arg( $this->collect_additional_shortlink_data(), $url ); + } + + /** + * Returns a version of the URL with a utm_content with the current version. + * + * @param string $url The URL to build upon. + * + * @return string The final URL. + */ + public function get( $url ) { + return $this->build( $url ); + } + + /** + * Echoes a version of the URL with a utm_content with the current version. + * + * @param string $url The URL to build upon. + * + * @return void + */ + public function show( $url ) { + echo \esc_url( $this->get( $url ) ); + } + + /** + * Gets the shortlink's query params. + * + * @return array The shortlink's query params. + */ + public function get_query_params() { + return $this->collect_additional_shortlink_data(); + } + + /** + * Gets the current site's PHP version, without the extra info. + * + * @return string The PHP version. + */ + private function get_php_version() { + $version = \explode( '.', \PHP_VERSION ); + + return (int) $version[0] . '.' . (int) $version[1]; + } + + /** + * Gets the current site's platform version. + * + * @return string The wp_version. + */ + protected function get_platform_version() { + return $GLOBALS['wp_version']; + } + + /** + * Collects the additional data necessary for the shortlink. + * + * @return array The shortlink data. + */ + protected function collect_additional_shortlink_data() { + $data = [ + 'php_version' => $this->get_php_version(), + 'platform' => 'wordpress', + 'platform_version' => $this->get_platform_version(), + 'software' => $this->get_software(), + 'software_version' => \WPSEO_VERSION, + 'days_active' => $this->get_days_active(), + 'user_language' => \get_user_locale(), + ]; + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && \is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $admin_page = \sanitize_text_field( \wp_unslash( $_GET['page'] ) ); + if ( ! empty( $admin_page ) ) { + $data['screen'] = $admin_page; + } + } + + return $data; + } + + /** + * Get our software and whether it's active or not. + * + * @return string The software name. + */ + protected function get_software() { + if ( $this->product_helper->is_premium() ) { + return 'premium'; + } + + return 'free'; + } + + /** + * Gets the number of days the plugin has been active. + * + * @return int The number of days the plugin is active. + */ + protected function get_days_active() { + $date_activated = $this->options_helper->get( 'first_activated_on' ); + $datediff = ( \time() - $date_activated ); + + return (int) \round( $datediff / \DAY_IN_SECONDS ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/site-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/site-helper.php new file mode 100644 index 00000000..1123ee5f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/site-helper.php @@ -0,0 +1,28 @@ + 'get_non_valid_url', + 'instagram' => 'get_non_valid_url', + 'linkedin' => 'get_non_valid_url', + 'myspace' => 'get_non_valid_url', + 'pinterest' => 'get_non_valid_url', + 'soundcloud' => 'get_non_valid_url', + 'tumblr' => 'get_non_valid_url', + 'twitter' => 'get_non_valid_twitter', + 'youtube' => 'get_non_valid_url', + 'wikipedia' => 'get_non_valid_url', + ]; + + /** + * The fields for the organization social profiles payload. + * + * @var array + */ + private $organization_social_profile_fields = [ + 'facebook_site' => 'get_non_valid_url', + 'twitter_site' => 'get_non_valid_twitter', + 'other_social_urls' => 'get_non_valid_url_array', + ]; + + /** + * The Options_Helper instance. + * + * @var Options_Helper + */ + protected $options_helper; + + /** + * Social_Profiles_Helper constructor. + * + * @param Options_Helper $options_helper The WPSEO options helper. + */ + public function __construct( Options_Helper $options_helper ) { + $this->options_helper = $options_helper; + } + + /** + * Gets the person social profile fields supported by us. + * + * @return array The social profile fields. + */ + public function get_person_social_profile_fields() { + /** + * Filter: Allow changes to the social profiles fields available for a person. + * + * @param array $person_social_profile_fields The social profile fields. + */ + $person_social_profile_fields = \apply_filters( 'wpseo_person_social_profile_fields', $this->person_social_profile_fields ); + + return (array) $person_social_profile_fields; + } + + /** + * Gets the organization social profile fields supported by us. + * + * @return array The organization profile fields. + */ + public function get_organization_social_profile_fields() { + /** + * Filter: Allow changes to the social profiles fields available for an organization. + * + * @param array $organization_social_profile_fields The social profile fields. + */ + $organization_social_profile_fields = \apply_filters( 'wpseo_organization_social_profile_fields', $this->organization_social_profile_fields ); + + return (array) $organization_social_profile_fields; + } + + /** + * Gets the person social profiles stored in the database. + * + * @param int $person_id The id of the person. + * + * @return array The person's social profiles. + */ + public function get_person_social_profiles( $person_id ) { + $social_profile_fields = \array_keys( $this->get_person_social_profile_fields() ); + $person_social_profiles = \array_combine( $social_profile_fields, \array_fill( 0, \count( $social_profile_fields ), '' ) ); + + // If no person has been selected, $person_id is set to false. + if ( \is_numeric( $person_id ) ) { + foreach ( \array_keys( $person_social_profiles ) as $field_name ) { + $value = \get_user_meta( $person_id, $field_name, true ); + // If $person_id is an integer but does not represent a valid user, get_user_meta returns false. + if ( ! \is_bool( $value ) ) { + $person_social_profiles[ $field_name ] = $value; + } + } + } + + return $person_social_profiles; + } + + /** + * Gets the organization social profiles stored in the database. + * + * @return array The social profiles for the organization. + */ + public function get_organization_social_profiles() { + $organization_social_profiles_fields = \array_keys( $this->get_organization_social_profile_fields() ); + $organization_social_profiles = []; + + foreach ( $organization_social_profiles_fields as $field_name ) { + $default_value = ''; + if ( $field_name === 'other_social_urls' ) { + $default_value = []; + } + $social_profile_value = $this->options_helper->get( $field_name, $default_value ); + + if ( $field_name === 'other_social_urls' ) { + $other_social_profiles = \array_map( '\urldecode', \array_filter( $social_profile_value ) ); + $organization_social_profiles['other_social_urls'] = $other_social_profiles; + continue; + } + + if ( $field_name === 'twitter_site' && $social_profile_value !== '' ) { + $organization_social_profiles[ $field_name ] = 'https://x.com/' . $social_profile_value; + continue; + } + + $organization_social_profiles[ $field_name ] = \urldecode( $social_profile_value ); + } + + return $organization_social_profiles; + } + + /** + * Stores the values for the person's social profiles. + * + * @param int $person_id The id of the person to edit. + * @param array $social_profiles The array of the person's social profiles to be set. + * + * @return string[] An array of field names which failed to be saved in the db. + */ + public function set_person_social_profiles( $person_id, $social_profiles ) { + $failures = []; + $person_social_profile_fields = $this->get_person_social_profile_fields(); + + // First validate all social profiles, before even attempting to save them. + foreach ( $person_social_profile_fields as $field_name => $validation_method ) { + if ( ! isset( $social_profiles[ $field_name ] ) ) { + // Just skip social profiles that were not passed. + continue; + } + + if ( $social_profiles[ $field_name ] === '' ) { + continue; + } + + $value_to_validate = $social_profiles[ $field_name ]; + $failures = \array_merge( $failures, \call_user_func( [ $this, $validation_method ], $value_to_validate, $field_name ) ); + } + + if ( ! empty( $failures ) ) { + return $failures; + } + + // All social profiles look good, now let's try to save them. + foreach ( \array_keys( $person_social_profile_fields ) as $field_name ) { + if ( ! isset( $social_profiles[ $field_name ] ) ) { + // Just skip social profiles that were not passed. + continue; + } + $social_profiles[ $field_name ] = $this->sanitize_social_field( $social_profiles[ $field_name ] ); + \update_user_meta( $person_id, $field_name, $social_profiles[ $field_name ] ); + } + + return $failures; + } + + /** + * Stores the values for the organization's social profiles. + * + * @param array $social_profiles An array with the social profiles values to be saved in the db. + * + * @return string[] An array of field names which failed to be saved in the db. + */ + public function set_organization_social_profiles( $social_profiles ) { + $failures = []; + $organization_social_profile_fields = $this->get_organization_social_profile_fields(); + + // First validate all social profiles, before even attempting to save them. + foreach ( $organization_social_profile_fields as $field_name => $validation_method ) { + if ( ! isset( $social_profiles[ $field_name ] ) ) { + // Just skip social profiles that were not passed. + continue; + } + $social_profiles[ $field_name ] = $this->sanitize_social_field( $social_profiles[ $field_name ] ); + + $value_to_validate = $social_profiles[ $field_name ]; + $failures = \array_merge( $failures, \call_user_func( [ $this, $validation_method ], $value_to_validate, $field_name ) ); + } + + if ( ! empty( $failures ) ) { + return $failures; + } + + // All social profiles look good, now let's try to save them. + foreach ( \array_keys( $organization_social_profile_fields ) as $field_name ) { + if ( ! isset( $social_profiles[ $field_name ] ) ) { + // Just skip social profiles that were not passed. + continue; + } + + // Remove empty strings in Other Social URLs. + if ( $field_name === 'other_social_urls' ) { + $other_social_urls = \array_filter( + $social_profiles[ $field_name ], + static function ( $other_social_url ) { + return $other_social_url !== ''; + } + ); + + $social_profiles[ $field_name ] = \array_values( $other_social_urls ); + } + + $result = $this->options_helper->set( $field_name, $social_profiles[ $field_name ] ); + if ( ! $result ) { + /** + * The value for Twitter might have been sanitised from URL to username. + * If so, $result will be false. We should check if the option value is part of the received value. + */ + if ( $field_name === 'twitter_site' ) { + $current_option = $this->options_helper->get( $field_name ); + if ( ! \strpos( $social_profiles[ $field_name ], 'twitter.com/' . $current_option ) && ! \strpos( $social_profiles[ $field_name ], 'x.com/' . $current_option ) ) { + $failures[] = $field_name; + } + } + else { + $failures[] = $field_name; + } + } + } + + if ( ! empty( $failures ) ) { + return $failures; + } + + return []; + } + + /** + * Returns a sanitized social field. + * + * @param string|array $social_field The social field to sanitize. + * + * @return string|array The sanitized social field. + */ + protected function sanitize_social_field( $social_field ) { + if ( \is_array( $social_field ) ) { + foreach ( $social_field as $key => $value ) { + $social_field[ $key ] = \sanitize_text_field( $value ); + } + + return $social_field; + } + + return \sanitize_text_field( $social_field ); + } + + /** + * Checks if url is not valid and returns the name of the setting if it's not. + * + * @param string $url The url to be validated. + * @param string $url_setting The name of the setting to be updated with the url. + * + * @return array An array with the setting that the non-valid url is about to update. + */ + protected function get_non_valid_url( $url, $url_setting ) { + if ( $this->options_helper->is_social_url_valid( $url ) ) { + return []; + } + + return [ $url_setting ]; + } + + /** + * Checks if urls in an array are not valid and return the name of the setting if one of them is not, including the non-valid url's index in the array + * + * @param array $urls The urls to be validated. + * @param string $urls_setting The name of the setting to be updated with the urls. + * + * @return array An array with the settings that the non-valid urls are about to update, suffixed with a dash-separated index of the positions of those settings, eg. other_social_urls-2. + */ + protected function get_non_valid_url_array( $urls, $urls_setting ) { + $non_valid_url_array = []; + + foreach ( $urls as $key => $url ) { + if ( ! $this->options_helper->is_social_url_valid( $url ) ) { + $non_valid_url_array[] = $urls_setting . '-' . $key; + } + } + + return $non_valid_url_array; + } + + /** + * Checks if the twitter value is not valid and returns the name of the setting if it's not. + * + * @param array $twitter_site The twitter value to be validated. + * @param string $twitter_setting The name of the twitter setting to be updated with the value. + * + * @return array An array with the setting that the non-valid twitter value is about to update. + */ + protected function get_non_valid_twitter( $twitter_site, $twitter_setting ) { + if ( $this->options_helper->is_twitter_id_valid( $twitter_site, false ) ) { + return []; + } + + return [ $twitter_setting ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/string-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/string-helper.php new file mode 100644 index 00000000..c59597c8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/string-helper.php @@ -0,0 +1,45 @@ +options = $options; + $this->string = $string_helper; + } + + /** + * Checks if the requested term is indexable. + * + * @param string $taxonomy The taxonomy slug. + * + * @return bool True when taxonomy is set to index. + */ + public function is_indexable( $taxonomy ) { + return ! $this->options->get( 'noindex-tax-' . $taxonomy, false ); + } + + /** + * Returns an array with the public taxonomies. + * + * @param string $output The output type to use. + * + * @return string[]|WP_Taxonomy[] Array with all the public taxonomies. + * The type depends on the specified output variable. + */ + public function get_public_taxonomies( $output = 'names' ) { + return \get_taxonomies( [ 'public' => true ], $output ); + } + + /** + * Retrieves the term description (without tags). + * + * @param int $term_id Term ID. + * + * @return string Term description (without tags). + */ + public function get_term_description( $term_id ) { + return $this->string->strip_all_tags( \term_description( $term_id ) ); + } + + /** + * Retrieves the taxonomy term's meta values. + * + * @codeCoverageIgnore We have to write test when this method contains own code. + * + * @param WP_Term $term Term to get the meta value for. + * + * @return array|bool Array of all the meta data for the term. + * False if the term does not exist or the $meta provided is invalid. + */ + public function get_term_meta( $term ) { + return WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, null ); + } + + /** + * Gets the passed taxonomy's slug. + * + * @param string $taxonomy The name of the taxonomy. + * + * @return string The slug for the taxonomy. Returns the taxonomy's name if no slug could be found. + */ + public function get_taxonomy_slug( $taxonomy ) { + $taxonomy_object = \get_taxonomy( $taxonomy ); + + if ( $taxonomy_object && \property_exists( $taxonomy_object, 'rewrite' ) && \is_array( $taxonomy_object->rewrite ) && isset( $taxonomy_object->rewrite['slug'] ) ) { + return $taxonomy_object->rewrite['slug']; + } + + return \strtolower( $taxonomy_object->name ); + } + + /** + * Returns an array with the custom taxonomies. + * + * @param string $output The output type to use. + * + * @return string[]|WP_Taxonomy[] Array with all the custom taxonomies. + * The type depends on the specified output variable. + */ + public function get_custom_taxonomies( $output = 'names' ) { + return \get_taxonomies( [ '_builtin' => false ], $output ); + } + + /** + * Returns an array of taxonomies that are excluded from being indexed for the + * indexables. + * + * @return array The excluded taxonomies. + */ + public function get_excluded_taxonomies_for_indexables() { + /** + * Filter: 'wpseo_indexable_excluded_taxonomies' - Allow developers to prevent a certain taxonomy + * from being saved to the indexable table. + * + * @param array $excluded_taxonomies The currently excluded taxonomies. + */ + $excluded_taxonomies = \apply_filters( 'wpseo_indexable_excluded_taxonomies', [] ); + + // Failsafe, to always make sure that `excluded_taxonomies` is an array. + if ( ! \is_array( $excluded_taxonomies ) ) { + return []; + } + + return $excluded_taxonomies; + } + + /** + * Checks if the taxonomy is excluded. + * + * @param string $taxonomy The taxonomy to check. + * + * @return bool If the taxonomy is excluded. + */ + public function is_excluded( $taxonomy ) { + return \in_array( $taxonomy, $this->get_excluded_taxonomies_for_indexables(), true ); + } + + /** + * This builds a list of indexable taxonomies. + * + * @return array The indexable taxonomies. + */ + public function get_indexable_taxonomies() { + $public_taxonomies = $this->get_public_taxonomies(); + $excluded_taxonomies = $this->get_excluded_taxonomies_for_indexables(); + + // `array_values`, to make sure that the keys are reset. + return \array_values( \array_diff( $public_taxonomies, $excluded_taxonomies ) ); + } + + /** + * Returns an array of complete taxonomy objects for all indexable taxonomies. + * + * @return array List of indexable indexables objects. + */ + public function get_indexable_taxonomy_objects() { + $taxonomy_objects = []; + $indexable_taxonomies = $this->get_indexable_taxonomies(); + foreach ( $indexable_taxonomies as $taxonomy ) { + $taxonomy_object = \get_taxonomy( $taxonomy ); + if ( ! empty( $taxonomy_object ) ) { + $taxonomy_objects[ $taxonomy ] = $taxonomy_object; + } + } + + return $taxonomy_objects; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/twitter/image-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/twitter/image-helper.php new file mode 100644 index 00000000..bb845dcc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/twitter/image-helper.php @@ -0,0 +1,58 @@ +image = $image; + } + + /** + * The image size to use for Twitter. + * + * @return string Image size string. + */ + public function get_image_size() { + /** + * Filter: 'wpseo_twitter_image_size' - Allow changing the Twitter Card image size. + * + * @param string $featured_img Image size string. + */ + return (string) \apply_filters( 'wpseo_twitter_image_size', 'full' ); + } + + /** + * Retrieves an image url by its id. + * + * @param int $image_id The image id. + * + * @return string The image url. Empty string if the attachment is not valid. + */ + public function get_by_id( $image_id ) { + if ( ! $this->image->is_valid_attachment( $image_id ) ) { + return ''; + } + + return $this->image->get_attachment_image_source( $image_id, $this->get_image_size() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/url-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/url-helper.php new file mode 100644 index 00000000..9fb3e433 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/url-helper.php @@ -0,0 +1,295 @@ +get_url_path( $url ); + + if ( $path === '' ) { + return ''; + } + + $parts = \explode( '.', $path ); + if ( empty( $parts ) || \count( $parts ) === 1 ) { + return ''; + } + + return \end( $parts ); + } + + /** + * Ensures that the given url is an absolute url. + * + * @param string $url The url that needs to be absolute. + * + * @return string The absolute url. + */ + public function ensure_absolute_url( $url ) { + if ( ! \is_string( $url ) || $url === '' ) { + return $url; + } + + if ( $this->is_relative( $url ) === true ) { + return $this->build_absolute_url( $url ); + } + + return $url; + } + + /** + * Parse the home URL setting to find the base URL for relative URLs. + * + * @param string|null $path Optional path string. + * + * @return string + */ + public function build_absolute_url( $path = null ) { + $path = \wp_parse_url( $path, \PHP_URL_PATH ); + $url_parts = \wp_parse_url( \home_url() ); + + $base_url = \trailingslashit( $url_parts['scheme'] . '://' . $url_parts['host'] ); + + if ( ! \is_null( $path ) ) { + $base_url .= \ltrim( $path, '/' ); + } + + return $base_url; + } + + /** + * Returns the link type. + * + * @param array $url The URL, as parsed by wp_parse_url. + * @param array|null $home_url Optional. The home URL, as parsed by wp_parse_url. Used to avoid reparsing the home_url. + * @param bool $is_image Whether or not the link is an image. + * + * @return string The link type. + */ + public function get_link_type( $url, $home_url = null, $is_image = false ) { + // If there is no scheme and no host the link is always internal. + // Beware, checking just the scheme isn't enough as a link can be //yoast.com for instance. + if ( empty( $url['scheme'] ) && empty( $url['host'] ) ) { + return ( $is_image ) ? SEO_Links::TYPE_INTERNAL_IMAGE : SEO_Links::TYPE_INTERNAL; + } + + // If there is a scheme but it's not http(s) then the link is always external. + if ( \array_key_exists( 'scheme', $url ) && ! \in_array( $url['scheme'], [ 'http', 'https' ], true ) ) { + return ( $is_image ) ? SEO_Links::TYPE_EXTERNAL_IMAGE : SEO_Links::TYPE_EXTERNAL; + } + + if ( \is_null( $home_url ) ) { + $home_url = \wp_parse_url( \home_url() ); + } + + // When the base host is equal to the host. + if ( isset( $url['host'] ) && $url['host'] !== $home_url['host'] ) { + return ( $is_image ) ? SEO_Links::TYPE_EXTERNAL_IMAGE : SEO_Links::TYPE_EXTERNAL; + } + + // There is no base path and thus all URLs of the same domain are internal. + if ( empty( $home_url['path'] ) ) { + return ( $is_image ) ? SEO_Links::TYPE_INTERNAL_IMAGE : SEO_Links::TYPE_INTERNAL; + } + + // When there is a path and it matches the start of the url. + if ( isset( $url['path'] ) && \strpos( $url['path'], $home_url['path'] ) === 0 ) { + return ( $is_image ) ? SEO_Links::TYPE_INTERNAL_IMAGE : SEO_Links::TYPE_INTERNAL; + } + + return ( $is_image ) ? SEO_Links::TYPE_EXTERNAL_IMAGE : SEO_Links::TYPE_EXTERNAL; + } + + /** + * Recreate current URL. + * + * @param bool $with_request_uri Whether we want the REQUEST_URI appended. + * + * @return string + */ + public function recreate_current_url( $with_request_uri = true ) { + $current_url = 'http'; + if ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] === 'on' ) { + $current_url .= 's'; + } + $current_url .= '://'; + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- We know this is scary. + $suffix = ( $with_request_uri && isset( $_SERVER['REQUEST_URI'] ) ) ? $_SERVER['REQUEST_URI'] : ''; + + if ( isset( $_SERVER['SERVER_NAME'] ) && ! empty( $_SERVER['SERVER_NAME'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- We know this is scary. + $server_name = $_SERVER['SERVER_NAME']; + } + else { + // Early return with just the path. + return $suffix; + } + + $server_port = ''; + if ( isset( $_SERVER['SERVER_PORT'] ) && $_SERVER['SERVER_PORT'] !== '80' && $_SERVER['SERVER_PORT'] !== '443' ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- We know this is scary. + $server_port = $_SERVER['SERVER_PORT']; + } + + if ( ! empty( $server_port ) ) { + $current_url .= $server_name . ':' . $server_port . $suffix; + } + else { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- We know this is scary. + $current_url .= $server_name . $suffix; + } + + return $current_url; + } + + /** + * Parses a URL and returns its components, this wrapper function was created to support unit tests. + * + * @param string $parsed_url The URL to parse. + * @return array The parsed components of the URL. + */ + public function parse_str_params( $parsed_url ) { + $array = []; + + // @todo parse_str changes spaces in param names into `_`, we should find a better way to support them. + \wp_parse_str( $parsed_url, $array ); + + return $array; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/user-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/user-helper.php new file mode 100644 index 00000000..d319a8c2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/user-helper.php @@ -0,0 +1,109 @@ +options = $options; + } + + /** + * Checks if the integration should be active for the current user. + * + * @return bool Whether the integration is active. + */ + public function is_active() { + $conditional = new Non_Multisite_Conditional(); + + if ( ! $conditional->is_met() ) { + return false; + } + + if ( ! \current_user_can( 'publish_posts' ) && ! \current_user_can( 'publish_pages' ) ) { + return false; + } + + return (bool) $this->options->get( 'wincher_integration_active', true ); + } + + /** + * Checks if the user is logged in to Wincher. + * + * @return bool The Wincher login status. + */ + public function login_status() { + try { + $wincher = \YoastSEO()->classes->get( Wincher_Client::class ); + } catch ( Empty_Property_Exception $e ) { + // Return false if token is malformed (empty property). + return false; + } + + // Get token (and refresh it if it's expired). + try { + $wincher->get_tokens(); + } catch ( Authentication_Failed_Exception $e ) { + return false; + } catch ( Empty_Token_Exception $e ) { + return false; + } + + return $wincher->has_valid_tokens(); + } + + /** + * Returns the Wincher links that can be used to localize the global admin + * script. Mainly exists to avoid duplicating these links in multiple places + * around the code base. + * + * @return string[] + */ + public function get_admin_global_links() { + return [ + 'links.wincher.login' => 'https://app.wincher.com/login?utm_medium=plugin&utm_source=yoast&referer=yoast&partner=yoast', + 'links.wincher.about' => WPSEO_Shortlinker::get( 'https://yoa.st/dashboard-about-wincher' ), + 'links.wincher.pricing' => WPSEO_Shortlinker::get( 'https://yoa.st/wincher-popup-pricing' ), + 'links.wincher.website' => WPSEO_Shortlinker::get( 'https://yoa.st/wincher-popup' ), + 'links.wincher.upgrade' => WPSEO_Shortlinker::get( 'https://yoa.st/wincher-upgrade' ), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/woocommerce-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/woocommerce-helper.php new file mode 100644 index 00000000..05423808 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/woocommerce-helper.php @@ -0,0 +1,71 @@ +ID ) ) { + return false; + } + + return \intval( $post->ID ) === \intval( \wc_terms_and_conditions_page_id() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/helpers/wordpress-helper.php b/wp/wp-content/plugins/wordpress-seo/src/helpers/wordpress-helper.php new file mode 100644 index 00000000..73d929b4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/helpers/wordpress-helper.php @@ -0,0 +1,22 @@ +wpdb = $wpdb; + } + + /** + * Check if table exists. + * + * @param string $table The table to be checked. + * + * @return bool Whether the table exists. + */ + public function table_exists( $table ) { + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $table_exists = $this->wpdb->get_var( "SHOW TABLES LIKE '{$table}'" ); + if ( \is_wp_error( $table_exists ) || \is_null( $table_exists ) ) { + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/initializers/crawl-cleanup-permalinks.php b/wp/wp-content/plugins/wordpress-seo/src/initializers/crawl-cleanup-permalinks.php new file mode 100644 index 00000000..c76dcd10 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/initializers/crawl-cleanup-permalinks.php @@ -0,0 +1,207 @@ +options_helper = $options_helper; + $this->url_helper = $url_helper; + $this->redirect_helper = $redirect_helper; + $this->crawl_cleanup_helper = $crawl_cleanup_helper; + } + + /** + * Initializes the integration. + * + * @return void + */ + public function initialize() { + // We need to hook after 10 because otherwise our options helper isn't available yet. + \add_action( 'plugins_loaded', [ $this, 'register_hooks' ], 15 ); + } + + /** + * Hooks our required hooks. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + if ( $this->options_helper->get( 'clean_campaign_tracking_urls' ) && ! empty( \get_option( 'permalink_structure' ) ) ) { + \add_action( 'template_redirect', [ $this, 'utm_redirect' ], 0 ); + } + if ( $this->options_helper->get( 'clean_permalinks' ) && ! empty( \get_option( 'permalink_structure' ) ) ) { + \add_action( 'template_redirect', [ $this, 'clean_permalinks' ], 1 ); + } + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Redirect utm variables away. + * + * @return void + */ + public function utm_redirect() { + // Prevents WP CLI from throwing an error. + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput + if ( ! isset( $_SERVER['REQUEST_URI'] ) || \strpos( $_SERVER['REQUEST_URI'], '?' ) === false ) { + return; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput + if ( ! \stripos( $_SERVER['REQUEST_URI'], 'utm_' ) ) { + return; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput + $parsed = \wp_parse_url( $_SERVER['REQUEST_URI'] ); + + $query = \explode( '&', $parsed['query'] ); + $utms = []; + $other_args = []; + + foreach ( $query as $query_arg ) { + if ( \stripos( $query_arg, 'utm_' ) === 0 ) { + $utms[] = $query_arg; + continue; + } + $other_args[] = $query_arg; + } + + if ( empty( $utms ) ) { + return; + } + + $other_args_str = ''; + if ( \count( $other_args ) > 0 ) { + $other_args_str = '?' . \implode( '&', $other_args ); + } + + $new_path = $parsed['path'] . $other_args_str . '#' . \implode( '&', $utms ); + + $message = \sprintf( + /* translators: %1$s: Yoast SEO */ + \__( '%1$s: redirect utm variables to #', 'wordpress-seo' ), + 'Yoast SEO' + ); + + $this->redirect_helper->do_safe_redirect( \trailingslashit( $this->url_helper->recreate_current_url( false ) ) . \ltrim( $new_path, '/' ), 301, $message ); + } + + /** + * Removes unneeded query variables from the URL. + * + * @return void + */ + public function clean_permalinks() { + + if ( $this->crawl_cleanup_helper->should_avoid_redirect() ) { + return; + } + + $current_url = $this->url_helper->recreate_current_url(); + $allowed_params = $this->crawl_cleanup_helper->allowed_params( $current_url ); + + // If we had only allowed params, let's just bail out, no further processing needed. + if ( empty( $allowed_params['query'] ) ) { + return; + } + + $url_type = $this->crawl_cleanup_helper->get_url_type(); + + switch ( $url_type ) { + case 'singular_url': + $proper_url = $this->crawl_cleanup_helper->singular_url(); + break; + case 'front_page_url': + $proper_url = $this->crawl_cleanup_helper->front_page_url(); + break; + case 'page_for_posts_url': + $proper_url = $this->crawl_cleanup_helper->page_for_posts_url(); + break; + case 'taxonomy_url': + $proper_url = $this->crawl_cleanup_helper->taxonomy_url(); + break; + case 'search_url': + $proper_url = $this->crawl_cleanup_helper->search_url(); + break; + case 'page_not_found_url': + $proper_url = $this->crawl_cleanup_helper->page_not_found_url( $current_url ); + break; + default: + $proper_url = ''; + } + + if ( $this->crawl_cleanup_helper->is_query_var_page( $proper_url ) ) { + $proper_url = $this->crawl_cleanup_helper->query_var_page_url( $proper_url ); + } + + $proper_url = \add_query_arg( $allowed_params['allowed_query'], $proper_url ); + + if ( empty( $proper_url ) || $current_url === $proper_url ) { + return; + } + + $this->crawl_cleanup_helper->do_clean_redirect( $proper_url ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/initializers/disable-core-sitemaps.php b/wp/wp-content/plugins/wordpress-seo/src/initializers/disable-core-sitemaps.php new file mode 100644 index 00000000..e735bd4d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/initializers/disable-core-sitemaps.php @@ -0,0 +1,121 @@ +options = $options; + $this->redirect = $redirect; + } + + /** + * Disable the WP core XML sitemaps. + * + * @return void + */ + public function initialize() { + // This needs to be on priority 15 as that is after our options initialize. + \add_action( 'plugins_loaded', [ $this, 'maybe_disable_core_sitemaps' ], 15 ); + } + + /** + * Disables the core sitemaps if Yoast SEO sitemaps are enabled. + * + * @return void + */ + public function maybe_disable_core_sitemaps() { + if ( $this->options->get( 'enable_xml_sitemap' ) ) { + \add_filter( 'wp_sitemaps_enabled', '__return_false' ); + + \add_action( 'template_redirect', [ $this, 'template_redirect' ], 0 ); + } + } + + /** + * Redirects requests to the WordPress sitemap to the Yoast sitemap. + * + * @return void + */ + public function template_redirect() { + // If there is no path, nothing to do. + if ( empty( $_SERVER['REQUEST_URI'] ) ) { + return; + } + $path = \sanitize_text_field( \wp_unslash( $_SERVER['REQUEST_URI'] ) ); + + // If it's not a wp-sitemap request, nothing to do. + if ( \substr( $path, 0, 11 ) !== '/wp-sitemap' ) { + return; + } + + $redirect = $this->get_redirect_url( $path ); + + if ( ! $redirect ) { + return; + } + + $this->redirect->do_safe_redirect( \home_url( $redirect ), 301 ); + } + + /** + * Returns the relative sitemap URL to redirect to. + * + * @param string $path The original path. + * + * @return string|false The path to redirct to. False if no redirect should be done. + */ + private function get_redirect_url( $path ) { + // Start with the simple string comparison so we avoid doing unnecessary regexes. + if ( $path === '/wp-sitemap.xml' ) { + return '/sitemap_index.xml'; + } + + if ( \preg_match( '/^\/wp-sitemap-(posts|taxonomies)-(\w+)-(\d+)\.xml$/', $path, $matches ) ) { + $index = ( (int) $matches[3] - 1 ); + $index = ( $index === 0 ) ? '' : (string) $index; + + return '/' . $matches[2] . '-sitemap' . $index . '.xml'; + } + + if ( \preg_match( '/^\/wp-sitemap-users-(\d+)\.xml$/', $path, $matches ) ) { + $index = ( (int) $matches[1] - 1 ); + $index = ( $index === 0 ) ? '' : (string) $index; + + return '/author-sitemap' . $index . '.xml'; + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/initializers/initializer-interface.php b/wp/wp-content/plugins/wordpress-seo/src/initializers/initializer-interface.php new file mode 100644 index 00000000..77586d6b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/initializers/initializer-interface.php @@ -0,0 +1,20 @@ +migration_status = $migration_status; + $this->loader = $loader; + $this->adapter = $adapter; + } + + /** + * Runs this initializer. + * + * @return void + * + * @throws Exception When a migration errored. + */ + public function initialize() { + $this->run_free_migrations(); + // The below actions is used for when queries fail, this may happen in a multisite environment when switch_to_blog is used. + \add_action( '_yoast_run_migrations', [ $this, 'run_free_migrations' ] ); + } + + /** + * Runs the free migrations. + * + * @return void + * + * @throws Exception When a migration errored. + */ + public function run_free_migrations() { + $this->run_migrations( 'free' ); + } + + /** + * Initializes the migrations. + * + * @param string $name The name of the migration. + * @param string $version The current version. + * + * @return bool True on success, false on failure. + * + * @throws Exception If the migration fails and YOAST_ENVIRONMENT is not production. + */ + public function run_migrations( $name, $version = \WPSEO_VERSION ) { + if ( ! $this->migration_status->should_run_migration( $name, $version ) ) { + return true; + } + + if ( ! $this->migration_status->lock_migration( $name ) ) { + return false; + } + + $migrations = $this->loader->get_migrations( $name ); + + if ( $migrations === false ) { + $this->migration_status->set_error( $name, "Could not perform $name migrations. No migrations found.", $version ); + return false; + } + + try { + $this->adapter->create_schema_version_table(); + $all_versions = \array_keys( $migrations ); + $migrated_versions = $this->adapter->get_migrated_versions(); + $to_do_versions = \array_diff( $all_versions, $migrated_versions ); + + \sort( $to_do_versions, \SORT_STRING ); + + foreach ( $to_do_versions as $to_do_version ) { + $class = $migrations[ $to_do_version ]; + $this->run_migration( $to_do_version, $class ); + } + } catch ( Exception $exception ) { + // Something went wrong... + $this->migration_status->set_error( $name, $exception->getMessage(), $version ); + + if ( \defined( 'YOAST_ENVIRONMENT' ) && \YOAST_ENVIRONMENT !== 'production' ) { + throw $exception; + } + + return false; + } + + $this->migration_status->set_success( $name, $version ); + + return true; + } + + /** + * Runs a single migration. + * + * @param string $version The version. + * @param string $migration_class The migration class. + * + * @return void + * + * @throws Exception If the migration failed. Caught by the run_migrations function. + */ + protected function run_migration( $version, $migration_class ) { + /** + * The migration to run. + * + * @var Migration + */ + $migration = new $migration_class( $this->adapter ); + try { + $this->adapter->start_transaction(); + $migration->up(); + $this->adapter->add_version( $version ); + $this->adapter->commit_transaction(); + } catch ( Exception $e ) { + $this->adapter->rollback_transaction(); + throw new Exception( \sprintf( '%s - %s', $migration_class, $e->getMessage() ), 0, $e ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/initializers/woocommerce.php b/wp/wp-content/plugins/wordpress-seo/src/initializers/woocommerce.php new file mode 100644 index 00000000..6efdf8fb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/initializers/woocommerce.php @@ -0,0 +1,34 @@ +get_post_type() ); + } + + /** + * This integration is only active when the child class's conditionals are met. + * + * @return array|string[] The conditionals. + */ + public static function get_conditionals() { + return []; + } + + /** + * Returns the names of the post types to be excluded. + * To be used in the wpseo_indexable_excluded_post_types filter. + * + * @return array The names of the post types. + */ + abstract public function get_post_type(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/academy-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/academy-integration.php new file mode 100644 index 00000000..4c8cd9be --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/academy-integration.php @@ -0,0 +1,183 @@ +asset_manager = $asset_manager; + $this->current_page_helper = $current_page_helper; + $this->product_helper = $product_helper; + $this->shortlink_helper = $shortlink_helper; + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Admin_Conditional::class, User_Can_Manage_Wpseo_Options_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Add page. + \add_filter( 'wpseo_submenu_pages', [ $this, 'add_page' ] ); + + // Are we on the settings page? + if ( $this->current_page_helper->get_current_yoast_seo_page() === self::PAGE ) { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + \add_action( 'in_admin_header', [ $this, 'remove_notices' ], \PHP_INT_MAX ); + } + } + + /** + * Adds the page. + * + * @param array $pages The pages. + * + * @return array The pages. + */ + public function add_page( $pages ) { + \array_splice( + $pages, + 3, + 0, + [ + [ + 'wpseo_dashboard', + '', + \__( 'Academy', 'wordpress-seo' ), + 'wpseo_manage_options', + self::PAGE, + [ $this, 'display_page' ], + ], + ] + ); + + return $pages; + } + + /** + * Displays the page. + * + * @return void + */ + public function display_page() { + echo '
                '; + } + + /** + * Enqueues the assets. + * + * @return void + */ + public function enqueue_assets() { + // Remove the emoji script as it is incompatible with both React and any contenteditable fields. + \remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + \wp_enqueue_media(); + $this->asset_manager->enqueue_script( 'academy' ); + $this->asset_manager->enqueue_style( 'academy' ); + $this->asset_manager->localize_script( 'academy', 'wpseoScriptData', $this->get_script_data() ); + } + + /** + * Removes all current WP notices. + * + * @return void + */ + public function remove_notices() { + \remove_all_actions( 'admin_notices' ); + \remove_all_actions( 'user_admin_notices' ); + \remove_all_actions( 'network_admin_notices' ); + \remove_all_actions( 'all_admin_notices' ); + } + + /** + * Creates the script data. + * + * @return array The script data. + */ + public function get_script_data() { + $addon_manager = new WPSEO_Addon_Manager(); + + $woocommerce_seo_active = $addon_manager->is_installed( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ); + $local_seo_active = $addon_manager->is_installed( WPSEO_Addon_Manager::LOCAL_SLUG ); + + return [ + 'preferences' => [ + 'isPremium' => $this->product_helper->is_premium(), + 'isWooActive' => $woocommerce_seo_active, + 'isLocalActive' => $local_seo_active, + 'isRtl' => \is_rtl(), + 'pluginUrl' => \plugins_url( '', \WPSEO_FILE ), + 'upsellSettings' => [ + 'actionId' => 'load-nfd-ctb', + 'premiumCtbId' => 'f6a84663-465f-4cb5-8ba5-f7a6d72224b2', + ], + ], + 'linkParams' => $this->shortlink_helper->get_query_params(), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/activation-cleanup-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/activation-cleanup-integration.php new file mode 100644 index 00000000..b2c19fd4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/activation-cleanup-integration.php @@ -0,0 +1,72 @@ +options_helper = $options_helper; + $this->indexable_helper = $indexable_helper; + } + + /** + * Registers the action to register a cleanup routine run after the plugin is activated. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wpseo_activate', [ $this, 'register_cleanup_routine' ], 11 ); + } + + /** + * Registers a run of the cleanup routine if this has not happened yet. + * + * @return void + */ + public function register_cleanup_routine() { + if ( ! $this->indexable_helper->should_index_indexables() ) { + return; + } + $first_activated_on = $this->options_helper->get( 'first_activated_on', false ); + + if ( ! $first_activated_on || \time() > ( $first_activated_on + ( \MINUTE_IN_SECONDS * 5 ) ) ) { + if ( ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + \wp_schedule_single_event( ( \time() + \DAY_IN_SECONDS ), Cleanup_Integration::START_HOOK ); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/dialog-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/dialog-integration.php new file mode 100644 index 00000000..6b082149 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/dialog-integration.php @@ -0,0 +1,145 @@ +addon_manager = $addon_manager; + } + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'start_addon_installation' ] ); + } + + /** + * Starts the addon installation flow. + * + * @return void + */ + public function start_addon_installation() { + // Only show the dialog when we explicitly want to see it. + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: This is not a form. + if ( ! isset( $_GET['install'] ) || $_GET['install'] !== 'true' ) { + return; + } + + $this->bust_myyoast_addon_information_cache(); + $this->owned_addons = $this->get_owned_addons(); + + if ( \count( $this->owned_addons ) > 0 ) { + \add_action( 'admin_enqueue_scripts', [ $this, 'show_modal' ] ); + } + else { + \add_action( 'admin_notices', [ $this, 'throw_no_owned_addons_warning' ] ); + } + } + + /** + * Throws a no owned addons warning. + * + * @return void + */ + public function throw_no_owned_addons_warning() { + echo '

                ' + . \sprintf( + /* translators: %1$s expands to Yoast SEO */ + \esc_html__( + 'No %1$s plugins have been installed. You don\'t seem to own any active subscriptions.', + 'wordpress-seo' + ), + 'Yoast SEO' + ) + . '

                '; + } + + /** + * Shows the modal. + * + * @return void + */ + public function show_modal() { + \wp_localize_script( + WPSEO_Admin_Asset_Manager::PREFIX . 'addon-installation', + 'wpseoAddonInstallationL10n', + [ + 'addons' => $this->owned_addons, + 'nonce' => \wp_create_nonce( 'wpseo_addon_installation' ), + ] + ); + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_script( 'addon-installation' ); + } + + /** + * Retrieves a list of owned addons for the site in MyYoast. + * + * @return array List of owned addons with slug as key and name as value. + */ + protected function get_owned_addons() { + $owned_addons = []; + + foreach ( $this->addon_manager->get_myyoast_site_information()->subscriptions as $addon ) { + $owned_addons[] = $addon->product->name; + } + + return $owned_addons; + } + + /** + * Bust the site information transients to have fresh data. + * + * @return void + */ + protected function bust_myyoast_addon_information_cache() { + $this->addon_manager->remove_site_information_transients(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/installation-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/installation-integration.php new file mode 100644 index 00000000..d82fcd7a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/addon-installation/installation-integration.php @@ -0,0 +1,198 @@ +addon_manager = $addon_manager; + $this->addon_activate_action = $addon_activate_action; + $this->addon_install_action = $addon_install_action; + } + + /** + * Registers all hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wpseo_install_and_activate_addons', [ $this, 'install_and_activate_addons' ] ); + } + + /** + * Installs and activates missing addons. + * + * @return void + */ + public function install_and_activate_addons() { + if ( ! isset( $_GET['action'] ) || ! \is_string( $_GET['action'] ) ) { + return; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only strictly comparing action below. + $action = \wp_unslash( $_GET['action'] ); + if ( $action !== 'install' ) { + return; + } + + \check_admin_referer( 'wpseo_addon_installation', 'nonce' ); + + echo '
                '; + + exit; + } + + /** + * Activates an addon. + * + * @param string $addon_slug The addon to activate. + * + * @return array The output of the activation. + */ + public function activate_addon( $addon_slug ) { + $output = []; + + try { + $this->addon_activate_action->activate_addon( $addon_slug ); + + /* Translators: %s expands to the name of the addon. */ + $output[] = \__( 'Addon activated.', 'wordpress-seo' ); + } catch ( User_Cannot_Activate_Plugins_Exception $exception ) { + $output[] = \__( 'You are not allowed to activate plugins.', 'wordpress-seo' ); + } catch ( Addon_Activation_Error_Exception $exception ) { + $output[] = \sprintf( + /* Translators:%s expands to the error message. */ + \__( 'Addon activation failed because of an error: %s.', 'wordpress-seo' ), + $exception->getMessage() + ); + } + + return $output; + } + + /** + * Installs an addon. + * + * @param string $addon_slug The slug of the addon to install. + * @param string $addon_download The download URL of the addon. + * + * @return array The installation success state and the output of the installation. + */ + public function install_addon( $addon_slug, $addon_download ) { + $installed = false; + $output = []; + + try { + $installed = $this->addon_install_action->install_addon( $addon_slug, $addon_download ); + } catch ( Addon_Already_Installed_Exception $exception ) { + /* Translators: %s expands to the name of the addon. */ + $output[] = \__( 'Addon installed.', 'wordpress-seo' ); + + $installed = true; + } catch ( User_Cannot_Install_Plugins_Exception $exception ) { + $output[] = \__( 'You are not allowed to install plugins.', 'wordpress-seo' ); + } catch ( Addon_Installation_Error_Exception $exception ) { + $output[] = \sprintf( + /* Translators: %s expands to the error message. */ + \__( 'Addon installation failed because of an error: %s.', 'wordpress-seo' ), + $exception->getMessage() + ); + } + + return [ $installed, $output ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/admin-columns-cache-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/admin-columns-cache-integration.php new file mode 100644 index 00000000..b8d34d7c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/admin-columns-cache-integration.php @@ -0,0 +1,279 @@ +indexable_repository = $indexable_repository; + } + + /** + * Registers the appropriate actions and filters to fill the cache with + * indexables on admin pages. + * + * This cache is used in showing the Yoast SEO columns on the posts overview + * page (e.g. keyword score, incoming link count, etc.) + * + * @return void + */ + public function register_hooks() { + // Hook into tablenav to calculate links and linked. + \add_action( 'manage_posts_extra_tablenav', [ $this, 'maybe_fill_cache' ] ); + } + + /** + * Makes sure we calculate all values in one query by filling our cache beforehand. + * + * @param string $target Extra table navigation location which is triggered. + * + * @return void + */ + public function maybe_fill_cache( $target ) { + if ( $target === 'top' ) { + $this->fill_cache(); + } + } + + /** + * Fills the cache of indexables for all known post IDs. + * + * @return void + */ + public function fill_cache() { + global $wp_query; + + // No need to continue building a cache if the main query did not return anything to cache. + if ( empty( $wp_query->posts ) ) { + return; + } + + $posts = $wp_query->posts; + $post_ids = []; + + // Post lists return a list of objects. + if ( isset( $posts[0] ) && \is_a( $posts[0], 'WP_Post' ) ) { + $post_ids = \wp_list_pluck( $posts, 'ID' ); + } + elseif ( isset( $posts[0] ) && \is_object( $posts[0] ) ) { + $post_ids = $this->get_current_page_page_ids( $posts ); + } + elseif ( ! empty( $posts ) ) { + // Page list returns an array of post IDs. + $post_ids = \array_keys( $posts ); + } + + if ( empty( $post_ids ) ) { + return; + } + + if ( isset( $posts[0] ) && ! \is_a( $posts[0], WP_Post::class ) ) { + // Prime the post caches as core would to avoid duplicate queries. + // This needs to be done as this executes before core does. + \_prime_post_caches( $post_ids ); + } + + $indexables = $this->indexable_repository->find_by_multiple_ids_and_type( $post_ids, 'post', false ); + + foreach ( $indexables as $indexable ) { + if ( $indexable instanceof Indexable ) { + $this->indexable_cache[ $indexable->object_id ] = $indexable; + } + } + } + + /** + * Returns the indexable for a given post ID. + * + * @param int $post_id The post ID. + * + * @return Indexable|false The indexable. False if none could be found. + */ + public function get_indexable( $post_id ) { + if ( ! \array_key_exists( $post_id, $this->indexable_cache ) ) { + $this->indexable_cache[ $post_id ] = $this->indexable_repository->find_by_id_and_type( $post_id, 'post' ); + } + return $this->indexable_cache[ $post_id ]; + } + + /** + * Gets all the page IDs set to be shown on the current page. + * This is copied over with some changes from WP_Posts_List_Table::_display_rows_hierarchical. + * + * @param array $pages The pages, each containing an ID and post_parent. + * + * @return array The IDs of all pages shown on the current page. + */ + private function get_current_page_page_ids( $pages ) { + global $per_page; + $pagenum = isset( $_REQUEST['paged'] ) ? \absint( $_REQUEST['paged'] ) : 0; + $pagenum = \max( 1, $pagenum ); + + /* + * Arrange pages into two parts: top level pages and children_pages + * children_pages is two dimensional array, eg. + * children_pages[10][] contains all sub-pages whose parent is 10. + * It only takes O( N ) to arrange this and it takes O( 1 ) for subsequent lookup operations + * If searching, ignore hierarchy and treat everything as top level + */ + if ( empty( $_REQUEST['s'] ) ) { + $top_level_pages = []; + $children_pages = []; + $pages_map = []; + + foreach ( $pages as $page ) { + + // Catch and repair bad pages. + if ( $page->post_parent === $page->ID ) { + $page->post_parent = 0; + } + + if ( $page->post_parent === 0 ) { + $top_level_pages[] = $page; + } + else { + $children_pages[ $page->post_parent ][] = $page; + } + $pages_map[ $page->ID ] = $page; + } + + $pages = $top_level_pages; + } + + $count = 0; + $start = ( ( $pagenum - 1 ) * $per_page ); + $end = ( $start + $per_page ); + $to_display = []; + + foreach ( $pages as $page ) { + if ( $count >= $end ) { + break; + } + + if ( $count >= $start ) { + $to_display[] = $page->ID; + } + + ++$count; + + $this->get_child_page_ids( $children_pages, $count, $page->ID, $start, $end, $to_display, $pages_map ); + } + + // If it is the last pagenum and there are orphaned pages, display them with paging as well. + if ( isset( $children_pages ) && $count < $end ) { + foreach ( $children_pages as $orphans ) { + foreach ( $orphans as $op ) { + if ( $count >= $end ) { + break; + } + + if ( $count >= $start ) { + $to_display[] = $op->ID; + } + + ++$count; + } + } + } + + return $to_display; + } + + /** + * Adds all child pages due to be shown on the current page to the $to_display array. + * Copied over with some changes from WP_Posts_List_Table::_page_rows. + * + * @param array $children_pages The full map of child pages. + * @param int $count The number of pages already processed. + * @param int $parent_id The id of the parent that's currently being processed. + * @param int $start The number at which the current overview starts. + * @param int $end The number at which the current overview ends. + * @param int $to_display The page IDs to be shown. + * @param int $pages_map A map of page ID to an object with ID and post_parent. + * + * @return void + */ + private function get_child_page_ids( &$children_pages, &$count, $parent_id, $start, $end, &$to_display, &$pages_map ) { + if ( ! isset( $children_pages[ $parent_id ] ) ) { + return; + } + + foreach ( $children_pages[ $parent_id ] as $page ) { + if ( $count >= $end ) { + break; + } + + // If the page starts in a subtree, print the parents. + if ( $count === $start && $page->post_parent > 0 ) { + $my_parents = []; + $my_parent = $page->post_parent; + while ( $my_parent ) { + // Get the ID from the list or the attribute if my_parent is an object. + $parent_id = $my_parent; + if ( \is_object( $my_parent ) ) { + $parent_id = $my_parent->ID; + } + + $my_parent = $pages_map[ $parent_id ]; + $my_parents[] = $my_parent; + if ( ! $my_parent->post_parent ) { + break; + } + $my_parent = $my_parent->post_parent; + } + while ( $my_parent = \array_pop( $my_parents ) ) { + $to_display[] = $my_parent->ID; + } + } + + if ( $count >= $start ) { + $to_display[] = $page->ID; + } + + ++$count; + + $this->get_child_page_ids( $children_pages, $count, $page->ID, $start, $end, $to_display, $pages_map ); + } + + unset( $children_pages[ $parent_id ] ); // Required in order to keep track of orphans. + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/background-indexing-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/background-indexing-integration.php new file mode 100644 index 00000000..22f59386 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/background-indexing-integration.php @@ -0,0 +1,339 @@ +indexing_actions = $indexing_actions; + $this->complete_indexation_action = $complete_indexation_action; + $this->indexing_helper = $indexing_helper; + $this->indexable_helper = $indexable_helper; + $this->yoast_admin_and_dashboard_conditional = $yoast_admin_and_dashboard_conditional; + $this->get_request_conditional = $get_request_conditional; + $this->wp_cron_enabled_conditional = $wp_cron_enabled_conditional; + } + + /** + * Returns the conditionals based on which this integration should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return [ + Migrations_Conditional::class, + ]; + } + + /** + * Register hooks. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'register_shutdown_indexing' ] ); + \add_action( 'wpseo_indexable_index_batch', [ $this, 'index' ] ); + // phpcs:ignore WordPress.WP.CronInterval -- The sniff doesn't understand values with parentheses. https://github.com/WordPress/WordPress-Coding-Standards/issues/2025 + \add_filter( 'cron_schedules', [ $this, 'add_cron_schedule' ] ); + \add_action( 'admin_init', [ $this, 'schedule_cron_indexing' ], 11 ); + + $this->add_limit_filters(); + } + + /** + * Adds the filters that change the indexing limits. + * + * @return void. + */ + public function add_limit_filters() { + \add_filter( 'wpseo_post_indexation_limit', [ $this, 'throttle_cron_indexing' ] ); + \add_filter( 'wpseo_post_type_archive_indexation_limit', [ $this, 'throttle_cron_indexing' ] ); + \add_filter( 'wpseo_term_indexation_limit', [ $this, 'throttle_cron_indexing' ] ); + \add_filter( 'wpseo_prominent_words_indexation_limit', [ $this, 'throttle_cron_indexing' ] ); + \add_filter( 'wpseo_link_indexing_limit', [ $this, 'throttle_cron_link_indexing' ] ); + } + + /** + * Enqueues the required scripts. + * + * @return void + */ + public function register_shutdown_indexing() { + if ( $this->should_index_on_shutdown( $this->get_shutdown_limit() ) ) { + $this->register_shutdown_function( 'index' ); + } + } + + /** + * Run a single indexing pass of each indexing action. Intended for use as a shutdown function. + * + * @return void + */ + public function index() { + if ( \wp_doing_cron() && ! $this->should_index_on_cron() ) { + $this->unschedule_cron_indexing(); + + return; + } + + foreach ( $this->indexing_actions as $indexation_action ) { + $indexation_action->index(); + } + + if ( $this->indexing_helper->get_limited_filtered_unindexed_count_background( 1 ) === 0 ) { + // We set this as complete, even though prominent words might not be complete. But that's the way we always treated that. + $this->complete_indexation_action->complete(); + } + } + + /** + * Adds the 'Every fifteen minutes' cron schedule to WP-Cron. + * + * @param array $schedules The existing schedules. + * + * @return array The schedules containing the fifteen_minutes schedule. + */ + public function add_cron_schedule( $schedules ) { + if ( ! \is_array( $schedules ) ) { + return $schedules; + } + + $schedules['fifteen_minutes'] = [ + 'interval' => ( 15 * \MINUTE_IN_SECONDS ), + 'display' => \esc_html__( 'Every fifteen minutes', 'wordpress-seo' ), + ]; + + return $schedules; + } + + /** + * Schedule background indexing every 15 minutes if the index isn't already up to date. + * + * @return void + */ + public function schedule_cron_indexing() { + /** + * Filter: 'wpseo_unindexed_count_queries_ran' - Informs whether the expensive unindexed count queries have been ran already. + * + * @internal + * + * @param bool $have_queries_ran + */ + $have_queries_ran = \apply_filters( 'wpseo_unindexed_count_queries_ran', false ); + + if ( ( ! $this->yoast_admin_and_dashboard_conditional->is_met() || ! $this->get_request_conditional->is_met() ) && ! $have_queries_ran ) { + return; + } + + if ( ! \wp_next_scheduled( 'wpseo_indexable_index_batch' ) && $this->should_index_on_cron() ) { + \wp_schedule_event( ( \time() + \HOUR_IN_SECONDS ), 'fifteen_minutes', 'wpseo_indexable_index_batch' ); + } + } + + /** + * Limit cron indexing to 15 indexables per batch instead of 25. + * + * @param int $indexation_limit The current limit (filter input). + * + * @return int The new batch limit. + */ + public function throttle_cron_indexing( $indexation_limit ) { + if ( \wp_doing_cron() ) { + /** + * Filter: 'wpseo_cron_indexing_limit_size' - Adds the possibility to limit the number of items that are indexed when in cron action. + * + * @param int $limit Maximum number of indexables to be indexed per indexing action. + */ + return \apply_filters( 'wpseo_cron_indexing_limit_size', 15 ); + } + + return $indexation_limit; + } + + /** + * Limit cron indexing to 3 links per batch instead of 5. + * + * @param int $link_indexation_limit The current limit (filter input). + * + * @return int The new batch limit. + */ + public function throttle_cron_link_indexing( $link_indexation_limit ) { + if ( \wp_doing_cron() ) { + /** + * Filter: 'wpseo_cron_link_indexing_limit_size' - Adds the possibility to limit the number of links that are indexed when in cron action. + * + * @param int $limit Maximum number of link indexables to be indexed per link indexing action. + */ + return \apply_filters( 'wpseo_cron_link_indexing_limit_size', 3 ); + } + + return $link_indexation_limit; + } + + /** + * Determine whether cron indexation should be performed. + * + * @return bool Should cron indexation be performed. + */ + protected function should_index_on_cron() { + if ( ! $this->indexable_helper->should_index_indexables() ) { + return false; + } + + // The filter supersedes everything when preventing cron indexation. + if ( \apply_filters( 'Yoast\WP\SEO\enable_cron_indexing', true ) !== true ) { + return false; + } + + return $this->indexing_helper->get_limited_filtered_unindexed_count_background( 1 ) > 0; + } + + /** + * Determine whether background indexation should be performed. + * + * @param int $shutdown_limit The shutdown limit used to determine whether indexation should be run. + * + * @return bool Should background indexation be performed. + */ + protected function should_index_on_shutdown( $shutdown_limit ) { + if ( ! $this->yoast_admin_and_dashboard_conditional->is_met() || ! $this->get_request_conditional->is_met() ) { + return false; + } + + if ( ! $this->indexable_helper->should_index_indexables() ) { + return false; + } + + if ( $this->wp_cron_enabled_conditional->is_met() ) { + return false; + } + + $total_unindexed = $this->indexing_helper->get_limited_filtered_unindexed_count_background( $shutdown_limit ); + if ( $total_unindexed === 0 || $total_unindexed > $shutdown_limit ) { + return false; + } + + return true; + } + + /** + * Retrieves the shutdown limit. This limit is the amount of indexables that is generated in the background. + * + * @return int The shutdown limit. + */ + protected function get_shutdown_limit() { + /** + * Filter 'wpseo_shutdown_indexation_limit' - Allow filtering the number of objects that can be indexed during shutdown. + * + * @param int $limit The maximum number of objects indexed. + */ + return \apply_filters( 'wpseo_shutdown_indexation_limit', 25 ); + } + + /** + * Removes the cron indexing job from the scheduled event queue. + * + * @return void + */ + protected function unschedule_cron_indexing() { + $scheduled = \wp_next_scheduled( 'wpseo_indexable_index_batch' ); + if ( $scheduled ) { + \wp_unschedule_event( $scheduled, 'wpseo_indexable_index_batch' ); + } + } + + /** + * Registers a method to be executed on shutdown. + * This wrapper mostly exists for making this class more unittestable. + * + * @param string $method_name The name of the method on the current instance to register. + * + * @return void + */ + protected function register_shutdown_function( $method_name ) { + \register_shutdown_function( [ $this, $method_name ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/crawl-settings-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/crawl-settings-integration.php new file mode 100644 index 00000000..57a8dc0a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/crawl-settings-integration.php @@ -0,0 +1,326 @@ + + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Crawl_Settings_Integration constructor. + * + * @param WPSEO_Admin_Asset_Manager $admin_asset_manager The admin asset manager. + * @param WPSEO_Shortlinker $shortlinker The shortlinker. + */ + public function __construct( WPSEO_Admin_Asset_Manager $admin_asset_manager, WPSEO_Shortlinker $shortlinker ) { + $this->admin_asset_manager = $admin_asset_manager; + $this->shortlinker = $shortlinker; + } + + /** + * Registers an action to add a new tab to the General page. + * + * @return void + */ + public function register_hooks() { + $this->register_setting_labels(); + + \add_action( 'wpseo_settings_tab_crawl_cleanup_network', [ $this, 'add_crawl_settings_tab_content_network' ] ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Enqueue the workouts app. + * + * @return void + */ + public function enqueue_assets() { + if ( ! \is_network_admin() ) { + return; + } + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Page is not processed or saved. + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpseo_dashboard' ) { + return; + } + $this->admin_asset_manager->enqueue_script( 'crawl-settings' ); + } + + /** + * Connects the settings to their labels. + * + * @return void + */ + private function register_setting_labels() { + $this->feed_settings = [ + 'remove_feed_global' => \__( 'Global feed', 'wordpress-seo' ), + 'remove_feed_global_comments' => \__( 'Global comment feeds', 'wordpress-seo' ), + 'remove_feed_post_comments' => \__( 'Post comments feeds', 'wordpress-seo' ), + 'remove_feed_authors' => \__( 'Post authors feeds', 'wordpress-seo' ), + 'remove_feed_post_types' => \__( 'Post type feeds', 'wordpress-seo' ), + 'remove_feed_categories' => \__( 'Category feeds', 'wordpress-seo' ), + 'remove_feed_tags' => \__( 'Tag feeds', 'wordpress-seo' ), + 'remove_feed_custom_taxonomies' => \__( 'Custom taxonomy feeds', 'wordpress-seo' ), + 'remove_feed_search' => \__( 'Search results feeds', 'wordpress-seo' ), + 'remove_atom_rdf_feeds' => \__( 'Atom/RDF feeds', 'wordpress-seo' ), + ]; + + $this->basic_settings = [ + 'remove_shortlinks' => \__( 'Shortlinks', 'wordpress-seo' ), + 'remove_rest_api_links' => \__( 'REST API links', 'wordpress-seo' ), + 'remove_rsd_wlw_links' => \__( 'RSD / WLW links', 'wordpress-seo' ), + 'remove_oembed_links' => \__( 'oEmbed links', 'wordpress-seo' ), + 'remove_generator' => \__( 'Generator tag', 'wordpress-seo' ), + 'remove_pingback_header' => \__( 'Pingback HTTP header', 'wordpress-seo' ), + 'remove_powered_by_header' => \__( 'Powered by HTTP header', 'wordpress-seo' ), + ]; + + $this->permalink_cleanup_settings = [ + 'clean_campaign_tracking_urls' => \__( 'Campaign tracking URL parameters', 'wordpress-seo' ), + 'clean_permalinks' => \__( 'Unregistered URL parameters', 'wordpress-seo' ), + ]; + + $this->search_cleanup_settings = [ + 'search_cleanup' => \__( 'Filter search terms', 'wordpress-seo' ), + 'search_cleanup_emoji' => \__( 'Filter searches with emojis and other special characters', 'wordpress-seo' ), + 'search_cleanup_patterns' => \__( 'Filter searches with common spam patterns', 'wordpress-seo' ), + 'deny_search_crawling' => \__( 'Prevent search engines from crawling site search URLs', 'wordpress-seo' ), + 'redirect_search_pretty_urls' => \__( 'Redirect pretty URLs for search pages to raw format', 'wordpress-seo' ), + ]; + + $this->unused_resources_settings = [ + 'remove_emoji_scripts' => \__( 'Emoji scripts', 'wordpress-seo' ), + 'deny_wp_json_crawling' => \__( 'Prevent search engines from crawling /wp-json/', 'wordpress-seo' ), + 'deny_adsbot_crawling' => \__( 'Prevent Google AdsBot from crawling', 'wordpress-seo' ), + ]; + } + + /** + * Adds content to the Crawl Cleanup network tab. + * + * @param Yoast_Form $yform The yoast form object. + * + * @return void + */ + public function add_crawl_settings_tab_content_network( $yform ) { + $this->add_crawl_settings( $yform ); + } + + /** + * Print the settings sections. + * + * @param Yoast_Form $yform The Yoast form class. + * + * @return void + */ + private function add_crawl_settings( $yform ) { + $this->print_toggles( $this->basic_settings, $yform, \__( 'Basic crawl settings', 'wordpress-seo' ) ); + + $this->print_toggles( $this->feed_settings, $yform, \__( 'Feed crawl settings', 'wordpress-seo' ) ); + $this->print_toggles( $this->unused_resources_settings, $yform, \__( 'Remove unused resources', 'wordpress-seo' ) ); + + $first_search_setting = \array_slice( $this->search_cleanup_settings, 0, 1 ); + $rest_search_settings = \array_slice( $this->search_cleanup_settings, 1 ); + $search_settings_toggles = [ + 'off' => \__( 'Disabled', 'wordpress-seo' ), + 'on' => \__( 'Enabled', 'wordpress-seo' ), + ]; + + $this->print_toggles( $first_search_setting, $yform, \__( 'Search cleanup settings', 'wordpress-seo' ), $search_settings_toggles ); + + $this->print_toggles( $rest_search_settings, $yform, '', $search_settings_toggles ); + + $permalink_warning = \sprintf( + /* Translators: %1$s expands to an opening anchor tag for a link leading to the Yoast SEO page of the Permalink Cleanup features, %2$s expands to a closing anchor tag. */ + \esc_html__( + 'These are expert features, so make sure you know what you\'re doing before removing the parameters. %1$sRead more about how your site can be affected%2$s.', + 'wordpress-seo' + ), + '', + '' + ); + + $this->print_toggles( $this->permalink_cleanup_settings, $yform, \__( 'Permalink cleanup settings', 'wordpress-seo' ), [], $permalink_warning ); + + // Add the original option as hidden, so as not to lose any values if it's disabled and the form is saved. + $yform->hidden( 'clean_permalinks_extra_variables', 'clean_permalinks_extra_variables' ); + } + + /** + * Prints a list of toggles for an array of settings with labels. + * + * @param array $settings The settings being displayed. + * @param Yoast_Form $yform The Yoast form class. + * @param string $title Optional title for the settings being displayed. + * @param array $toggles Optional naming of the toggle buttons. + * @param string $warning Optional warning to be displayed above the toggles. + * + * @return void + */ + private function print_toggles( array $settings, Yoast_Form $yform, $title = '', $toggles = [], $warning = '' ) { + if ( ! empty( $title ) ) { + echo '

                ', \esc_html( $title ), '

                '; + } + + if ( ! empty( $warning ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in Alert_Presenter. + echo new Alert_Presenter( $warning, 'warning' ); + } + + if ( empty( $toggles ) ) { + $toggles = [ + 'off' => \__( 'Keep', 'wordpress-seo' ), + 'on' => \__( 'Remove', 'wordpress-seo' ), + ]; + } + + $setting_prefix = WPSEO_Option::ALLOW_KEY_PREFIX; + $toggles = [ + // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch -- Reason: text is originally from Yoast SEO. + 'on' => \__( 'Allow Control', 'wordpress-seo' ), + // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch -- Reason: text is originally from Yoast SEO. + 'off' => \__( 'Disable', 'wordpress-seo' ), + ]; + + foreach ( $settings as $setting => $label ) { + $attr = []; + $variable = $setting_prefix . $setting; + + if ( $this->should_feature_be_disabled_permalink( $setting ) ) { + $attr = [ + 'disabled' => true, + ]; + $variable = $setting_prefix . $setting . '_disabled'; + + // Also add the original option as hidden, so as not to lose any values if it's disabled and the form is saved. + $yform->hidden( $setting_prefix . $setting, $setting_prefix . $setting ); + } + elseif ( $this->should_feature_be_disabled_multisite( $setting ) ) { + $attr = [ + 'disabled' => true, + 'preserve_disabled_value' => false, + ]; + } + + $yform->toggle_switch( + $variable, + $toggles, + $label, + '', + $attr + ); + if ( $this->should_feature_be_disabled_permalink( $setting ) ) { + echo '

                '; + if ( \current_user_can( 'manage_options' ) ) { + \printf( + /* translators: 1: Link start tag to the Permalinks settings page, 2: Link closing tag. */ + \esc_html__( 'This feature is disabled when your site is not using %1$spretty permalinks%2$s.', 'wordpress-seo' ), + '', + '' + ); + } + else { + echo \esc_html__( 'This feature is disabled when your site is not using pretty permalinks.', 'wordpress-seo' ); + } + echo '

                '; + } + } + } + + /** + * Checks if the feature should be disabled due to non-pretty permalinks. + * + * @param string $setting The setting to be displayed. + * + * @return bool + */ + protected function should_feature_be_disabled_permalink( $setting ) { + return ( + \in_array( $setting, [ 'clean_permalinks', 'clean_campaign_tracking_urls' ], true ) + && empty( \get_option( 'permalink_structure' ) ) + ); + } + + /** + * Checks if the feature should be disabled due to the site being a multisite. + * + * @param string $setting The setting to be displayed. + * + * @return bool + */ + protected function should_feature_be_disabled_multisite( $setting ) { + return ( + \in_array( $setting, [ 'deny_search_crawling', 'deny_wp_json_crawling', 'deny_adsbot_crawling' ], true ) + && \is_multisite() + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/cron-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/cron-integration.php new file mode 100644 index 00000000..aba21e6d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/cron-integration.php @@ -0,0 +1,51 @@ +date_helper = $date_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + if ( ! \wp_next_scheduled( Indexing_Notification_Integration::NOTIFICATION_ID ) ) { + \wp_schedule_event( + $this->date_helper->current_time(), + 'daily', + Indexing_Notification_Integration::NOTIFICATION_ID + ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/deactivated-premium-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/deactivated-premium-integration.php new file mode 100644 index 00000000..da18dab5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/deactivated-premium-integration.php @@ -0,0 +1,151 @@ +options_helper = $options_helper; + $this->admin_asset_manager = $admin_asset_manager; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'admin_notices', [ $this, 'premium_deactivated_notice' ] ); + \add_action( 'wp_ajax_dismiss_premium_deactivated_notice', [ $this, 'dismiss_premium_deactivated_notice' ] ); + } + + /** + * Shows a notice if premium is installed but not activated. + * + * @return void + */ + public function premium_deactivated_notice() { + global $pagenow; + if ( $pagenow === 'update.php' ) { + return; + } + + if ( $this->options_helper->get( 'dismiss_premium_deactivated_notice', false ) === true ) { + return; + } + + $premium_file = 'wordpress-seo-premium/wp-seo-premium.php'; + + if ( ! \current_user_can( 'activate_plugin', $premium_file ) ) { + return; + } + + if ( $this->premium_is_installed_not_activated( $premium_file ) ) { + $this->admin_asset_manager->enqueue_style( 'monorepo' ); + + $content = \sprintf( + /* translators: 1: Yoast SEO Premium 2: Link start tag to activate premium, 3: Link closing tag. */ + \__( 'You\'ve installed %1$s but it\'s not activated yet. %2$sActivate %1$s now!%3$s', 'wordpress-seo' ), + 'Yoast SEO Premium', + '', + '' + ); + // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped above. + echo new Notice_Presenter( + /* translators: 1: Yoast SEO Premium */ + \sprintf( \__( 'Activate %1$s!', 'wordpress-seo' ), 'Yoast SEO Premium' ), + $content, + 'support-team.svg', + null, + true, + 'yoast-premium-deactivated-notice' + ); + // phpcs:enable + + // Enable permanently dismissing the notice. + echo ""; + } + } + + /** + * Dismisses the premium deactivated notice. + * + * @return bool + */ + public function dismiss_premium_deactivated_notice() { + return $this->options_helper->set( 'dismiss_premium_deactivated_notice', true ); + } + + /** + * Returns whether or not premium is installed and not activated. + * + * @param string $premium_file The premium file. + * + * @return bool Whether or not premium is installed and not activated. + */ + protected function premium_is_installed_not_activated( $premium_file ) { + return ( + ! \defined( 'WPSEO_PREMIUM_FILE' ) + && \file_exists( \WP_PLUGIN_DIR . '/' . $premium_file ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-integration.php new file mode 100644 index 00000000..0bf5678c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-integration.php @@ -0,0 +1,522 @@ +admin_asset_manager = $admin_asset_manager; + $this->addon_manager = $addon_manager; + $this->shortlinker = $shortlinker; + $this->options_helper = $options_helper; + $this->social_profiles_helper = $social_profiles_helper; + $this->product_helper = $product_helper; + $this->meta_tags_context = $meta_tags_context; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + \add_action( 'wpseo_settings_tabs_dashboard', [ $this, 'add_first_time_configuration_tab' ] ); + } + + /** + * Adds a dedicated tab in the General sub-page. + * + * @param WPSEO_Options_Tabs $dashboard_tabs Object representing the tabs of the General sub-page. + * + * @return void + */ + public function add_first_time_configuration_tab( $dashboard_tabs ) { + $dashboard_tabs->add_tab( + new WPSEO_Option_Tab( + 'first-time-configuration', + \__( 'First-time configuration', 'wordpress-seo' ), + [ 'save_button' => false ] + ) + ); + } + + /** + * Adds the data for the first-time configuration to the wpseoFirstTimeConfigurationData object. + * + * @return void + */ + public function enqueue_assets() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpseo_dashboard' || \is_network_admin() ) { + return; + } + + $this->admin_asset_manager->enqueue_script( 'indexation' ); + $this->admin_asset_manager->enqueue_script( 'first-time-configuration' ); + $this->admin_asset_manager->enqueue_style( 'first-time-configuration' ); + $this->admin_asset_manager->enqueue_style( 'admin-css' ); + $this->admin_asset_manager->enqueue_style( 'monorepo' ); + + $data = [ + 'disabled' => ! \YoastSEO()->helpers->indexable->should_index_indexables(), + 'amount' => \YoastSEO()->helpers->indexing->get_filtered_unindexed_count(), + 'firstTime' => ( \YoastSEO()->helpers->indexing->is_initial_indexing() === true ), + 'errorMessage' => '', + 'restApi' => [ + 'root' => \esc_url_raw( \rest_url() ), + 'indexing_endpoints' => $this->get_endpoints(), + 'nonce' => \wp_create_nonce( 'wp_rest' ), + ], + ]; + + /** + * Filter: 'wpseo_indexing_data' Filter to adapt the data used in the indexing process. + * + * @param array $data The indexing data to adapt. + */ + $data = \apply_filters( 'wpseo_indexing_data', $data ); + + $this->admin_asset_manager->localize_script( 'indexation', 'yoastIndexingData', $data ); + + $person_id = $this->get_person_id(); + $social_profiles = $this->get_social_profiles(); + + // This filter is documented in admin/views/tabs/metas/paper-content/general/knowledge-graph.php. + $knowledge_graph_message = \apply_filters( 'wpseo_knowledge_graph_setting_msg', '' ); + + $finished_steps = $this->get_finished_steps(); + $options = $this->get_company_or_person_options(); + $selected_option_label = ''; + $filtered_options = \array_filter( + $options, + function ( $item ) { + return $item['value'] === $this->is_company_or_person(); + } + ); + $selected_option = \reset( $filtered_options ); + if ( \is_array( $selected_option ) ) { + $selected_option_label = $selected_option['label']; + } + + $data_ftc = [ + 'canEditUser' => $this->can_edit_profile( $person_id ), + 'companyOrPerson' => $this->is_company_or_person(), + 'companyOrPersonLabel' => $selected_option_label, + 'companyName' => $this->get_company_name(), + 'fallbackCompanyName' => $this->get_fallback_company_name( $this->get_company_name() ), + 'websiteName' => $this->get_website_name(), + 'fallbackWebsiteName' => $this->get_fallback_website_name( $this->get_website_name() ), + 'companyLogo' => $this->get_company_logo(), + 'companyLogoFallback' => $this->get_company_fallback_logo( $this->get_company_logo() ), + 'companyLogoId' => $this->get_person_logo_id(), + 'finishedSteps' => $finished_steps, + 'personId' => (int) $person_id, + 'personName' => $this->get_person_name(), + 'personLogo' => $this->get_person_logo(), + 'personLogoFallback' => $this->get_person_fallback_logo( $this->get_person_logo() ), + 'personLogoId' => $this->get_person_logo_id(), + 'siteTagline' => $this->get_site_tagline(), + 'socialProfiles' => [ + 'facebookUrl' => $social_profiles['facebook_site'], + 'twitterUsername' => $social_profiles['twitter_site'], + 'otherSocialUrls' => $social_profiles['other_social_urls'], + ], + 'isPremium' => $this->product_helper->is_premium(), + 'tracking' => $this->has_tracking_enabled(), + 'isTrackingAllowedMultisite' => $this->is_tracking_enabled_multisite(), + 'isMainSite' => $this->is_main_site(), + 'companyOrPersonOptions' => $options, + 'shouldForceCompany' => $this->should_force_company(), + 'knowledgeGraphMessage' => $knowledge_graph_message, + 'shortlinks' => [ + 'gdpr' => $this->shortlinker->build_shortlink( 'https://yoa.st/gdpr-config-workout' ), + 'configIndexables' => $this->shortlinker->build_shortlink( 'https://yoa.st/config-indexables' ), + 'configIndexablesBenefits' => $this->shortlinker->build_shortlink( 'https://yoa.st/config-indexables-benefits' ), + ], + ]; + + $this->admin_asset_manager->localize_script( 'first-time-configuration', 'wpseoFirstTimeConfigurationData', $data_ftc ); + } + + /** + * Retrieves a list of the endpoints to use. + * + * @return array The endpoints. + */ + protected function get_endpoints() { + $endpoints = [ + 'prepare' => Indexing_Route::FULL_PREPARE_ROUTE, + 'terms' => Indexing_Route::FULL_TERMS_ROUTE, + 'posts' => Indexing_Route::FULL_POSTS_ROUTE, + 'archives' => Indexing_Route::FULL_POST_TYPE_ARCHIVES_ROUTE, + 'general' => Indexing_Route::FULL_GENERAL_ROUTE, + 'indexablesComplete' => Indexing_Route::FULL_INDEXABLES_COMPLETE_ROUTE, + 'post_link' => Indexing_Route::FULL_POST_LINKS_INDEXING_ROUTE, + 'term_link' => Indexing_Route::FULL_TERM_LINKS_INDEXING_ROUTE, + ]; + + $endpoints = \apply_filters( 'wpseo_indexing_endpoints', $endpoints ); + + $endpoints['complete'] = Indexing_Route::FULL_COMPLETE_ROUTE; + + return $endpoints; + } + + // ** Private functions ** // + + /** + * Returns the finished steps array. + * + * @return array An array with the finished steps. + */ + private function get_finished_steps() { + return $this->options_helper->get( 'configuration_finished_steps', [] ); + } + + /** + * Returns the entity represented by the site. + * + * @return string The entity represented by the site. + */ + private function is_company_or_person() { + return $this->options_helper->get( 'company_or_person', '' ); + } + + /** + * Gets the company name from the option in the database. + * + * @return string The company name. + */ + private function get_company_name() { + return $this->options_helper->get( 'company_name', '' ); + } + + /** + * Gets the fallback company name from the option in the database if there is no company name. + * + * @param string $company_name The given company name by the user, default empty string. + * + * @return string|false The company name. + */ + private function get_fallback_company_name( $company_name ) { + if ( $company_name ) { + return false; + } + + return \get_bloginfo( 'name' ); + } + + /** + * Gets the website name from the option in the database. + * + * @return string The website name. + */ + private function get_website_name() { + return $this->options_helper->get( 'website_name', '' ); + } + + /** + * Gets the fallback website name from the option in the database if there is no website name. + * + * @param string $website_name The given website name by the user, default empty string. + * + * @return string|false The website name. + */ + private function get_fallback_website_name( $website_name ) { + if ( $website_name ) { + return false; + } + + return \get_bloginfo( 'name' ); + } + + /** + * Gets the company logo from the option in the database. + * + * @return string The company logo. + */ + private function get_company_logo() { + return $this->options_helper->get( 'company_logo', '' ); + } + + /** + * Gets the company logo id from the option in the database. + * + * @return string The company logo id. + */ + private function get_company_logo_id() { + return $this->options_helper->get( 'company_logo_id', '' ); + } + + /** + * Gets the company logo url from the option in the database. + * + * @param string $company_logo The given company logo by the user, default empty. + * + * @return string|false The company logo URL. + */ + private function get_company_fallback_logo( $company_logo ) { + if ( $company_logo ) { + return false; + } + $logo_id = $this->meta_tags_context->fallback_to_site_logo(); + + return \esc_url( \wp_get_attachment_url( $logo_id ) ); + } + + /** + * Gets the person id from the option in the database. + * + * @return int|null The person id, null if empty. + */ + private function get_person_id() { + return $this->options_helper->get( 'company_or_person_user_id' ); + } + + /** + * Gets the person id from the option in the database. + * + * @return int|null The person id, null if empty. + */ + private function get_person_name() { + $user = \get_userdata( $this->get_person_id() ); + if ( $user instanceof WP_User ) { + return $user->get( 'display_name' ); + } + + return ''; + } + + /** + * Gets the person avatar from the option in the database. + * + * @return string The person logo. + */ + private function get_person_logo() { + return $this->options_helper->get( 'person_logo', '' ); + } + + /** + * Gets the person logo url from the option in the database. + * + * @param string $person_logo The given person logo by the user, default empty. + * + * @return string|false The person logo URL. + */ + private function get_person_fallback_logo( $person_logo ) { + if ( $person_logo ) { + return false; + } + $logo_id = $this->meta_tags_context->fallback_to_site_logo(); + + return \esc_url( \wp_get_attachment_url( $logo_id ) ); + } + + /** + * Gets the person logo id from the option in the database. + * + * @return string The person logo id. + */ + private function get_person_logo_id() { + return $this->options_helper->get( 'person_logo_id', '' ); + } + + /** + * Gets the site tagline. + * + * @return string The site tagline. + */ + private function get_site_tagline() { + return \get_bloginfo( 'description' ); + } + + /** + * Gets the social profiles stored in the database. + * + * @return string[] The social profiles. + */ + private function get_social_profiles() { + return $this->social_profiles_helper->get_organization_social_profiles(); + } + + /** + * Checks whether tracking is enabled. + * + * @return bool True if tracking is enabled, false otherwise, null if in Free and conf. workout step not finished. + */ + private function has_tracking_enabled() { + $default = false; + + if ( $this->product_helper->is_premium() ) { + $default = true; + } + + return $this->options_helper->get( 'tracking', $default ); + } + + /** + * Checks whether tracking option is allowed at network level. + * + * @return bool True if option change is allowed, false otherwise. + */ + private function is_tracking_enabled_multisite() { + $default = true; + + if ( ! \is_multisite() ) { + return $default; + } + + return $this->options_helper->get( 'allow_tracking', $default ); + } + + /** + * Checks whether we are in a main site. + * + * @return bool True if it's the main site or a single site, false if it's a subsite. + */ + private function is_main_site() { + return \is_main_site(); + } + + /** + * Gets the options for the Company or Person select. + * Returns only the company option if it is forced (by Local SEO), otherwise returns company and person option. + * + * @return array The options for the company-or-person select. + */ + private function get_company_or_person_options() { + $options = [ + [ + 'label' => \__( 'Organization', 'wordpress-seo' ), + 'value' => 'company', + 'id' => 'company', + ], + [ + 'label' => \__( 'Person', 'wordpress-seo' ), + 'value' => 'person', + 'id' => 'person', + ], + ]; + if ( $this->should_force_company() ) { + $options = [ + [ + 'label' => \__( 'Organization', 'wordpress-seo' ), + 'value' => 'company', + 'id' => 'company', + ], + ]; + } + + return $options; + } + + /** + * Checks whether we should force "Organization". + * + * @return bool + */ + private function should_force_company() { + return $this->addon_manager->is_installed( WPSEO_Addon_Manager::LOCAL_SLUG ); + } + + /** + * Checks if the current user has the capability to edit a specific user. + * + * @param int $person_id The id of the person to edit. + * + * @return bool + */ + private function can_edit_profile( $person_id ) { + return \current_user_can( 'edit_user', $person_id ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-notice-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-notice-integration.php new file mode 100644 index 00000000..5b6125fc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/first-time-configuration-notice-integration.php @@ -0,0 +1,152 @@ +options_helper = $options_helper; + $this->admin_asset_manager = $admin_asset_manager; + $this->first_time_configuration_notice_helper = $first_time_configuration_notice_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'wp_ajax_dismiss_first_time_configuration_notice', [ $this, 'dismiss_first_time_configuration_notice' ] ); + \add_action( 'admin_notices', [ $this, 'first_time_configuration_notice' ] ); + } + + /** + * Dismisses the First-time configuration notice. + * + * @return bool + */ + public function dismiss_first_time_configuration_notice() { + // Check for nonce. + if ( ! \check_ajax_referer( 'wpseo-dismiss-first-time-configuration-notice', 'nonce', false ) ) { + return false; + } + return $this->options_helper->set( 'dismiss_configuration_workout_notice', true ); + } + + /** + * Determines whether and where the "First-time SEO Configuration" admin notice should be displayed. + * + * @return bool Whether the "First-time SEO Configuration" admin notice should be displayed. + */ + public function should_display_first_time_configuration_notice() { + return $this->first_time_configuration_notice_helper->should_display_first_time_configuration_notice(); + } + + /** + * Displays an admin notice when the first-time configuration has not been finished yet. + * + * @return void + */ + public function first_time_configuration_notice() { + if ( ! $this->should_display_first_time_configuration_notice() ) { + return; + } + + $this->admin_asset_manager->enqueue_style( 'monorepo' ); + + $title = $this->first_time_configuration_notice_helper->get_first_time_configuration_title(); + $link_url = \esc_url( \self_admin_url( 'admin.php?page=wpseo_dashboard#top#first-time-configuration' ) ); + + if ( ! $this->first_time_configuration_notice_helper->should_show_alternate_message() ) { + $content = \sprintf( + /* translators: 1: Link start tag to the first-time configuration, 2: Yoast SEO, 3: Link closing tag. */ + \__( 'Get started quickly with the %1$s%2$s First-time configuration%3$s and configure Yoast SEO with the optimal SEO settings for your site!', 'wordpress-seo' ), + '', + 'Yoast SEO', + '' + ); + } + else { + $content = \sprintf( + /* translators: 1: Link start tag to the first-time configuration, 2: Link closing tag. */ + \__( 'We noticed that you haven\'t fully configured Yoast SEO yet. Optimize your SEO settings even further by using our improved %1$s First-time configuration%2$s.', 'wordpress-seo' ), + '', + '' + ); + } + + $notice = new Notice_Presenter( + $title, + $content, + 'mirrored_fit_bubble_woman_1_optim.svg', + null, + true, + 'yoast-first-time-configuration-notice' + ); + + //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output from present() is considered safe. + echo $notice->present(); + + // Enable permanently dismissing the notice. + echo ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/fix-news-dependencies-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/fix-news-dependencies-integration.php new file mode 100644 index 00000000..1e7b016c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/fix-news-dependencies-integration.php @@ -0,0 +1,62 @@ +registered['wpseo-news-editor'] ) ) { + return; + } + + $is_block_editor = WP_Screen::get()->is_block_editor(); + $post_edit_handle = 'post-edit'; + if ( ! $is_block_editor ) { + $post_edit_handle = 'post-edit-classic'; + } + + $scripts->registered['wpseo-news-editor']->deps[] = WPSEO_Admin_Asset_Manager::PREFIX . $post_edit_handle; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/health-check-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/health-check-integration.php new file mode 100644 index 00000000..cfcd9c35 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/health-check-integration.php @@ -0,0 +1,101 @@ +health_checks = $health_checks; + } + + /** + * Hooks the health checks into WordPress' site status tests. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'site_status_tests', [ $this, 'add_health_checks' ] ); + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * In this case: only when on an admin page. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Checks if the input is a WordPress site status tests array, and adds Yoast's health checks if it is. + * + * @param string[] $tests Array containing WordPress site status tests. + * @return string[] Array containing WordPress site status tests with Yoast's health checks. + */ + public function add_health_checks( $tests ) { + if ( ! $this->is_valid_site_status_tests_array( $tests ) ) { + return $tests; + } + + return $this->add_health_checks_to_site_status_tests( $tests ); + } + + /** + * Checks if the input array is a WordPress site status tests array. + * + * @param mixed $tests Array to check. + * @return bool Returns true if the input array is a WordPress site status tests array. + */ + private function is_valid_site_status_tests_array( $tests ) { + if ( ! \is_array( $tests ) ) { + return false; + } + + if ( ! \array_key_exists( 'direct', $tests ) ) { + return false; + } + + if ( ! \is_array( $tests['direct'] ) ) { + return false; + } + + return true; + } + + /** + * Adds the health checks to WordPress' site status tests. + * + * @param string[] $tests Array containing WordPress site status tests. + * @return string[] Array containing WordPress site status tests with Yoast's health checks. + */ + private function add_health_checks_to_site_status_tests( $tests ) { + foreach ( $this->health_checks as $health_check ) { + $tests['direct'][ $health_check->get_test_identifier() ] = [ + 'test' => [ $health_check, 'run_and_get_result' ], + ]; + } + + return $tests; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/helpscout-beacon.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/helpscout-beacon.php new file mode 100644 index 00000000..ad906914 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/helpscout-beacon.php @@ -0,0 +1,470 @@ +options = $options; + $this->asset_manager = $asset_manager; + $this->ask_consent = ! $this->options->get( 'tracking' ); + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && \is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $this->page = \sanitize_text_field( \wp_unslash( $_GET['page'] ) ); + } + else { + $this->page = null; + } + $this->migration_status = $migration_status; + + foreach ( $this->base_pages as $page ) { + if ( $this->ask_consent ) { + // We want to be able to show surveys to people who have tracking on, so we give them a different beacon. + $this->pages_ids[ $page ] = $this->beacon_id_tracking_users; + } + else { + $this->pages_ids[ $page ] = $this->beacon_id; + } + } + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_help_scout_script' ] ); + \add_action( 'admin_footer', [ $this, 'output_beacon_js' ] ); + } + + /** + * Enqueues the HelpScout script. + * + * @return void + */ + public function enqueue_help_scout_script() { + // Make sure plugins can filter in their "stuff", before we check whether we're outputting a beacon. + $this->filter_settings(); + if ( ! $this->is_beacon_page() ) { + return; + } + + $this->asset_manager->enqueue_script( 'help-scout-beacon' ); + } + + /** + * Outputs a small piece of javascript for the beacon. + * + * @return void + */ + public function output_beacon_js() { + if ( ! $this->is_beacon_page() ) { + return; + } + + \printf( + '', + ( $this->ask_consent ) ? 'wpseoHelpScoutBeaconConsent' : 'wpseoHelpScoutBeacon', + \esc_html( $this->pages_ids[ $this->page ] ), + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- escaping done in format_json_encode. + WPSEO_Utils::format_json_encode( (array) $this->get_session_data() ) + ); + } + + /** + * Checks if the current page is a page containing the beacon. + * + * @return bool + */ + private function is_beacon_page() { + $return = false; + if ( ! empty( $this->page ) && $GLOBALS['pagenow'] === 'admin.php' && isset( $this->pages_ids[ $this->page ] ) ) { + $return = true; + } + + /** + * Filter: 'wpseo_helpscout_show_beacon' - Allows overriding whether we show the HelpScout beacon. + * + * @param bool $show_beacon Whether we show the beacon or not. + */ + return \apply_filters( 'wpseo_helpscout_show_beacon', $return ); + } + + /** + * Retrieves the identifying data. + * + * @return string The data to pass as identifying data. + */ + protected function get_session_data() { + // Short-circuit if we can get the needed data from a transient. + $transient_data = \get_transient( 'yoast_beacon_session_data' ); + + if ( \is_array( $transient_data ) ) { + return WPSEO_Utils::format_json_encode( $transient_data ); + } + + $current_user = \wp_get_current_user(); + + // Do not make these strings translatable! They are for our support agents, the user won't see them! + $data = \array_merge( + [ + 'name' => \trim( $current_user->user_firstname . ' ' . $current_user->user_lastname ), + 'email' => $current_user->user_email, + 'Languages' => $this->get_language_settings(), + ], + $this->get_server_info(), + [ + 'WordPress Version' => $this->get_wordpress_version(), + 'Active theme' => $this->get_theme_info(), + 'Active plugins' => $this->get_active_plugins(), + 'Must-use and dropins' => $this->get_mustuse_and_dropins(), + 'Indexables status' => $this->get_indexables_status(), + ] + ); + + if ( ! empty( $this->products ) ) { + $addon_manager = new WPSEO_Addon_Manager(); + foreach ( $this->products as $product ) { + $subscription = $addon_manager->get_subscription( $product ); + + if ( ! $subscription ) { + continue; + } + + $data[ $subscription->product->name ] = $this->get_product_info( $subscription ); + } + } + + // Store the data in a transient for 5 minutes to prevent overhead on every backend pageload. + \set_transient( 'yoast_beacon_session_data', $data, ( 5 * \MINUTE_IN_SECONDS ) ); + + return WPSEO_Utils::format_json_encode( $data ); + } + + /** + * Returns basic info about the server software. + * + * @return array + */ + private function get_server_info() { + $server_tracking_data = new WPSEO_Tracking_Server_Data(); + $server_data = $server_tracking_data->get(); + $server_data = $server_data['server']; + + $fields_to_use = [ + 'Server IP' => 'ip', + 'PHP Version' => 'PhpVersion', + 'cURL Version' => 'CurlVersion', + ]; + + $server_data['CurlVersion'] = $server_data['CurlVersion']['version'] . ' (SSL Support ' . $server_data['CurlVersion']['sslSupport'] . ')'; + + $server_info = []; + + foreach ( $fields_to_use as $label => $field_to_use ) { + if ( isset( $server_data[ $field_to_use ] ) ) { + $server_info[ $label ] = \esc_html( $server_data[ $field_to_use ] ); + } + } + + // Get the memory limits for the server and, if different, from WordPress as well. + $memory_limit = \ini_get( 'memory_limit' ); + $server_info['Memory limits'] = 'Server memory limit: ' . $memory_limit; + + if ( $memory_limit !== \WP_MEMORY_LIMIT ) { + $server_info['Memory limits'] .= ', WP_MEMORY_LIMIT: ' . \WP_MEMORY_LIMIT; + } + + if ( $memory_limit !== \WP_MAX_MEMORY_LIMIT ) { + $server_info['Memory limits'] .= ', WP_MAX_MEMORY_LIMIT: ' . \WP_MAX_MEMORY_LIMIT; + } + + return $server_info; + } + + /** + * Returns info about the Yoast SEO plugin version and license. + * + * @param object $plugin The plugin. + * + * @return string The product info. + */ + private function get_product_info( $plugin ) { + if ( empty( $plugin ) ) { + return ''; + } + + $product_info = \sprintf( + 'Expiration date %1$s', + $plugin->expiry_date + ); + + return $product_info; + } + + /** + * Returns the WordPress version + a suffix about the multisite status. + * + * @return string The WordPress version string. + */ + private function get_wordpress_version() { + global $wp_version; + + $wordpress_version = $wp_version; + if ( \is_multisite() ) { + $wordpress_version .= ' (multisite: yes)'; + } + else { + $wordpress_version .= ' (multisite: no)'; + } + + return $wordpress_version; + } + + /** + * Returns information about the current theme. + * + * @return string The theme info as string. + */ + private function get_theme_info() { + $theme = \wp_get_theme(); + + $theme_info = \sprintf( + '%1$s (Version %2$s, %3$s)', + \esc_html( $theme->display( 'Name' ) ), + \esc_html( $theme->display( 'Version' ) ), + \esc_attr( $theme->display( 'ThemeURI' ) ) + ); + + if ( \is_child_theme() ) { + $theme_info .= \sprintf( ', this is a child theme of: %1$s', \esc_html( $theme->display( 'Template' ) ) ); + } + + return $theme_info; + } + + /** + * Returns a stringified list of all active plugins, separated by a pipe. + * + * @return string The active plugins. + */ + private function get_active_plugins() { + $updates_available = \get_site_transient( 'update_plugins' ); + + $active_plugins = ''; + foreach ( \wp_get_active_and_valid_plugins() as $plugin ) { + $plugin_data = \get_plugin_data( $plugin ); + $plugin_file = \str_replace( \trailingslashit( \WP_PLUGIN_DIR ), '', $plugin ); + $plugin_update_available = ''; + + if ( isset( $updates_available->response[ $plugin_file ] ) ) { + $plugin_update_available = ' [update available]'; + } + + $active_plugins .= \sprintf( + '%1$s (Version %2$s%3$s, %4$s) | ', + \esc_html( $plugin_data['Name'] ), + \esc_html( $plugin_data['Version'] ), + $plugin_update_available, + \esc_attr( $plugin_data['PluginURI'] ) + ); + } + + return $active_plugins; + } + + /** + * Returns a CSV list of all must-use and drop-in plugins. + * + * @return string The active plugins. + */ + private function get_mustuse_and_dropins() { + $dropins = \get_dropins(); + $mustuse_plugins = \get_mu_plugins(); + + if ( ! \is_array( $dropins ) ) { + $dropins = []; + } + + if ( ! \is_array( $mustuse_plugins ) ) { + $mustuse_plugins = []; + } + + return \sprintf( 'Must-Use plugins: %1$d, Drop-ins: %2$d', \count( $mustuse_plugins ), \count( $dropins ) ); + } + + /** + * Return the indexables status details. + * + * @return string The indexables status in a string. + */ + private function get_indexables_status() { + $indexables_status = 'Indexing completed: '; + $indexing_completed = $this->options->get( 'indexables_indexing_completed' ); + $indexing_reason = $this->options->get( 'indexing_reason' ); + + $indexables_status .= ( $indexing_completed ) ? 'yes' : 'no'; + $indexables_status .= ( $indexing_reason ) ? ', latest indexing reason: ' . \esc_html( $indexing_reason ) : ''; + + foreach ( [ 'free', 'premium' ] as $migration_name ) { + $current_status = $this->migration_status->get_error( $migration_name ); + + if ( \is_array( $current_status ) && isset( $current_status['message'] ) ) { + $indexables_status .= ', migration error: ' . \esc_html( $current_status['message'] ); + } + } + + return $indexables_status; + } + + /** + * Returns language settings for the website and the current user. + * + * @return string The locale settings of the site and user. + */ + private function get_language_settings() { + $site_locale = \get_locale(); + $user_locale = \get_user_locale(); + + $language_settings = \sprintf( + 'Site locale: %1$s, user locale: %2$s', + ( \is_string( $site_locale ) ) ? \esc_html( $site_locale ) : 'unknown', + ( \is_string( $user_locale ) ) ? \esc_html( $user_locale ) : 'unknown' + ); + + return $language_settings; + } + + /** + * Returns the conditionals based on which this integration should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Allows filtering of the HelpScout settings. Hooked to admin_head to prevent timing issues, not too early, not too late. + * + * @return void + */ + protected function filter_settings() { + $filterable_helpscout_setting = [ + 'products' => $this->products, + 'pages_ids' => $this->pages_ids, + ]; + + /** + * Filter: 'wpseo_helpscout_beacon_settings' - Allows overriding the HelpScout beacon settings. + * + * @param string $beacon_settings The HelpScout beacon settings. + */ + $helpscout_settings = \apply_filters( 'wpseo_helpscout_beacon_settings', $filterable_helpscout_setting ); + + $this->products = $helpscout_settings['products']; + $this->pages_ids = $helpscout_settings['pages_ids']; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/import-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/import-integration.php new file mode 100644 index 00000000..69a55efd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/import-integration.php @@ -0,0 +1,248 @@ +asset_manager = $asset_manager; + $this->importable_detector = $importable_detector; + $this->importing_route = $importing_route; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_import_script' ] ); + } + + /** + * Enqueues the Import script. + * + * @return void + */ + public function enqueue_import_script() { + \wp_enqueue_style( 'dashicons' ); + $this->asset_manager->enqueue_script( 'import' ); + + $data = [ + 'restApi' => [ + 'root' => \esc_url_raw( \rest_url() ), + 'cleanup_endpoints' => $this->get_cleanup_endpoints(), + 'importing_endpoints' => $this->get_importing_endpoints(), + 'nonce' => \wp_create_nonce( 'wp_rest' ), + ], + 'assets' => [ + 'loading_msg_import' => \esc_html__( 'The import can take a long time depending on your site\'s size.', 'wordpress-seo' ), + 'loading_msg_cleanup' => \esc_html__( 'The cleanup can take a long time depending on your site\'s size.', 'wordpress-seo' ), + 'note' => \esc_html__( 'Note: ', 'wordpress-seo' ), + 'cleanup_after_import_msg' => \esc_html__( 'After you\'ve imported data from another SEO plugin, please make sure to clean up all the original data from that plugin. (step 5)', 'wordpress-seo' ), + 'select_placeholder' => \esc_html__( 'Select SEO plugin', 'wordpress-seo' ), + 'no_data_msg' => \esc_html__( 'No data found from other SEO plugins.', 'wordpress-seo' ), + 'validation_failure' => $this->get_validation_failure_alert(), + 'import_failure' => $this->get_import_failure_alert( true ), + 'cleanup_failure' => $this->get_import_failure_alert( false ), + 'spinner' => \admin_url( 'images/loading.gif' ), + 'replacing_texts' => [ + 'cleanup_button' => \esc_html__( 'Clean up', 'wordpress-seo' ), + 'import_explanation' => \esc_html__( 'Please select an SEO plugin below to see what data can be imported.', 'wordpress-seo' ), + 'cleanup_explanation' => \esc_html__( 'Once you\'re certain that your site is working properly with the imported data from another SEO plugin, you can clean up all the original data from that plugin.', 'wordpress-seo' ), + /* translators: %s: expands to the name of the plugin that is selected to be imported */ + 'select_header' => \esc_html__( 'The import from %s includes:', 'wordpress-seo' ), + 'plugins' => [ + 'aioseo' => [ + [ + 'data_name' => \esc_html__( 'Post metadata (SEO titles, descriptions, etc.)', 'wordpress-seo' ), + 'data_note' => \esc_html__( 'Note: This metadata will only be imported if there is no existing Yoast SEO metadata yet.', 'wordpress-seo' ), + ], + [ + 'data_name' => \esc_html__( 'Default settings', 'wordpress-seo' ), + 'data_note' => \esc_html__( 'Note: These settings will overwrite the default settings of Yoast SEO.', 'wordpress-seo' ), + ], + ], + 'other' => [ + [ + 'data_name' => \esc_html__( 'Post metadata (SEO titles, descriptions, etc.)', 'wordpress-seo' ), + 'data_note' => \esc_html__( 'Note: This metadata will only be imported if there is no existing Yoast SEO metadata yet.', 'wordpress-seo' ), + ], + ], + ], + ], + ], + ]; + + /** + * Filter: 'wpseo_importing_data' Filter to adapt the data used in the import process. + * + * @param array $data The import data to adapt. + */ + $data = \apply_filters( 'wpseo_importing_data', $data ); + + $this->asset_manager->localize_script( 'import', 'yoastImportData', $data ); + } + + /** + * Retrieves a list of the importing endpoints to use. + * + * @return array The endpoints. + */ + protected function get_importing_endpoints() { + $available_actions = $this->importable_detector->detect_importers(); + $importing_endpoints = []; + + $available_sorted_actions = $this->sort_actions( $available_actions ); + + foreach ( $available_sorted_actions as $plugin => $types ) { + foreach ( $types as $type ) { + $importing_endpoints[ $plugin ][] = $this->importing_route->get_endpoint( $plugin, $type ); + } + } + + return $importing_endpoints; + } + + /** + * Sorts the array of importing actions, by moving any validating actions to the start for every plugin. + * + * @param array $available_actions The array of actions that we want to sort. + * + * @return array The sorted array of actions. + */ + protected function sort_actions( $available_actions ) { + $first_action = 'validate_data'; + $available_sorted_actions = []; + + foreach ( $available_actions as $plugin => $plugin_available_actions ) { + + $validate_action_position = \array_search( $first_action, $plugin_available_actions, true ); + + if ( ! empty( $validate_action_position ) ) { + unset( $plugin_available_actions[ $validate_action_position ] ); + \array_unshift( $plugin_available_actions, $first_action ); + } + + $available_sorted_actions[ $plugin ] = $plugin_available_actions; + } + + return $available_sorted_actions; + } + + /** + * Retrieves a list of the importing endpoints to use. + * + * @return array The endpoints. + */ + protected function get_cleanup_endpoints() { + $available_actions = $this->importable_detector->detect_cleanups(); + $importing_endpoints = []; + + foreach ( $available_actions as $plugin => $types ) { + foreach ( $types as $type ) { + $importing_endpoints[ $plugin ][] = $this->importing_route->get_endpoint( $plugin, $type ); + } + } + + return $importing_endpoints; + } + + /** + * Gets the validation failure alert using the Alert_Presenter. + * + * @return string The validation failure alert. + */ + protected function get_validation_failure_alert() { + $content = \esc_html__( 'The AIOSEO import was cancelled because some AIOSEO data is missing. Please try and take the following steps to fix this:', 'wordpress-seo' ); + $content .= '
                '; + $content .= '
                1. '; + $content .= \esc_html__( 'If you have never saved any AIOSEO \'Search Appearance\' settings, please do that first and run the import again.', 'wordpress-seo' ); + $content .= '
                2. '; + $content .= '
                3. '; + $content .= \esc_html__( 'If you already have saved AIOSEO \'Search Appearance\' settings and the issue persists, please contact our support team so we can take a closer look.', 'wordpress-seo' ); + $content .= '
                '; + + $validation_failure_alert = new Alert_Presenter( $content, 'error' ); + + return $validation_failure_alert->present(); + } + + /** + * Gets the import failure alert using the Alert_Presenter. + * + * @param bool $is_import Wether it's an import or not. + * + * @return string The import failure alert. + */ + protected function get_import_failure_alert( $is_import ) { + $content = \esc_html__( 'Cleanup failed with the following error:', 'wordpress-seo' ); + if ( $is_import ) { + $content = \esc_html__( 'Import failed with the following error:', 'wordpress-seo' ); + } + + $content .= '

                '; + $content .= \esc_html( '%s' ); + + $import_failure_alert = new Alert_Presenter( $content, 'error' ); + + return $import_failure_alert->present(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexables-exclude-taxonomy-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexables-exclude-taxonomy-integration.php new file mode 100644 index 00000000..4d1592b8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexables-exclude-taxonomy-integration.php @@ -0,0 +1,55 @@ +options_helper = $options_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'wpseo_indexable_excluded_taxonomies', [ $this, 'exclude_taxonomies_for_indexation' ] ); + } + + /** + * Exclude the taxonomy from the indexable table. + * + * @param array $excluded_taxonomies The excluded taxonomies. + * + * @return array The excluded taxonomies, including specific taxonomies. + */ + public function exclude_taxonomies_for_indexation( $excluded_taxonomies ) { + $taxonomies_to_exclude = \array_merge( $excluded_taxonomies, [ 'wp_pattern_category' ] ); + + if ( $this->options_helper->get( 'disable-post_format', false ) ) { + return \array_merge( $taxonomies_to_exclude, [ 'post_format' ] ); + } + + return $taxonomies_to_exclude; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-notification-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-notification-integration.php new file mode 100644 index 00000000..3ae6cbdf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-notification-integration.php @@ -0,0 +1,252 @@ +notification_center = $notification_center; + $this->product_helper = $product_helper; + $this->page_helper = $page_helper; + $this->short_link_helper = $short_link_helper; + $this->notification_helper = $notification_helper; + $this->indexing_helper = $indexing_helper; + $this->addon_manager = $addon_manager; + $this->environment_helper = $environment_helper; + } + + /** + * Initializes the integration. + * + * Adds hooks and jobs to cleanup or add the notification when necessary. + * + * @return void + */ + public function register_hooks() { + if ( $this->page_helper->get_current_yoast_seo_page() === 'wpseo_dashboard' ) { + \add_action( 'admin_init', [ $this, 'maybe_cleanup_notification' ] ); + } + + if ( $this->indexing_helper->has_reason() ) { + \add_action( 'admin_init', [ $this, 'maybe_create_notification' ] ); + } + + \add_action( self::NOTIFICATION_ID, [ $this, 'maybe_create_notification' ] ); + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ + Admin_Conditional::class, + Not_Admin_Ajax_Conditional::class, + User_Can_Manage_Wpseo_Options_Conditional::class, + ]; + } + + /** + * Checks whether the notification should be shown and adds + * it to the notification center if this is the case. + * + * @return void + */ + public function maybe_create_notification() { + if ( ! $this->should_show_notification() ) { + return; + } + + if ( ! $this->notification_center->get_notification_by_id( self::NOTIFICATION_ID ) ) { + $notification = $this->notification(); + $this->notification_helper->restore_notification( $notification ); + $this->notification_center->add_notification( $notification ); + } + } + + /** + * Checks whether the notification should not be shown anymore and removes + * it from the notification center if this is the case. + * + * @return void + */ + public function maybe_cleanup_notification() { + $notification = $this->notification_center->get_notification_by_id( self::NOTIFICATION_ID ); + + if ( $notification === null ) { + return; + } + + if ( $this->should_show_notification() ) { + return; + } + + $this->notification_center->remove_notification_by_id( self::NOTIFICATION_ID ); + } + + /** + * Checks whether the notification should be shown. + * + * @return bool If the notification should be shown. + */ + protected function should_show_notification() { + if ( ! $this->environment_helper->is_production_mode() ) { + return false; + } + // Don't show a notification if the indexing has already been started earlier. + if ( $this->indexing_helper->get_started() > 0 ) { + return false; + } + + // We're about to perform expensive queries, let's inform. + \add_filter( 'wpseo_unindexed_count_queries_ran', '__return_true' ); + + // Never show a notification when nothing should be indexed. + return $this->indexing_helper->get_limited_filtered_unindexed_count( 1 ) > 0; + } + + /** + * Returns an instance of the notification. + * + * @return Yoast_Notification The notification to show. + */ + protected function notification() { + $reason = $this->indexing_helper->get_reason(); + + $presenter = $this->get_presenter( $reason ); + + return new Yoast_Notification( + $presenter, + [ + 'type' => Yoast_Notification::WARNING, + 'id' => self::NOTIFICATION_ID, + 'capabilities' => 'wpseo_manage_options', + 'priority' => 0.8, + ] + ); + } + + /** + * Gets the presenter to use to show the notification. + * + * @param string $reason The reason for the notification. + * + * @return Indexing_Failed_Notification_Presenter|Indexing_Notification_Presenter + */ + protected function get_presenter( $reason ) { + if ( $reason === Indexing_Reasons::REASON_INDEXING_FAILED ) { + $presenter = new Indexing_Failed_Notification_Presenter( $this->product_helper, $this->short_link_helper, $this->addon_manager ); + } + else { + $total_unindexed = $this->indexing_helper->get_filtered_unindexed_count(); + $presenter = new Indexing_Notification_Presenter( $this->short_link_helper, $total_unindexed, $reason ); + } + + return $presenter; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-tool-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-tool-integration.php new file mode 100644 index 00000000..fa2e15e3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/indexing-tool-integration.php @@ -0,0 +1,249 @@ +asset_manager = $asset_manager; + $this->indexable_helper = $indexable_helper; + $this->short_link_helper = $short_link_helper; + $this->indexing_helper = $indexing_helper; + $this->addon_manager = $addon_manager; + $this->product_helper = $product_helper; + $this->importable_detector = $importable_detector; + $this->importing_route = $importing_route; + } + + /** + * Register hooks. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wpseo_tools_overview_list_items_internal', [ $this, 'render_indexing_list_item' ], 10 ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ], 10 ); + } + + /** + * Enqueues the required scripts. + * + * @return void + */ + public function enqueue_scripts() { + $this->asset_manager->enqueue_script( 'indexation' ); + $this->asset_manager->enqueue_style( 'admin-css' ); + $this->asset_manager->enqueue_style( 'monorepo' ); + + $data = [ + 'disabled' => ! $this->indexable_helper->should_index_indexables(), + 'amount' => $this->indexing_helper->get_filtered_unindexed_count(), + 'firstTime' => ( $this->indexing_helper->is_initial_indexing() === true ), + 'errorMessage' => $this->render_indexing_error(), + 'restApi' => [ + 'root' => \esc_url_raw( \rest_url() ), + 'indexing_endpoints' => $this->get_indexing_endpoints(), + 'importing_endpoints' => $this->get_importing_endpoints(), + 'nonce' => \wp_create_nonce( 'wp_rest' ), + ], + ]; + + /** + * Filter: 'wpseo_indexing_data' Filter to adapt the data used in the indexing process. + * + * @param array $data The indexing data to adapt. + */ + $data = \apply_filters( 'wpseo_indexing_data', $data ); + + $this->asset_manager->localize_script( 'indexation', 'yoastIndexingData', $data ); + } + + /** + * The error to show if optimization failed. + * + * @return string The error to show if optimization failed. + */ + protected function render_indexing_error() { + $presenter = new Indexing_Error_Presenter( + $this->short_link_helper, + $this->product_helper, + $this->addon_manager + ); + + return $presenter->present(); + } + + /** + * Determines if the site has a valid Premium subscription. + * + * @return bool If the site has a valid Premium subscription. + */ + protected function has_valid_premium_subscription() { + return $this->addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ); + } + + /** + * Renders the indexing list item. + * + * @return void + */ + public function render_indexing_list_item() { + if ( \current_user_can( 'manage_options' ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- The output is correctly escaped in the presenter. + echo new Indexing_List_Item_Presenter( $this->short_link_helper ); + } + } + + /** + * Retrieves a list of the indexing endpoints to use. + * + * @return array The endpoints. + */ + protected function get_indexing_endpoints() { + $endpoints = [ + 'prepare' => Indexing_Route::FULL_PREPARE_ROUTE, + 'terms' => Indexing_Route::FULL_TERMS_ROUTE, + 'posts' => Indexing_Route::FULL_POSTS_ROUTE, + 'archives' => Indexing_Route::FULL_POST_TYPE_ARCHIVES_ROUTE, + 'general' => Indexing_Route::FULL_GENERAL_ROUTE, + 'indexablesComplete' => Indexing_Route::FULL_INDEXABLES_COMPLETE_ROUTE, + 'post_link' => Indexing_Route::FULL_POST_LINKS_INDEXING_ROUTE, + 'term_link' => Indexing_Route::FULL_TERM_LINKS_INDEXING_ROUTE, + ]; + + $endpoints = \apply_filters( 'wpseo_indexing_endpoints', $endpoints ); + + $endpoints['complete'] = Indexing_Route::FULL_COMPLETE_ROUTE; + + return $endpoints; + } + + /** + * Retrieves a list of the importing endpoints to use. + * + * @return array The endpoints. + */ + protected function get_importing_endpoints() { + $available_actions = $this->importable_detector->detect_importers(); + $importing_endpoints = []; + + foreach ( $available_actions as $plugin => $types ) { + foreach ( $types as $type ) { + $importing_endpoints[ $plugin ][] = $this->importing_route->get_endpoint( $plugin, $type ); + } + } + + return $importing_endpoints; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/installation-success-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/installation-success-integration.php new file mode 100644 index 00000000..9c232ca4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/installation-success-integration.php @@ -0,0 +1,158 @@ +options_helper = $options_helper; + $this->product_helper = $product_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'admin_menu', [ $this, 'add_submenu_page' ], 9 ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + \add_action( 'admin_init', [ $this, 'maybe_redirect' ] ); + } + + /** + * Redirects to the installation success page if an installation has just occurred. + * + * @return void + */ + public function maybe_redirect() { + if ( \defined( 'DOING_AJAX' ) && \DOING_AJAX ) { + return; + } + + if ( ! $this->options_helper->get( 'should_redirect_after_install_free', false ) ) { + return; + } + $this->options_helper->set( 'should_redirect_after_install_free', false ); + + if ( ! empty( $this->options_helper->get( 'activation_redirect_timestamp_free', 0 ) ) ) { + return; + } + $this->options_helper->set( 'activation_redirect_timestamp_free', \time() ); + + // phpcs:ignore WordPress.Security.NonceVerification -- This is not a form. + if ( isset( $_REQUEST['activate-multi'] ) && $_REQUEST['activate-multi'] === 'true' ) { + return; + } + + if ( $this->product_helper->is_premium() ) { + return; + } + + if ( \is_network_admin() || \is_plugin_active_for_network( \WPSEO_BASENAME ) ) { + return; + } + + \wp_safe_redirect( \admin_url( 'admin.php?page=wpseo_installation_successful_free' ), 302, 'Yoast SEO' ); + $this->terminate_execution(); + } + + /** + * Adds the installation success submenu page. + * + * @param array $submenu_pages The Yoast SEO submenu pages. + * + * @return array the filtered submenu pages. + */ + public function add_submenu_page( $submenu_pages ) { + \add_submenu_page( + '', + \__( 'Installation Successful', 'wordpress-seo' ), + '', + 'manage_options', + 'wpseo_installation_successful_free', + [ $this, 'render_page' ] + ); + + return $submenu_pages; + } + + /** + * Enqueue assets on the Installation success page. + * + * @return void + */ + public function enqueue_assets() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpseo_installation_successful_free' ) { + return; + } + + $asset_manager = new WPSEO_Admin_Asset_Manager(); + $asset_manager->enqueue_script( 'installation-success' ); + $asset_manager->enqueue_style( 'tailwind' ); + $asset_manager->enqueue_style( 'monorepo' ); + + $asset_manager->localize_script( + 'installation-success', + 'wpseoInstallationSuccess', + [ + 'pluginUrl' => \esc_url( \plugins_url( '', \WPSEO_FILE ) ), + 'firstTimeConfigurationUrl' => \esc_url( \admin_url( 'admin.php?page=wpseo_dashboard#top#first-time-configuration' ) ), + 'dashboardUrl' => \esc_url( \admin_url( 'admin.php?page=wpseo_dashboard' ) ), + ] + ); + } + + /** + * Renders the installation success page. + * + * @return void + */ + public function render_page() { + echo '
                '; + } + + /** + * Wrap the `exit` function to make unit testing easier. + * + * @return void + */ + public function terminate_execution() { + exit; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/integrations-page.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/integrations-page.php new file mode 100644 index 00000000..5fec0c8a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/integrations-page.php @@ -0,0 +1,234 @@ +admin_asset_manager = $admin_asset_manager; + $this->options_helper = $options_helper; + $this->woocommerce_helper = $woocommerce_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'wpseo_submenu_pages', [ $this, 'add_submenu_page' ], 10 ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ], 11 ); + } + + /** + * Adds the integrations submenu page. + * + * @param array $submenu_pages The Yoast SEO submenu pages. + * + * @return array The filtered submenu pages. + */ + public function add_submenu_page( $submenu_pages ) { + $integrations_page = [ + 'wpseo_dashboard', + '', + \__( 'Integrations', 'wordpress-seo' ), + 'wpseo_manage_options', + 'wpseo_integrations', + [ $this, 'render_target' ], + ]; + + \array_splice( $submenu_pages, 1, 0, [ $integrations_page ] ); + + return $submenu_pages; + } + + /** + * Enqueue the integrations app. + * + * @return void + */ + public function enqueue_assets() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpseo_integrations' ) { + return; + } + + $this->admin_asset_manager->enqueue_style( 'admin-css' ); + $this->admin_asset_manager->enqueue_style( 'tailwind' ); + $this->admin_asset_manager->enqueue_style( 'monorepo' ); + + $this->admin_asset_manager->enqueue_script( 'integrations-page' ); + + $elementor_conditional = new Elementor_Activated_Conditional(); + $jetpack_conditional = new Jetpack_Conditional(); + $jetpack_boost_active_conditional = new Jetpack_Boost_Active_Conditional(); + $jetpack_boost_not_premium_conditional = new Jetpack_Boost_Not_Premium_Conditional(); + + $woocommerce_seo_file = 'wpseo-woocommerce/wpseo-woocommerce.php'; + $acf_seo_file = 'acf-content-analysis-for-yoast-seo/yoast-acf-analysis.php'; + $acf_seo_file_github = 'yoast-acf-analysis/yoast-acf-analysis.php'; + $algolia_file = 'wp-search-with-algolia/algolia.php'; + $old_algolia_file = 'search-by-algolia-instant-relevant-results/algolia.php'; + + $host = \YoastSEO()->helpers->url->get_url_host( \get_site_url() ); + $addon_manager = new WPSEO_Addon_Manager(); + $woocommerce_seo_installed = $addon_manager->is_installed( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ); + + $woocommerce_seo_active = \is_plugin_active( $woocommerce_seo_file ); + $woocommerce_active = $this->woocommerce_helper->is_active(); + $acf_seo_installed = \file_exists( \WP_PLUGIN_DIR . '/' . $acf_seo_file ); + $acf_seo_github_installed = \file_exists( \WP_PLUGIN_DIR . '/' . $acf_seo_file_github ); + $acf_seo_active = \is_plugin_active( $acf_seo_file ); + $acf_seo_github_active = \is_plugin_active( $acf_seo_file_github ); + $acf_active = \class_exists( 'acf' ); + $algolia_active = \is_plugin_active( $algolia_file ); + $edd_active = \class_exists( Easy_Digital_Downloads::class ); + $jetpack_boost_active = $jetpack_boost_active_conditional->is_met(); + $jetpack_boost_premium = ( ! $jetpack_boost_not_premium_conditional->is_met() ); + $old_algolia_active = \is_plugin_active( $old_algolia_file ); + $tec_active = \class_exists( Events_Schema::class ); + $ssp_active = \class_exists( PodcastEpisode::class ); + $wp_recipe_maker_active = \class_exists( WP_Recipe_Maker::class ); + $mastodon_active = $this->is_mastodon_active(); + + $woocommerce_seo_activate_url = \wp_nonce_url( + \self_admin_url( 'plugins.php?action=activate&plugin=' . $woocommerce_seo_file ), + 'activate-plugin_' . $woocommerce_seo_file + ); + + if ( $acf_seo_installed ) { + $acf_seo_activate_url = \wp_nonce_url( + \self_admin_url( 'plugins.php?action=activate&plugin=' . $acf_seo_file ), + 'activate-plugin_' . $acf_seo_file + ); + } + else { + $acf_seo_activate_url = \wp_nonce_url( + \self_admin_url( 'plugins.php?action=activate&plugin=' . $acf_seo_file_github ), + 'activate-plugin_' . $acf_seo_file_github + ); + } + + $acf_seo_install_url = \wp_nonce_url( + \self_admin_url( 'update.php?action=install-plugin&plugin=acf-content-analysis-for-yoast-seo' ), + 'install-plugin_acf-content-analysis-for-yoast-seo' + ); + + $this->admin_asset_manager->localize_script( + 'integrations-page', + 'wpseoIntegrationsData', + [ + 'semrush_integration_active' => $this->options_helper->get( 'semrush_integration_active', true ), + 'allow_semrush_integration' => $this->options_helper->get( 'allow_semrush_integration_active', true ), + 'algolia_integration_active' => $this->options_helper->get( 'algolia_integration_active', false ), + 'allow_algolia_integration' => $this->options_helper->get( 'allow_algolia_integration_active', true ), + 'wincher_integration_active' => $this->options_helper->get( 'wincher_integration_active', true ), + 'allow_wincher_integration' => null, + 'elementor_integration_active' => $elementor_conditional->is_met(), + 'jetpack_integration_active' => $jetpack_conditional->is_met(), + 'woocommerce_seo_installed' => $woocommerce_seo_installed, + 'woocommerce_seo_active' => $woocommerce_seo_active, + 'woocommerce_active' => $woocommerce_active, + 'woocommerce_seo_activate_url' => $woocommerce_seo_activate_url, + 'acf_seo_installed' => $acf_seo_installed || $acf_seo_github_installed, + 'acf_seo_active' => $acf_seo_active || $acf_seo_github_active, + 'acf_active' => $acf_active, + 'acf_seo_activate_url' => $acf_seo_activate_url, + 'acf_seo_install_url' => $acf_seo_install_url, + 'algolia_active' => $algolia_active || $old_algolia_active, + 'edd_integration_active' => $edd_active, + 'ssp_integration_active' => $ssp_active, + 'tec_integration_active' => $tec_active, + 'wp-recipe-maker_integration_active' => $wp_recipe_maker_active, + 'mastodon_active' => $mastodon_active, + 'is_multisite' => \is_multisite(), + 'plugin_url' => \plugins_url( '', \WPSEO_FILE ), + 'jetpack-boost_active' => $jetpack_boost_active, + 'jetpack-boost_premium' => $jetpack_boost_premium, + 'jetpack-boost_logo_link' => WPSEO_Shortlinker::get( 'https://yoa.st/integrations-logo-jetpack-boost' ), + 'jetpack-boost_get_link' => WPSEO_Shortlinker::get( 'https://yoa.st/integrations-get-jetpack-boost?domain=' . $host ), + 'jetpack-boost_upgrade_link' => WPSEO_Shortlinker::get( 'https://yoa.st/integrations-upgrade-jetpack-boost?domain=' . $host ), + 'jetpack-boost_learn_more_link' => \admin_url( 'admin.php?page=jetpack-boost' ), + ] + ); + } + + /** + * Renders the target for the React to mount to. + * + * @return void + */ + public function render_target() { + ?> +
                +
                +
                +
                + post_type_helper = $post_type_helper; + $this->wpdb = $wpdb; + $this->post_link_indexing_action = $post_link_indexing_action; + $this->admin_columns_cache = $admin_columns_cache; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'posts_clauses', [ $this, 'order_by_links' ], 1, 2 ); + \add_filter( 'posts_clauses', [ $this, 'order_by_linked' ], 1, 2 ); + + \add_action( 'admin_init', [ $this, 'register_init_hooks' ] ); + + // Adds a filter to exclude the attachments from the link count. + \add_filter( 'wpseo_link_count_post_types', [ 'WPSEO_Post_Type', 'filter_attachment_post_type' ] ); + } + + /** + * Register hooks that need to be registered after `init` due to all post types not yet being registered. + * + * @return void + */ + public function register_init_hooks() { + $public_post_types = \apply_filters( 'wpseo_link_count_post_types', $this->post_type_helper->get_accessible_post_types() ); + + if ( ! \is_array( $public_post_types ) || empty( $public_post_types ) ) { + return; + } + + foreach ( $public_post_types as $post_type ) { + \add_filter( 'manage_' . $post_type . '_posts_columns', [ $this, 'add_post_columns' ] ); + \add_action( 'manage_' . $post_type . '_posts_custom_column', [ $this, 'column_content' ], 10, 2 ); + \add_filter( 'manage_edit-' . $post_type . '_sortable_columns', [ $this, 'column_sort' ] ); + } + } + + /** + * Adds the columns for the post overview. + * + * @param array $columns Array with columns. + * + * @return array The extended array with columns. + */ + public function add_post_columns( $columns ) { + if ( ! \is_array( $columns ) ) { + return $columns; + } + + $columns[ 'wpseo-' . self::COLUMN_LINKS ] = \sprintf( + '%2$s', + \esc_attr__( 'Number of outgoing internal links in this post. See "Yoast Columns" text in the help tab for more info.', 'wordpress-seo' ), + /* translators: Hidden accessibility text. */ + \esc_html__( 'Outgoing internal links', 'wordpress-seo' ) + ); + + if ( $this->post_link_indexing_action->get_total_unindexed() === 0 ) { + $columns[ 'wpseo-' . self::COLUMN_LINKED ] = \sprintf( + '%2$s', + \esc_attr__( 'Number of internal links linking to this post. See "Yoast Columns" text in the help tab for more info.', 'wordpress-seo' ), + /* translators: Hidden accessibility text. */ + \esc_html__( 'Received internal links', 'wordpress-seo' ) + ); + } + + return $columns; + } + + /** + * Modifies the query pieces to allow ordering column by links to post. + * + * @param array $pieces Array of Query pieces. + * @param WP_Query $query The Query on which to apply. + * + * @return array + */ + public function order_by_linked( $pieces, $query ) { + if ( $query->get( 'orderby' ) !== 'wpseo-' . self::COLUMN_LINKED ) { + return $pieces; + } + + return $this->build_sort_query_pieces( $pieces, $query, 'incoming_link_count' ); + } + + /** + * Modifies the query pieces to allow ordering column by links to post. + * + * @param array $pieces Array of Query pieces. + * @param WP_Query $query The Query on which to apply. + * + * @return array + */ + public function order_by_links( $pieces, $query ) { + if ( $query->get( 'orderby' ) !== 'wpseo-' . self::COLUMN_LINKS ) { + return $pieces; + } + + return $this->build_sort_query_pieces( $pieces, $query, 'link_count' ); + } + + /** + * Builds the pieces for a sorting query. + * + * @param array $pieces Array of Query pieces. + * @param WP_Query $query The Query on which to apply. + * @param string $field The field in the table to JOIN on. + * + * @return array Modified Query pieces. + */ + protected function build_sort_query_pieces( $pieces, $query, $field ) { + // We only want our code to run in the main WP query. + if ( ! $query->is_main_query() ) { + return $pieces; + } + + // Get the order query variable - ASC or DESC. + $order = \strtoupper( $query->get( 'order' ) ); + + // Make sure the order setting qualifies. If not, set default as ASC. + if ( ! \in_array( $order, [ 'ASC', 'DESC' ], true ) ) { + $order = 'ASC'; + } + + $table = Model::get_table_name( 'Indexable' ); + + $pieces['join'] .= " LEFT JOIN $table AS yoast_indexable ON yoast_indexable.object_id = {$this->wpdb->posts}.ID AND yoast_indexable.object_type = 'post' "; + $pieces['orderby'] = "yoast_indexable.$field $order, FIELD( {$this->wpdb->posts}.post_status, 'publish' ) $order, {$pieces['orderby']}"; + + return $pieces; + } + + /** + * Displays the column content for the given column. + * + * @param string $column_name Column to display the content for. + * @param int $post_id Post to display the column content for. + * + * @return void + */ + public function column_content( $column_name, $post_id ) { + $indexable = $this->admin_columns_cache->get_indexable( $post_id ); + // Nothing to output if we don't have the value. + if ( $indexable === false ) { + return; + } + + switch ( $column_name ) { + case 'wpseo-' . self::COLUMN_LINKS: + echo (int) $indexable->link_count; + return; + case 'wpseo-' . self::COLUMN_LINKED: + if ( \get_post_status( $post_id ) === 'publish' ) { + echo (int) $indexable->incoming_link_count; + } + } + } + + /** + * Sets the sortable columns. + * + * @param array $columns Array with sortable columns. + * + * @return array The extended array with sortable columns. + */ + public function column_sort( array $columns ) { + $columns[ 'wpseo-' . self::COLUMN_LINKS ] = 'wpseo-' . self::COLUMN_LINKS; + $columns[ 'wpseo-' . self::COLUMN_LINKED ] = 'wpseo-' . self::COLUMN_LINKED; + + return $columns; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/menu-badge-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/menu-badge-integration.php new file mode 100644 index 00000000..a95de0cf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/menu-badge-integration.php @@ -0,0 +1,38 @@ +migration_status = $migration_status; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + if ( $this->migration_status->get_error( 'free' ) === false ) { + return; + } + + \add_action( 'admin_notices', [ $this, 'render_migration_error' ] ); + } + + /** + * Renders the migration error. + * + * @return void + */ + public function render_migration_error() { + // phpcs:ignore WordPress.Security.EscapeOutput -- The Migration_Error_Presenter already escapes it's output. + echo new Migration_Error_Presenter( $this->migration_status->get_error( 'free' ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/old-configuration-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/old-configuration-integration.php new file mode 100644 index 00000000..095a20de --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/old-configuration-integration.php @@ -0,0 +1,70 @@ +redirect = $redirect; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wp_loaded', [ $this, 'old_settings_redirect' ] ); + } + + /** + * Redirect to new settings URLs. We're adding this, so that not-updated add-ons don't point to non-existent pages. + * + * @return void + */ + public function old_settings_redirect() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( ! isset( $_GET['page'] ) ) { + return; + } + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + $current_page = \sanitize_text_field( \wp_unslash( $_GET['page'] ) ); + + switch ( $current_page ) { + case 'wpseo_titles': + $this->redirect->do_safe_redirect( \admin_url( 'admin.php?page=wpseo_page_settings#/site-representation' ), 301 ); + return; + default: + return; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/redirects-page-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/redirects-page-integration.php new file mode 100644 index 00000000..d42d4789 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/redirects-page-integration.php @@ -0,0 +1,65 @@ +', + 'edit_others_posts', + 'wpseo_redirects', + [ $this, 'display' ], + ]; + + return $submenu_pages; + } + + /** + * Displays the redirects page. + * + * @return void + */ + public function display() { + require \WPSEO_PATH . 'admin/pages/redirects.php'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/unsupported-php-version-notice.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/unsupported-php-version-notice.php new file mode 100644 index 00000000..a132d22b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/unsupported-php-version-notice.php @@ -0,0 +1,167 @@ + The array of conditionals. + */ + public static function get_conditionals() { + return [ + Yoast_Admin_And_Dashboard_Conditional::class, + ]; + } + + /** + * Register hooks. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'check_php_version' ] ); + } + + /** + * Checks the current PHP version. + * + * @return void + */ + public function check_php_version() { + // If the user isn't an admin, don't display anything. + if ( ! $this->has_right_capabilities() ) { + return; + } + + if ( ! $this->on_dashboard_page( $GLOBALS['pagenow'] ) ) { + return; + } + + // Checks if the user is running at least PHP 7.2. + if ( $this->is_supported_php_version_installed() === false ) { + $this->show_unsupported_php_message(); + } + } + + /** + * Composes the body of the message to display. + * + * @return string The message to display. + */ + public function body() { + $message = []; + $message[] = MessageFormatter::strongParagraph( \__( 'Upgrade your PHP version', 'wordpress-seo' ) ) . '
                '; + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: Yoast SEO, 2: Yoast SEO Premium */ + \__( + 'By November 1st, 2024, we’ll update the minimum PHP requirement for %1$s, %2$s and all our add-ons to PHP 7.4. This, to ensure we can keep delivering state of the art features.', + 'wordpress-seo' + ), + 'Yoast SEO', + 'Yoast SEO Premium' + ) + ) . '
                '; + $message[] = MessageFormatter::strongParagraph( \__( 'Can’t upgrade yourself? Ask your host!', 'wordpress-seo' ) ) . '
                '; + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: Link tag to WordPress Hosts page on Yoast.com; 2: Link closing tag */ + \__( + 'Upgrading your PHP version is something your hosting provider can help you out with. If they can’t upgrade your PHP version, we advise you to consider %1$sswitching to a hosting provider%2$s that can provide the security and features a modern host should provide.', + 'wordpress-seo' + ), + '', + '' + ) + ) . '
                '; + + return \implode( \PHP_EOL, $message ); + } + + /** + * Checks if the current user has the right capabilities. + * + * @return bool True when user has right capabilities. + */ + protected function has_right_capabilities() { + return \current_user_can( 'wpseo_manage_options' ); + } + + /** + * Whether we are on the admin dashboard page or in the Yoast dashboard page. + * + * We need to have the notice in the main admin otherwise the dismissal mechanism won't work. + * + * @param string $current_page The current page. + * + * @return bool True if current page is the index.php. + */ + protected function on_dashboard_page( $current_page ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. + if ( $current_page === 'admin.php' && isset( $_GET['page'] ) && \sanitize_text_field( \wp_unslash( $_GET['page'] ) ) === 'wpseo_dashboard' ) { + return true; + } + + return ( $current_page === 'index.php' ); + } + + /** + * Checks if the installed php version is supported. + * + * @codeCoverageIgnore + * + * @return bool True when the php version is support. + */ + protected function is_supported_php_version_installed() { + try { + $checker = new RequirementsChecker( [ 'php' => \PHP_VERSION ] ); + + $checker->addRequirement( VersionRequirement::fromCompareString( 'php', '>=7.4' ) ); + $checker->check(); + + return $checker->hasMessages() === false; + } + catch ( InvalidVersionComparisonString $e ) { + return true; + } + catch ( InvalidType $e ) { + return true; + } + } + + /** + * Creates a new message to display regarding the usage of PHP 7.3 (or lower). + * + * @codeCoverageIgnore + * + * @return void + */ + protected function show_unsupported_php_message() { + $presenter = new WPMessagePresenter( + $this, + new MessageDismisser( \time(), ( \WEEK_IN_SECONDS * 4 ), new WPDismissOption() ), + \__( 'Remind me again in 4 weeks.', 'wordpress-seo' ) + ); + $presenter->registerHooks(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/workouts-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/workouts-integration.php new file mode 100644 index 00000000..fe3b0fb2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/admin/workouts-integration.php @@ -0,0 +1,337 @@ +addon_manager = $addon_manager; + $this->admin_asset_manager = $admin_asset_manager; + $this->options_helper = $options_helper; + $this->product_helper = $product_helper; + } + + /** + * {@inheritDoc} + */ + public function register_hooks() { + \add_filter( 'wpseo_submenu_pages', [ $this, 'add_submenu_page' ], 8 ); + \add_filter( 'wpseo_submenu_pages', [ $this, 'remove_old_submenu_page' ], 10 ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ], 11 ); + } + + /** + * Adds the workouts submenu page. + * + * @param array $submenu_pages The Yoast SEO submenu pages. + * + * @return array The filtered submenu pages. + */ + public function add_submenu_page( $submenu_pages ) { + $submenu_pages[] = [ + 'wpseo_dashboard', + '', + \__( 'Workouts', 'wordpress-seo' ) . ' ', + 'edit_others_posts', + 'wpseo_workouts', + [ $this, 'render_target' ], + ]; + + return $submenu_pages; + } + + /** + * Removes the workouts submenu page from older Premium versions + * + * @param array $submenu_pages The Yoast SEO submenu pages. + * + * @return array The filtered submenu pages. + */ + public function remove_old_submenu_page( $submenu_pages ) { + if ( ! $this->should_update_premium() ) { + return $submenu_pages; + } + + // Copy only the Workouts page item that comes first in the array. + $result_submenu_pages = []; + $workouts_page_encountered = false; + foreach ( $submenu_pages as $item ) { + if ( $item[4] !== 'wpseo_workouts' || ! $workouts_page_encountered ) { + $result_submenu_pages[] = $item; + } + if ( $item[4] === 'wpseo_workouts' ) { + $workouts_page_encountered = true; + } + } + + return $result_submenu_pages; + } + + /** + * Enqueue the workouts app. + * + * @return void + */ + public function enqueue_assets() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. + if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpseo_workouts' ) { + return; + } + + if ( $this->should_update_premium() ) { + \wp_dequeue_script( 'yoast-seo-premium-workouts' ); + } + + $this->admin_asset_manager->enqueue_style( 'workouts' ); + + $workouts_option = $this->get_workouts_option(); + + $this->admin_asset_manager->enqueue_script( 'workouts' ); + $this->admin_asset_manager->localize_script( + 'workouts', + 'wpseoWorkoutsData', + [ + 'workouts' => $workouts_option, + 'homeUrl' => \home_url(), + 'pluginUrl' => \esc_url( \plugins_url( '', \WPSEO_FILE ) ), + 'toolsPageUrl' => \esc_url( \admin_url( 'admin.php?page=wpseo_tools' ) ), + 'usersPageUrl' => \esc_url( \admin_url( 'users.php' ) ), + 'firstTimeConfigurationUrl' => \esc_url( \admin_url( 'admin.php?page=wpseo_dashboard#top#first-time-configuration' ) ), + 'isPremium' => $this->product_helper->is_premium(), + 'upsellText' => $this->get_upsell_text(), + 'upsellLink' => $this->get_upsell_link(), + ] + ); + } + + /** + * Renders the target for the React to mount to. + * + * @return void + */ + public function render_target() { + if ( $this->should_update_premium() ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped in get_update_premium_notice. + echo $this->get_update_premium_notice(); + } + + echo '
                '; + } + + /** + * Gets the workouts option. + * + * @return mixed|null Returns workouts option if found, null if not. + */ + private function get_workouts_option() { + $workouts_option = $this->options_helper->get( 'workouts_data' ); + + // This filter is documented in src/routes/workouts-route.php. + return \apply_filters( 'Yoast\WP\SEO\workouts_options', $workouts_option ); + } + + /** + * Returns the notification to show when Premium needs to be updated. + * + * @return string The notification to update Premium. + */ + private function get_update_premium_notice() { + $url = $this->get_upsell_link(); + + if ( $this->has_premium_subscription_expired() ) { + /* translators: %s: expands to 'Yoast SEO Premium'. */ + $title = \sprintf( \__( 'Renew your subscription of %s', 'wordpress-seo' ), 'Yoast SEO Premium' ); + $copy = \sprintf( + /* translators: %s: expands to 'Yoast SEO Premium'. */ + \esc_html__( + 'Accessing the latest workouts requires an updated version of %s (at least 17.7), but it looks like your subscription has expired. Please renew your subscription to update and gain access to all the latest features.', + 'wordpress-seo' + ), + 'Yoast SEO Premium' + ); + $button = '' + . \esc_html__( 'Renew your subscription', 'wordpress-seo' ) + /* translators: Hidden accessibility text. */ + . '' . \__( '(Opens in a new browser tab)', 'wordpress-seo' ) . '' + . '' + . ''; + } + elseif ( $this->has_premium_subscription_activated() ) { + /* translators: %s: expands to 'Yoast SEO Premium'. */ + $title = \sprintf( \__( 'Update to the latest version of %s', 'wordpress-seo' ), 'Yoast SEO Premium' ); + $copy = \sprintf( + /* translators: 1: expands to 'Yoast SEO Premium', 2: Link start tag to the page to update Premium, 3: Link closing tag. */ + \esc_html__( 'It looks like you\'re running an outdated version of %1$s, please %2$supdate to the latest version (at least 17.7)%3$s to gain access to our updated workouts section.', 'wordpress-seo' ), + 'Yoast SEO Premium', + '', + '' + ); + $button = null; + } + else { + /* translators: %s: expands to 'Yoast SEO Premium'. */ + $title = \sprintf( \__( 'Activate your subscription of %s', 'wordpress-seo' ), 'Yoast SEO Premium' ); + $url_button = 'https://yoa.st/workouts-activate-notice-help'; + $copy = \sprintf( + /* translators: 1: expands to 'Yoast SEO Premium', 2: Link start tag to the page to update Premium, 3: Link closing tag. */ + \esc_html__( 'It looks like you’re running an outdated and unactivated version of %1$s, please activate your subscription in %2$sMyYoast%3$s and update to the latest version (at least 17.7) to gain access to our updated workouts section.', 'wordpress-seo' ), + 'Yoast SEO Premium', + '', + '' + ); + $button = '' + . \esc_html__( 'Get help activating your subscription', 'wordpress-seo' ) + /* translators: Hidden accessibility text. */ + . '' . \__( '(Opens in a new browser tab)', 'wordpress-seo' ) . '' + . ''; + } + + $notice = new Notice_Presenter( + $title, + $copy, + null, + $button + ); + + return $notice->present(); + } + + /** + * Check whether Premium should be updated. + * + * @return bool Returns true when Premium is enabled and the version is below 17.7. + */ + private function should_update_premium() { + $premium_version = $this->product_helper->get_premium_version(); + return $premium_version !== null && \version_compare( $premium_version, '17.7-RC1', '<' ); + } + + /** + * Check whether the Premium subscription has expired. + * + * @return bool Returns true when Premium subscription has expired. + */ + private function has_premium_subscription_expired() { + $subscription = $this->addon_manager->get_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ); + + return ( isset( $subscription->expiry_date ) && ( \strtotime( $subscription->expiry_date ) - \time() ) < 0 ); + } + + /** + * Check whether the Premium subscription is activated. + * + * @return bool Returns true when Premium subscription is activated. + */ + private function has_premium_subscription_activated() { + return $this->addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ); + } + + /** + * Returns the upsell/update copy to show in the card buttons. + * + * @return string Returns a string with the upsell/update copy for the card buttons. + */ + private function get_upsell_text() { + if ( ! $this->product_helper->is_premium() || ! $this->should_update_premium() ) { + // Use the default defined in the component. + return ''; + } + if ( $this->has_premium_subscription_expired() ) { + return \sprintf( + /* translators: %s: expands to 'Yoast SEO Premium'. */ + \__( 'Renew %s', 'wordpress-seo' ), + 'Yoast SEO Premium' + ); + } + if ( $this->has_premium_subscription_activated() ) { + return \sprintf( + /* translators: %s: expands to 'Yoast SEO Premium'. */ + \__( 'Update %s', 'wordpress-seo' ), + 'Yoast SEO Premium' + ); + } + return \sprintf( + /* translators: %s: expands to 'Yoast SEO Premium'. */ + \__( 'Activate %s', 'wordpress-seo' ), + 'Yoast SEO Premium' + ); + } + + /** + * Returns the upsell/update link to show in the card buttons. + * + * @return string Returns a string with the upsell/update link for the card buttons. + */ + private function get_upsell_link() { + if ( ! $this->product_helper->is_premium() || ! $this->should_update_premium() ) { + // Use the default defined in the component. + return ''; + } + if ( $this->has_premium_subscription_expired() ) { + return 'https://yoa.st/workout-renew-notice'; + } + if ( $this->has_premium_subscription_activated() ) { + return \wp_nonce_url( \self_admin_url( 'update.php?action=upgrade-plugin&plugin=wordpress-seo-premium/wp-seo-premium.php' ), 'upgrade-plugin_wordpress-seo-premium/wp-seo-premium.php' ); + } + return 'https://yoa.st/workouts-activate-notice-myyoast'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/abstract-dismissable-alert.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/abstract-dismissable-alert.php new file mode 100644 index 00000000..73c02ad8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/abstract-dismissable-alert.php @@ -0,0 +1,45 @@ +alert_identifier; + + return $allowed_dismissable_alerts; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/black-friday-product-editor-checklist-notification.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/black-friday-product-editor-checklist-notification.php new file mode 100644 index 00000000..1d183235 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/alerts/black-friday-product-editor-checklist-notification.php @@ -0,0 +1,17 @@ + + */ + public static function get_conditionals() { + return []; + } + + /** + * Initializes the integration. + * + * Integrations hooking on `init` need to have a priority of 11 or higher to + * ensure that they run, as priority 10 is used by the loader to load the integrations. + * + * @return void + */ + public function register_hooks() { + \add_action( 'init', [ $this, 'register_block' ], 11 ); + } + + /** + * Registers the block. + * + * @return void + */ + public function register_block() { + \register_block_type( + $this->base_path . $this->block_name . '/block.json', + [ + 'editor_script' => $this->script, + 'render_callback' => [ $this, 'present' ], + ] + ); + } + + /** + * Presents the block output. This is abstract because in the loop we need to be able to build the data for the + * presenter in the last moment. + * + * @param array $attributes The block attributes. + * + * @return string The block output. + */ + abstract public function present( $attributes ); +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/abstract-dynamic-block.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/abstract-dynamic-block.php new file mode 100644 index 00000000..4352fb1f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/abstract-dynamic-block.php @@ -0,0 +1,70 @@ +block_name, + [ + 'editor_script' => $this->script, + 'render_callback' => [ $this, 'present' ], + 'attributes' => [ + 'className' => [ + 'default' => '', + 'type' => 'string', + ], + ], + ] + ); + } + + /** + * Presents the block output. This is abstract because in the loop we need to be able to build the data for the + * presenter in the last moment. + * + * @param array $attributes The block attributes. + * + * @return string The block output. + */ + abstract public function present( $attributes ); +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/block-categories.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/block-categories.php new file mode 100644 index 00000000..09fa960a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/block-categories.php @@ -0,0 +1,52 @@ + 'yoast-structured-data-blocks', + 'title' => \sprintf( + /* translators: %1$s expands to Yoast. */ + \__( '%1$s Structured Data Blocks', 'wordpress-seo' ), + 'Yoast' + ), + ]; + $categories[] = [ + 'slug' => 'yoast-internal-linking-blocks', + 'title' => \sprintf( + /* translators: %1$s expands to Yoast. */ + \__( '%1$s Internal Linking Blocks', 'wordpress-seo' ), + 'Yoast' + ), + ]; + + return $categories; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/breadcrumbs-block.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/breadcrumbs-block.php new file mode 100644 index 00000000..288dac8c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/breadcrumbs-block.php @@ -0,0 +1,138 @@ +context_memoizer = $context_memoizer; + $this->replace_vars = $replace_vars; + $this->helpers = $helpers; + $this->indexable_repository = $indexable_repository; + $this->request_helper = $request_helper; + + $this->base_path = \WPSEO_PATH . 'blocks/dynamic-blocks/'; + } + + /** + * Presents the breadcrumbs output for the current page or the available post_id. + * + * @param array $attributes The block attributes. + * + * @return string The block output. + */ + public function present( $attributes ) { + $presenter = new Breadcrumbs_Presenter(); + // $this->context_memoizer->for_current_page only works on the frontend. To render the right breadcrumb in the + // editor, we need the repository. + if ( $this->request_helper->is_rest_request() || \is_admin() ) { + $post_id = \get_the_ID(); + if ( $post_id ) { + $indexable = $this->indexable_repository->find_by_id_and_type( $post_id, 'post' ); + + if ( ! $indexable ) { + $post = \get_post( $post_id ); + $indexable = $this->indexable_repository->query()->create( + [ + 'object_id' => $post_id, + 'object_type' => 'post', + 'object_sub_type' => $post->post_type, + ] + ); + } + + $context = $this->context_memoizer->get( $indexable, 'Post_Type' ); + } + } + if ( ! isset( $context ) ) { + $context = $this->context_memoizer->for_current_page(); + } + + /** This filter is documented in src/integrations/front-end-integration.php */ + $presentation = \apply_filters( 'wpseo_frontend_presentation', $context->presentation, $context ); + $presenter->presentation = $presentation; + $presenter->replace_vars = $this->replace_vars; + $presenter->helpers = $this->helpers; + $class_name = 'yoast-breadcrumbs'; + + if ( ! empty( $attributes['className'] ) ) { + $class_name .= ' ' . \esc_attr( $attributes['className'] ); + } + + return '
                ' . $presenter->present() . '
                '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/structured-data-blocks.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/structured-data-blocks.php new file mode 100644 index 00000000..e5375f0d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/blocks/structured-data-blocks.php @@ -0,0 +1,425 @@ +asset_manager = $asset_manager; + $this->image_helper = $image_helper; + } + + /** + * Registers hooks for Structured Data Blocks with WordPress. + * + * @return void + */ + public function register_hooks() { + $this->register_blocks(); + } + + /** + * Registers the blocks. + * + * @return void + */ + public function register_blocks() { + /** + * Filter: 'wpseo_enable_structured_data_blocks' - Allows disabling Yoast's schema blocks entirely. + * + * @param bool $enable If false, our structured data blocks won't show. + */ + if ( ! \apply_filters( 'wpseo_enable_structured_data_blocks', true ) ) { + return; + } + + \register_block_type( + \WPSEO_PATH . 'blocks/structured-data-blocks/faq/block.json', + [ + 'render_callback' => [ $this, 'optimize_faq_images' ], + ] + ); + \register_block_type( + \WPSEO_PATH . 'blocks/structured-data-blocks/how-to/block.json', + [ + 'render_callback' => [ $this, 'optimize_how_to_images' ], + ] + ); + } + + /** + * Optimizes images in the FAQ blocks. + * + * @param array $attributes The attributes. + * @param string $content The content. + * + * @return string The content with images optimized. + */ + public function optimize_faq_images( $attributes, $content ) { + if ( ! isset( $attributes['questions'] ) ) { + return $content; + } + + return $this->optimize_images( $attributes['questions'], 'answer', $content ); + } + + /** + * Transforms the durations into a translated string containing the count, and either singular or plural unit. + * For example (in en-US): If 'days' is 1, it returns "1 day". If 'days' is 2, it returns "2 days". + * If a number value is 0, we don't output the string. + * + * @param number $days Number of days. + * @param number $hours Number of hours. + * @param number $minutes Number of minutes. + * @return array Array of pluralized durations. + */ + private function transform_duration_to_string( $days, $hours, $minutes ) { + $strings = []; + if ( $days ) { + $strings[] = \sprintf( + /* translators: %d expands to the number of day/days. */ + \_n( '%d day', '%d days', $days, 'wordpress-seo' ), + $days + ); + } + if ( $hours ) { + $strings[] = \sprintf( + /* translators: %d expands to the number of hour/hours. */ + \_n( '%d hour', '%d hours', $hours, 'wordpress-seo' ), + $hours + ); + } + if ( $minutes ) { + $strings[] = \sprintf( + /* translators: %d expands to the number of minute/minutes. */ + \_n( '%d minute', '%d minutes', $minutes, 'wordpress-seo' ), + $minutes + ); + } + return $strings; + } + + /** + * Formats the durations into a translated string. + * + * @param array $attributes The attributes. + * @return string The formatted duration. + */ + private function build_duration_string( $attributes ) { + $days = ( $attributes['days'] ?? 0 ); + $hours = ( $attributes['hours'] ?? 0 ); + $minutes = ( $attributes['minutes'] ?? 0 ); + $elements = $this->transform_duration_to_string( $days, $hours, $minutes ); + $elements_length = \count( $elements ); + + switch ( $elements_length ) { + case 1: + return $elements[0]; + case 2: + return \sprintf( + /* translators: %s expands to a unit of time (e.g. 1 day). */ + \__( '%1$s and %2$s', 'wordpress-seo' ), + ...$elements + ); + case 3: + return \sprintf( + /* translators: %s expands to a unit of time (e.g. 1 day). */ + \__( '%1$s, %2$s and %3$s', 'wordpress-seo' ), + ...$elements + ); + default: + return ''; + } + } + + /** + * Presents the duration text of the How-To block in the site language. + * + * @param array $attributes The attributes. + * @param string $content The content. + * + * @return string The content with the duration text in the site language. + */ + public function present_duration_text( $attributes, $content ) { + $duration = $this->build_duration_string( $attributes ); + // 'Time needed:' is the default duration text that will be shown if a user doesn't add one. + $duration_text = \__( 'Time needed:', 'wordpress-seo' ); + + if ( isset( $attributes['durationText'] ) && $attributes['durationText'] !== '' ) { + $duration_text = $attributes['durationText']; + } + + return \preg_replace( + '/(

                )(.*<\/span>)(.[^\/p>]*)(<\/p>)/', + '

                ' . $duration_text . ' ' . $duration . '

                ', + $content, + 1 + ); + } + + /** + * Optimizes images in the How-To blocks. + * + * @param array $attributes The attributes. + * @param string $content The content. + * + * @return string The content with images optimized. + */ + public function optimize_how_to_images( $attributes, $content ) { + if ( ! isset( $attributes['steps'] ) ) { + return $content; + } + + $content = $this->present_duration_text( $attributes, $content ); + + return $this->optimize_images( $attributes['steps'], 'text', $content ); + } + + /** + * Optimizes images in structured data blocks. + * + * @param array $elements The list of elements from the block attributes. + * @param string $key The key in the data to iterate over. + * @param string $content The content. + * + * @return string The content with images optimized. + */ + private function optimize_images( $elements, $key, $content ) { + global $post; + if ( ! $post ) { + return $content; + } + + $this->add_images_from_attributes_to_used_cache( $post->ID, $elements, $key ); + + // Then replace all images with optimized versions in the content. + $content = \preg_replace_callback( + '/]+>/', + function ( $matches ) { + \preg_match( '/src="([^"]+)"/', $matches[0], $src_matches ); + if ( ! $src_matches || ! isset( $src_matches[1] ) ) { + return $matches[0]; + } + $attachment_id = $this->attachment_src_to_id( $src_matches[1] ); + if ( $attachment_id === 0 ) { + return $matches[0]; + } + $image_size = 'full'; + $image_style = [ 'style' => 'max-width: 100%; height: auto;' ]; + \preg_match( '/style="[^"]*width:\s*(\d+)px[^"]*"/', $matches[0], $style_matches ); + if ( $style_matches && isset( $style_matches[1] ) ) { + $width = (int) $style_matches[1]; + $meta_data = \wp_get_attachment_metadata( $attachment_id ); + if ( isset( $meta_data['height'] ) && isset( $meta_data['width'] ) && $meta_data['height'] > 0 && $meta_data['width'] > 0 ) { + $aspect_ratio = ( $meta_data['height'] / $meta_data['width'] ); + $height = ( $width * $aspect_ratio ); + $image_size = [ $width, $height ]; + } + $image_style = ''; + } + + /** + * Filter: 'wpseo_structured_data_blocks_image_size' - Allows adjusting the image size in structured data blocks. + * + * @since 18.2 + * + * @param string|int[] $image_size The image size. Accepts any registered image size name, or an array of width and height values in pixels (in that order). + * @param int $attachment_id The id of the attachment. + * @param string $attachment_src The attachment src. + */ + $image_size = \apply_filters( + 'wpseo_structured_data_blocks_image_size', + $image_size, + $attachment_id, + $src_matches[1] + ); + $image_html = \wp_get_attachment_image( + $attachment_id, + $image_size, + false, + $image_style + ); + + if ( empty( $image_html ) ) { + return $matches[0]; + } + + return $image_html; + }, + $content + ); + + if ( ! $this->registered_shutdown_function ) { + \register_shutdown_function( [ $this, 'maybe_save_used_caches' ] ); + $this->registered_shutdown_function = true; + } + + return $content; + } + + /** + * If the caches of structured data block images have been changed, saves them. + * + * @return void + */ + public function maybe_save_used_caches() { + foreach ( $this->used_caches as $post_id => $used_cache ) { + if ( isset( $this->caches[ $post_id ] ) && $used_cache === $this->caches[ $post_id ] ) { + continue; + } + \update_post_meta( $post_id, 'yoast-structured-data-blocks-images-cache', $used_cache ); + } + } + + /** + * Converts an attachment src to an attachment ID. + * + * @param string $src The attachment src. + * + * @return int The attachment ID. 0 if none was found. + */ + private function attachment_src_to_id( $src ) { + global $post; + + if ( isset( $this->used_caches[ $post->ID ][ $src ] ) ) { + return $this->used_caches[ $post->ID ][ $src ]; + } + + $cache = $this->get_cache_for_post( $post->ID ); + if ( isset( $cache[ $src ] ) ) { + $this->used_caches[ $post->ID ][ $src ] = $cache[ $src ]; + return $cache[ $src ]; + } + + $this->used_caches[ $post->ID ][ $src ] = $this->image_helper->get_attachment_by_url( $src ); + return $this->used_caches[ $post->ID ][ $src ]; + } + + /** + * Returns the cache from postmeta for a given post. + * + * @param int $post_id The post ID. + * + * @return array The images cache. + */ + private function get_cache_for_post( $post_id ) { + if ( isset( $this->caches[ $post_id ] ) ) { + return $this->caches[ $post_id ]; + } + + $cache = \get_post_meta( $post_id, 'yoast-structured-data-blocks-images-cache', true ); + if ( ! $cache ) { + $cache = []; + } + + $this->caches[ $post_id ] = $cache; + return $cache; + } + + /** + * Adds any images that have their ID in the block attributes to the cache. + * + * @param int $post_id The post ID. + * @param array $elements The elements. + * @param string $key The key in the elements we should loop over. + * + * @return void + */ + private function add_images_from_attributes_to_used_cache( $post_id, $elements, $key ) { + // First grab all image IDs from the attributes. + $images = []; + foreach ( $elements as $element ) { + if ( ! isset( $element[ $key ] ) ) { + continue; + } + if ( isset( $element[ $key ] ) && \is_array( $element[ $key ] ) ) { + foreach ( $element[ $key ] as $part ) { + if ( ! \is_array( $part ) || ! isset( $part['type'] ) || $part['type'] !== 'img' ) { + continue; + } + + if ( ! isset( $part['key'] ) || ! isset( $part['props']['src'] ) ) { + continue; + } + + $images[ $part['props']['src'] ] = (int) $part['key']; + } + } + } + + if ( isset( $this->used_caches[ $post_id ] ) ) { + $this->used_caches[ $post_id ] = \array_merge( $this->used_caches[ $post_id ], $images ); + } + else { + $this->used_caches[ $post_id ] = $images; + } + } + + /* DEPRECATED METHODS */ + + /** + * Enqueue Gutenberg block assets for backend editor. + * + * @deprecated 22.7 + * @codeCoverageIgnore + * + * @return void + */ + public function enqueue_block_editor_assets() { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.7' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/breadcrumbs-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/breadcrumbs-integration.php new file mode 100644 index 00000000..57b2b0b4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/breadcrumbs-integration.php @@ -0,0 +1,82 @@ +context_memoizer = $context_memoizer; + $this->presenter = new Breadcrumbs_Presenter(); + $this->presenter->helpers = $helpers; + $this->presenter->replace_vars = $replace_vars; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return []; + } + + /** + * Registers the `wpseo_breadcrumb` shortcode. + * + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + \add_shortcode( 'wpseo_breadcrumb', [ $this, 'render' ] ); + } + + /** + * Renders the breadcrumbs. + * + * @return string The rendered breadcrumbs. + */ + public function render() { + $context = $this->context_memoizer->for_current_page(); + + /** This filter is documented in src/integrations/front-end-integration.php */ + $presentation = \apply_filters( 'wpseo_frontend_presentation', $context->presentation, $context ); + + $this->presenter->presentation = $presentation; + + return $this->presenter->present(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/cleanup-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/cleanup-integration.php new file mode 100644 index 00000000..e2e7dc29 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/cleanup-integration.php @@ -0,0 +1,341 @@ +cleanup_repository = $cleanup_repository; + $this->indexable_helper = $indexable_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( self::START_HOOK, [ $this, 'run_cleanup' ] ); + \add_action( self::CRON_HOOK, [ $this, 'run_cleanup_cron' ] ); + \add_action( 'wpseo_deactivate', [ $this, 'reset_cleanup' ] ); + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return []; + } + + /** + * Starts the indexables cleanup. + * + * @return void + */ + public function run_cleanup() { + $this->reset_cleanup(); + + if ( ! $this->indexable_helper->should_index_indexables() ) { + \wp_unschedule_hook( self::START_HOOK ); + return; + } + + $cleanups = $this->get_cleanup_tasks(); + $limit = $this->get_limit(); + + foreach ( $cleanups as $name => $action ) { + $items_cleaned = $action( $limit ); + + if ( $items_cleaned === false ) { + return; + } + + if ( $items_cleaned < $limit ) { + continue; + } + + // There are more items to delete for the current cleanup job, start a cronjob at the specified job. + $this->start_cron_job( $name ); + + return; + } + } + + /** + * Returns an array of cleanup tasks. + * + * @return Closure[] The cleanup tasks. + */ + public function get_cleanup_tasks() { + return \array_merge( + [ + 'clean_indexables_with_object_type_and_object_sub_type_shop_order' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_with_object_type_and_object_sub_type( 'post', 'shop_order', $limit ); + }, + 'clean_indexables_by_post_status_auto-draft' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_with_post_status( 'auto-draft', $limit ); + }, + 'clean_indexables_for_non_publicly_viewable_post' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_non_publicly_viewable_post( $limit ); + }, + 'clean_indexables_for_non_publicly_viewable_taxonomies' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_non_publicly_viewable_taxonomies( $limit ); + }, + 'clean_indexables_for_non_publicly_viewable_post_type_archive_pages' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_non_publicly_viewable_post_type_archive_pages( $limit ); + }, + 'clean_indexables_for_authors_archive_disabled' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_authors_archive_disabled( $limit ); + }, + 'clean_indexables_for_authors_without_archive' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_authors_without_archive( $limit ); + }, + 'update_indexables_author_to_reassigned' => function ( $limit ) { + return $this->cleanup_repository->update_indexables_author_to_reassigned( $limit ); + }, + 'clean_orphaned_user_indexables_without_wp_user' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_orphaned_users( $limit ); + }, + 'clean_orphaned_user_indexables_without_wp_post' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_object_type_and_source_table( 'posts', 'ID', 'post', $limit ); + }, + 'clean_orphaned_user_indexables_without_wp_term' => function ( $limit ) { + return $this->cleanup_repository->clean_indexables_for_object_type_and_source_table( 'terms', 'term_id', 'term', $limit ); + }, + ], + $this->get_additional_indexable_cleanups(), + [ + /* These should always be the last ones to be called. */ + 'clean_orphaned_content_indexable_hierarchy' => function ( $limit ) { + return $this->cleanup_repository->cleanup_orphaned_from_table( 'Indexable_Hierarchy', 'indexable_id', $limit ); + }, + 'clean_orphaned_content_seo_links_indexable_id' => function ( $limit ) { + return $this->cleanup_repository->cleanup_orphaned_from_table( 'SEO_Links', 'indexable_id', $limit ); + }, + 'clean_orphaned_content_seo_links_target_indexable_id' => function ( $limit ) { + return $this->cleanup_repository->cleanup_orphaned_from_table( 'SEO_Links', 'target_indexable_id', $limit ); + }, + + ], + $this->get_additional_misc_cleanups() + ); + } + + /** + * Gets additional tasks from the 'wpseo_cleanup_tasks' filter. + * + * @return Closure[] Associative array of indexable cleanup functions. + */ + private function get_additional_indexable_cleanups() { + + /** + * Filter: Adds the possibility to add additional indexable cleanup functions. + * + * @param array $additional_tasks Associative array with unique keys. Value should be a cleanup function that receives a limit. + */ + $additional_tasks = \apply_filters( 'wpseo_cleanup_tasks', [] ); + + return $this->validate_additional_tasks( $additional_tasks ); + } + + /** + * Gets additional tasks from the 'wpseo_misc_cleanup_tasks' filter. + * + * @return Closure[] Associative array of indexable cleanup functions. + */ + private function get_additional_misc_cleanups() { + + /** + * Filter: Adds the possibility to add additional non-indexable cleanup functions. + * + * @param array $additional_tasks Associative array with unique keys. Value should be a cleanup function that receives a limit. + */ + $additional_tasks = \apply_filters( 'wpseo_misc_cleanup_tasks', [] ); + + return $this->validate_additional_tasks( $additional_tasks ); + } + + /** + * Validates the additional tasks. + * + * @param Closure[] $additional_tasks The additional tasks to validate. + * + * @return Closure[] The validated additional tasks. + */ + private function validate_additional_tasks( $additional_tasks ) { + if ( ! \is_array( $additional_tasks ) ) { + return []; + } + + foreach ( $additional_tasks as $key => $value ) { + if ( \is_int( $key ) ) { + return []; + } + if ( ( ! \is_object( $value ) ) || ! ( $value instanceof Closure ) ) { + return []; + } + } + + return $additional_tasks; + } + + /** + * Gets the deletion limit for cleanups. + * + * @return int The limit for the amount of entities to be cleaned. + */ + private function get_limit() { + /** + * Filter: Adds the possibility to limit the number of items that are deleted from the database on cleanup. + * + * @param int $limit Maximum number of indexables to be cleaned up per query. + */ + $limit = \apply_filters( 'wpseo_cron_query_limit_size', 1000 ); + + if ( ! \is_int( $limit ) ) { + $limit = 1000; + } + + return \abs( $limit ); + } + + /** + * Resets and stops the cleanup integration. + * + * @return void + */ + public function reset_cleanup() { + \delete_option( self::CURRENT_TASK_OPTION ); + \wp_unschedule_hook( self::CRON_HOOK ); + } + + /** + * Starts the cleanup cron job. + * + * @param string $task_name The task name of the next cleanup task to run. + * @param int $schedule_time The time in seconds to wait before running the first cron job. Default is 1 hour. + * + * @return void + */ + public function start_cron_job( $task_name, $schedule_time = 3600 ) { + \update_option( self::CURRENT_TASK_OPTION, $task_name ); + \wp_schedule_event( + ( \time() + $schedule_time ), + 'hourly', + self::CRON_HOOK + ); + } + + /** + * The callback that is called for the cleanup cron job. + * + * @return void + */ + public function run_cleanup_cron() { + if ( ! $this->indexable_helper->should_index_indexables() ) { + $this->reset_cleanup(); + + return; + } + + $current_task_name = \get_option( self::CURRENT_TASK_OPTION ); + + if ( $current_task_name === false ) { + $this->reset_cleanup(); + + return; + } + + $limit = $this->get_limit(); + $tasks = $this->get_cleanup_tasks(); + + // The task may have been added by a filter that has been removed, in that case just start over. + if ( ! isset( $tasks[ $current_task_name ] ) ) { + $current_task_name = \key( $tasks ); + } + + $current_task = \current( $tasks ); + while ( $current_task !== false ) { + // Skip the tasks that have already been done. + if ( \key( $tasks ) !== $current_task_name ) { + $current_task = \next( $tasks ); + continue; + } + + // Call the cleanup callback function that accompanies the current task. + $items_cleaned = $current_task( $limit ); + + if ( $items_cleaned === false ) { + $this->reset_cleanup(); + + return; + } + + if ( $items_cleaned === 0 ) { + // Check if we are finished with all tasks. + if ( \next( $tasks ) === false ) { + $this->reset_cleanup(); + + return; + } + + // Continue with the next task next time the cron job is run. + \update_option( self::CURRENT_TASK_OPTION, \key( $tasks ) ); + + return; + } + + // There were items deleted for the current task, continue with the same task next cron call. + return; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/estimated-reading-time.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/estimated-reading-time.php new file mode 100644 index 00000000..01b514e8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/estimated-reading-time.php @@ -0,0 +1,49 @@ + 'hidden', + 'title' => 'estimated-reading-time-minutes', + ]; + } + + return $field_defs; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/exclude-attachment-post-type.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/exclude-attachment-post-type.php new file mode 100644 index 00000000..e87c2dcf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/exclude-attachment-post-type.php @@ -0,0 +1,32 @@ +asset_manager = $asset_manager; + $this->feature_flags = $feature_flags; + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return string[] The conditionals based on which this loadable should be active. + */ + public static function get_conditionals() { + return [ Admin_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'add_feature_flags' ] ); + } + + /** + * Gathers all the feature flags and injects them into the JavaScript. + * + * @return void + */ + public function add_feature_flags() { + $enabled_features = $this->get_enabled_features(); + // Localize under both names for BC. + $this->asset_manager->localize_script( 'feature-flag-package', 'wpseoFeatureFlags', $enabled_features ); + $this->asset_manager->localize_script( 'feature-flag-package', 'wpseoFeaturesL10n', $enabled_features ); + } + + /** + * Returns an array of all enabled feature flags. + * + * @return string[] The array of enabled features. + */ + public function get_enabled_features() { + $enabled_features = []; + foreach ( $this->feature_flags as $feature_flag ) { + if ( $feature_flag->is_met() ) { + $enabled_features[] = $feature_flag->get_feature_name(); + } + } + + return $this->filter_enabled_features( $enabled_features ); + } + + /** + * Runs the list of enabled feature flags through a filter. + * + * @param string[] $enabled_features The list of currently enabled feature flags. + * + * @return string[] The (possibly adapted) list of enabled features. + */ + protected function filter_enabled_features( $enabled_features ) { + /** + * Filters the list of currently enabled feature flags. + * + * @param string[] $enabled_features The current list of enabled feature flags. + */ + $filtered_enabled_features = \apply_filters( 'wpseo_enable_feature', $enabled_features ); + + if ( ! \is_array( $filtered_enabled_features ) ) { + $filtered_enabled_features = $enabled_features; + } + + return $filtered_enabled_features; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end-integration.php new file mode 100644 index 00000000..1d895366 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end-integration.php @@ -0,0 +1,573 @@ + + */ + protected $open_graph_error_presenters = [ + 'Open_Graph\Locale', + 'Open_Graph\Title', + 'Open_Graph\Site_Name', + ]; + + /** + * The Twitter card specific presenters. + * + * @var array + */ + protected $twitter_card_presenters = [ + 'Twitter\Card', + 'Twitter\Title', + 'Twitter\Description', + 'Twitter\Image', + 'Twitter\Creator', + 'Twitter\Site', + ]; + + /** + * The Slack specific presenters. + * + * @var array + */ + protected $slack_presenters = [ + 'Slack\Enhanced_Data', + ]; + + /** + * The Webmaster verification specific presenters. + * + * @var array + */ + protected $webmaster_verification_presenters = [ + 'Webmaster\Baidu', + 'Webmaster\Bing', + 'Webmaster\Google', + 'Webmaster\Pinterest', + 'Webmaster\Yandex', + ]; + + /** + * Presenters that are only needed on singular pages. + * + * @var array + */ + protected $singular_presenters = [ + 'Meta_Author', + 'Open_Graph\Article_Author', + 'Open_Graph\Article_Publisher', + 'Open_Graph\Article_Published_Time', + 'Open_Graph\Article_Modified_Time', + 'Twitter\Creator', + 'Slack\Enhanced_Data', + ]; + + /** + * The presenters we want to be last in our output. + * + * @var array + */ + protected $closing_presenters = [ + 'Schema', + ]; + + /** + * The next output. + * + * @var string + */ + protected $next; + + /** + * The prev output. + * + * @var string + */ + protected $prev; + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Front_End_Integration constructor. + * + * @codeCoverageIgnore It sets dependencies. + * + * @param Meta_Tags_Context_Memoizer $context_memoizer The meta tags context memoizer. + * @param ContainerInterface $service_container The DI container. + * @param Options_Helper $options The options helper. + * @param Request_Helper $request The request helper. + * @param Helpers_Surface $helpers The helpers surface. + * @param WPSEO_Replace_Vars $replace_vars The replace vars helper. + */ + public function __construct( + Meta_Tags_Context_Memoizer $context_memoizer, + ContainerInterface $service_container, + Options_Helper $options, + Request_Helper $request, + Helpers_Surface $helpers, + WPSEO_Replace_Vars $replace_vars + ) { + $this->container = $service_container; + $this->context_memoizer = $context_memoizer; + $this->options = $options; + $this->request = $request; + $this->helpers = $helpers; + $this->replace_vars = $replace_vars; + } + + /** + * Registers the appropriate hooks to show the SEO metadata on the frontend. + * + * Removes some actions to remove metadata that WordPress shows on the frontend, + * to avoid duplicate and/or mismatched metadata. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'render_block', [ $this, 'query_loop_next_prev' ], 1, 2 ); + + \add_action( 'wp_head', [ $this, 'call_wpseo_head' ], 1 ); + // Filter the title for compatibility with other plugins and themes. + \add_filter( 'wp_title', [ $this, 'filter_title' ], 15 ); + // Filter the title for compatibility with block-based themes. + \add_filter( 'pre_get_document_title', [ $this, 'filter_title' ], 15 ); + + // Removes our robots presenter from the list when wp_robots is handling this. + \add_filter( 'wpseo_frontend_presenter_classes', [ $this, 'filter_robots_presenter' ] ); + + \add_action( 'wpseo_head', [ $this, 'present_head' ], -9999 ); + + \remove_action( 'wp_head', 'rel_canonical' ); + \remove_action( 'wp_head', 'index_rel_link' ); + \remove_action( 'wp_head', 'start_post_rel_link' ); + \remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); + \remove_action( 'wp_head', 'noindex', 1 ); + \remove_action( 'wp_head', '_wp_render_title_tag', 1 ); + \remove_action( 'wp_head', '_block_template_render_title_tag', 1 ); + \remove_action( 'wp_head', 'gutenberg_render_title_tag', 1 ); + } + + /** + * Filters the title, mainly used for compatibility reasons. + * + * @return string + */ + public function filter_title() { + $context = $this->context_memoizer->for_current_page(); + + $title_presenter = new Title_Presenter(); + + /** This filter is documented in src/integrations/front-end-integration.php */ + $title_presenter->presentation = \apply_filters( 'wpseo_frontend_presentation', $context->presentation, $context ); + $title_presenter->replace_vars = $this->replace_vars; + $title_presenter->helpers = $this->helpers; + + \remove_filter( 'pre_get_document_title', [ $this, 'filter_title' ], 15 ); + $title = \esc_html( $title_presenter->get() ); + \add_filter( 'pre_get_document_title', [ $this, 'filter_title' ], 15 ); + + return $title; + } + + /** + * Filters the next and prev links in the query loop block. + * + * @param string $html The HTML output. + * @param array $block The block. + * @return string The filtered HTML output. + */ + public function query_loop_next_prev( $html, $block ) { + if ( $block['blockName'] === 'core/query' ) { + // Check that the query does not inherit the main query. + if ( isset( $block['attrs']['query']['inherit'] ) && ! $block['attrs']['query']['inherit'] ) { + \add_filter( 'wpseo_adjacent_rel_url', [ $this, 'adjacent_rel_url' ], 1, 3 ); + } + } + + if ( $block['blockName'] === 'core/query-pagination-next' ) { + $this->next = $html; + } + + if ( $block['blockName'] === 'core/query-pagination-previous' ) { + $this->prev = $html; + } + + return $html; + } + + /** + * Returns correct adjacent pages when Query loop block does not inherit query from template. + * + * @param string $link The current link. + * @param string $rel Link relationship, prev or next. + * @param Indexable_Presentation|null $presentation The indexable presentation. + * + * @return string The correct link. + */ + public function adjacent_rel_url( $link, $rel, $presentation = null ) { + if ( $link === \home_url( '/' ) ) { + return $link; + } + + if ( ( $rel === 'next' || $rel === 'prev' ) && ( ! \is_null( $this->$rel ) ) ) { + // Reconstruct url if it's relative. + if ( \class_exists( WP_HTML_Tag_Processor::class ) ) { + $processor = new WP_HTML_Tag_Processor( $this->$rel ); + while ( $processor->next_tag( [ 'tag_name' => 'a' ] ) ) { + $href = $processor->get_attribute( 'href' ); + if ( $href && \strpos( $href, '/' ) === 0 ) { + return $presentation->permalink . \substr( $href, 1 ); + } + } + } + } + + return $link; + } + + /** + * Filters our robots presenter, but only when wp_robots is attached to the wp_head action. + * + * @param array $presenters The presenters for current page. + * + * @return array The filtered presenters. + */ + public function filter_robots_presenter( $presenters ) { + if ( ! \function_exists( 'wp_robots' ) ) { + return $presenters; + } + + if ( ! \has_action( 'wp_head', 'wp_robots' ) ) { + return $presenters; + } + + if ( $this->request->is_rest_request() ) { + return $presenters; + } + + return \array_diff( $presenters, [ 'Yoast\\WP\\SEO\\Presenters\\Robots_Presenter' ] ); + } + + /** + * Presents the head in the front-end. Resets wp_query if it's not the main query. + * + * @codeCoverageIgnore It just calls a WordPress function. + * + * @return void + */ + public function call_wpseo_head() { + global $wp_query; + + $old_wp_query = $wp_query; + // phpcs:ignore WordPress.WP.DiscouragedFunctions.wp_reset_query_wp_reset_query -- Reason: The recommended function, wp_reset_postdata, doesn't reset wp_query. + \wp_reset_query(); + + \do_action( 'wpseo_head' ); + + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the query. + $GLOBALS['wp_query'] = $old_wp_query; + } + + /** + * Echoes all applicable presenters for a page. + * + * @return void + */ + public function present_head() { + $context = $this->context_memoizer->for_current_page(); + $presenters = $this->get_presenters( $context->page_type, $context ); + + /** + * Filter 'wpseo_frontend_presentation' - Allow filtering the presentation used to output our meta values. + * + * @param Indexable_Presention $presentation The indexable presentation. + * @param Meta_Tags_Context $context The meta tags context for the current page. + */ + $presentation = \apply_filters( 'wpseo_frontend_presentation', $context->presentation, $context ); + + echo \PHP_EOL; + foreach ( $presenters as $presenter ) { + $presenter->presentation = $presentation; + $presenter->helpers = $this->helpers; + $presenter->replace_vars = $this->replace_vars; + + $output = $presenter->present(); + if ( ! empty( $output ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput -- Presenters are responsible for correctly escaping their output. + echo "\t" . $output . \PHP_EOL; + } + } + echo \PHP_EOL . \PHP_EOL; + } + + /** + * Returns all presenters for this page. + * + * @param string $page_type The page type. + * @param Meta_Tags_Context|null $context The meta tags context for the current page. + * + * @return Abstract_Indexable_Presenter[] The presenters. + */ + public function get_presenters( $page_type, $context = null ) { + if ( \is_null( $context ) ) { + $context = $this->context_memoizer->for_current_page(); + } + + $needed_presenters = $this->get_needed_presenters( $page_type ); + + $callback = static function ( $presenter ) { + if ( ! \class_exists( $presenter ) ) { + return null; + } + return new $presenter(); + }; + $presenters = \array_filter( \array_map( $callback, $needed_presenters ) ); + + /** + * Filter 'wpseo_frontend_presenters' - Allow filtering the presenter instances in or out of the request. + * + * @param Abstract_Indexable_Presenter[] $presenters List of presenter instances. + * @param Meta_Tags_Context $context The meta tags context for the current page. + */ + $presenter_instances = \apply_filters( 'wpseo_frontend_presenters', $presenters, $context ); + + if ( ! \is_array( $presenter_instances ) ) { + $presenter_instances = $presenters; + } + + $is_presenter_callback = static function ( $presenter_instance ) { + return $presenter_instance instanceof Abstract_Indexable_Presenter; + }; + $presenter_instances = \array_filter( $presenter_instances, $is_presenter_callback ); + + return \array_merge( + [ new Marker_Open_Presenter() ], + $presenter_instances, + [ new Marker_Close_Presenter() ] + ); + } + + /** + * Generate the array of presenters we need for the current request. + * + * @param string $page_type The page type we're retrieving presenters for. + * + * @return string[] The presenters. + */ + private function get_needed_presenters( $page_type ) { + $presenters = $this->get_presenters_for_page_type( $page_type ); + + $presenters = $this->maybe_remove_title_presenter( $presenters ); + + $callback = static function ( $presenter ) { + return "Yoast\WP\SEO\Presenters\\{$presenter}_Presenter"; + }; + $presenters = \array_map( $callback, $presenters ); + + /** + * Filter 'wpseo_frontend_presenter_classes' - Allow filtering presenters in or out of the request. + * + * @param array $presenters List of presenters. + * @param string $page_type The current page type. + */ + $presenters = \apply_filters( 'wpseo_frontend_presenter_classes', $presenters, $page_type ); + + return $presenters; + } + + /** + * Filters the presenters based on the page type. + * + * @param string $page_type The page type. + * + * @return string[] The presenters. + */ + private function get_presenters_for_page_type( $page_type ) { + if ( $page_type === 'Error_Page' ) { + $presenters = $this->base_presenters; + if ( $this->options->get( 'opengraph' ) === true ) { + $presenters = \array_merge( $presenters, $this->open_graph_error_presenters ); + } + return \array_merge( $presenters, $this->closing_presenters ); + } + + $presenters = $this->get_all_presenters(); + if ( \in_array( $page_type, [ 'Static_Home_Page', 'Home_Page' ], true ) ) { + $presenters = \array_merge( $presenters, $this->webmaster_verification_presenters ); + } + + // Filter out the presenters only needed for singular pages on non-singular pages. + if ( ! \in_array( $page_type, [ 'Post_Type', 'Static_Home_Page' ], true ) ) { + $presenters = \array_diff( $presenters, $this->singular_presenters ); + } + + // Filter out `twitter:data` presenters for static home pages. + if ( $page_type === 'Static_Home_Page' ) { + $presenters = \array_diff( $presenters, $this->slack_presenters ); + } + + return $presenters; + } + + /** + * Returns a list of all available presenters based on settings. + * + * @return string[] The presenters. + */ + private function get_all_presenters() { + $presenters = \array_merge( $this->base_presenters, $this->indexing_directive_presenters ); + if ( $this->options->get( 'opengraph' ) === true ) { + $presenters = \array_merge( $presenters, $this->open_graph_presenters ); + } + if ( $this->options->get( 'twitter' ) === true && \apply_filters( 'wpseo_output_twitter_card', true ) !== false ) { + $presenters = \array_merge( $presenters, $this->twitter_card_presenters ); + } + if ( $this->options->get( 'enable_enhanced_slack_sharing' ) === true && \apply_filters( 'wpseo_output_enhanced_slack_data', true ) !== false ) { + $presenters = \array_merge( $presenters, $this->slack_presenters ); + } + + return \array_merge( $presenters, $this->closing_presenters ); + } + + /** + * Whether the title presenter should be removed. + * + * @return bool True when the title presenter should be removed, false otherwise. + */ + public function should_title_presenter_be_removed() { + return ! \get_theme_support( 'title-tag' ) && ! $this->options->get( 'forcerewritetitle', false ); + } + + /** + * Checks if the Title presenter needs to be removed. + * + * @param string[] $presenters The presenters. + * + * @return string[] The presenters. + */ + private function maybe_remove_title_presenter( $presenters ) { + // Do not remove the title if we're on a REST request. + if ( $this->request->is_rest_request() ) { + return $presenters; + } + + // Remove the title presenter if the theme is hardcoded to output a title tag so we don't have two title tags. + if ( $this->should_title_presenter_be_removed() ) { + $presenters = \array_diff( $presenters, [ 'Title' ] ); + } + + return $presenters; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/backwards-compatibility.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/backwards-compatibility.php new file mode 100644 index 00000000..dd139722 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/backwards-compatibility.php @@ -0,0 +1,72 @@ +options = $options; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + if ( $this->options->get( 'opengraph' ) === true ) { + \add_action( 'wpseo_head', [ $this, 'call_wpseo_opengraph' ], 30 ); + } + if ( $this->options->get( 'twitter' ) === true && \apply_filters( 'wpseo_output_twitter_card', true ) !== false ) { + \add_action( 'wpseo_head', [ $this, 'call_wpseo_twitter' ], 40 ); + } + } + + /** + * Calls the old wpseo_opengraph action. + * + * @return void + */ + public function call_wpseo_opengraph() { + \do_action_deprecated( 'wpseo_opengraph', [], '14.0', 'wpseo_frontend_presenters' ); + } + + /** + * Calls the old wpseo_twitter action. + * + * @return void + */ + public function call_wpseo_twitter() { + \do_action_deprecated( 'wpseo_twitter', [], '14.0', 'wpseo_frontend_presenters' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/category-term-description.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/category-term-description.php new file mode 100644 index 00000000..a4a9038f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/category-term-description.php @@ -0,0 +1,51 @@ +redirect = $redirect; + $this->robots = $robots; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + if ( $this->clean_reply_to_com() ) { + \add_filter( 'comment_reply_link', [ $this, 'remove_reply_to_com' ] ); + \add_action( 'template_redirect', [ $this, 'replytocom_redirect' ], 1 ); + } + + // When users view a reply to a comment, this URL parameter is set. These should never be indexed separately. + if ( $this->get_replytocom_parameter() !== null ) { + \add_filter( 'wpseo_robots_array', [ $this->robots, 'set_robots_no_index' ] ); + } + } + + /** + * Checks if the url contains the ?replytocom query parameter. + * + * @codeCoverageIgnore Wraps the filter input. + * + * @return string|null The value of replytocom or null if it does not exist. + */ + protected function get_replytocom_parameter() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['replytocom'] ) && \is_string( $_GET['replytocom'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + return \sanitize_text_field( \wp_unslash( $_GET['replytocom'] ) ); + } + return null; + } + + /** + * Removes the ?replytocom variable from the link, replacing it with a #comment- anchor. + * + * @todo Should this function also allow for relative urls ? + * + * @param string $link The comment link as a string. + * + * @return string The modified link. + */ + public function remove_reply_to_com( $link ) { + return \preg_replace( '`href=(["\'])(?:.*(?:\?|&|&)replytocom=(\d+)#respond)`', 'href=$1#comment-$2', $link ); + } + + /** + * Redirects out the ?replytocom variables. + * + * @return bool True when redirect has been done. + */ + public function replytocom_redirect() { + if ( isset( $_GET['replytocom'] ) && \is_singular() ) { + $url = \get_permalink( $GLOBALS['post']->ID ); + $hash = \sanitize_text_field( \wp_unslash( $_GET['replytocom'] ) ); + $query_string = ''; + if ( isset( $_SERVER['QUERY_STRING'] ) ) { + $query_string = \remove_query_arg( 'replytocom', \sanitize_text_field( \wp_unslash( $_SERVER['QUERY_STRING'] ) ) ); + } + if ( ! empty( $query_string ) ) { + $url .= '?' . $query_string; + } + $url .= '#comment-' . $hash; + + $this->redirect->do_safe_redirect( $url, 301 ); + + return true; + } + + return false; + } + + /** + * Checks whether we can allow the feature that removes ?replytocom query parameters. + * + * @codeCoverageIgnore It just wraps a call to a filter. + * + * @return bool True to remove, false not to remove. + */ + private function clean_reply_to_com() { + /** + * Filter: 'wpseo_remove_reply_to_com' - Allow disabling the feature that removes ?replytocom query parameters. + * + * @param bool $return True to remove, false not to remove. + */ + return (bool) \apply_filters( 'wpseo_remove_reply_to_com', true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-basic.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-basic.php new file mode 100644 index 00000000..c92c0bbd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-basic.php @@ -0,0 +1,138 @@ +options_helper = $options_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Remove HTTP headers we don't want. + \add_action( 'wp', [ $this, 'clean_headers' ], 0 ); + + if ( $this->is_true( 'remove_shortlinks' ) ) { + // Remove shortlinks. + \remove_action( 'wp_head', 'wp_shortlink_wp_head' ); + \remove_action( 'template_redirect', 'wp_shortlink_header', 11 ); + } + + if ( $this->is_true( 'remove_rest_api_links' ) ) { + // Remove REST API links. + \remove_action( 'wp_head', 'rest_output_link_wp_head' ); + \remove_action( 'template_redirect', 'rest_output_link_header', 11 ); + } + + if ( $this->is_true( 'remove_rsd_wlw_links' ) ) { + // Remove RSD and WLW Manifest links. + \remove_action( 'wp_head', 'rsd_link' ); + \remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' ); + \remove_action( 'wp_head', 'wlwmanifest_link' ); + } + + if ( $this->is_true( 'remove_oembed_links' ) ) { + // Remove JSON+XML oEmbed links. + \remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); + } + + if ( $this->is_true( 'remove_generator' ) ) { + \remove_action( 'wp_head', 'wp_generator' ); + } + + if ( $this->is_true( 'remove_emoji_scripts' ) ) { + // Remove emoji scripts and additional stuff they cause. + \remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); + \remove_action( 'wp_print_styles', 'print_emoji_styles' ); + \remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + \remove_action( 'admin_print_styles', 'print_emoji_styles' ); + \add_filter( 'wp_resource_hints', [ $this, 'resource_hints_plain_cleanup' ], 1 ); + } + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Removes X-Pingback and X-Powered-By headers as they're unneeded. + * + * @return void + */ + public function clean_headers() { + if ( \headers_sent() ) { + return; + } + + if ( $this->is_true( 'remove_powered_by_header' ) ) { + \header_remove( 'X-Powered-By' ); + } + if ( $this->is_true( 'remove_pingback_header' ) ) { + \header_remove( 'X-Pingback' ); + } + } + + /** + * Remove the core s.w.org hint as it's only used for emoji stuff we don't use. + * + * @param array $hints The hints we're adding to. + * + * @return array + */ + public function resource_hints_plain_cleanup( $hints ) { + foreach ( $hints as $key => $hint ) { + if ( \is_array( $hint ) && isset( $hint['href'] ) ) { + if ( \strpos( $hint['href'], '//s.w.org' ) !== false ) { + unset( $hints[ $key ] ); + } + } + elseif ( \strpos( $hint, '//s.w.org' ) !== false ) { + unset( $hints[ $key ] ); + } + } + + return $hints; + } + + /** + * Checks if the value of an option is set to true. + * + * @param string $option_name The option name. + * + * @return bool + */ + private function is_true( $option_name ) { + return $this->options_helper->get( $option_name ) === true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-rss.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-rss.php new file mode 100644 index 00000000..6f26706c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-rss.php @@ -0,0 +1,212 @@ +options_helper = $options_helper; + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Register our RSS related hooks. + * + * @return void + */ + public function register_hooks() { + if ( $this->is_true( 'remove_feed_global' ) ) { + \add_filter( 'feed_links_show_posts_feed', '__return_false' ); + } + + if ( $this->is_true( 'remove_feed_global_comments' ) ) { + \add_filter( 'feed_links_show_comments_feed', '__return_false' ); + } + + \add_action( 'wp', [ $this, 'maybe_disable_feeds' ] ); + \add_action( 'wp', [ $this, 'maybe_redirect_feeds' ], -10000 ); + } + + /** + * Disable feeds on selected cases. + * + * @return void + */ + public function maybe_disable_feeds() { + if ( $this->is_true( 'remove_feed_post_comments' ) ) { + \add_filter( 'feed_links_extra_show_post_comments_feed', '__return_false' ); + } + if ( $this->is_true( 'remove_feed_authors' ) ) { + \add_filter( 'feed_links_extra_show_author_feed', '__return_false' ); + } + if ( $this->is_true( 'remove_feed_categories' ) ) { + \add_filter( 'feed_links_extra_show_category_feed', '__return_false' ); + } + if ( $this->is_true( 'remove_feed_tags' ) ) { + \add_filter( 'feed_links_extra_show_tag_feed', '__return_false' ); + } + if ( $this->is_true( 'remove_feed_custom_taxonomies' ) ) { + \add_filter( 'feed_links_extra_show_tax_feed', '__return_false' ); + } + if ( $this->is_true( 'remove_feed_post_types' ) ) { + \add_filter( 'feed_links_extra_show_post_type_archive_feed', '__return_false' ); + } + if ( $this->is_true( 'remove_feed_search' ) ) { + \add_filter( 'feed_links_extra_show_search_feed', '__return_false' ); + } + } + + /** + * Redirect feeds we don't want away. + * + * @return void + */ + public function maybe_redirect_feeds() { + global $wp_query; + + if ( ! \is_feed() ) { + return; + } + + if ( \in_array( \get_query_var( 'feed' ), [ 'atom', 'rdf' ], true ) && $this->is_true( 'remove_atom_rdf_feeds' ) ) { + $this->redirect_feed( \home_url(), 'We disable Atom/RDF feeds for performance reasons.' ); + } + + // Only if we're on the global feed, the query is _just_ `'feed' => 'feed'`, hence this check. + if ( ( $wp_query->query === [ 'feed' => 'feed' ] + || $wp_query->query === [ 'feed' => 'atom' ] + || $wp_query->query === [ 'feed' => 'rdf' ] ) + && $this->is_true( 'remove_feed_global' ) ) { + $this->redirect_feed( \home_url(), 'We disable the RSS feed for performance reasons.' ); + } + + if ( \is_comment_feed() && ! ( \is_singular() || \is_attachment() ) && $this->is_true( 'remove_feed_global_comments' ) ) { + $this->redirect_feed( \home_url(), 'We disable comment feeds for performance reasons.' ); + } + elseif ( \is_comment_feed() + && \is_singular() + && ( $this->is_true( 'remove_feed_post_comments' ) || $this->is_true( 'remove_feed_global_comments' ) ) ) { + $url = \get_permalink( \get_queried_object() ); + $this->redirect_feed( $url, 'We disable post comment feeds for performance reasons.' ); + } + + if ( \is_author() && $this->is_true( 'remove_feed_authors' ) ) { + $author_id = (int) \get_query_var( 'author' ); + $url = \get_author_posts_url( $author_id ); + $this->redirect_feed( $url, 'We disable author feeds for performance reasons.' ); + } + + if ( ( \is_category() && $this->is_true( 'remove_feed_categories' ) ) + || ( \is_tag() && $this->is_true( 'remove_feed_tags' ) ) + || ( \is_tax() && $this->is_true( 'remove_feed_custom_taxonomies' ) ) ) { + $term = \get_queried_object(); + $url = \get_term_link( $term, $term->taxonomy ); + if ( \is_wp_error( $url ) ) { + $url = \home_url(); + } + $this->redirect_feed( $url, 'We disable taxonomy feeds for performance reasons.' ); + } + + if ( ( \is_post_type_archive() ) && $this->is_true( 'remove_feed_post_types' ) ) { + $url = \get_post_type_archive_link( $this->get_queried_post_type() ); + $this->redirect_feed( $url, 'We disable post type feeds for performance reasons.' ); + } + + if ( \is_search() && $this->is_true( 'remove_feed_search' ) ) { + $url = \trailingslashit( \home_url() ) . '?s=' . \get_search_query(); + $this->redirect_feed( $url, 'We disable search RSS feeds for performance reasons.' ); + } + } + + /** + * Sends a cache control header. + * + * @param int $expiration The expiration time. + * + * @return void + */ + public function cache_control_header( $expiration ) { + \header_remove( 'Expires' ); + + // The cacheability of the current request. 'public' allows caching, 'private' would not allow caching by proxies like CloudFlare. + $cacheability = 'public'; + $format = '%1$s, max-age=%2$d, s-maxage=%2$d, stale-while-revalidate=120, stale-if-error=14400'; + + if ( \is_user_logged_in() ) { + $expiration = 0; + $cacheability = 'private'; + $format = '%1$s, max-age=%2$d'; + } + + \header( \sprintf( 'Cache-Control: ' . $format, $cacheability, $expiration ), true ); + } + + /** + * Redirect a feed result to somewhere else. + * + * @param string $url The location we're redirecting to. + * @param string $reason The reason we're redirecting. + * + * @return void + */ + private function redirect_feed( $url, $reason ) { + \header_remove( 'Content-Type' ); + \header_remove( 'Last-Modified' ); + + $this->cache_control_header( 7 * \DAY_IN_SECONDS ); + + \wp_safe_redirect( $url, 301, 'Yoast SEO: ' . $reason ); + exit; + } + + /** + * Retrieves the queried post type. + * + * @return string The queried post type. + */ + private function get_queried_post_type() { + $post_type = \get_query_var( 'post_type' ); + if ( \is_array( $post_type ) ) { + $post_type = \reset( $post_type ); + } + return $post_type; + } + + /** + * Checks if the value of an option is set to true. + * + * @param string $option_name The option name. + * + * @return bool + */ + private function is_true( $option_name ) { + return $this->options_helper->get( $option_name ) === true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-searches.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-searches.php new file mode 100644 index 00000000..48acf627 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/crawl-cleanup-searches.php @@ -0,0 +1,206 @@ +options_helper = $options_helper; + $this->redirect_helper = $redirect_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + if ( $this->options_helper->get( 'search_cleanup' ) ) { + \add_filter( 'pre_get_posts', [ $this, 'validate_search' ] ); + } + if ( $this->options_helper->get( 'redirect_search_pretty_urls' ) && ! empty( \get_option( 'permalink_structure' ) ) ) { + \add_action( 'template_redirect', [ $this, 'maybe_redirect_searches' ], 2 ); + } + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array The array of conditionals. + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Check if we want to allow this search to happen. + * + * @param WP_Query $query The main query. + * + * @return WP_Query + */ + public function validate_search( WP_Query $query ) { + if ( ! $query->is_search() ) { + return $query; + } + // First check against emoji and patterns we might not want. + $this->check_unwanted_patterns( $query ); + + // Then limit characters if still needed. + $this->limit_characters(); + + return $query; + } + + /** + * Redirect pretty search URLs to the "raw" equivalent + * + * @return void + */ + public function maybe_redirect_searches() { + if ( ! \is_search() ) { + return; + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput + if ( isset( $_SERVER['REQUEST_URI'] ) && \stripos( $_SERVER['REQUEST_URI'], '/search/' ) === 0 ) { + $args = []; + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput + $parsed = \wp_parse_url( $_SERVER['REQUEST_URI'] ); + + if ( ! empty( $parsed['query'] ) ) { + \wp_parse_str( $parsed['query'], $args ); + } + + $args['s'] = \get_search_query(); + + $proper_url = \home_url( '/' ); + + if ( \intval( \get_query_var( 'paged' ) ) > 1 ) { + $proper_url .= \sprintf( 'page/%s/', \get_query_var( 'paged' ) ); + unset( $args['paged'] ); + } + + $proper_url = \add_query_arg( \array_map( 'rawurlencode_deep', $args ), $proper_url ); + + if ( ! empty( $parsed['fragment'] ) ) { + $proper_url .= '#' . \rawurlencode( $parsed['fragment'] ); + } + + $this->redirect_away( 'We redirect pretty URLs to the raw format.', $proper_url ); + } + } + + /** + * Check query against unwanted search patterns. + * + * @param WP_Query $query The main WordPress query. + * + * @return void + */ + private function check_unwanted_patterns( WP_Query $query ) { + $s = \rawurldecode( $query->query_vars['s'] ); + if ( $this->options_helper->get( 'search_cleanup_emoji' ) && $this->has_emoji( $s ) ) { + $this->redirect_away( 'We don\'t allow searches with emojis and other special characters.' ); + } + + if ( ! $this->options_helper->get( 'search_cleanup_patterns' ) ) { + return; + } + foreach ( $this->patterns as $pattern ) { + $outcome = \preg_match( $pattern, $s, $matches ); + if ( $outcome && $matches !== [] ) { + $this->redirect_away( 'Your search matched a common spam pattern.' ); + } + } + } + + /** + * Redirect to the homepage for invalid searches. + * + * @param string $reason The reason for redirecting away. + * @param string $to_url The URL to redirect to. + * + * @return void + */ + private function redirect_away( $reason, $to_url = '' ) { + if ( empty( $to_url ) ) { + $to_url = \get_home_url(); + } + + $this->redirect_helper->do_safe_redirect( $to_url, 301, 'Yoast Search Filtering: ' . $reason ); + } + + /** + * Limits the number of characters in the search query. + * + * @return void + */ + private function limit_characters() { + // We retrieve the search term unescaped because we want to count the characters properly. We make sure to escape it afterwards, if we do something with it. + $unescaped_s = \get_search_query( false ); + + // We then unslash the search term, again because we want to count the characters properly. We make sure to slash it afterwards, if we do something with it. + $raw_s = \wp_unslash( $unescaped_s ); + if ( \mb_strlen( $raw_s, 'UTF-8' ) > $this->options_helper->get( 'search_character_limit' ) ) { + $new_s = \mb_substr( $raw_s, 0, $this->options_helper->get( 'search_character_limit' ), 'UTF-8' ); + \set_query_var( 's', \wp_slash( \esc_attr( $new_s ) ) ); + } + } + + /** + * Determines if a text string contains an emoji or not. + * + * @param string $text The text string to detect emoji in. + * + * @return bool + */ + private function has_emoji( $text ) { + $emojis_regex = '/([^-\p{L}\x00-\x7F]+)/u'; + \preg_match( $emojis_regex, $text, $matches ); + + return ! empty( $matches ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/feed-improvements.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/feed-improvements.php new file mode 100644 index 00000000..142f45d0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/feed-improvements.php @@ -0,0 +1,185 @@ +options = $options; + $this->meta = $meta; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Registers hooks to WordPress. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'get_bloginfo_rss', [ $this, 'filter_bloginfo_rss' ], 10, 2 ); + \add_filter( 'document_title_separator', [ $this, 'filter_document_title_separator' ] ); + + \add_action( 'do_feed_rss', [ $this, 'handle_rss_feed' ], 9 ); + \add_action( 'do_feed_rss2', [ $this, 'send_canonical_header' ], 9 ); + \add_action( 'do_feed_rss2', [ $this, 'add_robots_headers' ], 9 ); + } + + /** + * Filter `bloginfo_rss` output to give the URL for what's being shown instead of just always the homepage. + * + * @param string $show The output so far. + * @param string $what What is being shown. + * + * @return string + */ + public function filter_bloginfo_rss( $show, $what ) { + if ( $what === 'url' ) { + return $this->get_url_for_queried_object( $show ); + } + + return $show; + } + + /** + * Makes sure send canonical header always runs, because this RSS hook does not support the for_comments parameter + * + * @return void + */ + public function handle_rss_feed() { + $this->send_canonical_header( false ); + } + + /** + * Adds a canonical link header to the main canonical URL for the requested feed object. If it is not a comment + * feed. + * + * @param bool $for_comments If the RRS feed is meant for a comment feed. + * + * @return void + */ + public function send_canonical_header( $for_comments ) { + + if ( $for_comments || \headers_sent() ) { + return; + } + + $queried_object = \get_queried_object(); + // Don't call get_class with null. This gives a warning. + $class = ( $queried_object !== null ) ? \get_class( $queried_object ) : null; + + $url = $this->get_url_for_queried_object( $this->meta->for_home_page()->canonical ); + if ( ( ! empty( $url ) && $url !== $this->meta->for_home_page()->canonical ) || $class === null ) { + \header( \sprintf( 'Link: <%s>; rel="canonical"', $url ), false ); + } + } + + /** + * Adds noindex, follow tag for comment feeds. + * + * @param bool $for_comments If the RSS feed is meant for a comment feed. + * + * @return void + */ + public function add_robots_headers( $for_comments ) { + if ( $for_comments && ! \headers_sent() ) { + \header( 'X-Robots-Tag: noindex, follow', true ); + } + } + + /** + * Makes sure the title separator set in Yoast SEO is used for all feeds. + * + * @param string $separator The separator from WordPress. + * + * @return string The separator from Yoast SEO's settings. + */ + public function filter_document_title_separator( $separator ) { + return \html_entity_decode( $this->options->get_title_separator() ); + } + + /** + * Determines the main URL for the queried object. + * + * @param string $url The URL determined so far. + * + * @return string The canonical URL for the queried object. + */ + protected function get_url_for_queried_object( $url = '' ) { + $queried_object = \get_queried_object(); + // Don't call get_class with null. This gives a warning. + $class = ( $queried_object !== null ) ? \get_class( $queried_object ) : null; + $meta = false; + + switch ( $class ) { + // Post type archive feeds. + case 'WP_Post_Type': + $meta = $this->meta->for_post_type_archive( $queried_object->name ); + break; + // Post comment feeds. + case 'WP_Post': + $meta = $this->meta->for_post( $queried_object->ID ); + break; + // Term feeds. + case 'WP_Term': + $meta = $this->meta->for_term( $queried_object->term_id ); + break; + // Author feeds. + case 'WP_User': + $meta = $this->meta->for_author( $queried_object->ID ); + break; + // This would be NULL on the home page and on date archive feeds. + case null: + $meta = $this->meta->for_home_page(); + break; + default: + break; + } + + if ( $meta ) { + return $meta->canonical; + } + + return $url; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/force-rewrite-title.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/force-rewrite-title.php new file mode 100644 index 00000000..f7c259b8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/force-rewrite-title.php @@ -0,0 +1,181 @@ +options = $options; + $this->wp_query = $wp_query; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + // When the option is disabled. + if ( ! $this->options->get( 'forcerewritetitle', false ) ) { + return; + } + + // For WordPress versions below 4.4. + if ( \current_theme_supports( 'title-tag' ) ) { + return; + } + + \add_action( 'template_redirect', [ $this, 'force_rewrite_output_buffer' ], 99999 ); + \add_action( 'wp_footer', [ $this, 'flush_cache' ], -1 ); + } + + /** + * Used in the force rewrite functionality this retrieves the output, replaces the title with the proper SEO + * title and then flushes the output. + * + * @return bool + */ + public function flush_cache() { + if ( $this->ob_started !== true ) { + return false; + } + + $content = $this->get_buffered_output(); + + $old_wp_query = $this->wp_query->get_query(); + + \wp_reset_query(); + + // When the file has the debug mark. + if ( \preg_match( '/(?\'before\'.*)(?\'after\'.*)/is', $content, $matches ) ) { + $content = $this->replace_titles_from_content( $content, $matches ); + + unset( $matches ); + } + + // phpcs:ignore WordPress.WP.GlobalVariablesOverride -- The query gets reset here with the original query. + $GLOBALS['wp_query'] = $old_wp_query; + + // phpcs:ignore WordPress.Security.EscapeOutput -- The output should already have been escaped, we are only filtering it. + echo $content; + + return true; + } + + /** + * Starts the output buffer so it can later be fixed by flush_cache(). + * + * @return void + */ + public function force_rewrite_output_buffer() { + $this->ob_started = true; + $this->start_output_buffering(); + } + + /** + * Replaces the titles from the parts that contains a title. + * + * @param string $content The content to remove the titles from. + * @param array $parts_with_title The parts containing a title. + * + * @return string The modified content. + */ + protected function replace_titles_from_content( $content, $parts_with_title ) { + if ( isset( $parts_with_title['before'] ) && \is_string( $parts_with_title['before'] ) ) { + $content = $this->replace_title( $parts_with_title['before'], $content ); + } + + if ( isset( $parts_with_title['after'] ) ) { + $content = $this->replace_title( $parts_with_title['after'], $content ); + } + + return $content; + } + + /** + * Removes the title from the part that contains the title and put this modified part back + * into the content. + * + * @param string $part_with_title The part with the title that needs to be replaced. + * @param string $content The entire content. + * + * @return string The altered content. + */ + protected function replace_title( $part_with_title, $content ) { + $part_without_title = \preg_replace( '//i', '', $part_with_title ); + + return \str_replace( $part_with_title, $part_without_title, $content ); + } + + /** + * Starts the output buffering. + * + * @codeCoverageIgnore + * + * @return void + */ + protected function start_output_buffering() { + \ob_start(); + } + + /** + * Retrieves the buffered output. + * + * @codeCoverageIgnore + * + * @return false|string The buffered output. + */ + protected function get_buffered_output() { + return \ob_get_clean(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/handle-404.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/handle-404.php new file mode 100644 index 00000000..a855a5ec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/handle-404.php @@ -0,0 +1,126 @@ +query_wrapper = $query_wrapper; + } + + /** + * Handles the 404 status code. + * + * @param bool $handled Whether we've handled the request. + * + * @return bool True if it's 404. + */ + public function handle_404( $handled ) { + if ( ! $this->is_feed_404() ) { + return $handled; + } + + $this->set_404(); + $this->set_headers(); + + \add_filter( 'old_slug_redirect_url', '__return_false' ); + \add_filter( 'redirect_canonical', '__return_false' ); + + return true; + } + + /** + * If there are no posts in a feed, make it 404 instead of sending an empty RSS feed. + * + * @return bool True if it's 404. + */ + protected function is_feed_404() { + if ( ! \is_feed() ) { + return false; + } + + $wp_query = $this->query_wrapper->get_query(); + + // Don't 404 if the query contains post(s) or an object. + if ( $wp_query->posts || $wp_query->get_queried_object() ) { + return false; + } + + // Don't 404 if it isn't archive or singular. + if ( ! $wp_query->is_archive() && ! $wp_query->is_singular() ) { + return false; + } + + return true; + } + + /** + * Sets the 404 status code. + * + * @return void + */ + protected function set_404() { + $wp_query = $this->query_wrapper->get_query(); + $wp_query->is_feed = false; + $wp_query->set_404(); + $this->query_wrapper->set_query( $wp_query ); + } + + /** + * Sets the headers for http. + * + * @codeCoverageIgnore + * + * @return void + */ + protected function set_headers() { + // Overwrite Content-Type header. + if ( ! \headers_sent() ) { + \header( 'Content-Type: ' . \get_option( 'html_type' ) . '; charset=' . \get_option( 'blog_charset' ) ); + } + + \status_header( 404 ); + \nocache_headers(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/indexing-controls.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/indexing-controls.php new file mode 100644 index 00000000..a60b15ec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/indexing-controls.php @@ -0,0 +1,109 @@ +robots = $robots; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + // The option `blog_public` is set in Settings > Reading > Search Engine Visibility. + if ( (string) \get_option( 'blog_public' ) === '0' ) { + \add_filter( 'wpseo_robots_array', [ $this->robots, 'set_robots_no_index' ] ); + } + + \add_action( 'template_redirect', [ $this, 'noindex_robots' ] ); + \add_filter( 'loginout', [ $this, 'nofollow_link' ] ); + \add_filter( 'register', [ $this, 'nofollow_link' ] ); + + // Remove actions that we will handle through our wpseo_head call, and probably change the output of. + \remove_action( 'wp_head', 'rel_canonical' ); + \remove_action( 'wp_head', 'index_rel_link' ); + \remove_action( 'wp_head', 'start_post_rel_link' ); + \remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); + \remove_action( 'wp_head', 'noindex', 1 ); + } + + /** + * Sends a Robots HTTP header preventing URL from being indexed in the search results while allowing search engines + * to follow the links in the object at the URL. + * + * @return bool Boolean indicating whether the noindex header was sent. + */ + public function noindex_robots() { + if ( ! \is_robots() ) { + return false; + } + + return $this->set_robots_header(); + } + + /** + * Adds rel="nofollow" to a link, only used for login / registration links. + * + * @param string $input The link element as a string. + * + * @return string + */ + public function nofollow_link( $input ) { + return \str_replace( 'meta = $meta; + } + + /** + * Callback function to pass to the oEmbed's response data that will enable + * support for using the image and title set by the WordPress SEO plugin's fields. This + * address the concern where some social channels/subscribed use oEmebed data over Open Graph data + * if both are present. + * + * @link https://developer.wordpress.org/reference/hooks/oembed_response_data/ for hook info. + * + * @param array $data The oEmbed data. + * @param WP_Post $post The current Post object. + * + * @return array An array of oEmbed data with modified values where appropriate. + */ + public function set_oembed_data( $data, $post ) { + // Data to be returned. + $this->data = $data; + $this->post_id = $post->ID; + $this->post_meta = $this->meta->for_post( $this->post_id ); + + if ( ! empty( $this->post_meta ) ) { + $this->set_title(); + $this->set_description(); + $this->set_image(); + } + + return $this->data; + } + + /** + * Sets the OpenGraph title if configured. + * + * @return void + */ + protected function set_title() { + $opengraph_title = $this->post_meta->open_graph_title; + + if ( ! empty( $opengraph_title ) ) { + $this->data['title'] = $opengraph_title; + } + } + + /** + * Sets the OpenGraph description if configured. + * + * @return void + */ + protected function set_description() { + $opengraph_description = $this->post_meta->open_graph_description; + + if ( ! empty( $opengraph_description ) ) { + $this->data['description'] = $opengraph_description; + } + } + + /** + * Sets the image if it has been configured. + * + * @return void + */ + protected function set_image() { + $images = $this->post_meta->open_graph_images; + + if ( ! \is_array( $images ) ) { + return; + } + + $image = \reset( $images ); + + if ( empty( $image ) || ! isset( $image['url'] ) ) { + return; + } + + $this->data['thumbnail_url'] = $image['url']; + + if ( isset( $image['width'] ) ) { + $this->data['thumbnail_width'] = $image['width']; + } + + if ( isset( $image['height'] ) ) { + $this->data['thumbnail_height'] = $image['height']; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/redirects.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/redirects.php new file mode 100644 index 00000000..9f61e54b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/redirects.php @@ -0,0 +1,277 @@ +options = $options; + $this->meta = $meta; + $this->current_page = $current_page; + $this->redirect = $redirect; + $this->url = $url; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Front_End_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wp', [ $this, 'archive_redirect' ] ); + \add_action( 'wp', [ $this, 'page_redirect' ], 99 ); + \add_action( 'wp', [ $this, 'category_redirect' ] ); + \add_action( 'template_redirect', [ $this, 'attachment_redirect' ], 1 ); + \add_action( 'template_redirect', [ $this, 'disable_date_queries' ] ); + } + + /** + * Disable date queries, if they're disabled in Yoast SEO settings, to prevent indexing the wrong things. + * + * @return void + */ + public function disable_date_queries() { + if ( $this->options->get( 'disable-date', false ) ) { + $exploded_url = \explode( '?', $this->url->recreate_current_url(), 2 ); + list( $base_url, $query_string ) = \array_pad( $exploded_url, 2, '' ); + \parse_str( $query_string, $query_vars ); + foreach ( $this->date_query_variables as $variable ) { + if ( \in_array( $variable, \array_keys( $query_vars ), true ) ) { + $this->do_date_redirect( $query_vars, $base_url ); + } + } + } + } + + /** + * When certain archives are disabled, this redirects those to the homepage. + * + * @return void + */ + public function archive_redirect() { + if ( $this->need_archive_redirect() ) { + $this->redirect->do_safe_redirect( \get_bloginfo( 'url' ), 301 ); + } + } + + /** + * Based on the redirect meta value, this function determines whether it should redirect the current post / page. + * + * @return void + */ + public function page_redirect() { + if ( ! $this->current_page->is_simple_page() ) { + return; + } + + $post = \get_post(); + if ( ! \is_object( $post ) ) { + return; + } + + $redirect = $this->meta->get_value( 'redirect', $post->ID ); + if ( $redirect === '' ) { + return; + } + + $this->redirect->do_safe_redirect( $redirect, 301 ); + } + + /** + * If the option to disable attachment URLs is checked, this performs the redirect to the attachment. + * + * @return void + */ + public function attachment_redirect() { + if ( ! $this->current_page->is_attachment() ) { + return; + } + + if ( $this->options->get( 'disable-attachment', false ) === false ) { + return; + } + + $url = $this->get_attachment_url(); + if ( empty( $url ) ) { + return; + } + + $this->redirect->do_unsafe_redirect( $url, 301 ); + } + + /** + * Checks if certain archive pages are disabled to determine if a archive redirect is needed. + * + * @codeCoverageIgnore + * + * @return bool Whether or not to redirect an archive page. + */ + protected function need_archive_redirect() { + if ( $this->options->get( 'disable-date', false ) && $this->current_page->is_date_archive() ) { + return true; + } + + if ( $this->options->get( 'disable-author', false ) && $this->current_page->is_author_archive() ) { + return true; + } + + if ( $this->options->get( 'disable-post_format', false ) && $this->current_page->is_post_format_archive() ) { + return true; + } + + return false; + } + + /** + * Retrieves the attachment url for the current page. + * + * @codeCoverageIgnore It wraps WordPress functions. + * + * @return string The attachment url. + */ + protected function get_attachment_url() { + /** + * Allows the developer to change the target redirection URL for attachments. + * + * @since 7.5.3 + * + * @param string $attachment_url The attachment URL for the queried object. + * @param object $queried_object The queried object. + */ + return \apply_filters( + 'wpseo_attachment_redirect_url', + \wp_get_attachment_url( \get_queried_object_id() ), + \get_queried_object() + ); + } + + /** + * Redirects away query variables that shouldn't work. + * + * @param array $query_vars The query variables in the current URL. + * @param string $base_url The base URL without query string. + * + * @return void + */ + private function do_date_redirect( $query_vars, $base_url ) { + foreach ( $this->date_query_variables as $variable ) { + unset( $query_vars[ $variable ] ); + } + $url = $base_url; + if ( \count( $query_vars ) > 0 ) { + $url .= '?' . \http_build_query( $query_vars ); + } + + $this->redirect->do_safe_redirect( $url, 301 ); + } + + /** + * Strips `cat=-1` from the URL and redirects to the resulting URL. + * + * @return void + */ + public function category_redirect() { + /** + * Allows the developer to keep cat=-1 GET parameters + * + * @since 19.9 + * + * @param bool $remove_cat_parameter Whether to remove the `cat=-1` GET parameter. Default true. + */ + $should_remove_parameter = \apply_filters( 'wpseo_remove_cat_parameter', true ); + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Data is not processed or saved. + if ( $should_remove_parameter && isset( $_GET['cat'] ) && $_GET['cat'] === '-1' ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Data is not processed or saved. + unset( $_GET['cat'] ); + if ( isset( $_SERVER['REQUEST_URI'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- This is just a replace and the data is never saved. + $_SERVER['REQUEST_URI'] = \remove_query_arg( 'cat' ); + } + $this->redirect->do_safe_redirect( $this->url->recreate_current_url(), 301, 'Stripping cat=-1 from the URL' ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/robots-txt-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/robots-txt-integration.php new file mode 100644 index 00000000..adbda352 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/robots-txt-integration.php @@ -0,0 +1,292 @@ +options_helper = $options_helper; + $this->robots_txt_helper = $robots_txt_helper; + $this->robots_txt_presenter = $robots_txt_presenter; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Robots_Txt_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'robots_txt', [ $this, 'filter_robots' ], 99999 ); + + if ( $this->options_helper->get( 'deny_search_crawling' ) && ! \is_multisite() ) { + \add_action( 'Yoast\WP\SEO\register_robots_rules', [ $this, 'add_disallow_search_to_robots' ], 10, 1 ); + } + if ( $this->options_helper->get( 'deny_wp_json_crawling' ) && ! \is_multisite() ) { + \add_action( 'Yoast\WP\SEO\register_robots_rules', [ $this, 'add_disallow_wp_json_to_robots' ], 10, 1 ); + } + if ( $this->options_helper->get( 'deny_adsbot_crawling' ) && ! \is_multisite() ) { + \add_action( 'Yoast\WP\SEO\register_robots_rules', [ $this, 'add_disallow_adsbot' ], 10, 1 ); + } + } + + /** + * Filters the robots.txt output. + * + * @param string $robots_txt The robots.txt output from WordPress. + * + * @return string Filtered robots.txt output. + */ + public function filter_robots( $robots_txt ) { + $robots_txt = $this->remove_default_robots( $robots_txt ); + $this->maybe_add_xml_sitemap(); + + /** + * Filter: 'wpseo_should_add_subdirectory_multisite_xml_sitemaps' - Disabling this filter removes subdirectory sites from xml sitemaps. + * + * @since 19.8 + * + * @param bool $show Whether to display multisites in the xml sitemaps. + */ + if ( \apply_filters( 'wpseo_should_add_subdirectory_multisite_xml_sitemaps', true ) ) { + $this->add_subdirectory_multisite_xml_sitemaps(); + } + + /** + * Allow registering custom robots rules to be outputted within the Yoast content block in robots.txt. + * + * @param Robots_Txt_Helper $robots_txt_helper The Robots_Txt_Helper object. + */ + \do_action( 'Yoast\WP\SEO\register_robots_rules', $this->robots_txt_helper ); + + return \trim( $robots_txt . \PHP_EOL . $this->robots_txt_presenter->present() . \PHP_EOL ); + } + + /** + * Add a disallow rule for search to robots.txt. + * + * @param Robots_Txt_Helper $robots_txt_helper The robots txt helper. + * + * @return void + */ + public function add_disallow_search_to_robots( Robots_Txt_Helper $robots_txt_helper ) { + $robots_txt_helper->add_disallow( '*', '/?s=' ); + $robots_txt_helper->add_disallow( '*', '/page/*/?s=' ); + $robots_txt_helper->add_disallow( '*', '/search/' ); + } + + /** + * Add a disallow rule for /wp-json/ to robots.txt. + * + * @param Robots_Txt_Helper $robots_txt_helper The robots txt helper. + * + * @return void + */ + public function add_disallow_wp_json_to_robots( Robots_Txt_Helper $robots_txt_helper ) { + $robots_txt_helper->add_disallow( '*', '/wp-json/' ); + $robots_txt_helper->add_disallow( '*', '/?rest_route=' ); + } + + /** + * Add a disallow rule for AdsBot agents to robots.txt. + * + * @param Robots_Txt_Helper $robots_txt_helper The robots txt helper. + * + * @return void + */ + public function add_disallow_adsbot( Robots_Txt_Helper $robots_txt_helper ) { + $robots_txt_helper->add_disallow( 'AdsBot', '/' ); + } + + /** + * Replaces the default WordPress robots.txt output. + * + * @param string $robots_txt Input robots.txt. + * + * @return string + */ + protected function remove_default_robots( $robots_txt ) { + return \preg_replace( + '`User-agent: \*[\r\n]+Disallow: /wp-admin/[\r\n]+Allow: /wp-admin/admin-ajax\.php[\r\n]+`', + '', + $robots_txt + ); + } + + /** + * Adds XML sitemap reference to robots.txt. + * + * @return void + */ + protected function maybe_add_xml_sitemap() { + // If the XML sitemap is disabled, bail. + if ( ! $this->options_helper->get( 'enable_xml_sitemap', false ) ) { + return; + } + $this->robots_txt_helper->add_sitemap( \esc_url( WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ) ) ); + } + + /** + * Adds subdomain multisite' XML sitemap references to robots.txt. + * + * @return void + */ + protected function add_subdirectory_multisite_xml_sitemaps() { + // If not on a multisite subdirectory, bail. + if ( ! \is_multisite() || \is_subdomain_install() ) { + return; + } + + $sitemaps_enabled = $this->get_xml_sitemaps_enabled(); + + foreach ( $sitemaps_enabled as $blog_id => $is_sitemap_enabled ) { + if ( ! $is_sitemap_enabled ) { + continue; + } + $this->robots_txt_helper->add_sitemap( \esc_url( \get_home_url( $blog_id, 'sitemap_index.xml' ) ) ); + } + } + + /** + * Retrieves whether the XML sitemaps are enabled, keyed by blog ID. + * + * @return array + */ + protected function get_xml_sitemaps_enabled() { + $is_allowed = $this->is_sitemap_allowed(); + $blog_ids = $this->get_blog_ids(); + $is_enabled = []; + foreach ( $blog_ids as $blog_id ) { + $is_enabled[ $blog_id ] = $is_allowed && $this->is_sitemap_enabled_for( $blog_id ); + } + + return $is_enabled; + } + + /** + * Retrieves whether the sitemap is allowed on a sub site. + * + * @return bool + */ + protected function is_sitemap_allowed() { + $options = \get_network_option( null, 'wpseo_ms' ); + if ( ! $options || ! isset( $options['allow_enable_xml_sitemap'] ) ) { + // Default is enabled. + return true; + } + + return (bool) $options['allow_enable_xml_sitemap']; + } + + /** + * Retrieves whether the sitemap is enabled on a site. + * + * @param int $blog_id The blog ID. + * + * @return bool + */ + protected function is_sitemap_enabled_for( $blog_id ) { + if ( ! $this->is_yoast_active_on( $blog_id ) ) { + return false; + } + + $options = \get_blog_option( $blog_id, 'wpseo' ); + if ( ! $options || ! isset( $options['enable_xml_sitemap'] ) ) { + // Default is enabled. + return true; + } + + return (bool) $options['enable_xml_sitemap']; + } + + /** + * Determines whether Yoast SEO is active. + * + * @param int $blog_id The blog ID. + * + * @return bool + */ + protected function is_yoast_active_on( $blog_id ) { + return \in_array( 'wordpress-seo/wp-seo.php', (array) \get_blog_option( $blog_id, 'active_plugins', [] ), true ) || $this->is_yoast_active_for_network(); + } + + /** + * Determines whether Yoast SEO is active for the entire network. + * + * @return bool + */ + protected function is_yoast_active_for_network() { + $plugins = \get_network_option( null, 'active_sitewide_plugins' ); + if ( isset( $plugins['wordpress-seo/wp-seo.php'] ) ) { + return true; + } + + return false; + } + + /** + * Retrieves the blog IDs of public, "active" sites on the network. + * + * @return array + */ + protected function get_blog_ids() { + $criteria = [ + 'archived' => 0, + 'deleted' => 0, + 'public' => 1, + 'spam' => 0, + 'fields' => 'ids', + 'network_id' => \get_current_network_id(), + ]; + + return \get_sites( $criteria ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/rss-footer-embed.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/rss-footer-embed.php new file mode 100644 index 00000000..d9921faa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/rss-footer-embed.php @@ -0,0 +1,196 @@ +options = $options; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'the_content_feed', [ $this, 'embed_rssfooter' ] ); + \add_filter( 'the_excerpt_rss', [ $this, 'embed_rssfooter_excerpt' ] ); + } + + /** + * Adds the RSS footer (or header) to the full RSS feed item. + * + * @param string $content Feed item content. + * + * @return string + */ + public function embed_rssfooter( $content ) { + if ( ! $this->include_rss_footer( 'full' ) ) { + return $content; + } + + return $this->embed_rss( $content ); + } + + /** + * Adds the RSS footer (or header) to the excerpt RSS feed item. + * + * @param string $content Feed item excerpt. + * + * @return string + */ + public function embed_rssfooter_excerpt( $content ) { + if ( ! $this->include_rss_footer( 'excerpt' ) ) { + return $content; + } + + return $this->embed_rss( \wpautop( $content ) ); + } + + /** + * Checks if the RSS footer should included. + * + * @param string $context The context of the RSS content. + * + * @return bool Whether or not the RSS footer should included. + */ + protected function include_rss_footer( $context ) { + if ( ! \is_feed() ) { + return false; + } + + /** + * Filter: 'wpseo_include_rss_footer' - Allow the RSS footer to be dynamically shown/hidden. + * + * @param bool $show_embed Indicates if the RSS footer should be shown or not. + * @param string $context The context of the RSS content - 'full' or 'excerpt'. + */ + if ( ! \apply_filters( 'wpseo_include_rss_footer', true, $context ) ) { + return false; + } + + return $this->is_configured(); + } + + /** + * Checks if the RSS feed fields are configured. + * + * @return bool True when one of the fields has a value. + */ + protected function is_configured() { + return ( $this->options->get( 'rssbefore', '' ) !== '' || $this->options->get( 'rssafter', '' ) ); + } + + /** + * Adds the RSS footer and/or header to an RSS feed item. + * + * @param string $content Feed item content. + * + * @return string The content to add. + */ + protected function embed_rss( $content ) { + $before = $this->rss_replace_vars( $this->options->get( 'rssbefore', '' ) ); + $after = $this->rss_replace_vars( $this->options->get( 'rssafter', '' ) ); + $content = $before . $content . $after; + + return $content; + } + + /** + * Replaces the possible RSS variables with their actual values. + * + * @param string $content The RSS content that should have the variables replaced. + * + * @return string + */ + protected function rss_replace_vars( $content ) { + if ( $content === '' ) { + return $content; + } + + $replace_vars = $this->get_replace_vars( $this->get_link_template(), \get_post() ); + + $content = \stripslashes( \trim( $content ) ); + $content = \str_ireplace( \array_keys( $replace_vars ), \array_values( $replace_vars ), $content ); + + return \wpautop( $content ); + } + + /** + * Retrieves the replacement variables. + * + * @codeCoverageIgnore It just contains too much WordPress functions. + * + * @param string $link_template The link template. + * @param mixed $post The post to use. + * + * @return array The replacement variables. + */ + protected function get_replace_vars( $link_template, $post ) { + $author_link = ''; + if ( \is_object( $post ) ) { + $author_link = \sprintf( $link_template, \esc_url( \get_author_posts_url( $post->post_author ) ), \esc_html( \get_the_author() ) ); + } + + return [ + '%%AUTHORLINK%%' => $author_link, + '%%POSTLINK%%' => \sprintf( $link_template, \esc_url( \get_permalink() ), \esc_html( \get_the_title() ) ), + '%%BLOGLINK%%' => \sprintf( $link_template, \esc_url( \get_bloginfo( 'url' ) ), \esc_html( \get_bloginfo( 'name' ) ) ), + '%%BLOGDESCLINK%%' => \sprintf( $link_template, \esc_url( \get_bloginfo( 'url' ) ), \esc_html( \get_bloginfo( 'name' ) ) . ' - ' . \esc_html( \get_bloginfo( 'description' ) ) ), + ]; + } + + /** + * Retrieves the link template. + * + * @return string The link template. + */ + protected function get_link_template() { + /** + * Filter: 'nofollow_rss_links' - Allow the developer to determine whether or not to follow the links in + * the bits Yoast SEO adds to the RSS feed, defaults to false. + * + * @since 1.4.20 + * + * @param bool $unsigned Whether or not to follow the links in RSS feed, defaults to true. + */ + if ( \apply_filters( 'nofollow_rss_links', false ) ) { + return '%2$s'; + } + + return '%2$s'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/schema-accessibility-feature.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/schema-accessibility-feature.php new file mode 100644 index 00000000..3d921651 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/schema-accessibility-feature.php @@ -0,0 +1,80 @@ +is_needed() ) { + return $piece; + } + } + + return $this->add_accessibility_feature( $piece, $context ); + } + + /** + * Adds the accessibility feature to a schema graph piece. + * + * @param array $piece The schema piece. + * @param Meta_Tags_Context $context The context. + * + * @return array The graph piece. + */ + public function add_accessibility_feature( $piece, $context ) { + if ( empty( $context->blocks['yoast-seo/table-of-contents'] ) ) { + return $piece; + } + + if ( isset( $piece['accessibilityFeature'] ) ) { + $piece['accessibilityFeature'][] = 'tableOfContents'; + } + else { + $piece['accessibilityFeature'] = [ + 'tableOfContents', + ]; + } + return $piece; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/wp-robots-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/wp-robots-integration.php new file mode 100644 index 00000000..657083a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/front-end/wp-robots-integration.php @@ -0,0 +1,203 @@ +context_memoizer = $context_memoizer; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + /** + * Allow control of the `wp_robots` filter by prioritizing our hook 10 less than max. + * Use the `wpseo_robots` filter to filter the Yoast robots output, instead of WordPress core. + */ + \add_filter( 'wp_robots', [ $this, 'add_robots' ], ( \PHP_INT_MAX - 10 ) ); + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ + Front_End_Conditional::class, + WP_Robots_Conditional::class, + ]; + } + + /** + * Adds our robots tag value to the WordPress robots tag output. + * + * @param array $robots The current robots data. + * + * @return array The robots data. + */ + public function add_robots( $robots ) { + if ( ! \is_array( $robots ) ) { + return $this->get_robots_value(); + } + + $merged_robots = \array_merge( $robots, $this->get_robots_value() ); + $filtered_robots = $this->enforce_robots_congruence( $merged_robots ); + $sorted_robots = $this->sort_robots( $filtered_robots ); + + // Filter all falsy-null robot values. + return \array_filter( $sorted_robots ); + } + + /** + * Retrieves the robots key-value pairs. + * + * @return array The robots key-value pairs. + */ + protected function get_robots_value() { + $context = $this->context_memoizer->for_current_page(); + + $robots_presenter = new Robots_Presenter(); + $robots_presenter->presentation = $context->presentation; + return $this->format_robots( $robots_presenter->get() ); + } + + /** + * Formats our robots fields, to match the pattern WordPress is using. + * + * Our format: `[ 'index' => 'noindex', 'max-image-preview' => 'max-image-preview:large', ... ]` + * WordPress format: `[ 'noindex' => true, 'max-image-preview' => 'large', ... ]` + * + * @param array $robots Our robots value. + * + * @return array The formatted robots. + */ + protected function format_robots( $robots ) { + foreach ( $robots as $key => $value ) { + // When the entry represents for example: max-image-preview:large. + $colon_position = \strpos( $value, ':' ); + if ( $colon_position !== false ) { + $robots[ $key ] = \substr( $value, ( $colon_position + 1 ) ); + + continue; + } + + // When index => noindex, we want a separate noindex as entry in array. + if ( \strpos( $value, 'no' ) === 0 ) { + $robots[ $key ] = false; + $robots[ $value ] = true; + + continue; + } + + // When the key is equal to the value, just make its value a boolean. + if ( $key === $value ) { + $robots[ $key ] = true; + } + } + + return $robots; + } + + /** + * Ensures all other possible robots values are congruent with nofollow and or noindex. + * + * WordPress might add some robot values again. + * When the page is set to noindex we want to filter out these values. + * + * @param array $robots The robots. + * + * @return array The filtered robots. + */ + protected function enforce_robots_congruence( $robots ) { + if ( ! empty( $robots['nofollow'] ) ) { + $robots['follow'] = null; + } + if ( ! empty( $robots['noarchive'] ) ) { + $robots['archive'] = null; + } + if ( ! empty( $robots['noimageindex'] ) ) { + $robots['imageindex'] = null; + + // `max-image-preview` should set be to `none` when `noimageindex` is present. + // Using `isset` rather than `! empty` here so that in the rare case of `max-image-preview` + // being equal to an empty string due to filtering, its value would still be set to `none`. + if ( isset( $robots['max-image-preview'] ) ) { + $robots['max-image-preview'] = 'none'; + } + } + if ( ! empty( $robots['nosnippet'] ) ) { + $robots['snippet'] = null; + } + if ( ! empty( $robots['noindex'] ) ) { + $robots['index'] = null; + $robots['imageindex'] = null; + $robots['noimageindex'] = null; + $robots['archive'] = null; + $robots['noarchive'] = null; + $robots['snippet'] = null; + $robots['nosnippet'] = null; + $robots['max-snippet'] = null; + $robots['max-image-preview'] = null; + $robots['max-video-preview'] = null; + } + + return $robots; + } + + /** + * Sorts the robots array. + * + * @param array $robots The robots array. + * + * @return array The sorted robots array. + */ + protected function sort_robots( $robots ) { + \uksort( + $robots, + static function ( $a, $b ) { + $order = [ + 'index' => 0, + 'noindex' => 1, + 'follow' => 2, + 'nofollow' => 3, + ]; + $ai = ( $order[ $a ] ?? 4 ); + $bi = ( $order[ $b ] ?? 4 ); + + return ( $ai - $bi ); + } + ); + + return $robots; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/integration-interface.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/integration-interface.php new file mode 100644 index 00000000..82145d4a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/integration-interface.php @@ -0,0 +1,22 @@ +get_primary_category( $post ); + if ( $primary_category !== false && $primary_category !== $category->cat_ID ) { + $category = \get_category( $primary_category ); + } + + return $category; + } + + /** + * Get the id of the primary category. + * + * @codeCoverageIgnore It justs wraps a dependency. + * + * @param WP_Post $post The post in question. + * + * @return int Primary category id. + */ + protected function get_primary_category( $post ) { + $primary_term = new WPSEO_Primary_Term( 'category', $post->ID ); + + return $primary_term->get_primary_term(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/settings-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/settings-integration.php new file mode 100644 index 00000000..d5114417 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/settings-integration.php @@ -0,0 +1,995 @@ + [ + 'myyoast-oauth', + 'semrush_tokens', + 'custom_taxonomy_slugs', + 'import_cursors', + 'workouts_data', + 'configuration_finished_steps', + 'importing_completed', + 'wincher_tokens', + 'least_readability_ignore_list', + 'least_seo_score_ignore_list', + 'most_linked_ignore_list', + 'least_linked_ignore_list', + 'indexables_page_reading_list', + 'show_new_content_type_notification', + 'new_post_types', + 'new_taxonomies', + ], + 'wpseo_titles' => [ + 'company_logo_meta', + 'person_logo_meta', + ], + ]; + + /** + * Holds the disabled on multisite settings, per option group. + * + * @var array + */ + public const DISABLED_ON_MULTISITE_SETTINGS = [ + 'wpseo' => [ + 'deny_search_crawling', + 'deny_wp_json_crawling', + 'deny_adsbot_crawling', + 'deny_ccbot_crawling', + 'deny_google_extended_crawling', + 'deny_gptbot_crawling', + ], + ]; + + /** + * Holds the WPSEO_Admin_Asset_Manager. + * + * @var WPSEO_Admin_Asset_Manager + */ + protected $asset_manager; + + /** + * Holds the WPSEO_Replace_Vars. + * + * @var WPSEO_Replace_Vars + */ + protected $replace_vars; + + /** + * Holds the Schema_Types. + * + * @var Schema_Types + */ + protected $schema_types; + + /** + * Holds the Current_Page_Helper. + * + * @var Current_Page_Helper + */ + protected $current_page_helper; + + /** + * Holds the Post_Type_Helper. + * + * @var Post_Type_Helper + */ + protected $post_type_helper; + + /** + * Holds the Language_Helper. + * + * @var Language_Helper + */ + protected $language_helper; + + /** + * Holds the Taxonomy_Helper. + * + * @var Taxonomy_Helper + */ + protected $taxonomy_helper; + + /** + * Holds the Product_Helper. + * + * @var Product_Helper + */ + protected $product_helper; + + /** + * Holds the Woocommerce_Helper. + * + * @var Woocommerce_Helper + */ + protected $woocommerce_helper; + + /** + * Holds the Article_Helper. + * + * @var Article_Helper + */ + protected $article_helper; + + /** + * Holds the User_Helper. + * + * @var User_Helper + */ + protected $user_helper; + + /** + * Holds the Options_Helper instance. + * + * @var Options_Helper + */ + protected $options; + + /** + * Holds the Content_Type_Visibility_Dismiss_Notifications instance. + * + * @var Content_Type_Visibility_Dismiss_Notifications + */ + protected $content_type_visibility; + + /** + * Constructs Settings_Integration. + * + * @param WPSEO_Admin_Asset_Manager $asset_manager The WPSEO_Admin_Asset_Manager. + * @param WPSEO_Replace_Vars $replace_vars The WPSEO_Replace_Vars. + * @param Schema_Types $schema_types The Schema_Types. + * @param Current_Page_Helper $current_page_helper The Current_Page_Helper. + * @param Post_Type_Helper $post_type_helper The Post_Type_Helper. + * @param Language_Helper $language_helper The Language_Helper. + * @param Taxonomy_Helper $taxonomy_helper The Taxonomy_Helper. + * @param Product_Helper $product_helper The Product_Helper. + * @param Woocommerce_Helper $woocommerce_helper The Woocommerce_Helper. + * @param Article_Helper $article_helper The Article_Helper. + * @param User_Helper $user_helper The User_Helper. + * @param Options_Helper $options The options helper. + * @param Content_Type_Visibility_Dismiss_Notifications $content_type_visibility The Content_Type_Visibility_Dismiss_Notifications instance. + */ + public function __construct( + WPSEO_Admin_Asset_Manager $asset_manager, + WPSEO_Replace_Vars $replace_vars, + Schema_Types $schema_types, + Current_Page_Helper $current_page_helper, + Post_Type_Helper $post_type_helper, + Language_Helper $language_helper, + Taxonomy_Helper $taxonomy_helper, + Product_Helper $product_helper, + Woocommerce_Helper $woocommerce_helper, + Article_Helper $article_helper, + User_Helper $user_helper, + Options_Helper $options, + Content_Type_Visibility_Dismiss_Notifications $content_type_visibility + ) { + $this->asset_manager = $asset_manager; + $this->replace_vars = $replace_vars; + $this->schema_types = $schema_types; + $this->current_page_helper = $current_page_helper; + $this->taxonomy_helper = $taxonomy_helper; + $this->post_type_helper = $post_type_helper; + $this->language_helper = $language_helper; + $this->product_helper = $product_helper; + $this->woocommerce_helper = $woocommerce_helper; + $this->article_helper = $article_helper; + $this->user_helper = $user_helper; + $this->options = $options; + $this->content_type_visibility = $content_type_visibility; + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Settings_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Add page. + \add_filter( 'wpseo_submenu_pages', [ $this, 'add_page' ] ); + \add_filter( 'admin_menu', [ $this, 'add_settings_saved_page' ] ); + + // Are we saving the settings? + if ( $this->current_page_helper->get_current_admin_page() === 'options.php' ) { + $post_action = ''; + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( isset( $_POST['action'] ) && \is_string( $_POST['action'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information. + $post_action = \wp_unslash( $_POST['action'] ); + } + $option_page = ''; + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information. + if ( isset( $_POST['option_page'] ) && \is_string( $_POST['option_page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information. + $option_page = \wp_unslash( $_POST['option_page'] ); + } + + if ( $post_action === 'update' && $option_page === self::PAGE ) { + \add_action( 'admin_init', [ $this, 'register_setting' ] ); + \add_action( 'in_admin_header', [ $this, 'remove_notices' ], \PHP_INT_MAX ); + } + + return; + } + + // Are we on the settings page? + if ( $this->current_page_helper->get_current_yoast_seo_page() === self::PAGE ) { + \add_action( 'admin_init', [ $this, 'register_setting' ] ); + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + \add_action( 'in_admin_header', [ $this, 'remove_notices' ], \PHP_INT_MAX ); + } + } + + /** + * Registers the different options under the setting. + * + * @return void + */ + public function register_setting() { + foreach ( WPSEO_Options::$options as $name => $instance ) { + if ( \in_array( $name, self::ALLOWED_OPTION_GROUPS, true ) ) { + \register_setting( self::PAGE, $name ); + } + } + // Only register WP options when the user is allowed to manage them. + if ( \current_user_can( 'manage_options' ) ) { + foreach ( self::WP_OPTIONS as $name ) { + \register_setting( self::PAGE, $name ); + } + } + } + + /** + * Adds the page. + * + * @param array $pages The pages. + * + * @return array The pages. + */ + public function add_page( $pages ) { + \array_splice( + $pages, + 1, + 0, + [ + [ + 'wpseo_dashboard', + '', + \__( 'Settings', 'wordpress-seo' ), + 'wpseo_manage_options', + self::PAGE, + [ $this, 'display_page' ], + ], + ] + ); + + return $pages; + } + + /** + * Adds a dummy page. + * + * Because the options route NEEDS to redirect to something. + * + * @param array $pages The pages. + * + * @return array The pages. + */ + public function add_settings_saved_page( $pages ) { + \add_submenu_page( + '', + '', + '', + 'wpseo_manage_options', + self::PAGE . '_saved', + static function () { + // Add success indication to HTML response. + $success = empty( \get_settings_errors() ) ? 'true' : 'false'; + echo \esc_html( "{{ yoast-success: $success }}" ); + } + ); + + return $pages; + } + + /** + * Displays the page. + * + * @return void + */ + public function display_page() { + echo '
                '; + } + + /** + * Enqueues the assets. + * + * @return void + */ + public function enqueue_assets() { + // Remove the emoji script as it is incompatible with both React and any contenteditable fields. + \remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + \wp_enqueue_media(); + $this->asset_manager->enqueue_script( 'new-settings' ); + $this->asset_manager->enqueue_style( 'new-settings' ); + if ( \YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { + $this->asset_manager->enqueue_style( 'black-friday-banner' ); + } + $this->asset_manager->localize_script( 'new-settings', 'wpseoScriptData', $this->get_script_data() ); + } + + /** + * Removes all current WP notices. + * + * @return void + */ + public function remove_notices() { + \remove_all_actions( 'admin_notices' ); + \remove_all_actions( 'user_admin_notices' ); + \remove_all_actions( 'network_admin_notices' ); + \remove_all_actions( 'all_admin_notices' ); + } + + /** + * Creates the script data. + * + * @return array The script data. + */ + protected function get_script_data() { + $default_setting_values = $this->get_default_setting_values(); + $settings = $this->get_settings( $default_setting_values ); + $post_types = $this->post_type_helper->get_indexable_post_type_objects(); + $taxonomies = $this->taxonomy_helper->get_indexable_taxonomy_objects(); + + // Check if attachments are included in indexation. + if ( ! \array_key_exists( 'attachment', $post_types ) ) { + // Always include attachments in the settings, to let the user enable them again. + $attachment_object = \get_post_type_object( 'attachment' ); + if ( ! empty( $attachment_object ) ) { + $post_types['attachment'] = $attachment_object; + } + } + // Check if post formats are included in indexation. + if ( ! \array_key_exists( 'post_format', $taxonomies ) ) { + // Always include post_format in the settings, to let the user enable them again. + $post_format_object = \get_taxonomy( 'post_format' ); + if ( ! empty( $post_format_object ) ) { + $taxonomies['post_format'] = $post_format_object; + } + } + + $transformed_post_types = $this->transform_post_types( $post_types ); + $transformed_taxonomies = $this->transform_taxonomies( $taxonomies, \array_keys( $transformed_post_types ) ); + + // Check if there is a new content type to show notification only once in the settings. + $show_new_content_type_notification = $this->content_type_visibility->maybe_add_settings_notification(); + + return [ + 'settings' => $this->transform_settings( $settings ), + 'defaultSettingValues' => $default_setting_values, + 'disabledSettings' => $this->get_disabled_settings( $settings ), + 'endpoint' => \admin_url( 'options.php' ), + 'nonce' => \wp_create_nonce( self::PAGE . '-options' ), + 'separators' => WPSEO_Option_Titles::get_instance()->get_separator_options_for_display(), + 'replacementVariables' => $this->get_replacement_variables(), + 'schema' => $this->get_schema( $transformed_post_types ), + 'preferences' => $this->get_preferences( $settings ), + 'linkParams' => WPSEO_Shortlinker::get_query_params(), + 'postTypes' => $transformed_post_types, + 'taxonomies' => $transformed_taxonomies, + 'fallbacks' => $this->get_fallbacks(), + 'showNewContentTypeNotification' => $show_new_content_type_notification, + ]; + } + + /** + * Retrieves the preferences. + * + * @param array $settings The settings. + * + * @return array The preferences. + */ + protected function get_preferences( $settings ) { + $shop_page_id = $this->woocommerce_helper->get_shop_page_id(); + $homepage_is_latest_posts = \get_option( 'show_on_front' ) === 'posts'; + $page_on_front = \get_option( 'page_on_front' ); + $page_for_posts = \get_option( 'page_for_posts' ); + + $addon_manager = new WPSEO_Addon_Manager(); + $woocommerce_seo_active = \is_plugin_active( $addon_manager->get_plugin_file( WPSEO_Addon_Manager::WOOCOMMERCE_SLUG ) ); + + if ( empty( $page_on_front ) ) { + $page_on_front = $page_for_posts; + } + + $business_settings_url = \get_admin_url( null, 'admin.php?page=wpseo_local' ); + if ( \defined( 'WPSEO_LOCAL_FILE' ) ) { + $local_options = \get_option( 'wpseo_local' ); + $multiple_locations = $local_options['use_multiple_locations']; + $same_organization = $local_options['multiple_locations_same_organization']; + if ( $multiple_locations === 'on' && $same_organization !== 'on' ) { + $business_settings_url = \get_admin_url( null, 'edit.php?post_type=wpseo_locations' ); + } + } + + return [ + 'isPremium' => $this->product_helper->is_premium(), + 'isRtl' => \is_rtl(), + 'isNetworkAdmin' => \is_network_admin(), + 'isMainSite' => \is_main_site(), + 'isMultisite' => \is_multisite(), + 'isWooCommerceActive' => $this->woocommerce_helper->is_active(), + 'isLocalSeoActive' => \defined( 'WPSEO_LOCAL_FILE' ), + 'isNewsSeoActive' => \defined( 'WPSEO_NEWS_FILE' ), + 'isWooCommerceSEOActive' => $woocommerce_seo_active, + 'promotions' => \YoastSEO()->classes->get( Promotion_Manager::class )->get_current_promotions(), + 'siteUrl' => \get_bloginfo( 'url' ), + 'siteTitle' => \get_bloginfo( 'name' ), + 'sitemapUrl' => WPSEO_Sitemaps_Router::get_base_url( 'sitemap_index.xml' ), + 'hasWooCommerceShopPage' => $shop_page_id !== -1, + 'editWooCommerceShopPageUrl' => \get_edit_post_link( $shop_page_id, 'js' ), + 'wooCommerceShopPageSettingUrl' => \get_admin_url( null, 'admin.php?page=wc-settings&tab=products' ), + 'localSeoPageSettingUrl' => $business_settings_url, + 'homepageIsLatestPosts' => $homepage_is_latest_posts, + 'homepagePageEditUrl' => \get_edit_post_link( $page_on_front, 'js' ), + 'homepagePostsEditUrl' => \get_edit_post_link( $page_for_posts, 'js' ), + 'createUserUrl' => \admin_url( 'user-new.php' ), + 'createPageUrl' => \admin_url( 'post-new.php?post_type=page' ), + 'editUserUrl' => \admin_url( 'user-edit.php' ), + 'editTaxonomyUrl' => \admin_url( 'edit-tags.php' ), + 'generalSettingsUrl' => \admin_url( 'options-general.php' ), + 'companyOrPersonMessage' => \apply_filters( 'wpseo_knowledge_graph_setting_msg', '' ), + 'currentUserId' => \get_current_user_id(), + 'canCreateUsers' => \current_user_can( 'create_users' ), + 'canCreatePages' => \current_user_can( 'edit_pages' ), + 'canEditUsers' => \current_user_can( 'edit_users' ), + 'canManageOptions' => \current_user_can( 'manage_options' ), + 'userLocale' => \str_replace( '_', '-', \get_user_locale() ), + 'pluginUrl' => \plugins_url( '', \WPSEO_FILE ), + 'showForceRewriteTitlesSetting' => ! \current_theme_supports( 'title-tag' ) && ! ( \function_exists( 'wp_is_block_theme' ) && \wp_is_block_theme() ), + 'upsellSettings' => $this->get_upsell_settings(), + 'siteRepresentsPerson' => $this->get_site_represents_person( $settings ), + 'siteBasicsPolicies' => $this->get_site_basics_policies( $settings ), + ]; + } + + /** + * Retrieves the currently represented person. + * + * @param array $settings The settings. + * + * @return array The currently represented person's ID and name. + */ + protected function get_site_represents_person( $settings ) { + $person = [ + 'id' => false, + 'name' => '', + ]; + + if ( isset( $settings['wpseo_titles']['company_or_person_user_id'] ) ) { + $person['id'] = $settings['wpseo_titles']['company_or_person_user_id']; + $user = \get_userdata( $person['id'] ); + if ( $user instanceof WP_User ) { + $person['name'] = $user->get( 'display_name' ); + } + } + + return $person; + } + + /** + * Get site policy data. + * + * @param array $settings The settings. + * + * @return array The policy data. + */ + private function get_site_basics_policies( $settings ) { + $policies = []; + + $policies = $this->maybe_add_policy( $policies, $settings['wpseo_titles']['publishing_principles_id'], 'publishing_principles_id' ); + $policies = $this->maybe_add_policy( $policies, $settings['wpseo_titles']['ownership_funding_info_id'], 'ownership_funding_info_id' ); + $policies = $this->maybe_add_policy( $policies, $settings['wpseo_titles']['actionable_feedback_policy_id'], 'actionable_feedback_policy_id' ); + $policies = $this->maybe_add_policy( $policies, $settings['wpseo_titles']['corrections_policy_id'], 'corrections_policy_id' ); + $policies = $this->maybe_add_policy( $policies, $settings['wpseo_titles']['ethics_policy_id'], 'ethics_policy_id' ); + $policies = $this->maybe_add_policy( $policies, $settings['wpseo_titles']['diversity_policy_id'], 'diversity_policy_id' ); + $policies = $this->maybe_add_policy( $policies, $settings['wpseo_titles']['diversity_staffing_report_id'], 'diversity_staffing_report_id' ); + + return $policies; + } + + /** + * Adds policy data if it is present. + * + * @param array $policies The existing policy data. + * @param int $policy The policy id to check. + * @param string $key The option key name. + * + * @return array The policy data. + */ + private function maybe_add_policy( $policies, $policy, $key ) { + $policy_array = [ + 'id' => 0, + 'name' => \__( 'None', 'wordpress-seo' ), + ]; + + if ( isset( $policy ) && \is_int( $policy ) ) { + $policy_array['id'] = $policy; + $post = \get_post( $policy ); + if ( $post instanceof WP_Post ) { + if ( $post->post_status !== 'publish' || $post->post_password !== '' ) { + return $policies; + } + $policy_array['name'] = $post->post_title; + } + } + + $policies[ $key ] = $policy_array; + + return $policies; + } + + /** + * Returns settings for the Call to Buy (CTB) buttons. + * + * @return array The array of CTB settings. + */ + public function get_upsell_settings() { + return [ + 'actionId' => 'load-nfd-ctb', + 'premiumCtbId' => 'f6a84663-465f-4cb5-8ba5-f7a6d72224b2', + ]; + } + + /** + * Retrieves the default setting values. + * + * These default values are currently being used in the UI for dummy fields. + * Dummy fields should not expose or reflect the actual data. + * + * @return array The default setting values. + */ + protected function get_default_setting_values() { + $defaults = []; + + // Add Yoast settings. + foreach ( WPSEO_Options::$options as $option_name => $instance ) { + if ( \in_array( $option_name, self::ALLOWED_OPTION_GROUPS, true ) ) { + $option_instance = WPSEO_Options::get_option_instance( $option_name ); + $defaults[ $option_name ] = ( $option_instance ) ? $option_instance->get_defaults() : []; + } + } + // Add WP settings. + foreach ( self::WP_OPTIONS as $option_name ) { + $defaults[ $option_name ] = ''; + } + + // Remove disallowed settings. + foreach ( self::DISALLOWED_SETTINGS as $option_name => $disallowed_settings ) { + foreach ( $disallowed_settings as $disallowed_setting ) { + unset( $defaults[ $option_name ][ $disallowed_setting ] ); + } + } + + if ( \defined( 'WPSEO_LOCAL_FILE' ) ) { + $defaults = $this->get_defaults_from_local_seo( $defaults ); + } + + return $defaults; + } + + /** + * Retrieves the organization schema values from Local SEO for defaults in Site representation fields. + * Specifically for the org-vat-id, org-tax-id, org-email and org-phone options. + * + * @param array $defaults The settings defaults. + * + * @return array The settings defaults with local seo overides. + */ + protected function get_defaults_from_local_seo( $defaults ) { + $local_options = \get_option( 'wpseo_local' ); + $multiple_locations = $local_options['use_multiple_locations']; + $same_organization = $local_options['multiple_locations_same_organization']; + $shared_info = $local_options['multiple_locations_shared_business_info']; + if ( $multiple_locations !== 'on' || ( $multiple_locations === 'on' && $same_organization === 'on' && $shared_info === 'on' ) ) { + $defaults['wpseo_titles']['org-vat-id'] = $local_options['location_vat_id']; + $defaults['wpseo_titles']['org-tax-id'] = $local_options['location_tax_id']; + $defaults['wpseo_titles']['org-email'] = $local_options['location_email']; + $defaults['wpseo_titles']['org-phone'] = $local_options['location_phone']; + } + + if ( \wpseo_has_primary_location() ) { + $primary_location = $local_options['multiple_locations_primary_location']; + + $location_keys = [ + 'org-phone' => [ + 'is_overridden' => '_wpseo_is_overridden_business_phone', + 'value' => '_wpseo_business_phone', + ], + 'org-email' => [ + 'is_overridden' => '_wpseo_is_overridden_business_email', + 'value' => '_wpseo_business_email', + ], + 'org-tax-id' => [ + 'is_overridden' => '_wpseo_is_overridden_business_tax_id', + 'value' => '_wpseo_business_tax_id', + ], + 'org-vat-id' => [ + 'is_overridden' => '_wpseo_is_overridden_business_vat_id', + 'value' => '_wpseo_business_vat_id', + ], + ]; + + foreach ( $location_keys as $key => $meta_keys ) { + $is_overridden = ( $shared_info === 'on' ) ? \get_post_meta( $primary_location, $meta_keys['is_overridden'], true ) : false; + if ( $is_overridden === 'on' || $shared_info !== 'on' ) { + $post_meta_value = \get_post_meta( $primary_location, $meta_keys['value'], true ); + $defaults['wpseo_titles'][ $key ] = ( $post_meta_value ) ? $post_meta_value : ''; + } + } + } + + return $defaults; + } + + /** + * Retrieves the settings and their values. + * + * @param array $default_setting_values The default setting values. + * + * @return array The settings. + */ + protected function get_settings( $default_setting_values ) { + $settings = []; + + // Add Yoast settings. + foreach ( WPSEO_Options::$options as $option_name => $instance ) { + if ( \in_array( $option_name, self::ALLOWED_OPTION_GROUPS, true ) ) { + $settings[ $option_name ] = \array_merge( $default_setting_values[ $option_name ], WPSEO_Options::get_option( $option_name ) ); + } + } + // Add WP settings. + foreach ( self::WP_OPTIONS as $option_name ) { + $settings[ $option_name ] = \get_option( $option_name ); + } + + // Remove disallowed settings. + foreach ( self::DISALLOWED_SETTINGS as $option_name => $disallowed_settings ) { + foreach ( $disallowed_settings as $disallowed_setting ) { + unset( $settings[ $option_name ][ $disallowed_setting ] ); + } + } + + return $settings; + } + + /** + * Transforms setting values. + * + * @param array $settings The settings. + * + * @return array The settings. + */ + protected function transform_settings( $settings ) { + if ( isset( $settings['wpseo_titles']['breadcrumbs-sep'] ) ) { + /** + * The breadcrumbs separator default value is the HTML entity `»`. + * Which does not get decoded in our JS, while it did in our Yoast form. Decode it here as an exception. + */ + $settings['wpseo_titles']['breadcrumbs-sep'] = \html_entity_decode( + $settings['wpseo_titles']['breadcrumbs-sep'], + ( \ENT_NOQUOTES | \ENT_HTML5 ), + 'UTF-8' + ); + } + + /** + * Decode some WP options. + */ + $settings['blogdescription'] = \html_entity_decode( + $settings['blogdescription'], + ( \ENT_NOQUOTES | \ENT_HTML5 ), + 'UTF-8' + ); + + return $settings; + } + + /** + * Retrieves the disabled settings. + * + * @param array $settings The settings. + * + * @return array The settings. + */ + protected function get_disabled_settings( $settings ) { + $disabled_settings = []; + $site_language = $this->language_helper->get_language(); + + foreach ( WPSEO_Options::$options as $option_name => $instance ) { + if ( ! \in_array( $option_name, self::ALLOWED_OPTION_GROUPS, true ) ) { + continue; + } + + $disabled_settings[ $option_name ] = []; + $option_instance = WPSEO_Options::get_option_instance( $option_name ); + if ( $option_instance === false ) { + continue; + } + foreach ( $settings[ $option_name ] as $setting_name => $setting_value ) { + if ( $option_instance->is_disabled( $setting_name ) ) { + $disabled_settings[ $option_name ][ $setting_name ] = 'network'; + } + } + } + + // Remove disabled on multisite settings. + if ( \is_multisite() ) { + foreach ( self::DISABLED_ON_MULTISITE_SETTINGS as $option_name => $disabled_ms_settings ) { + if ( \array_key_exists( $option_name, $disabled_settings ) ) { + foreach ( $disabled_ms_settings as $disabled_ms_setting ) { + $disabled_settings[ $option_name ][ $disabled_ms_setting ] = 'multisite'; + } + } + } + } + + if ( \array_key_exists( 'wpseo', $disabled_settings ) && ! $this->language_helper->has_inclusive_language_support( $site_language ) ) { + $disabled_settings['wpseo']['inclusive_language_analysis_active'] = 'language'; + } + + return $disabled_settings; + } + + /** + * Retrieves the replacement variables. + * + * @return array The replacement variables. + */ + protected function get_replacement_variables() { + $recommended_replace_vars = new WPSEO_Admin_Recommended_Replace_Vars(); + $specific_replace_vars = new WPSEO_Admin_Editor_Specific_Replace_Vars(); + $replacement_variables = $this->replace_vars->get_replacement_variables_with_labels(); + + return [ + 'variables' => $replacement_variables, + 'recommended' => $recommended_replace_vars->get_recommended_replacevars(), + 'specific' => $specific_replace_vars->get(), + 'shared' => $specific_replace_vars->get_generic( $replacement_variables ), + ]; + } + + /** + * Retrieves the schema. + * + * @param array $post_types The post types. + * + * @return array The schema. + */ + protected function get_schema( array $post_types ) { + $schema = []; + + foreach ( $this->schema_types->get_article_type_options() as $article_type ) { + $schema['articleTypes'][ $article_type['value'] ] = [ + 'label' => $article_type['name'], + 'value' => $article_type['value'], + ]; + } + + foreach ( $this->schema_types->get_page_type_options() as $page_type ) { + $schema['pageTypes'][ $page_type['value'] ] = [ + 'label' => $page_type['name'], + 'value' => $page_type['value'], + ]; + } + + $schema['articleTypeDefaults'] = []; + $schema['pageTypeDefaults'] = []; + foreach ( $post_types as $name => $post_type ) { + $schema['articleTypeDefaults'][ $name ] = WPSEO_Options::get_default( 'wpseo_titles', "schema-article-type-$name" ); + $schema['pageTypeDefaults'][ $name ] = WPSEO_Options::get_default( 'wpseo_titles', "schema-page-type-$name" ); + } + + return $schema; + } + + /** + * Transforms the post types, to represent them. + * + * @param WP_Post_Type[] $post_types The WP_Post_Type array to transform. + * + * @return array The post types. + */ + protected function transform_post_types( $post_types ) { + $transformed = []; + $new_post_types = $this->options->get( 'new_post_types', [] ); + foreach ( $post_types as $post_type ) { + $transformed[ $post_type->name ] = [ + 'name' => $post_type->name, + 'route' => $this->get_route( $post_type->name, $post_type->rewrite, $post_type->rest_base ), + 'label' => $post_type->label, + 'singularLabel' => $post_type->labels->singular_name, + 'hasArchive' => $this->post_type_helper->has_archive( $post_type ), + 'hasSchemaArticleType' => $this->article_helper->is_article_post_type( $post_type->name ), + 'menuPosition' => $post_type->menu_position, + 'isNew' => \in_array( $post_type->name, $new_post_types, true ), + ]; + } + + \uasort( $transformed, [ $this, 'compare_post_types' ] ); + + return $transformed; + } + + /** + * Compares two post types. + * + * @param array $a The first post type. + * @param array $b The second post type. + * + * @return int The order. + */ + protected function compare_post_types( $a, $b ) { + if ( $a['menuPosition'] === null && $b['menuPosition'] !== null ) { + return 1; + } + if ( $a['menuPosition'] !== null && $b['menuPosition'] === null ) { + return -1; + } + + if ( $a['menuPosition'] === null && $b['menuPosition'] === null ) { + // No position specified, order alphabetically by label. + return \strnatcmp( $a['label'], $b['label'] ); + } + + return ( ( $a['menuPosition'] < $b['menuPosition'] ) ? -1 : 1 ); + } + + /** + * Transforms the taxonomies, to represent them. + * + * @param WP_Taxonomy[] $taxonomies The WP_Taxonomy array to transform. + * @param string[] $post_type_names The post type names. + * + * @return array The taxonomies. + */ + protected function transform_taxonomies( $taxonomies, $post_type_names ) { + $transformed = []; + $new_taxonomies = $this->options->get( 'new_taxonomies', [] ); + foreach ( $taxonomies as $taxonomy ) { + $transformed[ $taxonomy->name ] = [ + 'name' => $taxonomy->name, + 'route' => $this->get_route( $taxonomy->name, $taxonomy->rewrite, $taxonomy->rest_base ), + 'label' => $taxonomy->label, + 'showUi' => $taxonomy->show_ui, + 'singularLabel' => $taxonomy->labels->singular_name, + 'postTypes' => \array_filter( + $taxonomy->object_type, + static function ( $object_type ) use ( $post_type_names ) { + return \in_array( $object_type, $post_type_names, true ); + } + ), + 'isNew' => \in_array( $taxonomy->name, $new_taxonomies, true ), + ]; + } + + \uasort( + $transformed, + static function ( $a, $b ) { + return \strnatcmp( $a['label'], $b['label'] ); + } + ); + + return $transformed; + } + + /** + * Gets the route from a name, rewrite and rest_base. + * + * @param string $name The name. + * @param array $rewrite The rewrite data. + * @param string $rest_base The rest base. + * + * @return string The route. + */ + protected function get_route( $name, $rewrite, $rest_base ) { + $route = $name; + if ( isset( $rewrite['slug'] ) ) { + $route = $rewrite['slug']; + } + if ( ! empty( $rest_base ) ) { + $route = $rest_base; + } + // Always strip leading slashes. + while ( \substr( $route, 0, 1 ) === '/' ) { + $route = \substr( $route, 1 ); + } + + return \rawurlencode( $route ); + } + + /** + * Retrieves the fallbacks. + * + * @return array The fallbacks. + */ + protected function get_fallbacks() { + $site_logo_id = \get_option( 'site_logo' ); + if ( ! $site_logo_id ) { + $site_logo_id = \get_theme_mod( 'custom_logo' ); + } + if ( ! $site_logo_id ) { + $site_logo_id = '0'; + } + + return [ + 'siteLogoId' => $site_logo_id, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/support-integration.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/support-integration.php new file mode 100644 index 00000000..b123847f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/support-integration.php @@ -0,0 +1,174 @@ +asset_manager = $asset_manager; + $this->current_page_helper = $current_page_helper; + $this->product_helper = $product_helper; + $this->shortlink_helper = $shortlink_helper; + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Admin_Conditional::class, User_Can_Manage_Wpseo_Options_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Add page. + \add_filter( 'wpseo_submenu_pages', [ $this, 'add_page' ], \PHP_INT_MAX ); + + // Are we on the settings page? + if ( $this->current_page_helper->get_current_yoast_seo_page() === self::PAGE ) { + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + \add_action( 'in_admin_header', [ $this, 'remove_notices' ], \PHP_INT_MAX ); + } + } + + /** + * Adds the page. + * + * @param array $pages The pages. + * + * @return array The pages. + */ + public function add_page( $pages ) { + $pages[] = [ + 'wpseo_dashboard', + '', + \__( 'Support', 'wordpress-seo' ), + self::CAPABILITY, + self::PAGE, + [ $this, 'display_page' ], + ]; + + return $pages; + } + + /** + * Displays the page. + * + * @return void + */ + public function display_page() { + echo '
                '; + } + + /** + * Enqueues the assets. + * + * @return void + */ + public function enqueue_assets() { + // Remove the emoji script as it is incompatible with both React and any contenteditable fields. + \remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + $this->asset_manager->enqueue_script( 'support' ); + $this->asset_manager->enqueue_style( 'support' ); + if ( \YoastSEO()->classes->get( Promotion_Manager::class )->is( 'black-friday-2023-promotion' ) ) { + $this->asset_manager->enqueue_style( 'black-friday-banner' ); + } + $this->asset_manager->localize_script( 'support', 'wpseoScriptData', $this->get_script_data() ); + } + + /** + * Removes all current WP notices. + * + * @return void + */ + public function remove_notices() { + \remove_all_actions( 'admin_notices' ); + \remove_all_actions( 'user_admin_notices' ); + \remove_all_actions( 'network_admin_notices' ); + \remove_all_actions( 'all_admin_notices' ); + } + + /** + * Creates the script data. + * + * @return array The script data. + */ + public function get_script_data() { + return [ + 'preferences' => [ + 'isPremium' => $this->product_helper->is_premium(), + 'isRtl' => \is_rtl(), + 'promotions' => \YoastSEO()->classes->get( Promotion_Manager::class )->get_current_promotions(), + 'pluginUrl' => \plugins_url( '', \WPSEO_FILE ), + 'upsellSettings' => [ + 'actionId' => 'load-nfd-ctb', + 'premiumCtbId' => 'f6a84663-465f-4cb5-8ba5-f7a6d72224b2', + ], + ], + 'linkParams' => $this->shortlink_helper->get_query_params(), + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/amp.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/amp.php new file mode 100644 index 00000000..f9c7ae79 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/amp.php @@ -0,0 +1,61 @@ +front_end = $front_end; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'amp_post_template_head', [ $this, 'remove_amp_meta_output' ], 0 ); + \add_action( 'amp_post_template_head', [ $this->front_end, 'call_wpseo_head' ], 9 ); + } + + /** + * Removes amp meta output. + * + * @return void + */ + public function remove_amp_meta_output() { + \remove_action( 'amp_post_template_head', 'amp_post_template_add_title' ); + \remove_action( 'amp_post_template_head', 'amp_post_template_add_canonical' ); + \remove_action( 'amp_post_template_head', 'amp_print_schemaorg_metadata' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/bbpress.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/bbpress.php new file mode 100644 index 00000000..cc41fd03 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/bbpress.php @@ -0,0 +1,62 @@ +options = $options; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + if ( $this->options->get( 'breadcrumbs-enable' ) !== true ) { + return; + } + + /** + * If breadcrumbs are active (which they supposedly are if the users has enabled this settings, + * there's no reason to have bbPress breadcrumbs as well. + * + * {@internal The class itself is only loaded when the template tag is encountered + * via the template tag function in the wpseo-functions.php file.}} + */ + \add_filter( 'bbp_get_breadcrumb', '__return_false' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/elementor.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/elementor.php new file mode 100644 index 00000000..5d2bfcf7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/elementor.php @@ -0,0 +1,799 @@ +asset_manager = $asset_manager; + $this->options = $options; + $this->capability = $capability; + $this->request_post = $request_post; + + $this->seo_analysis = new WPSEO_Metabox_Analysis_SEO(); + $this->readability_analysis = new WPSEO_Metabox_Analysis_Readability(); + $this->inclusive_language_analysis = new WPSEO_Metabox_Analysis_Inclusive_Language(); + $this->social_is_enabled = $this->options->get( 'opengraph', false ) || $this->options->get( 'twitter', false ); + $this->is_advanced_metadata_enabled = $this->capability->current_user_can( 'wpseo_edit_advanced_metadata' ) || $this->options->get( 'disableadvanced_meta' ) === false; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wp_ajax_wpseo_elementor_save', [ $this, 'save_postdata' ] ); + + // We need to delay the post type lookup to give other plugins a chance to register custom post types. + \add_action( 'init', [ $this, 'register_elementor_hooks' ], \PHP_INT_MAX ); + } + + /** + * Registers our Elementor hooks. + * This is done for pages with metabox on page load and not on ajax request. + * + * @return void + */ + public function register_elementor_hooks() { + if ( $this->get_metabox_post() === null || ! $this->display_metabox( $this->get_metabox_post()->post_type ) ) { + return; + } + + \add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'init' ] ); + } + + /** + * Initializes the integration. + * + * @return void + */ + public function init() { + $this->asset_manager->register_assets(); + $this->enqueue(); + $this->render_hidden_fields(); + } + + // Below is mostly copied from `class-metabox.php`. That constructor has side-effects we do not need. + + /** + * Determines whether the metabox should be shown for the passed identifier. + * + * By default, the check is done for post types, but can also be used for taxonomies. + * + * @param string|null $identifier The identifier to check. + * @param string $type The type of object to check. Defaults to post_type. + * + * @return bool Whether the metabox should be displayed. + */ + public function display_metabox( $identifier = null, $type = 'post_type' ) { + return WPSEO_Utils::is_metabox_active( $identifier, $type ); + } + + /** + * Saves the WP SEO metadata for posts. + * + * Outputs JSON via wp_send_json then stops code execution. + * + * {@internal $_POST parameters are validated via sanitize_post_meta().}} + * + * @return void + */ + public function save_postdata() { + global $post; + + if ( ! isset( $_POST['post_id'] ) || ! \is_string( $_POST['post_id'] ) ) { + \wp_send_json_error( 'Bad Request', 400 ); + } + + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: No sanitization needed because we cast to an integer. + $post_id = (int) \wp_unslash( $_POST['post_id'] ); + + if ( $post_id <= 0 ) { + \wp_send_json_error( 'Bad Request', 400 ); + } + + if ( ! \current_user_can( 'edit_post', $post_id ) ) { + \wp_send_json_error( 'Forbidden', 403 ); + } + + \check_ajax_referer( 'wpseo_elementor_save', '_wpseo_elementor_nonce' ); + + // Bail if this is a multisite installation and the site has been switched. + if ( \is_multisite() && \ms_is_switched() ) { + \wp_send_json_error( 'Switched multisite', 409 ); + } + + \clean_post_cache( $post_id ); + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- To setup the post we need to do this explicitly. + $post = \get_post( $post_id ); + + if ( ! \is_object( $post ) ) { + // Non-existent post. + \wp_send_json_error( 'Post not found', 400 ); + } + + \do_action( 'wpseo_save_compare_data', $post ); + + // Initialize meta, amongst other things it registers sanitization. + WPSEO_Meta::init(); + + $social_fields = []; + if ( $this->social_is_enabled ) { + $social_fields = WPSEO_Meta::get_meta_field_defs( 'social', $post->post_type ); + } + + // The below methods use the global post so make sure it is setup. + \setup_postdata( $post ); + $meta_boxes = \apply_filters( 'wpseo_save_metaboxes', [] ); + $meta_boxes = \array_merge( + $meta_boxes, + WPSEO_Meta::get_meta_field_defs( 'general', $post->post_type ), + WPSEO_Meta::get_meta_field_defs( 'advanced', $post->post_type ), + $social_fields, + WPSEO_Meta::get_meta_field_defs( 'schema', $post->post_type ) + ); + + foreach ( $meta_boxes as $key => $meta_box ) { + // If analysis is disabled remove that analysis score value from the DB. + if ( $this->is_meta_value_disabled( $key ) ) { + WPSEO_Meta::delete( $key, $post_id ); + continue; + } + + $data = null; + $field_name = WPSEO_Meta::$form_prefix . $key; + + if ( $meta_box['type'] === 'checkbox' ) { + $data = isset( $_POST[ $field_name ] ) ? 'on' : 'off'; + } + else { + if ( isset( $_POST[ $field_name ] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: Sanitized through sanitize_post_meta. + $data = \wp_unslash( $_POST[ $field_name ] ); + + // For multi-select. + if ( \is_array( $data ) ) { + $data = \array_map( [ 'WPSEO_Utils', 'sanitize_text_field' ], $data ); + } + + if ( \is_string( $data ) ) { + $data = ( $key !== 'canonical' ) ? WPSEO_Utils::sanitize_text_field( $data ) : WPSEO_Utils::sanitize_url( $data ); + } + } + + // Reset options when no entry is present with multiselect - only applies to `meta-robots-adv` currently. + if ( ! isset( $_POST[ $field_name ] ) && ( $meta_box['type'] === 'multiselect' ) ) { + $data = []; + } + } + + if ( $data !== null ) { + WPSEO_Meta::set_value( $key, $data, $post_id ); + } + } + + if ( isset( $_POST[ WPSEO_Meta::$form_prefix . 'slug' ] ) && \is_string( $_POST[ WPSEO_Meta::$form_prefix . 'slug' ] ) ) { + $slug = \sanitize_title( \wp_unslash( $_POST[ WPSEO_Meta::$form_prefix . 'slug' ] ) ); + if ( $post->post_name !== $slug ) { + $post_array = $post->to_array(); + $post_array['post_name'] = $slug; + + $save_successful = \wp_insert_post( $post_array ); + if ( \is_wp_error( $save_successful ) ) { + \wp_send_json_error( 'Slug not saved', 400 ); + } + + // Update the post object to ensure we have the actual slug. + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Updating the post is needed to get the current slug. + $post = \get_post( $post_id ); + if ( ! \is_object( $post ) ) { + \wp_send_json_error( 'Updated slug not found', 400 ); + } + } + } + + \do_action( 'wpseo_saved_postdata' ); + + // Output the slug, because it is processed by WP and we need the actual slug again. + \wp_send_json_success( [ 'slug' => $post->post_name ] ); + } + + /** + * Determines if the given meta value key is disabled. + * + * @param string $key The key of the meta value. + * + * @return bool Whether the given meta value key is disabled. + */ + public function is_meta_value_disabled( $key ) { + if ( $key === 'linkdex' && ! $this->seo_analysis->is_enabled() ) { + return true; + } + + if ( $key === 'content_score' && ! $this->readability_analysis->is_enabled() ) { + return true; + } + + if ( $key === 'inclusive_language_score' && ! $this->inclusive_language_analysis->is_enabled() ) { + return true; + } + + return false; + } + + /** + * Enqueues all the needed JS and CSS. + * + * @return void + */ + public function enqueue() { + $post_id = \get_queried_object_id(); + if ( empty( $post_id ) ) { + $post_id = 0; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['post'] ) && \is_string( $_GET['post'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.Security.NonceVerification.Recommended -- Reason: No sanitization needed because we cast to an integer,We are not processing form information. + $post_id = (int) \wp_unslash( $_GET['post'] ); + } + } + + if ( $post_id !== 0 ) { + // Enqueue files needed for upload functionality. + \wp_enqueue_media( [ 'post' => $post_id ] ); + } + + $this->asset_manager->enqueue_style( 'admin-global' ); + $this->asset_manager->enqueue_style( 'metabox-css' ); + $this->asset_manager->enqueue_style( 'scoring' ); + $this->asset_manager->enqueue_style( 'monorepo' ); + $this->asset_manager->enqueue_style( 'admin-css' ); + $this->asset_manager->enqueue_style( 'ai-generator' ); + $this->asset_manager->enqueue_style( 'elementor' ); + + $this->asset_manager->enqueue_script( 'admin-global' ); + $this->asset_manager->enqueue_script( 'elementor' ); + + $this->asset_manager->localize_script( 'elementor', 'wpseoAdminGlobalL10n', \YoastSEO()->helpers->wincher->get_admin_global_links() ); + $this->asset_manager->localize_script( 'elementor', 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() ); + $this->asset_manager->localize_script( 'elementor', 'wpseoFeaturesL10n', WPSEO_Utils::retrieve_enabled_features() ); + + $plugins_script_data = [ + 'replaceVars' => [ + 'no_parent_text' => \__( '(no parent)', 'wordpress-seo' ), + 'replace_vars' => $this->get_replace_vars(), + 'recommended_replace_vars' => $this->get_recommended_replace_vars(), + 'hidden_replace_vars' => $this->get_hidden_replace_vars(), + 'scope' => $this->determine_scope(), + 'has_taxonomies' => $this->current_post_type_has_taxonomies(), + ], + 'shortcodes' => [ + 'wpseo_shortcode_tags' => $this->get_valid_shortcode_tags(), + 'wpseo_filter_shortcodes_nonce' => \wp_create_nonce( 'wpseo-filter-shortcodes' ), + ], + ]; + + $worker_script_data = [ + 'url' => \YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-analysis-worker' ), + 'dependencies' => \YoastSEO()->helpers->asset->get_dependency_urls_by_handle( 'yoast-seo-analysis-worker' ), + 'keywords_assessment_url' => \YoastSEO()->helpers->asset->get_asset_url( 'yoast-seo-used-keywords-assessment' ), + 'log_level' => WPSEO_Utils::get_analysis_worker_log_level(), + // We need to make the feature flags separately available inside of the analysis web worker. + 'enabled_features' => WPSEO_Utils::retrieve_enabled_features(), + ]; + + $woocommerce_conditional = new WooCommerce_Conditional(); + $permalink = $this->get_permalink(); + + $script_data = [ + 'media' => [ 'choose_image' => \__( 'Use Image', 'wordpress-seo' ) ], + 'metabox' => $this->get_metabox_script_data( $permalink ), + 'userLanguageCode' => WPSEO_Language_Utils::get_language( \get_user_locale() ), + 'isPost' => true, + 'isBlockEditor' => WP_Screen::get()->is_block_editor(), + 'isElementorEditor' => true, + 'isWooCommerceActive' => $woocommerce_conditional->is_met(), + 'postStatus' => \get_post_status( $post_id ), + 'postType' => \get_post_type( $post_id ), + 'analysis' => [ + 'plugins' => $plugins_script_data, + 'worker' => $worker_script_data, + ], + 'webinarIntroElementorUrl' => WPSEO_Shortlinker::get( 'https://yoa.st/webinar-intro-elementor' ), + 'usedKeywordsNonce' => \wp_create_nonce( 'wpseo-keyword-usage-and-post-types' ), + ]; + + /** + * The website information repository. + * + * @var $repo Website_Information_Repository + */ + $repo = \YoastSEO()->classes->get( Website_Information_Repository::class ); + $site_information = $repo->get_post_site_information(); + $site_information->set_permalink( $permalink ); + $script_data = \array_merge_recursive( $site_information->get_legacy_site_information(), $script_data ); + + if ( \post_type_supports( $this->get_metabox_post()->post_type, 'thumbnail' ) ) { + $this->asset_manager->enqueue_style( 'featured-image' ); + + $script_data['featuredImage'] = [ + 'featured_image_notice' => \__( 'SEO issue: The featured image should be at least 200 by 200 pixels to be picked up by Facebook and other social media sites.', 'wordpress-seo' ), + ]; + } + + $this->asset_manager->localize_script( 'elementor', 'wpseoScriptData', $script_data ); + $this->asset_manager->enqueue_user_language_script(); + } + + /** + * Renders the metabox hidden fields. + * + * @return void + */ + protected function render_hidden_fields() { + // Wrap in a form with an action and post_id for the submit. + \printf( + '
                ', + \esc_url( \admin_url( 'admin-ajax.php' ) ), + \esc_attr( $this->get_metabox_post()->ID ) + ); + + \wp_nonce_field( 'wpseo_elementor_save', '_wpseo_elementor_nonce' ); + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Meta_Fields_Presenter->present is considered safe. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'general' ); + + if ( $this->is_advanced_metadata_enabled ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Meta_Fields_Presenter->present is considered safe. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'advanced' ); + } + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Meta_Fields_Presenter->present is considered safe. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'schema', $this->get_metabox_post()->post_type ); + + if ( $this->social_is_enabled ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: Meta_Fields_Presenter->present is considered safe. + echo new Meta_Fields_Presenter( $this->get_metabox_post(), 'social' ); + } + + \printf( + '', + \esc_attr( WPSEO_Meta::$form_prefix . 'slug' ), + \esc_attr( $this->get_post_slug() ) + ); + + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output should be escaped in the filter. + echo \apply_filters( 'wpseo_elementor_hidden_fields', '' ); + + echo '
                '; + } + + /** + * Returns the slug for the post being edited. + * + * @return string + */ + protected function get_post_slug() { + $post = $this->get_metabox_post(); + + // In case get_metabox_post returns null for whatever reason. + if ( ! $post instanceof WP_Post ) { + return ''; + } + + // Drafts might not have a post_name unless the slug has been manually changed. + // In this case we get it using get_sample_permalink. + if ( ! $post->post_name ) { + $sample = \get_sample_permalink( $post ); + + // Since get_sample_permalink runs through filters, ensure that it has the expected return value. + if ( \is_array( $sample ) && \count( $sample ) === 2 && \is_string( $sample[1] ) ) { + return $sample[1]; + } + } + + return $post->post_name; + } + + /** + * Returns post in metabox context. + * + * @return WP_Post|null + */ + protected function get_metabox_post() { + if ( $this->post !== null ) { + return $this->post; + } + + $this->post = $this->request_post->get_post(); + + return $this->post; + } + + /** + * Passes variables to js for use with the post-scraper. + * + * @param string $permalink The permalink. + * + * @return array + */ + protected function get_metabox_script_data( $permalink ) { + $post_formatter = new WPSEO_Metabox_Formatter( + new WPSEO_Post_Metabox_Formatter( $this->get_metabox_post(), [], $permalink ) + ); + + $values = $post_formatter->get_values(); + + /** This filter is documented in admin/filters/class-cornerstone-filter.php. */ + $post_types = \apply_filters( 'wpseo_cornerstone_post_types', \YoastSEO()->helpers->post_type->get_accessible_post_types() ); + if ( $values['cornerstoneActive'] && ! \in_array( $this->get_metabox_post()->post_type, $post_types, true ) ) { + $values['cornerstoneActive'] = false; + } + + $values['elementorMarkerStatus'] = $this->is_highlighting_available() ? 'enabled' : 'hidden'; + + return $values; + } + + /** + * Gets the permalink. + * + * @return string + */ + protected function get_permalink(): string { + $permalink = ''; + + if ( \is_object( $this->get_metabox_post() ) ) { + $permalink = \get_sample_permalink( $this->get_metabox_post()->ID ); + $permalink = $permalink[0]; + } + + return $permalink; + } + + /** + * Checks whether the highlighting functionality is available for Elementor: + * - in Free it's always available (as an upsell). + * - in Premium it's available as long as the version is 21.8-RC0 or above. + * + * @return bool Whether the highlighting functionality is available. + */ + private function is_highlighting_available() { + $is_premium = \YoastSEO()->helpers->product->is_premium(); + $premium_version = \YoastSEO()->helpers->product->get_premium_version(); + + return ! $is_premium || \version_compare( $premium_version, '21.8-RC0', '>=' ); + } + + /** + * Prepares the replace vars for localization. + * + * @return array Replace vars. + */ + protected function get_replace_vars() { + $cached_replacement_vars = []; + + $vars_to_cache = [ + 'date', + 'id', + 'sitename', + 'sitedesc', + 'sep', + 'page', + 'currentyear', + 'currentdate', + 'currentmonth', + 'currentday', + 'tag', + 'category', + 'category_title', + 'primary_category', + 'pt_single', + 'pt_plural', + 'modified', + 'name', + 'user_description', + 'pagetotal', + 'pagenumber', + 'post_year', + 'post_month', + 'post_day', + 'author_first_name', + 'author_last_name', + 'permalink', + 'post_content', + ]; + + foreach ( $vars_to_cache as $var ) { + $cached_replacement_vars[ $var ] = \wpseo_replace_vars( '%%' . $var . '%%', $this->get_metabox_post() ); + } + + // Merge custom replace variables with the WordPress ones. + return \array_merge( $cached_replacement_vars, $this->get_custom_replace_vars( $this->get_metabox_post() ) ); + } + + /** + * Prepares the recommended replace vars for localization. + * + * @return array Recommended replacement variables. + */ + protected function get_recommended_replace_vars() { + $recommended_replace_vars = new WPSEO_Admin_Recommended_Replace_Vars(); + + // What is recommended depends on the current context. + $post_type = $recommended_replace_vars->determine_for_post( $this->get_metabox_post() ); + + return $recommended_replace_vars->get_recommended_replacevars_for( $post_type ); + } + + /** + * Returns the list of replace vars that should be hidden inside the editor. + * + * @return string[] The hidden replace vars. + */ + protected function get_hidden_replace_vars() { + return ( new WPSEO_Replace_Vars() )->get_hidden_replace_vars(); + } + + /** + * Gets the custom replace variables for custom taxonomies and fields. + * + * @param WP_Post $post The post to check for custom taxonomies and fields. + * + * @return array Array containing all the replacement variables. + */ + protected function get_custom_replace_vars( $post ) { + return [ + 'custom_fields' => $this->get_custom_fields_replace_vars( $post ), + 'custom_taxonomies' => $this->get_custom_taxonomies_replace_vars( $post ), + ]; + } + + /** + * Gets the custom replace variables for custom taxonomies. + * + * @param WP_Post $post The post to check for custom taxonomies. + * + * @return array Array containing all the replacement variables. + */ + protected function get_custom_taxonomies_replace_vars( $post ) { + $taxonomies = \get_object_taxonomies( $post, 'objects' ); + $custom_replace_vars = []; + + foreach ( $taxonomies as $taxonomy_name => $taxonomy ) { + + if ( \is_string( $taxonomy ) ) { // If attachment, see https://core.trac.wordpress.org/ticket/37368 . + $taxonomy_name = $taxonomy; + $taxonomy = \get_taxonomy( $taxonomy_name ); + } + + if ( $taxonomy->_builtin && $taxonomy->public ) { + continue; + } + + $custom_replace_vars[ $taxonomy_name ] = [ + 'name' => $taxonomy->name, + 'description' => $taxonomy->description, + ]; + } + + return $custom_replace_vars; + } + + /** + * Gets the custom replace variables for custom fields. + * + * @param WP_Post $post The post to check for custom fields. + * + * @return array Array containing all the replacement variables. + */ + protected function get_custom_fields_replace_vars( $post ) { + $custom_replace_vars = []; + + // If no post object is passed, return the empty custom_replace_vars array. + if ( ! \is_object( $post ) ) { + return $custom_replace_vars; + } + + $custom_fields = \get_post_custom( $post->ID ); + + // Simply concatenate all fields containing replace vars so we can handle them all with a single regex find. + $replace_vars_fields = \implode( + ' ', + [ + \YoastSEO()->meta->for_post( $post->ID )->presentation->title, + \YoastSEO()->meta->for_post( $post->ID )->presentation->meta_description, + ] + ); + + \preg_match_all( '/%%cf_([A-Za-z0-9_]+)%%/', $replace_vars_fields, $matches ); + $fields_to_include = $matches[1]; + foreach ( $custom_fields as $custom_field_name => $custom_field ) { + // Skip private custom fields. + if ( \substr( $custom_field_name, 0, 1 ) === '_' ) { + continue; + } + + // Skip custom fields that are not used, new ones will be fetched dynamically. + if ( ! \in_array( $custom_field_name, $fields_to_include, true ) ) { + continue; + } + + // Skip custom field values that are serialized. + if ( \is_serialized( $custom_field[0] ) ) { + continue; + } + + $custom_replace_vars[ $custom_field_name ] = $custom_field[0]; + } + + return $custom_replace_vars; + } + + /** + * Determines the scope based on the post type. + * This can be used by the replacevar plugin to determine if a replacement needs to be executed. + * + * @return string String describing the current scope. + */ + protected function determine_scope() { + if ( $this->get_metabox_post()->post_type === 'page' ) { + return 'page'; + } + + return 'post'; + } + + /** + * Determines whether or not the current post type has registered taxonomies. + * + * @return bool Whether the current post type has taxonomies. + */ + protected function current_post_type_has_taxonomies() { + $post_taxonomies = \get_object_taxonomies( $this->get_metabox_post()->post_type ); + + return ! empty( $post_taxonomies ); + } + + /** + * Returns an array with shortcode tags for all registered shortcodes. + * + * @return array + */ + protected function get_valid_shortcode_tags() { + $shortcode_tags = []; + + foreach ( $GLOBALS['shortcode_tags'] as $tag => $description ) { + $shortcode_tags[] = $tag; + } + + return $shortcode_tags; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/exclude-elementor-post-types.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/exclude-elementor-post-types.php new file mode 100644 index 00000000..c87dae31 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/exclude-elementor-post-types.php @@ -0,0 +1,34 @@ +front_end = $front_end; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Disable default title and meta description output in the Web Stories plugin, + // and force-add title & meta description presenter, regardless of theme support. + \add_filter( 'web_stories_enable_document_title', '__return_false' ); + \add_filter( 'web_stories_enable_metadata', '__return_false' ); + \add_filter( 'wpseo_frontend_presenters', [ $this, 'filter_frontend_presenters' ], 10, 2 ); + + \add_action( 'web_stories_enable_schemaorg_metadata', '__return_false' ); + \add_action( 'web_stories_enable_open_graph_metadata', '__return_false' ); + \add_action( 'web_stories_enable_twitter_metadata', '__return_false' ); + + \add_action( 'web_stories_story_head', [ $this, 'web_stories_story_head' ], 1 ); + \add_filter( 'wpseo_schema_article_type', [ $this, 'filter_schema_article_type' ], 10, 2 ); + \add_filter( 'wpseo_metadesc', [ $this, 'filter_meta_description' ], 10, 2 ); + } + + /** + * Filter 'wpseo_frontend_presenters' - Allow filtering the presenter instances in or out of the request. + * + * @param array $presenters The presenters. + * @param Meta_Tags_Context $context The meta tags context for the current page. + * @return array Filtered presenters. + */ + public function filter_frontend_presenters( $presenters, $context ) { + if ( $context->indexable->object_sub_type !== 'web-story' ) { + return $presenters; + } + + $has_title_presenter = false; + + foreach ( $presenters as $presenter ) { + if ( $presenter instanceof Title_Presenter ) { + $has_title_presenter = true; + } + } + + if ( ! $has_title_presenter ) { + $presenters[] = new Title_Presenter(); + } + + return $presenters; + } + + /** + * Hooks into web story generation to modify output. + * + * @return void + */ + public function web_stories_story_head() { + \remove_action( 'web_stories_story_head', 'rel_canonical' ); + \add_action( 'web_stories_story_head', [ $this->front_end, 'call_wpseo_head' ], 9 ); + } + + /** + * Filters the meta description for stories. + * + * @param string $description The description sentence. + * @param Indexable_Presentation $presentation The presentation of an indexable. + * @return string The description sentence. + */ + public function filter_meta_description( $description, $presentation ) { + if ( $description || $presentation->model->object_sub_type !== 'web-story' ) { + return $description; + } + + return \get_the_excerpt( $presentation->model->object_id ); + } + + /** + * Filters Article type for Web Stories. + * + * @param string|string[] $type The Article type. + * @param Indexable $indexable The indexable. + * @return string|string[] Article type. + */ + public function filter_schema_article_type( $type, $indexable ) { + if ( $indexable->object_sub_type !== 'web-story' ) { + return $type; + } + + if ( \is_string( $type ) && $type === 'None' ) { + return 'Article'; + } + + return $type; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wincher-publish.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wincher-publish.php new file mode 100644 index 00000000..ba378fa5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wincher-publish.php @@ -0,0 +1,162 @@ +wincher_enabled = $wincher_enabled; + $this->options_helper = $options_helper; + $this->keyphrases_action = $keyphrases_action; + $this->account_action = $account_action; + } + + /** + * Initializes the integration. + * + * @return void + */ + public function register_hooks() { + /** + * Called in the REST API when submitting the post copy in the Block Editor. + * Runs the republishing of the copy onto the original. + */ + \add_action( 'rest_after_insert_post', [ $this, 'track_after_rest_api_request' ] ); + + /** + * Called by `wp_insert_post()` when submitting the post copy, which runs in two cases: + * - In the Classic Editor, where there's only one request that updates everything. + * - In the Block Editor, only when there are custom meta boxes. + */ + \add_action( 'wp_insert_post', [ $this, 'track_after_post_request' ], \PHP_INT_MAX, 2 ); + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * This integration should only be active when the feature is enabled, a token is available and automatically tracking is enabled. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ + Wincher_Conditional::class, + Wincher_Enabled_Conditional::class, + Wincher_Automatically_Track_Conditional::class, + Wincher_Token_Conditional::class, + ]; + } + + /** + * Determines whether the current request is a REST request. + * + * @return bool Whether the request is a REST request. + */ + public function is_rest_request() { + return \defined( 'REST_REQUEST' ) && \REST_REQUEST; + } + + /** + * Sends the keyphrases associated with the post to Wincher for automatic tracking. + * + * @param WP_Post $post The post to extract the keyphrases from. + * + * @return void + */ + public function track_request( $post ) { + if ( ! $post instanceof WP_Post ) { + return; + } + + // Filter out empty entries. + $keyphrases = \array_filter( $this->keyphrases_action->collect_keyphrases_from_post( $post ) ); + + if ( ! empty( $keyphrases ) ) { + $this->keyphrases_action->track_keyphrases( $keyphrases, $this->account_action->check_limit() ); + } + } + + /** + * Republishes the original post with the passed post, when using the Block Editor. + * + * @param WP_Post $post The copy's post object. + * + * @return void + */ + public function track_after_rest_api_request( $post ) { + $this->track_request( $post ); + } + + /** + * Republishes the original post with the passed post, when using the Classic Editor. + * + * Runs also in the Block Editor to save the custom meta data only when there + * are custom meta boxes. + * + * @param int $post_id The copy's post ID. + * @param WP_Post $post The copy's post object. + * + * @return void + */ + public function track_after_post_request( $post_id, $post ) { + if ( $this->is_rest_request() ) { + return; + } + + $this->track_request( $post ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-permalinks.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-permalinks.php new file mode 100644 index 00000000..39d4649e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-permalinks.php @@ -0,0 +1,112 @@ +indexable_helper = $indexable_helper; + } + + /** + * Registers the hooks. + * + * @codeCoverageIgnore + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_post_types_reset_permalinks', [ $this, 'filter_product_from_post_types' ] ); + \add_action( 'update_option_woocommerce_permalinks', [ $this, 'reset_woocommerce_permalinks' ], 10, 2 ); + } + + /** + * Filters the product post type from the post type. + * + * @param array $post_types The post types to filter. + * + * @return array The filtered post types. + */ + public function filter_product_from_post_types( $post_types ) { + unset( $post_types['product'] ); + + return $post_types; + } + + /** + * Resets the indexables for WooCommerce based on the changed permalink fields. + * + * @param array $old_value The old value. + * @param array $new_value The new value. + * + * @return void + */ + public function reset_woocommerce_permalinks( $old_value, $new_value ) { + $changed_options = \array_diff( $old_value, $new_value ); + + if ( \array_key_exists( 'product_base', $changed_options ) ) { + $this->indexable_helper->reset_permalink_indexables( 'post', 'product' ); + } + + if ( \array_key_exists( 'attribute_base', $changed_options ) ) { + $attribute_taxonomies = $this->get_attribute_taxonomies(); + + foreach ( $attribute_taxonomies as $attribute_name ) { + $this->indexable_helper->reset_permalink_indexables( 'term', $attribute_name ); + } + } + + if ( \array_key_exists( 'category_base', $changed_options ) ) { + $this->indexable_helper->reset_permalink_indexables( 'term', 'product_cat' ); + } + + if ( \array_key_exists( 'tag_base', $changed_options ) ) { + $this->indexable_helper->reset_permalink_indexables( 'term', 'product_tag' ); + } + } + + /** + * Retrieves the taxonomies based on the attributes. + * + * @return array The taxonomies. + */ + protected function get_attribute_taxonomies() { + $taxonomies = []; + foreach ( \wc_get_attribute_taxonomies() as $attribute_taxonomy ) { + $taxonomies[] = \wc_attribute_taxonomy_name( $attribute_taxonomy->attribute_name ); + } + + $taxonomies = \array_filter( $taxonomies ); + + return $taxonomies; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-post-edit.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-post-edit.php new file mode 100644 index 00000000..e19ad882 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce-post-edit.php @@ -0,0 +1,49 @@ +post_type === 'product' ) { + $values['metaDescriptionDate'] = ''; + } + + return $values; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce.php new file mode 100644 index 00000000..34053cd1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/woocommerce.php @@ -0,0 +1,350 @@ +options = $options; + $this->replace_vars = $replace_vars; + $this->context_memoizer = $context_memoizer; + $this->repository = $repository; + $this->pagination_helper = $pagination_helper; + $this->woocommerce_helper = $woocommerce_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_filter( 'wpseo_frontend_page_type_simple_page_id', [ $this, 'get_page_id' ] ); + \add_filter( 'wpseo_breadcrumb_indexables', [ $this, 'add_shop_to_breadcrumbs' ] ); + + \add_filter( 'wpseo_title', [ $this, 'title' ], 10, 2 ); + \add_filter( 'wpseo_metadesc', [ $this, 'description' ], 10, 2 ); + \add_filter( 'wpseo_canonical', [ $this, 'canonical' ], 10, 2 ); + \add_filter( 'wpseo_adjacent_rel_url', [ $this, 'adjacent_rel_url' ], 10, 3 ); + } + + /** + * Returns the correct canonical when WooCommerce is enabled. + * + * @param string $canonical The current canonical. + * @param Indexable_Presentation|null $presentation The indexable presentation. + * + * @return string The correct canonical. + */ + public function canonical( $canonical, $presentation = null ) { + if ( ! $this->woocommerce_helper->is_shop_page() ) { + return $canonical; + } + + $url = $this->get_shop_paginated_link( 'curr', $presentation ); + + if ( $url ) { + return $url; + } + + return $canonical; + } + + /** + * Returns correct adjacent pages when WooCommerce is enabled. + * + * @param string $link The current link. + * @param string $rel Link relationship, prev or next. + * @param Indexable_Presentation|null $presentation The indexable presentation. + * + * @return string The correct link. + */ + public function adjacent_rel_url( $link, $rel, $presentation = null ) { + if ( ! $this->woocommerce_helper->is_shop_page() ) { + return $link; + } + + if ( $rel !== 'next' && $rel !== 'prev' ) { + return $link; + } + + $url = $this->get_shop_paginated_link( $rel, $presentation ); + + if ( $url ) { + return $url; + } + + return $link; + } + + /** + * Adds a breadcrumb for the shop page. + * + * @param Indexable[] $indexables The array with indexables. + * + * @return Indexable[] The indexables to be shown in the breadcrumbs, with the shop page added. + */ + public function add_shop_to_breadcrumbs( $indexables ) { + $shop_page_id = $this->woocommerce_helper->get_shop_page_id(); + + if ( ! \is_int( $shop_page_id ) || $shop_page_id < 1 ) { + return $indexables; + } + + foreach ( $indexables as $index => $indexable ) { + if ( $indexable->object_type === 'post-type-archive' && $indexable->object_sub_type === 'product' ) { + $shop_page_indexable = $this->repository->find_by_id_and_type( $shop_page_id, 'post' ); + if ( \is_a( $shop_page_indexable, Indexable::class ) ) { + $indexables[ $index ] = $shop_page_indexable; + } + } + } + + return $indexables; + } + + /** + * Returns the ID of the WooCommerce shop page when the currently opened page is the shop page. + * + * @param int $page_id The page id. + * + * @return int The Page ID of the shop. + */ + public function get_page_id( $page_id ) { + if ( ! $this->woocommerce_helper->is_shop_page() ) { + return $page_id; + } + + return $this->woocommerce_helper->get_shop_page_id(); + } + + /** + * Handles the title. + * + * @param string $title The title. + * @param Indexable_Presentation|null $presentation The indexable presentation. + * + * @return string The title to use. + */ + public function title( $title, $presentation = null ) { + $presentation = $this->ensure_presentation( $presentation ); + + if ( $presentation->model->title ) { + return $title; + } + + if ( ! $this->woocommerce_helper->is_shop_page() ) { + return $title; + } + + if ( ! \is_archive() ) { + return $title; + } + + $shop_page_id = $this->woocommerce_helper->get_shop_page_id(); + if ( $shop_page_id < 1 ) { + return $title; + } + + $product_template_title = $this->get_product_template( 'title-product', $shop_page_id ); + if ( $product_template_title ) { + return $product_template_title; + } + + return $title; + } + + /** + * Handles the meta description. + * + * @param string $description The title. + * @param Indexable_Presentation|null $presentation The indexable presentation. + * + * @return string The description to use. + */ + public function description( $description, $presentation = null ) { + $presentation = $this->ensure_presentation( $presentation ); + + if ( $presentation->model->description ) { + return $description; + } + + if ( ! $this->woocommerce_helper->is_shop_page() ) { + return $description; + } + + if ( ! \is_archive() ) { + return $description; + } + + $shop_page_id = $this->woocommerce_helper->get_shop_page_id(); + if ( $shop_page_id < 1 ) { + return $description; + } + + $product_template_description = $this->get_product_template( 'metadesc-product', $shop_page_id ); + if ( $product_template_description ) { + return $product_template_description; + } + + return $description; + } + + /** + * Uses template for the given option name and replace the replacement variables on it. + * + * @param string $option_name The option name to get the template for. + * @param string $shop_page_id The page id to retrieve template for. + * + * @return string The rendered value. + */ + protected function get_product_template( $option_name, $shop_page_id ) { + $template = $this->options->get( $option_name ); + $page = \get_post( $shop_page_id ); + + return $this->replace_vars->replace( $template, $page ); + } + + /** + * Get paginated link for shop page. + * + * @param string $rel Link relationship, prev or next or curr. + * @param Indexable_Presentation|null $presentation The indexable presentation. + * + * @return string|null The link. + */ + protected function get_shop_paginated_link( $rel, $presentation = null ) { + $presentation = $this->ensure_presentation( $presentation ); + + $permalink = $presentation->permalink; + if ( ! $permalink ) { + return null; + } + + $current_page = \max( 1, $this->pagination_helper->get_current_archive_page_number() ); + + if ( $rel === 'curr' && $current_page === 1 ) { + return $permalink; + } + + if ( $rel === 'curr' && $current_page > 1 ) { + return $this->pagination_helper->get_paginated_url( $permalink, $current_page ); + } + + if ( $rel === 'prev' && $current_page === 2 ) { + return $permalink; + } + + if ( $rel === 'prev' && $current_page > 2 ) { + return $this->pagination_helper->get_paginated_url( $permalink, ( $current_page - 1 ) ); + } + + if ( $rel === 'next' && $current_page < $this->pagination_helper->get_number_of_archive_pages() ) { + return $this->pagination_helper->get_paginated_url( $permalink, ( $current_page + 1 ) ); + } + + return null; + } + + /** + * Ensures a presentation is available. + * + * @param Indexable_Presentation $presentation The indexable presentation. + * + * @return Indexable_Presentation The presentation, taken from the current page if the input was invalid. + */ + protected function ensure_presentation( $presentation ) { + if ( \is_a( $presentation, Indexable_Presentation::class ) ) { + return $presentation; + } + + $context = $this->context_memoizer->for_current_page(); + + return $context->presentation; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml-wpseo-notification.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml-wpseo-notification.php new file mode 100644 index 00000000..1e32e4bc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml-wpseo-notification.php @@ -0,0 +1,120 @@ +short_link_helper = $short_link_helper; + $this->notification_center = $notification_center; + $this->wpml_wpseo_conditional = $wpml_wpseo_conditional; + } + + /** + * Initializes the integration. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_notices', [ $this, 'notify_not_installed' ] ); + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * This integration should only be active when WPML is installed and activated. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ WPML_Conditional::class ]; + } + + /** + * Notify the user that the Yoast SEO Multilingual plugin is not installed + * (when the WPML plugin is installed). + * + * Remove the notification again when it is installed. + * + * @return void + */ + public function notify_not_installed() { + if ( ! $this->wpml_wpseo_conditional->is_met() ) { + $this->notification_center->add_notification( $this->get_notification() ); + return; + } + $this->notification_center->remove_notification_by_id( self::NOTIFICATION_ID ); + } + + /** + * Generates the notification to show to the user when WPML is installed, + * but the Yoast SEO Multilingual plugin is not. + * + * @return Yoast_Notification The notification. + */ + protected function get_notification() { + return new Yoast_Notification( + \sprintf( + /* translators: %1$s expands to an opening anchor tag, %2$s expands to an closing anchor tag. */ + \__( 'We notice that you have installed WPML. To make sure your canonical URLs are set correctly, %1$sinstall and activate the WPML SEO add-on%2$s as well!', 'wordpress-seo' ), + '', + '' + ), + [ + 'id' => self::NOTIFICATION_ID, + 'type' => Yoast_Notification::WARNING, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml.php new file mode 100644 index 00000000..2bfcc819 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/third-party/wpml.php @@ -0,0 +1,70 @@ +clear_import_statuses(); + } + + /** + * Clears the persistent import statuses. + * + * @return void + */ + public function clear_import_statuses() { + $yoast_options = \get_site_option( 'wpseo' ); + + if ( isset( $yoast_options['importing_completed'] ) ) { + $yoast_options['importing_completed'] = []; + + \update_site_option( 'wpseo', $yoast_options ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/addon-update-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/addon-update-watcher.php new file mode 100644 index 00000000..2e6ef3eb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/addon-update-watcher.php @@ -0,0 +1,229 @@ +are_auto_updates_enabled( self::WPSEO_FREE_PLUGIN_ID, $auto_updated_plugins ) ) { + return \sprintf( + '%s', + \sprintf( + /* Translators: %1$s resolves to Yoast SEO. */ + \esc_html__( 'Auto-updates are enabled based on this setting for %1$s.', 'wordpress-seo' ), + 'Yoast SEO' + ) + ); + } + + return \sprintf( + '%s', + \sprintf( + /* Translators: %1$s resolves to Yoast SEO. */ + \esc_html__( 'Auto-updates are disabled based on this setting for %1$s.', 'wordpress-seo' ), + 'Yoast SEO' + ) + ); + } + + /** + * Handles the situation where the auto_update_plugins option did not previously exist. + * + * @param string $option The name of the option that is being created. + * @param array|mixed $value The new (and first) value of the option that is being created. + * + * @return void + */ + public function call_toggle_auto_updates_with_empty_array( $option, $value ) { + if ( $option !== 'auto_update_plugins' ) { + return; + } + + $this->toggle_auto_updates_for_add_ons( $option, $value, [] ); + } + + /** + * Enables premium auto updates when free are enabled and the other way around. + * + * @param string $option The name of the option that has been updated. + * @param array $new_value The new value of the `auto_update_plugins` option. + * @param array $old_value The old value of the `auto_update_plugins` option. + * + * @return void + */ + public function toggle_auto_updates_for_add_ons( $option, $new_value, $old_value ) { + if ( $option !== 'auto_update_plugins' ) { + // If future versions of WordPress change this filter's behavior, our behavior should stay consistent. + return; + } + + if ( ! \is_array( $old_value ) || ! \is_array( $new_value ) ) { + return; + } + + $auto_updates_are_enabled = $this->are_auto_updates_enabled( self::WPSEO_FREE_PLUGIN_ID, $new_value ); + $auto_updates_were_enabled = $this->are_auto_updates_enabled( self::WPSEO_FREE_PLUGIN_ID, $old_value ); + + if ( $auto_updates_are_enabled === $auto_updates_were_enabled ) { + // Auto-updates for Yoast SEO have stayed the same, so have neither been enabled or disabled. + return; + } + + $auto_updates_have_been_enabled = $auto_updates_are_enabled && ! $auto_updates_were_enabled; + + if ( $auto_updates_have_been_enabled ) { + $this->enable_auto_updates_for_addons( $new_value ); + return; + } + else { + $this->disable_auto_updates_for_addons( $new_value ); + return; + } + + if ( ! $auto_updates_are_enabled ) { + return; + } + + $auto_updates_have_been_removed = false; + foreach ( self::ADD_ON_PLUGIN_FILES as $addon ) { + if ( ! $this->are_auto_updates_enabled( $addon, $new_value ) ) { + $auto_updates_have_been_removed = true; + break; + } + } + + if ( $auto_updates_have_been_removed ) { + $this->enable_auto_updates_for_addons( $new_value ); + } + } + + /** + * Trigger a change in the auto update detection whenever a new Yoast addon is activated. + * + * @param string $plugin The plugin that is activated. + * + * @return void + */ + public function maybe_toggle_auto_updates_for_new_install( $plugin ) { + $not_a_yoast_addon = ! \in_array( $plugin, self::ADD_ON_PLUGIN_FILES, true ); + + if ( $not_a_yoast_addon ) { + return; + } + + $enabled_auto_updates = \get_site_option( 'auto_update_plugins' ); + $this->toggle_auto_updates_for_add_ons( 'auto_update_plugins', $enabled_auto_updates, [] ); + } + + /** + * Enables auto-updates for all addons. + * + * @param string[] $auto_updated_plugins The current list of auto-updated plugins. + * + * @return void + */ + protected function enable_auto_updates_for_addons( $auto_updated_plugins ) { + $plugins = \array_unique( \array_merge( $auto_updated_plugins, self::ADD_ON_PLUGIN_FILES ) ); + \update_site_option( 'auto_update_plugins', $plugins ); + } + + /** + * Disables auto-updates for all addons. + * + * @param string[] $auto_updated_plugins The current list of auto-updated plugins. + * + * @return void + */ + protected function disable_auto_updates_for_addons( $auto_updated_plugins ) { + $plugins = \array_values( \array_diff( $auto_updated_plugins, self::ADD_ON_PLUGIN_FILES ) ); + \update_site_option( 'auto_update_plugins', $plugins ); + } + + /** + * Checks whether auto updates for a plugin are enabled. + * + * @param string $plugin_id The plugin ID. + * @param array $auto_updated_plugins The array of auto updated plugins. + * + * @return bool Whether auto updates for a plugin are enabled. + */ + protected function are_auto_updates_enabled( $plugin_id, $auto_updated_plugins ) { + if ( $auto_updated_plugins === false || ! \is_array( $auto_updated_plugins ) ) { + return false; + } + + return \in_array( $plugin_id, $auto_updated_plugins, true ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/auto-update-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/auto-update-watcher.php new file mode 100644 index 00000000..3bbc1264 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/auto-update-watcher.php @@ -0,0 +1,58 @@ +notification_center = $notification_center; + } + + /** + * Initializes the integration. + * + * On admin_init, it is checked whether the notification to auto-update Yoast SEO needs to be shown or removed. + * This is also done when major WP core updates are being enabled or disabled, + * and when automatic updates for Yoast SEO are being enabled or disabled. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'remove_notification' ] ); + } + + /** + * Removes the notification from the notification center, if it exists. + * + * @return void + */ + public function remove_notification() { + $this->notification_center->remove_notification_by_id( self::NOTIFICATION_ID ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-ancestor-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-ancestor-watcher.php new file mode 100644 index 00000000..9c16794b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-ancestor-watcher.php @@ -0,0 +1,242 @@ +indexable_repository = $indexable_repository; + $this->indexable_hierarchy_builder = $indexable_hierarchy_builder; + $this->indexable_hierarchy_repository = $indexable_hierarchy_repository; + $this->indexable_helper = $indexable_helper; + $this->permalink_helper = $permalink_helper; + $this->post_type_helper = $post_type_helper; + } + + /** + * Registers the appropriate hooks. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wpseo_save_indexable', [ $this, 'reset_children' ], \PHP_INT_MAX, 2 ); + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Migrations_Conditional::class ]; + } + + /** + * If an indexable's permalink has changed, updates its children in the hierarchy table and resets the children's permalink. + * + * @param Indexable $indexable The indexable. + * @param Indexable $indexable_before The old indexable. + * + * @return bool True if the children were reset. + */ + public function reset_children( $indexable, $indexable_before ) { + if ( ! \in_array( $indexable->object_type, [ 'post', 'term' ], true ) ) { + return false; + } + + // If the permalink was null it means it was reset instead of changed. + if ( $indexable->permalink === $indexable_before->permalink || \is_null( $indexable_before->permalink ) ) { + return false; + } + + $child_indexable_ids = $this->indexable_hierarchy_repository->find_children( $indexable ); + $child_indexables = $this->indexable_repository->find_by_ids( $child_indexable_ids ); + + \array_walk( $child_indexables, [ $this, 'update_hierarchy_and_permalink' ] ); + if ( $indexable->object_type === 'term' ) { + $child_indexables_for_term = $this->get_children_for_term( $indexable->object_id, $child_indexables ); + + \array_walk( $child_indexables_for_term, [ $this, 'update_hierarchy_and_permalink' ] ); + } + + return true; + } + + /** + * Finds all child indexables for the given term. + * + * @param int $term_id Term to fetch the indexable for. + * @param array $child_indexables The already known child indexables. + * + * @return array The list of additional child indexables for a given term. + */ + public function get_children_for_term( $term_id, array $child_indexables ) { + // Finds object_ids (posts) for the term. + $post_object_ids = $this->get_object_ids_for_term( $term_id, $child_indexables ); + + // Removes the objects that are already present in the children. + $existing_post_indexables = \array_filter( + $child_indexables, + static function ( $indexable ) { + return $indexable->object_type === 'post'; + } + ); + + $existing_post_object_ids = \wp_list_pluck( $existing_post_indexables, 'object_id' ); + $post_object_ids = \array_diff( $post_object_ids, $existing_post_object_ids ); + + // Finds the indexables for the fetched post_object_ids. + $post_indexables = $this->indexable_repository->find_by_multiple_ids_and_type( $post_object_ids, 'post', false ); + + // Finds the indexables for the posts that are attached to the term. + $post_indexable_ids = \wp_list_pluck( $post_indexables, 'id' ); + $additional_indexable_ids = $this->indexable_hierarchy_repository->find_children_by_ancestor_ids( $post_indexable_ids ); + + // Makes sure we only have indexable id's that we haven't fetched before. + $additional_indexable_ids = \array_diff( $additional_indexable_ids, $post_indexable_ids ); + + // Finds the additional indexables. + $additional_indexables = $this->indexable_repository->find_by_ids( $additional_indexable_ids ); + + // Merges all fetched indexables. + return \array_merge( $post_indexables, $additional_indexables ); + } + + /** + * Updates the indexable hierarchy and indexable permalink. + * + * @param Indexable $indexable The indexable to update the hierarchy and permalink for. + * + * @return void + */ + protected function update_hierarchy_and_permalink( $indexable ) { + if ( \is_a( $indexable, Indexable::class ) ) { + $this->indexable_hierarchy_builder->build( $indexable ); + + $indexable->permalink = $this->permalink_helper->get_permalink_for_indexable( $indexable ); + $this->indexable_helper->save_indexable( $indexable ); + } + } + + /** + * Retrieves the object id's for a term based on the term-post relationship. + * + * @param int $term_id The term to get the object id's for. + * @param array $child_indexables The child indexables. + * + * @return array List with object ids for the term. + */ + protected function get_object_ids_for_term( $term_id, $child_indexables ) { + global $wpdb; + + $filter_terms = static function ( $child ) { + return $child->object_type === 'term'; + }; + + $child_terms = \array_filter( $child_indexables, $filter_terms ); + $child_object_ids = \array_merge( [ $term_id ], \wp_list_pluck( $child_terms, 'object_id' ) ); + + // Get the term-taxonomy id's for the term and its children. + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching + $term_taxonomy_ids = $wpdb->get_col( + $wpdb->prepare( + 'SELECT term_taxonomy_id + FROM %i + WHERE term_id IN( ' . \implode( ', ', \array_fill( 0, ( \count( $child_object_ids ) ), '%s' ) ) . ' )', + $wpdb->term_taxonomy, + ...$child_object_ids + ) + ); + + // In the case of faulty data having been saved the above query can return 0 results. + if ( empty( $term_taxonomy_ids ) ) { + return []; + } + + // Get the (post) object id's that are attached to the term. + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_col( + $wpdb->prepare( + 'SELECT DISTINCT object_id + FROM %i + WHERE term_taxonomy_id IN( ' . \implode( ', ', \array_fill( 0, \count( $term_taxonomy_ids ), '%s' ) ) . ' )', + $wpdb->term_relationships, + ...$term_taxonomy_ids + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-attachment-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-attachment-watcher.php new file mode 100644 index 00000000..36cb580b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-attachment-watcher.php @@ -0,0 +1,144 @@ + The conditionals. + */ + public static function get_conditionals() { + return [ Migrations_Conditional::class ]; + } + + /** + * Indexable_Attachment_Watcher constructor. + * + * @param Indexing_Helper $indexing_helper The indexing helper. + * @param Attachment_Cleanup_Helper $attachment_cleanup The attachment cleanup helper. + * @param Yoast_Notification_Center $notification_center The notification center. + * @param Indexable_Helper $indexable_helper The indexable helper. + */ + public function __construct( + Indexing_Helper $indexing_helper, + Attachment_Cleanup_Helper $attachment_cleanup, + Yoast_Notification_Center $notification_center, + Indexable_Helper $indexable_helper + ) { + $this->indexing_helper = $indexing_helper; + $this->attachment_cleanup = $attachment_cleanup; + $this->notification_center = $notification_center; + $this->indexable_helper = $indexable_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_wpseo_titles', [ $this, 'check_option' ], 20, 2 ); + } + + /** + * Checks if the disable-attachment key in wpseo_titles has a change in value, and if so, + * either it cleans up attachment indexables when it has been toggled to true, + * or it starts displaying a notification for the user to start a new SEO optimization. + * + * @phpcs:disable SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingTraversableTypeHintSpecification + * + * @param array $old_value The old value of the wpseo_titles option. + * @param array $new_value The new value of the wpseo_titles option. + * + * @phpcs:enable + * @return void + */ + public function check_option( $old_value, $new_value ) { + // If this is the first time saving the option, in which case its value would be false. + if ( $old_value === false ) { + $old_value = []; + } + + // If either value is not an array, return. + if ( ! \is_array( $old_value ) || ! \is_array( $new_value ) ) { + return; + } + + // If both values aren't set, they haven't changed. + if ( ! isset( $old_value['disable-attachment'] ) && ! isset( $new_value['disable-attachment'] ) ) { + return; + } + + // If a new value has been set for 'disable-attachment', there's two things we might need to do, depending on what's the new value. + if ( $old_value['disable-attachment'] !== $new_value['disable-attachment'] ) { + // Delete cache because we now might have new stuff to index or old unindexed stuff don't need indexing anymore. + \delete_transient( Indexable_Post_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( Indexable_Post_Indexation_Action::UNINDEXED_LIMITED_COUNT_TRANSIENT ); + + // Set this core option (introduced in WP 6.4) to ensure consistency. + if ( \get_option( 'wp_attachment_pages_enabled' ) !== false ) { + \update_option( 'wp_attachment_pages_enabled', (int) ! $new_value['disable-attachment'] ); + } + + switch ( $new_value['disable-attachment'] ) { + case false: + $this->indexing_helper->set_reason( Indexing_Reasons::REASON_ATTACHMENTS_MADE_ENABLED ); + return; + case true: + $this->attachment_cleanup->remove_attachment_indexables( false ); + $this->attachment_cleanup->clean_attachment_links_from_target_indexable_ids( false ); + + if ( $this->indexable_helper->should_index_indexables() && ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ) ) { + // This just schedules the cleanup routine cron again. + \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + return; + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-archive-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-archive-watcher.php new file mode 100644 index 00000000..7452cc42 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-archive-watcher.php @@ -0,0 +1,78 @@ +indexable_helper = $indexable_helper; + } + + /** + * Check if the author archives are disabled whenever the `wpseo_titles` option + * changes. + * + * @return void + */ + public function register_hooks() { + \add_action( + 'update_option_wpseo_titles', + [ $this, 'reschedule_indexable_cleanup_when_author_archives_are_disabled' ], + 10, + 2 + ); + } + + /** + * This watcher should only be run when the migrations have been run. + * (Otherwise there may not be an indexable table to clean). + * + * @return string[] The conditionals. + */ + public static function get_conditionals() { + return [ Migrations_Conditional::class ]; + } + + /** + * Reschedule the indexable cleanup routine if the author archives are disabled. + * to make sure that all authors are removed from the indexables table. + * + * When author archives are disabled, they can never be indexed. + * + * @phpcs:disable SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingTraversableTypeHintSpecification + * + * @param array $old_value The old `wpseo_titles` option value. + * @param array $new_value The new `wpseo_titles` option value. + * + * @phpcs:enable + * @return void + */ + public function reschedule_indexable_cleanup_when_author_archives_are_disabled( $old_value, $new_value ) { + if ( $old_value['disable-author'] !== true && $new_value['disable-author'] === true && $this->indexable_helper->should_index_indexables() ) { + $cleanup_not_yet_scheduled = ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ); + if ( $cleanup_not_yet_scheduled ) { + \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-watcher.php new file mode 100644 index 00000000..00960cda --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-author-watcher.php @@ -0,0 +1,141 @@ +repository = $repository; + $this->indexable_helper = $indexable_helper; + $this->builder = $builder; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'user_register', [ $this, 'build_indexable' ], \PHP_INT_MAX ); + \add_action( 'profile_update', [ $this, 'build_indexable' ], \PHP_INT_MAX ); + \add_action( 'deleted_user', [ $this, 'handle_user_delete' ], 10, 2 ); + } + + /** + * Deletes user meta. + * + * @param int $user_id User ID to delete the metadata of. + * + * @return void + */ + public function delete_indexable( $user_id ) { + $indexable = $this->repository->find_by_id_and_type( $user_id, 'user', false ); + + if ( ! $indexable ) { + return; + } + + $indexable->delete(); + \do_action( 'wpseo_indexable_deleted', $indexable ); + } + + /** + * Saves user meta. + * + * @param int $user_id User ID. + * + * @return void + */ + public function build_indexable( $user_id ) { + $indexable = $this->repository->find_by_id_and_type( $user_id, 'user', false ); + $indexable = $this->builder->build_for_id_and_type( $user_id, 'user', $indexable ); + + if ( $indexable ) { + $indexable->object_last_modified = \max( $indexable->object_last_modified, \current_time( 'mysql' ) ); + $this->indexable_helper->save_indexable( $indexable ); + } + } + + /** + * Handles the case in which an author is deleted. + * + * @param int $user_id User ID. + * @param int|null $new_user_id The ID of the user the old author's posts are reassigned to. + * + * @return void + */ + public function handle_user_delete( $user_id, $new_user_id = null ) { + if ( $new_user_id !== null ) { + $this->maybe_reassign_user_indexables( $user_id, $new_user_id ); + } + + $this->delete_indexable( $user_id ); + } + + /** + * Reassigns the indexables of a user to another user. + * + * @param int $user_id The user ID. + * @param int $new_user_id The user ID to reassign the indexables to. + * + * @return void + */ + public function maybe_reassign_user_indexables( $user_id, $new_user_id ) { + $this->repository->query() + ->set( 'author_id', $new_user_id ) + ->where( 'author_id', $user_id ) + ->update_many(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-category-permalink-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-category-permalink-watcher.php new file mode 100644 index 00000000..3d82422d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-category-permalink-watcher.php @@ -0,0 +1,56 @@ +indexable_helper->reset_permalink_indexables( 'term', 'category', Indexing_Reasons::REASON_CATEGORY_BASE_PREFIX ); + // Clear the rewrites, so the new permalink structure is used. + WPSEO_Utils::clear_rewrites(); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-date-archive-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-date-archive-watcher.php new file mode 100644 index 00000000..eeca6ebd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-date-archive-watcher.php @@ -0,0 +1,96 @@ +repository = $repository; + $this->builder = $builder; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_wpseo_titles', [ $this, 'check_option' ], 10, 2 ); + } + + /** + * Checks if the date archive indexable needs to be rebuild based on option values. + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * + * @return void + */ + public function check_option( $old_value, $new_value ) { + $relevant_keys = [ 'title-archive-wpseo', 'breadcrumbs-archiveprefix', 'metadesc-archive-wpseo', 'noindex-archive-wpseo' ]; + + foreach ( $relevant_keys as $key ) { + // If both values aren't set they haven't changed. + if ( ! isset( $old_value[ $key ] ) && ! isset( $new_value[ $key ] ) ) { + continue; + } + + // If the value was set but now isn't, is set but wasn't or is not the same it has changed. + if ( ! isset( $old_value[ $key ] ) || ! isset( $new_value[ $key ] ) || $old_value[ $key ] !== $new_value[ $key ] ) { + $this->build_indexable(); + return; + } + } + } + + /** + * Saves the date archive. + * + * @return void + */ + public function build_indexable() { + $indexable = $this->repository->find_for_date_archive( false ); + $this->builder->build_for_date_archive( $indexable ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-home-page-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-home-page-watcher.php new file mode 100644 index 00000000..913780c6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-home-page-watcher.php @@ -0,0 +1,137 @@ +repository = $repository; + $this->indexable_helper = $indexable_helper; + $this->builder = $builder; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_wpseo_titles', [ $this, 'check_option' ], 15, 3 ); + \add_action( 'update_option_wpseo_social', [ $this, 'check_option' ], 15, 3 ); + \add_action( 'update_option_blog_public', [ $this, 'build_indexable' ] ); + \add_action( 'update_option_blogdescription', [ $this, 'build_indexable' ] ); + } + + /** + * Checks if the home page indexable needs to be rebuild based on option values. + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * @param string $option The name of the option. + * + * @return void + */ + public function check_option( $old_value, $new_value, $option ) { + $relevant_keys = [ + 'wpseo_titles' => [ + 'title-home-wpseo', + 'breadcrumbs-home', + 'metadesc-home-wpseo', + 'open_graph_frontpage_title', + 'open_graph_frontpage_desc', + 'open_graph_frontpage_image', + ], + ]; + + if ( ! isset( $relevant_keys[ $option ] ) ) { + return; + } + + foreach ( $relevant_keys[ $option ] as $key ) { + // If both values aren't set they haven't changed. + if ( ! isset( $old_value[ $key ] ) && ! isset( $new_value[ $key ] ) ) { + continue; + } + + // If the value was set but now isn't, is set but wasn't or is not the same it has changed. + if ( ! isset( $old_value[ $key ] ) || ! isset( $new_value[ $key ] ) || $old_value[ $key ] !== $new_value[ $key ] ) { + $this->build_indexable(); + return; + } + } + } + + /** + * Saves the home page. + * + * @return void + */ + public function build_indexable() { + $indexable = $this->repository->find_for_home_page( false ); + + if ( $indexable === false && ! $this->indexable_helper->should_index_indexables() ) { + return; + } + + $indexable = $this->builder->build_for_home_page( $indexable ); + + if ( $indexable ) { + $indexable->object_last_modified = \max( $indexable->object_last_modified, \current_time( 'mysql' ) ); + $indexable->save(); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-homeurl-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-homeurl-watcher.php new file mode 100644 index 00000000..0677d18f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-homeurl-watcher.php @@ -0,0 +1,114 @@ +post_type = $post_type; + $this->options_helper = $options; + $this->indexable_helper = $indexable; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_home', [ $this, 'reset_permalinks' ] ); + \add_action( 'wpseo_permalink_structure_check', [ $this, 'force_reset_permalinks' ] ); + } + + /** + * Resets the permalinks for everything that is related to the permalink structure. + * + * @return void + */ + public function reset_permalinks() { + $this->indexable_helper->reset_permalink_indexables( null, null, Indexing_Reasons::REASON_HOME_URL_OPTION ); + + // Reset the home_url option. + $this->options_helper->set( 'home_url', \get_home_url() ); + } + + /** + * Resets the permalink indexables automatically, if necessary. + * + * @return bool Whether the request ran. + */ + public function force_reset_permalinks() { + if ( $this->should_reset_permalinks() ) { + $this->reset_permalinks(); + + if ( \defined( 'WP_CLI' ) && \WP_CLI ) { + WP_CLI::success( \__( 'All permalinks were successfully reset', 'wordpress-seo' ) ); + } + + return true; + } + + return false; + } + + /** + * Checks whether permalinks should be reset. + * + * @return bool Whether the permalinks should be reset. + */ + public function should_reset_permalinks() { + return \get_home_url() !== $this->options_helper->get( 'home_url' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-permalink-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-permalink-watcher.php new file mode 100644 index 00000000..0ac6af41 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-permalink-watcher.php @@ -0,0 +1,279 @@ +post_type = $post_type; + $this->options_helper = $options; + $this->indexable_helper = $indexable; + $this->taxonomy_helper = $taxonomy_helper; + + $this->schedule_cron(); + } + + /** + * Registers the hooks. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_permalink_structure', [ $this, 'reset_permalinks' ] ); + \add_action( 'update_option_category_base', [ $this, 'reset_permalinks_term' ], 10, 3 ); + \add_action( 'update_option_tag_base', [ $this, 'reset_permalinks_term' ], 10, 3 ); + \add_action( 'wpseo_permalink_structure_check', [ $this, 'force_reset_permalinks' ] ); + \add_action( 'wpseo_deactivate', [ $this, 'unschedule_cron' ] ); + } + + /** + * Resets the permalinks for everything that is related to the permalink structure. + * + * @return void + */ + public function reset_permalinks() { + + $post_types = $this->get_post_types(); + foreach ( $post_types as $post_type ) { + $this->reset_permalinks_post_type( $post_type ); + } + + $taxonomies = $this->get_taxonomies_for_post_types( $post_types ); + foreach ( $taxonomies as $taxonomy ) { + $this->indexable_helper->reset_permalink_indexables( 'term', $taxonomy ); + } + + $this->indexable_helper->reset_permalink_indexables( 'user' ); + $this->indexable_helper->reset_permalink_indexables( 'date-archive' ); + $this->indexable_helper->reset_permalink_indexables( 'system-page' ); + + // Always update `permalink_structure` in the wpseo option. + $this->options_helper->set( 'permalink_structure', \get_option( 'permalink_structure' ) ); + } + + /** + * Resets the permalink for the given post type. + * + * @param string $post_type The post type to reset. + * + * @return void + */ + public function reset_permalinks_post_type( $post_type ) { + $this->indexable_helper->reset_permalink_indexables( 'post', $post_type ); + $this->indexable_helper->reset_permalink_indexables( 'post-type-archive', $post_type ); + } + + /** + * Resets the term indexables when the base has been changed. + * + * @param string $old_value Unused. The old option value. + * @param string $new_value Unused. The new option value. + * @param string $type The option name. + * + * @return void + */ + public function reset_permalinks_term( $old_value, $new_value, $type ) { + $subtype = $type; + + $reason = Indexing_Reasons::REASON_PERMALINK_SETTINGS; + + // When the subtype contains _base, just strip it. + if ( \strstr( $subtype, '_base' ) ) { + $subtype = \substr( $type, 0, -5 ); + } + + if ( $subtype === 'tag' ) { + $subtype = 'post_tag'; + $reason = Indexing_Reasons::REASON_TAG_BASE_PREFIX; + } + + if ( $subtype === 'category' ) { + $reason = Indexing_Reasons::REASON_CATEGORY_BASE_PREFIX; + } + + $this->indexable_helper->reset_permalink_indexables( 'term', $subtype, $reason ); + } + + /** + * Resets the permalink indexables automatically, if necessary. + * + * @return bool Whether the reset request ran. + */ + public function force_reset_permalinks() { + if ( \get_option( 'tag_base' ) !== $this->options_helper->get( 'tag_base_url' ) ) { + $this->reset_permalinks_term( null, null, 'tag_base' ); + $this->options_helper->set( 'tag_base_url', \get_option( 'tag_base' ) ); + } + if ( \get_option( 'category_base' ) !== $this->options_helper->get( 'category_base_url' ) ) { + $this->reset_permalinks_term( null, null, 'category_base' ); + $this->options_helper->set( 'category_base_url', \get_option( 'category_base' ) ); + } + + if ( $this->should_reset_permalinks() ) { + $this->reset_permalinks(); + + return true; + } + + $this->reset_altered_custom_taxonomies(); + + return true; + } + + /** + * Checks whether the permalinks should be reset after `permalink_structure` has changed. + * + * @return bool Whether the permalinks should be reset. + */ + public function should_reset_permalinks() { + return \get_option( 'permalink_structure' ) !== $this->options_helper->get( 'permalink_structure' ); + } + + /** + * Resets custom taxonomies if their slugs have changed. + * + * @return void + */ + public function reset_altered_custom_taxonomies() { + $taxonomies = $this->taxonomy_helper->get_custom_taxonomies(); + $custom_taxonomy_bases = $this->options_helper->get( 'custom_taxonomy_slugs', [] ); + $new_taxonomy_bases = []; + + foreach ( $taxonomies as $taxonomy ) { + $taxonomy_slug = $this->taxonomy_helper->get_taxonomy_slug( $taxonomy ); + + $new_taxonomy_bases[ $taxonomy ] = $taxonomy_slug; + + if ( ! \array_key_exists( $taxonomy, $custom_taxonomy_bases ) ) { + continue; + } + + if ( $taxonomy_slug !== $custom_taxonomy_bases[ $taxonomy ] ) { + $this->indexable_helper->reset_permalink_indexables( 'term', $taxonomy ); + } + } + + $this->options_helper->set( 'custom_taxonomy_slugs', $new_taxonomy_bases ); + } + + /** + * Retrieves a list with the public post types. + * + * @return array The post types. + */ + protected function get_post_types() { + /** + * Filter: Gives the possibility to filter out post types. + * + * @param array $post_types The post type names. + * + * @return array The post types. + */ + $post_types = \apply_filters( 'wpseo_post_types_reset_permalinks', $this->post_type->get_public_post_types() ); + + return $post_types; + } + + /** + * Retrieves the taxonomies that belongs to the public post types. + * + * @param array $post_types The post types to get taxonomies for. + * + * @return array The retrieved taxonomies. + */ + protected function get_taxonomies_for_post_types( $post_types ) { + $taxonomies = []; + foreach ( $post_types as $post_type ) { + $taxonomies[] = \get_object_taxonomies( $post_type, 'names' ); + } + + $taxonomies = \array_merge( [], ...$taxonomies ); + $taxonomies = \array_unique( $taxonomies ); + + return $taxonomies; + } + + /** + * Schedules the WP-Cron job to check the permalink_structure status. + * + * @return void + */ + protected function schedule_cron() { + if ( \wp_next_scheduled( 'wpseo_permalink_structure_check' ) ) { + return; + } + + \wp_schedule_event( \time(), 'daily', 'wpseo_permalink_structure_check' ); + } + + /** + * Unschedules the WP-Cron job to check the permalink_structure status. + * + * @return void + */ + public function unschedule_cron() { + if ( ! \wp_next_scheduled( 'wpseo_permalink_structure_check' ) ) { + return; + } + + \wp_clear_scheduled_hook( 'wpseo_permalink_structure_check' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-meta-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-meta-watcher.php new file mode 100644 index 00000000..6e8d7331 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-meta-watcher.php @@ -0,0 +1,111 @@ + + */ + protected $post_ids_to_update = []; + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return string[] + */ + public static function get_conditionals() { + return [ Migrations_Conditional::class ]; + } + + /** + * Indexable_Postmeta_Watcher constructor. + * + * @param Indexable_Post_Watcher $post_watcher The post watcher. + */ + public function __construct( Indexable_Post_Watcher $post_watcher ) { + $this->post_watcher = $post_watcher; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + // Register all posts whose meta have changed. + \add_action( 'added_post_meta', [ $this, 'add_post_id' ], 10, 3 ); + \add_action( 'updated_post_meta', [ $this, 'add_post_id' ], 10, 3 ); + \add_action( 'deleted_post_meta', [ $this, 'add_post_id' ], 10, 3 ); + + // Remove posts that get saved as they are handled by the Indexable_Post_Watcher. + \add_action( 'wp_insert_post', [ $this, 'remove_post_id' ] ); + \add_action( 'delete_post', [ $this, 'remove_post_id' ] ); + \add_action( 'edit_attachment', [ $this, 'remove_post_id' ] ); + \add_action( 'add_attachment', [ $this, 'remove_post_id' ] ); + \add_action( 'delete_attachment', [ $this, 'remove_post_id' ] ); + + // Update indexables of all registered posts. + \register_shutdown_function( [ $this, 'update_indexables' ] ); + } + + /** + * Adds a post id to the array of posts to update. + * + * @param int|string $meta_id The meta ID. + * @param int|string $post_id The post ID. + * @param string $meta_key The meta key. + * + * @return void + */ + public function add_post_id( $meta_id, $post_id, $meta_key ) { + // Only register changes to our own meta. + if ( \is_string( $meta_key ) && \strpos( $meta_key, WPSEO_Meta::$meta_prefix ) !== 0 ) { + return; + } + + if ( ! \in_array( $post_id, $this->post_ids_to_update, true ) ) { + $this->post_ids_to_update[] = (int) $post_id; + } + } + + /** + * Removes a post id from the array of posts to update. + * + * @param int|string $post_id The post ID. + * + * @return void + */ + public function remove_post_id( $post_id ) { + $this->post_ids_to_update = \array_diff( $this->post_ids_to_update, [ (int) $post_id ] ); + } + + /** + * Updates all indexables changed during the request. + * + * @return void + */ + public function update_indexables() { + foreach ( $this->post_ids_to_update as $post_id ) { + $this->post_watcher->build_indexable( $post_id ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-archive-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-archive-watcher.php new file mode 100644 index 00000000..2a2f8edc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-archive-watcher.php @@ -0,0 +1,147 @@ +repository = $repository; + $this->indexable_helper = $indexable_helper; + $this->builder = $builder; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_wpseo_titles', [ $this, 'check_option' ], 10, 2 ); + } + + /** + * Checks if the home page indexable needs to be rebuild based on option values. + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * + * @return bool Whether or not the option has been saved. + */ + public function check_option( $old_value, $new_value ) { + $relevant_keys = [ 'title-ptarchive-', 'metadesc-ptarchive-', 'bctitle-ptarchive-', 'noindex-ptarchive-' ]; + + // If this is the first time saving the option, thus when value is false. + if ( $old_value === false ) { + $old_value = []; + } + + if ( ! \is_array( $old_value ) || ! \is_array( $new_value ) ) { + return false; + } + + $keys = \array_unique( \array_merge( \array_keys( $old_value ), \array_keys( $new_value ) ) ); + $post_types_rebuild = []; + + foreach ( $keys as $key ) { + $post_type = false; + // Check if it's a key relevant to post type archives. + foreach ( $relevant_keys as $relevant_key ) { + if ( \strpos( $key, $relevant_key ) === 0 ) { + $post_type = \substr( $key, \strlen( $relevant_key ) ); + break; + } + } + + // If it's not a relevant key or both values aren't set they haven't changed. + if ( $post_type === false || ( ! isset( $old_value[ $key ] ) && ! isset( $new_value[ $key ] ) ) ) { + continue; + } + + // If the value was set but now isn't, is set but wasn't or is not the same it has changed. + if ( + ! \in_array( $post_type, $post_types_rebuild, true ) + && ( + ! isset( $old_value[ $key ] ) + || ! isset( $new_value[ $key ] ) + || $old_value[ $key ] !== $new_value[ $key ] + ) + ) { + $this->build_indexable( $post_type ); + $post_types_rebuild[] = $post_type; + } + } + + return true; + } + + /** + * Saves the post type archive. + * + * @param string $post_type The post type. + * + * @return void + */ + public function build_indexable( $post_type ) { + $indexable = $this->repository->find_for_post_type_archive( $post_type, false ); + $indexable = $this->builder->build_for_post_type_archive( $post_type, $indexable ); + + if ( $indexable ) { + $indexable->object_last_modified = \max( $indexable->object_last_modified, \current_time( 'mysql' ) ); + $this->indexable_helper->save_indexable( $indexable ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-change-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-change-watcher.php new file mode 100644 index 00000000..69b54cce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-type-change-watcher.php @@ -0,0 +1,159 @@ + The conditionals. + */ + public static function get_conditionals() { + return [ Not_Admin_Ajax_Conditional::class, Admin_Conditional::class, Migrations_Conditional::class ]; + } + + /** + * Indexable_Post_Type_Change_Watcher constructor. + * + * @param Options_Helper $options The options helper. + * @param Indexing_Helper $indexing_helper The indexing helper. + * @param Post_Type_Helper $post_type_helper The post_typehelper. + * @param Yoast_Notification_Center $notification_center The notification center. + * @param Indexable_Helper $indexable_helper The indexable helper. + */ + public function __construct( + Options_Helper $options, + Indexing_Helper $indexing_helper, + Post_Type_Helper $post_type_helper, + Yoast_Notification_Center $notification_center, + Indexable_Helper $indexable_helper + ) { + $this->options = $options; + $this->indexing_helper = $indexing_helper; + $this->post_type_helper = $post_type_helper; + $this->notification_center = $notification_center; + $this->indexable_helper = $indexable_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'check_post_types_public_availability' ] ); + } + + /** + * Checks if one or more post types change visibility. + * + * @return void + */ + public function check_post_types_public_availability() { + + // We have to make sure this is just a plain http request, no ajax/REST. + if ( \wp_is_json_request() ) { + return; + } + + $public_post_types = $this->post_type_helper->get_indexable_post_types(); + + $last_known_public_post_types = $this->options->get( 'last_known_public_post_types', [] ); + + // Initializing the option on the first run. + if ( empty( $last_known_public_post_types ) ) { + $this->options->set( 'last_known_public_post_types', $public_post_types ); + return; + } + + // We look for new public post types. + $newly_made_public_post_types = \array_diff( $public_post_types, $last_known_public_post_types ); + // We look for post types that from public have been made private. + $newly_made_non_public_post_types = \array_diff( $last_known_public_post_types, $public_post_types ); + + // Nothing to be done if no changes has been made to post types. + if ( empty( $newly_made_public_post_types ) && ( empty( $newly_made_non_public_post_types ) ) ) { + return; + } + + // Update the list of last known public post types in the database. + $this->options->set( 'last_known_public_post_types', $public_post_types ); + + // There are new post types that have been made public. + if ( $newly_made_public_post_types ) { + + // Force a notification requesting to start the SEO data optimization. + \delete_transient( Indexable_Post_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( Indexable_Post_Indexation_Action::UNINDEXED_LIMITED_COUNT_TRANSIENT ); + + $this->indexing_helper->set_reason( Indexing_Reasons::REASON_POST_TYPE_MADE_PUBLIC ); + + \do_action( 'new_public_post_type_notifications', $newly_made_public_post_types ); + } + + // There are post types that have been made private. + if ( $newly_made_non_public_post_types && $this->indexable_helper->should_index_indexables() ) { + // Schedule a cron job to remove all the posts whose post type has been made private. + $cleanup_not_yet_scheduled = ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ); + if ( $cleanup_not_yet_scheduled ) { + \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + + \do_action( 'clean_new_public_post_type_notifications', $newly_made_non_public_post_types ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-watcher.php new file mode 100644 index 00000000..0c1e68c7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-post-watcher.php @@ -0,0 +1,338 @@ + The conditionals. + */ + public static function get_conditionals() { + return [ Migrations_Conditional::class ]; + } + + /** + * Indexable_Post_Watcher constructor. + * + * @param Indexable_Repository $repository The repository to use. + * @param Indexable_Builder $builder The post builder to use. + * @param Indexable_Hierarchy_Repository $hierarchy_repository The hierarchy repository to use. + * @param Indexable_Link_Builder $link_builder The link builder. + * @param Author_Archive_Helper $author_archive The author archive helper. + * @param Indexable_Helper $indexable_helper The indexable helper. + * @param Post_Helper $post The post helper. + * @param Logger $logger The logger. + */ + public function __construct( + Indexable_Repository $repository, + Indexable_Builder $builder, + Indexable_Hierarchy_Repository $hierarchy_repository, + Indexable_Link_Builder $link_builder, + Author_Archive_Helper $author_archive, + Indexable_Helper $indexable_helper, + Post_Helper $post, + Logger $logger + ) { + $this->repository = $repository; + $this->builder = $builder; + $this->hierarchy_repository = $hierarchy_repository; + $this->link_builder = $link_builder; + $this->author_archive = $author_archive; + $this->indexable_helper = $indexable_helper; + $this->post = $post; + $this->logger = $logger; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'wp_insert_post', [ $this, 'build_indexable' ], \PHP_INT_MAX ); + \add_action( 'delete_post', [ $this, 'delete_indexable' ] ); + + \add_action( 'edit_attachment', [ $this, 'build_indexable' ], \PHP_INT_MAX ); + \add_action( 'add_attachment', [ $this, 'build_indexable' ], \PHP_INT_MAX ); + \add_action( 'delete_attachment', [ $this, 'delete_indexable' ] ); + } + + /** + * Deletes the meta when a post is deleted. + * + * @param int $post_id Post ID. + * + * @return void + */ + public function delete_indexable( $post_id ) { + $indexable = $this->repository->find_by_id_and_type( $post_id, 'post', false ); + + // Only interested in post indexables. + if ( ! $indexable || $indexable->object_type !== 'post' ) { + return; + } + + $this->update_relations( $this->post->get_post( $post_id ) ); + + $this->update_has_public_posts( $indexable ); + + $this->hierarchy_repository->clear_ancestors( $indexable->id ); + $this->link_builder->delete( $indexable ); + $indexable->delete(); + \do_action( 'wpseo_indexable_deleted', $indexable ); + } + + /** + * Updates the relations when the post indexable is built. + * + * @param Indexable $indexable The indexable. + * @param WP_Post $post The post. + * + * @return void + */ + public function updated_indexable( $indexable, $post ) { + // Only interested in post indexables. + if ( $indexable->object_type !== 'post' ) { + return; + } + + if ( \is_a( $post, Indexable::class ) ) { + \_deprecated_argument( __FUNCTION__, '17.7', 'The $old_indexable argument has been deprecated.' ); + $post = $this->post->get_post( $indexable->object_id ); + } + + $this->update_relations( $post ); + } + + /** + * Saves post meta. + * + * @param int $post_id Post ID. + * + * @return void + */ + public function build_indexable( $post_id ) { + // Bail if this is a multisite installation and the site has been switched. + if ( $this->is_multisite_and_switched() ) { + return; + } + + try { + $indexable = $this->repository->find_by_id_and_type( $post_id, 'post', false ); + $indexable = $this->builder->build_for_id_and_type( $post_id, 'post', $indexable ); + + $post = $this->post->get_post( $post_id ); + + /* + * Update whether an author has public posts. + * For example this post could be set to Draft or Private, + * which can influence if its author has any public posts at all. + */ + if ( $indexable ) { + $this->update_has_public_posts( $indexable ); + } + + // Build links for this post. + if ( $post && $indexable && \in_array( $post->post_status, $this->post->get_public_post_statuses(), true ) ) { + $this->link_builder->build( $indexable, $post->post_content ); + // Save indexable to persist the updated link count. + $this->indexable_helper->save_indexable( $indexable ); + $this->updated_indexable( $indexable, $post ); + } + } catch ( Exception $exception ) { + $this->logger->log( LogLevel::ERROR, $exception->getMessage() ); + } + } + + /** + * Updates the has_public_posts when the post indexable is built. + * + * @param Indexable $indexable The indexable to check. + * + * @return void + */ + protected function update_has_public_posts( $indexable ) { + // Update the author indexable's has public posts value. + try { + $author_indexable = $this->repository->find_by_id_and_type( $indexable->author_id, 'user' ); + if ( $author_indexable ) { + $author_indexable->has_public_posts = $this->author_archive->author_has_public_posts( $author_indexable->object_id ); + $this->indexable_helper->save_indexable( $author_indexable ); + + if ( $this->indexable_helper->should_index_indexable( $author_indexable ) ) { + $this->reschedule_cleanup_if_author_has_no_posts( $author_indexable ); + } + } + } catch ( Exception $exception ) { + $this->logger->log( LogLevel::ERROR, $exception->getMessage() ); + } + + // Update possible attachment's has public posts value. + $this->post->update_has_public_posts_on_attachments( $indexable->object_id, $indexable->is_public ); + } + + /** + * Reschedule indexable cleanup if the author does not have any public posts. + * This should remove the author from the indexable table, since we do not + * want to store authors without public facing posts in the table. + * + * @param Indexable $author_indexable The author indexable. + * + * @return void + */ + protected function reschedule_cleanup_if_author_has_no_posts( $author_indexable ) { + if ( $author_indexable->has_public_posts === false ) { + $cleanup_not_yet_scheduled = ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ); + if ( $cleanup_not_yet_scheduled ) { + \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + } + } + + /** + * Updates the relations on post save or post status change. + * + * @param WP_Post $post The post that has been updated. + * + * @return void + */ + protected function update_relations( $post ) { + $related_indexables = $this->get_related_indexables( $post ); + + foreach ( $related_indexables as $indexable ) { + // Ignore everything that is not an actual indexable. + if ( \is_a( $indexable, Indexable::class ) ) { + $indexable->object_last_modified = \max( $indexable->object_last_modified, $post->post_modified_gmt ); + $this->indexable_helper->save_indexable( $indexable ); + } + } + } + + /** + * Retrieves the related indexables for given post. + * + * @param WP_Post $post The post to get the indexables for. + * + * @return Indexable[] The indexables. + */ + protected function get_related_indexables( $post ) { + /** + * The related indexables. + * + * @var Indexable[] $related_indexables . + */ + $related_indexables = []; + $related_indexables[] = $this->repository->find_by_id_and_type( $post->post_author, 'user', false ); + $related_indexables[] = $this->repository->find_for_post_type_archive( $post->post_type, false ); + $related_indexables[] = $this->repository->find_for_home_page( false ); + + $taxonomies = \get_post_taxonomies( $post->ID ); + $taxonomies = \array_filter( $taxonomies, 'is_taxonomy_viewable' ); + $term_ids = []; + foreach ( $taxonomies as $taxonomy ) { + $terms = \get_the_terms( $post->ID, $taxonomy ); + + if ( empty( $terms ) || \is_wp_error( $terms ) ) { + continue; + } + + $term_ids = \array_merge( $term_ids, \wp_list_pluck( $terms, 'term_id' ) ); + } + $related_indexables = \array_merge( + $related_indexables, + $this->repository->find_by_multiple_ids_and_type( $term_ids, 'term', false ) + ); + + return \array_filter( $related_indexables ); + } + + /** + * Tests if the site is multisite and switched. + * + * @return bool True when the site is multisite and switched + */ + protected function is_multisite_and_switched() { + return \is_multisite() && \ms_is_switched(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-static-home-page-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-static-home-page-watcher.php new file mode 100644 index 00000000..38c9d396 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-static-home-page-watcher.php @@ -0,0 +1,97 @@ +repository = $repository; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_page_on_front', [ $this, 'update_static_homepage_permalink' ], 10, 2 ); + } + + /** + * Updates the new and previous homepage's permalink when the static home page is updated. + * + * @param string $old_value The previous homepage's ID. + * @param int $value The new homepage's ID. + * + * @return void + */ + public function update_static_homepage_permalink( $old_value, $value ) { + if ( \is_string( $old_value ) ) { + $old_value = (int) $old_value; + } + + if ( $old_value === $value ) { + return; + } + + $this->update_permalink_for_page( $old_value ); + $this->update_permalink_for_page( $value ); + } + + /** + * Updates the permalink based on the selected homepage settings. + * + * @param int $page_id The page's id. + * + * @return void + */ + private function update_permalink_for_page( $page_id ) { + if ( $page_id === 0 ) { + return; + } + + $indexable = $this->repository->find_by_id_and_type( $page_id, 'post', false ); + + if ( $indexable === false ) { + return; + } + + $indexable->permalink = \get_permalink( $page_id ); + + $indexable->save(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-system-page-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-system-page-watcher.php new file mode 100644 index 00000000..8da3aa96 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-system-page-watcher.php @@ -0,0 +1,102 @@ +repository = $repository; + $this->builder = $builder; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'update_option_wpseo_titles', [ $this, 'check_option' ], 10, 2 ); + } + + /** + * Checks if the home page indexable needs to be rebuild based on option values. + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * + * @return void + */ + public function check_option( $old_value, $new_value ) { + foreach ( Indexable_System_Page_Builder::OPTION_MAPPING as $type => $options ) { + foreach ( $options as $option ) { + // If both values aren't set they haven't changed. + if ( ! isset( $old_value[ $option ] ) && ! isset( $new_value[ $option ] ) ) { + return; + } + + // If the value was set but now isn't, is set but wasn't or is not the same it has changed. + if ( + ! isset( $old_value[ $option ] ) + || ! isset( $new_value[ $option ] ) + || $old_value[ $option ] !== $new_value[ $option ] + ) { + $this->build_indexable( $type ); + } + } + } + } + + /** + * Saves the search result. + * + * @param string $type The type of no index page. + * + * @return void + */ + public function build_indexable( $type ) { + $indexable = $this->repository->find_for_system_page( $type, false ); + $this->builder->build_for_system_page( $type, $indexable ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-taxonomy-change-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-taxonomy-change-watcher.php new file mode 100644 index 00000000..68b9f8f7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-taxonomy-change-watcher.php @@ -0,0 +1,161 @@ + The conditionals. + */ + public static function get_conditionals() { + return [ Not_Admin_Ajax_Conditional::class, Admin_Conditional::class, Migrations_Conditional::class ]; + } + + /** + * Indexable_Taxonomy_Change_Watcher constructor. + * + * @param Indexing_Helper $indexing_helper The indexing helper. + * @param Options_Helper $options The options helper. + * @param Taxonomy_Helper $taxonomy_helper The taxonomy helper. + * @param Yoast_Notification_Center $notification_center The notification center. + * @param Indexable_Helper $indexable_helper The indexable helper. + */ + public function __construct( + Indexing_Helper $indexing_helper, + Options_Helper $options, + Taxonomy_Helper $taxonomy_helper, + Yoast_Notification_Center $notification_center, + Indexable_Helper $indexable_helper + ) { + $this->indexing_helper = $indexing_helper; + $this->options = $options; + $this->taxonomy_helper = $taxonomy_helper; + $this->notification_center = $notification_center; + $this->indexable_helper = $indexable_helper; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'check_taxonomy_public_availability' ] ); + } + + /** + * Checks if one or more taxonomies change visibility. + * + * @return void + */ + public function check_taxonomy_public_availability() { + + // We have to make sure this is just a plain http request, no ajax/REST. + if ( \wp_is_json_request() ) { + return; + } + + $public_taxonomies = $this->taxonomy_helper->get_indexable_taxonomies(); + + $last_known_public_taxonomies = $this->options->get( 'last_known_public_taxonomies', [] ); + + // Initializing the option on the first run. + if ( empty( $last_known_public_taxonomies ) ) { + $this->options->set( 'last_known_public_taxonomies', $public_taxonomies ); + return; + } + + // We look for new public taxonomies. + $newly_made_public_taxonomies = \array_diff( $public_taxonomies, $last_known_public_taxonomies ); + + // We look fortaxonomies that from public have been made private. + $newly_made_non_public_taxonomies = \array_diff( $last_known_public_taxonomies, $public_taxonomies ); + + // Nothing to be done if no changes has been made to taxonomies. + if ( empty( $newly_made_public_taxonomies ) && ( empty( $newly_made_non_public_taxonomies ) ) ) { + return; + } + + // Update the list of last known public taxonomies in the database. + $this->options->set( 'last_known_public_taxonomies', $public_taxonomies ); + + // There are new taxonomies that have been made public. + if ( ! empty( $newly_made_public_taxonomies ) ) { + + // Force a notification requesting to start the SEO data optimization. + \delete_transient( Indexable_Term_Indexation_Action::UNINDEXED_COUNT_TRANSIENT ); + \delete_transient( Indexable_Term_Indexation_Action::UNINDEXED_LIMITED_COUNT_TRANSIENT ); + + $this->indexing_helper->set_reason( Indexing_Reasons::REASON_TAXONOMY_MADE_PUBLIC ); + \do_action( 'new_public_taxonomy_notifications', $newly_made_public_taxonomies ); + } + + // There are taxonomies that have been made private. + if ( ! empty( $newly_made_non_public_taxonomies ) && $this->indexable_helper->should_index_indexables() ) { + // Schedule a cron job to remove all the terms whose taxonomy has been made private. + $cleanup_not_yet_scheduled = ! \wp_next_scheduled( Cleanup_Integration::START_HOOK ); + if ( $cleanup_not_yet_scheduled ) { + \wp_schedule_single_event( ( \time() + ( \MINUTE_IN_SECONDS * 5 ) ), Cleanup_Integration::START_HOOK ); + } + + \do_action( 'clean_new_public_taxonomy_notifications', $newly_made_non_public_taxonomies ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-term-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-term-watcher.php new file mode 100644 index 00000000..338d5cdf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/indexable-term-watcher.php @@ -0,0 +1,152 @@ +repository = $repository; + $this->builder = $builder; + $this->link_builder = $link_builder; + $this->indexable_helper = $indexable_helper; + $this->site = $site; + } + + /** + * Registers the hooks. + * + * @return void + */ + public function register_hooks() { + \add_action( 'created_term', [ $this, 'build_indexable' ], \PHP_INT_MAX ); + \add_action( 'edited_term', [ $this, 'build_indexable' ], \PHP_INT_MAX ); + \add_action( 'delete_term', [ $this, 'delete_indexable' ], \PHP_INT_MAX ); + } + + /** + * Deletes a term from the index. + * + * @param int $term_id The Term ID to delete. + * + * @return void + */ + public function delete_indexable( $term_id ) { + $indexable = $this->repository->find_by_id_and_type( $term_id, 'term', false ); + + if ( ! $indexable ) { + return; + } + + $indexable->delete(); + \do_action( 'wpseo_indexable_deleted', $indexable ); + } + + /** + * Update the taxonomy meta data on save. + * + * @param int $term_id ID of the term to save data for. + * + * @return void + */ + public function build_indexable( $term_id ) { + // Bail if this is a multisite installation and the site has been switched. + if ( $this->site->is_multisite_and_switched() ) { + return; + } + + $term = \get_term( $term_id ); + + if ( $term === null || \is_wp_error( $term ) ) { + return; + } + + if ( ! \is_taxonomy_viewable( $term->taxonomy ) ) { + return; + } + + $indexable = $this->repository->find_by_id_and_type( $term_id, 'term', false ); + + // If we haven't found an existing indexable, create it. Otherwise update it. + $indexable = $this->builder->build_for_id_and_type( $term_id, 'term', $indexable ); + + if ( ! $indexable ) { + return; + } + + // Update links. + $this->link_builder->build( $indexable, $term->description ); + + $indexable->object_last_modified = \max( $indexable->object_last_modified, \current_time( 'mysql' ) ); + $this->indexable_helper->save_indexable( $indexable ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-titles-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-titles-watcher.php new file mode 100644 index 00000000..aca902d3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-titles-watcher.php @@ -0,0 +1,130 @@ + + */ + public static function get_conditionals() { + return [ Migrations_Conditional::class ]; + } + + /** + * Checks if one of the relevant options has been changed. + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * + * @return bool Whether or not the ancestors are removed. + */ + public function check_option( $old_value, $new_value ) { + // If this is the first time saving the option, thus when value is false. + if ( $old_value === false ) { + $old_value = []; + } + + if ( ! \is_array( $old_value ) || ! \is_array( $new_value ) ) { + return false; + } + + $relevant_keys = $this->get_relevant_keys(); + if ( empty( $relevant_keys ) ) { + return false; + } + + $post_types = []; + + foreach ( $relevant_keys as $post_type => $relevant_option ) { + // If both values aren't set they haven't changed. + if ( ! isset( $old_value[ $relevant_option ] ) && ! isset( $new_value[ $relevant_option ] ) ) { + continue; + } + + if ( $old_value[ $relevant_option ] !== $new_value[ $relevant_option ] ) { + $post_types[] = $post_type; + } + } + + return $this->delete_ancestors( $post_types ); + } + + /** + * Retrieves the relevant keys. + * + * @return array Array with the relevant keys. + */ + protected function get_relevant_keys() { + $post_types = \get_post_types( [ 'public' => true ], 'names' ); + if ( ! \is_array( $post_types ) || $post_types === [] ) { + return []; + } + + $relevant_keys = []; + foreach ( $post_types as $post_type ) { + $relevant_keys[ $post_type ] = 'post_types-' . $post_type . '-maintax'; + } + + return $relevant_keys; + } + + /** + * Removes the ancestors for given post types. + * + * @param array $post_types The post types to remove hierarchy for. + * + * @return bool True when delete query was successful. + */ + protected function delete_ancestors( $post_types ) { + if ( empty( $post_types ) ) { + return false; + } + + $wpdb = Wrapper::get_wpdb(); + $hierarchy_table = Model::get_table_name( 'Indexable_Hierarchy' ); + $indexable_table = Model::get_table_name( 'Indexable' ); + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Delete query. + $result = $wpdb->query( + $wpdb->prepare( + " + DELETE FROM %i + WHERE indexable_id IN( + SELECT id + FROM %i + WHERE object_type = 'post' + AND object_sub_type IN( " . \implode( ', ', \array_fill( 0, \count( $post_types ), '%s' ) ) . ' ) + )', + $hierarchy_table, + $indexable_table, + ...$post_types + ) + ); + + return $result !== false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-wpseo-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-wpseo-watcher.php new file mode 100644 index 00000000..b4929ecf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/option-wpseo-watcher.php @@ -0,0 +1,127 @@ +check_token_option_disabled( 'semrush_integration_active', 'semrush_tokens', $new_value ); + } + + /** + * Checks if the Wincher integration is disabled; if so, deletes the tokens + * and website id. + * + * We delete them if the Wincher integration is disabled, no matter if the + * value has actually changed or not. + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * + * @return bool Whether the Wincher tokens have been deleted or not. + */ + public function check_wincher_option_disabled( $old_value, $new_value ) { + $disabled = $this->check_token_option_disabled( 'wincher_integration_active', 'wincher_tokens', $new_value ); + if ( $disabled ) { + \YoastSEO()->helpers->options->set( 'wincher_website_id', '' ); + } + + return $disabled; + } + + /** + * Checks if the WordProof integration is disabled; if so, deletes the tokens + * + * We delete them if the WordProof integration is disabled, no matter if the + * value has actually changed or not. + * + * @deprecated 22.10 + * @codeCoverageIgnore + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * + * @return bool Whether the WordProof tokens have been deleted or not. + */ + public function check_wordproof_option_disabled( $old_value, $new_value ) { + \_deprecated_function( __METHOD__, 'Yoast SEO 22.10' ); + + return true; + } + + /** + * Checks if the usage tracking feature is toggled; if so, set an option to stop us from messing with it. + * + * @param array $old_value The old value of the option. + * @param array $new_value The new value of the option. + * + * @return bool Whether the option is set. + */ + public function check_toggle_usage_tracking( $old_value, $new_value ) { + $option_name = 'tracking'; + + if ( \array_key_exists( $option_name, $old_value ) && \array_key_exists( $option_name, $new_value ) && $old_value[ $option_name ] !== $new_value[ $option_name ] && $old_value['toggled_tracking'] === false ) { + \YoastSEO()->helpers->options->set( 'toggled_tracking', true ); + + return true; + } + + return false; + } + + /** + * Checks if the passed integration is disabled; if so, deletes the tokens. + * + * We delete the tokens if the integration is disabled, no matter if + * the value has actually changed or not. + * + * @param string $integration_option The intergration option name. + * @param string $target_option The target option to remove the tokens from. + * @param array $new_value The new value of the option. + * + * @return bool Whether the tokens have been deleted or not. + */ + protected function check_token_option_disabled( $integration_option, $target_option, $new_value ) { + if ( \array_key_exists( $integration_option, $new_value ) && $new_value[ $integration_option ] === false ) { + \YoastSEO()->helpers->options->set( $target_option, [] ); + + return true; + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-category-quick-edit-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-category-quick-edit-watcher.php new file mode 100644 index 00000000..78ba65b0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-category-quick-edit-watcher.php @@ -0,0 +1,195 @@ +options_helper = $options_helper; + $this->primary_term_repository = $primary_term_repository; + $this->post_type_helper = $post_type_helper; + $this->indexable_repository = $indexable_repository; + $this->indexable_hierarchy_builder = $indexable_hierarchy_builder; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'set_object_terms', [ $this, 'validate_primary_category' ], 10, 4 ); + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ Migrations_Conditional::class, Doing_Post_Quick_Edit_Save_Conditional::class ]; + } + + /** + * Validates if the current primary category is still present. If not just remove the post meta for it. + * + * @param int $object_id Object ID. + * @param array $terms Unused. An array of object terms. + * @param array $tt_ids An array of term taxonomy IDs. + * @param string $taxonomy Taxonomy slug. + * + * @return void + */ + public function validate_primary_category( $object_id, $terms, $tt_ids, $taxonomy ) { + $post = \get_post( $object_id ); + if ( $post === null ) { + return; + } + + $main_taxonomy = $this->options_helper->get( 'post_types-' . $post->post_type . '-maintax' ); + if ( ! $main_taxonomy || $main_taxonomy === '0' ) { + return; + } + + if ( $main_taxonomy !== $taxonomy ) { + return; + } + + $primary_category = $this->get_primary_term_id( $post->ID, $main_taxonomy ); + if ( $primary_category === false ) { + return; + } + + // The primary category isn't removed. + if ( \in_array( (string) $primary_category, $tt_ids, true ) ) { + return; + } + + $this->remove_primary_term( $post->ID, $main_taxonomy ); + + // Rebuild the post hierarchy for this post now the primary term has been changed. + $this->build_post_hierarchy( $post ); + } + + /** + * Returns the primary term id of a post. + * + * @param int $post_id The post ID. + * @param string $main_taxonomy The main taxonomy. + * + * @return int|false The ID of the primary term, or `false` if the post ID is invalid. + */ + private function get_primary_term_id( $post_id, $main_taxonomy ) { + $primary_term = $this->primary_term_repository->find_by_post_id_and_taxonomy( $post_id, $main_taxonomy, false ); + + if ( $primary_term ) { + return $primary_term->term_id; + } + + return \get_post_meta( $post_id, WPSEO_Meta::$meta_prefix . 'primary_' . $main_taxonomy, true ); + } + + /** + * Removes the primary category. + * + * @param int $post_id The post id to set primary taxonomy for. + * @param string $main_taxonomy Name of the taxonomy that is set to be the primary one. + * + * @return void + */ + private function remove_primary_term( $post_id, $main_taxonomy ) { + $primary_term = $this->primary_term_repository->find_by_post_id_and_taxonomy( $post_id, $main_taxonomy, false ); + if ( $primary_term ) { + $primary_term->delete(); + } + + // Remove it from the post meta. + \delete_post_meta( $post_id, WPSEO_Meta::$meta_prefix . 'primary_' . $main_taxonomy ); + } + + /** + * Builds the hierarchy for a post. + * + * @param WP_Post $post The post. + * + * @return void + */ + public function build_post_hierarchy( $post ) { + if ( $this->post_type_helper->is_excluded( $post->post_type ) ) { + return; + } + + $indexable = $this->indexable_repository->find_by_id_and_type( $post->ID, 'post' ); + + if ( $indexable instanceof Indexable ) { + $this->indexable_hierarchy_builder->build( $indexable ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-term-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-term-watcher.php new file mode 100644 index 00000000..5eeadb18 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/primary-term-watcher.php @@ -0,0 +1,161 @@ +repository = $repository; + $this->site = $site; + $this->primary_term = $primary_term; + $this->primary_term_builder = $primary_term_builder; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'save_post', [ $this, 'save_primary_terms' ], \PHP_INT_MAX ); + \add_action( 'delete_post', [ $this, 'delete_primary_terms' ] ); + } + + /** + * Saves all selected primary terms. + * + * @param int $post_id Post ID to save primary terms for. + * + * @return void + */ + public function save_primary_terms( $post_id ) { + // Bail if this is a multisite installation and the site has been switched. + if ( $this->site->is_multisite_and_switched() ) { + return; + } + + $taxonomies = $this->primary_term->get_primary_term_taxonomies( $post_id ); + + foreach ( $taxonomies as $taxonomy ) { + $this->save_primary_term( $post_id, $taxonomy ); + } + + $this->primary_term_builder->build( $post_id ); + } + + /** + * Saves the primary term for a specific taxonomy. + * + * @param int $post_id Post ID to save primary term for. + * @param WP_Term $taxonomy Taxonomy to save primary term for. + * + * @return void + */ + protected function save_primary_term( $post_id, $taxonomy ) { + if ( isset( $_POST[ WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_term' ] ) && \is_string( $_POST[ WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_term' ] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are casting to an integer. + $primary_term_id = (int) \wp_unslash( $_POST[ WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_term' ] ); + + if ( $primary_term_id <= 0 ) { + $primary_term = ''; + } + else { + $primary_term = (string) $primary_term_id; + } + + // We accept an empty string here because we need to save that if no terms are selected. + if ( \check_admin_referer( 'save-primary-term', WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_nonce' ) !== null ) { + $primary_term_object = new WPSEO_Primary_Term( $taxonomy->name, $post_id ); + $primary_term_object->set_primary_term( $primary_term ); + } + } + } + + /** + * Deletes primary terms for a post. + * + * @param int $post_id The post to delete the terms of. + * + * @return void + */ + public function delete_primary_terms( $post_id ) { + foreach ( $this->primary_term->get_primary_term_taxonomies( $post_id ) as $taxonomy ) { + $primary_term_indexable = $this->repository->find_by_post_id_and_taxonomy( $post_id, $taxonomy->name, false ); + + if ( ! $primary_term_indexable ) { + continue; + } + + $primary_term_indexable->delete(); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/search-engines-discouraged-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/search-engines-discouraged-watcher.php new file mode 100644 index 00000000..36f27583 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/search-engines-discouraged-watcher.php @@ -0,0 +1,233 @@ +notification_center = $notification_center; + $this->notification_helper = $notification_helper; + $this->current_page_helper = $current_page_helper; + $this->options_helper = $options_helper; + $this->capability_helper = $capability_helper; + $this->presenter = new Search_Engines_Discouraged_Presenter(); + } + + /** + * Initializes the integration. + * + * On admin_init, it is checked whether the notification about search engines being discouraged should be shown. + * On admin_notices, the notice about the search engines being discouraged will be shown when necessary. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'manage_search_engines_discouraged_notification' ] ); + + /* + * The `admin_notices` hook fires on single site admin pages vs. + * `network_admin_notices` which fires on multisite admin pages and + * `user_admin_notices` which fires on multisite user admin pages. + */ + \add_action( 'admin_notices', [ $this, 'maybe_show_search_engines_discouraged_notice' ] ); + } + + /** + * Manage the search engines discouraged notification. + * + * Shows the notification if needed and deletes it if needed. + * + * @return void + */ + public function manage_search_engines_discouraged_notification() { + if ( ! $this->should_show_search_engines_discouraged_notification() ) { + $this->remove_search_engines_discouraged_notification_if_exists(); + } + else { + $this->maybe_add_search_engines_discouraged_notification(); + } + } + + /** + * Show the search engine discouraged notice when needed. + * + * @return void + */ + public function maybe_show_search_engines_discouraged_notice() { + if ( ! $this->should_show_search_engines_discouraged_notice() ) { + return; + } + $this->show_search_engines_discouraged_notice(); + } + + /** + * Whether the search engines discouraged notification should be shown. + * + * @return bool + */ + protected function should_show_search_engines_discouraged_notification() { + return $this->search_engines_are_discouraged() && $this->options_helper->get( 'ignore_search_engines_discouraged_notice', false ) === false; + } + + /** + * Remove the search engines discouraged notification if it exists. + * + * @return void + */ + protected function remove_search_engines_discouraged_notification_if_exists() { + $this->notification_center->remove_notification_by_id( self::NOTIFICATION_ID ); + } + + /** + * Add the search engines discouraged notification if it does not exist yet. + * + * @return void + */ + protected function maybe_add_search_engines_discouraged_notification() { + if ( ! $this->notification_center->get_notification_by_id( self::NOTIFICATION_ID ) ) { + $notification = $this->notification(); + $this->notification_helper->restore_notification( $notification ); + $this->notification_center->add_notification( $notification ); + } + } + + /** + * Checks whether search engines are discouraged from indexing the site. + * + * @return bool Whether search engines are discouraged from indexing the site. + */ + protected function search_engines_are_discouraged() { + return (string) \get_option( 'blog_public' ) === '0'; + } + + /** + * Whether the search engines notice should be shown. + * + * @return bool + */ + protected function should_show_search_engines_discouraged_notice() { + $pages_to_show_notice = [ + 'index.php', + 'plugins.php', + 'update-core.php', + ]; + + return ( + $this->search_engines_are_discouraged() + && $this->capability_helper->current_user_can( 'manage_options' ) + && $this->options_helper->get( 'ignore_search_engines_discouraged_notice', false ) === false + && ( + $this->current_page_helper->is_yoast_seo_page() + || \in_array( $this->current_page_helper->get_current_admin_page(), $pages_to_show_notice, true ) + ) + && $this->current_page_helper->get_current_yoast_seo_page() !== 'wpseo_dashboard' + ); + } + + /** + * Show the search engines discouraged notice. + * + * @return void + */ + protected function show_search_engines_discouraged_notice() { + \printf( + '
                %1$s
                ', + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Output from present() is considered safe. + $this->presenter->present() + ); + } + + /** + * Returns an instance of the notification. + * + * @return Yoast_Notification The notification to show. + */ + protected function notification() { + return new Yoast_Notification( + $this->presenter->present(), + [ + 'type' => Yoast_Notification::ERROR, + 'id' => self::NOTIFICATION_ID, + 'capabilities' => 'wpseo_manage_options', + 'priority' => 1, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/woocommerce-beta-editor-watcher.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/woocommerce-beta-editor-watcher.php new file mode 100644 index 00000000..f8b9a773 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/watchers/woocommerce-beta-editor-watcher.php @@ -0,0 +1,146 @@ +notification_center = $notification_center; + $this->notification_helper = $notification_helper; + $this->short_link_helper = $short_link_helper; + $this->woocommerce_conditional = $woocommerce_conditional; + $this->presenter = new Woocommerce_Beta_Editor_Presenter( $this->short_link_helper ); + } + + /** + * Returns the conditionals based on which this loadable should be active. + * + * @return string[] The conditionals. + */ + public static function get_conditionals() { + return [ Admin_Conditional::class, Not_Admin_Ajax_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * On admin_init, it is checked whether the notification about Woocommerce product beta editor enabled should be shown. + * + * @return void + */ + public function register_hooks() { + \add_action( 'admin_init', [ $this, 'manage_woocommerce_beta_editor_notification' ] ); + } + + /** + * Manage the Woocommerce product beta editor notification. + * + * Shows the notification if needed and deletes it if needed. + * + * @return void + */ + public function manage_woocommerce_beta_editor_notification() { + if ( \get_option( 'woocommerce_feature_product_block_editor_enabled' ) === 'yes' && $this->woocommerce_conditional->is_met() ) { + $this->maybe_add_woocommerce_beta_editor_notification(); + } + else { + $this->notification_center->remove_notification_by_id( self::NOTIFICATION_ID ); + } + } + + /** + * Add the Woocommerce product beta editor enabled notification if it does not exist yet. + * + * @return void + */ + public function maybe_add_woocommerce_beta_editor_notification() { + if ( ! $this->notification_center->get_notification_by_id( self::NOTIFICATION_ID ) ) { + $notification = $this->notification(); + $this->notification_helper->restore_notification( $notification ); + $this->notification_center->add_notification( $notification ); + } + } + + /** + * Returns an instance of the notification. + * + * @return Yoast_Notification The notification to show. + */ + protected function notification() { + return new Yoast_Notification( + $this->presenter->present(), + [ + 'type' => Yoast_Notification::ERROR, + 'id' => self::NOTIFICATION_ID, + 'capabilities' => 'wpseo_manage_options', + 'priority' => 1, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/integrations/xmlrpc.php b/wp/wp-content/plugins/wordpress-seo/src/integrations/xmlrpc.php new file mode 100644 index 00000000..c0aab252 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/integrations/xmlrpc.php @@ -0,0 +1,50 @@ +user_helper = $user_helper; + $this->product_helper = $product_helper; + } + + /** + * Returns the ID. + * + * @return string The ID. + */ + public function get_id() { + return self::ID; + } + + /** + * Returns the name of the introdyction. + * + * @return string The name. + */ + public function get_name() { + \_deprecated_function( __METHOD__, 'Yoast SEO Premium 21.6', 'Please use get_id() instead' ); + + return self::ID; + } + + /** + * Returns the requested pagination priority. Lower means earlier. + * + * @return int The priority. + */ + public function get_priority() { + return 10; + } + + /** + * Returns whether this introduction should show. + * + * @return bool Whether this introduction should show. + */ + public function should_show() { + + if ( $this->product_helper->is_premium() ) { + return false; + } + + // Get the current user ID, if no user is logged in we bail as this is needed for the next checks. + $current_user_id = $this->user_helper->get_current_user_id(); + if ( $current_user_id === 0 ) { + return false; + } + + if ( ! $this->is_user_allowed( [ 'edit_posts' ] ) ) { + return false; + } + + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/application/current-page-trait.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/application/current-page-trait.php new file mode 100644 index 00000000..388a0365 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/application/current-page-trait.php @@ -0,0 +1,43 @@ +get_page(), $pages, true ); + } + + /** + * Determines whether the current page is one of our installation pages. + * + * @return bool Whether the current page is one of our installation pages. + */ + private function is_on_installation_page() { + return $this->is_on_yoast_page( [ 'wpseo_installation_successful_free', 'wpseo_installation_successful' ] ); + } + + /** + * Retrieve the page variable. + * + * Note: the result is not safe to use in anything than strict comparisons! + * + * @return string The page variable. + */ + private function get_page() { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reason: We are not processing form information. + if ( isset( $_GET['page'] ) && \is_string( $_GET['page'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information, only using it in strict comparison. + return \wp_unslash( $_GET['page'] ); + } + + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/application/introductions-collector.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/application/introductions-collector.php new file mode 100644 index 00000000..d173ca10 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/application/introductions-collector.php @@ -0,0 +1,131 @@ +introductions = $this->add_introductions( ...$introductions ); + } + + /** + * Gets the data for the introductions. + * + * @param int $user_id The user ID. + * + * @return array The list of introductions. + */ + public function get_for( $user_id ) { + $bucket = new Introductions_Bucket(); + $metadata = $this->get_metadata( $user_id ); + + foreach ( $this->introductions as $introduction ) { + if ( ! $introduction->should_show() ) { + continue; + } + if ( $this->is_seen( $introduction->get_id(), $metadata ) ) { + continue; + } + $bucket->add_introduction( + new Introduction_Item( $introduction->get_id(), $introduction->get_priority() ) + ); + } + + return $bucket->to_array(); + } + + /** + * Filters introductions with the 'wpseo_introductions' filter. + * + * @param Introduction_Interface ...$introductions The introductions. + * + * @return Introduction_Interface[] + */ + private function add_introductions( Introduction_Interface ...$introductions ) { + /** + * Filter: Adds the possibility to add additional introductions to be included. + * + * @internal + * + * @param Introduction_Interface $introductions This filter expects a list of Introduction_Interface instances and + * expects only Introduction_Interface implementations to be added to the list. + */ + $filtered_introductions = (array) \apply_filters( 'wpseo_introductions', $introductions ); + + return \array_filter( + $filtered_introductions, + static function ( $introduction ) { + return \is_a( $introduction, Introduction_Interface::class ); + } + ); + } + + /** + * Retrieves the introductions metadata for the user. + * + * @param int $user_id The user ID. + * + * @return array The introductions' metadata. + */ + private function get_metadata( $user_id ) { + $metadata = \get_user_meta( $user_id, Introductions_Seen_Repository::USER_META_KEY, true ); + if ( \is_array( $metadata ) ) { + return $metadata; + } + + return []; + } + + /** + * Determines whether the user has seen the introduction. + * + * @param string $name The name. + * @param string[] $metadata The metadata. + * + * @return bool Whether the user has seen the introduction. + */ + private function is_seen( $name, $metadata ) { + if ( \array_key_exists( $name, $metadata ) ) { + return (bool) $metadata[ $name ]; + } + + return false; + } + + /** + * Checks if the given introduction ID is a known ID to the system. + * + * @param string $introduction_id The introduction ID to check. + * + * @return bool + */ + public function is_available_introduction( string $introduction_id ): bool { + foreach ( $this->introductions as $introduction ) { + if ( $introduction->get_id() === $introduction_id ) { + return true; + } + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/application/user-allowed-trait.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/application/user-allowed-trait.php new file mode 100644 index 00000000..a6cd2c71 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/application/user-allowed-trait.php @@ -0,0 +1,23 @@ +=' ) + && \version_compare( $version, $max_version, '<' ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introduction-interface.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introduction-interface.php new file mode 100644 index 00000000..ed895b00 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introduction-interface.php @@ -0,0 +1,40 @@ +id = $id; + $this->priority = $priority; + } + + /** + * Returns an array representation of the data. + * + * @return array Returns in an array format. + */ + public function to_array() { + return [ + 'id' => $this->get_id(), + 'priority' => $this->get_priority(), + ]; + } + + /** + * Returns the ID. + * + * @return string + */ + public function get_id() { + return $this->id; + } + + /** + * Returns the requested pagination priority. Higher means earlier. + * + * @return int + */ + public function get_priority() { + return $this->priority; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introductions-bucket.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introductions-bucket.php new file mode 100644 index 00000000..51a24806 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/introductions-bucket.php @@ -0,0 +1,49 @@ +introductions = []; + } + + /** + * Adds an introduction to this bucket. + * + * @param Introduction_Item $introduction The introduction. + * + * @return void + */ + public function add_introduction( Introduction_Item $introduction ) { + $this->introductions[] = $introduction; + } + + /** + * Returns the array representation of the introductions. + * + * @return array + */ + public function to_array() { + // No sorting here because that is done in JS. + return \array_map( + static function ( $item ) { + return $item->to_array(); + }, + $this->introductions + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/invalid-user-id-exception.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/invalid-user-id-exception.php new file mode 100644 index 00000000..69bb8bdc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/domain/invalid-user-id-exception.php @@ -0,0 +1,29 @@ +user_helper = $user_helper; + } + + /** + * Retrieves the introductions. + * + * @param int $user_id User ID. + * + * @return array The introductions. + * + * @throws Invalid_User_Id_Exception If an invalid user ID is supplied. + */ + public function get_all_introductions( $user_id ): array { + $seen_introductions = $this->user_helper->get_meta( $user_id, self::USER_META_KEY, true ); + if ( $seen_introductions === false ) { + throw new Invalid_User_Id_Exception(); + } + + if ( \is_array( $seen_introductions ) ) { + return $seen_introductions; + } + + /** + * Why could $value be invalid? + * - When the database row does not exist yet, $value can be an empty string. + * - Faulty data was stored? + */ + return self::DEFAULT_VALUE; + } + + /** + * Sets the introductions. + * + * @param int $user_id The user ID. + * @param array $introductions The introductions. + * + * @return bool True on successful update, false on failure or if the value passed to the function is the same as + * the one that is already in the database. + */ + public function set_all_introductions( $user_id, array $introductions ): bool { + return $this->user_helper->update_meta( $user_id, self::USER_META_KEY, $introductions ) !== false; + } + + /** + * Retrieves whether an introduction is seen. + * + * @param int $user_id User ID. + * @param string $introduction_id The introduction ID. + * + * @return bool Whether the introduction is seen. + * + * @throws Invalid_User_Id_Exception If an invalid user ID is supplied. + */ + public function is_introduction_seen( $user_id, string $introduction_id ): bool { + $introductions = $this->get_all_introductions( $user_id ); + + if ( \array_key_exists( $introduction_id, $introductions ) ) { + return (bool) $introductions[ $introduction_id ]; + } + + return false; + } + + /** + * Sets the introduction as seen. + * + * @param int $user_id The user ID. + * @param string $introduction_id The introduction ID. + * @param bool $is_seen Whether the introduction is seen. Defaults to true. + * + * @return bool False on failure. Not having to update is a success. + * + * @throws Invalid_User_Id_Exception If an invalid user ID is supplied. + */ + public function set_introduction( $user_id, string $introduction_id, bool $is_seen = true ): bool { + $introductions = $this->get_all_introductions( $user_id ); + + // Check if the wanted value is already set. + if ( \array_key_exists( $introduction_id, $introductions ) && $introductions[ $introduction_id ] === $is_seen ) { + return true; + } + $introductions[ $introduction_id ] = $is_seen; + + return $this->set_all_introductions( $user_id, $introductions ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/infrastructure/wistia-embed-permission-repository.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/infrastructure/wistia-embed-permission-repository.php new file mode 100644 index 00000000..398eca48 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/infrastructure/wistia-embed-permission-repository.php @@ -0,0 +1,80 @@ +user_helper = $user_helper; + } + + /** + * Retrieves the current value for a user. + * + * @param int $user_id User ID. + * + * @return bool The current value. + * + * @throws Exception If an invalid user ID is supplied. + */ + public function get_value_for_user( $user_id ) { + $value = $this->user_helper->get_meta( $user_id, self::USER_META_KEY, true ); + if ( $value === false ) { + throw new Exception( 'Invalid User ID' ); + } + + if ( $value === '0' || $value === '1' ) { + // The value is stored as a string because otherwise we can not see the difference between false and an invalid user ID. + return $value === '1'; + } + + /** + * Why could $value be invalid? + * - When the database row does not exist yet, $value can be an empty string. + * - Faulty data was stored? + */ + return self::DEFAULT_VALUE; + } + + /** + * Sets the Wistia embed permission value for the current user. + * + * @param int $user_id The user ID. + * @param bool $value The value. + * + * @return bool Whether the update was successful. + * + * @throws Exception If an invalid user ID is supplied. + */ + public function set_value_for_user( $user_id, $value ) { + // The value is stored as a string because otherwise we can not see the difference between false and an invalid user ID. + $value_as_string = ( $value === true ) ? '1' : '0'; + + // Checking for only false, not interested in not having to update. + return $this->user_helper->update_meta( $user_id, self::USER_META_KEY, $value_as_string ) !== false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/readme.md b/wp/wp-content/plugins/wordpress-seo/src/introductions/readme.md new file mode 100644 index 00000000..ebcf1ee9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/readme.md @@ -0,0 +1,27 @@ +# Introductions + +Is for showing introductions to a user, on Yoast admin pages. +Based on plugin version, page, user capabilities and whether the user has seen it already. + +- `Introduction_Interface` defines what data is needed + - `id` as unique identifier + - `plugin` and `version` to determine if the introduction is new (version > plugin version) + - `pages` to be able to only show on certain Yoast admin pages + - `capabilities` to be able to only show for certain users +- `Introductions_Collector` uses that data to determine whether an introduction should be "shown" to a user + - uses the `wpseo_introductions` filter to be extendable from our other plugins + - uses `Introductions_Seen_Repository` to get the data to determine if the user saw an introduction already +- `Introductions_Seen_Repository` is the doorway whether a user has seen an introduction or not + - uses the `_yoast_introductions` user metadata +- `Introduction_Bucket` and `Introduction_Item` are used by the collector to get an array +- `Introductions_Integration` runs on the Yoast Admin pages and loads the assets + - only loads on our Yoast admin pages, but never on our installation success pages as to not disturb onboarding + - only loads assets if there is an introduction to show + - `js/src/introductions` holds the JS + - `wpseoIntroductions` is the localized script to transfer data from PHP to JS + - `css/src/ai-generator.css` holds the CSS + +Inside JS, register the modal content via `window.YoastSEO._registerIntroductionComponent`, which takes a +`id` and a `Component`. The id needs to be the same as the id in the `Introduction_Interface`. +The action `yoast.introductions.ready` can be used to know whether the registration function is available and ready for +use. diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-integration.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-integration.php new file mode 100644 index 00000000..e29a3f74 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-integration.php @@ -0,0 +1,164 @@ + + */ + public static function get_conditionals() { + return [ Yoast_Admin_Conditional::class ]; + } + + /** + * Constructs the integration. + * + * @param WPSEO_Admin_Asset_Manager $admin_asset_manager The admin asset manager. + * @param Introductions_Collector $introductions_collector The introductions' collector. + * @param Product_Helper $product_helper The product helper. + * @param User_Helper $user_helper The user helper. + * @param Short_Link_Helper $short_link_helper The short link helper. + * @param Wistia_Embed_Permission_Repository $wistia_embed_permission_repository The repository. + */ + public function __construct( + WPSEO_Admin_Asset_Manager $admin_asset_manager, + Introductions_Collector $introductions_collector, + Product_Helper $product_helper, + User_Helper $user_helper, + Short_Link_Helper $short_link_helper, + Wistia_Embed_Permission_Repository $wistia_embed_permission_repository + ) { + $this->admin_asset_manager = $admin_asset_manager; + $this->introductions_collector = $introductions_collector; + $this->product_helper = $product_helper; + $this->user_helper = $user_helper; + $this->short_link_helper = $short_link_helper; + $this->wistia_embed_permission_repository = $wistia_embed_permission_repository; + } + + /** + * Registers the action to enqueue the needed script(s). + * + * @return void + */ + public function register_hooks() { + if ( $this->is_on_installation_page() ) { + return; + } + \add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); + } + + /** + * Enqueue the new features assets. + * + * @return void + */ + public function enqueue_assets() { + $user_id = $this->user_helper->get_current_user_id(); + $introductions = $this->introductions_collector->get_for( $user_id ); + if ( ! $introductions ) { + // Bail when there are no introductions to show. + return; + } + // Update user meta to have "seen" these introductions. + $this->update_user_introductions( $user_id, $introductions ); + + $this->admin_asset_manager->enqueue_script( self::SCRIPT_HANDLE ); + $this->admin_asset_manager->localize_script( + self::SCRIPT_HANDLE, + 'wpseoIntroductions', + [ + 'introductions' => $introductions, + 'isPremium' => $this->product_helper->is_premium(), + 'isRtl' => \is_rtl(), + 'linkParams' => $this->short_link_helper->get_query_params(), + 'pluginUrl' => \plugins_url( '', \WPSEO_FILE ), + 'wistiaEmbedPermission' => $this->wistia_embed_permission_repository->get_value_for_user( $user_id ), + ] + ); + $this->admin_asset_manager->enqueue_style( 'introductions' ); + } + + /** + * Updates the user metadata to have "seen" the introductions. + * + * @param int $user_id The user ID. + * @param array $introductions The introductions. + * + * @return void + */ + private function update_user_introductions( $user_id, $introductions ) { + $metadata = $this->user_helper->get_meta( $user_id, '_yoast_wpseo_introductions', true ); + if ( ! \is_array( $metadata ) ) { + $metadata = []; + } + foreach ( $introductions as $introduction ) { + $metadata[ $introduction['id'] ] = true; + } + $this->user_helper->update_meta( $user_id, '_yoast_wpseo_introductions', $metadata ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-seen-route.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-seen-route.php new file mode 100644 index 00000000..f19e86c3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/introductions-seen-route.php @@ -0,0 +1,146 @@ +[\w-]+)/seen'; + + /** + * Holds the introductions collector instance. + * + * @var Introductions_Collector + */ + private $introductions_collector; + + /** + * Holds the repository. + * + * @var Introductions_Seen_Repository + */ + private $introductions_seen_repository; + + /** + * Holds the user helper. + * + * @var User_Helper + */ + private $user_helper; + + /** + * Constructs the class. + * + * @param Introductions_Seen_Repository $introductions_seen_repository The repository. + * @param User_Helper $user_helper The user helper. + * @param Introductions_Collector $introductions_collector The introduction collector. + */ + public function __construct( + Introductions_Seen_Repository $introductions_seen_repository, + User_Helper $user_helper, + Introductions_Collector $introductions_collector + ) { + $this->introductions_seen_repository = $introductions_seen_repository; + $this->user_helper = $user_helper; + $this->introductions_collector = $introductions_collector; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + \register_rest_route( + Main::API_V1_NAMESPACE, + self::ROUTE_PREFIX, + [ + [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_introduction_seen' ], + 'permission_callback' => [ $this, 'permission_edit_posts' ], + 'args' => [ + 'introduction_id' => [ + 'required' => true, + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + ], + 'is_seen' => [ + 'required' => false, + 'type' => 'bool', + 'default' => true, + 'sanitize_callback' => 'rest_sanitize_boolean', + ], + ], + ], + ] + ); + } + + /** + * Sets whether the introduction is seen. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response|WP_Error The success or failure response. + */ + public function set_introduction_seen( WP_REST_Request $request ) { + $params = $request->get_params(); + $introduction_id = $params['introduction_id']; + $is_seen = $params['is_seen']; + + if ( $this->introductions_collector->is_available_introduction( $introduction_id ) ) { + try { + $user_id = $this->user_helper->get_current_user_id(); + $result = $this->introductions_seen_repository->set_introduction( $user_id, $introduction_id, $is_seen ); + } catch ( Exception $exception ) { + return new WP_Error( + 'wpseo_introductions_seen_error', + $exception->getMessage(), + (object) [] + ); + } + + return new WP_REST_Response( + [ + 'json' => (object) [ + 'success' => $result, + ], + ], + ( $result ) ? 200 : 400 + ); + } + return new WP_REST_Response( [], 400 ); + } + + /** + * Permission callback. + * + * @return bool True when user has 'edit_posts' permission. + */ + public function permission_edit_posts() { + return \current_user_can( 'edit_posts' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/wistia-embed-permission-route.php b/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/wistia-embed-permission-route.php new file mode 100644 index 00000000..619b811a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/introductions/user-interface/wistia-embed-permission-route.php @@ -0,0 +1,154 @@ +wistia_embed_permission_repository = $wistia_embed_permission_repository; + $this->user_helper = $user_helper; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + \register_rest_route( + Main::API_V1_NAMESPACE, + self::ROUTE_PREFIX, + [ + [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_wistia_embed_permission' ], + 'permission_callback' => [ $this, 'permission_edit_posts' ], + ], + [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_wistia_embed_permission' ], + 'permission_callback' => [ $this, 'permission_edit_posts' ], + 'args' => [ + 'value' => [ + 'required' => false, + 'type' => 'bool', + 'default' => true, + ], + ], + ], + ] + ); + } + + /** + * Gets the value of the wistia embed permission. + * + * @return WP_REST_Response|WP_Error The response, or an error. + */ + public function get_wistia_embed_permission() { + try { + $user_id = $this->user_helper->get_current_user_id(); + $value = $this->wistia_embed_permission_repository->get_value_for_user( $user_id ); + } catch ( Exception $exception ) { + return new WP_Error( + 'wpseo_wistia_embed_permission_error', + $exception->getMessage(), + (object) [] + ); + } + + return new WP_REST_Response( + [ + 'json' => (object) [ + 'value' => $value, + ], + ] + ); + } + + /** + * Sets the value of the wistia embed permission. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response|WP_Error The success or failure response. + */ + public function set_wistia_embed_permission( WP_REST_Request $request ) { + $params = $request->get_json_params(); + $value = \boolval( $params['value'] ); + + try { + $user_id = $this->user_helper->get_current_user_id(); + $result = $this->wistia_embed_permission_repository->set_value_for_user( $user_id, $value ); + } catch ( Exception $exception ) { + return new WP_Error( + 'wpseo_wistia_embed_permission_error', + $exception->getMessage(), + (object) [] + ); + } + + return new WP_REST_Response( + [ + 'json' => (object) [ + 'success' => $result, + ], + ], + ( $result ) ? 200 : 400 + ); + } + + /** + * Permission callback. + * + * @return bool True when user has 'edit_posts' permission. + */ + public function permission_edit_posts() { + return \current_user_can( 'edit_posts' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/loadable-interface.php b/wp/wp-content/plugins/wordpress-seo/src/loadable-interface.php new file mode 100644 index 00000000..c5726e4a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/loadable-interface.php @@ -0,0 +1,16 @@ +container = $container; + } + + /** + * Registers an integration. + * + * @param string $integration_class The class name of the integration to be loaded. + * + * @return void + */ + public function register_integration( $integration_class ) { + $this->integrations[] = $integration_class; + } + + /** + * Registers an initializer. + * + * @param string $initializer_class The class name of the initializer to be loaded. + * + * @return void + */ + public function register_initializer( $initializer_class ) { + $this->initializers[] = $initializer_class; + } + + /** + * Registers a route. + * + * @param string $route_class The class name of the route to be loaded. + * + * @return void + */ + public function register_route( $route_class ) { + $this->routes[] = $route_class; + } + + /** + * Registers a command. + * + * @param string $command_class The class name of the command to be loaded. + * + * @return void + */ + public function register_command( $command_class ) { + $this->commands[] = $command_class; + } + + /** + * Registers a migration. + * + * @param string $plugin The plugin the migration belongs to. + * @param string $version The version of the migration. + * @param string $migration_class The class name of the migration to be loaded. + * + * @return void + */ + public function register_migration( $plugin, $version, $migration_class ) { + if ( ! \array_key_exists( $plugin, $this->migrations ) ) { + $this->migrations[ $plugin ] = []; + } + + $this->migrations[ $plugin ][ $version ] = $migration_class; + } + + /** + * Loads all registered classes if their conditionals are met. + * + * @return void + */ + public function load() { + $this->load_initializers(); + + if ( ! \did_action( 'init' ) ) { + \add_action( 'init', [ $this, 'load_integrations' ] ); + } + else { + $this->load_integrations(); + } + + \add_action( 'rest_api_init', [ $this, 'load_routes' ] ); + + if ( \defined( 'WP_CLI' ) && \WP_CLI ) { + $this->load_commands(); + } + } + + /** + * Returns all registered migrations. + * + * @param string $plugin The plugin to get the migrations for. + * + * @return string[]|false The registered migrations. False if no migrations were registered. + */ + public function get_migrations( $plugin ) { + if ( ! \array_key_exists( $plugin, $this->migrations ) ) { + return false; + } + + return $this->migrations[ $plugin ]; + } + + /** + * Loads all registered commands. + * + * @return void + */ + protected function load_commands() { + foreach ( $this->commands as $class ) { + $command = $this->get_class( $class ); + + if ( $command === null ) { + continue; + } + + WP_CLI::add_command( $class::get_namespace(), $command ); + } + } + + /** + * Loads all registered initializers if their conditionals are met. + * + * @return void + */ + protected function load_initializers() { + foreach ( $this->initializers as $class ) { + if ( ! $this->conditionals_are_met( $class ) ) { + continue; + } + + $initializer = $this->get_class( $class ); + + if ( $initializer === null ) { + continue; + } + + $initializer->initialize(); + } + } + + /** + * Loads all registered integrations if their conditionals are met. + * + * @return void + */ + public function load_integrations() { + foreach ( $this->integrations as $class ) { + if ( ! $this->conditionals_are_met( $class ) ) { + continue; + } + + $integration = $this->get_class( $class ); + + if ( $integration === null ) { + continue; + } + + $integration->register_hooks(); + } + } + + /** + * Loads all registered routes if their conditionals are met. + * + * @return void + */ + public function load_routes() { + foreach ( $this->routes as $class ) { + if ( ! $this->conditionals_are_met( $class ) ) { + continue; + } + + $route = $this->get_class( $class ); + + if ( $route === null ) { + continue; + } + + $route->register_routes(); + } + } + + /** + * Checks if all conditionals of a given loadable are met. + * + * @param string $loadable_class The class name of the loadable. + * + * @return bool Whether all conditionals of the loadable are met. + */ + protected function conditionals_are_met( $loadable_class ) { + // In production environments do not fatal if the class does not exist but log and fail gracefully. + if ( \YOAST_ENVIRONMENT === 'production' && ! \class_exists( $loadable_class ) ) { + if ( \defined( 'WP_DEBUG' ) && \WP_DEBUG ) { + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log + \error_log( + \sprintf( + /* translators: %1$s expands to Yoast SEO, %2$s expands to the name of the class that could not be found. */ + \__( '%1$s attempted to load the class %2$s but it could not be found.', 'wordpress-seo' ), + 'Yoast SEO', + $loadable_class + ) + ); + } + return false; + } + + $conditionals = $loadable_class::get_conditionals(); + foreach ( $conditionals as $class ) { + $conditional = $this->get_class( $class ); + if ( $conditional === null || ! $conditional->is_met() ) { + return false; + } + } + + return true; + } + + /** + * Gets a class from the container. + * + * @param string $class_name The class name. + * + * @return object|null The class or, in production environments, null if it does not exist. + * + * @throws Throwable If the class does not exist in development environments. + */ + protected function get_class( $class_name ) { + try { + return $this->container->get( $class_name ); + } catch ( Throwable $e ) { + // In production environments do not fatal if the class could not be constructed but log and fail gracefully. + if ( \YOAST_ENVIRONMENT === 'production' ) { + if ( \defined( 'WP_DEBUG' ) && \WP_DEBUG ) { + // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log + \error_log( $e->getMessage() ); + } + return null; + } + throw $e; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/loggers/logger.php b/wp/wp-content/plugins/wordpress-seo/src/loggers/logger.php new file mode 100644 index 00000000..ca167f63 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/loggers/logger.php @@ -0,0 +1,51 @@ +wrapped_logger = new NullLogger(); + + /** + * Gives the possibility to set override the logger interface. + * + * @param LoggerInterface $logger Instance of NullLogger. + * + * @return LoggerInterface The logger object. + */ + $this->wrapped_logger = \apply_filters( 'wpseo_logger', $this->wrapped_logger ); + } + + /** + * Logs with an arbitrary level. + * + * @param mixed $level The log level. + * @param string $message The log message. + * @param array $context The log context. + * + * @return void + */ + public function log( $level, $message, array $context = [] ) { + $this->wrapped_logger->log( $level, $message, $context ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/main.php b/wp/wp-content/plugins/wordpress-seo/src/main.php new file mode 100644 index 00000000..9040dbb9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/main.php @@ -0,0 +1,82 @@ +is_development() && \class_exists( '\Yoast\WP\SEO\Dependency_Injection\Container_Compiler' ) ) { + // Exception here is unhandled as it will only occur in development. + Container_Compiler::compile( + $this->is_development(), + __DIR__ . '/generated/container.php', + __DIR__ . '/../config/dependency-injection/services.php', + __DIR__ . '/../vendor/composer/autoload_classmap.php', + 'Yoast\WP\SEO\Generated' + ); + } + + if ( \file_exists( __DIR__ . '/generated/container.php' ) ) { + require_once __DIR__ . '/generated/container.php'; + + return new Cached_Container(); + } + + return null; + } + + /** + * {@inheritDoc} + */ + protected function get_name() { + return 'yoast-seo'; + } + + /** + * {@inheritDoc} + */ + protected function get_surfaces() { + return [ + 'classes' => Classes_Surface::class, + 'meta' => Meta_Surface::class, + 'helpers' => Helpers_Surface::class, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/memoizers/meta-tags-context-memoizer.php b/wp/wp-content/plugins/wordpress-seo/src/memoizers/meta-tags-context-memoizer.php new file mode 100644 index 00000000..e74ac250 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/memoizers/meta-tags-context-memoizer.php @@ -0,0 +1,178 @@ +blocks = $blocks; + $this->current_page = $current_page; + $this->repository = $repository; + $this->context_prototype = $context_prototype; + $this->presentation_memoizer = $presentation_memoizer; + } + + /** + * Gets the meta tags context for the current page. + * This function is memoized so every call will return the same result. + * + * @return Meta_Tags_Context The meta tags context. + */ + public function for_current_page() { + if ( ! isset( $this->cache['current_page'] ) ) { + // First reset the query to ensure we actually have the current page. + global $wp_query, $post; + + $old_wp_query = $wp_query; + $old_post = $post; + // phpcs:ignore WordPress.WP.DiscouragedFunctions.wp_reset_query_wp_reset_query -- Reason: The recommended function, wp_reset_postdata, doesn't reset wp_query. + \wp_reset_query(); + + $indexable = $this->repository->for_current_page(); + $page_type = $this->current_page->get_page_type(); + + if ( $page_type === 'Fallback' ) { + // Do not cache the context if it's a fallback page. + // The likely cause for this is that this function was called before the query was loaded. + $context = $this->get( $indexable, $page_type ); + + // Restore the previous query. + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the query. + $GLOBALS['wp_query'] = $old_wp_query; + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the post. + $GLOBALS['post'] = $old_post; + + return $context; + } + $this->cache['current_page'] = $this->get( $indexable, $page_type ); + + // Restore the previous query. + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the query. + $GLOBALS['wp_query'] = $old_wp_query; + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- Reason: we have to restore the post. + $GLOBALS['post'] = $old_post; + } + + return $this->cache['current_page']; + } + + /** + * Gets the meta tags context given an indexable. + * This function is memoized by the indexable so every call with the same indexable will yield the same result. + * + * @param Indexable $indexable The indexable. + * @param string $page_type The page type. + * + * @return Meta_Tags_Context The meta tags context. + */ + public function get( Indexable $indexable, $page_type ) { + if ( ! isset( $this->cache[ $indexable->id ] ) ) { + $blocks = []; + $post = null; + if ( $indexable->object_type === 'post' ) { + $post = \get_post( $indexable->object_id ); + $blocks = $this->blocks->get_all_blocks_from_content( $post->post_content ); + } + + $context = $this->context_prototype->of( + [ + 'indexable' => $indexable, + 'blocks' => $blocks, + 'post' => $post, + 'page_type' => $page_type, + ] + ); + + $context->presentation = $this->presentation_memoizer->get( $indexable, $context, $page_type ); + + $this->cache[ $indexable->id ] = $context; + } + + return $this->cache[ $indexable->id ]; + } + + /** + * Clears the memoization of either a specific indexable or all indexables. + * + * @param Indexable|int|string|null $indexable Optional. The indexable or indexable id to clear the memoization of. + * + * @return void + */ + public function clear( $indexable = null ) { + if ( $indexable instanceof Indexable ) { + unset( $this->cache[ $indexable->id ] ); + return; + } + if ( $indexable !== null ) { + unset( $this->cache[ $indexable ] ); + return; + } + $this->cache = []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/memoizers/presentation-memoizer.php b/wp/wp-content/plugins/wordpress-seo/src/memoizers/presentation-memoizer.php new file mode 100644 index 00000000..366f00be --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/memoizers/presentation-memoizer.php @@ -0,0 +1,89 @@ +container = $service_container; + } + + /** + * Gets the presentation of an indexable for a specific page type. + * This function is memoized by the indexable so every call with the same indexable will yield the same result. + * + * @param Indexable $indexable The indexable to get a presentation of. + * @param Meta_Tags_Context $context The current meta tags context. + * @param string $page_type The page type. + * + * @return Indexable_Presentation The indexable presentation. + */ + public function get( Indexable $indexable, Meta_Tags_Context $context, $page_type ) { + if ( ! isset( $this->cache[ $indexable->id ] ) ) { + $presentation = $this->container->get( "Yoast\WP\SEO\Presentations\Indexable_{$page_type}_Presentation", ContainerInterface::NULL_ON_INVALID_REFERENCE ); + + if ( ! $presentation ) { + $presentation = $this->container->get( Indexable_Presentation::class ); + } + + $context->presentation = $presentation->of( + [ + 'model' => $indexable, + 'context' => $context, + ] + ); + + $this->cache[ $indexable->id ] = $context->presentation; + } + + return $this->cache[ $indexable->id ]; + } + + /** + * Clears the memoization of either a specific indexable or all indexables. + * + * @param Indexable|int|null $indexable Optional. The indexable or indexable id to clear the memoization of. + * + * @return void + */ + public function clear( $indexable = null ) { + if ( $indexable instanceof Indexable ) { + unset( $this->cache[ $indexable->id ] ); + return; + } + if ( \is_int( $indexable ) ) { + unset( $this->cache[ $indexable ] ); + return; + } + if ( $indexable === null ) { + $this->cache = []; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/models/indexable-extension.php b/wp/wp-content/plugins/wordpress-seo/src/models/indexable-extension.php new file mode 100644 index 00000000..9c65405e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/models/indexable-extension.php @@ -0,0 +1,31 @@ +indexable === null ) { + $this->indexable = $this->belongs_to( 'Indexable', 'indexable_id', 'id' )->find_one(); + } + + return $this->indexable; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/models/indexable-hierarchy.php b/wp/wp-content/plugins/wordpress-seo/src/models/indexable-hierarchy.php new file mode 100644 index 00000000..f465941f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/models/indexable-hierarchy.php @@ -0,0 +1,28 @@ +loaded_extensions[ $class_name ] ) { + $this->loaded_extensions[ $class_name ] = $this->has_one( $class_name, 'indexable_id', 'id' )->find_one(); + } + + return $this->loaded_extensions[ $class_name ]; + } + + /** + * Enhances the save method. + * + * @return bool True on success. + */ + public function save() { + if ( $this->permalink ) { + $this->sanitize_permalink(); + $this->permalink_hash = \strlen( $this->permalink ) . ':' . \md5( $this->permalink ); + } + if ( \is_string( $this->primary_focus_keyword ) && \mb_strlen( $this->primary_focus_keyword ) > 191 ) { + $this->primary_focus_keyword = \mb_substr( $this->primary_focus_keyword, 0, 191, 'UTF-8' ); + } + + return parent::save(); + } + + /** + * Sanitizes the permalink. + * + * @return void + */ + protected function sanitize_permalink() { + if ( $this->permalink === 'unindexed' ) { + return; + } + + $permalink_structure = \get_option( 'permalink_structure' ); + $permalink_parts = \wp_parse_url( $this->permalink ); + + if ( ! isset( $permalink_parts['path'] ) ) { + $permalink_parts['path'] = '/'; + } + if ( \substr( $permalink_structure, -1, 1 ) === '/' && \strpos( \substr( $permalink_parts['path'], -5 ), '.' ) === false ) { + $permalink_parts['path'] = \trailingslashit( $permalink_parts['path'] ); + } + + $permalink = ''; + if ( isset( $permalink_parts['scheme'] ) ) { + $permalink .= $permalink_parts['scheme'] . '://'; + } + if ( isset( $permalink_parts['host'] ) ) { + $permalink .= $permalink_parts['host']; + } + if ( isset( $permalink_parts['port'] ) ) { + $permalink .= ':' . $permalink_parts['port']; + } + if ( isset( $permalink_parts['path'] ) ) { + $permalink .= $permalink_parts['path']; + } + if ( isset( $permalink_parts['query'] ) ) { + $permalink .= '?' . $permalink_parts['query']; + } + // We never set the fragment as the fragment is intended to be client-only. + $this->permalink = $permalink; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/models/primary-term.php b/wp/wp-content/plugins/wordpress-seo/src/models/primary-term.php new file mode 100644 index 00000000..254c6289 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/models/primary-term.php @@ -0,0 +1,39 @@ +is_prototype() ) { + throw new Exception( 'Attempting to create a model presentation from another model presentation. Use the prototype presentation gained from DI instead.' ); + } + + // Clone self to allow stateful services that do benefit from DI. + $presentation = clone $this; + foreach ( $data as $key => $value ) { + $presentation->{$key} = $value; + } + $presentation->is_prototype = false; + return $presentation; + } + + /** + * Magic getter for lazy loading of generate functions. + * + * @param string $name The property to get. + * + * @return mixed The value if it could be generated. + * + * @throws Exception If there is no generator for the property. + */ + public function __get( $name ) { + if ( $this->is_prototype() ) { + throw new Exception( 'Attempting property access on prototype presentation. Use Presentation::of( $data ) to get a model presentation.' ); + } + $generator = "generate_$name"; + if ( \method_exists( $this, $generator ) ) { + $this->{$name} = $this->$generator(); + return $this->{$name}; + } + throw new Exception( "Property $name has no generator. Expected function $generator." ); + } + + /** + * Magic isset for ensuring methods that have a generator are recognised. + * + * @codeCoverageIgnore Wrapper method. + * + * @param string $name The property to get. + * + * @return bool Whether or not there is a generator for the requested property. + */ + public function __isset( $name ) { + return \method_exists( $this, "generate_$name" ); + } + + /** + * Returns `true` if this class is a prototype. + * + * @codeCoverageIgnore Wrapper method. + * + * @return bool If this class is a prototype or not. + */ + protected function is_prototype() { + return $this->is_prototype; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/archive-adjacent-trait.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/archive-adjacent-trait.php new file mode 100644 index 00000000..222a89fd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/archive-adjacent-trait.php @@ -0,0 +1,79 @@ +pagination = $pagination; + } + + /** + * Generates the rel prev. + * + * @return string + */ + public function generate_rel_prev() { + if ( $this->pagination->is_rel_adjacent_disabled() ) { + return ''; + } + + $current_page = \max( 1, $this->pagination->get_current_archive_page_number() ); + // Check if there is a previous page. + if ( $current_page === 1 ) { + return ''; + } + // Check if the previous page is the first page. + if ( $current_page === 2 ) { + return $this->permalink; + } + + return $this->pagination->get_paginated_url( $this->permalink, ( $current_page - 1 ) ); + } + + /** + * Generates the rel next. + * + * @return string + */ + public function generate_rel_next() { + if ( $this->pagination->is_rel_adjacent_disabled() ) { + return ''; + } + + $current_page = \max( 1, $this->pagination->get_current_archive_page_number() ); + if ( $this->pagination->get_number_of_archive_pages() <= $current_page ) { + return ''; + } + + return $this->pagination->get_paginated_url( $this->permalink, ( $current_page + 1 ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-author-archive-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-author-archive-presentation.php new file mode 100644 index 00000000..f6105f8a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-author-archive-presentation.php @@ -0,0 +1,173 @@ +post_type = $post_type; + $this->author_archive = $author_archive; + } + + /** + * Generates the canonical. + * + * @return string The canonical. + */ + public function generate_canonical() { + if ( $this->model->canonical ) { + return $this->model->canonical; + } + + if ( ! $this->permalink ) { + return ''; + } + + $current_page = $this->pagination->get_current_archive_page_number(); + if ( $current_page > 1 ) { + return $this->pagination->get_paginated_url( $this->permalink, $current_page ); + } + + return $this->permalink; + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + $option_titles_key = 'title-author-wpseo'; + $title = $this->options->get( $option_titles_key ); + if ( $title ) { + return $title; + } + + return $this->options->get_title_default( $option_titles_key ); + } + + /** + * Generates the meta description. + * + * @return string The meta description. + */ + public function generate_meta_description() { + if ( $this->model->description ) { + return $this->model->description; + } + + $option_titles_key = 'metadesc-author-wpseo'; + $description = $this->options->get( $option_titles_key ); + if ( $description ) { + return $description; + } + + return $this->options->get_title_default( $option_titles_key ); + } + + /** + * Generates the robots value. + * + * @return array The robots value. + */ + public function generate_robots() { + $robots = $this->get_base_robots(); + + // Global option: "Show author archives in search results". + if ( $this->options->get( 'noindex-author-wpseo', false ) ) { + $robots['index'] = 'noindex'; + return $this->filter_robots( $robots ); + } + + $current_author = \get_userdata( $this->model->object_id ); + + // Safety check. The call to `get_user_data` could return false (called in `get_queried_object`). + if ( $current_author === false ) { + $robots['index'] = 'noindex'; + return $this->filter_robots( $robots ); + } + + $author_archive_post_types = $this->author_archive->get_author_archive_post_types(); + + // Global option: "Show archives for authors without posts in search results". + if ( $this->options->get( 'noindex-author-noposts-wpseo', false ) && $this->user->count_posts( $current_author->ID, $author_archive_post_types ) === 0 ) { + $robots['index'] = 'noindex'; + return $this->filter_robots( $robots ); + } + + // User option: "Do not allow search engines to show this author's archives in search results". + if ( $this->user->get_meta( $current_author->ID, 'wpseo_noindex_author', true ) === 'on' ) { + $robots['index'] = 'noindex'; + return $this->filter_robots( $robots ); + } + + return $this->filter_robots( $robots ); + } + + /** + * Generates the Open Graph type. + * + * @return string The Open Graph type. + */ + public function generate_open_graph_type() { + return 'profile'; + } + + /** + * Generates the open graph images. + * + * @return array The open graph images. + */ + public function generate_open_graph_images() { + if ( $this->context->open_graph_enabled === false ) { + return []; + } + + return $this->open_graph_image_generator->generate_for_author_archive( $this->context ); + } + + /** + * Generates the source. + * + * @return array The source. + */ + public function generate_source() { + return [ 'post_author' => $this->model->object_id ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-date-archive-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-date-archive-presentation.php new file mode 100644 index 00000000..da2801b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-date-archive-presentation.php @@ -0,0 +1,123 @@ +pagination = $pagination; + } + + /** + * Generates the canonical. + * + * @return string The canonical. + */ + public function generate_canonical() { + $canonical = $this->current_page->get_date_archive_permalink(); + + $current_page = $this->pagination->get_current_archive_page_number(); + if ( $current_page > 1 ) { + return $this->pagination->get_paginated_url( $canonical, $current_page ); + } + + return $canonical; + } + + /** + * Generates the robots value. + * + * @return array The robots value. + */ + public function generate_robots() { + $robots = $this->get_base_robots(); + + if ( $this->options->get( 'noindex-archive-wpseo', false ) ) { + $robots['index'] = 'noindex'; + } + + return $this->filter_robots( $robots ); + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + return $this->options->get_title_default( 'title-archive-wpseo' ); + } + + /** + * Generates the rel prev. + * + * @return string The rel prev value. + */ + public function generate_rel_prev() { + if ( $this->pagination->is_rel_adjacent_disabled() ) { + return ''; + } + + $current_page = \max( 1, $this->pagination->get_current_archive_page_number() ); + // Check if there is a previous page. + if ( $current_page === 1 ) { + return ''; + } + // Check if the previous page is the first page. + if ( $current_page === 2 ) { + return $this->current_page->get_date_archive_permalink(); + } + + return $this->pagination->get_paginated_url( $this->current_page->get_date_archive_permalink(), ( $current_page - 1 ) ); + } + + /** + * Generates the rel next. + * + * @return string The rel prev next. + */ + public function generate_rel_next() { + if ( $this->pagination->is_rel_adjacent_disabled() ) { + return ''; + } + + $current_page = \max( 1, $this->pagination->get_current_archive_page_number() ); + if ( $this->pagination->get_number_of_archive_pages() <= $current_page ) { + return ''; + } + + return $this->pagination->get_paginated_url( $this->current_page->get_date_archive_permalink(), ( $current_page + 1 ) ); + } + + /** + * Generates the open graph url. + * + * @return string The open graph url. + */ + public function generate_open_graph_url() { + return $this->current_page->get_date_archive_permalink(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-error-page-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-error-page-presentation.php new file mode 100644 index 00000000..dcbee565 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-error-page-presentation.php @@ -0,0 +1,37 @@ +get_base_robots(); + + $robots['index'] = 'noindex'; + + return $this->filter_robots( $robots ); + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + return $this->options->get_title_default( 'title-404-wpseo' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-home-page-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-home-page-presentation.php new file mode 100644 index 00000000..e2d7ba32 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-home-page-presentation.php @@ -0,0 +1,61 @@ +model->canonical ) { + return $this->model->canonical; + } + + if ( ! $this->permalink ) { + return ''; + } + + $current_page = $this->pagination->get_current_archive_page_number(); + if ( $current_page > 1 ) { + return $this->pagination->get_paginated_url( $this->permalink, $current_page ); + } + + return $this->permalink; + } + + /** + * Generates the meta description. + * + * @return string The meta description. + */ + public function generate_meta_description() { + if ( $this->model->description ) { + return $this->model->description; + } + + return $this->options->get( 'metadesc-home-wpseo' ); + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + return $this->options->get_title_default( 'title-home-wpseo' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-archive-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-archive-presentation.php new file mode 100644 index 00000000..f13e0cca --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-archive-presentation.php @@ -0,0 +1,72 @@ +permalink; + if ( ! $permalink ) { + return ''; + } + + $current_page = $this->pagination->get_current_archive_page_number(); + if ( $current_page > 1 ) { + return $this->pagination->get_paginated_url( $permalink, $current_page ); + } + + return $permalink; + } + + /** + * Generates the robots value. + * + * @return array The robots value. + */ + public function generate_robots() { + $robots = $this->get_base_robots(); + + if ( $this->options->get( 'noindex-ptarchive-' . $this->model->object_sub_type, false ) ) { + $robots['index'] = 'noindex'; + } + + return $this->filter_robots( $robots ); + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + $post_type = $this->model->object_sub_type; + $title = $this->options->get_title_default( 'title-ptarchive-' . $post_type ); + + return $title; + } + + /** + * Generates the source. + * + * @return array The source. + */ + public function generate_source() { + return [ 'post_type' => $this->model->object_sub_type ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-presentation.php new file mode 100644 index 00000000..018e4eed --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-post-type-presentation.php @@ -0,0 +1,419 @@ +post_type = $post_type; + $this->date = $date; + $this->pagination = $pagination; + $this->post = $post; + } + + /** + * Generates the canonical. + * + * @return string The canonical. + */ + public function generate_canonical() { + if ( $this->model->canonical ) { + return $this->model->canonical; + } + + $permalink = $this->permalink; + + // Fix paginated pages canonical, but only if the page is truly paginated. + $current_page = $this->pagination->get_current_post_page_number(); + if ( $current_page > 1 ) { + $number_of_pages = $this->model->number_of_pages; + if ( $number_of_pages && $current_page <= $number_of_pages ) { + $permalink = $this->get_paginated_url( $permalink, $current_page ); + } + } + + return $this->url->ensure_absolute_url( $permalink ); + } + + /** + * Generates the rel prev. + * + * @return string The rel prev value. + */ + public function generate_rel_prev() { + if ( $this->model->number_of_pages === null ) { + return ''; + } + + if ( $this->pagination->is_rel_adjacent_disabled() ) { + return ''; + } + + $current_page = \max( 1, $this->pagination->get_current_post_page_number() ); + + // Check if there is a previous page. + if ( $current_page < 2 ) { + return ''; + } + + // Check if the previous page is the first page. + if ( $current_page === 2 ) { + return $this->model->permalink; + } + + return $this->get_paginated_url( $this->model->permalink, ( $current_page - 1 ) ); + } + + /** + * Generates the rel next. + * + * @return string The rel prev next. + */ + public function generate_rel_next() { + if ( $this->model->number_of_pages === null ) { + return ''; + } + + if ( $this->pagination->is_rel_adjacent_disabled() ) { + return ''; + } + + $current_page = \max( 1, $this->pagination->get_current_post_page_number() ); + if ( $this->model->number_of_pages <= $current_page ) { + return ''; + } + + return $this->get_paginated_url( $this->model->permalink, ( $current_page + 1 ) ); + } + + /** + * Generates the open graph title. + * + * @return string The open graph title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + // Get SEO title as entered in Search appearance. + $post_type = $this->model->object_sub_type; + $title = $this->options->get( 'title-' . $this->model->object_sub_type ); + if ( $title ) { + return $title; + } + + // Get installation default title. + return $this->options->get_title_default( 'title-' . $post_type ); + } + + /** + * Generates the meta description. + * + * @return string The meta description. + */ + public function generate_meta_description() { + if ( $this->model->description ) { + return $this->model->description; + } + + return $this->options->get( 'metadesc-' . $this->model->object_sub_type ); + } + + /** + * Generates the open graph description. + * + * @return string The open graph description. + */ + public function generate_open_graph_description() { + if ( $this->model->open_graph_description ) { + $open_graph_description = $this->model->open_graph_description; + } + + if ( empty( $open_graph_description ) ) { + // The helper applies a filter, but we don't have a default value at this stage so we pass an empty string. + $open_graph_description = $this->values_helper->get_open_graph_description( '', $this->model->object_type, $this->model->object_sub_type ); + } + + if ( empty( $open_graph_description ) ) { + $open_graph_description = $this->meta_description; + } + + if ( empty( $open_graph_description ) ) { + $open_graph_description = $this->post->get_the_excerpt( $this->model->object_id ); + $open_graph_description = $this->post->strip_shortcodes( $open_graph_description ); + } + + return $open_graph_description; + } + + /** + * Generates the open graph images. + * + * @return array The open graph images. + */ + public function generate_open_graph_images() { + if ( \post_password_required() ) { + return []; + } + + return parent::generate_open_graph_images(); + } + + /** + * Generates the Open Graph type. + * + * @return string The Open Graph type. + */ + public function generate_open_graph_type() { + return 'article'; + } + + /** + * Generates the open graph article author. + * + * @return string The open graph article author. + */ + public function generate_open_graph_article_author() { + if ( $this->model->object_sub_type !== 'post' ) { + return ''; + } + + $post = $this->source; + + $open_graph_article_author = $this->user->get_the_author_meta( 'facebook', $post->post_author ); + + if ( $open_graph_article_author ) { + return $open_graph_article_author; + } + + return ''; + } + + /** + * Generates the open graph article publisher. + * + * @return string The open graph article publisher. + */ + public function generate_open_graph_article_publisher() { + $open_graph_article_publisher = $this->context->open_graph_publisher; + + if ( $open_graph_article_publisher ) { + return $open_graph_article_publisher; + } + + return ''; + } + + /** + * Generates the open graph article published time. + * + * @return string The open graph article published time. + */ + public function generate_open_graph_article_published_time() { + if ( $this->model->object_sub_type !== 'post' ) { + /** + * Filter: 'wpseo_opengraph_show_publish_date' - Allow showing publication date for other post types. + * + * @param bool $show Whether or not to show publish date. + * @param string $post_type The current URL's post type. + */ + if ( ! \apply_filters( 'wpseo_opengraph_show_publish_date', false, $this->post->get_post_type( $this->source ) ) ) { + return ''; + } + } + + return $this->date->format( $this->source->post_date_gmt ); + } + + /** + * Generates the open graph article modified time. + * + * @return string The open graph article modified time. + */ + public function generate_open_graph_article_modified_time() { + if ( $this->source->post_modified_gmt !== $this->source->post_date_gmt ) { + return $this->date->format( $this->source->post_modified_gmt ); + } + + return ''; + } + + /** + * Generates the source. + * + * @return array The source. + */ + public function generate_source() { + return \get_post( $this->model->object_id ); + } + + /** + * Generates the robots value. + * + * @return array The robots value. + */ + public function generate_robots() { + $robots = $this->get_base_robots(); + $robots = \array_merge( + $robots, + [ + 'imageindex' => ( $this->model->is_robots_noimageindex === true ) ? 'noimageindex' : null, + 'archive' => ( $this->model->is_robots_noarchive === true ) ? 'noarchive' : null, + 'snippet' => ( $this->model->is_robots_nosnippet === true ) ? 'nosnippet' : null, + ] + ); + + // No snippet means max snippet can be omitted. + if ( $this->model->is_robots_nosnippet === true ) { + $robots['max-snippet'] = null; + } + + // No image index means max image preview can be omitted. + if ( $this->model->is_robots_noimageindex === true ) { + $robots['max-image-preview'] = null; + } + + // When the post specific index is not set, look to the post status and default of the post type. + if ( $this->model->is_robots_noindex === null ) { + $post_status_private = \get_post_status( $this->model->object_id ) === 'private'; + $post_type_noindex = ! $this->post_type->is_indexable( $this->model->object_sub_type ); + + if ( $post_status_private || $post_type_noindex ) { + $robots['index'] = 'noindex'; + } + } + + return $this->filter_robots( $robots ); + } + + /** + * Generates the Twitter description. + * + * @return string The Twitter description. + */ + public function generate_twitter_description() { + $twitter_description = parent::generate_twitter_description(); + + if ( $twitter_description ) { + return $twitter_description; + } + + if ( $this->open_graph_description && $this->context->open_graph_enabled === true ) { + return ''; + } + + return $this->post->get_the_excerpt( $this->model->object_id ); + } + + /** + * Generates the Twitter image. + * + * @return string The Twitter image. + */ + public function generate_twitter_image() { + if ( \post_password_required() ) { + return ''; + } + + return parent::generate_twitter_image(); + } + + /** + * Generates the Twitter creator. + * + * @return string The Twitter creator. + */ + public function generate_twitter_creator() { + if ( $this->model->object_sub_type !== 'post' ) { + return ''; + } + + $twitter_creator = \ltrim( \trim( \get_the_author_meta( 'twitter', $this->source->post_author ) ), '@' ); + + /** + * Filter: 'wpseo_twitter_creator_account' - Allow changing the X account as output in the X card by Yoast SEO. + * + * @param string $twitter The twitter account name string. + */ + $twitter_creator = \apply_filters( 'wpseo_twitter_creator_account', $twitter_creator ); + + if ( \is_string( $twitter_creator ) && $twitter_creator !== '' ) { + return '@' . $twitter_creator; + } + + $site_twitter = $this->options->get( 'twitter_site', '' ); + if ( \is_string( $site_twitter ) && $site_twitter !== '' ) { + return '@' . $site_twitter; + } + + return ''; + } + + /** + * Wraps the get_paginated_url pagination helper method. + * + * @codeCoverageIgnore A wrapper method. + * + * @param string $url The un-paginated URL of the current archive. + * @param string $page The page number to add on to $url for the $link tag. + * + * @return string The paginated URL. + */ + protected function get_paginated_url( $url, $page ) { + return $this->pagination->get_paginated_url( $url, $page, false ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-presentation.php new file mode 100644 index 00000000..b3ec79f1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-presentation.php @@ -0,0 +1,767 @@ +schema_generator = $schema_generator; + $this->open_graph_locale_generator = $open_graph_locale_generator; + $this->open_graph_image_generator = $open_graph_image_generator; + $this->twitter_image_generator = $twitter_image_generator; + $this->breadcrumbs_generator = $breadcrumbs_generator; + } + + /** + * Used by dependency injection container to inject the helpers. + * + * @required + * + * @param Image_Helper $image The image helper. + * @param Options_Helper $options The options helper. + * @param Current_Page_Helper $current_page The current page helper. + * @param Url_Helper $url The URL helper. + * @param User_Helper $user The user helper. + * @param Indexable_Helper $indexable The indexable helper. + * @param Permalink_Helper $permalink The permalink helper. + * @param Values_Helper $values The values helper. + * + * @return void + */ + public function set_helpers( + Image_Helper $image, + Options_Helper $options, + Current_Page_Helper $current_page, + Url_Helper $url, + User_Helper $user, + Indexable_Helper $indexable, + Permalink_Helper $permalink, + Values_Helper $values + ) { + $this->image = $image; + $this->options = $options; + $this->current_page = $current_page; + $this->url = $url; + $this->user = $user; + $this->indexable_helper = $indexable; + $this->permalink_helper = $permalink; + $this->values_helper = $values; + } + + /** + * Gets the permalink from the indexable or generates it if dynamic permalinks are enabled. + * + * @return string The permalink. + */ + public function generate_permalink() { + if ( $this->indexable_helper->dynamic_permalinks_enabled() ) { + return $this->permalink_helper->get_permalink_for_indexable( $this->model ); + } + + if ( \is_date() ) { + return $this->current_page->get_date_archive_permalink(); + } + + if ( \is_attachment() ) { + global $wp; + return \trailingslashit( \home_url( $wp->request ) ); + } + + return $this->model->permalink; + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + return ''; + } + + /** + * Generates the meta description. + * + * @return string The meta description. + */ + public function generate_meta_description() { + if ( $this->model->description ) { + return $this->model->description; + } + + return ''; + } + + /** + * Generates the robots value. + * + * @return array The robots value. + */ + public function generate_robots() { + $robots = $this->get_base_robots(); + + return $this->filter_robots( $robots ); + } + + /** + * Gets the base robots value. + * + * @return array The base robots value. + */ + protected function get_base_robots() { + return [ + 'index' => ( $this->model->is_robots_noindex === true ) ? 'noindex' : 'index', + 'follow' => ( $this->model->is_robots_nofollow === true ) ? 'nofollow' : 'follow', + 'max-snippet' => 'max-snippet:-1', + 'max-image-preview' => 'max-image-preview:large', + 'max-video-preview' => 'max-video-preview:-1', + ]; + } + + /** + * Run the robots output content through the `wpseo_robots` filter. + * + * @param array $robots The meta robots values to filter. + * + * @return array The filtered meta robots values. + */ + protected function filter_robots( $robots ) { + // Remove values that are only listened to when indexing. + if ( $robots['index'] === 'noindex' ) { + $robots['imageindex'] = null; + $robots['archive'] = null; + $robots['snippet'] = null; + $robots['max-snippet'] = null; + $robots['max-image-preview'] = null; + $robots['max-video-preview'] = null; + } + + $robots_string = \implode( ', ', \array_filter( $robots ) ); + + /** + * Filter: 'wpseo_robots' - Allows filtering of the meta robots output of Yoast SEO. + * + * @param string $robots The meta robots directives to be echoed. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $robots_filtered = \apply_filters( 'wpseo_robots', $robots_string, $this ); + + // Convert the robots string back to an array. + if ( \is_string( $robots_filtered ) ) { + $robots_values = \explode( ', ', $robots_filtered ); + $robots_new = []; + + foreach ( $robots_values as $value ) { + $key = $value; + + // Change `noindex` to `index. + if ( \strpos( $key, 'no' ) === 0 ) { + $key = \substr( $value, 2 ); + } + // Change `max-snippet:-1` to `max-snippet`. + $colon_position = \strpos( $key, ':' ); + if ( $colon_position !== false ) { + $key = \substr( $value, 0, $colon_position ); + } + + $robots_new[ $key ] = $value; + } + + $robots = $robots_new; + } + + if ( \is_bool( $robots_filtered ) && ( $robots_filtered === false ) ) { + return [ + 'index' => 'noindex', + 'follow' => 'nofollow', + ]; + } + + if ( ! $robots_filtered ) { + return []; + } + + /** + * Filter: 'wpseo_robots_array' - Allows filtering of the meta robots output array of Yoast SEO. + * + * @param array $robots The meta robots directives to be used. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + return \apply_filters( 'wpseo_robots_array', \array_filter( $robots ), $this ); + } + + /** + * Generates the canonical. + * + * @return string The canonical. + */ + public function generate_canonical() { + if ( $this->model->canonical ) { + return $this->model->canonical; + } + + if ( $this->permalink ) { + return $this->permalink; + } + + return ''; + } + + /** + * Generates the rel prev. + * + * @return string The rel prev value. + */ + public function generate_rel_prev() { + return ''; + } + + /** + * Generates the rel next. + * + * @return string The rel prev next. + */ + public function generate_rel_next() { + return ''; + } + + /** + * Generates the Open Graph type. + * + * @return string The Open Graph type. + */ + public function generate_open_graph_type() { + return 'website'; + } + + /** + * Generates the open graph title. + * + * @return string The open graph title. + */ + public function generate_open_graph_title() { + if ( $this->model->open_graph_title ) { + $open_graph_title = $this->model->open_graph_title; + } + + if ( empty( $open_graph_title ) ) { + // The helper applies a filter, but we don't have a default value at this stage so we pass an empty string. + $open_graph_title = $this->values_helper->get_open_graph_title( '', $this->model->object_type, $this->model->object_sub_type ); + } + + if ( empty( $open_graph_title ) ) { + $open_graph_title = $this->title; + } + + return $open_graph_title; + } + + /** + * Generates the open graph description. + * + * @return string The open graph description. + */ + public function generate_open_graph_description() { + if ( $this->model->open_graph_description ) { + $open_graph_description = $this->model->open_graph_description; + } + + if ( empty( $open_graph_description ) ) { + // The helper applies a filter, but we don't have a default value at this stage so we pass an empty string. + $open_graph_description = $this->values_helper->get_open_graph_description( '', $this->model->object_type, $this->model->object_sub_type ); + } + + if ( empty( $open_graph_description ) ) { + $open_graph_description = $this->meta_description; + } + + return $open_graph_description; + } + + /** + * Generates the open graph images. + * + * @return array The open graph images. + */ + public function generate_open_graph_images() { + if ( $this->context->open_graph_enabled === false ) { + return []; + } + + return $this->open_graph_image_generator->generate( $this->context ); + } + + /** + * Generates the open graph image ID. + * + * @return string The open graph image ID. + */ + public function generate_open_graph_image_id() { + if ( $this->model->open_graph_image_id ) { + return $this->model->open_graph_image_id; + } + + return $this->values_helper->get_open_graph_image_id( 0, $this->model->object_type, $this->model->object_sub_type ); + } + + /** + * Generates the open graph image URL. + * + * @return string The open graph image URL. + */ + public function generate_open_graph_image() { + if ( $this->model->open_graph_image ) { + return $this->model->open_graph_image; + } + + return $this->values_helper->get_open_graph_image( '', $this->model->object_type, $this->model->object_sub_type ); + } + + /** + * Generates the open graph url. + * + * @return string The open graph url. + */ + public function generate_open_graph_url() { + if ( $this->model->canonical ) { + return $this->model->canonical; + } + + return $this->permalink; + } + + /** + * Generates the open graph article publisher. + * + * @return string The open graph article publisher. + */ + public function generate_open_graph_article_publisher() { + return ''; + } + + /** + * Generates the open graph article author. + * + * @return string The open graph article author. + */ + public function generate_open_graph_article_author() { + return ''; + } + + /** + * Generates the open graph article published time. + * + * @return string The open graph article published time. + */ + public function generate_open_graph_article_published_time() { + return ''; + } + + /** + * Generates the open graph article modified time. + * + * @return string The open graph article modified time. + */ + public function generate_open_graph_article_modified_time() { + return ''; + } + + /** + * Generates the open graph locale. + * + * @return string The open graph locale. + */ + public function generate_open_graph_locale() { + return $this->open_graph_locale_generator->generate( $this->context ); + } + + /** + * Generates the open graph site name. + * + * @return string The open graph site name. + */ + public function generate_open_graph_site_name() { + return $this->context->wordpress_site_name; + } + + /** + * Generates the Twitter card type. + * + * @return string The Twitter card type. + */ + public function generate_twitter_card() { + return $this->context->twitter_card; + } + + /** + * Generates the Twitter title. + * + * @return string The Twitter title. + */ + public function generate_twitter_title() { + if ( $this->model->twitter_title ) { + return $this->model->twitter_title; + } + + if ( $this->context->open_graph_enabled === true ) { + $social_template_title = $this->values_helper->get_open_graph_title( '', $this->model->object_type, $this->model->object_sub_type ); + $open_graph_title = $this->open_graph_title; + + // If the helper returns a value and it's different from the OG value in the indexable, + // output it in a twitter: tag. + if ( ! empty( $social_template_title ) && $social_template_title !== $open_graph_title ) { + return $social_template_title; + } + + // If the OG title is set, let og: tag take care of this. + if ( ! empty( $open_graph_title ) ) { + return ''; + } + } + + if ( $this->title ) { + return $this->title; + } + + return ''; + } + + /** + * Generates the Twitter description. + * + * @return string The Twitter description. + */ + public function generate_twitter_description() { + if ( $this->model->twitter_description ) { + return $this->model->twitter_description; + } + + if ( $this->context->open_graph_enabled === true ) { + $social_template_description = $this->values_helper->get_open_graph_description( '', $this->model->object_type, $this->model->object_sub_type ); + $open_graph_description = $this->open_graph_description; + + // If the helper returns a value and it's different from the OG value in the indexable, + // output it in a twitter: tag. + if ( ! empty( $social_template_description ) && $social_template_description !== $open_graph_description ) { + return $social_template_description; + } + + // If the OG description is set, let og: tag take care of this. + if ( ! empty( $open_graph_description ) ) { + return ''; + } + } + + if ( $this->meta_description ) { + return $this->meta_description; + } + + return ''; + } + + /** + * Generates the Twitter image. + * + * @return string The Twitter image. + */ + public function generate_twitter_image() { + $images = $this->twitter_image_generator->generate( $this->context ); + $image = \reset( $images ); + + // Use a user-defined Twitter image, if present. + if ( $image && $this->context->indexable->twitter_image_source === 'set-by-user' ) { + return $image['url']; + } + + // Let the Open Graph tags, if enabled, handle the rest of the fallback hierarchy. + if ( $this->context->open_graph_enabled === true && $this->open_graph_images ) { + return ''; + } + + // Set a Twitter tag with the featured image, or a prominent image from the content, if present. + if ( $image ) { + return $image['url']; + } + + return ''; + } + + /** + * Generates the Twitter creator. + * + * @return string The Twitter creator. + */ + public function generate_twitter_creator() { + return ''; + } + + /** + * Generates the Twitter site. + * + * @return string The Twitter site. + */ + public function generate_twitter_site() { + switch ( $this->context->site_represents ) { + case 'person': + $twitter = $this->user->get_the_author_meta( 'twitter', (int) $this->context->site_user_id ); + if ( empty( $twitter ) ) { + $twitter = $this->options->get( 'twitter_site' ); + } + break; + case 'company': + default: + $twitter = $this->options->get( 'twitter_site' ); + break; + } + + return $twitter; + } + + /** + * Generates the source. + * + * @return array The source. + */ + public function generate_source() { + return []; + } + + /** + * Generates the schema for the page. + * + * @codeCoverageIgnore Wrapper method. + * + * @return array The Schema object. + */ + public function generate_schema() { + return $this->schema_generator->generate( $this->context ); + } + + /** + * Generates the breadcrumbs for the page. + * + * @codeCoverageIgnore Wrapper method. + * + * @return array The breadcrumbs. + */ + public function generate_breadcrumbs() { + return $this->breadcrumbs_generator->generate( $this->context ); + } + + /** + * Generates the estimated reading time. + * + * @codeCoverageIgnore Wrapper method. + * + * @return int|null The estimated reading time. + */ + public function generate_estimated_reading_time_minutes() { + if ( $this->model->estimated_reading_time_minutes !== null ) { + return $this->model->estimated_reading_time_minutes; + } + + if ( $this->context->post === null ) { + return null; + } + + // 200 is the approximate estimated words per minute across languages. + $words_per_minute = 200; + $words = \str_word_count( \wp_strip_all_tags( $this->context->post->post_content ) ); + return (int) \round( $words / $words_per_minute ); + } + + /** + * Strips all nested dependencies from the debug info. + * + * @return array + */ + public function __debugInfo() { + return [ + 'model' => $this->model, + 'context' => $this->context, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-search-result-page-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-search-result-page-presentation.php new file mode 100644 index 00000000..d570ab9e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-search-result-page-presentation.php @@ -0,0 +1,71 @@ +get_base_robots(); + + $robots['index'] = 'noindex'; + + return $this->filter_robots( $robots ); + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + return $this->options->get_title_default( 'title-search-wpseo' ); + } + + /** + * Generates the Twitter title. + * + * @return string The Twitter title. + */ + public function generate_twitter_title() { + return $this->title; + } + + /** + * Generates the Open Graph URL. + * + * @return string The Open Graph URL. + */ + public function generate_open_graph_url() { + $search_query = \get_search_query(); + + // Regex catches case when /search/page/N without search term is itself mistaken for search term. + if ( ! empty( $search_query ) && ! \preg_match( '|^page/\d+$|', $search_query ) ) { + return \get_search_link(); + } + + return ''; + } + + /** + * Generates the Open Graph type. + * + * @return string The Open Graph type. + */ + public function generate_open_graph_type() { + return 'article'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-home-page-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-home-page-presentation.php new file mode 100644 index 00000000..45340bd7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-home-page-presentation.php @@ -0,0 +1,32 @@ +pagination->get_paginated_url( $url, $page ); + } + + /** + * Generates the Open Graph type. + * + * @return string The Open Graph type. + */ + public function generate_open_graph_type() { + return 'website'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-posts-page-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-posts-page-presentation.php new file mode 100644 index 00000000..5c5ce22b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-static-posts-page-presentation.php @@ -0,0 +1,50 @@ +model->canonical ) { + return $this->model->canonical; + } + + $current_page = $this->pagination->get_current_archive_page_number(); + + if ( $current_page > 1 ) { + return $this->pagination->get_paginated_url( $this->permalink, $current_page ); + } + + return $this->permalink; + } + + /** + * Generates the Open Graph URL. + * + * @return string The Open Graph URL. + */ + public function generate_open_graph_url() { + return $this->permalink; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-term-archive-presentation.php b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-term-archive-presentation.php new file mode 100644 index 00000000..01fbaa10 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presentations/indexable-term-archive-presentation.php @@ -0,0 +1,228 @@ +wp_query_wrapper = $wp_query_wrapper; + $this->taxonomy = $taxonomy; + } + + /** + * Generates the canonical. + * + * @return string The canonical. + */ + public function generate_canonical() { + if ( $this->is_multiple_terms_query() ) { + return ''; + } + + if ( $this->model->canonical ) { + return $this->model->canonical; + } + + if ( ! $this->permalink ) { + return ''; + } + + $current_page = $this->pagination->get_current_archive_page_number(); + if ( $current_page > 1 ) { + return $this->pagination->get_paginated_url( $this->permalink, $current_page ); + } + + return $this->permalink; + } + + /** + * Generates the meta description. + * + * @return string The meta description. + */ + public function generate_meta_description() { + if ( $this->model->description ) { + return $this->model->description; + } + + return $this->options->get( 'metadesc-tax-' . $this->model->object_sub_type ); + } + + /** + * Generates the source. + * + * @return array The source. + */ + public function generate_source() { + if ( ! empty( $this->model->object_id ) || \is_null( \get_queried_object() ) ) { + return \get_term( $this->model->object_id, $this->model->object_sub_type ); + } + + return \get_term( \get_queried_object()->term_id, \get_queried_object()->taxonomy ); + } + + /** + * Generates the Open Graph description. + * + * @return string The Open Graph description. + */ + public function generate_open_graph_description() { + $open_graph_description = parent::generate_open_graph_description(); + if ( $open_graph_description ) { + return $open_graph_description; + } + + return $this->taxonomy->get_term_description( $this->model->object_id ); + } + + /** + * Generates the Twitter description. + * + * @return string The Twitter description. + */ + public function generate_twitter_description() { + $twitter_description = parent::generate_twitter_description(); + if ( $twitter_description ) { + return $twitter_description; + } + + if ( $this->open_graph_description && $this->context->open_graph_enabled === true ) { + return ''; + } + + return $this->taxonomy->get_term_description( $this->model->object_id ); + } + + /** + * Generates the robots value. + * + * @return array The robots value. + */ + public function generate_robots() { + $robots = $this->get_base_robots(); + + /** + * If its a multiple terms archive page return a noindex. + */ + if ( $this->current_page->is_multiple_terms_page() ) { + $robots['index'] = 'noindex'; + + return $this->filter_robots( $robots ); + } + + /** + * First we get the no index option for this taxonomy, because it can be overwritten the indexable value for + * this specific term. + */ + if ( \is_wp_error( $this->source ) || ! $this->taxonomy->is_indexable( $this->source->taxonomy ) ) { + $robots['index'] = 'noindex'; + } + + /** + * Overwrite the index directive when there is a term specific directive set. + */ + if ( $this->model->is_robots_noindex !== null ) { + $robots['index'] = ( $this->model->is_robots_noindex ) ? 'noindex' : 'index'; + } + + return $this->filter_robots( $robots ); + } + + /** + * Generates the title. + * + * @return string The title. + */ + public function generate_title() { + if ( $this->model->title ) { + return $this->model->title; + } + + if ( \is_wp_error( $this->source ) ) { + return $this->model->title; + } + + // Get the SEO title as entered in Search Appearance. + $title = $this->options->get( 'title-tax-' . $this->source->taxonomy ); + if ( $title ) { + return $title; + } + + // Get the installation default title. + $title = $this->options->get_title_default( 'title-tax-' . $this->source->taxonomy ); + + return $title; + } + + /** + * Generates the Open Graph type. + * + * @return string The Open Graph type. + */ + public function generate_open_graph_type() { + return 'article'; + } + + /** + * Checks if term archive query is for multiple terms (/term-1,term-2/ or /term-1+term-2/). + * + * @return bool Whether the query contains multiple terms. + */ + protected function is_multiple_terms_query() { + $query = $this->wp_query_wrapper->get_query(); + + if ( ! isset( $query->tax_query ) ) { + return false; + } + + if ( \is_wp_error( $this->source ) ) { + return false; + } + + $queried_terms = $query->tax_query->queried_terms; + + if ( empty( $queried_terms[ $this->source->taxonomy ]['terms'] ) ) { + return false; + } + + return \count( $queried_terms[ $this->source->taxonomy ]['terms'] ) > 1; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-presenter.php new file mode 100644 index 00000000..5398b020 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-presenter.php @@ -0,0 +1,80 @@ +key === 'NO KEY PROVIDED' ) { + return null; + } + return \str_replace( [ ':', ' ', '-' ], '_', $this->key ); + } + + /** + * Returns the metafield's property key. + * + * @return string The property key. + */ + public function get_key() { + return $this->key; + } + + /** + * Replace replacement variables in a string. + * + * @param string $replacevar_string The string with replacement variables. + * + * @return string The string with replacement variables replaced. + */ + protected function replace_vars( $replacevar_string ) { + return $this->replace_vars->replace( $replacevar_string, $this->presentation->source ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-tag-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-tag-presenter.php new file mode 100644 index 00000000..b9cef1ac --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-indexable-tag-presenter.php @@ -0,0 +1,73 @@ +'; + public const META_NAME_CONTENT = ''; + public const LINK_REL_HREF = ''; + public const DEFAULT_TAG_FORMAT = self::META_NAME_CONTENT; + + /** + * The tag format including placeholders. + * + * @var string + */ + protected $tag_format = self::DEFAULT_TAG_FORMAT; + + /** + * The method of escaping to use. + * + * @var string + */ + protected $escaping = 'attribute'; + + /** + * Returns a tag in the head. + * + * @return string The tag. + */ + public function present() { + $value = $this->get(); + + if ( ! \is_string( $value ) || $value === '' ) { + return ''; + } + + /** + * There may be some classes that are derived from this class that do not use the $key property + * in their $tag_format string. In that case the key property will simply not be used. + */ + return \sprintf( + $this->tag_format, + $this->escape_value( $value ), + $this->key, + \is_admin_bar_showing() ? ' class="yoast-seo-meta-tag"' : '' + ); + } + + /** + * Escaped the output. + * + * @param string $value The desired method of escaping; 'html', 'url' or 'attribute'. + * + * @return string The escaped value. + */ + protected function escape_value( $value ) { + switch ( $this->escaping ) { + case 'html': + return \esc_html( $value ); + case 'url': + return \esc_url( $value, null, 'attribute' ); + case 'attribute': + default: + return \esc_attr( $value ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-presenter.php new file mode 100644 index 00000000..05ea34e8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/abstract-presenter.php @@ -0,0 +1,25 @@ +present(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/alert-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/alert-presenter.php new file mode 100644 index 00000000..c9f0670d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/alert-presenter.php @@ -0,0 +1,72 @@ +content = $content; + $this->type = $type; + + if ( ! $this->asset_manager ) { + $this->asset_manager = new WPSEO_Admin_Asset_Manager(); + } + + $this->asset_manager->enqueue_style( 'alert' ); + } + + /** + * Presents the Alert. + * + * @return string The styled Alert. + */ + public function present() { + $icon_file = 'images/alert-' . $this->type . '-icon.svg'; + + $out = '
                '; + $out .= ''; + $out .= ''; + $out .= ''; + + $out .= '' . $this->content . ''; + $out .= '
                '; + + return $out; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/badge-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/badge-presenter.php new file mode 100644 index 00000000..217eb997 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/badge-presenter.php @@ -0,0 +1,104 @@ +id = $id; + $this->link = $link; + $this->group = $group; + + if ( ! $badge_group_names instanceof Badge_Group_Names ) { + $badge_group_names = new Badge_Group_Names(); + } + $this->badge_group_names = $badge_group_names; + } + + /** + * Presents the New Badge. If a link has been passed, the badge is presented with the link. + * Otherwise a static badge is presented. + * + * @return string The styled New Badge. + */ + public function present() { + if ( ! $this->is_group_still_new() ) { + return ''; + } + + if ( $this->link !== '' ) { + return \sprintf( + '%3$s', + \esc_attr( $this->id ), + \esc_url( $this->link ), + \esc_html__( 'New', 'wordpress-seo' ) + ); + } + + return \sprintf( + '%2$s', + \esc_attr( $this->id ), + \esc_html__( 'New', 'wordpress-seo' ) + ); + } + + /** + * Check whether the new badge should be shown according to the group it is in. + * + * @return bool True if still new. + */ + public function is_group_still_new() { + // If there's no group configured, the new badge is always active. + if ( ! $this->group ) { + return true; + } + + return $this->badge_group_names->is_still_eligible_for_new_badge( $this->group ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/beta-badge-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/beta-badge-presenter.php new file mode 100644 index 00000000..684d1eb7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/beta-badge-presenter.php @@ -0,0 +1,59 @@ +id = $id; + $this->link = $link; + } + + /** + * Presents the Beta Badge. If a link has been passed, the badge is presented with the link. + * Otherwise a static badge is presented. + * + * @return string The styled Beta Badge. + */ + public function present() { + if ( $this->link !== '' ) { + return \sprintf( + '%3$s', + \esc_attr( $this->id ), + \esc_url( $this->link ), + 'Beta' // We don't want this string to be translatable. + ); + } + + return \sprintf( + '%2$s', + \esc_attr( $this->id ), + 'Beta' // We don't want this string to be translatable. + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/help-link-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/help-link-presenter.php new file mode 100644 index 00000000..45db58bf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/help-link-presenter.php @@ -0,0 +1,86 @@ +link = $link; + $this->link_text = $link_text; + $this->opens_in_new_browser_tab = $opens_in_new_browser_tab; + + if ( ! $this->asset_manager ) { + $this->asset_manager = new WPSEO_Admin_Asset_Manager(); + } + + $this->asset_manager->enqueue_style( 'admin-global' ); + } + + /** + * Presents the Help link. + * + * @return string The styled Help link. + */ + public function present() { + if ( $this->link === '' || $this->link_text === '' ) { + return; + } + + $target_blank_attribute = ''; + $new_tab_message = ''; + + if ( $this->opens_in_new_browser_tab ) { + $target_blank_attribute = ' target="_blank"'; + /* translators: Hidden accessibility text. */ + $new_tab_message = ' ' . \__( '(Opens in a new browser tab)', 'wordpress-seo' ); + } + + return \sprintf( + '%3$s', + \esc_url( $this->link ), + $target_blank_attribute, + \esc_html( $this->link_text . $new_tab_message ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-error-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-error-presenter.php new file mode 100644 index 00000000..e5079f0a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-error-presenter.php @@ -0,0 +1,127 @@ +short_link_helper = $short_link_helper; + $this->product_helper = $product_helper; + $this->addon_manager = $addon_manager; + } + + /** + * Generates the first paragraph of the error message to show when indexing failed. + * + * The contents of the paragraph varies based on whether WordPress SEO Premium has a valid, activated subscription or not. + * + * @param bool $is_premium Whether WordPress SEO Premium is currently active. + * @param bool $has_valid_premium_subscription Whether WordPress SEO Premium currently has a valid subscription. + * + * @return string + */ + protected function generate_first_paragraph( $is_premium, $has_valid_premium_subscription ) { + $message = \__( + 'Oops, something has gone wrong and we couldn\'t complete the optimization of your SEO data. Please click the button again to re-start the process. ', + 'wordpress-seo' + ); + + if ( $is_premium ) { + if ( $has_valid_premium_subscription ) { + $message .= \__( 'If the problem persists, please contact support.', 'wordpress-seo' ); + } + else { + $message = \sprintf( + /* translators: %1$s expands to an opening anchor tag for a link leading to the Premium installation page, %2$s expands to a closing anchor tag. */ + \__( + 'Oops, something has gone wrong and we couldn\'t complete the optimization of your SEO data. Please make sure to activate your subscription in MyYoast by completing %1$sthese steps%2$s.', + 'wordpress-seo' + ), + '', + '' + ); + } + } + + return $message; + } + + /** + * Generates the second paragraph of the error message to show when indexing failed. + * + * The error message varies based on whether WordPress SEO Premium has a valid, activated subscription or not. + * + * @param bool $is_premium Whether WordPress SEO Premium is currently active. + * @param bool $has_valid_premium_subscription Whether WordPress SEO Premium currently has a valid subscription. + * + * @return string The second paragraph of the error message. + */ + protected function generate_second_paragraph( $is_premium, $has_valid_premium_subscription ) { + return \sprintf( + /* translators: %1$s expands to an opening anchor tag for a link leading to the Premium installation page, %2$s expands to a closing anchor tag. */ + \__( + 'Below are the technical details for the error. See %1$sthis page%2$s for a more detailed explanation.', + 'wordpress-seo' + ), + '', + '' + ); + } + + /** + * Presents the error message to show if SEO optimization failed. + * + * The error message varies based on whether WordPress SEO Premium has a valid, activated subscription or not. + * + * @return string The error message to show. + */ + public function present() { + $is_premium = $this->product_helper->is_premium(); + $has_valid_premium_subscription = $this->addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ); + + $output = '

                ' . $this->generate_first_paragraph( $is_premium, $has_valid_premium_subscription ) . '

                '; + $output .= '

                ' . $this->generate_second_paragraph( $is_premium, $has_valid_premium_subscription ) . '

                '; + + return $output; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-failed-notification-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-failed-notification-presenter.php new file mode 100644 index 00000000..28ce7287 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-failed-notification-presenter.php @@ -0,0 +1,98 @@ +class_addon_manager = $class_addon_manager; + $this->short_link_helper = $short_link_helper; + $this->product_helper = $product_helper; + } + + /** + * Returns the notification as an HTML string. + * + * @return string The notification in an HTML string representation. + */ + public function present() { + $notification_text = \sprintf( + /* Translators: %1$s expands to an opening anchor tag for a link leading to the Yoast SEO tools page, %2$s expands to a closing anchor tag. */ + \esc_html__( + 'Something has gone wrong and we couldn\'t complete the optimization of your SEO data. Please %1$sre-start the process%2$s.', + 'wordpress-seo' + ), + '', + '' + ); + + if ( $this->product_helper->is_premium() ) { + if ( $this->has_valid_premium_subscription() ) { + // Add a support message for premium customers. + $notification_text .= ' '; + $notification_text .= \esc_html__( 'If the problem persists, please contact support.', 'wordpress-seo' ); + } + else { + // Premium plugin with inactive addon; overwrite the entire error message. + $notification_text = \sprintf( + /* Translators: %1$s expands to an opening anchor tag for a link leading to the Premium installation page, %2$s expands to a closing anchor tag. */ + \esc_html__( + 'Oops, something has gone wrong and we couldn\'t complete the optimization of your SEO data. Please make sure to activate your subscription in MyYoast by completing %1$sthese steps%2$s.', + 'wordpress-seo' + ), + '', + '' + ); + } + } + + return '

                ' . $notification_text . '

                '; + } + + /** + * Determines if the site has a valid Premium subscription. + * + * @return bool + */ + protected function has_valid_premium_subscription() { + return $this->class_addon_manager->has_valid_subscription( WPSEO_Addon_Manager::PREMIUM_SLUG ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-list-item-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-list-item-presenter.php new file mode 100644 index 00000000..09a0458e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-list-item-presenter.php @@ -0,0 +1,50 @@ +short_link_helper = $short_link_helper; + } + + /** + * Presents the list item for the tools menu. + * + * @return string The list item HTML. + */ + public function present() { + $output = \sprintf( '
              • %s
                ', \esc_html__( 'Optimize SEO Data', 'wordpress-seo' ) ); + $output .= \sprintf( + '%1$s %3$s', + \esc_html__( 'You can speed up your site and get insight into your internal linking structure by letting us perform a few optimizations to the way SEO data is stored. If you have a lot of content it might take a while, but trust us, it\'s worth it.', 'wordpress-seo' ), + \esc_url( $this->short_link_helper->get( 'https://yoa.st/3-z' ) ), + \esc_html__( 'Learn more about the benefits of optimized SEO data.', 'wordpress-seo' ) + ); + + $output .= '
                '; + $output .= '
              • '; + + return $output; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-notification-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-notification-presenter.php new file mode 100644 index 00000000..bb868538 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/indexing-notification-presenter.php @@ -0,0 +1,147 @@ +short_link_helper = $short_link_helper; + $this->total_unindexed = $total_unindexed; + $this->reason = $reason; + } + + /** + * Returns the notification as an HTML string. + * + * @return string The HTML string representation of the notification. + */ + public function present() { + $notification_text = '

                ' . $this->get_message( $this->reason ) . '

                '; + $notification_text .= '

                ' . $this->get_time_estimate( $this->total_unindexed ) . '

                '; + $notification_text .= ''; + $notification_text .= \esc_html__( 'Start SEO data optimization', 'wordpress-seo' ); + $notification_text .= ''; + + return $notification_text; + } + + /** + * Determines the message to show in the indexing notification. + * + * @param string $reason The reason identifier. + * + * @return string The message to show in the notification. + */ + protected function get_message( $reason ) { + switch ( $reason ) { + case Indexing_Reasons::REASON_PERMALINK_SETTINGS: + $text = \esc_html__( 'Because of a change in your permalink structure, some of your SEO data needs to be reprocessed.', 'wordpress-seo' ); + break; + case Indexing_Reasons::REASON_HOME_URL_OPTION: + $text = \esc_html__( 'Because of a change in your home URL setting, some of your SEO data needs to be reprocessed.', 'wordpress-seo' ); + break; + case Indexing_Reasons::REASON_CATEGORY_BASE_PREFIX: + $text = \esc_html__( 'Because of a change in your category base setting, some of your SEO data needs to be reprocessed.', 'wordpress-seo' ); + break; + case Indexing_Reasons::REASON_TAG_BASE_PREFIX: + $text = \esc_html__( 'Because of a change in your tag base setting, some of your SEO data needs to be reprocessed.', 'wordpress-seo' ); + break; + case Indexing_Reasons::REASON_POST_TYPE_MADE_PUBLIC: + $text = \esc_html__( 'We need to re-analyze some of your SEO data because of a change in the visibility of your post types. Please help us do that by running the SEO data optimization. ', 'wordpress-seo' ); + break; + case Indexing_Reasons::REASON_TAXONOMY_MADE_PUBLIC: + $text = \esc_html__( 'We need to re-analyze some of your SEO data because of a change in the visibility of your taxonomies. Please help us do that by running the SEO data optimization. ', 'wordpress-seo' ); + break; + case Indexing_Reasons::REASON_ATTACHMENTS_MADE_ENABLED: + $text = \esc_html__( 'It looks like you\'ve enabled media pages. We recommend that you help us to re-analyze your site by running the SEO data optimization. ', 'wordpress-seo' ); + break; + default: + $text = \esc_html__( 'You can speed up your site and get insight into your internal linking structure by letting us perform a few optimizations to the way SEO data is stored. ', 'wordpress-seo' ); + } + + /** + * Filter: 'wpseo_indexables_indexation_alert' - Allow developers to filter the reason of the indexation + * + * @param string $text The text to show as reason. + * @param string $reason The reason value. + */ + return (string) \apply_filters( 'wpseo_indexables_indexation_alert', $text, $reason ); + } + + /** + * Creates a time estimate based on the total number on unindexed objects. + * + * @param int $total_unindexed The total number of unindexed objects. + * + * @return string The time estimate as a HTML string. + */ + protected function get_time_estimate( $total_unindexed ) { + if ( $total_unindexed < 400 ) { + return \esc_html__( 'We estimate this will take less than a minute.', 'wordpress-seo' ); + } + + if ( $total_unindexed < 2500 ) { + return \esc_html__( 'We estimate this will take a couple of minutes.', 'wordpress-seo' ); + } + + $estimate = \esc_html__( 'We estimate this could take a long time, due to the size of your site. As an alternative to waiting, you could:', 'wordpress-seo' ); + $estimate .= '
                  '; + $estimate .= '
                • '; + $estimate .= \sprintf( + /* translators: 1: Expands to Yoast SEO */ + \esc_html__( 'Wait for a week or so, until %1$s automatically processes most of your content in the background.', 'wordpress-seo' ), + 'Yoast SEO' + ); + $estimate .= '
                • '; + $estimate .= '
                • '; + $estimate .= \sprintf( + /* translators: 1: Link to article about indexation command, 2: Anchor closing tag, 3: Link to WP CLI. */ + \esc_html__( '%1$sRun the indexation process on your server%2$s using %3$sWP CLI%2$s.', 'wordpress-seo' ), + '', + '', + '' + ); + + $estimate .= '
                • '; + $estimate .= '
                '; + + return $estimate; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/light-switch-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/light-switch-presenter.php new file mode 100644 index 00000000..837c4bc4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/light-switch-presenter.php @@ -0,0 +1,159 @@ +var = $variable; + $this->label = $label; + $this->buttons = $buttons; + $this->name = $name; + $this->value = $value; + $this->reverse = $reverse; + $this->help = $help; + $this->strong = $strong; + $this->disabled_attribute = $disabled_attribute; + } + + /** + * Presents the light switch toggle. + * + * @return string The light switch's HTML. + */ + public function present() { + if ( empty( $this->buttons ) ) { + $this->buttons = [ \__( 'Disabled', 'wordpress-seo' ), \__( 'Enabled', 'wordpress-seo' ) ]; + } + + list( $off_button, $on_button ) = $this->buttons; + + $class = 'switch-light switch-candy switch-yoast-seo'; + + if ( $this->reverse ) { + $class .= ' switch-yoast-seo-reverse'; + } + + $help_class = ! empty( $this->help ) ? ' switch-container__has-help' : ''; + $strong_class = ( $this->strong ) ? ' switch-light-visual-label__strong' : ''; + + $output = ''; + + return $output; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/meta-fields-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/meta-fields-presenter.php new file mode 100644 index 00000000..deb8f1dc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/meta-fields-presenter.php @@ -0,0 +1,64 @@ +post = $post; + $this->meta_fields = WPSEO_Meta::get_meta_field_defs( $field_group, $post_type ); + } + + /** + * Presents the Meta Fields. + * + * @return string The styled Alert. + */ + public function present() { + $output = ''; + + foreach ( $this->meta_fields as $key => $meta_field ) { + $form_key = \esc_attr( WPSEO_Meta::$form_prefix . $key ); + $meta_value = WPSEO_Meta::get_value( $key, $this->post->ID ); + + $default = ''; + if ( isset( $meta_field['default'] ) ) { + $default = \sprintf( ' data-default="%s"', \esc_attr( $meta_field['default'] ) ); + } + + $output .= '' . "\n"; + } + + return $output; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/migration-error-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/migration-error-presenter.php new file mode 100644 index 00000000..9ef789fb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/migration-error-presenter.php @@ -0,0 +1,71 @@ +migration_error = $migration_error; + } + + /** + * Presents the migration error that occurred. + * + * @return string The error HTML. + */ + public function present() { + $message = \sprintf( + /* translators: %s: Yoast SEO. */ + \esc_html__( '%s had problems creating the database tables needed to speed up your site.', 'wordpress-seo' ), + 'Yoast SEO' + ); + $support = \sprintf( + /* translators: %1$s: link to help article about solving table issue. %2$s: is anchor closing. */ + \esc_html__( 'Please read %1$sthis help article%2$s to find out how to resolve this problem.', 'wordpress-seo' ), + '', + '' + ); + $reassurance = \sprintf( + /* translators: %s: Yoast SEO. */ + \esc_html__( 'Your site will continue to work normally, but won\'t take full advantage of %s.', 'wordpress-seo' ), + 'Yoast SEO' + ); + + $debug_info = \sprintf( + '
                %1$s

                %2$s

                ', + \esc_html__( 'Show debug information', 'wordpress-seo' ), + \esc_html( $this->migration_error['message'] ) + ); + + return \sprintf( + '

                %1$s

                %2$s

                %3$s

                %4$s
                ', + $message, + $support, + $reassurance, + $debug_info + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/notice-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/notice-presenter.php new file mode 100644 index 00000000..1b2b0f23 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/notice-presenter.php @@ -0,0 +1,126 @@ +title = $title; + $this->content = $content; + $this->image_filename = $image_filename; + $this->button = $button; + $this->is_dismissible = $is_dismissible; + $this->id = $id; + + if ( ! $this->asset_manager ) { + $this->asset_manager = new WPSEO_Admin_Asset_Manager(); + } + + $this->asset_manager->enqueue_style( 'notifications' ); + } + + /** + * Presents the Notice. + * + * @return string The styled Notice. + */ + public function present() { + $dismissible = ( $this->is_dismissible ) ? ' is-dismissible' : ''; + $id = ( $this->id ) ? ' id="' . $this->id . '"' : ''; + + // WordPress admin notice. + $out = ''; + $out .= '
                '; + + // Header. + $out .= '
                '; + $out .= '
                '; + $out .= ''; + $out .= \sprintf( + '

                %s

                ', + \esc_html( $this->title ) + ); + $out .= '
                '; + $out .= '

                ' . $this->content . '

                '; + if ( ! \is_null( $this->button ) ) { + $out .= '

                ' . $this->button . '

                '; + } + $out .= '
                '; + + if ( ! \is_null( $this->image_filename ) ) { + $out .= ''; + } + + $out .= '
                '; + $out .= '
            '; + + return $out; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/premium-badge-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/premium-badge-presenter.php new file mode 100644 index 00000000..bfb8d95a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/premium-badge-presenter.php @@ -0,0 +1,59 @@ +id = $id; + $this->link = $link; + } + + /** + * Presents the Premium Badge. If a link has been passed, the badge is presented with the link. + * Otherwise a static badge is presented. + * + * @return string The styled Premium Badge. + */ + public function present() { + if ( $this->link !== '' ) { + return \sprintf( + '%3$s', + \esc_attr( $this->id ), + \esc_url( $this->link ), + 'Premium' // We don't want this string to be translatable. + ); + } + + return \sprintf( + '%2$s', + \esc_attr( $this->id ), + 'Premium' // We don't want this string to be translatable. + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/search-engines-discouraged-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/search-engines-discouraged-presenter.php new file mode 100644 index 00000000..c8ef2a30 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/search-engines-discouraged-presenter.php @@ -0,0 +1,44 @@ +'; + $notification_text .= $this->get_message(); + $notification_text .= '

            '; + + return $notification_text; + } + + /** + * Returns the message to show. + * + * @return string The message. + */ + protected function get_message() { + return \sprintf( + '%1$s %2$s ', + \esc_html__( 'Huge SEO Issue: You\'re blocking access to robots.', 'wordpress-seo' ), + \sprintf( + /* translators: 1: Link start tag to the WordPress Reading Settings page, 2: Link closing tag. */ + \esc_html__( 'If you want search engines to show this site in their results, you must %1$sgo to your Reading Settings%2$s and uncheck the box for Search Engine Visibility.', 'wordpress-seo' ), + '', + '' + ), + \esc_js( \wp_create_nonce( 'wpseo-ignore' ) ), + \esc_html__( 'I don\'t want this site to show in the search results.', 'wordpress-seo' ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/sidebar-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/sidebar-presenter.php new file mode 100644 index 00000000..66f61ac5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/admin/sidebar-presenter.php @@ -0,0 +1,148 @@ + +
            + short_link_helper = $short_link_helper; + } + + /** + * Returns the notification as an HTML string. + * + * @return string The notification in an HTML string representation. + */ + public function present() { + $notification_text = '

            '; + $notification_text .= $this->get_message(); + $notification_text .= '

            '; + + return $notification_text; + } + + /** + * Returns the message to show. + * + * @return string The message. + */ + protected function get_message() { + return \sprintf( + '%1$s %2$s', + \esc_html__( 'Compatibility issue: Yoast SEO is incompatible with the beta WooCommerce product editor.', 'wordpress-seo' ), + \sprintf( + /* translators: 1: Yoast SEO, 2: Link start tag to the Learn more link, 3: Link closing tag. */ + \esc_html__( 'The %1$s interface is currently unavailable in the beta WooCommerce product editor. To resolve any issues, please disable the beta editor. %2$sLearn how to disable the beta WooCommerce product editor.%3$s', 'wordpress-seo' ), + 'Yoast SEO', + '', + '' + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/breadcrumbs-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/breadcrumbs-presenter.php new file mode 100644 index 00000000..f64d60d2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/breadcrumbs-presenter.php @@ -0,0 +1,259 @@ +get(); + if ( ! \is_array( $breadcrumbs ) || empty( $breadcrumbs ) ) { + return ''; + } + + $links = []; + $total = \count( $breadcrumbs ); + foreach ( $breadcrumbs as $index => $breadcrumb ) { + $links[ $index ] = $this->crumb_to_link( $breadcrumb, $index, $total ); + } + + // Removes any effectively empty links. + $links = \array_map( 'trim', $links ); + $links = \array_filter( $links ); + $output = \implode( $this->get_separator(), $links ); + + if ( empty( $output ) ) { + return ''; + } + + $output = '<' . $this->get_wrapper() . $this->get_id() . $this->get_class() . '>' . $output . 'get_wrapper() . '>'; + $output = $this->filter( $output ); + + $prefix = $this->helpers->options->get( 'breadcrumbs-prefix' ); + if ( $prefix !== '' ) { + $output = "\t" . $prefix . "\n" . $output; + } + + return $output; + } + + /** + * Gets the raw value of a presentation. + * + * @return array The raw value. + */ + public function get() { + return $this->presentation->breadcrumbs; + } + + /** + * Filters the output. + * + * @param string $output The HTML output. + * + * @return string The filtered output. + */ + protected function filter( $output ) { + /** + * Filter: 'wpseo_breadcrumb_output' - Allow changing the HTML output of the Yoast SEO breadcrumbs class. + * + * @param string $output The HTML output. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + return \apply_filters( 'wpseo_breadcrumb_output', $output, $this->presentation ); + } + + /** + * Create a breadcrumb element string. + * + * @param array $breadcrumb Link info array containing the keys: + * 'text' => (string) link text. + * 'url' => (string) link url. + * (optional) 'title' => (string) link title attribute text. + * @param int $index Index for the current breadcrumb. + * @param int $total The total number of breadcrumbs. + * + * @return string The breadcrumb link. + */ + protected function crumb_to_link( $breadcrumb, $index, $total ) { + $link = ''; + + if ( ! isset( $breadcrumb['text'] ) || ! \is_string( $breadcrumb['text'] ) || empty( $breadcrumb['text'] ) ) { + return $link; + } + + $text = \trim( $breadcrumb['text'] ); + + if ( + $index < ( $total - 1 ) + && isset( $breadcrumb['url'] ) + && \is_string( $breadcrumb['url'] ) + && ! empty( $breadcrumb['url'] ) + ) { + // If it's not the last element and we have a url. + $link .= '<' . $this->get_element() . '>'; + $title_attr = isset( $breadcrumb['title'] ) ? ' title="' . \esc_attr( $breadcrumb['title'] ) . '"' : ''; + $link .= '' . $text . ''; + $link .= 'get_element() . '>'; + } + elseif ( $index === ( $total - 1 ) ) { + // If it's the last element. + + if ( $this->helpers->options->get( 'breadcrumbs-boldlast' ) === true ) { + $text = '' . $text . ''; + } + + $link .= '<' . $this->get_element() . ' class="breadcrumb_last" aria-current="page">' . $text . 'get_element() . '>'; + } + else { + // It's not the last element and has no url. + $link .= '<' . $this->get_element() . '>' . $text . 'get_element() . '>'; + } + + /** + * Filter: 'wpseo_breadcrumb_single_link' - Allow changing of each link being put out by the Yoast SEO breadcrumbs class. + * + * @param string $link_output The output string. + * @param array $link The breadcrumb link array. + */ + return \apply_filters( 'wpseo_breadcrumb_single_link', $link, $breadcrumb ); + } + + /** + * Retrieves HTML ID attribute. + * + * @return string The id attribute. + */ + protected function get_id() { + if ( ! $this->id ) { + /** + * Filter: 'wpseo_breadcrumb_output_id' - Allow changing the HTML ID on the Yoast SEO breadcrumbs wrapper element. + * + * @param string $unsigned ID to add to the wrapper element. + */ + $this->id = \apply_filters( 'wpseo_breadcrumb_output_id', '' ); + if ( ! \is_string( $this->id ) ) { + return ''; + } + + if ( $this->id !== '' ) { + $this->id = ' id="' . \esc_attr( $this->id ) . '"'; + } + } + + return $this->id; + } + + /** + * Retrieves HTML Class attribute. + * + * @return string The class attribute. + */ + protected function get_class() { + if ( ! $this->class ) { + /** + * Filter: 'wpseo_breadcrumb_output_class' - Allow changing the HTML class on the Yoast SEO breadcrumbs wrapper element. + * + * @param string $unsigned Class to add to the wrapper element. + */ + $this->class = \apply_filters( 'wpseo_breadcrumb_output_class', '' ); + if ( ! \is_string( $this->class ) ) { + return ''; + } + + if ( $this->class !== '' ) { + $this->class = ' class="' . \esc_attr( $this->class ) . '"'; + } + } + + return $this->class; + } + + /** + * Retrieves the wrapper element name. + * + * @return string The wrapper element name. + */ + protected function get_wrapper() { + if ( ! $this->wrapper ) { + $this->wrapper = \apply_filters( 'wpseo_breadcrumb_output_wrapper', 'span' ); + $this->wrapper = \tag_escape( $this->wrapper ); + if ( ! \is_string( $this->wrapper ) || $this->wrapper === '' ) { + $this->wrapper = 'span'; + } + } + + return $this->wrapper; + } + + /** + * Retrieves the separator. + * + * @return string The separator. + */ + protected function get_separator() { + if ( ! $this->separator ) { + $this->separator = \apply_filters( 'wpseo_breadcrumb_separator', $this->helpers->options->get( 'breadcrumbs-sep' ) ); + $this->separator = ' ' . $this->separator . ' '; + } + + return $this->separator; + } + + /** + * Retrieves the crumb element name. + * + * @return string The element to use. + */ + protected function get_element() { + if ( ! $this->element ) { + $this->element = \esc_attr( \apply_filters( 'wpseo_breadcrumb_single_link_wrapper', 'span' ) ); + } + + return $this->element; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/canonical-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/canonical-presenter.php new file mode 100644 index 00000000..bccd2c94 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/canonical-presenter.php @@ -0,0 +1,51 @@ +presentation->robots, true ) ) { + return ''; + } + + /** + * Filter: 'wpseo_canonical' - Allow filtering of the canonical URL put out by Yoast SEO. + * + * @param string $canonical The canonical URL. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + return \urldecode( (string) \trim( \apply_filters( 'wpseo_canonical', $this->presentation->canonical, $this->presentation ) ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-close-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-close-presenter.php new file mode 100644 index 00000000..b36ad7fa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-close-presenter.php @@ -0,0 +1,41 @@ +', + \esc_html( $this->helpers->product->get_name() ) + ); + } + + /** + * Gets the raw value of a presentation. + * + * @return string The raw value. + */ + public function get() { + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-open-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-open-presenter.php new file mode 100644 index 00000000..527b37a4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/debug/marker-open-presenter.php @@ -0,0 +1,65 @@ +helpers->product->is_premium() ) { + $version_info = $this->construct_version_info(); + } + + return \sprintf( + '', + \esc_html( $this->helpers->product->get_name() ), + $version_info + ); + } + + /** + * Gets the plugin version information, including the free version if Premium is used. + * + * @return string The constructed version information. + */ + private function construct_version_info() { + /** + * Filter: 'wpseo_hide_version' - can be used to hide the Yoast SEO version in the debug marker (only available in Yoast SEO Premium). + * + * @param bool $hide_version + */ + if ( \apply_filters( 'wpseo_hide_version', false ) ) { + return ''; + } + + return 'v' . \WPSEO_PREMIUM_VERSION . ' (Yoast SEO v' . \WPSEO_VERSION . ')'; + } + + /** + * Gets the raw value of a presentation. + * + * @return string The raw value. + */ + public function get() { + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/meta-author-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/meta-author-presenter.php new file mode 100644 index 00000000..b98d91e2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/meta-author-presenter.php @@ -0,0 +1,59 @@ +presentation->model->object_sub_type !== 'post' ) { + return ''; + } + + $user_data = \get_userdata( $this->presentation->context->post->post_author ); + + if ( ! $user_data instanceof WP_User ) { + return ''; + } + + /** + * Filter: 'wpseo_meta_author' - Allow developers to filter the article's author meta tag. + * + * @param string $author_name The article author's display name. Return empty to disable the tag. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + return \trim( $this->helpers->schema->html->smart_strip_tags( \apply_filters( 'wpseo_meta_author', $user_data->display_name, $this->presentation ) ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/meta-description-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/meta-description-presenter.php new file mode 100644 index 00000000..699632a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/meta-description-presenter.php @@ -0,0 +1,63 @@ +'; + } + + return ''; + } + + /** + * Run the meta description content through replace vars, the `wpseo_metadesc` filter and sanitization. + * + * @return string The filtered meta description. + */ + public function get() { + $meta_description = $this->replace_vars( $this->presentation->meta_description ); + + /** + * Filter: 'wpseo_metadesc' - Allow changing the Yoast SEO meta description sentence. + * + * @param string $meta_description The description sentence. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $meta_description = \apply_filters( 'wpseo_metadesc', $meta_description, $this->presentation ); + $meta_description = $this->helpers->string->strip_all_tags( \stripslashes( $meta_description ) ); + return \trim( $meta_description ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-author-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-author-presenter.php new file mode 100644 index 00000000..e825d00a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-author-presenter.php @@ -0,0 +1,41 @@ +presentation->open_graph_article_author, $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-modified-time-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-modified-time-presenter.php new file mode 100644 index 00000000..e804a1bf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-modified-time-presenter.php @@ -0,0 +1,34 @@ +presentation->open_graph_article_modified_time; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-published-time-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-published-time-presenter.php new file mode 100644 index 00000000..644eac56 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-published-time-presenter.php @@ -0,0 +1,34 @@ +presentation->open_graph_article_published_time; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-publisher-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-publisher-presenter.php new file mode 100644 index 00000000..793712f3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/article-publisher-presenter.php @@ -0,0 +1,41 @@ +presentation->open_graph_article_publisher, $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/description-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/description-presenter.php new file mode 100644 index 00000000..9046e713 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/description-presenter.php @@ -0,0 +1,45 @@ +replace_vars( $this->presentation->open_graph_description ); + + /** + * Filter: 'wpseo_opengraph_desc' - Allow changing the Yoast SEO generated Open Graph description. + * + * @param string $description The description. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $meta_og_description = \apply_filters( 'wpseo_opengraph_desc', $meta_og_description, $this->presentation ); + $meta_og_description = $this->helpers->string->strip_all_tags( \stripslashes( $meta_og_description ) ); + return \trim( $meta_og_description ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/image-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/image-presenter.php new file mode 100644 index 00000000..1f7668a3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/image-presenter.php @@ -0,0 +1,145 @@ + + */ + protected static $image_tags = [ + 'width' => 'width', + 'height' => 'height', + 'type' => 'type', + ]; + + /** + * Returns the image for a post. + * + * @return string The image tag. + */ + public function present() { + $images = $this->get(); + + if ( empty( $images ) ) { + return ''; + } + + $return = ''; + foreach ( $images as $image_meta ) { + $image_url = $image_meta['url']; + + if ( \is_attachment() ) { + global $wp; + $image_url = \home_url( $wp->request ); + } + + $class = \is_admin_bar_showing() ? ' class="yoast-seo-meta-tag"' : ''; + + $return .= ''; + + foreach ( static::$image_tags as $key => $value ) { + if ( empty( $image_meta[ $key ] ) ) { + continue; + } + + $return .= \PHP_EOL . "\t" . ''; + } + } + + return $return; + } + + /** + * Gets the raw value of a presentation. + * + * @return array The raw value. + */ + public function get() { + $images = []; + + foreach ( $this->presentation->open_graph_images as $open_graph_image ) { + $images[] = \array_intersect_key( + // First filter the object. + $this->filter( $open_graph_image ), + // Then strip all keys that aren't in the image tags or the url. + \array_flip( \array_merge( static::$image_tags, [ 'url' ] ) ) + ); + } + + return \array_filter( $images ); + } + + /** + * Run the image content through the `wpseo_opengraph_image` filter. + * + * @param array $image The image. + * + * @return array The filtered image. + */ + protected function filter( $image ) { + /** + * Filter: 'wpseo_opengraph_image' - Allow changing the Open Graph image url. + * + * @param string $image_url The URL of the Open Graph image. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $image_url = \apply_filters( 'wpseo_opengraph_image', $image['url'], $this->presentation ); + if ( ! empty( $image_url ) && \is_string( $image_url ) ) { + $image['url'] = \trim( $image_url ); + } + + $image_type = ( $image['type'] ?? '' ); + /** + * Filter: 'wpseo_opengraph_image_type' - Allow changing the Open Graph image type. + * + * @param string $image_type The type of the Open Graph image. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $image_type = \apply_filters( 'wpseo_opengraph_image_type', $image_type, $this->presentation ); + if ( ! empty( $image_type ) && \is_string( $image_type ) ) { + $image['type'] = \trim( $image_type ); + } + + $image_width = ( $image['width'] ?? '' ); + /** + * Filter: 'wpseo_opengraph_image_width' - Allow changing the Open Graph image width. + * + * @param int $image_width The width of the Open Graph image. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $image_width = (int) \apply_filters( 'wpseo_opengraph_image_width', $image_width, $this->presentation ); + if ( ! empty( $image_width ) && $image_width > 0 ) { + $image['width'] = $image_width; + } + + $image_height = ( $image['height'] ?? '' ); + /** + * Filter: 'wpseo_opengraph_image_height' - Allow changing the Open Graph image height. + * + * @param int $image_height The height of the Open Graph image. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $image_height = (int) \apply_filters( 'wpseo_opengraph_image_height', $image_height, $this->presentation ); + if ( ! empty( $image_height ) && $image_height > 0 ) { + $image['height'] = $image_height; + } + + return $image; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/locale-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/locale-presenter.php new file mode 100644 index 00000000..af1d440d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/locale-presenter.php @@ -0,0 +1,41 @@ +presentation->open_graph_locale, $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/site-name-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/site-name-presenter.php new file mode 100644 index 00000000..b0aa5642 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/site-name-presenter.php @@ -0,0 +1,41 @@ +presentation->open_graph_site_name, $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/title-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/title-presenter.php new file mode 100644 index 00000000..4885d7ac --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/title-presenter.php @@ -0,0 +1,44 @@ +replace_vars( $this->presentation->open_graph_title ); + + /** + * Filter: 'wpseo_opengraph_title' - Allow changing the Yoast SEO generated title. + * + * @param string $title The title. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $title = (string) \trim( \apply_filters( 'wpseo_opengraph_title', $title, $this->presentation ) ); + return $this->helpers->string->strip_all_tags( $title ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/type-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/type-presenter.php new file mode 100644 index 00000000..8ebcca06 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/type-presenter.php @@ -0,0 +1,41 @@ +presentation->open_graph_type, $this->presentation ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/url-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/url-presenter.php new file mode 100644 index 00000000..6e9bf41a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/open-graph/url-presenter.php @@ -0,0 +1,48 @@ +presentation->open_graph_url, $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/rel-next-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/rel-next-presenter.php new file mode 100644 index 00000000..c606ff44 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/rel-next-presenter.php @@ -0,0 +1,72 @@ +presentation->robots, true ) ) { + return ''; + } + + /** + * Filter: 'wpseo_adjacent_rel_url' - Allow filtering of the rel next URL put out by Yoast SEO. + * + * @param string $rel_next The rel next URL. + * @param string $rel Link relationship, prev or next. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + return (string) \trim( \apply_filters( 'wpseo_adjacent_rel_url', $this->presentation->rel_next, 'next', $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/rel-prev-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/rel-prev-presenter.php new file mode 100644 index 00000000..eb5b7908 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/rel-prev-presenter.php @@ -0,0 +1,72 @@ +presentation->robots, true ) ) { + return ''; + } + + /** + * Filter: 'wpseo_adjacent_rel_url' - Allow filtering of the rel prev URL put out by Yoast SEO. + * + * @param string $canonical The rel prev URL. + * @param string $rel Link relationship, prev or next. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + return (string) \trim( \apply_filters( 'wpseo_adjacent_rel_url', $this->presentation->rel_prev, 'prev', $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/robots-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/robots-presenter.php new file mode 100644 index 00000000..6e6ee6ce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/robots-presenter.php @@ -0,0 +1,40 @@ +get() ); + + if ( \is_string( $robots ) && $robots !== '' ) { + return \sprintf( '', \esc_attr( $robots ) ); + } + + return ''; + } + + /** + * Gets the raw value of a presentation. + * + * @return array The raw value. + */ + public function get() { + return $this->presentation->robots; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/robots-txt-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/robots-txt-presenter.php new file mode 100644 index 00000000..ef87c911 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/robots-txt-presenter.php @@ -0,0 +1,150 @@ +robots_txt_helper = $robots_txt_helper; + } + + /** + * Generate content to be placed in a robots.txt file. + * + * @return string Content to be placed in a robots.txt file. + */ + public function present() { + $robots_txt_content = self::YOAST_OUTPUT_BEFORE_COMMENT; + $robots_txt_content = $this->handle_user_agents( $robots_txt_content ); + + $robots_txt_content = $this->handle_site_maps( $robots_txt_content ); + + return $robots_txt_content . self::YOAST_OUTPUT_AFTER_COMMENT; + } + + /** + * Adds user agent directives to the robots txt output string. + * + * @param array $user_agents The list if available user agents. + * @param string $robots_txt_content The current working robots txt string. + * + * @return string + */ + private function add_user_agent_directives( $user_agents, $robots_txt_content ) { + foreach ( $user_agents as $user_agent ) { + $robots_txt_content .= self::USER_AGENT_FIELD . ': ' . $user_agent->get_user_agent() . \PHP_EOL; + + $robots_txt_content = $this->add_directive_path( $robots_txt_content, $user_agent->get_disallow_paths(), self::DISALLOW_DIRECTIVE ); + $robots_txt_content = $this->add_directive_path( $robots_txt_content, $user_agent->get_allow_paths(), self::ALLOW_DIRECTIVE ); + + $robots_txt_content .= \PHP_EOL; + } + + return $robots_txt_content; + } + + /** + * Adds user agent directives path content to the robots txt output string. + * + * @param string $robots_txt_content The current working robots txt string. + * @param array $paths The list of paths for which to add a txt entry. + * @param string $directive_identifier The identifier for the directives. (Disallow of Allow). + * + * @return string + */ + private function add_directive_path( $robots_txt_content, $paths, $directive_identifier ) { + if ( \count( $paths ) > 0 ) { + foreach ( $paths as $path ) { + $robots_txt_content .= $directive_identifier . ': ' . $path . \PHP_EOL; + } + } + + return $robots_txt_content; + } + + /** + * Handles adding user agent content to the robots txt content if there is any. + * + * @param string $robots_txt_content The current working robots txt string. + * + * @return string + */ + private function handle_user_agents( $robots_txt_content ) { + $user_agents = $this->robots_txt_helper->get_robots_txt_user_agents(); + + if ( ! isset( $user_agents['*'] ) ) { + $robots_txt_content .= 'User-agent: *' . \PHP_EOL; + $robots_txt_content .= 'Disallow:' . \PHP_EOL . \PHP_EOL; + } + + $robots_txt_content = $this->add_user_agent_directives( $user_agents, $robots_txt_content ); + + return $robots_txt_content; + } + + /** + * Handles adding sitemap content to the robots txt content. + * + * @param string $robots_txt_content The current working robots txt string. + * + * @return string + */ + private function handle_site_maps( $robots_txt_content ) { + $registered_sitemaps = $this->robots_txt_helper->get_sitemap_rules(); + + foreach ( $registered_sitemaps as $sitemap ) { + $robots_txt_content .= self::SITEMAP_FIELD . ': ' . $sitemap . \PHP_EOL; + } + + return $robots_txt_content; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/schema-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/schema-presenter.php new file mode 100644 index 00000000..fb80010b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/schema-presenter.php @@ -0,0 +1,63 @@ + 'Please use the "wpseo_schema_*" filters to extend the Yoast SEO schema data - see the WPSEO_Schema class.', + ]; + + /** + * Filter: 'wpseo_json_ld_output' - Allows disabling Yoast's schema output entirely. + * + * @param mixed $deprecated If false or an empty array is returned, disable our output. + * @param string $empty + */ + $return = \apply_filters( 'wpseo_json_ld_output', $deprecated_data, '' ); + if ( $return === [] || $return === false ) { + return ''; + } + + /** + * Action: 'wpseo_json_ld' - Output Schema before the main schema from Yoast SEO is output. + */ + \do_action( 'wpseo_json_ld' ); + + $schema = $this->get(); + if ( \is_array( $schema ) ) { + $output = WPSEO_Utils::format_json_encode( $schema ); + $output = \str_replace( "\n", \PHP_EOL . "\t", $output ); + return ''; + } + + return ''; + } + + /** + * Gets the raw value of a presentation. + * + * @return array The raw value. + */ + public function get() { + return $this->presentation->schema; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/score-icon-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/score-icon-presenter.php new file mode 100644 index 00000000..322684c1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/score-icon-presenter.php @@ -0,0 +1,48 @@ +title = $title; + $this->css_class = $css_class; + } + + /** + * Presents the score icon. + * + * @return string The score icon. + */ + public function present() { + return \sprintf( + '', + \esc_attr( $this->title ), + \esc_html( $this->title ), + \esc_attr( $this->css_class ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/slack/enhanced-data-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/slack/enhanced-data-presenter.php new file mode 100644 index 00000000..cb85797b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/slack/enhanced-data-presenter.php @@ -0,0 +1,66 @@ +get(); + $twitter_tags = ''; + $i = 1; + $class = \is_admin_bar_showing() ? ' class="yoast-seo-meta-tag"' : ''; + foreach ( $enhanced_data as $label => $value ) { + $twitter_tags .= \sprintf( "\t" . '' . "\n", $i, \esc_attr( $label ) ); + $twitter_tags .= \sprintf( "\t" . '' . "\n", $i, \esc_attr( $value ) ); + ++$i; + } + + return \trim( $twitter_tags ); + } + + /** + * Gets the enhanced data array. + * + * @return array The enhanced data array + */ + public function get() { + $data = []; + $author_id = $this->presentation->source->post_author; + $estimated_reading_time = $this->presentation->estimated_reading_time_minutes; + + if ( $this->presentation->model->object_sub_type === 'post' && $author_id ) { + $data[ \__( 'Written by', 'wordpress-seo' ) ] = \get_the_author_meta( 'display_name', $author_id ); + } + + if ( ! empty( $estimated_reading_time ) ) { + /* translators: %s expands to the reading time number, in minutes */ + $data[ \__( 'Est. reading time', 'wordpress-seo' ) ] = \sprintf( \_n( '%s minute', '%s minutes', $estimated_reading_time, 'default' ), $estimated_reading_time ); + } + + /** + * Filter: 'wpseo_enhanced_slack_data' - Allows filtering of the enhanced data for sharing on Slack. + * + * @param array $data The enhanced Slack sharing data. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + return \apply_filters( 'wpseo_enhanced_slack_data', $data, $this->presentation ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/title-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/title-presenter.php new file mode 100644 index 00000000..d712c32a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/title-presenter.php @@ -0,0 +1,79 @@ +%s'; + + /** + * The method of escaping to use. + * + * @var string + */ + protected $escaping = 'html'; + + /** + * Gets the raw value of a presentation. + * + * @return string The raw value. + */ + public function get() { + // This ensures backwards compatibility with other plugins using this filter as well. + \add_filter( 'pre_get_document_title', [ $this, 'get_title' ], 15 ); + $title = \wp_get_document_title(); + \remove_filter( 'pre_get_document_title', [ $this, 'get_title' ], 15 ); + return $title; + } + + /** + * Returns a tag in the head. + * + * @return string The tag. + */ + public function present() { + $value = $this->get(); + + if ( \is_string( $value ) && $value !== '' ) { + return \sprintf( $this->tag_format, $this->escape_value( $value ) ); + } + + return ''; + } + + /** + * Returns the presentation title. + * + * @return string The title. + */ + public function get_title() { + $title = $this->replace_vars( $this->presentation->title ); + + /** + * Filter: 'wpseo_title' - Allow changing the Yoast SEO generated title. + * + * @param string $title The title. + * @param Indexable_Presentation $presentation The presentation of an indexable. + */ + $title = \apply_filters( 'wpseo_title', $title, $this->presentation ); + $title = $this->helpers->string->strip_all_tags( $title ); + return \trim( $title ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/card-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/card-presenter.php new file mode 100644 index 00000000..e0df4758 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/card-presenter.php @@ -0,0 +1,34 @@ +presentation->twitter_card, $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/creator-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/creator-presenter.php new file mode 100644 index 00000000..e84db71a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/creator-presenter.php @@ -0,0 +1,27 @@ +presentation->twitter_creator; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/description-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/description-presenter.php new file mode 100644 index 00000000..978ee74e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/description-presenter.php @@ -0,0 +1,34 @@ +replace_vars( $this->presentation->twitter_description ), $this->presentation ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/image-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/image-presenter.php new file mode 100644 index 00000000..f52815cc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/image-presenter.php @@ -0,0 +1,41 @@ +presentation->twitter_image, $this->presentation ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/site-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/site-presenter.php new file mode 100644 index 00000000..6a21b617 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/site-presenter.php @@ -0,0 +1,59 @@ +presentation->twitter_site, $this->presentation ); + $twitter_site = $this->get_twitter_id( $twitter_site ); + + if ( ! \is_string( $twitter_site ) || $twitter_site === '' ) { + return ''; + } + + return '@' . $twitter_site; + } + + /** + * Checks if the given id is actually an id or a url and if url, distills the id from it. + * + * Solves issues with filters returning urls and theme's/other plugins also adding a user meta + * twitter field which expects url rather than an id (which is what we expect). + * + * @param string $id Twitter ID or url. + * + * @return string|bool Twitter ID or false if it failed to get a valid Twitter ID. + */ + private function get_twitter_id( $id ) { + if ( \preg_match( '`([A-Za-z0-9_]{1,25})$`', $id, $match ) ) { + return $match[1]; + } + + return false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/title-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/title-presenter.php new file mode 100644 index 00000000..50153f69 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/twitter/title-presenter.php @@ -0,0 +1,34 @@ +replace_vars( $this->presentation->twitter_title ), $this->presentation ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/url-list-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/url-list-presenter.php new file mode 100644 index 00000000..ed5f0b85 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/url-list-presenter.php @@ -0,0 +1,48 @@ +links = $links; + $this->class_name = $class_name; + } + + /** + * Presents the URL list. + * + * @return string The URL list. + */ + public function present() { + $output = ''; + return $output; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/baidu-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/baidu-presenter.php new file mode 100644 index 00000000..2447a245 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/baidu-presenter.php @@ -0,0 +1,27 @@ +helpers->options->get( 'baiduverify', '' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/bing-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/bing-presenter.php new file mode 100644 index 00000000..395cd56b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/bing-presenter.php @@ -0,0 +1,27 @@ +helpers->options->get( 'msverify', '' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/google-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/google-presenter.php new file mode 100644 index 00000000..dd3b8f01 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/google-presenter.php @@ -0,0 +1,27 @@ +helpers->options->get( 'googleverify', '' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/pinterest-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/pinterest-presenter.php new file mode 100644 index 00000000..d41bfbd9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/pinterest-presenter.php @@ -0,0 +1,27 @@ +helpers->options->get( 'pinterestverify', '' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/yandex-presenter.php b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/yandex-presenter.php new file mode 100644 index 00000000..34b7512c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/presenters/webmaster/yandex-presenter.php @@ -0,0 +1,27 @@ +helpers->options->get( 'yandexverify', '' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/promotions/application/promotion-manager-interface.php b/wp/wp-content/plugins/wordpress-seo/src/promotions/application/promotion-manager-interface.php new file mode 100644 index 00000000..07633b85 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/promotions/application/promotion-manager-interface.php @@ -0,0 +1,25 @@ + + */ + private $promotions_list = []; + + /** + * Class constructor. + * + * @param Promotion_Interface ...$promotions List of promotions. + */ + public function __construct( Promotion_Interface ...$promotions ) { + $this->promotions_list = $promotions; + } + + /** + * Whether the promotion is effective. + * + * @param string $promotion_name The name of the promotion. + * + * @return bool Whether the promotion is effective. + */ + public function is( string $promotion_name ): bool { + $time = \time(); + + foreach ( $this->promotions_list as $promotion ) { + if ( $promotion->get_promotion_name() === $promotion_name ) { + return $promotion->get_time_interval()->contains( $time ); + } + } + + return false; + } + + /** + * Get the list of promotions. + * + * @return array The list of promotions. + */ + public function get_promotions_list(): array { + return $this->promotions_list; + } + + /** + * Get the names of currently active promotions. + * + * @return array The list of promotions. + */ + public function get_current_promotions(): array { + $current_promotions = []; + $time = \time(); + foreach ( $this->promotions_list as $promotion ) { + if ( $promotion->get_time_interval()->contains( $time ) ) { + $current_promotions[] = $promotion->get_promotion_name(); + } + } + + return $current_promotions; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/promotions/domain/abstract-promotion.php b/wp/wp-content/plugins/wordpress-seo/src/promotions/domain/abstract-promotion.php new file mode 100644 index 00000000..13d44c01 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/promotions/domain/abstract-promotion.php @@ -0,0 +1,52 @@ +promotion_name = $promotion_name; + $this->time_interval = $time_interval; + } + + /** + * Returns the promotion name. + * + * @return string + */ + public function get_promotion_name() { + return $this->promotion_name; + } + + /** + * Returns the time interval in which the promotion is active. + * + * @return Time_Interval + */ + public function get_time_interval() { + return $this->time_interval; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/promotions/domain/black-friday-checklist-promotion.php b/wp/wp-content/plugins/wordpress-seo/src/promotions/domain/black-friday-checklist-promotion.php new file mode 100644 index 00000000..55a4c0be --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/promotions/domain/black-friday-checklist-promotion.php @@ -0,0 +1,22 @@ +time_start = $time_start; + $this->time_end = $time_end; + } + + /** + * Checks if the given time is within the interval. + * + * @param int $time The time to check. + * + * @return bool Whether the given time is within the interval. + */ + public function contains( int $time ): bool { + return ( ( $time > $this->time_start ) && ( $time < $this->time_end ) ); + } + + /** + * Sets the interval astarting date. + * + * @param int $time_start The interval start time. + * + * @return void + */ + public function set_start_date( int $time_start ) { + $this->time_start = $time_start; + } + + /** + * Sets the interval ending date. + * + * @param int $time_end The interval end time. + * + * @return void + */ + public function set_end_date( int $time_end ) { + $this->time_end = $time_end; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-cleanup-repository.php b/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-cleanup-repository.php new file mode 100644 index 00000000..e9d89538 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-cleanup-repository.php @@ -0,0 +1,750 @@ +taxonomy = $taxonomy; + $this->post_type = $post_type; + $this->author_archive = $author_archive; + } + + /** + * Starts a query for this repository. + * + * @return ORM + */ + public function query() { + return Model::of_type( 'Indexable' ); + } + + /** + * Deletes rows from the indexable table depending on the object_type and object_sub_type. + * + * @param string $object_type The object type to query. + * @param string $object_sub_type The object subtype to query. + * @param int $limit The limit we'll apply to the delete query. + * + * @return int|bool The number of rows that was deleted or false if the query failed. + */ + public function clean_indexables_with_object_type_and_object_sub_type( string $object_type, string $object_sub_type, int $limit ) { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $sql = $wpdb->prepare( "DELETE FROM $indexable_table WHERE object_type = %s AND object_sub_type = %s ORDER BY id LIMIT %d", $object_type, $object_sub_type, $limit ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->query( $sql ); + } + + /** + * Counts amount of indexables by object type and object sub type. + * + * @param string $object_type The object type to check. + * @param string $object_sub_type The object sub type to check. + * + * @return float|int + */ + public function count_indexables_with_object_type_and_object_sub_type( string $object_type, string $object_sub_type ) { + return $this + ->query() + ->where( 'object_type', $object_type ) + ->where( 'object_sub_type', $object_sub_type ) + ->count(); + } + + /** + * Deletes rows from the indexable table depending on the post_status. + * + * @param string $post_status The post status to query. + * @param int $limit The limit we'll apply to the delete query. + * + * @return int|bool The number of rows that was deleted or false if the query failed. + */ + public function clean_indexables_with_post_status( $post_status, $limit ) { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $sql = $wpdb->prepare( "DELETE FROM $indexable_table WHERE object_type = 'post' AND post_status = %s ORDER BY id LIMIT %d", $post_status, $limit ); + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->query( $sql ); + } + + /** + * Counts indexables with a certain post status. + * + * @param string $post_status The post status to count. + * + * @return float|int + */ + public function count_indexables_with_post_status( string $post_status ) { + return $this + ->query() + ->where( 'object_type', 'post' ) + ->where( 'post_status', $post_status ) + ->count(); + } + + /** + * Cleans up any indexables that belong to post types that are not/no longer publicly viewable. + * + * @param int $limit The limit we'll apply to the queries. + * + * @return bool|int The number of deleted rows, false if the query fails. + */ + public function clean_indexables_for_non_publicly_viewable_post( $limit ) { + global $wpdb; + $indexable_table = Model::get_table_name( 'Indexable' ); + + $included_post_types = $this->post_type->get_indexable_post_types(); + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: Too hard to fix. + if ( empty( $included_post_types ) ) { + $delete_query = $wpdb->prepare( + "DELETE FROM $indexable_table + WHERE object_type = 'post' + AND object_sub_type IS NOT NULL + LIMIT %d", + $limit + ); + } + else { + // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- Reason: we're passing an array instead. + $delete_query = $wpdb->prepare( + "DELETE FROM $indexable_table + WHERE object_type = 'post' + AND object_sub_type IS NOT NULL + AND object_sub_type NOT IN ( " . \implode( ', ', \array_fill( 0, \count( $included_post_types ), '%s' ) ) . ' ) + LIMIT %d', + \array_merge( $included_post_types, [ $limit ] ) + ); + } + // phpcs:enable + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + return $wpdb->query( $delete_query ); + // phpcs:enable + } + + /** + * Counts all indexables for non public post types. + * + * @return float|int + */ + public function count_indexables_for_non_publicly_viewable_post() { + $included_post_types = $this->post_type->get_indexable_post_types(); + + if ( empty( $included_post_types ) ) { + return $this + ->query() + ->where( 'object_type', 'post' ) + ->where_not_equal( 'object_sub_type', 'null' ) + ->count(); + } + else { + return $this + ->query() + ->where( 'object_type', 'post' ) + ->where_not_equal( 'object_sub_type', 'null' ) + ->where_not_in( 'object_sub_type', $included_post_types ) + ->count(); + } + } + + /** + * Cleans up any indexables that belong to taxonomies that are not/no longer publicly viewable. + * + * @param int $limit The limit we'll apply to the queries. + * + * @return bool|int The number of deleted rows, false if the query fails. + */ + public function clean_indexables_for_non_publicly_viewable_taxonomies( $limit ) { + global $wpdb; + $indexable_table = Model::get_table_name( 'Indexable' ); + + $included_taxonomies = $this->taxonomy->get_indexable_taxonomies(); + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: Too hard to fix. + if ( empty( $included_taxonomies ) ) { + $delete_query = $wpdb->prepare( + "DELETE FROM $indexable_table + WHERE object_type = 'term' + AND object_sub_type IS NOT NULL + LIMIT %d", + $limit + ); + } + else { + // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- Reason: we're passing an array instead. + $delete_query = $wpdb->prepare( + "DELETE FROM $indexable_table + WHERE object_type = 'term' + AND object_sub_type IS NOT NULL + AND object_sub_type NOT IN ( " . \implode( ', ', \array_fill( 0, \count( $included_taxonomies ), '%s' ) ) . ' ) + LIMIT %d', + \array_merge( $included_taxonomies, [ $limit ] ) + ); + } + // phpcs:enable + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + return $wpdb->query( $delete_query ); + // phpcs:enable + } + + /** + * Cleans up any indexables that belong to post type archive page that are not/no longer publicly viewable. + * + * @param int $limit The limit we'll apply to the queries. + * + * @return bool|int The number of deleted rows, false if the query fails. + */ + public function clean_indexables_for_non_publicly_viewable_post_type_archive_pages( $limit ) { + global $wpdb; + $indexable_table = Model::get_table_name( 'Indexable' ); + + $included_post_types = $this->post_type->get_indexable_post_archives(); + + $post_archives = []; + + foreach ( $included_post_types as $post_type ) { + $post_archives[] = $post_type->name; + } + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: Too hard to fix. + if ( empty( $post_archives ) ) { + $delete_query = $wpdb->prepare( + "DELETE FROM $indexable_table + WHERE object_type = 'post-type-archive' + AND object_sub_type IS NOT NULL + LIMIT %d", + $limit + ); + } + else { + // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- Reason: we're passing an array instead. + $delete_query = $wpdb->prepare( + "DELETE FROM $indexable_table + WHERE object_type = 'post-type-archive' + AND object_sub_type IS NOT NULL + AND object_sub_type NOT IN ( " . \implode( ', ', \array_fill( 0, \count( $post_archives ), '%s' ) ) . ' ) + LIMIT %d', + \array_merge( $post_archives, [ $limit ] ) + ); + } + // phpcs:enable + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + return $wpdb->query( $delete_query ); + // phpcs:enable + } + + /** + * Counts indexables for non publicly viewable taxonomies. + * + * @return float|int + */ + public function count_indexables_for_non_publicly_viewable_taxonomies() { + $included_taxonomies = $this->taxonomy->get_indexable_taxonomies(); + if ( empty( $included_taxonomies ) ) { + return $this + ->query() + ->where( 'object_type', 'term' ) + ->where_not_equal( 'object_sub_type', 'null' ) + ->count(); + } + else { + return $this + ->query() + ->where( 'object_type', 'term' ) + ->where_not_equal( 'object_sub_type', 'null' ) + ->where_not_in( 'object_sub_type', $included_taxonomies ) + ->count(); + } + } + + /** + * Counts indexables for non publicly viewable taxonomies. + * + * @return float|int + */ + public function count_indexables_for_non_publicly_post_type_archive_pages() { + $included_post_types = $this->post_type->get_indexable_post_archives(); + + $post_archives = []; + + foreach ( $included_post_types as $post_type ) { + $post_archives[] = $post_type->name; + } + if ( empty( $post_archives ) ) { + return $this + ->query() + ->where( 'object_type', 'post-type-archive' ) + ->where_not_equal( 'object_sub_type', 'null' ) + ->count(); + } + + return $this + ->query() + ->where( 'object_type', 'post-type-archive' ) + ->where_not_equal( 'object_sub_type', 'null' ) + ->where_not_in( 'object_sub_type', $post_archives ) + ->count(); + } + + /** + * Cleans up any user indexables when the author archives have been disabled. + * + * @param int $limit The limit we'll apply to the queries. + * + * @return bool|int The number of deleted rows, false if the query fails. + */ + public function clean_indexables_for_authors_archive_disabled( $limit ) { + global $wpdb; + + if ( ! $this->author_archive->are_disabled() ) { + return 0; + } + + $indexable_table = Model::get_table_name( 'Indexable' ); + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: Too hard to fix. + $delete_query = $wpdb->prepare( "DELETE FROM $indexable_table WHERE object_type = 'user' LIMIT %d", $limit ); + // phpcs:enable + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + return $wpdb->query( $delete_query ); + // phpcs:enable + } + + /** + * Counts the amount of author archive indexables if they are not disabled. + * + * @return float|int + */ + public function count_indexables_for_authors_archive_disabled() { + if ( ! $this->author_archive->are_disabled() ) { + return 0; + } + + return $this + ->query() + ->where( 'object_type', 'user' ) + ->count(); + } + + /** + * Cleans up any indexables that belong to users that have their author archives disabled. + * + * @param int $limit The limit we'll apply to the queries. + * + * @return bool|int The number of deleted rows, false if the query fails. + */ + public function clean_indexables_for_authors_without_archive( $limit ) { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + $author_archive_post_types = $this->author_archive->get_author_archive_post_types(); + $viewable_post_stati = \array_filter( \get_post_stati(), 'is_post_status_viewable' ); + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: Too hard to fix. + // phpcs:disable WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- Reason: we're passing an array instead. + $delete_query = $wpdb->prepare( + "DELETE FROM $indexable_table + WHERE object_type = 'user' + AND object_id NOT IN ( + SELECT DISTINCT post_author + FROM $wpdb->posts + WHERE post_type IN ( " . \implode( ', ', \array_fill( 0, \count( $author_archive_post_types ), '%s' ) ) . ' ) + AND post_status IN ( ' . \implode( ', ', \array_fill( 0, \count( $viewable_post_stati ), '%s' ) ) . ' ) + ) LIMIT %d', + \array_merge( $author_archive_post_types, $viewable_post_stati, [ $limit ] ) + ); + // phpcs:enable + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + return $wpdb->query( $delete_query ); + // phpcs:enable + } + + /** + * Counts total amount of indexables for authors without archives. + * + * @return bool|int|mysqli_result|resource|null + */ + public function count_indexables_for_authors_without_archive() { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + $author_archive_post_types = $this->author_archive->get_author_archive_post_types(); + $viewable_post_stati = \array_filter( \get_post_stati(), 'is_post_status_viewable' ); + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: Too hard to fix. + // phpcs:disable WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- Reason: we're passing an array instead. + $count_query = $wpdb->prepare( + "SELECT count(*) FROM $indexable_table + WHERE object_type = 'user' + AND object_id NOT IN ( + SELECT DISTINCT post_author + FROM $wpdb->posts + WHERE post_type IN ( " . \implode( ', ', \array_fill( 0, \count( $author_archive_post_types ), '%s' ) ) . ' ) + AND post_status IN ( ' . \implode( ', ', \array_fill( 0, \count( $viewable_post_stati ), '%s' ) ) . ' ) + )', + \array_merge( $author_archive_post_types, $viewable_post_stati ) + ); + // phpcs:enable + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + return $wpdb->get_col( $count_query )[0]; + // phpcs:enable + } + + /** + * Deletes rows from the indexable table where the source is no longer there. + * + * @param string $source_table The source table which we need to check the indexables against. + * @param string $source_identifier The identifier which the indexables are matched to. + * @param string $object_type The indexable object type. + * @param int $limit The limit we'll apply to the delete query. + * + * @return int|bool The number of rows that was deleted or false if the query failed. + */ + public function clean_indexables_for_object_type_and_source_table( $source_table, $source_identifier, $object_type, $limit ) { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + $source_table = $wpdb->prefix . $source_table; + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + " + SELECT indexable_table.object_id + FROM {$indexable_table} indexable_table + LEFT JOIN {$source_table} AS source_table + ON indexable_table.object_id = source_table.{$source_identifier} + WHERE source_table.{$source_identifier} IS NULL + AND indexable_table.object_id IS NOT NULL + AND indexable_table.object_type = '{$object_type}' + LIMIT %d", + $limit + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + $orphans = $wpdb->get_col( $query ); + + if ( empty( $orphans ) ) { + return 0; + } + + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->query( "DELETE FROM $indexable_table WHERE object_type = '{$object_type}' AND object_id IN( " . \implode( ',', $orphans ) . ' )' ); + } + + /** + * Deletes rows from the indexable table where the source is no longer there. + * + * @param int $limit The limit we'll apply to the delete query. + * + * @return int|bool The number of rows that was deleted or false if the query failed. + */ + public function clean_indexables_for_orphaned_users( $limit ) { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + $source_table = $wpdb->users; + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + " + SELECT indexable_table.object_id + FROM {$indexable_table} indexable_table + LEFT JOIN {$source_table} AS source_table + ON indexable_table.object_id = source_table.ID + WHERE source_table.ID IS NULL + AND indexable_table.object_id IS NOT NULL + AND indexable_table.object_type = 'user' + LIMIT %d", + $limit + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + $orphans = $wpdb->get_col( $query ); + + if ( empty( $orphans ) ) { + return 0; + } + + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->query( "DELETE FROM $indexable_table WHERE object_type = 'user' AND object_id IN( " . \implode( ',', $orphans ) . ' )' ); + } + + /** + * Counts indexables for given source table + source identifier + object type. + * + * @param string $source_table The source table. + * @param string $source_identifier The source identifier. + * @param string $object_type The object type. + * + * @return mixed + */ + public function count_indexables_for_object_type_and_source_table( string $source_table, string $source_identifier, string $object_type ) { + global $wpdb; + $indexable_table = Model::get_table_name( 'Indexable' ); + $source_table = $wpdb->prefix . $source_table; + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->get_col( + " + SELECT count(*) + FROM {$indexable_table} indexable_table + LEFT JOIN {$source_table} AS source_table + ON indexable_table.object_id = source_table.{$source_identifier} + WHERE source_table.{$source_identifier} IS NULL + AND indexable_table.object_id IS NOT NULL + AND indexable_table.object_type = '{$object_type}'" + )[0]; + // phpcs:enable + } + + /** + * Counts indexables for orphaned users. + * + * @return mixed + */ + public function count_indexables_for_orphaned_users() { + global $wpdb; + $indexable_table = Model::get_table_name( 'Indexable' ); + $source_table = $wpdb->users; + //phpcs:disable WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->get_col( + " + SELECT count(*) + FROM {$indexable_table} indexable_table + LEFT JOIN {$source_table} AS source_table + ON indexable_table.object_id = source_table.ID + WHERE source_table.ID IS NULL + AND indexable_table.object_id IS NOT NULL + AND indexable_table.object_type = 'user'" + )[0]; + // phpcs:enable + } + + /** + * Cleans orphaned rows from a yoast table. + * + * @param string $table The table to clean up. + * @param string $column The table column the cleanup will rely on. + * @param int $limit The limit we'll apply to the queries. + * + * @return int|bool The number of deleted rows, false if the query fails. + */ + public function cleanup_orphaned_from_table( $table, $column, $limit ) { + global $wpdb; + + $table = Model::get_table_name( $table ); + $indexable_table = Model::get_table_name( 'Indexable' ); + + // Warning: If this query is changed, make sure to update the query in cleanup_orphaned_from_table in Premium as well. + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + " + SELECT table_to_clean.{$column} + FROM {$table} table_to_clean + LEFT JOIN {$indexable_table} AS indexable_table + ON table_to_clean.{$column} = indexable_table.id + WHERE indexable_table.id IS NULL + AND table_to_clean.{$column} IS NOT NULL + LIMIT %d", + $limit + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + $orphans = $wpdb->get_col( $query ); + + if ( empty( $orphans ) ) { + return 0; + } + + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->query( "DELETE FROM $table WHERE {$column} IN( " . \implode( ',', $orphans ) . ' )' ); + } + + /** + * Counts orphaned rows from a yoast table. + * + * @param string $table The table to clean up. + * @param string $column The table column the cleanup will rely on. + * + * @return int|bool The number of deleted rows, false if the query fails. + */ + public function count_orphaned_from_table( string $table, string $column ) { + global $wpdb; + + $table = Model::get_table_name( $table ); + $indexable_table = Model::get_table_name( 'Indexable' ); + + // Warning: If this query is changed, make sure to update the query in cleanup_orphaned_from_table in Premium as well. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->get_col( + " + SELECT count(*) + FROM {$table} table_to_clean + LEFT JOIN {$indexable_table} AS indexable_table + ON table_to_clean.{$column} = indexable_table.id + WHERE indexable_table.id IS NULL + AND table_to_clean.{$column} IS NOT NULL" + )[0]; + // phpcs:enable + } + + /** + * Updates the author_id of indexables which author_id is not in the wp_users table with the id of the reassingned + * user. + * + * @param int $limit The limit we'll apply to the queries. + * + * @return int|bool The number of updated rows, false if query to get data fails. + */ + public function update_indexables_author_to_reassigned( $limit ) { + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + $reassigned_authors_objs = $this->get_reassigned_authors( $limit ); + + if ( $reassigned_authors_objs === false ) { + return false; + } + + return $this->update_indexable_authors( $reassigned_authors_objs, $limit ); + } + + /** + * Fetches pairs of old_id -> new_id indexed by old_id. + * By using the old_id (i.e. the id of the user that has been deleted) as key of the associative array, we can + * easily compose an array of unique pairs of old_id -> new_id. + * + * @param int $limit The limit we'll apply to the queries. + * + * @return int|bool The associative array with shape [ old_id => [ old_id, new_author ] ] or false if query to get + * data fails. + */ + private function get_reassigned_authors( $limit ) { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + $posts_table = $wpdb->posts; + + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + " + SELECT {$indexable_table}.author_id, {$posts_table}.post_author + FROM {$indexable_table} JOIN {$posts_table} on {$indexable_table}.object_id = {$posts_table}.id + WHERE object_type='post' + AND {$indexable_table}.author_id <> {$posts_table}.post_author + ORDER BY {$indexable_table}.author_id + LIMIT %d", + $limit + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + return $wpdb->get_results( $query, \OBJECT_K ); + } + + /** + * Updates the indexable's author_id referring to a deleted author with the id of the reassigned user. + * + * @param array $reassigned_authors_objs The array of objects with shape [ old_id => [ old_id, new_id ] ]. + * @param int $limit The limit we'll apply to the queries. + * + * @return int|bool The associative array with shape [ old_id => [ old_id, new_author ] ] or false if query to get + * data fails. + */ + private function update_indexable_authors( $reassigned_authors_objs, $limit ) { + global $wpdb; + + $indexable_table = Model::get_table_name( 'Indexable' ); + + // This is a workaround for the fact that the array_column function does not work on objects in PHP 5.6. + $reassigned_authors_array = \array_map( + static function ( $obj ) { + return (array) $obj; + }, + $reassigned_authors_objs + ); + + $reassigned_authors = \array_combine( \array_column( $reassigned_authors_array, 'author_id' ), \array_column( $reassigned_authors_array, 'post_author' ) ); + + foreach ( $reassigned_authors as $old_author_id => $new_author_id ) { + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Reason: There is no unescaped user input. + $query = $wpdb->prepare( + " + UPDATE {$indexable_table} + SET {$indexable_table}.author_id = {$new_author_id} + WHERE {$indexable_table}.author_id = {$old_author_id} + AND object_type='post' + LIMIT %d", + $limit + ); + // phpcs:enable + + // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: Already prepared. + $wpdb->query( $query ); + } + + return \count( $reassigned_authors ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-hierarchy-repository.php b/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-hierarchy-repository.php new file mode 100644 index 00000000..1d83ed75 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-hierarchy-repository.php @@ -0,0 +1,171 @@ +builder = $builder; + } + + /** + * Sets the indexable helper. + * + * @required + * + * @param Indexable_Helper $indexable_helper The indexable helper. + * + * @return void + */ + public function set_helper( Indexable_Helper $indexable_helper ) { + $this->indexable_helper = $indexable_helper; + } + + /** + * Removes all ancestors for an indexable. + * + * @param int $indexable_id The indexable id. + * + * @return bool Whether or not the indexables were successfully deleted. + */ + public function clear_ancestors( $indexable_id ) { + return $this->query()->where( 'indexable_id', $indexable_id )->delete_many(); + } + + /** + * Adds an ancestor to an indexable. + * + * @param int $indexable_id The indexable id. + * @param int $ancestor_id The ancestor id. + * @param int $depth The depth. + * + * @return bool Whether or not the ancestor was added successfully. + */ + public function add_ancestor( $indexable_id, $ancestor_id, $depth ) { + if ( ! $this->indexable_helper->should_index_indexables() ) { + return false; + } + + $hierarchy = $this->query()->create( + [ + 'indexable_id' => $indexable_id, + 'ancestor_id' => $ancestor_id, + 'depth' => $depth, + 'blog_id' => \get_current_blog_id(), + ] + ); + + return $hierarchy->save(); + } + + /** + * Retrieves the ancestors. Create them when empty. + * + * @param Indexable $indexable The indexable to get the ancestors for. + * + * @return int[] The indexable id's of the ancestors in order of grandparent to child. + */ + public function find_ancestors( Indexable $indexable ) { + $ancestors = $this->query() + ->select( 'ancestor_id' ) + ->where( 'indexable_id', $indexable->id ) + ->order_by_desc( 'depth' ) + ->find_array(); + + if ( ! empty( $ancestors ) ) { + if ( \count( $ancestors ) === 1 && $ancestors[0]['ancestor_id'] === '0' ) { + return []; + } + return \wp_list_pluck( $ancestors, 'ancestor_id' ); + } + + $indexable = $this->builder->build( $indexable ); + + return \wp_list_pluck( $indexable->ancestors, 'id' ); + } + + /** + * Finds the children for a given indexable. + * + * @param Indexable $indexable The indexable to find the children for. + * + * @return array Array with indexable id's for the children. + */ + public function find_children( Indexable $indexable ) { + $children = $this->query() + ->select( 'indexable_id' ) + ->where( 'ancestor_id', $indexable->id ) + ->find_array(); + + if ( empty( $children ) ) { + return []; + } + + return \wp_list_pluck( $children, 'indexable_id' ); + } + + /** + * Starts a query for this repository. + * + * @return ORM + */ + public function query() { + return Model::of_type( 'Indexable_Hierarchy' ); + } + + /** + * Finds all the children by given ancestor id's. + * + * @param array $object_ids List of id's to get the children for. + * + * @return array List of indexable id's for the children. + */ + public function find_children_by_ancestor_ids( array $object_ids ) { + if ( empty( $object_ids ) ) { + return []; + } + + $children = $this->query() + ->select( 'indexable_id' ) + ->where_in( 'ancestor_id', $object_ids ) + ->find_array(); + + if ( empty( $children ) ) { + return []; + } + + return \wp_list_pluck( $children, 'indexable_id' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-repository.php b/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-repository.php new file mode 100644 index 00000000..b3ad81bc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/repositories/indexable-repository.php @@ -0,0 +1,547 @@ +builder = $builder; + $this->current_page = $current_page; + $this->logger = $logger; + $this->hierarchy_repository = $hierarchy_repository; + $this->wpdb = $wpdb; + $this->version_manager = $version_manager; + } + + /** + * Starts a query for this repository. + * + * @return ORM + */ + public function query() { + return Model::of_type( 'Indexable' ); + } + + /** + * Attempts to find the indexable for the current WordPress page. Returns false if no indexable could be found. + * This may be the result of the indexable not existing or of being unable to determine what type of page the + * current page is. + * + * @return bool|Indexable The indexable. If no indexable is found returns an empty indexable. Returns false if there is a database error. + */ + public function for_current_page() { + $indexable = false; + + switch ( true ) { + case $this->current_page->is_simple_page(): + $indexable = $this->find_by_id_and_type( $this->current_page->get_simple_page_id(), 'post' ); + break; + case $this->current_page->is_home_static_page(): + $indexable = $this->find_by_id_and_type( $this->current_page->get_front_page_id(), 'post' ); + break; + case $this->current_page->is_home_posts_page(): + $indexable = $this->find_for_home_page(); + break; + case $this->current_page->is_term_archive(): + $indexable = $this->find_by_id_and_type( $this->current_page->get_term_id(), 'term' ); + break; + case $this->current_page->is_date_archive(): + $indexable = $this->find_for_date_archive(); + break; + case $this->current_page->is_search_result(): + $indexable = $this->find_for_system_page( 'search-result' ); + break; + case $this->current_page->is_post_type_archive(): + $indexable = $this->find_for_post_type_archive( $this->current_page->get_queried_post_type() ); + break; + case $this->current_page->is_author_archive(): + $indexable = $this->find_by_id_and_type( $this->current_page->get_author_id(), 'user' ); + break; + case $this->current_page->is_404(): + $indexable = $this->find_for_system_page( '404' ); + break; + } + + if ( $indexable === false ) { + return $this->query()->create( + [ + 'object_type' => 'unknown', + 'post_status' => 'unindexed', + 'version' => 1, + ] + ); + } + + return $indexable; + } + + /** + * Retrieves an indexable by its permalink. + * + * @param string $permalink The indexable permalink. + * + * @return bool|Indexable The indexable, false if none could be found. + */ + public function find_by_permalink( $permalink ) { + $permalink_hash = \strlen( $permalink ) . ':' . \md5( $permalink ); + + // Find by both permalink_hash and permalink, permalink_hash is indexed so will be used first by the DB to optimize the query. + return $this->query() + ->where( 'permalink_hash', $permalink_hash ) + ->where( 'permalink', $permalink ) + ->find_one(); + } + + /** + * Retrieves all the indexable instances of a certain object type. + * + * @param string $object_type The object type. + * + * @return Indexable[] The array with all the indexable instances of a certain object type. + */ + public function find_all_with_type( $object_type ) { + /** + * The array with all the indexable instances of a certain object type. + * + * @var Indexable[] $indexables + */ + $indexables = $this + ->query() + ->where( 'object_type', $object_type ) + ->find_many(); + + return \array_map( [ $this, 'upgrade_indexable' ], $indexables ); + } + + /** + * Retrieves all the indexable instances of a certain object subtype. + * + * @param string $object_type The object type. + * @param string $object_sub_type The object subtype. + * + * @return Indexable[] The array with all the indexable instances of a certain object subtype. + */ + public function find_all_with_type_and_sub_type( $object_type, $object_sub_type ) { + /** + * The array with all the indexable instances of a certain object type and subtype. + * + * @var Indexable[] $indexables + */ + $indexables = $this + ->query() + ->where( 'object_type', $object_type ) + ->where( 'object_sub_type', $object_sub_type ) + ->find_many(); + + return \array_map( [ $this, 'upgrade_indexable' ], $indexables ); + } + + /** + * Retrieves the homepage indexable. + * + * @param bool $auto_create Optional. Create the indexable if it does not exist. + * + * @return bool|Indexable Instance of indexable. + */ + public function find_for_home_page( $auto_create = true ) { + $indexable = \wp_cache_get( 'home-page', 'yoast-seo-indexables' ); + if ( ! $indexable ) { + /** + * Indexable instance. + * + * @var Indexable $indexable + */ + $indexable = $this->query()->where( 'object_type', 'home-page' )->find_one(); + + if ( $auto_create && ! $indexable ) { + $indexable = $this->builder->build_for_home_page(); + } + + $indexable = $this->upgrade_indexable( $indexable ); + + \wp_cache_set( 'home-page', $indexable, 'yoast-seo-indexables', ( 5 * \MINUTE_IN_SECONDS ) ); + } + + return $indexable; + } + + /** + * Retrieves the date archive indexable. + * + * @param bool $auto_create Optional. Create the indexable if it does not exist. + * + * @return bool|Indexable Instance of indexable. + */ + public function find_for_date_archive( $auto_create = true ) { + /** + * Indexable instance. + * + * @var Indexable $indexable + */ + $indexable = $this->query()->where( 'object_type', 'date-archive' )->find_one(); + + if ( $auto_create && ! $indexable ) { + $indexable = $this->builder->build_for_date_archive(); + } + + return $this->upgrade_indexable( $indexable ); + } + + /** + * Retrieves an indexable for a post type archive. + * + * @param string $post_type The post type. + * @param bool $auto_create Optional. Create the indexable if it does not exist. + * + * @return bool|Indexable The indexable, false if none could be found. + */ + public function find_for_post_type_archive( $post_type, $auto_create = true ) { + /** + * Indexable instance. + * + * @var Indexable $indexable + */ + $indexable = $this->query() + ->where( 'object_type', 'post-type-archive' ) + ->where( 'object_sub_type', $post_type ) + ->find_one(); + + if ( $auto_create && ! $indexable ) { + $indexable = $this->builder->build_for_post_type_archive( $post_type ); + } + + return $this->upgrade_indexable( $indexable ); + } + + /** + * Retrieves the indexable for a system page. + * + * @param string $object_sub_type The type of system page. + * @param bool $auto_create Optional. Create the indexable if it does not exist. + * + * @return bool|Indexable Instance of indexable. + */ + public function find_for_system_page( $object_sub_type, $auto_create = true ) { + /** + * Indexable instance. + * + * @var Indexable $indexable + */ + $indexable = $this->query() + ->where( 'object_type', 'system-page' ) + ->where( 'object_sub_type', $object_sub_type ) + ->find_one(); + + if ( $auto_create && ! $indexable ) { + $indexable = $this->builder->build_for_system_page( $object_sub_type ); + } + + return $this->upgrade_indexable( $indexable ); + } + + /** + * Retrieves an indexable by its ID and type. + * + * @param int $object_id The indexable object ID. + * @param string $object_type The indexable object type. + * @param bool $auto_create Optional. Create the indexable if it does not exist. + * + * @return bool|Indexable Instance of indexable. + */ + public function find_by_id_and_type( $object_id, $object_type, $auto_create = true ) { + $indexable = $this->query() + ->where( 'object_id', $object_id ) + ->where( 'object_type', $object_type ) + ->find_one(); + + if ( $auto_create && ! $indexable ) { + $indexable = $this->builder->build_for_id_and_type( $object_id, $object_type ); + } + else { + $indexable = $this->upgrade_indexable( $indexable ); + } + + return $indexable; + } + + /** + * Retrieves multiple indexables at once by their id's and type. + * + * @param int[] $object_ids The array of indexable object id's. + * @param string $object_type The indexable object type. + * @param bool $auto_create Optional. Create the indexable if it does not exist. + * + * @return Indexable[] An array of indexables. + */ + public function find_by_multiple_ids_and_type( $object_ids, $object_type, $auto_create = true ) { + if ( empty( $object_ids ) ) { + return []; + } + + /** + * Represents an array of indexable objects. + * + * @var Indexable[] $indexables + */ + $indexables = $this->query() + ->where_in( 'object_id', $object_ids ) + ->where( 'object_type', $object_type ) + ->find_many(); + + if ( $auto_create ) { + $indexables_available = []; + foreach ( $indexables as $indexable ) { + $indexables_available[] = $indexable->object_id; + } + + $indexables_to_create = \array_diff( $object_ids, $indexables_available ); + + foreach ( $indexables_to_create as $indexable_to_create ) { + $indexables[] = $this->builder->build_for_id_and_type( $indexable_to_create, $object_type ); + } + } + + return \array_map( [ $this, 'upgrade_indexable' ], $indexables ); + } + + /** + * Finds the indexables by id's. + * + * @param array $indexable_ids The indexable id's. + * + * @return Indexable[] The found indexables. + */ + public function find_by_ids( array $indexable_ids ) { + if ( empty( $indexable_ids ) ) { + return []; + } + + $indexables = $this + ->query() + ->where_in( 'id', $indexable_ids ) + ->find_many(); + + return \array_map( [ $this, 'upgrade_indexable' ], $indexables ); + } + + /** + * Returns all ancestors of a given indexable. + * + * @param Indexable $indexable The indexable to find the ancestors of. + * + * @return Indexable[] All ancestors of the given indexable. + */ + public function get_ancestors( Indexable $indexable ) { + // If we've already set ancestors on the indexable no need to get them again. + if ( \is_array( $indexable->ancestors ) && ! empty( $indexable->ancestors ) ) { + return \array_map( [ $this, 'upgrade_indexable' ], $indexable->ancestors ); + } + + $indexable_ids = $this->hierarchy_repository->find_ancestors( $indexable ); + + // If we've set ancestors on the indexable because we had to build them to find them. + if ( \is_array( $indexable->ancestors ) && ! empty( $indexable->ancestors ) ) { + return \array_map( [ $this, 'upgrade_indexable' ], $indexable->ancestors ); + } + + if ( empty( $indexable_ids ) ) { + return []; + } + + if ( $indexable_ids[0] === 0 && \count( $indexable_ids ) === 1 ) { + return []; + } + + $indexables = $this->query() + ->where_in( 'id', $indexable_ids ) + ->order_by_expr( 'FIELD(id,' . \implode( ',', $indexable_ids ) . ')' ) + ->find_many(); + + return \array_map( [ $this, 'upgrade_indexable' ], $indexables ); + } + + /** + * Returns all subpages with a given post_parent. + * + * @param int $post_parent The post parent. + * @param array $exclude_ids The id's to exclude. + * + * @return Indexable[] array of indexables. + */ + public function get_subpages_by_post_parent( $post_parent, $exclude_ids = [] ) { + $query = $this->query() + ->where( 'post_parent', $post_parent ) + ->where( 'object_type', 'post' ) + ->where( 'post_status', 'publish' ); + + if ( ! empty( $exclude_ids ) ) { + $query->where_not_in( 'object_id', $exclude_ids ); + } + return $query->find_many(); + } + + /** + * Updates the incoming link count for an indexable without first fetching it. + * + * @param int $indexable_id The indexable id. + * @param int $count The incoming link count. + * + * @return bool Whether or not the update was succeful. + */ + public function update_incoming_link_count( $indexable_id, $count ) { + return (bool) $this->query() + ->set( 'incoming_link_count', $count ) + ->where( 'id', $indexable_id ) + ->update_many(); + } + + /** + * Ensures that the given indexable has a permalink. + * + * Will be deprecated in 17.3 - Use upgrade_indexable instead. + * + * @codeCoverageIgnore + * + * @param Indexable $indexable The indexable. + * + * @return bool|Indexable The indexable. + */ + public function ensure_permalink( $indexable ) { + // @phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- self::class is safe. + // @phpcs:ignore Squiz.PHP.CommentedOutCode.Found + // _deprecated_function( __METHOD__, 'Yoast SEO 17.3', self::class . '::upgrade_indexable' ); + + return $this->upgrade_indexable( $indexable ); + } + + /** + * Checks if an Indexable is outdated, and rebuilds it when necessary. + * + * @param Indexable $indexable The indexable. + * + * @return Indexable The indexable. + */ + public function upgrade_indexable( $indexable ) { + if ( $this->version_manager->indexable_needs_upgrade( $indexable ) ) { + $indexable = $this->builder->build( $indexable ); + } + return $indexable; + } + + /** + * Resets the permalinks of the passed object type and subtype. + * + * @param string|null $type The type of the indexable. Can be null. + * @param string|null $subtype The subtype. Can be null. + * + * @return int|bool The number of permalinks changed if the query was succesful. False otherwise. + */ + public function reset_permalink( $type = null, $subtype = null ) { + $query = $this->query()->set( + [ + 'permalink' => null, + 'permalink_hash' => null, + 'version' => 0, + ] + ); + + if ( $type !== null ) { + $query->where( 'object_type', $type ); + } + + if ( $type !== null && $subtype !== null ) { + $query->where( 'object_sub_type', $subtype ); + } + + return $query->update_many(); + } + + /** + * Gets the total number of stored indexables. + * + * @return int The total number of stored indexables. + */ + public function get_total_number_of_indexables() { + return $this->query()->count(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/repositories/primary-term-repository.php b/wp/wp-content/plugins/wordpress-seo/src/repositories/primary-term-repository.php new file mode 100644 index 00000000..8fc0c93e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/repositories/primary-term-repository.php @@ -0,0 +1,49 @@ +query() + ->where( 'post_id', $post_id ) + ->where( 'taxonomy', $taxonomy ) + ->find_one(); + + if ( $auto_create && ! $primary_term_indexable ) { + $primary_term_indexable = $this->query()->create(); + } + + return $primary_term_indexable; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/repositories/seo-links-repository.php b/wp/wp-content/plugins/wordpress-seo/src/repositories/seo-links-repository.php new file mode 100644 index 00000000..325f9ed2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/repositories/seo-links-repository.php @@ -0,0 +1,214 @@ +query() + ->where( 'post_id', $post_id ) + ->find_many(); + } + + /** + * Finds all SEO Links by indexable ID. + * + * @param int $indexable_id The indexable ID. + * + * @return SEO_Links[] The SEO Links. + */ + public function find_all_by_indexable_id( $indexable_id ) { + return $this->query() + ->where( 'indexable_id', $indexable_id ) + ->find_many(); + } + + /** + * Retrieves an SEO Link by url. + * + * @param string $url The SEO Link's url. + * + * @return SEO_Links|false The SEO Link, or false if none found. + */ + public function find_one_by_url( $url ) { + return $this->query() + ->select( 'target_post_id' ) + ->where( 'url', $url ) + ->find_one(); + } + + /** + * Retrieves all SEO Links by target post ID. + * + * @param string $target_post_id The SEO Link's target post ID. + * + * @return SEO_Links[] The SEO Links. + */ + public function find_all_by_target_post_id( $target_post_id ) { + return $this->query() + ->where( 'target_post_id', $target_post_id ) + ->find_many(); + } + + /** + * Updates the ID of the target indexable of a link. + * + * @param int $link_id The ID of the link to be updated. + * @param int $target_indexable_id The ID of the target indexable. + * + * @return bool Whether or not the update was succeful. + */ + public function update_target_indexable_id( $link_id, $target_indexable_id ) { + return (bool) $this->query() + ->set( 'target_indexable_id', $target_indexable_id ) + ->where( 'id', $link_id ) + ->update_many(); + } + + /** + * Clears all SEO Links by post ID. + * + * @param int $post_id The post ID. + * + * @return bool Whether or not the delete was succesfull. + */ + public function delete_all_by_post_id( $post_id ) { + return $this->query() + ->where( 'post_id', $post_id ) + ->delete_many(); + } + + /** + * Clears all SEO Links by post ID where the indexable id is null. + * + * @param int $post_id The post ID. + * + * @return bool Whether or not the delete was succesfull. + */ + public function delete_all_by_post_id_where_indexable_id_null( $post_id ) { + return $this->query() + ->where( 'post_id', $post_id ) + ->where_null( 'indexable_id' ) + ->delete_many(); + } + + /** + * Clears all SEO Links by indexable ID. + * + * @param int $indexable_id The indexable ID. + * + * @return bool Whether or not the delete was succesfull. + */ + public function delete_all_by_indexable_id( $indexable_id ) { + return $this->query() + ->where( 'indexable_id', $indexable_id ) + ->delete_many(); + } + + /** + * Returns incoming link counts for a number of posts. + * + * @param array $post_ids The post IDs. + * + * @return array An array of associative arrays, each containing a post id and incoming property. + */ + public function get_incoming_link_counts_for_post_ids( $post_ids ) { + return $this->query() + ->select_expr( 'COUNT( id )', 'incoming' ) + ->select( 'target_post_id', 'post_id' ) + ->where_in( 'target_post_id', $post_ids ) + ->group_by( 'target_post_id' ) + ->find_array(); + } + + /** + * Returns incoming link counts for a number of indexables. + * + * @param array $indexable_ids The indexable IDs. + * + * @return array An array of associative arrays, each containing a indexable id and incoming property. + */ + public function get_incoming_link_counts_for_indexable_ids( $indexable_ids ) { + if ( empty( $indexable_ids ) ) { + return []; + } + + // This query only returns ID's with an incoming count > 0. We need to restore any ID's with 0 incoming links later. + $indexable_counts = $this->query() + ->select_expr( 'COUNT( id )', 'incoming' ) + ->select( 'target_indexable_id' ) + ->where_in( 'target_indexable_id', $indexable_ids ) + ->group_by( 'target_indexable_id' ) + ->find_array(); + + // If the above query fails, do not update anything. + if ( ! \is_array( $indexable_counts ) ) { + return []; + } + + // Get all ID's returned from the query and set them as keys for easy access. + $returned_ids = \array_flip( \array_column( $indexable_counts, 'target_indexable_id' ) ); + + // Loop over the original ID's and search them in the returned ID's. If they don't exist, add them with an incoming count of 0. + foreach ( $indexable_ids as $id ) { + // Cast the ID to string, as the arrays only contain stringified versions of the ID. + $id = \strval( $id ); + if ( isset( $returned_ids[ $id ] ) === false ) { + $indexable_counts[] = [ + 'incoming' => '0', + 'target_indexable_id' => $id, + ]; + } + } + + return $indexable_counts; + } + + /** + * Deletes all seo links for the given ids. + * + * @param int[] $ids The seo link ids. + * + * @return bool Whether or not the delete was succesfull. + */ + public function delete_many_by_id( $ids ) { + return $this->query() + ->where_in( 'id', $ids ) + ->delete_many(); + } + + /** + * Insert multiple seo links. + * + * @param SEO_Links[] $links The seo links to be inserted. + * + * @return bool Whether or not the insert was succesfull. + */ + public function insert_many( $links ) { + return $this->query() + ->insert_many( $links ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/abstract-action-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/abstract-action-route.php new file mode 100644 index 00000000..9ee3f07a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/abstract-action-route.php @@ -0,0 +1,30 @@ + $objects, + 'next_url' => $next_url, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/abstract-indexation-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/abstract-indexation-route.php new file mode 100644 index 00000000..1733af99 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/abstract-indexation-route.php @@ -0,0 +1,33 @@ +index(); + + $next_url = false; + if ( \count( $indexables ) >= $indexation_action->get_limit() ) { + $next_url = \rest_url( $url ); + } + + return $this->respond_with( $indexables, $next_url ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/alert-dismissal-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/alert-dismissal-route.php new file mode 100644 index 00000000..b6056647 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/alert-dismissal-route.php @@ -0,0 +1,104 @@ +alert_dismissal_action = $alert_dismissal_action; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $dismiss_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'dismiss' ], + 'permission_callback' => [ $this, 'can_dismiss' ], + 'args' => [ + 'key' => [ + 'validate_callback' => [ $this->alert_dismissal_action, 'is_allowed' ], + 'required' => true, + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::DISMISS_ROUTE, $dismiss_route_args ); + } + + /** + * Dismisses an alert. + * + * @param WP_REST_Request $request The request. This request should have a key param set. + * + * @return WP_REST_Response The response. + */ + public function dismiss( WP_REST_Request $request ) { + $success = $this->alert_dismissal_action->dismiss( $request['key'] ); + $status = $success === ( true ) ? 200 : 400; + + return new WP_REST_Response( + (object) [ + 'success' => $success, + 'status' => $status, + ], + $status + ); + } + + /** + * Whether or not the current user is allowed to dismiss alerts. + * + * @return bool Whether or not the current user is allowed to dismiss alerts. + */ + public function can_dismiss() { + return \current_user_can( 'edit_posts' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/first-time-configuration-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/first-time-configuration-route.php new file mode 100644 index 00000000..cacf8a46 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/first-time-configuration-route.php @@ -0,0 +1,314 @@ +first_time_configuration_action = $first_time_configuration_action; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $site_representation_route = [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_site_representation' ], + 'permission_callback' => [ $this, 'can_manage_options' ], + 'args' => [ + 'company_or_person' => [ + 'type' => 'string', + 'enum' => [ + 'company', + 'person', + ], + 'required' => true, + ], + 'company_name' => [ + 'type' => 'string', + ], + 'company_logo' => [ + 'type' => 'string', + ], + 'company_logo_id' => [ + 'type' => 'integer', + ], + 'person_logo' => [ + 'type' => 'string', + ], + 'person_logo_id' => [ + 'type' => 'integer', + ], + 'company_or_person_user_id' => [ + 'type' => 'integer', + ], + 'description' => [ + 'type' => 'string', + ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::CONFIGURATION_ROUTE . self::SITE_REPRESENTATION_ROUTE, $site_representation_route ); + + $social_profiles_route = [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_social_profiles' ], + 'permission_callback' => [ $this, 'can_manage_options' ], + 'args' => [ + 'facebook_site' => [ + 'type' => 'string', + ], + 'twitter_site' => [ + 'type' => 'string', + ], + 'other_social_urls' => [ + 'type' => 'array', + ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::CONFIGURATION_ROUTE . self::SOCIAL_PROFILES_ROUTE, $social_profiles_route ); + + $check_capability_route = [ + 'methods' => 'GET', + 'callback' => [ $this, 'check_capability' ], + 'permission_callback' => [ $this, 'can_manage_options' ], + 'args' => [ + 'user_id' => [ + 'required' => true, + ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::CONFIGURATION_ROUTE . self::CHECK_CAPABILITY_ROUTE, $check_capability_route ); + + $enable_tracking_route = [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_enable_tracking' ], + 'permission_callback' => [ $this, 'can_manage_options' ], + 'args' => [ + 'tracking' => [ + 'type' => 'boolean', + 'required' => true, + ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::CONFIGURATION_ROUTE . self::ENABLE_TRACKING_ROUTE, $enable_tracking_route ); + + $save_configuration_state_route = [ + 'methods' => 'POST', + 'callback' => [ $this, 'save_configuration_state' ], + 'permission_callback' => [ $this, 'can_manage_options' ], + 'args' => [ + 'finishedSteps' => [ + 'type' => 'array', + 'required' => true, + ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::CONFIGURATION_ROUTE . self::SAVE_CONFIGURATION_STATE_ROUTE, $save_configuration_state_route ); + + $get_configuration_state_route = [ + [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_configuration_state' ], + 'permission_callback' => [ $this, 'can_manage_options' ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::CONFIGURATION_ROUTE . self::GET_CONFIGURATION_STATE_ROUTE, $get_configuration_state_route ); + } + + /** + * Sets the site representation values. + * + * @param WP_REST_Request $request The request. + * + * @return WP_REST_Response + */ + public function set_site_representation( WP_REST_Request $request ) { + $data = $this + ->first_time_configuration_action + ->set_site_representation( $request->get_json_params() ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Sets the social profiles values. + * + * @param WP_REST_Request $request The request. + * + * @return WP_REST_Response + */ + public function set_social_profiles( WP_REST_Request $request ) { + $data = $this + ->first_time_configuration_action + ->set_social_profiles( $request->get_json_params() ); + + return new WP_REST_Response( + [ 'json' => $data ] + ); + } + + /** + * Checks if the current user has the correct capability to edit a specific user. + * + * @param WP_REST_Request $request The request. + * + * @return WP_REST_Response + */ + public function check_capability( WP_REST_Request $request ) { + $data = $this + ->first_time_configuration_action + ->check_capability( $request->get_param( 'user_id' ) ); + + return new WP_REST_Response( $data ); + } + + /** + * Enables or disables tracking. + * + * @param WP_REST_Request $request The request. + * + * @return WP_REST_Response + */ + public function set_enable_tracking( WP_REST_Request $request ) { + $data = $this + ->first_time_configuration_action + ->set_enable_tracking( $request->get_json_params() ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Checks if the current user has the right capability. + * + * @return bool + */ + public function can_manage_options() { + return \current_user_can( 'wpseo_manage_options' ); + } + + /** + * Checks if the current user has the capability to edit a specific user. + * + * @param WP_REST_Request $request The request. + * + * @return bool + */ + public function can_edit_user( WP_REST_Request $request ) { + $response = $this->first_time_configuration_action->check_capability( $request->get_param( 'user_id' ) ); + return $response->success; + } + + /** + * Checks if the current user has the capability to edit posts of other users. + * + * @return bool + */ + public function can_edit_other_posts() { + return \current_user_can( 'edit_others_posts' ); + } + + /** + * Saves the first time configuration state. + * + * @param WP_REST_Request $request The request. + * + * @return WP_REST_Response + */ + public function save_configuration_state( WP_REST_Request $request ) { + $data = $this + ->first_time_configuration_action + ->save_configuration_state( $request->get_json_params() ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Returns the first time configuration state. + * + * @return WP_REST_Response the state of the configuration. + */ + public function get_configuration_state() { + $data = $this + ->first_time_configuration_action + ->get_configuration_state(); + + return new WP_REST_Response( $data, $data->status ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/importing-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/importing-route.php new file mode 100644 index 00000000..c30ad66f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/importing-route.php @@ -0,0 +1,170 @@ +[\w-]+)/(?P[\w-]+)'; + + /** + * List of available importers. + * + * @var Importing_Action_Interface[] + */ + protected $importers = []; + + /** + * The importable detector service. + * + * @var Importable_Detector_Service + */ + protected $importable_detector; + + /** + * Importing_Route constructor. + * + * @param Importable_Detector_Service $importable_detector The importable detector service. + * @param Importing_Action_Interface ...$importers All available importers. + */ + public function __construct( + Importable_Detector_Service $importable_detector, + Importing_Action_Interface ...$importers + ) { + $this->importable_detector = $importable_detector; + $this->importers = $importers; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + \register_rest_route( + Main::API_V1_NAMESPACE, + self::ROUTE, + [ + 'callback' => [ $this, 'execute' ], + 'permission_callback' => [ $this, 'is_user_permitted_to_import' ], + 'methods' => [ 'POST' ], + ] + ); + } + + /** + * Executes the rest request, but only if the respective action is enabled. + * + * @param mixed $data The request parameters. + * + * @return WP_REST_Response|false Response or false on non-existent route. + */ + public function execute( $data ) { + $plugin = (string) $data['plugin']; + $type = (string) $data['type']; + + $next_url = $this->get_endpoint( $plugin, $type ); + + try { + $importer = $this->get_importer( $plugin, $type ); + + if ( $importer === false || ! $importer->is_enabled() ) { + return new WP_Error( + 'rest_no_route', + 'Requested importer not found', + [ + 'status' => 404, + ] + ); + } + + $result = $importer->index(); + + if ( $result === false || \count( $result ) === 0 ) { + $next_url = false; + } + + return $this->respond_with( + $result, + $next_url + ); + } catch ( Exception $exception ) { + if ( $exception instanceof Aioseo_Validation_Exception ) { + return new WP_Error( + 'wpseo_error_validation', + $exception->getMessage(), + [ 'stackTrace' => $exception->getTraceAsString() ] + ); + } + + return new WP_Error( + 'wpseo_error_indexing', + $exception->getMessage(), + [ 'stackTrace' => $exception->getTraceAsString() ] + ); + } + } + + /** + * Gets the right importer for the given arguments. + * + * @param string $plugin The plugin to import from. + * @param string $type The type of entity to import. + * + * @return Importing_Action_Interface|false The importer, or false if no importer was found. + */ + protected function get_importer( $plugin, $type ) { + $importers = $this->importable_detector->filter_actions( $this->importers, $plugin, $type ); + + if ( \count( $importers ) !== 1 ) { + return false; + } + + return \current( $importers ); + } + + /** + * Gets the right endpoint for the given arguments. + * + * @param string $plugin The plugin to import from. + * @param string $type The type of entity to import. + * + * @return string|false The endpoint for the given action or false on failure of finding the one. + */ + public function get_endpoint( $plugin, $type ) { + if ( empty( $plugin ) || empty( $type ) ) { + return false; + } + + return Main::API_V1_NAMESPACE . "/import/{$plugin}/{$type}"; + } + + /** + * Whether or not the current user is allowed to import. + * + * @return bool Whether or not the current user is allowed to import. + */ + public function is_user_permitted_to_import() { + return \current_user_can( 'activate_plugins' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/indexables-head-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/indexables-head-route.php new file mode 100644 index 00000000..84f417a2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/indexables-head-route.php @@ -0,0 +1,104 @@ +head_action = $head_action; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ Headless_Rest_Endpoints_Enabled_Conditional::class ]; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $route_args = [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_head' ], + 'permission_callback' => '__return_true', + 'args' => [ + 'url' => [ + 'validate_callback' => [ $this, 'is_valid_url' ], + 'required' => true, + ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::HEAD_FOR_URL_ROUTE, $route_args ); + } + + /** + * Gets the head of a page for a given URL. + * + * @param WP_REST_Request $request The request. This request should have a url param set. + * + * @return WP_REST_Response The response. + */ + public function get_head( WP_REST_Request $request ) { + $url = \esc_url_raw( \utf8_uri_encode( $request['url'] ) ); + $data = $this->head_action->for_url( $url ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Checks if a url is a valid url. + * + * @param string $url The url to check. + * + * @return bool Whether or not the url is valid. + */ + public function is_valid_url( $url ) { + $url = WPSEO_Utils::sanitize_url( \utf8_uri_encode( $url ) ); + if ( \filter_var( $url, \FILTER_VALIDATE_URL ) === false ) { + return false; + } + return true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/indexing-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/indexing-route.php new file mode 100644 index 00000000..03f98c84 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/indexing-route.php @@ -0,0 +1,431 @@ +post_indexation_action = $post_indexation_action; + $this->term_indexation_action = $term_indexation_action; + $this->post_type_archive_indexation_action = $post_type_archive_indexation_action; + $this->general_indexation_action = $general_indexation_action; + $this->indexable_indexing_complete_action = $indexable_indexing_complete_action; + $this->indexing_complete_action = $indexing_complete_action; + $this->prepare_indexing_action = $prepare_indexing_action; + $this->options_helper = $options_helper; + $this->post_link_indexing_action = $post_link_indexing_action; + $this->term_link_indexing_action = $term_link_indexing_action; + $this->indexing_helper = $indexing_helper; + } + + /** + * Registers the routes used to index indexables. + * + * @return void + */ + public function register_routes() { + $route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'index_posts' ], + 'permission_callback' => [ $this, 'can_index' ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::POSTS_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'index_terms' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::TERMS_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'index_post_type_archives' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::POST_TYPE_ARCHIVES_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'index_general' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::GENERAL_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'prepare' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::PREPARE_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'indexables_complete' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::INDEXABLES_COMPLETE_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'complete' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::COMPLETE_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'index_post_links' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::POST_LINKS_INDEXING_ROUTE, $route_args ); + + $route_args['callback'] = [ $this, 'index_term_links' ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::TERM_LINKS_INDEXING_ROUTE, $route_args ); + } + + /** + * Indexes a number of unindexed posts. + * + * @return WP_REST_Response The response. + */ + public function index_posts() { + return $this->run_indexation_action( $this->post_indexation_action, self::FULL_POSTS_ROUTE ); + } + + /** + * Indexes a number of unindexed terms. + * + * @return WP_REST_Response The response. + */ + public function index_terms() { + return $this->run_indexation_action( $this->term_indexation_action, self::FULL_TERMS_ROUTE ); + } + + /** + * Indexes a number of unindexed post type archive pages. + * + * @return WP_REST_Response The response. + */ + public function index_post_type_archives() { + return $this->run_indexation_action( $this->post_type_archive_indexation_action, self::FULL_POST_TYPE_ARCHIVES_ROUTE ); + } + + /** + * Indexes a number of unindexed general items. + * + * @return WP_REST_Response The response. + */ + public function index_general() { + return $this->run_indexation_action( $this->general_indexation_action, self::FULL_GENERAL_ROUTE ); + } + + /** + * Indexes a number of posts for post links. + * + * @return WP_REST_Response The response. + */ + public function index_post_links() { + return $this->run_indexation_action( $this->post_link_indexing_action, self::FULL_POST_LINKS_INDEXING_ROUTE ); + } + + /** + * Indexes a number of terms for term links. + * + * @return WP_REST_Response The response. + */ + public function index_term_links() { + return $this->run_indexation_action( $this->term_link_indexing_action, self::FULL_TERM_LINKS_INDEXING_ROUTE ); + } + + /** + * Prepares the indexation. + * + * @return WP_REST_Response The response. + */ + public function prepare() { + $this->prepare_indexing_action->prepare(); + + return $this->respond_with( [], false ); + } + + /** + * Completes the indexable indexation. + * + * @return WP_REST_Response The response. + */ + public function indexables_complete() { + $this->indexable_indexing_complete_action->complete(); + + return $this->respond_with( [], false ); + } + + /** + * Completes the indexation. + * + * @return WP_REST_Response The response. + */ + public function complete() { + $this->indexing_complete_action->complete(); + + return $this->respond_with( [], false ); + } + + /** + * Whether or not the current user is allowed to index. + * + * @return bool Whether or not the current user is allowed to index. + */ + public function can_index() { + return \current_user_can( 'edit_posts' ); + } + + /** + * Runs an indexing action and returns the response. + * + * @param Indexation_Action_Interface $indexation_action The indexing action. + * @param string $url The url of the indexing route. + * + * @return WP_REST_Response|WP_Error The response, or an error when running the indexing action failed. + */ + protected function run_indexation_action( Indexation_Action_Interface $indexation_action, $url ) { + try { + return parent::run_indexation_action( $indexation_action, $url ); + } catch ( Exception $exception ) { + $this->indexing_helper->indexing_failed(); + + return new WP_Error( + 'wpseo_error_indexing', + $exception->getMessage(), + [ 'stackTrace' => $exception->getTraceAsString() ] + ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/integrations-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/integrations-route.php new file mode 100644 index 00000000..37aa3055 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/integrations-route.php @@ -0,0 +1,103 @@ +integrations_action = $integrations_action; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $set_active_route = [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_integration_active' ], + 'permission_callback' => [ $this, 'can_manage_options' ], + 'args' => [ + 'active' => [ + 'type' => 'boolean', + 'required' => true, + ], + 'integration' => [ + 'type' => 'string', + 'required' => true, + ], + ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::INTEGRATIONS_ROUTE . self::SET_ACTIVE_ROUTE, $set_active_route ); + } + + /** + * Checks if the current user has the right capability. + * + * @return bool + */ + public function can_manage_options() { + return \current_user_can( 'wpseo_manage_options' ); + } + + /** + * Sets integration state. + * + * @param WP_REST_Request $request The request. + * + * @return WP_REST_Response + */ + public function set_integration_active( WP_REST_Request $request ) { + $params = $request->get_json_params(); + $integration_name = $params['integration']; + $value = $params['active']; + + $data = $this + ->integrations_action + ->set_integration_active( $integration_name, $value ); + + return new WP_REST_Response( + [ 'json' => $data ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/meta-search-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/meta-search-route.php new file mode 100644 index 00000000..517b0efb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/meta-search-route.php @@ -0,0 +1,98 @@ + 'GET', + 'callback' => [ $this, 'search_meta' ], + 'permission_callback' => [ $this, 'permission_check' ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::META_SEARCH_ROUTE, $route ); + } + + /** + * Performs the permission check. + * + * @param WP_REST_Request $request The request. + * + * @return bool + */ + public function permission_check( $request ) { + if ( ! isset( $request['post_id'] ) ) { + return false; + } + + $post_type = \get_post_type( $request['post_id'] ); + $post_type_object = \get_post_type_object( $post_type ); + + return \current_user_can( $post_type_object->cap->edit_posts ); + } + + /** + * Searches meta fields of a given post. + * + * @param WP_REST_Request $request The REST request. + * + * @return WP_REST_Response + */ + public function search_meta( $request ) { + $post_id = $request['post_id']; + $query = $request['query']; + $meta = \get_post_custom( $post_id ); + $matches = []; + + foreach ( $meta as $key => $values ) { + if ( \substr( $key, 0, \strlen( $query ) ) !== $query ) { + continue; + } + + if ( empty( $query ) && \substr( $key, 0, 1 ) === '_' ) { + continue; + } + + // Skip custom field values that are serialized. + if ( \is_serialized( $values[0] ) ) { + continue; + } + + $matches[] = [ + 'key' => $key, + 'value' => $values[0], + ]; + + if ( \count( $matches ) >= 25 ) { + break; + } + } + + return \rest_ensure_response( [ 'meta' => $matches ] ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/route-interface.php b/wp/wp-content/plugins/wordpress-seo/src/routes/route-interface.php new file mode 100644 index 00000000..12447ee9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/route-interface.php @@ -0,0 +1,18 @@ +login_action = $login_action; + $this->options_action = $options_action; + $this->phrases_action = $phrases_action; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $authentication_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'authenticate' ], + 'permission_callback' => [ $this, 'can_use_semrush' ], + 'args' => [ + 'code' => [ + 'validate_callback' => [ $this, 'has_valid_code' ], + 'required' => true, + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::AUTHENTICATION_ROUTE, $authentication_route_args ); + + $set_country_code_option_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_country_code_option' ], + 'permission_callback' => [ $this, 'can_use_semrush' ], + 'args' => [ + 'country_code' => [ + 'validate_callback' => [ $this, 'has_valid_country_code' ], + 'required' => true, + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::COUNTRY_CODE_OPTION_ROUTE, $set_country_code_option_route_args ); + + $related_keyphrases_route_args = [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_related_keyphrases' ], + 'permission_callback' => [ $this, 'can_use_semrush' ], + 'args' => [ + 'keyphrase' => [ + 'validate_callback' => [ $this, 'has_valid_keyphrase' ], + 'required' => true, + ], + 'country_code' => [ + 'required' => true, + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::RELATED_KEYPHRASES_ROUTE, $related_keyphrases_route_args ); + } + + /** + * Authenticates with SEMrush. + * + * @param WP_REST_Request $request The request. This request should have a code param set. + * + * @return WP_REST_Response The response. + */ + public function authenticate( WP_REST_Request $request ) { + $data = $this + ->login_action + ->authenticate( $request['code'] ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Sets the SEMrush country code option. + * + * @param WP_REST_Request $request The request. This request should have a country code param set. + * + * @return WP_REST_Response The response. + */ + public function set_country_code_option( WP_REST_Request $request ) { + $data = $this + ->options_action + ->set_country_code( $request['country_code'] ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Checks if a valid code was returned. + * + * @param string $code The code to check. + * + * @return bool Whether or not the code is valid. + */ + public function has_valid_code( $code ) { + return $code !== ''; + } + + /** + * Checks if a valid keyphrase is provided. + * + * @param string $keyphrase The keyphrase to check. + * + * @return bool Whether or not the keyphrase is valid. + */ + public function has_valid_keyphrase( $keyphrase ) { + return \trim( $keyphrase ) !== ''; + } + + /** + * Gets the related keyphrases based on the passed keyphrase and database code. + * + * @param WP_REST_Request $request The request. This request should have a keyphrase and country_code param set. + * + * @return WP_REST_Response The response. + */ + public function get_related_keyphrases( WP_REST_Request $request ) { + $data = $this + ->phrases_action + ->get_related_keyphrases( + $request['keyphrase'], + $request['country_code'] + ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Checks if a valid country code was submitted. + * + * @param string $country_code The country code to check. + * + * @return bool Whether or not the country code is valid. + */ + public function has_valid_country_code( $country_code ) { + return ( $country_code !== '' && \preg_match( '/^[a-z]{2}$/', $country_code ) === 1 ); + } + + /** + * Whether or not the current user is allowed to edit post/pages and thus use the SEMrush integration. + * + * @return bool Whether or not the current user is allowed to use SEMrush. + */ + public function can_use_semrush() { + return \current_user_can( 'edit_posts' ) || \current_user_can( 'edit_pages' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/supported-features-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/supported-features-route.php new file mode 100644 index 00000000..dd19898e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/supported-features-route.php @@ -0,0 +1,59 @@ + 'GET', + 'callback' => [ $this, 'get_supported_features' ], + 'permission_callback' => '__return_true', + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::SUPPORTED_FEATURES_ROUTE, $supported_features_route ); + } + + /** + * Returns a list of features supported by this yoast seo installation. + * + * @return WP_REST_Response a list of features supported by this yoast seo installation. + */ + public function get_supported_features() { + return new WP_REST_Response( + [ + 'addon-installation' => 1, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/wincher-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/wincher-route.php new file mode 100644 index 00000000..1c941502 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/wincher-route.php @@ -0,0 +1,331 @@ +login_action = $login_action; + $this->account_action = $account_action; + $this->keyphrases_action = $keyphrases_action; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $authorize_route_args = [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_authorization_url' ], + 'permission_callback' => [ $this, 'can_use_wincher' ], + ]; + \register_rest_route( Main::API_V1_NAMESPACE, self::AUTHORIZATION_URL_ROUTE, $authorize_route_args ); + + $authentication_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'authenticate' ], + 'permission_callback' => [ $this, 'can_use_wincher' ], + 'args' => [ + 'code' => [ + 'validate_callback' => [ $this, 'has_valid_code' ], + 'required' => true, + ], + 'websiteId' => [ + 'validate_callback' => [ $this, 'has_valid_website_id' ], + 'required' => true, + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::AUTHENTICATION_ROUTE, $authentication_route_args ); + + $track_keyphrases_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'track_keyphrases' ], + 'permission_callback' => [ $this, 'can_use_wincher' ], + 'args' => [ + 'keyphrases' => [ + 'required' => true, + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::KEYPHRASES_TRACK_ROUTE, $track_keyphrases_route_args ); + + $get_keyphrases_route_args = [ + 'methods' => 'POST', + 'callback' => [ $this, 'get_tracked_keyphrases' ], + 'permission_callback' => [ $this, 'can_use_wincher' ], + 'args' => [ + 'keyphrases' => [ + 'required' => false, + ], + 'permalink' => [ + 'required' => false, + ], + 'startAt' => [ + 'required' => false, + ], + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::TRACKED_KEYPHRASES_ROUTE, $get_keyphrases_route_args ); + + $delete_keyphrase_route_args = [ + 'methods' => 'DELETE', + 'callback' => [ $this, 'untrack_keyphrase' ], + 'permission_callback' => [ $this, 'can_use_wincher' ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::UNTRACK_KEYPHRASE_ROUTE, $delete_keyphrase_route_args ); + + $check_limit_route_args = [ + 'methods' => 'GET', + 'callback' => [ $this, 'check_limit' ], + 'permission_callback' => [ $this, 'can_use_wincher' ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::CHECK_LIMIT_ROUTE, $check_limit_route_args ); + + $get_upgrade_campaign_route_args = [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_upgrade_campaign' ], + 'permission_callback' => [ $this, 'can_use_wincher' ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::UPGRADE_CAMPAIGN_ROUTE, $get_upgrade_campaign_route_args ); + } + + /** + * Returns the authorization URL. + * + * @return WP_REST_Response The response. + */ + public function get_authorization_url() { + $data = $this->login_action->get_authorization_url(); + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Authenticates with Wincher. + * + * @param WP_REST_Request $request The request. This request should have a code param set. + * + * @return WP_REST_Response The response. + */ + public function authenticate( WP_REST_Request $request ) { + $data = $this + ->login_action + ->authenticate( $request['code'], (string) $request['websiteId'] ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Posts keyphrases to track. + * + * @param WP_REST_Request $request The request. This request should have a code param set. + * + * @return WP_REST_Response The response. + */ + public function track_keyphrases( WP_REST_Request $request ) { + $limits = $this->account_action->check_limit(); + + if ( $limits->status !== 200 ) { + return new WP_REST_Response( $limits, $limits->status ); + } + + $data = $this->keyphrases_action->track_keyphrases( $request['keyphrases'], $limits ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Gets the tracked keyphrases via POST. + * This is done via POST, so we don't potentially run into URL limit issues when a lot of long keyphrases are tracked. + * + * @param WP_REST_Request $request The request. This request should have a code param set. + * + * @return WP_REST_Response The response. + */ + public function get_tracked_keyphrases( WP_REST_Request $request ) { + $data = $this->keyphrases_action->get_tracked_keyphrases( $request['keyphrases'], $request['permalink'], $request['startAt'] ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Untracks the tracked keyphrase. + * + * @param WP_REST_Request $request The request. This request should have a code param set. + * + * @return WP_REST_Response The response. + */ + public function untrack_keyphrase( WP_REST_Request $request ) { + $data = $this->keyphrases_action->untrack_keyphrase( $request['keyphraseID'] ); + + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Checks the account limit. + * + * @return WP_REST_Response The response. + */ + public function check_limit() { + $data = $this->account_action->check_limit(); + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Gets the upgrade campaign. + * If it's not a free user, no campaign is returned. + * + * @return WP_REST_Response The response. + */ + public function get_upgrade_campaign() { + $data = $this->account_action->get_upgrade_campaign(); + return new WP_REST_Response( $data, $data->status ); + } + + /** + * Checks if a valid code was returned. + * + * @param string $code The code to check. + * + * @return bool Whether the code is valid. + */ + public function has_valid_code( $code ) { + return $code !== ''; + } + + /** + * Checks if a valid website_id was returned. + * + * @param int $website_id The website_id to check. + * + * @return bool Whether the website_id is valid. + */ + public function has_valid_website_id( $website_id ) { + return ! empty( $website_id ) && \is_int( $website_id ); + } + + /** + * Whether the current user is allowed to publish post/pages and thus use the Wincher integration. + * + * @return bool Whether the current user is allowed to use Wincher. + */ + public function can_use_wincher() { + return \current_user_can( 'publish_posts' ) || \current_user_can( 'publish_pages' ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/workouts-route.php b/wp/wp-content/plugins/wordpress-seo/src/routes/workouts-route.php new file mode 100644 index 00000000..2181380f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/workouts-route.php @@ -0,0 +1,129 @@ +options_helper = $options_helper; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $edit_others_posts = static function () { + return \current_user_can( 'edit_others_posts' ); + }; + + $workouts_route = [ + [ + 'methods' => 'GET', + 'callback' => [ $this, 'get_workouts' ], + 'permission_callback' => $edit_others_posts, + ], + [ + 'methods' => 'POST', + 'callback' => [ $this, 'set_workouts' ], + 'permission_callback' => $edit_others_posts, + 'args' => $this->get_workouts_routes_args(), + ], + ]; + + \register_rest_route( Main::API_V1_NAMESPACE, self::WORKOUTS_ROUTE, $workouts_route ); + } + + /** + * Returns the workouts as configured for the site. + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function get_workouts() { + $workouts_option = $this->options_helper->get( 'workouts_data' ); + + /** + * Filter: 'Yoast\WP\SEO\workouts_options' - Allows adding workouts options by the add-ons. + * + * @param array $workouts_option The content of the `workouts_data` option in Free. + */ + $workouts_option = \apply_filters( 'Yoast\WP\SEO\workouts_options', $workouts_option ); + + return new WP_REST_Response( + [ 'json' => $workouts_option ] + ); + } + + /** + * Sets the workout configuration. + * + * @param WP_REST_Request $request The request object. + * + * @return WP_REST_Response the configuration of the workouts. + */ + public function set_workouts( $request ) { + $workouts_data = $request->get_json_params(); + + /** + * Filter: 'Yoast\WP\SEO\workouts_route_save' - Allows the add-ons to save the options data in their own options. + * + * @param mixed|null $result The result of the previous saving operation. + * + * @param array $workouts_data The full set of workouts option data to save. + */ + $result = \apply_filters( 'Yoast\WP\SEO\workouts_route_save', null, $workouts_data ); + + return new WP_REST_Response( + [ 'json' => $result ] + ); + } + + /** + * Gets the args for all the registered workouts. + * + * @return array + */ + private function get_workouts_routes_args() { + $args_array = []; + + /** + * Filter: 'Yoast\WP\SEO\workouts_route_args' - Allows the add-ons add their own arguments to the route registration. + * + * @param array $args_array The array of arguments for the route registration. + */ + return \apply_filters( 'Yoast\WP\SEO\workouts_route_args', $args_array ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/routes/yoast-head-rest-field.php b/wp/wp-content/plugins/wordpress-seo/src/routes/yoast-head-rest-field.php new file mode 100644 index 00000000..56522ff2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/routes/yoast-head-rest-field.php @@ -0,0 +1,223 @@ +post_type_helper = $post_type_helper; + $this->taxonomy_helper = $taxonomy_helper; + $this->post_helper = $post_helper; + $this->head_action = $head_action; + } + + /** + * Registers routes with WordPress. + * + * @return void + */ + public function register_routes() { + $public_post_types = $this->post_type_helper->get_indexable_post_types(); + + foreach ( $public_post_types as $post_type ) { + $this->register_rest_fields( $post_type, 'for_post' ); + } + + $public_taxonomies = $this->taxonomy_helper->get_indexable_taxonomies(); + + foreach ( $public_taxonomies as $taxonomy ) { + if ( $taxonomy === 'post_tag' ) { + $taxonomy = 'tag'; + } + $this->register_rest_fields( $taxonomy, 'for_term' ); + } + + $this->register_rest_fields( 'user', 'for_author' ); + $this->register_rest_fields( 'type', 'for_post_type_archive' ); + } + + /** + * Returns the head for a post. + * + * @param array $params The rest request params. + * @param string $format The desired output format. + * + * @return string|null The head. + */ + public function for_post( $params, $format = self::YOAST_HEAD_ATTRIBUTE_NAME ) { + if ( ! isset( $params['id'] ) ) { + return null; + } + + if ( ! $this->post_helper->is_post_indexable( $params['id'] ) ) { + return null; + } + $obj = $this->head_action->for_post( $params['id'] ); + + return $this->render_object( $obj, $format ); + } + + /** + * Returns the head for a term. + * + * @param array $params The rest request params. + * @param string $format The desired output format. + * + * @return string|null The head. + */ + public function for_term( $params, $format = self::YOAST_HEAD_ATTRIBUTE_NAME ) { + $obj = $this->head_action->for_term( $params['id'] ); + + return $this->render_object( $obj, $format ); + } + + /** + * Returns the head for an author. + * + * @param array $params The rest request params. + * @param string $format The desired output format. + * + * @return string|null The head. + */ + public function for_author( $params, $format = self::YOAST_HEAD_ATTRIBUTE_NAME ) { + $obj = $this->head_action->for_author( $params['id'] ); + + return $this->render_object( $obj, $format ); + } + + /** + * Returns the head for a post type archive. + * + * @param array $params The rest request params. + * @param string $format The desired output format. + * + * @return string|null The head. + */ + public function for_post_type_archive( $params, $format = self::YOAST_HEAD_ATTRIBUTE_NAME ) { + if ( $params['slug'] === 'post' ) { + $obj = $this->head_action->for_posts_page(); + } + elseif ( ! $this->post_type_helper->has_archive( $params['slug'] ) ) { + return null; + } + else { + $obj = $this->head_action->for_post_type_archive( $params['slug'] ); + } + + return $this->render_object( $obj, $format ); + } + + /** + * Registers the Yoast rest fields. + * + * @param string $object_type The object type. + * @param string $callback The function name of the callback. + * + * @return void + */ + protected function register_rest_fields( $object_type, $callback ) { + // Output metadata in page head meta tags. + \register_rest_field( $object_type, self::YOAST_HEAD_ATTRIBUTE_NAME, [ 'get_callback' => [ $this, $callback ] ] ); + // Output metadata in a json object in a head meta tag. + \register_rest_field( $object_type, self::YOAST_JSON_HEAD_ATTRIBUTE_NAME, [ 'get_callback' => [ $this, $callback ] ] ); + } + + /** + * Returns the correct property for the Yoast head. + * + * @param stdObject $head The Yoast head. + * @param string $format The format to return. + * + * @return string|array|null The output value. String if HTML was requested, array otherwise. + */ + protected function render_object( $head, $format = self::YOAST_HEAD_ATTRIBUTE_NAME ) { + if ( $head->status === 404 ) { + return null; + } + + switch ( $format ) { + case self::YOAST_HEAD_ATTRIBUTE_NAME: + return $head->html; + case self::YOAST_JSON_HEAD_ATTRIBUTE_NAME: + return $head->json; + } + + return null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-check.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-check.php new file mode 100644 index 00000000..50943f66 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-check.php @@ -0,0 +1,62 @@ +runner = $runner; + $this->reports = $reports; + $this->reports->set_test_identifier( $this->get_test_identifier() ); + + $this->set_runner( $this->runner ); + } + + /** + * Returns a human-readable label for this health check. + * + * @return string The human-readable label. + */ + public function get_test_label() { + return \__( 'Default tagline', 'wordpress-seo' ); + } + + /** + * Returns the WordPress-friendly health check result. + * + * @return string[] The WordPress-friendly health check result. + */ + protected function get_result() { + if ( $this->runner->is_successful() ) { + return $this->reports->get_success_result(); + } + + return $this->reports->get_has_default_tagline_result(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-reports.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-reports.php new file mode 100644 index 00000000..413b0689 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-reports.php @@ -0,0 +1,68 @@ +report_builder_factory = $report_builder_factory; + } + + /** + * Returns the message for a successful health check. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_success_result() { + return $this->get_report_builder() + ->set_label( \__( 'You changed the default WordPress tagline', 'wordpress-seo' ) ) + ->set_status_good() + ->set_description( \__( 'You are using a custom tagline or an empty one.', 'wordpress-seo' ) ) + ->build(); + } + + /** + * Returns the message for a failed health check. In this case, when the user still has the default WordPress tagline set. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_has_default_tagline_result() { + return $this->get_report_builder() + ->set_label( \__( 'You should change the default WordPress tagline', 'wordpress-seo' ) ) + ->set_status_recommended() + ->set_description( \__( 'You still have the default WordPress tagline. Even an empty one is probably better.', 'wordpress-seo' ) ) + ->set_actions( $this->get_actions() ) + ->build(); + } + + /** + * Returns the actions that the user should take when his tagline is still set to the WordPress default. + * + * @return string The actions as an HTML string. + */ + private function get_actions() { + $query_args = [ + 'autofocus[control]' => 'blogdescription', + ]; + $customize_url = \add_query_arg( $query_args, \wp_customize_url() ); + + return \sprintf( + /* translators: 1: link open tag; 2: link close tag. */ + \esc_html__( '%1$sYou can change the tagline in the customizer%2$s.', 'wordpress-seo' ), + '', + '' + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-runner.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-runner.php new file mode 100644 index 00000000..2e86d5cc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/default-tagline-runner.php @@ -0,0 +1,44 @@ +has_default_tagline = $translated_blog_description === $blog_description || $blog_description === self::DEFAULT_BLOG_DESCRIPTION; + } + + /** + * Returns true if the tagline is set to a non-default tagline. + * + * @return bool The boolean indicating if the health check was succesful. + */ + public function is_successful() { + return ! $this->has_default_tagline; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/health-check.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/health-check.php new file mode 100644 index 00000000..114cfa19 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/health-check.php @@ -0,0 +1,76 @@ +runner = $runner; + } + + /** + * Returns the identifier of health check implementation. WordPress needs this to manage the health check (https://developer.wordpress.org/reference/hooks/site_status_tests/). + * + * @return string The identifier that WordPress requires. + */ + public function get_test_identifier() { + $full_class_name = static::class; + $class_name_backslash_index = \strrpos( $full_class_name, '\\' ); + + $class_name = $full_class_name; + if ( $class_name_backslash_index ) { + $class_name_index = ( $class_name_backslash_index + 1 ); + $class_name = \substr( $full_class_name, $class_name_index ); + } + + $lowercase = \strtolower( $class_name ); + $whitespace_as_dashes = \str_replace( '_', '-', $lowercase ); + $with_prefix = self::TEST_IDENTIFIER_PREFIX . $whitespace_as_dashes; + return $with_prefix; + } + + /** + * Returns the name of health check implementation that the user can see. WordPress needs this to manage the health check (https://developer.wordpress.org/reference/hooks/site_status_tests/). + * + * @return string A human-readable label for the health check. + */ + abstract public function get_test_label(); + + /** + * Runs the health check, and returns its result in the format that WordPress requires to show the results to the user (https://developer.wordpress.org/reference/hooks/site_status_test_result/). + * + * @return string[] The array containing a WordPress site status report. + */ + public function run_and_get_result() { + $this->runner->run(); + return $this->get_result(); + } + + /** + * Gets the result from the health check implementation. + * + * @return string[] The array containing a WordPress site status report. + */ + abstract protected function get_result(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-check.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-check.php new file mode 100644 index 00000000..cce9b914 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-check.php @@ -0,0 +1,66 @@ +runner = $runner; + $this->reports = $reports; + $this->reports->set_test_identifier( $this->get_test_identifier() ); + + $this->set_runner( $this->runner ); + } + + /** + * Returns a human-readable label for this health check. + * + * @return string The human-readable label. + */ + public function get_test_label() { + return \__( 'Links table', 'wordpress-seo' ); + } + + /** + * Returns the WordPress-friendly health check result. + * + * @return string[] The WordPress-friendly health check result. + */ + protected function get_result() { + if ( ! $this->runner->should_run() ) { + return []; + } + + if ( $this->runner->is_successful() ) { + return $this->reports->get_success_result(); + } + + return $this->reports->get_links_table_not_accessible_result(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-reports.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-reports.php new file mode 100644 index 00000000..1e71e23b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-reports.php @@ -0,0 +1,105 @@ +report_builder_factory = $report_builder_factory; + $this->shortlinker = $shortlinker; + } + + /** + * Returns the message for a successful health check. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_success_result() { + return $this->get_report_builder() + ->set_label( \__( 'The text link counter is working as expected', 'wordpress-seo' ) ) + ->set_status_good() + ->set_description( $this->get_success_description() ) + ->build(); + } + + /** + * Returns the message for a failed health check. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_links_table_not_accessible_result() { + return $this->get_report_builder() + ->set_label( \__( 'The text link counter feature is not working as expected', 'wordpress-seo' ) ) + ->set_status_recommended() + ->set_description( $this->get_links_table_not_accessible_description() ) + ->set_actions( $this->get_actions() ) + ->build(); + } + + /** + * Returns the description for when the health check was successful. + * + * @return string The description as a string. + */ + private function get_success_description() { + return \sprintf( + /* translators: 1: Link to the Yoast SEO blog, 2: Link closing tag. */ + \esc_html__( 'The text link counter helps you improve your site structure. %1$sFind out how the text link counter can enhance your SEO%2$s.', 'wordpress-seo' ), + '', + WPSEO_Admin_Utils::get_new_tab_message() . '' + ); + } + + /** + * Returns the description for when the health couldn't access the links table. + * + * @return string The description as a string. + */ + private function get_links_table_not_accessible_description() { + return \sprintf( + /* translators: 1: Yoast SEO. */ + \__( 'For this feature to work, %1$s needs to create a table in your database. We were unable to create this table automatically.', 'wordpress-seo' ), + 'Yoast SEO' + ); + } + + /** + * Returns the actions that the user should take when the links table is not accessible. + * + * @return string The actions as a string. + */ + private function get_actions() { + return \sprintf( + /* translators: 1: Link to the Yoast help center, 2: Link closing tag. */ + \esc_html__( '%1$sFind out how to solve this problem on our help center%2$s.', 'wordpress-seo' ), + '', + WPSEO_Admin_Utils::get_new_tab_message() . '' + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-runner.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-runner.php new file mode 100644 index 00000000..3b328063 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/links-table-runner.php @@ -0,0 +1,84 @@ +migration_status = $migration_status; + $this->options_helper = $options_helper; + } + + /** + * Runs the health check. Checks if the tagline is set to WordPress' default tagline, or to its set translation. + * + * @return void + */ + public function run() { + if ( ! $this->should_run() ) { + return; + } + + $this->links_table_accessible = $this->migration_status->is_version( 'free', \WPSEO_VERSION ); + } + + /** + * Determines whether the health check should run or not. + * + * @return bool True if the text link counter feature is enabled. + */ + public function should_run() { + $text_link_counter_enabled = $this->options_helper->get( 'enable_text_link_counter' ); + + if ( ! \is_bool( $text_link_counter_enabled ) ) { + return false; + } + + return $text_link_counter_enabled; + } + + /** + * Returns true if the links table is accessible + * + * @return bool The boolean indicating if the health check was succesful. + */ + public function is_successful() { + return $this->links_table_accessible; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/myyoast-api-request-factory.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/myyoast-api-request-factory.php new file mode 100644 index 00000000..3f11c9ae --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/myyoast-api-request-factory.php @@ -0,0 +1,22 @@ +runner = $runner; + $this->reports = $reports; + $this->reports->set_test_identifier( $this->get_test_identifier() ); + + $this->set_runner( $this->runner ); + } + + /** + * Returns a human-readable label for this health check. + * + * @return string The human-readable label. + */ + public function get_test_label() { + return \__( 'Page comments', 'wordpress-seo' ); + } + + /** + * Returns the WordPress-friendly health check result. + * + * @return string[] The WordPress-friendly health check result. + */ + protected function get_result() { + if ( $this->runner->is_successful() ) { + return $this->reports->get_success_result(); + } + + return $this->reports->get_has_comments_on_multiple_pages_result(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-reports.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-reports.php new file mode 100644 index 00000000..17812d2c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-reports.php @@ -0,0 +1,63 @@ +report_builder_factory = $report_builder_factory; + } + + /** + * Returns the report for when comments are set to be all on one page. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_success_result() { + return $this->get_report_builder() + ->set_label( \esc_html__( 'Comments are displayed on a single page', 'wordpress-seo' ) ) + ->set_status_good() + ->set_description( \__( 'Comments on your posts are displayed on a single page. This is just like we\'d suggest it. You\'re doing well!', 'wordpress-seo' ) ) + ->build(); + } + + /** + * Returns the report for when comments are set to be broken up across multiple pages. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_has_comments_on_multiple_pages_result() { + return $this->get_report_builder() + ->set_label( \__( 'Comments break into multiple pages', 'wordpress-seo' ) ) + ->set_status_recommended() + ->set_description( \__( 'Comments on your posts break into multiple pages. As this is not needed in 999 out of 1000 cases, we recommend you disable it. To fix this, uncheck "Break comments into pages..." on the Discussion Settings page.', 'wordpress-seo' ) ) + ->set_actions( $this->get_has_comments_on_multiple_pages_actions() ) + ->build(); + } + + /** + * Returns the actions for when the comments are set to be broken up across multiple pages. + * + * @return string The actions as a string. + */ + private function get_has_comments_on_multiple_pages_actions() { + return \sprintf( + /* translators: 1: Opening tag of the link to the discussion settings page, 2: Link closing tag. */ + \esc_html__( '%1$sGo to the Discussion Settings page%2$s', 'wordpress-seo' ), + '', + '' + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-runner.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-runner.php new file mode 100644 index 00000000..3d90a167 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/page-comments-runner.php @@ -0,0 +1,41 @@ +comments_on_single_page = false; + } + + /** + * Runs the health check. Checks if comments are displayed on a single page. + * + * @return void + */ + public function run() { + $this->comments_on_single_page = \get_option( 'page_comments' ) !== '1'; + } + + /** + * Returns true if comments are displayed on a single page. + * + * @return bool True if comments are displayed on a single page. + */ + public function is_successful() { + return $this->comments_on_single_page; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-check.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-check.php new file mode 100644 index 00000000..7a37d100 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-check.php @@ -0,0 +1,62 @@ +runner = $runner; + $this->reports = $reports; + $this->reports->set_test_identifier( $this->get_test_identifier() ); + + $this->set_runner( $this->runner ); + } + + /** + * Returns a human-readable label for this health check. + * + * @return string The human-readable label. + */ + public function get_test_label() { + return \__( 'Postname permalink', 'wordpress-seo' ); + } + + /** + * Returns the WordPress-friendly health check result. + * + * @return string[] The WordPress-friendly health check result. + */ + protected function get_result() { + if ( $this->runner->is_successful() ) { + return $this->reports->get_success_result(); + } + + return $this->reports->get_has_no_postname_in_permalink_result(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-reports.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-reports.php new file mode 100644 index 00000000..6cbe1253 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-reports.php @@ -0,0 +1,76 @@ +report_builder_factory = $report_builder_factory; + } + + /** + * Returns the report for when permalinks are set to contain the post name. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_success_result() { + return $this->get_report_builder() + ->set_label( \esc_html__( 'Your permalink structure includes the post name', 'wordpress-seo' ) ) + ->set_status_good() + ->set_description( \__( 'You do have your postname in the URL of your posts and pages.', 'wordpress-seo' ) ) + ->build(); + } + + /** + * Returns the report for when permalinks are not set to contain the post name. + * + * @return string[] The message as a WordPress site status report. + */ + public function get_has_no_postname_in_permalink_result() { + return $this->get_report_builder() + ->set_label( \__( 'You do not have your postname in the URL of your posts and pages', 'wordpress-seo' ) ) + ->set_status_recommended() + ->set_description( $this->get_has_no_postname_in_permalink_description() ) + ->set_actions( $this->get_has_no_postname_in_permalink_actions() ) + ->build(); + } + + /** + * Returns the description for when permalinks are not set to contain the post name. + * + * @return string The description as a string. + */ + private function get_has_no_postname_in_permalink_description() { + return \sprintf( + /* translators: %s expands to '/%postname%/' */ + \__( 'It\'s highly recommended to have your postname in the URL of your posts and pages. Consider setting your permalink structure to %s.', 'wordpress-seo' ), + '/%postname%/' + ); + } + + /** + * Returns the actions for when permalinks are not set to contain the post name. + * + * @return string The actions as a string. + */ + private function get_has_no_postname_in_permalink_actions() { + return \sprintf( + /* translators: %1$s is a link start tag to the permalink settings page, %2$s is the link closing tag. */ + \__( 'You can fix this on the %1$sPermalink settings page%2$s.', 'wordpress-seo' ), + '', + '' + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-runner.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-runner.php new file mode 100644 index 00000000..a7e40d24 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/postname-permalink-runner.php @@ -0,0 +1,41 @@ +permalinks_contain_postname = false; + } + + /** + * Runs the health check. Checks if permalinks are set to contain the post name. + * + * @return void + */ + public function run() { + $this->permalinks_contain_postname = ( \strpos( \get_option( 'permalink_structure' ), '%postname%' ) !== false ); + } + + /** + * Returns true if permalinks are set to contain the post name. + * + * @return bool True if permalinks are set to contain the post name. + */ + public function is_successful() { + return $this->permalinks_contain_postname; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder-factory.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder-factory.php new file mode 100644 index 00000000..33b130e6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder-factory.php @@ -0,0 +1,20 @@ +set_test_identifier( $test_identifier ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder.php new file mode 100644 index 00000000..1e564661 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/report-builder.php @@ -0,0 +1,207 @@ +label = $label; + return $this; + } + + /** + * Sets the name for the test that the plugin uses to identify the test. + * + * @param string $test_identifier The identifier for the health check. + * @return Report_Builder This builder. + */ + public function set_test_identifier( $test_identifier ) { + $this->test_identifier = $test_identifier; + return $this; + } + + /** + * Sets the status of the test result to GOOD (green label). + * + * @return Report_Builder This builder. + */ + public function set_status_good() { + $this->status = self::STATUS_GOOD; + return $this; + } + + /** + * Sets the status of the test result to RECOMMENDED (orange label). + * + * @return Report_Builder This builder. + */ + public function set_status_recommended() { + $this->status = self::STATUS_RECOMMENDED; + return $this; + } + + /** + * Sets the status of the test result to CRITICAL (red label). + * + * @return Report_Builder This builder. + */ + public function set_status_critical() { + $this->status = self::STATUS_CRITICAL; + return $this; + } + + /** + * Sets a description for the test result. This will be the heading for the result in the user interface. + * + * @param string $description The description for the test result. + * @return Report_Builder This builder. + */ + public function set_description( $description ) { + $this->description = $description; + return $this; + } + + /** + * Sets a text that describes how the user can solve the failed health check. + * + * @param string $actions The descriptive text. + * @return Report_Builder This builder. + */ + public function set_actions( $actions ) { + $this->actions = $actions; + return $this; + } + + /** + * Builds an array of strings in the format that WordPress uses to display health checks (https://developer.wordpress.org/reference/hooks/site_status_test_result/). + * + * @return array The report in WordPress' site status report format. + */ + public function build() { + return [ + 'label' => $this->label, + 'status' => $this->status, + 'badge' => $this->get_badge(), + 'description' => $this->description, + 'actions' => $this->get_actions_with_signature(), + 'test' => $this->test_identifier, + ]; + } + + /** + * Generates a badge that the user can see. + * + * @return string[] The badge. + */ + private function get_badge() { + return [ + 'label' => $this->get_badge_label(), + 'color' => $this->get_badge_color(), + ]; + } + + /** + * Generates the label for a badge. + * + * @return string The badge label. + */ + private function get_badge_label() { + return \__( 'SEO', 'wordpress-seo' ); + } + + /** + * Generates the color for the badge using the current status. + * + * @return string The color for the badge's outline. + */ + private function get_badge_color() { + if ( $this->status === self::STATUS_CRITICAL || $this->status === self::STATUS_RECOMMENDED ) { + return 'red'; + } + + return 'blue'; + } + + /** + * Concatenates the set actions with Yoast's signature. + * + * @return string A string containing the set actions and Yoast's signature. + */ + private function get_actions_with_signature() { + return $this->actions . $this->get_signature(); + } + + /** + * Generates Yoast's signature that's displayed at the bottom of the health check result. + * + * @return string Yoast's signature as an HTML string. + */ + private function get_signature() { + return \sprintf( + /* translators: 1: Start of a paragraph beginning with the Yoast icon, 2: Expands to 'Yoast SEO', 3: Paragraph closing tag. */ + \esc_html__( '%1$sThis was reported by the %2$s plugin%3$s', 'wordpress-seo' ), + '

            ', + 'Yoast SEO', + '

            ' + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/reports-trait.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/reports-trait.php new file mode 100644 index 00000000..ae2680f8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/reports-trait.php @@ -0,0 +1,42 @@ +test_identifier = $test_identifier; + } + + /** + * Returns a new Report_Builder instance using the set test identifier. + * + * @return Report_Builder + */ + private function get_report_builder() { + return $this->report_builder_factory->create( $this->test_identifier ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/health-check/runner-interface.php b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/runner-interface.php new file mode 100644 index 00000000..847ff36b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/health-check/runner-interface.php @@ -0,0 +1,16 @@ + '%%archive_title%%', + '#archive_date' => '%%date%%', + '#attachment_caption' => '%%caption%%', + '#author_bio' => '%%user_description%%', + '#author_first_name' => '%%author_first_name%%', + '#author_last_name' => '%%author_last_name%%', + '#author_name' => '%%name%%', + '#blog_title' => '%%sitename%%', // Same with #site_title. + '#categories' => '%%category%%', + '#current_date' => '%%currentdate%%', + '#current_day' => '%%currentday%%', + '#current_month' => '%%currentmonth%%', + '#current_year' => '%%currentyear%%', + '#parent_title' => '%%parent_title%%', + '#page_number' => '%%pagenumber%%', + '#permalink' => '%%permalink%%', + '#post_content' => '%%post_content%%', + '#post_date' => '%%date%%', + '#post_day' => '%%post_day%%', + '#post_month' => '%%post_month%%', + '#post_title' => '%%title%%', + '#post_year' => '%%post_year%%', + '#post_excerpt_only' => '%%excerpt_only%%', + '#post_excerpt' => '%%excerpt%%', + '#search_term' => '%%searchphrase%%', + '#separator_sa' => '%%sep%%', + '#site_title' => '%%sitename%%', + '#tagline' => '%%sitedesc%%', + '#taxonomy_title' => '%%category_title%%', + '#taxonomy_description' => '%%term_description%%', + ]; + + /** + * Edits the replace_vars map of the class. + * + * @param string $aioseo_var The AIOSEO replacevar. + * @param string $yoast_var The Yoast replacevar. + * + * @return void + */ + public function compose_map( $aioseo_var, $yoast_var ) { + $map = $this->replace_vars_map; + + $map[ $aioseo_var ] = $yoast_var; + + $this->replace_vars_map = $map; + } + + /** + * Transforms AIOSEO replacevars into Yoast replacevars. + * + * @param string $aioseo_replacevar The AIOSEO replacevar. + * + * @return string The Yoast replacevar. + */ + public function transform( $aioseo_replacevar ) { + $yoast_replacevar = \str_replace( \array_keys( $this->replace_vars_map ), \array_values( $this->replace_vars_map ), $aioseo_replacevar ); + + // Transform the '#custom_field-' tags into '%%cf_%%' ones. + $yoast_replacevar = \preg_replace_callback( + '/#custom_field-([a-zA-Z0-9_-]+)/', + static function ( $cf_matches ) { + return '%%cf_' . $cf_matches[1] . '%%'; + }, + $yoast_replacevar + ); + + // Transform the '#tax_name-' tags into '%%ct_%%' ones. + $yoast_replacevar = \preg_replace_callback( + '/#tax_name-([a-zA-Z0-9_-]+)/', + static function ( $ct_matches ) { + return '%%ct_' . $ct_matches[1] . '%%'; + }, + $yoast_replacevar + ); + + return $yoast_replacevar; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-provider-service.php b/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-provider-service.php new file mode 100644 index 00000000..d36259ec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-provider-service.php @@ -0,0 +1,64 @@ +aioseo_helper = $aioseo_helper; + } + + /** + * Retrieves the robot setting set globally in AIOSEO. + * + * @param string $setting_name The name of the robot setting, eg. noindex. + * + * @return bool Whether global robot settings enable or not the specific setting. + */ + public function get_global_robot_settings( $setting_name ) { + $aioseo_settings = $this->aioseo_helper->get_global_option(); + if ( empty( $aioseo_settings ) ) { + return false; + } + + $global_robot_settings = $aioseo_settings['searchAppearance']['advanced']['globalRobotsMeta']; + if ( $global_robot_settings['default'] === true ) { + return false; + } + + return $global_robot_settings[ $setting_name ]; + } + + /** + * Gets the subtype's robot setting from the db. + * + * @param array $mapping The mapping of the setting we're working with. + * + * @return bool The robot setting. + */ + public function get_subtype_robot_setting( $mapping ) { + $aioseo_settings = \json_decode( \get_option( $mapping['option_name'], '' ), true ); + + return $aioseo_settings['searchAppearance'][ $mapping['type'] ][ $mapping['subtype'] ]['advanced']['robotsMeta'][ $mapping['robot_type'] ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-transformer-service.php b/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-transformer-service.php new file mode 100644 index 00000000..6906a268 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-robots-transformer-service.php @@ -0,0 +1,54 @@ +robots_provider = $robots_provider; + } + + /** + * Transforms the robot setting, taking into consideration whether they defer to global defaults. + * + * @param string $setting_name The name of the robot setting, eg. noindex. + * @param bool $setting_value The value of the robot setting. + * @param array $mapping The mapping of the setting we're working with. + * + * @return bool The transformed robot setting. + */ + public function transform_robot_setting( $setting_name, $setting_value, $mapping ) { + $aioseo_settings = \json_decode( \get_option( $mapping['option_name'], '' ), true ); + + // Let's check first if it defers to global robot settings. + if ( empty( $aioseo_settings ) || ! isset( $aioseo_settings['searchAppearance'][ $mapping['type'] ][ $mapping['subtype'] ]['advanced']['robotsMeta']['default'] ) ) { + return $setting_value; + } + + $defers_to_defaults = $aioseo_settings['searchAppearance'][ $mapping['type'] ][ $mapping['subtype'] ]['advanced']['robotsMeta']['default']; + + if ( $defers_to_defaults ) { + return $this->robots_provider->get_global_robot_settings( $setting_name ); + } + + return $setting_value; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-social-images-provider-service.php b/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-social-images-provider-service.php new file mode 100644 index 00000000..15fef18a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/importing/aioseo/aioseo-social-images-provider-service.php @@ -0,0 +1,175 @@ +aioseo_helper = $aioseo_helper; + $this->image = $image; + } + + /** + * Retrieves the default source of social images. + * + * @param string $social_setting The social settings we're working with, eg. open-graph or twitter. + * + * @return string The default source of social images. + */ + public function get_default_social_image_source( $social_setting ) { + return $this->get_social_defaults( 'source', $social_setting ); + } + + /** + * Retrieves the default custom social image if there is any. + * + * @param string $social_setting The social settings we're working with, eg. open-graph or twitter. + * + * @return string The global default social image. + */ + public function get_default_custom_social_image( $social_setting ) { + return $this->get_social_defaults( 'custom_image', $social_setting ); + } + + /** + * Retrieves social defaults, be it Default Post Image Source or Default Post Image. + * + * @param string $setting The setting we want, eg. source or custom image. + * @param string $social_setting The social settings we're working with, eg. open-graph or twitter. + * + * @return string The social default. + */ + public function get_social_defaults( $setting, $social_setting ) { + switch ( $setting ) { + case 'source': + $setting_key = 'defaultImageSourcePosts'; + break; + case 'custom_image': + $setting_key = 'defaultImagePosts'; + break; + default: + return ''; + } + + $aioseo_settings = $this->aioseo_helper->get_global_option(); + + if ( $social_setting === 'og' ) { + $social_setting = 'facebook'; + } + + if ( ! isset( $aioseo_settings['social'][ $social_setting ]['general'][ $setting_key ] ) ) { + return ''; + } + + return $aioseo_settings['social'][ $social_setting ]['general'][ $setting_key ]; + } + + /** + * Retrieves the url of the first image in content. + * + * @param int $post_id The post id to extract the image from. + * + * @return string The url of the first image in content. + */ + public function get_first_image_in_content( $post_id ) { + $image = $this->image->get_gallery_image( $post_id ); + + if ( ! $image ) { + $image = $this->image->get_post_content_image( $post_id ); + } + + return $image; + } + + /** + * Retrieves the url of the first attached image. + * + * @param int $post_id The post id to extract the image from. + * + * @return string The url of the first attached image. + */ + public function get_first_attached_image( $post_id ) { + if ( \get_post_type( $post_id ) === 'attachment' ) { + return $this->image->get_attachment_image_source( $post_id, 'fullsize' ); + } + + $attachments = \get_children( + [ + 'post_parent' => $post_id, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + ] + ); + + if ( $attachments && ! empty( $attachments ) ) { + return $this->image->get_attachment_image_source( \array_values( $attachments )[0]->ID, 'fullsize' ); + } + + return ''; + } + + /** + * Retrieves the url of the featured image. + * + * @param int $post_id The post id to extract the image from. + * + * @return string The url of the featured image. + */ + public function get_featured_image( $post_id ) { + $feature_image_id = \get_post_thumbnail_id( $post_id ); + + if ( $feature_image_id ) { + return $this->image->get_attachment_image_source( $feature_image_id, 'fullsize' ); + } + + return ''; + } + + /** + * Retrieves the url of the first available image. Tries each image source to get one image. + * + * @param int $post_id The post id to extract the image from. + * + * @return string The url of the featured image. + */ + public function get_auto_image( $post_id ) { + $image = $this->get_first_attached_image( $post_id ); + + if ( ! $image ) { + $image = $this->get_first_image_in_content( $post_id ); + } + + return $image; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/importing/conflicting-plugins-service.php b/wp/wp-content/plugins/wordpress-seo/src/services/importing/conflicting-plugins-service.php new file mode 100644 index 00000000..171fc4f8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/importing/conflicting-plugins-service.php @@ -0,0 +1,103 @@ +get_active_plugins(); + + // Search for active plugins. + return $this->get_active_conflicting_plugins( $all_active_plugins ); + } + + /** + * Deactivates the specified plugin(s) if any, or the entire list of known conflicting plugins. + * + * @param string|array|false $plugins Optional. The plugin filename, or array of plugin filenames, to deactivate. + * + * @return void + */ + public function deactivate_conflicting_plugins( $plugins = false ) { + // If no plugins are specified, deactivate any known conflicting plugins that are active. + if ( ! $plugins ) { + $plugins = $this->detect_conflicting_plugins(); + } + + // In case of a single plugin, wrap it in an array. + if ( \is_string( $plugins ) ) { + $plugins = [ $plugins ]; + } + + if ( ! \is_array( $plugins ) ) { + return; + } + + // Deactivate all specified plugins across the network, while retaining their deactivation hook. + \deactivate_plugins( $plugins ); + } + + /** + * Loop through the list of known conflicting plugins to check if one of the plugins is active. + * + * @param array $all_active_plugins All plugins loaded by WordPress. + * + * @return array The array of activated conflicting plugins. + */ + protected function get_active_conflicting_plugins( $all_active_plugins ) { + $active_conflicting_plugins = []; + + foreach ( Conflicting_Plugins::all_plugins() as $plugin ) { + if ( \in_array( $plugin, $all_active_plugins, true ) ) { + $active_conflicting_plugins[] = $plugin; + } + } + + return $active_conflicting_plugins; + } + + /** + * Get a list of all plugins active in the current WordPress instance. + * + * @return false|array The names of all active plugins. + */ + protected function get_active_plugins() { + // Request a list of active plugins from WordPress. + $all_active_plugins = \get_option( 'active_plugins' ); + + return $this->ignore_deactivating_plugin( $all_active_plugins ); + } + + /** + * While deactivating a plugin, we should ignore the plugin currently being deactivated. + * + * @param array $all_active_plugins All plugins currently loaded by WordPress. + * + * @return array The remaining active plugins. + */ + protected function ignore_deactivating_plugin( $all_active_plugins ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are strictly comparing only. + if ( isset( $_GET['action'] ) && isset( $_GET['plugin'] ) && \is_string( $_GET['action'] ) && \is_string( $_GET['plugin'] ) && \wp_unslash( $_GET['action'] ) === 'deactivate' ) { + $deactivated_plugin = \sanitize_text_field( \wp_unslash( $_GET['plugin'] ) ); + + \check_admin_referer( 'deactivate-plugin_' . $deactivated_plugin ); + + $key_to_remove = \array_search( $deactivated_plugin, $all_active_plugins, true ); + if ( $key_to_remove !== false ) { + unset( $all_active_plugins[ $key_to_remove ] ); + } + } + + return $all_active_plugins; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/importing/importable-detector-service.php b/wp/wp-content/plugins/wordpress-seo/src/services/importing/importable-detector-service.php new file mode 100644 index 00000000..b779b54d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/importing/importable-detector-service.php @@ -0,0 +1,86 @@ +importers = $importers; + } + + /** + * Returns the detected importers that have data to work with. + * + * @param string|null $plugin The plugin name of the importer. + * @param string|null $type The type of the importer. + * + * @return array The detected importers that have data to work with. + */ + public function detect_importers( $plugin = null, $type = null ) { + $detectors = $this->filter_actions( $this->importers, $plugin, $type ); + + $detected = []; + foreach ( $detectors as $detector ) { + if ( $detector->is_enabled() && $detector->get_type() !== 'cleanup' && ! $detector->get_completed() && $detector->get_limited_unindexed_count( 1 ) > 0 ) { + $detected[ $detector->get_plugin() ][] = $detector->get_type(); + } + } + + return $detected; + } + + /** + * Returns the detected cleanups that have data to work with. + * + * @param string|null $plugin The plugin name of the cleanup. + * + * @return array The detected importers that have data to work with. + */ + public function detect_cleanups( $plugin = null ) { + $detectors = $this->filter_actions( $this->importers, $plugin, 'cleanup' ); + + $detected = []; + foreach ( $detectors as $detector ) { + if ( $detector->is_enabled() && ! $detector->get_completed() && $detector->get_limited_unindexed_count( 1 ) > 0 ) { + $detected[ $detector->get_plugin() ][] = $detector->get_type(); + } + } + + return $detected; + } + + /** + * Filters all import actions from a list that do not match the given Plugin or Type. + * + * @param Importing_Action_Interface[] $all_actions The complete list of actions. + * @param string|null $plugin The Plugin name whose actions to keep. + * @param string|null $type The type of actions to keep. + * + * @return array + */ + public function filter_actions( $all_actions, $plugin = null, $type = null ) { + return \array_filter( + $all_actions, + static function ( $action ) use ( $plugin, $type ) { + return $action->is_compatible_with( $plugin, $type ); + } + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/services/indexables/indexable-version-manager.php b/wp/wp-content/plugins/wordpress-seo/src/services/indexables/indexable-version-manager.php new file mode 100644 index 00000000..8d17ce84 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/services/indexables/indexable-version-manager.php @@ -0,0 +1,77 @@ +indexable_builder_versions = $indexable_builder_versions; + } + + /** + * Determines if an Indexable has a lower version than the builder for that Indexable's type. + * + * @param Indexable $indexable The Indexable to check. + * + * @return bool True if the given version is older than the current latest version. + */ + public function indexable_needs_upgrade( $indexable ) { + if ( ( ! $indexable ) + || ( ! \is_a( $indexable, Indexable::class ) ) + ) { + return false; + } + + return $this->needs_upgrade( $indexable->object_type, $indexable->version ); + } + + /** + * Determines if an Indexable version for the type is lower than the current version for that Indexable type. + * + * @param string $object_type The Indexable's object type. + * @param int $indexable_version The Indexable's version. + * + * @return bool True if the given version is older than the current latest version. + */ + protected function needs_upgrade( $object_type, $indexable_version ) { + $current_indexable_builder_version = $this->indexable_builder_versions->get_latest_version_for_type( $object_type ); + + // If the Indexable's version is below the current version, that Indexable needs updating. + return $indexable_version < $current_indexable_builder_version; + } + + /** + * Sets an Indexable's version to the latest version. + * + * @param Indexable $indexable The Indexable to update. + * + * @return Indexable + */ + public function set_latest( $indexable ) { + if ( ! $indexable ) { + return $indexable; + } + + $indexable->version = $this->indexable_builder_versions->get_latest_version_for_type( $indexable->object_type ); + + return $indexable; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/surfaces/classes-surface.php b/wp/wp-content/plugins/wordpress-seo/src/surfaces/classes-surface.php new file mode 100644 index 00000000..8e9e23b2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/surfaces/classes-surface.php @@ -0,0 +1,40 @@ +container = $container; + } + + /** + * Returns the instance of a class. Handy for unhooking things. + * + * @param string $class_name The class to get the instance of. + * + * @return mixed The instance of the class. + */ + public function get( $class_name ) { + return $this->container->get( $class_name ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/surfaces/helpers-surface.php b/wp/wp-content/plugins/wordpress-seo/src/surfaces/helpers-surface.php new file mode 100644 index 00000000..b0e4e753 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/surfaces/helpers-surface.php @@ -0,0 +1,164 @@ +container = $container; + $this->open_graph = $open_graph; + $this->schema = $schema; + $this->twitter = $twitter; + } + + /** + * Magic getter for getting helper classes. + * + * @param string $helper The helper to get. + * + * @return mixed The helper class. + */ + public function __get( $helper ) { + return $this->container->get( $this->get_helper_class( $helper ) ); + } + + /** + * Magic isset for ensuring helper exists. + * + * @param string $helper The helper to get. + * + * @return bool Whether the helper exists. + */ + public function __isset( $helper ) { + return $this->container->has( $this->get_helper_class( $helper ) ); + } + + /** + * Prevents setting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * @param mixed $value The property value. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. + */ + public function __set( $name, $value ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- __set must have a name and value - PHPCS #3715. + throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); + } + + /** + * Prevents unsetting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. + */ + public function __unset( $name ) { + throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); + } + + /** + * Get the class name from a helper slug + * + * @param string $helper The name of the helper. + * + * @return string + */ + protected function get_helper_class( $helper ) { + $helper = \implode( '_', \array_map( 'ucfirst', \explode( '_', $helper ) ) ); + + return "Yoast\WP\SEO\Helpers\\{$helper}_Helper"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/surfaces/meta-surface.php b/wp/wp-content/plugins/wordpress-seo/src/surfaces/meta-surface.php new file mode 100644 index 00000000..bf807156 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/surfaces/meta-surface.php @@ -0,0 +1,388 @@ +container = $container; + $this->context_memoizer = $context_memoizer; + $this->repository = $indexable_repository; + $this->wp_rewrite_wrapper = $wp_rewrite_wrapper; + $this->indexable_helper = $indexable_helper; + } + + /** + * Returns the meta tags context for the current page. + * + * @return Meta The meta values. + */ + public function for_current_page() { + return $this->build_meta( $this->context_memoizer->for_current_page() ); + } + + /** + * Returns the meta tags context for the home page. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_home_page() { + $front_page_id = (int) \get_option( 'page_on_front' ); + if ( \get_option( 'show_on_front' ) === 'page' && $front_page_id !== 0 ) { + $indexable = $this->repository->find_by_id_and_type( $front_page_id, 'post' ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Static_Home_Page' ) ); + } + + $indexable = $this->repository->find_for_home_page(); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Home_Page' ) ); + } + + /** + * Returns the meta tags context for the posts page. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_posts_page() { + $posts_page_id = (int) \get_option( 'page_for_posts' ); + if ( $posts_page_id !== 0 ) { + $indexable = $this->repository->find_by_id_and_type( $posts_page_id, 'post' ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Static_Posts_Page' ) ); + } + + $indexable = $this->repository->find_for_home_page(); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Home_Page' ) ); + } + + /** + * Returns the meta tags context for a post type archive. + * + * @param string|null $post_type Optional. The post type to get the archive meta for. Defaults to the current post type. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_post_type_archive( $post_type = null ) { + if ( $post_type === null ) { + $post_type = \get_post_type(); + } + + $indexable = $this->repository->find_for_post_type_archive( $post_type ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Post_Type_Archive' ) ); + } + + /** + * Returns the meta tags context for the search result page. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_search_result() { + $indexable = $this->repository->find_for_system_page( 'search-result' ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Search_Result_Page' ) ); + } + + /** + * Returns the meta tags context for the search result page. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_404() { + $indexable = $this->repository->find_for_system_page( '404' ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Error_Page' ) ); + } + + /** + * Returns the meta tags context for a post. + * + * @param int $id The ID of the post. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_post( $id ) { + $indexable = $this->repository->find_by_id_and_type( $id, 'post' ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Post_Type' ) ); + } + + /** + * Returns the meta tags context for a number of posts. + * + * @param int[] $ids The IDs of the posts. + * + * @return Meta[]|false The meta values. False if none could be found. + */ + public function for_posts( $ids ) { + $indexables = $this->repository->find_by_multiple_ids_and_type( $ids, 'post' ); + + if ( empty( $indexables ) ) { + return false; + } + + // Remove all false values. + $indexables = \array_filter( $indexables ); + + return \array_map( + function ( $indexable ) { + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Post_Type' ) ); + }, + $indexables + ); + } + + /** + * Returns the meta tags context for a term. + * + * @param int $id The ID of the term. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_term( $id ) { + $indexable = $this->repository->find_by_id_and_type( $id, 'term' ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Term_Archive' ) ); + } + + /** + * Returns the meta tags context for an author. + * + * @param int $id The ID of the author. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_author( $id ) { + $indexable = $this->repository->find_by_id_and_type( $id, 'user' ); + + if ( ! $indexable ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, 'Author_Archive' ) ); + } + + /** + * Returns the meta for an indexable. + * + * @param Indexable $indexable The indexable. + * @param string|null $page_type Optional. The page type if already known. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_indexable( $indexable, $page_type = null ) { + + if ( ! \is_a( $indexable, Indexable::class ) ) { + return false; + } + if ( \is_null( $page_type ) ) { + $page_type = $this->indexable_helper->get_page_type_for_indexable( $indexable ); + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, $page_type ) ); + } + + /** + * Returns the meta for an indexable. + * + * @param Indexable[] $indexables The indexables. + * @param string|null $page_type Optional. The page type if already known. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_indexables( $indexables, $page_type = null ) { + $closure = function ( $indexable ) use ( $page_type ) { + $this_page_type = $page_type; + if ( \is_null( $this_page_type ) ) { + $this_page_type = $this->indexable_helper->get_page_type_for_indexable( $indexable ); + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, $this_page_type ) ); + }; + + return \array_map( $closure, $indexables ); + } + + /** + * Returns the meta tags context for a url. + * + * @param string $url The url of the page. Required to be relative to the site url. + * + * @return Meta|false The meta values. False if none could be found. + */ + public function for_url( $url ) { + $url_parts = \wp_parse_url( $url ); + $site_parts = \wp_parse_url( \site_url() ); + + if ( ( ! \is_array( $url_parts ) || ! \is_array( $site_parts ) ) + || ! isset( $url_parts['host'], $url_parts['path'], $site_parts['host'], $site_parts['scheme'] ) + ) { + return false; + } + + if ( $url_parts['host'] !== $site_parts['host'] ) { + return false; + } + // Ensure the scheme is consistent with values in the DB. + $url = $site_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path']; + + if ( $this->is_date_archive_url( $url ) ) { + $indexable = $this->repository->find_for_date_archive(); + } + else { + $indexable = $this->repository->find_by_permalink( $url ); + } + + // If we still don't have an indexable abort, the WP globals could be anything so we can't use the unknown indexable. + if ( ! $indexable ) { + return false; + } + $page_type = $this->indexable_helper->get_page_type_for_indexable( $indexable ); + + if ( $page_type === false ) { + return false; + } + + return $this->build_meta( $this->context_memoizer->get( $indexable, $page_type ) ); + } + + /** + * Checks if a given URL is a date archive URL. + * + * @param string $url The url. + * + * @return bool + */ + protected function is_date_archive_url( $url ) { + $path = \wp_parse_url( $url, \PHP_URL_PATH ); + if ( $path === null ) { + return false; + } + + $path = \ltrim( $path, '/' ); + $wp_rewrite = $this->wp_rewrite_wrapper->get(); + $date_rewrite = $wp_rewrite->generate_rewrite_rules( $wp_rewrite->get_date_permastruct(), \EP_DATE ); + $date_rewrite = \apply_filters( 'date_rewrite_rules', $date_rewrite ); + + foreach ( (array) $date_rewrite as $match => $query ) { + if ( \preg_match( "#^$match#", $path ) ) { + return true; + } + } + + return false; + } + + /** + * Creates a new meta value object + * + * @param Meta_Tags_Context $context The meta tags context. + * + * @return Meta The meta value + */ + protected function build_meta( Meta_Tags_Context $context ) { + return new Meta( $context, $this->container ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/surfaces/open-graph-helpers-surface.php b/wp/wp-content/plugins/wordpress-seo/src/surfaces/open-graph-helpers-surface.php new file mode 100644 index 00000000..a811070d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/surfaces/open-graph-helpers-surface.php @@ -0,0 +1,96 @@ +container = $container; + } + + /** + * Magic getter for getting helper classes. + * + * @param string $helper The helper to get. + * + * @return mixed The helper class. + */ + public function __get( $helper ) { + return $this->container->get( $this->get_helper_class( $helper ) ); + } + + /** + * Magic isset for ensuring helper exists. + * + * @param string $helper The helper to get. + * + * @return bool Whether the helper exists. + */ + public function __isset( $helper ) { + return $this->container->has( $this->get_helper_class( $helper ) ); + } + + /** + * Prevents setting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * @param mixed $value The property value. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. + */ + public function __set( $name, $value ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- __set must have a name and value - PHPCS #3715. + throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); + } + + /** + * Prevents unsetting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. + */ + public function __unset( $name ) { + throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); + } + + /** + * Get the class name from a helper slug + * + * @param string $helper The name of the helper. + * + * @return string + */ + protected function get_helper_class( $helper ) { + $helper = \implode( '_', \array_map( 'ucfirst', \explode( '_', $helper ) ) ); + return "Yoast\WP\SEO\Helpers\Open_Graph\\{$helper}_Helper"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/surfaces/schema-helpers-surface.php b/wp/wp-content/plugins/wordpress-seo/src/surfaces/schema-helpers-surface.php new file mode 100644 index 00000000..9f99f791 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/surfaces/schema-helpers-surface.php @@ -0,0 +1,110 @@ +container = $container; + } + + /** + * Magic getter for getting helper classes. + * + * @param string $helper The helper to get. + * + * @return mixed The helper class. + */ + public function __get( $helper ) { + return $this->container->get( $this->get_helper_class( $helper ) ); + } + + /** + * Magic isset for ensuring helper exists. + * + * @param string $helper The helper to get. + * + * @return bool Whether the helper exists. + */ + public function __isset( $helper ) { + return $this->container->has( $this->get_helper_class( $helper ) ); + } + + /** + * Prevents setting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * @param mixed $value The property value. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. + */ + public function __set( $name, $value ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- __set must have a name and value - PHPCS #3715. + throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); + } + + /** + * Prevents unsetting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. + */ + public function __unset( $name ) { + throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); + } + + /** + * Get the class name from a helper slug + * + * @param string $helper The name of the helper. + * + * @return string + */ + protected function get_helper_class( $helper ) { + if ( \in_array( $helper, $this->capitalized_helpers, true ) ) { + $helper = \strtoupper( $helper ); + } + $helper = \implode( '_', \array_map( 'ucfirst', \explode( '_', $helper ) ) ); + return "Yoast\WP\SEO\Helpers\Schema\\{$helper}_Helper"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/surfaces/twitter-helpers-surface.php b/wp/wp-content/plugins/wordpress-seo/src/surfaces/twitter-helpers-surface.php new file mode 100644 index 00000000..45852b86 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/surfaces/twitter-helpers-surface.php @@ -0,0 +1,96 @@ +container = $container; + } + + /** + * Magic getter for getting helper classes. + * + * @param string $helper The helper to get. + * + * @return mixed The helper class. + */ + public function __get( $helper ) { + return $this->container->get( $this->get_helper_class( $helper ) ); + } + + /** + * Magic isset for ensuring helper exists. + * + * @param string $helper The helper to get. + * + * @return bool Whether the helper exists. + */ + public function __isset( $helper ) { + return $this->container->has( $this->get_helper_class( $helper ) ); + } + + /** + * Prevents setting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * @param mixed $value The property value. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. + */ + public function __set( $name, $value ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- __set must have a name and value - PHPCS #3715. + throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); + } + + /** + * Prevents unsetting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. + */ + public function __unset( $name ) { + throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); + } + + /** + * Get the class name from a helper slug + * + * @param string $helper The name of the helper. + * + * @return string + */ + protected function get_helper_class( $helper ) { + $helper = \implode( '_', \array_map( 'ucfirst', \explode( '_', $helper ) ) ); + return "Yoast\WP\SEO\Helpers\Twitter\\{$helper}_Helper"; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/surfaces/values/meta.php b/wp/wp-content/plugins/wordpress-seo/src/surfaces/values/meta.php new file mode 100644 index 00000000..485e95d5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/surfaces/values/meta.php @@ -0,0 +1,331 @@ + Key is the property name. + */ + private $properties_bin = []; + + /** + * Create a meta value object. + * + * @param Meta_Tags_Context $context The indexable presentation. + * @param ContainerInterface $container The DI container. + */ + public function __construct( + Meta_Tags_Context $context, + ContainerInterface $container + ) { + $this->container = $container; + $this->context = $context; + + $this->helpers = $this->container->get( Helpers_Surface::class ); + $this->replace_vars = $this->container->get( WPSEO_Replace_Vars::class ); + $this->front_end = $this->container->get( Front_End_Integration::class ); + } + + /** + * Returns the output as would be presented in the head. + * + * @return object The HTML and JSON presentation of the head metadata. + */ + public function get_head() { + $presenters = $this->get_presenters(); + + /** This filter is documented in src/integrations/front-end-integration.php */ + $presentation = \apply_filters( 'wpseo_frontend_presentation', $this->context->presentation, $this->context ); + + $html_output = ''; + $json_head_fields = []; + + foreach ( $presenters as $presenter ) { + $presenter->presentation = $presentation; + $presenter->replace_vars = $this->replace_vars; + $presenter->helpers = $this->helpers; + + $html_output .= $this->create_html_presentation( $presenter ); + $json_field = $this->create_json_field( $presenter ); + + // Only use the output of presenters that could successfully present their data. + if ( $json_field !== null && ! empty( $json_field->key ) ) { + $json_head_fields[ $json_field->key ] = $json_field->value; + } + } + $html_output = \trim( $html_output ); + + return (object) [ + 'html' => $html_output, + 'json' => $json_head_fields, + ]; + } + + /** + * Magic getter for presenting values through the appropriate presenter, if it exists. + * + * @param string $name The property to get. + * + * @return mixed The value, as presented by the appropriate presenter. + */ + public function __get( $name ) { + if ( \array_key_exists( $name, $this->properties_bin ) ) { + return $this->properties_bin[ $name ]; + } + + /** This filter is documented in src/integrations/front-end-integration.php */ + $presentation = \apply_filters( 'wpseo_frontend_presentation', $this->context->presentation, $this->context ); + + if ( ! isset( $presentation->{$name} ) ) { + if ( isset( $this->context->{$name} ) ) { + $this->properties_bin[ $name ] = $this->context->{$name}; + return $this->properties_bin[ $name ]; + } + return null; + } + + $presenter_namespace = 'Yoast\WP\SEO\Presenters\\'; + $parts = \explode( '_', $name ); + if ( $parts[0] === 'twitter' ) { + $presenter_namespace .= 'Twitter\\'; + $parts = \array_slice( $parts, 1 ); + } + elseif ( $parts[0] === 'open' && $parts[1] === 'graph' ) { + $presenter_namespace .= 'Open_Graph\\'; + $parts = \array_slice( $parts, 2 ); + } + + $presenter_class = $presenter_namespace . \implode( '_', \array_map( 'ucfirst', $parts ) ) . '_Presenter'; + + if ( \class_exists( $presenter_class ) ) { + /** + * The indexable presenter. + * + * @var Abstract_Indexable_Presenter + */ + $presenter = new $presenter_class(); + $presenter->presentation = $presentation; + $presenter->helpers = $this->helpers; + $presenter->replace_vars = $this->replace_vars; + $value = $presenter->get(); + } + else { + $value = $presentation->{$name}; + } + + $this->properties_bin[ $name ] = $value; + return $this->properties_bin[ $name ]; + } + + /** + * Magic isset for ensuring properties on the presentation are recognised. + * + * @param string $name The property to get. + * + * @return bool Whether or not the requested property exists. + */ + public function __isset( $name ) { + if ( \array_key_exists( $name, $this->properties_bin ) ) { + return true; + } + + return isset( $this->context->presentation->{$name} ); + } + + /** + * Prevents setting dynamic properties and overwriting the value of declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * @param mixed $value The property value. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. + */ + public function __set( $name, $value ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- __set must have a name and value - PHPCS #3715. + throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); + } + + /** + * Prevents unsetting dynamic properties and unsetting declared properties + * from an inaccessible context. + * + * @param string $name The property name. + * + * @return void + * + * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. + */ + public function __unset( $name ) { + throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); + } + + /** + * Strips all nested dependencies from the debug info. + * + * @return array + */ + public function __debugInfo() { + return [ 'context' => $this->context ]; + } + + /** + * Returns all presenters. + * + * @return Abstract_Indexable_Presenter[] + */ + protected function get_presenters() { + $presenters = $this->front_end->get_presenters( $this->context->page_type, $this->context ); + + if ( $this->context->page_type === 'Date_Archive' ) { + /** + * Define a filter that removes objects of type Rel_Next_Presenter or Rel_Prev_Presenter from a list. + * + * @param object $presenter The presenter to verify. + * + * @return bool True if the presenter is not a Rel_Next or Rel_Prev presenter. + */ + $callback = static function ( $presenter ) { + return ! \is_a( $presenter, Rel_Next_Presenter::class ) + && ! \is_a( $presenter, Rel_Prev_Presenter::class ); + }; + $presenters = \array_filter( $presenters, $callback ); + } + + return $presenters; + } + + /** + * Uses the presenter to create a line of HTML. + * + * @param Abstract_Indexable_Presenter $presenter The presenter. + * + * @return string + */ + protected function create_html_presentation( $presenter ) { + $presenter_output = $presenter->present(); + if ( ! empty( $presenter_output ) ) { + return $presenter_output . \PHP_EOL; + } + return ''; + } + + /** + * Converts a presenter's key and value to JSON. + * + * @param Abstract_Indexable_Presenter $presenter The presenter whose key and value are to be converted to JSON. + * + * @return object|null + */ + protected function create_json_field( $presenter ) { + if ( $presenter->get_key() === 'NO KEY PROVIDED' ) { + return null; + } + + $value = $presenter->get(); + if ( empty( $value ) ) { + return null; + } + + return (object) [ + 'key' => $presenter->escape_key(), + 'value' => $value, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/additional-contactmethods-collector.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/additional-contactmethods-collector.php new file mode 100644 index 00000000..2e985112 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/additional-contactmethods-collector.php @@ -0,0 +1,77 @@ + $additional_contactmethods + */ + private $additional_contactmethods; + + /** + * The constructor. + * + * @param Additional_Contactmethod_Interface ...$additional_contactmethods All additional contactmethods. + */ + public function __construct( Additional_Contactmethod_Interface ...$additional_contactmethods ) { + $this->additional_contactmethods = $additional_contactmethods; + } + + /** + * Returns all the additional contactmethods. + * + * @return array All the additional contactmethods. + */ + public function get_additional_contactmethods(): array { + $additional_contactmethods = $this->additional_contactmethods; + + /** + * Filter: Adds the possibility to add more additional contactmethods in the user profile. + * + * @param array $additional_contactmethods Array with additional contact method classes. + */ + return \apply_filters( 'wpseo_additional_contactmethods', $additional_contactmethods ); + } + + /** + * Returns the additional contactmethods key/value pairs. + * + * @return array The additional contactmethods key/value pairs. + */ + public function get_additional_contactmethods_objects(): array { + $additional_contactmethods_objects = []; + $additional_contactmethods = $this->get_additional_contactmethods(); + + foreach ( $additional_contactmethods as $additional_contactmethod ) { + $additional_contactmethods_objects[ $additional_contactmethod->get_key() ] = $additional_contactmethod->get_label(); + } + + return $additional_contactmethods_objects; + } + + /** + * Returns the additional contactmethods keys. + * + * @return array The additional contactmethods keys. + */ + public function get_additional_contactmethods_keys(): array { + $additional_contactmethods_keys = []; + $additional_contactmethods = $this->get_additional_contactmethods(); + + foreach ( $additional_contactmethods as $additional_contactmethod ) { + $additional_contactmethods_keys[] = $additional_contactmethod->get_key(); + } + + return $additional_contactmethods_keys; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/cleanup-service.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/cleanup-service.php new file mode 100644 index 00000000..ffc966eb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/cleanup-service.php @@ -0,0 +1,74 @@ +additional_contactmethods_collector = $additional_contactmethods_collector; + $this->custom_meta_collector = $custom_meta_collector; + $this->cleanup_repository = $cleanup_repository; + } + + /** + * Deletes selected empty usermeta. + * + * @param int $limit The limit we'll apply to the cleanups. + * + * @return int|bool The number of rows that was deleted or false if the query failed. + */ + public function cleanup_selected_empty_usermeta( int $limit ) { + $meta_to_check = $this->get_meta_to_check(); + + return $this->cleanup_repository->delete_empty_usermeta_query( $meta_to_check, $limit ); + } + + /** + * Gets which meta are going to be checked for emptiness. + * + * @return array The meta to be checked for emptiness. + */ + private function get_meta_to_check() { + $additional_contactmethods = $this->additional_contactmethods_collector->get_additional_contactmethods_keys(); + $custom_meta = $this->custom_meta_collector->get_non_empty_custom_meta(); + + return \array_merge( $additional_contactmethods, $custom_meta ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/custom-meta-collector.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/custom-meta-collector.php new file mode 100644 index 00000000..264638ee --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/application/custom-meta-collector.php @@ -0,0 +1,72 @@ + $custom_meta + */ + private $custom_meta; + + /** + * The constructor. + * + * @param Custom_Meta_Interface ...$custom_meta All custom meta. + */ + public function __construct( Custom_Meta_Interface ...$custom_meta ) { + $this->custom_meta = $custom_meta; + } + + /** + * Returns all the custom meta. + * + * @return array All the custom meta. + */ + public function get_custom_meta(): array { + return $this->custom_meta; + } + + /** + * Returns all the custom meta, sorted by rendering priority. + * + * @return array All the custom meta, sorted by rendering priority. + */ + public function get_sorted_custom_meta(): array { + $custom_meta = $this->get_custom_meta(); + + \usort( + $custom_meta, + static function ( Custom_Meta_Interface $a, Custom_Meta_Interface $b ) { + return ( $a->get_render_priority() <=> $b->get_render_priority() ); + } + ); + + return $custom_meta; + } + + /** + * Returns the custom meta that can't be empty. + * + * @return array The custom meta that can't be empty. + */ + public function get_non_empty_custom_meta(): array { + $non_empty_custom_meta = []; + foreach ( $this->custom_meta as $custom_meta ) { + if ( ! $custom_meta->is_empty_allowed() ) { + $non_empty_custom_meta[] = $custom_meta->get_key(); + } + } + + return $non_empty_custom_meta; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/domain/additional-contactmethod-interface.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/domain/additional-contactmethod-interface.php new file mode 100644 index 00000000..0d6e4e07 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/domain/additional-contactmethod-interface.php @@ -0,0 +1,23 @@ +' . \__( '(if one exists)', 'wordpress-seo' ) . ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/x.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/x.php new file mode 100644 index 00000000..bd0e1083 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/additional-contactmethods/x.php @@ -0,0 +1,30 @@ +options_helper = $options_helper; + } + + /** + * Returns the priority which the custom meta's form field should be rendered with. + * + * @return int The priority which the custom meta's form field should be rendered with. + */ + public function get_render_priority(): int { + return 200; + } + + /** + * Returns the db key of the Author_Metadesc custom meta. + * + * @return string The db key of the Author_Metadesc custom meta. + */ + public function get_key(): string { + return 'wpseo_metadesc'; + } + + /** + * Returns the id of the custom meta's form field. + * + * @return string The id of the custom meta's form field. + */ + public function get_field_id(): string { + return 'wpseo_author_metadesc'; + } + + /** + * Returns the meta value. + * + * @param int $user_id The user ID. + * + * @return string The meta value. + */ + public function get_value( $user_id ): string { + return \get_the_author_meta( $this->get_key(), $user_id ); + } + + /** + * Returns whether the respective global setting is enabled. + * + * @return bool Whether the respective global setting is enabled. + */ + public function is_setting_enabled(): bool { + return ( ! $this->options_helper->get( 'disable-author' ) ); + } + + /** + * Returns whether the custom meta is allowed to be empty. + * + * @return bool Whether the custom meta is allowed to be empty. + */ + public function is_empty_allowed(): bool { + return true; + } + + /** + * Renders the custom meta's field in the user form. + * + * @param int $user_id The user ID. + * + * @return void + */ + public function render_field( $user_id ): void { + echo ' + + '; + + echo ' + +
            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/author-title.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/author-title.php new file mode 100644 index 00000000..0b895079 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/author-title.php @@ -0,0 +1,109 @@ +options_helper = $options_helper; + } + + /** + * Returns the priority which the custom meta's form field should be rendered with. + * + * @return int The priority which the custom meta's form field should be rendered with. + */ + public function get_render_priority(): int { + return 100; + } + + /** + * Returns the db key of the Author_Title custom meta. + * + * @return string The db key of the Author_Title custom meta. + */ + public function get_key(): string { + return 'wpseo_title'; + } + + /** + * Returns the id of the custom meta's form field. + * + * @return string The id of the custom meta's form field. + */ + public function get_field_id(): string { + return 'wpseo_author_title'; + } + + /** + * Returns the meta value. + * + * @param int $user_id The user ID. + * + * @return string The meta value. + */ + public function get_value( $user_id ): string { + return \get_the_author_meta( $this->get_key(), $user_id ); + } + + /** + * Returns whether the respective global setting is enabled. + * + * @return bool Whether the respective global setting is enabled. + */ + public function is_setting_enabled(): bool { + return ( ! $this->options_helper->get( 'disable-author' ) ); + } + + /** + * Returns whether the custom meta is allowed to be empty. + * + * @return bool Whether the custom meta is allowed to be empty. + */ + public function is_empty_allowed(): bool { + return true; + } + + /** + * Renders the custom meta's field in the user form. + * + * @param int $user_id The user ID. + * + * @return void + */ + public function render_field( $user_id ): void { + echo ' + + '; + + echo ' + +
            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/content-analysis-disable.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/content-analysis-disable.php new file mode 100644 index 00000000..77364a85 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/content-analysis-disable.php @@ -0,0 +1,118 @@ +options_helper = $options_helper; + } + + /** + * Returns the priority which the custom meta's form field should be rendered with. + * + * @return int The priority which the custom meta's form field should be rendered with. + */ + public function get_render_priority(): int { + return 500; + } + + /** + * Returns the db key of the Content_Analysis_Disable custom meta. + * + * @return string The db key of the Content_Analysis_Disable custom meta. + */ + public function get_key(): string { + return 'wpseo_content_analysis_disable'; + } + + /** + * Returns the id of the custom meta's form field. + * + * @return string The id of the custom meta's form field. + */ + public function get_field_id(): string { + return 'wpseo_content_analysis_disable'; + } + + /** + * Returns the meta value. + * + * @param int $user_id The user ID. + * + * @return string The meta value. + */ + public function get_value( $user_id ): string { + return \get_the_author_meta( $this->get_key(), $user_id ); + } + + /** + * Returns whether the respective global setting is enabled. + * + * @return bool Whether the respective global setting is enabled. + */ + public function is_setting_enabled(): bool { + return ( $this->options_helper->get( 'content_analysis_active', false ) ); + } + + /** + * Returns whether the custom meta is allowed to be empty. + * + * @return bool Whether the custom meta is allowed to be empty. + */ + public function is_empty_allowed(): bool { + return true; + } + + /** + * Renders the custom meta's field in the user form. + * + * @param int $user_id The user ID. + * + * @return void + */ + public function render_field( $user_id ): void { + echo ' + + get_value( $user_id ), 'on', false ) + . '/>'; + + echo ' + +
            '; + + echo ' + +

            ' + . \esc_html__( 'Removes the readability analysis section from the metabox and disables all readability-related suggestions.', 'wordpress-seo' ) + . '

            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/inclusive-language-analysis-disable.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/inclusive-language-analysis-disable.php new file mode 100644 index 00000000..4e81535c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/inclusive-language-analysis-disable.php @@ -0,0 +1,118 @@ +options_helper = $options_helper; + } + + /** + * Returns the priority which the custom meta's form field should be rendered with. + * + * @return int The priority which the custom meta's form field should be rendered with. + */ + public function get_render_priority(): int { + return 600; + } + + /** + * Returns the db key of the Inclusive_Language_Analysis_Disable custom meta. + * + * @return string The db key of the Inclusive_Language_Analysis_Disable custom meta. + */ + public function get_key(): string { + return 'wpseo_inclusive_language_analysis_disable'; + } + + /** + * Returns the id of the custom meta's form field. + * + * @return string The id of the custom meta's form field. + */ + public function get_field_id(): string { + return 'wpseo_inclusive_language_analysis_disable'; + } + + /** + * Returns the meta value. + * + * @param int $user_id The user ID. + * + * @return string The meta value. + */ + public function get_value( $user_id ): string { + return \get_the_author_meta( $this->get_key(), $user_id ); + } + + /** + * Returns whether the respective global setting is enabled. + * + * @return bool Whether the respective global setting is enabled. + */ + public function is_setting_enabled(): bool { + return ( $this->options_helper->get( 'inclusive_language_analysis_active', false ) ); + } + + /** + * Returns whether the custom meta is allowed to be empty. + * + * @return bool Whether the custom meta is allowed to be empty. + */ + public function is_empty_allowed(): bool { + return true; + } + + /** + * Renders the custom meta's field in the user form. + * + * @param int $user_id The user ID. + * + * @return void + */ + public function render_field( $user_id ): void { + echo ' + + get_value( $user_id ), 'on', false ) + . '/>'; + + echo ' + +
            '; + + echo ' + +

            ' + . \esc_html__( 'Removes the inclusive language analysis section from the metabox and disables all inclusive language-related suggestions.', 'wordpress-seo' ) + . '

            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/keyword-analysis-disable.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/keyword-analysis-disable.php new file mode 100644 index 00000000..852aa858 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/keyword-analysis-disable.php @@ -0,0 +1,118 @@ +options_helper = $options_helper; + } + + /** + * Returns the priority which the custom meta's form field should be rendered with. + * + * @return int The priority which the custom meta's form field should be rendered with. + */ + public function get_render_priority(): int { + return 400; + } + + /** + * Returns the db key of the Keyword_Analysis_Disable custom meta. + * + * @return string The db key of the Keyword_Analysis_Disable custom meta. + */ + public function get_key(): string { + return 'wpseo_keyword_analysis_disable'; + } + + /** + * Returns the id of the custom meta's form field. + * + * @return string The id of the custom meta's form field. + */ + public function get_field_id(): string { + return 'wpseo_keyword_analysis_disable'; + } + + /** + * Returns the meta value. + * + * @param int $user_id The user ID. + * + * @return string The meta value. + */ + public function get_value( $user_id ): string { + return \get_the_author_meta( $this->get_key(), $user_id ); + } + + /** + * Returns whether the respective global setting is enabled. + * + * @return bool Whether the respective global setting is enabled. + */ + public function is_setting_enabled(): bool { + return ( $this->options_helper->get( 'keyword_analysis_active', false ) ); + } + + /** + * Returns whether the custom meta is allowed to be empty. + * + * @return bool Whether the custom meta is allowed to be empty. + */ + public function is_empty_allowed(): bool { + return true; + } + + /** + * Renders the custom meta's field in the user form. + * + * @param int $user_id The user ID. + * + * @return void + */ + public function render_field( $user_id ): void { + echo ' + + get_value( $user_id ), 'on', false ) + . '/>'; + + echo ' + +
            '; + + echo ' + +

            ' + . \esc_html__( 'Removes the focus keyphrase section from the metabox and disables all SEO-related suggestions.', 'wordpress-seo' ) + . '

            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/noindex-author.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/noindex-author.php new file mode 100644 index 00000000..4bf2f881 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/framework/custom-meta/noindex-author.php @@ -0,0 +1,111 @@ +options_helper = $options_helper; + } + + /** + * Returns the priority which the custom meta's form field should be rendered with. + * + * @return int The priority which the custom meta's form field should be rendered with. + */ + public function get_render_priority(): int { + return 300; + } + + /** + * Returns the db key of the Noindex_Author custom meta. + * + * @return string The db key of the Noindex_Author custom meta. + */ + public function get_key(): string { + return 'wpseo_noindex_author'; + } + + /** + * Returns the id of the custom meta's form field. + * + * @return string The id of the custom meta's form field. + */ + public function get_field_id(): string { + return 'wpseo_noindex_author'; + } + + /** + * Returns the meta value. + * + * @param int $user_id The user ID. + * + * @return string The meta value. + */ + public function get_value( $user_id ): string { + return \get_the_author_meta( $this->get_key(), $user_id ); + } + + /** + * Returns whether the respective global setting is enabled. + * + * @return bool Whether the respective global setting is enabled. + */ + public function is_setting_enabled(): bool { + return ( ! $this->options_helper->get( 'disable-author' ) ); + } + + /** + * Returns whether the custom meta is allowed to be empty. + * + * @return bool Whether the custom meta is allowed to be empty. + */ + public function is_empty_allowed(): bool { + return false; + } + + /** + * Renders the custom meta's field in the user form. + * + * @param int $user_id The user ID. + * + * @return void + */ + public function render_field( $user_id ): void { + echo ' + + get_value( $user_id ), 'on', false ) + . '/>'; + + echo ' + +
            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/infrastructure/cleanup-repository.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/infrastructure/cleanup-repository.php new file mode 100644 index 00000000..22bdc902 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/infrastructure/cleanup-repository.php @@ -0,0 +1,38 @@ + $meta_keys The meta to be potentially deleted. + * @param int $limit The number of maximum deletions. + * + * @return int|false The number of rows that was deleted or false if the query failed. + */ + public function delete_empty_usermeta_query( $meta_keys, $limit ) { + global $wpdb; + + // phpcs:disable WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber -- Reason: we're passing an array instead. + $delete_query = $wpdb->prepare( + 'DELETE FROM %i + WHERE meta_key IN ( ' . \implode( ', ', \array_fill( 0, \count( $meta_keys ), '%s' ) ) . ' ) + AND meta_value = "" + ORDER BY user_id + LIMIT %d', + \array_merge( [ $wpdb->usermeta ], $meta_keys, [ $limit ] ) + ); + // phpcs:enable + + // phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches. + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery -- Reason: Most performant way. + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared -- Reason: Is it prepared already. + return $wpdb->query( $delete_query ); + // phpcs:enable + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/additional-contactmethods-integration.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/additional-contactmethods-integration.php new file mode 100644 index 00000000..ddd67f24 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/additional-contactmethods-integration.php @@ -0,0 +1,77 @@ +additional_contactmethods_collector = $additional_contactmethods_collector; + } + + /** + * Registers action hook. + * + * @return void + */ + public function register_hooks(): void { + \add_filter( 'user_contactmethods', [ $this, 'update_contactmethods' ] ); + \add_filter( 'update_user_metadata', [ $this, 'stop_storing_empty_metadata' ], 10, 4 ); + } + + /** + * Updates the contactmethods with an additional set of social profiles. + * + * These are used with the Facebook author, rel="author", Twitter cards implementation, but also in the `sameAs` schema attributes. + * + * @param array $contactmethods Currently set contactmethods. + * + * @return array Contactmethods with added contactmethods. + */ + public function update_contactmethods( $contactmethods ) { + $additional_contactmethods = $this->additional_contactmethods_collector->get_additional_contactmethods_objects(); + + return \array_merge( $contactmethods, $additional_contactmethods ); + } + + /** + * Returns a check value, which will stop empty contactmethods from going into the database. + * + * @param bool|null $check Whether to allow updating metadata for the given type. + * @param int $object_id ID of the object metadata is for. + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. Must be serializable if non-scalar. + * + * @return false|null False for when we are to filter out empty metadata, null for no filtering. + */ + public function stop_storing_empty_metadata( $check, $object_id, $meta_key, $meta_value ) { + $additional_contactmethods = $this->additional_contactmethods_collector->get_additional_contactmethods_keys(); + + if ( \in_array( $meta_key, $additional_contactmethods, true ) && $meta_value === '' ) { + \delete_user_meta( $object_id, $meta_key ); + return false; + } + + return $check; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/cleanup-integration.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/cleanup-integration.php new file mode 100644 index 00000000..72091235 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/cleanup-integration.php @@ -0,0 +1,58 @@ +cleanup_service = $cleanup_service; + } + + /** + * Registers action hook. + * + * @return void + */ + public function register_hooks(): void { + \add_filter( 'wpseo_misc_cleanup_tasks', [ $this, 'add_user_meta_cleanup_tasks' ] ); + } + + /** + * Adds cleanup tasks for the cleanup integration. + * + * @param Closure[] $tasks Array of tasks to be added. + * + * @return Closure[] An associative array of tasks to be added to the cleanup integration. + */ + public function add_user_meta_cleanup_tasks( $tasks ) { + return \array_merge( + $tasks, + [ + 'clean_selected_empty_usermeta' => function ( $limit ) { + return $this->cleanup_service->cleanup_selected_empty_usermeta( $limit ); + }, + ] + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/custom-meta-integration.php b/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/custom-meta-integration.php new file mode 100644 index 00000000..d4940f33 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-meta/user-interface/custom-meta-integration.php @@ -0,0 +1,119 @@ +custom_meta_collector = $custom_meta_collector; + } + + /** + * Retrieves the conditionals for the integration. + * + * @return array The conditionals. + */ + public static function get_conditionals() { + return [ + Admin_Conditional::class, + User_Can_Edit_Users_Conditional::class, + User_Edit_Conditional::class, + ]; + } + + /** + * Registers action hook. + * + * @return void + */ + public function register_hooks(): void { + \add_action( 'show_user_profile', [ $this, 'user_profile' ] ); + \add_action( 'edit_user_profile', [ $this, 'user_profile' ] ); + + \add_action( 'personal_options_update', [ $this, 'process_user_option_update' ] ); + \add_action( 'edit_user_profile_update', [ $this, 'process_user_option_update' ] ); + } + + /** + * Updates the user metas that (might) have been set on the user profile page. + * + * @param int $user_id User ID of the updated user. + * + * @return void + */ + public function process_user_option_update( $user_id ) { + \update_user_meta( $user_id, '_yoast_wpseo_profile_updated', \time() ); + + if ( ! \check_admin_referer( 'wpseo_user_profile_update', 'wpseo_nonce' ) ) { + return; + } + + foreach ( $this->custom_meta_collector->get_custom_meta() as $meta ) { + if ( ! $meta->is_setting_enabled() ) { + continue; + } + + $meta_field_id = $meta->get_field_id(); + $user_input_to_store = isset( $_POST[ $meta_field_id ] ) ? \sanitize_text_field( \wp_unslash( $_POST[ $meta_field_id ] ) ) : ''; + + if ( $meta->is_empty_allowed() || $user_input_to_store !== '' ) { + \update_user_meta( $user_id, $meta->get_key(), $user_input_to_store ); + continue; + } + + \delete_user_meta( $user_id, $meta->get_key() ); + } + } + + /** + * Adds the inputs needed for SEO values to the User Profile page. + * + * @param WP_User $user User instance to output for. + * + * @return void + */ + public function user_profile( $user ) { + \wp_nonce_field( 'wpseo_user_profile_update', 'wpseo_nonce' ); + + /* translators: %1$s expands to Yoast SEO */ + $yoast_user_settings_header = \sprintf( \__( '%1$s settings', 'wordpress-seo' ), 'Yoast SEO' ); + + echo ' + +
            + +

            ' . \esc_html( $yoast_user_settings_header ) . '

            '; + + foreach ( $this->custom_meta_collector->get_sorted_custom_meta() as $meta ) { + if ( ! $meta->is_setting_enabled() ) { + continue; + } + + $meta->render_field( $user->ID ); + } + + \do_action( 'wpseo_render_user_profile', $user ); + echo '
            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/user-profiles-additions/user-interface/user-profiles-additions-ui.php b/wp/wp-content/plugins/wordpress-seo/src/user-profiles-additions/user-interface/user-profiles-additions-ui.php new file mode 100644 index 00000000..1bf6e85b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/user-profiles-additions/user-interface/user-profiles-additions-ui.php @@ -0,0 +1,97 @@ +asset_manager = $asset_manager; + $this->product_helper = $product_helper; + } + + /** + * Returns the conditionals based in which this loadable should be active. + * + * @return array + */ + public static function get_conditionals() { + return [ User_Profile_Conditional::class ]; + } + + /** + * Initializes the integration. + * + * This is the place to register hooks and filters. + * + * @return void + */ + public function register_hooks() { + \add_action( 'show_user_profile', [ $this, 'add_hook_to_user_profile' ] ); + \add_action( 'edit_user_profile', [ $this, 'add_hook_to_user_profile' ] ); + } + + /** + * Enqueues the assets needed for this integration. + * + * @return void + */ + public function enqueue_assets() { + if ( $this->product_helper->is_premium() ) { + $this->asset_manager->enqueue_style( 'introductions' ); + } + } + + /** + * Add the inputs needed for SEO values to the User Profile page. + * + * @param WP_User $user User instance to output for. + * + * @return void + */ + public function add_hook_to_user_profile( $user ) { + $this->enqueue_assets(); + echo '
            '; + + /** + * Fires in the user profile. + * + * @internal + * + * @param WP_User $user The current WP_User object. + */ + \do_action( 'wpseo_user_profile_additions', $user ); + echo '
            '; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/images.php b/wp/wp-content/plugins/wordpress-seo/src/values/images.php new file mode 100644 index 00000000..3b3d4adc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/images.php @@ -0,0 +1,151 @@ +image = $image; + $this->url = $url; + } + + /** + * Adds an image to the list by image ID. + * + * @param int $image_id The image ID to add. + * + * @return void + */ + public function add_image_by_id( $image_id ) { + $image = $this->image->get_attachment_image_source( $image_id, $this->image_size ); + if ( $image ) { + $this->add_image( $image ); + } + } + + /** + * Adds an image to the list by image ID. + * + * @param string $image_meta JSON encoded image meta. + * + * @return void + */ + public function add_image_by_meta( $image_meta ) { + $this->add_image( (array) \json_decode( $image_meta ) ); + } + + /** + * Return the images array. + * + * @return array The images. + */ + public function get_images() { + return $this->images; + } + + /** + * Check whether we have images or not. + * + * @return bool True if we have images, false if we don't. + */ + public function has_images() { + return ! empty( $this->images ); + } + + /** + * Adds an image based on a given URL. + * + * @param string $url The given URL. + * + * @return number|null Returns the found image ID if it exists. Otherwise -1. + * If the URL is empty we return null. + */ + public function add_image_by_url( $url ) { + if ( empty( $url ) ) { + return null; + } + + $image_id = $this->image->get_attachment_by_url( $url ); + + if ( $image_id ) { + $this->add_image_by_id( $image_id ); + + return $image_id; + } + + $this->add_image( $url ); + + return -1; + } + + /** + * Adds an image to the list of images. + * + * @param string|array $image Image array. + * + * @return void + */ + public function add_image( $image ) { + if ( \is_string( $image ) ) { + $image = [ 'url' => $image ]; + } + + if ( ! \is_array( $image ) || empty( $image['url'] ) || ! \is_string( $image['url'] ) ) { + return; + } + + if ( $this->url->is_relative( $image['url'] ) && $image['url'][0] === '/' ) { + $image['url'] = $this->url->build_absolute_url( $image['url'] ); + } + + if ( \array_key_exists( $image['url'], $this->images ) ) { + return; + } + + $this->images[ $image['url'] ] = $image; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/indexables/indexable-builder-versions.php b/wp/wp-content/plugins/wordpress-seo/src/values/indexables/indexable-builder-versions.php new file mode 100644 index 00000000..e3972aa8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/indexables/indexable-builder-versions.php @@ -0,0 +1,44 @@ + self::DEFAULT_INDEXABLE_BUILDER_VERSION, + 'general' => self::DEFAULT_INDEXABLE_BUILDER_VERSION, + 'home-page' => 2, + 'post' => 2, + 'post-type-archive' => 2, + 'term' => 2, + 'user' => 2, + 'system-page' => self::DEFAULT_INDEXABLE_BUILDER_VERSION, + ]; + + /** + * Provides the most recent version number for an Indexable's object type. + * + * @param string $object_type The Indexable type for which you want to know the most recent version. + * + * @return int The most recent version number for the type, or 1 if the version doesn't exist. + */ + public function get_latest_version_for_type( $object_type ) { + if ( ! \array_key_exists( $object_type, $this->indexable_builder_versions_by_type ) ) { + return self::DEFAULT_INDEXABLE_BUILDER_VERSION; + } + + return $this->indexable_builder_versions_by_type[ $object_type ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/oauth/oauth-token.php b/wp/wp-content/plugins/wordpress-seo/src/values/oauth/oauth-token.php new file mode 100644 index 00000000..3dbc8c9b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/oauth/oauth-token.php @@ -0,0 +1,139 @@ +access_token = $access_token; + + if ( empty( $refresh_token ) ) { + throw new Empty_Property_Exception( 'refresh_token' ); + } + + $this->refresh_token = $refresh_token; + + if ( empty( $expires ) ) { + throw new Empty_Property_Exception( 'expires' ); + } + + $this->expires = $expires; + + if ( \is_null( $has_expired ) ) { + throw new Empty_Property_Exception( 'has_expired' ); + } + + $this->has_expired = $has_expired; + $this->created_at = $created_at; + $this->error_count = $error_count; + } + + /** + * Creates a new instance based on the passed response. + * + * @param AccessTokenInterface $response The response object to create a new instance from. + * + * @return OAuth_Token The token object. + * + * @throws Empty_Property_Exception Exception thrown if a token property is empty. + */ + public static function from_response( AccessTokenInterface $response ) { + return new self( + $response->getToken(), + $response->getRefreshToken(), + $response->getExpires(), + $response->hasExpired(), + \time() + ); + } + + /** + * Determines whether or not the token has expired. + * + * @return bool Whether or not the token has expired. + */ + public function has_expired() { + return ( \time() >= $this->expires ) || $this->has_expired === true; + } + + /** + * Converts the object to an array. + * + * @return array The converted object. + */ + public function to_array() { + return [ + 'access_token' => $this->access_token, + 'refresh_token' => $this->refresh_token, + 'expires' => $this->expires, + 'has_expired' => $this->has_expired(), + 'created_at' => $this->created_at, + 'error_count' => $this->error_count, + ]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/open-graph/images.php b/wp/wp-content/plugins/wordpress-seo/src/values/open-graph/images.php new file mode 100644 index 00000000..4a1b7458 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/open-graph/images.php @@ -0,0 +1,58 @@ +open_graph_image = $open_graph_image; + } + + /** + * Outputs the images. + * + * @codeCoverageIgnore - The method is empty, nothing to test. + * + * @return void + */ + public function show() {} + + /** + * Adds an image to the list by image ID. + * + * @param int $image_id The image ID to add. + * + * @return void + */ + public function add_image_by_id( $image_id ) { + $attachment = $this->open_graph_image->get_image_by_id( $image_id ); + + if ( $attachment ) { + $this->add_image( $attachment ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/robots/directive.php b/wp/wp-content/plugins/wordpress-seo/src/values/robots/directive.php new file mode 100644 index 00000000..e2d9c120 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/robots/directive.php @@ -0,0 +1,45 @@ +paths = []; + } + + /** + * Adds a path to the directive path list. + * + * @param string $path A path to add in the path list. + * + * @return void + */ + public function add_path( $path ) { + if ( ! \in_array( $path, $this->paths, true ) ) { + $this->paths[] = $path; + } + } + + /** + * Returns all paths. + * + * @return array + */ + public function get_paths() { + return $this->paths; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent-list.php b/wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent-list.php new file mode 100644 index 00000000..0e6f70bf --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent-list.php @@ -0,0 +1,88 @@ +user_agent_list = []; + } + + /** + * Checks if given user_agent is already registered. + * + * @param string $user_agent The user agent identifier. + * + * @return bool + */ + public function has_user_agent( $user_agent ) { + return \array_key_exists( $user_agent, $this->user_agent_list ); + } + + /** + * Gets the user agent object. If it is not yet registered it creates it. + * + * @param string $user_agent The user agent identifier. + * + * @return User_Agent + */ + public function get_user_agent( $user_agent ) { + if ( $this->has_user_agent( $user_agent ) ) { + return $this->user_agent_list[ $user_agent ]; + } + + $this->user_agent_list[ $user_agent ] = new User_Agent( $user_agent ); + + return $this->user_agent_list[ $user_agent ]; + } + + /** + * Gets the list of user agents. + * + * @return array + */ + public function get_user_agents() { + return $this->user_agent_list; + } + + /** + * Gets a list of all disallow directives by user agent. + * + * @return array + */ + public function get_disallow_directives() { + $directives = []; + foreach ( $this->user_agent_list as $user_agent ) { + $directives[ $user_agent->get_user_agent() ] = $user_agent->get_disallow_paths(); + } + + return $directives; + } + + /** + * Gets a list of all sallow directives by user agent. + * + * @return array + */ + public function get_allow_directives() { + $directives = []; + foreach ( $this->user_agent_list as $user_agent ) { + $directives[ $user_agent->get_user_agent() ] = $user_agent->get_allow_paths(); + } + + return $directives; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent.php b/wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent.php new file mode 100644 index 00000000..41ca5702 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/robots/user-agent.php @@ -0,0 +1,90 @@ +user_agent = $user_agent; + $this->allow_directive = new Directive(); + $this->disallow_directive = new Directive(); + } + + /** + * Gets the user agent identifier. + * + * @return string + */ + public function get_user_agent() { + return $this->user_agent; + } + + /** + * Adds a path to the directive object. + * + * @param string $path The path to add to the disallow directive. + * + * @return void + */ + public function add_disallow_directive( $path ) { + $this->disallow_directive->add_path( $path ); + } + + /** + * Adds a path to the directive object. + * + * @param string $path The path to add to the allow directive. + * + * @return void + */ + public function add_allow_directive( $path ) { + $this->allow_directive->add_path( $path ); + } + + /** + * Gets all disallow paths for this user agent. + * + * @return array + */ + public function get_disallow_paths() { + return $this->disallow_directive->get_paths(); + } + + /** + * Gets all sallow paths for this user agent. + * + * @return array + */ + public function get_allow_paths() { + return $this->allow_directive->get_paths(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/values/twitter/images.php b/wp/wp-content/plugins/wordpress-seo/src/values/twitter/images.php new file mode 100644 index 00000000..17a961aa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/values/twitter/images.php @@ -0,0 +1,49 @@ +twitter_image = $twitter_image; + } + + /** + * Adds an image to the list by image ID. + * + * @param int $image_id The image ID to add. + * + * @return void + */ + public function add_image_by_id( $image_id ) { + $attachment = $this->twitter_image->get_by_id( $image_id ); + + if ( $attachment ) { + $this->add_image( $attachment ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/wordpress/wrapper.php b/wp/wp-content/plugins/wordpress-seo/src/wordpress/wrapper.php new file mode 100644 index 00000000..10aef406 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/wordpress/wrapper.php @@ -0,0 +1,74 @@ +getHeaders() as $name => $values ) { + $headers[ $name ] = \implode( ',', $values ); + } + + $args = [ + 'method' => $request->getMethod(), + 'headers' => $headers, + 'body' => (string) $request->getBody(), + 'httpVersion' => $request->getProtocolVersion(), + ]; + + if ( isset( $options['verify'] ) && $options['verify'] === false ) { + $args['sslverify'] = false; + } + if ( isset( $options['timeout'] ) ) { + $args['timeout'] = ( $options['timeout'] * 1000 ); + } + + $raw_response = \wp_remote_request( (string) $request->getUri(), $args ); + if ( \is_wp_error( $raw_response ) ) { + $exception = new Exception( $raw_response->get_error_message() ); + return new RejectedPromise( $exception ); + } + + $response = new Response( + $raw_response['response']['code'], + $raw_response['headers']->getAll(), + $raw_response['body'], + $args['httpVersion'], + $raw_response['response']['message'] + ); + + return new FulfilledPromise( $response ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/src/wrappers/wp-rewrite-wrapper.php b/wp/wp-content/plugins/wordpress-seo/src/wrappers/wp-rewrite-wrapper.php new file mode 100644 index 00000000..e06d0a1f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/src/wrappers/wp-rewrite-wrapper.php @@ -0,0 +1,20 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/InstalledVersions.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..01581949 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/InstalledVersions.php @@ -0,0 +1,357 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/LICENSE b/wp/wp-content/plugins/wordpress-seo/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_classmap.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..8a745f0a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_classmap.php @@ -0,0 +1,1113 @@ + $vendorDir . '/composer/InstalledVersions.php', + 'Composer\\Installers\\AglInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AglInstaller.php', + 'Composer\\Installers\\AkauntingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AkauntingInstaller.php', + 'Composer\\Installers\\AnnotateCmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php', + 'Composer\\Installers\\AsgardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AsgardInstaller.php', + 'Composer\\Installers\\AttogramInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AttogramInstaller.php', + 'Composer\\Installers\\BaseInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BaseInstaller.php', + 'Composer\\Installers\\BitrixInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BitrixInstaller.php', + 'Composer\\Installers\\BonefishInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BonefishInstaller.php', + 'Composer\\Installers\\CakePHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php', + 'Composer\\Installers\\ChefInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ChefInstaller.php', + 'Composer\\Installers\\CiviCrmInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php', + 'Composer\\Installers\\ClanCatsFrameworkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php', + 'Composer\\Installers\\CockpitInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CockpitInstaller.php', + 'Composer\\Installers\\CodeIgniterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php', + 'Composer\\Installers\\Concrete5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Concrete5Installer.php', + 'Composer\\Installers\\CroogoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CroogoInstaller.php', + 'Composer\\Installers\\DecibelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DecibelInstaller.php', + 'Composer\\Installers\\DframeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DframeInstaller.php', + 'Composer\\Installers\\DokuWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php', + 'Composer\\Installers\\DolibarrInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php', + 'Composer\\Installers\\DrupalInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DrupalInstaller.php', + 'Composer\\Installers\\ElggInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ElggInstaller.php', + 'Composer\\Installers\\EliasisInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/EliasisInstaller.php', + 'Composer\\Installers\\ExpressionEngineInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php', + 'Composer\\Installers\\EzPlatformInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/EzPlatformInstaller.php', + 'Composer\\Installers\\FuelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelInstaller.php', + 'Composer\\Installers\\FuelphpInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php', + 'Composer\\Installers\\GravInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/GravInstaller.php', + 'Composer\\Installers\\HuradInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/HuradInstaller.php', + 'Composer\\Installers\\ImageCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php', + 'Composer\\Installers\\Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Installer.php', + 'Composer\\Installers\\ItopInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ItopInstaller.php', + 'Composer\\Installers\\KanboardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KanboardInstaller.php', + 'Composer\\Installers\\KnownInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KnownInstaller.php', + 'Composer\\Installers\\KodiCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php', + 'Composer\\Installers\\KohanaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KohanaInstaller.php', + 'Composer\\Installers\\LanManagementSystemInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php', + 'Composer\\Installers\\LaravelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LaravelInstaller.php', + 'Composer\\Installers\\LavaLiteInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LavaLiteInstaller.php', + 'Composer\\Installers\\LithiumInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LithiumInstaller.php', + 'Composer\\Installers\\MODULEWorkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php', + 'Composer\\Installers\\MODXEvoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php', + 'Composer\\Installers\\MagentoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MagentoInstaller.php', + 'Composer\\Installers\\MajimaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MajimaInstaller.php', + 'Composer\\Installers\\MakoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MakoInstaller.php', + 'Composer\\Installers\\MantisBTInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MantisBTInstaller.php', + 'Composer\\Installers\\MatomoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MatomoInstaller.php', + 'Composer\\Installers\\MauticInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MauticInstaller.php', + 'Composer\\Installers\\MayaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MayaInstaller.php', + 'Composer\\Installers\\MediaWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php', + 'Composer\\Installers\\MiaoxingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MiaoxingInstaller.php', + 'Composer\\Installers\\MicroweberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php', + 'Composer\\Installers\\ModxInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ModxInstaller.php', + 'Composer\\Installers\\MoodleInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MoodleInstaller.php', + 'Composer\\Installers\\OctoberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OctoberInstaller.php', + 'Composer\\Installers\\OntoWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OntoWikiInstaller.php', + 'Composer\\Installers\\OsclassInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OsclassInstaller.php', + 'Composer\\Installers\\OxidInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OxidInstaller.php', + 'Composer\\Installers\\PPIInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PPIInstaller.php', + 'Composer\\Installers\\PantheonInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PantheonInstaller.php', + 'Composer\\Installers\\PhiftyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php', + 'Composer\\Installers\\PhpBBInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php', + 'Composer\\Installers\\PiwikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PiwikInstaller.php', + 'Composer\\Installers\\PlentymarketsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php', + 'Composer\\Installers\\Plugin' => $vendorDir . '/composer/installers/src/Composer/Installers/Plugin.php', + 'Composer\\Installers\\PortoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PortoInstaller.php', + 'Composer\\Installers\\PrestashopInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php', + 'Composer\\Installers\\ProcessWireInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ProcessWireInstaller.php', + 'Composer\\Installers\\PuppetInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PuppetInstaller.php', + 'Composer\\Installers\\PxcmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php', + 'Composer\\Installers\\RadPHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php', + 'Composer\\Installers\\ReIndexInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php', + 'Composer\\Installers\\Redaxo5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php', + 'Composer\\Installers\\RedaxoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php', + 'Composer\\Installers\\RoundcubeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php', + 'Composer\\Installers\\SMFInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SMFInstaller.php', + 'Composer\\Installers\\ShopwareInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php', + 'Composer\\Installers\\SilverStripeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php', + 'Composer\\Installers\\SiteDirectInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SiteDirectInstaller.php', + 'Composer\\Installers\\StarbugInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/StarbugInstaller.php', + 'Composer\\Installers\\SyDESInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SyDESInstaller.php', + 'Composer\\Installers\\SyliusInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SyliusInstaller.php', + 'Composer\\Installers\\TaoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TaoInstaller.php', + 'Composer\\Installers\\TastyIgniterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php', + 'Composer\\Installers\\TheliaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TheliaInstaller.php', + 'Composer\\Installers\\TuskInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TuskInstaller.php', + 'Composer\\Installers\\UserFrostingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php', + 'Composer\\Installers\\VanillaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/VanillaInstaller.php', + 'Composer\\Installers\\VgmcpInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/VgmcpInstaller.php', + 'Composer\\Installers\\WHMCSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php', + 'Composer\\Installers\\WinterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WinterInstaller.php', + 'Composer\\Installers\\WolfCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php', + 'Composer\\Installers\\WordPressInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WordPressInstaller.php', + 'Composer\\Installers\\YawikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/YawikInstaller.php', + 'Composer\\Installers\\ZendInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZendInstaller.php', + 'Composer\\Installers\\ZikulaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php', + 'WPSEO_Abstract_Capability_Manager' => $baseDir . '/admin/capabilities/class-abstract-capability-manager.php', + 'WPSEO_Abstract_Metabox_Tab_With_Sections' => $baseDir . '/admin/metabox/class-abstract-sectioned-metabox-tab.php', + 'WPSEO_Abstract_Post_Filter' => $baseDir . '/admin/filters/class-abstract-post-filter.php', + 'WPSEO_Abstract_Role_Manager' => $baseDir . '/admin/roles/class-abstract-role-manager.php', + 'WPSEO_Addon_Manager' => $baseDir . '/inc/class-addon-manager.php', + 'WPSEO_Admin' => $baseDir . '/admin/class-admin.php', + 'WPSEO_Admin_Asset' => $baseDir . '/admin/class-asset.php', + 'WPSEO_Admin_Asset_Analysis_Worker_Location' => $baseDir . '/admin/class-admin-asset-analysis-worker-location.php', + 'WPSEO_Admin_Asset_Dev_Server_Location' => $baseDir . '/admin/class-admin-asset-dev-server-location.php', + 'WPSEO_Admin_Asset_Location' => $baseDir . '/admin/class-admin-asset-location.php', + 'WPSEO_Admin_Asset_Manager' => $baseDir . '/admin/class-admin-asset-manager.php', + 'WPSEO_Admin_Asset_SEO_Location' => $baseDir . '/admin/class-admin-asset-seo-location.php', + 'WPSEO_Admin_Bar_Menu' => $baseDir . '/inc/class-wpseo-admin-bar-menu.php', + 'WPSEO_Admin_Editor_Specific_Replace_Vars' => $baseDir . '/admin/class-admin-editor-specific-replace-vars.php', + 'WPSEO_Admin_Gutenberg_Compatibility_Notification' => $baseDir . '/admin/class-admin-gutenberg-compatibility-notification.php', + 'WPSEO_Admin_Help_Panel' => $baseDir . '/admin/class-admin-help-panel.php', + 'WPSEO_Admin_Init' => $baseDir . '/admin/class-admin-init.php', + 'WPSEO_Admin_Menu' => $baseDir . '/admin/menu/class-admin-menu.php', + 'WPSEO_Admin_Pages' => $baseDir . '/admin/class-config.php', + 'WPSEO_Admin_Recommended_Replace_Vars' => $baseDir . '/admin/class-admin-recommended-replace-vars.php', + 'WPSEO_Admin_Settings_Changed_Listener' => $baseDir . '/admin/admin-settings-changed-listener.php', + 'WPSEO_Admin_User_Profile' => $baseDir . '/admin/class-admin-user-profile.php', + 'WPSEO_Admin_Utils' => $baseDir . '/admin/class-admin-utils.php', + 'WPSEO_Author_Sitemap_Provider' => $baseDir . '/inc/sitemaps/class-author-sitemap-provider.php', + 'WPSEO_Base_Menu' => $baseDir . '/admin/menu/class-base-menu.php', + 'WPSEO_Breadcrumbs' => $baseDir . '/src/deprecated/frontend/breadcrumbs.php', + 'WPSEO_Bulk_Description_List_Table' => $baseDir . '/admin/class-bulk-description-editor-list-table.php', + 'WPSEO_Bulk_List_Table' => $baseDir . '/admin/class-bulk-editor-list-table.php', + 'WPSEO_Bulk_Title_Editor_List_Table' => $baseDir . '/admin/class-bulk-title-editor-list-table.php', + 'WPSEO_Capability_Manager' => $baseDir . '/admin/capabilities/class-capability-manager.php', + 'WPSEO_Capability_Manager_Factory' => $baseDir . '/admin/capabilities/class-capability-manager-factory.php', + 'WPSEO_Capability_Manager_Integration' => $baseDir . '/admin/capabilities/class-capability-manager-integration.php', + 'WPSEO_Capability_Manager_VIP' => $baseDir . '/admin/capabilities/class-capability-manager-vip.php', + 'WPSEO_Capability_Manager_WP' => $baseDir . '/admin/capabilities/class-capability-manager-wp.php', + 'WPSEO_Capability_Utils' => $baseDir . '/admin/capabilities/class-capability-utils.php', + 'WPSEO_Collection' => $baseDir . '/admin/interface-collection.php', + 'WPSEO_Collector' => $baseDir . '/admin/class-collector.php', + 'WPSEO_Content_Images' => $baseDir . '/inc/class-wpseo-content-images.php', + 'WPSEO_Cornerstone_Filter' => $baseDir . '/admin/filters/class-cornerstone-filter.php', + 'WPSEO_Custom_Fields' => $baseDir . '/inc/class-wpseo-custom-fields.php', + 'WPSEO_Custom_Taxonomies' => $baseDir . '/inc/class-wpseo-custom-taxonomies.php', + 'WPSEO_Customizer' => $baseDir . '/src/deprecated/admin/class-customizer.php', + 'WPSEO_Database_Proxy' => $baseDir . '/admin/class-database-proxy.php', + 'WPSEO_Date_Helper' => $baseDir . '/inc/date-helper.php', + 'WPSEO_Dismissible_Notification' => $baseDir . '/admin/notifiers/dismissible-notification.php', + 'WPSEO_Endpoint' => $baseDir . '/admin/endpoints/class-endpoint.php', + 'WPSEO_Endpoint_File_Size' => $baseDir . '/admin/endpoints/class-endpoint-file-size.php', + 'WPSEO_Endpoint_Statistics' => $baseDir . '/admin/endpoints/class-endpoint-statistics.php', + 'WPSEO_Export' => $baseDir . '/admin/class-export.php', + 'WPSEO_Expose_Shortlinks' => $baseDir . '/admin/class-expose-shortlinks.php', + 'WPSEO_File_Size_Exception' => $baseDir . '/admin/exceptions/class-file-size-exception.php', + 'WPSEO_File_Size_Service' => $baseDir . '/admin/services/class-file-size.php', + 'WPSEO_Frontend' => $baseDir . '/src/deprecated/frontend/frontend.php', + 'WPSEO_GSC' => $baseDir . '/admin/google_search_console/class-gsc.php', + 'WPSEO_Gutenberg_Compatibility' => $baseDir . '/admin/class-gutenberg-compatibility.php', + 'WPSEO_Image_Utils' => $baseDir . '/inc/class-wpseo-image-utils.php', + 'WPSEO_Import_AIOSEO' => $baseDir . '/admin/import/plugins/class-import-aioseo.php', + 'WPSEO_Import_AIOSEO_V4' => $baseDir . '/admin/import/plugins/class-import-aioseo-v4.php', + 'WPSEO_Import_Greg_SEO' => $baseDir . '/admin/import/plugins/class-import-greg-high-performance-seo.php', + 'WPSEO_Import_HeadSpace' => $baseDir . '/admin/import/plugins/class-import-headspace.php', + 'WPSEO_Import_Jetpack_SEO' => $baseDir . '/admin/import/plugins/class-import-jetpack.php', + 'WPSEO_Import_Platinum_SEO' => $baseDir . '/admin/import/plugins/class-import-platinum-seo-pack.php', + 'WPSEO_Import_Plugin' => $baseDir . '/admin/import/class-import-plugin.php', + 'WPSEO_Import_Plugins_Detector' => $baseDir . '/admin/import/class-import-detector.php', + 'WPSEO_Import_Premium_SEO_Pack' => $baseDir . '/admin/import/plugins/class-import-premium-seo-pack.php', + 'WPSEO_Import_RankMath' => $baseDir . '/admin/import/plugins/class-import-rankmath.php', + 'WPSEO_Import_SEOPressor' => $baseDir . '/admin/import/plugins/class-import-seopressor.php', + 'WPSEO_Import_SEO_Framework' => $baseDir . '/admin/import/plugins/class-import-seo-framework.php', + 'WPSEO_Import_Settings' => $baseDir . '/admin/import/class-import-settings.php', + 'WPSEO_Import_Smartcrawl_SEO' => $baseDir . '/admin/import/plugins/class-import-smartcrawl.php', + 'WPSEO_Import_Squirrly' => $baseDir . '/admin/import/plugins/class-import-squirrly.php', + 'WPSEO_Import_Status' => $baseDir . '/admin/import/class-import-status.php', + 'WPSEO_Import_Ultimate_SEO' => $baseDir . '/admin/import/plugins/class-import-ultimate-seo.php', + 'WPSEO_Import_WPSEO' => $baseDir . '/admin/import/plugins/class-import-wpseo.php', + 'WPSEO_Import_WP_Meta_SEO' => $baseDir . '/admin/import/plugins/class-import-wp-meta-seo.php', + 'WPSEO_Import_WooThemes_SEO' => $baseDir . '/admin/import/plugins/class-import-woothemes-seo.php', + 'WPSEO_Installable' => $baseDir . '/admin/interface-installable.php', + 'WPSEO_Installation' => $baseDir . '/inc/class-wpseo-installation.php', + 'WPSEO_Language_Utils' => $baseDir . '/inc/language-utils.php', + 'WPSEO_Listener' => $baseDir . '/admin/listeners/class-listener.php', + 'WPSEO_Menu' => $baseDir . '/admin/menu/class-menu.php', + 'WPSEO_Meta' => $baseDir . '/inc/class-wpseo-meta.php', + 'WPSEO_Meta_Columns' => $baseDir . '/admin/class-meta-columns.php', + 'WPSEO_Metabox' => $baseDir . '/admin/metabox/class-metabox.php', + 'WPSEO_Metabox_Analysis' => $baseDir . '/admin/metabox/interface-metabox-analysis.php', + 'WPSEO_Metabox_Analysis_Inclusive_Language' => $baseDir . '/admin/metabox/class-metabox-analysis-inclusive-language.php', + 'WPSEO_Metabox_Analysis_Readability' => $baseDir . '/admin/metabox/class-metabox-analysis-readability.php', + 'WPSEO_Metabox_Analysis_SEO' => $baseDir . '/admin/metabox/class-metabox-analysis-seo.php', + 'WPSEO_Metabox_Collapsible' => $baseDir . '/admin/metabox/class-metabox-collapsible.php', + 'WPSEO_Metabox_Collapsibles_Sections' => $baseDir . '/admin/metabox/class-metabox-collapsibles-section.php', + 'WPSEO_Metabox_Editor' => $baseDir . '/admin/metabox/class-metabox-editor.php', + 'WPSEO_Metabox_Form_Tab' => $baseDir . '/admin/metabox/class-metabox-form-tab.php', + 'WPSEO_Metabox_Formatter' => $baseDir . '/admin/formatter/class-metabox-formatter.php', + 'WPSEO_Metabox_Formatter_Interface' => $baseDir . '/admin/formatter/interface-metabox-formatter.php', + 'WPSEO_Metabox_Null_Tab' => $baseDir . '/admin/metabox/class-metabox-null-tab.php', + 'WPSEO_Metabox_Section' => $baseDir . '/admin/metabox/interface-metabox-section.php', + 'WPSEO_Metabox_Section_Additional' => $baseDir . '/admin/metabox/class-metabox-section-additional.php', + 'WPSEO_Metabox_Section_Inclusive_Language' => $baseDir . '/admin/metabox/class-metabox-section-inclusive-language.php', + 'WPSEO_Metabox_Section_React' => $baseDir . '/admin/metabox/class-metabox-section-react.php', + 'WPSEO_Metabox_Section_Readability' => $baseDir . '/admin/metabox/class-metabox-section-readability.php', + 'WPSEO_Metabox_Tab' => $baseDir . '/admin/metabox/interface-metabox-tab.php', + 'WPSEO_MyYoast_Api_Request' => $baseDir . '/inc/class-my-yoast-api-request.php', + 'WPSEO_MyYoast_Bad_Request_Exception' => $baseDir . '/inc/exceptions/class-myyoast-bad-request-exception.php', + 'WPSEO_MyYoast_Invalid_JSON_Exception' => $baseDir . '/inc/exceptions/class-myyoast-invalid-json-exception.php', + 'WPSEO_MyYoast_Proxy' => $baseDir . '/admin/class-my-yoast-proxy.php', + 'WPSEO_Network_Admin_Menu' => $baseDir . '/admin/menu/class-network-admin-menu.php', + 'WPSEO_Notification_Handler' => $baseDir . '/admin/notifiers/interface-notification-handler.php', + 'WPSEO_Option' => $baseDir . '/inc/options/class-wpseo-option.php', + 'WPSEO_Option_MS' => $baseDir . '/inc/options/class-wpseo-option-ms.php', + 'WPSEO_Option_Social' => $baseDir . '/inc/options/class-wpseo-option-social.php', + 'WPSEO_Option_Tab' => $baseDir . '/admin/class-option-tab.php', + 'WPSEO_Option_Tabs' => $baseDir . '/admin/class-option-tabs.php', + 'WPSEO_Option_Tabs_Formatter' => $baseDir . '/admin/class-option-tabs-formatter.php', + 'WPSEO_Option_Titles' => $baseDir . '/inc/options/class-wpseo-option-titles.php', + 'WPSEO_Option_Wpseo' => $baseDir . '/inc/options/class-wpseo-option-wpseo.php', + 'WPSEO_Options' => $baseDir . '/inc/options/class-wpseo-options.php', + 'WPSEO_Paper_Presenter' => $baseDir . '/admin/class-paper-presenter.php', + 'WPSEO_Plugin_Availability' => $baseDir . '/admin/class-plugin-availability.php', + 'WPSEO_Plugin_Conflict' => $baseDir . '/admin/class-plugin-conflict.php', + 'WPSEO_Plugin_Importer' => $baseDir . '/admin/import/plugins/class-abstract-plugin-importer.php', + 'WPSEO_Plugin_Importers' => $baseDir . '/admin/import/plugins/class-importers.php', + 'WPSEO_Post_Metabox_Formatter' => $baseDir . '/admin/formatter/class-post-metabox-formatter.php', + 'WPSEO_Post_Type' => $baseDir . '/inc/class-post-type.php', + 'WPSEO_Post_Type_Sitemap_Provider' => $baseDir . '/inc/sitemaps/class-post-type-sitemap-provider.php', + 'WPSEO_Premium_Popup' => $baseDir . '/admin/class-premium-popup.php', + 'WPSEO_Premium_Upsell_Admin_Block' => $baseDir . '/admin/class-premium-upsell-admin-block.php', + 'WPSEO_Primary_Term' => $baseDir . '/inc/class-wpseo-primary-term.php', + 'WPSEO_Primary_Term_Admin' => $baseDir . '/admin/class-primary-term-admin.php', + 'WPSEO_Product_Upsell_Notice' => $baseDir . '/admin/class-product-upsell-notice.php', + 'WPSEO_Rank' => $baseDir . '/inc/class-wpseo-rank.php', + 'WPSEO_Register_Capabilities' => $baseDir . '/admin/capabilities/class-register-capabilities.php', + 'WPSEO_Register_Roles' => $baseDir . '/admin/roles/class-register-roles.php', + 'WPSEO_Remote_Request' => $baseDir . '/admin/class-remote-request.php', + 'WPSEO_Replace_Vars' => $baseDir . '/inc/class-wpseo-replace-vars.php', + 'WPSEO_Replacement_Variable' => $baseDir . '/inc/class-wpseo-replacement-variable.php', + 'WPSEO_Replacevar_Editor' => $baseDir . '/admin/menu/class-replacevar-editor.php', + 'WPSEO_Replacevar_Field' => $baseDir . '/admin/menu/class-replacevar-field.php', + 'WPSEO_Rewrite' => $baseDir . '/inc/class-rewrite.php', + 'WPSEO_Role_Manager' => $baseDir . '/admin/roles/class-role-manager.php', + 'WPSEO_Role_Manager_Factory' => $baseDir . '/admin/roles/class-role-manager-factory.php', + 'WPSEO_Role_Manager_WP' => $baseDir . '/admin/roles/class-role-manager-wp.php', + 'WPSEO_Schema_Person_Upgrade_Notification' => $baseDir . '/admin/class-schema-person-upgrade-notification.php', + 'WPSEO_Shortcode_Filter' => $baseDir . '/admin/ajax/class-shortcode-filter.php', + 'WPSEO_Shortlinker' => $baseDir . '/inc/class-wpseo-shortlinker.php', + 'WPSEO_Sitemap_Cache_Data' => $baseDir . '/inc/sitemaps/class-sitemap-cache-data.php', + 'WPSEO_Sitemap_Cache_Data_Interface' => $baseDir . '/inc/sitemaps/interface-sitemap-cache-data.php', + 'WPSEO_Sitemap_Image_Parser' => $baseDir . '/inc/sitemaps/class-sitemap-image-parser.php', + 'WPSEO_Sitemap_Provider' => $baseDir . '/inc/sitemaps/interface-sitemap-provider.php', + 'WPSEO_Sitemaps' => $baseDir . '/inc/sitemaps/class-sitemaps.php', + 'WPSEO_Sitemaps_Admin' => $baseDir . '/inc/sitemaps/class-sitemaps-admin.php', + 'WPSEO_Sitemaps_Cache' => $baseDir . '/inc/sitemaps/class-sitemaps-cache.php', + 'WPSEO_Sitemaps_Cache_Validator' => $baseDir . '/inc/sitemaps/class-sitemaps-cache-validator.php', + 'WPSEO_Sitemaps_Renderer' => $baseDir . '/inc/sitemaps/class-sitemaps-renderer.php', + 'WPSEO_Sitemaps_Router' => $baseDir . '/inc/sitemaps/class-sitemaps-router.php', + 'WPSEO_Slug_Change_Watcher' => $baseDir . '/admin/watchers/class-slug-change-watcher.php', + 'WPSEO_Statistic_Integration' => $baseDir . '/admin/statistics/class-statistics-integration.php', + 'WPSEO_Statistics' => $baseDir . '/inc/class-wpseo-statistics.php', + 'WPSEO_Statistics_Service' => $baseDir . '/admin/statistics/class-statistics-service.php', + 'WPSEO_Submenu_Capability_Normalize' => $baseDir . '/admin/menu/class-submenu-capability-normalize.php', + 'WPSEO_Suggested_Plugins' => $baseDir . '/admin/class-suggested-plugins.php', + 'WPSEO_Taxonomy' => $baseDir . '/admin/taxonomy/class-taxonomy.php', + 'WPSEO_Taxonomy_Columns' => $baseDir . '/admin/taxonomy/class-taxonomy-columns.php', + 'WPSEO_Taxonomy_Fields' => $baseDir . '/admin/taxonomy/class-taxonomy-fields.php', + 'WPSEO_Taxonomy_Fields_Presenter' => $baseDir . '/admin/taxonomy/class-taxonomy-fields-presenter.php', + 'WPSEO_Taxonomy_Meta' => $baseDir . '/inc/options/class-wpseo-taxonomy-meta.php', + 'WPSEO_Taxonomy_Metabox' => $baseDir . '/admin/taxonomy/class-taxonomy-metabox.php', + 'WPSEO_Taxonomy_Sitemap_Provider' => $baseDir . '/inc/sitemaps/class-taxonomy-sitemap-provider.php', + 'WPSEO_Term_Metabox_Formatter' => $baseDir . '/admin/formatter/class-term-metabox-formatter.php', + 'WPSEO_Tracking' => $baseDir . '/admin/tracking/class-tracking.php', + 'WPSEO_Tracking_Addon_Data' => $baseDir . '/admin/tracking/class-tracking-addon-data.php', + 'WPSEO_Tracking_Default_Data' => $baseDir . '/admin/tracking/class-tracking-default-data.php', + 'WPSEO_Tracking_Plugin_Data' => $baseDir . '/admin/tracking/class-tracking-plugin-data.php', + 'WPSEO_Tracking_Server_Data' => $baseDir . '/admin/tracking/class-tracking-server-data.php', + 'WPSEO_Tracking_Settings_Data' => $baseDir . '/admin/tracking/class-tracking-settings-data.php', + 'WPSEO_Tracking_Theme_Data' => $baseDir . '/admin/tracking/class-tracking-theme-data.php', + 'WPSEO_Upgrade' => $baseDir . '/inc/class-upgrade.php', + 'WPSEO_Upgrade_History' => $baseDir . '/inc/class-upgrade-history.php', + 'WPSEO_Utils' => $baseDir . '/inc/class-wpseo-utils.php', + 'WPSEO_WordPress_AJAX_Integration' => $baseDir . '/inc/interface-wpseo-wordpress-ajax-integration.php', + 'WPSEO_WordPress_Integration' => $baseDir . '/inc/interface-wpseo-wordpress-integration.php', + 'WPSEO_Yoast_Columns' => $baseDir . '/admin/class-yoast-columns.php', + 'Wincher_Dashboard_Widget' => $baseDir . '/admin/class-wincher-dashboard-widget.php', + 'YoastSEO_Vendor\\GuzzleHttp\\BodySummarizer' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizer.php', + 'YoastSEO_Vendor\\GuzzleHttp\\BodySummarizerInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizerInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Client' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Client.php', + 'YoastSEO_Vendor\\GuzzleHttp\\ClientInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\ClientTrait' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/ClientTrait.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\CookieJar' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJar.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\CookieJarInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\FileCookieJar' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\SessionCookieJar' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\SetCookie' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SetCookie.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\BadResponseException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/BadResponseException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\ClientException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ClientException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\ConnectException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ConnectException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\GuzzleException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/GuzzleException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\InvalidArgumentException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\RequestException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/RequestException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\ServerException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ServerException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\TooManyRedirectsException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\TransferException' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/TransferException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\HandlerStack' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/HandlerStack.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlFactory' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactory.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlFactoryInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlHandler' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlMultiHandler' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\EasyHandle' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/EasyHandle.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\HeaderProcessor' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\MockHandler' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/MockHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\Proxy' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/Proxy.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\StreamHandler' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/StreamHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\MessageFormatter' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatter.php', + 'YoastSEO_Vendor\\GuzzleHttp\\MessageFormatterInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatterInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Middleware' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Middleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Pool' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Pool.php', + 'YoastSEO_Vendor\\GuzzleHttp\\PrepareBodyMiddleware' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\AggregateException' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/AggregateException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\CancellationException' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/CancellationException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Coroutine' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/Coroutine.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Create' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/Create.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Each' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/Each.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\EachPromise' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/EachPromise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\FulfilledPromise' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/FulfilledPromise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Is' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/Is.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Promise' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/Promise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\PromiseInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/PromiseInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\PromisorInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/PromisorInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\RejectedPromise' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/RejectedPromise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\RejectionException' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/RejectionException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\TaskQueue' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/TaskQueue.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\TaskQueueInterface' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/TaskQueueInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Utils' => $baseDir . '/vendor_prefixed/guzzlehttp/promises/src/Utils.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\AppendStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/AppendStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\BufferStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/BufferStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\CachingStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/CachingStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\DroppingStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/DroppingStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Exception\\MalformedUriException' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Exception/MalformedUriException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\FnStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/FnStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Header' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Header.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\HttpFactory' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/HttpFactory.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\InflateStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/InflateStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\LazyOpenStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/LazyOpenStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\LimitStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/LimitStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Message' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Message.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\MessageTrait' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/MessageTrait.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\MimeType' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/MimeType.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\MultipartStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/MultipartStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\NoSeekStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/NoSeekStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\PumpStream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/PumpStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Query' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Query.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Request' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Request.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Response' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Response.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Rfc7230' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Rfc7230.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\ServerRequest' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/ServerRequest.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Stream' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Stream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/StreamDecoratorTrait.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\StreamWrapper' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/StreamWrapper.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UploadedFile' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/UploadedFile.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Uri' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Uri.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UriComparator' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/UriComparator.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UriNormalizer' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/UriNormalizer.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UriResolver' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/UriResolver.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Utils' => $baseDir . '/vendor_prefixed/guzzlehttp/psr7/src/Utils.php', + 'YoastSEO_Vendor\\GuzzleHttp\\RedirectMiddleware' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/RedirectMiddleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\RequestOptions' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/RequestOptions.php', + 'YoastSEO_Vendor\\GuzzleHttp\\RetryMiddleware' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/RetryMiddleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\TransferStats' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/TransferStats.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Utils' => $baseDir . '/vendor_prefixed/guzzlehttp/guzzle/src/Utils.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\AbstractGrant' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Grant/AbstractGrant.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\AuthorizationCode' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Grant/AuthorizationCode.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\ClientCredentials' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Grant/ClientCredentials.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\Exception\\InvalidGrantException' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\GrantFactory' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Grant/GrantFactory.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\Password' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Grant/Password.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\RefreshToken' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Grant/RefreshToken.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\OptionProvider\\HttpBasicAuthOptionProvider' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\OptionProvider\\OptionProviderInterface' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\OptionProvider\\PostAuthOptionProvider' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\AbstractProvider' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\GenericProvider' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Provider/GenericProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\GenericResourceOwner' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Provider/GenericResourceOwner.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\ResourceOwnerInterface' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Provider/ResourceOwnerInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Token\\AccessToken' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Token/AccessToken.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Token\\AccessTokenInterface' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Token/AccessTokenInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Token\\ResourceOwnerAccessTokenInterface' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\ArrayAccessorTrait' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/ArrayAccessorTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\BearerAuthorizationTrait' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\GuardedPropertyTrait' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/GuardedPropertyTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\MacAuthorizationTrait' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/MacAuthorizationTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\ProviderRedirectTrait' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/ProviderRedirectTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\QueryBuilderTrait' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/QueryBuilderTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\RequestFactory' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/RequestFactory.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\RequiredParameterTrait' => $baseDir . '/vendor_prefixed/league/oauth2-client/src/Tool/RequiredParameterTrait.php', + 'YoastSEO_Vendor\\Psr\\Container\\ContainerExceptionInterface' => $baseDir . '/vendor_prefixed/psr/container/src/ContainerExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Container\\ContainerInterface' => $baseDir . '/vendor_prefixed/psr/container/src/ContainerInterface.php', + 'YoastSEO_Vendor\\Psr\\Container\\NotFoundExceptionInterface' => $baseDir . '/vendor_prefixed/psr/container/src/NotFoundExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\ClientExceptionInterface' => $baseDir . '/vendor_prefixed/psr/http-client/src/ClientExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\ClientInterface' => $baseDir . '/vendor_prefixed/psr/http-client/src/ClientInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\NetworkExceptionInterface' => $baseDir . '/vendor_prefixed/psr/http-client/src/NetworkExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\RequestExceptionInterface' => $baseDir . '/vendor_prefixed/psr/http-client/src/RequestExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\MessageInterface' => $baseDir . '/vendor_prefixed/psr/http-message/src/MessageInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\RequestFactoryInterface' => $baseDir . '/vendor_prefixed/psr/http-factory/src/RequestFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\RequestInterface' => $baseDir . '/vendor_prefixed/psr/http-message/src/RequestInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ResponseFactoryInterface' => $baseDir . '/vendor_prefixed/psr/http-factory/src/ResponseFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ResponseInterface' => $baseDir . '/vendor_prefixed/psr/http-message/src/ResponseInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ServerRequestFactoryInterface' => $baseDir . '/vendor_prefixed/psr/http-factory/src/ServerRequestFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ServerRequestInterface' => $baseDir . '/vendor_prefixed/psr/http-message/src/ServerRequestInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\StreamFactoryInterface' => $baseDir . '/vendor_prefixed/psr/http-factory/src/StreamFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\StreamInterface' => $baseDir . '/vendor_prefixed/psr/http-message/src/StreamInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UploadedFileFactoryInterface' => $baseDir . '/vendor_prefixed/psr/http-factory/src/UploadedFileFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UploadedFileInterface' => $baseDir . '/vendor_prefixed/psr/http-message/src/UploadedFileInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UriFactoryInterface' => $baseDir . '/vendor_prefixed/psr/http-factory/src/UriFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UriInterface' => $baseDir . '/vendor_prefixed/psr/http-message/src/UriInterface.php', + 'YoastSEO_Vendor\\Psr\\Log\\AbstractLogger' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/AbstractLogger.php', + 'YoastSEO_Vendor\\Psr\\Log\\InvalidArgumentException' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/InvalidArgumentException.php', + 'YoastSEO_Vendor\\Psr\\Log\\LogLevel' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/LogLevel.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerAwareInterface' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/LoggerAwareInterface.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerAwareTrait' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/LoggerAwareTrait.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerInterface' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/LoggerInterface.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerTrait' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/LoggerTrait.php', + 'YoastSEO_Vendor\\Psr\\Log\\NullLogger' => $baseDir . '/vendor_prefixed/psr/log/Psr/Log/NullLogger.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Argument\\RewindableGenerator' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Container' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Container.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/ContainerInterface.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/LogicException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/RuntimeException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => $baseDir . '/vendor_prefixed/symfony/dependency-injection/ResettableContainerInterface.php', + 'Yoast\\WHIPv2\\Configuration' => $vendorDir . '/yoast/whip/src/Configuration.php', + 'Yoast\\WHIPv2\\Exceptions\\EmptyProperty' => $vendorDir . '/yoast/whip/src/Exceptions/EmptyProperty.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidOperatorType' => $vendorDir . '/yoast/whip/src/Exceptions/InvalidOperatorType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidType' => $vendorDir . '/yoast/whip/src/Exceptions/InvalidType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidVersionComparisonString' => $vendorDir . '/yoast/whip/src/Exceptions/InvalidVersionComparisonString.php', + 'Yoast\\WHIPv2\\Host' => $vendorDir . '/yoast/whip/src/Host.php', + 'Yoast\\WHIPv2\\Interfaces\\DismissStorage' => $vendorDir . '/yoast/whip/src/Interfaces/DismissStorage.php', + 'Yoast\\WHIPv2\\Interfaces\\Listener' => $vendorDir . '/yoast/whip/src/Interfaces/Listener.php', + 'Yoast\\WHIPv2\\Interfaces\\Message' => $vendorDir . '/yoast/whip/src/Interfaces/Message.php', + 'Yoast\\WHIPv2\\Interfaces\\MessagePresenter' => $vendorDir . '/yoast/whip/src/Interfaces/MessagePresenter.php', + 'Yoast\\WHIPv2\\Interfaces\\Requirement' => $vendorDir . '/yoast/whip/src/Interfaces/Requirement.php', + 'Yoast\\WHIPv2\\Interfaces\\VersionDetector' => $vendorDir . '/yoast/whip/src/Interfaces/VersionDetector.php', + 'Yoast\\WHIPv2\\MessageDismisser' => $vendorDir . '/yoast/whip/src/MessageDismisser.php', + 'Yoast\\WHIPv2\\MessageFormatter' => $vendorDir . '/yoast/whip/src/MessageFormatter.php', + 'Yoast\\WHIPv2\\MessagesManager' => $vendorDir . '/yoast/whip/src/MessagesManager.php', + 'Yoast\\WHIPv2\\Messages\\BasicMessage' => $vendorDir . '/yoast/whip/src/Messages/BasicMessage.php', + 'Yoast\\WHIPv2\\Messages\\HostMessage' => $vendorDir . '/yoast/whip/src/Messages/HostMessage.php', + 'Yoast\\WHIPv2\\Messages\\InvalidVersionRequirementMessage' => $vendorDir . '/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php', + 'Yoast\\WHIPv2\\Messages\\NullMessage' => $vendorDir . '/yoast/whip/src/Messages/NullMessage.php', + 'Yoast\\WHIPv2\\Messages\\UpgradePhpMessage' => $vendorDir . '/yoast/whip/src/Messages/UpgradePhpMessage.php', + 'Yoast\\WHIPv2\\Presenters\\WPMessagePresenter' => $vendorDir . '/yoast/whip/src/Presenters/WPMessagePresenter.php', + 'Yoast\\WHIPv2\\RequirementsChecker' => $vendorDir . '/yoast/whip/src/RequirementsChecker.php', + 'Yoast\\WHIPv2\\VersionRequirement' => $vendorDir . '/yoast/whip/src/VersionRequirement.php', + 'Yoast\\WHIPv2\\WPDismissOption' => $vendorDir . '/yoast/whip/src/WPDismissOption.php', + 'Yoast\\WHIPv2\\WPMessageDismissListener' => $vendorDir . '/yoast/whip/src/WPMessageDismissListener.php', + 'Yoast\\WP\\Lib\\Abstract_Main' => $baseDir . '/lib/abstract-main.php', + 'Yoast\\WP\\Lib\\Dependency_Injection\\Container_Registry' => $baseDir . '/lib/dependency-injection/container-registry.php', + 'Yoast\\WP\\Lib\\Migrations\\Adapter' => $baseDir . '/lib/migrations/adapter.php', + 'Yoast\\WP\\Lib\\Migrations\\Column' => $baseDir . '/lib/migrations/column.php', + 'Yoast\\WP\\Lib\\Migrations\\Constants' => $baseDir . '/lib/migrations/constants.php', + 'Yoast\\WP\\Lib\\Migrations\\Migration' => $baseDir . '/lib/migrations/migration.php', + 'Yoast\\WP\\Lib\\Migrations\\Table' => $baseDir . '/lib/migrations/table.php', + 'Yoast\\WP\\Lib\\Model' => $baseDir . '/lib/model.php', + 'Yoast\\WP\\Lib\\ORM' => $baseDir . '/lib/orm.php', + 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Activate_Action' => $baseDir . '/src/actions/addon-installation/addon-activate-action.php', + 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Install_Action' => $baseDir . '/src/actions/addon-installation/addon-install-action.php', + 'Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action' => $baseDir . '/src/actions/alert-dismissal-action.php', + 'Yoast\\WP\\SEO\\Actions\\Configuration\\First_Time_Configuration_Action' => $baseDir . '/src/actions/configuration/first-time-configuration-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Abstract_Aioseo_Importing_Action' => $baseDir . '/src/actions/importing/abstract-aioseo-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Abstract_Aioseo_Settings_Importing_Action' => $baseDir . '/src/actions/importing/aioseo/abstract-aioseo-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-cleanup-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-custom-archive-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-default-archive-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-general-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-posts-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-posttype-defaults-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-taxonomy-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action' => $baseDir . '/src/actions/importing/aioseo/aioseo-validate-data-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action' => $baseDir . '/src/actions/importing/deactivate-conflicting-plugins-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Importing_Action_Interface' => $baseDir . '/src/actions/importing/importing-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Importing_Indexation_Action_Interface' => $baseDir . '/src/actions/importing/importing-indexation-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action' => $baseDir . '/src/actions/indexables/indexable-head-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Abstract_Indexing_Action' => $baseDir . '/src/actions/indexing/abstract-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Abstract_Link_Indexing_Action' => $baseDir . '/src/actions/indexing/abstract-link-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action' => $baseDir . '/src/actions/indexing/indexable-general-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action' => $baseDir . '/src/actions/indexing/indexable-indexing-complete-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action' => $baseDir . '/src/actions/indexing/indexable-post-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action' => $baseDir . '/src/actions/indexing/indexable-post-type-archive-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action' => $baseDir . '/src/actions/indexing/indexable-term-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexation_Action_Interface' => $baseDir . '/src/actions/indexing/indexation-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Complete_Action' => $baseDir . '/src/actions/indexing/indexing-complete-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action' => $baseDir . '/src/actions/indexing/indexing-prepare-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Limited_Indexing_Action_Interface' => $baseDir . '/src/actions/indexing/limited-indexing-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action' => $baseDir . '/src/actions/indexing/post-link-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action' => $baseDir . '/src/actions/indexing/term-link-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Integrations_Action' => $baseDir . '/src/actions/integrations-action.php', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Login_Action' => $baseDir . '/src/actions/semrush/semrush-login-action.php', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Options_Action' => $baseDir . '/src/actions/semrush/semrush-options-action.php', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Phrases_Action' => $baseDir . '/src/actions/semrush/semrush-phrases-action.php', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action' => $baseDir . '/src/actions/wincher/wincher-account-action.php', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action' => $baseDir . '/src/actions/wincher/wincher-keyphrases-action.php', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Login_Action' => $baseDir . '/src/actions/wincher/wincher-login-action.php', + 'Yoast\\WP\\SEO\\Analytics\\Application\\Missing_Indexables_Collector' => $baseDir . '/src/analytics/application/missing-indexables-collector.php', + 'Yoast\\WP\\SEO\\Analytics\\Application\\To_Be_Cleaned_Indexables_Collector' => $baseDir . '/src/analytics/application/to-be-cleaned-indexables-collector.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\Missing_Indexable_Bucket' => $baseDir . '/src/analytics/domain/missing-indexable-bucket.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\Missing_Indexable_Count' => $baseDir . '/src/analytics/domain/missing-indexable-count.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\To_Be_Cleaned_Indexable_Bucket' => $baseDir . '/src/analytics/domain/to-be-cleaned-indexable-bucket.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\To_Be_Cleaned_Indexable_Count' => $baseDir . '/src/analytics/domain/to-be-cleaned-indexable-count.php', + 'Yoast\\WP\\SEO\\Analytics\\User_Interface\\Last_Completed_Indexation_Integration' => $baseDir . '/src/analytics/user-interface/last-completed-indexation-integration.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder' => $baseDir . '/src/builders/indexable-author-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Builder' => $baseDir . '/src/builders/indexable-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Date_Archive_Builder' => $baseDir . '/src/builders/indexable-date-archive-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder' => $baseDir . '/src/builders/indexable-hierarchy-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder' => $baseDir . '/src/builders/indexable-home-page-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder' => $baseDir . '/src/builders/indexable-link-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder' => $baseDir . '/src/builders/indexable-post-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder' => $baseDir . '/src/builders/indexable-post-type-archive-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Social_Image_Trait' => $baseDir . '/src/builders/indexable-social-image-trait.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_System_Page_Builder' => $baseDir . '/src/builders/indexable-system-page-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder' => $baseDir . '/src/builders/indexable-term-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder' => $baseDir . '/src/builders/primary-term-builder.php', + 'Yoast\\WP\\SEO\\Commands\\Cleanup_Command' => $baseDir . '/src/commands/cleanup-command.php', + 'Yoast\\WP\\SEO\\Commands\\Command_Interface' => $baseDir . '/src/commands/command-interface.php', + 'Yoast\\WP\\SEO\\Commands\\Index_Command' => $baseDir . '/src/commands/index-command.php', + 'Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional' => $baseDir . '/src/conditionals/addon-installation-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Doing_Post_Quick_Edit_Save_Conditional' => $baseDir . '/src/conditionals/admin/doing-post-quick-edit-save-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Estimated_Reading_Time_Conditional' => $baseDir . '/src/conditionals/admin/estimated-reading-time-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Licenses_Page_Conditional' => $baseDir . '/src/conditionals/admin/licenses-page-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Non_Network_Admin_Conditional' => $baseDir . '/src/conditionals/admin/non-network-admin-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional' => $baseDir . '/src/conditionals/admin/post-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional' => $baseDir . '/src/conditionals/admin/posts-overview-or-ajax-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional' => $baseDir . '/src/conditionals/admin/yoast-admin-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional' => $baseDir . '/src/conditionals/admin-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Attachment_Redirections_Enabled_Conditional' => $baseDir . '/src/conditionals/attachment-redirections-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Conditional' => $baseDir . '/src/conditionals/conditional-interface.php', + 'Yoast\\WP\\SEO\\Conditionals\\Deactivating_Yoast_Seo_Conditional' => $baseDir . '/src/conditionals/deactivating-yoast-seo-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Development_Conditional' => $baseDir . '/src/conditionals/development-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Feature_Flag_Conditional' => $baseDir . '/src/conditionals/feature-flag-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional' => $baseDir . '/src/conditionals/front-end-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional' => $baseDir . '/src/conditionals/get-request-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Headless_Rest_Endpoints_Enabled_Conditional' => $baseDir . '/src/conditionals/headless-rest-endpoints-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Import_Tool_Selected_Conditional' => $baseDir . '/src/conditionals/import-tool-selected-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Jetpack_Conditional' => $baseDir . '/src/conditionals/jetpack-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional' => $baseDir . '/src/conditionals/migrations-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional' => $baseDir . '/src/conditionals/new-settings-ui-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\News_Conditional' => $baseDir . '/src/conditionals/news-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\No_Conditionals' => $baseDir . '/src/conditionals/no-conditionals-trait.php', + 'Yoast\\WP\\SEO\\Conditionals\\No_Tool_Selected_Conditional' => $baseDir . '/src/conditionals/no-tool-selected-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Non_Multisite_Conditional' => $baseDir . '/src/conditionals/non-multisite-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Not_Admin_Ajax_Conditional' => $baseDir . '/src/conditionals/not-admin-ajax-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional' => $baseDir . '/src/conditionals/open-graph-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Premium_Active_Conditional' => $baseDir . '/src/conditionals/premium-active-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Premium_Inactive_Conditional' => $baseDir . '/src/conditionals/premium-inactive-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Primary_Category_Conditional' => $baseDir . '/src/conditionals/primary-category-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional' => $baseDir . '/src/conditionals/robots-txt-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\SEMrush_Enabled_Conditional' => $baseDir . '/src/conditionals/semrush-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional' => $baseDir . '/src/conditionals/settings-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Should_Index_Links_Conditional' => $baseDir . '/src/conditionals/should-index-links-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional' => $baseDir . '/src/conditionals/text-formality-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional' => $baseDir . '/src/conditionals/third-party/elementor-activated-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional' => $baseDir . '/src/conditionals/third-party/elementor-edit-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Active_Conditional' => $baseDir . '/src/conditionals/third-party/jetpack-boost-active-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Not_Premium_Conditional' => $baseDir . '/src/conditionals/third-party/jetpack-boost-not-premium-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional' => $baseDir . '/src/conditionals/third-party/polylang-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional' => $baseDir . '/src/conditionals/third-party/translatepress-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\W3_Total_Cache_Conditional' => $baseDir . '/src/conditionals/third-party/w3-total-cache-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional' => $baseDir . '/src/conditionals/third-party/wpml-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional' => $baseDir . '/src/conditionals/third-party/wpml-wpseo-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Integration_Active_Conditional' => $baseDir . '/src/deprecated/src/conditionals/third-party/wordproof-integration-active-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Plugin_Inactive_Conditional' => $baseDir . '/src/deprecated/src/conditionals/third-party/wordproof-plugin-inactive-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Traits\\Admin_Conditional_Trait' => $baseDir . '/src/conditionals/traits/admin-conditional-trait.php', + 'Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional' => $baseDir . '/src/conditionals/updated-importer-framework-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Edit_Users_Conditional' => $baseDir . '/src/conditionals/user-can-edit-users-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional' => $baseDir . '/src/conditionals/user-can-manage-wpseo-options-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Publish_Posts_And_Pages_Conditional' => $baseDir . '/src/conditionals/user-can-publish-posts-and-pages-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Edit_Conditional' => $baseDir . '/src/conditionals/user-edit-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional' => $baseDir . '/src/conditionals/user-profile-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional' => $baseDir . '/src/conditionals/wp-cron-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\WP_Robots_Conditional' => $baseDir . '/src/conditionals/wp-robots-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Web_Stories_Conditional' => $baseDir . '/src/conditionals/web-stories-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Automatically_Track_Conditional' => $baseDir . '/src/conditionals/wincher-automatically-track-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Conditional' => $baseDir . '/src/conditionals/wincher-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional' => $baseDir . '/src/conditionals/wincher-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Token_Conditional' => $baseDir . '/src/conditionals/wincher-token-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional' => $baseDir . '/src/conditionals/woocommerce-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\XMLRPC_Conditional' => $baseDir . '/src/conditionals/xmlrpc-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional' => $baseDir . '/src/conditionals/yoast-admin-and-dashboard-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Tools_Page_Conditional' => $baseDir . '/src/conditionals/yoast-tools-page-conditional.php', + 'Yoast\\WP\\SEO\\Config\\Badge_Group_Names' => $baseDir . '/src/config/badge-group-names.php', + 'Yoast\\WP\\SEO\\Config\\Conflicting_Plugins' => $baseDir . '/src/config/conflicting-plugins.php', + 'Yoast\\WP\\SEO\\Config\\Indexing_Reasons' => $baseDir . '/src/config/indexing-reasons.php', + 'Yoast\\WP\\SEO\\Config\\Migration_Status' => $baseDir . '/src/config/migration-status.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddCollationToTables' => $baseDir . '/src/config/migrations/20200408101900_AddCollationToTables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddColumnsToIndexables' => $baseDir . '/src/config/migrations/20200420073606_AddColumnsToIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddEstimatedReadingTime' => $baseDir . '/src/config/migrations/20201202144329_AddEstimatedReadingTime.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddHasAncestorsColumn' => $baseDir . '/src/config/migrations/20200609154515_AddHasAncestorsColumn.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddInclusiveLanguageScore' => $baseDir . '/src/config/migrations/20230417083836_AddInclusiveLanguageScore.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexableObjectIdAndTypeIndex' => $baseDir . '/src/config/migrations/20200430075614_AddIndexableObjectIdAndTypeIndex.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexesForProminentWordsOnIndexables' => $baseDir . '/src/config/migrations/20200728095334_AddIndexesForProminentWordsOnIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddObjectTimestamps' => $baseDir . '/src/config/migrations/20211020091404_AddObjectTimestamps.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddVersionColumnToIndexables' => $baseDir . '/src/config/migrations/20210817092415_AddVersionColumnToIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\BreadcrumbTitleAndHierarchyReset' => $baseDir . '/src/config/migrations/20200428123747_BreadcrumbTitleAndHierarchyReset.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ClearIndexableTables' => $baseDir . '/src/config/migrations/20200430150130_ClearIndexableTables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateIndexableSubpagesIndex' => $baseDir . '/src/config/migrations/20200702141921_CreateIndexableSubpagesIndex.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateSEOLinksTable' => $baseDir . '/src/config/migrations/20200617122511_CreateSEOLinksTable.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\DeleteDuplicateIndexables' => $baseDir . '/src/config/migrations/20200507054848_DeleteDuplicateIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableColumnLengths' => $baseDir . '/src/config/migrations/20200428194858_ExpandIndexableColumnLengths.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableIDColumnLengths' => $baseDir . '/src/config/migrations/20201216124002_ExpandIndexableIDColumnLengths.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandPrimaryTermIDColumnLengths' => $baseDir . '/src/config/migrations/20201216141134_ExpandPrimaryTermIDColumnLengths.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ReplacePermalinkHashIndex' => $baseDir . '/src/config/migrations/20200616130143_ReplacePermalinkHashIndex.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ResetIndexableHierarchyTable' => $baseDir . '/src/config/migrations/20200513133401_ResetIndexableHierarchyTable.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\TruncateIndexableTables' => $baseDir . '/src/config/migrations/20200429105310_TruncateIndexableTables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastDropIndexableMetaTableIfExists' => $baseDir . '/src/config/migrations/20190529075038_WpYoastDropIndexableMetaTableIfExists.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexable' => $baseDir . '/src/config/migrations/20171228151840_WpYoastIndexable.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexableHierarchy' => $baseDir . '/src/config/migrations/20191011111109_WpYoastIndexableHierarchy.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPrimaryTerm' => $baseDir . '/src/config/migrations/20171228151841_WpYoastPrimaryTerm.php', + 'Yoast\\WP\\SEO\\Config\\OAuth_Client' => $baseDir . '/src/config/oauth-client.php', + 'Yoast\\WP\\SEO\\Config\\Researcher_Languages' => $baseDir . '/src/config/researcher-languages.php', + 'Yoast\\WP\\SEO\\Config\\SEMrush_Client' => $baseDir . '/src/config/semrush-client.php', + 'Yoast\\WP\\SEO\\Config\\Schema_IDs' => $baseDir . '/src/config/schema-ids.php', + 'Yoast\\WP\\SEO\\Config\\Schema_Types' => $baseDir . '/src/config/schema-types.php', + 'Yoast\\WP\\SEO\\Config\\Wincher_Client' => $baseDir . '/src/config/wincher-client.php', + 'Yoast\\WP\\SEO\\Config\\Wincher_PKCE_Provider' => $baseDir . '/src/config/wincher-pkce-provider.php', + 'Yoast\\WP\\SEO\\Config\\Wordproof_App_Config' => $baseDir . '/src/deprecated/src/config/wordproof-app-config.php', + 'Yoast\\WP\\SEO\\Config\\Wordproof_Translations' => $baseDir . '/src/deprecated/src/config/wordproof-translations.php', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications' => $baseDir . '/src/content-type-visibility/application/content-type-visibility-dismiss-notifications.php', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Watcher_Actions' => $baseDir . '/src/content-type-visibility/application/content-type-visibility-watcher-actions.php', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\User_Interface\\Content_Type_Visibility_Dismiss_New_Route' => $baseDir . '/src/content-type-visibility/user-interface/content-type-visibility-dismiss-new-route.php', + 'Yoast\\WP\\SEO\\Context\\Meta_Tags_Context' => $baseDir . '/src/context/meta-tags-context.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Analysis_Features\\Enabled_Analysis_Features_Repository' => $baseDir . '/src/editors/application/analysis-features/enabled-analysis-features-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Integrations\\Integration_Information_Repository' => $baseDir . '/src/editors/application/integrations/integration-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Post_Seo_Information_Repository' => $baseDir . '/src/editors/application/seo/post-seo-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Term_Seo_Information_Repository' => $baseDir . '/src/editors/application/seo/term-seo-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Site\\Website_Information_Repository' => $baseDir . '/src/editors/application/site/website-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Feature' => $baseDir . '/src/editors/domain/analysis-features/analysis-feature.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Feature_Interface' => $baseDir . '/src/editors/domain/analysis-features/analysis-feature-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Features_List' => $baseDir . '/src/editors/domain/analysis-features/analysis-features-list.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Integrations\\Integration_Data_Provider_Interface' => $baseDir . '/src/editors/domain/integrations/integration-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Description' => $baseDir . '/src/editors/domain/seo/description.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Keyphrase' => $baseDir . '/src/editors/domain/seo/keyphrase.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Seo_Plugin_Data_Interface' => $baseDir . '/src/editors/domain/seo/seo-plugin-data-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Social' => $baseDir . '/src/editors/domain/seo/social.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Title' => $baseDir . '/src/editors/domain/seo/title.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Cornerstone_Content' => $baseDir . '/src/editors/framework/cornerstone-content.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Inclusive_Language_Analysis' => $baseDir . '/src/editors/framework/inclusive-language-analysis.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Jetpack_Markdown' => $baseDir . '/src/editors/framework/integrations/jetpack-markdown.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Multilingual' => $baseDir . '/src/editors/framework/integrations/multilingual.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Semrush' => $baseDir . '/src/editors/framework/integrations/semrush.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Wincher' => $baseDir . '/src/editors/framework/integrations/wincher.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Keyphrase_Analysis' => $baseDir . '/src/editors/framework/keyphrase-analysis.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Previously_Used_Keyphrase' => $baseDir . '/src/editors/framework/previously-used-keyphrase.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Readability_Analysis' => $baseDir . '/src/editors/framework/readability-analysis.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Description_Data_Provider_Interface' => $baseDir . '/src/editors/framework/seo/description-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Keyphrase_Interface' => $baseDir . '/src/editors/framework/seo/keyphrase-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Abstract_Post_Seo_Data_Provider' => $baseDir . '/src/editors/framework/seo/posts/abstract-post-seo-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Description_Data_Provider' => $baseDir . '/src/editors/framework/seo/posts/description-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Keyphrase_Data_Provider' => $baseDir . '/src/editors/framework/seo/posts/keyphrase-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Social_Data_Provider' => $baseDir . '/src/editors/framework/seo/posts/social-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Title_Data_Provider' => $baseDir . '/src/editors/framework/seo/posts/title-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Social_Data_Provider_Interface' => $baseDir . '/src/editors/framework/seo/social-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Abstract_Term_Seo_Data_Provider' => $baseDir . '/src/editors/framework/seo/terms/abstract-term-seo-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Description_Data_Provider' => $baseDir . '/src/editors/framework/seo/terms/description-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Keyphrase_Data_Provider' => $baseDir . '/src/editors/framework/seo/terms/keyphrase-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Social_Data_Provider' => $baseDir . '/src/editors/framework/seo/terms/social-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Title_Data_Provider' => $baseDir . '/src/editors/framework/seo/terms/title-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Title_Data_Provider_Interface' => $baseDir . '/src/editors/framework/seo/title-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Base_Site_Information' => $baseDir . '/src/editors/framework/site/base-site-information.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Post_Site_Information' => $baseDir . '/src/editors/framework/site/post-site-information.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Term_Site_Information' => $baseDir . '/src/editors/framework/site/term-site-information.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Word_Form_Recognition' => $baseDir . '/src/editors/framework/word-form-recognition.php', + 'Yoast\\WP\\SEO\\Elementor\\Infrastructure\\Request_Post' => $baseDir . '/src/elementor/infrastructure/request-post.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\Addon_Activation_Error_Exception' => $baseDir . '/src/exceptions/addon-installation/addon-activation-error-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\Addon_Already_Installed_Exception' => $baseDir . '/src/exceptions/addon-installation/addon-already-installed-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\Addon_Installation_Error_Exception' => $baseDir . '/src/exceptions/addon-installation/addon-installation-error-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\User_Cannot_Activate_Plugins_Exception' => $baseDir . '/src/exceptions/addon-installation/user-cannot-activate-plugins-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\User_Cannot_Install_Plugins_Exception' => $baseDir . '/src/exceptions/addon-installation/user-cannot-install-plugins-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Forbidden_Property_Mutation_Exception' => $baseDir . '/src/exceptions/forbidden-property-mutation-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Importing\\Aioseo_Validation_Exception' => $baseDir . '/src/exceptions/importing/aioseo-validation-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Author_Not_Built_Exception' => $baseDir . '/src/exceptions/indexable/author-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Indexable_Exception' => $baseDir . '/src/exceptions/indexable/indexable-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Invalid_Term_Exception' => $baseDir . '/src/exceptions/indexable/invalid-term-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Not_Built_Exception' => $baseDir . '/src/exceptions/indexable/not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Post_Not_Built_Exception' => $baseDir . '/src/exceptions/indexable/post-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Post_Not_Found_Exception' => $baseDir . '/src/exceptions/indexable/post-not-found-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Post_Type_Not_Built_Exception' => $baseDir . '/src/exceptions/indexable/post-type-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Source_Exception' => $baseDir . '/src/exceptions/indexable/source-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Term_Not_Built_Exception' => $baseDir . '/src/exceptions/indexable/term-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Term_Not_Found_Exception' => $baseDir . '/src/exceptions/indexable/term-not-found-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Missing_Method' => $baseDir . '/src/exceptions/missing-method.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Authentication_Failed_Exception' => $baseDir . '/src/exceptions/oauth/authentication-failed-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Tokens\\Empty_Property_Exception' => $baseDir . '/src/exceptions/oauth/tokens/empty-property-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Tokens\\Empty_Token_Exception' => $baseDir . '/src/exceptions/oauth/tokens/empty-token-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Tokens\\Failed_Storage_Exception' => $baseDir . '/src/exceptions/oauth/tokens/failed-storage-exception.php', + 'Yoast\\WP\\SEO\\Generated\\Cached_Container' => $baseDir . '/src/generated/container.php', + 'Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator' => $baseDir . '/src/generators/breadcrumbs-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Generator_Interface' => $baseDir . '/src/generators/generator-interface.php', + 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator' => $baseDir . '/src/generators/open-graph-image-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator' => $baseDir . '/src/generators/open-graph-locale-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Abstract_Schema_Piece' => $baseDir . '/src/generators/schema/abstract-schema-piece.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Article' => $baseDir . '/src/generators/schema/article.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Author' => $baseDir . '/src/generators/schema/author.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Breadcrumb' => $baseDir . '/src/generators/schema/breadcrumb.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\FAQ' => $baseDir . '/src/generators/schema/faq.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\HowTo' => $baseDir . '/src/generators/schema/howto.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Main_Image' => $baseDir . '/src/generators/schema/main-image.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Organization' => $baseDir . '/src/generators/schema/organization.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Person' => $baseDir . '/src/generators/schema/person.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\WebPage' => $baseDir . '/src/generators/schema/webpage.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Website' => $baseDir . '/src/generators/schema/website.php', + 'Yoast\\WP\\SEO\\Generators\\Schema_Generator' => $baseDir . '/src/generators/schema-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator' => $baseDir . '/src/generators/twitter-image-generator.php', + 'Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper' => $baseDir . '/src/helpers/aioseo-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Asset_Helper' => $baseDir . '/src/helpers/asset-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper' => $baseDir . '/src/helpers/attachment-cleanup-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper' => $baseDir . '/src/helpers/author-archive-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Blocks_Helper' => $baseDir . '/src/helpers/blocks-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Capability_Helper' => $baseDir . '/src/helpers/capability-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Crawl_Cleanup_Helper' => $baseDir . '/src/helpers/crawl-cleanup-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Curl_Helper' => $baseDir . '/src/helpers/curl-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper' => $baseDir . '/src/helpers/current-page-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Date_Helper' => $baseDir . '/src/helpers/date-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Environment_Helper' => $baseDir . '/src/helpers/environment-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\First_Time_Configuration_Notice_Helper' => $baseDir . '/src/helpers/first-time-configuration-notice-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Home_Url_Helper' => $baseDir . '/src/helpers/home-url-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Image_Helper' => $baseDir . '/src/helpers/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper' => $baseDir . '/src/helpers/import-cursor-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Import_Helper' => $baseDir . '/src/helpers/import-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Indexable_Helper' => $baseDir . '/src/helpers/indexable-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Indexable_To_Postmeta_Helper' => $baseDir . '/src/helpers/indexable-to-postmeta-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Indexing_Helper' => $baseDir . '/src/helpers/indexing-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Language_Helper' => $baseDir . '/src/helpers/language-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Meta_Helper' => $baseDir . '/src/helpers/meta-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Notification_Helper' => $baseDir . '/src/helpers/notification-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper' => $baseDir . '/src/helpers/open-graph/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper' => $baseDir . '/src/helpers/open-graph/values-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Options_Helper' => $baseDir . '/src/helpers/options-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Pagination_Helper' => $baseDir . '/src/helpers/pagination-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Permalink_Helper' => $baseDir . '/src/helpers/permalink-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Post_Helper' => $baseDir . '/src/helpers/post-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper' => $baseDir . '/src/helpers/post-type-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper' => $baseDir . '/src/helpers/primary-term-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Product_Helper' => $baseDir . '/src/helpers/product-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Redirect_Helper' => $baseDir . '/src/helpers/redirect-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Request_Helper' => $baseDir . '/src/helpers/request-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Require_File_Helper' => $baseDir . '/src/helpers/require-file-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Robots_Helper' => $baseDir . '/src/helpers/robots-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper' => $baseDir . '/src/helpers/robots-txt-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper' => $baseDir . '/src/helpers/sanitization-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper' => $baseDir . '/src/helpers/schema/article-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper' => $baseDir . '/src/helpers/schema/html-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper' => $baseDir . '/src/helpers/schema/id-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Image_Helper' => $baseDir . '/src/helpers/schema/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper' => $baseDir . '/src/helpers/schema/language-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Replace_Vars_Helper' => $baseDir . '/src/helpers/schema/replace-vars-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper' => $baseDir . '/src/helpers/score-icon-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper' => $baseDir . '/src/helpers/short-link-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Site_Helper' => $baseDir . '/src/helpers/site-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper' => $baseDir . '/src/helpers/social-profiles-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\String_Helper' => $baseDir . '/src/helpers/string-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper' => $baseDir . '/src/helpers/taxonomy-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper' => $baseDir . '/src/helpers/twitter/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Url_Helper' => $baseDir . '/src/helpers/url-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\User_Helper' => $baseDir . '/src/helpers/user-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wincher_Helper' => $baseDir . '/src/helpers/wincher-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper' => $baseDir . '/src/helpers/woocommerce-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wordpress_Helper' => $baseDir . '/src/helpers/wordpress-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper' => $baseDir . '/src/deprecated/src/helpers/wordproof-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wpdb_Helper' => $baseDir . '/src/helpers/wpdb-helper.php', + 'Yoast\\WP\\SEO\\Initializers\\Crawl_Cleanup_Permalinks' => $baseDir . '/src/initializers/crawl-cleanup-permalinks.php', + 'Yoast\\WP\\SEO\\Initializers\\Disable_Core_Sitemaps' => $baseDir . '/src/initializers/disable-core-sitemaps.php', + 'Yoast\\WP\\SEO\\Initializers\\Initializer_Interface' => $baseDir . '/src/initializers/initializer-interface.php', + 'Yoast\\WP\\SEO\\Initializers\\Migration_Runner' => $baseDir . '/src/initializers/migration-runner.php', + 'Yoast\\WP\\SEO\\Initializers\\Woocommerce' => $baseDir . '/src/initializers/woocommerce.php', + 'Yoast\\WP\\SEO\\Integrations\\Abstract_Exclude_Post_Type' => $baseDir . '/src/integrations/abstract-exclude-post-type.php', + 'Yoast\\WP\\SEO\\Integrations\\Academy_Integration' => $baseDir . '/src/integrations/academy-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Activation_Cleanup_Integration' => $baseDir . '/src/integrations/admin/activation-cleanup-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Dialog_Integration' => $baseDir . '/src/integrations/admin/addon-installation/dialog-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Installation_Integration' => $baseDir . '/src/integrations/admin/addon-installation/installation-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration' => $baseDir . '/src/integrations/admin/admin-columns-cache-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Background_Indexing_Integration' => $baseDir . '/src/integrations/admin/background-indexing-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Crawl_Settings_Integration' => $baseDir . '/src/integrations/admin/crawl-settings-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Cron_Integration' => $baseDir . '/src/integrations/admin/cron-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Deactivated_Premium_Integration' => $baseDir . '/src/integrations/admin/deactivated-premium-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Disable_Concatenate_Scripts_Integration' => $baseDir . '/src/deprecated/src/integrations/admin/disable-concatenate-scripts-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Integration' => $baseDir . '/src/integrations/admin/first-time-configuration-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Notice_Integration' => $baseDir . '/src/integrations/admin/first-time-configuration-notice-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Fix_News_Dependencies_Integration' => $baseDir . '/src/integrations/admin/fix-news-dependencies-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Health_Check_Integration' => $baseDir . '/src/integrations/admin/health-check-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\HelpScout_Beacon' => $baseDir . '/src/integrations/admin/helpscout-beacon.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Import_Integration' => $baseDir . '/src/integrations/admin/import-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexables_Exclude_Taxonomy_Integration' => $baseDir . '/src/integrations/admin/indexables-exclude-taxonomy-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Notification_Integration' => $baseDir . '/src/integrations/admin/indexing-notification-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Tool_Integration' => $baseDir . '/src/integrations/admin/indexing-tool-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Installation_Success_Integration' => $baseDir . '/src/integrations/admin/installation-success-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Integrations_Page' => $baseDir . '/src/integrations/admin/integrations-page.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Link_Count_Columns_Integration' => $baseDir . '/src/integrations/admin/link-count-columns-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Menu_Badge_Integration' => $baseDir . '/src/integrations/admin/menu-badge-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Migration_Error_Integration' => $baseDir . '/src/integrations/admin/migration-error-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Configuration_Integration' => $baseDir . '/src/integrations/admin/old-configuration-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Premium_Integration' => $baseDir . '/src/deprecated/src/integrations/admin/old-premium-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirect_Integration' => $baseDir . '/src/integrations/admin/redirect-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirects_Page_Integration' => $baseDir . '/src/integrations/admin/redirects-page-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Unsupported_PHP_Version_Notice' => $baseDir . '/src/integrations/admin/unsupported-php-version-notice.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Workouts_Integration' => $baseDir . '/src/integrations/admin/workouts-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Abstract_Dismissable_Alert' => $baseDir . '/src/integrations/alerts/abstract-dismissable-alert.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Product_Editor_Checklist_Notification' => $baseDir . '/src/integrations/alerts/black-friday-product-editor-checklist-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Promotion_Notification' => $baseDir . '/src/integrations/alerts/black-friday-promotion-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Sidebar_Checklist_Notification' => $baseDir . '/src/integrations/alerts/black-friday-sidebar-checklist-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Jetpack_Boost_Pre_Publish' => $baseDir . '/src/integrations/alerts/jetpack-boost-pre-publish.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Trustpilot_Review_Notification' => $baseDir . '/src/integrations/alerts/trustpilot-review-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Webinar_Promo_Notification' => $baseDir . '/src/integrations/alerts/webinar-promo-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Breadcrumbs_Block' => $baseDir . '/src/integrations/blocks/breadcrumbs-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Dynamic_Block' => $baseDir . '/src/integrations/blocks/abstract-dynamic-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Dynamic_Block_V3' => $baseDir . '/src/integrations/blocks/abstract-dynamic-block-v3.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Internal_Linking_Category' => $baseDir . '/src/integrations/blocks/block-categories.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Structured_Data_Blocks' => $baseDir . '/src/integrations/blocks/structured-data-blocks.php', + 'Yoast\\WP\\SEO\\Integrations\\Breadcrumbs_Integration' => $baseDir . '/src/integrations/breadcrumbs-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration' => $baseDir . '/src/integrations/cleanup-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Duplicate_Post_Integration' => $baseDir . '/src/deprecated/src/integrations/duplicate-post-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Estimated_Reading_Time' => $baseDir . '/src/integrations/estimated-reading-time.php', + 'Yoast\\WP\\SEO\\Integrations\\Exclude_Attachment_Post_Type' => $baseDir . '/src/integrations/exclude-attachment-post-type.php', + 'Yoast\\WP\\SEO\\Integrations\\Exclude_Oembed_Cache_Post_Type' => $baseDir . '/src/integrations/exclude-oembed-cache-post-type.php', + 'Yoast\\WP\\SEO\\Integrations\\Feature_Flag_Integration' => $baseDir . '/src/integrations/feature-flag-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Backwards_Compatibility' => $baseDir . '/src/integrations/front-end/backwards-compatibility.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Category_Term_Description' => $baseDir . '/src/integrations/front-end/category-term-description.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Comment_Link_Fixer' => $baseDir . '/src/integrations/front-end/comment-link-fixer.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Basic' => $baseDir . '/src/integrations/front-end/crawl-cleanup-basic.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Rss' => $baseDir . '/src/integrations/front-end/crawl-cleanup-rss.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Searches' => $baseDir . '/src/integrations/front-end/crawl-cleanup-searches.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Feed_Improvements' => $baseDir . '/src/integrations/front-end/feed-improvements.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Force_Rewrite_Title' => $baseDir . '/src/integrations/front-end/force-rewrite-title.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Handle_404' => $baseDir . '/src/integrations/front-end/handle-404.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Indexing_Controls' => $baseDir . '/src/integrations/front-end/indexing-controls.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Open_Graph_OEmbed' => $baseDir . '/src/integrations/front-end/open-graph-oembed.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\RSS_Footer_Embed' => $baseDir . '/src/integrations/front-end/rss-footer-embed.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Redirects' => $baseDir . '/src/integrations/front-end/redirects.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Robots_Txt_Integration' => $baseDir . '/src/integrations/front-end/robots-txt-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Schema_Accessibility_Feature' => $baseDir . '/src/integrations/front-end/schema-accessibility-feature.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\WP_Robots_Integration' => $baseDir . '/src/integrations/front-end/wp-robots-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End_Integration' => $baseDir . '/src/integrations/front-end-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Integration_Interface' => $baseDir . '/src/integrations/integration-interface.php', + 'Yoast\\WP\\SEO\\Integrations\\Primary_Category' => $baseDir . '/src/integrations/primary-category.php', + 'Yoast\\WP\\SEO\\Integrations\\Settings_Integration' => $baseDir . '/src/integrations/settings-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Support_Integration' => $baseDir . '/src/integrations/support-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\AMP' => $baseDir . '/src/integrations/third-party/amp.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\BbPress' => $baseDir . '/src/integrations/third-party/bbpress.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Elementor' => $baseDir . '/src/integrations/third-party/elementor.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_Elementor_Post_Types' => $baseDir . '/src/integrations/third-party/exclude-elementor-post-types.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_WooCommerce_Post_Types' => $baseDir . '/src/integrations/third-party/exclude-woocommerce-post-types.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Jetpack' => $baseDir . '/src/integrations/third-party/jetpack.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\W3_Total_Cache' => $baseDir . '/src/integrations/third-party/w3-total-cache.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML' => $baseDir . '/src/integrations/third-party/wpml.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML_WPSEO_Notification' => $baseDir . '/src/integrations/third-party/wpml-wpseo-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories' => $baseDir . '/src/integrations/third-party/web-stories.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories_Post_Edit' => $baseDir . '/src/integrations/third-party/web-stories-post-edit.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher' => $baseDir . '/src/deprecated/src/integrations/third-party/wincher.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Publish' => $baseDir . '/src/integrations/third-party/wincher-publish.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce' => $baseDir . '/src/integrations/third-party/woocommerce.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce_Post_Edit' => $baseDir . '/src/integrations/third-party/woocommerce-post-edit.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Woocommerce_Permalinks' => $baseDir . '/src/integrations/third-party/woocommerce-permalinks.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof' => $baseDir . '/src/deprecated/src/integrations/third-party/wordproof.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof_Integration_Toggle' => $baseDir . '/src/deprecated/src/integrations/third-party/wordproof-integration-toggle.php', + 'Yoast\\WP\\SEO\\Integrations\\Uninstall_Integration' => $baseDir . '/src/integrations/uninstall-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Addon_Update_Watcher' => $baseDir . '/src/integrations/watchers/addon-update-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Auto_Update_Watcher' => $baseDir . '/src/integrations/watchers/auto-update-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Ancestor_Watcher' => $baseDir . '/src/integrations/watchers/indexable-ancestor-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Attachment_Watcher' => $baseDir . '/src/integrations/watchers/indexable-attachment-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Archive_Watcher' => $baseDir . '/src/integrations/watchers/indexable-author-archive-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Watcher' => $baseDir . '/src/integrations/watchers/indexable-author-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Category_Permalink_Watcher' => $baseDir . '/src/integrations/watchers/indexable-category-permalink-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Date_Archive_Watcher' => $baseDir . '/src/integrations/watchers/indexable-date-archive-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_HomeUrl_Watcher' => $baseDir . '/src/integrations/watchers/indexable-homeurl-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Home_Page_Watcher' => $baseDir . '/src/integrations/watchers/indexable-home-page-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Permalink_Watcher' => $baseDir . '/src/integrations/watchers/indexable-permalink-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Meta_Watcher' => $baseDir . '/src/integrations/watchers/indexable-post-meta-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Archive_Watcher' => $baseDir . '/src/integrations/watchers/indexable-post-type-archive-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Change_Watcher' => $baseDir . '/src/integrations/watchers/indexable-post-type-change-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher' => $baseDir . '/src/integrations/watchers/indexable-post-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Static_Home_Page_Watcher' => $baseDir . '/src/integrations/watchers/indexable-static-home-page-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_System_Page_Watcher' => $baseDir . '/src/integrations/watchers/indexable-system-page-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Taxonomy_Change_Watcher' => $baseDir . '/src/integrations/watchers/indexable-taxonomy-change-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Term_Watcher' => $baseDir . '/src/integrations/watchers/indexable-term-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Titles_Watcher' => $baseDir . '/src/integrations/watchers/option-titles-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Wpseo_Watcher' => $baseDir . '/src/integrations/watchers/option-wpseo-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Category_Quick_Edit_Watcher' => $baseDir . '/src/integrations/watchers/primary-category-quick-edit-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Term_Watcher' => $baseDir . '/src/integrations/watchers/primary-term-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Search_Engines_Discouraged_Watcher' => $baseDir . '/src/integrations/watchers/search-engines-discouraged-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Woocommerce_Beta_Editor_Watcher' => $baseDir . '/src/integrations/watchers/woocommerce-beta-editor-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\XMLRPC' => $baseDir . '/src/integrations/xmlrpc.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Fix_Assessments_Upsell' => $baseDir . '/src/introductions/application/ai-fix-assessments-upsell.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell' => $baseDir . '/src/deprecated/src/introductions/application/ai-generate-titles-and-descriptions-introduction-upsell.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Current_Page_Trait' => $baseDir . '/src/introductions/application/current-page-trait.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector' => $baseDir . '/src/introductions/application/introductions-collector.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\User_Allowed_Trait' => $baseDir . '/src/introductions/application/user-allowed-trait.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Version_Trait' => $baseDir . '/src/introductions/application/version-trait.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introduction_Interface' => $baseDir . '/src/introductions/domain/introduction-interface.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introduction_Item' => $baseDir . '/src/introductions/domain/introduction-item.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introductions_Bucket' => $baseDir . '/src/introductions/domain/introductions-bucket.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Invalid_User_Id_Exception' => $baseDir . '/src/introductions/domain/invalid-user-id-exception.php', + 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Introductions_Seen_Repository' => $baseDir . '/src/introductions/infrastructure/introductions-seen-repository.php', + 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository' => $baseDir . '/src/introductions/infrastructure/wistia-embed-permission-repository.php', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Integration' => $baseDir . '/src/introductions/user-interface/introductions-integration.php', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Seen_Route' => $baseDir . '/src/introductions/user-interface/introductions-seen-route.php', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Wistia_Embed_Permission_Route' => $baseDir . '/src/introductions/user-interface/wistia-embed-permission-route.php', + 'Yoast\\WP\\SEO\\Loadable_Interface' => $baseDir . '/src/loadable-interface.php', + 'Yoast\\WP\\SEO\\Loader' => $baseDir . '/src/loader.php', + 'Yoast\\WP\\SEO\\Loggers\\Logger' => $baseDir . '/src/loggers/logger.php', + 'Yoast\\WP\\SEO\\Main' => $baseDir . '/src/main.php', + 'Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer' => $baseDir . '/src/memoizers/meta-tags-context-memoizer.php', + 'Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer' => $baseDir . '/src/memoizers/presentation-memoizer.php', + 'Yoast\\WP\\SEO\\Models\\Indexable' => $baseDir . '/src/models/indexable.php', + 'Yoast\\WP\\SEO\\Models\\Indexable_Extension' => $baseDir . '/src/models/indexable-extension.php', + 'Yoast\\WP\\SEO\\Models\\Indexable_Hierarchy' => $baseDir . '/src/models/indexable-hierarchy.php', + 'Yoast\\WP\\SEO\\Models\\Primary_Term' => $baseDir . '/src/models/primary-term.php', + 'Yoast\\WP\\SEO\\Models\\SEO_Links' => $baseDir . '/src/models/seo-links.php', + 'Yoast\\WP\\SEO\\Models\\SEO_Meta' => $baseDir . '/src/models/seo-meta.php', + 'Yoast\\WP\\SEO\\Presentations\\Abstract_Presentation' => $baseDir . '/src/presentations/abstract-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Archive_Adjacent' => $baseDir . '/src/presentations/archive-adjacent-trait.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Author_Archive_Presentation' => $baseDir . '/src/presentations/indexable-author-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Date_Archive_Presentation' => $baseDir . '/src/presentations/indexable-date-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Error_Page_Presentation' => $baseDir . '/src/presentations/indexable-error-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Home_Page_Presentation' => $baseDir . '/src/presentations/indexable-home-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Archive_Presentation' => $baseDir . '/src/presentations/indexable-post-type-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Presentation' => $baseDir . '/src/presentations/indexable-post-type-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Presentation' => $baseDir . '/src/presentations/indexable-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Search_Result_Page_Presentation' => $baseDir . '/src/presentations/indexable-search-result-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Home_Page_Presentation' => $baseDir . '/src/presentations/indexable-static-home-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Posts_Page_Presentation' => $baseDir . '/src/presentations/indexable-static-posts-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Term_Archive_Presentation' => $baseDir . '/src/presentations/indexable-term-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presenters\\Abstract_Indexable_Presenter' => $baseDir . '/src/presenters/abstract-indexable-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Abstract_Indexable_Tag_Presenter' => $baseDir . '/src/presenters/abstract-indexable-tag-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Abstract_Presenter' => $baseDir . '/src/presenters/abstract-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Alert_Presenter' => $baseDir . '/src/presenters/admin/alert-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Badge_Presenter' => $baseDir . '/src/presenters/admin/badge-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Beta_Badge_Presenter' => $baseDir . '/src/presenters/admin/beta-badge-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Help_Link_Presenter' => $baseDir . '/src/presenters/admin/help-link-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_Error_Presenter' => $baseDir . '/src/presenters/admin/indexing-error-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_Failed_Notification_Presenter' => $baseDir . '/src/presenters/admin/indexing-failed-notification-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_List_Item_Presenter' => $baseDir . '/src/presenters/admin/indexing-list-item-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_Notification_Presenter' => $baseDir . '/src/presenters/admin/indexing-notification-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Light_Switch_Presenter' => $baseDir . '/src/presenters/admin/light-switch-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Meta_Fields_Presenter' => $baseDir . '/src/presenters/admin/meta-fields-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Migration_Error_Presenter' => $baseDir . '/src/presenters/admin/migration-error-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Notice_Presenter' => $baseDir . '/src/presenters/admin/notice-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Premium_Badge_Presenter' => $baseDir . '/src/presenters/admin/premium-badge-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Search_Engines_Discouraged_Presenter' => $baseDir . '/src/presenters/admin/search-engines-discouraged-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Sidebar_Presenter' => $baseDir . '/src/presenters/admin/sidebar-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Woocommerce_Beta_Editor_Presenter' => $baseDir . '/src/presenters/admin/woocommerce-beta-editor-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Breadcrumbs_Presenter' => $baseDir . '/src/presenters/breadcrumbs-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Canonical_Presenter' => $baseDir . '/src/presenters/canonical-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Debug\\Marker_Close_Presenter' => $baseDir . '/src/presenters/debug/marker-close-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Debug\\Marker_Open_Presenter' => $baseDir . '/src/presenters/debug/marker-open-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Meta_Author_Presenter' => $baseDir . '/src/presenters/meta-author-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Meta_Description_Presenter' => $baseDir . '/src/presenters/meta-description-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Author_Presenter' => $baseDir . '/src/presenters/open-graph/article-author-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Modified_Time_Presenter' => $baseDir . '/src/presenters/open-graph/article-modified-time-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Published_Time_Presenter' => $baseDir . '/src/presenters/open-graph/article-published-time-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Publisher_Presenter' => $baseDir . '/src/presenters/open-graph/article-publisher-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Description_Presenter' => $baseDir . '/src/presenters/open-graph/description-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Image_Presenter' => $baseDir . '/src/presenters/open-graph/image-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Locale_Presenter' => $baseDir . '/src/presenters/open-graph/locale-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Site_Name_Presenter' => $baseDir . '/src/presenters/open-graph/site-name-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Title_Presenter' => $baseDir . '/src/presenters/open-graph/title-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Type_Presenter' => $baseDir . '/src/presenters/open-graph/type-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Url_Presenter' => $baseDir . '/src/presenters/open-graph/url-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Rel_Next_Presenter' => $baseDir . '/src/presenters/rel-next-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Rel_Prev_Presenter' => $baseDir . '/src/presenters/rel-prev-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Robots_Presenter' => $baseDir . '/src/presenters/robots-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Robots_Txt_Presenter' => $baseDir . '/src/presenters/robots-txt-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Schema_Presenter' => $baseDir . '/src/presenters/schema-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Score_Icon_Presenter' => $baseDir . '/src/presenters/score-icon-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Slack\\Enhanced_Data_Presenter' => $baseDir . '/src/presenters/slack/enhanced-data-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Title_Presenter' => $baseDir . '/src/presenters/title-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Card_Presenter' => $baseDir . '/src/presenters/twitter/card-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Creator_Presenter' => $baseDir . '/src/presenters/twitter/creator-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Description_Presenter' => $baseDir . '/src/presenters/twitter/description-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Image_Presenter' => $baseDir . '/src/presenters/twitter/image-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Site_Presenter' => $baseDir . '/src/presenters/twitter/site-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Title_Presenter' => $baseDir . '/src/presenters/twitter/title-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Url_List_Presenter' => $baseDir . '/src/presenters/url-list-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Baidu_Presenter' => $baseDir . '/src/presenters/webmaster/baidu-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Bing_Presenter' => $baseDir . '/src/presenters/webmaster/bing-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Google_Presenter' => $baseDir . '/src/presenters/webmaster/google-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Pinterest_Presenter' => $baseDir . '/src/presenters/webmaster/pinterest-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Yandex_Presenter' => $baseDir . '/src/presenters/webmaster/yandex-presenter.php', + 'Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager' => $baseDir . '/src/promotions/application/promotion-manager.php', + 'Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager_Interface' => $baseDir . '/src/promotions/application/promotion-manager-interface.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Abstract_Promotion' => $baseDir . '/src/promotions/domain/abstract-promotion.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Black_Friday_Checklist_Promotion' => $baseDir . '/src/promotions/domain/black-friday-checklist-promotion.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Black_Friday_Promotion' => $baseDir . '/src/promotions/domain/black-friday-promotion.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Promotion_Interface' => $baseDir . '/src/promotions/domain/promotion-interface.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Time_Interval' => $baseDir . '/src/promotions/domain/time-interval.php', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository' => $baseDir . '/src/repositories/indexable-cleanup-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository' => $baseDir . '/src/repositories/indexable-hierarchy-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Repository' => $baseDir . '/src/repositories/indexable-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository' => $baseDir . '/src/repositories/primary-term-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository' => $baseDir . '/src/repositories/seo-links-repository.php', + 'Yoast\\WP\\SEO\\Routes\\Abstract_Action_Route' => $baseDir . '/src/routes/abstract-action-route.php', + 'Yoast\\WP\\SEO\\Routes\\Abstract_Indexation_Route' => $baseDir . '/src/routes/abstract-indexation-route.php', + 'Yoast\\WP\\SEO\\Routes\\Alert_Dismissal_Route' => $baseDir . '/src/routes/alert-dismissal-route.php', + 'Yoast\\WP\\SEO\\Routes\\First_Time_Configuration_Route' => $baseDir . '/src/routes/first-time-configuration-route.php', + 'Yoast\\WP\\SEO\\Routes\\Importing_Route' => $baseDir . '/src/routes/importing-route.php', + 'Yoast\\WP\\SEO\\Routes\\Indexables_Head_Route' => $baseDir . '/src/routes/indexables-head-route.php', + 'Yoast\\WP\\SEO\\Routes\\Indexing_Route' => $baseDir . '/src/routes/indexing-route.php', + 'Yoast\\WP\\SEO\\Routes\\Integrations_Route' => $baseDir . '/src/routes/integrations-route.php', + 'Yoast\\WP\\SEO\\Routes\\Meta_Search_Route' => $baseDir . '/src/routes/meta-search-route.php', + 'Yoast\\WP\\SEO\\Routes\\Route_Interface' => $baseDir . '/src/routes/route-interface.php', + 'Yoast\\WP\\SEO\\Routes\\SEMrush_Route' => $baseDir . '/src/routes/semrush-route.php', + 'Yoast\\WP\\SEO\\Routes\\Supported_Features_Route' => $baseDir . '/src/routes/supported-features-route.php', + 'Yoast\\WP\\SEO\\Routes\\Wincher_Route' => $baseDir . '/src/routes/wincher-route.php', + 'Yoast\\WP\\SEO\\Routes\\Workouts_Route' => $baseDir . '/src/routes/workouts-route.php', + 'Yoast\\WP\\SEO\\Routes\\Yoast_Head_REST_Field' => $baseDir . '/src/routes/yoast-head-rest-field.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Check' => $baseDir . '/src/services/health-check/default-tagline-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Reports' => $baseDir . '/src/services/health-check/default-tagline-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner' => $baseDir . '/src/services/health-check/default-tagline-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Health_Check' => $baseDir . '/src/services/health-check/health-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Check' => $baseDir . '/src/services/health-check/links-table-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Reports' => $baseDir . '/src/services/health-check/links-table-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Runner' => $baseDir . '/src/services/health-check/links-table-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\MyYoast_Api_Request_Factory' => $baseDir . '/src/services/health-check/myyoast-api-request-factory.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Check' => $baseDir . '/src/services/health-check/page-comments-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Reports' => $baseDir . '/src/services/health-check/page-comments-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner' => $baseDir . '/src/services/health-check/page-comments-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Check' => $baseDir . '/src/services/health-check/postname-permalink-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Reports' => $baseDir . '/src/services/health-check/postname-permalink-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner' => $baseDir . '/src/services/health-check/postname-permalink-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder' => $baseDir . '/src/services/health-check/report-builder.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory' => $baseDir . '/src/services/health-check/report-builder-factory.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Reports_Trait' => $baseDir . '/src/services/health-check/reports-trait.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Runner_Interface' => $baseDir . '/src/services/health-check/runner-interface.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service' => $baseDir . '/src/services/importing/aioseo/aioseo-replacevar-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service' => $baseDir . '/src/services/importing/aioseo/aioseo-robots-provider-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service' => $baseDir . '/src/services/importing/aioseo/aioseo-robots-transformer-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Social_Images_Provider_Service' => $baseDir . '/src/services/importing/aioseo/aioseo-social-images-provider-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service' => $baseDir . '/src/services/importing/conflicting-plugins-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service' => $baseDir . '/src/services/importing/importable-detector-service.php', + 'Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager' => $baseDir . '/src/services/indexables/indexable-version-manager.php', + 'Yoast\\WP\\SEO\\Surfaces\\Classes_Surface' => $baseDir . '/src/surfaces/classes-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface' => $baseDir . '/src/surfaces/helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Meta_Surface' => $baseDir . '/src/surfaces/meta-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface' => $baseDir . '/src/surfaces/open-graph-helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface' => $baseDir . '/src/surfaces/schema-helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface' => $baseDir . '/src/surfaces/twitter-helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Values\\Meta' => $baseDir . '/src/surfaces/values/meta.php', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector' => $baseDir . '/src/user-meta/application/additional-contactmethods-collector.php', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Cleanup_Service' => $baseDir . '/src/user-meta/application/cleanup-service.php', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector' => $baseDir . '/src/user-meta/application/custom-meta-collector.php', + 'Yoast\\WP\\SEO\\User_Meta\\Domain\\Additional_Contactmethod_Interface' => $baseDir . '/src/user-meta/domain/additional-contactmethod-interface.php', + 'Yoast\\WP\\SEO\\User_Meta\\Domain\\Custom_Meta_Interface' => $baseDir . '/src/user-meta/domain/custom-meta-interface.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Facebook' => $baseDir . '/src/user-meta/framework/additional-contactmethods/facebook.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Instagram' => $baseDir . '/src/user-meta/framework/additional-contactmethods/instagram.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Linkedin' => $baseDir . '/src/user-meta/framework/additional-contactmethods/linkedin.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Myspace' => $baseDir . '/src/user-meta/framework/additional-contactmethods/myspace.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Pinterest' => $baseDir . '/src/user-meta/framework/additional-contactmethods/pinterest.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Soundcloud' => $baseDir . '/src/user-meta/framework/additional-contactmethods/soundcloud.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Tumblr' => $baseDir . '/src/user-meta/framework/additional-contactmethods/tumblr.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Wikipedia' => $baseDir . '/src/user-meta/framework/additional-contactmethods/wikipedia.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\X' => $baseDir . '/src/user-meta/framework/additional-contactmethods/x.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Youtube' => $baseDir . '/src/user-meta/framework/additional-contactmethods/youtube.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Author_Metadesc' => $baseDir . '/src/user-meta/framework/custom-meta/author-metadesc.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Author_Title' => $baseDir . '/src/user-meta/framework/custom-meta/author-title.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Content_Analysis_Disable' => $baseDir . '/src/user-meta/framework/custom-meta/content-analysis-disable.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Inclusive_Language_Analysis_Disable' => $baseDir . '/src/user-meta/framework/custom-meta/inclusive-language-analysis-disable.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Keyword_Analysis_Disable' => $baseDir . '/src/user-meta/framework/custom-meta/keyword-analysis-disable.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Noindex_Author' => $baseDir . '/src/user-meta/framework/custom-meta/noindex-author.php', + 'Yoast\\WP\\SEO\\User_Meta\\Infrastructure\\Cleanup_Repository' => $baseDir . '/src/user-meta/infrastructure/cleanup-repository.php', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration' => $baseDir . '/src/user-meta/user-interface/additional-contactmethods-integration.php', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Cleanup_Integration' => $baseDir . '/src/user-meta/user-interface/cleanup-integration.php', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Custom_Meta_Integration' => $baseDir . '/src/user-meta/user-interface/custom-meta-integration.php', + 'Yoast\\WP\\SEO\\User_Profiles_Additions\\User_Interface\\User_Profiles_Additions_Ui' => $baseDir . '/src/user-profiles-additions/user-interface/user-profiles-additions-ui.php', + 'Yoast\\WP\\SEO\\Values\\Images' => $baseDir . '/src/values/images.php', + 'Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions' => $baseDir . '/src/values/indexables/indexable-builder-versions.php', + 'Yoast\\WP\\SEO\\Values\\OAuth\\OAuth_Token' => $baseDir . '/src/values/oauth/oauth-token.php', + 'Yoast\\WP\\SEO\\Values\\Open_Graph\\Images' => $baseDir . '/src/values/open-graph/images.php', + 'Yoast\\WP\\SEO\\Values\\Robots\\Directive' => $baseDir . '/src/values/robots/directive.php', + 'Yoast\\WP\\SEO\\Values\\Robots\\User_Agent' => $baseDir . '/src/values/robots/user-agent.php', + 'Yoast\\WP\\SEO\\Values\\Robots\\User_Agent_List' => $baseDir . '/src/values/robots/user-agent-list.php', + 'Yoast\\WP\\SEO\\Values\\Twitter\\Images' => $baseDir . '/src/values/twitter/images.php', + 'Yoast\\WP\\SEO\\WordPress\\Wrapper' => $baseDir . '/src/wordpress/wrapper.php', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper' => $baseDir . '/src/wrappers/wp-query-wrapper.php', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler' => $baseDir . '/src/wrappers/wp-remote-handler.php', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper' => $baseDir . '/src/wrappers/wp-rewrite-wrapper.php', + 'Yoast_Dashboard_Widget' => $baseDir . '/admin/class-yoast-dashboard-widget.php', + 'Yoast_Dismissable_Notice_Ajax' => $baseDir . '/admin/ajax/class-yoast-dismissable-notice.php', + 'Yoast_Dynamic_Rewrites' => $baseDir . '/inc/class-yoast-dynamic-rewrites.php', + 'Yoast_Feature_Toggle' => $baseDir . '/admin/views/class-yoast-feature-toggle.php', + 'Yoast_Feature_Toggles' => $baseDir . '/admin/views/class-yoast-feature-toggles.php', + 'Yoast_Form' => $baseDir . '/admin/class-yoast-form.php', + 'Yoast_Form_Element' => $baseDir . '/admin/views/interface-yoast-form-element.php', + 'Yoast_Input_Select' => $baseDir . '/admin/views/class-yoast-input-select.php', + 'Yoast_Input_Validation' => $baseDir . '/admin/class-yoast-input-validation.php', + 'Yoast_Integration_Toggles' => $baseDir . '/admin/views/class-yoast-integration-toggles.php', + 'Yoast_Network_Admin' => $baseDir . '/admin/class-yoast-network-admin.php', + 'Yoast_Network_Settings_API' => $baseDir . '/admin/class-yoast-network-settings-api.php', + 'Yoast_Notification' => $baseDir . '/admin/class-yoast-notification.php', + 'Yoast_Notification_Center' => $baseDir . '/admin/class-yoast-notification-center.php', + 'Yoast_Notifications' => $baseDir . '/admin/class-yoast-notifications.php', + 'Yoast_Plugin_Conflict' => $baseDir . '/admin/class-yoast-plugin-conflict.php', + 'Yoast_Plugin_Conflict_Ajax' => $baseDir . '/admin/ajax/class-yoast-plugin-conflict-ajax.php', +); diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_files.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_files.php new file mode 100644 index 00000000..6f7dfd5c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_files.php @@ -0,0 +1,10 @@ + $vendorDir . '/yoast/whip/src/Facades/wordpress.php', +); diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_namespaces.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_namespaces.php new file mode 100644 index 00000000..b7fc0125 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/yoast/whip/src'), + 'Composer\\Installers\\' => array($vendorDir . '/composer/installers/src/Composer/Installers'), +); diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_real.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_real.php new file mode 100644 index 00000000..ca656dda --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_real.php @@ -0,0 +1,80 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit539c838c762ab459bb7cfb10d25ade08::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit539c838c762ab459bb7cfb10d25ade08::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire539c838c762ab459bb7cfb10d25ade08($fileIdentifier, $file); + } + + return $loader; + } +} + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequire539c838c762ab459bb7cfb10d25ade08($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_static.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_static.php new file mode 100644 index 00000000..c5815708 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/autoload_static.php @@ -0,0 +1,1151 @@ + __DIR__ . '/..' . '/yoast/whip/src/Facades/wordpress.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'Y' => + array ( + 'Yoast\\WHIPv2\\' => 13, + ), + 'C' => + array ( + 'Composer\\Installers\\' => 20, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Yoast\\WHIPv2\\' => + array ( + 0 => __DIR__ . '/..' . '/yoast/whip/src', + ), + 'Composer\\Installers\\' => + array ( + 0 => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'Composer\\Installers\\AglInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AglInstaller.php', + 'Composer\\Installers\\AkauntingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AkauntingInstaller.php', + 'Composer\\Installers\\AnnotateCmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php', + 'Composer\\Installers\\AsgardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AsgardInstaller.php', + 'Composer\\Installers\\AttogramInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AttogramInstaller.php', + 'Composer\\Installers\\BaseInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BaseInstaller.php', + 'Composer\\Installers\\BitrixInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BitrixInstaller.php', + 'Composer\\Installers\\BonefishInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BonefishInstaller.php', + 'Composer\\Installers\\CakePHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php', + 'Composer\\Installers\\ChefInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ChefInstaller.php', + 'Composer\\Installers\\CiviCrmInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php', + 'Composer\\Installers\\ClanCatsFrameworkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php', + 'Composer\\Installers\\CockpitInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CockpitInstaller.php', + 'Composer\\Installers\\CodeIgniterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php', + 'Composer\\Installers\\Concrete5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Concrete5Installer.php', + 'Composer\\Installers\\CroogoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CroogoInstaller.php', + 'Composer\\Installers\\DecibelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DecibelInstaller.php', + 'Composer\\Installers\\DframeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DframeInstaller.php', + 'Composer\\Installers\\DokuWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php', + 'Composer\\Installers\\DolibarrInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php', + 'Composer\\Installers\\DrupalInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DrupalInstaller.php', + 'Composer\\Installers\\ElggInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ElggInstaller.php', + 'Composer\\Installers\\EliasisInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/EliasisInstaller.php', + 'Composer\\Installers\\ExpressionEngineInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php', + 'Composer\\Installers\\EzPlatformInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/EzPlatformInstaller.php', + 'Composer\\Installers\\FuelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelInstaller.php', + 'Composer\\Installers\\FuelphpInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php', + 'Composer\\Installers\\GravInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/GravInstaller.php', + 'Composer\\Installers\\HuradInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/HuradInstaller.php', + 'Composer\\Installers\\ImageCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php', + 'Composer\\Installers\\Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Installer.php', + 'Composer\\Installers\\ItopInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ItopInstaller.php', + 'Composer\\Installers\\KanboardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KanboardInstaller.php', + 'Composer\\Installers\\KnownInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KnownInstaller.php', + 'Composer\\Installers\\KodiCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php', + 'Composer\\Installers\\KohanaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KohanaInstaller.php', + 'Composer\\Installers\\LanManagementSystemInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php', + 'Composer\\Installers\\LaravelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LaravelInstaller.php', + 'Composer\\Installers\\LavaLiteInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LavaLiteInstaller.php', + 'Composer\\Installers\\LithiumInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LithiumInstaller.php', + 'Composer\\Installers\\MODULEWorkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php', + 'Composer\\Installers\\MODXEvoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php', + 'Composer\\Installers\\MagentoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MagentoInstaller.php', + 'Composer\\Installers\\MajimaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MajimaInstaller.php', + 'Composer\\Installers\\MakoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MakoInstaller.php', + 'Composer\\Installers\\MantisBTInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MantisBTInstaller.php', + 'Composer\\Installers\\MatomoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MatomoInstaller.php', + 'Composer\\Installers\\MauticInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MauticInstaller.php', + 'Composer\\Installers\\MayaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MayaInstaller.php', + 'Composer\\Installers\\MediaWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php', + 'Composer\\Installers\\MiaoxingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MiaoxingInstaller.php', + 'Composer\\Installers\\MicroweberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php', + 'Composer\\Installers\\ModxInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ModxInstaller.php', + 'Composer\\Installers\\MoodleInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MoodleInstaller.php', + 'Composer\\Installers\\OctoberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OctoberInstaller.php', + 'Composer\\Installers\\OntoWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OntoWikiInstaller.php', + 'Composer\\Installers\\OsclassInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OsclassInstaller.php', + 'Composer\\Installers\\OxidInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OxidInstaller.php', + 'Composer\\Installers\\PPIInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PPIInstaller.php', + 'Composer\\Installers\\PantheonInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PantheonInstaller.php', + 'Composer\\Installers\\PhiftyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php', + 'Composer\\Installers\\PhpBBInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php', + 'Composer\\Installers\\PiwikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PiwikInstaller.php', + 'Composer\\Installers\\PlentymarketsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php', + 'Composer\\Installers\\Plugin' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Plugin.php', + 'Composer\\Installers\\PortoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PortoInstaller.php', + 'Composer\\Installers\\PrestashopInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php', + 'Composer\\Installers\\ProcessWireInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ProcessWireInstaller.php', + 'Composer\\Installers\\PuppetInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PuppetInstaller.php', + 'Composer\\Installers\\PxcmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php', + 'Composer\\Installers\\RadPHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php', + 'Composer\\Installers\\ReIndexInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php', + 'Composer\\Installers\\Redaxo5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php', + 'Composer\\Installers\\RedaxoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php', + 'Composer\\Installers\\RoundcubeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php', + 'Composer\\Installers\\SMFInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SMFInstaller.php', + 'Composer\\Installers\\ShopwareInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php', + 'Composer\\Installers\\SilverStripeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php', + 'Composer\\Installers\\SiteDirectInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SiteDirectInstaller.php', + 'Composer\\Installers\\StarbugInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/StarbugInstaller.php', + 'Composer\\Installers\\SyDESInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SyDESInstaller.php', + 'Composer\\Installers\\SyliusInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SyliusInstaller.php', + 'Composer\\Installers\\TaoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TaoInstaller.php', + 'Composer\\Installers\\TastyIgniterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php', + 'Composer\\Installers\\TheliaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TheliaInstaller.php', + 'Composer\\Installers\\TuskInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TuskInstaller.php', + 'Composer\\Installers\\UserFrostingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php', + 'Composer\\Installers\\VanillaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/VanillaInstaller.php', + 'Composer\\Installers\\VgmcpInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/VgmcpInstaller.php', + 'Composer\\Installers\\WHMCSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php', + 'Composer\\Installers\\WinterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WinterInstaller.php', + 'Composer\\Installers\\WolfCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php', + 'Composer\\Installers\\WordPressInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WordPressInstaller.php', + 'Composer\\Installers\\YawikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/YawikInstaller.php', + 'Composer\\Installers\\ZendInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZendInstaller.php', + 'Composer\\Installers\\ZikulaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php', + 'WPSEO_Abstract_Capability_Manager' => __DIR__ . '/../..' . '/admin/capabilities/class-abstract-capability-manager.php', + 'WPSEO_Abstract_Metabox_Tab_With_Sections' => __DIR__ . '/../..' . '/admin/metabox/class-abstract-sectioned-metabox-tab.php', + 'WPSEO_Abstract_Post_Filter' => __DIR__ . '/../..' . '/admin/filters/class-abstract-post-filter.php', + 'WPSEO_Abstract_Role_Manager' => __DIR__ . '/../..' . '/admin/roles/class-abstract-role-manager.php', + 'WPSEO_Addon_Manager' => __DIR__ . '/../..' . '/inc/class-addon-manager.php', + 'WPSEO_Admin' => __DIR__ . '/../..' . '/admin/class-admin.php', + 'WPSEO_Admin_Asset' => __DIR__ . '/../..' . '/admin/class-asset.php', + 'WPSEO_Admin_Asset_Analysis_Worker_Location' => __DIR__ . '/../..' . '/admin/class-admin-asset-analysis-worker-location.php', + 'WPSEO_Admin_Asset_Dev_Server_Location' => __DIR__ . '/../..' . '/admin/class-admin-asset-dev-server-location.php', + 'WPSEO_Admin_Asset_Location' => __DIR__ . '/../..' . '/admin/class-admin-asset-location.php', + 'WPSEO_Admin_Asset_Manager' => __DIR__ . '/../..' . '/admin/class-admin-asset-manager.php', + 'WPSEO_Admin_Asset_SEO_Location' => __DIR__ . '/../..' . '/admin/class-admin-asset-seo-location.php', + 'WPSEO_Admin_Bar_Menu' => __DIR__ . '/../..' . '/inc/class-wpseo-admin-bar-menu.php', + 'WPSEO_Admin_Editor_Specific_Replace_Vars' => __DIR__ . '/../..' . '/admin/class-admin-editor-specific-replace-vars.php', + 'WPSEO_Admin_Gutenberg_Compatibility_Notification' => __DIR__ . '/../..' . '/admin/class-admin-gutenberg-compatibility-notification.php', + 'WPSEO_Admin_Help_Panel' => __DIR__ . '/../..' . '/admin/class-admin-help-panel.php', + 'WPSEO_Admin_Init' => __DIR__ . '/../..' . '/admin/class-admin-init.php', + 'WPSEO_Admin_Menu' => __DIR__ . '/../..' . '/admin/menu/class-admin-menu.php', + 'WPSEO_Admin_Pages' => __DIR__ . '/../..' . '/admin/class-config.php', + 'WPSEO_Admin_Recommended_Replace_Vars' => __DIR__ . '/../..' . '/admin/class-admin-recommended-replace-vars.php', + 'WPSEO_Admin_Settings_Changed_Listener' => __DIR__ . '/../..' . '/admin/admin-settings-changed-listener.php', + 'WPSEO_Admin_User_Profile' => __DIR__ . '/../..' . '/admin/class-admin-user-profile.php', + 'WPSEO_Admin_Utils' => __DIR__ . '/../..' . '/admin/class-admin-utils.php', + 'WPSEO_Author_Sitemap_Provider' => __DIR__ . '/../..' . '/inc/sitemaps/class-author-sitemap-provider.php', + 'WPSEO_Base_Menu' => __DIR__ . '/../..' . '/admin/menu/class-base-menu.php', + 'WPSEO_Breadcrumbs' => __DIR__ . '/../..' . '/src/deprecated/frontend/breadcrumbs.php', + 'WPSEO_Bulk_Description_List_Table' => __DIR__ . '/../..' . '/admin/class-bulk-description-editor-list-table.php', + 'WPSEO_Bulk_List_Table' => __DIR__ . '/../..' . '/admin/class-bulk-editor-list-table.php', + 'WPSEO_Bulk_Title_Editor_List_Table' => __DIR__ . '/../..' . '/admin/class-bulk-title-editor-list-table.php', + 'WPSEO_Capability_Manager' => __DIR__ . '/../..' . '/admin/capabilities/class-capability-manager.php', + 'WPSEO_Capability_Manager_Factory' => __DIR__ . '/../..' . '/admin/capabilities/class-capability-manager-factory.php', + 'WPSEO_Capability_Manager_Integration' => __DIR__ . '/../..' . '/admin/capabilities/class-capability-manager-integration.php', + 'WPSEO_Capability_Manager_VIP' => __DIR__ . '/../..' . '/admin/capabilities/class-capability-manager-vip.php', + 'WPSEO_Capability_Manager_WP' => __DIR__ . '/../..' . '/admin/capabilities/class-capability-manager-wp.php', + 'WPSEO_Capability_Utils' => __DIR__ . '/../..' . '/admin/capabilities/class-capability-utils.php', + 'WPSEO_Collection' => __DIR__ . '/../..' . '/admin/interface-collection.php', + 'WPSEO_Collector' => __DIR__ . '/../..' . '/admin/class-collector.php', + 'WPSEO_Content_Images' => __DIR__ . '/../..' . '/inc/class-wpseo-content-images.php', + 'WPSEO_Cornerstone_Filter' => __DIR__ . '/../..' . '/admin/filters/class-cornerstone-filter.php', + 'WPSEO_Custom_Fields' => __DIR__ . '/../..' . '/inc/class-wpseo-custom-fields.php', + 'WPSEO_Custom_Taxonomies' => __DIR__ . '/../..' . '/inc/class-wpseo-custom-taxonomies.php', + 'WPSEO_Customizer' => __DIR__ . '/../..' . '/src/deprecated/admin/class-customizer.php', + 'WPSEO_Database_Proxy' => __DIR__ . '/../..' . '/admin/class-database-proxy.php', + 'WPSEO_Date_Helper' => __DIR__ . '/../..' . '/inc/date-helper.php', + 'WPSEO_Dismissible_Notification' => __DIR__ . '/../..' . '/admin/notifiers/dismissible-notification.php', + 'WPSEO_Endpoint' => __DIR__ . '/../..' . '/admin/endpoints/class-endpoint.php', + 'WPSEO_Endpoint_File_Size' => __DIR__ . '/../..' . '/admin/endpoints/class-endpoint-file-size.php', + 'WPSEO_Endpoint_Statistics' => __DIR__ . '/../..' . '/admin/endpoints/class-endpoint-statistics.php', + 'WPSEO_Export' => __DIR__ . '/../..' . '/admin/class-export.php', + 'WPSEO_Expose_Shortlinks' => __DIR__ . '/../..' . '/admin/class-expose-shortlinks.php', + 'WPSEO_File_Size_Exception' => __DIR__ . '/../..' . '/admin/exceptions/class-file-size-exception.php', + 'WPSEO_File_Size_Service' => __DIR__ . '/../..' . '/admin/services/class-file-size.php', + 'WPSEO_Frontend' => __DIR__ . '/../..' . '/src/deprecated/frontend/frontend.php', + 'WPSEO_GSC' => __DIR__ . '/../..' . '/admin/google_search_console/class-gsc.php', + 'WPSEO_Gutenberg_Compatibility' => __DIR__ . '/../..' . '/admin/class-gutenberg-compatibility.php', + 'WPSEO_Image_Utils' => __DIR__ . '/../..' . '/inc/class-wpseo-image-utils.php', + 'WPSEO_Import_AIOSEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-aioseo.php', + 'WPSEO_Import_AIOSEO_V4' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-aioseo-v4.php', + 'WPSEO_Import_Greg_SEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-greg-high-performance-seo.php', + 'WPSEO_Import_HeadSpace' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-headspace.php', + 'WPSEO_Import_Jetpack_SEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-jetpack.php', + 'WPSEO_Import_Platinum_SEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-platinum-seo-pack.php', + 'WPSEO_Import_Plugin' => __DIR__ . '/../..' . '/admin/import/class-import-plugin.php', + 'WPSEO_Import_Plugins_Detector' => __DIR__ . '/../..' . '/admin/import/class-import-detector.php', + 'WPSEO_Import_Premium_SEO_Pack' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-premium-seo-pack.php', + 'WPSEO_Import_RankMath' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-rankmath.php', + 'WPSEO_Import_SEOPressor' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-seopressor.php', + 'WPSEO_Import_SEO_Framework' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-seo-framework.php', + 'WPSEO_Import_Settings' => __DIR__ . '/../..' . '/admin/import/class-import-settings.php', + 'WPSEO_Import_Smartcrawl_SEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-smartcrawl.php', + 'WPSEO_Import_Squirrly' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-squirrly.php', + 'WPSEO_Import_Status' => __DIR__ . '/../..' . '/admin/import/class-import-status.php', + 'WPSEO_Import_Ultimate_SEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-ultimate-seo.php', + 'WPSEO_Import_WPSEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-wpseo.php', + 'WPSEO_Import_WP_Meta_SEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-wp-meta-seo.php', + 'WPSEO_Import_WooThemes_SEO' => __DIR__ . '/../..' . '/admin/import/plugins/class-import-woothemes-seo.php', + 'WPSEO_Installable' => __DIR__ . '/../..' . '/admin/interface-installable.php', + 'WPSEO_Installation' => __DIR__ . '/../..' . '/inc/class-wpseo-installation.php', + 'WPSEO_Language_Utils' => __DIR__ . '/../..' . '/inc/language-utils.php', + 'WPSEO_Listener' => __DIR__ . '/../..' . '/admin/listeners/class-listener.php', + 'WPSEO_Menu' => __DIR__ . '/../..' . '/admin/menu/class-menu.php', + 'WPSEO_Meta' => __DIR__ . '/../..' . '/inc/class-wpseo-meta.php', + 'WPSEO_Meta_Columns' => __DIR__ . '/../..' . '/admin/class-meta-columns.php', + 'WPSEO_Metabox' => __DIR__ . '/../..' . '/admin/metabox/class-metabox.php', + 'WPSEO_Metabox_Analysis' => __DIR__ . '/../..' . '/admin/metabox/interface-metabox-analysis.php', + 'WPSEO_Metabox_Analysis_Inclusive_Language' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-analysis-inclusive-language.php', + 'WPSEO_Metabox_Analysis_Readability' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-analysis-readability.php', + 'WPSEO_Metabox_Analysis_SEO' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-analysis-seo.php', + 'WPSEO_Metabox_Collapsible' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-collapsible.php', + 'WPSEO_Metabox_Collapsibles_Sections' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-collapsibles-section.php', + 'WPSEO_Metabox_Editor' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-editor.php', + 'WPSEO_Metabox_Form_Tab' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-form-tab.php', + 'WPSEO_Metabox_Formatter' => __DIR__ . '/../..' . '/admin/formatter/class-metabox-formatter.php', + 'WPSEO_Metabox_Formatter_Interface' => __DIR__ . '/../..' . '/admin/formatter/interface-metabox-formatter.php', + 'WPSEO_Metabox_Null_Tab' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-null-tab.php', + 'WPSEO_Metabox_Section' => __DIR__ . '/../..' . '/admin/metabox/interface-metabox-section.php', + 'WPSEO_Metabox_Section_Additional' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-section-additional.php', + 'WPSEO_Metabox_Section_Inclusive_Language' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-section-inclusive-language.php', + 'WPSEO_Metabox_Section_React' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-section-react.php', + 'WPSEO_Metabox_Section_Readability' => __DIR__ . '/../..' . '/admin/metabox/class-metabox-section-readability.php', + 'WPSEO_Metabox_Tab' => __DIR__ . '/../..' . '/admin/metabox/interface-metabox-tab.php', + 'WPSEO_MyYoast_Api_Request' => __DIR__ . '/../..' . '/inc/class-my-yoast-api-request.php', + 'WPSEO_MyYoast_Bad_Request_Exception' => __DIR__ . '/../..' . '/inc/exceptions/class-myyoast-bad-request-exception.php', + 'WPSEO_MyYoast_Invalid_JSON_Exception' => __DIR__ . '/../..' . '/inc/exceptions/class-myyoast-invalid-json-exception.php', + 'WPSEO_MyYoast_Proxy' => __DIR__ . '/../..' . '/admin/class-my-yoast-proxy.php', + 'WPSEO_Network_Admin_Menu' => __DIR__ . '/../..' . '/admin/menu/class-network-admin-menu.php', + 'WPSEO_Notification_Handler' => __DIR__ . '/../..' . '/admin/notifiers/interface-notification-handler.php', + 'WPSEO_Option' => __DIR__ . '/../..' . '/inc/options/class-wpseo-option.php', + 'WPSEO_Option_MS' => __DIR__ . '/../..' . '/inc/options/class-wpseo-option-ms.php', + 'WPSEO_Option_Social' => __DIR__ . '/../..' . '/inc/options/class-wpseo-option-social.php', + 'WPSEO_Option_Tab' => __DIR__ . '/../..' . '/admin/class-option-tab.php', + 'WPSEO_Option_Tabs' => __DIR__ . '/../..' . '/admin/class-option-tabs.php', + 'WPSEO_Option_Tabs_Formatter' => __DIR__ . '/../..' . '/admin/class-option-tabs-formatter.php', + 'WPSEO_Option_Titles' => __DIR__ . '/../..' . '/inc/options/class-wpseo-option-titles.php', + 'WPSEO_Option_Wpseo' => __DIR__ . '/../..' . '/inc/options/class-wpseo-option-wpseo.php', + 'WPSEO_Options' => __DIR__ . '/../..' . '/inc/options/class-wpseo-options.php', + 'WPSEO_Paper_Presenter' => __DIR__ . '/../..' . '/admin/class-paper-presenter.php', + 'WPSEO_Plugin_Availability' => __DIR__ . '/../..' . '/admin/class-plugin-availability.php', + 'WPSEO_Plugin_Conflict' => __DIR__ . '/../..' . '/admin/class-plugin-conflict.php', + 'WPSEO_Plugin_Importer' => __DIR__ . '/../..' . '/admin/import/plugins/class-abstract-plugin-importer.php', + 'WPSEO_Plugin_Importers' => __DIR__ . '/../..' . '/admin/import/plugins/class-importers.php', + 'WPSEO_Post_Metabox_Formatter' => __DIR__ . '/../..' . '/admin/formatter/class-post-metabox-formatter.php', + 'WPSEO_Post_Type' => __DIR__ . '/../..' . '/inc/class-post-type.php', + 'WPSEO_Post_Type_Sitemap_Provider' => __DIR__ . '/../..' . '/inc/sitemaps/class-post-type-sitemap-provider.php', + 'WPSEO_Premium_Popup' => __DIR__ . '/../..' . '/admin/class-premium-popup.php', + 'WPSEO_Premium_Upsell_Admin_Block' => __DIR__ . '/../..' . '/admin/class-premium-upsell-admin-block.php', + 'WPSEO_Primary_Term' => __DIR__ . '/../..' . '/inc/class-wpseo-primary-term.php', + 'WPSEO_Primary_Term_Admin' => __DIR__ . '/../..' . '/admin/class-primary-term-admin.php', + 'WPSEO_Product_Upsell_Notice' => __DIR__ . '/../..' . '/admin/class-product-upsell-notice.php', + 'WPSEO_Rank' => __DIR__ . '/../..' . '/inc/class-wpseo-rank.php', + 'WPSEO_Register_Capabilities' => __DIR__ . '/../..' . '/admin/capabilities/class-register-capabilities.php', + 'WPSEO_Register_Roles' => __DIR__ . '/../..' . '/admin/roles/class-register-roles.php', + 'WPSEO_Remote_Request' => __DIR__ . '/../..' . '/admin/class-remote-request.php', + 'WPSEO_Replace_Vars' => __DIR__ . '/../..' . '/inc/class-wpseo-replace-vars.php', + 'WPSEO_Replacement_Variable' => __DIR__ . '/../..' . '/inc/class-wpseo-replacement-variable.php', + 'WPSEO_Replacevar_Editor' => __DIR__ . '/../..' . '/admin/menu/class-replacevar-editor.php', + 'WPSEO_Replacevar_Field' => __DIR__ . '/../..' . '/admin/menu/class-replacevar-field.php', + 'WPSEO_Rewrite' => __DIR__ . '/../..' . '/inc/class-rewrite.php', + 'WPSEO_Role_Manager' => __DIR__ . '/../..' . '/admin/roles/class-role-manager.php', + 'WPSEO_Role_Manager_Factory' => __DIR__ . '/../..' . '/admin/roles/class-role-manager-factory.php', + 'WPSEO_Role_Manager_WP' => __DIR__ . '/../..' . '/admin/roles/class-role-manager-wp.php', + 'WPSEO_Schema_Person_Upgrade_Notification' => __DIR__ . '/../..' . '/admin/class-schema-person-upgrade-notification.php', + 'WPSEO_Shortcode_Filter' => __DIR__ . '/../..' . '/admin/ajax/class-shortcode-filter.php', + 'WPSEO_Shortlinker' => __DIR__ . '/../..' . '/inc/class-wpseo-shortlinker.php', + 'WPSEO_Sitemap_Cache_Data' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemap-cache-data.php', + 'WPSEO_Sitemap_Cache_Data_Interface' => __DIR__ . '/../..' . '/inc/sitemaps/interface-sitemap-cache-data.php', + 'WPSEO_Sitemap_Image_Parser' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemap-image-parser.php', + 'WPSEO_Sitemap_Provider' => __DIR__ . '/../..' . '/inc/sitemaps/interface-sitemap-provider.php', + 'WPSEO_Sitemaps' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemaps.php', + 'WPSEO_Sitemaps_Admin' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemaps-admin.php', + 'WPSEO_Sitemaps_Cache' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemaps-cache.php', + 'WPSEO_Sitemaps_Cache_Validator' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemaps-cache-validator.php', + 'WPSEO_Sitemaps_Renderer' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemaps-renderer.php', + 'WPSEO_Sitemaps_Router' => __DIR__ . '/../..' . '/inc/sitemaps/class-sitemaps-router.php', + 'WPSEO_Slug_Change_Watcher' => __DIR__ . '/../..' . '/admin/watchers/class-slug-change-watcher.php', + 'WPSEO_Statistic_Integration' => __DIR__ . '/../..' . '/admin/statistics/class-statistics-integration.php', + 'WPSEO_Statistics' => __DIR__ . '/../..' . '/inc/class-wpseo-statistics.php', + 'WPSEO_Statistics_Service' => __DIR__ . '/../..' . '/admin/statistics/class-statistics-service.php', + 'WPSEO_Submenu_Capability_Normalize' => __DIR__ . '/../..' . '/admin/menu/class-submenu-capability-normalize.php', + 'WPSEO_Suggested_Plugins' => __DIR__ . '/../..' . '/admin/class-suggested-plugins.php', + 'WPSEO_Taxonomy' => __DIR__ . '/../..' . '/admin/taxonomy/class-taxonomy.php', + 'WPSEO_Taxonomy_Columns' => __DIR__ . '/../..' . '/admin/taxonomy/class-taxonomy-columns.php', + 'WPSEO_Taxonomy_Fields' => __DIR__ . '/../..' . '/admin/taxonomy/class-taxonomy-fields.php', + 'WPSEO_Taxonomy_Fields_Presenter' => __DIR__ . '/../..' . '/admin/taxonomy/class-taxonomy-fields-presenter.php', + 'WPSEO_Taxonomy_Meta' => __DIR__ . '/../..' . '/inc/options/class-wpseo-taxonomy-meta.php', + 'WPSEO_Taxonomy_Metabox' => __DIR__ . '/../..' . '/admin/taxonomy/class-taxonomy-metabox.php', + 'WPSEO_Taxonomy_Sitemap_Provider' => __DIR__ . '/../..' . '/inc/sitemaps/class-taxonomy-sitemap-provider.php', + 'WPSEO_Term_Metabox_Formatter' => __DIR__ . '/../..' . '/admin/formatter/class-term-metabox-formatter.php', + 'WPSEO_Tracking' => __DIR__ . '/../..' . '/admin/tracking/class-tracking.php', + 'WPSEO_Tracking_Addon_Data' => __DIR__ . '/../..' . '/admin/tracking/class-tracking-addon-data.php', + 'WPSEO_Tracking_Default_Data' => __DIR__ . '/../..' . '/admin/tracking/class-tracking-default-data.php', + 'WPSEO_Tracking_Plugin_Data' => __DIR__ . '/../..' . '/admin/tracking/class-tracking-plugin-data.php', + 'WPSEO_Tracking_Server_Data' => __DIR__ . '/../..' . '/admin/tracking/class-tracking-server-data.php', + 'WPSEO_Tracking_Settings_Data' => __DIR__ . '/../..' . '/admin/tracking/class-tracking-settings-data.php', + 'WPSEO_Tracking_Theme_Data' => __DIR__ . '/../..' . '/admin/tracking/class-tracking-theme-data.php', + 'WPSEO_Upgrade' => __DIR__ . '/../..' . '/inc/class-upgrade.php', + 'WPSEO_Upgrade_History' => __DIR__ . '/../..' . '/inc/class-upgrade-history.php', + 'WPSEO_Utils' => __DIR__ . '/../..' . '/inc/class-wpseo-utils.php', + 'WPSEO_WordPress_AJAX_Integration' => __DIR__ . '/../..' . '/inc/interface-wpseo-wordpress-ajax-integration.php', + 'WPSEO_WordPress_Integration' => __DIR__ . '/../..' . '/inc/interface-wpseo-wordpress-integration.php', + 'WPSEO_Yoast_Columns' => __DIR__ . '/../..' . '/admin/class-yoast-columns.php', + 'Wincher_Dashboard_Widget' => __DIR__ . '/../..' . '/admin/class-wincher-dashboard-widget.php', + 'YoastSEO_Vendor\\GuzzleHttp\\BodySummarizer' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizer.php', + 'YoastSEO_Vendor\\GuzzleHttp\\BodySummarizerInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizerInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Client' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Client.php', + 'YoastSEO_Vendor\\GuzzleHttp\\ClientInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\ClientTrait' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/ClientTrait.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJar.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\CookieJarInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\FileCookieJar' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\SessionCookieJar' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Cookie\\SetCookie' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SetCookie.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\BadResponseException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/BadResponseException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ClientException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ConnectException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/GuzzleException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\InvalidArgumentException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/RequestException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ServerException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\TooManyRedirectsException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Exception\\TransferException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Exception/TransferException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\HandlerStack' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/HandlerStack.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlFactory' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactory.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlFactoryInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlHandler' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\CurlMultiHandler' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\EasyHandle' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/EasyHandle.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\HeaderProcessor' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\MockHandler' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/MockHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\Proxy' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/Proxy.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Handler\\StreamHandler' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Handler/StreamHandler.php', + 'YoastSEO_Vendor\\GuzzleHttp\\MessageFormatter' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatter.php', + 'YoastSEO_Vendor\\GuzzleHttp\\MessageFormatterInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatterInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Middleware' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Middleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Pool' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Pool.php', + 'YoastSEO_Vendor\\GuzzleHttp\\PrepareBodyMiddleware' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\AggregateException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/AggregateException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\CancellationException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/CancellationException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Coroutine' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/Coroutine.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Create' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/Create.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Each' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/Each.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\EachPromise' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/EachPromise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\FulfilledPromise' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/FulfilledPromise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Is' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/Is.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Promise' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/Promise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\PromiseInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/PromiseInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\PromisorInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/PromisorInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\RejectedPromise' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/RejectedPromise.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\RejectionException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/RejectionException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\TaskQueue' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/TaskQueue.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\TaskQueueInterface' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/TaskQueueInterface.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Promise\\Utils' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/promises/src/Utils.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\AppendStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/AppendStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\BufferStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/BufferStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\CachingStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/CachingStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\DroppingStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/DroppingStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Exception\\MalformedUriException' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Exception/MalformedUriException.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\FnStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/FnStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Header' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Header.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\HttpFactory' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/HttpFactory.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\InflateStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/InflateStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\LazyOpenStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/LazyOpenStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\LimitStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/LimitStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Message' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Message.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\MessageTrait' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/MessageTrait.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\MimeType' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/MimeType.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\MultipartStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/MultipartStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\NoSeekStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/NoSeekStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\PumpStream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/PumpStream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Query' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Query.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Request' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Request.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Response' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Response.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Rfc7230' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Rfc7230.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\ServerRequest' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/ServerRequest.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Stream' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Stream.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\StreamDecoratorTrait' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/StreamDecoratorTrait.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\StreamWrapper' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/StreamWrapper.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UploadedFile' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/UploadedFile.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Uri' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Uri.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UriComparator' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/UriComparator.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UriNormalizer' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/UriNormalizer.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\UriResolver' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/UriResolver.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Psr7\\Utils' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/psr7/src/Utils.php', + 'YoastSEO_Vendor\\GuzzleHttp\\RedirectMiddleware' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/RedirectMiddleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\RequestOptions' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/RequestOptions.php', + 'YoastSEO_Vendor\\GuzzleHttp\\RetryMiddleware' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/RetryMiddleware.php', + 'YoastSEO_Vendor\\GuzzleHttp\\TransferStats' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/TransferStats.php', + 'YoastSEO_Vendor\\GuzzleHttp\\Utils' => __DIR__ . '/../..' . '/vendor_prefixed/guzzlehttp/guzzle/src/Utils.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\AbstractGrant' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Grant/AbstractGrant.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\AuthorizationCode' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Grant/AuthorizationCode.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\ClientCredentials' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Grant/ClientCredentials.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\Exception\\InvalidGrantException' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\GrantFactory' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Grant/GrantFactory.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\Password' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Grant/Password.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\RefreshToken' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Grant/RefreshToken.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\OptionProvider\\HttpBasicAuthOptionProvider' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\OptionProvider\\OptionProviderInterface' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\OptionProvider\\PostAuthOptionProvider' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\AbstractProvider' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\GenericProvider' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Provider/GenericProvider.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\GenericResourceOwner' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Provider/GenericResourceOwner.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Provider\\ResourceOwnerInterface' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Provider/ResourceOwnerInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Token\\AccessToken' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Token/AccessToken.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Token\\AccessTokenInterface' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Token/AccessTokenInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Token\\ResourceOwnerAccessTokenInterface' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\ArrayAccessorTrait' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/ArrayAccessorTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\BearerAuthorizationTrait' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\GuardedPropertyTrait' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/GuardedPropertyTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\MacAuthorizationTrait' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/MacAuthorizationTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\ProviderRedirectTrait' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/ProviderRedirectTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\QueryBuilderTrait' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/QueryBuilderTrait.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\RequestFactory' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/RequestFactory.php', + 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Tool\\RequiredParameterTrait' => __DIR__ . '/../..' . '/vendor_prefixed/league/oauth2-client/src/Tool/RequiredParameterTrait.php', + 'YoastSEO_Vendor\\Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/container/src/ContainerExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Container\\ContainerInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/container/src/ContainerInterface.php', + 'YoastSEO_Vendor\\Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/container/src/NotFoundExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\ClientExceptionInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-client/src/ClientExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\ClientInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-client/src/ClientInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\NetworkExceptionInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-client/src/NetworkExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Client\\RequestExceptionInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-client/src/RequestExceptionInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-message/src/MessageInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\RequestFactoryInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-factory/src/RequestFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-message/src/RequestInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ResponseFactoryInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-factory/src/ResponseFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-message/src/ResponseInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ServerRequestFactoryInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-factory/src/ServerRequestFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-message/src/ServerRequestInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\StreamFactoryInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-factory/src/StreamFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-message/src/StreamInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UploadedFileFactoryInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-factory/src/UploadedFileFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-message/src/UploadedFileInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UriFactoryInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-factory/src/UriFactoryInterface.php', + 'YoastSEO_Vendor\\Psr\\Http\\Message\\UriInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/http-message/src/UriInterface.php', + 'YoastSEO_Vendor\\Psr\\Log\\AbstractLogger' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/AbstractLogger.php', + 'YoastSEO_Vendor\\Psr\\Log\\InvalidArgumentException' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/InvalidArgumentException.php', + 'YoastSEO_Vendor\\Psr\\Log\\LogLevel' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/LogLevel.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/LoggerAwareInterface.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/LoggerAwareTrait.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerInterface' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/LoggerInterface.php', + 'YoastSEO_Vendor\\Psr\\Log\\LoggerTrait' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/LoggerTrait.php', + 'YoastSEO_Vendor\\Psr\\Log\\NullLogger' => __DIR__ . '/../..' . '/vendor_prefixed/psr/log/Psr/Log/NullLogger.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Argument\\RewindableGenerator' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Container' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Container.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/ContainerInterface.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/LogicException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/RuntimeException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php', + 'YoastSEO_Vendor\\Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => __DIR__ . '/../..' . '/vendor_prefixed/symfony/dependency-injection/ResettableContainerInterface.php', + 'Yoast\\WHIPv2\\Configuration' => __DIR__ . '/..' . '/yoast/whip/src/Configuration.php', + 'Yoast\\WHIPv2\\Exceptions\\EmptyProperty' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/EmptyProperty.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidOperatorType' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/InvalidOperatorType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidType' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/InvalidType.php', + 'Yoast\\WHIPv2\\Exceptions\\InvalidVersionComparisonString' => __DIR__ . '/..' . '/yoast/whip/src/Exceptions/InvalidVersionComparisonString.php', + 'Yoast\\WHIPv2\\Host' => __DIR__ . '/..' . '/yoast/whip/src/Host.php', + 'Yoast\\WHIPv2\\Interfaces\\DismissStorage' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/DismissStorage.php', + 'Yoast\\WHIPv2\\Interfaces\\Listener' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/Listener.php', + 'Yoast\\WHIPv2\\Interfaces\\Message' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/Message.php', + 'Yoast\\WHIPv2\\Interfaces\\MessagePresenter' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/MessagePresenter.php', + 'Yoast\\WHIPv2\\Interfaces\\Requirement' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/Requirement.php', + 'Yoast\\WHIPv2\\Interfaces\\VersionDetector' => __DIR__ . '/..' . '/yoast/whip/src/Interfaces/VersionDetector.php', + 'Yoast\\WHIPv2\\MessageDismisser' => __DIR__ . '/..' . '/yoast/whip/src/MessageDismisser.php', + 'Yoast\\WHIPv2\\MessageFormatter' => __DIR__ . '/..' . '/yoast/whip/src/MessageFormatter.php', + 'Yoast\\WHIPv2\\MessagesManager' => __DIR__ . '/..' . '/yoast/whip/src/MessagesManager.php', + 'Yoast\\WHIPv2\\Messages\\BasicMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/BasicMessage.php', + 'Yoast\\WHIPv2\\Messages\\HostMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/HostMessage.php', + 'Yoast\\WHIPv2\\Messages\\InvalidVersionRequirementMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php', + 'Yoast\\WHIPv2\\Messages\\NullMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/NullMessage.php', + 'Yoast\\WHIPv2\\Messages\\UpgradePhpMessage' => __DIR__ . '/..' . '/yoast/whip/src/Messages/UpgradePhpMessage.php', + 'Yoast\\WHIPv2\\Presenters\\WPMessagePresenter' => __DIR__ . '/..' . '/yoast/whip/src/Presenters/WPMessagePresenter.php', + 'Yoast\\WHIPv2\\RequirementsChecker' => __DIR__ . '/..' . '/yoast/whip/src/RequirementsChecker.php', + 'Yoast\\WHIPv2\\VersionRequirement' => __DIR__ . '/..' . '/yoast/whip/src/VersionRequirement.php', + 'Yoast\\WHIPv2\\WPDismissOption' => __DIR__ . '/..' . '/yoast/whip/src/WPDismissOption.php', + 'Yoast\\WHIPv2\\WPMessageDismissListener' => __DIR__ . '/..' . '/yoast/whip/src/WPMessageDismissListener.php', + 'Yoast\\WP\\Lib\\Abstract_Main' => __DIR__ . '/../..' . '/lib/abstract-main.php', + 'Yoast\\WP\\Lib\\Dependency_Injection\\Container_Registry' => __DIR__ . '/../..' . '/lib/dependency-injection/container-registry.php', + 'Yoast\\WP\\Lib\\Migrations\\Adapter' => __DIR__ . '/../..' . '/lib/migrations/adapter.php', + 'Yoast\\WP\\Lib\\Migrations\\Column' => __DIR__ . '/../..' . '/lib/migrations/column.php', + 'Yoast\\WP\\Lib\\Migrations\\Constants' => __DIR__ . '/../..' . '/lib/migrations/constants.php', + 'Yoast\\WP\\Lib\\Migrations\\Migration' => __DIR__ . '/../..' . '/lib/migrations/migration.php', + 'Yoast\\WP\\Lib\\Migrations\\Table' => __DIR__ . '/../..' . '/lib/migrations/table.php', + 'Yoast\\WP\\Lib\\Model' => __DIR__ . '/../..' . '/lib/model.php', + 'Yoast\\WP\\Lib\\ORM' => __DIR__ . '/../..' . '/lib/orm.php', + 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Activate_Action' => __DIR__ . '/../..' . '/src/actions/addon-installation/addon-activate-action.php', + 'Yoast\\WP\\SEO\\Actions\\Addon_Installation\\Addon_Install_Action' => __DIR__ . '/../..' . '/src/actions/addon-installation/addon-install-action.php', + 'Yoast\\WP\\SEO\\Actions\\Alert_Dismissal_Action' => __DIR__ . '/../..' . '/src/actions/alert-dismissal-action.php', + 'Yoast\\WP\\SEO\\Actions\\Configuration\\First_Time_Configuration_Action' => __DIR__ . '/../..' . '/src/actions/configuration/first-time-configuration-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Abstract_Aioseo_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/abstract-aioseo-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Abstract_Aioseo_Settings_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/abstract-aioseo-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Cleanup_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-cleanup-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Custom_Archive_Settings_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-custom-archive-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Default_Archive_Settings_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-default-archive-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_General_Settings_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-general-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posts_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-posts-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Posttype_Defaults_Settings_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-posttype-defaults-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Taxonomy_Settings_Importing_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-taxonomy-settings-importing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Aioseo\\Aioseo_Validate_Data_Action' => __DIR__ . '/../..' . '/src/actions/importing/aioseo/aioseo-validate-data-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Deactivate_Conflicting_Plugins_Action' => __DIR__ . '/../..' . '/src/actions/importing/deactivate-conflicting-plugins-action.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Importing_Action_Interface' => __DIR__ . '/../..' . '/src/actions/importing/importing-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Importing\\Importing_Indexation_Action_Interface' => __DIR__ . '/../..' . '/src/actions/importing/importing-indexation-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Indexables\\Indexable_Head_Action' => __DIR__ . '/../..' . '/src/actions/indexables/indexable-head-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Abstract_Indexing_Action' => __DIR__ . '/../..' . '/src/actions/indexing/abstract-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Abstract_Link_Indexing_Action' => __DIR__ . '/../..' . '/src/actions/indexing/abstract-link-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_General_Indexation_Action' => __DIR__ . '/../..' . '/src/actions/indexing/indexable-general-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Indexing_Complete_Action' => __DIR__ . '/../..' . '/src/actions/indexing/indexable-indexing-complete-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Indexation_Action' => __DIR__ . '/../..' . '/src/actions/indexing/indexable-post-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Post_Type_Archive_Indexation_Action' => __DIR__ . '/../..' . '/src/actions/indexing/indexable-post-type-archive-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexable_Term_Indexation_Action' => __DIR__ . '/../..' . '/src/actions/indexing/indexable-term-indexation-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexation_Action_Interface' => __DIR__ . '/../..' . '/src/actions/indexing/indexation-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Complete_Action' => __DIR__ . '/../..' . '/src/actions/indexing/indexing-complete-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Indexing_Prepare_Action' => __DIR__ . '/../..' . '/src/actions/indexing/indexing-prepare-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Limited_Indexing_Action_Interface' => __DIR__ . '/../..' . '/src/actions/indexing/limited-indexing-action-interface.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Post_Link_Indexing_Action' => __DIR__ . '/../..' . '/src/actions/indexing/post-link-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Indexing\\Term_Link_Indexing_Action' => __DIR__ . '/../..' . '/src/actions/indexing/term-link-indexing-action.php', + 'Yoast\\WP\\SEO\\Actions\\Integrations_Action' => __DIR__ . '/../..' . '/src/actions/integrations-action.php', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Login_Action' => __DIR__ . '/../..' . '/src/actions/semrush/semrush-login-action.php', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Options_Action' => __DIR__ . '/../..' . '/src/actions/semrush/semrush-options-action.php', + 'Yoast\\WP\\SEO\\Actions\\SEMrush\\SEMrush_Phrases_Action' => __DIR__ . '/../..' . '/src/actions/semrush/semrush-phrases-action.php', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Account_Action' => __DIR__ . '/../..' . '/src/actions/wincher/wincher-account-action.php', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Keyphrases_Action' => __DIR__ . '/../..' . '/src/actions/wincher/wincher-keyphrases-action.php', + 'Yoast\\WP\\SEO\\Actions\\Wincher\\Wincher_Login_Action' => __DIR__ . '/../..' . '/src/actions/wincher/wincher-login-action.php', + 'Yoast\\WP\\SEO\\Analytics\\Application\\Missing_Indexables_Collector' => __DIR__ . '/../..' . '/src/analytics/application/missing-indexables-collector.php', + 'Yoast\\WP\\SEO\\Analytics\\Application\\To_Be_Cleaned_Indexables_Collector' => __DIR__ . '/../..' . '/src/analytics/application/to-be-cleaned-indexables-collector.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\Missing_Indexable_Bucket' => __DIR__ . '/../..' . '/src/analytics/domain/missing-indexable-bucket.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\Missing_Indexable_Count' => __DIR__ . '/../..' . '/src/analytics/domain/missing-indexable-count.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\To_Be_Cleaned_Indexable_Bucket' => __DIR__ . '/../..' . '/src/analytics/domain/to-be-cleaned-indexable-bucket.php', + 'Yoast\\WP\\SEO\\Analytics\\Domain\\To_Be_Cleaned_Indexable_Count' => __DIR__ . '/../..' . '/src/analytics/domain/to-be-cleaned-indexable-count.php', + 'Yoast\\WP\\SEO\\Analytics\\User_Interface\\Last_Completed_Indexation_Integration' => __DIR__ . '/../..' . '/src/analytics/user-interface/last-completed-indexation-integration.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Author_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-author-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Date_Archive_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-date-archive-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Hierarchy_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-hierarchy-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Home_Page_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-home-page-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Link_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-link-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-post-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Post_Type_Archive_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-post-type-archive-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Social_Image_Trait' => __DIR__ . '/../..' . '/src/builders/indexable-social-image-trait.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_System_Page_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-system-page-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Indexable_Term_Builder' => __DIR__ . '/../..' . '/src/builders/indexable-term-builder.php', + 'Yoast\\WP\\SEO\\Builders\\Primary_Term_Builder' => __DIR__ . '/../..' . '/src/builders/primary-term-builder.php', + 'Yoast\\WP\\SEO\\Commands\\Cleanup_Command' => __DIR__ . '/../..' . '/src/commands/cleanup-command.php', + 'Yoast\\WP\\SEO\\Commands\\Command_Interface' => __DIR__ . '/../..' . '/src/commands/command-interface.php', + 'Yoast\\WP\\SEO\\Commands\\Index_Command' => __DIR__ . '/../..' . '/src/commands/index-command.php', + 'Yoast\\WP\\SEO\\Conditionals\\Addon_Installation_Conditional' => __DIR__ . '/../..' . '/src/conditionals/addon-installation-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Doing_Post_Quick_Edit_Save_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin/doing-post-quick-edit-save-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Estimated_Reading_Time_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin/estimated-reading-time-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Licenses_Page_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin/licenses-page-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Non_Network_Admin_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin/non-network-admin-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Post_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin/post-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Posts_Overview_Or_Ajax_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin/posts-overview-or-ajax-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin\\Yoast_Admin_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin/yoast-admin-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Admin_Conditional' => __DIR__ . '/../..' . '/src/conditionals/admin-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Attachment_Redirections_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/attachment-redirections-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Conditional' => __DIR__ . '/../..' . '/src/conditionals/conditional-interface.php', + 'Yoast\\WP\\SEO\\Conditionals\\Deactivating_Yoast_Seo_Conditional' => __DIR__ . '/../..' . '/src/conditionals/deactivating-yoast-seo-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Development_Conditional' => __DIR__ . '/../..' . '/src/conditionals/development-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Feature_Flag_Conditional' => __DIR__ . '/../..' . '/src/conditionals/feature-flag-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Front_End_Conditional' => __DIR__ . '/../..' . '/src/conditionals/front-end-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Get_Request_Conditional' => __DIR__ . '/../..' . '/src/conditionals/get-request-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Headless_Rest_Endpoints_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/headless-rest-endpoints-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Import_Tool_Selected_Conditional' => __DIR__ . '/../..' . '/src/conditionals/import-tool-selected-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Jetpack_Conditional' => __DIR__ . '/../..' . '/src/conditionals/jetpack-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Migrations_Conditional' => __DIR__ . '/../..' . '/src/conditionals/migrations-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\New_Settings_Ui_Conditional' => __DIR__ . '/../..' . '/src/conditionals/new-settings-ui-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\News_Conditional' => __DIR__ . '/../..' . '/src/conditionals/news-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\No_Conditionals' => __DIR__ . '/../..' . '/src/conditionals/no-conditionals-trait.php', + 'Yoast\\WP\\SEO\\Conditionals\\No_Tool_Selected_Conditional' => __DIR__ . '/../..' . '/src/conditionals/no-tool-selected-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Non_Multisite_Conditional' => __DIR__ . '/../..' . '/src/conditionals/non-multisite-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Not_Admin_Ajax_Conditional' => __DIR__ . '/../..' . '/src/conditionals/not-admin-ajax-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Open_Graph_Conditional' => __DIR__ . '/../..' . '/src/conditionals/open-graph-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Premium_Active_Conditional' => __DIR__ . '/../..' . '/src/conditionals/premium-active-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Premium_Inactive_Conditional' => __DIR__ . '/../..' . '/src/conditionals/premium-inactive-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Primary_Category_Conditional' => __DIR__ . '/../..' . '/src/conditionals/primary-category-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Robots_Txt_Conditional' => __DIR__ . '/../..' . '/src/conditionals/robots-txt-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\SEMrush_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/semrush-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Settings_Conditional' => __DIR__ . '/../..' . '/src/conditionals/settings-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Should_Index_Links_Conditional' => __DIR__ . '/../..' . '/src/conditionals/should-index-links-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Text_Formality_Conditional' => __DIR__ . '/../..' . '/src/conditionals/text-formality-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Activated_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/elementor-activated-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Elementor_Edit_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/elementor-edit-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Active_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/jetpack-boost-active-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Jetpack_Boost_Not_Premium_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/jetpack-boost-not-premium-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Polylang_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/polylang-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\TranslatePress_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/translatepress-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\W3_Total_Cache_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/w3-total-cache-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/wpml-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\WPML_WPSEO_Conditional' => __DIR__ . '/../..' . '/src/conditionals/third-party/wpml-wpseo-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Integration_Active_Conditional' => __DIR__ . '/../..' . '/src/deprecated/src/conditionals/third-party/wordproof-integration-active-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Third_Party\\Wordproof_Plugin_Inactive_Conditional' => __DIR__ . '/../..' . '/src/deprecated/src/conditionals/third-party/wordproof-plugin-inactive-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Traits\\Admin_Conditional_Trait' => __DIR__ . '/../..' . '/src/conditionals/traits/admin-conditional-trait.php', + 'Yoast\\WP\\SEO\\Conditionals\\Updated_Importer_Framework_Conditional' => __DIR__ . '/../..' . '/src/conditionals/updated-importer-framework-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Edit_Users_Conditional' => __DIR__ . '/../..' . '/src/conditionals/user-can-edit-users-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Manage_Wpseo_Options_Conditional' => __DIR__ . '/../..' . '/src/conditionals/user-can-manage-wpseo-options-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Can_Publish_Posts_And_Pages_Conditional' => __DIR__ . '/../..' . '/src/conditionals/user-can-publish-posts-and-pages-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Edit_Conditional' => __DIR__ . '/../..' . '/src/conditionals/user-edit-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\User_Profile_Conditional' => __DIR__ . '/../..' . '/src/conditionals/user-profile-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\WP_CRON_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/wp-cron-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\WP_Robots_Conditional' => __DIR__ . '/../..' . '/src/conditionals/wp-robots-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Web_Stories_Conditional' => __DIR__ . '/../..' . '/src/conditionals/web-stories-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Automatically_Track_Conditional' => __DIR__ . '/../..' . '/src/conditionals/wincher-automatically-track-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Conditional' => __DIR__ . '/../..' . '/src/conditionals/wincher-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Enabled_Conditional' => __DIR__ . '/../..' . '/src/conditionals/wincher-enabled-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Wincher_Token_Conditional' => __DIR__ . '/../..' . '/src/conditionals/wincher-token-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\WooCommerce_Conditional' => __DIR__ . '/../..' . '/src/conditionals/woocommerce-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\XMLRPC_Conditional' => __DIR__ . '/../..' . '/src/conditionals/xmlrpc-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Admin_And_Dashboard_Conditional' => __DIR__ . '/../..' . '/src/conditionals/yoast-admin-and-dashboard-conditional.php', + 'Yoast\\WP\\SEO\\Conditionals\\Yoast_Tools_Page_Conditional' => __DIR__ . '/../..' . '/src/conditionals/yoast-tools-page-conditional.php', + 'Yoast\\WP\\SEO\\Config\\Badge_Group_Names' => __DIR__ . '/../..' . '/src/config/badge-group-names.php', + 'Yoast\\WP\\SEO\\Config\\Conflicting_Plugins' => __DIR__ . '/../..' . '/src/config/conflicting-plugins.php', + 'Yoast\\WP\\SEO\\Config\\Indexing_Reasons' => __DIR__ . '/../..' . '/src/config/indexing-reasons.php', + 'Yoast\\WP\\SEO\\Config\\Migration_Status' => __DIR__ . '/../..' . '/src/config/migration-status.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddCollationToTables' => __DIR__ . '/../..' . '/src/config/migrations/20200408101900_AddCollationToTables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddColumnsToIndexables' => __DIR__ . '/../..' . '/src/config/migrations/20200420073606_AddColumnsToIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddEstimatedReadingTime' => __DIR__ . '/../..' . '/src/config/migrations/20201202144329_AddEstimatedReadingTime.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddHasAncestorsColumn' => __DIR__ . '/../..' . '/src/config/migrations/20200609154515_AddHasAncestorsColumn.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddInclusiveLanguageScore' => __DIR__ . '/../..' . '/src/config/migrations/20230417083836_AddInclusiveLanguageScore.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexableObjectIdAndTypeIndex' => __DIR__ . '/../..' . '/src/config/migrations/20200430075614_AddIndexableObjectIdAndTypeIndex.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddIndexesForProminentWordsOnIndexables' => __DIR__ . '/../..' . '/src/config/migrations/20200728095334_AddIndexesForProminentWordsOnIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddObjectTimestamps' => __DIR__ . '/../..' . '/src/config/migrations/20211020091404_AddObjectTimestamps.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\AddVersionColumnToIndexables' => __DIR__ . '/../..' . '/src/config/migrations/20210817092415_AddVersionColumnToIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\BreadcrumbTitleAndHierarchyReset' => __DIR__ . '/../..' . '/src/config/migrations/20200428123747_BreadcrumbTitleAndHierarchyReset.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ClearIndexableTables' => __DIR__ . '/../..' . '/src/config/migrations/20200430150130_ClearIndexableTables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateIndexableSubpagesIndex' => __DIR__ . '/../..' . '/src/config/migrations/20200702141921_CreateIndexableSubpagesIndex.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\CreateSEOLinksTable' => __DIR__ . '/../..' . '/src/config/migrations/20200617122511_CreateSEOLinksTable.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\DeleteDuplicateIndexables' => __DIR__ . '/../..' . '/src/config/migrations/20200507054848_DeleteDuplicateIndexables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableColumnLengths' => __DIR__ . '/../..' . '/src/config/migrations/20200428194858_ExpandIndexableColumnLengths.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandIndexableIDColumnLengths' => __DIR__ . '/../..' . '/src/config/migrations/20201216124002_ExpandIndexableIDColumnLengths.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ExpandPrimaryTermIDColumnLengths' => __DIR__ . '/../..' . '/src/config/migrations/20201216141134_ExpandPrimaryTermIDColumnLengths.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ReplacePermalinkHashIndex' => __DIR__ . '/../..' . '/src/config/migrations/20200616130143_ReplacePermalinkHashIndex.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\ResetIndexableHierarchyTable' => __DIR__ . '/../..' . '/src/config/migrations/20200513133401_ResetIndexableHierarchyTable.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\TruncateIndexableTables' => __DIR__ . '/../..' . '/src/config/migrations/20200429105310_TruncateIndexableTables.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastDropIndexableMetaTableIfExists' => __DIR__ . '/../..' . '/src/config/migrations/20190529075038_WpYoastDropIndexableMetaTableIfExists.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexable' => __DIR__ . '/../..' . '/src/config/migrations/20171228151840_WpYoastIndexable.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastIndexableHierarchy' => __DIR__ . '/../..' . '/src/config/migrations/20191011111109_WpYoastIndexableHierarchy.php', + 'Yoast\\WP\\SEO\\Config\\Migrations\\WpYoastPrimaryTerm' => __DIR__ . '/../..' . '/src/config/migrations/20171228151841_WpYoastPrimaryTerm.php', + 'Yoast\\WP\\SEO\\Config\\OAuth_Client' => __DIR__ . '/../..' . '/src/config/oauth-client.php', + 'Yoast\\WP\\SEO\\Config\\Researcher_Languages' => __DIR__ . '/../..' . '/src/config/researcher-languages.php', + 'Yoast\\WP\\SEO\\Config\\SEMrush_Client' => __DIR__ . '/../..' . '/src/config/semrush-client.php', + 'Yoast\\WP\\SEO\\Config\\Schema_IDs' => __DIR__ . '/../..' . '/src/config/schema-ids.php', + 'Yoast\\WP\\SEO\\Config\\Schema_Types' => __DIR__ . '/../..' . '/src/config/schema-types.php', + 'Yoast\\WP\\SEO\\Config\\Wincher_Client' => __DIR__ . '/../..' . '/src/config/wincher-client.php', + 'Yoast\\WP\\SEO\\Config\\Wincher_PKCE_Provider' => __DIR__ . '/../..' . '/src/config/wincher-pkce-provider.php', + 'Yoast\\WP\\SEO\\Config\\Wordproof_App_Config' => __DIR__ . '/../..' . '/src/deprecated/src/config/wordproof-app-config.php', + 'Yoast\\WP\\SEO\\Config\\Wordproof_Translations' => __DIR__ . '/../..' . '/src/deprecated/src/config/wordproof-translations.php', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Dismiss_Notifications' => __DIR__ . '/../..' . '/src/content-type-visibility/application/content-type-visibility-dismiss-notifications.php', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\Application\\Content_Type_Visibility_Watcher_Actions' => __DIR__ . '/../..' . '/src/content-type-visibility/application/content-type-visibility-watcher-actions.php', + 'Yoast\\WP\\SEO\\Content_Type_Visibility\\User_Interface\\Content_Type_Visibility_Dismiss_New_Route' => __DIR__ . '/../..' . '/src/content-type-visibility/user-interface/content-type-visibility-dismiss-new-route.php', + 'Yoast\\WP\\SEO\\Context\\Meta_Tags_Context' => __DIR__ . '/../..' . '/src/context/meta-tags-context.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Analysis_Features\\Enabled_Analysis_Features_Repository' => __DIR__ . '/../..' . '/src/editors/application/analysis-features/enabled-analysis-features-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Integrations\\Integration_Information_Repository' => __DIR__ . '/../..' . '/src/editors/application/integrations/integration-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Post_Seo_Information_Repository' => __DIR__ . '/../..' . '/src/editors/application/seo/post-seo-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Seo\\Term_Seo_Information_Repository' => __DIR__ . '/../..' . '/src/editors/application/seo/term-seo-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Application\\Site\\Website_Information_Repository' => __DIR__ . '/../..' . '/src/editors/application/site/website-information-repository.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Feature' => __DIR__ . '/../..' . '/src/editors/domain/analysis-features/analysis-feature.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Feature_Interface' => __DIR__ . '/../..' . '/src/editors/domain/analysis-features/analysis-feature-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Analysis_Features\\Analysis_Features_List' => __DIR__ . '/../..' . '/src/editors/domain/analysis-features/analysis-features-list.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Integrations\\Integration_Data_Provider_Interface' => __DIR__ . '/../..' . '/src/editors/domain/integrations/integration-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Description' => __DIR__ . '/../..' . '/src/editors/domain/seo/description.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Keyphrase' => __DIR__ . '/../..' . '/src/editors/domain/seo/keyphrase.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Seo_Plugin_Data_Interface' => __DIR__ . '/../..' . '/src/editors/domain/seo/seo-plugin-data-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Social' => __DIR__ . '/../..' . '/src/editors/domain/seo/social.php', + 'Yoast\\WP\\SEO\\Editors\\Domain\\Seo\\Title' => __DIR__ . '/../..' . '/src/editors/domain/seo/title.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Cornerstone_Content' => __DIR__ . '/../..' . '/src/editors/framework/cornerstone-content.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Inclusive_Language_Analysis' => __DIR__ . '/../..' . '/src/editors/framework/inclusive-language-analysis.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Jetpack_Markdown' => __DIR__ . '/../..' . '/src/editors/framework/integrations/jetpack-markdown.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Multilingual' => __DIR__ . '/../..' . '/src/editors/framework/integrations/multilingual.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Semrush' => __DIR__ . '/../..' . '/src/editors/framework/integrations/semrush.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Integrations\\Wincher' => __DIR__ . '/../..' . '/src/editors/framework/integrations/wincher.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Keyphrase_Analysis' => __DIR__ . '/../..' . '/src/editors/framework/keyphrase-analysis.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Previously_Used_Keyphrase' => __DIR__ . '/../..' . '/src/editors/framework/previously-used-keyphrase.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Readability_Analysis' => __DIR__ . '/../..' . '/src/editors/framework/readability-analysis.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Description_Data_Provider_Interface' => __DIR__ . '/../..' . '/src/editors/framework/seo/description-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Keyphrase_Interface' => __DIR__ . '/../..' . '/src/editors/framework/seo/keyphrase-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Abstract_Post_Seo_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/posts/abstract-post-seo-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Description_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/posts/description-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Keyphrase_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/posts/keyphrase-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Social_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/posts/social-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Posts\\Title_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/posts/title-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Social_Data_Provider_Interface' => __DIR__ . '/../..' . '/src/editors/framework/seo/social-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Abstract_Term_Seo_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/terms/abstract-term-seo-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Description_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/terms/description-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Keyphrase_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/terms/keyphrase-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Social_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/terms/social-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Terms\\Title_Data_Provider' => __DIR__ . '/../..' . '/src/editors/framework/seo/terms/title-data-provider.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Seo\\Title_Data_Provider_Interface' => __DIR__ . '/../..' . '/src/editors/framework/seo/title-data-provider-interface.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Base_Site_Information' => __DIR__ . '/../..' . '/src/editors/framework/site/base-site-information.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Post_Site_Information' => __DIR__ . '/../..' . '/src/editors/framework/site/post-site-information.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Site\\Term_Site_Information' => __DIR__ . '/../..' . '/src/editors/framework/site/term-site-information.php', + 'Yoast\\WP\\SEO\\Editors\\Framework\\Word_Form_Recognition' => __DIR__ . '/../..' . '/src/editors/framework/word-form-recognition.php', + 'Yoast\\WP\\SEO\\Elementor\\Infrastructure\\Request_Post' => __DIR__ . '/../..' . '/src/elementor/infrastructure/request-post.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\Addon_Activation_Error_Exception' => __DIR__ . '/../..' . '/src/exceptions/addon-installation/addon-activation-error-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\Addon_Already_Installed_Exception' => __DIR__ . '/../..' . '/src/exceptions/addon-installation/addon-already-installed-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\Addon_Installation_Error_Exception' => __DIR__ . '/../..' . '/src/exceptions/addon-installation/addon-installation-error-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\User_Cannot_Activate_Plugins_Exception' => __DIR__ . '/../..' . '/src/exceptions/addon-installation/user-cannot-activate-plugins-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Addon_Installation\\User_Cannot_Install_Plugins_Exception' => __DIR__ . '/../..' . '/src/exceptions/addon-installation/user-cannot-install-plugins-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Forbidden_Property_Mutation_Exception' => __DIR__ . '/../..' . '/src/exceptions/forbidden-property-mutation-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Importing\\Aioseo_Validation_Exception' => __DIR__ . '/../..' . '/src/exceptions/importing/aioseo-validation-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Author_Not_Built_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/author-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Indexable_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/indexable-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Invalid_Term_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/invalid-term-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Not_Built_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Post_Not_Built_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/post-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Post_Not_Found_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/post-not-found-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Post_Type_Not_Built_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/post-type-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Source_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/source-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Term_Not_Built_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/term-not-built-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Indexable\\Term_Not_Found_Exception' => __DIR__ . '/../..' . '/src/exceptions/indexable/term-not-found-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\Missing_Method' => __DIR__ . '/../..' . '/src/exceptions/missing-method.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Authentication_Failed_Exception' => __DIR__ . '/../..' . '/src/exceptions/oauth/authentication-failed-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Tokens\\Empty_Property_Exception' => __DIR__ . '/../..' . '/src/exceptions/oauth/tokens/empty-property-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Tokens\\Empty_Token_Exception' => __DIR__ . '/../..' . '/src/exceptions/oauth/tokens/empty-token-exception.php', + 'Yoast\\WP\\SEO\\Exceptions\\OAuth\\Tokens\\Failed_Storage_Exception' => __DIR__ . '/../..' . '/src/exceptions/oauth/tokens/failed-storage-exception.php', + 'Yoast\\WP\\SEO\\Generated\\Cached_Container' => __DIR__ . '/../..' . '/src/generated/container.php', + 'Yoast\\WP\\SEO\\Generators\\Breadcrumbs_Generator' => __DIR__ . '/../..' . '/src/generators/breadcrumbs-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Generator_Interface' => __DIR__ . '/../..' . '/src/generators/generator-interface.php', + 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Image_Generator' => __DIR__ . '/../..' . '/src/generators/open-graph-image-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Open_Graph_Locale_Generator' => __DIR__ . '/../..' . '/src/generators/open-graph-locale-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Abstract_Schema_Piece' => __DIR__ . '/../..' . '/src/generators/schema/abstract-schema-piece.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Article' => __DIR__ . '/../..' . '/src/generators/schema/article.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Author' => __DIR__ . '/../..' . '/src/generators/schema/author.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Breadcrumb' => __DIR__ . '/../..' . '/src/generators/schema/breadcrumb.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\FAQ' => __DIR__ . '/../..' . '/src/generators/schema/faq.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\HowTo' => __DIR__ . '/../..' . '/src/generators/schema/howto.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Main_Image' => __DIR__ . '/../..' . '/src/generators/schema/main-image.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Organization' => __DIR__ . '/../..' . '/src/generators/schema/organization.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Person' => __DIR__ . '/../..' . '/src/generators/schema/person.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\WebPage' => __DIR__ . '/../..' . '/src/generators/schema/webpage.php', + 'Yoast\\WP\\SEO\\Generators\\Schema\\Website' => __DIR__ . '/../..' . '/src/generators/schema/website.php', + 'Yoast\\WP\\SEO\\Generators\\Schema_Generator' => __DIR__ . '/../..' . '/src/generators/schema-generator.php', + 'Yoast\\WP\\SEO\\Generators\\Twitter_Image_Generator' => __DIR__ . '/../..' . '/src/generators/twitter-image-generator.php', + 'Yoast\\WP\\SEO\\Helpers\\Aioseo_Helper' => __DIR__ . '/../..' . '/src/helpers/aioseo-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Asset_Helper' => __DIR__ . '/../..' . '/src/helpers/asset-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Attachment_Cleanup_Helper' => __DIR__ . '/../..' . '/src/helpers/attachment-cleanup-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Author_Archive_Helper' => __DIR__ . '/../..' . '/src/helpers/author-archive-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Blocks_Helper' => __DIR__ . '/../..' . '/src/helpers/blocks-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Capability_Helper' => __DIR__ . '/../..' . '/src/helpers/capability-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Crawl_Cleanup_Helper' => __DIR__ . '/../..' . '/src/helpers/crawl-cleanup-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Curl_Helper' => __DIR__ . '/../..' . '/src/helpers/curl-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Current_Page_Helper' => __DIR__ . '/../..' . '/src/helpers/current-page-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Date_Helper' => __DIR__ . '/../..' . '/src/helpers/date-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Environment_Helper' => __DIR__ . '/../..' . '/src/helpers/environment-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\First_Time_Configuration_Notice_Helper' => __DIR__ . '/../..' . '/src/helpers/first-time-configuration-notice-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Home_Url_Helper' => __DIR__ . '/../..' . '/src/helpers/home-url-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Image_Helper' => __DIR__ . '/../..' . '/src/helpers/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Import_Cursor_Helper' => __DIR__ . '/../..' . '/src/helpers/import-cursor-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Import_Helper' => __DIR__ . '/../..' . '/src/helpers/import-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Indexable_Helper' => __DIR__ . '/../..' . '/src/helpers/indexable-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Indexable_To_Postmeta_Helper' => __DIR__ . '/../..' . '/src/helpers/indexable-to-postmeta-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Indexing_Helper' => __DIR__ . '/../..' . '/src/helpers/indexing-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Language_Helper' => __DIR__ . '/../..' . '/src/helpers/language-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Meta_Helper' => __DIR__ . '/../..' . '/src/helpers/meta-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Notification_Helper' => __DIR__ . '/../..' . '/src/helpers/notification-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Image_Helper' => __DIR__ . '/../..' . '/src/helpers/open-graph/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Open_Graph\\Values_Helper' => __DIR__ . '/../..' . '/src/helpers/open-graph/values-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Options_Helper' => __DIR__ . '/../..' . '/src/helpers/options-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Pagination_Helper' => __DIR__ . '/../..' . '/src/helpers/pagination-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Permalink_Helper' => __DIR__ . '/../..' . '/src/helpers/permalink-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Post_Helper' => __DIR__ . '/../..' . '/src/helpers/post-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Post_Type_Helper' => __DIR__ . '/../..' . '/src/helpers/post-type-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Primary_Term_Helper' => __DIR__ . '/../..' . '/src/helpers/primary-term-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Product_Helper' => __DIR__ . '/../..' . '/src/helpers/product-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Redirect_Helper' => __DIR__ . '/../..' . '/src/helpers/redirect-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Request_Helper' => __DIR__ . '/../..' . '/src/helpers/request-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Require_File_Helper' => __DIR__ . '/../..' . '/src/helpers/require-file-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Robots_Helper' => __DIR__ . '/../..' . '/src/helpers/robots-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Robots_Txt_Helper' => __DIR__ . '/../..' . '/src/helpers/robots-txt-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Sanitization_Helper' => __DIR__ . '/../..' . '/src/helpers/sanitization-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Article_Helper' => __DIR__ . '/../..' . '/src/helpers/schema/article-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\HTML_Helper' => __DIR__ . '/../..' . '/src/helpers/schema/html-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\ID_Helper' => __DIR__ . '/../..' . '/src/helpers/schema/id-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Image_Helper' => __DIR__ . '/../..' . '/src/helpers/schema/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Language_Helper' => __DIR__ . '/../..' . '/src/helpers/schema/language-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Schema\\Replace_Vars_Helper' => __DIR__ . '/../..' . '/src/helpers/schema/replace-vars-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Score_Icon_Helper' => __DIR__ . '/../..' . '/src/helpers/score-icon-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Short_Link_Helper' => __DIR__ . '/../..' . '/src/helpers/short-link-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Site_Helper' => __DIR__ . '/../..' . '/src/helpers/site-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Social_Profiles_Helper' => __DIR__ . '/../..' . '/src/helpers/social-profiles-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\String_Helper' => __DIR__ . '/../..' . '/src/helpers/string-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Taxonomy_Helper' => __DIR__ . '/../..' . '/src/helpers/taxonomy-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Twitter\\Image_Helper' => __DIR__ . '/../..' . '/src/helpers/twitter/image-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Url_Helper' => __DIR__ . '/../..' . '/src/helpers/url-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\User_Helper' => __DIR__ . '/../..' . '/src/helpers/user-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wincher_Helper' => __DIR__ . '/../..' . '/src/helpers/wincher-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Woocommerce_Helper' => __DIR__ . '/../..' . '/src/helpers/woocommerce-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wordpress_Helper' => __DIR__ . '/../..' . '/src/helpers/wordpress-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wordproof_Helper' => __DIR__ . '/../..' . '/src/deprecated/src/helpers/wordproof-helper.php', + 'Yoast\\WP\\SEO\\Helpers\\Wpdb_Helper' => __DIR__ . '/../..' . '/src/helpers/wpdb-helper.php', + 'Yoast\\WP\\SEO\\Initializers\\Crawl_Cleanup_Permalinks' => __DIR__ . '/../..' . '/src/initializers/crawl-cleanup-permalinks.php', + 'Yoast\\WP\\SEO\\Initializers\\Disable_Core_Sitemaps' => __DIR__ . '/../..' . '/src/initializers/disable-core-sitemaps.php', + 'Yoast\\WP\\SEO\\Initializers\\Initializer_Interface' => __DIR__ . '/../..' . '/src/initializers/initializer-interface.php', + 'Yoast\\WP\\SEO\\Initializers\\Migration_Runner' => __DIR__ . '/../..' . '/src/initializers/migration-runner.php', + 'Yoast\\WP\\SEO\\Initializers\\Woocommerce' => __DIR__ . '/../..' . '/src/initializers/woocommerce.php', + 'Yoast\\WP\\SEO\\Integrations\\Abstract_Exclude_Post_Type' => __DIR__ . '/../..' . '/src/integrations/abstract-exclude-post-type.php', + 'Yoast\\WP\\SEO\\Integrations\\Academy_Integration' => __DIR__ . '/../..' . '/src/integrations/academy-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Activation_Cleanup_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/activation-cleanup-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Dialog_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/addon-installation/dialog-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Addon_Installation\\Installation_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/addon-installation/installation-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Admin_Columns_Cache_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/admin-columns-cache-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Background_Indexing_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/background-indexing-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Crawl_Settings_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/crawl-settings-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Cron_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/cron-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Deactivated_Premium_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/deactivated-premium-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Disable_Concatenate_Scripts_Integration' => __DIR__ . '/../..' . '/src/deprecated/src/integrations/admin/disable-concatenate-scripts-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/first-time-configuration-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\First_Time_Configuration_Notice_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/first-time-configuration-notice-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Fix_News_Dependencies_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/fix-news-dependencies-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Health_Check_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/health-check-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\HelpScout_Beacon' => __DIR__ . '/../..' . '/src/integrations/admin/helpscout-beacon.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Import_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/import-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexables_Exclude_Taxonomy_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/indexables-exclude-taxonomy-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Notification_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/indexing-notification-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Indexing_Tool_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/indexing-tool-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Installation_Success_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/installation-success-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Integrations_Page' => __DIR__ . '/../..' . '/src/integrations/admin/integrations-page.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Link_Count_Columns_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/link-count-columns-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Menu_Badge_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/menu-badge-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Migration_Error_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/migration-error-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Configuration_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/old-configuration-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Old_Premium_Integration' => __DIR__ . '/../..' . '/src/deprecated/src/integrations/admin/old-premium-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirect_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/redirect-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Redirects_Page_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/redirects-page-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Unsupported_PHP_Version_Notice' => __DIR__ . '/../..' . '/src/integrations/admin/unsupported-php-version-notice.php', + 'Yoast\\WP\\SEO\\Integrations\\Admin\\Workouts_Integration' => __DIR__ . '/../..' . '/src/integrations/admin/workouts-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Abstract_Dismissable_Alert' => __DIR__ . '/../..' . '/src/integrations/alerts/abstract-dismissable-alert.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Product_Editor_Checklist_Notification' => __DIR__ . '/../..' . '/src/integrations/alerts/black-friday-product-editor-checklist-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Promotion_Notification' => __DIR__ . '/../..' . '/src/integrations/alerts/black-friday-promotion-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Black_Friday_Sidebar_Checklist_Notification' => __DIR__ . '/../..' . '/src/integrations/alerts/black-friday-sidebar-checklist-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Jetpack_Boost_Pre_Publish' => __DIR__ . '/../..' . '/src/integrations/alerts/jetpack-boost-pre-publish.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Trustpilot_Review_Notification' => __DIR__ . '/../..' . '/src/integrations/alerts/trustpilot-review-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Alerts\\Webinar_Promo_Notification' => __DIR__ . '/../..' . '/src/integrations/alerts/webinar-promo-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Breadcrumbs_Block' => __DIR__ . '/../..' . '/src/integrations/blocks/breadcrumbs-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Dynamic_Block' => __DIR__ . '/../..' . '/src/integrations/blocks/abstract-dynamic-block.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Dynamic_Block_V3' => __DIR__ . '/../..' . '/src/integrations/blocks/abstract-dynamic-block-v3.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Internal_Linking_Category' => __DIR__ . '/../..' . '/src/integrations/blocks/block-categories.php', + 'Yoast\\WP\\SEO\\Integrations\\Blocks\\Structured_Data_Blocks' => __DIR__ . '/../..' . '/src/integrations/blocks/structured-data-blocks.php', + 'Yoast\\WP\\SEO\\Integrations\\Breadcrumbs_Integration' => __DIR__ . '/../..' . '/src/integrations/breadcrumbs-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Cleanup_Integration' => __DIR__ . '/../..' . '/src/integrations/cleanup-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Duplicate_Post_Integration' => __DIR__ . '/../..' . '/src/deprecated/src/integrations/duplicate-post-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Estimated_Reading_Time' => __DIR__ . '/../..' . '/src/integrations/estimated-reading-time.php', + 'Yoast\\WP\\SEO\\Integrations\\Exclude_Attachment_Post_Type' => __DIR__ . '/../..' . '/src/integrations/exclude-attachment-post-type.php', + 'Yoast\\WP\\SEO\\Integrations\\Exclude_Oembed_Cache_Post_Type' => __DIR__ . '/../..' . '/src/integrations/exclude-oembed-cache-post-type.php', + 'Yoast\\WP\\SEO\\Integrations\\Feature_Flag_Integration' => __DIR__ . '/../..' . '/src/integrations/feature-flag-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Backwards_Compatibility' => __DIR__ . '/../..' . '/src/integrations/front-end/backwards-compatibility.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Category_Term_Description' => __DIR__ . '/../..' . '/src/integrations/front-end/category-term-description.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Comment_Link_Fixer' => __DIR__ . '/../..' . '/src/integrations/front-end/comment-link-fixer.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Basic' => __DIR__ . '/../..' . '/src/integrations/front-end/crawl-cleanup-basic.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Rss' => __DIR__ . '/../..' . '/src/integrations/front-end/crawl-cleanup-rss.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Crawl_Cleanup_Searches' => __DIR__ . '/../..' . '/src/integrations/front-end/crawl-cleanup-searches.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Feed_Improvements' => __DIR__ . '/../..' . '/src/integrations/front-end/feed-improvements.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Force_Rewrite_Title' => __DIR__ . '/../..' . '/src/integrations/front-end/force-rewrite-title.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Handle_404' => __DIR__ . '/../..' . '/src/integrations/front-end/handle-404.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Indexing_Controls' => __DIR__ . '/../..' . '/src/integrations/front-end/indexing-controls.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Open_Graph_OEmbed' => __DIR__ . '/../..' . '/src/integrations/front-end/open-graph-oembed.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\RSS_Footer_Embed' => __DIR__ . '/../..' . '/src/integrations/front-end/rss-footer-embed.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Redirects' => __DIR__ . '/../..' . '/src/integrations/front-end/redirects.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Robots_Txt_Integration' => __DIR__ . '/../..' . '/src/integrations/front-end/robots-txt-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\Schema_Accessibility_Feature' => __DIR__ . '/../..' . '/src/integrations/front-end/schema-accessibility-feature.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End\\WP_Robots_Integration' => __DIR__ . '/../..' . '/src/integrations/front-end/wp-robots-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Front_End_Integration' => __DIR__ . '/../..' . '/src/integrations/front-end-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Integration_Interface' => __DIR__ . '/../..' . '/src/integrations/integration-interface.php', + 'Yoast\\WP\\SEO\\Integrations\\Primary_Category' => __DIR__ . '/../..' . '/src/integrations/primary-category.php', + 'Yoast\\WP\\SEO\\Integrations\\Settings_Integration' => __DIR__ . '/../..' . '/src/integrations/settings-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Support_Integration' => __DIR__ . '/../..' . '/src/integrations/support-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\AMP' => __DIR__ . '/../..' . '/src/integrations/third-party/amp.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\BbPress' => __DIR__ . '/../..' . '/src/integrations/third-party/bbpress.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Elementor' => __DIR__ . '/../..' . '/src/integrations/third-party/elementor.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_Elementor_Post_Types' => __DIR__ . '/../..' . '/src/integrations/third-party/exclude-elementor-post-types.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Exclude_WooCommerce_Post_Types' => __DIR__ . '/../..' . '/src/integrations/third-party/exclude-woocommerce-post-types.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Jetpack' => __DIR__ . '/../..' . '/src/integrations/third-party/jetpack.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\W3_Total_Cache' => __DIR__ . '/../..' . '/src/integrations/third-party/w3-total-cache.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML' => __DIR__ . '/../..' . '/src/integrations/third-party/wpml.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WPML_WPSEO_Notification' => __DIR__ . '/../..' . '/src/integrations/third-party/wpml-wpseo-notification.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories' => __DIR__ . '/../..' . '/src/integrations/third-party/web-stories.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Web_Stories_Post_Edit' => __DIR__ . '/../..' . '/src/integrations/third-party/web-stories-post-edit.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher' => __DIR__ . '/../..' . '/src/deprecated/src/integrations/third-party/wincher.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wincher_Publish' => __DIR__ . '/../..' . '/src/integrations/third-party/wincher-publish.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce' => __DIR__ . '/../..' . '/src/integrations/third-party/woocommerce.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\WooCommerce_Post_Edit' => __DIR__ . '/../..' . '/src/integrations/third-party/woocommerce-post-edit.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Woocommerce_Permalinks' => __DIR__ . '/../..' . '/src/integrations/third-party/woocommerce-permalinks.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof' => __DIR__ . '/../..' . '/src/deprecated/src/integrations/third-party/wordproof.php', + 'Yoast\\WP\\SEO\\Integrations\\Third_Party\\Wordproof_Integration_Toggle' => __DIR__ . '/../..' . '/src/deprecated/src/integrations/third-party/wordproof-integration-toggle.php', + 'Yoast\\WP\\SEO\\Integrations\\Uninstall_Integration' => __DIR__ . '/../..' . '/src/integrations/uninstall-integration.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Addon_Update_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/addon-update-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Auto_Update_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/auto-update-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Ancestor_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-ancestor-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Attachment_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-attachment-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Archive_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-author-archive-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Author_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-author-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Category_Permalink_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-category-permalink-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Date_Archive_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-date-archive-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_HomeUrl_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-homeurl-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Home_Page_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-home-page-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Permalink_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-permalink-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Meta_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-post-meta-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Archive_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-post-type-archive-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Type_Change_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-post-type-change-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Post_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-post-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Static_Home_Page_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-static-home-page-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_System_Page_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-system-page-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Taxonomy_Change_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-taxonomy-change-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Indexable_Term_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/indexable-term-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Titles_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/option-titles-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Option_Wpseo_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/option-wpseo-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Category_Quick_Edit_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/primary-category-quick-edit-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Primary_Term_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/primary-term-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Search_Engines_Discouraged_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/search-engines-discouraged-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\Watchers\\Woocommerce_Beta_Editor_Watcher' => __DIR__ . '/../..' . '/src/integrations/watchers/woocommerce-beta-editor-watcher.php', + 'Yoast\\WP\\SEO\\Integrations\\XMLRPC' => __DIR__ . '/../..' . '/src/integrations/xmlrpc.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Fix_Assessments_Upsell' => __DIR__ . '/../..' . '/src/introductions/application/ai-fix-assessments-upsell.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Ai_Generate_Titles_And_Descriptions_Introduction_Upsell' => __DIR__ . '/../..' . '/src/deprecated/src/introductions/application/ai-generate-titles-and-descriptions-introduction-upsell.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Current_Page_Trait' => __DIR__ . '/../..' . '/src/introductions/application/current-page-trait.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Introductions_Collector' => __DIR__ . '/../..' . '/src/introductions/application/introductions-collector.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\User_Allowed_Trait' => __DIR__ . '/../..' . '/src/introductions/application/user-allowed-trait.php', + 'Yoast\\WP\\SEO\\Introductions\\Application\\Version_Trait' => __DIR__ . '/../..' . '/src/introductions/application/version-trait.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introduction_Interface' => __DIR__ . '/../..' . '/src/introductions/domain/introduction-interface.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introduction_Item' => __DIR__ . '/../..' . '/src/introductions/domain/introduction-item.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Introductions_Bucket' => __DIR__ . '/../..' . '/src/introductions/domain/introductions-bucket.php', + 'Yoast\\WP\\SEO\\Introductions\\Domain\\Invalid_User_Id_Exception' => __DIR__ . '/../..' . '/src/introductions/domain/invalid-user-id-exception.php', + 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Introductions_Seen_Repository' => __DIR__ . '/../..' . '/src/introductions/infrastructure/introductions-seen-repository.php', + 'Yoast\\WP\\SEO\\Introductions\\Infrastructure\\Wistia_Embed_Permission_Repository' => __DIR__ . '/../..' . '/src/introductions/infrastructure/wistia-embed-permission-repository.php', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Integration' => __DIR__ . '/../..' . '/src/introductions/user-interface/introductions-integration.php', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Introductions_Seen_Route' => __DIR__ . '/../..' . '/src/introductions/user-interface/introductions-seen-route.php', + 'Yoast\\WP\\SEO\\Introductions\\User_Interface\\Wistia_Embed_Permission_Route' => __DIR__ . '/../..' . '/src/introductions/user-interface/wistia-embed-permission-route.php', + 'Yoast\\WP\\SEO\\Loadable_Interface' => __DIR__ . '/../..' . '/src/loadable-interface.php', + 'Yoast\\WP\\SEO\\Loader' => __DIR__ . '/../..' . '/src/loader.php', + 'Yoast\\WP\\SEO\\Loggers\\Logger' => __DIR__ . '/../..' . '/src/loggers/logger.php', + 'Yoast\\WP\\SEO\\Main' => __DIR__ . '/../..' . '/src/main.php', + 'Yoast\\WP\\SEO\\Memoizers\\Meta_Tags_Context_Memoizer' => __DIR__ . '/../..' . '/src/memoizers/meta-tags-context-memoizer.php', + 'Yoast\\WP\\SEO\\Memoizers\\Presentation_Memoizer' => __DIR__ . '/../..' . '/src/memoizers/presentation-memoizer.php', + 'Yoast\\WP\\SEO\\Models\\Indexable' => __DIR__ . '/../..' . '/src/models/indexable.php', + 'Yoast\\WP\\SEO\\Models\\Indexable_Extension' => __DIR__ . '/../..' . '/src/models/indexable-extension.php', + 'Yoast\\WP\\SEO\\Models\\Indexable_Hierarchy' => __DIR__ . '/../..' . '/src/models/indexable-hierarchy.php', + 'Yoast\\WP\\SEO\\Models\\Primary_Term' => __DIR__ . '/../..' . '/src/models/primary-term.php', + 'Yoast\\WP\\SEO\\Models\\SEO_Links' => __DIR__ . '/../..' . '/src/models/seo-links.php', + 'Yoast\\WP\\SEO\\Models\\SEO_Meta' => __DIR__ . '/../..' . '/src/models/seo-meta.php', + 'Yoast\\WP\\SEO\\Presentations\\Abstract_Presentation' => __DIR__ . '/../..' . '/src/presentations/abstract-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Archive_Adjacent' => __DIR__ . '/../..' . '/src/presentations/archive-adjacent-trait.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Author_Archive_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-author-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Date_Archive_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-date-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Error_Page_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-error-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Home_Page_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-home-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Archive_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-post-type-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Post_Type_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-post-type-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Search_Result_Page_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-search-result-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Home_Page_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-static-home-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Static_Posts_Page_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-static-posts-page-presentation.php', + 'Yoast\\WP\\SEO\\Presentations\\Indexable_Term_Archive_Presentation' => __DIR__ . '/../..' . '/src/presentations/indexable-term-archive-presentation.php', + 'Yoast\\WP\\SEO\\Presenters\\Abstract_Indexable_Presenter' => __DIR__ . '/../..' . '/src/presenters/abstract-indexable-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Abstract_Indexable_Tag_Presenter' => __DIR__ . '/../..' . '/src/presenters/abstract-indexable-tag-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Abstract_Presenter' => __DIR__ . '/../..' . '/src/presenters/abstract-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Alert_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/alert-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Badge_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/badge-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Beta_Badge_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/beta-badge-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Help_Link_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/help-link-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_Error_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/indexing-error-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_Failed_Notification_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/indexing-failed-notification-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_List_Item_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/indexing-list-item-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Indexing_Notification_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/indexing-notification-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Light_Switch_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/light-switch-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Meta_Fields_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/meta-fields-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Migration_Error_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/migration-error-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Notice_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/notice-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Premium_Badge_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/premium-badge-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Search_Engines_Discouraged_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/search-engines-discouraged-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Sidebar_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/sidebar-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Admin\\Woocommerce_Beta_Editor_Presenter' => __DIR__ . '/../..' . '/src/presenters/admin/woocommerce-beta-editor-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Breadcrumbs_Presenter' => __DIR__ . '/../..' . '/src/presenters/breadcrumbs-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Canonical_Presenter' => __DIR__ . '/../..' . '/src/presenters/canonical-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Debug\\Marker_Close_Presenter' => __DIR__ . '/../..' . '/src/presenters/debug/marker-close-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Debug\\Marker_Open_Presenter' => __DIR__ . '/../..' . '/src/presenters/debug/marker-open-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Meta_Author_Presenter' => __DIR__ . '/../..' . '/src/presenters/meta-author-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Meta_Description_Presenter' => __DIR__ . '/../..' . '/src/presenters/meta-description-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Author_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/article-author-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Modified_Time_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/article-modified-time-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Published_Time_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/article-published-time-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Article_Publisher_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/article-publisher-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Description_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/description-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Image_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/image-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Locale_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/locale-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Site_Name_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/site-name-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Title_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/title-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Type_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/type-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Open_Graph\\Url_Presenter' => __DIR__ . '/../..' . '/src/presenters/open-graph/url-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Rel_Next_Presenter' => __DIR__ . '/../..' . '/src/presenters/rel-next-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Rel_Prev_Presenter' => __DIR__ . '/../..' . '/src/presenters/rel-prev-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Robots_Presenter' => __DIR__ . '/../..' . '/src/presenters/robots-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Robots_Txt_Presenter' => __DIR__ . '/../..' . '/src/presenters/robots-txt-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Schema_Presenter' => __DIR__ . '/../..' . '/src/presenters/schema-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Score_Icon_Presenter' => __DIR__ . '/../..' . '/src/presenters/score-icon-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Slack\\Enhanced_Data_Presenter' => __DIR__ . '/../..' . '/src/presenters/slack/enhanced-data-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Title_Presenter' => __DIR__ . '/../..' . '/src/presenters/title-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Card_Presenter' => __DIR__ . '/../..' . '/src/presenters/twitter/card-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Creator_Presenter' => __DIR__ . '/../..' . '/src/presenters/twitter/creator-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Description_Presenter' => __DIR__ . '/../..' . '/src/presenters/twitter/description-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Image_Presenter' => __DIR__ . '/../..' . '/src/presenters/twitter/image-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Site_Presenter' => __DIR__ . '/../..' . '/src/presenters/twitter/site-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Twitter\\Title_Presenter' => __DIR__ . '/../..' . '/src/presenters/twitter/title-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Url_List_Presenter' => __DIR__ . '/../..' . '/src/presenters/url-list-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Baidu_Presenter' => __DIR__ . '/../..' . '/src/presenters/webmaster/baidu-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Bing_Presenter' => __DIR__ . '/../..' . '/src/presenters/webmaster/bing-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Google_Presenter' => __DIR__ . '/../..' . '/src/presenters/webmaster/google-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Pinterest_Presenter' => __DIR__ . '/../..' . '/src/presenters/webmaster/pinterest-presenter.php', + 'Yoast\\WP\\SEO\\Presenters\\Webmaster\\Yandex_Presenter' => __DIR__ . '/../..' . '/src/presenters/webmaster/yandex-presenter.php', + 'Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager' => __DIR__ . '/../..' . '/src/promotions/application/promotion-manager.php', + 'Yoast\\WP\\SEO\\Promotions\\Application\\Promotion_Manager_Interface' => __DIR__ . '/../..' . '/src/promotions/application/promotion-manager-interface.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Abstract_Promotion' => __DIR__ . '/../..' . '/src/promotions/domain/abstract-promotion.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Black_Friday_Checklist_Promotion' => __DIR__ . '/../..' . '/src/promotions/domain/black-friday-checklist-promotion.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Black_Friday_Promotion' => __DIR__ . '/../..' . '/src/promotions/domain/black-friday-promotion.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Promotion_Interface' => __DIR__ . '/../..' . '/src/promotions/domain/promotion-interface.php', + 'Yoast\\WP\\SEO\\Promotions\\Domain\\Time_Interval' => __DIR__ . '/../..' . '/src/promotions/domain/time-interval.php', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Cleanup_Repository' => __DIR__ . '/../..' . '/src/repositories/indexable-cleanup-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Hierarchy_Repository' => __DIR__ . '/../..' . '/src/repositories/indexable-hierarchy-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\Indexable_Repository' => __DIR__ . '/../..' . '/src/repositories/indexable-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\Primary_Term_Repository' => __DIR__ . '/../..' . '/src/repositories/primary-term-repository.php', + 'Yoast\\WP\\SEO\\Repositories\\SEO_Links_Repository' => __DIR__ . '/../..' . '/src/repositories/seo-links-repository.php', + 'Yoast\\WP\\SEO\\Routes\\Abstract_Action_Route' => __DIR__ . '/../..' . '/src/routes/abstract-action-route.php', + 'Yoast\\WP\\SEO\\Routes\\Abstract_Indexation_Route' => __DIR__ . '/../..' . '/src/routes/abstract-indexation-route.php', + 'Yoast\\WP\\SEO\\Routes\\Alert_Dismissal_Route' => __DIR__ . '/../..' . '/src/routes/alert-dismissal-route.php', + 'Yoast\\WP\\SEO\\Routes\\First_Time_Configuration_Route' => __DIR__ . '/../..' . '/src/routes/first-time-configuration-route.php', + 'Yoast\\WP\\SEO\\Routes\\Importing_Route' => __DIR__ . '/../..' . '/src/routes/importing-route.php', + 'Yoast\\WP\\SEO\\Routes\\Indexables_Head_Route' => __DIR__ . '/../..' . '/src/routes/indexables-head-route.php', + 'Yoast\\WP\\SEO\\Routes\\Indexing_Route' => __DIR__ . '/../..' . '/src/routes/indexing-route.php', + 'Yoast\\WP\\SEO\\Routes\\Integrations_Route' => __DIR__ . '/../..' . '/src/routes/integrations-route.php', + 'Yoast\\WP\\SEO\\Routes\\Meta_Search_Route' => __DIR__ . '/../..' . '/src/routes/meta-search-route.php', + 'Yoast\\WP\\SEO\\Routes\\Route_Interface' => __DIR__ . '/../..' . '/src/routes/route-interface.php', + 'Yoast\\WP\\SEO\\Routes\\SEMrush_Route' => __DIR__ . '/../..' . '/src/routes/semrush-route.php', + 'Yoast\\WP\\SEO\\Routes\\Supported_Features_Route' => __DIR__ . '/../..' . '/src/routes/supported-features-route.php', + 'Yoast\\WP\\SEO\\Routes\\Wincher_Route' => __DIR__ . '/../..' . '/src/routes/wincher-route.php', + 'Yoast\\WP\\SEO\\Routes\\Workouts_Route' => __DIR__ . '/../..' . '/src/routes/workouts-route.php', + 'Yoast\\WP\\SEO\\Routes\\Yoast_Head_REST_Field' => __DIR__ . '/../..' . '/src/routes/yoast-head-rest-field.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Check' => __DIR__ . '/../..' . '/src/services/health-check/default-tagline-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Reports' => __DIR__ . '/../..' . '/src/services/health-check/default-tagline-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Default_Tagline_Runner' => __DIR__ . '/../..' . '/src/services/health-check/default-tagline-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Health_Check' => __DIR__ . '/../..' . '/src/services/health-check/health-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Check' => __DIR__ . '/../..' . '/src/services/health-check/links-table-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Reports' => __DIR__ . '/../..' . '/src/services/health-check/links-table-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Links_Table_Runner' => __DIR__ . '/../..' . '/src/services/health-check/links-table-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\MyYoast_Api_Request_Factory' => __DIR__ . '/../..' . '/src/services/health-check/myyoast-api-request-factory.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Check' => __DIR__ . '/../..' . '/src/services/health-check/page-comments-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Reports' => __DIR__ . '/../..' . '/src/services/health-check/page-comments-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Page_Comments_Runner' => __DIR__ . '/../..' . '/src/services/health-check/page-comments-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Check' => __DIR__ . '/../..' . '/src/services/health-check/postname-permalink-check.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Reports' => __DIR__ . '/../..' . '/src/services/health-check/postname-permalink-reports.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Postname_Permalink_Runner' => __DIR__ . '/../..' . '/src/services/health-check/postname-permalink-runner.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder' => __DIR__ . '/../..' . '/src/services/health-check/report-builder.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Report_Builder_Factory' => __DIR__ . '/../..' . '/src/services/health-check/report-builder-factory.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Reports_Trait' => __DIR__ . '/../..' . '/src/services/health-check/reports-trait.php', + 'Yoast\\WP\\SEO\\Services\\Health_Check\\Runner_Interface' => __DIR__ . '/../..' . '/src/services/health-check/runner-interface.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Replacevar_Service' => __DIR__ . '/../..' . '/src/services/importing/aioseo/aioseo-replacevar-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Provider_Service' => __DIR__ . '/../..' . '/src/services/importing/aioseo/aioseo-robots-provider-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Robots_Transformer_Service' => __DIR__ . '/../..' . '/src/services/importing/aioseo/aioseo-robots-transformer-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Aioseo\\Aioseo_Social_Images_Provider_Service' => __DIR__ . '/../..' . '/src/services/importing/aioseo/aioseo-social-images-provider-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Conflicting_Plugins_Service' => __DIR__ . '/../..' . '/src/services/importing/conflicting-plugins-service.php', + 'Yoast\\WP\\SEO\\Services\\Importing\\Importable_Detector_Service' => __DIR__ . '/../..' . '/src/services/importing/importable-detector-service.php', + 'Yoast\\WP\\SEO\\Services\\Indexables\\Indexable_Version_Manager' => __DIR__ . '/../..' . '/src/services/indexables/indexable-version-manager.php', + 'Yoast\\WP\\SEO\\Surfaces\\Classes_Surface' => __DIR__ . '/../..' . '/src/surfaces/classes-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Helpers_Surface' => __DIR__ . '/../..' . '/src/surfaces/helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Meta_Surface' => __DIR__ . '/../..' . '/src/surfaces/meta-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Open_Graph_Helpers_Surface' => __DIR__ . '/../..' . '/src/surfaces/open-graph-helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Schema_Helpers_Surface' => __DIR__ . '/../..' . '/src/surfaces/schema-helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Twitter_Helpers_Surface' => __DIR__ . '/../..' . '/src/surfaces/twitter-helpers-surface.php', + 'Yoast\\WP\\SEO\\Surfaces\\Values\\Meta' => __DIR__ . '/../..' . '/src/surfaces/values/meta.php', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Additional_Contactmethods_Collector' => __DIR__ . '/../..' . '/src/user-meta/application/additional-contactmethods-collector.php', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Cleanup_Service' => __DIR__ . '/../..' . '/src/user-meta/application/cleanup-service.php', + 'Yoast\\WP\\SEO\\User_Meta\\Application\\Custom_Meta_Collector' => __DIR__ . '/../..' . '/src/user-meta/application/custom-meta-collector.php', + 'Yoast\\WP\\SEO\\User_Meta\\Domain\\Additional_Contactmethod_Interface' => __DIR__ . '/../..' . '/src/user-meta/domain/additional-contactmethod-interface.php', + 'Yoast\\WP\\SEO\\User_Meta\\Domain\\Custom_Meta_Interface' => __DIR__ . '/../..' . '/src/user-meta/domain/custom-meta-interface.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Facebook' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/facebook.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Instagram' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/instagram.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Linkedin' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/linkedin.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Myspace' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/myspace.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Pinterest' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/pinterest.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Soundcloud' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/soundcloud.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Tumblr' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/tumblr.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Wikipedia' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/wikipedia.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\X' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/x.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Additional_Contactmethods\\Youtube' => __DIR__ . '/../..' . '/src/user-meta/framework/additional-contactmethods/youtube.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Author_Metadesc' => __DIR__ . '/../..' . '/src/user-meta/framework/custom-meta/author-metadesc.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Author_Title' => __DIR__ . '/../..' . '/src/user-meta/framework/custom-meta/author-title.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Content_Analysis_Disable' => __DIR__ . '/../..' . '/src/user-meta/framework/custom-meta/content-analysis-disable.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Inclusive_Language_Analysis_Disable' => __DIR__ . '/../..' . '/src/user-meta/framework/custom-meta/inclusive-language-analysis-disable.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Keyword_Analysis_Disable' => __DIR__ . '/../..' . '/src/user-meta/framework/custom-meta/keyword-analysis-disable.php', + 'Yoast\\WP\\SEO\\User_Meta\\Framework\\Custom_Meta\\Noindex_Author' => __DIR__ . '/../..' . '/src/user-meta/framework/custom-meta/noindex-author.php', + 'Yoast\\WP\\SEO\\User_Meta\\Infrastructure\\Cleanup_Repository' => __DIR__ . '/../..' . '/src/user-meta/infrastructure/cleanup-repository.php', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Additional_Contactmethods_Integration' => __DIR__ . '/../..' . '/src/user-meta/user-interface/additional-contactmethods-integration.php', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Cleanup_Integration' => __DIR__ . '/../..' . '/src/user-meta/user-interface/cleanup-integration.php', + 'Yoast\\WP\\SEO\\User_Meta\\User_Interface\\Custom_Meta_Integration' => __DIR__ . '/../..' . '/src/user-meta/user-interface/custom-meta-integration.php', + 'Yoast\\WP\\SEO\\User_Profiles_Additions\\User_Interface\\User_Profiles_Additions_Ui' => __DIR__ . '/../..' . '/src/user-profiles-additions/user-interface/user-profiles-additions-ui.php', + 'Yoast\\WP\\SEO\\Values\\Images' => __DIR__ . '/../..' . '/src/values/images.php', + 'Yoast\\WP\\SEO\\Values\\Indexables\\Indexable_Builder_Versions' => __DIR__ . '/../..' . '/src/values/indexables/indexable-builder-versions.php', + 'Yoast\\WP\\SEO\\Values\\OAuth\\OAuth_Token' => __DIR__ . '/../..' . '/src/values/oauth/oauth-token.php', + 'Yoast\\WP\\SEO\\Values\\Open_Graph\\Images' => __DIR__ . '/../..' . '/src/values/open-graph/images.php', + 'Yoast\\WP\\SEO\\Values\\Robots\\Directive' => __DIR__ . '/../..' . '/src/values/robots/directive.php', + 'Yoast\\WP\\SEO\\Values\\Robots\\User_Agent' => __DIR__ . '/../..' . '/src/values/robots/user-agent.php', + 'Yoast\\WP\\SEO\\Values\\Robots\\User_Agent_List' => __DIR__ . '/../..' . '/src/values/robots/user-agent-list.php', + 'Yoast\\WP\\SEO\\Values\\Twitter\\Images' => __DIR__ . '/../..' . '/src/values/twitter/images.php', + 'Yoast\\WP\\SEO\\WordPress\\Wrapper' => __DIR__ . '/../..' . '/src/wordpress/wrapper.php', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Query_Wrapper' => __DIR__ . '/../..' . '/src/wrappers/wp-query-wrapper.php', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Remote_Handler' => __DIR__ . '/../..' . '/src/wrappers/wp-remote-handler.php', + 'Yoast\\WP\\SEO\\Wrappers\\WP_Rewrite_Wrapper' => __DIR__ . '/../..' . '/src/wrappers/wp-rewrite-wrapper.php', + 'Yoast_Dashboard_Widget' => __DIR__ . '/../..' . '/admin/class-yoast-dashboard-widget.php', + 'Yoast_Dismissable_Notice_Ajax' => __DIR__ . '/../..' . '/admin/ajax/class-yoast-dismissable-notice.php', + 'Yoast_Dynamic_Rewrites' => __DIR__ . '/../..' . '/inc/class-yoast-dynamic-rewrites.php', + 'Yoast_Feature_Toggle' => __DIR__ . '/../..' . '/admin/views/class-yoast-feature-toggle.php', + 'Yoast_Feature_Toggles' => __DIR__ . '/../..' . '/admin/views/class-yoast-feature-toggles.php', + 'Yoast_Form' => __DIR__ . '/../..' . '/admin/class-yoast-form.php', + 'Yoast_Form_Element' => __DIR__ . '/../..' . '/admin/views/interface-yoast-form-element.php', + 'Yoast_Input_Select' => __DIR__ . '/../..' . '/admin/views/class-yoast-input-select.php', + 'Yoast_Input_Validation' => __DIR__ . '/../..' . '/admin/class-yoast-input-validation.php', + 'Yoast_Integration_Toggles' => __DIR__ . '/../..' . '/admin/views/class-yoast-integration-toggles.php', + 'Yoast_Network_Admin' => __DIR__ . '/../..' . '/admin/class-yoast-network-admin.php', + 'Yoast_Network_Settings_API' => __DIR__ . '/../..' . '/admin/class-yoast-network-settings-api.php', + 'Yoast_Notification' => __DIR__ . '/../..' . '/admin/class-yoast-notification.php', + 'Yoast_Notification_Center' => __DIR__ . '/../..' . '/admin/class-yoast-notification-center.php', + 'Yoast_Notifications' => __DIR__ . '/../..' . '/admin/class-yoast-notifications.php', + 'Yoast_Plugin_Conflict' => __DIR__ . '/../..' . '/admin/class-yoast-plugin-conflict.php', + 'Yoast_Plugin_Conflict_Ajax' => __DIR__ . '/../..' . '/admin/ajax/class-yoast-plugin-conflict-ajax.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit539c838c762ab459bb7cfb10d25ade08::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit539c838c762ab459bb7cfb10d25ade08::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit539c838c762ab459bb7cfb10d25ade08::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/installed.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/installed.php new file mode 100644 index 00000000..1b60eb13 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/installed.php @@ -0,0 +1,41 @@ + array( + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => '60f4bf28ece5b0e4a3a1e1335be8f444471c3591', + 'name' => 'yoast/wordpress-seo', + 'dev' => false, + ), + 'versions' => array( + 'composer/installers' => array( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'type' => 'composer-plugin', + 'install_path' => __DIR__ . '/./installers', + 'aliases' => array(), + 'reference' => 'c29dc4b93137acb82734f672c37e029dfbd95b35', + 'dev_requirement' => false, + ), + 'yoast/whip' => array( + 'pretty_version' => '2.0.0', + 'version' => '2.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../yoast/whip', + 'aliases' => array(), + 'reference' => '5cfd9c3b433774548ec231fe896d5e85d17ed0d1', + 'dev_requirement' => false, + ), + 'yoast/wordpress-seo' => array( + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'type' => 'wordpress-plugin', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => '60f4bf28ece5b0e4a3a1e1335be8f444471c3591', + 'dev_requirement' => false, + ), + ), +); diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/composer/platform_check.php b/wp/wp-content/plugins/wordpress-seo/vendor/composer/platform_check.php new file mode 100644 index 00000000..a8b98d5c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70205)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/CHANGELOG.md b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/CHANGELOG.md new file mode 100644 index 00000000..ae992426 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/CHANGELOG.md @@ -0,0 +1,102 @@ +# Change Log +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [2.0.0] - 2023-12-28 +### Added +* Tested against PHP 8.3. [#138], [#150] + +### Changed +* All the source classes are now namespaced under `Yoast\WHIPv2`. The version number in the namespaced will be bumped up with every major version. [#157] + The classes have also been renamed to remove the `Whip_` prefix, and the folders' names have been capitalized to follow the PSR-4 standard. +* The `Requirement` interface now explicitly declares the following two additional methods: `version() ` and `operator()` and classes implementing the interface should ensure these methods are available. [#146] +* General housekeeping. + +### Removed +* The deprecated `Whip_WPMessagePresenter:register_hooks()` method has been removed. [#158] + +### Fixed +* Compatibility with PHP >= 8.2: prevent a deprecation notice about dynamic properties usage from being thrown in the `RequirementsChecker` class. [#117] +* Security hardening: added sanitization to the notification dismiss action. [#131] + +[#158]: https://github.com/Yoast/whip/pull/158 +[#157]: https://github.com/Yoast/whip/pull/157 +[#150]: https://github.com/Yoast/whip/pull/150 +[#146]: https://github.com/Yoast/whip/pull/146 +[#138]: https://github.com/Yoast/whip/pull/138 +[#131]: https://github.com/Yoast/whip/pull/131 +[#117]: https://github.com/Yoast/whip/pull/117 + +## [1.2.0] - 2021-07-20 + +:warning: This version drops support for PHP 5.2! + +### Changed +* PHP 5.2 is no longer supported. The minimum supported PHP version for the WHIP library is now PHP 5.3. [#96] +* The previous solution to prevent duplicate messages as included in v1.0.2 has been improved upon and made more stable. Props [Drew Jaynes]. [#44] +* The `Whip_InvalidOperatorType::__construct()` method now has a second, optional `$validOperators` parameter. [#62] + If this parameter is not passed, the default set of valid operators, as was used before, will be used. +* Improved protection against XSS in localizable texts. [#50] +* Improved support for translating localizable texts (I18n). [#59] +* The distributed package will no longer contain development-related files. [#45] +* General housekeeping. + +### Deprecated +* The `public` `Whip_WPMessagePresenter:register_hooks()` method has been deprecated in favour of the new `Whip_WPMessagePresenter:registerHooks()`. [#52], [#107] + +### Fixed +* The text of the exception message thrown via the `Whip_InvalidType` exception was sometimes garbled. [#61] +* Compatibility with PHP >= 7.4: prevent a deprecation notice from being thrown (fatal error on PHP 8.0). [#88] + +[#44]: https://github.com/Yoast/whip/pull/44 +[#45]: https://github.com/Yoast/whip/pull/45 +[#50]: https://github.com/Yoast/whip/pull/50 +[#52]: https://github.com/Yoast/whip/pull/52 +[#59]: https://github.com/Yoast/whip/pull/59 +[#61]: https://github.com/Yoast/whip/pull/61 +[#62]: https://github.com/Yoast/whip/pull/62 +[#88]: https://github.com/Yoast/whip/pull/88 +[#96]: https://github.com/Yoast/whip/pull/96 +[#107]: https://github.com/Yoast/whip/pull/107 + +[Drew Jaynes]: https://github.com/DrewAPicture + +## [1.1.0] - 2017-08-08 +### Added +* Allow WordPress messages to be dismissed for a period of 4 weeks. + +## [1.0.2] - 2017-06-27 +### Fixed +* When multiple plugins containing whip are activated, the message is no longer shown multiple times, props [Andrea](https://github.com/sciamannikoo). + +## [1.0.1] - 2017-03-21 +### Fixed +* Fix a missing link when the PHP message is switched to the WordPress.org hosting page. + +## [1.0.0] - 2017-03-21 +### Changed +* Updated screenshot in README + +## [1.0.0-beta.2] - 2017-03-11 +### Added +* Complete PHP version message + +### Changed +* Refactor code architecture. +* Use PHP version constant instead of function. + +### Fixed +* Fix broken version reconciliation. + +## 1.0.0-beta.1 - 2017-02-21 +* Initial pre-release of whip. A package to nudge users to upgrade their software versions. + +[Unreleased]: https://github.com/yoast/whip/compare/1.2.0...HEAD +[1.2.0]: https://github.com/yoast/whip/compare/1.1.0...1.2.0 +[1.1.0]: https://github.com/yoast/whip/compare/1.0.2...1.1.0 +[1.0.2]: https://github.com/yoast/whip/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/yoast/whip/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/yoast/whip/compare/1.0.0-beta.2...1.0.0 +[1.0.0-beta.2]: https://github.com/yoast/whip/compare/1.0.0-beta.1...1.0.0-beta.2 diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/LICENSE b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/LICENSE new file mode 100644 index 00000000..95846861 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Yoast + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/default.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/default.php new file mode 100644 index 00000000..0a94ef66 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/default.php @@ -0,0 +1,10 @@ + PHP_VERSION, +); diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/version.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/version.php new file mode 100644 index 00000000..553e4299 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Configs/version.php @@ -0,0 +1,8 @@ + + */ + private $configuration; + + /** + * Configuration constructor. + * + * @param array $configuration The configuration to use. + * + * @throws InvalidType When the $configuration parameter is not of the expected type. + */ + public function __construct( $configuration = array() ) { + if ( ! \is_array( $configuration ) ) { + throw new InvalidType( 'Configuration', $configuration, 'array' ); + } + + $this->configuration = $configuration; + } + + /** + * Retrieves the configured version of a particular requirement. + * + * @param Requirement $requirement The requirement to check. + * + * @return string|int The version of the passed requirement that was detected as a string. + * If the requirement does not exist, this returns int -1. + */ + public function configuredVersion( Requirement $requirement ) { + if ( ! $this->hasRequirementConfigured( $requirement ) ) { + return -1; + } + + return $this->configuration[ $requirement->component() ]; + } + + /** + * Determines whether the passed requirement is present in the configuration. + * + * @param Requirement $requirement The requirement to check. + * + * @return bool Whether or not the requirement is present in the configuration. + */ + public function hasRequirementConfigured( Requirement $requirement ) { + return \array_key_exists( $requirement->component(), $this->configuration ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/EmptyProperty.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/EmptyProperty.php new file mode 100644 index 00000000..844372b1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/EmptyProperty.php @@ -0,0 +1,20 @@ +', '<=', '>=' ) ) { + parent::__construct( + \sprintf( + 'Invalid operator of %s used. Please use one of the following operators: %s', + $value, + \implode( ', ', $validOperators ) + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/InvalidType.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/InvalidType.php new file mode 100644 index 00000000..6ed1dafb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Exceptions/InvalidType.php @@ -0,0 +1,22 @@ +=5.3. Passed version comparison string: %s', + $value + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Facades/wordpress.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Facades/wordpress.php new file mode 100644 index 00000000..dbb1df9b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Facades/wordpress.php @@ -0,0 +1,60 @@ + $requirements The requirements to check. + * + * @return void + */ + function whip_wp_check_versions( $requirements ) { + // Only show for admin users. + if ( ! is_array( $requirements ) ) { + return; + } + + $config = include __DIR__ . '/../Configs/default.php'; + $checker = new RequirementsChecker( $config ); + + foreach ( $requirements as $component => $versionComparison ) { + $checker->addRequirement( VersionRequirement::fromCompareString( $component, $versionComparison ) ); + } + + $checker->check(); + + if ( ! $checker->hasMessages() ) { + return; + } + + $dismissThreshold = ( WEEK_IN_SECONDS * 4 ); + $dismissMessage = __( 'Remind me again in 4 weeks.', 'default' ); + + $dismisser = new MessageDismisser( time(), $dismissThreshold, new WPDismissOption() ); + + $presenter = new WPMessagePresenter( $checker->getMostRecentMessage(), $dismisser, $dismissMessage ); + + // Prevent duplicate notices across multiple implementing plugins. + if ( ! has_action( 'whip_register_hooks' ) ) { + add_action( 'whip_register_hooks', array( $presenter, 'registerHooks' ) ); + } + + /** + * Fires during hooks registration for the message presenter. + * + * @param WPMessagePresenter $presenter Message presenter instance. + */ + do_action( 'whip_register_hooks', $presenter ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Host.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Host.php new file mode 100644 index 00000000..fce2013b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Host.php @@ -0,0 +1,107 @@ +currentTime = $currentTime; + $this->threshold = $threshold; + $this->storage = $storage; + } + + /** + * Saves the version number to the storage to indicate the message as being dismissed. + * + * @return void + */ + public function dismiss() { + $this->storage->set( $this->currentTime ); + } + + /** + * Checks if the current time is lower than the stored time extended by the threshold. + * + * @return bool True when current time is lower than stored value + threshold. + */ + public function isDismissed() { + return ( $this->currentTime <= ( $this->storage->get() + $this->threshold ) ); + } + + /** + * Checks the nonce. + * + * @param string $nonce The nonce to check. + * @param string $action The action to check. + * + * @return bool True when the nonce is valid. + */ + public function verifyNonce( $nonce, $action ) { + return (bool) \wp_verify_nonce( $nonce, $action ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessageFormatter.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessageFormatter.php new file mode 100644 index 00000000..b94d9531 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessageFormatter.php @@ -0,0 +1,42 @@ +' . $toWrap . '
            '; + } + + /** + * Wraps a piece of text in HTML p tags. + * + * @param string $toWrap The text to wrap. + * + * @return string The wrapped text. + */ + public static function paragraph( $toWrap ) { + return '

            ' . $toWrap . '

            '; + } + + /** + * Wraps a piece of text in HTML p and strong tags. + * + * @param string $toWrap The text to wrap. + * + * @return string The wrapped text. + */ + public static function strongParagraph( $toWrap ) { + return self::paragraph( self::strong( $toWrap ) ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/BasicMessage.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/BasicMessage.php new file mode 100644 index 00000000..41205b02 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/BasicMessage.php @@ -0,0 +1,60 @@ +validateParameters( $body ); + + $this->body = $body; + } + + /** + * Retrieves the message body. + * + * @return string Message. + */ + public function body() { + return $this->body; + } + + /** + * Validates the parameters passed to the constructor of this class. + * + * @param string $body Message body. + * + * @return void + * + * @throws EmptyProperty When the $body parameter is empty. + * @throws InvalidType When the $body parameter is not of the expected type. + */ + private function validateParameters( $body ) { + if ( empty( $body ) ) { + throw new EmptyProperty( 'Message body' ); + } + + if ( ! \is_string( $body ) ) { + throw new InvalidType( 'Message body', $body, 'string' ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/HostMessage.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/HostMessage.php new file mode 100644 index 00000000..90ad2906 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/HostMessage.php @@ -0,0 +1,62 @@ +textdomain = $textdomain; + $this->messageKey = $messageKey; + } + + /** + * Retrieves the message body. + * + * @return string The message body. + */ + public function body() { + $message = array(); + + $message[] = MessageFormatter::strong( $this->title() ) . '
            '; + $message[] = MessageFormatter::paragraph( Host::message( $this->messageKey ) ); + + return \implode( "\n", $message ); + } + + /** + * Renders the message title. + * + * @return string The message title. + */ + public function title() { + /* translators: 1: name. */ + return \sprintf( \__( 'A message from %1$s', $this->textdomain ), Host::name() ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php new file mode 100644 index 00000000..f3e49595 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/InvalidVersionRequirementMessage.php @@ -0,0 +1,53 @@ +requirement = $requirement; + $this->detected = $detected; + } + + /** + * Retrieves the message body. + * + * @return string Message. + */ + public function body() { + return \sprintf( + 'Invalid version detected for %s. Found %s but expected %s.', + $this->requirement->component(), + $this->detected, + $this->requirement->version() + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/NullMessage.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/NullMessage.php new file mode 100644 index 00000000..bbb364c7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Messages/NullMessage.php @@ -0,0 +1,20 @@ +textdomain = $textdomain; + } + + /** + * Retrieves the message body to display. + * + * @return string The message to display. + */ + public function body() { + $textdomain = $this->textdomain; + + $message = array(); + + $message[] = MessageFormatter::strongParagraph( \__( 'Your site could be faster and more secure with a newer PHP version.', $textdomain ) ) . '
            '; + $message[] = MessageFormatter::paragraph( \__( 'Hey, we\'ve noticed that you\'re running an outdated version of PHP. PHP is the programming language that WordPress and all its plugins and themes are built on. The version that is currently used for your site is no longer supported. Newer versions of PHP are both faster and more secure. In fact, your version of PHP no longer receives security updates, which is why we\'re sending you to this notice.', $textdomain ) ); + $message[] = MessageFormatter::paragraph( \__( 'Hosts have the ability to update your PHP version, but sometimes they don\'t dare to do that because they\'re afraid they\'ll break your site.', $textdomain ) ); + $message[] = MessageFormatter::strongParagraph( \__( 'To which version should I update?', $textdomain ) ) . '
            '; + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: link open tag; 2: link close tag. */ + \__( 'You should update your PHP version to either 5.6 or to 7.0 or 7.1. On a normal WordPress site, switching to PHP 5.6 should never cause issues. We would however actually recommend you switch to PHP7. There are some plugins that are not ready for PHP7 though, so do some testing first. We have an article on how to test whether that\'s an option for you %1$shere%2$s. PHP7 is much faster than PHP 5.6. It\'s also the only PHP version still in active development and therefore the better option for your site in the long run.', $textdomain ), + '', + '' + ) + ); + + if ( Host::name() !== '' ) { + $hostMessage = new HostMessage( 'WHIP_MESSAGE_FROM_HOST_ABOUT_PHP', $textdomain ); + $message[] = $hostMessage->body(); + } + + $hostingPageUrl = Host::hostingPageUrl(); + + $message[] = MessageFormatter::strongParagraph( \__( 'Can\'t update? Ask your host!', $textdomain ) ) . '
            '; + + if ( \function_exists( 'apply_filters' ) && \apply_filters( Host::HOSTING_PAGE_FILTER_KEY, false ) ) { + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: link open tag; 2: link close tag; 3: link open tag. */ + \__( 'If you cannot upgrade your PHP version yourself, you can send an email to your host. We have %1$sexamples here%2$s. If they don\'t want to upgrade your PHP version, we would suggest you switch hosts. Have a look at one of the recommended %3$sWordPress hosting partners%2$s.', $textdomain ), + '', + '', + \sprintf( '', \esc_url( $hostingPageUrl ) ) + ) + ); + } + else { + $message[] = MessageFormatter::paragraph( + \sprintf( + /* translators: 1: link open tag; 2: link close tag; 3: link open tag. */ + \__( 'If you cannot upgrade your PHP version yourself, you can send an email to your host. We have %1$sexamples here%2$s. If they don\'t want to upgrade your PHP version, we would suggest you switch hosts. Have a look at one of our recommended %3$sWordPress hosting partners%2$s, they\'ve all been vetted by the Yoast support team and provide all the features a modern host should provide.', $textdomain ), + '', + '', + \sprintf( '', \esc_url( $hostingPageUrl ) ) + ) + ); + } + + return \implode( "\n", $message ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessagesManager.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessagesManager.php new file mode 100644 index 00000000..eee0abbe --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/MessagesManager.php @@ -0,0 +1,91 @@ + 0; + } + + /** + * Lists the messages that are currently available. + * + * @return array The messages that are currently set. + */ + public function listMessages() { + return $GLOBALS['whip_messages']; + } + + /** + * Deletes all messages. + * + * @return void + */ + public function deleteMessages() { + unset( $GLOBALS['whip_messages'] ); + } + + /** + * Gets the latest message. + * + * @return Message The message. Returns a NullMessage if none is found. + */ + public function getLatestMessage() { + if ( ! $this->hasMessages() ) { + return new NullMessage(); + } + + $messages = $this->sortByVersion( $this->listMessages() ); + + $this->deleteMessages(); + + return \array_pop( $messages ); + } + + /** + * Sorts the list of messages based on the version number. + * + * @param array $messages The list of messages to sort. + * + * @return array The sorted list of messages. + */ + private function sortByVersion( array $messages ) { + \uksort( $messages, 'version_compare' ); + + return $messages; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php new file mode 100644 index 00000000..aa071f66 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/Presenters/WPMessagePresenter.php @@ -0,0 +1,112 @@ +message = $message; + $this->dismisser = $dismisser; + $this->dismissMessage = $dismissMessage; + } + + /** + * Registers hooks to WordPress. + * + * This is a separate function so you can control when the hooks are registered. + * + * @return void + */ + public function registerHooks() { + \add_action( 'admin_notices', array( $this, 'renderMessage' ) ); + } + + /** + * Renders the messages present in the global to notices. + * + * @return void + */ + public function renderMessage() { + $dismissListener = new WPMessageDismissListener( $this->dismisser ); + $dismissListener->listen(); + + if ( $this->dismisser->isDismissed() ) { + return; + } + + $dismissButton = \sprintf( + '%1$s', + \esc_html( $this->dismissMessage ), + \esc_url( $dismissListener->getDismissURL() ) + ); + + // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- output correctly escaped directly above and in the `kses()` method. + \printf( + '

            %1$s

            %2$s

            ', + $this->kses( $this->message->body() ), + $dismissButton + ); + // phpcs:enable + } + + /** + * Removes content from the message that we don't want to show. + * + * @param string $message The message to clean. + * + * @return string The cleaned message. + */ + public function kses( $message ) { + return \wp_kses( + $message, + array( + 'a' => array( + 'href' => true, + 'target' => true, + ), + 'strong' => true, + 'p' => true, + 'ul' => true, + 'li' => true, + ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/RequirementsChecker.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/RequirementsChecker.php new file mode 100644 index 00000000..9dbc8909 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/RequirementsChecker.php @@ -0,0 +1,181 @@ + + */ + private $requirements; + + /** + * The configuration to check. + * + * @var Configuration + */ + private $configuration; + + /** + * Message Manager. + * + * @var MessagesManager + */ + private $messageManager; + + /** + * The text domain to use for translations. + * + * @var string + */ + private $textdomain; + + /** + * RequirementsChecker constructor. + * + * @param array $configuration The configuration to check. + * @param string $textdomain The text domain to use for translations. + * + * @throws InvalidType When the $configuration parameter is not of the expected type. + */ + public function __construct( $configuration = array(), $textdomain = 'default' ) { + $this->requirements = array(); + $this->configuration = new Configuration( $configuration ); + $this->messageManager = new MessagesManager(); + $this->textdomain = $textdomain; + } + + /** + * Adds a requirement to the list of requirements if it doesn't already exist. + * + * @param Requirement $requirement The requirement to add. + * + * @return void + */ + public function addRequirement( Requirement $requirement ) { + // Only allow unique entries to ensure we're not checking specific combinations multiple times. + if ( $this->requirementExistsForComponent( $requirement->component() ) ) { + return; + } + + $this->requirements[] = $requirement; + } + + /** + * Determines whether or not there are requirements available. + * + * @return bool Whether or not there are requirements. + */ + public function hasRequirements() { + return $this->totalRequirements() > 0; + } + + /** + * Gets the total amount of requirements. + * + * @return int The total amount of requirements. + */ + public function totalRequirements() { + return \count( $this->requirements ); + } + + /** + * Determines whether or not a requirement exists for a particular component. + * + * @param string $component The component to check for. + * + * @return bool Whether or not the component has a requirement defined. + */ + public function requirementExistsForComponent( $component ) { + foreach ( $this->requirements as $requirement ) { + if ( $requirement->component() === $component ) { + return true; + } + } + + return false; + } + + /** + * Determines whether a requirement has been fulfilled. + * + * @param Requirement $requirement The requirement to check. + * + * @return bool Whether or not the requirement is fulfilled. + */ + private function requirementIsFulfilled( Requirement $requirement ) { + $availableVersion = $this->configuration->configuredVersion( $requirement ); + $requiredVersion = $requirement->version(); + + if ( \in_array( $requirement->operator(), array( '=', '==', '===' ), true ) ) { + return \version_compare( $availableVersion, $requiredVersion, '>=' ); + } + + return \version_compare( $availableVersion, $requiredVersion, $requirement->operator() ); + } + + /** + * Checks if all requirements are fulfilled and adds a message to the message manager if necessary. + * + * @return void + */ + public function check() { + foreach ( $this->requirements as $requirement ) { + // Match against config. + $requirementFulfilled = $this->requirementIsFulfilled( $requirement ); + + if ( $requirementFulfilled ) { + continue; + } + + $this->addMissingRequirementMessage( $requirement ); + } + } + + /** + * Adds a message to the message manager for requirements that cannot be fulfilled. + * + * @param Requirement $requirement The requirement that cannot be fulfilled. + * + * @return void + */ + private function addMissingRequirementMessage( Requirement $requirement ) { + switch ( $requirement->component() ) { + case 'php': + $this->messageManager->addMessage( new UpgradePhpMessage( $this->textdomain ) ); + break; + default: + $this->messageManager->addMessage( new InvalidVersionRequirementMessage( $requirement, $this->configuration->configuredVersion( $requirement ) ) ); + break; + } + } + + /** + * Determines whether or not there are messages available. + * + * @return bool Whether or not there are messages to display. + */ + public function hasMessages() { + return $this->messageManager->hasMessages(); + } + + /** + * Gets the most recent message from the message manager. + * + * @return Message The latest message. + */ + public function getMostRecentMessage() { + return $this->messageManager->getLatestMessage(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/VersionRequirement.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/VersionRequirement.php new file mode 100644 index 00000000..f29c6418 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/VersionRequirement.php @@ -0,0 +1,153 @@ +validateParameters( $component, $version, $operator ); + + $this->component = $component; + $this->version = $version; + $this->operator = $operator; + } + + /** + * Retrieves the component name defined for the requirement. + * + * @return string The component name. + */ + public function component() { + return $this->component; + } + + /** + * Gets the components version defined for the requirement. + * + * @return string + */ + public function version() { + return $this->version; + } + + /** + * Gets the operator to use when comparing version numbers. + * + * @return string The comparison operator. + */ + public function operator() { + return $this->operator; + } + + /** + * Creates a new version requirement from a comparison string. + * + * @param string $component The component for this version requirement. + * @param string $comparisonString The comparison string for this version requirement. + * + * @return VersionRequirement The parsed version requirement. + * + * @throws InvalidVersionComparisonString When an invalid version comparison string is passed. + */ + public static function fromCompareString( $component, $comparisonString ) { + + $matcher = '` + ( + >=? # Matches >= and >. + | + <=? # Matches <= and <. + ) + ([^>=<\s]+) # Matches anything except >, <, =, and whitespace. + `x'; + + if ( ! \preg_match( $matcher, $comparisonString, $match ) ) { + throw new InvalidVersionComparisonString( $comparisonString ); + } + + $version = $match[2]; + $operator = $match[1]; + + return new VersionRequirement( $component, $version, $operator ); + } + + /** + * Validates the parameters passed to the requirement. + * + * @param string $component The component name. + * @param string $version The component version. + * @param string $operator The operator to use when comparing version. + * + * @return void + * + * @throws EmptyProperty When any of the parameters is empty. + * @throws InvalidOperatorType When the $operator parameter is invalid. + * @throws InvalidType When any of the parameters is not of the expected type. + */ + private function validateParameters( $component, $version, $operator ) { + if ( empty( $component ) ) { + throw new EmptyProperty( 'Component' ); + } + + if ( ! \is_string( $component ) ) { + throw new InvalidType( 'Component', $component, 'string' ); + } + + if ( empty( $version ) ) { + throw new EmptyProperty( 'Version' ); + } + + if ( ! \is_string( $version ) ) { + throw new InvalidType( 'Version', $version, 'string' ); + } + + if ( empty( $operator ) ) { + throw new EmptyProperty( 'Operator' ); + } + + if ( ! \is_string( $operator ) ) { + throw new InvalidType( 'Operator', $operator, 'string' ); + } + + $validOperators = array( '=', '==', '===', '<', '>', '<=', '>=' ); + if ( ! \in_array( $operator, $validOperators, true ) ) { + throw new InvalidOperatorType( $operator, $validOperators ); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPDismissOption.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPDismissOption.php new file mode 100644 index 00000000..aecd9dff --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPDismissOption.php @@ -0,0 +1,45 @@ +optionName, $dismissedValue ); + } + + /** + * Returns the value of the whip_dismissed option. + * + * @return int Returns the value of the option or an empty string when not set. + */ + public function get() { + $dismissedOption = \get_option( $this->optionName ); + if ( ! $dismissedOption ) { + return 0; + } + + return (int) $dismissedOption; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPMessageDismissListener.php b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPMessageDismissListener.php new file mode 100644 index 00000000..b3d0bda6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor/yoast/whip/src/WPMessageDismissListener.php @@ -0,0 +1,66 @@ +dismisser = $dismisser; + } + + /** + * Listens to a GET request to fetch the required attributes. + * + * @return void + */ + public function listen() { + + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified in the dismisser. + $action = ( isset( $_GET['action'] ) && \is_string( $_GET['action'] ) ) ? \sanitize_text_field( \wp_unslash( $_GET['action'] ) ) : null; + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified in the dismisser. + $nonce = ( isset( $_GET['nonce'] ) && \is_string( $_GET['nonce'] ) ) ? \sanitize_text_field( \wp_unslash( $_GET['nonce'] ) ) : ''; + + if ( $action === self::ACTION_NAME && $this->dismisser->verifyNonce( $nonce, self::ACTION_NAME ) ) { + $this->dismisser->dismiss(); + } + } + + /** + * Creates an url for dismissing the notice. + * + * @return string The url for dismissing the message. + */ + public function getDismissURL() { + return \sprintf( + \admin_url( 'index.php?action=%1$s&nonce=%2$s' ), + self::ACTION_NAME, + \wp_create_nonce( self::ACTION_NAME ) + ); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizer.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizer.php new file mode 100644 index 00000000..01cf94a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizer.php @@ -0,0 +1,23 @@ +truncateAt = $truncateAt; + } + /** + * Returns a summarized message body. + */ + public function summarize(\YoastSEO_Vendor\Psr\Http\Message\MessageInterface $message) : ?string + { + return $this->truncateAt === null ? \YoastSEO_Vendor\GuzzleHttp\Psr7\Message::bodySummary($message) : \YoastSEO_Vendor\GuzzleHttp\Psr7\Message::bodySummary($message, $this->truncateAt); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizerInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizerInterface.php new file mode 100644 index 00000000..28ff13e3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/BodySummarizerInterface.php @@ -0,0 +1,12 @@ + 'http://www.foo.com/1.0/', + * 'timeout' => 0, + * 'allow_redirects' => false, + * 'proxy' => '192.168.16.1:10' + * ]); + * + * Client configuration settings include the following options: + * + * - handler: (callable) Function that transfers HTTP requests over the + * wire. The function is called with a Psr7\Http\Message\RequestInterface + * and array of transfer options, and must return a + * GuzzleHttp\Promise\PromiseInterface that is fulfilled with a + * Psr7\Http\Message\ResponseInterface on success. + * If no handler is provided, a default handler will be created + * that enables all of the request options below by attaching all of the + * default middleware to the handler. + * - base_uri: (string|UriInterface) Base URI of the client that is merged + * into relative URIs. Can be a string or instance of UriInterface. + * - **: any request option + * + * @param array $config Client configuration settings. + * + * @see \GuzzleHttp\RequestOptions for a list of available request options. + */ + public function __construct(array $config = []) + { + if (!isset($config['handler'])) { + $config['handler'] = \YoastSEO_Vendor\GuzzleHttp\HandlerStack::create(); + } elseif (!\is_callable($config['handler'])) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('handler must be a callable'); + } + // Convert the base_uri to a UriInterface + if (isset($config['base_uri'])) { + $config['base_uri'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::uriFor($config['base_uri']); + } + $this->configureDefaults($config); + } + /** + * @param string $method + * @param array $args + * + * @return PromiseInterface|ResponseInterface + * + * @deprecated Client::__call will be removed in guzzlehttp/guzzle:8.0. + */ + public function __call($method, $args) + { + if (\count($args) < 1) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('Magic request methods require a URI and optional options array'); + } + $uri = $args[0]; + $opts = $args[1] ?? []; + return \substr($method, -5) === 'Async' ? $this->requestAsync(\substr($method, 0, -5), $uri, $opts) : $this->request($method, $uri, $opts); + } + /** + * Asynchronously send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + */ + public function sendAsync(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + // Merge the base URI into the request URI if needed. + $options = $this->prepareDefaults($options); + return $this->transfer($request->withUri($this->buildUri($request->getUri(), $options), $request->hasHeader('Host')), $options); + } + /** + * Send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + * + * @throws GuzzleException + */ + public function send(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + $options[\YoastSEO_Vendor\GuzzleHttp\RequestOptions::SYNCHRONOUS] = \true; + return $this->sendAsync($request, $options)->wait(); + } + /** + * The HttpClient PSR (PSR-18) specify this method. + * + * {@inheritDoc} + */ + public function sendRequest(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + $options[\YoastSEO_Vendor\GuzzleHttp\RequestOptions::SYNCHRONOUS] = \true; + $options[\YoastSEO_Vendor\GuzzleHttp\RequestOptions::ALLOW_REDIRECTS] = \false; + $options[\YoastSEO_Vendor\GuzzleHttp\RequestOptions::HTTP_ERRORS] = \false; + return $this->sendAsync($request, $options)->wait(); + } + /** + * Create and send an asynchronous HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string $method HTTP method + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + */ + public function requestAsync(string $method, $uri = '', array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $options = $this->prepareDefaults($options); + // Remove request modifying parameter because it can be done up-front. + $headers = $options['headers'] ?? []; + $body = $options['body'] ?? null; + $version = $options['version'] ?? '1.1'; + // Merge the URI into the base URI. + $uri = $this->buildUri(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::uriFor($uri), $options); + if (\is_array($body)) { + throw $this->invalidBody(); + } + $request = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Request($method, $uri, $headers, $body, $version); + // Remove the option so that they are not doubly-applied. + unset($options['headers'], $options['body'], $options['version']); + return $this->transfer($request, $options); + } + /** + * Create and send an HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string $method HTTP method. + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + * + * @throws GuzzleException + */ + public function request(string $method, $uri = '', array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + $options[\YoastSEO_Vendor\GuzzleHttp\RequestOptions::SYNCHRONOUS] = \true; + return $this->requestAsync($method, $uri, $options)->wait(); + } + /** + * Get a client configuration option. + * + * These options include default request options of the client, a "handler" + * (if utilized by the concrete client), and a "base_uri" if utilized by + * the concrete client. + * + * @param string|null $option The config option to retrieve. + * + * @return mixed + * + * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0. + */ + public function getConfig(string $option = null) + { + return $option === null ? $this->config : $this->config[$option] ?? null; + } + private function buildUri(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri, array $config) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + if (isset($config['base_uri'])) { + $uri = \YoastSEO_Vendor\GuzzleHttp\Psr7\UriResolver::resolve(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::uriFor($config['base_uri']), $uri); + } + if (isset($config['idn_conversion']) && $config['idn_conversion'] !== \false) { + $idnOptions = $config['idn_conversion'] === \true ? \IDNA_DEFAULT : $config['idn_conversion']; + $uri = \YoastSEO_Vendor\GuzzleHttp\Utils::idnUriConvert($uri, $idnOptions); + } + return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri; + } + /** + * Configures the default options for a client. + */ + private function configureDefaults(array $config) : void + { + $defaults = ['allow_redirects' => \YoastSEO_Vendor\GuzzleHttp\RedirectMiddleware::$defaultSettings, 'http_errors' => \true, 'decode_content' => \true, 'verify' => \true, 'cookies' => \false, 'idn_conversion' => \false]; + // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. + // We can only trust the HTTP_PROXY environment variable in a CLI + // process due to the fact that PHP has no reliable mechanism to + // get environment variables that start with "HTTP_". + if (\PHP_SAPI === 'cli' && ($proxy = \YoastSEO_Vendor\GuzzleHttp\Utils::getenv('HTTP_PROXY'))) { + $defaults['proxy']['http'] = $proxy; + } + if ($proxy = \YoastSEO_Vendor\GuzzleHttp\Utils::getenv('HTTPS_PROXY')) { + $defaults['proxy']['https'] = $proxy; + } + if ($noProxy = \YoastSEO_Vendor\GuzzleHttp\Utils::getenv('NO_PROXY')) { + $cleanedNoProxy = \str_replace(' ', '', $noProxy); + $defaults['proxy']['no'] = \explode(',', $cleanedNoProxy); + } + $this->config = $config + $defaults; + if (!empty($config['cookies']) && $config['cookies'] === \true) { + $this->config['cookies'] = new \YoastSEO_Vendor\GuzzleHttp\Cookie\CookieJar(); + } + // Add the default user-agent header. + if (!isset($this->config['headers'])) { + $this->config['headers'] = ['User-Agent' => \YoastSEO_Vendor\GuzzleHttp\Utils::defaultUserAgent()]; + } else { + // Add the User-Agent header if one was not already set. + foreach (\array_keys($this->config['headers']) as $name) { + if (\strtolower($name) === 'user-agent') { + return; + } + } + $this->config['headers']['User-Agent'] = \YoastSEO_Vendor\GuzzleHttp\Utils::defaultUserAgent(); + } + } + /** + * Merges default options into the array. + * + * @param array $options Options to modify by reference + */ + private function prepareDefaults(array $options) : array + { + $defaults = $this->config; + if (!empty($defaults['headers'])) { + // Default headers are only added if they are not present. + $defaults['_conditional'] = $defaults['headers']; + unset($defaults['headers']); + } + // Special handling for headers is required as they are added as + // conditional headers and as headers passed to a request ctor. + if (\array_key_exists('headers', $options)) { + // Allows default headers to be unset. + if ($options['headers'] === null) { + $defaults['_conditional'] = []; + unset($options['headers']); + } elseif (!\is_array($options['headers'])) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('headers must be an array'); + } + } + // Shallow merge defaults underneath options. + $result = $options + $defaults; + // Remove null values. + foreach ($result as $k => $v) { + if ($v === null) { + unset($result[$k]); + } + } + return $result; + } + /** + * Transfers the given request and applies request options. + * + * The URI of the request is not modified and the request options are used + * as-is without merging in default options. + * + * @param array $options See \GuzzleHttp\RequestOptions. + */ + private function transfer(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $request = $this->applyOptions($request, $options); + /** @var HandlerStack $handler */ + $handler = $options['handler']; + try { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::promiseFor($handler($request, $options)); + } catch (\Exception $e) { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($e); + } + } + /** + * Applies the array of request options to a request. + */ + private function applyOptions(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + $modify = ['set_headers' => []]; + if (isset($options['headers'])) { + if (\array_keys($options['headers']) === \range(0, \count($options['headers']) - 1)) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('The headers array must have header name as keys.'); + } + $modify['set_headers'] = $options['headers']; + unset($options['headers']); + } + if (isset($options['form_params'])) { + if (isset($options['multipart'])) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('You cannot use ' . 'form_params and multipart at the same time. Use the ' . 'form_params option if you want to send application/' . 'x-www-form-urlencoded requests, and the multipart ' . 'option to send multipart/form-data requests.'); + } + $options['body'] = \http_build_query($options['form_params'], '', '&'); + unset($options['form_params']); + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); + $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded'; + } + if (isset($options['multipart'])) { + $options['body'] = new \YoastSEO_Vendor\GuzzleHttp\Psr7\MultipartStream($options['multipart']); + unset($options['multipart']); + } + if (isset($options['json'])) { + $options['body'] = \YoastSEO_Vendor\GuzzleHttp\Utils::jsonEncode($options['json']); + unset($options['json']); + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); + $options['_conditional']['Content-Type'] = 'application/json'; + } + if (!empty($options['decode_content']) && $options['decode_content'] !== \true) { + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::caselessRemove(['Accept-Encoding'], $options['_conditional']); + $modify['set_headers']['Accept-Encoding'] = $options['decode_content']; + } + if (isset($options['body'])) { + if (\is_array($options['body'])) { + throw $this->invalidBody(); + } + $modify['body'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($options['body']); + unset($options['body']); + } + if (!empty($options['auth']) && \is_array($options['auth'])) { + $value = $options['auth']; + $type = isset($value[2]) ? \strtolower($value[2]) : 'basic'; + switch ($type) { + case 'basic': + // Ensure that we don't have the header in different case and set the new value. + $modify['set_headers'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']); + $modify['set_headers']['Authorization'] = 'Basic ' . \base64_encode("{$value[0]}:{$value[1]}"); + break; + case 'digest': + // @todo: Do not rely on curl + $options['curl'][\CURLOPT_HTTPAUTH] = \CURLAUTH_DIGEST; + $options['curl'][\CURLOPT_USERPWD] = "{$value[0]}:{$value[1]}"; + break; + case 'ntlm': + $options['curl'][\CURLOPT_HTTPAUTH] = \CURLAUTH_NTLM; + $options['curl'][\CURLOPT_USERPWD] = "{$value[0]}:{$value[1]}"; + break; + } + } + if (isset($options['query'])) { + $value = $options['query']; + if (\is_array($value)) { + $value = \http_build_query($value, '', '&', \PHP_QUERY_RFC3986); + } + if (!\is_string($value)) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('query must be a string or array'); + } + $modify['query'] = $value; + unset($options['query']); + } + // Ensure that sink is not an invalid value. + if (isset($options['sink'])) { + // TODO: Add more sink validation? + if (\is_bool($options['sink'])) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('sink must not be a boolean'); + } + } + if (isset($options['version'])) { + $modify['version'] = $options['version']; + } + $request = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::modifyRequest($request, $modify); + if ($request->getBody() instanceof \YoastSEO_Vendor\GuzzleHttp\Psr7\MultipartStream) { + // Use a multipart/form-data POST if a Content-Type is not set. + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); + $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary=' . $request->getBody()->getBoundary(); + } + // Merge in conditional headers if they are not present. + if (isset($options['_conditional'])) { + // Build up the changes so it's in a single clone of the message. + $modify = []; + foreach ($options['_conditional'] as $k => $v) { + if (!$request->hasHeader($k)) { + $modify['set_headers'][$k] = $v; + } + } + $request = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::modifyRequest($request, $modify); + // Don't pass this internal value along to middleware/handlers. + unset($options['_conditional']); + } + return $request; + } + /** + * Return an InvalidArgumentException with pre-set message. + */ + private function invalidBody() : \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException + { + return new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException('Passing in the "body" request ' . 'option as an array to send a request is not supported. ' . 'Please use the "form_params" request option to send a ' . 'application/x-www-form-urlencoded request, or the "multipart" ' . 'request option to send a multipart/form-data request.'); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php new file mode 100644 index 00000000..e8b5ce07 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php @@ -0,0 +1,78 @@ +request('GET', $uri, $options); + } + /** + * Create and send an HTTP HEAD request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function head($uri, array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return $this->request('HEAD', $uri, $options); + } + /** + * Create and send an HTTP PUT request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function put($uri, array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return $this->request('PUT', $uri, $options); + } + /** + * Create and send an HTTP POST request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function post($uri, array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return $this->request('POST', $uri, $options); + } + /** + * Create and send an HTTP PATCH request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function patch($uri, array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return $this->request('PATCH', $uri, $options); + } + /** + * Create and send an HTTP DELETE request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function delete($uri, array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return $this->request('DELETE', $uri, $options); + } + /** + * Create and send an asynchronous HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string $method HTTP method + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public abstract function requestAsync(string $method, $uri, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface; + /** + * Create and send an asynchronous HTTP GET request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function getAsync($uri, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->requestAsync('GET', $uri, $options); + } + /** + * Create and send an asynchronous HTTP HEAD request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function headAsync($uri, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->requestAsync('HEAD', $uri, $options); + } + /** + * Create and send an asynchronous HTTP PUT request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function putAsync($uri, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->requestAsync('PUT', $uri, $options); + } + /** + * Create and send an asynchronous HTTP POST request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function postAsync($uri, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->requestAsync('POST', $uri, $options); + } + /** + * Create and send an asynchronous HTTP PATCH request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function patchAsync($uri, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->requestAsync('PATCH', $uri, $options); + } + /** + * Create and send an asynchronous HTTP DELETE request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function deleteAsync($uri, array $options = []) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->requestAsync('DELETE', $uri, $options); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJar.php new file mode 100644 index 00000000..9f376c57 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJar.php @@ -0,0 +1,240 @@ +strictMode = $strictMode; + foreach ($cookieArray as $cookie) { + if (!$cookie instanceof \YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie) { + $cookie = new \YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie($cookie); + } + $this->setCookie($cookie); + } + } + /** + * Create a new Cookie jar from an associative array and domain. + * + * @param array $cookies Cookies to create the jar from + * @param string $domain Domain to set the cookies to + */ + public static function fromArray(array $cookies, string $domain) : self + { + $cookieJar = new self(); + foreach ($cookies as $name => $value) { + $cookieJar->setCookie(new \YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie(['Domain' => $domain, 'Name' => $name, 'Value' => $value, 'Discard' => \true])); + } + return $cookieJar; + } + /** + * Evaluate if this cookie should be persisted to storage + * that survives between requests. + * + * @param SetCookie $cookie Being evaluated. + * @param bool $allowSessionCookies If we should persist session cookies + */ + public static function shouldPersist(\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie, bool $allowSessionCookies = \false) : bool + { + if ($cookie->getExpires() || $allowSessionCookies) { + if (!$cookie->getDiscard()) { + return \true; + } + } + return \false; + } + /** + * Finds and returns the cookie based on the name + * + * @param string $name cookie name to search for + * + * @return SetCookie|null cookie that was found or null if not found + */ + public function getCookieByName(string $name) : ?\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie + { + foreach ($this->cookies as $cookie) { + if ($cookie->getName() !== null && \strcasecmp($cookie->getName(), $name) === 0) { + return $cookie; + } + } + return null; + } + public function toArray() : array + { + return \array_map(static function (\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) : array { + return $cookie->toArray(); + }, $this->getIterator()->getArrayCopy()); + } + public function clear(string $domain = null, string $path = null, string $name = null) : void + { + if (!$domain) { + $this->cookies = []; + return; + } elseif (!$path) { + $this->cookies = \array_filter($this->cookies, static function (\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) use($domain) : bool { + return !$cookie->matchesDomain($domain); + }); + } elseif (!$name) { + $this->cookies = \array_filter($this->cookies, static function (\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) use($path, $domain) : bool { + return !($cookie->matchesPath($path) && $cookie->matchesDomain($domain)); + }); + } else { + $this->cookies = \array_filter($this->cookies, static function (\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) use($path, $domain, $name) { + return !($cookie->getName() == $name && $cookie->matchesPath($path) && $cookie->matchesDomain($domain)); + }); + } + } + public function clearSessionCookies() : void + { + $this->cookies = \array_filter($this->cookies, static function (\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) : bool { + return !$cookie->getDiscard() && $cookie->getExpires(); + }); + } + public function setCookie(\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) : bool + { + // If the name string is empty (but not 0), ignore the set-cookie + // string entirely. + $name = $cookie->getName(); + if (!$name && $name !== '0') { + return \false; + } + // Only allow cookies with set and valid domain, name, value + $result = $cookie->validate(); + if ($result !== \true) { + if ($this->strictMode) { + throw new \RuntimeException('Invalid cookie: ' . $result); + } + $this->removeCookieIfEmpty($cookie); + return \false; + } + // Resolve conflicts with previously set cookies + foreach ($this->cookies as $i => $c) { + // Two cookies are identical, when their path, and domain are + // identical. + if ($c->getPath() != $cookie->getPath() || $c->getDomain() != $cookie->getDomain() || $c->getName() != $cookie->getName()) { + continue; + } + // The previously set cookie is a discard cookie and this one is + // not so allow the new cookie to be set + if (!$cookie->getDiscard() && $c->getDiscard()) { + unset($this->cookies[$i]); + continue; + } + // If the new cookie's expiration is further into the future, then + // replace the old cookie + if ($cookie->getExpires() > $c->getExpires()) { + unset($this->cookies[$i]); + continue; + } + // If the value has changed, we better change it + if ($cookie->getValue() !== $c->getValue()) { + unset($this->cookies[$i]); + continue; + } + // The cookie exists, so no need to continue + return \false; + } + $this->cookies[] = $cookie; + return \true; + } + public function count() : int + { + return \count($this->cookies); + } + /** + * @return \ArrayIterator + */ + public function getIterator() : \ArrayIterator + { + return new \ArrayIterator(\array_values($this->cookies)); + } + public function extractCookies(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) : void + { + if ($cookieHeader = $response->getHeader('Set-Cookie')) { + foreach ($cookieHeader as $cookie) { + $sc = \YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie::fromString($cookie); + if (!$sc->getDomain()) { + $sc->setDomain($request->getUri()->getHost()); + } + if (0 !== \strpos($sc->getPath(), '/')) { + $sc->setPath($this->getCookiePathFromRequest($request)); + } + if (!$sc->matchesDomain($request->getUri()->getHost())) { + continue; + } + // Note: At this point `$sc->getDomain()` being a public suffix should + // be rejected, but we don't want to pull in the full PSL dependency. + $this->setCookie($sc); + } + } + } + /** + * Computes cookie path following RFC 6265 section 5.1.4 + * + * @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4 + */ + private function getCookiePathFromRequest(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) : string + { + $uriPath = $request->getUri()->getPath(); + if ('' === $uriPath) { + return '/'; + } + if (0 !== \strpos($uriPath, '/')) { + return '/'; + } + if ('/' === $uriPath) { + return '/'; + } + $lastSlashPos = \strrpos($uriPath, '/'); + if (0 === $lastSlashPos || \false === $lastSlashPos) { + return '/'; + } + return \substr($uriPath, 0, $lastSlashPos); + } + public function withCookieHeader(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + $values = []; + $uri = $request->getUri(); + $scheme = $uri->getScheme(); + $host = $uri->getHost(); + $path = $uri->getPath() ?: '/'; + foreach ($this->cookies as $cookie) { + if ($cookie->matchesPath($path) && $cookie->matchesDomain($host) && !$cookie->isExpired() && (!$cookie->getSecure() || $scheme === 'https')) { + $values[] = $cookie->getName() . '=' . $cookie->getValue(); + } + } + return $values ? $request->withHeader('Cookie', \implode('; ', $values)) : $request; + } + /** + * If a cookie already exists and the server asks to set it again with a + * null value, the cookie must be deleted. + */ + private function removeCookieIfEmpty(\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) : void + { + $cookieValue = $cookie->getValue(); + if ($cookieValue === null || $cookieValue === '') { + $this->clear($cookie->getDomain(), $cookie->getPath(), $cookie->getName()); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php new file mode 100644 index 00000000..dafc1f5e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -0,0 +1,74 @@ + + */ +interface CookieJarInterface extends \Countable, \IteratorAggregate +{ + /** + * Create a request with added cookie headers. + * + * If no matching cookies are found in the cookie jar, then no Cookie + * header is added to the request and the same request is returned. + * + * @param RequestInterface $request Request object to modify. + * + * @return RequestInterface returns the modified request. + */ + public function withCookieHeader(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface; + /** + * Extract cookies from an HTTP response and store them in the CookieJar. + * + * @param RequestInterface $request Request that was sent + * @param ResponseInterface $response Response that was received + */ + public function extractCookies(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) : void; + /** + * Sets a cookie in the cookie jar. + * + * @param SetCookie $cookie Cookie to set. + * + * @return bool Returns true on success or false on failure + */ + public function setCookie(\YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie $cookie) : bool; + /** + * Remove cookies currently held in the cookie jar. + * + * Invoking this method without arguments will empty the whole cookie jar. + * If given a $domain argument only cookies belonging to that domain will + * be removed. If given a $domain and $path argument, cookies belonging to + * the specified path within that domain are removed. If given all three + * arguments, then the cookie with the specified name, path and domain is + * removed. + * + * @param string|null $domain Clears cookies matching a domain + * @param string|null $path Clears cookies matching a domain and path + * @param string|null $name Clears cookies matching a domain, path, and name + */ + public function clear(string $domain = null, string $path = null, string $name = null) : void; + /** + * Discard all sessions cookies. + * + * Removes cookies that don't have an expire field or a have a discard + * field set to true. To be called when the user agent shuts down according + * to RFC 2965. + */ + public function clearSessionCookies() : void; + /** + * Converts the cookie jar to an array. + */ + public function toArray() : array; +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php new file mode 100644 index 00000000..059e52ef --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php @@ -0,0 +1,92 @@ +filename = $cookieFile; + $this->storeSessionCookies = $storeSessionCookies; + if (\file_exists($cookieFile)) { + $this->load($cookieFile); + } + } + /** + * Saves the file when shutting down + */ + public function __destruct() + { + $this->save($this->filename); + } + /** + * Saves the cookies to a file. + * + * @param string $filename File to save + * + * @throws \RuntimeException if the file cannot be found or created + */ + public function save(string $filename) : void + { + $json = []; + /** @var SetCookie $cookie */ + foreach ($this as $cookie) { + if (\YoastSEO_Vendor\GuzzleHttp\Cookie\CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { + $json[] = $cookie->toArray(); + } + } + $jsonStr = \YoastSEO_Vendor\GuzzleHttp\Utils::jsonEncode($json); + if (\false === \file_put_contents($filename, $jsonStr, \LOCK_EX)) { + throw new \RuntimeException("Unable to save file {$filename}"); + } + } + /** + * Load cookies from a JSON formatted file. + * + * Old cookies are kept unless overwritten by newly loaded ones. + * + * @param string $filename Cookie file to load. + * + * @throws \RuntimeException if the file cannot be loaded. + */ + public function load(string $filename) : void + { + $json = \file_get_contents($filename); + if (\false === $json) { + throw new \RuntimeException("Unable to load file {$filename}"); + } + if ($json === '') { + return; + } + $data = \YoastSEO_Vendor\GuzzleHttp\Utils::jsonDecode($json, \true); + if (\is_array($data)) { + foreach ($data as $cookie) { + $this->setCookie(new \YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie($cookie)); + } + } elseif (\is_scalar($data) && !empty($data)) { + throw new \RuntimeException("Invalid cookie file: {$filename}"); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php new file mode 100644 index 00000000..b5125529 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -0,0 +1,71 @@ +sessionKey = $sessionKey; + $this->storeSessionCookies = $storeSessionCookies; + $this->load(); + } + /** + * Saves cookies to session when shutting down + */ + public function __destruct() + { + $this->save(); + } + /** + * Save cookies to the client session + */ + public function save() : void + { + $json = []; + /** @var SetCookie $cookie */ + foreach ($this as $cookie) { + if (\YoastSEO_Vendor\GuzzleHttp\Cookie\CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { + $json[] = $cookie->toArray(); + } + } + $_SESSION[$this->sessionKey] = \json_encode($json); + } + /** + * Load the contents of the client session into the data array + */ + protected function load() : void + { + if (!isset($_SESSION[$this->sessionKey])) { + return; + } + $data = \json_decode($_SESSION[$this->sessionKey], \true); + if (\is_array($data)) { + foreach ($data as $cookie) { + $this->setCookie(new \YoastSEO_Vendor\GuzzleHttp\Cookie\SetCookie($cookie)); + } + } elseif (\strlen($data)) { + throw new \RuntimeException('Invalid cookie data'); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SetCookie.php new file mode 100644 index 00000000..9b2e87a9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -0,0 +1,407 @@ + null, 'Value' => null, 'Domain' => null, 'Path' => '/', 'Max-Age' => null, 'Expires' => null, 'Secure' => \false, 'Discard' => \false, 'HttpOnly' => \false]; + /** + * @var array Cookie data + */ + private $data; + /** + * Create a new SetCookie object from a string. + * + * @param string $cookie Set-Cookie header string + */ + public static function fromString(string $cookie) : self + { + // Create the default return array + $data = self::$defaults; + // Explode the cookie string using a series of semicolons + $pieces = \array_filter(\array_map('trim', \explode(';', $cookie))); + // The name of the cookie (first kvp) must exist and include an equal sign. + if (!isset($pieces[0]) || \strpos($pieces[0], '=') === \false) { + return new self($data); + } + // Add the cookie pieces into the parsed data array + foreach ($pieces as $part) { + $cookieParts = \explode('=', $part, 2); + $key = \trim($cookieParts[0]); + $value = isset($cookieParts[1]) ? \trim($cookieParts[1], " \n\r\t\x00\v") : \true; + // Only check for non-cookies when cookies have been found + if (!isset($data['Name'])) { + $data['Name'] = $key; + $data['Value'] = $value; + } else { + foreach (\array_keys(self::$defaults) as $search) { + if (!\strcasecmp($search, $key)) { + if ($search === 'Max-Age') { + if (\is_numeric($value)) { + $data[$search] = (int) $value; + } + } else { + $data[$search] = $value; + } + continue 2; + } + } + $data[$key] = $value; + } + } + return new self($data); + } + /** + * @param array $data Array of cookie data provided by a Cookie parser + */ + public function __construct(array $data = []) + { + $this->data = self::$defaults; + if (isset($data['Name'])) { + $this->setName($data['Name']); + } + if (isset($data['Value'])) { + $this->setValue($data['Value']); + } + if (isset($data['Domain'])) { + $this->setDomain($data['Domain']); + } + if (isset($data['Path'])) { + $this->setPath($data['Path']); + } + if (isset($data['Max-Age'])) { + $this->setMaxAge($data['Max-Age']); + } + if (isset($data['Expires'])) { + $this->setExpires($data['Expires']); + } + if (isset($data['Secure'])) { + $this->setSecure($data['Secure']); + } + if (isset($data['Discard'])) { + $this->setDiscard($data['Discard']); + } + if (isset($data['HttpOnly'])) { + $this->setHttpOnly($data['HttpOnly']); + } + // Set the remaining values that don't have extra validation logic + foreach (\array_diff(\array_keys($data), \array_keys(self::$defaults)) as $key) { + $this->data[$key] = $data[$key]; + } + // Extract the Expires value and turn it into a UNIX timestamp if needed + if (!$this->getExpires() && $this->getMaxAge()) { + // Calculate the Expires date + $this->setExpires(\time() + $this->getMaxAge()); + } elseif (null !== ($expires = $this->getExpires()) && !\is_numeric($expires)) { + $this->setExpires($expires); + } + } + public function __toString() + { + $str = $this->data['Name'] . '=' . ($this->data['Value'] ?? '') . '; '; + foreach ($this->data as $k => $v) { + if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== \false) { + if ($k === 'Expires') { + $str .= 'Expires=' . \gmdate('D, d M Y H:i:s \\G\\M\\T', $v) . '; '; + } else { + $str .= ($v === \true ? $k : "{$k}={$v}") . '; '; + } + } + } + return \rtrim($str, '; '); + } + public function toArray() : array + { + return $this->data; + } + /** + * Get the cookie name. + * + * @return string + */ + public function getName() + { + return $this->data['Name']; + } + /** + * Set the cookie name. + * + * @param string $name Cookie name + */ + public function setName($name) : void + { + if (!\is_string($name)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Name'] = (string) $name; + } + /** + * Get the cookie value. + * + * @return string|null + */ + public function getValue() + { + return $this->data['Value']; + } + /** + * Set the cookie value. + * + * @param string $value Cookie value + */ + public function setValue($value) : void + { + if (!\is_string($value)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Value'] = (string) $value; + } + /** + * Get the domain. + * + * @return string|null + */ + public function getDomain() + { + return $this->data['Domain']; + } + /** + * Set the domain of the cookie. + * + * @param string|null $domain + */ + public function setDomain($domain) : void + { + if (!\is_string($domain) && null !== $domain) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Domain'] = null === $domain ? null : (string) $domain; + } + /** + * Get the path. + * + * @return string + */ + public function getPath() + { + return $this->data['Path']; + } + /** + * Set the path of the cookie. + * + * @param string $path Path of the cookie + */ + public function setPath($path) : void + { + if (!\is_string($path)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Path'] = (string) $path; + } + /** + * Maximum lifetime of the cookie in seconds. + * + * @return int|null + */ + public function getMaxAge() + { + return null === $this->data['Max-Age'] ? null : (int) $this->data['Max-Age']; + } + /** + * Set the max-age of the cookie. + * + * @param int|null $maxAge Max age of the cookie in seconds + */ + public function setMaxAge($maxAge) : void + { + if (!\is_int($maxAge) && null !== $maxAge) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Max-Age'] = $maxAge === null ? null : (int) $maxAge; + } + /** + * The UNIX timestamp when the cookie Expires. + * + * @return string|int|null + */ + public function getExpires() + { + return $this->data['Expires']; + } + /** + * Set the unix timestamp for which the cookie will expire. + * + * @param int|string|null $timestamp Unix timestamp or any English textual datetime description. + */ + public function setExpires($timestamp) : void + { + if (!\is_int($timestamp) && !\is_string($timestamp) && null !== $timestamp) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int, string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Expires'] = null === $timestamp ? null : (\is_numeric($timestamp) ? (int) $timestamp : \strtotime((string) $timestamp)); + } + /** + * Get whether or not this is a secure cookie. + * + * @return bool + */ + public function getSecure() + { + return $this->data['Secure']; + } + /** + * Set whether or not the cookie is secure. + * + * @param bool $secure Set to true or false if secure + */ + public function setSecure($secure) : void + { + if (!\is_bool($secure)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Secure'] = (bool) $secure; + } + /** + * Get whether or not this is a session cookie. + * + * @return bool|null + */ + public function getDiscard() + { + return $this->data['Discard']; + } + /** + * Set whether or not this is a session cookie. + * + * @param bool $discard Set to true or false if this is a session cookie + */ + public function setDiscard($discard) : void + { + if (!\is_bool($discard)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['Discard'] = (bool) $discard; + } + /** + * Get whether or not this is an HTTP only cookie. + * + * @return bool + */ + public function getHttpOnly() + { + return $this->data['HttpOnly']; + } + /** + * Set whether or not this is an HTTP only cookie. + * + * @param bool $httpOnly Set to true or false if this is HTTP only + */ + public function setHttpOnly($httpOnly) : void + { + if (!\is_bool($httpOnly)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->data['HttpOnly'] = (bool) $httpOnly; + } + /** + * Check if the cookie matches a path value. + * + * A request-path path-matches a given cookie-path if at least one of + * the following conditions holds: + * + * - The cookie-path and the request-path are identical. + * - The cookie-path is a prefix of the request-path, and the last + * character of the cookie-path is %x2F ("/"). + * - The cookie-path is a prefix of the request-path, and the first + * character of the request-path that is not included in the cookie- + * path is a %x2F ("/") character. + * + * @param string $requestPath Path to check against + */ + public function matchesPath(string $requestPath) : bool + { + $cookiePath = $this->getPath(); + // Match on exact matches or when path is the default empty "/" + if ($cookiePath === '/' || $cookiePath == $requestPath) { + return \true; + } + // Ensure that the cookie-path is a prefix of the request path. + if (0 !== \strpos($requestPath, $cookiePath)) { + return \false; + } + // Match if the last character of the cookie-path is "/" + if (\substr($cookiePath, -1, 1) === '/') { + return \true; + } + // Match if the first character not included in cookie path is "/" + return \substr($requestPath, \strlen($cookiePath), 1) === '/'; + } + /** + * Check if the cookie matches a domain value. + * + * @param string $domain Domain to check against + */ + public function matchesDomain(string $domain) : bool + { + $cookieDomain = $this->getDomain(); + if (null === $cookieDomain) { + return \true; + } + // Remove the leading '.' as per spec in RFC 6265. + // https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.3 + $cookieDomain = \ltrim(\strtolower($cookieDomain), '.'); + $domain = \strtolower($domain); + // Domain not set or exact match. + if ('' === $cookieDomain || $domain === $cookieDomain) { + return \true; + } + // Matching the subdomain according to RFC 6265. + // https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.3 + if (\filter_var($domain, \FILTER_VALIDATE_IP)) { + return \false; + } + return (bool) \preg_match('/\\.' . \preg_quote($cookieDomain, '/') . '$/', $domain); + } + /** + * Check if the cookie is expired. + */ + public function isExpired() : bool + { + return $this->getExpires() !== null && \time() > $this->getExpires(); + } + /** + * Check if the cookie is valid according to RFC 6265. + * + * @return bool|string Returns true if valid or an error message if invalid + */ + public function validate() + { + $name = $this->getName(); + if ($name === '') { + return 'The cookie name must not be empty'; + } + // Check if any of the invalid characters are present in the cookie name + if (\preg_match('/[\\x00-\\x20\\x22\\x28-\\x29\\x2c\\x2f\\x3a-\\x40\\x5c\\x7b\\x7d\\x7f]/', $name)) { + return 'Cookie name must not contain invalid characters: ASCII ' . 'Control characters (0-31;127), space, tab and the ' . 'following characters: ()<>@,;:\\"/?={}'; + } + // Value must not be null. 0 and empty string are valid. Empty strings + // are technically against RFC 6265, but known to happen in the wild. + $value = $this->getValue(); + if ($value === null) { + return 'The cookie value must not be empty'; + } + // Domains must not be empty, but can be 0. "0" is not a valid internet + // domain, but may be used as server name in a private network. + $domain = $this->getDomain(); + if ($domain === null || $domain === '') { + return 'The cookie domain must not be empty'; + } + return \true; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/BadResponseException.php new file mode 100644 index 00000000..e6c253b3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/BadResponseException.php @@ -0,0 +1,31 @@ +request = $request; + $this->handlerContext = $handlerContext; + } + /** + * Get the request that caused the exception + */ + public function getRequest() : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + return $this->request; + } + /** + * Get contextual information about the error from the underlying handler. + * + * The contents of this array will vary depending on which handler you are + * using. It may also be just an empty array. Relying on this data will + * couple you to a specific handler, but can give more debug information + * when needed. + */ + public function getHandlerContext() : array + { + return $this->handlerContext; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/GuzzleException.php new file mode 100644 index 00000000..b420bad4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/GuzzleException.php @@ -0,0 +1,8 @@ +getStatusCode() : 0; + parent::__construct($message, $code, $previous); + $this->request = $request; + $this->response = $response; + $this->handlerContext = $handlerContext; + } + /** + * Wrap non-RequestExceptions with a RequestException + */ + public static function wrapException(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \Throwable $e) : \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException + { + return $e instanceof \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException ? $e : new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException($e->getMessage(), $request, null, $e); + } + /** + * Factory method to create a new exception with a normalized error message + * + * @param RequestInterface $request Request sent + * @param ResponseInterface $response Response received + * @param \Throwable|null $previous Previous exception + * @param array $handlerContext Optional handler context + * @param BodySummarizerInterface|null $bodySummarizer Optional body summarizer + */ + public static function create(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response = null, \Throwable $previous = null, array $handlerContext = [], \YoastSEO_Vendor\GuzzleHttp\BodySummarizerInterface $bodySummarizer = null) : self + { + if (!$response) { + return new self('Error completing request', $request, null, $previous, $handlerContext); + } + $level = (int) \floor($response->getStatusCode() / 100); + if ($level === 4) { + $label = 'Client error'; + $className = \YoastSEO_Vendor\GuzzleHttp\Exception\ClientException::class; + } elseif ($level === 5) { + $label = 'Server error'; + $className = \YoastSEO_Vendor\GuzzleHttp\Exception\ServerException::class; + } else { + $label = 'Unsuccessful request'; + $className = __CLASS__; + } + $uri = $request->getUri(); + $uri = static::obfuscateUri($uri); + // Client Error: `GET /` resulted in a `404 Not Found` response: + // ... (truncated) + $message = \sprintf('%s: `%s %s` resulted in a `%s %s` response', $label, $request->getMethod(), $uri->__toString(), $response->getStatusCode(), $response->getReasonPhrase()); + $summary = ($bodySummarizer ?? new \YoastSEO_Vendor\GuzzleHttp\BodySummarizer())->summarize($response); + if ($summary !== null) { + $message .= ":\n{$summary}\n"; + } + return new $className($message, $request, $response, $previous, $handlerContext); + } + /** + * Obfuscates URI if there is a username and a password present + */ + private static function obfuscateUri(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $userInfo = $uri->getUserInfo(); + if (\false !== ($pos = \strpos($userInfo, ':'))) { + return $uri->withUserInfo(\substr($userInfo, 0, $pos), '***'); + } + return $uri; + } + /** + * Get the request that caused the exception + */ + public function getRequest() : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + return $this->request; + } + /** + * Get the associated response + */ + public function getResponse() : ?\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return $this->response; + } + /** + * Check if a response was received + */ + public function hasResponse() : bool + { + return $this->response !== null; + } + /** + * Get contextual information about the error from the underlying handler. + * + * The contents of this array will vary depending on which handler you are + * using. It may also be just an empty array. Relying on this data will + * couple you to a specific handler, but can give more debug information + * when needed. + */ + public function getHandlerContext() : array + { + return $this->handlerContext; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ServerException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ServerException.php new file mode 100644 index 00000000..8a9fd9a6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Exception/ServerException.php @@ -0,0 +1,10 @@ +maxHandles = $maxHandles; + } + public function create(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle + { + if (isset($options['curl']['body_as_string'])) { + $options['_body_as_string'] = $options['curl']['body_as_string']; + unset($options['curl']['body_as_string']); + } + $easy = new \YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle(); + $easy->request = $request; + $easy->options = $options; + $conf = $this->getDefaultConf($easy); + $this->applyMethod($easy, $conf); + $this->applyHandlerOptions($easy, $conf); + $this->applyHeaders($easy, $conf); + unset($conf['_headers']); + // Add handler options from the request configuration options + if (isset($options['curl'])) { + $conf = \array_replace($conf, $options['curl']); + } + $conf[\CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy); + $easy->handle = $this->handles ? \array_pop($this->handles) : \curl_init(); + \curl_setopt_array($easy->handle, $conf); + return $easy; + } + public function release(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy) : void + { + $resource = $easy->handle; + unset($easy->handle); + if (\count($this->handles) >= $this->maxHandles) { + \curl_close($resource); + } else { + // Remove all callback functions as they can hold onto references + // and are not cleaned up by curl_reset. Using curl_setopt_array + // does not work for some reason, so removing each one + // individually. + \curl_setopt($resource, \CURLOPT_HEADERFUNCTION, null); + \curl_setopt($resource, \CURLOPT_READFUNCTION, null); + \curl_setopt($resource, \CURLOPT_WRITEFUNCTION, null); + \curl_setopt($resource, \CURLOPT_PROGRESSFUNCTION, null); + \curl_reset($resource); + $this->handles[] = $resource; + } + } + /** + * Completes a cURL transaction, either returning a response promise or a + * rejected promise. + * + * @param callable(RequestInterface, array): PromiseInterface $handler + * @param CurlFactoryInterface $factory Dictates how the handle is released + */ + public static function finish(callable $handler, \YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy, \YoastSEO_Vendor\GuzzleHttp\Handler\CurlFactoryInterface $factory) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + if (isset($easy->options['on_stats'])) { + self::invokeStats($easy); + } + if (!$easy->response || $easy->errno) { + return self::finishError($handler, $easy, $factory); + } + // Return the response if it is present and there is no error. + $factory->release($easy); + // Rewind the body of the response if possible. + $body = $easy->response->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + return new \YoastSEO_Vendor\GuzzleHttp\Promise\FulfilledPromise($easy->response); + } + private static function invokeStats(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy) : void + { + $curlStats = \curl_getinfo($easy->handle); + $curlStats['appconnect_time'] = \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME); + $stats = new \YoastSEO_Vendor\GuzzleHttp\TransferStats($easy->request, $easy->response, $curlStats['total_time'], $easy->errno, $curlStats); + $easy->options['on_stats']($stats); + } + /** + * @param callable(RequestInterface, array): PromiseInterface $handler + */ + private static function finishError(callable $handler, \YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy, \YoastSEO_Vendor\GuzzleHttp\Handler\CurlFactoryInterface $factory) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + // Get error information and release the handle to the factory. + $ctx = ['errno' => $easy->errno, 'error' => \curl_error($easy->handle), 'appconnect_time' => \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME)] + \curl_getinfo($easy->handle); + $ctx[self::CURL_VERSION_STR] = \curl_version()['version']; + $factory->release($easy); + // Retry when nothing is present or when curl failed to rewind. + if (empty($easy->options['_err_message']) && (!$easy->errno || $easy->errno == 65)) { + return self::retryFailedRewind($handler, $easy, $ctx); + } + return self::createRejection($easy, $ctx); + } + private static function createRejection(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy, array $ctx) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + static $connectionErrors = [\CURLE_OPERATION_TIMEOUTED => \true, \CURLE_COULDNT_RESOLVE_HOST => \true, \CURLE_COULDNT_CONNECT => \true, \CURLE_SSL_CONNECT_ERROR => \true, \CURLE_GOT_NOTHING => \true]; + if ($easy->createResponseException) { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor(new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException('An error was encountered while creating the response', $easy->request, $easy->response, $easy->createResponseException, $ctx)); + } + // If an exception was encountered during the onHeaders event, then + // return a rejected promise that wraps that exception. + if ($easy->onHeadersException) { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor(new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException('An error was encountered during the on_headers event', $easy->request, $easy->response, $easy->onHeadersException, $ctx)); + } + $message = \sprintf('cURL error %s: %s (%s)', $ctx['errno'], $ctx['error'], 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html'); + $uriString = (string) $easy->request->getUri(); + if ($uriString !== '' && \false === \strpos($ctx['error'], $uriString)) { + $message .= \sprintf(' for %s', $uriString); + } + // Create a connection exception if it was a specific error code. + $error = isset($connectionErrors[$easy->errno]) ? new \YoastSEO_Vendor\GuzzleHttp\Exception\ConnectException($message, $easy->request, null, $ctx) : new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException($message, $easy->request, $easy->response, null, $ctx); + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($error); + } + /** + * @return array + */ + private function getDefaultConf(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy) : array + { + $conf = ['_headers' => $easy->request->getHeaders(), \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), \CURLOPT_RETURNTRANSFER => \false, \CURLOPT_HEADER => \false, \CURLOPT_CONNECTTIMEOUT => 300]; + if (\defined('CURLOPT_PROTOCOLS')) { + $conf[\CURLOPT_PROTOCOLS] = \CURLPROTO_HTTP | \CURLPROTO_HTTPS; + } + $version = $easy->request->getProtocolVersion(); + if ($version == 1.1) { + $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_1; + } elseif ($version == 2.0) { + $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2_0; + } else { + $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_0; + } + return $conf; + } + private function applyMethod(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy, array &$conf) : void + { + $body = $easy->request->getBody(); + $size = $body->getSize(); + if ($size === null || $size > 0) { + $this->applyBody($easy->request, $easy->options, $conf); + return; + } + $method = $easy->request->getMethod(); + if ($method === 'PUT' || $method === 'POST') { + // See https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2 + if (!$easy->request->hasHeader('Content-Length')) { + $conf[\CURLOPT_HTTPHEADER][] = 'Content-Length: 0'; + } + } elseif ($method === 'HEAD') { + $conf[\CURLOPT_NOBODY] = \true; + unset($conf[\CURLOPT_WRITEFUNCTION], $conf[\CURLOPT_READFUNCTION], $conf[\CURLOPT_FILE], $conf[\CURLOPT_INFILE]); + } + } + private function applyBody(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options, array &$conf) : void + { + $size = $request->hasHeader('Content-Length') ? (int) $request->getHeaderLine('Content-Length') : null; + // Send the body as a string if the size is less than 1MB OR if the + // [curl][body_as_string] request value is set. + if ($size !== null && $size < 1000000 || !empty($options['_body_as_string'])) { + $conf[\CURLOPT_POSTFIELDS] = (string) $request->getBody(); + // Don't duplicate the Content-Length header + $this->removeHeader('Content-Length', $conf); + $this->removeHeader('Transfer-Encoding', $conf); + } else { + $conf[\CURLOPT_UPLOAD] = \true; + if ($size !== null) { + $conf[\CURLOPT_INFILESIZE] = $size; + $this->removeHeader('Content-Length', $conf); + } + $body = $request->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + $conf[\CURLOPT_READFUNCTION] = static function ($ch, $fd, $length) use($body) { + return $body->read($length); + }; + } + // If the Expect header is not present, prevent curl from adding it + if (!$request->hasHeader('Expect')) { + $conf[\CURLOPT_HTTPHEADER][] = 'Expect:'; + } + // cURL sometimes adds a content-type by default. Prevent this. + if (!$request->hasHeader('Content-Type')) { + $conf[\CURLOPT_HTTPHEADER][] = 'Content-Type:'; + } + } + private function applyHeaders(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy, array &$conf) : void + { + foreach ($conf['_headers'] as $name => $values) { + foreach ($values as $value) { + $value = (string) $value; + if ($value === '') { + // cURL requires a special format for empty headers. + // See https://github.com/guzzle/guzzle/issues/1882 for more details. + $conf[\CURLOPT_HTTPHEADER][] = "{$name};"; + } else { + $conf[\CURLOPT_HTTPHEADER][] = "{$name}: {$value}"; + } + } + } + // Remove the Accept header if one was not set + if (!$easy->request->hasHeader('Accept')) { + $conf[\CURLOPT_HTTPHEADER][] = 'Accept:'; + } + } + /** + * Remove a header from the options array. + * + * @param string $name Case-insensitive header to remove + * @param array $options Array of options to modify + */ + private function removeHeader(string $name, array &$options) : void + { + foreach (\array_keys($options['_headers']) as $key) { + if (!\strcasecmp($key, $name)) { + unset($options['_headers'][$key]); + return; + } + } + } + private function applyHandlerOptions(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy, array &$conf) : void + { + $options = $easy->options; + if (isset($options['verify'])) { + if ($options['verify'] === \false) { + unset($conf[\CURLOPT_CAINFO]); + $conf[\CURLOPT_SSL_VERIFYHOST] = 0; + $conf[\CURLOPT_SSL_VERIFYPEER] = \false; + } else { + $conf[\CURLOPT_SSL_VERIFYHOST] = 2; + $conf[\CURLOPT_SSL_VERIFYPEER] = \true; + if (\is_string($options['verify'])) { + // Throw an error if the file/folder/link path is not valid or doesn't exist. + if (!\file_exists($options['verify'])) { + throw new \InvalidArgumentException("SSL CA bundle not found: {$options['verify']}"); + } + // If it's a directory or a link to a directory use CURLOPT_CAPATH. + // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO. + if (\is_dir($options['verify']) || \is_link($options['verify']) === \true && ($verifyLink = \readlink($options['verify'])) !== \false && \is_dir($verifyLink)) { + $conf[\CURLOPT_CAPATH] = $options['verify']; + } else { + $conf[\CURLOPT_CAINFO] = $options['verify']; + } + } + } + } + if (!isset($options['curl'][\CURLOPT_ENCODING]) && !empty($options['decode_content'])) { + $accept = $easy->request->getHeaderLine('Accept-Encoding'); + if ($accept) { + $conf[\CURLOPT_ENCODING] = $accept; + } else { + // The empty string enables all available decoders and implicitly + // sets a matching 'Accept-Encoding' header. + $conf[\CURLOPT_ENCODING] = ''; + // But as the user did not specify any acceptable encodings we need + // to overwrite this implicit header with an empty one. + $conf[\CURLOPT_HTTPHEADER][] = 'Accept-Encoding:'; + } + } + if (!isset($options['sink'])) { + // Use a default temp stream if no sink was set. + $options['sink'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::tryFopen('php://temp', 'w+'); + } + $sink = $options['sink']; + if (!\is_string($sink)) { + $sink = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($sink); + } elseif (!\is_dir(\dirname($sink))) { + // Ensure that the directory exists before failing in curl. + throw new \RuntimeException(\sprintf('Directory %s does not exist for sink value of %s', \dirname($sink), $sink)); + } else { + $sink = new \YoastSEO_Vendor\GuzzleHttp\Psr7\LazyOpenStream($sink, 'w+'); + } + $easy->sink = $sink; + $conf[\CURLOPT_WRITEFUNCTION] = static function ($ch, $write) use($sink) : int { + return $sink->write($write); + }; + $timeoutRequiresNoSignal = \false; + if (isset($options['timeout'])) { + $timeoutRequiresNoSignal |= $options['timeout'] < 1; + $conf[\CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000; + } + // CURL default value is CURL_IPRESOLVE_WHATEVER + if (isset($options['force_ip_resolve'])) { + if ('v4' === $options['force_ip_resolve']) { + $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V4; + } elseif ('v6' === $options['force_ip_resolve']) { + $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V6; + } + } + if (isset($options['connect_timeout'])) { + $timeoutRequiresNoSignal |= $options['connect_timeout'] < 1; + $conf[\CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000; + } + if ($timeoutRequiresNoSignal && \strtoupper(\substr(\PHP_OS, 0, 3)) !== 'WIN') { + $conf[\CURLOPT_NOSIGNAL] = \true; + } + if (isset($options['proxy'])) { + if (!\is_array($options['proxy'])) { + $conf[\CURLOPT_PROXY] = $options['proxy']; + } else { + $scheme = $easy->request->getUri()->getScheme(); + if (isset($options['proxy'][$scheme])) { + $host = $easy->request->getUri()->getHost(); + if (isset($options['proxy']['no']) && \YoastSEO_Vendor\GuzzleHttp\Utils::isHostInNoProxy($host, $options['proxy']['no'])) { + unset($conf[\CURLOPT_PROXY]); + } else { + $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme]; + } + } + } + } + if (isset($options['crypto_method'])) { + if (\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) { + if (!\defined('CURL_SSLVERSION_TLSv1_0')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.0 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_0; + } elseif (\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) { + if (!\defined('CURL_SSLVERSION_TLSv1_1')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.1 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_1; + } elseif (\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) { + if (!\defined('CURL_SSLVERSION_TLSv1_2')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2; + } elseif (\defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) { + if (!\defined('CURL_SSLVERSION_TLSv1_3')) { + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL'); + } + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3; + } else { + throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided'); + } + } + if (isset($options['cert'])) { + $cert = $options['cert']; + if (\is_array($cert)) { + $conf[\CURLOPT_SSLCERTPASSWD] = $cert[1]; + $cert = $cert[0]; + } + if (!\file_exists($cert)) { + throw new \InvalidArgumentException("SSL certificate not found: {$cert}"); + } + // OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files. + // see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html + $ext = \pathinfo($cert, \PATHINFO_EXTENSION); + if (\preg_match('#^(der|p12)$#i', $ext)) { + $conf[\CURLOPT_SSLCERTTYPE] = \strtoupper($ext); + } + $conf[\CURLOPT_SSLCERT] = $cert; + } + if (isset($options['ssl_key'])) { + if (\is_array($options['ssl_key'])) { + if (\count($options['ssl_key']) === 2) { + [$sslKey, $conf[\CURLOPT_SSLKEYPASSWD]] = $options['ssl_key']; + } else { + [$sslKey] = $options['ssl_key']; + } + } + $sslKey = $sslKey ?? $options['ssl_key']; + if (!\file_exists($sslKey)) { + throw new \InvalidArgumentException("SSL private key not found: {$sslKey}"); + } + $conf[\CURLOPT_SSLKEY] = $sslKey; + } + if (isset($options['progress'])) { + $progress = $options['progress']; + if (!\is_callable($progress)) { + throw new \InvalidArgumentException('progress client option must be callable'); + } + $conf[\CURLOPT_NOPROGRESS] = \false; + $conf[\CURLOPT_PROGRESSFUNCTION] = static function ($resource, int $downloadSize, int $downloaded, int $uploadSize, int $uploaded) use($progress) { + $progress($downloadSize, $downloaded, $uploadSize, $uploaded); + }; + } + if (!empty($options['debug'])) { + $conf[\CURLOPT_STDERR] = \YoastSEO_Vendor\GuzzleHttp\Utils::debugResource($options['debug']); + $conf[\CURLOPT_VERBOSE] = \true; + } + } + /** + * This function ensures that a response was set on a transaction. If one + * was not set, then the request is retried if possible. This error + * typically means you are sending a payload, curl encountered a + * "Connection died, retrying a fresh connect" error, tried to rewind the + * stream, and then encountered a "necessary data rewind wasn't possible" + * error, causing the request to be sent through curl_multi_info_read() + * without an error status. + * + * @param callable(RequestInterface, array): PromiseInterface $handler + */ + private static function retryFailedRewind(callable $handler, \YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy, array $ctx) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + try { + // Only rewind if the body has been read from. + $body = $easy->request->getBody(); + if ($body->tell() > 0) { + $body->rewind(); + } + } catch (\RuntimeException $e) { + $ctx['error'] = 'The connection unexpectedly failed without ' . 'providing an error. The request would have been retried, ' . 'but attempting to rewind the request body failed. ' . 'Exception: ' . $e; + return self::createRejection($easy, $ctx); + } + // Retry no more than 3 times before giving up. + if (!isset($easy->options['_curl_retries'])) { + $easy->options['_curl_retries'] = 1; + } elseif ($easy->options['_curl_retries'] == 2) { + $ctx['error'] = 'The cURL request was retried 3 times ' . 'and did not succeed. The most likely reason for the failure ' . 'is that cURL was unable to rewind the body of the request ' . 'and subsequent retries resulted in the same error. Turn on ' . 'the debug option to see what went wrong. See ' . 'https://bugs.php.net/bug.php?id=47204 for more information.'; + return self::createRejection($easy, $ctx); + } else { + ++$easy->options['_curl_retries']; + } + return $handler($easy->request, $easy->options); + } + private function createHeaderFn(\YoastSEO_Vendor\GuzzleHttp\Handler\EasyHandle $easy) : callable + { + if (isset($easy->options['on_headers'])) { + $onHeaders = $easy->options['on_headers']; + if (!\is_callable($onHeaders)) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + } else { + $onHeaders = null; + } + return static function ($ch, $h) use($onHeaders, $easy, &$startingResponse) { + $value = \trim($h); + if ($value === '') { + $startingResponse = \true; + try { + $easy->createResponse(); + } catch (\Exception $e) { + $easy->createResponseException = $e; + return -1; + } + if ($onHeaders !== null) { + try { + $onHeaders($easy->response); + } catch (\Exception $e) { + // Associate the exception with the handle and trigger + // a curl header write error by returning 0. + $easy->onHeadersException = $e; + return -1; + } + } + } elseif ($startingResponse) { + $startingResponse = \false; + $easy->headers = [$value]; + } else { + $easy->headers[] = $value; + } + return \strlen($h); + }; + } + public function __destruct() + { + foreach ($this->handles as $id => $handle) { + \curl_close($handle); + unset($this->handles[$id]); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php new file mode 100644 index 00000000..2f116aa9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php @@ -0,0 +1,23 @@ +factory = $options['handle_factory'] ?? new \YoastSEO_Vendor\GuzzleHttp\Handler\CurlFactory(3); + } + public function __invoke(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + if (isset($options['delay'])) { + \usleep($options['delay'] * 1000); + } + $easy = $this->factory->create($request, $options); + \curl_exec($easy->handle); + $easy->errno = \curl_errno($easy->handle); + return \YoastSEO_Vendor\GuzzleHttp\Handler\CurlFactory::finish($this, $easy, $this->factory); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php new file mode 100644 index 00000000..ddbbfa84 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -0,0 +1,220 @@ + An array of delay times, indexed by handle id in `addRequest`. + * + * @see CurlMultiHandler::addRequest + */ + private $delays = []; + /** + * @var array An associative array of CURLMOPT_* options and corresponding values for curl_multi_setopt() + */ + private $options = []; + /** @var resource|\CurlMultiHandle */ + private $_mh; + /** + * This handler accepts the following options: + * + * - handle_factory: An optional factory used to create curl handles + * - select_timeout: Optional timeout (in seconds) to block before timing + * out while selecting curl handles. Defaults to 1 second. + * - options: An associative array of CURLMOPT_* options and + * corresponding values for curl_multi_setopt() + */ + public function __construct(array $options = []) + { + $this->factory = $options['handle_factory'] ?? new \YoastSEO_Vendor\GuzzleHttp\Handler\CurlFactory(50); + if (isset($options['select_timeout'])) { + $this->selectTimeout = $options['select_timeout']; + } elseif ($selectTimeout = \YoastSEO_Vendor\GuzzleHttp\Utils::getenv('GUZZLE_CURL_SELECT_TIMEOUT')) { + @\trigger_error('Since guzzlehttp/guzzle 7.2.0: Using environment variable GUZZLE_CURL_SELECT_TIMEOUT is deprecated. Use option "select_timeout" instead.', \E_USER_DEPRECATED); + $this->selectTimeout = (int) $selectTimeout; + } else { + $this->selectTimeout = 1; + } + $this->options = $options['options'] ?? []; + // unsetting the property forces the first access to go through + // __get(). + unset($this->_mh); + } + /** + * @param string $name + * + * @return resource|\CurlMultiHandle + * + * @throws \BadMethodCallException when another field as `_mh` will be gotten + * @throws \RuntimeException when curl can not initialize a multi handle + */ + public function __get($name) + { + if ($name !== '_mh') { + throw new \BadMethodCallException("Can not get other property as '_mh'."); + } + $multiHandle = \curl_multi_init(); + if (\false === $multiHandle) { + throw new \RuntimeException('Can not initialize curl multi handle.'); + } + $this->_mh = $multiHandle; + foreach ($this->options as $option => $value) { + // A warning is raised in case of a wrong option. + \curl_multi_setopt($this->_mh, $option, $value); + } + return $this->_mh; + } + public function __destruct() + { + if (isset($this->_mh)) { + \curl_multi_close($this->_mh); + unset($this->_mh); + } + } + public function __invoke(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $easy = $this->factory->create($request, $options); + $id = (int) $easy->handle; + $promise = new \YoastSEO_Vendor\GuzzleHttp\Promise\Promise([$this, 'execute'], function () use($id) { + return $this->cancel($id); + }); + $this->addRequest(['easy' => $easy, 'deferred' => $promise]); + return $promise; + } + /** + * Ticks the curl event loop. + */ + public function tick() : void + { + // Add any delayed handles if needed. + if ($this->delays) { + $currentTime = \YoastSEO_Vendor\GuzzleHttp\Utils::currentTime(); + foreach ($this->delays as $id => $delay) { + if ($currentTime >= $delay) { + unset($this->delays[$id]); + \curl_multi_add_handle($this->_mh, $this->handles[$id]['easy']->handle); + } + } + } + // Step through the task queue which may add additional requests. + \YoastSEO_Vendor\GuzzleHttp\Promise\Utils::queue()->run(); + if ($this->active && \curl_multi_select($this->_mh, $this->selectTimeout) === -1) { + // Perform a usleep if a select returns -1. + // See: https://bugs.php.net/bug.php?id=61141 + \usleep(250); + } + while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) { + } + $this->processMessages(); + } + /** + * Runs until all outstanding connections have completed. + */ + public function execute() : void + { + $queue = \YoastSEO_Vendor\GuzzleHttp\Promise\Utils::queue(); + while ($this->handles || !$queue->isEmpty()) { + // If there are no transfers, then sleep for the next delay + if (!$this->active && $this->delays) { + \usleep($this->timeToNext()); + } + $this->tick(); + } + } + private function addRequest(array $entry) : void + { + $easy = $entry['easy']; + $id = (int) $easy->handle; + $this->handles[$id] = $entry; + if (empty($easy->options['delay'])) { + \curl_multi_add_handle($this->_mh, $easy->handle); + } else { + $this->delays[$id] = \YoastSEO_Vendor\GuzzleHttp\Utils::currentTime() + $easy->options['delay'] / 1000; + } + } + /** + * Cancels a handle from sending and removes references to it. + * + * @param int $id Handle ID to cancel and remove. + * + * @return bool True on success, false on failure. + */ + private function cancel($id) : bool + { + if (!\is_int($id)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an integer to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + // Cannot cancel if it has been processed. + if (!isset($this->handles[$id])) { + return \false; + } + $handle = $this->handles[$id]['easy']->handle; + unset($this->delays[$id], $this->handles[$id]); + \curl_multi_remove_handle($this->_mh, $handle); + \curl_close($handle); + return \true; + } + private function processMessages() : void + { + while ($done = \curl_multi_info_read($this->_mh)) { + if ($done['msg'] !== \CURLMSG_DONE) { + // if it's not done, then it would be premature to remove the handle. ref https://github.com/guzzle/guzzle/pull/2892#issuecomment-945150216 + continue; + } + $id = (int) $done['handle']; + \curl_multi_remove_handle($this->_mh, $done['handle']); + if (!isset($this->handles[$id])) { + // Probably was cancelled. + continue; + } + $entry = $this->handles[$id]; + unset($this->handles[$id], $this->delays[$id]); + $entry['easy']->errno = $done['result']; + $entry['deferred']->resolve(\YoastSEO_Vendor\GuzzleHttp\Handler\CurlFactory::finish($this, $entry['easy'], $this->factory)); + } + } + private function timeToNext() : int + { + $currentTime = \YoastSEO_Vendor\GuzzleHttp\Utils::currentTime(); + $nextTime = \PHP_INT_MAX; + foreach ($this->delays as $time) { + if ($time < $nextTime) { + $nextTime = $time; + } + } + return (int) \max(0, $nextTime - $currentTime) * 1000000; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/EasyHandle.php new file mode 100644 index 00000000..f5e837fd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/EasyHandle.php @@ -0,0 +1,91 @@ +headers); + $normalizedKeys = \YoastSEO_Vendor\GuzzleHttp\Utils::normalizeHeaderKeys($headers); + if (!empty($this->options['decode_content']) && isset($normalizedKeys['content-encoding'])) { + $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']]; + unset($headers[$normalizedKeys['content-encoding']]); + if (isset($normalizedKeys['content-length'])) { + $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']]; + $bodyLength = (int) $this->sink->getSize(); + if ($bodyLength) { + $headers[$normalizedKeys['content-length']] = $bodyLength; + } else { + unset($headers[$normalizedKeys['content-length']]); + } + } + } + // Attach a response to the easy handle with the parsed headers. + $this->response = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Response($status, $headers, $this->sink, $ver, $reason); + } + /** + * @param string $name + * + * @return void + * + * @throws \BadMethodCallException + */ + public function __get($name) + { + $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name; + throw new \BadMethodCallException($msg); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php new file mode 100644 index 00000000..79c7db0e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php @@ -0,0 +1,36 @@ +|null $queue The parameters to be passed to the append function, as an indexed array. + * @param callable|null $onFulfilled Callback to invoke when the return value is fulfilled. + * @param callable|null $onRejected Callback to invoke when the return value is rejected. + */ + public function __construct(array $queue = null, callable $onFulfilled = null, callable $onRejected = null) + { + $this->onFulfilled = $onFulfilled; + $this->onRejected = $onRejected; + if ($queue) { + // array_values included for BC + $this->append(...\array_values($queue)); + } + } + public function __invoke(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + if (!$this->queue) { + throw new \OutOfBoundsException('Mock queue is empty'); + } + if (isset($options['delay']) && \is_numeric($options['delay'])) { + \usleep((int) $options['delay'] * 1000); + } + $this->lastRequest = $request; + $this->lastOptions = $options; + $response = \array_shift($this->queue); + if (isset($options['on_headers'])) { + if (!\is_callable($options['on_headers'])) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + try { + $options['on_headers']($response); + } catch (\Exception $e) { + $msg = 'An error was encountered during the on_headers event'; + $response = new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException($msg, $request, $response, $e); + } + } + if (\is_callable($response)) { + $response = $response($request, $options); + } + $response = $response instanceof \Throwable ? \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($response) : \YoastSEO_Vendor\GuzzleHttp\Promise\Create::promiseFor($response); + return $response->then(function (?\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $value) use($request, $options) { + $this->invokeStats($request, $options, $value); + if ($this->onFulfilled) { + ($this->onFulfilled)($value); + } + if ($value !== null && isset($options['sink'])) { + $contents = (string) $value->getBody(); + $sink = $options['sink']; + if (\is_resource($sink)) { + \fwrite($sink, $contents); + } elseif (\is_string($sink)) { + \file_put_contents($sink, $contents); + } elseif ($sink instanceof \YoastSEO_Vendor\Psr\Http\Message\StreamInterface) { + $sink->write($contents); + } + } + return $value; + }, function ($reason) use($request, $options) { + $this->invokeStats($request, $options, null, $reason); + if ($this->onRejected) { + ($this->onRejected)($reason); + } + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($reason); + }); + } + /** + * Adds one or more variadic requests, exceptions, callables, or promises + * to the queue. + * + * @param mixed ...$values + */ + public function append(...$values) : void + { + foreach ($values as $value) { + if ($value instanceof \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface || $value instanceof \Throwable || $value instanceof \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface || \is_callable($value)) { + $this->queue[] = $value; + } else { + throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found ' . \YoastSEO_Vendor\GuzzleHttp\Utils::describeType($value)); + } + } + } + /** + * Get the last received request. + */ + public function getLastRequest() : ?\YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + return $this->lastRequest; + } + /** + * Get the last received request options. + */ + public function getLastOptions() : array + { + return $this->lastOptions; + } + /** + * Returns the number of remaining items in the queue. + */ + public function count() : int + { + return \count($this->queue); + } + public function reset() : void + { + $this->queue = []; + } + /** + * @param mixed $reason Promise or reason. + */ + private function invokeStats(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response = null, $reason = null) : void + { + if (isset($options['on_stats'])) { + $transferTime = $options['transfer_time'] ?? 0; + $stats = new \YoastSEO_Vendor\GuzzleHttp\TransferStats($request, $response, $transferTime, $reason); + $options['on_stats']($stats); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/Proxy.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/Proxy.php new file mode 100644 index 00000000..69d526d8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Handler/Proxy.php @@ -0,0 +1,49 @@ +withoutHeader('Expect'); + // Append a content-length header if body size is zero to match + // cURL's behavior. + if (0 === $request->getBody()->getSize()) { + $request = $request->withHeader('Content-Length', '0'); + } + return $this->createResponse($request, $options, $this->createStream($request, $options), $startTime); + } catch (\InvalidArgumentException $e) { + throw $e; + } catch (\Exception $e) { + // Determine if the error was a networking error. + $message = $e->getMessage(); + // This list can probably get more comprehensive. + if (\false !== \strpos($message, 'getaddrinfo') || \false !== \strpos($message, 'Connection refused') || \false !== \strpos($message, "couldn't connect to host") || \false !== \strpos($message, 'connection attempt failed')) { + $e = new \YoastSEO_Vendor\GuzzleHttp\Exception\ConnectException($e->getMessage(), $request, $e); + } else { + $e = \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException::wrapException($request, $e); + } + $this->invokeStats($options, $request, $startTime, null, $e); + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($e); + } + } + private function invokeStats(array $options, \YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, ?float $startTime, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response = null, \Throwable $error = null) : void + { + if (isset($options['on_stats'])) { + $stats = new \YoastSEO_Vendor\GuzzleHttp\TransferStats($request, $response, \YoastSEO_Vendor\GuzzleHttp\Utils::currentTime() - $startTime, $error, []); + $options['on_stats']($stats); + } + } + /** + * @param resource $stream + */ + private function createResponse(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options, $stream, ?float $startTime) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $hdrs = $this->lastHeaders; + $this->lastHeaders = []; + try { + [$ver, $status, $reason, $headers] = \YoastSEO_Vendor\GuzzleHttp\Handler\HeaderProcessor::parseHeaders($hdrs); + } catch (\Exception $e) { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor(new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException('An error was encountered while creating the response', $request, null, $e)); + } + [$stream, $headers] = $this->checkDecode($options, $headers, $stream); + $stream = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($stream); + $sink = $stream; + if (\strcasecmp('HEAD', $request->getMethod())) { + $sink = $this->createSink($stream, $options); + } + try { + $response = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Response($status, $headers, $sink, $ver, $reason); + } catch (\Exception $e) { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor(new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException('An error was encountered while creating the response', $request, null, $e)); + } + if (isset($options['on_headers'])) { + try { + $options['on_headers']($response); + } catch (\Exception $e) { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor(new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException('An error was encountered during the on_headers event', $request, $response, $e)); + } + } + // Do not drain when the request is a HEAD request because they have + // no body. + if ($sink !== $stream) { + $this->drain($stream, $sink, $response->getHeaderLine('Content-Length')); + } + $this->invokeStats($options, $request, $startTime, $response, null); + return new \YoastSEO_Vendor\GuzzleHttp\Promise\FulfilledPromise($response); + } + private function createSink(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream, array $options) : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + if (!empty($options['stream'])) { + return $stream; + } + $sink = $options['sink'] ?? \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::tryFopen('php://temp', 'r+'); + return \is_string($sink) ? new \YoastSEO_Vendor\GuzzleHttp\Psr7\LazyOpenStream($sink, 'w+') : \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($sink); + } + /** + * @param resource $stream + */ + private function checkDecode(array $options, array $headers, $stream) : array + { + // Automatically decode responses when instructed. + if (!empty($options['decode_content'])) { + $normalizedKeys = \YoastSEO_Vendor\GuzzleHttp\Utils::normalizeHeaderKeys($headers); + if (isset($normalizedKeys['content-encoding'])) { + $encoding = $headers[$normalizedKeys['content-encoding']]; + if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') { + $stream = new \YoastSEO_Vendor\GuzzleHttp\Psr7\InflateStream(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($stream)); + $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']]; + // Remove content-encoding header + unset($headers[$normalizedKeys['content-encoding']]); + // Fix content-length header + if (isset($normalizedKeys['content-length'])) { + $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']]; + $length = (int) $stream->getSize(); + if ($length === 0) { + unset($headers[$normalizedKeys['content-length']]); + } else { + $headers[$normalizedKeys['content-length']] = [$length]; + } + } + } + } + } + return [$stream, $headers]; + } + /** + * Drains the source stream into the "sink" client option. + * + * @param string $contentLength Header specifying the amount of + * data to read. + * + * @throws \RuntimeException when the sink option is invalid. + */ + private function drain(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $source, \YoastSEO_Vendor\Psr\Http\Message\StreamInterface $sink, string $contentLength) : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + // If a content-length header is provided, then stop reading once + // that number of bytes has been read. This can prevent infinitely + // reading from a stream when dealing with servers that do not honor + // Connection: Close headers. + \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::copyToStream($source, $sink, \strlen($contentLength) > 0 && (int) $contentLength > 0 ? (int) $contentLength : -1); + $sink->seek(0); + $source->close(); + return $sink; + } + /** + * Create a resource and check to ensure it was created successfully + * + * @param callable $callback Callable that returns stream resource + * + * @return resource + * + * @throws \RuntimeException on error + */ + private function createResource(callable $callback) + { + $errors = []; + \set_error_handler(static function ($_, $msg, $file, $line) use(&$errors) : bool { + $errors[] = ['message' => $msg, 'file' => $file, 'line' => $line]; + return \true; + }); + try { + $resource = $callback(); + } finally { + \restore_error_handler(); + } + if (!$resource) { + $message = 'Error creating resource: '; + foreach ($errors as $err) { + foreach ($err as $key => $value) { + $message .= "[{$key}] {$value}" . \PHP_EOL; + } + } + throw new \RuntimeException(\trim($message)); + } + return $resource; + } + /** + * @return resource + */ + private function createStream(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) + { + static $methods; + if (!$methods) { + $methods = \array_flip(\get_class_methods(__CLASS__)); + } + if (!\in_array($request->getUri()->getScheme(), ['http', 'https'])) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException(\sprintf("The scheme '%s' is not supported.", $request->getUri()->getScheme()), $request); + } + // HTTP/1.1 streams using the PHP stream wrapper require a + // Connection: close header + if ($request->getProtocolVersion() == '1.1' && !$request->hasHeader('Connection')) { + $request = $request->withHeader('Connection', 'close'); + } + // Ensure SSL is verified by default + if (!isset($options['verify'])) { + $options['verify'] = \true; + } + $params = []; + $context = $this->getDefaultContext($request); + if (isset($options['on_headers']) && !\is_callable($options['on_headers'])) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + if (!empty($options)) { + foreach ($options as $key => $value) { + $method = "add_{$key}"; + if (isset($methods[$method])) { + $this->{$method}($request, $context, $value, $params); + } + } + } + if (isset($options['stream_context'])) { + if (!\is_array($options['stream_context'])) { + throw new \InvalidArgumentException('stream_context must be an array'); + } + $context = \array_replace_recursive($context, $options['stream_context']); + } + // Microsoft NTLM authentication only supported with curl handler + if (isset($options['auth'][2]) && 'ntlm' === $options['auth'][2]) { + throw new \InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler'); + } + $uri = $this->resolveHost($request, $options); + $contextResource = $this->createResource(static function () use($context, $params) { + return \stream_context_create($context, $params); + }); + return $this->createResource(function () use($uri, &$http_response_header, $contextResource, $context, $options, $request) { + $resource = @\fopen((string) $uri, 'r', \false, $contextResource); + $this->lastHeaders = $http_response_header ?? []; + if (\false === $resource) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\ConnectException(\sprintf('Connection refused for URI %s', $uri), $request, null, $context); + } + if (isset($options['read_timeout'])) { + $readTimeout = $options['read_timeout']; + $sec = (int) $readTimeout; + $usec = ($readTimeout - $sec) * 100000; + \stream_set_timeout($resource, $sec, $usec); + } + return $resource; + }); + } + private function resolveHost(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $uri = $request->getUri(); + if (isset($options['force_ip_resolve']) && !\filter_var($uri->getHost(), \FILTER_VALIDATE_IP)) { + if ('v4' === $options['force_ip_resolve']) { + $records = \dns_get_record($uri->getHost(), \DNS_A); + if (\false === $records || !isset($records[0]['ip'])) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); + } + return $uri->withHost($records[0]['ip']); + } + if ('v6' === $options['force_ip_resolve']) { + $records = \dns_get_record($uri->getHost(), \DNS_AAAA); + if (\false === $records || !isset($records[0]['ipv6'])) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); + } + return $uri->withHost('[' . $records[0]['ipv6'] . ']'); + } + } + return $uri; + } + private function getDefaultContext(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) : array + { + $headers = ''; + foreach ($request->getHeaders() as $name => $value) { + foreach ($value as $val) { + $headers .= "{$name}: {$val}\r\n"; + } + } + $context = ['http' => ['method' => $request->getMethod(), 'header' => $headers, 'protocol_version' => $request->getProtocolVersion(), 'ignore_errors' => \true, 'follow_location' => 0], 'ssl' => ['peer_name' => $request->getUri()->getHost()]]; + $body = (string) $request->getBody(); + if ('' !== $body) { + $context['http']['content'] = $body; + // Prevent the HTTP handler from adding a Content-Type header. + if (!$request->hasHeader('Content-Type')) { + $context['http']['header'] .= "Content-Type:\r\n"; + } + } + $context['http']['header'] = \rtrim($context['http']['header']); + return $context; + } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_proxy(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options, $value, array &$params) : void + { + $uri = null; + if (!\is_array($value)) { + $uri = $value; + } else { + $scheme = $request->getUri()->getScheme(); + if (isset($value[$scheme])) { + if (!isset($value['no']) || !\YoastSEO_Vendor\GuzzleHttp\Utils::isHostInNoProxy($request->getUri()->getHost(), $value['no'])) { + $uri = $value[$scheme]; + } + } + } + if (!$uri) { + return; + } + $parsed = $this->parse_proxy($uri); + $options['http']['proxy'] = $parsed['proxy']; + if ($parsed['auth']) { + if (!isset($options['http']['header'])) { + $options['http']['header'] = []; + } + $options['http']['header'] .= "\r\nProxy-Authorization: {$parsed['auth']}"; + } + } + /** + * Parses the given proxy URL to make it compatible with the format PHP's stream context expects. + */ + private function parse_proxy(string $url) : array + { + $parsed = \parse_url($url); + if ($parsed !== \false && isset($parsed['scheme']) && $parsed['scheme'] === 'http') { + if (isset($parsed['host']) && isset($parsed['port'])) { + $auth = null; + if (isset($parsed['user']) && isset($parsed['pass'])) { + $auth = \base64_encode("{$parsed['user']}:{$parsed['pass']}"); + } + return ['proxy' => "tcp://{$parsed['host']}:{$parsed['port']}", 'auth' => $auth ? "Basic {$auth}" : null]; + } + } + // Return proxy as-is. + return ['proxy' => $url, 'auth' => null]; + } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_timeout(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options, $value, array &$params) : void + { + if ($value > 0) { + $options['http']['timeout'] = $value; + } + } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_crypto_method(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options, $value, array &$params) : void + { + if ($value === \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT || $value === \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT || $value === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT || \defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && $value === \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT) { + $options['http']['crypto_method'] = $value; + return; + } + throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided'); + } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_verify(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options, $value, array &$params) : void + { + if ($value === \false) { + $options['ssl']['verify_peer'] = \false; + $options['ssl']['verify_peer_name'] = \false; + return; + } + if (\is_string($value)) { + $options['ssl']['cafile'] = $value; + if (!\file_exists($value)) { + throw new \RuntimeException("SSL CA bundle not found: {$value}"); + } + } elseif ($value !== \true) { + throw new \InvalidArgumentException('Invalid verify request option'); + } + $options['ssl']['verify_peer'] = \true; + $options['ssl']['verify_peer_name'] = \true; + $options['ssl']['allow_self_signed'] = \false; + } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_cert(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options, $value, array &$params) : void + { + if (\is_array($value)) { + $options['ssl']['passphrase'] = $value[1]; + $value = $value[0]; + } + if (!\file_exists($value)) { + throw new \RuntimeException("SSL certificate not found: {$value}"); + } + $options['ssl']['local_cert'] = $value; + } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_progress(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options, $value, array &$params) : void + { + self::addNotification($params, static function ($code, $a, $b, $c, $transferred, $total) use($value) { + if ($code == \STREAM_NOTIFY_PROGRESS) { + // The upload progress cannot be determined. Use 0 for cURL compatibility: + // https://curl.se/libcurl/c/CURLOPT_PROGRESSFUNCTION.html + $value($total, $transferred, 0, 0); + } + }); + } + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_debug(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array &$options, $value, array &$params) : void + { + if ($value === \false) { + return; + } + static $map = [\STREAM_NOTIFY_CONNECT => 'CONNECT', \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', \STREAM_NOTIFY_PROGRESS => 'PROGRESS', \STREAM_NOTIFY_FAILURE => 'FAILURE', \STREAM_NOTIFY_COMPLETED => 'COMPLETED', \STREAM_NOTIFY_RESOLVE => 'RESOLVE']; + static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max']; + $value = \YoastSEO_Vendor\GuzzleHttp\Utils::debugResource($value); + $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment(''); + self::addNotification($params, static function (int $code, ...$passed) use($ident, $value, $map, $args) : void { + \fprintf($value, '<%s> [%s] ', $ident, $map[$code]); + foreach (\array_filter($passed) as $i => $v) { + \fwrite($value, $args[$i] . ': "' . $v . '" '); + } + \fwrite($value, "\n"); + }); + } + private static function addNotification(array &$params, callable $notify) : void + { + // Wrap the existing function if needed. + if (!isset($params['notification'])) { + $params['notification'] = $notify; + } else { + $params['notification'] = self::callArray([$params['notification'], $notify]); + } + } + private static function callArray(array $functions) : callable + { + return static function (...$args) use($functions) { + foreach ($functions as $fn) { + $fn(...$args); + } + }; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/HandlerStack.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/HandlerStack.php new file mode 100644 index 00000000..cb5a23fb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/HandlerStack.php @@ -0,0 +1,238 @@ +push(\YoastSEO_Vendor\GuzzleHttp\Middleware::httpErrors(), 'http_errors'); + $stack->push(\YoastSEO_Vendor\GuzzleHttp\Middleware::redirect(), 'allow_redirects'); + $stack->push(\YoastSEO_Vendor\GuzzleHttp\Middleware::cookies(), 'cookies'); + $stack->push(\YoastSEO_Vendor\GuzzleHttp\Middleware::prepareBody(), 'prepare_body'); + return $stack; + } + /** + * @param (callable(RequestInterface, array): PromiseInterface)|null $handler Underlying HTTP handler. + */ + public function __construct(callable $handler = null) + { + $this->handler = $handler; + } + /** + * Invokes the handler stack as a composed handler + * + * @return ResponseInterface|PromiseInterface + */ + public function __invoke(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) + { + $handler = $this->resolve(); + return $handler($request, $options); + } + /** + * Dumps a string representation of the stack. + * + * @return string + */ + public function __toString() + { + $depth = 0; + $stack = []; + if ($this->handler !== null) { + $stack[] = '0) Handler: ' . $this->debugCallable($this->handler); + } + $result = ''; + foreach (\array_reverse($this->stack) as $tuple) { + ++$depth; + $str = "{$depth}) Name: '{$tuple[1]}', "; + $str .= 'Function: ' . $this->debugCallable($tuple[0]); + $result = "> {$str}\n{$result}"; + $stack[] = $str; + } + foreach (\array_keys($stack) as $k) { + $result .= "< {$stack[$k]}\n"; + } + return $result; + } + /** + * Set the HTTP handler that actually returns a promise. + * + * @param callable(RequestInterface, array): PromiseInterface $handler Accepts a request and array of options and + * returns a Promise. + */ + public function setHandler(callable $handler) : void + { + $this->handler = $handler; + $this->cached = null; + } + /** + * Returns true if the builder has a handler. + */ + public function hasHandler() : bool + { + return $this->handler !== null; + } + /** + * Unshift a middleware to the bottom of the stack. + * + * @param callable(callable): callable $middleware Middleware function + * @param string $name Name to register for this middleware. + */ + public function unshift(callable $middleware, string $name = null) : void + { + \array_unshift($this->stack, [$middleware, $name]); + $this->cached = null; + } + /** + * Push a middleware to the top of the stack. + * + * @param callable(callable): callable $middleware Middleware function + * @param string $name Name to register for this middleware. + */ + public function push(callable $middleware, string $name = '') : void + { + $this->stack[] = [$middleware, $name]; + $this->cached = null; + } + /** + * Add a middleware before another middleware by name. + * + * @param string $findName Middleware to find + * @param callable(callable): callable $middleware Middleware function + * @param string $withName Name to register for this middleware. + */ + public function before(string $findName, callable $middleware, string $withName = '') : void + { + $this->splice($findName, $withName, $middleware, \true); + } + /** + * Add a middleware after another middleware by name. + * + * @param string $findName Middleware to find + * @param callable(callable): callable $middleware Middleware function + * @param string $withName Name to register for this middleware. + */ + public function after(string $findName, callable $middleware, string $withName = '') : void + { + $this->splice($findName, $withName, $middleware, \false); + } + /** + * Remove a middleware by instance or name from the stack. + * + * @param callable|string $remove Middleware to remove by instance or name. + */ + public function remove($remove) : void + { + if (!\is_string($remove) && !\is_callable($remove)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a callable or string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->cached = null; + $idx = \is_callable($remove) ? 0 : 1; + $this->stack = \array_values(\array_filter($this->stack, static function ($tuple) use($idx, $remove) { + return $tuple[$idx] !== $remove; + })); + } + /** + * Compose the middleware and handler into a single callable function. + * + * @return callable(RequestInterface, array): PromiseInterface + */ + public function resolve() : callable + { + if ($this->cached === null) { + if (($prev = $this->handler) === null) { + throw new \LogicException('No handler has been specified'); + } + foreach (\array_reverse($this->stack) as $fn) { + /** @var callable(RequestInterface, array): PromiseInterface $prev */ + $prev = $fn[0]($prev); + } + $this->cached = $prev; + } + return $this->cached; + } + private function findByName(string $name) : int + { + foreach ($this->stack as $k => $v) { + if ($v[1] === $name) { + return $k; + } + } + throw new \InvalidArgumentException("Middleware not found: {$name}"); + } + /** + * Splices a function into the middleware list at a specific position. + */ + private function splice(string $findName, string $withName, callable $middleware, bool $before) : void + { + $this->cached = null; + $idx = $this->findByName($findName); + $tuple = [$middleware, $withName]; + if ($before) { + if ($idx === 0) { + \array_unshift($this->stack, $tuple); + } else { + $replacement = [$tuple, $this->stack[$idx]]; + \array_splice($this->stack, $idx, 1, $replacement); + } + } elseif ($idx === \count($this->stack) - 1) { + $this->stack[] = $tuple; + } else { + $replacement = [$this->stack[$idx], $tuple]; + \array_splice($this->stack, $idx, 1, $replacement); + } + } + /** + * Provides a debug string for a given callable. + * + * @param callable|string $fn Function to write as a string. + */ + private function debugCallable($fn) : string + { + if (\is_string($fn)) { + return "callable({$fn})"; + } + if (\is_array($fn)) { + return \is_string($fn[0]) ? "callable({$fn[0]}::{$fn[1]})" : "callable(['" . \get_class($fn[0]) . "', '{$fn[1]}'])"; + } + /** @var object $fn */ + return 'callable(' . \spl_object_hash($fn) . ')'; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatter.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatter.php new file mode 100644 index 00000000..ff34387d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatter.php @@ -0,0 +1,168 @@ +>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; + public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; + /** + * @var string Template used to format log messages + */ + private $template; + /** + * @param string $template Log message template + */ + public function __construct(?string $template = self::CLF) + { + $this->template = $template ?: self::CLF; + } + /** + * Returns a formatted message string. + * + * @param RequestInterface $request Request that was sent + * @param ResponseInterface|null $response Response that was received + * @param \Throwable|null $error Exception that was received + */ + public function format(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response = null, \Throwable $error = null) : string + { + $cache = []; + /** @var string */ + return \preg_replace_callback('/{\\s*([A-Za-z_\\-\\.0-9]+)\\s*}/', function (array $matches) use($request, $response, $error, &$cache) { + if (isset($cache[$matches[1]])) { + return $cache[$matches[1]]; + } + $result = ''; + switch ($matches[1]) { + case 'request': + $result = \YoastSEO_Vendor\GuzzleHttp\Psr7\Message::toString($request); + break; + case 'response': + $result = $response ? \YoastSEO_Vendor\GuzzleHttp\Psr7\Message::toString($response) : ''; + break; + case 'req_headers': + $result = \trim($request->getMethod() . ' ' . $request->getRequestTarget()) . ' HTTP/' . $request->getProtocolVersion() . "\r\n" . $this->headers($request); + break; + case 'res_headers': + $result = $response ? \sprintf('HTTP/%s %d %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase()) . "\r\n" . $this->headers($response) : 'NULL'; + break; + case 'req_body': + $result = $request->getBody()->__toString(); + break; + case 'res_body': + if (!$response instanceof \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface) { + $result = 'NULL'; + break; + } + $body = $response->getBody(); + if (!$body->isSeekable()) { + $result = 'RESPONSE_NOT_LOGGEABLE'; + break; + } + $result = $response->getBody()->__toString(); + break; + case 'ts': + case 'date_iso_8601': + $result = \gmdate('c'); + break; + case 'date_common_log': + $result = \date('d/M/Y:H:i:s O'); + break; + case 'method': + $result = $request->getMethod(); + break; + case 'version': + $result = $request->getProtocolVersion(); + break; + case 'uri': + case 'url': + $result = $request->getUri()->__toString(); + break; + case 'target': + $result = $request->getRequestTarget(); + break; + case 'req_version': + $result = $request->getProtocolVersion(); + break; + case 'res_version': + $result = $response ? $response->getProtocolVersion() : 'NULL'; + break; + case 'host': + $result = $request->getHeaderLine('Host'); + break; + case 'hostname': + $result = \gethostname(); + break; + case 'code': + $result = $response ? $response->getStatusCode() : 'NULL'; + break; + case 'phrase': + $result = $response ? $response->getReasonPhrase() : 'NULL'; + break; + case 'error': + $result = $error ? $error->getMessage() : 'NULL'; + break; + default: + // handle prefixed dynamic headers + if (\strpos($matches[1], 'req_header_') === 0) { + $result = $request->getHeaderLine(\substr($matches[1], 11)); + } elseif (\strpos($matches[1], 'res_header_') === 0) { + $result = $response ? $response->getHeaderLine(\substr($matches[1], 11)) : 'NULL'; + } + } + $cache[$matches[1]] = $result; + return $result; + }, $this->template); + } + /** + * Get headers from message as string + */ + private function headers(\YoastSEO_Vendor\Psr\Http\Message\MessageInterface $message) : string + { + $result = ''; + foreach ($message->getHeaders() as $name => $values) { + $result .= $name . ': ' . \implode(', ', $values) . "\r\n"; + } + return \trim($result); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatterInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatterInterface.php new file mode 100644 index 00000000..a5f80887 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatterInterface.php @@ -0,0 +1,17 @@ +withCookieHeader($request); + return $handler($request, $options)->then(static function (\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) use($cookieJar, $request) : ResponseInterface { + $cookieJar->extractCookies($request, $response); + return $response; + }); + }; + }; + } + /** + * Middleware that throws exceptions for 4xx or 5xx responses when the + * "http_errors" request option is set to true. + * + * @param BodySummarizerInterface|null $bodySummarizer The body summarizer to use in exception messages. + * + * @return callable(callable): callable Returns a function that accepts the next handler. + */ + public static function httpErrors(\YoastSEO_Vendor\GuzzleHttp\BodySummarizerInterface $bodySummarizer = null) : callable + { + return static function (callable $handler) use($bodySummarizer) : callable { + return static function ($request, array $options) use($handler, $bodySummarizer) { + if (empty($options['http_errors'])) { + return $handler($request, $options); + } + return $handler($request, $options)->then(static function (\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) use($request, $bodySummarizer) { + $code = $response->getStatusCode(); + if ($code < 400) { + return $response; + } + throw \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException::create($request, $response, null, [], $bodySummarizer); + }); + }; + }; + } + /** + * Middleware that pushes history data to an ArrayAccess container. + * + * @param array|\ArrayAccess $container Container to hold the history (by reference). + * + * @return callable(callable): callable Returns a function that accepts the next handler. + * + * @throws \InvalidArgumentException if container is not an array or ArrayAccess. + */ + public static function history(&$container) : callable + { + if (!\is_array($container) && !$container instanceof \ArrayAccess) { + throw new \InvalidArgumentException('history container must be an array or object implementing ArrayAccess'); + } + return static function (callable $handler) use(&$container) : callable { + return static function (\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) use($handler, &$container) { + return $handler($request, $options)->then(static function ($value) use($request, &$container, $options) { + $container[] = ['request' => $request, 'response' => $value, 'error' => null, 'options' => $options]; + return $value; + }, static function ($reason) use($request, &$container, $options) { + $container[] = ['request' => $request, 'response' => null, 'error' => $reason, 'options' => $options]; + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($reason); + }); + }; + }; + } + /** + * Middleware that invokes a callback before and after sending a request. + * + * The provided listener cannot modify or alter the response. It simply + * "taps" into the chain to be notified before returning the promise. The + * before listener accepts a request and options array, and the after + * listener accepts a request, options array, and response promise. + * + * @param callable $before Function to invoke before forwarding the request. + * @param callable $after Function invoked after forwarding. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function tap(callable $before = null, callable $after = null) : callable + { + return static function (callable $handler) use($before, $after) : callable { + return static function (\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) use($handler, $before, $after) { + if ($before) { + $before($request, $options); + } + $response = $handler($request, $options); + if ($after) { + $after($request, $options, $response); + } + return $response; + }; + }; + } + /** + * Middleware that handles request redirects. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function redirect() : callable + { + return static function (callable $handler) : RedirectMiddleware { + return new \YoastSEO_Vendor\GuzzleHttp\RedirectMiddleware($handler); + }; + } + /** + * Middleware that retries requests based on the boolean result of + * invoking the provided "decider" function. + * + * If no delay function is provided, a simple implementation of exponential + * backoff will be utilized. + * + * @param callable $decider Function that accepts the number of retries, + * a request, [response], and [exception] and + * returns true if the request is to be retried. + * @param callable $delay Function that accepts the number of retries and + * returns the number of milliseconds to delay. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function retry(callable $decider, callable $delay = null) : callable + { + return static function (callable $handler) use($decider, $delay) : RetryMiddleware { + return new \YoastSEO_Vendor\GuzzleHttp\RetryMiddleware($decider, $handler, $delay); + }; + } + /** + * Middleware that logs requests, responses, and errors using a message + * formatter. + * + * @phpstan-param \Psr\Log\LogLevel::* $logLevel Level at which to log requests. + * + * @param LoggerInterface $logger Logs messages. + * @param MessageFormatterInterface|MessageFormatter $formatter Formatter used to create message strings. + * @param string $logLevel Level at which to log requests. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function log(\YoastSEO_Vendor\Psr\Log\LoggerInterface $logger, $formatter, string $logLevel = 'info') : callable + { + // To be compatible with Guzzle 7.1.x we need to allow users to pass a MessageFormatter + if (!$formatter instanceof \YoastSEO_Vendor\GuzzleHttp\MessageFormatter && !$formatter instanceof \YoastSEO_Vendor\GuzzleHttp\MessageFormatterInterface) { + throw new \LogicException(\sprintf('Argument 2 to %s::log() must be of type %s', self::class, \YoastSEO_Vendor\GuzzleHttp\MessageFormatterInterface::class)); + } + return static function (callable $handler) use($logger, $formatter, $logLevel) : callable { + return static function (\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options = []) use($handler, $logger, $formatter, $logLevel) { + return $handler($request, $options)->then(static function ($response) use($logger, $request, $formatter, $logLevel) : ResponseInterface { + $message = $formatter->format($request, $response); + $logger->log($logLevel, $message); + return $response; + }, static function ($reason) use($logger, $request, $formatter) : PromiseInterface { + $response = $reason instanceof \YoastSEO_Vendor\GuzzleHttp\Exception\RequestException ? $reason->getResponse() : null; + $message = $formatter->format($request, $response, \YoastSEO_Vendor\GuzzleHttp\Promise\Create::exceptionFor($reason)); + $logger->error($message); + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($reason); + }); + }; + }; + } + /** + * This middleware adds a default content-type if possible, a default + * content-length or transfer-encoding header, and the expect header. + */ + public static function prepareBody() : callable + { + return static function (callable $handler) : PrepareBodyMiddleware { + return new \YoastSEO_Vendor\GuzzleHttp\PrepareBodyMiddleware($handler); + }; + } + /** + * Middleware that applies a map function to the request before passing to + * the next handler. + * + * @param callable $fn Function that accepts a RequestInterface and returns + * a RequestInterface. + */ + public static function mapRequest(callable $fn) : callable + { + return static function (callable $handler) use($fn) : callable { + return static function (\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) use($handler, $fn) { + return $handler($fn($request), $options); + }; + }; + } + /** + * Middleware that applies a map function to the resolved promise's + * response. + * + * @param callable $fn Function that accepts a ResponseInterface and + * returns a ResponseInterface. + */ + public static function mapResponse(callable $fn) : callable + { + return static function (callable $handler) use($fn) : callable { + return static function (\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) use($handler, $fn) { + return $handler($request, $options)->then($fn); + }; + }; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Pool.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Pool.php new file mode 100644 index 00000000..80bb0dd9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Pool.php @@ -0,0 +1,116 @@ + $rfn) { + if ($rfn instanceof \YoastSEO_Vendor\Psr\Http\Message\RequestInterface) { + (yield $key => $client->sendAsync($rfn, $opts)); + } elseif (\is_callable($rfn)) { + (yield $key => $rfn($opts)); + } else { + throw new \InvalidArgumentException('Each value yielded by the iterator must be a Psr7\\Http\\Message\\RequestInterface or a callable that returns a promise that fulfills with a Psr7\\Message\\Http\\ResponseInterface object.'); + } + } + }; + $this->each = new \YoastSEO_Vendor\GuzzleHttp\Promise\EachPromise($requests(), $config); + } + /** + * Get promise + */ + public function promise() : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->each->promise(); + } + /** + * Sends multiple requests concurrently and returns an array of responses + * and exceptions that uses the same ordering as the provided requests. + * + * IMPORTANT: This method keeps every request and response in memory, and + * as such, is NOT recommended when sending a large number or an + * indeterminate number of requests concurrently. + * + * @param ClientInterface $client Client used to send the requests + * @param array|\Iterator $requests Requests to send concurrently. + * @param array $options Passes through the options available in + * {@see \GuzzleHttp\Pool::__construct} + * + * @return array Returns an array containing the response or an exception + * in the same order that the requests were sent. + * + * @throws \InvalidArgumentException if the event format is incorrect. + */ + public static function batch(\YoastSEO_Vendor\GuzzleHttp\ClientInterface $client, $requests, array $options = []) : array + { + $res = []; + self::cmpCallback($options, 'fulfilled', $res); + self::cmpCallback($options, 'rejected', $res); + $pool = new static($client, $requests, $options); + $pool->promise()->wait(); + \ksort($res); + return $res; + } + /** + * Execute callback(s) + */ + private static function cmpCallback(array &$options, string $name, array &$results) : void + { + if (!isset($options[$name])) { + $options[$name] = static function ($v, $k) use(&$results) { + $results[$k] = $v; + }; + } else { + $currentFn = $options[$name]; + $options[$name] = static function ($v, $k) use(&$results, $currentFn) { + $currentFn($v, $k); + $results[$k] = $v; + }; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php new file mode 100644 index 00000000..53072583 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php @@ -0,0 +1,86 @@ +nextHandler = $nextHandler; + } + public function __invoke(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $fn = $this->nextHandler; + // Don't do anything if the request has no body. + if ($request->getBody()->getSize() === 0) { + return $fn($request, $options); + } + $modify = []; + // Add a default content-type if possible. + if (!$request->hasHeader('Content-Type')) { + if ($uri = $request->getBody()->getMetadata('uri')) { + if (\is_string($uri) && ($type = \YoastSEO_Vendor\GuzzleHttp\Psr7\MimeType::fromFilename($uri))) { + $modify['set_headers']['Content-Type'] = $type; + } + } + } + // Add a default content-length or transfer-encoding header. + if (!$request->hasHeader('Content-Length') && !$request->hasHeader('Transfer-Encoding')) { + $size = $request->getBody()->getSize(); + if ($size !== null) { + $modify['set_headers']['Content-Length'] = $size; + } else { + $modify['set_headers']['Transfer-Encoding'] = 'chunked'; + } + } + // Add the expect header if needed. + $this->addExpectHeader($request, $options, $modify); + return $fn(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::modifyRequest($request, $modify), $options); + } + /** + * Add expect header + */ + private function addExpectHeader(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options, array &$modify) : void + { + // Determine if the Expect header should be used + if ($request->hasHeader('Expect')) { + return; + } + $expect = $options['expect'] ?? null; + // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0 + if ($expect === \false || $request->getProtocolVersion() < 1.1) { + return; + } + // The expect header is unconditionally enabled + if ($expect === \true) { + $modify['set_headers']['Expect'] = '100-Continue'; + return; + } + // By default, send the expect header when the payload is > 1mb + if ($expect === null) { + $expect = 1048576; + } + // Always add if the body cannot be rewound, the size cannot be + // determined, or the size is greater than the cutoff threshold + $body = $request->getBody(); + $size = $body->getSize(); + if ($size === null || $size >= (int) $expect || !$body->isSeekable()) { + $modify['set_headers']['Expect'] = '100-Continue'; + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RedirectMiddleware.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RedirectMiddleware.php new file mode 100644 index 00000000..fa5be3c7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -0,0 +1,162 @@ + 5, 'protocols' => ['http', 'https'], 'strict' => \false, 'referer' => \false, 'track_redirects' => \false]; + /** + * @var callable(RequestInterface, array): PromiseInterface + */ + private $nextHandler; + /** + * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke. + */ + public function __construct(callable $nextHandler) + { + $this->nextHandler = $nextHandler; + } + public function __invoke(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $fn = $this->nextHandler; + if (empty($options['allow_redirects'])) { + return $fn($request, $options); + } + if ($options['allow_redirects'] === \true) { + $options['allow_redirects'] = self::$defaultSettings; + } elseif (!\is_array($options['allow_redirects'])) { + throw new \InvalidArgumentException('allow_redirects must be true, false, or array'); + } else { + // Merge the default settings with the provided settings + $options['allow_redirects'] += self::$defaultSettings; + } + if (empty($options['allow_redirects']['max'])) { + return $fn($request, $options); + } + return $fn($request, $options)->then(function (\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) use($request, $options) { + return $this->checkRedirect($request, $options, $response); + }); + } + /** + * @return ResponseInterface|PromiseInterface + */ + public function checkRedirect(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) + { + if (\strpos((string) $response->getStatusCode(), '3') !== 0 || !$response->hasHeader('Location')) { + return $response; + } + $this->guardMax($request, $response, $options); + $nextRequest = $this->modifyRequest($request, $options, $response); + // If authorization is handled by curl, unset it if URI is cross-origin. + if (\YoastSEO_Vendor\GuzzleHttp\Psr7\UriComparator::isCrossOrigin($request->getUri(), $nextRequest->getUri()) && \defined('\\CURLOPT_HTTPAUTH')) { + unset($options['curl'][\CURLOPT_HTTPAUTH], $options['curl'][\CURLOPT_USERPWD]); + } + if (isset($options['allow_redirects']['on_redirect'])) { + $options['allow_redirects']['on_redirect']($request, $response, $nextRequest->getUri()); + } + $promise = $this($nextRequest, $options); + // Add headers to be able to track history of redirects. + if (!empty($options['allow_redirects']['track_redirects'])) { + return $this->withTracking($promise, (string) $nextRequest->getUri(), $response->getStatusCode()); + } + return $promise; + } + /** + * Enable tracking on promise. + */ + private function withTracking(\YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface $promise, string $uri, int $statusCode) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $promise->then(static function (\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) use($uri, $statusCode) { + // Note that we are pushing to the front of the list as this + // would be an earlier response than what is currently present + // in the history header. + $historyHeader = $response->getHeader(self::HISTORY_HEADER); + $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER); + \array_unshift($historyHeader, $uri); + \array_unshift($statusHeader, (string) $statusCode); + return $response->withHeader(self::HISTORY_HEADER, $historyHeader)->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader); + }); + } + /** + * Check for too many redirects. + * + * @throws TooManyRedirectsException Too many redirects. + */ + private function guardMax(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response, array &$options) : void + { + $current = $options['__redirect_count'] ?? 0; + $options['__redirect_count'] = $current + 1; + $max = $options['allow_redirects']['max']; + if ($options['__redirect_count'] > $max) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\TooManyRedirectsException("Will not follow more than {$max} redirects", $request, $response); + } + } + public function modifyRequest(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + // Request modifications to apply. + $modify = []; + $protocols = $options['allow_redirects']['protocols']; + // Use a GET request if this is an entity enclosing request and we are + // not forcing RFC compliance, but rather emulating what all browsers + // would do. + $statusCode = $response->getStatusCode(); + if ($statusCode == 303 || $statusCode <= 302 && !$options['allow_redirects']['strict']) { + $safeMethods = ['GET', 'HEAD', 'OPTIONS']; + $requestMethod = $request->getMethod(); + $modify['method'] = \in_array($requestMethod, $safeMethods) ? $requestMethod : 'GET'; + $modify['body'] = ''; + } + $uri = self::redirectUri($request, $response, $protocols); + if (isset($options['idn_conversion']) && $options['idn_conversion'] !== \false) { + $idnOptions = $options['idn_conversion'] === \true ? \IDNA_DEFAULT : $options['idn_conversion']; + $uri = \YoastSEO_Vendor\GuzzleHttp\Utils::idnUriConvert($uri, $idnOptions); + } + $modify['uri'] = $uri; + \YoastSEO_Vendor\GuzzleHttp\Psr7\Message::rewindBody($request); + // Add the Referer header if it is told to do so and only + // add the header if we are not redirecting from https to http. + if ($options['allow_redirects']['referer'] && $modify['uri']->getScheme() === $request->getUri()->getScheme()) { + $uri = $request->getUri()->withUserInfo(''); + $modify['set_headers']['Referer'] = (string) $uri; + } else { + $modify['remove_headers'][] = 'Referer'; + } + // Remove Authorization and Cookie headers if URI is cross-origin. + if (\YoastSEO_Vendor\GuzzleHttp\Psr7\UriComparator::isCrossOrigin($request->getUri(), $modify['uri'])) { + $modify['remove_headers'][] = 'Authorization'; + $modify['remove_headers'][] = 'Cookie'; + } + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::modifyRequest($request, $modify); + } + /** + * Set the appropriate URL on the request based on the location header. + */ + private static function redirectUri(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response, array $protocols) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $location = \YoastSEO_Vendor\GuzzleHttp\Psr7\UriResolver::resolve($request->getUri(), new \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri($response->getHeaderLine('Location'))); + // Ensure that the redirect URI is allowed based on the protocols. + if (!\in_array($location->getScheme(), $protocols)) { + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\BadResponseException(\sprintf('Redirect URI, %s, does not use one of the allowed redirect protocols: %s', $location, \implode(', ', $protocols)), $request, $response); + } + return $location; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RequestOptions.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RequestOptions.php new file mode 100644 index 00000000..5bfce443 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/RequestOptions.php @@ -0,0 +1,244 @@ +decider = $decider; + $this->nextHandler = $nextHandler; + $this->delay = $delay ?: __CLASS__ . '::exponentialDelay'; + } + /** + * Default exponential backoff delay function. + * + * @return int milliseconds. + */ + public static function exponentialDelay(int $retries) : int + { + return (int) 2 ** ($retries - 1) * 1000; + } + public function __invoke(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + if (!isset($options['retries'])) { + $options['retries'] = 0; + } + $fn = $this->nextHandler; + return $fn($request, $options)->then($this->onFulfilled($request, $options), $this->onRejected($request, $options)); + } + /** + * Execute fulfilled closure + */ + private function onFulfilled(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) : callable + { + return function ($value) use($request, $options) { + if (!($this->decider)($options['retries'], $request, $value, null)) { + return $value; + } + return $this->doRetry($request, $options, $value); + }; + } + /** + * Execute rejected closure + */ + private function onRejected(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $req, array $options) : callable + { + return function ($reason) use($req, $options) { + if (!($this->decider)($options['retries'], $req, null, $reason)) { + return \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($reason); + } + return $this->doRetry($req, $options); + }; + } + private function doRetry(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $options['delay'] = ($this->delay)(++$options['retries'], $response, $request); + return $this($request, $options); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/TransferStats.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/TransferStats.php new file mode 100644 index 00000000..f293e07a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/TransferStats.php @@ -0,0 +1,114 @@ +request = $request; + $this->response = $response; + $this->transferTime = $transferTime; + $this->handlerErrorData = $handlerErrorData; + $this->handlerStats = $handlerStats; + } + public function getRequest() : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + return $this->request; + } + /** + * Returns the response that was received (if any). + */ + public function getResponse() : ?\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return $this->response; + } + /** + * Returns true if a response was received. + */ + public function hasResponse() : bool + { + return $this->response !== null; + } + /** + * Gets handler specific error data. + * + * This might be an exception, a integer representing an error code, or + * anything else. Relying on this value assumes that you know what handler + * you are using. + * + * @return mixed + */ + public function getHandlerErrorData() + { + return $this->handlerErrorData; + } + /** + * Get the effective URI the request was sent to. + */ + public function getEffectiveUri() : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + return $this->request->getUri(); + } + /** + * Get the estimated time the request was being transferred by the handler. + * + * @return float|null Time in seconds. + */ + public function getTransferTime() : ?float + { + return $this->transferTime; + } + /** + * Gets an array of all of the handler specific transfer data. + */ + public function getHandlerStats() : array + { + return $this->handlerStats; + } + /** + * Get a specific handler statistic from the handler by name. + * + * @param string $stat Handler specific transfer stat to retrieve. + * + * @return mixed|null + */ + public function getHandlerStat(string $stat) + { + return $this->handlerStats[$stat] ?? null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Utils.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Utils.php new file mode 100644 index 00000000..4fea75c0 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Utils.php @@ -0,0 +1,339 @@ +getHost()) { + $asciiHost = self::idnToAsci($uri->getHost(), $options, $info); + if ($asciiHost === \false) { + $errorBitSet = $info['errors'] ?? 0; + $errorConstants = \array_filter(\array_keys(\get_defined_constants()), static function (string $name) : bool { + return \substr($name, 0, 11) === 'IDNA_ERROR_'; + }); + $errors = []; + foreach ($errorConstants as $errorConstant) { + if ($errorBitSet & \constant($errorConstant)) { + $errors[] = $errorConstant; + } + } + $errorMessage = 'IDN conversion failed'; + if ($errors) { + $errorMessage .= ' (errors: ' . \implode(', ', $errors) . ')'; + } + throw new \YoastSEO_Vendor\GuzzleHttp\Exception\InvalidArgumentException($errorMessage); + } + if ($uri->getHost() !== $asciiHost) { + // Replace URI only if the ASCII version is different + $uri = $uri->withHost($asciiHost); + } + } + return $uri; + } + /** + * @internal + */ + public static function getenv(string $name) : ?string + { + if (isset($_SERVER[$name])) { + return (string) $_SERVER[$name]; + } + if (\PHP_SAPI === 'cli' && ($value = \getenv($name)) !== \false && $value !== null) { + return (string) $value; + } + return null; + } + /** + * @return string|false + */ + private static function idnToAsci(string $domain, int $options, ?array &$info = []) + { + if (\function_exists('idn_to_ascii') && \defined('INTL_IDNA_VARIANT_UTS46')) { + return \idn_to_ascii($domain, $options, \INTL_IDNA_VARIANT_UTS46, $info); + } + throw new \Error('ext-idn or symfony/polyfill-intl-idn not loaded or too old'); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/functions.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/functions.php new file mode 100644 index 00000000..42c83bf9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/functions.php @@ -0,0 +1,158 @@ +then(function ($v) { echo $v; }); + * + * @param callable $generatorFn Generator function to wrap into a promise. + * + * @return Promise + * + * @see https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration + */ +final class Coroutine implements \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface +{ + /** + * @var PromiseInterface|null + */ + private $currentPromise; + /** + * @var Generator + */ + private $generator; + /** + * @var Promise + */ + private $result; + public function __construct(callable $generatorFn) + { + $this->generator = $generatorFn(); + $this->result = new \YoastSEO_Vendor\GuzzleHttp\Promise\Promise(function () : void { + while (isset($this->currentPromise)) { + $this->currentPromise->wait(); + } + }); + try { + $this->nextCoroutine($this->generator->current()); + } catch (\Throwable $throwable) { + $this->result->reject($throwable); + } + } + /** + * Create a new coroutine. + */ + public static function of(callable $generatorFn) : self + { + return new self($generatorFn); + } + public function then(callable $onFulfilled = null, callable $onRejected = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->result->then($onFulfilled, $onRejected); + } + public function otherwise(callable $onRejected) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->result->otherwise($onRejected); + } + public function wait(bool $unwrap = \true) + { + return $this->result->wait($unwrap); + } + public function getState() : string + { + return $this->result->getState(); + } + public function resolve($value) : void + { + $this->result->resolve($value); + } + public function reject($reason) : void + { + $this->result->reject($reason); + } + public function cancel() : void + { + $this->currentPromise->cancel(); + $this->result->cancel(); + } + private function nextCoroutine($yielded) : void + { + $this->currentPromise = \YoastSEO_Vendor\GuzzleHttp\Promise\Create::promiseFor($yielded)->then([$this, '_handleSuccess'], [$this, '_handleFailure']); + } + /** + * @internal + */ + public function _handleSuccess($value) : void + { + unset($this->currentPromise); + try { + $next = $this->generator->send($value); + if ($this->generator->valid()) { + $this->nextCoroutine($next); + } else { + $this->result->resolve($value); + } + } catch (\Throwable $throwable) { + $this->result->reject($throwable); + } + } + /** + * @internal + */ + public function _handleFailure($reason) : void + { + unset($this->currentPromise); + try { + $nextYield = $this->generator->throw(\YoastSEO_Vendor\GuzzleHttp\Promise\Create::exceptionFor($reason)); + // The throw was caught, so keep iterating on the coroutine + $this->nextCoroutine($nextYield); + } catch (\Throwable $throwable) { + $this->result->reject($throwable); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Create.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Create.php new file mode 100644 index 00000000..85726b60 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Create.php @@ -0,0 +1,68 @@ +then([$promise, 'resolve'], [$promise, 'reject']); + return $promise; + } + return new \YoastSEO_Vendor\GuzzleHttp\Promise\FulfilledPromise($value); + } + /** + * Creates a rejected promise for a reason if the reason is not a promise. + * If the provided reason is a promise, then it is returned as-is. + * + * @param mixed $reason Promise or reason. + */ + public static function rejectionFor($reason) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + if ($reason instanceof \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface) { + return $reason; + } + return new \YoastSEO_Vendor\GuzzleHttp\Promise\RejectedPromise($reason); + } + /** + * Create an exception for a rejected promise value. + * + * @param mixed $reason + */ + public static function exceptionFor($reason) : \Throwable + { + if ($reason instanceof \Throwable) { + return $reason; + } + return new \YoastSEO_Vendor\GuzzleHttp\Promise\RejectionException($reason); + } + /** + * Returns an iterator for the given value. + * + * @param mixed $value + */ + public static function iterFor($value) : \Iterator + { + if ($value instanceof \Iterator) { + return $value; + } + if (\is_array($value)) { + return new \ArrayIterator($value); + } + return new \ArrayIterator([$value]); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Each.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Each.php new file mode 100644 index 00000000..529fdf1e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Each.php @@ -0,0 +1,56 @@ + $onFulfilled, 'rejected' => $onRejected]))->promise(); + } + /** + * Like of, but only allows a certain number of outstanding promises at any + * given time. + * + * $concurrency may be an integer or a function that accepts the number of + * pending promises and returns a numeric concurrency limit value to allow + * for dynamic a concurrency size. + * + * @param mixed $iterable + * @param int|callable $concurrency + */ + public static function ofLimit($iterable, $concurrency, callable $onFulfilled = null, callable $onRejected = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return (new \YoastSEO_Vendor\GuzzleHttp\Promise\EachPromise($iterable, ['fulfilled' => $onFulfilled, 'rejected' => $onRejected, 'concurrency' => $concurrency]))->promise(); + } + /** + * Like limit, but ensures that no promise in the given $iterable argument + * is rejected. If any promise is rejected, then the aggregate promise is + * rejected with the encountered rejection. + * + * @param mixed $iterable + * @param int|callable $concurrency + */ + public static function ofLimitAll($iterable, $concurrency, callable $onFulfilled = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return self::ofLimit($iterable, $concurrency, $onFulfilled, function ($reason, $idx, \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface $aggregate) : void { + $aggregate->reject($reason); + }); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/EachPromise.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/EachPromise.php new file mode 100644 index 00000000..d4e3e924 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/EachPromise.php @@ -0,0 +1,196 @@ +iterable = \YoastSEO_Vendor\GuzzleHttp\Promise\Create::iterFor($iterable); + if (isset($config['concurrency'])) { + $this->concurrency = $config['concurrency']; + } + if (isset($config['fulfilled'])) { + $this->onFulfilled = $config['fulfilled']; + } + if (isset($config['rejected'])) { + $this->onRejected = $config['rejected']; + } + } + /** @psalm-suppress InvalidNullableReturnType */ + public function promise() : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + if ($this->aggregate) { + return $this->aggregate; + } + try { + $this->createPromise(); + /** @psalm-assert Promise $this->aggregate */ + $this->iterable->rewind(); + $this->refillPending(); + } catch (\Throwable $e) { + $this->aggregate->reject($e); + } + /** + * @psalm-suppress NullableReturnStatement + */ + return $this->aggregate; + } + private function createPromise() : void + { + $this->mutex = \false; + $this->aggregate = new \YoastSEO_Vendor\GuzzleHttp\Promise\Promise(function () : void { + if ($this->checkIfFinished()) { + return; + } + \reset($this->pending); + // Consume a potentially fluctuating list of promises while + // ensuring that indexes are maintained (precluding array_shift). + while ($promise = \current($this->pending)) { + \next($this->pending); + $promise->wait(); + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::settled($this->aggregate)) { + return; + } + } + }); + // Clear the references when the promise is resolved. + $clearFn = function () : void { + $this->iterable = $this->concurrency = $this->pending = null; + $this->onFulfilled = $this->onRejected = null; + $this->nextPendingIndex = 0; + }; + $this->aggregate->then($clearFn, $clearFn); + } + private function refillPending() : void + { + if (!$this->concurrency) { + // Add all pending promises. + while ($this->addPending() && $this->advanceIterator()) { + } + return; + } + // Add only up to N pending promises. + $concurrency = \is_callable($this->concurrency) ? ($this->concurrency)(\count($this->pending)) : $this->concurrency; + $concurrency = \max($concurrency - \count($this->pending), 0); + // Concurrency may be set to 0 to disallow new promises. + if (!$concurrency) { + return; + } + // Add the first pending promise. + $this->addPending(); + // Note this is special handling for concurrency=1 so that we do + // not advance the iterator after adding the first promise. This + // helps work around issues with generators that might not have the + // next value to yield until promise callbacks are called. + while (--$concurrency && $this->advanceIterator() && $this->addPending()) { + } + } + private function addPending() : bool + { + if (!$this->iterable || !$this->iterable->valid()) { + return \false; + } + $promise = \YoastSEO_Vendor\GuzzleHttp\Promise\Create::promiseFor($this->iterable->current()); + $key = $this->iterable->key(); + // Iterable keys may not be unique, so we use a counter to + // guarantee uniqueness + $idx = $this->nextPendingIndex++; + $this->pending[$idx] = $promise->then(function ($value) use($idx, $key) : void { + if ($this->onFulfilled) { + ($this->onFulfilled)($value, $key, $this->aggregate); + } + $this->step($idx); + }, function ($reason) use($idx, $key) : void { + if ($this->onRejected) { + ($this->onRejected)($reason, $key, $this->aggregate); + } + $this->step($idx); + }); + return \true; + } + private function advanceIterator() : bool + { + // Place a lock on the iterator so that we ensure to not recurse, + // preventing fatal generator errors. + if ($this->mutex) { + return \false; + } + $this->mutex = \true; + try { + $this->iterable->next(); + $this->mutex = \false; + return \true; + } catch (\Throwable $e) { + $this->aggregate->reject($e); + $this->mutex = \false; + return \false; + } + } + private function step(int $idx) : void + { + // If the promise was already resolved, then ignore this step. + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::settled($this->aggregate)) { + return; + } + unset($this->pending[$idx]); + // Only refill pending promises if we are not locked, preventing the + // EachPromise to recursively invoke the provided iterator, which + // cause a fatal error: "Cannot resume an already running generator" + if ($this->advanceIterator() && !$this->checkIfFinished()) { + // Add more pending promises if possible. + $this->refillPending(); + } + } + private function checkIfFinished() : bool + { + if (!$this->pending && !$this->iterable->valid()) { + // Resolve the promise if there's nothing left to do. + $this->aggregate->resolve(null); + return \true; + } + return \false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/FulfilledPromise.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/FulfilledPromise.php new file mode 100644 index 00000000..373354d1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/FulfilledPromise.php @@ -0,0 +1,73 @@ +value = $value; + } + public function then(callable $onFulfilled = null, callable $onRejected = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + // Return itself if there is no onFulfilled function. + if (!$onFulfilled) { + return $this; + } + $queue = \YoastSEO_Vendor\GuzzleHttp\Promise\Utils::queue(); + $p = new \YoastSEO_Vendor\GuzzleHttp\Promise\Promise([$queue, 'run']); + $value = $this->value; + $queue->add(static function () use($p, $value, $onFulfilled) : void { + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::pending($p)) { + try { + $p->resolve($onFulfilled($value)); + } catch (\Throwable $e) { + $p->reject($e); + } + } + }); + return $p; + } + public function otherwise(callable $onRejected) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->then(null, $onRejected); + } + public function wait(bool $unwrap = \true) + { + return $unwrap ? $this->value : null; + } + public function getState() : string + { + return self::FULFILLED; + } + public function resolve($value) : void + { + if ($value !== $this->value) { + throw new \LogicException('Cannot resolve a fulfilled promise'); + } + } + public function reject($reason) : void + { + throw new \LogicException('Cannot reject a fulfilled promise'); + } + public function cancel() : void + { + // pass + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Is.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Is.php new file mode 100644 index 00000000..db08b194 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Is.php @@ -0,0 +1,36 @@ +getState() === \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::PENDING; + } + /** + * Returns true if a promise is fulfilled or rejected. + */ + public static function settled(\YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface $promise) : bool + { + return $promise->getState() !== \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::PENDING; + } + /** + * Returns true if a promise is fulfilled. + */ + public static function fulfilled(\YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface $promise) : bool + { + return $promise->getState() === \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::FULFILLED; + } + /** + * Returns true if a promise is rejected. + */ + public static function rejected(\YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface $promise) : bool + { + return $promise->getState() === \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::REJECTED; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Promise.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Promise.php new file mode 100644 index 00000000..44e0ae5c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/Promise.php @@ -0,0 +1,236 @@ +waitFn = $waitFn; + $this->cancelFn = $cancelFn; + } + public function then(callable $onFulfilled = null, callable $onRejected = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + if ($this->state === self::PENDING) { + $p = new \YoastSEO_Vendor\GuzzleHttp\Promise\Promise(null, [$this, 'cancel']); + $this->handlers[] = [$p, $onFulfilled, $onRejected]; + $p->waitList = $this->waitList; + $p->waitList[] = $this; + return $p; + } + // Return a fulfilled promise and immediately invoke any callbacks. + if ($this->state === self::FULFILLED) { + $promise = \YoastSEO_Vendor\GuzzleHttp\Promise\Create::promiseFor($this->result); + return $onFulfilled ? $promise->then($onFulfilled) : $promise; + } + // It's either cancelled or rejected, so return a rejected promise + // and immediately invoke any callbacks. + $rejection = \YoastSEO_Vendor\GuzzleHttp\Promise\Create::rejectionFor($this->result); + return $onRejected ? $rejection->then(null, $onRejected) : $rejection; + } + public function otherwise(callable $onRejected) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->then(null, $onRejected); + } + public function wait(bool $unwrap = \true) + { + $this->waitIfPending(); + if ($this->result instanceof \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface) { + return $this->result->wait($unwrap); + } + if ($unwrap) { + if ($this->state === self::FULFILLED) { + return $this->result; + } + // It's rejected so "unwrap" and throw an exception. + throw \YoastSEO_Vendor\GuzzleHttp\Promise\Create::exceptionFor($this->result); + } + } + public function getState() : string + { + return $this->state; + } + public function cancel() : void + { + if ($this->state !== self::PENDING) { + return; + } + $this->waitFn = $this->waitList = null; + if ($this->cancelFn) { + $fn = $this->cancelFn; + $this->cancelFn = null; + try { + $fn(); + } catch (\Throwable $e) { + $this->reject($e); + } + } + // Reject the promise only if it wasn't rejected in a then callback. + /** @psalm-suppress RedundantCondition */ + if ($this->state === self::PENDING) { + $this->reject(new \YoastSEO_Vendor\GuzzleHttp\Promise\CancellationException('Promise has been cancelled')); + } + } + public function resolve($value) : void + { + $this->settle(self::FULFILLED, $value); + } + public function reject($reason) : void + { + $this->settle(self::REJECTED, $reason); + } + private function settle(string $state, $value) : void + { + if ($this->state !== self::PENDING) { + // Ignore calls with the same resolution. + if ($state === $this->state && $value === $this->result) { + return; + } + throw $this->state === $state ? new \LogicException("The promise is already {$state}.") : new \LogicException("Cannot change a {$this->state} promise to {$state}"); + } + if ($value === $this) { + throw new \LogicException('Cannot fulfill or reject a promise with itself'); + } + // Clear out the state of the promise but stash the handlers. + $this->state = $state; + $this->result = $value; + $handlers = $this->handlers; + $this->handlers = null; + $this->waitList = $this->waitFn = null; + $this->cancelFn = null; + if (!$handlers) { + return; + } + // If the value was not a settled promise or a thenable, then resolve + // it in the task queue using the correct ID. + if (!\is_object($value) || !\method_exists($value, 'then')) { + $id = $state === self::FULFILLED ? 1 : 2; + // It's a success, so resolve the handlers in the queue. + \YoastSEO_Vendor\GuzzleHttp\Promise\Utils::queue()->add(static function () use($id, $value, $handlers) : void { + foreach ($handlers as $handler) { + self::callHandler($id, $value, $handler); + } + }); + } elseif ($value instanceof \YoastSEO_Vendor\GuzzleHttp\Promise\Promise && \YoastSEO_Vendor\GuzzleHttp\Promise\Is::pending($value)) { + // We can just merge our handlers onto the next promise. + $value->handlers = \array_merge($value->handlers, $handlers); + } else { + // Resolve the handlers when the forwarded promise is resolved. + $value->then(static function ($value) use($handlers) : void { + foreach ($handlers as $handler) { + self::callHandler(1, $value, $handler); + } + }, static function ($reason) use($handlers) : void { + foreach ($handlers as $handler) { + self::callHandler(2, $reason, $handler); + } + }); + } + } + /** + * Call a stack of handlers using a specific callback index and value. + * + * @param int $index 1 (resolve) or 2 (reject). + * @param mixed $value Value to pass to the callback. + * @param array $handler Array of handler data (promise and callbacks). + */ + private static function callHandler(int $index, $value, array $handler) : void + { + /** @var PromiseInterface $promise */ + $promise = $handler[0]; + // The promise may have been cancelled or resolved before placing + // this thunk in the queue. + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::settled($promise)) { + return; + } + try { + if (isset($handler[$index])) { + /* + * If $f throws an exception, then $handler will be in the exception + * stack trace. Since $handler contains a reference to the callable + * itself we get a circular reference. We clear the $handler + * here to avoid that memory leak. + */ + $f = $handler[$index]; + unset($handler); + $promise->resolve($f($value)); + } elseif ($index === 1) { + // Forward resolution values as-is. + $promise->resolve($value); + } else { + // Forward rejections down the chain. + $promise->reject($value); + } + } catch (\Throwable $reason) { + $promise->reject($reason); + } + } + private function waitIfPending() : void + { + if ($this->state !== self::PENDING) { + return; + } elseif ($this->waitFn) { + $this->invokeWaitFn(); + } elseif ($this->waitList) { + $this->invokeWaitList(); + } else { + // If there's no wait function, then reject the promise. + $this->reject('Cannot wait on a promise that has ' . 'no internal wait function. You must provide a wait ' . 'function when constructing the promise to be able to ' . 'wait on a promise.'); + } + \YoastSEO_Vendor\GuzzleHttp\Promise\Utils::queue()->run(); + /** @psalm-suppress RedundantCondition */ + if ($this->state === self::PENDING) { + $this->reject('Invoking the wait callback did not resolve the promise'); + } + } + private function invokeWaitFn() : void + { + try { + $wfn = $this->waitFn; + $this->waitFn = null; + $wfn(\true); + } catch (\Throwable $reason) { + if ($this->state === self::PENDING) { + // The promise has not been resolved yet, so reject the promise + // with the exception. + $this->reject($reason); + } else { + // The promise was already resolved, so there's a problem in + // the application. + throw $reason; + } + } + } + private function invokeWaitList() : void + { + $waitList = $this->waitList; + $this->waitList = null; + foreach ($waitList as $result) { + do { + $result->waitIfPending(); + $result = $result->result; + } while ($result instanceof \YoastSEO_Vendor\GuzzleHttp\Promise\Promise); + if ($result instanceof \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface) { + $result->wait(\false); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/PromiseInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/PromiseInterface.php new file mode 100644 index 00000000..35d2c3ff --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/PromiseInterface.php @@ -0,0 +1,80 @@ +reason = $reason; + } + public function then(callable $onFulfilled = null, callable $onRejected = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + // If there's no onRejected callback then just return self. + if (!$onRejected) { + return $this; + } + $queue = \YoastSEO_Vendor\GuzzleHttp\Promise\Utils::queue(); + $reason = $this->reason; + $p = new \YoastSEO_Vendor\GuzzleHttp\Promise\Promise([$queue, 'run']); + $queue->add(static function () use($p, $reason, $onRejected) : void { + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::pending($p)) { + try { + // Return a resolved promise if onRejected does not throw. + $p->resolve($onRejected($reason)); + } catch (\Throwable $e) { + // onRejected threw, so return a rejected promise. + $p->reject($e); + } + } + }); + return $p; + } + public function otherwise(callable $onRejected) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return $this->then(null, $onRejected); + } + public function wait(bool $unwrap = \true) + { + if ($unwrap) { + throw \YoastSEO_Vendor\GuzzleHttp\Promise\Create::exceptionFor($this->reason); + } + return null; + } + public function getState() : string + { + return self::REJECTED; + } + public function resolve($value) : void + { + throw new \LogicException('Cannot resolve a rejected promise'); + } + public function reject($reason) : void + { + if ($reason !== $this->reason) { + throw new \LogicException('Cannot reject a rejected promise'); + } + } + public function cancel() : void + { + // pass + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/RejectionException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/RejectionException.php new file mode 100644 index 00000000..c0382d15 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/RejectionException.php @@ -0,0 +1,41 @@ +reason = $reason; + $message = 'The promise was rejected'; + if ($description) { + $message .= ' with reason: ' . $description; + } elseif (\is_string($reason) || \is_object($reason) && \method_exists($reason, '__toString')) { + $message .= ' with reason: ' . $this->reason; + } elseif ($reason instanceof \JsonSerializable) { + $message .= ' with reason: ' . \json_encode($this->reason, \JSON_PRETTY_PRINT); + } + parent::__construct($message); + } + /** + * Returns the rejection reason. + * + * @return mixed + */ + public function getReason() + { + return $this->reason; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueue.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueue.php new file mode 100644 index 00000000..781e7c88 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueue.php @@ -0,0 +1,65 @@ +run(); + * + * @final + */ +class TaskQueue implements \YoastSEO_Vendor\GuzzleHttp\Promise\TaskQueueInterface +{ + private $enableShutdown = \true; + private $queue = []; + public function __construct(bool $withShutdown = \true) + { + if ($withShutdown) { + \register_shutdown_function(function () : void { + if ($this->enableShutdown) { + // Only run the tasks if an E_ERROR didn't occur. + $err = \error_get_last(); + if (!$err || $err['type'] ^ \E_ERROR) { + $this->run(); + } + } + }); + } + } + public function isEmpty() : bool + { + return !$this->queue; + } + public function add(callable $task) : void + { + $this->queue[] = $task; + } + public function run() : void + { + while ($task = \array_shift($this->queue)) { + /** @var callable $task */ + $task(); + } + } + /** + * The task queue will be run and exhausted by default when the process + * exits IFF the exit is not the result of a PHP E_ERROR error. + * + * You can disable running the automatic shutdown of the queue by calling + * this function. If you disable the task queue shutdown process, then you + * MUST either run the task queue (as a result of running your event loop + * or manually using the run() method) or wait on each outstanding promise. + * + * Note: This shutdown will occur before any destructors are triggered. + */ + public function disableShutdown() : void + { + $this->enableShutdown = \false; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueueInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueueInterface.php new file mode 100644 index 00000000..fb640be2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/promises/src/TaskQueueInterface.php @@ -0,0 +1,21 @@ + + * while ($eventLoop->isRunning()) { + * GuzzleHttp\Promise\Utils::queue()->run(); + * } + *
            + * + * @param TaskQueueInterface|null $assign Optionally specify a new queue instance. + */ + public static function queue(\YoastSEO_Vendor\GuzzleHttp\Promise\TaskQueueInterface $assign = null) : \YoastSEO_Vendor\GuzzleHttp\Promise\TaskQueueInterface + { + static $queue; + if ($assign) { + $queue = $assign; + } elseif (!$queue) { + $queue = new \YoastSEO_Vendor\GuzzleHttp\Promise\TaskQueue(); + } + return $queue; + } + /** + * Adds a function to run in the task queue when it is next `run()` and + * returns a promise that is fulfilled or rejected with the result. + * + * @param callable $task Task function to run. + */ + public static function task(callable $task) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $queue = self::queue(); + $promise = new \YoastSEO_Vendor\GuzzleHttp\Promise\Promise([$queue, 'run']); + $queue->add(function () use($task, $promise) : void { + try { + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::pending($promise)) { + $promise->resolve($task()); + } + } catch (\Throwable $e) { + $promise->reject($e); + } + }); + return $promise; + } + /** + * Synchronously waits on a promise to resolve and returns an inspection + * state array. + * + * Returns a state associative array containing a "state" key mapping to a + * valid promise state. If the state of the promise is "fulfilled", the + * array will contain a "value" key mapping to the fulfilled value of the + * promise. If the promise is rejected, the array will contain a "reason" + * key mapping to the rejection reason of the promise. + * + * @param PromiseInterface $promise Promise or value. + */ + public static function inspect(\YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface $promise) : array + { + try { + return ['state' => \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::FULFILLED, 'value' => $promise->wait()]; + } catch (\YoastSEO_Vendor\GuzzleHttp\Promise\RejectionException $e) { + return ['state' => \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::REJECTED, 'reason' => $e->getReason()]; + } catch (\Throwable $e) { + return ['state' => \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::REJECTED, 'reason' => $e]; + } + } + /** + * Waits on all of the provided promises, but does not unwrap rejected + * promises as thrown exception. + * + * Returns an array of inspection state arrays. + * + * @see inspect for the inspection state array format. + * + * @param PromiseInterface[] $promises Traversable of promises to wait upon. + */ + public static function inspectAll($promises) : array + { + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = self::inspect($promise); + } + return $results; + } + /** + * Waits on all of the provided promises and returns the fulfilled values. + * + * Returns an array that contains the value of each promise (in the same + * order the promises were provided). An exception is thrown if any of the + * promises are rejected. + * + * @param iterable $promises Iterable of PromiseInterface objects to wait on. + * + * @throws \Throwable on error + */ + public static function unwrap($promises) : array + { + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = $promise->wait(); + } + return $results; + } + /** + * Given an array of promises, return a promise that is fulfilled when all + * the items in the array are fulfilled. + * + * The promise's fulfillment value is an array with fulfillment values at + * respective positions to the original array. If any promise in the array + * rejects, the returned promise is rejected with the rejection reason. + * + * @param mixed $promises Promises or values. + * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. + */ + public static function all($promises, bool $recursive = \false) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $results = []; + $promise = \YoastSEO_Vendor\GuzzleHttp\Promise\Each::of($promises, function ($value, $idx) use(&$results) : void { + $results[$idx] = $value; + }, function ($reason, $idx, \YoastSEO_Vendor\GuzzleHttp\Promise\Promise $aggregate) : void { + $aggregate->reject($reason); + })->then(function () use(&$results) { + \ksort($results); + return $results; + }); + if (\true === $recursive) { + $promise = $promise->then(function ($results) use($recursive, &$promises) { + foreach ($promises as $promise) { + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::pending($promise)) { + return self::all($promises, $recursive); + } + } + return $results; + }); + } + return $promise; + } + /** + * Initiate a competitive race between multiple promises or values (values + * will become immediately fulfilled promises). + * + * When count amount of promises have been fulfilled, the returned promise + * is fulfilled with an array that contains the fulfillment values of the + * winners in order of resolution. + * + * This promise is rejected with a {@see AggregateException} if the number + * of fulfilled promises is less than the desired $count. + * + * @param int $count Total number of promises. + * @param mixed $promises Promises or values. + */ + public static function some(int $count, $promises) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $results = []; + $rejections = []; + return \YoastSEO_Vendor\GuzzleHttp\Promise\Each::of($promises, function ($value, $idx, \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface $p) use(&$results, $count) : void { + if (\YoastSEO_Vendor\GuzzleHttp\Promise\Is::settled($p)) { + return; + } + $results[$idx] = $value; + if (\count($results) >= $count) { + $p->resolve(null); + } + }, function ($reason) use(&$rejections) : void { + $rejections[] = $reason; + })->then(function () use(&$results, &$rejections, $count) { + if (\count($results) !== $count) { + throw new \YoastSEO_Vendor\GuzzleHttp\Promise\AggregateException('Not enough promises to fulfill count', $rejections); + } + \ksort($results); + return \array_values($results); + }); + } + /** + * Like some(), with 1 as count. However, if the promise fulfills, the + * fulfillment value is not an array of 1 but the value directly. + * + * @param mixed $promises Promises or values. + */ + public static function any($promises) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + return self::some(1, $promises)->then(function ($values) { + return $values[0]; + }); + } + /** + * Returns a promise that is fulfilled when all of the provided promises have + * been fulfilled or rejected. + * + * The returned promise is fulfilled with an array of inspection state arrays. + * + * @see inspect for the inspection state array format. + * + * @param mixed $promises Promises or values. + */ + public static function settle($promises) : \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface + { + $results = []; + return \YoastSEO_Vendor\GuzzleHttp\Promise\Each::of($promises, function ($value, $idx) use(&$results) : void { + $results[$idx] = ['state' => \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::FULFILLED, 'value' => $value]; + }, function ($reason, $idx) use(&$results) : void { + $results[$idx] = ['state' => \YoastSEO_Vendor\GuzzleHttp\Promise\PromiseInterface::REJECTED, 'reason' => $reason]; + })->then(function () use(&$results) { + \ksort($results); + return $results; + }); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/AppendStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/AppendStream.php new file mode 100644 index 00000000..aa65154c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/AppendStream.php @@ -0,0 +1,203 @@ +addStream($stream); + } + } + public function __toString() : string + { + try { + $this->rewind(); + return $this->getContents(); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + \trigger_error(\sprintf('%s::__toString exception: %s', self::class, (string) $e), \E_USER_ERROR); + return ''; + } + } + /** + * Add a stream to the AppendStream + * + * @param StreamInterface $stream Stream to append. Must be readable. + * + * @throws \InvalidArgumentException if the stream is not readable + */ + public function addStream(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream) : void + { + if (!$stream->isReadable()) { + throw new \InvalidArgumentException('Each stream must be readable'); + } + // The stream is only seekable if all streams are seekable + if (!$stream->isSeekable()) { + $this->seekable = \false; + } + $this->streams[] = $stream; + } + public function getContents() : string + { + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::copyToString($this); + } + /** + * Closes each attached stream. + */ + public function close() : void + { + $this->pos = $this->current = 0; + $this->seekable = \true; + foreach ($this->streams as $stream) { + $stream->close(); + } + $this->streams = []; + } + /** + * Detaches each attached stream. + * + * Returns null as it's not clear which underlying stream resource to return. + */ + public function detach() + { + $this->pos = $this->current = 0; + $this->seekable = \true; + foreach ($this->streams as $stream) { + $stream->detach(); + } + $this->streams = []; + return null; + } + public function tell() : int + { + return $this->pos; + } + /** + * Tries to calculate the size by adding the size of each stream. + * + * If any of the streams do not return a valid number, then the size of the + * append stream cannot be determined and null is returned. + */ + public function getSize() : ?int + { + $size = 0; + foreach ($this->streams as $stream) { + $s = $stream->getSize(); + if ($s === null) { + return null; + } + $size += $s; + } + return $size; + } + public function eof() : bool + { + return !$this->streams || $this->current >= \count($this->streams) - 1 && $this->streams[$this->current]->eof(); + } + public function rewind() : void + { + $this->seek(0); + } + /** + * Attempts to seek to the given position. Only supports SEEK_SET. + */ + public function seek($offset, $whence = \SEEK_SET) : void + { + if (!$this->seekable) { + throw new \RuntimeException('This AppendStream is not seekable'); + } elseif ($whence !== \SEEK_SET) { + throw new \RuntimeException('The AppendStream can only seek with SEEK_SET'); + } + $this->pos = $this->current = 0; + // Rewind each stream + foreach ($this->streams as $i => $stream) { + try { + $stream->rewind(); + } catch (\Exception $e) { + throw new \RuntimeException('Unable to seek stream ' . $i . ' of the AppendStream', 0, $e); + } + } + // Seek to the actual position by reading from each stream + while ($this->pos < $offset && !$this->eof()) { + $result = $this->read(\min(8096, $offset - $this->pos)); + if ($result === '') { + break; + } + } + } + /** + * Reads from all of the appended streams until the length is met or EOF. + */ + public function read($length) : string + { + $buffer = ''; + $total = \count($this->streams) - 1; + $remaining = $length; + $progressToNext = \false; + while ($remaining > 0) { + // Progress to the next stream if needed. + if ($progressToNext || $this->streams[$this->current]->eof()) { + $progressToNext = \false; + if ($this->current === $total) { + break; + } + ++$this->current; + } + $result = $this->streams[$this->current]->read($remaining); + if ($result === '') { + $progressToNext = \true; + continue; + } + $buffer .= $result; + $remaining = $length - \strlen($buffer); + } + $this->pos += \strlen($buffer); + return $buffer; + } + public function isReadable() : bool + { + return \true; + } + public function isWritable() : bool + { + return \false; + } + public function isSeekable() : bool + { + return $this->seekable; + } + public function write($string) : int + { + throw new \RuntimeException('Cannot write to an AppendStream'); + } + /** + * @return mixed + */ + public function getMetadata($key = null) + { + return $key ? null : []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/BufferStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/BufferStream.php new file mode 100644 index 00000000..1aebd6ff --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/BufferStream.php @@ -0,0 +1,121 @@ +hwm = $hwm; + } + public function __toString() : string + { + return $this->getContents(); + } + public function getContents() : string + { + $buffer = $this->buffer; + $this->buffer = ''; + return $buffer; + } + public function close() : void + { + $this->buffer = ''; + } + public function detach() + { + $this->close(); + return null; + } + public function getSize() : ?int + { + return \strlen($this->buffer); + } + public function isReadable() : bool + { + return \true; + } + public function isWritable() : bool + { + return \true; + } + public function isSeekable() : bool + { + return \false; + } + public function rewind() : void + { + $this->seek(0); + } + public function seek($offset, $whence = \SEEK_SET) : void + { + throw new \RuntimeException('Cannot seek a BufferStream'); + } + public function eof() : bool + { + return \strlen($this->buffer) === 0; + } + public function tell() : int + { + throw new \RuntimeException('Cannot determine the position of a BufferStream'); + } + /** + * Reads data from the buffer. + */ + public function read($length) : string + { + $currentLength = \strlen($this->buffer); + if ($length >= $currentLength) { + // No need to slice the buffer because we don't have enough data. + $result = $this->buffer; + $this->buffer = ''; + } else { + // Slice up the result to provide a subset of the buffer. + $result = \substr($this->buffer, 0, $length); + $this->buffer = \substr($this->buffer, $length); + } + return $result; + } + /** + * Writes data to the buffer. + */ + public function write($string) : int + { + $this->buffer .= $string; + if (\strlen($this->buffer) >= $this->hwm) { + return 0; + } + return \strlen($string); + } + /** + * @return mixed + */ + public function getMetadata($key = null) + { + if ($key === 'hwm') { + return $this->hwm; + } + return $key ? null : []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/CachingStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/CachingStream.php new file mode 100644 index 00000000..b22bc8ab --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/CachingStream.php @@ -0,0 +1,125 @@ +remoteStream = $stream; + $this->stream = $target ?: new \YoastSEO_Vendor\GuzzleHttp\Psr7\Stream(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::tryFopen('php://temp', 'r+')); + } + public function getSize() : ?int + { + $remoteSize = $this->remoteStream->getSize(); + if (null === $remoteSize) { + return null; + } + return \max($this->stream->getSize(), $remoteSize); + } + public function rewind() : void + { + $this->seek(0); + } + public function seek($offset, $whence = \SEEK_SET) : void + { + if ($whence === \SEEK_SET) { + $byte = $offset; + } elseif ($whence === \SEEK_CUR) { + $byte = $offset + $this->tell(); + } elseif ($whence === \SEEK_END) { + $size = $this->remoteStream->getSize(); + if ($size === null) { + $size = $this->cacheEntireStream(); + } + $byte = $size + $offset; + } else { + throw new \InvalidArgumentException('Invalid whence'); + } + $diff = $byte - $this->stream->getSize(); + if ($diff > 0) { + // Read the remoteStream until we have read in at least the amount + // of bytes requested, or we reach the end of the file. + while ($diff > 0 && !$this->remoteStream->eof()) { + $this->read($diff); + $diff = $byte - $this->stream->getSize(); + } + } else { + // We can just do a normal seek since we've already seen this byte. + $this->stream->seek($byte); + } + } + public function read($length) : string + { + // Perform a regular read on any previously read data from the buffer + $data = $this->stream->read($length); + $remaining = $length - \strlen($data); + // More data was requested so read from the remote stream + if ($remaining) { + // If data was written to the buffer in a position that would have + // been filled from the remote stream, then we must skip bytes on + // the remote stream to emulate overwriting bytes from that + // position. This mimics the behavior of other PHP stream wrappers. + $remoteData = $this->remoteStream->read($remaining + $this->skipReadBytes); + if ($this->skipReadBytes) { + $len = \strlen($remoteData); + $remoteData = \substr($remoteData, $this->skipReadBytes); + $this->skipReadBytes = \max(0, $this->skipReadBytes - $len); + } + $data .= $remoteData; + $this->stream->write($remoteData); + } + return $data; + } + public function write($string) : int + { + // When appending to the end of the currently read stream, you'll want + // to skip bytes from being read from the remote stream to emulate + // other stream wrappers. Basically replacing bytes of data of a fixed + // length. + $overflow = \strlen($string) + $this->tell() - $this->remoteStream->tell(); + if ($overflow > 0) { + $this->skipReadBytes += $overflow; + } + return $this->stream->write($string); + } + public function eof() : bool + { + return $this->stream->eof() && $this->remoteStream->eof(); + } + /** + * Close both the remote stream and buffer stream + */ + public function close() : void + { + $this->remoteStream->close(); + $this->stream->close(); + } + private function cacheEntireStream() : int + { + $target = new \YoastSEO_Vendor\GuzzleHttp\Psr7\FnStream(['write' => 'strlen']); + \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::copyToStream($this, $target); + return $this->tell(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/DroppingStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/DroppingStream.php new file mode 100644 index 00000000..d3d3968c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/DroppingStream.php @@ -0,0 +1,40 @@ +stream = $stream; + $this->maxLength = $maxLength; + } + public function write($string) : int + { + $diff = $this->maxLength - $this->stream->getSize(); + // Begin returning 0 when the underlying stream is too large. + if ($diff <= 0) { + return 0; + } + // Write the stream or a subset of the stream if needed. + if (\strlen($string) < $diff) { + return $this->stream->write($string); + } + return $this->stream->write(\substr($string, 0, $diff)); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Exception/MalformedUriException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Exception/MalformedUriException.php new file mode 100644 index 00000000..1cebad95 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Exception/MalformedUriException.php @@ -0,0 +1,12 @@ + */ + private $methods; + /** + * @param array $methods Hash of method name to a callable. + */ + public function __construct(array $methods) + { + $this->methods = $methods; + // Create the functions on the class + foreach ($methods as $name => $fn) { + $this->{'_fn_' . $name} = $fn; + } + } + /** + * Lazily determine which methods are not implemented. + * + * @throws \BadMethodCallException + */ + public function __get(string $name) : void + { + throw new \BadMethodCallException(\str_replace('_fn_', '', $name) . '() is not implemented in the FnStream'); + } + /** + * The close method is called on the underlying stream only if possible. + */ + public function __destruct() + { + if (isset($this->_fn_close)) { + ($this->_fn_close)(); + } + } + /** + * An unserialize would allow the __destruct to run when the unserialized value goes out of scope. + * + * @throws \LogicException + */ + public function __wakeup() : void + { + throw new \LogicException('FnStream should never be unserialized'); + } + /** + * Adds custom functionality to an underlying stream by intercepting + * specific method calls. + * + * @param StreamInterface $stream Stream to decorate + * @param array $methods Hash of method name to a closure + * + * @return FnStream + */ + public static function decorate(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream, array $methods) + { + // If any of the required methods were not provided, then simply + // proxy to the decorated stream. + foreach (\array_diff(self::SLOTS, \array_keys($methods)) as $diff) { + /** @var callable $callable */ + $callable = [$stream, $diff]; + $methods[$diff] = $callable; + } + return new self($methods); + } + public function __toString() : string + { + try { + /** @var string */ + return ($this->_fn___toString)(); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + \trigger_error(\sprintf('%s::__toString exception: %s', self::class, (string) $e), \E_USER_ERROR); + return ''; + } + } + public function close() : void + { + ($this->_fn_close)(); + } + public function detach() + { + return ($this->_fn_detach)(); + } + public function getSize() : ?int + { + return ($this->_fn_getSize)(); + } + public function tell() : int + { + return ($this->_fn_tell)(); + } + public function eof() : bool + { + return ($this->_fn_eof)(); + } + public function isSeekable() : bool + { + return ($this->_fn_isSeekable)(); + } + public function rewind() : void + { + ($this->_fn_rewind)(); + } + public function seek($offset, $whence = \SEEK_SET) : void + { + ($this->_fn_seek)($offset, $whence); + } + public function isWritable() : bool + { + return ($this->_fn_isWritable)(); + } + public function write($string) : int + { + return ($this->_fn_write)($string); + } + public function isReadable() : bool + { + return ($this->_fn_isReadable)(); + } + public function read($length) : string + { + return ($this->_fn_read)($length); + } + public function getContents() : string + { + return ($this->_fn_getContents)(); + } + /** + * @return mixed + */ + public function getMetadata($key = null) + { + return ($this->_fn_getMetadata)($key); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Header.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Header.php new file mode 100644 index 00000000..344d6fdb --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Header.php @@ -0,0 +1,117 @@ +]+>|[^=]+/', $kvp, $matches)) { + $m = $matches[0]; + if (isset($m[1])) { + $part[\trim($m[0], $trimmed)] = \trim($m[1], $trimmed); + } else { + $part[] = \trim($m[0], $trimmed); + } + } + } + if ($part) { + $params[] = $part; + } + } + } + return $params; + } + /** + * Converts an array of header values that may contain comma separated + * headers into an array of headers with no comma separated values. + * + * @param string|array $header Header to normalize. + * + * @deprecated Use self::splitList() instead. + */ + public static function normalize($header) : array + { + $result = []; + foreach ((array) $header as $value) { + foreach (self::splitList($value) as $parsed) { + $result[] = $parsed; + } + } + return $result; + } + /** + * Splits a HTTP header defined to contain a comma-separated list into + * each individual value. Empty values will be removed. + * + * Example headers include 'accept', 'cache-control' and 'if-none-match'. + * + * This method must not be used to parse headers that are not defined as + * a list, such as 'user-agent' or 'set-cookie'. + * + * @param string|string[] $values Header value as returned by MessageInterface::getHeader() + * + * @return string[] + */ + public static function splitList($values) : array + { + if (!\is_array($values)) { + $values = [$values]; + } + $result = []; + foreach ($values as $value) { + if (!\is_string($value)) { + throw new \TypeError('$header must either be a string or an array containing strings.'); + } + $v = ''; + $isQuoted = \false; + $isEscaped = \false; + for ($i = 0, $max = \strlen($value); $i < $max; ++$i) { + if ($isEscaped) { + $v .= $value[$i]; + $isEscaped = \false; + continue; + } + if (!$isQuoted && $value[$i] === ',') { + $v = \trim($v); + if ($v !== '') { + $result[] = $v; + } + $v = ''; + continue; + } + if ($isQuoted && $value[$i] === '\\') { + $isEscaped = \true; + $v .= $value[$i]; + continue; + } + if ($value[$i] === '"') { + $isQuoted = !$isQuoted; + $v .= $value[$i]; + continue; + } + $v .= $value[$i]; + } + $v = \trim($v); + if ($v !== '') { + $result[] = $v; + } + } + return $result; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/HttpFactory.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/HttpFactory.php new file mode 100644 index 00000000..24b5a0e5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/HttpFactory.php @@ -0,0 +1,76 @@ +getSize(); + } + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType); + } + public function createStream(string $content = '') : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($content); + } + public function createStreamFromFile(string $file, string $mode = 'r') : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + try { + $resource = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::tryFopen($file, $mode); + } catch (\RuntimeException $e) { + if ('' === $mode || \false === \in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], \true)) { + throw new \InvalidArgumentException(\sprintf('Invalid file opening mode "%s"', $mode), 0, $e); + } + throw $e; + } + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($resource); + } + public function createStreamFromResource($resource) : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($resource); + } + public function createServerRequest(string $method, $uri, array $serverParams = []) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + if (empty($method)) { + if (!empty($serverParams['REQUEST_METHOD'])) { + $method = $serverParams['REQUEST_METHOD']; + } else { + throw new \InvalidArgumentException('Cannot determine HTTP method'); + } + } + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\ServerRequest($method, $uri, [], null, '1.1', $serverParams); + } + public function createResponse(int $code = 200, string $reasonPhrase = '') : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Response($code, [], null, '1.1', $reasonPhrase); + } + public function createRequest(string $method, $uri) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Request($method, $uri); + } + public function createUri(string $uri = '') : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri($uri); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/InflateStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/InflateStream.php new file mode 100644 index 00000000..de16e71c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/InflateStream.php @@ -0,0 +1,33 @@ + 15 + 32]); + $this->stream = $stream->isSeekable() ? new \YoastSEO_Vendor\GuzzleHttp\Psr7\Stream($resource) : new \YoastSEO_Vendor\GuzzleHttp\Psr7\NoSeekStream(new \YoastSEO_Vendor\GuzzleHttp\Psr7\Stream($resource)); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LazyOpenStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LazyOpenStream.php new file mode 100644 index 00000000..02de7622 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LazyOpenStream.php @@ -0,0 +1,41 @@ +filename = $filename; + $this->mode = $mode; + // unsetting the property forces the first access to go through + // __get(). + unset($this->stream); + } + /** + * Creates the underlying stream lazily when required. + */ + protected function createStream() : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::tryFopen($this->filename, $this->mode)); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LimitStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LimitStream.php new file mode 100644 index 00000000..536efe4a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/LimitStream.php @@ -0,0 +1,128 @@ +stream = $stream; + $this->setLimit($limit); + $this->setOffset($offset); + } + public function eof() : bool + { + // Always return true if the underlying stream is EOF + if ($this->stream->eof()) { + return \true; + } + // No limit and the underlying stream is not at EOF + if ($this->limit === -1) { + return \false; + } + return $this->stream->tell() >= $this->offset + $this->limit; + } + /** + * Returns the size of the limited subset of data + */ + public function getSize() : ?int + { + if (null === ($length = $this->stream->getSize())) { + return null; + } elseif ($this->limit === -1) { + return $length - $this->offset; + } else { + return \min($this->limit, $length - $this->offset); + } + } + /** + * Allow for a bounded seek on the read limited stream + */ + public function seek($offset, $whence = \SEEK_SET) : void + { + if ($whence !== \SEEK_SET || $offset < 0) { + throw new \RuntimeException(\sprintf('Cannot seek to offset %s with whence %s', $offset, $whence)); + } + $offset += $this->offset; + if ($this->limit !== -1) { + if ($offset > $this->offset + $this->limit) { + $offset = $this->offset + $this->limit; + } + } + $this->stream->seek($offset); + } + /** + * Give a relative tell() + */ + public function tell() : int + { + return $this->stream->tell() - $this->offset; + } + /** + * Set the offset to start limiting from + * + * @param int $offset Offset to seek to and begin byte limiting from + * + * @throws \RuntimeException if the stream cannot be seeked. + */ + public function setOffset(int $offset) : void + { + $current = $this->stream->tell(); + if ($current !== $offset) { + // If the stream cannot seek to the offset position, then read to it + if ($this->stream->isSeekable()) { + $this->stream->seek($offset); + } elseif ($current > $offset) { + throw new \RuntimeException("Could not seek to stream offset {$offset}"); + } else { + $this->stream->read($offset - $current); + } + } + $this->offset = $offset; + } + /** + * Set the limit of bytes that the decorator allows to be read from the + * stream. + * + * @param int $limit Number of bytes to allow to be read from the stream. + * Use -1 for no limit. + */ + public function setLimit(int $limit) : void + { + $this->limit = $limit; + } + public function read($length) : string + { + if ($this->limit === -1) { + return $this->stream->read($length); + } + // Check if the current position is less than the total allowed + // bytes + original offset + $remaining = $this->offset + $this->limit - $this->stream->tell(); + if ($remaining > 0) { + // Only return the amount of requested data, ensuring that the byte + // limit is not exceeded + return $this->stream->read(\min($remaining, $length)); + } + return ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Message.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Message.php new file mode 100644 index 00000000..a112f210 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Message.php @@ -0,0 +1,189 @@ +getMethod() . ' ' . $message->getRequestTarget()) . ' HTTP/' . $message->getProtocolVersion(); + if (!$message->hasHeader('host')) { + $msg .= "\r\nHost: " . $message->getUri()->getHost(); + } + } elseif ($message instanceof \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface) { + $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' . $message->getStatusCode() . ' ' . $message->getReasonPhrase(); + } else { + throw new \InvalidArgumentException('Unknown message type'); + } + foreach ($message->getHeaders() as $name => $values) { + if (\is_string($name) && \strtolower($name) === 'set-cookie') { + foreach ($values as $value) { + $msg .= "\r\n{$name}: " . $value; + } + } else { + $msg .= "\r\n{$name}: " . \implode(', ', $values); + } + } + return "{$msg}\r\n\r\n" . $message->getBody(); + } + /** + * Get a short summary of the message body. + * + * Will return `null` if the response is not printable. + * + * @param MessageInterface $message The message to get the body summary + * @param int $truncateAt The maximum allowed size of the summary + */ + public static function bodySummary(\YoastSEO_Vendor\Psr\Http\Message\MessageInterface $message, int $truncateAt = 120) : ?string + { + $body = $message->getBody(); + if (!$body->isSeekable() || !$body->isReadable()) { + return null; + } + $size = $body->getSize(); + if ($size === 0) { + return null; + } + $body->rewind(); + $summary = $body->read($truncateAt); + $body->rewind(); + if ($size > $truncateAt) { + $summary .= ' (truncated...)'; + } + // Matches any printable character, including unicode characters: + // letters, marks, numbers, punctuation, spacing, and separators. + if (\preg_match('/[^\\pL\\pM\\pN\\pP\\pS\\pZ\\n\\r\\t]/u', $summary) !== 0) { + return null; + } + return $summary; + } + /** + * Attempts to rewind a message body and throws an exception on failure. + * + * The body of the message will only be rewound if a call to `tell()` + * returns a value other than `0`. + * + * @param MessageInterface $message Message to rewind + * + * @throws \RuntimeException + */ + public static function rewindBody(\YoastSEO_Vendor\Psr\Http\Message\MessageInterface $message) : void + { + $body = $message->getBody(); + if ($body->tell()) { + $body->rewind(); + } + } + /** + * Parses an HTTP message into an associative array. + * + * The array contains the "start-line" key containing the start line of + * the message, "headers" key containing an associative array of header + * array values, and a "body" key containing the body of the message. + * + * @param string $message HTTP request or response to parse. + */ + public static function parseMessage(string $message) : array + { + if (!$message) { + throw new \InvalidArgumentException('Invalid message'); + } + $message = \ltrim($message, "\r\n"); + $messageParts = \preg_split("/\r?\n\r?\n/", $message, 2); + if ($messageParts === \false || \count($messageParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing header delimiter'); + } + [$rawHeaders, $body] = $messageParts; + $rawHeaders .= "\r\n"; + // Put back the delimiter we split previously + $headerParts = \preg_split("/\r?\n/", $rawHeaders, 2); + if ($headerParts === \false || \count($headerParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing status line'); + } + [$startLine, $rawHeaders] = $headerParts; + if (\preg_match("/(?:^HTTP\\/|^[A-Z]+ \\S+ HTTP\\/)(\\d+(?:\\.\\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') { + // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0 + $rawHeaders = \preg_replace(\YoastSEO_Vendor\GuzzleHttp\Psr7\Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders); + } + /** @var array[] $headerLines */ + $count = \preg_match_all(\YoastSEO_Vendor\GuzzleHttp\Psr7\Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, \PREG_SET_ORDER); + // If these aren't the same, then one line didn't match and there's an invalid header. + if ($count !== \substr_count($rawHeaders, "\n")) { + // Folding is deprecated, see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4 + if (\preg_match(\YoastSEO_Vendor\GuzzleHttp\Psr7\Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) { + throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); + } + throw new \InvalidArgumentException('Invalid header syntax'); + } + $headers = []; + foreach ($headerLines as $headerLine) { + $headers[$headerLine[1]][] = $headerLine[2]; + } + return ['start-line' => $startLine, 'headers' => $headers, 'body' => $body]; + } + /** + * Constructs a URI for an HTTP request message. + * + * @param string $path Path from the start-line + * @param array $headers Array of headers (each value an array). + */ + public static function parseRequestUri(string $path, array $headers) : string + { + $hostKey = \array_filter(\array_keys($headers), function ($k) { + // Numeric array keys are converted to int by PHP. + $k = (string) $k; + return \strtolower($k) === 'host'; + }); + // If no host is found, then a full URI cannot be constructed. + if (!$hostKey) { + return $path; + } + $host = $headers[\reset($hostKey)][0]; + $scheme = \substr($host, -4) === ':443' ? 'https' : 'http'; + return $scheme . '://' . $host . '/' . \ltrim($path, '/'); + } + /** + * Parses a request message string into a request object. + * + * @param string $message Request message string. + */ + public static function parseRequest(string $message) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + $data = self::parseMessage($message); + $matches = []; + if (!\preg_match('/^[\\S]+\\s+([a-zA-Z]+:\\/\\/|\\/).*/', $data['start-line'], $matches)) { + throw new \InvalidArgumentException('Invalid request string'); + } + $parts = \explode(' ', $data['start-line'], 3); + $version = isset($parts[2]) ? \explode('/', $parts[2])[1] : '1.1'; + $request = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Request($parts[0], $matches[1] === '/' ? self::parseRequestUri($parts[1], $data['headers']) : $parts[1], $data['headers'], $data['body'], $version); + return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]); + } + /** + * Parses a response message string into a response object. + * + * @param string $message Response message string. + */ + public static function parseResponse(string $message) : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + $data = self::parseMessage($message); + // According to https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2 + // the space between status-code and reason-phrase is required. But + // browsers accept responses without space and reason as well. + if (!\preg_match('/^HTTP\\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { + throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); + } + $parts = \explode(' ', $data['start-line'], 3); + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Response((int) $parts[1], $data['headers'], $data['body'], \explode('/', $parts[0])[1], $parts[2] ?? null); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MessageTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MessageTrait.php new file mode 100644 index 00000000..9206e72b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MessageTrait.php @@ -0,0 +1,212 @@ + array of values */ + private $headers = []; + /** @var string[] Map of lowercase header name => original name at registration */ + private $headerNames = []; + /** @var string */ + private $protocol = '1.1'; + /** @var StreamInterface|null */ + private $stream; + public function getProtocolVersion() : string + { + return $this->protocol; + } + public function withProtocolVersion($version) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface + { + if ($this->protocol === $version) { + return $this; + } + $new = clone $this; + $new->protocol = $version; + return $new; + } + public function getHeaders() : array + { + return $this->headers; + } + public function hasHeader($header) : bool + { + return isset($this->headerNames[\strtolower($header)]); + } + public function getHeader($header) : array + { + $header = \strtolower($header); + if (!isset($this->headerNames[$header])) { + return []; + } + $header = $this->headerNames[$header]; + return $this->headers[$header]; + } + public function getHeaderLine($header) : string + { + return \implode(', ', $this->getHeader($header)); + } + public function withHeader($header, $value) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface + { + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); + $normalized = \strtolower($header); + $new = clone $this; + if (isset($new->headerNames[$normalized])) { + unset($new->headers[$new->headerNames[$normalized]]); + } + $new->headerNames[$normalized] = $header; + $new->headers[$header] = $value; + return $new; + } + public function withAddedHeader($header, $value) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface + { + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); + $normalized = \strtolower($header); + $new = clone $this; + if (isset($new->headerNames[$normalized])) { + $header = $this->headerNames[$normalized]; + $new->headers[$header] = \array_merge($this->headers[$header], $value); + } else { + $new->headerNames[$normalized] = $header; + $new->headers[$header] = $value; + } + return $new; + } + public function withoutHeader($header) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface + { + $normalized = \strtolower($header); + if (!isset($this->headerNames[$normalized])) { + return $this; + } + $header = $this->headerNames[$normalized]; + $new = clone $this; + unset($new->headers[$header], $new->headerNames[$normalized]); + return $new; + } + public function getBody() : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + if (!$this->stream) { + $this->stream = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor(''); + } + return $this->stream; + } + public function withBody(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $body) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface + { + if ($body === $this->stream) { + return $this; + } + $new = clone $this; + $new->stream = $body; + return $new; + } + /** + * @param (string|string[])[] $headers + */ + private function setHeaders(array $headers) : void + { + $this->headerNames = $this->headers = []; + foreach ($headers as $header => $value) { + // Numeric array keys are converted to int by PHP. + $header = (string) $header; + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); + $normalized = \strtolower($header); + if (isset($this->headerNames[$normalized])) { + $header = $this->headerNames[$normalized]; + $this->headers[$header] = \array_merge($this->headers[$header], $value); + } else { + $this->headerNames[$normalized] = $header; + $this->headers[$header] = $value; + } + } + } + /** + * @param mixed $value + * + * @return string[] + */ + private function normalizeHeaderValue($value) : array + { + if (!\is_array($value)) { + return $this->trimAndValidateHeaderValues([$value]); + } + if (\count($value) === 0) { + throw new \InvalidArgumentException('Header value can not be an empty array.'); + } + return $this->trimAndValidateHeaderValues($value); + } + /** + * Trims whitespace from the header values. + * + * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field. + * + * header-field = field-name ":" OWS field-value OWS + * OWS = *( SP / HTAB ) + * + * @param mixed[] $values Header values + * + * @return string[] Trimmed header values + * + * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4 + */ + private function trimAndValidateHeaderValues(array $values) : array + { + return \array_map(function ($value) { + if (!\is_scalar($value) && null !== $value) { + throw new \InvalidArgumentException(\sprintf('Header value must be scalar or null but %s provided.', \is_object($value) ? \get_class($value) : \gettype($value))); + } + $trimmed = \trim((string) $value, " \t"); + $this->assertValue($trimmed); + return $trimmed; + }, \array_values($values)); + } + /** + * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2 + * + * @param mixed $header + */ + private function assertHeader($header) : void + { + if (!\is_string($header)) { + throw new \InvalidArgumentException(\sprintf('Header name must be a string but %s provided.', \is_object($header) ? \get_class($header) : \gettype($header))); + } + if (!\preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) { + throw new \InvalidArgumentException(\sprintf('"%s" is not valid header name.', $header)); + } + } + /** + * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2 + * + * field-value = *( field-content / obs-fold ) + * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] + * field-vchar = VCHAR / obs-text + * VCHAR = %x21-7E + * obs-text = %x80-FF + * obs-fold = CRLF 1*( SP / HTAB ) + */ + private function assertValue(string $value) : void + { + // The regular expression intentionally does not support the obs-fold production, because as + // per RFC 7230#3.2.4: + // + // A sender MUST NOT generate a message that includes + // line folding (i.e., that has any field-value that contains a match to + // the obs-fold rule) unless the message is intended for packaging + // within the message/http media type. + // + // Clients must not send a request with line folding and a server sending folded headers is + // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting + // folding is not likely to break any legitimate use case. + if (!\preg_match('/^[\\x20\\x09\\x21-\\x7E\\x80-\\xFF]*$/D', $value)) { + throw new \InvalidArgumentException(\sprintf('"%s" is not valid header value.', $value)); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MimeType.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MimeType.php new file mode 100644 index 00000000..6306ab28 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MimeType.php @@ -0,0 +1,27 @@ + 'application/vnd.1000minds.decision-model+xml', '3dml' => 'text/vnd.in3d.3dml', '3ds' => 'image/x-3ds', '3g2' => 'video/3gpp2', '3gp' => 'video/3gp', '3gpp' => 'video/3gpp', '3mf' => 'model/3mf', '7z' => 'application/x-7z-compressed', '7zip' => 'application/x-7z-compressed', '123' => 'application/vnd.lotus-1-2-3', 'aab' => 'application/x-authorware-bin', 'aac' => 'audio/aac', 'aam' => 'application/x-authorware-map', 'aas' => 'application/x-authorware-seg', 'abw' => 'application/x-abiword', 'ac' => 'application/vnd.nokia.n-gage.ac+xml', 'ac3' => 'audio/ac3', 'acc' => 'application/vnd.americandynamics.acc', 'ace' => 'application/x-ace-compressed', 'acu' => 'application/vnd.acucobol', 'acutc' => 'application/vnd.acucorp', 'adp' => 'audio/adpcm', 'adts' => 'audio/aac', 'aep' => 'application/vnd.audiograph', 'afm' => 'application/x-font-type1', 'afp' => 'application/vnd.ibm.modcap', 'age' => 'application/vnd.age', 'ahead' => 'application/vnd.ahead.space', 'ai' => 'application/pdf', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', 'aiff' => 'audio/x-aiff', 'air' => 'application/vnd.adobe.air-application-installer-package+zip', 'ait' => 'application/vnd.dvb.ait', 'ami' => 'application/vnd.amiga.ami', 'aml' => 'application/automationml-aml+xml', 'amlx' => 'application/automationml-amlx+zip', 'amr' => 'audio/amr', 'apk' => 'application/vnd.android.package-archive', 'apng' => 'image/apng', 'appcache' => 'text/cache-manifest', 'appinstaller' => 'application/appinstaller', 'application' => 'application/x-ms-application', 'appx' => 'application/appx', 'appxbundle' => 'application/appxbundle', 'apr' => 'application/vnd.lotus-approach', 'arc' => 'application/x-freearc', 'arj' => 'application/x-arj', 'asc' => 'application/pgp-signature', 'asf' => 'video/x-ms-asf', 'asm' => 'text/x-asm', 'aso' => 'application/vnd.accpac.simply.aso', 'asx' => 'video/x-ms-asf', 'atc' => 'application/vnd.acucorp', 'atom' => 'application/atom+xml', 'atomcat' => 'application/atomcat+xml', 'atomdeleted' => 'application/atomdeleted+xml', 'atomsvc' => 'application/atomsvc+xml', 'atx' => 'application/vnd.antix.game-component', 'au' => 'audio/x-au', 'avci' => 'image/avci', 'avcs' => 'image/avcs', 'avi' => 'video/x-msvideo', 'avif' => 'image/avif', 'aw' => 'application/applixware', 'azf' => 'application/vnd.airzip.filesecure.azf', 'azs' => 'application/vnd.airzip.filesecure.azs', 'azv' => 'image/vnd.airzip.accelerator.azv', 'azw' => 'application/vnd.amazon.ebook', 'b16' => 'image/vnd.pco.b16', 'bat' => 'application/x-msdownload', 'bcpio' => 'application/x-bcpio', 'bdf' => 'application/x-font-bdf', 'bdm' => 'application/vnd.syncml.dm+wbxml', 'bdoc' => 'application/x-bdoc', 'bed' => 'application/vnd.realvnc.bed', 'bh2' => 'application/vnd.fujitsu.oasysprs', 'bin' => 'application/octet-stream', 'blb' => 'application/x-blorb', 'blorb' => 'application/x-blorb', 'bmi' => 'application/vnd.bmi', 'bmml' => 'application/vnd.balsamiq.bmml+xml', 'bmp' => 'image/bmp', 'book' => 'application/vnd.framemaker', 'box' => 'application/vnd.previewsystems.box', 'boz' => 'application/x-bzip2', 'bpk' => 'application/octet-stream', 'bpmn' => 'application/octet-stream', 'bsp' => 'model/vnd.valve.source.compiled-map', 'btf' => 'image/prs.btif', 'btif' => 'image/prs.btif', 'buffer' => 'application/octet-stream', 'bz' => 'application/x-bzip', 'bz2' => 'application/x-bzip2', 'c' => 'text/x-c', 'c4d' => 'application/vnd.clonk.c4group', 'c4f' => 'application/vnd.clonk.c4group', 'c4g' => 'application/vnd.clonk.c4group', 'c4p' => 'application/vnd.clonk.c4group', 'c4u' => 'application/vnd.clonk.c4group', 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', 'cab' => 'application/vnd.ms-cab-compressed', 'caf' => 'audio/x-caf', 'cap' => 'application/vnd.tcpdump.pcap', 'car' => 'application/vnd.curl.car', 'cat' => 'application/vnd.ms-pki.seccat', 'cb7' => 'application/x-cbr', 'cba' => 'application/x-cbr', 'cbr' => 'application/x-cbr', 'cbt' => 'application/x-cbr', 'cbz' => 'application/x-cbr', 'cc' => 'text/x-c', 'cco' => 'application/x-cocoa', 'cct' => 'application/x-director', 'ccxml' => 'application/ccxml+xml', 'cdbcmsg' => 'application/vnd.contact.cmsg', 'cdf' => 'application/x-netcdf', 'cdfx' => 'application/cdfx+xml', 'cdkey' => 'application/vnd.mediastation.cdkey', 'cdmia' => 'application/cdmi-capability', 'cdmic' => 'application/cdmi-container', 'cdmid' => 'application/cdmi-domain', 'cdmio' => 'application/cdmi-object', 'cdmiq' => 'application/cdmi-queue', 'cdr' => 'application/cdr', 'cdx' => 'chemical/x-cdx', 'cdxml' => 'application/vnd.chemdraw+xml', 'cdy' => 'application/vnd.cinderella', 'cer' => 'application/pkix-cert', 'cfs' => 'application/x-cfs-compressed', 'cgm' => 'image/cgm', 'chat' => 'application/x-chat', 'chm' => 'application/vnd.ms-htmlhelp', 'chrt' => 'application/vnd.kde.kchart', 'cif' => 'chemical/x-cif', 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', 'cil' => 'application/vnd.ms-artgalry', 'cjs' => 'application/node', 'cla' => 'application/vnd.claymore', 'class' => 'application/octet-stream', 'cld' => 'model/vnd.cld', 'clkk' => 'application/vnd.crick.clicker.keyboard', 'clkp' => 'application/vnd.crick.clicker.palette', 'clkt' => 'application/vnd.crick.clicker.template', 'clkw' => 'application/vnd.crick.clicker.wordbank', 'clkx' => 'application/vnd.crick.clicker', 'clp' => 'application/x-msclip', 'cmc' => 'application/vnd.cosmocaller', 'cmdf' => 'chemical/x-cmdf', 'cml' => 'chemical/x-cml', 'cmp' => 'application/vnd.yellowriver-custom-menu', 'cmx' => 'image/x-cmx', 'cod' => 'application/vnd.rim.cod', 'coffee' => 'text/coffeescript', 'com' => 'application/x-msdownload', 'conf' => 'text/plain', 'cpio' => 'application/x-cpio', 'cpl' => 'application/cpl+xml', 'cpp' => 'text/x-c', 'cpt' => 'application/mac-compactpro', 'crd' => 'application/x-mscardfile', 'crl' => 'application/pkix-crl', 'crt' => 'application/x-x509-ca-cert', 'crx' => 'application/x-chrome-extension', 'cryptonote' => 'application/vnd.rig.cryptonote', 'csh' => 'application/x-csh', 'csl' => 'application/vnd.citationstyles.style+xml', 'csml' => 'chemical/x-csml', 'csp' => 'application/vnd.commonspace', 'csr' => 'application/octet-stream', 'css' => 'text/css', 'cst' => 'application/x-director', 'csv' => 'text/csv', 'cu' => 'application/cu-seeme', 'curl' => 'text/vnd.curl', 'cwl' => 'application/cwl', 'cww' => 'application/prs.cww', 'cxt' => 'application/x-director', 'cxx' => 'text/x-c', 'dae' => 'model/vnd.collada+xml', 'daf' => 'application/vnd.mobius.daf', 'dart' => 'application/vnd.dart', 'dataless' => 'application/vnd.fdsn.seed', 'davmount' => 'application/davmount+xml', 'dbf' => 'application/vnd.dbf', 'dbk' => 'application/docbook+xml', 'dcr' => 'application/x-director', 'dcurl' => 'text/vnd.curl.dcurl', 'dd2' => 'application/vnd.oma.dd2+xml', 'ddd' => 'application/vnd.fujixerox.ddd', 'ddf' => 'application/vnd.syncml.dmddf+xml', 'dds' => 'image/vnd.ms-dds', 'deb' => 'application/x-debian-package', 'def' => 'text/plain', 'deploy' => 'application/octet-stream', 'der' => 'application/x-x509-ca-cert', 'dfac' => 'application/vnd.dreamfactory', 'dgc' => 'application/x-dgc-compressed', 'dib' => 'image/bmp', 'dic' => 'text/x-c', 'dir' => 'application/x-director', 'dis' => 'application/vnd.mobius.dis', 'disposition-notification' => 'message/disposition-notification', 'dist' => 'application/octet-stream', 'distz' => 'application/octet-stream', 'djv' => 'image/vnd.djvu', 'djvu' => 'image/vnd.djvu', 'dll' => 'application/octet-stream', 'dmg' => 'application/x-apple-diskimage', 'dmn' => 'application/octet-stream', 'dmp' => 'application/vnd.tcpdump.pcap', 'dms' => 'application/octet-stream', 'dna' => 'application/vnd.dna', 'doc' => 'application/msword', 'docm' => 'application/vnd.ms-word.template.macroEnabled.12', 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'dot' => 'application/msword', 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12', 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'dp' => 'application/vnd.osgi.dp', 'dpg' => 'application/vnd.dpgraph', 'dpx' => 'image/dpx', 'dra' => 'audio/vnd.dra', 'drle' => 'image/dicom-rle', 'dsc' => 'text/prs.lines.tag', 'dssc' => 'application/dssc+der', 'dtb' => 'application/x-dtbook+xml', 'dtd' => 'application/xml-dtd', 'dts' => 'audio/vnd.dts', 'dtshd' => 'audio/vnd.dts.hd', 'dump' => 'application/octet-stream', 'dvb' => 'video/vnd.dvb.file', 'dvi' => 'application/x-dvi', 'dwd' => 'application/atsc-dwd+xml', 'dwf' => 'model/vnd.dwf', 'dwg' => 'image/vnd.dwg', 'dxf' => 'image/vnd.dxf', 'dxp' => 'application/vnd.spotfire.dxp', 'dxr' => 'application/x-director', 'ear' => 'application/java-archive', 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', 'ecma' => 'application/ecmascript', 'edm' => 'application/vnd.novadigm.edm', 'edx' => 'application/vnd.novadigm.edx', 'efif' => 'application/vnd.picsel', 'ei6' => 'application/vnd.pg.osasli', 'elc' => 'application/octet-stream', 'emf' => 'image/emf', 'eml' => 'message/rfc822', 'emma' => 'application/emma+xml', 'emotionml' => 'application/emotionml+xml', 'emz' => 'application/x-msmetafile', 'eol' => 'audio/vnd.digital-winds', 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript', 'epub' => 'application/epub+zip', 'es3' => 'application/vnd.eszigno3+xml', 'esa' => 'application/vnd.osgi.subsystem', 'esf' => 'application/vnd.epson.esf', 'et3' => 'application/vnd.eszigno3+xml', 'etx' => 'text/x-setext', 'eva' => 'application/x-eva', 'evy' => 'application/x-envoy', 'exe' => 'application/octet-stream', 'exi' => 'application/exi', 'exp' => 'application/express', 'exr' => 'image/aces', 'ext' => 'application/vnd.novadigm.ext', 'ez' => 'application/andrew-inset', 'ez2' => 'application/vnd.ezpix-album', 'ez3' => 'application/vnd.ezpix-package', 'f' => 'text/x-fortran', 'f4v' => 'video/mp4', 'f77' => 'text/x-fortran', 'f90' => 'text/x-fortran', 'fbs' => 'image/vnd.fastbidsheet', 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', 'fcs' => 'application/vnd.isac.fcs', 'fdf' => 'application/vnd.fdf', 'fdt' => 'application/fdt+xml', 'fe_launch' => 'application/vnd.denovo.fcselayout-link', 'fg5' => 'application/vnd.fujitsu.oasysgp', 'fgd' => 'application/x-director', 'fh' => 'image/x-freehand', 'fh4' => 'image/x-freehand', 'fh5' => 'image/x-freehand', 'fh7' => 'image/x-freehand', 'fhc' => 'image/x-freehand', 'fig' => 'application/x-xfig', 'fits' => 'image/fits', 'flac' => 'audio/x-flac', 'fli' => 'video/x-fli', 'flo' => 'application/vnd.micrografx.flo', 'flv' => 'video/x-flv', 'flw' => 'application/vnd.kde.kivio', 'flx' => 'text/vnd.fmi.flexstor', 'fly' => 'text/vnd.fly', 'fm' => 'application/vnd.framemaker', 'fnc' => 'application/vnd.frogans.fnc', 'fo' => 'application/vnd.software602.filler.form+xml', 'for' => 'text/x-fortran', 'fpx' => 'image/vnd.fpx', 'frame' => 'application/vnd.framemaker', 'fsc' => 'application/vnd.fsc.weblaunch', 'fst' => 'image/vnd.fst', 'ftc' => 'application/vnd.fluxtime.clip', 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', 'fvt' => 'video/vnd.fvt', 'fxp' => 'application/vnd.adobe.fxp', 'fxpl' => 'application/vnd.adobe.fxp', 'fzs' => 'application/vnd.fuzzysheet', 'g2w' => 'application/vnd.geoplan', 'g3' => 'image/g3fax', 'g3w' => 'application/vnd.geospace', 'gac' => 'application/vnd.groove-account', 'gam' => 'application/x-tads', 'gbr' => 'application/rpki-ghostbusters', 'gca' => 'application/x-gca-compressed', 'gdl' => 'model/vnd.gdl', 'gdoc' => 'application/vnd.google-apps.document', 'ged' => 'text/vnd.familysearch.gedcom', 'geo' => 'application/vnd.dynageo', 'geojson' => 'application/geo+json', 'gex' => 'application/vnd.geometry-explorer', 'ggb' => 'application/vnd.geogebra.file', 'ggt' => 'application/vnd.geogebra.tool', 'ghf' => 'application/vnd.groove-help', 'gif' => 'image/gif', 'gim' => 'application/vnd.groove-identity-message', 'glb' => 'model/gltf-binary', 'gltf' => 'model/gltf+json', 'gml' => 'application/gml+xml', 'gmx' => 'application/vnd.gmx', 'gnumeric' => 'application/x-gnumeric', 'gpg' => 'application/gpg-keys', 'gph' => 'application/vnd.flographit', 'gpx' => 'application/gpx+xml', 'gqf' => 'application/vnd.grafeq', 'gqs' => 'application/vnd.grafeq', 'gram' => 'application/srgs', 'gramps' => 'application/x-gramps-xml', 'gre' => 'application/vnd.geometry-explorer', 'grv' => 'application/vnd.groove-injector', 'grxml' => 'application/srgs+xml', 'gsf' => 'application/x-font-ghostscript', 'gsheet' => 'application/vnd.google-apps.spreadsheet', 'gslides' => 'application/vnd.google-apps.presentation', 'gtar' => 'application/x-gtar', 'gtm' => 'application/vnd.groove-tool-message', 'gtw' => 'model/vnd.gtw', 'gv' => 'text/vnd.graphviz', 'gxf' => 'application/gxf', 'gxt' => 'application/vnd.geonext', 'gz' => 'application/gzip', 'gzip' => 'application/gzip', 'h' => 'text/x-c', 'h261' => 'video/h261', 'h263' => 'video/h263', 'h264' => 'video/h264', 'hal' => 'application/vnd.hal+xml', 'hbci' => 'application/vnd.hbci', 'hbs' => 'text/x-handlebars-template', 'hdd' => 'application/x-virtualbox-hdd', 'hdf' => 'application/x-hdf', 'heic' => 'image/heic', 'heics' => 'image/heic-sequence', 'heif' => 'image/heif', 'heifs' => 'image/heif-sequence', 'hej2' => 'image/hej2k', 'held' => 'application/atsc-held+xml', 'hh' => 'text/x-c', 'hjson' => 'application/hjson', 'hlp' => 'application/winhlp', 'hpgl' => 'application/vnd.hp-hpgl', 'hpid' => 'application/vnd.hp-hpid', 'hps' => 'application/vnd.hp-hps', 'hqx' => 'application/mac-binhex40', 'hsj2' => 'image/hsj2', 'htc' => 'text/x-component', 'htke' => 'application/vnd.kenameaapp', 'htm' => 'text/html', 'html' => 'text/html', 'hvd' => 'application/vnd.yamaha.hv-dic', 'hvp' => 'application/vnd.yamaha.hv-voice', 'hvs' => 'application/vnd.yamaha.hv-script', 'i2g' => 'application/vnd.intergeo', 'icc' => 'application/vnd.iccprofile', 'ice' => 'x-conference/x-cooltalk', 'icm' => 'application/vnd.iccprofile', 'ico' => 'image/x-icon', 'ics' => 'text/calendar', 'ief' => 'image/ief', 'ifb' => 'text/calendar', 'ifm' => 'application/vnd.shana.informed.formdata', 'iges' => 'model/iges', 'igl' => 'application/vnd.igloader', 'igm' => 'application/vnd.insors.igm', 'igs' => 'model/iges', 'igx' => 'application/vnd.micrografx.igx', 'iif' => 'application/vnd.shana.informed.interchange', 'img' => 'application/octet-stream', 'imp' => 'application/vnd.accpac.simply.imp', 'ims' => 'application/vnd.ms-ims', 'in' => 'text/plain', 'ini' => 'text/plain', 'ink' => 'application/inkml+xml', 'inkml' => 'application/inkml+xml', 'install' => 'application/x-install-instructions', 'iota' => 'application/vnd.astraea-software.iota', 'ipfix' => 'application/ipfix', 'ipk' => 'application/vnd.shana.informed.package', 'irm' => 'application/vnd.ibm.rights-management', 'irp' => 'application/vnd.irepository.package+xml', 'iso' => 'application/x-iso9660-image', 'itp' => 'application/vnd.shana.informed.formtemplate', 'its' => 'application/its+xml', 'ivp' => 'application/vnd.immervision-ivp', 'ivu' => 'application/vnd.immervision-ivu', 'jad' => 'text/vnd.sun.j2me.app-descriptor', 'jade' => 'text/jade', 'jam' => 'application/vnd.jam', 'jar' => 'application/java-archive', 'jardiff' => 'application/x-java-archive-diff', 'java' => 'text/x-java-source', 'jhc' => 'image/jphc', 'jisp' => 'application/vnd.jisp', 'jls' => 'image/jls', 'jlt' => 'application/vnd.hp-jlyt', 'jng' => 'image/x-jng', 'jnlp' => 'application/x-java-jnlp-file', 'joda' => 'application/vnd.joost.joda-archive', 'jp2' => 'image/jp2', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpf' => 'image/jpx', 'jpg' => 'image/jpeg', 'jpg2' => 'image/jp2', 'jpgm' => 'video/jpm', 'jpgv' => 'video/jpeg', 'jph' => 'image/jph', 'jpm' => 'video/jpm', 'jpx' => 'image/jpx', 'js' => 'application/javascript', 'json' => 'application/json', 'json5' => 'application/json5', 'jsonld' => 'application/ld+json', 'jsonml' => 'application/jsonml+json', 'jsx' => 'text/jsx', 'jt' => 'model/jt', 'jxr' => 'image/jxr', 'jxra' => 'image/jxra', 'jxrs' => 'image/jxrs', 'jxs' => 'image/jxs', 'jxsc' => 'image/jxsc', 'jxsi' => 'image/jxsi', 'jxss' => 'image/jxss', 'kar' => 'audio/midi', 'karbon' => 'application/vnd.kde.karbon', 'kdb' => 'application/octet-stream', 'kdbx' => 'application/x-keepass2', 'key' => 'application/x-iwork-keynote-sffkey', 'kfo' => 'application/vnd.kde.kformula', 'kia' => 'application/vnd.kidspiration', 'kml' => 'application/vnd.google-earth.kml+xml', 'kmz' => 'application/vnd.google-earth.kmz', 'kne' => 'application/vnd.kinar', 'knp' => 'application/vnd.kinar', 'kon' => 'application/vnd.kde.kontour', 'kpr' => 'application/vnd.kde.kpresenter', 'kpt' => 'application/vnd.kde.kpresenter', 'kpxx' => 'application/vnd.ds-keypoint', 'ksp' => 'application/vnd.kde.kspread', 'ktr' => 'application/vnd.kahootz', 'ktx' => 'image/ktx', 'ktx2' => 'image/ktx2', 'ktz' => 'application/vnd.kahootz', 'kwd' => 'application/vnd.kde.kword', 'kwt' => 'application/vnd.kde.kword', 'lasxml' => 'application/vnd.las.las+xml', 'latex' => 'application/x-latex', 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', 'les' => 'application/vnd.hhe.lesson-player', 'less' => 'text/less', 'lgr' => 'application/lgr+xml', 'lha' => 'application/octet-stream', 'link66' => 'application/vnd.route66.link66+xml', 'list' => 'text/plain', 'list3820' => 'application/vnd.ibm.modcap', 'listafp' => 'application/vnd.ibm.modcap', 'litcoffee' => 'text/coffeescript', 'lnk' => 'application/x-ms-shortcut', 'log' => 'text/plain', 'lostxml' => 'application/lost+xml', 'lrf' => 'application/octet-stream', 'lrm' => 'application/vnd.ms-lrm', 'ltf' => 'application/vnd.frogans.ltf', 'lua' => 'text/x-lua', 'luac' => 'application/x-lua-bytecode', 'lvp' => 'audio/vnd.lucent.voice', 'lwp' => 'application/vnd.lotus-wordpro', 'lzh' => 'application/octet-stream', 'm1v' => 'video/mpeg', 'm2a' => 'audio/mpeg', 'm2v' => 'video/mpeg', 'm3a' => 'audio/mpeg', 'm3u' => 'text/plain', 'm3u8' => 'application/vnd.apple.mpegurl', 'm4a' => 'audio/x-m4a', 'm4p' => 'application/mp4', 'm4s' => 'video/iso.segment', 'm4u' => 'application/vnd.mpegurl', 'm4v' => 'video/x-m4v', 'm13' => 'application/x-msmediaview', 'm14' => 'application/x-msmediaview', 'm21' => 'application/mp21', 'ma' => 'application/mathematica', 'mads' => 'application/mads+xml', 'maei' => 'application/mmt-aei+xml', 'mag' => 'application/vnd.ecowin.chart', 'maker' => 'application/vnd.framemaker', 'man' => 'text/troff', 'manifest' => 'text/cache-manifest', 'map' => 'application/json', 'mar' => 'application/octet-stream', 'markdown' => 'text/markdown', 'mathml' => 'application/mathml+xml', 'mb' => 'application/mathematica', 'mbk' => 'application/vnd.mobius.mbk', 'mbox' => 'application/mbox', 'mc1' => 'application/vnd.medcalcdata', 'mcd' => 'application/vnd.mcd', 'mcurl' => 'text/vnd.curl.mcurl', 'md' => 'text/markdown', 'mdb' => 'application/x-msaccess', 'mdi' => 'image/vnd.ms-modi', 'mdx' => 'text/mdx', 'me' => 'text/troff', 'mesh' => 'model/mesh', 'meta4' => 'application/metalink4+xml', 'metalink' => 'application/metalink+xml', 'mets' => 'application/mets+xml', 'mfm' => 'application/vnd.mfmp', 'mft' => 'application/rpki-manifest', 'mgp' => 'application/vnd.osgeo.mapguide.package', 'mgz' => 'application/vnd.proteus.magazine', 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'mie' => 'application/x-mie', 'mif' => 'application/vnd.mif', 'mime' => 'message/rfc822', 'mj2' => 'video/mj2', 'mjp2' => 'video/mj2', 'mjs' => 'text/javascript', 'mk3d' => 'video/x-matroska', 'mka' => 'audio/x-matroska', 'mkd' => 'text/x-markdown', 'mks' => 'video/x-matroska', 'mkv' => 'video/x-matroska', 'mlp' => 'application/vnd.dolby.mlp', 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', 'mmf' => 'application/vnd.smaf', 'mml' => 'text/mathml', 'mmr' => 'image/vnd.fujixerox.edmics-mmr', 'mng' => 'video/x-mng', 'mny' => 'application/x-msmoney', 'mobi' => 'application/x-mobipocket-ebook', 'mods' => 'application/mods+xml', 'mov' => 'video/quicktime', 'movie' => 'video/x-sgi-movie', 'mp2' => 'audio/mpeg', 'mp2a' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'mp4' => 'video/mp4', 'mp4a' => 'audio/mp4', 'mp4s' => 'application/mp4', 'mp4v' => 'video/mp4', 'mp21' => 'application/mp21', 'mpc' => 'application/vnd.mophun.certificate', 'mpd' => 'application/dash+xml', 'mpe' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpf' => 'application/media-policy-dataset+xml', 'mpg' => 'video/mpeg', 'mpg4' => 'video/mp4', 'mpga' => 'audio/mpeg', 'mpkg' => 'application/vnd.apple.installer+xml', 'mpm' => 'application/vnd.blueice.multipass', 'mpn' => 'application/vnd.mophun.application', 'mpp' => 'application/vnd.ms-project', 'mpt' => 'application/vnd.ms-project', 'mpy' => 'application/vnd.ibm.minipay', 'mqy' => 'application/vnd.mobius.mqy', 'mrc' => 'application/marc', 'mrcx' => 'application/marcxml+xml', 'ms' => 'text/troff', 'mscml' => 'application/mediaservercontrol+xml', 'mseed' => 'application/vnd.fdsn.mseed', 'mseq' => 'application/vnd.mseq', 'msf' => 'application/vnd.epson.msf', 'msg' => 'application/vnd.ms-outlook', 'msh' => 'model/mesh', 'msi' => 'application/x-msdownload', 'msix' => 'application/msix', 'msixbundle' => 'application/msixbundle', 'msl' => 'application/vnd.mobius.msl', 'msm' => 'application/octet-stream', 'msp' => 'application/octet-stream', 'msty' => 'application/vnd.muvee.style', 'mtl' => 'model/mtl', 'mts' => 'model/vnd.mts', 'mus' => 'application/vnd.musician', 'musd' => 'application/mmt-usd+xml', 'musicxml' => 'application/vnd.recordare.musicxml+xml', 'mvb' => 'application/x-msmediaview', 'mvt' => 'application/vnd.mapbox-vector-tile', 'mwf' => 'application/vnd.mfer', 'mxf' => 'application/mxf', 'mxl' => 'application/vnd.recordare.musicxml', 'mxmf' => 'audio/mobile-xmf', 'mxml' => 'application/xv+xml', 'mxs' => 'application/vnd.triscape.mxs', 'mxu' => 'video/vnd.mpegurl', 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', 'n3' => 'text/n3', 'nb' => 'application/mathematica', 'nbp' => 'application/vnd.wolfram.player', 'nc' => 'application/x-netcdf', 'ncx' => 'application/x-dtbncx+xml', 'nfo' => 'text/x-nfo', 'ngdat' => 'application/vnd.nokia.n-gage.data', 'nitf' => 'application/vnd.nitf', 'nlu' => 'application/vnd.neurolanguage.nlu', 'nml' => 'application/vnd.enliven', 'nnd' => 'application/vnd.noblenet-directory', 'nns' => 'application/vnd.noblenet-sealer', 'nnw' => 'application/vnd.noblenet-web', 'npx' => 'image/vnd.net-fpx', 'nq' => 'application/n-quads', 'nsc' => 'application/x-conference', 'nsf' => 'application/vnd.lotus-notes', 'nt' => 'application/n-triples', 'ntf' => 'application/vnd.nitf', 'numbers' => 'application/x-iwork-numbers-sffnumbers', 'nzb' => 'application/x-nzb', 'oa2' => 'application/vnd.fujitsu.oasys2', 'oa3' => 'application/vnd.fujitsu.oasys3', 'oas' => 'application/vnd.fujitsu.oasys', 'obd' => 'application/x-msbinder', 'obgx' => 'application/vnd.openblox.game+xml', 'obj' => 'model/obj', 'oda' => 'application/oda', 'odb' => 'application/vnd.oasis.opendocument.database', 'odc' => 'application/vnd.oasis.opendocument.chart', 'odf' => 'application/vnd.oasis.opendocument.formula', 'odft' => 'application/vnd.oasis.opendocument.formula-template', 'odg' => 'application/vnd.oasis.opendocument.graphics', 'odi' => 'application/vnd.oasis.opendocument.image', 'odm' => 'application/vnd.oasis.opendocument.text-master', 'odp' => 'application/vnd.oasis.opendocument.presentation', 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', 'odt' => 'application/vnd.oasis.opendocument.text', 'oga' => 'audio/ogg', 'ogex' => 'model/vnd.opengex', 'ogg' => 'audio/ogg', 'ogv' => 'video/ogg', 'ogx' => 'application/ogg', 'omdoc' => 'application/omdoc+xml', 'onepkg' => 'application/onenote', 'onetmp' => 'application/onenote', 'onetoc' => 'application/onenote', 'onetoc2' => 'application/onenote', 'opf' => 'application/oebps-package+xml', 'opml' => 'text/x-opml', 'oprc' => 'application/vnd.palm', 'opus' => 'audio/ogg', 'org' => 'text/x-org', 'osf' => 'application/vnd.yamaha.openscoreformat', 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', 'osm' => 'application/vnd.openstreetmap.data+xml', 'otc' => 'application/vnd.oasis.opendocument.chart-template', 'otf' => 'font/otf', 'otg' => 'application/vnd.oasis.opendocument.graphics-template', 'oth' => 'application/vnd.oasis.opendocument.text-web', 'oti' => 'application/vnd.oasis.opendocument.image-template', 'otp' => 'application/vnd.oasis.opendocument.presentation-template', 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', 'ott' => 'application/vnd.oasis.opendocument.text-template', 'ova' => 'application/x-virtualbox-ova', 'ovf' => 'application/x-virtualbox-ovf', 'owl' => 'application/rdf+xml', 'oxps' => 'application/oxps', 'oxt' => 'application/vnd.openofficeorg.extension', 'p' => 'text/x-pascal', 'p7a' => 'application/x-pkcs7-signature', 'p7b' => 'application/x-pkcs7-certificates', 'p7c' => 'application/pkcs7-mime', 'p7m' => 'application/pkcs7-mime', 'p7r' => 'application/x-pkcs7-certreqresp', 'p7s' => 'application/pkcs7-signature', 'p8' => 'application/pkcs8', 'p10' => 'application/x-pkcs10', 'p12' => 'application/x-pkcs12', 'pac' => 'application/x-ns-proxy-autoconfig', 'pages' => 'application/x-iwork-pages-sffpages', 'pas' => 'text/x-pascal', 'paw' => 'application/vnd.pawaafile', 'pbd' => 'application/vnd.powerbuilder6', 'pbm' => 'image/x-portable-bitmap', 'pcap' => 'application/vnd.tcpdump.pcap', 'pcf' => 'application/x-font-pcf', 'pcl' => 'application/vnd.hp-pcl', 'pclxl' => 'application/vnd.hp-pclxl', 'pct' => 'image/x-pict', 'pcurl' => 'application/vnd.curl.pcurl', 'pcx' => 'image/x-pcx', 'pdb' => 'application/x-pilot', 'pde' => 'text/x-processing', 'pdf' => 'application/pdf', 'pem' => 'application/x-x509-user-cert', 'pfa' => 'application/x-font-type1', 'pfb' => 'application/x-font-type1', 'pfm' => 'application/x-font-type1', 'pfr' => 'application/font-tdpfr', 'pfx' => 'application/x-pkcs12', 'pgm' => 'image/x-portable-graymap', 'pgn' => 'application/x-chess-pgn', 'pgp' => 'application/pgp', 'phar' => 'application/octet-stream', 'php' => 'application/x-httpd-php', 'php3' => 'application/x-httpd-php', 'php4' => 'application/x-httpd-php', 'phps' => 'application/x-httpd-php-source', 'phtml' => 'application/x-httpd-php', 'pic' => 'image/x-pict', 'pkg' => 'application/octet-stream', 'pki' => 'application/pkixcmp', 'pkipath' => 'application/pkix-pkipath', 'pkpass' => 'application/vnd.apple.pkpass', 'pl' => 'application/x-perl', 'plb' => 'application/vnd.3gpp.pic-bw-large', 'plc' => 'application/vnd.mobius.plc', 'plf' => 'application/vnd.pocketlearn', 'pls' => 'application/pls+xml', 'pm' => 'application/x-perl', 'pml' => 'application/vnd.ctc-posml', 'png' => 'image/png', 'pnm' => 'image/x-portable-anymap', 'portpkg' => 'application/vnd.macports.portpkg', 'pot' => 'application/vnd.ms-powerpoint', 'potm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', 'ppa' => 'application/vnd.ms-powerpoint', 'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12', 'ppd' => 'application/vnd.cups-ppd', 'ppm' => 'image/x-portable-pixmap', 'pps' => 'application/vnd.ms-powerpoint', 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12', 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'ppt' => 'application/powerpoint', 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'pqa' => 'application/vnd.palm', 'prc' => 'model/prc', 'pre' => 'application/vnd.lotus-freelance', 'prf' => 'application/pics-rules', 'provx' => 'application/provenance+xml', 'ps' => 'application/postscript', 'psb' => 'application/vnd.3gpp.pic-bw-small', 'psd' => 'application/x-photoshop', 'psf' => 'application/x-font-linux-psf', 'pskcxml' => 'application/pskc+xml', 'pti' => 'image/prs.pti', 'ptid' => 'application/vnd.pvi.ptid1', 'pub' => 'application/x-mspublisher', 'pvb' => 'application/vnd.3gpp.pic-bw-var', 'pwn' => 'application/vnd.3m.post-it-notes', 'pya' => 'audio/vnd.ms-playready.media.pya', 'pyo' => 'model/vnd.pytha.pyox', 'pyox' => 'model/vnd.pytha.pyox', 'pyv' => 'video/vnd.ms-playready.media.pyv', 'qam' => 'application/vnd.epson.quickanime', 'qbo' => 'application/vnd.intu.qbo', 'qfx' => 'application/vnd.intu.qfx', 'qps' => 'application/vnd.publishare-delta-tree', 'qt' => 'video/quicktime', 'qwd' => 'application/vnd.quark.quarkxpress', 'qwt' => 'application/vnd.quark.quarkxpress', 'qxb' => 'application/vnd.quark.quarkxpress', 'qxd' => 'application/vnd.quark.quarkxpress', 'qxl' => 'application/vnd.quark.quarkxpress', 'qxt' => 'application/vnd.quark.quarkxpress', 'ra' => 'audio/x-realaudio', 'ram' => 'audio/x-pn-realaudio', 'raml' => 'application/raml+yaml', 'rapd' => 'application/route-apd+xml', 'rar' => 'application/x-rar', 'ras' => 'image/x-cmu-raster', 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', 'rdf' => 'application/rdf+xml', 'rdz' => 'application/vnd.data-vision.rdz', 'relo' => 'application/p2p-overlay+xml', 'rep' => 'application/vnd.businessobjects', 'res' => 'application/x-dtbresource+xml', 'rgb' => 'image/x-rgb', 'rif' => 'application/reginfo+xml', 'rip' => 'audio/vnd.rip', 'ris' => 'application/x-research-info-systems', 'rl' => 'application/resource-lists+xml', 'rlc' => 'image/vnd.fujixerox.edmics-rlc', 'rld' => 'application/resource-lists-diff+xml', 'rm' => 'audio/x-pn-realaudio', 'rmi' => 'audio/midi', 'rmp' => 'audio/x-pn-realaudio-plugin', 'rms' => 'application/vnd.jcp.javame.midlet-rms', 'rmvb' => 'application/vnd.rn-realmedia-vbr', 'rnc' => 'application/relax-ng-compact-syntax', 'rng' => 'application/xml', 'roa' => 'application/rpki-roa', 'roff' => 'text/troff', 'rp9' => 'application/vnd.cloanto.rp9', 'rpm' => 'audio/x-pn-realaudio-plugin', 'rpss' => 'application/vnd.nokia.radio-presets', 'rpst' => 'application/vnd.nokia.radio-preset', 'rq' => 'application/sparql-query', 'rs' => 'application/rls-services+xml', 'rsa' => 'application/x-pkcs7', 'rsat' => 'application/atsc-rsat+xml', 'rsd' => 'application/rsd+xml', 'rsheet' => 'application/urc-ressheet+xml', 'rss' => 'application/rss+xml', 'rtf' => 'text/rtf', 'rtx' => 'text/richtext', 'run' => 'application/x-makeself', 'rusd' => 'application/route-usd+xml', 'rv' => 'video/vnd.rn-realvideo', 's' => 'text/x-asm', 's3m' => 'audio/s3m', 'saf' => 'application/vnd.yamaha.smaf-audio', 'sass' => 'text/x-sass', 'sbml' => 'application/sbml+xml', 'sc' => 'application/vnd.ibm.secure-container', 'scd' => 'application/x-msschedule', 'scm' => 'application/vnd.lotus-screencam', 'scq' => 'application/scvp-cv-request', 'scs' => 'application/scvp-cv-response', 'scss' => 'text/x-scss', 'scurl' => 'text/vnd.curl.scurl', 'sda' => 'application/vnd.stardivision.draw', 'sdc' => 'application/vnd.stardivision.calc', 'sdd' => 'application/vnd.stardivision.impress', 'sdkd' => 'application/vnd.solent.sdkm+xml', 'sdkm' => 'application/vnd.solent.sdkm+xml', 'sdp' => 'application/sdp', 'sdw' => 'application/vnd.stardivision.writer', 'sea' => 'application/octet-stream', 'see' => 'application/vnd.seemail', 'seed' => 'application/vnd.fdsn.seed', 'sema' => 'application/vnd.sema', 'semd' => 'application/vnd.semd', 'semf' => 'application/vnd.semf', 'senmlx' => 'application/senml+xml', 'sensmlx' => 'application/sensml+xml', 'ser' => 'application/java-serialized-object', 'setpay' => 'application/set-payment-initiation', 'setreg' => 'application/set-registration-initiation', 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', 'sfs' => 'application/vnd.spotfire.sfs', 'sfv' => 'text/x-sfv', 'sgi' => 'image/sgi', 'sgl' => 'application/vnd.stardivision.writer-global', 'sgm' => 'text/sgml', 'sgml' => 'text/sgml', 'sh' => 'application/x-sh', 'shar' => 'application/x-shar', 'shex' => 'text/shex', 'shf' => 'application/shf+xml', 'shtml' => 'text/html', 'sid' => 'image/x-mrsid-image', 'sieve' => 'application/sieve', 'sig' => 'application/pgp-signature', 'sil' => 'audio/silk', 'silo' => 'model/mesh', 'sis' => 'application/vnd.symbian.install', 'sisx' => 'application/vnd.symbian.install', 'sit' => 'application/x-stuffit', 'sitx' => 'application/x-stuffitx', 'siv' => 'application/sieve', 'skd' => 'application/vnd.koan', 'skm' => 'application/vnd.koan', 'skp' => 'application/vnd.koan', 'skt' => 'application/vnd.koan', 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', 'slim' => 'text/slim', 'slm' => 'text/slim', 'sls' => 'application/route-s-tsid+xml', 'slt' => 'application/vnd.epson.salt', 'sm' => 'application/vnd.stepmania.stepchart', 'smf' => 'application/vnd.stardivision.math', 'smi' => 'application/smil', 'smil' => 'application/smil', 'smv' => 'video/x-smv', 'smzip' => 'application/vnd.stepmania.package', 'snd' => 'audio/basic', 'snf' => 'application/x-font-snf', 'so' => 'application/octet-stream', 'spc' => 'application/x-pkcs7-certificates', 'spdx' => 'text/spdx', 'spf' => 'application/vnd.yamaha.smaf-phrase', 'spl' => 'application/x-futuresplash', 'spot' => 'text/vnd.in3d.spot', 'spp' => 'application/scvp-vp-response', 'spq' => 'application/scvp-vp-request', 'spx' => 'audio/ogg', 'sql' => 'application/x-sql', 'src' => 'application/x-wais-source', 'srt' => 'application/x-subrip', 'sru' => 'application/sru+xml', 'srx' => 'application/sparql-results+xml', 'ssdl' => 'application/ssdl+xml', 'sse' => 'application/vnd.kodak-descriptor', 'ssf' => 'application/vnd.epson.ssf', 'ssml' => 'application/ssml+xml', 'sst' => 'application/octet-stream', 'st' => 'application/vnd.sailingtracker.track', 'stc' => 'application/vnd.sun.xml.calc.template', 'std' => 'application/vnd.sun.xml.draw.template', 'step' => 'application/STEP', 'stf' => 'application/vnd.wt.stf', 'sti' => 'application/vnd.sun.xml.impress.template', 'stk' => 'application/hyperstudio', 'stl' => 'model/stl', 'stp' => 'application/STEP', 'stpx' => 'model/step+xml', 'stpxz' => 'model/step-xml+zip', 'stpz' => 'model/step+zip', 'str' => 'application/vnd.pg.format', 'stw' => 'application/vnd.sun.xml.writer.template', 'styl' => 'text/stylus', 'stylus' => 'text/stylus', 'sub' => 'text/vnd.dvb.subtitle', 'sus' => 'application/vnd.sus-calendar', 'susp' => 'application/vnd.sus-calendar', 'sv4cpio' => 'application/x-sv4cpio', 'sv4crc' => 'application/x-sv4crc', 'svc' => 'application/vnd.dvb.service', 'svd' => 'application/vnd.svd', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', 'swa' => 'application/x-director', 'swf' => 'application/x-shockwave-flash', 'swi' => 'application/vnd.aristanetworks.swi', 'swidtag' => 'application/swid+xml', 'sxc' => 'application/vnd.sun.xml.calc', 'sxd' => 'application/vnd.sun.xml.draw', 'sxg' => 'application/vnd.sun.xml.writer.global', 'sxi' => 'application/vnd.sun.xml.impress', 'sxm' => 'application/vnd.sun.xml.math', 'sxw' => 'application/vnd.sun.xml.writer', 't' => 'text/troff', 't3' => 'application/x-t3vm-image', 't38' => 'image/t38', 'taglet' => 'application/vnd.mynfc', 'tao' => 'application/vnd.tao.intent-module-archive', 'tap' => 'image/vnd.tencent.tap', 'tar' => 'application/x-tar', 'tcap' => 'application/vnd.3gpp2.tcap', 'tcl' => 'application/x-tcl', 'td' => 'application/urc-targetdesc+xml', 'teacher' => 'application/vnd.smart.teacher', 'tei' => 'application/tei+xml', 'teicorpus' => 'application/tei+xml', 'tex' => 'application/x-tex', 'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'text' => 'text/plain', 'tfi' => 'application/thraud+xml', 'tfm' => 'application/x-tex-tfm', 'tfx' => 'image/tiff-fx', 'tga' => 'image/x-tga', 'tgz' => 'application/x-tar', 'thmx' => 'application/vnd.ms-officetheme', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'tk' => 'application/x-tcl', 'tmo' => 'application/vnd.tmobile-livetv', 'toml' => 'application/toml', 'torrent' => 'application/x-bittorrent', 'tpl' => 'application/vnd.groove-tool-template', 'tpt' => 'application/vnd.trid.tpt', 'tr' => 'text/troff', 'tra' => 'application/vnd.trueapp', 'trig' => 'application/trig', 'trm' => 'application/x-msterminal', 'ts' => 'video/mp2t', 'tsd' => 'application/timestamped-data', 'tsv' => 'text/tab-separated-values', 'ttc' => 'font/collection', 'ttf' => 'font/ttf', 'ttl' => 'text/turtle', 'ttml' => 'application/ttml+xml', 'twd' => 'application/vnd.simtech-mindmapper', 'twds' => 'application/vnd.simtech-mindmapper', 'txd' => 'application/vnd.genomatix.tuxedo', 'txf' => 'application/vnd.mobius.txf', 'txt' => 'text/plain', 'u3d' => 'model/u3d', 'u8dsn' => 'message/global-delivery-status', 'u8hdr' => 'message/global-headers', 'u8mdn' => 'message/global-disposition-notification', 'u8msg' => 'message/global', 'u32' => 'application/x-authorware-bin', 'ubj' => 'application/ubjson', 'udeb' => 'application/x-debian-package', 'ufd' => 'application/vnd.ufdl', 'ufdl' => 'application/vnd.ufdl', 'ulx' => 'application/x-glulx', 'umj' => 'application/vnd.umajin', 'unityweb' => 'application/vnd.unity', 'uo' => 'application/vnd.uoml+xml', 'uoml' => 'application/vnd.uoml+xml', 'uri' => 'text/uri-list', 'uris' => 'text/uri-list', 'urls' => 'text/uri-list', 'usda' => 'model/vnd.usda', 'usdz' => 'model/vnd.usdz+zip', 'ustar' => 'application/x-ustar', 'utz' => 'application/vnd.uiq.theme', 'uu' => 'text/x-uuencode', 'uva' => 'audio/vnd.dece.audio', 'uvd' => 'application/vnd.dece.data', 'uvf' => 'application/vnd.dece.data', 'uvg' => 'image/vnd.dece.graphic', 'uvh' => 'video/vnd.dece.hd', 'uvi' => 'image/vnd.dece.graphic', 'uvm' => 'video/vnd.dece.mobile', 'uvp' => 'video/vnd.dece.pd', 'uvs' => 'video/vnd.dece.sd', 'uvt' => 'application/vnd.dece.ttml+xml', 'uvu' => 'video/vnd.uvvu.mp4', 'uvv' => 'video/vnd.dece.video', 'uvva' => 'audio/vnd.dece.audio', 'uvvd' => 'application/vnd.dece.data', 'uvvf' => 'application/vnd.dece.data', 'uvvg' => 'image/vnd.dece.graphic', 'uvvh' => 'video/vnd.dece.hd', 'uvvi' => 'image/vnd.dece.graphic', 'uvvm' => 'video/vnd.dece.mobile', 'uvvp' => 'video/vnd.dece.pd', 'uvvs' => 'video/vnd.dece.sd', 'uvvt' => 'application/vnd.dece.ttml+xml', 'uvvu' => 'video/vnd.uvvu.mp4', 'uvvv' => 'video/vnd.dece.video', 'uvvx' => 'application/vnd.dece.unspecified', 'uvvz' => 'application/vnd.dece.zip', 'uvx' => 'application/vnd.dece.unspecified', 'uvz' => 'application/vnd.dece.zip', 'vbox' => 'application/x-virtualbox-vbox', 'vbox-extpack' => 'application/x-virtualbox-vbox-extpack', 'vcard' => 'text/vcard', 'vcd' => 'application/x-cdlink', 'vcf' => 'text/x-vcard', 'vcg' => 'application/vnd.groove-vcard', 'vcs' => 'text/x-vcalendar', 'vcx' => 'application/vnd.vcx', 'vdi' => 'application/x-virtualbox-vdi', 'vds' => 'model/vnd.sap.vds', 'vhd' => 'application/x-virtualbox-vhd', 'vis' => 'application/vnd.visionary', 'viv' => 'video/vnd.vivo', 'vlc' => 'application/videolan', 'vmdk' => 'application/x-virtualbox-vmdk', 'vob' => 'video/x-ms-vob', 'vor' => 'application/vnd.stardivision.writer', 'vox' => 'application/x-authorware-bin', 'vrml' => 'model/vrml', 'vsd' => 'application/vnd.visio', 'vsf' => 'application/vnd.vsf', 'vss' => 'application/vnd.visio', 'vst' => 'application/vnd.visio', 'vsw' => 'application/vnd.visio', 'vtf' => 'image/vnd.valve.source.texture', 'vtt' => 'text/vtt', 'vtu' => 'model/vnd.vtu', 'vxml' => 'application/voicexml+xml', 'w3d' => 'application/x-director', 'wad' => 'application/x-doom', 'wadl' => 'application/vnd.sun.wadl+xml', 'war' => 'application/java-archive', 'wasm' => 'application/wasm', 'wav' => 'audio/x-wav', 'wax' => 'audio/x-ms-wax', 'wbmp' => 'image/vnd.wap.wbmp', 'wbs' => 'application/vnd.criticaltools.wbs+xml', 'wbxml' => 'application/wbxml', 'wcm' => 'application/vnd.ms-works', 'wdb' => 'application/vnd.ms-works', 'wdp' => 'image/vnd.ms-photo', 'weba' => 'audio/webm', 'webapp' => 'application/x-web-app-manifest+json', 'webm' => 'video/webm', 'webmanifest' => 'application/manifest+json', 'webp' => 'image/webp', 'wg' => 'application/vnd.pmi.widget', 'wgsl' => 'text/wgsl', 'wgt' => 'application/widget', 'wif' => 'application/watcherinfo+xml', 'wks' => 'application/vnd.ms-works', 'wm' => 'video/x-ms-wm', 'wma' => 'audio/x-ms-wma', 'wmd' => 'application/x-ms-wmd', 'wmf' => 'image/wmf', 'wml' => 'text/vnd.wap.wml', 'wmlc' => 'application/wmlc', 'wmls' => 'text/vnd.wap.wmlscript', 'wmlsc' => 'application/vnd.wap.wmlscriptc', 'wmv' => 'video/x-ms-wmv', 'wmx' => 'video/x-ms-wmx', 'wmz' => 'application/x-msmetafile', 'woff' => 'font/woff', 'woff2' => 'font/woff2', 'word' => 'application/msword', 'wpd' => 'application/vnd.wordperfect', 'wpl' => 'application/vnd.ms-wpl', 'wps' => 'application/vnd.ms-works', 'wqd' => 'application/vnd.wqd', 'wri' => 'application/x-mswrite', 'wrl' => 'model/vrml', 'wsc' => 'message/vnd.wfa.wsc', 'wsdl' => 'application/wsdl+xml', 'wspolicy' => 'application/wspolicy+xml', 'wtb' => 'application/vnd.webturbo', 'wvx' => 'video/x-ms-wvx', 'x3d' => 'model/x3d+xml', 'x3db' => 'model/x3d+fastinfoset', 'x3dbz' => 'model/x3d+binary', 'x3dv' => 'model/x3d-vrml', 'x3dvz' => 'model/x3d+vrml', 'x3dz' => 'model/x3d+xml', 'x32' => 'application/x-authorware-bin', 'x_b' => 'model/vnd.parasolid.transmit.binary', 'x_t' => 'model/vnd.parasolid.transmit.text', 'xaml' => 'application/xaml+xml', 'xap' => 'application/x-silverlight-app', 'xar' => 'application/vnd.xara', 'xav' => 'application/xcap-att+xml', 'xbap' => 'application/x-ms-xbap', 'xbd' => 'application/vnd.fujixerox.docuworks.binder', 'xbm' => 'image/x-xbitmap', 'xca' => 'application/xcap-caps+xml', 'xcs' => 'application/calendar+xml', 'xdf' => 'application/xcap-diff+xml', 'xdm' => 'application/vnd.syncml.dm+xml', 'xdp' => 'application/vnd.adobe.xdp+xml', 'xdssc' => 'application/dssc+xml', 'xdw' => 'application/vnd.fujixerox.docuworks', 'xel' => 'application/xcap-el+xml', 'xenc' => 'application/xenc+xml', 'xer' => 'application/patch-ops-error+xml', 'xfdf' => 'application/xfdf', 'xfdl' => 'application/vnd.xfdl', 'xht' => 'application/xhtml+xml', 'xhtm' => 'application/vnd.pwg-xhtml-print+xml', 'xhtml' => 'application/xhtml+xml', 'xhvml' => 'application/xv+xml', 'xif' => 'image/vnd.xiff', 'xl' => 'application/excel', 'xla' => 'application/vnd.ms-excel', 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', 'xlc' => 'application/vnd.ms-excel', 'xlf' => 'application/xliff+xml', 'xlm' => 'application/vnd.ms-excel', 'xls' => 'application/vnd.ms-excel', 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xlt' => 'application/vnd.ms-excel', 'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12', 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'xlw' => 'application/vnd.ms-excel', 'xm' => 'audio/xm', 'xml' => 'application/xml', 'xns' => 'application/xcap-ns+xml', 'xo' => 'application/vnd.olpc-sugar', 'xop' => 'application/xop+xml', 'xpi' => 'application/x-xpinstall', 'xpl' => 'application/xproc+xml', 'xpm' => 'image/x-xpixmap', 'xpr' => 'application/vnd.is-xpr', 'xps' => 'application/vnd.ms-xpsdocument', 'xpw' => 'application/vnd.intercon.formnet', 'xpx' => 'application/vnd.intercon.formnet', 'xsd' => 'application/xml', 'xsf' => 'application/prs.xsf+xml', 'xsl' => 'application/xml', 'xslt' => 'application/xslt+xml', 'xsm' => 'application/vnd.syncml+xml', 'xspf' => 'application/xspf+xml', 'xul' => 'application/vnd.mozilla.xul+xml', 'xvm' => 'application/xv+xml', 'xvml' => 'application/xv+xml', 'xwd' => 'image/x-xwindowdump', 'xyz' => 'chemical/x-xyz', 'xz' => 'application/x-xz', 'yaml' => 'text/yaml', 'yang' => 'application/yang', 'yin' => 'application/yin+xml', 'yml' => 'text/yaml', 'ymp' => 'text/x-suse-ymp', 'z' => 'application/x-compress', 'z1' => 'application/x-zmachine', 'z2' => 'application/x-zmachine', 'z3' => 'application/x-zmachine', 'z4' => 'application/x-zmachine', 'z5' => 'application/x-zmachine', 'z6' => 'application/x-zmachine', 'z7' => 'application/x-zmachine', 'z8' => 'application/x-zmachine', 'zaz' => 'application/vnd.zzazz.deck+xml', 'zip' => 'application/zip', 'zir' => 'application/vnd.zul', 'zirz' => 'application/vnd.zul', 'zmm' => 'application/vnd.handheld-entertainment+xml', 'zsh' => 'text/x-scriptzsh']; + /** + * Determines the mimetype of a file by looking at its extension. + * + * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json + */ + public static function fromFilename(string $filename) : ?string + { + return self::fromExtension(\pathinfo($filename, \PATHINFO_EXTENSION)); + } + /** + * Maps a file extensions to a mimetype. + * + * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json + */ + public static function fromExtension(string $extension) : ?string + { + return self::MIME_TYPES[\strtolower($extension)] ?? null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MultipartStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MultipartStream.php new file mode 100644 index 00000000..d544d3d4 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/MultipartStream.php @@ -0,0 +1,130 @@ +boundary = $boundary ?: \bin2hex(\random_bytes(20)); + $this->stream = $this->createStream($elements); + } + public function getBoundary() : string + { + return $this->boundary; + } + public function isWritable() : bool + { + return \false; + } + /** + * Get the headers needed before transferring the content of a POST file + * + * @param string[] $headers + */ + private function getHeaders(array $headers) : string + { + $str = ''; + foreach ($headers as $key => $value) { + $str .= "{$key}: {$value}\r\n"; + } + return "--{$this->boundary}\r\n" . \trim($str) . "\r\n\r\n"; + } + /** + * Create the aggregate stream that will be used to upload the POST data + */ + protected function createStream(array $elements = []) : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + $stream = new \YoastSEO_Vendor\GuzzleHttp\Psr7\AppendStream(); + foreach ($elements as $element) { + if (!\is_array($element)) { + throw new \UnexpectedValueException('An array is expected'); + } + $this->addElement($stream, $element); + } + // Add the trailing boundary with CRLF + $stream->addStream(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor("--{$this->boundary}--\r\n")); + return $stream; + } + private function addElement(\YoastSEO_Vendor\GuzzleHttp\Psr7\AppendStream $stream, array $element) : void + { + foreach (['contents', 'name'] as $key) { + if (!\array_key_exists($key, $element)) { + throw new \InvalidArgumentException("A '{$key}' key is required"); + } + } + $element['contents'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($element['contents']); + if (empty($element['filename'])) { + $uri = $element['contents']->getMetadata('uri'); + if ($uri && \is_string($uri) && \substr($uri, 0, 6) !== 'php://' && \substr($uri, 0, 7) !== 'data://') { + $element['filename'] = $uri; + } + } + [$body, $headers] = $this->createElement($element['name'], $element['contents'], $element['filename'] ?? null, $element['headers'] ?? []); + $stream->addStream(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($this->getHeaders($headers))); + $stream->addStream($body); + $stream->addStream(\YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor("\r\n")); + } + /** + * @param string[] $headers + * + * @return array{0: StreamInterface, 1: string[]} + */ + private function createElement(string $name, \YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream, ?string $filename, array $headers) : array + { + // Set a default content-disposition header if one was no provided + $disposition = self::getHeader($headers, 'content-disposition'); + if (!$disposition) { + $headers['Content-Disposition'] = $filename === '0' || $filename ? \sprintf('form-data; name="%s"; filename="%s"', $name, \basename($filename)) : "form-data; name=\"{$name}\""; + } + // Set a default content-length header if one was no provided + $length = self::getHeader($headers, 'content-length'); + if (!$length) { + if ($length = $stream->getSize()) { + $headers['Content-Length'] = (string) $length; + } + } + // Set a default Content-Type if one was not supplied + $type = self::getHeader($headers, 'content-type'); + if (!$type && ($filename === '0' || $filename)) { + $headers['Content-Type'] = \YoastSEO_Vendor\GuzzleHttp\Psr7\MimeType::fromFilename($filename) ?? 'application/octet-stream'; + } + return [$stream, $headers]; + } + /** + * @param string[] $headers + */ + private static function getHeader(array $headers, string $key) : ?string + { + $lowercaseHeader = \strtolower($key); + foreach ($headers as $k => $v) { + if (\strtolower((string) $k) === $lowercaseHeader) { + return $v; + } + } + return null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/NoSeekStream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/NoSeekStream.php new file mode 100644 index 00000000..b4cc8ff1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/NoSeekStream.php @@ -0,0 +1,23 @@ +source = $source; + $this->size = $options['size'] ?? null; + $this->metadata = $options['metadata'] ?? []; + $this->buffer = new \YoastSEO_Vendor\GuzzleHttp\Psr7\BufferStream(); + } + public function __toString() : string + { + try { + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::copyToString($this); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + \trigger_error(\sprintf('%s::__toString exception: %s', self::class, (string) $e), \E_USER_ERROR); + return ''; + } + } + public function close() : void + { + $this->detach(); + } + public function detach() + { + $this->tellPos = 0; + $this->source = null; + return null; + } + public function getSize() : ?int + { + return $this->size; + } + public function tell() : int + { + return $this->tellPos; + } + public function eof() : bool + { + return $this->source === null; + } + public function isSeekable() : bool + { + return \false; + } + public function rewind() : void + { + $this->seek(0); + } + public function seek($offset, $whence = \SEEK_SET) : void + { + throw new \RuntimeException('Cannot seek a PumpStream'); + } + public function isWritable() : bool + { + return \false; + } + public function write($string) : int + { + throw new \RuntimeException('Cannot write to a PumpStream'); + } + public function isReadable() : bool + { + return \true; + } + public function read($length) : string + { + $data = $this->buffer->read($length); + $readLen = \strlen($data); + $this->tellPos += $readLen; + $remaining = $length - $readLen; + if ($remaining) { + $this->pump($remaining); + $data .= $this->buffer->read($remaining); + $this->tellPos += \strlen($data) - $readLen; + } + return $data; + } + public function getContents() : string + { + $result = ''; + while (!$this->eof()) { + $result .= $this->read(1000000); + } + return $result; + } + /** + * @return mixed + */ + public function getMetadata($key = null) + { + if (!$key) { + return $this->metadata; + } + return $this->metadata[$key] ?? null; + } + private function pump(int $length) : void + { + if ($this->source !== null) { + do { + $data = ($this->source)($length); + if ($data === \false || $data === null) { + $this->source = null; + return; + } + $this->buffer->write($data); + $length -= \strlen($data); + } while ($length > 0); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Query.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Query.php new file mode 100644 index 00000000..fe7e62f7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Query.php @@ -0,0 +1,104 @@ + '1', 'foo[b]' => '2'])`. + * + * @param string $str Query string to parse + * @param int|bool $urlEncoding How the query string is encoded + */ + public static function parse(string $str, $urlEncoding = \true) : array + { + $result = []; + if ($str === '') { + return $result; + } + if ($urlEncoding === \true) { + $decoder = function ($value) { + return \rawurldecode(\str_replace('+', ' ', (string) $value)); + }; + } elseif ($urlEncoding === \PHP_QUERY_RFC3986) { + $decoder = 'rawurldecode'; + } elseif ($urlEncoding === \PHP_QUERY_RFC1738) { + $decoder = 'urldecode'; + } else { + $decoder = function ($str) { + return $str; + }; + } + foreach (\explode('&', $str) as $kvp) { + $parts = \explode('=', $kvp, 2); + $key = $decoder($parts[0]); + $value = isset($parts[1]) ? $decoder($parts[1]) : null; + if (!\array_key_exists($key, $result)) { + $result[$key] = $value; + } else { + if (!\is_array($result[$key])) { + $result[$key] = [$result[$key]]; + } + $result[$key][] = $value; + } + } + return $result; + } + /** + * Build a query string from an array of key value pairs. + * + * This function can use the return value of `parse()` to build a query + * string. This function does not modify the provided keys when an array is + * encountered (like `http_build_query()` would). + * + * @param array $params Query string parameters. + * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986 + * to encode using RFC3986, or PHP_QUERY_RFC1738 + * to encode using RFC1738. + */ + public static function build(array $params, $encoding = \PHP_QUERY_RFC3986) : string + { + if (!$params) { + return ''; + } + if ($encoding === \false) { + $encoder = function (string $str) : string { + return $str; + }; + } elseif ($encoding === \PHP_QUERY_RFC3986) { + $encoder = 'rawurlencode'; + } elseif ($encoding === \PHP_QUERY_RFC1738) { + $encoder = 'urlencode'; + } else { + throw new \InvalidArgumentException('Invalid type'); + } + $qs = ''; + foreach ($params as $k => $v) { + $k = $encoder((string) $k); + if (!\is_array($v)) { + $qs .= $k; + $v = \is_bool($v) ? (int) $v : $v; + if ($v !== null) { + $qs .= '=' . $encoder((string) $v); + } + $qs .= '&'; + } else { + foreach ($v as $vv) { + $qs .= $k; + $vv = \is_bool($vv) ? (int) $vv : $vv; + if ($vv !== null) { + $qs .= '=' . $encoder((string) $vv); + } + $qs .= '&'; + } + } + } + return $qs ? (string) \substr($qs, 0, -1) : ''; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Request.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Request.php new file mode 100644 index 00000000..e1d59536 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Request.php @@ -0,0 +1,124 @@ +assertMethod($method); + if (!$uri instanceof \YoastSEO_Vendor\Psr\Http\Message\UriInterface) { + $uri = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri($uri); + } + $this->method = \strtoupper($method); + $this->uri = $uri; + $this->setHeaders($headers); + $this->protocol = $version; + if (!isset($this->headerNames['host'])) { + $this->updateHostFromUri(); + } + if ($body !== '' && $body !== null) { + $this->stream = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($body); + } + } + public function getRequestTarget() : string + { + if ($this->requestTarget !== null) { + return $this->requestTarget; + } + $target = $this->uri->getPath(); + if ($target === '') { + $target = '/'; + } + if ($this->uri->getQuery() != '') { + $target .= '?' . $this->uri->getQuery(); + } + return $target; + } + public function withRequestTarget($requestTarget) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + if (\preg_match('#\\s#', $requestTarget)) { + throw new \InvalidArgumentException('Invalid request target provided; cannot contain whitespace'); + } + $new = clone $this; + $new->requestTarget = $requestTarget; + return $new; + } + public function getMethod() : string + { + return $this->method; + } + public function withMethod($method) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + $this->assertMethod($method); + $new = clone $this; + $new->method = \strtoupper($method); + return $new; + } + public function getUri() : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + return $this->uri; + } + public function withUri(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri, $preserveHost = \false) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + if ($uri === $this->uri) { + return $this; + } + $new = clone $this; + $new->uri = $uri; + if (!$preserveHost || !isset($this->headerNames['host'])) { + $new->updateHostFromUri(); + } + return $new; + } + private function updateHostFromUri() : void + { + $host = $this->uri->getHost(); + if ($host == '') { + return; + } + if (($port = $this->uri->getPort()) !== null) { + $host .= ':' . $port; + } + if (isset($this->headerNames['host'])) { + $header = $this->headerNames['host']; + } else { + $header = 'Host'; + $this->headerNames['host'] = 'Host'; + } + // Ensure Host is the first header. + // See: https://datatracker.ietf.org/doc/html/rfc7230#section-5.4 + $this->headers = [$header => [$host]] + $this->headers; + } + /** + * @param mixed $method + */ + private function assertMethod($method) : void + { + if (!\is_string($method) || $method === '') { + throw new \InvalidArgumentException('Method must be a non-empty string.'); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Response.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Response.php new file mode 100644 index 00000000..492e85aa --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Response.php @@ -0,0 +1,78 @@ + 'Continue', 101 => 'Switching Protocols', 102 => 'Processing', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 207 => 'Multi-status', 208 => 'Already Reported', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 306 => 'Switch Proxy', 307 => 'Temporary Redirect', 308 => 'Permanent Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Time-out', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Large', 415 => 'Unsupported Media Type', 416 => 'Requested range not satisfiable', 417 => 'Expectation Failed', 418 => 'I\'m a teapot', 422 => 'Unprocessable Entity', 423 => 'Locked', 424 => 'Failed Dependency', 425 => 'Unordered Collection', 426 => 'Upgrade Required', 428 => 'Precondition Required', 429 => 'Too Many Requests', 431 => 'Request Header Fields Too Large', 451 => 'Unavailable For Legal Reasons', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Time-out', 505 => 'HTTP Version not supported', 506 => 'Variant Also Negotiates', 507 => 'Insufficient Storage', 508 => 'Loop Detected', 510 => 'Not Extended', 511 => 'Network Authentication Required']; + /** @var string */ + private $reasonPhrase; + /** @var int */ + private $statusCode; + /** + * @param int $status Status code + * @param (string|string[])[] $headers Response headers + * @param string|resource|StreamInterface|null $body Response body + * @param string $version Protocol version + * @param string|null $reason Reason phrase (when empty a default will be used based on the status code) + */ + public function __construct(int $status = 200, array $headers = [], $body = null, string $version = '1.1', string $reason = null) + { + $this->assertStatusCodeRange($status); + $this->statusCode = $status; + if ($body !== '' && $body !== null) { + $this->stream = \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::streamFor($body); + } + $this->setHeaders($headers); + if ($reason == '' && isset(self::PHRASES[$this->statusCode])) { + $this->reasonPhrase = self::PHRASES[$this->statusCode]; + } else { + $this->reasonPhrase = (string) $reason; + } + $this->protocol = $version; + } + public function getStatusCode() : int + { + return $this->statusCode; + } + public function getReasonPhrase() : string + { + return $this->reasonPhrase; + } + public function withStatus($code, $reasonPhrase = '') : \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface + { + $this->assertStatusCodeIsInteger($code); + $code = (int) $code; + $this->assertStatusCodeRange($code); + $new = clone $this; + $new->statusCode = $code; + if ($reasonPhrase == '' && isset(self::PHRASES[$new->statusCode])) { + $reasonPhrase = self::PHRASES[$new->statusCode]; + } + $new->reasonPhrase = (string) $reasonPhrase; + return $new; + } + /** + * @param mixed $statusCode + */ + private function assertStatusCodeIsInteger($statusCode) : void + { + if (\filter_var($statusCode, \FILTER_VALIDATE_INT) === \false) { + throw new \InvalidArgumentException('Status code must be an integer value.'); + } + } + private function assertStatusCodeRange(int $statusCode) : void + { + if ($statusCode < 100 || $statusCode >= 600) { + throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.'); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Rfc7230.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Rfc7230.php new file mode 100644 index 00000000..8bce7850 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Rfc7230.php @@ -0,0 +1,22 @@ +@,;:\\\"/[\\]?={}\x01- ]++):[ \t]*+((?:[ \t]*+[!-~\x80-\xff]++)*+)[ \t]*+\r?\n)m"; + public const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)"; +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/ServerRequest.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/ServerRequest.php new file mode 100644 index 00000000..154ff19d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/ServerRequest.php @@ -0,0 +1,266 @@ +serverParams = $serverParams; + parent::__construct($method, $uri, $headers, $body, $version); + } + /** + * Return an UploadedFile instance array. + * + * @param array $files An array which respect $_FILES structure + * + * @throws InvalidArgumentException for unrecognized values + */ + public static function normalizeFiles(array $files) : array + { + $normalized = []; + foreach ($files as $key => $value) { + if ($value instanceof \YoastSEO_Vendor\Psr\Http\Message\UploadedFileInterface) { + $normalized[$key] = $value; + } elseif (\is_array($value) && isset($value['tmp_name'])) { + $normalized[$key] = self::createUploadedFileFromSpec($value); + } elseif (\is_array($value)) { + $normalized[$key] = self::normalizeFiles($value); + continue; + } else { + throw new \InvalidArgumentException('Invalid value in files specification'); + } + } + return $normalized; + } + /** + * Create and return an UploadedFile instance from a $_FILES specification. + * + * If the specification represents an array of values, this method will + * delegate to normalizeNestedFileSpec() and return that return value. + * + * @param array $value $_FILES struct + * + * @return UploadedFileInterface|UploadedFileInterface[] + */ + private static function createUploadedFileFromSpec(array $value) + { + if (\is_array($value['tmp_name'])) { + return self::normalizeNestedFileSpec($value); + } + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\UploadedFile($value['tmp_name'], (int) $value['size'], (int) $value['error'], $value['name'], $value['type']); + } + /** + * Normalize an array of file specifications. + * + * Loops through all nested files and returns a normalized array of + * UploadedFileInterface instances. + * + * @return UploadedFileInterface[] + */ + private static function normalizeNestedFileSpec(array $files = []) : array + { + $normalizedFiles = []; + foreach (\array_keys($files['tmp_name']) as $key) { + $spec = ['tmp_name' => $files['tmp_name'][$key], 'size' => $files['size'][$key] ?? null, 'error' => $files['error'][$key] ?? null, 'name' => $files['name'][$key] ?? null, 'type' => $files['type'][$key] ?? null]; + $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec); + } + return $normalizedFiles; + } + /** + * Return a ServerRequest populated with superglobals: + * $_GET + * $_POST + * $_COOKIE + * $_FILES + * $_SERVER + */ + public static function fromGlobals() : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + $method = $_SERVER['REQUEST_METHOD'] ?? 'GET'; + $headers = \getallheaders(); + $uri = self::getUriFromGlobals(); + $body = new \YoastSEO_Vendor\GuzzleHttp\Psr7\CachingStream(new \YoastSEO_Vendor\GuzzleHttp\Psr7\LazyOpenStream('php://input', 'r+')); + $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? \str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1'; + $serverRequest = new \YoastSEO_Vendor\GuzzleHttp\Psr7\ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER); + return $serverRequest->withCookieParams($_COOKIE)->withQueryParams($_GET)->withParsedBody($_POST)->withUploadedFiles(self::normalizeFiles($_FILES)); + } + private static function extractHostAndPortFromAuthority(string $authority) : array + { + $uri = 'http://' . $authority; + $parts = \parse_url($uri); + if (\false === $parts) { + return [null, null]; + } + $host = $parts['host'] ?? null; + $port = $parts['port'] ?? null; + return [$host, $port]; + } + /** + * Get a Uri populated with values from $_SERVER. + */ + public static function getUriFromGlobals() : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $uri = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri(''); + $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http'); + $hasPort = \false; + if (isset($_SERVER['HTTP_HOST'])) { + [$host, $port] = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']); + if ($host !== null) { + $uri = $uri->withHost($host); + } + if ($port !== null) { + $hasPort = \true; + $uri = $uri->withPort($port); + } + } elseif (isset($_SERVER['SERVER_NAME'])) { + $uri = $uri->withHost($_SERVER['SERVER_NAME']); + } elseif (isset($_SERVER['SERVER_ADDR'])) { + $uri = $uri->withHost($_SERVER['SERVER_ADDR']); + } + if (!$hasPort && isset($_SERVER['SERVER_PORT'])) { + $uri = $uri->withPort($_SERVER['SERVER_PORT']); + } + $hasQuery = \false; + if (isset($_SERVER['REQUEST_URI'])) { + $requestUriParts = \explode('?', $_SERVER['REQUEST_URI'], 2); + $uri = $uri->withPath($requestUriParts[0]); + if (isset($requestUriParts[1])) { + $hasQuery = \true; + $uri = $uri->withQuery($requestUriParts[1]); + } + } + if (!$hasQuery && isset($_SERVER['QUERY_STRING'])) { + $uri = $uri->withQuery($_SERVER['QUERY_STRING']); + } + return $uri; + } + public function getServerParams() : array + { + return $this->serverParams; + } + public function getUploadedFiles() : array + { + return $this->uploadedFiles; + } + public function withUploadedFiles(array $uploadedFiles) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + $new = clone $this; + $new->uploadedFiles = $uploadedFiles; + return $new; + } + public function getCookieParams() : array + { + return $this->cookieParams; + } + public function withCookieParams(array $cookies) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + $new = clone $this; + $new->cookieParams = $cookies; + return $new; + } + public function getQueryParams() : array + { + return $this->queryParams; + } + public function withQueryParams(array $query) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + $new = clone $this; + $new->queryParams = $query; + return $new; + } + /** + * @return array|object|null + */ + public function getParsedBody() + { + return $this->parsedBody; + } + public function withParsedBody($data) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + $new = clone $this; + $new->parsedBody = $data; + return $new; + } + public function getAttributes() : array + { + return $this->attributes; + } + /** + * @return mixed + */ + public function getAttribute($attribute, $default = null) + { + if (\false === \array_key_exists($attribute, $this->attributes)) { + return $default; + } + return $this->attributes[$attribute]; + } + public function withAttribute($attribute, $value) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + $new = clone $this; + $new->attributes[$attribute] = $value; + return $new; + } + public function withoutAttribute($attribute) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface + { + if (\false === \array_key_exists($attribute, $this->attributes)) { + return $this; + } + $new = clone $this; + unset($new->attributes[$attribute]); + return $new; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Stream.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Stream.php new file mode 100644 index 00000000..94271834 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Stream.php @@ -0,0 +1,235 @@ +size = $options['size']; + } + $this->customMetadata = $options['metadata'] ?? []; + $this->stream = $stream; + $meta = \stream_get_meta_data($this->stream); + $this->seekable = $meta['seekable']; + $this->readable = (bool) \preg_match(self::READABLE_MODES, $meta['mode']); + $this->writable = (bool) \preg_match(self::WRITABLE_MODES, $meta['mode']); + $this->uri = $this->getMetadata('uri'); + } + /** + * Closes the stream when the destructed + */ + public function __destruct() + { + $this->close(); + } + public function __toString() : string + { + try { + if ($this->isSeekable()) { + $this->seek(0); + } + return $this->getContents(); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + \trigger_error(\sprintf('%s::__toString exception: %s', self::class, (string) $e), \E_USER_ERROR); + return ''; + } + } + public function getContents() : string + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + if (!$this->readable) { + throw new \RuntimeException('Cannot read from non-readable stream'); + } + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::tryGetContents($this->stream); + } + public function close() : void + { + if (isset($this->stream)) { + if (\is_resource($this->stream)) { + \fclose($this->stream); + } + $this->detach(); + } + } + public function detach() + { + if (!isset($this->stream)) { + return null; + } + $result = $this->stream; + unset($this->stream); + $this->size = $this->uri = null; + $this->readable = $this->writable = $this->seekable = \false; + return $result; + } + public function getSize() : ?int + { + if ($this->size !== null) { + return $this->size; + } + if (!isset($this->stream)) { + return null; + } + // Clear the stat cache if the stream has a URI + if ($this->uri) { + \clearstatcache(\true, $this->uri); + } + $stats = \fstat($this->stream); + if (\is_array($stats) && isset($stats['size'])) { + $this->size = $stats['size']; + return $this->size; + } + return null; + } + public function isReadable() : bool + { + return $this->readable; + } + public function isWritable() : bool + { + return $this->writable; + } + public function isSeekable() : bool + { + return $this->seekable; + } + public function eof() : bool + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + return \feof($this->stream); + } + public function tell() : int + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + $result = \ftell($this->stream); + if ($result === \false) { + throw new \RuntimeException('Unable to determine stream position'); + } + return $result; + } + public function rewind() : void + { + $this->seek(0); + } + public function seek($offset, $whence = \SEEK_SET) : void + { + $whence = (int) $whence; + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + if (!$this->seekable) { + throw new \RuntimeException('Stream is not seekable'); + } + if (\fseek($this->stream, $offset, $whence) === -1) { + throw new \RuntimeException('Unable to seek to stream position ' . $offset . ' with whence ' . \var_export($whence, \true)); + } + } + public function read($length) : string + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + if (!$this->readable) { + throw new \RuntimeException('Cannot read from non-readable stream'); + } + if ($length < 0) { + throw new \RuntimeException('Length parameter cannot be negative'); + } + if (0 === $length) { + return ''; + } + try { + $string = \fread($this->stream, $length); + } catch (\Exception $e) { + throw new \RuntimeException('Unable to read from stream', 0, $e); + } + if (\false === $string) { + throw new \RuntimeException('Unable to read from stream'); + } + return $string; + } + public function write($string) : int + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + if (!$this->writable) { + throw new \RuntimeException('Cannot write to a non-writable stream'); + } + // We can't know the size after writing anything + $this->size = null; + $result = \fwrite($this->stream, $string); + if ($result === \false) { + throw new \RuntimeException('Unable to write to stream'); + } + return $result; + } + /** + * @return mixed + */ + public function getMetadata($key = null) + { + if (!isset($this->stream)) { + return $key ? null : []; + } elseif (!$key) { + return $this->customMetadata + \stream_get_meta_data($this->stream); + } elseif (isset($this->customMetadata[$key])) { + return $this->customMetadata[$key]; + } + $meta = \stream_get_meta_data($this->stream); + return $meta[$key] ?? null; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamDecoratorTrait.php new file mode 100644 index 00000000..9af5c45a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamDecoratorTrait.php @@ -0,0 +1,131 @@ +stream = $stream; + } + /** + * Magic method used to create a new stream if streams are not added in + * the constructor of a decorator (e.g., LazyOpenStream). + * + * @return StreamInterface + */ + public function __get(string $name) + { + if ($name === 'stream') { + $this->stream = $this->createStream(); + return $this->stream; + } + throw new \UnexpectedValueException("{$name} not found on class"); + } + public function __toString() : string + { + try { + if ($this->isSeekable()) { + $this->seek(0); + } + return $this->getContents(); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + \trigger_error(\sprintf('%s::__toString exception: %s', self::class, (string) $e), \E_USER_ERROR); + return ''; + } + } + public function getContents() : string + { + return \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::copyToString($this); + } + /** + * Allow decorators to implement custom methods + * + * @return mixed + */ + public function __call(string $method, array $args) + { + /** @var callable $callable */ + $callable = [$this->stream, $method]; + $result = $callable(...$args); + // Always return the wrapped object if the result is a return $this + return $result === $this->stream ? $this : $result; + } + public function close() : void + { + $this->stream->close(); + } + /** + * @return mixed + */ + public function getMetadata($key = null) + { + return $this->stream->getMetadata($key); + } + public function detach() + { + return $this->stream->detach(); + } + public function getSize() : ?int + { + return $this->stream->getSize(); + } + public function eof() : bool + { + return $this->stream->eof(); + } + public function tell() : int + { + return $this->stream->tell(); + } + public function isReadable() : bool + { + return $this->stream->isReadable(); + } + public function isWritable() : bool + { + return $this->stream->isWritable(); + } + public function isSeekable() : bool + { + return $this->stream->isSeekable(); + } + public function rewind() : void + { + $this->seek(0); + } + public function seek($offset, $whence = \SEEK_SET) : void + { + $this->stream->seek($offset, $whence); + } + public function read($length) : string + { + return $this->stream->read($length); + } + public function write($string) : int + { + return $this->stream->write($string); + } + /** + * Implement in subclasses to dynamically create streams when requested. + * + * @throws \BadMethodCallException + */ + protected function createStream() : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + throw new \BadMethodCallException('Not implemented'); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamWrapper.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamWrapper.php new file mode 100644 index 00000000..c6b07587 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/StreamWrapper.php @@ -0,0 +1,142 @@ +isReadable()) { + $mode = $stream->isWritable() ? 'r+' : 'r'; + } elseif ($stream->isWritable()) { + $mode = 'w'; + } else { + throw new \InvalidArgumentException('The stream must be readable, ' . 'writable, or both.'); + } + return \fopen('guzzle://stream', $mode, \false, self::createStreamContext($stream)); + } + /** + * Creates a stream context that can be used to open a stream as a php stream resource. + * + * @return resource + */ + public static function createStreamContext(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream) + { + return \stream_context_create(['guzzle' => ['stream' => $stream]]); + } + /** + * Registers the stream wrapper if needed + */ + public static function register() : void + { + if (!\in_array('guzzle', \stream_get_wrappers())) { + \stream_wrapper_register('guzzle', __CLASS__); + } + } + public function stream_open(string $path, string $mode, int $options, string &$opened_path = null) : bool + { + $options = \stream_context_get_options($this->context); + if (!isset($options['guzzle']['stream'])) { + return \false; + } + $this->mode = $mode; + $this->stream = $options['guzzle']['stream']; + return \true; + } + public function stream_read(int $count) : string + { + return $this->stream->read($count); + } + public function stream_write(string $data) : int + { + return $this->stream->write($data); + } + public function stream_tell() : int + { + return $this->stream->tell(); + } + public function stream_eof() : bool + { + return $this->stream->eof(); + } + public function stream_seek(int $offset, int $whence) : bool + { + $this->stream->seek($offset, $whence); + return \true; + } + /** + * @return resource|false + */ + public function stream_cast(int $cast_as) + { + $stream = clone $this->stream; + $resource = $stream->detach(); + return $resource ?? \false; + } + /** + * @return array{ + * dev: int, + * ino: int, + * mode: int, + * nlink: int, + * uid: int, + * gid: int, + * rdev: int, + * size: int, + * atime: int, + * mtime: int, + * ctime: int, + * blksize: int, + * blocks: int + * } + */ + public function stream_stat() : array + { + static $modeMap = ['r' => 33060, 'rb' => 33060, 'r+' => 33206, 'w' => 33188, 'wb' => 33188]; + return ['dev' => 0, 'ino' => 0, 'mode' => $modeMap[$this->mode], 'nlink' => 0, 'uid' => 0, 'gid' => 0, 'rdev' => 0, 'size' => $this->stream->getSize() ?: 0, 'atime' => 0, 'mtime' => 0, 'ctime' => 0, 'blksize' => 0, 'blocks' => 0]; + } + /** + * @return array{ + * dev: int, + * ino: int, + * mode: int, + * nlink: int, + * uid: int, + * gid: int, + * rdev: int, + * size: int, + * atime: int, + * mtime: int, + * ctime: int, + * blksize: int, + * blocks: int + * } + */ + public function url_stat(string $path, int $flags) : array + { + return ['dev' => 0, 'ino' => 0, 'mode' => 0, 'nlink' => 0, 'uid' => 0, 'gid' => 0, 'rdev' => 0, 'size' => 0, 'atime' => 0, 'mtime' => 0, 'ctime' => 0, 'blksize' => 0, 'blocks' => 0]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UploadedFile.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UploadedFile.php new file mode 100644 index 00000000..b8142f8b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UploadedFile.php @@ -0,0 +1,152 @@ +setError($errorStatus); + $this->size = $size; + $this->clientFilename = $clientFilename; + $this->clientMediaType = $clientMediaType; + if ($this->isOk()) { + $this->setStreamOrFile($streamOrFile); + } + } + /** + * Depending on the value set file or stream variable + * + * @param StreamInterface|string|resource $streamOrFile + * + * @throws InvalidArgumentException + */ + private function setStreamOrFile($streamOrFile) : void + { + if (\is_string($streamOrFile)) { + $this->file = $streamOrFile; + } elseif (\is_resource($streamOrFile)) { + $this->stream = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Stream($streamOrFile); + } elseif ($streamOrFile instanceof \YoastSEO_Vendor\Psr\Http\Message\StreamInterface) { + $this->stream = $streamOrFile; + } else { + throw new \InvalidArgumentException('Invalid stream or file provided for UploadedFile'); + } + } + /** + * @throws InvalidArgumentException + */ + private function setError(int $error) : void + { + if (\false === \in_array($error, \YoastSEO_Vendor\GuzzleHttp\Psr7\UploadedFile::ERRORS, \true)) { + throw new \InvalidArgumentException('Invalid error status for UploadedFile'); + } + $this->error = $error; + } + private static function isStringNotEmpty($param) : bool + { + return \is_string($param) && \false === empty($param); + } + /** + * Return true if there is no upload error + */ + private function isOk() : bool + { + return $this->error === \UPLOAD_ERR_OK; + } + public function isMoved() : bool + { + return $this->moved; + } + /** + * @throws RuntimeException if is moved or not ok + */ + private function validateActive() : void + { + if (\false === $this->isOk()) { + throw new \RuntimeException('Cannot retrieve stream due to upload error'); + } + if ($this->isMoved()) { + throw new \RuntimeException('Cannot retrieve stream after it has already been moved'); + } + } + public function getStream() : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + $this->validateActive(); + if ($this->stream instanceof \YoastSEO_Vendor\Psr\Http\Message\StreamInterface) { + return $this->stream; + } + /** @var string $file */ + $file = $this->file; + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\LazyOpenStream($file, 'r+'); + } + public function moveTo($targetPath) : void + { + $this->validateActive(); + if (\false === self::isStringNotEmpty($targetPath)) { + throw new \InvalidArgumentException('Invalid path provided for move operation; must be a non-empty string'); + } + if ($this->file) { + $this->moved = \PHP_SAPI === 'cli' ? \rename($this->file, $targetPath) : \move_uploaded_file($this->file, $targetPath); + } else { + \YoastSEO_Vendor\GuzzleHttp\Psr7\Utils::copyToStream($this->getStream(), new \YoastSEO_Vendor\GuzzleHttp\Psr7\LazyOpenStream($targetPath, 'w')); + $this->moved = \true; + } + if (\false === $this->moved) { + throw new \RuntimeException(\sprintf('Uploaded file could not be moved to %s', $targetPath)); + } + } + public function getSize() : ?int + { + return $this->size; + } + public function getError() : int + { + return $this->error; + } + public function getClientFilename() : ?string + { + return $this->clientFilename; + } + public function getClientMediaType() : ?string + { + return $this->clientMediaType; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Uri.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Uri.php new file mode 100644 index 00000000..d7492bba --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Uri.php @@ -0,0 +1,572 @@ + 80, 'https' => 443, 'ftp' => 21, 'gopher' => 70, 'nntp' => 119, 'news' => 119, 'telnet' => 23, 'tn3270' => 23, 'imap' => 143, 'pop' => 110, 'ldap' => 389]; + /** + * Unreserved characters for use in a regex. + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-2.3 + */ + private const CHAR_UNRESERVED = 'a-zA-Z0-9_\\-\\.~'; + /** + * Sub-delims for use in a regex. + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-2.2 + */ + private const CHAR_SUB_DELIMS = '!\\$&\'\\(\\)\\*\\+,;='; + private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26']; + /** @var string Uri scheme. */ + private $scheme = ''; + /** @var string Uri user info. */ + private $userInfo = ''; + /** @var string Uri host. */ + private $host = ''; + /** @var int|null Uri port. */ + private $port; + /** @var string Uri path. */ + private $path = ''; + /** @var string Uri query string. */ + private $query = ''; + /** @var string Uri fragment. */ + private $fragment = ''; + /** @var string|null String representation */ + private $composedComponents; + public function __construct(string $uri = '') + { + if ($uri !== '') { + $parts = self::parse($uri); + if ($parts === \false) { + throw new \YoastSEO_Vendor\GuzzleHttp\Psr7\Exception\MalformedUriException("Unable to parse URI: {$uri}"); + } + $this->applyParts($parts); + } + } + /** + * UTF-8 aware \parse_url() replacement. + * + * The internal function produces broken output for non ASCII domain names + * (IDN) when used with locales other than "C". + * + * On the other hand, cURL understands IDN correctly only when UTF-8 locale + * is configured ("C.UTF-8", "en_US.UTF-8", etc.). + * + * @see https://bugs.php.net/bug.php?id=52923 + * @see https://www.php.net/manual/en/function.parse-url.php#114817 + * @see https://curl.haxx.se/libcurl/c/CURLOPT_URL.html#ENCODING + * + * @return array|false + */ + private static function parse(string $url) + { + // If IPv6 + $prefix = ''; + if (\preg_match('%^(.*://\\[[0-9:a-f]+\\])(.*?)$%', $url, $matches)) { + /** @var array{0:string, 1:string, 2:string} $matches */ + $prefix = $matches[1]; + $url = $matches[2]; + } + /** @var string */ + $encodedUrl = \preg_replace_callback('%[^:/@?&=#]+%usD', static function ($matches) { + return \urlencode($matches[0]); + }, $url); + $result = \parse_url($prefix . $encodedUrl); + if ($result === \false) { + return \false; + } + return \array_map('urldecode', $result); + } + public function __toString() : string + { + if ($this->composedComponents === null) { + $this->composedComponents = self::composeComponents($this->scheme, $this->getAuthority(), $this->path, $this->query, $this->fragment); + } + return $this->composedComponents; + } + /** + * Composes a URI reference string from its various components. + * + * Usually this method does not need to be called manually but instead is used indirectly via + * `Psr\Http\Message\UriInterface::__toString`. + * + * PSR-7 UriInterface treats an empty component the same as a missing component as + * getQuery(), getFragment() etc. always return a string. This explains the slight + * difference to RFC 3986 Section 5.3. + * + * Another adjustment is that the authority separator is added even when the authority is missing/empty + * for the "file" scheme. This is because PHP stream functions like `file_get_contents` only work with + * `file:///myfile` but not with `file:/myfile` although they are equivalent according to RFC 3986. But + * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to + * that format). + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.3 + */ + public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment) : string + { + $uri = ''; + // weak type checks to also accept null until we can add scalar type hints + if ($scheme != '') { + $uri .= $scheme . ':'; + } + if ($authority != '' || $scheme === 'file') { + $uri .= '//' . $authority; + } + if ($authority != '' && $path != '' && $path[0] != '/') { + $path = '/' . $path; + } + $uri .= $path; + if ($query != '') { + $uri .= '?' . $query; + } + if ($fragment != '') { + $uri .= '#' . $fragment; + } + return $uri; + } + /** + * Whether the URI has the default port of the current scheme. + * + * `Psr\Http\Message\UriInterface::getPort` may return null or the standard port. This method can be used + * independently of the implementation. + */ + public static function isDefaultPort(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : bool + { + return $uri->getPort() === null || isset(self::DEFAULT_PORTS[$uri->getScheme()]) && $uri->getPort() === self::DEFAULT_PORTS[$uri->getScheme()]; + } + /** + * Whether the URI is absolute, i.e. it has a scheme. + * + * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true + * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative + * to another URI, the base URI. Relative references can be divided into several forms: + * - network-path references, e.g. '//example.com/path' + * - absolute-path references, e.g. '/path' + * - relative-path references, e.g. 'subpath' + * + * @see Uri::isNetworkPathReference + * @see Uri::isAbsolutePathReference + * @see Uri::isRelativePathReference + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4 + */ + public static function isAbsolute(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : bool + { + return $uri->getScheme() !== ''; + } + /** + * Whether the URI is a network-path reference. + * + * A relative reference that begins with two slash characters is termed an network-path reference. + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2 + */ + public static function isNetworkPathReference(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : bool + { + return $uri->getScheme() === '' && $uri->getAuthority() !== ''; + } + /** + * Whether the URI is a absolute-path reference. + * + * A relative reference that begins with a single slash character is termed an absolute-path reference. + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2 + */ + public static function isAbsolutePathReference(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : bool + { + return $uri->getScheme() === '' && $uri->getAuthority() === '' && isset($uri->getPath()[0]) && $uri->getPath()[0] === '/'; + } + /** + * Whether the URI is a relative-path reference. + * + * A relative reference that does not begin with a slash character is termed a relative-path reference. + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2 + */ + public static function isRelativePathReference(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : bool + { + return $uri->getScheme() === '' && $uri->getAuthority() === '' && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/'); + } + /** + * Whether the URI is a same-document reference. + * + * A same-document reference refers to a URI that is, aside from its fragment + * component, identical to the base URI. When no base URI is given, only an empty + * URI reference (apart from its fragment) is considered a same-document reference. + * + * @param UriInterface $uri The URI to check + * @param UriInterface|null $base An optional base URI to compare against + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.4 + */ + public static function isSameDocumentReference(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri, \YoastSEO_Vendor\Psr\Http\Message\UriInterface $base = null) : bool + { + if ($base !== null) { + $uri = \YoastSEO_Vendor\GuzzleHttp\Psr7\UriResolver::resolve($base, $uri); + return $uri->getScheme() === $base->getScheme() && $uri->getAuthority() === $base->getAuthority() && $uri->getPath() === $base->getPath() && $uri->getQuery() === $base->getQuery(); + } + return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === ''; + } + /** + * Creates a new URI with a specific query string value removed. + * + * Any existing query string values that exactly match the provided key are + * removed. + * + * @param UriInterface $uri URI to use as a base. + * @param string $key Query string key to remove. + */ + public static function withoutQueryValue(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri, string $key) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $result = self::getFilteredQueryString($uri, [$key]); + return $uri->withQuery(\implode('&', $result)); + } + /** + * Creates a new URI with a specific query string value. + * + * Any existing query string values that exactly match the provided key are + * removed and replaced with the given key value pair. + * + * A value of null will set the query string key without a value, e.g. "key" + * instead of "key=value". + * + * @param UriInterface $uri URI to use as a base. + * @param string $key Key to set. + * @param string|null $value Value to set + */ + public static function withQueryValue(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri, string $key, ?string $value) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $result = self::getFilteredQueryString($uri, [$key]); + $result[] = self::generateQueryString($key, $value); + return $uri->withQuery(\implode('&', $result)); + } + /** + * Creates a new URI with multiple specific query string values. + * + * It has the same behavior as withQueryValue() but for an associative array of key => value. + * + * @param UriInterface $uri URI to use as a base. + * @param (string|null)[] $keyValueArray Associative array of key and values + */ + public static function withQueryValues(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri, array $keyValueArray) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $result = self::getFilteredQueryString($uri, \array_keys($keyValueArray)); + foreach ($keyValueArray as $key => $value) { + $result[] = self::generateQueryString((string) $key, $value !== null ? (string) $value : null); + } + return $uri->withQuery(\implode('&', $result)); + } + /** + * Creates a URI from a hash of `parse_url` components. + * + * @see https://www.php.net/manual/en/function.parse-url.php + * + * @throws MalformedUriException If the components do not form a valid URI. + */ + public static function fromParts(array $parts) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $uri = new self(); + $uri->applyParts($parts); + $uri->validateState(); + return $uri; + } + public function getScheme() : string + { + return $this->scheme; + } + public function getAuthority() : string + { + $authority = $this->host; + if ($this->userInfo !== '') { + $authority = $this->userInfo . '@' . $authority; + } + if ($this->port !== null) { + $authority .= ':' . $this->port; + } + return $authority; + } + public function getUserInfo() : string + { + return $this->userInfo; + } + public function getHost() : string + { + return $this->host; + } + public function getPort() : ?int + { + return $this->port; + } + public function getPath() : string + { + return $this->path; + } + public function getQuery() : string + { + return $this->query; + } + public function getFragment() : string + { + return $this->fragment; + } + public function withScheme($scheme) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $scheme = $this->filterScheme($scheme); + if ($this->scheme === $scheme) { + return $this; + } + $new = clone $this; + $new->scheme = $scheme; + $new->composedComponents = null; + $new->removeDefaultPort(); + $new->validateState(); + return $new; + } + public function withUserInfo($user, $password = null) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $info = $this->filterUserInfoComponent($user); + if ($password !== null) { + $info .= ':' . $this->filterUserInfoComponent($password); + } + if ($this->userInfo === $info) { + return $this; + } + $new = clone $this; + $new->userInfo = $info; + $new->composedComponents = null; + $new->validateState(); + return $new; + } + public function withHost($host) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $host = $this->filterHost($host); + if ($this->host === $host) { + return $this; + } + $new = clone $this; + $new->host = $host; + $new->composedComponents = null; + $new->validateState(); + return $new; + } + public function withPort($port) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $port = $this->filterPort($port); + if ($this->port === $port) { + return $this; + } + $new = clone $this; + $new->port = $port; + $new->composedComponents = null; + $new->removeDefaultPort(); + $new->validateState(); + return $new; + } + public function withPath($path) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $path = $this->filterPath($path); + if ($this->path === $path) { + return $this; + } + $new = clone $this; + $new->path = $path; + $new->composedComponents = null; + $new->validateState(); + return $new; + } + public function withQuery($query) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $query = $this->filterQueryAndFragment($query); + if ($this->query === $query) { + return $this; + } + $new = clone $this; + $new->query = $query; + $new->composedComponents = null; + return $new; + } + public function withFragment($fragment) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $fragment = $this->filterQueryAndFragment($fragment); + if ($this->fragment === $fragment) { + return $this; + } + $new = clone $this; + $new->fragment = $fragment; + $new->composedComponents = null; + return $new; + } + public function jsonSerialize() : string + { + return $this->__toString(); + } + /** + * Apply parse_url parts to a URI. + * + * @param array $parts Array of parse_url parts to apply. + */ + private function applyParts(array $parts) : void + { + $this->scheme = isset($parts['scheme']) ? $this->filterScheme($parts['scheme']) : ''; + $this->userInfo = isset($parts['user']) ? $this->filterUserInfoComponent($parts['user']) : ''; + $this->host = isset($parts['host']) ? $this->filterHost($parts['host']) : ''; + $this->port = isset($parts['port']) ? $this->filterPort($parts['port']) : null; + $this->path = isset($parts['path']) ? $this->filterPath($parts['path']) : ''; + $this->query = isset($parts['query']) ? $this->filterQueryAndFragment($parts['query']) : ''; + $this->fragment = isset($parts['fragment']) ? $this->filterQueryAndFragment($parts['fragment']) : ''; + if (isset($parts['pass'])) { + $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']); + } + $this->removeDefaultPort(); + } + /** + * @param mixed $scheme + * + * @throws \InvalidArgumentException If the scheme is invalid. + */ + private function filterScheme($scheme) : string + { + if (!\is_string($scheme)) { + throw new \InvalidArgumentException('Scheme must be a string'); + } + return \strtr($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); + } + /** + * @param mixed $component + * + * @throws \InvalidArgumentException If the user info is invalid. + */ + private function filterUserInfoComponent($component) : string + { + if (!\is_string($component)) { + throw new \InvalidArgumentException('User info must be a string'); + } + return \preg_replace_callback('/(?:[^%' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . ']+|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $component); + } + /** + * @param mixed $host + * + * @throws \InvalidArgumentException If the host is invalid. + */ + private function filterHost($host) : string + { + if (!\is_string($host)) { + throw new \InvalidArgumentException('Host must be a string'); + } + return \strtr($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); + } + /** + * @param mixed $port + * + * @throws \InvalidArgumentException If the port is invalid. + */ + private function filterPort($port) : ?int + { + if ($port === null) { + return null; + } + $port = (int) $port; + if (0 > $port || 0xffff < $port) { + throw new \InvalidArgumentException(\sprintf('Invalid port: %d. Must be between 0 and 65535', $port)); + } + return $port; + } + /** + * @param (string|int)[] $keys + * + * @return string[] + */ + private static function getFilteredQueryString(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri, array $keys) : array + { + $current = $uri->getQuery(); + if ($current === '') { + return []; + } + $decodedKeys = \array_map(function ($k) : string { + return \rawurldecode((string) $k); + }, $keys); + return \array_filter(\explode('&', $current), function ($part) use($decodedKeys) { + return !\in_array(\rawurldecode(\explode('=', $part)[0]), $decodedKeys, \true); + }); + } + private static function generateQueryString(string $key, ?string $value) : string + { + // Query string separators ("=", "&") within the key or value need to be encoded + // (while preventing double-encoding) before setting the query string. All other + // chars that need percent-encoding will be encoded by withQuery(). + $queryString = \strtr($key, self::QUERY_SEPARATORS_REPLACEMENT); + if ($value !== null) { + $queryString .= '=' . \strtr($value, self::QUERY_SEPARATORS_REPLACEMENT); + } + return $queryString; + } + private function removeDefaultPort() : void + { + if ($this->port !== null && self::isDefaultPort($this)) { + $this->port = null; + } + } + /** + * Filters the path of a URI + * + * @param mixed $path + * + * @throws \InvalidArgumentException If the path is invalid. + */ + private function filterPath($path) : string + { + if (!\is_string($path)) { + throw new \InvalidArgumentException('Path must be a string'); + } + return \preg_replace_callback('/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\\/]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $path); + } + /** + * Filters the query string or fragment of a URI. + * + * @param mixed $str + * + * @throws \InvalidArgumentException If the query or fragment is invalid. + */ + private function filterQueryAndFragment($str) : string + { + if (!\is_string($str)) { + throw new \InvalidArgumentException('Query and fragment must be a string'); + } + return \preg_replace_callback('/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\\/\\?]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $str); + } + private function rawurlencodeMatchZero(array $match) : string + { + return \rawurlencode($match[0]); + } + private function validateState() : void + { + if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) { + $this->host = self::HTTP_DEFAULT_HOST; + } + if ($this->getAuthority() === '') { + if (0 === \strpos($this->path, '//')) { + throw new \YoastSEO_Vendor\GuzzleHttp\Psr7\Exception\MalformedUriException('The path of a URI without an authority must not start with two slashes "//"'); + } + if ($this->scheme === '' && \false !== \strpos(\explode('/', $this->path, 2)[0], ':')) { + throw new \YoastSEO_Vendor\GuzzleHttp\Psr7\Exception\MalformedUriException('A relative URI must not have a path beginning with a segment containing a colon'); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriComparator.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriComparator.php new file mode 100644 index 00000000..b4a4dfa3 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriComparator.php @@ -0,0 +1,43 @@ +getHost(), $modified->getHost()) !== 0) { + return \true; + } + if ($original->getScheme() !== $modified->getScheme()) { + return \true; + } + if (self::computePort($original) !== self::computePort($modified)) { + return \true; + } + return \false; + } + private static function computePort(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : int + { + $port = $uri->getPort(); + if (null !== $port) { + return $port; + } + return 'https' === $uri->getScheme() ? 443 : 80; + } + private function __construct() + { + // cannot be instantiated + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriNormalizer.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriNormalizer.php new file mode 100644 index 00000000..0d1b9080 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriNormalizer.php @@ -0,0 +1,175 @@ +getPath() === '' && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')) { + $uri = $uri->withPath('/'); + } + if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') { + $uri = $uri->withHost(''); + } + if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri::isDefaultPort($uri)) { + $uri = $uri->withPort(null); + } + if ($flags & self::REMOVE_DOT_SEGMENTS && !\YoastSEO_Vendor\GuzzleHttp\Psr7\Uri::isRelativePathReference($uri)) { + $uri = $uri->withPath(\YoastSEO_Vendor\GuzzleHttp\Psr7\UriResolver::removeDotSegments($uri->getPath())); + } + if ($flags & self::REMOVE_DUPLICATE_SLASHES) { + $uri = $uri->withPath(\preg_replace('#//++#', '/', $uri->getPath())); + } + if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') { + $queryKeyValues = \explode('&', $uri->getQuery()); + \sort($queryKeyValues); + $uri = $uri->withQuery(\implode('&', $queryKeyValues)); + } + return $uri; + } + /** + * Whether two URIs can be considered equivalent. + * + * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also + * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be + * resolved against the same base URI. If this is not the case, determination of equivalence or difference of + * relative references does not mean anything. + * + * @param UriInterface $uri1 An URI to compare + * @param UriInterface $uri2 An URI to compare + * @param int $normalizations A bitmask of normalizations to apply, see constants + * + * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6.1 + */ + public static function isEquivalent(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri1, \YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS) : bool + { + return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations); + } + private static function capitalizePercentEncoding(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $regex = '/(?:%[A-Fa-f0-9]{2})++/'; + $callback = function (array $match) : string { + return \strtoupper($match[0]); + }; + return $uri->withPath(\preg_replace_callback($regex, $callback, $uri->getPath()))->withQuery(\preg_replace_callback($regex, $callback, $uri->getQuery())); + } + private static function decodeUnreservedCharacters(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $uri) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i'; + $callback = function (array $match) : string { + return \rawurldecode($match[0]); + }; + return $uri->withPath(\preg_replace_callback($regex, $callback, $uri->getPath()))->withQuery(\preg_replace_callback($regex, $callback, $uri->getQuery())); + } + private function __construct() + { + // cannot be instantiated + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriResolver.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriResolver.php new file mode 100644 index 00000000..45880283 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/UriResolver.php @@ -0,0 +1,180 @@ +getScheme() != '') { + return $rel->withPath(self::removeDotSegments($rel->getPath())); + } + if ($rel->getAuthority() != '') { + $targetAuthority = $rel->getAuthority(); + $targetPath = self::removeDotSegments($rel->getPath()); + $targetQuery = $rel->getQuery(); + } else { + $targetAuthority = $base->getAuthority(); + if ($rel->getPath() === '') { + $targetPath = $base->getPath(); + $targetQuery = $rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery(); + } else { + if ($rel->getPath()[0] === '/') { + $targetPath = $rel->getPath(); + } else { + if ($targetAuthority != '' && $base->getPath() === '') { + $targetPath = '/' . $rel->getPath(); + } else { + $lastSlashPos = \strrpos($base->getPath(), '/'); + if ($lastSlashPos === \false) { + $targetPath = $rel->getPath(); + } else { + $targetPath = \substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath(); + } + } + } + $targetPath = self::removeDotSegments($targetPath); + $targetQuery = $rel->getQuery(); + } + } + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri(\YoastSEO_Vendor\GuzzleHttp\Psr7\Uri::composeComponents($base->getScheme(), $targetAuthority, $targetPath, $targetQuery, $rel->getFragment())); + } + /** + * Returns the target URI as a relative reference from the base URI. + * + * This method is the counterpart to resolve(): + * + * (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target)) + * + * One use-case is to use the current request URI as base URI and then generate relative links in your documents + * to reduce the document size or offer self-contained downloadable document archives. + * + * $base = new Uri('http://example.com/a/b/'); + * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'. + * echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'. + * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'. + * echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'. + * + * This method also accepts a target that is already relative and will try to relativize it further. Only a + * relative-path reference will be returned as-is. + * + * echo UriResolver::relativize($base, new Uri('/a/b/c')); // prints 'c' as well + */ + public static function relativize(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $base, \YoastSEO_Vendor\Psr\Http\Message\UriInterface $target) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + if ($target->getScheme() !== '' && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')) { + return $target; + } + if (\YoastSEO_Vendor\GuzzleHttp\Psr7\Uri::isRelativePathReference($target)) { + // As the target is already highly relative we return it as-is. It would be possible to resolve + // the target with `$target = self::resolve($base, $target);` and then try make it more relative + // by removing a duplicate query. But let's not do that automatically. + return $target; + } + if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) { + return $target->withScheme(''); + } + // We must remove the path before removing the authority because if the path starts with two slashes, the URI + // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also + // invalid. + $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost(''); + if ($base->getPath() !== $target->getPath()) { + return $emptyPathUri->withPath(self::getRelativePath($base, $target)); + } + if ($base->getQuery() === $target->getQuery()) { + // Only the target fragment is left. And it must be returned even if base and target fragment are the same. + return $emptyPathUri->withQuery(''); + } + // If the base URI has a query but the target has none, we cannot return an empty path reference as it would + // inherit the base query component when resolving. + if ($target->getQuery() === '') { + $segments = \explode('/', $target->getPath()); + /** @var string $lastSegment */ + $lastSegment = \end($segments); + return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment); + } + return $emptyPathUri; + } + private static function getRelativePath(\YoastSEO_Vendor\Psr\Http\Message\UriInterface $base, \YoastSEO_Vendor\Psr\Http\Message\UriInterface $target) : string + { + $sourceSegments = \explode('/', $base->getPath()); + $targetSegments = \explode('/', $target->getPath()); + \array_pop($sourceSegments); + $targetLastSegment = \array_pop($targetSegments); + foreach ($sourceSegments as $i => $segment) { + if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) { + unset($sourceSegments[$i], $targetSegments[$i]); + } else { + break; + } + } + $targetSegments[] = $targetLastSegment; + $relativePath = \str_repeat('../', \count($sourceSegments)) . \implode('/', $targetSegments); + // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./". + // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used + // as the first segment of a relative-path reference, as it would be mistaken for a scheme name. + if ('' === $relativePath || \false !== \strpos(\explode('/', $relativePath, 2)[0], ':')) { + $relativePath = "./{$relativePath}"; + } elseif ('/' === $relativePath[0]) { + if ($base->getAuthority() != '' && $base->getPath() === '') { + // In this case an extra slash is added by resolve() automatically. So we must not add one here. + $relativePath = ".{$relativePath}"; + } else { + $relativePath = "./{$relativePath}"; + } + } + return $relativePath; + } + private function __construct() + { + // cannot be instantiated + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Utils.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Utils.php new file mode 100644 index 00000000..85b3e1de --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/psr7/src/Utils.php @@ -0,0 +1,375 @@ + $v) { + if (!\in_array(\strtolower((string) $k), $keys)) { + $result[$k] = $v; + } + } + return $result; + } + /** + * Copy the contents of a stream into another stream until the given number + * of bytes have been read. + * + * @param StreamInterface $source Stream to read from + * @param StreamInterface $dest Stream to write to + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @throws \RuntimeException on error. + */ + public static function copyToStream(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $source, \YoastSEO_Vendor\Psr\Http\Message\StreamInterface $dest, int $maxLen = -1) : void + { + $bufferSize = 8192; + if ($maxLen === -1) { + while (!$source->eof()) { + if (!$dest->write($source->read($bufferSize))) { + break; + } + } + } else { + $remaining = $maxLen; + while ($remaining > 0 && !$source->eof()) { + $buf = $source->read(\min($bufferSize, $remaining)); + $len = \strlen($buf); + if (!$len) { + break; + } + $remaining -= $len; + $dest->write($buf); + } + } + } + /** + * Copy the contents of a stream into a string until the given number of + * bytes have been read. + * + * @param StreamInterface $stream Stream to read + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @throws \RuntimeException on error. + */ + public static function copyToString(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream, int $maxLen = -1) : string + { + $buffer = ''; + if ($maxLen === -1) { + while (!$stream->eof()) { + $buf = $stream->read(1048576); + if ($buf === '') { + break; + } + $buffer .= $buf; + } + return $buffer; + } + $len = 0; + while (!$stream->eof() && $len < $maxLen) { + $buf = $stream->read($maxLen - $len); + if ($buf === '') { + break; + } + $buffer .= $buf; + $len = \strlen($buffer); + } + return $buffer; + } + /** + * Calculate a hash of a stream. + * + * This method reads the entire stream to calculate a rolling hash, based + * on PHP's `hash_init` functions. + * + * @param StreamInterface $stream Stream to calculate the hash for + * @param string $algo Hash algorithm (e.g. md5, crc32, etc) + * @param bool $rawOutput Whether or not to use raw output + * + * @throws \RuntimeException on error. + */ + public static function hash(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream, string $algo, bool $rawOutput = \false) : string + { + $pos = $stream->tell(); + if ($pos > 0) { + $stream->rewind(); + } + $ctx = \hash_init($algo); + while (!$stream->eof()) { + \hash_update($ctx, $stream->read(1048576)); + } + $out = \hash_final($ctx, $rawOutput); + $stream->seek($pos); + return $out; + } + /** + * Clone and modify a request with the given changes. + * + * This method is useful for reducing the number of clones needed to mutate + * a message. + * + * The changes can be one of: + * - method: (string) Changes the HTTP method. + * - set_headers: (array) Sets the given headers. + * - remove_headers: (array) Remove the given headers. + * - body: (mixed) Sets the given body. + * - uri: (UriInterface) Set the URI. + * - query: (string) Set the query string value of the URI. + * - version: (string) Set the protocol version. + * + * @param RequestInterface $request Request to clone and modify. + * @param array $changes Changes to apply. + */ + public static function modifyRequest(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $changes) : \YoastSEO_Vendor\Psr\Http\Message\RequestInterface + { + if (!$changes) { + return $request; + } + $headers = $request->getHeaders(); + if (!isset($changes['uri'])) { + $uri = $request->getUri(); + } else { + // Remove the host header if one is on the URI + if ($host = $changes['uri']->getHost()) { + $changes['set_headers']['Host'] = $host; + if ($port = $changes['uri']->getPort()) { + $standardPorts = ['http' => 80, 'https' => 443]; + $scheme = $changes['uri']->getScheme(); + if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { + $changes['set_headers']['Host'] .= ':' . $port; + } + } + } + $uri = $changes['uri']; + } + if (!empty($changes['remove_headers'])) { + $headers = self::caselessRemove($changes['remove_headers'], $headers); + } + if (!empty($changes['set_headers'])) { + $headers = self::caselessRemove(\array_keys($changes['set_headers']), $headers); + $headers = $changes['set_headers'] + $headers; + } + if (isset($changes['query'])) { + $uri = $uri->withQuery($changes['query']); + } + if ($request instanceof \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface) { + $new = (new \YoastSEO_Vendor\GuzzleHttp\Psr7\ServerRequest($changes['method'] ?? $request->getMethod(), $uri, $headers, $changes['body'] ?? $request->getBody(), $changes['version'] ?? $request->getProtocolVersion(), $request->getServerParams()))->withParsedBody($request->getParsedBody())->withQueryParams($request->getQueryParams())->withCookieParams($request->getCookieParams())->withUploadedFiles($request->getUploadedFiles()); + foreach ($request->getAttributes() as $key => $value) { + $new = $new->withAttribute($key, $value); + } + return $new; + } + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Request($changes['method'] ?? $request->getMethod(), $uri, $headers, $changes['body'] ?? $request->getBody(), $changes['version'] ?? $request->getProtocolVersion()); + } + /** + * Read a line from the stream up to the maximum allowed buffer length. + * + * @param StreamInterface $stream Stream to read from + * @param int|null $maxLength Maximum buffer length + */ + public static function readLine(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $stream, int $maxLength = null) : string + { + $buffer = ''; + $size = 0; + while (!$stream->eof()) { + if ('' === ($byte = $stream->read(1))) { + return $buffer; + } + $buffer .= $byte; + // Break when a new line is found or the max length - 1 is reached + if ($byte === "\n" || ++$size === $maxLength - 1) { + break; + } + } + return $buffer; + } + /** + * Create a new stream based on the input type. + * + * Options is an associative array that can contain the following keys: + * - metadata: Array of custom metadata. + * - size: Size of the stream. + * + * This method accepts the following `$resource` types: + * - `Psr\Http\Message\StreamInterface`: Returns the value as-is. + * - `string`: Creates a stream object that uses the given string as the contents. + * - `resource`: Creates a stream object that wraps the given PHP stream resource. + * - `Iterator`: If the provided value implements `Iterator`, then a read-only + * stream object will be created that wraps the given iterable. Each time the + * stream is read from, data from the iterator will fill a buffer and will be + * continuously called until the buffer is equal to the requested read size. + * Subsequent read calls will first read from the buffer and then call `next` + * on the underlying iterator until it is exhausted. + * - `object` with `__toString()`: If the object has the `__toString()` method, + * the object will be cast to a string and then a stream will be returned that + * uses the string value. + * - `NULL`: When `null` is passed, an empty stream object is returned. + * - `callable` When a callable is passed, a read-only stream object will be + * created that invokes the given callable. The callable is invoked with the + * number of suggested bytes to read. The callable can return any number of + * bytes, but MUST return `false` when there is no more data to return. The + * stream object that wraps the callable will invoke the callable until the + * number of requested bytes are available. Any additional bytes will be + * buffered and used in subsequent reads. + * + * @param resource|string|int|float|bool|StreamInterface|callable|\Iterator|null $resource Entity body data + * @param array{size?: int, metadata?: array} $options Additional options + * + * @throws \InvalidArgumentException if the $resource arg is not valid. + */ + public static function streamFor($resource = '', array $options = []) : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface + { + if (\is_scalar($resource)) { + $stream = self::tryFopen('php://temp', 'r+'); + if ($resource !== '') { + \fwrite($stream, (string) $resource); + \fseek($stream, 0); + } + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Stream($stream, $options); + } + switch (\gettype($resource)) { + case 'resource': + /* + * The 'php://input' is a special stream with quirks and inconsistencies. + * We avoid using that stream by reading it into php://temp + */ + /** @var resource $resource */ + if ((\stream_get_meta_data($resource)['uri'] ?? '') === 'php://input') { + $stream = self::tryFopen('php://temp', 'w+'); + \stream_copy_to_stream($resource, $stream); + \fseek($stream, 0); + $resource = $stream; + } + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Stream($resource, $options); + case 'object': + /** @var object $resource */ + if ($resource instanceof \YoastSEO_Vendor\Psr\Http\Message\StreamInterface) { + return $resource; + } elseif ($resource instanceof \Iterator) { + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\PumpStream(function () use($resource) { + if (!$resource->valid()) { + return \false; + } + $result = $resource->current(); + $resource->next(); + return $result; + }, $options); + } elseif (\method_exists($resource, '__toString')) { + return self::streamFor((string) $resource, $options); + } + break; + case 'NULL': + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Stream(self::tryFopen('php://temp', 'r+'), $options); + } + if (\is_callable($resource)) { + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\PumpStream($resource, $options); + } + throw new \InvalidArgumentException('Invalid resource type: ' . \gettype($resource)); + } + /** + * Safely opens a PHP stream resource using a filename. + * + * When fopen fails, PHP normally raises a warning. This function adds an + * error handler that checks for errors and throws an exception instead. + * + * @param string $filename File to open + * @param string $mode Mode used to open the file + * + * @return resource + * + * @throws \RuntimeException if the file cannot be opened + */ + public static function tryFopen(string $filename, string $mode) + { + $ex = null; + \set_error_handler(static function (int $errno, string $errstr) use($filename, $mode, &$ex) : bool { + $ex = new \RuntimeException(\sprintf('Unable to open "%s" using mode "%s": %s', $filename, $mode, $errstr)); + return \true; + }); + try { + /** @var resource $handle */ + $handle = \fopen($filename, $mode); + } catch (\Throwable $e) { + $ex = new \RuntimeException(\sprintf('Unable to open "%s" using mode "%s": %s', $filename, $mode, $e->getMessage()), 0, $e); + } + \restore_error_handler(); + if ($ex) { + /** @var $ex \RuntimeException */ + throw $ex; + } + return $handle; + } + /** + * Safely gets the contents of a given stream. + * + * When stream_get_contents fails, PHP normally raises a warning. This + * function adds an error handler that checks for errors and throws an + * exception instead. + * + * @param resource $stream + * + * @throws \RuntimeException if the stream cannot be read + */ + public static function tryGetContents($stream) : string + { + $ex = null; + \set_error_handler(static function (int $errno, string $errstr) use(&$ex) : bool { + $ex = new \RuntimeException(\sprintf('Unable to read stream contents: %s', $errstr)); + return \true; + }); + try { + /** @var string|false $contents */ + $contents = \stream_get_contents($stream); + if ($contents === \false) { + $ex = new \RuntimeException('Unable to read stream contents'); + } + } catch (\Throwable $e) { + $ex = new \RuntimeException(\sprintf('Unable to read stream contents: %s', $e->getMessage()), 0, $e); + } + \restore_error_handler(); + if ($ex) { + /** @var $ex \RuntimeException */ + throw $ex; + } + return $contents; + } + /** + * Returns a UriInterface for the given value. + * + * This function accepts a string or UriInterface and returns a + * UriInterface for the given value. If the value is already a + * UriInterface, it is returned as-is. + * + * @param string|UriInterface $uri + * + * @throws \InvalidArgumentException + */ + public static function uriFor($uri) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface + { + if ($uri instanceof \YoastSEO_Vendor\Psr\Http\Message\UriInterface) { + return $uri; + } + if (\is_string($uri)) { + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri($uri); + } + throw new \InvalidArgumentException('URI must be a string or UriInterface'); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AbstractGrant.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AbstractGrant.php new file mode 100644 index 00000000..61e883c1 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AbstractGrant.php @@ -0,0 +1,72 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Grant; + +use YoastSEO_Vendor\League\OAuth2\Client\Tool\RequiredParameterTrait; +/** + * Represents a type of authorization grant. + * + * An authorization grant is a credential representing the resource + * owner's authorization (to access its protected resources) used by the + * client to obtain an access token. OAuth 2.0 defines four + * grant types -- authorization code, implicit, resource owner password + * credentials, and client credentials -- as well as an extensibility + * mechanism for defining additional types. + * + * @link http://tools.ietf.org/html/rfc6749#section-1.3 Authorization Grant (RFC 6749, §1.3) + */ +abstract class AbstractGrant +{ + use RequiredParameterTrait; + /** + * Returns the name of this grant, eg. 'grant_name', which is used as the + * grant type when encoding URL query parameters. + * + * @return string + */ + protected abstract function getName(); + /** + * Returns a list of all required request parameters. + * + * @return array + */ + protected abstract function getRequiredRequestParameters(); + /** + * Returns this grant's name as its string representation. This allows for + * string interpolation when building URL query parameters. + * + * @return string + */ + public function __toString() + { + return $this->getName(); + } + /** + * Prepares an access token request's parameters by checking that all + * required parameters are set, then merging with any given defaults. + * + * @param array $defaults + * @param array $options + * @return array + */ + public function prepareRequestParameters(array $defaults, array $options) + { + $defaults['grant_type'] = $this->getName(); + $required = $this->getRequiredRequestParameters(); + $provided = \array_merge($defaults, $options); + $this->checkRequiredParameters($required, $provided); + return $provided; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AuthorizationCode.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AuthorizationCode.php new file mode 100644 index 00000000..cec79b7b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/AuthorizationCode.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Grant; + +/** + * Represents an authorization code grant. + * + * @link http://tools.ietf.org/html/rfc6749#section-1.3.1 Authorization Code (RFC 6749, §1.3.1) + */ +class AuthorizationCode extends \YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant +{ + /** + * @inheritdoc + */ + protected function getName() + { + return 'authorization_code'; + } + /** + * @inheritdoc + */ + protected function getRequiredRequestParameters() + { + return ['code']; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/ClientCredentials.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/ClientCredentials.php new file mode 100644 index 00000000..57ce31f9 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/ClientCredentials.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Grant; + +/** + * Represents a client credentials grant. + * + * @link http://tools.ietf.org/html/rfc6749#section-1.3.4 Client Credentials (RFC 6749, §1.3.4) + */ +class ClientCredentials extends \YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant +{ + /** + * @inheritdoc + */ + protected function getName() + { + return 'client_credentials'; + } + /** + * @inheritdoc + */ + protected function getRequiredRequestParameters() + { + return []; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php new file mode 100644 index 00000000..6cad7118 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php @@ -0,0 +1,25 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Grant\Exception; + +use InvalidArgumentException; +/** + * Exception thrown if the grant does not extend from AbstractGrant. + * + * @see League\OAuth2\Client\Grant\AbstractGrant + */ +class InvalidGrantException extends \InvalidArgumentException +{ +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/GrantFactory.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/GrantFactory.php new file mode 100644 index 00000000..81f463df --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/GrantFactory.php @@ -0,0 +1,91 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Grant; + +use YoastSEO_Vendor\League\OAuth2\Client\Grant\Exception\InvalidGrantException; +/** + * Represents a factory used when retrieving an authorization grant type. + */ +class GrantFactory +{ + /** + * @var array + */ + protected $registry = []; + /** + * Defines a grant singleton in the registry. + * + * @param string $name + * @param AbstractGrant $grant + * @return self + */ + public function setGrant($name, \YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant $grant) + { + $this->registry[$name] = $grant; + return $this; + } + /** + * Returns a grant singleton by name. + * + * If the grant has not be registered, a default grant will be loaded. + * + * @param string $name + * @return AbstractGrant + */ + public function getGrant($name) + { + if (empty($this->registry[$name])) { + $this->registerDefaultGrant($name); + } + return $this->registry[$name]; + } + /** + * Registers a default grant singleton by name. + * + * @param string $name + * @return self + */ + protected function registerDefaultGrant($name) + { + // PascalCase the grant. E.g: 'authorization_code' becomes 'AuthorizationCode' + $class = \str_replace(' ', '', \ucwords(\str_replace(['-', '_'], ' ', $name))); + $class = 'YoastSEO_Vendor\\League\\OAuth2\\Client\\Grant\\' . $class; + $this->checkGrant($class); + return $this->setGrant($name, new $class()); + } + /** + * Determines if a variable is a valid grant. + * + * @param mixed $class + * @return boolean + */ + public function isGrant($class) + { + return \is_subclass_of($class, \YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant::class); + } + /** + * Checks if a variable is a valid grant. + * + * @throws InvalidGrantException + * @param mixed $class + * @return void + */ + public function checkGrant($class) + { + if (!$this->isGrant($class)) { + throw new \YoastSEO_Vendor\League\OAuth2\Client\Grant\Exception\InvalidGrantException(\sprintf('Grant "%s" must extend AbstractGrant', \is_object($class) ? \get_class($class) : $class)); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Password.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Password.php new file mode 100644 index 00000000..84e5920a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/Password.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Grant; + +/** + * Represents a resource owner password credentials grant. + * + * @link http://tools.ietf.org/html/rfc6749#section-1.3.3 Resource Owner Password Credentials (RFC 6749, §1.3.3) + */ +class Password extends \YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant +{ + /** + * @inheritdoc + */ + protected function getName() + { + return 'password'; + } + /** + * @inheritdoc + */ + protected function getRequiredRequestParameters() + { + return ['username', 'password']; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/RefreshToken.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/RefreshToken.php new file mode 100644 index 00000000..f5b149dc --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Grant/RefreshToken.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Grant; + +/** + * Represents a refresh token grant. + * + * @link http://tools.ietf.org/html/rfc6749#section-6 Refreshing an Access Token (RFC 6749, §6) + */ +class RefreshToken extends \YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant +{ + /** + * @inheritdoc + */ + protected function getName() + { + return 'refresh_token'; + } + /** + * @inheritdoc + */ + protected function getRequiredRequestParameters() + { + return ['refresh_token']; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php new file mode 100644 index 00000000..b5addc40 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\OptionProvider; + +use InvalidArgumentException; +/** + * Add http basic auth into access token request options + * @link https://tools.ietf.org/html/rfc6749#section-2.3.1 + */ +class HttpBasicAuthOptionProvider extends \YoastSEO_Vendor\League\OAuth2\Client\OptionProvider\PostAuthOptionProvider +{ + /** + * @inheritdoc + */ + public function getAccessTokenOptions($method, array $params) + { + if (empty($params['client_id']) || empty($params['client_secret'])) { + throw new \InvalidArgumentException('clientId and clientSecret are required for http basic auth'); + } + $encodedCredentials = \base64_encode(\sprintf('%s:%s', $params['client_id'], $params['client_secret'])); + unset($params['client_id'], $params['client_secret']); + $options = parent::getAccessTokenOptions($method, $params); + $options['headers']['Authorization'] = 'Basic ' . $encodedCredentials; + return $options; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php new file mode 100644 index 00000000..8fc66e7e --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php @@ -0,0 +1,30 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\OptionProvider; + +/** + * Interface for access token options provider + */ +interface OptionProviderInterface +{ + /** + * Builds request options used for requesting an access token. + * + * @param string $method + * @param array $params + * @return array + */ + public function getAccessTokenOptions($method, array $params); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php new file mode 100644 index 00000000..4813fd80 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php @@ -0,0 +1,46 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\OptionProvider; + +use YoastSEO_Vendor\League\OAuth2\Client\Provider\AbstractProvider; +use YoastSEO_Vendor\League\OAuth2\Client\Tool\QueryBuilderTrait; +/** + * Provide options for access token + */ +class PostAuthOptionProvider implements \YoastSEO_Vendor\League\OAuth2\Client\OptionProvider\OptionProviderInterface +{ + use QueryBuilderTrait; + /** + * @inheritdoc + */ + public function getAccessTokenOptions($method, array $params) + { + $options = ['headers' => ['content-type' => 'application/x-www-form-urlencoded']]; + if ($method === \YoastSEO_Vendor\League\OAuth2\Client\Provider\AbstractProvider::METHOD_POST) { + $options['body'] = $this->getAccessTokenBody($params); + } + return $options; + } + /** + * Returns the request body for requesting an access token. + * + * @param array $params + * @return string + */ + protected function getAccessTokenBody(array $params) + { + return $this->buildQueryString($params); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php new file mode 100644 index 00000000..023232ce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php @@ -0,0 +1,783 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Provider; + +use YoastSEO_Vendor\GuzzleHttp\Client as HttpClient; +use YoastSEO_Vendor\GuzzleHttp\ClientInterface as HttpClientInterface; +use YoastSEO_Vendor\GuzzleHttp\Exception\BadResponseException; +use InvalidArgumentException; +use YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant; +use YoastSEO_Vendor\League\OAuth2\Client\Grant\GrantFactory; +use YoastSEO_Vendor\League\OAuth2\Client\OptionProvider\OptionProviderInterface; +use YoastSEO_Vendor\League\OAuth2\Client\OptionProvider\PostAuthOptionProvider; +use YoastSEO_Vendor\League\OAuth2\Client\Provider\Exception\IdentityProviderException; +use YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken; +use YoastSEO_Vendor\League\OAuth2\Client\Token\AccessTokenInterface; +use YoastSEO_Vendor\League\OAuth2\Client\Tool\ArrayAccessorTrait; +use YoastSEO_Vendor\League\OAuth2\Client\Tool\GuardedPropertyTrait; +use YoastSEO_Vendor\League\OAuth2\Client\Tool\QueryBuilderTrait; +use YoastSEO_Vendor\League\OAuth2\Client\Tool\RequestFactory; +use YoastSEO_Vendor\Psr\Http\Message\RequestInterface; +use YoastSEO_Vendor\Psr\Http\Message\ResponseInterface; +use UnexpectedValueException; +/** + * Represents a service provider (authorization server). + * + * @link http://tools.ietf.org/html/rfc6749#section-1.1 Roles (RFC 6749, §1.1) + */ +abstract class AbstractProvider +{ + use ArrayAccessorTrait; + use GuardedPropertyTrait; + use QueryBuilderTrait; + /** + * @var string|null Key used in a token response to identify the resource owner. + */ + const ACCESS_TOKEN_RESOURCE_OWNER_ID = null; + /** + * @var string HTTP method used to fetch access tokens. + */ + const METHOD_GET = 'GET'; + /** + * @var string HTTP method used to fetch access tokens. + */ + const METHOD_POST = 'POST'; + /** + * @var string PKCE method used to fetch authorization token. + * The PKCE code challenge will be hashed with sha256 (recommended). + */ + const PKCE_METHOD_S256 = 'S256'; + /** + * @var string PKCE method used to fetch authorization token. + * The PKCE code challenge will be sent as plain text, this is NOT recommended. + * Only use `plain` if no other option is possible. + */ + const PKCE_METHOD_PLAIN = 'plain'; + /** + * @var string + */ + protected $clientId; + /** + * @var string + */ + protected $clientSecret; + /** + * @var string + */ + protected $redirectUri; + /** + * @var string + */ + protected $state; + /** + * @var string|null + */ + protected $pkceCode = null; + /** + * @var GrantFactory + */ + protected $grantFactory; + /** + * @var RequestFactory + */ + protected $requestFactory; + /** + * @var HttpClientInterface + */ + protected $httpClient; + /** + * @var OptionProviderInterface + */ + protected $optionProvider; + /** + * Constructs an OAuth 2.0 service provider. + * + * @param array $options An array of options to set on this provider. + * Options include `clientId`, `clientSecret`, `redirectUri`, and `state`. + * Individual providers may introduce more options, as needed. + * @param array $collaborators An array of collaborators that may be used to + * override this provider's default behavior. Collaborators include + * `grantFactory`, `requestFactory`, and `httpClient`. + * Individual providers may introduce more collaborators, as needed. + */ + public function __construct(array $options = [], array $collaborators = []) + { + // We'll let the GuardedPropertyTrait handle mass assignment of incoming + // options, skipping any blacklisted properties defined in the provider + $this->fillProperties($options); + if (empty($collaborators['grantFactory'])) { + $collaborators['grantFactory'] = new \YoastSEO_Vendor\League\OAuth2\Client\Grant\GrantFactory(); + } + $this->setGrantFactory($collaborators['grantFactory']); + if (empty($collaborators['requestFactory'])) { + $collaborators['requestFactory'] = new \YoastSEO_Vendor\League\OAuth2\Client\Tool\RequestFactory(); + } + $this->setRequestFactory($collaborators['requestFactory']); + if (empty($collaborators['httpClient'])) { + $client_options = $this->getAllowedClientOptions($options); + $collaborators['httpClient'] = new \YoastSEO_Vendor\GuzzleHttp\Client(\array_intersect_key($options, \array_flip($client_options))); + } + $this->setHttpClient($collaborators['httpClient']); + if (empty($collaborators['optionProvider'])) { + $collaborators['optionProvider'] = new \YoastSEO_Vendor\League\OAuth2\Client\OptionProvider\PostAuthOptionProvider(); + } + $this->setOptionProvider($collaborators['optionProvider']); + } + /** + * Returns the list of options that can be passed to the HttpClient + * + * @param array $options An array of options to set on this provider. + * Options include `clientId`, `clientSecret`, `redirectUri`, and `state`. + * Individual providers may introduce more options, as needed. + * @return array The options to pass to the HttpClient constructor + */ + protected function getAllowedClientOptions(array $options) + { + $client_options = ['timeout', 'proxy']; + // Only allow turning off ssl verification if it's for a proxy + if (!empty($options['proxy'])) { + $client_options[] = 'verify'; + } + return $client_options; + } + /** + * Sets the grant factory instance. + * + * @param GrantFactory $factory + * @return self + */ + public function setGrantFactory(\YoastSEO_Vendor\League\OAuth2\Client\Grant\GrantFactory $factory) + { + $this->grantFactory = $factory; + return $this; + } + /** + * Returns the current grant factory instance. + * + * @return GrantFactory + */ + public function getGrantFactory() + { + return $this->grantFactory; + } + /** + * Sets the request factory instance. + * + * @param RequestFactory $factory + * @return self + */ + public function setRequestFactory(\YoastSEO_Vendor\League\OAuth2\Client\Tool\RequestFactory $factory) + { + $this->requestFactory = $factory; + return $this; + } + /** + * Returns the request factory instance. + * + * @return RequestFactory + */ + public function getRequestFactory() + { + return $this->requestFactory; + } + /** + * Sets the HTTP client instance. + * + * @param HttpClientInterface $client + * @return self + */ + public function setHttpClient(\YoastSEO_Vendor\GuzzleHttp\ClientInterface $client) + { + $this->httpClient = $client; + return $this; + } + /** + * Returns the HTTP client instance. + * + * @return HttpClientInterface + */ + public function getHttpClient() + { + return $this->httpClient; + } + /** + * Sets the option provider instance. + * + * @param OptionProviderInterface $provider + * @return self + */ + public function setOptionProvider(\YoastSEO_Vendor\League\OAuth2\Client\OptionProvider\OptionProviderInterface $provider) + { + $this->optionProvider = $provider; + return $this; + } + /** + * Returns the option provider instance. + * + * @return OptionProviderInterface + */ + public function getOptionProvider() + { + return $this->optionProvider; + } + /** + * Returns the current value of the state parameter. + * + * This can be accessed by the redirect handler during authorization. + * + * @return string + */ + public function getState() + { + return $this->state; + } + /** + * Set the value of the pkceCode parameter. + * + * When using PKCE this should be set before requesting an access token. + * + * @param string $pkceCode + * @return self + */ + public function setPkceCode($pkceCode) + { + $this->pkceCode = $pkceCode; + return $this; + } + /** + * Returns the current value of the pkceCode parameter. + * + * This can be accessed by the redirect handler during authorization. + * + * @return string|null + */ + public function getPkceCode() + { + return $this->pkceCode; + } + /** + * Returns the base URL for authorizing a client. + * + * Eg. https://oauth.service.com/authorize + * + * @return string + */ + public abstract function getBaseAuthorizationUrl(); + /** + * Returns the base URL for requesting an access token. + * + * Eg. https://oauth.service.com/token + * + * @param array $params + * @return string + */ + public abstract function getBaseAccessTokenUrl(array $params); + /** + * Returns the URL for requesting the resource owner's details. + * + * @param AccessToken $token + * @return string + */ + public abstract function getResourceOwnerDetailsUrl(\YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken $token); + /** + * Returns a new random string to use as the state parameter in an + * authorization flow. + * + * @param int $length Length of the random string to be generated. + * @return string + */ + protected function getRandomState($length = 32) + { + // Converting bytes to hex will always double length. Hence, we can reduce + // the amount of bytes by half to produce the correct length. + return \bin2hex(\random_bytes($length / 2)); + } + /** + * Returns a new random string to use as PKCE code_verifier and + * hashed as code_challenge parameters in an authorization flow. + * Must be between 43 and 128 characters long. + * + * @param int $length Length of the random string to be generated. + * @return string + */ + protected function getRandomPkceCode($length = 64) + { + return \substr(\strtr(\base64_encode(\random_bytes($length)), '+/', '-_'), 0, $length); + } + /** + * Returns the default scopes used by this provider. + * + * This should only be the scopes that are required to request the details + * of the resource owner, rather than all the available scopes. + * + * @return array + */ + protected abstract function getDefaultScopes(); + /** + * Returns the string that should be used to separate scopes when building + * the URL for requesting an access token. + * + * @return string Scope separator, defaults to ',' + */ + protected function getScopeSeparator() + { + return ','; + } + /** + * @return string|null + */ + protected function getPkceMethod() + { + return null; + } + /** + * Returns authorization parameters based on provided options. + * + * @param array $options + * @return array Authorization parameters + */ + protected function getAuthorizationParameters(array $options) + { + if (empty($options['state'])) { + $options['state'] = $this->getRandomState(); + } + if (empty($options['scope'])) { + $options['scope'] = $this->getDefaultScopes(); + } + $options += ['response_type' => 'code', 'approval_prompt' => 'auto']; + if (\is_array($options['scope'])) { + $separator = $this->getScopeSeparator(); + $options['scope'] = \implode($separator, $options['scope']); + } + // Store the state as it may need to be accessed later on. + $this->state = $options['state']; + $pkceMethod = $this->getPkceMethod(); + if (!empty($pkceMethod)) { + $this->pkceCode = $this->getRandomPkceCode(); + if ($pkceMethod === static::PKCE_METHOD_S256) { + $options['code_challenge'] = \trim(\strtr(\base64_encode(\hash('sha256', $this->pkceCode, \true)), '+/', '-_'), '='); + } elseif ($pkceMethod === static::PKCE_METHOD_PLAIN) { + $options['code_challenge'] = $this->pkceCode; + } else { + throw new \InvalidArgumentException('Unknown PKCE method "' . $pkceMethod . '".'); + } + $options['code_challenge_method'] = $pkceMethod; + } + // Business code layer might set a different redirect_uri parameter + // depending on the context, leave it as-is + if (!isset($options['redirect_uri'])) { + $options['redirect_uri'] = $this->redirectUri; + } + $options['client_id'] = $this->clientId; + return $options; + } + /** + * Builds the authorization URL's query string. + * + * @param array $params Query parameters + * @return string Query string + */ + protected function getAuthorizationQuery(array $params) + { + return $this->buildQueryString($params); + } + /** + * Builds the authorization URL. + * + * @param array $options + * @return string Authorization URL + */ + public function getAuthorizationUrl(array $options = []) + { + $base = $this->getBaseAuthorizationUrl(); + $params = $this->getAuthorizationParameters($options); + $query = $this->getAuthorizationQuery($params); + return $this->appendQuery($base, $query); + } + /** + * Redirects the client for authorization. + * + * @param array $options + * @param callable|null $redirectHandler + * @return mixed + */ + public function authorize(array $options = [], callable $redirectHandler = null) + { + $url = $this->getAuthorizationUrl($options); + if ($redirectHandler) { + return $redirectHandler($url, $this); + } + // @codeCoverageIgnoreStart + \header('Location: ' . $url); + exit; + // @codeCoverageIgnoreEnd + } + /** + * Appends a query string to a URL. + * + * @param string $url The URL to append the query to + * @param string $query The HTTP query string + * @return string The resulting URL + */ + protected function appendQuery($url, $query) + { + $query = \trim($query, '?&'); + if ($query) { + $glue = \strstr($url, '?') === \false ? '?' : '&'; + return $url . $glue . $query; + } + return $url; + } + /** + * Returns the method to use when requesting an access token. + * + * @return string HTTP method + */ + protected function getAccessTokenMethod() + { + return self::METHOD_POST; + } + /** + * Returns the key used in the access token response to identify the resource owner. + * + * @return string|null Resource owner identifier key + */ + protected function getAccessTokenResourceOwnerId() + { + return static::ACCESS_TOKEN_RESOURCE_OWNER_ID; + } + /** + * Builds the access token URL's query string. + * + * @param array $params Query parameters + * @return string Query string + */ + protected function getAccessTokenQuery(array $params) + { + return $this->buildQueryString($params); + } + /** + * Checks that a provided grant is valid, or attempts to produce one if the + * provided grant is a string. + * + * @param AbstractGrant|string $grant + * @return AbstractGrant + */ + protected function verifyGrant($grant) + { + if (\is_string($grant)) { + return $this->grantFactory->getGrant($grant); + } + $this->grantFactory->checkGrant($grant); + return $grant; + } + /** + * Returns the full URL to use when requesting an access token. + * + * @param array $params Query parameters + * @return string + */ + protected function getAccessTokenUrl(array $params) + { + $url = $this->getBaseAccessTokenUrl($params); + if ($this->getAccessTokenMethod() === self::METHOD_GET) { + $query = $this->getAccessTokenQuery($params); + return $this->appendQuery($url, $query); + } + return $url; + } + /** + * Returns a prepared request for requesting an access token. + * + * @param array $params Query string parameters + * @return RequestInterface + */ + protected function getAccessTokenRequest(array $params) + { + $method = $this->getAccessTokenMethod(); + $url = $this->getAccessTokenUrl($params); + $options = $this->optionProvider->getAccessTokenOptions($this->getAccessTokenMethod(), $params); + return $this->getRequest($method, $url, $options); + } + /** + * Requests an access token using a specified grant and option set. + * + * @param mixed $grant + * @param array $options + * @throws IdentityProviderException + * @return AccessTokenInterface + */ + public function getAccessToken($grant, array $options = []) + { + $grant = $this->verifyGrant($grant); + $params = ['client_id' => $this->clientId, 'client_secret' => $this->clientSecret, 'redirect_uri' => $this->redirectUri]; + if (!empty($this->pkceCode)) { + $params['code_verifier'] = $this->pkceCode; + } + $params = $grant->prepareRequestParameters($params, $options); + $request = $this->getAccessTokenRequest($params); + $response = $this->getParsedResponse($request); + if (\false === \is_array($response)) { + throw new \UnexpectedValueException('Invalid response received from Authorization Server. Expected JSON.'); + } + $prepared = $this->prepareAccessTokenResponse($response); + $token = $this->createAccessToken($prepared, $grant); + return $token; + } + /** + * Returns a PSR-7 request instance that is not authenticated. + * + * @param string $method + * @param string $url + * @param array $options + * @return RequestInterface + */ + public function getRequest($method, $url, array $options = []) + { + return $this->createRequest($method, $url, null, $options); + } + /** + * Returns an authenticated PSR-7 request instance. + * + * @param string $method + * @param string $url + * @param AccessTokenInterface|string|null $token + * @param array $options Any of "headers", "body", and "protocolVersion". + * @return RequestInterface + */ + public function getAuthenticatedRequest($method, $url, $token, array $options = []) + { + return $this->createRequest($method, $url, $token, $options); + } + /** + * Creates a PSR-7 request instance. + * + * @param string $method + * @param string $url + * @param AccessTokenInterface|string|null $token + * @param array $options + * @return RequestInterface + */ + protected function createRequest($method, $url, $token, array $options) + { + $defaults = ['headers' => $this->getHeaders($token)]; + $options = \array_merge_recursive($defaults, $options); + $factory = $this->getRequestFactory(); + return $factory->getRequestWithOptions($method, $url, $options); + } + /** + * Sends a request instance and returns a response instance. + * + * WARNING: This method does not attempt to catch exceptions caused by HTTP + * errors! It is recommended to wrap this method in a try/catch block. + * + * @param RequestInterface $request + * @return ResponseInterface + */ + public function getResponse(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) + { + return $this->getHttpClient()->send($request); + } + /** + * Sends a request and returns the parsed response. + * + * @param RequestInterface $request + * @throws IdentityProviderException + * @return mixed + */ + public function getParsedResponse(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) + { + try { + $response = $this->getResponse($request); + } catch (\YoastSEO_Vendor\GuzzleHttp\Exception\BadResponseException $e) { + $response = $e->getResponse(); + } + $parsed = $this->parseResponse($response); + $this->checkResponse($response, $parsed); + return $parsed; + } + /** + * Attempts to parse a JSON response. + * + * @param string $content JSON content from response body + * @return array Parsed JSON data + * @throws UnexpectedValueException if the content could not be parsed + */ + protected function parseJson($content) + { + $content = \json_decode($content, \true); + if (\json_last_error() !== \JSON_ERROR_NONE) { + throw new \UnexpectedValueException(\sprintf("Failed to parse JSON response: %s", \json_last_error_msg())); + } + return $content; + } + /** + * Returns the content type header of a response. + * + * @param ResponseInterface $response + * @return string Semi-colon separated join of content-type headers. + */ + protected function getContentType(\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) + { + return \join(';', (array) $response->getHeader('content-type')); + } + /** + * Parses the response according to its content-type header. + * + * @throws UnexpectedValueException + * @param ResponseInterface $response + * @return array + */ + protected function parseResponse(\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) + { + $content = (string) $response->getBody(); + $type = $this->getContentType($response); + if (\strpos($type, 'urlencoded') !== \false) { + \parse_str($content, $parsed); + return $parsed; + } + // Attempt to parse the string as JSON regardless of content type, + // since some providers use non-standard content types. Only throw an + // exception if the JSON could not be parsed when it was expected to. + try { + return $this->parseJson($content); + } catch (\UnexpectedValueException $e) { + if (\strpos($type, 'json') !== \false) { + throw $e; + } + if ($response->getStatusCode() == 500) { + throw new \UnexpectedValueException('An OAuth server error was encountered that did not contain a JSON body', 0, $e); + } + return $content; + } + } + /** + * Checks a provider response for errors. + * + * @throws IdentityProviderException + * @param ResponseInterface $response + * @param array|string $data Parsed response data + * @return void + */ + protected abstract function checkResponse(\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response, $data); + /** + * Prepares an parsed access token response for a grant. + * + * Custom mapping of expiration, etc should be done here. Always call the + * parent method when overloading this method. + * + * @param mixed $result + * @return array + */ + protected function prepareAccessTokenResponse(array $result) + { + if ($this->getAccessTokenResourceOwnerId() !== null) { + $result['resource_owner_id'] = $this->getValueByKey($result, $this->getAccessTokenResourceOwnerId()); + } + return $result; + } + /** + * Creates an access token from a response. + * + * The grant that was used to fetch the response can be used to provide + * additional context. + * + * @param array $response + * @param AbstractGrant $grant + * @return AccessTokenInterface + */ + protected function createAccessToken(array $response, \YoastSEO_Vendor\League\OAuth2\Client\Grant\AbstractGrant $grant) + { + return new \YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken($response); + } + /** + * Generates a resource owner object from a successful resource owner + * details request. + * + * @param array $response + * @param AccessToken $token + * @return ResourceOwnerInterface + */ + protected abstract function createResourceOwner(array $response, \YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken $token); + /** + * Requests and returns the resource owner of given access token. + * + * @param AccessToken $token + * @return ResourceOwnerInterface + */ + public function getResourceOwner(\YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken $token) + { + $response = $this->fetchResourceOwnerDetails($token); + return $this->createResourceOwner($response, $token); + } + /** + * Requests resource owner details. + * + * @param AccessToken $token + * @return mixed + */ + protected function fetchResourceOwnerDetails(\YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken $token) + { + $url = $this->getResourceOwnerDetailsUrl($token); + $request = $this->getAuthenticatedRequest(self::METHOD_GET, $url, $token); + $response = $this->getParsedResponse($request); + if (\false === \is_array($response)) { + throw new \UnexpectedValueException('Invalid response received from Authorization Server. Expected JSON.'); + } + return $response; + } + /** + * Returns the default headers used by this provider. + * + * Typically this is used to set 'Accept' or 'Content-Type' headers. + * + * @return array + */ + protected function getDefaultHeaders() + { + return []; + } + /** + * Returns the authorization headers used by this provider. + * + * Typically this is "Bearer" or "MAC". For more information see: + * http://tools.ietf.org/html/rfc6749#section-7.1 + * + * No default is provided, providers must overload this method to activate + * authorization headers. + * + * @param mixed|null $token Either a string or an access token instance + * @return array + */ + protected function getAuthorizationHeaders($token = null) + { + return []; + } + /** + * Returns all headers used by this provider for a request. + * + * The request will be authenticated if an access token is provided. + * + * @param mixed|null $token object or string + * @return array + */ + public function getHeaders($token = null) + { + if ($token) { + return \array_merge($this->getDefaultHeaders(), $this->getAuthorizationHeaders($token)); + } + return $this->getDefaultHeaders(); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php new file mode 100644 index 00000000..47ea3a59 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php @@ -0,0 +1,45 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Provider\Exception; + +/** + * Exception thrown if the provider response contains errors. + */ +class IdentityProviderException extends \Exception +{ + /** + * @var mixed + */ + protected $response; + /** + * @param string $message + * @param int $code + * @param mixed $response The response body + */ + public function __construct($message, $code, $response) + { + $this->response = $response; + parent::__construct($message, $code); + } + /** + * Returns the exception's response body. + * + * @return mixed + */ + public function getResponseBody() + { + return $this->response; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericProvider.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericProvider.php new file mode 100644 index 00000000..26e09d76 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericProvider.php @@ -0,0 +1,201 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Provider; + +use InvalidArgumentException; +use YoastSEO_Vendor\League\OAuth2\Client\Provider\Exception\IdentityProviderException; +use YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken; +use YoastSEO_Vendor\League\OAuth2\Client\Tool\BearerAuthorizationTrait; +use YoastSEO_Vendor\Psr\Http\Message\ResponseInterface; +/** + * Represents a generic service provider that may be used to interact with any + * OAuth 2.0 service provider, using Bearer token authentication. + */ +class GenericProvider extends \YoastSEO_Vendor\League\OAuth2\Client\Provider\AbstractProvider +{ + use BearerAuthorizationTrait; + /** + * @var string + */ + private $urlAuthorize; + /** + * @var string + */ + private $urlAccessToken; + /** + * @var string + */ + private $urlResourceOwnerDetails; + /** + * @var string + */ + private $accessTokenMethod; + /** + * @var string + */ + private $accessTokenResourceOwnerId; + /** + * @var array|null + */ + private $scopes = null; + /** + * @var string + */ + private $scopeSeparator; + /** + * @var string + */ + private $responseError = 'error'; + /** + * @var string + */ + private $responseCode; + /** + * @var string + */ + private $responseResourceOwnerId = 'id'; + /** + * @var string|null + */ + private $pkceMethod = null; + /** + * @param array $options + * @param array $collaborators + */ + public function __construct(array $options = [], array $collaborators = []) + { + $this->assertRequiredOptions($options); + $possible = $this->getConfigurableOptions(); + $configured = \array_intersect_key($options, \array_flip($possible)); + foreach ($configured as $key => $value) { + $this->{$key} = $value; + } + // Remove all options that are only used locally + $options = \array_diff_key($options, $configured); + parent::__construct($options, $collaborators); + } + /** + * Returns all options that can be configured. + * + * @return array + */ + protected function getConfigurableOptions() + { + return \array_merge($this->getRequiredOptions(), ['accessTokenMethod', 'accessTokenResourceOwnerId', 'scopeSeparator', 'responseError', 'responseCode', 'responseResourceOwnerId', 'scopes', 'pkceMethod']); + } + /** + * Returns all options that are required. + * + * @return array + */ + protected function getRequiredOptions() + { + return ['urlAuthorize', 'urlAccessToken', 'urlResourceOwnerDetails']; + } + /** + * Verifies that all required options have been passed. + * + * @param array $options + * @return void + * @throws InvalidArgumentException + */ + private function assertRequiredOptions(array $options) + { + $missing = \array_diff_key(\array_flip($this->getRequiredOptions()), $options); + if (!empty($missing)) { + throw new \InvalidArgumentException('Required options not defined: ' . \implode(', ', \array_keys($missing))); + } + } + /** + * @inheritdoc + */ + public function getBaseAuthorizationUrl() + { + return $this->urlAuthorize; + } + /** + * @inheritdoc + */ + public function getBaseAccessTokenUrl(array $params) + { + return $this->urlAccessToken; + } + /** + * @inheritdoc + */ + public function getResourceOwnerDetailsUrl(\YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken $token) + { + return $this->urlResourceOwnerDetails; + } + /** + * @inheritdoc + */ + public function getDefaultScopes() + { + return $this->scopes; + } + /** + * @inheritdoc + */ + protected function getAccessTokenMethod() + { + return $this->accessTokenMethod ?: parent::getAccessTokenMethod(); + } + /** + * @inheritdoc + */ + protected function getAccessTokenResourceOwnerId() + { + return $this->accessTokenResourceOwnerId ?: parent::getAccessTokenResourceOwnerId(); + } + /** + * @inheritdoc + */ + protected function getScopeSeparator() + { + return $this->scopeSeparator ?: parent::getScopeSeparator(); + } + /** + * @inheritdoc + */ + protected function getPkceMethod() + { + return $this->pkceMethod ?: parent::getPkceMethod(); + } + /** + * @inheritdoc + */ + protected function checkResponse(\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response, $data) + { + if (!empty($data[$this->responseError])) { + $error = $data[$this->responseError]; + if (!\is_string($error)) { + $error = \var_export($error, \true); + } + $code = $this->responseCode && !empty($data[$this->responseCode]) ? $data[$this->responseCode] : 0; + if (!\is_int($code)) { + $code = \intval($code); + } + throw new \YoastSEO_Vendor\League\OAuth2\Client\Provider\Exception\IdentityProviderException($error, $code, $data); + } + } + /** + * @inheritdoc + */ + protected function createResourceOwner(array $response, \YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken $token) + { + return new \YoastSEO_Vendor\League\OAuth2\Client\Provider\GenericResourceOwner($response, $this->responseResourceOwnerId); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericResourceOwner.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericResourceOwner.php new file mode 100644 index 00000000..08032401 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/GenericResourceOwner.php @@ -0,0 +1,57 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Provider; + +/** + * Represents a generic resource owner for use with the GenericProvider. + */ +class GenericResourceOwner implements \YoastSEO_Vendor\League\OAuth2\Client\Provider\ResourceOwnerInterface +{ + /** + * @var array + */ + protected $response; + /** + * @var string + */ + protected $resourceOwnerId; + /** + * @param array $response + * @param string $resourceOwnerId + */ + public function __construct(array $response, $resourceOwnerId) + { + $this->response = $response; + $this->resourceOwnerId = $resourceOwnerId; + } + /** + * Returns the identifier of the authorized resource owner. + * + * @return mixed + */ + public function getId() + { + return $this->response[$this->resourceOwnerId]; + } + /** + * Returns the raw resource owner response. + * + * @return array + */ + public function toArray() + { + return $this->response; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/ResourceOwnerInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/ResourceOwnerInterface.php new file mode 100644 index 00000000..d6717a58 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/ResourceOwnerInterface.php @@ -0,0 +1,35 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Provider; + +/** + * Classes implementing `ResourceOwnerInterface` may be used to represent + * the resource owner authenticated with a service provider. + */ +interface ResourceOwnerInterface +{ + /** + * Returns the identifier of the authorized resource owner. + * + * @return mixed + */ + public function getId(); + /** + * Return all of the owner details available as an array. + * + * @return array + */ + public function toArray(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessToken.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessToken.php new file mode 100644 index 00000000..dec000e6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessToken.php @@ -0,0 +1,204 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Token; + +use InvalidArgumentException; +use RuntimeException; +/** + * Represents an access token. + * + * @link http://tools.ietf.org/html/rfc6749#section-1.4 Access Token (RFC 6749, §1.4) + */ +class AccessToken implements \YoastSEO_Vendor\League\OAuth2\Client\Token\AccessTokenInterface, \YoastSEO_Vendor\League\OAuth2\Client\Token\ResourceOwnerAccessTokenInterface +{ + /** + * @var string + */ + protected $accessToken; + /** + * @var int + */ + protected $expires; + /** + * @var string + */ + protected $refreshToken; + /** + * @var string + */ + protected $resourceOwnerId; + /** + * @var array + */ + protected $values = []; + /** + * @var int + */ + private static $timeNow; + /** + * Set the time now. This should only be used for testing purposes. + * + * @param int $timeNow the time in seconds since epoch + * @return void + */ + public static function setTimeNow($timeNow) + { + self::$timeNow = $timeNow; + } + /** + * Reset the time now if it was set for test purposes. + * + * @return void + */ + public static function resetTimeNow() + { + self::$timeNow = null; + } + /** + * @return int + */ + public function getTimeNow() + { + return self::$timeNow ? self::$timeNow : \time(); + } + /** + * Constructs an access token. + * + * @param array $options An array of options returned by the service provider + * in the access token request. The `access_token` option is required. + * @throws InvalidArgumentException if `access_token` is not provided in `$options`. + */ + public function __construct(array $options = []) + { + if (empty($options['access_token'])) { + throw new \InvalidArgumentException('Required option not passed: "access_token"'); + } + $this->accessToken = $options['access_token']; + if (!empty($options['resource_owner_id'])) { + $this->resourceOwnerId = $options['resource_owner_id']; + } + if (!empty($options['refresh_token'])) { + $this->refreshToken = $options['refresh_token']; + } + // We need to know when the token expires. Show preference to + // 'expires_in' since it is defined in RFC6749 Section 5.1. + // Defer to 'expires' if it is provided instead. + if (isset($options['expires_in'])) { + if (!\is_numeric($options['expires_in'])) { + throw new \InvalidArgumentException('expires_in value must be an integer'); + } + $this->expires = $options['expires_in'] != 0 ? $this->getTimeNow() + $options['expires_in'] : 0; + } elseif (!empty($options['expires'])) { + // Some providers supply the seconds until expiration rather than + // the exact timestamp. Take a best guess at which we received. + $expires = $options['expires']; + if (!$this->isExpirationTimestamp($expires)) { + $expires += $this->getTimeNow(); + } + $this->expires = $expires; + } + // Capture any additional values that might exist in the token but are + // not part of the standard response. Vendors will sometimes pass + // additional user data this way. + $this->values = \array_diff_key($options, \array_flip(['access_token', 'resource_owner_id', 'refresh_token', 'expires_in', 'expires'])); + } + /** + * Check if a value is an expiration timestamp or second value. + * + * @param integer $value + * @return bool + */ + protected function isExpirationTimestamp($value) + { + // If the given value is larger than the original OAuth 2 draft date, + // assume that it is meant to be a (possible expired) timestamp. + $oauth2InceptionDate = 1349067600; + // 2012-10-01 + return $value > $oauth2InceptionDate; + } + /** + * @inheritdoc + */ + public function getToken() + { + return $this->accessToken; + } + /** + * @inheritdoc + */ + public function getRefreshToken() + { + return $this->refreshToken; + } + /** + * @inheritdoc + */ + public function getExpires() + { + return $this->expires; + } + /** + * @inheritdoc + */ + public function getResourceOwnerId() + { + return $this->resourceOwnerId; + } + /** + * @inheritdoc + */ + public function hasExpired() + { + $expires = $this->getExpires(); + if (empty($expires)) { + throw new \RuntimeException('"expires" is not set on the token'); + } + return $expires < \time(); + } + /** + * @inheritdoc + */ + public function getValues() + { + return $this->values; + } + /** + * @inheritdoc + */ + public function __toString() + { + return (string) $this->getToken(); + } + /** + * @inheritdoc + */ + public function jsonSerialize() + { + $parameters = $this->values; + if ($this->accessToken) { + $parameters['access_token'] = $this->accessToken; + } + if ($this->refreshToken) { + $parameters['refresh_token'] = $this->refreshToken; + } + if ($this->expires) { + $parameters['expires'] = $this->expires; + } + if ($this->resourceOwnerId) { + $parameters['resource_owner_id'] = $this->resourceOwnerId; + } + return $parameters; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessTokenInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessTokenInterface.php new file mode 100644 index 00000000..8d4ab2b6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/AccessTokenInterface.php @@ -0,0 +1,67 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Token; + +use JsonSerializable; +use ReturnTypeWillChange; +use RuntimeException; +interface AccessTokenInterface extends \JsonSerializable +{ + /** + * Returns the access token string of this instance. + * + * @return string + */ + public function getToken(); + /** + * Returns the refresh token, if defined. + * + * @return string|null + */ + public function getRefreshToken(); + /** + * Returns the expiration timestamp in seconds, if defined. + * + * @return integer|null + */ + public function getExpires(); + /** + * Checks if this token has expired. + * + * @return boolean true if the token has expired, false otherwise. + * @throws RuntimeException if 'expires' is not set on the token. + */ + public function hasExpired(); + /** + * Returns additional vendor values stored in the token. + * + * @return array + */ + public function getValues(); + /** + * Returns a string representation of the access token + * + * @return string + */ + public function __toString(); + /** + * Returns an array of parameters to serialize when this is serialized with + * json_encode(). + * + * @return array + */ + #[ReturnTypeWillChange] + public function jsonSerialize(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php new file mode 100644 index 00000000..84ae8875 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php @@ -0,0 +1,25 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Token; + +interface ResourceOwnerAccessTokenInterface extends \YoastSEO_Vendor\League\OAuth2\Client\Token\AccessTokenInterface +{ + /** + * Returns the resource owner identifier, if defined. + * + * @return string|null + */ + public function getResourceOwnerId(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ArrayAccessorTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ArrayAccessorTrait.php new file mode 100644 index 00000000..8de856ff --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ArrayAccessorTrait.php @@ -0,0 +1,47 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Tool; + +/** + * Provides generic array navigation tools. + */ +trait ArrayAccessorTrait +{ + /** + * Returns a value by key using dot notation. + * + * @param array $data + * @param string $key + * @param mixed|null $default + * @return mixed + */ + private function getValueByKey(array $data, $key, $default = null) + { + if (!\is_string($key) || empty($key) || !\count($data)) { + return $default; + } + if (\strpos($key, '.') !== \false) { + $keys = \explode('.', $key); + foreach ($keys as $innerKey) { + if (!\is_array($data) || !\array_key_exists($innerKey, $data)) { + return $default; + } + $data = $data[$innerKey]; + } + return $data; + } + return \array_key_exists($key, $data) ? $data[$key] : $default; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php new file mode 100644 index 00000000..8fb7f76b --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php @@ -0,0 +1,35 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Tool; + +use YoastSEO_Vendor\League\OAuth2\Client\Token\AccessTokenInterface; +/** + * Enables `Bearer` header authorization for providers. + * + * @link http://tools.ietf.org/html/rfc6750 Bearer Token Usage (RFC 6750) + */ +trait BearerAuthorizationTrait +{ + /** + * Returns authorization headers for the 'bearer' grant. + * + * @param AccessTokenInterface|string|null $token Either a string or an access token instance + * @return array + */ + protected function getAuthorizationHeaders($token = null) + { + return ['Authorization' => 'Bearer ' . $token]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/GuardedPropertyTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/GuardedPropertyTrait.php new file mode 100644 index 00000000..5de3b74c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/GuardedPropertyTrait.php @@ -0,0 +1,66 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Tool; + +/** + * Provides support for blacklisting explicit properties from the + * mass assignment behavior. + */ +trait GuardedPropertyTrait +{ + /** + * The properties that aren't mass assignable. + * + * @var array + */ + protected $guarded = []; + /** + * Attempts to mass assign the given options to explicitly defined properties, + * skipping over any properties that are defined in the guarded array. + * + * @param array $options + * @return mixed + */ + protected function fillProperties(array $options = []) + { + if (isset($options['guarded'])) { + unset($options['guarded']); + } + foreach ($options as $option => $value) { + if (\property_exists($this, $option) && !$this->isGuarded($option)) { + $this->{$option} = $value; + } + } + } + /** + * Returns current guarded properties. + * + * @return array + */ + public function getGuarded() + { + return $this->guarded; + } + /** + * Determines if the given property is guarded. + * + * @param string $property + * @return bool + */ + public function isGuarded($property) + { + return \in_array($property, $this->getGuarded()); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/MacAuthorizationTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/MacAuthorizationTrait.php new file mode 100644 index 00000000..a18a3156 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/MacAuthorizationTrait.php @@ -0,0 +1,76 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Tool; + +use YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken; +use YoastSEO_Vendor\League\OAuth2\Client\Token\AccessTokenInterface; +/** + * Enables `MAC` header authorization for providers. + * + * @link http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-05 Message Authentication Code (MAC) Tokens + */ +trait MacAuthorizationTrait +{ + /** + * Returns the id of this token for MAC generation. + * + * @param AccessToken $token + * @return string + */ + protected abstract function getTokenId(\YoastSEO_Vendor\League\OAuth2\Client\Token\AccessToken $token); + /** + * Returns the MAC signature for the current request. + * + * @param string $id + * @param integer $ts + * @param string $nonce + * @return string + */ + protected abstract function getMacSignature($id, $ts, $nonce); + /** + * Returns a new random string to use as the state parameter in an + * authorization flow. + * + * @param int $length Length of the random string to be generated. + * @return string + */ + protected abstract function getRandomState($length = 32); + /** + * Returns the authorization headers for the 'mac' grant. + * + * @param AccessTokenInterface|string|null $token Either a string or an access token instance + * @return array + * @codeCoverageIgnore + * + * @todo This is currently untested and provided only as an example. If you + * complete the implementation, please create a pull request for + * https://github.com/thephpleague/oauth2-client + */ + protected function getAuthorizationHeaders($token = null) + { + if ($token === null) { + return []; + } + $ts = \time(); + $id = $this->getTokenId($token); + $nonce = $this->getRandomState(16); + $mac = $this->getMacSignature($id, $ts, $nonce); + $parts = []; + foreach (\compact('id', 'ts', 'nonce', 'mac') as $key => $value) { + $parts[] = \sprintf('%s="%s"', $key, $value); + } + return ['Authorization' => 'MAC ' . \implode(', ', $parts)]; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ProviderRedirectTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ProviderRedirectTrait.php new file mode 100644 index 00000000..0888c971 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/ProviderRedirectTrait.php @@ -0,0 +1,105 @@ +redirectLimit) { + $attempts++; + $response = $this->getHttpClient()->send($request, ['allow_redirects' => \false]); + if ($this->isRedirect($response)) { + $redirectUrl = new \YoastSEO_Vendor\GuzzleHttp\Psr7\Uri($response->getHeader('Location')[0]); + $request = $request->withUri($redirectUrl); + } else { + break; + } + } + return $response; + } + /** + * Returns the HTTP client instance. + * + * @return GuzzleHttp\ClientInterface + */ + public abstract function getHttpClient(); + /** + * Retrieves current redirect limit. + * + * @return integer + */ + public function getRedirectLimit() + { + return $this->redirectLimit; + } + /** + * Determines if a given response is a redirect. + * + * @param ResponseInterface $response + * + * @return boolean + */ + protected function isRedirect(\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response) + { + $statusCode = $response->getStatusCode(); + return $statusCode > 300 && $statusCode < 400 && $response->hasHeader('Location'); + } + /** + * Sends a request instance and returns a response instance. + * + * WARNING: This method does not attempt to catch exceptions caused by HTTP + * errors! It is recommended to wrap this method in a try/catch block. + * + * @param RequestInterface $request + * @return ResponseInterface + */ + public function getResponse(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request) + { + try { + $response = $this->followRequestRedirects($request); + } catch (\YoastSEO_Vendor\GuzzleHttp\Exception\BadResponseException $e) { + $response = $e->getResponse(); + } + return $response; + } + /** + * Updates the redirect limit. + * + * @param integer $limit + * @return League\OAuth2\Client\Provider\AbstractProvider + * @throws InvalidArgumentException + */ + public function setRedirectLimit($limit) + { + if (!\is_int($limit)) { + throw new \InvalidArgumentException('redirectLimit must be an integer.'); + } + if ($limit < 1) { + throw new \InvalidArgumentException('redirectLimit must be greater than or equal to one.'); + } + $this->redirectLimit = $limit; + return $this; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/QueryBuilderTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/QueryBuilderTrait.php new file mode 100644 index 00000000..fbc29fce --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/QueryBuilderTrait.php @@ -0,0 +1,33 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Tool; + +/** + * Provides a standard way to generate query strings. + */ +trait QueryBuilderTrait +{ + /** + * Build a query string from an array. + * + * @param array $params + * + * @return string + */ + protected function buildQueryString(array $params) + { + return \http_build_query($params, '', '&', \PHP_QUERY_RFC3986); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequestFactory.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequestFactory.php new file mode 100644 index 00000000..efb7230c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequestFactory.php @@ -0,0 +1,67 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Tool; + +use YoastSEO_Vendor\GuzzleHttp\Psr7\Request; +/** + * Used to produce PSR-7 Request instances. + * + * @link https://github.com/guzzle/guzzle/pull/1101 + */ +class RequestFactory +{ + /** + * Creates a PSR-7 Request instance. + * + * @param null|string $method HTTP method for the request. + * @param null|string $uri URI for the request. + * @param array $headers Headers for the message. + * @param string|resource|StreamInterface $body Message body. + * @param string $version HTTP protocol version. + * + * @return Request + */ + public function getRequest($method, $uri, array $headers = [], $body = null, $version = '1.1') + { + return new \YoastSEO_Vendor\GuzzleHttp\Psr7\Request($method, $uri, $headers, $body, $version); + } + /** + * Parses simplified options. + * + * @param array $options Simplified options. + * + * @return array Extended options for use with getRequest. + */ + protected function parseOptions(array $options) + { + // Should match default values for getRequest + $defaults = ['headers' => [], 'body' => null, 'version' => '1.1']; + return \array_merge($defaults, $options); + } + /** + * Creates a request using a simplified array of options. + * + * @param null|string $method + * @param null|string $uri + * @param array $options + * + * @return Request + */ + public function getRequestWithOptions($method, $uri, array $options = []) + { + $options = $this->parseOptions($options); + return $this->getRequest($method, $uri, $options['headers'], $options['body'], $options['version']); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequiredParameterTrait.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequiredParameterTrait.php new file mode 100644 index 00000000..d5ba4258 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Tool/RequiredParameterTrait.php @@ -0,0 +1,51 @@ + + * @license http://opensource.org/licenses/MIT MIT + * @link http://thephpleague.com/oauth2-client/ Documentation + * @link https://packagist.org/packages/league/oauth2-client Packagist + * @link https://github.com/thephpleague/oauth2-client GitHub + */ +namespace YoastSEO_Vendor\League\OAuth2\Client\Tool; + +use BadMethodCallException; +/** + * Provides functionality to check for required parameters. + */ +trait RequiredParameterTrait +{ + /** + * Checks for a required parameter in a hash. + * + * @throws BadMethodCallException + * @param string $name + * @param array $params + * @return void + */ + private function checkRequiredParameter($name, array $params) + { + if (!isset($params[$name])) { + throw new \BadMethodCallException(\sprintf('Required parameter not passed: "%s"', $name)); + } + } + /** + * Checks for multiple required parameters in a hash. + * + * @throws InvalidArgumentException + * @param array $names + * @param array $params + * @return void + */ + private function checkRequiredParameters(array $names, array $params) + { + foreach ($names as $name) { + $this->checkRequiredParameter($name, $params); + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/container/src/ContainerExceptionInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/container/src/ContainerExceptionInterface.php new file mode 100644 index 00000000..3b5fe22f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/container/src/ContainerExceptionInterface.php @@ -0,0 +1,13 @@ +getHeaders() as $name => $values) { + * echo $name . ": " . implode(", ", $values); + * } + * + * // Emit headers iteratively: + * foreach ($message->getHeaders() as $name => $values) { + * foreach ($values as $value) { + * header(sprintf('%s: %s', $name, $value), false); + * } + * } + * + * While header names are not case-sensitive, getHeaders() will preserve the + * exact case in which headers were originally specified. + * + * @return string[][] Returns an associative array of the message's headers. Each + * key MUST be a header name, and each value MUST be an array of strings + * for that header. + */ + public function getHeaders() : array; + /** + * Checks if a header exists by the given case-insensitive name. + * + * @param string $name Case-insensitive header field name. + * @return bool Returns true if any header names match the given header + * name using a case-insensitive string comparison. Returns false if + * no matching header name is found in the message. + */ + public function hasHeader(string $name) : bool; + /** + * Retrieves a message header value by the given case-insensitive name. + * + * This method returns an array of all the header values of the given + * case-insensitive header name. + * + * If the header does not appear in the message, this method MUST return an + * empty array. + * + * @param string $name Case-insensitive header field name. + * @return string[] An array of string values as provided for the given + * header. If the header does not appear in the message, this method MUST + * return an empty array. + */ + public function getHeader(string $name) : array; + /** + * Retrieves a comma-separated string of the values for a single header. + * + * This method returns all of the header values of the given + * case-insensitive header name as a string concatenated together using + * a comma. + * + * NOTE: Not all header values may be appropriately represented using + * comma concatenation. For such headers, use getHeader() instead + * and supply your own delimiter when concatenating. + * + * If the header does not appear in the message, this method MUST return + * an empty string. + * + * @param string $name Case-insensitive header field name. + * @return string A string of values as provided for the given header + * concatenated together using a comma. If the header does not appear in + * the message, this method MUST return an empty string. + */ + public function getHeaderLine(string $name) : string; + /** + * Return an instance with the provided value replacing the specified header. + * + * While header names are case-insensitive, the casing of the header will + * be preserved by this function, and returned from getHeaders(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new and/or updated header and value. + * + * @param string $name Case-insensitive header field name. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withHeader(string $name, $value) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface; + /** + * Return an instance with the specified header appended with the given value. + * + * Existing values for the specified header will be maintained. The new + * value(s) will be appended to the existing list. If the header did not + * exist previously, it will be added. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new header and/or value. + * + * @param string $name Case-insensitive header field name to add. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withAddedHeader(string $name, $value) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface; + /** + * Return an instance without the specified header. + * + * Header resolution MUST be done without case-sensitivity. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the named header. + * + * @param string $name Case-insensitive header field name to remove. + * @return static + */ + public function withoutHeader(string $name) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface; + /** + * Gets the body of the message. + * + * @return StreamInterface Returns the body as a stream. + */ + public function getBody() : \YoastSEO_Vendor\Psr\Http\Message\StreamInterface; + /** + * Return an instance with the specified message body. + * + * The body MUST be a StreamInterface object. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return a new instance that has the + * new body stream. + * + * @param StreamInterface $body Body. + * @return static + * @throws \InvalidArgumentException When the body is not valid. + */ + public function withBody(\YoastSEO_Vendor\Psr\Http\Message\StreamInterface $body) : \YoastSEO_Vendor\Psr\Http\Message\MessageInterface; +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/RequestInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/RequestInterface.php new file mode 100644 index 00000000..139925ec --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/RequestInterface.php @@ -0,0 +1,124 @@ +getQuery()` + * or from the `QUERY_STRING` server param. + * + * @return array + */ + public function getQueryParams() : array; + /** + * Return an instance with the specified query string arguments. + * + * These values SHOULD remain immutable over the course of the incoming + * request. They MAY be injected during instantiation, such as from PHP's + * $_GET superglobal, or MAY be derived from some other value such as the + * URI. In cases where the arguments are parsed from the URI, the data + * MUST be compatible with what PHP's parse_str() would return for + * purposes of how duplicate query parameters are handled, and how nested + * sets are handled. + * + * Setting query string arguments MUST NOT change the URI stored by the + * request, nor the values in the server params. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated query string arguments. + * + * @param array $query Array of query string arguments, typically from + * $_GET. + * @return static + */ + public function withQueryParams(array $query) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface; + /** + * Retrieve normalized file upload data. + * + * This method returns upload metadata in a normalized tree, with each leaf + * an instance of Psr\Http\Message\UploadedFileInterface. + * + * These values MAY be prepared from $_FILES or the message body during + * instantiation, or MAY be injected via withUploadedFiles(). + * + * @return array An array tree of UploadedFileInterface instances; an empty + * array MUST be returned if no data is present. + */ + public function getUploadedFiles() : array; + /** + * Create a new instance with the specified uploaded files. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param array $uploadedFiles An array tree of UploadedFileInterface instances. + * @return static + * @throws \InvalidArgumentException if an invalid structure is provided. + */ + public function withUploadedFiles(array $uploadedFiles) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface; + /** + * Retrieve any parameters provided in the request body. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, this method MUST + * return the contents of $_POST. + * + * Otherwise, this method may return any results of deserializing + * the request body content; as parsing returns structured content, the + * potential types MUST be arrays or objects only. A null value indicates + * the absence of body content. + * + * @return null|array|object The deserialized body parameters, if any. + * These will typically be an array or object. + */ + public function getParsedBody(); + /** + * Return an instance with the specified body parameters. + * + * These MAY be injected during instantiation. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, use this method + * ONLY to inject the contents of $_POST. + * + * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of + * deserializing the request body content. Deserialization/parsing returns + * structured data, and, as such, this method ONLY accepts arrays or objects, + * or a null value if nothing was available to parse. + * + * As an example, if content negotiation determines that the request data + * is a JSON payload, this method could be used to create a request + * instance with the deserialized parameters. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param null|array|object $data The deserialized body data. This will + * typically be in an array or object. + * @return static + * @throws \InvalidArgumentException if an unsupported argument type is + * provided. + */ + public function withParsedBody($data) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface; + /** + * Retrieve attributes derived from the request. + * + * The request "attributes" may be used to allow injection of any + * parameters derived from the request: e.g., the results of path + * match operations; the results of decrypting cookies; the results of + * deserializing non-form-encoded message bodies; etc. Attributes + * will be application and request specific, and CAN be mutable. + * + * @return array Attributes derived from the request. + */ + public function getAttributes() : array; + /** + * Retrieve a single derived request attribute. + * + * Retrieves a single derived request attribute as described in + * getAttributes(). If the attribute has not been previously set, returns + * the default value as provided. + * + * This method obviates the need for a hasAttribute() method, as it allows + * specifying a default value to return if the attribute is not found. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $default Default value to return if the attribute does not exist. + * @return mixed + */ + public function getAttribute(string $name, $default = null); + /** + * Return an instance with the specified derived request attribute. + * + * This method allows setting a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $value The value of the attribute. + * @return static + */ + public function withAttribute(string $name, $value) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface; + /** + * Return an instance that removes the specified derived request attribute. + * + * This method allows removing a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @return static + */ + public function withoutAttribute(string $name) : \YoastSEO_Vendor\Psr\Http\Message\ServerRequestInterface; +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/StreamInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/StreamInterface.php new file mode 100644 index 00000000..579697a2 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/http-message/src/StreamInterface.php @@ -0,0 +1,144 @@ + + * [user-info@]host[:port] + * + * + * If the port component is not set or is the standard port for the current + * scheme, it SHOULD NOT be included. + * + * @see https://tools.ietf.org/html/rfc3986#section-3.2 + * @return string The URI authority, in "[user-info@]host[:port]" format. + */ + public function getAuthority() : string; + /** + * Retrieve the user information component of the URI. + * + * If no user information is present, this method MUST return an empty + * string. + * + * If a user is present in the URI, this will return that value; + * additionally, if the password is also present, it will be appended to the + * user value, with a colon (":") separating the values. + * + * The trailing "@" character is not part of the user information and MUST + * NOT be added. + * + * @return string The URI user information, in "username[:password]" format. + */ + public function getUserInfo() : string; + /** + * Retrieve the host component of the URI. + * + * If no host is present, this method MUST return an empty string. + * + * The value returned MUST be normalized to lowercase, per RFC 3986 + * Section 3.2.2. + * + * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 + * @return string The URI host. + */ + public function getHost() : string; + /** + * Retrieve the port component of the URI. + * + * If a port is present, and it is non-standard for the current scheme, + * this method MUST return it as an integer. If the port is the standard port + * used with the current scheme, this method SHOULD return null. + * + * If no port is present, and no scheme is present, this method MUST return + * a null value. + * + * If no port is present, but a scheme is present, this method MAY return + * the standard port for that scheme, but SHOULD return null. + * + * @return null|int The URI port. + */ + public function getPort() : ?int; + /** + * Retrieve the path component of the URI. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * Normally, the empty path "" and absolute path "/" are considered equal as + * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically + * do this normalization because in contexts with a trimmed base path, e.g. + * the front controller, this difference becomes significant. It's the task + * of the user to handle both "" and "/". + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.3. + * + * As an example, if the value should include a slash ("/") not intended as + * delimiter between path segments, that value MUST be passed in encoded + * form (e.g., "%2F") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.3 + * @return string The URI path. + */ + public function getPath() : string; + /** + * Retrieve the query string of the URI. + * + * If no query string is present, this method MUST return an empty string. + * + * The leading "?" character is not part of the query and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.4. + * + * As an example, if a value in a key/value pair of the query string should + * include an ampersand ("&") not intended as a delimiter between values, + * that value MUST be passed in encoded form (e.g., "%26") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.4 + * @return string The URI query string. + */ + public function getQuery() : string; + /** + * Retrieve the fragment component of the URI. + * + * If no fragment is present, this method MUST return an empty string. + * + * The leading "#" character is not part of the fragment and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.5. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.5 + * @return string The URI fragment. + */ + public function getFragment() : string; + /** + * Return an instance with the specified scheme. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified scheme. + * + * Implementations MUST support the schemes "http" and "https" case + * insensitively, and MAY accommodate other schemes if required. + * + * An empty scheme is equivalent to removing the scheme. + * + * @param string $scheme The scheme to use with the new instance. + * @return static A new instance with the specified scheme. + * @throws \InvalidArgumentException for invalid or unsupported schemes. + */ + public function withScheme(string $scheme) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface; + /** + * Return an instance with the specified user information. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified user information. + * + * Password is optional, but the user information MUST include the + * user; an empty string for the user is equivalent to removing user + * information. + * + * @param string $user The user name to use for authority. + * @param null|string $password The password associated with $user. + * @return static A new instance with the specified user information. + */ + public function withUserInfo(string $user, ?string $password = null) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface; + /** + * Return an instance with the specified host. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified host. + * + * An empty host value is equivalent to removing the host. + * + * @param string $host The hostname to use with the new instance. + * @return static A new instance with the specified host. + * @throws \InvalidArgumentException for invalid hostnames. + */ + public function withHost(string $host) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface; + /** + * Return an instance with the specified port. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified port. + * + * Implementations MUST raise an exception for ports outside the + * established TCP and UDP port ranges. + * + * A null value provided for the port is equivalent to removing the port + * information. + * + * @param null|int $port The port to use with the new instance; a null value + * removes the port information. + * @return static A new instance with the specified port. + * @throws \InvalidArgumentException for invalid ports. + */ + public function withPort(?int $port) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface; + /** + * Return an instance with the specified path. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified path. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * If the path is intended to be domain-relative rather than path relative then + * it must begin with a slash ("/"). Paths not starting with a slash ("/") + * are assumed to be relative to some base path known to the application or + * consumer. + * + * Users can provide both encoded and decoded path characters. + * Implementations ensure the correct encoding as outlined in getPath(). + * + * @param string $path The path to use with the new instance. + * @return static A new instance with the specified path. + * @throws \InvalidArgumentException for invalid paths. + */ + public function withPath(string $path) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface; + /** + * Return an instance with the specified query string. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified query string. + * + * Users can provide both encoded and decoded query characters. + * Implementations ensure the correct encoding as outlined in getQuery(). + * + * An empty query string value is equivalent to removing the query string. + * + * @param string $query The query string to use with the new instance. + * @return static A new instance with the specified query string. + * @throws \InvalidArgumentException for invalid query strings. + */ + public function withQuery(string $query) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface; + /** + * Return an instance with the specified URI fragment. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified URI fragment. + * + * Users can provide both encoded and decoded fragment characters. + * Implementations ensure the correct encoding as outlined in getFragment(). + * + * An empty fragment value is equivalent to removing the fragment. + * + * @param string $fragment The fragment to use with the new instance. + * @return static A new instance with the specified fragment. + */ + public function withFragment(string $fragment) : \YoastSEO_Vendor\Psr\Http\Message\UriInterface; + /** + * Return the string representation as a URI reference. + * + * Depending on which components of the URI are present, the resulting + * string is either a full URI or relative reference according to RFC 3986, + * Section 4.1. The method concatenates the various components of the URI, + * using the appropriate delimiters: + * + * - If a scheme is present, it MUST be suffixed by ":". + * - If an authority is present, it MUST be prefixed by "//". + * - The path can be concatenated without delimiters. But there are two + * cases where the path has to be adjusted to make the URI reference + * valid as PHP does not allow to throw an exception in __toString(): + * - If the path is rootless and an authority is present, the path MUST + * be prefixed by "/". + * - If the path is starting with more than one "/" and no authority is + * present, the starting slashes MUST be reduced to one. + * - If a query is present, it MUST be prefixed by "?". + * - If a fragment is present, it MUST be prefixed by "#". + * + * @see http://tools.ietf.org/html/rfc3986#section-4.1 + * @return string + */ + public function __toString() : string; +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/AbstractLogger.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/AbstractLogger.php new file mode 100644 index 00000000..6d9fd9f8 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/AbstractLogger.php @@ -0,0 +1,121 @@ +log(\YoastSEO_Vendor\Psr\Log\LogLevel::EMERGENCY, $message, $context); + } + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string $message + * @param mixed[] $context + * + * @return void + */ + public function alert($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::ALERT, $message, $context); + } + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string $message + * @param mixed[] $context + * + * @return void + */ + public function critical($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::CRITICAL, $message, $context); + } + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string $message + * @param mixed[] $context + * + * @return void + */ + public function error($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::ERROR, $message, $context); + } + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string $message + * @param mixed[] $context + * + * @return void + */ + public function warning($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::WARNING, $message, $context); + } + /** + * Normal but significant events. + * + * @param string $message + * @param mixed[] $context + * + * @return void + */ + public function notice($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::NOTICE, $message, $context); + } + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string $message + * @param mixed[] $context + * + * @return void + */ + public function info($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::INFO, $message, $context); + } + /** + * Detailed debug information. + * + * @param string $message + * @param mixed[] $context + * + * @return void + */ + public function debug($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::DEBUG, $message, $context); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/InvalidArgumentException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/InvalidArgumentException.php new file mode 100644 index 00000000..86a78ec6 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/InvalidArgumentException.php @@ -0,0 +1,7 @@ +logger = $logger; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LoggerInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LoggerInterface.php new file mode 100644 index 00000000..b2e249f5 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/LoggerInterface.php @@ -0,0 +1,117 @@ +log(\YoastSEO_Vendor\Psr\Log\LogLevel::EMERGENCY, $message, $context); + } + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function alert($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::ALERT, $message, $context); + } + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function critical($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::CRITICAL, $message, $context); + } + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function error($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::ERROR, $message, $context); + } + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function warning($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::WARNING, $message, $context); + } + /** + * Normal but significant events. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function notice($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::NOTICE, $message, $context); + } + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function info($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::INFO, $message, $context); + } + /** + * Detailed debug information. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function debug($message, array $context = array()) + { + $this->log(\YoastSEO_Vendor\Psr\Log\LogLevel::DEBUG, $message, $context); + } + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + public abstract function log($level, $message, array $context = array()); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/NullLogger.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/NullLogger.php new file mode 100644 index 00000000..8284fdab --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/psr/log/Psr/Log/NullLogger.php @@ -0,0 +1,30 @@ +logger) { }` + * blocks. + */ +class NullLogger extends \YoastSEO_Vendor\Psr\Log\AbstractLogger +{ + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + public function log($level, $message, array $context = array()) + { + // noop + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php new file mode 100644 index 00000000..5d7d7bd7 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Argument; + +/** + * @internal + */ +class RewindableGenerator implements \IteratorAggregate, \Countable +{ + private $generator; + private $count; + /** + * @param int|callable $count + */ + public function __construct(callable $generator, $count) + { + $this->generator = $generator; + $this->count = $count; + } + public function getIterator() + { + $g = $this->generator; + return $g(); + } + public function count() + { + if (\is_callable($count = $this->count)) { + $this->count = $count(); + } + return $this->count; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Container.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Container.php new file mode 100644 index 00000000..e0ff052a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Container.php @@ -0,0 +1,465 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection; + +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\EnvNotFoundException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; +/** + * Container is a dependency injection container. + * + * It gives access to object instances (services). + * Services and parameters are simple key/pair stores. + * The container can have four possible behaviors when a service + * does not exist (or is not initialized for the last case): + * + * * EXCEPTION_ON_INVALID_REFERENCE: Throws an exception (the default) + * * NULL_ON_INVALID_REFERENCE: Returns null + * * IGNORE_ON_INVALID_REFERENCE: Ignores the wrapping command asking for the reference + * (for instance, ignore a setter if the service does not exist) + * * IGNORE_ON_UNINITIALIZED_REFERENCE: Ignores/returns null for uninitialized services or invalid references + * + * @author Fabien Potencier + * @author Johannes M. Schmitt + */ +class Container implements \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ResettableContainerInterface +{ + protected $parameterBag; + protected $services = []; + protected $fileMap = []; + protected $methodMap = []; + protected $aliases = []; + protected $loading = []; + protected $resolving = []; + protected $syntheticIds = []; + /** + * @internal + */ + protected $privates = []; + /** + * @internal + */ + protected $normalizedIds = []; + private $underscoreMap = ['_' => '', '.' => '_', '\\' => '_']; + private $envCache = []; + private $compiled = \false; + private $getEnv; + public function __construct(\YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface $parameterBag = null) + { + $this->parameterBag = $parameterBag ?: new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag(); + } + /** + * Compiles the container. + * + * This method does two things: + * + * * Parameter values are resolved; + * * The parameter bag is frozen. + */ + public function compile() + { + $this->parameterBag->resolve(); + $this->parameterBag = new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag($this->parameterBag->all()); + $this->compiled = \true; + } + /** + * Returns true if the container is compiled. + * + * @return bool + */ + public function isCompiled() + { + return $this->compiled; + } + /** + * Returns true if the container parameter bag are frozen. + * + * @deprecated since version 3.3, to be removed in 4.0. + * + * @return bool true if the container parameter bag are frozen, false otherwise + */ + public function isFrozen() + { + @\trigger_error(\sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), \E_USER_DEPRECATED); + return $this->parameterBag instanceof \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; + } + /** + * Gets the service container parameter bag. + * + * @return ParameterBagInterface A ParameterBagInterface instance + */ + public function getParameterBag() + { + return $this->parameterBag; + } + /** + * Gets a parameter. + * + * @param string $name The parameter name + * + * @return mixed The parameter value + * + * @throws InvalidArgumentException if the parameter is not defined + */ + public function getParameter($name) + { + return $this->parameterBag->get($name); + } + /** + * Checks if a parameter exists. + * + * @param string $name The parameter name + * + * @return bool The presence of parameter in container + */ + public function hasParameter($name) + { + return $this->parameterBag->has($name); + } + /** + * Sets a parameter. + * + * @param string $name The parameter name + * @param mixed $value The parameter value + */ + public function setParameter($name, $value) + { + $this->parameterBag->set($name, $value); + } + /** + * Sets a service. + * + * Setting a synthetic service to null resets it: has() returns false and get() + * behaves in the same way as if the service was never created. + * + * @param string $id The service identifier + * @param object|null $service The service instance + */ + public function set($id, $service) + { + // Runs the internal initializer; used by the dumped container to include always-needed files + if (isset($this->privates['service_container']) && $this->privates['service_container'] instanceof \Closure) { + $initialize = $this->privates['service_container']; + unset($this->privates['service_container']); + $initialize(); + } + $id = $this->normalizeId($id); + if ('service_container' === $id) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException('You cannot set service "service_container".'); + } + if (isset($this->privates[$id]) || !(isset($this->fileMap[$id]) || isset($this->methodMap[$id]))) { + if (!isset($this->privates[$id]) && !isset($this->getRemovedIds()[$id])) { + // no-op + } elseif (null === $service) { + @\trigger_error(\sprintf('The "%s" service is private, unsetting it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); + unset($this->privates[$id]); + } else { + @\trigger_error(\sprintf('The "%s" service is private, replacing it is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); + } + } elseif (isset($this->services[$id])) { + if (null === $service) { + @\trigger_error(\sprintf('The "%s" service is already initialized, unsetting it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), \E_USER_DEPRECATED); + } else { + @\trigger_error(\sprintf('The "%s" service is already initialized, replacing it is deprecated since Symfony 3.3 and will fail in 4.0.', $id), \E_USER_DEPRECATED); + } + } + if (isset($this->aliases[$id])) { + unset($this->aliases[$id]); + } + if (null === $service) { + unset($this->services[$id]); + return; + } + $this->services[$id] = $service; + } + /** + * Returns true if the given service is defined. + * + * @param string $id The service identifier + * + * @return bool true if the service is defined, false otherwise + */ + public function has($id) + { + for ($i = 2;;) { + if (isset($this->privates[$id])) { + @\trigger_error(\sprintf('The "%s" service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.', $id), \E_USER_DEPRECATED); + } + if (isset($this->aliases[$id])) { + $id = $this->aliases[$id]; + } + if (isset($this->services[$id])) { + return \true; + } + if ('service_container' === $id) { + return \true; + } + if (isset($this->fileMap[$id]) || isset($this->methodMap[$id])) { + return \true; + } + if (--$i && $id !== ($normalizedId = $this->normalizeId($id))) { + $id = $normalizedId; + continue; + } + // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, + // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) + if (!$this->methodMap && !$this instanceof \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerBuilder && __CLASS__ !== static::class && \method_exists($this, 'get' . \strtr($id, $this->underscoreMap) . 'Service')) { + @\trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); + return \true; + } + return \false; + } + } + /** + * Gets a service. + * + * If a service is defined both through a set() method and + * with a get{$id}Service() method, the former has always precedence. + * + * @param string $id The service identifier + * @param int $invalidBehavior The behavior when the service does not exist + * + * @return object|null The associated service + * + * @throws ServiceCircularReferenceException When a circular reference is detected + * @throws ServiceNotFoundException When the service is not defined + * @throws \Exception if an exception has been thrown when the service has been resolved + * + * @see Reference + */ + public function get($id, $invalidBehavior = 1) + { + // Attempt to retrieve the service by checking first aliases then + // available services. Service IDs are case insensitive, however since + // this method can be called thousands of times during a request, avoid + // calling $this->normalizeId($id) unless necessary. + for ($i = 2;;) { + if (isset($this->privates[$id])) { + @\trigger_error(\sprintf('The "%s" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container directly and use dependency injection instead.', $id), \E_USER_DEPRECATED); + } + if (isset($this->aliases[$id])) { + $id = $this->aliases[$id]; + } + // Re-use shared service instance if it exists. + if (isset($this->services[$id])) { + return $this->services[$id]; + } + if ('service_container' === $id) { + return $this; + } + if (isset($this->loading[$id])) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException($id, \array_merge(\array_keys($this->loading), [$id])); + } + $this->loading[$id] = \true; + try { + if (isset($this->fileMap[$id])) { + return 4 === $invalidBehavior ? null : $this->load($this->fileMap[$id]); + } elseif (isset($this->methodMap[$id])) { + return 4 === $invalidBehavior ? null : $this->{$this->methodMap[$id]}(); + } elseif (--$i && $id !== ($normalizedId = $this->normalizeId($id))) { + unset($this->loading[$id]); + $id = $normalizedId; + continue; + } elseif (!$this->methodMap && !$this instanceof \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerBuilder && __CLASS__ !== static::class && \method_exists($this, $method = 'get' . \strtr($id, $this->underscoreMap) . 'Service')) { + // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, + // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) + @\trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); + return 4 === $invalidBehavior ? null : $this->{$method}(); + } + break; + } catch (\Exception $e) { + unset($this->services[$id]); + throw $e; + } finally { + unset($this->loading[$id]); + } + } + if (1 === $invalidBehavior) { + if (!$id) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException($id); + } + if (isset($this->syntheticIds[$id])) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException($id, null, null, [], \sprintf('The "%s" service is synthetic, it needs to be set at boot time before it can be used.', $id)); + } + if (isset($this->getRemovedIds()[$id])) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException($id, null, null, [], \sprintf('The "%s" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.', $id)); + } + $alternatives = []; + foreach ($this->getServiceIds() as $knownId) { + $lev = \levenshtein($id, $knownId); + if ($lev <= \strlen($id) / 3 || \false !== \strpos($knownId, $id)) { + $alternatives[] = $knownId; + } + } + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException($id, null, null, $alternatives); + } + } + /** + * Returns true if the given service has actually been initialized. + * + * @param string $id The service identifier + * + * @return bool true if service has already been initialized, false otherwise + */ + public function initialized($id) + { + $id = $this->normalizeId($id); + if (isset($this->privates[$id])) { + @\trigger_error(\sprintf('Checking for the initialization of the "%s" private service is deprecated since Symfony 3.4 and won\'t be supported anymore in Symfony 4.0.', $id), \E_USER_DEPRECATED); + } + if (isset($this->aliases[$id])) { + $id = $this->aliases[$id]; + } + if ('service_container' === $id) { + return \false; + } + return isset($this->services[$id]); + } + /** + * {@inheritdoc} + */ + public function reset() + { + $this->services = []; + } + /** + * Gets all service ids. + * + * @return string[] An array of all defined service ids + */ + public function getServiceIds() + { + $ids = []; + if (!$this->methodMap && !$this instanceof \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerBuilder && __CLASS__ !== static::class) { + // We only check the convention-based factory in a compiled container (i.e. a child class other than a ContainerBuilder, + // and only when the dumper has not generated the method map (otherwise the method map is considered to be fully populated by the dumper) + @\trigger_error('Generating a dumped container without populating the method map is deprecated since Symfony 3.2 and will be unsupported in 4.0. Update your dumper to generate the method map.', \E_USER_DEPRECATED); + foreach (\get_class_methods($this) as $method) { + if (\preg_match('/^get(.+)Service$/', $method, $match)) { + $ids[] = self::underscore($match[1]); + } + } + } + $ids[] = 'service_container'; + return \array_map('strval', \array_unique(\array_merge($ids, \array_keys($this->methodMap), \array_keys($this->fileMap), \array_keys($this->aliases), \array_keys($this->services)))); + } + /** + * Gets service ids that existed at compile time. + * + * @return array + */ + public function getRemovedIds() + { + return []; + } + /** + * Camelizes a string. + * + * @param string $id A string to camelize + * + * @return string The camelized string + */ + public static function camelize($id) + { + return \strtr(\ucwords(\strtr($id, ['_' => ' ', '.' => '_ ', '\\' => '_ '])), [' ' => '']); + } + /** + * A string to underscore. + * + * @param string $id The string to underscore + * + * @return string The underscored string + */ + public static function underscore($id) + { + return \strtolower(\preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\\d])([A-Z])/'], ['\\1_\\2', '\\1_\\2'], \str_replace('_', '.', $id))); + } + /** + * Creates a service by requiring its factory file. + */ + protected function load($file) + { + return require $file; + } + /** + * Fetches a variable from the environment. + * + * @param string $name The name of the environment variable + * + * @return mixed The value to use for the provided environment variable name + * + * @throws EnvNotFoundException When the environment variable is not found and has no default value + */ + protected function getEnv($name) + { + if (isset($this->resolving[$envName = "env({$name})"])) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException(\array_keys($this->resolving)); + } + if (isset($this->envCache[$name]) || \array_key_exists($name, $this->envCache)) { + return $this->envCache[$name]; + } + if (!$this->has($id = 'container.env_var_processors_locator')) { + $this->set($id, new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ServiceLocator([])); + } + if (!$this->getEnv) { + $this->getEnv = new \ReflectionMethod($this, __FUNCTION__); + $this->getEnv->setAccessible(\true); + $this->getEnv = $this->getEnv->getClosure($this); + } + $processors = $this->get($id); + if (\false !== ($i = \strpos($name, ':'))) { + $prefix = \substr($name, 0, $i); + $localName = \substr($name, 1 + $i); + } else { + $prefix = 'string'; + $localName = $name; + } + $processor = $processors->has($prefix) ? $processors->get($prefix) : new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\EnvVarProcessor($this); + $this->resolving[$envName] = \true; + try { + return $this->envCache[$name] = $processor->getEnv($prefix, $localName, $this->getEnv); + } finally { + unset($this->resolving[$envName]); + } + } + /** + * Returns the case sensitive id used at registration time. + * + * @param string $id + * + * @return string + * + * @internal + */ + public function normalizeId($id) + { + if (!\is_string($id)) { + $id = (string) $id; + } + if (isset($this->normalizedIds[$normalizedId = \strtolower($id)])) { + $normalizedId = $this->normalizedIds[$normalizedId]; + if ($id !== $normalizedId) { + @\trigger_error(\sprintf('Service identifiers will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.3.', $id, $normalizedId), \E_USER_DEPRECATED); + } + } else { + $normalizedId = $this->normalizedIds[$normalizedId] = $id; + } + return $normalizedId; + } + private function __clone() + { + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ContainerInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ContainerInterface.php new file mode 100644 index 00000000..fc028a93 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ContainerInterface.php @@ -0,0 +1,91 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection; + +use YoastSEO_Vendor\Psr\Container\ContainerInterface as PsrContainerInterface; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; +/** + * ContainerInterface is the interface implemented by service container classes. + * + * @author Fabien Potencier + * @author Johannes M. Schmitt + */ +interface ContainerInterface extends \YoastSEO_Vendor\Psr\Container\ContainerInterface +{ + const EXCEPTION_ON_INVALID_REFERENCE = 1; + const NULL_ON_INVALID_REFERENCE = 2; + const IGNORE_ON_INVALID_REFERENCE = 3; + const IGNORE_ON_UNINITIALIZED_REFERENCE = 4; + /** + * Sets a service. + * + * @param string $id The service identifier + * @param object|null $service The service instance + */ + public function set($id, $service); + /** + * Gets a service. + * + * @param string $id The service identifier + * @param int $invalidBehavior The behavior when the service does not exist + * + * @return object|null The associated service + * + * @throws ServiceCircularReferenceException When a circular reference is detected + * @throws ServiceNotFoundException When the service is not defined + * + * @see Reference + */ + public function get($id, $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE); + /** + * Returns true if the given service is defined. + * + * @param string $id The service identifier + * + * @return bool true if the service is defined, false otherwise + */ + public function has($id); + /** + * Check for whether or not a service has been initialized. + * + * @param string $id + * + * @return bool true if the service has been initialized, false otherwise + */ + public function initialized($id); + /** + * Gets a parameter. + * + * @param string $name The parameter name + * + * @return mixed The parameter value + * + * @throws InvalidArgumentException if the parameter is not defined + */ + public function getParameter($name); + /** + * Checks if a parameter exists. + * + * @param string $name The parameter name + * + * @return bool The presence of parameter in container + */ + public function hasParameter($name); + /** + * Sets a parameter. + * + * @param string $name The parameter name + * @param mixed $value The parameter value + */ + public function setParameter($name, $value); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php new file mode 100644 index 00000000..f453d9da --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +/** + * This exception is thrown when an environment variable is not found. + * + * @author Nicolas Grekas + */ +class EnvNotFoundException extends \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException +{ + public function __construct($name) + { + parent::__construct(\sprintf('Environment variable not found: "%s".', $name)); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php new file mode 100644 index 00000000..3918357f --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +use YoastSEO_Vendor\Psr\Container\ContainerExceptionInterface; +/** + * Base ExceptionInterface for Dependency Injection component. + * + * @author Fabien Potencier + * @author Bulat Shakirzyanov + */ +interface ExceptionInterface extends \YoastSEO_Vendor\Psr\Container\ContainerExceptionInterface +{ +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php new file mode 100644 index 00000000..9b32dd7a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +/** + * Base InvalidArgumentException for Dependency Injection component. + * + * @author Bulat Shakirzyanov + */ +class InvalidArgumentException extends \InvalidArgumentException implements \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ExceptionInterface +{ +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/LogicException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/LogicException.php new file mode 100644 index 00000000..cec6f276 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/LogicException.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +/** + * Base LogicException for Dependency Injection component. + */ +class LogicException extends \LogicException implements \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ExceptionInterface +{ +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php new file mode 100644 index 00000000..eb166a7c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +/** + * This exception is thrown when a circular reference in a parameter is detected. + * + * @author Fabien Potencier + */ +class ParameterCircularReferenceException extends \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\RuntimeException +{ + private $parameters; + public function __construct($parameters, \Exception $previous = null) + { + parent::__construct(\sprintf('Circular reference detected for parameter "%s" ("%s" > "%s").', $parameters[0], \implode('" > "', $parameters), $parameters[0]), 0, $previous); + $this->parameters = $parameters; + } + public function getParameters() + { + return $this->parameters; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/RuntimeException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/RuntimeException.php new file mode 100644 index 00000000..f4ea1a6c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/RuntimeException.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +/** + * Base RuntimeException for Dependency Injection component. + * + * @author Johannes M. Schmitt + */ +class RuntimeException extends \RuntimeException implements \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ExceptionInterface +{ +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php new file mode 100644 index 00000000..5aab8312 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +/** + * This exception is thrown when a circular reference is detected. + * + * @author Johannes M. Schmitt + */ +class ServiceCircularReferenceException extends \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\RuntimeException +{ + private $serviceId; + private $path; + public function __construct($serviceId, array $path, \Exception $previous = null) + { + parent::__construct(\sprintf('Circular reference detected for service "%s", path: "%s".', $serviceId, \implode(' -> ', $path)), 0, $previous); + $this->serviceId = $serviceId; + $this->path = $path; + } + public function getServiceId() + { + return $this->serviceId; + } + public function getPath() + { + return $this->path; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php new file mode 100644 index 00000000..77b7938a --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception; + +use YoastSEO_Vendor\Psr\Container\NotFoundExceptionInterface; +/** + * This exception is thrown when a non-existent service is requested. + * + * @author Johannes M. Schmitt + */ +class ServiceNotFoundException extends \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException implements \YoastSEO_Vendor\Psr\Container\NotFoundExceptionInterface +{ + private $id; + private $sourceId; + private $alternatives; + public function __construct($id, $sourceId = null, \Exception $previous = null, array $alternatives = [], $msg = null) + { + if (null !== $msg) { + // no-op + } elseif (null === $sourceId) { + $msg = \sprintf('You have requested a non-existent service "%s".', $id); + } else { + $msg = \sprintf('The service "%s" has a dependency on a non-existent service "%s".', $sourceId, $id); + } + if ($alternatives) { + if (1 == \count($alternatives)) { + $msg .= ' Did you mean this: "'; + } else { + $msg .= ' Did you mean one of these: "'; + } + $msg .= \implode('", "', $alternatives) . '"?'; + } + parent::__construct($msg, 0, $previous); + $this->id = $id; + $this->sourceId = $sourceId; + $this->alternatives = $alternatives; + } + public function getId() + { + return $this->id; + } + public function getSourceId() + { + return $this->sourceId; + } + public function getAlternatives() + { + return $this->alternatives; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php new file mode 100644 index 00000000..f9a4c669 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php @@ -0,0 +1,108 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag; + +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\RuntimeException; +/** + * @author Nicolas Grekas + */ +class EnvPlaceholderParameterBag extends \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\ParameterBag +{ + private $envPlaceholders = []; + private $providedTypes = []; + /** + * {@inheritdoc} + */ + public function get($name) + { + if (0 === \strpos($name, 'env(') && ')' === \substr($name, -1) && 'env()' !== $name) { + $env = \substr($name, 4, -1); + if (isset($this->envPlaceholders[$env])) { + foreach ($this->envPlaceholders[$env] as $placeholder) { + return $placeholder; + // return first result + } + } + if (!\preg_match('/^(?:\\w++:)*+\\w++$/', $env)) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\InvalidArgumentException(\sprintf('Invalid "%s" name: only "word" characters are allowed.', $name)); + } + if ($this->has($name)) { + $defaultValue = parent::get($name); + if (null !== $defaultValue && !\is_scalar($defaultValue)) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\RuntimeException(\sprintf('The default value of an env() parameter must be scalar or null, but "%s" given to "%s".', \gettype($defaultValue), $name)); + } + } + $uniqueName = \md5($name . \uniqid(\mt_rand(), \true)); + $placeholder = \sprintf('env_%s_%s', \str_replace(':', '_', $env), $uniqueName); + $this->envPlaceholders[$env][$placeholder] = $placeholder; + return $placeholder; + } + return parent::get($name); + } + /** + * Returns the map of env vars used in the resolved parameter values to their placeholders. + * + * @return string[][] A map of env var names to their placeholders + */ + public function getEnvPlaceholders() + { + return $this->envPlaceholders; + } + /** + * Merges the env placeholders of another EnvPlaceholderParameterBag. + */ + public function mergeEnvPlaceholders(self $bag) + { + if ($newPlaceholders = $bag->getEnvPlaceholders()) { + $this->envPlaceholders += $newPlaceholders; + foreach ($newPlaceholders as $env => $placeholders) { + $this->envPlaceholders[$env] += $placeholders; + } + } + } + /** + * Maps env prefixes to their corresponding PHP types. + */ + public function setProvidedTypes(array $providedTypes) + { + $this->providedTypes = $providedTypes; + } + /** + * Gets the PHP types corresponding to env() parameter prefixes. + * + * @return string[][] + */ + public function getProvidedTypes() + { + return $this->providedTypes; + } + /** + * {@inheritdoc} + */ + public function resolve() + { + if ($this->resolved) { + return; + } + parent::resolve(); + foreach ($this->envPlaceholders as $env => $placeholders) { + if (!$this->has($name = "env({$env})")) { + continue; + } + if (\is_numeric($default = $this->parameters[$name])) { + $this->parameters[$name] = (string) $default; + } elseif (null !== $default && !\is_scalar($default)) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\RuntimeException(\sprintf('The default value of env parameter "%s" must be scalar or null, "%s" given.', $env, \gettype($default))); + } + } + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php new file mode 100644 index 00000000..c2421c68 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag; + +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\LogicException; +/** + * Holds read-only parameters. + * + * @author Fabien Potencier + */ +class FrozenParameterBag extends \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\ParameterBag +{ + /** + * For performance reasons, the constructor assumes that + * all keys are already lowercased. + * + * This is always the case when used internally. + * + * @param array $parameters An array of parameters + */ + public function __construct(array $parameters = []) + { + $this->parameters = $parameters; + $this->resolved = \true; + } + /** + * {@inheritdoc} + */ + public function clear() + { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\LogicException('Impossible to call clear() on a frozen ParameterBag.'); + } + /** + * {@inheritdoc} + */ + public function add(array $parameters) + { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\LogicException('Impossible to call add() on a frozen ParameterBag.'); + } + /** + * {@inheritdoc} + */ + public function set($name, $value) + { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\LogicException('Impossible to call set() on a frozen ParameterBag.'); + } + /** + * {@inheritdoc} + */ + public function remove($name) + { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\LogicException('Impossible to call remove() on a frozen ParameterBag.'); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php new file mode 100644 index 00000000..c7f8b712 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php @@ -0,0 +1,263 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag; + +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\RuntimeException; +/** + * Holds parameters. + * + * @author Fabien Potencier + */ +class ParameterBag implements \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface +{ + protected $parameters = []; + protected $resolved = \false; + private $normalizedNames = []; + /** + * @param array $parameters An array of parameters + */ + public function __construct(array $parameters = []) + { + $this->add($parameters); + } + /** + * Clears all parameters. + */ + public function clear() + { + $this->parameters = []; + } + /** + * Adds parameters to the service container parameters. + * + * @param array $parameters An array of parameters + */ + public function add(array $parameters) + { + foreach ($parameters as $key => $value) { + $this->set($key, $value); + } + } + /** + * {@inheritdoc} + */ + public function all() + { + return $this->parameters; + } + /** + * {@inheritdoc} + */ + public function get($name) + { + $name = $this->normalizeName($name); + if (!\array_key_exists($name, $this->parameters)) { + if (!$name) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException($name); + } + $alternatives = []; + foreach ($this->parameters as $key => $parameterValue) { + $lev = \levenshtein($name, $key); + if ($lev <= \strlen($name) / 3 || \false !== \strpos($key, $name)) { + $alternatives[] = $key; + } + } + $nonNestedAlternative = null; + if (!\count($alternatives) && \false !== \strpos($name, '.')) { + $namePartsLength = \array_map('strlen', \explode('.', $name)); + $key = \substr($name, 0, -1 * (1 + \array_pop($namePartsLength))); + while (\count($namePartsLength)) { + if ($this->has($key)) { + if (\is_array($this->get($key))) { + $nonNestedAlternative = $key; + } + break; + } + $key = \substr($key, 0, -1 * (1 + \array_pop($namePartsLength))); + } + } + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException($name, null, null, null, $alternatives, $nonNestedAlternative); + } + return $this->parameters[$name]; + } + /** + * Sets a service container parameter. + * + * @param string $name The parameter name + * @param mixed $value The parameter value + */ + public function set($name, $value) + { + $this->parameters[$this->normalizeName($name)] = $value; + } + /** + * {@inheritdoc} + */ + public function has($name) + { + return \array_key_exists($this->normalizeName($name), $this->parameters); + } + /** + * Removes a parameter. + * + * @param string $name The parameter name + */ + public function remove($name) + { + unset($this->parameters[$this->normalizeName($name)]); + } + /** + * {@inheritdoc} + */ + public function resolve() + { + if ($this->resolved) { + return; + } + $parameters = []; + foreach ($this->parameters as $key => $value) { + try { + $value = $this->resolveValue($value); + $parameters[$key] = $this->unescapeValue($value); + } catch (\YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException $e) { + $e->setSourceKey($key); + throw $e; + } + } + $this->parameters = $parameters; + $this->resolved = \true; + } + /** + * Replaces parameter placeholders (%name%) by their values. + * + * @param mixed $value A value + * @param array $resolving An array of keys that are being resolved (used internally to detect circular references) + * + * @return mixed The resolved value + * + * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist + * @throws ParameterCircularReferenceException if a circular reference if detected + * @throws RuntimeException when a given parameter has a type problem + */ + public function resolveValue($value, array $resolving = []) + { + if (\is_array($value)) { + $args = []; + foreach ($value as $k => $v) { + $args[\is_string($k) ? $this->resolveValue($k, $resolving) : $k] = $this->resolveValue($v, $resolving); + } + return $args; + } + if (!\is_string($value) || 2 > \strlen($value)) { + return $value; + } + return $this->resolveString($value, $resolving); + } + /** + * Resolves parameters inside a string. + * + * @param string $value The string to resolve + * @param array $resolving An array of keys that are being resolved (used internally to detect circular references) + * + * @return mixed The resolved string + * + * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist + * @throws ParameterCircularReferenceException if a circular reference if detected + * @throws RuntimeException when a given parameter has a type problem + */ + public function resolveString($value, array $resolving = []) + { + // we do this to deal with non string values (Boolean, integer, ...) + // as the preg_replace_callback throw an exception when trying + // a non-string in a parameter value + if (\preg_match('/^%([^%\\s]+)%$/', $value, $match)) { + $key = $match[1]; + $lcKey = \strtolower($key); + // strtolower() to be removed in 4.0 + if (isset($resolving[$lcKey])) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException(\array_keys($resolving)); + } + $resolving[$lcKey] = \true; + return $this->resolved ? $this->get($key) : $this->resolveValue($this->get($key), $resolving); + } + return \preg_replace_callback('/%%|%([^%\\s]+)%/', function ($match) use($resolving, $value) { + // skip %% + if (!isset($match[1])) { + return '%%'; + } + $key = $match[1]; + $lcKey = \strtolower($key); + // strtolower() to be removed in 4.0 + if (isset($resolving[$lcKey])) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException(\array_keys($resolving)); + } + $resolved = $this->get($key); + if (!\is_string($resolved) && !\is_numeric($resolved)) { + throw new \YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\RuntimeException(\sprintf('A string value must be composed of strings and/or numbers, but found parameter "%s" of type "%s" inside string value "%s".', $key, \gettype($resolved), $value)); + } + $resolved = (string) $resolved; + $resolving[$lcKey] = \true; + return $this->isResolved() ? $resolved : $this->resolveString($resolved, $resolving); + }, $value); + } + public function isResolved() + { + return $this->resolved; + } + /** + * {@inheritdoc} + */ + public function escapeValue($value) + { + if (\is_string($value)) { + return \str_replace('%', '%%', $value); + } + if (\is_array($value)) { + $result = []; + foreach ($value as $k => $v) { + $result[$k] = $this->escapeValue($v); + } + return $result; + } + return $value; + } + /** + * {@inheritdoc} + */ + public function unescapeValue($value) + { + if (\is_string($value)) { + return \str_replace('%%', '%', $value); + } + if (\is_array($value)) { + $result = []; + foreach ($value as $k => $v) { + $result[$k] = $this->unescapeValue($v); + } + return $result; + } + return $value; + } + private function normalizeName($name) + { + if (isset($this->normalizedNames[$normalizedName = \strtolower($name)])) { + $normalizedName = $this->normalizedNames[$normalizedName]; + if ((string) $name !== $normalizedName) { + @\trigger_error(\sprintf('Parameter names will be made case sensitive in Symfony 4.0. Using "%s" instead of "%s" is deprecated since Symfony 3.4.', $name, $normalizedName), \E_USER_DEPRECATED); + } + } else { + $normalizedName = $this->normalizedNames[$normalizedName] = (string) $name; + } + return $normalizedName; + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php new file mode 100644 index 00000000..60a0d98c --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php @@ -0,0 +1,103 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection\ParameterBag; + +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\LogicException; +use YoastSEO_Vendor\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; +/** + * ParameterBagInterface. + * + * @author Fabien Potencier + */ +interface ParameterBagInterface +{ + /** + * Clears all parameters. + * + * @throws LogicException if the ParameterBagInterface can not be cleared + */ + public function clear(); + /** + * Adds parameters to the service container parameters. + * + * @param array $parameters An array of parameters + * + * @throws LogicException if the parameter can not be added + */ + public function add(array $parameters); + /** + * Gets the service container parameters. + * + * @return array An array of parameters + */ + public function all(); + /** + * Gets a service container parameter. + * + * @param string $name The parameter name + * + * @return mixed The parameter value + * + * @throws ParameterNotFoundException if the parameter is not defined + */ + public function get($name); + /** + * Removes a parameter. + * + * @param string $name The parameter name + */ + public function remove($name); + /** + * Sets a service container parameter. + * + * @param string $name The parameter name + * @param mixed $value The parameter value + * + * @throws LogicException if the parameter can not be set + */ + public function set($name, $value); + /** + * Returns true if a parameter name is defined. + * + * @param string $name The parameter name + * + * @return bool true if the parameter name is defined, false otherwise + */ + public function has($name); + /** + * Replaces parameter placeholders (%name%) by their values for all parameters. + */ + public function resolve(); + /** + * Replaces parameter placeholders (%name%) by their values. + * + * @param mixed $value A value + * + * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist + */ + public function resolveValue($value); + /** + * Escape parameter placeholders %. + * + * @param mixed $value + * + * @return mixed + */ + public function escapeValue($value); + /** + * Unescape parameter placeholders %. + * + * @param mixed $value + * + * @return mixed + */ + public function unescapeValue($value); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ResettableContainerInterface.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ResettableContainerInterface.php new file mode 100644 index 00000000..44674925 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/ResettableContainerInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace YoastSEO_Vendor\Symfony\Component\DependencyInjection; + +/** + * ResettableContainerInterface defines additional resetting functionality + * for containers, allowing to release shared services when the container is + * not needed anymore. + * + * @author Christophe Coevoet + */ +interface ResettableContainerInterface extends \YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerInterface +{ + /** + * Resets shared services from the container. + * + * The container is not intended to be used again after being reset in a normal workflow. This method is + * meant as a way to release references for ref-counting. + * A subsequent call to ContainerInterface::get will recreate a new instance of the shared service. + */ + public function reset(); +} diff --git a/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/deprecation-contracts/function.php b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/deprecation-contracts/function.php new file mode 100644 index 00000000..d4371504 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/deprecation-contracts/function.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (!function_exists('trigger_deprecation')) { + /** + * Triggers a silenced deprecation notice. + * + * @param string $package The name of the Composer package that is triggering the deprecation + * @param string $version The version of the package that introduced the deprecation + * @param string $message The message of the deprecation + * @param mixed ...$args Values to insert in the message using printf() formatting + * + * @author Nicolas Grekas + */ + function trigger_deprecation(string $package, string $version, string $message, ...$args): void + { + @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); + } +} diff --git a/wp/wp-content/plugins/wordpress-seo/wp-seo-main.php b/wp/wp-content/plugins/wordpress-seo/wp-seo-main.php new file mode 100644 index 00000000..a3098896 --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/wp-seo-main.php @@ -0,0 +1,592 @@ + ABSPATH . 'wp-admin/includes/class-wp-list-table.php', + 'walker_category' => ABSPATH . 'wp-includes/category-template.php', + ]; + } + + $cn = strtolower( $class_name ); + + if ( ! class_exists( $class_name ) && isset( $classes[ $cn ] ) ) { + require_once $classes[ $cn ]; + } +} + +$yoast_autoload_file = WPSEO_PATH . 'vendor/autoload.php'; + +if ( is_readable( $yoast_autoload_file ) ) { + $yoast_autoloader = require $yoast_autoload_file; +} +elseif ( ! class_exists( 'WPSEO_Options' ) ) { // Still checking since might be site-level autoload R. + add_action( 'admin_init', 'yoast_wpseo_missing_autoload', 1 ); + + return; +} + +/** + * Include the file from the `symfony/deprecation-contracts` dependency instead of autoloading it via composer. + * + * We need to do that because autoloading via composer prevents the vendor-prefixing of the dependency itself. + * Note that we don't expect the function to be ever called since the OAuth2 library should not provide invalid input. + */ +$deprecation_contracts_file = WPSEO_PATH . 'vendor_prefixed/symfony/deprecation-contracts/functions.php'; +if ( is_readable( $deprecation_contracts_file ) ) { + include $deprecation_contracts_file; +} + +if ( function_exists( 'spl_autoload_register' ) ) { + spl_autoload_register( 'wpseo_auto_load' ); +} +require_once WPSEO_PATH . 'src/functions.php'; + +/* ********************* DEFINES DEPENDING ON AUTOLOADED CODE ********************* */ + +/** + * Defaults to production, for safety. + */ +if ( ! defined( 'YOAST_ENVIRONMENT' ) ) { + define( 'YOAST_ENVIRONMENT', 'production' ); +} + +if ( YOAST_ENVIRONMENT === 'development' && isset( $yoast_autoloader ) ) { + add_action( + 'plugins_loaded', + /** + * Reregisters the autoloader so that Yoast SEO is at the front. + * This prevents conflicts with the development versions of our addons. + * An anonymous function is used so we can use the autoloader variable. + * As this is only loaded in development removing this action is not a concern. + * + * @return void + */ + static function () use ( $yoast_autoloader ) { + $yoast_autoloader->unregister(); + $yoast_autoloader->register( true ); + }, + 1 + ); +} + +/** + * Only use minified assets when we are in a production environment. + */ +if ( ! defined( 'WPSEO_CSSJS_SUFFIX' ) ) { + define( 'WPSEO_CSSJS_SUFFIX', ( YOAST_ENVIRONMENT !== 'development' ) ? '.min' : '' ); +} + +/* ***************************** PLUGIN (DE-)ACTIVATION *************************** */ + +/** + * Run single site / network-wide activation of the plugin. + * + * @param bool $networkwide Whether the plugin is being activated network-wide. + * + * @return void + */ +function wpseo_activate( $networkwide = false ) { + if ( ! is_multisite() || ! $networkwide ) { + _wpseo_activate(); + } + else { + /* Multi-site network activation - activate the plugin for all blogs. */ + wpseo_network_activate_deactivate( true ); + } + + // This is done so that the 'uninstall_{$file}' is triggered. + register_uninstall_hook( WPSEO_FILE, '__return_false' ); +} + +/** + * Run single site / network-wide de-activation of the plugin. + * + * @param bool $networkwide Whether the plugin is being de-activated network-wide. + * + * @return void + */ +function wpseo_deactivate( $networkwide = false ) { + if ( ! is_multisite() || ! $networkwide ) { + _wpseo_deactivate(); + } + else { + /* Multi-site network activation - de-activate the plugin for all blogs. */ + wpseo_network_activate_deactivate( false ); + } +} + +/** + * Run network-wide (de-)activation of the plugin. + * + * @param bool $activate True for plugin activation, false for de-activation. + * + * @return void + */ +function wpseo_network_activate_deactivate( $activate = true ) { + global $wpdb; + + $network_blogs = $wpdb->get_col( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE site_id = %d", $wpdb->siteid ) ); + + if ( is_array( $network_blogs ) && $network_blogs !== [] ) { + foreach ( $network_blogs as $blog_id ) { + switch_to_blog( $blog_id ); + + if ( $activate === true ) { + _wpseo_activate(); + } + else { + _wpseo_deactivate(); + } + + restore_current_blog(); + } + } +} + +/** + * Runs on activation of the plugin. + * + * @return void + */ +function _wpseo_activate() { + require_once WPSEO_PATH . 'inc/wpseo-functions.php'; + require_once WPSEO_PATH . 'inc/class-wpseo-installation.php'; + + wpseo_load_textdomain(); // Make sure we have our translations available for the defaults. + + new WPSEO_Installation(); + + WPSEO_Options::get_instance(); + if ( ! is_multisite() ) { + WPSEO_Options::initialize(); + } + else { + WPSEO_Options::maybe_set_multisite_defaults( true ); + } + WPSEO_Options::ensure_options_exist(); + + if ( ! is_multisite() || ! ms_is_switched() ) { + if ( WPSEO_Options::get( 'stripcategorybase' ) === true ) { + // Constructor has side effects so this registers all hooks. + $GLOBALS['wpseo_rewrite'] = new WPSEO_Rewrite(); + } + } + add_action( 'shutdown', [ 'WPSEO_Utils', 'clear_rewrites' ] ); + + WPSEO_Options::set( 'indexing_reason', 'first_install' ); + WPSEO_Options::set( 'first_time_install', true ); + if ( ! defined( 'WP_CLI' ) || ! WP_CLI ) { + WPSEO_Options::set( 'should_redirect_after_install_free', true ); + } + else { + WPSEO_Options::set( 'activation_redirect_timestamp_free', time() ); + } + + // Reset tracking to be disabled by default. + if ( ! YoastSEO()->helpers->product->is_premium() && WPSEO_Options::get( 'toggled_tracking' ) !== true ) { + WPSEO_Options::set( 'tracking', false ); + } + do_action( 'wpseo_register_roles' ); + WPSEO_Role_Manager_Factory::get()->add(); + + do_action( 'wpseo_register_capabilities' ); + WPSEO_Capability_Manager_Factory::get()->add(); + + // Clear cache so the changes are obvious. + WPSEO_Utils::clear_cache(); + + do_action( 'wpseo_activate' ); +} + +/** + * On deactivation, flush the rewrite rules so XML sitemaps stop working. + * + * @return void + */ +function _wpseo_deactivate() { + require_once WPSEO_PATH . 'inc/wpseo-functions.php'; + + add_action( 'shutdown', [ 'WPSEO_Utils', 'clear_rewrites' ] ); + + // Register capabilities, to make sure they are cleaned up. + do_action( 'wpseo_register_roles' ); + do_action( 'wpseo_register_capabilities' ); + + // Clean up capabilities. + WPSEO_Role_Manager_Factory::get()->remove(); + WPSEO_Capability_Manager_Factory::get()->remove(); + + // Clear cache so the changes are obvious. + WPSEO_Utils::clear_cache(); + + do_action( 'wpseo_deactivate' ); +} + +/** + * Run wpseo activation routine on creation / activation of a multisite blog if WPSEO is activated + * network-wide. + * + * Will only be called by multisite actions. + * + * {@internal Unfortunately will fail if the plugin is in the must-use directory. + * {@link https://core.trac.wordpress.org/ticket/24205} }} + * + * @param int|WP_Site $blog_id Blog ID. + * + * @return void + */ +function wpseo_on_activate_blog( $blog_id ) { + if ( ! function_exists( 'is_plugin_active_for_network' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + + if ( $blog_id instanceof WP_Site ) { + $blog_id = (int) $blog_id->blog_id; + } + + if ( is_plugin_active_for_network( WPSEO_BASENAME ) ) { + switch_to_blog( $blog_id ); + wpseo_activate( false ); + restore_current_blog(); + } +} + +/* ***************************** PLUGIN LOADING *************************** */ + +/** + * Load translations. + * + * @return void + */ +function wpseo_load_textdomain() { + $wpseo_path = str_replace( '\\', '/', WPSEO_PATH ); + $mu_path = str_replace( '\\', '/', WPMU_PLUGIN_DIR ); + + if ( stripos( $wpseo_path, $mu_path ) !== false ) { + load_muplugin_textdomain( 'wordpress-seo', dirname( WPSEO_BASENAME ) . '/languages/' ); + } + else { + load_plugin_textdomain( 'wordpress-seo', false, dirname( WPSEO_BASENAME ) . '/languages/' ); + } +} + +add_action( 'plugins_loaded', 'wpseo_load_textdomain' ); + + +/** + * On plugins_loaded: load the minimum amount of essential files for this plugin. + * + * @return void + */ +function wpseo_init() { + require_once WPSEO_PATH . 'inc/wpseo-functions.php'; + require_once WPSEO_PATH . 'inc/wpseo-functions-deprecated.php'; + + // Make sure our option and meta value validation routines and default values are always registered and available. + WPSEO_Options::get_instance(); + WPSEO_Meta::init(); + + if ( version_compare( WPSEO_Options::get( 'version', 1 ), WPSEO_VERSION, '<' ) ) { + if ( function_exists( 'opcache_reset' ) ) { + // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Prevent notices when opcache.restrict_api is set. + @opcache_reset(); + } + + new WPSEO_Upgrade(); + // Get a cleaned up version of the $options. + } + + if ( WPSEO_Options::get( 'stripcategorybase' ) === true ) { + $GLOBALS['wpseo_rewrite'] = new WPSEO_Rewrite(); + } + + if ( WPSEO_Options::get( 'enable_xml_sitemap' ) === true ) { + $GLOBALS['wpseo_sitemaps'] = new WPSEO_Sitemaps(); + } + + if ( ! wp_doing_ajax() ) { + require_once WPSEO_PATH . 'inc/wpseo-non-ajax-functions.php'; + } + + $integrations = []; + $integrations[] = new WPSEO_Slug_Change_Watcher(); + + foreach ( $integrations as $integration ) { + $integration->register_hooks(); + } +} + +/** + * Loads the rest api endpoints. + * + * @return void + */ +function wpseo_init_rest_api() { + // We can't do anything when requirements are not met. + if ( ! WPSEO_Utils::is_api_available() ) { + return; + } + + // Boot up REST API. + $statistics_service = new WPSEO_Statistics_Service( new WPSEO_Statistics() ); + + $endpoints = []; + $endpoints[] = new WPSEO_Endpoint_File_Size( new WPSEO_File_Size_Service() ); + $endpoints[] = new WPSEO_Endpoint_Statistics( $statistics_service ); + + foreach ( $endpoints as $endpoint ) { + $endpoint->register(); + } +} + +/** + * Used to load the required files on the plugins_loaded hook, instead of immediately. + * + * @return void + */ +function wpseo_admin_init() { + new WPSEO_Admin_Init(); +} + +/* ***************************** BOOTSTRAP / HOOK INTO WP *************************** */ +$spl_autoload_exists = function_exists( 'spl_autoload_register' ); + +if ( ! $spl_autoload_exists ) { + add_action( 'admin_init', 'yoast_wpseo_missing_spl', 1 ); +} + +if ( ! wp_installing() && ( $spl_autoload_exists ) ) { + add_action( 'plugins_loaded', 'wpseo_init', 14 ); + add_action( 'setup_theme', [ 'Yoast_Dynamic_Rewrites', 'instance' ], 1 ); + add_action( 'rest_api_init', 'wpseo_init_rest_api' ); + + if ( is_admin() ) { + + new Yoast_Notifications(); + + $yoast_addon_manager = new WPSEO_Addon_Manager(); + $yoast_addon_manager->register_hooks(); + + if ( wp_doing_ajax() ) { + require_once WPSEO_PATH . 'admin/ajax.php'; + + // Plugin conflict ajax hooks. + new Yoast_Plugin_Conflict_Ajax(); + + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Reason: We are not processing form information but only loading the admin init class. + if ( isset( $_POST['action'] ) && is_string( $_POST['action'] ) ) { + // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are not processing form information but only loading the admin init class, We are strictly comparing only. + if ( wp_unslash( $_POST['action'] ) === 'inline-save' ) { + add_action( 'plugins_loaded', 'wpseo_admin_init', 15 ); + } + } + } + else { + add_action( 'plugins_loaded', 'wpseo_admin_init', 15 ); + } + } + + add_action( 'plugins_loaded', 'load_yoast_notifications' ); + + add_action( 'init', [ 'WPSEO_Replace_Vars', 'setup_statics_once' ] ); + + // Initializes the Yoast indexables for the first time. + YoastSEO(); + + /** + * Action called when the Yoast SEO plugin file has loaded. + */ + do_action( 'wpseo_loaded' ); +} + +// Activation and deactivation hook. +register_activation_hook( WPSEO_FILE, 'wpseo_activate' ); +register_deactivation_hook( WPSEO_FILE, 'wpseo_deactivate' ); + +add_action( 'wp_initialize_site', 'wpseo_on_activate_blog', 99 ); +add_action( 'activate_blog', 'wpseo_on_activate_blog' ); + +// Registers SEO capabilities. +$wpseo_register_capabilities = new WPSEO_Register_Capabilities(); +$wpseo_register_capabilities->register_hooks(); + +// Registers SEO roles. +$wpseo_register_capabilities = new WPSEO_Register_Roles(); +$wpseo_register_capabilities->register_hooks(); + +/** + * Wraps for notifications center class. + * + * @return void + */ +function load_yoast_notifications() { + // Init Yoast_Notification_Center class. + Yoast_Notification_Center::get(); +} + + +/** + * Throw an error if the PHP SPL extension is disabled (prevent white screens) and self-deactivate plugin. + * + * @since 1.5.4 + * + * @return void + */ +function yoast_wpseo_missing_spl() { + if ( is_admin() ) { + add_action( 'admin_notices', 'yoast_wpseo_missing_spl_notice' ); + + yoast_wpseo_self_deactivate(); + } +} + +/** + * Returns the notice in case of missing spl extension. + * + * @return void + */ +function yoast_wpseo_missing_spl_notice() { + $message = esc_html__( 'The Standard PHP Library (SPL) extension seem to be unavailable. Please ask your web host to enable it.', 'wordpress-seo' ); + yoast_wpseo_activation_failed_notice( $message ); +} + +/** + * Throw an error if the Composer autoload is missing and self-deactivate plugin. + * + * @return void + */ +function yoast_wpseo_missing_autoload() { + if ( is_admin() ) { + add_action( 'admin_notices', 'yoast_wpseo_missing_autoload_notice' ); + + yoast_wpseo_self_deactivate(); + } +} + +/** + * Returns the notice in case of missing Composer autoload. + * + * @return void + */ +function yoast_wpseo_missing_autoload_notice() { + /* translators: %1$s expands to Yoast SEO, %2$s / %3$s: links to the installation manual in the Readme for the Yoast SEO code repository on GitHub */ + $message = esc_html__( 'The %1$s plugin installation is incomplete. Please refer to %2$sinstallation instructions%3$s.', 'wordpress-seo' ); + $message = sprintf( $message, 'Yoast SEO', '', '' ); + yoast_wpseo_activation_failed_notice( $message ); +} + +/** + * Throw an error if the filter extension is disabled (prevent white screens) and self-deactivate plugin. + * + * @since 2.0 + * @deprecated 23.3 + * @codeCoverageIgnore + * + * @return void + */ +function yoast_wpseo_missing_filter() { + _deprecated_function( __FUNCTION__, 'Yoast SEO 23.3' ); +} + +/** + * Returns the notice in case of missing filter extension. + * + * @deprecated 23.3 + * @codeCoverageIgnore + * + * @return void + */ +function yoast_wpseo_missing_filter_notice() { + _deprecated_function( __FUNCTION__, 'Yoast SEO 23.3' ); +} + +/** + * Echo's the Activation failed notice with any given message. + * + * @param string $message Message string. + * + * @return void + */ +function yoast_wpseo_activation_failed_notice( $message ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- This function is only called in 3 places that are safe. + echo '

            ' . esc_html__( 'Activation failed:', 'wordpress-seo' ) . ' ' . strip_tags( $message, '' ) . '

            '; +} + +/** + * The method will deactivate the plugin, but only once, done by the static $is_deactivated. + * + * @return void + */ +function yoast_wpseo_self_deactivate() { + static $is_deactivated; + + if ( $is_deactivated === null ) { + $is_deactivated = true; + deactivate_plugins( WPSEO_BASENAME ); + if ( isset( $_GET['activate'] ) ) { + unset( $_GET['activate'] ); + } + } +} + +/** + * Aliasses added in order to keep compatibility with Yoast SEO: Local. + */ +class_alias( '\Yoast\WP\SEO\Initializers\Initializer_Interface', '\Yoast\WP\SEO\WordPress\Initializer' ); +class_alias( '\Yoast\WP\SEO\Loadable_Interface', '\Yoast\WP\SEO\WordPress\Loadable' ); +class_alias( '\Yoast\WP\SEO\Integrations\Integration_Interface', '\Yoast\WP\SEO\WordPress\Integration' ); diff --git a/wp/wp-content/plugins/wordpress-seo/wp-seo.php b/wp/wp-content/plugins/wordpress-seo/wp-seo.php new file mode 100644 index 00000000..0e52229d --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/wp-seo.php @@ -0,0 +1,50 @@ +. + */ + +if ( ! function_exists( 'add_filter' ) ) { + header( 'Status: 403 Forbidden' ); + header( 'HTTP/1.1 403 Forbidden' ); + exit(); +} + +if ( ! defined( 'WPSEO_FILE' ) ) { + define( 'WPSEO_FILE', __FILE__ ); +} + +// Load the Yoast SEO plugin. +require_once dirname( WPSEO_FILE ) . '/wp-seo-main.php'; diff --git a/wp/wp-content/plugins/wordpress-seo/wpml-config.xml b/wp/wp-content/plugins/wordpress-seo/wpml-config.xml new file mode 100644 index 00000000..533bb3bd --- /dev/null +++ b/wp/wp-content/plugins/wordpress-seo/wpml-config.xml @@ -0,0 +1,44 @@ + + + _yoast_wpseo_title + _yoast_wpseo_bctitle + _yoast_wpseo_metadesc + _yoast_wpseo_focuskw + _yoast_wpseo_meta-robots-noindex + _yoast_wpseo_meta-robots-nofollow + _yoast_wpseo_meta-robots-adv + _yoast_wpseo_canonical + _yoast_wpseo_redirect + _yoast_wpseo_opengraph-description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp/wp-content/plugins/wp-schema-pro/LICENSE b/wp/wp-content/plugins/wp-schema-pro/LICENSE new file mode 100644 index 00000000..9cecc1d4 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/fields-style.css b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/fields-style.css new file mode 100644 index 00000000..0c5d6d5d --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/fields-style.css @@ -0,0 +1,619 @@ +.bsf-aiosrs-schema-row td .bsf-aiosrs-schema-custom-text-wrap { + vertical-align: top; +} + +.bsf-aiosrs-schema-custom-text-wrap .time-duration-wrap input, +.aiosrs-pro-meta-fields-wrapper .time-duration-wrap input { + width: 55px; + font-size: 12px; + padding-right: 0; + margin-right: 0; + margin-left: 0; +} + +.bsf-aiosrs-schema-custom-text-wrap .aiosrs-pro-custom-field-rating input.bsf-rating-field, +.aiosrs-pro-meta-fields-wrapper .aiosrs-pro-custom-field-rating input { + width: 50px; +} + +.aiosrs-pro-repeater-table .aiosrs-pro-custom-field-rating input.bsf-rating-field { + width: 25% !important; + padding-right: 0; +} + +.bsf-aiosrs-schema-custom-text-wrap .aiosrs-star-rating-wrap, +.aiosrs-pro-meta-fields-wrapper .aiosrs-star-rating-wrap { + display: inline-block; + vertical-align: top; + padding: 3px; +} + +.bsf-aiosrs-schema-custom-text-wrap .image-field-wrap, +.aiosrs-pro-meta-fields-wrapper .image-field-wrap { + position: relative; + display: inline-block; +} + +.bsf-aiosrs-schema-custom-text-wrap .aiosrs-image-select .dashicons { + font-size: 1.2em; + width: 1em; + height: 1em; + line-height: 1; + margin-right: 5px; +} + +.bsf-aiosrs-schema-custom-text-wrap .aiosrs-image-remove, +.aiosrs-pro-meta-fields-wrapper .aiosrs-image-remove { + display: none; + position: absolute; + background: rgba(255, 255, 255, 0.7); + right: 0; +} + +.bsf-aiosrs-schema-custom-text-wrap .aiosrs-image-remove { + font-size: 15px; + width: 1em; + height: 1em; +} + +.bsf-aiosrs-schema-custom-text-wrap .bsf-custom-image-selected .aiosrs-image-select, +.aiosrs-pro-meta-fields-wrapper .bsf-custom-image-selected .aiosrs-image-select { + display: none; +} + +.bsf-aiosrs-schema-custom-text-wrap .bsf-custom-image-selected .aiosrs-image-remove, +.aiosrs-pro-meta-fields-wrapper .bsf-custom-image-selected .aiosrs-image-remove { + display: inline-block; +} + +.bsf-aiosrs-schema-custom-text-wrap .bsf-custom-image-selected .aiosrs-image-select.img, +.aiosrs-pro-meta-fields-wrapper .bsf-custom-image-selected .aiosrs-image-select.img { + max-width: 100%; + display: inline-block; +} + +.bsf-aiosrs-schema-custom-text-wrap .bsf-custom-image-selected .aiosrs-image-select.img img { + max-height: 50px; +} + +.aiosrs-pro-meta-fields-wrapper .bsf-custom-image-selected .aiosrs-image-select.img img { + vertical-align: middle; + max-width: 50px; +} + +.aiosrs-pro-meta-fields-wrapper .inside, +.aiosrs-pro-meta-fields-wrapper { + margin-top: 0; + padding: 0; +} + +.aiosrs-pro-meta-fields-wrapper th, +.aiosrs-pro-meta-fields-wrapper td { + padding: 10px 12px; + border-bottom: 1px solid #eee; + width: 33%; +} + +.aiosrs-pro-meta-fields-wrapper .aiosrs-pro-custom-fields-dropdown-content th, +.aiosrs-pro-meta-fields-wrapper .aiosrs-pro-custom-fields-dropdown-content td { + border-top: 0; +} + +.aiosrs-pro-meta-fields-wrapper th { + border-right: 1px solid #eee; + vertical-align: middle; +} + +.bsf-aiosrs-schema-fixed-text-wrap input:not([type="checkbox"]), +.bsf-aiosrs-schema-custom-text-wrap input:not([type="checkbox"]), +.aiosrs-pro-meta-fields-wrapper input:not([type="checkbox"]), +.bsf-aiosrs-schema-custom-text-wrap textarea, +.aiosrs-pro-meta-fields-wrapper textarea { + width: 100%; +} + +/* Tooltips */ +.bsf-aiosrs-schema-heading-help { + color: #0073aa; + font-size: 18px; + cursor: help; + float: right; + vertical-align: middle; +} + +.ui-widget-content.bsf-aiosrs-schema-ui-tooltip { + background: #333; + border-width: 1px; + border-color: #333; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 1px 0 2px 0 rgba(214, 214, 214, 0.5); + box-shadow: 1px 0 2px 0 rgba(214, 214, 214, 0.5); + color: #dedede; + max-width: 250px; + text-align: center; + padding: 7px; + text-rendering: optimizeLegibility; + text-shadow: none; + z-index: 9999; +} + +/* New Style Verticle Tabs */ +.aiosrs-pro-meta-fields-tabs-wrapper { + display: inline-block; + width: 15%; + vertical-align: top; +} + +.aiosrs-pro-meta-fields-tabs-wrapper .aiosrs-pro-meta-fields-tab { + padding: 8px 12px; + border-bottom: 1px solid #eee; + border-right: 1px solid #eee; + margin-right: -1px; + cursor: pointer; + font-weight: 700; + background: #fff; + color: #666; +} + +.aiosrs-pro-meta-fields-tabs-wrapper .aiosrs-pro-meta-fields-tab.active { + background: #f1f1f1; + color: inherit; +} + +.aiosrs-pro-meta-fields-wrapper { + width: 100%; + vertical-align: top; +} + +.aiosrs-pro-meta-fields-tabs-wrapper ~ .aiosrs-pro-meta-fields-wrapper { + display: inline-block; + width: calc(85% - 1px); + border-left: 1px solid #eee; +} + +#aiosrs-pro-custom-fields .inside { + padding: unset; + border: 1px solid #e2e4e7; +} + +#aiosrs-pro-custom-fields h2.hndle.ui-sortable-handle { + border-bottom: unset; +} + +.aiosrs-pro-meta-fields-wrapper .form-table { + margin: 0; +} + +.aiosrs-pro-meta-fields-wrap { + display: none; +} + +.aiosrs-pro-meta-fields-wrap.open { + display: block; +} + +.bsf-aiosrs-schema-custom-text-wrap .multi-select-wrap select, +.aiosrs-pro-meta-fields-wrapper .multi-select-wrap select { + width: 100%; +} + +.bsf-aiosrs-schema-custom-text-wrap .aiosrs-star-rating-wrap:not(.disabled) .aiosrs-star-rating, +.aiosrs-pro-meta-fields-wrapper .aiosrs-star-rating-wrap:not(.disabled) .aiosrs-star-rating { + cursor: pointer; +} + +.aiosrs-pro-meta-fields-wrapper .aiosrs-star-rating-wrap.disabled { + padding: 0 0 5px; +} + +.aiosrs-pro-meta-fields-wrapper .aiosrs-reset-rating { + margin-left: 5px; + line-height: 1.7; +} + +.aiosrs-pro-custom-field-rating .spinner { + float: none; + margin: 0 5px; +} + +.aiosrs-pro-custom-field-rating .aiosrs-reset-rating.reset-disabled { + display: none; +} + + +.ui-timepicker-div .ui-widget-header { + margin-bottom: 8px; +} + +.ui-timepicker-div dl { + text-align: left; +} + +.ui-timepicker-div dl dt { + float: left; + clear: left; + padding: 0 0 0 15px; +} + +.ui-timepicker-div dl dd { + margin: 15px 15px 12px 35%; +} + +.ui-timepicker-div td { + font-size: 90%; +} + +.ui-tpicker-grid-label { + background: none; + border: none; + margin: 0; + padding: 0; +} + +.ui-timepicker-div .ui_tpicker_unit_hide { + display: none; +} + +.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input { + background: none; + color: inherit; + border: none; + outline: none; + border-bottom: solid 1px #555; + width: 95%; +} + +.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus { + border-bottom-color: #aaa; +} + +.ui-timepicker-rtl { + direction: rtl; +} + +.ui-timepicker-rtl dl { + text-align: right; + padding: 0 5px 0 0; +} + +.ui-timepicker-rtl dl dt { + float: right; + clear: right; +} + +.ui-timepicker-rtl dl dd { + margin: 0 40% 10px 10px; +} + +.ui-timepicker-div.ui-timepicker-oneLine { + padding-right: 2px; +} + +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time, +.ui-timepicker-div.ui-timepicker-oneLine dt { + display: none; +} + +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { + display: block; + padding-top: 2px; +} + +.ui-timepicker-div.ui-timepicker-oneLine dl { + text-align: right; +} + +.ui-timepicker-div.ui-timepicker-oneLine dl dd, +.ui-timepicker-div.ui-timepicker-oneLine dl dd > div { + display: inline-block; + margin: 0; +} + +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute::before, +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second::before { + content: ":"; + display: inline-block; +} + +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec::before, +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec::before { + content: "."; + display: inline-block; +} + +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide, +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide::before { + display: none; +} + + +input.wpsp-time-duration-field, +input.wpsp-date-field, +input.wpsp-datetime-local-field { + background-color: #fff; +} + +.wpsp-connected-icon { + display: flex; + justify-content: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-color: #7e8993; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; + box-sizing: unset; +} + +.wpsp-connected-field { + display: flex; +} + +.wpsp-connected-group { + display: flex; +} + +.wpsp-connected-group > select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: none; + margin: 0; + border-color: #7e8993 !important; +} + +.wpsp-field-close, +.wpsp-custom-field-connect, +.wpsp-specific-field-connect { + align-items: center; + color: #999; + cursor: pointer; + display: inline-flex; + font-size: 18px; + justify-content: center; + position: absolute; + right: 28px; + top: 7.5px; + width: 5px; +} + +.wpsp-custom-field-connect { + top: 6.5px; +} + +.wpsp-specific-field-connect { + top: 5.5px; +} + +.wpsp-parent-field { + position: relative; +} + +.wpsp-required-error-field { + color: #f00 !important; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater .aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-heading, +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater .aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-content { + display: table-cell; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater .aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type td.bsf-aiosrs-schema-row-heading { + width: 16%; + padding: 10px 12px; + vertical-align: middle; + border-right: 1px solid #eee; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater .aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type td { + width: 27%; + padding: 10px 12px; + margin-bottom: unset; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater .aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type:first-child td { + padding-top: 30px; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater table.aiosrs-pro-repeater-table { + border-collapse: collapse; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater table.aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type { + border: 1px solid #eee; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target .aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-heading, +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target .aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-content { + display: table-cell; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target .aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type td.bsf-aiosrs-schema-row-heading { + width: 5%; + padding: 10px 12px; + vertical-align: middle; + border-right: 1px solid #eee; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target .aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type td { + width: 25%; + padding: 10px 12px; + margin-bottom: unset; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target table.aiosrs-pro-repeater-table { + border-collapse: collapse; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target table.aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type { + border: 1px solid #eee; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target .aiosrs-pro-repeater-table-wrap tr.bsf-aiosrs-schema-row td.bsf-aiosrs-schema-row-content .aiosrs-pro-custom-field input { + width: 96%; +} + +.aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater-target .aiosrs-pro-repeater-table-wrap tr.bsf-aiosrs-schema-row td.bsf-aiosrs-schema-row-content .aiosrs-pro-custom-field textarea { + width: 96%; +} + +.bsf-aiosrs-schema-heading-help.wpsp-show-repeater-field, +.bsf-aiosrs-schema-heading-help.wpsp-hide-repeater-field, +.bsf-aiosrs-schema-heading-help.wpsp-show-repeater-target-field, +.bsf-aiosrs-schema-heading-help.wpsp-hide-repeater-target-field { + cursor: pointer; + padding: 5px; + font-size: 20px; +} + +select[disabled] { + background-image: none !important; +} + +.aiosrs-pro-meta-fields-wrap .wpsp-field-label { + width: 17%; + font-size: 13px; + line-height: 1.4; + font-weight: 700; + color: #333; + border-right: 1px solid #eee; +} + +/* Added close button disable for repeater fields */ +#aiosrs-pro-custom-fields .bsf-repeater-close { + display: inline-block; +} + +.wpsp-local-fields .aiosrs-pro-custom-field input { + min-height: 33px; + padding-right: 18%; + border-radius: 3px; +} + +.wpsp-parent-field.wpsp-custom-field.wpsp-custom-field-image .wpsp-custom-field-connect { + top: 0.5px; +} + +.wpsp-parent-field.wpsp-custom-field.wpsp-custom-field-textarea .wpsp-custom-field-connect { + top: 12px; +} + +/*Toggle CSS for the Enable Schema Markup */ + +.wpsp-enable-schema-markup { + display: block; + font-size: 13px; +} + +.wpsp-enable-schema-markup__field { + margin-top: 8px; + line-height: normal; + align-items: center; +} + +.wpsp-enable-schema-toggle { + position: relative; + display: inline-block; +} + +.wpsp-enable-schema-toggle input.wpsp-enable-schema-toggle__input[type="checkbox"] { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + margin: 0; + padding: 0; + z-index: 1; + border: none; +} + +.wpsp-enable-schema-toggle .wpsp-enable-schema-toggle__track { + content: ""; + display: inline-block; + box-sizing: border-box; + vertical-align: top; + background-color: #fff; + border: 2px solid #6c7781; + width: 36px; + height: 18px; + border-radius: 9px; + transition: background 0.2s ease; +} + +.wpsp-enable-schema-toggle .wpsp-enable-schema-toggle__thumb { + display: block; + position: absolute; + box-sizing: border-box; + top: 4px; + left: 4px; + width: 10px; + height: 10px; + border-radius: 50%; + transition: transform 0.1s ease; + background-color: #6c7781; + border: 5px solid #6c7781; +} + +.wpsp-enable-schema-toggle.is-checked .wpsp-enable-schema-toggle__track { + background-color: #11a0d2; + border: 9px solid transparent; +} + +.wpsp-enable-schema-toggle.is-checked .wpsp-enable-schema-toggle__thumb { + background-color: #fff; + border-width: 0; + transform: translateX(18px); +} + +.aiosrs-pro-meta-fields-wrap.is-enable-schema-markup { + opacity: 0.2; + pointer-events: none; +} + +.rtl .wpsp-parent-field .wpsp-field-close { + position: relative; + right: -35px; +} + +.rtl .wpsp-specific-field-connect, +.rtl .wpsp-parent-field .wpsp-custom-field-connect { + position: absolute; + right: 90%; +} + +.rtl .wpsp-parent-field .bsf-aiosrs-schema-meta-field { + border-left: 1px solid #eee; +} + +.rtl .wpsp-local-fields .aiosrs-pro-custom-field input { + padding-left: 18%; + padding-right: 5%; +} + +@-moz-document url-prefix() { + + .aiosrs-pro-meta-fields-wrapper th, + .aiosrs-pro-meta-fields-wrapper td { + width: 36%; + } + + .aiosrs-pro-meta-fields-wrap .wpsp-field-label { + width: 14%; + } + + .aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater .aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type td.bsf-aiosrs-schema-row-heading { + width: 14%; + } + + .aiosrs-pro-custom-field.aiosrs-pro-custom-field-repeater .aiosrs-pro-repeater-table tr.bsf-aiosrs-schema-row.bsf-aiosrs-schema-row-text-type td { + width: 36%; + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/frontend.css b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/frontend.css new file mode 100644 index 00000000..6a79da00 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/frontend.css @@ -0,0 +1,21 @@ +.aiosrs-rating-wrap .aiosrs-star-rating-wrap { + display: inline-block; + vertical-align: middle; +} + +.aiosrs-rating-wrap .aiosrs-star-rating-wrap ~ .aiosrs-star-rating-wrap { + float: right; +} + +.aiosrs-rating-wrap .aiosrs-star-rating-wrap .aiosrs-star-rating { + color: #ffd700; +} + +.aiosrs-rating-wrap .aiosrs-star-rating-wrap:not(.disabled) .aiosrs-star-rating { + cursor: pointer; +} + +.aiosrs-rating-wrap .success-msg { + color: #0f0; + margin-left: 5px; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/license-form-popup.css b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/license-form-popup.css new file mode 100644 index 00000000..4bf2cd97 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/license-form-popup.css @@ -0,0 +1,98 @@ +body.aiosrs-pro-license-form-open { + overflow: hidden; +} + +#aiosrs-pro-license-form p { + padding: 5px 0 5px 0; +} + +#aiosrs-pro-license-form .aiosrs-pro-license-form-overlay { + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 100050; +} + +#aiosrs-pro-license-form .aiosrs-pro-license-form-inner { + background: #fcfcfc; + position: fixed; + background-color: #fff; + z-index: 999999999; + padding: 2px 20px 20px; + text-align: left; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3); +} + +#aiosrs-pro-license-form-close-btn { + position: absolute; + left: auto; + right: 0; + top: 0; + width: 29px; + height: 29px; + border: 0; + padding: 0; + background: none; + cursor: pointer; + outline: none; + -webkit-transition: color 0.1s ease-in-out, background 0.1s ease-in-out; + -webkit-transform: translateX(100%); + transform: translateX(100%); + transition: color 0.1s ease-in-out, background 0.1s ease-in-out; + color: #eee; +} + +#aiosrs-pro-license-form-close-btn:hover { + color: #00a0d2; +} + +#aiosrs-pro-license-form-close-btn .dashicons { + display: block; + text-align: center; + line-height: 29px; + width: 29px; + height: 29px; + font-size: 29px; + position: absolute; + top: 0; + right: 0; +} + +#aiosrs-pro-license-form .license-form-field input.regular-text { + margin-right: 10px; +} + +/** Validation Messages */ +.bsf-current-license-error-wp-schema-pro, +.bsf-current-license-success-wp-schema-pro { + display: block; + margin-bottom: 0.5em; +} + +.bsf-current-license-error-wp-schema-pro { + color: #f44336; +} + +.bsf-current-license-success-wp-schema-pro { + color: #008000; +} + +/** License link */ +#aiosrs-pro-license-form-btn.active { + color: #3db634; +} + +#aiosrs-pro-license-form-btn.inactive { + color: #f44336; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/settings-style.css b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/settings-style.css new file mode 100644 index 00000000..889c97a0 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/settings-style.css @@ -0,0 +1,460 @@ +.bsf-aiosrs-pro { + max-width: 1200px; +} + +.bsf-aiosrs-pro .aiosrs-help-link { + font-size: 1.2em; +} + +.bsf-aiosrs-pro .aiosrs-help-link:focus { + box-shadow: none; +} + +.bsf-aiosrs-pro .form-table th { + width: 280px; +} + +.bsf-aiosrs-pro .form-table td.schema-contact-type-option { + display: block; +} + +.bsf-aiosrs-pro .form-table td.schema-contact-type-option-change { + margin-bottom: unset; + padding-bottom: 0; +} + +.sp-required { + color: #dc3232; + font-size: 14px; + margin-left: 2px; +} + +.bsf-aiosrs-pro .select2-selection__choice { + line-height: 1.7; +} + +.bsf-aiosrs-pro .select2-container * { + vertical-align: middle; +} + +.bsf-aiosrs-pro .select2-container .select2-selection__choice__remove { + vertical-align: initial; +} + +.wp-schema-pro-global-schemas .form-table select, +.wp-schema-pro-general-settings .form-table input[type="text"], +.wp-schema-pro-general-settings .form-table select, +.wp-schema-pro-breadcrumb-setting .form-table select, +.wp-schema-pro-advanced-settings .form-table select, +.wp-schema-pro-social-profiles .form-table input[type="url"] { + min-width: 50%; +} + +.wp-schema-pro-corporate-contact .form-table input[type="url"], +.wp-schema-pro-corporate-contact .form-table input[type="text"], +.wp-schema-pro-corporate-contact .form-table input[type="email"], +.wp-schema-pro-corporate-contact .form-table select { + min-width: 64%; +} + +#wp-schema-pro-setting-links { + margin-top: 10px; + margin-left: 5px; +} + +#wp-schema-pro-setting-links a { + text-decoration: none; + box-shadow: none; +} + +#wp-schema-pro-setting-links a.active { + color: inherit; + pointer-events: none; + font-weight: 600; +} + +.wp-schema-pro-general-settings .custom-field-wrapper { + display: inline-block; + width: 48%; + vertical-align: middle; +} + +.wp-schema-pro-general-settings .site-logo-custom-wrap { + vertical-align: top; +} + + +/** + * Custom Image Select + */ + +.wp-schema-pro-general-settings .image-field-wrap, +.wp-schema-pro-advanced-settings .image-field-wrap { + position: relative; + display: inline-block; +} + +.wp-schema-pro-general-settings .aiosrs-image-select .dashicons, +.wp-schema-pro-advanced-settings .aiosrs-image-select .dashicons { + font-size: 1.2em; + width: 1em; + height: 1em; + line-height: 16px; + margin-right: 5px; + vertical-align: middle; +} + +.wp-schema-pro-general-settings .aiosrs-image-remove, +.wp-schema-pro-advanced-settings .aiosrs-image-remove { + display: none; + position: absolute; + background: rgba(255, 255, 255, 0.7); + right: 0; + font-size: 15px; + width: 1em; + height: 1em; +} + +.wp-schema-pro-general-settings .bsf-custom-image-selected .aiosrs-image-select, +.wp-schema-pro-advanced-settings .bsf-custom-image-selected .aiosrs-image-select { + display: none; +} + +.wp-schema-pro-general-settings .bsf-custom-image-selected .aiosrs-image-remove, +.wp-schema-pro-advanced-settings .bsf-custom-image-selected .aiosrs-image-remove { + display: inline-block; +} + +.wp-schema-pro-general-settings .bsf-custom-image-selected .aiosrs-image-select.img, +.wp-schema-pro-advanced-settings .bsf-custom-image-selected .aiosrs-image-select.img { + max-width: 100%; + display: inline-block; +} + +.wp-schema-pro-general-settings .bsf-custom-image-selected .aiosrs-image-select.img img { + max-height: 75px; +} + +.wp-schema-pro-general-settings .bsf-custom-image-selected .aiosrs-image-select.img img, +.wp-schema-pro-advanced-settings .bsf-custom-image-selected .aiosrs-image-select.img img { + vertical-align: middle; + max-width: 300px; +} + + +/** + * Default Image + */ + +.wp-schema-pro-advanced-settings .bsf-custom-image-selected .aiosrs-image-select.img img, +.wp-schema-pro-general-settings .bsf-custom-image-selected .aiosrs-image-select.default-image.img img { + max-height: 150px; +} + + +/** + * Repeater Style + */ + +.aiosrs-pro-repeater-table-wrap { + position: relative; + margin-bottom: 1em; + border: 1px solid #f1f1f1; + padding: 10px; +} + +.aiosrs-pro-repeater-table-wrap .bsf-repeater-close { + position: absolute; + top: 0; + right: 0; + padding: 2px; + border: 1px solid #f1f1f1; +} + +.bsf-repeater-add-new-btn { + float: right; + width: 100px; +} + +.aiosrs-pro-repeater-table-wrap .form-table th, +.aiosrs-pro-repeater-table-wrap .form-table td { + border: 0; + padding: 0; + width: 100%; + display: inline-block; +} + +.aiosrs-pro-repeater-table-wrap .form-table td input, +.aiosrs-pro-repeater-table-wrap .form-table td select { + min-width: 70%; +} + +.bsf-aiosrs-schema-type-wrap .aiosrs-pro-repeater-table-wrap:first-of-type:last-of-type .bsf-repeater-close { + opacity: 0.3; + filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + pointer-events: none; +} + + +/** + * Tooltip + */ + +.wp-schema-pro-tooltip-wrapper { + position: relative; + display: inline-block; +} + +.wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-description { + opacity: 0; + visibility: hidden; + transition: 0.3s; + position: absolute; + background: #333; + color: #dedede; + left: calc(100% - 2.4em); + bottom: calc(100% - 0.75em); + border-radius: 3px; + box-shadow: 0 0 1px 0 #333; + font-weight: 400; + min-width: 300px; + z-index: 9999; +} + +.wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-icon { + cursor: pointer; + font-size: 18px; +} + +.wp-schema-pro-tooltip-wrapper.activate .wp-schema-pro-tooltip-icon { + pointer-events: none; +} + +.wp-schema-pro-tooltip-wrapper .dashicons.dashicons-arrow-down { + position: absolute; + font-size: 3em; + top: calc(100% - 0.5em); + left: 0; + color: #333; + line-height: initial; + z-index: -1; +} + +.wp-schema-pro-tooltip-wrapper.activate .wp-schema-pro-tooltip-description { + opacity: 1; + visibility: visible; + bottom: calc(100% + 0.75em); +} + +.wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-content { + padding: 8px 12px; +} + +.wp-schema-pro-tooltip-wrapper h2.wp-schema-pro-tooltip-heading ~ .wp-schema-pro-tooltip-content { + min-height: 50px; +} + +.wp-schema-pro-tooltip-wrapper h2.wp-schema-pro-tooltip-heading { + color: #dedede; + font-weight: 600; + border-bottom: 1px solid #eee; +} + +.wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-content a { + text-decoration: none; + box-shadow: none; + font-size: inherit; +} + +.wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-content img { + max-width: 100%; +} + +.wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-content .tooltip-image { + margin-top: 10px; +} + +.tooltip-with-image-wrapper .wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-description { + min-width: 400px; +} + +.rtl .wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-description { + right: calc(100% - 2.4em); + left: 0; +} + +.rtl .wp-schema-pro-tooltip-wrapper .dashicons.dashicons-arrow-down { + right: 0; +} + +.hndle .wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-icon { + color: #f00; +} + +.hndle .wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-icon::before { + content: "\f534"; +} + +.wp-schema-pro-yoast-compatibilty-wrap th { + display: flex; +} + +.wp-schema-pro-yoast-compatibilty-wrap td { + vertical-align: top; + padding-top: 20px; +} + +.wp-schema-pro-tooltip-content ol { + margin-top: 0.5em; +} + +.schema-branding input::placeholder, +.contact-form input::placeholder { + font-style: italic; +} + +.aiosrs-menu-page-wrapper #aiosrs-menu-page .wrap .wpsp-pro-logo { + vertical-align: middle; +} + +.aiosrs-menu-page-wrapper #aiosrs-menu-page .wrap .wpsp-pro-title { + display: inline-block; + font-size: 20px; +} + +.aiosrs-menu-page-wrapper #aiosrs-menu-page .wrap .wpsp-pro-logo img { + max-width: 12%; + margin: 20px 3px 20px 0; +} + +#aiosrs-menu-page .schema-version { + font-size: 13px; + background-color: #fff; + padding: 2px; +} + +.form-table td.breadcrumb-title { + padding: 0; +} + +.wpsp-required-error-field { + color: #f00 !important; +} + +.bsf-aiosrs-pro .wp-schema-pro-social-profiles table.form-table tr { + width: 50%; + display: inline-block; +} + +.bsf-aiosrs-pro .wp-schema-pro-social-profiles table.form-table tr td input { + width: 135%; +} + +.bsf-aiosrs-pro .wp-schema-pro-social-profiles table.form-table tr th { + width: 34%; +} + +.bsf-aiosrs-pro .wp-schema-pro-social-profiles table.form-table tr:last-child { + width: auto; + display: block; +} + +.wpsp-text-strong { + font-weight: 700; +} + +.bsf-aiosrs-pro .postbox.wp-schema-pro-general-settings .hndle, +.bsf-aiosrs-pro .postbox.wp-schema-pro-breadcrumb-setting .hndle, +.bsf-aiosrs-pro .postbox.wp-schema-pro-advanced-settings .hndle, +.bsf-aiosrs-pro .postbox.wp-schema-pro-branding-settings .hndle, +.bsf-aiosrs-pro .postbox.wp-schema-pro-social-profiles .hndle, +.bsf-aiosrs-pro .postbox.wp-schema-pro-corporate-contact .hndle, +.bsf-aiosrs-pro .postbox.wp-schema-pro-global-schemas .hndle, +.bsf-aiosrs-pro .postbox-container .postbox .hndle { + border-bottom: 1px solid #ccd0d4; +} + +.wp-schema-pro-general-settings .select2-container--default .select2-selection--single { + box-shadow: 0 0 0 transparent; + border-radius: 4px; + padding: 0.5em; + font-size: 14px; + height: 33px; + border: 1px solid #7e8993; + background-color: #fff; + color: #32373c; +} + +.wp-schema-pro-general-settings .select2.select2-container.select2-container--default { + width: 50% !important; +} + +.wp-schema-pro-general-settings .select2-container--default .select2-selection--single .select2-selection__rendered { + color: unset; + line-height: unset; +} + +.wp-schema-pro-general-settings .select2-container--default .select2-selection--single .select2-selection__arrow { + top: 4px; +} + +.select2-container--default .select2-selection.select2-selection--single:focus { + border-color: #007cba; + box-shadow: 0 0 0 1px #007cba; + outline: 2px solid transparent; +} + +/** + * dynamic social profile repeater. + */ +.bsf-aiosrs-pro .wp-schema-pro-social-profiles table.form-table tr th.wpsp-other-th { + width: 33% !important; +} + +a#add-row { + float: right; + margin-right: 30px; +} + +.bsf-aiosrs-pro .wp-schema-pro-social-profiles table.form-table tr td input.wpsp-other { + width: 132% !important; +} + +span.wpsp-field-close.dashicons.dashicons-dismiss { + color: #999; + cursor: pointer; + display: inline-flex; + font-size: 18px; + justify-content: center; + position: relative; + top: -22px; + left: 140%; + width: 5px; +} + +@media screen and ( min-width: 783px) { + + .wp-schema-pro-tooltip-wrapper { + float: right; + } + + .rtl .wp-schema-pro-tooltip-wrapper { + float: left; + } + + .hndle .wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-description { + min-width: 400px; + } + + .hndle .wp-schema-pro-tooltip-wrapper { + float: none; + } +} + +@-moz-document url-prefix() { + + .bsf-aiosrs-pro .wp-schema-pro-social-profiles table.form-table tr { + width: 50%; + float: left; + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/setup-wizard.css b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/setup-wizard.css new file mode 100644 index 00000000..9e642309 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/setup-wizard.css @@ -0,0 +1,589 @@ +body { + margin: 100px auto 100px auto; + box-shadow: none; + background: #f1f1f1; + padding: 0; + max-width: 800px; + border: unset; +} + +a { + text-decoration: none; +} + +#aiosrs-pro-logo { + border: 0; + margin: 0 0 24px; + padding: 0; + text-align: center; +} + +#aiosrs-pro-logo a, +#aiosrs-pro-logo a:active, +#aiosrs-pro-logo a:focus { + box-shadow: none; +} + +#aiosrs-pro-logo img { + max-width: 30%; +} + + +/* Wizard Steps */ + +.aiosrs-pro-setup-wizard-steps, +.aiosrs-pro-setup-steps { + padding: 5px 0 24px; + margin: 0; + list-style: none; + overflow: hidden; + color: #ccc; + width: 100%; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; +} + +.aiosrs-pro-setup-wizard-steps li, +.aiosrs-pro-setup-steps li { + width: 33%; + float: left; + padding: 0 0 0.8em; + margin: 0; + text-align: center; + position: relative; + border-bottom: 4px solid #ccc; + line-height: 22px; +} + +.aiosrs-pro-setup-wizard-steps li::before, +.aiosrs-pro-setup-steps li::before { + content: ""; + border: 4px solid #ccc; + border-radius: 100%; + width: 4px; + height: 4px; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -6px; + margin-bottom: -8px; + background: #fff; +} + +.aiosrs-pro-setup-wizard-steps li.active, +.aiosrs-pro-setup-steps li.active { + border-color: #0085ba; + color: #0085ba; +} + +.aiosrs-pro-setup-wizard-steps li.active::before, +.aiosrs-pro-setup-steps li.active::before { + border-color: #0085ba; +} + +.aiosrs-pro-setup-wizard-steps li.done, +.aiosrs-pro-setup-steps li.done { + border-color: #0085ba; + color: #0085ba; +} + +.aiosrs-pro-setup-wizard-steps li.done::before, +.aiosrs-pro-setup-steps li.done::before { + border-color: #0085ba; + background: #0085ba; +} + +.aiosrs-pro-setup-wizard-content a, +.aiosrs-pro-setup-content a { + color: #0085ba; +} + +.aiosrs-pro-setup-wizard-content a:focus, +.aiosrs-pro-setup-content a:focus, +.aiosrs-pro-setup-wizard-content a:hover, +.aiosrs-pro-setup-content a:hover { + color: #111; +} + + +/* Wizard Content */ + +.aiosrs-pro-setup-wizard-content, +.aiosrs-pro-setup-content { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13); + padding: 24px 24px 0; + background: #fff; + overflow: hidden; + zoom: 1; +} + +.aiosrs-pro-setup-wizard-content h1, +.aiosrs-pro-setup-content h1, +.aiosrs-pro-setup-wizard-content h2, +.aiosrs-pro-setup-content h2, +.aiosrs-pro-setup-wizard-content h3, +.aiosrs-pro-setup-content h3, +.aiosrs-pro-setup-wizard-content table, +.aiosrs-pro-setup-content table { + margin: 0 0 24px; + border: 0; + padding: 0; + color: #666; + clear: none; +} + +.aiosrs-pro-setup-wizard-content p, +.aiosrs-pro-setup-content p { + margin: 0 0 24px; +} + +.aiosrs-pro-setup-wizard-content p, +.aiosrs-pro-setup-content p, +.aiosrs-pro-setup-wizard-content table, +.aiosrs-pro-setup-content table { + font-size: 1em; + line-height: 1.75; + color: #666; +} + +.aiosrs-pro-setup-wizard-content .form-table th, +.aiosrs-pro-setup-content .form-table th { + width: 40%; + vertical-align: top; + font-weight: 400; +} + +.aiosrs-pro-setup-wizard-content .form-table td, +.aiosrs-pro-setup-content .form-table td { + vertical-align: top; +} + +.aiosrs-pro-setup-wizard-content .form-table td input, +.aiosrs-pro-setup-content .form-table td input, +.aiosrs-pro-setup-wizard-content .form-table td select, +.aiosrs-pro-setup-content .form-table td select { + box-sizing: border-box; + color: inherit; +} + +.aiosrs-pro-setup-wizard-content .form-table td input:not([type="checkbox"]), +.aiosrs-pro-setup-wizard-content .form-table td select { + width: 50%; +} + +.aiosrs-pro-setup-wizard-content .form-table td .description, +.aiosrs-pro-setup-content .form-table td .description { + line-height: 1.5; + display: block; + margin-top: 0.25em; + color: #999; + font-style: italic; +} + +.aiosrs-pro-setup-wizard-content .form-table td .input-checkbox, +.aiosrs-pro-setup-content .form-table td .input-checkbox, +.aiosrs-pro-setup-wizard-content .form-table td .input-radio, +.aiosrs-pro-setup-content .form-table td .input-radio { + width: auto; + box-sizing: inherit; + padding: inherit; + margin: 0 0.5em 0 0; + box-shadow: none; +} + + +/* Content Bottom Buttons */ + +.aiosrs-pro-setup-wizard .aiosrs-pro-setup-wizard-actions, +.aiosrs-pro-setup .aiosrs-pro-setup-actions { + overflow: hidden; +} + +.aiosrs-pro-setup-wizard .aiosrs-pro-setup-wizard-actions .button, +.aiosrs-pro-setup .aiosrs-pro-setup-actions .button { + float: right; + font-size: 1em; + padding: 0.5em 1em; + line-height: 16px; + margin-right: 0.5em; + margin-bottom: 2px; + height: auto; + border-radius: 4px; +} + +.aiosrs-pro-setup-wizard .aiosrs-pro-setup-wizard-actions .skip-button, +.aiosrs-pro-setup .aiosrs-pro-setup-actions .skip-button { + margin-left: 10px; + margin-right: 0; +} + +.aiosrs-pro-setup-wizard .aiosrs-pro-setup-wizard-actions .button-primary, +.aiosrs-pro-setup .aiosrs-pro-setup-actions .button-primary { + float: right; + margin: 0; + opacity: 1; +} + +.aiosrs-pro-return-to-dashboard { + font-size: 0.85em; + color: #b5b5b5; + margin: 1.18em 0; + display: block; + text-align: center; +} + + +/* Theme Config Page */ + +.wp-core-ui .aiosrs-pro-basic-config input.ast-color-picker { + vertical-align: top; + margin-right: 7px; +} + +.wp-core-ui .aiosrs-pro-basic-config input.wp-picker-clear { + width: 70px; +} + + +/* Ready Page */ + +.aiosrs-pro-setup-wizard-content .twitter-share-button, +.aiosrs-pro-setup-content .twitter-share-button { + float: right; +} + + +/** + * Site Identity + */ + +.aiosrs-pro-setup-wizard-content select, +.aiosrs-pro-setup-content select, +.aiosrs-pro-setup-wizard-content input, +.aiosrs-pro-setup-content input { + border: 1px solid #f1f1f1; + padding: 0.5em; + border-radius: 3px; + font-size: 14px; +} + +.aiosrs-pro-setup-wizard-content .select2-container--default .select2-selection--single { + border: 1px solid #f1f1f1; + padding: 0.5em; + border-radius: 3px; + font-size: 14px; + height: 33px; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.07); +} + +.aiosrs-pro-setup-wizard-content .select2.select2-container.select2-container--default { + width: 50% !important; +} + +.aiosrs-pro-setup-wizard-content .select2-container--default .select2-selection--single .select2-selection__rendered { + color: unset; + line-height: unset; +} + +.aiosrs-pro-setup-wizard-content .select2-container--default .select2-selection--single .select2-selection__arrow { + top: 4px; +} + +.select2-container--default .select2-selection.select2-selection--single:focus { + border-color: #007cba; + box-shadow: 0 0 0 1px #007cba; + outline: 2px solid transparent; +} + +.wp-picker-active .wp-picker-holder { + position: absolute; + z-index: 9; +} + +.aiosrs-pro-setup-wizard-next-steps .button-hero:last-child, +.aiosrs-pro-setup-next-steps .button-hero:last-child { + margin-bottom: 0; +} + +.aiosrs-pro-setup-wizard-next-steps .button-hero, +.aiosrs-pro-setup-next-steps .button-hero { + width: 100%; + margin-bottom: 1em; +} + + +/** + * Step: Last + */ + +.aiosrs-pro-setup-wizard-next-steps-last ul, +.aiosrs-pro-setup-next-steps-last ul { + padding: 0; +} + +.aiosrs-pro-setup-wizard-next-steps-last li i, +.aiosrs-pro-setup-next-steps-last li i { + padding-right: 10px; +} + +.aiosrs-pro-setup-wizard-next-steps-last li, +.aiosrs-pro-setup-next-steps-last li { + list-style-type: none; + padding: 0; + margin-bottom: 0.5em; +} + + +/** + * Schema template + */ + +.aiosrs-pro-basic-config .aiosrs-pro-schema-temp-wrap { + display: inline-block; + background: #f1f1f1; + border: 1px solid #d8d8d8; + padding: 10px 5px; + width: calc(33% - 8px); + text-align: center; + margin-right: 10px; + margin-bottom: 10px; + cursor: pointer; + box-sizing: border-box; + overflow: hidden; + vertical-align: middle; + font-size: 16px; +} + +.aiosrs-pro-basic-config .aiosrs-pro-schema-temp-wrap:nth-child(3n) { + margin-right: 0; +} + +.aiosrs-pro-basic-config .aiosrs-pro-schema-temp-wrap.selected, +.aiosrs-pro-basic-config .aiosrs-pro-schema-temp-wrap:hover { + background: #d6d6d6; + border-color: #b9b9b9; +} + +.aiosrs-pro-basic-config .aiosrs-pro-schema-temp-wrap i { + font-size: 18px; + height: 18px; + display: block; + margin: auto; +} + +.aiosrs-pro-basic-config td { + padding: 0; +} + +.aiosrs-pro-setup-wizard-content table.bsf-aiosrs-schema-table, +.aiosrs-pro-setup-content table.bsf-aiosrs-schema-table { + border: 1px solid #e1e1e1; + border-collapse: collapse; + width: 100%; +} + +.aiosrs-pro-setup-wizard-content table.form-table th, +.aiosrs-pro-setup-content table.aiosrs-pro-schema-ready th, +.aiosrs-pro-setup-wizard-content table.form-table td, +.aiosrs-pro-setup-content table.aiosrs-pro-schema-ready td, +.aiosrs-pro-setup-wizard-content table.form-table .button-hero, +.aiosrs-pro-setup-content table.aiosrs-pro-schema-ready .button-hero { + font-size: 16px; + font-size: 1rem; +} + +.aiosrs-pro-setup-wizard-content table.aiosrs-pro-schema-ready td, +.aiosrs-pro-setup-content table.aiosrs-pro-schema-ready td { + padding-right: 0; +} + +.aiosrs-pro-setup-wizard .wizard-close-link, +.aiosrs-pro-setup .wizard-close-link { + color: #ccc; + box-shadow: none; +} + + +/** + * Hide tooltip text + */ + +.aiosrs-pro-setup-wizard .ui-helper-hidden-accessible, +.aiosrs-pro-setup .ui-helper-hidden-accessible { + display: none; +} + +.aiosrs-pro-setup-wizard .ui-widget-content.bsf-aiosrs-schema-ui-tooltip, +.aiosrs-pro-setup .ui-widget-content.bsf-aiosrs-schema-ui-tooltip { + font-size: 14px; +} + +.aiosrs-pro-schema-ready .button-primary.button-hero { + text-align: center; +} + + +/** + * Schema Pro On-Boarding + */ + +.aiosrs-pro-setup-wizard .aiosrs-pro-setup-wizard-content .button-next, +.aiosrs-pro-setup-wizard-content.welcome-content-wrap .button-close { + margin-left: 10px; +} + +.aiosrs-pro-setup-wizard-content.social-profiles-content-wrap input[type="text"] { + width: 100%; +} + +.aiosrs-pro-setup-wizard-content.success-content-wrap .form-table td { + width: 45%; + text-align: center; + padding-right: 0; +} + +.aiosrs-pro-setup-wizard-content.success-content-wrap .form-table td.space { + width: 10%; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .form-table select { + min-width: 53%; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .custom-field-wrapper { + display: inline-block; + width: 48%; + vertical-align: middle; +} + + +/** + * Custom Image Select + */ + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .image-field-wrap { + position: relative; + display: inline-block; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .aiosrs-image-select .dashicons { + font-size: 1.2em; + width: 1em; + height: 1em; + line-height: 22px; + margin-right: 5px; + vertical-align: middle; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .aiosrs-image-remove { + display: none; + position: absolute; + background: rgba(255, 255, 255, 0.7); + right: 0; + font-size: 15px; + width: 1em; + height: 1em; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .bsf-custom-image-selected .aiosrs-image-select { + display: none; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .bsf-custom-image-selected .aiosrs-image-remove { + display: inline-block; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .bsf-custom-image-selected .aiosrs-image-select.img { + max-width: 100%; + display: inline-block; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .bsf-custom-image-selected .aiosrs-image-select.img img { + max-height: 75px; + vertical-align: middle; + max-width: 300px; +} + +.aiosrs-pro-setup-wizard-content.general-setting-content-wrap .bsf-custom-image-selected .aiosrs-image-select.default-image.img img { + max-height: 150px; +} + +.close-button-wrapper { + text-align: center; + margin: 1em 0; +} + +.close-button-wrapper a.button-close .dashicons { + vertical-align: middle; + font-size: 1.3em; + line-height: 0.9; + width: 1em; + height: 1em; +} + +.close-button-wrapper .button { + font-size: 1em; + padding: 5px 15px; + height: auto; + background: #fff; +} + +.aiosrs-pro-setup-wizard-content.welcome-content-wrap ul { + margin-top: 0; +} + +.aiosrs-pro-setup-wizard-content.welcome-content-wrap ul li { + font-size: inherit; + color: #666; +} + +.aiosrs-pro-setup-wizard-content .no-margin { + margin: 0 auto; +} + +.aiosrs-pro-setup-wizard-content.global-schemas-content-wrap { + overflow: initial; +} + +.aiosrs-pro-setup-wizard-content.global-schemas-content-wrap .aiosrs-pro-setup-wizard-actions { + padding-bottom: 24px; + margin-bottom: 0; +} + +.aiosrs-pro-setup-wizard-content.social-profiles-content-wrap .form-table tr { + display: inline-block; + width: 50%; +} + +.aiosrs-pro-setup-wizard-content.social-profiles-content-wrap .form-table tr th { + vertical-align: middle; + font-weight: 600; +} + +.aiosrs-pro-setup-wizard-content.social-profiles-content-wrap .form-table tr td input { + width: 120%; +} + +.aiosrs-pro-field-description { + font-style: italic; +} + +.aiosrs-pro-setup-wizard #aiosrs-pro-logo .wpsp-setup-pro-title, +.aiosrs-pro-setup #aiosrs-pro-logo .wpsp-setup-pro-title { + color: #000; + font-size: 26px; + padding: 0; + font-weight: 600; + display: inline-block; + vertical-align: top; + border: unset; +} + +@-moz-document url-prefix() { + + .aiosrs-pro-setup-wizard-content.social-profiles-content-wrap .form-table tr { + width: 50%; + float: left; + } +} diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/style.css b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/style.css new file mode 100644 index 00000000..4ed25c21 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/css/style.css @@ -0,0 +1,388 @@ +/* Meta Box Heading +------------------------------------------------------*/ +#aiosrs-schema-settings .inside { + margin: 0; + padding: 0; +} + +#aiosrs-schema-settings .nav-tab-wrapper { + border-bottom: 0; +} + +#aiosrs-schema-settings .nav-tab-wrapper ul { + margin: 0; +} + +/* Tooltips */ +.bsf-aiosrs-schema-heading-help { + color: #0073aa; + float: right; + font-size: 18px; + cursor: help; +} + +.ui-widget-content.bsf-aiosrs-schema-ui-tooltip { + background: #333; + border-width: 1px; + border-color: #333; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 1px 0 2px 0 rgba(214, 214, 214, 0.5); + box-shadow: 1px 0 2px 0 rgba(214, 214, 214, 0.5); + color: #dedede; + max-width: 250px; + text-align: center; + padding: 7px; + text-rendering: optimizeLegibility; + text-shadow: none; + z-index: 9999; +} + +/* Table */ +.bsf-aiosrs-schema-table { + border: none; + border-bottom: 5px solid #f0f0f0; +} + +.bsf-aiosrs-schema-table:last-of-type { + border-bottom-width: 0; +} + +.bsf-aiosrs-schema-table.widefat { + border-width: 0; + border-bottom-width: 2px; +} + +.bsf-aiosrs-schema-table.widefat:last-child { + border-bottom-width: 1px; +} + +/* Rows */ +.bsf-aiosrs-schema-row td::before, +.bsf-aiosrs-schema-row td::after { + display: table; + content: " "; +} + +.bsf-aiosrs-schema-row td::after { + clear: both; +} + +.bsf-aiosrs-schema-row td { + zoom: 1; + vertical-align: middle; +} + +.bsf-aiosrs-schema-row td * { + vertical-align: middle; +} + +.bsf-aiosrs-schema-row:last-child td { + border-bottom: none; +} + +/* Row Heading */ +.bsf-aiosrs-schema-row-heading { + border-right: 1px solid #e1e1e1; + padding: 15px; + width: 25%; + vertical-align: middle; +} + +.bsf-aiosrs-schema-row td.bsf-aiosrs-schema-row-heading.title { + padding-bottom: 0; + border-bottom: 0; +} + +.bsf-aiosrs-schema-row-heading label { + display: inline-block; + font-size: 13px; + line-height: 22px; + font-weight: 700; + padding: 0; + margin: 0 0 3px; + color: #333; +} + +/* Row Content */ +.bsf-aiosrs-schema-table .bsf-aiosrs-schema-row-content { + padding: 15px 10px; + position: relative; + width: 75%; +} + +.bsf-aiosrs-schema-row-content p:last-child { + margin-bottom: 0; +} + +.bsf-aiosrs-schema-padding { + width: 110px; +} + +.bsf-aiosrs-schema-padding-bottom-wrap { + margin-top: 5px; +} + +/* Row Inputs */ +.bsf-aiosrs-schema-row-content select { + width: 100%; +} + +.bsf-aiosrs-schema-row-content .bsf-aiosrs-schema-action-desc.ast-no-desc { + margin-top: 0; +} + +.bsf-aiosrs-schema-row-content .bsf-aiosrs-schema-action-desc { + margin-top: 10px; +} + +/*Title CSS for the Enable on*/ + +.bsf-aiosrs-schema-row-select-target h2.bsf-aiosrs-schema-row-heading-select-target { + border-bottom: 1px solid #ccd0d4; + font-weight: 600 !important; + padding: 10px 12px !important; +} + +.bsf-aiosrs-schema-row-select-target h2.bsf-aiosrs-schema-row-heading-select-target label { + vertical-align: initial; +} + +/* Settings Meta Box +------------------------------------------------------*/ +#bsf-aiosrs-schema-settings .inside { + margin: 0; + padding: 0; +} + +/* Builder Buttons Meta Box +------------------------------------------------------*/ +#bsf-aiosrs-schema-buttons .inside { + margin: 0; + padding: 15px; +} + +#bsf-aiosrs-schema-buttons .button { + margin-right: 5px; +} + +/* Rule Settings +------------------------------------------------------*/ + +/* Rule Forms */ +.bsf-aiosrs-schema-saved-rule { + -js-display: flex; + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + padding: 0 0 8px 0; +} + +.bsf-aiosrs-schema-saved-rule-select { + width: 100%; +} + +.bsf-aiosrs-schema-rule-objects { + display: none; +} + +.bsf-aiosrs-schema-rule-objects-visible { + -js-display: flex; + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; +} + +.bsf-aiosrs-schema-row-content .bsf-aiosrs-schema-rule-objects-visible select { + width: 50%; +} + +.bsf-aiosrs-schema-rule-objects-visible .bsf-aiosrs-schema-rule-objects { + display: inline; + margin-left: 7px; +} + +.bsf-aiosrs-schema-remove-rule-button { + display: none; + margin-top: 5px; + text-align: right; + width: 33px; +} + +.bsf-aiosrs-schema-remove-rule { + color: #000; + cursor: pointer; + opacity: 0.2; +} + +.bsf-aiosrs-schema-remove-rule:hover { + color: #d54e21; + opacity: 1; +} + +.bsf-aiosrs-schema-add-rule { + float: left; + margin-right: 8px; + min-width: 150px; +} + +.bsf-aiosrs-schema-add-rule .button { + text-align: center; + width: 100%; +} + +/* Location Rules */ +.bsf-aiosrs-schema-locations-form { + display: none; +} + +/* Exclusion Rules */ +.bsf-aiosrs-schema-exclusion-rules { + display: none; +} + +/* Color Picker */ +.bsf-aiosrs-schema-row .wp-picker-holder { + position: absolute; + z-index: 1; +} + +.bsf-aiosrs-schema-row .iris-border .iris-picker-inner { + right: 0; +} + +.bsf-aiosrs-schema-row-content .bsf-aiosrs-schema-type { + width: auto; +} + +.bsf-aiosrs-schema-table .bsf-aiosrs-schema-fixed-text-wrap, +.bsf-aiosrs-schema-table .bsf-aiosrs-schema-custom-text-wrap { + width: calc(55% - 5px); + display: inline-block; +} + +.bsf-aiosrs-schema-table .bsf-aiosrs-schema-meta-field { + width: calc(45% - 5px); + display: inline-block; +} + +.bsf-aiosrs-schema-table .bsf-aiosrs-schema-custom-text-wrap input { + width: 100%; +} + +.bsf-aiosrs-schema-table .bsf-custom-remove-image, +.bsf-aiosrs-schema-table .update-custom-image, +.bsf-aiosrs-schema-table .bsf-hidden-field, +.bsf-custom-image-selected button.bsf-custom-select-image { + display: none; +} + +.bsf-custom-image-selected .bsf-custom-remove-image { + display: inline-block; +} + +.select-custom-image, +.bsf-custom-image-selected .update-custom-image { + display: block; +} + +.bsf-custom-remove-image .dashicons { + padding: 0; +} + +.bsf-custom-image-label { + margin-left: 5px; + display: inline-block; +} + +.bsf-aiosrs-schema-specific-field-wrap { + display: inline-block; + width: 50%; +} + +.bsf-aiosrs-guideline-link i { + font-size: 1rem; + width: auto; +} + +/** + * Repeater Style + */ +.aiosrs-pro-repeater-table { + width: 100%; + border: 1px solid #f1f1f1; + padding: 10px; +} + +.aiosrs-pro-repeater-table-wrap { + position: relative; + margin-bottom: 1em; +} + +.bsf-aiosrs-schema-row:first-child { + line-height: 0; + height: 0; +} + +.bsf-repeater-close { + position: absolute; + top: 0; + right: 0; + padding: 2px; + border: 1px solid #f1f1f1; +} + +.bsf-repeater-add-new-btn { + float: right; + width: 100px; +} + +.aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-heading, +.aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-content { + border: 0; + padding: 0; + width: 100%; + display: inline-block; +} + +.aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-heading label, +.aiosrs-pro-repeater-table .bsf-aiosrs-schema-row-content { + line-height: 1; +} + +.aiosrs-pro-repeater-table .bsf-aiosrs-schema-row td::before, +.aiosrs-pro-repeater-table .bsf-aiosrs-schema-row td::after { + display: none; +} + +.bsf-aiosrs-schema-type-wrap .aiosrs-pro-repeater-table-wrap:first-of-type:last-of-type .bsf-repeater-close { + opacity: 0.3; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + pointer-events: none; +} + +.bsf-aiosrs-schema-row-repeater-type > .bsf-aiosrs-schema-row-heading { + vertical-align: top; + padding-top: 25px; +} + +.wp-schema-pro-tooltip-wrapper { + font-size: 14px; + line-height: 18px; +} + +.wp-schema-pro-tooltip-wrapper .wp-schema-pro-tooltip-icon { + line-height: 1.5; + vertical-align: middle; +} + +.aiosrs-pro-setup-wizard-content.advanced-settings-content-wrap .label-wrapper { + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/images/breadcrumbs.jpg b/wp/wp-content/plugins/wp-schema-pro/admin/assets/images/breadcrumbs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43d8e97e9edd24b34b43b94bc7f199fe9acb068e GIT binary patch literal 33442 zcmeFZXINCtvM9V}hMaSfFyx#iDmh4$oFxuJnqfc~KtQsf1j$KI5kzv%f+QsfW+ewj z2`b4zQV{sofcpCGz0cX_IrsUV`{VA$>8`G-uCA``UftEbmWLCEZwc>dUGQ`R07FAS z2mk;gfDl3hz(5EB{s9mc0RIRE02j!K->?@%;3p3h2rXh1Wfp;ex+)zJ}yYOv4;=V$KS)p7p`F@3m35R#JKtd`3nM45|VO?l2VG2 zC*hLviZarQ5^?|ly9N16w_DI(@*x**!G6JjIamoU5I|r*c?te(2Za5vc0l<4YzGwb zO9n&?`dc;7%5EaOXycgU}emma(dnBUOm&n%8@ z%IX_g*u2x+Kf1VO=@uB5UD7fzwzMsG#>zeDa!zUM;Q0F;Y5)oawZ%KqiI4za=12uj zNg6y*gY#Up_)<}6bT|!qO<#PL=5cxJ7oDzQMvw46`GuDNrvM?J%>9?361N#$wJc<@ z$alY0_^&nK|4W6#DS!-iR3|l{0&JOQFvqZN-(bKuTB!*|xf>6((M;CI7HK?MJ3x6q z+s0I6hv#o4bg#=4l%7q(?5jou8>yz>mkDScH{W7W()(23|M--x*VSe#glzX{sESg- z?L#0*cWosfZUFy_mgO?f-5+S5s-i;ukgJsb)-OMOPT5g<8gTP=<*scXKh8VwYS!EVqg>L4KqUvi{+5~?o+QiMh=0dgFJqw@o}0Qd!Ew~ zj;mYyMdW*DDqBB%N(q0qfY}vDkh;T@t}Cd^ldfk9Mg@n@x3n@J>&IrDkSG(&ULMR| zgFNxCqGx;ZdT?()`4AY%8@>}JTsp>?87aHAIHT{l_vYRJPf6kZhyJ8h_xt7aDb_VE zcP6v6PBxT=DUFrvaj&8rW<(GtY?@95eTWH96p35isZZJ^dGTTPWNH|79~J4XWw!P4 z*-f+Lv{!ko_;A9e`senQx|IImIiF;BjaNs)#Wc=|)|S3}XRVRn#nJZ3b7!B!a5Uom zvu`K$&VNNoNqm{wKlp%6zb_}#Kdqe4J|=ev=-%!q-rQjhFm>Vg@BZrGIsNi8%l5=n zWGKZ_yS?drrwNkZu- z-nlBV+!Z;wief0z6}s#${Cv3R5HPJGVI{Szv~Ri`if;WV_hEOM!?E!PWBCEKD)znV zn^#{R&32DK-oJV-VMXSzoYfKGzoBGgHeyH2Q^9t9iK5U(yp|?z^0t1=Tzd;+h{gJJ z$7bk$!S^+mM~YWMI~7s>kQ2JW6rxdW^4?S9VZ7cv=`R?zJg1h0P9(;hW7k2;Jgpr; z%lQYby4UMi8rRO zIZQJDMxicG<{@zSV#_>dxSXeSx%mGmIh;IPqa68b{gf7y0OZwm4e@x79_Lg?@gLC< zP4Nh^2*x-%Zao74QeQt$4Av+B>l=Utv$zExF!slqx%l{?k2rKOSR@h?;Ef~TU|gz! z_QT~VkII^PUchmvdtz~AaO7i|NWZhr-biyTYuuuIT-k8}V?Q4sH!~zQz}Lvd3jq?z z0As)p@B#na061UHuA-K`e6J)IwOu#!xxMB)d;YWE`Gl=rtbcRzcU(s7>&O& z80=pe0~fUaZ^~JBY~b&VmN#1ScLucMU!v6!DEFU+IJOdCdPZFX)CRW^1591va95uI z7ge7*T=poO@x%NRP96QveCmF#<`x*NHn%An*SEieI@%Tfukfb+XzUT*_ySth`ZqgC zAQFM~@zZq1I^$Y!q@=OCvH!18frD|(V2V>4FhIH;i}{CY&B1-%zpB;@fj-6?`yo_q za1xFJ6~fQQ*UAG4b}l$VJu&XT%twJEn1VW~`(Uv?-e@0;`_Cd|zbH5r{=k#}!kc=! zd;Cct{Y3zE`^}G=E3ma=9RMdV#qEZFrbqLL?}$cm6dy$@k-+hIBR|UGcE0RKoXmgE z!#0lc#78k0L5@m+yJB1*IUe0O^pOTzM_3&|+|3Q7purg2%i^d%F@@Lieq*GL@U~$5 zi$~@NgB$rjF-J1Lfq4Kovkw1dfPKJ`|0U`0|AcmA3!G?hG6MKVIh@ykoB4l)BfP{B zg5Y>_dW6BX0oMxLxT8735FKHD&S;ar70vzq-k9&j#mxbAZ(XkzHSperJ zKrVtQEg%I*0Fr8V|VEB#ysWvW; z2|(kXmpD@pxcCHMT>byyIe@@Qf;8N40&tV(_Xq{^|1iP<^}lAqks7AI2l|m}1pa7G z1k&FUZGfAqkiXS~e?$Y(G~kc$D5Ic|Ga75|?EW_{3Ir03Hb-8->iX-L8yft2AQJsT|Bad0!^bZ~4ejav%Tkobjo0~w z23t<(iga@hIC?-62O|Bj|AO7}7y9q)q%Q6nK4>4mKa5L#EMNW1Zvt2ZIO~JK*_s&Z z;|nhI{>VR{fFx+}QTb0;GMA%A>p$U1!7ldrNA{yRDS)f!Xg)(#J|Dry^N;Qb#tq@) zxqCF@35vixZgSiLf7~EA2LNgy4Eozlp#S_I|N1}v^?&^9|M=Jc@vr~mU;kh8ua8zW zPH=q!01NO3!7W#mfEwTmx~VRpiwXywRu2%yf^s zDIq`vRsjAxd`t1h1B>-l6c@+%i#g*?$;A*p-r^UWeZ?ikB*cN!Di?g65hx@U?t%n& zU`kw{I=Z>wo~}wkPl( zjmG#ZUQpsX60QisIJ7ty{D=jMQsO!~%Z6JU8pAbw{E%=NF=QYr zqzD{5pqCPt0RPE~N}g1dkyVtEgZ~U%U~PV`Zi=Rw+CS?8b4px48x<53Bo-ts=Hurs zE~%iPfRiC5B?@wg`UhjM&KE>6{@lMLXd?X)ex64jIvghv^gaWyN?f3($4&6|{Vn!i z+UgghE8;hwFSrdns@xSJjzlB9kr=E$Xje&G^N)o3{<@L)UF2_~f0K_o<5wZjw1$TN zy1=h~^Y;E-g+Ep+5NyVO*USF6EuFY2(%&b*4}sJQ1l8omRpzUx;fHhveQ|Tp5C7Fs ze;oq-?Goh=ekAC+BbB&tw<@BNQecmngV!t45{fbk!V)qdaLj7xh@dr-C(u>Pi2J*VWJf&ve{8 z(ICMeJP(2EYH7$yD#*%;N{LAx>1$}HsEhH(I%5z>T}>q}&^ThAp00`t5+^mZq&3ww zw6!F(`YUDy!*(2*7p!ud=RSS$XaMS=nPp#~J;3+| zyxeJV-0T1uk0%}o$ZDSiIV3bCHP|D{NO=fJ+0=_ zgZn`EN?-u)P6TEE!f}C~$RH3N0bw3=fVU?I${V3$8&EO6`%ARP3z<>5NWAT$z-6*UG=5S;y7 zLI2*{*BKKG0LN{{l>%t~$=y0aA4mT!@ejWL4#f5CF@3}2sLvn_kN?8`Rq`*K4|rW5 z4_=4DQvbraTmyjCSO8#}`U}T%3p}E^1OP41{%8*aZoK?)`rwH~h~W(SJN#RQ-<d9?%O60FS^IS4V+qU=COWR)EjIHn0a?OcO%LA+!)?2nU20A`Fp& z$U~GNS`Y(>DZ~ci1aXI8AOVnzkQhiJBps3mDTI_m>LGU_y^tZu3&ciQ=8Y)4{XA zL*Sjq3&%^s%flweB~~OhB6cMXCQczP zCT=HwM!ZP8M?y`)PohL(PU1xpMUqQWL()$&L$X0iO3Fp5Kx#tjNg7F-OIkAuLPs+8Ekm+J4$aIs!U=I$b(1x1pUs(p%DBpwFl8q@QDeG4L_yGN2h!7#bMH7uupyg2J@Z`wk=;m04)5F!^ zXm~EX5B`~xl~ac^fU}VEDd!#+KbHkpG*>OxEH??aJhvNnCii{r&paGFhCCN}DtV@O ziFxIDJ$Q3?2YGk+`1!2(F7vhWec)%}*X0l4ujHQ*AQw;(I4@8nFd|4GC@+W-ydn5p z2r48aAd2u7qxWL%U?R82Hcv{Lk~7=xIBShQHH*t$56 zxUG1a_@MZKgp34QqF7>Dl15TbGFq}-@~f1P6hbOrYDAh`T3b3ox=s4aN#T>olQ&OJ z$k56d%3PMYFS9QzC+jC$Bl}T~N6ty^y4<)toxHJplKevjdqlXeMYr)uPd|(8|+#t<9zFu3f49`Hak&&@(+c z_&WMJX*%P&Y`O^Da^25*a(ZEUefnhjX8L*h?+kf8HO`wdCy|bwi*FO zx<(mBv&Q_!=Z!l|2uzGk@=caZB~34y4w})LIhs|NZJVo`rEp8oV{m6#J#?z+FmeAJHw#0VJPRlOKZtf+llwXni)NVrS*{Rr-eOA(8aXClj@NTN_tPogEF)1xF}I_vfL>pM4GZ@j#zdb6g0tst>r_m=0aiNZ65Ek%4q z*|!O92i{&Pwk#gJBY&s7gry|0WWN+sI#*^|)>kf9US7dkkx~h*45<8Ab*}1pwPtl& zjc83_EkkW$9Z(lgw_NX3Kh~h%aKBN$v8IW)>3TD5b3zNGCAj5tt4Hfxn@!t`yLxx; zx1VZn?hxxJy~lYkzmvW*rHiENQrBU3NcUEcZ_jG4d++>x$NSR{tRIZ@ne;vF*YAHg zpgr(lP;IdLq0+;9LyALphvkP`AIUyyc`Wm|`H9Sv=BKhxTb{{1YkRKny#2-L7hNw^ zUiQAyd^IqlJMw7s?C6Uzi?NCEbK`Rpt`i?7(UV`M0;l$-BWLhu5@xApvtP5mE_x&Q zrglztuJf(t+sE(B-c8RV=2sT{7k(^WS|VS{e$Vl~{DahodmptwK3}$5UR?2A*;|cU zqh7ndF0kJ8N%hm?&(@z8zxaJQ{F=1EyivM&a`XO{@z(2Y@9n*vgm28>%D&5gAKbOt zeZLpbdA(U%#=ua^Cf zV(4E1_B;Gh689Yf^f%#u3LM_YeVJhnxd?-RpE4YOnb8OCHNaOMpfFJSv94fDK!{HS zetAI*Apwy%${#ck55aw}K?S}+1l}CNV0cgnKCUF>=eHUFH4QD5Djl4Yo7l;hUXqK4 zff1|?lmdRh0jf;^g@KL)K4>5aArZ(*2hcNca#6umxp|147=6`vX+UkD;Fliw5PU)? z0muvizw@BMqv@S|)4pgB7Vp%@>X)_A6hv$qZjqbdHX1q*F-b-Ohg^qBT>gG->BRf9`FN zpw)fp9gQ@@hLrV^M_)v0J9T|q@@WU^epW&_L^=JvtiYX>v2^jxP30TGTig9%pBUX$ z2#RC8sL8tquXw?EsGTI@G68o6sLiEN>>e z-Mg%m1~=FXhKyd{+p~MW@#YQx>gd7yYtG*q_AdYU*!HtZ8S%c2Wk}Bx2>UR6nTbU*=R4dF)oOyX5APNwwK?_ zxFo!q7gAf))A0J6XE9u+i_K%4OQl%$wV+!EY#$E19RM z8U%$(<8>|+vtHA)m(1yIUW(6A1jh3gjXtKV`F$BDg&Ck8j}5(wnI_e!8~gF{+FHr; zk_)zLSvKZ0Qj2JQ-wxq(0TFx!?)6KybklF_zm;uV8e4qGD>H~{WxFGI$@i(v{;FbE zk4UNL6J};BpHVlK_LbRe+mqu=HO3vwEi3J8inR}`9zKNJv1ziJu7Be9F~)8pJn1|- zXqBODz<+j9=w5w}L(+|`H=DLfpWdtfG|B%yQ31y!5d;c;*aRE`T<9m$yQz4W);oBl#s{$WpS`_QF|H8hZ=y#~@BApU${5|8uoada zL$A11+#kmLk@L0^@if#!yuGVb=dqcq;F?Ufna!S^S^2rye$P;tg6P4NZPj?TT6rb& zc4>|zy@S?7?$>oBOJbAKA&`58DVg55Tn}D$seBZh6yr{Qph5CLB$cnCASu7xJxz2h z*WL*7B?8VMp=^o7qvfh(e&Ko|303OZm_g6F+nj}dKSWH2FxonunUHn}c!^Fj&9mo; z=kX+J=C^8|)>ddZ5U^Y>{APHiem+%oSwi=IMYI@$ZaOsTsZiDf>~*em@>eQNm(Ni_ z{H#mF?pc4N*O1Y=W`R!3U`s!vU@IdY%aL~S5Xij6v6DMzVxeB7r6WL0W4yu#t>A*= zb4>S8aS(3H)g1zyVP_k{6QWel!r?Bo&*#*yX$`HLXoTuHYFv!C1-{0c@FST7L4A!@ z2>Ct9T_EEfX9A)EN+On*z_*1*l&32ucuF-KmKka3qr^_H`W+&J&+i$+`&Ng2he)K7 zu#(#SpjdG^r2JhhzN$fCazNxKB~8_#%qN!EvXa_cx6X4uZKx0_jEs&S`94$DFkF#W zK$J>iUL1pHVNXrG65QC&7Rv*A6{!`TNW;j@#F`+}r7v^)}R5^2wV zuW(xfXh;){=rqh;2*vdLv^ZF{Atk?0y+UVEtIZho6FIYUPf0YL)K z8R}wbx7ALHDFu#b-IS+zc*DNb<~An{+XFb8XoXySnhJLR3x*fu8JNyMY zDHd&TNfBOM_*bud|K8UsV z5J+f2$3&}Xb4B~U_;5{LC(Aa8%*>AlKZ=R$oDCa4)01{F?g=G&&f64-`vYu*bzh9m zE-B=e$>d%(%$IcK$9v8dTi!>V+p8UwoJuty82?t|wJH_ebmqD1aj+{PBqT&UwN0-- zQ*o3wy?#Ljh2WVfba5Aa`@u1>Oxag^D_Y&iOO=a%OT2rN^}g#<0ISqPnX!{Prz$M- zWFy!7z$ke5N}8ls`K3igmm)FJ?*PFjHeL;%2%jt3$loI6YwDR7C$kLF4bv5Dm{3^?+1ODijck56UH^+4+9|-hWpZY6keU- zA8U21p1JiSx=ziOYnwgeJtmmPpvipmTxRCQ)7XnK#BLM|^VafTH!j{@k~v-JG1zMR zEc=PONTIRReklL+a)I~ji#wzH$TBtC9ee*f!Dp{_eXx1IC8xe76qi_l3?s-<#cDH7 zo^08^iCwmR<-qc^#A)L@8O!&gce2C$Cf(h$3Wq?$#=*+;%a=F48a|Ml4KC`oiT(JU zt>#6-&Zcbt=!Dp(daP1qGWKyE#a`AX>$(!dWyJl?qIZqbqTLl0-3B94>{TV3-icAw z%vOj;2;blwU%8nF@K%fNvMNZo=EA4o{Zg&^k*;y8WkP1RlyfT~n-|<~oKQ`72L3FLbUX z-ciY~$??n!f-AlV5ZSmoC$+3W;qgNuv0I_DRd|TC*S36c;okKn^*c3-Ax!xpeM6#d zZ9O9_&(^MK`PF-jHYRwx)HW^!_Mt;>+S^7m4adw| z%_q>Ul08F9{c{SIQlGoW&83&GK1(x_qiUso#o)=&XK0e1^NyjBn&t9o{<=l~)82Sn zGnXmObgCT!_~tBQDAo>9mjTPSBtx^epH$q*XX=Y-+s~PE!MsrC(uV#L!TgNd0N5}-=is0TQsu1cuUH%kH&ri#f+Ed!PE)9wg@$~BObl~x<(Ucl{4$f5&tBC8*ck_Qf(RJ#f6d}F0i8lkCGzHD5wvba~k6O$#jz+uQ3vZ|! z>zCHisPUT8(Aj$N1oH|sB2pBh+eiC6L|Oc+BjMfoAGuoLV^3sFFru3+3>7V+pCt+B zB04?=7YuE+?%Ye>e^=1@vMb@7rzvc8v;kA}qwK4wi@BGHUDlZYj731kZO3b$Pp}g_ zQQ>O{c>djR<#PI0nQxsp?4F3a@M;Ntat;d^x3#zU==0NLO?l|^!>^m!C#~B;sNseZ){(WT-BY=!Hl=GXcV@{pznM)haYwwK&7olM zBL4zQIMW46_L~GfR%g>t=LD)x$4|6Z3_N|A&(yMbcALPqsCd}_hw|0hQ}1N&m9(SD zJMP)b)KqkQdgBzbT+s{$q zx$`3~dq0Rj<*wnwZzb|U>!ejN_9WrLj=5jElkDH7zhP2--HBz_x_C8oYH(;3J<}w5 z^|rTgyLM1lt91fOCa*`nzl|$B$L~^SwYsm8E0(*4z+SLH8<0F+%*&pl|rrNa!1D|MyZjJYS zw5WBc?-;?cJ1)n^T2 zi)W{8zB9g^|2kT!`N@0#hWntSVdyFER)++!Qe@y&^7*~mQp?5}RO=d=Ld5;+n@n`@ zC%R49f{bx*Xa2zH=_k{5*|*kW_l-Eb@&XMDJ4+%pcqkuZmw%Lg9{;j;KL$uo`vy9n(6%$mFqmz1{6x+A{@tx_T|3dOgQ4Y^efHBUG8U$66DP?N2CV^s@3x+a5x44u%UY_90 zsU0}^c*k^Aau&P}2eD`3-Hjvy|R9|Wbxz7D1YvWC_SFp+?lSyMbv*RPJGnOBamO#u=HdKk37UciH)$Tx?#fP_m7-g{|4K>pq8dJ5F z8WWvv$@>DiVuBe!4@bjJh)5|tKJc4I=G&1yk!=%4t`F@7DjPDMnr0wWxDyqds+V(@ zIHTG9ibSHRD(#xmUNNknfHKQ#Jt+V2$q7PV^4DyVw z$hu2;x{@~?4h;~rwG$Rb**XO-+tGB*>n=#Plv)^EzY|rTmRSh($ zv#Ghe^@b|gq@s1Kiev)iQ!>0l8I)An>CG~o9Pi*6>0aqI*c@Tjbk}PBx?Q3xv#@qH z9B@=mqC`8=&SB*MuesINaLJe zN|^?ryAtW_N&+*>iwF}SxpTg@w6Hw1Q(2OUCFyH3s28dhx7jxr>M5SjE=ZYlRsFP^^qA25RMx9p z)|^C4E&N_WYzu|3ax^(qL%C76P|Rl8nBXwP~J zFE?jGdou1O!Yu`a-1*it%Pav4P^2 zeyxW7s_P7cwkuY?FsUK}9)XngF7;PudSj~})9j9om>0yzc38*U+5sq#VM@uQtMz1E z?_MwG*^Flt+!L-}AWc2TH5TLzso*MUuQy58u(rKawxBx{RddPG<-CPOYC2`gL{VYJ zc$M(CbOF-9_A^pjdM$j`%oK{dlOwe@=bMzoKa=kyWh=RE?Yobb)z85!{8UZIPS9#4 z2g=VeXz0p`snG3tX`_Y{q94+bTgV_0W(vG@bV=scJxt>Jmin$Tji@$sqFibDa-tW( zSX*oDg$)2}*Ky43Z#H1i5;B~*l6v5jnsyv1mt38^y{ zm`&EY+@c|QV4-v`p09797-7etj(K02)KuT^ z?7G_+I7ql#v^v1!xT_(3V9DP?-IfhwKU3KpC`7J5>!24dyK-0N5Fjj{NL8$44^FW| zXFafdx$qeJsM$g40#o(0eq@yGR1ZFxlJW$9`&Bc^bjW%cT^y@u!o10OOR`2|k6ivP z`m6gdU96MWPG?-2pQ&&c@vnOKlBArix1!35&4TsX;JFcM%V5{B))rgo`;TGNsVoO3 zy(pHgdM4ecV-2Y_!1i5+S0<)vL|bvz@B+IK9?qK5;UUhxGUKYJ`g%eY2@9F#Nt{Nt zybk?N`OR6?q5}b>hH%%AgOW!gg6Y3y1KDI8{7X$xK(8 zRhIsE;~8MYnz1In220l?i)77OIKMnv7imm0lj1=@?30R@Y{Z(9yLGlrW42L5ll{CU zf@3a;@JZXsiskNi{Yn&Fge=J?8<$Siyon(W1G$%KTV@%n5yd}P49JWIbhuNlY`Xtg zR9SW`kC;*BF8h{pj$=Xe5YSs-?w%s4+7xPbZv|Q+I;#gveN4YNI`1vRya?fTp`DbBbvn zCPXZYxs+9h-+EoHE}di3LFV$XXK;_orm9ceC7$a`d-%&MH$GCS^a%g!YmY88iQIZr@?EUh04ot*L?a7BUMxza~ zR_O)}Z6;~>SD1DDQ?F#oNw@Z-4jR9!9wqWtd>F8!A-@vu$Uepz*NIg9K)l+_c?+BL z=$-tqQm}2|+3A(-N-6c$L!eesVRG-YM^s$dmeg8gbgjjdwUHZ0=m~tpx#O=K!8!F7uL7SH-N? zxFkx!aZ!Qc9a%0(4?Ad54G4WwSv`9Hdv(hcZ~Of29X;$jS9d4>itxD7rone8dMmxy zLqHh6oH*QdiJL))Zq#bpJJ({*OXUNZE}JB&YM6m^KDt8zA4LuRbTfGDkiQaUgZN)b#$wc!iD=K=_t^)sieF z2`zabq>Q)QFxN9XLs1-0(z_)R-O22(7s;4p)kZjSN9Lm%v8{{p`3yNF!i_Tk00#&; zCcna?=|<@{-xg`WJ}ZRkI0I@Aqt#3Lhi}0rU@^%eUFw;VJUh0nFQvlj&>|KwQ1Cp} zOm^ScO1@+58S6H%8Z`JL_QBj8chN^EK88x2o6ae3=3&=Jlm`Jf1<|zi-A4NX#YFF+ z-gIFRdOs(FshiuD2APGbIspo7ZY1o(TMx>wI|~V8dvAUmimsE-*Kv2b&Do96cR15< zA)9=yFVY!5e4Gp-8yYF3aEm*_YRZ>1jM>mSUo~6#l?Pi3Mh$PnPRP~e=9`va=Lbuo z@dWpM*RnEMv*mj>Pgz%Yd(F@CkOHmH3%obtD>PjS-P>NdWVaV-3aq)hmOb*PbyLF7 z?-xy(8b5MQTj#KyjH3^nVP1#=YE)@hUiv|abW%dp9!9!eJOp+Qfk)!UmkB=)gS2KM zBO`S`iu76)Y)K2HFmJdubhnqt_O7&ayQ3f8bEUN$eohAR~q94Z(Y(p6!!N|f6t7zmg% z2YWNKoFYQ%gw7bN5vJ|2!iF0K_a7Hm3Vx?|vbc=Ht#r+^NDXq|U&NbN;)6(zL6p;% zMXc^ziZdmGZ^Dy_R3ty5v_w`_0Y6=HS0t&uGb~>79ndn0pV~P`;_A_2C z>%m6P_k;V?#GJYke9-8}5z%El1(A3+l_V-gT}pG|gM+yr2UQwIiS(_q&xOgK4Zc_x zlesV92H(YuR!rndsKw9{C^Eqh0oeWmu!%HilEn6WJmnwRl=~e!Qz()3Cg}B~}Zsh#9PCXm0@qXE?s(MoK+NILwyqW%( zXf}$ibGgz6rKZ6*sy8fyelThsbUC-<62W4{x2@FR=o1oe z_jKtAcJUB^j!oGKYc%+tLU;zOKK$Aud95mQb5ADGW1N0DX*K6^^_ti)>0P1XxB*q3 z^aSdh(bv+B1{V7Six;vjD_X*wva02%m^)f6rFiq(Vh!W!Dq2vJ_6&JF8m8H?_Rb}5 zm)mHnXHF3ip=)K+TqcBLRtCzNuddY;f9@amtZ}c;C9uXf^wJ2AEMr;G5_;8f*A`iC zku4>tVqYCd@(7;%yuSYhQv%()I%vpOp{rJI?_b54b3PFC+7`~pSzfiWU1c=x91Dvz zZNYag)e^iwULJ}nW!pr_wRSyyk_cZY%NnaQUL|*~9s4{c!tkUU{(z&h!)@uo z3lB(E0?X@`s`@p`pa7?haxL_!`Sbb3?>fuU<>OBi5NJ}rNGVm!hX=z-11g+NYdgCU z0kc=&WoXd^t!twuUiJ@27EpGT7Ng&?Cab2ZUZAKgsJ0mR`pW|uww-hHSvvIg+b(^f zUp4jh`f)C~kfCJMFwLc$3_j{vPuM>EhLf{^x^}6u;TfmHz||ajH@ayT2d%2k23W;n zezk}2DkMP~8spr8|E%I&!$OmS?=~SUr&MgBYDdVTI-a9c$mU1Invzz5mA7$dChJy} zxupV)b$vWj3|w_<0X@oa^+9D-)p~Prbtq$JmIeKz~D8%sA4jdIhjx1tZ! zL{~6VLg90YR}pRIf%G?uLzYP(_0(eHbyvh5V<5SvSrw87B2$xHWh$nl4vQTD6Sq^< zs#+@BsiT$KW0+$0$NQh}W-GTmu&i~-Ot?BN<25SuxT<&UE~JMh+9uLOx%~CS7b~lX z$s6gzTaCPmBNp}k3>0Lj>K?d_yOS15gn#IxIh5~ezvyDb*=8&M^Q!*zsn<9KNNw( z0s89L;k+u+_d%Z36Cb_SW*>60qReJZYozeSq?#KR&WfF%gK5X^28nIhQa^VYxEISy z+<(RCQN3N1jUS@|B(=8W_2`!%n#%etG|G*EF+=MHEM-Pp4KHr2wb`r9Gv zapqo;+Rlj1txNdUmFXk0yrhJbHm3SiClHR7j}jfHs?Ce1W?SkLvIC4OgzI(vy32A0 z;pr*2u}b?1DGg$6=vQT1wOv-EpQ@y7qBD6%>Ih%Fsnp)OwPID5PSu<_Q8m0wKSf#J ztKGkN!IW9|%T0xkMBae_Ws7665i`N^Derh#?&?9J`Y66Rm~D>;Ni9JItE!i$KUpSd<)|nCKv*(ApiC@D=L0 z^inM0fM-`_R^&(e*Uc(@!;k3+$EuT(1z*_-yFU3M>_#8kV0-?OV7&aaU1psk9_(R; z*^NZ{*ONg!aJ$JqhHZ2FoL0~CRnpQzZjci&|8w$H-j%dmw9a|e8B$ywdRY%c^`fGn zN)}5Fg*(oBy}NaaP1_v>oKr>bx;t%d(JI%xG^A=Gv9cMTfmDrciOTvvl$lwkU-Eyn z94#bc#yH;ULKHMq<2TSB_-IQ_@w3*QO135_V6xm~ALxyuE5lz?Ag$0O^7Dj`PSY2H z|6i=rXe_5uwGsb>!pDglEwa{qw$G692O=9u?&$PO;w2M%0kSEr6T`Y%eCums_vWg`jYZH-lPzjN_I%!=)_%!B4C zW{8{5w>J)R5ARY{pl{nRs#=9)UW4zBekrvSGI6RlZ*NG5m%~SLj&rnO=F+(CvzSu} zO-`5C2pSUwsd@%xS&=S#kfB9$5{hu;GA*jlT2>NYM-huTiGd^!4v! zQOHNGQU$h*Trgyyj12yJ=vHE`i#$-$CUpj)%F2H6R*iPogAqT%Nj+{9wY`h4@k+%N zTiDw*GAN%=0s7GetPQ2hg#D?f5Z~U(XS3(VbVYrFuU>n0rz%pf3?9IILzO=BpwHcd{)=4?YHLZza1B*6c~pZ)R)^H^F|`j=;VZL@LLkV==Od zF5y)xE;VUikWOmxhrp|Xvr$pPNrT)o3GXO1)|^$i;a@4YQCf4AMyHc+EkJhBtWhqh zs>#H_Zio}q%QcscV?BmOQSt$%-)7gw;_gn|n<>)Wz?SDwU3s*PKaKTQTM;}MCs~w& zB+6UN@bUWG=H<|vAHTo5GpQae-}ewnIM$Nqn>Fr2ynyf;OG1=*2@|v~C;7zyAu}E^ zD4j#Vpn3fTHG$7Xohu)DAIOJ__Rs{`xe6}wUVTsKkQ{SQlj-`I$Gdlh>MFOBIoiLR z?X;Md9Q16ixN9jnq?c+DX^RbY@)EVOy0WbGusK5odZq4$Q@VSB-R-KG7JeQErG3Ug zKLz$DMqW_W@Jmq1mR6t8F}hTMO`PI9EAYTM(gb|}-Qp25D#`F#)q@VYN%i2|-AP$f7dVor;_;3V2b%in0RHY5*;3Rk_6#Y%y0s zB>c6X^NT*Tyg*oSET2%v(#@5T1qY)e{w{=%l8`wf zNvR?==Qfz+|mxQmu?}V$fBf&MtY&pG8{2_OsT^%@Xd5 zukK&~_cQB%u6<=soOX561@o)^{IKtnqcN5~hp z!URD2?Ib_|0mv*%8#nA+vbQ`BKuxw=$N1PsGteHsirryp0ZHlX$5luJreD%lLFl5KGka}w*oSCawFellneZ)WvZ2N_B2vP}%UfBiJ ziP$xv5(FCp*vApXR>!iet&3%!7@jK%%uQ{uK?j_g+nSOKfANf~ET#xa0dkON>~Tr9 z#$(jOHH>CR=ZSM{E^V^wiv{!K=HtSBZ07Ay&MM z3YpE=1{24;DwQ6#yCp;B3ga+Lx6)Wj*BDHKz=k-vk3f(|{#k$j+5iXv0RaX-0RI5w zN%^GEqtEw3@C?EZJ8S~3ywWt~(pjEQ!^oriH;iI6ouEp7@-F3a`yt=Azfa&dK60rg zO&csgw${u9U0VmPihwE81v4(DB{gbov7}+)*;{?GL=CxPfGbBI#-y(-I57cNv}ZWUyv#AQ>ZMF+H}F|2qu6tumpjk-7isbu1e&bdiaJW24sECp5wsdM zSx-n@*ck!P0oPlE@uL zNaY`swDRb7e^0(YRnHMKUg;}1j_Mx1ek&auP{L8_IO+hn5(;U3Ce=Q-a000L;N z(HSgcAj}sr0E$Zl@C>E|2xvu*J18hZhq5!S$VyP0CC>A`=Xu}a(GFk;WjQXz>BcCr z$04cof@4cUTTRwN!;7h6;s}*>a#M{IS!a3nLS5(a=J(QeId4A0W&{4mNweE%6=kxy z_58NFI&-}X!ogCgK3#Mn`7gS-ebVPXzh3kCJ*SBJx10M8KDH$%w^ilajL!c6Ia6?X zT#Z*_yrVX&YhomBhi#*_a@cZl?4!k^Y{-l(w%A5J?4{0jo!^Xlcb|IZAcKurM#IduS>4`V=1Xnm3|H3w z04~L%shkDf`);e2{z|3aq`A)j0Mn$)_=`_4^Gv6MV`H_Py zS(4cN49^w}wmh>d7VA{Vh*P}Edx;pAHU#yjPNkTs{^rrXe*e45`n z^l-M`{-;=nSE=@oBcaycVZ{DWy9QNrZc3VzB|0Cc5yAbj4VOK5kCMdt#UNdeOb+0G zMoa3HBh&ls8UifPZE$bBPvrNzEpDL2Kc24JhfR~m-Zw?(o}2!HMDcgr9AjaTd~8~lvM;W5Hfm=nC1E;IW09Ywrf zp9C+%aOCdy{#@(jIX;)`_5ANuy8zE>+M2jbc>d+b-VCG6Gn)Nf{(t0JqCCV?0>v{} zGRte5E=aOI-a=ITyOl!?rKOMa1EhMk^Iz2A;ZkR%~ zYR>|joHJt8bzJ1Emm?bKuh{(If5ktPqhb920ORV+*r9qqn|Y6qd;WC%C$9OH!#VN$ z!aZZ-rk@6X$ZRxoIhJ+C@~N^iAsXwr+`HOc$@}d5_Y?D(7pySMe6Y7g=&!vmL3hXf zH;ZXJ?{inh3~z_zPu!iKPwcr?$7CZ9>d~ywEoQyMo0>;2})BZPJj%%{Hfg2j9_KhIkz_9nLZH;i?L=hPT(?)hpOe?eW4+Grbi8etXa z2x7lRK7ok0*0;Q6WJ$B*aM)$O#gfP?n(6u7d7R&?HqPL5Gx;g%nm=AE)5gerpz-e| zSw_pwTB_$Q-exuc7N*`-x)3rJ)h`xl<9>*P$O6rH*S4+y6#Hf3Bqhl~ zCZA229Se3^3(Alp}C$oK2~^_=&aU-ENHnelH5__61nUJsl4lW#p?v&T<) zscZ7yep{1Cpvrlee#@xy>bf8|));oF?ZS$h)%HpjatrM7-~EWT@P_MtOegru7oW&h0@3_PqZ9$W)O9lq0Y4qU2MpJZH+tw zj32z6KZ1Ry`RqDhG|POlyCJam-ye7BFFkk1gYsXLo}-D*`99+$?=&xx{3`V?idrLl z*BP&lQt?bmZg)V(_7CA5WB`2n{1auitK}D=kv}lO4w*N zZ;|44Q+;7T`#vN1_UZ4T zt1HxeXA$l`^O=3TqKrH$Tp!MP~_7w2w16GNVOM{GHgF zs`%vhCH>Iz-TD(u@m^^3GBQcL$HL6jZg*sg{c+BSLbubFtAOyOivpG`{{XiSwy4t` z(HRUG`7GatQrAAqC1kN^jLIs?XNV~R%P^`Pkn^BTnwS8|EUL|(tKk9ud>Q$R?@dR;n1 zYHVohDb(m@;a!XLkJ9MWmt|T@7D2vICVJQGD&ZZCX)dPfdC?UpgIHtQ^> zJO-K06}^m(RH!3I%{Ofg7xx4KD{8ewj;f&L8}F4+`@YnS@E$P#08}GU0gd2yZ|7rZ z7wF3NKQQviE9o-M+i z82R5w(dZUVG-+fJ)6CQ5ZK)z-U3GWe8oD=cuHIS9t=U{w%WlJQrragSr$IcRC*Ex&W*_h`3iw&aEd=2KW(3ML8uQk^u~p18V(Pek40FadFX*$&qR{v zib!R$3}kCVYni$hMZCZ#wB9|is!+CHk5lQU<~G>e{zM$cfvEa06A;#{X2URxXqRCz zGfyAYLdx?Gpi#70WKIi%-y13V!asPzX}rNUl{QPr^ggeU^p-}2%Ci2TK$_hCPa|xK zPFWc^`a)n?D;ePTcfYbsS5B#P>iIpYWnNVD?@KED4sf%wz4HT2-JEv1I4t5;I#G5t ze_uS){U?5cy|^+!2-#cOYLx7&_=3~?>(&5qsZ76OgDE8W#(Gwse0q>t_h2X)?K_&M z+GKnM;;+lb_Z8U2p{E(feIF{H6cfDA86Q2^XxtpX(x+hHZg-CHhMpRsLSabNq33=Og2Oh}&eV5pSk{g*ZD9o6&!YXG)tc3YLO{VWZhq zw0=lWy^ou0_-0|!zd|r)bX?ggXRsoCp6u=EhsftMM*0IP)M%e*7I}G@^twe1w302R zt#)tC)s12kd2j929(2)evYKUIplxL1DgG+8uw?o>`?t-jE*eJYTZX)pW$e8XPNn93mkwt^3(wVh4m1`u zSAW}iSC3Vc{bN7(PK_s=PW|4)ywvD*D{|&E3}61!p*M&1mW1j^`=S0&7GNb7LW*we zC?A$t8sjP1Cisv?^B{6snbGC1GvRB;4P*0j81-1Ou`CA}^;}~2KafNy&=!ArqQala z&PLA4a`O%HEc1;{e`BB4X)^C{M{KkZ)a8Ngn@vWKb9Z!9PjoW!oLF>Z^Q?@h%cmjX z%eyb)&}&+h>RQ%eLSAP7099t0wUr;1bzv+VAF2NUEN0I-!wRC&rd`$&mTKsY9Ut)W zJn=y-035F8(JzOc_=bUC+C5U*9(4wgB^rj{#Pf43%dU;-g2m&g+i_RC{dtuxnfA>V z0h8=(GhR9lXCx#g>9Rp~Gx{`#W58BPNpz|uoUy{8%Mjq>(W+?}+gUYT$aXQ)QlUmw zc99RE=0okR86FTb+qceHyUzjV+-lQ`rZLMs67%>HNWeRcKKrFquaxKf-g%7?!y_XU z1|EAH)`WnC8ibh~##+p4S&ICbR$4sDPAsY>#yy~WtAr;%%O3v#H&yyWe(C_l$NT4&p8h4wjpECPf6${BCUU& zXOAP##*O-vdNuUjkAos)tiZ1>VV8H=Syfpm*YpA2#jaGnfRf5%;tzc!f{{UdZNGuQ;24Cll?CdL)J1&1EfqJVt2A9p2U@p3YbnK8JUQU}=rqKDa zQ|OkE1LusUIY$C!crr4ti61Q@KKZu{=BgTkjJKfT}R;2-2kUtt>v*MT!&-#f2Z+T&x`#v z?OIf-rXA-$KuawI<~=o;l9WeYu7MX@I|;T?s=jldUi0hxmb}gGShTZEqJFl-&lWi= zK({4Dx9IK6gtVdw(O8}o%a_17-72Newp{0b)A-|KqS|JcXVER2RtH+?ZzBP@V-e|v zQT?uV@{Kh?BM($Qwh&blrW}=#lz1GM>ym_V;x=R|CyYT$q_Ij;P8jzc&#)$zuv1s{ z*ID}=tCfBjc75+7_3!f;rYBapwsU*D&-uP>_F~v+(-W!FkU)xuA(Ba&7-2}ErCp@i zK2t=y&Q4MK{{R>Wn^pj(gXmiiFB}K*=5>SZeh`|4(g&9T&qFUtAa-3I#DL*-HrL)x z66|}<{{Riw$8nFANoh9*$5G8PUguYqIdK4iO?Sh8trVILoN1gawla;qW%^E>k!v zGo5HAN9X-f)c^*R5+!w$gk(7pwm)@zl(;-^^jsw}GNhM@8+F6+WWtiztzFjf!`vk9;9i?bZG>P6~@F`g%h2hNH3KBDtX_hCv@W< zuRgzDN#a$bG?<_gk#?EDu(MdZk=fD7<5VUx$+&H(4vdzm5WE&Wdm1qc?sJ; z%VlwmHOhVO`hTbm*K1RU`?=;in-o1bR9Yoy(l9AI_6|_9xOPhf&$$Bd&AQt8MFdkg zc7N&h{!3AcYfHo*-DuF#)L#AJ8g5zh4C7l@lOD>G*Z%-!uHH~hQk^7M&RJZg33I*w z0Fx`NKT%@ZGXy0xItI-lvrM4GZMxg@;HHOcyh*fZU=|`t`XP$sWThkek7iWAbk9lN!4aO^Ds~`M> z&~l3MWnY^_pk*1Anf)HWP>YmP!3F;SC}&H3ky9wr;Z=oG%BuSz+T~?~f&Oan6R8*> ztT0ewyd%H!{fLKFvtOTNhV~t55413%Ftn*vS4N^%Lil$2t{PrFq=z)E1$m@$ zSvC2J-5;Sc{#$PrMg`7su}M(udnJ6bsw}I>aGchxm3~8=(&ZK%qw|c;xMS1kRtTB~ zMJqe%1y-Fp@G1Rf6!*VNza;xtV`pKGYic0E>0~*5(J+h4KeewF0l{*OG-U14ZpSUsELWhOt$4?RAAs zxIL^>B}m|Zf?g6YK@tLS6YsG(OjdWQYC+2BX(8F{*is` z7*Ve=+KceIY(NSbW^-~ZdUmtQ7pOI(xr=#PDsN$vu3?5$Iw*8sIy)O{jela!2kFfu z*)Z^mo7iSTa*cTlw81|?O-UX#W>Goyl-5-lq_sr&y;v(wfsJ zYA-XCXSJDUV+m6V`^sFiPp!B0SWEI)w)&$w;W*C9=a=%@HX3x9{Qm%~bJfo+9~Oe+ zKy@3(K9IdZ=JZRWSi$QL6p3FLNQ=KhzrJ1U=ia9)gAG`{{TGeutFLB#kNXA%arn;2Em|y3cOdDWqlJVrea!U?OmR)Zk5OE5M}+?Xw2Uc@zi%UN=HoUVpvalFY=MT*by%#naChV6TjU((15*WXkNB;^ zm63<-6G!E^u90N9_@x^A73;|Kj_{>fU@^;&9|nn4qAEaQiRIW*PIUBc=+mkJZIxWY zqpPsF-`;jLi^&IIep|BEn*fy_PxbD=UIncRQ_Q36cs04K%A~xelU(}CiMFa~s>|c_ zjc|v1ALia_cBUl*(Q4F-s0X<`yID{h)(={&rzSz;N*OzpAEht1UOiH{+PhafDyLLz z>x%32_SM^G_6xGzDNwb`;%(uHva&{DlDK|Ib6FN;zqC~ zx;IVQwv!eiM6M-CedWtJ?J0v#W8sr9ycO5o?4(Y~{=M<%M2FU?#>-(p@Sjb21X?zJ zq3C|7VHlbfRRvA}OK$L^f+5v$WS^rFn^M%0#) zKd)c+Z3ep&e2XN|?hn7bec0~Ii|?qZa>FNO9HQuQ$szOp?rNJXexo_2$>?K+%?<$5 z$*3DRkUbt)UeFf1okTxkO~qf!Z7NZ^uF)E3s=8gW*f3%;=aYD$T(bF5DysHvS!ncC zHJEGZrNu?*7;@#@?KHtKweVr%_II-WA}B3fDf8iRStPIO{*5Oz?3iLFG@-78vEBg_jPL`L&A#uBqp}ByUMEg$MSDFrl7+@whQ0M$gIkzLV#E_{Y3~C+yoa zXIP0A)NOhE^2)|rmwV!jP(&dH9&rhbRQPJq4l21uXIf3l>FlDyRZI^}gQs?wlq5F*jf21rem#YS}e{a5LlH*KezFu4w?0tn7qbymQ>yT@~_HPnAYL zeU?wMoWJB*9}uL#vD9I7H4@UdI8FdYot8t=2VWc1=_OMd8K>66HE{O!vc$5xE&IDv zDzKUc!BXgaFu%fB>%W(U& zy?e%fb*Is`)w%L8^pH+!&nv%uL&VBpyg26^aLqXiDyQ->6P49f;?+5g`uQi~2eXS+ znHXfO(4DXH#<#O)Irvbljr9`EFsB+^c>&{Iemew>u6axagn3tG9zhm&(PaVrzdhx7 z#0yo^ZefDKk5Q4s1PFX)CW8GBbpmLpd;9l(ji3@d>FfxX+f;cHeGF}oiY?q;$VEBL zCytW*E|P;Q`Xjq&eYPt<%9m*Bc@t_Hs+`?bq1Z66huuwHWzh@QP&n;lKTMv4uOMw% zS}P98e|lme)4NOBJc8w1cNJ9K(jHNK>79bZk*YDra{FGHcn`G#8*Z5Y051_^Ku=zi z^mKblkUMf}z?QU=57St)jrvVokJiQi0CilbN^~YYxhlq3_KJ{gSotdhPi()^Jbk0` zwsOvgcm{x|Wx9jW#4GEzka#3){{YU7Ro8&B?a|2*m7|GvJ6-K6#0 zG@WeRJj`9J;XqbS7S>eqpUrKpHLT68yqpKEMd09=V&$bkTAquC#%PUi`>Gv(XyfwZ zWkHd?FhbcQm?9bj6~d_Oda;b+s$|uTa&h}aEPwh_LHxn!s?vOoW>id(5r%y0F(3k@ zTtw7HIFh)V7bRHBn~hahn@>B#!%r_KtUE3zsmEFGXGFDE>KwL%2K0;@6yF-91sDXx zz#k!$?!G*-@8ORdLOw#!>XNWc*(%V$RH&~d5!Wyr=?7-)r$!^pzZjp?)<3TWFo5s7 za8hYG(EshiBM~GS6-)bt80!`2I4TV1h_dHRE z{okgox7xj6aCGc_<1(ow@F6fHZ0cWAz?e7zL~y0#u9U#;@sA8T82_`7h1-mPEJAT9 zsJTU+4ET>(ARH@yEk`%Ss!EvI>7y3g|9_P1B$_8l=EXn0c5pWNj|-qUfW|v#F1yg6 z2N4s8|Mol&E42Ux3suEmrlOJvIu1{dwFLOVFA~@0VSpb5hc+7^+K@_6b_+yisC&-j z+fn)umBaejb>lSrXM|D&gQL4@OcA|;eWrh0k_>p?hiy_+tSwVSxYMgtC5=MGrdxV7xB&? zzeYZ!C$ie)B4o(l?d5vBOA5P+j&?+EVxL=qE@xFiyB%Gk3tP0PI$@3@8i5NY=zBV= z7ryfBp$QkF2;lk$MWYGt%SS=8*5ZjNvD(7RE`ymrE(%jnAhR*4WlD&5!Mn zJc&>*-&|_DF?2Wd^N-YaVtcfeh9mH8KY~nh@Z%z?jl=H?#>LaiUsovP zC4RKN3bmR7JB?aD;ID2liYS7m>RnwmOZSh72 ztO(?Kn%Pjf^|&6sX7)1L${u~96jj2qr}20zU{{LKs#wY>gxLHw8jihJ$nh$j>-D&p zG=M=WI8I3&(sOgT{U2z??W6SJGE=Bj=Yd$U)uW?NY?zH*In8Rsdd zOQq~7jG0?@QX0y=tlI*njcL*ixHd*;FDc;oOSf7fOUsFn@BY9Q3Bw|DH6oO+tk8~C z1eUMSjg(EDe}cXHzCsLMr`AwHKZcu}+2sIo6pJvAS30vmh5xjK_4UOXgJK_6!arzS zJ{oB~1c;qtq*84Gd=;lpq@U?C`uQ`{2{JA1?%gPBIrD*0)Sl#PQ^6K}A;TF;_1s90 z^G!h)&fmu|fsKhL={ywN0?i$Qv!ihU8oH<4G{nDgIp!BBSJpNjXC;p8cg{&`IYP93 zV`HAFXha8=kmh&`YM34RJF)j0Ut=A!bhlE9cKfW1CirX9r39|l9k1;M?kIiBLDndi z?0dOMdm*_uZ02Ny34UbhE)?pOo@6lcgTPH|f7EJ~m`@x7QE@XC;fyU*DD`NZ5|`w@ z^98I2@?K_9qv>KoCOE&N@>M~j$VWe>zGkA^RuZ-B1&P%s4%oo^N_^-G!74^c!!5e$ zWw?lA#E1<@>28z>x$Pa<6Xbf%9)!c)?EN07GJJaLR3o>sud1Hqym0Ac!$5ui_-wGr zW<~TX{@m~e{a*Xs4!xkw<|U^sckKoJ?^FAi z+h(aVuCK~8Cfp@z^d;>lqPKz-Z?LFwT$;}5xjpgEnEGdoWaf7~Vnd6BN_OMFTi;kW zLu zPAQru&aQjrBD+80GH+bW{X6#{ee-=t%m_CX>ot@u5UOP^BHBnk4@p%5iU~u)8N;Jr z&$<$n0ke%%upVqbp2;`yEtoB&S2uN$dp3v^M&Lh4?;bvRrMU*viClT&)(RlO*9#K@?#lS}^JfpqGl}7!Q&q&r}w|4J{B6iL9==JN458)YF55VG=4XhP}{%q0wX@ zwHDT+sP2XzVNw%r$N*4`TiKlPr}hMW)lTjb_QrF-V)#YtKp|C-*L5!c*U4EG;kYm}6p&0}*FMB9nO z#X@99{8E&Z)?t({UE5A{QBUqpQY-pF$7&R#X!icM29&fGK9}#PnzhB@DIQxox%toE zBdNy2ia*Z2_5C8kJM_$RB`nNEWS1#Q*>%eli457dy8s$gMAVzHf3Xbevmy@$x~1w0 zECv)3emM|r+^q@2P`)7Yyr=W9;;O%Rbp6E%208^a@+t!BNF~Z5_L5s-eziF>qIyYE zwr;VleT@26mTKvD#bLfCN>@?Mx-Ozzgv&EhJP6|*j=X}Ph>EiIVof;E!KB z8|0#gNV7p%P;dKXA_oN_Xpn?9^Y`%EnIB(RRoj~o2k#0KB-`Mog^`?oM}>|n(U7)mDtA20 zatOT*kH~ZFjQzeYc~j(snI9^N>c6+{ zh6@Pjgq`#oi&SvB4SEy!9_|E5nwi7Rc5juv?E#+y!h{nu<^`S3Em}D@Rm7j{*nMf6 zE+!Ezy$4cIvcW`5-xdfltD_sSvq?Ff30py;bezF;;>|rAn(hlo7^z)y zjKXVT9+FpVmq998F{H+j)rH`Ntg@Y3Q z?I>C@pU2B(mj#Hcfiipa39?PGUSD0s8?pem|yK&B+{nQDb zHo^@e3y_h@j=OOgCHrZ)I$i@Y33^~O7u7e~c~PGefO==q|4>HECaJCd5OZ72wfTh9 z50xx3dmPRQ3DJBBx=f7BwO;+Svxm1XwbN55`*QH#T-zw-hEbYf|tf^59* zYFUKjW?uSvT4zwhm}eF7vb|TgI7o=nULl33yUb-Yx%gm0H2v`fpf)|Fjg-fT5Sd%E zwjD-kkAHYT&{N->RP2AM2P9AsfXR|z#cBL3bjqzOF;a>yS^3pU6$4-o=;p$meuoqg z&PZH$!DsI-=YvSi_l#yhw%Puvk7Y^E1KVSxOm<9OnD)#^iPT#zh@sI^q~wtEasO}c z-UoZ1d?`_PJ%X%f8rjEU!n0=!%oBX9uMu+!U2NH_bAPuA&;&E5^w4}O6(((yxR82t z1%#pVD87n@-!@6ZIo%5VA29X`g4q4adJ%i*-h%-u{XVzNQogD^%ZB>hw!4bYj%q2G zj!~SA1z~5QqEBX zNgw{GC8gpBs|nk5dBViVa@=^h!xm`=ieE>L`|-a#T_^PRhv?v*yf6tS>8T~qmM*P5 z!i&!h*v;en-XCbdm}wELI#|*YBm)#WJH9mWAbrT0@L}2W8@FJi`v5{As_)2F7v_}v zgxH0N06O@v+z@#|tUIJGlM>GC5Kz@JnYBqW)~}pb{MDbO^sWp4ym$!Lc&Ai;+VTgW z8BTiS_!<+?klNda*e%azRo)iYjGOmHK39?Q_>tZ#K3Y*23|V9)5B`s`=_^MA}YL z*KTk=TV1iow5EmQ{S)tea*-xs-Di_wfVk)4T~ODztc5jnQ9$)1vzQVt>n?F^bsHv5 zjvlR5-S<>gxqY0argf>U?zkJn8CrdgkGP0ab)j9O<{p3t$Bi2|<$Lu30Tdhm&u+TW zoABMrML&@Ik|I_*Xku=d%2z@a7L|W~CVa9c9CXD@gQ3kGMqT8UVEon7YjhCTloAOE z2K?r+<}M(tZdiI1Fx^b>WkzxCXP-90O}L_h`RMX zWdgi=|Im>`L1tQMu{<5lXN)XYP{0Wii<~7Uv|KapRKfl2Yz+X*Ie@fETe<9P6@kY7 zu^8=rB0tpV3wUb0c;8vt$DK6rc{1twRxwbZlnEmVXBKtC;u1y4VJCRUVooHu#|nKk zlN(wSfl5#}R9Y9EFNHJQ1$?2DxRPA{qZv1A{XACg-4aSB`&U)m$0a6#RzS1d@U5!i zz0~0aS=19t_HF*}O@&j)_^z$@U-G96p@BZlN_)5P+i`#oQ@!VodlpK@l2VE3l&2D9 z%cjPm;q;f%M4r1^Io4K{SHU%d<3*YbtCHjDf2@PhY6wWhL`p${BuCHo_uGnR+p|z7hX95!cMUxm~wxo z)AE*&oY=j4tBtQ~1>M3)KA5T(Y!2b4KF*t{cJ^qe-|LKfdSN~~X3{&+GrDOF8(Aiu zJn_lzqIJ9CaFN{4S!8<&jRnz0wDxx!huiB05}b8OcIZ+uOhEXi=c9%2@) z0h7`MVR@M3~<#T}OPNMIb&Zm5~o#liR)^$BGJ|4}+0FEpFXEpmQXOJw(v zOYokK9)?L#5Zc?C583odoIe$nk*LqccFxvTuBzQ5KoL&25_Nr@N}h;TiTVa-j|NAT znurK`$jfGwm|vzN+nRBp!=-clrGjhk0PeD`vfURHX02?F{me}5Bu>BO%O?_I<1eZt z-EQA2a2!)wPAnqpTAqXQ>Kc6WYF)pGA&ZVfXBmf&QlfT!>y&19q-NBjm#J8iWXVsI z$?Oz{F(l$zPmObo@hon4;}s-E?m*UCvOuL+?!6PA@vD1iaM=2&ZZ!uxYt+3-hDAFj zmk%)^xLU6z$x6Z`7dhJ%e`hev{_#L>X}8g=fe+mieNtahBG=6S3h5Txl#sQ34#nV( z#Lm2vZ&t|>pa07@r{NL?qJCETo&F{rpF{x7&qX40u6--jHtsI$3mN#t8*gqmuTKEv z0ZdwitvS!EHCesJ^N5i3!G32C_|-RjYS2mlhP_Fq>N`N;ZFCd@-d|3P5|32Wt%0zS zM^ZP^#fbN0kx`<%=48IqFE2@rjPO}LZu$LSy=s7ynr&D-9?4BbAm*4G2(Vjx8;vm; zn*7N($K;YXuy9s=jAaN;pUck0ci=Ntv>Do*cX8X!F6Z8HUA-Vqfd*FPd?lFq^O5@ zMUv-kLT$<#1qhg^=G`M1Uu*MMaRsH#2pg|64n+Y)J{iZ1MWH;w=g-GK5>xW&nD+7i z=#;QYgHx}z+p-=;uRFth`<5~t$-sJgtq$oDIOkFSHB8|Y97oSZs)OhE_pP=Wr^UCb&UK+pu~JGZ zl)hrQ5t?!Yz727QjP=G~6;XT(1im4v)I8Zd_sH8(=@x$a9ds4G2t7EQXMas3Q0(nW zhZt{kCsyxPTxr_v`l)>$bgSP`756jT(dFY?>pNMZ%eN}O;nXejrdfJ>n)-l6835`H z#CvRacLU)tV>NI<#N{G_$pRB6Uhpj+^qEBDbPGgK>^+iG(gQ#{QB78viP@n_?CH8( zXrn;xI?=_dUjbq!0^xPRq$!u~i+_p-fz+-q^W^~ezyLt!Wx(1DgcccZOd?%8$;g&u z_p{8cJ3th9BSXzBprcp@b>*czCe)tbG__<@06|UgbUz7^F!F=*UHZezLO@0D$#+(6 z!gJJetZd=*X8iOX7uZOc(A-|8%Oihw6o2`Td{MqV4W$o(+>%$^wg%uVxfXL{crw6W zV$CI^yjh~UzQ6!mF2-vWf5xbuBeVI{Hq!6Kzr)W!FY5QxI=qL6yIMQr*Vpk!hg~h_ zj};lQwMZj9yN=48?DnbZ!f#)9sw)!5cRmVn80Z*zCT!zdDY8Y5bfL?SMT zj=G2lN3*48DywhwL`^58$v9O7MD(rdw}eFqSE2XQIMP|;vP2;UZbJ4K{FFMa`cSf| znZGLI-I!nk1QdwM1fW&&j)xuo)f5DWl}ov$#J^$D^(Y4DY%BhphXI2OCxwnM7pM!q~)1i9Ts9?S2Y96?uR`t$BRGi9mMhvX56rygPIndI1 z)hbA7!PV|vdX#*8B1G@GCy^YN3&&!e{c6s{wOh~BXAFn=EeYuEN!_P?hOi&^`|G5a zyXOO+A*#+NIDZt@?IN3wewA*HvZ|GAR9}7Ou1a#$P~sOMtCf}WJM9f*zVqBXlLA2d zWukgTkLXtHx%zj9~lJw|;iVeVU|Soie!jL1Zlf;tCSh?F=P>B={U5P&Dz1Iw#OPY-dnL z3aGrMG2ivj0jKj7%0QOb9RfOqQ3)%FGpfZBgGIIh(n|CG5vzmL&UqLL26}Q>1GQ>`n0;R+Qw0lk4LTD!19`M;(PeOZ1EXtLfU zN|wDycUAJPEa$(j6SDO)^qy*BCh|m0w=Ax)Vg)meDNdBTruucVZikoY%@$Sf75p}$ z-(|6#@s<1#G|C0{cf{s$>Ud^Se+0VZditQG7EW+YLz;-~PNFeI1P*w#8G6(6NEfKzt?9SnsaY|H&`~680A8zbapCq&h8x05lc4LlO z3=bFpt%?_CRHFhdJeyQ7tIZx0yI>qb)nTMqcxkbhuD;z5P3#tDzA-alGGVRmF9OqN_GP7!2cNUz zyU|%(sZX|t|K8o?#24tDJ)k>;Oo7F?C6zVEh;!#y9bm5VB zI&_oZBqi~P6Ys1fKTmKC|bZ+s0;H&FBzfs6;MqPpUB-}y~V&J0e6m1=6eHt>pK(yWtO|$l`r7;H) zn}!}MqtAx?R#UtWwQNK`&G3}0*M$RnM@}FUCRj z6>nN{=(I?du`ODqrAy|GHvCXBYN9qqY4U$l)ry1O2HG|49% z){p>(oVZ*Y`T9^piZPIXc{Q_Fi~>~m+`s-bA`T+^N2-zjz%8gx29a9E^NBs)58gyd zTYItC1LcN;(YKRTwHe4cDTgCJVJENnY-})9uNNLSm@%W%L49s$jBuDF$wKIB~_O;g4OoO3JfPMq*v>)`Gk(fkmRR#&8t!~ z-6gvHK)cn5N%B!-p&55NZ6A()Uou9${Li-Ma5&qrZDe<#60b;u)Jf8faU2OBi=NLF zVtA8UKc4LC)gV2z-1AX3kxJWB z+`<5r^5RuF#OKEqBz?B$G+e(b$fh%qM@KEn0y-Fw;*k|jyGZaF#h(HokK?{gfgsJB zpSS8V2FyWtt~qeyM<>RC?!~;Z-6G|L{ZzgMZVVrX7NMN1MS{@V7o%ZiZTe(MK!OD! z!!j-h(_v3$kPI==HItf0l&|t|t3Lc{ZEtLH3ss&{G{HHzg1$U!6jG%fZIkmttAlgto`nA{V0R1${K>oroYHGD zUnGVVr1P!x`^8(#YBby;>=kmIS-l6~qGxqNLXF~Tn#t|l6+(w3E-tuc6*mRM1U9g0 zK9AF{pZz=wL~6nAzO9Hmqefi_t{j`5ft2(HjtSP-xUiGhj%&T8%|gAKGjAk5`>pOe zXCX!r*XgOx812kxuQ4!L)aK}HJbxwiDkNnVc8(XujB!x!{1s(omHZCN93sU zE6>eo=61xVS)>Bi^obPSR>c@{pGa#Fl+w478EcK%y3`LKU->-u<4xMcz%+ zEQp!5i0c;9`+-Sf=T^lBTKo<7<$9qSov_UQ!&# zHp!E3^7I|($L5`E&ytVB=^Mg-*jhp-D9u;T zf`70MXBceI&sb_CiftL(Tf#tqUy#DJAhZiH=~*iN@Z4P^K!RObdG>ch{~EC*w-Z=`$I$ujr2DmDk?0@Z*mfdj{HVeF?RIbDe>X zzTk6r$SPZx=jzY{;#ty_t^td{DcG6yPcPbk&?1_@1P86=)l?&}t?J#&pojbxO)p|_ zVY2_5vBZmpcdH6YcvF1A|6)i%B4Ff!JjfN=^_|p{3Hy-nUvrx%FSM9Yv5+yR{n%F; ztB5|;ZK6dYkTtsM1b%<1xKd4hPwIAnckCf6<}0UV==6p&mxZn{U$m;Gm;Q;RXL8#K3X(2)!_c@dNJb z8LW`eZ?CtLApljfkY1rIl!^X5NpZ{`{{_VNeL@toO?xaq2>$h&B^Uq?^JgR|YJ$xA z^E=8sn3w*%c0VIfu>d4TMz*2JpdwsXhM9}F3EBr-Cno9q%V8ChA%_V{CN)Af|CY%d z@m6fP)RMAPbfJVcAVl-|?1X-_%Q;d@gqqV~c5Z9f>Q-m+i^oW{WXqBL%c2FfT9%DG zxpYAWXPoy>z>T55KGcg+PNP9X<&}C~FF`mut*MwCg1_ka9b)uYru2F0%pFYy&ZND;gZyw&8jfc4Im-(BvlP&06T&=xD9Fk!+`w*!`{1hWy-kb5kRGXg`XH87H=K@}P0=BhTE znqDlLloW5M81+d6r6N9vwkir0f{KXfo75M@2hpdhM6seGMa36U5UCGZv{(caZ%}+G zc&Q4tnqsoep4<5Sv!`@f_i|>kP0rcuzy~Mi%>HM-{qHjyA*H1CG%Q+Yqf59;xJx+R zBiZP|FZ&Mu@19I0DEZH6%KW;Zu2(YrzAW{AGDqp7zo~1DF#+5QOtKi@2jDH>=jut> z6SI1RBRaMM4*|P@^MZTRKn8db__LEtnu&c5JX%GTM-g}u_zc+5DTJ>M2wm91)DH!w z9znuFkXW`!IG(z0vBrHsI)v0g;Q2@r7G;OZmu(@hkRz*9#!4EJ-U(czA)4o3A4$T_ zMWeK|^Gfn_84|YJXzI-d;_r{7Nm~mgaxN~CTO1^7aT)jO&b-7x`cyQ776^)^GWkP! zk`|UC>&>7Z1Iek#Mrron)7MSX@>Sa?v9MI@%lwB)|LR3IEioNLYJ2-Q`3PX5?ADvn zLA5k=$o}h&4v;-DhE(OOgXRHdY%P{Scq1ZqnuOd~AEvy;p4voyKBwNd_9l%*$V@V9Nx-K3xW*g$P;x%VbvF5a1WY>6 zvVB1x*`oz$8G)twM*ei*r#dzEZAeQgZXH{+jjI=>nY07a&W3!2aAVGs`bD8%^mEyw zyK#ib^`b$TNpf-E4CjKPUpC9PnqQ{d;|}Kw<;%CK7BV_{*snM>`?IQy+GTyb6XN+Y zQYL*y%M#Vl^5#L6rW!BWAj;49DG@a@OI!O)!9_Q z?cK-3=R7g;<*4ZtY90|fq_K_Bvtsw&jjQXp zmX@Y*R;*BlXp;y`A4b+*cyGg#~~^1MIj>9p!wh(^9`Q= z8$5r%N$%etw6b z-+e&6yzb|I;`e;<$M;Yu2n;GkfouwP*I}*y$WGm$JXJ0|01g0o(up-~iYV zG5{TfAmASWp#?C{U;wa#(EWy8AeVmfpn*I>02l*|;Li&pdhmJsmq;0|?GqV6CVHKu*^IqO%-ee*?vLItknX2yk$4aB&E5aS2HA z@$gA0i3tdZDXGcHDapyHNeRxv&*VJwuQ7xWAD@tjkc5bcgo22OhyoQ6QJfbc{htUp zeFKo<09L?rbOl*frg2Vg@cJsAOaFe(J@%agfQiGZOK_ZZwg~k#AlQ$u(4C>y|oj$ z>~*VO5t}1He{*gNiWH^FEW6FA^w7XwxjD;Q?81QIC)l_0JMRX4=C@TYKFYpZk=Qcy zc_*i`b$DUd$iX)}=|xrB$d^5FRbxlLh{w6r?W2qPqyQQks4d2sPS{wOqGu|w2$5lc z8hEmjV+!Alr$A}&RsErIJ|z@+d5Z%Jr2sakX!8K5MAij+WkWG<*r(qr z{O1~6{7Z$?34j3otWHuu7T8slEOtiTBSce|0?=X$b)Ec!e3K*8Zp*4#FSyIEh?Y&! z6_i!anvaB1#{evC_&24Wx-6Xol+QQxYvx#%+r+4DNt`e4v z4(?e*$dvGrbTg3oiA=AHjExwt1iXoh^HUI=4D|f?k3;`=jgx zbq+2NaqSo46gchM>B%$`MDWkZ*-FF7wvWOuAB)Q_xtb<^{zPYL8BmLO9KJO05tp-S z!!Kut0U9>C^S~49aJAk25C_WfybgD`O*A%h=+VL$oU+C=K23i)zRt{IL$^6{FY?`L z^|XG2tYi7fq@K@M$+Xjl4>mzP(eQg1w|z&-`~Aw{zNY~6M96|c8z&A+**yWcFI6YD z8J6_0?gjouUoAUa=WopK>Q7v*IqUk$B#Cx?=;CaDRb}QIXIa;@X-;Pteav)ZcDtmd z@@BiZ2)w0=cCG{2B>bZOM-$>;s3Iox(ksK&@*(~Sx*11%Ofi2DwT9WKgvke*gNq_d z;)AC^BVTgZy~C!7M?Zy$7e=WgCXn{h0pT^tfN;jq_@4XAA;bys(Wi9cl6K*Y$4M3z zr+}xe&5-CM<0||Vz-kK;I|Z`M`c47T{jkbQXW|l`sF+9F5J?8)WZdiy9Tiutt0L^) zIbIKmIR#V?1ioM1Z6ezjq<>OqH7W~D9W8g_KiaOIS~(WbI0evmsD{q8xyJPA>c(Dn zF74|sTk9e(B)(O91oo@s_Plg`Nf3gdCo?6)RfgmT#J~|wGX>z?Xt$1wW6wvs33cRHp z-5FTLA5RQ{wbWFW(AlRjrR|s=Mo#^y%8Rr*`>I#MFP-yqiaq=ji2XL;lhE<{i3J`( zz96%!qd~rxt4z$;A0EvgmrU)toavu;;k87y)|J@(>=!=egT+M&YtO~5XTOQ{O2`0dik)blGI25fyr6YW&Fz2vIvP0 z_a!O5E!X2jAuhAHbq(D!&H~+jt1hIe!=*VCTfK57e_4FZ^`Qw=&XY+!wlK8aHCF4{ zvTW*!LnR!NxRVhgF?K;LVrqXK-k`9^P%JPBt*(rn{JMXU6t6GstLmD50S}NsK;Cov z@Zp;5>oDSVLt>q38>FYe#QzHy79Gm9eoVQRBG_r}KgJ7zDB ztGPl}a5z=JtbBg-*!g(=dzjaG@ka^jn!e9wWFz*OhacZZuE9)sOTTXlz^$6$?Cy+t zi0#nXS)&WG4*Y!GaIZjLjWpexnvX~J!iRbXD%;(njxFnX!Uj)}N5bCzVb|Id($}|| ztO=!qe`-~lx9l$?z?b6h@0(!murJz!yirlQ?%wXcE32*?I>~gv5wv&rj+78TJdH`K zj)o7OF&sFn8n({DLbsC;+>VzP^tU#O&&FqOBu?<=d3FNOM z#@0(SS-OC(==P%_im7v}WV&GV%wL>4?j(3mR3tNOYBdijvE_ty4_9s+Pj@VH;k4$- zj9gZZjoyG{^h`>N*CXoPKO5Z`36H_LKcKFCIZe$$30ff@s`)KXt5cqIBGxVa3gF+q_BL zvZ={9!*PPQWB9oIW`*hN)O(&{STz-{(hN=7i29{0W=P*w2$yEs;1kBtC$A&iI9hYM zZ-t2?eM9YTEW1;FrKy!dL$AJ1CiczrM^joY*-8H0Sg0v{Z-egk^R?(O>Eo~`#W=e& z$><-7CwML@i6t#K9kVIgYOBV0>=1qDZDEu43Sz_N(sjY{1Let( zw<}j840xR-DXT^*-&9tfM7OL>)|UA0eT_H?J9%iJZ0Q{?{4_@^@iler+nl*YB>1_vHIFZWd*mW)$rd$r95uXblrPutI*H($0J5?+VCgj4f}&S9R6 zNKP5=tjR8|D$$taWHf(qLn==A5t?}upA=yG2)`U+KFE09b2B@hNpSeG_^h(8SoPRQ zWAF0;IZjz0@rlyR5F^!?xv`{EU|8G*PYs~IsOYOq0G(N-rL#&RQ>}<&AUd9fkEK60 z*shF)$Mh{>kXI~?o&v@b=k_=q+BLM6tdfdf?(2G7x#j`wKv$GLo_#WG%l_!|Xv}pD z^aDf9$Jl9pm)9ob;Wr8PP3vbKmb!XE`Iajtt1aic0mQ3@H9~)6L-eHEvt@U)_w2dc zuQho1{g-zRDw}pVUQOc)AA{3~gRAXfx4}8W3Gq(61O7dyFpaij${=cvSH54}+?>bO zD%~7Ug3OlLbD8I-tiG)$>Jo*13sG6;->=>4nVs<~wS1XtBiyT-JY2daB_aBJnQ@M3 z*y!gJF-dXD)!(E1g~7LFhYcMxYRfezZ^^IY=1n5or$FjaYe~X2FS=-(gr0{QerSyN zK(MylGu));Xwf3JcL?>#ZQTMq>JMqnk#e1$j6O!s)zBwSPQ*up_-@vnQhzO0Mfe2) z2?cd6434w46UkZpM|4J$IzudgF^Y~_JOTi|hnKUvx3-VBhmSXyMXjy@9i+Fu9RlHc z#-Z-+4THJ+xSjXO!Jsm40VHJN_kF0Sb5gX^3+x z0eY$mil8f~uGMf50iY{zpCqFM9(+cW)IoJy%rU{tgPR z_RRkduZMK?KEvzyyULmTX2^_(4@{v_c4B7nO6=0{yC=xgUX05)KXay|V_&#oiRGaAuZ zd=|;x0M5r7;aL{tW@0?!r1^Uu{oHwjdxixg$XO}S1%(QD=c5~iKGR_L466nRI5>b5 zS1<-0M=0t~Oh!uTZ;bF6-VBU?@ra&bP$T~*=1k^yFb|-vtkZuR(3eo;e@i<3zd}2+ z1xhq{F`l;$1LdOorQ5mf1kW(&pbO|ckJ25*ff{ePXA*GEFh8$kG&xWh`1@&jl)Dc& zbC{i%rbT7Z&B5rr{irN}a>hY|!IT^j1_S{iKpfx$W8t&-GGP4^BMgXw7-8@aW$phM z{=l6{`}nUce=z(e{Zt#3clU8c-6v5dz_LU5xZ5ND<@$$ugU-eC#-J{m-y;)5{>#V) z6#lvbK7wRG@Am*dQwI{V;ja)TRmnh_K^NXEB#Rywxbuq$K!7( zEQFV{qx0{(ud+T$y7n0kltF0g-xx>6{yJ7-2=P!x4HM`kej zf4cqXK3=YWdjy>s|L+(rq~qToQ&_gH-Uhagf8!#8!dzVqVE*3fNHqg3&0jY{oL}g_ zG2=QRyaMH2ogIH!iukVKTr z|2VP#abo}D#Qw*L{f`s-A1C(VKThm_oY?<3vHx*m|Kr5|$BF&_Q788KT9E}@4FZ56 z_yc`Epj#P`2kb#-upQ_KW(HluP9W?J{*Y&o2gpJG-*7Mkil7@=3?=ZqhI1bfHh=?G z0RErO5pg+rdwWO;2)HBpZBZM)_@M|l0e@Q$0U>@t0pNW-B1 zmtj2%U~OLZ4pMqbDnIK2b26+y8|CNc$L}Y?kMMF75R#OX zM9B~q<^wtSkOA)Aw*GwXNVZ=Rlwe4xm-Cq)oEaq%^zr(5%dmo)o;ShG_Mmdf6HtSm2yCMx!Hp4b#}9LgbBEKz#Lhbf16S2%qs-e45}ycCth7q5qxvv;Oq(# zkl0lMP?)-s3@d0HerIQUDPd&^VP#=aB}D~g zL1l3vA$bX<%M$Vu@`@6|;z|nQ^1sR|A)r2}?*CQR9#vN9e^&O~t!V4|zmkEv7*XRz zO3fJw_GG}%%S9jN`4e(=WWy$mxex!++{4xjeDCHB^Fqq7I(Q-6n9s+Ahr1)Q zH{xgJY=HcyB9XSfe~J6IhWKy0|35RtzYO#Lg&}_S57f!l-4O=fkOf##?GQlSy3Tu7 z;9oobjP}QE?iV|F??i#WZ`xOX-CX}k|FOV77Wl^k|5)H33;bh&{~uZ4uVo+19h_SD zfs4A+PXs35G}&55Pg_M@Q~7L#N}#6c?2bSK-{`x68+lOkW)o90X6zpDjXo~8-2i-d zZwp0wXz8nZUNzYzCNgT`RJM;9PaB3^8?`_5N3DvadQS?)RqzoH<&HBzW@XEl9$~Z26X~q zK@cYJGSCCJ1YukO4{{MW{sG(l0egcl)j?iB5#bSV_L`ab5|oP>T(?RvtHJzSVcy<+ zI^bH|*2^ATDZ6>tx(5Kjd7DwC0J8tEa5+PtNB<@955E5jMD^`CeOvde&mdG?f8qWr z`45I1jw^b019hjO~88AbA zynN4DFi;65xao@+pa5vV(~4}srL#>(;(#k=Li8Y}5F3ai#2w-T35MK;Jb)xXQXv_Td`Kyz7V;MI9?}mP zhs;5iA>SYeXy|AJXcTA+Xq;#QXcB1hXc}k+XqIS>Xr5?+Xm`+J(2~(I(TdQj(B7hb zKpRH;h_;Hh3m$mHN2fw(LFYr4KvzW9MmIxuK=(oqMUO;JLeE4mL9at^M;}E0i2fD* z2L=`fIR-NZABHrB8ipYT6vGoE6e9{F6(bL$3Zn&M5MvHw6XOJv5R)F02U7}D9n%EU z5z`Md95V^?1!g5?E9Nlf0_GkT78VuOMJ#bFH7rvs7px$xD6Dj>msoGG`myG*cCoRs zX|Q>)Ww5oeZLz(v!?9Dai?Exp2e22gzvJNJFyRQ}sNk64xZ~WyNx~_>X~Y@8S;RTS zCBfyumBQ7=wZ{#>jm6Ezt;6lbUBErWBgMOjCxd5z=Yn?=FBz`{uN7|!ZyO&UpA}yc zUl-pQ{|0_C{ww?r{5kv|1Y`u<1d0R}1U>{Y1i1un2*wGv2?+@~3FQdQ2)zko2=fWw z5zY{PCn6`}CsHS}Cki7MO0r8zPAWvIP3lG(MOr}mo^*)}n~al8narN-4p|o2JFJ%;%4=9Q$dMGw2$tW*V8d3UFrcpLfexyRD;-pfia;1u;Dx(^qI=H}a zLH+{l!u<;+7X~iuQ`1q)QNySssb5kLQy|mFr+ZNWBAHQ#VE(k#U)c zoari)Gt(ocCZ-i;N@jUxSLS5q7UoSBdKNVnAC?T39+pGai>!vMw^(1YPP5^$Nw7Jv zJz{HS+hk{A*J2N5FJzzKz~zwOaN>B((ay2Yd6CnYGlH|4bLk@WMfHn;7Yi>=T_U_B zd&%=s=A|JnEG`KyI9EDXA2%AeD7O=L8h0-b8jl!{Gfz5CKQAV)B(FPfChsU80iQgd zFJB?w96uGmCjTw|YW{Trb^$Yic!73-6G2fySHWz-Ng*V&=ta|=U-(}aga z2t`yx!bECBwl4ErhFyMoc}$dCR7*5Mv|036OkB)MtVC>CoL$^T{E7Ie1cii-M3h8_ zB&MW-WSHb@$sbZ;Qr=Q!QXA5I(s1bl>7^?dufVQkUzwL-m9dq{kokC(`Kry;=T|?< zvdG%XX3Bn&W0SL&dm*Cdy)Krnj&7Rn7d;`pV7+#Ia(!$40{uM$ z1%p_FNyAHqK8DRk#6}iI`9}N3O2!GsA58>ILQFoG(waJ()|g?N8JWE>+cj42LYoiq^{2s==Dr+Sa<<2GhparoiUNR@*kycGphb?up$dR1x|Zx@s?H z|HytBCId@=Ejq|JBseTN$~ZoBTy~OmN^<(@tmvHTyyc?i^2}u)t_{zHpSl{mzI4NJ zvvI3+Cv%6pw;&i1{)m1L9*=O3kDgMViJqHY8eT7u5Tqrt#+w41Om+EO^116X=X=#R z&G);Xkzct#slU5_R{(dw{eZu3G)xN9#%bK zeiZp=C(%0bebVKmXOHn7`#k=bteISs!k!YBa+K8u(Eu!zGNF^x93RYiT%7)lRyv93?r%i!PyKg++e0}Tq zcD~uVdGejfyP+1{mY!CP){Zunws-CF?M)pr9k1U@y|3+*=&b%A_Mxgvw5zgPw7arL ztf#71ytk%LvahcHN`K>k?7-VWrNOo#^`Q^L*N6K@3`fRBEk-|%*^e!ayN+*7_)Z*7 z-k8Fiikv2yPMV>g$(-eyefd%BW5b-%T-PW4Pm}Y|`PI+J&qoV)z7T#%T4Y+xUlLw= zy{xj_w_?7suQQI`zxjUD4ns;?}XZGCo z4)-I!(|phSA@QUA!1!SC(C-NQDEXM{xb8&bWa`un++@8Du>3ruF9*&Az|RAaprfIm zzo|k^4#04BZ2$aF{QoFM`zxUT4u6zH9a2a8P57Szr_HEi`yU~}=n(Ln`}wi`7T_B= zr3b8&M zygZahCC0`qD5raYL`U9M*v9jw0y~FjyolmEL)cwhvh&mV=$IJTSm@Xos1FN}qLZ;; z079(f^17I|p27-j;Q4$k5`_HY zLA8&MP%ZxN0>vPryLvb0<%O-S2lH$D+Z&<%N8%>`Qi_5!H{I%SiuTS`-_GFKQf4G_ z#5UBVM~He_yvdyu+H~c1ZpZ{*NaM#p%jw#NNpWqDZ6tnP6R%x++lb((gL0W+%zxt~ zHqYXn+s!*X>b|+Mcd2IQnbfg#fR7Z>cHR&ECE!wqId5=7dJeA^L!syWRcYHc=<{N2 zU6luss=5>45(QcvZ$6@ygAj|V=6+-8`*i-&VOrysy9Ifu^Gv-;?RBByMz`qA7`#>) z`T(k`@%JOxODTFH_a*8$yZygDtYVNJtNFn#;NwD4BNKxm>{m+y#BXO3?OmBQJZkI%C{kwIlP!Eoh9()D+6$dc;Ky*@ zeMc(K1F>1-aL=u(2M5m6TK>zuh>;&VZTgEoZw|Mu3(d8hy*_027Oi1x`Hb>?3#k?C zh-AE)k6ju)!*wwU*1XwLLO)H1zl3!2lX-(Op{HO$t(ox9xBKrBJ4V(jJ+tjg5v4Ln z2HbX+PdsJJ1?b< zN0L=p+niy}BUJ|p}YKj{^#xWr$rB*N$xL*pYzcw9&oV7 z%BF6&j>5h!j9W*qETFdXqk>{iXJiDME^ zqytq<5faXtOxJ^Ze1XDgULD^DdFR$gh{MvvwoM5p@jCYw#2#nXt#OLIG9xN7g9kdM~~N!OoRoG0^- zR$l!0GCW$*_JYUMc+|QgC$y^ULZpgDw!?12`@gZ`;4c@-1cM!WaE^xL&W6Pd94Qx1 z^cc5?SR7stI9#avcKzBmN((TcZzGP)Uy!Z^G}fGO^)C5+4t;e_V1$R((^4K_W8C}@ zj=qKv4xY6t2&uY)XkC5zNg5Hc5E^&JhuyW<(Y@Qn7u{KzH%k;N+y693u%(8FXd{T# zzNVslxEt`;Q8R;L)Oq#X+qwTfejyJaWbZZExNZ@2J$0!EI>7R}_)<^b<-xv^OWTKq z1m)%(leTz2p1ydu&ro%X>bDzLhgYvsi$##MbF;dBeeOx#9vM&RL@ybmRbd zF0(58@7z5{jfbn@Puf2eR|gj&M~DXwxg@%LYETW6^EV?{esT-BVT{@46sYeYmLO7* z)}I&(x_(fhxq*9OCZv9a;_*{uE#@;6b+5gZkb$Gj@L3Lw6u-SZuHK&1{!#hSx-t0_ z=zpdiM!dJ*{?T7dd_LryD>S$%Ut(8ahoH*(Q*cwi@weE48$Zj>MZazx@TD4AY+{&a zc=Z~gUkraCGIhE2U@N0nvzdp+mPXsaWP3#CNv`M{fY7yg^L^*4<=6V{LD;BefBW5q zq)w^IUV`oWlTBH?VrgnpMq2aH%F|bNY|H5n!775YSC6zF!tF=fshjsZ&14$*4)vu! zXxx1^Tbg*;0=8_EP$ELGAxwD0!c<)&5Hj;2wj zm%$yApw#T$#wuPX#-QZ+^w;HuRTB#gBCmqIhkGKg8I%|nLopAyN|ZjwEaoO@Mb18U zU^7Q`1g+)Me$LuSryqkB5fL)c>(O4Hmpgsi6Ws`Q28W-*f0^Q^MgG%77JM$@K)_>F zn7}E(qGV|LJ!Z-WONF@%-5}#rkT9$_!L1XP6Ld0CMn$XpQm+rL)mgbDDrB)MWs#30 z6gIJX&re^I6Nejbf0urk?S%?dol_#)PyB-|meO&Ij-IB23iEtpj5Fy}3(LTxw!!G@ z!eSYkuATRmru(sJFl+~|RH;RY=tM>d+Pr;mJ@zQHsdxFPfVJQVCvT&_AjT?PRvBp) zIjnTz|IENpNj1!H>Gg@M(#h=0!|&NbEipdZ_$<>Mh6W)@Rz6pqpIoQG3YRJi7 zk7ba+s(;h)dz29%(@qgUfK-uZnNvkB6n2(zyLnQHCp^$4e_~7}LdZott%gvDUsn=I zUhvLakIEoUjS(WHmXFgy9#Uy~rm*KuT#3B%XqMHK_T&ej%FwOoOC~S`XqPt} z^@+2xOH2INX_PM9Eq3fV@h^5sdA4=`>b<Xt8#uG+CqiG4`nZLC_cA~e;YBRES#g1%0RB!#cJJusKLn4p6r&3 zH_`iu)`@<7(Vs4KFIP{)$)1NlQ7yxvB5TynVU<<1TStOJdo$da+4K}x4EzCQn-TRe z-=7!Gq$i~2W|PPtzHkqp#gsAF|3253K-SkdU!)|`q%L)C1>fr!7D=HfWGMKqHxwN( zPBJj8+Y>joCemqpC)Oi&LevT8OBIi9E0gLQqsjsDmEK2sf@}&xhSMs7LfXPy4D3og zSnWGddKE!0+R|Im@FxS+9n5N+Cmo(FZwiKj>S`bCemqpkF-q(l^1G73b$wA?^<{E< zWi|_rLS_iv;l*n76r1S4A>N3G=3&5gKGoM;R^nf}N^>P)9w`|75y{ymvS72DLdz%7-W zOC_mJy{<{BdQzlH8INp#uzwF%dBv#;VQv&!*eitQrR-m7mW`l|xzZx9{=`u^(h*NM zDx~C!_$_Y{uIJaZD{)okWEZ$uvn&Q$654V561Uk^S5)qIF~81?&K7(l54rYs*JGGe zzhK9Ojk0hoFFni9@KdejR(pbgNTu#uQrqWk?_Cuu*C>n$@?zu!hUph&I!2x!yresp zoS5aaSPX8jZn$SG`ts!H!3g`kJBRWld>mIoGV$B)_|t!1hYpuE!sQn_MdG5#<8Q}& zX~#+V9B)BfrTsiH+Y@gut`Xz1OG{EA{m?OqlJ0AJ^4AzP!-Lizqe)4EEYGLr)SJUsPH zQ{MM%7nVC8rOert>EA|?4b#S|NPmbjl*l@K zz#maKIuI7d>yoP+^yw?&Eb-~om-6N+gj5$&$dsNPxgk?nKG8_bm3~&FB>$WkDX)r$ z(d+k^vRExox9KYf8y=0;;f;OPB&Gyxp;na^V~El>!bWSAtkkil(cBK3iMO48Q-!Iq zws?1uSnD~gS4zh|Mv6f1zA*H@^uk`fY2n$~V**_IoINI>jH+*4aUWkX&E=CIi_8vJ zh?A|1=-Rfmxa_|q>FrGMHbK@tprSSATB3xySO(sccSc;yF2h_)W!ys@;T&%jNlw0r zvvo%EJu8h~5mwDSezaw_=oz6NWG8lGugk5P;bXkQ)-*o4QK87;xRWbys28E^4j4Z-$h*OJU{Q`FOS$A6=9r6QalIxEg0)(3r(% z5rDIYW^viXo|=vD#GE97QeF7@jdXnxiy|8A@k-Ol_)VsFyzofO0Z?~m0N zL>C3@lmiPL3JM`d(hICSi5qanw$f`p9`elY7#ZR{PEQ9a8yLT^5i~;M3&;X)Npx+D z(>9bKNmpkY;Z}QDQi3<_Ztxk}2^G^4KTo}y>2DU_+$QK!IJ#$uB<;xiyqWMB3ux0# zR8zr}B%V*3!?0K|X7-jssS(t;OLrU30oX@hZ7gQ7kIq^M<+w z(cWJ7i8gl$s_;K3E9t5Qs(mWYZ-ggi!>?H_^KCyW-qzx}`ccXIR__U3WZNrOBjPuO zV?!(HVam!%21fO7xHCOV;PIjN=lbt*-JrOwZ(26~9?r^+_NpaUFP;Ybjkci9;x z)U!=9yH(?E%+oS@nH?E_Y)Y^2kdY_Szl`Yne4sDshKdvqy_d>*JWW>E(`f55FJCsZ z#hP$vs2+Ev^;C0)8henLT!*n_NzjxWrb>(vw`hua?Vg@VcweEqcr3bxB$l5K&6 z_nK&C`(QET4PRJro?RE5&V)~mJke5Od#cxA6Bp@BdjXn}dKdF?rQa{J5o zE_-!)*)gIW+w@zXD_^>FM((0DYnKJ+_NWuFy`Q3>GqabZ;4Ws(8e>ejP+$LZBZiZ=e-*B%}dmjK1G=0Do5@Q<}q5#PsH!3 zMm4gmo8qT4vgfsUy2VT0tt_tj=nQ_=+ZOZdyE0hhhb3?nWZ^raELNyl>2?%-CvV60 zOO%|x(KhF$ss)YlV!xXj*^5uq%?hU^X9>)FQulgRi%UC9@w%T(hAvgPcZ8J=W#lNN zyDd-OSy84_6u>W;dR*LE)PDc__Y67x6KPlVM^{o_;Kw-)Y0-6;z$(9Ql=EG=>#=gB z?ym1(-v@;We#ti@t?3b>X9C%e@Z|y2 zV}&wp(Ry#M*2%F*3g-IOpmL!+SXMwB)!VTfh67yakm%kL&LthTblPN z5H~T=TjBSN;}*k%S}v~vzUhJ8#0;JaCHxEw%)BaXFRQF<80GCVq5 zXukHS(1`!tTK9Z(8NOfAN=<2^@i&Oo^S*Mi=?^V5thGOAdGX4{52_h_szvPyo|*jU zfm==X(v8*PaWK)3?chfVep0zO*=`iJ4aeod%ILTEs3{Bg;q2_pWv`acOefnIbnQc|YV>)q}Pn8Z5)r)T! z$qe9BYYuPgUj+FIFreM*jIFl&mWvgkd}A_{?cro;z}ndBy{}dvQKtUF)9DAj?yZZ} zcH93q5k9MSu*266%eQxxh97#EM!9Kw3{&ui|UQH@0g*B&e|3{ek1B9+WoMM zx(Vvy_oUcwOuBBN+@qwq?-C_Lz!-OS6h{Oi%F)+<%-$fn%*2ep)i&tb;8c-k^~$cQ zY0P^1=7;Rp-;P=Rz`aiYul>{5Dba<*Ubt_sijaxD@JJ(+k9fXA_F*v6uD2~Mqd35v zRe3u7O1fRgM1#Zqk9&@RMa8x`pS1GYYo(g2ealVx4{si(=cBc+A+2WdVJA$b-J_nC zO)&}6loqPr$9l;4pG183=}J7fF?O5jX1CPs(9fx%tO*Fm4glaeu|f``42i4 zPuG?!k9DRj#@big9N#BSHVGPi6KyA(9*f$KEFC(|8JA+1)9I?EV_x+k7Wwjl>SNZ| zk|8VaE2ODq4r(pqZJ&E7EV2wHx>GWyzdw+M70w(MeWAt7p&hJqzEIro?a62GBd>4o zaC`f%V^x?LJSYs_>bjsYF-i7VhjZ(rS|zEwJE!1morF+ZrSC*nP4QGv!}rLQ-2Q4h zI_(nM*TZ&>aQ!{i>e?iul#i>|+QiCi9=7{deq8M5=hJHy<+UNyd2?&Q+T>M8V6N#1 z0iji9^QeW8W(BKDQjJgwh>_41 z+^!efVDNC1c>_!1DEJFOmM1(W=gTTv;7V#?)qt#kboYI+YrcNq(<4}}!~xNMePSv( zVypPR@C@IBCd?YI=)v-o=KfCVa+i5~`uk~O znZ8%@$E0_Ss$2_idkc57aaV`2s(rx*H)vhN{Hihr`|22n-B2Nwz8q5>#;ufZ%@m)k zn{RYCgul@IQ$zXP>1*AWdpk%A-}{8hJ9cE#eWU#(oKqvXY%=ip2X>zRlGyskgx#d3 zIG(DVKKXTPr#kANDfBPla?eLRP}A)-Dq#FcBJPD$gkO zyq}@d-dYm^f1wM)-jaVJBk0;`|2o9w`b+&CZBqSOxKry(m{Flw|AW=tLRAyq52{?2 zX78i9RwHvKlM9L4S_ZDVn~r{f^9|uY-(yn^uN3BI?4+L8Ear6#wU;5ND)4Zk zg}6t4YORZo+`60Y1CA7DqgjK>$`+gfZ2*V<|`DOcqL+W_Y| zIUpQr6{Dkk+2~*&(&mdC(z=CR5GwdQT+$hLR=s8$&2}b(_|^$r-8{`F^P@R*E~V|; zjPkt>d*&IVQikmL+|^>-V2t#TC9N-B$QU8g2iZu@^0`uWC%rv^!yb z8>?na`z-ByxA@?G5cKhgPk$nPhJ#bMN|m!%Ql`bDCl~L&N-}G&79Gt>JS;JYW~s^d zIUsr%6n4QfEOz23&93SBes-M-#hdC9rrPI05gS)k)P~clj^C5+gzu~E9FsNLz6%Zi zjCWV~WtKSPWs&5ak|1pI*;M@?%M@|K)f269k?U6nJk5q(Waqz}JOICg&U@}^N5hf@ z=jHe03^`(%A?$|$?ZeMlxv}q`C21EN=p6Ny&A4jkznE!9=od8URTcQ<*Q?|^w-54{ zI~!7)d{2A1p~4SAK2h$xMcOruV8&lde84M$K^o%(dAL=>$BcQ$NAIZp9sz2Z1|qVBJX9w z`ef*Q_X91dSc=nlZ;k7j-=-=_a>%PKsx5fk>39ov?_^cF)K*camxZ}Rs)NmxlvVVp zMWFVVx?_3QsfGu&SR;;>9aIB7)$*OKrNw!c=Jd&?Lz3}79u6^$<_`N&MyFKF+EzPZ zeJXC|oalG=-kW)?N1r+3%JfTNOyRO$ay1U}>mDhA>T)=xfRhn$mo_vw89vhKCy()X3z;}!3LNJeSW>Ea# z6*u3+nFwScRk36K5S&{wC0aIU;i*_qbmJUj^t*X|bRMX8vf}#+nDAx1w=Zz6=xZK3 zYS0UGM;lf0dwvlrrLlP{k-#B;#oe+*=TRBYGfaU@^ff!?An(QYIo<}WPjYQayOe0b zxtC>^VTe1o-%V(;)@P)cxbz5!(DJA~)gxdarZJj(+(mN=2&`+hO;xdWjyrx}Ryuyz zHl^z-*B|+rrm)by;GOPf)q93FQiWw`uZl>&PVt$yQM%mYd^%~d!egUUSJ}O50=3&2 z*T*WC<`26&&Y==%R1PgrjrT2nf4Sv{ADaVL%}SB$F_#8B7|piGD+Ra+&&+kBY$8oZ9&_o=0OH;Rk%}E83T`HtEn3ASNwg7dLk~fk`t9rANu0j7`G9AH6jt(FKvnl1UYcKGPhpu zTwX4jC@L}q>LMlvD>34*Gz$&BqsOb^0dry-CYK|(xb1HXyRy@qK+C0x^xClTE60bU zc{oKc>gTh+XMaY%evEr$(a=a6u=?WJ^Y(~Sz{)z9seT8Ld zH2M;Al5*DWVM+&?yZB)^Cl(El4j4Sre1NON&zd!qXixH{#Wvl$i=yJ)u~D?8j|AC> zkj_e>0jAJXd;X7J)TxEVK`L@^*U|$e&y@>-37$^0TRn_2R4J~S$ibx}yC5$D2dFGmkUT29R zk-)Ry&Y=M`0sECEe8|0s@K0M)gtf$aSVcBbMR|u03~`s6KXd6ZXi=5QT%$NhevWa$ zssu=RKy}mO*|Y**;Gi;5o&nI}xk^zU;$T-P%Ld#nd4usO$Y$T*jab4*24XsY9bN|` z8{9i^k_lrrNyF-?noJ?i=^U1O{0rB&5-q;2>(Qf+s7;v+-<5*u3AnVC$a@o7EcCjX z4h_|tk;LK1!LN;M-Fd&xTIM#P>O433J%nTFm7(tk`|y`!^{J~Rbse&}q7UIowhsge z$y6D0>T+e@n6F3}CC57v){XDv_i-2w`H3bCNw7rl4hH5eQ{mmbbXm;!`&;vrIK5Ig znI5~DECQ^?=R>#Bj0)bGq}+P%WEGr3Kkz0F<~3xe=*s8A6kh1tYH~|q;BkbaUDvqt z%WIRV!n<9!DEEnUI2PVTyD|_I6k?&Nhew%Pr+uQ+wWH^CQ7lO2{cLod@Od#g9cG!T zcbrbqjWkF|q=_D8R3>>tzd#g0VT(zQ+;ED;r5hLAV9#m9>~Y@fWMNE}E~Jj@I5yZk zUB$s-w;(-meo?5pA==v9pl4?oCz|I-;Zh1i>$b{ffkQeemSJM)BQCjb6&e7XyRKV( zDF#LP#Tp{lZ|F2d0wiI1vupQWsk7VImi2r)1$y6`8hF1qo)+%DorhCZs|yL2>#A6L z5a*k^T=mfr5()36w3btfk1x0K^j>FS&41J zEN9$nRY{g3x3{b-zbCM=xtIe1GxCp5^ozq;Q(3oji(;nxGdu34g1yhBi!lOffWQ^w zbzR{e;R#{*MXomcb{&EJATA}D*cEuOL>2*kVBKjutM?WV(FdulCdH41Sz4&9>W+*- zl1p6Vm3CCJ6vbtL?nP1tEmVZ|z%shATxZeZWco01h@gd-n0_0_<*Laa?WM zzV@IOQVOcR(oe@_X2^pFa`o63w{3b6)s9;{k=Nw0mv@4VVe4-(7w&4X)O&y^=D}DO z16?ve0$2!-zbXQ(Y;8?vik^tAQxNJlkl@Oqfc(Z251QjEK+~U#|C)k-Q++tF& z#~BgDOZ)U24n0n@XrWXo117DHdhS6sJQ?12>NBG3v>u&k02)g)rz>yEq>sDKSrk&*ab*2J}uprW!HxnP**$xQlMc{X9E)t2+UR(5cg&UO`6spKnP8< zmb8sm55xfiK>)Gl0JN}VZpg7z#Kh~9P9lC$%;^$H9D0ORts*rs1{I~WBq7THKs{lB zh~sf}LD&mbR1g&OekE=VsR68gxEpvd*$~}AINjtX;16sl(njd*`q;*hB!C7iKqP_> z0Ux>edo4hQ24lXInw5ZoiZeEC&r$&81lb9_z-WJ#AN{j7PoeFq?yKsFERG-o2)P6< zB?z5iK-;~-&RDXg@T6q2rHRLi=tXYZ*wG>hMGQ&um|tk;6C7{0fx_-ik2)&BjbJOg0Y6W;Xl6mk<#q^yXA7%y8pSFqBe`MFYB6V2TF{fN)n*OI zbyY_^z~gyCx`9>IB+i(I{v}aHTtAQ=l#tro-~AFvFR03}{Cd zT$P#aSX4Jl2CO;mSRmoHv$jQ7YFV9EA3MUaYiitGTj>A_-vu!wjJb*C3X#wC@Og1Y z;y$%ZSx<_wRzgR&7h&v~8o}YIO)ECFgn7FK48-%3iu(j<5@!+c$uaFb&)ehY#1W)N z*~|R2;rCL15Y;VZq|OWQuefseY0HA73`|JyG0X1o^5EFUT+XMSpo6cp5)YUrc)H5W zSz-la;#3l2?>fgmMn?t@G70vPp!e!OYs584ca?*~!s*MdAh{%8F4_v^%-d=+H{NP-WDJ{&P^N#{O3 z8vUAaUPPP+Pw?|Pd1_BDJ^}FrAG8?<>^hGl!9FAr_8kcK5zKh;eg-?Z<@{J>jQg^0 zeCseFSHK7!!7~HdI{Wx$KN049PmaEN>%iBL1MC_B_C}suC{qDRBiLKwBgmODd7mB} zN5lX=&?W)%0!(|)4+G-4Z9dx*3>f*9?W_Z)oV7B{#z_!;qfI^94LyT~kDH&j-{<=f zwM5iRPlWsb0LR_0FVMgpKojhliSn2+=Lg9Cf$boDq`)5XbROOaBVX>PRg8!+I*+&6 z=fwytA%iH5B|=oyp)Vg$R>VC)mn8~8B#@%kBVPXiaYurXw*@2F)l8`*O=sl`I~~t& z8q{so(sJlWu->^guinhEzQqF{qSs?B7 zY0I^ZoWGmghSGSht3>Xwt0w*DRduny?+(xq1mPr3r~Vh7E!=*gLmkc{{YczVwYT~?N;8=ecOJ{;=sMS?e0?G zA#FiY4^SL>Po-V?E7eof_w)<4)g7(E%jzZtl_5->Cz}93@s2++(7%;EMBV8Co$~%3 z+1dq}{6NNPj9PPz6^|f)WAxpXKbXBM)9l`6C_CG1r7g8Bs-Z$M(_l9{TBR43AeLn? z5B(=+y4(7)Gn&(Jur}YfveZSg+N-guti6=018Rin1RYd@eH+#Hzm>g0uS)eB0&Q)5 zy{lf~*eO+^%Ehd~l&C^W0t(L_qxpG%CVH9m-KO8acHC{PH&sp{yRTSGmb_RH#6bi> z;DR8J*+}DawEUJAZMocUd-gu#YqQ+2!)3MF)YMshcRdzX^w{C5!<|n#ppQw}+ivpR zw%^e1+Oo)s+-L`J2^y+pNC6-@eniJ@T zuJv8R;bp4S$p?mG%$fa*{{W0%akagd(EU=)&B03bqusZ#EmCxRX<%}JC3T76SJ$>) zsNS)$^?ly&W+-Y!7B2g0Hueq4bKFOvs;b28WG+^+x55?8eyM$X&DO@7eG#hL+TrT0 zeKTin*6eF$D2???ZLtur1IHEOuE{CZLX zqL*5`wsXK5klA4;tl-46)uCh1kic=Z-it?Ui-eF(WEHh!fO2EEz&Rj*>~T@bMs?x} z)?-ry*JJ9yK^K*+Yk@U)0I)L%<8e|kG$^dj_hKf z*G|*9W)u9jFKa3(2PAkTlA-So0Wt!eO2r1;+fgcDLWpQ=GVTaAZZ@EsMJ1$l2`yl) zfRE}ed4)5~fLK8(O$ruVkmSe++nbS9&xyfMt4M`)l^_CMhF9zgk@Ouvu@$mOfLU(3 zjUXPvZY>~o!tmR6+^t8v=wHBKx5!^I!m8~@_%O9pjG}kjs?j2?ks)WHEgy$f7HgG{ zVzrkHASeu^O0-mJvj#g`Y&rAFy6t6HUR}mT3k9WI6)h?b=V#wiwLQz9%0*_#xMCRK zF|JewXYK-;jCi*Dkl@=|T>&Z~yOynu0%S1l;sY2Ez{LKi)BB1}8`|zVh_ayc(%W_s z$*gp;OE1zl5PAt7o_4#Os=TW5AmnLAvqAw?s?zH0K_Dl>M7V2MP03Y#Ai*C>q8O8- z8(E)}6)18Csu#t$3dgaKaMvV*CRY+T77A!^leIFZ~_kr6(gUfUOGWh~94Ft-Nnqks+y&L%-K zHG)bxJXu}z#_68OXafSPv;bJ3;|y%Eu~LBwxA7{VWQ?jXreIt6XM9|NI@|)R0TB#Z zXN`j^Fk2E_u!4kSClE=+pcR7BtQZmu@N=xQZSMfj^#_e(PD)^Dp)w}h z3xbJj)<~25wPvxoXqBq5W-*|Z1TvPo%!W$PR1uRXv8(O@^Hv-fAjt$31TdN&z)kjB zY6V?qwh_JBqOA$1n79FtXRk&u!2>A_NxL9F{FY)1pfeXT}fyTg=fk{Pa9WC)lE2+(q)xV zLp=OscF~tSf)!G+h~QRO;4z3KMl9?Ijz=pTnE0j|KmabJKwu-LGHTf45gk=lbciY< zHJU&{+DmJEMu3{1H5x=~I*2-x&yCEW32261VkDm#>XK#tHj|SX;quofEPbTp2q&3R z8G%F6Ll8u8ZZ(5v{{VMu2#!&kv5ru2jCA2v<|Y`hg9I}OVhDmHXk$X8uOdeqir5a_ zxMTnTbQLRz5rh;&(-Vl9;@d14GqbZ!ptX&YF$Y4#$qf>+aUyuESmm(<0(t8)N#;o` zNn<8;nF28!q@Tb0m(%|MEdKz|H(&n2x~{t^+u(ba*KJ+;-52IYr|O0pU<(rf#-mA( zyNyTeo4?E-mj3`P+qv{=ENb4+^&*EvTNy`k#4J@ANyHe)4rC4~8;Z)CDoYoZsbYpk z)6GaeW5ff-{{VZo+cWKUs;z4dRjar~E#w*4DE5)W#+-VmtNvH~vAW-ScFKFNQp^y! zl~EzBbxyWQgSx27~bAK3OEmg@Y!=>DVXH*R<4$KGw4>-LFtTWacUt+}GsSgnpAJ~kk727vl! zrh0Fx?Q7d_H$IVHl2 z`nH~$yCYq@EB5v$l9bL;zd^(*~8*xFf5#?l0OZ;|C-WUYm+9GUH@m%?Zcf6juKxgV_w5}k+uAeU zZJTdu*okV~Dt)c5P_*UwYhW6heD#+rs&BP>71{JfX?WR- z0ZQhwc=b@-u{X>nMYKd{+r4HZfIgz>m$ z0LIR>P_wS|TSD4^>RCm0tEhl}wQx)k#S|kPEVFI|6wLQ~F5?nmNJ~IgV~a2`pw%6I z0k_G>)@;h)6;Q(zidb1>n(J+HC}l!eC7BS2)GG(EY*jziW`s2=!DU;TBDRLM#0>83 zT1mk7PV4aWh0ubBQ){$iix3HgJKOWgDKnraBrReo1|u@nJk%wW6`gVmz1dKR+mFEp zq)vx(Yp9_bC#BR_q-l#mBx41aYT3m!!x93ujJtfvZb?~f!a6pi1Fy?F;cI75EE7z1 z8)~fpYDoHyL%o4&74-%L5-#mJ3&m~$BtWCohJI0Bob(0Jxp?qKui+Ebp7(m z>(kR6MoNj}ZDp!Etdu!38a+>Ky!vzsJ1dZKNe%=SRH>L07O*;jHLi8ZGxVHV6`34J zpgp{lfNL`#4q`QcPKU$D_>Fvjx47L|^^{p^cB==tf~r>Rqg*fPSc$(#npP24(o7?3L|ur^C^1}A7f=xmQHG=44jM#DM*WJ9ZjoN+n&vi zG=bYvBooX@0Z5-wzO*dV1EB;-#F3{s)2b#pbJL49V=Hc|)dtNJHD2KYS@dhVe^_@!xjDl~rkLFym8RwVP%4xo-JEu%A5GV;pms#3?nRqa-0 zIx2>4U;^}|e-`S^t`Vy}DPBMhOn@??o=jH}$V=|3{#%neTB+%O7%q`;Nre7MGXWSI7zXWn2*@!*sYNu4y-L7%-;`_vv_aZ@IZS(PK@I_f-* zq)6~2a^Y%SDpw2#fM8@W9HbpV@ZseAO_BDtIOKfW5>`&Qk~wfPGXM{;2m{;z0C^AX z@6^9$#8nPY&aT8%0a={cTmWJUl3*S$+c3p8)soZjpscPb>@#R6phr~ckeeu^GLvDn z$1+q`)gxR`8u0Ky%Zy0jDz32g3T-1!ky<(nK=1=MLRaRHz!3+7zBa*IyFil+T!H{u z)P}{?O2{U+A1@t>>BB23t&V|IhWdFPSk}x4B5=qyk`D;Lf48ufAG*gtPn5tO*pCCn zfa)9o-qW@ZmnKO($vny8nu3niZW#xHure7(AV-+jgRd}0*x5+;9GZOc zY36uRx)rYh>`&Yu!>2A>Jy?#@G?Cy)B+PlqCV9!8e04E8&)cB?03Zk0KUnFJ5(tr@ z6XFkn9vnSrF`$LTK2*aHFqtEvRsaq5E$tFW9>^wq_#2v7_W@EQ=nCm0 z$g+h-BT|TqrX!8LDuJt7@Nj4904a>1h=-!93_&C?m~AZd@JiP9yR!`)yNz2FC&dSC zKnKI@jr|IPwRvDhy(reb=CEgxy2~CBCC_Zn1Bl=zwBV#?(9 z8ChppWlB`JpPt5~J+IB#?d6!px)=gfz;6(OMRkv20|1$3(33MitvlMRE4j+1Q=!GF z?&3fqH5WRx&XEvA@!M4bq{vn|iq(Yy(_f8PZK(u2of-(sP5x4BuuzHo71LfM%mbaL z0P)gAHJAsA=vB!UqJ~K%oGPq2{var=kAZB-(V%*NXya8SCO#wE4Gswht(o5@@fTWR zNR72AQC`zqipeO5;TIM8iDa!qmM2*$9Bt9HbhA9X-V|j6PlXgjYZ7_seUEzwjNiaDHB*!!R74Nt7t<8y0mn&1SL5@pfYgOSL{9n@ECTWA-iPYm zgXxHF^lP`RyGB2X+1S3dbAA_UGws((?XI}~5vzB$R@s$N#eS{oUy{EnCg*Fj^#|DP zw!6>7ZTFiRs;v5U^LVMbu)XhTc**Izb`_TD6;KoT-_E(KFRl9p|*XwUF%+xQg3djw^atLS|9UQsQz=hn}7J;(M=njlYL9KdyLEN8j4lX z!P$`ei?3EtHvP?~QQib^%qQ0UW{*+z7Tgv)njK!7)qrZOq^u~Zswiu$1??nOQ3@3w zuv6<>zh2*Ltgq4iSzY}B&n?G?m}m6D)?%$KQVq}_3ujCdXJ~= zsPz4lA6eY(e;)fn_Knx6ZZ|hyw4mKsHP&vbz1HfqT5GPoO}u)Ao|&-pG}||%?`eJL z-LL&t-%=a>y4|vRJIqeqcD2`SE7@Ag55y(UV>15FedZw$w!E|i`+v)g#nveS40|U! zP%QYpo!_RQ5>5(ZCMfJRK%j%*>_Z;Xe)XYI*r3z|W91`at2>x^16)}d(UH8LD(nDq zI1?~boz;xEtp^v>6O)o?#B(CVS1#IinK3imthU>B0h>16?0i5uFt5wFDqiC$AOLhH zN!;!mN~^3mpP52j_F_5BLWWibC7>=`_@#Ic1KmL@qa z)G6*8#Xy}Dxs1A+1~r2=G0^}ss<0a%H1D)5_$&q%9~=s>Ac;Ei96hRj5&<7D$hcBR zFdw$%e8SFviT>TY&EH1AJ%}7ZgH>wo&awzeV1gy4TO0(G7AaCzb?|J8iqC+skYPQ? zksNN=8A^{a$;LG?ddYz3qWX(4&}KZE0JlZWS1%5##nL=TN|{~YN`?Xn(~neM&^ztE z5m_)?mt=7;KaTaB(42-P6kfltY9xBGgZMb?? z$6lbK+SQ$sKbR_JRA3;IL=JJYu&j5`G7l0OU(-OxDAyMJcAY%6;<%189wR?7tv;kXra`y1*zb#;q-~e(1 z4*=nBS}^eiN4JVX zf9o!?qv23g0Kfs1bxyOi2y~#FJYWzP6F(AS z0KuhT4K(7#tU!Dx+uO`1{v6sp{_oUp4K;$nLs=srqQGj)P(rh+n#%}cqY`2`MX<`Q z2VW9|m12343ldn#G65t21JoGh+{`q?DuGg>sUHfcrn!jE5uQ=SdA5kz0pa|$stEB@ zTB;Q?r9=_O;#sG;n@=J`t+YAtATqs(MuS-&DdNT?hh_~R!2}Y+5+JJN%*9lNEX0sW zJUdhdIc5L>VA58mYQ~Tdg;yveAf@E%#WbLb>m;c1CsuFu6RAAUj~j~i+AXt}@pRX7 z08cgwsO+n%fv6hsw)EOkYj%W5JzW+8zGV$>VwEQXhY|<^4)WnUlIr{ns->*2$0mrcP83wV&q%4h!TF!o7^JXRfKBZnTw9zOml zw2!G;l>`zxO5#+0Urs5Ry|6}rLzih z+U?f<;-=J9V}H$Tw(XgoWd&9$lm7rPkpPf=M{T!om+l;r#7M-YN)&@UjYP@%YF)%!||8p~Ma-Ht?J0O{9YcQtprHX|H}mI-Q=2Tzx5i$Z?xtY;!Ps5=I@ zDPG|Ox=N@GS)Cde1C)bX5%1fj#M!p1b4`kekXqAjtymm@cBPo<66RFvKAy4|)3{qn zGbNUUs~~yxG8S-5Hb9dqCuv=5Rcf}@1bjeT=EJDQO+N(&KuVs(%!QZ$4S{<= z*6XT@kW^ZwURE(?ks$9{;vMa+)=bIH$8fE$!hwNbiXDC&Obw;Fv97#W7>78O1(ZZ$ z2*fD@R52Qr;Z(G>Z0xJ94$Zkuz%Q;#jsal|F@_^Tt-D0b)|J;?S;2D5S+_P4G>68O zPyi}c&Uur;qKIAA3p=#O`;@mD{+nHf*(2OE%E%ud;_-$BTBt2SNgtB#Qzd1n)N&T$eu6 zW-11vM&8zcP`_?BkYS1lTw#bL1TBwO4c^wpvDRP=f;%W^48RfqETM>2kO=~RyDIFG zF34jB49<{z4Dvi~UajumwL`r&D-nu1*K3f=rY5wi%N4l;UP@#R8*NXi2CAV(;>Qg( zGNQtpOiK$8g|INmfly*rYf2!g3qpia(yWH%tOW<4*EVDD#GW?owcJ!T%#|`?Km~4M zl@%IDvB6Y%)Tve45H6Qrq)dPxT?s0}4zjEwRDc6+kOOkm2{0PQscuzP$qymS#Vnw&RwNs zMRj@@^xDNxuGedJ`pa6HO=89^nJ%?0j^$l)c2spzbwOmwU`u+Q@A0BHCiqpXAgnsZ z*;5h%uFSRXSU|b8>|0SKw)@)>;P)e14Qi=sH7qwZJ!7PO}n>nTE%D=*xyKk zaAfNlF=k`4^#x)~$}3g`)nJx1Hs>lNy9ty1Hid#%Rlii4I4&$wW!CjhgPGch~Oj_eJ^ zTY}x()ndhAfK~uORje&yb;U%IcwLvL(}fulNhGr|)RtqbG(eJcPyo;Y!5%y~@m_w- zCtoc!_iOqD`2PU(=l)~#6XC%pkp9V^0s;4)Uw?<_$+TIC_UWg;QKz(d@P9ynPN03K zKt1Qff&tVRKF$Zb{@>-sKQvF+c^|ik9QcrQ;$%bv_8kHD6QJ|`1bFa67$C>n zl20N1x-5T%T}k%>4+I!=UCoYM^06%3(_mOVaEOk_Ed#I$37!#9{ZVC@;#^y0?ftwa-?#qqSp0BxEYh zWD-g7k_ZNyTk#0&iI%I|DDc(-4sV_vN2qi7WEw08M&BDw4svxWTy4>hC(gGW=9Bd+ zLLd@NL725-6gM)epNS~glLgLoD>Rm5E~T^t`c~r%VL`UJmB{4QAuuEdDk^PAtzeNP zacyRYz(UWy92N4i1HLnxg?`nPl&2J?8`-dMKX>}IuK!BJu@b*hOd ztW?MxZ8nzJt#vyLnZ~GCRl4hG{$n{5m9Iyw*Q-N|`hA$ULRewRCM+9MXb=Gg<6Wkq z0MpV51`6$0an-vHrH_oOR6sESm6TkrG!u@8E}iXrXJ)$Xv@kkNuUn%8JdpzxETcvT zPDC5)+W!FVTWMu@kUMV7bSzGxhLNFC2Q?tejk_;p2H>fENB~$td7O)bSfD{Qx}4-r zd*DaZEJ_CW`+D>S%cjji3|l}7ehk^D@+o7G_S6>y@4&;-aGPZZx}a<=Xb zWQfF4wJRF}M@x4;n|QL_lC-1>3ocAB%rTJWp|{1G%#xOpW=O}DkoQ`#VN(!5o6UP} zU-@Cb5<5k8BsgHJ(u@5ruu0Yf*S1p%bS*X640Tczj!FjUsgZ4#J1_<%TKme1yb;Q^ zF73#Lbvlzfi#H0aPjFx)0)p1SA)be7@i`J8f~<9(9;;g|(wemz27n8YN5jmlfhxe` z$Q}%V_`cep145#(%&^}(GqG1LehhSFTzD3ZXf>sBJ`vY-lB)o!g>_c`Jp}wsz4Z#p zrK?`zw8>^EuCe$`fF~~7ix{YuJ@|u(93$7$S+luMiLE~n{{YU^=1odeASA5T#z3Au zC913nDWf0Mm{IFwj9LDuo?&pKvj?#t1|$8A8sA?K){wQdlO(`(yf#;DB{Zz z$O4dxVC8_m>k5f5E-Ph4ZDM|%ZBZga8#hU%b{8x^iLSYoqyGR;49Mo~%Zpi;{{Zvt z-%)$d%-eF6qZR)E(#gmWLm(YRj|^#G6xs<*bIS_ktIP^R3qe99iz@&G1oY>_PWm-~ zjY0=P%k2id#7>RjsA0IF7@fttRSqXsxvEuc8X+oM1Dh25VTKV9Keb&|iFRNB_LBpR z_0(NE5nNQNG9{|qSGBc^@`pAq<~~ZvPGUyhi*ITOHU|t)s0Gw!z<*L;nB? zowXJqvS}L7R?D|-O~+gkv1C2_gJ`_R@ZcH|mK*FtxMWngwv6iUhl zEvbml0+o0*jH4*jx^fD|WsWP*ozlgG!ZQ5?U^U$btVl_1-saLu*WYN2OQ>tjYgGJZ zrK=6gY1?*P4~u$ri=u|esh+CixK?6OrfNPQ5Oo^SLzyjYnt))UDzd71-(Yp^)?*^9 zCs7*-)4a_i#aAX(QamjMX2mC^STLA8EzFH&W4V`XOBO)PE3JNaAvuXjU?dPn6z$He zLbEy?fgR_s8t39K+dTObh}21`=}zD`vKZzB0;eB{^M`@bz=p(Y$EW>GE_fsf0cR5i zKrSadXH*1@PLdUrjvC~kCd28kfR4lp!#U&U0vfd+A!UcrM{s=z4tPiWk1aCwOpfUBtFLFXc{%upHS1f=d10sjD)&9`V>Kv!K!1aY=Y z)w-Al#x(95lDuYQ=TON^7$rwg5?QT9v?9z&Q0!4aF{l|h*UOwtji&FlmeI{>~&2>v$9~1;*sH*p1!>H#pf~W*Kx`5#7cC6(yy0CJR5l?!Q#ShPG2VyHR z&{gJ6h5(aktyPXN=CN{z)>j(4hQbDxQs@DZ#_H$DEmf=*5K9Ft)-sQVm&Y34k!L~3 znA`3uq1~RRY&fI!H2jYg0$%Tp7p0*U+9NSN>w;yA9$9}sV?S~cmg zpemY-uTJ1*t4@Sw%TNZ%;}Le*EC87~F?@jKAO&A&IRne};DfIh?b})`05I?%GPno+ z@+tPj9SH;A);c(LuNR1$!NghOy z3G?A_(m6(v9HWI~(1OH9kXl0#?O;e_<0g6ViybOt4`)EGl!~p|<%3+6(5;WF+-gEcs!^h3f+oWsfrk?IJBy;}&5eM%YA7=qa!yw0m zsgd^`N0H^lA;gN2GYL{{RWjK=S@$>NVG%f)cvc5n=%F zfIuVL1c~;aJ{CtVUe9-z>_(>2zyXgKJdfyBBczf6^CBbB`v#|g zLDT!F6U&QiR2Y?G{4C7s?bGs?0g}QFELac(PaAb%(zKLmGFUfnAWRKGTVb>?;tb`+ z?u!_)X1UeA7-vNkkfTNHz*8R(P)Is)S*e0qT~2a|GE&e$9wm!bSHv0xp4jNlm1f5Qrt?X9-fYg8%#Sek6@5H$i>r?#_` z0CWUL6s>l2+EiA=6&4n$Zp9`GGNTOEB}gJPJZ@K{{Xwy)2wxA&rU1e zt>|`c;Z?yHmOPXmMClRWbU(4#jcn|-iwIaGBwShGk3U4MeC!`YC*Pm?zx=dXsm zwcrqBAK9_Jf!mkfu>h5C_dA~Q^$0pAOF{Ux9(;Z~YLyCWyVF{vjBs6-Y%+{QEP-!o zJ|62#24TS2)n#LCT2)e*A+4!5RPGzPH2@J%D_AU|=6f=SfxBJ0A{W1X3Z&Mio$H5S z_=D64J;een7h$&yiog- zWqrS>(zVw^QVQFEYTg)(LOL2)*4Y?wwxZj6mZfT?u?vv^0@$xg$=4B}O4SmfwEh?>85Y2F-GmK6>V50~iwUNdG^)an?;Nvu>pu1hoq<~q5W^A%Gq+n5cFyq- z%xhUorTo=QDb@;-vjh$n%N&+;W&(a?y5wZ!aSKw?`i*;;45yDz1%o}7E^s0PEi4cd zpm?>;M38$d3W9XsttgMUM^L)t3im4(6_^amS#irktY9*MzR$Q4nh#)K&^%M|VrZ|9SFNdQj05Fr5L13u| zUUe{hYus0iX%(HiJKX;O!`)LtB%Y@>JTK; zwkBXt@BeI`*F;fS` zNH9c#H3WhW>c9h2#_1#zQ(|LK%o){!pAx3K3v$s3)>kI$K<(DXMxPpF@vroN*H~(g zCsV<&EZqum{m@;NvOJ|$w;@!L#~%YDZ?!R-ZJy`w3aY7K_swsXoQTE=<7mKz7doot z)1!qd`uvTWK@xg|fejR}U=`^W0!$29g4PK>HZv$e=D-pNAZ^#@b&wA=B?Xu_?zvuT z;SkXrBhvo>?ato2OA!&7DnSByIKUA(5+k1$GuA)`(g!n*ZsAN1nb8Y{6QDZsmP7%y zRZtAGl2|h+8XDFIP&&?oQ8q1PoMXd67)r47RvL~+%n$BWXqY^1%OB@E6B=R}-Qgk% z$8o_c1%oz3a96w6h^XmL6JD)6R*Nptjx?8ZgVpRM+VX| zv$bLZNhAvpA?MBjSO-p!Icdh)rE~O%Ao4O5SD5)>SEJwQBY-yatdmAZZ*W6m(XhLdJzc0ssy10R|WY4W?5AhbVw$9EOl003HBD03bw& zf_PEj1b>M?Z$4*OfyfW;UFw%m+hbt2QS{9~wSoMKsFDwaM97dq(EiGn?(D%C3xa1= z3{l7ym*Q_? zFU;qqd`RFc4x*~u!O@gDojlQ%hwzYj9yA}adZo0t(chi-d%!5EEgL|h0n2!7scd2! zw!3A>q^$aO^1ZGdox&dCS`xCW52Lp_^e%Hmc)CDShq1bbn^^LvM2H3rxt7ULX6J^4$ z!mwaNDN>nJ$Wqe83FB{i?K7}%Qo(Q_D(%MB>cwWckjTX=Dggwk+y&vQSQ}d z$(F@n8wAL1)ya%h=2TLMO~4CY(q%ZMtES6I+gV)H*j$Wz!76OxyEe>i&4J1bT&|e6 zR_fN+2FlHym*7BM)hV;>S+`Urbf(ZR@<&z!wk!(S0WB_)$N*rZc(CE=iDPh820jkmPQ{pf(`fD2 z8Mp*MVbxvrDea34$m%F-$qOesVS(H4K=DXh85L0w5mFZ zP)rg=(O3GUF1;}3y6)s+Yr@nW(b1S>nF4m!vqfF@?oN?SO5NrjB&aIt6cXV`QLKSh z;9^?)L;y=IOWt%LM6gHGbb zbG2(LF&Md}h{%wCmv9HBmg-{>@htC=om;RNk~GLGFeMk8DF7PSPjz~fL5>jD5Ze}v zxqc~)=8#~{2CB=pkULK;)dIo{xIjY89Oaa&9YO$6x{UY;3_#;>DrOr+ETBebEUQ!! zHRk8I@!9}nt*VE+a>`3~bOTZ>BQ*ejRSGMN(Bs`Tr1eh%)c6T8?gW88N6dH`9v|D= z(5@?Ytsl7m00h0wPAADk2_joIUkw=r_7zu0u{7#6q-0%xrv4qWOAeMWhatLA9s26B zW^oTUrEt*>qRL6KHB>oxHa19Li(%F#YfASF<~%IUf)cWN)P@IG8|%AyUqj-^rb|TR z$aKk7K{4@rAQCq@Sbqsq-7N&3+BK_N00&dIWwS{I0aw*YBh$8420iR@f$);Gxf9DA zZBVVqxOI+@NH(#8t;?2whwdWD@MjQAXbzG=9C~Wn%D;$>RE7(xgRXAa^#+dmTt=80bRw!sU}lQft~30_?0-lM1CQ zYQz%~8xqoE5fiE4I)ewy5P8QV`patpn{imE$OOr;isA|Rt7m@T(-WLYI@8&*P%$e9 zKwG7V_K~3@n9#`Ma_oVtN*8oMgOSav01q3Hl*m5_GnY8sTXZk{!gQYJPf_v62s1h< z2jMVLRi4GPi3`Y*DBTt~_6FlEdKI14N#-694uC!7KH4ny1|!0?_Roj?5l0R5Z)01@*%S(1aA;@;7whsB1;Cq^DzF5nerwSiE6D-DFBFrSJFV&s|WgE*LN!xC2zn#f&qSc9fc zLx=HbY^Dze>ntk9+QiPK*;}@Kqy=F=DU~oxabD99dzA|a8h|nbtnv&pt;i?gwHkVi z8!ceWE4IK6tVRd91D;N`m4gNGEAp6!k+`iw>+ve;zz+~4ljSqw4;7fzNh8=uf=85% zJ=${NQ4|CM02%-XAUJy`>N3GTBp(8Kk*^;J{{Zn3_hP^JN08u#5)0&i)gPSO>%ihzH6vj!~yB2kQ~a1^|Nxk%P#@7(9#~EjAKuaKW3C5bcrW1LNxD&)Fl5 zvYl3^F22SfDLQkIA`YHf@n+eS6kx)9dX<;$10u>f1|;hwaeLTImJFZyXX^Yu2d4WM zs&p!OuC?yxCPhFL>Z1bW5Ih+78c2!bW)jAVRXM@Q>#wwq+H(~EqzDEwAh9Ql>H-Cp z7bnLemLWfAv5a|v;l|*y0BtXnX(8UnD+55PEGbwY2vp`*R=6>OH68_^27h~EBnVO9 zJil6%+JUMGauKM>ZWU!D5M&xqtPuugL5?$bo1Lc)sRnW^l>|fjaDRsy}p_Y+ZETsOzi3*{*(@T@Qh{m{Ne6q;l8DPSgC|=MNIH|n8&|T!wA(xh$%h zFU_RNA~1lWXf)-K1;-nPbg=q^3fASq6K{KN>8*u8E+h&~pr9{W))MTpVokeb-B{~Z z?|WFaffg67$KZh|kK96p=o1~m4Vx<ui;(?auDOl>pY1k+lMxzBXpI)Giej1=fc~dgTN9Q(A8umj3{yIwm9s9WA=H z)fL5VyN=*>HZN-mkyX))e$K1rV~VP*Wb7F0q{Cha2VaA;la_@GnUji#=p9)>9x9-q zHWAEKHdZ^4jM$^jKN(`U+maxaI;$$Uapsu1wDX1*IoI59ibSy_N{wQQ0GDz>{vN6oC;tFY-jU)2t%)e4?$2N&%Ciz}HYL7*g`I1qe1BuF5eFRHd|T&5sPmsPQfs2>pv zRfj_aE`*W+zz})^5(t1Go~?Rdj10gIRcBr=wKYol$BZdsiR54goq4Go^y1yUOVFz! zj+51Bi03%fmLgc?hy;yJ=Gzr&6*Y!Pl|dje0(5evYl+B>If>n+tMw^RSPe{;!wo)g z{UjI}X*?nZlG#LZl*2Wj-d^HlJTe2AAb)PEHsd|pBDh{z2eGSFQ_DFQV^e;%IL07T~9*dv-NxlN}Sei7I4)1QI-Vb(1}ULy^d1%#+{;nUA=ML^=i_ zWPTKsx$=J;ew1{EZApy)ZJl?it*xrJJ}@j~P`({`Sb!;lauKFPZMP%^76u>_tR@A_ zc_(o)Kg1$6m}lRxFdZkyti0etdwS2N^+!9Hb?erXnFLXla0 zXGMZT9~^W#fMf#zojAJ)7{kT8uPkXJk*L7dleg72Fmw>Ty(8;gD+7h!D zguIE{(>&~lQLSli;;CuOT}isym&otE=cJ5-L{%bKF(59Is@}xV3oChs$jy^n2_cdR zQw0#`Itve|Mvw1P^Z<3nEJ1cM@IpA$FR`hFPl?8Zq@jqvSkO?M*`3V^-qoWFc z#h}6S&y#~Ed_jNNk;Nx=+e2n>OnjQ2A7k@F)0d60%xdA}z%_MhMz#QtC?wMei>TM?J`A(>7G7!aV67 z_(mUA8WR5H*yo&_=8k)0W^-?-Hp139eub^}-L4F>@#Yy4 zg9Ul4BHXfR@Qfg^$hyGuP*VaH)}f+uohkoGY9ooKz?8M=H@L;|B8UEmftN z|Df>fKZ(i?X1F#Td@k`tN!Z&o9A&X+IeTkuGL`3IWM+7Scu0*X^~K!rP9kyvoPS*2 z9S?6axNeK%X@UnB^1I*1+P-u#FV*91Bvzj-7+_Fuc@AUg5~Oh!b?j|nppUm#-4gyajhqGbIAwqdU|Gu1sB37M zhWpo7nLgcBkBZ>)p#v@kWV!@V;%no5;#%{Pd8M4n3&RSM)ihCfd-^sms7u^ITDT>Ci;}z_ zM^$$!lA-dnZ;8`%VNXATtl}qU8D6jPs(csa{u2(-@uZ$aQ>7fEJKh?h!aOSW#!77> zmf*Ui`X6(XUXsg{?nngJM?$6YU<~pmmh61LA-4%V)yV`{)NRWkz zXB6$aFb>-}-aFYj`KxJ!OGcF@yI_)Hxo2!Rl=u}#MKx37M4k9=Io?o*XcGQU_mOi| zdd+VfX$*(2)^C{ej+>zrG^#I@#;#bpIE~`AgZiZFqVi>!)Ugsiy{h;WgUTl7f8+25 z^QeCq{esHbfXW-Igjjg0g)*Szw<^Q<0mG}UK_+X(kX)$|xna2}IKr3|z!?okC|Z$0 zeeYqxT2{e7393mr4Ze>H_?^@QKQh(C+SExT8;UHdypfYDVsLdn-O0+YB{70IEYj%rj5d1UTr|KZ<=*bP|mVE_E?X=UzMBU!*r~>T5NlS zvGw*o(QiJjFAZj1FJo-1zb)4BdHIvUX zwL5T?JBL`FkPM{wzE?euWIhXoarN^ADRQd&)F6OYaFcH(P<7)z#a(JR)75xsf5g6@ zSTE_$4hu!bJMrCth+tJ^7|Fe9Zc9Wch3g z(@OT$+-Yl6!)G_f9QdH%-=!s{5m^9`u_vng!Z1FCbE%M-6|qVV0Hoe#E{G_Xp>=e8 zz1ia?|F8+s6Fb&C&{Q+~P@R<6#+oGcj@hBwvh3Wqt-24-DILr_=nmsXUg!{Gi_4U4 zC>c$D?v?U78PKz}E$_lF>_6!`6q1Sz77niA<+s?F7^Z)(vZf$l8egjqUnZ>_V%gtM z%EsHfBjN1>w<#BJg-nEUe|u3goId7i=IRAH%%=KPh#B`R28Wq@3gM}WPcVzm-*uX*{OcZ+KueU`4wzEOqCk9s1v zSbA0Nt}U3*wDeb;hDm0s4@-F(2Jwya;{6HpPsP5ZU1-Gp@?JupOtOS~US#$xM7^RIwlt_s&5f<&Ei9`?Ny;N|`s~OUj zn)lOh7S29!dM8a9A7-m>gU-vx4}26}5u8% zudipQzIQj9NTIXI6xl+&%P}xvt}qUhB!Jt98&v|C&E^iK^!^U{`xU_6`6iV)2l$VP!ziibJCZ~3u%3@Owm)JdE2$pf}Ey=mNS6IAxqe5yhUBS11I;XbL6 zBa*qZ4;t0i&9z>2z<))@{4az*AKodON#)26lpfT*5S2=AHKA5#d3IFi3s?j($TqEwb1uE;!+_B@9 z!+#h$-~+m-w{O~_>^%6XH6uTrD;L~C!fa62_( zk`zRs31mj>@#PJkSLb6wFK(4aKR6~K$uF) zjLjw%`Rhq9H2==0Ix_{qYvC?i7L2`IH`IWdEu^?C0lom#m@UXC<%C_ipoY4&Uh=TJ z%am~3fY$USL0hWx5+sG`B-*uP#;Ojjqqc=H6=o&bf|+%p%9QcnY59^nide((t5@9=_cKeGt<2`M&cYwab4o(y z3f@^m?`rN7E31sAJwjT?R16ePP7hYrejhFTMP!do8HQ$++!e>iE6(|)_cIs7gZpo! z2P5YKIZLvM)dhRZgpp!M)g3DhV;et9xDX8CV4!N{CR}>iJRFfjf81Xlh-8^xm7#0+ z{ttBxn7YjWSG>^B7dcqNZdeR`l)?Ykz3FW4e)TdLElmXBN~3-D+z?vEnhrTow@!8j zS5|7>ZaHL+canY}$ZnhZfQdRq*jZWCsLb8d485&{EO+ik{p%m{-2uC{n?(n-5*b30 z#R{?&9g6&@cC3iRk7o8EAj4l#8=>w+ia8Wq$UaJj0{g^VmTGB8x`=7M(A7^C0Veby z;&ASkH}X5eE=L*`V;hR(pYBQ!{zyDV#n~a0gaWy^vAePN^p#D5QPOZ;1fW_$N>@`$ z)za}C2xSwWsJ#2+D_wG_b$ofJvl&h}#Mg_C zw;VjzDmuQ$xJb@Uh7@$pwVKZi{Uq^i&q5qVF1O1r?HZ+XFrOi01?(wFq=w8E^K9Mc zP-n@&d~l9>W=Z6^`AK5o$1$gbO(_Hq)8rplwC9dby!Q*<#b=2Z28Y(%x>Ihq)@0inW0L8 zzcHcIJnI!4eCJ+AS)O-^xFdCJi%!OU-G2r?)?Yc8R%l)NWq)$Ty1aW>u1Y0dvO2j4 zAlbG47BDVZs?(gWBLou?XI3MyPci0MIj{90XUQ78f;N6-3atIL8FD@==)Y1wl8u+R zc)dDpscN@~k@-Ag!c4vA$CBfCK8sWQU{?9+u5_b1@ydQA9eZX6vpjh*)3@OIU`6=W zw|v8wC>#TXc^oW3cM?cBz}bK=Ld`X_csox*X6Clhia!vnf?Y1kJX!eNW!rX!k3%;(@z0%w8A`k|WGSX^3*v>@)u7 zs{=KvleUPD){}buo+so$vcWxgPuozwS-Nj4kCKpHBx|=C0}+}iBwUaB|W1c z47&0a9LjB}{(IWmPspmAdVR-|Kb*@xmL#((KIckYgPjorD^FH$*B}^LYUOeL%`g|q z&A?TiK*pu9t-LIx*66NNp-<8&=DA+%$zt~Po$;TCsimVYbuJN`MuU6a%`@#r>7heNP+|A&e#{ay-_R zoQ6V6tQY_t|J`c_g=jp2I5MnAJR@WAJa;>CIeeA-CKu6lzQX_Xi%Wy zV9|&^0~CcSbNt^&LL91uDlX%${E7?DGC~m7He0H>99aD z$2sVural%{lhq2k*vbbmtgKiMEmphy70J_s?7bw+YmHC-SuB%>S z0#_oBN?n_MNC*CVxoVgt*&Jf{FCRFZ)`?jFq)+ zftq_bwbFg&tT5b#v(%oaiowL^E*)AzmF5O`7UsHAXAI6bNNz)2N z-x8O(di@<+ew?81yPD-AOai%V9^$nwOirDtCVrr5;Evbe3i)d67x(n`RrcVz_U-%w z_XLH$)Zn5rJ;Re|z=b=i;88Xx8;r~4KR^LGEw$H3woV{36C+)T=Rb373@liv; zQmY-ygJho^+=)9FX%s@;(hay$>Ri!(h^qj)Etd|9M?`z#%nIJ6BR@3vr^hF)H-&}j z=(g3yY{<^Ol5t&gNc*@`I7K6EyKNE$yO+2++%y3EnS>;lAXPj0gBj)X_j$Z8T*1+! z#aI<_agGWaH0=a))55_((3klW%jWU{CNZux)g8%(@nato9r<5cqAw--ojZ6%O<#yD z5`I}(aL42qdg(i$++f|H$>hFu>hCT$jNNP~UDg0esIvZ*pr~NVY-=#Y#qokKL;B;T zW#NM$PA+4h$X@SY0=S~j&)QKXB3nEoEl|nSCU(`;bZOl1KMa+tJ}o!lkD+vaUVo%Ld92+n>=0oy_#T2BT_f_}Jr*nJcCuIV5UXTNr`kgcLAqpFTd~IKWk01e zd@UOol*$kMwshYh^kNtB?7F<-LbS#-S@dlsOqOt+v$M~mn$f+-g|IUlQSqZcj7(n| zWn)of~z@RH0&D4H=sU~;Lf zgJTydiBl;KQL4K7&E^A@-mPE|_hNZNXP)SOR?F5lzr(JU!t`E?I{8i<7cYq;BKX}; zVQL*-{~DH|`}M>xrPSYdYd;Fo^f&h6>sT(6V6T1k&D8!FPp z^*m@ukqYpwGGgJqpg}I!sk3P4(?3*B!E?}xLxyX5duUrLvLpn`ZhSvHy-?b z-brof_U6tU)Piwb=Vat#O$vT!a2EQA)r`eo0uo^dhqmc;k3|J*sGUrRTe_J*20)V| zdRe5)XT$(4yk$IO@LO_n;v#^>@O@jBcM*zP)y^bH#}xI&j9K1>$CpyNNU=H@I8N7Ap}OraU?JqxqLQH?tsI z|2|IIoPw5TwlveUhVish{^R0 zNg1yM&U;?7_rj@6Wth*zU#aS#Ot>BEru>-Vr=_WWI;Uf#O16O8)<9~jjnv0@bP_S| zUg$8f=Z$-@0i7eQ)W<4(U;-lS;=k7$%N7x+9kBKsiEs9sG>J@IHW~6Y^ z_Z*RI5GV#upD$dO?i!|E&`IXemz^5X7c zaaKvANJVTuc9gT`jKEieCkxwYz^QoMJSnmky>2Un8op-9$#iSlAJU&IW|_T1&N}{~ z=5m3|VCf-L?DrS8g8l3xYaf{d?VXhEBO)tbsXlBra5!AJDcg82N!7=N8dH<3tRe(o z#l}?gbukOefBW%be~heUYzGwzO|E|}=p5mz+80vWTh?PU^W8dqx5&!HoK0EWG|=CG znYFJpX9t(lU@lYCAzsyq|3_2pFC(k(Z(zAVJmd|d48T>u#I1nr@iHm?hEpN8bRh00 zz5^hA-2sbqvP<0c7ho)F%sy-rnTmIEFlH{|HMbD`ZIZu6aTl;M*UptL*(#}x^N%XuTx0F)$UkoTVh6Q4lO^`I~sw`76$M1PKDVsNM zUe7eZK7?35>Wz<3;lH+N?fs*>wZaq7Z{~Dm-Q=shJ|v~Plm6S*1M6&@K$HJcbv2W4 zjqrRXu|=em|H^r=*9d3P+9P9FDINl>a?7XD4s{k7vF+WbhNjTi3;Sh|DZm>Tmm&x= zcFKt`tSB{BJ<)MM1GNidSi-=L>dqa?J)mT15^{1PWI7dt{RQmX`tB>$5bEDLrDv1K z@O{YoCl&jAhT&5K=5IP^W^k2qp6$M5l%Vj6<9e6%{U0~^cPE7Y%H_PVHS84M{?-pQ z7&O)$=JTgUnw#%3ly&qZMKQ7XT1xr!iMxV>62*CeW_v8ztm;DaqM+6bG}W`E)2;otFdk3qTtJb8 z=yWy)lvD0-Ht`E>b>q+(s$T5(&Mz2v_Tqld+pO1iVT%YL3i;fYfJ%NxihJ{c)gjw~ zq*>Ci#WZFW1jy~2v0l>+&NC)cvZLzqdpE=Sxhr_%>HE9mSoN@XvkLVY?dNw;a6!?~jdwJ}*qTyhV z?Pw2pjm*oLNywJLOnRGuczlbHL+S!2Qy%B-v-Z|B3S0B!H}7A;R;vLOIHbBz_qB3m zo-_5AL#%HftW+Ksmk|y$^X>b4CU%E}^@r8E9*LzNxg@fT3+ll6MJkVdFHrn0Kw*WWzent{#5%JWLiL`l*d26U_$c9o+%&DBYmP7|8_8=fv~iod1LBdMvs z^+>yFSyQ1t4|4SnI(A8$5OZ@lDo`6;4=gXBOW^Q`Y=FQUxjZLMawR=S$UA;C)~eC` z;_{dyZk%>~jp%4-JM$N)7t`ej!i%8r*y<01#yimk<6QwdKiOOy@s`=kJT8a+(skbX z12IX<6bN*HnA&~dx0?vuPvFTO8b?e1c%_dc)Zoae3bWZ;e<>lyyEx+47NtQz)gK(b zMn8;<)-0qxv%(Pk?k(hiBQ!C)XR$$*;<>?Weu+9X#*gfsF|yEWLJQU3JK|9`x<9XW zbs~Vx5^b4p77Z1r$n!=5HpA8sMph^;&;7aDA%`&*fe|xhO_JqX>*O|PcZzb;{pGSO za2Cx7q+}U_^lVOs8fH~Gl>`VUH`n%W>(`jyyRrZC3;-SGyr!)vHI6xU3_u05HI6{} zsp%Ch*&(_jmmhK^^&Z;*w7PYvyAq=OlZq&qOUz_5e9khjW=a}ddI&_3SSc z8nk%;^nweBKvf1DS(u>jRWwd;&hz&-{1s4UaG$>7eg`Y1_8Z?G+g8SR;Xgz&VTFv` z$!o~tB$Jo#kF*+kQ$`JLd?FA>b431{y1x!Z4vi5ij-Wc-wyQn3E&oNI5OM$Q4#Kd1 z&fOG_FvzQ#+Du=`)tZjY;?_1Hv&gbrQemw~epgZ9Rg?wLx}7>c@q(CkJ;Z7G)d)lDRn_+7%Nbv4R#7PkTp@)Zejo|<4<=Sl_!I%8TLGq*MLxzLyq~M@FGN z{XngmEf~lEdk~)WcX+<+HN4u@V~fPh*K!H>K3>R4T?4{x@O@r>w$yBd8LBe)0KSAW zzaA}GN^RU_fqlJTSSt(C0yZ)s7Fui^y_L@e7V!cGH$mwpjMVA^5=r+5ff8$ zrHdKLjeTqEU#-H~qax!#l~DcV9y3Ox-El5u_*{CsgJ@nsL%T-e(IT4EC5fs6vh4uU zF^%Yq6}=yN-Fa?T8gio;T}YqxIg*6}*y_z&ZM%X8!fxzt`ciaF~~#@Nx$IvQUl zl1PHZ6)pSwKMYx_N|o)H%cf{-8rCto&X2j%W<@l(U;>~~tF!aX5L5HGfHTKVQBmh>|TXe6dX@2SBN- z3<$@bLDF*`OV8%ds{X?$zx*=Moql1`41G)LzMf}nE0-~qoO8fSpN@wgYh-$59*X97w{!5ZpCg+%zTe6EcHPqj3_IMoeEfRVW1m&9 zFcrn(#4|NA)x0r2CVlc7njuKBBwgK`dea2syI}2KSc!2q#RgJgh%oIzCP8GgK|W(} zv;Dq)v)RZeaMFo{^Lj5Fn1?OyrNU=3!0@96F%KN14pxM<5K}vTLi#!AsDrAX<>pTW zqY1v}|0x*|icx}OTxB$`Zj7v;lj`Egl5vs-4utZAu@ch=R>?V6E-zT+bS7B|M+Dc) z_J6*4c)1N!St9aSa-*;+Ppirpn=7|fZ(5`rsK+{6O{sEyt78aQtg0$B=6Z$L4L){k zrKx8=aY!jf*b#ame~N!R;?^CtGqdcC!)h7cDT*@Gc6)6i$Nmm$ID|E?+@}zrc#+m?Nn-Hn=cIYz5KunRk!o(ZZK8e zN7;YFXOI74!(+UNKNQzQwL$0gNYKY|LbSurEQGX8s5jxso z;U6u?aIu9&^b z+EbWf?9@S5*efQMefkF2C33qL>*4viHEYb-xMw19=!DZSV5qhj(QDrmmIJPlPzEI{ zj{!)UW8AzqCiG5Ugn#<*d9<7zQ~WV1QTY$1S1wBWo%hCn7(yotea@0`cUpOMB0#l% zG-w>kd&}LOZz_6~We+F6W`KX2yqWa;?Dodjv9p!5{MuxT%_8Pb=gr9t(X^K+O{9F*lDVGIqO;-obwu1O!zrqCB@Y>JhGOE;%pyA5mle zF4+v{{yD>~YaeOX4QUGozHZYr1XqrFxM*2QqKr11Kc3(Fy>ht2$g=mI5HWE*ZF?H} z)Pu&x_I>zDV`RJhv~XNN?jh;|-}L(Oa93h3uZ)E(CrzXh-A#8s(D+sFSp<$f^{p3y za~$t#7Patu?GHDuR;^ER+d}Nv8K6-6kXcK&QerF&WiyBg)MmfO}m zWo39-d`*RtIlN4`WEKQEEGwURr05*Zg?V@Xd8pZ{6dc&tVI@MOZNAMk_Mdw&!O<^e z-YK?R!j|bQ_+u8&bi*W>=PhFbzmmcS!o|Z8f6+GL@BxO`D`P{H)9XtAPoNks3&YsUgXN+PX#mxh2l4)7KY2R#i<_?JKQ!WE7+asRF<3jit$mgd|*0 za#23F@CyB`Svoo!5#Bdlmpi!c_97@do$A=}iuU6*7Y3z3#ARi#E-iV)2Thl@6huE| z4i(KZR1__rrt!YFtYXkZVF#h8w^fAE8M@Z6=^8`La*6>9f@c$v6MUXyshW%NzD+`s z?(csNlh*By>#_mpa2Y&1x*}~7qqeJ)rLN~Mraw4o4(&EF;a~7oY)JnymC4sZzSdQ5 zkx~rBAX%Elve`9gtLIrdX=mYIMc{775J|4@rV!i2j6+b0Jf_TH;}rT(uu?(q+0_^a zg^O;}V7Rj2^HsF)KL<6R zO)NMZfx9Z7EP_S=rtPYmN3PWz!?o8OnnT7>+tjnw)%!4UH6rL}9OBBCDkyz}En-L> z_0A$uF)zEZz+LjeyXvj~{GPU?oCfSeX1(nM&RvOROk!7Yf5h4{(rn-H?X(*(TRs-NKb#W`T(8C`>tDA@r6h%U0L+qC z`GzFttQ?({BKh@WTp4~E<}t=6Q^BeqV{uLmj^sC^NqX_oQrG#TIa~3*CcU_c3`_5p zD>+pt%>a1JCYkg#!A++Ai>F3~fz=(-lanL+*Tw;1!e1kIMUPZr&RQgmbisi$}J zWq3iWi<4jIoq%R9XdTBkAt4U#CP-?OHK;}T$MITQ?Qq(sPh~5Lq#@1=PG8PcvJsha#Y+s}0{jn8>9dI1!T3D!zf-qE z5U8aH_20R1zV4G>tb;$q*)?ql%vf5N3{3Jgq{nvgmOx>>9gveET2x6R25h<6 z^7nbSN|kfE;H=CVk2_<1U054QnvS(^`>Qtpni`u=no+0{T(OTQb4+pHEoC?g|6|Vx|vAhZ?J1FrJZXpK?|6P z4+YX2iXqRjOW(4U^|3=CnJCkwZeD+RI@+IdzbcwZgB9#)SqEx7t2iHHnH)V`^1e}i z96Wy8B1tEMYBF$59?Uz!rklIKRj)z`o|2o68w@`FZZ4|RVw!hgy-cdDfcAcF4;mL~ z`~qS-9oI&`ne2`u2>Q;n$aUN`QX_Hq$`;!&A+O_I0H~BPzGlHO2IjOKC@_(<~cCq5GHL%hrBM9ucF_X3*JC2?0 zJ>I=3d*i80=2}%G0sIx`~8pv2mnIj?fse zRXlZxaEz(39JG!FtxVrFlH6e%@PC7l*Alq}L(e@|Yep2k=?j=Ahao5hXoK*cpqGk!gi zV~NWJ2ILlT=za1~VTOI45WTX7iXORt{DD53`|;Zu4Dm$?3FDfwzLTT+=}YYUL+=U}Ox*5U#mcGw1Y=a{YL_M%F72Y z=yuiFArBrDrJ_d4MYhtgUMlb%zDMw(Jv@Zh|JP{bW)-alYEs)VY{*%32vetJ04hC! zP_FYr>sW0M22Z)(aDHV*oDxgCPi-N+`QkdRcSiGSn<=sQFG6` zi{*`JJ-Q&#+2e(h%FM$WDswuO1iov~^F=CsvgaV4WOcI5DtWw=7DFxBi3$ahX-jU`640#mi8oT*KH5MT`4f0J~mx3%a4$)^9dy5u4tMvl8eil_f zQ92&8q2JbvL&KpmxuVVqm`$kOc@NMRq~{^ee*7V zDUd@5lgZd=x^4bKYCmtq!JsGmh^m()d==Szvzxh%D;;Txbykk~c>0;JiNBem`QKpy z*-7o~k_Bgs-zdWJ00L@`Yo(9WY%TkW$FhEWjT{#q7YDxX3g4<2D zwX9SP?fuJNAMpwAyfpXFP>JCWNsYN)NYLOC`SK=+X!E*@y0!W=)Y*1~1nTuh0?b}?@XU|-1 zGdzr7Q~(1SxucJgiSf@HhEN7dx*Tcd z+fI5OqVQl^(0;=GjR+~UeK2ZyLD)3f3O?RWH?O)H-#ltwG2d>qtyOw%P<6+PKPuXssA5Flqo#wpZdQyA6~khiSD^RmN;j7e|^-?Lo4IUBv)r{{7H7=@qPvk z$>US5sQJ-g9o5Y2-a!Cu<}!aS&m_#5B7ogHRcnV7SlaaLp)5evkn$RHAoIDj^pzk< zS>Q@&UZo_ti@ca~aU6@}D=ykJ(~)Iy_ZL)Fj}W71gW+?_%!FZhNhy7w#O?8^%NG|f z7yZ){B}GHeztSb;GgZ+a$o{xUyWUW_G~->Gq)gZkcVyP}YbPk+HCX;(NHo*;2|m3{ zJWk3^@_QmY1PQPw8g=CVttcU#V50XkpmfX)N^= zfY12`ROv56pDDVh!%?xtsoP5C_r|MPhWlEb^uN=;xLkW%@?MtQ5}G%aGjFbL{0%sR z5xG-BTGQzb@W~-@eiaLsLH7Qb17{H#!!g4#hK-*FTj@mB z64qQ}>5oSrY->d`RDw|nJ4YQ?;=GAJ>@Wza(IuROPcrFu@j{yt5{Qvz%6r&b9S5ls&b{dF9Zv8RY&kV&Y=m;Y&mmR_XP^_YLZ%jj#3k;}>{zhVyjPgTm!T8PXbW zOm8WK7bySW(Ji$(!DN26qc0fSc{yB9%^BzuKhtFVplHI6uf(rZPBbO%Tn{|2wo?p`@sH|4MvN zXN;2ngYxZ0_^cCR0WV_^qZ`U$^Xy=B4Y+Vl?Kh-{dml-(uJ>o}SnqJ=9fyb>`gnZ`OZtd@qkakHFiZ0z) zr=8soIp}K?&Y9Q)*!H>pGwteoJ#=%q-g3tLb8-Jy6~hB5rM!f0`>DT~o>gEzVtC_p zchFW47%S4pym@87S`*F-6m6l>W(Z@9{&QsKQj^P4N1=&D-ZE$9AR+8cZT0Rd{9I%< z@M8X=vQEItV4T$B*)#9WPdyPT61TQPgGD8i&4lTduxMtA58S?-=c(gR0(zaH##`9# z7ShReb?ONRVnt3%NjBP(%xd#DX!clVe00G$-~icaIl|<_ja1fW&}{yi>5v^2lh!)& ztQE1HT&rmpBmIZ@&u$$U+u2h>T>v*Sca=pwT=53hxj36P_3CY#cSy9v<7It=#p*8X zQ?NeZLT!ndlK6Sf{+&itC3HY+u-i>!&@RK?#*jl}Y86^4vf1rbsjqg=Xm3Rw*?Ldt4agM{0^UE{}FoN~=crsM!>G zmDzWB`TsDi@ymQIl88=CgFd$uM94+ZQW!au;eB%FMff7s=sB2`%=m#v z|9uSu`u5Ity|1juh>Vl?2QnRa422Oh31!D?a=Q3;8TLXrNa4;)n+8d0S zbw`|p$BtDVztZqK##4PDf?d)dnlW*{z;KM-?%r^m=Nz&v)7Tkl_2m|jk%`5=)}*QO z&sMkQ#dg3m+#X(u|5gcAn7*cP~Yf4_{LV9qNRCk=|RRW;e{ zK;%$rVlxB;0_y{IG+6_5UT%c$Rz2naPB3cbVBehLa^BY*00w)#v3n0B7Gn@z2iwbV7u>vtphRhC-~+|$hz8vEBdVSE$1tge3wR_pynFg1dGW{xp&~iZ=~_|!wb@7rQ^-6O}fol6vP|X zVR?LDl?dB{sSS%uD#nzl?BHIHa=Sw4WLoKOY?qjY4t z^3oJKTpAQzIuGnx8qcZv%JD)rp(|$2o~OD`8c)QIn`HKNbIR)sLa?4 z_d%V-wU%D69rZeomI#-FnpV3|Or5ZWCKGh}V`vj`o2NbBA+cg~smhoxqDtL@ezJ;X z+m^KfX+=UJ>fV{3%2^9X_JVBE2rIfpD~p)eDrWLbVy)=tes`KYAFj+UxSD3Qa@Hrx zD~11{#(fNE!EkQmBlf0;%M1>gl1t9&LX`=Ig=>eNd-ecQnuq2<{<;>YT>Nrkt;pMq z*gr3@TpQeg7~-cyiCfQ#`i2D_do0ITl-Tc@#TTRt;}S@=}aWHmE_whku!=d-Tg?#NtGk2 z)wl2g$@~~OErCk%T>v&yFV3A0iEjpXTSvM2H679D*_VujzRnOEx0nFW2H_#625Y5I zWO=#<#13hgWP7#OvSreT4HjL`He0Fw(H#$rrd6l)r*B=Wn|WApuoUVfE68mxrDf}@ z%?ppG3-6!tcL<*Ac0)@05*V}_%p{h+PXeKWuH zA_es=-hTk_AI2fboIDnoI99#3ERVg)GZ_NbntXh`0AnflZKDotN~lIFkrmEv4Xq31 zMCF@J8!#v#y_Qf|;Y+gIQmqP(G87yQJx07`f>w2-piEyD<7Q7@UartUzLBS@I|&3X3_&-QFQH}3%aAyJf%AI4bxkxb&+<}{P&0fPof!rfV{&k&56R?GSGCH%eX3RYH~ z=^m{+$3zjS2NAk{vl#l9GC=0EEt9Z0{4wjg?Dd_&^>0O;QVc-)SIr)}--|6?ngF%y z)n$xFX)Ps25q)mNwb6fezk7Ij zLPMV~^I~QFu4J*>v5=A1X6(;qpSyse&v8*`=c}#?Boc3OIZQbHh_mZPgl)7c=3KIz zY*Zf<5c#_quP9M-QdgDDQF4tzR|^t>m(Y@)KkyOe^ymKsgBN`0VP3Jx)8dQbC?JiH z!vt)G7^7-3IHHZH$m5NTL~B^aH4za$2#MoOMZ9~8Wj&>~kk{2_U^5`pUXDbXJ7?o< zG-+!LnZ50N{q9HgaxYa?@f^Rlz-de2uR+rv zrm))bOy!Kywoa=BGPS}YU6^zfr&gotz)I^`@tGB}YO`Fg$~1Nsb~9*5YHeK48YVyu z+Odo+ld{vG$yIbk#8!eSuX%o{l0uS1vGsFTm^8$NwtY`Bgp)dBRQf?>(&mKEg^Q2u zQ^y>bT!e#HvKfw&NY+VXeTg3BZ)=sFEpmJZG{j{<XQ%qDbWH)1oD8wN1w>P#l(N%wA_{>t7+FWgA)>Rh)9=p^Bt#(Q)R-QdyfLYe7y3 zn;NyN*Hr+GZj82M;fsZUWXrHKhT@Q|`=(6O5q6l$rbt9Y;VI|tzhcYcW1ABd8qTZz z?UO{0X#pHerA***0cW7GguEkc1CVq2YV>c=w_4#)`fS~2q;?WYv%%jKkvSdJAgV8t zIXocPz)uX+1`-Vd+}+s^I2$~TITR1`SPEVnYF1dGT6*Io?_Q9xKCg`aj6vJhvAAv{ zwa2;fK0{+XDe9FsmQ`P2a!qX7inWv zVq>I-6Nr@=globy0adU$)@{Qb9fYWs8zgd~)`PVgje1BtuNdnMWBEF5#SKookjvY4 zg4VUO?*;CQkT4GQds+J@1sWF(;SFV4^`W(1Hb{#Sxjbqer`>69;a+PpcNv)(FzR<< zJ~K7|R)b@wHS%^{x_?7zjmVa)4q(VB*iR}Z%80Dn;bE_HL7m)|8ElPWGd`V|#OC9# zUnUX6#K}yh)&QweINM@b)>*rLw?tKMf)@mG{{SLl>01^oZ9v(!)YIH>Z00JJFE%qpV%?p^o6)$Q*)Ut8%TtU&WJQLoIQf_$#@)03Ns?GHi z>wG*;+V&uw)n;1OTMV(v>h>DONa!aos_f?8{*vCkX>}%fCRqCjo8)}8R*J{1&#?1@g z8=nP;og2{?t6tS=^i)*;00VZ`lUte3)f+V`QdStYG%ysTcWdmQGuJ}AB*Wb?xd z?91du*Md2evofR^16 zlGsr;TYABY_T3`6(C~&s+NdpvZ+Uq@yPen`Y6Cs2mRAG8R%q4<%iL|M-P{;cJ7~W> zwY9=!#Y+{L$7rFgqyGTYMiFOT7=ID*-j9g*`o17&@H}6!0#h}xz`R?g8e=J}6lD~e zX~LeVY62D|l6Adpl37XTY{@jA;0STRULN9}OCN9DC$|!yhWnD?%|_$fo$5oqu5%;w z26+xFWJ617+6w#Pgk6d5KA5vI!xX(6CzkFR;I13r@?R6`3|!~Vd*?K zX%&~X%&PTrMx*W$x3Ci&wGPUuFrxjUIlC|!#&hErX6@-1b zyAxf9hKYxfX3)1q6oKEvmug5dhJ}$O6t07u&~P$9X=;pK%O&E ze|gB6T);auE!iPpP8{K!@S^9VSYi2Poz2{_Nd?6MT7pPwFMQ2^)$j}evD;P)JSP10 z^_Fw)`4vq#?H%0w_-oFoV%>iG0bd~-B+jeyv6K6Zk*Zr)XiweWiq+%# zmMmDWBV&!tL~`f(9I+y=#_6>)Wd<0i8q~2q&0@C$*eK{^@+>?gcIe2ho+ilY;zW`b zNX13*$(kNS9|jJ$9!TYYd78{Um;N9L?dk|-HBnKR;zk9s!Z zQ{R-X>KM5eU^rt(pk|MdW)~h$0PA97w@dfYSWQ)(w30<@Ys}deL`6=z3tzi!+GclI z7Djec8tJ4VZ>coCNJ1>^Wzhke2!pM^xwAytGW3bcu_T%trapZG?}4j1C@q)G7YZXz z7Ma`Gi^p;V$XANF@bq*erKv2@sv=5>(G{*oFZT6WoURNhY%dnw%TeWRQLU6Y(&AgH z2F*O?GePGWW`SV%?Cpy7$vVx-b54^wI*gV`UXHEl8OYbIPb5yTI+q)2ry?v_D}dnw9<(ACTz#4OtA=Jboy%tW3Qfu-M>yg)|7QTxht0H zMKq3zohQoGdMs%9$BM-!yEI4JUYDG48mM%2#8ua8s9EjD@mw`84|LRs@2MlDqit2| z-5c5DDyM;#H3PJu^^;?=rf+7&1Sh1acW8Eoa$?+Hi9Jr76*ik((H%`H_G(vbaw1t| zov758%M$27-l@o!>u2v?!CtW>5{Znq&~|*Ndv}{gOHJ42bA+QWaB9?R`y7x)_si80 z{Ddg{K{Bns_W2s|bqNiEH$ku)Ay_`3Q&$h)SQk8(%jW-eg+nYjZQPc*i8 z){bgo+T!MQBX8cM1PviGU5t?d@(H&c=A)Rky)2JZSo>V=E-9-Gvw-I%@#bHU+6O6> zIk9ehcCOH1!r&}ObqJuY``V+`h1TzDA2q2{s~E(4n}5A;%*#!&e>OmP9c93yfxd_e z;;-^)G|#b^I~Vom8Yy8`+H+;?ax1#M8STJbaCJ`_=d!ryF2h4ZMx9JPcT@)17d9%y5xg7?Q)3$-hW^0J)Z0MqsJ8L-wgSvVZ?T8W}zGO@4z&8D;hom)`<-pf6 zHzjQioLJci*=DL2$z0K@_0F?jXxS|UWop$e6;sW9v*ad$wi_~1b*WYai?6^WCc;+C zgPfB91|;3K-kqB#3y_GkD8p3rKQNHQ*F-td*mS;ZZ1baQ+Z?j7<45tx;f12(;zD+V z=v9|O5ouq8Q0X6stYT zmWM?X9Sw)d*}E9!M>!GRHZkHw2T>;sm(JLhdg=S@)B8_J0%kp-z6+iq6M$FT6*-94u`N}yYUlt%4@99_Zb^ELw!x5qyIU2!`e?oH1MmRB+%G z0@{~1N|A`6`OUP6(!9d8NyOP!7EaiHqQ4(o4MwmlP8LQqAE40HBOIXKRn&dqumW`8A*W4caRz?(X7>RJ9k!6m+U57{{SG+9W6VyW%X7KEktU{<&7QS z(2UMzqbg{$vuh7Hy{o!grL>YH2*N}NXl)d|X4N<6( z=z+ML!*&(?($}a!7KmF!uF;DwJi$TvIHIRoSt7G-mD=bU{`7P8TKzaNxtO^FRvtqd zTH3u}tCMRD>g=Gj0z^^Bu4nI))oLuUep>3??!Pl1{V5*b0V=y4N7LssS*&mYYcn)rE}s$dz{sBDIt(?u&C&lsaA<9%^-WS-AYAh9IFh9 zrIp>Vl^F!csHnZsqAK)NMdRDXxZfyLj}%G*ZaFJ_WL8V$UzcN}0D?RFy&W*k=M>PuvtE4MY#ito+wZZdWvqjad*pj7+aXF53il~f4{{W|| zc+T;*n-fm{D<^IXx!|#oGeM&#fOYWwVY)nxQcsRyC2ZD}kD2Y38JyQ5{5o0P_FUy*Xdt;4O(-?s3Av;tRmTon@ITghC7a#BTZ-R5?D*Ve&m zlGLXS$k(StlewD`^>p#+h1b>S_9FPBHY|xY?GWYc<$?k>MD&`$7xe=*A1ZnkqiW;c z%Br!{wed*&V7WNG@F4jLjAbkp%&cYaLO20@dS}LQyoRGYcgz8pz1wyuSlMD^@wKS0 zb3FHQ-!9WTR*u(efD??ul#-!)Fyd^`&gnwWe5gpzR0FQ5V$s&l*lgEqk)&>8WlrQ) z=11M+{INS#VdPq}6i_DOx5cyWWJ}TPI7OApRHzecO5(l;OJXKgbyqb!zpEoA1I4Ac zL%v`umZ0QWNK~XikhV~(Qc5T!Wjod>e7|HBoyqXrCLr=0;^mt18Mm!XdEqd_SiR!4%_}>>L@ue+r$Z7IcYl{ULmZ(B> zs$4ybHF%E4N=}_~?R}fu`Zi;&Wn-2pJ0WUF`C5%c(`GQ7hndMy*GdVdYyQ)}W)xr@ zA0`(PN`lI2%cvUyJ7hAQN#RCFm4r4H$rNi6!?vP3m_1|myp)`qZn3I_+ggpw3T%A2 zA$H)mZqV#7n&l!mI+GZ)L#KvYOFv5=(&huOYBR*BZzmae7yr}g2OK9wAvE4 zZk>|JZ#}WTjB?Fd1dF~Gu^;5eW9FYG`F~`dlh7saS>NiV@_k3BUn8^8c6WCCeBSP# zSEu(SIbN4CAIs_fWlUaRc*<2BoCU|yWD8^s4ty&VXD8HL{m@917UR7QXm6!OTJJ~| zTso{;el*Q7ac8kn+RNv)kzC^^*@&!6-EkYQXrzpO-*xjAyGt#^bTcdw`Dp%+Su*w8 zw#h`aF`KNmjxL)URqu(_PC{sLfVvW({Kj>%-E7XhH7H$$@%esK@i`j6!%T9PZO^a9 z^W!ZPqnp1wu~+!i#X8bW2t1)Nfcx+-=h?*SdrbaJn+6mfw>tSyN-r2 z>7fogBp*QIsxvc}cmkD(R0dWfF~nh!TdLQkIGqC#Q5xI_AD-kQFki)JUTG%4*BlUK zu?!`4?JOw|nF+sOzH%DY+YO2PDc!f_qt)>$sxKyN#O*RUy8A5wU2wDY>FjK4(%sB% zdp8Cw*y%JWjf*KY;1Nx7`0BMyPg#tClSlnWyji_jT4eLJ0`51O`vTZbj%=?pZZ&0D zo_0o=9SK7pEyZ!kOTz5>)*~z|wPt5YTK31Q)o8cm^xE4c?&xq+%|3;4SzQ|xYE#WTX&l~P{f8SsCG;B|GRdscBb@$A6P4ylR9e*XwRSSSS1AwkBzzYBX z0e}yo1h7E}0{#IIMgaE&1^`D0({I=fa{ea|7RVzEfH`m${CGn|PGD*fz847xaDLX! z0F>2vVHL;mZk{+Bb2!ooj!dOUQz1Q4I}z+OccfE+Iaq$ef7=^BRbcoet^5EBp(5E2j* z5)xAoogt#2AtNRxqoJpwqM@RqryxE_KQE_+f6XBzL_{Q{B;=%||@f?Bto__Yg%;OI*lF0u{z2Yyg6VgNuhxKzN1- z9Q?l%ApjQkFCsYr!GU07;b7t7;}PIu6N`dG3Tzy9N?}|jLkB7juj?Xs)bYd7}G#~#MZd*Fbd#vi@)swmB^%XQZto6 z!zO>L@Ly}d^Op+8BLFe>Nt+aaBCu(aNChMgd*|dh$XVKvnUtQ%w_=F1)d|rp?36%; z@I!N5ini@5j{&JeiraTS+bC+A)>&z%x8+j|`;UCi5H2j~U-q%GMwML+V(|C8%cXF`V_-f z)gqs1`KVClr9#OpYkV3~a7IgFh+#q6On%z~$AE6yF<@0Af0RvU>U&g|)Zp^ChgUjs zNy^;9BLH`$xF5ObXSVNGlGGm!Q_S`?I|fFRuHIgKw|xxYTKM%?e0v5X_A}jA-?kV~ zDe!shFNarB!BQd8Ea~#1~L|TK}{`S6MFS^AZ@y2rhUkOQ?HMEZ69L`UQ+Gr zQksSf#lGp#u$~R8PQ&ETm+f_`RnVM*kSJdxi>gCx{-kf?$dH=@*04>iAMIzmEsg;q z_hUd~Ptf@o=s60B+cb&n-&gr;`EY({-=hYG;Acvk9%_-@i0lipndq@Z9k31`wb|#} zwqv?}VOR?)`SklT*P-&ad8z89*dU@Tl6~g(O4FKS0Fu9_nCZVj5Si&Di+7;?>ZnJc zv>)E;P?Bj@(^b)6SYIJox%*@@`yK1&1M2zbmb7TT9EmrdGlQ5XLwLkHA=efTMiDeM zvz4=Zz9n}LX-xN06kYXZC5KV@NZ(I9Bih;zLxj{nyvr-EVXfS4PubI-krz}Gpg%eW zzT`M?X=F`0JDU243ht|<`=nd9`NX!mGt~6ST5Wr5+S`)kv&5Bdi08Lu89qhmA9ro4 zG#*{#Dxa!~tmu$sVU&JDsl+H6#MtTbqSJi#$Z^nQ>D}DJO_}}kxet1Jwq>t$i3LFR z3$-*QVfUD9tKtH#P0sBZbh=x$?g?&^kL*A0^sR!e^5yPpp>hPqY|w`j-HSS+3WeX^ zrSUeudM?q^ZuzQNY-MO>U~9!?UH=%c4*B7%(VtI(7T(zkI^-Q9@cc}aMnCa!;`IRH z7$`c|DA2NKWNwa@>PFzTv(^=QB6}@K`CUp<$5;GwHySD)I=PS!65qA(q>#Oq!m2S| zvt1E3(4Vw%KwE3^fqt+ooO$3HI$4~jio6AI%@YNNVCL8;v~`!63X@Dsj)5;mPabF zXF#r(g>}1eT!w3y`Wjc~Eh8etxMH0yeU|UsvpWXddue^+(AMg;+O}Cc3pNN!9ASC=XHn$0r)1XY0#rdY^AZmc$!LsErd&txA&(~5x%E{c z)!L}Bk>;-(;|l|E#5FX+B=e)1f|*_%1nytR{BxJUB~Mo(%Fu7s964+}hFw{O)uUh5 zH*m-e-U=ob51V{Bse4dMVV2K6M`qb*x02p#+Y+x|nehwto6uFS-s|;?v{rdTuH}AR zv0YZvyhlry|A|e>n^Dc6$3vd(b%k*~i1Cf|npvc|krtQYardSP-_seW)qrq?R7qob zgIQJl2CL%3@1{g4)^kDpM~IK?do5*g{x$1H#<8Cs4`5r)Sxn~i&yF%_1zDXv2K0Az zOZF8KWQE>vhIV9MQ(OYVKO*6WRA0nGlgIYuRn5Mjzi<`v48NpukE`f}+Aaqk`OKEI zP4o&Cc)I$$%O_^ChGvPEmiqXIhSf|Q1DO<)$==z`8pg6=#;!OEk|a3s+zk8m8%M=P z(vbQaOsZ9M$?Z?+p<8ns^+`<>Jwi9(&fz?LVY?Iha~$0_)JTKo$CwY9wWH$%LQ}U9 z+w!DAN=lyJBnHyd&Legp@ko;v95cXImJNNP3iR~tYS$pQ$Z{|glU4ubPHCKFYk5+2> zBp9bHKW1EK5k1=+j;#<4bx$u@PB#xLKL*y)SK+cW&EH^81R_U%^f23vzc(xy`o0Vw zn^s&0?;`ofzzs8|p1nZfx-F#awM~7Jvq=-~bseZ54T?t8-?&Bj%V^;^$Fx!&3hkGJA)Ajgfvf{sLw zNR*yjB#HDQ^8zYtwpp|J!)8K5zrV|xM3Hf~s9utg;SBYQoMX#oj?L;Cxa&N$jT%#_ zD1Vl9)o0@<)pq|wze446dDl(OPu*CYO9wMYE3KPXcpdbHiMWwsROqv_t_s8K#Ktfeox zbv9wEuH0fPLL%eh2AnAb+fHG66vm!5k$EtaX+GzXzi~N`K1871{z^w%j_=*FBvJSF zyn}a1^L0Vi#{fR;bLaGeRSw;Ygvqg|ZBOdQ-)QRy^<$2E~(twk;1PD*fl&54qgt@pLUEJoe>3 z$M$H~JsZ7Fu9#mwk)_FKd?)VK4K1=%j|l6i=~s`e**_lx`?}Ull^dTs_2=q{9nd+l z=HK_OkWWhu3=F^SAdTF&gds~eww4ZQCiD+jv|YO96UavLyE?Ag+*#SvAJ;WyF_CCQ zs<13YwR*6OsKxmovZPWSwvCTGM!iDsSbcCDrZh0gU ztaWoN^yPRAgK1J3FhfiEZEX;|dn#c|lPk&QDhL|1w0j|Bvt!)TUuT!pMC>=n?&W>R z-3nf}8+3}^xmJ zOn@t+If+i}-8Iiqe*YB?&V)xa=uG4541t_tiDk7)Np+F_mD>fIVMQPM^fkSZ?^5qu zi{`&?l}%Y8o>;QFz_Yic7dR(k6FQhc^k$->HDREl@MvJ4c||{HEA%SQ;&x=+(uZ37 z$RK|#Na#dnP9?I_d19i(MvKhok?F?FfOdqlc67A<>m@dXk4Hp#$LPxFoZ=CQtrjQA zCT7u5XC-KHUEoa6x(sT4vI;Q>#pB`QCE7QCZ5BlZga9dJEnOV0lf4W1N&ZK6LX$Z` zOo2Iuj@i5c0FkFR9EsNVMSJ?9!6IgN3mEvIjU7=aj}s0pBpL=o`XVp{42-#|cz9#V zWG8iv;Q<&9WjGpB2SYxU3G>!-K)_7YEKESuX=A4q47^b&XJZ)J*Hhoo4GI#80RzAr zK!JbG02^QozyLJh3wUBg0cSjabAzQ5G0Glj*XgKmjBuFPb;a1VL)IPO_ zEJg$tKbZa1W6D2ztnZ12qmY;_Eggna#S@ME)d{eZj^4iuMlL?OzY8kfNR__|Nc3L? z9Y+tJ-xNI;wBPT78p1>McLB8HU!s+v?k+zKacU*NNJCi#)CS{q0F0d2*ql(lj+anh zFvXLk;f?$^oU+Hi^C^2fnV2Hc>gS9+Fk|~WDSJ4v{U^MUj|ch$ZxG;d$>KNr89x{l zjq+A?Ks#W1aH6Dvi-FItS%HBu%-|KHHlPD@J{9vX&6GHD*@h=KSg+K5lzwkzI7uP=t zM8622Zom04YXy7hR0rS+c*VGWeqK-35%&p=^dvvY6t4lN^Nr-Bh;j3rJ>g{ddl`HE zq)d2{gBj$c7U%-Pq%)_p8-qU4VDkj42?#nngA@-i2OT#U>QBtGlt;fYA}4q&F#p9P zeuBZw{GXT;nLA(^z^ts}|Cq36G35V9I{yDcJFx{uG`JW6oRbp9MTY6~?{tC{Iw_vI zT23vB=>et>m{~`3!b5O^`MI94E`cJ!&rkbfoNmC0+v>D7Bc_OL4Q8iSz!U+DOAHbW zUa0^PKnM^9BmsUf7dgqr0Q;X95kMToh=6|>oBwHMCbVEJF>H=z92Iyh0o==U@~Q4P<>0}h4x zn0e@67AoX#?cko!Kr|)z!9OWzss7OxzKb`?*Yj^EJd`)w1^)XUtY(anu7839Wso@d zqEQ+!B+T0Z4RZn!fJva|uSdw4Q)UbXL(xLGuz{EV+x^G(_4fGNgXqNgf5+(hxcvQL zh3DXbHgRzI8y6`Q=HX!i3qWi6XqxEi{JI?y{6hbYna~yGeO1W=?()l0WT&0i{DlU4 zj_(9>cJMv9JrnxDywU%G-Ru|o@9ad5E-EMwl=mOTr8t$Ztnr%wRsr--NQ|us(I`*w zG4BKW^Zs|n1H4iG8aV7ubO8&={{EsX7 zA6N1}uH=7Q$^W>L|8XV%-*P3N?$y}A-53Cvf*%NGb4CUz0ZyPx))92avVjg-R}e;n zADYs|i;$+EYeQ5a}b}fC+yRfT9qB z0S=ym!U95qfSh80rvua-hGuhwf&K=0j+L4Q4mP-xJcqfsu8^*$3d|L*dDRFCo?hk$#=%$9rb6~>d_=QEl5iBQ<7$?y6{Xa50L1mm#-UtV6XwFf z_S=jyCtew_Wl%lQKk-^BD&YGIXSfGQ@Bw}QY+7n662j6F68s_p!YBIb>dI&#eb5d_ zC`?OLo&z+F037ZlBc&pyq9&@UtfHCZ!~$q#`9Esj4ig^sBBa3hIj) z{$F*SFm;vxcXdzQdJZ1{M>4?W@mKeMNl*fN;RBAV&(Fo9?BMbf@_;LdN=vILi7Jb$ zD@jX9iwLPGDM=|ys*0#cg62?BmXeec#HXZ5hM7ez(eYGO=YGpqST3@*Ggi zOocgd{6xe5(^&nF_C6Kq55DmDZ>R4mn-9tv?eE|XQ*r^v^?zC&g8!x7C?v+|_?PCM z4&LB9J2cGON1nsk8--vyoynd^7dABNXW?X8|Cb_t9Q^(g_a6=MKTg{J$`JpuIR6g} z@pF8jt`0~S82A_wnR3U>pD;7^DEc@ppjwc4Ef!j_Hz6rt}{%B7O9`pK^+R+^YV_{+ssJ%f2L6{x` zyPU#&Cp@R{B@FC@K!R`ju`oJ&Iw71e@Ou!x?dOY$0KnD(;RruC%pZjNK$z3R7Xb%h zOgIWP0_FflCE#FQ4RfMlP*)HZ0%2lr6C*I32uBV)ghlM~2kiIzW$}{lf zv?BRn0DfdFvYXG|@C^53>wC+O4cza{>` z_uqk-u|1`)8=j0Agtp@^++Q{S!l5$2P!=%s2m9V%IL8zKsJsOL^do=aIG=(pnwtPn z(fLPzXfgBU5AOpU1{J^<^mqCn8GdvA*T5g`31Hg$y;WsXJ&k2x!^~;Nd}twVspmHt35a2<#MqJewB1K<&m4rBqjKoJ-URSDDrjX*Qd4xUKt2S$M} zz!b0mtO8rWK6n}qA3_45f-pc>AzYA)5D|zJL;<1((SaC2EFo7QE)XQd7ZMD)0f~kr zKpsJ!L2@A_kk^n#NE@UZG7R|&nS=a*>|tSJ5o1wfv0!my31UfMDPd`2nPAysxnOx= zUB$YI6^r!{D+8+ls{*SLs~xK!>kHNb)+TsZkqDa>n;n}UTMAnRTOZpB+Zo#%I}|$# zI|(}jy9m1)y9K)!`wR9W_AU+{4iyd?4nK}8jwX&N4iv`=Clu!{&Lf-`I2AbWae8sS z;;iBv;gaAo<6gv-!PUaGz;(g($Bn>E!hMcgj@yLWk2{6Cg@=bni^qc}iKmHYiRXqF zgm)M330^VY8@z73Z+M&d`1lO?7xCrs_3<6>(fASgDfk8W4fs9yQ}{asLJ>m*wwCnV=4S0Q&G4<%0}e@#9}zDYqvAxxo9fuOickw?)+F-wV0$xW$7=|p*x zGL!NhZas8?wyX~byEXaZ6q1&csqQ68BqmQC5rthcUV_;)YV{m7P zXQ*TtXT)LTWi({;XG~*kVq9dRW|C!sGDR`HVj5w_V&-KwVh&=?WbRT(8i=5vm45pqd!xpF0QwQy~7^KhGU zM{-wk&+^doXz^U-$>$k6PjX)Iyw~}R^L-caE=XN)zwqQj7cUmCIIk;jDsSgStcwyC z;TNA=?B>JeljcM6W$+F16Z0$a`|;=Ve-)q=&=Ck1s1#Th6G(zw#f(qYoI(z`MeGH97sGApwDvhK2Zva@nLaxl3p zxo`3u@(%LPMrW}>Z=;!8bKOwG;uYxHRCl0wOF*ETDe-Q zmnAQUTz;=jtZl6QNPAL;SI1kYS{F!oNQm;}U(AUyW)E_tCG4L{|F~l=8 zFibU^HWD@pHfk}ZGPXC)Gu|>$HirV%*@6t*KFHd)jYxci-n*?h()_4 zqb1z3$_n4g%<8$-rnQ>&1M4XpahnL60b3s10NXY@MmrC?I(ssE2m8`1xL3@tf$7o09R-FKRU$-@$0GtTnP3C^=F@-B%kbFPZ6Nv?}<75F3g znwzFuy4$w9zI%@Qv4^=wF@gYb1@Rh5iF8N4N1a6lpt?OTdPaDD@sja+;I-+hF$K z>%m_`ltP|`LP8xw--ewFyBRihP2<{&>u0XJU;h{`6rK>ial`yZ^-Y$W*KU5hrEx1i zf;7TAVlYxRGW|BrZTRg^cSP@`+&PMJiuw>O6rB`(a2I;_LyU0D!9Udlb*CoX+`NQ>Cx$XPvK98o@qR*$l%UM%EZg`%bdrEYzn#xRST<%_=}zu(-ud+1YY{S zoG-ajGVn_K)!S03(xNi1vd86AE zw#l@;{vh?CvR$IRqC>o+{G<5C@=p?w6S?8hcfHoBOo-+WYnT zy9Z1Mh6Zg0zYIAI%?^7EuZ{SP?2ld>!yStnCm&Dx%=|fH;=)An7l|)*Usb<$Od3y) zeuI8n`0n%lVCv>H$#l{T>rC#f$ZYML`drt%_59R==feJC#1h5QZPYIr> z2P@#>;NcSD;ewSR;HiG#=b3u&NIm9Qzfk-$<#W`lB}R_k%#+#?tf1NhEEcvH_eP`EG~TNx6AdioTRan%1n(U z&k;BG(l*TwD0nXY>hVl;Qs-TyEk&F9{YBogXKMT%1Nl{vR*we`lK~)WcX;cnYPwoW zNxg(0pX`eGJFG2{)Y_E66>Yb@T_2P}Z)f|;3s!xGPTf}xqywS#9;ng!wqSvKirKWE z=VC+hv};RmAv=R(kU>8BtR&s*D;p$S$+Y;rS?lYqRDG~`duPTi|F!QA5qtq&480kn z^Xpc!Wr+t>0}A6#q(=Z;t^|?4&Pt5&OPb`gF0uyY&y(^JQC7HP0>Q3kA=Z z1kQPC9`WcI-nBf04~7*zA3w6}X9!AhUzw;>`B7UzH(jxtxHm8=zAj}UZ|hmN+O#Lu zA6Ky+Ivyr-b%bXRu^G8gmD6yi*HKQv^%&^;JgT$$spz0xQNUmges-^p3O~M|a6i-} z^6Q?=+_qVKz1gs8pw+j{>X26lDm?&c*}>v&Cz)BrYDHwvhS1%)<#!$#GLBZel*MLM ztO~=oUOkkY@RBFX-Wa&_=lEps=$B-PclJK<3;dD5VdZNrXz9Yxyz$)K`ce&Nhht-X zFRpOQS}!o*&3A#s&q1;`v$x4cQTIUBJFwb?qa}Fc;iTnUTu%~m!PIK}wdC5%Ex5uV z`d+@KmGJ!;d)Ppl``1)`-x*`z@k#3l;)e7Feu%Rvvd#aqIj5#L3c1)GDj(nJ-$#OHQ{3R-cQN zM=<@^TPcW-tswC(8R4UNzTkd0JMGR-i(s7`U%|0n_@vvCru#0GLpmi_KKa@Sl^FG0 z?nhf7M?ZXS!1aT-X6&UCG-Tal7ry`di~-fwnZrNf-|!NGr0Ys}JG`KnDPNWN~*Y~5^VLRI#+^+I<%EmaJtP)nl|~jkI{EaU$*X;T52^^s zv7DoxAl_mb{!B7ZwWT0>_kN!Vmht*t?kga-jL#$PS}3P^e$jCo*sDA>v%9a^40IYEzxDsebL!_AnRs6 za7c47_(^|vx5cmi;__7NAYWxm-HpEbkjoyC?Q`D4D+N>LASZyM(b`=&3h_9X3U{3< zb{-8BdAl;MGm-jA@p1815kFlUyfXH2D)!h=Ft`=QalVb>=P%Kx`F19yb=W7ij>!d; z&AkUN^n5Sb8JcOSJTQF;lnGa7nC~w}zk@?dKbCmw;1AA*@JzL9*W^yM=suk(P#TYk zPIjG?@(Y*ee>Wglc@3<=Ez?wO-doH~*Vr3wHCk#jsc4-{x4u`6N`53(-t+qA`;Rj3 zYRqR97@bBjF0Vk*9O^XZ3#q<(p;5?`jB@a-D?^KIX17Ehl%oa;J_tob5WP` za+|yispcc>nAHS!)a~St$fP_XYbIaJdD)0zn?h(z4`{Bcir8J)s5RY-n~%C|pEmf^ zTKq+q(3JP{#&07-R(+$+5oJ<-xQ+<^MMJb$$LN`wGtZCsAB__psQ8JR=)mn&@<&ar ztObVdF;s-@%74!DgIT`Tj>~V?vXS@8_LisqoM&Ys>sHtHaJrlpM@P~e-A-j&GMjl@ zfHGk1)>xCmRC6WE%igkFiunibc(MJL6$D;8buW6}p$mG)7_#r`*jKOEd5) zbS|-e?l>A=v@p~>6Nj`jyLGwkg(0F^spo>le7{z5VznJ}HbpD)9#mK-$4(KZkexb`I~d7zzA^|F zx9jn6u<*i_&*iR^=RJSWP~zr$dLTY}m*~|_85cJHU=AqBXQD98`%E%U+=qR)rv@az~8xa}VIy0lLbg3DnAFU$^$wuqfUiL0B z3A|KQ9nN&tVw<7ASHG_>p*>A}jp~zvb5H5_V*qISdbh#zsdAhc>jbJbHFjc5!{bg{ z2uG-y4VM=q+*)CrX6>GGR;|l^Miiwb{{2Ssx@V%UsZ=;B+qzn^N^6Fuh9+vbIHqcA zloTRfPkkS#8gQy;Fwq69N9=zYlDLg^zH^J&BP561kOV>=U!t~pw!^SdpsfX$Ws>*V znIP9**AE#S7Xb3iqGwS%1U!+`Q6HMUlIp7Rcy)7m63MXT?uNg2ekRc;j!W%?o1}M9 zjik%m4z1R9M!p#x|5kNj$4M`-|CzzXWVOq|gnfCptGF6HwL%)Vn%;07;Sozeke+}_ zb8J14;9Lu-O)pCzeXsasi7J}oj>E??4x7IGh_}vl+6CYI@~Ew&h8Z7>h-JPeuZ`C+ z2psYK)LZZO#4jx-(lo>RRcBLKOMs+HD*sN9M4mSgI?dg#p#^N~Bb0xJTW%k=3K@?1ohZ zktu?`U5hqaoP4iYZYA)gr!%Q?SFe9VN~~54RU6h4cWG%+kU)cC%j&Uuaw1>I6Mfv} zA;|&*dX%|Tx#QK0$2mRiaj4zH?Fd*T2sj=K(c!9UQElxBoMBYR<-&c71EJMu(|U*vDIzfSux7WBbWS{jpN6c5Mtd1 zE*c}fZt|=4Ik~Y}ZyECij4o__#7kCnW~p(ZW-xI_(tK42rK@DB3fn=RXSU3mx6@C} znBMT*(9KD7y2(O+G_Q&{li6n8bzZe≥r=wri?8PsRCvD|zkc+( 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 z
              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 1 + ? $( + 'p.block-editor-rich-text__editable' + ).text() + : ''; + break; + case 'post_excerpt': + metaField = $( + '.components-textarea-control__input' + ).val(); + break; + case 'featured_img': + if ( + 'Set featured image' === + $( + '.editor-post-featured-image__toggle' + ).text() + ) { + metaField = ''; + } else { + metaField = $( + '.components-responsive-wrapper__content' + ).attr('src'); + } + break; + default: + requiredPath.removeClass( + 'wpsp-required-error-field' + ); + } + if (undefined !== metaField) { + if ('' !== metaField) { + requiredPath.removeClass( + 'wpsp-required-error-field' + ); + } else if ( + requiredPath.find('.required').length + ) { + requiredPath.addClass( + 'wpsp-required-error-field' + ); + } + } + } + } else { + requiredPath.removeClass('wpsp-required-error-field'); + } + } else if (requiredPath.find('.required').length) { + requiredPath.addClass('wpsp-required-error-field'); + } + }); + }); + $('.wpsp-show-repeater-field').click(function () { + const parent = $(this).parents( + '.aiosrs-pro-custom-field-repeater' + ); + parent.find('.aiosrs-pro-repeater-table-wrap').show(); + parent.find('.bsf-repeater-add-new-btn').show(); + parent.find('.wpsp-show-repeater-field').addClass('bsf-hidden'); + parent + .find('.wpsp-hide-repeater-field') + .removeClass('bsf-hidden'); + }); + $('.wpsp-hide-repeater-field').click(function () { + const parent = $(this).parents( + '.aiosrs-pro-custom-field-repeater' + ); + parent.find('.aiosrs-pro-repeater-table-wrap').hide(); + parent.find('.bsf-repeater-add-new-btn').hide(); + parent.find('.wpsp-hide-repeater-field').addClass('bsf-hidden'); + parent + .find('.wpsp-show-repeater-field') + .removeClass('bsf-hidden'); + }); + $('.wpsp-show-repeater-target-field').click(function () { + const parent = $(this).parents( + '.aiosrs-pro-custom-field-repeater-target' + ); + parent.find('.aiosrs-pro-repeater-table-wrap').show(); + parent.find('.bsf-repeater-add-new-btn').show(); + parent + .find('.wpsp-show-repeater-target-field') + .addClass('bsf-hidden'); + parent + .find('.wpsp-hide-repeater-target-field') + .removeClass('bsf-hidden'); + }); + $('.wpsp-hide-repeater-target-field').click(function () { + const parent = $(this).parents( + '.aiosrs-pro-custom-field-repeater-target' + ); + parent.find('.aiosrs-pro-repeater-table-wrap').hide(); + parent.find('.bsf-repeater-add-new-btn').hide(); + parent + .find('.wpsp-hide-repeater-target-field') + .addClass('bsf-hidden'); + parent + .find('.wpsp-show-repeater-target-field') + .removeClass('bsf-hidden'); + }); + $('input[type="checkbox"].wpsp-enable-schema-toggle__input').on( + 'click', + function () { + const parent = $(this).parents( + '.wpsp-enable-schema-markup' + ); + const thisVal = $(this).val(); + const togglebtn = parent.find('.wpsp-enable-schema-toggle'); + const togglehid = parent.find( + '.wpsp-enable-schema-toggle__input-hidden' + ); + const isChecked = togglebtn.hasClass('is-checked'); + + if (!isChecked && '1' === thisVal) { + togglehid.attr('value', '1'); + togglebtn.addClass('is-checked'); + } else { + togglehid.attr('value', 'disabled'); + togglebtn.removeClass('is-checked'); + } + } + ); + $(document).on('change click', function () { + $('.wpsp-local-fields') + .find('select, textarea, input') + .on('change keyup', function (event) { + if ( + event.isTrigger && + !$(this).hasClass('wpsp-specific-field') && + !$(this).hasClass('wpsp-date-field') + ) { + return false; + } + + const parent = $(this).parents('.wpsp-local-fields'); + parent + .find('.wpsp-default-hidden-value') + .val($(this).val()); + parent + .find('.wpsp-default-hidden-fieldtype') + .val( + $(this) + .parents('.wpsp-parent-field') + .attr('data-type') + ); + + if ( + $(this).is('select') && + $(this).parent().hasClass('wpsp-connect-field') + ) { + const selectedOption = $(this).val(); + + if ( + 'create-field' === selectedOption || + 'specific-field' === selectedOption + ) { + if ('create-field' === selectedOption) { + displayCustomField(parent); + parent + .find('.wpsp-default-hidden-fieldtype') + .val('custom-field'); + } + if ('specific-field' === selectedOption) { + displaySpecificField(parent); + parent + .find('.wpsp-default-hidden-fieldtype') + .val('specific-field'); + } + parent + .find('.wpsp-default-hidden-value') + .val(''); + } + } + }); + + $('select.bsf-aiosrs-schema-meta-field').change(function () { + const parent = $(this).parents('.wpsp-local-fields'); + const label = parent.find('select option:selected').html(); + + const selectedOption = $(this).val(); + + if ( + 'none' === selectedOption || + 'create-field' === selectedOption || + 'specific-field' === selectedOption + ) { + parent + .find('.bsf-aiosrs-schema-heading-help') + .attr( + 'title', + 'Please connect any field to apply in the Schema Markup!' + ); + } else { + parent + .find('.bsf-aiosrs-schema-heading-help') + .attr( + 'title', + 'The ' + + label + + ' value in this field will be added to the schema markup of this particular post/page.' + ); + } + }); + function displaySpecificField(parent) { + parent.find('.wpsp-connect-field,.wpsp-custom-field').hide(); + parent + .find('.wpsp-specific-field') + .removeClass('bsf-hidden') + .show() + .find('select, textarea, input') + .val(''); + } + + function displayCustomField(parent) { + parent + .find('.wpsp-connect-field,.wpsp-specific-field') + .hide(); + parent + .find('.wpsp-custom-field') + .removeClass('bsf-hidden') + .show() + .find('select, textarea, input') + .val(''); + } + + $(document).on('click', '.wpsp-field-close', function () { + const parent = $(this).parents('.wpsp-local-fields'); + const select = parent + .find('.wpsp-connect-field') + .removeClass('bsf-hidden') + .show() + .find('select') + .removeAttr('disabled'); + const selectVal = select.val(); + if ('specific-field' === selectVal) { + parent.find('.wpsp-default-hidden-value').val(''); + parent + .find('.wpsp-default-hidden-fieldtype') + .val('specific-field'); + displaySpecificField(parent); + return; + } + parent.find('.wpsp-default-hidden-value').val(''); + parent + .find('.wpsp-default-hidden-fieldtype') + .val('custom-field'); + displayCustomField(parent); + }); + + $(document).on( + 'click', + '.wpsp-specific-field-connect, .wpsp-custom-field-connect', + function () { + const parent = $(this).parents('.wpsp-local-fields'); + const select = parent + .find('.wpsp-connect-field') + .removeClass('bsf-hidden') + .show() + .find('select') + .removeAttr('disabled'); + + let selectVal = select.val(); + + if ( + 'create-field' === selectVal || + 'specific-field' === selectVal + ) { + selectVal = 'none'; + } + + parent + .find('.wpsp-default-hidden-value') + .val(selectVal); + parent + .find('.wpsp-default-hidden-fieldtype') + .val('global-field'); + parent + .find('.wpsp-custom-field, .wpsp-specific-field') + .hide(); + } + ); + }); + $(document).on('change input', '.bsf-rating-field', function () { + const starWrap = $(this).next('.aiosrs-star-rating-wrap'), + value = $(this).val(); + let filled = value > 5 ? 5 : parseInt(value); + + if (value > 5) { + filled = 5; + } else if (value < 0) { + filled = 0; + } else { + filled = parseInt(value); + } + const half = value === filled || value > 5 || value < 0 ? 0 : 1; + starWrap.find('span').each(function (index) { + $(this).removeClass( + 'dashicons-star-filled dashicons-star-half dashicons-star-empty' + ); + if (index < filled) { + $(this).addClass('dashicons-star-filled'); + } else if (index === filled && half === 1) { + $(this).addClass('dashicons-star-half'); + } else { + $(this).addClass('dashicons-star-empty'); + } + }); + }); + $(document).on( + 'click', + '.aiosrs-star-rating-wrap:not(.disabled) > .aiosrs-star-rating', + function (e) { + e.preventDefault(); + const index = $(this).data('index'); + const starWrap = $(this).parent(); + const parent = $(this).parents('.wpsp-local-fields'); + starWrap.prev('.bsf-rating-field').val(index); + parent.find('.wpsp-default-hidden-value').val(index); + starWrap.find('.aiosrs-star-rating').each(function (i) { + $(this).removeClass( + 'dashicons-star-filled dashicons-star-half dashicons-star-empty' + ); + if (i < index) { + $(this).addClass('dashicons-star-filled'); + } else { + $(this).addClass('dashicons-star-empty'); + } + }); + } + ); + $(document).on( + 'change', + '#aiosrs-pro-custom-fields .aiosrs-pro-custom-field-checkbox input[type="checkbox"]', + function (e) { + e.preventDefault(); + + const siblings = $(this) + .closest('tr.row') + .siblings('tr.row'); + if ($(this).prop('checked')) { + siblings.show(); + } else { + siblings.hide(); + } + } + ); + $( + '#aiosrs-pro-custom-fields .aiosrs-pro-custom-field-checkbox input[type="checkbox"]' + ).trigger('change'); + $(document.body).on( + 'change', + '#aiosrs-pro-custom-fields .wpsp-enable-schema-markup input[type="checkbox"].wpsp-enable-schema-toggle__input', + function (e) { + e.preventDefault(); + + const parent = $(this).parents( + '.wpsp-enable-schema-markup' + ); + + if ($(this).prop('checked')) { + parent + .find('.wpsp-enable-schema-toggle') + .addClass('is-checked'); + parent + .find('.wpsp-enable-schema-toggle__input-hidden') + .attr('value', '1'); + } else { + parent + .find('.wpsp-enable-schema-toggle') + .removeClass('is-checked'); + parent + .find('.wpsp-enable-schema-toggle__input-hidden') + .attr('value', 'disabled'); + } + } + ); + $( + '#aiosrs-pro-custom-fields .wpsp-enable-schema-markup input[type="checkbox"].wpsp-enable-schema-toggle__input' + ).trigger('change'); + $(document).on('click', '.aiosrs-reset-rating', function (e) { + e.preventDefault(); + const thisObj = $(this); + const parent = thisObj.closest('.aiosrs-pro-custom-field-rating'); + + const ajaxData = { + action: 'aiosrs_reset_post_rating', + post_id: thisObj.data('post-id'), + schema_id: thisObj.data('schema-id'), + nonce: thisObj.data('nonce'), + }; + + $('#wpsp-reset-dialog-confirmation').dialog({ + resizable: false, + title: __('Confirmation Required!', 'wp-schema-pro'), + height: 'auto', + width: 400, + modal: true, + open() { + $(this) + .closest('.ui-dialog') + .find('.ui-dialog-titlebar-close') + .hide(); + const markup = + '

              Do you really want to reset current post rating?

              '; + $(this).html(markup); + }, + buttons: { + Yes() { + thisObj.addClass('reset-disabled'); + parent.find('.spinner').addClass('is-active'); + jQuery + .ajax({ + url: ajaxurl, + type: 'post', + dataType: 'json', + data: ajaxData, + }) + .success(function (response) { + if ( + 'undefined' !== typeof response.success && + response.success === true + ) { + const avgRating = response['rating-avg'], + reviewCount = + response['review-count']; + parent + .find('.aiosrs-rating') + .text(avgRating); + parent + .find('.aiosrs-rating-count') + .text(reviewCount); + parent + .find( + '.aiosrs-star-rating-wrap > .aiosrs-star-rating' + ) + .removeClass( + 'dashicons-star-filled dashicons-star-half dashicons-star-empty' + ) + .addClass('dashicons-star-empty'); + } else { + thisObj.removeClass('reset-disabled'); + } + parent + .find('.spinner') + .removeClass('is-active'); + }); + $(this).dialog('close'); + }, + Cancel() { + $(this).dialog('close'); + }, + }, + }); + $('#wpsp-reset-dialog-confirmation').dialog('open'); + }); + $(document).on('change', '.multi-select-wrap select', function () { + const multiselectWrap = $(this).closest('.multi-select-wrap'), + selectWrap = multiselectWrap.find('select'), + inputField = multiselectWrap.find('input[type="hidden"]'), + value = selectWrap.val(); + + if ( + 'undefined' !== typeof value && + null !== value && + value.length > 0 + ) { + inputField.val(value.join(',')); + } else { + inputField.val(''); + } + }); + + // Verticle Tabs + $(document).on( + 'click', + '.aiosrs-pro-meta-fields-tab', + function (e) { + e.preventDefault(); + + const id = $(this).data('tab-id'); + $(this) + .siblings('.aiosrs-pro-meta-fields-tab') + .removeClass('active'); + $(this).addClass('active'); + + $('#aiosrs-pro-custom-fields') + .find('.aiosrs-pro-meta-fields-wrap') + .removeClass('open'); + $('#aiosrs-pro-custom-fields') + .find('.' + id) + .addClass('open'); + } + ); + + // Toggle Js for Enable Schema Markup. + + $(document.body).on( + 'change', + '#aiosrs-pro-custom-fields .wpsp-enable-schema-markup .wpsp-enable-schema-toggle', + function () { + const parent = $(this).parents( + '.aiosrs-pro-meta-fields-tab' + ); + const parents = $(this).parents('.inside'); + const id = parent.data('tab-id'); + const hasClass = parents + .find('.aiosrs-pro-meta-fields-wrapper') + .find('.' + id) + .hasClass('is-enable-schema-markup'); + const isChecked = parent + .find('.wpsp-enable-schema-toggle') + .hasClass('is-checked'); + + if (!hasClass && !isChecked) { + parents + .find('.aiosrs-pro-meta-fields-wrapper') + .find('.' + id) + .addClass('is-enable-schema-markup'); + } + } + ); + + $( + '#aiosrs-pro-custom-fields .wpsp-enable-schema-markup .wpsp-enable-schema-toggle' + ).trigger('change'); + + $('.wpsp-enable-schema-toggle').on('click', function () { + const parent = $(this).parents('.aiosrs-pro-meta-fields-tab'); + const parents = $(this).parents('.inside'); + const id = parent.data('tab-id'); + + parents + .find('.aiosrs-pro-meta-fields-wrapper') + .find('.' + id) + .toggleClass('is-enable-schema-markup'); + }); + + // Call Tooltip + $('.bsf-aiosrs-schema-heading-help').tooltip({ + content() { + return $(this).prop('title'); + }, + tooltipClass: 'bsf-aiosrs-schema-ui-tooltip', + position: { + my: 'center top', + at: 'center bottom+10', + }, + hide: { + duration: 200, + }, + show: { + duration: 200, + }, + }); + + let fileFrame; + window.inputWrapper = ''; + + $(document.body).on( + 'click', + '.image-field-wrap .aiosrs-image-select', + function (e) { + e.preventDefault(); + + window.inputWrapper = $(this).closest( + '.bsf-aiosrs-schema-custom-text-wrap, .aiosrs-pro-custom-field-image' + ); + + // Create the media frame. + fileFrame = wp.media({ + button: { + text: 'Select Image', + close: false, + }, + states: [ + new wp.media.controller.Library({ + title: __('Select Custom Image', 'wp-schema-pro'), + library: wp.media.query({ type: 'image' }), + multiple: false, + }), + ], + }); + + // When an image is selected, run a callback. + fileFrame.on('select', function () { + const attachment = fileFrame + .state() + .get('selection') + .first() + .toJSON(); + + const image = window.inputWrapper.find( + '.image-field-wrap img' + ); + if (image.length === 0) { + window.inputWrapper + .find('.image-field-wrap') + .append( + '
              ' + ); + } else { + image.attr('src', attachment.url); + } + window.inputWrapper + .find('.image-field-wrap') + .addClass('bsf-custom-image-selected'); + window.inputWrapper + .find('.single-image-field') + .val(attachment.id); + + const parent = window.inputWrapper.parents( + '.wpsp-local-fields' + ); + parent + .find('.wpsp-default-hidden-value') + .val(attachment.id); + parent + .find('.wpsp-default-hidden-fieldtype') + .val( + window.inputWrapper + .parents('.wpsp-parent-field') + .attr('data-type') + ); + + fileFrame.close(); + }); + + fileFrame.open(); + } + ); + + $(document).on('click', '.aiosrs-image-remove', function (e) { + e.preventDefault(); + const parent = $(this).closest( + '.bsf-aiosrs-schema-custom-text-wrap, .aiosrs-pro-custom-field-image' + ); + parent + .find('.image-field-wrap') + .removeClass('bsf-custom-image-selected'); + parent.find('.single-image-field').val(''); + parent.find('.image-field-wrap img').removeAttr('src'); + }); + + window.inputWrapper = ''; + }); +})(jQuery); diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/frontend.js b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/frontend.js new file mode 100644 index 00000000..d31c3d3b --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/frontend.js @@ -0,0 +1,145 @@ +/* eslint-env jquery */ +(function ($) { + /** + * AIOSRS Frontend + * + * @class WPSchemaProFrontend + * @since 1.0 + */ + const WPSchemaProFrontend = { + /** + * Initializes a AIOSRS Frontend. + * + * @since 1.0 + * @function init + */ + container: '', + + init() { + const self = this; + jQuery(document).on( + 'click', + '.aiosrs-rating-wrap .aiosrs-star-rating', + function (e) { + e.preventDefault(); + + self.star_rating(this); + } + ); + + jQuery(document).on( + 'mouseover', + '.aiosrs-rating-wrap .aiosrs-star-rating', + function (e) { + e.preventDefault(); + self.hover_star_rating(this); + } + ); + + jQuery(document).on( + 'mouseout', + '.aiosrs-rating-wrap .aiosrs-star-rating-wrap', + function (e) { + e.preventDefault(); + if (!$(this).hasClass('disabled')) { + const index = $(this) + .parent() + .find('.aiosrs-rating') + .text(); + self.update_stars($(this), index); + } + } + ); + }, + + hover_star_rating(field) { + const self = this, + parent = $(field).closest('.aiosrs-star-rating-wrap'), + index = $(field).data('index'); + + if (!parent.hasClass('disabled')) { + self.update_stars(parent, index); + } + }, + + update_stars(wrap, rating) { + let filled = rating > 5 ? 5 : parseInt(rating); + if (rating > 5) { + filled = 5; + } else if (rating < 0) { + filled = 0; + } else { + filled = parseInt(rating); + } + const half = (rating === filled || rating > 5 || rating < 0) ? 0 : 1; + wrap.find('span').each(function (index) { + $(this).removeClass( + 'dashicons-star-filled dashicons-star-half dashicons-star-empty' + ); + if (index < filled) { + $(this).addClass('dashicons-star-filled'); + } else if (index === filled && half === 1) { + $(this).addClass('dashicons-star-empty'); + } else { + $(this).addClass('dashicons-star-empty'); + } + }); + }, + star_rating(field) { + const self = this, + schemaId = $(field) + .closest('.aiosrs-rating-wrap') + .data('schema-id'), + parent = $(field).closest('.aiosrs-star-rating-wrap'), + index = $(field).data('index'); + + if (!parent.hasClass('disabled')) { + self.update_stars(parent, index); + parent.addClass('disabled'); + + $.ajax({ + url: AIOSRS_Frontend.ajaxurl, + type: 'POST', + data: { + action: 'aiosrs_user_rating', + rating: index, + schemaId, + post_id: AIOSRS_Frontend.post_id, + nonce: AIOSRS_Frontend.user_rating_nonce, + }, + }).success(function (response) { + if (response.success === true) { + const summaryWrap = parent.next( + '.aiosrs-rating-summary-wrap' + ), + rating = response.rating, + avgRating = response['rating-avg'], + reviewCount = response['review-count']; + + summaryWrap.find('.aiosrs-rating').text(avgRating); + summaryWrap + .find('.aiosrs-rating-count') + .text(reviewCount); + if (parent.next('.success-msg').length === 0) { + parent.after( + '' + + AIOSRS_Frontend.success_msg + + '' + ); + } + setTimeout(function () { + parent.parent().find('.success-msg').remove(); + parent.removeClass('disabled'); + }, 5000); + self.update_stars(parent, rating); + } + }); + } + }, + }; + + /* Initializes the AIOSRS Frontend. */ + $(function () { + WPSchemaProFrontend.init(); + }); +})(jQuery); diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/license-form-popup.js b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/license-form-popup.js new file mode 100644 index 00000000..3223b161 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/license-form-popup.js @@ -0,0 +1,26 @@ +/* eslint-env jquery */ +jQuery( document ).ready( function () { + jQuery( '#aiosrs-pro-license-form-btn' ).on( 'click', function ( e ) { + e.preventDefault(); + + jQuery( '#aiosrs-pro-license-form' ).show(); + jQuery( 'body' ).addClass( 'aiosrs-pro-license-form-open' ); + } ); + + jQuery( '#aiosrs-pro-license-form-close-btn' ).on( 'click', function ( e ) { + e.preventDefault(); + + jQuery( '#aiosrs-pro-license-form' ).hide(); + jQuery( 'body' ).removeClass( 'aiosrs-pro-license-form-open' ); + } ); + + jQuery( '#aiosrs-pro-license-form .aiosrs-pro-license-form-overlay' ).on( + 'click', + function ( e ) { + e.preventDefault(); + + jQuery( '#aiosrs-pro-license-form' ).hide(); + jQuery( 'body' ).removeClass( 'aiosrs-pro-license-form-open' ); + } + ); +} ); diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/script.js b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/script.js new file mode 100644 index 00000000..e1a94d92 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/script.js @@ -0,0 +1,783 @@ +/* eslint-env jquery */ +(function ($) { + /** + * AIOSRS Schema + * + * @class AIOSRSSchema + * @since 1.0 + */ + const AIOSRSSchema = { + /** + * Initializes a AIOSRS Schema. + * + * @since 1.0 + * @function init + */ + container: '', + + init() { + const self = this; + + self.container = $( + '#aiosrs-schema-settings, #aiosrs-pro-custom-fields' + ); + + // Init backgrounds. + $(document).ready(function () { + $('.select2-class').select2(); + const selectOption = ['Site Meta', 'Post Meta (Basic Fields)']; + const customOptionGroup = $('#bsf-aiosrs-schema-type').val(); + if ('custom-markup' === customOptionGroup) { + for (let i = 0; i < selectOption.length; i++) { + $( + '#bsf-aiosrs-custom-markup-custom-markup optgroup[label="' + + selectOption[i] + + '"]' + ).remove(); + } + } + const customMarkupSchemId = $( + '#custom-schema-schema-field' + ).val(); + if (customMarkupSchemId) { + for (let i = 0; i < selectOption.length; i++) { + $( + '#custom-markup-' + + customMarkupSchemId + + '-custom-markup-connected optgroup[label="' + + selectOption[i] + + '"]' + ).remove(); + } + } + }); + + self.container.on( + 'change', + 'select.bsf-aiosrs-schema-meta-field', + function () { + const selfFun = $(this), + parent = selfFun.parent(), + value = selfFun.val(); + + const textwrapperCustom = parent.find( + '.bsf-aiosrs-schema-custom-text-wrap' + ); + if ('custom-text' === value) { + textwrapperCustom.removeClass('bsf-hidden-field'); + } else if ( + !textwrapperCustom.hasClass('bsf-hidden-field') + ) { + textwrapperCustom.addClass('bsf-hidden-field'); + } + + const textWrapperFixed = parent.find( + '.bsf-aiosrs-schema-fixed-text-wrap' + ); + if ('fixed-text' === value) { + textWrapperFixed.removeClass('bsf-hidden-field'); + } else if (!textWrapperFixed.hasClass('bsf-hidden-field')) { + textWrapperFixed.addClass('bsf-hidden-field'); + } + + const specificMetaWrapper = parent.find( + '.bsf-aiosrs-schema-specific-field-wrap' + ); + if ('specific-field' === value) { + specificMetaWrapper.removeClass('bsf-hidden-field'); + } else if ( + !specificMetaWrapper.hasClass('bsf-hidden-field') + ) { + specificMetaWrapper.addClass('bsf-hidden-field'); + } + } + ); + + self.container.on( + 'change', + '.bsf-aiosrs-schema-row-rating-type select.bsf-aiosrs-schema-meta-field', + function (e) { + e.preventDefault(); + + $(this) + .closest('.bsf-aiosrs-schema-table') + .find('.bsf-aiosrs-schema-row') + .css('display', ''); + if ('accept-user-rating' === $(this).val()) { + const reviewCountWrap = $(this) + .closest('.bsf-aiosrs-schema-row') + .next('.bsf-aiosrs-schema-row'), + name = reviewCountWrap + .find('.bsf-aiosrs-schema-meta-field') + .attr('name'); + + const selectedSchemaType = jQuery( + '.bsf-aiosrs-review-schema-type' + ).val(); + if (selectedSchemaType) { + const prepareName = + 'bsf-aiosrs-review[' + + selectedSchemaType + + '-review-count]'; + + if (name.indexOf(prepareName) >= 0) { + reviewCountWrap.hide(); + } + } + + if (name.indexOf('[review-count]') >= 0) { + reviewCountWrap.hide(); + } + } + } + ); + self.container + .find('select.bsf-aiosrs-schema-meta-field') + .trigger('change'); + + $('select.bsf-aiosrs-schema-select2').each(function (index, el) { + self.init_target_rule_select2(el); + }); + + self.container.on( + 'click', + '.bsf-repeater-add-new-btn', + function (event) { + event.preventDefault(); + self.add_new_repeater($(this)); + self.prepare_event_schmea_fields(); + } + ); + + self.container.on('click', '.bsf-repeater-close', function (event) { + event.preventDefault(); + self.add_remove_repeater($(this)); + }); + + self.schemaTypeDependency(); + self.bindTooltip(); + if (!$('body').hasClass('post-type-aiosrs-schema')) { + self.field_validation(); + } + }, + field_validation() { + $( + '.wpsp-custom-field-connect, .wpsp-field-close, .bsf-aiosrs-schema-meta-field, image-field-wrap, .aiosrs-pro-custom-field, .wpsp-custom-field-connect' + ).on('click focus change', function () { + $('.bsf-aiosrs-schema-type-wrap').each(function ( + index, + repeater + ) { + let fieldValue = $(repeater) + .find('.wpsp-default-hidden-value') + .val(); + const requiredPath = $(repeater) + .parents('.bsf-aiosrs-schema-row-content') + .prev(); + if (undefined !== fieldValue) { + fieldValue = fieldValue.trim(); + if (fieldValue) { + if ($('body').hasClass('block-editor-page')) { + if ( + !$(repeater).find( + '.wpsp-required-error-field' + ).length + ) { + let metaField; + switch (fieldValue) { + case 'post_title': + metaField = $( + '.editor-post-title__input' + ).val(); + break; + case 'post_content': + metaField = + $( + 'p.block-editor-rich-text__editable' + ).text().length > 1 + ? $( + 'p.block-editor-rich-text__editable' + ).text() + : ''; + break; + case 'post_excerpt': + metaField = $( + '.components-textarea-control__input' + ).val(); + break; + case 'featured_img': + if ( + 'Set featured image' === + $( + '.editor-post-featured-image__toggle' + ).text() + ) { + metaField = ''; + } else { + metaField = $( + '.components-responsive-wrapper__content' + ).attr('src'); + } + break; + default: + requiredPath.removeClass( + 'wpsp-required-error-field' + ); + requiredPath + .find('label') + .removeClass( + 'wpsp-required-error-field' + ); + } + + if (undefined !== metaField) { + if ('' !== metaField) { + requiredPath.removeClass( + 'wpsp-required-error-field' + ); + requiredPath + .find('label') + .removeClass( + 'wpsp-required-error-field' + ); + } else if ( + requiredPath.find('.required') + .length + ) { + requiredPath + .find('label') + .addClass( + 'wpsp-required-error-field' + ); + } + } + } else { + requiredPath.removeClass( + 'wpsp-required-error-field' + ); + requiredPath + .find('label') + .removeClass( + 'wpsp-required-error-field' + ); + } + } else { + requiredPath.removeClass( + 'wpsp-required-error-field' + ); + requiredPath + .find('label') + .removeClass('wpsp-required-error-field'); + } + } else if (requiredPath.find('.required').length) { + requiredPath + .find('label') + .addClass('wpsp-required-error-field'); + } + } + }); + }); + }, + hide_review_count() { + $(this) + .closest('.bsf-aiosrs-schema-table') + .find('.bsf-aiosrs-schema-row') + .css('display', ''); + if ('accept-user-rating' === $(this).val()) { + const reviewCountWrap = $(this) + .closest('.bsf-aiosrs-schema-row') + .next('.bsf-aiosrs-schema-row'), + name = reviewCountWrap + .find('.bsf-aiosrs-schema-meta-field') + .attr('name'); + + const selectedSchemaType = jQuery( + '.bsf-aiosrs-review-schema-type' + ).val(); + if (selectedSchemaType) { + const prepareName = + 'bsf-aiosrs-review[' + + selectedSchemaType + + '-review-count]'; + + if (name.indexOf(prepareName) >= 0) { + reviewCountWrap.hide(); + } + } + + if (name.indexOf('[review-count]') >= 0) { + reviewCountWrap.hide(); + } + } + }, + + add_new_repeater(selector) { + const self = this, + parentWrap = selector.closest('.bsf-aiosrs-schema-type-wrap'), + totalCount = parentWrap.find('.aiosrs-pro-repeater-table-wrap') + .length, + template = parentWrap + .find('.aiosrs-pro-repeater-table-wrap') + .first() + .clone(); + + template + .find( + '.bsf-aiosrs-schema-custom-text-wrap, .bsf-aiosrs-schema-specific-field-wrap' + ) + .each(function () { + if (!$(this).hasClass('bsf-hidden-field')) { + $(this).addClass('bsf-hidden-field'); + } + }); + + template + .find('select.bsf-aiosrs-schema-meta-field') + .each(function () { + $(this).val('none'); + + const fieldName = + 'undefined' !== typeof $(this).attr('name') + ? $(this) + .attr('name') + .replace('[0]', '[' + totalCount + ']') + : '', + fieldClass = + 'undefined' !== typeof $(this).attr('class') + ? $(this) + .attr('class') + .replace('-0-', '-' + totalCount + '-') + : '', + fieldId = + 'undefined' !== typeof $(this).attr('id') + ? $(this) + .attr('id') + .replace('-0-', '-' + totalCount + '-') + : ''; + + $(this).attr('name', fieldName); + $(this).attr('class', fieldClass); + $(this).attr('id', fieldId); + }); + template + .find( + 'input, textarea, select:not(.bsf-aiosrs-schema-meta-field)' + ) + .each(function () { + $(this).val(''); + + const fieldName = + 'undefined' !== typeof $(this).attr('name') + ? $(this) + .attr('name') + .replace('[0]', '[' + totalCount + ']') + : '', + fieldClass = + 'undefined' !== typeof $(this).attr('class') + ? $(this) + .attr('class') + .replace('-0-', '-' + totalCount + '-') + : '', + fieldId = + 'undefined' !== typeof $(this).attr('id') + ? $(this) + .attr('id') + .replace('-0-', '-' + totalCount + '-') + : ''; + + $(this).attr('name', fieldName); + $(this).attr('class', fieldClass); + $(this).attr('id', fieldId); + }); + + template.find('span.select2-container').each(function () { + $(this).remove(); + }); + + template.insertBefore(selector); + template + .find('select.bsf-aiosrs-schema-select2') + .each(function (index, el) { + self.init_target_rule_select2(el); + }); + + AIOSRSSchema.init_date_time_fields(); + }, + + add_remove_repeater(selector) { + const parentWrap = selector.closest('.bsf-aiosrs-schema-type-wrap'), + repeaterCount = parentWrap.find( + '> .aiosrs-pro-repeater-table-wrap' + ).length; + + if (repeaterCount > 1) { + selector.closest('.aiosrs-pro-repeater-table-wrap').remove(); + + if ('aiosrs-pro-custom-fields' === this.container.attr('id')) { + // Reset index to avoid duplicate names. + parentWrap + .find('> .aiosrs-pro-repeater-table-wrap') + .each(function (wrapIndex, repeaterWap) { + $(repeaterWap).each(function ( + elementIndex, + element + ) { + $(element) + .find( + 'input, textarea, select:not(.bsf-aiosrs-schema-meta-field)' + ) + .each(function (elIndex, el) { + const fieldName = + 'undefined' !== + typeof $(el).attr('name') + ? $(el) + .attr('name') + .replace( + /\[\d+]/, + '[' + + wrapIndex + + ']' + ) + : ''; + $(el).attr('name', fieldName); + }); + }); + }); + } + } + }, + + bindTooltip() { + // Call Tooltip + $('.bsf-aiosrs-schema-heading-help').tooltip({ + content() { + return $(this).prop('title'); + }, + tooltipClass: 'bsf-aiosrs-schema-ui-tooltip', + position: { + my: 'center top', + at: 'center bottom+10', + }, + hide: { + duration: 200, + }, + show: { + duration: 200, + }, + }); + }, + + schemaTypeDependency() { + const container = this.container; + this.container.on( + 'change', + 'select[name="bsf-aiosrs-schema-type"]', + function () { + container + .find('.bsf-aiosrs-schema-meta-wrap') + .css('display', 'none'); + const schemaType = $(this).val(); + if ( + 'undefined' !== typeof schemaType && + '' !== schemaType + ) { + container + .find('#bsf-' + schemaType + '-schema-meta-wrap') + .css('display', ''); + } + } + ); + }, + + init_target_rule_select2(selector) { + $(selector).select2({ + placeholder: 'Search Fields...', + ajax: { + url: ajaxurl, + dataType: 'json', + method: 'post', + delay: 250, + data(params) { + return { + nonce_ajax: AIOSRS_Rating.specified_field, + q: params.term, // search term + page: params.page, + action: 'bsf_get_specific_meta_fields', + }; + }, + processResults(data) { + return { + results: data, + }; + }, + cache: true, + }, + minimumInputLength: 2, + }); + }, + + get_review_item_type_html(itemType) { + jQuery + .post({ + url: ajaxurl, + data: { + action: 'fetch_item_type_html', + itemType, + nonce: AIOSRS_Rating.security, + post_id: jQuery('#post_ID').val(), + }, + }) + .done(function (response) { + $('.bsf-review-item-type-field').remove(); + $(response).insertAfter( + jQuery('#bsf-aiosrs-review-schema-type') + .parent() + .parent() + .closest('tr') + ); + $('select.bsf-aiosrs-schema-select2').each(function ( + index, + el + ) { + AIOSRSSchema.init_target_rule_select2(el); + }); + + const itemSpecificType = + '.bsf-aiosrs-review-' + itemType + '-rating'; + $(itemSpecificType).each(function () { + $(this) + .closest('.bsf-aiosrs-schema-table') + .find('.bsf-aiosrs-schema-row') + .css('display', ''); + if ('accept-user-rating' === $(this).val()) { + const reviewCountWrap = $(this) + .closest('.bsf-aiosrs-schema-row') + .next('.bsf-aiosrs-schema-row'), + name = reviewCountWrap + .find('.bsf-aiosrs-schema-meta-field') + .attr('name'); + + const selectedSchemaType = jQuery( + '.bsf-aiosrs-review-schema-type' + ).val(); + if (selectedSchemaType) { + const prepareName = + 'bsf-aiosrs-review[' + + selectedSchemaType + + '-review-count]'; + + if (name.indexOf(prepareName) >= 0) { + reviewCountWrap.hide(); + } + } + + if (name.indexOf('[review-count]') >= 0) { + reviewCountWrap.hide(); + } + } + }); + + AIOSRSSchema.init_date_time_fields(); + AIOSRSSchema.prepare_event_schmea_fields(); + }) + .fail(function () { }); + }, + + prepare_event_schmea_fields() { + $( + '.wpsp-dropdown-event-status, .wpsp-dropdown-bsf-aiosrs-event-event-status' + ).change(function () { + const parent = $(this).parents( + '.bsf-aiosrs-schema-meta-wrap, .aiosrs-pro-meta-fields-wrap' + ); + + parent + .find( + 'td.wpsp-event-status-rescheduled, td.bsf-aiosrs-review-bsf-aiosrs-event-previous-date' + ) + .hide(); + if (!this.value) { + this.value = 'EventScheduled'; + } + + if ('EventRescheduled' === this.value) { + parent + .find( + 'td.wpsp-event-status-rescheduled, td.bsf-aiosrs-review-bsf-aiosrs-event-previous-date' + ) + .show(); + } + + const eventStatus = $( + '.wpsp-dropdown-event-attendance-mode, .wpsp-dropdown-bsf-aiosrs-event-event-attendance-mode' + ).val(); + + if ( + 'EventMovedOnline' === this.value || + 'OfflineEventAttendanceMode' !== eventStatus + ) { + parent.find('td.wpsp-event-status-offline').hide(); + parent.find('td.wpsp-event-status-online').show(); + parent.find('td.wpsp-online-event-timezone').show(); + parent + .find( + '.wpsp-dropdown-event-attendance-mode, .wpsp-dropdown-bsf-aiosrs-event-event-attendance-mode' + ) + .val('OnlineEventAttendanceMode'); + } else { + parent.find('td.wpsp-event-status-offline').show(); + parent.find('td.wpsp-event-status-online').hide(); + parent.find('td.wpsp-online-event-timezone').hide(); + } + }); + $( + '.wpsp-dropdown-event-attendance-mode, .wpsp-dropdown-bsf-aiosrs-event-event-attendance-mode' + ).change(function () { + const parent = $(this).parents( + '.bsf-aiosrs-schema-meta-wrap, .aiosrs-pro-meta-fields-wrap' + ); + parent.find('td.wpsp-event-status-rescheduled').hide(); + const eventStatus = $( + '.wpsp-dropdown-event-status, .wpsp-dropdown-bsf-aiosrs-event-event-status' + ).val(); + + if ('EventMovedOnline' !== eventStatus) { + parent.find('td.wpsp-event-status-offline').show(); + parent.find('td.wpsp-event-status-online').hide(); + parent.find('td.wpsp-online-event-timezone').hide(); + } + + if ('OfflineEventAttendanceMode' !== this.value) { + parent.find('td.wpsp-event-status-offline').hide(); + parent.find('td.wpsp-event-status-online').show(); + parent.find('td.wpsp-online-event-timezone').show(); + } + + if ('MixedEventAttendanceMode' === this.value) { + parent.find('td.wpsp-event-status-offline').show(); + parent.find('td.wpsp-event-status-online').show(); + parent.find('td.wpsp-online-event-timezone').show(); + } + }); + + $( + '.wpsp-dropdown-event-attendance-mode, .wpsp-dropdown-bsf-aiosrs-event-event-attendance-mode' + ).trigger('change'); + }, + + init_date_time_fields() { + $( + '.wpsp-datetime-local-field, .wpsp-date-field, .wpsp-time-duration-field' + ).each(function () { + $(this).removeClass('hasDatepicker'); + }); + + const startDateSelectors = + '.wpsp-date-published-date, .wpsp-datetime-local-event-start-date, .wpsp-date-start-date, .wpsp-datetime-local-start-date'; + const endDateSelectors = + '.wpsp-date-modified-date, .wpsp-datetime-local-event-end-date, .wpsp-date-end-date, .wpsp-datetime-local-end-date'; + + $(document).on('focus', '.wpsp-time-duration-field', function () { + $(this).timepicker({ + timeFormat: 'HH:mm:ss', + hourMin: 0, + hourMax: 99, + oneLine: true, + currentText: 'Clear', + onSelect() { + updateTimeFormat(this); + }, + }); + }); + + $(document).on( + 'focus', + '.wpsp-datetime-local-field, .wpsp-date-field', + function () { + $(this).datetimepicker({ + dateFormat: 'yy-mm-dd', + timeFormat: 'hh:mm TT', + changeMonth: true, + changeYear: true, + showOn: 'focus', + showButtonPanel: true, + closeText: 'Done', + currentText: 'Clear', + yearRange: '-100:+10', // last hundred year + onClose(dateText, inst) { + const thisEle = '#' + inst.id; + if (jQuery(thisEle).is(startDateSelectors)) { + $(endDateSelectors).datetimepicker( + 'option', + 'minDate', + new Date(dateText) + ); + } else if (jQuery(thisEle).is(endDateSelectors)) { + $(startDateSelectors).datetimepicker( + 'option', + 'maxDate', + new Date(dateText) + ); + } + jQuery(thisEle) + .parents('.wpsp-local-fields') + .find('.wpsp-default-hidden-value') + .val(dateText); + }, + }); + } + ); + + $.datepicker._gotoToday = function (id) { + $(id).datepicker('setDate', '').datepicker('hide').blur(); + }; + + function updateTimeFormat(thisEle) { + const durationWrap = $(thisEle).closest( + '.aiosrs-pro-custom-field-time-duration' + ); + const inputField = durationWrap.find('.time-duration-field'); + let value = $(thisEle).val(); + value = value.replace(/:/, 'H'); + value = value.replace(/:/, 'M'); + value = 'PT' + value + 'S'; + inputField.val(value); + + // Post/pages related support. + const parent = $(thisEle).parents('.wpsp-local-fields'); + parent.find('.wpsp-default-hidden-value').val(value); + } + }, + }; + + /* Initializes the AIOSRS Schema. */ + $(function () { + AIOSRSSchema.init(); + + if (!$('body').hasClass('aiosrs-pro-setup')) { + AIOSRSSchema.init_date_time_fields(); + } + }); + + $(document).ready(function () { + let parent = $('.aiosrs-pro-meta-fields-wrap'); + parent.each(function (index, value) { + let labelMarkup = $(value).find('.wpsp-field-label'); + let label = labelMarkup.text(); + if ('Image License' === label.trim()) { + labelMarkup.attr('style', 'width:6%'); + } + }); + $('#bsf-aiosrs-review-schema-type').change(function () { + const itemVal = $(this).val().trim(); + if (!itemVal) { + $('.bsf-review-item-type-field').remove(); + return; + } + AIOSRSSchema.get_review_item_type_html(itemVal); + }); + $('#bsf-aiosrs-review-schema-type').change(); + + AIOSRSSchema.prepare_event_schmea_fields(); + }); +})(jQuery); diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/settings-script.js b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/settings-script.js new file mode 100644 index 00000000..75b53524 --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/settings-script.js @@ -0,0 +1,415 @@ +/* eslint-env jquery */ +(function ($) { + const { __ } = wp.i18n; + const temp = { + person: __('Website Owner Name'), + organization: __('Organization Name', 'wp-schema-pro'), + Webshop: __('Webshop Name', 'wp-schema-pro'), + personblog: __('Website Owner Name', 'wp-schema-pro'), + Smallbusiness: __('Blog Website Name', 'wp-schema-pro'), + Otherbusiness: __('Business Name', 'wp-schema-pro'), + }; + + /** + * AIOSRS Frontend + * + * @class WPSchemaProSettings + * @since 1.0 + */ + const WPSchemaProSettings = { + init() { + const self = this; + this.customFieldDependecy(); + this.customImageSelect(); + this.initRepeater(); + this.toolTips(); + this.regenerateSchema(); + + $('select.wp-select2').each(function (index, el) { + self.init_target_rule_select2(el); + }); + }, + regenerateSchema() { + $('#wpsp-regenerate-schema').click(function () { + $(this).next('span.spinner').addClass('is-active'); + + jQuery + .ajax({ + url: ajaxurl, + type: 'post', + dataType: 'json', + data: { + action: 'regenerate_schema', + nonce: $(this).data('nonce'), + }, + }) + .success(function () { + $('#wpsp-regenerate-schema') + .next('span.spinner') + .removeClass('is-active'); + + $('#wpsp-regenerate-notice') + .show() + .delay(2000) + .fadeOut(); + }); + }); + }, + toolTips() { + $(document).on( + 'click', + '.wp-schema-pro-tooltip-icon', + function (e) { + e.preventDefault(); + $('.wp-schema-pro-tooltip-wrapper').removeClass('activate'); + $(this).parent().addClass('activate'); + } + ); + + $(document).on('click', function (e) { + if ( + !$(e.target).hasClass( + 'wp-schema-pro-tooltip-description' + ) && + !$(e.target).hasClass('wp-schema-pro-tooltip-icon') && + $(e.target).closest('.wp-schema-pro-tooltip-description') + .length === 0 + ) { + $('.wp-schema-pro-tooltip-wrapper').removeClass('activate'); + } + }); + }, + + customImageSelect() { + let fileFrame; + window.inputWrapper = ''; + + $(document.body).on( + 'click', + '.image-field-wrap .aiosrs-image-select', + function (e) { + e.preventDefault(); + + window.inputWrapper = $(this).closest('td'); + + // Create the media frame. + fileFrame = wp.media({ + button: { + text: 'Select Image', + close: false, + }, + states: [ + new wp.media.controller.Library({ + title: 'Select Custom Image', + library: wp.media.query({ type: 'image' }), + multiple: false, + }), + ], + }); + + // When an image is selected, run a callback. + fileFrame.on('select', function () { + const attachment = fileFrame + .state() + .get('selection') + .first() + .toJSON(); + + const image = window.inputWrapper.find( + '.image-field-wrap img' + ); + if (image.length === 0) { + window.inputWrapper + .find('.image-field-wrap') + .append( + '' + ); + } else { + image.attr('src', attachment.url); + } + window.inputWrapper + .find('.image-field-wrap') + .addClass('bsf-custom-image-selected'); + window.inputWrapper + .find('.single-image-field') + .val(attachment.id); + + fileFrame.close(); + }); + + fileFrame.open(); + } + ); + + $(document).on('click', '.aiosrs-image-remove', function (e) { + e.preventDefault(); + const parent = $(this).closest('td'); + parent + .find('.image-field-wrap') + .removeClass('bsf-custom-image-selected'); + parent.find('.single-image-field').val(''); + parent.find('.image-field-wrap img').removeAttr('src'); + }); + window.inputWrapper = ''; + }, + + customFieldDependecy() { + jQuery(document).on( + 'change', + '#post-body-content .wp-schema-pro-custom-option-select, .aiosrs-pro-setup-wizard-content.general-setting-content-wrap .wp-schema-pro-custom-option-select', + function () { + const customWrap = jQuery(this).next( + '.custom-field-wrapper' + ); + + customWrap.css('display', 'none'); + if ('custom' === jQuery(this).val()) { + customWrap.css('display', ''); + } + } + ); + + jQuery(document).on( + 'change', + 'select[name="wp-schema-pro-general-settings[site-represent]"]', + function () { + const wrapper = jQuery(this).closest('table'), + logoWrap = wrapper.find( + '.wp-schema-pro-site-logo-wrap' + ), + companyNameWrap = wrapper.find( + '.wp-schema-pro-site-name-wrap' + ), + personNameWrap = wrapper.find( + '.wp-schema-pro-person-name-wrap' + ); + + companyNameWrap.css('display', 'none'); + personNameWrap.css('display', 'none'); + if ('' !== jQuery(this).val()) { + if ( + 'organization' === jQuery(this).val() || + 'Webshop' === jQuery(this).val() || + 'Smallbusiness' === jQuery(this).val() || + 'Otherbusiness' === jQuery(this).val() + ) { + logoWrap.css('display', ''); + companyNameWrap.css('display', ''); + } else { + personNameWrap.css('display', ''); + logoWrap.css('display', ''); + } + } + } + ); + jQuery(document).on( + 'change', + 'select[name="wp-schema-pro-general-settings[site-represent]"]', + function () { + const organizationType = jQuery(this).val(); + if ('' !== jQuery(this).val()) { + if (organizationType in temp) { + $('.wpsp-organization-label').text( + temp[organizationType] + ); + } + } + } + ); + jQuery(document).on( + 'change', + 'select[name="wp-schema-pro-corporate-contact[contact-type]"]', + function () { + const wrapper = jQuery(this).closest('table'), + contactPointWrap = wrapper.find( + '.wp-schema-pro-other-wrap' + ); + contactPointWrap.css('display', 'none'); + if ('' !== jQuery(this).val()) { + if ('other' === jQuery(this).val()) { + contactPointWrap.css('display', ''); + } + } + } + ); + $('#add-row').on('click', function () { + const row = $('.empty-row.screen-reader-text').clone(true); + row.removeClass('empty-row screen-reader-text'); + row.insertBefore('#repeatable-fieldset-one >tr:last'); + return false; + }); + + $('.remove-row').on('click', function () { + $(this).parents('tr').remove(); + return false; + }); + }, + + initRepeater() { + $(document).on( + 'click', + '.bsf-repeater-add-new-btn', + function (event) { + event.preventDefault(); + + const selector = $(this), + parentWrap = selector.closest( + '.bsf-aiosrs-schema-type-wrap' + ), + totalCount = parentWrap.find( + '.aiosrs-pro-repeater-table-wrap' + ).length, + template = parentWrap + .find('.aiosrs-pro-repeater-table-wrap') + .first() + .clone(); + + template.find('input, textarea, select').each(function () { + $(this).val(''); + + const fieldName = + 'undefined' !== typeof $(this).attr('name') + ? $(this) + .attr('name') + .replace( + '[0]', + '[' + totalCount + ']' + ) + : '', + fieldClass = + 'undefined' !== typeof $(this).attr('class') + ? $(this) + .attr('class') + .replace( + '-0-', + '-' + totalCount + '-' + ) + : '', + fieldId = + 'undefined' !== typeof $(this).attr('id') + ? $(this) + .attr('id') + .replace( + '-0-', + '-' + totalCount + '-' + ) + : ''; + + $(this).attr('name', fieldName); + $(this).attr('class', fieldClass); + $(this).attr('id', fieldId); + }); + + template.insertBefore(selector); + } + ); + + $(document).on('click', '.bsf-repeater-close', function (event) { + event.preventDefault(); + + const selector = $(this), + parentWrap = selector.closest( + '.bsf-aiosrs-schema-type-wrap' + ), + repeaterCount = parentWrap.find( + '> .aiosrs-pro-repeater-table-wrap' + ).length; + + if (repeaterCount > 1) { + selector + .closest('.aiosrs-pro-repeater-table-wrap') + .remove(); + } + }); + }, + init_target_rule_select2(selector) { + $(selector).select2({ + placeholder: 'Search Fields...', + + ajax: { + url: ajaxurl, + dataType: 'json', + method: 'post', + delay: 250, + data(params) { + return { + nonce_ajax: AIOSRS_search.search_field, + q: params.term, // search term + page: params.page, + action: 'bsf_get_specific_pages', + }; + }, + processResults(data) { + return { + results: data, + }; + }, + cache: true, + }, + minimumInputLength: 2, + }); + }, + }; + const loadDefaultValues = function () { + const field = jQuery( + 'select[name="wp-schema-pro-general-settings[site-represent]"]' + ), + wrapper = field.closest('table'), + logoWrap = wrapper.find('.wp-schema-pro-site-logo-wrap'), + companyNameWrap = wrapper.find('.wp-schema-pro-site-name-wrap'), + personNameWrap = wrapper.find('.wp-schema-pro-person-name-wrap'); + + companyNameWrap.css('display', 'none'); + personNameWrap.css('display', 'none'); + if ('' !== field.val()) { + if ( + 'organization' === field.val() || + 'Webshop' === field.val() || + 'Smallbusiness' === field.val() || + 'Otherbusiness' === field.val() + ) { + logoWrap.css('display', ''); + companyNameWrap.css('display', ''); + } else { + personNameWrap.css('display', ''); + logoWrap.css('display', ''); + } + } + }; + const loadDefaultOrganizationLabel = function () { + const field = jQuery( + 'select[name="wp-schema-pro-general-settings[site-represent]"]' + ), + organizationType = field.val(); + if ('' !== field) { + if (organizationType in temp) { + $('.wpsp-organization-label').text(temp[organizationType]); + } + } + }; + + $(document).ready(function () { + $('.wp-select2').select2(); + $('.wpsp-setup-configuration-settings').select2(); + loadDefaultValues(); + loadDefaultOrganizationLabel(); + $('#add-row').on('click', function () { + const row = $('.empty-row.screen-reader-text').clone(true); + row.removeClass('empty-row screen-reader-text'); + row.insertBefore('#repeatable-fieldset-one tbody>tr:last'); + return false; + }); + + $('.remove-row').on('click', function () { + $(this).parents('tr').remove(); + return false; + }); + }); + + /* Initializes the AIOSRS Frontend. */ + $(function () { + WPSchemaProSettings.init(); + }); +})(jQuery); diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/setup-wizard.js b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/setup-wizard.js new file mode 100644 index 00000000..ed8f19cd --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/setup-wizard.js @@ -0,0 +1,32 @@ +/* eslint-env jquery */ +/** + * File setup-wizard.js + * + * Handles Color Picker + * + * @package + */ + +( function ( $ ) { + jQuery( document ).ready( function () { + $( document ).on( + 'click', + '.aiosrs-pro-schema-temp-wrap', + function ( e ) { + e.preventDefault(); + + $( '.aiosrs-pro-schema-temp-wrap' ).removeClass( 'selected' ); + $( '.aiosrs-pro-setup-actions' ) + .find( '.button-next' ) + .removeAttr( 'disabled' ); + $( this ).addClass( 'selected' ); + + const type = $( this ).data( 'schema-type' ), + title = $( this ).data( 'schema-title' ); + + $( document ).find( '.bsf-aiosrs-schema-type' ).val( type ); + $( document ).find( '.bsf-aiosrs-schema-title' ).val( title ); + } + ); + } ); +} )( jQuery ); diff --git a/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/timpepicker.min.js b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/timpepicker.min.js new file mode 100644 index 00000000..0200bf1c --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/admin/assets/js/timpepicker.min.js @@ -0,0 +1,4 @@ +/*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20 +* http://trentrichardson.com/examples/timepicker +* Copyright (c) 2016 Trent Richardson; Licensed MIT */ +!function (a) { "function" == typeof define && define.amd ? define(["jquery", "jquery-ui"], a) : a(jQuery) }(function ($) { if ($.ui.timepicker = $.ui.timepicker || {}, !$.ui.timepicker.version) { $.extend($.ui, { timepicker: { version: "1.6.3" } }); var Timepicker = function () { this.regional = [], this.regional[""] = { currentText: "Now", closeText: "Done", amNames: ["AM", "A"], pmNames: ["PM", "P"], timeFormat: "HH:mm", timeSuffix: "", timeOnlyTitle: "Choose Time", timeText: "Time", hourText: "Hour", minuteText: "Minute", secondText: "Second", millisecText: "Millisecond", microsecText: "Microsecond", timezoneText: "Time Zone", isRTL: !1 }, this._defaults = { showButtonPanel: !0, timeOnly: !1, timeOnlyShowDate: !1, showHour: null, showMinute: null, showSecond: null, showMillisec: null, showMicrosec: null, showTimezone: null, showTime: !0, stepHour: 1, stepMinute: 1, stepSecond: 1, stepMillisec: 1, stepMicrosec: 1, hour: 0, minute: 0, second: 0, millisec: 0, microsec: 0, timezone: null, hourMin: 0, minuteMin: 0, secondMin: 0, millisecMin: 0, microsecMin: 0, hourMax: 23, minuteMax: 59, secondMax: 59, millisecMax: 999, microsecMax: 999, minDateTime: null, maxDateTime: null, maxTime: null, minTime: null, onSelect: null, hourGrid: 0, minuteGrid: 0, secondGrid: 0, millisecGrid: 0, microsecGrid: 0, alwaysSetTime: !0, separator: " ", altFieldTimeOnly: !0, altTimeFormat: null, altSeparator: null, altTimeSuffix: null, altRedirectFocus: !0, pickerTimeFormat: null, pickerTimeSuffix: null, showTimepicker: !0, timezoneList: null, addSliderAccess: !1, sliderAccessArgs: null, controlType: "slider", oneLine: !1, defaultValue: null, parse: "strict", afterInject: null }, $.extend(this._defaults, this.regional[""]) }; $.extend(Timepicker.prototype, { $input: null, $altInput: null, $timeObj: null, inst: null, hour_slider: null, minute_slider: null, second_slider: null, millisec_slider: null, microsec_slider: null, timezone_select: null, maxTime: null, minTime: null, hour: 0, minute: 0, second: 0, millisec: 0, microsec: 0, timezone: null, hourMinOriginal: null, minuteMinOriginal: null, secondMinOriginal: null, millisecMinOriginal: null, microsecMinOriginal: null, hourMaxOriginal: null, minuteMaxOriginal: null, secondMaxOriginal: null, millisecMaxOriginal: null, microsecMaxOriginal: null, ampm: "", formattedDate: "", formattedTime: "", formattedDateTime: "", timezoneList: null, units: ["hour", "minute", "second", "millisec", "microsec"], support: {}, control: null, setDefaults: function (a) { return extendRemove(this._defaults, a || {}), this }, _newInst: function ($input, opts) { var tp_inst = new Timepicker, inlineSettings = {}, fns = {}, overrides, i; for (var attrName in this._defaults) if (this._defaults.hasOwnProperty(attrName)) { var attrValue = $input.attr("time:" + attrName); if (attrValue) try { inlineSettings[attrName] = eval(attrValue) } catch (err) { inlineSettings[attrName] = attrValue } } overrides = { beforeShow: function (a, b) { return $.isFunction(tp_inst._defaults.evnts.beforeShow) ? tp_inst._defaults.evnts.beforeShow.call($input[0], a, b, tp_inst) : void 0 }, onChangeMonthYear: function (a, b, c) { $.isFunction(tp_inst._defaults.evnts.onChangeMonthYear) && tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], a, b, c, tp_inst) }, onClose: function (a, b) { tp_inst.timeDefined === !0 && "" !== $input.val() && tp_inst._updateDateTime(b), $.isFunction(tp_inst._defaults.evnts.onClose) && tp_inst._defaults.evnts.onClose.call($input[0], a, b, tp_inst) } }; for (i in overrides) overrides.hasOwnProperty(i) && (fns[i] = opts[i] || this._defaults[i] || null); tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, { evnts: fns, timepicker: tp_inst }), tp_inst.amNames = $.map(tp_inst._defaults.amNames, function (a) { return a.toUpperCase() }), tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (a) { return a.toUpperCase() }), tp_inst.support = detectSupport(tp_inst._defaults.timeFormat + (tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : "") + (tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : "")), "string" == typeof tp_inst._defaults.controlType ? ("slider" === tp_inst._defaults.controlType && "undefined" == typeof $.ui.slider && (tp_inst._defaults.controlType = "select"), tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType]) : tp_inst.control = tp_inst._defaults.controlType; var timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840]; null !== tp_inst._defaults.timezoneList && (timezoneList = tp_inst._defaults.timezoneList); var tzl = timezoneList.length, tzi = 0, tzv = null; if (tzl > 0 && "object" != typeof timezoneList[0]) for (; tzl > tzi; tzi++)tzv = timezoneList[tzi], timezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) }; return tp_inst._defaults.timezoneList = timezoneList, tp_inst.timezone = null !== tp_inst._defaults.timezone ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) : -1 * (new Date).getTimezoneOffset(), tp_inst.hour = tp_inst._defaults.hour < tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin : tp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour, tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin : tp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute, tp_inst.second = tp_inst._defaults.second < tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin : tp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second, tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin : tp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec, tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin : tp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec, tp_inst.ampm = "", tp_inst.$input = $input, tp_inst._defaults.altField && (tp_inst.$altInput = $(tp_inst._defaults.altField), tp_inst._defaults.altRedirectFocus === !0 && tp_inst.$altInput.css({ cursor: "pointer" }).focus(function () { $input.trigger("focus") })), (0 === tp_inst._defaults.minDate || 0 === tp_inst._defaults.minDateTime) && (tp_inst._defaults.minDate = new Date), (0 === tp_inst._defaults.maxDate || 0 === tp_inst._defaults.maxDateTime) && (tp_inst._defaults.maxDate = new Date), void 0 !== tp_inst._defaults.minDate && tp_inst._defaults.minDate instanceof Date && (tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime())), void 0 !== tp_inst._defaults.minDateTime && tp_inst._defaults.minDateTime instanceof Date && (tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime())), void 0 !== tp_inst._defaults.maxDate && tp_inst._defaults.maxDate instanceof Date && (tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime())), void 0 !== tp_inst._defaults.maxDateTime && tp_inst._defaults.maxDateTime instanceof Date && (tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime())), tp_inst.$input.bind("focus", function () { tp_inst._onFocus() }), tp_inst }, _addTimePicker: function (a) { var b = $.trim(this.$altInput && this._defaults.altFieldTimeOnly ? this.$input.val() + " " + this.$altInput.val() : this.$input.val()); this.timeDefined = this._parseTime(b), this._limitMinMaxDateTime(a, !1), this._injectTimePicker(), this._afterInject() }, _parseTime: function (a, b) { if (this.inst || (this.inst = $.datepicker._getInst(this.$input[0])), b || !this._defaults.timeOnly) { var c = $.datepicker._get(this.inst, "dateFormat"); try { var d = parseDateTimeInternal(c, this._defaults.timeFormat, a, $.datepicker._getFormatConfig(this.inst), this._defaults); if (!d.timeObj) return !1; $.extend(this, d.timeObj) } catch (e) { return $.timepicker.log("Error parsing the date/time string: " + e + "\ndate/time string = " + a + "\ntimeFormat = " + this._defaults.timeFormat + "\ndateFormat = " + c), !1 } return !0 } var f = $.datepicker.parseTime(this._defaults.timeFormat, a, this._defaults); return f ? ($.extend(this, f), !0) : !1 }, _afterInject: function () { var a = this.inst.settings; $.isFunction(a.afterInject) && a.afterInject.call(this) }, _injectTimePicker: function () { var a = this.inst.dpDiv, b = this.inst.settings, c = this, d = "", e = "", f = null, g = {}, h = {}, i = null, j = 0, k = 0; if (0 === a.find("div.ui-timepicker-div").length && b.showTimepicker) { var l = " ui_tpicker_unit_hide", m = '
              ' + b.timeText + '
              "; for (j = 0, k = this.units.length; k > j; j++) { if (d = this.units[j], e = d.substr(0, 1).toUpperCase() + d.substr(1), f = null !== b["show" + e] ? b["show" + e] : this.support[d], g[d] = parseInt(b[d + "Max"] - (b[d + "Max"] - b[d + "Min"]) % b["step" + e], 10), h[d] = 0, m += '
              ' + b[d + "Text"] + '
              ', f && b[d + "Grid"] > 0) { if (m += '
              ', "hour" === d) for (var n = b[d + "Min"]; n <= g[d]; n += parseInt(b[d + "Grid"], 10)) { h[d]++; var o = $.datepicker.formatTime(this.support.ampm ? "hht" : "HH", { hour: n }, b); m += '" } else for (var p = b[d + "Min"]; p <= g[d]; p += parseInt(b[d + "Grid"], 10))h[d]++, m += '"; m += "
              ' + o + "' + (10 > p ? "0" : "") + p + "
              " } m += "
              " } var q = null !== b.showTimezone ? b.showTimezone : this.support.timezone; m += '
              ' + b.timezoneText + "
              ", m += '
              ', m += "
              "; var r = $(m); for (b.timeOnly === !0 && (r.prepend('
              ' + b.timeOnlyTitle + "
              "), a.find(".ui-datepicker-header, .ui-datepicker-calendar").hide()), j = 0, k = c.units.length; k > j; j++)d = c.units[j], e = d.substr(0, 1).toUpperCase() + d.substr(1), f = null !== b["show" + e] ? b["show" + e] : this.support[d], c[d + "_slider"] = c.control.create(c, r.find(".ui_tpicker_" + d + "_slider"), d, c[d], b[d + "Min"], g[d], b["step" + e]), f && b[d + "Grid"] > 0 && (i = 100 * h[d] * b[d + "Grid"] / (g[d] - b[d + "Min"]), r.find(".ui_tpicker_" + d + " table").css({ width: i + "%", marginLeft: b.isRTL ? "0" : i / (-2 * h[d]) + "%", marginRight: b.isRTL ? i / (-2 * h[d]) + "%" : "0", borderCollapse: "collapse" }).find("td").click(function (a) { var b = $(this), e = b.html(), f = parseInt(e.replace(/[^0-9]/g), 10), g = e.replace(/[^apm]/gi), h = b.data("for"); "hour" === h && (-1 !== g.indexOf("p") && 12 > f ? f += 12 : -1 !== g.indexOf("a") && 12 === f && (f = 0)), c.control.value(c, c[h + "_slider"], d, f), c._onTimeChange(), c._onSelectHandler() }).css({ cursor: "pointer", width: 100 / h[d] + "%", textAlign: "center", overflow: "hidden" })); if (this.timezone_select = r.find(".ui_tpicker_timezone").append("").find("select"), $.fn.append.apply(this.timezone_select, $.map(b.timezoneList, function (a, b) { return $("
            '; + } + + /** + * Introduction step. + */ + public function choose_schema_type() { + ?> +

            +
            + + + + + + +
            > + + +
            + +

            + + +

            +
            + get_next_step_link(); + $title = isset( $_POST['bsf-aiosrs-schema-title'] ) ? sanitize_text_field( $_POST['bsf-aiosrs-schema-title'] ) : 0; + $type = isset( $_POST['bsf-aiosrs-schema-type'] ) ? sanitize_text_field( $_POST['bsf-aiosrs-schema-type'] ) : 0; + + $default_fields = array(); + if ( isset( BSF_AIOSRS_Pro_Schema::$schema_meta_fields[ 'bsf-aiosrs-' . $type ]['subkeys'] ) ) { + $default_data = BSF_AIOSRS_Pro_Schema::$schema_meta_fields[ 'bsf-aiosrs-' . $type ]['subkeys']; + foreach ( $default_data as $key => $value ) { + if ( 'repeater' === $value['type'] ) { + foreach ( $value['fields'] as $subkey => $subvalue ) { + if ( isset( $subvalue['default'] ) && 'none' !== $subvalue['default'] ) { + $default_fields[ $key ][0][ $subkey ] = $subvalue['default']; + } else { + $default_fields[ $key ][0][ $subkey ] = 'create-field'; + } + } + } else { + if ( isset( $value['default'] ) && 'none' !== $value['default'] ) { + $default_fields[ $key ] = $value['default']; + } else { + $default_fields[ $key ] = 'create-field'; + } + } + } + } + + $postarr = array( + 'post_type' => 'aiosrs-schema', + 'post_title' => $title, + 'post_status' => 'publish', + 'meta_input' => array( + 'bsf-aiosrs-schema-type' => $type, + 'bsf-aiosrs-' . $type => $default_fields, + ), + ); + $post_id = wp_insert_post( $postarr ); + + if ( ! is_wp_error( $post_id ) ) { + $redirect_url = add_query_arg( 'schema-id', $post_id, $redirect_url ); + } + + wp_safe_redirect( esc_url_raw( $redirect_url ) ); + exit; + } + + /** + * Locale settings + */ + public function implement_on_callback() { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + $schema_id = 0; + $title = ''; + $redirect_url = $this->get_next_step_link(); + + if ( isset( $_GET['schema-id'] ) && ! empty( $_GET['schema-id'] ) ) { + $schema_id = intval( $_GET['schema-id'] ); + $redirect_url = add_query_arg( 'schema-id', $schema_id, $redirect_url ); + $title = get_the_title( $schema_id ); + } + + $meta_values = array( + 'include-locations' => array( + 'rule' => array( 'basic-singulars' ), + ), + 'exclude-locations' => array(), + ); + ?> + +

            + +

            +
            + + + + + + + + + + +
            + + + + __( 'Display Rules', 'wp-schema-pro' ), + 'value' => '[{"type":"basic-global","specific":null}]', + 'tags' => 'site,enable,target,pages', + 'rule_type' => 'display', + 'add_rule_label' => __( 'Add “AND†Rule', 'wp-schema-pro' ), + ), + $meta_values['include-locations'] + ); + ?> +
            + + + + __( 'Exclude On', 'wp-schema-pro' ), + 'value' => '[]', + 'tags' => 'site,enable,target,pages', + 'add_rule_label' => __( 'Add “OR†Rule', 'wp-schema-pro' ), + 'rule_type' => 'exclude', + ), + $meta_values['exclude-locations'] + ); + ?> +
            +

            + + +

            +
            + get_next_step_link(); + if ( $schema_id ) { + + $redirect_url = add_query_arg( 'schema-id', $schema_id, $redirect_url ); + update_post_meta( $schema_id, 'bsf-aiosrs-schema-location', $enabled_on ); + update_post_meta( $schema_id, 'bsf-aiosrs-schema-exclusion', $exclude_from ); + } + + wp_safe_redirect( esc_url_raw( $redirect_url ) ); + exit; + } + + /** + * Get Location rules of schema for Custom meta box. + * + * @param array $enabled_on Enabled on rules. + * @param array $exclude_from Exlcude on rules. + * @return array + */ + public static function get_display_rules_for_meta_box( $enabled_on, $exclude_from ) { + $locations = array(); + $enabled_location = array(); + $exclude_location = array(); + + $args = array( + 'public' => true, + '_builtin' => true, + ); + $post_types = get_post_types( $args ); + unset( $post_types['attachment'] ); + + $args['_builtin'] = false; + $custom_post_type = get_post_types( $args ); + $post_types = array_merge( $post_types, $custom_post_type ); + + if ( ! empty( $enabled_on ) && isset( $enabled_on['rule'] ) ) { + $enabled_location = $enabled_on['rule']; + } + if ( ! empty( $exclude_from ) && isset( $exclude_from['rule'] ) ) { + $exclude_location = $exclude_from['rule']; + } + + if ( in_array( 'specifics', $enabled_location, true ) || ( in_array( 'basic-singulars', $enabled_location, true ) && ! in_array( 'basic-singulars', $exclude_location, true ) ) ) { + foreach ( $post_types as $post_type ) { + $locations[ $post_type ] = 1; + } + } else { + foreach ( $post_types as $post_type ) { + $key = $post_type . '|all'; + if ( in_array( $key, $enabled_location, true ) && ! in_array( $key, $exclude_location, true ) ) { + $locations[ $post_type ] = 1; + } + } + } + return $locations; + } + + /** + * Final step. + */ + public function schema_ready() { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + + $schema_id = 0; + $title = ''; + + if ( isset( $_GET['schema-id'] ) && ! empty( $_GET['schema-id'] ) ) { + $schema_id = intval( $_GET['schema-id'] ); + $title = get_the_title( $schema_id ); + } + + ?> +

            + +
            +
            + +

            + %s Schema has been added and enabled on selected target locations.', 'wp-schema-pro' ), + esc_html( $title ) + ); + ?> +

            +

            +
            +
            +
            + +

            + + + + + +
            + +
            + +
            +
            + post_type; + $enqueue_admin_script = BSF_AIOSRS_Pro_Helper::bsf_schema_pro_enqueue_admin_script(); + + if ( true === $enqueue_admin_script || 'aiosrs-schema' === $schema_post_type_name ) { + wp_enqueue_script( + 'wpsp_datetimepicker_script', + BSF_AIOSRS_PRO_URI . 'admin/assets/js/timpepicker.min.js', + array( 'jquery-ui-datepicker', 'jquery-ui-slider' ), + BSF_AIOSRS_PRO_VER, + true + ); + + wp_enqueue_style( 'wpsp_jquery_ui_css', 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css', false, BSF_AIOSRS_PRO_VER, false ); + } + } + + /** + * Delete the store cache of HTML Markup. + */ + public function bsf_delete_cached_json_ld() { + + global $wpdb; + $wpdb->delete( $wpdb->postmeta, array( 'meta_key' => BSF_AIOSRS_PRO_CACHE_KEY ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + } + + /** + * Fetch the HTML item type for Review. + */ + public function get_review_item_type_html() { + + if ( ! current_user_can( 'manage_options' ) ) { + return false; + } + + check_ajax_referer( 'schema_nonce', 'nonce' ); + + $item_type = isset( $_POST['itemType'] ) ? sanitize_text_field( $_POST['itemType'] ) : ''; + $post_id = filter_input( INPUT_POST, 'post_id', FILTER_VALIDATE_INT ); + $item_type_fields = self::$schema_item_types[ $item_type ]['subkeys']; + + foreach ( $item_type_fields as $key => $item_type_field ) { + + $review_meta_data = get_post_meta( $post_id, 'bsf-aiosrs-review', true ); + $item_key = $item_type . '-' . $key; + $schemas_meta = array( 'bsf-aiosrs-review' => $review_meta_data ); + + self::get_meta_markup( + array( + 'name' => 'bsf-aiosrs-review', + 'subkey' => $item_key, + 'subkey_data' => $item_type_field, + 'item_type_class' => 'bsf-review-item-type-field', + ), + $schemas_meta + ); + } + + } + + + /** + * Filter String for fixed text. + * + * @param string $label Option Label. + * @param string $type Option field type. + * @return string + */ + public function custom_text_string( $label, $type ) { + + switch ( $type ) { + case 'dropdown': + $label = __( 'Fixed Option', 'wp-schema-pro' ); + break; + + case 'multi-select': + $label = __( 'Fixed Options', 'wp-schema-pro' ); + break; + + case 'number': + $label = __( 'Fixed Number', 'wp-schema-pro' ); + break; + + case 'date': + $label = __( 'Fixed Date', 'wp-schema-pro' ); + break; + + case 'time': + $label = __( 'Fixed Time', 'wp-schema-pro' ); + break; + + case 'datetime-local': + $label = __( 'Fixed Date & Time', 'wp-schema-pro' ); + break; + + case 'rating': + $label = __( 'Fixed Rating', 'wp-schema-pro' ); + break; + default: + break; + } + return $label; + } + + /** + * Filter option array. + * + * @param array $mapping_options Schema field mapping option array. + * @param string $name Schema field name. + * @param string $subkey Schema field subkey. + * @return array + */ + public function rating_options( $mapping_options, $name, $subkey ) { + + $names = array( 'bsf-aiosrs-book', 'bsf-aiosrs-local-business', 'bsf-aiosrs-product', 'bsf-aiosrs-recipe', 'bsf-aiosrs-software-application', 'bsf-aiosrs-course', 'bsf-aiosrs-review' ); + $item_key_ = substr( $subkey, -6 ); + if ( in_array( $name, $names, true ) && ( 'rating' === $subkey || 'rating' === $item_key_ ) && isset( $mapping_options[2]['meta-list'] ) ) { + $mapping_options[2]['meta-list']['accept-user-rating'] = __( 'Accept User Rating', 'wp-schema-pro' ); + } + return $mapping_options; + } + + /** + * Adds or removes list table column headings. + * + * @param array $columns Array of columns. + * @return array + */ + public static function column_headings( $columns ) { + + unset( $columns['date'] ); + + $columns['aiosrs_schema_type'] = __( 'Type', 'wp-schema-pro' ); + $columns['aiosrs_schema_display_rules'] = __( 'Target Location', 'wp-schema-pro' ); + $columns['date'] = __( 'Date', 'wp-schema-pro' ); + + return $columns; + } + + /** + * Adds the custom list table column content. + * + * @since 1.0 + * @param array $column Name of column. + * @param int $post_id Post id. + * @return void + */ + public function column_content( $column, $post_id ) { + + if ( 'aiosrs_schema_type' === $column ) { + + $meta_key = get_post_meta( $post_id, 'bsf-aiosrs-schema-type', true ); + echo isset( self::$schema_meta_fields[ 'bsf-aiosrs-' . $meta_key ]['label'] ) ? esc_html( self::$schema_meta_fields[ 'bsf-aiosrs-' . $meta_key ]['label'] ) : ''; + } elseif ( 'aiosrs_schema_display_rules' === $column ) { + + $locations = get_post_meta( $post_id, 'bsf-aiosrs-schema-location', true ); + if ( ! empty( $locations ) ) { + echo '
            '; + echo '' . esc_html__( 'Enable On: ', 'wp-schema-pro' ) . ''; + $this->column_display_location_rules( $locations ); + echo '
            '; + } + + $locations = get_post_meta( $post_id, 'bsf-aiosrs-schema-exclusion', true ); + if ( ! empty( $locations ) ) { + echo '
            '; + echo '' . esc_html__( 'Exclude From: ', 'wp-schema-pro' ) . ''; + $this->column_display_location_rules( $locations ); + echo '
            '; + } + } + } + + /** + * Get Markup of Location rules for Display rule column. + * + * @param array $locations Array of locations. + * @return void + */ + public function column_display_location_rules( $locations ) { + + $location_label = array(); + $index = array_search( 'specifics', $locations['rule'], true ); + if ( false !== $index && ! empty( $index ) ) { + unset( $locations['rule'][ $index ] ); + } + + if ( isset( $locations['rule'] ) && is_array( $locations['rule'] ) ) { + foreach ( $locations['rule'] as $location ) { + $location_label[] = BSF_Target_Rule_Fields::get_location_by_key( $location ); + } + } + if ( isset( $locations['specific'] ) && is_array( $locations['specific'] ) ) { + foreach ( $locations['specific'] as $location ) { + $location_label[] = BSF_Target_Rule_Fields::get_location_by_key( $location ); + } + } + + echo esc_html( join( ', ', $location_label ) ); + } + + /** + * Ajax handeler to return the posts based on the search query. + * When searching for the post/pages only titles are searched for. + * + * @since 1.0.0 + */ + public function bsf_get_specific_meta_fields() { + + if ( ! current_user_can( 'manage_options' ) ) { + return false; + } + + check_ajax_referer( 'spec_schema', 'nonce_ajax' ); + + $search_string = isset( $_POST['q'] ) ? sanitize_text_field( $_POST['q'] ) : ''; + $data = array(); + $result = array(); + + global $wpdb; + // WPCS: unprepared SQL OK. + $aiosrs_meta_array = $wpdb->get_results( "SELECT DISTINCT meta_key FROM {$wpdb->postmeta} WHERE meta_key LIKE '%{$search_string}%'", ARRAY_A ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + + $schema_post_meta_fields = array_merge( self::$schema_meta_keys, array( 'bsf-aiosrs-schema-type', 'bsf-aiosrs-schema-location', 'bsf-aiosrs-schema-exclusion' ) ); + if ( isset( $aiosrs_meta_array ) && ! empty( $aiosrs_meta_array ) ) { + foreach ( $aiosrs_meta_array as $value ) { + if ( ! in_array( $value['meta_key'], $schema_post_meta_fields, true ) ) { + $data[] = array( + 'id' => $value['meta_key'], + 'text' => preg_replace( '/^_/', '', esc_html( str_replace( '_', ' ', $value['meta_key'] ) ) ), + ); + } + } + } + + if ( is_array( $data ) && ! empty( $data ) ) { + $result[] = array( + 'children' => $data, + ); + } + + wp_send_json( $result ); + } + + /** + * Get an array of timezones + * + * @return array + */ + public static function timezone_options() { + + $html = wp_timezone_choice( 'UTC+0' ); + + $dom = new DOMDocument(); + + $dom->loadHTML( $html ); + + $result = array(); + + foreach ( $dom->getElementsByTagName( 'optgroup' ) as $optgroup ) { + $label = $optgroup->getAttribute( 'label' ); + foreach ( $optgroup->getElementsByTagName( 'option' ) as $option ) { + $value = $option->getAttribute( 'value' ); + $name = $option->nodeValue; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $result[ $value ] = $name; + } + } + return $result; + } + + /** + * Initialize Schema Meta fields. + * + * @return void + */ + public function init_schema_fields() { + $doc_link = ''; + $brand_adv = BSF_AIOSRS_Pro_Helper::$settings['wp-schema-pro-branding-settings']; + $brand_hide_label = isset( $brand_adv['sp_hide_label'] ) ? $brand_adv['sp_hide_label'] : ''; + + if ( ( '1' === $brand_hide_label ) || true === ( defined( 'WP_SP_WL' ) && WP_SP_WL ) ) { + $doc_link = 'whit-label'; + } + + self::$schema_meta_fields = apply_filters( + 'wp_schema_pro_schema_meta_fields', + array( + 'bsf-aiosrs-article' => array( + 'key' => 'article', + 'icon' => 'dashicons dashicons-media-default', + 'label' => __( 'Article', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-schema-markup-for-articles-on-the-website/' : 'https://developers.google.com/search/docs/data-types/articles', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'schema-type' => array( + 'label' => esc_html__( 'Article Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'article', + 'choices' => array( + 'Article' => esc_html__( 'Article (General)', 'wp-schema-pro' ), + 'AdvertiserContentArticle' => esc_html__( 'Advertiser Content Article', 'wp-schema-pro' ), + 'BlogPosting' => esc_html__( 'Blog Posting', 'wp-schema-pro' ), + 'NewsArticle' => esc_html__( 'News Article', 'wp-schema-pro' ), + 'Report' => esc_html__( 'Report', 'wp-schema-pro' ), + 'SatiricalArticle' => esc_html__( 'Satirical Article', 'wp-schema-pro' ), + 'ScholarlyArticle' => esc_html__( 'Scholarly Article', 'wp-schema-pro' ), + 'TechArticle' => esc_html__( 'Tech Article', 'wp-schema-pro' ), + ), + ), + 'author' => array( + 'label' => esc_html__( 'Author Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_name', + ), + 'author-url' => array( + 'label' => esc_html__( 'Author URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_url', + ), + 'image' => array( + 'label' => esc_html__( 'Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + ), + 'description' => array( + 'label' => esc_html__( 'Short Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_excerpt', + ), + 'main-entity' => array( + 'label' => esc_html__( 'URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_permalink', + ), + 'name' => array( + 'label' => esc_html__( 'Headline', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + ), + 'published-date' => array( + 'label' => esc_html__( 'Published Date', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'post_date', + ), + 'modified-date' => array( + 'label' => esc_html__( 'Modified Date', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'post_modified', + ), + 'orgnization-name' => array( + 'label' => esc_html__( 'Publisher Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + ), + 'site-logo' => array( + 'label' => esc_html__( 'Publisher Logo', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'site_logo', + ), + ), + ), + 'bsf-aiosrs-book' => array( + 'key' => 'book', + 'icon' => 'dashicons dashicons-book', + 'label' => __( 'Book', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/schema-markup-for-a-book-page/' : 'https://developers.google.com/search/docs/data-types/books', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Title Of The Book', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'image' => array( + 'label' => esc_html__( 'Image Of The Book', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + ), + 'author' => array( + 'label' => esc_html__( 'Author Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'url' => array( + 'label' => esc_html__( 'URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_permalink', + 'required' => true, + ), + 'work-example' => array( + 'label' => esc_html__( 'Book Edition Name', 'wp-schema-pro' ), + 'type' => 'repeater', + 'required' => true, + 'fields' => array( + 'serial-number' => array( + 'label' => esc_html__( 'ISBN', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'required' => true, + 'description' => esc_html__( 'The International Standard Book Number (ISBN) is a unique numeric commercial book identifier. ISBN having 10 or 13 digit number.', 'wp-schema-pro' ), + ), + 'book-format' => array( + 'label' => esc_html__( 'Book Format', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'book-format', + 'required' => true, + 'description' => esc_html__( 'The format of the book using one or more of the [ EBook, Hardcover, Paperback, AudioBook ] values', 'wp-schema-pro' ), + + ), + 'book-edition' => array( + 'label' => esc_html__( 'Book Edition', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + + 'url-template' => array( + 'label' => esc_html__( 'Platform URL Template', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + 'description' => esc_html__( 'Provide the link in which platform works. For example desktop web browsers link', 'wp-schema-pro' ), + ), + 'action-platform' => array( + 'label' => esc_html__( ' Work Platforms', 'wp-schema-pro' ), + 'type' => 'multi-select', + 'default' => 'none', + 'dropdown-type' => 'action-platform', + 'required' => true, + 'description' => esc_html__( 'The platform(s) on which the link works For example Works on desktop web browsers, Works on mobile web browsers.', 'wp-schema-pro' ), + ), + 'price' => array( + 'label' => esc_html__( 'Offer Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'required' => true, + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Offer Price Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'required' => true, + 'dropdown-type' => 'currency', + ), + 'country' => array( + 'label' => esc_html__( 'Offer Eligible Country', 'wp-schema-pro' ), + 'type' => 'multi-select', + 'default' => 'none', + 'dropdown-type' => 'country', + ), + 'avail' => array( + 'label' => esc_html__( 'Offer Availability Status', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'availability', + ), + ), + ), + 'same-as' => array( + 'label' => esc_html__( 'A Reference Link', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'A reference page that unambiguously indicates the item\'s identity; for example, the URL of the item\'s Wikipedia page, Freebase page, or official website.', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-course' => array( + 'key' => 'course', + 'icon' => 'dashicons dashicons-media-default', + 'label' => __( 'Course', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-a-schema-markup-for-a-course-page/' : 'https://developers.google.com/search/docs/data-types/courses', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Course Title', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + 'description' => esc_html__( 'A description of the course. Display limit of 60 characters.', 'wp-schema-pro' ), + 'required' => true, + ), + 'course-code' => array( + 'label' => esc_html__( 'Course Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'The identifier for the Course used by the course provider (e.g. CS101 or 6.001).', 'wp-schema-pro' ), + ), + 'orgnization-name' => array( + 'label' => esc_html__( 'Course Provider', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'The organization that publishes the source content of the course. For example, UC Berkeley.', 'wp-schema-pro' ), + ), + 'offers' => array( + 'label' => esc_html__( 'Offers', 'wp-schema-pro' ), + 'type' => 'repeater', + 'description' => esc_html__( 'The pricing and availability of the course.', 'wp-schema-pro' ), + 'required' => true, + 'fields' => array( + 'offer-category' => array( + 'label' => esc_html__( 'Offer Category', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'offer-category', + ), + 'priceCurrency' => array( + 'label' => esc_html__( 'Price Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'currency', + ), + 'price' => array( + 'label' => esc_html__( 'Price', 'wp-schema-pro' ), + 'type' => 'number', + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + ), + ), + 'course-instance' => array( + 'label' => esc_html__( 'Course Instance', 'wp-schema-pro' ), + 'type' => 'repeater', + 'required' => true, + 'description' => esc_html__( 'An offering of the course at a specific time and place or through specific media or mode of study or to a specific section of students.', 'wp-schema-pro' ), + 'fields' => array( + 'name' => array( + 'label' => esc_html__( 'Instance Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Instance Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'none', + 'required' => true, + ), + 'course-mode' => array( + 'label' => esc_html__( 'Course Mode', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'course-attendance-mode', + 'required' => false, + ), + 'image' => array( + 'label' => esc_html__( 'Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'none', + ), + 'event-status' => array( + 'label' => esc_html__( 'Course Status', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'event-status', + 'required' => true, + 'description' => esc_html__( 'The status of the Course Instance.', 'wp-schema-pro' ), + + ), + 'start-date' => array( + 'label' => esc_html__( 'Start Date', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'none', + 'required' => true, + ), + 'end-date' => array( + 'label' => esc_html__( 'End Date', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'none', + ), + 'repeat-count' => array( + 'label' => esc_html__( 'Repeat Count', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'required' => true, + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'repeat-frequency' => array( + 'label' => esc_html__( 'Repeat Frequency', 'wp-schema-pro' ), + 'type' => 'text', + 'required' => true, + 'default' => 'none', + ), + 'course-workload' => array( + 'label' => esc_html__( 'Course Workload', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'required' => true, + 'default' => 'none', + ), + 'previous-date' => array( + 'label' => esc_html__( 'Course Previous Start Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'class' => 'wpsp-event-status-rescheduled', + 'default' => 'custom-text', + ), + 'online-location' => array( + 'label' => esc_html__( 'Online Course URL', 'wp-schema-pro' ), + 'type' => 'text', + 'class' => 'wpsp-event-status-online', + 'default' => 'post_permalink', + ), + 'course-organizer-name' => array( + 'label' => esc_html__( 'Course Organizer Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => false, + 'description' => esc_html__( 'The person or organization that is hosting the Course.', 'wp-schema-pro' ), + + ), + 'course-organizer-url' => array( + 'label' => esc_html__( 'Course Organizer URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => false, + ), + 'location-name' => array( + 'label' => esc_html__( 'Location Name', 'wp-schema-pro' ), + 'type' => 'text', + 'class' => 'wpsp-event-status-offline', + 'default' => 'none', + 'description' => esc_html__( 'The venue of the course.', 'wp-schema-pro' ), + ), + 'location-address' => array( + 'label' => esc_html__( 'Location Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'class' => 'wpsp-event-status-offline', + 'required' => true, + ), + 'price' => array( + 'label' => esc_html__( 'Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'currency', + ), + 'valid-from' => array( + 'label' => esc_html__( 'Valid From', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'none', + ), + 'url' => array( + 'label' => esc_html__( 'Offer URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'avail' => array( + 'label' => esc_html__( 'Availability', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'availability', + ), + 'performer' => array( + 'label' => esc_html__( 'Performer', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + ), + ), + 'same-as' => array( + 'label' => esc_html__( 'A Reference Link', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'A reference page that unambiguously indicates the item\'s identity; for example, the URL of the item\'s Wikipedia page, Freebase page, or official website.', 'wp-schema-pro' ), + ), + 'rating' => array( + 'label' => esc_html__( 'Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'none', + ), + 'review-count' => array( + 'label' => esc_html__( 'Review Count', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + ), + ), + + 'bsf-aiosrs-event' => array( + 'key' => 'event', + 'icon' => 'dashicons dashicons-tickets-alt', + 'label' => __( 'Event', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-schema-markup-on-event-page/' : 'https://developers.google.com/search/docs/data-types/events', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'schema-type' => array( + 'label' => esc_html__( 'Event Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'Event', + 'choices' => array( + 'Event' => esc_html__( 'Event (General)', 'wp-schema-pro' ), + 'BusinessEvent' => esc_html__( 'Business Event', 'wp-schema-pro' ), + 'ChildrensEvent' => esc_html__( 'Childrens Event', 'wp-schema-pro' ), + 'ComedyEvent' => esc_html__( 'Comedy Event', 'wp-schema-pro' ), + 'CourseInstance' => esc_html__( 'Course Instance', 'wp-schema-pro' ), + 'DanceEvent' => esc_html__( 'Dance Event', 'wp-schema-pro' ), + 'DeliveryEvent' => esc_html__( 'Delivery Event', 'wp-schema-pro' ), + 'EducationEvent' => esc_html__( 'Education Event', 'wp-schema-pro' ), + 'EventSeries' => esc_html__( 'EventSeries', 'wp-schema-pro' ), + 'ExhibitionEvent' => esc_html__( 'Exhibition Event', 'wp-schema-pro' ), + 'Festival' => esc_html__( 'Festival', 'wp-schema-pro' ), + 'FoodEvent' => esc_html__( 'Food Event', 'wp-schema-pro' ), + 'LiteraryEvent' => esc_html__( 'Literary Event', 'wp-schema-pro' ), + 'MusicEvent' => esc_html__( 'Music Event', 'wp-schema-pro' ), + 'PublicationEvent' => esc_html__( 'Publication Event', 'wp-schema-pro' ), + 'SaleEvent' => esc_html__( 'Sale Event', 'wp-schema-pro' ), + 'ScreeningEvent' => esc_html__( 'Screening Event', 'wp-schema-pro' ), + 'SocialEvent' => esc_html__( 'Social Event', 'wp-schema-pro' ), + 'SportsEvent' => esc_html__( 'Sports Event', 'wp-schema-pro' ), + 'TheaterEvent' => esc_html__( 'Theater Event', 'wp-schema-pro' ), + 'VisualArtsEvent' => esc_html__( 'Visual Arts Event', 'wp-schema-pro' ), + + ), + ), + 'name' => array( + 'label' => esc_html__( ' Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( ' Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + 'image' => array( + 'label' => esc_html__( ' Image/Logo', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + ), + 'event-status' => array( + 'label' => esc_html__( ' Status', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'event-status', + 'required' => false, + 'description' => esc_html__( 'The status of the event. If you don\'t use this field, Google understands the eventStatus to be EventScheduled. ', 'wp-schema-pro' ), + + ), + 'event-attendance-mode' => array( + 'label' => esc_html__( ' Attendance Mode', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'event-attendance-mode', + 'required' => false, + 'description' => esc_html__( 'The location of the event. There are different requirements depending on if the event is happening online or at a physical location.', 'wp-schema-pro' ), + + ), + 'start-date' => array( + 'label' => esc_html__( 'Start Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'none', + 'required' => true, + ), + 'end-date' => array( + 'label' => esc_html__( 'End Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'none', + ), + 'timezone' => array( + 'label' => esc_html__( 'Timezone', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'timezone', + 'class' => 'wpsp-online-event-timezone', + 'required' => false, + ), + 'previous-date' => array( + 'label' => esc_html__( 'Previous Start Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'class' => 'wpsp-event-status-rescheduled', + 'default' => 'custom-text', + ), + 'online-location' => array( + 'label' => esc_html__( 'Online Event URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_permalink', + 'class' => 'wpsp-event-status-online', + + ), + 'location' => array( + 'label' => esc_html__( 'Location Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'class' => 'wpsp-event-status-offline', + 'description' => esc_html__( 'The detailed name of the place or venue where the event is being held. This property is only recommended for events that take place at a physical location.', 'wp-schema-pro' ), + ), + 'location-street' => array( + 'label' => esc_html__( 'Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'class' => 'wpsp-event-status-offline', + 'required' => true, + ), + 'location-locality' => array( + 'label' => esc_html__( 'Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'class' => 'wpsp-event-status-offline', + 'required' => true, + ), + 'location-postal' => array( + 'label' => esc_html__( 'Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'class' => 'wpsp-event-status-offline', + 'required' => true, + ), + 'location-region' => array( + 'label' => esc_html__( 'Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'class' => 'wpsp-event-status-offline', + 'required' => true, + ), + 'location-country' => array( + 'label' => esc_html__( 'Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'required' => true, + 'class' => 'wpsp-event-status-offline', + 'dropdown-type' => 'country', + ), + + 'avail' => array( + 'label' => esc_html__( 'Availability', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'availability', + 'description' => esc_html__( 'The availability of this event, for example In stock, Out of stock, Pre-order, etc.', 'wp-schema-pro' ), + ), + 'price' => array( + 'label' => esc_html__( 'Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'currency', + ), + 'valid-from' => array( + 'label' => esc_html__( 'Valid From', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'none', + ), + 'ticket-buy-url' => array( + 'label' => esc_html__( 'Online Ticket URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'performer' => array( + 'label' => esc_html__( 'Performer', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'event-organizer-name' => array( + 'label' => esc_html__( 'Organizer Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'dropdown-type' => 'event-attendance-mode', + 'required' => false, + 'description' => esc_html__( 'The person or organization that is hosting the event.', 'wp-schema-pro' ), + + ), + 'event-organizer-url' => array( + 'label' => esc_html__( 'Organizer URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'dropdown-type' => 'event-attendance-mode', + 'required' => false, + ), + ), + ), + 'bsf-aiosrs-job-posting' => array( + 'key' => 'job-posting', + 'icon' => 'dashicons dashicons-businessman', + 'label' => __( 'Job Posting', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-a-schema-markup-for-a-job-posting-page/' : 'https://developers.google.com/search/docs/data-types/job-postings', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'title' => array( + 'label' => esc_html__( 'Job Title', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'orgnization-name' => array( + 'label' => esc_html__( 'Hiring Organization', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + 'required' => true, + ), + 'same-as' => array( + 'label' => esc_html__( 'Hiring Organization URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'site_url', + 'required' => true, + 'description' => esc_html__( 'A referenced URL of the organization page to identity information. E.g. The URL of the Organization Wikipedia page, Wikidata entry, or official website.', 'wp-schema-pro' ), + ), + 'organization-logo' => array( + 'label' => esc_html__( 'Hiring Organization Logo', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'site_logo', + ), + 'industry' => array( + 'label' => esc_html__( 'Industry', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'job-type' => array( + 'label' => esc_html__( 'Employment Type', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'employment', + ), + 'description' => array( + 'label' => esc_html__( 'Job Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + 'required' => true, + ), + 'start-date' => array( + 'label' => esc_html__( 'Date Posted', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'post_date', + 'required' => true, + ), + 'expiry-date' => array( + 'label' => esc_html__( 'Valid Through', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'none', + ), + 'education-requirements' => array( + 'label' => esc_html__( 'Education', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'Educational background needed for the position or Occupation.', 'wp-schema-pro' ), + ), + 'experience-requirements' => array( + 'label' => esc_html__( 'Job Experience', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'qualifications' => array( + 'label' => esc_html__( 'Qualifications', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'Specific qualifications required for this role or Occupation.For example A diploma, academic degree, certification.', 'wp-schema-pro' ), + ), + 'responsibilities' => array( + 'label' => esc_html__( 'Responsibilities', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'skills' => array( + 'label' => esc_html__( 'Skills', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'work-hours' => array( + 'label' => esc_html__( 'Work Hours', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'job-location-type' => array( + 'label' => esc_html__( 'Job Location Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + 'description' => esc_html__( 'Use value "TELECOMMUTE" for jobs in which the employee may or must work remotely 100% of the time.', 'wp-schema-pro' ), + ), + 'remote-location' => array( + 'label' => esc_html__( 'Remote Location', 'wp-schema-pro' ), + 'type' => 'repeater', + 'fields' => array( + 'applicant-location' => array( + 'label' => esc_html__( 'Applicant Location', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => false, + 'description' => esc_html__( 'The geographic location(s) in which employees may be located to be eligible for the Remote job.', 'wp-schema-pro' ), + ), + ), + ), + 'location-street' => array( + 'label' => esc_html__( 'Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-locality' => array( + 'label' => esc_html__( 'Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-postal' => array( + 'label' => esc_html__( 'Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-region' => array( + 'label' => esc_html__( 'Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-country' => array( + 'label' => esc_html__( 'Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'required' => true, + 'dropdown-type' => 'country', + ), + 'salary' => array( + 'label' => esc_html__( 'Base Salary', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + ), + 'salary-min-value' => array( + 'label' => esc_html__( 'Min Salary', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + ), + 'salary-max-value' => array( + 'label' => esc_html__( 'Max Salary', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + ), + 'salary-currency' => array( + 'label' => esc_html__( 'Salary In Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'currency', + ), + 'salary-unit' => array( + 'label' => esc_html__( 'Salary Per Unit', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'time-unit', + 'description' => esc_html__( 'A string or text indicating the unit of salary measurement. For example MONTH, YEAR.', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-local-business' => array( + 'key' => 'local-business', + 'icon' => 'dashicons dashicons-admin-site', + 'label' => __( 'Local Business', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-schema-markup-for-a-local-business-page/' : 'https://developers.google.com/search/docs/data-types/local-businesses', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Business Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + 'required' => true, + ), + 'schema-type' => array( + 'label' => esc_html__( 'Local Business Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'LocalBusiness', + 'choices' => array( + 'LocalBusiness' => esc_html__( 'General', 'wp-schema-pro' ), + 'AnimalShelter' => esc_html__( 'Animal Shelter', 'wp-schema-pro' ), + 'AutomotiveBusiness' => esc_html__( 'Automotive', 'wp-schema-pro' ), + 'ChildCare' => esc_html__( 'Child Care', 'wp-schema-pro' ), + 'Dentist' => esc_html__( 'Dentist', 'wp-schema-pro' ), + 'DryCleaningOrLaundry' => esc_html__( 'Dry Cleaning Or Laundry', 'wp-schema-pro' ), + 'EmergencyService' => esc_html__( 'Emergency Service', 'wp-schema-pro' ), + 'EmploymentAgency' => esc_html__( 'Employment Agency', 'wp-schema-pro' ), + 'EntertainmentBusiness' => esc_html__( 'Entertainment', 'wp-schema-pro' ), + 'FinancialService' => esc_html__( 'Financial Service', 'wp-schema-pro' ), + 'FoodEstablishment' => esc_html__( 'Food Establishment', 'wp-schema-pro' ), + 'GovernmentOffice' => esc_html__( 'Government Office', 'wp-schema-pro' ), + 'HealthAndBeautyBusiness' => esc_html__( 'Health And Beauty', 'wp-schema-pro' ), + 'HomeAndConstructionBusiness' => esc_html__( 'Home And Construction', 'wp-schema-pro' ), + 'InternetCafe' => esc_html__( 'Internet Cafe', 'wp-schema-pro' ), + 'LegalService' => esc_html__( 'Legal Service', 'wp-schema-pro' ), + 'Library' => esc_html__( 'Library', 'wp-schema-pro' ), + 'Locksmith' => esc_html__( 'Locksmith', 'wp-schema-pro' ), + 'LodgingBusiness' => esc_html__( 'Lodging', 'wp-schema-pro' ), + 'MedicalBusiness' => esc_html__( 'Medical Business', 'wp-schema-pro' ), + 'RadioStation' => esc_html__( 'Radio Station', 'wp-schema-pro' ), + 'RealEstateAgent' => esc_html__( 'Real Estate Agent', 'wp-schema-pro' ), + 'RecyclingCenter' => esc_html__( 'Recycling Center', 'wp-schema-pro' ), + 'SelfStorage' => esc_html__( 'Self Storage', 'wp-schema-pro' ), + 'ShoppingCenter' => esc_html__( 'Shopping Center', 'wp-schema-pro' ), + 'SportsActivityLocation' => esc_html__( 'Sports Activity Location', 'wp-schema-pro' ), + 'Store' => esc_html__( 'Store', 'wp-schema-pro' ), + 'TelevisionStation' => esc_html__( 'Television Station', 'wp-schema-pro' ), + 'TouristInformationCenter' => esc_html__( 'Tourist Information Center', 'wp-schema-pro' ), + 'TravelAgency' => esc_html__( 'Travel Agency', 'wp-schema-pro' ), + ), + ), + 'image' => array( + 'label' => esc_html__( 'Business Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'none', + 'required' => true, + ), + 'telephone' => array( + 'label' => esc_html__( 'Telephone', 'wp-schema-pro' ), + 'type' => 'tel', + 'default' => 'none', + ), + 'price-range' => array( + 'label' => esc_html__( 'Price Range', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'The relative price range of a business, commonly specified by either a numerical range (for example, "$10-15") or a normalized number of currency signs (for example, "$$$")', 'wp-schema-pro' ), + ), + 'url' => array( + 'label' => esc_html__( 'URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'site_url', + ), + 'location-street' => array( + 'label' => esc_html__( 'Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-locality' => array( + 'label' => esc_html__( 'Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-postal' => array( + 'label' => esc_html__( 'Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-region' => array( + 'label' => esc_html__( 'Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'location-country' => array( + 'label' => esc_html__( 'Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'country', + 'required' => true, + ), + + 'hours-specification' => array( + 'label' => esc_html__( 'Hours Specification', 'wp-schema-pro' ), + 'type' => 'repeater', + 'fields' => array( + 'days' => array( + 'label' => esc_html__( 'Day Of Week', 'wp-schema-pro' ), + 'type' => 'multi-select', + 'default' => 'none', + 'required' => true, + 'dropdown-type' => 'days', + 'description' => esc_html__( 'Here, you can select multiple days. e.g. "11"', 'wp-schema-pro' ), + ), + 'opens' => array( + 'label' => esc_html__( 'Opens', 'wp-schema-pro' ), + 'type' => 'time', + 'default' => 'none', + 'required' => true, + ), + 'closes' => array( + 'label' => esc_html__( 'Closes', 'wp-schema-pro' ), + 'type' => 'time', + 'default' => 'none', + 'required' => true, + ), + ), + ), + 'geo-latitude' => array( + 'label' => esc_html__( ' Latitude', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + 'required' => false, + 'attrs' => array( + 'step' => 'any', + ), + 'description' => esc_html__( 'The latitude of the business location. . e.g. "37.293058"', 'wp-schema-pro' ), + ), + 'geo-longitude' => array( + 'label' => esc_html__( 'Longitude', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + 'required' => false, + 'attrs' => array( + 'step' => 'any', + ), + 'description' => esc_html__( 'The longitude of the business location. e.g. "-121.988331"', 'wp-schema-pro' ), + ), + 'rating' => array( + 'label' => esc_html__( 'Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'accept-user-rating', + ), + 'review-count' => array( + 'label' => esc_html__( 'Review Count', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-review' => array( + 'key' => 'review', + 'icon' => 'dashicons dashicons-admin-comments', + 'label' => __( 'Review', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-a-schema-markup-for-a-review-page/' : 'https://developers.google.com/search/docs/data-types/reviews', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'schema-type' => array( + 'label' => esc_html__( 'Review Item Type', 'wp-schema-pro' ), + 'type' => 'text', + 'required' => true, + 'choices' => array( + '' => esc_html__( 'Select Item Type', 'wp-schema-pro' ), + 'bsf-aiosrs-product' => esc_html__( 'Product', 'wp-schema-pro' ), + 'bsf-aiosrs-book' => esc_html__( 'Book', 'wp-schema-pro' ), + 'bsf-aiosrs-course' => esc_html__( 'Course', 'wp-schema-pro' ), + 'bsf-aiosrs-event' => esc_html__( 'Event', 'wp-schema-pro' ), + 'bsf-aiosrs-local-business' => esc_html__( 'Local business', 'wp-schema-pro' ), + 'bsf-aiosrs-recipe' => esc_html__( 'Recipe', 'wp-schema-pro' ), + 'bsf-aiosrs-software-application' => esc_html__( 'Software Application', 'wp-schema-pro' ), + 'bsf-aiosrs-movie' => esc_html__( 'Movie', 'wp-schema-pro' ), + 'bsf-aiosrs-organization' => esc_html__( 'Organization', 'wp-schema-pro' ), + 'bsf-aiosrs-offers' => esc_html__( 'Offers', 'wp-schema-pro' ), + ), + ), + 'review-body' => array( + 'label' => esc_html__( 'Review Body', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + 'required' => false, + ), + 'date' => array( + 'label' => esc_html__( 'Review Date', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'post_date', + 'required' => false, + ), + 'rating' => array( + 'label' => esc_html__( 'Review Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'none', + 'required' => true, + ), + 'ratingValue' => array( + 'label' => esc_html__( 'Rating Value', 'wp-schema-pro' ), + 'type' => 'text', // or 'number' if you want to restrict the input to numbers only + 'default' => 'none', + 'required' => true, + 'description' => esc_html__( 'A numerical quality rating for the item, either a number, fraction, or percentage (for example, 4, 60%, or 6 / 10).', 'wp-schema-pro' ), + ), + 'reviewer-type' => array( + 'label' => esc_html__( 'Reviewer Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'Person', + 'choices' => array( + 'Person' => esc_html__( 'Person', 'wp-schema-pro' ), + 'Organization' => esc_html__( 'Organization', 'wp-schema-pro' ), + ), + ), + 'reviewer-name' => array( + 'label' => esc_html__( 'Reviewer Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_name', + ), + 'publisher-name' => array( + 'label' => esc_html__( 'Publisher Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_name', + ), + ), + ), + 'bsf-aiosrs-person' => array( + 'key' => 'person', + 'icon' => 'dashicons dashicons-admin-users', + 'label' => __( 'Person', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-schema-markup-for-a-person/' : 'https://schema.org/Person', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + + 'name' => array( + 'label' => esc_html__( 'Person Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'gender' => array( + 'label' => esc_html__( 'Gender', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'dropdown-type' => 'gender-select', + 'default' => 'none', + ), + 'dob' => array( + 'label' => esc_html__( 'DOB', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'none', + ), + 'member' => array( + 'label' => esc_html__( 'Member Of', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'An Organization (or ProgramMembership) to which this Person or Organization belongs.', 'wp-schema-pro' ), + ), + 'email' => array( + 'label' => esc_html__( 'Person Email', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + 'telephone' => array( + 'label' => esc_html__( 'Telephone', 'wp-schema-pro' ), + 'type' => 'tel', + 'default' => 'none', + ), + 'image' => array( + 'label' => esc_html__( 'Photograph', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'none', + ), + 'job-title' => array( + 'label' => esc_html__( 'Job Title', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'homepage-url' => array( + 'label' => esc_html__( 'Homepage URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'nationality' => array( + 'label' => esc_html__( 'Nationality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + 'street' => array( + 'label' => esc_html__( 'Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + 'locality' => array( + 'label' => esc_html__( 'Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + 'postal' => array( + 'label' => esc_html__( 'Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + 'region' => array( + 'label' => esc_html__( 'Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + 'country' => array( + 'label' => esc_html__( 'Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'country', + ), + 'add-url' => array( + 'label' => esc_html__( 'A Reference Link', 'wp-schema-pro' ), + 'type' => 'repeater', + 'description' => esc_html__( 'A reference page that unambiguously indicates the item\'s identity; for example, the URL of the item\'s Wikipedia page, Freebase page, or official website.', 'wp-schema-pro' ), + 'fields' => array( + 'same-as' => array( + 'label' => esc_html__( 'URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + ), + ), + ), + ), + 'bsf-aiosrs-product' => array( + 'key' => 'product', + 'icon' => 'dashicons dashicons-cart', + 'label' => __( 'Product', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-a-schema-markup-for-a-product-page/' : 'https://developers.google.com/search/docs/data-types/products', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Product Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'brand-name' => array( + 'label' => esc_html__( 'Product Brand', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'image' => array( + 'label' => esc_html__( 'Product Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'required' => true, + ), + 'url' => array( + 'label' => esc_html__( 'Product URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_permalink', + ), + 'description' => array( + 'label' => esc_html__( 'Product Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + 'sku' => array( + 'label' => esc_html__( 'Product SKU', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'The Stock Keeping Unit (SKU) is a unique numerical identifying number that refers to a specific stock item in a retailer\'s inventory or product catalog.', 'wp-schema-pro' ), + ), + 'mpn' => array( + 'label' => esc_html__( 'Product MPN', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'The Manufacturer Part Number (MPN) of the product, or the product to which the offer refers. e.g. "925872"', 'wp-schema-pro' ), + ), + 'avail' => array( + 'label' => esc_html__( 'Product Availability', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'availability', + ), + 'merchant-return-policy' => array( + 'label' => esc_html__( 'Merchant Return Policy', 'wp-schema-pro' ), + 'type' => 'repeater', + 'fields' => array( + 'applicableCountry' => array( + 'label' => esc_html__( 'Applicable Country', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'US', + ), + 'returnPolicyCategory' => array( + 'label' => esc_html__( 'Return Policy Category', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'returnPolicyCategory', + ), + 'merchantReturnDays' => array( + 'label' => esc_html__( 'Merchant Return Days', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 30, + ), + 'returnFees' => array( + 'label' => esc_html__( 'Return Fees', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'returnFees', + ), + 'returnMethod' => array( + 'label' => esc_html__( 'Return Method', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'dropdown-type' => 'returnMethod', + ), + 'returnShippingFeesAmount' => array( + 'label' => esc_html__( 'Return Shipping Fees Amount', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + ), + 'merchantCurrency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'currency', + ), + ), + ), + 'shippingDetails' => array( + 'label' => esc_html__( 'Shipping Details', 'wp-schema-pro' ), + 'type' => 'repeater', + 'fields' => array( + 'shippingDestination' => array( + 'label' => esc_html__( 'Shipping Destination', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'country', + ), + 'handlingTimeMinValue' => array( + 'label' => esc_html__( 'Min Handling Time', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + ), + 'unitCode' => array( + 'label' => esc_html__( 'Unit Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'DAY', + ), + 'handlingTimeMaxValue' => array( + 'label' => esc_html__( 'Max Handling Time', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + ), + 'transitTimeMinValue' => array( + 'label' => esc_html__( 'Min Transit Time', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + ), + 'transitTimeMaxValue' => array( + 'label' => esc_html__( 'Max Transit Time', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + ), + 'shippingRate' => array( + 'label' => esc_html__( 'Shipping Rate', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + ), + 'shippingCurrency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'currency', + ), + 'shippingCost' => array( + 'label' => esc_html__( 'Shipping Cost', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + + ), + 'shippingCurrency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'currency', + ), + ), + ), + 'price-valid-until' => array( + 'label' => esc_html__( 'Price Valid Until', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'create-field', + 'description' => esc_html__( 'The date after which the price will no longer be available. e.g. "31/12/2021 09:00 AM"', 'wp-schema-pro' ), + ), + 'price' => array( + 'label' => esc_html__( 'Product Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'attrs' => array( + 'min' => '0', + 'step' => '0.01', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'currency', + ), + 'product-review' => array( + 'label' => esc_html__( 'Review', 'wp-schema-pro' ), + 'type' => 'repeater', + 'fields' => array( + 'reviewer-type' => array( + 'label' => esc_html__( 'Reviewer Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'Person', + 'choices' => array( + 'Person' => esc_html__( 'Person', 'wp-schema-pro' ), + 'Organization' => esc_html__( 'Organization', 'wp-schema-pro' ), + ), + ), + 'reviewer-name' => array( + 'label' => esc_html__( 'Reviewer Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_name', + 'required' => true, + ), + 'product-rating' => array( + 'label' => esc_html__( 'Product Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'none', + ), + 'review-body' => array( + 'label' => esc_html__( 'Review Body', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + ), + ), + 'rating' => array( + 'label' => esc_html__( 'Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'accept-user-rating', + 'description' => esc_html__( 'To maintain accurate product information, kindly provide at least one rating.', 'wp-schema-pro' ), + ), + 'review-count' => array( + 'label' => esc_html__( 'Review Count', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-recipe' => array( + 'key' => 'recipe', + 'icon' => 'dashicons dashicons-carrot', + 'label' => __( 'Recipe', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-schema-markup-for-a-recipe-page/' : 'https://developers.google.com/search/docs/data-types/recipes', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Recipe Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'image' => array( + 'label' => esc_html__( 'Recipe Photo', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Recipe Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + 'reviewer-type' => array( + 'label' => esc_html__( 'Author Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'Person', + 'choices' => array( + 'Person' => esc_html__( 'Person', 'wp-schema-pro' ), + 'Organization' => esc_html__( 'Organization', 'wp-schema-pro' ), + ), + ), + 'author' => array( + 'label' => esc_html__( 'Author Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_name', + ), + 'preperation-time' => array( + 'label' => esc_html__( 'Preparation Time', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'none', + ), + 'cook-time' => array( + 'label' => esc_html__( 'Cook Time', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'none', + ), + 'recipe-keywords' => array( + 'label' => esc_html__( 'Keywords', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'e.g. "winter apple pie", "nutmeg crust"', 'wp-schema-pro' ), + ), + 'recipe-category' => array( + 'label' => esc_html__( 'Recipe Category', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'e.g. "dinner", "entree", or "dessert"', 'wp-schema-pro' ), + ), + 'recipe-cuisine' => array( + 'label' => esc_html__( 'Recipe Cuisine', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'e.g. "French", "Indian", or "American"', 'wp-schema-pro' ), + ), + 'nutrition' => array( + 'label' => esc_html__( 'Recipe Calories', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'The number of calories in the recipe.', 'wp-schema-pro' ), + ), + 'ingredients' => array( + 'label' => esc_html__( 'Recipe Ingredients', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'Ingredient used in the recipe. Separate multiple ingredients with comma(,).', 'wp-schema-pro' ), + ), + 'recipe-yield' => array( + 'label' => esc_html__( 'Recipe Yield', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => false, + ), + 'recipe-instructions' => array( + 'label' => esc_html__( 'Recipe Instructions', 'wp-schema-pro' ), + 'type' => 'repeater', + 'fields' => array( + 'name' => array( + 'label' => esc_html__( 'Instructions Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => false, + ), + 'steps' => array( + 'label' => esc_html__( 'Instructions Step', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'url' => array( + 'label' => esc_html__( 'Instructions URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => false, + ), + 'image' => array( + 'label' => esc_html__( 'Instructions Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'create-field', + 'required' => false, + ), + + ), + ), + 'recipe-video' => array( + 'label' => esc_html__( 'Recipe Video', 'wp-schema-pro' ), + 'type' => 'repeater', + 'is_recommnded' => true, + 'fields' => array( + 'video-name' => array( + 'label' => esc_html__( 'Video Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'video-desc' => array( + 'label' => esc_html__( 'Video Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'create-field', + 'required' => true, + ), + 'video-image' => array( + 'label' => esc_html__( 'Thumbnail URL', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'create-field', + 'required' => true, + ), + 'recipe-video-content-url' => array( + 'label' => esc_html__( 'Content URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'recipe-video-embed-url' => array( + 'label' => esc_html__( 'Embed URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'recipe-video-duration' => array( + 'label' => esc_html__( 'Duration', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'create-field', + ), + 'recipe-video-upload-date' => array( + 'label' => esc_html__( 'Upload Date', 'wp-schema-pro' ), + 'type' => 'datetime', + 'default' => 'post_date', + 'required' => true, + ), + 'recipe-video-expires-date' => array( + 'label' => esc_html__( 'Expires On', 'wp-schema-pro' ), + 'type' => 'datetime', + 'default' => 'create-field', + ), + 'recipe-video-interaction-count' => array( + 'label' => esc_html__( 'Interaction Count', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + 'description' => esc_html__( 'The number of times the video has been watched.', 'wp-schema-pro' ), + ), + ), + ), + 'rating' => array( + 'label' => esc_html__( 'Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'accept-user-rating', + ), + 'review-count' => array( + 'label' => esc_html__( 'Review Count', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-service' => array( + 'key' => 'service', + 'icon' => 'dashicons dashicons-admin-generic', + 'label' => __( 'Service', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-schema-markup-to-service-page/' : 'https://schema.org/Service', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Service Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'type' => array( + 'label' => esc_html__( 'Service Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + 'description' => esc_html__( 'The type of service being offered, e.g. Broadcast Service, Cable Or Satellite Service, etc.', 'wp-schema-pro' ), + ), + 'area' => array( + 'label' => esc_html__( 'Service Area', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'The geographic area where a service or offered item is provided.', 'wp-schema-pro' ), + ), + 'provider' => array( + 'label' => esc_html__( 'Service Provider Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + 'required' => true, + ), + 'location-image' => array( + 'label' => esc_html__( 'Service Provider Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'none', + 'required' => true, + 'description' => esc_html__( 'The service provider or service operator Image .', 'wp-schema-pro' ), + ), + 'description' => array( + 'label' => esc_html__( 'Service Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + 'image' => array( + 'label' => esc_html__( 'Service Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'description' => esc_html__( 'Here,you can add specific service image.', 'wp-schema-pro' ), + ), + 'location-locality' => array( + 'label' => esc_html__( 'Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'location-region' => array( + 'label' => esc_html__( 'Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'addressCountry' => array( + 'label' => esc_html__( 'Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'country', + ), + 'postalCode' => array( + 'label' => esc_html__( 'Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'location-street' => array( + 'label' => esc_html__( 'Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'telephone' => array( + 'label' => esc_html__( 'Telephone', 'wp-schema-pro' ), + 'type' => 'tel', + 'default' => 'none', + ), + 'price-range' => array( + 'label' => esc_html__( 'Price Range', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + ), + ), + 'bsf-aiosrs-software-application' => array( + 'key' => 'software-application', + 'icon' => 'dashicons dashicons-dashboard', + 'label' => __( 'Software Application', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-schema-markup-for-software-application-page/' : 'https://developers.google.com/search/docs/data-types/software-apps', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Application Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'category' => array( + 'label' => esc_html__( 'Application Type', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'software-category', + ), + 'operating-system' => array( + 'label' => esc_html__( 'Operating System', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'Software for the operating system, for example, "Windows 7", "OSX 10.6", "Android 1.6"', 'wp-schema-pro' ), + ), + 'price' => array( + 'label' => esc_html__( 'Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'required' => true, + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'currency', + ), + 'image' => array( + 'label' => esc_html__( 'Application Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + ), + 'rating' => array( + 'label' => esc_html__( 'Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'required' => true, + 'default' => 'accept-user-rating', + ), + 'review-count' => array( + 'label' => esc_html__( 'Review Count', 'wp-schema-pro' ), + 'type' => 'number', + 'required' => true, + 'default' => 'none', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-video-object' => array( + 'key' => 'video-object', + 'icon' => 'dashicons dashicons-video-alt3', + 'label' => __( 'Video Object', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/how-to-add-a-schema-markup-for-a-video-object/' : 'https://developers.google.com/search/docs/data-types/videos', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Video Title', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Video Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + 'required' => true, + ), + 'image' => array( + 'label' => esc_html__( 'Video Thumbnail', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'required' => true, + ), + 'upload-date' => array( + 'label' => esc_html__( 'Video Upload Date', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'post_date', + 'required' => true, + ), + 'orgnization-name' => array( + 'label' => esc_html__( 'Publisher Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + ), + 'site-logo' => array( + 'label' => esc_html__( 'Publisher Logo', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'site_logo', + ), + 'content-url' => array( + 'label' => esc_html__( 'Content URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'embed-url' => array( + 'label' => esc_html__( 'Embed URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'duration' => array( + 'label' => esc_html__( 'Video Duration', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'none', + ), + 'expires-date' => array( + 'label' => esc_html__( 'Video Expires On', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'none', + ), + 'interaction-count' => array( + 'label' => esc_html__( 'Video Interaction Count', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'description' => esc_html__( 'The number of times the video has been watched.', 'wp-schema-pro' ), + ), + 'clip' => array( + 'label' => esc_html__( 'Clips', 'wp-schema-pro' ), + 'type' => 'repeater', + 'is_recommnded' => true, + 'fields' => array( + 'clip-name' => array( + 'label' => esc_html__( 'Clip Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'clip-start-offset' => array( + 'label' => esc_html__( 'Clip Start Offset', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'description' => esc_html__( 'The start time of the clip expressed as the number of seconds from the beginning of the work.', 'wp-schema-pro' ), + ), + 'clip-end-offset' => array( + 'label' => esc_html__( 'Clip End Offset', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'description' => esc_html__( 'The end time of the clip expressed as the number of seconds from the beginning of the work.', 'wp-schema-pro' ), + ), + 'clip-url' => array( + 'label' => esc_html__( 'Clip URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'A URL that points to the start time of the clip.', 'wp-schema-pro' ), + ), + ), + ), + 'seekto-action-start-offset' => array( + 'label' => esc_html__( 'Seek To Action Start Offset', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'none', + 'description' => esc_html__( 'The number of seconds to skip to.', 'wp-schema-pro' ), + ), + 'seekto-action-target' => array( + 'label' => esc_html__( 'Seek To Action target URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'A URL that points to the start time of the clip.', 'wp-schema-pro' ), + ), + 'thumbnail-url' => array( + 'label' => esc_html__( 'Thumbnail URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'regions-allowed' => array( + 'label' => esc_html__( 'Regions Allowed', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + ), + 'is-live-broadcast' => array( + 'label' => esc_html__( 'Is Live Broadcast', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => false, + ), + 'start-date' => array( + 'label' => esc_html__( 'Live Broadcast Start Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'none', + ), + 'end-date' => array( + 'label' => esc_html__( 'Live Broadcast End Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'none', + ), + ), + ), + + 'bsf-aiosrs-faq' => array( + 'key' => 'faq', + 'icon' => 'dashicons dashicons-editor-help', + 'label' => __( 'FAQ', 'wp-schema-pro' ), + 'guideline-link' => 'https://developers.google.com/search/docs/data-types/faqpage', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + + 'question-answer' => array( + 'label' => esc_html__( 'Question-Answer', 'wp-schema-pro' ), + 'type' => 'repeater-target', + 'fields' => array( + 'question' => array( + 'label' => esc_html__( 'Question', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'answer' => array( + 'label' => esc_html__( 'Answer', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'create-field', + 'required' => true, + ), + ), + ), + ), + ), + 'bsf-aiosrs-how-to' => array( + 'key' => 'how-to', + 'icon' => 'dashicons dashicons-list-view', + 'label' => __( 'How-to', 'wp-schema-pro' ), + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-how-to-schema/' : 'https://schema.org/HowTo', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Description', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_content', + ), + 'total-time' => array( + 'label' => esc_html__( 'Total Time', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'create-field', + 'description' => esc_html__( 'The total time required to perform instructions or a direction (including time to prepare the supplies).', 'wp-schema-pro' ), + ), + 'supply' => array( + 'label' => esc_html__( 'Materials', 'wp-schema-pro' ), + 'type' => 'repeater-target', + 'description' => esc_html__( 'The supply property lists the item(s) “consumed when performing instructions or a direction.â€', 'wp-schema-pro' ), + 'fields' => array( + 'name' => array( + 'label' => esc_html__( 'Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + ), + ), + 'tool' => array( + 'label' => esc_html__( 'Tools', 'wp-schema-pro' ), + 'type' => 'repeater-target', + 'description' => esc_html__( 'The tool property lists the item(s) used (but not consumed) when performing instructions or a direction.', 'wp-schema-pro' ), + 'fields' => array( + 'name' => array( + 'label' => esc_html__( 'Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + ), + ), + 'steps' => array( + 'label' => esc_html__( 'Steps', 'wp-schema-pro' ), + 'type' => 'repeater-target', + 'required' => true, + 'description' => esc_html__( 'Google needs at least two steps.', 'wp-schema-pro' ), + 'fields' => array( + 'name' => array( + 'label' => esc_html__( 'Step Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => false, + ), + 'description' => array( + 'label' => esc_html__( 'Step Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'none', + 'required' => true, + ), + 'url' => array( + 'label' => esc_html__( 'Step URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_permalink', + 'required' => false, + ), + 'image' => array( + 'label' => esc_html__( 'Step Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'none', + 'required' => false, + ), + ), + ), + + ), + ), + 'bsf-aiosrs-custom-markup' => array( + 'key' => 'custom-markup', + 'icon' => 'dashicons dashicons-edit-page', + 'label' => __( 'Custom Markup', 'wp-schema-pro' ), + 'guideline-link' => 'https://wpschema.com/docs/add-custom-schema-markup/', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'custom-markup' => array( + 'label' => esc_html__( 'Custom Markup', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'none', + 'description' => esc_html__( + 'Be sure to add custom schema markup in JSON-LD format. + As the custom schema markup in JSON-LD format, make sure to add it in script tag. + Validate schema markup with the Structured Data Testing Tool or Rich Results Test before adding to the website.', + 'wp-schema-pro' + ), + 'required' => false, + ), + ), + ), + 'bsf-aiosrs-image-license' => array( + 'key' => 'image-license', + 'icon' => 'dashicons dashicons-format-image', + 'label' => __( 'Image License', 'wp-schema-pro' ), + + 'guideline-link' => empty( $doc_link ) ? 'https://wpschema.com/docs/add-image-license-schema/' : 'https://developers.google.com/search/docs/advanced/structured-data/image-license-metadata', + 'path' => BSF_AIOSRS_PRO_DIR . 'classes/schema/', + 'subkeys' => array( + 'image-license' => array( + 'label' => esc_html__( 'Image License', 'wp-schema-pro' ), + 'type' => 'repeater', + 'description' => esc_html__( 'Include the license property for your image to be eligible to be shown with the Licensable badge', 'wp-schema-pro' ), + 'fields' => array( + 'content-url' => array( + 'label' => esc_html__( 'Content URL', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'required' => true, + ), + 'license' => array( + 'label' => esc_html__( 'License', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'acquire-license-Page' => array( + 'label' => esc_html__( 'Acquire License Page', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'credit-text' => array( + 'label' => esc_html__( 'Credit Text', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'creator-type' => array( + 'label' => esc_html__( 'Creator Type', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'Person', + 'choices' => array( + 'Person' => esc_html__( 'Person', 'wp-schema-pro' ), + 'Organization' => esc_html__( 'Organization', 'wp-schema-pro' ), + ), + ), + 'creator' => array( + 'label' => esc_html__( 'Creator', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_name', + ), + 'copy-right-notice' => array( + 'label' => esc_html__( 'Copy Right Notice', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + + ), + ), + ), + ), + ) + ); + + self::$schema_item_types = apply_filters( + 'wp_schema_pro_schema_item_type_recommended', + array( + 'bsf-aiosrs-book' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Book Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Book Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + 'required' => true, + ), + 'serial-number' => array( + + 'label' => esc_html__( 'Book ISBN', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + 'required' => true, + 'description' => esc_html__( 'The International Standard Book Number (ISBN) is a unique numeric commercial book identifier. ISBN having 10 or 13 digit number.', 'wp-schema-pro' ), + ), + 'author' => array( + 'label' => esc_html__( 'Book Author Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'same-As' => array( + 'label' => esc_html__( 'Same As', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'A reference page that unambiguously indicates the item\'s identity; for example, the URL of the item\'s Wikipedia page, Freebase page, or official website.', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-course' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Course Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Course Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + 'orgnization-name' => array( + 'label' => esc_html__( 'Course Organization Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + ), + 'course-instance' => array( + 'label' => esc_html__( 'Course Instance', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'course-instance', + ), + 'name' => array( + 'label' => esc_html__( 'Instance Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Instance Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'none', + 'required' => true, + ), + 'category' => array( + 'label' => esc_html__( 'Offer Category', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'none', + 'dropdown-type' => 'offer-category', + ), + 'price' => array( + 'label' => esc_html__( 'Price', 'wp-schema-pro' ), + 'type' => 'number', + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'courseMode' => array( + 'label' => esc_html__( 'Course Attendance Mode', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'course-attendance-mode', + 'required' => false, + 'description' => esc_html__( 'The location of the Course Instance. There are different requirements depending on if the Course is happening online or at a physical location.', 'wp-schema-pro' ), + ), + 'course-workload' => array( + 'label' => esc_html__( 'Course Workload', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'required' => true, + 'default' => 'none', + ), + 'currency' => array( + 'label' => esc_html__( 'Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'currency', + ), + ), + ), + 'bsf-aiosrs-event' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Event Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'image' => array( + 'label' => esc_html__( 'Event Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + ), + 'event-status' => array( + 'label' => esc_html__( ' Status', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'event-status', + 'required' => false, + 'description' => esc_html__( 'The status of the event. If you don\'t use this field, Google understands the eventStatus to be EventScheduled. ', 'wp-schema-pro' ), + + ), + 'event-attendance-mode' => array( + 'label' => esc_html__( ' Attendance Mode', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'event-attendance-mode', + 'required' => false, + 'description' => esc_html__( 'The location of the event. There are different requirements depending on if the event is happening online or at a physical location.', 'wp-schema-pro' ), + + ), + 'start-date' => array( + 'label' => esc_html__( 'Event Start Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'create-field', + 'required' => true, + ), + 'end-date' => array( + 'label' => esc_html__( 'Event End Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'create-field', + ), + 'previous-date' => array( + 'label' => esc_html__( 'Previous Start Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'class' => 'wpsp-event-status-rescheduled', + 'default' => 'custom-text', + ), + 'online-location' => array( + 'label' => esc_html__( 'Online Event URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_permalink', + 'class' => 'wpsp-event-status-online', + + ), + 'event-status' => array( + 'label' => esc_html__( ' Status', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'event-status', + 'required' => false, + 'description' => esc_html__( 'The status of the event. If you don\'t use this field, Google understands the eventStatus to be EventScheduled. ', 'wp-schema-pro' ), + + ), + 'event-attendance-mode' => array( + 'label' => esc_html__( ' Attendance Mode', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'custom-text', + 'dropdown-type' => 'event-attendance-mode', + 'required' => false, + 'description' => esc_html__( 'The location of the event. There are different requirements depending on if the event is happening online or at a physical location.', 'wp-schema-pro' ), + + ), + 'location' => array( + 'label' => esc_html__( 'Event Location Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'class' => 'wpsp-event-status-offline', + ), + 'location-street' => array( + 'label' => esc_html__( 'Event Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + 'class' => 'wpsp-event-status-offline', + ), + 'location-locality' => array( + 'label' => esc_html__( 'Event Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + 'class' => 'wpsp-event-status-offline', + ), + 'location-postal' => array( + 'label' => esc_html__( 'Event Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + 'class' => 'wpsp-event-status-offline', + ), + 'location-region' => array( + 'label' => esc_html__( 'Event Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + 'class' => 'wpsp-event-status-offline', + ), + 'location-country' => array( + 'label' => esc_html__( 'Event Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'required' => true, + 'dropdown-type' => 'country', + 'class' => 'wpsp-event-status-offline', + ), + 'avail' => array( + 'label' => esc_html__( 'Event Offer Availability', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'availability', + ), + 'price' => array( + 'label' => esc_html__( 'Event Offer Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Event Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'currency', + ), + 'valid-from' => array( + 'label' => esc_html__( 'Event Offer Valid From', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'create-field', + ), + 'ticket-buy-url' => array( + 'label' => esc_html__( 'Event Ticket Link', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'performer' => array( + 'label' => esc_html__( 'Event Performer', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'description' => array( + 'label' => esc_html__( 'Event Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + 'event-organizer-name' => array( + 'label' => esc_html__( 'Organizer Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'dropdown-type' => 'event-attendance-mode', + 'required' => false, + 'description' => esc_html__( 'The person or organization that is hosting the event.', 'wp-schema-pro' ), + + ), + 'event-organizer-url' => array( + 'label' => esc_html__( 'Organizer URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'dropdown-type' => 'event-attendance-mode', + 'required' => false, + ), + ), + + ), + 'bsf-aiosrs-local-business' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Local Business Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + 'required' => true, + ), + 'image' => array( + 'label' => esc_html__( 'Local Business Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'create-field', + 'required' => true, + ), + 'telephone' => array( + 'label' => esc_html__( 'Local Business Telephone', 'wp-schema-pro' ), + 'type' => 'tel', + 'default' => 'create-field', + ), + 'location-street' => array( + 'label' => esc_html__( 'Local Business Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'location-locality' => array( + 'label' => esc_html__( 'Local Business Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'location-postal' => array( + 'label' => esc_html__( 'Local Business Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'location-region' => array( + 'label' => esc_html__( 'Local Business Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'location-country' => array( + 'label' => esc_html__( 'Local Business Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'country', + ), + 'price-range' => array( + 'label' => esc_html__( 'Local Business Price Range', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + ), + ), + 'bsf-aiosrs-product' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Product Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'brand-name' => array( + 'label' => esc_html__( 'Product Brand Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'image' => array( + 'label' => esc_html__( ' Product Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'required' => true, + ), + 'url' => array( + 'label' => esc_html__( ' Product URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_permalink', + ), + 'description' => array( + 'label' => esc_html__( 'Product Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + 'required' => true, + ), + 'sku' => array( + 'label' => esc_html__( 'Product SKU', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'The Stock Keeping Unit (SKU), a merchant-specific identifier for a product or service, or the product e.g. "0446310786"', 'wp-schema-pro' ), + ), + 'mpn' => array( + 'label' => esc_html__( 'Product MPN', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'The Manufacturer Part Number (MPN) of the product, or the product to which the offer refers. e.g. "925872"', 'wp-schema-pro' ), + ), + 'avail' => array( + 'label' => esc_html__( 'Product Availability', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'availability', + ), + 'price-valid-until' => array( + 'label' => esc_html__( 'Product Price Valid Until', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'create-field', + ), + 'price' => array( + 'label' => esc_html__( 'Product Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + 'attrs' => array( + 'min' => '0', + 'step' => '0.01', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Product Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'currency', + ), + 'rating' => array( + 'label' => esc_html__( 'Product Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'accept-user-rating', + ), + 'review-count' => array( + 'label' => esc_html__( 'Product Review Count', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'none', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-recipe' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Recipe Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'image' => array( + 'label' => esc_html__( 'Recipe Photo', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Recipe Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + ), + 'author' => array( + 'label' => esc_html__( 'Recipe Author Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'author_name', + ), + 'preperation-time' => array( + 'label' => esc_html__( 'Recipe Preparation Time', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'create-field', + ), + 'cook-time' => array( + 'label' => esc_html__( 'Recipe Cook Time', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'create-field', + ), + 'recipe-keywords' => array( + 'label' => esc_html__( 'Recipe Keywords', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'e.g. "winter apple pie", "nutmeg crust"', 'wp-schema-pro' ), + ), + 'recipe-category' => array( + 'label' => esc_html__( 'Recipe Category', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'e.g. "dinner", "entree", or "dessert"', 'wp-schema-pro' ), + ), + 'recipe-cuisine' => array( + 'label' => esc_html__( 'Recipe Cuisine', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'e.g. "French", "Indian", or "American"', 'wp-schema-pro' ), + ), + 'nutrition' => array( + 'label' => esc_html__( 'Recipe Calories', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'The number of calories in the recipe.', 'wp-schema-pro' ), + ), + 'ingredients' => array( + 'label' => esc_html__( 'Recipe Ingredients', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'Ingredient used in the recipe. Separate multiple ingredients with comma(,).', 'wp-schema-pro' ), + ), + 'recipe-instructions' => array( + 'label' => esc_html__( 'Recipe Instructions Step', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'Recipe Instructions Steps used in the recipe. Separate multiple Instructions Steps with comma(,).', 'wp-schema-pro' ), + ), + 'video-name' => array( + 'label' => esc_html__( 'Recipe Video Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + ), + 'video-desc' => array( + 'label' => esc_html__( 'Recipe Video Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'create-field', + 'required' => true, + ), + 'video-image' => array( + 'label' => esc_html__( 'Recipe Video Thumbnail Url', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'create-field', + 'required' => true, + ), + 'recipe-video-content-url' => array( + 'label' => esc_html__( 'Recipe Video Content URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'recipe-video-embed-url' => array( + 'label' => esc_html__( 'Recipe Video Embed URL', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'recipe-video-duration' => array( + 'label' => esc_html__( 'Recipe Video Duration', 'wp-schema-pro' ), + 'type' => 'time-duration', + 'default' => 'create-field', + ), + 'recipe-video-upload-date' => array( + 'label' => esc_html__( 'Recipe Video Upload Date', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'post_date', + 'required' => true, + ), + 'recipe-video-expires-date' => array( + 'label' => esc_html__( 'Recipe Video Expires On', 'wp-schema-pro' ), + 'type' => 'date', + 'default' => 'create-field', + ), + 'recipe-video-interaction-count' => array( + 'label' => esc_html__( 'Recipe Video Interaction Count', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + ), + 'rating' => array( + 'label' => esc_html__( 'Recipe Video Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'default' => 'accept-user-rating', + ), + 'review-count' => array( + 'label' => esc_html__( 'Recipe Video Review Count', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'number', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + ), + ), + 'bsf-aiosrs-software-application' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Software Application Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'operating-system' => array( + 'label' => esc_html__( 'Software Application Operating System', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'description' => esc_html__( 'Software for the operating system, for example, "Windows 7", "OSX 10.6", "Android 1.6"', 'wp-schema-pro' ), + ), + 'category' => array( + 'label' => esc_html__( 'Software Application Category', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'software-category', + ), + 'rating' => array( + 'label' => esc_html__( 'Software Application Rating', 'wp-schema-pro' ), + 'type' => 'rating', + 'required' => true, + 'default' => 'accept-user-rating', + ), + 'review-count' => array( + 'label' => esc_html__( 'Software Application Review Count', 'wp-schema-pro' ), + 'type' => 'number', + 'required' => true, + 'default' => 'number', + 'description' => esc_html__( 'The count of total number of reviews. e.g. "11"', 'wp-schema-pro' ), + ), + 'price' => array( + 'label' => esc_html__( 'Software Application Price', 'wp-schema-pro' ), + 'type' => 'number', + 'default' => 'create-field', + 'required' => true, + 'attrs' => array( + 'min' => '0', + 'step' => 'any', + ), + ), + 'currency' => array( + 'label' => esc_html__( 'Software Application Currency', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'currency', + ), + ), + ), + 'bsf-aiosrs-movie' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Movie Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'post_title', + 'required' => true, + ), + 'description' => array( + 'label' => esc_html__( 'Movie Description', 'wp-schema-pro' ), + 'type' => 'textarea', + 'default' => 'post_content', + 'required' => true, + ), + 'same-As' => array( + 'label' => esc_html__( 'Movie SameAs', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + 'required' => true, + 'description' => esc_html__( 'A reference page that unambiguously indicates the item\'s identity; for example, the URL of the item\'s Wikipedia page, Freebase page, or official website.', 'wp-schema-pro' ), + ), + 'image' => array( + 'label' => esc_html__( 'Movie Image', 'wp-schema-pro' ), + 'type' => 'image', + 'default' => 'featured_img', + 'required' => true, + ), + 'dateCreated' => array( + 'label' => esc_html__( 'Movie Date', 'wp-schema-pro' ), + 'type' => 'datetime-local', + 'default' => 'create-field', + ), + 'director-name' => array( + 'label' => esc_html__( 'Movie Director Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + ), + ), + 'bsf-aiosrs-organization' => array( + 'subkeys' => array( + 'name' => array( + 'label' => esc_html__( 'Organization Name', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'blogname', + 'required' => true, + ), + 'location-street' => array( + 'label' => esc_html__( 'Organization Street Address', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'location-locality' => array( + 'label' => esc_html__( 'Organization Locality', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'location-postal' => array( + 'label' => esc_html__( 'Organization Postal Code', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'location-region' => array( + 'label' => esc_html__( 'Organization Region', 'wp-schema-pro' ), + 'type' => 'text', + 'default' => 'create-field', + ), + 'location-country' => array( + 'label' => esc_html__( 'Organization Country', 'wp-schema-pro' ), + 'type' => 'dropdown', + 'default' => 'create-field', + 'dropdown-type' => 'country', + ), + ), + ), + ) + ); + } + + /** + * Get Meta list for Schema's meta field options. + * + * @param string $type Field type. + * @return array + */ + public static function get_meta_list( $type ) { + + if ( empty( self::$post_metadata ) ) { + + self::$post_metadata = apply_filters( + 'wp_schema_pro_post_metadata', + array( + 'text' => array( + array( + 'label' => __( 'Site Meta', 'wp-schema-pro' ), + 'meta-list' => array( + 'blogname' => __( 'Site Title', 'wp-schema-pro' ), + 'blogdescription' => __( 'Tagline', 'wp-schema-pro' ), + 'site_url' => __( 'Site URL', 'wp-schema-pro' ), + ), + ), + array( + 'label' => __( 'Post Meta (Basic Fields)', 'wp-schema-pro' ), + 'meta-list' => array( + 'post_title' => __( 'Title', 'wp-schema-pro' ), + 'post_content' => __( 'Content', 'wp-schema-pro' ), + 'post_excerpt' => __( 'Excerpt', 'wp-schema-pro' ), + 'post_permalink' => __( 'Permalink', 'wp-schema-pro' ), + 'author_name' => __( 'Author Name', 'wp-schema-pro' ), + 'author_first_name' => __( 'Author First Name', 'wp-schema-pro' ), + 'author_last_name' => __( 'Author Last Name', 'wp-schema-pro' ), + 'author_url' => __( 'Author URL', 'wp-schema-pro' ), + 'post_date' => __( 'Publish Date', 'wp-schema-pro' ), + 'post_modified' => __( 'Last Modify Date', 'wp-schema-pro' ), + ), + ), + array( + 'label' => __( 'Add Custom Info', 'wp-schema-pro' ), + 'meta-list' => array( + 'custom-text' => __( 'Fixed Text', 'wp-schema-pro' ), + 'create-field' => __( 'New Custom Field', 'wp-schema-pro' ), + ), + ), + array( + 'label' => __( 'All Other Custom Fields', 'wp-schema-pro' ), + 'meta-list' => array( + 'specific-field' => __( 'Select Other Custom Fields Here', 'wp-schema-pro' ), + ), + ), + ), + 'image' => array( + array( + 'label' => __( 'Site Meta', 'wp-schema-pro' ), + 'meta-list' => array( + 'site_logo' => __( 'Logo', 'wp-schema-pro' ), + ), + ), + array( + 'label' => __( 'Post Meta (Basic Fields)', 'wp-schema-pro' ), + 'meta-list' => array( + 'featured_img' => __( 'Featured Image', 'wp-schema-pro' ), + 'author_image' => __( 'Author Image', 'wp-schema-pro' ), + ), + ), + array( + 'label' => __( 'Add Custom Info', 'wp-schema-pro' ), + 'meta-list' => array( + 'custom-text' => __( 'Fixed Image', 'wp-schema-pro' ), + 'fixed-text' => __( 'Image URL', 'wp-schema-pro' ), + 'create-field' => __( 'New Custom Field', 'wp-schema-pro' ), + ), + ), + array( + 'label' => __( 'All Other Custom Fields', 'wp-schema-pro' ), + 'meta-list' => array( + 'specific-field' => __( 'Select Other Custom Fields Here', 'wp-schema-pro' ), + ), + ), + ), + ) + ); + } + + return self::$post_metadata[ $type ]; + } + + /** + * Advanced Custom Fields compatibility. + * + * @param array $fields Meta fields array. + * @return array + */ + public function acf_compatibility( $fields ) { + + if ( function_exists( 'acf' ) && class_exists( 'acf' ) ) { + + $post_type = 'acf'; + if ( ( defined( 'ACF_PRO' ) && ACF_PRO ) || ( defined( 'ACF' ) && ACF ) ) { + $post_type = 'acf-field-group'; + } + $text_acf_field = array(); + $image_acf_field = array(); + $args = array( + 'post_type' => $post_type, + 'posts_per_page' => -1, + 'post_status' => 'publish', + ); + + $the_query = new WP_Query( $args ); + if ( $the_query->have_posts() ) : + while ( $the_query->have_posts() ) : + $the_query->the_post(); + + $post_id = get_the_id(); + + // Get ACF fields. + // Ignore the PHPCS warning about hook names. + // @codingStandardsIgnoreStart + $acf_fields = apply_filters( 'acf/field_group/get_fields', array(), $post_id ); // WPCS: XSS OK. + // @codingStandardsIgnoreEnd + + if ( 'acf-field-group' === $post_type ) { + $acf_fields = acf_get_fields( $post_id ); + } + + if ( is_array( $acf_fields ) && ! empty( $acf_fields ) ) { + foreach ( $acf_fields as $key => $value ) { + + if ( 'image' === $value['type'] ) { + $image_acf_field[ $value['name'] ] = $value['label']; + } else { + $text_acf_field[ $value['name'] ] = $value['label']; + } + } + } + endwhile; + endif; + wp_reset_postdata(); + + if ( ! empty( $text_acf_field ) ) { + $fields['text'][] = array( + 'label' => __( 'Advanced Custom Fields', 'wp-schema-pro' ), + 'meta-list' => $text_acf_field, + ); + } + + if ( ! empty( $image_acf_field ) ) { + $fields['image'][] = array( + 'label' => __( 'Advanced Custom Fields', 'wp-schema-pro' ), + 'meta-list' => $image_acf_field, + ); + } + } + + return $fields; + } + + /** + * Init Metabox + */ + public function init_metabox() { + add_action( 'add_meta_boxes', array( $this, 'setup_meta_box' ) ); + add_action( 'save_post', array( $this, 'save_meta_box' ) ); + + /** + * Set metabox options + * + * @see http://php.net/manual/en/filter.filters.sanitize.php + */ + self::$meta_option = apply_filters( + 'wp_schema_pro_schema_meta_box_options', + array( + 'bsf-aiosrs-schema-type' => array( + 'default' => 'article', + 'sanitize' => 'FILTER_DEFAULT', + ), + 'bsf-aiosrs-schema-location' => array( + 'default' => array( + 'rule' => array( + 'basic-singulars', + ), + ), + 'sanitize' => 'FILTER_DEFAULT', + ), + 'bsf-aiosrs-schema-exclusion' => array( + 'default' => array(), + 'sanitize' => 'FILTER_DEFAULT', + ), + ) + ); + + $schema_meta_keys = array(); + foreach ( self::$schema_meta_fields as $key => $value ) { + self::$schema_meta_keys[] = $key; + self::$meta_option[ $key ] = array( + 'default' => array(), + 'sanitize' => 'FILTER_DEFAULT', + ); + } + } + + /** + * Setup Metabox + */ + public function setup_meta_box() { + + // Get all posts. + $post_types = get_post_types(); + + if ( 'aiosrs-schema' === get_post_type() ) { + // Enable for all posts. + foreach ( $post_types as $type ) { + + if ( 'attachment' !== $type ) { + add_meta_box( + 'aiosrs-schema-settings', // Id. + __( 'Schema Settings', 'wp-schema-pro' ), // Title. + array( $this, 'markup_meta_box' ), // Callback. + $type, // Post_type. + 'normal', // Context. + 'high' // Priority. + ); + } + } + } + } + + /** + * Keep the Schema Pro menu open when editing the advanced headers. + * Highlights the wanted admin (sub-) menu items for the CPT. + * + * @since 1.0.0 + */ + public function menu_highlight() { + global $parent_file, $submenu_file, $post_type; + if ( 'aiosrs-schema' === $post_type ) { + + $parent_page = BSF_AIOSRS_Pro_Admin::$default_menu_position; + $setting_options = BSF_AIOSRS_Pro_Helper::$settings['aiosrs-pro-settings']; + $menu_position = isset( $setting_options['menu-position'] ) ? $setting_options['menu-position'] : $parent_page; + + $is_top_level_page = in_array( $menu_position, array( 'top', 'middle', 'bottom' ), true ); + + if ( $is_top_level_page ) { + $parent_file = 'aiosrs_pro_admin_menu_page'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + $submenu_file = 'aiosrs_pro_admin_menu_page'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + } else { + $parent_file = BSF_AIOSRS_Pro_Admin::$default_menu_position; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + $submenu_file = 'aiosrs_pro_admin_menu_page'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + } + } + } + + /** + * Schema location rule notice. + * + * @since 1.0.0 + */ + public function schema_location_rule_notice() { + global $post, $post_type; + if ( 'aiosrs-schema' === $post_type ) { + + $type = get_post_meta( $post->ID, 'bsf-aiosrs-schema-type', true ); + if ( ! empty( $type ) ) { + $meta_values = get_post_meta( $post->ID, 'bsf-aiosrs-' . $type, true ); + $schema_meta_repeater = ''; + $meta_repeater_value = ''; + $required_fields = array(); + $schema_meta = self::$schema_meta_fields[ 'bsf-aiosrs-' . $type ]['subkeys']; + $schema_meta_keys = array_keys( $schema_meta ); + foreach ( $schema_meta as $key ) { + if ( 'repeater' === $key['type'] ) { + $schema_meta_repeater = $key['fields']; + } + } + if ( ! empty( $schema_meta_repeater ) ) { + $schema_meta_repeater_keys = array_keys( $schema_meta_repeater ); + } + + if ( is_array( $meta_values ) ) { + foreach ( $meta_values as $index => $repeater_values ) { + if ( is_array( $repeater_values ) ) { + foreach ( $repeater_values as $repeater_key => $repeater_value ) { + $meta_repeater_value = $repeater_value; + } + } + } + } + + if ( is_array( $schema_meta_keys ) && is_array( $meta_values ) && ! empty( $meta_values ) ) { + foreach ( $schema_meta_keys as $meta_key ) { + if ( ( isset( $schema_meta[ $meta_key ]['required'] ) && true === $schema_meta[ $meta_key ]['required'] ) && ( ! isset( $meta_values[ $meta_key ] ) || 'none' === $meta_values[ $meta_key ] ) ) { + $required_fields[] = $schema_meta[ $meta_key ]['label']; + } + } + } + if ( ! empty( $schema_meta_repeater ) && is_array( $schema_meta_repeater_keys ) && is_array( $meta_repeater_value ) && ! empty( $meta_repeater_value ) ) { + foreach ( $schema_meta_repeater_keys as $repeater_key ) { + if ( ( isset( $schema_meta_repeater[ $repeater_key ]['required'] ) && true === $schema_meta_repeater[ $repeater_key ]['required'] ) && ( ! isset( $meta_repeater_value[ $repeater_key ] ) || 'none' === $meta_repeater_value[ $repeater_key ] ) ) { + $required_fields[] = $schema_meta_repeater[ $repeater_key ]['label']; + } + } + } + $count = 1; + if ( ! empty( $required_fields ) ) { + add_action( + 'admin_notices', + function() use ( $required_fields ) { + $count = count( $required_fields ); + $required_fields = '' . implode( ', ', $required_fields ) . ''; + if ( $count > 1 ) { + /* translators: %s post title. */ + $notice = sprintf( __( 'Schema requires mapping of %s meta fields.', 'wp-schema-pro' ), $required_fields ); + } else { + /* translators: %s post title. */ + $notice = sprintf( __( 'Schema requires mapping of %s meta field.', 'wp-schema-pro' ), $required_fields ); + } + + echo '
            '; + echo '

            ' . wp_kses_post( $notice ) . '

            '; + echo '
            '; + + } + ); + } + } + } + } + + /** + * Get metabox options + */ + public static function get_meta_option() { + return self::$meta_option; + } + + /** + * Metabox Markup + * + * @param object $post Post object. + * @return void + */ + public function markup_meta_box( $post ) { + + wp_nonce_field( basename( __FILE__ ), 'aiosrs-schema' ); + $stored = get_post_meta( $post->ID ); + + $current_post_type = isset( $stored['bsf-aiosrs-schema-type'] ) ? $stored['bsf-aiosrs-schema-type'] : ''; + $current_post_type = is_array( $current_post_type ) ? 'bsf-aiosrs-' . reset( $current_post_type ) : ''; + + if ( empty( $current_post_type ) ) { + return; + } + + $schema_meta_keys = array( 'bsf-aiosrs-schema-location', 'bsf-aiosrs-schema-exclusion', $current_post_type ); + + // Set stored and override defaults. + foreach ( $stored as $key => $value ) { + if ( in_array( $key, $schema_meta_keys, true ) ) { + self::$meta_option[ $key ]['default'] = ( isset( $stored[ $key ][0] ) ) ? maybe_unserialize( $stored[ $key ][0] ) : ''; + } else { + self::$meta_option[ $key ]['default'] = ( isset( $stored[ $key ][0] ) ) ? $stored[ $key ][0] : ''; + } + } + + // Get defaults. + $meta = self::get_meta_option(); + + /** + * Get options + */ + $schema_type = ( isset( $meta['bsf-aiosrs-schema-type']['default'] ) ) ? $meta['bsf-aiosrs-schema-type']['default'] : ''; + $display_locations = ( isset( $meta['bsf-aiosrs-schema-location']['default'] ) ) ? $meta['bsf-aiosrs-schema-location']['default'] : ''; + $exclude_locations = ( isset( $meta['bsf-aiosrs-schema-exclusion']['default'] ) ) ? $meta['bsf-aiosrs-schema-exclusion']['default'] : ''; + + $schemas_meta = array( + 'schema_type' => $schema_type, + 'include-locations' => $display_locations, + 'exclude-locations' => $exclude_locations, + ); + + $schemas_meta[ $current_post_type ] = ( isset( $meta[ $current_post_type ]['default'] ) ) ? $meta[ $current_post_type ]['default'] : array(); + + do_action( 'aiosrs_schema_settings_markup_before', $meta ); + $this->render( $schemas_meta ); + do_action( 'aiosrs_schema_settings_markup_after', $meta ); + } + + /** + * Page Header Tabs + * + * @param array $meta_values Post meta. + */ + public function render( $meta_values ) { + + $allowd_fields = array_keys( $meta_values ); + + ?> + + + + + +
            + + + + + +
            + + + + + +
            +
            +
            +

            + + +

            +
            + + + + + + + + + +
            + + + + __( 'Display Rules', 'wp-schema-pro' ), + 'value' => '[{"type":"basic-global","specific":null}]', + 'tags' => 'site,enable,target,pages', + 'rule_type' => 'display', + 'add_rule_label' => __( 'Add “AND†Rule', 'wp-schema-pro' ), + ), + $meta_values['include-locations'] + ); + ?> +
            + + + + __( 'Exclude On', 'wp-schema-pro' ), + 'value' => '[]', + 'tags' => 'site,enable,target,pages', + 'add_rule_label' => __( 'Add “OR†Rule', 'wp-schema-pro' ), + 'rule_type' => 'exclude', + ), + $meta_values['exclude-locations'] + ); + ?> +
            +
            +

            + + +

            +
            + $value ) { ?> + + + + > + + + + + + + $subkey_data ) { + self::get_meta_markup( + array( + 'name' => $key, + 'subkey' => $subkey, + 'subkey_data' => $subkey_data, + ), + $meta_values + ); + } + ?> +
            + + + + + + +
            + + + $name . '[' . $subkey . '-custom-text]', + 'id' => $replace_name . $subkey . '-custom-text', + 'class' => $replace_name . $subkey . '-custom-text wpsp-' . $option_type . '-' . $subkey, + 'dropdown-type' => isset( $option_meta['subkey_data']['dropdown-type'] ) ? $option_meta['subkey_data']['dropdown-type'] : '', + ); + + $specific_field_name = $name . '[' . $subkey . '-specific-field]'; + + $attrs = ''; + if ( isset( $option_meta['subkey_data']['attrs'] ) && ! empty( $option_meta['subkey_data']['attrs'] ) ) { + foreach ( $option_meta['subkey_data']['attrs'] as $key => $value ) { + $attrs .= $key . '="' . esc_attr( $value ) . '" '; + } + } + + $dep_class = isset( $option_meta['subkey_data']['class'] ) ? $option_meta['subkey_data']['class'] : ''; + + ?> + + + + + + + + +
            + + 0 ) { + foreach ( $option_value as $index => $option_subkey_value ) { + ?> +
            + + + $repeater_subkey_data ) { + self::get_meta_markup( + array( + 'name' => $name, + 'name_subkey' => $subkey, + 'index' => $index, + 'subkey' => $repeater_subkey, + 'subkey_data' => $repeater_subkey_data, + ), + $meta_values + ); + } + ?> +
            +
            + +
            + + + $repeater_subkey_data ) { + self::get_meta_markup( + array( + 'name' => $name, + 'name_subkey' => $subkey, + 'index' => 0, + 'subkey' => $repeater_subkey, + 'subkey_data' => $repeater_subkey_data, + ), + $meta_values + ); + } + ?> +
            +
            + + + + +
            + + $repeater_subkey_data ) { + self::get_meta_markup( + array( + 'name' => $name, + 'name_subkey' => $subkey, + 'index' => 0, + 'subkey' => $repeater_subkey, + 'subkey_data' => $repeater_subkey_data, + ), + $meta_values + ); + } + ?> +
            +
            + + + +
            + +
            +
            + +
            + +
            + > +
            + + +
            + + + + + + + > + + /> + + /> + + /> + + + + +
            + > + +
            + +
            + > +
            + + + + + +
            +
            + +
            + > + +
            + + + +
            + > +
            + +
            +
            + + > + format( '%d' ) : 0; + $duration_hour = isset( $interval ) ? $interval->format( '%h' ) : 0; + $duration_min = isset( $interval ) ? $interval->format( '%i' ) : 0; + $duration_sec = isset( $interval ) ? $interval->format( '%s' ) : 0; + $duration_hour = $duration_hour + ( $duration_day * 24 ); + + return str_pad( $duration_hour, 2, '0', STR_PAD_LEFT ) + . ':' . str_pad( $duration_min, 2, '0', STR_PAD_LEFT ) + . ':' . str_pad( $duration_sec, 2, '0', STR_PAD_LEFT ); + + } + + /** + * Get Dropdown options. + * + * @param string $name Field Name. + * @return array + */ + public static function get_dropdown_options( $name = '' ) { + + switch ( $name ) { + case 'availability': + $return = apply_filters( + 'wp_schema_pro_availability_options', + array( + 'Discontinued' => __( 'Discontinued', 'wp-schema-pro' ), + 'InStock' => __( 'In Stock', 'wp-schema-pro' ), + 'InStoreOnly' => __( 'In Store Only', 'wp-schema-pro' ), + 'LimitedAvailability' => __( 'Limited Availability', 'wp-schema-pro' ), + 'OnlineOnly' => __( 'Online Only', 'wp-schema-pro' ), + 'OutOfStock' => __( 'Out Of Stock', 'wp-schema-pro' ), + 'PreOrder' => __( 'Pre Order', 'wp-schema-pro' ), + 'PreSale' => __( 'Pre Sale', 'wp-schema-pro' ), + 'SoldOut' => __( 'Sold Out', 'wp-schema-pro' ), + 'BackOrder' => __( 'Back Order', 'wp-schema-pro' ), + + ) + ); + break; + + case 'book-format': + $return = apply_filters( + 'wp_schema_pro_book_format_options', + array( + 'EBook' => __( 'EBook', 'wp-schema-pro' ), + 'Hardcover' => __( 'Hardcover', 'wp-schema-pro' ), + 'Paperback' => __( 'Paperback', 'wp-schema-pro' ), + 'AudioBook' => __( 'AudioBook', 'wp-schema-pro' ), + ) + ); + break; + case 'course-instance': + $return = apply_filters( + 'wp_schema_pro_course_instance_options', + array( + 'Yes' => __( 'Yes', 'wp-schema-pro' ), + 'No' => __( 'No', 'wp-schema-pro' ), + ) + ); + break; + case 'offer-category': + $return = apply_filters( + 'wp_schema_pro_offer_category_options', + array( + 'Free' => __( 'Free', 'wp-schema-pro' ), + 'PartiallyFree' => __( 'Partially Free', 'wp-schema-pro' ), + 'Subscription' => __( 'Subscription', 'wp-schema-pro' ), + 'Paid' => __( 'Paid', 'wp-schema-pro' ), + ) + ); + break; + case 'hasmerchantreturnpolicy': + $return = apply_filters( + 'wp_schema_pro_has_merchant_return_policy_options', + array( + 'Yes' => __( 'Yes', 'wp-schema-pro' ), + 'No' => __( 'No', 'wp-schema-pro' ), + ) + ); + break; + case 'returnPolicyCategory': + $return = apply_filters( + 'wp_schema_pro_return_policy_category_options', + array( + 'https://schema.org/MerchantReturnFiniteReturnWindow' => __( 'Finite Return Window', 'wp-schema-pro' ), + 'https://schema.org/MerchantReturnNotPermitted' => __( 'Not Permitted', 'wp-schema-pro' ), + 'https://schema.org/MerchantReturnUnlimitedWindow' => __( 'Unlimited Window', 'wp-schema-pro' ), + ) + ); + break; + case 'returnFees': + $return = apply_filters( + 'wp_schema_pro_return_fees_options', + array( + 'https://schema.org/FreeReturn' => __( 'Free Return', 'wp-schema-pro' ), + 'https://schema.org/ReturnFeesCustomerResponsibility' => __( 'Customer Responsibility', 'wp-schema-pro' ), + 'https://schema.org/ReturnShippingFees' => __( 'Return Shipping Fees', 'wp-schema-pro' ), + ) + ); + break; + case 'returnMethod': + $return = apply_filters( + 'wp_schema_pro_return_method_options', + array( + 'https://schema.org/ReturnAtKiosk' => __( 'Return at Kiosk', 'wp-schema-pro' ), + 'https://schema.org/ReturnByMail' => __( 'Return by Mail', 'wp-schema-pro' ), + 'https://schema.org/ReturnInStore' => __( 'Return in Store', 'wp-schema-pro' ), + ) + ); + break; + case 'event-status': + $return = apply_filters( + 'wp_schema_pro_event_status_options', + array( + 'EventScheduled' => __( 'Scheduled', 'wp-schema-pro' ), + 'EventRescheduled' => __( 'Rescheduled', 'wp-schema-pro' ), + 'EventPostponed' => __( 'Postponed', 'wp-schema-pro' ), + 'EventMovedOnline' => __( 'Moved Online', 'wp-schema-pro' ), + 'EventCancelled' => __( 'Cancelled', 'wp-schema-pro' ), + ) + ); + break; + case 'course-attendance-mode': + $return = apply_filters( + 'wp_schema_pro_course_attendance_mode_options', + array( + 'Online' => __( 'Online', 'wp-schema-pro' ), + 'Onsite' => __( 'Physical Location', 'wp-schema-pro' ), + 'Blended' => __( 'Mix Of Online & Physical Locations', 'wp-schema-pro' ), + + ) + ); + break; + case 'event-attendance-mode': + $return = apply_filters( + 'wp_schema_pro_event_attendance_mode_options', + array( + 'OfflineEventAttendanceMode' => __( 'Physical Location', 'wp-schema-pro' ), + 'OnlineEventAttendanceMode' => __( 'Online Event', 'wp-schema-pro' ), + 'MixedEventAttendanceMode' => __( 'Mix Of Online & Physical Locations', 'wp-schema-pro' ), + + ) + ); + break; + case 'timezone': + $return = apply_filters( + 'wp_schema_pro_event_timezone_options', + self::timezone_options() + ); + break; + case 'action-platform': + $return = apply_filters( + 'wp_schema_pro_action_platform_options', + array( + 'DesktopWebPlatform' => __( 'DesktopWebPlatform', 'wp-schema-pro' ), + 'MobileWebPlatform' => __( 'MobileWebPlatform', 'wp-schema-pro' ), + 'AndroidPlatform' => __( 'AndroidPlatform', 'wp-schema-pro' ), + 'IOSPlatform' => __( 'IOSPlatform', 'wp-schema-pro' ), + ) + ); + break; + case 'days': + $return = apply_filters( + 'wp_schema_pro_days_options', + array( + 'Monday' => __( 'Monday', 'wp-schema-pro' ), + 'Tuesday' => __( 'Tuesday', 'wp-schema-pro' ), + 'Wednesday' => __( 'Wednesday', 'wp-schema-pro' ), + 'Thursday' => __( 'Thursday', 'wp-schema-pro' ), + 'Friday' => __( 'Friday', 'wp-schema-pro' ), + 'Saturday' => __( 'Saturday', 'wp-schema-pro' ), + 'Sunday' => __( 'Sunday', 'wp-schema-pro' ), + ) + ); + break; + case 'country': + $return = apply_filters( + 'wp_schema_pro_country_options', + array( + 'AF' => __( 'Afghanistan', 'wp-schema-pro' ), + 'AX' => __( 'Ã…land Islands', 'wp-schema-pro' ), + 'AL' => __( 'Albania', 'wp-schema-pro' ), + 'DZ' => __( 'Algeria', 'wp-schema-pro' ), + 'AS' => __( 'American Samoa', 'wp-schema-pro' ), + 'AD' => __( 'Andorra', 'wp-schema-pro' ), + 'AO' => __( 'Angola', 'wp-schema-pro' ), + 'AI' => __( 'Anguilla', 'wp-schema-pro' ), + 'AQ' => __( 'Antarctica', 'wp-schema-pro' ), + 'AG' => __( 'Antigua and Barbuda', 'wp-schema-pro' ), + 'AR' => __( 'Argentina', 'wp-schema-pro' ), + 'AM' => __( 'Armenia', 'wp-schema-pro' ), + 'AW' => __( 'Aruba', 'wp-schema-pro' ), + 'AU' => __( 'Australia', 'wp-schema-pro' ), + 'AT' => __( 'Austria', 'wp-schema-pro' ), + 'AZ' => __( 'Azerbaijan', 'wp-schema-pro' ), + 'BH' => __( 'Bahrain', 'wp-schema-pro' ), + 'BS' => __( 'Bahamas', 'wp-schema-pro' ), + 'BD' => __( 'Bangladesh', 'wp-schema-pro' ), + 'BB' => __( 'Barbados', 'wp-schema-pro' ), + 'BY' => __( 'Belarus', 'wp-schema-pro' ), + 'BE' => __( 'Belgium', 'wp-schema-pro' ), + 'BZ' => __( 'Belize', 'wp-schema-pro' ), + 'BJ' => __( 'Benin', 'wp-schema-pro' ), + 'BM' => __( 'Bermuda', 'wp-schema-pro' ), + 'BT' => __( 'Bhutan', 'wp-schema-pro' ), + 'BQ' => __( 'Bonaire, Sint Eustatius and Saba', 'wp-schema-pro' ), + 'BA' => __( 'Bosnia and Herzegovina', 'wp-schema-pro' ), + 'BW' => __( 'Botswana', 'wp-schema-pro' ), + 'BV' => __( 'Bouvet Island', 'wp-schema-pro' ), + 'BR' => __( 'Brazil', 'wp-schema-pro' ), + 'IO' => __( 'British Indian Ocean Territory', 'wp-schema-pro' ), + 'BN' => __( 'Brunei Darussalam', 'wp-schema-pro' ), + 'BG' => __( 'Bulgaria', 'wp-schema-pro' ), + 'BF' => __( 'Burkina Faso', 'wp-schema-pro' ), + 'BI' => __( 'Burundi', 'wp-schema-pro' ), + 'KH' => __( 'Cambodia', 'wp-schema-pro' ), + 'CM' => __( 'Cameroon', 'wp-schema-pro' ), + 'CA' => __( 'Canada', 'wp-schema-pro' ), + 'CV' => __( 'Cape Verde', 'wp-schema-pro' ), + 'KY' => __( 'Cayman Islands', 'wp-schema-pro' ), + 'CF' => __( 'Central African Republic', 'wp-schema-pro' ), + 'TD' => __( 'Chad', 'wp-schema-pro' ), + 'CL' => __( 'Chile', 'wp-schema-pro' ), + 'CN' => __( 'China', 'wp-schema-pro' ), + 'CX' => __( 'Christmas Island', 'wp-schema-pro' ), + 'CC' => __( 'Cocos (Keeling) Islands', 'wp-schema-pro' ), + 'CO' => __( 'Colombia', 'wp-schema-pro' ), + 'KM' => __( 'Comoros', 'wp-schema-pro' ), + 'CG' => __( 'Congo', 'wp-schema-pro' ), + 'CD' => __( 'Congo, the Democratic Republic of the', 'wp-schema-pro' ), + 'CK' => __( 'Cook Islands', 'wp-schema-pro' ), + 'CR' => __( 'Costa Rica', 'wp-schema-pro' ), + 'CI' => __( 'Ivory Coast', 'wp-schema-pro' ), + 'HR' => __( 'Croatia', 'wp-schema-pro' ), + 'CU' => __( 'Cuba', 'wp-schema-pro' ), + 'CW' => __( 'Curaçao', 'wp-schema-pro' ), + 'CY' => __( 'Cyprus', 'wp-schema-pro' ), + 'CZ' => __( 'Czech Republic', 'wp-schema-pro' ), + 'DK' => __( 'Denmark', 'wp-schema-pro' ), + 'DJ' => __( 'Djibouti', 'wp-schema-pro' ), + 'DM' => __( 'Dominica', 'wp-schema-pro' ), + 'DO' => __( 'Dominican Republic', 'wp-schema-pro' ), + 'EC' => __( 'Ecuador', 'wp-schema-pro' ), + 'EG' => __( 'Egypt', 'wp-schema-pro' ), + 'SV' => __( 'El Salvador', 'wp-schema-pro' ), + 'GQ' => __( 'Equatorial Guinea', 'wp-schema-pro' ), + 'ER' => __( 'Eritrea', 'wp-schema-pro' ), + 'EE' => __( 'Estonia', 'wp-schema-pro' ), + 'ET' => __( 'Ethiopia', 'wp-schema-pro' ), + 'FK' => __( 'Falkland Islands (Malvinas)', 'wp-schema-pro' ), + 'FO' => __( 'Faroe Islands', 'wp-schema-pro' ), + 'FM' => __( 'Federated States of Micronesia', 'wp-schema-pro' ), + 'FJ' => __( 'Fiji', 'wp-schema-pro' ), + 'FI' => __( 'Finland', 'wp-schema-pro' ), + 'FR' => __( 'France', 'wp-schema-pro' ), + 'GF' => __( 'French Guiana', 'wp-schema-pro' ), + 'PF' => __( 'French Polynesia', 'wp-schema-pro' ), + 'TF' => __( 'French Southern Territories', 'wp-schema-pro' ), + 'GA' => __( 'Gabon', 'wp-schema-pro' ), + 'GM' => __( 'Gambia', 'wp-schema-pro' ), + 'GE' => __( 'Georgia', 'wp-schema-pro' ), + 'DE' => __( 'Germany', 'wp-schema-pro' ), + 'GH' => __( 'Ghana', 'wp-schema-pro' ), + 'GI' => __( 'Gibraltar', 'wp-schema-pro' ), + 'GR' => __( 'Greece', 'wp-schema-pro' ), + 'GL' => __( 'Greenland', 'wp-schema-pro' ), + 'GD' => __( 'Grenada', 'wp-schema-pro' ), + 'GP' => __( 'Guadeloupe', 'wp-schema-pro' ), + 'GU' => __( 'Guam', 'wp-schema-pro' ), + 'GT' => __( 'Guatemala', 'wp-schema-pro' ), + 'GG' => __( 'Guernsey', 'wp-schema-pro' ), + 'GN' => __( 'Guinea', 'wp-schema-pro' ), + 'GW' => __( 'Guinea-Bissau', 'wp-schema-pro' ), + 'GY' => __( 'Guyana', 'wp-schema-pro' ), + 'HT' => __( 'Haiti', 'wp-schema-pro' ), + 'HM' => __( 'Heard Island and McDonald Islands', 'wp-schema-pro' ), + 'VA' => __( 'Holy See (Vatican City State)', 'wp-schema-pro' ), + 'HN' => __( 'Honduras', 'wp-schema-pro' ), + 'HK' => __( 'Hong Kong', 'wp-schema-pro' ), + 'HU' => __( 'Hungary', 'wp-schema-pro' ), + 'IS' => __( 'Iceland', 'wp-schema-pro' ), + 'IN' => __( 'India', 'wp-schema-pro' ), + 'ID' => __( 'Indonesia', 'wp-schema-pro' ), + 'IR' => __( 'Iran, Islamic Republic of', 'wp-schema-pro' ), + 'IQ' => __( 'Iraq', 'wp-schema-pro' ), + 'IE' => __( 'Ireland', 'wp-schema-pro' ), + 'IM' => __( 'Isle of Man', 'wp-schema-pro' ), + 'IL' => __( 'Israel', 'wp-schema-pro' ), + 'IT' => __( 'Italy', 'wp-schema-pro' ), + 'JM' => __( 'Jamaica', 'wp-schema-pro' ), + 'JP' => __( 'Japan', 'wp-schema-pro' ), + 'JE' => __( 'Jersey', 'wp-schema-pro' ), + 'JO' => __( 'Jordan', 'wp-schema-pro' ), + 'KZ' => __( 'Kazakhstan', 'wp-schema-pro' ), + 'KE' => __( 'Kenya', 'wp-schema-pro' ), + 'KI' => __( 'Kiribati', 'wp-schema-pro' ), + 'KP' => __( 'Korea, Democratic People\'s Republic of', 'wp-schema-pro' ), + 'KR' => __( 'Korea, Republic of', 'wp-schema-pro' ), + 'KW' => __( 'Kuwait', 'wp-schema-pro' ), + 'KG' => __( 'Kyrgyzstan', 'wp-schema-pro' ), + 'LA' => __( 'Laos', 'wp-schema-pro' ), + 'LV' => __( 'Latvia', 'wp-schema-pro' ), + 'LB' => __( 'Lebanon', 'wp-schema-pro' ), + 'LS' => __( 'Lesotho', 'wp-schema-pro' ), + 'LR' => __( 'Liberia', 'wp-schema-pro' ), + 'LY' => __( 'Libya', 'wp-schema-pro' ), + 'LI' => __( 'Liechtenstein', 'wp-schema-pro' ), + 'LT' => __( 'Lithuania', 'wp-schema-pro' ), + 'LU' => __( 'Luxembourg', 'wp-schema-pro' ), + 'MO' => __( 'Macao', 'wp-schema-pro' ), + 'MG' => __( 'Madagascar', 'wp-schema-pro' ), + 'MW' => __( 'Malawi', 'wp-schema-pro' ), + 'MY' => __( 'Malaysia', 'wp-schema-pro' ), + 'MV' => __( 'Maldives', 'wp-schema-pro' ), + 'ML' => __( 'Mali', 'wp-schema-pro' ), + 'MT' => __( 'Malta', 'wp-schema-pro' ), + 'MH' => __( 'Marshall Islands', 'wp-schema-pro' ), + 'MQ' => __( 'Martinique', 'wp-schema-pro' ), + 'MR' => __( 'Mauritania', 'wp-schema-pro' ), + 'MU' => __( 'Mauritius', 'wp-schema-pro' ), + 'YT' => __( 'Mayotte', 'wp-schema-pro' ), + 'MX' => __( 'Mexico', 'wp-schema-pro' ), + 'MC' => __( 'Monaco', 'wp-schema-pro' ), + 'MN' => __( 'Mongolia', 'wp-schema-pro' ), + 'ME' => __( 'Montenegro', 'wp-schema-pro' ), + 'MS' => __( 'Montserrat', 'wp-schema-pro' ), + 'MA' => __( 'Morocco', 'wp-schema-pro' ), + 'MZ' => __( 'Mozambique', 'wp-schema-pro' ), + 'MM' => __( 'Myanmar', 'wp-schema-pro' ), + 'NA' => __( 'Namibia', 'wp-schema-pro' ), + 'NR' => __( 'Nauru', 'wp-schema-pro' ), + 'NP' => __( 'Nepal', 'wp-schema-pro' ), + 'NL' => __( 'Netherlands', 'wp-schema-pro' ), + 'NC' => __( 'New Caledonia', 'wp-schema-pro' ), + 'NZ' => __( 'New Zealand', 'wp-schema-pro' ), + 'NI' => __( 'Nicaragua', 'wp-schema-pro' ), + 'NE' => __( 'Niger', 'wp-schema-pro' ), + 'NG' => __( 'Nigeria', 'wp-schema-pro' ), + 'NU' => __( 'Niue', 'wp-schema-pro' ), + 'NF' => __( 'Norfolk Island', 'wp-schema-pro' ), + 'MP' => __( 'Northern Mariana Islands', 'wp-schema-pro' ), + 'NO' => __( 'Norway', 'wp-schema-pro' ), + 'OM' => __( 'Oman', 'wp-schema-pro' ), + 'PK' => __( 'Pakistan', 'wp-schema-pro' ), + 'PW' => __( 'Palau', 'wp-schema-pro' ), + 'PS' => __( 'Palestine, State of', 'wp-schema-pro' ), + 'PA' => __( 'Panama', 'wp-schema-pro' ), + 'PG' => __( 'Papua New Guinea', 'wp-schema-pro' ), + 'PY' => __( 'Paraguay', 'wp-schema-pro' ), + 'PE' => __( 'Peru', 'wp-schema-pro' ), + 'PH' => __( 'Philippines', 'wp-schema-pro' ), + 'PN' => __( 'Pitcairn', 'wp-schema-pro' ), + 'BO' => __( 'Plurinational State of Bolivia', 'wp-schema-pro' ), + 'PL' => __( 'Poland', 'wp-schema-pro' ), + 'PT' => __( 'Portugal', 'wp-schema-pro' ), + 'PR' => __( 'Puerto Rico', 'wp-schema-pro' ), + 'QA' => __( 'Qatar', 'wp-schema-pro' ), + 'RE' => __( 'Réunion', 'wp-schema-pro' ), + 'MK' => __( 'Republic of Macedonia', 'wp-schema-pro' ), + 'MD' => __( 'Republic of Moldova', 'wp-schema-pro' ), + 'RO' => __( 'Romania', 'wp-schema-pro' ), + 'RU' => __( 'Russian Federation', 'wp-schema-pro' ), + 'RW' => __( 'Rwanda', 'wp-schema-pro' ), + 'BL' => __( 'Saint Barthélemy', 'wp-schema-pro' ), + 'SH' => __( 'Saint Helena, Ascension and Tristan da Cunha', 'wp-schema-pro' ), + 'KN' => __( 'Saint Kitts and Nevis', 'wp-schema-pro' ), + 'LC' => __( 'Saint Lucia', 'wp-schema-pro' ), + 'MF' => __( 'Saint Martin (French part', 'wp-schema-pro' ), + 'PM' => __( 'Saint Pierre and Miquelon', 'wp-schema-pro' ), + 'VC' => __( 'Saint Vincent and the Grenadines', 'wp-schema-pro' ), + 'WS' => __( 'Samoa', 'wp-schema-pro' ), + 'SM' => __( 'San Marino', 'wp-schema-pro' ), + 'ST' => __( 'Sao Tome and Principe', 'wp-schema-pro' ), + 'SA' => __( 'Saudi Arabia', 'wp-schema-pro' ), + 'SN' => __( 'Senegal', 'wp-schema-pro' ), + 'RS' => __( 'Serbia', 'wp-schema-pro' ), + 'SC' => __( 'Seychelles', 'wp-schema-pro' ), + 'SL' => __( 'Sierra Leone', 'wp-schema-pro' ), + 'SG' => __( 'Singapore', 'wp-schema-pro' ), + 'SX' => __( 'Sint Maarten (Dutch part)', 'wp-schema-pro' ), + 'SK' => __( 'Slovakia', 'wp-schema-pro' ), + 'SI' => __( 'Slovenia', 'wp-schema-pro' ), + 'SB' => __( 'Solomon Islands', 'wp-schema-pro' ), + 'SO' => __( 'Somalia', 'wp-schema-pro' ), + 'ZA' => __( 'South Africa', 'wp-schema-pro' ), + 'GS' => __( 'South Georgia and the South Sandwich Islands', 'wp-schema-pro' ), + 'SS' => __( 'South Sudan', 'wp-schema-pro' ), + 'ES' => __( 'Spain', 'wp-schema-pro' ), + 'LK' => __( 'Sri Lanka', 'wp-schema-pro' ), + 'SD' => __( 'Sudan', 'wp-schema-pro' ), + 'SR' => __( 'Suriname', 'wp-schema-pro' ), + 'SJ' => __( 'Svalbard and Jan Mayen', 'wp-schema-pro' ), + 'SZ' => __( 'Swaziland', 'wp-schema-pro' ), + 'SE' => __( 'Sweden', 'wp-schema-pro' ), + 'CH' => __( 'Switzerland', 'wp-schema-pro' ), + 'SY' => __( 'Syrian Arab Republic', 'wp-schema-pro' ), + 'TW' => __( 'Taiwan, Province of China', 'wp-schema-pro' ), + 'TJ' => __( 'Tajikistan', 'wp-schema-pro' ), + 'TZ' => __( 'Tanzania, United Republic of', 'wp-schema-pro' ), + 'TH' => __( 'Thailand', 'wp-schema-pro' ), + 'TL' => __( 'Timor-Leste', 'wp-schema-pro' ), + 'TG' => __( 'Togo', 'wp-schema-pro' ), + 'TK' => __( 'Tokelau', 'wp-schema-pro' ), + 'TO' => __( 'Tonga', 'wp-schema-pro' ), + 'TT' => __( 'Trinidad and Tobago', 'wp-schema-pro' ), + 'TN' => __( 'Tunisia', 'wp-schema-pro' ), + 'TR' => __( 'Turkey', 'wp-schema-pro' ), + 'TM' => __( 'Turkmenistan', 'wp-schema-pro' ), + 'TC' => __( 'Turks and Caicos Islands', 'wp-schema-pro' ), + 'TV' => __( 'Tuvalu', 'wp-schema-pro' ), + 'UG' => __( 'Uganda', 'wp-schema-pro' ), + 'UA' => __( 'Ukraine', 'wp-schema-pro' ), + 'AE' => __( 'United Arab Emirates', 'wp-schema-pro' ), + 'GB' => __( 'United Kingdom', 'wp-schema-pro' ), + 'US' => __( 'United States', 'wp-schema-pro' ), + 'UM' => __( 'United States Minor Outlying Islands', 'wp-schema-pro' ), + 'UY' => __( 'Uruguay', 'wp-schema-pro' ), + 'UZ' => __( 'Uzbekistan', 'wp-schema-pro' ), + 'VU' => __( 'Vanuatu', 'wp-schema-pro' ), + 'VE' => __( 'Venezuela, Bolivarian Republic of', 'wp-schema-pro' ), + 'VN' => __( 'Viet Nam', 'wp-schema-pro' ), + 'VG' => __( 'Virgin Islands, British', 'wp-schema-pro' ), + 'VI' => __( 'Virgin Islands, U.S', 'wp-schema-pro' ), + 'WF' => __( 'Wallis and Futuna', 'wp-schema-pro' ), + 'EH' => __( 'Western Sahara', 'wp-schema-pro' ), + 'YE' => __( 'Yemen', 'wp-schema-pro' ), + 'ZM' => __( 'Zambia', 'wp-schema-pro' ), + 'ZW' => __( 'Zimbabwe', 'wp-schema-pro' ), + ) + ); + break; + case 'employment': + $return = apply_filters( + 'wp_schema_pro_employment_options', + array( + 'FULL_TIME' => __( 'FULL TIME', 'wp-schema-pro' ), + 'PART_TIME' => __( 'PART TIME', 'wp-schema-pro' ), + 'CONTRACTOR' => __( 'CONTRACTOR', 'wp-schema-pro' ), + 'TEMPORARY' => __( 'TEMPORARY', 'wp-schema-pro' ), + 'INTERN' => __( 'INTERN', 'wp-schema-pro' ), + 'VOLUNTEER' => __( 'VOLUNTEER', 'wp-schema-pro' ), + 'PER_DIEM' => __( 'PER DIEM', 'wp-schema-pro' ), + 'OTHER' => __( 'OTHER', 'wp-schema-pro' ), + ) + ); + break; + case 'currency': + $return = apply_filters( + 'wp_schema_pro_currency_options', + array( + 'AFA' => __( 'Afghan Afghani', 'wp-schema-pro' ), + 'ALL' => __( 'Albanian Lek', 'wp-schema-pro' ), + 'DZD' => __( 'Algerian Dinar', 'wp-schema-pro' ), + 'AOA' => __( 'Angolan Kwanza', 'wp-schema-pro' ), + 'ARS' => __( 'Argentine Peso', 'wp-schema-pro' ), + 'AMD' => __( 'Armenian Dram', 'wp-schema-pro' ), + 'AWG' => __( 'Aruban Florin', 'wp-schema-pro' ), + 'AUD' => __( 'Australian Dollar', 'wp-schema-pro' ), + 'AZN' => __( 'Azerbaijani Manat', 'wp-schema-pro' ), + 'BSD' => __( 'Bahamian Dollar', 'wp-schema-pro' ), + 'BHD' => __( 'Bahraini Dinar', 'wp-schema-pro' ), + 'BDT' => __( 'Bangladeshi Taka', 'wp-schema-pro' ), + 'BBD' => __( 'Barbadian Dollar', 'wp-schema-pro' ), + 'BYR' => __( 'Belarusian Ruble', 'wp-schema-pro' ), + 'BEF' => __( 'Belgian Franc', 'wp-schema-pro' ), + 'BZD' => __( 'Belize Dollar', 'wp-schema-pro' ), + 'BMD' => __( 'Bermudan Dollar', 'wp-schema-pro' ), + 'BTN' => __( 'Bhutanese Ngultrum', 'wp-schema-pro' ), + 'BTC' => __( 'Bitcoin', 'wp-schema-pro' ), + 'BOB' => __( 'Bolivian Boliviano', 'wp-schema-pro' ), + 'BAM' => __( 'Bosnia-Herzegovina Convertible Mark', 'wp-schema-pro' ), + 'BWP' => __( 'Botswanan Pula', 'wp-schema-pro' ), + 'BRL' => __( 'Brazilian Real', 'wp-schema-pro' ), + 'GBP' => __( 'British Pound', 'wp-schema-pro' ), + 'BND' => __( 'Brunei Dollar', 'wp-schema-pro' ), + 'BGN' => __( 'Bulgarian Lev', 'wp-schema-pro' ), + 'BIF' => __( 'Burundian Franc', 'wp-schema-pro' ), + 'KHR' => __( 'Cambodian Riel', 'wp-schema-pro' ), + 'CAD' => __( 'Canadian Dollar', 'wp-schema-pro' ), + 'CVE' => __( 'Cape Verdean Escudo', 'wp-schema-pro' ), + 'KYD' => __( 'Cayman Islands Dollar', 'wp-schema-pro' ), + 'XAF' => __( 'Central African CFA Franc', 'wp-schema-pro' ), + 'XPF' => __( 'CFP Franc', 'wp-schema-pro' ), + 'CLP' => __( 'Chilean Peso', 'wp-schema-pro' ), + 'CNY' => __( 'Chinese Yuan', 'wp-schema-pro' ), + 'COP' => __( 'Colombian Peso', 'wp-schema-pro' ), + 'KMF' => __( 'Comorian Franc', 'wp-schema-pro' ), + 'CDF' => __( 'Congolese Franc', 'wp-schema-pro' ), + 'CRC' => __( 'Costa Rican Colón', 'wp-schema-pro' ), + 'HRK' => __( 'Croatian Kuna', 'wp-schema-pro' ), + 'CUC' => __( 'Cuban Convertible Peso', 'wp-schema-pro' ), + 'CZK' => __( 'Czech Koruna', 'wp-schema-pro' ), + 'DKK' => __( 'Danish Krone', 'wp-schema-pro' ), + 'DJF' => __( 'Djiboutian Franc', 'wp-schema-pro' ), + 'DOP' => __( 'Dominican Peso', 'wp-schema-pro' ), + 'XCD' => __( 'East Caribbean Dollar', 'wp-schema-pro' ), + 'EGP' => __( 'Egyptian Pound', 'wp-schema-pro' ), + 'ERN' => __( 'Eritrean Nakfa', 'wp-schema-pro' ), + 'EEK' => __( 'Estonian Kroon', 'wp-schema-pro' ), + 'ETB' => __( 'Ethiopian Birr', 'wp-schema-pro' ), + 'EUR' => __( 'Euro', 'wp-schema-pro' ), + 'FKP' => __( 'Falkland Islands Pound', 'wp-schema-pro' ), + 'FJD' => __( 'Fijian Dollar', 'wp-schema-pro' ), + 'GMD' => __( 'Gambian Dalasi', 'wp-schema-pro' ), + 'GEL' => __( 'Georgian Lari', 'wp-schema-pro' ), + 'DEM' => __( 'German Mark', 'wp-schema-pro' ), + 'GHS' => __( 'Ghanaian Cedi', 'wp-schema-pro' ), + 'GIP' => __( 'Gibraltar Pound', 'wp-schema-pro' ), + 'GRD' => __( 'Greek Drachma', 'wp-schema-pro' ), + 'GTQ' => __( 'Guatemalan Quetzal', 'wp-schema-pro' ), + 'GNF' => __( 'Guinean Franc', 'wp-schema-pro' ), + 'GYD' => __( 'Guyanaese Dollar', 'wp-schema-pro' ), + 'HTG' => __( 'Haitian Gourde', 'wp-schema-pro' ), + 'HNL' => __( 'Honduran Lempira', 'wp-schema-pro' ), + 'HKD' => __( 'Hong Kong Dollar', 'wp-schema-pro' ), + 'HUF' => __( 'Hungarian Forint', 'wp-schema-pro' ), + 'ISK' => __( 'Icelandic Króna', 'wp-schema-pro' ), + 'INR' => __( 'Indian Rupee', 'wp-schema-pro' ), + 'IDR' => __( 'Indonesian Rupiah', 'wp-schema-pro' ), + 'IRR' => __( 'Iranian Rial', 'wp-schema-pro' ), + 'IQD' => __( 'Iraqi Dinar', 'wp-schema-pro' ), + 'ILS' => __( 'Israeli New Shekel', 'wp-schema-pro' ), + 'ITL' => __( 'Italian Lira', 'wp-schema-pro' ), + 'JMD' => __( 'Jamaican Dollar', 'wp-schema-pro' ), + 'JPY' => __( 'Japanese Yen', 'wp-schema-pro' ), + 'JOD' => __( 'Jordanian Dinar', 'wp-schema-pro' ), + 'KZT' => __( 'Kazakhstani Tenge', 'wp-schema-pro' ), + 'KES' => __( 'Kenyan Shilling', 'wp-schema-pro' ), + 'KWD' => __( 'Kuwaiti Dinar', 'wp-schema-pro' ), + 'KGS' => __( 'Kyrgystani Som', 'wp-schema-pro' ), + 'LAK' => __( 'Laotian Kip', 'wp-schema-pro' ), + 'LVL' => __( 'Latvian Lats', 'wp-schema-pro' ), + 'LBP' => __( 'Lebanese Pound', 'wp-schema-pro' ), + 'LSL' => __( 'Lesotho Loti', 'wp-schema-pro' ), + 'LRD' => __( 'Liberian Dollar', 'wp-schema-pro' ), + 'LYD' => __( 'Libyan Dinar', 'wp-schema-pro' ), + 'LTL' => __( 'Lithuanian Litas', 'wp-schema-pro' ), + 'MOP' => __( 'Macanese Pataca', 'wp-schema-pro' ), + 'MKD' => __( 'Macedonian Denar', 'wp-schema-pro' ), + 'MGA' => __( 'Malagasy Ariary', 'wp-schema-pro' ), + 'MWK' => __( 'Malawian Kwacha', 'wp-schema-pro' ), + 'MYR' => __( 'Malaysian Ringgit', 'wp-schema-pro' ), + 'MVR' => __( 'Maldivian Rufiyaa', 'wp-schema-pro' ), + 'MRO' => __( 'Mauritanian Ouguiya', 'wp-schema-pro' ), + 'MUR' => __( 'Mauritian Rupee', 'wp-schema-pro' ), + 'MXN' => __( 'Mexican Peso', 'wp-schema-pro' ), + 'MDL' => __( 'Moldovan Leu', 'wp-schema-pro' ), + 'MNT' => __( 'Mongolian Tugrik', 'wp-schema-pro' ), + 'MAD' => __( 'Moroccan Dirham', 'wp-schema-pro' ), + 'MZM' => __( 'Mozambican Metical', 'wp-schema-pro' ), + 'MMK' => __( 'Myanmar Kyat', 'wp-schema-pro' ), + 'NAD' => __( 'Namibian Dollar', 'wp-schema-pro' ), + 'NPR' => __( 'Nepalese Rupee', 'wp-schema-pro' ), + 'ANG' => __( 'Netherlands Antillean Guilder', 'wp-schema-pro' ), + 'TWD' => __( 'New Taiwan Dollar', 'wp-schema-pro' ), + 'NZD' => __( 'New Zealand Dollar', 'wp-schema-pro' ), + 'NIO' => __( 'Nicaraguan Córdoba', 'wp-schema-pro' ), + 'NGN' => __( 'Nigerian Naira', 'wp-schema-pro' ), + 'KPW' => __( 'North Korean Won', 'wp-schema-pro' ), + 'NOK' => __( 'Norwegian Krone', 'wp-schema-pro' ), + 'OMR' => __( 'Omani Rial', 'wp-schema-pro' ), + 'PKR' => __( 'Pakistani Rupee', 'wp-schema-pro' ), + 'PAB' => __( 'Panamanian Balboa', 'wp-schema-pro' ), + 'PGK' => __( 'Papua New Guinean Kina', 'wp-schema-pro' ), + 'PYG' => __( 'Paraguayan Guarani', 'wp-schema-pro' ), + 'PEN' => __( 'Peruvian Sol', 'wp-schema-pro' ), + 'PHP' => __( 'Philippine Peso', 'wp-schema-pro' ), + 'PLN' => __( 'Polish Zloty', 'wp-schema-pro' ), + 'QAR' => __( 'Qatari Rial', 'wp-schema-pro' ), + 'RON' => __( 'Romanian Leu', 'wp-schema-pro' ), + 'RUB' => __( 'Russian Ruble', 'wp-schema-pro' ), + 'RWF' => __( 'Rwandan Franc', 'wp-schema-pro' ), + 'SVC' => __( 'Salvadoran Colón', 'wp-schema-pro' ), + 'WST' => __( 'Samoan Tala', 'wp-schema-pro' ), + 'SAR' => __( 'Saudi Riyal', 'wp-schema-pro' ), + 'RSD' => __( 'Serbian Dinar', 'wp-schema-pro' ), + 'SCR' => __( 'Seychellois Rupee', 'wp-schema-pro' ), + 'SLL' => __( 'Sierra Leonean Leone', 'wp-schema-pro' ), + 'SGD' => __( 'Singapore Dollar', 'wp-schema-pro' ), + 'SKK' => __( 'Slovak Koruna', 'wp-schema-pro' ), + 'SBD' => __( 'Solomon Islands Dollar', 'wp-schema-pro' ), + 'SOS' => __( 'Somali Shilling', 'wp-schema-pro' ), + 'ZAR' => __( 'South African Rand', 'wp-schema-pro' ), + 'KRW' => __( 'South Korean Won', 'wp-schema-pro' ), + 'XDR' => __( 'Special Drawing Rights', 'wp-schema-pro' ), + 'LKR' => __( 'Sri Lankan Rupee', 'wp-schema-pro' ), + 'SHP' => __( 'St. Helena Pound', 'wp-schema-pro' ), + 'SDG' => __( 'Sudanese Pound', 'wp-schema-pro' ), + 'SRD' => __( 'Surinamese Dollar', 'wp-schema-pro' ), + 'SZL' => __( 'Swazi Lilangeni', 'wp-schema-pro' ), + 'SEK' => __( 'Swedish Krona', 'wp-schema-pro' ), + 'CHF' => __( 'Swiss Franc', 'wp-schema-pro' ), + 'SYP' => __( 'Syrian Pound', 'wp-schema-pro' ), + 'STD' => __( 'São Tomé & Príncipe Dobra', 'wp-schema-pro' ), + 'TJS' => __( 'Tajikistani Somoni', 'wp-schema-pro' ), + 'TZS' => __( 'Tanzanian Shilling', 'wp-schema-pro' ), + 'THB' => __( 'Thai Baht', 'wp-schema-pro' ), + 'TOP' => __( 'Tongan Pa\'anga', 'wp-schema-pro' ), + 'TTD' => __( 'Trinidad & Tobago Dollar', 'wp-schema-pro' ), + 'TND' => __( 'Tunisian Dinar', 'wp-schema-pro' ), + 'TRY' => __( 'Turkish Lira', 'wp-schema-pro' ), + 'TMT' => __( 'Turkmenistani Manat', 'wp-schema-pro' ), + 'UGX' => __( 'Ugandan Shilling', 'wp-schema-pro' ), + 'UAH' => __( 'Ukrainian Hryvnia', 'wp-schema-pro' ), + 'AED' => __( 'United Arab Emirates Dirham', 'wp-schema-pro' ), + 'UYU' => __( 'Uruguayan Peso', 'wp-schema-pro' ), + 'USD' => __( 'US Dollar', 'wp-schema-pro' ), + 'UZS' => __( 'Uzbekistani Som', 'wp-schema-pro' ), + 'VUV' => __( 'Vanuatu Vatu', 'wp-schema-pro' ), + 'VEF' => __( 'Venezuelan Bolívar', 'wp-schema-pro' ), + 'VND' => __( 'Vietnamese Dong', 'wp-schema-pro' ), + 'XOF' => __( 'West African CFA Franc', 'wp-schema-pro' ), + 'YER' => __( 'Yemeni Rial', 'wp-schema-pro' ), + 'ZMK' => __( 'Zambian Kwacha', 'wp-schema-pro' ), + ) + ); + break; + case 'software-category': + $return = apply_filters( + 'wp_schema_pro_software_category_options', + array( + 'BusinessApplication ' => __( 'Business App', 'wp-schema-pro' ), + 'GameApplication' => __( 'Game App', 'wp-schema-pro' ), + 'MultimediaApplication' => __( 'Multimedia App', 'wp-schema-pro' ), + 'MobileApplication' => __( 'Mobile App', 'wp-schema-pro' ), + 'WebApplication' => __( 'Web App', 'wp-schema-pro' ), + 'SocialNetworkingApplication' => __( 'Social Networking App', 'wp-schema-pro' ), + 'TravelApplication' => __( 'Travel App', 'wp-schema-pro' ), + 'ShoppingApplication' => __( 'Shopping App', 'wp-schema-pro' ), + 'SportsApplication' => __( 'Sports App', 'wp-schema-pro' ), + 'LifestyleApplication' => __( 'Lifestyle App', 'wp-schema-pro' ), + 'DesignApplication ' => __( 'Design App', 'wp-schema-pro' ), + 'DeveloperApplication' => __( 'Developer App', 'wp-schema-pro' ), + 'DriverApplication' => __( 'Driver App', 'wp-schema-pro' ), + 'EducationalApplication' => __( 'Educational App', 'wp-schema-pro' ), + 'HealthApplication' => __( 'Health App', 'wp-schema-pro' ), + 'FinanceApplication ' => __( 'Finance App', 'wp-schema-pro' ), + 'SecurityApplication' => __( 'Security App', 'wp-schema-pro' ), + 'BrowserApplication' => __( 'Browser App', 'wp-schema-pro' ), + 'CommunicationApplication' => __( 'Communication App', 'wp-schema-pro' ), + 'DesktopEnhancementApplication' => __( 'Desktop Enhancement App', 'wp-schema-pro' ), + 'EntertainmentApplication ' => __( 'Business App', 'wp-schema-pro' ), + 'HomeApplication' => __( 'Home App', 'wp-schema-pro' ), + 'UtilitiesApplication' => __( 'Utilities App', 'wp-schema-pro' ), + 'ReferenceApplication' => __( 'Reference App', 'wp-schema-pro' ), + ) + ); + break; + case 'time-unit': + $return = apply_filters( + 'wp_schema_pro_time_unit_options', + array( + 'HOUR' => 'HOUR', + 'WEEK' => 'WEEK', + 'MONTH' => 'MONTH', + 'YEAR' => 'YEAR', + 'DAY' => 'DAY', + ) + ); + break; + case 'gender-select': + $return = apply_filters( + 'wp_schema_pro_gender_options', + array( + 'Male' => 'Male', + 'Female' => 'Female', + 'Other' => 'Other', + ) + ); + break; + case 'Organization-type': + $return = apply_filters( + 'wp_schema_pro_organization_type_options', + array( + 'organization' => 'General/ Other', + 'Corporation' => 'Corporation', + 'Airline' => 'Airline', + 'Consortium' => 'Consortium', + 'EducationalOrganization' => ' Educational Organization', + 'CollegeOrUniversity' => '— College Or University', + 'ElementarySchool' => '— Elementary School', + 'HighSchool' => '— High School', + 'MiddleSchool' => '— Middle School', + 'Preschool' => '— Pre School', + 'School' => '— School', + 'GovernmentOrganization' => 'Government Organization', + 'MedicalOrganization' => 'Medical Organization', + 'DiagnosticLab' => '— Diagnostic Lab', + 'VeterinaryCare' => '— Veterinary Care', + 'NGO' => 'NGO', + 'PerformingGroup' => 'Performing Group', + 'DanceGroup' => '— Dance Group', + 'MusicGroup' => '— Music Group', + 'TheaterGroup' => '—Theater Group', + 'NewsMediaOrganization' => 'News Media Organization', + 'Project' => 'Project', + 'ResearchProject' => '— Research Project', + 'FundingAgency' => '— Funding Agency', + 'SportsOrganization' => 'Sports Organization', + 'SportsTeam' => '— Sports Team', + 'LibrarySystem' => 'Library System', + 'WorkersUnion' => 'Workers Union', + + ) + ); + break; + default: + $return = apply_filters( 'wp_schema_pro_dropdown_options', array() ); + break; + } + return array( '' => __( '-- None --', 'wp-schema-pro' ) ) + $return; + } + + /** + * Function to filter only Blank value. + * + * @since 1.1.3 + * @param mixed $var Variable. + * @return boolean + */ + public static function is_not_empty( $var ) { + + return ! empty( $var ) || '0' === $var; + } + + /** + * Metabox Save + * + * @param number $post_id Post ID. + * @return void + */ + public function save_meta_box( $post_id ) { + + // Checks save status. + $is_autosave = wp_is_post_autosave( $post_id ); + $is_revision = wp_is_post_revision( $post_id ); + + $is_valid_nonce = ( isset( $_POST['aiosrs-schema'] ) && wp_verify_nonce( sanitize_text_field( $_POST['aiosrs-schema'] ), basename( __FILE__ ) ) ) ? true : false; + + // Exits script depending on save status. + if ( $is_autosave || $is_revision || ! $is_valid_nonce ) { + return; + } + + /** + * Get meta options + */ + $post_meta = self::get_meta_option(); + foreach ( $post_meta as $key => $data ) { + if ( in_array( $key, self::$schema_meta_keys, true ) ) { + + if ( ! isset( $_POST[ $key ] ) ) { + continue; + } + + $_POST[ $key ] = array_filter( $_POST[ $key ], __CLASS__ . '::is_not_empty' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + + $meta_value = array(); + foreach ( $_POST[ $key ] as $meta_key => $value ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + $subkey_type = isset( self::$schema_meta_fields[ $key ]['subkeys'][ $meta_key ]['type'] ) ? self::$schema_meta_fields[ $key ]['subkeys'][ $meta_key ]['type'] : 'text'; + if ( ( 'repeater' === $subkey_type || 'repeater-target' === $subkey_type ) && is_array( $value ) ) { + $i = 0; + foreach ( $value as $repeater_value ) { + $meta_value[ $meta_key ][ $i ] = array_map( 'esc_attr', $repeater_value ); + $i++; + } + } else { + if ( 'custom-markup-custom-text' === $meta_key ) { + $meta_value[ $meta_key ] = $value; + } else { + $meta_value[ $meta_key ] = esc_attr( $value ); + } + } + } + } elseif ( in_array( $key, array( 'bsf-aiosrs-schema-location', 'bsf-aiosrs-schema-exclusion' ), true ) ) { + $meta_value = BSF_Target_Rule_Fields::get_format_rule_value( $_POST, $key ); + } else { + // Sanitize values. + $sanitize_filter = ( isset( $data['sanitize'] ) ) ? $data['sanitize'] : 'FILTER_DEFAULT'; + + switch ( $sanitize_filter ) { + + case 'FILTER_SANITIZE_STRING': + $meta_value = sanitize_text_field( $_POST[ $key ] ); + break; + + case 'FILTER_SANITIZE_URL': + $meta_value = filter_input( INPUT_POST, $key, FILTER_SANITIZE_URL ); + break; + + case 'FILTER_SANITIZE_NUMBER_INT': + $meta_value = filter_input( INPUT_POST, $key, FILTER_SANITIZE_NUMBER_INT ); + break; + + default: + $meta_value = filter_input( INPUT_POST, $key, FILTER_DEFAULT ); // phpcs:ignore WordPressVIPMinimum.Security.PHPFilterFunctions.RestrictedFilter + break; + } + } + + // Store values. + if ( $meta_value ) { + update_post_meta( $post_id, $key, $meta_value ); + } else { + delete_post_meta( $post_id, $key ); + } + } + } + + /** + * Add Custom Class to setting meta box + * + * @param array $classes Array of meta box classes. + * @return array $classes updated body classes. + */ + public function add_class_to_metabox( $classes ) { + $classes[] = 'aiosrs-schema-meta-box-wrap'; + return $classes; + } + + + + /** + * Redirect to aiosrs admin page. + * + * @return void + */ + public function redirect_custom_post_type() { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return; + } + global $pagenow; + /* Check current admin page. */ + + if ( 'edit.php' === $pagenow && isset( $_GET['post_type'] ) && 'aiosrs-schema' === $_GET['post_type'] ) { + $url = BSF_AIOSRS_Pro_Admin::get_page_url( self::$wp_schema_action ); + wp_safe_redirect( $url, 301 ); + exit; + } + + } + + /** + * Back to Schemas link + */ + public function back_to_schema() { // phpcs:ignore WordPressVIPMinimum.Hooks.AlwaysReturnInFilter.VoidReturn, WordPressVIPMinimum.Hooks.AlwaysReturnInFilter.MissingReturnStatement + global $post_type; + if ( 'aiosrs-schema' !== $post_type ) { + return; + } + $url = BSF_AIOSRS_Pro_Admin::get_page_url( self::$wp_schema_action ); + ?> +
            +

            + + + +

            +
            + esc_html__( 'Schemas', 'wp-schema-pro' ), + 'show' => ! is_network_admin(), + ); + return $actions; + } + + /** + * Render Schemas Setting page + */ + public function setting_page() { + $list_table_instance = new BSF_Custom_Post_List_Table( 'aiosrs-schema' ); + $list_table_instance->render_markup(); + } + + /** + * Create AIOSRS Schemas custom post type + */ + public function schema_post_type() { + $labels = array( + 'name' => esc_html_x( 'Schemas', 'aiosrs-schemas general name', 'wp-schema-pro' ), + 'singular_name' => esc_html_x( 'Schema', 'aiosrs-schemas singular name', 'wp-schema-pro' ), + 'search_items' => esc_html__( 'Search Schema', 'wp-schema-pro' ), + 'all_items' => esc_html__( 'All Schemas', 'wp-schema-pro' ), + 'edit_item' => esc_html__( 'Edit Schema', 'wp-schema-pro' ), + 'view_item' => esc_html__( 'View Schema', 'wp-schema-pro' ), + 'add_new' => esc_html__( 'Add New', 'wp-schema-pro' ), + 'update_item' => esc_html__( 'Update Schema', 'wp-schema-pro' ), + 'add_new_item' => esc_html__( 'Add New', 'wp-schema-pro' ), + 'new_item_name' => esc_html__( 'New Schema Name', 'wp-schema-pro' ), + ); + $args = array( + 'labels' => $labels, + 'show_in_menu' => false, + 'public' => false, + 'show_ui' => true, + 'query_var' => true, + 'can_export' => true, + 'supports' => apply_filters( 'wp_schema_pro_schema_supports', array( 'title' ) ), + ); + + register_post_type( 'aiosrs-schema', apply_filters( 'wp_schema_pro_schema_post_type_args', $args ) ); + } + + /** + * Add Update messages for any custom post type + * + * @param array $messages Array of default messages. + */ + public function custom_post_type_post_update_messages( $messages ) { + if ( isset( $_REQUEST['wp_schema_pro_admin_page_nonce'] ) && ! wp_verify_nonce( sanitize_text_field( $_REQUEST['wp_schema_pro_admin_page_nonce'] ), 'wp_schema_pro_admin_page' ) ) { + return false; + } + $custom_post_type = get_post_type( get_the_ID() ); + + if ( 'aiosrs-schema' === $custom_post_type ) { + + $obj = get_post_type_object( $custom_post_type ); + $singular_name = $obj->labels->singular_name; + $messages[ $custom_post_type ] = array( + 0 => '', // Unused. Messages start at index 1. + /* translators: %s: singular custom post type name */ + 1 => sprintf( __( '%s updated.', 'wp-schema-pro' ), $singular_name ), + /* translators: %s: singular custom post type name */ + 2 => sprintf( __( 'Custom %s updated.', 'wp-schema-pro' ), $singular_name ), + /* translators: %s: singular custom post type name */ + 3 => sprintf( __( 'Custom %s deleted.', 'wp-schema-pro' ), $singular_name ), + /* translators: %s: singular custom post type name */ + 4 => sprintf( __( '%s updated.', 'wp-schema-pro' ), $singular_name ), + /* translators: %1$s: singular custom post type name ,%2$s: date and time of the revision */ + 5 => isset( $_GET['revision'] ) ? sprintf( __( '%1$s restored to revision from %2$s', 'wp-schema-pro' ), $singular_name, wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, + /* translators: %s: singular custom post type name */ + 6 => sprintf( __( '%s published.', 'wp-schema-pro' ), $singular_name ), + /* translators: %s: singular custom post type name */ + 7 => sprintf( __( '%s saved.', 'wp-schema-pro' ), $singular_name ), + /* translators: %s: singular custom post type name */ + 8 => sprintf( __( '%s submitted.', 'wp-schema-pro' ), $singular_name ), + /* translators: %s: singular custom post type name */ + 9 => sprintf( __( '%s scheduled for.', 'wp-schema-pro' ), $singular_name ), + /* translators: %s: singular custom post type name */ + 10 => sprintf( __( '%s draft updated.', 'wp-schema-pro' ), $singular_name ), + ); + } + + return $messages; + } + + } +} + +/** + * Kicking this off by calling 'get_instance()' method + */ +BSF_AIOSRS_Pro_Schema::get_instance(); diff --git a/wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-setup-wizard.php b/wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-setup-wizard.php new file mode 100644 index 00000000..40453d0b --- /dev/null +++ b/wp/wp-content/plugins/wp-schema-pro/classes/class-bsf-aiosrs-pro-setup-wizard.php @@ -0,0 +1,702 @@ +steps = array( + 'welcome' => array( + 'name' => __('Welcome', 'wp-schema-pro'), + 'view' => array($this, 'welcome'), + ), + 'general-setting' => array( + 'name' => __('General', 'wp-schema-pro'), + 'view' => array($this, 'general_setting'), + 'handler' => array($this, 'general_setting_save'), + ), + 'social-profiles' => array( + 'name' => __('Social Profiles', 'wp-schema-pro'), + 'view' => array($this, 'social_profiles'), + 'handler' => array($this, 'social_profiles_save'), + ), + 'global-schemas' => array( + 'name' => __('Other Schemas', 'wp-schema-pro'), + 'view' => array($this, 'global_schemas'), + 'handler' => array($this, 'global_schemas_save'), + ), + 'success' => array( + 'name' => __('Done', 'wp-schema-pro'), + 'view' => array($this, 'success'), + 'handler' => '', + ), + ); + + $this->step = isset($_GET['step']) ? sanitize_key($_GET['step']) : current(array_keys($this->steps)); + + wp_enqueue_style('aiosrs-pro-setup-wizard', BSF_AIOSRS_PRO_URI . 'admin/assets/' . BSF_AIOSRS_Pro_Admin::$minfy_css . 'setup-wizard.' . BSF_AIOSRS_Pro_Admin::$minfy_css_ext, array('dashicons', 'install'), BSF_AIOSRS_PRO_VER); + wp_enqueue_style('aiosrs-pro-admin-edit-style', BSF_AIOSRS_PRO_URI . 'admin/assets/' . BSF_AIOSRS_Pro_Admin::$minfy_css . 'style.' . BSF_AIOSRS_Pro_Admin::$minfy_css_ext, BSF_AIOSRS_PRO_VER, 'false'); + wp_enqueue_style('aiosrs-pro-admin-settings-style', BSF_AIOSRS_PRO_URI . 'admin/assets/' . BSF_AIOSRS_Pro_Admin::$minfy_css . 'settings-style.' . BSF_AIOSRS_Pro_Admin::$minfy_css_ext, BSF_AIOSRS_PRO_VER, 'false'); + wp_register_script('aiosrs-pro-settings-script', BSF_AIOSRS_PRO_URI . 'admin/assets/' . BSF_AIOSRS_Pro_Admin::$minfy_js . 'settings-script.' . BSF_AIOSRS_Pro_Admin::$minfy_js_ext, array('jquery', 'bsf-target-rule-select2', 'wp-i18n'), BSF_AIOSRS_PRO_VER, true); + wp_enqueue_media(); + wp_enqueue_script('media'); + wp_enqueue_style('bsf-target-rule-select2', BSF_AIOSRS_PRO_URI . 'classes/lib/target-rule/select2.css', '', BSF_AIOSRS_PRO_VER, false); + wp_register_script('bsf-target-rule-select2', BSF_AIOSRS_PRO_URI . 'classes/lib/target-rule/select2.js', array('jquery', 'backbone', 'wp-util'), BSF_AIOSRS_PRO_VER, true); + wp_localize_script( + 'aiosrs-pro-settings-script', + 'AIOSRS_search', + apply_filters( + 'aiosrs_pro_settings_script_localize', + array( + 'search_field' => wp_create_nonce('spec_schema'), + ) + ) + ); + wp_register_script('aiosrs-pro-setup-wizard', BSF_AIOSRS_PRO_URI . 'admin/assets/' . BSF_AIOSRS_Pro_Admin::$minfy_js . 'setup-wizard.' . BSF_AIOSRS_Pro_Admin::$minfy_js_ext, array('jquery'), BSF_AIOSRS_PRO_VER, true); + if (isset($_POST['_wpnonce']) && wp_verify_nonce(sanitize_text_field($_POST['_wpnonce']), 'aiosrs-pro-setup-wizard') && !empty($_POST['save_step']) && isset($this->steps[$this->step]['handler'])) { + call_user_func($this->steps[$this->step]['handler']); + } + + ob_start(); + $this->setup_wizard_header(); + $this->setup_wizard_steps(); + $this->setup_wizard_content(); + $this->setup_wizard_footer(); + exit; + } + + /** + * Get previous step link + */ + public function get_prev_step_link() + { + $keys = array_keys($this->steps); + return add_query_arg('step', $keys[array_search($this->step, array_keys($this->steps), true) - 1]); + } + + /** + * Get next step link + */ + public function get_next_step_link() + { + $keys = array_keys($this->steps); + return add_query_arg('step', $keys[array_search($this->step, array_keys($this->steps), true) + 1]); + } + + /** + * Setup Wizard Header. + */ + public function setup_wizard_header() + { + ?> + + + + + + + <?php esc_html_e('Schema Setup', 'wp-schema-pro'); ?> + + + + + + + + + +
            + +
            + + + + + + steps; + ?> +
              + $step) : + $classes = ''; + if ($step_key === $this->step) { + $classes = 'active'; + } elseif (array_search($this->step, array_keys($this->steps), true) > array_search($step_key, array_keys($this->steps), true)) { + $classes = 'done'; + } + $url = add_query_arg('step', $step_key) + ?> +
            1. + +
            2. + +
            + step) . '-content-wrap">'; + call_user_func($this->steps[$this->step]['view']); + echo '